Merge "Schema is not PostgreSQL connection parameter"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 7 Nov 2014 19:02:18 +0000 (19:02 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 7 Nov 2014 19:02:18 +0000 (19:02 +0000)
1999 files changed:
.rubocop.yml [new file with mode: 0644]
.rubocop_todo.yml [new file with mode: 0644]
COPYING
CREDITS
Gemfile [new file with mode: 0644]
Gemfile.lock [new file with mode: 0644]
INSTALL
RELEASE-NOTES-1.24
RELEASE-NOTES-1.25 [new file with mode: 0644]
api.php
composer.json
docs/database.txt
docs/export-0.10.xsd [new file with mode: 0644]
docs/export-demo.xml
docs/hooks.txt
docs/kss/Makefile
docs/kss/styleguide-template/index.html
docs/kss/styleguide-template/public/kss.less
docs/mwlogger.txt [new file with mode: 0644]
docs/skin.txt
docs/uidesign/design.html
img_auth.php
includes/AutoLoader.php
includes/Block.php
includes/CategoryFinder.php [new file with mode: 0644]
includes/CategoryViewer.php
includes/Categoryfinder.php [deleted file]
includes/ChangeTags.php
includes/Cookie.php [deleted file]
includes/DefaultSettings.php
includes/Defines.php
includes/EditPage.php
includes/Export.php
includes/Feed.php
includes/GlobalFunctions.php
includes/HistoryBlob.php
includes/Hooks.php
includes/Html.php
includes/HttpFunctions.php
includes/Import.php
includes/Linker.php
includes/MagicWord.php
includes/MediaWiki.php
includes/MediaWikiVersionFetcher.php
includes/Message.php
includes/MimeMagic.php
includes/MovePage.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/SiteConfiguration.php
includes/SiteStats.php
includes/StatCounter.php
includes/Status.php
includes/TimestampException.php [deleted file]
includes/Title.php
includes/User.php
includes/UserMailer.php [deleted file]
includes/WatchedItem.php
includes/WebRequest.php
includes/WebStart.php
includes/actions/Action.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/actions/RawAction.php
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiClearHasMsg.php [new file with mode: 0644]
includes/api/ApiComparePages.php
includes/api/ApiCreateAccount.php
includes/api/ApiDelete.php
includes/api/ApiDisabled.php
includes/api/ApiEditPage.php
includes/api/ApiEmailUser.php
includes/api/ApiExpandTemplates.php
includes/api/ApiFeedContributions.php
includes/api/ApiFeedRecentChanges.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiFileRevert.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatDbg.php
includes/api/ApiFormatDump.php
includes/api/ApiFormatFeedWrapper.php [new file with mode: 0644]
includes/api/ApiFormatJson.php
includes/api/ApiFormatNone.php
includes/api/ApiFormatPhp.php
includes/api/ApiFormatRaw.php
includes/api/ApiFormatTxt.php
includes/api/ApiFormatWddx.php
includes/api/ApiFormatXml.php
includes/api/ApiFormatYaml.php
includes/api/ApiHelp.php
includes/api/ApiImageRotate.php
includes/api/ApiImport.php
includes/api/ApiLogin.php
includes/api/ApiLogout.php
includes/api/ApiMain.php
includes/api/ApiModuleManager.php
includes/api/ApiMove.php
includes/api/ApiOpenSearch.php
includes/api/ApiOptions.php
includes/api/ApiPageSet.php
includes/api/ApiParamInfo.php
includes/api/ApiParse.php
includes/api/ApiPatrol.php
includes/api/ApiProtect.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllCategories.php
includes/api/ApiQueryAllDeletedRevisions.php [new file with mode: 0644]
includes/api/ApiQueryAllImages.php
includes/api/ApiQueryAllLinks.php
includes/api/ApiQueryAllMessages.php
includes/api/ApiQueryAllPages.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryBacklinksprop.php [new file with mode: 0644]
includes/api/ApiQueryBase.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryCategoryInfo.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryContributors.php
includes/api/ApiQueryDeletedRevisions.php [new file with mode: 0644]
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryDisabled.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryExtLinksUsage.php
includes/api/ApiQueryExternalLinks.php
includes/api/ApiQueryFileRepoInfo.php
includes/api/ApiQueryFilearchive.php
includes/api/ApiQueryIWBacklinks.php
includes/api/ApiQueryIWLinks.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryImages.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLangBacklinks.php
includes/api/ApiQueryLangLinks.php
includes/api/ApiQueryLinks.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryORM.php
includes/api/ApiQueryPagePropNames.php
includes/api/ApiQueryPageProps.php
includes/api/ApiQueryPagesWithProp.php
includes/api/ApiQueryPrefixSearch.php
includes/api/ApiQueryProtectedTitles.php
includes/api/ApiQueryQueryPage.php
includes/api/ApiQueryRandom.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRedirects.php [deleted file]
includes/api/ApiQueryRevisions.php
includes/api/ApiQueryRevisionsBase.php [new file with mode: 0644]
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryStashImageInfo.php
includes/api/ApiQueryTags.php
includes/api/ApiQueryTokens.php [new file with mode: 0644]
includes/api/ApiQueryUserContributions.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryUsers.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiQueryWatchlistRaw.php
includes/api/ApiResult.php
includes/api/ApiRevisionDelete.php
includes/api/ApiRollback.php
includes/api/ApiRsd.php
includes/api/ApiSetNotificationTimestamp.php
includes/api/ApiTokens.php
includes/api/ApiUnblock.php
includes/api/ApiUndelete.php
includes/api/ApiUpload.php
includes/api/ApiUserrights.php
includes/api/ApiWatch.php
includes/api/i18n/be-tarask.json [new file with mode: 0644]
includes/api/i18n/ce.json [new file with mode: 0644]
includes/api/i18n/cs.json [new file with mode: 0644]
includes/api/i18n/de.json [new file with mode: 0644]
includes/api/i18n/en-gb.json [new file with mode: 0644]
includes/api/i18n/en.json [new file with mode: 0644]
includes/api/i18n/es.json [new file with mode: 0644]
includes/api/i18n/fa.json [new file with mode: 0644]
includes/api/i18n/fr.json [new file with mode: 0644]
includes/api/i18n/fy.json [new file with mode: 0644]
includes/api/i18n/he.json [new file with mode: 0644]
includes/api/i18n/hu.json [new file with mode: 0644]
includes/api/i18n/ia.json [new file with mode: 0644]
includes/api/i18n/it.json [new file with mode: 0644]
includes/api/i18n/ja.json [new file with mode: 0644]
includes/api/i18n/jam.json [new file with mode: 0644]
includes/api/i18n/lb.json [new file with mode: 0644]
includes/api/i18n/lv.json [new file with mode: 0644]
includes/api/i18n/mk.json [new file with mode: 0644]
includes/api/i18n/ms.json [new file with mode: 0644]
includes/api/i18n/nb.json [new file with mode: 0644]
includes/api/i18n/nl.json [new file with mode: 0644]
includes/api/i18n/pa.json [new file with mode: 0644]
includes/api/i18n/pl.json [new file with mode: 0644]
includes/api/i18n/pt.json [new file with mode: 0644]
includes/api/i18n/qqq.json [new file with mode: 0644]
includes/api/i18n/ru.json [new file with mode: 0644]
includes/api/i18n/si.json [new file with mode: 0644]
includes/api/i18n/sv.json [new file with mode: 0644]
includes/api/i18n/tr.json [new file with mode: 0644]
includes/api/i18n/uk.json [new file with mode: 0644]
includes/api/i18n/vi.json [new file with mode: 0644]
includes/api/i18n/zh-hans.json [new file with mode: 0644]
includes/api/i18n/zh-hant.json [new file with mode: 0644]
includes/cache/HTMLFileCache.php
includes/cache/LinkCache.php
includes/cache/LocalisationCache.php
includes/cache/MessageCache.php
includes/cache/bloom/BloomCache.php [new file with mode: 0644]
includes/cache/bloom/BloomCacheRedis.php [new file with mode: 0644]
includes/cache/bloom/BloomFilters.php [new file with mode: 0644]
includes/changes/ChangesList.php
includes/changes/OldChangesList.php
includes/changes/RecentChange.php
includes/config/Config.php
includes/config/GlobalVarConfig.php
includes/config/HashConfig.php [new file with mode: 0644]
includes/config/MultiConfig.php [new file with mode: 0644]
includes/config/MutableConfig.php [new file with mode: 0644]
includes/content/AbstractContent.php
includes/content/CodeContentHandler.php [new file with mode: 0644]
includes/content/CssContent.php
includes/content/CssContentHandler.php
includes/content/JSONContent.php [deleted file]
includes/content/JSONContentHandler.php [deleted file]
includes/content/JavaScriptContent.php
includes/content/JavaScriptContentHandler.php
includes/content/JsonContent.php [new file with mode: 0644]
includes/content/JsonContentHandler.php [new file with mode: 0644]
includes/content/MessageContent.php
includes/content/TextContent.php
includes/content/TextContentHandler.php
includes/content/WikitextContent.php
includes/content/WikitextContentHandler.php
includes/context/RequestContext.php
includes/db/Database.php
includes/db/DatabaseError.php
includes/db/DatabaseMssql.php
includes/db/DatabaseMysql.php
includes/db/DatabaseMysqlBase.php
includes/db/DatabaseMysqli.php
includes/db/DatabaseSqlite.php
includes/db/IORMTable.php
includes/db/LoadBalancer.php
includes/db/LoadMonitor.php
includes/db/ORMTable.php
includes/debug/MWDebug.php
includes/debug/logger/Logger.php [new file with mode: 0644]
includes/debug/logger/NullSpi.php [new file with mode: 0644]
includes/debug/logger/Spi.php [new file with mode: 0644]
includes/debug/logger/legacy/Logger.php [new file with mode: 0644]
includes/debug/logger/legacy/Spi.php [new file with mode: 0644]
includes/debug/logger/monolog/Handler.php [new file with mode: 0644]
includes/debug/logger/monolog/Processor.php [new file with mode: 0644]
includes/debug/logger/monolog/Spi.php [new file with mode: 0644]
includes/deferred/SiteStatsUpdate.php
includes/deferred/SqlDataUpdate.php
includes/deferred/SquidUpdate.php
includes/deferred/ViewCountUpdate.php [deleted file]
includes/diff/DifferenceEngine.php
includes/exception/MWExceptionHandler.php
includes/exception/TimestampException.php [new file with mode: 0644]
includes/exception/UserNotLoggedIn.php
includes/externalstore/ExternalStoreDB.php
includes/filebackend/FileBackend.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/lockmanager/LockManager.php
includes/filerepo/FileRepo.php
includes/filerepo/file/ArchivedFile.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/filerepo/file/OldLocalFile.php
includes/gallery/PackedOverlayImageGallery.php
includes/htmlform/HTMLAutoCompleteSelectField.php [new file with mode: 0644]
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/htmlform/HTMLFormFieldCloner.php
includes/htmlform/HTMLHiddenField.php
includes/htmlform/HTMLMultiSelectField.php
includes/htmlform/HTMLSelectNamespace.php [new file with mode: 0644]
includes/htmlform/HTMLTagFilter.php [new file with mode: 0644]
includes/htmlform/HTMLTextField.php
includes/installer/CliInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerOutput.php
includes/installer/WebInstallerPage.php
includes/installer/i18n/be-tarask.json
includes/installer/i18n/be.json
includes/installer/i18n/bn.json
includes/installer/i18n/br.json
includes/installer/i18n/ca.json
includes/installer/i18n/cs.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/fi.json
includes/installer/i18n/fr.json
includes/installer/i18n/fy.json
includes/installer/i18n/gl.json
includes/installer/i18n/he.json
includes/installer/i18n/hu.json
includes/installer/i18n/ia.json
includes/installer/i18n/it.json
includes/installer/i18n/ja.json
includes/installer/i18n/ko.json
includes/installer/i18n/ksh.json
includes/installer/i18n/lb.json
includes/installer/i18n/lzh.json
includes/installer/i18n/mai.json
includes/installer/i18n/mfe.json [new file with mode: 0644]
includes/installer/i18n/mk.json
includes/installer/i18n/ms.json
includes/installer/i18n/mt.json
includes/installer/i18n/nap.json
includes/installer/i18n/nb.json
includes/installer/i18n/ne.json
includes/installer/i18n/nl.json
includes/installer/i18n/oc.json
includes/installer/i18n/pa.json
includes/installer/i18n/pl.json
includes/installer/i18n/pt-br.json
includes/installer/i18n/pt.json
includes/installer/i18n/qqq.json
includes/installer/i18n/ro.json
includes/installer/i18n/ru.json
includes/installer/i18n/sco.json
includes/installer/i18n/sk.json
includes/installer/i18n/sl.json
includes/installer/i18n/su.json
includes/installer/i18n/sv.json
includes/installer/i18n/tl.json
includes/installer/i18n/tr.json
includes/installer/i18n/uk.json
includes/installer/i18n/vi.json
includes/installer/i18n/zh-hans.json
includes/installer/i18n/zh-hant.json
includes/jobqueue/Job.php
includes/jobqueue/JobQueueDB.php
includes/jobqueue/JobQueueGroup.php
includes/jobqueue/JobQueueRedis.php
includes/jobqueue/JobRunner.php
includes/jobqueue/jobs/AssembleUploadChunksJob.php
includes/jobqueue/jobs/PublishStashedFileJob.php
includes/jobqueue/jobs/ThumbnailRenderJob.php [new file with mode: 0644]
includes/json/FormatJson.php
includes/libs/APACHE-LICENSE-2.0.txt [new file with mode: 0644]
includes/libs/ArrayUtils.php [new file with mode: 0644]
includes/libs/CSSJanus.php [deleted file]
includes/libs/CSSMin.php
includes/libs/Cookie.php [new file with mode: 0644]
includes/libs/ObjectFactory.php [new file with mode: 0644]
includes/libs/ProcessCacheLRU.php
includes/libs/XmlTypeCheck.php
includes/libs/jsminplus.php
includes/limit.sh [changed mode: 0644->0755]
includes/logging/LogEntry.php
includes/logging/LogEventsList.php
includes/logging/LogFormatter.php
includes/logging/LogPage.php
includes/logging/MergeLogFormatter.php [new file with mode: 0644]
includes/logging/MoveLogFormatter.php
includes/mail/EmailNotification.php [new file with mode: 0644]
includes/mail/MailAddress.php [new file with mode: 0644]
includes/mail/UserMailer.php [new file with mode: 0644]
includes/media/Bitmap.php
includes/media/DjVuImage.php
includes/media/ExifBitmap.php
includes/media/MediaHandler.php
includes/media/PNG.php
includes/media/TransformationalImageHandler.php [new file with mode: 0644]
includes/media/XCF.php
includes/mime.info
includes/mime.types
includes/objectcache/BagOStuff.php
includes/objectcache/HashBagOStuff.php
includes/objectcache/MemcachedBagOStuff.php
includes/objectcache/MemcachedPeclBagOStuff.php
includes/objectcache/MultiWriteBagOStuff.php
includes/objectcache/SqlBagOStuff.php
includes/page/Article.php
includes/page/ImagePage.php
includes/page/WikiPage.php
includes/pager/IndexPager.php
includes/pager/ReverseChronologicalPager.php
includes/pager/TablePager.php
includes/parser/CoreParserFunctions.php
includes/parser/CoreTagHooks.php
includes/parser/Parser.php
includes/parser/ParserOptions.php
includes/parser/ParserOutput.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/password/MWOldPassword.php
includes/password/ParameterizedPassword.php
includes/password/PasswordFactory.php
includes/profiler/ProfileSection.php [new file with mode: 0644]
includes/profiler/Profiler.php
includes/profiler/ProfilerFunctions.php [new file with mode: 0644]
includes/profiler/ProfilerMwprof.php [deleted file]
includes/profiler/ProfilerSimpleDB.php
includes/profiler/ProfilerSimpleText.php
includes/profiler/ProfilerSimpleTrace.php
includes/profiler/ProfilerSimpleUDP.php
includes/profiler/ProfilerStandard.php
includes/profiler/ProfilerStub.php
includes/profiler/TransactionProfiler.php [new file with mode: 0644]
includes/rcfeed/MachineReadableRCFeedFormatter.php
includes/resourceloader/DerivativeResourceLoaderContext.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderContext.php
includes/resourceloader/ResourceLoaderEditToolbarModule.php [new file with mode: 0644]
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderLESSFunctions.php [deleted file]
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderSkinModule.php [new file with mode: 0644]
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php
includes/resourceloader/ResourceLoaderUserGroupsModule.php
includes/resourceloader/ResourceLoaderUserOptionsModule.php
includes/resourceloader/ResourceLoaderUserTokensModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/search/SearchHighlighter.php
includes/search/SearchMssql.php
includes/search/SearchOracle.php
includes/search/SearchPostgres.php
includes/search/SearchResult.php
includes/search/SearchResultSet.php
includes/site/SiteSQLStore.php
includes/skins/BaseTemplate.php [new file with mode: 0644]
includes/skins/MediaWikiI18N.php [new file with mode: 0644]
includes/skins/QuickTemplate.php [new file with mode: 0644]
includes/skins/Skin.php
includes/skins/SkinApi.php [new file with mode: 0644]
includes/skins/SkinApiTemplate.php [new file with mode: 0644]
includes/skins/SkinFactory.php
includes/skins/SkinFallbackTemplate.php
includes/skins/SkinTemplate.php
includes/specialpage/QueryPage.php
includes/specialpage/RedirectSpecialPage.php
includes/specialpage/SpecialPage.php
includes/specialpage/SpecialPageFactory.php
includes/specialpage/WantedQueryPage.php
includes/specials/SpecialActiveusers.php
includes/specials/SpecialAllMessages.php
includes/specials/SpecialAllPages.php
includes/specials/SpecialApiHelp.php [new file with mode: 0644]
includes/specials/SpecialBlock.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialBooksources.php
includes/specials/SpecialCategories.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialContributions.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialEmailuser.php
includes/specials/SpecialExpandTemplates.php
includes/specials/SpecialImport.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialListfiles.php
includes/specials/SpecialListgrouprights.php
includes/specials/SpecialListusers.php
includes/specials/SpecialLog.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialMediaStatistics.php [new file with mode: 0644]
includes/specials/SpecialMergeHistory.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialPageLanguage.php
includes/specials/SpecialPopularpages.php [deleted file]
includes/specials/SpecialPreferences.php
includes/specials/SpecialProtectedpages.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRunJobs.php
includes/specials/SpecialSearch.php
includes/specials/SpecialStatistics.php
includes/specials/SpecialTrackingCategories.php
includes/specials/SpecialUnblock.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWantedfiles.php
includes/specials/SpecialWatchlist.php
includes/specials/SpecialWhatlinkshere.php
includes/templates/NoLocalSettings.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
includes/upload/UploadBase.php
includes/upload/UploadStash.php
includes/utils/ArrayUtils.php [deleted file]
includes/utils/MWFunction.php
includes/utils/UIDGenerator.php
index.php
languages/Language.php
languages/LanguageConverter.php
languages/Names.php
languages/data/plurals-mediawiki.xml
languages/data/plurals.xml
languages/i18n/ab.json
languages/i18n/ace.json
languages/i18n/aeb.json
languages/i18n/af.json
languages/i18n/ak.json
languages/i18n/aln.json
languages/i18n/am.json
languages/i18n/an.json
languages/i18n/ang.json
languages/i18n/anp.json
languages/i18n/ar.json
languages/i18n/arc.json
languages/i18n/arn.json
languages/i18n/arq.json
languages/i18n/ary.json
languages/i18n/arz.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/av.json
languages/i18n/avk.json
languages/i18n/ay.json
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/bar.json
languages/i18n/bbc-latn.json
languages/i18n/bcc.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bg.json
languages/i18n/bho.json
languages/i18n/bi.json
languages/i18n/bjn.json
languages/i18n/bm.json
languages/i18n/bn.json
languages/i18n/bo.json
languages/i18n/bpy.json
languages/i18n/bqi.json
languages/i18n/br.json
languages/i18n/brh.json
languages/i18n/bs.json
languages/i18n/bto.json [new file with mode: 0644]
languages/i18n/bug.json
languages/i18n/bxr.json
languages/i18n/ca.json
languages/i18n/cbk-zam.json
languages/i18n/cdo.json
languages/i18n/ce.json
languages/i18n/ceb.json
languages/i18n/ch.json
languages/i18n/chr.json
languages/i18n/ckb.json
languages/i18n/co.json
languages/i18n/cps.json
languages/i18n/crh-cyrl.json
languages/i18n/crh-latn.json
languages/i18n/cs.json
languages/i18n/csb.json
languages/i18n/cu.json
languages/i18n/cv.json
languages/i18n/cy.json
languages/i18n/da.json
languages/i18n/de-ch.json
languages/i18n/de-formal.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dsb.json
languages/i18n/dtp.json
languages/i18n/dv.json
languages/i18n/dz.json
languages/i18n/ee.json
languages/i18n/egl.json
languages/i18n/el.json
languages/i18n/eml.json
languages/i18n/en-gb.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/ff.json
languages/i18n/fi.json
languages/i18n/fit.json
languages/i18n/fj.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/gag.json
languages/i18n/gan-hans.json
languages/i18n/gan-hant.json
languages/i18n/gd.json
languages/i18n/gl.json
languages/i18n/glk.json
languages/i18n/gn.json
languages/i18n/gom-latn.json
languages/i18n/got.json
languages/i18n/grc.json
languages/i18n/gsw.json
languages/i18n/gu.json
languages/i18n/gv.json
languages/i18n/ha.json
languages/i18n/hak.json
languages/i18n/haw.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hif-latn.json
languages/i18n/hil.json
languages/i18n/hr.json
languages/i18n/hrx.json
languages/i18n/hsb.json
languages/i18n/ht.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ie.json
languages/i18n/ig.json
languages/i18n/ike-cans.json
languages/i18n/ike-latn.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/jam.json
languages/i18n/jbo.json
languages/i18n/jut.json
languages/i18n/jv.json
languages/i18n/ka.json
languages/i18n/kaa.json
languages/i18n/kab.json
languages/i18n/kbd-cyrl.json
languages/i18n/kg.json
languages/i18n/khw.json
languages/i18n/kiu.json
languages/i18n/kk-arab.json
languages/i18n/kk-cyrl.json
languages/i18n/kk-latn.json
languages/i18n/kl.json
languages/i18n/km.json
languages/i18n/kn.json
languages/i18n/ko.json
languages/i18n/koi.json
languages/i18n/krc.json
languages/i18n/kri.json
languages/i18n/krj.json
languages/i18n/ks-arab.json
languages/i18n/ksh.json
languages/i18n/ku-latn.json
languages/i18n/kv.json
languages/i18n/kw.json
languages/i18n/ky.json
languages/i18n/la.json
languages/i18n/lad.json
languages/i18n/lb.json
languages/i18n/lbe.json
languages/i18n/lez.json
languages/i18n/lfn.json
languages/i18n/lg.json
languages/i18n/li.json
languages/i18n/lij.json
languages/i18n/liv.json
languages/i18n/lmo.json
languages/i18n/ln.json
languages/i18n/lo.json
languages/i18n/loz.json
languages/i18n/lrc.json
languages/i18n/lt.json
languages/i18n/ltg.json
languages/i18n/lus.json
languages/i18n/lv.json
languages/i18n/lzh.json
languages/i18n/lzz.json
languages/i18n/mai.json
languages/i18n/map-bms.json
languages/i18n/mdf.json
languages/i18n/mg.json
languages/i18n/mhr.json
languages/i18n/mi.json
languages/i18n/min.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mn.json
languages/i18n/mo.json
languages/i18n/mr.json
languages/i18n/mrj.json
languages/i18n/ms.json
languages/i18n/mt.json
languages/i18n/mwl.json
languages/i18n/my.json
languages/i18n/myv.json
languages/i18n/mzn.json
languages/i18n/na.json
languages/i18n/nah.json
languages/i18n/nan.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/nds.json
languages/i18n/ne.json
languages/i18n/new.json
languages/i18n/niu.json
languages/i18n/nl-informal.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/nov.json
languages/i18n/nso.json
languages/i18n/nv.json
languages/i18n/oc.json
languages/i18n/om.json
languages/i18n/or.json
languages/i18n/os.json
languages/i18n/pa.json
languages/i18n/pag.json
languages/i18n/pam.json
languages/i18n/pap.json
languages/i18n/pcd.json
languages/i18n/pdc.json
languages/i18n/pdt.json
languages/i18n/pfl.json
languages/i18n/pi.json
languages/i18n/pih.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pnb.json
languages/i18n/pnt.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/qug.json
languages/i18n/rgn.json
languages/i18n/rif.json
languages/i18n/rm.json
languages/i18n/rmy.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/rup.json
languages/i18n/ruq-cyrl.json
languages/i18n/ruq-latn.json
languages/i18n/sa.json
languages/i18n/sah.json
languages/i18n/sat.json
languages/i18n/sc.json
languages/i18n/scn.json
languages/i18n/sco.json
languages/i18n/sd.json
languages/i18n/sdc.json
languages/i18n/se.json
languages/i18n/sei.json
languages/i18n/ses.json [new file with mode: 0644]
languages/i18n/sg.json
languages/i18n/sgs.json
languages/i18n/sh.json
languages/i18n/shi.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sli.json
languages/i18n/sm.json
languages/i18n/sma.json
languages/i18n/sn.json
languages/i18n/so.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/srn.json
languages/i18n/ss.json
languages/i18n/st.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/ti.json
languages/i18n/tk.json
languages/i18n/tl.json
languages/i18n/tly.json
languages/i18n/tn.json
languages/i18n/to.json
languages/i18n/tokipona.json
languages/i18n/tpi.json
languages/i18n/tr.json
languages/i18n/tru.json
languages/i18n/ts.json
languages/i18n/tt-cyrl.json
languages/i18n/tt-latn.json
languages/i18n/ty.json
languages/i18n/tyv.json
languages/i18n/tzm.json
languages/i18n/udm.json
languages/i18n/ug-arab.json
languages/i18n/ug-latn.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/vls.json
languages/i18n/vmf.json
languages/i18n/vo.json
languages/i18n/vot.json
languages/i18n/vro.json
languages/i18n/wa.json
languages/i18n/war.json
languages/i18n/wo.json
languages/i18n/wuu.json
languages/i18n/xal.json
languages/i18n/xh.json
languages/i18n/xmf.json
languages/i18n/yi.json
languages/i18n/yo.json
languages/i18n/yue.json
languages/i18n/za.json
languages/i18n/zea.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/i18n/zu.json
languages/messages/MessagesAf.php
languages/messages/MessagesAng.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesArz.php
languages/messages/MessagesAs.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBr.php
languages/messages/MessagesBxr.php
languages/messages/MessagesCdo.php
languages/messages/MessagesCe.php
languages/messages/MessagesCkb.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesEl.php
languages/messages/MessagesEn.php
languages/messages/MessagesEo.php
languages/messages/MessagesEs.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFr.php
languages/messages/MessagesGsw.php
languages/messages/MessagesHe.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHt.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesKa.php
languages/messages/MessagesKm.php
languages/messages/MessagesKo.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesKw.php
languages/messages/MessagesLb.php
languages/messages/MessagesMai.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMr.php
languages/messages/MessagesMyv.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesPa.php
languages/messages/MessagesPl.php
languages/messages/MessagesQu.php
languages/messages/MessagesRu.php
languages/messages/MessagesScn.php
languages/messages/MessagesSes.php [new file with mode: 0644]
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSv.php
languages/messages/MessagesTh.php
languages/messages/MessagesTly.php
languages/messages/MessagesTr.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesTyv.php
languages/messages/MessagesUk.php
languages/messages/MessagesVi.php
languages/messages/MessagesYue.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
load.php
maintenance/Maintenance.php
maintenance/archives/patch-restructure.sql [deleted file]
maintenance/cleanupBlocks.php [new file with mode: 0644]
maintenance/cleanupCaps.php
maintenance/cleanupRemovedModules.php
maintenance/cleanupTitles.php
maintenance/cssjanus/COPYING [deleted file]
maintenance/cssjanus/LICENSE [deleted file]
maintenance/cssjanus/README [deleted file]
maintenance/cssjanus/cssjanus.py [deleted file]
maintenance/cssjanus/csslex.py [deleted file]
maintenance/deleteEqualMessages.php
maintenance/dev/includes/php.sh [changed mode: 0644->0755]
maintenance/dev/includes/require-php.sh [changed mode: 0644->0755]
maintenance/dictionary/mediawiki.dic
maintenance/doMaintenance.php
maintenance/dumpIterator.php
maintenance/eval.php
maintenance/findHooks.php
maintenance/findMissingFiles.php
maintenance/generateSitemap.php
maintenance/importDump.php
maintenance/importSiteScripts.php
maintenance/initSiteStats.php
maintenance/jsduck/CustomTags.rb
maintenance/jsduck/categories.json
maintenance/jsduck/config.json
maintenance/language/generateCollationData.php
maintenance/moveBatch.php
maintenance/mwdoc-filter.php
maintenance/oracle/tables.sql
maintenance/oracle/update-keys.sql [new file with mode: 0644]
maintenance/populateBloomCache.php [new file with mode: 0644]
maintenance/postgres/compare_schemas.pl [changed mode: 0644->0755]
maintenance/postgres/mediawiki_mysql2postgres.pl [changed mode: 0644->0755]
maintenance/preprocessorFuzzTest.php
maintenance/purgeOldText.inc [deleted file]
maintenance/renderDump.php
maintenance/resources/update-oojs-ui.sh
maintenance/showJobs.php
maintenance/showSiteStats.php
maintenance/sql.php
maintenance/storage/checkStorage.php
maintenance/storage/make-blobs [changed mode: 0644->0755]
maintenance/update-keys.sql
maintenance/update.php
maintenance/updateCollation.php
maintenance/updateSpecialPages.php
mw-config/config.js
mw-config/images/installer-logo.png
mw-config/index.php
resources/Resources.php
resources/assets/file-type-icons/COPYING [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-c.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-cpp.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-deb.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-djvu.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-djvu.xcf [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-dvi.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-exe.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-h.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-html.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-iso.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-java.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-mid.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-mov.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-o.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-ogg.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-ogg.xcf [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-pdf.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-ps.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-psd.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-rm.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-rpm.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-svg.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-tar.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-tex.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-ttf.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-txt.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon-xcf.png [new file with mode: 0644]
resources/assets/file-type-icons/fileicon.png [new file with mode: 0644]
resources/assets/licenses/cc-0.png [new file with mode: 0644]
resources/assets/licenses/cc-by-nc-sa.png [new file with mode: 0644]
resources/assets/licenses/cc-by-sa.png [new file with mode: 0644]
resources/assets/licenses/cc-by.png [new file with mode: 0644]
resources/assets/licenses/gnu-fdl.png [new file with mode: 0644]
resources/assets/licenses/public-domain.png [new file with mode: 0644]
resources/assets/mediawiki.png [new file with mode: 0644]
resources/assets/poweredby_mediawiki_88x31.png [new file with mode: 0644]
resources/assets/wiki.png [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/jquery.ui.core.css
resources/lib/jquery/jquery.jStorage.js
resources/lib/jquery/jquery.json.js [deleted file]
resources/lib/moment/lang/af.js [deleted file]
resources/lib/moment/lang/ar-ma.js [deleted file]
resources/lib/moment/lang/ar-sa.js [deleted file]
resources/lib/moment/lang/ar.js [deleted file]
resources/lib/moment/lang/az.js [deleted file]
resources/lib/moment/lang/be.js [deleted file]
resources/lib/moment/lang/bg.js [deleted file]
resources/lib/moment/lang/bn.js [deleted file]
resources/lib/moment/lang/bo.js [deleted file]
resources/lib/moment/lang/br.js [deleted file]
resources/lib/moment/lang/bs.js [deleted file]
resources/lib/moment/lang/ca.js [deleted file]
resources/lib/moment/lang/cs.js [deleted file]
resources/lib/moment/lang/cv.js [deleted file]
resources/lib/moment/lang/cy.js [deleted file]
resources/lib/moment/lang/da.js [deleted file]
resources/lib/moment/lang/de-at.js [deleted file]
resources/lib/moment/lang/de.js [deleted file]
resources/lib/moment/lang/el.js [deleted file]
resources/lib/moment/lang/en-au.js [deleted file]
resources/lib/moment/lang/en-ca.js [deleted file]
resources/lib/moment/lang/en-gb.js [deleted file]
resources/lib/moment/lang/eo.js [deleted file]
resources/lib/moment/lang/es.js [deleted file]
resources/lib/moment/lang/et.js [deleted file]
resources/lib/moment/lang/eu.js [deleted file]
resources/lib/moment/lang/fa.js [deleted file]
resources/lib/moment/lang/fi.js [deleted file]
resources/lib/moment/lang/fo.js [deleted file]
resources/lib/moment/lang/fr-ca.js [deleted file]
resources/lib/moment/lang/fr.js [deleted file]
resources/lib/moment/lang/gl.js [deleted file]
resources/lib/moment/lang/he.js [deleted file]
resources/lib/moment/lang/hi.js [deleted file]
resources/lib/moment/lang/hr.js [deleted file]
resources/lib/moment/lang/hu.js [deleted file]
resources/lib/moment/lang/hy-am.js [deleted file]
resources/lib/moment/lang/id.js [deleted file]
resources/lib/moment/lang/is.js [deleted file]
resources/lib/moment/lang/it.js [deleted file]
resources/lib/moment/lang/ja.js [deleted file]
resources/lib/moment/lang/ka.js [deleted file]
resources/lib/moment/lang/km.js [deleted file]
resources/lib/moment/lang/ko.js [deleted file]
resources/lib/moment/lang/lb.js [deleted file]
resources/lib/moment/lang/lt.js [deleted file]
resources/lib/moment/lang/lv.js [deleted file]
resources/lib/moment/lang/mk.js [deleted file]
resources/lib/moment/lang/ml.js [deleted file]
resources/lib/moment/lang/mr.js [deleted file]
resources/lib/moment/lang/ms-my.js [deleted file]
resources/lib/moment/lang/my.js [deleted file]
resources/lib/moment/lang/nb.js [deleted file]
resources/lib/moment/lang/ne.js [deleted file]
resources/lib/moment/lang/nl.js [deleted file]
resources/lib/moment/lang/nn.js [deleted file]
resources/lib/moment/lang/pl.js [deleted file]
resources/lib/moment/lang/pt-br.js [deleted file]
resources/lib/moment/lang/pt.js [deleted file]
resources/lib/moment/lang/ro.js [deleted file]
resources/lib/moment/lang/ru.js [deleted file]
resources/lib/moment/lang/sk.js [deleted file]
resources/lib/moment/lang/sl.js [deleted file]
resources/lib/moment/lang/sq.js [deleted file]
resources/lib/moment/lang/sr-cyrl.js [deleted file]
resources/lib/moment/lang/sr.js [deleted file]
resources/lib/moment/lang/sv.js [deleted file]
resources/lib/moment/lang/ta.js [deleted file]
resources/lib/moment/lang/th.js [deleted file]
resources/lib/moment/lang/tl-ph.js [deleted file]
resources/lib/moment/lang/tr.js [deleted file]
resources/lib/moment/lang/tzm-latn.js [deleted file]
resources/lib/moment/lang/tzm.js [deleted file]
resources/lib/moment/lang/uk.js [deleted file]
resources/lib/moment/lang/uz.js [deleted file]
resources/lib/moment/lang/vi.js [deleted file]
resources/lib/moment/lang/zh-cn.js [deleted file]
resources/lib/moment/lang/zh-tw.js [deleted file]
resources/lib/moment/locale/af.js [new file with mode: 0644]
resources/lib/moment/locale/ar-ma.js [new file with mode: 0644]
resources/lib/moment/locale/ar-sa.js [new file with mode: 0644]
resources/lib/moment/locale/ar.js [new file with mode: 0644]
resources/lib/moment/locale/az.js [new file with mode: 0644]
resources/lib/moment/locale/be.js [new file with mode: 0644]
resources/lib/moment/locale/bg.js [new file with mode: 0644]
resources/lib/moment/locale/bn.js [new file with mode: 0644]
resources/lib/moment/locale/bo.js [new file with mode: 0644]
resources/lib/moment/locale/br.js [new file with mode: 0644]
resources/lib/moment/locale/bs.js [new file with mode: 0644]
resources/lib/moment/locale/ca.js [new file with mode: 0644]
resources/lib/moment/locale/cs.js [new file with mode: 0644]
resources/lib/moment/locale/cv.js [new file with mode: 0644]
resources/lib/moment/locale/cy.js [new file with mode: 0644]
resources/lib/moment/locale/da.js [new file with mode: 0644]
resources/lib/moment/locale/de-at.js [new file with mode: 0644]
resources/lib/moment/locale/de.js [new file with mode: 0644]
resources/lib/moment/locale/el.js [new file with mode: 0644]
resources/lib/moment/locale/en-au.js [new file with mode: 0644]
resources/lib/moment/locale/en-ca.js [new file with mode: 0644]
resources/lib/moment/locale/en-gb.js [new file with mode: 0644]
resources/lib/moment/locale/eo.js [new file with mode: 0644]
resources/lib/moment/locale/es.js [new file with mode: 0644]
resources/lib/moment/locale/et.js [new file with mode: 0644]
resources/lib/moment/locale/eu.js [new file with mode: 0644]
resources/lib/moment/locale/fa.js [new file with mode: 0644]
resources/lib/moment/locale/fi.js [new file with mode: 0644]
resources/lib/moment/locale/fo.js [new file with mode: 0644]
resources/lib/moment/locale/fr-ca.js [new file with mode: 0644]
resources/lib/moment/locale/fr.js [new file with mode: 0644]
resources/lib/moment/locale/gl.js [new file with mode: 0644]
resources/lib/moment/locale/he.js [new file with mode: 0644]
resources/lib/moment/locale/hi.js [new file with mode: 0644]
resources/lib/moment/locale/hr.js [new file with mode: 0644]
resources/lib/moment/locale/hu.js [new file with mode: 0644]
resources/lib/moment/locale/hy-am.js [new file with mode: 0644]
resources/lib/moment/locale/id.js [new file with mode: 0644]
resources/lib/moment/locale/is.js [new file with mode: 0644]
resources/lib/moment/locale/it.js [new file with mode: 0644]
resources/lib/moment/locale/ja.js [new file with mode: 0644]
resources/lib/moment/locale/ka.js [new file with mode: 0644]
resources/lib/moment/locale/km.js [new file with mode: 0644]
resources/lib/moment/locale/ko.js [new file with mode: 0644]
resources/lib/moment/locale/lb.js [new file with mode: 0644]
resources/lib/moment/locale/lt.js [new file with mode: 0644]
resources/lib/moment/locale/lv.js [new file with mode: 0644]
resources/lib/moment/locale/mk.js [new file with mode: 0644]
resources/lib/moment/locale/ml.js [new file with mode: 0644]
resources/lib/moment/locale/mr.js [new file with mode: 0644]
resources/lib/moment/locale/ms-my.js [new file with mode: 0644]
resources/lib/moment/locale/my.js [new file with mode: 0644]
resources/lib/moment/locale/nb.js [new file with mode: 0644]
resources/lib/moment/locale/ne.js [new file with mode: 0644]
resources/lib/moment/locale/nl.js [new file with mode: 0644]
resources/lib/moment/locale/nn.js [new file with mode: 0644]
resources/lib/moment/locale/pl.js [new file with mode: 0644]
resources/lib/moment/locale/pt-br.js [new file with mode: 0644]
resources/lib/moment/locale/pt.js [new file with mode: 0644]
resources/lib/moment/locale/ro.js [new file with mode: 0644]
resources/lib/moment/locale/ru.js [new file with mode: 0644]
resources/lib/moment/locale/sk.js [new file with mode: 0644]
resources/lib/moment/locale/sl.js [new file with mode: 0644]
resources/lib/moment/locale/sq.js [new file with mode: 0644]
resources/lib/moment/locale/sr-cyrl.js [new file with mode: 0644]
resources/lib/moment/locale/sr.js [new file with mode: 0644]
resources/lib/moment/locale/sv.js [new file with mode: 0644]
resources/lib/moment/locale/ta.js [new file with mode: 0644]
resources/lib/moment/locale/th.js [new file with mode: 0644]
resources/lib/moment/locale/tl-ph.js [new file with mode: 0644]
resources/lib/moment/locale/tr.js [new file with mode: 0644]
resources/lib/moment/locale/tzm-latn.js [new file with mode: 0644]
resources/lib/moment/locale/tzm.js [new file with mode: 0644]
resources/lib/moment/locale/uk.js [new file with mode: 0644]
resources/lib/moment/locale/uz.js [new file with mode: 0644]
resources/lib/moment/locale/vi.js [new file with mode: 0644]
resources/lib/moment/locale/zh-cn.js [new file with mode: 0644]
resources/lib/moment/locale/zh-tw.js [new file with mode: 0644]
resources/lib/moment/moment.js
resources/lib/oojs-ui/i18n/ace.json
resources/lib/oojs-ui/i18n/af.json
resources/lib/oojs-ui/i18n/am.json
resources/lib/oojs-ui/i18n/arc.json
resources/lib/oojs-ui/i18n/az.json
resources/lib/oojs-ui/i18n/ba.json
resources/lib/oojs-ui/i18n/bcc.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/bcl.json
resources/lib/oojs-ui/i18n/be-tarask.json
resources/lib/oojs-ui/i18n/be.json
resources/lib/oojs-ui/i18n/bg.json
resources/lib/oojs-ui/i18n/bn.json
resources/lib/oojs-ui/i18n/br.json
resources/lib/oojs-ui/i18n/bs.json
resources/lib/oojs-ui/i18n/ce.json
resources/lib/oojs-ui/i18n/ckb.json
resources/lib/oojs-ui/i18n/co.json
resources/lib/oojs-ui/i18n/cs.json
resources/lib/oojs-ui/i18n/cu.json
resources/lib/oojs-ui/i18n/cy.json
resources/lib/oojs-ui/i18n/da.json
resources/lib/oojs-ui/i18n/de.json
resources/lib/oojs-ui/i18n/diq.json
resources/lib/oojs-ui/i18n/dsb.json
resources/lib/oojs-ui/i18n/egl.json
resources/lib/oojs-ui/i18n/eml.json
resources/lib/oojs-ui/i18n/en.json
resources/lib/oojs-ui/i18n/eo.json
resources/lib/oojs-ui/i18n/es.json
resources/lib/oojs-ui/i18n/et.json
resources/lib/oojs-ui/i18n/eu.json
resources/lib/oojs-ui/i18n/fi.json
resources/lib/oojs-ui/i18n/fo.json
resources/lib/oojs-ui/i18n/fr.json
resources/lib/oojs-ui/i18n/frr.json
resources/lib/oojs-ui/i18n/fur.json
resources/lib/oojs-ui/i18n/fy.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/he.json
resources/lib/oojs-ui/i18n/hi.json
resources/lib/oojs-ui/i18n/hsb.json
resources/lib/oojs-ui/i18n/hy.json
resources/lib/oojs-ui/i18n/id.json
resources/lib/oojs-ui/i18n/ie.json
resources/lib/oojs-ui/i18n/is.json
resources/lib/oojs-ui/i18n/it.json
resources/lib/oojs-ui/i18n/ja.json
resources/lib/oojs-ui/i18n/jv.json
resources/lib/oojs-ui/i18n/ka.json
resources/lib/oojs-ui/i18n/kk-cyrl.json
resources/lib/oojs-ui/i18n/km.json
resources/lib/oojs-ui/i18n/ko.json
resources/lib/oojs-ui/i18n/krc.json
resources/lib/oojs-ui/i18n/kw.json
resources/lib/oojs-ui/i18n/ky.json
resources/lib/oojs-ui/i18n/lb.json
resources/lib/oojs-ui/i18n/lmo.json
resources/lib/oojs-ui/i18n/lt.json
resources/lib/oojs-ui/i18n/lzh.json
resources/lib/oojs-ui/i18n/mg.json
resources/lib/oojs-ui/i18n/min.json
resources/lib/oojs-ui/i18n/mk.json
resources/lib/oojs-ui/i18n/ml.json
resources/lib/oojs-ui/i18n/mr.json
resources/lib/oojs-ui/i18n/nap.json
resources/lib/oojs-ui/i18n/nds-nl.json
resources/lib/oojs-ui/i18n/nds.json
resources/lib/oojs-ui/i18n/ne.json
resources/lib/oojs-ui/i18n/nn.json
resources/lib/oojs-ui/i18n/oc.json
resources/lib/oojs-ui/i18n/or.json
resources/lib/oojs-ui/i18n/pa.json
resources/lib/oojs-ui/i18n/pfl.json
resources/lib/oojs-ui/i18n/pl.json
resources/lib/oojs-ui/i18n/pms.json
resources/lib/oojs-ui/i18n/ps.json
resources/lib/oojs-ui/i18n/pt-br.json
resources/lib/oojs-ui/i18n/pt.json
resources/lib/oojs-ui/i18n/qqq.json
resources/lib/oojs-ui/i18n/qu.json
resources/lib/oojs-ui/i18n/ro.json
resources/lib/oojs-ui/i18n/roa-tara.json
resources/lib/oojs-ui/i18n/ru.json
resources/lib/oojs-ui/i18n/sah.json
resources/lib/oojs-ui/i18n/scn.json
resources/lib/oojs-ui/i18n/sco.json
resources/lib/oojs-ui/i18n/sh.json
resources/lib/oojs-ui/i18n/si.json
resources/lib/oojs-ui/i18n/sk.json
resources/lib/oojs-ui/i18n/sr-el.json
resources/lib/oojs-ui/i18n/sv.json
resources/lib/oojs-ui/i18n/sw.json
resources/lib/oojs-ui/i18n/ta.json
resources/lib/oojs-ui/i18n/te.json
resources/lib/oojs-ui/i18n/tg-cyrl.json
resources/lib/oojs-ui/i18n/th.json
resources/lib/oojs-ui/i18n/tl.json
resources/lib/oojs-ui/i18n/tt-cyrl.json
resources/lib/oojs-ui/i18n/uz.json
resources/lib/oojs-ui/i18n/vec.json
resources/lib/oojs-ui/i18n/vi.json
resources/lib/oojs-ui/i18n/vo.json
resources/lib/oojs-ui/i18n/yo.json
resources/lib/oojs-ui/i18n/zh-hans.json
resources/lib/oojs-ui/i18n/zh-hant.json
resources/lib/oojs-ui/images/anchor.svg [deleted file]
resources/lib/oojs-ui/images/icons/accept.png [deleted file]
resources/lib/oojs-ui/images/icons/accept.svg [deleted file]
resources/lib/oojs-ui/images/icons/add-item.png [deleted file]
resources/lib/oojs-ui/images/icons/add-item.svg [deleted file]
resources/lib/oojs-ui/images/icons/advanced.png [deleted file]
resources/lib/oojs-ui/images/icons/advanced.svg [deleted file]
resources/lib/oojs-ui/images/icons/alert.png [deleted file]
resources/lib/oojs-ui/images/icons/alert.svg [deleted file]
resources/lib/oojs-ui/images/icons/arched-arrow-ltr.png [deleted file]
resources/lib/oojs-ui/images/icons/arched-arrow-ltr.svg [deleted file]
resources/lib/oojs-ui/images/icons/arched-arrow-rtl.png [deleted file]
resources/lib/oojs-ui/images/icons/arched-arrow-rtl.svg [deleted file]
resources/lib/oojs-ui/images/icons/check.png [deleted file]
resources/lib/oojs-ui/images/icons/check.svg [deleted file]
resources/lib/oojs-ui/images/icons/clear.png [deleted file]
resources/lib/oojs-ui/images/icons/clear.svg [deleted file]
resources/lib/oojs-ui/images/icons/close.png [deleted file]
resources/lib/oojs-ui/images/icons/close.svg [deleted file]
resources/lib/oojs-ui/images/icons/code.png [deleted file]
resources/lib/oojs-ui/images/icons/code.svg [deleted file]
resources/lib/oojs-ui/images/icons/collapse.png [deleted file]
resources/lib/oojs-ui/images/icons/collapse.svg [deleted file]
resources/lib/oojs-ui/images/icons/comment.png [deleted file]
resources/lib/oojs-ui/images/icons/comment.svg [deleted file]
resources/lib/oojs-ui/images/icons/expand.png [deleted file]
resources/lib/oojs-ui/images/icons/expand.svg [deleted file]
resources/lib/oojs-ui/images/icons/help.png [deleted file]
resources/lib/oojs-ui/images/icons/help.svg [deleted file]
resources/lib/oojs-ui/images/icons/history.png [deleted file]
resources/lib/oojs-ui/images/icons/history.svg [deleted file]
resources/lib/oojs-ui/images/icons/info.png [deleted file]
resources/lib/oojs-ui/images/icons/info.svg [deleted file]
resources/lib/oojs-ui/images/icons/link.png [deleted file]
resources/lib/oojs-ui/images/icons/link.svg [deleted file]
resources/lib/oojs-ui/images/icons/menu.png [deleted file]
resources/lib/oojs-ui/images/icons/menu.svg [deleted file]
resources/lib/oojs-ui/images/icons/move-ltr.png [deleted file]
resources/lib/oojs-ui/images/icons/move-ltr.svg [deleted file]
resources/lib/oojs-ui/images/icons/move-rtl.png [deleted file]
resources/lib/oojs-ui/images/icons/move-rtl.svg [deleted file]
resources/lib/oojs-ui/images/icons/picture.png [deleted file]
resources/lib/oojs-ui/images/icons/picture.svg [deleted file]
resources/lib/oojs-ui/images/icons/remove-item.png [deleted file]
resources/lib/oojs-ui/images/icons/remove-item.svg [deleted file]
resources/lib/oojs-ui/images/icons/remove.png [deleted file]
resources/lib/oojs-ui/images/icons/remove.svg [deleted file]
resources/lib/oojs-ui/images/icons/search.png [deleted file]
resources/lib/oojs-ui/images/icons/search.svg [deleted file]
resources/lib/oojs-ui/images/icons/settings.png [deleted file]
resources/lib/oojs-ui/images/icons/settings.svg [deleted file]
resources/lib/oojs-ui/images/icons/tag.png [deleted file]
resources/lib/oojs-ui/images/icons/tag.svg [deleted file]
resources/lib/oojs-ui/images/icons/window.png [deleted file]
resources/lib/oojs-ui/images/icons/window.svg [deleted file]
resources/lib/oojs-ui/images/indicators/alert.png [deleted file]
resources/lib/oojs-ui/images/indicators/alert.svg [deleted file]
resources/lib/oojs-ui/images/indicators/arrow-down.png [deleted file]
resources/lib/oojs-ui/images/indicators/arrow-down.svg [deleted file]
resources/lib/oojs-ui/images/indicators/arrow-ltr.png [deleted file]
resources/lib/oojs-ui/images/indicators/arrow-ltr.svg [deleted file]
resources/lib/oojs-ui/images/indicators/arrow-rtl.png [deleted file]
resources/lib/oojs-ui/images/indicators/arrow-rtl.svg [deleted file]
resources/lib/oojs-ui/images/indicators/arrow-up.png [deleted file]
resources/lib/oojs-ui/images/indicators/arrow-up.svg [deleted file]
resources/lib/oojs-ui/images/indicators/required.png [deleted file]
resources/lib/oojs-ui/images/indicators/required.svg [deleted file]
resources/lib/oojs-ui/images/textures/pending.gif [deleted file]
resources/lib/oojs-ui/images/textures/transparency.png [deleted file]
resources/lib/oojs-ui/images/toolbar-shadow.png [deleted file]
resources/lib/oojs-ui/oojs-ui-agora.css [deleted file]
resources/lib/oojs-ui/oojs-ui-agora.rtl.css [deleted file]
resources/lib/oojs-ui/oojs-ui-apex.css
resources/lib/oojs-ui/oojs-ui-apex.js [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-apex.rtl.css [deleted file]
resources/lib/oojs-ui/oojs-ui-apex.svg.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki.js [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui.css [deleted file]
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/oojs-ui.rtl.css [deleted file]
resources/lib/oojs-ui/oojs-ui.svg.css [deleted file]
resources/lib/oojs-ui/oojs-ui.svg.rtl.css [deleted file]
resources/lib/oojs-ui/themes/agora/images/icons/check.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/add.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/add.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/advanced.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/advanced.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/alert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/alert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/check.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/check.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/clear.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/clear.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/close.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/close.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/code.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/code.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/collapse.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/collapse.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/comment.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/comment.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/expand.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/expand.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/help.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/help.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/info.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/info.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/link.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/link.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/menu.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/menu.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/picture.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/picture.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/remove.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/remove.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/search.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/search.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/settings.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/settings.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/tag.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/tag.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/window.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/window.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/alert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/alert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/required.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/required.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/textures/pending.gif [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/textures/transparency.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/textures/transparency.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/toolbar-shadow.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/add.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/add.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/code.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/info.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/window.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/window.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/textures/pending.gif [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.svg [new file with mode: 0644]
resources/lib/oojs/oojs.jquery.js
resources/src/jquery.json-deprecate.js [deleted file]
resources/src/jquery/jquery.autoEllipsis.js
resources/src/jquery/jquery.badge.css
resources/src/jquery/jquery.byteLimit.js
resources/src/jquery/jquery.confirmable.js
resources/src/jquery/jquery.confirmable.mediawiki.js
resources/src/jquery/jquery.farbtastic.js
resources/src/jquery/jquery.getAttrs.js
resources/src/jquery/jquery.hidpi.js
resources/src/jquery/jquery.mwExtension.js
resources/src/jquery/jquery.textSelection.js
resources/src/mediawiki.action/images/nextredirect-ltr.png [new file with mode: 0644]
resources/src/mediawiki.action/images/nextredirect-rtl.png [new file with mode: 0644]
resources/src/mediawiki.action/images/redirect-ltr.png [new file with mode: 0644]
resources/src/mediawiki.action/images/redirect-rtl.png [new file with mode: 0644]
resources/src/mediawiki.action/mediawiki.action.edit.css [new file with mode: 0644]
resources/src/mediawiki.action/mediawiki.action.edit.editWarning.js
resources/src/mediawiki.action/mediawiki.action.edit.js
resources/src/mediawiki.action/mediawiki.action.edit.styles.css
resources/src/mediawiki.action/mediawiki.action.history.diff.css
resources/src/mediawiki.action/mediawiki.action.view.dblClickEdit.js
resources/src/mediawiki.action/mediawiki.action.view.metadata.css [new file with mode: 0644]
resources/src/mediawiki.action/mediawiki.action.view.metadata.js
resources/src/mediawiki.action/mediawiki.action.view.postEdit.js
resources/src/mediawiki.action/mediawiki.action.view.redirect.js
resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css [new file with mode: 0644]
resources/src/mediawiki.action/templates/postEdit.html [new file with mode: 0644]
resources/src/mediawiki.api/mediawiki.api.category.js
resources/src/mediawiki.api/mediawiki.api.edit.js
resources/src/mediawiki.api/mediawiki.api.js
resources/src/mediawiki.api/mediawiki.api.parse.js
resources/src/mediawiki.api/mediawiki.api.watch.js
resources/src/mediawiki.language/languages/fi.js
resources/src/mediawiki.language/languages/he.js
resources/src/mediawiki.language/languages/hy.js
resources/src/mediawiki.language/languages/os.js
resources/src/mediawiki.language/languages/ru.js
resources/src/mediawiki.language/languages/uk.js
resources/src/mediawiki.language/mediawiki.language.js
resources/src/mediawiki.language/mediawiki.language.numbers.js
resources/src/mediawiki.legacy/ajax.js [new file with mode: 0644]
resources/src/mediawiki.legacy/commonPrint.css [new file with mode: 0644]
resources/src/mediawiki.legacy/images/ajax-loader.gif [new file with mode: 0644]
resources/src/mediawiki.legacy/images/checker.png [new file with mode: 0644]
resources/src/mediawiki.legacy/images/feed-icon.png [new file with mode: 0644]
resources/src/mediawiki.legacy/images/feed-icon.svg [new file with mode: 0644]
resources/src/mediawiki.legacy/images/help-question-hover.gif [new file with mode: 0644]
resources/src/mediawiki.legacy/images/help-question.gif [new file with mode: 0644]
resources/src/mediawiki.legacy/images/question.png [new file with mode: 0644]
resources/src/mediawiki.legacy/images/question.svg [new file with mode: 0644]
resources/src/mediawiki.legacy/images/spinner.gif [new file with mode: 0644]
resources/src/mediawiki.legacy/oldshared.css [new file with mode: 0644]
resources/src/mediawiki.legacy/protect.js [new file with mode: 0644]
resources/src/mediawiki.legacy/shared.css [new file with mode: 0644]
resources/src/mediawiki.legacy/wikibits.js [new file with mode: 0644]
resources/src/mediawiki.less/mediawiki.mixins.less
resources/src/mediawiki.less/mediawiki.ui/variables.less
resources/src/mediawiki.libs/CLDRPluralRuleParser.js
resources/src/mediawiki.page/mediawiki.page.image.pagination.js
resources/src/mediawiki.page/mediawiki.page.ready.js
resources/src/mediawiki.skinning/content.css [new file with mode: 0644]
resources/src/mediawiki.skinning/content.externallinks.css [new file with mode: 0644]
resources/src/mediawiki.skinning/content.parsoid.less
resources/src/mediawiki.skinning/elements.css [new file with mode: 0644]
resources/src/mediawiki.skinning/images/audio-ltr.png [new file with mode: 0644]
resources/src/mediawiki.skinning/images/audio-ltr.svg [new file with mode: 0644]
resources/src/mediawiki.skinning/images/audio-rtl.png [new file with mode: 0644]
resources/src/mediawiki.skinning/images/audio-rtl.svg [new file with mode: 0644]
resources/src/mediawiki.skinning/images/chat-ltr.png [new file with mode: 0644]
resources/src/mediawiki.skinning/images/chat-ltr.svg [new file with mode: 0644]
resources/src/mediawiki.skinning/images/chat-rtl.png [new file with mode: 0644]
resources/src/mediawiki.skinning/images/chat-rtl.svg [new file with mode: 0644]
resources/src/mediawiki.skinning/images/document-ltr.png [new file with mode: 0644]
resources/src/mediawiki.skinning/images/document-ltr.svg [new file with mode: 0644]
resources/src/mediawiki.skinning/images/document-rtl.png [new file with mode: 0644]
resources/src/mediawiki.skinning/images/document-rtl.svg [new file with mode: 0644]
resources/src/mediawiki.skinning/images/external link icons.svg [new file with mode: 0644]
resources/src/mediawiki.skinning/images/external-ltr.png [new file with mode: 0644]
resources/src/mediawiki.skinning/images/external-ltr.svg [new file with mode: 0644]
resources/src/mediawiki.skinning/images/external-rtl.png [new file with mode: 0644]
resources/src/mediawiki.skinning/images/external-rtl.svg [new file with mode: 0644]
resources/src/mediawiki.skinning/images/ftp-ltr.png [new file with mode: 0644]
resources/src/mediawiki.skinning/images/ftp-ltr.svg [new file with mode: 0644]
resources/src/mediawiki.skinning/images/ftp-rtl.png [new file with mode: 0644]
resources/src/mediawiki.skinning/images/ftp-rtl.svg [new file with mode: 0644]
resources/src/mediawiki.skinning/images/magnify-clip-ltr.png [new file with mode: 0644]
resources/src/mediawiki.skinning/images/magnify-clip-rtl.png [new file with mode: 0644]
resources/src/mediawiki.skinning/images/mail.png [new file with mode: 0644]
resources/src/mediawiki.skinning/images/mail.svg [new file with mode: 0644]
resources/src/mediawiki.skinning/images/video.png [new file with mode: 0644]
resources/src/mediawiki.skinning/images/video.svg [new file with mode: 0644]
resources/src/mediawiki.skinning/interface.css [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.changeslist.legend.css
resources/src/mediawiki.special/mediawiki.special.css
resources/src/mediawiki.special/mediawiki.special.preferences.css
resources/src/mediawiki.special/mediawiki.special.preferences.js
resources/src/mediawiki.special/mediawiki.special.search.css
resources/src/mediawiki.special/mediawiki.special.search.js
resources/src/mediawiki.special/mediawiki.special.upload.js
resources/src/mediawiki.special/mediawiki.special.userlogin.common.css
resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js
resources/src/mediawiki.special/mediawiki.special.version.css
resources/src/mediawiki.special/templates/thumbnail.html [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/ar/button_bold.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/ar/button_headline.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/ar/button_italic.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/ar/button_link.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/ar/button_nowiki.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/be-tarask/button_link.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/de/button_bold.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/de/button_italic.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/en/button_bold.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/en/button_extlink.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/en/button_headline.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/en/button_hr.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/en/button_image.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/en/button_italic.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/en/button_link.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/en/button_media.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/en/button_nowiki.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/en/button_sig.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/fa/button_bold.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/fa/button_headline.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/fa/button_italic.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/fa/button_link.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/fa/button_nowiki.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/ksh/LICENSE [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/ksh/button_italic.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/ru/LICENSE [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/ru/button_bold.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/ru/button_italic.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/images/ru/button_link.png [new file with mode: 0644]
resources/src/mediawiki.toolbar/toolbar.js [new file with mode: 0644]
resources/src/mediawiki.toolbar/toolbar.less [new file with mode: 0644]
resources/src/mediawiki.ui/components/anchors.less
resources/src/mediawiki.ui/components/buttons.less
resources/src/mediawiki.ui/components/checkbox.less
resources/src/mediawiki.ui/components/forms.less
resources/src/mediawiki.ui/components/icons.less [new file with mode: 0644]
resources/src/mediawiki.ui/components/images/ok.png [new file with mode: 0644]
resources/src/mediawiki.ui/components/images/ok.svg [new file with mode: 0644]
resources/src/mediawiki.ui/components/inputs.less
resources/src/mediawiki.ui/components/text.less [new file with mode: 0644]
resources/src/mediawiki/images/arrow-sort-ascending.png [new file with mode: 0644]
resources/src/mediawiki/images/arrow-sort-ascending.svg [new file with mode: 0644]
resources/src/mediawiki/images/arrow-sort-descending.png [new file with mode: 0644]
resources/src/mediawiki/images/arrow-sort-descending.svg [new file with mode: 0644]
resources/src/mediawiki/images/pager-arrow-disabled-fastforward-ltr.png [new file with mode: 0644]
resources/src/mediawiki/images/pager-arrow-disabled-fastforward-rtl.png [new file with mode: 0644]
resources/src/mediawiki/images/pager-arrow-disabled-forward-ltr.png [new file with mode: 0644]
resources/src/mediawiki/images/pager-arrow-disabled-forward-rtl.png [new file with mode: 0644]
resources/src/mediawiki/images/pager-arrow-fastforward-ltr.png [new file with mode: 0644]
resources/src/mediawiki/images/pager-arrow-fastforward-rtl.png [new file with mode: 0644]
resources/src/mediawiki/images/pager-arrow-forward-ltr.png [new file with mode: 0644]
resources/src/mediawiki/images/pager-arrow-forward-rtl.png [new file with mode: 0644]
resources/src/mediawiki/mediawiki.Title.js
resources/src/mediawiki/mediawiki.apihelp.css [new file with mode: 0644]
resources/src/mediawiki/mediawiki.apipretty.css [new file with mode: 0644]
resources/src/mediawiki/mediawiki.confirmCloseWindow.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.debug.js
resources/src/mediawiki/mediawiki.debug.profile.js
resources/src/mediawiki/mediawiki.feedback.js
resources/src/mediawiki/mediawiki.hlist.js
resources/src/mediawiki/mediawiki.htmlform.js
resources/src/mediawiki/mediawiki.inspect.js
resources/src/mediawiki/mediawiki.jqueryMsg.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.notification.js
resources/src/mediawiki/mediawiki.pager.tablePager.less [new file with mode: 0644]
resources/src/mediawiki/mediawiki.template.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.user.js
resources/src/mediawiki/mediawiki.userSuggest.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.util.js
resources/src/mediawiki/templates/dialog.html [new file with mode: 0644]
resources/src/polyfill-object-create.js [new file with mode: 0644]
resources/src/startup.js
skins/common/ajax.js [changed from file to symlink]
skins/common/commonContent.css [deleted file]
skins/common/commonElements.css [deleted file]
skins/common/commonInterface.css [deleted file]
skins/common/commonPrint.css [deleted file]
skins/common/images/Arr_d.png [deleted file]
skins/common/images/Arr_u.png [deleted file]
skins/common/images/Checker-16x16.png [deleted file]
skins/common/images/ajax-loader.gif [deleted file]
skins/common/images/ar/button_bold.png [deleted file]
skins/common/images/ar/button_headline.png [deleted file]
skins/common/images/ar/button_italic.png [deleted file]
skins/common/images/ar/button_link.png [deleted file]
skins/common/images/ar/button_nowiki.png [deleted file]
skins/common/images/arrow_disabled_first_25.png [deleted file]
skins/common/images/arrow_disabled_last_25.png [deleted file]
skins/common/images/arrow_disabled_left_25.png [deleted file]
skins/common/images/arrow_disabled_right_25.png [deleted file]
skins/common/images/arrow_first_25.png [deleted file]
skins/common/images/arrow_last_25.png [deleted file]
skins/common/images/arrow_left_25.png [deleted file]
skins/common/images/arrow_right_25.png [deleted file]
skins/common/images/be-tarask/button_bold.png [deleted file]
skins/common/images/be-tarask/button_italic.png [deleted file]
skins/common/images/be-tarask/button_link.png [deleted file]
skins/common/images/button_bold.png [deleted file]
skins/common/images/button_extlink.png [deleted file]
skins/common/images/button_headline.png [deleted file]
skins/common/images/button_hr.png [deleted file]
skins/common/images/button_image.png [deleted file]
skins/common/images/button_italic.png [deleted file]
skins/common/images/button_link.png [deleted file]
skins/common/images/button_media.png [deleted file]
skins/common/images/button_nowiki.png [deleted file]
skins/common/images/button_sig.png [deleted file]
skins/common/images/cc-0.png [deleted file]
skins/common/images/cc-by-nc-sa.png [deleted file]
skins/common/images/cc-by-sa.png [deleted file]
skins/common/images/cc-by.png [deleted file]
skins/common/images/closewindow19x19.png [deleted file]
skins/common/images/cyrl/LICENSE [deleted file]
skins/common/images/cyrl/button_bold.png [deleted file]
skins/common/images/cyrl/button_italic.png [deleted file]
skins/common/images/cyrl/button_link.png [deleted file]
skins/common/images/de/button_bold.png [deleted file]
skins/common/images/de/button_italic.png [deleted file]
skins/common/images/fa/button_bold.png [deleted file]
skins/common/images/fa/button_headline.png [deleted file]
skins/common/images/fa/button_italic.png [deleted file]
skins/common/images/fa/button_link.png [deleted file]
skins/common/images/fa/button_nowiki.png [deleted file]
skins/common/images/feed-icon.png [deleted file]
skins/common/images/feed-icon.svg [deleted file]
skins/common/images/gnu-fdl.png [deleted file]
skins/common/images/help-question-hover.gif [deleted file]
skins/common/images/help-question.gif [deleted file]
skins/common/images/icons/COPYING [deleted file]
skins/common/images/icons/fileicon-c.png [deleted file]
skins/common/images/icons/fileicon-cpp.png [deleted file]
skins/common/images/icons/fileicon-deb.png [deleted file]
skins/common/images/icons/fileicon-djvu.png [deleted file]
skins/common/images/icons/fileicon-djvu.xcf [deleted file]
skins/common/images/icons/fileicon-dvi.png [deleted file]
skins/common/images/icons/fileicon-exe.png [deleted file]
skins/common/images/icons/fileicon-h.png [deleted file]
skins/common/images/icons/fileicon-html.png [deleted file]
skins/common/images/icons/fileicon-iso.png [deleted file]
skins/common/images/icons/fileicon-java.png [deleted file]
skins/common/images/icons/fileicon-mid.png [deleted file]
skins/common/images/icons/fileicon-mov.png [deleted file]
skins/common/images/icons/fileicon-o.png [deleted file]
skins/common/images/icons/fileicon-ogg.png [deleted file]
skins/common/images/icons/fileicon-ogg.xcf [deleted file]
skins/common/images/icons/fileicon-pdf.png [deleted file]
skins/common/images/icons/fileicon-ps.png [deleted file]
skins/common/images/icons/fileicon-psd.png [deleted file]
skins/common/images/icons/fileicon-rm.png [deleted file]
skins/common/images/icons/fileicon-rpm.png [deleted file]
skins/common/images/icons/fileicon-svg.png [deleted file]
skins/common/images/icons/fileicon-tar.png [deleted file]
skins/common/images/icons/fileicon-tex.png [deleted file]
skins/common/images/icons/fileicon-ttf.png [deleted file]
skins/common/images/icons/fileicon-txt.png [deleted file]
skins/common/images/icons/fileicon-xcf.png [deleted file]
skins/common/images/icons/fileicon.png [deleted file]
skins/common/images/ksh/LICENSE [deleted file]
skins/common/images/ksh/button_S_italic.png [deleted file]
skins/common/images/magnify-clip-ltr.png [deleted file]
skins/common/images/mediawiki.png [deleted file]
skins/common/images/nextredirectltr.png [deleted file]
skins/common/images/nextredirectrtl.png [deleted file]
skins/common/images/poweredby_mediawiki_88x31.png [deleted file]
skins/common/images/public-domain.png [deleted file]
skins/common/images/question-small.png [deleted file]
skins/common/images/question.svg [deleted file]
skins/common/images/spinner.gif [deleted file]
skins/common/images/wiki.png [deleted file]
skins/common/oldshared.css [deleted file]
skins/common/protect.js [deleted file]
skins/common/shared.css [deleted file]
skins/common/upload.js [deleted file]
skins/common/wikibits.js [changed from file to symlink]
tests/TestsAutoLoader.php
tests/browser/Gemfile [deleted file]
tests/browser/Gemfile.lock [deleted file]
tests/browser/features/create_account.feature
tests/browser/features/create_and_follow_wiki_link.feature
tests/browser/features/edit_page.feature
tests/browser/features/file.feature
tests/browser/features/login.feature
tests/browser/features/main_page_links.feature
tests/browser/features/preferences.feature
tests/browser/features/support/pages/preferences_appearance_page.rb
tests/browser/features/view_history.feature
tests/frontend/Gruntfile.js
tests/frontend/package.json
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/parser/preprocess/All_system_messages.expected
tests/parser/preprocess/All_system_messages.txt
tests/parserTests.php
tests/phpunit/LessFileCompilationTest.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/ResourceLoaderTestCase.php
tests/phpunit/data/css/expected.css [new file with mode: 0644]
tests/phpunit/data/css/simple-ltr.gif [new file with mode: 0644]
tests/phpunit/data/css/simple-rtl.gif [new file with mode: 0644]
tests/phpunit/data/css/test.css [new file with mode: 0644]
tests/phpunit/data/cssmin/circle.svg [new file with mode: 0644]
tests/phpunit/data/localisationcache/en.json [new file with mode: 0644]
tests/phpunit/data/localisationcache/ru.json [new file with mode: 0644]
tests/phpunit/data/localisationcache/uk.json [new file with mode: 0644]
tests/phpunit/includes/ArticleTablesTest.php
tests/phpunit/includes/BlockTest.php
tests/phpunit/includes/EditPageTest.php
tests/phpunit/includes/GitInfoTest.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/GlobalFunctions/wfAppendQueryTest.php [new file with mode: 0644]
tests/phpunit/includes/GlobalFunctions/wfBaseConvertTest.php
tests/phpunit/includes/HttpTest.php
tests/phpunit/includes/ImportTest.php
tests/phpunit/includes/LinkerTest.php
tests/phpunit/includes/LocalisationCacheTest.php [deleted file]
tests/phpunit/includes/MWTimestampTest.php
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/MovePageTest.php [new file with mode: 0644]
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/PasswordTest.php
tests/phpunit/includes/PrefixSearchTest.php [new file with mode: 0644]
tests/phpunit/includes/RequestContextTest.php
tests/phpunit/includes/SampleTest.php
tests/phpunit/includes/SanitizerTest.php
tests/phpunit/includes/TestUser.php
tests/phpunit/includes/TitleArrayFromResultTest.php
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/UserArrayFromResultTest.php
tests/phpunit/includes/UserMailerTest.php [deleted file]
tests/phpunit/includes/UserTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/XmlJsTest.php
tests/phpunit/includes/actions/ActionTest.php
tests/phpunit/includes/api/ApiMainTest.php
tests/phpunit/includes/api/ApiModuleManagerTest.php
tests/phpunit/includes/api/ApiOptionsTest.php
tests/phpunit/includes/api/ApiTestCase.php
tests/phpunit/includes/api/PrefixUniquenessTest.php
tests/phpunit/includes/api/format/ApiFormatTestBase.php
tests/phpunit/includes/api/query/ApiQueryContinue2Test.php
tests/phpunit/includes/api/query/ApiQueryContinueTest.php
tests/phpunit/includes/api/query/ApiQueryContinueTestBase.php
tests/phpunit/includes/api/query/ApiQueryTest.php
tests/phpunit/includes/api/query/ApiQueryTestBase.php
tests/phpunit/includes/cache/LocalisationCacheTest.php [new file with mode: 0644]
tests/phpunit/includes/cache/RedisBloomCacheTest.php [new file with mode: 0644]
tests/phpunit/includes/changes/EnhancedChangesListTest.php [new file with mode: 0644]
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/config/GlobalVarConfigTest.php
tests/phpunit/includes/config/HashConfigTest.php [new file with mode: 0644]
tests/phpunit/includes/config/MultiConfigTest.php [new file with mode: 0644]
tests/phpunit/includes/content/ContentHandlerTest.php
tests/phpunit/includes/content/JSONContentTest.php [deleted file]
tests/phpunit/includes/content/JsonContentTest.php [new file with mode: 0644]
tests/phpunit/includes/content/TextContentTest.php
tests/phpunit/includes/content/WikitextContentTest.php
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/db/ORMTableTest.php
tests/phpunit/includes/db/TestORMRowTest.php
tests/phpunit/includes/debug/MWDebugTest.php
tests/phpunit/includes/deferred/DeferredUpdatesTest.php
tests/phpunit/includes/exception/MWExceptionTest.php
tests/phpunit/includes/htmlform/HTMLAutoCompleteSelectFieldTest.php [new file with mode: 0644]
tests/phpunit/includes/installer/DatabaseUpdaterTest.php [new file with mode: 0644]
tests/phpunit/includes/jobqueue/JobQueueTest.php
tests/phpunit/includes/jobqueue/JobTest.php [new file with mode: 0644]
tests/phpunit/includes/json/FormatJsonTest.php
tests/phpunit/includes/libs/CSSJanusTest.php [deleted file]
tests/phpunit/includes/libs/CSSMinTest.php
tests/phpunit/includes/libs/IPSetTest.php
tests/phpunit/includes/libs/MWMessagePackTest.php
tests/phpunit/includes/mail/MailAddressTest.php [new file with mode: 0644]
tests/phpunit/includes/mail/UserMailerTest.php [new file with mode: 0644]
tests/phpunit/includes/media/ExifRotationTest.php
tests/phpunit/includes/media/GIFTest.php
tests/phpunit/includes/media/PNGTest.php
tests/phpunit/includes/media/SVGMetadataExtractorTest.php
tests/phpunit/includes/media/SVGTest.php
tests/phpunit/includes/normal/CleanUpTest.php
tests/phpunit/includes/objectcache/BagOStuffTest.php
tests/phpunit/includes/parser/MediaWikiParserTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/includes/parser/ParserMethodsTest.php
tests/phpunit/includes/parser/TidyTest.php
tests/phpunit/includes/password/BcryptPasswordTest.php
tests/phpunit/includes/password/LayeredParameterizedPasswordTest.php
tests/phpunit/includes/password/PasswordTestCase.php
tests/phpunit/includes/password/Pbkdf2PasswordTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php [new file with mode: 0644]
tests/phpunit/includes/resourceloader/ResourceLoaderLESSTest.php [deleted file]
tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderStartupModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php [new file with mode: 0644]
tests/phpunit/includes/resourceloader/fixtures/001-embeddable.css [deleted file]
tests/phpunit/includes/resourceloader/fixtures/001-embeddable.less [deleted file]
tests/phpunit/includes/resourceloader/templates/template.html [new file with mode: 0644]
tests/phpunit/includes/resourceloader/templates/template2.html [new file with mode: 0644]
tests/phpunit/includes/resourceloader/templates/template_awesome.handlebars [new file with mode: 0644]
tests/phpunit/includes/search/SearchEngineTest.php
tests/phpunit/includes/skins/SkinFactoryTest.php
tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php [new file with mode: 0644]
tests/phpunit/includes/specialpage/SpecialPageTestHelper.php [new file with mode: 0644]
tests/phpunit/includes/specials/ImageListPagerTest.php
tests/phpunit/includes/specials/SpecialBooksourcesTest.php [new file with mode: 0644]
tests/phpunit/includes/specials/SpecialMIMESearchTest.php
tests/phpunit/includes/specials/SpecialMyLanguageTest.php
tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
tests/phpunit/includes/upload/UploadBaseTest.php
tests/phpunit/includes/upload/UploadFromUrlTest.php
tests/phpunit/includes/upload/UploadStashTest.php
tests/phpunit/includes/utils/MWCryptHKDFTest.php
tests/phpunit/includes/utils/StringUtilsTest.php
tests/phpunit/languages/LanguageGvTest.php
tests/phpunit/languages/LanguageRuTest.php
tests/phpunit/languages/LanguageTlTest.php
tests/phpunit/maintenance/DumpTestCase.php
tests/phpunit/maintenance/MaintenanceTest.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/phpunit/maintenance/fetchTextTest.php
tests/phpunit/structure/AutoLoaderTest.php
tests/phpunit/structure/ResourcesTest.php
tests/phpunit/structure/StructureTest.php
tests/phpunit/suites/ExtensionsTestSuite.php
tests/phpunit/suites/UploadFromUrlTestSuite.php
tests/qunit/QUnitTestResources.php
tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js
tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
tests/qunit/suites/resources/startup.test.js
tests/testHelpers.inc
thumb.php

diff --git a/.rubocop.yml b/.rubocop.yml
new file mode 100644 (file)
index 0000000..00479d1
--- /dev/null
@@ -0,0 +1,8 @@
+inherit_from: .rubocop_todo.yml
+
+AllCops:
+    Exclude:
+        - 'extensions/**/*'
+        - 'skins/**/*'
+        - 'tests/frontend/node_modules/**/*'
+        - 'vendor/**/*'
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
new file mode 100644 (file)
index 0000000..f0702ba
--- /dev/null
@@ -0,0 +1,84 @@
+# 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/COPYING b/COPYING
index c3bed28..1cdc9d4 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -30,8 +30,10 @@ under the GPL for use of the whole code or other sections thereof.
 MediaWiki uses the following Creative Commons icons to illustrate links to the
 CC licenses:
 
-* skins/common/images/cc-by-nc-sa.png
-* skins/common/images/cc-by-sa.png
+* resources/assets/licenses/cc-0.png
+* resources/assets/licenses/cc-by-nc-sa.png
+* resources/assets/licenses/cc-by-sa.png
+* resources/assets/licenses/cc-by.png
 
 These icons are trademarked, and used subject to the CC trademark license,
 available at http://creativecommons.org/policies#trademark
diff --git a/CREDITS b/CREDITS
index 776e51b..730e54d 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -1,6 +1,6 @@
 {{int:version-credits-summary}}
 <!--
-MediaWiki 1.24 is a collaborative project released under the
+MediaWiki 1.25 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.
 -->
@@ -12,12 +12,13 @@ following names for their contribution to the product.
 * Alexander Monk
 * Alexandre Emsenhuber
 * Andrew Garrett
+* Antoine Musso
 * Arthur Richards
 * Aryeh Gregor
-* Antoine Musso
-* Brian Wolff
+* Bartosz Dziewoński
 * Bertrand Grondin
 * Brad Jorsch
+* Brian Wolff
 * Brion Vibber
 * Bryan Tong Minh
 * Chad Horohoe
@@ -40,13 +41,13 @@ following names for their contribution to the product.
 * Ilmari Karonen
 * Jack D. Pond
 * Jack Phoenix
+* Jackmcbarn
 * Jan Paul Posma
 * Jason Richey
 * Jeroen De Dauw
 * John Du Hart
 * Jon Harald Søby
 * Juliano F. Ravasi
-* Ryan Kaldari
 * Leo Koppelkamm
 * Leon Weber
 * Leslie Hoare
@@ -73,26 +74,27 @@ following names for their contribution to the product.
 * Robert Stojnić
 * Robin Pepermans
 * Rotem Liss
+* Ryan Kaldari
 * Ryan Lane
 * Ryan Schmidt
 * Sam Reed
 * Shinjiman
 * Siebrand Mazeland
-* SQL
 * Soxred93
+* SQL
 * Szymon Świerkosz
 * Thomas Bleher
+* Thomas Gries
 * Tim Starling
 * Timo Tijhof
-* Thomas Gries
 * Trevor Parscal
 * Victor Vasiliev
 * Yesid Carrillo
 * Yuri Astrakhan
 
 == Patch Contributors ==
-* Aaron Pramana
 * Aaron Ball
+* Aaron Pramana
 * Agbad
 * Ahmad Sherif
 * Alejandro Mery
@@ -103,19 +105,17 @@ following names for their contribution to the product.
 * Asier Lostalé
 * Azliq7
 * Bagariavivek
-* Bartosz Dziewoński
 * Beau
 * Benny Situ
 * Bergi
 * Borislav Manolov
-* Brad Jorsch
 * Brent G
 * Brianna Laugher
 * Carlin
 * Carsten Nielsen
 * Chris Steipp
-* Christian Neubauer
 * Christian Aistleitner
+* Christian Neubauer
 * Conrad Irwin
 * cryptocoryne
 * Dan Barrett
@@ -133,8 +133,8 @@ following names for their contribution to the product.
 * Erwin Dokter
 * Étienne Beaulé
 * Federico Leva
-* FunPika
 * fomafix
+* FunPika
 * Gabriel Wicke
 * Gero Scholz
 * Gilles van den Hoven
@@ -148,8 +148,8 @@ following names for their contribution to the product.
 * Jeremy Baron
 * Jidanni
 * Jimmy Xu
-* Jonathan Wiltshire
 * John N
+* Jonathan Wiltshire
 * JuneHyeon Bae
 * Jure Kajzer
 * Karun Dambiec
@@ -166,16 +166,16 @@ following names for their contribution to the product.
 * Lupo
 * Madman
 * Manuel Menal
+* Marc-André Pelletier
 * Marcin Cieślak
 * Marcus Buck
-* Marc-André Pelletier
 * Mark Hershberger
 * Mark Holmquist
 * Marooned
 * Mathias Ertl
-* Matthias Mullie
-* Matthew Britton
 * mati
+* Matthew Britton
+* Matthias Mullie
 * Max
 * Max Sikström
 * merl
@@ -185,20 +185,20 @@ following names for their contribution to the product.
 * Michael Newton
 * Michael Walsh
 * Mike Horvath
-* Mormegil
 * moejoe0000
+* Mormegil
 * MrBlueSky
 * MrPete
-* MZMcBride
 * mybugs.mail
+* MZMcBride
 * Nakon
 * Nathan Larson
 * nephele
 * Nik
-* Nx.devnull
 * Nikola Kovacs
 * Nikolaos S. Karastathis
 * Nischay Nahata
+* Nx.devnull
 * Olaf Lenz
 * Olivier Finlay Beaton
 * Patricio Molina
@@ -240,7 +240,7 @@ following names for their contribution to the product.
 * Waldir Pimenta
 * William Demchick
 * Yusuke Matsubara
-* Yuvaraj Pandian T
+* Yuvi Panda
 * Zachary Hauri
 
 == Translators ==
diff --git a/Gemfile b/Gemfile
new file mode 100644 (file)
index 0000000..1559d0e
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,8 @@
+#ruby=ruby-2.1.2
+#ruby-gemset=core
+
+source "https://rubygems.org"
+
+gem "mediawiki_api"
+gem "mediawiki_selenium"
+gem "rubocop", require: false
diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644 (file)
index 0000000..0dc4500
--- /dev/null
@@ -0,0 +1,99 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    ast (2.0.0)
+    astrolabe (1.3.0)
+      parser (>= 2.2.0.pre.3, < 3.0)
+    builder (3.2.2)
+    childprocess (0.5.3)
+      ffi (~> 1.0, >= 1.0.11)
+    cucumber (1.3.16)
+      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)
+      faker (>= 1.1.2)
+      yml_reader (>= 0.3)
+    diff-lcs (1.2.5)
+    domain_name (0.5.20)
+      unf (>= 0.0.5, < 1.0.0)
+    faker (1.4.3)
+      i18n (~> 0.5)
+    faraday (0.9.0)
+      multipart-post (>= 1.2, < 3)
+    faraday-cookie_jar (0.0.6)
+      faraday (>= 0.7.4)
+      http-cookie (~> 1.0.0)
+    ffi (1.9.3)
+    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)
+      faraday (~> 0.9, >= 0.9.0)
+      faraday-cookie_jar (~> 0.0, >= 0.0.6)
+    mediawiki_selenium (0.3.2)
+      cucumber (~> 1.3, >= 1.3.10)
+      headless (~> 1.0, >= 1.0.1)
+      json (~> 1.8, >= 1.8.1)
+      mediawiki_api (~> 0.2, >= 0.2.1)
+      page-object (~> 1.0)
+      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)
+    multipart-post (2.0.0)
+    netrc (0.7.7)
+    page-object (1.0.2)
+      page_navigation (>= 0.9)
+      selenium-webdriver (>= 2.42.0)
+      watir-webdriver (>= 0.6.9)
+    page_navigation (0.9)
+      data_magic (>= 0.14)
+    parser (2.2.0.pre.4)
+      ast (>= 1.1, < 3.0)
+      slop (~> 3.4, >= 3.4.5)
+    powerpack (0.0.9)
+    rainbow (2.0.0)
+    rest-client (1.7.2)
+      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)
+      astrolabe (~> 1.3)
+      parser (>= 2.2.0.pre.4, < 3.0)
+      powerpack (~> 0.0.6)
+      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)
+      multi_json (~> 1.0)
+      rubyzip (~> 1.0)
+      websocket (~> 1.0.4)
+    slop (3.6.0)
+    syntax (1.2.0)
+    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)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  mediawiki_api
+  mediawiki_selenium
+  rubocop
diff --git a/INSTALL b/INSTALL
index e8731a1..70d8d53 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -6,7 +6,7 @@ Starting with MediaWiki 1.2.0, it's possible to install and configure the wiki
 "in-place", as long as you have the necessary prerequisites available.
 
 Required software:
-* Web server with PHP 5.3.2 or higher.
+* Web server with PHP 5.3.3 or higher.
 * A SQL server, the following types are supported
 ** MySQL 5.0.2 or higher
 ** PostgreSQL 8.3 or higher
index 2bf5090..03cf277 100644 (file)
@@ -42,11 +42,13 @@ production.
   configurations are $wgDeletedDirectory and $wgHashedUploadDirectory.
 * The deprecated $wgUseCommaCount variable has been removed.
 * $wgEnableSorbs and $wgSorbsUrl have been removed.
-* The UserCryptPassword and UserComparePassword hooks are no longer called. Any extensions
-  using them must be updated to use the Password Hashing API.
+* The UserCryptPassword and UserComparePassword hooks are no longer called.
+  Any extensions using them must be updated to use the Password Hashing API.
 * $wgCompiledFiles has been removed.
 * $wgSortSpecialPages was removed, the listing on Special:SpecialPages is
   now always sorted.
+* $wgSpecialPages may now use callback functions as an alternative to plain class names.
+  This allows more control over constructor parameters.
 * $wgHTCPMulticastAddress, $wgHTCPMulticastRouting and $wgHTCPPort were removed.
 * $wgRC2UDPAddress, $wgRC2UDPInterwikiPrefix, $wgRC2UDPOmitBots, $wgRC2UDPPort
   and $wgRC2UDPPrefix have been removed.
@@ -65,8 +67,18 @@ production.
   may need to adjust your default user settings to compensate for the index change.
 * $wgDeferredUpdateList is now deprecated, you should use DeferredUpdates::addUpdate()
   instead.
+* $wgCanonicalLanguageLinks has been removed. Per Google recommendations, we
+  will not send a rel=canonical pointing to a variant-neutral page, however
+  we will send rel=alternate.
+* $wgResourceLoaderLESSFunctions has been deprecated and will be removed in the future.
+* $wgGoToEdit has been removed. Use the SpecialSearchNogomatch hook for similar
+  functionality.
 
 === New features in 1.24 ===
+* Added new hook WatchlistEditorBeforeFormRender, allowing subscribers to
+  manipulate the list of pages and/or preload lots of data at once.
+* Added new argument &$link in hook WatchlistEditorBuildRemoveLine, allowing the
+  link to the title to be changed.
 * Added a new hook, "WhatLinksHereProps", to allow extensions to annotate
   WhatLinksHere entries.
 * Added a new hook, "ContentGetParserOutput", to customize parser output for
@@ -139,7 +151,7 @@ production.
   Special:PageLanguage. All pages are set to wiki language by default.
   The feature needs to be enabled with $wgPageLanguageUseDB=true and
   permission needs to be set for 'pagelang'.
-* Upgrade Moment.js to v2.8.1.
+* Upgrade Moment.js to v2.8.3.
 * (bug 67042) Added support for the HTML5 <rtc> tag for East Asian typography.
 * Upgrade Sinon.JS to 1.10.3.
 * Added the es5-shim polyfill for older or non-compliant javascript engines.
@@ -155,7 +167,7 @@ production.
   similar way, links like [[localInterwikiPrefix:File:Image.png]] and
   [[localInterwikiPrefix:Category:Hello]] will now render as regular links, and
   will not include the file or add the page to the category.
-* New special page, MyLanguages, to redirect users to subpages with localised
+* New special page, MyLanguage, to redirect users to subpages with localised
   versions of a page. (Integrated from Extension:Translate)
 * MediaWiki now supports multiple password types, including bcrypt and PBKDF2.
   The default type can be changed with $wgPasswordDefault and the type
@@ -167,10 +179,23 @@ production.
 * (bug 15484) Users will now be redirected to the login page when they need to
   log in, rather than being shown a page asking them to log in and having to click
   another link to actually get to the login page.
-* A JSONContent and JSONContentHandler were added for extensions to extend.
+* A JsonContent and JsonContentHandler were added for extensions to extend.
 * (bug 35045) Redirects to sections will now update the URL in browser's address
   bar using the HTML5 History API. When [[Dog]] redirects to [[Animals#Dog]],
   the user will now see "Animals#Dog" in their browser instead of "Dog#Dog".
+* API token handling has been rewritten. Any API module using tokens will need
+  to be updated. See the entry below under "Action API internal changes".
+* Added HTMLAutoCompleteSelectField.
+* Added a new hook, "SkinPreloadExistence", to allow extensions to add titles to
+  link existence cache before the page is rendered.
+* Config::set() was moved to its own interface, MutableConfig. GlobalVarConfig::set()
+  is now deprecated, does not implement MutableConfig.
+* A MutableConfig named HashConfig was added, that stores an array of configuration
+  settings.
+* (bug 69418) A MultiConfig implementation was added that supports fallback
+  to multiple Config instances.
+* Update CSSJanus to v1.1.0.
+* Added FormatJson::parse() returning status with result or localized error message
 
 === Bug fixes in 1.24 ===
 * (bug 50572) MediaWiki:Blockip should support gender
@@ -203,21 +228,26 @@ production.
 * (bugs 57238, 65206) Blank pages can now be directly created.
 * (bug 69789) Title::getContentModel() now loads from the database when
   necessary instead of incorrectly returning the default content model.
+* (bug 69249) wfBaseConvert() now works around PHP Bug #50175 when using GMP.
+* (bug 57909) URLs in the externallinks table will no longer have certain
+  characters decoded in the query string.
+* (bug 67368) LESS mixins like .background-image() correctly flip image
+  references for RTL stylesheets now.
 
-=== Web API changes in 1.24 ===
+=== Action API changes in 1.24 ===
 * action=parse API now supports prop=modules, which provides the list of
   ResourceLoader modules that should be used to enhance the parsed content.
 * action=query&meta=siteinfo&siprop=interwikimap returns a new "protorel"
-  field which is true iff protocol-relative urls can be used to access
+  field which is true if protocol-relative urls can be used to access
   a particular interwiki map entry.
-* ApiQueryLogEvents now provides logpage, which is the page ID from the
+* list=logevents now provides logpage, which is the page ID from the
   logging table, if ids are requested and the user has the permissions.
 * action=edit now requires that appendtext, prependtext, or section=new be used
   when using the 'redirect' parameter, to prevent clients accidentally
   overwriting the target page with the content of the redirect.
-* action=logevents will now return an error if both letitle and leprefix are
+* list=logevents will now return an error if both letitle and leprefix are
   specified.
-* action=logevents has a new parameter, lenamespace, to allow filtering by
+* list=logevents has a new parameter, lenamespace, to allow filtering by
   namespace.
 * action=expandtemplates has a new parameter, prop, and a new output format.
   The old format is still used if prop isn't provided, but this is deprecated.
@@ -229,6 +259,31 @@ production.
 * (bug 60734) Actions that use ApiPageSet (e.g. purge, watch,
   setnotificationtimestamp) will now include continuation information when
   using a generator.
+* Removed 'props' and 'errors' from action=paraminfo, as they have extremely
+  limited use and are generally inaccurate, unmaintained, and impossible to
+  properly maintain.
+* Formats dbg, dump, txt, wddx, and yaml are now deprecated.
+* action=paraminfo now indicates when a parameter is specifying a submodule.
+* The iwurl parameter to prop=iwlinks is deprecated in favor of iwprop=url, for
+  parallelism with prop=langlinks.
+* All tokens should be fetched from action=query&meta=tokens; all other methods
+  of fetching tokens are deprecated. The value needed for meta=tokens's 'type'
+  parameter for each module is documented in the action=help output and is
+  returned from action=paraminfo.
+* New action ClearHasMsg that can be used to clear HasMsg flag.
+* The cmstartsortkey and cmendsortkey parameters to list=categorymembers are
+  deprecated in favor of cmstarthexsortkey and cmendhexsortkey.
+* (bug 63326) Add blockedtimestamp field to output of blockinfo property for
+  the list=allusers and list=users modules.
+* prop=imageinfo no longer requires iiurlwidth to be set when using iiurlparam.
+* Added prop=linkshere, prop=fileusage, and prop=transcludedin, which are
+  roughly equivalent to list=backlinks, list=imageusage, and list=embeddedin
+  but can work on a list of titles (including titles from a generator).
+* prop=redirects can now filter returned redirects by namespace.
+
+=== Action API internal changes in 1.24 ===
+* Methods for handling continuation are added to ApiResult, so actions other
+  than query that use generators can easily support continuation.
 * $wgAPIModules (and the related $wgAPIFormatModules, $wgAPIMetaModules,
   $wgAPIPropModules, and $wgAPIListModules settings) now allow API modules
   to be specified using a "module spec" array instead of a plain class name.
@@ -237,16 +292,74 @@ production.
   to use for the module. This is intended for extensions that want control over
   the instantiation of their API modules, to allow for proper dependency
   injection.
-* Removed 'props' and 'errors' from action=paraminfo, as they have extremely
-  limited use and are generally inaccurate, unmaintained, and impossible to
-  properly maintain. Also removed the corresponding methods from ApiBase and
-  the 'APIGetPossibleErrors' and 'APIGetResultProperties' hooks.
-* Formats dbg, dump, txt, wddx, and yaml are now deprecated.
-* action=paraminfo now indicates when a parameter is specifying a submodule.
-  Internally, a new param type 'submodule' is available to indicate this which
-  automatically queries the list of submodule names from the ApiModuleManager.
-* The iwurl parameter to prop=iwlinks is deprecated in favor of iwprop=url, for
-  parallelism with prop=langlinks.
+* A new param type 'submodule' is available. Parameters of this type will take
+  the list of valid values from the module's ApiModuleManager for the group
+  corresponding to the parameter name.
+* The 'APIGetPossibleErrors' and 'APIGetResultProperties' hooks are no longer used.
+* API token handling has been rewritten. Any API module using tokens will need
+  to be updated:
+  * ApiBase::needsToken now returns a token type instead of boolean true when a
+    token is needed. Returning true will throw an exception. See documentation
+    of that method for details.
+  * Information for the 'token' parameter is automatically set by ApiBase
+    getFinalParams and getFinalParamDescription.
+  * ApiBase::getTokenSalt has been removed.
+  * The hooks APIQueryInfoTokens, APIQueryRevisionsTokens,
+    APIQueryRecentChangesTokens, APIQueryUsersTokens, and
+    ApiTokensGetTokenTypes are deprecated, but are still called to support
+    backwards-compatible token access.
+* ApiBase::validateLimit and ApiBase::validateTimestamp are now protected.
+* ApiQueryRedirects was removed; prop=redirects is now implemented by
+  ApiQueryBacklinksProp along with the newly-added prop modules.
+* The following methods have been deprecated and may be removed in a future
+  release:
+  * ApiBase::getResultProperties
+  * ApiBase::getFinalResultProperties
+  * ApiBase::addTokenProperties
+  * ApiBase::getRequireOnlyOneParameterErrorMessages
+  * ApiBase::getRequireMaxOneParameterErrorMessages
+  * ApiBase::getRequireAtLeastOneParameterErrorMessages
+  * ApiBase::getTitleOrPageIdErrorMessage
+  * ApiBase::getPossibleErrors
+  * ApiBase::getFinalPossibleErrors
+  * ApiBase::parseErrors
+  * ApiQuery::setGeneratorContinue
+  * ApiQueryBase::checkRowCount
+  * ApiQueryBase::titleToKey
+  * ApiQueryBase::keyToTitle
+  * ApiQueryBase::keyPartToTitle
+  * ApiQueryInfo::getTokenFunctions
+  * ApiQueryInfo::resetTokenCache
+  * ApiQueryInfo::getEditToken
+  * ApiQueryInfo::getDeleteToken
+  * ApiQueryInfo::getProtectToken
+  * ApiQueryInfo::getMoveToken
+  * ApiQueryInfo::getBlockToken
+  * ApiQueryInfo::getUnblockToken
+  * ApiQueryInfo::getEmailToken
+  * ApiQueryInfo::getImportToken
+  * ApiQueryInfo::getWatchToken
+  * ApiQueryInfo::getOptionsToken
+  * ApiQueryRecentChanges::getTokenFunctions
+  * ApiQueryRecentChanges::getPatrolToken
+  * ApiQueryRevisions::getTokenFunctions
+  * ApiQueryRevisions::getRollbackToken
+  * ApiQueryUsers::getTokenFunctions
+  * ApiQueryUsers::getUserrightsToken
+* The following classes have been deprecated and may be removed in a future
+  release:
+  * ApiFormatDbg
+  * ApiFormatDump
+  * ApiFormatTxt
+  * ApiFormatWddx
+  * ApiFormatYaml
+  * ApiTokens
+* The following class constants have been deprecated and may be removed in a
+  future release:
+  * ApiBase::PROP_ROOT
+  * ApiBase::PROP_LIST
+  * ApiBase::PROP_TYPE
+  * ApiBase::PROP_NULLABLE
 
 === Languages updated in 1.24 ===
 
@@ -277,6 +390,13 @@ changes to languages because of Bugzilla reports.
   the "headelement" template key are no longer supported. Setting
   $useHeadElement = false; is no longer supported and will not cause old keys
   like "headlinks", "skinnameclass", etc. to be defined.
+* BREAKING CHANGE: The files commonElements.css, commonContent.css and
+  commonInterface.css (in skins/common/) have been removed. Skins may no longer
+  rely on their presence and include them in their style modules. ResourceLoader
+  modules introduced in MediaWiki 1.23 should be loaded instead:
+  - skins/common/commonElements.css  → 'mediawiki.skinning.elements' module
+  - skins/common/commonContent.css   → 'mediawiki.skinning.content' module
+  - skins/common/commonInterface.css → 'mediawiki.skinning.interface' module
 * The deprecated 'SpecialVersionExtensionTypes' hook was removed.
 * (bug 63891) Add 'X-Robots-Tag: noindex' header in action=render pages.
 * SpecialPage no longer supports the syntax for invoking wfSpecial*() functions.
@@ -344,10 +464,12 @@ changes to languages because of Bugzilla reports.
   setPreloadedText() from EditPage.php. (deprecated since 1.21)
 * Removed global functions wfArrayLookup(), wfArrayMerge(), wfDebugDieBacktrace()
   and wfTime(). (deprecated since 1.22)
-* Browser support for Internet Explorer 6 lowered from Grade A to Grade C,
-  meaning that JavaScript is no longer executed in this browser.
+* Browser support for Internet Explorer 6 and 7 lowered from Grade A to Grade C,
+  meaning that JavaScript is no longer executed in these browser versions.
 * Browser support for Opera 11 lowered from Grade A to Grade C.
 * Removed IEFixes module which existed purely to provide support for MSIE versions
+* Deprecated SpecialPageFactory::getList() in favor of
+  SpecialPageFactory::getNames()
   below 7 (conditionally loaded only for those browsers).
 * Action::checkCanExecute() no longer has a return value.
 * Removed cleanupForIRC(), loadFromCurRow(), newFromCurRow(), notifyRC2UDP()
@@ -359,6 +481,33 @@ changes to languages because of Bugzilla reports.
   Running update.php on MySQL < v5.1 may result in heavy processing.
 * RSS and Atom feeds generated by MediaWiki no longer include a fallback
   stylesheet. It was ignored by most browsers these days anyway.
+* SpecialSearchNoResults hook has been removed. SpecialSearchResults is now
+  called unconditionally.
+* TablePager::getBody() is now 'final' and can't be overridden in subclasses.
+* TablePager::getBody() is deprecated, use getBodyOutput() or getFullOutput().
+* Added $outputPage parameter to the SkinTemplateGetLanguageLink hook.
+* log_page for move log entries store the original page ID, rather than that
+  of the new redirect page. This is not retroactive.
+* LCStoreAccel was removed. $wgLocalisationCacheConf can no longer be set to
+  use this store class.
+* Html::infoBox() no longer accepts paths relative to skins/common/images/.
+* Deprecated defunct Skin::getCommonStylePath().
+* Some extensions had their ResourceLoader modules depend on the "mediawiki"
+  and "jquery" modules. In the past, this behavior was undefined, now it will
+  throw an error.
+* Removed BagOStuff::replace(). (deprecated since 1.23)
+* In Linker.php, link(), linkText() and makeBrokenImageLinkObj() now display
+  warnings if their first parameter is not a Title object. Also makeImageLink()
+  now requires a Parser as its first parameter.
+* (bug 67368) LESS functions embed() and embeddable(), added in MediaWiki 1.23
+  and broken by design, have been removed. Use appropriate LESS mixins instead.
+* Removed cssjanus.py from maintenance directory as it was unused.
+* Removed maintenance/purgeOldText.inc and the PurgeRedundantText() function
+  it contained (superseded by Maintenance::purgeRedundantText() in 1.16).
+  The purgeOldText.php maintenance script has been retained.
+* PHPUnit tests can be found by directory discovery, by adding the directory
+  path from your UnitTestsList callback. Older versions of MediaWiki core will
+  barf at this usage.
 
 ==== Renamed classes ====
 * CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression
@@ -407,10 +556,143 @@ changes to languages because of Bugzilla reports.
 * RawPage - Use RawAction directly
 * StubContLang - Use Language::factory() instead
 * XMLReader2 - Use XMLReader directly
+* ResourceLoaderLESSFunctions - No longer in use, not intended for public usage
+
+==== Removed files ====
+The skins/common/ directory, previously containing some assets intended to be
+used by skins and a number of legacy styles and scripts, has been removed. Its
+contents have been deleted or relocated into the resources/ directory. Full list
+of files that are no longer available follows.
+
+* skins/common/ajax.js
+* skins/common/commonContent.css
+* skins/common/commonElements.css
+* skins/common/commonInterface.css
+* skins/common/commonPrint.css
+* skins/common/config-cc.css
+* skins/common/config.css
+* skins/common/config.js
+* skins/common/feed.css
+* skins/common/IEFixes.js
+* skins/common/oldshared.css
+* skins/common/protect.js
+* skins/common/shared.css
+* skins/common/upload.js
+* skins/common/wikibits.js
+* skins/common/images/add.png
+* skins/common/images/ajax-loader.gif
+* skins/common/images/arrow_disabled_first_25.png
+* skins/common/images/arrow_disabled_last_25.png
+* skins/common/images/arrow_disabled_left_25.png
+* skins/common/images/arrow_disabled_right_25.png
+* skins/common/images/arrow_first_25.png
+* skins/common/images/arrow_last_25.png
+* skins/common/images/arrow_left_25.png
+* skins/common/images/arrow_right_25.png
+* skins/common/images/Arr_.png
+* skins/common/images/Arr_d.png
+* skins/common/images/Arr_l.png
+* skins/common/images/Arr_r.png
+* skins/common/images/Arr_u.png
+* skins/common/images/bullet.gif
+* skins/common/images/button_bold.png
+* skins/common/images/button_extlink.png
+* skins/common/images/button_headline.png
+* skins/common/images/button_hr.png
+* skins/common/images/button_image.png
+* skins/common/images/button_italic.png
+* skins/common/images/button_link.png
+* skins/common/images/button_media.png
+* skins/common/images/button_nowiki.png
+* skins/common/images/button_sig.png
+* skins/common/images/button_template.png
+* skins/common/images/cc-0.png
+* skins/common/images/cc-by-nc-sa.png
+* skins/common/images/cc-by-sa.png
+* skins/common/images/cc-by.png
+* skins/common/images/Checker-16x16.png
+* skins/common/images/closewindow.png
+* skins/common/images/closewindow19x19.png
+* skins/common/images/critical-32.png
+* skins/common/images/diffunderline.gif
+* skins/common/images/download-32.png
+* skins/common/images/feed-icon.png
+* skins/common/images/feed-icon.svg
+* skins/common/images/gnu-fdl.png
+* skins/common/images/help-question-hover.gif
+* skins/common/images/help-question.gif
+* skins/common/images/info-32.png
+* skins/common/images/link_icon.gif
+* skins/common/images/magnify-clip-rtl.png
+* skins/common/images/magnify-clip.png
+* skins/common/images/mediawiki.png
+* skins/common/images/nextredirectltr.png
+* skins/common/images/nextredirectrtl.png
+* skins/common/images/poweredby_mediawiki_88x31.png
+* skins/common/images/public-domain.png
+* skins/common/images/question-small.png
+* skins/common/images/question.svg
+* skins/common/images/redirectltr.png
+* skins/common/images/redirectrtl.png
+* skins/common/images/remove.png
+* skins/common/images/spinner.gif
+* skins/common/images/tick-32.png
+* skins/common/images/tipsy-arrow.gif
+* skins/common/images/tooltip_icon.png
+* skins/common/images/warning-32.png
+* skins/common/images/wiki.png
+* skins/common/images/Zoom_sans.gif
+* skins/common/images/ar/button_bold.png
+* skins/common/images/ar/button_headline.png
+* skins/common/images/ar/button_italic.png
+* skins/common/images/ar/button_link.png
+* skins/common/images/ar/button_nowiki.png
+* skins/common/images/be-tarask/button_bold.png
+* skins/common/images/be-tarask/button_italic.png
+* skins/common/images/be-tarask/button_link.png
+* skins/common/images/cyrl/button_bold.png
+* skins/common/images/cyrl/button_italic.png
+* skins/common/images/cyrl/button_link.png
+* skins/common/images/de/button_bold.png
+* skins/common/images/de/button_italic.png
+* skins/common/images/fa/button_bold.png
+* skins/common/images/fa/button_headline.png
+* skins/common/images/fa/button_italic.png
+* skins/common/images/fa/button_link.png
+* skins/common/images/fa/button_nowiki.png
+* skins/common/images/icons/fileicon-c.png
+* skins/common/images/icons/fileicon-cpp.png
+* skins/common/images/icons/fileicon-deb.png
+* skins/common/images/icons/fileicon-djvu.png
+* skins/common/images/icons/fileicon-djvu.xcf
+* skins/common/images/icons/fileicon-dvi.png
+* skins/common/images/icons/fileicon-exe.png
+* skins/common/images/icons/fileicon-h.png
+* skins/common/images/icons/fileicon-html.png
+* skins/common/images/icons/fileicon-iso.png
+* skins/common/images/icons/fileicon-java.png
+* skins/common/images/icons/fileicon-mid.png
+* skins/common/images/icons/fileicon-mov.png
+* skins/common/images/icons/fileicon-o.png
+* skins/common/images/icons/fileicon-ogg.png
+* skins/common/images/icons/fileicon-ogg.xcf
+* skins/common/images/icons/fileicon-pdf.png
+* skins/common/images/icons/fileicon-ps.png
+* skins/common/images/icons/fileicon-psd.png
+* skins/common/images/icons/fileicon-rm.png
+* skins/common/images/icons/fileicon-rpm.png
+* skins/common/images/icons/fileicon-svg.png
+* skins/common/images/icons/fileicon-tar.png
+* skins/common/images/icons/fileicon-tex.png
+* skins/common/images/icons/fileicon-ttf.png
+* skins/common/images/icons/fileicon-txt.png
+* skins/common/images/icons/fileicon.png
+* skins/common/images/ksh/button_S_italic.png
 
 == Compatibility ==
 
-MediaWiki 1.24 requires PHP 5.3.2 or later.
+MediaWiki 1.24 requires PHP 5.3.2 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
diff --git a/RELEASE-NOTES-1.25 b/RELEASE-NOTES-1.25
new file mode 100644 (file)
index 0000000..b649c2b
--- /dev/null
@@ -0,0 +1,250 @@
+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.25 ==
+
+THIS IS NOT A RELEASE YET
+
+MediaWiki 1.25 is an alpha-quality branch and is not recommended for use in
+production.
+
+=== Configuration changes in 1.25 ===
+* $wgPageShowWatchingUsers was removed.
+* $wgLocalVirtualHosts has been added to replace $wgConf->localVHosts.
+* $wgAntiLockFlags was removed.
+* Edit tokens returned from User::getEditToken may change on every call. Token
+  validity must be checked by passing the user-supplied token to
+  User::matchEditToken rather than by testing for equality with a
+  newly-generated token.
+* (bug 72951) The UserGetLanguageObject hook may be passed any IContextSource
+  for its $context parameter. Formerly it was documented as receiving a
+  RequestContext specifically.
+
+=== New features in 1.25 ===
+* (bug 62861) Updated plural rules to CLDR 26. Includes incompatible changes
+  for plural forms in Russian, Prussian, Tagalog, Manx and several languages
+  that fall back to Russian.
+* (bug 58139) ResourceLoaderFileModule now supports language fallback
+  for 'languageScripts'.
+* Added a new hook, "ContentAlterParserOutput", to allow extensions to modify the
+  parser output for a content object before links update.
+* (bug 35785) Enhanced recent changes and extended watchlist are now default.
+  Documentation: https://meta.wikimedia.org/wiki/Help:Enhanced_recent_changes
+  and https://www.mediawiki.org/wiki/Manual:$wgDefaultUserOptions.
+* (bug 67341) SVG images will no longer be base64-encoded when being embedded
+  in CSS. This results in slight size increase before gzip compression (due to
+  percent-encoding), but up to 20% decrease after it.
+* Upgrade jStorage to v0.4.12.
+* MediaWiki now natively supports page status indicators: icons (or short text
+  snippets) usually displayed in the top-right corner of the page. They have
+  been in use on Wikipedia for a long time, implemented using templates and CSS
+  absolute positioning.
+  - Basic wikitext syntax: <indicator name="foo">[[File:Foo.svg|20px]]</indicator>
+  - Usage instructions: https://www.mediawiki.org/wiki/Help:Page_status_indicators
+  - Adjusting custom skins to support indicators:
+    https://www.mediawiki.org/wiki/Manual:Skinning#Page_status_indicators
+* Edit tokens may now be time-limited: passing a maximum age to
+  User::matchEditToken will reject any older tokens.
+* The debug logging internals have been overhauled, and are now using the
+  PSR-3 interfaces.
+
+=== Bug fixes in 1.25 ===
+* (bug 71003) No additional code will be generated to try to load CSS-embedded
+  SVG images in Internet Explorer 6 and 7, as they don't support them anyway.
+* (bug 67021) On Special:BookSources, corrected validation of ISBNs (both
+  10- and 13-digit forms) containing "X".
+* Page moving was refactored into a MovePage class. As part of that:
+** The AbortMove hook was removed.
+** MovePageIsValidMove is for extensions to specify whether a page
+   cannot be moved for technical reasons, and should not be overriden.
+** MovePageCheckPermissions is for checking whether the given user is
+   allowed to make the move.
+** Title::moveNoAuth() was deprecated. Use the MovePage class instead.
+** Title::moveTo() was deprecated. Use the MovePage class instead.
+** Title::isValidMoveOperation() broken down into MovePage::isValidMove()
+   and MovePage::checkPermissions().
+
+=== Action API changes in 1.25 ===
+* (bug 65403) XML tag highlighting is now only performed for formats
+  "xmlfm" and "wddxfm".
+* action=paraminfo supports generalized submodules (modules=query+value),
+  querymodules and formatmodules are deprecated
+* action=paraminfo no longer outputs descriptions and other help text by
+  default. If needed, it may be requested using the new 'helpformat' parameter.
+* action=help has been completely rewritten, and outputs help in HTML
+  rather than plain text.
+* Hitting api.php without specifying an action now displays only the help for
+  the main module, with links to submodule help.
+* API help is no longer displayed on errors.
+* 'uselang' is now a recognized API parameter; "uselang=user" may be used to
+  explicitly select the language from the current user's preferences, and
+  "uselang=content" may be used to select the wiki's content language.
+* Default output format for the API is now jsonfm.
+* Simplified continuation will return a "batchcomplete" property in the result
+  when a batch of pages is complete.
+* Pretty-printed HTML output now has nicer formatting and (if available)
+  better syntax highlighting.
+* Deprecated list=deletedrevs in favor of newly-added prop=deletedrevisions and
+  list=alldeletedrevisions.
+* prop=revisions will gracefully continue when given too many revids or titles,
+  rather than just ignoring the extras.
+* prop=revisions will no longer die if rvcontentformat doesn't match a
+  revision's content model; it will instead warn and omit the content.
+* If the user has the 'deletedhistory' right, action=query's revids parameter
+  will now recognize deleted revids.
+* prop=revisions may be used as a generator, generating revids.
+
+=== Action API internal changes in 1.25 ===
+* ApiHelp has been rewritten to support i18n and paginated HTML output.
+  Most existing modules should continue working without changes, but should do
+  the following:
+  * Add an i18n message "apihelp-{$moduleName}-description" to replace getDescription().
+  * Add i18n messages "apihelp-{$moduleName}-param-{$param}" for each parameter
+    to replace getParamDescription(). If necessary, the settings array returned
+    by getParams() can use the new ApiBase::PARAM_HELP_MSG key to override the
+    message.
+  * Implement getExamplesMessages() to replace getExamples().
+* Modules with submodules (like action=query) must have their submodules
+  override ApiBase::getParent() to return the correct parent object.
+* The 'APIGetDescription' and 'APIGetParamDescription' hooks are deprecated,
+  and will have no effect for modules using i18n messages. Use
+  'APIGetDescriptionMessages' and 'APIGetParamDescriptionMessages' instead.
+* Api formatters will no longer be asked to display the help screen on errors.
+* ApiMain::getCredits() was removed. The credits are available in the
+  'api-credits' i18n message.
+* ApiFormatBase has been changed to support i18n and syntax highlighting via
+  extensions with the new 'ApiFormatHighlight' hook. Core syntax highlighting
+  has been removed.
+* ApiFormatBase now always buffers. Output is done when
+  ApiFormatBase::closePrinter is called.
+* Much of the logic in ApiQueryRevisions has been split into ApiQueryRevisionsBase.
+* The 'revids' parameter supplied by ApiPageSet will now count deleted
+  revisions as "good" if the user has the 'deletedhistory' right. New methods
+  ApiPageSet::getLiveRevisionIDs() and ApiPageSet::getDeletedRevisionIDs() are
+  provided to access just the live or just the deleted revids.
+* The following methods have been deprecated and may be removed in a future
+  release:
+  * ApiBase::getDescription
+  * ApiBase::getParamDescription
+  * ApiBase::getExamples
+  * ApiBase::makeHelpMsg
+  * ApiBase::makeHelpArrayToString
+  * ApiBase::makeHelpMsgParameters
+  * ApiFormatBase::setUnescapeAmps
+  * ApiFormatBase::getWantsHelp
+  * ApiFormatBase::setHelp
+  * ApiFormatBase::formatHTML
+  * ApiFormatBase::setBufferResult
+  * ApiFormatBase::getDescription
+  * ApiMain::setHelp
+  * ApiMain::reallyMakeHelpMsg
+  * ApiMain::makeHelpMsgHeader
+  * ApiQueryImageInfo::getPropertyDescriptions
+* The following classes have been deprecated and may be removed in a future
+  release:
+  * ApiQueryDeletedrevs
+
+=== Languages updated in 1.25 ===
+
+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.25 ===
+* The skin autodiscovery mechanism, deprecated in MediaWiki 1.23, has been
+  removed. See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for
+  migration guide for creators and users of custom skins that relied on it.
+* Javascript variable 'wgFileCanRotate' now only available on Special:Upload.
+* (bug 56257) Set site logo from mediawiki.skinning.interface module instead of
+  inline styles in the HTML.
+* Removed ApiQueryUsers::getAutoGroups(). (deprecated since 1.20)
+* Removed XmlDumpWriter::schemaVersion(). (deprecated since 1.20)
+* Removed LogEventsList::getDisplayTitle(). (deprecated since 1.20)
+* Removed Preferences::trySetUserEmail(). (deprecated since 1.20)
+* Removed mw.user.name() and mw.user.anonymous() methods. (deprecated since 1.20)
+* Removed 'ok' and 'err' parameters in the mediawiki.api modules. (deprecated
+  since 1.20)
+* Removed 'async' parameter from the  mw.Api#getCategories() method. (deprecated
+  since 1.20)
+* Removed 'jquery.json' module. (deprecated since 1.24)
+  Use the 'json' module and global JSON object instead.
+* Deprecated OutputPage::readOnlyPage() and OutputPage::rateLimited().
+  Also, the former will now throw an MWException if called with one or more
+  arguments.
+* Removed hitcounters and associated code.
+* The "temp" zone of the upload respository is now considered private. If it
+  already exists (such as under the images/ directory), please make sure that
+  the directory is not web readable (e.g. via a .htaccess file).
+* BREAKING CHANGE: In the XML dump format used by Special:Export and
+  dumpBackup.php, the <model> and <format> tags now apprear before the <text>
+  tag, instead of after the <text> and <sha1> tags.
+  The new schema version is 0.10, the new schema URI is
+  <https://www.mediawiki.org/xml/export-0.10.xsd>.
+* MWFunction::call() and MWFunction::callArray() were removed, having being
+  deprecated in 1.22.
+
+== Compatibility ==
+
+MediaWiki 1.25 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.2 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.25 has several database changes since 1.24, 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.23.x and older releases, see HISTORY.
+
+== Online documentation ==
+
+Documentation for both end-users and site administrators is available on
+MediaWiki.org, and is covered under the GNU Free Documentation License (except
+for pages that explicitly state that their contents are in the public domain):
+
+       https://www.mediawiki.org/wiki/Documentation
+
+== Mailing list ==
+
+A mailing list is available for MediaWiki user support and discussion:
+
+       https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
+
+A low-traffic announcements-only list is also available:
+
+       https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
+
+It's highly recommended that you sign up for one of these lists if you're
+going to run a public MediaWiki, so you can be notified of security fixes.
+
+== IRC help ==
+
+There's usually someone online in #mediawiki on irc.freenode.net.
diff --git a/api.php b/api.php
index 2a6a095..74ee775 100644 (file)
--- a/api.php
+++ b/api.php
@@ -34,7 +34,7 @@
 define( 'MW_API', true );
 
 // Bail if PHP is too low
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
+if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.3' ) < 0 ) {
        // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require dirname( __FILE__ ) . '/includes/PHPVersionError.php';
        wfPHPVersionError( 'api.php' );
@@ -62,14 +62,14 @@ if ( !$wgEnableAPI ) {
 // In a perfect world this wouldn't be necessary
 $wgTitle = Title::makeTitle( NS_MAIN, 'API' );
 
-/* Construct an ApiMain with the arguments passed via the URL. What we get back
- * is some form of an ApiMain, possibly even one that produces an error message,
- * but we don't care here, as that is handled by the ctor.
- */
-$processor = new ApiMain( RequestContext::getMain(), $wgEnableWriteAPI );
-
-// Last chance hook before executing the API
 try {
+       /* Construct an ApiMain with the arguments passed via the URL. What we get back
+        * is some form of an ApiMain, possibly even one that produces an error message,
+        * but we don't care here, as that is handled by the ctor.
+        */
+       $processor = new ApiMain( RequestContext::getMain(), $wgEnableWriteAPI );
+
+       // Last chance hook before executing the API
        wfRunHooks( 'ApiBeforeMain', array( &$processor ) );
        if ( !$processor instanceof ApiMain ) {
                throw new MWException( 'ApiBeforMain hook set $processor to a non-ApiMain class' );
index 8389f00..61f30ce 100644 (file)
@@ -16,8 +16,9 @@
                "wiki": "https://www.mediawiki.org/"
        },
        "require": {
-               "php": ">=5.3.2",
-               "psr/log": "1.0.0"
+               "php": ">=5.3.3",
+               "psr/log": "1.0.0",
+               "cssjanus/cssjanus": "1.1.0"
        },
        "require-dev": {
                "phpunit/phpunit": "*"
                "ext-wikidiff2": "*",
                "ext-apc": "*",
                "monolog/monolog": "*"
+       },
+       "autoload": {
+               "psr-0": {
+                       "ComposerHookHandler": "includes/composer"
+               }
+       },
+       "scripts": {
+               "pre-update-cmd": "ComposerHookHandler::onPreUpdate",
+               "pre-install-cmd": "ComposerHookHandler::onPreInstall"
        }
 }
index 735f26b..ba3045e 100644 (file)
@@ -159,10 +159,7 @@ $dbw->commit( __METHOD__ );
 
 Use of locking reads (e.g. the FOR UPDATE clause) is not advised. They
 are poorly implemented in InnoDB and will cause regular deadlock errors.
-It's also surprisingly easy to cripple the wiki with lock contention. If
-you must use them, define a new flag for $wgAntiLockFlags which allows
-them to be turned off, because we'll almost certainly need to do so on
-the Wikimedia cluster.
+It's also surprisingly easy to cripple the wiki with lock contention.
 
 Instead of locking reads, combine your existence checks into your write
 queries, by using an appropriate condition in the WHERE clause of an
diff --git a/docs/export-0.10.xsd b/docs/export-0.10.xsd
new file mode 100644 (file)
index 0000000..9d5d49e
--- /dev/null
@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+       This is an XML Schema description of the format
+       output by MediaWiki's Special:Export system.
+
+       Version 0.2 adds optional basic file upload info support,
+       which is used by our OAI export/import submodule.
+
+       Version 0.3 adds some site configuration information such
+       as a list of defined namespaces.
+
+       Version 0.4 adds per-revision delete flags, log exports,
+       discussion threading data, a per-page redirect flag, and
+       per-namespace capitalization.
+
+       Version 0.5 adds byte count per revision.
+
+       Version 0.6 adds a separate namespace tag, and resolves the
+       redirect target and adds a separate sha1 tag for each revision.
+
+       Version 0.7 adds a unique identity constraint for both page and
+       revision identifiers. See also bug 4220.
+       Fix type for <ns> from "positiveInteger" to "nonNegativeInteger" to allow 0
+       Moves <logitem> to its right location.
+       Add parentid to revision.
+       Fix type for <id> within <contributor> to "nonNegativeInteger"
+
+       Version 0.8 adds support for a <model> and a <format> tag for
+       each revision. See contenthandler.txt.
+
+       Version 0.9 adds the database name to the site information.
+
+       Version 0.10 moved the <model> and <format> tags before the <text> tag.
+
+       The canonical URL to the schema document is:
+       http://www.mediawiki.org/xml/export-0.10.xsd
+
+       Use the namespace:
+       http://www.mediawiki.org/xml/export-0.10/
+-->
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+               xmlns:mw="http://www.mediawiki.org/xml/export-0.10/"
+               targetNamespace="http://www.mediawiki.org/xml/export-0.10/"
+               elementFormDefault="qualified">
+
+       <annotation>
+               <documentation xml:lang="en">
+                       MediaWiki's page export format
+               </documentation>
+       </annotation>
+
+       <!-- Need this to reference xml:lang -->
+       <import namespace="http://www.w3.org/XML/1998/namespace"
+                       schemaLocation="http://www.w3.org/2001/xml.xsd" />
+
+       <!-- Our root element -->
+       <element name="mediawiki" type="mw:MediaWikiType">
+               <!-- Page ID contraint, see bug 4220 -->
+               <unique name="PageIDConstraint">
+                       <selector xpath="mw:page" />
+                       <field xpath="mw:id" />
+               </unique>
+               <!-- Revision ID contraint, see bug 4220 -->
+               <unique name="RevIDConstraint">
+                       <selector xpath="mw:page/mw:revision" />
+                       <field xpath="mw:id" />
+               </unique>
+       </element>
+
+       <complexType name="MediaWikiType">
+               <sequence>
+                       <element name="siteinfo" type="mw:SiteInfoType"
+                                        minOccurs="0" maxOccurs="1" />
+                       <element name="page" type="mw:PageType"
+                                        minOccurs="0" maxOccurs="unbounded" />
+                       <element name="logitem" type="mw:LogItemType"
+                                        minOccurs="0" maxOccurs="unbounded" />
+               </sequence>
+               <attribute name="version" type="string" use="required" />
+               <attribute ref="xml:lang" use="required" />
+       </complexType>
+
+       <complexType name="SiteInfoType">
+               <sequence>
+                       <element name="sitename" type="string" minOccurs="0" />
+            <element name="dbname" type="string" minOccurs="0" />
+                       <element name="base" type="anyURI" minOccurs="0" />
+                       <element name="generator" type="string" minOccurs="0" />
+                       <element name="case" type="mw:CaseType" minOccurs="0" />
+                       <element name="namespaces" type="mw:NamespacesType" minOccurs="0" />
+               </sequence>
+       </complexType>
+
+       <simpleType name="CaseType">
+               <restriction base="NMTOKEN">
+                       <!-- Cannot have two titles differing only by case of first letter. -->
+                       <!-- Default behavior through 1.5, $wgCapitalLinks = true -->
+                       <enumeration value="first-letter" />
+
+                       <!-- Complete title is case-sensitive -->
+                       <!-- Behavior when $wgCapitalLinks = false -->
+                       <enumeration value="case-sensitive" />
+
+                       <!-- Cannot have non-case senstitive titles eg [[FOO]] == [[Foo]] -->
+                       <!-- Not yet implemented as of MediaWiki 1.18 -->
+                       <enumeration value="case-insensitive" />
+               </restriction>
+       </simpleType>
+
+       <simpleType name="DeletedFlagType">
+               <restriction base="NMTOKEN">
+                       <enumeration value="deleted" />
+               </restriction>
+       </simpleType>
+
+       <complexType name="NamespacesType">
+               <sequence>
+                       <element name="namespace" type="mw:NamespaceType"
+                                        minOccurs="0" maxOccurs="unbounded" />
+               </sequence>
+       </complexType>
+
+       <complexType name="NamespaceType">
+               <simpleContent>
+                       <extension base="string">
+                               <attribute name="key" type="integer" />
+                               <attribute name="case" type="mw:CaseType" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="RedirectType">
+               <simpleContent>
+                       <extension base="string">
+                               <attribute name="title" type="string" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <simpleType name="ContentModelType">
+               <restriction base="string">
+                       <pattern value="[a-zA-Z][-+./a-zA-Z0-9]*" />
+               </restriction>
+       </simpleType>
+
+       <simpleType name="ContentFormatType">
+               <restriction base="string">
+                       <pattern value="[a-zA-Z][-+.a-zA-Z0-9]*/[a-zA-Z][-+.a-zA-Z0-9]*" />
+               </restriction>
+       </simpleType>
+
+       <complexType name="PageType">
+               <sequence>
+                       <!-- Title in text form. (Using spaces, not underscores; with namespace ) -->
+                       <element name="title" type="string" />
+
+                       <!-- Namespace in canonical form -->
+                       <element name="ns" type="nonNegativeInteger" />
+
+                       <!-- optional page ID number -->
+                       <element name="id" type="positiveInteger" />
+
+                       <!-- flag if the current revision is a redirect -->
+                       <element name="redirect" type="mw:RedirectType" minOccurs="0" maxOccurs="1" />
+
+                       <!-- comma-separated list of string tokens, if present -->
+                       <element name="restrictions" type="string" minOccurs="0" />
+
+                       <!-- Zero or more sets of revision or upload data -->
+                       <choice minOccurs="0" maxOccurs="unbounded">
+                               <element name="revision" type="mw:RevisionType" />
+                               <element name="upload" type="mw:UploadType" />
+                       </choice>
+
+                       <!-- Zero or One sets of discussion threading data -->
+                       <element name="discussionthreadinginfo" minOccurs="0" maxOccurs="1" type="mw:DiscussionThreadingInfo" />
+               </sequence>
+       </complexType>
+
+       <complexType name="RevisionType">
+               <sequence>
+                       <element name="id" type="positiveInteger" />
+                       <element name="parentid" type="positiveInteger" minOccurs="0" />
+                       <element name="timestamp" type="dateTime" />
+                       <element name="contributor" type="mw:ContributorType" />
+                       <element name="minor" minOccurs="0" maxOccurs="1" />
+                       <element name="comment" type="mw:CommentType" minOccurs="0" maxOccurs="1" />
+                       <element name="model" type="mw:ContentModelType" />
+                       <element name="format" type="mw:ContentFormatType" />
+                       <element name="text" type="mw:TextType" />
+                       <element name="sha1" type="string" />
+               </sequence>
+       </complexType>
+
+       <complexType name="LogItemType">
+               <sequence>
+                       <element name="id" type="positiveInteger" />
+                       <element name="timestamp" type="dateTime" />
+                       <element name="contributor" type="mw:ContributorType" />
+                       <element name="comment" type="mw:CommentType" minOccurs="0" />
+                       <element name="type" type="string" />
+                       <element name="action" type="string" />
+                       <element name="text" type="mw:LogTextType" minOccurs="0" maxOccurs="1" />
+                       <element name="logtitle" type="string" minOccurs="0" maxOccurs="1" />
+                       <element name="params" type="mw:LogParamsType" minOccurs="0" maxOccurs="1" />
+               </sequence>
+       </complexType>
+
+       <complexType name="CommentType">
+               <simpleContent>
+                       <extension base="string">
+                               <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+                               <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="TextType">
+               <simpleContent>
+                       <extension base="string">
+                               <attribute ref="xml:space" use="optional" default="preserve" />
+                               <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+                               <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+                               <!-- This isn't a good idea; we should be using "ID" instead of "NMTOKEN" -->
+                               <!-- However, "NMTOKEN" is strictest definition that is both compatible with existing -->
+                               <!-- usage ([0-9]+) and with the "ID" type. -->
+                               <attribute name="id" type="NMTOKEN" />
+                               <attribute name="bytes" use="optional" type="nonNegativeInteger" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="LogTextType">
+               <simpleContent>
+                       <extension base="string">
+                               <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+                               <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="LogParamsType">
+               <simpleContent>
+                       <extension base="string">
+                               <attribute ref="xml:space" use="optional" default="preserve" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="ContributorType">
+               <sequence>
+                       <element name="username" type="string" minOccurs="0" />
+                       <element name="id" type="nonNegativeInteger" minOccurs="0" />
+
+                       <element name="ip" type="string" minOccurs="0" />
+               </sequence>
+               <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+               <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+       </complexType>
+
+       <complexType name="UploadType">
+               <sequence>
+                       <!-- Revision-style data... -->
+                       <element name="timestamp" type="dateTime" />
+                       <element name="contributor" type="mw:ContributorType" />
+                       <element name="comment" type="string" minOccurs="0" />
+
+                       <!-- Filename. (Using underscores, not spaces. No 'File:' namespace marker.) -->
+                       <element name="filename" type="string" />
+
+                       <!-- URI at which this resource can be obtained -->
+                       <element name="src" type="anyURI" />
+
+                       <element name="size" type="positiveInteger" />
+
+                       <!-- TODO: add other metadata fields -->
+               </sequence>
+       </complexType>
+
+       <!-- Discussion threading data for LiquidThreads -->
+       <complexType name="DiscussionThreadingInfo">
+               <sequence>
+                       <element name="ThreadSubject" type="string" />
+                       <element name="ThreadParent" type="positiveInteger" />
+                       <element name="ThreadAncestor" type="positiveInteger" />
+                       <element name="ThreadPage" type="string" />
+                       <element name="ThreadID" type="positiveInteger" />
+                       <element name="ThreadAuthor" type="string" />
+                       <element name="ThreadEditStatus" type="string" />
+                       <element name="ThreadType" type="string" />
+               </sequence>
+       </complexType>
+
+</schema>
index fd47d13..e96bd6c 100644 (file)
@@ -1,4 +1,4 @@
-<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.9/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.9/ http://www.mediawiki.org/xml/export-0.9.xsd" version="0.9" xml:lang="en">
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
   
   <!-- Optional global configuration info -->
   <siteinfo>
       </contributor>
       <minor />
       <comment>I have just one thing to say!</comment>
-      <text xml:space="preserve" bytes="25">A bunch of [[text]] here.</text>
-      <sha1>5x0ux8iwjrbmfzgv6pkketxgkcnpr7h</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
+      <text xml:space="preserve" bytes="25">A bunch of [[text]] here.</text>
+      <sha1>5x0ux8iwjrbmfzgv6pkketxgkcnpr7h</sha1>
     </revision>
     
     <revision>
         <ip>10.0.0.2</ip>
       </contributor>
       <comment>new!</comment>
-      <text xml:space="preserve" bytes="24">An earlier [[revision]].</text>
-      <sha1>etaxt3shcge6igz1biwy3d4um2pnle4</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
+      <text xml:space="preserve" bytes="24">An earlier [[revision]].</text>
+      <sha1>etaxt3shcge6igz1biwy3d4um2pnle4</sha1>
     </revision>
   </page>
   
       <timestamp>2001-01-15T14:03:00Z</timestamp>
       <contributor><ip>10.0.0.2</ip></contributor>
       <comment>hey</comment>
-      <text xml:space="preserve" bytes="47">WHYD YOU LOCK PAGE??!!! i was editing that jerk</text>
-      <sha1>ml80vmyjlixdstnywwihx003exfzq9j</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
+      <text xml:space="preserve" bytes="47">WHYD YOU LOCK PAGE??!!! i was editing that jerk</text>
+      <sha1>ml80vmyjlixdstnywwihx003exfzq9j</sha1>
     </revision>
   </page>
   
       <timestamp>2001-01-15T20:34:12Z</timestamp>
       <contributor><username>Foobar</username><id>42</id></contributor>
       <comment>My awesomeest image!</comment>
-      <text xml:space="preserve" bytes="52">This is an awesome little imgae. I lurves it. {{PD}}</text>
-      <sha1>mehom37npwkpzhaiwu3wyr0egalumki</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
+      <text xml:space="preserve" bytes="52">This is an awesome little imgae. I lurves it. {{PD}}</text>
+      <sha1>mehom37npwkpzhaiwu3wyr0egalumki</sha1>
     </revision>
     <upload>
       <timestamp>2001-01-15T20:34:12Z</timestamp>
index d704eb5..7ec6ff5 100644 (file)
@@ -260,13 +260,6 @@ $password: the password being submitted, not yet checked for validity
           a machine API rather than the HTML user interface.
 &$msg: the message identifier for abort reason (new in 1.18, not available before 1.18)
 
-'AbortMove': Allows to abort moving an article (title).
-$old: old title
-$nt: new title
-$user: user who is doing the move
-$err: error message
-$reason: the reason for the move (added in 1.13)
-
 'AbortNewAccount': Return false to cancel explicit account creation.
 $user: the User object about to be created (read-only, incomplete)
 &$msg: out parameter: HTML to display on abort
@@ -379,20 +372,41 @@ $editPage : the EditPage object
 $text : the new text of the article (has yet to be saved)
 &$resultArr : data in this array will be added to the API result
 
+'ApiFormatHighlight': Use to syntax-highlight API pretty-printed output. When
+highlighting, add output to $context->getOutput() and return false.
+$context: An IContextSource.
+$text: Text to be highlighted.
+$mime: MIME type of $text.
+$format: API format code for $text.
+
 'APIGetAllowedParams': Use this hook to modify a module's parameters.
 &$module: ApiBase Module object
 &$params: Array of parameters
 $flags: int zero or OR-ed flags like ApiBase::GET_VALUES_FOR_HELP
 
-'APIGetDescription': Use this hook to modify a module's description.
+'APIGetDescription': DEPRECATED! Use APIGetDescriptionMessages instead.
+Use this hook to modify a module's description.
 &$module: ApiBase Module object
-&$desc: Array of descriptions
+&$desc: String description, or array of description strings
+
+'APIGetDescriptionMessages': Use this hook to modify a module's help message.
+$module: ApiBase Module object
+&$msg: Array of Message objects
 
-'APIGetParamDescription': Use this hook to modify a module's parameter
-descriptions.
+'APIGetParamDescription': DEPRECATED! Use APIGetParamDescriptionMessages instead.
+Use this hook to modify a module's parameter descriptions.
 &$module: ApiBase Module object
 &$desc: Array of parameter descriptions
 
+'APIGetParamDescriptionMessages': Use this hook to modify a module's parameter descriptions.
+$module: ApiBase Module object
+&$msg: Array of arrays of Message objects
+
+'APIHelpModifyOutput': Use this hook to modify an API module's help output.
+$module: ApiBase Module object
+&$help: Array of HTML strings to be joined for the output.
+$options: Array Options passed to ApiHelp::getHelp
+
 'APIQueryAfterExecute': After calling the execute() method of an
 action=query submodule. Use this to extend core API modules.
 &$module: Module object
@@ -402,36 +416,39 @@ an action=query submodule. Use this to extend core API modules.
 &$module: Module object
 &$resultPageSet: ApiPageSet object
 
-'APIQueryInfoTokens': Use this hook to add custom tokens to prop=info. Every
-token has an action, which will be used in the intoken parameter and in the
-output (actiontoken="..."), and a callback function which should return the
-token, or false if the user isn't allowed to obtain it. The prototype of the
-callback function is func($pageid, $title), where $pageid is the page ID of the
-page the token is requested for and $title is the associated Title object. In
-the hook, just add your callback to the $tokenFunctions array and return true
-(returning false makes no sense).
+'APIQueryInfoTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
+Use this hook to add custom tokens to prop=info. Every token has an action,
+which will be used in the intoken parameter and in the output
+(actiontoken="..."), and a callback function which should return the token, or
+false if the user isn't allowed to obtain it. The prototype of the callback
+function is func($pageid, $title), where $pageid is the page ID of the page the
+token is requested for and $title is the associated Title object. In the hook,
+just add your callback to the $tokenFunctions array and return true (returning
+false makes no sense).
 $tokenFunctions: array(action => callback)
 
-'APIQueryRevisionsTokens': Use this hook to add custom tokens to prop=revisions.
-Every token has an action, which will be used in the rvtoken parameter and in
-the output (actiontoken="..."), and a callback function which should return the
-token, or false if the user isn't allowed to obtain it. The prototype of the
-callback function is func($pageid, $title, $rev), where $pageid is the page ID
-of the page associated to the revision the token is requested for, $title the
+'APIQueryRevisionsTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
+Use this hook to add custom tokens to prop=revisions. Every token has an
+action, which will be used in the rvtoken parameter and in the output
+(actiontoken="..."), and a callback function which should return the token, or
+false if the user isn't allowed to obtain it. The prototype of the callback
+function is func($pageid, $title, $rev), where $pageid is the page ID of the
+page associated to the revision the token is requested for, $title the
 associated Title object and $rev the associated Revision object. In the hook,
 just add your callback to the $tokenFunctions array and return true (returning
 false makes no sense).
 $tokenFunctions: array(action => callback)
 
-'APIQueryRecentChangesTokens': Use this hook to add custom tokens to
-list=recentchanges. Every token has an action, which will be used in the rctoken
-parameter and in the output (actiontoken="..."), and a callback function which
-should return the token, or false if the user isn't allowed to obtain it. The
-prototype of the callback function is func($pageid, $title, $rc), where $pageid
-is the page ID of the page associated to the revision the token is requested
-for, $title the associated Title object and $rc the associated RecentChange
-object. In the hook, just add your callback to the $tokenFunctions array and
-return true (returning false makes no sense).
+'APIQueryRecentChangesTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
+Use this hook to add custom tokens to list=recentchanges. Every token has an
+action, which will be used in the rctoken parameter and in the output
+(actiontoken="..."), and a callback function which should return the token, or
+false if the user isn't allowed to obtain it. The prototype of the callback
+function is func($pageid, $title, $rc), where $pageid is the page ID of the
+page associated to the revision the token is requested for, $title the
+associated Title object and $rc the associated RecentChange object. In the
+hook, just add your callback to the $tokenFunctions array and return true
+(returning false makes no sense).
 $tokenFunctions: array(action => callback)
 
 'APIQuerySiteInfoGeneralInfo': Use this hook to add extra information to the
@@ -443,13 +460,19 @@ $module: the current ApiQuerySiteInfo module
 sites statistics information.
 &$results: array of results, add things here
 
-'APIQueryUsersTokens': Use this hook to add custom token to list=users. Every
-token has an action, which will be used in the ustoken parameter and in the
-output (actiontoken="..."), and a callback function which should return the
-token, or false if the user isn't allowed to obtain it. The prototype of the
-callback function is func($user) where $user is the User object. In the hook,
-just add your callback to the $tokenFunctions array and return true (returning
-false makes no sense).
+'ApiQueryTokensRegisterTypes': Use this hook to add additional token types to
+action=query&meta=tokens. Note that most modules will probably be able to use
+the 'csrf' token instead of creating their own token types.
+&$salts: array( type => salt to pass to User::getEditToken() )
+
+'APIQueryUsersTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
+Use this hook to add custom token to list=users. Every token has an action,
+which will be used in the ustoken parameter and in the output
+(actiontoken="..."), and a callback function which should return the token, or
+false if the user isn't allowed to obtain it. The prototype of the callback
+function is func($user) where $user is the User object. In the hook, just add
+your callback to the $tokenFunctions array and return true (returning false
+makes no sense).
 $tokenFunctions: array(action => callback)
 
 'ApiMain::onException': Called by ApiMain::executeActionWithErrorHandling() when
@@ -463,8 +486,8 @@ key for the array that represents the service data. In this data array, the
 key-value-pair identified by the apiLink key is required.
 &$apis: array of services
 
-'ApiTokensGetTokenTypes': Use this hook to extend action=tokens with new token
-types.
+'ApiTokensGetTokenTypes': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
+Use this hook to extend action=tokens with new token types.
 &$tokenTypes: supported token types in format 'type' => callback function
 used to retrieve this type of tokens.
 
@@ -505,6 +528,10 @@ $error: if the deletion was prohibited, the (raw HTML) error message to display
 $status: Status object, modify this to throw an error. Overridden by $error
   (added in 1.20)
 
+'ArticleDeleteAfterSuccess': Output after an article has been deleted.
+$title: Title of the article that has been deleted.
+$outputPage: OutputPage that can be used to append the output.
+
 'ArticleDeleteComplete': After an article is deleted.
 $wikiPage: the WikiPage that was deleted
 $user: the user that deleted the article
@@ -854,6 +881,14 @@ $name: name of the special page, e.g. 'Watchlist'
 &$join_conds: join conditions for the tables
 $opts: FormOptions for this request
 
+'LoginUserMigrated': Called during login to allow extensions the opportunity to
+inform a user that their username doesn't exist for a specific reason, instead
+of letting the login form give the generic error message that the account does
+not exist. For example, when the account has been renamed or deleted.
+$user: the User object being authenticated against.
+&$msg: the message identifier for abort reason, or an array to pass a message
+  key and parameters.
+
 'Collation::factory': Called if $wgCategoryCollation is an unknown collation.
 $collationName: Name of the collation in question
 &$collationObject: Null. Replace with a subclass of the Collation class that
@@ -895,6 +930,15 @@ generation of HTML may be skipped, but other information should still be present
 ParserOutput object.
 &$output: ParserOutput, to manipulate or replace
 
+'ContentAlterParserOutput': Modify parser output for a given content object.
+Called by Content::getParserOutput after parsing has finished. Can be used
+for changes that depend on the result of the parsing but have to be done
+before LinksUpdate is called (such as adding tracking categories based on
+the rendered HTML).
+$content: The Content to render
+$title: Title of the page, as context
+$parserOutput: ParserOutput to manipulate
+
 'ConvertContent': Called by AbstractContent::convert when a conversion to another
 content model is requested.
 $content: The Content object to be converted.
@@ -1359,6 +1403,10 @@ page history view, i.e. undo, rollback, etc.
 $rev: Revision object
 &$links: Array of HTML links
 
+'HTMLFileCache::useFileCache': Override whether a page should be cached in file
+cache.
+$context: An IContextSource object with information about the request being served.
+
 'ImageBeforeProduceHTML': Called before producing the HTML created by a wiki
 image insertion. You can skip the default logic entirely by returning false, or
 just modify a few things using call-by-reference.
@@ -1533,6 +1581,10 @@ $title: The page's Title.
   Currently unused, but planned to provide support for marking individual
   language links in the UI, e.g. for featured articles.
 
+'LanguageSelector': Hook to change the language selector available on a page.
+$out: The output page.
+$cssClassName: CSS class name of the language selector.
+
 'LinkBegin': Used when generating internal and interwiki links in
 Linker::link(), before processing starts.  Return false to skip default
 processing and return $ret. See documentation for Linker::link() for details on
@@ -1626,6 +1678,13 @@ $code: language code
 &$alldata: The localisation data from core and extensions
 &purgeBlobs: whether to purge/update the message blobs via MessageBlobStore::clear()
 
+'LocalisationCacheRecacheFallback': Called for each language when merging
+fallback data into the cache.
+$cache: The LocalisationCache object
+$code: language code
+&$alldata: The localisation data from core and extensions. Note some keys may
+  be omitted if they won't be merged into the final result.
+
 'LocalisationChecksBlacklist': When fetching the blacklist of
 localisation checks.
 &$blacklist: array of checks to blacklist. See the bottom of
@@ -1636,6 +1695,13 @@ optional localisation messages
 &$ignored Array of ignored message keys
 &$optional Array of optional message keys
 
+'LogEventsListGetExtraInputs': When getting extra inputs to display on Special:Log
+for a specific log type
+$type: String of log type being displayed
+$logEventsList: LogEventsList object for context and access to the WebRequest
+&$input: string HTML of an input element
+
+
 'LogEventsListShowLogExtract': Called before the string is added to OutputPage.
 Returning false will prevent the string from being added to the OutputPage.
 &$s: html string to show for the log extract
@@ -1773,6 +1839,18 @@ $db: The database object to be queried.
 &$opts: Options for the query.
 &$join_conds: Join conditions for the query.
 
+'MovePageCheckPermissions': Specify whether the user is allowed to move the page.
+$oldTitle: Title object of the current (old) location
+$newTitle: Title object of the new location
+$user: User making the move
+$reason: string of the reason provided by the user
+$status: Status object to pass error messages to
+
+'MovePageIsValidMove': Specify whether a page can be moved for technical reasons.
+$oldTitle: Title object of the current (old) location
+$newTitle: Title object of the new location
+$status: Status object to pass error messages to
+
 'BaseTemplateToolbox': Called by BaseTemplate when building the $toolbox array
 and returning it for the skin to output. You can add items to the toolbox while
 still letting the skin make final decisions on skin-specific markup conventions
@@ -2077,6 +2155,13 @@ $search : search term (not guaranteed to be conveniently normalized)
 $limit : maximum number of results to return
 &$results : out param: array of page names (strings)
 
+'PrefixSearchExtractNamespace': Called if core was not able to extract a
+namespace from the search string so that extensions can attempt it.
+$namespaces : array of int namespace keys to search in (change this if you can
+extract namespaces)
+$search : search term (replace this with term without the namespace if you can
+extract one)
+
 'PrefsEmailAudit': Called when user changes their email address.
 $user: User (object) changing his email address
 $oldaddr: old email address (string)
@@ -2283,6 +2368,11 @@ $type: 'normal' or 'history' for old/diff views
 the MediaWiki icon but plain text instead.
 $skin: Skin object
 
+'SkinPreloadExistence': Supply titles that should be added to link existence
+cache before the page is rendered.
+&$titles: Array of Title objects
+$skin: Skin object
+
 'SkinSubPageSubtitle': At the beginning of Skin::subPageSubtitle().
 &$subpages: Subpage links HTML
 $skin: Skin object
@@ -2301,8 +2391,9 @@ $nav_urls: array of tabs
 which the actual html is constructed.
 &$languageLink: array containing data about the link. The following keys can be
   modified: href, text, title, class, lang, hreflang. Each of them is a string.
-$languageLinkTitle: Title object belonging to the external language link
-$title: Title object of the page the link belongs to
+$languageLinkTitle: Title object belonging to the external language link.
+$title: Title object of the page the link belongs to.
+$outputPage: The OutputPage object the links are built from.
 
 To alter the structured navigation links in SkinTemplates, there are three
 hooks called in different spots:
@@ -2390,6 +2481,11 @@ UsersPager::getQueryInfo()
 $pager: The UsersPager instance
 $query: The query array to be returned
 
+'SpecialLogAddLogSearchRelations': Add log relations to the current log
+$type: String of the log type
+$request: WebRequest object for getting the value provided by the current user
+&$qc: Array for query conditions to add
+
 'SpecialMovepageAfterMove': Called after moving a page.
 $movePage: MovePageForm object
 $oldTitle: old title (object)
@@ -2504,16 +2600,11 @@ $specialSearch: SpecialSearch object ($this)
 $output: $wgOut
 $term: Search term specified by the user
 
-'SpecialSearchResults': Called before search result display when there are
-matches.
+'SpecialSearchResults': Called before search result display
 $term: string of search term
 &$titleMatches: empty or SearchResultSet object
 &$textMatches: empty or SearchResultSet object
 
-'SpecialSearchNoResults': Called before search result display when there are no
-matches.
-$term: string of search term
-
 'SpecialStatsAddExtra': Add extra statistic at the end of Special:Statistics.
 &$extraStats: Array to save the new stats
   ( $extraStats['<name of statistic>'] => <value>; )
@@ -2565,6 +2656,10 @@ database result.
 &$titleArray: set this to an object to override the default object returned
 $res: database result used to create the object
 
+'TitleExists': Called when determining whether a page exists at a given title.
+$title: The title being tested.
+&$exists: Whether the title exists.
+
 'TitleQuickPermissions': Called from Title::checkQuickPermissions to add to
 or override the quick permissions check.
 $title: The Title object being accessed
@@ -2662,8 +2757,10 @@ actions).
 $action: action name
 $article: article "acted on"
 
-'UnitTestsList': Called when building a list of files with PHPUnit tests.
-&$files: list of files
+'UnitTestsList': Called when building a list of paths containing PHPUnit tests.
+Since 1.24: Paths pointing to a directory will be recursively scanned for
+test case files matching the suffix "Test.php".
+&$paths: list of test cases and directories to search.
 
 'UnwatchArticle': Before a watch is removed from an article.
 $user: user watching
@@ -2791,7 +2888,7 @@ $user: User object
 'UserGetLanguageObject': Called when getting user's interface language object.
 $user: User object
 &$code: Language code that will be used to create the object
-$context: RequestContext object
+$context: IContextSource object
 
 'UserGetReservedNames': Allows to modify $wgReservedUsernames at run time.
 &$reservedUsernames: $wgReservedUsernames
@@ -2924,6 +3021,11 @@ when UserMailer sends an email, with a bounce handling extension.
 $to: Array of MailAddress objects for the recipients
 &$returnPath: The return address string
 
+'LoginFormValidErrorMessages': Called in LoginForm when a function gets valid error
+messages. Allows to add additional error messages (except messages already in
+LoginForm::$validErrorMessages).
+&$messages Already added messages (inclusive messages from LoginForm::$validErrorMessages)
+
 'WantedPages::getQueryInfo': Called in WantedPagesPage::getQueryInfo(), can be
 used to alter the SQL query which gets the list of wanted pages.
 &$wantedPages: WantedPagesPage object
@@ -2938,12 +3040,18 @@ $page: WikiPage object to be watched
 $user: user that watched
 $page: WikiPage object watched
 
+'WatchlistEditorBeforeFormRender': Before building the Special:EditWatchlist
+form, used to manipulate the list of pages or preload data based on that list.
+&$watchlistInfo: array of watchlisted pages in
+  [namespaceId => ['title1' => 1, 'title2' => 1]] format
+
 'WatchlistEditorBuildRemoveLine': when building remove lines in
 Special:Watchlist/edit.
 &$tools: array of extra links
 $title: Title object
 $redirect: whether the page is a redirect
 $skin: Skin object
+&$link: HTML link to title
 
 'WebRequestPathInfoRouter': While building the PathRouter to parse the
 REQUEST_URI.
index ff735d5..a28bf3e 100644 (file)
@@ -4,7 +4,9 @@ kss: kssnodecheck
 # Generates CSS of mediawiki.ui and mediawiki.ui.button using ResourceLoader, then applies it to the
 # KSS style guide
        $(eval KSS_RL_TMP := $(shell mktemp /tmp/tmp.XXXXXXXXXX))
-       @curl -sG "${MEDIAWIKI_LOAD_URL}?modules=mediawiki.ui.anchor|mediawiki.ui.checkbox|mediawiki.ui.input|mediawiki.legacy.shared|mediawiki.legacy.commonPrint|mediawiki.ui|mediawiki.ui.button&only=styles" > $(KSS_RL_TMP)
+# Keep module names in strict alphabetical order, so CSS loads in the same order as ResourceLoader's addModuleStyles does; this can affect rendering.
+# See OutputPage::makeResourceLoaderLink.
+       @curl -sG "${MEDIAWIKI_LOAD_URL}?modules=mediawiki.legacy.commonPrint|mediawiki.legacy.shared|mediawiki.ui|mediawiki.ui.anchor|mediawiki.ui.button|mediawiki.ui.checkbox|mediawiki.ui.icon|mediawiki.ui.input|mediawiki.ui.text&only=styles" > $(KSS_RL_TMP)
        @node_modules/.bin/kss-node ../../resources/src/mediawiki.ui static/ --css $(KSS_RL_TMP) -t styleguide-template
        @rm $(KSS_RL_TMP)
 
index b6036b2..933260e 100644 (file)
        </header>
 
        <div class="container">
-               <nav class="content">
+               <nav>
                        <ul>
                                <li><a href="index.html"><span>0.0</span> Overview</a></li>
                                {{#eachRoot}}
-                                       <li><a href="section-{{reference}}.html"><span>{{reference}}.0</span> {{header}}</a></li>
+                                       <li>
+                                               <a href="section-{{ reference }}.html">
+                                                       <span>{{ reference }}.0</span> {{ header }}
+                                               </a>
+                                               <ul>
+                                               {{#eachSection reference}}
+                                                       {{#whenDepth  2}}
+                                                               <li>
+                                                                       <a href="section-{{../../reference}}.html#section-{{ reference }}">
+                                                                               <span>{{ reference }}</span>
+                                                                               {{ header }}
+                                                                       </a>
+                                                               </li>
+                                                       {{/whenDepth}}
+                                               {{/eachSection}}
+                                               </ul>
+                                       </li>
                                {{/eachRoot}}
                        </ul>
                </nav>
 
-               <article>
+               <div class="content">
                        {{#if overview}}
                                {{html overview}}
                        {{else}}
                                {{#eachSection rootNumber}}
-                               <section>
+                               <div>
                                        {{#whenDepth 1}}
                                                <h1>{{ reference }}.0 {{ header }}</h1>
                                        {{else}}
                                                {{#whenDepth 2}}
+                                               <a name="section-{{ reference }}"></a>
                                                <h2>{{ reference }} {{ header }}</h2>
                                                {{/whenDepth}}
                                                {{#whenDepth 3}}
                                                                {{html description}}
                                                        {{/if}}
                                        {{/ifAny}}
-                               </section>
+                               </div>
                                {{/eachSection}}
                        {{/if}}
-               </article>
+               </div>
        </div>
 </div></body>
 </html>
index f5ddff1..eeea1a8 100644 (file)
@@ -1,4 +1,3 @@
-
 .container {
        width: 100%;
 }
@@ -7,7 +6,7 @@ nav {
        display: none;
 }
 
-article {
+.content {
        .example {
                blockquote {
                        margin-top: 20px;
@@ -25,7 +24,8 @@ body {
        font-family: "Nimbus Sans L", "Liberation Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
 }
 
-.content.kss-no-margin {
+.kss-no-margin {
+       // FIXME: Is this being used anywhere? Remove if not.
        margin: 0;
 }
 
@@ -85,11 +85,22 @@ nav {
                                        width: 35px;
                                }
                        }
+
+                       ul {
+                               li {
+                                       margin: 0;
+                               }
+
+                               li a {
+                                       text-transform: none;
+                                       font-weight: normal;
+                               }
+                       }
                }
        }
 }
 
-article {
+.content {
        -webkit-flex: 1;
        flex: 1;
 
@@ -130,6 +141,10 @@ article {
                        display: block;
                        margin: 0;
                        margin-left: 20px;
+
+                       div {
+                               margin-bottom: 5px;
+                       }
                }
        }
 }
@@ -154,7 +169,7 @@ article {
                width: auto;
        }
 
-       article {
+       .content {
                margin-left: 30px;
        }
 
diff --git a/docs/mwlogger.txt b/docs/mwlogger.txt
new file mode 100644 (file)
index 0000000..aab9599
--- /dev/null
@@ -0,0 +1,70 @@
+MWLogger implements a PSR-3 [0] compatible message logging system.
+
+The MWLogger class is actually a thin wrapper around any PSR-3 LoggerInterface
+implementation. Named MWLogger instances can be obtained from the
+MWLogger::getInstance() static method. MWLogger expects a class implementing
+the MWLoggerSpi interface to act as a factory for new MWLogger instances.
+
+The "Spi" in MWLoggerSpi stands for "service provider interface". An SPI is
+a 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 MWLogger service to allow alternate
+PSR-3 logging implementations to be easily integrated with MediaWiki.
+
+The MWLogger::getInstance() static method is the means by which most code
+acquires an MWLogger instance. This in turn delegates creation of MWLogger
+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 MWLogger::registerProvider method can be called
+to inject an MWLoggerSpi instance into MWLogger 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
+MWLogger 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 ==
+; MWLogger
+: PSR-3 compatible logger that wraps any \Psr\Log\LoggerInterface
+  implementation
+; MWLoggerSpi
+: Service provider interface for MWLogger factories
+; 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 MWLogger
+
+[0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
+[1]: https://github.com/Seldaek/monolog
index 58f77cf..e998ebd 100644 (file)
@@ -53,40 +53,30 @@ server-side source files. This is done by editing some pages on the wiki:
 These can also be customised on a per-user basis, by editing
 [[User:<name>/vector.css]], [[User:<name>/vector.js]], etc.
 
-This feature has led to a wide variety of "user styles" becoming available:
 
-https://www.mediawiki.org/wiki/Manual:Gallery_of_user_styles
+== Custom skins ==
 
-If you want a different look for your wiki, that gallery is a good place to start.
+Several custom skins are available as of 2014.
 
-== Drop-in custom skins ==
+https://www.mediawiki.org/wiki/Category:All_skins
 
-If you put a file in MediaWiki's skins directory, ending in .php, the name of 
-the file will automatically be added as a skin name, and the file will be
-expected to contain a class called Skin<name> with the skin class. You can then
-make that skin the default by adding to LocalSettings.php:
+Installing a skin requires adding its files in a subdirectory under skins/ and
+adding an appropriate require_once line to LocalSettings.php, similarly to how
+extensions are installed.
 
-$wgDefaultSkin = '<name>';
+You can then make that skin the default by adding:
+  $wgDefaultSkin = '<name>';
 
-You can also disable dropped-in or core skins using:
+Or disable it entirely by removing the require_once line. (User settings will
+not be lost if it's reenabled later.)
 
-$wgSkipSkins[] = '<name>';
+See https://www.mediawiki.org/wiki/Manual:Skinning for more information on
+writing new skins.
 
-This technique is used by the more ambitious MediaWiki site operators, to 
-create complex custom skins for their wikis. It should be preferred over 
-editing the core Monobook skin directly.
-
-See https://www.mediawiki.org/wiki/Manual:Skinning for more information.
-
-== Extension skins ==
-
-It is now possible (since MediaWiki 1.12) to write a skin as a standard
-MediaWiki extension, enabled via LocalSettings.php. This is done by adding 
-it to $wgValidSkinNames, for example:
-
-$wgValidSkinNames['mycoolskin'] = 'MyCoolSkin';
-
-and then registering a class in $wgAutoloadClasses called SkinMycoolSkin, which 
-derives from Skin. This technique is apparently not yet used (as of 2008) 
-outside the DumpHTML extension.
 
+Until MediaWiki 1.25 it used to be possible to just put a <name>.php file in
+MediaWiki's skins/ directory, which would be loaded and expected to contain the
+Skin<name> class. This way has always been discouraged because of its limitations
+(inability to add localisation messages, ResourceLoader modules, etc.) and
+awkwardness in managing such skins. For information on migrating skins using
+this old method, see <https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery>.
index a285a5b..51c1b55 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en" dir="ltr">
 <head>
-       <link rel="stylesheet" href="../../skins/common/shared.css">
+       <link rel="stylesheet" href="../../resources/src/mediawiki.legacy/shared.css">
 </head>
 <body style="font-size: small;">
 
index 55f17ac..dcd171f 100644 (file)
@@ -47,6 +47,7 @@ $wgArticlePath = false; # Don't let a "/*" article path clober our action path
 $wgActionPaths = array( "$wgUploadPath/" );
 
 wfImageAuthMain();
+wfProfileOut( 'img_auth.php' );
 wfLogProfilingData();
 // Commit and close up!
 $factory = wfGetLBFactory();
index 2c71ce8..e89e500 100644 (file)
@@ -36,8 +36,11 @@ $wgAutoloadLocalClasses = array(
        'AuthPluginUser' => 'includes/AuthPlugin.php',
        'Autopromote' => 'includes/Autopromote.php',
        'Block' => 'includes/Block.php',
+       'BloomCache' => 'includes/cache/bloom/BloomCache.php',
+       'BloomCacheRedis' => 'includes/cache/bloom/BloomCacheRedis.php',
+       'BloomFilterTitleHasLogs' => 'includes/cache/bloom/BloomFilters.php',
        'Category' => 'includes/Category.php',
-       'Categoryfinder' => 'includes/Categoryfinder.php',
+       'CategoryFinder' => 'includes/CategoryFinder.php',
        'CategoryViewer' => 'includes/CategoryViewer.php',
        'ChangeTags' => 'includes/ChangeTags.php',
        'ChannelFeed' => 'includes/Feed.php',
@@ -45,8 +48,6 @@ $wgAutoloadLocalClasses = array(
        'CollationCkb' => 'includes/Collation.php',
        'CollationEt' => 'includes/Collation.php',
        'ConcatenatedGzipHistoryBlob' => 'includes/HistoryBlob.php',
-       'Cookie' => 'includes/Cookie.php',
-       'CookieJar' => 'includes/Cookie.php',
        'CurlHttpRequest' => 'includes/HttpFunctions.php',
        'DeprecatedGlobal' => 'includes/DeprecatedGlobal.php',
        'DerivativeRequest' => 'includes/WebRequest.php',
@@ -64,7 +65,7 @@ $wgAutoloadLocalClasses = array(
        'DumpOutput' => 'includes/Export.php',
        'DumpPipeOutput' => 'includes/Export.php',
        'EditPage' => 'includes/EditPage.php',
-       'EmailNotification' => 'includes/UserMailer.php',
+       'EmptyBloomCache' => 'includes/cache/bloom/BloomCache.php',
        'Fallback' => 'includes/Fallback.php',
        'FauxRequest' => 'includes/WebRequest.php',
        'FauxResponse' => 'includes/WebResponse.php',
@@ -81,6 +82,7 @@ $wgAutoloadLocalClasses = array(
        'Html' => 'includes/Html.php',
        'HtmlFormatter' => 'includes/HtmlFormatter.php',
        'HTMLApiField' => 'includes/htmlform/HTMLApiField.php',
+       'HTMLAutoCompleteSelectField' => 'includes/htmlform/HTMLAutoCompleteSelectField.php',
        'HTMLButtonField' => 'includes/htmlform/HTMLButtonField.php',
        'HTMLCheckField' => 'includes/htmlform/HTMLCheckField.php',
        'HTMLCheckMatrix' => 'includes/htmlform/HTMLCheckMatrix.php',
@@ -101,6 +103,8 @@ $wgAutoloadLocalClasses = array(
        'HTMLSelectField' => 'includes/htmlform/HTMLSelectField.php',
        'HTMLSelectLimitField' => 'includes/htmlform/HTMLSelectLimitField.php',
        'HTMLSelectOrOtherField' => 'includes/htmlform/HTMLSelectOrOtherField.php',
+       'HTMLSelectNamespace' => 'includes/htmlform/HTMLSelectNamespace.php',
+       'HTMLTagFilter' => 'includes/htmlform/HTMLTagFilter.php',
        'HTMLSubmitField' => 'includes/htmlform/HTMLSubmitField.php',
        'HTMLTextAreaField' => 'includes/htmlform/HTMLTextAreaField.php',
        'HTMLTextField' => 'includes/htmlform/HTMLTextField.php',
@@ -116,15 +120,16 @@ $wgAutoloadLocalClasses = array(
        'LinkFilter' => 'includes/LinkFilter.php',
        'MagicWord' => 'includes/MagicWord.php',
        'MagicWordArray' => 'includes/MagicWord.php',
-       'MailAddress' => 'includes/UserMailer.php',
        'MediaWiki' => 'includes/MediaWiki.php',
        'MediaWikiVersionFetcher' => 'includes/MediaWikiVersionFetcher.php',
        'Message' => 'includes/Message.php',
        'MessageBlobStore' => 'includes/MessageBlobStore.php',
        'MimeMagic' => 'includes/MimeMagic.php',
+       'MovePage' => 'includes/MovePage.php',
        'MWHookException' => 'includes/Hooks.php',
        'MWHttpRequest' => 'includes/HttpFunctions.php',
        'MWNamespace' => 'includes/MWNamespace.php',
+       'ObjectFactory' => 'includes/libs/ObjectFactory.php',
        'OutputPage' => 'includes/OutputPage.php',
        'PathRouter' => 'includes/PathRouter.php',
        'PathRouterPatternReplacer' => 'includes/PathRouter.php',
@@ -159,7 +164,6 @@ $wgAutoloadLocalClasses = array(
        'StubObject' => 'includes/StubObject.php',
        'StubUserLang' => 'includes/StubObject.php',
        'MWTimestamp' => 'includes/MWTimestamp.php',
-       'TimestampException' => 'includes/TimestampException.php',
        'Title' => 'includes/Title.php',
        'TitleArray' => 'includes/TitleArray.php',
        'TitleArrayFromResult' => 'includes/TitleArrayFromResult.php',
@@ -169,7 +173,6 @@ $wgAutoloadLocalClasses = array(
        'User' => 'includes/User.php',
        'UserArray' => 'includes/UserArray.php',
        'UserArrayFromResult' => 'includes/UserArrayFromResult.php',
-       'UserMailer' => 'includes/UserMailer.php',
        'UserRightsProxy' => 'includes/UserRightsProxy.php',
        'WatchedItem' => 'includes/WatchedItem.php',
        'WebRequest' => 'includes/WebRequest.php',
@@ -213,6 +216,7 @@ $wgAutoloadLocalClasses = array(
        # includes/api
        'ApiBase' => 'includes/api/ApiBase.php',
        'ApiBlock' => 'includes/api/ApiBlock.php',
+       'ApiClearHasMsg' => 'includes/api/ApiClearHasMsg.php',
        'ApiComparePages' => 'includes/api/ApiComparePages.php',
        'ApiCreateAccount' => 'includes/api/ApiCreateAccount.php',
        'ApiDelete' => 'includes/api/ApiDelete.php',
@@ -227,7 +231,7 @@ $wgAutoloadLocalClasses = array(
        'ApiFormatBase' => 'includes/api/ApiFormatBase.php',
        'ApiFormatDbg' => 'includes/api/ApiFormatDbg.php',
        'ApiFormatDump' => 'includes/api/ApiFormatDump.php',
-       'ApiFormatFeedWrapper' => 'includes/api/ApiFormatBase.php',
+       'ApiFormatFeedWrapper' => 'includes/api/ApiFormatFeedWrapper.php',
        'ApiFormatJson' => 'includes/api/ApiFormatJson.php',
        'ApiFormatNone' => 'includes/api/ApiFormatNone.php',
        'ApiFormatPhp' => 'includes/api/ApiFormatPhp.php',
@@ -256,12 +260,14 @@ $wgAutoloadLocalClasses = array(
        'ApiPurge' => 'includes/api/ApiPurge.php',
        'ApiQuery' => 'includes/api/ApiQuery.php',
        'ApiQueryAllCategories' => 'includes/api/ApiQueryAllCategories.php',
+       'ApiQueryAllDeletedRevisions' => 'includes/api/ApiQueryAllDeletedRevisions.php',
        'ApiQueryAllImages' => 'includes/api/ApiQueryAllImages.php',
        'ApiQueryAllLinks' => 'includes/api/ApiQueryAllLinks.php',
        'ApiQueryAllMessages' => 'includes/api/ApiQueryAllMessages.php',
        'ApiQueryAllPages' => 'includes/api/ApiQueryAllPages.php',
        'ApiQueryAllUsers' => 'includes/api/ApiQueryAllUsers.php',
        'ApiQueryBacklinks' => 'includes/api/ApiQueryBacklinks.php',
+       'ApiQueryBacklinksprop' => 'includes/api/ApiQueryBacklinksprop.php',
        'ApiQueryBase' => 'includes/api/ApiQueryBase.php',
        'ApiQueryBlocks' => 'includes/api/ApiQueryBlocks.php',
        'ApiQueryCategories' => 'includes/api/ApiQueryCategories.php',
@@ -269,6 +275,7 @@ $wgAutoloadLocalClasses = array(
        'ApiQueryCategoryMembers' => 'includes/api/ApiQueryCategoryMembers.php',
        'ApiQueryContributions' => 'includes/api/ApiQueryUserContributions.php',
        'ApiQueryContributors' => 'includes/api/ApiQueryContributors.php',
+       'ApiQueryDeletedRevisions' => 'includes/api/ApiQueryDeletedRevisions.php',
        'ApiQueryDeletedrevs' => 'includes/api/ApiQueryDeletedrevs.php',
        'ApiQueryDisabled' => 'includes/api/ApiQueryDisabled.php',
        'ApiQueryDuplicateFiles' => 'includes/api/ApiQueryDuplicateFiles.php',
@@ -295,12 +302,13 @@ $wgAutoloadLocalClasses = array(
        'ApiQueryRandom' => 'includes/api/ApiQueryRandom.php',
        'ApiQueryRecentChanges' => 'includes/api/ApiQueryRecentChanges.php',
        'ApiQueryFileRepoInfo' => 'includes/api/ApiQueryFileRepoInfo.php',
-       'ApiQueryRedirects' => 'includes/api/ApiQueryRedirects.php',
        'ApiQueryRevisions' => 'includes/api/ApiQueryRevisions.php',
+       'ApiQueryRevisionsBase' => 'includes/api/ApiQueryRevisionsBase.php',
        'ApiQuerySearch' => 'includes/api/ApiQuerySearch.php',
        'ApiQuerySiteinfo' => 'includes/api/ApiQuerySiteinfo.php',
        'ApiQueryStashImageInfo' => 'includes/api/ApiQueryStashImageInfo.php',
        'ApiQueryTags' => 'includes/api/ApiQueryTags.php',
+       'ApiQueryTokens' => 'includes/api/ApiQueryTokens.php',
        'ApiQueryUserInfo' => 'includes/api/ApiQueryUserInfo.php',
        'ApiQueryUsers' => 'includes/api/ApiQueryUsers.php',
        'ApiQueryWatchlist' => 'includes/api/ApiQueryWatchlist.php',
@@ -331,7 +339,6 @@ $wgAutoloadLocalClasses = array(
        'HTMLFileCache' => 'includes/cache/HTMLFileCache.php',
        'ICacheHelper' => 'includes/cache/CacheHelper.php',
        'LCStore' => 'includes/cache/LocalisationCache.php',
-       'LCStoreAccel' => 'includes/cache/LocalisationCache.php',
        'LCStoreCDB' => 'includes/cache/LocalisationCache.php',
        'LCStoreDB' => 'includes/cache/LocalisationCache.php',
        'LCStoreNull' => 'includes/cache/LocalisationCache.php',
@@ -367,23 +374,27 @@ $wgAutoloadLocalClasses = array(
        'ConfigException' => 'includes/config/ConfigException.php',
        'ConfigFactory' => 'includes/config/ConfigFactory.php',
        'GlobalVarConfig' => 'includes/config/GlobalVarConfig.php',
+       'HashConfig' => 'includes/config/HashConfig.php',
+       'MultiConfig' => 'includes/config/MultiConfig.php',
+       'MutableConfig' => 'includes/config/MutableConfig.php',
 
        # includes/content
        'AbstractContent' => 'includes/content/AbstractContent.php',
-       'ContentHandler' => 'includes/content/ContentHandler.php',
+       'CodeContentHandler' => 'includes/content/CodeContentHandler.php',
        'Content' => 'includes/content/Content.php',
-       'CssContentHandler' => 'includes/content/CssContentHandler.php',
+       'ContentHandler' => 'includes/content/ContentHandler.php',
        'CssContent' => 'includes/content/CssContent.php',
-       'JavaScriptContentHandler' => 'includes/content/JavaScriptContentHandler.php',
+       'CssContentHandler' => 'includes/content/CssContentHandler.php',
        'JavaScriptContent' => 'includes/content/JavaScriptContent.php',
-       'JSONContentHandler' => 'includes/content/JSONContentHandler.php',
-       'JSONContent' => 'includes/content/JSONContent.php',
+       'JavaScriptContentHandler' => 'includes/content/JavaScriptContentHandler.php',
+       'JsonContent' => 'includes/content/JsonContent.php',
+       'JsonContentHandler' => 'includes/content/JsonContentHandler.php',
        'MessageContent' => 'includes/content/MessageContent.php',
        'MWContentSerializationException' => 'includes/content/ContentHandler.php',
-       'TextContentHandler' => 'includes/content/TextContentHandler.php',
        'TextContent' => 'includes/content/TextContent.php',
-       'WikitextContentHandler' => 'includes/content/WikitextContentHandler.php',
+       'TextContentHandler' => 'includes/content/TextContentHandler.php',
        'WikitextContent' => 'includes/content/WikitextContent.php',
+       'WikitextContentHandler' => 'includes/content/WikitextContentHandler.php',
 
        # includes/context
        'ContextSource' => 'includes/context/ContextSource.php',
@@ -453,6 +464,14 @@ $wgAutoloadLocalClasses = array(
 
        # includes/debug
        'MWDebug' => 'includes/debug/MWDebug.php',
+       'MWLogger' => 'includes/debug/logger/Logger.php',
+       'MWLoggerLegacyLogger' => 'includes/debug/logger/legacy/Logger.php',
+       'MWLoggerLegacySpi' => 'includes/debug/logger/legacy/Spi.php',
+       'MWLoggerMonologHandler' => 'includes/debug/logger/monolog/Handler.php',
+       'MWLoggerMonologProcessor' => 'includes/debug/logger/monolog/Processor.php',
+       'MWLoggerMonologSpi' => 'includes/debug/logger/monolog/Spi.php',
+       'MWLoggerNullSpi' => 'includes/debug/logger/NullSpi.php',
+       'MWLoggerSpi' => 'includes/debug/logger/Spi.php',
 
        # includes/deferred
        'DataUpdate' => 'includes/deferred/DataUpdate.php',
@@ -466,7 +485,6 @@ $wgAutoloadLocalClasses = array(
        'SiteStatsUpdate' => 'includes/deferred/SiteStatsUpdate.php',
        'SqlDataUpdate' => 'includes/deferred/SqlDataUpdate.php',
        'SquidUpdate' => 'includes/deferred/SquidUpdate.php',
-       'ViewCountUpdate' => 'includes/deferred/ViewCountUpdate.php',
 
        # includes/diff
        'DiffEngine' => 'includes/diff/DairikiDiff.php',
@@ -491,6 +509,7 @@ $wgAutoloadLocalClasses = array(
        'UserBlockedError' => 'includes/exception/UserBlockedError.php',
        'UserNotLoggedIn' => 'includes/exception/UserNotLoggedIn.php',
        'ThrottledError' => 'includes/exception/ThrottledError.php',
+       'TimestampException' => 'includes/exception/TimestampException.php',
        'ReadOnlyError' => 'includes/exception/ReadOnlyError.php',
        'PermissionsError' => 'includes/exception/PermissionsError.php',
        'MWException' => 'includes/exception/MWException.php',
@@ -645,6 +664,7 @@ $wgAutoloadLocalClasses = array(
        'UploadFromUrlJob' => 'includes/jobqueue/jobs/UploadFromUrlJob.php',
        'AssembleUploadChunksJob' => 'includes/jobqueue/jobs/AssembleUploadChunksJob.php',
        'PublishStashedFileJob' => 'includes/jobqueue/jobs/PublishStashedFileJob.php',
+       'ThumbnailRenderJob' => 'includes/jobqueue/jobs/ThumbnailRenderJob.php',
 
        # includes/jobqueue/utils
        'BacklinkJobUtils' => 'includes/jobqueue/utils/BacklinkJobUtils.php',
@@ -653,8 +673,9 @@ $wgAutoloadLocalClasses = array(
        'FormatJson' => 'includes/json/FormatJson.php',
 
        # includes/libs
-       'CSSJanus' => 'includes/libs/CSSJanus.php',
-       'CSSJanusTokenizer' => 'includes/libs/CSSJanus.php',
+       'ArrayUtils' => 'includes/libs/ArrayUtils.php',
+       'Cookie' => 'includes/libs/Cookie.php',
+       'CookieJar' => 'includes/libs/Cookie.php',
        'CSSMin' => 'includes/libs/CSSMin.php',
        'GenericArrayObject' => 'includes/libs/GenericArrayObject.php',
        'HashRing' => 'includes/libs/HashRing.php',
@@ -699,6 +720,7 @@ $wgAutoloadLocalClasses = array(
        'LogPage' => 'includes/logging/LogPage.php',
        'LogPager' => 'includes/logging/LogPager.php',
        'ManualLogEntry' => 'includes/logging/LogEntry.php',
+       'MergeLogFormatter' => 'includes/logging/MergeLogFormatter.php',
        'MoveLogFormatter' => 'includes/logging/MoveLogFormatter.php',
        'NewUsersLogFormatter' => 'includes/logging/NewUsersLogFormatter.php',
        'PageLangLogFormatter' => 'includes/logging/PageLangLogFormatter.php',
@@ -717,6 +739,11 @@ $wgAutoloadLocalClasses = array(
        'PackedHoverImageGallery' => 'includes/gallery/PackedOverlayImageGallery.php',
        'PackedOverlayImageGallery' => 'includes/gallery/PackedOverlayImageGallery.php',
 
+       # includes/mail
+       'EmailNotification' => 'includes/mail/EmailNotification.php',
+       'MailAddress' => 'includes/mail/MailAddress.php',
+       'UserMailer' => 'includes/mail/UserMailer.php',
+
        # includes/media
        'BitmapHandler' => 'includes/media/Bitmap.php',
        'BitmapHandler_ClientOnly' => 'includes/media/Bitmap_ClientOnly.php',
@@ -743,6 +770,7 @@ $wgAutoloadLocalClasses = array(
        'SVGReader' => 'includes/media/SVGMetadataExtractor.php',
        'ThumbnailImage' => 'includes/media/MediaTransformOutput.php',
        'TiffHandler' => 'includes/media/Tiff.php',
+       'TransformationalImageHandler' => 'includes/media/TransformationalImageHandler.php',
        'TransformParameterError' => 'includes/media/MediaTransformOutput.php',
        'XCFHandler' => 'includes/media/XCF.php',
        'XMPInfo' => 'includes/media/XMPInfo.php',
@@ -842,15 +870,14 @@ $wgAutoloadLocalClasses = array(
 
        # includes/profiler
        'Profiler' => 'includes/profiler/Profiler.php',
-       'ProfilerMwprof' => 'includes/profiler/ProfilerMwprof.php',
        'ProfilerSimpleDB' => 'includes/profiler/ProfilerSimpleDB.php',
        'ProfilerSimpleText' => 'includes/profiler/ProfilerSimpleText.php',
        'ProfilerSimpleTrace' => 'includes/profiler/ProfilerSimpleTrace.php',
        'ProfilerSimpleUDP' => 'includes/profiler/ProfilerSimpleUDP.php',
        'ProfilerStandard' => 'includes/profiler/ProfilerStandard.php',
        'ProfilerStub' => 'includes/profiler/ProfilerStub.php',
-       'ProfileSection' => 'includes/profiler/Profiler.php',
-       'TransactionProfiler' => 'includes/profiler/Profiler.php',
+       'ProfileSection' => 'includes/profiler/ProfileSection.php',
+       'TransactionProfiler' => 'includes/profiler/TransactionProfiler.php',
 
        # includes/rcfeed
        'RCFeedEngine' => 'includes/rcfeed/RCFeedEngine.php',
@@ -867,13 +894,14 @@ $wgAutoloadLocalClasses = array(
                'includes/resourceloader/DerivativeResourceLoaderContext.php',
        'ResourceLoader' => 'includes/resourceloader/ResourceLoader.php',
        'ResourceLoaderContext' => 'includes/resourceloader/ResourceLoaderContext.php',
+       'ResourceLoaderEditToolbarModule' => 'includes/resourceloader/ResourceLoaderEditToolbarModule.php',
        'ResourceLoaderFileModule' => 'includes/resourceloader/ResourceLoaderFileModule.php',
        'ResourceLoaderFilePageModule' => 'includes/resourceloader/ResourceLoaderFilePageModule.php',
        'ResourceLoaderFilePath' => 'includes/resourceloader/ResourceLoaderFilePath.php',
-       'ResourceLoaderLESSFunctions' => 'includes/resourceloader/ResourceLoaderLESSFunctions.php',
        'ResourceLoaderModule' => 'includes/resourceloader/ResourceLoaderModule.php',
        'ResourceLoaderNoscriptModule' => 'includes/resourceloader/ResourceLoaderNoscriptModule.php',
        'ResourceLoaderSiteModule' => 'includes/resourceloader/ResourceLoaderSiteModule.php',
+       'ResourceLoaderSkinModule' => 'includes/resourceloader/ResourceLoaderSkinModule.php',
        'ResourceLoaderStartUpModule' => 'includes/resourceloader/ResourceLoaderStartUpModule.php',
        'ResourceLoaderUserCSSPrefsModule' =>
                'includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php',
@@ -930,10 +958,12 @@ $wgAutoloadLocalClasses = array(
        'SiteStore' => 'includes/site/SiteStore.php',
 
        # includes/skins
-       'BaseTemplate' => 'includes/skins/SkinTemplate.php',
-       'MediaWikiI18N' => 'includes/skins/SkinTemplate.php',
-       'QuickTemplate' => 'includes/skins/SkinTemplate.php',
+       'BaseTemplate' => 'includes/skins/BaseTemplate.php',
+       'MediaWikiI18N' => 'includes/skins/MediaWikiI18N.php',
+       'QuickTemplate' => 'includes/skins/QuickTemplate.php',
        'Skin' => 'includes/skins/Skin.php',
+       'SkinApi' => 'includes/skins/SkinApi.php',
+       'SkinApiTemplate' => 'includes/skins/SkinApiTemplate.php',
        'SkinException' => 'includes/skins/SkinException.php',
        'SkinFactory' => 'includes/skins/SkinFactory.php',
        'SkinFallback' => 'includes/skins/SkinFallback.php',
@@ -981,6 +1011,7 @@ $wgAutoloadLocalClasses = array(
        'LoginForm' => 'includes/specials/SpecialUserlogin.php',
        'LonelyPagesPage' => 'includes/specials/SpecialLonelypages.php',
        'LongPagesPage' => 'includes/specials/SpecialLongpages.php',
+       'MediaStatisticsPage' => 'includes/specials/SpecialMediaStatistics.php',
        'MergeHistoryPager' => 'includes/specials/SpecialMergeHistory.php',
        'MIMEsearchPage' => 'includes/specials/SpecialMIMEsearch.php',
        'MostcategoriesPage' => 'includes/specials/SpecialMostcategories.php',
@@ -994,7 +1025,6 @@ $wgAutoloadLocalClasses = array(
        'NewFilesPager' => 'includes/specials/SpecialNewimages.php',
        'NewPagesPager' => 'includes/specials/SpecialNewpages.php',
        'PageArchive' => 'includes/specials/SpecialUndelete.php',
-       'PopularPagesPage' => 'includes/specials/SpecialPopularpages.php',
        'ProtectedPagesPager' => 'includes/specials/SpecialProtectedpages.php',
        'ProtectedTitlesPager' => 'includes/specials/SpecialProtectedtitles.php',
        'RandomPage' => 'includes/specials/SpecialRandompage.php',
@@ -1003,6 +1033,7 @@ $wgAutoloadLocalClasses = array(
        'SpecialAllMessages' => 'includes/specials/SpecialAllMessages.php',
        'SpecialAllMyUploads' => 'includes/specials/SpecialMyRedirectPages.php',
        'SpecialAllPages' => 'includes/specials/SpecialAllPages.php',
+       'SpecialApiHelp' => 'includes/specials/SpecialApiHelp.php',
        'SpecialBlankpage' => 'includes/specials/SpecialBlankpage.php',
        'SpecialBlock' => 'includes/specials/SpecialBlock.php',
        'SpecialBlockList' => 'includes/specials/SpecialBlockList.php',
@@ -1121,7 +1152,6 @@ $wgAutoloadLocalClasses = array(
        'UploadStashNoSuchKeyException' => 'includes/upload/UploadStash.php',
 
        # includes/utils
-       'ArrayUtils' => 'includes/utils/ArrayUtils.php',
        'CdbException' => 'includes/utils/Cdb.php',
        'CdbFunctions' => 'includes/utils/CdbPHP.php',
        'CdbReader' => 'includes/utils/Cdb.php',
index 6a29a05..3c80035 100644 (file)
@@ -885,7 +885,7 @@ class Block {
        /**
         * Get/set a flag determining whether the master is used for reads
         *
-        * @param bool $x
+        * @param bool|null $x
         * @return bool
         */
        public function fromMaster( $x = null ) {
@@ -893,8 +893,8 @@ class Block {
        }
 
        /**
-        * Get/set whether the Block is a hardblock (affects logged-in users on a given IP/range
-        * @param bool $x
+        * Get/set whether the Block is a hardblock (affects logged-in users on a given IP/range)
+        * @param bool|null $x
         * @return bool
         */
        public function isHardblock( $x = null ) {
@@ -906,6 +906,10 @@ class Block {
                        : $this->isHardblock;
        }
 
+       /**
+        * @param null|bool $x
+        * @return bool
+        */
        public function isAutoblocking( $x = null ) {
                wfSetVar( $this->isAutoblocking, $x );
 
@@ -919,7 +923,7 @@ class Block {
        /**
         * Get/set whether the Block prevents a given action
         * @param string $action
-        * @param bool $x
+        * @param bool|null $x
         * @return bool
         */
        public function prevents( $action, $x = null ) {
@@ -1110,6 +1114,7 @@ class Block {
 
        /**
         * From a list of multiple blocks, find the most exact and strongest Block.
+        *
         * The logic for finding the "best" block is:
         *  - Blocks that match the block's target IP are preferred over ones in a range
         *  - Hardblocks are chosen over softblocks that prevent account creation
@@ -1117,12 +1122,15 @@ class Block {
         *  - Other softblocks are chosen over autoblocks
         *  - If there are multiple exact or range blocks at the same level, the one chosen
         *    is random
+        * This should be used when $blocks where retrieved from the user's IP address
+        * and $ipChain is populated from the same IP address information.
         *
-        * @param array $blocks Array of blocks
+        * @param array $blocks Array of Block objects
         * @param array $ipChain List of IPs (strings). This is used to determine how "close"
         *        a block is to the server, and if a block matches exactly, or is in a range.
         *        The order is furthest from the server to nearest e.g., (Browser, proxy1, proxy2,
         *        local-squid, ...)
+        * @throws MWException
         * @return Block|null The "best" block from the list
         */
        public static function chooseBlock( array $blocks, array $ipChain ) {
@@ -1156,6 +1164,7 @@ class Block {
                );
                $ipChain = array_reverse( $ipChain );
 
+               /** @var Block $block */
                foreach ( $blocks as $block ) {
                        // Stop searching if we have already have a "better" block. This
                        // is why the order of the blocks matters
diff --git a/includes/CategoryFinder.php b/includes/CategoryFinder.php
new file mode 100644 (file)
index 0000000..cf537e1
--- /dev/null
@@ -0,0 +1,244 @@
+<?php
+/**
+ * Recent changes filtering by category.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * The "CategoryFinder" class takes a list of articles, creates an internal
+ * representation of all their parent categories (as well as parents of
+ * parents etc.). From this representation, it determines which of these
+ * articles are in one or all of a given subset of categories.
+ *
+ * Example use :
+ * <code>
+ *     # Determines whether the article with the page_id 12345 is in both
+ *     # "Category 1" and "Category 2" or their subcategories, respectively
+ *
+ *     $cf = new CategoryFinder;
+ *     $cf->seed(
+ *         array( 12345 ),
+ *         array( 'Category 1', 'Category 2' ),
+ *         'AND'
+ *     );
+ *     $a = $cf->run();
+ *     print implode( ',' , $a );
+ * </code>
+ *
+ */
+class CategoryFinder {
+       /** @var int[] The original article IDs passed to the seed function */
+       protected $articles = array();
+
+       /** @var array Array of DBKEY category names for categories that don't have a page */
+       protected $deadend = array();
+
+       /** @var array Array of [ID => array()] */
+       protected $parents = array();
+
+       /** @var array Array of article/category IDs */
+       protected $next = array();
+
+       /** @var array Array of DBKEY category names */
+       protected $targets = array();
+
+       /** @var array */
+       protected $name2id = array();
+
+       /** @var string "AND" or "OR" */
+       protected $mode;
+
+       /** @var DatabaseBase Read-DB slave */
+       protected $dbr;
+
+       /**
+        * Initializes the instance. Do this prior to calling run().
+        * @param array $articleIds Array of article IDs
+        * @param array $categories FIXME
+        * @param string $mode FIXME, default 'AND'.
+        * @todo FIXME: $categories/$mode
+        */
+       public function seed( $articleIds, $categories, $mode = 'AND' ) {
+               $this->articles = $articleIds;
+               $this->next = $articleIds;
+               $this->mode = $mode;
+
+               # Set the list of target categories; convert them to DBKEY form first
+               $this->targets = array();
+               foreach ( $categories as $c ) {
+                       $ct = Title::makeTitleSafe( NS_CATEGORY, $c );
+                       if ( $ct ) {
+                               $c = $ct->getDBkey();
+                               $this->targets[$c] = $c;
+                       }
+               }
+       }
+
+       /**
+        * Iterates through the parent tree starting with the seed values,
+        * then checks the articles if they match the conditions
+        * @return array Array of page_ids (those given to seed() that match the conditions)
+        */
+       public function run() {
+               $this->dbr = wfGetDB( DB_SLAVE );
+               while ( count( $this->next ) > 0 ) {
+                       $this->scanNextLayer();
+               }
+
+               # Now check if this applies to the individual articles
+               $ret = array();
+
+               foreach ( $this->articles as $article ) {
+                       $conds = $this->targets;
+                       if ( $this->check( $article, $conds ) ) {
+                               # Matches the conditions
+                               $ret[] = $article;
+                       }
+               }
+               return $ret;
+       }
+
+       /**
+        * Get the parents. Only really useful if run() has been called already
+        * @return array
+        */
+       public function getParents() {
+               return $this->parents;
+       }
+
+       /**
+        * This functions recurses through the parent representation, trying to match the conditions
+        * @param int $id The article/category to check
+        * @param array $conds The array of categories to match
+        * @param array $path Used to check for recursion loops
+        * @return bool Does this match the conditions?
+        */
+       private function check( $id, &$conds, $path = array() ) {
+               // Check for loops and stop!
+               if ( in_array( $id, $path ) ) {
+                       return false;
+               }
+
+               $path[] = $id;
+
+               # Shortcut (runtime paranoia): No conditions=all matched
+               if ( count( $conds ) == 0 ) {
+                       return true;
+               }
+
+               if ( !isset( $this->parents[$id] ) ) {
+                       return false;
+               }
+
+               # iterate through the parents
+               foreach ( $this->parents[$id] as $p ) {
+                       $pname = $p->cl_to;
+
+                       # Is this a condition?
+                       if ( isset( $conds[$pname] ) ) {
+                               # This key is in the category list!
+                               if ( $this->mode == 'OR' ) {
+                                       # One found, that's enough!
+                                       $conds = array();
+                                       return true;
+                               } else {
+                                       # Assuming "AND" as default
+                                       unset( $conds[$pname] );
+                                       if ( count( $conds ) == 0 ) {
+                                               # All conditions met, done
+                                               return true;
+                                       }
+                               }
+                       }
+
+                       # Not done yet, try sub-parents
+                       if ( !isset( $this->name2id[$pname] ) ) {
+                               # No sub-parent
+                               continue;
+                       }
+                       $done = $this->check( $this->name2id[$pname], $conds, $path );
+                       if ( $done || count( $conds ) == 0 ) {
+                               # Subparents have done it!
+                               return true;
+                       }
+               }
+               return false;
+       }
+
+       /**
+        * Scans a "parent layer" of the articles/categories in $this->next
+        */
+       private function scanNextLayer() {
+               $profiler = new ProfileSection( __METHOD__ );
+
+               # Find all parents of the article currently in $this->next
+               $layer = array();
+               $res = $this->dbr->select(
+                       /* FROM   */ 'categorylinks',
+                       /* SELECT */ '*',
+                       /* WHERE  */ array( 'cl_from' => $this->next ),
+                       __METHOD__ . '-1'
+               );
+               foreach ( $res as $o ) {
+                       $k = $o->cl_to;
+
+                       # Update parent tree
+                       if ( !isset( $this->parents[$o->cl_from] ) ) {
+                               $this->parents[$o->cl_from] = array();
+                       }
+                       $this->parents[$o->cl_from][$k] = $o;
+
+                       # Ignore those we already have
+                       if ( in_array( $k, $this->deadend ) ) {
+                               continue;
+                       }
+
+                       if ( isset( $this->name2id[$k] ) ) {
+                               continue;
+                       }
+
+                       # Hey, new category!
+                       $layer[$k] = $k;
+               }
+
+               $this->next = array();
+
+               # Find the IDs of all category pages in $layer, if they exist
+               if ( count( $layer ) > 0 ) {
+                       $res = $this->dbr->select(
+                               /* FROM   */ 'page',
+                               /* SELECT */ array( 'page_id', 'page_title' ),
+                               /* WHERE  */ array( 'page_namespace' => NS_CATEGORY, 'page_title' => $layer ),
+                               __METHOD__ . '-2'
+                       );
+                       foreach ( $res as $o ) {
+                               $id = $o->page_id;
+                               $name = $o->page_title;
+                               $this->name2id[$name] = $id;
+                               $this->next[] = $id;
+                               unset( $layer[$name] );
+                       }
+               }
+
+               # Mark dead ends
+               foreach ( $layer as $v ) {
+                       $this->deadend[$v] = $v;
+               }
+       }
+}
index ec8efae..f68da95 100644 (file)
@@ -25,10 +25,10 @@ class CategoryViewer extends ContextSource {
        public $limit;
 
        /** @var array */
-       protected $from;
+       public $from;
 
        /** @var array */
-       protected $until;
+       public $until;
 
        /** @var string[] */
        public $articles;
@@ -37,37 +37,37 @@ class CategoryViewer extends ContextSource {
        public $articles_start_char;
 
        /** @var array */
-       protected $children;
+       public $children;
 
        /** @var array */
-       protected $children_start_char;
+       public $children_start_char;
 
        /** @var bool */
-       protected $showGallery;
+       public $showGallery;
 
        /** @var array */
-       protected $imgsNoGallery_start_char;
+       public $imgsNoGallery_start_char;
 
        /** @var array */
-       protected $imgsNoGallery;
+       public $imgsNoGallery;
 
        /** @var array */
-       protected $nextPage;
+       public $nextPage;
 
        /** @var array */
        protected $prevPage;
 
        /** @var array */
-       protected $flip;
+       public $flip;
 
        /** @var Title */
-       protected $title;
+       public $title;
 
        /** @var Collation */
-       protected $collation;
+       public $collation;
 
        /** @var ImageGallery */
-       protected $gallery;
+       public $gallery;
 
        /** @var Category Category object for this page. */
        private $cat;
@@ -87,12 +87,11 @@ class CategoryViewer extends ContextSource {
        function __construct( $title, IContextSource $context, $from = array(),
                $until = array(), $query = array()
        ) {
-               global $wgCategoryPagingLimit;
                $this->title = $title;
                $this->setContext( $context );
                $this->from = $from;
                $this->until = $until;
-               $this->limit = $wgCategoryPagingLimit;
+               $this->limit = $context->getConfig()->get( 'CategoryPagingLimit' );
                $this->cat = Category::newFromTitle( $title );
                $this->query = $query;
                $this->collation = Collation::singleton();
@@ -105,10 +104,10 @@ class CategoryViewer extends ContextSource {
         * @return string HTML output
         */
        public function getHTML() {
-               global $wgCategoryMagicGallery;
                wfProfileIn( __METHOD__ );
 
-               $this->showGallery = $wgCategoryMagicGallery && !$this->getOutput()->mNoGallery;
+               $this->showGallery = $this->getConfig()->get( 'CategoryMagicGallery' )
+                       && !$this->getOutput()->mNoGallery;
 
                $this->clearCategoryState();
                $this->doCategoryQuery();
@@ -137,7 +136,7 @@ class CategoryViewer extends ContextSource {
                }
 
                $lang = $this->getLanguage();
-               $langAttribs = array( 'lang' => $lang->getCode(), 'dir' => $lang->getDir() );
+               $langAttribs = array( 'lang' => $lang->getHtmlCode(), 'dir' => $lang->getDir() );
                # put a div around the headings which are in the user language
                $r = Html::openElement( 'div', $langAttribs ) . $r . '</div>';
 
@@ -516,7 +515,7 @@ class CategoryViewer extends ContextSource {
                }
 
                $pageLang = $this->title->getPageLanguage();
-               $attribs = array( 'lang' => $pageLang->getCode(), 'dir' => $pageLang->getDir(),
+               $attribs = array( 'lang' => $pageLang->getHtmlCode(), 'dir' => $pageLang->getDir(),
                        'class' => 'mw-content-' . $pageLang->getDir() );
                $list = Html::rawElement( 'div', $attribs, $list );
 
diff --git a/includes/Categoryfinder.php b/includes/Categoryfinder.php
deleted file mode 100644 (file)
index a5415af..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-<?php
-/**
- * Recent changes filtering by category.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * The "Categoryfinder" class takes a list of articles, creates an internal
- * representation of all their parent categories (as well as parents of
- * parents etc.). From this representation, it determines which of these
- * articles are in one or all of a given subset of categories.
- *
- * Example use :
- * <code>
- *     # Determines whether the article with the page_id 12345 is in both
- *     # "Category 1" and "Category 2" or their subcategories, respectively
- *
- *     $cf = new Categoryfinder;
- *     $cf->seed(
- *         array( 12345 ),
- *         array( 'Category 1', 'Category 2' ),
- *         'AND'
- *     );
- *     $a = $cf->run();
- *     print implode( ',' , $a );
- * </code>
- *
- */
-class Categoryfinder {
-       /** @var int[] The original article IDs passed to the seed function */
-       protected $articles = array();
-
-       /** @var array Array of DBKEY category names for categories that don't have a page */
-       protected $deadend = array();
-
-       /** @var array Array of [ID => array()] */
-       protected $parents = array();
-
-       /** @var array Array of article/category IDs */
-       protected $next = array();
-
-       /** @var array Array of DBKEY category names */
-       protected $targets = array();
-
-       /** @var array */
-       protected $name2id = array();
-
-       /** @var string "AND" or "OR" */
-       protected $mode;
-
-       /** @var DatabaseBase Read-DB slave */
-       protected $dbr;
-
-       function __construct() {
-       }
-
-       /**
-        * Initializes the instance. Do this prior to calling run().
-        * @param array $article_ids Array of article IDs
-        * @param array $categories FIXME
-        * @param string $mode FIXME, default 'AND'.
-        * @todo FIXME: $categories/$mode
-        */
-       function seed( $article_ids, $categories, $mode = 'AND' ) {
-               $this->articles = $article_ids;
-               $this->next = $article_ids;
-               $this->mode = $mode;
-
-               # Set the list of target categories; convert them to DBKEY form first
-               $this->targets = array();
-               foreach ( $categories as $c ) {
-                       $ct = Title::makeTitleSafe( NS_CATEGORY, $c );
-                       if ( $ct ) {
-                               $c = $ct->getDBkey();
-                               $this->targets[$c] = $c;
-                       }
-               }
-       }
-
-       /**
-        * Iterates through the parent tree starting with the seed values,
-        * then checks the articles if they match the conditions
-        * @return array Array of page_ids (those given to seed() that match the conditions)
-        */
-       function run() {
-               $this->dbr = wfGetDB( DB_SLAVE );
-               while ( count( $this->next ) > 0 ) {
-                       $this->scan_next_layer();
-               }
-
-               # Now check if this applies to the individual articles
-               $ret = array();
-
-               foreach ( $this->articles as $article ) {
-                       $conds = $this->targets;
-                       if ( $this->check( $article, $conds ) ) {
-                               # Matches the conditions
-                               $ret[] = $article;
-                       }
-               }
-               return $ret;
-       }
-
-       /**
-        * This functions recurses through the parent representation, trying to match the conditions
-        * @param int $id The article/category to check
-        * @param array $conds The array of categories to match
-        * @param array $path Used to check for recursion loops
-        * @return bool Does this match the conditions?
-        */
-       function check( $id, &$conds, $path = array() ) {
-               // Check for loops and stop!
-               if ( in_array( $id, $path ) ) {
-                       return false;
-               }
-
-               $path[] = $id;
-
-               # Shortcut (runtime paranoia): No conditions=all matched
-               if ( count( $conds ) == 0 ) {
-                       return true;
-               }
-
-               if ( !isset( $this->parents[$id] ) ) {
-                       return false;
-               }
-
-               # iterate through the parents
-               foreach ( $this->parents[$id] as $p ) {
-                       $pname = $p->cl_to;
-
-                       # Is this a condition?
-                       if ( isset( $conds[$pname] ) ) {
-                               # This key is in the category list!
-                               if ( $this->mode == 'OR' ) {
-                                       # One found, that's enough!
-                                       $conds = array();
-                                       return true;
-                               } else {
-                                       # Assuming "AND" as default
-                                       unset( $conds[$pname] );
-                                       if ( count( $conds ) == 0 ) {
-                                               # All conditions met, done
-                                               return true;
-                                       }
-                               }
-                       }
-
-                       # Not done yet, try sub-parents
-                       if ( !isset( $this->name2id[$pname] ) ) {
-                               # No sub-parent
-                               continue;
-                       }
-                       $done = $this->check( $this->name2id[$pname], $conds, $path );
-                       if ( $done || count( $conds ) == 0 ) {
-                               # Subparents have done it!
-                               return true;
-                       }
-               }
-               return false;
-       }
-
-       /**
-        * Scans a "parent layer" of the articles/categories in $this->next
-        */
-       function scan_next_layer() {
-               wfProfileIn( __METHOD__ );
-
-               # Find all parents of the article currently in $this->next
-               $layer = array();
-               $res = $this->dbr->select(
-                       /* FROM   */ 'categorylinks',
-                       /* SELECT */ '*',
-                       /* WHERE  */ array( 'cl_from' => $this->next ),
-                       __METHOD__ . '-1'
-               );
-               foreach ( $res as $o ) {
-                       $k = $o->cl_to;
-
-                       # Update parent tree
-                       if ( !isset( $this->parents[$o->cl_from] ) ) {
-                               $this->parents[$o->cl_from] = array();
-                       }
-                       $this->parents[$o->cl_from][$k] = $o;
-
-                       # Ignore those we already have
-                       if ( in_array( $k, $this->deadend ) ) {
-                               continue;
-                       }
-
-                       if ( isset( $this->name2id[$k] ) ) {
-                               continue;
-                       }
-
-                       # Hey, new category!
-                       $layer[$k] = $k;
-               }
-
-               $this->next = array();
-
-               # Find the IDs of all category pages in $layer, if they exist
-               if ( count( $layer ) > 0 ) {
-                       $res = $this->dbr->select(
-                               /* FROM   */ 'page',
-                               /* SELECT */ array( 'page_id', 'page_title' ),
-                               /* WHERE  */ array( 'page_namespace' => NS_CATEGORY, 'page_title' => $layer ),
-                               __METHOD__ . '-2'
-                       );
-                       foreach ( $res as $o ) {
-                               $id = $o->page_id;
-                               $name = $o->page_title;
-                               $this->name2id[$name] = $id;
-                               $this->next[] = $id;
-                               unset( $layer[$name] );
-                       }
-               }
-
-               # Mark dead ends
-               foreach ( $layer as $v ) {
-                       $this->deadend[$v] = $v;
-               }
-
-               wfProfileOut( __METHOD__ );
-       }
-}
index 94b7b7a..a3c2360 100644 (file)
@@ -265,7 +265,7 @@ class ChangeTags {
                                'tagfilter',
                                20,
                                $selected,
-                               array( 'class' => 'mw-tagfilter-input', 'id' => 'tagfilter' )
+                               array( 'class' => 'mw-tagfilter-input mw-ui-input mw-ui-input-inline', 'id' => 'tagfilter' )
                        )
                );
 
diff --git a/includes/Cookie.php b/includes/Cookie.php
deleted file mode 100644 (file)
index cb04190..0000000
+++ /dev/null
@@ -1,291 +0,0 @@
-<?php
-/**
- * Cookie for HTTP requests.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup HTTP
- */
-
-class Cookie {
-       protected $name;
-       protected $value;
-       protected $expires;
-       protected $path;
-       protected $domain;
-       protected $isSessionKey = true;
-       // TO IMPLEMENT  protected $secure
-       // TO IMPLEMENT? protected $maxAge (add onto expires)
-       // TO IMPLEMENT? protected $version
-       // TO IMPLEMENT? protected $comment
-
-       function __construct( $name, $value, $attr ) {
-               $this->name = $name;
-               $this->set( $value, $attr );
-       }
-
-       /**
-        * Sets a cookie.  Used before a request to set up any individual
-        * cookies. Used internally after a request to parse the
-        * Set-Cookie headers.
-        *
-        * @param string $value The value of the cookie
-        * @param array $attr Possible key/values:
-        *        expires A date string
-        *        path    The path this cookie is used on
-        *        domain  Domain this cookie is used on
-        * @throws MWException
-        */
-       public function set( $value, $attr ) {
-               $this->value = $value;
-
-               if ( isset( $attr['expires'] ) ) {
-                       $this->isSessionKey = false;
-                       $this->expires = strtotime( $attr['expires'] );
-               }
-
-               if ( isset( $attr['path'] ) ) {
-                       $this->path = $attr['path'];
-               } else {
-                       $this->path = '/';
-               }
-
-               if ( isset( $attr['domain'] ) ) {
-                       if ( self::validateCookieDomain( $attr['domain'] ) ) {
-                               $this->domain = $attr['domain'];
-                       }
-               } else {
-                       throw new MWException( 'You must specify a domain.' );
-               }
-       }
-
-       /**
-        * Return the true if the cookie is valid is valid.  Otherwise,
-        * false.  The uses a method similar to IE cookie security
-        * described here:
-        * http://kuza55.blogspot.com/2008/02/understanding-cookie-security.html
-        * A better method might be to use a blacklist like
-        * http://publicsuffix.org/
-        *
-        * @todo fixme fails to detect 3-letter top-level domains
-        * @todo fixme fails to detect 2-letter top-level domains for single-domain use (probably
-        * not a big problem in practice, but there are test cases)
-        *
-        * @param string $domain The domain to validate
-        * @param string $originDomain (optional) the domain the cookie originates from
-        * @return bool
-        */
-       public static function validateCookieDomain( $domain, $originDomain = null ) {
-               $dc = explode( ".", $domain );
-
-               // Don't allow a trailing dot or addresses without a or just a leading dot
-               if ( substr( $domain, -1 ) == '.' ||
-                       count( $dc ) <= 1 ||
-                       count( $dc ) == 2 && $dc[0] === ''
-               ) {
-                       return false;
-               }
-
-               // Only allow full, valid IP addresses
-               if ( preg_match( '/^[0-9.]+$/', $domain ) ) {
-                       if ( count( $dc ) != 4 ) {
-                               return false;
-                       }
-
-                       if ( ip2long( $domain ) === false ) {
-                               return false;
-                       }
-
-                       if ( $originDomain == null || $originDomain == $domain ) {
-                               return true;
-                       }
-
-               }
-
-               // Don't allow cookies for "co.uk" or "gov.uk", etc, but allow "supermarket.uk"
-               if ( strrpos( $domain, "." ) - strlen( $domain ) == -3 ) {
-                       if ( ( count( $dc ) == 2 && strlen( $dc[0] ) <= 2 )
-                               || ( count( $dc ) == 3 && strlen( $dc[0] ) == "" && strlen( $dc[1] ) <= 2 ) ) {
-                               return false;
-                       }
-                       if ( ( count( $dc ) == 2 || ( count( $dc ) == 3 && $dc[0] == '' ) )
-                               && preg_match( '/(com|net|org|gov|edu)\...$/', $domain ) ) {
-                               return false;
-                       }
-               }
-
-               if ( $originDomain != null ) {
-                       if ( substr( $domain, 0, 1 ) != '.' && $domain != $originDomain ) {
-                               return false;
-                       }
-
-                       if ( substr( $domain, 0, 1 ) == '.'
-                               && substr_compare(
-                                       $originDomain,
-                                       $domain,
-                                       -strlen( $domain ),
-                                       strlen( $domain ),
-                                       true
-                               ) != 0
-                       ) {
-                               return false;
-                       }
-               }
-
-               return true;
-       }
-
-       /**
-        * Serialize the cookie jar into a format useful for HTTP Request headers.
-        *
-        * @param string $path The path that will be used. Required.
-        * @param string $domain The domain that will be used. Required.
-        * @return string
-        */
-       public function serializeToHttpRequest( $path, $domain ) {
-               $ret = '';
-
-               if ( $this->canServeDomain( $domain )
-                               && $this->canServePath( $path )
-                               && $this->isUnExpired() ) {
-                       $ret = $this->name . '=' . $this->value;
-               }
-
-               return $ret;
-       }
-
-       /**
-        * @param string $domain
-        * @return bool
-        */
-       protected function canServeDomain( $domain ) {
-               if ( $domain == $this->domain
-                       || ( strlen( $domain ) > strlen( $this->domain )
-                               && substr( $this->domain, 0, 1 ) == '.'
-                               && substr_compare(
-                                       $domain,
-                                       $this->domain,
-                                       -strlen( $this->domain ),
-                                       strlen( $this->domain ),
-                                       true
-                               ) == 0
-                       )
-               ) {
-                       return true;
-               }
-
-               return false;
-       }
-
-       /**
-        * @param string $path
-        * @return bool
-        */
-       protected function canServePath( $path ) {
-               return ( $this->path && substr_compare( $this->path, $path, 0, strlen( $this->path ) ) == 0 );
-       }
-
-       /**
-        * @return bool
-        */
-       protected function isUnExpired() {
-               return $this->isSessionKey || $this->expires > time();
-       }
-}
-
-class CookieJar {
-       private $cookie = array();
-
-       /**
-        * Set a cookie in the cookie jar. Make sure only one cookie per-name exists.
-        * @see Cookie::set()
-        * @param string $name
-        * @param string $value
-        * @param array $attr
-        */
-       public function setCookie( $name, $value, $attr ) {
-               /* cookies: case insensitive, so this should work.
-                * We'll still send the cookies back in the same case we got them, though.
-                */
-               $index = strtoupper( $name );
-
-               if ( isset( $this->cookie[$index] ) ) {
-                       $this->cookie[$index]->set( $value, $attr );
-               } else {
-                       $this->cookie[$index] = new Cookie( $name, $value, $attr );
-               }
-       }
-
-       /**
-        * @see Cookie::serializeToHttpRequest
-        * @param string $path
-        * @param string $domain
-        * @return string
-        */
-       public function serializeToHttpRequest( $path, $domain ) {
-               $cookies = array();
-
-               foreach ( $this->cookie as $c ) {
-                       $serialized = $c->serializeToHttpRequest( $path, $domain );
-
-                       if ( $serialized ) {
-                               $cookies[] = $serialized;
-                       }
-               }
-
-               return implode( '; ', $cookies );
-       }
-
-       /**
-        * Parse the content of an Set-Cookie HTTP Response header.
-        *
-        * @param string $cookie
-        * @param string $domain Cookie's domain
-        * @return null
-        */
-       public function parseCookieResponseHeader( $cookie, $domain ) {
-               $len = strlen( 'Set-Cookie:' );
-
-               if ( substr_compare( 'Set-Cookie:', $cookie, 0, $len, true ) === 0 ) {
-                       $cookie = substr( $cookie, $len );
-               }
-
-               $bit = array_map( 'trim', explode( ';', $cookie ) );
-
-               if ( count( $bit ) >= 1 ) {
-                       list( $name, $value ) = explode( '=', array_shift( $bit ), 2 );
-                       $attr = array();
-
-                       foreach ( $bit as $piece ) {
-                               $parts = explode( '=', $piece );
-                               if ( count( $parts ) > 1 ) {
-                                       $attr[strtolower( $parts[0] )] = $parts[1];
-                               } else {
-                                       $attr[strtolower( $parts[0] )] = true;
-                               }
-                       }
-
-                       if ( !isset( $attr['domain'] ) ) {
-                               $attr['domain'] = $domain;
-                       } elseif ( !Cookie::validateCookieDomain( $attr['domain'], $domain ) ) {
-                               return null;
-                       }
-
-                       $this->setCookie( $name, $value, $attr );
-               }
-       }
-}
index 14799c6..29d653d 100644 (file)
@@ -73,7 +73,7 @@ $wgConfigRegistry = array(
  * MediaWiki version number
  * @since 1.2
  */
-$wgVersion = '1.24alpha';
+$wgVersion = '1.25alpha';
 
 /**
  * Name of the site. It must be changed in LocalSettings.php
@@ -253,7 +253,7 @@ $wgFileCacheDirectory = false;
 
 /**
  * The URL path of the wiki logo. The logo size should be 135x135 pixels.
- * Defaults to "{$wgStylePath}/common/images/wiki.png".
+ * Defaults to "$wgResourceBasePath/resources/assets/wiki.png".
  */
 $wgLogo = false;
 
@@ -859,7 +859,7 @@ $wgContentHandlers = array(
        // dumb version, no syntax highlighting
        CONTENT_MODEL_JAVASCRIPT => 'JavaScriptContentHandler',
        // simple implementation, for use by extensions, etc.
-       CONTENT_MODEL_JSON => 'JSONContentHandler',
+       CONTENT_MODEL_JSON => 'JsonContentHandler',
        // dumb version, no syntax highlighting
        CONTENT_MODEL_CSS => 'CssContentHandler',
        // plain text, for use by extensions, etc.
@@ -1156,7 +1156,7 @@ $wgMimeInfoFile = 'includes/mime.info';
  * Sets an external MIME detector program. The command must print only
  * the MIME type to standard output.
  * The name of the file to process will be appended to the command given here.
- * If not set or NULL, mime_content_type will be used if available.
+ * If not set or NULL, PHP's fileinfo extension will be used if available.
  *
  * @par Example:
  * @code
@@ -1242,6 +1242,46 @@ $wgThumbnailBuckets = null;
  */
 $wgThumbnailMinimumBucketDistance = 50;
 
+/**
+ * When defined, is an array of thumbnail widths to be rendered at upload time. The idea is to
+ * prerender common thumbnail sizes, in order to avoid the necessity to render them on demand, which
+ * has a performance impact for the first client to view a certain size.
+ *
+ * This obviously means that more disk space is needed per upload upfront.
+ *
+ * @since 1.25
+ */
+
+$wgUploadThumbnailRenderMap = array();
+
+/**
+ * The method through which the thumbnails will be prerendered for the entries in
+ * $wgUploadThumbnailRenderMap
+ *
+ * The method can be either "http" or "jobqueue". The former uses an http request to hit the
+ * thumbnail's URL.
+ * This method only works if thumbnails are configured to be rendered by a 404 handler. The latter
+ * option uses the job queue to render the thumbnail.
+ *
+ * @since 1.25
+ */
+$wgUploadThumbnailRenderMethod = 'jobqueue';
+
+/**
+ * When using the "http" wgUploadThumbnailRenderMethod, lets one specify a custom Host HTTP header.
+ *
+ * @since 1.25
+ */
+$wgUploadThumbnailRenderHttpCustomHost = false;
+
+/**
+ * When using the "http" wgUploadThumbnailRenderMethod, lets one specify a custom domain to send the
+ * HTTP request to.
+ *
+ * @since 1.25
+ */
+$wgUploadThumbnailRenderHttpCustomDomain = false;
+
 /**
  * Default parameters for the "<gallery>" tag
  */
@@ -1957,15 +1997,6 @@ $wgAllowSlowParserFunctions = false;
  */
 $wgAllowSchemaUpdates = true;
 
-/**
- * Anti-lock flags - bitfield
- *   - ALF_NO_LINK_LOCK:
- *       Don't use locking reads when updating the link table. This is
- *       necessary for wikis with a high edit rate for performance
- *       reasons, but may cause link table inconsistency
- */
-$wgAntiLockFlags = 0;
-
 /**
  * Maximum article size in kilobytes
  */
@@ -2061,7 +2092,7 @@ $wgLanguageConverterCacheType = CACHE_ANYTHING;
  */
 $wgObjectCaches = array(
        CACHE_NONE => array( 'class' => 'EmptyBagOStuff' ),
-       CACHE_DB => array( 'class' => 'SqlBagOStuff', 'table' => 'objectcache' ),
+       CACHE_DB => array( 'class' => 'SqlBagOStuff' ),
 
        CACHE_ANYTHING => array( 'factory' => 'ObjectCache::newAnything' ),
        CACHE_ACCEL => array( 'factory' => 'ObjectCache::newAccelerator' ),
@@ -2075,6 +2106,28 @@ $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).
@@ -2699,11 +2752,6 @@ $wgDisableLangConversion = false;
  */
 $wgDisableTitleConversion = false;
 
-/**
- * Whether to enable canonical language links in meta data.
- */
-$wgCanonicalLanguageLinks = true;
-
 /**
  * Default variant code, if false, the default will be the language code
  */
@@ -3031,6 +3079,7 @@ $wgEditPageFrameOptions = 'DENY';
  *   - 'DENY': Do not allow framing. This is recommended for most wikis.
  *   - 'SAMEORIGIN': Allow framing by pages on the same domain.
  *   - false: Allow all framing.
+ * Note: $wgBreakFrames will override this for human formatted API output.
  */
 $wgApiFrameOptions = 'DENY';
 
@@ -3085,7 +3134,7 @@ $wgFooterIcons = array(
        ),
        "poweredby" => array(
                "mediawiki" => array(
-                       "src" => null, // Defaults to "$wgStylePath/common/images/poweredby_mediawiki_88x31.png"
+                       "src" => null, // Defaults to "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png"
                        "url" => "//www.mediawiki.org/",
                        "alt" => "Powered by MediaWiki",
                )
@@ -3274,10 +3323,7 @@ $wgResourceModuleSkinStyles = array();
  *
  * @par Example:
  * @code
- *   $wgResourceLoaderSources['foo'] = array(
- *       'loadScript' => 'http://example.org/w/load.php',
- *       'apiScript' => 'http://example.org/w/api.php'
- *   );
+ *   $wgResourceLoaderSources['foo'] = 'http://example.org/w/load.php';
  * @endcode
  */
 $wgResourceLoaderSources = array();
@@ -3474,11 +3520,10 @@ $wgResourceLoaderLESSVars = array();
  * Changes to LESS functions do not trigger cache invalidation.
  *
  * @since 1.22
+ * @deprecated since 1.24 Questionable usefulness and problematic to support,
+ *     will be removed in the future.
  */
-$wgResourceLoaderLESSFunctions = array(
-       'embeddable' => 'ResourceLoaderLESSFunctions::embeddable',
-       'embed' => 'ResourceLoaderLESSFunctions::embed',
-);
+$wgResourceLoaderLESSFunctions = array();
 
 /**
  * Default import paths for LESS modules. LESS files referenced in @import
@@ -3753,6 +3798,7 @@ $wgNamespacesWithSubpages = array(
 $wgTrackingCategories = array(
        'index-category',
        'noindex-category',
+       'duplicate-args-category',
        'expensive-parserfunction-category',
        'post-expand-template-argument-category',
        'post-expand-template-inclusion-category',
@@ -3860,6 +3906,12 @@ $wgMaxPPExpandDepth = 40;
 
 /**
  * URL schemes that should be recognized as valid by wfParseUrl().
+ *
+ * WARNING: Do not add 'file:' to this or internal file links will be broken.
+ * Instead, if you want to support file links, add 'file://'. The same applies
+ * to any other protocols with the same name as a namespace. See bug #44011 for
+ * more information.
+ *
  * @see wfParseUrl
  */
 $wgUrlProtocols = array(
@@ -4065,15 +4117,6 @@ $wgTranscludeCacheExpiry = 3600;
  */
 $wgArticleCountMethod = 'link';
 
-/**
- * wgHitcounterUpdateFreq sets how often page counters should be updated, higher
- * values are easier on the database. A value of 1 causes the counters to be
- * updated on every hit, any higher value n cause them to update *on average*
- * every n hits. Should be set to either 1 or something largish, eg 1000, for
- * maximum efficiency.
- */
-$wgHitcounterUpdateFreq = 1;
-
 /**
  * How many days user must be idle before he is considered inactive. Will affect
  * the number shown on Special:Statistics, Special:ActiveUsers, and the
@@ -4224,7 +4267,7 @@ $wgDefaultUserOptions = array(
        'enotifrevealaddr' => 0,
        'enotifusertalkpages' => 1,
        'enotifwatchlistpages' => 1,
-       'extendwatchlist' => 0,
+       'extendwatchlist' => 1,
        'fancysig' => 0,
        'forceeditsummary' => 0,
        'gender' => 'unknown',
@@ -4250,7 +4293,7 @@ $wgDefaultUserOptions = array(
        'thumbsize' => 5,
        'underline' => 2,
        'uselivepreview' => 0,
-       'usenewrc' => 0,
+       'usenewrc' => 1,
        'watchcreations' => 1,
        'watchdefault' => 1,
        'watchdeletion' => 0,
@@ -5165,7 +5208,7 @@ $wgDebugDumpSqlLength = 500;
  *
  * @par Advanced example:
  * @code
- * $wgDebugLogGroups['memcached'] = (
+ * $wgDebugLogGroups['memcached'] = array(
  *     'destination' => '/var/log/mediawiki/memcached.log',
  *     'sample' => 1000,  // log 1 message out of every 1,000.
  * );
@@ -5173,6 +5216,26 @@ $wgDebugDumpSqlLength = 500;
  */
 $wgDebugLogGroups = array();
 
+/**
+ * Default service provider for creating MWLogger instances.
+ *
+ * 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
+ * details.
+ *
+ * Alternately the MWLogger::registerProvider method can be called to inject
+ * an MWLoggerSpi instance into MWLogger and bypass the use of this
+ * configuration variable entirely.
+ *
+ * @since 1.25
+ * @var array $wgMWLoggerDefaultSpi
+ * @see MwLogger
+ */
+$wgMWLoggerDefaultSpi = array(
+       'class' => 'MWLoggerLegacySpi',
+);
+
 /**
  * Display debug data at the bottom of the main content area.
  *
@@ -5334,12 +5397,6 @@ $wgAggregateStatsID = false;
  */
 $wgStatsFormatString = "stats/%s - %s 1 1 1 1 %s\n";
 
-/**
- * Whereas to count the number of time an article is viewed.
- * Does not work if pages are cached (for example with squid).
- */
-$wgDisableCounters = false;
-
 /**
  * InfoAction retrieves a list of transclusion links (both to and from).
  * This number puts a limit on that query in the case of highly transcluded
@@ -5567,11 +5624,6 @@ $wgPreviewOnOpenNamespaces = array(
        NS_CATEGORY => true
 );
 
-/**
- * Go button goes straight to the edit screen if the article doesn't exist.
- */
-$wgGoToEdit = false;
-
 /**
  * Enable the UniversalEditButton for browsers that support it
  * (currently only Firefox with an extension)
@@ -5672,9 +5724,9 @@ $wgGitRepositoryViewers = array(
 /**
  * Recentchanges items are periodically purged; entries older than this many
  * seconds will go.
- * Default: 13 weeks = about three months
+ * Default: 90 days = about three months
  */
-$wgRCMaxAge = 13 * 7 * 24 * 3600;
+$wgRCMaxAge = 90 * 24 * 3600;
 
 /**
  * Filter $wgRCLinkDays by $wgRCMaxAge to avoid showing links for numbers
@@ -5826,11 +5878,6 @@ $wgAdvertisedFeedTypes = array( 'atom' );
  */
 $wgRCShowWatchingUsers = false; # UPO
 
-/**
- * Show watching users in Page views
- */
-$wgPageShowWatchingUsers = false;
-
 /**
  * Show the amount of changed characters in recent changes
  */
@@ -6127,6 +6174,7 @@ $wgExtensionMessagesFiles = array();
  */
 $wgMessagesDirs = array(
        'core' => "$IP/languages/i18n",
+       'api' => "$IP/includes/api/i18n",
        'oojs-ui' => "$IP/resources/lib/oojs-ui/i18n",
 );
 
@@ -6169,8 +6217,10 @@ $wgEnableParserLimitReporting = true;
 $wgValidSkinNames = array();
 
 /**
- * Special page list.
- * See the top of SpecialPage.php for documentation.
+ * Special page list. This is an associative array mapping the (canonical) names of
+ * special pages to either a class name to be instantiated, or a callback to use for
+ * creating the special page object. In both cases, the result must be an instance of
+ * SpecialPage.
  */
 $wgSpecialPages = array();
 
@@ -6296,6 +6346,7 @@ $wgJobClasses = array(
        'uploadFromUrl' => 'UploadFromUrlJob',
        'AssembleUploadChunks' => 'AssembleUploadChunksJob',
        'PublishStashedFile' => 'PublishStashedFileJob',
+       'ThumbnailRender' => 'ThumbnailRenderJob',
        'null' => 'NullJob'
 );
 
@@ -6546,7 +6597,6 @@ $wgLogActions = array(
        'protect/move_prot' => 'movedarticleprotection',
        'import/upload' => 'import-logentry-upload',
        'import/interwiki' => 'import-logentry-interwiki',
-       'merge/merge' => 'pagemerge-logentry',
        'suppress/block' => 'blocklogentry',
        'suppress/reblock' => 'reblock-logentry',
 );
@@ -6573,6 +6623,7 @@ $wgLogActionsHandlers = array(
        'upload/upload' => 'LogFormatter',
        'upload/overwrite' => 'LogFormatter',
        'upload/revert' => 'LogFormatter',
+       'merge/merge' => 'MergeLogFormatter',
 );
 
 /**
@@ -7031,6 +7082,18 @@ $wgAsyncHTTPTimeout = 25;
  */
 $wgHTTPProxy = false;
 
+/**
+ * Local virtual hosts.
+ *
+ * This lists domains that are configured as virtual hosts on the same machine.
+ * If a request is to be made to a domain listed here, or any subdomain thereof,
+ * then no proxy will be used.
+ * Command-line scripts are not affected by this setting and will always use
+ * proxy if it is configured.
+ * @since 1.25
+ */
+$wgLocalVirtualHosts = array();
+
 /**
  * Timeout for connections done internally (in seconds)
  * Only works for curl
@@ -7234,13 +7297,21 @@ $wgPagePropsHaveSortkey = true;
 $wgHttpsPort = 443;
 
 /**
- * Secret and algorithm for hmac-based key derivation function (fast,
+ * Secret for hmac-based key derivation function (fast,
  * cryptographically secure random numbers).
  * This should be set in LocalSettings.php, otherwise wgSecretKey will
  * be used.
+ * See also: $wgHKDFAlgorithm
  * @since 1.24
  */
 $wgHKDFSecret = false;
+
+/**
+ * Algorithm for hmac-based key derivation function (fast,
+ * cryptographically secure random numbers).
+ * See also: $wgHKDFSecret
+ * @since 1.24
+ */
 $wgHKDFAlgorithm = 'sha256';
 
 /**
index 017e9ea..d9e3aab 100644 (file)
@@ -152,12 +152,13 @@ define( 'AV_SCAN_FAILED', false );  #scan failed (scanner not found or error in
 
 /**@{
  * Anti-lock flags
- * See DefaultSettings.php for a description
+ * Was used by $wgAntiLockFlags, which was removed with 1.25
+ * Constants kept to not have warnings when used in LocalSettings
  */
 define( 'ALF_PRELOAD_LINKS', 1 ); // unused
 define( 'ALF_PRELOAD_EXISTENCE', 2 ); // unused
-define( 'ALF_NO_LINK_LOCK', 4 );
-define( 'ALF_NO_BLOCK_LOCK', 8 );
+define( 'ALF_NO_LINK_LOCK', 4 ); // unused
+define( 'ALF_NO_BLOCK_LOCK', 8 ); // unused
 /**@}*/
 
 /**@{
index b83569d..d106da2 100644 (file)
@@ -185,7 +185,7 @@ class EditPage {
        private $mContextTitle = null;
 
        /** @var string */
-       protected $action = 'submit';
+       public $action = 'submit';
 
        /** @var bool */
        public $isConflict = false;
@@ -200,13 +200,13 @@ class EditPage {
        public $isJsSubpage = false;
 
        /** @var bool */
-       protected $isWrongCaseCssJsPage = false;
+       public $isWrongCaseCssJsPage = false;
 
        /** @var bool New page or new section */
-       protected $isNew = false;
+       public $isNew = false;
 
        /** @var bool */
-       protected $deletedSinceEdit;
+       public $deletedSinceEdit;
 
        /** @var string */
        public $formtype;
@@ -215,34 +215,34 @@ class EditPage {
        public $firsttime;
 
        /** @var bool|stdClass */
-       protected $lastDelete;
+       public $lastDelete;
 
        /** @var bool */
-       protected $mTokenOk = false;
+       public $mTokenOk = false;
 
        /** @var bool */
-       protected $mTokenOkExceptSuffix = false;
+       public $mTokenOkExceptSuffix = false;
 
        /** @var bool */
-       protected $mTriedSave = false;
+       public $mTriedSave = false;
 
        /** @var bool */
-       protected $incompleteForm = false;
+       public $incompleteForm = false;
 
        /** @var bool */
-       protected $tooBig = false;
+       public $tooBig = false;
 
        /** @var bool */
-       protected $kblength = false;
+       public $kblength = false;
 
        /** @var bool */
-       protected $missingComment = false;
+       public $missingComment = false;
 
        /** @var bool */
-       protected $missingSummary = false;
+       public $missingSummary = false;
 
        /** @var bool */
-       protected $allowBlankSummary = false;
+       public $allowBlankSummary = false;
 
        /** @var bool */
        protected $blankArticle = false;
@@ -251,19 +251,19 @@ class EditPage {
        protected $allowBlankArticle = false;
 
        /** @var string */
-       protected $autoSumm = '';
+       public $autoSumm = '';
 
        /** @var string */
        public $hookError = '';
 
        /** @var ParserOutput */
-       protected $mParserOutput;
+       public $mParserOutput;
 
        /** @var bool Has a summary been preset using GET parameter &summary= ? */
-       protected $hasPresetSummary = false;
+       public $hasPresetSummary = false;
 
        /** @var bool */
-       protected $mBaseRevision = false;
+       public $mBaseRevision = false;
 
        /** @var bool */
        public $mShowSummaryField = true;
@@ -277,16 +277,16 @@ class EditPage {
        public $preview = false;
 
        /** @var bool */
-       protected $diff = false;
+       public $diff = false;
 
        /** @var bool */
        public $minoredit = false;
 
        /** @var bool */
-       protected $watchthis = false;
+       public $watchthis = false;
 
        /** @var bool */
-       protected $recreate = false;
+       public $recreate = false;
 
        /** @var string */
        public $textbox1 = '';
@@ -298,7 +298,7 @@ class EditPage {
        public $summary = '';
 
        /** @var bool */
-       protected $nosummary = false;
+       public $nosummary = false;
 
        /** @var string */
        public $edittime = '';
@@ -310,13 +310,13 @@ class EditPage {
        public $sectiontitle = '';
 
        /** @var string */
-       protected $starttime = '';
+       public $starttime = '';
 
        /** @var int */
        public $oldid = 0;
 
        /** @var string */
-       protected $editintro = '';
+       public $editintro = '';
 
        /** @var null */
        public $scrolltop = null;
@@ -779,7 +779,8 @@ class EditPage {
                                // TODO: softened the check for cutover.  Once we determine
                                // that it is safe, we should complete the transition by
                                // removing the "edittime" clause.
-                               $this->incompleteForm = ( !$request->getVal( 'wpUltimateParam' ) && is_null( $this->edittime ) );
+                               $this->incompleteForm = ( !$request->getVal( 'wpUltimateParam' )
+                                       && is_null( $this->edittime ) );
                        }
                        if ( $this->incompleteForm ) {
                                # If the form is incomplete, force to preview.
@@ -1892,8 +1893,14 @@ class EditPage {
                        ( ( $this->minoredit && !$this->isNew ) ? EDIT_MINOR : 0 ) |
                        ( $bot ? EDIT_FORCE_BOT : 0 );
 
-               $doEditStatus = $this->mArticle->doEditContent( $content, $this->summary, $flags,
-                                                                                                               false, null, $this->contentFormat );
+               $doEditStatus = $this->mArticle->doEditContent(
+                       $content,
+                       $this->summary,
+                       $flags,
+                       false,
+                       null,
+                       $content->getDefaultFormat()
+               );
 
                if ( !$doEditStatus->isOK() ) {
                        // Failure from doEdit()
@@ -1938,9 +1945,7 @@ class EditPage {
                        // Do this in its own transaction to reduce contention...
                        $dbw = wfGetDB( DB_MASTER );
                        $dbw->onTransactionIdle( function () use ( $dbw, $title, $watch, $wgUser, $fname ) {
-                               $dbw->begin( $fname );
                                WatchAction::doWatchOrUnwatch( $watch, $title, $wgUser );
-                               $dbw->commit( $fname );
                        } );
                }
        }
@@ -2102,6 +2107,17 @@ class EditPage {
                if ( $namespace == NS_MEDIAWIKI ) {
                        # Show a warning if editing an interface message
                        $wgOut->wrapWikiMsg( "<div class='mw-editinginterface'>\n$1\n</div>", 'editinginterface' );
+                       # If this is a default message (but not css or js),
+                       # show a hint that it is translatable on translatewiki.net
+                       if ( !$this->mTitle->hasContentModel( CONTENT_MODEL_CSS )
+                               && !$this->mTitle->hasContentModel( CONTENT_MODEL_JAVASCRIPT )
+                       ) {
+                               $defaultMessageText = $this->mTitle->getDefaultMessageText();
+                               if ( $defaultMessageText !== false ) {
+                                       $wgOut->wrapWikiMsg( "<div class='mw-translateinterface'>\n$1\n</div>",
+                                               'translateinterface' );
+                               }
+                       }
                } elseif ( $namespace == NS_FILE ) {
                        # Show a hint to shared repo
                        $file = wfFindFile( $this->mTitle );
@@ -2133,7 +2149,8 @@ class EditPage {
                        if ( !( $user && $user->isLoggedIn() ) && !$ip ) { # User does not exist
                                $wgOut->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n$1\n</div>",
                                        array( 'userpage-userdoesnotexist', wfEscapeWikiText( $username ) ) );
-                       } elseif ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) { # Show log extract if the user is currently blocked
+                       } elseif ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) {
+                               # Show log extract if the user is currently blocked
                                LogEventsList::showLogExtract(
                                        $wgOut,
                                        'block',
@@ -2200,7 +2217,10 @@ class EditPage {
                        if ( $title instanceof Title && $title->exists() && $title->userCan( 'read' ) ) {
                                global $wgOut;
                                // Added using template syntax, to take <noinclude>'s into account.
-                               $wgOut->addWikiTextTitleTidy( '<div class="mw-editintro">{{:' . $title->getFullText() . '}}</div>', $this->mTitle );
+                               $wgOut->addWikiTextTitleTidy(
+                                       '<div class="mw-editintro">{{:' . $title->getFullText() . '}}</div>',
+                                       $this->mTitle
+                               );
                                return true;
                        }
                }
@@ -2226,11 +2246,7 @@ class EditPage {
         *   $this->allowNonTextContent is not true.
         */
        protected function toEditText( $content ) {
-               if ( $content === null || $content === false ) {
-                       return $content;
-               }
-
-               if ( is_string( $content ) ) {
+               if ( $content === null || $content === false || is_string( $content ) ) {
                        return $content;
                }
 
@@ -2425,9 +2441,7 @@ class EditPage {
 
                $wgOut->addHTML( $this->editFormTextBeforeContent );
 
-               if ( $this->contentModel === CONTENT_MODEL_WIKITEXT &&
-                       $showToolbar && $wgUser->getOption( 'showtoolbar' ) )
-               {
+               if ( !$this->isCssJsSubpage && $showToolbar && $wgUser->getOption( 'showtoolbar' ) ) {
                        $wgOut->addHTML( EditPage::getEditToolbar() );
                }
 
@@ -2612,9 +2626,18 @@ class EditPage {
                        );
                } elseif ( $wgUser->isAnon() ) {
                        if ( $this->formtype != 'preview' ) {
-                               $wgOut->wrapWikiMsg( "<div id=\"mw-anon-edit-warning\">\n$1</div>", 'anoneditwarning' );
+                               $wgOut->wrapWikiMsg(
+                                       "<div id='mw-anon-edit-warning'>\n$1\n</div>",
+                                       array( 'anoneditwarning',
+                                               // Log-in link
+                                               '{{fullurl:Special:UserLogin|returnto={{FULLPAGENAMEE}}}}',
+                                               // Sign-up link
+                                               '{{fullurl:Special:UserLogin/signup|returnto={{FULLPAGENAMEE}}}}' )
+                               );
                        } else {
-                               $wgOut->wrapWikiMsg( "<div id=\"mw-anon-preview-warning\">\n$1</div>", 'anonpreviewwarning' );
+                               $wgOut->wrapWikiMsg( "<div id=\"mw-anon-preview-warning\">\n$1</div>",
+                                       'anonpreviewwarning'
+                               );
                        }
                } else {
                        if ( $this->isCssJsSubpage ) {
@@ -2933,7 +2956,7 @@ HTML
                );
 
                $pageLang = $this->mTitle->getPageLanguage();
-               $attribs['lang'] = $pageLang->getCode();
+               $attribs['lang'] = $pageLang->getHtmlCode();
                $attribs['dir'] = $pageLang->getDir();
 
                $wgOut->addHTML( Html::textarea( $name, $wikitext, $attribs ) );
@@ -3183,7 +3206,7 @@ HTML
        }
 
        protected function showStandardInputs( &$tabindex = 2 ) {
-               global $wgOut, $wgUseMediaWikiUIEverywhere;
+               global $wgOut;
                $wgOut->addHTML( "<div class='editOptions'>\n" );
 
                if ( $this->section != 'new' ) {
@@ -3215,10 +3238,9 @@ HTML
                        'target' => 'helpwindow',
                        'href' => $edithelpurl,
                );
-               if ( $wgUseMediaWikiUIEverywhere ) {
-                       $attrs['class'] = 'mw-ui-button mw-ui-quiet';
-               }
-               $edithelp = Html::element( 'a', $attrs, wfMessage( 'edithelp' )->text() ) .
+               $edithelp = Html::linkButton( wfMessage( 'edithelp' )->text(),
+                       $attrs, array( 'mw-ui-quiet' ) ) .
+                       wfMessage( 'word-separator' )->escaped() .
                        wfMessage( 'newwindow' )->parse();
 
                $wgOut->addHTML( "      <span class='cancelLink'>{$cancel}</span>\n" );
@@ -3260,20 +3282,16 @@ HTML
         * @return string
         */
        public function getCancelLink() {
-               global $wgUseMediaWikiUIEverywhere;
                $cancelParams = array();
                if ( !$this->isConflict && $this->oldid > 0 ) {
                        $cancelParams['oldid'] = $this->oldid;
                }
                $attrs = array( 'id' => 'mw-editform-cancel' );
-               if ( $wgUseMediaWikiUIEverywhere ) {
-                       $attrs['class'] = 'mw-ui-button mw-ui-quiet';
-               }
 
                return Linker::linkKnown(
                        $this->getContextTitle(),
                        wfMessage( 'cancel' )->parse(),
-                       $attrs,
+                       Html::buttonAttributes( $attrs, array( 'mw-ui-quiet' ) ),
                        $cancelParams
                );
        }
@@ -3541,22 +3559,22 @@ HTML
         * @return string
         */
        static function getEditToolbar() {
-               global $wgStylePath, $wgContLang, $wgLang, $wgOut;
+               global $wgContLang, $wgOut;
                global $wgEnableUploads, $wgForeignFileRepos;
 
                $imagesAvailable = $wgEnableUploads || count( $wgForeignFileRepos );
 
                /**
                 * $toolarray is an array of arrays each of which includes the
-                * filename of the button image (without path), the opening
-                * tag, the closing tag, optionally a sample text that is
+                * opening tag, the closing tag, optionally a sample text that is
                 * inserted between the two when no selection is highlighted
                 * and.  The tip text is shown when the user moves the mouse
                 * over the button.
+                *
+                * Images are defined in ResourceLoaderEditToolbarModule.
                 */
                $toolarray = array(
                        array(
-                               'image'  => $wgLang->getImageFile( 'button-bold' ),
                                'id'     => 'mw-editbutton-bold',
                                'open'   => '\'\'\'',
                                'close'  => '\'\'\'',
@@ -3564,7 +3582,6 @@ HTML
                                'tip'    => wfMessage( 'bold_tip' )->text(),
                        ),
                        array(
-                               'image'  => $wgLang->getImageFile( 'button-italic' ),
                                'id'     => 'mw-editbutton-italic',
                                'open'   => '\'\'',
                                'close'  => '\'\'',
@@ -3572,7 +3589,6 @@ HTML
                                'tip'    => wfMessage( 'italic_tip' )->text(),
                        ),
                        array(
-                               'image'  => $wgLang->getImageFile( 'button-link' ),
                                'id'     => 'mw-editbutton-link',
                                'open'   => '[[',
                                'close'  => ']]',
@@ -3580,7 +3596,6 @@ HTML
                                'tip'    => wfMessage( 'link_tip' )->text(),
                        ),
                        array(
-                               'image'  => $wgLang->getImageFile( 'button-extlink' ),
                                'id'     => 'mw-editbutton-extlink',
                                'open'   => '[',
                                'close'  => ']',
@@ -3588,7 +3603,6 @@ HTML
                                'tip'    => wfMessage( 'extlink_tip' )->text(),
                        ),
                        array(
-                               'image'  => $wgLang->getImageFile( 'button-headline' ),
                                'id'     => 'mw-editbutton-headline',
                                'open'   => "\n== ",
                                'close'  => " ==\n",
@@ -3596,7 +3610,6 @@ HTML
                                'tip'    => wfMessage( 'headline_tip' )->text(),
                        ),
                        $imagesAvailable ? array(
-                               'image'  => $wgLang->getImageFile( 'button-image' ),
                                'id'     => 'mw-editbutton-image',
                                'open'   => '[[' . $wgContLang->getNsText( NS_FILE ) . ':',
                                'close'  => ']]',
@@ -3604,7 +3617,6 @@ HTML
                                'tip'    => wfMessage( 'image_tip' )->text(),
                        ) : false,
                        $imagesAvailable ? array(
-                               'image'  => $wgLang->getImageFile( 'button-media' ),
                                'id'     => 'mw-editbutton-media',
                                'open'   => '[[' . $wgContLang->getNsText( NS_MEDIA ) . ':',
                                'close'  => ']]',
@@ -3612,7 +3624,6 @@ HTML
                                'tip'    => wfMessage( 'media_tip' )->text(),
                        ) : false,
                        array(
-                               'image'  => $wgLang->getImageFile( 'button-nowiki' ),
                                'id'     => 'mw-editbutton-nowiki',
                                'open'   => "<nowiki>",
                                'close'  => "</nowiki>",
@@ -3620,7 +3631,6 @@ HTML
                                'tip'    => wfMessage( 'nowiki_tip' )->text(),
                        ),
                        array(
-                               'image'  => $wgLang->getImageFile( 'button-sig' ),
                                'id'     => 'mw-editbutton-signature',
                                'open'   => '--~~~~',
                                'close'  => '',
@@ -3628,7 +3638,6 @@ HTML
                                'tip'    => wfMessage( 'sig_tip' )->text(),
                        ),
                        array(
-                               'image'  => $wgLang->getImageFile( 'button-hr' ),
                                'id'     => 'mw-editbutton-hr',
                                'open'   => "\n----\n",
                                'close'  => '',
@@ -3637,14 +3646,15 @@ HTML
                        )
                );
 
-               $script = 'mw.loader.using("mediawiki.action.edit", function() {';
+               $script = 'mw.loader.using("mediawiki.toolbar", function () {';
                foreach ( $toolarray as $tool ) {
                        if ( !$tool ) {
                                continue;
                        }
 
                        $params = array(
-                               $wgStylePath . '/common/images/' . $tool['image'],
+                               // Images are defined in ResourceLoaderEditToolbarModule
+                               false,
                                // Note that we use the tip both for the ALT tag and the TITLE tag of the image.
                                // Older browsers show a "speedtip" type message only for ALT.
                                // Ideally these should be different, realistically they
@@ -3659,12 +3669,6 @@ HTML
                        $script .= Xml::encodeJsCall( 'mw.toolbar.addButton', $params );
                }
 
-               // This used to be called on DOMReady from mediawiki.action.edit, which
-               // ended up causing race conditions with the setup code above.
-               $script .= "\n" .
-                       "// Create button bar\n" .
-                       "$(function() { mw.toolbar.init(); } );\n";
-
                $script .= '});';
                $wgOut->addScript( Html::inlineScript( ResourceLoader::makeLoaderConditionalScript( $script ) ) );
 
@@ -3750,47 +3754,33 @@ HTML
         * @return array
         */
        public function getEditButtons( &$tabindex ) {
-               global $wgUseMediaWikiUIEverywhere;
-
                $buttons = array();
 
                $attribs = array(
                        'id' => 'wpSave',
                        'name' => 'wpSave',
-                       'type' => 'submit',
                        'tabindex' => ++$tabindex,
-                       'value' => wfMessage( 'savearticle' )->text(),
                ) + Linker::tooltipAndAccesskeyAttribs( 'save' );
-               if ( $wgUseMediaWikiUIEverywhere ) {
-                       $attribs['class'] = 'mw-ui-button mw-ui-constructive';
-               }
-               $buttons['save'] = Xml::element( 'input', $attribs, '' );
+               $buttons['save'] = Html::submitButton( wfMessage( 'savearticle' )->text(),
+                       $attribs, array( 'mw-ui-constructive' ) );
 
                ++$tabindex; // use the same for preview and live preview
                $attribs = array(
                        'id' => 'wpPreview',
                        'name' => 'wpPreview',
-                       'type' => 'submit',
                        'tabindex' => $tabindex,
-                       'value' => wfMessage( 'showpreview' )->text(),
                ) + Linker::tooltipAndAccesskeyAttribs( 'preview' );
-               if ( $wgUseMediaWikiUIEverywhere ) {
-                       $attribs['class'] = 'mw-ui-button mw-ui-progressive';
-               }
-               $buttons['preview'] = Xml::element( 'input', $attribs, '' );
+               $buttons['preview'] = Html::submitButton( wfMessage( 'showpreview' )->text(),
+                       $attribs );
                $buttons['live'] = '';
 
                $attribs = array(
                        'id' => 'wpDiff',
                        'name' => 'wpDiff',
-                       'type' => 'submit',
                        'tabindex' => ++$tabindex,
-                       'value' => wfMessage( 'showdiff' )->text(),
                ) + Linker::tooltipAndAccesskeyAttribs( 'diff' );
-               if ( $wgUseMediaWikiUIEverywhere ) {
-                       $attribs['class'] = 'mw-ui-button mw-ui-progressive';
-               }
-               $buttons['diff'] = Xml::element( 'input', $attribs, '' );
+               $buttons['diff'] = Html::submitButton( wfMessage( 'showdiff' )->text(),
+                       $attribs );
 
                wfRunHooks( 'EditPageBeforeEditButtons', array( &$this, &$buttons, &$tabindex ) );
                return $buttons;
@@ -3994,7 +3984,7 @@ HTML
                                // Do some sanity checks. These aren't needed for reversibility,
                                // but should help keep the breakage down if the editor
                                // breaks one of the entities whilst editing.
-                               if ( ( substr( $invalue, $i, 1 ) == ";" ) and ( strlen( $hexstring ) <= 6 ) ) {
+                               if ( ( substr( $invalue, $i, 1 ) == ";" ) && ( strlen( $hexstring ) <= 6 ) ) {
                                        $codepoint = hexdec( $hexstring );
                                        $result .= codepointToUtf8( $codepoint );
                                } else {
index 43dfd17..840e723 100644 (file)
@@ -41,7 +41,7 @@ class WikiExporter {
        public $dumpUploadFileContents = false;
 
        /** @var string */
-       protected $author_list = "";
+       public $author_list = "";
 
        const FULL = 1;
        const CURRENT = 2;
@@ -56,20 +56,20 @@ class WikiExporter {
        const STUB = 1;
 
        /** @var int */
-       protected $buffer;
+       public $buffer;
 
        /** @var int */
-       protected $text;
+       public $text;
 
        /** @var DumpOutput */
-       protected $sink;
+       public $sink;
 
        /**
         * Returns the export schema version.
         * @return string
         */
        public static function schemaVersion() {
-               return "0.9";
+               return "0.10";
        }
 
        /**
@@ -267,7 +267,7 @@ class WikiExporter {
                        if ( $this->buffer == WikiExporter::STREAM ) {
                                $prev = $this->db->bufferResults( false );
                        }
-                       $wrapper = null; // Assuring $wrapper is not undefined, if exception occurs early
+                       $result = null; // Assuring $result is not undefined, if exception occurs early
                        try {
                                $result = $this->db->select( array( 'logging', 'user' ),
                                        array( "{$logging}.*", 'user_name' ), // grab the user name
@@ -275,8 +275,7 @@ class WikiExporter {
                                        __METHOD__,
                                        array( 'ORDER BY' => 'log_id', 'USE INDEX' => array( 'logging' => 'PRIMARY' ) )
                                );
-                               $wrapper = $this->db->resultObject( $result );
-                               $this->outputLogStream( $wrapper );
+                               $this->outputLogStream( $result );
                                if ( $this->buffer == WikiExporter::STREAM ) {
                                        $this->db->bufferResults( $prev );
                                }
@@ -286,8 +285,8 @@ class WikiExporter {
 
                                // Freeing result
                                try {
-                                       if ( $wrapper ) {
-                                               $wrapper->free();
+                                       if ( $result ) {
+                                               $result->free();
                                        }
                                } catch ( Exception $e2 ) {
                                        // Already in panic mode -> ignoring $e2 as $e has
@@ -377,16 +376,15 @@ class WikiExporter {
                                $prev = $this->db->bufferResults( false );
                        }
 
-                       $wrapper = null; // Assuring $wrapper is not undefined, if exception occurs early
+                       $result = null; // Assuring $result is not undefined, if exception occurs early
                        try {
                                wfRunHooks( 'ModifyExportQuery',
                                                array( $this->db, &$tables, &$cond, &$opts, &$join ) );
 
                                # Do the query!
                                $result = $this->db->select( $tables, '*', $cond, __METHOD__, $opts, $join );
-                               $wrapper = $this->db->resultObject( $result );
                                # Output dump results
-                               $this->outputPageStream( $wrapper );
+                               $this->outputPageStream( $result );
 
                                if ( $this->buffer == WikiExporter::STREAM ) {
                                        $this->db->bufferResults( $prev );
@@ -397,8 +395,8 @@ class WikiExporter {
 
                                // Freeing result
                                try {
-                                       if ( $wrapper ) {
-                                               $wrapper->free();
+                                       if ( $result ) {
+                                               $result->free();
                                        }
                                } catch ( Exception $e2 ) {
                                        // Already in panic mode -> ignoring $e2 as $e has
@@ -467,7 +465,7 @@ class WikiExporter {
        }
 
        /**
-        * @param array $resultset
+        * @param ResultWrapper $resultset
         */
        protected function outputLogStream( $resultset ) {
                foreach ( $resultset as $row ) {
@@ -481,16 +479,6 @@ class WikiExporter {
  * @ingroup Dump
  */
 class XmlDumpWriter {
-       /**
-        * Returns the export schema version.
-        * @deprecated since 1.20; use WikiExporter::schemaVersion() instead
-        * @return string
-        */
-       function schemaVersion() {
-               wfDeprecated( __METHOD__, '1.20' );
-               return WikiExporter::schemaVersion();
-       }
-
        /**
         * Opens the XML output stream's root "<mediawiki>" element.
         * This does not include an xml directive, so is safe to include
@@ -705,6 +693,9 @@ class XmlDumpWriter {
                        $content_format = $content_handler->getDefaultFormat();
                }
 
+               $out .= "      " . Xml::element( 'model', null, strval( $content_model ) ) . "\n";
+               $out .= "      " . Xml::element( 'format', null, strval( $content_format ) ) . "\n";
+
                $text = '';
                if ( isset( $row->rev_deleted ) && ( $row->rev_deleted & Revision::DELETED_TEXT ) ) {
                        $out .= "      " . Xml::element( 'text', array( 'deleted' => 'deleted' ) ) . "\n";
@@ -731,9 +722,6 @@ class XmlDumpWriter {
                        $out .= "      <sha1/>\n";
                }
 
-               $out .= "      " . Xml::element( 'model', null, strval( $content_model ) ) . "\n";
-               $out .= "      " . Xml::element( 'format', null, strval( $content_format ) ) . "\n";
-
                wfRunHooks( 'XmlDumpWriterWriteRevision', array( &$this, &$out, $row, $text ) );
 
                $out .= "    </revision>\n";
@@ -1370,10 +1358,10 @@ class DumpNotalkFilter extends DumpFilter {
  */
 class DumpNamespaceFilter extends DumpFilter {
        /** @var bool */
-       protected $invert = false;
+       public $invert = false;
 
        /** @var array */
-       protected $namespaces = array();
+       public $namespaces = array();
 
        /**
         * @param DumpOutput $sink
@@ -1437,13 +1425,13 @@ class DumpNamespaceFilter extends DumpFilter {
  * @ingroup Dump
  */
 class DumpLatestFilter extends DumpFilter {
-       protected $page;
+       public $page;
 
-       protected $pageString;
+       public $pageString;
 
-       protected $rev;
+       public $rev;
 
-       protected $revString;
+       public $revString;
 
        /**
         * @param object $page
index 03dd7f5..2fdfa42 100644 (file)
  */
 class FeedItem {
        /** @var Title */
-       protected $title;
+       public $title;
 
-       protected $description;
+       public $description;
 
-       protected $url;
+       public $url;
 
-       protected $date;
+       public $date;
 
-       protected $author;
+       public $author;
 
-       protected $uniqueId;
+       public $uniqueId;
 
-       protected $comments;
+       public $comments;
 
        public $rssIsPermalink = false;
 
index ddea620..eab8031 100644 (file)
@@ -30,7 +30,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 /**
  * Compatibility functions
  *
- * We support PHP 5.3.2 and up.
+ * We support PHP 5.3.3 and up.
  * Re-implementations of newer functions or functions in non-standard
  * PHP extensions may be included here.
  */
@@ -102,19 +102,30 @@ if ( !function_exists( 'gzdecode' ) ) {
 }
 
 // hash_equals function only exists in PHP >= 5.6.0
+// http://php.net/hash_equals
 if ( !function_exists( 'hash_equals' ) ) {
        /**
-        * Check whether a user-provided string is equal to a fixed-length secret without
-        * revealing bytes of the secret through timing differences.
+        * Check whether a user-provided string is equal to a fixed-length secret string
+        * without revealing bytes of the secret string through timing differences.
         *
-        * This timing guarantee -- that a partial match takes the same time as a complete
-        * mismatch -- is why this function is used in some security-sensitive parts of the code.
-        * For example, it shouldn't be possible to guess an HMAC signature one byte at a time.
+        * The usual way to compare strings (PHP's === operator or the underlying memcmp()
+        * function in C) is to compare corresponding bytes and stop at the first difference,
+        * which would take longer for a partial match than for a complete mismatch. This
+        * is not secure when one of the strings (e.g. an HMAC or token) must remain secret
+        * and the other may come from an attacker. Statistical analysis of timing measurements
+        * over many requests may allow the attacker to guess the string's bytes one at a time
+        * (and check his guesses) even if the timing differences are extremely small.
+        *
+        * When making such a security-sensitive comparison, it is essential that the sequence
+        * in which instructions are executed and memory locations are accessed not depend on
+        * the secret string's value. HOWEVER, for simplicity, we do not attempt to minimize
+        * the inevitable leakage of the string's length. That is generally known anyway as
+        * a chararacteristic of the hash function used to compute the secret value.
         *
         * Longer explanation: http://www.emerose.com/timing-attacks-explained
         *
         * @codeCoverageIgnore
-        * @param string $known_string Fixed-length secret to compare against
+        * @param string $known_string Fixed-length secret string to compare against
         * @param string $user_string User-provided string
         * @return bool True if the strings are the same, false otherwise
         */
@@ -134,14 +145,14 @@ if ( !function_exists( 'hash_equals' ) ) {
                        return false;
                }
 
-               // Note that we do one thing PHP doesn't: try to avoid leaking information about
-               // relative lengths of $known_string and $user_string, and of multiple $known_strings.
-               // However, lengths may still inevitably leak through, for example, CPU cache misses.
                $known_string_len = strlen( $known_string );
-               $user_string_len = strlen( $user_string );
-               $result = $known_string_len ^ $user_string_len;
-               for ( $i = 0; $i < $user_string_len; $i++ ) {
-                       $result |= ord( $known_string[$i % $known_string_len] ) ^ ord( $user_string[$i] );
+               if ( $known_string_len !== strlen( $user_string ) ) {
+                       return false;
+               }
+
+               $result = 0;
+               for ( $i = 0; $i < $known_string_len; $i++ ) {
+                       $result |= ord( $known_string[$i] ) ^ ord( $user_string[$i] );
                }
 
                return ( $result === 0 );
@@ -948,7 +959,7 @@ function wfMatchesDomainList( $url, $domains ) {
  *     - false: same as 'log'
  */
 function wfDebug( $text, $dest = 'all' ) {
-       global $wgDebugLogFile, $wgDebugRawPage, $wgDebugLogPrefix;
+       global $wgDebugRawPage, $wgDebugLogPrefix;
 
        if ( !$wgDebugRawPage && wfIsDebugRawPage() ) {
                return;
@@ -963,6 +974,7 @@ function wfDebug( $text, $dest = 'all' ) {
 
        $timer = wfDebugTimer();
        if ( $timer !== '' ) {
+               // Prepend elapsed request time and real memory usage to each line
                $text = preg_replace( '/[^\n]/', $timer . '\0', $text, 1 );
        }
 
@@ -970,13 +982,13 @@ function wfDebug( $text, $dest = 'all' ) {
                MWDebug::debugMsg( $text );
        }
 
-       if ( $wgDebugLogFile != '' ) {
-               # Strip unprintables; they can switch terminal modes when binary data
-               # gets dumped, which is pretty annoying.
-               $text = preg_replace( '![\x00-\x08\x0b\x0c\x0e-\x1f]!', ' ', $text );
-               $text = $wgDebugLogPrefix . $text;
-               wfErrorLog( $text, $wgDebugLogFile );
+       $ctx = array();
+       if ( $wgDebugLogPrefix !== '' ) {
+               $ctx['prefix'] = $wgDebugLogPrefix;
        }
+
+       $logger = MWLogger::getInstance( 'wfDebug' );
+       $logger->debug( rtrim( $text, "\n" ), $ctx );
 }
 
 /**
@@ -1055,10 +1067,6 @@ function wfDebugMem( $exact = false ) {
  *     - false: same as 'private'
  */
 function wfDebugLog( $logGroup, $text, $dest = 'all' ) {
-       global $wgDebugLogGroups;
-
-       $text = trim( $text ) . "\n";
-
        // Turn $dest into a string if it's a boolean (for b/c)
        if ( $dest === true ) {
                $dest = 'all';
@@ -1066,34 +1074,16 @@ function wfDebugLog( $logGroup, $text, $dest = 'all' ) {
                $dest = 'private';
        }
 
-       if ( !isset( $wgDebugLogGroups[$logGroup] ) ) {
-               if ( $dest !== 'private' ) {
-                       wfDebug( "[$logGroup] $text", $dest );
-               }
-               return;
-       }
+       $text = trim( $text );
 
        if ( $dest === 'all' ) {
-               MWDebug::debugMsg( "[$logGroup] $text" );
-       }
-
-       $logConfig = $wgDebugLogGroups[$logGroup];
-       if ( $logConfig === false ) {
-               return;
-       }
-       if ( is_array( $logConfig ) ) {
-               if ( isset( $logConfig['sample'] ) && mt_rand( 1, $logConfig['sample'] ) !== 1 ) {
-                       return;
-               }
-               $destination = $logConfig['destination'];
-       } else {
-               $destination = strval( $logConfig );
+               MWDebug::debugMsg( "[{$logGroup}] {$text}\n" );
        }
 
-       $time = wfTimestamp( TS_DB );
-       $wiki = wfWikiID();
-       $host = wfHostname();
-       wfErrorLog( "$time $host $wiki: $text", $destination );
+       $logger = MWLogger::getInstance( $logGroup );
+       $logger->debug( $text, array(
+               'private' => ( $dest === 'private' ),
+       ) );
 }
 
 /**
@@ -1102,30 +1092,8 @@ function wfDebugLog( $logGroup, $text, $dest = 'all' ) {
  * @param string $text Database error message.
  */
 function wfLogDBError( $text ) {
-       global $wgDBerrorLog, $wgDBerrorLogTZ;
-       static $logDBErrorTimeZoneObject = null;
-
-       if ( $wgDBerrorLog ) {
-               $host = wfHostname();
-               $wiki = wfWikiID();
-
-               if ( $wgDBerrorLogTZ && !$logDBErrorTimeZoneObject ) {
-                       $logDBErrorTimeZoneObject = new DateTimeZone( $wgDBerrorLogTZ );
-               }
-
-               // Workaround for https://bugs.php.net/bug.php?id=52063
-               // Can be removed when min PHP > 5.3.2
-               if ( $logDBErrorTimeZoneObject === null ) {
-                       $d = date_create( "now" );
-               } else {
-                       $d = date_create( "now", $logDBErrorTimeZoneObject );
-               }
-
-               $date = $d->format( 'D M j G:i:s T Y' );
-
-               $text = "$date\t$host\t$wiki\t" . trim( $text ) . "\n";
-               wfErrorLog( $text, $wgDBerrorLog );
-       }
+       $logger = MWLogger::getInstance( 'wfLogDBError' );
+       $logger->error( trim( $text ) );
 }
 
 /**
@@ -1183,65 +1151,17 @@ function wfLogWarning( $msg, $callerOffset = 1, $level = E_USER_WARNING ) {
  * @throws MWException
  */
 function wfErrorLog( $text, $file ) {
-       if ( substr( $file, 0, 4 ) == 'udp:' ) {
-               # Needs the sockets extension
-               if ( preg_match( '!^(tcp|udp):(?://)?\[([0-9a-fA-F:]+)\]:(\d+)(?:/(.*))?$!', $file, $m ) ) {
-                       // IPv6 bracketed host
-                       $host = $m[2];
-                       $port = intval( $m[3] );
-                       $prefix = isset( $m[4] ) ? $m[4] : false;
-                       $domain = AF_INET6;
-               } elseif ( preg_match( '!^(tcp|udp):(?://)?([a-zA-Z0-9.-]+):(\d+)(?:/(.*))?$!', $file, $m ) ) {
-                       $host = $m[2];
-                       if ( !IP::isIPv4( $host ) ) {
-                               $host = gethostbyname( $host );
-                       }
-                       $port = intval( $m[3] );
-                       $prefix = isset( $m[4] ) ? $m[4] : false;
-                       $domain = AF_INET;
-               } else {
-                       throw new MWException( __METHOD__ . ': Invalid UDP specification' );
-               }
-
-               // Clean it up for the multiplexer
-               if ( strval( $prefix ) !== '' ) {
-                       $text = preg_replace( '/^/m', $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 );
-               }
-
-               $sock = socket_create( $domain, SOCK_DGRAM, SOL_UDP );
-               if ( !$sock ) {
-                       return;
-               }
-
-               socket_sendto( $sock, $text, strlen( $text ), 0, $host, $port );
-               socket_close( $sock );
-       } 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();
-       }
+       $logger = MWLogger::getInstance( 'wfErrorLog' );
+       $logger->info( trim( $text ), array(
+               'destination' => $file,
+       ) );
 }
 
 /**
  * @todo document
  */
 function wfLogProfilingData() {
-       global $wgRequestTime, $wgDebugLogFile, $wgDebugLogGroups, $wgDebugRawPage;
+       global $wgRequestTime, $wgDebugLogGroups, $wgDebugRawPage;
        global $wgProfileLimit, $wgUser, $wgRequest;
 
        StatCounter::singleton()->flush();
@@ -1262,53 +1182,54 @@ function wfLogProfilingData() {
 
        $profiler->logData();
 
-       // Check whether this should be logged in the debug file.
        if ( isset( $wgDebugLogGroups['profileoutput'] )
                && $wgDebugLogGroups['profileoutput'] === false
        ) {
-               // Explicitely disabled
-               return;
-       }
-       if ( !isset( $wgDebugLogGroups['profileoutput'] ) && $wgDebugLogFile == '' ) {
-               // Logging not enabled; no point going further
+               // Explicitly disabled
                return;
        }
        if ( !$wgDebugRawPage && wfIsDebugRawPage() ) {
                return;
        }
 
-       $forward = '';
+       $ctx = array( 'elapsed' => $elapsed );
        if ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
-               $forward = ' forwarded for ' . $_SERVER['HTTP_X_FORWARDED_FOR'];
+               $ctx['forwarded_for'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
        }
        if ( !empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
-               $forward .= ' client IP ' . $_SERVER['HTTP_CLIENT_IP'];
+               $ctx['client_ip'] = $_SERVER['HTTP_CLIENT_IP'];
        }
        if ( !empty( $_SERVER['HTTP_FROM'] ) ) {
-               $forward .= ' from ' . $_SERVER['HTTP_FROM'];
+               $ctx['from'] = $_SERVER['HTTP_FROM'];
        }
-       if ( $forward ) {
-               $forward = "\t(proxied via {$_SERVER['REMOTE_ADDR']}{$forward})";
+       if ( isset( $ctx['forwarded_for'] ) ||
+               isset( $ctx['client_ip'] ) ||
+               isset( $ctx['from'] ) ) {
+               $ctx['proxy'] = $_SERVER['REMOTE_ADDR'];
        }
+
        // 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()
+       // @todo FIXME: We can detect some anons even if it is not loaded.
+       // See User::getId()
        if ( $wgUser->isItemLoaded( 'id' ) && $wgUser->isAnon() ) {
-               $forward .= ' anon';
+               $ctx['anon'] = true;
+       } else {
+               $ctx['anon'] = false;
        }
 
        // Command line script uses a FauxRequest object which does not have
        // any knowledge about an URL and throw an exception instead.
        try {
-               $requestUrl = $wgRequest->getRequestURL();
-       } catch ( MWException $e ) {
-               $requestUrl = 'n/a';
+               $ctx['url'] = urldecode( $wgRequest->getRequestURL() );
+       } catch ( MWException $ignored ) {
+               // no-op
        }
 
-       $log = sprintf( "%s\t%04.3f\t%s\n",
-               gmdate( 'YmdHis' ), $elapsed,
-               urldecode( $requestUrl . $forward ) );
+       $ctx['output'] = $profiler->getOutput();
+       $ctx['profile'] = $profiler->getRawData();
 
-       wfDebugLog( 'profileoutput', $log . $profiler->getOutput() );
+       $log = MWLogger::getInstance( 'profileoutput' );
+       $log->info( 'Elapsed: {elapsed}', $ctx );
 }
 
 /**
@@ -1407,7 +1328,7 @@ function wfGetLangObj( $langcode = false ) {
  *
  * This function replaces all old wfMsg* functions.
  *
- * @param string $key Message key
+ * @param string|string[] $key Message key, or array of keys
  * @param mixed $params,... Normal message parameters
  * @return Message
  *
@@ -2975,7 +2896,9 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
  * function, as all the arguments to wfShellExec can become unwieldy.
  *
  * @note This also includes errors from limit.sh, e.g. if $wgMaxShellFileSize is exceeded.
- * @param string $cmd Command line, properly escaped for shell.
+ * @param string|string[] $cmd If string, a properly shell-escaped command line,
+ *   or an array of unescaped arguments, in which case each value will be escaped
+ *   Example:   [ 'convert', '-font', 'font name' ] would produce "'convert' '-font' 'font name'"
  * @param null|mixed &$retval Optional, will receive the program's exit code.
  *   (non-zero is usually failure)
  * @param array $environ Optional environment variables which should be
@@ -3179,10 +3102,10 @@ function wfDiff( $before, $after, $params = '-u' ) {
 
        // Kill the --- and +++ lines. They're not useful.
        $diff_lines = explode( "\n", $diff );
-       if ( strpos( $diff_lines[0], '---' ) === 0 ) {
+       if ( isset( $diff_lines[0] ) && strpos( $diff_lines[0], '---' ) === 0 ) {
                unset( $diff_lines[0] );
        }
-       if ( strpos( $diff_lines[1], '+++' ) === 0 ) {
+       if ( isset( $diff_lines[1] ) && strpos( $diff_lines[1], '+++' ) === 0 ) {
                unset( $diff_lines[1] );
        }
 
@@ -3366,7 +3289,10 @@ function wfBaseConvert( $input, $sourceBase, $destBase, $pad = 1,
        );
 
        if ( extension_loaded( 'gmp' ) && ( $engine == 'auto' || $engine == 'gmp' ) ) {
-               $result = gmp_strval( gmp_init( $input, $sourceBase ), $destBase );
+               // Removing leading zeros works around broken base detection code in
+               // some PHP versions (see <https://bugs.php.net/bug.php?id=50175> and
+               // <https://bugs.php.net/bug.php?id=55398>).
+               $result = gmp_strval( gmp_init( ltrim( $input, '0' ), $sourceBase ), $destBase );
        } elseif ( extension_loaded( 'bcmath' ) && ( $engine == 'auto' || $engine == 'bcmath' ) ) {
                $decimal = '0';
                foreach ( str_split( strtolower( $input ) ) as $char ) {
@@ -3749,46 +3675,79 @@ function wfGetNull() {
 }
 
 /**
- * Modern version of wfWaitForSlaves(). Instead of looking at replication lag
- * and waiting for it to go down, this waits for the slaves to catch up to the
- * master position. Use this when updating very large numbers of rows, as
- * in maintenance scripts, to avoid causing too much lag.  Of course, this is
- * a no-op if there are no slaves.
+ * Waits for the slaves to catch up to the master position
+ *
+ * Use this when updating very large numbers of rows, as in maintenance scripts,
+ * to avoid causing too much lag. Of course, this is a no-op if there are no slaves.
+ *
+ * By default this waits on the main DB cluster of the current wiki.
+ * If $cluster is set to "*" it will wait on all DB clusters, including
+ * external ones. If the lag being waiting on is caused by the code that
+ * does this check, it makes since to use $ifWritesSince, particularly if
+ * cluster is "*", to avoid excess overhead.
+ *
+ * Never call this function after a big DB write that is still in a transaction.
+ * This only makes sense after the possible lag inducing changes were committed.
  *
  * @param float|null $ifWritesSince Only wait if writes were done since this UNIX timestamp
  * @param string|bool $wiki Wiki identifier accepted by wfGetLB
  * @param string|bool $cluster Cluster name accepted by LBFactory. Default: false.
+ * @param int|null $timeout Max wait time. Default: 1 day (cli), ~10 seconds (web)
  * @return bool Success (able to connect and no timeouts reached)
  */
-function wfWaitForSlaves( $ifWritesSince = false, $wiki = false, $cluster = false ) {
+function wfWaitForSlaves(
+       $ifWritesSince = null, $wiki = false, $cluster = false, $timeout = null
+) {
        // B/C: first argument used to be "max seconds of lag"; ignore such values
-       $ifWritesSince = ( $ifWritesSince > 1e9 ) ? $ifWritesSince : false;
+       $ifWritesSince = ( $ifWritesSince > 1e9 ) ? $ifWritesSince : null;
 
-       if ( $cluster !== false ) {
-               $lb = wfGetLBFactory()->getExternalLB( $cluster );
-       } else {
-               $lb = wfGetLB( $wiki );
+       if ( $timeout === null ) {
+               $timeout = ( PHP_SAPI === 'cli' ) ? 86400 : 10;
        }
 
-       // bug 27975 - Don't try to wait for slaves if there are none
-       // Prevents permission error when getting master position
-       if ( $lb->getServerCount() > 1 ) {
-               if ( $ifWritesSince && !$lb->hasMasterConnection() ) {
-                       return true; // assume no writes done
-               }
-               $dbw = $lb->getConnection( DB_MASTER, array(), $wiki );
-               if ( $ifWritesSince && $dbw->lastDoneWrites() < $ifWritesSince ) {
-                       return true; // no writes since the last wait
+       // Figure out which clusters need to be checked
+       $lbs = array();
+       if ( $cluster === '*' ) {
+               wfGetLBFactory()->forEachLB( function ( LoadBalancer $lb ) use ( &$lbs ) {
+                       $lbs[] = $lb;
+               } );
+       } elseif ( $cluster !== false ) {
+               $lbs[] = wfGetLBFactory()->getExternalLB( $cluster );
+       } else {
+               $lbs[] = wfGetLB( $wiki );
+       }
+
+       // Get all the master positions of applicable DBs right now.
+       // This can be faster since waiting on one cluster reduces the
+       // time needed to wait on the next clusters.
+       $masterPositions = array_fill( 0, count( $lbs ), false );
+       foreach ( $lbs as $i => $lb ) {
+               // bug 27975 - Don't try to wait for slaves if there are none
+               // Prevents permission error when getting master position
+               if ( $lb->getServerCount() > 1 ) {
+                       if ( $ifWritesSince && !$lb->hasMasterConnection() ) {
+                               continue; // assume no writes done
+                       }
+                       // Use the empty string to not trigger selectDB() since the connection
+                       // may have been to a server that does not have a DB for the current wiki.
+                       $dbw = $lb->getConnection( DB_MASTER, array(), '' );
+                       if ( $ifWritesSince && $dbw->lastDoneWrites() < $ifWritesSince ) {
+                               continue; // no writes since the last wait
+                       }
+                       $masterPositions[$i] = $dbw->getMasterPos();
                }
-               $pos = $dbw->getMasterPos();
-               // The DBMS may not support getMasterPos() or the whole
-               // load balancer might be fake (e.g. $wgAllDBsAreLocalhost).
-               if ( $pos !== false ) {
-                       return $lb->waitForAll( $pos, PHP_SAPI === 'cli' ? 86400 : null );
+       }
+
+       $ok = true;
+       foreach ( $lbs as $i => $lb ) {
+               if ( $masterPositions[$i] ) {
+                       // The DBMS may not support getMasterPos() or the whole
+                       // load balancer might be fake (e.g. $wgAllDBsAreLocalhost).
+                       $ok = $lb->waitForAll( $masterPositions[$i], $timeout ) && $ok;
                }
        }
 
-       return true;
+       return $ok;
 }
 
 /**
index d2be9e9..69f1120 100644 (file)
@@ -351,10 +351,10 @@ class HistoryBlobCurStub {
  */
 class DiffHistoryBlob implements HistoryBlob {
        /** @var array Uncompressed item cache */
-       protected $mItems = array();
+       public $mItems = array();
 
        /** @var int Total uncompressed size */
-       protected $mSize = 0;
+       public $mSize = 0;
 
        /**
         * @var array Array of diffs. If a diff D from A to B is notated D = B - A,
@@ -364,20 +364,20 @@ class DiffHistoryBlob implements HistoryBlob {
         *    diff[i] = {
         *              { item[map[i]] - Z                where i = 0
         */
-       protected $mDiffs;
+       public $mDiffs;
 
        /** @var array The diff map, see above */
-       protected $mDiffMap;
+       public $mDiffMap;
 
        /** @var int The key for getText()
         */
-       protected $mDefaultKey;
+       public $mDefaultKey;
 
        /** @var string Compressed storage */
        public $mCompressed;
 
        /** @var bool True if the object is locked against further writes */
-       protected $mFrozen = false;
+       public $mFrozen = false;
 
        /**
         * @var int The maximum uncompressed size before the object becomes sad
index 2928748..668c3d9 100644 (file)
@@ -179,7 +179,7 @@ class Hooks {
                        // Run autoloader (workaround for call_user_func_array bug)
                        // and throw error if not callable.
                        if ( !is_callable( $callback ) ) {
-                               throw new MWException( 'Invalid callback in hooks for ' . $event . "\n" );
+                               throw new MWException( 'Invalid callback ' . $func . ' in hooks for ' . $event . "\n" );
                        }
 
                        /*
index 48dbdba..fa868e3 100644 (file)
@@ -101,6 +101,34 @@ class Html {
                'itemscope',
        );
 
+       /**
+        * 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
+        * @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() ) {
+               global $wgUseMediaWikiUIEverywhere;
+               if ( $wgUseMediaWikiUIEverywhere ) {
+                       if ( isset( $attrs['class'] ) ) {
+                               if ( is_array( $attrs['class'] ) ) {
+                                       $attrs['class'][] = 'mw-ui-button';
+                                       $attrs = array_merge( $attrs, $modifiers );
+                                       // ensure compatibility with Xml
+                                       $attrs['class'] = implode( ' ', $attrs['class'] );
+                               } else {
+                                       $attrs['class'] .= ' mw-ui-button ' . implode( ' ', $modifiers );
+                               }
+                       } else {
+                               $attrs['class'] = array( 'mw-ui-button' );
+                               // ensure compatibility with Xml
+                               $attrs['class'] = implode( ' ', array_merge( $attrs['class'], $modifiers ) );
+                       }
+               }
+               return $attrs;
+       }
+
        /**
         * Modifies a set of attributes meant for text input elements
         * and apply a set of default attributes.
@@ -130,6 +158,43 @@ class Html {
                return $attrs;
        }
 
+       /**
+        * 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
+        * @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',
+                       self::buttonAttributes( $attrs, $modifiers ),
+                       $contents
+               );
+       }
+
+       /**
+        * 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
+        * @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() ) {
+               $attrs['type'] = 'submit';
+               $attrs['value'] = $contents;
+               return Html::element( 'input', self::buttonAttributes( $attrs, $modifiers ) );
+       }
+
        /**
         * Returns an HTML element in a string.  The major advantage here over
         * manually typing out the HTML is that it will escape all attribute
@@ -937,20 +1002,13 @@ class Html {
         * Get HTML for an info box with an icon.
         *
         * @param string $text Wikitext, get this with wfMessage()->plain()
-        * @param string $icon Icon name, file in skins/common/images
+        * @param string $icon Path to icon file (used as 'src' attribute)
         * @param string $alt Alternate text for the icon
         * @param string $class Additional class name to add to the wrapper div
-        * @param bool $useStylePath
         *
         * @return string
         */
-       static function infoBox( $text, $icon, $alt, $class = false, $useStylePath = true ) {
-               global $wgStylePath;
-
-               if ( $useStylePath ) {
-                       $icon = $wgStylePath . '/common/images/' . $icon;
-               }
-
+       static function infoBox( $text, $icon, $alt, $class = false ) {
                $s = Html::openElement( 'div', array( 'class' => "mw-infobox $class" ) );
 
                $s .= Html::openElement( 'div', array( 'class' => 'mw-infobox-left' ) ) .
index 1eb8ca5..f9ee14b 100644 (file)
@@ -114,7 +114,7 @@ class Http {
         * @return bool
         */
        public static function isLocalURL( $url ) {
-               global $wgCommandLineMode, $wgConf;
+               global $wgCommandLineMode, $wgLocalVirtualHosts, $wgConf;
 
                if ( $wgCommandLineMode ) {
                        return false;
@@ -126,7 +126,7 @@ class Http {
                        $host = $matches[1];
                        // Split up dotwise
                        $domainParts = explode( '.', $host );
-                       // Check if this domain or any superdomain is listed in $wgConf as a local virtual host
+                       // Check if this domain or any superdomain is listed as a local virtual host
                        $domainParts = array_reverse( $domainParts );
 
                        $domain = '';
@@ -139,7 +139,9 @@ class Http {
                                        $domain = $domainPart . '.' . $domain;
                                }
 
-                               if ( $wgConf->isLocalVHost( $domain ) ) {
+                               if ( in_array( $domain, $wgLocalVirtualHosts )
+                                       || $wgConf->isLocalVHost( $domain )
+                               ) {
                                        return true;
                                }
                        }
@@ -809,7 +811,8 @@ class CurlHttpRequest extends MWHttpRequest {
                        return false;
                }
 
-               if ( !defined( 'CURLOPT_REDIR_PROTOCOLS' ) ) {
+               $curlVersionInfo = curl_version();
+               if ( $curlVersionInfo['version_number'] < 0x071304 ) {
                        wfDebug( "Cannot follow redirects with libcurl < 7.19.4 due to CVE-2009-0037\n" );
                        return false;
                }
index b3ca041..4eb8e97 100644 (file)
@@ -37,13 +37,21 @@ class WikiImporter {
        private $mNoticeCallback, $mDebug;
        private $mImportUploads, $mImageBasePath;
        private $mNoUpdates = false;
+       /** @var Config */
+       private $config;
 
        /**
         * Creates an ImportXMLReader drawing from the source provided
         * @param ImportStreamSource $source
+        * @param Config $config
         */
-       function __construct( ImportStreamSource $source ) {
+       function __construct( ImportStreamSource $source, Config $config = null ) {
                $this->reader = new XMLReader();
+               if ( !$config ) {
+                       wfDeprecated( __METHOD__ . ' without a Config instance', '1.25' );
+                       $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+               }
+               $this->config = $config;
 
                if ( !in_array( 'uploadsource', stream_get_wrappers() ) ) {
                        stream_wrapper_register( 'uploadsource', 'UploadSourceAdapter' );
@@ -536,7 +544,7 @@ class WikiImporter {
         * @return bool|mixed
         */
        private function processLogItem( $logInfo ) {
-               $revision = new WikiRevision;
+               $revision = new WikiRevision( $this->config );
 
                $revision->setID( $logInfo['id'] );
                $revision->setType( $logInfo['type'] );
@@ -670,7 +678,7 @@ class WikiImporter {
         * @return bool|mixed
         */
        private function processRevision( $pageInfo, $revisionInfo ) {
-               $revision = new WikiRevision;
+               $revision = new WikiRevision( $this->config );
 
                if ( isset( $revisionInfo['id'] ) ) {
                        $revision->setID( $revisionInfo['id'] );
@@ -786,7 +794,7 @@ class WikiImporter {
         * @return mixed
         */
        private function processUpload( $pageInfo, $uploadInfo ) {
-               $revision = new WikiRevision;
+               $revision = new WikiRevision( $this->config );
                $text = isset( $uploadInfo['text'] ) ? $uploadInfo['text'] : '';
 
                $revision->setTitle( $pageInfo['_title'] );
@@ -847,8 +855,6 @@ class WikiImporter {
         * @return array|bool
         */
        private function processTitle( $text ) {
-               global $wgCommandLineMode;
-
                $workTitle = $text;
                $origTitle = Title::newFromText( $workTitle );
 
@@ -864,6 +870,7 @@ class WikiImporter {
                        $title = Title::newFromText( $workTitle );
                }
 
+               $commandLineMode = $this->config->get( 'CommandLineMode' );
                if ( is_null( $title ) ) {
                        # Invalid page title? Ignore the page
                        $this->notice( 'import-error-invalid', $workTitle );
@@ -874,11 +881,11 @@ class WikiImporter {
                } elseif ( !$title->canExist() ) {
                        $this->notice( 'import-error-special', $title->getPrefixedText() );
                        return false;
-               } elseif ( !$title->userCan( 'edit' ) && !$wgCommandLineMode ) {
+               } elseif ( !$title->userCan( 'edit' ) && !$commandLineMode ) {
                        # Do not import if the importing wiki user cannot edit this page
                        $this->notice( 'import-error-edit', $title->getPrefixedText() );
                        return false;
-               } elseif ( !$title->exists() && !$title->userCan( 'create' ) && !$wgCommandLineMode ) {
+               } elseif ( !$title->exists() && !$title->userCan( 'create' ) && !$commandLineMode ) {
                        # Do not import if the importing wiki user cannot create this page
                        $this->notice( 'import-error-create', $title->getPrefixedText() );
                        return false;
@@ -891,7 +898,7 @@ class WikiImporter {
 /** This is a horrible hack used to keep source compatibility */
 class UploadSourceAdapter {
        /** @var array */
-       private static $sourceRegistrations = array();
+       public static $sourceRegistrations = array();
 
        /** @var string */
        private $mSource;
@@ -1015,13 +1022,13 @@ class UploadSourceAdapter {
  */
 class WikiRevision {
        /** @todo Unused? */
-       private $importer = null;
+       public $importer = null;
 
        /** @var Title */
        public $title = null;
 
        /** @var int */
-       private $id = 0;
+       public $id = 0;
 
        /** @var string */
        public $timestamp = "20010115000000";
@@ -1035,10 +1042,10 @@ class WikiRevision {
        public $user_text = "";
 
        /** @var string */
-       protected $model = null;
+       public $model = null;
 
        /** @var string */
-       protected $format = null;
+       public $format = null;
 
        /** @var string */
        public $text = "";
@@ -1047,7 +1054,7 @@ class WikiRevision {
        protected $size;
 
        /** @var Content */
-       protected $content = null;
+       public $content = null;
 
        /** @var ContentHandler */
        protected $contentHandler = null;
@@ -1056,31 +1063,31 @@ class WikiRevision {
        public $comment = "";
 
        /** @var bool */
-       protected $minor = false;
+       public $minor = false;
 
        /** @var string */
-       protected $type = "";
+       public $type = "";
 
        /** @var string */
-       protected $action = "";
+       public $action = "";
 
        /** @var string */
-       protected $params = "";
+       public $params = "";
 
        /** @var string */
-       protected $fileSrc = '';
+       public $fileSrc = '';
 
        /** @var bool|string */
-       protected $sha1base36 = false;
+       public $sha1base36 = false;
 
        /**
         * @var bool
         * @todo Unused?
         */
-       private $isTemp = false;
+       public $isTemp = false;
 
        /** @var string */
-       protected $archiveName = '';
+       public $archiveName = '';
 
        protected $filename;
 
@@ -1088,11 +1095,18 @@ class WikiRevision {
        protected $src;
 
        /** @todo Unused? */
-       private $fileIsTemp;
+       public $fileIsTemp;
 
        /** @var bool */
        private $mNoUpdates = false;
 
+       /** @var Config $config */
+       private $config;
+
+       public function __construct( Config $config ) {
+               $this->config = $config;
+       }
+
        /**
         * @param Title $title
         * @throws MWException
@@ -1608,8 +1622,7 @@ class WikiRevision {
         * @return bool|string
         */
        function downloadSource() {
-               global $wgEnableUploads;
-               if ( !$wgEnableUploads ) {
+               if ( !$this->config->get( 'EnableUploads' ) ) {
                        return false;
                }
 
index 05bace5..40ebaea 100644 (file)
@@ -192,11 +192,11 @@ class Linker {
        public static function link(
                $target, $html = null, $customAttribs = array(), $query = array(), $options = array()
        ) {
-               wfProfileIn( __METHOD__ );
                if ( !$target instanceof Title ) {
-                       wfProfileOut( __METHOD__ );
+                       wfWarn( __METHOD__ . ': Requires $target to be a Title object.', 2 );
                        return "<!-- ERROR -->$html";
                }
+               wfProfileIn( __METHOD__ );
 
                if ( is_string( $query ) ) {
                        // some functions withing core using this still hand over query strings
@@ -219,7 +219,7 @@ class Linker {
 
                # If we don't know whether the page exists, let's find out.
                wfProfileIn( __METHOD__ . '-checkPageExistence' );
-               if ( !in_array( 'known', $options ) and !in_array( 'broken', $options ) ) {
+               if ( !in_array( 'known', $options ) && !in_array( 'broken', $options ) ) {
                        if ( $target->isKnown() ) {
                                $options[] = 'known';
                        } else {
@@ -364,7 +364,7 @@ class Linker {
                foreach ( $merged as $key => $val ) {
                        # A false value suppresses the attribute, and we don't want the
                        # href attribute to be overridden.
-                       if ( $key != 'href' and $val !== false ) {
+                       if ( $key != 'href' && $val !== false ) {
                                $ret[$key] = $val;
                        }
                }
@@ -380,11 +380,10 @@ class Linker {
         * @return string
         */
        private static function linkText( $target ) {
-               // We might be passed a non-Title by make*LinkObj().  Fail gracefully.
                if ( !$target instanceof Title ) {
+                       wfWarn( __METHOD__ . ': Requires $target to be a Title object.' );
                        return '';
                }
-
                // If the target is just a fragment, with no title, we return the fragment
                // text.  Otherwise, we return the title text itself.
                if ( $target->getPrefixedText() === '' && $target->hasFragment() ) {
@@ -544,7 +543,7 @@ class Linker {
         * @since 1.20
         * @return string HTML for an image, with links, wrappers, etc.
         */
-       public static function makeImageLink( /*Parser*/ $parser, Title $title,
+       public static function makeImageLink( Parser $parser, Title $title,
                $file, $frameParams = array(), $handlerParams = array(), $time = false,
                $query = "", $widthOption = null
        ) {
@@ -637,13 +636,7 @@ class Linker {
                        # If a thumbnail width has not been provided, it is set
                        # to the default user option as specified in Language*.php
                        if ( $fp['align'] == '' ) {
-                               if ( $parser instanceof Parser ) {
-                                       $fp['align'] = $parser->getTargetLanguage()->alignEnd();
-                               } else {
-                                       # backwards compatibility, remove with makeImageLink2()
-                                       global $wgContLang;
-                                       $fp['align'] = $wgContLang->alignEnd();
-                               }
+                               $fp['align'] = $parser->getTargetLanguage()->alignEnd();
                        }
                        return $prefix . self::makeThumbLink2( $title, $file, $fp, $hp, $time, $query ) . $postfix;
                }
@@ -897,7 +890,7 @@ class Linker {
         */
        public static function processResponsiveImages( $file, $thumb, $hp ) {
                global $wgResponsiveImages;
-               if ( $wgResponsiveImages ) {
+               if ( $wgResponsiveImages && $thumb && !$thumb->isError() ) {
                        $hp15 = $hp;
                        $hp15['width'] = round( $hp['width'] * 1.5 );
                        $hp20 = $hp;
@@ -909,10 +902,10 @@ class Linker {
 
                        $thumb15 = $file->transform( $hp15 );
                        $thumb20 = $file->transform( $hp20 );
-                       if ( $thumb15 && $thumb15->getUrl() !== $thumb->getUrl() ) {
+                       if ( $thumb15 && !$thumb15->isError() && $thumb15->getUrl() !== $thumb->getUrl() ) {
                                $thumb->responsiveUrls['1.5'] = $thumb15->getUrl();
                        }
-                       if ( $thumb20 && $thumb20->getUrl() !== $thumb->getUrl() ) {
+                       if ( $thumb20 && !$thumb20->isError() && $thumb20->getUrl() !== $thumb->getUrl() ) {
                                $thumb->responsiveUrls['2'] = $thumb20->getUrl();
                        }
                }
@@ -932,10 +925,12 @@ class Linker {
        public static function makeBrokenImageLinkObj( $title, $label = '',
                $query = '', $unused1 = '', $unused2 = '', $time = false
        ) {
-               global $wgEnableUploads, $wgUploadMissingFileUrl, $wgUploadNavigationUrl;
                if ( !$title instanceof Title ) {
+                       wfWarn( __METHOD__ . ': Requires $title to be a Title object.' );
                        return "<!-- ERROR -->" . htmlspecialchars( $label );
                }
+
+               global $wgEnableUploads, $wgUploadMissingFileUrl, $wgUploadNavigationUrl;
                wfProfileIn( __METHOD__ );
                if ( $label == '' ) {
                        $label = $title->getPrefixedText();
@@ -2151,7 +2146,7 @@ class Linker {
                return $tooltip;
        }
 
-       private static $accesskeycache;
+       public static $accesskeycache;
 
        /**
         * Given the id of an interface element, constructs the appropriate
index 4d17298..d281555 100644 (file)
@@ -172,7 +172,6 @@ class MagicWord {
                'directionmark',
                'contentlanguage',
                'numberofadmins',
-               'numberofviews',
                'cascadingsources',
        );
 
@@ -215,7 +214,6 @@ class MagicWord {
                'localtimestamp' => 3600,
                'pagesinnamespace' => 3600,
                'numberofadmins' => 3600,
-               'numberofviews' => 3600,
                'numberingroup' => 3600,
        );
 
index da4af2f..9585c5f 100644 (file)
@@ -27,7 +27,6 @@
  */
 class MediaWiki {
        /**
-        * @todo Fold $output, etc, into this
         * @var IContextSource
         */
        private $context;
@@ -37,30 +36,6 @@ class MediaWiki {
         */
        private $config;
 
-       /**
-        * @param null|WebRequest $x
-        * @return WebRequest
-        */
-       public function request( WebRequest $x = null ) {
-               $old = $this->context->getRequest();
-               if ( $x ) {
-                       $this->context->setRequest( $x );
-               }
-               return $old;
-       }
-
-       /**
-        * @param null|OutputPage $x
-        * @return OutputPage
-        */
-       public function output( OutputPage $x = null ) {
-               $old = $this->context->getOutput();
-               if ( $x ) {
-                       $this->context->setOutput( $x );
-               }
-               return $old;
-       }
-
        /**
         * @param IContextSource|null $context
         */
@@ -146,7 +121,7 @@ class MediaWiki {
         * @return Title
         */
        public function getTitle() {
-               if ( $this->context->getTitle() === null ) {
+               if ( !$this->context->hasTitle() ) {
                        $this->context->setTitle( $this->parseTitle() );
                }
                return $this->context->getTitle();
@@ -585,7 +560,7 @@ class MediaWiki {
                        wfProfileIn( 'main-try-filecache' );
                        if ( HTMLFileCache::useFileCache( $this->context ) ) {
                                // Try low-level file cache hit
-                               $cache = HTMLFileCache::newFromTitle( $title, $action );
+                               $cache = new HTMLFileCache( $title, $action );
                                if ( $cache->isCacheGood( /* Assume up to date */ ) ) {
                                        // Check incoming headers to see if client has this cached
                                        $timestamp = $cache->cacheTimestamp();
@@ -682,7 +657,8 @@ class MediaWiki {
 
                $query = array( 'title' => 'Special:RunJobs',
                        'tasks' => 'jobs', 'maxjobs' => $n, 'sigexpiry' => time() + 5 );
-               $query['signature'] = SpecialRunJobs::getQuerySignature( $query );
+               $query['signature'] = SpecialRunJobs::getQuerySignature(
+                       $query, $this->config->get( 'SecretKey' ) );
 
                $errno = $errstr = null;
                $info = wfParseUrl( $this->config->get( 'Server' ) );
@@ -706,7 +682,7 @@ class MediaWiki {
                }
 
                $url = wfAppendQuery( wfScript( 'index' ), $query );
-               $req = "POST $url HTTP/1.1\r\nHost: {$info['host']}\r\nConnection: Close\r\n\r\n";
+               $req = "POST $url HTTP/1.1\r\nHost: {$info['host']}\r\nConnection: Close\r\nContent-Length: 0\r\n\r\n";
 
                wfDebugLog( 'runJobs', "Running $n job(s) via '$url'\n" );
                // Send a cron API request to be performed in the background.
index 17cb8aa..c3fb486 100644 (file)
@@ -19,7 +19,7 @@ class MediaWikiVersionFetcher {
                $defaultSettings = file_get_contents( __DIR__ . '/DefaultSettings.php' );
 
                $matches = array();
-               preg_match( "/wgVersion = '([0-9a-zA-Z\.]+)';/", $defaultSettings, $matches );
+               preg_match( "/wgVersion = '([0-9a-zA-Z\.\-]+)';/", $defaultSettings, $matches );
 
                if ( count( $matches ) !== 2 ) {
                        throw new RuntimeException( 'Could not extract the MediaWiki version from DefaultSettings.php' );
index 4df0d80..93a37cb 100644 (file)
@@ -540,6 +540,30 @@ class Message {
                return $this;
        }
 
+       /**
+        * Add parameters that are plaintext and will be passed through without
+        * the content being evaluated.  Plaintext parameters are not valid as
+        * arguments to parser functions. This differs from self::rawParams in
+        * that the Message class handles escaping to match the output format.
+        *
+        * @since 1.25
+        *
+        * @param string|string[] $param,... plaintext parameters, or a single argument that is
+        * an array of plaintext parameters.
+        *
+        * @return Message $this
+        */
+       public function plaintextParams( /*...*/ ) {
+               $params = func_get_args();
+               if ( isset( $params[0] ) && is_array( $params[0] ) ) {
+                       $params = $params[0];
+               }
+               foreach ( $params as $param ) {
+                       $this->parameters[] = self::plaintextParam( $param );
+               }
+               return $this;
+       }
+
        /**
         * Set the language and the title from a context object
         *
@@ -674,11 +698,10 @@ class Message {
                $string = $this->fetchMessage();
 
                if ( $string === false ) {
-                       $key = htmlspecialchars( $this->key );
-                       if ( $this->format === 'plain' ) {
-                               return '<' . $key . '>';
+                       if ( $this->format === 'plain' || $this->format === 'text' ) {
+                               return '<' . $this->key . '>';
                        }
-                       return '&lt;' . $key . '&gt;';
+                       return '&lt;' . htmlspecialchars( $this->key ) . '&gt;';
                }
 
                # Replace $* with a list of parameters for &uselang=qqx.
@@ -735,10 +758,10 @@ class Message {
                                // Doh! Cause a fatal error after all?
                        }
 
-                       if ( $this->format === 'plain' ) {
+                       if ( $this->format === 'plain' || $this->format === 'text' ) {
                                return '<' . $this->key . '>';
                        }
-                       return '&lt;' . $this->key . '&gt;';
+                       return '&lt;' . htmlspecialchars( $this->key ) . '&gt;';
                }
        }
 
@@ -916,6 +939,17 @@ class Message {
                return array( 'bitrate' => $bitrate );
        }
 
+       /**
+        * @since 1.25
+        *
+        * @param string $plaintext
+        *
+        * @return string[] Array with a single "plaintext" key.
+        */
+       public static function plaintextParam( $plaintext ) {
+               return array( 'plaintext' => $plaintext );
+       }
+
        /**
         * Substitutes any parameters into the message text.
         *
@@ -965,6 +999,8 @@ class Message {
                                return array( 'before', $this->language->formatSize( $param['size'] ) );
                        } elseif ( isset( $param['bitrate'] ) ) {
                                return array( 'before', $this->language->formatBitrate( $param['bitrate'] ) );
+                       } elseif ( isset( $param['plaintext'] ) ) {
+                               return array( 'after', $this->formatPlaintext( $param['plaintext'] ) );
                        } else {
                                $warning = 'Invalid parameter for message "' . $this->getKey() . '": ' .
                                        htmlspecialchars( serialize( $param ) );
@@ -1050,6 +1086,31 @@ class Message {
                return $this->message;
        }
 
+       /**
+        * Formats a message parameter wrapped with 'plaintext'. Ensures that
+        * the entire string is displayed unchanged when displayed in the output
+        * format.
+        *
+        * @since 1.25
+        *
+        * @param string $plaintext String to ensure plaintext output of
+        *
+        * @return string Input plaintext encoded for output to $this->format
+        */
+       protected function formatPlaintext( $plaintext ) {
+               switch ( $this->format ) {
+               case 'text':
+               case 'plain':
+                       return $plaintext;
+
+               case 'parse':
+               case 'block-parse':
+               case 'escaped':
+               default:
+                       return htmlspecialchars( $plaintext, ENT_QUOTES );
+
+               }
+       }
 }
 
 /**
index 8f0a2af..3406831 100644 (file)
@@ -172,6 +172,9 @@ class MimeMagic {
         */
        private $mExtraInfo = '';
 
+       /** @var Config */
+       private $mConfig;
+
        /** @var MimeMagic The singleton instance
         */
        private static $instance = null;
@@ -179,30 +182,40 @@ class MimeMagic {
        /** Initializes the MimeMagic object. This is called by MimeMagic::singleton().
         *
         * This constructor parses the mime.types and mime.info files and build internal mappings.
+        *
+        * @todo Make this constructor private once everything uses the singleton instance
+        * @param Config $config
         */
-       function __construct() {
+       function __construct( Config $config = null ) {
+               if ( !$config ) {
+                       wfDebug( __METHOD__ . ' called with no Config instance passed to it' );
+                       $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+               }
+               $this->mConfig = $config;
+
                /**
                 *   --- load mime.types ---
                 */
 
-               global $wgMimeTypeFile, $IP;
+               global $IP;
 
                # Allow media handling extensions adding MIME-types and MIME-info
                wfRunHooks( 'MimeMagicInit', array( $this ) );
 
                $types = MM_WELL_KNOWN_MIME_TYPES;
 
-               if ( $wgMimeTypeFile == 'includes/mime.types' ) {
-                       $wgMimeTypeFile = "$IP/$wgMimeTypeFile";
+               $mimeTypeFile = $this->mConfig->get( 'MimeTypeFile' );
+               if ( $mimeTypeFile == 'includes/mime.types' ) {
+                       $mimeTypeFile = "$IP/$mimeTypeFile";
                }
 
-               if ( $wgMimeTypeFile ) {
-                       if ( is_file( $wgMimeTypeFile ) and is_readable( $wgMimeTypeFile ) ) {
-                               wfDebug( __METHOD__ . ": loading mime types from $wgMimeTypeFile\n" );
+               if ( $mimeTypeFile ) {
+                       if ( is_file( $mimeTypeFile ) && is_readable( $mimeTypeFile ) ) {
+                               wfDebug( __METHOD__ . ": loading mime types from $mimeTypeFile\n" );
                                $types .= "\n";
-                               $types .= file_get_contents( $wgMimeTypeFile );
+                               $types .= file_get_contents( $mimeTypeFile );
                        } else {
-                               wfDebug( __METHOD__ . ": can't load mime types from $wgMimeTypeFile\n" );
+                               wfDebug( __METHOD__ . ": can't load mime types from $mimeTypeFile\n" );
                        }
                } else {
                        wfDebug( __METHOD__ . ": no mime types file defined, using build-ins only.\n" );
@@ -266,20 +279,20 @@ class MimeMagic {
                 *   --- load mime.info ---
                 */
 
-               global $wgMimeInfoFile;
-               if ( $wgMimeInfoFile == 'includes/mime.info' ) {
-                       $wgMimeInfoFile = "$IP/$wgMimeInfoFile";
+               $mimeInfoFile = $this->mConfig->get( 'MimeInfoFile' );
+               if ( $mimeInfoFile == 'includes/mime.info' ) {
+                       $mimeInfoFile = "$IP/$mimeInfoFile";
                }
 
                $info = MM_WELL_KNOWN_MIME_INFO;
 
-               if ( $wgMimeInfoFile ) {
-                       if ( is_file( $wgMimeInfoFile ) and is_readable( $wgMimeInfoFile ) ) {
-                               wfDebug( __METHOD__ . ": loading mime info from $wgMimeInfoFile\n" );
+               if ( $mimeInfoFile ) {
+                       if ( is_file( $mimeInfoFile ) && is_readable( $mimeInfoFile ) ) {
+                               wfDebug( __METHOD__ . ": loading mime info from $mimeInfoFile\n" );
                                $info .= "\n";
-                               $info .= file_get_contents( $wgMimeInfoFile );
+                               $info .= file_get_contents( $mimeInfoFile );
                        } else {
-                               wfDebug( __METHOD__ . ": can't load mime info from $wgMimeInfoFile\n" );
+                               wfDebug( __METHOD__ . ": can't load mime info from $mimeInfoFile\n" );
                        }
                } else {
                        wfDebug( __METHOD__ . ": no mime info file defined, using build-ins only.\n" );
@@ -352,7 +365,9 @@ class MimeMagic {
         */
        public static function singleton() {
                if ( self::$instance === null ) {
-                       self::$instance = new MimeMagic;
+                       self::$instance = new MimeMagic(
+                               ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
+                       );
                }
                return self::$instance;
        }
@@ -711,9 +726,9 @@ class MimeMagic {
                 */
                $xml = new XmlTypeCheck( $file );
                if ( $xml->wellFormed ) {
-                       global $wgXMLMimeTypes;
-                       if ( isset( $wgXMLMimeTypes[$xml->getRootElement()] ) ) {
-                               return $wgXMLMimeTypes[$xml->getRootElement()];
+                       $xmlMimeTypes = $this->mConfig->get( 'XMLMimeTypes' );
+                       if ( isset( $xmlMimeTypes[$xml->getRootElement()] ) ) {
+                               return $xmlMimeTypes[$xml->getRootElement()];
                        } else {
                                return 'application/xml';
                        }
@@ -898,9 +913,9 @@ class MimeMagic {
        /**
         * Internal MIME type detection. Detection is done using an external
         * program, if $wgMimeDetectorCommand is set. Otherwise, the fileinfo
-        * extension and mime_content_type are tried (in this order), if they
-        * are available. If the detections fails and $ext is not false, the MIME
-        * type is guessed from the file extension, using guessTypesForExtension.
+        * extension is tried if it is available. If detection fails and $ext
+        * is not false, the MIME type is guessed from the file extension,
+        * using guessTypesForExtension.
         *
         * If the MIME type is still unknown, getimagesize is used to detect the
         * MIME type if the file is an image. If no MIME type can be determined,
@@ -914,31 +929,19 @@ class MimeMagic {
         * @return string The MIME type of $file
         */
        private function detectMimeType( $file, $ext = true ) {
-               global $wgMimeDetectorCommand;
-
                /** @todo Make $ext default to false. Or better, remove it. */
                if ( $ext ) {
                        wfDebug( __METHOD__ . ": WARNING: use of the \$ext parameter is deprecated. "
                                . "Use improveTypeFromExtension(\$mime, \$ext) instead.\n" );
                }
 
+               $mimeDetectorCommand = $this->mConfig->get( 'MimeDetectorCommand' );
                $m = null;
-               if ( $wgMimeDetectorCommand ) {
+               if ( $mimeDetectorCommand ) {
                        $args = wfEscapeShellArg( $file );
-                       $m = wfShellExec( "$wgMimeDetectorCommand $args" );
+                       $m = wfShellExec( "$mimeDetectorCommand $args" );
                } elseif ( function_exists( "finfo_open" ) && function_exists( "finfo_file" ) ) {
-
-                       # This required the fileinfo extension by PECL,
-                       # see http://pecl.php.net/package/fileinfo
-                       # This must be compiled into PHP
-                       #
-                       # finfo is the official replacement for the deprecated
-                       # mime_content_type function, see below.
-                       #
-                       # If you may need to load the fileinfo extension at runtime, set
-                       # $wgLoadFileinfoExtension in LocalSettings.php
-
-                       $mime_magic_resource = finfo_open( FILEINFO_MIME ); /* return MIME type ala mimetype extension */
+                       $mime_magic_resource = finfo_open( FILEINFO_MIME );
 
                        if ( $mime_magic_resource ) {
                                $m = finfo_file( $mime_magic_resource, $file );
@@ -946,21 +949,6 @@ class MimeMagic {
                        } else {
                                wfDebug( __METHOD__ . ": finfo_open failed on " . FILEINFO_MIME . "!\n" );
                        }
-               } elseif ( function_exists( "mime_content_type" ) ) {
-
-                       # NOTE: this function is available since PHP 4.3.0, but only if
-                       # PHP was compiled with --with-mime-magic or, before 4.3.2, with
-                       # --enable-mime-magic.
-                       #
-                       # On Windows, you must set mime_magic.magicfile in php.ini to point
-                       # to the mime.magic file bundled with PHP; sometimes, this may even
-                       # be needed under *nix.
-                       #
-                       # Also note that this has been DEPRECATED in favor of the fileinfo
-                       # extension by PECL, see above.
-                       # See http://www.php.net/manual/en/ref.mime-magic.php for details.
-
-                       $m = mime_content_type( $file );
                } else {
                        wfDebug( __METHOD__ . ": no magic mime detector found!\n" );
                }
diff --git a/includes/MovePage.php b/includes/MovePage.php
new file mode 100644 (file)
index 0000000..994be91
--- /dev/null
@@ -0,0 +1,527 @@
+<?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
+ */
+
+/**
+ * Handles the backend logic of moving a page from one title
+ * to another.
+ *
+ * @since 1.24
+ */
+class MovePage {
+
+       /**
+        * @var Title
+        */
+       protected $oldTitle;
+
+       /**
+        * @var Title
+        */
+       protected $newTitle;
+
+       public function __construct( Title $oldTitle, Title $newTitle ) {
+               $this->oldTitle = $oldTitle;
+               $this->newTitle = $newTitle;
+       }
+
+       public function checkPermissions( User $user, $reason ) {
+               $status = new Status();
+
+               $errors = wfMergeErrorArrays(
+                       $this->oldTitle->getUserPermissionsErrors( 'move', $user ),
+                       $this->oldTitle->getUserPermissionsErrors( 'edit', $user ),
+                       $this->newTitle->getUserPermissionsErrors( 'move-target', $user ),
+                       $this->newTitle->getUserPermissionsErrors( 'edit', $user )
+               );
+
+               // Convert into a Status object
+               if ( $errors ) {
+                       foreach ( $errors as $error ) {
+                               call_user_func_array( array( $status, 'fatal' ), $error );
+                       }
+               }
+
+               if ( EditPage::matchSummarySpamRegex( $reason ) !== false ) {
+                       // This is kind of lame, won't display nice
+                       $status->fatal( 'spamprotectiontext' );
+               }
+
+               # The move is allowed only if (1) the target doesn't exist, or
+               # (2) the target is a redirect to the source, and has no history
+               # (so we can undo bad moves right after they're done).
+
+               if ( $this->newTitle->getArticleID() ) { # Target exists; check for validity
+                       if ( !$this->isValidMoveTarget() ) {
+                               $status->fatal( 'articleexists' );
+                       }
+               } else {
+                       $tp = $this->newTitle->getTitleProtection();
+                       if ( $tp !== false ) {
+                               if ( !$user->isAllowed( $tp['permission'] ) ) {
+                                       $status->fatal( 'cantmove-titleprotected' );
+                               }
+                       }
+               }
+
+               wfRunHooks( 'MovePageCheckPermissions',
+                       array( $this->oldTitle, $this->newTitle, $user, $reason, $status )
+               );
+
+               return $status;
+       }
+
+       /**
+        * Does various sanity checks that the move is
+        * valid. Only things based on the two titles
+        * should be checked here.
+        *
+        * @return Status
+        */
+       public function isValidMove() {
+               global $wgContentHandlerUseDB;
+               $status = new Status();
+
+               if ( $this->oldTitle->equals( $this->newTitle ) ) {
+                       $status->fatal( 'selfmove' );
+               }
+               if ( !$this->oldTitle->isMovable() ) {
+                       $status->fatal( 'immobile-source-namespace', $this->oldTitle->getNsText() );
+               }
+               if ( $this->newTitle->isExternal() ) {
+                       $status->fatal( 'immobile-target-namespace-iw' );
+               }
+               if ( !$this->newTitle->isMovable() ) {
+                       $status->fatal( 'immobile-target-namespace', $this->newTitle->getNsText() );
+               }
+
+               $oldid = $this->oldTitle->getArticleID();
+
+               if ( strlen( $this->newTitle->getDBkey() ) < 1 ) {
+                       $status->fatal( 'articleexists' );
+               }
+               if (
+                       ( $this->oldTitle->getDBkey() == '' ) ||
+                       ( !$oldid ) ||
+                       ( $this->newTitle->getDBkey() == '' )
+               ) {
+                       $status->fatal( 'badarticleerror' );
+               }
+
+               // Content model checks
+               if ( !$wgContentHandlerUseDB &&
+                       $this->oldTitle->getContentModel() !== $this->newTitle->getContentModel() ) {
+                       // can't move a page if that would change the page's content model
+                       $status->fatal(
+                               'bad-target-model',
+                               ContentHandler::getLocalizedName( $this->oldTitle->getContentModel() ),
+                               ContentHandler::getLocalizedName( $this->newTitle->getContentModel() )
+                       );
+               }
+
+               // Image-specific checks
+               if ( $this->oldTitle->inNamespace( NS_FILE ) ) {
+                       $status->merge( $this->isValidFileMove() );
+               }
+
+               if ( $this->newTitle->inNamespace( NS_FILE ) && !$this->oldTitle->inNamespace( NS_FILE ) ) {
+                       $status->fatal( 'nonfile-cannot-move-to-file' );
+               }
+
+               // Hook for extensions to say a title can't be moved for technical reasons
+               wfRunHooks( 'MovePageIsValidMove', array( $this->oldTitle, $this->newTitle, $status ) );
+
+               return $status;
+       }
+
+       /**
+        * Sanity checks for when a file is being moved
+        *
+        * @return Status
+        */
+       protected function isValidFileMove() {
+               $status = new Status();
+               $file = wfLocalFile( $this->oldTitle );
+               if ( $file->exists() ) {
+                       if ( $this->newTitle->getText() != wfStripIllegalFilenameChars( $this->newTitle->getText() ) ) {
+                               $status->fatal( 'imageinvalidfilename' );
+                       }
+                       if ( !File::checkExtensionCompatibility( $file, $this->newTitle->getDBkey() ) ) {
+                               $status->fatal( 'imagetypemismatch' );
+                       }
+               }
+
+               if ( !$this->newTitle->inNamespace( NS_FILE ) ) {
+                       $status->fatal( 'imagenocrossnamespace' );
+               }
+
+               return $status;
+       }
+
+       /**
+        * Checks if $this can be moved to a given Title
+        * - Selects for update, so don't call it unless you mean business
+        *
+        * @since 1.25
+        * @return bool
+        */
+       protected function isValidMoveTarget() {
+               # Is it an existing file?
+               if ( $this->newTitle->inNamespace( NS_FILE ) ) {
+                       $file = wfLocalFile( $this->newTitle );
+                       if ( $file->exists() ) {
+                               wfDebug( __METHOD__ . ": file exists\n" );
+                               return false;
+                       }
+               }
+               # Is it a redirect with no history?
+               if ( !$this->newTitle->isSingleRevRedirect() ) {
+                       wfDebug( __METHOD__ . ": not a one-rev redirect\n" );
+                       return false;
+               }
+               # Get the article text
+               $rev = Revision::newFromTitle( $this->newTitle, false, Revision::READ_LATEST );
+               if ( !is_object( $rev ) ) {
+                       return false;
+               }
+               $content = $rev->getContent();
+               # Does the redirect point to the source?
+               # Or is it a broken self-redirect, usually caused by namespace collisions?
+               $redirTitle = $content ? $content->getRedirectTarget() : null;
+
+               if ( $redirTitle ) {
+                       if ( $redirTitle->getPrefixedDBkey() !== $this->oldTitle->getPrefixedDBkey() &&
+                               $redirTitle->getPrefixedDBkey() !== $this->newTitle->getPrefixedDBkey() ) {
+                               wfDebug( __METHOD__ . ": redirect points to other page\n" );
+                               return false;
+                       } else {
+                               return true;
+                       }
+               } else {
+                       # Fail safe (not a redirect after all. strange.)
+                       wfDebug( __METHOD__ . ": failsafe: database says " . $this->newTitle->getPrefixedDBkey() .
+                               " is a redirect, but it doesn't contain a valid redirect.\n" );
+                       return false;
+               }
+       }
+
+       /**
+        * @param User $user
+        * @param string $reason
+        * @param bool $createRedirect
+        * @return Status
+        */
+       public function move( User $user, $reason, $createRedirect ) {
+               global $wgCategoryCollation;
+
+               wfRunHooks( 'TitleMove', array( $this->oldTitle, $this->newTitle, $user ) );
+
+               // If it is a file, move it first.
+               // It is done before all other moving stuff is done because it's hard to revert.
+               $dbw = wfGetDB( DB_MASTER );
+               if ( $this->oldTitle->getNamespace() == NS_FILE ) {
+                       $file = wfLocalFile( $this->oldTitle );
+                       if ( $file->exists() ) {
+                               $status = $file->move( $this->newTitle );
+                               if ( !$status->isOk() ) {
+                                       return $status;
+                               }
+                       }
+                       // Clear RepoGroup process cache
+                       RepoGroup::singleton()->clearCache( $this->oldTitle );
+                       RepoGroup::singleton()->clearCache( $this->newTitle ); # clear false negative cache
+               }
+
+               $dbw->begin( __METHOD__ ); # If $file was a LocalFile, its transaction would have closed our own.
+               $pageid = $this->oldTitle->getArticleID( Title::GAID_FOR_UPDATE );
+               $protected = $this->oldTitle->isProtected();
+
+               // Do the actual move
+               $this->moveToInternal( $user, $this->newTitle, $reason, $createRedirect );
+
+               // Refresh the sortkey for this row.  Be careful to avoid resetting
+               // cl_timestamp, which may disturb time-based lists on some sites.
+               // @todo This block should be killed, it's duplicating code
+               // from LinksUpdate::getCategoryInsertions() and friends.
+               $prefixes = $dbw->select(
+                       'categorylinks',
+                       array( 'cl_sortkey_prefix', 'cl_to' ),
+                       array( 'cl_from' => $pageid ),
+                       __METHOD__
+               );
+               if ( $this->newTitle->getNamespace() == NS_CATEGORY ) {
+                       $type = 'subcat';
+               } elseif ( $this->newTitle->getNamespace() == NS_FILE ) {
+                       $type = 'file';
+               } else {
+                       $type = 'page';
+               }
+               foreach ( $prefixes as $prefixRow ) {
+                       $prefix = $prefixRow->cl_sortkey_prefix;
+                       $catTo = $prefixRow->cl_to;
+                       $dbw->update( 'categorylinks',
+                               array(
+                                       'cl_sortkey' => Collation::singleton()->getSortKey(
+                                                       $this->newTitle->getCategorySortkey( $prefix ) ),
+                                       'cl_collation' => $wgCategoryCollation,
+                                       'cl_type' => $type,
+                                       'cl_timestamp=cl_timestamp' ),
+                               array(
+                                       'cl_from' => $pageid,
+                                       'cl_to' => $catTo ),
+                               __METHOD__
+                       );
+               }
+
+               $redirid = $this->oldTitle->getArticleID();
+
+               if ( $protected ) {
+                       # Protect the redirect title as the title used to be...
+                       $dbw->insertSelect( 'page_restrictions', 'page_restrictions',
+                               array(
+                                       'pr_page' => $redirid,
+                                       'pr_type' => 'pr_type',
+                                       'pr_level' => 'pr_level',
+                                       'pr_cascade' => 'pr_cascade',
+                                       'pr_user' => 'pr_user',
+                                       'pr_expiry' => 'pr_expiry'
+                               ),
+                               array( 'pr_page' => $pageid ),
+                               __METHOD__,
+                               array( 'IGNORE' )
+                       );
+                       # Update the protection log
+                       $log = new LogPage( 'protect' );
+                       $comment = wfMessage(
+                               'prot_1movedto2',
+                               $this->oldTitle->getPrefixedText(),
+                               $this->newTitle->getPrefixedText()
+                       )->inContentLanguage()->text();
+                       if ( $reason ) {
+                               $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
+                       }
+                       // @todo FIXME: $params?
+                       $logId = $log->addEntry(
+                               'move_prot',
+                               $this->newTitle,
+                               $comment,
+                               array( $this->oldTitle->getPrefixedText() ),
+                               $user
+                       );
+
+                       // reread inserted pr_ids for log relation
+                       $insertedPrIds = $dbw->select(
+                               'page_restrictions',
+                               'pr_id',
+                               array( 'pr_page' => $redirid ),
+                               __METHOD__
+                       );
+                       $logRelationsValues = array();
+                       foreach ( $insertedPrIds as $prid ) {
+                               $logRelationsValues[] = $prid->pr_id;
+                       }
+                       $log->addRelations( 'pr_id', $logRelationsValues, $logId );
+               }
+
+               // Update *_from_namespace fields as needed
+               if ( $this->oldTitle->getNamespace() != $this->newTitle->getNamespace() ) {
+                       $dbw->update( 'pagelinks',
+                               array( 'pl_from_namespace' => $this->newTitle->getNamespace() ),
+                               array( 'pl_from' => $pageid ),
+                               __METHOD__
+                       );
+                       $dbw->update( 'templatelinks',
+                               array( 'tl_from_namespace' => $this->newTitle->getNamespace() ),
+                               array( 'tl_from' => $pageid ),
+                               __METHOD__
+                       );
+                       $dbw->update( 'imagelinks',
+                               array( 'il_from_namespace' => $this->newTitle->getNamespace() ),
+                               array( 'il_from' => $pageid ),
+                               __METHOD__
+                       );
+               }
+
+               # Update watchlists
+               $oldtitle = $this->oldTitle->getDBkey();
+               $newtitle = $this->newTitle->getDBkey();
+               $oldsnamespace = MWNamespace::getSubject( $this->oldTitle->getNamespace() );
+               $newsnamespace = MWNamespace::getSubject( $this->newTitle->getNamespace() );
+               if ( $oldsnamespace != $newsnamespace || $oldtitle != $newtitle ) {
+                       WatchedItem::duplicateEntries( $this->oldTitle, $this->newTitle );
+               }
+
+               $dbw->commit( __METHOD__ );
+
+               wfRunHooks( 'TitleMoveComplete', array( &$this->oldTitle, &$this->newTitle, &$user, $pageid, $redirid, $reason ) );
+               return Status::newGood();
+       }
+
+       /**
+        * Move page to a title which is either a redirect to the
+        * source page or nonexistent
+        *
+        * @fixme This was basically directly moved from Title, it should be split into smaller functions
+        * @param User $user the User doing the move
+        * @param Title $nt The page to move to, which should be a redirect or nonexistent
+        * @param string $reason The reason for the move
+        * @param bool $createRedirect Whether to leave a redirect at the old title. Does not check
+        *   if the user has the suppressredirect right
+        * @throws MWException
+        */
+       private function moveToInternal( User $user, &$nt, $reason = '', $createRedirect = true ) {
+               global $wgContLang;
+
+               if ( $nt->exists() ) {
+                       $moveOverRedirect = true;
+                       $logType = 'move_redir';
+               } else {
+                       $moveOverRedirect = false;
+                       $logType = 'move';
+               }
+
+               if ( $createRedirect ) {
+                       if ( $this->oldTitle->getNamespace() == NS_CATEGORY
+                               && !wfMessage( 'category-move-redirect-override' )->inContentLanguage()->isDisabled()
+                       ) {
+                               $redirectContent = new WikitextContent(
+                                       wfMessage( 'category-move-redirect-override' )
+                                               ->params( $nt->getPrefixedText() )->inContentLanguage()->plain() );
+                       } else {
+                               $contentHandler = ContentHandler::getForTitle( $this->oldTitle );
+                               $redirectContent = $contentHandler->makeRedirectContent( $nt,
+                                       wfMessage( 'move-redirect-text' )->inContentLanguage()->plain() );
+                       }
+
+                       // NOTE: If this page's content model does not support redirects, $redirectContent will be null.
+               } else {
+                       $redirectContent = null;
+               }
+
+               // bug 57084: log_page should be the ID of the *moved* page
+               $oldid = $this->oldTitle->getArticleID();
+               $logTitle = clone $this->oldTitle;
+
+               $logEntry = new ManualLogEntry( 'move', $logType );
+               $logEntry->setPerformer( $user );
+               $logEntry->setTarget( $logTitle );
+               $logEntry->setComment( $reason );
+               $logEntry->setParameters( array(
+                       '4::target' => $nt->getPrefixedText(),
+                       '5::noredir' => $redirectContent ? '0': '1',
+               ) );
+
+               $formatter = LogFormatter::newFromEntry( $logEntry );
+               $formatter->setContext( RequestContext::newExtraneousContext( $this->oldTitle ) );
+               $comment = $formatter->getPlainActionText();
+               if ( $reason ) {
+                       $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
+               }
+               # Truncate for whole multibyte characters.
+               $comment = $wgContLang->truncate( $comment, 255 );
+
+               $dbw = wfGetDB( DB_MASTER );
+
+               $oldpage = WikiPage::factory( $this->oldTitle );
+               $oldcountable = $oldpage->isCountable();
+
+               $newpage = WikiPage::factory( $nt );
+
+               if ( $moveOverRedirect ) {
+                       $newid = $nt->getArticleID();
+                       $newcontent = $newpage->getContent();
+
+                       # Delete the old redirect. We don't save it to history since
+                       # by definition if we've got here it's rather uninteresting.
+                       # We have to remove it so that the next step doesn't trigger
+                       # a conflict on the unique namespace+title index...
+                       $dbw->delete( 'page', array( 'page_id' => $newid ), __METHOD__ );
+
+                       $newpage->doDeleteUpdates( $newid, $newcontent );
+               }
+
+               # Save a null revision in the page's history notifying of the move
+               $nullRevision = Revision::newNullRevision( $dbw, $oldid, $comment, true, $user );
+               if ( !is_object( $nullRevision ) ) {
+                       throw new MWException( 'No valid null revision produced in ' . __METHOD__ );
+               }
+
+               $nullRevision->insertOn( $dbw );
+
+               # Change the name of the target page:
+               $dbw->update( 'page',
+                       /* SET */ array(
+                               'page_namespace' => $nt->getNamespace(),
+                               'page_title' => $nt->getDBkey(),
+                       ),
+                       /* WHERE */ array( 'page_id' => $oldid ),
+                       __METHOD__
+               );
+
+               // clean up the old title before reset article id - bug 45348
+               if ( !$redirectContent ) {
+                       WikiPage::onArticleDelete( $this->oldTitle );
+               }
+
+               $this->oldTitle->resetArticleID( 0 ); // 0 == non existing
+               $nt->resetArticleID( $oldid );
+               $newpage->loadPageData( WikiPage::READ_LOCKING ); // bug 46397
+
+               $newpage->updateRevisionOn( $dbw, $nullRevision );
+
+               wfRunHooks( 'NewRevisionFromEditComplete',
+                       array( $newpage, $nullRevision, $nullRevision->getParentId(), $user ) );
+
+               $newpage->doEditUpdates( $nullRevision, $user,
+                       array( 'changed' => false, 'moved' => true, 'oldcountable' => $oldcountable ) );
+
+               if ( !$moveOverRedirect ) {
+                       WikiPage::onArticleCreate( $nt );
+               }
+
+               # Recreate the redirect, this time in the other direction.
+               if ( $redirectContent ) {
+                       $redirectArticle = WikiPage::factory( $this->oldTitle );
+                       $redirectArticle->loadFromRow( false, WikiPage::READ_LOCKING ); // bug 46397
+                       $newid = $redirectArticle->insertOn( $dbw );
+                       if ( $newid ) { // sanity
+                               $this->oldTitle->resetArticleID( $newid );
+                               $redirectRevision = new Revision( array(
+                                       'title' => $this->oldTitle, // for determining the default content model
+                                       'page' => $newid,
+                                       'user_text' => $user->getName(),
+                                       'user' => $user->getId(),
+                                       'comment' => $comment,
+                                       'content' => $redirectContent ) );
+                               $redirectRevision->insertOn( $dbw );
+                               $redirectArticle->updateRevisionOn( $dbw, $redirectRevision, 0 );
+
+                               wfRunHooks( 'NewRevisionFromEditComplete',
+                                       array( $redirectArticle, $redirectRevision, false, $user ) );
+
+                               $redirectArticle->doEditUpdates( $redirectRevision, $user, array( 'created' => true ) );
+                       }
+               }
+
+               # Log the move
+               $logid = $logEntry->insert();
+               $logEntry->publish( $logid );
+       }
+}
index 8d50e41..3bb2175 100644 (file)
@@ -122,6 +122,9 @@ class OutputPage extends ContextSource {
        /** @var array */
        protected $mCategories = array();
 
+       /** @var array */
+       protected $mIndicators = array();
+
        /** @var array Array of Interwiki Prefixed (non DB key) Titles (e.g. 'fr:Test page') */
        private $mLanguageLinks = array();
 
@@ -179,14 +182,12 @@ class OutputPage extends ContextSource {
 
        protected $mFeedLinksAppendQuery = null;
 
-       /** @var array
-        * What level of 'untrustworthiness' is allowed in CSS/JS modules loaded on this page?
+       /**
+        * @var int
+        * The level of 'untrustworthiness' allowed for modules loaded on this page.
         * @see ResourceLoaderModule::$origin
-        * ResourceLoaderModule::ORIGIN_ALL is assumed unless overridden;
         */
-       protected $mAllowedModules = array(
-               ResourceLoaderModule::TYPE_COMBINED => ResourceLoaderModule::ORIGIN_ALL,
-       );
+       protected $mAllowedModuleOrigin = ResourceLoaderModule::ORIGIN_ALL;
 
        /** @var bool Whether output is disabled.  If this is true, the 'output' method will do nothing. */
        protected $mDoNothing = false;
@@ -1332,48 +1333,91 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * 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.
+        * 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.
+        *
+        * @param array $indicators
+        * @since 1.25
+        */
+       public function setIndicators( array $indicators ) {
+               $this->mIndicators = $indicators + $this->mIndicators;
+               // Keep ordered by key
+               ksort( $this->mIndicators );
+       }
+
+       /**
+        * Get the indicators associated with this page.
+        *
+        * The array will be internally ordered by item keys.
+        *
+        * @return array Keys: identifiers, values: HTML contents
+        * @since 1.25
+        */
+       public function getIndicators() {
+               return $this->mIndicators;
+       }
+
+       /**
+        * Restrict the page to loading modules bundled the software.
+        *
+        * Disallows the queue to contain any modules which can be modified by wiki
+        * users to load on this page.
         */
        public function disallowUserJs() {
-               $this->reduceAllowedModules(
-                       ResourceLoaderModule::TYPE_SCRIPTS,
-                       ResourceLoaderModule::ORIGIN_CORE_INDIVIDUAL
-               );
+               $this->reduceAllowedModuleOrigin( ResourceLoaderModule::ORIGIN_CORE_INDIVIDUAL );
        }
 
        /**
-        * Show what level of JavaScript / CSS untrustworthiness is allowed on this page
+        * Get the level of JavaScript / CSS untrustworthiness allowed on this page.
+        *
         * @see ResourceLoaderModule::$origin
-        * @param string $type ResourceLoaderModule TYPE_ constant
+        * @param string $type Unused: Module origin allowance used to be fragmented by
+        *  ResourceLoaderModule TYPE_ constants.
         * @return int ResourceLoaderModule ORIGIN_ class constant
         */
-       public function getAllowedModules( $type ) {
-               if ( $type == ResourceLoaderModule::TYPE_COMBINED ) {
-                       return min( array_values( $this->mAllowedModules ) );
-               } else {
-                       return isset( $this->mAllowedModules[$type] )
-                               ? $this->mAllowedModules[$type]
-                               : ResourceLoaderModule::ORIGIN_ALL;
-               }
+       public function getAllowedModules( $type = null ) {
+               return $this->mAllowedModuleOrigin;
        }
 
        /**
         * Set the highest level of CSS/JS untrustworthiness allowed
+        *
+        * @deprecated since 1.24 Raising level of allowed untrusted content is no longer supported.
+        *  Use reduceAllowedModuleOrigin() instead.
+        *
         * @param string $type ResourceLoaderModule TYPE_ constant
-        * @param int $level ResourceLoaderModule class constant
+        * @param int $level ResourceLoaderModule ORIGIN_ constant
         */
        public function setAllowedModules( $type, $level ) {
-               $this->mAllowedModules[$type] = $level;
+               wfDeprecated( __METHOD__, '1.24' );
+               $this->reduceAllowedModuleOrigin( $level );
        }
 
        /**
-        * As for setAllowedModules(), but don't inadvertently make the page more accessible
-        * @param string $type
-        * @param int $level ResourceLoaderModule class constant
+        * Limit the highest level of CSS/JS untrustworthiness allowed.
+        *
+        * @deprecated since 1.24 Module allowance is no longer fragmented by content type.
+        *  Use reduceAllowedModuleOrigin() instead.
+        *
+        * @param string $type ResourceLoaderModule TYPE_ constant
+        * @param int $level ResourceLoaderModule ORIGIN_ class constant
         */
        public function reduceAllowedModules( $type, $level ) {
-               $this->mAllowedModules[$type] = min( $this->getAllowedModules( $type ), $level );
+               wfDeprecated( __METHOD__, '1.24' );
+               $this->reduceAllowedModuleOrigin( $level );
+       }
+
+       /**
+        * Limit the highest level of CSS/JS untrustworthiness allowed.
+        *
+        * If passed the same or a higher level than the current level of untrustworthiness set, the
+        * level will remain unchanged.
+        *
+        * @param int $level ResourceLoaderModule class constant
+        */
+       public function reduceAllowedModuleOrigin( $level ) {
+               $this->mAllowedModuleOrigin = min( $this->mAllowedModuleOrigin, $level );
        }
 
        /**
@@ -1626,6 +1670,7 @@ class OutputPage extends ContextSource {
        public function addParserOutputMetadata( $parserOutput ) {
                $this->mLanguageLinks += $parserOutput->getLanguageLinks();
                $this->addCategoryLinks( $parserOutput->getCategories() );
+               $this->setIndicators( $parserOutput->getIndicators() );
                $this->mNewSectionLink = $parserOutput->getNewSection();
                $this->mHideNewSectionLink = $parserOutput->getHideNewSection();
 
@@ -2070,8 +2115,6 @@ class OutputPage extends ContextSource {
         * the object, let's actually output it:
         */
        public function output() {
-               global $wgLanguageCode;
-
                if ( $this->mDoNothing ) {
                        return;
                }
@@ -2125,7 +2168,7 @@ class OutputPage extends ContextSource {
                ob_start();
 
                $response->header( 'Content-type: ' . $config->get( 'MimeType' ) . '; charset=UTF-8' );
-               $response->header( 'Content-language: ' . $wgLanguageCode );
+               $response->header( 'Content-language: ' . $config->get( 'LanguageCode' ) );
 
                // Avoid Internet Explorer "compatibility view" in IE 8-10, so that
                // jQuery etc. can work correctly.
@@ -2399,90 +2442,32 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * Display a page stating that the Wiki is in read-only mode,
-        * and optionally show the source of the page that the user
-        * was trying to edit.  Should only be called (for this
-        * purpose) after wfReadOnly() has returned true.
-        *
-        * For historical reasons, this function is _also_ used to
-        * show the error message when a user tries to edit a page
-        * they are not allowed to edit.  (Unless it's because they're
-        * blocked, then we show blockedPage() instead.)  In this
-        * case, the second parameter should be set to true and a list
-        * of reasons supplied as the third parameter.
+        * Display a page stating that the Wiki is in read-only mode.
+        * Should only be called after wfReadOnly() has returned true.
         *
-        * @todo Needs to be split into multiple functions.
+        * Historically, this function was used to show the source of the page that the user
+        * was trying to edit and _also_ permissions error messages. The relevant code was
+        * moved into EditPage in 1.19 (r102024 / d83c2a431c2a) and removed here in 1.25.
         *
-        * @param string $source Source code to show (or null).
-        * @param bool $protected Is this a permissions error?
-        * @param array $reasons List of reasons for this error, as returned by
-        *   Title::getUserPermissionsErrors().
-        * @param string $action Action that was denied or null if unknown
+        * @deprecated since 1.25; throw the exception directly
         * @throws ReadOnlyError
         */
-       public function readOnlyPage( $source = null, $protected = false,
-               array $reasons = array(), $action = null
-       ) {
-               $this->setRobotPolicy( 'noindex,nofollow' );
-               $this->setArticleRelated( false );
-
-               // If no reason is given, just supply a default "I can't let you do
-               // that, Dave" message.  Should only occur if called by legacy code.
-               if ( $protected && empty( $reasons ) ) {
-                       $reasons[] = array( 'badaccess-group0' );
+       public function readOnlyPage() {
+               if ( func_num_args() > 0 ) {
+                       throw new MWException( __METHOD__ . ' no longer accepts arguments since 1.25.' );
                }
 
-               if ( !empty( $reasons ) ) {
-                       // Permissions error
-                       if ( $source ) {
-                               $this->setPageTitle( $this->msg( 'viewsource-title', $this->getTitle()->getPrefixedText() ) );
-                               $this->addBacklinkSubtitle( $this->getTitle() );
-                       } else {
-                               $this->setPageTitle( $this->msg( 'badaccess' ) );
-                       }
-                       $this->addWikiText( $this->formatPermissionsErrorMessage( $reasons, $action ) );
-               } else {
-                       // Wiki is read only
-                       throw new ReadOnlyError;
-               }
-
-               // Show source, if supplied
-               if ( is_string( $source ) ) {
-                       $this->addWikiMsg( 'viewsourcetext' );
-
-                       $pageLang = $this->getTitle()->getPageLanguage();
-                       $params = array(
-                               'id' => 'wpTextbox1',
-                               'name' => 'wpTextbox1',
-                               'cols' => $this->getUser()->getOption( 'cols' ),
-                               'rows' => $this->getUser()->getOption( 'rows' ),
-                               'readonly' => 'readonly',
-                               'lang' => $pageLang->getHtmlCode(),
-                               'dir' => $pageLang->getDir(),
-                       );
-                       $this->addHTML( Html::element( 'textarea', $params, $source ) );
-
-                       // Show templates used by this article
-                       $templates = Linker::formatTemplates( $this->getTitle()->getTemplateLinksFrom() );
-                       $this->addHTML( "<div class='templatesUsed'>
-$templates
-</div>
-" );
-               }
-
-               # If the title doesn't exist, it's fairly pointless to print a return
-               # link to it.  After all, you just tried editing it and couldn't, so
-               # what's there to do there?
-               if ( $this->getTitle()->exists() ) {
-                       $this->returnToMain( null, $this->getTitle() );
-               }
+               throw new ReadOnlyError;
        }
 
        /**
         * Turn off regular page output and return an error response
         * for when rate limiting has triggered.
+        *
+        * @deprecated since 1.25; throw the exception directly
         */
        public function rateLimited() {
+               wfDeprecated( __METHOD__, '1.25' );
                throw new ThrottledError;
        }
 
@@ -2587,6 +2572,8 @@ $templates
        public function headElement( Skin $sk, $includeStyle = true ) {
                global $wgContLang;
 
+               $section = new ProfileSection( __METHOD__ );
+
                $userdir = $this->getLanguage()->getDir();
                $sitedir = $wgContLang->getDir();
 
@@ -2769,7 +2756,9 @@ $templates
                                );
                                $context = new ResourceLoaderContext( $resourceLoader, new FauxRequest( $query ) );
 
-                               // Extract modules that know they're empty
+                               // Extract modules that know they're empty and see if we have one or more
+                               // raw modules
+                               $isRaw = false;
                                foreach ( $grpModules as $key => $module ) {
                                        // Inline empty modules: since they're empty, just mark them as 'ready' (bug 46857)
                                        // If we're only getting the styles, we don't need to do anything for empty modules.
@@ -2779,6 +2768,8 @@ $templates
                                                        $links['states'][$key] = 'ready';
                                                }
                                        }
+
+                                       $isRaw |= $module->isRaw();
                                }
 
                                // If there are no non-empty modules, skip this group
@@ -2797,7 +2788,9 @@ $templates
                                                );
                                        } else {
                                                $links['html'] .= Html::inlineScript(
-                                                       $resourceLoader->makeModuleResponse( $context, $grpModules )
+                                                       ResourceLoader::makeLoaderConditionalScript(
+                                                               $resourceLoader->makeModuleResponse( $context, $grpModules )
+                                                       )
                                                );
                                        }
                                        $links['html'] .= "\n";
@@ -2843,6 +2836,17 @@ $templates
                                                );
                                        } 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.
+                                                       $link = Html::inlineScript(
+                                                               ResourceLoader::makeLoaderConditionalScript(
+                                                                       Xml::encodeJsCall( 'document.write', array( $link ) )
+                                                               )
+                                                       );
+                                               }
 
                                                // For modules requested directly in the html via <link> or <script>,
                                                // tell mw.loader they are being loading to prevent duplicate requests.
@@ -3336,25 +3340,23 @@ $templates
                }
 
                # Language variants
-               if ( !$config->get( 'DisableLangConversion' ) && $config->get( 'CanonicalLanguageLinks' ) ) {
+               if ( !$config->get( 'DisableLangConversion' ) ) {
                        $lang = $this->getTitle()->getPageLanguage();
                        if ( $lang->hasVariants() ) {
-
-                               $urlvar = $lang->getURLVariant();
-
-                               if ( !$urlvar ) {
-                                       $variants = $lang->getVariants();
-                                       foreach ( $variants as $_v ) {
-                                               $tags["variant-$_v"] = Html::element( 'link', array(
-                                                       'rel' => 'alternate',
-                                                       'hreflang' => wfBCP47( $_v ),
-                                                       'href' => $this->getTitle()->getLocalURL( array( 'variant' => $_v ) ) )
-                                               );
-                                       }
-                               } else {
-                                       $canonicalUrl = $this->getTitle()->getLocalURL();
+                               $variants = $lang->getVariants();
+                               foreach ( $variants as $_v ) {
+                                       $tags["variant-$_v"] = Html::element( 'link', array(
+                                               'rel' => 'alternate',
+                                               'hreflang' => wfBCP47( $_v ),
+                                               'href' => $this->getTitle()->getLocalURL( array( 'variant' => $_v ) ) )
+                                       );
                                }
                        }
+                       # x-default link per https://support.google.com/webmasters/answer/189077?hl=en
+                       $tags["variant-x-default"] = Html::element( 'link', array(
+                               'rel' => 'alternate',
+                               'hreflang' => 'x-default',
+                               'href' => $this->getTitle()->getLocalURL() ) );
                }
 
                # Copyright
@@ -3540,7 +3542,9 @@ $templates
                $moduleStyles[] = 'user.groups';
 
                // Per-user custom styles
-               if ( $this->getConfig()->get( 'AllowUserCss' ) && $this->getTitle()->isCssSubpage() && $this->userCanPreview() ) {
+               if ( $this->getConfig()->get( 'AllowUserCss' ) && $this->getTitle()->isCssSubpage()
+                       && $this->userCanPreview()
+               ) {
                        // We're on a preview of a CSS subpage
                        // Exclude this page from the user module in case it's in there (bug 26283)
                        $link = $this->makeResourceLoaderLink( 'user', ResourceLoaderModule::TYPE_STYLES, false,
index 0f5a6fc..b061990 100644 (file)
@@ -39,8 +39,8 @@
  * version are hardcoded here
  */
 function wfPHPVersionError( $type ) {
-       $mwVersion = '1.24';
-       $minimumVersionPHP = '5.3.2';
+       $mwVersion = '1.25';
+       $minimumVersionPHP = '5.3.3';
 
        $phpVersion = PHP_VERSION;
        $protocol = isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0';
@@ -60,7 +60,7 @@ function wfPHPVersionError( $type ) {
                }
                $encLogo = htmlspecialchars(
                        str_replace( '//', '/', $dirname . '/' ) .
-                       'skins/common/images/mediawiki.png'
+                       'resources/assets/mediawiki.png'
                );
 
                header( "$protocol 500 MediaWiki configuration Error" );
index eb29e41..93844f6 100644 (file)
@@ -113,8 +113,7 @@ class Preferences {
         */
        static function loadPreferenceValues( $user, $context, &$defaultPreferences ) {
                ## Remove preferences that wikis don't want to use
-               global $wgHiddenPrefs;
-               foreach ( $wgHiddenPrefs as $pref ) {
+               foreach ( $context->getConfig()->get( 'HiddenPrefs' ) as $pref ) {
                        if ( isset( $defaultPreferences[$pref] ) ) {
                                unset( $defaultPreferences[$pref] );
                        }
@@ -207,12 +206,9 @@ class Preferences {
         * @return void
         */
        static function profilePreferences( $user, IContextSource $context, &$defaultPreferences ) {
-               global $wgAuth, $wgContLang, $wgParser, $wgLanguageCode,
-                       $wgDisableLangConversion, $wgMaxSigChars,
-                       $wgEnableEmail, $wgEmailConfirmToEdit, $wgEnableUserEmail, $wgEmailAuthentication,
-                       $wgEnotifWatchlist, $wgEnotifUserTalk, $wgEnotifRevealEditorAddress,
-                       $wgSecureLogin;
+               global $wgAuth, $wgContLang, $wgParser;
 
+               $config = $context->getConfig();
                // retrieving user name for GENDER and misc.
                $userName = $user->getName();
 
@@ -310,7 +306,7 @@ class Preferences {
                        );
                }
                // Only show prefershttps if secure login is turned on
-               if ( $wgSecureLogin && wfCanIPUseHTTPS( $context->getRequest()->getIP() ) ) {
+               if ( $config->get( 'SecureLogin' ) && wfCanIPUseHTTPS( $context->getRequest()->getIP() ) ) {
                        $defaultPreferences['prefershttps'] = array(
                                'type' => 'toggle',
                                'label-message' => 'tog-prefershttps',
@@ -321,8 +317,9 @@ class Preferences {
 
                // Language
                $languages = Language::fetchLanguageNames( null, 'mw' );
-               if ( !array_key_exists( $wgLanguageCode, $languages ) ) {
-                       $languages[$wgLanguageCode] = $wgLanguageCode;
+               $languageCode = $config->get( 'LanguageCode' );
+               if ( !array_key_exists( $languageCode, $languages ) ) {
+                       $languages[$languageCode] = $languageCode;
                }
                ksort( $languages );
 
@@ -353,7 +350,7 @@ class Preferences {
                );
 
                // see if there are multiple language variants to choose from
-               if ( !$wgDisableLangConversion ) {
+               if ( !$config->get( 'DisableLangConversion' ) ) {
                        foreach ( LanguageConverter::$languagesWithVariants as $langCode ) {
                                if ( $langCode == $wgContLang->getCode() ) {
                                        $variants = $wgContLang->getVariants();
@@ -418,7 +415,7 @@ class Preferences {
                );
                $defaultPreferences['nickname'] = array(
                        'type' => $wgAuth->allowPropChange( 'nickname' ) ? 'text' : 'info',
-                       'maxlength' => $wgMaxSigChars,
+                       'maxlength' => $config->get( 'MaxSigChars' ),
                        'label-message' => 'yournick',
                        'validation-callback' => array( 'Preferences', 'validateSignature' ),
                        'section' => 'personal/signature',
@@ -434,13 +431,13 @@ class Preferences {
 
                ## Email stuff
 
-               if ( $wgEnableEmail ) {
+               if ( $config->get( 'EnableEmail' ) ) {
                        if ( $canViewPrivateInfo ) {
-                               $helpMessages[] = $wgEmailConfirmToEdit
+                               $helpMessages[] = $config->get( 'EmailConfirmToEdit' )
                                                ? 'prefs-help-email-required'
                                                : 'prefs-help-email';
 
-                               if ( $wgEnableUserEmail ) {
+                               if ( $config->get( 'EnableUserEmail' ) ) {
                                        // additional messages when users can send email to each other
                                        $helpMessages[] = 'prefs-help-email-others';
                                }
@@ -472,7 +469,7 @@ class Preferences {
 
                        $disableEmailPrefs = false;
 
-                       if ( $wgEmailAuthentication ) {
+                       if ( $config->get( 'EmailAuthentication' ) ) {
                                $emailauthenticationclass = 'mw-email-not-authenticated';
                                if ( $user->getEmail() ) {
                                        if ( $user->getEmailAuthenticationTimestamp() ) {
@@ -517,7 +514,7 @@ class Preferences {
                                }
                        }
 
-                       if ( $wgEnableUserEmail && $user->isAllowed( 'sendemail' ) ) {
+                       if ( $config->get( 'EnableUserEmail' ) && $user->isAllowed( 'sendemail' ) ) {
                                $defaultPreferences['disablemail'] = array(
                                        'type' => 'toggle',
                                        'invert' => true,
@@ -533,7 +530,7 @@ class Preferences {
                                );
                        }
 
-                       if ( $wgEnotifWatchlist ) {
+                       if ( $config->get( 'EnotifWatchlist' ) ) {
                                $defaultPreferences['enotifwatchlistpages'] = array(
                                        'type' => 'toggle',
                                        'section' => 'personal/email',
@@ -541,7 +538,7 @@ class Preferences {
                                        'disabled' => $disableEmailPrefs,
                                );
                        }
-                       if ( $wgEnotifUserTalk ) {
+                       if ( $config->get( 'EnotifUserTalk' ) ) {
                                $defaultPreferences['enotifusertalkpages'] = array(
                                        'type' => 'toggle',
                                        'section' => 'personal/email',
@@ -549,7 +546,7 @@ class Preferences {
                                        'disabled' => $disableEmailPrefs,
                                );
                        }
-                       if ( $wgEnotifUserTalk || $wgEnotifWatchlist ) {
+                       if ( $config->get( 'EnotifUserTalk' ) || $config->get( 'EnotifWatchlist' ) ) {
                                $defaultPreferences['enotifminoredits'] = array(
                                        'type' => 'toggle',
                                        'section' => 'personal/email',
@@ -557,7 +554,7 @@ class Preferences {
                                        'disabled' => $disableEmailPrefs,
                                );
 
-                               if ( $wgEnotifRevealEditorAddress ) {
+                               if ( $config->get( 'EnotifRevealEditorAddress' ) ) {
                                        $defaultPreferences['enotifrevealaddr'] = array(
                                                'type' => 'toggle',
                                                'section' => 'personal/email',
@@ -577,7 +574,6 @@ class Preferences {
         */
        static function skinPreferences( $user, IContextSource $context, &$defaultPreferences ) {
                ## Skin #####################################
-               global $wgAllowUserCss, $wgAllowUserJs;
 
                // Skin selector, if there is at least one valid skin
                $skinOptions = self::generateSkinOptions( $user, $context );
@@ -590,19 +586,22 @@ class Preferences {
                        );
                }
 
+               $config = $context->getConfig();
+               $allowUserCss = $config->get( 'AllowUserCss' );
+               $allowUserJs = $config->get( 'AllowUserJs' );
                # Create links to user CSS/JS pages for all skins
                # This code is basically copied from generateSkinOptions().  It'd
                # be nice to somehow merge this back in there to avoid redundancy.
-               if ( $wgAllowUserCss || $wgAllowUserJs ) {
+               if ( $allowUserCss || $allowUserJs ) {
                        $linkTools = array();
                        $userName = $user->getName();
 
-                       if ( $wgAllowUserCss ) {
+                       if ( $allowUserCss ) {
                                $cssPage = Title::makeTitleSafe( NS_USER, $userName . '/common.css' );
                                $linkTools[] = Linker::link( $cssPage, $context->msg( 'prefs-custom-css' )->escaped() );
                        }
 
-                       if ( $wgAllowUserJs ) {
+                       if ( $allowUserJs ) {
                                $jsPage = Title::makeTitleSafe( NS_USER, $userName . '/common.js' );
                                $linkTools[] = Linker::link( $jsPage, $context->msg( 'prefs-custom-js' )->escaped() );
                        }
@@ -730,8 +729,7 @@ class Preferences {
                );
 
                ## Page Rendering ##############################
-               global $wgAllowUserCssPrefs;
-               if ( $wgAllowUserCssPrefs ) {
+               if ( $context->getConfig()->get( 'AllowUserCssPrefs' ) ) {
                        $defaultPreferences['underline'] = array(
                                'type' => 'select',
                                'options' => array(
@@ -776,8 +774,6 @@ class Preferences {
         * @param array $defaultPreferences
         */
        static function editingPreferences( $user, IContextSource $context, &$defaultPreferences ) {
-               global $wgAllowUserCssPrefs;
-
                ## Editing #####################################
                $defaultPreferences['editsectiononrightclick'] = array(
                        'type' => 'toggle',
@@ -790,7 +786,7 @@ class Preferences {
                        'label-message' => 'tog-editondblclick',
                );
 
-               if ( $wgAllowUserCssPrefs ) {
+               if ( $context->getConfig()->get( 'AllowUserCssPrefs' ) ) {
                        $defaultPreferences['editfont'] = array(
                                'type' => 'select',
                                'section' => 'editing/editor',
@@ -864,17 +860,17 @@ class Preferences {
         * @param array $defaultPreferences
         */
        static function rcPreferences( $user, IContextSource $context, &$defaultPreferences ) {
-               global $wgRCMaxAge, $wgRCShowWatchingUsers;
-
+               $config = $context->getConfig();
+               $rcMaxAge = $config->get( 'RCMaxAge' );
                ## RecentChanges #####################################
                $defaultPreferences['rcdays'] = array(
                        'type' => 'float',
                        'label-message' => 'recentchangesdays',
                        'section' => 'rc/displayrc',
                        'min' => 1,
-                       'max' => ceil( $wgRCMaxAge / ( 3600 * 24 ) ),
+                       'max' => ceil( $rcMaxAge / ( 3600 * 24 ) ),
                        'help' => $context->msg( 'recentchangesdays-max' )->numParams(
-                               ceil( $wgRCMaxAge / ( 3600 * 24 ) ) )->text()
+                               ceil( $rcMaxAge / ( 3600 * 24 ) ) )->text()
                );
                $defaultPreferences['rclimit'] = array(
                        'type' => 'int',
@@ -906,7 +902,7 @@ class Preferences {
                        );
                }
 
-               if ( $wgRCShowWatchingUsers ) {
+               if ( $config->get( 'RCShowWatchingUsers' ) ) {
                        $defaultPreferences['shownumberswatching'] = array(
                                'type' => 'toggle',
                                'section' => 'rc/advancedrc',
@@ -921,9 +917,8 @@ class Preferences {
         * @param array $defaultPreferences
         */
        static function watchlistPreferences( $user, IContextSource $context, &$defaultPreferences ) {
-               global $wgUseRCPatrol, $wgEnableAPI, $wgRCMaxAge;
-
-               $watchlistdaysMax = ceil( $wgRCMaxAge / ( 3600 * 24 ) );
+               $config = $context->getConfig();
+               $watchlistdaysMax = ceil( $config->get( 'RCMaxAge' ) / ( 3600 * 24 ) );
 
                ## Watchlist #####################################
                $defaultPreferences['watchlistdays'] = array(
@@ -974,7 +969,7 @@ class Preferences {
                        'label-message' => 'tog-watchlisthideliu',
                );
 
-               if ( $wgUseRCPatrol ) {
+               if ( $context->getConfig()->get( 'UseRCPatrol' ) ) {
                        $defaultPreferences['watchlisthidepatrolled'] = array(
                                'type' => 'toggle',
                                'section' => 'watchlist/advancedwatchlist',
@@ -1010,7 +1005,7 @@ class Preferences {
                        }
                }
 
-               if ( $wgEnableAPI ) {
+               if ( $config->get( 'EnableAPI' ) ) {
                        $defaultPreferences['watchlisttoken'] = array(
                                'type' => 'api',
                        );
@@ -1049,7 +1044,6 @@ class Preferences {
         * @return array Text/links to display as key; $skinkey as value
         */
        static function generateSkinOptions( $user, IContextSource $context ) {
-               global $wgDefaultSkin, $wgAllowUserCss, $wgAllowUserJs;
                $ret = array();
 
                $mptitle = Title::newMainPage();
@@ -1068,12 +1062,17 @@ class Preferences {
                }
                asort( $validSkinNames );
 
+               $config = $context->getConfig();
+               $defaultSkin = $config->get( 'DefaultSkin' );
+               $allowUserCss = $config->get( 'AllowUserCss' );
+               $allowUserJs = $config->get( 'AllowUserJs' );
+
                $foundDefault = false;
                foreach ( $validSkinNames as $skinkey => $sn ) {
                        $linkTools = array();
 
                        # Mark the default skin
-                       if ( $skinkey == $wgDefaultSkin ) {
+                       if ( $skinkey == $defaultSkin ) {
                                $linkTools[] = $context->msg( 'default' )->escaped();
                                $foundDefault = true;
                        }
@@ -1083,12 +1082,12 @@ class Preferences {
                        $linkTools[] = "<a target='_blank' href=\"$mplink\">$previewtext</a>";
 
                        # Create links to user CSS/JS pages
-                       if ( $wgAllowUserCss ) {
+                       if ( $allowUserCss ) {
                                $cssPage = Title::makeTitleSafe( NS_USER, $user->getName() . '/' . $skinkey . '.css' );
                                $linkTools[] = Linker::link( $cssPage, $context->msg( 'prefs-custom-css' )->escaped() );
                        }
 
-                       if ( $wgAllowUserJs ) {
+                       if ( $allowUserJs ) {
                                $jsPage = Title::makeTitleSafe( NS_USER, $user->getName() . '/' . $skinkey . '.js' );
                                $linkTools[] = Linker::link( $jsPage, $context->msg( 'prefs-custom-js' )->escaped() );
                        }
@@ -1125,7 +1124,7 @@ class Preferences {
                                                                                // Bug 19237
                        }
 
-                       // KLUGE: site default might not be valid for user language
+                       // FIXME KLUGE: site default might not be valid for user language
                        global $wgDefaultUserOptions;
                        if ( !in_array( $wgDefaultUserOptions['date'], $dateopts ) ) {
                                $wgDefaultUserOptions['date'] = 'default';
@@ -1149,12 +1148,10 @@ class Preferences {
         * @return array
         */
        static function getImageSizes( IContextSource $context ) {
-               global $wgImageLimits;
-
                $ret = array();
                $pixels = $context->msg( 'unit-pixel' )->text();
 
-               foreach ( $wgImageLimits as $index => $limits ) {
+               foreach ( $context->getConfig()->get( 'ImageLimits' ) as $index => $limits ) {
                        $display = "{$limits[0]}×{$limits[1]}" . $pixels;
                        $ret[$display] = $index;
                }
@@ -1167,12 +1164,10 @@ class Preferences {
         * @return array
         */
        static function getThumbSizes( IContextSource $context ) {
-               global $wgThumbLimits;
-
                $ret = array();
                $pixels = $context->msg( 'unit-pixel' )->text();
 
-               foreach ( $wgThumbLimits as $index => $size ) {
+               foreach ( $context->getConfig()->get( 'ThumbLimits' ) as $index => $size ) {
                        $display = $size . $pixels;
                        $ret[$display] = $index;
                }
@@ -1187,10 +1182,11 @@ class Preferences {
         * @return bool|string
         */
        static function validateSignature( $signature, $alldata, $form ) {
-               global $wgParser, $wgMaxSigChars;
-               if ( mb_strlen( $signature ) > $wgMaxSigChars ) {
+               global $wgParser;
+               $maxSigChars = $form->getConfig()->get( 'MaxSigChars' );
+               if ( mb_strlen( $signature ) > $maxSigChars ) {
                        return Xml::element( 'span', array( 'class' => 'error' ),
-                               $form->msg( 'badsiglength' )->numParams( $wgMaxSigChars )->text() );
+                               $form->msg( 'badsiglength' )->numParams( $maxSigChars )->text() );
                } elseif ( isset( $alldata['fancysig'] ) &&
                                $alldata['fancysig'] &&
                                $wgParser->validateSig( $signature ) === false
@@ -1272,10 +1268,10 @@ class Preferences {
        static function getTimezoneOptions( IContextSource $context ) {
                $opt = array();
 
-               global $wgLocalTZoffset;
+               $localTZoffset = $context->getConfig()->get( 'LocalTZoffset' );
                $timestamp = MWTimestamp::getLocalInstance();
-               // Check that $wgLocalTZoffset is the same as the local time zone offset
-               if ( $wgLocalTZoffset == $timestamp->format( 'Z' ) / 60 ) {
+               // Check that the LocalTZoffset is the same as the local time zone offset
+               if ( $localTZoffset == $timestamp->format( 'Z' ) / 60 ) {
                        $server_tz_msg = $context->msg(
                                'timezoneuseserverdefault',
                                $timestamp->getTimezone()->getName()
@@ -1283,12 +1279,12 @@ class Preferences {
                } else {
                        $tzstring = sprintf(
                                '%+03d:%02d',
-                               floor( $wgLocalTZoffset / 60 ),
-                               abs( $wgLocalTZoffset ) % 60
+                               floor( $localTZoffset / 60 ),
+                               abs( $localTZoffset ) % 60
                        );
                        $server_tz_msg = $context->msg( 'timezoneuseserverdefault', $tzstring )->text();
                }
-               $opt[$server_tz_msg] = "System|$wgLocalTZoffset";
+               $opt[$server_tz_msg] = "System|$localTZoffset";
                $opt[$context->msg( 'timezoneuseoffset' )->text()] = 'other';
                $opt[$context->msg( 'guesstimezone' )->text()] = 'guess';
 
@@ -1388,9 +1384,10 @@ class Preferences {
         * @return bool|Status|string
         */
        static function tryFormSubmit( $formData, $form ) {
-               global $wgHiddenPrefs, $wgAuth;
+               global $wgAuth;
 
                $user = $form->getModifiedUser();
+               $hiddenPrefs = $form->getConfig()->get( 'HiddenPrefs' );
                $result = true;
 
                if ( !$user->isAllowedAny( 'editmyprivateinfo', 'editmyoptions' ) ) {
@@ -1407,7 +1404,7 @@ class Preferences {
 
                // Fortunately, the realname field is MUCH simpler
                // (not really "private", but still shouldn't be edited without permission)
-               if ( !in_array( 'realname', $wgHiddenPrefs )
+               if ( !in_array( 'realname', $hiddenPrefs )
                        && $user->isAllowed( 'editmyprivateinfo' )
                        && array_key_exists( 'realname', $formData )
                ) {
@@ -1423,7 +1420,7 @@ class Preferences {
                        # If users have saved a value for a preference which has subsequently been disabled
                        # via $wgHiddenPrefs, we don't want to destroy that setting in case the preference
                        # is subsequently re-enabled
-                       foreach ( $wgHiddenPrefs as $pref ) {
+                       foreach ( $hiddenPrefs as $pref ) {
                                # If the user has not set a non-default value here, the default will be returned
                                # and subsequently discarded
                                $formData[$pref] = $user->getOption( $pref, null, true );
@@ -1469,28 +1466,6 @@ class Preferences {
 
                return Status::newGood();
        }
-
-       /**
-        * Try to set a user's email address.
-        * This does *not* try to validate the address.
-        * Caller is responsible for checking $wgAuth and 'editmyprivateinfo'
-        * right.
-        *
-        * @deprecated since 1.20; use User::setEmailWithConfirmation() instead.
-        * @param User $user
-        * @param string $newaddr New email address
-        * @return array (true on success or Status on failure, info string)
-        */
-       public static function trySetUserEmail( User $user, $newaddr ) {
-               wfDeprecated( __METHOD__, '1.20' );
-
-               $result = $user->setEmailWithConfirmation( $newaddr );
-               if ( $result->isGood() ) {
-                       return array( true, $result->value );
-               } else {
-                       return array( $result, 'mailerror' );
-               }
-       }
 }
 
 /** Some tweaks to allow js prefs to work */
@@ -1542,6 +1517,9 @@ class PreferencesForm extends HTMLForm {
         * @return string
         */
        function getButtons() {
+
+               $attrs = array( 'id' => 'mw-prefs-restoreprefs' );
+
                if ( !$this->getModifiedUser()->isAllowedAny( 'editmyprivateinfo', 'editmyoptions' ) ) {
                        return '';
                }
@@ -1551,7 +1529,8 @@ class PreferencesForm extends HTMLForm {
                if ( $this->getModifiedUser()->isAllowed( 'editmyoptions' ) ) {
                        $t = SpecialPage::getTitleFor( 'Preferences', 'reset' );
 
-                       $html .= "\n" . Linker::link( $t, $this->msg( 'restoreprefs' )->escaped() );
+                       $html .= "\n" . Linker::link( $t, $this->msg( 'restoreprefs' )->escaped(),
+                               Html::buttonAttributes( $attrs, array( 'mw-ui-quiet' ) ) );
 
                        $html = Xml::tags( 'div', array( 'class' => 'mw-prefs-buttons' ), $html );
                }
index 35be2a9..839fedc 100644 (file)
@@ -60,11 +60,12 @@ abstract class PrefixSearch {
                $title = Title::newFromText( $search );
                if ( $title && !$title->isExternal() ) {
                        $ns = array( $title->getNamespace() );
+                       $search = $title->getText();
                        if ( $ns[0] == NS_MAIN ) {
                                $ns = $namespaces; // no explicit prefix, use default namespaces
+                               wfRunHooks( 'PrefixSearchExtractNamespace', array( &$ns, &$search ) );
                        }
-                       return $this->searchBackend(
-                               $ns, $title->getText(), $limit );
+                       return $this->searchBackend( $ns, $search, $limit );
                }
 
                // Is this a namespace prefix?
@@ -75,6 +76,8 @@ abstract class PrefixSearch {
                {
                        $namespaces = array( $title->getNamespace() );
                        $search = '';
+               } else {
+                       wfRunHooks( 'PrefixSearchExtractNamespace', array( &$namespaces, &$search ) );
                }
 
                return $this->searchBackend( $namespaces, $search, $limit );
@@ -152,7 +155,33 @@ abstract class PrefixSearch {
                $srchres = array();
                if ( wfRunHooks( 'PrefixSearchBackend', array( $namespaces, $search, $limit, &$srchres ) ) ) {
                        return $this->titles( $this->defaultSearchBackend( $namespaces, $search, $limit ) );
+               } else {
+                       // Default search backend does proper prefix searching, but custom backends
+                       // may sort based on other algorythms that may cause the exact title match
+                       // to not be in the results or be lower down the list.
+
+                       // Pick namespace (based on PrefixSearch::defaultSearchBackend)
+                       $ns = in_array( NS_MAIN, $namespaces ) ? NS_MAIN : $namespaces[0];
+                       $t = Title::newFromText( $search, $ns );
+                       if ( $t ) {
+                               // If text is a valid title and is in the search results
+                               $string = $t->getPrefixedText();
+                               $key = array_search( $string, $srchres );
+                               if ( $key !== false ) {
+                                       // Move it to the front
+                                       $cut = array_splice( $srchres, $key, 1 );
+                                       array_unshift( $srchres, $cut[0] );
+                               } elseif ( $t->exists() ) {
+                                       // Add it in front
+                                       array_unshift( $srchres, $string );
+
+                                       if ( count( $srchres ) > $limit ) {
+                                               array_pop( $srchres );
+                                       }
+                               }
+                       }
                }
+
                return $this->strings( $srchres );
        }
 
@@ -174,6 +203,9 @@ abstract class PrefixSearch {
                if ( $subpageSearch !== null ) {
                        // Try matching the full search string as a page name
                        $specialTitle = Title::makeTitleSafe( NS_SPECIAL, $searchKey );
+                       if ( !$specialTitle ) {
+                               return array();
+                       }
                        $special = SpecialPageFactory::getPage( $specialTitle->getText() );
                        if ( $special ) {
                                $subpages = $special->prefixSearchSubpages( $subpageSearch, $limit );
@@ -192,12 +224,12 @@ abstract class PrefixSearch {
                // Unlike SpecialPage itself, we want the canonical forms of both
                // canonical and alias title forms...
                $keys = array();
-               foreach ( SpecialPageFactory::getList() as $page => $class ) {
+               foreach ( SpecialPageFactory::getNames() as $page ) {
                        $keys[$wgContLang->caseFold( $page )] = $page;
                }
 
                foreach ( $wgContLang->getSpecialPageAliases() as $page => $aliases ) {
-                       if ( !array_key_exists( $page, SpecialPageFactory::getList() ) ) {# bug 20885
+                       if ( !in_array( $page, SpecialPageFactory::getNames() ) ) {# bug 20885
                                continue;
                        }
 
index 853e2cc..7bad8b5 100644 (file)
@@ -57,16 +57,21 @@ class ProtectionForm {
        /** @var array Map of action to the expiry time of the existing protection */
        protected $mExistingExpiry = array();
 
-       function __construct( Page $article ) {
-               global $wgUser;
+       /** @var IContextSource */
+       private $mContext;
+
+       function __construct( Article $article ) {
                // Set instance variables.
                $this->mArticle = $article;
                $this->mTitle = $article->getTitle();
                $this->mApplicableTypes = $this->mTitle->getRestrictionTypes();
+               $this->mContext = $article->getContext();
 
                // Check if the form should be disabled.
                // If it is, the form will be available in read-only to show levels.
-               $this->mPermErrors = $this->mTitle->getUserPermissionsErrors( 'protect', $wgUser );
+               $this->mPermErrors = $this->mTitle->getUserPermissionsErrors(
+                       'protect', $this->mContext->getUser()
+               );
                if ( wfReadOnly() ) {
                        $this->mPermErrors[] = array( 'readonlytext', wfReadOnlyReason() );
                }
@@ -82,14 +87,15 @@ class ProtectionForm {
         * Loads the current state of protection into the object.
         */
        function loadData() {
-               global $wgRequest, $wgUser;
-
-               $levels = MWNamespace::getRestrictionLevels( $this->mTitle->getNamespace(), $wgUser );
+               $levels = MWNamespace::getRestrictionLevels(
+                       $this->mTitle->getNamespace(), $this->mContext->getUser()
+               );
                $this->mCascade = $this->mTitle->areRestrictionsCascading();
 
-               $this->mReason = $wgRequest->getText( 'mwProtect-reason' );
-               $this->mReasonSelection = $wgRequest->getText( 'wpProtectReasonSelection' );
-               $this->mCascade = $wgRequest->getBool( 'mwProtect-cascade', $this->mCascade );
+               $request = $this->mContext->getRequest();
+               $this->mReason = $request->getText( 'mwProtect-reason' );
+               $this->mReasonSelection = $request->getText( 'wpProtectReasonSelection' );
+               $this->mCascade = $request->getBool( 'mwProtect-cascade', $this->mCascade );
 
                foreach ( $this->mApplicableTypes as $action ) {
                        // @todo FIXME: This form currently requires individual selections,
@@ -106,8 +112,8 @@ class ProtectionForm {
                        }
                        $this->mExistingExpiry[$action] = $existingExpiry;
 
-                       $requestExpiry = $wgRequest->getText( "mwProtect-expiry-$action" );
-                       $requestExpirySelection = $wgRequest->getVal( "wpProtectExpirySelection-$action" );
+                       $requestExpiry = $request->getText( "mwProtect-expiry-$action" );
+                       $requestExpirySelection = $request->getVal( "wpProtectExpirySelection-$action" );
 
                        if ( $requestExpiry ) {
                                // Custom expiry takes precedence
@@ -128,7 +134,7 @@ class ProtectionForm {
                                $this->mExpirySelection[$action] = 'infinite';
                        }
 
-                       $val = $wgRequest->getVal( "mwProtect-level-$action" );
+                       $val = $request->getVal( "mwProtect-level-$action" );
                        if ( isset( $val ) && in_array( $val, $levels ) ) {
                                $this->mRestrictions[$action] = $val;
                        }
@@ -170,16 +176,14 @@ class ProtectionForm {
         * Main entry point for action=protect and action=unprotect
         */
        function execute() {
-               global $wgRequest, $wgOut;
-
                if ( MWNamespace::getRestrictionLevels( $this->mTitle->getNamespace() ) === array( '' ) ) {
                        throw new ErrorPageError( 'protect-badnamespace-title', 'protect-badnamespace-text' );
                }
 
-               if ( $wgRequest->wasPosted() ) {
+               if ( $this->mContext->getRequest()->wasPosted() ) {
                        if ( $this->save() ) {
                                $q = $this->mArticle->isRedirect() ? 'redirect=no' : '';
-                               $wgOut->redirect( $this->mTitle->getFullURL( $q ) );
+                               $this->mContext->getOutput()->redirect( $this->mTitle->getFullURL( $q ) );
                        }
                } else {
                        $this->show();
@@ -192,28 +196,27 @@ class ProtectionForm {
         * @param string $err Error message or null if there's no error
         */
        function show( $err = null ) {
-               global $wgOut;
-
-               $wgOut->setRobotPolicy( 'noindex,nofollow' );
-               $wgOut->addBacklinkSubtitle( $this->mTitle );
+               $out = $this->mContext->getOutput();
+               $out->setRobotPolicy( 'noindex,nofollow' );
+               $out->addBacklinkSubtitle( $this->mTitle );
 
                if ( is_array( $err ) ) {
-                       $wgOut->wrapWikiMsg( "<p class='error'>\n$1\n</p>\n", $err );
+                       $out->wrapWikiMsg( "<p class='error'>\n$1\n</p>\n", $err );
                } elseif ( is_string( $err ) ) {
-                       $wgOut->addHTML( "<p class='error'>{$err}</p>\n" );
+                       $out->addHTML( "<p class='error'>{$err}</p>\n" );
                }
 
                if ( $this->mTitle->getRestrictionTypes() === array() ) {
                        // No restriction types available for the current title
                        // this might happen if an extension alters the available types
-                       $wgOut->setPageTitle( wfMessage(
+                       $out->setPageTitle( wfMessage(
                                'protect-norestrictiontypes-title',
                                $this->mTitle->getPrefixedText()
                        ) );
-                       $wgOut->addWikiText( wfMessage( 'protect-norestrictiontypes-text' )->text() );
+                       $out->addWikiText( wfMessage( 'protect-norestrictiontypes-text' )->text() );
 
                        // Show the log in case protection was possible once
-                       $this->showLogExtract( $wgOut );
+                       $this->showLogExtract( $out );
                        // return as there isn't anything else we can do
                        return;
                }
@@ -227,7 +230,7 @@ class ProtectionForm {
                        }
 
                        /** @todo FIXME: i18n issue, should use formatted number. */
-                       $wgOut->wrapWikiMsg(
+                       $out->wrapWikiMsg(
                                "<div id=\"mw-protect-cascadeon\">\n$1\n" . $titles . "</div>",
                                array( 'protect-cascadeon', count( $cascadeSources ) )
                        );
@@ -236,19 +239,19 @@ class ProtectionForm {
                # Show an appropriate message if the user isn't allowed or able to change
                # the protection settings at this time
                if ( $this->disabled ) {
-                       $wgOut->setPageTitle(
+                       $out->setPageTitle(
                                wfMessage( 'protect-title-notallowed',
                                        $this->mTitle->getPrefixedText() )
                        );
-                       $wgOut->addWikiText( $wgOut->formatPermissionsErrorMessage( $this->mPermErrors, 'protect' ) );
+                       $out->addWikiText( $out->formatPermissionsErrorMessage( $this->mPermErrors, 'protect' ) );
                } else {
-                       $wgOut->setPageTitle( wfMessage( 'protect-title', $this->mTitle->getPrefixedText() ) );
-                       $wgOut->addWikiMsg( 'protect-text',
+                       $out->setPageTitle( wfMessage( 'protect-title', $this->mTitle->getPrefixedText() ) );
+                       $out->addWikiMsg( 'protect-text',
                                wfEscapeWikiText( $this->mTitle->getPrefixedText() ) );
                }
 
-               $wgOut->addHTML( $this->buildForm() );
-               $this->showLogExtract( $wgOut );
+               $out->addHTML( $this->buildForm() );
+               $this->showLogExtract( $out );
        }
 
        /**
@@ -257,16 +260,17 @@ class ProtectionForm {
         * @return bool Success
         */
        function save() {
-               global $wgRequest, $wgUser, $wgOut;
-
                # Permission check!
                if ( $this->disabled ) {
                        $this->show();
                        return false;
                }
 
-               $token = $wgRequest->getVal( 'wpEditToken' );
-               if ( !$wgUser->matchEditToken( $token, array( 'protect', $this->mTitle->getPrefixedDBkey() ) ) ) {
+               $request = $this->mContext->getRequest();
+               $user = $this->mContext->getUser();
+               $out = $this->mContext->getOutput();
+               $token = $request->getVal( 'wpEditToken' );
+               if ( !$user->matchEditToken( $token, array( 'protect', $this->mTitle->getPrefixedDBkey() ) ) ) {
                        $this->show( array( 'sessionfailure' ) );
                        return false;
                }
@@ -295,18 +299,18 @@ class ProtectionForm {
                        }
                }
 
-               $this->mCascade = $wgRequest->getBool( 'mwProtect-cascade' );
+               $this->mCascade = $request->getBool( 'mwProtect-cascade' );
 
                $status = $this->mArticle->doUpdateRestrictions(
                        $this->mRestrictions,
                        $expiry,
                        $this->mCascade,
                        $reasonstr,
-                       $wgUser
+                       $user
                );
 
                if ( !$status->isOK() ) {
-                       $this->show( $wgOut->parseInline( $status->getWikiText() ) );
+                       $this->show( $out->parseInline( $status->getWikiText() ) );
                        return false;
                }
 
@@ -327,7 +331,7 @@ class ProtectionForm {
                        return false;
                }
 
-               WatchAction::doWatchOrUnwatch( $wgRequest->getCheck( 'mwProtectWatch' ), $this->mTitle, $wgUser );
+               WatchAction::doWatchOrUnwatch( $request->getCheck( 'mwProtectWatch' ), $this->mTitle, $user );
 
                return true;
        }
@@ -338,15 +342,17 @@ class ProtectionForm {
         * @return string HTML form
         */
        function buildForm() {
-               global $wgUser, $wgLang, $wgOut, $wgCascadingRestrictionLevels;
-
+               $user = $this->mContext->getUser();
+               $output = $this->mContext->getOutput();
+               $lang = $this->mContext->getLanguage();
+               $cascadingRestrictionLevels = $this->mContext->getConfig()->get( 'CascadingRestrictionLevels' );
                $out = '';
                if ( !$this->disabled ) {
-                       $wgOut->addModules( 'mediawiki.legacy.protect' );
-                       $wgOut->addJsConfigVars( 'wgCascadeableLevels', $wgCascadingRestrictionLevels );
+                       $output->addModules( 'mediawiki.legacy.protect' );
+                       $output->addJsConfigVars( 'wgCascadeableLevels', $cascadingRestrictionLevels );
                        $out .= Xml::openElement( 'form', array( 'method' => 'post',
                                'action' => $this->mTitle->getLocalURL( 'action=protect' ),
-                               'id' => 'mw-Protect-Form', 'onsubmit' => 'ProtectionForm.enableUnchainedInputs(true)' ) );
+                               'id' => 'mw-Protect-Form' ) );
                }
 
                $out .= Xml::openElement( 'fieldset' ) .
@@ -378,13 +384,18 @@ class ProtectionForm {
                        );
 
                        $expiryFormOptions = '';
-                       if ( $this->mExistingExpiry[$action] && $this->mExistingExpiry[$action] != 'infinity' ) {
-                               $timestamp = $wgLang->timeanddate( $this->mExistingExpiry[$action], true );
-                               $d = $wgLang->date( $this->mExistingExpiry[$action], true );
-                               $t = $wgLang->time( $this->mExistingExpiry[$action], true );
+                       if ( $this->mExistingExpiry[$action] ) {
+                               if ( $this->mExistingExpiry[$action] == 'infinity' ) {
+                                       $existingExpiryMessage = wfMessage( 'protect-existing-expiry-infinity' );
+                               } else {
+                                       $timestamp = $lang->timeanddate( $this->mExistingExpiry[$action], true );
+                                       $d = $lang->date( $this->mExistingExpiry[$action], true );
+                                       $t = $lang->time( $this->mExistingExpiry[$action], true );
+                                       $existingExpiryMessage = wfMessage( 'protect-existing-expiry', $timestamp, $d, $t );
+                               }
                                $expiryFormOptions .=
                                        Xml::option(
-                                               wfMessage( 'protect-existing-expiry', $timestamp, $d, $t )->text(),
+                                               $existingExpiryMessage->text(),
                                                'existing',
                                                $this->mExpirySelection[$action] == 'existing'
                                        ) . "\n";
@@ -420,16 +431,13 @@ class ProtectionForm {
                                                                array(
                                                                        'id' => "mwProtectExpirySelection-$action",
                                                                        'name' => "wpProtectExpirySelection-$action",
-                                                                       'onchange' => "ProtectionForm.updateExpiryList(this)",
                                                                        'tabindex' => '2' ) + $this->disabledAttrib,
                                                                $expiryFormOptions ) .
                                                "</td>
                                        </tr></table>";
                        }
                        # Add custom expiry field
-                       $attribs = array( 'id' => "mwProtect-$action-expires",
-                               'onkeyup' => 'ProtectionForm.updateExpiry(this)',
-                               'onchange' => 'ProtectionForm.updateExpiry(this)' ) + $this->disabledAttrib;
+                       $attribs = array( 'id' => "mwProtect-$action-expires" ) + $this->disabledAttrib;
                        $out .= "<table><tr>
                                        <td class='mw-label'>" .
                                                $mProtectother .
@@ -508,14 +516,14 @@ class ProtectionForm {
                                        "</td>
                                </tr>";
                        # Disallow watching is user is not logged in
-                       if ( $wgUser->isLoggedIn() ) {
+                       if ( $user->isLoggedIn() ) {
                                $out .= "
                                <tr>
                                        <td></td>
                                        <td class='mw-input'>" .
                                                Xml::checkLabel( wfMessage( 'watchthis' )->text(),
                                                        'mwProtectWatch', 'mwProtectWatch',
-                                                       $wgUser->isWatched( $this->mTitle ) || $wgUser->getOption( 'watchdefault' ) ) .
+                                                       $user->isWatched( $this->mTitle ) || $user->getOption( 'watchdefault' ) ) .
                                        "</td>
                                </tr>";
                        }
@@ -533,7 +541,7 @@ class ProtectionForm {
                }
                $out .= Xml::closeElement( 'fieldset' );
 
-               if ( $wgUser->isAllowed( 'editinterface' ) ) {
+               if ( $user->isAllowed( 'editinterface' ) ) {
                        $title = Title::makeTitle( NS_MEDIAWIKI, 'Protect-dropdown' );
                        $link = Linker::link(
                                $title,
@@ -547,10 +555,9 @@ class ProtectionForm {
                if ( !$this->disabled ) {
                        $out .= Html::hidden(
                                'wpEditToken',
-                               $wgUser->getEditToken( array( 'protect', $this->mTitle->getPrefixedDBkey() ) )
+                               $user->getEditToken( array( 'protect', $this->mTitle->getPrefixedDBkey() ) )
                        );
                        $out .= Xml::closeElement( 'form' );
-                       $wgOut->addScript( $this->buildCleanupScript() );
                }
 
                return $out;
@@ -564,12 +571,10 @@ class ProtectionForm {
         * @return string HTML fragment
         */
        function buildSelector( $action, $selected ) {
-               global $wgUser;
-
                // If the form is disabled, display all relevant levels. Otherwise,
                // just show the ones this user can use.
                $levels = MWNamespace::getRestrictionLevels( $this->mTitle->getNamespace(),
-                       $this->disabled ? null : $wgUser
+                       $this->disabled ? null : $this->mContext->getUser()
                );
 
                $id = 'mwProtect-level-' . $action;
@@ -577,8 +582,7 @@ class ProtectionForm {
                        'id' => $id,
                        'name' => $id,
                        'size' => count( $levels ),
-                       'onchange' => 'ProtectionForm.updateLevels(this)',
-                       ) + $this->disabledAttrib;
+               ) + $this->disabledAttrib;
 
                $out = Xml::openElement( 'select', $attribs );
                foreach ( $levels as $key ) {
@@ -607,19 +611,6 @@ class ProtectionForm {
                }
        }
 
-       function buildCleanupScript() {
-               $options = array(
-                       'tableId' => 'mwProtectSet',
-                       'labelText' => wfMessage( 'protect-unchain-permissions' )->plain(),
-                       'numTypes' => count( $this->mApplicableTypes ),
-                       'existingMatch' => count( array_unique( $this->mExistingExpiry ) ) === 1,
-               );
-
-               $script = Xml::encodeJsCall( 'ProtectionForm.init', array( $options ) );
-
-               return Html::inlineScript( ResourceLoader::makeLoaderConditionalScript( $script ) );
-       }
-
        /**
         * Show protection long extracts for this page
         *
index cad9f2c..e81ed75 100644 (file)
@@ -678,13 +678,8 @@ class Revision implements IDBAccessObject {
                        $this->mCurrent = false;
 
                        // If we still have no length, see it we have the text to figure it out
-                       if ( !$this->mSize ) {
-                               if ( $this->mContent !== null ) {
-                                       $this->mSize = $this->mContent->getSize();
-                               } else {
-                                       #NOTE: this should never happen if we have either text or content object!
-                                       $this->mSize = null;
-                               }
+                       if ( !$this->mSize && $this->mContent !== null ) {
+                               $this->mSize = $this->mContent->getSize();
                        }
 
                        // Same for sha1
@@ -1065,8 +1060,6 @@ class Revision implements IDBAccessObject {
                                $format = $this->getContentFormat();
 
                                $this->mContent = $handler->unserializeContent( $this->mText, $format );
-                       } else {
-                               $this->mContent = false; // negative caching!
                        }
                }
 
@@ -1658,7 +1651,7 @@ class Revision implements IDBAccessObject {
         *                          instead of just plain userrights
         * @return bool
         */
-       public static function userCanBitfield( $bitfield, $field, User $user = null ,
+       public static function userCanBitfield( $bitfield, $field, User $user = null,
                Title $title = null
        ) {
                if ( $bitfield & $field ) { // aspect is deleted
@@ -1680,7 +1673,7 @@ class Revision implements IDBAccessObject {
                        } else {
                                $text = $title->getPrefixedText();
                                wfDebug( "Checking for $permissionlist on $text due to $field match on $bitfield\n" );
-                               foreach( $permissions as $perm ) {
+                               foreach ( $permissions as $perm ) {
                                        if ( $title->userCan( $perm, $user ) ) {
                                                return true;
                                        }
index 2cdbe15..bca2f67 100644 (file)
@@ -832,24 +832,16 @@ class Sanitizer {
        }
 
        /**
-        * Pick apart some CSS and check it for forbidden or unsafe structures.
-        * Returns a sanitized string. This sanitized string will have
-        * character references and escape sequences decoded and comments
-        * stripped (unless it is itself one valid comment, in which case the value
-        * will be passed through). If the input is just too evil, only a comment
-        * complaining about evilness will be returned.
-        *
-        * Currently URL references, 'expression', 'tps' are forbidden.
-        *
-        * NOTE: Despite the fact that character references are decoded, the
-        * returned string may contain character references given certain
-        * clever input strings. These character references must
-        * be escaped before the return value is embedded in HTML.
-        *
-        * @param string $value
-        * @return string
+        * Normalize CSS into a format we can easily search for hostile input
+        *  - decode character references
+        *  - decode escape sequences
+        *  - convert characters that IE6 interprets into ascii
+        *  - remove comments, unless the entire value is one single comment
+        * @param string $value the css string
+        * @return string normalized css
         */
-       static function checkCss( $value ) {
+       public static function normalizeCss( $value ) {
+
                // Decode character references like &#123;
                $value = Sanitizer::decodeCharReferences( $value );
 
@@ -935,6 +927,31 @@ class Sanitizer {
                        $value
                );
 
+               return $value;
+       }
+
+
+       /**
+        * Pick apart some CSS and check it for forbidden or unsafe structures.
+        * Returns a sanitized string. This sanitized string will have
+        * character references and escape sequences decoded and comments
+        * stripped (unless it is itself one valid comment, in which case the value
+        * will be passed through). If the input is just too evil, only a comment
+        * complaining about evilness will be returned.
+        *
+        * Currently URL references, 'expression', 'tps' are forbidden.
+        *
+        * NOTE: Despite the fact that character references are decoded, the
+        * returned string may contain character references given certain
+        * clever input strings. These character references must
+        * be escaped before the return value is embedded in HTML.
+        *
+        * @param string $value
+        * @return string
+        */
+       static function checkCss( $value ) {
+               $value = self::normalizeCss( $value );
+
                // Reject problematic keywords and control characters
                if ( preg_match( '/[\000-\010\013\016-\037\177]/', $value ) ) {
                        return '/* invalid control char */';
@@ -1097,8 +1114,9 @@ class Sanitizer {
                global $wgExperimentalHtmlIds;
                $options = (array)$options;
 
+               $id = Sanitizer::decodeCharReferences( $id );
+
                if ( $wgExperimentalHtmlIds && !in_array( 'legacy', $options ) ) {
-                       $id = Sanitizer::decodeCharReferences( $id );
                        $id = preg_replace( '/[ \t\n\r\f_\'"&#%]+/', '_', $id );
                        $id = trim( $id, '_' );
                        if ( $id === '' ) {
@@ -1115,7 +1133,7 @@ class Sanitizer {
                        '%' => '.'
                );
 
-               $id = urlencode( Sanitizer::decodeCharReferences( strtr( $id, ' ', '_' ) ) );
+               $id = urlencode( strtr( $id, ' ', '_' ) );
                $id = str_replace( array_keys( $replace ), array_values( $replace ), $id );
 
                if ( !preg_match( '/^[a-zA-Z]/', $id )
index acceb59..2faf196 100644 (file)
@@ -77,9 +77,12 @@ if ( $wgStyleDirectory === false ) {
 if ( $wgExtensionAssetsPath === false ) {
        $wgExtensionAssetsPath = "$wgScriptPath/extensions";
 }
+if ( $wgResourceBasePath === null ) {
+       $wgResourceBasePath = $wgScriptPath;
+}
 
 if ( $wgLogo === false ) {
-       $wgLogo = "$wgStylePath/common/images/wiki.png";
+       $wgLogo = "$wgResourceBasePath/resources/assets/wiki.png";
 }
 
 if ( $wgUploadPath === false ) {
@@ -102,6 +105,15 @@ if ( $wgGitInfoCacheDirectory === false && $wgCacheDirectory !== false ) {
        $wgGitInfoCacheDirectory = "{$wgCacheDirectory}/gitinfo";
 }
 
+// Fix path to icon images after they were moved in 1.24
+if ( $wgRightsIcon ) {
+       $wgRightsIcon = str_replace(
+               "{$wgStylePath}/common/images/",
+               "{$wgResourceBasePath}/resources/assets/licenses/",
+               $wgRightsIcon
+       );
+}
+
 if ( isset( $wgFooterIcons['copyright'] )
        && isset( $wgFooterIcons['copyright']['copyright'] )
        && $wgFooterIcons['copyright']['copyright'] === array()
@@ -124,7 +136,7 @@ if ( isset( $wgFooterIcons['poweredby'] )
        && $wgFooterIcons['poweredby']['mediawiki']['src'] === null
 ) {
        $wgFooterIcons['poweredby']['mediawiki']['src'] =
-               "$wgStylePath/common/images/poweredby_mediawiki_88x31.png";
+               "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png";
 }
 
 /**
@@ -265,20 +277,25 @@ if ( $wgSkipSkin ) {
 
 // Register skins
 // Use a closure to avoid leaking into global state
-call_user_func( function() use ( $wgValidSkinNames ) {
+call_user_func( function () use ( $wgValidSkinNames ) {
        $factory = SkinFactory::getDefaultInstance();
        foreach ( $wgValidSkinNames as $name => $skin ) {
-               $factory->register( $name, $skin, function() use ( $name, $skin ) {
+               $factory->register( $name, $skin, function () use ( $name, $skin ) {
                        $class = "Skin$skin";
                        return new $class( $name );
                } );
        }
        // Register a hidden "fallback" skin
-       $factory->register( 'fallback', 'Fallback', function() {
+       $factory->register( 'fallback', 'Fallback', function () {
                return new SkinFallback;
        } );
+       // Register a hidden skin for api output
+       $factory->register( 'apioutput', 'ApiOutput', function () {
+               return new SkinApi;
+       } );
 } );
 $wgSkipSkins[] = 'fallback';
+$wgSkipSkins[] = 'apioutput';
 
 if ( $wgLocalInterwiki ) {
        array_unshift( $wgLocalInterwikis, $wgLocalInterwiki );
@@ -302,7 +319,33 @@ if ( !$wgCookiePrefix ) {
 }
 $wgCookiePrefix = strtr( $wgCookiePrefix, '=,; +."\'\\[', '__________' );
 
-$wgUseEnotif = $wgEnotifUserTalk || $wgEnotifWatchlist;
+if ( $wgEnableEmail ) {
+       $wgUseEnotif = $wgEnotifUserTalk || $wgEnotifWatchlist;
+} else {
+       // Disable all other email settings automatically if $wgEnableEmail
+       // is set to false. - bug 63678
+       $wgAllowHTMLEmail = false;
+       $wgEmailAuthentication = false; // do not require auth if you're not sending email anyway
+       $wgEnableUserEmail = false;
+       $wgEnotifFromEditor = false;
+       $wgEnotifImpersonal = false;
+       $wgEnotifMaxRecips = 0;
+       $wgEnotifMinorEdits = false;
+       $wgEnotifRevealEditorAddress = false;
+       $wgEnotifUseJobQ = false;
+       $wgEnotifUseRealName = false;
+       $wgEnotifUserTalk = false;
+       $wgEnotifWatchlist = false;
+       unset( $wgGroupPermissions['user']['sendemail'] );
+       $wgUseEnotif = false;
+       $wgUserEmailUseReplyTo = false;
+       $wgUsersNotifiedOnAllChanges = array();
+}
+
+// Doesn't make sense to have if disabled.
+if ( !$wgEnotifMinorEdits ) {
+       $wgHiddenPrefs[] = 'enotifminoredits';
+}
 
 if ( $wgMetaNamespace === false ) {
        $wgMetaNamespace = str_replace( ' ', '_', $wgSitename );
@@ -355,11 +398,6 @@ if ( $wgUseFileCache || $wgUseSquid ) {
        $wgDebugToolbar = false;
 }
 
-// Doesn't make sense to have if disabled.
-if ( !$wgEnotifMinorEdits ) {
-       $wgHiddenPrefs[] = 'enotifminoredits';
-}
-
 // We always output HTML5 since 1.22, overriding these is no longer supported
 // we set them here for extensions that depend on its value.
 $wgHtml5 = true;
@@ -479,6 +517,10 @@ if ( $wgTmpDirectory === false ) {
        wfProfileOut( $fname . '-tempDir' );
 }
 
+// We don't use counters anymore. Left here for extensions still
+// expecting this to exist. Should be removed sometime 1.26 or later.
+$wgDisableCounters = true;
+
 wfProfileOut( $fname . '-defaults2' );
 wfProfileIn( $fname . '-misc1' );
 
@@ -596,31 +638,11 @@ if ( !is_object( $wgAuth ) ) {
 $wgTitle = null;
 
 /**
- * @deprecated 1.24 Use DeferredUpdates::addUpdate instead
+ * @deprecated since 1.24 Use DeferredUpdates::addUpdate instead
  * @var array
  */
 $wgDeferredUpdateList = array();
 
-// Disable all other email settings automatically if $wgEnableEmail
-// is set to false. - bug 63678
-if ( !$wgEnableEmail ) {
-       $wgAllowHTMLEmail = false;
-       $wgEmailAuthentication = false; // do not require auth if you're not sending email anyway
-       $wgEnableUserEmail = false;
-       $wgEnotifFromEditor = false;
-       $wgEnotifImpersonal = false;
-       $wgEnotifMaxRecips = 0;
-       $wgEnotifMinorEdits = false;
-       $wgEnotifRevealEditorAddress = false;
-       $wgEnotifUseJobQ = false;
-       $wgEnotifUseRealName = false;
-       $wgEnotifUserTalk = false;
-       $wgEnotifWatchlist = false;
-       unset( $wgGroupPermissions['user']['sendemail'] );
-       $wgUserEmailUseReplyTo = false;
-       $wgUsersNotifiedOnAllChanges = array();
-}
-
 wfProfileOut( $fname . '-globals' );
 wfProfileIn( $fname . '-extensions' );
 
index b877544..c3b1a6a 100644 (file)
@@ -133,6 +133,8 @@ class SiteConfiguration {
 
        /**
         * Array of domains that are local and can be handled by the same server
+        *
+        * @deprecated since 1.25; use $wgLocalVirtualHosts instead.
         */
        public $localVHosts = array();
 
@@ -532,7 +534,7 @@ class SiteConfiguration {
                        if ( isset( $this->cfgCache[$wiki] ) ) {
                                $res = array_intersect_key( $this->cfgCache[$wiki], array_flip( $settings ) );
                                if ( count( $res ) == count( $settings ) ) {
-                                       return $res; // cache hit
+                                       return $multi ? $res : current( $res ); // cache hit
                                }
                        } elseif ( !in_array( $wiki, $this->wikis ) ) {
                                throw new MWException( "No such wiki '$wiki'." );
@@ -565,6 +567,8 @@ class SiteConfiguration {
 
        /**
         * Returns true if the given vhost is handled locally.
+        *
+        * @deprecated since 1.25; check if the host is in $wgLocalVirtualHosts instead.
         * @param string $vhost
         * @return bool
         */
index 3dc1793..32c6761 100644 (file)
@@ -102,7 +102,6 @@ class SiteStats {
        static function doLoad( $db ) {
                return $db->selectRow( 'site_stats', array(
                                'ss_row_id',
-                               'ss_total_views',
                                'ss_total_edits',
                                'ss_good_articles',
                                'ss_total_pages',
@@ -113,11 +112,16 @@ class SiteStats {
        }
 
        /**
+        * Return the total number of page views. Except we don't track those anymore.
+        * Stop calling this function, it will be removed some time in the future. It's
+        * kept here simply to prevent fatal errors.
+        *
+        * @deprecated since 1.25
         * @return int
         */
        static function views() {
-               self::load();
-               return self::$row->ss_total_views;
+               wfDeprecated( __METHOD__, '1.25' );
+               return 0;
        }
 
        /**
@@ -249,7 +253,6 @@ class SiteStats {
                }
                // Now check for underflow/overflow
                foreach ( array(
-                       'ss_total_views',
                        'ss_total_edits',
                        'ss_good_articles',
                        'ss_total_pages',
@@ -274,7 +277,7 @@ class SiteStatsInit {
 
        // Various stats
        private $mEdits = null, $mArticles = null, $mPages = null;
-       private $mUsers = null, $mViews = null, $mFiles = null;
+       private $mUsers = null, $mFiles = null;
 
        /**
         * Constructor
@@ -348,15 +351,6 @@ class SiteStatsInit {
                return $this->mUsers;
        }
 
-       /**
-        * Count views
-        * @return int
-        */
-       public function views() {
-               $this->mViews = $this->db->selectField( 'page', 'SUM(page_counter)', '', __METHOD__ );
-               return $this->mViews;
-       }
-
        /**
         * Count total files
         * @return int
@@ -374,11 +368,10 @@ class SiteStatsInit {
         * - Boolean: whether to use the master DB
         * - DatabaseBase: database connection to use
         * @param array $options Array of options, may contain the following values
-        * - views Boolean: when true, do not update the number of page views (default: true)
         * - activeUsers Boolean: whether to update the number of active users (default: false)
         */
        public static function doAllAndCommit( $database, array $options = array() ) {
-               $options += array( 'update' => false, 'views' => true, 'activeUsers' => false );
+               $options += array( 'update' => false, 'activeUsers' => false );
 
                // Grab the object and count everything
                $counter = new SiteStatsInit( $database );
@@ -389,11 +382,6 @@ class SiteStatsInit {
                $counter->users();
                $counter->files();
 
-               // Only do views if we don't want to not count them
-               if ( $options['views'] ) {
-                       $counter->views();
-               }
-
                $counter->refresh();
 
                // Count active users if need be
@@ -403,8 +391,7 @@ class SiteStatsInit {
        }
 
        /**
-        * Refresh site_stats. If you want ss_total_views to be updated, be sure to
-        * call views() first.
+        * Refresh site_stats
         */
        public function refresh() {
                $values = array(
@@ -414,8 +401,6 @@ class SiteStatsInit {
                        'ss_total_pages' => ( $this->mPages === null ? $this->pages() : $this->mPages ),
                        'ss_users' => ( $this->mUsers === null ? $this->users() : $this->mUsers ),
                        'ss_images' => ( $this->mFiles === null ? $this->files() : $this->mFiles ),
-               ) + (
-                       $this->mViews ? array( 'ss_total_views' => $this->mViews ) : array()
                );
 
                $dbw = wfGetDB( DB_MASTER );
index 102fffd..5fc8f2f 100644 (file)
@@ -39,7 +39,11 @@ class StatCounter {
        /** @var array */
        protected $deltas = array(); // (key => count)
 
-       protected function __construct() {
+       /** @var Config */
+       protected $config;
+
+       protected function __construct( Config $config ) {
+               $this->config = $config;
        }
 
        /**
@@ -48,7 +52,9 @@ class StatCounter {
        public static function singleton() {
                static $instance = null;
                if ( !$instance ) {
-                       $instance = new self();
+                       $instance = new self(
+                               ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
+                       );
                }
                return $instance;
        }
@@ -74,12 +80,11 @@ class StatCounter {
         * @return void
         */
        public function flush() {
-               global $wgStatsMethod;
-
+               $statsMethod = $this->config->get( 'StatsMethod' );
                $deltas = array_filter( $this->deltas ); // remove 0 valued entries
-               if ( $wgStatsMethod === 'udp' ) {
+               if ( $statsMethod === 'udp' ) {
                        $this->sendDeltasUDP( $deltas );
-               } elseif ( $wgStatsMethod === 'cache' ) {
+               } elseif ( $statsMethod === 'cache' ) {
                        $this->sendDeltasMemc( $deltas );
                } else {
                        // disabled
@@ -92,14 +97,12 @@ class StatCounter {
         * @return void
         */
        protected function sendDeltasUDP( array $deltas ) {
-               global $wgUDPProfilerHost, $wgUDPProfilerPort, $wgAggregateStatsID,
-                       $wgStatsFormatString;
-
-               $id = strlen( $wgAggregateStatsID ) ? $wgAggregateStatsID : wfWikiID();
+               $aggregateStatsID = $this->config->get( 'AggregateStatsID' );
+               $id = strlen( $aggregateStatsID ) ? $aggregateStatsID : wfWikiID();
 
                $lines = array();
                foreach ( $deltas as $key => $count ) {
-                       $lines[] = sprintf( $wgStatsFormatString, $id, $count, $key );
+                       $lines[] = sprintf( $this->config->get( 'StatsFormatString' ), $id, $count, $key );
                }
 
                if ( count( $lines ) ) {
@@ -126,8 +129,8 @@ class StatCounter {
                                        $packet,
                                        strlen( $packet ),
                                        0,
-                                       $wgUDPProfilerHost,
-                                       $wgUDPProfilerPort
+                                       $this->config->get( 'UDPProfilerHost' ),
+                                       $this->config->get( 'UDPProfilerPort' )
                                );
                                wfRestoreWarnings();
                        }
index 1a72968..0a8062c 100644 (file)
@@ -159,6 +159,15 @@ class Status {
                $this->ok = false;
        }
 
+       /**
+        * Don't save the callback when serializing, because Closures can't be
+        * serialized and we're going to clear it in __wakeup anyway.
+        */
+       public function __sleep() {
+               $keys = array_keys( get_object_vars( $this ) );
+               return array_diff( $keys, array( 'cleanCallback' ) );
+       }
+
        /**
         * Sanitize the callback parameter on wakeup, to avoid arbitrary execution.
         */
@@ -184,9 +193,9 @@ class Status {
        /**
         * Get the error list as a wikitext formatted list
         *
-        * @param string $shortContext A short enclosing context message name, to
+        * @param string|bool $shortContext A short enclosing context message name, to
         *        be used when there is a single error
-        * @param string $longContext A long enclosing context message name, for a list
+        * @param string|bool $longContext A long enclosing context message name, for a list
         * @return string
         */
        public function getWikiText( $shortContext = false, $longContext = false ) {
diff --git a/includes/TimestampException.php b/includes/TimestampException.php
deleted file mode 100644 (file)
index b9c0c35..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-/**
- * @since 1.20
- */
-class TimestampException extends MWException {
-}
index bcf9cbd..b97d36a 100644 (file)
@@ -795,7 +795,8 @@ class Title {
 
        /**
         * Determine whether the object refers to a page within
-        * this project.
+        * this project (either this wiki or a wiki with a local
+        * interwiki, see https://www.mediawiki.org/wiki/Manual:Interwiki_table#iw_local )
         *
         * @return bool True if this is an in-project interwiki link or a wikilink, false otherwise
         */
@@ -2231,19 +2232,13 @@ class Title {
                } elseif ( $action == 'create' ) {
                        $title_protection = $this->getTitleProtection();
                        if ( $title_protection ) {
-                               if ( $title_protection['pt_create_perm'] == 'sysop' ) {
-                                       $title_protection['pt_create_perm'] = 'editprotected'; // B/C
-                               }
-                               if ( $title_protection['pt_create_perm'] == 'autoconfirmed' ) {
-                                       $title_protection['pt_create_perm'] = 'editsemiprotected'; // B/C
-                               }
-                               if ( $title_protection['pt_create_perm'] == ''
-                                       || !$user->isAllowed( $title_protection['pt_create_perm'] )
+                               if ( $title_protection['permission'] == ''
+                                       || !$user->isAllowed( $title_protection['permission'] )
                                ) {
                                        $errors[] = array(
                                                'titleprotected',
-                                               User::whoIs( $title_protection['pt_user'] ),
-                                               $title_protection['pt_reason']
+                                               User::whoIs( $title_protection['user'] ),
+                                               $title_protection['reason']
                                        );
                                }
                        }
@@ -2265,7 +2260,7 @@ class Title {
                } elseif ( $action == 'delete' ) {
                        $tempErrors = $this->checkPageRestrictions( 'edit',
                                $user, array(), $doExpensiveQueries, true );
-                       if( !$tempErrors ) {
+                       if ( !$tempErrors ) {
                                $tempErrors = $this->checkCascadingSourcesRestrictions( 'edit',
                                        $user, $tempErrors, $doExpensiveQueries, true );
                        }
@@ -2535,7 +2530,7 @@ class Title {
         * @return array|bool An associative array representing any existent title
         *   protection, or false if there's none.
         */
-       private function getTitleProtection() {
+       public function getTitleProtection() {
                // Can't protect pages in special namespaces
                if ( $this->getNamespace() < 0 ) {
                        return false;
@@ -2550,13 +2545,27 @@ class Title {
                        $dbr = wfGetDB( DB_SLAVE );
                        $res = $dbr->select(
                                'protected_titles',
-                               array( 'pt_user', 'pt_reason', 'pt_expiry', 'pt_create_perm' ),
+                               array(
+                                       'user' => 'pt_user',
+                                       'reason' => 'pt_reason',
+                                       'expiry' => 'pt_expiry',
+                                       'permission' => 'pt_create_perm'
+                               ),
                                array( 'pt_namespace' => $this->getNamespace(), 'pt_title' => $this->getDBkey() ),
                                __METHOD__
                        );
 
                        // fetchRow returns false if there are no rows.
-                       $this->mTitleProtection = $dbr->fetchRow( $res );
+                       $row = $dbr->fetchRow( $res );
+                       if ( $row ) {
+                               if ( $row['permission'] == 'sysop' ) {
+                                       $row['permission'] = 'editprotected'; // B/C
+                               }
+                               if ( $row['permission'] == 'autoconfirmed' ) {
+                                       $row['permission'] = 'editsemiprotected'; // B/C
+                               }
+                       }
+                       $this->mTitleProtection = $row;
                }
                return $this->mTitleProtection;
        }
@@ -2977,12 +2986,12 @@ class Title {
 
                                if ( $title_protection ) {
                                        $now = wfTimestampNow();
-                                       $expiry = $wgContLang->formatExpiry( $title_protection['pt_expiry'], TS_MW );
+                                       $expiry = $wgContLang->formatExpiry( $title_protection['expiry'], TS_MW );
 
                                        if ( !$expiry || $expiry > $now ) {
                                                // Apply the restrictions
                                                $this->mRestrictionsExpiry['create'] = $expiry;
-                                               $this->mRestrictions['create'] = explode( ',', trim( $title_protection['pt_create_perm'] ) );
+                                               $this->mRestrictions['create'] = explode( ',', trim( $title_protection['permission'] ) );
                                        } else { // Get rid of the old restrictions
                                                Title::purgeExpiredRestrictions();
                                                $this->mTitleProtection = false;
@@ -3578,10 +3587,12 @@ class Title {
        /**
         * Move this page without authentication
         *
+        * @deprecated since 1.25 use MovePage class instead
         * @param Title $nt The new page Title
         * @return array|bool True on success, getUserPermissionsErrors()-like array on failure
         */
        public function moveNoAuth( &$nt ) {
+               wfDeprecated( __METHOD__, '1.25' );
                return $this->moveTo( $nt, false );
        }
 
@@ -3589,116 +3600,33 @@ class Title {
         * Check whether a given move operation would be valid.
         * Returns true if ok, or a getUserPermissionsErrors()-like array otherwise
         *
+        * @deprecated since 1.25, use MovePage's methods instead
         * @param Title $nt The new title
-        * @param bool $auth Indicates whether $wgUser's permissions
-        *  should be checked
+        * @param bool $auth Ignored
         * @param string $reason Is the log summary of the move, used for spam checking
         * @return array|bool True on success, getUserPermissionsErrors()-like array on failure
         */
        public function isValidMoveOperation( &$nt, $auth = true, $reason = '' ) {
-               global $wgUser, $wgContentHandlerUseDB;
+               global $wgUser;
 
-               $errors = array();
-               if ( !$nt ) {
+               if ( !( $nt instanceof Title ) ) {
                        // Normally we'd add this to $errors, but we'll get
                        // lots of syntax errors if $nt is not an object
                        return array( array( 'badtitletext' ) );
                }
-               if ( $this->equals( $nt ) ) {
-                       $errors[] = array( 'selfmove' );
-               }
-               if ( !$this->isMovable() ) {
-                       $errors[] = array( 'immobile-source-namespace', $this->getNsText() );
-               }
-               if ( $nt->isExternal() ) {
-                       $errors[] = array( 'immobile-target-namespace-iw' );
-               }
-               if ( !$nt->isMovable() ) {
-                       $errors[] = array( 'immobile-target-namespace', $nt->getNsText() );
-               }
-
-               $oldid = $this->getArticleID();
-               $newid = $nt->getArticleID();
-
-               if ( strlen( $nt->getDBkey() ) < 1 ) {
-                       $errors[] = array( 'articleexists' );
-               }
-               if (
-                       ( $this->getDBkey() == '' ) ||
-                       ( !$oldid ) ||
-                       ( $nt->getDBkey() == '' )
-               ) {
-                       $errors[] = array( 'badarticleerror' );
-               }
-
-               // Content model checks
-               if ( !$wgContentHandlerUseDB &&
-                               $this->getContentModel() !== $nt->getContentModel() ) {
-                       // can't move a page if that would change the page's content model
-                       $errors[] = array(
-                               'bad-target-model',
-                               ContentHandler::getLocalizedName( $this->getContentModel() ),
-                               ContentHandler::getLocalizedName( $nt->getContentModel() )
-                       );
-               }
 
-               // Image-specific checks
-               if ( $this->getNamespace() == NS_FILE ) {
-                       $errors = array_merge( $errors, $this->validateFileMoveOperation( $nt ) );
-               }
-
-               if ( $nt->getNamespace() == NS_FILE && $this->getNamespace() != NS_FILE ) {
-                       $errors[] = array( 'nonfile-cannot-move-to-file' );
-               }
-
-               if ( $auth ) {
-                       $errors = wfMergeErrorArrays( $errors,
-                               $this->getUserPermissionsErrors( 'move', $wgUser ),
-                               $this->getUserPermissionsErrors( 'edit', $wgUser ),
-                               $nt->getUserPermissionsErrors( 'move-target', $wgUser ),
-                               $nt->getUserPermissionsErrors( 'edit', $wgUser ) );
-               }
-
-               $match = EditPage::matchSummarySpamRegex( $reason );
-               if ( $match !== false ) {
-                       // This is kind of lame, won't display nice
-                       $errors[] = array( 'spamprotectiontext' );
-               }
-
-               $err = null;
-               if ( !wfRunHooks( 'AbortMove', array( $this, $nt, $wgUser, &$err, $reason ) ) ) {
-                       $errors[] = array( 'hookaborted', $err );
-               }
-
-               # The move is allowed only if (1) the target doesn't exist, or
-               # (2) the target is a redirect to the source, and has no history
-               # (so we can undo bad moves right after they're done).
+               $mp = new MovePage( $this, $nt );
+               $errors = wfMergeErrorArrays(
+                       $mp->isValidMove()->getErrorsArray(),
+                       $mp->checkPermissions( $wgUser, $reason )->getErrorsArray()
+               );
 
-               if ( 0 != $newid ) { # Target exists; check for validity
-                       if ( !$this->isValidMoveTarget( $nt ) ) {
-                               $errors[] = array( 'articleexists' );
-                       }
-               } else {
-                       $tp = $nt->getTitleProtection();
-                       $right = $tp['pt_create_perm'];
-                       if ( $right == 'sysop' ) {
-                               $right = 'editprotected'; // B/C
-                       }
-                       if ( $right == 'autoconfirmed' ) {
-                               $right = 'editsemiprotected'; // B/C
-                       }
-                       if ( $tp and !$wgUser->isAllowed( $right ) ) {
-                               $errors[] = array( 'cantmove-titleprotected' );
-                       }
-               }
-               if ( empty( $errors ) ) {
-                       return true;
-               }
-               return $errors;
+               return $errors ? : true;
        }
 
        /**
         * Check if the requested move target is a valid file move target
+        * @todo move this to MovePage
         * @param Title $nt Target title
         * @return array List of errors
         */
@@ -3707,27 +3635,6 @@ class Title {
 
                $errors = array();
 
-               // wfFindFile( $nt ) / wfLocalFile( $nt ) is not allowed until below
-
-               $file = wfLocalFile( $this );
-               if ( $file->exists() ) {
-                       if ( $nt->getText() != wfStripIllegalFilenameChars( $nt->getText() ) ) {
-                               $errors[] = array( 'imageinvalidfilename' );
-                       }
-                       if ( !File::checkExtensionCompatibility( $file, $nt->getDBkey() ) ) {
-                               $errors[] = array( 'imagetypemismatch' );
-                       }
-               }
-
-               if ( $nt->getNamespace() != NS_FILE ) {
-                       $errors[] = array( 'imagenocrossnamespace' );
-                       // From here we want to do checks on a file object, so if we can't
-                       // create one, we must return.
-                       return $errors;
-               }
-
-               // wfFindFile( $nt ) / wfLocalFile( $nt ) is allowed below here
-
                $destFile = wfLocalFile( $nt );
                if ( !$wgUser->isAllowed( 'reupload-shared' ) && !$destFile->exists() && wfFindFile( $nt ) ) {
                        $errors[] = array( 'file-exists-sharedrepo' );
@@ -3739,6 +3646,7 @@ class Title {
        /**
         * Move a title to a new location
         *
+        * @deprecated since 1.25, use the MovePage class instead
         * @param Title $nt The new title
         * @param bool $auth Indicates whether $wgUser's permissions
         *  should be checked
@@ -3760,279 +3668,13 @@ class Title {
                        $createRedirect = true;
                }
 
-               wfRunHooks( 'TitleMove', array( $this, $nt, $wgUser ) );
-
-               // If it is a file, move it first.
-               // It is done before all other moving stuff is done because it's hard to revert.
-               $dbw = wfGetDB( DB_MASTER );
-               if ( $this->getNamespace() == NS_FILE ) {
-                       $file = wfLocalFile( $this );
-                       if ( $file->exists() ) {
-                               $status = $file->move( $nt );
-                               if ( !$status->isOk() ) {
-                                       return $status->getErrorsArray();
-                               }
-                       }
-                       // Clear RepoGroup process cache
-                       RepoGroup::singleton()->clearCache( $this );
-                       RepoGroup::singleton()->clearCache( $nt ); # clear false negative cache
-               }
-
-               $dbw->begin( __METHOD__ ); # If $file was a LocalFile, its transaction would have closed our own.
-               $pageid = $this->getArticleID( self::GAID_FOR_UPDATE );
-               $protected = $this->isProtected();
-
-               // Do the actual move
-               $this->moveToInternal( $nt, $reason, $createRedirect );
-
-               // Refresh the sortkey for this row.  Be careful to avoid resetting
-               // cl_timestamp, which may disturb time-based lists on some sites.
-               $prefixes = $dbw->select(
-                       'categorylinks',
-                       array( 'cl_sortkey_prefix', 'cl_to' ),
-                       array( 'cl_from' => $pageid ),
-                       __METHOD__
-               );
-               foreach ( $prefixes as $prefixRow ) {
-                       $prefix = $prefixRow->cl_sortkey_prefix;
-                       $catTo = $prefixRow->cl_to;
-                       $dbw->update( 'categorylinks',
-                               array(
-                                       'cl_sortkey' => Collation::singleton()->getSortKey(
-                                               $nt->getCategorySortkey( $prefix ) ),
-                                       'cl_timestamp=cl_timestamp' ),
-                               array(
-                                       'cl_from' => $pageid,
-                                       'cl_to' => $catTo ),
-                               __METHOD__
-                       );
-               }
-
-               $redirid = $this->getArticleID();
-
-               if ( $protected ) {
-                       # Protect the redirect title as the title used to be...
-                       $dbw->insertSelect( 'page_restrictions', 'page_restrictions',
-                               array(
-                                       'pr_page' => $redirid,
-                                       'pr_type' => 'pr_type',
-                                       'pr_level' => 'pr_level',
-                                       'pr_cascade' => 'pr_cascade',
-                                       'pr_user' => 'pr_user',
-                                       'pr_expiry' => 'pr_expiry'
-                               ),
-                               array( 'pr_page' => $pageid ),
-                               __METHOD__,
-                               array( 'IGNORE' )
-                       );
-                       # Update the protection log
-                       $log = new LogPage( 'protect' );
-                       $comment = wfMessage(
-                               'prot_1movedto2',
-                               $this->getPrefixedText(),
-                               $nt->getPrefixedText()
-                       )->inContentLanguage()->text();
-                       if ( $reason ) {
-                               $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
-                       }
-                       // @todo FIXME: $params?
-                       $logId = $log->addEntry(
-                               'move_prot',
-                               $nt,
-                               $comment,
-                               array( $this->getPrefixedText() ),
-                               $wgUser
-                       );
-
-                       // reread inserted pr_ids for log relation
-                       $insertedPrIds = $dbw->select(
-                               'page_restrictions',
-                               'pr_id',
-                               array( 'pr_page' => $redirid ),
-                               __METHOD__
-                       );
-                       $logRelationsValues = array();
-                       foreach ( $insertedPrIds as $prid ) {
-                               $logRelationsValues[] = $prid->pr_id;
-                       }
-                       $log->addRelations( 'pr_id', $logRelationsValues, $logId );
-               }
-
-               // Update *_from_namespace fields as needed
-               if ( $this->getNamespace() != $nt->getNamespace() ) {
-                       $dbw->update( 'pagelinks',
-                               array( 'pl_from_namespace' => $nt->getNamespace() ),
-                               array( 'pl_from' => $pageid ),
-                               __METHOD__
-                       );
-                       $dbw->update( 'templatelinks',
-                               array( 'tl_from_namespace' => $nt->getNamespace() ),
-                               array( 'tl_from' => $pageid ),
-                               __METHOD__
-                       );
-                       $dbw->update( 'imagelinks',
-                               array( 'il_from_namespace' => $nt->getNamespace() ),
-                               array( 'il_from' => $pageid ),
-                               __METHOD__
-                       );
-               }
-
-               # Update watchlists
-               $oldtitle = $this->getDBkey();
-               $newtitle = $nt->getDBkey();
-               $oldsnamespace = MWNamespace::getSubject( $this->getNamespace() );
-               $newsnamespace = MWNamespace::getSubject( $nt->getNamespace() );
-               if ( $oldsnamespace != $newsnamespace || $oldtitle != $newtitle ) {
-                       WatchedItem::duplicateEntries( $this, $nt );
-               }
-
-               $dbw->commit( __METHOD__ );
-
-               wfRunHooks( 'TitleMoveComplete', array( &$this, &$nt, &$wgUser, $pageid, $redirid, $reason ) );
-               return true;
-       }
-
-       /**
-        * Move page to a title which is either a redirect to the
-        * source page or nonexistent
-        *
-        * @param Title $nt The page to move to, which should be a redirect or nonexistent
-        * @param string $reason The reason for the move
-        * @param bool $createRedirect Whether to leave a redirect at the old title. Does not check
-        *   if the user has the suppressredirect right
-        * @throws MWException
-        */
-       private function moveToInternal( &$nt, $reason = '', $createRedirect = true ) {
-               global $wgUser, $wgContLang;
-
-               if ( $nt->exists() ) {
-                       $moveOverRedirect = true;
-                       $logType = 'move_redir';
-               } else {
-                       $moveOverRedirect = false;
-                       $logType = 'move';
-               }
-
-               if ( $createRedirect ) {
-                       if ( $this->getNamespace() == NS_CATEGORY
-                               && !wfMessage( 'category-move-redirect-override' )->inContentLanguage()->isDisabled()
-                       ) {
-                               $redirectContent = new WikitextContent(
-                                       wfMessage( 'category-move-redirect-override' )
-                                               ->params( $nt->getPrefixedText() )->inContentLanguage()->plain() );
-                       } else {
-                               $contentHandler = ContentHandler::getForTitle( $this );
-                               $redirectContent = $contentHandler->makeRedirectContent( $nt,
-                                       wfMessage( 'move-redirect-text' )->inContentLanguage()->plain() );
-                       }
-
-                       // NOTE: If this page's content model does not support redirects, $redirectContent will be null.
+               $mp = new MovePage( $this, $nt );
+               $status = $mp->move( $wgUser, $reason, $createRedirect );
+               if ( $status->isOK() ) {
+                       return true;
                } else {
-                       $redirectContent = null;
+                       return $status->getErrorsArray();
                }
-
-               $logEntry = new ManualLogEntry( 'move', $logType );
-               $logEntry->setPerformer( $wgUser );
-               $logEntry->setTarget( $this );
-               $logEntry->setComment( $reason );
-               $logEntry->setParameters( array(
-                       '4::target' => $nt->getPrefixedText(),
-                       '5::noredir' => $redirectContent ? '0': '1',
-               ) );
-
-               $formatter = LogFormatter::newFromEntry( $logEntry );
-               $formatter->setContext( RequestContext::newExtraneousContext( $this ) );
-               $comment = $formatter->getPlainActionText();
-               if ( $reason ) {
-                       $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
-               }
-               # Truncate for whole multibyte characters.
-               $comment = $wgContLang->truncate( $comment, 255 );
-
-               $oldid = $this->getArticleID();
-
-               $dbw = wfGetDB( DB_MASTER );
-
-               $newpage = WikiPage::factory( $nt );
-
-               if ( $moveOverRedirect ) {
-                       $newid = $nt->getArticleID();
-                       $newcontent = $newpage->getContent();
-
-                       # Delete the old redirect. We don't save it to history since
-                       # by definition if we've got here it's rather uninteresting.
-                       # We have to remove it so that the next step doesn't trigger
-                       # a conflict on the unique namespace+title index...
-                       $dbw->delete( 'page', array( 'page_id' => $newid ), __METHOD__ );
-
-                       $newpage->doDeleteUpdates( $newid, $newcontent );
-               }
-
-               # Save a null revision in the page's history notifying of the move
-               $nullRevision = Revision::newNullRevision( $dbw, $oldid, $comment, true, $wgUser );
-               if ( !is_object( $nullRevision ) ) {
-                       throw new MWException( 'No valid null revision produced in ' . __METHOD__ );
-               }
-
-               $nullRevision->insertOn( $dbw );
-
-               # Change the name of the target page:
-               $dbw->update( 'page',
-                       /* SET */ array(
-                               'page_namespace' => $nt->getNamespace(),
-                               'page_title' => $nt->getDBkey(),
-                       ),
-                       /* WHERE */ array( 'page_id' => $oldid ),
-                       __METHOD__
-               );
-
-               // clean up the old title before reset article id - bug 45348
-               if ( !$redirectContent ) {
-                       WikiPage::onArticleDelete( $this );
-               }
-
-               $this->resetArticleID( 0 ); // 0 == non existing
-               $nt->resetArticleID( $oldid );
-               $newpage->loadPageData( WikiPage::READ_LOCKING ); // bug 46397
-
-               $newpage->updateRevisionOn( $dbw, $nullRevision );
-
-               wfRunHooks( 'NewRevisionFromEditComplete',
-                       array( $newpage, $nullRevision, $nullRevision->getParentId(), $wgUser ) );
-
-               $newpage->doEditUpdates( $nullRevision, $wgUser, array( 'changed' => false ) );
-
-               if ( !$moveOverRedirect ) {
-                       WikiPage::onArticleCreate( $nt );
-               }
-
-               # Recreate the redirect, this time in the other direction.
-               if ( $redirectContent ) {
-                       $redirectArticle = WikiPage::factory( $this );
-                       $redirectArticle->loadFromRow( false, WikiPage::READ_LOCKING ); // bug 46397
-                       $newid = $redirectArticle->insertOn( $dbw );
-                       if ( $newid ) { // sanity
-                               $this->resetArticleID( $newid );
-                               $redirectRevision = new Revision( array(
-                                       'title' => $this, // for determining the default content model
-                                       'page' => $newid,
-                                       'user_text' => $wgUser->getName(),
-                                       'user' => $wgUser->getId(),
-                                       'comment' => $comment,
-                                       'content' => $redirectContent ) );
-                               $redirectRevision->insertOn( $dbw );
-                               $redirectArticle->updateRevisionOn( $dbw, $redirectRevision, 0 );
-
-                               wfRunHooks( 'NewRevisionFromEditComplete',
-                                       array( $redirectArticle, $redirectRevision, false, $wgUser ) );
-
-                               $redirectArticle->doEditUpdates( $redirectRevision, $wgUser, array( 'created' => true ) );
-                       }
-               }
-
-               # Log the move
-               $logid = $logEntry->insert();
-               $logEntry->publish( $logid );
        }
 
        /**
@@ -4161,6 +3803,7 @@ class Title {
         * Checks if $this can be moved to a given Title
         * - Selects for update, so don't call it unless you mean business
         *
+        * @deprecated since 1.25, use MovePage's methods instead
         * @param Title $nt The new title to check
         * @return bool
         */
@@ -4595,7 +4238,9 @@ class Title {
         * @return bool
         */
        public function exists() {
-               return $this->getArticleID() != 0;
+               $exists = $this->getArticleID() != 0;
+               wfRunHooks( 'TitleExists', array( $this, &$exists ) );
+               return $exists;
        }
 
        /**
index 665edb9..90d33fb 100644 (file)
@@ -357,21 +357,14 @@ class User implements IDBAccessObject {
         * @return bool False if the ID does not exist, true otherwise
         */
        public function loadFromId() {
-               global $wgMemc;
                if ( $this->mId == 0 ) {
                        $this->loadDefaults();
                        return false;
                }
 
                // Try cache
-               $key = wfMemcKey( 'user', 'id', $this->mId );
-               $data = $wgMemc->get( $key );
-               if ( !is_array( $data ) || $data['mVersion'] != self::VERSION ) {
-                       // Object is expired, load from DB
-                       $data = false;
-               }
-
-               if ( !$data ) {
+               $cache = $this->loadFromCache();
+               if ( !$cache ) {
                        wfDebug( "User: cache miss for user {$this->mId}\n" );
                        // Load from DB
                        if ( !$this->loadFromDatabase() ) {
@@ -379,12 +372,6 @@ class User implements IDBAccessObject {
                                return false;
                        }
                        $this->saveToCache();
-               } else {
-                       wfDebug( "User: got user {$this->mId} from cache\n" );
-                       // Restore from cache
-                       foreach ( self::$mCacheVars as $name ) {
-                               $this->$name = $data[$name];
-                       }
                }
 
                $this->mLoadedItems = true;
@@ -392,6 +379,37 @@ class User implements IDBAccessObject {
                return true;
        }
 
+       /**
+        * Load user data from shared cache, given mId has already been set.
+        *
+        * @return bool false if the ID does not exist or data is invalid, true otherwise
+        * @since 1.25
+        */
+       public function loadFromCache() {
+               global $wgMemc;
+
+               if ( $this->mId == 0 ) {
+                       $this->loadDefaults();
+                       return false;
+               }
+
+               $key = wfMemcKey( 'user', 'id', $this->mId );
+               $data = $wgMemc->get( $key );
+               if ( !is_array( $data ) || $data['mVersion'] < self::VERSION ) {
+                       // Object is expired
+                       return false;
+               }
+
+               wfDebug( "User: got user {$this->mId} from cache\n" );
+
+               // Restore from cache
+               foreach ( self::$mCacheVars as $name ) {
+                       $this->$name = $data[$name];
+               }
+
+               return true;
+       }
+
        /**
         * Save user data to the shared cache
         */
@@ -829,7 +847,7 @@ class User implements IDBAccessObject {
         * @param int $ts Optional timestamp to convert, default 0 for the current time
         */
        public function expirePassword( $ts = 0 ) {
-               $this->load();
+               $this->loadPasswords();
                $timestamp = wfTimestamp( TS_MW, $ts );
                $this->mPasswordExpires = $timestamp;
                $this->saveSettings();
@@ -1734,7 +1752,9 @@ class User implements IDBAccessObject {
                // If more than one group applies, use the group with the highest limit
                foreach ( $this->getGroups() as $group ) {
                        if ( isset( $limits[$group] ) ) {
-                               if ( $userLimit === false || $limits[$group] > $userLimit ) {
+                               if ( $userLimit === false
+                                       || $limits[$group][0] / $limits[$group][1] > $userLimit[0] / $userLimit[1]
+                               ) {
                                        $userLimit = $limits[$group];
                                }
                        }
@@ -1885,7 +1905,6 @@ class User implements IDBAccessObject {
                        return $this->mLocked;
                }
                global $wgAuth;
-               StubObject::unstub( $wgAuth );
                $authUser = $wgAuth->getUserInstance( $this );
                $this->mLocked = (bool)$authUser->isLocked();
                return $this->mLocked;
@@ -1903,7 +1922,6 @@ class User implements IDBAccessObject {
                $this->getBlockedStatus();
                if ( !$this->mHideName ) {
                        global $wgAuth;
-                       StubObject::unstub( $wgAuth );
                        $authUser = $wgAuth->getUserInstance( $this );
                        $this->mHideName = (bool)$authUser->isHidden();
                }
@@ -2335,11 +2353,7 @@ class User implements IDBAccessObject {
                $this->setToken();
 
                $passwordFactory = self::getPasswordFactory();
-               if ( $str === null ) {
-                       $this->mPassword = $passwordFactory->newFromCiphertext( null );
-               } else {
-                       $this->mPassword = $passwordFactory->newFromPlaintext( $str );
-               }
+               $this->mPassword = $passwordFactory->newFromPlaintext( $str );
 
                $this->mNewpassword = $passwordFactory->newFromCiphertext( null );
                $this->mNewpassTime = null;
@@ -2384,14 +2398,11 @@ class User implements IDBAccessObject {
        public function setNewpassword( $str, $throttle = true ) {
                $this->loadPasswords();
 
+               $this->mNewpassword = self::getPasswordFactory()->newFromPlaintext( $str );
                if ( $str === null ) {
-                       $this->mNewpassword = '';
                        $this->mNewpassTime = null;
-               } else {
-                       $this->mNewpassword = self::getPasswordFactory()->newFromPlaintext( $str );
-                       if ( $throttle ) {
-                               $this->mNewpassTime = wfTimestampNow();
-                       }
+               } elseif ( $throttle ) {
+                       $this->mNewpassTime = wfTimestampNow();
                }
        }
 
@@ -3788,12 +3799,14 @@ class User implements IDBAccessObject {
         */
        public function checkPassword( $password ) {
                global $wgAuth, $wgLegacyEncoding;
+
+               $section = new ProfileSection( __METHOD__ );
+
                $this->loadPasswords();
 
                // 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).
-
                if ( $wgAuth->authenticate( $this->getName(), $password ) ) {
                        return true;
                } elseif ( $wgAuth->strict() ) {
@@ -3804,7 +3817,6 @@ class User implements IDBAccessObject {
                        return false;
                }
 
-               $passwordFactory = self::getPasswordFactory();
                if ( !$this->mPassword->equals( $password ) ) {
                        if ( $wgLegacyEncoding ) {
                                // Some wikis were converted from ISO 8859-1 to UTF-8, the passwords can't be converted
@@ -3818,6 +3830,7 @@ class User implements IDBAccessObject {
                        }
                }
 
+               $passwordFactory = self::getPasswordFactory();
                if ( $passwordFactory->needsUpdate( $this->mPassword ) ) {
                        $this->mPassword = $passwordFactory->newFromPlaintext( $password );
                        $this->saveSettings();
@@ -3864,22 +3877,15 @@ class User implements IDBAccessObject {
        }
 
        /**
-        * Initialize (if necessary) and return a session token value
-        * which can be used in edit forms to show that the user's
-        * login credentials aren't being hijacked with a foreign form
-        * submission.
-        *
-        * @since 1.19
+        * Internal implementation for self::getEditToken() and
+        * self::matchEditToken().
         *
-        * @param string|array $salt Array of Strings Optional function-specific data for hashing
-        * @param WebRequest|null $request WebRequest object to use or null to use $wgRequest
-        * @return string The new edit token
+        * @param string|array $salt
+        * @param WebRequest $request
+        * @param string|int $timestamp
+        * @return string
         */
-       public function getEditToken( $salt = '', $request = null ) {
-               if ( $request == null ) {
-                       $request = $this->getRequest();
-               }
-
+       private function getEditTokenAtTimestamp( $salt, $request, $timestamp ) {
                if ( $this->isAnon() ) {
                        return self::EDIT_TOKEN_SUFFIX;
                } else {
@@ -3891,10 +3897,30 @@ class User implements IDBAccessObject {
                        if ( is_array( $salt ) ) {
                                $salt = implode( '|', $salt );
                        }
-                       return md5( $token . $salt ) . self::EDIT_TOKEN_SUFFIX;
+                       return hash_hmac( 'md5', $timestamp . $salt, $token, false ) .
+                               dechex( $timestamp ) .
+                               self::EDIT_TOKEN_SUFFIX;
                }
        }
 
+       /**
+        * Initialize (if necessary) and return a session token value
+        * which can be used in edit forms to show that the user's
+        * login credentials aren't being hijacked with a foreign form
+        * submission.
+        *
+        * @since 1.19
+        *
+        * @param string|array $salt Array of Strings Optional function-specific data for hashing
+        * @param WebRequest|null $request WebRequest object to use or null to use $wgRequest
+        * @return string The new edit token
+        */
+       public function getEditToken( $salt = '', $request = null ) {
+               return $this->getEditTokenAtTimestamp(
+                       $salt, $request ?: $this->getRequest(), wfTimestamp()
+               );
+       }
+
        /**
         * Generate a looking random token for various uses.
         *
@@ -3915,15 +3941,34 @@ class User implements IDBAccessObject {
         * @param string $val Input value to compare
         * @param string $salt Optional function-specific data for hashing
         * @param WebRequest|null $request Object to use or null to use $wgRequest
+        * @param int $maxage Fail tokens older than this, in seconds
         * @return bool Whether the token matches
         */
-       public function matchEditToken( $val, $salt = '', $request = null ) {
-               $sessionToken = $this->getEditToken( $salt, $request );
+       public function matchEditToken( $val, $salt = '', $request = null, $maxage = null ) {
+               if ( $this->isAnon() ) {
+                       return $val === self::EDIT_TOKEN_SUFFIX;
+               }
+
+               $suffixLen = strlen( self::EDIT_TOKEN_SUFFIX );
+               if ( strlen( $val ) <= 32 + $suffixLen ) {
+                       return false;
+               }
+
+               $timestamp = hexdec( substr( $val, 32, -$suffixLen ) );
+               if ( $maxage !== null && $timestamp < wfTimestamp() - $maxage ) {
+                       // Expired token
+                       return false;
+               }
+
+               $sessionToken = $this->getEditTokenAtTimestamp(
+                       $salt, $request ?: $this->getRequest(), $timestamp
+               );
+
                if ( $val != $sessionToken ) {
                        wfDebug( "User::matchEditToken: broken session data\n" );
                }
 
-               return $val == $sessionToken;
+               return hash_equals( $sessionToken, $val );
        }
 
        /**
@@ -3933,11 +3978,12 @@ class User implements IDBAccessObject {
         * @param string $val Input value to compare
         * @param string $salt Optional function-specific data for hashing
         * @param WebRequest|null $request Object to use or null to use $wgRequest
+        * @param int $maxage Fail tokens older than this, in seconds
         * @return bool Whether the token matches
         */
-       public function matchEditTokenNoSuffix( $val, $salt = '', $request = null ) {
-               $sessionToken = $this->getEditToken( $salt, $request );
-               return substr( $sessionToken, 0, 32 ) == substr( $val, 0, 32 );
+       public function matchEditTokenNoSuffix( $val, $salt = '', $request = null, $maxage = null ) {
+               $val = substr( $val, 0, strspn( $val, '0123456789abcdef' ) ) . self::EDIT_TOKEN_SUFFIX;
+               return $this->matchEditToken( $val, $salt, $request, $maxage );
        }
 
        /**
@@ -3992,10 +4038,10 @@ class User implements IDBAccessObject {
                        $sender = new MailAddress( $wgPasswordSender,
                                wfMessage( 'emailsender' )->inContentLanguage()->text() );
                } else {
-                       $sender = new MailAddress( $from );
+                       $sender = MailAddress::newFromUser( $from );
                }
 
-               $to = new MailAddress( $this );
+               $to = MailAddress::newFromUser( $this );
                return UserMailer::send( $to, $sender, $subject, $body, $replyto );
        }
 
diff --git a/includes/UserMailer.php b/includes/UserMailer.php
deleted file mode 100644 (file)
index 0ce9b5a..0000000
+++ /dev/null
@@ -1,949 +0,0 @@
-<?php
-/**
- * Classes used to send e-mails
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write 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 <brion@pobox.com>
- * @author <mail@tgries.de>
- * @author Tim Starling
- * @author Luke Welling lwelling@wikimedia.org
- */
-
-/**
- * Stores a single person's name and email address.
- * These are passed in via the constructor, and will be returned in SMTP
- * header format when requested.
- */
-class MailAddress {
-       /**
-        * @param string|User $address String with an email address, or a User object
-        * @param string $name Human-readable name if a string address is given
-        * @param string $realName Human-readable real name if a string address is given
-        */
-       function __construct( $address, $name = null, $realName = null ) {
-               if ( is_object( $address ) && $address instanceof User ) {
-                       $this->address = $address->getEmail();
-                       $this->name = $address->getName();
-                       $this->realName = $address->getRealName();
-               } else {
-                       $this->address = strval( $address );
-                       $this->name = strval( $name );
-                       $this->realName = strval( $realName );
-               }
-       }
-
-       /**
-        * Return formatted and quoted address to insert into SMTP headers
-        * @return string
-        */
-       function toString() {
-               # PHP's mail() implementation under Windows is somewhat shite, and
-               # can't handle "Joe Bloggs <joe@bloggs.com>" format email addresses,
-               # so don't bother generating them
-               if ( $this->address ) {
-                       if ( $this->name != '' && !wfIsWindows() ) {
-                               global $wgEnotifUseRealName;
-                               $name = ( $wgEnotifUseRealName && $this->realName !== '' ) ? $this->realName : $this->name;
-                               $quoted = UserMailer::quotedPrintable( $name );
-                               if ( strpos( $quoted, '.' ) !== false || strpos( $quoted, ',' ) !== false ) {
-                                       $quoted = '"' . $quoted . '"';
-                               }
-                               return "$quoted <{$this->address}>";
-                       } else {
-                               return $this->address;
-                       }
-               } else {
-                       return "";
-               }
-       }
-
-       function __toString() {
-               return $this->toString();
-       }
-}
-
-/**
- * Collection of static functions for sending mail
- */
-class UserMailer {
-       private static $mErrorString;
-
-       /**
-        * Send mail using a PEAR mailer
-        *
-        * @param UserMailer $mailer
-        * @param string $dest
-        * @param string $headers
-        * @param string $body
-        *
-        * @return Status
-        */
-       protected static function sendWithPear( $mailer, $dest, $headers, $body ) {
-               $mailResult = $mailer->send( $dest, $headers, $body );
-
-               # Based on the result return an error string,
-               if ( PEAR::isError( $mailResult ) ) {
-                       wfDebug( "PEAR::Mail failed: " . $mailResult->getMessage() . "\n" );
-                       return Status::newFatal( 'pear-mail-error', $mailResult->getMessage() );
-               } else {
-                       return Status::newGood();
-               }
-       }
-
-       /**
-        * Creates a single string from an associative array
-        *
-        * @param array $headers Associative Array: keys are header field names,
-        *                 values are ... values.
-        * @param string $endl The end of line character.  Defaults to "\n"
-        *
-        * Note RFC2822 says newlines must be CRLF (\r\n)
-        * but php mail naively "corrects" it and requires \n for the "correction" to work
-        *
-        * @return string
-        */
-       static function arrayToHeaderString( $headers, $endl = "\n" ) {
-               $strings = array();
-               foreach ( $headers as $name => $value ) {
-                       // Prevent header injection by stripping newlines from value
-                       $value = self::sanitizeHeaderValue( $value );
-                       $strings[] = "$name: $value";
-               }
-               return implode( $endl, $strings );
-       }
-
-       /**
-        * Create a value suitable for the MessageId Header
-        *
-        * @return string
-        */
-       static function makeMsgId() {
-               global $wgSMTP, $wgServer;
-
-               $msgid = uniqid( wfWikiID() . ".", true ); /* true required for cygwin */
-               if ( is_array( $wgSMTP ) && isset( $wgSMTP['IDHost'] ) && $wgSMTP['IDHost'] ) {
-                       $domain = $wgSMTP['IDHost'];
-               } else {
-                       $url = wfParseUrl( $wgServer );
-                       $domain = $url['host'];
-               }
-               return "<$msgid@$domain>";
-       }
-
-       /**
-        * This function will perform a direct (authenticated) login to
-        * a SMTP Server to use for mail relaying if 'wgSMTP' specifies an
-        * array of parameters. It requires PEAR:Mail to do that.
-        * Otherwise it just uses the standard PHP 'mail' function.
-        *
-        * @param MailAddress|MailAddress[] $to Recipient's email (or an array of them)
-        * @param MailAddress $from Sender's email
-        * @param string $subject Email's subject.
-        * @param string $body Email's text or Array of two strings to be the text and html bodies
-        * @param MailAddress $replyto Optional reply-to email (default: null).
-        * @param string $contentType Optional custom Content-Type (default: text/plain; charset=UTF-8)
-        * @throws MWException
-        * @throws Exception
-        * @return Status
-        */
-       public static function send( $to, $from, $subject, $body, $replyto = null,
-               $contentType = 'text/plain; charset=UTF-8'
-       ) {
-               global $wgSMTP, $wgEnotifMaxRecips, $wgAdditionalMailParams, $wgAllowHTMLEmail;
-               $mime = null;
-               if ( !is_array( $to ) ) {
-                       $to = array( $to );
-               }
-
-               // mail body must have some content
-               $minBodyLen = 10;
-               // arbitrary but longer than Array or Object to detect casting error
-
-               // body must either be a string or an array with text and body
-               if (
-                       !(
-                               !is_array( $body ) &&
-                               strlen( $body ) >= $minBodyLen
-                       )
-                       &&
-                       !(
-                               is_array( $body ) &&
-                               isset( $body['text'] ) &&
-                               isset( $body['html'] ) &&
-                               strlen( $body['text'] ) >= $minBodyLen &&
-                               strlen( $body['html'] ) >= $minBodyLen
-                       )
-               ) {
-                       // if it is neither we have a problem
-                       return Status::newFatal( 'user-mail-no-body' );
-               }
-
-               if ( !$wgAllowHTMLEmail && is_array( $body ) ) {
-                       // HTML not wanted.  Dump it.
-                       $body = $body['text'];
-               }
-
-               wfDebug( __METHOD__ . ': sending mail to ' . implode( ', ', $to ) . "\n" );
-
-               # Make sure we have at least one address
-               $has_address = false;
-               foreach ( $to as $u ) {
-                       if ( $u->address ) {
-                               $has_address = true;
-                               break;
-                       }
-               }
-               if ( !$has_address ) {
-                       return Status::newFatal( 'user-mail-no-addy' );
-               }
-
-               # Forge email headers
-               # -------------------
-               #
-               # WARNING
-               #
-               # DO NOT add To: or Subject: headers at this step. They need to be
-               # handled differently depending upon the mailer we are going to use.
-               #
-               # To:
-               #  PHP mail() first argument is the mail receiver. The argument is
-               #  used as a recipient destination and as a To header.
-               #
-               #  PEAR mailer has a recipient argument which is only used to
-               #  send the mail. If no To header is given, PEAR will set it to
-               #  to 'undisclosed-recipients:'.
-               #
-               #  NOTE: To: is for presentation, the actual recipient is specified
-               #  by the mailer using the Rcpt-To: header.
-               #
-               # Subject:
-               #  PHP mail() second argument to pass the subject, passing a Subject
-               #  as an additional header will result in a duplicate header.
-               #
-               #  PEAR mailer should be passed a Subject header.
-               #
-               # -- hashar 20120218
-
-               $headers['From'] = $from->toString();
-               $returnPath = $from->address;
-               $extraParams = $wgAdditionalMailParams;
-
-               // Hook to generate custom VERP address for 'Return-Path'
-               wfRunHooks( 'UserMailerChangeReturnPath', array( $to, &$returnPath ) );
-               # Add the envelope sender address using the -f command line option when PHP mail() is used.
-               # Will default to the $from->address when the UserMailerChangeReturnPath hook fails and the
-               # generated VERP address when the hook runs effectively.
-               $extraParams .= ' -f ' . $returnPath;
-
-               $headers['Return-Path'] = $returnPath;
-
-               if ( $replyto ) {
-                       $headers['Reply-To'] = $replyto->toString();
-               }
-
-               $headers['Date'] = MWTimestamp::getLocalInstance()->format( 'r' );
-               $headers['Message-ID'] = self::makeMsgId();
-               $headers['X-Mailer'] = 'MediaWiki mailer';
-
-               # Line endings need to be different on Unix and Windows due to
-               # the bug described at http://trac.wordpress.org/ticket/2603
-               if ( wfIsWindows() ) {
-                       $endl = "\r\n";
-               } else {
-                       $endl = "\n";
-               }
-
-               if ( is_array( $body ) ) {
-                       // we are sending a multipart message
-                       wfDebug( "Assembling multipart mime email\n" );
-                       if ( !stream_resolve_include_path( 'Mail/mime.php' ) ) {
-                               wfDebug( "PEAR Mail_Mime package is not installed. Falling back to text email.\n" );
-                               // remove the html body for text email fall back
-                               $body = $body['text'];
-                       } else {
-                               require_once 'Mail/mime.php';
-                               if ( wfIsWindows() ) {
-                                       $body['text'] = str_replace( "\n", "\r\n", $body['text'] );
-                                       $body['html'] = str_replace( "\n", "\r\n", $body['html'] );
-                               }
-                               $mime = new Mail_mime( array(
-                                       'eol' => $endl,
-                                       'text_charset' => 'UTF-8',
-                                       'html_charset' => 'UTF-8'
-                               ) );
-                               $mime->setTXTBody( $body['text'] );
-                               $mime->setHTMLBody( $body['html'] );
-                               $body = $mime->get(); // must call get() before headers()
-                               $headers = $mime->headers( $headers );
-                       }
-               }
-               if ( $mime === null ) {
-                       // sending text only, either deliberately or as a fallback
-                       if ( wfIsWindows() ) {
-                               $body = str_replace( "\n", "\r\n", $body );
-                       }
-                       $headers['MIME-Version'] = '1.0';
-                       $headers['Content-type'] = ( is_null( $contentType ) ?
-                               'text/plain; charset=UTF-8' : $contentType );
-                       $headers['Content-transfer-encoding'] = '8bit';
-               }
-
-               $ret = wfRunHooks( 'AlternateUserMailer', array( $headers, $to, $from, $subject, $body ) );
-               if ( $ret === false ) {
-                       // the hook implementation will return false to skip regular mail sending
-                       return Status::newGood();
-               } elseif ( $ret !== true ) {
-                       // the hook implementation will return a string to pass an error message
-                       return Status::newFatal( 'php-mail-error', $ret );
-               }
-
-               if ( is_array( $wgSMTP ) ) {
-                       #
-                       # PEAR MAILER
-                       #
-
-                       if ( !stream_resolve_include_path( 'Mail.php' ) ) {
-                               throw new MWException( 'PEAR mail package is not installed' );
-                       }
-                       require_once 'Mail.php';
-
-                       wfSuppressWarnings();
-
-                       // Create the mail object using the Mail::factory method
-                       $mail_object =& Mail::factory( 'smtp', $wgSMTP );
-                       if ( PEAR::isError( $mail_object ) ) {
-                               wfDebug( "PEAR::Mail factory failed: " . $mail_object->getMessage() . "\n" );
-                               wfRestoreWarnings();
-                               return Status::newFatal( 'pear-mail-error', $mail_object->getMessage() );
-                       }
-
-                       wfDebug( "Sending mail via PEAR::Mail\n" );
-
-                       $headers['Subject'] = self::quotedPrintable( $subject );
-
-                       # When sending only to one recipient, shows it its email using To:
-                       if ( count( $to ) == 1 ) {
-                               $headers['To'] = $to[0]->toString();
-                       }
-
-                       # Split jobs since SMTP servers tends to limit the maximum
-                       # number of possible recipients.
-                       $chunks = array_chunk( $to, $wgEnotifMaxRecips );
-                       foreach ( $chunks as $chunk ) {
-                               $status = self::sendWithPear( $mail_object, $chunk, $headers, $body );
-                               # FIXME : some chunks might be sent while others are not!
-                               if ( !$status->isOK() ) {
-                                       wfRestoreWarnings();
-                                       return $status;
-                               }
-                       }
-                       wfRestoreWarnings();
-                       return Status::newGood();
-               } else {
-                       #
-                       # PHP mail()
-                       #
-                       if ( count( $to ) > 1 ) {
-                               $headers['To'] = 'undisclosed-recipients:;';
-                       }
-                       $headers = self::arrayToHeaderString( $headers, $endl );
-
-                       wfDebug( "Sending mail via internal mail() function\n" );
-
-                       self::$mErrorString = '';
-                       $html_errors = ini_get( 'html_errors' );
-                       ini_set( 'html_errors', '0' );
-                       set_error_handler( 'UserMailer::errorHandler' );
-
-                       try {
-                               $safeMode = wfIniGetBool( 'safe_mode' );
-
-                               foreach ( $to as $recip ) {
-                                       if ( $safeMode ) {
-                                               $sent = mail( $recip, self::quotedPrintable( $subject ), $body, $headers );
-                                       } else {
-                                               $sent = mail(
-                                                       $recip,
-                                                       self::quotedPrintable( $subject ),
-                                                       $body,
-                                                       $headers,
-                                                       $extraParams
-                                               );
-                                       }
-                               }
-                       } catch ( Exception $e ) {
-                               restore_error_handler();
-                               throw $e;
-                       }
-
-                       restore_error_handler();
-                       ini_set( 'html_errors', $html_errors );
-
-                       if ( self::$mErrorString ) {
-                               wfDebug( "Error sending mail: " . self::$mErrorString . "\n" );
-                               return Status::newFatal( 'php-mail-error', self::$mErrorString );
-                       } elseif ( !$sent ) {
-                               // mail function only tells if there's an error
-                               wfDebug( "Unknown error sending mail\n" );
-                               return Status::newFatal( 'php-mail-error-unknown' );
-                       } else {
-                               return Status::newGood();
-                       }
-               }
-       }
-
-       /**
-        * Set the mail error message in self::$mErrorString
-        *
-        * @param int $code Error number
-        * @param string $string Error message
-        */
-       static function errorHandler( $code, $string ) {
-               self::$mErrorString = preg_replace( '/^mail\(\)(\s*\[.*?\])?: /', '', $string );
-       }
-
-       /**
-        * Strips bad characters from a header value to prevent PHP mail header injection attacks
-        * @param string $val String to be santizied
-        * @return string
-        */
-       public static function sanitizeHeaderValue( $val ) {
-               return strtr( $val, array( "\r" => '', "\n" => '' ) );
-       }
-
-       /**
-        * Converts a string into a valid RFC 822 "phrase", such as is used for the sender name
-        * @param string $phrase
-        * @return string
-        */
-       public static function rfc822Phrase( $phrase ) {
-               // Remove line breaks
-               $phrase = self::sanitizeHeaderValue( $phrase );
-               // Remove quotes
-               $phrase = str_replace( '"', '', $phrase );
-               return '"' . $phrase . '"';
-       }
-
-       /**
-        * Converts a string into quoted-printable format
-        * @since 1.17
-        *
-        * From PHP5.3 there is a built in function quoted_printable_encode()
-        * This method does not duplicate that.
-        * This method is doing Q encoding inside encoded-words as defined by RFC 2047
-        * This is for email headers.
-        * The built in quoted_printable_encode() is for email bodies
-        * @param string $string
-        * @param string $charset
-        * @return string
-        */
-       public static function quotedPrintable( $string, $charset = '' ) {
-               # Probably incomplete; see RFC 2045
-               if ( empty( $charset ) ) {
-                       $charset = 'UTF-8';
-               }
-               $charset = strtoupper( $charset );
-               $charset = str_replace( 'ISO-8859', 'ISO8859', $charset ); // ?
-
-               $illegal = '\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff=';
-               $replace = $illegal . '\t ?_';
-               if ( !preg_match( "/[$illegal]/", $string ) ) {
-                       return $string;
-               }
-               $out = "=?$charset?Q?";
-               $out .= preg_replace_callback( "/([$replace])/",
-                       array( __CLASS__, 'quotedPrintableCallback' ), $string );
-               $out .= '?=';
-               return $out;
-       }
-
-       protected static function quotedPrintableCallback( $matches ) {
-               return sprintf( "=%02X", ord( $matches[1] ) );
-       }
-}
-
-/**
- * This module processes the email notifications when the current page is
- * changed. It looks up the table watchlist to find out which users are watching
- * that page.
- *
- * The current implementation sends independent emails to each watching user for
- * the following reason:
- *
- * - Each watching user will be notified about the page edit time expressed in
- * his/her local time (UTC is shown additionally). To achieve this, we need to
- * find the individual timeoffset of each watching user from the preferences..
- *
- * Suggested improvement to slack down the number of sent emails: We could think
- * of sending out bulk mails (bcc:user1,user2...) for all these users having the
- * same timeoffset in their preferences.
- *
- * Visit the documentation pages under http://meta.wikipedia.com/Enotif
- *
- *
- */
-class EmailNotification {
-       protected $subject, $body, $replyto, $from;
-       protected $timestamp, $summary, $minorEdit, $oldid, $composed_common, $pageStatus;
-       protected $mailTargets = array();
-
-       /**
-        * @var Title
-        */
-       protected $title;
-
-       /**
-        * @var User
-        */
-       protected $editor;
-
-       /**
-        * Send emails corresponding to the user $editor editing the page $title.
-        * Also updates wl_notificationtimestamp.
-        *
-        * May be deferred via the job queue.
-        *
-        * @param User $editor
-        * @param Title $title
-        * @param string $timestamp
-        * @param string $summary
-        * @param bool $minorEdit
-        * @param bool $oldid (default: false)
-        * @param string $pageStatus (default: 'changed')
-        */
-       public function notifyOnPageChange( $editor, $title, $timestamp, $summary,
-               $minorEdit, $oldid = false, $pageStatus = 'changed'
-       ) {
-               global $wgEnotifUseJobQ, $wgEnotifWatchlist, $wgShowUpdatedMarker, $wgEnotifMinorEdits,
-                       $wgUsersNotifiedOnAllChanges, $wgEnotifUserTalk;
-
-               if ( $title->getNamespace() < 0 ) {
-                       return;
-               }
-
-               // Build a list of users to notify
-               $watchers = array();
-               if ( $wgEnotifWatchlist || $wgShowUpdatedMarker ) {
-                       $dbw = wfGetDB( DB_MASTER );
-                       $res = $dbw->select( array( 'watchlist' ),
-                               array( 'wl_user' ),
-                               array(
-                                       'wl_user != ' . intval( $editor->getID() ),
-                                       'wl_namespace' => $title->getNamespace(),
-                                       'wl_title' => $title->getDBkey(),
-                                       'wl_notificationtimestamp IS NULL',
-                               ), __METHOD__
-                       );
-                       foreach ( $res as $row ) {
-                               $watchers[] = intval( $row->wl_user );
-                       }
-                       if ( $watchers ) {
-                               // Update wl_notificationtimestamp for all watching users except the editor
-                               $fname = __METHOD__;
-                               $dbw->onTransactionIdle(
-                                       function () use ( $dbw, $timestamp, $watchers, $title, $fname ) {
-                                               $dbw->update( 'watchlist',
-                                                       array( /* SET */
-                                                               'wl_notificationtimestamp' => $dbw->timestamp( $timestamp )
-                                                       ), array( /* WHERE */
-                                                               'wl_user' => $watchers,
-                                                               'wl_namespace' => $title->getNamespace(),
-                                                               'wl_title' => $title->getDBkey(),
-                                                       ), $fname
-                                               );
-                                       }
-                               );
-                       }
-               }
-
-               $sendEmail = true;
-               // If nobody is watching the page, and there are no users notified on all changes
-               // don't bother creating a job/trying to send emails
-               // $watchers deals with $wgEnotifWatchlist
-               if ( !count( $watchers ) && !count( $wgUsersNotifiedOnAllChanges ) ) {
-                       $sendEmail = false;
-                       // Only send notification for non minor edits, unless $wgEnotifMinorEdits
-                       if ( !$minorEdit || ( $wgEnotifMinorEdits && !$editor->isAllowed( 'nominornewtalk' ) ) ) {
-                               $isUserTalkPage = ( $title->getNamespace() == NS_USER_TALK );
-                               if ( $wgEnotifUserTalk
-                                       && $isUserTalkPage
-                                       && $this->canSendUserTalkEmail( $editor, $title, $minorEdit )
-                               ) {
-                                       $sendEmail = true;
-                               }
-                       }
-               }
-
-               if ( !$sendEmail ) {
-                       return;
-               }
-
-               if ( $wgEnotifUseJobQ ) {
-                       $params = array(
-                               'editor' => $editor->getName(),
-                               'editorID' => $editor->getID(),
-                               'timestamp' => $timestamp,
-                               'summary' => $summary,
-                               'minorEdit' => $minorEdit,
-                               'oldid' => $oldid,
-                               'watchers' => $watchers,
-                               'pageStatus' => $pageStatus
-                       );
-                       $job = new EnotifNotifyJob( $title, $params );
-                       JobQueueGroup::singleton()->push( $job );
-               } else {
-                       $this->actuallyNotifyOnPageChange(
-                               $editor,
-                               $title,
-                               $timestamp,
-                               $summary,
-                               $minorEdit,
-                               $oldid,
-                               $watchers,
-                               $pageStatus
-                       );
-               }
-       }
-
-       /**
-        * Immediate version of notifyOnPageChange().
-        *
-        * Send emails corresponding to the user $editor editing the page $title.
-        * Also updates wl_notificationtimestamp.
-        *
-        * @param User $editor
-        * @param Title $title
-        * @param string $timestamp Edit timestamp
-        * @param string $summary Edit summary
-        * @param bool $minorEdit
-        * @param int $oldid Revision ID
-        * @param array $watchers Array of user IDs
-        * @param string $pageStatus
-        * @throws MWException
-        */
-       public function actuallyNotifyOnPageChange( $editor, $title, $timestamp, $summary, $minorEdit,
-               $oldid, $watchers, $pageStatus = 'changed' ) {
-               # we use $wgPasswordSender as sender's address
-               global $wgEnotifWatchlist;
-               global $wgEnotifMinorEdits, $wgEnotifUserTalk;
-
-               wfProfileIn( __METHOD__ );
-
-               # The following code is only run, if several conditions are met:
-               # 1. EmailNotification for pages (other than user_talk pages) must be enabled
-               # 2. minor edits (changes) are only regarded if the global flag indicates so
-
-               $isUserTalkPage = ( $title->getNamespace() == NS_USER_TALK );
-
-               $this->title = $title;
-               $this->timestamp = $timestamp;
-               $this->summary = $summary;
-               $this->minorEdit = $minorEdit;
-               $this->oldid = $oldid;
-               $this->editor = $editor;
-               $this->composed_common = false;
-               $this->pageStatus = $pageStatus;
-
-               $formattedPageStatus = array( 'deleted', 'created', 'moved', 'restored', 'changed' );
-
-               wfRunHooks( 'UpdateUserMailerFormattedPageStatus', array( &$formattedPageStatus ) );
-               if ( !in_array( $this->pageStatus, $formattedPageStatus ) ) {
-                       wfProfileOut( __METHOD__ );
-                       throw new MWException( 'Not a valid page status!' );
-               }
-
-               $userTalkId = false;
-
-               if ( !$minorEdit || ( $wgEnotifMinorEdits && !$editor->isAllowed( 'nominornewtalk' ) ) ) {
-                       if ( $wgEnotifUserTalk
-                               && $isUserTalkPage
-                               && $this->canSendUserTalkEmail( $editor, $title, $minorEdit )
-                       ) {
-                               $targetUser = User::newFromName( $title->getText() );
-                               $this->compose( $targetUser );
-                               $userTalkId = $targetUser->getId();
-                       }
-
-                       if ( $wgEnotifWatchlist ) {
-                               // Send updates to watchers other than the current editor
-                               $userArray = UserArray::newFromIDs( $watchers );
-                               foreach ( $userArray as $watchingUser ) {
-                                       if ( $watchingUser->getOption( 'enotifwatchlistpages' )
-                                               && ( !$minorEdit || $watchingUser->getOption( 'enotifminoredits' ) )
-                                               && $watchingUser->isEmailConfirmed()
-                                               && $watchingUser->getID() != $userTalkId
-                                       ) {
-                                               if ( wfRunHooks( 'SendWatchlistEmailNotification', array( $watchingUser, $title, $this ) ) ) {
-                                                       $this->compose( $watchingUser );
-                                               }
-                                       }
-                               }
-                       }
-               }
-
-               global $wgUsersNotifiedOnAllChanges;
-               foreach ( $wgUsersNotifiedOnAllChanges as $name ) {
-                       if ( $editor->getName() == $name ) {
-                               // No point notifying the user that actually made the change!
-                               continue;
-                       }
-                       $user = User::newFromName( $name );
-                       $this->compose( $user );
-               }
-
-               $this->sendMails();
-               wfProfileOut( __METHOD__ );
-       }
-
-       /**
-        * @param User $editor
-        * @param Title $title
-        * @param bool $minorEdit
-        * @return bool
-        */
-       private function canSendUserTalkEmail( $editor, $title, $minorEdit ) {
-               global $wgEnotifUserTalk;
-               $isUserTalkPage = ( $title->getNamespace() == NS_USER_TALK );
-
-               if ( $wgEnotifUserTalk && $isUserTalkPage ) {
-                       $targetUser = User::newFromName( $title->getText() );
-
-                       if ( !$targetUser || $targetUser->isAnon() ) {
-                               wfDebug( __METHOD__ . ": user talk page edited, but user does not exist\n" );
-                       } elseif ( $targetUser->getId() == $editor->getId() ) {
-                               wfDebug( __METHOD__ . ": user edited their own talk page, no notification sent\n" );
-                       } elseif ( $targetUser->getOption( 'enotifusertalkpages' )
-                               && ( !$minorEdit || $targetUser->getOption( 'enotifminoredits' ) )
-                       ) {
-                               if ( !$targetUser->isEmailConfirmed() ) {
-                                       wfDebug( __METHOD__ . ": talk page owner doesn't have validated email\n" );
-                               } elseif ( !wfRunHooks( 'AbortTalkPageEmailNotification', array( $targetUser, $title ) ) ) {
-                                       wfDebug( __METHOD__ . ": talk page update notification is aborted for this user\n" );
-                               } else {
-                                       wfDebug( __METHOD__ . ": sending talk page update notification\n" );
-                                       return true;
-                               }
-                       } else {
-                               wfDebug( __METHOD__ . ": talk page owner doesn't want notifications\n" );
-                       }
-               }
-               return false;
-       }
-
-       /**
-        * Generate the generic "this page has been changed" e-mail text.
-        */
-       private function composeCommonMailtext() {
-               global $wgPasswordSender, $wgNoReplyAddress;
-               global $wgEnotifFromEditor, $wgEnotifRevealEditorAddress;
-               global $wgEnotifImpersonal, $wgEnotifUseRealName;
-
-               $this->composed_common = true;
-
-               # You as the WikiAdmin and Sysops can make use of plenty of
-               # named variables when composing your notification emails while
-               # simply editing the Meta pages
-
-               $keys = array();
-               $postTransformKeys = array();
-               $pageTitleUrl = $this->title->getCanonicalURL();
-               $pageTitle = $this->title->getPrefixedText();
-
-               if ( $this->oldid ) {
-                       // Always show a link to the diff which triggered the mail. See bug 32210.
-                       $keys['$NEWPAGE'] = "\n\n" . wfMessage( 'enotif_lastdiff',
-                               $this->title->getCanonicalURL( array( 'diff' => 'next', 'oldid' => $this->oldid ) ) )
-                               ->inContentLanguage()->text();
-
-                       if ( !$wgEnotifImpersonal ) {
-                               // For personal mail, also show a link to the diff of all changes
-                               // since last visited.
-                               $keys['$NEWPAGE'] .= "\n\n" . wfMessage( 'enotif_lastvisited',
-                                       $this->title->getCanonicalURL( array( 'diff' => '0', 'oldid' => $this->oldid ) ) )
-                                       ->inContentLanguage()->text();
-                       }
-                       $keys['$OLDID'] = $this->oldid;
-                       // Deprecated since MediaWiki 1.21, not used by default. Kept for backwards-compatibility.
-                       $keys['$CHANGEDORCREATED'] = wfMessage( 'changed' )->inContentLanguage()->text();
-               } else {
-                       # clear $OLDID placeholder in the message template
-                       $keys['$OLDID'] = '';
-                       $keys['$NEWPAGE'] = '';
-                       // Deprecated since MediaWiki 1.21, not used by default. Kept for backwards-compatibility.
-                       $keys['$CHANGEDORCREATED'] = wfMessage( 'created' )->inContentLanguage()->text();
-               }
-
-               $keys['$PAGETITLE'] = $this->title->getPrefixedText();
-               $keys['$PAGETITLE_URL'] = $this->title->getCanonicalURL();
-               $keys['$PAGEMINOREDIT'] = $this->minorEdit ?
-                       wfMessage( 'minoredit' )->inContentLanguage()->text() : '';
-               $keys['$UNWATCHURL'] = $this->title->getCanonicalURL( 'action=unwatch' );
-
-               if ( $this->editor->isAnon() ) {
-                       # real anon (user:xxx.xxx.xxx.xxx)
-                       $keys['$PAGEEDITOR'] = wfMessage( 'enotif_anon_editor', $this->editor->getName() )
-                               ->inContentLanguage()->text();
-                       $keys['$PAGEEDITOR_EMAIL'] = wfMessage( 'noemailtitle' )->inContentLanguage()->text();
-
-               } else {
-                       $keys['$PAGEEDITOR'] = $wgEnotifUseRealName && $this->editor->getRealName() !== ''
-                               ? $this->editor->getRealName() : $this->editor->getName();
-                       $emailPage = SpecialPage::getSafeTitleFor( 'Emailuser', $this->editor->getName() );
-                       $keys['$PAGEEDITOR_EMAIL'] = $emailPage->getCanonicalURL();
-               }
-
-               $keys['$PAGEEDITOR_WIKI'] = $this->editor->getUserPage()->getCanonicalURL();
-               $keys['$HELPPAGE'] = wfExpandUrl(
-                       Skin::makeInternalOrExternalUrl( wfMessage( 'helppage' )->inContentLanguage()->text() )
-               );
-
-               # Replace this after transforming the message, bug 35019
-               $postTransformKeys['$PAGESUMMARY'] = $this->summary == '' ? ' - ' : $this->summary;
-
-               // Now build message's subject and body
-
-               // Messages:
-               // enotif_subject_deleted, enotif_subject_created, enotif_subject_moved,
-               // enotif_subject_restored, enotif_subject_changed
-               $this->subject = wfMessage( 'enotif_subject_' . $this->pageStatus )->inContentLanguage()
-                       ->params( $pageTitle, $keys['$PAGEEDITOR'] )->text();
-
-               // Messages:
-               // enotif_body_intro_deleted, enotif_body_intro_created, enotif_body_intro_moved,
-               // enotif_body_intro_restored, enotif_body_intro_changed
-               $keys['$PAGEINTRO'] = wfMessage( 'enotif_body_intro_' . $this->pageStatus )
-                       ->inContentLanguage()->params( $pageTitle, $keys['$PAGEEDITOR'], $pageTitleUrl )
-                       ->text();
-
-               $body = wfMessage( 'enotif_body' )->inContentLanguage()->plain();
-               $body = strtr( $body, $keys );
-               $body = MessageCache::singleton()->transform( $body, false, null, $this->title );
-               $this->body = wordwrap( strtr( $body, $postTransformKeys ), 72 );
-
-               # Reveal the page editor's address as REPLY-TO address only if
-               # the user has not opted-out and the option is enabled at the
-               # global configuration level.
-               $adminAddress = new MailAddress( $wgPasswordSender,
-                       wfMessage( 'emailsender' )->inContentLanguage()->text() );
-               if ( $wgEnotifRevealEditorAddress
-                       && ( $this->editor->getEmail() != '' )
-                       && $this->editor->getOption( 'enotifrevealaddr' )
-               ) {
-                       $editorAddress = new MailAddress( $this->editor );
-                       if ( $wgEnotifFromEditor ) {
-                               $this->from = $editorAddress;
-                       } else {
-                               $this->from = $adminAddress;
-                               $this->replyto = $editorAddress;
-                       }
-               } else {
-                       $this->from = $adminAddress;
-                       $this->replyto = new MailAddress( $wgNoReplyAddress );
-               }
-       }
-
-       /**
-        * Compose a mail to a given user and either queue it for sending, or send it now,
-        * depending on settings.
-        *
-        * Call sendMails() to send any mails that were queued.
-        * @param User $user
-        */
-       function compose( $user ) {
-               global $wgEnotifImpersonal;
-
-               if ( !$this->composed_common ) {
-                       $this->composeCommonMailtext();
-               }
-
-               if ( $wgEnotifImpersonal ) {
-                       $this->mailTargets[] = new MailAddress( $user );
-               } else {
-                       $this->sendPersonalised( $user );
-               }
-       }
-
-       /**
-        * Send any queued mails
-        */
-       function sendMails() {
-               global $wgEnotifImpersonal;
-               if ( $wgEnotifImpersonal ) {
-                       $this->sendImpersonal( $this->mailTargets );
-               }
-       }
-
-       /**
-        * Does the per-user customizations to a notification e-mail (name,
-        * timestamp in proper timezone, etc) and sends it out.
-        * Returns true if the mail was sent successfully.
-        *
-        * @param User $watchingUser
-        * @return bool
-        * @private
-        */
-       function sendPersonalised( $watchingUser ) {
-               global $wgContLang, $wgEnotifUseRealName;
-               // From the PHP manual:
-               //   Note: The to parameter cannot be an address in the form of
-               //   "Something <someone@example.com>". The mail command will not parse
-               //   this properly while talking with the MTA.
-               $to = new MailAddress( $watchingUser );
-
-               # $PAGEEDITDATE is the time and date of the page change
-               # expressed in terms of individual local time of the notification
-               # recipient, i.e. watching user
-               $body = str_replace(
-                       array( '$WATCHINGUSERNAME',
-                               '$PAGEEDITDATE',
-                               '$PAGEEDITTIME' ),
-                       array( $wgEnotifUseRealName && $watchingUser->getRealName() !== ''
-                                       ? $watchingUser->getRealName() : $watchingUser->getName(),
-                               $wgContLang->userDate( $this->timestamp, $watchingUser ),
-                               $wgContLang->userTime( $this->timestamp, $watchingUser ) ),
-                       $this->body );
-
-               return UserMailer::send( $to, $this->from, $this->subject, $body, $this->replyto );
-       }
-
-       /**
-        * Same as sendPersonalised but does impersonal mail suitable for bulk
-        * mailing.  Takes an array of MailAddress objects.
-        * @param MailAddress[] $addresses
-        * @return Status|null
-        */
-       function sendImpersonal( $addresses ) {
-               global $wgContLang;
-
-               if ( empty( $addresses ) ) {
-                       return null;
-               }
-
-               $body = str_replace(
-                               array( '$WATCHINGUSERNAME',
-                                       '$PAGEEDITDATE',
-                                       '$PAGEEDITTIME' ),
-                               array( wfMessage( 'enotif_impersonal_salutation' )->inContentLanguage()->text(),
-                                       $wgContLang->date( $this->timestamp, false, false ),
-                                       $wgContLang->time( $this->timestamp, false, false ) ),
-                               $this->body );
-
-               return UserMailer::send( $addresses, $this->from, $this->subject, $body, $this->replyto );
-       }
-
-} # end of class EmailNotification
index d9a1e80..ab136b8 100644 (file)
@@ -274,7 +274,7 @@ class WatchedItem {
         * @param WatchedItem[] $items
         * @return bool
         */
-       static public function batchAddWatch( array $items ) {
+       public static function batchAddWatch( array $items ) {
                $section = new ProfileSection( __METHOD__ );
 
                if ( wfReadOnly() ) {
@@ -309,7 +309,7 @@ class WatchedItem {
                }
 
                $dbw = wfGetDB( DB_MASTER );
-               foreach( array_chunk( $rows, 100 ) as $toInsert ) {
+               foreach ( array_chunk( $rows, 100 ) as $toInsert ) {
                        // Use INSERT IGNORE to avoid overwriting the notification timestamp
                        // if there's already an entry for this page
                        $dbw->insert( 'watchlist', $toInsert, __METHOD__, 'IGNORE' );
index a1fa0eb..bf99e95 100644 (file)
@@ -181,7 +181,12 @@ class WebRequest {
                                continue;
                        }
                        $host = $parts[0];
-                       if ( $parts[1] === false ) {
+                       if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) {
+                               // Bug 70021: Assume that upstream proxy is running on the default
+                               // port based on the protocol. We have no reliable way to determine
+                               // the actual port in use upstream.
+                               $port = $stdPort;
+                       } elseif ( $parts[1] === false ) {
                                if ( isset( $_SERVER['SERVER_PORT'] ) ) {
                                        $port = $_SERVER['SERVER_PORT'];
                                } // else leave it as $stdPort
@@ -700,21 +705,22 @@ class WebRequest {
 
        /**
         * Take an arbitrary query and rewrite the present URL to include it
+        * @deprecated Use appendQueryValue/appendQueryArray instead
         * @param string $query Query string fragment; do not include initial '?'
-        *
         * @return string
         */
        public function appendQuery( $query ) {
+               wfDeprecated( __METHOD__, '1.25' );
                return $this->appendQueryArray( wfCgiToArray( $query ) );
        }
 
        /**
         * @param string $key
         * @param string $value
-        * @param bool $onlyquery
+        * @param bool $onlyquery [deprecated]
         * @return string
         */
-       public function appendQueryValue( $key, $value, $onlyquery = false ) {
+       public function appendQueryValue( $key, $value, $onlyquery = true ) {
                return $this->appendQueryArray( array( $key => $value ), $onlyquery );
        }
 
@@ -722,16 +728,21 @@ class WebRequest {
         * Appends or replaces value of query variables.
         *
         * @param array $array Array of values to replace/add to query
-        * @param bool $onlyquery Whether to only return the query string and not the complete URL
+        * @param bool $onlyquery Whether to only return the query string and not the complete URL [deprecated]
         * @return string
         */
-       public function appendQueryArray( $array, $onlyquery = false ) {
+       public function appendQueryArray( $array, $onlyquery = true ) {
                global $wgTitle;
                $newquery = $this->getQueryValues();
                unset( $newquery['title'] );
                $newquery = array_merge( $newquery, $array );
                $query = wfArrayToCgi( $newquery );
-               return $onlyquery ? $query : $wgTitle->getLocalURL( $query );
+               if ( !$onlyquery ) {
+                       wfDeprecated( __METHOD__, '1.25' );
+                       return $wgTitle->getLocalURL( $query );
+               }
+
+               return $query;
        }
 
        /**
@@ -1250,6 +1261,7 @@ class WebRequestUpload {
 class FauxRequest extends WebRequest {
        private $wasPosted = false;
        private $session = array();
+       private $requestUrl;
 
        /**
         * @param array $data Array of *non*-urlencoded key => value pairs, the
@@ -1329,8 +1341,15 @@ class FauxRequest extends WebRequest {
                return false;
        }
 
+       public function setRequestURL( $url ) {
+               $this->requestUrl = $url;
+       }
+
        public function getRequestURL() {
-               $this->notImplemented( __METHOD__ );
+               if ( $this->requestUrl === null ) {
+                       throw new MWException( 'Request URL not set' );
+               }
+               return $this->requestUrl;
        }
 
        public function getProtocol() {
index e137628..dd27f3d 100644 (file)
@@ -6,7 +6,7 @@
  * MW_NO_SETUP is defined.
  *
  * Setup.php (if loaded) then sets up GlobalFunctions, the AutoLoader,
- * and the configuration globals (though not $wgTitle).
+ * and the configuration globals.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -40,8 +40,6 @@ if ( ini_get( 'register_globals' ) ) {
 header( 'X-Content-Type-Options: nosniff' );
 
 $wgRequestTime = microtime( true );
-# getrusage() does not exist on the Microsoft Windows platforms, catching this
-$wgRUstart = function_exists( 'getrusage' ) ? getrusage() : array();
 unset( $IP );
 
 # Valid web server entry point, enable includes.
@@ -60,12 +58,13 @@ if ( $IP === false ) {
        $IP = realpath( '.' ) ?: dirname( __DIR__ );
 }
 
+# Grab profiling functions
+require_once "$IP/includes/profiler/ProfilerFunctions.php";
+$wgRUstart = wfGetRusage() ?: array();
+
 # Start the autoloader, so that extensions can derive classes from core files
 require_once "$IP/includes/AutoLoader.php";
 
-# Load the profiler
-require_once "$IP/includes/profiler/Profiler.php";
-
 # Load up some global defines.
 require_once "$IP/includes/Defines.php";
 
index 7dd4616..8d11d90 100644 (file)
@@ -38,18 +38,21 @@ abstract class Action {
 
        /**
         * Page on which we're performing the action
+        * @since 1.17
         * @var WikiPage|Article|ImagePage|CategoryPage|Page $page
         */
        protected $page;
 
        /**
         * IContextSource if specified; otherwise we'll use the Context from the Page
+        * @since 1.17
         * @var IContextSource $context
         */
        protected $context;
 
        /**
         * The fields used to create the HTMLForm
+        * @since 1.17
         * @var array $fields
         */
        protected $fields;
@@ -82,6 +85,7 @@ abstract class Action {
 
        /**
         * Get an appropriate Action subclass for the given action
+        * @since 1.17
         * @param string $action
         * @param Page $page
         * @param IContextSource $context
@@ -152,6 +156,7 @@ abstract class Action {
 
        /**
         * Check if a given action is recognised, even if it's disabled
+        * @since 1.17
         *
         * @param string $name Name of an action
         * @return bool
@@ -162,6 +167,7 @@ abstract class Action {
 
        /**
         * Get the IContextSource in use here
+        * @since 1.17
         * @return IContextSource
         */
        final public function getContext() {
@@ -179,6 +185,7 @@ abstract class Action {
 
        /**
         * Get the WebRequest being used for this instance
+        * @since 1.17
         *
         * @return WebRequest
         */
@@ -188,6 +195,7 @@ abstract class Action {
 
        /**
         * Get the OutputPage being used for this instance
+        * @since 1.17
         *
         * @return OutputPage
         */
@@ -197,6 +205,7 @@ abstract class Action {
 
        /**
         * Shortcut to get the User being used for this instance
+        * @since 1.17
         *
         * @return User
         */
@@ -206,6 +215,7 @@ abstract class Action {
 
        /**
         * Shortcut to get the Skin being used for this instance
+        * @since 1.17
         *
         * @return Skin
         */
@@ -224,6 +234,8 @@ abstract class Action {
 
        /**
         * Shortcut to get the Title object from the page
+        * @since 1.17
+        *
         * @return Title
         */
        final public function getTitle() {
@@ -262,6 +274,8 @@ abstract class Action {
 
        /**
         * Return the name of the action this object responds to
+        * @since 1.17
+        *
         * @return string Lowercase name
         */
        abstract public function getName();
@@ -269,6 +283,8 @@ abstract class Action {
        /**
         * Get the permission required to perform this action.  Often, but not always,
         * the same as the action name
+        * @since 1.17
+        *
         * @return string|null
         */
        public function getRestriction() {
@@ -279,6 +295,7 @@ abstract class Action {
         * Checks if the given user (identified by an object) can perform this action.  Can be
         * overridden by sub-classes with more complicated permissions schemes.  Failures here
         * must throw subclasses of ErrorPageError
+        * @since 1.17
         *
         * @param User $user The user to check, or null to use the context user
         * @throws UserBlockedError|ReadOnlyError|PermissionsError
@@ -307,6 +324,8 @@ abstract class Action {
 
        /**
         * Whether this action requires the wiki not to be locked
+        * @since 1.17
+        *
         * @return bool
         */
        public function requiresWrite() {
@@ -315,6 +334,8 @@ abstract class Action {
 
        /**
         * Whether this action can still be executed by a blocked user
+        * @since 1.17
+        *
         * @return bool
         */
        public function requiresUnblock() {
@@ -324,12 +345,13 @@ abstract class Action {
        /**
         * Set output headers for noindexing etc.  This function will not be called through
         * the execute() entry point, so only put UI-related stuff in here.
+        * @since 1.17
         */
        protected function setHeaders() {
                $out = $this->getOutput();
                $out->setRobotPolicy( "noindex,nofollow" );
                $out->setPageTitle( $this->getPageTitle() );
-               $this->getOutput()->setSubtitle( $this->getDescription() );
+               $out->setSubtitle( $this->getDescription() );
                $out->setArticleRelated( true );
        }
 
@@ -344,6 +366,7 @@ abstract class Action {
 
        /**
         * Returns the description that goes below the \<h1\> tag
+        * @since 1.17
         *
         * @return string
         */
@@ -355,6 +378,8 @@ abstract class Action {
         * The main action entry point.  Do all output for display and send it to the context
         * output.  Do not use globals $wgOut, $wgRequest, etc, in implementations; use
         * $this->getOutput(), etc.
+        * @since 1.17
+        *
         * @throws ErrorPageError
         */
        abstract public function show();
index 523da68..3be8aff 100644 (file)
@@ -110,7 +110,7 @@ class HistoryAction extends FormlessAction {
                # Fill in the file cache if not set already
                $useFileCache = $config->get( 'UseFileCache' );
                if ( $useFileCache && HTMLFileCache::useFileCache( $this->getContext() ) ) {
-                       $cache = HTMLFileCache::newFromTitle( $this->getTitle(), 'history' );
+                       $cache = new HTMLFileCache( $this->getTitle(), 'history' );
                        if ( !$cache->isCacheGood( /* Assume up to date */ ) ) {
                                ob_start( array( &$cache, 'saveToFileCache' ) );
                        }
@@ -196,7 +196,11 @@ class HistoryAction extends FormlessAction {
                        ) . '&#160;' .
                        ( $tagSelector ? ( implode( '&#160;', $tagSelector ) . '&#160;' ) : '' ) .
                        $checkDeleted .
-                       Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) . "\n" .
+                       Html::submitButton(
+                               $this->msg( 'allpagessubmit' )->text(),
+                               array(),
+                               array( 'mw-ui-progressive' )
+                       ) . "\n" .
                        '</fieldset></form>'
                );
 
@@ -485,12 +489,10 @@ class HistoryPager extends ReverseChronologicalPager {
                // Button container stored in $this->buttons for re-use in getEndBody()
                $this->buttons = '<div>';
                $className = 'historysubmit mw-history-compareselectedversions-button';
-               if ( $this->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
-                       $className .= ' mw-ui-button mw-ui-constructive';
-               }
+               $attrs = array( 'class' => $className )
+                       + Linker::tooltipAndAccesskeyAttribs( 'compareselectedversions' );
                $this->buttons .= $this->submitButton( $this->msg( 'compareselectedversions' )->text(),
-                       array( 'class' => $className )
-                               + Linker::tooltipAndAccesskeyAttribs( 'compareselectedversions' )
+                       $attrs
                ) . "\n";
 
                if ( $this->getUser()->isAllowed( 'deleterevision' ) ) {
@@ -561,7 +563,7 @@ class HistoryPager extends ReverseChronologicalPager {
        function submitButton( $message, $attributes = array() ) {
                # Disable submit button if history has 1 revision only
                if ( $this->getNumRows() > 1 ) {
-                       return Xml::submitButton( $message, $attributes );
+                       return Html::submitButton( $message, $attributes );
                } else {
                        return '';
                }
index f932a40..e7455f6 100644 (file)
@@ -290,7 +290,7 @@ class InfoAction extends FormlessAction {
 
                $pageInfo['header-basic'][] = array( $langDisp,
                        Language::fetchLanguageName( $pageLang, $lang->getCode() )
-                       . ' ' . $this->msg( 'parentheses', $pageLang ) );
+                       . ' ' . $this->msg( 'parentheses', $pageLang )->escaped() );
 
                // Content model of the page
                $pageInfo['header-basic'][] = array(
@@ -314,13 +314,6 @@ class InfoAction extends FormlessAction {
                        $this->msg( 'pageinfo-robot-policy' ), $this->msg( "pageinfo-robot-${policy['index']}" )
                );
 
-               if ( isset( $pageCounts['views'] ) ) {
-                       // Number of views
-                       $pageInfo['header-basic'][] = array(
-                               $this->msg( 'pageinfo-views' ), $lang->formatNum( $pageCounts['views'] )
-                       );
-               }
-
                $unwatchedPageThreshold = $config->get( 'UnwatchedPageThreshold' );
                if (
                        $user->isAllowed( 'unwatchedpages' ) ||
@@ -644,17 +637,6 @@ class InfoAction extends FormlessAction {
                $dbr = wfGetDB( DB_SLAVE );
                $result = array();
 
-               if ( !$config->get( 'DisableCounters' ) ) {
-                       // Number of views
-                       $views = (int)$dbr->selectField(
-                               'page',
-                               'page_counter',
-                               array( 'page_id' => $id ),
-                               __METHOD__
-                       );
-                       $result['views'] = $views;
-               }
-
                // Number of page watchers
                $watchers = (int)$dbr->selectField(
                        'watchlist',
index cd4e4ba..d0d956e 100644 (file)
  * @ingroup Actions
  */
 class RawAction extends FormlessAction {
-       private $mGen;
+       /**
+        * @var bool Does the request include a gen=css|javascript parameter
+        * @deprecated This used to be a string for "css" or "javascript" but
+        * it is no longer used. Setting this parameter results in empty content
+        * being served
+        */
+       private $gen = false;
 
        public function getName() {
                return 'raw';
@@ -66,12 +72,10 @@ class RawAction extends FormlessAction {
                $smaxage = $request->getIntOrNull( 'smaxage' );
 
                if ( $gen == 'css' || $gen == 'js' ) {
-                       $this->mGen = $gen;
+                       $this->gen = true;
                        if ( $smaxage === null ) {
                                $smaxage = $config->get( 'SquidMaxage' );
                        }
-               } else {
-                       $this->mGen = false;
                }
 
                $contentType = $this->getContentType();
@@ -130,7 +134,7 @@ class RawAction extends FormlessAction {
                global $wgParser;
 
                # No longer used
-               if ( $this->mGen ) {
+               if ( $this->gen ) {
                        return '';
                }
 
index fc87a47..3f84f2a 100644 (file)
@@ -64,16 +64,27 @@ abstract class ApiBase extends ContextSource {
        // Boolean, if MIN/MAX are set, enforce (die) these?
        // Only applies if TYPE='integer' Use with extreme caution
        const PARAM_RANGE_ENFORCE = 9;
-
-       // Name of property group that is on the root element of the result,
-       // i.e. not part of a list
-       const PROP_ROOT = 'ROOT';
-       // Boolean, is the result multiple items? Defaults to true for query modules,
-       // to false for other modules
-       const PROP_LIST = 'LIST';
-       const PROP_TYPE = 0; // Type of the property, uses same format as PARAM_TYPE
-       // Boolean, can the property be not included in the result? Defaults to false
-       const PROP_NULLABLE = 1;
+       /// @since 1.25
+       // Specify an alternative i18n message for this help parameter.
+       // Value can be a string key, an array giving key and parameters, or a
+       // Message object.
+       const PARAM_HELP_MSG = 10;
+       /// @since 1.25
+       // Specify additional i18n messages to append to the normal message. Value
+       // is an array of any of strings giving the message key, arrays giving key and
+       // parameters, or Message objects.
+       const PARAM_HELP_MSG_APPEND = 11;
+       /// @since 1.25
+       // Specify additional information tags for the parameter. Value is an array
+       // of arrays, with the first member being the 'tag' for the info and the
+       // remaining members being the values. In the help, this is formatted using
+       // apihelp-{$path}-paraminfo-{$tag}, which is passed $1 = count, $2 =
+       // comma-joined list of values, $3 = module prefix.
+       const PARAM_HELP_MSG_INFO = 12;
+       /// @since 1.25
+       // When PARAM_DFLT is an array, this may be an array mapping those values
+       // to page titles which will be linked in the help.
+       const PARAM_VALUE_LINKS = 13;
 
        const LIMIT_BIG1 = 500; // Fast query, std user limit
        const LIMIT_BIG2 = 5000; // Fast query, bot/sysop limit
@@ -109,9 +120,11 @@ abstract class ApiBase extends ContextSource {
                }
        }
 
-       /*****************************************************************************
-        * ABSTRACT METHODS                                                          *
-        *****************************************************************************/
+
+       /************************************************************************//**
+        * @name   Methods to implement
+        * @{
+        */
 
        /**
         * Evaluates the parameters, performs the requested query, and sets up
@@ -132,56 +145,209 @@ abstract class ApiBase extends ContextSource {
        abstract public function execute();
 
        /**
-        * Returns a string that identifies the version of the extending class.
-        * Typically includes the class name, the svn revision, timestamp, and
-        * last author. Usually done with SVN's Id keyword
-        * @return string
-        * @deprecated since 1.21, version string is no longer supported
+        * Get the module manager, or null if this module has no sub-modules
+        * @since 1.21
+        * @return ApiModuleManager
         */
-       public function getVersion() {
-               wfDeprecated( __METHOD__, '1.21' );
+       public function getModuleManager() {
+               return null;
+       }
 
-               return '';
+       /**
+        * 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.
+        * @return mixed Instance of a derived class of ApiFormatBase, or null
+        */
+       public function getCustomPrinter() {
+               return null;
        }
 
        /**
-        * Get the name of the module being executed by this instance
-        * @return string
+        * Returns usage examples for this module.
+        *
+        * Return value has query strings as keys, with values being either strings
+        * (message key), arrays (message key + parameter), or Message objects.
+        *
+        * Do not call this base class implementation when overriding this method.
+        *
+        * @since 1.25
+        * @return array
         */
-       public function getModuleName() {
-               return $this->mModuleName;
+       protected function getExamplesMessages() {
+               // Fall back to old non-localised method
+               $ret = array();
+
+               $examples = $this->getExamples();
+               if ( $examples ) {
+                       if ( !is_array( $examples ) ) {
+                               $examples = array( $examples );
+                       } elseif ( $examples && ( count( $examples ) & 1 ) == 0 &&
+                               array_keys( $examples ) === range( 0, count( $examples ) - 1 ) &&
+                               !preg_match( '/^\s*api\.php\?/', $examples[0] )
+                       ) {
+                               // Fix up the ugly "even numbered elements are description, odd
+                               // numbered elemts are the link" format (see doc for self::getExamples)
+                               $tmp = array();
+                               for ( $i = 0; $i < count( $examples ); $i += 2 ) {
+                                       $tmp[$examples[$i + 1]] = $examples[$i];
+                               }
+                               $examples = $tmp;
+                       }
+
+                       foreach ( $examples as $k => $v ) {
+                               if ( is_numeric( $k ) ) {
+                                       $qs = $v;
+                                       $msg = '';
+                               } else {
+                                       $qs = $k;
+                                       $msg = self::escapeWikiText( $v );
+                                       if ( is_array( $msg ) ) {
+                                               $msg = join( " ", $msg );
+                                       }
+                               }
+
+                               $qs = preg_replace( '/^\s*api\.php\?/', '', $qs );
+                               $ret[$qs] = $this->msg( 'api-help-fallback-example', array( $msg ) );
+                       }
+               }
+
+               return $ret;
        }
 
        /**
-        * Get the module manager, or null if this module has no sub-modules
-        * @since 1.21
-        * @return ApiModuleManager
+        * Return links to more detailed help pages about the module.
+        * @since 1.25, returning boolean false is deprecated
+        * @return string|array
         */
-       public function getModuleManager() {
-               return null;
+       public function getHelpUrls() {
+               return array();
        }
 
        /**
-        * Get parameter prefix (usually two letters or an empty string).
-        * @return string
+        * Returns an array of allowed parameters (parameter name) => (default
+        * value) or (parameter name) => (array with PARAM_* constants as keys)
+        * Don't call this function directly: use getFinalParams() to allow
+        * hooks to modify parameters as needed.
+        *
+        * Some derived classes may choose to handle an integer $flags parameter
+        * in the overriding methods. Callers of this method can pass zero or
+        * more OR-ed flags like GET_VALUES_FOR_HELP.
+        *
+        * @return array
         */
-       public function getModulePrefix() {
-               return $this->mModulePrefix;
+       protected function getAllowedParams( /* $flags = 0 */ ) {
+               // int $flags is not declared because it causes "Strict standards"
+               // warning. Most derived classes do not implement it.
+               return array();
        }
 
        /**
-        * Get the name of the module as shown in the profiler log
+        * Indicates if this module needs maxlag to be checked
+        * @return bool
+        */
+       public function shouldCheckMaxlag() {
+               return true;
+       }
+
+       /**
+        * Indicates whether this module requires read rights
+        * @return bool
+        */
+       public function isReadMode() {
+               return true;
+       }
+
+       /**
+        * Indicates whether this module requires write mode
+        * @return bool
+        */
+       public function isWriteMode() {
+               return false;
+       }
+
+       /**
+        * Indicates whether this module must be called with a POST request
+        * @return bool
+        */
+       public function mustBePosted() {
+               return $this->needsToken() !== false;
+       }
+
+       /**
+        * Indicates whether this module is deprecated
+        * @since 1.25
+        * @return bool
+        */
+       public function isDeprecated() {
+               return false;
+       }
+
+       /**
+        * Indicates whether this module is "internal" or unstable
+        * @since 1.25
+        * @return bool
+        */
+       public function isInternal() {
+               return false;
+       }
+
+       /**
+        * Returns the token type this module requires in order to execute.
         *
-        * @param DatabaseBase|bool $db
+        * Modules are strongly encouraged to use the core 'csrf' type unless they
+        * have specialized security needs. If the token type is not one of the
+        * core types, you must use the ApiQueryTokensRegisterTypes hook to
+        * register it.
+        *
+        * Returning a non-falsey value here will force the addition of an
+        * appropriate 'token' parameter in self::getFinalParams(). Also,
+        * self::mustBePosted() must return true when tokens are used.
+        *
+        * In previous versions of MediaWiki, true was a valid return value.
+        * Returning true will generate errors indicating that the API module needs
+        * updating.
+        *
+        * @return string|false
+        */
+       public function needsToken() {
+               return false;
+       }
+
+       /**
+        * Fetch the salt used in the Web UI corresponding to this module.
         *
+        * Only override this if the Web UI uses a token with a non-constant salt.
+        *
+        * @since 1.24
+        * @param array $params All supplied parameters for the module
+        * @return string|array|null
+        */
+       protected function getWebUITokenSalt( array $params ) {
+               return null;
+       }
+
+       /**@}*/
+
+       /************************************************************************//**
+        * @name   Data access methods
+        * @{
+        */
+
+       /**
+        * Get the name of the module being executed by this instance
         * @return string
         */
-       public function getModuleProfileName( $db = false ) {
-               if ( $db ) {
-                       return 'API:' . $this->mModuleName . '-DB';
-               }
+       public function getModuleName() {
+               return $this->mModuleName;
+       }
 
-               return 'API:' . $this->mModuleName;
+       /**
+        * Get parameter prefix (usually two letters or an empty string).
+        * @return string
+        */
+       public function getModulePrefix() {
+               return $this->mModulePrefix;
        }
 
        /**
@@ -201,6 +367,73 @@ abstract class ApiBase extends ContextSource {
                return $this === $this->mMainModule;
        }
 
+       /**
+        * Get the parent of this module
+        * @since 1.25
+        * @return ApiBase|null
+        */
+       public function getParent() {
+               return $this->isMain() ? null : $this->getMain();
+       }
+
+       /**
+        * Get the path to this module
+        *
+        * @since 1.25
+        * @return string
+        */
+       public function getModulePath() {
+               if ( $this->isMain() ) {
+                       return 'main';
+               } elseif ( $this->getParent()->isMain() ) {
+                       return $this->getModuleName();
+               } else {
+                       return $this->getParent()->getModulePath() . '+' . $this->getModuleName();
+               }
+       }
+
+       /**
+        * Get a module from its module path
+        *
+        * @since 1.25
+        * @param string $path
+        * @return ApiBase|null
+        * @throws UsageException
+        */
+       public function getModuleFromPath( $path ) {
+               $module = $this->getMain();
+               if ( $path === 'main' ) {
+                       return $module;
+               }
+
+               $parts = explode( '+', $path );
+               if ( count( $parts ) === 1 ) {
+                       // In case the '+' was typed into URL, it resolves as a space
+                       $parts = explode( ' ', $path );
+               }
+
+               $count = count( $parts );
+               for ( $i = 0; $i < $count; $i++ ) {
+                       $parent = $module;
+                       $manager = $parent->getModuleManager();
+                       if ( $manager === null ) {
+                               $errorPath = join( '+', array_slice( $parts, 0, $i ) );
+                               $this->dieUsage( "The module \"$errorPath\" has no submodules", 'badmodule' );
+                       }
+                       $module = $manager->getModule( $parts[$i] );
+
+                       if ( $module === null ) {
+                               $errorPath = $i ? join( '+', array_slice( $parts, 0, $i ) ) : $parent->getModuleName();
+                               $this->dieUsage(
+                                       "The module \"$errorPath\" does not have a submodule \"{$parts[$i]}\"",
+                                       'badmodule'
+                               );
+                       }
+               }
+
+               return $module;
+       }
+
        /**
         * Get the result object
         * @return ApiResult
@@ -224,663 +457,225 @@ abstract class ApiBase extends ContextSource {
        }
 
        /**
-        * Set warning section for this module. Users should monitor this
-        * section to notice any changes in API. Multiple calls to this
-        * function will result in the warning messages being separated by
-        * newlines
-        * @param string $warning Warning message
+        * Gets a default slave database connection object
+        * @return DatabaseBase
         */
-       public function setWarning( $warning ) {
-               $result = $this->getResult();
-               $data = $result->getData();
-               $moduleName = $this->getModuleName();
-               if ( isset( $data['warnings'][$moduleName] ) ) {
-                       // Don't add duplicate warnings
-                       $oldWarning = $data['warnings'][$moduleName]['*'];
-                       $warnPos = strpos( $oldWarning, $warning );
-                       // If $warning was found in $oldWarning, check if it starts at 0 or after "\n"
-                       if ( $warnPos !== false && ( $warnPos === 0 || $oldWarning[$warnPos - 1] === "\n" ) ) {
-                               // Check if $warning is followed by "\n" or the end of the $oldWarning
-                               $warnPos += strlen( $warning );
-                               if ( strlen( $oldWarning ) <= $warnPos || $oldWarning[$warnPos] === "\n" ) {
-                                       return;
-                               }
-                       }
-                       // If there is a warning already, append it to the existing one
-                       $warning = "$oldWarning\n$warning";
+       protected function getDB() {
+               if ( !isset( $this->mSlaveDB ) ) {
+                       $this->profileDBIn();
+                       $this->mSlaveDB = wfGetDB( DB_SLAVE, 'api' );
+                       $this->profileDBOut();
                }
-               $msg = array();
-               ApiResult::setContent( $msg, $warning );
-               $result->addValue( 'warnings', $moduleName,
-                       $msg, ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+
+               return $this->mSlaveDB;
        }
 
+       /**@}*/
+
+       /************************************************************************//**
+        * @name   Parameter handling
+        * @{
+        */
+
        /**
-        * 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.
-        * @return mixed Instance of a derived class of ApiFormatBase, or null
+        * This method mangles parameter name based on the prefix supplied to the constructor.
+        * Override this method to change parameter name during runtime
+        * @param string $paramName Parameter name
+        * @return string Prefixed parameter name
         */
-       public function getCustomPrinter() {
-               return null;
+       public function encodeParamName( $paramName ) {
+               return $this->mModulePrefix . $paramName;
        }
 
        /**
-        * Generates help message for this module, or false if there is no description
-        * @return string|bool
+        * Using getAllowedParams(), this function makes an array of the values
+        * provided by the user, with key being the name of the variable, and
+        * value - validated value from user or default. limits will not be
+        * parsed if $parseLimit is set to false; use this when the max
+        * limit is not definitive yet, e.g. when getting revisions.
+        * @param bool $parseLimit True by default
+        * @return array
         */
-       public function makeHelpMsg() {
-               static $lnPrfx = "\n  ";
-
-               $msg = $this->getFinalDescription();
+       public function extractRequestParams( $parseLimit = true ) {
+               // Cache parameters, for performance and to avoid bug 24564.
+               if ( !isset( $this->mParamCache[$parseLimit] ) ) {
+                       $params = $this->getFinalParams();
+                       $results = array();
 
-               if ( $msg !== false ) {
+                       if ( $params ) { // getFinalParams() can return false
+                               foreach ( $params as $paramName => $paramSettings ) {
+                                       $results[$paramName] = $this->getParameterFromSettings(
+                                               $paramName, $paramSettings, $parseLimit );
+                               }
+                       }
+                       $this->mParamCache[$parseLimit] = $results;
+               }
 
-                       if ( !is_array( $msg ) ) {
-                               $msg = array(
-                                       $msg
-                               );
-                       }
-                       $msg = $lnPrfx . implode( $lnPrfx, $msg ) . "\n";
+               return $this->mParamCache[$parseLimit];
+       }
 
-                       $msg .= $this->makeHelpArrayToString( $lnPrfx, false, $this->getHelpUrls() );
+       /**
+        * Get a value for the given parameter
+        * @param string $paramName Parameter name
+        * @param bool $parseLimit See extractRequestParams()
+        * @return mixed Parameter value
+        */
+       protected function getParameter( $paramName, $parseLimit = true ) {
+               $params = $this->getFinalParams();
+               $paramSettings = $params[$paramName];
 
-                       if ( $this->isReadMode() ) {
-                               $msg .= "\nThis module requires read rights";
-                       }
-                       if ( $this->isWriteMode() ) {
-                               $msg .= "\nThis module requires write rights";
-                       }
-                       if ( $this->mustBePosted() ) {
-                               $msg .= "\nThis module only accepts POST requests";
-                       }
-                       if ( $this->isReadMode() || $this->isWriteMode() ||
-                               $this->mustBePosted()
-                       ) {
-                               $msg .= "\n";
-                       }
+               return $this->getParameterFromSettings( $paramName, $paramSettings, $parseLimit );
+       }
 
-                       // Parameters
-                       $paramsMsg = $this->makeHelpMsgParameters();
-                       if ( $paramsMsg !== false ) {
-                               $msg .= "Parameters:\n$paramsMsg";
-                       }
+       /**
+        * Die if none or more than one of a certain set of parameters is set and not false.
+        *
+        * @param array $params User provided set of parameters, as from $this->extractRequestParams()
+        * @param string $required,... Names of parameters of which exactly one must be set
+        */
+       public function requireOnlyOneParameter( $params, $required /*...*/ ) {
+               $required = func_get_args();
+               array_shift( $required );
+               $p = $this->getModulePrefix();
 
-                       $examples = $this->getExamples();
-                       if ( $examples ) {
-                               if ( !is_array( $examples ) ) {
-                                       $examples = array(
-                                               $examples
-                                       );
-                               }
-                               $msg .= "Example" . ( count( $examples ) > 1 ? 's' : '' ) . ":\n";
-                               foreach ( $examples as $k => $v ) {
-                                       if ( is_numeric( $k ) ) {
-                                               $msg .= "  $v\n";
-                                       } else {
-                                               if ( is_array( $v ) ) {
-                                                       $msgExample = implode( "\n", array_map( array( $this, 'indentExampleText' ), $v ) );
-                                               } else {
-                                                       $msgExample = "  $v";
-                                               }
-                                               $msgExample .= ":";
-                                               $msg .= wordwrap( $msgExample, 100, "\n" ) . "\n    $k\n";
-                                       }
-                               }
-                       }
-               }
+               $intersection = array_intersect( array_keys( array_filter( $params,
+                       array( $this, "parameterNotEmpty" ) ) ), $required );
 
-               return $msg;
+               if ( count( $intersection ) > 1 ) {
+                       $this->dieUsage(
+                               "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together',
+                               'invalidparammix' );
+               } elseif ( count( $intersection ) == 0 ) {
+                       $this->dieUsage(
+                               "One of the parameters {$p}" . implode( ", {$p}", $required ) . ' is required',
+                               'missingparam'
+                       );
+               }
        }
 
        /**
-        * @param string $item
-        * @return string
+        * Die if more than one of a certain set of parameters is set and not false.
+        *
+        * @param array $params User provided set of parameters, as from $this->extractRequestParams()
+        * @param string $required,... Names of parameters of which at most one must be set
         */
-       private function indentExampleText( $item ) {
-               return "  " . $item;
+       public function requireMaxOneParameter( $params, $required /*...*/ ) {
+               $required = func_get_args();
+               array_shift( $required );
+               $p = $this->getModulePrefix();
+
+               $intersection = array_intersect( array_keys( array_filter( $params,
+                       array( $this, "parameterNotEmpty" ) ) ), $required );
+
+               if ( count( $intersection ) > 1 ) {
+                       $this->dieUsage(
+                               "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together',
+                               'invalidparammix'
+                       );
+               }
        }
 
        /**
-        * @param string $prefix Text to split output items
-        * @param string $title What is being output
-        * @param string|array $input
-        * @return string
+        * Die if none of a certain set of parameters is set and not false.
+        *
+        * @since 1.23
+        * @param array $params User provided set of parameters, as from $this->extractRequestParams()
+        * @param string $required,... Names of parameters of which at least one must be set
         */
-       protected function makeHelpArrayToString( $prefix, $title, $input ) {
-               if ( $input === false ) {
-                       return '';
-               }
-               if ( !is_array( $input ) ) {
-                       $input = array( $input );
+       public function requireAtLeastOneParameter( $params, $required /*...*/ ) {
+               $required = func_get_args();
+               array_shift( $required );
+               $p = $this->getModulePrefix();
+
+               $intersection = array_intersect(
+                       array_keys( array_filter( $params, array( $this, "parameterNotEmpty" ) ) ),
+                       $required
+               );
+
+               if ( count( $intersection ) == 0 ) {
+                       $this->dieUsage( "At least one of the parameters {$p}" .
+                               implode( ", {$p}", $required ) . ' is required', "{$p}missingparam" );
                }
+       }
 
-               if ( count( $input ) > 0 ) {
-                       if ( $title ) {
-                               $msg = $title . ( count( $input ) > 1 ? 's' : '' ) . ":\n  ";
-                       } else {
-                               $msg = '  ';
-                       }
-                       $msg .= implode( $prefix, $input ) . "\n";
+       /**
+        * Callback function used in requireOnlyOneParameter to check whether required parameters are set
+        *
+        * @param object $x Parameter to check is not null/false
+        * @return bool
+        */
+       private function parameterNotEmpty( $x ) {
+               return !is_null( $x ) && $x !== false;
+       }
 
-                       return $msg;
+       /**
+        * Get a WikiPage object from a title or pageid param, if possible.
+        * Can die, if no param is set or if the title or page id is not valid.
+        *
+        * @param array $params
+        * @param bool|string $load Whether load the object's state from the database:
+        *        - false: don't load (if the pageid is given, it will still be loaded)
+        *        - 'fromdb': load from a slave database
+        *        - 'fromdbmaster': load from the master database
+        * @return WikiPage
+        */
+       public function getTitleOrPageId( $params, $load = false ) {
+               $this->requireOnlyOneParameter( $params, 'title', 'pageid' );
+
+               $pageObj = null;
+               if ( isset( $params['title'] ) ) {
+                       $titleObj = Title::newFromText( $params['title'] );
+                       if ( !$titleObj || $titleObj->isExternal() ) {
+                               $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
+                       }
+                       if ( !$titleObj->canExist() ) {
+                               $this->dieUsage( "Namespace doesn't allow actual pages", 'pagecannotexist' );
+                       }
+                       $pageObj = WikiPage::factory( $titleObj );
+                       if ( $load !== false ) {
+                               $pageObj->loadPageData( $load );
+                       }
+               } elseif ( isset( $params['pageid'] ) ) {
+                       if ( $load === false ) {
+                               $load = 'fromdb';
+                       }
+                       $pageObj = WikiPage::newFromID( $params['pageid'], $load );
+                       if ( !$pageObj ) {
+                               $this->dieUsageMsg( array( 'nosuchpageid', $params['pageid'] ) );
+                       }
                }
 
-               return '';
+               return $pageObj;
        }
 
        /**
-        * Generates the parameter descriptions for this module, to be displayed in the
-        * module's help.
-        * @return string|bool
+        * Return true if we're to watch the page, false if not, null if no change.
+        * @param string $watchlist Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
+        * @param Title $titleObj The page under consideration
+        * @param string $userOption The user option to consider when $watchlist=preferences.
+        *    If not set will use watchdefault always and watchcreations if $titleObj doesn't exist.
+        * @return bool
         */
-       public function makeHelpMsgParameters() {
-               $params = $this->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
-               if ( $params ) {
+       protected function getWatchlistValue( $watchlist, $titleObj, $userOption = null ) {
 
-                       $paramsDescription = $this->getFinalParamDescription();
-                       $msg = '';
-                       $paramPrefix = "\n" . str_repeat( ' ', 24 );
-                       $descWordwrap = "\n" . str_repeat( ' ', 28 );
-                       foreach ( $params as $paramName => $paramSettings ) {
-                               $desc = isset( $paramsDescription[$paramName] ) ? $paramsDescription[$paramName] : '';
-                               if ( is_array( $desc ) ) {
-                                       $desc = implode( $paramPrefix, $desc );
-                               }
+               $userWatching = $this->getUser()->isWatched( $titleObj, WatchedItem::IGNORE_USER_RIGHTS );
 
-                               //handle shorthand
-                               if ( !is_array( $paramSettings ) ) {
-                                       $paramSettings = array(
-                                               self::PARAM_DFLT => $paramSettings,
-                                       );
-                               }
+               switch ( $watchlist ) {
+                       case 'watch':
+                               return true;
 
-                               //handle missing type
-                               if ( !isset( $paramSettings[ApiBase::PARAM_TYPE] ) ) {
-                                       $dflt = isset( $paramSettings[ApiBase::PARAM_DFLT] )
-                                               ? $paramSettings[ApiBase::PARAM_DFLT]
-                                               : null;
-                                       if ( is_bool( $dflt ) ) {
-                                               $paramSettings[ApiBase::PARAM_TYPE] = 'boolean';
-                                       } elseif ( is_string( $dflt ) || is_null( $dflt ) ) {
-                                               $paramSettings[ApiBase::PARAM_TYPE] = 'string';
-                                       } elseif ( is_int( $dflt ) ) {
-                                               $paramSettings[ApiBase::PARAM_TYPE] = 'integer';
-                                       }
-                               }
+                       case 'unwatch':
+                               return false;
 
-                               if ( isset( $paramSettings[self::PARAM_DEPRECATED] )
-                                       && $paramSettings[self::PARAM_DEPRECATED]
-                               ) {
-                                       $desc = "DEPRECATED! $desc";
+                       case 'preferences':
+                               # If the user is already watching, don't bother checking
+                               if ( $userWatching ) {
+                                       return true;
                                }
-
-                               if ( isset( $paramSettings[self::PARAM_REQUIRED] )
-                                       && $paramSettings[self::PARAM_REQUIRED]
-                               ) {
-                                       $desc .= $paramPrefix . "This parameter is required";
-                               }
-
-                               $type = isset( $paramSettings[self::PARAM_TYPE] )
-                                       ? $paramSettings[self::PARAM_TYPE]
-                                       : null;
-                               if ( isset( $type ) ) {
-                                       $hintPipeSeparated = true;
-                                       $multi = isset( $paramSettings[self::PARAM_ISMULTI] )
-                                               ? $paramSettings[self::PARAM_ISMULTI]
-                                               : false;
-                                       if ( $multi ) {
-                                               $prompt = 'Values (separate with \'|\'): ';
-                                       } else {
-                                               $prompt = 'One value: ';
-                                       }
-
-                                       if ( $type === 'submodule' ) {
-                                               $type = $this->getModuleManager()->getNames( $paramName );
-                                               sort( $type );
-                                       }
-                                       if ( is_array( $type ) ) {
-                                               $choices = array();
-                                               $nothingPrompt = '';
-                                               foreach ( $type as $t ) {
-                                                       if ( $t === '' ) {
-                                                               $nothingPrompt = 'Can be empty, or ';
-                                                       } else {
-                                                               $choices[] = $t;
-                                                       }
-                                               }
-                                               $desc .= $paramPrefix . $nothingPrompt . $prompt;
-                                               $choicesstring = implode( ', ', $choices );
-                                               $desc .= wordwrap( $choicesstring, 100, $descWordwrap );
-                                               $hintPipeSeparated = false;
-                                       } else {
-                                               switch ( $type ) {
-                                                       case 'namespace':
-                                                               // Special handling because namespaces are
-                                                               // type-limited, yet they are not given
-                                                               $desc .= $paramPrefix . $prompt;
-                                                               $desc .= wordwrap( implode( ', ', MWNamespace::getValidNamespaces() ),
-                                                                       100, $descWordwrap );
-                                                               $hintPipeSeparated = false;
-                                                               break;
-                                                       case 'limit':
-                                                               $desc .= $paramPrefix . "No more than {$paramSettings[self::PARAM_MAX]}";
-                                                               if ( isset( $paramSettings[self::PARAM_MAX2] ) ) {
-                                                                       $desc .= " ({$paramSettings[self::PARAM_MAX2]} for bots)";
-                                                               }
-                                                               $desc .= ' allowed';
-                                                               break;
-                                                       case 'integer':
-                                                               $s = $multi ? 's' : '';
-                                                               $hasMin = isset( $paramSettings[self::PARAM_MIN] );
-                                                               $hasMax = isset( $paramSettings[self::PARAM_MAX] );
-                                                               if ( $hasMin || $hasMax ) {
-                                                                       if ( !$hasMax ) {
-                                                                               $intRangeStr = "The value$s must be no less than " .
-                                                                                       "{$paramSettings[self::PARAM_MIN]}";
-                                                                       } elseif ( !$hasMin ) {
-                                                                               $intRangeStr = "The value$s must be no more than " .
-                                                                                       "{$paramSettings[self::PARAM_MAX]}";
-                                                                       } else {
-                                                                               $intRangeStr = "The value$s must be between " .
-                                                                                       "{$paramSettings[self::PARAM_MIN]} and {$paramSettings[self::PARAM_MAX]}";
-                                                                       }
-
-                                                                       $desc .= $paramPrefix . $intRangeStr;
-                                                               }
-                                                               break;
-                                                       case 'upload':
-                                                               $desc .= $paramPrefix . "Must be posted as a file upload using multipart/form-data";
-                                                               break;
-                                               }
-                                       }
-
-                                       if ( $multi ) {
-                                               if ( $hintPipeSeparated ) {
-                                                       $desc .= $paramPrefix . "Separate values with '|'";
-                                               }
-
-                                               $isArray = is_array( $type );
-                                               if ( !$isArray
-                                                       || $isArray && count( $type ) > self::LIMIT_SML1
-                                               ) {
-                                                       $desc .= $paramPrefix . "Maximum number of values " .
-                                                               self::LIMIT_SML1 . " (" . self::LIMIT_SML2 . " for bots)";
-                                               }
-                                       }
-                               }
-
-                               $default = isset( $paramSettings[self::PARAM_DFLT] ) ? $paramSettings[self::PARAM_DFLT] : null;
-                               if ( !is_null( $default ) && $default !== false ) {
-                                       $desc .= $paramPrefix . "Default: $default";
-                               }
-
-                               $msg .= sprintf( "  %-19s - %s\n", $this->encodeParamName( $paramName ), $desc );
-                       }
-
-                       return $msg;
-               }
-
-               return false;
-       }
-
-       /**
-        * Returns the description string for this module
-        * @return string|array
-        */
-       protected function getDescription() {
-               return false;
-       }
-
-       /**
-        * Returns usage examples for this module. Return false if no examples are available.
-        * @return bool|string|array
-        */
-       protected function getExamples() {
-               return false;
-       }
-
-       /**
-        * Returns an array of allowed parameters (parameter name) => (default
-        * value) or (parameter name) => (array with PARAM_* constants as keys)
-        * Don't call this function directly: use getFinalParams() to allow
-        * hooks to modify parameters as needed.
-        *
-        * Some derived classes may choose to handle an integer $flags parameter
-        * in the overriding methods. Callers of this method can pass zero or
-        * more OR-ed flags like GET_VALUES_FOR_HELP.
-        *
-        * @return array|bool
-        */
-       protected function getAllowedParams( /* $flags = 0 */ ) {
-               // int $flags is not declared because it causes "Strict standards"
-               // warning. Most derived classes do not implement it.
-               return false;
-       }
-
-       /**
-        * Returns an array of parameter descriptions.
-        * Don't call this function directly: use getFinalParamDescription() to
-        * allow hooks to modify descriptions as needed.
-        * @return array|bool False on no parameter descriptions
-        */
-       protected function getParamDescription() {
-               return false;
-       }
-
-       /**
-        * Get final list of parameters, after hooks have had a chance to
-        * tweak it as needed.
-        *
-        * @param int $flags Zero or more flags like GET_VALUES_FOR_HELP
-        * @return array|bool False on no parameters
-        * @since 1.21 $flags param added
-        */
-       public function getFinalParams( $flags = 0 ) {
-               $params = $this->getAllowedParams( $flags );
-               wfRunHooks( 'APIGetAllowedParams', array( &$this, &$params, $flags ) );
-
-               return $params;
-       }
-
-       /**
-        * Get final parameter descriptions, after hooks have had a chance to tweak it as
-        * needed.
-        *
-        * @return array|bool False on no parameter descriptions
-        */
-       public function getFinalParamDescription() {
-               $desc = $this->getParamDescription();
-               wfRunHooks( 'APIGetParamDescription', array( &$this, &$desc ) );
-
-               return $desc;
-       }
-
-       /**
-        * Formerly used to fetch a list of possible properites in the result,
-        * somehow organized with respect to the prop parameter that causes them to
-        * be returned. The specific semantics of the return value was never
-        * specified. Since this was never possible to be accurately updated, it
-        * has been removed.
-        *
-        * @deprecated since 1.24
-        * @return array|bool
-        */
-       protected function getResultProperties() {
-               wfDeprecated( __METHOD__, '1.24' );
-               return false;
-       }
-
-       /**
-        * @see self::getResultProperties()
-        * @deprecated since 1.24
-        * @return array|bool
-        */
-       public function getFinalResultProperties() {
-               wfDeprecated( __METHOD__, '1.24' );
-               return array();
-       }
-
-       /**
-        * @see self::getResultProperties()
-        * @deprecated since 1.24
-        */
-       protected static function addTokenProperties( &$props, $tokenFunctions ) {
-               wfDeprecated( __METHOD__, '1.24' );
-       }
-
-       /**
-        * Get final module description, after hooks have had a chance to tweak it as
-        * needed.
-        *
-        * @return array|bool False on no parameters
-        */
-       public function getFinalDescription() {
-               $desc = $this->getDescription();
-               wfRunHooks( 'APIGetDescription', array( &$this, &$desc ) );
-
-               return $desc;
-       }
-
-       /**
-        * This method mangles parameter name based on the prefix supplied to the constructor.
-        * Override this method to change parameter name during runtime
-        * @param string $paramName Parameter name
-        * @return string Prefixed parameter name
-        */
-       public function encodeParamName( $paramName ) {
-               return $this->mModulePrefix . $paramName;
-       }
-
-       /**
-        * Using getAllowedParams(), this function makes an array of the values
-        * provided by the user, with key being the name of the variable, and
-        * value - validated value from user or default. limits will not be
-        * parsed if $parseLimit is set to false; use this when the max
-        * limit is not definitive yet, e.g. when getting revisions.
-        * @param bool $parseLimit True by default
-        * @return array
-        */
-       public function extractRequestParams( $parseLimit = true ) {
-               // Cache parameters, for performance and to avoid bug 24564.
-               if ( !isset( $this->mParamCache[$parseLimit] ) ) {
-                       $params = $this->getFinalParams();
-                       $results = array();
-
-                       if ( $params ) { // getFinalParams() can return false
-                               foreach ( $params as $paramName => $paramSettings ) {
-                                       $results[$paramName] = $this->getParameterFromSettings(
-                                               $paramName, $paramSettings, $parseLimit );
-                               }
-                       }
-                       $this->mParamCache[$parseLimit] = $results;
-               }
-
-               return $this->mParamCache[$parseLimit];
-       }
-
-       /**
-        * Get a value for the given parameter
-        * @param string $paramName Parameter name
-        * @param bool $parseLimit See extractRequestParams()
-        * @return mixed Parameter value
-        */
-       protected function getParameter( $paramName, $parseLimit = true ) {
-               $params = $this->getFinalParams();
-               $paramSettings = $params[$paramName];
-
-               return $this->getParameterFromSettings( $paramName, $paramSettings, $parseLimit );
-       }
-
-       /**
-        * Die if none or more than one of a certain set of parameters is set and not false.
-        *
-        * @param array $params User provided set of parameters, as from $this->extractRequestParams()
-        * @param string $required,... Names of parameters of which exactly one must be set
-        */
-       public function requireOnlyOneParameter( $params, $required /*...*/ ) {
-               $required = func_get_args();
-               array_shift( $required );
-               $p = $this->getModulePrefix();
-
-               $intersection = array_intersect( array_keys( array_filter( $params,
-                       array( $this, "parameterNotEmpty" ) ) ), $required );
-
-               if ( count( $intersection ) > 1 ) {
-                       $this->dieUsage(
-                               "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together',
-                               'invalidparammix' );
-               } elseif ( count( $intersection ) == 0 ) {
-                       $this->dieUsage(
-                               "One of the parameters {$p}" . implode( ", {$p}", $required ) . ' is required',
-                               'missingparam'
-                       );
-               }
-       }
-
-       /**
-        * @see self::getPossibleErrors()
-        * @deprecated since 1.24
-        * @return array
-        */
-       public function getRequireOnlyOneParameterErrorMessages( $params ) {
-               wfDeprecated( __METHOD__, '1.24' );
-               return array();
-       }
-
-       /**
-        * Die if more than one of a certain set of parameters is set and not false.
-        *
-        * @param array $params User provided set of parameters, as from $this->extractRequestParams()
-        * @param string $required,... Names of parameters of which at most one must be set
-        */
-       public function requireMaxOneParameter( $params, $required /*...*/ ) {
-               $required = func_get_args();
-               array_shift( $required );
-               $p = $this->getModulePrefix();
-
-               $intersection = array_intersect( array_keys( array_filter( $params,
-                       array( $this, "parameterNotEmpty" ) ) ), $required );
-
-               if ( count( $intersection ) > 1 ) {
-                       $this->dieUsage(
-                               "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together',
-                               'invalidparammix'
-                       );
-               }
-       }
-
-       /**
-        * @see self::getPossibleErrors()
-        * @deprecated since 1.24
-        * @return array
-        */
-       public function getRequireMaxOneParameterErrorMessages( $params ) {
-               wfDeprecated( __METHOD__, '1.24' );
-               return array();
-       }
-
-       /**
-        * Die if none of a certain set of parameters is set and not false.
-        *
-        * @since 1.23
-        * @param array $params User provided set of parameters, as from $this->extractRequestParams()
-        * @param string $required,... Names of parameters of which at least one must be set
-        */
-       public function requireAtLeastOneParameter( $params, $required /*...*/ ) {
-               $required = func_get_args();
-               array_shift( $required );
-               $p = $this->getModulePrefix();
-
-               $intersection = array_intersect(
-                       array_keys( array_filter( $params, array( $this, "parameterNotEmpty" ) ) ),
-                       $required
-               );
-
-               if ( count( $intersection ) == 0 ) {
-                       $this->dieUsage( "At least one of the parameters {$p}" .
-                               implode( ", {$p}", $required ) . ' is required', "{$p}missingparam" );
-               }
-       }
-
-       /**
-        * @see self::getPossibleErrors()
-        * @deprecated since 1.24
-        * @return array
-        */
-       public function getRequireAtLeastOneParameterErrorMessages( $params ) {
-               wfDeprecated( __METHOD__, '1.24' );
-               return array();
-       }
-
-       /**
-        * Get a WikiPage object from a title or pageid param, if possible.
-        * Can die, if no param is set or if the title or page id is not valid.
-        *
-        * @param array $params
-        * @param bool|string $load Whether load the object's state from the database:
-        *        - false: don't load (if the pageid is given, it will still be loaded)
-        *        - 'fromdb': load from a slave database
-        *        - 'fromdbmaster': load from the master database
-        * @return WikiPage
-        */
-       public function getTitleOrPageId( $params, $load = false ) {
-               $this->requireOnlyOneParameter( $params, 'title', 'pageid' );
-
-               $pageObj = null;
-               if ( isset( $params['title'] ) ) {
-                       $titleObj = Title::newFromText( $params['title'] );
-                       if ( !$titleObj || $titleObj->isExternal() ) {
-                               $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
-                       }
-                       if ( !$titleObj->canExist() ) {
-                               $this->dieUsage( "Namespace doesn't allow actual pages", 'pagecannotexist' );
-                       }
-                       $pageObj = WikiPage::factory( $titleObj );
-                       if ( $load !== false ) {
-                               $pageObj->loadPageData( $load );
-                       }
-               } elseif ( isset( $params['pageid'] ) ) {
-                       if ( $load === false ) {
-                               $load = 'fromdb';
-                       }
-                       $pageObj = WikiPage::newFromID( $params['pageid'], $load );
-                       if ( !$pageObj ) {
-                               $this->dieUsageMsg( array( 'nosuchpageid', $params['pageid'] ) );
-                       }
-               }
-
-               return $pageObj;
-       }
-
-       /**
-        * @see self::getPossibleErrors()
-        * @deprecated since 1.24
-        * @return array
-        */
-       public function getTitleOrPageIdErrorMessage() {
-               wfDeprecated( __METHOD__, '1.24' );
-               return array();
-       }
-
-       /**
-        * Callback function used in requireOnlyOneParameter to check whether required parameters are set
-        *
-        * @param object $x Parameter to check is not null/false
-        * @return bool
-        */
-       private function parameterNotEmpty( $x ) {
-               return !is_null( $x ) && $x !== false;
-       }
-
-       /**
-        * Return true if we're to watch the page, false if not, null if no change.
-        * @param string $watchlist Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
-        * @param Title $titleObj The page under consideration
-        * @param string $userOption The user option to consider when $watchlist=preferences.
-        *    If not set will use watchdefault always and watchcreations if $titleObj doesn't exist.
-        * @return bool
-        */
-       protected function getWatchlistValue( $watchlist, $titleObj, $userOption = null ) {
-
-               $userWatching = $this->getUser()->isWatched( $titleObj, WatchedItem::IGNORE_USER_RIGHTS );
-
-               switch ( $watchlist ) {
-                       case 'watch':
-                               return true;
-
-                       case 'unwatch':
-                               return false;
-
-                       case 'preferences':
-                               # If the user is already watching, don't bother checking
-                               if ( $userWatching ) {
-                                       return true;
-                               }
-                               # If no user option was passed, use watchdefault and watchcreations
-                               if ( is_null( $userOption ) ) {
-                                       return $this->getUser()->getBoolOption( 'watchdefault' ) ||
-                                               $this->getUser()->getBoolOption( 'watchcreations' ) && !$titleObj->exists();
+                               # If no user option was passed, use watchdefault and watchcreations
+                               if ( is_null( $userOption ) ) {
+                                       return $this->getUser()->getBoolOption( 'watchdefault' ) ||
+                                               $this->getUser()->getBoolOption( 'watchcreations' ) && !$titleObj->exists();
                                }
 
                                # Watch the article based on the user preference
@@ -894,21 +689,6 @@ abstract class ApiBase extends ContextSource {
                }
        }
 
-       /**
-        * Set a watch (or unwatch) based the based on a watchlist parameter.
-        * @param string $watch Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
-        * @param Title $titleObj The article's title to change
-        * @param string $userOption The user option to consider when $watch=preferences
-        */
-       protected function setWatch( $watch, $titleObj, $userOption = null ) {
-               $value = $this->getWatchlistValue( $watch, $titleObj, $userOption );
-               if ( $value === null ) {
-                       return;
-               }
-
-               WatchAction::doWatchOrUnwatch( $value, $titleObj, $this->getUser() );
-       }
-
        /**
         * Using the settings determine the value for the given parameter
         *
@@ -1204,7 +984,7 @@ abstract class ApiBase extends ContextSource {
         * @param int $botMax Maximum value for sysops/bots
         * @param bool $enforceLimits Whether to enforce (die) if value is outside limits
         */
-       function validateLimit( $paramName, &$value, $min, $max, $botMax = null, $enforceLimits = false ) {
+       protected function validateLimit( $paramName, &$value, $min, $max, $botMax = null, $enforceLimits = false ) {
                if ( !is_null( $min ) && $value < $min ) {
 
                        $msg = $this->encodeParamName( $paramName ) . " may not be less than $min (set to $value)";
@@ -1242,7 +1022,7 @@ abstract class ApiBase extends ContextSource {
         * @param string $encParamName Parameter name
         * @return string Validated and normalized parameter
         */
-       function validateTimestamp( $value, $encParamName ) {
+       protected function validateTimestamp( $value, $encParamName ) {
                $unixTimestamp = wfTimestamp( TS_UNIX, $value );
                if ( $unixTimestamp === false ) {
                        $this->dieUsage(
@@ -1254,6 +1034,44 @@ abstract class ApiBase extends ContextSource {
                return wfTimestamp( TS_MW, $unixTimestamp );
        }
 
+       /**
+        * Validate the supplied token.
+        *
+        * @since 1.24
+        * @param string $token Supplied token
+        * @param array $params All supplied parameters for the module
+        * @return bool
+        */
+       public final function validateToken( $token, array $params ) {
+               $tokenType = $this->needsToken();
+               $salts = ApiQueryTokens::getTokenTypeSalts();
+               if ( !isset( $salts[$tokenType] ) ) {
+                       throw new MWException(
+                               "Module '{$this->getModuleName()}' tried to use token type '$tokenType' " .
+                                       'without registering it'
+                       );
+               }
+
+               if ( $this->getUser()->matchEditToken(
+                       $token,
+                       $salts[$tokenType],
+                       $this->getRequest()
+               ) ) {
+                       return true;
+               }
+
+               $webUiSalt = $this->getWebUITokenSalt( $params );
+               if ( $webUiSalt !== null && $this->getUser()->matchEditToken(
+                       $token,
+                       $webUiSalt,
+                       $this->getRequest()
+               ) ) {
+                       return true;
+               }
+
+               return false;
+       }
+
        /**
         * Validate and normalize of parameters of type 'user'
         * @param string $value Parameter value
@@ -1272,18 +1090,26 @@ abstract class ApiBase extends ContextSource {
                return $title->getText();
        }
 
+       /**@}*/
+
+       /************************************************************************//**
+        * @name   Utility methods
+        * @{
+        */
+
        /**
-        * Adds a warning to the output, else dies
-        *
-        * @param string $msg Message to show as a warning, or error message if dying
-        * @param bool $enforceLimits Whether this is an enforce (die)
+        * Set a watch (or unwatch) based the based on a watchlist parameter.
+        * @param string $watch Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
+        * @param Title $titleObj The article's title to change
+        * @param string $userOption The user option to consider when $watch=preferences
         */
-       private function warnOrDie( $msg, $enforceLimits = false ) {
-               if ( $enforceLimits ) {
-                       $this->dieUsage( $msg, 'integeroutofrange' );
+       protected function setWatch( $watch, $titleObj, $userOption = null ) {
+               $value = $this->getWatchlistValue( $watch, $titleObj, $userOption );
+               if ( $value === null ) {
+                       return;
                }
 
-               $this->setWarning( $msg );
+               WatchAction::doWatchOrUnwatch( $value, $titleObj, $this->getUser() );
        }
 
        /**
@@ -1299,7 +1125,141 @@ abstract class ApiBase extends ContextSource {
                        $modified = true;
                }
 
-               return $modified;
+               return $modified;
+       }
+
+       /**
+        * Gets the user for whom to get the watchlist
+        *
+        * @param array $params
+        * @return User
+        */
+       public function getWatchlistUser( $params ) {
+               if ( !is_null( $params['owner'] ) && !is_null( $params['token'] ) ) {
+                       $user = User::newFromName( $params['owner'], false );
+                       if ( !( $user && $user->getId() ) ) {
+                               $this->dieUsage( 'Specified user does not exist', 'bad_wlowner' );
+                       }
+                       $token = $user->getOption( 'watchlisttoken' );
+                       if ( $token == '' || $token != $params['token'] ) {
+                               $this->dieUsage(
+                                       'Incorrect watchlist token provided -- please set a correct token in Special:Preferences',
+                                       'bad_wltoken'
+                               );
+                       }
+               } else {
+                       if ( !$this->getUser()->isLoggedIn() ) {
+                               $this->dieUsage( 'You must be logged-in to have a watchlist', 'notloggedin' );
+                       }
+                       if ( !$this->getUser()->isAllowed( 'viewmywatchlist' ) ) {
+                               $this->dieUsage( 'You don\'t have permission to view your watchlist', 'permissiondenied' );
+                       }
+                       $user = $this->getUser();
+               }
+
+               return $user;
+       }
+
+       /**
+        * A subset of wfEscapeWikiText for BC texts
+        *
+        * @since 1.25
+        * @param string|array $v
+        * @return string|array
+        */
+       private static function escapeWikiText( $v ) {
+               if ( is_array( $v ) ) {
+                       return array_map( 'self::escapeWikiText', $v );
+               } else {
+                       return strtr( $v, array(
+                               '__' => '_&#95;', '{' => '&#123;', '}' => '&#125;',
+                               '[[Category:' => '[[:Category:',
+                               '[[File:' => '[[:File:', '[[Image:' => '[[:Image:',
+                       ) );
+               }
+       }
+
+       /**
+        * Create a Message from a string or array
+        *
+        * A string is used as a message key. An array has the message key as the
+        * first value and message parameters as subsequent values.
+        *
+        * @since 1.25
+        * @param string|array|Message $msg
+        * @param IContextSource $context
+        * @param array $params
+        * @return Message|null
+        */
+       public static function makeMessage( $msg, IContextSource $context, array $params = null ) {
+               if ( is_string( $msg ) ) {
+                       $msg = wfMessage( $msg );
+               } elseif ( is_array( $msg ) ) {
+                       $msg = call_user_func_array( 'wfMessage', $msg );
+               }
+               if ( !$msg instanceof Message ) {
+                       return null;
+               }
+
+               $msg->setContext( $context );
+               if ( $params ) {
+                       $msg->params( $params );
+               }
+
+               return $msg;
+       }
+
+       /**@}*/
+
+       /************************************************************************//**
+        * @name   Warning and error reporting
+        * @{
+        */
+
+       /**
+        * Set warning section for this module. Users should monitor this
+        * section to notice any changes in API. Multiple calls to this
+        * function will result in the warning messages being separated by
+        * newlines
+        * @param string $warning Warning message
+        */
+       public function setWarning( $warning ) {
+               $result = $this->getResult();
+               $data = $result->getData();
+               $moduleName = $this->getModuleName();
+               if ( isset( $data['warnings'][$moduleName] ) ) {
+                       // Don't add duplicate warnings
+                       $oldWarning = $data['warnings'][$moduleName]['*'];
+                       $warnPos = strpos( $oldWarning, $warning );
+                       // If $warning was found in $oldWarning, check if it starts at 0 or after "\n"
+                       if ( $warnPos !== false && ( $warnPos === 0 || $oldWarning[$warnPos - 1] === "\n" ) ) {
+                               // Check if $warning is followed by "\n" or the end of the $oldWarning
+                               $warnPos += strlen( $warning );
+                               if ( strlen( $oldWarning ) <= $warnPos || $oldWarning[$warnPos] === "\n" ) {
+                                       return;
+                               }
+                       }
+                       // If there is a warning already, append it to the existing one
+                       $warning = "$oldWarning\n$warning";
+               }
+               $msg = array();
+               ApiResult::setContent( $msg, $warning );
+               $result->addValue( 'warnings', $moduleName,
+                       $msg, ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+       }
+
+       /**
+        * Adds a warning to the output, else dies
+        *
+        * @param string $msg Message to show as a warning, or error message if dying
+        * @param bool $enforceLimits Whether this is an enforce (die)
+        */
+       private function warnOrDie( $msg, $enforceLimits = false ) {
+               if ( $enforceLimits ) {
+                       $this->dieUsage( $msg, 'integeroutofrange' );
+               }
+
+               $this->setWarning( $msg );
        }
 
        /**
@@ -1817,6 +1777,10 @@ abstract class ApiBase extends ContextSource {
                        'code' => 'undofailure',
                        'info' => 'Undo failed due to conflicting intermediate edits'
                ),
+               'content-not-allowed-here' => array(
+                       'code' => 'contentnotallowedhere',
+                       'info' => 'Content model "$1" is not allowed at title "$2"'
+               ),
 
                // Messages from WikiPage::doEit()
                'edit-hook-aborted' => array(
@@ -1927,134 +1891,496 @@ abstract class ApiBase extends ContextSource {
        }
 
        /**
-        * Return the error message related to a certain array
-        * @param array $error Element of a getUserPermissionsErrors()-style array
-        * @return array('code' => code, 'info' => info)
+        * Return the error message related to a certain array
+        * @param array $error Element of a getUserPermissionsErrors()-style array
+        * @return array('code' => code, 'info' => info)
+        */
+       public function parseMsg( $error ) {
+               $error = (array)$error; // It seems strings sometimes make their way in here
+               $key = array_shift( $error );
+
+               // Check whether the error array was nested
+               // array( array( <code>, <params> ), array( <another_code>, <params> ) )
+               if ( is_array( $key ) ) {
+                       $error = $key;
+                       $key = array_shift( $error );
+               }
+
+               if ( isset( self::$messageMap[$key] ) ) {
+                       return array(
+                               'code' => wfMsgReplaceArgs( self::$messageMap[$key]['code'], $error ),
+                               'info' => wfMsgReplaceArgs( self::$messageMap[$key]['info'], $error )
+                       );
+               }
+
+               // If the key isn't present, throw an "unknown error"
+               return $this->parseMsg( array( 'unknownerror', $key ) );
+       }
+
+       /**
+        * Internal code errors should be reported with this method
+        * @param string $method Method or function name
+        * @param string $message Error message
+        * @throws MWException
+        */
+       protected static function dieDebug( $method, $message ) {
+               throw new MWException( "Internal error in $method: $message" );
+       }
+
+       /**@}*/
+
+       /************************************************************************//**
+        * @name   Help message generation
+        * @{
+        */
+
+       /**
+        * Return the description message.
+        *
+        * @return string|array|Message
+        */
+       protected function getDescriptionMessage() {
+               return "apihelp-{$this->getModulePath()}-description";
+       }
+
+       /**
+        * Get final module description, after hooks have had a chance to tweak it as
+        * needed.
+        *
+        * @since 1.25, returns Message[] rather than string[]
+        * @return Message[]
+        */
+       public function getFinalDescription() {
+               $desc = $this->getDescription();
+               wfRunHooks( 'APIGetDescription', array( &$this, &$desc ) );
+               $desc = self::escapeWikiText( $desc );
+               if ( is_array( $desc ) ) {
+                       $desc = join( "\n", $desc );
+               } else {
+                       $desc = (string)$desc;
+               }
+
+               $msg = ApiBase::makeMessage( $this->getDescriptionMessage(), $this->getContext(), array(
+                       $this->getModulePrefix(),
+                       $this->getModuleName(),
+                       $this->getModulePath(),
+               ) );
+               if ( !$msg->exists() ) {
+                       $msg = $this->msg( 'api-help-fallback-description', $desc );
+               }
+               $msgs = array( $msg );
+
+               wfRunHooks( 'APIGetDescriptionMessages', array( $this, &$msgs ) );
+
+               return $msgs;
+       }
+
+       /**
+        * Get final list of parameters, after hooks have had a chance to
+        * tweak it as needed.
+        *
+        * @param int $flags Zero or more flags like GET_VALUES_FOR_HELP
+        * @return array|bool False on no parameters
+        * @since 1.21 $flags param added
+        */
+       public function getFinalParams( $flags = 0 ) {
+               $params = $this->getAllowedParams( $flags );
+               if ( !$params ) {
+                       $params = array();
+               }
+
+               if ( $this->needsToken() ) {
+                       $params['token'] = array(
+                               ApiBase::PARAM_TYPE => 'string',
+                               ApiBase::PARAM_REQUIRED => true,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'api-help-param-token',
+                                       $this->needsToken(),
+                               ),
+                       ) + ( isset( $params['token'] ) ? $params['token'] : array() );
+               }
+
+               wfRunHooks( 'APIGetAllowedParams', array( &$this, &$params, $flags ) );
+
+               return $params;
+       }
+
+       /**
+        * Get final parameter descriptions, after hooks have had a chance to tweak it as
+        * needed.
+        *
+        * @since 1.25, returns array of Message[] rather than array of string[]
+        * @return array Keys are parameter names, values are arrays of Message objects
+        */
+       public function getFinalParamDescription() {
+               $desc = $this->getParamDescription();
+               wfRunHooks( 'APIGetParamDescription', array( &$this, &$desc ) );
+
+               if ( !$desc ) {
+                       $desc = array();
+               }
+               $desc = self::escapeWikiText( $desc );
+
+               $params = $this->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
+               $msgs = array();
+               foreach ( $params as $param => $settings ) {
+                       if ( !is_array( $settings ) ) {
+                               $settings = array();
+                       }
+
+                       $d = isset( $desc[$param] ) ? $desc[$param] : '';
+                       if ( is_array( $d ) ) {
+                               // Special handling for prop parameters
+                               $d = array_map( function ( $line ) {
+                                       if ( preg_match( '/^\s+(\S+)\s+-\s+(.+)$/', $line, $m ) ) {
+                                               $line = "\n;{$m[1]}:{$m[2]}";
+                                       }
+                                       return $line;
+                               }, $d );
+                               $d = join( ' ', $d );
+                       }
+
+                       if ( isset( $settings[ApiBase::PARAM_HELP_MSG] ) ) {
+                               $msg = $settings[ApiBase::PARAM_HELP_MSG];
+                       } else {
+                               $msg = $this->msg( "apihelp-{$this->getModulePath()}-param-{$param}" );
+                               if ( !$msg->exists() ) {
+                                       $msg = $this->msg( 'api-help-fallback-parameter', $d );
+                               }
+                       }
+                       $msg = ApiBase::makeMessage( $msg, $this->getContext(), array(
+                               $this->getModulePrefix(),
+                               $param,
+                               $this->getModuleName(),
+                               $this->getModulePath(),
+                       ) );
+                       if ( !$msg ) {
+                               $this->dieDebug( __METHOD__,
+                                       'Value in ApiBase::PARAM_HELP_MSG is not valid' );
+                       }
+                       $msgs[$param] = array( $msg );
+
+                       if ( isset( $settings[ApiBase::PARAM_HELP_MSG_APPEND] ) ) {
+                               if ( !is_array( $settings[ApiBase::PARAM_HELP_MSG_APPEND] ) ) {
+                                       $this->dieDebug( __METHOD__,
+                                               'Value for ApiBase::PARAM_HELP_MSG_APPEND is not an array' );
+                               }
+                               foreach ( $settings[ApiBase::PARAM_HELP_MSG_APPEND] as $m ) {
+                                       $m = ApiBase::makeMessage( $m, $this->getContext(), array(
+                                               $this->getModulePrefix(),
+                                               $param,
+                                               $this->getModuleName(),
+                                               $this->getModulePath(),
+                                       ) );
+                                       if ( $m ) {
+                                               $msgs[$param][] = $m;
+                                       } else {
+                                               $this->dieDebug( __METHOD__,
+                                                       'Value in ApiBase::PARAM_HELP_MSG_APPEND is not valid' );
+                                       }
+                               }
+                       }
+               }
+
+               wfRunHooks( 'APIGetParamDescriptionMessages', array( $this, &$msgs ) );
+
+               return $msgs;
+       }
+
+       /**
+        * Generates the list of flags for the help screen and for action=paraminfo
+        *
+        * Corresponding messages: api-help-flag-deprecated,
+        * api-help-flag-internal, api-help-flag-readrights,
+        * api-help-flag-writerights, api-help-flag-mustbeposted
+        *
+        * @return string[]
+        */
+       protected function getHelpFlags() {
+               $flags = array();
+
+               if ( $this->isDeprecated() ) {
+                       $flags[] = 'deprecated';
+               }
+               if ( $this->isInternal() ) {
+                       $flags[] = 'internal';
+               }
+               if ( $this->isReadMode() ) {
+                       $flags[] = 'readrights';
+               }
+               if ( $this->isWriteMode() ) {
+                       $flags[] = 'writerights';
+               }
+               if ( $this->mustBePosted() ) {
+                       $flags[] = 'mustbeposted';
+               }
+
+               return $flags;
+       }
+
+       /**
+        * Called from ApiHelp before the pieces are joined together and returned.
+        *
+        * This exists mainly for ApiMain to add the Permissions and Credits
+        * sections. Other modules probably don't need it.
+        *
+        * @param string[] &$help Array of help data
+        * @param array $options Options passed to ApiHelp::getHelp
+        */
+       public function modifyHelp( array &$help, array $options ) {
+       }
+
+       /**@}*/
+
+       /************************************************************************//**
+        * @name   Profiling
+        * @{
+        */
+
+       /**
+        * Profiling: total module execution time
+        */
+       private $mTimeIn = 0, $mModuleTime = 0;
+
+       /**
+        * 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 );
+               wfProfileIn( $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;
+               wfProfileOut( $this->getModuleProfileName() );
+       }
+
+       /**
+        * 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 );
+               wfProfileIn( $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;
+               wfProfileOut( $this->getModuleProfileName( true ) );
+       }
+
+       /**
+        * Total time the module used the database
+        * @return float
         */
-       public function parseMsg( $error ) {
-               $error = (array)$error; // It seems strings sometimes make their way in here
-               $key = array_shift( $error );
-
-               // Check whether the error array was nested
-               // array( array( <code>, <params> ), array( <another_code>, <params> ) )
-               if ( is_array( $key ) ) {
-                       $error = $key;
-                       $key = array_shift( $error );
-               }
-
-               if ( isset( self::$messageMap[$key] ) ) {
-                       return array(
-                               'code' => wfMsgReplaceArgs( self::$messageMap[$key]['code'], $error ),
-                               'info' => wfMsgReplaceArgs( self::$messageMap[$key]['info'], $error )
-                       );
+       public function getProfileDBTime() {
+               if ( $this->mDBTimeIn !== 0 ) {
+                       ApiBase::dieDebug( __METHOD__, 'Called without calling profileDBOut() first' );
                }
 
-               // If the key isn't present, throw an "unknown error"
-               return $this->parseMsg( array( 'unknownerror', $key ) );
+               return $this->mDBTime;
        }
 
        /**
-        * Internal code errors should be reported with this method
-        * @param string $method Method or function name
-        * @param string $message Error message
-        * @throws MWException
+        * Write logging information for API features to a debug log, for usage
+        * analysis.
+        * @param string $feature Feature being used.
         */
-       protected static function dieDebug( $method, $message ) {
-               throw new MWException( "Internal error in $method: $message" );
+       protected function logFeatureUsage( $feature ) {
+               $request = $this->getRequest();
+               $s = '"' . addslashes( $feature ) . '"' .
+                       ' "' . wfUrlencode( str_replace( ' ', '_', $this->getUser()->getName() ) ) . '"' .
+                       ' "' . $request->getIP() . '"' .
+                       ' "' . addslashes( $request->getHeader( 'Referer' ) ) . '"' .
+                       ' "' . addslashes( $request->getHeader( 'User-agent' ) ) . '"';
+               wfDebugLog( 'api-feature-usage', $s, 'private' );
        }
 
-       /**
-        * Indicates if this module needs maxlag to be checked
-        * @return bool
+       /**@}*/
+
+       /************************************************************************//**
+        * @name   Deprecated
+        * @{
         */
-       public function shouldCheckMaxlag() {
-               return true;
-       }
+
+       /// @deprecated since 1.24
+       const PROP_ROOT = 'ROOT';
+       /// @deprecated since 1.24
+       const PROP_LIST = 'LIST';
+       /// @deprecated since 1.24
+       const PROP_TYPE = 0;
+       /// @deprecated since 1.24
+       const PROP_NULLABLE = 1;
 
        /**
-        * Indicates whether this module requires read rights
-        * @return bool
+        * Formerly returned a string that identifies the version of the extending
+        * class. Typically included the class name, the svn revision, timestamp,
+        * and last author. Usually done with SVN's Id keyword
+        *
+        * @deprecated since 1.21, version string is no longer supported
+        * @return string
         */
-       public function isReadMode() {
-               return true;
+       public function getVersion() {
+               wfDeprecated( __METHOD__, '1.21' );
+               return '';
        }
 
        /**
-        * Indicates whether this module requires write mode
-        * @return bool
+        * Formerly used to fetch a list of possible properites in the result,
+        * somehow organized with respect to the prop parameter that causes them to
+        * be returned. The specific semantics of the return value was never
+        * specified. Since this was never possible to be accurately updated, it
+        * has been removed.
+        *
+        * @deprecated since 1.24
+        * @return array|bool
         */
-       public function isWriteMode() {
+       protected function getResultProperties() {
+               wfDeprecated( __METHOD__, '1.24' );
                return false;
        }
 
        /**
-        * Indicates whether this module must be called with a POST request
-        * @return bool
+        * @see self::getResultProperties()
+        * @deprecated since 1.24
+        * @return array|bool
         */
-       public function mustBePosted() {
-               return false;
+       public function getFinalResultProperties() {
+               wfDeprecated( __METHOD__, '1.24' );
+               return array();
        }
 
        /**
-        * Returns whether this module requires a token to execute
-        * It is used to show possible errors in action=paraminfo
-        * see bug 25248
-        * @return bool
+        * @see self::getResultProperties()
+        * @deprecated since 1.24
         */
-       public function needsToken() {
-               return false;
+       protected static function addTokenProperties( &$props, $tokenFunctions ) {
+               wfDeprecated( __METHOD__, '1.24' );
        }
 
        /**
-        * Returns the token salt if there is one,
-        * '' if the module doesn't require a salt,
-        * else false if the module doesn't need a token
-        * You have also to override needsToken()
-        * Value is passed to User::getEditToken
-        * @return bool|string|array
+        * @see self::getPossibleErrors()
+        * @deprecated since 1.24
+        * @return array
         */
-       public function getTokenSalt() {
-               return false;
+       public function getRequireOnlyOneParameterErrorMessages( $params ) {
+               wfDeprecated( __METHOD__, '1.24' );
+               return array();
        }
 
        /**
-        * Gets the user for whom to get the watchlist
-        *
-        * @param array $params
-        * @return User
+        * @see self::getPossibleErrors()
+        * @deprecated since 1.24
+        * @return array
         */
-       public function getWatchlistUser( $params ) {
-               if ( !is_null( $params['owner'] ) && !is_null( $params['token'] ) ) {
-                       $user = User::newFromName( $params['owner'], false );
-                       if ( !( $user && $user->getId() ) ) {
-                               $this->dieUsage( 'Specified user does not exist', 'bad_wlowner' );
-                       }
-                       $token = $user->getOption( 'watchlisttoken' );
-                       if ( $token == '' || $token != $params['token'] ) {
-                               $this->dieUsage(
-                                       'Incorrect watchlist token provided -- please set a correct token in Special:Preferences',
-                                       'bad_wltoken'
-                               );
-                       }
-               } else {
-                       if ( !$this->getUser()->isLoggedIn() ) {
-                               $this->dieUsage( 'You must be logged-in to have a watchlist', 'notloggedin' );
-                       }
-                       if ( !$this->getUser()->isAllowed( 'viewmywatchlist' ) ) {
-                               $this->dieUsage( 'You don\'t have permission to view your watchlist', 'permissiondenied' );
-                       }
-                       $user = $this->getUser();
-               }
+       public function getRequireMaxOneParameterErrorMessages( $params ) {
+               wfDeprecated( __METHOD__, '1.24' );
+               return array();
+       }
 
-               return $user;
+       /**
+        * @see self::getPossibleErrors()
+        * @deprecated since 1.24
+        * @return array
+        */
+       public function getRequireAtLeastOneParameterErrorMessages( $params ) {
+               wfDeprecated( __METHOD__, '1.24' );
+               return array();
        }
 
        /**
-        * @return bool|string|array Returns a false if the module has no help URL,
-        *   else returns a (array of) string
+        * @see self::getPossibleErrors()
+        * @deprecated since 1.24
+        * @return array
         */
-       public function getHelpUrls() {
-               return false;
+       public function getTitleOrPageIdErrorMessage() {
+               wfDeprecated( __METHOD__, '1.24' );
+               return array();
        }
 
        /**
@@ -2093,160 +2419,324 @@ abstract class ApiBase extends ContextSource {
        }
 
        /**
-        * Profiling: total module execution time
+        * Returns the description string for this module
+        *
+        * Ignored if an i18n message exists for
+        * "apihelp-{$this->getModulePathString()}-description".
+        *
+        * @deprecated since 1.25
+        * @return Message|string|array
         */
-       private $mTimeIn = 0, $mModuleTime = 0;
+       protected function getDescription() {
+               return false;
+       }
 
        /**
-        * Start module profiling
+        * Returns an array of parameter descriptions.
+        *
+        * For each parameter, ignored if an i18n message exists for the parameter.
+        * By default that message is
+        * "apihelp-{$this->getModulePathString()}-param-{$param}", but it may be
+        * overridden using ApiBase::PARAM_HELP_MSG in the data returned by
+        * self::getFinalParams().
+        *
+        * @deprecated since 1.25
+        * @return array|bool False on no parameter descriptions
         */
-       public function profileIn() {
-               if ( $this->mTimeIn !== 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'Called twice without calling profileOut()' );
-               }
-               $this->mTimeIn = microtime( true );
-               wfProfileIn( $this->getModuleProfileName() );
+       protected function getParamDescription() {
+               return array();
        }
 
        /**
-        * End module profiling
+        * Returns usage examples for this module.
+        *
+        * Return value as an array is either:
+        *  - numeric keys with partial URLs ("api.php?" plus a query string) as
+        *    values
+        *  - sequential numeric keys with even-numbered keys being display-text
+        *    and odd-numbered keys being partial urls
+        *  - partial URLs as keys with display-text (string or array-to-be-joined)
+        *    as values
+        * Return value as a string is the same as an array with a numeric key and
+        * that value, and boolean false means "no examples".
+        *
+        * @deprecated since 1.25, use getExamplesMessages() instead
+        * @return bool|string|array
         */
-       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;
-               wfProfileOut( $this->getModuleProfileName() );
+       protected function getExamples() {
+               return false;
        }
 
        /**
-        * 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.
+        * Generates help message for this module, or false if there is no description
+        * @deprecated since 1.25
+        * @return string|bool
         */
-       public function safeProfileOut() {
-               if ( $this->mTimeIn !== 0 ) {
-                       if ( $this->mDBTimeIn !== 0 ) {
-                               $this->profileDBOut();
+       public function makeHelpMsg() {
+               wfDeprecated( __METHOD__, '1.25' );
+               static $lnPrfx = "\n  ";
+
+               $msg = $this->getFinalDescription();
+
+               if ( $msg !== false ) {
+
+                       if ( !is_array( $msg ) ) {
+                               $msg = array(
+                                       $msg
+                               );
+                       }
+                       $msg = $lnPrfx . implode( $lnPrfx, $msg ) . "\n";
+
+                       $msg .= $this->makeHelpArrayToString( $lnPrfx, false, $this->getHelpUrls() );
+
+                       if ( $this->isReadMode() ) {
+                               $msg .= "\nThis module requires read rights";
+                       }
+                       if ( $this->isWriteMode() ) {
+                               $msg .= "\nThis module requires write rights";
+                       }
+                       if ( $this->mustBePosted() ) {
+                               $msg .= "\nThis module only accepts POST requests";
+                       }
+                       if ( $this->isReadMode() || $this->isWriteMode() ||
+                               $this->mustBePosted()
+                       ) {
+                               $msg .= "\n";
+                       }
+
+                       // Parameters
+                       $paramsMsg = $this->makeHelpMsgParameters();
+                       if ( $paramsMsg !== false ) {
+                               $msg .= "Parameters:\n$paramsMsg";
+                       }
+
+                       $examples = $this->getExamples();
+                       if ( $examples ) {
+                               if ( !is_array( $examples ) ) {
+                                       $examples = array(
+                                               $examples
+                                       );
+                               }
+                               $msg .= "Example" . ( count( $examples ) > 1 ? 's' : '' ) . ":\n";
+                               foreach ( $examples as $k => $v ) {
+                                       if ( is_numeric( $k ) ) {
+                                               $msg .= "  $v\n";
+                                       } else {
+                                               if ( is_array( $v ) ) {
+                                                       $msgExample = implode( "\n", array_map( array( $this, 'indentExampleText' ), $v ) );
+                                               } else {
+                                                       $msgExample = "  $v";
+                                               }
+                                               $msgExample .= ":";
+                                               $msg .= wordwrap( $msgExample, 100, "\n" ) . "\n    $k\n";
+                                       }
+                               }
                        }
-                       $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;
+               return $msg;
        }
 
        /**
-        * Profiling: database execution time
-        */
-       private $mDBTimeIn = 0, $mDBTime = 0;
-
-       /**
-        * Start module profiling
+        * @deprecated since 1.25
+        * @param string $item
+        * @return string
         */
-       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 );
-               wfProfileIn( $this->getModuleProfileName( true ) );
+       private function indentExampleText( $item ) {
+               return "  " . $item;
        }
 
        /**
-        * End database profiling
+        * @deprecated since 1.25
+        * @param string $prefix Text to split output items
+        * @param string $title What is being output
+        * @param string|array $input
+        * @return string
         */
-       public function profileDBOut() {
-               if ( $this->mTimeIn === 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'Must be called while profiling ' .
-                               'the entire module with profileIn()' );
+       protected function makeHelpArrayToString( $prefix, $title, $input ) {
+               wfDeprecated( __METHOD__, '1.25' );
+               if ( $input === false ) {
+                       return '';
                }
-               if ( $this->mDBTimeIn === 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'Called without calling profileDBIn() first' );
+               if ( !is_array( $input ) ) {
+                       $input = array( $input );
                }
 
-               $time = microtime( true ) - $this->mDBTimeIn;
-               $this->mDBTimeIn = 0;
-
-               $this->mDBTime += $time;
-               $this->getMain()->mDBTime += $time;
-               wfProfileOut( $this->getModuleProfileName( true ) );
-       }
+               if ( count( $input ) > 0 ) {
+                       if ( $title ) {
+                               $msg = $title . ( count( $input ) > 1 ? 's' : '' ) . ":\n  ";
+                       } else {
+                               $msg = '  ';
+                       }
+                       $msg .= implode( $prefix, $input ) . "\n";
 
-       /**
-        * 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 $msg;
                }
 
-               return $this->mDBTime;
+               return '';
        }
 
        /**
-        * Gets a default slave database connection object
-        * @return DatabaseBase
+        * Generates the parameter descriptions for this module, to be displayed in the
+        * module's help.
+        * @deprecated since 1.25
+        * @return string|bool
         */
-       protected function getDB() {
-               if ( !isset( $this->mSlaveDB ) ) {
-                       $this->profileDBIn();
-                       $this->mSlaveDB = wfGetDB( DB_SLAVE, 'api' );
-                       $this->profileDBOut();
-               }
+       public function makeHelpMsgParameters() {
+               wfDeprecated( __METHOD__, '1.25' );
+               $params = $this->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
+               if ( $params ) {
 
-               return $this->mSlaveDB;
-       }
+                       $paramsDescription = $this->getFinalParamDescription();
+                       $msg = '';
+                       $paramPrefix = "\n" . str_repeat( ' ', 24 );
+                       $descWordwrap = "\n" . str_repeat( ' ', 28 );
+                       foreach ( $params as $paramName => $paramSettings ) {
+                               $desc = isset( $paramsDescription[$paramName] ) ? $paramsDescription[$paramName] : '';
+                               if ( is_array( $desc ) ) {
+                                       $desc = implode( $paramPrefix, $desc );
+                               }
 
-       /**
-        * Debugging function that prints a value and an optional backtrace
-        * @param mixed $value Value to print
-        * @param string $name Description of the printed value
-        * @param bool $backtrace If true, print a backtrace
-        */
-       public static function debugPrint( $value, $name = 'unknown', $backtrace = false ) {
-               print "\n\n<pre><b>Debugging value '$name':</b>\n\n";
-               var_export( $value );
-               if ( $backtrace ) {
-                       print "\n" . wfBacktrace();
+                               //handle shorthand
+                               if ( !is_array( $paramSettings ) ) {
+                                       $paramSettings = array(
+                                               self::PARAM_DFLT => $paramSettings,
+                                       );
+                               }
+
+                               //handle missing type
+                               if ( !isset( $paramSettings[ApiBase::PARAM_TYPE] ) ) {
+                                       $dflt = isset( $paramSettings[ApiBase::PARAM_DFLT] )
+                                               ? $paramSettings[ApiBase::PARAM_DFLT]
+                                               : null;
+                                       if ( is_bool( $dflt ) ) {
+                                               $paramSettings[ApiBase::PARAM_TYPE] = 'boolean';
+                                       } elseif ( is_string( $dflt ) || is_null( $dflt ) ) {
+                                               $paramSettings[ApiBase::PARAM_TYPE] = 'string';
+                                       } elseif ( is_int( $dflt ) ) {
+                                               $paramSettings[ApiBase::PARAM_TYPE] = 'integer';
+                                       }
+                               }
+
+                               if ( isset( $paramSettings[self::PARAM_DEPRECATED] )
+                                       && $paramSettings[self::PARAM_DEPRECATED]
+                               ) {
+                                       $desc = "DEPRECATED! $desc";
+                               }
+
+                               if ( isset( $paramSettings[self::PARAM_REQUIRED] )
+                                       && $paramSettings[self::PARAM_REQUIRED]
+                               ) {
+                                       $desc .= $paramPrefix . "This parameter is required";
+                               }
+
+                               $type = isset( $paramSettings[self::PARAM_TYPE] )
+                                       ? $paramSettings[self::PARAM_TYPE]
+                                       : null;
+                               if ( isset( $type ) ) {
+                                       $hintPipeSeparated = true;
+                                       $multi = isset( $paramSettings[self::PARAM_ISMULTI] )
+                                               ? $paramSettings[self::PARAM_ISMULTI]
+                                               : false;
+                                       if ( $multi ) {
+                                               $prompt = 'Values (separate with \'|\'): ';
+                                       } else {
+                                               $prompt = 'One value: ';
+                                       }
+
+                                       if ( $type === 'submodule' ) {
+                                               $type = $this->getModuleManager()->getNames( $paramName );
+                                               sort( $type );
+                                       }
+                                       if ( is_array( $type ) ) {
+                                               $choices = array();
+                                               $nothingPrompt = '';
+                                               foreach ( $type as $t ) {
+                                                       if ( $t === '' ) {
+                                                               $nothingPrompt = 'Can be empty, or ';
+                                                       } else {
+                                                               $choices[] = $t;
+                                                       }
+                                               }
+                                               $desc .= $paramPrefix . $nothingPrompt . $prompt;
+                                               $choicesstring = implode( ', ', $choices );
+                                               $desc .= wordwrap( $choicesstring, 100, $descWordwrap );
+                                               $hintPipeSeparated = false;
+                                       } else {
+                                               switch ( $type ) {
+                                                       case 'namespace':
+                                                               // Special handling because namespaces are
+                                                               // type-limited, yet they are not given
+                                                               $desc .= $paramPrefix . $prompt;
+                                                               $desc .= wordwrap( implode( ', ', MWNamespace::getValidNamespaces() ),
+                                                                       100, $descWordwrap );
+                                                               $hintPipeSeparated = false;
+                                                               break;
+                                                       case 'limit':
+                                                               $desc .= $paramPrefix . "No more than {$paramSettings[self::PARAM_MAX]}";
+                                                               if ( isset( $paramSettings[self::PARAM_MAX2] ) ) {
+                                                                       $desc .= " ({$paramSettings[self::PARAM_MAX2]} for bots)";
+                                                               }
+                                                               $desc .= ' allowed';
+                                                               break;
+                                                       case 'integer':
+                                                               $s = $multi ? 's' : '';
+                                                               $hasMin = isset( $paramSettings[self::PARAM_MIN] );
+                                                               $hasMax = isset( $paramSettings[self::PARAM_MAX] );
+                                                               if ( $hasMin || $hasMax ) {
+                                                                       if ( !$hasMax ) {
+                                                                               $intRangeStr = "The value$s must be no less than " .
+                                                                                       "{$paramSettings[self::PARAM_MIN]}";
+                                                                       } elseif ( !$hasMin ) {
+                                                                               $intRangeStr = "The value$s must be no more than " .
+                                                                                       "{$paramSettings[self::PARAM_MAX]}";
+                                                                       } else {
+                                                                               $intRangeStr = "The value$s must be between " .
+                                                                                       "{$paramSettings[self::PARAM_MIN]} and {$paramSettings[self::PARAM_MAX]}";
+                                                                       }
+
+                                                                       $desc .= $paramPrefix . $intRangeStr;
+                                                               }
+                                                               break;
+                                                       case 'upload':
+                                                               $desc .= $paramPrefix . "Must be posted as a file upload using multipart/form-data";
+                                                               break;
+                                               }
+                                       }
+
+                                       if ( $multi ) {
+                                               if ( $hintPipeSeparated ) {
+                                                       $desc .= $paramPrefix . "Separate values with '|'";
+                                               }
+
+                                               $isArray = is_array( $type );
+                                               if ( !$isArray
+                                                       || $isArray && count( $type ) > self::LIMIT_SML1
+                                               ) {
+                                                       $desc .= $paramPrefix . "Maximum number of values " .
+                                                               self::LIMIT_SML1 . " (" . self::LIMIT_SML2 . " for bots)";
+                                               }
+                                       }
+                               }
+
+                               $default = isset( $paramSettings[self::PARAM_DFLT] ) ? $paramSettings[self::PARAM_DFLT] : null;
+                               if ( !is_null( $default ) && $default !== false ) {
+                                       $desc .= $paramPrefix . "Default: $default";
+                               }
+
+                               $msg .= sprintf( "  %-19s - %s\n", $this->encodeParamName( $paramName ), $desc );
+                       }
+
+                       return $msg;
                }
-               print "\n</pre>\n";
-       }
 
-       /**
-        * 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( $request->getHeader( 'User-agent' ) ) . '"';
-               wfDebugLog( 'api-feature-usage', $s, 'private' );
+               return false;
        }
+
+       /**@}*/
 }
+
+/**
+ * For really cool vim folding this needs to be at the end:
+ * vim: foldmarker=@{,@} foldmethod=marker
+ */
index 4fa50a4..dea43ba 100644 (file)
@@ -152,7 +152,6 @@ class ApiBlock extends ApiBase {
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true
                        ),
-                       'token' => null,
                        'expiry' => 'never',
                        'reason' => '',
                        'anononly' => false,
@@ -166,43 +165,16 @@ class ApiBlock extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'user' => 'Username, IP address or IP range you want to block',
-                       'token' => 'A block token previously obtained through prop=info',
-                       'expiry' => 'Relative expiry time, e.g. \'5 months\' or \'2 weeks\'. ' .
-                               'If set to \'infinite\', \'indefinite\' or \'never\', the block will never expire.',
-                       'reason' => 'Reason for block',
-                       'anononly' => 'Block anonymous users only (i.e. disable anonymous edits for this IP)',
-                       'nocreate' => 'Prevent account creation',
-                       'autoblock' => 'Automatically block the last used IP address, and ' .
-                               'any subsequent IP addresses they try to login from',
-                       'noemail'
-                               => 'Prevent user from sending email through the wiki. (Requires the "blockemail" right.)',
-                       'hidename' => 'Hide the username from the block log. (Requires the "hideuser" right.)',
-                       'allowusertalk'
-                               => 'Allow the user to edit their own talk page (depends on $wgBlockAllowsUTEdit)',
-                       'reblock' => 'If the user is already blocked, overwrite the existing block',
-                       'watchuser' => 'Watch the user/IP\'s user and talk pages',
-               );
-       }
-
-       public function getDescription() {
-               return 'Block a user.';
-       }
-
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
+               return 'csrf';
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=block&user=123.5.5.12&expiry=3%20days&reason=First%20strike',
-                       'api.php?action=block&user=Vandal&expiry=never&reason=Vandalism&nocreate=&autoblock=&noemail='
+                       'action=block&user=192.0.2.5&expiry=3%20days&reason=First%20strike&token=123ABC'
+                               => 'apihelp-block-example-ip-simple',
+                       'action=block&user=Vandal&expiry=never&reason=Vandalism&nocreate=&autoblock=&noemail=&token=123ABC'
+                               => 'apihelp-block-example-user-complex',
                );
        }
 
diff --git a/includes/api/ApiClearHasMsg.php b/includes/api/ApiClearHasMsg.php
new file mode 100644 (file)
index 0000000..eb471ae
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * Created on August 26, 2014
+ *
+ * Copyright © 2014 Petr Bena (benapetr@gmail.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * API module that clears the hasmsg flag for current user
+ * @ingroup API
+ */
+class ApiClearHasMsg extends ApiBase {
+       public function execute() {
+               $user = $this->getUser();
+               $user->setNewtalk( false );
+               $this->getResult()->addValue( null, $this->getModuleName(), 'success' );
+       }
+
+       public function isWriteMode() {
+               return true;
+       }
+
+       public function mustBePosted() {
+               return false;
+       }
+
+       protected function getExamplesMessages() {
+               return array(
+                       'action=clearhasmsg'
+                               => 'apihelp-clearhasmsg-example-1',
+               );
+       }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:ClearHasMsg';
+       }
+}
index 4855926..ce256a6 100644 (file)
@@ -126,27 +126,10 @@ class ApiComparePages extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
+       protected function getExamplesMessages() {
                return array(
-                       'fromtitle' => 'First title to compare',
-                       'fromid' => 'First page ID to compare',
-                       'fromrev' => 'First revision to compare',
-                       'totitle' => 'Second title to compare',
-                       'toid' => 'Second page ID to compare',
-                       'torev' => 'Second revision to compare',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Get the difference between 2 pages.',
-                       'You must pass a revision number or a page title or a page ID id for each part (1 and 2).'
-               );
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=compare&fromrev=1&torev=2' => 'Create a diff between revision 1 and 2',
+                       'action=compare&fromrev=1&torev=2'
+                               => 'apihelp-compare-example-1',
                );
        }
 }
index 2ce532b..89f8481 100644 (file)
@@ -165,10 +165,6 @@ class ApiCreateAccount extends ApiBase {
                $apiResult->addValue( null, 'createaccount', $result );
        }
 
-       public function getDescription() {
-               return 'Create a new user account.';
-       }
-
        public function mustBePosted() {
                return true;
        }
@@ -204,27 +200,12 @@ class ApiCreateAccount extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'name' => 'Username',
-                       'password' => "Password (ignored if {$p}mailpassword is set)",
-                       'domain' => 'Domain for external authentication (optional)',
-                       'token' => 'Account creation token obtained in first request',
-                       'email' => 'Email address of user (optional)',
-                       'realname' => 'Real name of user (optional)',
-                       'mailpassword' => 'If set to any value, a random password will be emailed to the user',
-                       'reason' => 'Optional reason for creating the account to be put in the logs',
-                       'language'
-                               => 'Language code to set as default for the user (optional, defaults to content language)'
-               );
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=createaccount&name=testuser&password=test123',
-                       'api.php?action=createaccount&name=testmailuser&mailpassword=true&reason=MyReason',
+                       'action=createaccount&name=testuser&password=test123'
+                               => 'apihelp-createaccount-example-pass',
+                       'action=createaccount&name=testmailuser&mailpassword=true&reason=MyReason'
+                               => 'apihelp-createaccount-example-mail',
                );
        }
 
index aab0303..d8b5718 100644 (file)
@@ -188,10 +188,6 @@ class ApiDelete extends ApiBase {
                        'pageid' => array(
                                ApiBase::PARAM_TYPE => 'integer'
                        ),
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
-                       ),
                        'reason' => null,
                        'watch' => array(
                                ApiBase::PARAM_DFLT => false,
@@ -214,40 +210,16 @@ class ApiDelete extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'title' => "Title of the page you want to delete. Cannot be used together with {$p}pageid",
-                       'pageid' => "Page ID of the page you want to delete. Cannot be used together with {$p}title",
-                       'token' => 'A delete token previously retrieved through prop=info',
-                       'reason'
-                               => 'Reason for the deletion. If not set, an automatically generated reason will be used',
-                       'watch' => 'Add the page to your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your ' .
-                               'watchlist, use preferences or do not change watch',
-                       'unwatch' => 'Remove the page from your watchlist',
-                       'oldimage' => 'The name of the old image to delete as provided by iiprop=archivename'
-               );
-       }
-
-       public function getDescription() {
-               return 'Delete a page.';
-       }
-
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
+               return 'csrf';
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=delete&title=Main%20Page&token=123ABC' => 'Delete the Main Page',
-                       'api.php?action=delete&title=Main%20Page&token=123ABC&reason=Preparing%20for%20move'
-                               => 'Delete the Main Page with the reason "Preparing for move"',
+                       'action=delete&title=Main%20Page&token=123ABC'
+                               => 'apihelp-delete-example-simple',
+                       'action=delete&title=Main%20Page&token=123ABC&reason=Preparing%20for%20move'
+                               => 'apihelp-delete-example-reason',
                );
        }
 
index 6ea5d20..fc97522 100644 (file)
@@ -44,19 +44,7 @@ class ApiDisabled extends ApiBase {
                return false;
        }
 
-       public function getAllowedParams() {
-               return array();
-       }
-
-       public function getParamDescription() {
-               return array();
-       }
-
-       public function getDescription() {
-               return 'This module has been disabled.';
-       }
-
-       public function getExamples() {
-               return array();
+       protected function getDescriptionMessage() {
+               return 'apihelp-disabled-description';
        }
 }
index 9126ad3..269b016 100644 (file)
@@ -496,10 +496,6 @@ class ApiEditPage extends ApiBase {
                return true;
        }
 
-       public function getDescription() {
-               return 'Create and edit pages.';
-       }
-
        public function getAllowedParams() {
                return array(
                        'title' => array(
@@ -513,10 +509,6 @@ class ApiEditPage extends ApiBase {
                                ApiBase::PARAM_TYPE => 'string',
                        ),
                        'text' => null,
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
-                       ),
                        'summary' => null,
                        'minor' => false,
                        'notminor' => false,
@@ -561,79 +553,29 @@ class ApiEditPage extends ApiBase {
                        ),
                        'contentmodel' => array(
                                ApiBase::PARAM_TYPE => ContentHandler::getContentModels(),
-                       )
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'title' => "Title of the page you want to edit. Cannot be used together with {$p}pageid",
-                       'pageid' => "Page ID of the page you want to edit. Cannot be used together with {$p}title",
-                       'section' => 'Section number. 0 for the top section, \'new\' for a new section',
-                       'sectiontitle' => 'The title for a new section',
-                       'text' => 'Page content',
-                       'token' => array(
-                               'Edit token. You can get one of these through prop=info.',
-                               "The token should always be sent as the last parameter, or at " .
-                                       "least, after the {$p}text parameter"
-                       ),
-                       'summary'
-                               => "Edit summary. Also section title when {$p}section=new and {$p}sectiontitle is not set",
-                       'minor' => 'Minor edit',
-                       'notminor' => 'Non-minor edit',
-                       'bot' => 'Mark this edit as bot',
-                       'basetimestamp' => array(
-                               'Timestamp of the base revision (obtained through prop=revisions&rvprop=timestamp).',
-                               'Used to detect edit conflicts; leave unset to ignore conflicts'
-                       ),
-                       'starttimestamp' => array(
-                               'Timestamp when you obtained the edit token.',
-                               'Used to detect edit conflicts; leave unset to ignore conflicts'
                        ),
-                       'recreate' => 'Override any errors about the article having been deleted in the meantime',
-                       'createonly' => 'Don\'t edit the page if it exists already',
-                       'nocreate' => 'Throw an error if the page doesn\'t exist',
-                       'watch' => 'Add the page to your watchlist',
-                       'unwatch' => 'Remove the page from your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your ' .
-                               'watchlist, use preferences or do not change watch',
-                       'md5' => array(
-                               "The MD5 hash of the {$p}text parameter, or the {$p}prependtext " .
-                                       "and {$p}appendtext parameters concatenated.",
-                               'If set, the edit won\'t be done unless the hash is correct'
+                       'token' => array(
+                               // Standard definition automatically inserted
+                               ApiBase::PARAM_HELP_MSG_APPEND => array( 'apihelp-edit-param-token' ),
                        ),
-                       'prependtext' => "Add this text to the beginning of the page. Overrides {$p}text",
-                       'appendtext' => array( "Add this text to the end of the page. Overrides {$p}text.",
-                               "Use {$p}section=new to append a new section" ),
-                       'undo' => "Undo this revision. Overrides {$p}text, {$p}prependtext and {$p}appendtext",
-                       'undoafter' => 'Undo all revisions from undo to this one. If not set, just undo one revision',
-                       'redirect' => 'Automatically resolve redirects',
-                       'contentformat' => 'Content serialization format used for the input text',
-                       'contentmodel' => 'Content model of the new content',
                );
        }
 
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
+               return 'csrf';
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=edit&title=Test&summary=test%20summary&' .
-                       'text=article%20content&basetimestamp=20070824123454&token=%2B\\'
-                               => 'Edit a page (anonymous user)',
-                       'api.php?action=edit&title=Test&summary=NOTOC&minor=&' .
-                               'prependtext=__NOTOC__%0A&basetimestamp=20070824123454&token=%2B\\'
-                               => 'Prepend __NOTOC__ to a page (anonymous user)',
-                       'api.php?action=edit&title=Test&undo=13585&undoafter=13579&' .
-                               'basetimestamp=20070824123454&token=%2B\\'
-                               => 'Undo r13579 through r13585 with autosummary (anonymous user)',
+                       'action=edit&title=Test&summary=test%20summary&' .
+                               'text=article%20content&basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
+                               => 'apihelp-edit-example-edit',
+                       'action=edit&title=Test&summary=NOTOC&minor=&' .
+                               'prependtext=__NOTOC__%0A&basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
+                               => 'apihelp-edit-example-prepend',
+                       'action=edit&title=Test&undo=13585&undoafter=13579&' .
+                               'basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
+                               => 'apihelp-edit-example-undo',
                );
        }
 
index 1a4d67d..15eb475 100644 (file)
@@ -40,7 +40,11 @@ class ApiEmailUser extends ApiBase {
                }
 
                // Check permissions and errors
-               $error = SpecialEmailUser::getPermissionsError( $this->getUser(), $params['token'] );
+               $error = SpecialEmailUser::getPermissionsError(
+                       $this->getUser(),
+                       $params['token'],
+                       $this->getConfig()
+               );
                if ( $error ) {
                        $this->dieUsageMsg( array( $error ) );
                }
@@ -94,40 +98,18 @@ class ApiEmailUser extends ApiBase {
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true
                        ),
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
-                       ),
                        'ccme' => false,
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'target' => 'User to send email to',
-                       'subject' => 'Subject header',
-                       'text' => 'Mail body',
-                       'token' => 'A token previously acquired via prop=info',
-                       'ccme' => 'Send a copy of this mail to me',
-               );
-       }
-
-       public function getDescription() {
-               return 'Email a user.';
-       }
-
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
+               return 'csrf';
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=emailuser&target=WikiSysop&text=Content'
-                               => 'Send an email to the User "WikiSysop" with the text "Content"',
+                       'action=emailuser&target=WikiSysop&text=Content&token=123ABC'
+                               => 'apihelp-emailuser-example-email',
                );
        }
 
index 8a3b534..eea10e9 100644 (file)
@@ -75,7 +75,7 @@ class ApiExpandTemplates extends ApiBase {
                                $this->logFeatureUsage( 'action=expandtemplates&generatexml' );
                        }
 
-                       $wgParser->startExternalParse( $title_obj, $options, OT_PREPROCESS );
+                       $wgParser->startExternalParse( $title_obj, $options, Parser::OT_PREPROCESS );
                        $dom = $wgParser->preprocessToDom( $params['text'] );
                        if ( is_callable( array( $dom, 'saveXML' ) ) ) {
                                $xml = $dom->saveXML();
@@ -96,7 +96,7 @@ class ApiExpandTemplates extends ApiBase {
                // if they didn't want any output except (probably) the parse tree,
                // then don't bother actually fully expanding it
                if ( $prop || $params['prop'] === null ) {
-                       $wgParser->startExternalParse( $title_obj, $options, OT_PREPROCESS );
+                       $wgParser->startExternalParse( $title_obj, $options, Parser::OT_PREPROCESS );
                        $frame = $wgParser->getPreprocessor()->newFrame();
                        $wikitext = $wgParser->preprocess( $params['text'], $title_obj, $options, null, $frame );
                        if ( $params['prop'] === null ) {
@@ -159,35 +159,10 @@ class ApiExpandTemplates extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
+       protected function getExamplesMessages() {
                return array(
-                       'text' => 'Wikitext to convert',
-                       'title' => 'Title of page',
-                       'prop' => array(
-                               'Which pieces of information to get',
-                               ' wikitext   - The expanded wikitext',
-                               ' categories - Any categories present in the input that are not represented in ' .
-                                       'the wikitext output',
-                               ' volatile   - Whether the output is volatile and should not be reused ' .
-                                       'elsewhere within the page',
-                               ' ttl        - The maximum time after which caches of the result should be ' .
-                                       'invalidated',
-                               ' parsetree  - The XML parse tree of the input',
-                               'Note that if no values are selected, the result will contain the wikitext,',
-                               'but the output will be in a deprecated format.',
-                       ),
-                       'includecomments' => 'Whether to include HTML comments in the output',
-                       'generatexml' => 'Generate XML parse tree (replaced by prop=parsetree)',
-               );
-       }
-
-       public function getDescription() {
-               return 'Expands all templates in wikitext.';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=expandtemplates&text={{Project:Sandbox}}'
+                       'action=expandtemplates&text={{Project:Sandbox}}'
+                               => 'apihelp-expandtemplates-example-simple',
                );
        }
 
index 374203e..ced5f0c 100644 (file)
@@ -161,7 +161,7 @@ class ApiFeedContributions extends ApiBase {
        public function getAllowedParams() {
                $feedFormatNames = array_keys( $this->getConfig()->get( 'FeedClasses' ) );
 
-               return array(
+               $ret = array(
                        'feedformat' => array(
                                ApiBase::PARAM_DFLT => 'rss',
                                ApiBase::PARAM_TYPE => $feedFormatNames
@@ -187,32 +187,22 @@ class ApiFeedContributions extends ApiBase {
                        'deletedonly' => false,
                        'toponly' => false,
                        'newonly' => false,
-                       'showsizediff' => false,
+                       'showsizediff' => array(
+                               ApiBase::PARAM_DFLT => false,
+                       ),
                );
-       }
 
-       public function getParamDescription() {
-               return array(
-                       'feedformat' => 'The format of the feed',
-                       'user' => 'What users to get the contributions for',
-                       'namespace' => 'What namespace to filter the contributions by',
-                       'year' => 'From year (and earlier)',
-                       'month' => 'From month (and earlier)',
-                       'tagfilter' => 'Filter contributions that have these tags',
-                       'deletedonly' => 'Show only deleted contributions',
-                       'toponly' => 'Only show edits that are latest revisions',
-                       'newonly' => 'Only show edits that are page creations',
-                       'showsizediff' => 'Show the size difference between revisions. Disabled in Miser Mode',
-               );
-       }
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
+                       $ret['showsizediff'][ApiBase::PARAM_HELP_MSG] = 'api-help-param-disabled-in-miser-mode';
+               }
 
-       public function getDescription() {
-               return 'Returns a user contributions feed.';
+               return $ret;
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=feedcontributions&user=Reedy',
+                       'action=feedcontributions&user=Example'
+                               => 'apihelp-feedcontributions-example-simple',
                );
        }
 }
index 7239a29..d452bbd 100644 (file)
@@ -171,37 +171,12 @@ class ApiFeedRecentChanges extends ApiBase {
                return $ret;
        }
 
-       public function getParamDescription() {
+       protected function getExamplesMessages() {
                return array(
-                       'feedformat' => 'The format of the feed',
-                       'namespace' => 'Namespace to limit the results to',
-                       'invert' => 'All namespaces but the selected one',
-                       'associated' => 'Include associated (talk or main) namespace',
-                       'days' => 'Days to limit the results to',
-                       'limit' => 'Maximum number of results to return',
-                       'from' => 'Show changes since then',
-                       'hideminor' => 'Hide minor changes',
-                       'hidebots' => 'Hide changes made by bots',
-                       'hideanons' => 'Hide changes made by anonymous users',
-                       'hideliu' => 'Hide changes made by registered users',
-                       'hidepatrolled' => 'Hide patrolled changes',
-                       'hidemyself' => 'Hide changes made by yourself',
-                       'tagfilter' => 'Filter by tag',
-                       'target' => 'Show only changes on pages linked from this page',
-                       'showlinkedto' => 'Show changes on pages linked to the selected page instead',
-                       'categories' => 'Show only changes on pages in all of these categories',
-                       'categories_any' => 'Show only changes on pages in any of the categories instead',
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns a recent changes feed';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=feedrecentchanges',
-                       'api.php?action=feedrecentchanges&days=30'
+                       'action=feedrecentchanges'
+                               => 'apihelp-feedrecentchanges-example-simple',
+                       'action=feedrecentchanges&days=30'
+                               => 'apihelp-feedrecentchanges-example-30days',
                );
        }
 }
index 6aef8fc..561ff3b 100644 (file)
@@ -219,50 +219,42 @@ class ApiFeedWatchlist extends ApiBase {
                        ),
                        'linktosections' => false,
                );
+
+               $copyParams = array(
+                       'allrev' => 'allrev',
+                       'owner' => 'wlowner',
+                       'token' => 'wltoken',
+                       'show' => 'wlshow',
+                       'type' => 'wltype',
+                       'excludeuser' => 'wlexcludeuser',
+               );
                if ( $flags ) {
                        $wlparams = $this->getWatchlistModule()->getAllowedParams( $flags );
-                       $ret['allrev'] = $wlparams['allrev'];
-                       $ret['wlowner'] = $wlparams['owner'];
-                       $ret['wltoken'] = $wlparams['token'];
-                       $ret['wlshow'] = $wlparams['show'];
-                       $ret['wltype'] = $wlparams['type'];
-                       $ret['wlexcludeuser'] = $wlparams['excludeuser'];
+                       foreach ( $copyParams as $from => $to ) {
+                               $p = $wlparams[$from];
+                               if ( !is_array( $p ) ) {
+                                       $p = array( ApiBase::PARAM_DFLT => $p );
+                               }
+                               if ( !isset( $p[ApiBase::PARAM_HELP_MSG] ) ) {
+                                       $p[ApiBase::PARAM_HELP_MSG] = "apihelp-query+watchlist-param-$from";
+                               }
+                               $ret[$to] = $p;
+                       }
                } else {
-                       $ret['allrev'] = null;
-                       $ret['wlowner'] = null;
-                       $ret['wltoken'] = null;
-                       $ret['wlshow'] = null;
-                       $ret['wltype'] = null;
-                       $ret['wlexcludeuser'] = null;
+                       foreach ( $copyParams as $from => $to ) {
+                               $ret[$to] = null;
+                       }
                }
 
                return $ret;
        }
 
-       public function getParamDescription() {
-               $wldescr = $this->getWatchlistModule()->getParamDescription();
-
-               return array(
-                       'feedformat' => 'The format of the feed',
-                       'hours' => 'List pages modified within this many hours from now',
-                       'linktosections' => 'Link directly to changed sections if possible',
-                       'allrev' => $wldescr['allrev'],
-                       'wlowner' => $wldescr['owner'],
-                       'wltoken' => $wldescr['token'],
-                       'wlshow' => $wldescr['show'],
-                       'wltype' => $wldescr['type'],
-                       'wlexcludeuser' => $wldescr['excludeuser'],
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns a watchlist feed.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=feedwatchlist',
-                       'api.php?action=feedwatchlist&allrev=&hours=6'
+                       'action=feedwatchlist'
+                               => 'apihelp-feedwatchlist-example-default',
+                       'action=feedwatchlist&allrev=&hours=6'
+                               => 'apihelp-feedwatchlist-example-all6hrs',
                );
        }
 
index 58e4ff9..61966e5 100644 (file)
@@ -132,41 +132,18 @@ class ApiFileRevert extends ApiBase {
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true,
                        ),
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
-                       ),
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'filename' => 'Target filename without the File: prefix',
-                       'token' => 'Edit token. You can get one of these through prop=info',
-                       'comment' => 'Upload comment',
-                       'archivename' => 'Archive name of the revision to revert to',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Revert a file to an old version.'
                );
        }
 
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
+               return 'csrf';
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=filerevert&filename=Wiki.png&comment=Revert&' .
+                       'action=filerevert&filename=Wiki.png&comment=Revert&' .
                                'archivename=20110305152740!Wiki.png&token=123ABC'
-                               => 'Revert Wiki.png to the version of 20110305152740',
+                               => 'apihelp-filerevert-example-revert',
                );
        }
 }
index 0e3b612..913b8eb 100644 (file)
@@ -30,8 +30,8 @@
  * @ingroup API
  */
 abstract class ApiFormatBase extends ApiBase {
-       private $mIsHtml, $mFormat, $mUnescapeAmps, $mHelp, $mCleared;
-       private $mBufferResult = false, $mBuffer, $mDisabled = false;
+       private $mIsHtml, $mFormat, $mUnescapeAmps, $mHelp;
+       private $mBuffer, $mDisabled = false;
 
        /**
         * If $format ends with 'fm', pretty-print the output in HTML.
@@ -48,12 +48,14 @@ abstract class ApiFormatBase extends ApiBase {
                        $this->mFormat = $format;
                }
                $this->mFormat = strtoupper( $this->mFormat );
-               $this->mCleared = false;
        }
 
        /**
         * Overriding class returns the MIME type that should be sent to the client.
-        * This method is not called if getIsHtml() returns true.
+        *
+        * When getIsHtml() returns true, the return value here is used for syntax
+        * highlighting but the client sees text/html.
+        *
         * @return string
         */
        abstract public function getMimeType();
@@ -74,19 +76,6 @@ abstract class ApiFormatBase extends ApiBase {
                return $this->mFormat;
        }
 
-       /**
-        * Specify whether or not sequences like &amp;quot; should be unescaped
-        * to &quot; . This should only be set to true for the help message
-        * when rendered in the default (xmlfm) format. This is a temporary
-        * special-case fix that should be removed once the help has been
-        * reworked to use a fully HTML interface.
-        *
-        * @param bool $b Whether or not ampersands should be escaped.
-        */
-       public function setUnescapeAmps( $b ) {
-               $this->mUnescapeAmps = $b;
-       }
-
        /**
         * Returns true when the HTML pretty-printer should be used.
         * The default implementation assumes that formats ending with 'fm'
@@ -98,30 +87,27 @@ abstract class ApiFormatBase extends ApiBase {
        }
 
        /**
-        * Whether this formatter can format the help message in a nice way.
-        * By default, this returns the same as getIsHtml().
-        * When action=help is set explicitly, the help will always be shown
-        * @return bool
-        */
-       public function getWantsHelp() {
-               return $this->getIsHtml();
-       }
-
-       /**
-        * Disable the formatter completely. This causes calls to initPrinter(),
-        * printText() and closePrinter() to be ignored.
+        * Disable the formatter.
+        *
+        * This causes calls to initPrinter() and closePrinter() to be ignored.
         */
        public function disable() {
                $this->mDisabled = true;
        }
 
+       /**
+        * Whether the printer is disabled
+        * @return bool
+        */
        public function isDisabled() {
                return $this->mDisabled;
        }
 
        /**
-        * Whether this formatter can handle printing API errors. If this returns
-        * false, then on API errors the default printer will be instantiated.
+        * Whether this formatter can handle printing API errors.
+        *
+        * If this returns false, then on API errors the default printer will be
+        * instantiated.
         * @since 1.23
         * @return bool
         */
@@ -130,24 +116,19 @@ abstract class ApiFormatBase extends ApiBase {
        }
 
        /**
-        * Initialize the printer function and prepare the output headers, etc.
-        * This method must be the first outputting method during execution.
-        * A human-targeted notice about available formats is printed for the HTML-based output,
-        * except for help screens (caused by either an error in the API parameters,
-        * the calling of action=help, or requesting the root script api.php).
-        * @param bool $isHelpScreen Whether a help screen is going to be shown
+        * Initialize the printer function and prepare the output headers.
+        * @param bool $unused Always false since 1.25
         */
-       function initPrinter( $isHelpScreen ) {
+       function initPrinter( $unused = false ) {
                if ( $this->mDisabled ) {
                        return;
                }
-               $isHtml = $this->getIsHtml();
-               $mime = $isHtml ? 'text/html' : $this->getMimeType();
-               $script = wfScript( 'api' );
+
+               $mime = $this->getIsHtml() ? 'text/html' : $this->getMimeType();
 
                // Some printers (ex. Feed) do their own header settings,
                // in which case $mime will be set to null
-               if ( is_null( $mime ) ) {
+               if ( $mime === null ) {
                        return; // skip any initialization
                }
 
@@ -158,91 +139,64 @@ abstract class ApiFormatBase extends ApiBase {
                if ( $apiFrameOptions ) {
                        $this->getMain()->getRequest()->response()->header( "X-Frame-Options: $apiFrameOptions" );
                }
-
-               if ( $isHtml ) {
-?>
-<!DOCTYPE HTML>
-<html>
-<head>
-<?php
-                       if ( $this->mUnescapeAmps ) {
-?>     <title>MediaWiki API</title>
-<?php
-                       } else {
-?>     <title>MediaWiki API Result</title>
-<?php
-                       }
-?>
-</head>
-<body>
-<?php
-                       if ( !$isHelpScreen ) {
-// @codingStandardsIgnoreStart Exclude long line from CodeSniffer checks
-?>
-<br />
-<small>
-You are looking at the HTML representation of the <?php echo $this->mFormat; ?> format.<br />
-HTML is good for debugging, but is unsuitable for application use.<br />
-Specify the format parameter to change the output format.<br />
-To see the non HTML representation of the <?php echo $this->mFormat; ?> format, set format=<?php echo strtolower( $this->mFormat ); ?>.<br />
-See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>, or
-<a href='<?php echo $script; ?>'>API help</a> for more information.
-</small>
-<pre style='white-space: pre-wrap;'>
-<?php
-// @codingStandardsIgnoreEnd
-                       // don't wrap the contents of the <pre> for help screens
-                       // because these are actually formatted to rely on
-                       // the monospaced font for layout purposes
-                       } else {
-?>
-<pre>
-<?php
-                       }
-               }
        }
 
        /**
-        * Finish printing. Closes HTML tags.
+        * Finish printing and output buffered data.
         */
        public function closePrinter() {
                if ( $this->mDisabled ) {
                        return;
                }
-               if ( $this->getIsHtml() ) {
-?>
 
-</pre>
-</body>
-</html>
-<?php
+               $mime = $this->getMimeType();
+               if ( $this->getIsHtml() && $mime !== null ) {
+                       $format = $this->getFormat();
+                       $result = $this->getBuffer();
+
+                       $context = new DerivativeContext( $this->getMain() );
+                       $context->setSkin( SkinFactory::getDefaultInstance()->makeSkin( 'apioutput' ) );
+                       $context->setTitle( SpecialPage::getTitleFor( 'ApiHelp' ) );
+                       $out = new OutputPage( $context );
+                       $context->setOutput( $out );
+
+                       $out->addModules( 'mediawiki.apipretty' );
+                       $out->setPageTitle( $context->msg( 'api-format-title' ) );
+
+                       $header = $context->msg( 'api-format-prettyprint-header' )
+                               ->params( $format, strtolower( $format ) )
+                               ->parseAsBlock();
+                       $out->addHTML(
+                               Html::rawElement( 'div', array( 'class' => 'api-pretty-header' ),
+                                       ApiHelp::fixHelpLinks( $header )
+                               )
+                       );
+
+                       if ( wfRunHooks( 'ApiFormatHighlight', array( $context, $result, $mime, $format ) ) ) {
+                               $out->addHTML(
+                                       Html::element( 'pre', array( 'class' => 'api-pretty-content' ), $result )
+                               );
+                       }
+
+                       // API handles its own clickjacking protection.
+                       // Note, that $wgBreakFrames will still override $wgApiFrameOptions for format mode.
+                       $out->allowClickJacking();
+                       $out->output();
+               } else {
+                       // For non-HTML output, clear all errors that might have been
+                       // displayed if display_errors=On
+                       ob_clean();
+
+                       echo $this->getBuffer();
                }
        }
 
        /**
-        * The main format printing function. Call it to output the result
-        * string to the user. This function will automatically output HTML
-        * when format name ends in 'fm'.
+        * Append text to the output buffer.
         * @param string $text
         */
        public function printText( $text ) {
-               if ( $this->mDisabled ) {
-                       return;
-               }
-               if ( $this->mBufferResult ) {
-                       $this->mBuffer = $text;
-               } elseif ( $this->getIsHtml() ) {
-                       echo $this->formatHTML( $text );
-               } else {
-                       // For non-HTML output, clear all errors that might have been
-                       // displayed if display_errors=On
-                       // Do this only once, of course
-                       if ( !$this->mCleared ) {
-                               ob_clean();
-                               $this->mCleared = true;
-                       }
-                       echo $text;
-               }
+               $this->mBuffer .= $text;
        }
 
        /**
@@ -253,34 +207,89 @@ See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>,
                return $this->mBuffer;
        }
 
+       protected function getExamplesMessages() {
+               return array(
+                       'action=query&meta=siteinfo&siprop=namespaces&format=' . $this->getModuleName()
+                               => array( 'apihelp-format-example-generic', $this->getFormat() )
+               );
+       }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:Data_formats';
+       }
+
        /**
-        * Set the flag to buffer the result instead of printing it.
-        * @param bool $value
+        * To avoid code duplication with the deprecation of dbg, dump, txt, wddx,
+        * and yaml, this method is added to do the necessary work. It should be
+        * removed when those deprecated formats are removed.
         */
-       public function setBufferResult( $value ) {
-               $this->mBufferResult = $value;
+       protected function markDeprecated() {
+               $fm = $this->getIsHtml() ? 'fm' : '';
+               $name = $this->getModuleName();
+               $this->logFeatureUsage( "format=$name" );
+               $this->setWarning( "format=$name has been deprecated. Please use format=json$fm instead." );
+       }
+
+       /************************************************************************//**
+        * @name   Deprecated
+        * @{
+        */
+
+       /**
+        * Specify whether or not sequences like &amp;quot; should be unescaped
+        * to &quot; . This should only be set to true for the help message
+        * when rendered in the default (xmlfm) format. This is a temporary
+        * special-case fix that should be removed once the help has been
+        * reworked to use a fully HTML interface.
+        *
+        * @deprecated since 1.25
+        * @param bool $b Whether or not ampersands should be escaped.
+        */
+       public function setUnescapeAmps( $b ) {
+               wfDeprecated( __METHOD__, '1.25' );
+               $this->mUnescapeAmps = $b;
+       }
+
+       /**
+        * Whether this formatter can format the help message in a nice way.
+        * By default, this returns the same as getIsHtml().
+        * When action=help is set explicitly, the help will always be shown
+        * @deprecated since 1.25
+        * @return bool
+        */
+       public function getWantsHelp() {
+               wfDeprecated( __METHOD__, '1.25' );
+               return $this->getIsHtml();
        }
 
        /**
         * Sets whether the pretty-printer should format *bold*
+        * @deprecated since 1.25
         * @param bool $help
         */
        public function setHelp( $help = true ) {
+               wfDeprecated( __METHOD__, '1.25' );
                $this->mHelp = $help;
        }
 
        /**
         * Pretty-print various elements in HTML format, such as xml tags and
         * URLs. This method also escapes characters like <
+        * @deprecated since 1.25
         * @param string $text
         * @return string
         */
        protected function formatHTML( $text ) {
+               wfDeprecated( __METHOD__, '1.25' );
+
                // Escape everything first for full coverage
                $text = htmlspecialchars( $text );
-               // encode all comments or tags as safe blue strings
-               $text = str_replace( '&lt;', '<span style="color:blue;">&lt;', $text );
-               $text = str_replace( '&gt;', '&gt;</span>', $text );
+
+               if ( $this->mFormat === 'XML' || $this->mFormat === 'WDDX' ) {
+                       // encode all comments or tags as safe blue strings
+                       $text = str_replace( '&lt;', '<span style="color:blue;">&lt;', $text );
+                       $text = str_replace( '&gt;', '&gt;</span>', $text );
+               }
 
                // identify requests to api.php
                $text = preg_replace( '#^(\s*)(api\.php\?[^ <\n\t]+)$#m', '\1<a href="\2">\2</a>', $text );
@@ -325,106 +334,26 @@ See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>,
                return $text;
        }
 
-       public function getExamples() {
-               return array(
-                       'api.php?action=query&meta=siteinfo&siprop=namespaces&format=' . $this->getModuleName()
-                               => "Format the query result in the {$this->getModuleName()} format",
-               );
-       }
-
-       public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Data_formats';
-       }
-
+       /**
+        * @see ApiBase::getDescription
+        * @deprecated since 1.25
+        */
        public function getDescription() {
                return $this->getIsHtml() ? ' (pretty-print in HTML)' : '';
        }
 
        /**
-        * To avoid code duplication with the deprecation of dbg, dump, txt, wddx,
-        * and yaml, this method is added to do the necessary work. It should be
-        * removed when those deprecated formats are removed.
+        * Set the flag to buffer the result instead of printing it.
+        * @deprecated since 1.25, output is always buffered
+        * @param bool $value
         */
-       protected function markDeprecated() {
-               $fm = $this->getIsHtml() ? 'fm' : '';
-               $name = $this->getModuleName();
-               $this->logFeatureUsage( "format=$name" );
-               $this->setWarning( "format=$name has been deprecated. Please use format=json$fm instead." );
+       public function setBufferResult( $value ) {
        }
+
+       /**@}*/
 }
 
 /**
- * This printer is used to wrap an instance of the Feed class
- * @ingroup API
+ * For really cool vim folding this needs to be at the end:
+ * vim: foldmarker=@{,@} foldmethod=marker
  */
-class ApiFormatFeedWrapper extends ApiFormatBase {
-
-       public function __construct( ApiMain $main ) {
-               parent::__construct( $main, 'feed' );
-       }
-
-       /**
-        * Call this method to initialize output data. See execute()
-        * @param ApiResult $result
-        * @param object $feed An instance of one of the $wgFeedClasses classes
-        * @param array $feedItems Array of FeedItem objects
-        */
-       public static function setResult( $result, $feed, $feedItems ) {
-               // Store output in the Result data.
-               // This way we can check during execution if any error has occurred
-               // Disable size checking for this because we can't continue
-               // cleanly; size checking would cause more problems than it'd
-               // solve
-               $result->addValue( null, '_feed', $feed, ApiResult::NO_SIZE_CHECK );
-               $result->addValue( null, '_feeditems', $feedItems, ApiResult::NO_SIZE_CHECK );
-       }
-
-       /**
-        * Feed does its own headers
-        *
-        * @return null
-        */
-       public function getMimeType() {
-               return null;
-       }
-
-       /**
-        * Optimization - no need to sanitize data that will not be needed
-        *
-        * @return bool
-        */
-       public function getNeedsRawData() {
-               return true;
-       }
-
-       /**
-        * ChannelFeed doesn't give us a method to print errors in a friendly
-        * manner, so just punt errors to the default printer.
-        * @return bool
-        */
-       public function canPrintErrors() {
-               return false;
-       }
-
-       /**
-        * This class expects the result data to be in a custom format set by self::setResult()
-        * $result['_feed'] - an instance of one of the $wgFeedClasses classes
-        * $result['_feeditems'] - an array of FeedItem instances
-        */
-       public function execute() {
-               $data = $this->getResultData();
-               if ( isset( $data['_feed'] ) && isset( $data['_feeditems'] ) ) {
-                       $feed = $data['_feed'];
-                       $items = $data['_feeditems'];
-
-                       $feed->outHeader();
-                       foreach ( $items as & $item ) {
-                               $feed->outItem( $item );
-                       }
-                       $feed->outFooter();
-               } else {
-                       // Error has occurred, print something useful
-                       ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' );
-               }
-       }
-}
index 61ed18f..273e205 100644 (file)
@@ -26,6 +26,7 @@
 
 /**
  * API PHP's var_export() output formatter
+ * @deprecated since 1.24
  * @ingroup API
  */
 class ApiFormatDbg extends ApiFormatBase {
@@ -42,7 +43,7 @@ class ApiFormatDbg extends ApiFormatBase {
                $this->printText( var_export( $this->getResultData(), true ) );
        }
 
-       public function getDescription() {
-               return 'DEPRECATED! Output data in PHP\'s var_export() format' . parent::getDescription();
+       public function isDeprecated() {
+               return true;
        }
 }
index 7d32246..7ef8960 100644 (file)
@@ -26,6 +26,7 @@
 
 /**
  * API PHP's var_dump() output formatter
+ * @deprecated since 1.24
  * @ingroup API
  */
 class ApiFormatDump extends ApiFormatBase {
@@ -46,7 +47,7 @@ class ApiFormatDump extends ApiFormatBase {
                $this->printText( $result );
        }
 
-       public function getDescription() {
-               return 'DEPRECATED! Output data in PHP\'s var_dump() format' . parent::getDescription();
+       public function isDeprecated() {
+               return true;
        }
 }
diff --git a/includes/api/ApiFormatFeedWrapper.php b/includes/api/ApiFormatFeedWrapper.php
new file mode 100644 (file)
index 0000000..3f53ed4
--- /dev/null
@@ -0,0 +1,125 @@
+<?php
+/**
+ *
+ *
+ * Created on Sep 19, 2006
+ *
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This printer is used to wrap an instance of the Feed class
+ * @ingroup API
+ */
+class ApiFormatFeedWrapper extends ApiFormatBase {
+
+       public function __construct( ApiMain $main ) {
+               parent::__construct( $main, 'feed' );
+       }
+
+       /**
+        * Call this method to initialize output data. See execute()
+        * @param ApiResult $result
+        * @param object $feed An instance of one of the $wgFeedClasses classes
+        * @param array $feedItems Array of FeedItem objects
+        */
+       public static function setResult( $result, $feed, $feedItems ) {
+               // Store output in the Result data.
+               // This way we can check during execution if any error has occurred
+               // Disable size checking for this because we can't continue
+               // cleanly; size checking would cause more problems than it'd
+               // solve
+               $result->addValue( null, '_feed', $feed, ApiResult::NO_SIZE_CHECK );
+               $result->addValue( null, '_feeditems', $feedItems, ApiResult::NO_SIZE_CHECK );
+       }
+
+       /**
+        * Feed does its own headers
+        *
+        * @return null
+        */
+       public function getMimeType() {
+               return null;
+       }
+
+       /**
+        * Optimization - no need to sanitize data that will not be needed
+        *
+        * @return bool
+        */
+       public function getNeedsRawData() {
+               return true;
+       }
+
+       /**
+        * ChannelFeed doesn't give us a method to print errors in a friendly
+        * manner, so just punt errors to the default printer.
+        * @return bool
+        */
+       public function canPrintErrors() {
+               return false;
+       }
+
+       /**
+        * This class expects the result data to be in a custom format set by self::setResult()
+        * $result['_feed'] - an instance of one of the $wgFeedClasses classes
+        * $result['_feeditems'] - an array of FeedItem instances
+        */
+       public function initPrinter( $unused = false ) {
+               parent::initPrinter( $unused );
+
+               if ( $this->isDisabled() ) {
+                       return;
+               }
+
+               $data = $this->getResultData();
+               if ( isset( $data['_feed'] ) && isset( $data['_feeditems'] ) ) {
+                       $data['_feed']->httpHeaders();
+               } else {
+                       // Error has occurred, print something useful
+                       ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' );
+               }
+       }
+
+       /**
+        * This class expects the result data to be in a custom format set by self::setResult()
+        * $result['_feed'] - an instance of one of the $wgFeedClasses classes
+        * $result['_feeditems'] - an array of FeedItem instances
+        */
+       public function execute() {
+               $data = $this->getResultData();
+               if ( isset( $data['_feed'] ) && isset( $data['_feeditems'] ) ) {
+                       $feed = $data['_feed'];
+                       $items = $data['_feeditems'];
+
+                       // execute() needs to pass strings to $this->printText, not produce output itself.
+                       ob_start();
+                       $feed->outHeader();
+                       foreach ( $items as & $item ) {
+                               $feed->outItem( $item );
+                       }
+                       $feed->outFooter();
+                       $this->printText( ob_get_clean() );
+               } else {
+                       // Error has occurred, print something useful
+                       ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' );
+               }
+       }
+}
index 6c5ad38..ce8656e 100644 (file)
@@ -51,7 +51,11 @@ class ApiFormatJson extends ApiFormatBase {
                return $this->mIsRaw;
        }
 
+       /**
+        * @deprecated since 1.25
+        */
        public function getWantsHelp() {
+               wfDeprecated( __METHOD__, '1.25' );
                // Help is always ugly in JSON
                return false;
        }
@@ -76,25 +80,13 @@ class ApiFormatJson extends ApiFormatBase {
 
        public function getAllowedParams() {
                return array(
-                       'callback' => null,
-                       'utf8' => false,
+                       'callback' => array(
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-json-param-callback',
+                       ),
+                       'utf8' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-json-param-utf8',
+                       ),
                );
        }
-
-       public function getParamDescription() {
-               return array(
-                       'callback' => 'If specified, wraps the output into a given function ' .
-                               'call. For safety, all user-specific data will be restricted.',
-                       'utf8' => 'If specified, encodes most (but not all) non-ASCII ' .
-                               'characters as UTF-8 instead of replacing them with hexadecimal escape sequences.',
-               );
-       }
-
-       public function getDescription() {
-               if ( $this->mIsRaw ) {
-                       return 'Output data with the debugging elements in JSON format' . parent::getDescription();
-               }
-
-               return 'Output data in JSON format' . parent::getDescription();
-       }
 }
index 78023af..dc623ac 100644 (file)
@@ -36,8 +36,4 @@ class ApiFormatNone extends ApiFormatBase {
 
        public function execute() {
        }
-
-       public function getDescription() {
-               return 'Output nothing' . parent::getDescription();
-       }
 }
index b2d1f04..ae93812 100644 (file)
@@ -37,8 +37,4 @@ class ApiFormatPhp extends ApiFormatBase {
        public function execute() {
                $this->printText( serialize( $this->getResultData() ) );
        }
-
-       public function getDescription() {
-               return 'Output data in serialized PHP format' . parent::getDescription();
-       }
 }
index 3f5c8b7..81d2f4f 100644 (file)
  */
 class ApiFormatRaw extends ApiFormatBase {
 
+       private $errorFallback;
+
        /**
         * @param ApiMain $main
         * @param ApiFormatBase $errorFallback Object to fall back on for errors
         */
        public function __construct( ApiMain $main, ApiFormatBase $errorFallback ) {
                parent::__construct( $main, 'raw' );
-               $this->mErrorFallback = $errorFallback;
+               $this->errorFallback = $errorFallback;
        }
 
        public function getMimeType() {
                $data = $this->getResultData();
 
                if ( isset( $data['error'] ) ) {
-                       return $this->mErrorFallback->getMimeType();
+                       return $this->errorFallback->getMimeType();
                }
 
                if ( !isset( $data['mime'] ) ) {
@@ -53,11 +55,28 @@ class ApiFormatRaw extends ApiFormatBase {
                return $data['mime'];
        }
 
-       public function execute() {
+       public function initPrinter( $unused = false ) {
+               $data = $this->getResultData();
+               if ( isset( $data['error'] ) ) {
+                       $this->errorFallback->initPrinter( $unused );
+               } else {
+                       parent::initPrinter( $unused );
+               }
+       }
+
+       public function closePrinter() {
                $data = $this->getResultData();
                if ( isset( $data['error'] ) ) {
-                       $this->mErrorFallback->execute();
+                       $this->errorFallback->closePrinter();
+               } else {
+                       parent::closePrinter();
+               }
+       }
 
+       public function execute() {
+               $data = $this->getResultData();
+               if ( isset( $data['error'] ) ) {
+                       $this->errorFallback->execute();
                        return;
                }
 
index 3de2943..505b259 100644 (file)
@@ -26,6 +26,7 @@
 
 /**
  * API Text output formatter
+ * @deprecated since 1.24
  * @ingroup API
  */
 class ApiFormatTxt extends ApiFormatBase {
@@ -42,7 +43,7 @@ class ApiFormatTxt extends ApiFormatBase {
                $this->printText( print_r( $this->getResultData(), true ) );
        }
 
-       public function getDescription() {
-               return 'DEPRECATED! Output data in PHP\'s print_r() format' . parent::getDescription();
+       public function isDeprecated() {
+               return true;
        }
 }
index a08c3ab..e2d4d61 100644 (file)
@@ -26,6 +26,7 @@
 
 /**
  * API WDDX output formatter
+ * @deprecated since 1.24
  * @ingroup API
  */
 class ApiFormatWddx extends ApiFormatBase {
@@ -108,7 +109,7 @@ class ApiFormatWddx extends ApiFormatBase {
                }
        }
 
-       public function getDescription() {
-               return 'DEPRECATED! Output data in WDDX format' . parent::getDescription();
+       public function isDeprecated() {
+               return true;
        }
 }
index b3d5937..7010dd6 100644 (file)
@@ -237,20 +237,13 @@ class ApiFormatXml extends ApiFormatBase {
 
        public function getAllowedParams() {
                return array(
-                       'xslt' => null,
-                       'includexmlnamespace' => false,
+                       'xslt' => array(
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-xml-param-xslt',
+                       ),
+                       'includexmlnamespace' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-xml-param-includexmlnamespace',
+                       ),
                );
        }
-
-       public function getParamDescription() {
-               return array(
-                       'xslt' => 'If specified, adds <xslt> as stylesheet. This should be a wiki page '
-                               . 'in the MediaWiki namespace whose page name ends with ".xsl"',
-                       'includexmlnamespace' => 'If specified, adds an XML namespace'
-               );
-       }
-
-       public function getDescription() {
-               return 'Output data in XML format' . parent::getDescription();
-       }
 }
index 9f9b057..c9089a7 100644 (file)
@@ -26,6 +26,7 @@
 
 /**
  * API YAML output formatter
+ * @deprecated since 1.24
  * @ingroup API
  */
 class ApiFormatYaml extends ApiFormatJson {
@@ -39,7 +40,7 @@ class ApiFormatYaml extends ApiFormatJson {
                parent::execute();
        }
 
-       public function getDescription() {
-               return 'DEPRECATED! Output data in YAML format' . ApiFormatBase::getDescription();
+       public function isDeprecated() {
+               return true;
        }
 }
index bcd6c12..5d46a07 100644 (file)
@@ -2,9 +2,9 @@
 /**
  *
  *
- * Created on Sep 6, 2006
+ * Created on Aug 29, 2014
  *
- * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ * Copyright © 2014 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
  */
 
 /**
- * This is a simple class to handle action=help
+ * Class to output help for an API module
  *
+ * @since 1.25 completely rewritten
  * @ingroup API
  */
 class ApiHelp extends ApiBase {
-       /**
-        * Module for displaying help
-        */
        public function execute() {
-               // Get parameters
                $params = $this->extractRequestParams();
+               $modules = array();
 
-               if ( !isset( $params['modules'] ) && !isset( $params['querymodules'] ) ) {
-                       $this->dieUsage( '', 'help' );
+               foreach ( $params['modules'] as $path ) {
+                       $modules[] = $this->getModuleFromPath( $path );
                }
 
-               $this->getMain()->setHelp();
-               $result = $this->getResult();
+               // Get the help
+               $context = new DerivativeContext( $this->getMain()->getContext() );
+               $context->setSkin( SkinFactory::getDefaultInstance()->makeSkin( 'apioutput' ) );
+               $context->setLanguage( $this->getMain()->getLanguage() );
+               $context->setTitle( SpecialPage::getTitleFor( 'ApiHelp' ) );
+               $out = new OutputPage( $context );
+               $context->setOutput( $out );
+
+               self::getHelp( $context, $modules, $params );
 
-               if ( is_array( $params['modules'] ) ) {
-                       $modules = $params['modules'];
+               // Grab the output from the skin
+               ob_start();
+               $context->getOutput()->output();
+               $html = ob_get_clean();
+
+               $result = $this->getResult();
+               if ( $params['wrap'] ) {
+                       $data = array(
+                               'mime' => 'text/html',
+                               'help' => $html,
+                       );
+                       $result->setSubelements( $data, 'help' );
+                       $result->addValue( null, $this->getModuleName(), $data );
                } else {
-                       $modules = array();
+                       $result->reset();
+                       $result->addValue( null, 'text', $html, ApiResult::NO_SIZE_CHECK );
+                       $result->addValue( null, 'mime', 'text/html', ApiResult::NO_SIZE_CHECK );
+               }
+       }
+
+       /**
+        * Generate help for the specified modules
+        *
+        * Help is placed into the OutputPage object returned by
+        * $context->getOutput().
+        *
+        * Recognized options include:
+        *  - headerlevel: (int) Header tag level
+        *  - nolead: (bool) Skip the inclusion of api-help-lead
+        *  - noheader: (bool) Skip the inclusion of the top-level section headers
+        *  - submodules: (bool) Include help for submodules of the current module
+        *  - recursivesubmodules: (bool) Include help for submodules recursively
+        *  - helptitle: (string) Title to link for additional modules' help. Should contain $1.
+        *
+        * @param IContextSource $context
+        * @param ApiBase[]|ApiBase $modules
+        * @param array $options Formatting options (described above)
+        * @return string
+        */
+       public static function getHelp( IContextSource $context, $modules, array $options ) {
+               global $wgMemc, $wgContLang;
+
+               if ( !is_array( $modules ) ) {
+                       $modules = array( $modules );
                }
 
-               if ( is_array( $params['querymodules'] ) ) {
-                       $this->logFeatureUsage( 'action=help&querymodules' );
-                       $queryModules = $params['querymodules'];
-                       foreach ( $queryModules as $m ) {
-                               $modules[] = 'query+' . $m;
+               $out = $context->getOutput();
+               $out->addModules( 'mediawiki.apihelp' );
+               $out->setPageTitle( $context->msg( 'api-help-title' ) );
+
+               $cacheKey = null;
+               if ( count( $modules ) == 1 && $modules[0] instanceof ApiMain &&
+                       $options['recursivesubmodules'] && $context->getLanguage() === $wgContLang
+               ) {
+                       $cacheHelpTimeout = $context->getConfig()->get( 'APICacheHelpTimeout' );
+                       if ( $cacheHelpTimeout > 0 ) {
+                               // Get help text from cache if present
+                               $cacheKey = wfMemcKey( 'apihelp', $modules[0]->getModulePath(),
+                                       str_replace( ' ', '_', SpecialVersion::getVersion( 'nodb' ) ) );
+                               $cached = $wgMemc->get( $cacheKey );
+                               if ( $cached ) {
+                                       $out->addHTML( $cached );
+                                       return;
+                               }
                        }
-               } else {
-                       $queryModules = array();
                }
+               if ( $out->getHTML() !== '' ) {
+                       // Don't save to cache, there's someone else's content in the page
+                       // already
+                       $cacheKey = null;
+               }
+
+               $options['recursivesubmodules'] = !empty( $options['recursivesubmodules'] );
+               $options['submodules'] = $options['recursivesubmodules'] || !empty( $options['submodules'] );
 
-               $r = array();
-               foreach ( $modules as $m ) {
-                       // sub-modules could be given in the form of "name[+name[+name...]]"
-                       $subNames = explode( '+', $m );
-                       if ( count( $subNames ) === 1 ) {
-                               // In case the '+' was typed into URL, it resolves as a space
-                               $subNames = explode( ' ', $m );
+               // Prepend lead
+               if ( empty( $options['nolead'] ) ) {
+                       $msg = $context->msg( 'api-help-lead' );
+                       if ( !$msg->isDisabled() ) {
+                               $out->addHTML( $msg->parseAsBlock() );
                        }
+               }
 
-                       $module = $this->getMain();
-                       $subNamesCount = count( $subNames );
-                       for ( $i = 0; $i < $subNamesCount; $i++ ) {
-                               $subs = $module->getModuleManager();
-                               if ( $subs === null ) {
-                                       $module = null;
-                               } else {
-                                       $module = $subs->getModule( $subNames[$i] );
-                               }
+               $haveModules = array();
+               $out->addHTML( self::getHelpInternal( $context, $modules, $options, $haveModules ) );
 
-                               if ( $module === null ) {
-                                       if ( count( $subNames ) === 2
-                                               && $i === 1
-                                               && $subNames[0] === 'query'
-                                               && in_array( $subNames[1], $queryModules )
-                                       ) {
-                                               // Legacy: This is one of the renamed 'querymodule=...' parameters,
-                                               // do not use '+' notation in the output, use submodule's name instead.
-                                               $name = $subNames[1];
-                                       } else {
-                                               $name = implode( '+', array_slice( $subNames, 0, $i + 1 ) );
-                                       }
-                                       $r[] = array( 'name' => $name, 'missing' => '' );
-                                       break;
+               $helptitle = isset( $options['helptitle'] ) ? $options['helptitle'] : null;
+               $html = self::fixHelpLinks( $out->getHTML(), $helptitle, $haveModules );
+               $out->clearHTML();
+               $out->addHTML( $html );
+
+               if ( $cacheKey !== null ) {
+                       $wgMemc->set( $cacheKey, $out->getHTML(), $cacheHelpTimeout );
+               }
+       }
+
+       /**
+        * Replace Special:ApiHelp links with links to api.php
+        *
+        * @param string $html
+        * @param string|null $helptitle Title to link to rather than api.php, must contain '$1'
+        * @param array $localModules Modules to link within the current page
+        * @return string
+        */
+       public static function fixHelpLinks( $html, $helptitle = null, $localModules = array() ) {
+               $formatter = new HtmlFormatter( $html );
+               $doc = $formatter->getDoc();
+               $xpath = new DOMXPath( $doc );
+               $nodes = $xpath->query( '//a[@href][not(contains(@class,\'apihelp-linktrail\'))]' );
+               foreach ( $nodes as $node ) {
+                       $href = $node->getAttribute( 'href' );
+                       do {
+                               $old = $href;
+                               $href = rawurldecode( $href );
+                       } while ( $old !== $href );
+                       if ( preg_match( '!Special:ApiHelp/([^&/|]+)!', $href, $m ) ) {
+                               if ( isset( $localModules[$m[1]] ) ) {
+                                       $href = '#' . $m[1];
+                               } elseif ( $helptitle !== null ) {
+                                       $href = Title::newFromText( str_replace( '$1', $m[1], $helptitle ) )
+                                               ->getFullUrl();
                                } else {
-                                       $type = $subs->getModuleGroup( $subNames[$i] );
+                                       $href = wfAppendQuery( wfScript( 'api' ), array(
+                                               'action' => 'help',
+                                               'modules' => $m[1],
+                                       ) );
                                }
-                       }
-
-                       if ( $module !== null ) {
-                               $r[] = $this->buildModuleHelp( $module, $type );
+                               $node->setAttribute( 'href', $href );
+                               $node->removeAttribute( 'title' );
                        }
                }
 
-               $result->setIndexedTagName( $r, 'module' );
-               $result->addValue( null, $this->getModuleName(), $r );
+               return $formatter->getText();
        }
 
        /**
-        * @param ApiBase $module
-        * @param string $type What type of request is this? e.g. action, query, list, prop, meta, format
+        * Wrap a message in HTML with a class.
+        *
+        * @param Message $msg
+        * @param string $class
+        * @param string $tag
         * @return string
         */
-       private function buildModuleHelp( $module, $type ) {
-               $msg = ApiMain::makeHelpMsgHeader( $module, $type );
+       private static function wrap( Message $msg, $class, $tag = 'span' ) {
+               return Html::rawElement( $tag, array( 'class' => $class ),
+                       $msg->parse()
+               );
+       }
+
+       /**
+        * Recursively-called function to actually construct the help
+        *
+        * @param IContextSource $context
+        * @param ApiBase[] $modules
+        * @param array $options
+        * @param array &$haveModules
+        * @return string
+        */
+       private static function getHelpInternal( IContextSource $context, array $modules,
+               array $options, &$haveModules
+       ) {
+               $out = '';
+
+               $level = min( 6, empty( $options['headerlevel'] ) ? 2 : $options['headerlevel'] );
+               $options['headerlevel'] = $level;
+
+               foreach ( $modules as $module ) {
+                       $haveModules[$module->getModulePath()] = true;
+                       $module->setContext( $context );
+                       $help = array(
+                               'header' => '',
+                               'flags' => '',
+                               'description' => '',
+                               'help-urls' => '',
+                               'parameters' => '',
+                               'examples' => '',
+                               'submodules' => '',
+                       );
+
+                       if ( empty( $options['noheader'] ) ) {
+                               $path = $module->getModulePath();
+                               if ( $module->isMain() ) {
+                                       $header = $context->msg( 'api-help-main-header' )->parse();
+                               } else {
+                                       $name = $module->getModuleName();
+                                       $header = $module->getParent()->getModuleManager()->getModuleGroup( $name ) .
+                                               "=$name";
+                                       if ( $module->getModulePrefix() !== '' ) {
+                                               $header .= ' ' .
+                                                       $context->msg( 'parentheses', $module->getModulePrefix() )->parse();
+                                       }
+                               }
+                               $help['header'] .= Html::element( "h$level",
+                                       array( 'id' => $path, 'class' => 'apihelp-header' ),
+                                       $header
+                               );
+                       }
+
+                       $links = array();
+                       $any = false;
+                       for ( $m = $module; $m !== null; $m = $m->getParent() ) {
+                               $name = $m->getModuleName();
+                               if ( $name === 'main_int' ) {
+                                       $name = 'main';
+                               }
 
-               $msg2 = $module->makeHelpMsg();
-               if ( $msg2 !== false ) {
-                       $msg .= $msg2;
+                               if ( count( $modules ) === 1 && $m === $modules[0] &&
+                                       !( !empty( $options['submodules'] ) && $m->getModuleManager() )
+                               ) {
+                                       $link = Html::element( 'b', null, $name );
+                               } else {
+                                       $link = SpecialPage::getTitleFor( 'ApiHelp', $m->getModulePath() )->getLocalURL();
+                                       $link = Html::element( 'a',
+                                               array( 'href' => $link, 'class' => 'apihelp-linktrail' ),
+                                               $name
+                                       );
+                                       $any = true;
+                               }
+                               array_unshift( $links, $link );
+                       }
+                       if ( $any ) {
+                               $help['header'] .= self::wrap(
+                                       $context->msg( 'parentheses' )
+                                               ->rawParams( $context->getLanguage()->pipeList( $links ) ),
+                                       'apihelp-linktrail', 'div'
+                               );
+                       }
+
+                       $flags = $module->getHelpFlags();
+                       if ( $flags ) {
+                               $help['flags'] .= Html::openElement( 'div',
+                                       array( 'class' => 'apihelp-block apihelp-flags' ) );
+                               $msg = $context->msg( 'api-help-flags' );
+                               if ( !$msg->isDisabled() ) {
+                                       $help['flags'] .= self::wrap(
+                                               $msg->numParams( count( $flags ) ), 'apihelp-block-head', 'div'
+                                       );
+                               }
+                               $help['flags'] .= Html::openElement( 'ul' );
+                               foreach ( $flags as $flag ) {
+                                       $help['flags'] .= Html::rawElement( 'li', null,
+                                               self::wrap( $context->msg( "api-help-flag-$flag" ), "apihelp-flag-$flag" )
+                                       );
+                               }
+                               $help['flags'] .= Html::closeElement( 'ul' );
+                               $help['flags'] .= Html::closeElement( 'div' );
+                       }
+
+                       foreach ( $module->getFinalDescription() as $msg ) {
+                               $msg->setContext( $context );
+                               $help['description'] .= $msg->parseAsBlock();
+                       }
+
+                       $urls = $module->getHelpUrls();
+                       if ( $urls ) {
+                               $help['help-urls'] .= Html::openElement( 'div',
+                                       array( 'class' => 'apihelp-block apihelp-help-urls' )
+                               );
+                               $msg = $context->msg( 'api-help-help-urls' );
+                               if ( !$msg->isDisabled() ) {
+                                       $help['help-urls'] .= self::wrap(
+                                               $msg->numParams( count( $urls ) ), 'apihelp-block-head', 'div'
+                                       );
+                               }
+                               if ( !is_array( $urls ) ) {
+                                       $urls = array( $urls );
+                               }
+                               $help['help-urls'] .= Html::openElement( 'ul' );
+                               foreach ( $urls as $url ) {
+                                       $help['help-urls'] .= Html::rawElement( 'li', null,
+                                               Html::element( 'a', array( 'href' => $url ), $url )
+                                       );
+                               }
+                               $help['help-urls'] .= Html::closeElement( 'ul' );
+                               $help['help-urls'] .= Html::closeElement( 'div' );
+                       }
+
+                       $params = $module->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
+                       $groups = array();
+                       if ( $params ) {
+                               $help['parameters'] .= Html::openElement( 'div',
+                                       array( 'class' => 'apihelp-block apihelp-parameters' )
+                               );
+                               $msg = $context->msg( 'api-help-parameters' );
+                               if ( !$msg->isDisabled() ) {
+                                       $help['parameters'] .= self::wrap(
+                                               $msg->numParams( count( $params ) ), 'apihelp-block-head', 'div'
+                                       );
+                               }
+                               $help['parameters'] .= Html::openElement( 'dl' );
+
+                               $descriptions = $module->getFinalParamDescription();
+
+                               foreach ( $params as $name => $settings ) {
+                                       if ( !is_array( $settings ) ) {
+                                               $settings = array( ApiBase::PARAM_DFLT => $settings );
+                                       }
+
+                                       $help['parameters'] .= Html::element( 'dt', null,
+                                               $module->encodeParamName( $name ) );
+
+                                       // Add description
+                                       $description = array();
+                                       if ( isset( $descriptions[$name] ) ) {
+                                               foreach ( $descriptions[$name] as $msg ) {
+                                                       $msg->setContext( $context );
+                                                       $description[] = $msg->parseAsBlock();
+                                               }
+                                       }
+
+                                       // Add usage info
+                                       $info = array();
+
+                                       // Required?
+                                       if ( !empty( $settings[ApiBase::PARAM_REQUIRED] ) ) {
+                                               $info[] = $context->msg( 'api-help-param-required' )->parse();
+                                       }
+
+                                       // Custom info?
+                                       if ( !empty( $settings[ApiBase::PARAM_HELP_MSG_INFO] ) ) {
+                                               foreach ( $settings[ApiBase::PARAM_HELP_MSG_INFO] as $i ) {
+                                                       $tag = array_shift( $i );
+                                                       $info[] = $context->msg( "apihelp-{$path}-paraminfo-{$tag}" )
+                                                               ->numParams( count( $i ) )
+                                                               ->params( $context->getLanguage()->commaList( $i ) )
+                                                               ->params( $module->getModulePrefix() )
+                                                               ->parse();
+                                               }
+                                       }
+
+                                       // Type documentation
+                                       if ( !isset( $settings[ApiBase::PARAM_TYPE] ) ) {
+                                               $dflt = isset( $settings[ApiBase::PARAM_DFLT] )
+                                                       ? $settings[ApiBase::PARAM_DFLT]
+                                                       : null;
+                                               if ( is_bool( $dflt ) ) {
+                                                       $settings[ApiBase::PARAM_TYPE] = 'boolean';
+                                               } elseif ( is_string( $dflt ) || is_null( $dflt ) ) {
+                                                       $settings[ApiBase::PARAM_TYPE] = 'string';
+                                               } elseif ( is_int( $dflt ) ) {
+                                                       $settings[ApiBase::PARAM_TYPE] = 'integer';
+                                               }
+                                       }
+                                       if ( isset( $settings[ApiBase::PARAM_TYPE] ) ) {
+                                               $type = $settings[ApiBase::PARAM_TYPE];
+                                               $multi = !empty( $settings[ApiBase::PARAM_ISMULTI] );
+                                               $hintPipeSeparated = true;
+                                               $count = ApiBase::LIMIT_SML2 + 1;
+
+                                               if ( is_array( $type ) ) {
+                                                       $count = count( $type );
+                                                       $links = isset( $settings[ApiBase::PARAM_VALUE_LINKS] )
+                                                               ? $settings[ApiBase::PARAM_VALUE_LINKS]
+                                                               : array();
+                                                       $type = array_map( function ( $v ) use ( $links ) {
+                                                               $ret = wfEscapeWikiText( $v );
+                                                               if ( isset( $links[$v] ) ) {
+                                                                       $ret = "[[{$links[$v]}|$ret]]";
+                                                               }
+                                                               return $ret;
+                                                       }, $type );
+                                                       $i = array_search( '', $type, true );
+                                                       if ( $i === false ) {
+                                                               $type = $context->getLanguage()->commaList( $type );
+                                                       } else {
+                                                               unset( $type[$i] );
+                                                               $type = $context->msg( 'api-help-param-list-can-be-empty' )
+                                                                       ->numParams( count( $type ) )
+                                                                       ->params( $context->getLanguage()->commaList( $type ) )
+                                                                       ->parse();
+                                                       }
+                                                       $info[] = $context->msg( 'api-help-param-list' )
+                                                               ->params( $multi ? 2 : 1 )
+                                                               ->params( $type )
+                                                               ->parse();
+                                                       $hintPipeSeparated = false;
+                                               } else {
+                                                       switch ( $type ) {
+                                                               case 'submodule':
+                                                                       $groups[] = $name;
+                                                                       $submodules = $module->getModuleManager()->getNames( $name );
+                                                                       $count = count( $submodules );
+                                                                       sort( $submodules );
+                                                                       $prefix = $module->isMain()
+                                                                               ? '' : ( $module->getModulePath() . '+' );
+                                                                       $submodules = array_map( function ( $name ) use ( $prefix ) {
+                                                                               return "[[Special:ApiHelp/{$prefix}{$name}|{$name}]]";
+                                                                       }, $submodules );
+                                                                       $info[] = $context->msg( 'api-help-param-list' )
+                                                                               ->params( $multi ? 2 : 1 )
+                                                                               ->params( $context->getLanguage()->commaList( $submodules ) )
+                                                                               ->parse();
+                                                                       $hintPipeSeparated = false;
+                                                                       break;
+
+                                                               case 'namespace':
+                                                                       $namespaces = MWNamespace::getValidNamespaces();
+                                                                       $count = count( $namespaces );
+                                                                       $info[] = $context->msg( 'api-help-param-list' )
+                                                                               ->params( $multi ? 2 : 1 )
+                                                                               ->params( $context->getLanguage()->commaList( $namespaces ) )
+                                                                               ->parse();
+                                                                       $hintPipeSeparated = false;
+                                                                       break;
+
+                                                               case 'limit':
+                                                                       if ( isset( $settings[ApiBase::PARAM_MAX2] ) ) {
+                                                                               $info[] = $context->msg( 'api-help-param-limit2' )
+                                                                                       ->numParams( $settings[ApiBase::PARAM_MAX] )
+                                                                                       ->numParams( $settings[ApiBase::PARAM_MAX2] )
+                                                                                       ->parse();
+                                                                       } else {
+                                                                               $info[] = $context->msg( 'api-help-param-limit' )
+                                                                                       ->numParams( $settings[ApiBase::PARAM_MAX] )
+                                                                                       ->parse();
+                                                                       }
+                                                                       break;
+
+                                                               case 'integer':
+                                                                       // Possible messages:
+                                                                       // api-help-param-integer-min,
+                                                                       // api-help-param-integer-max,
+                                                                       // api-help-param-integer-minmax
+                                                                       $suffix = '';
+                                                                       $min = $max = 0;
+                                                                       if ( isset( $settings[ApiBase::PARAM_MIN] ) ) {
+                                                                               $suffix .= 'min';
+                                                                               $min = $settings[ApiBase::PARAM_MIN];
+                                                                       }
+                                                                       if ( isset( $settings[ApiBase::PARAM_MAX] ) ) {
+                                                                               $suffix .= 'max';
+                                                                               $max = $settings[ApiBase::PARAM_MAX];
+                                                                       }
+                                                                       if ( $suffix !== '' ) {
+                                                                               $info[] =
+                                                                                       $context->msg( "api-help-param-integer-$suffix" )
+                                                                                               ->params( $multi ? 2 : 1 )
+                                                                                               ->numParams( $min, $max )
+                                                                                               ->parse();
+                                                                       }
+                                                                       break;
+
+                                                               case 'upload':
+                                                                       $info[] = $context->msg( 'api-help-param-upload' )
+                                                                               ->parse();
+                                                                       break;
+                                                       }
+                                               }
+
+                                               if ( $multi ) {
+                                                       $extra = array();
+                                                       if ( $hintPipeSeparated ) {
+                                                               $extra[] = $context->msg( 'api-help-param-multi-separate' )->parse();
+                                                       }
+                                                       if ( $count > ApiBase::LIMIT_SML1 ) {
+                                                               $extra[] = $context->msg( 'api-help-param-multi-max' )
+                                                                       ->numParams( ApiBase::LIMIT_SML1, ApiBase::LIMIT_SML2 )
+                                                                       ->parse();
+                                                       }
+                                                       if ( $extra ) {
+                                                               $info[] = join( ' ', $extra );
+                                                       }
+                                               }
+                                       }
+
+                                       // Add default
+                                       $default = isset( $settings[ApiBase::PARAM_DFLT] )
+                                               ? $settings[ApiBase::PARAM_DFLT]
+                                               : null;
+                                       if ( $default === '' ) {
+                                               $info[] = $context->msg( 'api-help-param-default-empty' )
+                                                       ->parse();
+                                       } elseif ( $default !== null && $default !== false ) {
+                                               $info[] = $context->msg( 'api-help-param-default' )
+                                                       ->params( wfEscapeWikiText( $default ) )
+                                                       ->parse();
+                                       }
+
+                                       if ( !array_filter( $description ) ) {
+                                               $description = array( self::wrap(
+                                                       $context->msg( 'api-help-param-no-description' ),
+                                                       'apihelp-empty'
+                                               ) );
+                                       }
+
+                                       // Add "deprecated" flag
+                                       if ( !empty( $settings[ApiBase::PARAM_DEPRECATED] ) ) {
+                                               $help['parameters'] .= Html::openElement( 'dd',
+                                                       array( 'class' => 'info' ) );
+                                               $help['parameters'] .= self::wrap(
+                                                       $context->msg( 'api-help-param-deprecated' ),
+                                                       'apihelp-deprecated', 'strong'
+                                               );
+                                               $help['parameters'] .= Html::closeElement( 'dd' );
+                                       }
+
+                                       if ( $description ) {
+                                               $help['parameters'] .= Html::openElement( 'dd',
+                                                       array( 'class' => 'description' ) );
+                                               $help['parameters'] .= join( '', $description );
+                                               $help['parameters'] .= Html::closeElement( 'dd' );
+                                       }
+
+                                       foreach ( $info as $i ) {
+                                               $help['parameters'] .= Html::rawElement( 'dd', array( 'class' => 'info' ), $i );
+                                       }
+                               }
+
+                               $help['parameters'] .= Html::closeElement( 'dl' );
+                               $help['parameters'] .= Html::closeElement( 'div' );
+                       }
+
+                       $examples = $module->getExamplesMessages();
+                       if ( $examples ) {
+                               $help['examples'] .= Html::openElement( 'div',
+                                       array( 'class' => 'apihelp-block apihelp-examples' ) );
+                               $msg = $context->msg( 'api-help-examples' );
+                               if ( !$msg->isDisabled() ) {
+                                       $help['examples'] .= self::wrap(
+                                               $msg->numParams( count( $examples ) ), 'apihelp-block-head', 'div'
+                                       );
+                               }
+
+                               $help['examples'] .= Html::openElement( 'dl' );
+                               foreach ( $examples as $qs => $msg ) {
+                                       $msg = ApiBase::makeMessage( $msg, $context, array(
+                                               $module->getModulePrefix(),
+                                               $module->getModuleName(),
+                                               $module->getModulePath()
+                                       ) );
+
+                                       $link = wfAppendQuery( wfScript( 'api' ), $qs );
+                                       $help['examples'] .= Html::rawElement( 'dt', null, $msg->parse() );
+                                       $help['examples'] .= Html::rawElement( 'dd', null,
+                                               Html::element( 'a', array( 'href' => $link ), "api.php?$qs" )
+                                       );
+                               }
+                               $help['examples'] .= Html::closeElement( 'dl' );
+                               $help['examples'] .= Html::closeElement( 'div' );
+                       }
+
+                       if ( $options['submodules'] && $module->getModuleManager() ) {
+                               $manager = $module->getModuleManager();
+                               $submodules = array();
+                               foreach ( $groups as $group ) {
+                                       $names = $manager->getNames( $group );
+                                       sort( $names );
+                                       foreach ( $names as $name ) {
+                                               $submodules[] = $manager->getModule( $name );
+                                       }
+                               }
+                               $help['submodules'] .= self::getHelpInternal( $context, $submodules, array(
+                                       'submodules' => $options['recursivesubmodules'],
+                                       'headerlevel' => $level + 1,
+                                       'noheader' => false,
+                               ) + $options, $haveModules );
+                       }
+
+                       $module->modifyHelp( $help, $options );
+
+                       wfRunHooks( 'APIHelpModifyOutput', array( $module, &$help, $options ) );
+
+                       $out .= join( "\n", $help );
                }
 
-               return $msg;
+               return $out;
        }
 
        public function shouldCheckMaxlag() {
@@ -131,39 +625,40 @@ class ApiHelp extends ApiBase {
                return false;
        }
 
+       public function getCustomPrinter() {
+               $params = $this->extractRequestParams();
+               if ( $params['wrap'] ) {
+                       return null;
+               }
+
+               $main = $this->getMain();
+               $errorPrinter = $main->createPrinterByName( $main->getParameter( 'format' ) );
+               return new ApiFormatRaw( $main, $errorPrinter );
+       }
+
        public function getAllowedParams() {
                return array(
                        'modules' => array(
-                               ApiBase::PARAM_ISMULTI => true
-                       ),
-                       'querymodules' => array(
+                               ApiBase::PARAM_DFLT => 'main',
                                ApiBase::PARAM_ISMULTI => true,
-                               ApiBase::PARAM_DEPRECATED => true
                        ),
+                       'submodules' => false,
+                       'recursivesubmodules' => false,
+                       'wrap' => false,
+                       'toc' => false,
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'modules' => 'List of module names (value of the action= parameter). ' .
-                               'Can specify submodules with a \'+\'',
-                       'querymodules' => 'Use modules=query+value instead. List of query ' .
-                               'module names (value of prop=, meta= or list= parameter)',
-               );
-       }
-
-       public function getDescription() {
-               return 'Display this help screen. Or the help screen for the specified module.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=help' => 'Whole help page',
-                       'api.php?action=help&modules=protect' => 'Module (action) help page',
-                       'api.php?action=help&modules=query+categorymembers'
-                               => 'Help for the query/categorymembers module',
-                       'api.php?action=help&modules=login|query+info'
-                               => 'Help for the login and query/info modules',
+                       'action=help'
+                               => 'apihelp-help-example-main',
+                       'action=help&recursivesubmodules=1'
+                               => 'apihelp-help-example-recursive',
+                       'action=help&modules=help'
+                               => 'apihelp-help-example-help',
+                       'action=help&modules=query+info|query+categorymembers'
+                               => 'apihelp-help-example-query',
                );
        }
 
index 26def44..aba6921 100644 (file)
@@ -184,11 +184,9 @@ class ApiImageRotate extends ApiBase {
                                ApiBase::PARAM_TYPE => array( '90', '180', '270' ),
                                ApiBase::PARAM_REQUIRED => true
                        ),
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'continue' => '',
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -197,31 +195,17 @@ class ApiImageRotate extends ApiBase {
                return $result;
        }
 
-       public function getParamDescription() {
-               $pageSet = $this->getPageSet();
-
-               return $pageSet->getFinalParamDescription() + array(
-                       'rotation' => 'Degrees to rotate image clockwise',
-                       'token' => 'Edit token. You can get one of these through action=tokens',
-                       'continue' => 'When more results are available, use this to continue',
-               );
-       }
-
-       public function getDescription() {
-               return 'Rotate one or more images.';
-       }
-
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
+               return 'csrf';
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=imagerotate&titles=Example.jpg&rotation=90&token=123ABC',
+                       'action=imagerotate&titles=File:Example.jpg&rotation=90&token=123ABC'
+                               => 'apihelp-imagerotate-example-simple',
+                       'action=imagerotate&generator=categorymembers&gcmtitle=Category:Flip&gcmtype=file&' .
+                               'rotation=180&token=123ABC'
+                               => 'apihelp-imagerotate-example-generator',
                );
        }
 }
index 25ce89b..a134074 100644 (file)
@@ -60,7 +60,7 @@ class ApiImport extends ApiBase {
                        $this->dieStatus( $source );
                }
 
-               $importer = new WikiImporter( $source->value );
+               $importer = new WikiImporter( $source->value, $this->getConfig() );
                if ( isset( $params['namespace'] ) ) {
                        $importer->setTargetNamespace( $params['namespace'] );
                }
@@ -99,10 +99,6 @@ class ApiImport extends ApiBase {
 
        public function getAllowedParams() {
                return array(
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
-                       ),
                        'summary' => null,
                        'xml' => array(
                                ApiBase::PARAM_TYPE => 'upload',
@@ -120,41 +116,15 @@ class ApiImport extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'token' => 'Import token obtained through prop=info',
-                       'summary' => 'Import summary',
-                       'xml' => 'Uploaded XML file',
-                       'interwikisource' => 'For interwiki imports: wiki to import from',
-                       'interwikipage' => 'For interwiki imports: page to import',
-                       'fullhistory' => 'For interwiki imports: import the full history, not just the current version',
-                       'templates' => 'For interwiki imports: import all included templates as well',
-                       'namespace' => 'For interwiki imports: import to this namespace',
-                       'rootpage' => 'Import as subpage of this page',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Import a page from another wiki, or an XML file.',
-                       'Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when',
-                       'sending a file for the "xml" parameter.'
-               );
-       }
-
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
+               return 'csrf';
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=import&interwikisource=meta&interwikipage=Help:ParserFunctions&' .
+                       'action=import&interwikisource=meta&interwikipage=Help:ParserFunctions&' .
                                'namespace=100&fullhistory=&token=123ABC'
-                               => 'Import [[meta:Help:Parserfunctions]] to namespace 100 with full history',
+                               => 'apihelp-import-example-import',
                );
        }
 
index 976f4c1..cc4dee4 100644 (file)
@@ -184,28 +184,12 @@ class ApiLogin extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
+       protected function getExamplesMessages() {
                return array(
-                       'name' => 'User Name',
-                       'password' => 'Password',
-                       'domain' => 'Domain (optional)',
-                       'token' => 'Login token obtained in first request',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Log in and get the authentication tokens.',
-                       'In the event of a successful log-in, a cookie will be attached to your session.',
-                       'In the event of a failed log-in, you will not be able to attempt another log-in',
-                       'through this method for 5 seconds. This is to prevent password guessing by',
-                       'automated password crackers.'
-               );
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=login&lgname=user&lgpassword=password'
+                       'action=login&lgname=user&lgpassword=password'
+                               => 'apihelp-login-example-gettoken',
+                       'action=login&lgname=user&lgpassword=password&lgtoken=123ABC'
+                               => 'apihelp-login-example-login',
                );
        }
 
index 324f4b2..bf81723 100644 (file)
@@ -46,21 +46,10 @@ class ApiLogout extends ApiBase {
                return false;
        }
 
-       public function getAllowedParams() {
-               return array();
-       }
-
-       public function getParamDescription() {
-               return array();
-       }
-
-       public function getDescription() {
-               return 'Log out and clear session data.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=logout' => 'Log the current user out',
+                       'action=logout'
+                               => 'apihelp-logout-example-logout',
                );
        }
 
index 3919c75..10a99c9 100644 (file)
@@ -42,7 +42,7 @@ class ApiMain extends ApiBase {
        /**
         * When no format parameter is given, this format will be used
         */
-       const API_DEFAULT_FORMAT = 'xmlfm';
+       const API_DEFAULT_FORMAT = 'jsonfm';
 
        /**
         * List of available modules: action name => module class
@@ -81,6 +81,7 @@ class ApiMain extends ApiBase {
                'watch' => 'ApiWatch',
                'patrol' => 'ApiPatrol',
                'import' => 'ApiImport',
+               'clearhasmsg' => 'ApiClearHasMsg',
                'userrights' => 'ApiUserrights',
                'options' => 'ApiOptions',
                'imagerotate' => 'ApiImageRotate',
@@ -120,11 +121,11 @@ class ApiMain extends ApiBase {
         */
        private static $mRights = array(
                'writeapi' => array(
-                       'msg' => 'Use of the write API',
+                       'msg' => 'right-writeapi',
                        'params' => array()
                ),
                'apihighlimits' => array(
-                       'msg' => 'Use higher limits in API queries (Slow queries: $1 results; Fast queries: $2 results). The limits for slow queries also apply to multivalue parameters.',
+                       'msg' => 'api-help-right-apihighlimits',
                        'params' => array( ApiBase::LIMIT_SML2, ApiBase::LIMIT_BIG2 )
                )
        );
@@ -186,6 +187,23 @@ class ApiMain extends ApiBase {
                        }
                }
 
+               $uselang = $this->getParameter( 'uselang' );
+               if ( $uselang === 'user' ) {
+                       $uselang = $this->getUser()->getOption( 'language' );
+                       $uselang = RequestContext::sanitizeLangCode( $uselang );
+                       wfRunHooks( 'UserGetLanguageObject', array( $this->getUser(), &$uselang, $this ) );
+               } elseif ( $uselang === 'content' ) {
+                       global $wgContLang;
+                       $uselang = $wgContLang->getCode();
+               }
+               $code = RequestContext::sanitizeLangCode( $uselang );
+               $this->getContext()->setLanguage( $code );
+               if ( !$this->mInternalMode ) {
+                       global $wgLang;
+                       $wgLang = $this->getContext()->getLanguage();
+                       RequestContext::getMain()->setLanguage( $wgLang );
+               }
+
                $config = $this->getConfig();
                $this->mModuleMgr = new ApiModuleManager( $this );
                $this->mModuleMgr->addModules( self::$Modules, 'action' );
@@ -289,6 +307,16 @@ class ApiMain extends ApiBase {
                        }
                }
 
+               if ( $mode === 'public' && $this->getParameter( 'uselang' ) === 'user' ) {
+                       // User language is used for i18n, so we don't want to publicly
+                       // cache. Anons are ok, because if they have non-default language
+                       // then there's an appropriate Vary header set by whatever set
+                       // their non-default language.
+                       wfDebug( __METHOD__ . ": downgrading cache mode 'public' to " .
+                               "'anon-public-user-private' due to uselang=user\n" );
+                       $mode = 'anon-public-user-private';
+               }
+
                wfDebug( __METHOD__ . ": setting cache mode $mode\n" );
                $this->mCacheMode = $mode;
        }
@@ -372,10 +400,6 @@ class ApiMain extends ApiBase {
                // avoid sending public cache headers for errors.
                $this->sendCacheHeaders();
 
-               if ( $this->mPrinter->getIsHtml() && !$this->mPrinter->isDisabled() ) {
-                       echo wfReportTime();
-               }
-
                ob_end_flush();
        }
 
@@ -669,13 +693,10 @@ class ApiMain extends ApiBase {
                $config = $this->getConfig();
 
                if ( $e instanceof UsageException ) {
-                       // User entered incorrect parameters - print usage screen
+                       // User entered incorrect parameters - generate error response
                        $errMessage = $e->getMessageArray();
-
-                       // Only print the help message when this is for the developer, not runtime
-                       if ( $this->mPrinter->getWantsHelp() || $this->mAction == 'help' ) {
-                               ApiResult::setContent( $errMessage, $this->makeHelpMsg() );
-                       }
+                       $link = wfExpandUrl( wfScript( 'api' ) );
+                       ApiResult::setContent( $errMessage, "See $link for API usage" );
                } else {
                        // Something is seriously wrong
                        if ( ( $e instanceof DBQueryError ) && !$config->get( 'ShowSQLErrors' ) ) {
@@ -736,6 +757,11 @@ class ApiMain extends ApiBase {
                        }
                }
 
+               if ( $this->getParameter( 'curtimestamp' ) ) {
+                       $result->addValue( null, 'curtimestamp', wfTimestamp( TS_ISO_8601, time() ),
+                               ApiResult::NO_SIZE_CHECK );
+               }
+
                $params = $this->extractRequestParams();
 
                $this->mAction = $params['action'];
@@ -759,18 +785,37 @@ class ApiMain extends ApiBase {
                }
                $moduleParams = $module->extractRequestParams();
 
-               // Die if token required, but not provided
-               $salt = $module->getTokenSalt();
-               if ( $salt !== false ) {
+               // Check token, if necessary
+               if ( $module->needsToken() === true ) {
+                       throw new MWException(
+                               "Module '{$module->getModuleName()}' must be updated for the new token handling. " .
+                               "See documentation for ApiBase::needsToken for details."
+                       );
+               }
+               if ( $module->needsToken() ) {
+                       if ( !$module->mustBePosted() ) {
+                               throw new MWException(
+                                       "Module '{$module->getModuleName()}' must require POST to use tokens."
+                               );
+                       }
+
                        if ( !isset( $moduleParams['token'] ) ) {
                                $this->dieUsageMsg( array( 'missingparam', 'token' ) );
                        }
 
-                       if ( !$this->getUser()->matchEditToken(
-                               $moduleParams['token'],
-                               $salt,
-                               $this->getContext()->getRequest() )
+                       if ( !$this->getConfig()->get( 'DebugAPI' ) &&
+                               array_key_exists(
+                                       $module->encodeParamName( 'token' ),
+                                       $this->getRequest()->getQueryValues()
+                               )
                        ) {
+                               $this->dieUsage(
+                                       "The '{$module->encodeParamName( 'token' )}' parameter was found in the query string, but must be in the POST body",
+                                       'mustposttoken'
+                               );
+                       }
+
+                       if ( !$module->validateToken( $moduleParams['token'], $moduleParams ) ) {
                                $this->dieUsageMsg( 'sessionfailure' );
                        }
                }
@@ -1059,15 +1104,7 @@ class ApiMain extends ApiBase {
                $printer = $this->mPrinter;
                $printer->profileIn();
 
-               /**
-                * If the help message is requested in the default (xmlfm) format,
-                * tell the printer not to escape ampersands so that our links do
-                * not break.
-                */
-               $isHelp = $isError || $this->mAction == 'help';
-               $printer->setUnescapeAmps( $isHelp && $printer->getFormat() == 'XML' && $printer->getIsHtml() );
-
-               $printer->initPrinter( $isHelp );
+               $printer->initPrinter( false );
 
                $printer->execute();
                $printer->closePrinter();
@@ -1088,14 +1125,14 @@ class ApiMain extends ApiBase {
         */
        public function getAllowedParams() {
                return array(
-                       'format' => array(
-                               ApiBase::PARAM_DFLT => ApiMain::API_DEFAULT_FORMAT,
-                               ApiBase::PARAM_TYPE => 'submodule',
-                       ),
                        'action' => array(
                                ApiBase::PARAM_DFLT => 'help',
                                ApiBase::PARAM_TYPE => 'submodule',
                        ),
+                       'format' => array(
+                               ApiBase::PARAM_DFLT => ApiMain::API_DEFAULT_FORMAT,
+                               ApiBase::PARAM_TYPE => 'submodule',
+                       ),
                        'maxlag' => array(
                                ApiBase::PARAM_TYPE => 'integer'
                        ),
@@ -1112,126 +1149,123 @@ class ApiMain extends ApiBase {
                        ),
                        'requestid' => null,
                        'servedby' => false,
+                       'curtimestamp' => false,
                        'origin' => null,
+                       'uselang' => array(
+                               ApiBase::PARAM_DFLT => 'user',
+                       ),
                );
        }
 
-       /**
-        * See ApiBase for description.
-        *
-        * @return array
-        */
-       public function getParamDescription() {
+       /** @see ApiBase::getExamplesMessages() */
+       protected function getExamplesMessages() {
                return array(
-                       'format' => 'The format of the output',
-                       'action' => 'What action you would like to perform. See below for module help',
-                       'maxlag' => array(
-                               'Maximum lag can be used when MediaWiki is installed on a database replicated cluster.',
-                               'To save actions causing any more site replication lag, this parameter can make the client',
-                               'wait until the replication lag is less than the specified value.',
-                               'In case of a replag error, error code "maxlag" is returned, with the message like',
-                               '"Waiting for $host: $lag seconds lagged\n".',
-                               'See https://www.mediawiki.org/wiki/Manual:Maxlag_parameter for more information',
-                       ),
-                       'smaxage' => 'Set the s-maxage header to this many seconds. Errors are never cached',
-                       'maxage' => 'Set the max-age header to this many seconds. Errors are never cached',
-                       'assert' => 'Verify the user is logged in if set to "user", or has the bot userright if "bot"',
-                       'requestid' => 'Request ID to distinguish requests. This will just be output back to you',
-                       'servedby' => 'Include the hostname that served the request in the ' .
-                               'results. Unconditionally shown on error',
-                       'origin' => array(
-                               'When accessing the API using a cross-domain AJAX request (CORS), set this to the',
-                               'originating domain. This must be included in any pre-flight request, and',
-                               'therefore must be part of the request URI (not the POST body). This must match',
-                               'one of the origins in the Origin: header exactly, so it has to be set to ',
-                               'something like http://en.wikipedia.org or https://meta.wikimedia.org . If this',
-                               'parameter does not match the Origin: header, a 403 response will be returned. If',
-                               'this parameter matches the Origin: header and the origin is whitelisted, an',
-                               'Access-Control-Allow-Origin header will be set.',
-                       ),
+                       'action=help'
+                               => 'apihelp-help-example-main',
+                       'action=help&recursivesubmodules=1'
+                               => 'apihelp-help-example-recursive',
                );
        }
 
+       public function modifyHelp( array &$help, array $options ) {
+               // Wish PHP had an "array_insert_before". Instead, we have to manually
+               // reindex the array to get 'permissions' in the right place.
+               $oldHelp = $help;
+               $help = array();
+               foreach ( $oldHelp as $k => $v ) {
+                       if ( $k === 'submodules' ) {
+                               $help['permissions'] = '';
+                       }
+                       $help[$k] = $v;
+               }
+               $help['credits'] = '';
+
+               // Fill 'permissions'
+               $help['permissions'] .= Html::openElement( 'div',
+                       array( 'class' => 'apihelp-block apihelp-permissions' ) );
+               $m = $this->msg( 'api-help-permissions' );
+               if ( !$m->isDisabled() ) {
+                       $help['permissions'] .= Html::rawElement( 'div', array( 'class' => 'apihelp-block-head' ),
+                               $m->numParams( count( self::$mRights ) )->parse()
+                       );
+               }
+               $help['permissions'] .= Html::openElement( 'dl' );
+               foreach ( self::$mRights as $right => $rightMsg ) {
+                       $help['permissions'] .= Html::element( 'dt', null, $right );
+
+                       $rightMsg = $this->msg( $rightMsg['msg'], $rightMsg['params'] )->parse();
+                       $help['permissions'] .= Html::rawElement( 'dd', null, $rightMsg );
+
+                       $groups = array_map( function ( $group ) {
+                               return $group == '*' ? 'all' : $group;
+                       }, User::getGroupsWithPermission( $right ) );
+
+                       $help['permissions'] .= Html::rawElement( 'dd', null,
+                               $this->msg( 'api-help-permissions-granted-to' )
+                                       ->numParams( count( $groups ) )
+                                       ->params( $this->getLanguage()->commaList( $groups ) )
+                                       ->parse()
+                       );
+               }
+               $help['permissions'] .= Html::closeElement( 'dl' );
+               $help['permissions'] .= Html::closeElement( 'div' );
+
+               // Fill 'credits', if applicable
+               if ( empty( $options['nolead'] ) ) {
+                       $help['credits'] .= Html::element( 'h' . min( 6, $options['headerlevel'] + 1 ),
+                               array( 'id' => '+credits', 'class' => 'apihelp-header' ),
+                               $this->msg( 'api-credits-header' )->parse()
+                       );
+                       $help['credits'] .= $this->msg( 'api-credits' )->useDatabase( false )->parseAsBlock();
+               }
+       }
+
+       private $mCanApiHighLimits = null;
+
        /**
-        * See ApiBase for description.
-        *
-        * @return array
+        * Check whether the current user is allowed to use high limits
+        * @return bool
         */
-       public function getDescription() {
-               return array(
-                       '',
-                       '',
-                       '**********************************************************************************************',
-                       '**                                                                                          **',
-                       '**                This is an auto-generated MediaWiki API documentation page                **',
-                       '**                                                                                          **',
-                       '**                               Documentation and Examples:                                **',
-                       '**                            https://www.mediawiki.org/wiki/API                            **',
-                       '**                                                                                          **',
-                       '**********************************************************************************************',
-                       '',
-                       'Status:                All features shown on this page should be working, but the API',
-                       '                       is still in active development, and may change at any time.',
-                       '                       Make sure to monitor our mailing list for any updates.',
-                       '',
-                       'Erroneous requests:    When erroneous requests are sent to the API, a HTTP header will be sent',
-                       '                       with the key "MediaWiki-API-Error" and then both the value of the',
-                       '                       header and the error code sent back will be set to the same value.',
-                       '',
-                       '                       In the case of an invalid action being passed, these will have a value',
-                       '                       of "unknown_action".',
-                       '',
-                       '                       For more information see https://www.mediawiki.org' .
-                               '/wiki/API:Errors_and_warnings',
-                       '',
-                       'Documentation:         https://www.mediawiki.org/wiki/API:Main_page',
-                       'FAQ                    https://www.mediawiki.org/wiki/API:FAQ',
-                       'Mailing list:          https://lists.wikimedia.org/mailman/listinfo/mediawiki-api',
-                       'Api Announcements:     https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce',
-                       'Bugs & Requests:       https://bugzilla.wikimedia.org/buglist.cgi?component=API&' .
-                               'bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts',
-                       '',
-                       '',
-                       '',
-                       '',
-                       '',
-               );
+       public function canApiHighLimits() {
+               if ( !isset( $this->mCanApiHighLimits ) ) {
+                       $this->mCanApiHighLimits = $this->getUser()->isAllowed( 'apihighlimits' );
+               }
+
+               return $this->mCanApiHighLimits;
        }
 
        /**
-        * Returns an array of strings with credits for the API
-        * @return array
+        * Overrides to return this instance's module manager.
+        * @return ApiModuleManager
         */
-       protected function getCredits() {
-               return array(
-                       'API developers:',
-                       '    Roan Kattouw (lead developer Sep 2007-2009)',
-                       '    Victor Vasiliev',
-                       '    Bryan Tong Minh',
-                       '    Sam Reed',
-                       '    Yuri Astrakhan (creator, lead developer Sep 2006-Sep 2007, 2012-2013)',
-                       '    Brad Jorsch (lead developer 2013-now)',
-                       '',
-                       'Please send your comments, suggestions and questions to mediawiki-api@lists.wikimedia.org',
-                       'or file a bug report at https://bugzilla.wikimedia.org/'
-               );
+       public function getModuleManager() {
+               return $this->mModuleMgr;
        }
 
+       /************************************************************************//**
+        * @name   Deprecated
+        * @{
+        */
+
        /**
         * Sets whether the pretty-printer should format *bold* and $italics$
         *
+        * @deprecated since 1.25
         * @param bool $help
         */
        public function setHelp( $help = true ) {
+               wfDeprecated( __METHOD__, '1.25' );
                $this->mPrinter->setHelp( $help );
        }
 
        /**
         * Override the parent to generate help messages for all available modules.
         *
+        * @deprecated since 1.25
         * @return string
         */
        public function makeHelpMsg() {
+               wfDeprecated( __METHOD__, '1.25' );
                global $wgMemc;
                $this->setHelp();
                // Get help text from cache if present
@@ -1254,9 +1288,11 @@ class ApiMain extends ApiBase {
        }
 
        /**
+        * @deprecated since 1.25
         * @return mixed|string
         */
        public function reallyMakeHelpMsg() {
+               wfDeprecated( __METHOD__, '1.25' );
                $this->setHelp();
 
                // Use parent to make default message for the main module
@@ -1278,8 +1314,12 @@ class ApiMain extends ApiBase {
 
                $msg .= "\n$astriks Permissions $astriks\n\n";
                foreach ( self::$mRights as $right => $rightMsg ) {
+                       $rightsMsg = $this->msg( $rightMsg['msg'], $rightMsg['params'] )
+                               ->useDatabase( false )
+                               ->inLanguage( 'en' )
+                               ->text();
                        $groups = User::getGroupsWithPermission( $right );
-                       $msg .= "* " . $right . " *\n  " . wfMsgReplaceArgs( $rightMsg['msg'], $rightMsg['params'] ) .
+                       $msg .= "* " . $right . " *\n  $rightsMsg" .
                                "\nGranted to:\n  " . str_replace( '*', 'all', implode( ', ', $groups ) ) . "\n\n";
                }
 
@@ -1294,18 +1334,22 @@ class ApiMain extends ApiBase {
                        $msg .= "\n";
                }
 
-               $msg .= "\n*** Credits: ***\n   " . implode( "\n   ", $this->getCredits() ) . "\n";
+               $credits = $this->msg( 'api-credits' )->useDatabase( 'false' )->inLanguage( 'en' )->text();
+               $credits = str_replace( "\n", "\n   ", $credits );
+               $msg .= "\n*** Credits: ***\n   $credits\n";
 
                return $msg;
        }
 
        /**
+        * @deprecated since 1.25
         * @param ApiBase $module
         * @param string $paramName What type of request is this? e.g. action,
         *    query, list, prop, meta, format
         * @return string
         */
        public static function makeHelpMsgHeader( $module, $paramName ) {
+               wfDeprecated( __METHOD__, '1.25' );
                $modulePrefix = $module->getModulePrefix();
                if ( strval( $modulePrefix ) !== '' ) {
                        $modulePrefix = "($modulePrefix) ";
@@ -1314,20 +1358,6 @@ class ApiMain extends ApiBase {
                return "* $paramName={$module->getModuleName()} $modulePrefix*";
        }
 
-       private $mCanApiHighLimits = null;
-
-       /**
-        * Check whether the current user is allowed to use high limits
-        * @return bool
-        */
-       public function canApiHighLimits() {
-               if ( !isset( $this->mCanApiHighLimits ) ) {
-                       $this->mCanApiHighLimits = $this->getUser()->isAllowed( 'apihighlimits' );
-               }
-
-               return $this->mCanApiHighLimits;
-       }
-
        /**
         * Check whether the user wants us to show version information in the API help
         * @return bool
@@ -1339,14 +1369,6 @@ class ApiMain extends ApiBase {
                return false;
        }
 
-       /**
-        * Overrides to return this instance's module manager.
-        * @return ApiModuleManager
-        */
-       public function getModuleManager() {
-               return $this->mModuleMgr;
-       }
-
        /**
         * Add or overwrite a module in this ApiMain instance. Intended for use by extending
         * classes who wish to add their own modules to their lexicon or override the
@@ -1391,11 +1413,13 @@ class ApiMain extends ApiBase {
        public function getFormats() {
                return $this->getModuleManager()->getNamesWithClasses( 'format' );
        }
+
+       /**@}*/
+
 }
 
 /**
  * This exception will be thrown when dieUsage is called to stop module execution.
- * The exception handling code will print a help screen explaining how this API may be used.
  *
  * @ingroup API
  */
@@ -1449,3 +1473,8 @@ class UsageException extends MWException {
                return "{$this->getCodeString()}: {$this->getMessage()}";
        }
 }
+
+/**
+ * For really cool vim folding this needs to be at the end:
+ * vim: foldmarker=@{,@} foldmethod=marker
+ */
index f7d0ccf..a0300ab 100644 (file)
@@ -241,6 +241,21 @@ class ApiModuleManager extends ContextSource {
                return $result;
        }
 
+       /**
+        * Returns the class name of the given module
+        *
+        * @param string $module Module name
+        * @return string|bool class name or false if the module does not exist
+        * @since 1.24
+        */
+       public function getClassName( $module ) {
+               if ( isset( $this->mModules[$module] ) ) {
+                       return $this->mModules[$module][1];
+               }
+
+               return false;
+       }
+
        /**
         * Returns true if the specific module is defined at all or in a specific group.
         * @param string $moduleName Module name
index 602a905..c7f40c7 100644 (file)
@@ -72,9 +72,9 @@ class ApiMove extends ApiBase {
 
                // Move the page
                $toTitleExists = $toTitle->exists();
-               $retval = $fromTitle->moveTo( $toTitle, true, $params['reason'], !$params['noredirect'] );
-               if ( $retval !== true ) {
-                       $this->dieUsageMsg( reset( $retval ) );
+               $status = $this->movePage( $fromTitle, $toTitle, $params['reason'], !$params['noredirect'] );
+               if ( !$status->isOK() ) {
+                       $this->dieStatus( $status );
                }
 
                $r = array(
@@ -99,8 +99,8 @@ class ApiMove extends ApiBase {
                // Move the talk page
                if ( $params['movetalk'] && $fromTalk->exists() && !$fromTitle->isTalkPage() ) {
                        $toTalkExists = $toTalk->exists();
-                       $retval = $fromTalk->moveTo( $toTalk, true, $params['reason'], !$params['noredirect'] );
-                       if ( $retval === true ) {
+                       $status = $this->movePage( $fromTalk, $toTalk, $params['reason'], !$params['noredirect'] );
+                       if ( $status->isOK() ) {
                                $r['talkfrom'] = $fromTalk->getPrefixedText();
                                $r['talkto'] = $toTalk->getPrefixedText();
                                if ( $toTalkExists ) {
@@ -108,9 +108,9 @@ class ApiMove extends ApiBase {
                                }
                        } else {
                                // We're not gonna dieUsage() on failure, since we already changed something
-                               $parsed = $this->parseMsg( reset( $retval ) );
-                               $r['talkmove-error-code'] = $parsed['code'];
-                               $r['talkmove-error-info'] = $parsed['info'];
+                               $error = $this->getErrorFromStatus( $status );
+                               $r['talkmove-error-code'] = $error[0];
+                               $r['talkmove-error-info'] = $error[1];
                        }
                }
 
@@ -147,6 +147,28 @@ class ApiMove extends ApiBase {
                $result->addValue( null, $this->getModuleName(), $r );
        }
 
+       /**
+        * @param Title $from
+        * @param Title $to
+        * @param string $reason
+        * @param bool $createRedirect
+        * @return Status
+        */
+       protected function movePage( Title $from, Title $to, $reason, $createRedirect ) {
+               $mp = new MovePage( $from, $to );
+               $valid = $mp->isValidMove();
+               if ( !$valid->isOK() ) {
+                       return $valid;
+               }
+
+               $permStatus = $mp->checkPermissions( $this->getUser(), $reason );
+               if ( !$permStatus->isOK() ) {
+                       return $permStatus;
+               }
+
+               return $mp->move( $this->getUser(), $reason, $createRedirect );
+       }
+
        /**
         * @param Title $fromTitle
         * @param Title $toTitle
@@ -195,10 +217,6 @@ class ApiMove extends ApiBase {
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true
                        ),
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
-                       ),
                        'reason' => '',
                        'movetalk' => false,
                        'movesubpages' => false,
@@ -224,42 +242,15 @@ class ApiMove extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'from' => "Title of the page you want to move. Cannot be used together with {$p}fromid",
-                       'fromid' => "Page ID of the page you want to move. Cannot be used together with {$p}from",
-                       'to' => 'Title you want to rename the page to',
-                       'token' => 'A move token previously retrieved through prop=info',
-                       'reason' => 'Reason for the move',
-                       'movetalk' => 'Move the talk page, if it exists',
-                       'movesubpages' => 'Move subpages, if applicable',
-                       'noredirect' => 'Don\'t create a redirect',
-                       'watch' => 'Add the page and the redirect to your watchlist',
-                       'unwatch' => 'Remove the page and the redirect from your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your ' .
-                               'watchlist, use preferences or do not change watch',
-                       'ignorewarnings' => 'Ignore any warnings'
-               );
-       }
-
-       public function getDescription() {
-               return 'Move a page.';
-       }
-
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
+               return 'csrf';
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=move&from=Badtitle&to=Goodtitle&token=123ABC&' .
+                       'action=move&from=Badtitle&to=Goodtitle&token=123ABC&' .
                                'reason=Misspelled%20title&movetalk=&noredirect='
+                               => 'apihelp-move-example-move',
                );
        }
 
index 7fb045e..8fa495c 100644 (file)
@@ -91,23 +91,10 @@ class ApiOpenSearch extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
+       protected function getExamplesMessages() {
                return array(
-                       'search' => 'Search string',
-                       'limit' => 'Maximum amount of results to return',
-                       'namespace' => 'Namespaces to search',
-                       'suggest' => 'Do nothing if $wgEnableOpenSearchSuggest is false',
-                       'format' => 'The format of the output',
-               );
-       }
-
-       public function getDescription() {
-               return 'Search the wiki using the OpenSearch protocol.';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=opensearch&search=Te'
+                       'action=opensearch&search=Te'
+                               => 'apihelp-opensearch-example-te',
                );
        }
 
index 8ac9b9a..8ef0629 100644 (file)
@@ -135,10 +135,6 @@ class ApiOptions extends ApiBase {
                $optionKinds[] = 'all';
 
                return array(
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
-                       ),
                        'reset' => false,
                        'resetkinds' => array(
                                ApiBase::PARAM_TYPE => $optionKinds,
@@ -157,49 +153,23 @@ class ApiOptions extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'token' => 'An options token previously obtained through the action=tokens',
-                       'reset' => 'Resets preferences to the site defaults',
-                       'resetkinds' => 'List of types of options to reset when the "reset" option is set',
-                       'change' => array( 'List of changes, formatted name=value (e.g. skin=vector), ' .
-                               'value cannot contain pipe characters. If no value is given (not ',
-                               'even an equals sign), e.g., optionname|otheroption|..., the ' .
-                               'option will be reset to its default value'
-                       ),
-                       'optionname' => 'A name of a option which should have an optionvalue set',
-                       'optionvalue' => 'A value of the option specified by the optionname, ' .
-                               'can contain pipe characters',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Change preferences of the current user.',
-                       'Only options which are registered in core or in one of installed extensions,',
-                       'or as options with keys prefixed with \'userjs-\' (intended to be used by user',
-                       'scripts), can be set.'
-               );
-       }
-
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
+               return 'csrf';
        }
 
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Options';
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=options&reset=&token=123ABC',
-                       'api.php?action=options&change=skin=vector|hideminor=1&token=123ABC',
-                       'api.php?action=options&reset=&change=skin=monobook&optionname=nickname&' .
-                               'optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC',
+                       'action=options&reset=&token=123ABC'
+                               => 'apihelp-options-example-reset',
+                       'action=options&change=skin=vector|hideminor=1&token=123ABC'
+                               => 'apihelp-options-example-change',
+                       'action=options&reset=&change=skin=monobook&optionname=nickname&' .
+                               'optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC'
+                               => 'apihelp-options-example-complex',
                );
        }
 }
index 0f26467..ea85cac 100644 (file)
@@ -53,7 +53,10 @@ class ApiPageSet extends ApiBase {
 
        private $mAllPages = array(); // [ns][dbkey] => page_id or negative when missing
        private $mTitles = array();
+       private $mGoodAndMissingPages = array(); // [ns][dbkey] => page_id or negative when missing
+       private $mGoodPages = array(); // [ns][dbkey] => page_id
        private $mGoodTitles = array();
+       private $mMissingPages = array(); // [ns][dbkey] => fake page_id
        private $mMissingTitles = array();
        private $mInvalidTitles = array();
        private $mMissingPageIDs = array();
@@ -65,6 +68,8 @@ class ApiPageSet extends ApiBase {
        private $mPendingRedirectIDs = array();
        private $mConvertedTitles = array();
        private $mGoodRevIDs = array();
+       private $mLiveRevIDs = array();
+       private $mDeletedRevIDs = array();
        private $mMissingRevIDs = array();
        private $mFakePageId = -1;
        private $mCacheMode = 'public';
@@ -343,6 +348,14 @@ class ApiPageSet extends ApiBase {
                return count( $this->mTitles );
        }
 
+       /**
+        * Returns an array [ns][dbkey] => page_id for all good titles.
+        * @return array
+        */
+       public function getGoodTitlesByNamespace() {
+               return $this->mGoodPages;
+       }
+
        /**
         * Title objects that were found in the database.
         * @return Title[] Array page_id (int) => Title (obj)
@@ -359,6 +372,15 @@ class ApiPageSet extends ApiBase {
                return count( $this->mGoodTitles );
        }
 
+       /**
+        * Returns an array [ns][dbkey] => fake_page_id for all missing titles.
+        * fake_page_id is a unique negative number.
+        * @return array
+        */
+       public function getMissingTitlesByNamespace() {
+               return $this->mMissingPages;
+       }
+
        /**
         * Title objects that were NOT found in the database.
         * The array's index will be negative for each item
@@ -368,6 +390,22 @@ class ApiPageSet extends ApiBase {
                return $this->mMissingTitles;
        }
 
+       /**
+        * Returns an array [ns][dbkey] => page_id for all good and missing titles.
+        * @return array
+        */
+       public function getGoodAndMissingTitlesByNamespace() {
+               return $this->mGoodAndMissingPages;
+       }
+
+       /**
+        * Title objects for good and missing titles.
+        * @return array
+        */
+       public function getGoodAndMissingTitles() {
+               return $this->mGoodTitles + $this->mMissingTitles;
+       }
+
        /**
         * Titles that were deemed invalid by Title::newFromText()
         * The array's index will be unique and negative for each item
@@ -560,13 +598,29 @@ class ApiPageSet extends ApiBase {
        }
 
        /**
-        * Get the list of revision IDs (requested with the revids= parameter)
+        * Get the list of valid revision IDs (requested with the revids= parameter)
         * @return array Array of revID (int) => pageID (int)
         */
        public function getRevisionIDs() {
                return $this->mGoodRevIDs;
        }
 
+       /**
+        * Get the list of non-deleted revision IDs (requested with the revids= parameter)
+        * @return array Array of revID (int) => pageID (int)
+        */
+       public function getLiveRevisionIDs() {
+               return $this->mLiveRevIDs;
+       }
+
+       /**
+        * Get the list of revision IDs that were associated with deleted titles.
+        * @return array Array of revID (int) => pageID (int)
+        */
+       public function getDeletedRevisionIDs() {
+               return $this->mDeletedRevIDs;
+       }
+
        /**
         * Revision IDs that were not found in the database
         * @return array Array of revision IDs
@@ -633,6 +687,10 @@ class ApiPageSet extends ApiBase {
 
        /**
         * Populate this PageSet from a rowset returned from the database
+        *
+        * Note that the query result must include the columns returned by
+        * $this->getPageTableFields().
+        *
         * @param DatabaseBase $db
         * @param ResultWrapper $queryResult Query result object
         */
@@ -667,6 +725,8 @@ class ApiPageSet extends ApiBase {
                if ( $this->mResolveRedirects && $row->page_is_redirect == '1' ) {
                        $this->mPendingRedirectIDs[$pageId] = $title;
                } else {
+                       $this->mGoodPages[$row->page_namespace][$row->page_title] = $pageId;
+                       $this->mGoodAndMissingPages[$row->page_namespace][$row->page_title] = $pageId;
                        $this->mGoodTitles[$pageId] = $title;
                }
 
@@ -803,6 +863,8 @@ class ApiPageSet extends ApiBase {
                                        foreach ( array_keys( $dbkeys ) as $dbkey ) {
                                                $title = Title::makeTitle( $ns, $dbkey );
                                                $this->mAllPages[$ns][$dbkey] = $this->mFakePageId;
+                                               $this->mMissingPages[$ns][$dbkey] = $this->mFakePageId;
+                                               $this->mGoodAndMissingPages[$ns][$dbkey] = $this->mFakePageId;
                                                $this->mMissingTitles[$this->mFakePageId] = $title;
                                                $this->mFakePageId--;
                                                $this->mTitles[] = $title;
@@ -857,6 +919,7 @@ class ApiPageSet extends ApiBase {
                                $revid = intval( $row->rev_id );
                                $pageid = intval( $row->rev_page );
                                $this->mGoodRevIDs[$revid] = $pageid;
+                               $this->mLiveRevIDs[$revid] = $pageid;
                                $pageids[$pageid] = '';
                                unset( $remaining[$revid] );
                        }
@@ -867,6 +930,51 @@ class ApiPageSet extends ApiBase {
 
                // Populate all the page information
                $this->initFromPageIds( array_keys( $pageids ) );
+
+               // If the user can see deleted revisions, pull out the corresponding
+               // titles from the archive table and include them too. We ignore
+               // ar_page_id because deleted revisions are tied by title, not page_id.
+               if ( !empty( $this->mMissingRevIDs ) && $this->getUser()->isAllowed( 'deletedhistory' ) ) {
+                       $remaining = array_flip( $this->mMissingRevIDs );
+                       $tables = array( 'archive' );
+                       $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 ) {
+                               $revid = intval( $row->ar_rev_id );
+                               $titles[$revid] = Title::makeTitle( $row->ar_namespace, $row->ar_title );
+                               unset( $remaining[$revid] );
+                       }
+                       $this->profileDBOut();
+
+                       $this->initFromTitles( $titles );
+
+                       foreach ( $titles as $revid => $title ) {
+                               $ns = $title->getNamespace();
+                               $dbkey = $title->getDBkey();
+
+                               // Handle converted titles
+                               if ( !isset( $this->mAllPages[$ns][$dbkey] ) &&
+                                       isset( $this->mConvertedTitles[$title->getPrefixedText()] )
+                               ) {
+                                       $title = Title::newFromText( $this->mConvertedTitles[$title->getPrefixedText()] );
+                                       $ns = $title->getNamespace();
+                                       $dbkey = $title->getDBkey();
+                               }
+
+                               if ( isset( $this->mAllPages[$ns][$dbkey] ) ) {
+                                       $this->mGoodRevIDs[$revid] = $this->mAllPages[$ns][$dbkey];
+                                       $this->mDeletedRevIDs[$revid] = $this->mAllPages[$ns][$dbkey];
+                               } else {
+                                       $remaining[$revid] = true;
+                               }
+                       }
+
+                       $this->mMissingRevIDs = array_keys( $remaining );
+               }
        }
 
        /**
@@ -1095,26 +1203,46 @@ class ApiPageSet extends ApiBase {
        public function getAllowedParams( $flags = 0 ) {
                $result = array(
                        'titles' => array(
-                               ApiBase::PARAM_ISMULTI => true
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_HELP_MSG => 'api-pageset-param-titles',
                        ),
                        'pageids' => array(
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_ISMULTI => true
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_HELP_MSG => 'api-pageset-param-pageids',
                        ),
                        'revids' => array(
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_ISMULTI => true
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_HELP_MSG => 'api-pageset-param-revids',
+                       ),
+                       'generator' => array(
+                               ApiBase::PARAM_TYPE => null,
+                               ApiBase::PARAM_VALUE_LINKS => array(),
+                               ApiBase::PARAM_HELP_MSG => 'api-pageset-param-generator',
+                       ),
+                       'redirects' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => $this->mAllowGenerator
+                                       ? 'api-pageset-param-redirects-generator'
+                                       : 'api-pageset-param-redirects-nogenerator',
+                       ),
+                       'converttitles' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'api-pageset-param-converttitles',
+                                       $this->getLanguage()->commaList( LanguageConverter::$languagesWithVariants ),
+                               ),
                        ),
-                       'redirects' => false,
-                       'converttitles' => false,
                );
-               if ( $this->mAllowGenerator ) {
-                       if ( $flags & ApiBase::GET_VALUES_FOR_HELP ) {
-                               $result['generator'] = array(
-                                       ApiBase::PARAM_TYPE => $this->getGenerators()
-                               );
-                       } else {
-                               $result['generator'] = null;
+
+               if ( !$this->mAllowGenerator ) {
+                       unset( $result['generator'] );
+               } elseif ( $flags & ApiBase::GET_VALUES_FOR_HELP ) {
+                       $result['generator'][ApiBase::PARAM_TYPE] = $this->getGenerators();
+                       foreach ( $result['generator'][ApiBase::PARAM_TYPE] as $g ) {
+                               $result['generator'][ApiBase::PARAM_TYPE][] = $g;
+                               $result['generator'][ApiBase::PARAM_VALUE_LINKS][$g] = "Special:ApiHelp/query+$g";
                        }
                }
 
@@ -1148,23 +1276,4 @@ class ApiPageSet extends ApiBase {
 
                return self::$generators;
        }
-
-       public function getParamDescription() {
-               return array(
-                       'titles' => 'A list of titles to work on',
-                       'pageids' => 'A list of page IDs to work on',
-                       'revids' => 'A list of revision IDs to work on',
-                       'generator' => array(
-                               'Get the list of pages to work on by executing the specified query module.',
-                               'NOTE: generator parameter names must be prefixed with a \'g\', see examples'
-                       ),
-                       'redirects' => 'Automatically resolve redirects',
-                       'converttitles' => array(
-                               'Convert titles to other variants if necessary. Only works if ' .
-                                       'the wiki\'s content language supports variant conversion.',
-                               'Languages that support variant conversion include ' .
-                                       implode( ', ', LanguageConverter::$languagesWithVariants )
-                       ),
-               );
-       }
 }
index f81f3d9..17773a7 100644 (file)
  */
 class ApiParamInfo extends ApiBase {
 
-       /**
-        * @var ApiQuery
-        */
-       protected $queryObj;
+       private $helpFormat;
+       private $context;
 
        public function __construct( ApiMain $main, $action ) {
                parent::__construct( $main, $action );
-               $this->queryObj = new ApiQuery( $this->getMain(), 'query' );
        }
 
        public function execute() {
                // Get parameters
                $params = $this->extractRequestParams();
-               $resultObj = $this->getResult();
+
+               $this->helpFormat = $params['helpformat'];
+               $this->context = new RequestContext;
+               $this->context->setUser( new User ); // anon to avoid caching issues
+               $this->context->setLanguage( $this->getMain()->getLanguage() );
+
+               if ( is_array( $params['modules'] ) ) {
+                       $modules = $params['modules'];
+               } else {
+                       $modules = array();
+               }
+
+               if ( is_array( $params['querymodules'] ) ) {
+                       $this->logFeatureUsage( 'action=paraminfo&querymodules' );
+                       $queryModules = $params['querymodules'];
+                       foreach ( $queryModules as $m ) {
+                               $modules[] = 'query+' . $m;
+                       }
+               } else {
+                       $queryModules = array();
+               }
+
+               if ( is_array( $params['formatmodules'] ) ) {
+                       $this->logFeatureUsage( 'action=paraminfo&formatmodules' );
+                       $formatModules = $params['formatmodules'];
+                       foreach ( $formatModules as $m ) {
+                               $modules[] = $m;
+                       }
+               } else {
+                       $formatModules = array();
+               }
 
                $res = array();
 
-               $this->addModulesInfo( $params, 'modules', $res, $resultObj );
+               foreach ( $modules as $m ) {
+                       try {
+                               $module = $this->getModuleFromPath( $m );
+                       } catch ( UsageException $ex ) {
+                               $this->setWarning( $ex->getMessage() );
+                               continue;
+                       }
+                       $key = 'modules';
+
+                       // Back compat
+                       $isBCQuery = false;
+                       if ( $module->getParent() && $module->getParent()->getModuleName() == 'query' &&
+                               in_array( $module->getModuleName(), $queryModules )
+                       ) {
+                               $isBCQuery = true;
+                               $key = 'querymodules';
+                       }
+                       if ( in_array( $module->getModuleName(), $formatModules ) ) {
+                               $key = 'formatmodules';
+                       }
 
-               $this->addModulesInfo( $params, 'querymodules', $res, $resultObj );
+                       $item = $this->getModuleInfo( $module );
+                       if ( $isBCQuery ) {
+                               $item['querytype'] = $item['group'];
+                       }
+                       $res[$key][] = $item;
+               }
+
+               $result = $this->getResult();
+               $result->addValue( array( $this->getModuleName() ), 'helpformat', $this->helpFormat );
+
+               foreach ( $res as $key => $stuff ) {
+                       $result->setIndexedTagName( $res[$key], 'module' );
+               }
 
                if ( $params['mainmodule'] ) {
-                       $res['mainmodule'] = $this->getClassInfo( $this->getMain() );
+                       $this->logFeatureUsage( 'action=paraminfo&mainmodule' );
+                       $res['mainmodule'] = $this->getModuleInfo( $this->getMain() );
                }
 
                if ( $params['pagesetmodule'] ) {
-                       $pageSet = new ApiPageSet( $this->queryObj );
-                       $res['pagesetmodule'] = $this->getClassInfo( $pageSet );
+                       $this->logFeatureUsage( 'action=paraminfo&pagesetmodule' );
+                       $pageSet = new ApiPageSet( $this->getMain()->getModuleManager()->getModule( 'query' ) );
+                       $res['pagesetmodule'] = $this->getModuleInfo( $pageSet );
+                       unset( $res['pagesetmodule']['name'] );
+                       unset( $res['pagesetmodule']['path'] );
+                       unset( $res['pagesetmodule']['group'] );
                }
 
-               $this->addModulesInfo( $params, 'formatmodules', $res, $resultObj );
-
-               $resultObj->addValue( null, $this->getModuleName(), $res );
+               $result->addValue( null, $this->getModuleName(), $res );
        }
 
        /**
-        * If the type is requested in parameters, adds a section to res with module info.
-        * @param array $params User parameters array
-        * @param string $type Parameter name
-        * @param array $res Store results in this array
-        * @param ApiResult $resultObj Results object to set indexed tag.
+        * @param array $res Result array
+        * @param string $key Result key
+        * @param Message[] $msgs
         */
-       private function addModulesInfo( $params, $type, &$res, $resultObj ) {
-               if ( !is_array( $params[$type] ) ) {
-                       return;
-               }
-               $isQuery = ( $type === 'querymodules' );
-               if ( $isQuery ) {
-                       $mgr = $this->queryObj->getModuleManager();
-               } else {
-                       $mgr = $this->getMain()->getModuleManager();
-               }
-               $res[$type] = array();
-               foreach ( $params[$type] as $mod ) {
-                       if ( !$mgr->isDefined( $mod ) ) {
-                               $res[$type][] = array( 'name' => $mod, 'missing' => '' );
-                               continue;
-                       }
-                       $obj = $mgr->getModule( $mod );
-                       $item = $this->getClassInfo( $obj );
-                       $item['name'] = $mod;
-                       if ( $isQuery ) {
-                               $item['querytype'] = $mgr->getModuleGroup( $mod );
-                       }
-                       $res[$type][] = $item;
+       protected function formatHelpMessages( array &$res, $key, array $msgs ) {
+               switch ( $this->helpFormat ) {
+                       case 'none':
+                               break;
+
+                       case 'wikitext':
+                               $ret = array();
+                               foreach ( $msgs as $m ) {
+                                       $ret[] = $m->setContext( $this->context )->text();
+                               }
+                               $res[$key] = join( "\n\n", $ret );
+                               break;
+
+                       case 'html':
+                               $ret = array();
+                               foreach ( $msgs as $m ) {
+                                       $ret[] = $m->setContext( $this->context )->parseAsBlock();
+                               }
+                               $res[$key] = join( "\n", $ret );
+                               break;
+
+                       case 'raw':
+                               $res[$key] = array();
+                               foreach ( $msgs as $m ) {
+                                       $res[$key][] = array(
+                                               'key' => $m->getKey(),
+                                               'params' => $m->getParams(),
+                                       );
+                               }
+                               $this->getResult()->setIndexedTagName( $res[$key], 'msg' );
+                               break;
                }
-               $resultObj->setIndexedTagName( $res[$type], 'module' );
        }
 
        /**
-        * @param ApiBase $obj
+        * @param ApiBase $module
         * @return ApiResult
         */
-       private function getClassInfo( $obj ) {
+       private function getModuleInfo( $module ) {
                $result = $this->getResult();
-               $retval['classname'] = get_class( $obj );
-               $retval['description'] = implode( "\n", (array)$obj->getFinalDescription() );
-               $retval['examples'] = '';
-
-               // version is deprecated since 1.21, but needs to be returned for v1
-               $retval['version'] = '';
-               $retval['prefix'] = $obj->getModulePrefix();
-
-               if ( $obj->isReadMode() ) {
-                       $retval['readrights'] = '';
-               }
-               if ( $obj->isWriteMode() ) {
-                       $retval['writerights'] = '';
-               }
-               if ( $obj->mustBePosted() ) {
-                       $retval['mustbeposted'] = '';
-               }
-               if ( $obj instanceof ApiQueryGeneratorBase ) {
-                       $retval['generator'] = '';
+               $ret = array();
+               $path = $module->getModulePath();
+
+               $ret['name'] = $module->getModuleName();
+               $ret['classname'] = get_class( $module );
+               $ret['path'] = $path;
+               if ( !$module->isMain() ) {
+                       $ret['group'] = $module->getParent()->getModuleManager()->getModuleGroup(
+                               $module->getModuleName()
+                       );
                }
+               $ret['prefix'] = $module->getModulePrefix();
 
-               $allowedParams = $obj->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
-               if ( !is_array( $allowedParams ) ) {
-                       return $retval;
-               }
+               $this->formatHelpMessages( $ret, 'description', $module->getFinalDescription() );
 
-               $retval['helpurls'] = (array)$obj->getHelpUrls();
-               if ( isset( $retval['helpurls'][0] ) && $retval['helpurls'][0] === false ) {
-                       $retval['helpurls'] = array();
+               foreach ( $module->getHelpFlags() as $flag ) {
+                       $ret[$flag] = '';
                }
-               $result->setIndexedTagName( $retval['helpurls'], 'helpurl' );
 
-               $examples = $obj->getExamples();
-               $retval['allexamples'] = array();
-               if ( $examples !== false ) {
-                       if ( is_string( $examples ) ) {
-                               $examples = array( $examples );
-                       }
-                       foreach ( $examples as $k => $v ) {
-                               if ( strlen( $retval['examples'] ) ) {
-                                       $retval['examples'] .= ' ';
-                               }
-                               $item = array();
-                               if ( is_numeric( $k ) ) {
-                                       $retval['examples'] .= $v;
-                                       ApiResult::setContent( $item, $v );
-                               } else {
-                                       if ( !is_array( $v ) ) {
-                                               $item['description'] = $v;
+               $ret['helpurls'] = (array)$module->getHelpUrls();
+               if ( isset( $ret['helpurls'][0] ) && $ret['helpurls'][0] === false ) {
+                       $ret['helpurls'] = array();
+               }
+               $result->setIndexedTagName( $ret['helpurls'], 'helpurl' );
+
+               if ( $this->helpFormat !== 'none' ) {
+                       $ret['examples'] = array();
+                       $examples = $module->getExamplesMessages();
+                       foreach ( $examples as $qs => $msg ) {
+                               $item = array(
+                                       'query' => $qs
+                               );
+                               $msg = ApiBase::makeMessage( $msg, $this->context, array(
+                                       $module->getModulePrefix(),
+                                       $module->getModuleName(),
+                                       $module->getModulePath()
+                               ) );
+                               $this->formatHelpMessages( $item, 'description', array( $msg ) );
+                               if ( isset( $item['description'] ) ) {
+                                       if ( is_array( $item['description'] ) ) {
+                                               $item['description'] = $item['description'][0];
                                        } else {
-                                               $item['description'] = implode( $v, "\n" );
+                                               $result->setSubelements( $item, 'description' );
                                        }
-                                       $retval['examples'] .= $item['description'] . ' ' . $k;
-                                       ApiResult::setContent( $item, $k );
                                }
-                               $retval['allexamples'][] = $item;
+                               $ret['examples'][] = $item;
                        }
+                       $result->setIndexedTagName( $ret['examples'], 'example' );
                }
-               $result->setIndexedTagName( $retval['allexamples'], 'example' );
-
-               $retval['parameters'] = array();
-               $paramDesc = $obj->getFinalParamDescription();
-               foreach ( $allowedParams as $n => $p ) {
-                       $a = array( 'name' => $n );
-                       if ( isset( $paramDesc[$n] ) ) {
-                               $a['description'] = implode( "\n", (array)$paramDesc[$n] );
+
+               $ret['parameters'] = array();
+               $params = $module->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
+               $paramDesc = $module->getFinalParamDescription();
+               foreach ( $params as $name => $settings ) {
+                       if ( !is_array( $settings ) ) {
+                               $settings = array( ApiBase::PARAM_DFLT => $settings );
                        }
 
-                       //handle shorthand
-                       if ( !is_array( $p ) ) {
-                               $p = array(
-                                       ApiBase::PARAM_DFLT => $p,
-                               );
+                       $item = array(
+                               'name' => $name
+                       );
+                       if ( isset( $paramDesc[$name] ) ) {
+                               $this->formatHelpMessages( $item, 'description', $paramDesc[$name] );
+                       }
+
+                       if ( !empty( $settings[ApiBase::PARAM_REQUIRED] ) ) {
+                               $item['required'] = '';
+                       }
+
+                       if ( !empty( $settings[ApiBase::PARAM_DEPRECATED] ) ) {
+                               $item['deprecated'] = '';
                        }
 
-                       //handle missing type
-                       if ( !isset( $p[ApiBase::PARAM_TYPE] ) ) {
-                               $dflt = isset( $p[ApiBase::PARAM_DFLT] ) ? $p[ApiBase::PARAM_DFLT] : null;
+                       if ( $name === 'token' && $module->needsToken() ) {
+                               $item['tokentype'] = $module->needsToken();
+                       }
+
+                       if ( !isset( $settings[ApiBase::PARAM_TYPE] ) ) {
+                               $dflt = isset( $settings[ApiBase::PARAM_DFLT] )
+                                       ? $settings[ApiBase::PARAM_DFLT]
+                                       : null;
                                if ( is_bool( $dflt ) ) {
-                                       $p[ApiBase::PARAM_TYPE] = 'boolean';
+                                       $settings[ApiBase::PARAM_TYPE] = 'boolean';
                                } elseif ( is_string( $dflt ) || is_null( $dflt ) ) {
-                                       $p[ApiBase::PARAM_TYPE] = 'string';
+                                       $settings[ApiBase::PARAM_TYPE] = 'string';
                                } elseif ( is_int( $dflt ) ) {
-                                       $p[ApiBase::PARAM_TYPE] = 'integer';
+                                       $settings[ApiBase::PARAM_TYPE] = 'integer';
                                }
                        }
 
-                       if ( isset( $p[ApiBase::PARAM_DEPRECATED] ) && $p[ApiBase::PARAM_DEPRECATED] ) {
-                               $a['deprecated'] = '';
-                       }
-                       if ( isset( $p[ApiBase::PARAM_REQUIRED] ) && $p[ApiBase::PARAM_REQUIRED] ) {
-                               $a['required'] = '';
-                       }
-
-                       if ( isset( $p[ApiBase::PARAM_DFLT] ) ) {
-                               $type = $p[ApiBase::PARAM_TYPE];
-                               if ( $type === 'boolean' ) {
-                                       $a['default'] = ( $p[ApiBase::PARAM_DFLT] ? 'true' : 'false' );
-                               } elseif ( $type === 'string' ) {
-                                       $a['default'] = strval( $p[ApiBase::PARAM_DFLT] );
-                               } elseif ( $type === 'integer' ) {
-                                       $a['default'] = intval( $p[ApiBase::PARAM_DFLT] );
-                               } else {
-                                       $a['default'] = $p[ApiBase::PARAM_DFLT];
+                       if ( isset( $settings[ApiBase::PARAM_DFLT] ) ) {
+                               switch ( $settings[ApiBase::PARAM_TYPE] ) {
+                                       case 'boolean':
+                                               $item['default'] = ( $settings[ApiBase::PARAM_DFLT] ? 'true' : 'false' );
+                                               break;
+                                       case 'string':
+                                               $item['default'] = strval( $settings[ApiBase::PARAM_DFLT] );
+                                               break;
+                                       case 'integer':
+                                               $item['default'] = intval( $settings[ApiBase::PARAM_DFLT] );
+                                               break;
+                                       default:
+                                               $item['default'] = $settings[ApiBase::PARAM_DFLT];
+                                               break;
                                }
                        }
-                       if ( isset( $p[ApiBase::PARAM_ISMULTI] ) && $p[ApiBase::PARAM_ISMULTI] ) {
-                               $a['multi'] = '';
-                               $a['limit'] = $this->getMain()->canApiHighLimits() ?
+
+                       if ( !empty( $settings[ApiBase::PARAM_ISMULTI] ) ) {
+                               $item['multi'] = '';
+                               $item['limit'] = $this->getMain()->canApiHighLimits() ?
                                        ApiBase::LIMIT_SML2 :
                                        ApiBase::LIMIT_SML1;
-                               $a['lowlimit'] = ApiBase::LIMIT_SML1;
-                               $a['highlimit'] = ApiBase::LIMIT_SML2;
+                               $item['lowlimit'] = ApiBase::LIMIT_SML1;
+                               $item['highlimit'] = ApiBase::LIMIT_SML2;
                        }
 
-                       if ( isset( $p[ApiBase::PARAM_ALLOW_DUPLICATES] ) && $p[ApiBase::PARAM_ALLOW_DUPLICATES] ) {
-                               $a['allowsduplicates'] = '';
+                       if ( !empty( $settings[ApiBase::PARAM_ALLOW_DUPLICATES] ) ) {
+                               $item['allowsduplicates'] = '';
                        }
 
-                       if ( isset( $p[ApiBase::PARAM_TYPE] ) ) {
-                               if ( $p[ApiBase::PARAM_TYPE] === 'submodule' ) {
-                                       $a['type'] = $obj->getModuleManager()->getNames( $n );
-                                       sort( $a['type'] );
-                                       $a['submodules'] = '';
+                       if ( isset( $settings[ApiBase::PARAM_TYPE] ) ) {
+                               if ( $settings[ApiBase::PARAM_TYPE] === 'submodule' ) {
+                                       $item['type'] = $module->getModuleManager()->getNames( $name );
+                                       sort( $item['type'] );
+                                       $item['submodules'] = '';
                                } else {
-                                       $a['type'] = $p[ApiBase::PARAM_TYPE];
+                                       $item['type'] = $settings[ApiBase::PARAM_TYPE];
                                }
-                               if ( is_array( $a['type'] ) ) {
+                               if ( is_array( $item['type'] ) ) {
                                        // To prevent sparse arrays from being serialized to JSON as objects
-                                       $a['type'] = array_values( $a['type'] );
-                                       $result->setIndexedTagName( $a['type'], 't' );
+                                       $item['type'] = array_values( $item['type'] );
+                                       $result->setIndexedTagName( $item['type'], 't' );
                                }
                        }
-                       if ( isset( $p[ApiBase::PARAM_MAX] ) ) {
-                               $a['max'] = $p[ApiBase::PARAM_MAX];
+                       if ( isset( $settings[ApiBase::PARAM_MAX] ) ) {
+                               $item['max'] = $settings[ApiBase::PARAM_MAX];
                        }
-                       if ( isset( $p[ApiBase::PARAM_MAX2] ) ) {
-                               $a['highmax'] = $p[ApiBase::PARAM_MAX2];
+                       if ( isset( $settings[ApiBase::PARAM_MAX2] ) ) {
+                               $item['highmax'] = $settings[ApiBase::PARAM_MAX2];
                        }
-                       if ( isset( $p[ApiBase::PARAM_MIN] ) ) {
-                               $a['min'] = $p[ApiBase::PARAM_MIN];
+                       if ( isset( $settings[ApiBase::PARAM_MIN] ) ) {
+                               $item['min'] = $settings[ApiBase::PARAM_MIN];
                        }
-                       $retval['parameters'][] = $a;
+
+                       if ( !empty( $settings[ApiBase::PARAM_HELP_MSG_INFO] ) ) {
+                               $item['info'] = array();
+                               foreach ( $settings[ApiBase::PARAM_HELP_MSG_INFO] as $i ) {
+                                       $tag = array_shift( $i );
+                                       $info = array(
+                                               'name' => $tag,
+                                       );
+                                       if ( count( $i ) ) {
+                                               $info['values'] = $i;
+                                               $result->setIndexedTagName( $info['values'], 'v' );
+                                       }
+                                       $this->formatHelpMessages( $info, 'text', array(
+                                               $this->context->msg( "apihelp-{$path}-paraminfo-{$tag}" )
+                                                       ->numParams( count( $i ) )
+                                                       ->params( $this->context->getLanguage()->commaList( $i ) )
+                                                       ->params( $module->getModulePrefix() )
+                                       ) );
+                                       $result->setSubelements( $info, 'text' );
+                                       $item['info'][] = $info;
+                               }
+                               $result->setIndexedTagName( $item['info'], 'i' );
+                       }
+
+                       $ret['parameters'][] = $item;
                }
-               $result->setIndexedTagName( $retval['parameters'], 'param' );
+               $result->setIndexedTagName( $ret['parameters'], 'param' );
 
-               return $retval;
+               return $ret;
        }
 
        public function isReadMode() {
@@ -258,9 +349,9 @@ class ApiParamInfo extends ApiBase {
        }
 
        public function getAllowedParams() {
-               $modules = $this->getMain()->getModuleManager()->getNames( 'action' );
-               sort( $modules );
-               $querymodules = $this->queryObj->getModuleManager()->getNames();
+               // back compat
+               $querymodules = $this->getMain()->getModuleManager()
+                       ->getModule( 'query' )->getModuleManager()->getNames();
                sort( $querymodules );
                $formatmodules = $this->getMain()->getModuleManager()->getNames( 'format' );
                sort( $formatmodules );
@@ -268,39 +359,35 @@ class ApiParamInfo extends ApiBase {
                return array(
                        'modules' => array(
                                ApiBase::PARAM_ISMULTI => true,
-                               ApiBase::PARAM_TYPE => $modules,
                        ),
+                       'helpformat' => array(
+                               ApiBase::PARAM_DFLT => 'none',
+                               ApiBase::PARAM_TYPE => array( 'html', 'wikitext', 'raw', 'none' ),
+                       ),
+
                        'querymodules' => array(
+                               ApiBase::PARAM_DEPRECATED => true,
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => $querymodules,
                        ),
-                       'mainmodule' => false,
-                       'pagesetmodule' => false,
+                       'mainmodule' => array(
+                               ApiBase::PARAM_DEPRECATED => true,
+                       ),
+                       'pagesetmodule' => array(
+                               ApiBase::PARAM_DEPRECATED => true,
+                       ),
                        'formatmodules' => array(
+                               ApiBase::PARAM_DEPRECATED => true,
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => $formatmodules,
                        )
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'modules' => 'List of module names (value of the action= parameter)',
-                       'querymodules' => 'List of query module names (value of prop=, meta= or list= parameter)',
-                       'mainmodule' => 'Get information about the main (top-level) module as well',
-                       'pagesetmodule' => 'Get information about the pageset module ' .
-                               '(providing titles= and friends) as well',
-                       'formatmodules' => 'List of format module names (value of format= parameter)',
-               );
-       }
-
-       public function getDescription() {
-               return 'Obtain information about certain API parameters and errors.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=paraminfo&modules=parse&querymodules=allpages|siteinfo'
+                       'action=paraminfo&modules=parse|phpfm|query+allpages|query+siteinfo'
+                               => 'apihelp-paraminfo-example-1',
                );
        }
 
index 06fdf85..2bf1677 100644 (file)
@@ -79,16 +79,6 @@ class ApiParse extends ApiBase {
                // TODO: Does this still need $wgTitle?
                global $wgParser, $wgTitle;
 
-               // Currently unnecessary, code to act as a safeguard against any change
-               // in current behavior of uselang
-               $oldLang = null;
-               if ( isset( $params['uselang'] )
-                       && $params['uselang'] != $this->getContext()->getLanguage()->getCode()
-               ) {
-                       $oldLang = $this->getContext()->getLanguage(); // Backup language
-                       $this->getContext()->setLanguage( Language::factory( $params['uselang'] ) );
-               }
-
                $redirValues = null;
 
                // Return result
@@ -347,6 +337,14 @@ class ApiParse extends ApiBase {
                        $result_array['modulemessages'] = array_values( array_unique( $p_result->getModuleMessages() ) );
                }
 
+               if ( isset( $prop['indicators'] ) ) {
+                       foreach ( $p_result->getIndicators() as $name => $content ) {
+                               $indicator = array( 'name' => $name );
+                               ApiResult::setContent( $indicator, $content );
+                               $result_array['indicators'][] = $indicator;
+                       }
+               }
+
                if ( isset( $prop['iwlinks'] ) ) {
                        $result_array['iwlinks'] = $this->formatIWLinks( $p_result->getInterwikiLinks() );
                }
@@ -378,7 +376,7 @@ class ApiParse extends ApiBase {
                                $this->dieUsage( "generatexml is only supported for wikitext content", "notwikitext" );
                        }
 
-                       $wgParser->startExternalParse( $titleObj, $popts, OT_PREPROCESS );
+                       $wgParser->startExternalParse( $titleObj, $popts, Parser::OT_PREPROCESS );
                        $dom = $wgParser->preprocessToDom( $this->content->getNativeData() );
                        if ( is_callable( array( $dom, 'saveXML' ) ) ) {
                                $xml = $dom->saveXML();
@@ -401,6 +399,7 @@ class ApiParse extends ApiBase {
                        'sections' => 's',
                        'headitems' => 'hi',
                        'modules' => 'm',
+                       'indicators' => 'ind',
                        'modulescripts' => 'm',
                        'modulestyles' => 'm',
                        'modulemessages' => 'm',
@@ -409,10 +408,6 @@ class ApiParse extends ApiBase {
                );
                $this->setIndexedTagNames( $result_array, $result_mapping );
                $result->addValue( null, $this->getModuleName(), $result_array );
-
-               if ( !is_null( $oldLang ) ) {
-                       $this->getContext()->setLanguage( $oldLang ); // Reset language to $oldLang
-               }
        }
 
        /**
@@ -499,7 +494,7 @@ class ApiParse extends ApiBase {
                        $entry['lang'] = $bits[0];
                        if ( $title ) {
                                $entry['url'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
-                               // localised language name in user language (maybe set by uselang=)
+                               // localised language name in 'uselang' language
                                $entry['langname'] = Language::fetchLanguageName(
                                        $title->getInterwiki(),
                                        $this->getLanguage()->getCode()
@@ -694,6 +689,7 @@ class ApiParse extends ApiBase {
                                        'headitems',
                                        'headhtml',
                                        'modules',
+                                       'indicators',
                                        'iwlinks',
                                        'wikitext',
                                        'properties',
@@ -704,11 +700,15 @@ class ApiParse extends ApiBase {
                        'pst' => false,
                        'onlypst' => false,
                        'effectivelanglinks' => false,
-                       'uselang' => null,
                        'section' => null,
                        'disablepp' => false,
                        'disableeditsection' => false,
-                       'generatexml' => false,
+                       'generatexml' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-parse-param-generatexml', CONTENT_MODEL_WIKITEXT
+                               ),
+                       ),
                        'preview' => false,
                        'sectionpreview' => false,
                        'disabletoc' => false,
@@ -721,97 +721,16 @@ class ApiParse extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               $wikitext = CONTENT_MODEL_WIKITEXT;
-
-               return array(
-                       'text' => "Text to parse. Use {$p}title or {$p}contentmodel to control the content model",
-                       'summary' => 'Summary to parse',
-                       'redirects' => "If the {$p}page or the {$p}pageid parameter is set to a redirect, resolve it",
-                       'title' => "Title of page the text belongs to. " .
-                               "If omitted, {$p}contentmodel must be specified, and \"API\" will be used as the title",
-                       'page' => "Parse the content of this page. Cannot be used together with {$p}text and {$p}title",
-                       'pageid' => "Parse the content of this page. Overrides {$p}page",
-                       'oldid' => "Parse the content of this revision. Overrides {$p}page and {$p}pageid",
-                       'prop' => array(
-                               'Which pieces of information to get',
-                               ' text           - Gives the parsed text of the wikitext',
-                               ' langlinks      - Gives the language links in the parsed wikitext',
-                               ' categories     - Gives the categories in the parsed wikitext',
-                               ' categorieshtml - Gives the HTML version of the categories',
-                               ' links          - Gives the internal links in the parsed wikitext',
-                               ' templates      - Gives the templates in the parsed wikitext',
-                               ' images         - Gives the images in the parsed wikitext',
-                               ' externallinks  - Gives the external links in the parsed wikitext',
-                               ' sections       - Gives the sections in the parsed wikitext',
-                               ' revid          - Adds the revision ID of the parsed page',
-                               ' displaytitle   - Adds the title of the parsed wikitext',
-                               ' headitems      - Gives items to put in the <head> of the page',
-                               ' headhtml       - Gives parsed <head> of the page',
-                               ' modules        - Gives the ResourceLoader modules used on the page',
-                               ' iwlinks        - Gives interwiki links in the parsed wikitext',
-                               ' wikitext       - Gives the original wikitext that was parsed',
-                               ' properties     - Gives various properties defined in the parsed wikitext',
-                               ' limitreportdata - Gives the limit report in a structured way.',
-                               "                   Gives no data, when {$p}disablepp is set.",
-                               ' limitreporthtml - Gives the HTML version of the limit report.',
-                               "                   Gives no data, when {$p}disablepp is set.",
-                       ),
-                       'effectivelanglinks' => array(
-                               'Includes language links supplied by extensions',
-                               '(for use with prop=langlinks)',
-                       ),
-                       'pst' => array(
-                               'Do a pre-save transform on the input before parsing it',
-                               "Only valid when used with {$p}text",
-                       ),
-                       'onlypst' => array(
-                               '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 {$p}text",
-                       ),
-                       'uselang' => 'Which language to parse the request in',
-                       'section' => 'Only retrieve the content of this section number',
-                       'disablepp' => 'Disable the PP Report from the parser output',
-                       'disableeditsection' => 'Disable edit section links from the parser output',
-                       'generatexml' => "Generate XML parse tree (requires contentmodel=$wikitext)",
-                       'preview' => 'Parse in preview mode',
-                       'sectionpreview' => 'Parse in section preview mode (enables preview mode too)',
-                       'disabletoc' => 'Disable table of contents in output',
-                       'contentformat' => array(
-                               'Content serialization format used for the input text',
-                               "Only valid when used with {$p}text",
-                       ),
-                       'contentmodel' => array(
-                               "Content model of the input text. If omitted, ${p}title must be specified, " .
-                                       "and default will be the model of the specified ${p}title",
-                               "Only valid when used with {$p}text",
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'Parses content and returns parser output.',
-                       'See the various prop-Modules of action=query to get information from the current' .
-                               'version of a page.',
-                       'There are several ways to specify the text to parse:',
-                       "1) Specify a page or revision, using {$p}page, {$p}pageid, or {$p}oldid.",
-                       "2) Specify content explicitly, using {$p}text, {$p}title, and {$p}contentmodel.",
-                       "3) Specify only a summary to parse. {$p}prop should be given an empty value.",
-               );
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=parse&page=Project:Sandbox' => 'Parse a page',
-                       'api.php?action=parse&text={{Project:Sandbox}}&contentmodel=wikitext' => 'Parse wikitext',
-                       'api.php?action=parse&text={{PAGENAME}}&title=Test'
-                               => 'Parse wikitext, specifying the page title',
-                       'api.php?action=parse&summary=Some+[[link]]&prop=' => 'Parse a summary',
+                       'action=parse&page=Project:Sandbox'
+                               => 'apihelp-parse-example-page',
+                       'action=parse&text={{Project:Sandbox}}&contentmodel=wikitext'
+                               => 'apihelp-parse-example-text',
+                       'action=parse&text={{PAGENAME}}&title=Test'
+                               => 'apihelp-parse-example-texttitle',
+                       'action=parse&summary=Some+[[link]]&prop='
+                               => 'apihelp-parse-example-summary',
                );
        }
 
index 9690952..3684461 100644 (file)
@@ -77,10 +77,6 @@ class ApiPatrol extends ApiBase {
 
        public function getAllowedParams() {
                return array(
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
-                       ),
                        'rcid' => array(
                                ApiBase::PARAM_TYPE => 'integer'
                        ),
@@ -90,30 +86,16 @@ class ApiPatrol extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'token' => 'Patrol token obtained from list=recentchanges',
-                       'rcid' => 'Recentchanges ID to patrol',
-                       'revid' => 'Revision ID to patrol',
-               );
-       }
-
-       public function getDescription() {
-               return 'Patrol a page or revision.';
-       }
-
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
                return 'patrol';
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=patrol&token=123abc&rcid=230672766',
-                       'api.php?action=patrol&token=123abc&revid=230672766'
+                       'action=patrol&token=123ABC&rcid=230672766'
+                               => 'apihelp-patrol-example-rcid',
+                       'action=patrol&token=123ABC&revid=230672766'
+                               => 'apihelp-patrol-example-revid',
                );
        }
 
index 844d1cc..ae7d42b 100644 (file)
@@ -148,10 +148,6 @@ class ApiProtect extends ApiBase {
                        'pageid' => array(
                                ApiBase::PARAM_TYPE => 'integer',
                        ),
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
-                       ),
                        'protections' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_REQUIRED => true,
@@ -179,48 +175,21 @@ class ApiProtect extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'title' => "Title of the page you want to (un)protect. Cannot be used together with {$p}pageid",
-                       'pageid' => "ID of the page you want to (un)protect. Cannot be used together with {$p}title",
-                       'token' => 'A protect token previously retrieved through prop=info',
-                       'protections' => 'List of protection levels, formatted action=group (e.g. edit=sysop)',
-                       'expiry' => array(
-                               'Expiry timestamps. If only one timestamp is ' .
-                                       'set, it\'ll be used for all protections.',
-                               'Use \'infinite\', \'indefinite\', \'infinity\' or \'never\', for a never-expiring protection.'
-                       ),
-                       'reason' => 'Reason for (un)protecting',
-                       'cascade' => array(
-                               'Enable cascading protection (i.e. protect pages included in this page)',
-                               'Ignored if not all protection levels are \'sysop\' or \'protect\''
-                       ),
-                       'watch' => 'If set, add the page being (un)protected to your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your ' .
-                               'watchlist, use preferences or do not change watch',
-               );
-       }
-
-       public function getDescription() {
-               return 'Change the protection level of a page.';
-       }
-
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
+               return 'csrf';
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=protect&title=Main%20Page&token=123ABC&' .
-                               'protections=edit=sysop|move=sysop&cascade=&expiry=20070901163000|never',
-                       'api.php?action=protect&title=Main%20Page&token=123ABC&' .
+                       'action=protect&title=Main%20Page&token=123ABC&' .
+                               'protections=edit=sysop|move=sysop&cascade=&expiry=20070901163000|never'
+                               => 'apihelp-protect-example-protect',
+                       'action=protect&title=Main%20Page&token=123ABC&' .
                                'protections=edit=all|move=all&reason=Lifting%20restrictions'
+                               => 'apihelp-protect-example-unprotect',
+                       'action=protect&title=Main%20Page&token=123ABC&' .
+                               'protections=&reason=Lifting%20restrictions'
+                               => 'apihelp-protect-example-unprotect2',
                );
        }
 
index 7667b23..ec55137 100644 (file)
@@ -133,7 +133,9 @@ class ApiPurge extends ApiBase {
                $result = array(
                        'forcelinkupdate' => false,
                        'forcerecursivelinkupdate' => false,
-                       'continue' => '',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -142,25 +144,12 @@ class ApiPurge extends ApiBase {
                return $result;
        }
 
-       public function getParamDescription() {
-               return $this->getPageSet()->getFinalParamDescription()
-                       + array(
-                               'forcelinkupdate' => 'Update the links tables',
-                               'forcerecursivelinkupdate' => 'Update the links table, and update ' .
-                                       'the links tables for any page that uses this page as a template',
-                               'continue' => 'When more results are available, use this to continue',
-                       );
-       }
-
-       public function getDescription() {
-               return array( 'Purge the cache for the given titles.',
-                       'Requires a POST request if the user is not logged in.'
-               );
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=purge&titles=Main_Page|API' => 'Purge the "Main Page" and the "API" page',
+                       'action=purge&titles=Main_Page|API'
+                               => 'apihelp-purge-example-simple',
+                       'action=purge&generator=allpages&gapnamespace=0&gaplimit=10'
+                               => 'apihelp-purge-example-generator',
                );
        }
 
index 9ffcf0e..5a0491a 100644 (file)
@@ -45,19 +45,23 @@ class ApiQuery extends ApiBase {
                'categories' => 'ApiQueryCategories',
                'categoryinfo' => 'ApiQueryCategoryInfo',
                'contributors' => 'ApiQueryContributors',
+               'deletedrevisions' => 'ApiQueryDeletedRevisions',
                'duplicatefiles' => 'ApiQueryDuplicateFiles',
                'extlinks' => 'ApiQueryExternalLinks',
+               'fileusage' => 'ApiQueryBacklinksprop',
                'images' => 'ApiQueryImages',
                'imageinfo' => 'ApiQueryImageInfo',
                'info' => 'ApiQueryInfo',
                'links' => 'ApiQueryLinks',
+               'linkshere' => 'ApiQueryBacklinksprop',
                'iwlinks' => 'ApiQueryIWLinks',
                'langlinks' => 'ApiQueryLangLinks',
                'pageprops' => 'ApiQueryPageProps',
-               'redirects' => 'ApiQueryRedirects',
+               'redirects' => 'ApiQueryBacklinksprop',
                'revisions' => 'ApiQueryRevisions',
                'stashimageinfo' => 'ApiQueryStashImageInfo',
                'templates' => 'ApiQueryLinks',
+               'transcludedin' => 'ApiQueryBacklinksprop',
        );
 
        /**
@@ -66,6 +70,7 @@ class ApiQuery extends ApiBase {
         */
        private static $QueryListModules = array(
                'allcategories' => 'ApiQueryAllCategories',
+               'alldeletedrevisions' => 'ApiQueryAllDeletedRevisions',
                'allfileusages' => 'ApiQueryAllLinks',
                'allimages' => 'ApiQueryAllImages',
                'alllinks' => 'ApiQueryAllLinks',
@@ -108,6 +113,7 @@ class ApiQuery extends ApiBase {
                'siteinfo' => 'ApiQuerySiteinfo',
                'userinfo' => 'ApiQueryUserInfo',
                'filerepoinfo' => 'ApiQueryFileRepoInfo',
+               'tokens' => 'ApiQueryTokens',
        );
 
        /**
@@ -243,6 +249,16 @@ 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' );
@@ -525,6 +541,7 @@ class ApiQuery extends ApiBase {
                        'exportnowrap' => false,
                        'iwurl' => false,
                        'continue' => null,
+                       'rawcontinue' => false,
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -535,9 +552,11 @@ class ApiQuery extends ApiBase {
 
        /**
         * Override the parent to generate help messages for all available query modules.
+        * @deprecated since 1.25
         * @return string
         */
        public function makeHelpMsg() {
+               wfDeprecated( __METHOD__, '1.25' );
 
                // Use parent to make default message for the query module
                $msg = parent::makeHelpMsg();
@@ -557,6 +576,7 @@ class ApiQuery extends ApiBase {
 
        /**
         * For all modules of a given group, generate help messages and join them together
+        * @deprecated since 1.25
         * @param string $group Module group
         * @return string
         */
@@ -589,42 +609,13 @@ class ApiQuery extends ApiBase {
                return true;
        }
 
-       public function getParamDescription() {
-               return $this->getPageSet()->getFinalParamDescription() + array(
-                       'prop' => 'Which properties to get for the titles/revisions/pageids. ' .
-                               'Module help is available below',
-                       'list' => 'Which lists to get. Module help is available below',
-                       'meta' => 'Which metadata to get about the site. Module help is available below',
-                       'indexpageids' => 'Include an additional pageids section listing all returned page IDs',
-                       'export' => 'Export the current revisions of all given or generated pages',
-                       'exportnowrap' => 'Return the export XML without wrapping it in an ' .
-                               'XML result (same format as Special:Export). Can only be used with export',
-                       'iwurl' => 'Whether to get the full URL if the title is an interwiki link',
-                       'continue' => array(
-                               'When present, formats query-continue as key-value pairs that ' .
-                                       'should simply be merged into the original request.',
-                               'This parameter must be set to an empty string in the initial query.',
-                               'This parameter is recommended for all new development, and ' .
-                                       'will be made default in the next API version.'
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Query API module allows applications to get needed pieces of data ' .
-                               'from the MediaWiki databases,',
-                       'and is loosely based on the old query.php interface.',
-                       'All data modifications will first have to use query to acquire a ' .
-                               'token to prevent abuse from malicious sites.'
-               );
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=revisions&meta=siteinfo&' .
-                               'titles=Main%20Page&rvprop=user|comment&continue=',
-                       'api.php?action=query&generator=allpages&gapprefix=API/&prop=revisions&continue=',
+                       'action=query&prop=revisions&meta=siteinfo&' .
+                               'titles=Main%20Page&rvprop=user|comment&continue='
+                               => 'apihelp-query-example-revisions',
+                       'action=query&generator=allpages&gapprefix=API/&prop=revisions&continue='
+                               => 'apihelp-query-example-allpages',
                );
        }
 
index 79fab72..672c234 100644 (file)
@@ -156,7 +156,9 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
        public function getAllowedParams() {
                return array(
                        'from' => null,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'to' => null,
                        'prefix' => null,
                        'dir' => array(
@@ -189,32 +191,12 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'from' => 'The category to start enumerating from',
-                       'continue' => 'When more results are available, use this to continue',
-                       'to' => 'The category to stop enumerating at',
-                       'prefix' => 'Search for all category titles that begin with this value',
-                       'dir' => 'Direction to sort in',
-                       'min' => 'Minimum number of category members',
-                       'max' => 'Maximum number of category members',
-                       'limit' => 'How many categories to return',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' size    - Adds number of pages in the category',
-                               ' hidden  - Tags categories that are hidden with __HIDDENCAT__',
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               return 'Enumerate all categories.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=allcategories&acprop=size',
-                       'api.php?action=query&generator=allcategories&gacprefix=List&prop=info',
+                       'action=query&list=allcategories&acprop=size'
+                               => 'apihelp-query+allcategories-example-size',
+                       'action=query&generator=allcategories&gacprefix=List&prop=info'
+                               => 'apihelp-query+allcategories-example-generator',
                );
        }
 
diff --git a/includes/api/ApiQueryAllDeletedRevisions.php b/includes/api/ApiQueryAllDeletedRevisions.php
new file mode 100644 (file)
index 0000000..0292e9a
--- /dev/null
@@ -0,0 +1,384 @@
+<?php
+/**
+ * Created on Oct 3, 2014
+ *
+ * Copyright © 2014 Brad Jorsch "bjorsch@wikimedia.org"
+ *
+ * Heavily based on ApiQueryDeletedrevs,
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to enumerate all deleted revisions.
+ *
+ * @ingroup API
+ */
+class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
+
+       public function __construct( ApiQuery $query, $moduleName ) {
+               parent::__construct( $query, $moduleName, 'adr' );
+       }
+
+       /**
+        * @param ApiPageSet $resultPageSet
+        * @return void
+        */
+       protected function run( ApiPageSet $resultPageSet = null ) {
+               $user = $this->getUser();
+               // Before doing anything at all, let's check permissions
+               if ( !$user->isAllowed( 'deletedhistory' ) ) {
+                       $this->dieUsage(
+                               'You don\'t have permission to view deleted revision information',
+                               'permissiondenied'
+                       );
+               }
+
+               $db = $this->getDB();
+               $params = $this->extractRequestParams( false );
+
+               $result = $this->getResult();
+               $pageSet = $this->getPageSet();
+               $titles = $pageSet->getTitles();
+
+               // This module operates in two modes:
+               // 'user': List deleted revs by a certain user
+               // 'all': List all deleted revs in NS
+               $mode = 'all';
+               if ( !is_null( $params['user'] ) ) {
+                       $mode = 'user';
+               }
+
+               if ( $mode == 'user' ) {
+                       foreach ( array( 'from', 'to', 'prefix', 'excludeuser' ) as $param ) {
+                               if ( !is_null( $params[$param] ) ) {
+                                       $p = $this->getModulePrefix();
+                                       $this->dieUsage( "The '{$p}{$param}' parameter cannot be used with '{$p}user'",
+                                               'badparams' );
+                               }
+                       }
+               } else {
+                       foreach ( array( 'start', 'end' ) as $param ) {
+                               if ( !is_null( $params[$param] ) ) {
+                                       $p = $this->getModulePrefix();
+                                       $this->dieUsage( "The '{$p}{$param}' parameter may only be used with '{$p}user'",
+                                               'badparams' );
+                               }
+                       }
+               }
+
+               $this->addTables( 'archive' );
+               if ( $resultPageSet === null ) {
+                       $this->parseParameters( $params );
+                       $this->addFields( Revision::selectArchiveFields() );
+                       $this->addFields( array( 'ar_title', 'ar_namespace' ) );
+               } else {
+                       $this->limit = $this->getParameter( 'limit' ) ?: 10;
+                       $this->addFields( array( 'ar_title', 'ar_namespace', 'ar_timestamp', 'ar_rev_id', 'ar_id' ) );
+               }
+
+               if ( $this->fld_tags ) {
+                       $this->addTables( 'tag_summary' );
+                       $this->addJoinConds(
+                               array( 'tag_summary' => array( 'LEFT JOIN', array( 'ar_rev_id=ts_rev_id' ) ) )
+                       );
+                       $this->addFields( 'ts_tags' );
+               }
+
+               if ( !is_null( $params['tag'] ) ) {
+                       $this->addTables( 'change_tag' );
+                       $this->addJoinConds(
+                               array( 'change_tag' => array( 'INNER JOIN', array( 'ar_rev_id=ct_rev_id' ) ) )
+                       );
+                       $this->addWhereFld( 'ct_tag', $params['tag'] );
+               }
+
+               if ( $this->fld_content || !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) {
+                       // Modern MediaWiki has the content for deleted revs in the 'text'
+                       // table using fields old_text and old_flags. But revisions deleted
+                       // pre-1.5 store the content in the 'archive' table directly using
+                       // fields ar_text and ar_flags, and no corresponding 'text' row. So
+                       // we have to LEFT JOIN and fetch all four fields.
+                       $this->addTables( 'text' );
+                       $this->addJoinConds(
+                               array( 'text' => array( 'LEFT JOIN', array( 'ar_text_id=old_id' ) ) )
+                       );
+                       $this->addFields( array( 'ar_text', 'ar_flags', 'old_text', 'old_flags' ) );
+
+                       // This also means stricter restrictions
+                       if ( !$user->isAllowedAny( 'undelete', 'deletedtext' ) ) {
+                               $this->dieUsage(
+                                       'You don\'t have permission to view deleted revision content',
+                                       'permissiondenied'
+                               );
+                       }
+               }
+
+               $dir = $params['dir'];
+               $miser_ns = null;
+
+               if ( $mode == 'all' ) {
+                       if ( $params['namespace'] !== null ) {
+                               $this->addWhereFld( 'ar_namespace', $params['namespace'] );
+                       }
+
+                       $from = $params['from'] === null
+                               ? null
+                               : $this->titlePartToKey( $params['from'], $params['namespace'] );
+                       $to = $params['to'] === null
+                               ? null
+                               : $this->titlePartToKey( $params['to'], $params['namespace'] );
+                       $this->addWhereRange( 'ar_title', $dir, $from, $to );
+
+                       if ( isset( $params['prefix'] ) ) {
+                               $this->addWhere( 'ar_title' . $db->buildLike(
+                                       $this->titlePartToKey( $params['prefix'], $params['namespace'] ),
+                                       $db->anyString() ) );
+                       }
+               } else {
+                       if ( $this->getConfig()->get( 'MiserMode' ) ) {
+                               $miser_ns = $params['namespace'];
+                       } else {
+                               $this->addWhereFld( 'ar_namespace', $params['namespace'] );
+                       }
+                       $this->addTimestampWhereRange( 'ar_timestamp', $dir, $params['start'], $params['end'] );
+               }
+
+               if ( !is_null( $params['user'] ) ) {
+                       $this->addWhereFld( 'ar_user_text', $params['user'] );
+               } elseif ( !is_null( $params['excludeuser'] ) ) {
+                       $this->addWhere( 'ar_user_text != ' .
+                               $db->addQuotes( $params['excludeuser'] ) );
+               }
+
+               if ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ) {
+                       // Paranoia: avoid brute force searches (bug 17342)
+                       // (shouldn't be able to get here without 'deletedhistory', but
+                       // check it again just in case)
+                       if ( !$user->isAllowed( 'deletedhistory' ) ) {
+                               $bitmask = Revision::DELETED_USER;
+                       } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+                               $bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
+                       } else {
+                               $bitmask = 0;
+                       }
+                       if ( $bitmask ) {
+                               $this->addWhere( $db->bitAnd( 'ar_deleted', $bitmask ) . " != $bitmask" );
+                       }
+               }
+
+               if ( !is_null( $params['continue'] ) ) {
+                       $cont = explode( '|', $params['continue'] );
+                       $op = ( $dir == 'newer' ? '>' : '<' );
+                       if ( $mode == 'all' ) {
+                               $this->dieContinueUsageIf( count( $cont ) != 4 );
+                               $ns = intval( $cont[0] );
+                               $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
+                               $title = $db->addQuotes( $cont[1] );
+                               $ts = $db->addQuotes( $db->timestamp( $cont[2] ) );
+                               $ar_id = (int)$cont[3];
+                               $this->dieContinueUsageIf( strval( $ar_id ) !== $cont[3] );
+                               $this->addWhere( "ar_namespace $op $ns OR " .
+                                       "(ar_namespace = $ns AND " .
+                                       "(ar_title $op $title OR " .
+                                       "(ar_title = $title AND " .
+                                       "(ar_timestamp $op $ts OR " .
+                                       "(ar_timestamp = $ts AND " .
+                                       "ar_id $op= $ar_id)))))" );
+                       } else {
+                               $this->dieContinueUsageIf( count( $cont ) != 2 );
+                               $ts = $db->addQuotes( $db->timestamp( $cont[0] ) );
+                               $ar_id = (int)$cont[1];
+                               $this->dieContinueUsageIf( strval( $ar_id ) !== $cont[1] );
+                               $this->addWhere( "ar_timestamp $op $ts OR " .
+                                       "(ar_timestamp = $ts AND " .
+                                       "ar_id $op= $ar_id)" );
+                       }
+               }
+
+               $this->addOption( 'LIMIT', $this->limit + 1 );
+
+               $sort = ( $dir == 'newer' ? '' : ' DESC' );
+               $orderby = array();
+               if ( $mode == 'all' ) {
+                       // Targeting index name_title_timestamp
+                       if ( $params['namespace'] === null || count( array_unique( $params['namespace'] ) ) > 1 ) {
+                               $orderby[] = "ar_namespace $sort";
+                       }
+                       $orderby[] = "ar_title $sort";
+                       $orderby[] = "ar_timestamp $sort";
+                       $orderby[] = "ar_id $sort";
+               } else {
+                       // Targeting index usertext_timestamp
+                       // 'user' is always constant.
+                       $orderby[] = "ar_timestamp $sort";
+                       $orderby[] = "ar_id $sort";
+               }
+               $this->addOption( 'ORDER BY', $orderby );
+
+               $res = $this->select( __METHOD__ );
+               $pageMap = array(); // Maps ns&title to array index
+               $count = 0;
+               $nextIndex = 0;
+               $generated = array();
+               foreach ( $res as $row ) {
+                       if ( ++$count > $this->limit ) {
+                               // We've had enough
+                               if ( $mode == 'all' ) {
+                                       $this->setContinueEnumParameter( 'continue',
+                                               "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
+                                       );
+                               } else {
+                                       $this->setContinueEnumParameter( 'continue', "$row->ar_timestamp|$row->ar_id" );
+                               }
+                               break;
+                       }
+
+                       // Miser mode namespace check
+                       if ( $miser_ns !== null && !in_array( $row->ar_namespace, $miser_ns ) ) {
+                               continue;
+                       }
+
+                       if ( $resultPageSet !== null ) {
+                               if ( $params['generatetitles'] ) {
+                                       $key = "{$row->ar_namespace}:{$row->ar_title}";
+                                       if ( !isset( $generated[$key] ) ) {
+                                               $generated[$key] = Title::makeTitle( $row->ar_namespace, $row->ar_title );
+                                       }
+                               } else {
+                                       $generated[] = $row->ar_rev_id;
+                               }
+                       } else {
+                               $revision = Revision::newFromArchiveRow( $row );
+                               $rev = $this->extractRevisionInfo( $revision, $row );
+
+                               if ( !isset( $pageMap[$row->ar_namespace][$row->ar_title] ) ) {
+                                       $index = $nextIndex++;
+                                       $pageMap[$row->ar_namespace][$row->ar_title] = $index;
+                                       $title = $revision->getTitle();
+                                       $a = array(
+                                               'pageid' => $title->getArticleID(),
+                                               'revisions' => array( $rev ),
+                                       );
+                                       $result->setIndexedTagName( $a['revisions'], 'rev' );
+                                       ApiQueryBase::addTitleInfo( $a, $title );
+                                       $fit = $result->addValue( array( 'query', $this->getModuleName() ), $index, $a );
+                               } else {
+                                       $index = $pageMap[$row->ar_namespace][$row->ar_title];
+                                       $fit = $result->addValue(
+                                               array( 'query', $this->getModuleName(), $index, 'revisions' ),
+                                               null, $rev );
+                               }
+                               if ( !$fit ) {
+                                       if ( $mode == 'all' ) {
+                                               $this->setContinueEnumParameter( 'continue',
+                                                       "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
+                                               );
+                                       } else {
+                                               $this->setContinueEnumParameter( 'continue', "$row->ar_timestamp|$row->ar_id" );
+                                       }
+                                       break;
+                               }
+                       }
+               }
+
+               if ( $resultPageSet !== null ) {
+                       if ( $params['generatetitles'] ) {
+                               $resultPageSet->populateFromTitles( $generated );
+                       } else {
+                               $resultPageSet->populateFromRevisionIDs( $generated );
+                       }
+               } else {
+                       $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'page' );
+               }
+       }
+
+       public function getAllowedParams() {
+               $ret = parent::getAllowedParams() + array(
+                       'user' => array(
+                               ApiBase::PARAM_TYPE => 'user'
+                       ),
+                       'namespace' => array(
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_TYPE => 'namespace',
+                               ApiBase::PARAM_DFLT => null,
+                       ),
+                       'start' => array(
+                               ApiBase::PARAM_TYPE => 'timestamp',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'useronly' ) ),
+                       ),
+                       'end' => array(
+                               ApiBase::PARAM_TYPE => 'timestamp',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'useronly' ) ),
+                       ),
+                       'dir' => array(
+                               ApiBase::PARAM_TYPE => array(
+                                       'newer',
+                                       'older'
+                               ),
+                               ApiBase::PARAM_DFLT => 'older',
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+                       ),
+                       'from' => array(
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'nonuseronly' ) ),
+                       ),
+                       'to' => array(
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'nonuseronly' ) ),
+                       ),
+                       'prefix' => array(
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'nonuseronly' ) ),
+                       ),
+                       'excludeuser' => array(
+                               ApiBase::PARAM_TYPE => 'user',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'nonuseronly' ) ),
+                       ),
+                       'tag' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
+                       'generatetitles' => array(
+                               ApiBase::PARAM_DFLT => false
+                       ),
+               );
+
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
+                       $ret['user'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+                               'apihelp-query+alldeletedrevisions-param-miser-user-namespace',
+                       );
+                       $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+                               'apihelp-query+alldeletedrevisions-param-miser-user-namespace',
+                       );
+               }
+
+               return $ret;
+       }
+
+       protected function getExamplesMessages() {
+               return array(
+                       'action=query&list=alldeletedrevisions&adruser=Example&adrlimit=50'
+                               => 'apihelp-query+alldeletedrevisions-example-user',
+                       'action=query&list=alldeletedrevisions&adrdir=newer&adrlimit=50'
+                               => 'apihelp-query+alldeletedrevisions-example-ns-main',
+               );
+       }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:Alldeletedrevisions';
+       }
+}
index 9dc5f69..725b782 100644 (file)
@@ -300,7 +300,7 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               return array(
+               $ret = array(
                        'sort' => array(
                                ApiBase::PARAM_DFLT => 'name',
                                ApiBase::PARAM_TYPE => array(
@@ -321,7 +321,9 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                        ),
                        'from' => null,
                        'to' => null,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'start' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
                        ),
@@ -353,7 +355,9 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                                        'nobots'
                                )
                        ),
-                       'mime' => null,
+                       'mime' => array(
+                               ApiBase::PARAM_DFLT => null,
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -362,57 +366,26 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
                );
-       }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
+                       $ret['mime'][ApiBase::PARAM_HELP_MSG] = 'api-help-param-disabled-in-miser-mode';
+               }
 
-               return array(
-                       'sort' => 'Property to sort by',
-                       'dir' => 'The direction in which to list',
-                       'from' => "The image title to start enumerating from. Can only be used with {$p}sort=name",
-                       'to' => "The image title to stop enumerating at. Can only be used with {$p}sort=name",
-                       'continue' => 'When more results are available, use this to continue',
-                       'start' => "The timestamp to start enumerating from. Can only be used with {$p}sort=timestamp",
-                       'end' => "The timestamp to end enumerating. Can only be used with {$p}sort=timestamp",
-                       'prop' => ApiQueryImageInfo::getPropertyDescriptions( $this->propertyFilter ),
-                       'prefix' => "Search for all image titles that begin with this " .
-                               "value. Can only be used with {$p}sort=name",
-                       'minsize' => 'Limit to images with at least this many bytes',
-                       'maxsize' => 'Limit to images with at most this many bytes',
-                       'sha1' => "SHA1 hash of image. Overrides {$p}sha1base36",
-                       'sha1base36' => 'SHA1 hash of image in base 36 (used in MediaWiki)',
-                       'user' => "Only return files uploaded by this user. Can only be used " .
-                               "with {$p}sort=timestamp. Cannot be used together with {$p}filterbots",
-                       'filterbots' => "How to filter files uploaded by bots. Can only be " .
-                               "used with {$p}sort=timestamp. Cannot be used together with {$p}user",
-                       'mime' => 'What MIME type to search for. e.g. image/jpeg. Disabled in Miser Mode',
-                       'limit' => 'How many images in total to return',
-               );
+               return $ret;
        }
 
        private $propertyFilter = array( 'archivename', 'thumbmime', 'uploadwarning' );
 
-       public function getDescription() {
-               return 'Enumerate all images sequentially.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=allimages&aifrom=B' => array(
-                               'Simple Use',
-                               'Show a list of files starting at the letter "B"',
-                       ),
-                       'api.php?action=query&list=allimages&aiprop=user|timestamp|url&' .
-                               'aisort=timestamp&aidir=older' => array(
-                               'Simple Use',
-                               'Show a list of recently uploaded files similar to Special:NewFiles',
-                       ),
-                       'api.php?action=query&generator=allimages&gailimit=4&' .
-                               'gaifrom=T&prop=imageinfo' => array(
-                               'Using as Generator',
-                               'Show info about 4 files starting at the letter "T"',
-                       ),
+                       'action=query&list=allimages&aifrom=B'
+                               => 'apihelp-query+allimages-example-B',
+                       'action=query&list=allimages&aiprop=user|timestamp|url&' .
+                               'aisort=timestamp&aidir=older'
+                               => 'apihelp-query+allimages-example-recent',
+                       'action=query&generator=allimages&gailimit=4&' .
+                               'gaifrom=T&prop=imageinfo'
+                               => 'apihelp-query+allimages-example-generator',
                );
        }
 
index 903dee4..a70d019 100644 (file)
  */
 class ApiQueryAllLinks extends ApiQueryGeneratorBase {
 
-       private $table, $tablePrefix, $indexTag,
-               $description, $descriptionWhat, $descriptionTargets, $descriptionLinking;
+       private $table, $tablePrefix, $indexTag;
        private $fieldTitle = 'title';
        private $dfltNamespace = NS_MAIN;
        private $hasNamespace = true;
        private $useIndex = null;
-       private $props = array(), $propHelp = array();
+       private $props = array();
 
        public function __construct( ApiQuery $query, $moduleName ) {
                switch ( $moduleName ) {
@@ -47,10 +46,6 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                $this->tablePrefix = 'pl_';
                                $this->useIndex = 'pl_namespace';
                                $this->indexTag = 'l';
-                               $this->description = 'Enumerate all links that point to a given namespace';
-                               $this->descriptionWhat = 'link';
-                               $this->descriptionTargets = 'linked titles';
-                               $this->descriptionLinking = 'linking';
                                break;
                        case 'alltransclusions':
                                $prefix = 'at';
@@ -59,11 +54,6 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                $this->dfltNamespace = NS_TEMPLATE;
                                $this->useIndex = 'tl_namespace';
                                $this->indexTag = 't';
-                               $this->description =
-                                       'List all transclusions (pages embedded using {{x}}), including non-existing';
-                               $this->descriptionWhat = 'transclusion';
-                               $this->descriptionTargets = 'transcluded titles';
-                               $this->descriptionLinking = 'transcluding';
                                break;
                        case 'allfileusages':
                                $prefix = 'af';
@@ -73,28 +63,16 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                $this->dfltNamespace = NS_FILE;
                                $this->hasNamespace = false;
                                $this->indexTag = 'f';
-                               $this->description = 'List all file usages, including non-existing';
-                               $this->descriptionWhat = 'file';
-                               $this->descriptionTargets = 'file titles';
-                               $this->descriptionLinking = 'using';
                                break;
                        case 'allredirects':
                                $prefix = 'ar';
                                $this->table = 'redirect';
                                $this->tablePrefix = 'rd_';
                                $this->indexTag = 'r';
-                               $this->description = 'List all redirects to a namespace';
-                               $this->descriptionWhat = 'redirect';
-                               $this->descriptionTargets = 'target pages';
-                               $this->descriptionLinking = 'redirecting';
                                $this->props = array(
                                        'fragment' => 'rd_fragment',
                                        'interwiki' => 'rd_interwiki',
                                );
-                               $this->propHelp = array(
-                                       ' fragment - Adds the fragment from the redirect, if any',
-                                       ' interwiki - Adds the interwiki prefix from the redirect, if any',
-                               );
                                break;
                        default:
                                ApiBase::dieDebug( __METHOD__, 'Unknown module name' );
@@ -262,7 +240,9 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
 
        public function getAllowedParams() {
                $allowedParams = array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'from' => null,
                        'to' => null,
                        'prefix' => null,
@@ -300,59 +280,20 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                return $allowedParams;
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               $what = $this->descriptionWhat;
-               $targets = $this->descriptionTargets;
-               $linking = $this->descriptionLinking;
-               $paramDescription = array(
-                       'from' => "The title of the $what to start enumerating from",
-                       'to' => "The title of the $what to stop enumerating at",
-                       'prefix' => "Search for all $targets that begin with this value",
-                       'unique' => array(
-                               "Only show distinct $targets. Cannot be used with {$p}prop=" .
-                                       join( '|', array_keys( array( 'ids' => 1 ) + $this->props ) ) . '.',
-                               'When used as a generator, yields target pages instead of source pages.',
-                       ),
-                       'prop' => array(
-                               'What pieces of information to include',
-                               " ids      - Adds the pageid of the $linking page (Cannot be used with {$p}unique)",
-                               " title    - Adds the title of the $what",
-                       ),
-                       'namespace' => 'The namespace to enumerate',
-                       'limit' => 'How many total items to return',
-                       'continue' => 'When more results are available, use this to continue',
-                       'dir' => 'The direction in which to list',
-               );
-               foreach ( $this->propHelp as $help ) {
-                       $paramDescription['prop'][] = "$help (Cannot be used with {$p}unique)";
-               }
-               if ( !$this->hasNamespace ) {
-                       unset( $paramDescription['namespace'] );
-               }
-
-               return $paramDescription;
-       }
-
-       public function getDescription() {
-               return $this->description;
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                $p = $this->getModulePrefix();
                $name = $this->getModuleName();
-               $what = $this->descriptionWhat;
-               $targets = $this->descriptionTargets;
+               $path = $this->getModulePath();
 
                return array(
-                       "api.php?action=query&list={$name}&{$p}from=B&{$p}prop=ids|title"
-                               => "List $targets with page ids they are from, including missing ones. Start at B",
-                       "api.php?action=query&list={$name}&{$p}unique=&{$p}from=B"
-                               => "List unique $targets",
-                       "api.php?action=query&generator={$name}&g{$p}unique=&g{$p}from=B"
-                               => "Gets all $targets, marking the missing ones",
-                       "api.php?action=query&generator={$name}&g{$p}from=B"
-                               => "Gets pages containing the {$what}s",
+                       "action=query&list={$name}&{$p}from=B&{$p}prop=ids|title"
+                               => "apihelp-$path-example-B",
+                       "action=query&list={$name}&{$p}unique=&{$p}from=B"
+                               => "apihelp-$path-example-unique",
+                       "action=query&generator={$name}&g{$p}unique=&g{$p}from=B"
+                               => "apihelp-$path-example-unique-generator",
+                       "action=query&generator={$name}&g{$p}from=B"
+                               => "apihelp-$path-example-generator",
                );
        }
 
index a75a16f..98552ba 100644 (file)
@@ -235,35 +235,12 @@ class ApiQueryAllMessages extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
+       protected function getExamplesMessages() {
                return array(
-                       'messages' => 'Which messages to output. "*" (default) means all messages',
-                       'prop' => 'Which properties to get',
-                       'enableparser' => array( 'Set to enable parser, will preprocess the wikitext of message',
-                               'Will substitute magic words, handle templates etc.' ),
-                       'nocontent' => 'If set, do not include the content of the messages in the output.',
-                       'includelocal' => array( "Also include local messages, i.e. messages that don't exist in the software but do exist as a MediaWiki: page.",
-                               "This lists all MediaWiki: pages, so it will also list those that aren't 'really' messages such as Common.js",
-                       ),
-                       'title' => 'Page name to use as context when parsing message (for enableparser option)',
-                       'args' => 'Arguments to be substituted into message',
-                       'prefix' => 'Return messages with this prefix',
-                       'filter' => 'Return only messages with names that contain this string',
-                       'customised' => 'Return only messages in this customisation state',
-                       'lang' => 'Return messages in this language',
-                       'from' => 'Return messages starting at this message',
-                       'to' => 'Return messages ending at this message',
-               );
-       }
-
-       public function getDescription() {
-               return 'Return messages from this site.';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=query&meta=allmessages&amprefix=ipb-',
-                       'api.php?action=query&meta=allmessages&ammessages=august|mainpage&amlang=de',
+                       'action=query&meta=allmessages&amprefix=ipb-'
+                               => 'apihelp-query+allmessages-example-ipb',
+                       'action=query&meta=allmessages&ammessages=august|mainpage&amlang=de'
+                               => 'apihelp-query+allmessages-example-de',
                );
        }
 
index b7bd65a..a85c9c9 100644 (file)
@@ -227,7 +227,9 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
        public function getAllowedParams() {
                return array(
                        'from' => null,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'to' => null,
                        'prefix' => null,
                        'namespace' => array(
@@ -297,54 +299,15 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'from' => 'The page title to start enumerating from',
-                       'continue' => 'When more results are available, use this to continue',
-                       'to' => 'The page title to stop enumerating at',
-                       'prefix' => 'Search for all page titles that begin with this value',
-                       'namespace' => 'The namespace to enumerate',
-                       'filterredir' => 'Which pages to list',
-                       'dir' => 'The direction in which to list',
-                       'minsize' => 'Limit to pages with at least this many bytes',
-                       'maxsize' => 'Limit to pages with at most this many bytes',
-                       'prtype' => 'Limit to protected pages only',
-                       'prlevel' => "The protection level (must be used with {$p}prtype= parameter)",
-                       'prfiltercascade'
-                               => "Filter protections based on cascadingness (ignored when {$p}prtype isn't set)",
-                       'filterlanglinks' => array(
-                               'Filter based on whether a page has langlinks',
-                               'Note that this may not consider langlinks added by extensions.',
-                       ),
-                       'limit' => 'How many total pages to return.',
-                       'prexpiry' => array(
-                               'Which protection expiry to filter the page on',
-                               ' indefinite - Get only pages with indefinite protection expiry',
-                               ' definite - Get only pages with a definite (specific) protection expiry',
-                               ' all - Get pages with any protections expiry'
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               return 'Enumerate all pages sequentially in a given namespace.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=allpages&apfrom=B' => array(
-                               'Simple Use',
-                               'Show a list of pages starting at the letter "B"',
-                       ),
-                       'api.php?action=query&generator=allpages&gaplimit=4&gapfrom=T&prop=info' => array(
-                               'Using as Generator',
-                               'Show info about 4 pages starting at the letter "T"',
-                       ),
-                       'api.php?action=query&generator=allpages&gaplimit=2&' .
+                       'action=query&list=allpages&apfrom=B'
+                               => 'apihelp-query+allpages-example-B',
+                       'action=query&generator=allpages&gaplimit=4&gapfrom=T&prop=info'
+                               => 'apihelp-query+allpages-example-generator',
+                       'action=query&generator=allpages&gaplimit=2&' .
                                'gapfilterredir=nonredirects&gapfrom=Re&prop=revisions&rvprop=content'
-                               => array( 'Show content of first 2 non-redirect pages beginning at "Re"' )
+                               => 'apihelp-query+allpages-example-generator-revisions',
                );
        }
 
index dfef286..1c3f9fb 100644 (file)
@@ -50,7 +50,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
 
                if ( $params['activeusers'] ) {
                        // Update active user cache
-                       SpecialActiveUsers::mergeActiveUsers( 600, $activeUserDays );
+                       SpecialActiveUsers::mergeActiveUsers( 300, $activeUserDays );
                }
 
                $db = $this->getDB();
@@ -72,7 +72,6 @@ class ApiQueryAllUsers extends ApiQueryBase {
                $limit = $params['limit'];
 
                $this->addTables( 'user' );
-               $useIndex = true;
 
                $dir = ( $params['dir'] == 'descending' ? 'older' : 'newer' );
                $from = is_null( $params['from'] ) ? null : $this->getCanonicalUserName( $params['from'] );
@@ -82,6 +81,10 @@ class ApiQueryAllUsers extends ApiQueryBase {
                # despite the JOIN condition, so manually sort on the correct one.
                $userFieldToSort = $params['activeusers'] ? 'qcc_title' : 'user_name';
 
+               # Some of these subtable joins are going to give us duplicate rows, so
+               # calculate the maximum number of duplicates we might see.
+               $maxDuplicateRows = 1;
+
                $this->addWhereRange( $userFieldToSort, $dir, $from, $to );
 
                if ( !is_null( $params['prefix'] ) ) {
@@ -116,16 +119,17 @@ class ApiQueryAllUsers extends ApiQueryBase {
                }
 
                if ( !is_null( $params['group'] ) && count( $params['group'] ) ) {
-                       $useIndex = false;
-                       // Filter only users that belong to a given group
+                       // Filter only users that belong to a given group. This might
+                       // produce as many rows-per-user as there are groups being checked.
                        $this->addTables( 'user_groups', 'ug1' );
                        $this->addJoinConds( array( 'ug1' => array( 'INNER JOIN', array( 'ug1.ug_user=user_id',
                                'ug1.ug_group' => $params['group'] ) ) ) );
+                       $maxDuplicateRows *= count( $params['group'] );
                }
 
                if ( !is_null( $params['excludegroup'] ) && count( $params['excludegroup'] ) ) {
-                       $useIndex = false;
-                       // Filter only users don't belong to a given group
+                       // Filter only users don't belong to a given group. This can only
+                       // produce one row-per-user, because we only keep on "no match".
                        $this->addTables( 'user_groups', 'ug1' );
 
                        if ( count( $params['excludegroup'] ) == 1 ) {
@@ -149,22 +153,16 @@ class ApiQueryAllUsers extends ApiQueryBase {
                $this->showHiddenUsersAddBlockInfo( $fld_blockinfo );
 
                if ( $fld_groups || $fld_rights ) {
-                       // Show the groups the given users belong to
-                       // request more than needed to avoid not getting all rows that belong to one user
-                       $groupCount = count( User::getAllGroups() );
-                       $sqlLimit = $limit + $groupCount + 1;
-
-                       $this->addTables( 'user_groups', 'ug2' );
-                       $this->addJoinConds( array( 'ug2' => array( 'LEFT JOIN', 'ug2.ug_user=user_id' ) ) );
-                       $this->addFields( 'ug2.ug_group ug_group2' );
-               } else {
-                       $sqlLimit = $limit + 1;
+                       $this->addFields( array( 'groups' =>
+                               $db->buildGroupConcatField( '|', 'user_groups', 'ug_group', 'ug_user=user_id' )
+                       ) );
                }
 
                if ( $params['activeusers'] ) {
                        $activeUserSeconds = $activeUserDays * 86400;
 
-                       // Filter query to only include users in the active users cache
+                       // Filter query to only include users in the active users cache.
+                       // There shouldn't be any duplicate rows in querycachetwo here.
                        $this->addTables( 'querycachetwo' );
                        $this->addJoinConds( array( 'querycachetwo' => array(
                                'INNER JOIN', array(
@@ -190,6 +188,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        ) );
                }
 
+               $sqlLimit = $limit + $maxDuplicateRows;
                $this->addOption( 'LIMIT', $sqlLimit );
 
                $this->addFields( array(
@@ -199,143 +198,105 @@ class ApiQueryAllUsers extends ApiQueryBase {
                $this->addFieldsIf( 'user_editcount', $fld_editcount );
                $this->addFieldsIf( 'user_registration', $fld_registration );
 
-               if ( $useIndex ) {
-                       $this->addOption( 'USE INDEX', array( 'user' => 'user_name' ) );
-               }
-
                $res = $this->select( __METHOD__ );
-
                $count = 0;
-               $lastUserData = false;
+               $countDuplicates = 0;
                $lastUser = false;
                $result = $this->getResult();
-
-               // This loop keeps track of the last entry. For each new row, if the
-               // new row is for different user then the last, the last entry is added
-               // to results. Otherwise, the group of the new row is appended to the
-               // last entry. The setContinue... is more complex because of this, and
-               // takes into account the higher sql limit to make sure all rows that
-               // belong to the same user are received.
-
                foreach ( $res as $row ) {
                        $count++;
 
-                       if ( $lastUser !== $row->user_name ) {
-                               // Save the last pass's user data
-                               if ( is_array( $lastUserData ) ) {
-                                       if ( $params['activeusers'] && $lastUserData['recentactions'] === 0 ) {
-                                               // activeusers cache was out of date
-                                               $fit = true;
-                                       } else {
-                                               $fit = $result->addValue( array( 'query', $this->getModuleName() ),
-                                                       null, $lastUserData );
-                                       }
-
-                                       $lastUserData = null;
-
-                                       if ( !$fit ) {
-                                               $this->setContinueEnumParameter( 'from', $lastUserData['name'] );
-                                               break;
-                                       }
+                       if ( $lastUser === $row->user_name ) {
+                               // Duplicate row due to one of the needed subtable joins.
+                               // Ignore it, but count the number of them to sanely handle
+                               // miscalculation of $maxDuplicateRows.
+                               $countDuplicates++;
+                               if ( $countDuplicates == $maxDuplicateRows ) {
+                                       ApiBase::dieDebug( __METHOD__, 'Saw more duplicate rows than expected' );
                                }
+                               continue;
+                       }
 
-                               if ( $count > $limit ) {
-                                       // We've reached the one extra which shows that there are
-                                       // additional pages to be had. Stop here...
-                                       $this->setContinueEnumParameter( 'from', $row->user_name );
-                                       break;
-                               }
+                       $countDuplicates = 0;
+                       $lastUser = $row->user_name;
 
-                               // Record new user's data
-                               $lastUser = $row->user_name;
-                               $lastUserData = array(
-                                       'userid' => $row->user_id,
-                                       'name' => $lastUser,
-                               );
-                               if ( $fld_blockinfo && !is_null( $row->ipb_by_text ) ) {
-                                       $lastUserData['blockid'] = $row->ipb_id;
-                                       $lastUserData['blockedby'] = $row->ipb_by_text;
-                                       $lastUserData['blockedbyid'] = $row->ipb_by;
-                                       $lastUserData['blockreason'] = $row->ipb_reason;
-                                       $lastUserData['blockexpiry'] = $row->ipb_expiry;
-                               }
-                               if ( $row->ipb_deleted ) {
-                                       $lastUserData['hidden'] = '';
-                               }
-                               if ( $fld_editcount ) {
-                                       $lastUserData['editcount'] = intval( $row->user_editcount );
-                               }
-                               if ( $params['activeusers'] ) {
-                                       $lastUserData['recentactions'] = intval( $row->recentactions );
-                                       // @todo 'recenteditcount' is set for BC, remove in 1.25
-                                       $lastUserData['recenteditcount'] = $lastUserData['recentactions'];
-                               }
-                               if ( $fld_registration ) {
-                                       $lastUserData['registration'] = $row->user_registration ?
-                                               wfTimestamp( TS_ISO_8601, $row->user_registration ) : '';
-                               }
+                       if ( $count > $limit ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
+                               $this->setContinueEnumParameter( 'from', $row->user_name );
+                               break;
                        }
 
-                       if ( $sqlLimit == $count ) {
-                               // @todo BUG!  database contains group name that User::getAllGroups() does not return
-                               // Should handle this more gracefully
-                               ApiBase::dieDebug(
-                                       __METHOD__,
-                                       'MediaWiki configuration error: The database contains more ' .
-                                               'user groups than known to User::getAllGroups() function'
-                               );
+                       if ( $count == $sqlLimit ) {
+                               // Should never hit this (either the $countDuplicates check or
+                               // the $count > $limit check should hit first), but check it
+                               // anyway just in case.
+                               ApiBase::dieDebug( __METHOD__, 'Saw more duplicate rows than expected' );
                        }
 
-                       $lastUserObj = User::newFromId( $row->user_id );
-
-                       // Add user's group info
-                       if ( $fld_groups ) {
-                               if ( !isset( $lastUserData['groups'] ) ) {
-                                       if ( $lastUserObj ) {
-                                               $lastUserData['groups'] = $lastUserObj->getAutomaticGroups();
-                                       } else {
-                                               // This should not normally happen
-                                               $lastUserData['groups'] = array();
-                                       }
-                               }
-
-                               if ( !is_null( $row->ug_group2 ) ) {
-                                       $lastUserData['groups'][] = $row->ug_group2;
-                               }
-
-                               $result->setIndexedTagName( $lastUserData['groups'], 'g' );
+                       if ( $params['activeusers'] && $row->recentactions === 0 ) {
+                               // activeusers cache was out of date
+                               continue;
                        }
 
-                       if ( $fld_implicitgroups && !isset( $lastUserData['implicitgroups'] ) && $lastUserObj ) {
-                               $lastUserData['implicitgroups'] = $lastUserObj->getAutomaticGroups();
-                               $result->setIndexedTagName( $lastUserData['implicitgroups'], 'g' );
+                       $data = array(
+                               'userid' => $row->user_id,
+                               'name' => $row->user_name,
+                       );
+
+                       if ( $fld_blockinfo && !is_null( $row->ipb_by_text ) ) {
+                               $data['blockid'] = $row->ipb_id;
+                               $data['blockedby'] = $row->ipb_by_text;
+                               $data['blockedbyid'] = $row->ipb_by;
+                               $data['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $row->ipb_timestamp );
+                               $data['blockreason'] = $row->ipb_reason;
+                               $data['blockexpiry'] = $row->ipb_expiry;
+                       }
+                       if ( $row->ipb_deleted ) {
+                               $data['hidden'] = '';
+                       }
+                       if ( $fld_editcount ) {
+                               $data['editcount'] = intval( $row->user_editcount );
+                       }
+                       if ( $params['activeusers'] ) {
+                               $data['recentactions'] = intval( $row->recentactions );
+                               // @todo 'recenteditcount' is set for BC, remove in 1.25
+                               $data['recenteditcount'] = $data['recentactions'];
+                       }
+                       if ( $fld_registration ) {
+                               $data['registration'] = $row->user_registration ?
+                                       wfTimestamp( TS_ISO_8601, $row->user_registration ) : '';
                        }
-                       if ( $fld_rights ) {
-                               if ( !isset( $lastUserData['rights'] ) ) {
-                                       if ( $lastUserObj ) {
-                                               $lastUserData['rights'] = User::getGroupPermissions( $lastUserObj->getAutomaticGroups() );
-                                       } else {
-                                               // This should not normally happen
-                                               $lastUserData['rights'] = array();
-                                       }
+
+                       if ( $fld_implicitgroups || $fld_groups || $fld_rights ) {
+                               $user = User::newFromId( $row->user_id );
+                               $implicitGroups = User::newFromId( $row->user_id )->getAutomaticGroups();
+                               if ( isset( $row->groups ) && $row->groups !== '' ) {
+                                       $groups = array_merge( $implicitGroups, explode( '|', $row->groups ) );
+                               } else {
+                                       $groups = $implicitGroups;
+                               }
+
+                               if ( $fld_groups ) {
+                                       $data['groups'] = $groups;
+                                       $result->setIndexedTagName( $data['groups'], 'g' );
                                }
 
-                               if ( !is_null( $row->ug_group2 ) ) {
-                                       $lastUserData['rights'] = array_unique( array_merge( $lastUserData['rights'],
-                                               User::getGroupPermissions( array( $row->ug_group2 ) ) ) );
+                               if ( $fld_implicitgroups ) {
+                                       $data['implicitgroups'] = $implicitGroups;
+                                       $result->setIndexedTagName( $data['implicitgroups'], 'g' );
                                }
 
-                               $result->setIndexedTagName( $lastUserData['rights'], 'r' );
+                               if ( $fld_rights ) {
+                                       $data['rights'] = User::getGroupPermissions( $groups );
+                                       $result->setIndexedTagName( $data['rights'], 'r' );
+                               }
                        }
-               }
 
-               if ( is_array( $lastUserData ) &&
-                       !( $params['activeusers'] && $lastUserData['recentactions'] === 0 )
-               ) {
-                       $fit = $result->addValue( array( 'query', $this->getModuleName() ),
-                               null, $lastUserData );
+                       $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $data );
                        if ( !$fit ) {
-                               $this->setContinueEnumParameter( 'from', $lastUserData['name'] );
+                               $this->setContinueEnumParameter( 'from', $data['name'] );
+                               break;
                        }
                }
 
@@ -391,43 +352,20 @@ class ApiQueryAllUsers extends ApiQueryBase {
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
                        'witheditsonly' => false,
-                       'activeusers' => false,
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'from' => 'The user name to start enumerating from',
-                       'to' => 'The user name to stop enumerating at',
-                       'prefix' => 'Search for all users that begin with this value',
-                       'dir' => 'Direction to sort in',
-                       'group' => 'Limit users to given group name(s)',
-                       'excludegroup' => 'Exclude users in given group name(s)',
-                       'rights' => 'Limit users to given right(s) (does not include rights ' .
-                               'granted by implicit or auto-promoted groups like *, user, or autoconfirmed)',
-                       'prop' => array(
-                               'What pieces of information to include.',
-                               ' blockinfo      - Adds the information about a current block on the user',
-                               ' groups         - Lists groups that the user is in. This uses ' .
-                                       'more server resources and may return fewer results than the limit',
-                               ' implicitgroups - Lists all the groups the user is automatically in',
-                               ' rights         - Lists rights that the user has',
-                               ' editcount      - Adds the edit count of the user',
-                               ' registration   - Adds the timestamp of when the user registered if available (may be blank)',
+                       'activeusers' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+allusers-param-activeusers',
+                                       $this->getConfig()->get( 'ActiveUserDays' )
+                               ),
                        ),
-                       'limit' => 'How many total user names to return',
-                       'witheditsonly' => 'Only list users who have made edits',
-                       'activeusers' => "Only list users active in the last {$this->getConfig()->get( 'ActiveUserDays' )} days(s)"
                );
        }
 
-       public function getDescription() {
-               return 'Enumerate all registered users.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=allusers&aufrom=Y',
+                       'action=query&list=allusers&aufrom=Y'
+                               => 'apihelp-query+allusers-example-Y',
                );
        }
 
index c141246..5e17a5c 100644 (file)
@@ -39,8 +39,8 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
         */
        private $rootTitle;
 
-       private $params, $contID, $redirID, $redirect;
-       private $bl_ns, $bl_from, $bl_table, $bl_code, $bl_title, $bl_fields, $hasNS;
+       private $params, $cont, $redirect;
+       private $bl_ns, $bl_from, $bl_from_ns, $bl_table, $bl_code, $bl_title, $bl_fields, $hasNS;
 
        /**
         * Maps ns and title to pageid
@@ -84,6 +84,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                parent::__construct( $query, $moduleName, $code );
                $this->bl_ns = $prefix . '_namespace';
                $this->bl_from = $prefix . '_from';
+               $this->bl_from_ns = $prefix . '_from_namespace';
                $this->bl_table = $settings['linktbl'];
                $this->bl_code = $code;
                $this->helpUrl = $settings['helpurl'];
@@ -119,12 +120,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
         * @param ApiPageSet $resultPageSet
         * @return void
         */
-       private function prepareFirstQuery( $resultPageSet = null ) {
-               /* SELECT page_id, page_title, page_namespace, page_is_redirect
-                * FROM pagelinks, page WHERE pl_from=page_id
-                * AND pl_title='Foo' AND pl_namespace=0
-                * LIMIT 11 ORDER BY pl_from
-                */
+       private function runFirstQuery( $resultPageSet = null ) {
                $this->addTables( array( $this->bl_table, 'page' ) );
                $this->addWhere( "{$this->bl_from}=page_id" );
                if ( is_null( $resultPageSet ) ) {
@@ -132,18 +128,25 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                } else {
                        $this->addFields( $resultPageSet->getPageTableFields() );
                }
+               $this->addFields( array( 'page_is_redirect', 'from_ns' => 'page_namespace' ) );
 
-               $this->addFields( 'page_is_redirect' );
                $this->addWhereFld( $this->bl_title, $this->rootTitle->getDBkey() );
-
                if ( $this->hasNS ) {
                        $this->addWhereFld( $this->bl_ns, $this->rootTitle->getNamespace() );
                }
-               $this->addWhereFld( 'page_namespace', $this->params['namespace'] );
+               $this->addWhereFld( $this->bl_from_ns, $this->params['namespace'] );
 
-               if ( !is_null( $this->contID ) ) {
+               if ( count( $this->cont ) >= 2 ) {
                        $op = $this->params['dir'] == 'descending' ? '<' : '>';
-                       $this->addWhere( "{$this->bl_from}$op={$this->contID}" );
+                       if ( count( $this->params['namespace'] ) > 1 ) {
+                               $this->addWhere(
+                                       "{$this->bl_from_ns} $op {$this->cont[0]} OR " .
+                                       "({$this->bl_from_ns} = {$this->cont[0]} AND " .
+                                       "{$this->bl_from} $op= {$this->cont[1]})"
+                               );
+                       } else {
+                               $this->addWhere( "{$this->bl_from} $op= {$this->cont[1]}" );
+                       }
                }
 
                if ( $this->params['filterredir'] == 'redirects' ) {
@@ -156,20 +159,56 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
 
                $this->addOption( 'LIMIT', $this->params['limit'] + 1 );
                $sort = ( $this->params['dir'] == 'descending' ? ' DESC' : '' );
-               $this->addOption( 'ORDER BY', $this->bl_from . $sort );
+               $orderBy = array();
+               if ( count( $this->params['namespace'] ) > 1 ) {
+                       $orderBy[] = $this->bl_from_ns . $sort;
+               }
+               $orderBy[] = $this->bl_from . $sort;
+               $this->addOption( 'ORDER BY', $orderBy );
                $this->addOption( 'STRAIGHT_JOIN' );
+
+               $res = $this->select( __METHOD__ );
+               $count = 0;
+               foreach ( $res as $row ) {
+                       if ( ++$count > $this->params['limit'] ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
+                               // Continue string may be overridden at a later step
+                               $this->continueStr = "{$row->from_ns}|{$row->page_id}";
+                               break;
+                       }
+
+                       // Fill in continuation fields for later steps
+                       if ( count( $this->cont ) < 2 ) {
+                               $this->cont[] = $row->from_ns;
+                               $this->cont[] = $row->page_id;
+                       }
+
+                       $this->pageMap[$row->page_namespace][$row->page_title] = $row->page_id;
+                       $t = Title::makeTitle( $row->page_namespace, $row->page_title );
+                       if ( $row->page_is_redirect ) {
+                               $this->redirTitles[] = $t;
+                       }
+
+                       if ( is_null( $resultPageSet ) ) {
+                               $a = array( 'pageid' => intval( $row->page_id ) );
+                               ApiQueryBase::addTitleInfo( $a, $t );
+                               if ( $row->page_is_redirect ) {
+                                       $a['redirect'] = '';
+                               }
+                               // Put all the results in an array first
+                               $this->resultArr[$a['pageid']] = $a;
+                       } else {
+                               $resultPageSet->processDbRow( $row );
+                       }
+               }
        }
 
        /**
         * @param ApiPageSet $resultPageSet
         * @return void
         */
-       private function prepareSecondQuery( $resultPageSet = null ) {
-               /* SELECT page_id, page_title, page_namespace, page_is_redirect, pl_title, pl_namespace
-                  FROM pagelinks, page WHERE pl_from=page_id
-                  AND (pl_title='Foo' AND pl_namespace=0) OR (pl_title='Bar' AND pl_namespace=1)
-                  ORDER BY pl_namespace, pl_title, pl_from LIMIT 11
-                */
+       private function runSecondQuery( $resultPageSet = null ) {
                $db = $this->getDB();
                $this->addTables( array( 'page', $this->bl_table ) );
                $this->addWhere( "{$this->bl_from}=page_id" );
@@ -180,7 +219,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                        $this->addFields( $resultPageSet->getPageTableFields() );
                }
 
-               $this->addFields( $this->bl_title );
+               $this->addFields( array( $this->bl_title, 'from_ns' => 'page_namespace' ) );
                if ( $this->hasNS ) {
                        $this->addFields( $this->bl_ns );
                }
@@ -195,30 +234,33 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                        $redirDBkey = $t->getDBkey();
                        $titleWhere[] = "{$this->bl_title} = " . $db->addQuotes( $redirDBkey ) .
                                ( $this->hasNS ? " AND {$this->bl_ns} = {$redirNs}" : '' );
-                       $allRedirNs[] = $redirNs;
-                       $allRedirDBkey[] = $redirDBkey;
+                       $allRedirNs[$redirNs] = true;
+                       $allRedirDBkey[$redirDBkey] = true;
                }
                $this->addWhere( $db->makeList( $titleWhere, LIST_OR ) );
                $this->addWhereFld( 'page_namespace', $this->params['namespace'] );
 
-               if ( !is_null( $this->redirID ) ) {
+               if ( count( $this->cont ) >= 6 ) {
                        $op = $this->params['dir'] == 'descending' ? '<' : '>';
-                       /** @var $first Title */
-                       $first = $this->redirTitles[0];
-                       $title = $db->addQuotes( $first->getDBkey() );
-                       $ns = $first->getNamespace();
-                       $from = $this->redirID;
-                       if ( $this->hasNS ) {
-                               $this->addWhere( "{$this->bl_ns} $op $ns OR " .
-                                       "({$this->bl_ns} = $ns AND " .
-                                       "({$this->bl_title} $op $title OR " .
-                                       "({$this->bl_title} = $title AND " .
-                                       "{$this->bl_from} $op= $from)))" );
-                       } else {
-                               $this->addWhere( "{$this->bl_title} $op $title OR " .
-                                       "({$this->bl_title} = $title AND " .
-                                       "{$this->bl_from} $op= $from)" );
+
+                       $where = "{$this->bl_from} $op= {$this->cont[5]}";
+                       // Don't bother with namespace, title, or from_namespace if it's
+                       // otherwise constant in the where clause.
+                       if ( count( $this->params['namespace'] ) > 1 ) {
+                               $where = "{$this->bl_from_ns} $op {$this->cont[4]} OR " .
+                                       "({$this->bl_from_ns} = {$this->cont[4]} AND ($where))";
+                       }
+                       if ( count( $allRedirDBkey ) > 1 ) {
+                               $title = $db->addQuotes( $this->cont[3] );
+                               $where = "{$this->bl_title} $op $title OR " .
+                                       "({$this->bl_title} = $title AND ($where))";
+                       }
+                       if ( $this->hasNS && count( $allRedirNs ) > 1 ) {
+                               $where = "{$this->bl_ns} $op {$this->cont[2]} OR " .
+                                       "({$this->bl_ns} = {$this->cont[2]} AND ($where))";
                        }
+
+                       $this->addWhere( $where );
                }
                if ( $this->params['filterredir'] == 'redirects' ) {
                        $this->addWhereFld( 'page_is_redirect', 1 );
@@ -229,16 +271,57 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                $this->addOption( 'LIMIT', $this->params['limit'] + 1 );
                $orderBy = array();
                $sort = ( $this->params['dir'] == 'descending' ? ' DESC' : '' );
-               // Don't order by namespace/title if it's constant in the WHERE clause
-               if ( $this->hasNS && count( array_unique( $allRedirNs ) ) != 1 ) {
+               // Don't order by namespace/title/from_namespace if it's constant in the WHERE clause
+               if ( $this->hasNS && count( $allRedirNs ) > 1 ) {
                        $orderBy[] = $this->bl_ns . $sort;
                }
-               if ( count( array_unique( $allRedirDBkey ) ) != 1 ) {
+               if ( count( $allRedirDBkey ) > 1 ) {
                        $orderBy[] = $this->bl_title . $sort;
                }
+               if ( count( $this->params['namespace'] ) > 1 ) {
+                       $orderBy[] = $this->bl_from_ns . $sort;
+               }
                $orderBy[] = $this->bl_from . $sort;
                $this->addOption( 'ORDER BY', $orderBy );
                $this->addOption( 'USE INDEX', array( 'page' => 'PRIMARY' ) );
+
+               $res = $this->select( __METHOD__ );
+               $count = 0;
+               foreach ( $res as $row ) {
+                       $ns = $this->hasNS ? $row->{$this->bl_ns} : NS_FILE;
+
+                       if ( ++$count > $this->params['limit'] ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
+                               // Note we must keep the parameters for the first query constant
+                               // This may be overridden at a later step
+                               $title = $row->{$this->bl_title};
+                               $this->continueStr = join( '|', array_slice( $this->cont, 0, 2 ) ) .
+                                       "|$ns|$title|{$row->from_ns}|{$row->page_id}";
+                               break;
+                       }
+
+                       // Fill in continuation fields for later steps
+                       if ( count( $this->cont ) < 6 ) {
+                               $this->cont[] = $ns;
+                               $this->cont[] = $row->{$this->bl_title};
+                               $this->cont[] = $row->from_ns;
+                               $this->cont[] = $row->page_id;
+                       }
+
+                       if ( is_null( $resultPageSet ) ) {
+                               $a['pageid'] = intval( $row->page_id );
+                               ApiQueryBase::addTitleInfo( $a, Title::makeTitle( $row->page_namespace, $row->page_title ) );
+                               if ( $row->page_is_redirect ) {
+                                       $a['redirect'] = '';
+                               }
+                               $parentID = $this->pageMap[$ns][$row->{$this->bl_title}];
+                               // Put all the results in an array first
+                               $this->resultArr[$parentID]['redirlinks'][$row->page_id] = $a;
+                       } else {
+                               $resultPageSet->processDbRow( $row );
+                       }
+               }
        }
 
        /**
@@ -261,96 +344,153 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                        $this->validateLimit( 'limit', $this->params['limit'], 1, $userMax, $botMax );
                }
 
-               $this->processContinue();
-               $this->prepareFirstQuery( $resultPageSet );
+               $this->rootTitle = $this->getTitleOrPageId( $this->params )->getTitle();
+
+               // only image titles are allowed for the root in imageinfo mode
+               if ( !$this->hasNS && $this->rootTitle->getNamespace() !== NS_FILE ) {
+                       $this->dieUsage(
+                               "The title for {$this->getModuleName()} query must be a file",
+                               'bad_image_title'
+                       );
+               }
 
-               $res = $this->select( __METHOD__ . '::firstQuery' );
+               // Parse and validate continuation parameter
+               $this->cont = array();
+               if ( $this->params['continue'] !== null ) {
+                       $db = $this->getDB();
+                       $cont = explode( '|', $this->params['continue'] );
 
-               $count = 0;
+                       switch ( count( $cont ) ) {
+                               case 8:
+                                       // redirect page ID for result adding
+                                       $this->cont[7] = (int)$cont[7];
+                                       $this->dieContinueUsageIf( $cont[7] !== (string)$this->cont[7] );
 
-               foreach ( $res as $row ) {
-                       if ( ++$count > $this->params['limit'] ) {
-                               // We've reached the one extra which shows that there are
-                               // additional pages to be had. Stop here...
-                               // Continue string preserved in case the redirect query doesn't pass the limit
-                               $this->continueStr = $this->getContinueStr( $row->page_id );
-                               break;
-                       }
+                                       /* Fall through */
 
-                       if ( is_null( $resultPageSet ) ) {
-                               $this->extractRowInfo( $row );
-                       } else {
-                               $this->pageMap[$row->page_namespace][$row->page_title] = $row->page_id;
-                               if ( $row->page_is_redirect ) {
-                                       $this->redirTitles[] = Title::makeTitle( $row->page_namespace, $row->page_title );
-                               }
+                               case 7:
+                                       // top-level page ID for result adding
+                                       $this->cont[6] = (int)$cont[6];
+                                       $this->dieContinueUsageIf( $cont[6] !== (string)$this->cont[6] );
 
-                               $resultPageSet->processDbRow( $row );
+                                       /* Fall through */
+
+                               case 6:
+                                       // ns for 2nd query (even for imageusage)
+                                       $this->cont[2] = (int)$cont[2];
+                                       $this->dieContinueUsageIf( $cont[2] !== (string)$this->cont[2] );
+
+                                       // title for 2nd query
+                                       $this->cont[3] = $cont[3];
+
+                                       // from_ns for 2nd query
+                                       $this->cont[4] = (int)$cont[4];
+                                       $this->dieContinueUsageIf( $cont[4] !== (string)$this->cont[4] );
+
+                                       // from_id for 1st query
+                                       $this->cont[5] = (int)$cont[5];
+                                       $this->dieContinueUsageIf( $cont[5] !== (string)$this->cont[5] );
+
+                                       /* Fall through */
+
+                               case 2:
+                                       // from_ns for 1st query
+                                       $this->cont[0] = (int)$cont[0];
+                                       $this->dieContinueUsageIf( $cont[0] !== (string)$this->cont[0] );
+
+                                       // from_id for 1st query
+                                       $this->cont[1] = (int)$cont[1];
+                                       $this->dieContinueUsageIf( $cont[1] !== (string)$this->cont[1] );
+
+                                       break;
+
+                               default:
+                                       $this->dieContinueUsageIf( true );
                        }
+
+                       ksort( $this->cont );
                }
 
+               $this->runFirstQuery( $resultPageSet );
                if ( $this->redirect && count( $this->redirTitles ) ) {
                        $this->resetQueryParams();
-                       $this->prepareSecondQuery( $resultPageSet );
-                       $res = $this->select( __METHOD__ . '::secondQuery' );
-                       $count = 0;
-                       foreach ( $res as $row ) {
-                               if ( ++$count > $this->params['limit'] ) {
-                                       // We've reached the one extra which shows that there are
-                                       // additional pages to be had. Stop here...
-                                       // We need to keep the parent page of this redir in
-                                       if ( $this->hasNS ) {
-                                               $parentID = $this->pageMap[$row->{$this->bl_ns}][$row->{$this->bl_title}];
-                                       } else {
-                                               $parentID = $this->pageMap[NS_FILE][$row->{$this->bl_title}];
-                                       }
-                                       $this->continueStr = $this->getContinueRedirStr( $parentID, $row->page_id );
-                                       break;
-                               }
-
-                               if ( is_null( $resultPageSet ) ) {
-                                       $this->extractRedirRowInfo( $row );
-                               } else {
-                                       $resultPageSet->processDbRow( $row );
-                               }
-                       }
+                       $this->runSecondQuery( $resultPageSet );
                }
+
+               // Fill in any missing fields in case it's needed below
+               $this->cont += array( 0, 0, 0, '', 0, 0, 0 );
+
                if ( is_null( $resultPageSet ) ) {
                        // Try to add the result data in one go and pray that it fits
-                       $fit = $result->addValue( 'query', $this->getModuleName(), array_values( $this->resultArr ) );
+                       $code = $this->bl_code;
+                       $data = array_map( function ( $arr ) use ( $result, $code ) {
+                               if ( isset( $arr['redirlinks'] ) ) {
+                                       $arr['redirlinks'] = array_values( $arr['redirlinks'] );
+                                       $result->setIndexedTagName( $arr['redirlinks'], $code );
+                               }
+                               return $arr;
+                       }, array_values( $this->resultArr ) );
+                       $fit = $result->addValue( 'query', $this->getModuleName(), $data );
                        if ( !$fit ) {
                                // It didn't fit. Add elements one by one until the
                                // result is full.
+                               ksort( $this->resultArr );
+                               if ( count( $this->cont ) >= 7 ) {
+                                       $startAt = $this->cont[6];
+                               } else {
+                                       reset( $this->resultArr );
+                                       $startAt = key( $this->resultArr );
+                               }
+                               $idx = 0;
                                foreach ( $this->resultArr as $pageID => $arr ) {
+                                       if ( $pageID < $startAt ) {
+                                               continue;
+                                       }
+
                                        // Add the basic entry without redirlinks first
                                        $fit = $result->addValue(
                                                array( 'query', $this->getModuleName() ),
-                                               null, array_diff_key( $arr, array( 'redirlinks' => '' ) ) );
+                                               $idx, array_diff_key( $arr, array( 'redirlinks' => '' ) ) );
                                        if ( !$fit ) {
-                                               $this->continueStr = $this->getContinueStr( $pageID );
+                                               $this->continueStr = join( '|', array_slice( $this->cont, 0, 6 ) ) .
+                                                       "|$pageID";
                                                break;
                                        }
 
                                        $hasRedirs = false;
-                                       $redirLinks = isset( $arr['redirlinks'] ) ? $arr['redirlinks'] : array();
-                                       foreach ( (array)$redirLinks as $key => $redir ) {
+                                       $redirLinks = isset( $arr['redirlinks'] ) ? (array)$arr['redirlinks'] : array();
+                                       ksort( $redirLinks );
+                                       if ( count( $this->cont ) >= 8 && $pageID == $startAt ) {
+                                               $redirStartAt = $this->cont[7];
+                                       } else {
+                                               reset( $redirLinks );
+                                               $redirStartAt = key( $redirLinks );
+                                       }
+                                       foreach ( $redirLinks as $key => $redir ) {
+                                               if ( $key < $redirStartAt ) {
+                                                       continue;
+                                               }
+
                                                $fit = $result->addValue(
-                                                       array( 'query', $this->getModuleName(), $pageID, 'redirlinks' ),
-                                                       $key, $redir );
+                                                       array( 'query', $this->getModuleName(), $idx, 'redirlinks' ),
+                                                       null, $redir );
                                                if ( !$fit ) {
-                                                       $this->continueStr = $this->getContinueRedirStr( $pageID, $redir['pageid'] );
+                                                       $this->continueStr = join( '|', array_slice( $this->cont, 0, 6 ) ) .
+                                                               "|$pageID|$key";
                                                        break;
                                                }
                                                $hasRedirs = true;
                                        }
                                        if ( $hasRedirs ) {
                                                $result->setIndexedTagName_internal(
-                                                       array( 'query', $this->getModuleName(), $pageID, 'redirlinks' ),
+                                                       array( 'query', $this->getModuleName(), $idx, 'redirlinks' ),
                                                        $this->bl_code );
                                        }
                                        if ( !$fit ) {
                                                break;
                                        }
+
+                                       $idx++;
                                }
                        }
 
@@ -364,91 +504,6 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                }
        }
 
-       private function extractRowInfo( $row ) {
-               $this->pageMap[$row->page_namespace][$row->page_title] = $row->page_id;
-               $t = Title::makeTitle( $row->page_namespace, $row->page_title );
-               $a = array( 'pageid' => intval( $row->page_id ) );
-               ApiQueryBase::addTitleInfo( $a, $t );
-               if ( $row->page_is_redirect ) {
-                       $a['redirect'] = '';
-                       $this->redirTitles[] = $t;
-               }
-               // Put all the results in an array first
-               $this->resultArr[$a['pageid']] = $a;
-       }
-
-       private function extractRedirRowInfo( $row ) {
-               $a['pageid'] = intval( $row->page_id );
-               ApiQueryBase::addTitleInfo( $a, Title::makeTitle( $row->page_namespace, $row->page_title ) );
-               if ( $row->page_is_redirect ) {
-                       $a['redirect'] = '';
-               }
-               $ns = $this->hasNS ? $row->{$this->bl_ns} : NS_FILE;
-               $parentID = $this->pageMap[$ns][$row->{$this->bl_title}];
-               // Put all the results in an array first
-               $this->resultArr[$parentID]['redirlinks'][] = $a;
-               $this->getResult()->setIndexedTagName(
-                       $this->resultArr[$parentID]['redirlinks'],
-                       $this->bl_code
-               );
-       }
-
-       protected function processContinue() {
-               if ( !is_null( $this->params['continue'] ) ) {
-                       $this->parseContinueParam();
-               } else {
-                       $this->rootTitle = $this->getTitleOrPageId( $this->params )->getTitle();
-               }
-
-               // only image titles are allowed for the root in imageinfo mode
-               if ( !$this->hasNS && $this->rootTitle->getNamespace() !== NS_FILE ) {
-                       $this->dieUsage(
-                               "The title for {$this->getModuleName()} query must be an image",
-                               'bad_image_title'
-                       );
-               }
-       }
-
-       protected function parseContinueParam() {
-               $continueList = explode( '|', $this->params['continue'] );
-               // expected format:
-               // ns | key | id1 [| id2]
-               // ns+key: root title
-               // id1: first-level page ID to continue from
-               // id2: second-level page ID to continue from
-
-               // null stuff out now so we know what's set and what isn't
-               $this->rootTitle = $this->contID = $this->redirID = null;
-               $rootNs = intval( $continueList[0] );
-               $this->dieContinueUsageIf( $rootNs === 0 && $continueList[0] !== '0' );
-
-               $this->rootTitle = Title::makeTitleSafe( $rootNs, $continueList[1] );
-               $this->dieContinueUsageIf( !$this->rootTitle );
-
-               $contID = intval( $continueList[2] );
-               $this->dieContinueUsageIf( $contID === 0 && $continueList[2] !== '0' );
-
-               $this->contID = $contID;
-               $id2 = isset( $continueList[3] ) ? $continueList[3] : null;
-               $redirID = intval( $id2 );
-
-               if ( $redirID === 0 && $id2 !== '0' ) {
-                       // This one isn't required
-                       return;
-               }
-               $this->redirID = $redirID;
-       }
-
-       protected function getContinueStr( $lastPageID ) {
-               return $this->rootTitle->getNamespace() .
-               '|' . $this->rootTitle->getDBkey() .
-               '|' . $lastPageID;
-       }
-
-       protected function getContinueRedirStr( $lastPageID, $lastRedirID ) {
-               return $this->getContinueStr( $lastPageID ) . '|' . $lastRedirID;
-       }
-
        public function getAllowedParams() {
                $retval = array(
                        'title' => array(
@@ -457,7 +512,9 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                        'pageid' => array(
                                ApiBase::PARAM_TYPE => 'integer',
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => 'namespace'
@@ -493,59 +550,25 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                return $retval;
        }
 
-       public function getParamDescription() {
-               $retval = array(
-                       'title' => "Title to search. Cannot be used together with {$this->bl_code}pageid",
-                       'pageid' => "Pageid to search. Cannot be used together with {$this->bl_code}title",
-                       'continue' => 'When more results are available, use this to continue',
-                       'namespace' => 'The namespace to enumerate',
-                       'dir' => 'The direction in which to list',
-               );
-               if ( $this->getModuleName() != 'embeddedin' ) {
-                       return array_merge( $retval, array(
-                               'redirect' => 'If linking page is a redirect, find all pages ' .
-                                       'that link to that redirect as well. Maximum limit is halved.',
-                               'filterredir' => 'How to filter for redirects. If set to ' .
-                                       "nonredirects when {$this->bl_code}redirect is enabled, " .
-                                       'this is only applied to the second level',
-                               'limit' => 'How many total pages to return. If ' .
-                                       "{$this->bl_code}redirect is enabled, limit applies to each " .
-                                       'level separately (which means you may get up to 2 * limit results).'
-                       ) );
-               }
-
-               return array_merge( $retval, array(
-                       'filterredir' => 'How to filter for redirects',
-                       'limit' => 'How many total pages to return'
-               ) );
-       }
-
-       public function getDescription() {
-               switch ( $this->getModuleName() ) {
-                       case 'backlinks':
-                               return 'Find all pages that link to the given page.';
-                       case 'embeddedin':
-                               return 'Find all pages that embed (transclude) the given title.';
-                       case 'imageusage':
-                               return 'Find all pages that use the given image title.';
-                       default:
-                               ApiBase::dieDebug( __METHOD__, 'Unknown module name.' );
-               }
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                static $examples = array(
                        'backlinks' => array(
-                               'api.php?action=query&list=backlinks&bltitle=Main%20Page',
-                               'api.php?action=query&generator=backlinks&gbltitle=Main%20Page&prop=info'
+                               'action=query&list=backlinks&bltitle=Main%20Page'
+                                       => 'apihelp-query+backlinks-example-simple',
+                               'action=query&generator=backlinks&gbltitle=Main%20Page&prop=info'
+                                       => 'apihelp-query+backlinks-example-generator',
                        ),
                        'embeddedin' => array(
-                               'api.php?action=query&list=embeddedin&eititle=Template:Stub',
-                               'api.php?action=query&generator=embeddedin&geititle=Template:Stub&prop=info'
+                               'action=query&list=embeddedin&eititle=Template:Stub'
+                                       => 'apihelp-query+embeddedin-example-simple',
+                               'action=query&generator=embeddedin&geititle=Template:Stub&prop=info'
+                                       => 'apihelp-query+embeddedin-example-generator',
                        ),
                        'imageusage' => array(
-                               'api.php?action=query&list=imageusage&iutitle=File:Albert%20Einstein%20Head.jpg',
-                               'api.php?action=query&generator=imageusage&giutitle=File:Albert%20Einstein%20Head.jpg&prop=info'
+                               'action=query&list=imageusage&iutitle=File:Albert%20Einstein%20Head.jpg'
+                                       => 'apihelp-query+imageusage-example-simple',
+                               'action=query&generator=imageusage&giutitle=File:Albert%20Einstein%20Head.jpg&prop=info'
+                                       => 'apihelp-query+imageusage-example-generator',
                        )
                );
 
diff --git a/includes/api/ApiQueryBacklinksprop.php b/includes/api/ApiQueryBacklinksprop.php
new file mode 100644 (file)
index 0000000..b4752ae
--- /dev/null
@@ -0,0 +1,412 @@
+<?php
+/**
+ * API module to handle links table back-queries
+ *
+ * Created on Aug 19, 2014
+ *
+ * Copyright © 2014 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.24
+ */
+
+/**
+ * This implements prop=redirects, prop=linkshere, prop=catmembers,
+ * prop=transcludedin, and prop=fileusage
+ *
+ * @ingroup API
+ * @since 1.24
+ */
+class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
+
+       // Data for the various modules implemented by this class
+       private static $settings = array(
+               'redirects' => array(
+                       'code' => 'rd',
+                       'prefix' => 'rd',
+                       'linktable' => 'redirect',
+                       'props' => array(
+                               'fragment',
+                       ),
+                       'showredirects' => false,
+                       'show' => array(
+                               'fragment',
+                               '!fragment',
+                       ),
+               ),
+               'linkshere' => array(
+                       'code' => 'lh',
+                       'prefix' => 'pl',
+                       'linktable' => 'pagelinks',
+                       'from_namespace' => true,
+                       'showredirects' => true,
+               ),
+               'transcludedin' => array(
+                       'code' => 'ti',
+                       'prefix' => 'tl',
+                       'linktable' => 'templatelinks',
+                       'from_namespace' => true,
+                       'showredirects' => true,
+               ),
+               'fileusage' => array(
+                       'code' => 'fu',
+                       'prefix' => 'il',
+                       'linktable' => 'imagelinks',
+                       'from_namespace' => true,
+                       'to_namespace' => NS_FILE,
+                       'exampletitle' => 'File:Example.jpg',
+                       'showredirects' => true,
+               ),
+       );
+
+       public function __construct( ApiQuery $query, $moduleName ) {
+               parent::__construct( $query, $moduleName, self::$settings[$moduleName]['code'] );
+       }
+
+       public function execute() {
+               $this->run();
+       }
+
+       public function executeGenerator( $resultPageSet ) {
+               $this->run( $resultPageSet );
+       }
+
+       /**
+        * @param ApiPageSet $resultPageSet
+        */
+       private function run( ApiPageSet $resultPageSet = null ) {
+               $settings = self::$settings[$this->getModuleName()];
+
+               $db = $this->getDB();
+               $params = $this->extractRequestParams();
+               $prop = array_flip( $params['prop'] );
+               $emptyString = $db->addQuotes( '' );
+
+               $pageSet = $this->getPageSet();
+               $titles = $pageSet->getGoodAndMissingTitles();
+               $map = $pageSet->getGoodAndMissingTitlesByNamespace();
+
+               // Determine our fields to query on
+               $p = $settings['prefix'];
+               $hasNS = !isset( $settings['to_namespace'] );
+               if ( $hasNS ) {
+                       $bl_namespace = "{$p}_namespace";
+                       $bl_title = "{$p}_title";
+               } else {
+                       $bl_namespace = $settings['to_namespace'];
+                       $bl_title = "{$p}_to";
+
+                       $titles = array_filter( $titles, function ( $t ) use ( $bl_namespace ) {
+                               return $t->getNamespace() === $bl_namespace;
+                       } );
+                       $map = array_intersect_key( $map, array( $bl_namespace => true ) );
+               }
+               $bl_from = "{$p}_from";
+
+               if ( !$titles ) {
+                       return; // nothing to do
+               }
+
+               // Figure out what we're sorting by, and add associated WHERE clauses.
+               // MySQL's query planner screws up if we include a field in ORDER BY
+               // when it's constant in WHERE, so we have to test that for each field.
+               $sortby = array();
+               if ( $hasNS && count( $map ) > 1 ) {
+                       $sortby[$bl_namespace] = 'ns';
+               }
+               $theTitle = null;
+               foreach ( $map as $nsTitles ) {
+                       reset( $nsTitles );
+                       $key = key( $nsTitles );
+                       if ( $theTitle === null ) {
+                               $theTitle = $key;
+                       }
+                       if ( count( $nsTitles ) > 1 || $key !== $theTitle ) {
+                               $sortby[$bl_title] = 'title';
+                               break;
+                       }
+               }
+               $miser_ns = null;
+               if ( $params['namespace'] !== null ) {
+                       if ( empty( $settings['from_namespace'] ) && $this->getConfig()->get( 'MiserMode' ) ) {
+                               $miser_ns = $params['namespace'];
+                       } else {
+                               $this->addWhereFld( "{$p}_from_namespace", $params['namespace'] );
+                               if ( !empty( $settings['from_namespace'] ) && count( $params['namespace'] ) > 1 ) {
+                                       $sortby["{$p}_from_namespace"] = 'int';
+                               }
+                       }
+               }
+               $sortby[$bl_from] = 'int';
+
+               // Now use the $sortby to figure out the continuation
+               if ( !is_null( $params['continue'] ) ) {
+                       $cont = explode( '|', $params['continue'] );
+                       $this->dieContinueUsageIf( count( $cont ) != count( $sortby ) );
+                       $where = '';
+                       $i = count( $sortby ) - 1;
+                       $cont_ns = 0;
+                       $cont_title = '';
+                       foreach ( array_reverse( $sortby, true ) as $field => $type ) {
+                               $v = $cont[$i];
+                               switch ( $type ) {
+                                       case 'ns':
+                                               $cont_ns = (int)$v;
+                                               /* fall through */
+                                       case 'int':
+                                               $v = (int)$v;
+                                               $this->dieContinueUsageIf( $v != $cont[$i] );
+                                               break;
+
+                                       case 'title':
+                                               $cont_title = $v;
+                                               /* fall through */
+                                       default:
+                                               $v = $db->addQuotes( $v );
+                                               break;
+                               }
+
+                               if ( $where === '' ) {
+                                       $where = "$field >= $v";
+                               } else {
+                                       $where = "$field > $v OR ($field = $v AND ($where))";
+                               }
+
+                               $i--;
+                       }
+                       $this->addWhere( $where );
+               }
+
+               // Populate the rest of the query
+               $this->addTables( array( $settings['linktable'], 'page' ) );
+               $this->addWhere( "$bl_from = page_id" );
+
+               if ( $this->getModuleName() === 'redirects' ) {
+                       $this->addWhere( "rd_interwiki = $emptyString OR rd_interwiki IS NULL" );
+               }
+
+               $this->addFields( array_keys( $sortby ) );
+               $this->addFields( array( 'bl_namespace' => $bl_namespace, 'bl_title' => $bl_title ) );
+               if ( is_null( $resultPageSet ) ) {
+                       $fld_pageid = isset( $prop['pageid'] );
+                       $fld_title = isset( $prop['title'] );
+                       $fld_redirect = isset( $prop['redirect'] );
+
+                       $this->addFieldsIf( 'page_id', $fld_pageid );
+                       $this->addFieldsIf( array( 'page_title', 'page_namespace' ), $fld_title );
+                       $this->addFieldsIf( 'page_is_redirect', $fld_redirect );
+
+                       // prop=redirects
+                       $fld_fragment = isset( $prop['fragment'] );
+                       $this->addFieldsIf( 'rd_fragment', $fld_fragment );
+               } else {
+                       $this->addFields( $resultPageSet->getPageTableFields() );
+               }
+
+               $this->addFieldsIf( 'page_namespace', $miser_ns !== null );
+
+               if ( $hasNS ) {
+                       $lb = new LinkBatch( $titles );
+                       $this->addWhere( $lb->constructSet( $p, $db ) );
+               } else {
+                       $where = array();
+                       foreach ( $titles as $t ) {
+                               if ( $t->getNamespace() == $bl_namespace ) {
+                                       $where[] = "$bl_title = " . $db->addQuotes( $t->getDBkey() );
+                               }
+                       }
+                       $this->addWhere( $db->makeList( $where, LIST_OR ) );
+               }
+
+               if ( $params['show'] !== null ) {
+                       // prop=redirects only
+                       $show = array_flip( $params['show'] );
+                       if ( isset( $show['fragment'] ) && isset( $show['!fragment'] ) ||
+                               isset( $show['redirect'] ) && isset( $show['!redirect'] )
+                       ) {
+                               $this->dieUsageMsg( 'show' );
+                       }
+                       $this->addWhereIf( "rd_fragment != $emptyString", isset( $show['fragment'] ) );
+                       $this->addWhereIf(
+                               "rd_fragment = $emptyString OR rd_fragment IS NULL",
+                               isset( $show['!fragment'] )
+                       );
+                       $this->addWhereIf( array( 'page_is_redirect' => 1 ), isset( $show['redirect'] ) );
+                       $this->addWhereIf( array( 'page_is_redirect' => 0 ), isset( $show['!redirect'] ) );
+               }
+
+               // Override any ORDER BY from above with what we calculated earlier.
+               $this->addOption( 'ORDER BY', array_keys( $sortby ) );
+
+               $this->addOption( 'LIMIT', $params['limit'] + 1 );
+
+               $res = $this->select( __METHOD__ );
+
+               if ( is_null( $resultPageSet ) ) {
+                       $count = 0;
+                       foreach ( $res as $row ) {
+                               if ( ++$count > $params['limit'] ) {
+                                       // We've reached the one extra which shows that
+                                       // there are additional pages to be had. Stop here...
+                                       $this->setContinue( $row, $sortby );
+                                       break;
+                               }
+
+                               if ( $miser_ns !== null && !in_array( $row->page_namespace, $miser_ns ) ) {
+                                       // Miser mode namespace check
+                                       continue;
+                               }
+
+                               // Get the ID of the current page
+                               $id = $map[$row->bl_namespace][$row->bl_title];
+
+                               $vals = array();
+                               if ( $fld_pageid ) {
+                                       $vals['pageid'] = $row->page_id;
+                               }
+                               if ( $fld_title ) {
+                                       ApiQueryBase::addTitleInfo( $vals,
+                                               Title::makeTitle( $row->page_namespace, $row->page_title )
+                                       );
+                               }
+                               if ( $fld_fragment && $row->rd_fragment !== null && $row->rd_fragment !== '' ) {
+                                       $vals['fragment'] = $row->rd_fragment;
+                               }
+                               if ( $fld_redirect && $row->page_is_redirect ) {
+                                       $vals['redirect'] = '';
+                               }
+                               $fit = $this->addPageSubItem( $id, $vals );
+                               if ( !$fit ) {
+                                       $this->setContinue( $row, $sortby );
+                                       break;
+                               }
+                       }
+               } else {
+                       $titles = array();
+                       $count = 0;
+                       foreach ( $res as $row ) {
+                               if ( ++$count > $params['limit'] ) {
+                                       // We've reached the one extra which shows that
+                                       // there are additional pages to be had. Stop here...
+                                       $this->setContinue( $row, $sortby );
+                                       break;
+                               }
+                               $titles[] = Title::makeTitle( $row->page_namespace, $row->page_title );
+                       }
+                       $resultPageSet->populateFromTitles( $titles );
+               }
+       }
+
+       private function setContinue( $row, $sortby ) {
+               $cont = array();
+               foreach ( $sortby as $field => $v ) {
+                       $cont[] = $row->$field;
+               }
+               $this->setContinueEnumParameter( 'continue', join( '|', $cont ) );
+       }
+
+       public function getCacheMode( $params ) {
+               return 'public';
+       }
+
+       public function getAllowedParams() {
+               $settings = self::$settings[$this->getModuleName()];
+
+               $ret = array(
+                       'prop' => array(
+                               ApiBase::PARAM_TYPE => array(
+                                       'pageid',
+                                       'title',
+                               ),
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_DFLT => 'pageid|title',
+                       ),
+                       'namespace' => array(
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_TYPE => 'namespace',
+                       ),
+                       'show' => null, // Will be filled/removed below
+                       'limit' => array(
+                               ApiBase::PARAM_DFLT => 10,
+                               ApiBase::PARAM_TYPE => 'limit',
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
+               );
+
+               if ( empty( $settings['from_namespace'] ) && $this->getConfig()->get( 'MiserMode' ) ) {
+                       $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+                               'api-help-param-limited-in-miser-mode',
+                       );
+               }
+
+               if ( !empty( $settings['showredirects'] ) ) {
+                       $ret['prop'][ApiBase::PARAM_TYPE][] = 'redirect';
+                       $ret['prop'][ApiBase::PARAM_DFLT] .= '|redirect';
+               }
+               if ( isset( $settings['props'] ) ) {
+                       $ret['prop'][ApiBase::PARAM_TYPE] = array_merge(
+                               $ret['prop'][ApiBase::PARAM_TYPE], $settings['props']
+                       );
+               }
+
+               $show = array();
+               if ( !empty( $settings['showredirects'] ) ) {
+                       $show[] = 'redirect';
+                       $show[] = '!redirect';
+               }
+               if ( isset( $settings['show'] ) ) {
+                       $show = array_merge( $show, $settings['show'] );
+               }
+               if ( $show ) {
+                       $ret['show'] = array(
+                               ApiBase::PARAM_TYPE => $show,
+                               ApiBase::PARAM_ISMULTI => true,
+                       );
+               } else {
+                       unset( $ret['show'] );
+               }
+
+               return $ret;
+       }
+
+       protected function getExamplesMessages() {
+               $settings = self::$settings[$this->getModuleName()];
+               $name = $this->getModuleName();
+               $path = $this->getModulePath();
+               $title = isset( $settings['exampletitle'] ) ? $settings['exampletitle'] : 'Main Page';
+               $etitle = rawurlencode( $title );
+
+               return array(
+                       "action=query&prop={$name}&titles={$etitle}"
+                               => "apihelp-$path-example-simple",
+                       "action=query&generator={$name}&titles={$etitle}&prop=info"
+                               => "apihelp-$path-example-generator",
+               );
+       }
+
+       public function getHelpUrls() {
+               $name = $this->getModuleName();
+               $prefix = $this->getModulePrefix();
+               return "https://www.mediawiki.org/wiki/API:Properties#{$name}_.2F_{$prefix}";
+       }
+}
index 6680316..998cc91 100644 (file)
@@ -47,6 +47,11 @@ abstract class ApiQueryBase extends ApiBase {
                $this->resetQueryParams();
        }
 
+       /************************************************************************//**
+        * @name   Methods to implement
+        * @{
+        */
+
        /**
         * Get the cache mode for the data generated by this module. Override
         * this in the module subclass. For possible return values and other
@@ -62,6 +67,79 @@ abstract class ApiQueryBase extends ApiBase {
                return 'private';
        }
 
+       /**
+        * Override this method to request extra fields from the pageSet
+        * using $pageSet->requestField('fieldName')
+        *
+        * Note this only makes sense for 'prop' modules, as 'list' and 'meta'
+        * modules should not be using the pageset.
+        *
+        * @param ApiPageSet $pageSet
+        */
+       public function requestExtraData( $pageSet ) {
+       }
+
+       /**@}*/
+
+       /************************************************************************//**
+        * @name   Data access
+        * @{
+        */
+
+       /**
+        * Get the main Query module
+        * @return ApiQuery
+        */
+       public function getQuery() {
+               return $this->mQueryModule;
+       }
+
+       /**
+        * @see ApiBase::getParent()
+        */
+       public function getParent() {
+               return $this->getQuery();
+       }
+
+       /**
+        * Get the Query database connection (read-only)
+        * @return DatabaseBase
+        */
+       protected function getDB() {
+               if ( is_null( $this->mDb ) ) {
+                       $this->mDb = $this->getQuery()->getDB();
+               }
+
+               return $this->mDb;
+       }
+
+       /**
+        * Selects the query database connection with the given name.
+        * See ApiQuery::getNamedDB() for more information
+        * @param string $name Name to assign to the database connection
+        * @param int $db One of the DB_* constants
+        * @param array $groups Query groups
+        * @return DatabaseBase
+        */
+       public function selectNamedDB( $name, $db, $groups ) {
+               $this->mDb = $this->getQuery()->getNamedDB( $name, $db, $groups );
+       }
+
+       /**
+        * Get the PageSet object to work on
+        * @return ApiPageSet
+        */
+       protected function getPageSet() {
+               return $this->getQuery()->getPageSet();
+       }
+
+       /**@}*/
+
+       /************************************************************************//**
+        * @name   Querying
+        * @{
+        */
+
        /**
         * Blank the internal arrays with query parameters
         */
@@ -305,29 +383,64 @@ abstract class ApiQueryBase extends ApiBase {
        }
 
        /**
-        * Estimate the row count for the SELECT query that would be run if we
-        * called select() right now, and check if it's acceptable.
-        * @return bool True if acceptable, false otherwise
+        * @param string $query
+        * @param string $protocol
+        * @return null|string
         */
-       protected function checkRowCount() {
-               $db = $this->getDB();
-               $this->profileDBIn();
-               $rowcount = $db->estimateRowCount(
-                       $this->tables,
-                       $this->fields,
-                       $this->where,
-                       __METHOD__,
-                       $this->options
-               );
-               $this->profileDBOut();
+       public function prepareUrlQuerySearchString( $query = null, $protocol = null ) {
+               $db = $this->getDb();
+               if ( !is_null( $query ) || $query != '' ) {
+                       if ( is_null( $protocol ) ) {
+                               $protocol = 'http://';
+                       }
 
-               if ( $rowcount > $this->getConfig()->get( 'APIMaxDBRows' ) ) {
-                       return false;
+                       $likeQuery = LinkFilter::makeLikeArray( $query, $protocol );
+                       if ( !$likeQuery ) {
+                               $this->dieUsage( 'Invalid query', 'bad_query' );
+                       }
+
+                       $likeQuery = LinkFilter::keepOneWildcard( $likeQuery );
+
+                       return 'el_index ' . $db->buildLike( $likeQuery );
+               } elseif ( !is_null( $protocol ) ) {
+                       return 'el_index ' . $db->buildLike( "$protocol", $db->anyString() );
                }
 
-               return true;
+               return null;
+       }
+
+       /**
+        * Filters hidden users (where the user doesn't have the right to view them)
+        * Also adds relevant block information
+        *
+        * @param bool $showBlockInfo
+        * @return void
+        */
+       public function showHiddenUsersAddBlockInfo( $showBlockInfo ) {
+               $this->addTables( 'ipblocks' );
+               $this->addJoinConds( array(
+                       'ipblocks' => array( 'LEFT JOIN', 'ipb_user=user_id' ),
+               ) );
+
+               $this->addFields( 'ipb_deleted' );
+
+               if ( $showBlockInfo ) {
+                       $this->addFields( array( 'ipb_id', 'ipb_by', 'ipb_by_text', 'ipb_reason', 'ipb_expiry', 'ipb_timestamp' ) );
+               }
+
+               // Don't show hidden names
+               if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
+                       $this->addWhere( 'ipb_deleted = 0 OR ipb_deleted IS NULL' );
+               }
        }
 
+       /**@}*/
+
+       /************************************************************************//**
+        * @name   Utility methods
+        * @{
+        */
+
        /**
         * Add information (title and namespace) about a Title object to a
         * result array
@@ -340,22 +453,6 @@ abstract class ApiQueryBase extends ApiBase {
                $arr[$prefix . 'title'] = $title->getPrefixedText();
        }
 
-       /**
-        * Override this method to request extra fields from the pageSet
-        * using $pageSet->requestField('fieldName')
-        * @param ApiPageSet $pageSet
-        */
-       public function requestExtraData( $pageSet ) {
-       }
-
-       /**
-        * Get the main Query module
-        * @return ApiQuery
-        */
-       public function getQuery() {
-               return $this->mQueryModule;
-       }
-
        /**
         * Add a sub-element under the page element with the given page ID
         * @param int $pageId Page ID
@@ -405,89 +502,21 @@ abstract class ApiQueryBase extends ApiBase {
        }
 
        /**
-        * Get the Query database connection (read-only)
-        * @return DatabaseBase
-        */
-       protected function getDB() {
-               if ( is_null( $this->mDb ) ) {
-                       $this->mDb = $this->getQuery()->getDB();
-               }
-
-               return $this->mDb;
-       }
-
-       /**
-        * Selects the query database connection with the given name.
-        * See ApiQuery::getNamedDB() for more information
-        * @param string $name Name to assign to the database connection
-        * @param int $db One of the DB_* constants
-        * @param array $groups Query groups
-        * @return DatabaseBase
-        */
-       public function selectNamedDB( $name, $db, $groups ) {
-               $this->mDb = $this->getQuery()->getNamedDB( $name, $db, $groups );
-       }
-
-       /**
-        * Get the PageSet object to work on
-        * @return ApiPageSet
-        */
-       protected function getPageSet() {
-               return $this->getQuery()->getPageSet();
-       }
-
-       /**
-        * Convert a title to a DB key
-        * @param string $title Page title with spaces
-        * @return string Page title with underscores
-        */
-       public function titleToKey( $title ) {
-               // Don't throw an error if we got an empty string
-               if ( trim( $title ) == '' ) {
-                       return '';
-               }
-               $t = Title::newFromText( $title );
-               if ( !$t ) {
-                       $this->dieUsageMsg( array( 'invalidtitle', $title ) );
-               }
-
-               return $t->getPrefixedDBkey();
-       }
-
-       /**
-        * The inverse of titleToKey()
-        * @param string $key Page title with underscores
-        * @return string Page title with spaces
-        */
-       public function keyToTitle( $key ) {
-               // Don't throw an error if we got an empty string
-               if ( trim( $key ) == '' ) {
-                       return '';
-               }
-               $t = Title::newFromDBkey( $key );
-               // This really shouldn't happen but we gotta check anyway
-               if ( !$t ) {
-                       $this->dieUsageMsg( array( 'invalidtitle', $key ) );
-               }
-
-               return $t->getPrefixedText();
-       }
-
-       /**
-        * An alternative to titleToKey() that doesn't trim trailing spaces, and
-        * does not mangle the input if starts with something that looks like a
-        * namespace. It is advisable to pass the namespace parameter in order to
-        * handle per-namespace capitalization settings.
-        * @param string $titlePart Title part with spaces
-        * @param int $defaultNamespace Namespace to assume
-        * @return string Title part with underscores
+        * Convert an input title or title prefix into a dbkey.
+        *
+        * $namespace should always be specified in order to handle per-namespace
+        * capitalization settings.
+        *
+        * @param string $titlePart Title part
+        * @param int $defaultNamespace Namespace of the title
+        * @return string DBkey (no namespace prefix)
         */
-       public function titlePartToKey( $titlePart, $defaultNamespace = NS_MAIN ) {
-               $t = Title::makeTitleSafe( $defaultNamespace, $titlePart . 'x' );
+       public function titlePartToKey( $titlePart, $namespace = NS_MAIN ) {
+               $t = Title::makeTitleSafe( $namespace, $titlePart . 'x' );
                if ( !$t ) {
                        $this->dieUsageMsg( array( 'invalidtitle', $titlePart ) );
                }
-               if ( $defaultNamespace != $t->getNamespace() || $t->isExternal() ) {
+               if ( $namespace != $t->getNamespace() || $t->isExternal() ) {
                        // This can happen in two cases. First, if you call titlePartToKey with a title part
                        // that looks like a namespace, but with $defaultNamespace = NS_MAIN. It would be very
                        // difficult to handle such a case. Such cases cannot exist and are therefore treated
@@ -499,15 +528,6 @@ abstract class ApiQueryBase extends ApiBase {
                return substr( $t->getDbKey(), 0, -1 );
        }
 
-       /**
-        * An alternative to keyToTitle() that doesn't trim trailing spaces
-        * @param string $keyPart Key part with spaces
-        * @return string Key part with underscores
-        */
-       public function keyPartToTitle( $keyPart ) {
-               return substr( $this->keyToTitle( $keyPart . 'x' ), 0, -1 );
-       }
-
        /**
         * Gets the personalised direction parameter description
         *
@@ -523,58 +543,6 @@ abstract class ApiQueryBase extends ApiBase {
                );
        }
 
-       /**
-        * @param string $query
-        * @param string $protocol
-        * @return null|string
-        */
-       public function prepareUrlQuerySearchString( $query = null, $protocol = null ) {
-               $db = $this->getDb();
-               if ( !is_null( $query ) || $query != '' ) {
-                       if ( is_null( $protocol ) ) {
-                               $protocol = 'http://';
-                       }
-
-                       $likeQuery = LinkFilter::makeLikeArray( $query, $protocol );
-                       if ( !$likeQuery ) {
-                               $this->dieUsage( 'Invalid query', 'bad_query' );
-                       }
-
-                       $likeQuery = LinkFilter::keepOneWildcard( $likeQuery );
-
-                       return 'el_index ' . $db->buildLike( $likeQuery );
-               } elseif ( !is_null( $protocol ) ) {
-                       return 'el_index ' . $db->buildLike( "$protocol", $db->anyString() );
-               }
-
-               return null;
-       }
-
-       /**
-        * Filters hidden users (where the user doesn't have the right to view them)
-        * Also adds relevant block information
-        *
-        * @param bool $showBlockInfo
-        * @return void
-        */
-       public function showHiddenUsersAddBlockInfo( $showBlockInfo ) {
-               $this->addTables( 'ipblocks' );
-               $this->addJoinConds( array(
-                       'ipblocks' => array( 'LEFT JOIN', 'ipb_user=user_id' ),
-               ) );
-
-               $this->addFields( 'ipb_deleted' );
-
-               if ( $showBlockInfo ) {
-                       $this->addFields( array( 'ipb_id', 'ipb_by', 'ipb_by_text', 'ipb_reason', 'ipb_expiry' ) );
-               }
-
-               // Don't show hidden names
-               if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
-                       $this->addWhere( 'ipb_deleted = 0 OR ipb_deleted IS NULL' );
-               }
-       }
-
        /**
         * @param string $hash
         * @return bool
@@ -604,6 +572,94 @@ abstract class ApiQueryBase extends ApiBase {
                        'viewsuppressed'
                );
        }
+
+       /**@}*/
+
+       /************************************************************************//**
+        * @name   Deprecated
+        * @{
+        */
+
+       /**
+        * Estimate the row count for the SELECT query that would be run if we
+        * called select() right now, and check if it's acceptable.
+        * @deprecated since 1.24
+        * @return bool True if acceptable, false otherwise
+        */
+       protected function checkRowCount() {
+               wfDeprecated( __METHOD__, '1.24' );
+               $db = $this->getDB();
+               $this->profileDBIn();
+               $rowcount = $db->estimateRowCount(
+                       $this->tables,
+                       $this->fields,
+                       $this->where,
+                       __METHOD__,
+                       $this->options
+               );
+               $this->profileDBOut();
+
+               if ( $rowcount > $this->getConfig()->get( 'APIMaxDBRows' ) ) {
+                       return false;
+               }
+
+               return true;
+       }
+
+       /**
+        * Convert a title to a DB key
+        * @deprecated since 1.24, past uses of this were always incorrect and should
+        *   have used self::titlePartToKey() instead
+        * @param string $title Page title with spaces
+        * @return string Page title with underscores
+        */
+       public function titleToKey( $title ) {
+               wfDeprecated( __METHOD__, '1.24' );
+               // Don't throw an error if we got an empty string
+               if ( trim( $title ) == '' ) {
+                       return '';
+               }
+               $t = Title::newFromText( $title );
+               if ( !$t ) {
+                       $this->dieUsageMsg( array( 'invalidtitle', $title ) );
+               }
+
+               return $t->getPrefixedDBkey();
+       }
+
+       /**
+        * The inverse of titleToKey()
+        * @deprecated since 1.24, unused and probably never needed
+        * @param string $key Page title with underscores
+        * @return string Page title with spaces
+        */
+       public function keyToTitle( $key ) {
+               wfDeprecated( __METHOD__, '1.24' );
+               // Don't throw an error if we got an empty string
+               if ( trim( $key ) == '' ) {
+                       return '';
+               }
+               $t = Title::newFromDBkey( $key );
+               // This really shouldn't happen but we gotta check anyway
+               if ( !$t ) {
+                       $this->dieUsageMsg( array( 'invalidtitle', $key ) );
+               }
+
+               return $t->getPrefixedText();
+       }
+
+       /**
+        * Inverse of titlePartToKey()
+        * @deprecated since 1.24, unused and probably never needed
+        * @param string $keyPart DBkey, with prefix
+        * @return string Key part with underscores
+        */
+       public function keyPartToTitle( $keyPart ) {
+               wfDeprecated( __METHOD__, '1.24' );
+               return substr( $this->keyToTitle( $keyPart . 'x' ), 0, -1 );
+       }
+
+       /**@}*/
 }
 
 /**
@@ -641,7 +697,7 @@ abstract class ApiQueryGeneratorBase extends ApiQueryBase {
        }
 
        /**
-        * Overrides base class to prepend 'g' to every generator parameter
+        * Overrides ApiBase to prepend 'g' to every generator parameter
         * @param string $paramName Parameter name
         * @return string Prefixed parameter name
         */
@@ -666,6 +722,17 @@ abstract class ApiQueryGeneratorBase extends ApiQueryBase {
                }
        }
 
+       /**
+        * @see ApiBase::getHelpFlags()
+        *
+        * Corresponding messages: api-help-flag-generator
+        */
+       protected function getHelpFlags() {
+               $flags = parent::getHelpFlags();
+               $flags[] = 'generator';
+               return $flags;
+       }
+
        /**
         * Execute this module as a generator
         * @param ApiPageSet $resultPageSet All output should be appended to this object
index 33b25fd..5c44173 100644 (file)
@@ -268,6 +268,8 @@ class ApiQueryBlocks extends ApiQueryBase {
        }
 
        public function getAllowedParams() {
+               $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
+
                return array(
                        'start' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
@@ -280,7 +282,8 @@ class ApiQueryBlocks extends ApiQueryBase {
                                        'newer',
                                        'older'
                                ),
-                               ApiBase::PARAM_DFLT => 'older'
+                               ApiBase::PARAM_DFLT => 'older',
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'ids' => array(
                                ApiBase::PARAM_TYPE => 'integer',
@@ -289,7 +292,13 @@ class ApiQueryBlocks extends ApiQueryBase {
                        'users' => array(
                                ApiBase::PARAM_ISMULTI => true
                        ),
-                       'ip' => null,
+                       'ip' => array(
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+blocks-param-ip',
+                                       $blockCIDRLimit['IPv4'],
+                                       $blockCIDRLimit['IPv6'],
+                               ),
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -326,56 +335,18 @@ class ApiQueryBlocks extends ApiQueryBase {
                                ),
                                ApiBase::PARAM_ISMULTI => true
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'start' => 'The timestamp to start enumerating from',
-                       'end' => 'The timestamp to stop enumerating at',
-                       'dir' => $this->getDirectionDescription( $p ),
-                       'ids' => 'List of block IDs to list (optional)',
-                       'users' => 'List of users to search for (optional)',
-                       'ip' => array(
-                               'Get all blocks applying to this IP or CIDR range, including range blocks.',
-                               "Cannot be used together with bkusers. CIDR ranges broader than " .
-                                       "IPv4/{$blockCIDRLimit['IPv4']} or IPv6/{$blockCIDRLimit['IPv6']} " .
-                                       "are not accepted"
-                       ),
-                       'limit' => 'The maximum amount of blocks to list',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' id         - Adds the ID of the block',
-                               ' user       - Adds the username of the blocked user',
-                               ' userid     - Adds the user ID of the blocked user',
-                               ' by         - Adds the username of the blocking user',
-                               ' byid       - Adds the user ID of the blocking user',
-                               ' timestamp  - Adds the timestamp of when the block was given',
-                               ' expiry     - Adds the timestamp of when the block expires',
-                               ' reason     - Adds the reason given for the block',
-                               ' range      - Adds the range of IPs affected by the block',
-                               ' flags      - Tags the ban with (autoblock, anononly, etc)',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'show' => array(
-                               'Show only items that meet this criteria.',
-                               "For example, to see only indefinite blocks on IPs, set {$p}show=ip|!temp"
-                       ),
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return 'List all blocked users and IP addresses.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=blocks',
-                       'api.php?action=query&list=blocks&bkusers=Alice|Bob'
+                       'action=query&list=blocks'
+                               => 'apihelp-query+blocks-example-simple',
+                       'action=query&list=blocks&bkusers=Alice|Bob'
+                               => 'apihelp-query+blocks-example-users',
                );
        }
 
index 1926dd0..fcfddd6 100644 (file)
@@ -202,7 +202,9 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'categories' => array(
                                ApiBase::PARAM_ISMULTI => true,
                        ),
@@ -216,34 +218,12 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'prop' => array(
-                               'Which additional properties to get for each category',
-                               ' sortkey    - Adds the sortkey (hexadecimal string) and sortkey prefix',
-                               '              (human-readable part) for the category',
-                               ' timestamp  - Adds timestamp of when the category was added',
-                               ' hidden     - Tags categories that are hidden with __HIDDENCAT__',
-                       ),
-                       'limit' => 'How many categories to return',
-                       'show' => 'Which kind of categories to show',
-                       'continue' => 'When more results are available, use this to continue',
-                       'categories' => 'Only list these categories. Useful for checking ' .
-                               'whether a certain page is in a certain category',
-                       'dir' => 'The direction in which to list',
-               );
-       }
-
-       public function getDescription() {
-               return 'List all categories the page(s) belong to.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=categories&titles=Albert%20Einstein'
-                               => 'Get a list of categories [[Albert Einstein]] belongs to',
-                       'api.php?action=query&generator=categories&titles=Albert%20Einstein&prop=info'
-                               => 'Get information about all categories used in the [[Albert Einstein]]',
+                       'action=query&prop=categories&titles=Albert%20Einstein'
+                               => 'apihelp-query+categories-example-simple',
+                       'action=query&generator=categories&titles=Albert%20Einstein&prop=info'
+                               => 'apihelp-query+categories-example-generator',
                );
        }
 
index 6e9f33c..5c67ebf 100644 (file)
@@ -38,14 +38,13 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
 
        public function execute() {
                $params = $this->extractRequestParams();
-               $alltitles = $this->getPageSet()->getAllTitlesByNamespace();
+               $alltitles = $this->getPageSet()->getGoodAndMissingTitlesByNamespace();
                if ( empty( $alltitles[NS_CATEGORY] ) ) {
                        return;
                }
                $categories = $alltitles[NS_CATEGORY];
 
-               $titles = $this->getPageSet()->getGoodTitles() +
-                       $this->getPageSet()->getMissingTitles();
+               $titles = $this->getPageSet()->getGoodAndMissingTitles();
                $cattitles = array();
                foreach ( $categories as $c ) {
                        /** @var $t Title */
@@ -104,24 +103,19 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                );
        }
 
-       public function getParamDescription() {
+       protected function getExamplesMessages() {
                return array(
-                       'continue' => 'When more results are available, use this to continue',
+                       'action=query&prop=categoryinfo&titles=Category:Foo|Category:Bar'
+                               => 'apihelp-query+categoryinfo-example-simple',
                );
        }
 
-       public function getDescription() {
-               return 'Returns information about the given categories.';
-       }
-
-       public function getExamples() {
-               return 'api.php?action=query&prop=categoryinfo&titles=Category:Foo|Category:Bar';
-       }
-
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#categoryinfo_.2F_ci';
        }
index 17badb1..a6fc223 100644 (file)
@@ -47,6 +47,15 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                $this->run( $resultPageSet );
        }
 
+       /**
+        * @param string $hexSortkey
+        * @return bool
+        */
+       private function validateHexSortkey( $hexSortkey ) {
+               // A hex sortkey has an unbound number of 2 letter pairs
+               return preg_match( '/^(?:[a-fA-F0-9]{2})*$/', $hexSortkey );
+       }
+
        /**
         * @param ApiPageSet $resultPageSet
         * @return void
@@ -128,6 +137,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                $queryTypes = array_slice( $queryTypes, $contTypeIndex );
 
                                // Add a WHERE clause for sortkey and from
+                               $this->dieContinueUsageIf( !$this->validateHexSortkey( $cont[1] ) );
                                // pack( "H*", $foo ) is used to convert hex back to binary
                                $escSortkey = $this->getDB()->addQuotes( pack( 'H*', $cont[1] ) );
                                $from = intval( $cont[2] );
@@ -140,12 +150,28 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                $this->addWhereRange( 'cl_sortkey', $dir, null, null );
                                $this->addWhereRange( 'cl_from', $dir, null, null );
                        } else {
-                               $startsortkey = $params['startsortkeyprefix'] !== null ?
-                                       Collation::singleton()->getSortkey( $params['startsortkeyprefix'] ) :
-                                       $params['startsortkey'];
-                               $endsortkey = $params['endsortkeyprefix'] !== null ?
-                                       Collation::singleton()->getSortkey( $params['endsortkeyprefix'] ) :
-                                       $params['endsortkey'];
+                               if ( $params['startsortkeyprefix'] !== null ) {
+                                       $startsortkey = Collation::singleton()->getSortkey( $params['startsortkeyprefix'] );
+                               } elseif ( $params['starthexsortkey'] !== null ) {
+                                       if ( !$this->validateHexSortkey( $params['starthexsortkey'] ) ) {
+                                               $this->dieUsage( 'The starthexsortkey provided is not valid', 'bad_starthexsortkey' );
+                                       }
+                                       $startsortkey = pack( 'H*', $params['starthexsortkey'] );
+                               } else {
+                                       $this->logFeatureUsage( 'list=categorymembers&cmstartsortkey' );
+                                       $startsortkey = $params['startsortkey'];
+                               }
+                               if ( $params['endsortkeyprefix'] !== null ) {
+                                       $endsortkey = Collation::singleton()->getSortkey( $params['endsortkeyprefix'] );
+                               } elseif ( $params['endhexsortkey'] !== null ) {
+                                       if ( !$this->validateHexSortkey( $params['endhexsortkey'] ) ) {
+                                               $this->dieUsage( 'The endhexsortkey provided is not valid', 'bad_endhexsortkey' );
+                                       }
+                                       $endsortkey = pack( 'H*', $params['endhexsortkey'] );
+                               } else {
+                                       $this->logFeatureUsage( 'list=categorymembers&cmendsortkey' );
+                                       $endsortkey = $params['endsortkey'];
+                               }
 
                                // The below produces ORDER BY cl_sortkey, cl_from, possibly with DESC added to each of them
                                $this->addWhereRange( 'cl_sortkey',
@@ -265,7 +291,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               return array(
+               $ret = array(
                        'title' => array(
                                ApiBase::PARAM_TYPE => 'string',
                        ),
@@ -297,7 +323,9 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                        'file'
                                )
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_DFLT => 10,
@@ -330,70 +358,33 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                        'end' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
                        ),
-                       'startsortkey' => null,
-                       'endsortkey' => null,
+                       'starthexsortkey' => null,
+                       'endhexsortkey' => null,
                        'startsortkeyprefix' => null,
                        'endsortkeyprefix' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               $desc = array(
-                       'title' => "Which category to enumerate (required). Must include " .
-                               "'Category:' prefix. Cannot be used together with {$p}pageid",
-                       'pageid' => "Page ID of the category to enumerate. Cannot be used together with {$p}title",
-                       'prop' => array(
-                               'What pieces of information to include',
-                               ' ids           - Adds the page ID',
-                               ' title         - Adds the title and namespace ID of the page',
-                               ' sortkey       - Adds the sortkey used for sorting in the category (hexadecimal string)',
-                               ' sortkeyprefix - Adds the sortkey prefix used for sorting in the ' .
-                                       'category (human-readable part of the sortkey)',
-                               ' type          - Adds the type that the page has been categorised as (page, subcat or file)',
-                               ' timestamp     - Adds the timestamp of when the page was included',
+                       'startsortkey' => array(
+                               ApiBase::PARAM_DEPRECATED => true,
+                       ),
+                       'endsortkey' => array(
+                               ApiBase::PARAM_DEPRECATED => true,
                        ),
-                       'namespace' => 'Only include pages in these namespaces',
-                       'type' => "What type of category members to include. Ignored when {$p}sort=timestamp is set",
-                       'sort' => 'Property to sort by',
-                       'dir' => 'In which direction to sort',
-                       'start' => "Timestamp to start listing from. Can only be used with {$p}sort=timestamp",
-                       'end' => "Timestamp to end listing at. Can only be used with {$p}sort=timestamp",
-                       'startsortkey' => "Sortkey to start listing from. Must be given in " .
-                               "binary format. Can only be used with {$p}sort=sortkey",
-                       'endsortkey' => "Sortkey to end listing at. Must be given in binary " .
-                               "format. Can only be used with {$p}sort=sortkey",
-                       'startsortkeyprefix' => "Sortkey prefix to start listing from. Can " .
-                               "only be used with {$p}sort=sortkey. Overrides {$p}startsortkey",
-                       'endsortkeyprefix' => "Sortkey prefix to end listing BEFORE (not at, " .
-                               "if this value occurs it will not be included!). Can only be used with " .
-                               "{$p}sort=sortkey. Overrides {$p}endsortkey",
-                       'continue' => 'For large categories, give the value returned from previous query',
-                       'limit' => 'The maximum number of pages to return.',
                );
 
                if ( $this->getConfig()->get( 'MiserMode' ) ) {
-                       $desc['namespace'] = array(
-                               $desc['namespace'],
-                               "NOTE: Due to \$wgMiserMode, using this may result in fewer than \"{$p}limit\" results",
-                               'returned before continuing; in extreme cases, zero results may be returned.',
-                               "Note that you can use {$p}type=subcat or {$p}type=file instead of {$p}namespace=14 or 6.",
+                       $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+                               'api-help-param-limited-in-miser-mode',
                        );
                }
 
-               return $desc;
-       }
-
-       public function getDescription() {
-               return 'List all pages in a given category.';
+               return $ret;
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=categorymembers&cmtitle=Category:Physics'
-                               => 'Get first 10 pages in [[Category:Physics]]',
-                       'api.php?action=query&generator=categorymembers&gcmtitle=Category:Physics&prop=info'
-                               => 'Get page info about first 10 pages in [[Category:Physics]]',
+                       'action=query&list=categorymembers&cmtitle=Category:Physics'
+                               => 'apihelp-query+categorymembers-example-simple',
+                       'action=query&generator=categorymembers&gcmtitle=Category:Physics&prop=info'
+                               => 'apihelp-query+categorymembers-example-generator',
                );
        }
 
index 55ea470..7e76db2 100644 (file)
@@ -236,43 +236,16 @@ class ApiQueryContributors extends ApiQueryBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'group' => array(
-                               'Limit users to given group name(s)',
-                               'Does not include implicit or auto-promoted groups like *, user, or autoconfirmed'
-                       ),
-                       'excludegroup' => array(
-                               'Exclude users in given group name(s)',
-                               'Does not include implicit or auto-promoted groups like *, user, or autoconfirmed'
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'rights' => array(
-                               'Limit users to those having given right(s)',
-                               'Does not include rights granted by implicit or auto-promoted groups ' .
-                                       'like *, user, or autoconfirmed'
-                       ),
-                       'excluderights' => array(
-                               'Limit users to those not having given right(s)',
-                               'Does not include rights granted by implicit or auto-promoted groups ' .
-                                       'like *, user, or autoconfirmed'
-                       ),
-                       'limit' => 'How many contributors to return',
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return 'Get the list of logged-in contributors and ' .
-                       'the count of anonymous contributors to a page.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=contributors&titles=Main_Page',
+                       'action=query&prop=contributors&titles=Main_Page'
+                               => 'apihelp-query+contributors-example-simple',
                );
        }
 
diff --git a/includes/api/ApiQueryDeletedRevisions.php b/includes/api/ApiQueryDeletedRevisions.php
new file mode 100644 (file)
index 0000000..0271037
--- /dev/null
@@ -0,0 +1,304 @@
+<?php
+/**
+ * Created on Oct 3, 2014
+ *
+ * Copyright © 2014 Brad Jorsch "bjorsch@wikimedia.org"
+ *
+ * Heavily based on ApiQueryDeletedrevs,
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Query module to enumerate deleted revisions for pages.
+ *
+ * @ingroup API
+ */
+class ApiQueryDeletedRevisions extends ApiQueryRevisionsBase {
+
+       public function __construct( ApiQuery $query, $moduleName ) {
+               parent::__construct( $query, $moduleName, 'drv' );
+       }
+
+       protected function run( ApiPageSet $resultPageSet = null ) {
+               $user = $this->getUser();
+               // Before doing anything at all, let's check permissions
+               if ( !$user->isAllowed( 'deletedhistory' ) ) {
+                       $this->dieUsage(
+                               'You don\'t have permission to view deleted revision information',
+                               'permissiondenied'
+                       );
+               }
+
+               $result = $this->getResult();
+               $pageSet = $this->getPageSet();
+               $pageMap = $pageSet->getGoodAndMissingTitlesByNamespace();
+               $pageCount = count( $pageSet->getGoodAndMissingTitles() );
+               $revCount = $pageSet->getRevisionCount();
+               if ( $revCount === 0 && $pageCount === 0 ) {
+                       // Nothing to do
+                       return;
+               }
+               if ( $revCount !== 0 && count( $pageSet->getDeletedRevisionIDs() ) === 0 ) {
+                       // Nothing to do, revisions were supplied but none are deleted
+                       return;
+               }
+
+               $params = $this->extractRequestParams( false );
+
+               $db = $this->getDB();
+
+               if ( !is_null( $params['user'] ) && !is_null( $params['excludeuser'] ) ) {
+                       $this->dieUsage( 'user and excludeuser cannot be used together', 'badparams' );
+               }
+
+               $this->addTables( 'archive' );
+               if ( $resultPageSet === null ) {
+                       $this->parseParameters( $params );
+                       $this->addFields( Revision::selectArchiveFields() );
+                       $this->addFields( array( 'ar_title', 'ar_namespace' ) );
+               } else {
+                       $this->limit = $this->getParameter( 'limit' ) ?: 10;
+                       $this->addFields( array( 'ar_title', 'ar_namespace', 'ar_timestamp', 'ar_rev_id', 'ar_id' ) );
+               }
+
+               if ( $this->fld_tags ) {
+                       $this->addTables( 'tag_summary' );
+                       $this->addJoinConds(
+                               array( 'tag_summary' => array( 'LEFT JOIN', array( 'ar_rev_id=ts_rev_id' ) ) )
+                       );
+                       $this->addFields( 'ts_tags' );
+               }
+
+               if ( !is_null( $params['tag'] ) ) {
+                       $this->addTables( 'change_tag' );
+                       $this->addJoinConds(
+                               array( 'change_tag' => array( 'INNER JOIN', array( 'ar_rev_id=ct_rev_id' ) ) )
+                       );
+                       $this->addWhereFld( 'ct_tag', $params['tag'] );
+               }
+
+               if ( $this->fld_content || !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) {
+                       // Modern MediaWiki has the content for deleted revs in the 'text'
+                       // table using fields old_text and old_flags. But revisions deleted
+                       // pre-1.5 store the content in the 'archive' table directly using
+                       // fields ar_text and ar_flags, and no corresponding 'text' row. So
+                       // we have to LEFT JOIN and fetch all four fields.
+                       $this->addTables( 'text' );
+                       $this->addJoinConds(
+                               array( 'text' => array( 'LEFT JOIN', array( 'ar_text_id=old_id' ) ) )
+                       );
+                       $this->addFields( array( 'ar_text', 'ar_flags', 'old_text', 'old_flags' ) );
+
+                       // This also means stricter restrictions
+                       if ( !$user->isAllowedAny( 'undelete', 'deletedtext' ) ) {
+                               $this->dieUsage(
+                                       'You don\'t have permission to view deleted revision content',
+                                       'permissiondenied'
+                               );
+                       }
+               }
+
+               $dir = $params['dir'];
+
+               if ( $revCount !== 0 ) {
+                       $this->addWhere( array(
+                               'ar_rev_id' => array_keys( $pageSet->getDeletedRevisionIDs() )
+                       ) );
+               } else {
+                       // We need a custom WHERE clause that matches all titles.
+                       $lb = new LinkBatch( $pageSet->getGoodAndMissingTitles() );
+                       $where = $lb->constructSet( 'ar', $db );
+                       $this->addWhere( $where );
+               }
+
+               if ( !is_null( $params['user'] ) ) {
+                       $this->addWhereFld( 'ar_user_text', $params['user'] );
+               } elseif ( !is_null( $params['excludeuser'] ) ) {
+                       $this->addWhere( 'ar_user_text != ' .
+                               $db->addQuotes( $params['excludeuser'] ) );
+               }
+
+               if ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ) {
+                       // Paranoia: avoid brute force searches (bug 17342)
+                       // (shouldn't be able to get here without 'deletedhistory', but
+                       // check it again just in case)
+                       if ( !$user->isAllowed( 'deletedhistory' ) ) {
+                               $bitmask = Revision::DELETED_USER;
+                       } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+                               $bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
+                       } else {
+                               $bitmask = 0;
+                       }
+                       if ( $bitmask ) {
+                               $this->addWhere( $db->bitAnd( 'ar_deleted', $bitmask ) . " != $bitmask" );
+                       }
+               }
+
+               if ( !is_null( $params['continue'] ) ) {
+                       $cont = explode( '|', $params['continue'] );
+                       $op = ( $dir == 'newer' ? '>' : '<' );
+                       if ( $revCount !== 0 ) {
+                               $this->dieContinueUsageIf( count( $cont ) != 2 );
+                               $rev = intval( $cont[0] );
+                               $this->dieContinueUsageIf( strval( $rev ) !== $cont[0] );
+                               $ar_id = (int)$cont[1];
+                               $this->dieContinueUsageIf( strval( $ar_id ) !== $cont[1] );
+                               $this->addWhere( "ar_rev_id $op $rev OR " .
+                                       "(ar_rev_id = $rev AND " .
+                                       "ar_id $op= $ar_id)" );
+                       } else {
+                               $this->dieContinueUsageIf( count( $cont ) != 4 );
+                               $ns = intval( $cont[0] );
+                               $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
+                               $title = $db->addQuotes( $cont[1] );
+                               $ts = $db->addQuotes( $db->timestamp( $cont[2] ) );
+                               $ar_id = (int)$cont[3];
+                               $this->dieContinueUsageIf( strval( $ar_id ) !== $cont[3] );
+                               $this->addWhere( "ar_namespace $op $ns OR " .
+                                       "(ar_namespace = $ns AND " .
+                                       "(ar_title $op $title OR " .
+                                       "(ar_title = $title AND " .
+                                       "(ar_timestamp $op $ts OR " .
+                                       "(ar_timestamp = $ts AND " .
+                                       "ar_id $op= $ar_id)))))" );
+                       }
+               }
+
+               $this->addOption( 'LIMIT', $this->limit + 1 );
+
+               if ( $revCount !== 0 ) {
+                       // Sort by ar_rev_id when querying by ar_rev_id
+                       $this->addWhereRange( 'ar_rev_id', $dir, null, null );
+               } else {
+                       // Sort by ns and title in the same order as timestamp for efficiency
+                       // But only when not already unique in the query
+                       if ( count( $pageMap ) > 1 ) {
+                               $this->addWhereRange( 'ar_namespace', $dir, null, null );
+                       }
+                       $oneTitle = key( reset( $pageMap ) );
+                       foreach ( $pageMap as $pages ) {
+                               if ( count( $pages ) > 1 || key( $pages ) !== $oneTitle ) {
+                                       $this->addWhereRange( 'ar_title', $dir, null, null );
+                                       break;
+                               }
+                       }
+                       $this->addTimestampWhereRange( 'ar_timestamp', $dir, $params['start'], $params['end'] );
+               }
+               // Include in ORDER BY for uniqueness
+               $this->addWhereRange( 'ar_id', $dir, null, null );
+
+               $res = $this->select( __METHOD__ );
+               $count = 0;
+               $generated = array();
+               foreach ( $res as $row ) {
+                       if ( ++$count > $this->limit ) {
+                               // We've had enough
+                               $this->setContinueEnumParameter( 'continue',
+                                       $revCount
+                                               ? "$row->ar_rev_id|$row->ar_id"
+                                               : "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
+                               );
+                               break;
+                       }
+
+                       if ( $resultPageSet !== null ) {
+                               $generated[] = $row->ar_rev_id;
+                       } else {
+                               if ( !isset( $pageMap[$row->ar_namespace][$row->ar_title] ) ) {
+                                       // Was it converted?
+                                       $title = Title::makeTitle( $row->ar_namespace, $row->ar_title );
+                                       $converted = $pageSet->getConvertedTitles();
+                                       if ( $title && isset( $converted[$title->getPrefixedText()] ) ) {
+                                               $title = Title::newFromText( $converted[$title->getPrefixedText()] );
+                                               if ( $title && isset( $pageMap[$title->getNamespace()][$title->getDBkey()] ) ) {
+                                                       $pageMap[$row->ar_namespace][$row->ar_title] =
+                                                               $pageMap[$title->getNamespace()][$title->getDBkey()];
+                                               }
+                                       }
+                               }
+                               if ( !isset( $pageMap[$row->ar_namespace][$row->ar_title] ) ) {
+                                       ApiBase::dieDebug( "Found row in archive (ar_id={$row->ar_id}) that didn't " .
+                                               "get processed by ApiPageSet" );
+                               }
+
+                               $fit = $this->addPageSubItem(
+                                       $pageMap[$row->ar_namespace][$row->ar_title],
+                                       $this->extractRevisionInfo( Revision::newFromArchiveRow( $row ), $row ),
+                                       'rev'
+                               );
+                               if ( !$fit ) {
+                                       $this->setContinueEnumParameter( 'continue',
+                                               $revCount
+                                                       ? "$row->ar_rev_id|$row->ar_id"
+                                                       : "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
+                                       );
+                                       break;
+                               }
+                       }
+               }
+
+               if ( $resultPageSet !== null ) {
+                       $resultPageSet->populateFromRevisionIDs( $generated );
+               }
+       }
+
+       public function getAllowedParams() {
+               return parent::getAllowedParams() + array(
+                       'start' => array(
+                               ApiBase::PARAM_TYPE => 'timestamp',
+                       ),
+                       'end' => array(
+                               ApiBase::PARAM_TYPE => 'timestamp',
+                       ),
+                       'dir' => array(
+                               ApiBase::PARAM_TYPE => array(
+                                       'newer',
+                                       'older'
+                               ),
+                               ApiBase::PARAM_DFLT => 'older',
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+                       ),
+                       'tag' => null,
+                       'user' => array(
+                               ApiBase::PARAM_TYPE => 'user'
+                       ),
+                       'excludeuser' => array(
+                               ApiBase::PARAM_TYPE => 'user'
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
+               );
+       }
+
+       protected function getExamplesMessages() {
+               return array(
+                       'action=query&prop=deletedrevisions&titles=Main%20Page|Talk:Main%20Page&' .
+                               'drvprop=user|comment|content'
+                               => 'apihelp-query+deletedrevisions-example-titles',
+                       'action=query&prop=deletedrevisions&revids=123456'
+                               => 'apihelp-query+deletedrevisions-example-revids',
+               );
+       }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:Properties#deletedrevisions_.2F_drv';
+       }
+}
index 6b1185b..f828255 100644 (file)
@@ -28,6 +28,7 @@
  * Query module to enumerate all deleted revisions.
  *
  * @ingroup API
+ * @deprecated since 1.25
  */
 class ApiQueryDeletedrevs extends ApiQueryBase {
 
@@ -45,6 +46,12 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                        );
                }
 
+               $this->setWarning(
+                       'list=deletedrevs has been deprecated. Please use prop=deletedrevisions or ' .
+                       'list=alldeletedrevisions instead.'
+               );
+               $this->logFeatureUsage( 'action=query&list=deletedrevs' );
+
                $db = $this->getDB();
                $params = $this->extractRequestParams( false );
                $prop = array_flip( $params['prop'] );
@@ -61,6 +68,13 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                $fld_token = isset( $prop['token'] );
                $fld_tags = isset( $prop['tags'] );
 
+               if ( isset( $prop['token'] ) ) {
+                       $p = $this->getModulePrefix();
+                       $this->setWarning(
+                               "{$p}prop=token has been deprecated. Please use action=query&meta=tokens instead."
+                       );
+               }
+
                // If we're in JSON callback mode, no tokens can be obtained
                if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
                        $fld_token = false;
@@ -413,43 +427,53 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'page' );
        }
 
+       public function isDeprecated() {
+               return true;
+       }
+
        public function getAllowedParams() {
                return array(
                        'start' => array(
-                               ApiBase::PARAM_TYPE => 'timestamp'
+                               ApiBase::PARAM_TYPE => 'timestamp',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 1, 2 ) ),
                        ),
                        'end' => array(
                                ApiBase::PARAM_TYPE => 'timestamp',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 1, 2 ) ),
                        ),
                        'dir' => array(
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
                                ),
-                               ApiBase::PARAM_DFLT => 'older'
+                               ApiBase::PARAM_DFLT => 'older',
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 1, 3 ) ),
                        ),
-                       'from' => null,
-                       'to' => null,
-                       'prefix' => null,
-                       'continue' => null,
-                       'unique' => false,
-                       'tag' => null,
-                       'user' => array(
-                               ApiBase::PARAM_TYPE => 'user'
+                       'from' => array(
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
                        ),
-                       'excludeuser' => array(
-                               ApiBase::PARAM_TYPE => 'user'
+                       'to' => array(
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
+                       ),
+                       'prefix' => array(
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
+                       ),
+                       'unique' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
                        ),
                        'namespace' => array(
                                ApiBase::PARAM_TYPE => 'namespace',
                                ApiBase::PARAM_DFLT => NS_MAIN,
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
                        ),
-                       'limit' => array(
-                               ApiBase::PARAM_DFLT => 10,
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       'tag' => null,
+                       'user' => array(
+                               ApiBase::PARAM_TYPE => 'user'
+                       ),
+                       'excludeuser' => array(
+                               ApiBase::PARAM_TYPE => 'user'
                        ),
                        'prop' => array(
                                ApiBase::PARAM_DFLT => 'user|comment',
@@ -469,68 +493,30 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                                ),
                                ApiBase::PARAM_ISMULTI => true
                        ),
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'start' => 'The timestamp to start enumerating from (1, 2)',
-                       'end' => 'The timestamp to stop enumerating at (1, 2)',
-                       'dir' => $this->getDirectionDescription( $this->getModulePrefix(), ' (1, 3)' ),
-                       'from' => 'Start listing at this title (3)',
-                       'to' => 'Stop listing at this title (3)',
-                       'prefix' => 'Search for all page titles that begin with this value (3)',
-                       'limit' => 'The maximum amount of revisions to list',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' revid          - Adds the revision ID of the deleted revision',
-                               ' parentid       - Adds the revision ID of the previous revision to the page',
-                               ' user           - Adds the user who made the revision',
-                               ' userid         - Adds the user ID whom made the revision',
-                               ' comment        - Adds the comment of the revision',
-                               ' parsedcomment  - Adds the parsed comment of the revision',
-                               ' minor          - Tags if the revision is minor',
-                               ' len            - Adds the length (bytes) of the revision',
-                               ' sha1           - Adds the SHA-1 (base 16) of the revision',
-                               ' content        - Adds the content of the revision',
-                               ' token          - Gives the edit token',
-                               ' tags           - Tags for the revision',
+                       'limit' => array(
+                               ApiBase::PARAM_DFLT => 10,
+                               ApiBase::PARAM_TYPE => 'limit',
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'namespace' => 'Only list pages in this namespace (3)',
-                       'user' => 'Only list revisions by this user',
-                       'excludeuser' => 'Don\'t list revisions by this user',
-                       'continue' => 'When more results are available, use this to continue',
-                       'unique' => 'List only one revision for each page (3)',
-                       'tag' => 'Only list revisions tagged with this tag',
-               );
-       }
-
-       public function getDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'List deleted revisions.',
-                       'Operates in three modes:',
-                       ' 1) List deleted revisions for the given title(s), sorted by timestamp.',
-                       ' 2) List deleted contributions for the given user, sorted by timestamp (no titles specified).',
-                       ' 3) List all deleted revisions in the given namespace, sorted by title and timestamp',
-                       "    (no titles specified, {$p}user not set).",
-                       'Certain parameters only apply to some modes and are ignored in others.',
-                       'For instance, a parameter marked (1) only applies to mode 1 and is ignored in modes 2 and 3.',
                );
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=deletedrevs&titles=Main%20Page|Talk:Main%20Page&' .
+                       'action=query&list=deletedrevs&titles=Main%20Page|Talk:Main%20Page&' .
                                'drprop=user|comment|content'
-                               => 'List the last deleted revisions of Main Page and Talk:Main Page, with content (mode 1)',
-                       'api.php?action=query&list=deletedrevs&druser=Bob&drlimit=50'
-                               => 'List the last 50 deleted contributions by Bob (mode 2)',
-                       'api.php?action=query&list=deletedrevs&drdir=newer&drlimit=50'
-                               => 'List the first 50 deleted revisions in the main namespace (mode 3)',
-                       'api.php?action=query&list=deletedrevs&drdir=newer&drlimit=50&drnamespace=1&drunique='
-                               => 'List the first 50 deleted pages in the Talk namespace (mode 3):',
+                               => 'apihelp-query+deletedrevs-example-mode1',
+                       'action=query&list=deletedrevs&druser=Bob&drlimit=50'
+                               => 'apihelp-query+deletedrevs-example-mode2',
+                       'action=query&list=deletedrevs&drdir=newer&drlimit=50'
+                               => 'apihelp-query+deletedrevs-example-mode3-main',
+                       'action=query&list=deletedrevs&drdir=newer&drlimit=50&drnamespace=1&drunique='
+                               => 'apihelp-query+deletedrevs-example-mode3-talk',
                );
        }
 
index cf0d841..a6509d4 100644 (file)
@@ -44,17 +44,7 @@ class ApiQueryDisabled extends ApiQueryBase {
                return array();
        }
 
-       public function getParamDescription() {
-               return array();
-       }
-
-       public function getDescription() {
-               return array(
-                       'This module has been disabled.'
-               );
-       }
-
-       public function getExamples() {
-               return array();
+       public function getDescriptionMessage() {
+               return 'apihelp-query+disabled-description';
        }
 }
index 6d836cd..010f8d5 100644 (file)
@@ -52,7 +52,7 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
         */
        private function run( $resultPageSet = null ) {
                $params = $this->extractRequestParams();
-               $namespaces = $this->getPageSet()->getAllTitlesByNamespace();
+               $namespaces = $this->getPageSet()->getGoodAndMissingTitlesByNamespace();
                if ( empty( $namespaces[NS_FILE] ) ) {
                        return;
                }
@@ -167,7 +167,9 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'dir' => array(
                                ApiBase::PARAM_DFLT => 'ascending',
                                ApiBase::PARAM_TYPE => array(
@@ -179,23 +181,12 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'limit' => 'How many duplicate files to return',
-                       'continue' => 'When more results are available, use this to continue',
-                       'dir' => 'The direction in which to list',
-                       'localonly' => 'Look only for files in the local repository',
-               );
-       }
-
-       public function getDescription() {
-               return 'List all files that are duplicates of the given file(s) based on hash values.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&titles=File:Albert_Einstein_Head.jpg&prop=duplicatefiles',
-                       'api.php?action=query&generator=allimages&prop=duplicatefiles',
+                       'action=query&titles=File:Albert_Einstein_Head.jpg&prop=duplicatefiles'
+                               => 'apihelp-query+duplicatefiles-example-simple',
+                       'action=query&generator=allimages&prop=duplicatefiles'
+                               => 'apihelp-query+duplicatefiles-example-generated',
                );
        }
 
index faabb92..e77355b 100644 (file)
@@ -145,7 +145,7 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               return array(
+               $ret = array(
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_DFLT => 'ids|title|url',
@@ -156,7 +156,8 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                                )
                        ),
                        'offset' => array(
-                               ApiBase::PARAM_TYPE => 'integer'
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
                        'protocol' => array(
                                ApiBase::PARAM_TYPE => self::prepareProtocols(),
@@ -176,6 +177,14 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                        ),
                        'expandurl' => false,
                );
+
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
+                       $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+                               'api-help-param-limited-in-miser-mode',
+                       );
+               }
+
+               return $ret;
        }
 
        public static function prepareProtocols() {
@@ -207,45 +216,10 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                }
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               $desc = array(
-                       'prop' => array(
-                               'What pieces of information to include',
-                               ' ids    - Adds the ID of page',
-                               ' title  - Adds the title and namespace ID of the page',
-                               ' url    - Adds the URL used in the page',
-                       ),
-                       'offset' => 'Used for paging. Use the value returned for "continue"',
-                       'protocol' => array(
-                               "Protocol of the URL. If empty and {$p}query set, the protocol is http.",
-                               "Leave both this and {$p}query empty to list all external links"
-                       ),
-                       'query' => 'Search string without protocol. See [[Special:LinkSearch]]. ' .
-                               'Leave empty to list all external links',
-                       'namespace' => 'The page namespace(s) to enumerate.',
-                       'limit' => 'How many pages to return.',
-                       'expandurl' => 'Expand protocol-relative URLs with the canonical protocol',
-               );
-
-               if ( $this->getConfig()->get( 'MiserMode' ) ) {
-                       $desc['namespace'] = array(
-                               $desc['namespace'],
-                               "NOTE: Due to \$wgMiserMode, using this may result in fewer than \"{$p}limit\" results",
-                               'returned before continuing; in extreme cases, zero results may be returned',
-                       );
-               }
-
-               return $desc;
-       }
-
-       public function getDescription() {
-               return 'Enumerate pages that contain a given URL.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=exturlusage&euquery=www.mediawiki.org'
+                       'action=query&list=exturlusage&euquery=www.mediawiki.org'
+                               => 'apihelp-query+exturlusage-example-simple',
                );
        }
 
index 9566635..6ddb6c8 100644 (file)
@@ -114,7 +114,8 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
                        'offset' => array(
-                               ApiBase::PARAM_TYPE => 'integer'
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
                        'protocol' => array(
                                ApiBase::PARAM_TYPE => ApiQueryExtLinksUsage::prepareProtocols(),
@@ -125,30 +126,10 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'limit' => 'How many links to return',
-                       'offset' => 'When more results are available, use this to continue',
-                       'protocol' => array(
-                               "Protocol of the URL. If empty and {$p}query set, the protocol is http.",
-                               "Leave both this and {$p}query empty to list all external links"
-                       ),
-                       'query' => 'Search string without protocol. Useful for checking ' .
-                               'whether a certain page contains a certain external url',
-                       'expandurl' => 'Expand protocol-relative URLs with the canonical protocol',
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns all external URLs (not interwikis) from the given page(s).';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=extlinks&titles=Main%20Page'
-                               => 'Get a list of external links on the [[Main Page]]',
+                       'action=query&prop=extlinks&titles=Main%20Page'
+                               => 'apihelp-query+extlinks-example-simple',
                );
        }
 
index d1600ef..39c5902 100644 (file)
@@ -89,27 +89,10 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
                ) ) );
        }
 
-       public function getParamDescription() {
+       protected function getExamplesMessages() {
                return array(
-                       'prop' => array(
-                               'Which repository properties to get (there may be more available on some wikis):',
-                               ' apiurl      - URL to the repository API - helpful for getting image info from the host.',
-                               ' name        - The key of the repository - used in e.g. ' .
-                                       '$wgForeignFileRepos and imageinfo return values.',
-                               ' displayname - The human-readable name of the repository wiki.',
-                               ' rooturl     - Root URL for image paths.',
-                               ' local       - Whether that repository is the local one or not.',
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               return 'Return meta information about image repositories configured on the wiki.';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=query&meta=filerepoinfo&friprop=apiurl|name|displayname',
+                       'action=query&meta=filerepoinfo&friprop=apiurl|name|displayname'
+                               => 'apihelp-query+filerepoinfo-example-simple',
                );
        }
 }
index f047d8d..6b92603 100644 (file)
@@ -193,7 +193,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
 
                                $pageCount = ArchivedFile::newFromRow( $row )->pageCount();
                                if ( $pageCount !== false ) {
-                                       $vals['pagecount'] = $pageCount;
+                                       $file['pagecount'] = $pageCount;
                                }
 
                                $file['height'] = $row->fa_height;
@@ -246,16 +246,8 @@ class ApiQueryFilearchive extends ApiQueryBase {
        public function getAllowedParams() {
                return array(
                        'from' => null,
-                       'continue' => null,
                        'to' => null,
                        'prefix' => null,
-                       'limit' => array(
-                               ApiBase::PARAM_DFLT => 10,
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
-                       ),
                        'dir' => array(
                                ApiBase::PARAM_DFLT => 'ascending',
                                ApiBase::PARAM_TYPE => array(
@@ -283,48 +275,23 @@ class ApiQueryFilearchive extends ApiQueryBase {
                                        'archivename',
                                ),
                        ),
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'from' => 'The image title to start enumerating from',
-                       'continue' => 'When more results are available, use this to continue',
-                       'to' => 'The image title to stop enumerating at',
-                       'prefix' => 'Search for all image titles that begin with this value',
-                       'dir' => 'The direction in which to list',
-                       'limit' => 'How many images to return in total',
-                       'sha1' => "SHA1 hash of image. Overrides {$this->getModulePrefix()}sha1base36",
-                       'sha1base36' => 'SHA1 hash of image in base 36 (used in MediaWiki)',
-                       'prop' => array(
-                               'What image information to get:',
-                               ' sha1              - Adds SHA-1 hash for the image',
-                               ' timestamp         - Adds timestamp for the uploaded version',
-                               ' user              - Adds user who uploaded the image version',
-                               ' size              - Adds the size of the image in bytes and the height, ' .
-                                       'width and page count (if applicable)',
-                               ' dimensions        - Alias for size',
-                               ' description       - Adds description the image version',
-                               ' parseddescription - Parse the description on the version',
-                               ' mime              - Adds MIME of the image',
-                               ' mediatype         - Adds the media type of the image',
-                               ' metadata          - Lists Exif metadata for the version of the image',
-                               ' bitdepth          - Adds the bit depth of the version',
-                               ' archivename       - Adds the file name of the archive version for non-latest versions'
+                       'limit' => array(
+                               ApiBase::PARAM_DFLT => 10,
+                               ApiBase::PARAM_TYPE => 'limit',
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
                );
        }
 
-       public function getDescription() {
-               return 'Enumerate all deleted files sequentially.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=filearchive' => array(
-                               'Simple Use',
-                               'Show a list of all deleted files',
-                       ),
+                       'action=query&list=filearchive'
+                               => 'apihelp-query+filearchive-example-simple',
                );
        }
 
index b5aa45b..a2af124 100644 (file)
@@ -169,7 +169,9 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                return array(
                        'prefix' => null,
                        'title' => null,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -195,33 +197,12 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'prefix' => 'Prefix for the interwiki',
-                       'title' => "Interwiki link to search for. Must be used with {$this->getModulePrefix()}prefix",
-                       'continue' => 'When more results are available, use this to continue',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' iwprefix       - Adds the prefix of the interwiki',
-                               ' iwtitle        - Adds the title of the interwiki',
-                       ),
-                       'limit' => 'How many total pages to return',
-                       'dir' => 'The direction in which to list',
-               );
-       }
-
-       public function getDescription() {
-               return array( 'Find all pages that link to the given interwiki link.',
-                       'Can be used to find all links with a prefix, or',
-                       'all links to a title (with a given prefix).',
-                       'Using neither parameter is effectively "All IW Links".',
-               );
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=iwbacklinks&iwbltitle=Test&iwblprefix=wikibooks',
-                       'api.php?action=query&generator=iwbacklinks&giwbltitle=Test&giwblprefix=wikibooks&prop=info'
+                       'action=query&list=iwbacklinks&iwbltitle=Test&iwblprefix=wikibooks'
+                               => 'apihelp-query+iwbacklinks-example-simple',
+                       'action=query&generator=iwbacklinks&giwbltitle=Test&giwblprefix=wikibooks&prop=info'
+                               => 'apihelp-query+iwbacklinks-example-generator',
                );
        }
 
index a185ee2..c1208cb 100644 (file)
@@ -147,24 +147,12 @@ class ApiQueryIWLinks extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'url' => array(
-                               ApiBase::PARAM_DFLT => false,
-                               ApiBase::PARAM_DEPRECATED => true,
-                       ),
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
                                        'url',
                                )
                        ),
-                       'limit' => array(
-                               ApiBase::PARAM_DFLT => 10,
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
-                       ),
-                       'continue' => null,
                        'prefix' => null,
                        'title' => null,
                        'dir' => array(
@@ -174,32 +162,27 @@ class ApiQueryIWLinks extends ApiQueryBase {
                                        'descending'
                                )
                        ),
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'prop' => array(
-                               'Which additional properties to get for each interlanguage link',
-                               ' url      - Adds the full URL',
+                       'limit' => array(
+                               ApiBase::PARAM_DFLT => 10,
+                               ApiBase::PARAM_TYPE => 'limit',
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
+                       'url' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_DEPRECATED => true,
                        ),
-                       'url' => "Whether to get the full URL (Cannot be used with {$this->getModulePrefix()}prop)",
-                       'limit' => 'How many interwiki links to return',
-                       'continue' => 'When more results are available, use this to continue',
-                       'prefix' => 'Prefix for the interwiki',
-                       'title' => "Interwiki link to search for. Must be used with {$this->getModulePrefix()}prefix",
-                       'dir' => 'The direction in which to list',
                );
        }
 
-       public function getDescription() {
-               return 'Returns all interwiki links from the given page(s).';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=iwlinks&titles=Main%20Page'
-                               => 'Get interwiki links from the [[Main Page]]',
+                       'action=query&prop=iwlinks&titles=Main%20Page'
+                               => 'apihelp-query+iwlinks-example-simple',
                );
        }
 
index 5cc1454..cfd06f1 100644 (file)
@@ -58,7 +58,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        'revdelUser' => $this->getUser(),
                );
 
-               $pageIds = $this->getPageSet()->getAllTitlesByNamespace();
+               $pageIds = $this->getPageSet()->getGoodAndMissingTitlesByNamespace();
                if ( !empty( $pageIds[NS_FILE] ) ) {
                        $titles = array_keys( $pageIds[NS_FILE] );
                        asort( $titles ); // Ensure the order is always the same
@@ -237,9 +237,11 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        $scale = array();
                        $scale['height'] = $params['urlheight'];
                } else {
-                       $scale = null;
                        if ( $params['urlparam'] ) {
-                               $this->dieUsage( "{$p}urlparam requires {$p}urlwidth", "urlparam_no_width" );
+                               // Audio files might not have a width/height.
+                               $scale = array();
+                       } else {
+                               $scale = null;
                        }
                }
 
@@ -256,6 +258,10 @@ class ApiQueryImageInfo extends ApiQueryBase {
         * @return array Array of parameters for transform.
         */
        protected function mergeThumbParams( $image, $thumbParams, $otherParams ) {
+               if ( $thumbParams === null ) {
+                       // No scaling requested
+                       return null;
+               }
                if ( !isset( $thumbParams['width'] ) && isset( $thumbParams['height'] ) ) {
                        // We want to limit only by height in this situation, so pass the
                        // image's full width as the limiting width. But some file types
@@ -269,6 +275,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                }
 
                if ( !$otherParams ) {
+                       $this->checkParameterNormalise( $image, $thumbParams );
                        return $thumbParams;
                }
                $p = $this->getModulePrefix();
@@ -289,11 +296,11 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        // handlers.
                        $this->setWarning( "Could not parse {$p}urlparam for " . $image->getName()
                                . '. Using only width and height' );
-
+                       $this->checkParameterNormalise( $image, $thumbParams );
                        return $thumbParams;
                }
 
-               if ( isset( $paramList['width'] ) ) {
+               if ( isset( $paramList['width'] ) && isset( $thumbParams['width'] ) ) {
                        if ( intval( $paramList['width'] ) != intval( $thumbParams['width'] ) ) {
                                $this->setWarning( "Ignoring width value set in {$p}urlparam ({$paramList['width']}) "
                                        . "in favor of width value derived from {$p}urlwidth/{$p}urlheight "
@@ -307,7 +314,33 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        }
                }
 
-               return $thumbParams + $paramList;
+               $finalParams = $thumbParams + $paramList;
+               $this->checkParameterNormalise( $image, $finalParams );
+               return $finalParams;
+       }
+
+       /**
+        * Verify that the final image parameters can be normalised.
+        *
+        * This doesn't use the normalised parameters, since $file->transform
+        * expects the pre-normalised parameters, but doing the normalisation
+        * allows us to catch certain error conditions early (such as missing
+        * required parameter).
+        *
+        * @param $image File
+        * @param $finalParams array List of parameters to transform image with
+        */
+       protected function checkParameterNormalise( $image, $finalParams ) {
+               $h = $image->getHandler();
+               if ( !$h ) {
+                       return;
+               }
+               // Note: normaliseParams modifies the array in place, but we aren't interested
+               // in the actual normalised version, only if we can actually normalise them,
+               // so we use the functions scope to throw away the normalisations.
+               if ( !$h->normaliseParams( $image, $finalParams ) ) {
+                       $this->dieUsage( "Could not normalise image parameters for " . $image->getName(), "urlparamnormal" );
+               }
        }
 
        /**
@@ -391,6 +424,13 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        if ( $pageCount !== false ) {
                                $vals['pagecount'] = $pageCount;
                        }
+
+                       // length as in how many seconds long a video is.
+                       $length = $file->getLength();
+                       if ( $length ) {
+                               // Call it duration, because "length" can be ambiguous.
+                               $vals['duration'] = (float)$length;
+                       }
                }
 
                $pcomment = isset( $prop['parsedcomment'] );
@@ -609,7 +649,11 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        ),
                        'urlwidth' => array(
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_DFLT => -1
+                               ApiBase::PARAM_DFLT => -1,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+imageinfo-param-urlwidth',
+                                       ApiQueryImageInfo::TRANSFORM_LIMIT,
+                               ),
                        ),
                        'urlheight' => array(
                                ApiBase::PARAM_TYPE => 'integer',
@@ -635,7 +679,9 @@ class ApiQueryImageInfo extends ApiQueryBase {
                                ApiBase::PARAM_DFLT => '',
                                ApiBase::PARAM_TYPE => 'string',
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'localonly' => false,
                );
        }
@@ -654,6 +700,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
        /**
         * Returns array key value pairs of properties and their descriptions
         *
+        * @deprecated since 1.25
         * @param string $modulePrefix
         * @return array
         */
@@ -666,8 +713,8 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        'parsedcomment' =>  ' parsedcomment - Parse the comment on the version',
                        'canonicaltitle' => ' canonicaltitle - Adds the canonical title of the image file',
                        'url' =>            ' url           - Gives URL to the image and the description page',
-                       'size' =>           ' size          - Adds the size of the image in bytes ' .
-                               'and the height, width and page count (if applicable)',
+                       'size' =>           ' size          - Adds the size of the image in bytes, ' .
+                               'its height and its width. Page count and duration are added if applicable',
                        'dimensions' =>     ' dimensions    - Alias for size', // B/C with Allimages
                        'sha1' =>           ' sha1          - Adds SHA-1 hash for the image',
                        'mime' =>           ' mime          - Adds MIME type of the image',
@@ -690,6 +737,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
        /**
         * Returns the descriptions for the properties provided by getPropertyNames()
         *
+        * @deprecated since 1.25
         * @param array $filter List of properties to filter out
         * @param string $modulePrefix
         * @return array
@@ -701,53 +749,13 @@ class ApiQueryImageInfo extends ApiQueryBase {
                );
        }
 
-       /**
-        * Return the API documentation for the parameters.
-        * @return array Parameter documentation.
-        */
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'prop' => self::getPropertyDescriptions( array(), $p ),
-                       'urlwidth' => array(
-                               "If {$p}prop=url is set, a URL to an image scaled to this width will be returned.",
-                               'For performance reasons if this option is used, ' .
-                                       'no more than ' . self::TRANSFORM_LIMIT . ' scaled images will be returned.'
-                       ),
-                       'urlheight' => "Similar to {$p}urlwidth.",
-                       'urlparam' => array( "A handler specific parameter string. For example, pdf's ",
-                               "might use 'page15-100px'. {$p}urlwidth must be used and be consistent with {$p}urlparam" ),
-                       'limit' => 'How many image revisions to return per image',
-                       'start' => 'Timestamp to start listing from',
-                       'end' => 'Timestamp to stop listing at',
-                       'metadataversion'
-                               => array( "Version of metadata to use. if 'latest' is specified, use latest version.",
-                               "Defaults to '1' for backwards compatibility" ),
-                       'extmetadatalanguage' => array(
-                               'What language to fetch extmetadata in. This affects both which',
-                               'translation to fetch, if multiple are available, as well as how things',
-                               'like numbers and various values are formatted.'
-                       ),
-                       'extmetadatamultilang'
-                               =>'If translations for extmetadata property are available, fetch all of them.',
-                       'extmetadatafilter'
-                               => "If specified and non-empty, only these keys will be returned for {$p}prop=extmetadata",
-                       'continue' => 'If the query response includes a continue value, ' .
-                               'use it here to get another page of results',
-                       'localonly' => 'Look only for files in the local repository',
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns image information and upload history.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&titles=File:Albert%20Einstein%20Head.jpg&prop=imageinfo',
-                       'api.php?action=query&titles=File:Test.jpg&prop=imageinfo&iilimit=50&' .
-                               'iiend=20071231235959&iiprop=timestamp|user|url',
+                       'action=query&titles=File:Albert%20Einstein%20Head.jpg&prop=imageinfo'
+                               => 'apihelp-query+imageinfo-example-simple',
+                       'action=query&titles=File:Test.jpg&prop=imageinfo&iilimit=50&' .
+                               'iiend=2007-12-31T23:59:59Z&iiprop=timestamp|user|url'
+                               => 'apihelp-query+imageinfo-example-dated',
                );
        }
 
index 9bc3abe..029d945 100644 (file)
@@ -146,7 +146,9 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'images' => array(
                                ApiBase::PARAM_ISMULTI => true,
                        ),
@@ -160,26 +162,12 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'limit' => 'How many images to return',
-                       'continue' => 'When more results are available, use this to continue',
-                       'images' => 'Only list these images. Useful for checking whether a ' .
-                               'certain page has a certain Image.',
-                       'dir' => 'The direction in which to list',
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns all images contained on the given page(s).';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=images&titles=Main%20Page'
-                               => 'Get a list of images used in the [[Main Page]]',
-                       'api.php?action=query&generator=images&titles=Main%20Page&prop=info'
-                               => 'Get information about all images used in the [[Main Page]]',
+                       'action=query&prop=images&titles=Main%20Page'
+                               => 'apihelp-query+images-example-simple',
+                       'action=query&generator=images&titles=Main%20Page&prop=info'
+                               => 'apihelp-query+images-example-generator',
                );
        }
 
index be1de93..5e61ed1 100644 (file)
@@ -64,21 +64,22 @@ class ApiQueryInfo extends ApiQueryBase {
                }
                $pageSet->requestField( 'page_is_new' );
                $config = $this->getConfig();
-               if ( !$config->get( 'DisableCounters' ) ) {
-                       $pageSet->requestField( 'page_counter' );
-               }
                $pageSet->requestField( 'page_touched' );
                $pageSet->requestField( 'page_latest' );
                $pageSet->requestField( 'page_len' );
                if ( $config->get( 'ContentHandlerUseDB' ) ) {
                        $pageSet->requestField( 'page_content_model' );
                }
+               if ( $config->get( 'PageLanguageUseDB' ) ) {
+                       $pageSet->requestField( 'page_lang' );
+               }
        }
 
        /**
         * Get an array mapping token names to their handler functions.
         * The prototype for a token function is func($pageid, $title)
         * it should return a token or false (permission denied)
+        * @deprecated since 1.24
         * @return array Array(tokenname => function)
         */
        protected function getTokenFunctions() {
@@ -110,10 +111,16 @@ class ApiQueryInfo extends ApiQueryBase {
 
        static protected $cachedTokens = array();
 
+       /**
+        * @deprecated since 1.24
+        */
        public static function resetTokenCache() {
                ApiQueryInfo::$cachedTokens = array();
        }
 
+       /**
+        * @deprecated since 1.24
+        */
        public static function getEditToken( $pageid, $title ) {
                // We could check for $title->userCan('edit') here,
                // but that's too expensive for this purpose
@@ -131,6 +138,9 @@ class ApiQueryInfo extends ApiQueryBase {
                return ApiQueryInfo::$cachedTokens['edit'];
        }
 
+       /**
+        * @deprecated since 1.24
+        */
        public static function getDeleteToken( $pageid, $title ) {
                global $wgUser;
                if ( !$wgUser->isAllowed( 'delete' ) ) {
@@ -145,6 +155,9 @@ class ApiQueryInfo extends ApiQueryBase {
                return ApiQueryInfo::$cachedTokens['delete'];
        }
 
+       /**
+        * @deprecated since 1.24
+        */
        public static function getProtectToken( $pageid, $title ) {
                global $wgUser;
                if ( !$wgUser->isAllowed( 'protect' ) ) {
@@ -159,6 +172,9 @@ class ApiQueryInfo extends ApiQueryBase {
                return ApiQueryInfo::$cachedTokens['protect'];
        }
 
+       /**
+        * @deprecated since 1.24
+        */
        public static function getMoveToken( $pageid, $title ) {
                global $wgUser;
                if ( !$wgUser->isAllowed( 'move' ) ) {
@@ -173,6 +189,9 @@ class ApiQueryInfo extends ApiQueryBase {
                return ApiQueryInfo::$cachedTokens['move'];
        }
 
+       /**
+        * @deprecated since 1.24
+        */
        public static function getBlockToken( $pageid, $title ) {
                global $wgUser;
                if ( !$wgUser->isAllowed( 'block' ) ) {
@@ -187,11 +206,17 @@ class ApiQueryInfo extends ApiQueryBase {
                return ApiQueryInfo::$cachedTokens['block'];
        }
 
+       /**
+        * @deprecated since 1.24
+        */
        public static function getUnblockToken( $pageid, $title ) {
                // Currently, this is exactly the same as the block token
                return self::getBlockToken( $pageid, $title );
        }
 
+       /**
+        * @deprecated since 1.24
+        */
        public static function getEmailToken( $pageid, $title ) {
                global $wgUser;
                if ( !$wgUser->canSendEmail() || $wgUser->isBlockedFromEmailUser() ) {
@@ -206,6 +231,9 @@ class ApiQueryInfo extends ApiQueryBase {
                return ApiQueryInfo::$cachedTokens['email'];
        }
 
+       /**
+        * @deprecated since 1.24
+        */
        public static function getImportToken( $pageid, $title ) {
                global $wgUser;
                if ( !$wgUser->isAllowedAny( 'import', 'importupload' ) ) {
@@ -220,6 +248,9 @@ class ApiQueryInfo extends ApiQueryBase {
                return ApiQueryInfo::$cachedTokens['import'];
        }
 
+       /**
+        * @deprecated since 1.24
+        */
        public static function getWatchToken( $pageid, $title ) {
                global $wgUser;
                if ( !$wgUser->isLoggedIn() ) {
@@ -234,6 +265,9 @@ class ApiQueryInfo extends ApiQueryBase {
                return ApiQueryInfo::$cachedTokens['watch'];
        }
 
+       /**
+        * @deprecated since 1.24
+        */
        public static function getOptionsToken( $pageid, $title ) {
                global $wgUser;
                if ( !$wgUser->isLoggedIn() ) {
@@ -294,9 +328,6 @@ class ApiQueryInfo extends ApiQueryBase {
                        : array();
                $this->pageIsNew = $pageSet->getCustomField( 'page_is_new' );
 
-               if ( !$this->getConfig()->get( 'DisableCounters' ) ) {
-                       $this->pageCounter = $pageSet->getCustomField( 'page_counter' );
-               }
                $this->pageTouched = $pageSet->getCustomField( 'page_touched' );
                $this->pageLatest = $pageSet->getCustomField( 'page_latest' );
                $this->pageLength = $pageSet->getCustomField( 'page_len' );
@@ -358,9 +389,6 @@ class ApiQueryInfo extends ApiQueryBase {
                if ( $titleExists ) {
                        $pageInfo['touched'] = wfTimestamp( TS_ISO_8601, $this->pageTouched[$pageid] );
                        $pageInfo['lastrevid'] = intval( $this->pageLatest[$pageid] );
-                       $pageInfo['counter'] = $this->getConfig()->get( 'DisableCounters' )
-                               ? ''
-                               : intval( $this->pageCounter[$pageid] );
                        $pageInfo['length'] = intval( $this->pageLength[$pageid] );
 
                        if ( isset( $this->pageIsRedir[$pageid] ) && $this->pageIsRedir[$pageid] ) {
@@ -424,6 +452,7 @@ class ApiQueryInfo extends ApiQueryBase {
                if ( $this->fld_url ) {
                        $pageInfo['fullurl'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
                        $pageInfo['editurl'] = wfExpandUrl( $title->getFullURL( 'action=edit' ), PROTO_CURRENT );
+                       $pageInfo['canonicalurl'] = wfExpandUrl( $title->getFullURL(), PROTO_CANONICAL );
                }
                if ( $this->fld_readable && $title->userCan( 'read', $this->getUser() ) ) {
                        $pageInfo['readable'] = '';
@@ -784,42 +813,23 @@ class ApiQueryInfo extends ApiQueryBase {
                                        // need to be added to getCacheMode()
                                ) ),
                        'token' => array(
+                               ApiBase::PARAM_DEPRECATED => true,
                                ApiBase::PARAM_DFLT => null,
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() )
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'prop' => array(
-                               'Which additional properties to get:',
-                               ' protection            - List the protection level of each page',
-                               ' talkid                - The page ID of the talk page for each non-talk page',
-                               ' watched               - List the watched status of each page',
-                               ' watchers              - The number of watchers, if allowed',
-                               ' notificationtimestamp - The watchlist notification timestamp of each page',
-                               ' subjectid             - The page ID of the parent page for each talk page',
-                               ' url                   - Gives a full URL to the page, and also an edit URL',
-                               ' readable              - Whether the user can read this page',
-                               ' preload               - Gives the text returned by EditFormPreloadText',
-                               ' displaytitle          - Gives the way the page title is actually displayed',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'token' => 'Request a token to perform a data-modifying action on a page',
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return 'Get basic page information such as namespace, title, last touched date, ...';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=info&titles=Main%20Page',
-                       'api.php?action=query&prop=info&inprop=protection&titles=Main%20Page'
+                       'action=query&prop=info&titles=Main%20Page'
+                               => 'apihelp-query+info-example-simple',
+                       'action=query&prop=info&inprop=protection&titles=Main%20Page'
+                               => 'apihelp-query+info-example-protection',
                );
        }
 
index 34842c6..b41b4b7 100644 (file)
@@ -168,7 +168,9 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                return array(
                        'lang' => null,
                        'title' => null,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -194,34 +196,12 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'lang' => 'Language for the language link',
-                       'title' => "Language link to search for. Must be used with {$this->getModulePrefix()}lang",
-                       'continue' => 'When more results are available, use this to continue',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' lllang         - Adds the language code of the language link',
-                               ' lltitle        - Adds the title of the language link',
-                       ),
-                       'limit' => 'How many total pages to return',
-                       'dir' => 'The direction in which to list',
-               );
-       }
-
-       public function getDescription() {
-               return array( 'Find all pages that link to the given language link.',
-                       'Can be used to find all links with a language code, or',
-                       'all links to a title (with a given language).',
-                       'Using neither parameter is effectively "All Language Links".',
-                       'Note that this may not consider language links added by extensions.',
-               );
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=langbacklinks&lbltitle=Test&lbllang=fr',
-                       'api.php?action=query&generator=langbacklinks&glbltitle=Test&glbllang=fr&prop=info'
+                       'action=query&list=langbacklinks&lbltitle=Test&lbllang=fr'
+                               => 'apihelp-query+langbacklinks-example-simple',
+                       'action=query&generator=langbacklinks&glbltitle=Test&glbllang=fr&prop=info'
+                               => 'apihelp-query+langbacklinks-example-generator',
                );
        }
 
index da05f27..2d03347 100644 (file)
@@ -140,18 +140,6 @@ class ApiQueryLangLinks extends ApiQueryBase {
        public function getAllowedParams() {
                global $wgContLang;
                return array(
-                       'limit' => array(
-                               ApiBase::PARAM_DFLT => 10,
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
-                       ),
-                       'continue' => null,
-                       'url' => array(
-                               ApiBase::PARAM_DFLT => false,
-                               ApiBase::PARAM_DEPRECATED => true,
-                       ),
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
@@ -170,36 +158,27 @@ class ApiQueryLangLinks extends ApiQueryBase {
                                )
                        ),
                        'inlanguagecode' => $wgContLang->getCode(),
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'limit' => 'How many langlinks to return',
-                       'continue' => 'When more results are available, use this to continue',
-                       'url' => "Whether to get the full URL (Cannot be used with {$this->getModulePrefix()}prop)",
-                       'prop' => array(
-                               'Which additional properties to get for each interlanguage link',
-                               ' url      - Adds the full URL',
-                               ' langname - Adds the localised language name (best effort, use CLDR extension)',
-                               "            Use {$this->getModulePrefix()}inlanguagecode to control the language",
-                               ' autonym  - Adds the native language name',
+                       'limit' => array(
+                               ApiBase::PARAM_DFLT => 10,
+                               ApiBase::PARAM_TYPE => 'limit',
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
+                       'url' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_DEPRECATED => true,
                        ),
-                       'lang' => 'Language code',
-                       'title' => "Link to search for. Must be used with {$this->getModulePrefix()}lang",
-                       'dir' => 'The direction in which to list',
-                       'inlanguagecode' => 'Language code for localised language names',
                );
        }
 
-       public function getDescription() {
-               return 'Returns all interlanguage links from the given page(s).';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=langlinks&titles=Main%20Page&redirects='
-                               => 'Get interlanguage links from the [[Main Page]]',
+                       'action=query&prop=langlinks&titles=Main%20Page&redirects='
+                               => 'apihelp-query+langlinks-example-simple',
                );
        }
 
index 71329c4..3bd3714 100644 (file)
@@ -34,26 +34,20 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
        const LINKS = 'links';
        const TEMPLATES = 'templates';
 
-       private $table, $prefix, $description, $helpUrl;
+       private $table, $prefix, $helpUrl;
 
        public function __construct( ApiQuery $query, $moduleName ) {
                switch ( $moduleName ) {
                        case self::LINKS:
                                $this->table = 'pagelinks';
                                $this->prefix = 'pl';
-                               $this->description = 'link';
                                $this->titlesParam = 'titles';
-                               $this->titlesParamDescription = 'Only list links to these titles. Useful ' .
-                                       'for checking whether a certain page links to a certain title.';
                                $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#links_.2F_pl';
                                break;
                        case self::TEMPLATES:
                                $this->table = 'templatelinks';
                                $this->prefix = 'tl';
-                               $this->description = 'template';
                                $this->titlesParam = 'templates';
-                               $this->titlesParamDescription = 'Only list these templates. Useful ' .
-                                       'for checking whether a certain page uses a certain template.';
                                $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#templates_.2F_tl';
                                break;
                        default:
@@ -197,7 +191,9 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        $this->titlesParam => array(
                                ApiBase::PARAM_ISMULTI => true,
                        ),
@@ -211,32 +207,17 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               $desc = $this->description;
-
-               return array(
-                       'namespace' => "Show {$desc}s in this namespace(s) only",
-                       'limit' => "How many {$desc}s to return",
-                       'continue' => 'When more results are available, use this to continue',
-                       $this->titlesParam => $this->titlesParamDescription,
-                       'dir' => 'The direction in which to list',
-               );
-       }
-
-       public function getDescription() {
-               return "Returns all {$this->description}s from the given page(s).";
-       }
-
-       public function getExamples() {
-               $desc = $this->description;
+       protected function getExamplesMessages() {
                $name = $this->getModuleName();
+               $path = $this->getModulePath();
 
                return array(
-                       "api.php?action=query&prop={$name}&titles=Main%20Page" => "Get {$desc}s from the [[Main Page]]",
-                       "api.php?action=query&generator={$name}&titles=Main%20Page&prop=info"
-                               => "Get information about the {$desc} pages in the [[Main Page]]",
-                       "api.php?action=query&prop={$name}&titles=Main%20Page&{$this->prefix}namespace=2|10"
-                               => "Get {$desc}s from the Main Page in the User and Template namespaces",
+                       "action=query&prop={$name}&titles=Main%20Page"
+                               => "apihelp-{$path}-example-simple",
+                       "action=query&generator={$name}&titles=Main%20Page&prop=info"
+                               => "apihelp-{$path}-example-generator",
+                       "action=query&prop={$name}&titles=Main%20Page&{$this->prefix}namespace=2|10"
+                               => "apihelp-{$path}-example-namespaces",
                );
        }
 
index d3607e1..917332b 100644 (file)
@@ -327,6 +327,17 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                        $params['img_timestamp'] = wfTimestamp( TS_ISO_8601, $params['img_timestamp'] );
                                }
                                break;
+                       case 'merge':
+                               // replace the named parameter with numbered for backward compatibility
+                               if ( isset( $params['4::dest'] ) ) {
+                                       $params[] = $params['4::dest'];
+                                       unset( $params['4::dest'] );
+                               }
+                               if ( isset( $params['5::mergepoint'] ) ) {
+                                       $params[] = $params['5::mergepoint'];
+                                       unset( $params['5::mergepoint'] );
+                               }
+                               break;
                }
                if ( !is_null( $params ) ) {
                        $logParams = array();
@@ -474,7 +485,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
 
        public function getAllowedParams( $flags = 0 ) {
                $config = $this->getConfig();
-               return array(
+               $ret = array(
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_DFLT => 'ids|title|type|user|timestamp|comment|details',
@@ -511,14 +522,15 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'user' => null,
                        'title' => null,
                        'namespace' => array(
                                ApiBase::PARAM_TYPE => 'namespace'
                        ),
-                       'prefix' => null,
+                       'prefix' => array(),
                        'tag' => null,
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
@@ -527,52 +539,22 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'prop' => array(
-                               'Which properties to get',
-                               ' ids            - Adds the ID of the log event',
-                               ' title          - Adds the title of the page for the log event',
-                               ' type           - Adds the type of log event',
-                               ' user           - Adds the user responsible for the log event',
-                               ' userid         - Adds the user ID who was responsible for the log event',
-                               ' timestamp      - Adds the timestamp for the event',
-                               ' comment        - Adds the comment of the event',
-                               ' parsedcomment  - Adds the parsed comment of the event',
-                               ' details        - Lists additional details about the event',
-                               ' tags           - Lists tags for the event',
-                       ),
-                       'type' => 'Filter log entries to only this type',
-                       'action' => array(
-                               "Filter log actions to only this action. Overrides {$p}type",
-                               "Wildcard actions like 'action/*' allows to specify any string for the asterisk"
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'start' => 'The timestamp to start enumerating from',
-                       'end' => 'The timestamp to end enumerating',
-                       'dir' => $this->getDirectionDescription( $p ),
-                       'user' => 'Filter entries to those made by the given user',
-                       'title' => 'Filter entries to those related to a page',
-                       'namespace' => 'Filter entries to those in the given namespace',
-                       'prefix' => 'Filter entries that start with this prefix. Disabled in Miser Mode',
-                       'limit' => 'How many total event entries to return',
-                       'tag' => 'Only list event entries tagged with this tag',
-                       'continue' => 'When more results are available, use this to continue',
                );
-       }
 
-       public function getDescription() {
-               return 'Get events from logs.';
+               if ( $config->get( 'MiserMode' ) ) {
+                       $ret['prefix'][ApiBase::PARAM_HELP_MSG] = 'api-help-param-disabled-in-miser-mode';
+               }
+
+               return $ret;
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=logevents'
+                       'action=query&list=logevents'
+                               => 'apihelp-query+logevents-example-simple',
                );
        }
 
index 469b297..035f901 100644 (file)
@@ -233,15 +233,19 @@ abstract class ApiQueryORM extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => $this->getTable()->getFieldNames(),
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_REQUIRED => true,
+                               ApiBase::PARAM_HELP_MSG => 'api-orm-param-props',
                        ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 20,
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_MIN => 1,
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
+                               ApiBase::PARAM_HELP_MSG => 'api-orm-param-limit',
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'continue' => null,
                );
 
                return array_merge( $this->getTable()->getAPIParams(), $params );
@@ -249,6 +253,7 @@ abstract class ApiQueryORM extends ApiQueryBase {
 
        /**
         * @see ApiBase::getParamDescription()
+        * @deprecated since 1.25
         * @return array
         */
        public function getParamDescription() {
index 8cd9c6c..026f061 100644 (file)
@@ -83,7 +83,9 @@ class ApiQueryPagePropNames extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_DFLT => 10,
@@ -94,20 +96,10 @@ class ApiQueryPagePropNames extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'continue' => 'When more results are available, use this to continue',
-                       'limit' => 'The maximum number of pages to return',
-               );
-       }
-
-       public function getDescription() {
-               return 'List all page prop names in use on the wiki.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=pagepropnames' => 'Get first 10 prop names',
+                       'action=query&list=pagepropnames'
+                               => 'apihelp-query+pagepropnames-example-simple',
                );
        }
 
index e370c39..269afb1 100644 (file)
@@ -125,28 +125,19 @@ class ApiQueryPageProps extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                        ),
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'continue' => 'When more results are available, use this to continue',
-                       'prop' => 'Only list these props. Useful for checking whether a ' .
-                               'certain page uses a certain page prop',
-               );
-       }
-
-       public function getDescription() {
-               return 'Get various properties defined in the page content.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=pageprops&titles=Category:Foo',
+                       'action=query&prop=pageprops&titles=Category:Foo'
+                               => 'apihelp-query+pageprops-example-simple',
                );
        }
 
index b6c8525..6ffe0ae 100644 (file)
@@ -140,7 +140,9 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
                                        'value',
                                )
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_DFLT => 10,
@@ -158,31 +160,12 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'propname' => 'Page prop for which to enumerate pages',
-                       'prop' => array(
-                               'What pieces of information to include',
-                               ' ids   - Adds the page ID',
-                               ' title - Adds the title and namespace ID of the page',
-                               ' value - Adds the value of the page prop',
-                       ),
-                       'dir' => 'In which direction to sort',
-                       'continue' => 'When more results are available, use this to continue',
-                       'limit' => 'The maximum number of pages to return',
-               );
-       }
-
-       public function getDescription() {
-               return 'List all pages using a given page prop.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=pageswithprop&pwppropname=displaytitle&pwpprop=ids|title|value'
-                               => 'Get first 10 pages using {{DISPLAYTITLE:}}',
-                       'api.php?action=query&generator=pageswithprop&gpwppropname=notoc&prop=info'
-                               => 'Get page info about first 10 pages using __NOTOC__',
+                       'action=query&list=pageswithprop&pwppropname=displaytitle&pwpprop=ids|title|value'
+                               => 'apihelp-query+pageswithprop-example-simple',
+                       'action=query&generator=pageswithprop&gpwppropname=notoc&prop=info'
+                               => 'apihelp-query+pageswithprop-example-generator',
                );
        }
 
index 4abd7f0..3c90acc 100644 (file)
@@ -100,21 +100,10 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
                        );
        }
 
-       public function getParamDescription() {
+       protected function getExamplesMessages() {
                return array(
-                       'search' => 'Search string',
-                       'limit' => 'Maximum amount of results to return',
-                       'namespace' => 'Namespaces to search',
-               );
-       }
-
-       public function getDescription() {
-               return 'Perform a prefix search for page titles';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=query&list=prefixsearch&pssearch=meaning',
+                       'action=query&list=prefixsearch&pssearch=meaning'
+                               => 'apihelp-query+prefixsearch-example-simple',
                );
        }
 
index 4c88be7..f1e6d01 100644 (file)
@@ -196,7 +196,8 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'start' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
@@ -217,39 +218,18 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                                        'level'
                                )
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'namespace' => 'Only list titles in these namespaces',
-                       'start' => 'Start listing at this protection timestamp',
-                       'end' => 'Stop listing at this protection timestamp',
-                       'dir' => $this->getDirectionDescription( $this->getModulePrefix() ),
-                       'limit' => 'How many total pages to return',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' timestamp      - Adds the timestamp of when protection was added',
-                               ' user           - Adds the user that added the protection',
-                               ' userid         - Adds the user id that added the protection',
-                               ' comment        - Adds the comment for the protection',
-                               ' parsedcomment  - Adds the parsed comment for the protection',
-                               ' expiry         - Adds the timestamp of when the protection will be lifted',
-                               ' level          - Adds the protection level',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'level' => 'Only list titles with these protection levels',
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return 'List all titles protected from creation.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=protectedtitles',
+                       'action=query&list=protectedtitles'
+                               => 'apihelp-query+protectedtitles-example-simple',
+                       'action=query&generator=protectedtitles&gptnamespace=0&prop=linkshere'
+                               => 'apihelp-query+protectedtitles-example-generator',
                );
        }
 
index 5ddd945..74586bb 100644 (file)
@@ -144,7 +144,10 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => array_keys( $this->qpMap ),
                                ApiBase::PARAM_REQUIRED => true
                        ),
-                       'offset' => 0,
+                       'offset' => array(
+                               ApiBase::PARAM_DFLT => 0,
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -155,21 +158,10 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'page' => 'The name of the special page. Note, this is case sensitive',
-                       'offset' => 'When more results are available, use this to continue',
-                       'limit' => 'Number of results to return',
-               );
-       }
-
-       public function getDescription() {
-               return 'Get a list provided by a QueryPage-based special page.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=querypage&qppage=Ancientpages'
+                       'action=query&list=querypage&qppage=Ancientpages'
+                               => 'apihelp-query+querypage-example-ancientpages',
                );
        }
 
index 530557e..282f498 100644 (file)
@@ -165,30 +165,15 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
+       protected function getExamplesMessages() {
                return array(
-                       'namespace' => 'Return pages in these namespaces only',
-                       'limit' => 'Limit how many random pages will be returned',
-                       'redirect' => 'Load a random redirect instead of a random page'
+                       'action=query&list=random&rnnamespace=0&rnlimit=2'
+                               => 'apihelp-query+random-example-simple',
+                       'action=query&generator=random&grnnamespace=0&grnlimit=2&prop=info'
+                               => 'apihelp-query+random-example-generator',
                );
        }
 
-       public function getDescription() {
-               return array(
-                       'Get a set of random pages.',
-                       'NOTE: Pages are listed in a fixed sequence, only the starting point is random.',
-                       '      This means that if, for example, "Main Page" is the first random page on',
-                       '      your list, "List of fictional monkeys" will *always* be second, "List of',
-                       '      people on stamps of Vanuatu" third, etc.',
-                       'NOTE: If the number of pages in the namespace is lower than rnlimit, you will',
-                       '      get fewer pages. You will not get the same page twice.'
-               );
-       }
-
-       public function getExamples() {
-               return 'api.php?action=query&list=random&rnnamespace=0&rnlimit=2';
-       }
-
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Random';
        }
index 8ce6b55..e20380e 100644 (file)
@@ -47,6 +47,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
         * Get an array mapping token names to their handler functions.
         * The prototype for a token function is func($pageid, $title, $rc)
         * it should return a token or false (permission denied)
+        * @deprecated since 1.24
         * @return array Array(tokenname => function)
         */
        protected function getTokenFunctions() {
@@ -69,6 +70,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
        }
 
        /**
+        * @deprecated since 1.24
         * @param int $pageid
         * @param Title $title
         * @param RecentChange|null $rc
@@ -623,7 +625,8 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
@@ -657,6 +660,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                )
                        ),
                        'token' => array(
+                               ApiBase::PARAM_DEPRECATED => true,
                                ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ),
                                ApiBase::PARAM_ISMULTI => true
                        ),
@@ -693,57 +697,18 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                )
                        ),
                        'toponly' => false,
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'start' => 'The timestamp to start enumerating from',
-                       'end' => 'The timestamp to end enumerating',
-                       'dir' => $this->getDirectionDescription( $p ),
-                       'namespace' => 'Filter log entries to only this namespace(s)',
-                       'user' => 'Only list changes by this user',
-                       'excludeuser' => 'Don\'t list changes by this user',
-                       'prop' => array(
-                               'Include additional pieces of information',
-                               ' user           - Adds the user responsible for the edit and tags if they are an IP',
-                               ' userid         - Adds the user id responsible for the edit',
-                               ' comment        - Adds the comment for the edit',
-                               ' parsedcomment  - Adds the parsed comment for the edit',
-                               ' flags          - Adds flags for the edit',
-                               ' timestamp      - Adds timestamp of the edit',
-                               ' title          - Adds the page title of the edit',
-                               ' ids            - Adds the page ID, recent changes ID and the new and old revision ID',
-                               ' sizes          - Adds the new and old page length in bytes',
-                               ' redirect       - Tags edit if page is a redirect',
-                               ' patrolled      - Tags patrollable edits as being patrolled or unpatrolled',
-                               ' loginfo        - Adds log information (logid, logtype, etc) to log entries',
-                               ' tags           - Lists tags for the entry',
-                               ' sha1           - Adds the content checksum for entries associated with a revision',
-                       ),
-                       'token' => 'Which tokens to obtain for each change',
-                       'show' => array(
-                               'Show only items that meet this criteria.',
-                               "For example, to see only minor edits done by logged-in users, set {$p}show=minor|!anon"
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'type' => 'Which types of changes to show',
-                       'limit' => 'How many total changes to return',
-                       'tag' => 'Only list changes tagged with this tag',
-                       'toponly' => 'Only list changes which are the latest revision',
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return 'Enumerate recent changes.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=recentchanges'
+                       'action=query&list=recentchanges'
+                               => 'apihelp-query+recentchanges-example-simple',
+                       'action=query&generator=recentchanges&grcshow=!patrolled&prop=info'
+                               => 'apihelp-query+recentchanges-example-generator',
                );
        }
 
diff --git a/includes/api/ApiQueryRedirects.php b/includes/api/ApiQueryRedirects.php
deleted file mode 100644 (file)
index afb2c56..0000000
+++ /dev/null
@@ -1,270 +0,0 @@
-<?php
-/**
- * API module to return redirects to a page
- *
- * Created on Dec 30, 2013
- *
- * Copyright © 2013 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.23
- */
-
-/**
- * This query lists redirects to the given pages.
- *
- * @ingroup API
- */
-class ApiQueryRedirects extends ApiQueryGeneratorBase {
-
-       public function __construct( ApiQuery $query, $moduleName ) {
-               parent::__construct( $query, $moduleName, 'rd' );
-       }
-
-       public function execute() {
-               $this->run();
-       }
-
-       public function executeGenerator( $resultPageSet ) {
-               $this->run( $resultPageSet );
-       }
-
-       /**
-        * @param ApiPageSet $resultPageSet
-        */
-       private function run( ApiPageSet $resultPageSet = null ) {
-               $db = $this->getDB();
-               $params = $this->extractRequestParams();
-               $emptyString = $db->addQuotes( '' );
-
-               $pageSet = $this->getPageSet();
-               $titles = $pageSet->getGoodTitles() + $pageSet->getMissingTitles();
-
-               if ( !is_null( $params['continue'] ) ) {
-                       $cont = explode( '|', $params['continue'] );
-                       $this->dieContinueUsageIf( count( $cont ) != 3 );
-                       $rd_namespace = (int)$cont[0];
-                       $this->dieContinueUsageIf( $rd_namespace != $cont[0] );
-                       $rd_title = $db->addQuotes( $cont[1] );
-                       $rd_from = (int)$cont[2];
-                       $this->dieContinueUsageIf( $rd_from != $cont[2] );
-                       $this->addWhere(
-                               "rd_namespace > $rd_namespace OR " .
-                               "(rd_namespace = $rd_namespace AND " .
-                               "(rd_title > $rd_title OR " .
-                               "(rd_title = $rd_title AND " .
-                               "rd_from >= $rd_from)))"
-                       );
-
-                       // Remove titles that we're past already
-                       $titles = array_filter( $titles, function ( $t ) use ( $rd_namespace, $rd_title ) {
-                               $ns = $t->getNamespace();
-                               return ( $ns > $rd_namespace ||
-                                       $ns == $rd_namespace && $t->getDBKey() >= $rd_title
-                               );
-                       } );
-               }
-
-               if ( !$titles ) {
-                       return; // nothing to do
-               }
-
-               $this->addTables( array( 'redirect', 'page' ) );
-               $this->addFields( array(
-                       'rd_from',
-                       'rd_namespace',
-                       'rd_title',
-               ) );
-
-               if ( is_null( $resultPageSet ) ) {
-                       $prop = array_flip( $params['prop'] );
-                       $fld_pageid = isset( $prop['pageid'] );
-                       $fld_title = isset( $prop['title'] );
-                       $fld_fragment = isset( $prop['fragment'] );
-
-                       $this->addFieldsIf( 'rd_fragment', $fld_fragment );
-                       $this->addFieldsIf( array( 'page_namespace', 'page_title' ), $fld_title );
-               } else {
-                       $this->addFields( array( 'page_namespace', 'page_title' ) );
-               }
-
-               $lb = new LinkBatch( $titles );
-               $this->addWhere( array(
-                       'rd_from = page_id',
-                       "rd_interwiki = $emptyString OR rd_interwiki IS NULL",
-                       $lb->constructSet( 'rd', $db ),
-               ) );
-
-               if ( $params['show'] !== null ) {
-                       $show = array_flip( $params['show'] );
-                       if ( isset( $show['fragment'] ) && isset( $show['!fragment'] ) ) {
-                               $this->dieUsageMsg( 'show' );
-                       }
-                       $this->addWhereIf( "rd_fragment != $emptyString", isset( $show['fragment'] ) );
-                       $this->addWhereIf(
-                               "rd_fragment = $emptyString OR rd_fragment IS NULL",
-                               isset( $show['!fragment'] )
-                       );
-               }
-
-               $map = $pageSet->getAllTitlesByNamespace();
-
-               // Why, MySQL? Why do you do this to us?
-               $sortby = array();
-               if ( count( $map ) > 1 ) {
-                       $sortby[] = 'rd_namespace';
-               }
-               $theTitle = null;
-               foreach ( $map as $nsTitles ) {
-                       reset( $nsTitles );
-                       $key = key( $nsTitles );
-                       if ( $theTitle === null ) {
-                               $theTitle = $key;
-                       }
-                       if ( count( $nsTitles ) > 1 || $key !== $theTitle ) {
-                               $sortby[] = 'rd_title';
-                               break;
-                       }
-               }
-               $sortby[] = 'rd_from';
-               $this->addOption( 'ORDER BY', $sortby );
-
-               $this->addOption( 'LIMIT', $params['limit'] + 1 );
-
-               $res = $this->select( __METHOD__ );
-
-               if ( is_null( $resultPageSet ) ) {
-                       $count = 0;
-                       foreach ( $res as $row ) {
-                               if ( ++$count > $params['limit'] ) {
-                                       // We've reached the one extra which shows that
-                                       // there are additional pages to be had. Stop here...
-                                       $this->setContinueEnumParameter( 'continue',
-                                               "$row->rd_namespace|$row->rd_title|$row->rd_from"
-                                       );
-                                       break;
-                               }
-
-                               # Get the ID of the current page
-                               $id = $map[$row->rd_namespace][$row->rd_title];
-
-                               $vals = array();
-                               if ( $fld_pageid ) {
-                                       $vals['pageid'] = $row->rd_from;
-                               }
-                               if ( $fld_title ) {
-                                       ApiQueryBase::addTitleInfo( $vals,
-                                               Title::makeTitle( $row->page_namespace, $row->page_title )
-                                       );
-                               }
-                               if ( $fld_fragment && $row->rd_fragment !== null && $row->rd_fragment !== '' ) {
-                                       $vals['fragment'] = $row->rd_fragment;
-                               }
-                               $fit = $this->addPageSubItem( $id, $vals );
-                               if ( !$fit ) {
-                                       $this->setContinueEnumParameter( 'continue',
-                                               "$row->rd_namespace|$row->rd_title|$row->rd_from"
-                                       );
-                                       break;
-                               }
-                       }
-               } else {
-                       $titles = array();
-                       $count = 0;
-                       foreach ( $res as $row ) {
-                               if ( ++$count > $params['limit'] ) {
-                                       // We've reached the one extra which shows that
-                                       // there are additional pages to be had. Stop here...
-                                       $this->setContinueEnumParameter( 'continue',
-                                               "$row->rd_namespace|$row->rd_title|$row->rd_from"
-                                       );
-                                       break;
-                               }
-                               $titles[] = Title::makeTitle( $row->page_namespace, $row->page_title );
-                       }
-                       $resultPageSet->populateFromTitles( $titles );
-               }
-       }
-
-       public function getCacheMode( $params ) {
-               return 'public';
-       }
-
-       public function getAllowedParams() {
-               return array(
-                       'prop' => array(
-                               ApiBase::PARAM_TYPE => array(
-                                       'pageid',
-                                       'title',
-                                       'fragment',
-                               ),
-                               ApiBase::PARAM_ISMULTI => true,
-                               ApiBase::PARAM_DFLT => 'pageid|title',
-                       ),
-                       'show' => array(
-                               ApiBase::PARAM_TYPE => array(
-                                       'fragment', '!fragment',
-                               ),
-                               ApiBase::PARAM_ISMULTI => true,
-                       ),
-                       'limit' => array(
-                               ApiBase::PARAM_DFLT => 10,
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
-                       ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'prop' => array(
-                               'Which properties to get:',
-                               ' pageid   - Page id of each redirect',
-                               ' title    - Title of each redirect',
-                               ' fragment - Fragment of each redirect, if any',
-                       ),
-                       'show' => array(
-                               'Show only items that meet this criteria.',
-                               ' fragment  - Only show redirects with a fragment',
-                               ' !fragment - Only show redirects without a fragment',
-                       ),
-                       'limit' => 'How many redirects to return',
-                       'continue' => 'When more results are available, use this to continue',
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns all redirects to the given page(s).';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=query&prop=redirects&titles=Main%20Page'
-                               => 'Get a list of redirects to the [[Main Page]]',
-                       'api.php?action=query&generator=redirects&titles=Main%20Page&prop=info'
-                               => 'Get information about all redirects to the [[Main Page]]',
-               );
-       }
-
-       public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#redirects_.2F_rd';
-       }
-}
index 627de55..2e980f3 100644 (file)
  *
  * @ingroup API
  */
-class ApiQueryRevisions extends ApiQueryBase {
+class ApiQueryRevisions extends ApiQueryRevisionsBase {
 
-       private $diffto, $difftotext, $expandTemplates, $generateXML, $section,
-               $token, $parseContent, $contentFormat;
+       private $token = null;
 
        public function __construct( ApiQuery $query, $moduleName ) {
                parent::__construct( $query, $moduleName, 'rv' );
        }
 
-       private $fld_ids = false, $fld_flags = false, $fld_timestamp = false,
-               $fld_size = false, $fld_sha1 = false, $fld_comment = false,
-               $fld_parsedcomment = false, $fld_user = false, $fld_userid = false,
-               $fld_content = false, $fld_tags = false, $fld_contentmodel = false;
-
        private $tokenFunctions;
 
+       /** @deprecated since 1.24 */
        protected function getTokenFunctions() {
                // tokenname => function
                // function prototype is func($pageid, $title, $rev)
@@ -72,6 +67,7 @@ class ApiQueryRevisions extends ApiQueryBase {
        }
 
        /**
+        * @deprecated since 1.24
         * @param int $pageid
         * @param Title $title
         * @param Revision $rev
@@ -87,7 +83,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                        array( $title->getPrefixedText(), $rev->getUserText() ) );
        }
 
-       public function execute() {
+       protected function run( ApiPageSet $resultPageSet = null ) {
                $params = $this->extractRequestParams( false );
 
                // If any of those parameters are used, work in 'enumeration' mode.
@@ -105,6 +101,11 @@ class ApiQueryRevisions extends ApiQueryBase {
 
                // Optimization -- nothing to do
                if ( $revCount === 0 && $pageCount === 0 ) {
+                       // Nothing to do
+                       return;
+               }
+               if ( $revCount > 0 && count( $pageSet->getLiveRevisionIDs() ) === 0 ) {
+                       // We're in revisions mode but all given revisions are deleted
                        return;
                }
 
@@ -125,75 +126,32 @@ class ApiQueryRevisions extends ApiQueryBase {
                        );
                }
 
-               if ( !is_null( $params['difftotext'] ) ) {
-                       $this->difftotext = $params['difftotext'];
-               } elseif ( !is_null( $params['diffto'] ) ) {
-                       if ( $params['diffto'] == 'cur' ) {
-                               $params['diffto'] = 0;
-                       }
-                       if ( ( !ctype_digit( $params['diffto'] ) || $params['diffto'] < 0 )
-                               && $params['diffto'] != 'prev' && $params['diffto'] != 'next'
-                       ) {
-                               $this->dieUsage(
-                                       'rvdiffto must be set to a non-negative number, "prev", "next" or "cur"',
-                                       'diffto'
-                               );
-                       }
-                       // Check whether the revision exists and is readable,
-                       // DifferenceEngine returns a rather ambiguous empty
-                       // string if that's not the case
-                       if ( $params['diffto'] != 0 ) {
-                               $difftoRev = Revision::newFromID( $params['diffto'] );
-                               if ( !$difftoRev ) {
-                                       $this->dieUsageMsg( array( 'nosuchrevid', $params['diffto'] ) );
-                               }
-                               if ( !$difftoRev->userCan( Revision::DELETED_TEXT, $this->getUser() ) ) {
-                                       $this->setWarning( "Couldn't diff to r{$difftoRev->getID()}: content is hidden" );
-                                       $params['diffto'] = null;
-                               }
-                       }
-                       $this->diffto = $params['diffto'];
+               // In non-enum mode, rvlimit can't be directly used. Use the maximum
+               // allowed value.
+               if ( !$enumRevMode ) {
+                       $this->setParsedLimit = false;
+                       $params['limit'] = 'max';
                }
 
                $db = $this->getDB();
-               $this->addTables( 'page' );
-               $this->addFields( Revision::selectFields() );
-               $this->addWhere( 'page_id = rev_page' );
-
-               $prop = array_flip( $params['prop'] );
-
-               // Optional fields
-               $this->fld_ids = isset( $prop['ids'] );
-               // $this->addFieldsIf('rev_text_id', $this->fld_ids); // should this be exposed?
-               $this->fld_flags = isset( $prop['flags'] );
-               $this->fld_timestamp = isset( $prop['timestamp'] );
-               $this->fld_comment = isset( $prop['comment'] );
-               $this->fld_parsedcomment = isset( $prop['parsedcomment'] );
-               $this->fld_size = isset( $prop['size'] );
-               $this->fld_sha1 = isset( $prop['sha1'] );
-               $this->fld_contentmodel = isset( $prop['contentmodel'] );
-               $this->fld_userid = isset( $prop['userid'] );
-               $this->fld_user = isset( $prop['user'] );
-               $this->token = $params['token'];
-
-               if ( !empty( $params['contentformat'] ) ) {
-                       $this->contentFormat = $params['contentformat'];
-               }
-
-               $userMax = ( $this->fld_content ? ApiBase::LIMIT_SML1 : ApiBase::LIMIT_BIG1 );
-               $botMax = ( $this->fld_content ? ApiBase::LIMIT_SML2 : ApiBase::LIMIT_BIG2 );
-               $limit = $params['limit'];
-               if ( $limit == 'max' ) {
-                       $limit = $this->getMain()->canApiHighLimits() ? $botMax : $userMax;
-                       $this->getResult()->setParsedLimit( $this->getModuleName(), $limit );
-               }
+               $this->addTables( array( 'revision', 'page' ) );
+               $this->addJoinConds(
+                       array( 'page' => array( 'INNER JOIN', array( 'page_id = rev_page' ) ) )
+               );
 
-               if ( !is_null( $this->token ) || $pageCount > 0 ) {
-                       $this->addFields( Revision::selectPageFields() );
+               if ( $resultPageSet === null ) {
+                       $this->parseParameters( $params );
+                       $this->token = $params['token'];
+                       $this->addFields( Revision::selectFields() );
+                       if ( $this->token !== null || $pageCount > 0 ) {
+                               $this->addFields( Revision::selectPageFields() );
+                       }
+               } else {
+                       $this->limit = $this->getParameter( 'limit' ) ?: 10;
+                       $this->addFields( array( 'rev_id', 'rev_page' ) );
                }
 
-               if ( isset( $prop['tags'] ) ) {
-                       $this->fld_tags = true;
+               if ( $this->fld_tags ) {
                        $this->addTables( 'tag_summary' );
                        $this->addJoinConds(
                                array( 'tag_summary' => array( 'LEFT JOIN', array( 'rev_id=ts_rev_id' ) ) )
@@ -209,7 +167,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                        $this->addWhereFld( 'ct_tag', $params['tag'] );
                }
 
-               if ( isset( $prop['content'] ) || !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) {
+               if ( $this->fld_content || !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) {
                        // For each page we will request, the user must have read rights for that page
                        $user = $this->getUser();
                        /** @var $title Title */
@@ -222,28 +180,11 @@ class ApiQueryRevisions extends ApiQueryBase {
                        }
 
                        $this->addTables( 'text' );
-                       $this->addWhere( 'rev_text_id=old_id' );
+                       $this->addJoinConds(
+                               array( 'text' => array( 'INNER JOIN', array( 'rev_text_id=old_id' ) ) )
+                       );
                        $this->addFields( 'old_id' );
                        $this->addFields( Revision::selectTextFields() );
-
-                       $this->fld_content = isset( $prop['content'] );
-
-                       $this->expandTemplates = $params['expandtemplates'];
-                       $this->generateXML = $params['generatexml'];
-                       $this->parseContent = $params['parse'];
-                       if ( $this->parseContent ) {
-                               // Must manually initialize unset limit
-                               if ( is_null( $limit ) ) {
-                                       $limit = 1;
-                               }
-                               // We are only going to parse 1 revision per request
-                               $this->validateLimit( 'limit', $limit, 1, 1, 1 );
-                       }
-                       if ( isset( $params['section'] ) ) {
-                               $this->section = $params['section'];
-                       } else {
-                               $this->section = false;
-                       }
                }
 
                // add user name, if needed
@@ -253,9 +194,6 @@ class ApiQueryRevisions extends ApiQueryBase {
                        $this->addFields( Revision::selectUserFields() );
                }
 
-               // Bug 24166 - API error when using rvprop=tags
-               $this->addTables( 'revision' );
-
                if ( $enumRevMode ) {
                        // This is mostly to prevent parameter errors (and optimize SQL?)
                        if ( !is_null( $params['startid'] ) && !is_null( $params['start'] ) ) {
@@ -298,12 +236,6 @@ class ApiQueryRevisions extends ApiQueryBase {
                                        $params['start'], $params['end'], false );
                        }
 
-                       // must manually initialize unset limit
-                       if ( is_null( $limit ) ) {
-                               $limit = 10;
-                       }
-                       $this->validateLimit( 'limit', $limit, 1, $userMax, $botMax );
-
                        // There is only one ID, use it
                        $ids = array_keys( $pageSet->getGoodTitles() );
                        $this->addWhereFld( 'rev_page', reset( $ids ) );
@@ -328,11 +260,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                                }
                        }
                } elseif ( $revCount > 0 ) {
-                       $max = $this->getMain()->canApiHighLimits() ? $botMax : $userMax;
-                       $revs = $pageSet->getRevisionIDs();
-                       if ( self::truncateArray( $revs, $max ) ) {
-                               $this->setWarning( "Too many values supplied for parameter 'revids': the limit is $max" );
-                       }
+                       $revs = $pageSet->getLiveRevisionIDs();
 
                        // Get all revision IDs
                        $this->addWhereFld( 'rev_id', array_keys( $revs ) );
@@ -341,19 +269,11 @@ class ApiQueryRevisions extends ApiQueryBase {
                                $this->addWhere( 'rev_id >= ' . intval( $params['continue'] ) );
                        }
                        $this->addOption( 'ORDER BY', 'rev_id' );
-
-                       // assumption testing -- we should never get more then $revCount rows.
-                       $limit = $revCount;
                } elseif ( $pageCount > 0 ) {
-                       $max = $this->getMain()->canApiHighLimits() ? $botMax : $userMax;
                        $titles = $pageSet->getGoodTitles();
-                       if ( self::truncateArray( $titles, $max ) ) {
-                               $this->setWarning( "Too many values supplied for parameter 'titles': the limit is $max" );
-                       }
 
                        // When working in multi-page non-enumeration mode,
                        // limit to the latest revision only
-                       $this->addWhere( 'page_id=rev_page' );
                        $this->addWhere( 'page_latest=rev_id' );
 
                        // Get all page IDs
@@ -376,31 +296,20 @@ class ApiQueryRevisions extends ApiQueryBase {
                                'rev_page',
                                'rev_id'
                        ) );
-
-                       // assumption testing -- we should never get more then $pageCount rows.
-                       $limit = $pageCount;
                } else {
                        ApiBase::dieDebug( __METHOD__, 'param validation?' );
                }
 
-               $this->addOption( 'LIMIT', $limit + 1 );
+               $this->addOption( 'LIMIT', $this->limit + 1 );
 
                $count = 0;
+               $generated = array();
                $res = $this->select( __METHOD__ );
 
                foreach ( $res as $row ) {
-                       if ( ++$count > $limit ) {
+                       if ( ++$count > $this->limit ) {
                                // We've reached the one extra which shows that there are
                                // additional pages to be had. Stop here...
-                               if ( !$enumRevMode ) {
-                                       ApiBase::dieDebug( __METHOD__, 'Got more rows then expected' ); // bug report
-                               }
-                               $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
-                               break;
-                       }
-
-                       $fit = $this->addPageSubItem( $row->rev_page, $this->extractRowInfo( $row ), 'rev' );
-                       if ( !$fit ) {
                                if ( $enumRevMode ) {
                                        $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
                                } elseif ( $revCount > 0 ) {
@@ -411,433 +320,124 @@ class ApiQueryRevisions extends ApiQueryBase {
                                }
                                break;
                        }
-               }
-       }
-
-       private function extractRowInfo( $row ) {
-               $revision = new Revision( $row );
-               $title = $revision->getTitle();
-               $user = $this->getUser();
-               $vals = array();
-               $anyHidden = false;
-
-               if ( $this->fld_ids ) {
-                       $vals['revid'] = intval( $revision->getId() );
-                       // $vals['oldid'] = intval( $row->rev_text_id ); // todo: should this be exposed?
-                       if ( !is_null( $revision->getParentId() ) ) {
-                               $vals['parentid'] = intval( $revision->getParentId() );
-                       }
-               }
-
-               if ( $this->fld_flags && $revision->isMinor() ) {
-                       $vals['minor'] = '';
-               }
-
-               if ( $this->fld_user || $this->fld_userid ) {
-                       if ( $revision->isDeleted( Revision::DELETED_USER ) ) {
-                               $vals['userhidden'] = '';
-                               $anyHidden = true;
-                       }
-                       if ( $revision->userCan( Revision::DELETED_USER, $user ) ) {
-                               if ( $this->fld_user ) {
-                                       $vals['user'] = $revision->getRawUserText();
-                               }
-                               $userid = $revision->getRawUser();
-                               if ( !$userid ) {
-                                       $vals['anon'] = '';
-                               }
-
-                               if ( $this->fld_userid ) {
-                                       $vals['userid'] = $userid;
-                               }
-                       }
-               }
-
-               if ( $this->fld_timestamp ) {
-                       $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $revision->getTimestamp() );
-               }
-
-               if ( $this->fld_size ) {
-                       if ( !is_null( $revision->getSize() ) ) {
-                               $vals['size'] = intval( $revision->getSize() );
-                       } else {
-                               $vals['size'] = 0;
-                       }
-               }
-
-               if ( $this->fld_sha1 ) {
-                       if ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
-                               $vals['sha1hidden'] = '';
-                               $anyHidden = true;
-                       }
-                       if ( $revision->userCan( Revision::DELETED_TEXT, $user ) ) {
-                               if ( $revision->getSha1() != '' ) {
-                                       $vals['sha1'] = wfBaseConvert( $revision->getSha1(), 36, 16, 40 );
-                               } else {
-                                       $vals['sha1'] = '';
-                               }
-                       }
-               }
-
-               if ( $this->fld_contentmodel ) {
-                       $vals['contentmodel'] = $revision->getContentModel();
-               }
-
-               if ( $this->fld_comment || $this->fld_parsedcomment ) {
-                       if ( $revision->isDeleted( Revision::DELETED_COMMENT ) ) {
-                               $vals['commenthidden'] = '';
-                               $anyHidden = true;
-                       }
-                       if ( $revision->userCan( Revision::DELETED_COMMENT, $user ) ) {
-                               $comment = $revision->getRawComment();
-
-                               if ( $this->fld_comment ) {
-                                       $vals['comment'] = $comment;
-                               }
-
-                               if ( $this->fld_parsedcomment ) {
-                                       $vals['parsedcomment'] = Linker::formatComment( $comment, $title );
-                               }
-                       }
-               }
 
-               if ( $this->fld_tags ) {
-                       if ( $row->ts_tags ) {
-                               $tags = explode( ',', $row->ts_tags );
-                               $this->getResult()->setIndexedTagName( $tags, 'tag' );
-                               $vals['tags'] = $tags;
+                       if ( $resultPageSet !== null ) {
+                               $generated[] = $row->rev_id;
                        } else {
-                               $vals['tags'] = array();
-                       }
-               }
-
-               if ( !is_null( $this->token ) ) {
-                       $tokenFunctions = $this->getTokenFunctions();
-                       foreach ( $this->token as $t ) {
-                               $val = call_user_func( $tokenFunctions[$t], $title->getArticleID(), $title, $revision );
-                               if ( $val === false ) {
-                                       $this->setWarning( "Action '$t' is not allowed for the current user" );
-                               } else {
-                                       $vals[$t . 'token'] = $val;
-                               }
-                       }
-               }
-
-               $content = null;
-               global $wgParser;
-               if ( $this->fld_content || !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) {
-                       $content = $revision->getContent( Revision::FOR_THIS_USER, $this->getUser() );
-                       // Expand templates after getting section content because
-                       // template-added sections don't count and Parser::preprocess()
-                       // will have less input
-                       if ( $content && $this->section !== false ) {
-                               $content = $content->getSection( $this->section, false );
-                               if ( !$content ) {
-                                       $this->dieUsage(
-                                               "There is no section {$this->section} in r" . $revision->getId(),
-                                               'nosuchsection'
-                                       );
-                               }
-                       }
-                       if ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
-                               $vals['texthidden'] = '';
-                               $anyHidden = true;
-                       } elseif ( !$content ) {
-                               $vals['textmissing'] = '';
-                       }
-               }
-               if ( $this->fld_content && $content ) {
-                       $text = null;
-
-                       if ( $this->generateXML ) {
-                               if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
-                                       $t = $content->getNativeData(); # note: don't set $text
-
-                                       $wgParser->startExternalParse(
-                                               $title,
-                                               ParserOptions::newFromContext( $this->getContext() ),
-                                               OT_PREPROCESS
-                                       );
-                                       $dom = $wgParser->preprocessToDom( $t );
-                                       if ( is_callable( array( $dom, 'saveXML' ) ) ) {
-                                               $xml = $dom->saveXML();
-                                       } else {
-                                               $xml = $dom->__toString();
+                               $revision = new Revision( $row );
+                               $rev = $this->extractRevisionInfo( $revision, $row );
+
+                               if ( $this->token !== null ) {
+                                       $title = $revision->getTitle();
+                                       $tokenFunctions = $this->getTokenFunctions();
+                                       foreach ( $this->token as $t ) {
+                                               $val = call_user_func( $tokenFunctions[$t], $title->getArticleID(), $title, $revision );
+                                               if ( $val === false ) {
+                                                       $this->setWarning( "Action '$t' is not allowed for the current user" );
+                                               } else {
+                                                       $rev[$t . 'token'] = $val;
+                                               }
                                        }
-                                       $vals['parsetree'] = $xml;
-                               } else {
-                                       $this->setWarning( "Conversion to XML is supported for wikitext only, " .
-                                               $title->getPrefixedDBkey() .
-                                               " uses content model " . $content->getModel() );
-                               }
-                       }
-
-                       if ( $this->expandTemplates && !$this->parseContent ) {
-                               #XXX: implement template expansion for all content types in ContentHandler?
-                               if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
-                                       $text = $content->getNativeData();
-
-                                       $text = $wgParser->preprocess(
-                                               $text,
-                                               $title,
-                                               ParserOptions::newFromContext( $this->getContext() )
-                                       );
-                               } else {
-                                       $this->setWarning( "Template expansion is supported for wikitext only, " .
-                                               $title->getPrefixedDBkey() .
-                                               " uses content model " . $content->getModel() );
-
-                                       $text = false;
                                }
-                       }
-                       if ( $this->parseContent ) {
-                               $po = $content->getParserOutput(
-                                       $title,
-                                       $revision->getId(),
-                                       ParserOptions::newFromContext( $this->getContext() )
-                               );
-                               $text = $po->getText();
-                       }
-
-                       if ( $text === null ) {
-                               $format = $this->contentFormat ? $this->contentFormat : $content->getDefaultFormat();
-                               $model = $content->getModel();
-
-                               if ( !$content->isSupportedFormat( $format ) ) {
-                                       $name = $title->getPrefixedDBkey();
-
-                                       $this->dieUsage( "The requested format {$this->contentFormat} is not supported " .
-                                               "for content model $model used by $name", 'badformat' );
-                               }
-
-                               $text = $content->serialize( $format );
 
-                               // always include format and model.
-                               // Format is needed to deserialize, model is needed to interpret.
-                               $vals['contentformat'] = $format;
-                               $vals['contentmodel'] = $model;
-                       }
-
-                       if ( $text !== false ) {
-                               ApiResult::setContent( $vals, $text );
-                       }
-               }
-
-               if ( $content && ( !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) ) {
-                       static $n = 0; // Number of uncached diffs we've had
-
-                       if ( $n < $this->getConfig()->get( 'APIMaxUncachedDiffs' ) ) {
-                               $vals['diff'] = array();
-                               $context = new DerivativeContext( $this->getContext() );
-                               $context->setTitle( $title );
-                               $handler = $revision->getContentHandler();
-
-                               if ( !is_null( $this->difftotext ) ) {
-                                       $model = $title->getContentModel();
-
-                                       if ( $this->contentFormat
-                                               && !ContentHandler::getForModelID( $model )->isSupportedFormat( $this->contentFormat )
-                                       ) {
-
-                                               $name = $title->getPrefixedDBkey();
-
-                                               $this->dieUsage( "The requested format {$this->contentFormat} is not supported for " .
-                                                       "content model $model used by $name", 'badformat' );
+                               $fit = $this->addPageSubItem( $row->rev_page, $rev, 'rev' );
+                               if ( !$fit ) {
+                                       if ( $enumRevMode ) {
+                                               $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
+                                       } elseif ( $revCount > 0 ) {
+                                               $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
+                                       } else {
+                                               $this->setContinueEnumParameter( 'continue', intval( $row->rev_page ) .
+                                                       '|' . intval( $row->rev_id ) );
                                        }
-
-                                       $difftocontent = ContentHandler::makeContent(
-                                               $this->difftotext,
-                                               $title,
-                                               $model,
-                                               $this->contentFormat
-                                       );
-
-                                       $engine = $handler->createDifferenceEngine( $context );
-                                       $engine->setContent( $content, $difftocontent );
-                               } else {
-                                       $engine = $handler->createDifferenceEngine( $context, $revision->getID(), $this->diffto );
-                                       $vals['diff']['from'] = $engine->getOldid();
-                                       $vals['diff']['to'] = $engine->getNewid();
-                               }
-                               $difftext = $engine->getDiffBody();
-                               ApiResult::setContent( $vals['diff'], $difftext );
-                               if ( !$engine->wasCacheHit() ) {
-                                       $n++;
+                                       break;
                                }
-                       } else {
-                               $vals['diff']['notcached'] = '';
                        }
                }
 
-               if ( $anyHidden && $revision->isDeleted( Revision::DELETED_RESTRICTED ) ) {
-                       $vals['suppressed'] = '';
+               if ( $resultPageSet !== null ) {
+                       $resultPageSet->populateFromRevisionIDs( $generated );
                }
-
-               return $vals;
        }
 
        public function getCacheMode( $params ) {
                if ( isset( $params['token'] ) ) {
                        return 'private';
                }
-               if ( $this->userCanSeeRevDel() ) {
-                       return 'private';
-               }
-               if ( !is_null( $params['prop'] ) && in_array( 'parsedcomment', $params['prop'] ) ) {
-                       // formatComment() calls wfMessage() among other things
-                       return 'anon-public-user-private';
-               }
-
-               return 'public';
+               return parent::getCacheMode( $params );
        }
 
        public function getAllowedParams() {
-               return array(
-                       'prop' => array(
-                               ApiBase::PARAM_ISMULTI => true,
-                               ApiBase::PARAM_DFLT => 'ids|timestamp|flags|comment|user',
-                               ApiBase::PARAM_TYPE => array(
-                                       'ids',
-                                       'flags',
-                                       'timestamp',
-                                       'user',
-                                       'userid',
-                                       'size',
-                                       'sha1',
-                                       'contentmodel',
-                                       'comment',
-                                       'parsedcomment',
-                                       'content',
-                                       'tags'
-                               )
-                       ),
-                       'limit' => array(
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
-                       ),
+               $ret = parent::getAllowedParams() + array(
                        'startid' => array(
-                               ApiBase::PARAM_TYPE => 'integer'
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'endid' => array(
-                               ApiBase::PARAM_TYPE => 'integer'
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'start' => array(
-                               ApiBase::PARAM_TYPE => 'timestamp'
+                               ApiBase::PARAM_TYPE => 'timestamp',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'end' => array(
-                               ApiBase::PARAM_TYPE => 'timestamp'
+                               ApiBase::PARAM_TYPE => 'timestamp',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'dir' => array(
                                ApiBase::PARAM_DFLT => 'older',
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'user' => array(
-                               ApiBase::PARAM_TYPE => 'user'
+                               ApiBase::PARAM_TYPE => 'user',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'excludeuser' => array(
-                               ApiBase::PARAM_TYPE => 'user'
+                               ApiBase::PARAM_TYPE => 'user',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'tag' => null,
-                       'expandtemplates' => false,
-                       'generatexml' => false,
-                       'parse' => false,
-                       'section' => null,
                        'token' => array(
+                               ApiBase::PARAM_DEPRECATED => true,
                                ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ),
                                ApiBase::PARAM_ISMULTI => true
                        ),
-                       'continue' => null,
-                       'diffto' => null,
-                       'difftotext' => null,
-                       'contentformat' => array(
-                               ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
-                               ApiBase::PARAM_DFLT => null
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
                );
-       }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
+               $ret['limit'][ApiBase::PARAM_HELP_MSG_INFO] = array( array( 'singlepageonly' ) );
 
-               return array(
-                       'prop' => array(
-                               'Which properties to get for each revision:',
-                               ' ids            - The ID of the revision',
-                               ' flags          - Revision flags (minor)',
-                               ' timestamp      - The timestamp of the revision',
-                               ' user           - User that made the revision',
-                               ' userid         - User id of revision creator',
-                               ' size           - Length (bytes) of the revision',
-                               ' sha1           - SHA-1 (base 16) of the revision',
-                               ' contentmodel   - Content model id',
-                               ' comment        - Comment by the user for revision',
-                               ' parsedcomment  - Parsed comment by the user for the revision',
-                               ' content        - Text of the revision',
-                               ' tags           - Tags for the revision',
-                       ),
-                       'limit' => 'Limit how many revisions will be returned (enum)',
-                       'startid' => 'From which revision id to start enumeration (enum)',
-                       'endid' => 'Stop revision enumeration on this revid (enum)',
-                       'start' => 'From which revision timestamp to start enumeration (enum)',
-                       'end' => 'Enumerate up to this timestamp (enum)',
-                       'dir' => $this->getDirectionDescription( $p, ' (enum)' ),
-                       'user' => 'Only include revisions made by user (enum)',
-                       'excludeuser' => 'Exclude revisions made by user (enum)',
-                       'expandtemplates' => "Expand templates in revision content (requires {$p}prop=content)",
-                       'generatexml' => "Generate XML parse tree for revision content (requires {$p}prop=content)",
-                       'parse' => array( "Parse revision content (requires {$p}prop=content).",
-                               'For performance reasons if this option is used, rvlimit is enforced to 1.' ),
-                       'section' => 'Only retrieve the content of this section number',
-                       'token' => 'Which tokens to obtain for each revision',
-                       'continue' => 'When more results are available, use this to continue',
-                       'diffto' => array( 'Revision ID to diff each revision to.',
-                               'Use "prev", "next" and "cur" for the previous, next and current revision respectively' ),
-                       'difftotext' => array(
-                               'Text to diff each revision to. Only diffs a limited number of revisions.',
-                               "Overrides {$p}diffto. If {$p}section is set, only that section will be",
-                               'diffed against this text',
-                       ),
-                       'tag' => 'Only list revisions tagged with this tag',
-                       'contentformat' => 'Serialization format used for difftotext and expected for output of content',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Get revision information.',
-                       'May be used in several ways:',
-                       ' 1) Get data about a set of pages (last revision), by setting titles or pageids parameter.',
-                       ' 2) Get revisions for one given page, by using titles/pageids with start/end/limit params.',
-                       ' 3) Get data about a set of revisions by setting their IDs with revids parameter.',
-                       'All parameters marked as (enum) may only be used with a single page (#2).'
-               );
+               return $ret;
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'Get data with content for the last revision of titles "API" and "Main Page"',
-                       '  api.php?action=query&prop=revisions&titles=API|Main%20Page&' .
-                               'rvprop=timestamp|user|comment|content',
-                       'Get last 5 revisions of the "Main Page"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
-                               'rvprop=timestamp|user|comment',
-                       'Get first 5 revisions of the "Main Page"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
-                               'rvprop=timestamp|user|comment&rvdir=newer',
-                       'Get first 5 revisions of the "Main Page" made after 2006-05-01',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
-                               'rvprop=timestamp|user|comment&rvdir=newer&rvstart=20060501000000',
-                       'Get first 5 revisions of the "Main Page" that were not made made by anonymous user "127.0.0.1"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
-                               'rvprop=timestamp|user|comment&rvexcludeuser=127.0.0.1',
-                       'Get first 5 revisions of the "Main Page" that were made by the user "MediaWiki default"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
-                               'rvprop=timestamp|user|comment&rvuser=MediaWiki%20default',
+                       'action=query&prop=revisions&titles=API|Main%20Page&' .
+                               'rvprop=timestamp|user|comment|content'
+                               => 'apihelp-query+revisions-example-content',
+                       'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment'
+                               => 'apihelp-query+revisions-example-last5',
+                       'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvdir=newer'
+                               => 'apihelp-query+revisions-example-first5',
+                       'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvdir=newer&rvstart=2006-05-01T00:00:00Z'
+                               => 'apihelp-query+revisions-example-first5-after',
+                       'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvexcludeuser=127.0.0.1'
+                               => 'apihelp-query+revisions-example-first5-not-localhost',
+                       'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvuser=MediaWiki%20default'
+                               => 'apihelp-query+revisions-example-first5-user',
                );
        }
 
diff --git a/includes/api/ApiQueryRevisionsBase.php b/includes/api/ApiQueryRevisionsBase.php
new file mode 100644 (file)
index 0000000..3879d7b
--- /dev/null
@@ -0,0 +1,474 @@
+<?php
+/**
+ *
+ *
+ * Created on Oct 3, 2014 as a split from ApiQueryRevisions
+ *
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A base class for functions common to producing a list of revisions.
+ *
+ * @ingroup API
+ */
+abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
+
+       protected $limit, $diffto, $difftotext, $expandTemplates, $generateXML, $section,
+               $parseContent, $contentFormat, $setParsedLimit = true;
+
+       protected $fld_ids = false, $fld_flags = false, $fld_timestamp = false,
+               $fld_size = false, $fld_sha1 = false, $fld_comment = false,
+               $fld_parsedcomment = false, $fld_user = false, $fld_userid = false,
+               $fld_content = false, $fld_tags = false, $fld_contentmodel = false;
+
+       public function execute() {
+               $this->run();
+       }
+
+       public function executeGenerator( $resultPageSet ) {
+               $this->run( $resultPageSet );
+       }
+
+       /**
+        * @param ApiPageSet $resultPageSet
+        * @return void
+        */
+       abstract protected function run( ApiPageSet $resultPageSet = null );
+
+       /**
+        * Parse the parameters into the various instance fields.
+        *
+        * @param array $params
+        */
+       protected function parseParameters( $params ) {
+               if ( !is_null( $params['difftotext'] ) ) {
+                       $this->difftotext = $params['difftotext'];
+               } elseif ( !is_null( $params['diffto'] ) ) {
+                       if ( $params['diffto'] == 'cur' ) {
+                               $params['diffto'] = 0;
+                       }
+                       if ( ( !ctype_digit( $params['diffto'] ) || $params['diffto'] < 0 )
+                               && $params['diffto'] != 'prev' && $params['diffto'] != 'next'
+                       ) {
+                               $p = $this->getModulePrefix();
+                               $this->dieUsage(
+                                       "{$p}diffto must be set to a non-negative number, \"prev\", \"next\" or \"cur\"",
+                                       'diffto'
+                               );
+                       }
+                       // Check whether the revision exists and is readable,
+                       // DifferenceEngine returns a rather ambiguous empty
+                       // string if that's not the case
+                       if ( $params['diffto'] != 0 ) {
+                               $difftoRev = Revision::newFromID( $params['diffto'] );
+                               if ( !$difftoRev ) {
+                                       $this->dieUsageMsg( array( 'nosuchrevid', $params['diffto'] ) );
+                               }
+                               if ( !$difftoRev->userCan( Revision::DELETED_TEXT, $this->getUser() ) ) {
+                                       $this->setWarning( "Couldn't diff to r{$difftoRev->getID()}: content is hidden" );
+                                       $params['diffto'] = null;
+                               }
+                       }
+                       $this->diffto = $params['diffto'];
+               }
+
+               $prop = array_flip( $params['prop'] );
+
+               $this->fld_ids = isset( $prop['ids'] );
+               $this->fld_flags = isset( $prop['flags'] );
+               $this->fld_timestamp = isset( $prop['timestamp'] );
+               $this->fld_comment = isset( $prop['comment'] );
+               $this->fld_parsedcomment = isset( $prop['parsedcomment'] );
+               $this->fld_size = isset( $prop['size'] );
+               $this->fld_sha1 = isset( $prop['sha1'] );
+               $this->fld_content = isset( $prop['content'] );
+               $this->fld_contentmodel = isset( $prop['contentmodel'] );
+               $this->fld_userid = isset( $prop['userid'] );
+               $this->fld_user = isset( $prop['user'] );
+               $this->fld_tags = isset( $prop['tags'] );
+
+               if ( !empty( $params['contentformat'] ) ) {
+                       $this->contentFormat = $params['contentformat'];
+               }
+
+               $this->limit = $params['limit'];
+
+               $smallLimit = false;
+               if ( $this->fld_content || !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) {
+                       $smallLimit = true;
+                       $this->expandTemplates = $params['expandtemplates'];
+                       $this->generateXML = $params['generatexml'];
+                       $this->parseContent = $params['parse'];
+                       if ( $this->parseContent ) {
+                               // Must manually initialize unset limit
+                               if ( is_null( $this->limit ) ) {
+                                       $this->limit = 1;
+                               }
+                       }
+                       if ( isset( $params['section'] ) ) {
+                               $this->section = $params['section'];
+                       } else {
+                               $this->section = false;
+                       }
+               }
+
+               $userMax = $this->parseContent ? 1 : ( $smallLimit ? ApiBase::LIMIT_SML1 : ApiBase::LIMIT_BIG1 );
+               $botMax = $this->parseContent ? 1 : ( $smallLimit ? ApiBase::LIMIT_SML2 : ApiBase::LIMIT_BIG2 );
+               if ( $this->limit == 'max' ) {
+                       $this->limit = $this->getMain()->canApiHighLimits() ? $botMax : $userMax;
+                       if ( $this->setParsedLimit ) {
+                               $this->getResult()->setParsedLimit( $this->getModuleName(), $this->limit );
+                       }
+               }
+
+               if ( is_null( $this->limit ) ) {
+                       $this->limit = 10;
+               }
+               $this->validateLimit( 'limit', $this->limit, 1, $userMax, $botMax );
+       }
+
+       /**
+        * Extract information from the Revision
+        *
+        * @param Revision $revision
+        * @param object $row Should have a field 'ts_tags' if $this->fld_tags is set
+        * @return array
+        */
+       protected function extractRevisionInfo( Revision $revision, $row ) {
+               $title = $revision->getTitle();
+               $user = $this->getUser();
+               $vals = array();
+               $anyHidden = false;
+
+               if ( $this->fld_ids ) {
+                       $vals['revid'] = intval( $revision->getId() );
+                       if ( !is_null( $revision->getParentId() ) ) {
+                               $vals['parentid'] = intval( $revision->getParentId() );
+                       }
+               }
+
+               if ( $this->fld_flags && $revision->isMinor() ) {
+                       $vals['minor'] = '';
+               }
+
+               if ( $this->fld_user || $this->fld_userid ) {
+                       if ( $revision->isDeleted( Revision::DELETED_USER ) ) {
+                               $vals['userhidden'] = '';
+                               $anyHidden = true;
+                       }
+                       if ( $revision->userCan( Revision::DELETED_USER, $user ) ) {
+                               if ( $this->fld_user ) {
+                                       $vals['user'] = $revision->getRawUserText();
+                               }
+                               $userid = $revision->getRawUser();
+                               if ( !$userid ) {
+                                       $vals['anon'] = '';
+                               }
+
+                               if ( $this->fld_userid ) {
+                                       $vals['userid'] = $userid;
+                               }
+                       }
+               }
+
+               if ( $this->fld_timestamp ) {
+                       $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $revision->getTimestamp() );
+               }
+
+               if ( $this->fld_size ) {
+                       if ( !is_null( $revision->getSize() ) ) {
+                               $vals['size'] = intval( $revision->getSize() );
+                       } else {
+                               $vals['size'] = 0;
+                       }
+               }
+
+               if ( $this->fld_sha1 ) {
+                       if ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
+                               $vals['sha1hidden'] = '';
+                               $anyHidden = true;
+                       }
+                       if ( $revision->userCan( Revision::DELETED_TEXT, $user ) ) {
+                               if ( $revision->getSha1() != '' ) {
+                                       $vals['sha1'] = wfBaseConvert( $revision->getSha1(), 36, 16, 40 );
+                               } else {
+                                       $vals['sha1'] = '';
+                               }
+                       }
+               }
+
+               if ( $this->fld_contentmodel ) {
+                       $vals['contentmodel'] = $revision->getContentModel();
+               }
+
+               if ( $this->fld_comment || $this->fld_parsedcomment ) {
+                       if ( $revision->isDeleted( Revision::DELETED_COMMENT ) ) {
+                               $vals['commenthidden'] = '';
+                               $anyHidden = true;
+                       }
+                       if ( $revision->userCan( Revision::DELETED_COMMENT, $user ) ) {
+                               $comment = $revision->getRawComment();
+
+                               if ( $this->fld_comment ) {
+                                       $vals['comment'] = $comment;
+                               }
+
+                               if ( $this->fld_parsedcomment ) {
+                                       $vals['parsedcomment'] = Linker::formatComment( $comment, $title );
+                               }
+                       }
+               }
+
+               if ( $this->fld_tags ) {
+                       if ( $row->ts_tags ) {
+                               $tags = explode( ',', $row->ts_tags );
+                               $this->getResult()->setIndexedTagName( $tags, 'tag' );
+                               $vals['tags'] = $tags;
+                       } else {
+                               $vals['tags'] = array();
+                       }
+               }
+
+               $content = null;
+               global $wgParser;
+               if ( $this->fld_content || !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) {
+                       $content = $revision->getContent( Revision::FOR_THIS_USER, $this->getUser() );
+                       // Expand templates after getting section content because
+                       // template-added sections don't count and Parser::preprocess()
+                       // will have less input
+                       if ( $content && $this->section !== false ) {
+                               $content = $content->getSection( $this->section, false );
+                               if ( !$content ) {
+                                       $this->dieUsage(
+                                               "There is no section {$this->section} in r" . $revision->getId(),
+                                               'nosuchsection'
+                                       );
+                               }
+                       }
+                       if ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
+                               $vals['texthidden'] = '';
+                               $anyHidden = true;
+                       } elseif ( !$content ) {
+                               $vals['textmissing'] = '';
+                       }
+               }
+               if ( $this->fld_content && $content ) {
+                       $text = null;
+
+                       if ( $this->generateXML ) {
+                               if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
+                                       $t = $content->getNativeData(); # note: don't set $text
+
+                                       $wgParser->startExternalParse(
+                                               $title,
+                                               ParserOptions::newFromContext( $this->getContext() ),
+                                               Parser::OT_PREPROCESS
+                                       );
+                                       $dom = $wgParser->preprocessToDom( $t );
+                                       if ( is_callable( array( $dom, 'saveXML' ) ) ) {
+                                               $xml = $dom->saveXML();
+                                       } else {
+                                               $xml = $dom->__toString();
+                                       }
+                                       $vals['parsetree'] = $xml;
+                               } else {
+                                       $vals['badcontentformatforparsetree'] = '';
+                                       $this->setWarning( "Conversion to XML is supported for wikitext only, " .
+                                               $title->getPrefixedDBkey() .
+                                               " uses content model " . $content->getModel() );
+                               }
+                       }
+
+                       if ( $this->expandTemplates && !$this->parseContent ) {
+                               #XXX: implement template expansion for all content types in ContentHandler?
+                               if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
+                                       $text = $content->getNativeData();
+
+                                       $text = $wgParser->preprocess(
+                                               $text,
+                                               $title,
+                                               ParserOptions::newFromContext( $this->getContext() )
+                                       );
+                               } else {
+                                       $this->setWarning( "Template expansion is supported for wikitext only, " .
+                                               $title->getPrefixedDBkey() .
+                                               " uses content model " . $content->getModel() );
+                                       $vals['badcontentformat'] = '';
+                                       $text = false;
+                               }
+                       }
+                       if ( $this->parseContent ) {
+                               $po = $content->getParserOutput(
+                                       $title,
+                                       $revision->getId(),
+                                       ParserOptions::newFromContext( $this->getContext() )
+                               );
+                               $text = $po->getText();
+                       }
+
+                       if ( $text === null ) {
+                               $format = $this->contentFormat ? $this->contentFormat : $content->getDefaultFormat();
+                               $model = $content->getModel();
+
+                               if ( !$content->isSupportedFormat( $format ) ) {
+                                       $name = $title->getPrefixedDBkey();
+                                       $this->setWarning( "The requested format {$this->contentFormat} is not " .
+                                               "supported for content model $model used by $name" );
+                                       $vals['badcontentformat'] = '';
+                                       $text = false;
+                               } else {
+                                       $text = $content->serialize( $format );
+                                       // always include format and model.
+                                       // Format is needed to deserialize, model is needed to interpret.
+                                       $vals['contentformat'] = $format;
+                                       $vals['contentmodel'] = $model;
+                               }
+                       }
+
+                       if ( $text !== false ) {
+                               ApiResult::setContent( $vals, $text );
+                       }
+               }
+
+               if ( $content && ( !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) ) {
+                       static $n = 0; // Number of uncached diffs we've had
+
+                       if ( $n < $this->getConfig()->get( 'APIMaxUncachedDiffs' ) ) {
+                               $vals['diff'] = array();
+                               $context = new DerivativeContext( $this->getContext() );
+                               $context->setTitle( $title );
+                               $handler = $revision->getContentHandler();
+
+                               if ( !is_null( $this->difftotext ) ) {
+                                       $model = $title->getContentModel();
+
+                                       if ( $this->contentFormat
+                                               && !ContentHandler::getForModelID( $model )->isSupportedFormat( $this->contentFormat )
+                                       ) {
+                                               $name = $title->getPrefixedDBkey();
+                                               $this->setWarning( "The requested format {$this->contentFormat} is not " .
+                                                       "supported for content model $model used by $name" );
+                                               $vals['diff']['badcontentformat'] = '';
+                                               $engine = null;
+                                       } else {
+                                               $difftocontent = ContentHandler::makeContent(
+                                                       $this->difftotext,
+                                                       $title,
+                                                       $model,
+                                                       $this->contentFormat
+                                               );
+
+                                               $engine = $handler->createDifferenceEngine( $context );
+                                               $engine->setContent( $content, $difftocontent );
+                                       }
+                               } else {
+                                       $engine = $handler->createDifferenceEngine( $context, $revision->getID(), $this->diffto );
+                                       $vals['diff']['from'] = $engine->getOldid();
+                                       $vals['diff']['to'] = $engine->getNewid();
+                               }
+                               if ( $engine ) {
+                                       $difftext = $engine->getDiffBody();
+                                       ApiResult::setContent( $vals['diff'], $difftext );
+                                       if ( !$engine->wasCacheHit() ) {
+                                               $n++;
+                                       }
+                               }
+                       } else {
+                               $vals['diff']['notcached'] = '';
+                       }
+               }
+
+               if ( $anyHidden && $revision->isDeleted( Revision::DELETED_RESTRICTED ) ) {
+                       $vals['suppressed'] = '';
+               }
+
+               return $vals;
+       }
+
+       public function getCacheMode( $params ) {
+               if ( $this->userCanSeeRevDel() ) {
+                       return 'private';
+               }
+
+               return 'public';
+       }
+
+       public function getAllowedParams() {
+               return array(
+                       'prop' => array(
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_DFLT => 'ids|timestamp|flags|comment|user',
+                               ApiBase::PARAM_TYPE => array(
+                                       'ids',
+                                       'flags',
+                                       'timestamp',
+                                       'user',
+                                       'userid',
+                                       'size',
+                                       'sha1',
+                                       'contentmodel',
+                                       'comment',
+                                       'parsedcomment',
+                                       'content',
+                                       'tags'
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-prop',
+                       ),
+                       'limit' => array(
+                               ApiBase::PARAM_TYPE => 'limit',
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-limit',
+                       ),
+                       'expandtemplates' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-expandtemplates',
+                       ),
+                       'generatexml' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-generatexml',
+                       ),
+                       'parse' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-parse',
+                       ),
+                       'section' => array(
+                               ApiBase::PARAM_DFLT => null,
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-section',
+                       ),
+                       'diffto' => array(
+                               ApiBase::PARAM_DFLT => null,
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-diffto',
+                       ),
+                       'difftotext' => array(
+                               ApiBase::PARAM_DFLT => null,
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-difftotext',
+                       ),
+                       'contentformat' => array(
+                               ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
+                               ApiBase::PARAM_DFLT => null,
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-contentformat',
+                       ),
+               );
+       }
+
+}
index be6bc68..cc9f9aa 100644 (file)
@@ -67,6 +67,16 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                $searchInfo = array_flip( $params['info'] );
                $prop = array_flip( $params['prop'] );
 
+               // Deprecated parameters
+               if ( isset( $prop['hasrelated'] ) ) {
+                       $this->logFeatureUsage( 'action=search&srprop=hasrelated' );
+                       $this->setWarning( 'srprop=hasrelated has been deprecated' );
+               }
+               if ( isset( $prop['score'] ) ) {
+                       $this->logFeatureUsage( 'action=search&srprop=score' );
+                       $this->setWarning( 'srprop=score has been deprecated' );
+               }
+
                // Create search engine instance and set options
                $search = isset( $params['backend'] ) && $params['backend'] != self::BACKEND_NULL_PARAM ?
                        SearchEngine::create( $params['backend'] ) : SearchEngine::create();
@@ -158,14 +168,14 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                        $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $result->getTimestamp() );
                                }
                                if ( isset( $prop['titlesnippet'] ) ) {
-                                       $vals['titlesnippet'] = $result->getTitleSnippet( $terms );
+                                       $vals['titlesnippet'] = $result->getTitleSnippet();
                                }
                                if ( !is_null( $result->getRedirectTitle() ) ) {
                                        if ( isset( $prop['redirecttitle'] ) ) {
                                                $vals['redirecttitle'] = $result->getRedirectTitle();
                                        }
                                        if ( isset( $prop['redirectsnippet'] ) ) {
-                                               $vals['redirectsnippet'] = $result->getRedirectSnippet( $terms );
+                                               $vals['redirectsnippet'] = $result->getRedirectSnippet();
                                        }
                                }
                                if ( !is_null( $result->getSectionTitle() ) ) {
@@ -176,9 +186,6 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                                $vals['sectionsnippet'] = $result->getSectionSnippet();
                                        }
                                }
-                               if ( isset( $prop['hasrelated'] ) && $result->hasRelated() ) {
-                                       $vals['hasrelated'] = '';
-                               }
 
                                // Add item to results and see whether it fits
                                $fit = $apiResult->addValue( array( 'query', $this->getModuleName() ),
@@ -296,7 +303,10 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                ),
                                ApiBase::PARAM_ISMULTI => true,
                        ),
-                       'offset' => 0,
+                       'offset' => array(
+                               ApiBase::PARAM_DFLT => 0,
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -321,47 +331,14 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                return $params;
        }
 
-       public function getParamDescription() {
-               $descriptions = array(
-                       'search' => 'Search for all page titles (or content) that has this value',
-                       'namespace' => 'The namespace(s) to enumerate',
-                       'what' => 'Search inside the text or titles',
-                       'info' => 'What metadata to return',
-                       'prop' => array(
-                               'What properties to return',
-                               ' size             - Adds the size of the page in bytes',
-                               ' wordcount        - Adds the word count of the page',
-                               ' timestamp        - Adds the timestamp of when the page was last edited',
-                               ' score            - Adds the score (if any) from the search engine',
-                               ' snippet          - Adds a parsed snippet of the page',
-                               ' titlesnippet     - Adds a parsed snippet of the page title',
-                               ' redirectsnippet  - Adds a parsed snippet of the redirect title',
-                               ' redirecttitle    - Adds the title of the matching redirect',
-                               ' sectionsnippet   - Adds a parsed snippet of the matching section title',
-                               ' sectiontitle     - Adds the title of the matching section',
-                               ' hasrelated       - Indicates whether a related search is available',
-                       ),
-                       'offset' => 'Use this value to continue paging (return by query)',
-                       'limit' => 'How many total pages to return',
-                       'interwiki' => 'Include interwiki results in the search, if available'
-               );
-
-               if ( count( SearchEngine::getSearchTypes() ) > 1 ) {
-                       $descriptions['backend'] = 'Which search backend to use, if not the default';
-               }
-
-               return $descriptions;
-       }
-
-       public function getDescription() {
-               return 'Perform a full text search.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=search&srsearch=meaning',
-                       'api.php?action=query&list=search&srwhat=text&srsearch=meaning',
-                       'api.php?action=query&generator=search&gsrsearch=meaning&prop=info',
+                       'action=query&list=search&srsearch=meaning'
+                               => 'apihelp-query+search-example-simple',
+                       'action=query&list=search&srwhat=text&srsearch=meaning'
+                               => 'apihelp-query+search-example-text',
+                       'action=query&generator=search&gsrsearch=meaning&prop=info'
+                               => 'apihelp-query+search-example-generator',
                );
        }
 
index f17ac29..18bbc5a 100644 (file)
@@ -138,6 +138,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
 
                $data['phpversion'] = PHP_VERSION;
                $data['phpsapi'] = PHP_SAPI;
+               if ( defined( 'HHVM_VERSION' ) ) {
+                       $data['hhvmversion'] = HHVM_VERSION;
+               }
                $data['dbtype'] = $config->get( 'DBtype' );
                $data['dbversion'] = $this->getDB()->getServerVersion();
 
@@ -341,7 +344,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                global $wgContLang;
                $data = array();
                $aliases = $wgContLang->getSpecialPageAliases();
-               foreach ( SpecialPageFactory::getList() as $specialpage => $stuff ) {
+               foreach ( SpecialPageFactory::getNames() as $specialpage ) {
                        if ( isset( $aliases[$specialpage] ) ) {
                                $arr = array( 'realname' => $specialpage, 'aliases' => $aliases[$specialpage] );
                                $this->getResult()->setIndexedTagName( $arr['aliases'], 'alias' );
@@ -396,7 +399,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        if ( isset( $row['iw_local'] ) && $row['iw_local'] == '1' ) {
                                $val['local'] = '';
                        }
-                       if ( $row['iw_trans'] == '1' ) {
+                       if ( isset( $row['iw_trans'] ) && $row['iw_trans'] == '1' ) {
                                $val['trans'] = '';
                        }
 
@@ -478,9 +481,6 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data = array();
                $data['pages'] = intval( SiteStats::pages() );
                $data['articles'] = intval( SiteStats::articles() );
-               if ( !$this->getConfig()->get( 'DisableCounters' ) ) {
-                       $data['views'] = intval( SiteStats::views() );
-               }
                $data['edits'] = intval( SiteStats::edits() );
                $data['images'] = intval( SiteStats::images() );
                $data['users'] = intval( SiteStats::users() );
@@ -498,6 +498,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
 
                $data = array();
                $result = $this->getResult();
+               $allGroups = User::getAllGroups();
                foreach ( $config->get( 'GroupPermissions' ) as $group => $permissions ) {
                        $arr = array(
                                'name' => $group,
@@ -524,8 +525,11 @@ class ApiQuerySiteinfo extends ApiQueryBase {
 
                        foreach ( $groupArr as $type => $rights ) {
                                if ( isset( $rights[$group] ) ) {
-                                       $arr[$type] = $rights[$group];
-                                       $result->setIndexedTagName( $arr[$type], 'group' );
+                                       $groups = array_intersect( $rights[$group], $allGroups );
+                                       if ( $groups ) {
+                                               $arr[$type] = $groups;
+                                               $result->setIndexedTagName( $arr[$type], 'group' );
+                                       }
                                }
                        }
 
@@ -689,6 +693,16 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $allowed = Skin::getAllowedSkins();
                $default = Skin::normalizeKey( 'default' );
                foreach ( Skin::getSkinNames() as $name => $displayName ) {
+                       $msg = $this->msg( "skinname-{$name}" );
+                       $code = $this->getParameter( 'inlanguagecode' );
+                       if ( $code && Language::isValidCode( $code ) ) {
+                               $msg->inLanguage( $code );
+                       } else {
+                               $msg->inContentLanguage();
+                       }
+                       if ( $msg->exists() ) {
+                               $displayName = $msg->text();
+                       }
                        $skin = array( 'code' => $name );
                        ApiResult::setContent( $skin, $displayName );
                        if ( !isset( $allowed[$name] ) ) {
@@ -820,53 +834,14 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'prop' => array(
-                               'Which sysinfo properties to get:',
-                               ' general               - Overall system information',
-                               ' namespaces            - List of registered namespaces and their canonical names',
-                               ' namespacealiases      - List of registered namespace aliases',
-                               ' specialpagealiases    - List of special page aliases',
-                               ' magicwords            - List of magic words and their aliases',
-                               ' statistics            - Returns site statistics',
-                               ' interwikimap          - Returns interwiki map ' .
-                                       "(optionally filtered, (optionally localised by using {$p}inlanguagecode))",
-                               ' dbrepllag             - Returns database server with the highest replication lag',
-                               ' usergroups            - Returns user groups and the associated permissions',
-                               ' extensions            - Returns extensions installed on the wiki',
-                               ' fileextensions        - Returns list of file extensions allowed to be uploaded',
-                               ' rightsinfo            - Returns wiki rights (license) information if available',
-                               ' restrictions          - Returns information on available restriction (protection) types',
-                               ' languages             - Returns a list of languages MediaWiki supports' .
-                                       "(optionally localised by using {$p}inlanguagecode)",
-                               ' skins                 - Returns a list of all enabled skins',
-                               ' extensiontags         - Returns a list of parser extension tags',
-                               ' functionhooks         - Returns a list of parser function hooks',
-                               ' showhooks             - Returns a list of all subscribed hooks (contents of $wgHooks)',
-                               ' variables             - Returns a list of variable IDs',
-                               ' protocols             - Returns a list of protocols that are allowed in external links.',
-                               ' defaultoptions        - Returns the default values for user preferences.',
-                       ),
-                       'filteriw' => 'Return only local or only nonlocal entries of the interwiki map',
-                       'showalldb' => 'List all database servers, not just the one lagging the most',
-                       'numberingroup' => 'Lists the number of users in user groups',
-                       'inlanguagecode' => 'Language code for localised language names ' .
-                               '(best effort, use CLDR extension)',
-               );
-       }
-
-       public function getDescription() {
-               return 'Return general information about the site.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&meta=siteinfo&siprop=general|namespaces|namespacealiases|statistics',
-                       'api.php?action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local',
-                       'api.php?action=query&meta=siteinfo&siprop=dbrepllag&sishowalldb=',
+                       'action=query&meta=siteinfo&siprop=general|namespaces|namespacealiases|statistics'
+                               => 'apihelp-query+siteinfo-example-simple',
+                       'action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local'
+                               => 'apihelp-query+siteinfo-example-interwiki',
+                       'action=query&meta=siteinfo&siprop=dbrepllag&sishowalldb='
+                               => 'apihelp-query+siteinfo-example-replag',
                );
        }
 
index db92856..be6f669 100644 (file)
@@ -94,46 +94,32 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
                        ),
                        'urlwidth' => array(
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_DFLT => -1
+                               ApiBase::PARAM_DFLT => -1,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+imageinfo-param-urlwidth',
+                                       ApiQueryImageInfo::TRANSFORM_LIMIT,
+                               ),
                        ),
                        'urlheight' => array(
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_DFLT => -1
+                               ApiBase::PARAM_DFLT => -1,
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-urlheight',
                        ),
                        'urlparam' => array(
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_DFLT => '',
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-urlparam',
                        ),
                );
        }
 
-       /**
-        * Return the API documentation for the parameters.
-        * @return array Parameter documentation.
-        */
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'prop' => self::getPropertyDescriptions( $this->propertyFilter, $p ),
-                       'filekey' => 'Key that identifies a previous upload that was stashed temporarily.',
-                       'sessionkey' => 'Alias for filekey, for backward compatibility.',
-                       'urlwidth' => "If {$p}prop=url is set, a URL to an image scaled to this width will be returned.",
-                       'urlheight' => "Similar to {$p}urlwidth. Cannot be used without {$p}urlwidth",
-                       'urlparam' => array( "A handler specific parameter string. For example, pdf's ",
-                               "might use 'page15-100px'. {$p}urlwidth must be used and be consistent with {$p}urlparam" ),
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns image information for stashed images.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=stashimageinfo&siifilekey=124sd34rsdf567',
-                       'api.php?action=query&prop=stashimageinfo&siifilekey=b34edoe3|bceffd4&' .
-                               'siiurlwidth=120&siiprop=url',
+                       'action=query&prop=stashimageinfo&siifilekey=124sd34rsdf567'
+                               => 'apihelp-query+stashimageinfo-example-simple',
+                       'action=query&prop=stashimageinfo&siifilekey=b34edoe3|bceffd4&' .
+                               'siiurlwidth=120&siiprop=url'
+                               => 'apihelp-query+stashimageinfo-example-params',
                );
        }
 }
index 3184564..f3b2652 100644 (file)
@@ -135,7 +135,9 @@ class ApiQueryTags extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -156,27 +158,10 @@ class ApiQueryTags extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'continue' => 'When more results are available, use this to continue',
-                       'limit' => 'The maximum number of tags to list',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' name         - Adds name of tag',
-                               ' displayname  - Adds system message for the tag',
-                               ' description  - Adds description of the tag',
-                               ' hitcount     - Adds the amount of revisions that have this tag',
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               return 'List change tags.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=tags&tgprop=displayname|description|hitcount'
+                       'action=query&list=tags&tgprop=displayname|description|hitcount'
+                               => 'apihelp-query+tags-example-simple',
                );
        }
 
diff --git a/includes/api/ApiQueryTokens.php b/includes/api/ApiQueryTokens.php
new file mode 100644 (file)
index 0000000..279e8e3
--- /dev/null
@@ -0,0 +1,96 @@
+<?php
+/**
+ * Module to fetch tokens via action=query&meta=tokens
+ *
+ * Created on August 8, 2014
+ *
+ * Copyright © 2014 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.24
+ */
+
+/**
+ * Module to fetch tokens via action=query&meta=tokens
+ *
+ * @ingroup API
+ * @since 1.24
+ */
+class ApiQueryTokens extends ApiQueryBase {
+
+       public function execute() {
+               $params = $this->extractRequestParams();
+               $res = array();
+
+               if ( $this->getMain()->getRequest()->getVal( 'callback' ) !== null ) {
+                       $this->setWarning( 'Tokens may not be obtained when using a callback' );
+                       return;
+               }
+
+               $salts = self::getTokenTypeSalts();
+               foreach ( $params['type'] as $type ) {
+                       $salt = $salts[$type];
+                       $val = $this->getUser()->getEditToken( $salt, $this->getRequest() );
+                       $res[$type . 'token'] = $val;
+               }
+
+               $this->getResult()->addValue( 'query', $this->getModuleName(), $res );
+       }
+
+       public static function getTokenTypeSalts() {
+               static $salts = null;
+               if ( !$salts ) {
+                       wfProfileIn( __METHOD__ );
+                       $salts = array(
+                               'csrf' => '',
+                               'watch' => 'watch',
+                               'patrol' => 'patrol',
+                               'rollback' => 'rollback',
+                               'userrights' => 'userrights',
+                       );
+                       wfRunHooks( 'ApiQueryTokensRegisterTypes', array( &$salts ) );
+                       ksort( $salts );
+                       wfProfileOut( __METHOD__ );
+               }
+
+               return $salts;
+       }
+
+       public function getAllowedParams() {
+               return array(
+                       'type' => array(
+                               ApiBase::PARAM_DFLT => 'csrf',
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_TYPE => array_keys( self::getTokenTypeSalts() ),
+                       ),
+               );
+       }
+
+       protected function getExamplesMessages() {
+               return array(
+                       'action=query&meta=tokens'
+                               => 'apihelp-query+tokens-example-simple',
+                       'action=query&meta=tokens&type=watch|patrol'
+                               => 'apihelp-query+tokens-example-types',
+               );
+       }
+
+       public function getCacheMode( $params ) {
+               return 'private';
+       }
+}
index 4b167b8..41f7ee7 100644 (file)
@@ -464,7 +464,9 @@ class ApiQueryContributions extends ApiQueryBase {
                        'end' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'user' => array(
                                ApiBase::PARAM_ISMULTI => true
                        ),
@@ -474,7 +476,8 @@ class ApiQueryContributions extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
@@ -507,7 +510,11 @@ class ApiQueryContributions extends ApiQueryBase {
                                        '!top',
                                        'new',
                                        '!new',
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+usercontribs-param-show',
+                                       $this->getConfig()->get( 'RCMaxAge' )
+                               ),
                        ),
                        'tag' => null,
                        'toponly' => array(
@@ -517,53 +524,12 @@ class ApiQueryContributions extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               $RCMaxAge = $this->getConfig()->get( 'RCMaxAge' );
-
-               return array(
-                       'limit' => 'The maximum number of contributions to return',
-                       'start' => 'The start timestamp to return from',
-                       'end' => 'The end timestamp to return to',
-                       'continue' => 'When more results are available, use this to continue',
-                       'user' => 'The users to retrieve contributions for',
-                       'userprefix' => array(
-                               "Retrieve contributions for all users whose names begin with this value.",
-                               "Overrides {$p}user",
-                       ),
-                       'dir' => $this->getDirectionDescription( $p ),
-                       'namespace' => 'Only list contributions in these namespaces',
-                       'prop' => array(
-                               'Include additional pieces of information',
-                               ' ids            - Adds the page ID and revision ID',
-                               ' title          - Adds the title and namespace ID of the page',
-                               ' timestamp      - Adds the timestamp of the edit',
-                               ' comment        - Adds the comment of the edit',
-                               ' parsedcomment  - Adds the parsed comment of the edit',
-                               ' size           - Adds the new size of the edit',
-                               ' sizediff       - Adds the size delta of the edit against its parent',
-                               ' flags          - Adds flags of the edit',
-                               ' patrolled      - Tags patrolled edits',
-                               ' tags           - Lists tags for the edit',
-                       ),
-                       'show' => array(
-                               "Show only items that meet thse criteria, e.g. non minor edits only: {$p}show=!minor",
-                               "NOTE: If {$p}show=patrolled or {$p}show=!patrolled is set, revisions older than",
-                               "\$wgRCMaxAge ($RCMaxAge) won't be shown",
-                       ),
-                       'tag' => 'Only list revisions tagged with this tag',
-                       'toponly' => 'Only list changes which are the latest revision',
-               );
-       }
-
-       public function getDescription() {
-               return 'Get all edits by a user.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=usercontribs&ucuser=YurikBot',
-                       'api.php?action=query&list=usercontribs&ucuserprefix=217.121.114.',
+                       'action=query&list=usercontribs&ucuser=Example'
+                               => 'apihelp-query+usercontribs-example-user',
+                       'action=query&list=usercontribs&ucuserprefix=192.0.2.'
+                               => 'apihelp-query+usercontribs-example-ipprefix',
                );
        }
 
index 6d70241..fed5a33 100644 (file)
@@ -69,6 +69,10 @@ class ApiQueryUserInfo extends ApiQueryBase {
                                $vals['blockedby'] = $block->getByName();
                                $vals['blockedbyid'] = $block->getBy();
                                $vals['blockreason'] = $user->blockedFor();
+                               $vals['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $block->mTimestamp );
+                               $vals['blockexpiry'] = $block->getExpiry() === 'infinity'
+                                       ? 'infinite'
+                                       : wfTimestamp( TS_ISO_8601, $block->getExpiry() );
                        }
                }
 
@@ -104,6 +108,12 @@ class ApiQueryUserInfo extends ApiQueryBase {
                        $vals['options'] = $user->getOptions();
                }
 
+               if ( isset( $this->prop['preferencestoken'] ) ) {
+                       $p = $this->getModulePrefix();
+                       $this->setWarning(
+                               "{$p}prop=preferencestoken has been deprecated. Please use action=query&meta=tokens instead."
+                       );
+               }
                if ( isset( $this->prop['preferencestoken'] ) &&
                        is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) &&
                        $user->isAllowed( 'editmyoptions' )
@@ -236,45 +246,22 @@ class ApiQueryUserInfo extends ApiQueryBase {
                                        'acceptlang',
                                        'registrationdate',
                                        'unreadcount',
-                               )
-                       )
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'prop' => array(
-                               'What pieces of information to include',
-                               '  blockinfo        - Tags if the current user is blocked, by whom, and for what reason',
-                               '  hasmsg           - Adds a tag "message" if the current user has pending messages',
-                               '  groups           - Lists all the groups the current user belongs to',
-                               '  implicitgroups   - Lists all the groups the current user is automatically a member of',
-                               '  rights           - Lists all the rights the current user has',
-                               '  changeablegroups - Lists the groups the current user can add to and remove from',
-                               '  options          - Lists all preferences the current user has set',
-                               '  preferencestoken - Get a token to change current user\'s preferences',
-                               '  editcount        - Adds the current user\'s edit count',
-                               '  ratelimits       - Lists all rate limits applying to the current user',
-                               '  realname         - Adds the user\'s real name',
-                               '  email            - Adds the user\'s email address and email authentication date',
-                               '  acceptlang       - Echoes the Accept-Language header sent by ' .
-                                       'the client in a structured format',
-                               '  registrationdate - Adds the user\'s registration date',
-                               '  unreadcount      - Adds the count of unread pages on the user\'s watchlist ' .
-                                       '(maximum ' . ( self::WL_UNREAD_LIMIT - 1 ) . '; returns "' .
-                                       self::WL_UNREAD_LIMIT . '+" if more)',
+                               ),
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+userinfo-param-prop',
+                                       self::WL_UNREAD_LIMIT - 1,
+                                       self::WL_UNREAD_LIMIT . '+',
+                               ),
                        )
                );
        }
 
-       public function getDescription() {
-               return 'Get information about the current user.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&meta=userinfo',
-                       'api.php?action=query&meta=userinfo&uiprop=blockinfo|groups|rights|hasmsg',
+                       'action=query&meta=userinfo'
+                               => 'apihelp-query+userinfo-example-simple',
+                       'action=query&meta=userinfo&uiprop=blockinfo|groups|rights|hasmsg'
+                               => 'apihelp-query+userinfo-example-data',
                );
        }
 
index 84326a2..db8cc1c 100644 (file)
@@ -58,6 +58,7 @@ class ApiQueryUsers extends ApiQueryBase {
         * Get an array mapping token names to their handler functions.
         * The prototype for a token function is func($user)
         * it should return a token or false (permission denied)
+        * @deprecated since 1.24
         * @return array Array of tokenname => function
         */
        protected function getTokenFunctions() {
@@ -80,6 +81,7 @@ class ApiQueryUsers extends ApiQueryBase {
        }
 
        /**
+        * @deprecated since 1.24
         * @param User $user
         * @return string
         */
@@ -193,6 +195,7 @@ class ApiQueryUsers extends ApiQueryBase {
                                        $data[$name]['blockid'] = $row->ipb_id;
                                        $data[$name]['blockedby'] = $row->ipb_by_text;
                                        $data[$name]['blockedbyid'] = $row->ipb_by;
+                                       $data[$name]['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $row->ipb_timestamp );
                                        $data[$name]['blockreason'] = $row->ipb_reason;
                                        $data[$name]['blockexpiry'] = $row->ipb_expiry;
                                }
@@ -274,19 +277,6 @@ class ApiQueryUsers extends ApiQueryBase {
                $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'user' );
        }
 
-       /**
-        * Gets all the groups that a user is automatically a member of (implicit groups)
-        *
-        * @deprecated since 1.20; call User::getAutomaticGroups() directly.
-        * @param User $user
-        * @return array
-        */
-       public static function getAutoGroups( $user ) {
-               wfDeprecated( __METHOD__, '1.20' );
-
-               return $user->getAutomaticGroups();
-       }
-
        public function getCacheMode( $params ) {
                if ( isset( $params['token'] ) ) {
                        return 'private';
@@ -317,39 +307,20 @@ class ApiQueryUsers extends ApiQueryBase {
                                ApiBase::PARAM_ISMULTI => true
                        ),
                        'token' => array(
+                               ApiBase::PARAM_DEPRECATED => true,
                                ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ),
                                ApiBase::PARAM_ISMULTI => true
                        ),
                );
        }
 
-       public function getParamDescription() {
+       protected function getExamplesMessages() {
                return array(
-                       'prop' => array(
-                               'What pieces of information to include',
-                               '  blockinfo      - Tags if the user is blocked, by whom, and for what reason',
-                               '  groups         - Lists all the groups the user(s) belongs to',
-                               '  implicitgroups - Lists all the groups a user is automatically a member of',
-                               '  rights         - Lists all the rights the user(s) has',
-                               '  editcount      - Adds the user\'s edit count',
-                               '  registration   - Adds the user\'s registration timestamp',
-                               '  emailable      - Tags if the user can and wants to receive ' .
-                                       'email through [[Special:Emailuser]]',
-                               '  gender         - Tags the gender of the user. Returns "male", "female", or "unknown"',
-                       ),
-                       'users' => 'A list of users to obtain the same information for',
-                       'token' => 'Which tokens to obtain for each user',
+                       'action=query&list=users&ususers=Example&usprop=groups|editcount|gender'
+                               => 'apihelp-query+users-example-simple',
                );
        }
 
-       public function getDescription() {
-               return 'Get information about a list of users.';
-       }
-
-       public function getExamples() {
-               return 'api.php?action=query&list=users&ususers=brion|TimStarling&usprop=groups|editcount|gender';
-       }
-
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Users';
        }
index efbe05e..4059ff8 100644 (file)
@@ -455,7 +455,8 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiHelp::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
@@ -512,67 +513,26 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                        'token' => array(
                                ApiBase::PARAM_TYPE => 'string'
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'allrev' => 'Include multiple revisions of the same page within given timeframe',
-                       'start' => 'The timestamp to start enumerating from',
-                       'end' => 'The timestamp to end enumerating',
-                       'namespace' => 'Filter changes to only the given namespace(s)',
-                       'user' => 'Only list changes by this user',
-                       'excludeuser' => 'Don\'t list changes by this user',
-                       'dir' => $this->getDirectionDescription( $p ),
-                       'limit' => 'How many total results to return per request',
-                       'prop' => array(
-                               'Which additional items to get (non-generator mode only).',
-                               ' ids                    - Adds revision ids and page ids',
-                               ' title                  - Adds title of the page',
-                               ' flags                  - Adds flags for the edit',
-                               ' user                   - Adds the user who made the edit',
-                               ' userid                 - Adds user id of whom made the edit',
-                               ' comment                - Adds comment of the edit',
-                               ' parsedcomment          - Adds parsed comment of the edit',
-                               ' timestamp              - Adds timestamp of the edit',
-                               ' patrol                 - Tags edits that are patrolled',
-                               ' sizes                  - Adds the old and new lengths of the page',
-                               ' notificationtimestamp  - Adds timestamp of when the user was last notified about the edit',
-                               ' loginfo                - Adds log information where appropriate',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'show' => array(
-                               'Show only items that meet this criteria.',
-                               "For example, to see only minor edits done by logged-in users, set {$p}show=minor|!anon"
-                       ),
-                       'type' => array(
-                               'Which types of changes to show',
-                               ' edit           - Regular page edits',
-                               ' external       - External changes',
-                               ' new            - Page creations',
-                               ' log            - Log entries',
-                       ),
-                       'owner' => 'The name of the user whose watchlist you\'d like to access',
-                       'token' => 'Give a security token (settable in preferences) to ' .
-                               'allow access to another user\'s watchlist',
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return "Get all recent changes to pages in the logged in user's watchlist.";
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=watchlist',
-                       'api.php?action=query&list=watchlist&wlprop=ids|title|timestamp|user|comment',
-                       'api.php?action=query&list=watchlist&wlallrev=&wlprop=ids|title|timestamp|user|comment',
-                       'api.php?action=query&generator=watchlist&prop=info',
-                       'api.php?action=query&generator=watchlist&gwlallrev=&prop=revisions&rvprop=timestamp|user',
-                       'api.php?action=query&list=watchlist&wlowner=Bob_Smith&wltoken=123ABC'
+                       'action=query&list=watchlist'
+                               => 'apihelp-query+watchlist-example-simple',
+                       'action=query&list=watchlist&wlprop=ids|title|timestamp|user|comment'
+                               => 'apihelp-query+watchlist-example-props',
+                       'action=query&list=watchlist&wlallrev=&wlprop=ids|title|timestamp|user|comment'
+                               => 'apihelp-query+watchlist-example-allrev',
+                       'action=query&generator=watchlist&prop=info'
+                               => 'apihelp-query+watchlist-example-generator',
+                       'action=query&generator=watchlist&gwlallrev=&prop=revisions&rvprop=timestamp|user'
+                               => 'apihelp-query+watchlist-example-generator-rev',
+                       'action=query&list=watchlist&wlowner=Example&wltoken=123ABC'
+                               => 'apihelp-query+watchlist-example-wlowner',
                );
        }
 
index 6b2223a..ae3596d 100644 (file)
@@ -131,7 +131,9 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => 'namespace'
@@ -168,35 +170,17 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
                                        'ascending',
                                        'descending'
                                ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'continue' => 'When more results are available, use this to continue',
-                       'namespace' => 'Only list pages in the given namespace(s)',
-                       'limit' => 'How many total results to return per request',
-                       'prop' => array(
-                               'Which additional properties to get (non-generator mode only)',
-                               ' changed  - Adds timestamp of when the user was last notified about the edit',
-                       ),
-                       'show' => 'Only list items that meet these criteria',
-                       'owner' => 'The name of the user whose watchlist you\'d like to access',
-                       'token' => 'Give a security token (settable in preferences) to allow ' .
-                               'access to another user\'s watchlist',
-                       'dir' => 'Direction to sort the titles and namespaces in',
-               );
-       }
-
-       public function getDescription() {
-               return "Get all pages on the logged in user's watchlist.";
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=watchlistraw',
-                       'api.php?action=query&generator=watchlistraw&gwrshow=changed&prop=revisions',
+                       'action=query&list=watchlistraw'
+                               => 'apihelp-query+watchlistraw-example-simple',
+                       'action=query&generator=watchlistraw&gwrshow=changed&prop=info'
+                               => 'apihelp-query+watchlistraw-example-generator',
                );
        }
 
index 2e80447..5bc2efb 100644 (file)
@@ -481,10 +481,14 @@ class ApiResult extends ApiBase {
                        $continue = explode( '||', $continue );
                        $this->dieContinueUsageIf( count( $continue ) !== 2 );
                        $this->generatorDone = ( $continue[0] === '-' );
+                       $skip = explode( '|', $continue[1] );
                        if ( !$this->generatorDone ) {
                                $this->generatorParams = explode( '|', $continue[0] );
+                       } else {
+                               // When the generator is complete, don't run any modules that
+                               // depend on it.
+                               $skip += $this->continueGeneratedModules;
                        }
-                       $skip = explode( '|', $continue[1] );
                }
 
                $this->continueAllModules = array();
@@ -569,6 +573,7 @@ class ApiResult extends ApiBase {
                } else {
                        $key = 'continue';
                        $data = array();
+                       $batchcomplete = false;
 
                        $finishedModules = array_diff(
                                array_keys( $this->continueAllModules ),
@@ -611,9 +616,11 @@ class ApiResult extends ApiBase {
                                $finishedModules = array_diff(
                                        $finishedModules, $this->continueGeneratedModules
                                );
+                               $batchcomplete = true;
                        } else {
                                // Generator and prop modules are all done. Mark it so.
                                $this->generatorDone = true;
+                               $batchcomplete = true;
                        }
 
                        // Set 'continue' if any continuation data is set or if the generator
@@ -623,6 +630,10 @@ class ApiResult extends ApiBase {
                                        ( $this->generatorDone ? '-' : join( '|', $this->generatorParams ) ) .
                                        '||' . join( '|', $finishedModules );
                        }
+
+                       if ( $batchcomplete ) {
+                               $this->addValue( null, 'batchcomplete', '', ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+                       }
                }
                if ( $data ) {
                        $this->addValue( null, $key, $data, ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
index 07a1a45..783a39b 100644 (file)
@@ -195,47 +195,22 @@ class ApiRevisionDelete extends ApiBase {
                                ApiBase::PARAM_TYPE => array( 'yes', 'no', 'nochange' ),
                                ApiBase::PARAM_DFLT => 'nochange',
                        ),
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
-                       ),
                        'reason' => null,
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'type' => 'Type of revision deletion being performed',
-                       'target' => 'Page title for the revision deletion, if required for the type',
-                       'ids' => 'Identifiers for the revisions to be deleted',
-                       'hide' => 'What to hide for each revision',
-                       'show' => 'What to unhide for each revision',
-                       'suppress' => 'Whether to suppress data from administrators as well as others',
-                       'token' => 'A delete token previously retrieved through action=tokens',
-                       'reason' => 'Reason for the deletion/undeletion',
-               );
-       }
-
-       public function getDescription() {
-               return 'Delete/undelete revisions.';
-       }
-
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
+               return 'csrf';
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=revisiondelete&target=Main%20Page&type=revision&ids=12345&' .
+                       'action=revisiondelete&target=Main%20Page&type=revision&ids=12345&' .
                                'hide=content&token=123ABC'
-                               => 'Hide content for revision 12345 on the Main Page',
-                       'api.php?action=revisiondelete&type=logging&ids=67890&hide=content|comment|user&' .
+                               => 'apihelp-revisiondelete-example-revision',
+                       'action=revisiondelete&type=logging&ids=67890&hide=content|comment|user&' .
                                'reason=BLP%20violation&token=123ABC'
-                               => 'Hide all data on log entry 67890 with the reason "BLP violation"',
+                               => 'apihelp-revisiondelete-example-log',
                );
        }
 
index af6f9ff..02e62a0 100644 (file)
@@ -40,9 +40,19 @@ class ApiRollback extends ApiBase {
        private $mUser = null;
 
        public function execute() {
+               $user = $this->getUser();
                $params = $this->extractRequestParams();
 
-               // User and title already validated in call to getTokenSalt from Main
+               // WikiPage::doRollback needs a Web UI token, so get one of those if we
+               // validated based on an API rollback token.
+               $token = $params['token'];
+               if ( $user->matchEditToken( $token, 'rollback', $this->getRequest() ) ) {
+                       $token = $this->getUser()->getEditToken(
+                               $this->getWebUITokenSalt( $params ),
+                               $this->getRequest()
+                       );
+               }
+
                $titleObj = $this->getRbTitle( $params );
                $pageObj = WikiPage::factory( $titleObj );
                $summary = $params['summary'];
@@ -50,10 +60,10 @@ class ApiRollback extends ApiBase {
                $retval = $pageObj->doRollback(
                        $this->getRbUser( $params ),
                        $summary,
-                       $params['token'],
+                       $token,
                        $params['markbot'],
                        $details,
-                       $this->getUser()
+                       $user
                );
 
                if ( $retval ) {
@@ -99,10 +109,6 @@ class ApiRollback extends ApiBase {
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true
                        ),
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
-                       ),
                        'summary' => '',
                        'markbot' => false,
                        'watchlist' => array(
@@ -114,40 +120,18 @@ class ApiRollback extends ApiBase {
                                        'nochange'
                                ),
                        ),
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'title' => "Title of the page you want to roll back. Cannot be used together with {$p}pageid",
-                       'pageid' => "Page ID of the page you want to roll back. Cannot be used together with {$p}title",
-                       'user' => 'Name of the user whose edits are to be rolled back. If ' .
-                               'set incorrectly, you\'ll get a badtoken error.',
-                       'token' => 'A rollback token previously retrieved through ' .
-                               "{$this->getModulePrefix()}prop=revisions",
-                       'summary' => 'Custom edit summary. If empty, default summary will be used',
-                       'markbot' => 'Mark the reverted edits and the revert as bot edits',
-                       'watchlist' => 'Unconditionally add or remove the page from your watchlist, ' .
-                               'use preferences or do not change watch',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Undo the last edit to the page. If the last user who edited the page made',
-                       'multiple edits in a row, they will all be rolled back.'
+                       'token' => array(
+                               // Standard definition automatically inserted
+                               ApiBase::PARAM_HELP_MSG_APPEND => array( 'api-help-param-token-webui' ),
+                       ),
                );
        }
 
        public function needsToken() {
-               return true;
+               return 'rollback';
        }
 
-       public function getTokenSalt() {
-               $params = $this->extractRequestParams();
-
+       protected function getWebUITokenSalt( array $params ) {
                return array(
                        $this->getRbTitle( $params )->getPrefixedText(),
                        $this->getRbUser( $params )
@@ -206,12 +190,13 @@ class ApiRollback extends ApiBase {
                return $this->mTitleObj;
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=rollback&title=Main%20Page&user=Catrope&token=123ABC',
-                       'api.php?action=rollback&pageid=122&user=Catrope&token=123ABC',
-                       'api.php?action=rollback&title=Main%20Page&user=217.121.114.116&' .
-                               'token=123ABC&summary=Reverting%20vandalism&markbot=1'
+                       'action=rollback&title=Main%20Page&user=Example&token=123ABC' =>
+                               'apihelp-rollback-example-simple',
+                       'action=rollback&title=Main%20Page&user=192.0.2.5&' .
+                               'token=123ABC&summary=Reverting%20vandalism&markbot=1' =>
+                               'apihelp-rollback-example-summary',
                );
        }
 
index a2771a0..91f3266 100644 (file)
@@ -51,21 +51,10 @@ class ApiRsd extends ApiBase {
                return new ApiFormatXmlRsd( $this->getMain(), 'xml' );
        }
 
-       public function getAllowedParams() {
-               return array();
-       }
-
-       public function getParamDescription() {
-               return array();
-       }
-
-       public function getDescription() {
-               return 'Export an RSD (Really Simple Discovery) schema.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=rsd'
+                       'action=rsd'
+                               => 'apihelp-rsd-example-simple',
                );
        }
 
index 0433bc9..5d37e20 100644 (file)
@@ -202,11 +202,7 @@ class ApiSetNotificationTimestamp extends ApiBase {
        }
 
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
+               return 'csrf';
        }
 
        public function getAllowedParams( $flags = 0 ) {
@@ -214,7 +210,6 @@ class ApiSetNotificationTimestamp extends ApiBase {
                        'entirewatchlist' => array(
                                ApiBase::PARAM_TYPE => 'boolean'
                        ),
-                       'token' => null,
                        'timestamp' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
                        ),
@@ -224,7 +219,9 @@ class ApiSetNotificationTimestamp extends ApiBase {
                        'newerthanrevid' => array(
                                ApiBase::PARAM_TYPE => 'integer'
                        ),
-                       'continue' => '',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -233,35 +230,17 @@ class ApiSetNotificationTimestamp extends ApiBase {
                return $result;
        }
 
-       public function getParamDescription() {
-               return $this->getPageSet()->getFinalParamDescription() + array(
-                       'entirewatchlist' => 'Work on all watched pages',
-                       'timestamp' => 'Timestamp to which to set the notification timestamp',
-                       'torevid' => 'Revision to set the notification timestamp to (one page only)',
-                       'newerthanrevid' => 'Revision to set the notification timestamp newer than (one page only)',
-                       'token' => 'A token previously acquired via prop=info',
-                       'continue' => 'When more results are available, use this to continue',
-               );
-       }
-
-       public function getDescription() {
-               return array( 'Update the notification timestamp for watched pages.',
-                       'This affects the highlighting of changed pages in the watchlist and history,',
-                       'and the sending of email when the "Email me when a page on my watchlist is',
-                       'changed" preference is enabled.'
-               );
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=setnotificationtimestamp&entirewatchlist=&token=123ABC'
-                               => 'Reset the notification status for the entire watchlist',
-                       'api.php?action=setnotificationtimestamp&titles=Main_page&token=123ABC'
-                               => 'Reset the notification status for "Main page"',
-                       'api.php?action=setnotificationtimestamp&titles=Main_page&' .
+                       'action=setnotificationtimestamp&entirewatchlist=&token=123ABC'
+                               => 'apihelp-setnotificationtimestamp-example-all',
+                       'action=setnotificationtimestamp&titles=Main_page&token=123ABC'
+                               => 'apihelp-setnotificationtimestamp-example-page',
+                       'action=setnotificationtimestamp&titles=Main_page&' .
                                'timestamp=2012-01-01T00:00:00Z&token=123ABC'
-                               => 'Set the notification timestamp for "Main page" so all edits ' .
-                                       'since 1 January 2012 are unviewed',
+                               => 'apihelp-setnotificationtimestamp-example-pagetimestamp',
+                       'action=setnotificationtimestamp&generator=allpages&gapnamespace=2&token=123ABC'
+                               => 'apihelp-setnotificationtimestamp-example-allpages',
                );
        }
 
index 8e2ecfb..2a60af9 100644 (file)
  */
 
 /**
+ * @deprecated since 1.24
  * @ingroup API
  */
 class ApiTokens extends ApiBase {
 
        public function execute() {
+               $this->setWarning(
+                       "action=tokens has been deprecated. Please use action=query&meta=tokens instead."
+               );
+               $this->logFeatureUsage( "action=tokens" );
+
                $params = $this->extractRequestParams();
                $res = array();
 
@@ -71,6 +77,10 @@ class ApiTokens extends ApiBase {
                return $types;
        }
 
+       public function isDeprecated() {
+               return true;
+       }
+
        public function getAllowedParams() {
                return array(
                        'type' => array(
@@ -81,20 +91,12 @@ class ApiTokens extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'type' => 'Type of token(s) to request'
-               );
-       }
-
-       public function getDescription() {
-               return 'Gets tokens for data-modifying actions.';
-       }
-
-       protected function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=tokens' => 'Retrieve an edit token (the default)',
-                       'api.php?action=tokens&type=email|move' => 'Retrieve an email token and a move token'
+                       'action=tokens'
+                               => 'apihelp-tokens-example-edit',
+                       'action=tokens&type=email|move'
+                               => 'apihelp-tokens-example-emailmove',
                );
        }
 }
index acb7ed2..1af83ba 100644 (file)
@@ -89,40 +89,20 @@ class ApiUnblock extends ApiBase {
                                ApiBase::PARAM_TYPE => 'integer',
                        ),
                        'user' => null,
-                       'token' => null,
                        'reason' => '',
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'id' => "ID of the block you want to unblock (obtained through list=blocks). " .
-                               "Cannot be used together with {$p}user",
-                       'user' => "Username, IP address or IP range you want to unblock. " .
-                               "Cannot be used together with {$p}id",
-                       'token' => "An unblock token previously obtained through prop=info",
-                       'reason' => 'Reason for unblock',
-               );
-       }
-
-       public function getDescription() {
-               return 'Unblock a user.';
-       }
-
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
+               return 'csrf';
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=unblock&id=105',
-                       'api.php?action=unblock&user=Bob&reason=Sorry%20Bob'
+                       'action=unblock&id=105'
+                               => 'apihelp-unblock-example-id',
+                       'action=unblock&user=Bob&reason=Sorry%20Bob'
+                               => 'apihelp-unblock-example-user',
                );
        }
 
index df245cd..943ae8e 100644 (file)
@@ -96,10 +96,6 @@ class ApiUndelete extends ApiBase {
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true
                        ),
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
-                       ),
                        'reason' => '',
                        'timestamps' => array(
                                ApiBase::PARAM_TYPE => 'timestamp',
@@ -121,47 +117,17 @@ class ApiUndelete extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'title' => 'Title of the page you want to restore',
-                       'token' => array(
-                               'An undelete token previously retrieved through list=deletedrevs, or ',
-                               'a delete token retrieved through action=tokens.'
-                       ),
-                       'reason' => 'Reason for restoring',
-                       'timestamps' => array(
-                               'Timestamps of the revisions to restore.',
-                               'If both timestamps and fileids are empty, all will be restored.',
-                       ),
-                       'fileids' => array(
-                               'IDs of the file revisions to restore.',
-                               'If both timestamps and fileids are empty, all will be restored.',
-                       ),
-                       'watchlist' => 'Unconditionally add or remove the page from your ' .
-                               'watchlist, use preferences or do not change watch',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Restore certain revisions of a deleted page. A list of deleted revisions ',
-                       '(including timestamps) can be retrieved through list=deletedrevs, and a list',
-                       'of deleted file ids can be retrieved through list=filearchive.'
-               );
-       }
-
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
+               return 'csrf';
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=undelete&title=Main%20Page&token=123ABC&reason=Restoring%20main%20page',
-                       'api.php?action=undelete&title=Main%20Page&token=123ABC&timestamps=20070703220045|20070702194856'
+                       'action=undelete&title=Main%20Page&token=123ABC&reason=Restoring%20main%20page'
+                               => 'apihelp-undelete-example-page',
+                       'action=undelete&title=Main%20Page&token=123ABC' .
+                               '&timestamps=2007-07-03T22:00:45Z|2007-07-02T19:48:56Z'
+                               => 'apihelp-undelete-example-revisions',
                );
        }
 
index 368e7ce..9ddadcb 100644 (file)
@@ -64,7 +64,7 @@ class ApiUpload extends ApiBase {
                                $this->dieUsage( 'No upload module set', 'nomodule' );
                        }
                } catch ( UploadStashException $e ) { // XXX: don't spam exception log
-                       $this->dieUsage( get_class( $e ) . ": " . $e->getMessage(), 'stasherror' );
+                       $this->handleStashException( $e );
                }
 
                // First check permission to upload
@@ -112,7 +112,7 @@ class ApiUpload extends ApiBase {
                                $result['imageinfo'] = $this->mUpload->getImageInfo( $this->getResult() );
                        }
                } catch ( UploadStashException $e ) { // XXX: don't spam exception log
-                       $this->dieUsage( get_class( $e ) . ": " . $e->getMessage(), 'stasherror' );
+                       $this->handleStashException( $e );
                }
 
                $this->getResult()->addValue( null, $this->getModuleName(), $result );
@@ -159,6 +159,8 @@ class ApiUpload extends ApiBase {
                        if ( $warnings && count( $warnings ) > 0 ) {
                                $result['warnings'] = $warnings;
                        }
+               } catch ( UploadStashException $e ) {
+                       $this->handleStashException( $e );
                } catch ( MWException $e ) {
                        $this->dieUsage( $e->getMessage(), 'stashfailed' );
                }
@@ -180,6 +182,8 @@ class ApiUpload extends ApiBase {
                try {
                        $result['filekey'] = $this->performStash();
                        $result['sessionkey'] = $result['filekey']; // backwards compatibility
+               } catch ( UploadStashException $e ) {
+                       $this->handleStashException( $e );
                } catch ( MWException $e ) {
                        $result['warnings']['stashfailed'] = $e->getMessage();
                }
@@ -205,6 +209,8 @@ class ApiUpload extends ApiBase {
                if ( $this->mParams['offset'] == 0 ) {
                        try {
                                $filekey = $this->performStash();
+                       } catch ( UploadStashException $e ) {
+                               $this->handleStashException( $e );
                        } catch ( MWException $e ) {
                                // FIXME: Error handling here is wrong/different from rest of this
                                $this->dieUsage( $e->getMessage(), 'stashfailed' );
@@ -223,11 +229,12 @@ class ApiUpload extends ApiBase {
                // Check we added the last chunk:
                if ( $this->mParams['offset'] + $chunkSize == $this->mParams['filesize'] ) {
                        if ( $this->mParams['async'] ) {
-                               $progress = UploadBase::getSessionStatus( $filekey );
+                               $progress = UploadBase::getSessionStatus( $this->getUser(), $filekey );
                                if ( $progress && $progress['result'] === 'Poll' ) {
                                        $this->dieUsage( "Chunk assembly already in progress.", 'stashfailed' );
                                }
                                UploadBase::setSessionStatus(
+                                       $this->getUser(),
                                        $filekey,
                                        array( 'result' => 'Poll',
                                                'stage' => 'queued', 'status' => Status::newGood() )
@@ -241,6 +248,7 @@ class ApiUpload extends ApiBase {
                                        )
                                ) );
                                $result['result'] = 'Poll';
+                               $result['stage'] = 'queued';
                        } else {
                                $status = $this->mUpload->concatenateChunks();
                                if ( !$status->isGood() ) {
@@ -280,7 +288,8 @@ class ApiUpload extends ApiBase {
                } catch ( MWException $e ) {
                        $message = 'Stashing temporary file failed: ' . get_class( $e ) . ' ' . $e->getMessage();
                        wfDebug( __METHOD__ . ' ' . $message . "\n" );
-                       throw new MWException( $message );
+                       $className = get_class( $e );
+                       throw new $className( $message );
                }
 
                return $fileKey;
@@ -326,7 +335,7 @@ class ApiUpload extends ApiBase {
 
                // Status report for "upload to stash"/"upload from stash"
                if ( $this->mParams['filekey'] && $this->mParams['checkstatus'] ) {
-                       $progress = UploadBase::getSessionStatus( $this->mParams['filekey'] );
+                       $progress = UploadBase::getSessionStatus( $this->getUser(), $this->mParams['filekey'] );
                        if ( !$progress ) {
                                $this->dieUsage( 'No result in status data', 'missingresult' );
                        } elseif ( !$progress['status']->isGood() ) {
@@ -574,6 +583,41 @@ class ApiUpload extends ApiBase {
                return $warnings;
        }
 
+       /**
+        * Handles a stash exception, giving a useful error to the user.
+        * @param Exception $e The exception we encountered.
+        */
+       protected function handleStashException( $e ) {
+               $exceptionType = get_class( $e );
+
+               switch ( $exceptionType ) {
+                       case 'UploadStashFileNotFoundException':
+                               $this->dieUsage( 'Could not find the file in the stash: ' . $e->getMessage(), 'stashedfilenotfound' );
+                               break;
+                       case 'UploadStashBadPathException':
+                               $this->dieUsage( 'File key of improper format or otherwise invalid: ' . $e->getMessage(), 'stashpathinvalid' );
+                               break;
+                       case 'UploadStashFileException':
+                               $this->dieUsage( 'Could not store upload in the stash: ' . $e->getMessage(), 'stashfilestorage' );
+                               break;
+                       case 'UploadStashZeroLengthFileException':
+                               $this->dieUsage( 'File is of zero length, and could not be stored in the stash: ' . $e->getMessage(), 'stashzerolength' );
+                               break;
+                       case 'UploadStashNotLoggedInException':
+                               $this->dieUsage( 'Not logged in: ' . $e->getMessage(), 'stashnotloggedin' );
+                               break;
+                       case 'UploadStashWrongOwnerException':
+                               $this->dieUsage( 'Wrong owner: ' . $e->getMessage(), 'stashwrongowner' );
+                               break;
+                       case 'UploadStashNoSuchKeyException':
+                               $this->dieUsage( 'No such filekey: ' . $e->getMessage(), 'stashnosuchfilekey' );
+                               break;
+                       default:
+                               $this->dieUsage( $exceptionType . ": " . $e->getMessage(), 'stasherror' );
+                               break;
+               }
+       }
+
        /**
         * Perform the actual upload. Returns a suitable result array on success;
         * dies on failure.
@@ -611,11 +655,12 @@ class ApiUpload extends ApiBase {
 
                // No errors, no warnings: do the upload
                if ( $this->mParams['async'] ) {
-                       $progress = UploadBase::getSessionStatus( $this->mParams['filekey'] );
+                       $progress = UploadBase::getSessionStatus( $this->getUser(), $this->mParams['filekey'] );
                        if ( $progress && $progress['result'] === 'Poll' ) {
                                $this->dieUsage( "Upload from stash already in progress.", 'publishfailed' );
                        }
                        UploadBase::setSessionStatus(
+                               $this->getUser(),
                                $this->mParams['filekey'],
                                array( 'result' => 'Poll', 'stage' => 'queued', 'status' => Status::newGood() )
                        );
@@ -631,6 +676,7 @@ class ApiUpload extends ApiBase {
                                )
                        ) );
                        $result['result'] = 'Poll';
+                       $result['stage'] = 'queued';
                } else {
                        /** @var $status Status */
                        $status = $this->mUpload->performUpload( $this->mParams['comment'],
@@ -688,10 +734,6 @@ class ApiUpload extends ApiBase {
                                ApiBase::PARAM_DFLT => ''
                        ),
                        'text' => null,
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
-                       ),
                        'watch' => array(
                                ApiBase::PARAM_DFLT => false,
                                ApiBase::PARAM_DEPRECATED => true,
@@ -732,64 +774,17 @@ class ApiUpload extends ApiBase {
                return $params;
        }
 
-       public function getParamDescription() {
-               $params = array(
-                       'filename' => 'Target filename',
-                       'token' => 'Edit token. You can get one of these through prop=info',
-                       'comment' => 'Upload comment. Also used as the initial page text for new ' .
-                               'files if "text" is not specified',
-                       'text' => 'Initial page text for new files',
-                       'watch' => 'Watch the page',
-                       'watchlist' => 'Unconditionally add or remove the page from your watchlist, ' .
-                               'use preferences or do not change watch',
-                       'ignorewarnings' => 'Ignore any warnings',
-                       'file' => 'File contents',
-                       'url' => 'URL to fetch the file from',
-                       'filekey' => 'Key that identifies a previous upload that was stashed temporarily.',
-                       'sessionkey' => 'Same as filekey, maintained for backward compatibility.',
-                       'stash' => 'If set, the server will not add the file to the repository ' .
-                               'and stash it temporarily.',
-
-                       'chunk' => 'Chunk contents',
-                       'offset' => 'Offset of chunk in bytes',
-                       'filesize' => 'Filesize of entire upload',
-
-                       'async' => 'Make potentially large file operations asynchronous when possible',
-                       'asyncdownload' => 'Make fetching a URL asynchronous',
-                       'leavemessage' => 'If asyncdownload is used, leave a message on the user talk page if finished',
-                       'statuskey' => 'Fetch the upload status for this file key (upload by URL)',
-                       'checkstatus' => 'Only fetch the upload status for the given file key',
-               );
-
-               return $params;
-       }
-
-       public function getDescription() {
-               return array(
-                       'Upload a file, or get the status of pending uploads. Several methods are available:',
-                       ' * Upload file contents directly, using the "file" parameter',
-                       ' * Have the MediaWiki server fetch a file from a URL, using the "url" parameter',
-                       ' * Complete an earlier upload that failed due to warnings, using the "filekey" parameter',
-                       'Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when',
-                       'sending the "file". Also you must get and send an edit token before doing any upload stuff.'
-               );
-       }
-
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
+               return 'csrf';
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=upload&filename=Wiki.png' .
-                       '&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png'
-                               => 'Upload from a URL',
-                       'api.php?action=upload&filename=Wiki.png&filekey=filekey&ignorewarnings=1'
-                               => 'Complete an upload that failed due to warnings',
+                       'action=upload&filename=Wiki.png' .
+                               '&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png&token=123ABC'
+                               => 'apihelp-upload-example-url',
+                       'action=upload&filename=Wiki.png&filekey=filekey&ignorewarnings=1&token=123ABC'
+                               => 'apihelp-upload-example-filekey',
                );
        }
 
index 0bed859..cf8ed5a 100644 (file)
@@ -32,12 +32,28 @@ class ApiUserrights extends ApiBase {
 
        private $mUser = null;
 
+       /**
+        * Get a UserrightsPage object, or subclass.
+        * @return UserrightsPage
+        */
+       protected function getUserRightsPage() {
+               return new UserrightsPage;
+       }
+
+       /**
+        * Get all available groups.
+        * @return array
+        */
+       protected function getAllGroups() {
+               return User::getAllGroups();
+       }
+
        public function execute() {
                $params = $this->extractRequestParams();
 
-               $user = $this->getUrUser();
+               $user = $this->getUrUser( $params );
 
-               $form = new UserrightsPage;
+               $form = $this->getUserRightsPage();
                $form->setContext( $this->getContext() );
                $r['user'] = $user->getName();
                $r['userid'] = $user->getId();
@@ -53,19 +69,19 @@ class ApiUserrights extends ApiBase {
        }
 
        /**
+        * @param array $params
         * @return User
         */
-       private function getUrUser() {
+       private function getUrUser( array $params ) {
                if ( $this->mUser !== null ) {
                        return $this->mUser;
                }
 
-               $params = $this->extractRequestParams();
                $this->requireOnlyOneParameter( $params, 'user', 'userid' );
 
                $user = isset( $params['user'] ) ? $params['user'] : '#' . $params['userid'];
 
-               $form = new UserrightsPage;
+               $form = $this->getUserRightsPage();
                $form->setContext( $this->getContext() );
                $status = $form->fetchUser( $user );
                if ( !$status->isOK() ) {
@@ -94,50 +110,37 @@ class ApiUserrights extends ApiBase {
                                ApiBase::PARAM_TYPE => 'integer',
                        ),
                        'add' => array(
-                               ApiBase::PARAM_TYPE => User::getAllGroups(),
+                               ApiBase::PARAM_TYPE => $this->getAllGroups(),
                                ApiBase::PARAM_ISMULTI => true
                        ),
                        'remove' => array(
-                               ApiBase::PARAM_TYPE => User::getAllGroups(),
+                               ApiBase::PARAM_TYPE => $this->getAllGroups(),
                                ApiBase::PARAM_ISMULTI => true
                        ),
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
-                       ),
                        'reason' => array(
                                ApiBase::PARAM_DFLT => ''
-                       )
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'user' => 'User name',
-                       'userid' => 'User id',
-                       'add' => 'Add the user to these groups',
-                       'remove' => 'Remove the user from these groups',
-                       'token' => 'A userrights token previously retrieved through list=users',
-                       'reason' => 'Reason for the change',
+                       ),
+                       'token' => array(
+                               // Standard definition automatically inserted
+                               ApiBase::PARAM_HELP_MSG_APPEND => array( 'api-help-param-token-webui' ),
+                       ),
                );
        }
 
-       public function getDescription() {
-               return 'Add/remove a user to/from groups.';
-       }
-
        public function needsToken() {
-               return true;
+               return 'userrights';
        }
 
-       public function getTokenSalt() {
-               return $this->getUrUser()->getName();
+       protected function getWebUITokenSalt( array $params ) {
+               return $this->getUrUser( $params )->getName();
        }
 
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=userrights&user=FooBot&add=bot&remove=sysop|bureaucrat&token=123ABC',
-                       'api.php?action=userrights&userid=123&add=bot&remove=sysop|bureaucrat&token=123ABC'
+                       'action=userrights&user=FooBot&add=bot&remove=sysop|bureaucrat&token=123ABC'
+                               => 'apihelp-userrights-example-user',
+                       'action=userrights&userid=123&add=bot&remove=sysop|bureaucrat&token=123ABC'
+                               => 'apihelp-userrights-example-userid',
                );
        }
 
index 8060260..09638f3 100644 (file)
@@ -104,17 +104,6 @@ class ApiWatch extends ApiBase {
 
                $res = array( 'title' => $title->getPrefixedText() );
 
-               // Currently unnecessary, code to act as a safeguard against any change
-               // in current behavior of uselang.
-               // Copy from ApiParse
-               $oldLang = null;
-               if ( isset( $params['uselang'] ) &&
-                       $params['uselang'] != $this->getContext()->getLanguage()->getCode()
-               ) {
-                       $oldLang = $this->getContext()->getLanguage(); // Backup language
-                       $this->getContext()->setLanguage( Language::factory( $params['uselang'] ) );
-               }
-
                if ( $params['unwatch'] ) {
                        $status = UnwatchAction::doUnwatch( $title, $user );
                        if ( $status->isOK() ) {
@@ -131,10 +120,6 @@ class ApiWatch extends ApiBase {
                        }
                }
 
-               if ( !is_null( $oldLang ) ) {
-                       $this->getContext()->setLanguage( $oldLang ); // Reset language to $oldLang
-               }
-
                if ( !$status->isOK() ) {
                        if ( $compatibilityMode ) {
                                $this->dieStatus( $status );
@@ -166,10 +151,6 @@ class ApiWatch extends ApiBase {
        }
 
        public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
                return 'watch';
        }
 
@@ -180,12 +161,9 @@ class ApiWatch extends ApiBase {
                                ApiBase::PARAM_DEPRECATED => true
                        ),
                        'unwatch' => false,
-                       'uselang' => null,
-                       'token' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'continue' => '',
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -194,26 +172,14 @@ class ApiWatch extends ApiBase {
                return $result;
        }
 
-       public function getParamDescription() {
-               $psModule = $this->getPageSet();
-
-               return $psModule->getParamDescription() + array(
-                       'title' => 'The page to (un)watch. use titles instead',
-                       'unwatch' => 'If set the page will be unwatched rather than watched',
-                       'uselang' => 'Language to show the message in',
-                       'token' => 'A token previously acquired via prop=info',
-                       'continue' => 'When more results are available, use this to continue',
-               );
-       }
-
-       public function getDescription() {
-               return 'Add or remove pages from/to the current user\'s watchlist.';
-       }
-
-       public function getExamples() {
+       protected function getExamplesMessages() {
                return array(
-                       'api.php?action=watch&titles=Main_Page' => 'Watch the page "Main Page"',
-                       'api.php?action=watch&titles=Main_Page&unwatch=' => 'Unwatch the page "Main Page"',
+                       'action=watch&titles=Main_Page&token=123ABC'
+                               => 'apihelp-watch-example-watch',
+                       'action=watch&titles=Main_Page&unwatch=&token=123ABC'
+                               => 'apihelp-watch-example-unwatch',
+                       'action=watch&generator=allpages&gapnamespace=0&token=123ABC'
+                               => 'apihelp-watch-example-generator',
                );
        }
 
diff --git a/includes/api/i18n/be-tarask.json b/includes/api/i18n/be-tarask.json
new file mode 100644 (file)
index 0000000..09d2086
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Red Winged Duck"
+               ]
+       },
+       "apihelp-main-param-action": "Дзеяньне для выкананьня."
+}
diff --git a/includes/api/i18n/ce.json b/includes/api/i18n/ce.json
new file mode 100644 (file)
index 0000000..1eb7109
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Умар"
+               ]
+       },
+       "apihelp-userrights-param-userid": "Декъашхочун ID."
+}
diff --git a/includes/api/i18n/cs.json b/includes/api/i18n/cs.json
new file mode 100644 (file)
index 0000000..f8fbdc1
--- /dev/null
@@ -0,0 +1,87 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mormegil"
+               ]
+       },
+       "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://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts 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-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-smaxage": "Nastaví hlavičku s-maxage na uvedený počet sekund. Chyby se nekešují nikdy.",
+       "apihelp-main-param-maxage": "Nastaví hlavičku max-age 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-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-help-description": "Zobrazuje nápovědu k uvedeným modulům.",
+       "apihelp-help-param-modules": "Moduly, pro které se má zobrazit nápověda (hodnoty parametrů action= a format= nebo „main“). Submoduly lze zadávat pomocí „+“.",
+       "apihelp-help-param-submodules": "Zahrnout nápovědu pro submoduly uvedeného modulu.",
+       "apihelp-help-param-recursivesubmodules": "Zahrnout nápovědu pro submoduly rekurzivně.",
+       "apihelp-help-param-helpformat": "Formát výstupu nápovědy.",
+       "apihelp-help-param-wrap": "Obalit výstup do standardní struktury API odpovědi.",
+       "apihelp-help-param-toc": "Zahrnout v HTML výstupu tabulku obsahu.",
+       "apihelp-help-example-main": "Nápověda k hlavnímu modulu",
+       "apihelp-help-example-recursive": "Veškerá nápověda na jedné stránce",
+       "apihelp-help-example-help": "Nápověda k samotnému modulu nápovědy",
+       "apihelp-help-example-query": "Nápověda pro dva submoduly query",
+       "apihelp-format-example-generic": "Výsledek dotazu vypsat ve formátu $1.",
+       "apihelp-dbg-description": "Vypisuje data ve formátu funkce var_export() z PHP.",
+       "apihelp-dbgfm-description": "Vypisuje data ve formátu funkce var_export() z PHP (v čitelné HTML podobě).",
+       "apihelp-dump-description": "Vypisuje data ve formátu funkce var_dump() z PHP.",
+       "apihelp-dumpfm-description": "Vypisuje data ve formátu funkce var_dump() z PHP (v čitelné HTML podobě).",
+       "apihelp-json-description": "Vypisuje data ve formátu JSON.",
+       "apihelp-json-param-callback": "Pokud je uvedeno, obalí výstup do zadaného volání funkce. Z bezpečnostních důvodů budou omezena všechna data specifická pro uživatele.",
+       "apihelp-json-param-utf8": "Pokud je uvedeno, bude většina ne-ASCII znaků (ale ne všechny) kódována v UTF-8 místo nahrazení hexadecimálními escape sekvencemi.",
+       "apihelp-jsonfm-description": "Vypisuje data ve formátu JSON (v čitelné HTML podobě).",
+       "apihelp-none-description": "Nevypisuje nic.",
+       "apihelp-php-description": "Vypisuje data v serializačním formátu PHP.",
+       "apihelp-phpfm-description": "Vypisuje data ve serializačním formátu PHP (v čitelné HTML podobě).",
+       "apihelp-rawfm-description": "Vypisuje data s ladicími prvky ve formátu JSON (v čitelné HTML podobě).",
+       "apihelp-txt-description": "Vypisuje data ve formátu funkce print_r() z PHP.",
+       "apihelp-txtfm-description": "Vypisuje data ve formátu funkce print_r() z PHP (v čitelné HTML podobě).",
+       "apihelp-wddx-description": "Vypisuje data ve formátu WDDX.",
+       "apihelp-wddxfm-description": "Vypisuje data ve formátu WDDX (v čitelné HTML podobě).",
+       "apihelp-xml-description": "Vypisuje data ve formátu XML.",
+       "apihelp-xml-param-xslt": "Pokud je uvedeno, přidá stylopis &lt;xslt&gt;. Měla by jím být wikistránka v jmenném prostoru MediaWiki, jejíž název končí na „.xsl“.",
+       "apihelp-xml-param-includexmlnamespace": "Pokud je uvedeno, přidá jmenný prostor XML.",
+       "apihelp-xmlfm-description": "Vypisuje data ve formátu XML (v čitelné HTML podobě).",
+       "apihelp-yaml-description": "Vypisuje data ve formátu YAML.",
+       "apihelp-yamlfm-description": "Vypisuje data ve formátu YAML (v čitelné HTML podobě).",
+       "api-format-title": "Odpověď z MediaWiki API",
+       "api-format-prettyprint-header": "Díváte se na HTML reprezentaci formátu $1. HTML se hodí pro ladění, ale pro aplikační použití je nevhodné.\n\nPro změnu výstupního formátu uveďte parametr format. Abyste viděli ne-HTML reprezentaci formátu $1, nastavte format=$2.\n\nVíce informací najdete v [https://www.mediawiki.org/wiki/Special:MyLanguage/API:Main_page úplné dokumentaci] nebo [[Special:ApiHelp/main|nápovědě k API]].",
+       "api-help-title": "Nápověda k MediaWiki API",
+       "api-help-lead": "Toto je automaticky generovaná dokumentační stránka k MediaWiki API.\n\nDokumentace a příklady: https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "Hlavní modul",
+       "api-help-flag-deprecated": "Tento modul je zastaralý.",
+       "api-help-flag-internal": "<strong>Tento modul je interní nebo nestabilní.</strong> Jeho funkčnost se může bez předchozího upozornění změnit.",
+       "api-help-flag-readrights": "Tento modul vyžaduje oprávnění ke čtení.",
+       "api-help-flag-writerights": "Tento modul vyžaduje oprávnění k zápisu.",
+       "api-help-flag-mustbeposted": "Tento modul přijímá pouze požadavky POST.",
+       "api-help-flag-generator": "Tento modul lze využívat jako generátor.",
+       "api-help-parameters": "{{PLURAL:$1|Parametr|Parametry}}:",
+       "api-help-param-deprecated": "Zastaralý.",
+       "api-help-param-required": "Tento parametr je povinný.",
+       "api-help-param-list": "{{PLURAL:$1|1=Jedna hodnota|2=Hodnoty (oddělené „{{!}}“)}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Musí být prázdné|Může být prázdné nebo $2}}",
+       "api-help-param-limit": "Není dovoleno více než $1.",
+       "api-help-param-limit2": "Není dovoleno více než $1 ($2 pro boty).",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=Hodnota nesmí|2=Hodnoty nesmějí}} být nižší než $2.",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=Hodnota nesmí|2=Hodnoty nesmějí}} být vyšší než $3.",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=Hodnota|2=Hodnoty}} musí ležet mezi $2 a $3.",
+       "api-help-param-upload": "Musí se odeslat POST požadavkem jako načítaný soubor pomocí multipart/form-data.",
+       "api-help-param-multi-separate": "Hodnoty oddělujte pomocí „|“.",
+       "api-help-param-multi-max": "Maximální počet hodnot je {{PLURAL:$1|$1}} (pro boty {{PLURAL:$2|$2}}).",
+       "api-help-param-default": "Implicitní hodnota: $1",
+       "api-help-param-default-empty": "Implicitní hodnota: <span class=\"apihelp-empty\">(prázdné)</span>",
+       "api-help-param-token": "Token typu „$1“ získaný pomocí [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(bez popisu)</span>",
+       "api-help-examples": "{{PLURAL:$1|Příklad|Příklady}}:",
+       "api-help-permissions": "{{PLURAL:$1|Oprávnění}}:",
+       "api-help-permissions-granted-to": "Uděleno {{PLURAL:$1|skupině|skupinám}}: $2",
+       "api-help-right-apihighlimits": "Používání vyšších limitů v API dotazech (pomalé dotazy: $1, rychlé dotazy: $2). Limity pro pomalé dotazy se vztahují i na vícehodnotové parametry.",
+       "api-credits-header": "Zásluhy",
+       "api-credits": "Vývojáři API:\n* Roan Kattouw (hlavní vývojář září 2007–2009)\n* Viktor Vasiljev\n* Bryan Tong Minh\n* Sam Reed\n* Jurij Astrachan (tvůrce, hlavní vývojář září 2006–září 2007)\n* Brad Jorsch (hlavní vývojář od 2013)\n\nSvé komentáře, návrhy či dotazy posílejte na mediawiki-api@lists.wikimedia.org\nnebo založte chybové hlášení na https://bugzilla.wikimedia.org/."
+}
diff --git a/includes/api/i18n/de.json b/includes/api/i18n/de.json
new file mode 100644 (file)
index 0000000..7bdc693
--- /dev/null
@@ -0,0 +1,326 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Florian",
+                       "Kghbln",
+                       "Metalhead64"
+               ]
+       },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page/de Dokumentation]\n* [https://www.mediawiki.org/wiki/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://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts Fehlerberichte und Anfragen]\n</div>\n<strong>Status:</strong> Alle auf dieser Seite gezeigten Funktionen sollten funktionieren, aber die API ist noch in aktiver Entwicklung und könnte sich zu jeder Zeit ändern. Abonniere die [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki-API-Ankündigungs-Mailingliste] für Mitteilungen über Aktualisierungen.\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“ versandt. Die zurückgesandten Werte des Headers und des Fehlercodes werden auf den gleichen Wert gesetzt. Für weitere Informationen siehe https://www.mediawiki.org/wiki/API:Errors_and_warnings.",
+       "apihelp-main-param-action": "Welche Aktion ausgeführt werden soll.",
+       "apihelp-main-param-format": "Das Format der Ausgabe.",
+       "apihelp-main-param-maxlag": "Maximale Verzögerung kann verwendet werden, wenn MediaWiki auf einem datenbankreplizierten Cluster installiert ist. Um Aktionen zu speichern, die Websitereplikationsverzögerungen verursachen, kann dieser Parameter den Client warten lassen, bis die Replikationsverzögerung weniger als dem angegebenen Wert entspricht. Im Fall einer übermäßigen Verzögerung wird der Fehlercode „maxlag“ zurückgegeben mit einer Nachricht wie „Waiting for $host: $lag seconds lagged“.<br />Siehe https://www.mediawiki.org/wiki/Manual:Maxlag_parameter für weitere Informationen.",
+       "apihelp-main-param-smaxage": "Den s-maxage-Header auf diese Anzahl Sekunden festlegen. Fehler werden niemals gecacht.",
+       "apihelp-main-param-maxage": "Den max-age-Header auf diese Anzahl Sekunden festlegen. Fehler werden niemals gecacht.",
+       "apihelp-main-param-assert": "Den angemeldeten Benutzer verifizieren, falls auf „user“ festgelegt oder hat das Bot-Benutzerrecht, falls „bot“.",
+       "apihelp-main-param-requestid": "Jeder hier angegebene Wert wird in der Antwort eingeschlossen. Kann für unterschiedliche Anfragen verwendet werden.",
+       "apihelp-main-param-servedby": "Den von der Anfrage bereitgestellten Hostnamen in den Ergebnissen einschließen.",
+       "apihelp-main-param-curtimestamp": "Den aktuellen Zeitstempel im Ergebnis einschließen.",
+       "apihelp-main-param-origin": "Beim Zugriff auf die API mit einer Kreuz-Domain-AJAX-Anfrage (CORS) lege dies auf die entstehende Domain fest. Dies muss in einer beliebigen Vorfluganfrage eingeschlossen werden und deshalb ein Teil der Anfrage-URI sein (nicht der POST-Body). Dies muss genau einem der Ursprünge im Origin: header entsprechen, so muss es auf etwas festgelegt werden wie http://de.wikipedia.org oder https://meta.wikimedia.org. Falls dieser Parameter nicht dem Origin: header entspricht, wird eine 403-Antwort zurückgegeben. Falls dieser Parameter dem Origin: header entspricht und der Ursprung weißgelistet ist, wird ein Zugriffskontrolle-erlauben-Ursprung festgelegt.",
+       "apihelp-main-param-uselang": "Zu verwendende Sprache für Nachrichtenübersetzungen. Eine Liste der Codes kann von [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]] mit siprop=languages abgerufen werden. Gib „user“ zum Verwenden der aktuellen Benutzerspracheinstellung oder „content“ an, um die Inhaltssprache des Wikis zu verwenden.",
+       "apihelp-block-description": "Einen Benutzer sperren.",
+       "apihelp-block-param-user": "Benutzername, IP-Adresse oder IP-Bereich, den du sperren willst.",
+       "apihelp-block-param-expiry": "Ablaufzeit. Kann relativ (z.&nbsp;B. „5 Monate“ oder „2 Wochen“) oder absolut (z.&nbsp;B. „2014-09-18T12:34:56Z“) sein. Falls auf „unbeschränkt“ oder „niemals“ gesetzt, wird die Sperre nie ablaufen.",
+       "apihelp-block-param-reason": "Grund für die Sperre.",
+       "apihelp-block-param-anononly": "Nur anonyme Benutzer sperren (z.&nbsp;B. anonyme Bearbeitungen für diese IP deaktivieren).",
+       "apihelp-block-param-nocreate": "Benutzerkontenerstellung verhindern.",
+       "apihelp-block-param-autoblock": "Die zuletzt verwendete IP-Adresse automatisch sperren und alle darauffolgenden IP-Adressen, die versuchen sich anzumelden.",
+       "apihelp-block-param-noemail": "Benutzer davon abhalten, E-Mails auf dem Wiki zu versenden (erfordert das blockemail-Recht).",
+       "apihelp-block-param-hidename": "Den Benutzernamen im Sperr-Logbuch verstecken (erfordert das hideuser-Recht).",
+       "apihelp-block-param-allowusertalk": "Dem Benutzer erlauben, seine eigene Diskussionsseite zu bearbeiten (abhängig von $wgBlockAllowsUTEdit).",
+       "apihelp-block-param-reblock": "Falls der Benutzer bereits gesperrt ist, die vorhandene Sperre überschreiben.",
+       "apihelp-block-param-watchuser": "Beobachtet die Benutzer- oder IP-Benutzer- und -diskussionsseiten.",
+       "apihelp-block-example-ip-simple": "Sperren der IP 192.0.2.5 für drei Tage mit der Begründung „erste Verwarnung“",
+       "apihelp-block-example-user-complex": "Benutzer unbeschränkt sperren mit der Begründung „Vandalismus“ und Erstellung neuer Benutzerkonten sowie Versand von E-Mails verhindern.",
+       "apihelp-clearhasmsg-description": "Löscht das hasmsg-Flag für den aktuellen Benutzer.",
+       "apihelp-clearhasmsg-example-1": "Löscht das hasmsg-Flag für den aktuellen Benutzer",
+       "apihelp-compare-description": "Ruft den Unterschied zwischen 2 Seiten ab.\n\nDu musst eine Versionsnummer, einen Seitentitel oder eine Seitenkennung für „von“ und „nach“ angeben.",
+       "apihelp-compare-param-fromtitle": "Erster zu vergleichender Titel.",
+       "apihelp-compare-param-fromid": "Erste zu vergleichende Seitenkennung.",
+       "apihelp-compare-param-fromrev": "Erste zu vergleichende Version.",
+       "apihelp-compare-param-totitle": "Zweiter zu vergleichender Titel.",
+       "apihelp-compare-param-toid": "Zweite zu vergleichende Seitenkennung.",
+       "apihelp-compare-param-torev": "Zweite zu vergleichende Version.",
+       "apihelp-compare-example-1": "Erstellt einen Unterschied zwischen Version 1 und 2",
+       "apihelp-createaccount-description": "Erstellt ein neues Benutzerkonto.",
+       "apihelp-createaccount-param-name": "Benutzername.",
+       "apihelp-createaccount-param-password": "Passwort (ignoriert, falls $1mailpassword festgelegt ist).",
+       "apihelp-createaccount-param-domain": "Domain für die externe Authentifizierung (optional).",
+       "apihelp-createaccount-param-token": "Der in der ersten Anfrage erhaltene Benutzerkontenerstellungs-Token.",
+       "apihelp-createaccount-param-email": "E-Mail-Adresse des Benutzers (optional).",
+       "apihelp-createaccount-param-realname": "Bürgerlicher Name des Benutzers (optional).",
+       "apihelp-createaccount-param-mailpassword": "Falls auf einen beliebigen Wert gesetzt, wird ein zufälliges Passwort per E-Mail an den Benutzer versandt.",
+       "apihelp-createaccount-param-reason": "Optionale Begründung für die Benutzerkontenerstellung, die in den Logbüchern vermerkt wird.",
+       "apihelp-createaccount-param-language": "Festzulegender standardmäßiger Sprachcode für den Benutzer (optional, Standard ist Inhaltssprache).",
+       "apihelp-createaccount-example-pass": "Erstellt den Benutzer „testuser“ mit dem Passwort „test123“",
+       "apihelp-createaccount-example-mail": "Benutzer „testmailuser“ erstellen und ein zufällig generiertes Passwort per E-Mail versenden",
+       "apihelp-delete-description": "Löscht eine Seite.",
+       "apihelp-delete-param-title": "Titel der Seite, die du löschen möchtest. Kann nicht zusammen mit $1pageid verwendet werden.",
+       "apihelp-delete-param-pageid": "Seitenkennung der Seite, die du löschen möchtest. Kann nicht zusammen mit $1title verwendet werden.",
+       "apihelp-delete-param-reason": "Grund für die Löschung. Falls nicht festgelegt, wird ein automatisch generierter Grund verwendet.",
+       "apihelp-delete-param-watch": "Fügt die Seite deiner Beobachtungsliste hinzu.",
+       "apihelp-delete-param-watchlist": "Die Seite bedingungslos zu deiner Beobachtungsliste hinzufügen oder von ihr entfernen, Einstellungen verwenden oder Beobachtung nicht ändern.",
+       "apihelp-delete-param-unwatch": "Die Seite von deiner Beobachtungsliste entfernen.",
+       "apihelp-delete-param-oldimage": "Der Name des alten zu löschenden Bildes, wie von [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]] angegeben.",
+       "apihelp-delete-example-simple": "Löscht die Hauptseite",
+       "apihelp-delete-example-reason": "Die Hauptseite löschen mit der Begründung „Vorbereitung für die Verschiebung“",
+       "apihelp-disabled-description": "Dieses Modul wurde deaktiviert.",
+       "apihelp-edit-description": "Erstellt und bearbeitet Seiten.",
+       "apihelp-edit-param-title": "Titel der Seite, die du bearbeiten möchtest. Kann nicht zusammen mit $1pageid verwendet werden.",
+       "apihelp-edit-param-pageid": "Seitenkennung der Seite, die du bearbeiten möchtest. Kann nicht zusammen mit $1title verwendet werden.",
+       "apihelp-edit-param-section": "Abschnittsnummer. 0 für die Einleitung, „new“ für einen neuen Abschnitt.",
+       "apihelp-edit-param-sectiontitle": "Der Titel für einen neuen Abschnitt.",
+       "apihelp-edit-param-text": "Seiteninhalt.",
+       "apihelp-edit-param-summary": "Bearbeitungszusammenfassung. Auch Abschnittstitel, wenn $1section=new und $1sectiontitle nicht festgelegt ist.",
+       "apihelp-edit-param-minor": "Kleine Bearbeitung.",
+       "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 du den Bearbeitungsprozess begonnen hast, 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-recreate": "Fehler ignorieren, wenn der Artikel in der Zwischenzeit gelöscht wurde.",
+       "apihelp-edit-param-createonly": "Die 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": "Fügt die Seite deiner Beobachtungsliste hinzu.",
+       "apihelp-edit-param-unwatch": "Entfernt die Seite von deiner Beobachtungsliste.",
+       "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-md5": "Der MD5-Hash des Parameters $1text oder die verbundenen Parameter $1prependtext und $1appendtext. Falls festgelegt, wird die Bearbeitung nicht ausgeführt, bis der Hash korrekt ist.",
+       "apihelp-edit-param-prependtext": "Ergänzt diesen Text am Anfang der Seite. Überschreibt $1text.",
+       "apihelp-edit-param-appendtext": "Fügt diesen Text an das Ende der Seite hinzu. Überschreibt $1text.\n\nVerwende $1section=new zum Anhängen eines neuen Abschnitts anstatt dieses Parameters.",
+       "apihelp-edit-param-undo": "Diese Version rückgängig machen. Überschreibt $1text, $1prependtext und $1appendtext.",
+       "apihelp-edit-param-undoafter": "Alle Versionen von $1undo auf diese rückgängig machen. Falls nicht angegeben, nur eine Version rückgängig machen.",
+       "apihelp-edit-param-redirect": "Weiterleitungen automatisch anpassen.",
+       "apihelp-edit-param-contentformat": "Für den Eingabetext verwendetes Inhaltsserialisierungsformat.",
+       "apihelp-edit-param-contentmodel": "Inhaltsmodell des neuen Inhalts.",
+       "apihelp-edit-param-token": "Der Token sollte immer als letzter Parameter gesendet werden, mindestens aber nach dem $1text-Parameter.",
+       "apihelp-edit-example-edit": "Eine Seite bearbeiten",
+       "apihelp-edit-example-prepend": "_&#95;NOTOC_&#95; bei einer Seite voranstellen",
+       "apihelp-edit-example-undo": "Versionen 13579 bis 13585 mit automatischer Zusammenfassung rückgängig machen",
+       "apihelp-emailuser-description": "E-Mail an einen Benutzer senden.",
+       "apihelp-emailuser-param-target": "Benutzer, an den die E-Mail gesendet werden soll.",
+       "apihelp-emailuser-param-subject": "Betreffzeile.",
+       "apihelp-emailuser-param-text": "Textkörper.",
+       "apihelp-emailuser-param-ccme": "Eine Kopie dieser E-Mail an mich senden.",
+       "apihelp-emailuser-example-email": "Eine E-Mail an den Benutzer „WikiSysop“ mit dem Text „Inhalt“ senden",
+       "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-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": "Expandiert den Wikitext „<nowiki>{{Project:Spielwiese}}</nowiki>“",
+       "apihelp-feedcontributions-description": "Gibt einen Benutzerbeiträge-Feed zurück.",
+       "apihelp-feedcontributions-param-feedformat": "Das Format des Feeds.",
+       "apihelp-feedcontributions-param-user": "Von welchen Benutzern die Beiträge abgerufen werden sollen.",
+       "apihelp-feedcontributions-param-namespace": "Auf welchen Namensraum die Beiträge gefiltert werden sollen.",
+       "apihelp-feedcontributions-param-year": "Von Jahr (und früher).",
+       "apihelp-feedcontributions-param-month": "Von Monat (und früher).",
+       "apihelp-feedcontributions-param-tagfilter": "Beiträge filtern, die diese Markierungen haben.",
+       "apihelp-feedcontributions-param-deletedonly": "Nur gelöschte Beiträge anzeigen.",
+       "apihelp-feedcontributions-param-toponly": "Nur aktuelle Versionen anzeigen.",
+       "apihelp-feedcontributions-param-newonly": "Nur Seitenerstellungen anzeigen.",
+       "apihelp-feedcontributions-param-showsizediff": "Zeigt den Größenunterschied zwischen Versionen an.",
+       "apihelp-feedcontributions-example-simple": "Beiträge für [[Benutzer:Beispiel]] zurückgeben",
+       "apihelp-feedrecentchanges-description": "Gibt einen Letzte-Änderungen-Feed zurück.",
+       "apihelp-feedrecentchanges-param-feedformat": "Das Format des Feeds.",
+       "apihelp-feedrecentchanges-param-namespace": "Namensraum, auf den die Ergebnisse beschränkt werden sollen.",
+       "apihelp-feedrecentchanges-param-invert": "Alle Namensräume außer dem ausgewählten.",
+       "apihelp-feedrecentchanges-param-associated": "Verbundene Namensräume (Diskussion oder Haupt) einschließen.",
+       "apihelp-feedrecentchanges-param-days": "Tage, auf die die Ergebnisse beschränkt werden sollen.",
+       "apihelp-feedrecentchanges-param-limit": "Maximale Anzahl zurückzugebender Ergebnisse.",
+       "apihelp-feedrecentchanges-param-from": "Änderungen seit jetzt anzeigen.",
+       "apihelp-feedrecentchanges-param-hideminor": "Kleine Änderungen ausblenden.",
+       "apihelp-feedrecentchanges-param-hidebots": "Änderungen von Bots ausblenden.",
+       "apihelp-feedrecentchanges-param-hideanons": "Änderungen von anonymen Benutzern ausblenden.",
+       "apihelp-feedrecentchanges-param-hideliu": "Änderungen von registrierten Benutzern ausblenden.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Kontrollierte Änderungen ausblenden.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Eigene Änderungen ausblenden.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Nach Markierung filtern.",
+       "apihelp-feedrecentchanges-param-target": "Nur Änderungen an Seiten anzeigen, die von dieser Seite verlinkt sind.",
+       "apihelp-feedrecentchanges-example-simple": "Letzte Änderungen anzeigen",
+       "apihelp-feedrecentchanges-example-30days": "Letzte Änderungen für 30 Tage anzeigen",
+       "apihelp-feedwatchlist-description": "Gibt einen Beobachtungslisten-Feed zurück.",
+       "apihelp-feedwatchlist-param-feedformat": "Das Format des Feeds.",
+       "apihelp-feedwatchlist-param-hours": "Seiten auflisten, die innerhalb dieser Anzahl Stunden ab jetzt geändert wurden.",
+       "apihelp-feedwatchlist-param-linktosections": "Verlinke direkt zum veränderten Abschnitt, wenn möglich.",
+       "apihelp-feedwatchlist-example-default": "Den Beobachtungslisten-Feed anzeigen",
+       "apihelp-feedwatchlist-example-all6hrs": "Zeige alle Änderungen an beobachteten Seiten der letzten 6 Stunden.",
+       "apihelp-filerevert-description": "Eine Datei auf eine alte Version zurücksetzen.",
+       "apihelp-filerevert-param-filename": "Ziel-Datei, ohne das Datei:-Präfix.",
+       "apihelp-filerevert-param-comment": "Hochladekommentar.",
+       "apihelp-filerevert-param-archivename": "Archivname der Version, auf die die Datei zurückgesetzt werden soll.",
+       "apihelp-filerevert-example-revert": "Wiki.png auf die Version vom 2011-03-05T15:27:40Z zurücksetzen",
+       "apihelp-help-description": "Hilfe für die angegebenen Module anzeigen.",
+       "apihelp-help-param-modules": "Module, zu denen eine Hilfe angezeigt werden soll (Werte der Parameter action= und format= oder „main“). Kann Submodule mit einem „+“ angeben.",
+       "apihelp-help-param-submodules": "Hilfe für Submodule des benannten Moduls einschließen.",
+       "apihelp-help-param-recursivesubmodules": "Hilfe für Submodule rekursiv einschließen.",
+       "apihelp-help-param-helpformat": "Format der Hilfe-Ausgabe.",
+       "apihelp-help-param-wrap": "Die Ausgabe in eine Standard-API-Antwort-Struktur einschließen.",
+       "apihelp-help-param-toc": "Ein Inhaltsverzeichnis in der HTML-Ausgabe einschließen.",
+       "apihelp-help-example-main": "Hilfe für das Hauptmodul",
+       "apihelp-help-example-recursive": "Alle Hilfen in einer Seite",
+       "apihelp-help-example-help": "Hilfe für das Hilfemodul selbst",
+       "apihelp-help-example-query": "Hilfe für zwei Abfrage-Submodule",
+       "apihelp-imagerotate-description": "Ein oder mehrere Bilder drehen.",
+       "apihelp-imagerotate-param-rotation": "Anzahl der Grad, um die das Bild im Uhrzeigersinn gedreht werden soll.",
+       "apihelp-imagerotate-example-simple": "[[:Datei:Example.png]] um 90 Grad drehen",
+       "apihelp-imagerotate-example-generator": "Alle Bilder in der [[:Kategorie:Flip]] um 180 Grad drehen",
+       "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-interwikipage": "Für Interwiki-Importe: zu importierende Seite.",
+       "apihelp-import-param-fullhistory": "Für Interwiki-Importe: importiere die komplette Versionsgeschichte, nicht nur die aktuelle Version.",
+       "apihelp-import-param-templates": "Für Interwiki-Importe: importiere auch alle eingebundenen Vorlagen.",
+       "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-param-name": "Benutzername.",
+       "apihelp-login-param-password": "Passwort.",
+       "apihelp-login-param-domain": "Domain (optional).",
+       "apihelp-login-param-token": "Anmeldetoken, den du in der ersten Anfrage erhalten hast.",
+       "apihelp-login-example-gettoken": "Ruft einen Anmelde-Token ab",
+       "apihelp-login-example-login": "Anmelden",
+       "apihelp-logout-description": "Abmelden und alle Sitzungsdaten löschen.",
+       "apihelp-logout-example-logout": "Meldet den aktuellen Benutzer ab",
+       "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-to": "Titel, zu dem die Seite umbenannt werden soll.",
+       "apihelp-move-param-reason": "Grund für die Verschiebung.",
+       "apihelp-move-param-movetalk": "Verschiebt die Diskussionsseite, falls vorhanden.",
+       "apihelp-move-param-movesubpages": "Unterseiten verschieben, falls zutreffend.",
+       "apihelp-move-param-noredirect": "Keine Weiterleitung erstellen.",
+       "apihelp-move-param-ignorewarnings": "Alle Warnungen ignorieren.",
+       "apihelp-move-example-move": "„Schlechter Titel“ nach „Guter Titel“ verschieben, ohne eine Weiterleitung zu erstellen",
+       "apihelp-opensearch-description": "Das Wiki mithilfe des OpenSearch-Protokolls durchsuchen.",
+       "apihelp-opensearch-param-search": "Such-Zeichenfolge.",
+       "apihelp-opensearch-param-limit": "Maximale Anzahl zurückzugebender Ergebnisse.",
+       "apihelp-opensearch-param-namespace": "Zu durchsuchende Namensräume.",
+       "apihelp-opensearch-param-suggest": "Nichts unternehmen, falls [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] falsch ist.",
+       "apihelp-opensearch-param-format": "Das Format der Ausgabe.",
+       "apihelp-opensearch-example-te": "Seiten finden, die mit „Te“ beginnen",
+       "apihelp-options-param-reset": "Setzt die Einstellungen auf Websitestandards zurück.",
+       "apihelp-options-example-reset": "Alle Einstellungen zurücksetzen",
+       "apihelp-options-example-change": "Ändert die Einstellungen „skin“ und „hideminor“",
+       "apihelp-options-example-complex": "Setzt alle Einstellungen zurück, dann „skin“ und „nickname“ festlegen",
+       "apihelp-paraminfo-description": "Ruft Informationen über API-Module ab.",
+       "apihelp-paraminfo-param-helpformat": "Format der Hilfe-Zeichenfolgen.",
+       "apihelp-parse-param-preview": "Im Vorschaumodus parsen.",
+       "apihelp-parse-example-page": "Eine Seite parsen.",
+       "apihelp-parse-example-text": "Wikitext parsen.",
+       "apihelp-protect-example-protect": "Schützt eine Seite",
+       "apihelp-purge-param-forcelinkupdate": "Aktualisiert die Linktabellen.",
+       "apihelp-query+allcategories-description": "Alle Kategorien aufzählen.",
+       "apihelp-query+allcategories-param-limit": "Wie viele Kategorien zurückgegeben werden sollen.",
+       "apihelp-query+allfileusages-param-limit": "Wie viele Gesamtobjekte zurückgegeben werden sollen.",
+       "apihelp-query+allfileusages-example-unique": "Einheitliche Dateititel auflisten",
+       "apihelp-query+allfileusages-example-generator": "Seiten abrufen, die die Dateien enthalten",
+       "apihelp-query+allimages-description": "Alle Bilder nacheinander 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+alllinks-example-unique": "Einheitlich verlinkte Titel auflisten",
+       "apihelp-query+allredirects-example-unique": "Einheitliche 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+allusers-example-Y": "Benutzer ab Y auflisten",
+       "apihelp-query+backlinks-description": "Alle Seiten finden, die auf die angegebene Seite verlinken.",
+       "apihelp-query+backlinks-example-simple": "Links auf [[Hauptseite]] anzeigen",
+       "apihelp-query+blocks-example-simple": "Sperren auflisten",
+       "apihelp-query+categorymembers-param-startsortkey": "Stattdessen $1starthexsortkey verwenden.",
+       "apihelp-query+categorymembers-param-endsortkey": "Stattdessen $1endhexsortkey verwenden.",
+       "apihelp-query+deletedrevs-param-from": "Auflistung bei diesem Titel beginnen.",
+       "apihelp-query+deletedrevs-param-to": "Auflistung bei diesem Titel beenden.",
+       "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+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 [[Hauptseite]] abrufen",
+       "apihelp-query+linkshere-description": "Alle Seiten finden, die auf die angegebenen Seiten verlinken.",
+       "apihelp-query+logevents-description": "Ereignisse von den Logbüchern abrufen.",
+       "apihelp-query+search-example-simple": "Nach „meaning“ suchen",
+       "apihelp-query+search-example-text": "Texte nach „meaning“ durchsuchen",
+       "apihelp-query+siteinfo-example-simple": "Websiteinformationen abrufen",
+       "apihelp-query+tags-description": "Änderungs-Tags auflisten.",
+       "apihelp-query+tags-example-simple": "Verfügbare Tags auflisten",
+       "apihelp-query+usercontribs-description": "Alle Bearbeitungen von einem Benutzer abrufen.",
+       "apihelp-query+userinfo-example-simple": "Informationen über den aktuellen Benutzer abrufen",
+       "apihelp-query+users-description": "Informationen über eine Liste von Benutzern abrufen.",
+       "apihelp-rsd-description": "Ein RSD-Schema (Really Simple Discovery) exportieren.",
+       "apihelp-rsd-example-simple": "Das RSD-Schema exportieren",
+       "apihelp-setnotificationtimestamp-param-entirewatchlist": "An allen beobachteten Seiten arbeiten.",
+       "apihelp-unblock-description": "Einen Benutzer freigeben.",
+       "apihelp-unblock-param-reason": "Grund für die Freigabe.",
+       "apihelp-unblock-example-id": "Sperrkennung #105 freigeben",
+       "apihelp-undelete-param-reason": "Grund für die Wiederherstellung.",
+       "apihelp-upload-param-filename": "Ziel-Dateiname.",
+       "apihelp-upload-param-watch": "Die Seite beobachten.",
+       "apihelp-upload-param-file": "Dateiinhalte.",
+       "apihelp-upload-param-url": "URL, von der die Datei abgerufen werden soll.",
+       "apihelp-upload-example-url": "Von einer URL hochladen",
+       "apihelp-userrights-param-user": "Benutzername.",
+       "apihelp-userrights-param-userid": "Benutzerkennung.",
+       "apihelp-watch-example-watch": "Die Seite „Hauptseite“ beobachten",
+       "apihelp-format-example-generic": "Das Abfrageergebnis im $1-Format formatieren",
+       "apihelp-dbg-description": "Daten im PHP-var_export()-Format ausgeben.",
+       "apihelp-dbgfm-description": "Daten im PHP-var_export()-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-dump-description": "Daten im PHP-var_dump()-Format ausgeben.",
+       "apihelp-dumpfm-description": "Daten im PHP-var_dump()-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-json-description": "Daten im JSON-Format ausgeben.",
+       "apihelp-json-param-callback": "Falls angegeben, wird die Ausgabe in einen angegebenen Funktionsaufruf eingeschlossen. Aus Sicherheitsgründen sind benutzerspezifische Daten beschränkt.",
+       "apihelp-json-param-utf8": "Falls angegeben, kodiert die meisten (aber nicht alle) Nicht-ASCII-Zeichen als UTF-8 anstatt sie mit hexadezimalen Escape-Sequenzen zu ersetzen.",
+       "apihelp-jsonfm-description": "Daten im JSON-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-none-description": "Nichts ausgeben.",
+       "apihelp-php-description": "Daten im serialisierten PHP-Format ausgeben.",
+       "apihelp-phpfm-description": "Daten im serialisierten PHP-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-rawfm-description": "Daten mit den Fehlerbehebungselementen im JSON-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-txt-description": "Daten im PHP-print_r()-Format ausgeben.",
+       "apihelp-txtfm-description": "Daten im PHP-print_r()-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-wddx-description": "Daten im WDDX-Format ausgeben.",
+       "apihelp-wddxfm-description": "Daten im WDDX-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-xml-description": "Daten im XML-Format ausgeben.",
+       "apihelp-xml-param-xslt": "Falls angegeben, ergänzt &lt;xslt&gt; als Stylesheet. Dies sollte eine Wikiseite im MediaWiki-Namensraum sein, dessen Seitenname mit „.xsl“ endet.",
+       "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-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.",
+       "api-pageset-param-pageids": "Eine Liste der Seitenkennungen, an denen gearbeitet werden soll.",
+       "api-pageset-param-revids": "Eine Liste der Versionskennungen, an denen gearbeitet werden soll.",
+       "api-help-title": "MediaWiki-API-Hilfe",
+       "api-help-lead": "Dies ist eine automatisch generierte MediaWiki-API-Dokumentationsseite.\n\nDokumentation und Beispiele: https://www.mediawiki.org/wiki/API/de",
+       "api-help-main-header": "Hauptmodul",
+       "api-help-flag-deprecated": "Dieses Modul ist veraltet.",
+       "api-help-flag-internal": "<strong>Dieses Modul ist intern oder instabil.</strong> Seine Operationen werden ohne Kenntnisnahme geändert.",
+       "api-help-flag-readrights": "Dieses Modul erfordert Leserechte.",
+       "api-help-flag-writerights": "Dieses Modul erfordert Schreibrechte.",
+       "api-help-flag-mustbeposted": "Dieses Modul akzeptiert nur POST-Anfragen.",
+       "api-help-flag-generator": "Dieses Modul kann als Generator verwendet werden.",
+       "api-help-parameters": "{{PLURAL:$1|Parameter}}:",
+       "api-help-param-deprecated": "Veraltet.",
+       "api-help-param-required": "Dieser Parameter ist erforderlich.",
+       "api-help-param-list": "{{PLURAL:$1|1=Ein Wert|2=Werte (mit „{{!}}“ trennen)}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Muss leer sein|Kann leer sein oder $2}}",
+       "api-help-param-limit": "Nicht mehr als $1 erlaubt.",
+       "api-help-param-limit2": "Nicht mehr als $1 ($2 für Bots) erlaubt.",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=Der Wert darf|2=Die Werte dürfen}} nicht kleiner sein als $2.",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=Der Wert darf|2=Die Werte dürfen}} nicht größer sein als $3.",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=Der Wert muss|2=Die Werte müssen}} zwischen $2 und $3 sein.",
+       "api-help-param-upload": "Muss als Dateiupload mithilfe Mehrteil-Formdaten bereitgestellt werden.",
+       "api-help-param-multi-separate": "Werte mit „|“ trennen.",
+       "api-help-param-multi-max": "Maximale Anzahl der Werte ist {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} für Bots).",
+       "api-help-param-default": "Standard: $1",
+       "api-help-param-default-empty": "Standard: <span class=\"apihelp-empty\">(leer)</span>",
+       "api-help-param-token": "Ein „$1“-Token wurde abgerufen von [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(keine Beschreibung)</span>",
+       "api-help-examples": "{{PLURAL:$1|Beispiel|Beispiele}}:",
+       "api-help-permissions": "{{PLURAL:$1|Berechtigung|Berechtigungen}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Gewährt an}}: $2",
+       "api-help-right-apihighlimits": "Höhere Beschränkungen in API-Anfragen verwenden (langsame Anfragen: $1; schnelle Anfragen: $2). Die Beschränkungen für langsame Anfragen werden auch auf Mehrwertparameter angewandt.",
+       "api-credits-header": "Danksagungen",
+       "api-credits": "API-Entwickler:\n* Roan Kattouw (Hauptentwickler von September 2007 bis 2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (Autor, Hauptentwickler von September 2006 bis September 2007)\n* Brad Jorsch (Hauptentwickler seit 2013)\n\nBitte sende deine Kommentare, Vorschläge und Fragen an mediawiki-api@lists.wikimedia.org\noder reiche einen Fehlerbericht auf https://bugzilla.wikimedia.org/ ein."
+}
diff --git a/includes/api/i18n/en-gb.json b/includes/api/i18n/en-gb.json
new file mode 100644 (file)
index 0000000..e2206f9
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Reedy"
+               ]
+       },
+       "apihelp-edit-param-contentformat": "Content serialisation format used for the input text.",
+       "apihelp-parse-param-contentformat": "Content serialisation format used for the input text. Only valid when used with $1text.",
+       "apihelp-query+revisions+base-param-contentformat": "Serialisation format used for $1difftotext and expected for output of content.",
+       "apihelp-php-description": "Output data in serialised PHP format.",
+       "apihelp-phpfm-description": "Output data in serialised PHP format (pretty-print in HTML)."
+}
diff --git a/includes/api/i18n/en.json b/includes/api/i18n/en.json
new file mode 100644 (file)
index 0000000..4fbfb40
--- /dev/null
@@ -0,0 +1,1106 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Anomie"
+               ]
+       },
+
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page Documentation]\n* [https://www.mediawiki.org/wiki/API:FAQ FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API Announcements]\n* [https://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts Bugs & requests]\n</div>\n<strong>Status:</strong> All features shown on this page should be working, but the API is still in active development, and may change at any time. Subscribe to [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] for notice of updates.\n\n<strong>Erroneous requests:</strong> When erroneous requests are sent to the API, a HTTP header will be sent with the key \"MediaWiki-API-Error\" and then both the value of the header and the error code sent back will be set to the same value. For more information see https://www.mediawiki.org/wiki/API:Errors_and_warnings.",
+       "apihelp-main-param-action": "Which action to perform.",
+       "apihelp-main-param-format": "The format of the output.",
+       "apihelp-main-param-maxlag": "Maximum lag can be used when MediaWiki is installed on a database replicated cluster. To save actions causing any more site replication lag, this parameter can make the client wait until the replication lag is less than the specified value. In case of excessive lag, error code \"maxlag\" is returned with a message like \"Waiting for $host: $lag seconds lagged\".<br />See https://www.mediawiki.org/wiki/Manual:Maxlag_parameter for more information.",
+       "apihelp-main-param-smaxage": "Set the s-maxage header to this many seconds. Errors are never cached.",
+       "apihelp-main-param-maxage": "Set the max-age header to this many seconds. Errors are never cached.",
+       "apihelp-main-param-assert": "Verify the user is logged in if set to \"user\", or has the bot userright if \"bot\".",
+       "apihelp-main-param-requestid": "Any value given here will be included in the response. May be used to distinguish requests.",
+       "apihelp-main-param-servedby": "Include the hostname that served the request in the results.",
+       "apihelp-main-param-curtimestamp": "Include the current timestamp in the result.",
+       "apihelp-main-param-origin": "When accessing the API using a cross-domain AJAX request (CORS), set this to the originating domain. This must be included in any pre-flight request, and therefore must be part of the request URI (not the POST body). This must match one of the origins in the Origin: header exactly, so it has to be set to something like http://en.wikipedia.org or https://meta.wikimedia.org. If this parameter does not match the Origin: header, a 403 response will be returned. If this parameter matches the Origin: header and the origin is whitelisted, an Access-Control-Allow-Origin header will be set.",
+       "apihelp-main-param-uselang": "Language to use for message translations. A list of codes may be fetched from [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]] with siprop=languages, or specify \"user\" to use the current user's language preference, or specify \"content\" to use this wiki's content language.",
+
+       "apihelp-block-description": "Block a user.",
+       "apihelp-block-param-user": "Username, IP address or IP range you want to block.",
+       "apihelp-block-param-expiry": "Expiry time. May be relative (e.g. \"5 months\" or \"2 weeks\") or absolute (e.g. \"2014-09-18T12:34:56Z\"). If set to \"infinite\", \"indefinite\" or \"never\", the block will never expire.",
+       "apihelp-block-param-reason": "Reason for block.",
+       "apihelp-block-param-anononly": "Block anonymous users only (i.e. disable anonymous edits for this IP).",
+       "apihelp-block-param-nocreate": "Prevent account creation.",
+       "apihelp-block-param-autoblock": "Automatically block the last used IP address, and any subsequent IP addresses they try to login from.",
+       "apihelp-block-param-noemail": "Prevent user from sending email through the wiki. (Requires the \"blockemail\" right).",
+       "apihelp-block-param-hidename": "Hide the username from the block log. (Requires the \"hideuser\" right).",
+       "apihelp-block-param-allowusertalk": "Allow the user to edit their own talk page (depends on $wgBlockAllowsUTEdit).",
+       "apihelp-block-param-reblock": "If the user is already blocked, overwrite the existing block.",
+       "apihelp-block-param-watchuser": "Watch the user's or IP's user and talk pages.",
+       "apihelp-block-example-ip-simple": "Block IP 192.0.2.5 for three days with reason \"First strike\"",
+       "apihelp-block-example-user-complex": "Block user Vandal indefinitely with reason \"Vandalism\", and prevent new account creation and email",
+
+       "apihelp-clearhasmsg-description": "Clears the hasmsg flag for current user.",
+       "apihelp-clearhasmsg-example-1": "Clear the hasmsg flag for current user",
+
+       "apihelp-compare-description": "Get the difference between 2 pages.\n\nYou must pass a revision number, a page title, or a page ID for both \"from\" and \"to\".",
+       "apihelp-compare-param-fromtitle": "First title to compare.",
+       "apihelp-compare-param-fromid": "First page ID to compare.",
+       "apihelp-compare-param-fromrev": "First revision to compare.",
+       "apihelp-compare-param-totitle": "Second title to compare.",
+       "apihelp-compare-param-toid": "Second page ID to compare.",
+       "apihelp-compare-param-torev": "Second revision to compare.",
+       "apihelp-compare-example-1": "Create a diff between revision 1 and 2",
+
+       "apihelp-createaccount-description": "Create a new user account.",
+       "apihelp-createaccount-param-name": "Username.",
+       "apihelp-createaccount-param-password": "Password (ignored if $1mailpassword is set).",
+       "apihelp-createaccount-param-domain": "Domain for external authentication (optional).",
+       "apihelp-createaccount-param-token": "Account creation token obtained in first request.",
+       "apihelp-createaccount-param-email": "Email address of user (optional).",
+       "apihelp-createaccount-param-realname": "Real name of user (optional).",
+       "apihelp-createaccount-param-mailpassword": "If set to any value, a random password will be emailed to the user.",
+       "apihelp-createaccount-param-reason": "Optional reason for creating the account to be put in the logs.",
+       "apihelp-createaccount-param-language": "Language code to set as default for the user (optional, defaults to content language).",
+       "apihelp-createaccount-example-pass": "Create user \"testuser\" with password \"test123\"",
+       "apihelp-createaccount-example-mail": "Create user \"testmailuser\" and email a randomly-generated password",
+
+       "apihelp-delete-description": "Delete a page.",
+       "apihelp-delete-param-title": "Title of the page you want to delete. Cannot be used together with $1pageid.",
+       "apihelp-delete-param-pageid": "Page ID of the page you want to delete. Cannot be used together with $1title.",
+       "apihelp-delete-param-reason": "Reason for the deletion. If not set, an automatically generated reason will be used.",
+       "apihelp-delete-param-watch": "Add the page to your watchlist.",
+       "apihelp-delete-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-delete-param-unwatch": "Remove the page from your watchlist.",
+       "apihelp-delete-param-oldimage": "The name of the old image to delete as provided by [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+       "apihelp-delete-example-simple": "Delete the Main Page",
+       "apihelp-delete-example-reason": "Delete the Main Page with the reason \"Preparing for move\"",
+
+       "apihelp-disabled-description": "This module has been disabled.",
+
+       "apihelp-edit-description": "Create and edit pages.",
+       "apihelp-edit-param-title": "Title of the page you want to edit. Cannot be used together with $1pageid.",
+       "apihelp-edit-param-pageid": "Page ID of the page you want to edit. Cannot be used together with $1title.",
+       "apihelp-edit-param-section": "Section number. 0 for the top section, \"new\" for a new section.",
+       "apihelp-edit-param-sectiontitle": "The title for a new section.",
+       "apihelp-edit-param-text": "Page content.",
+       "apihelp-edit-param-summary": "Edit summary. Also section title when $1section=new and $1sectiontitle is not set.",
+       "apihelp-edit-param-minor": "Minor edit.",
+       "apihelp-edit-param-notminor": "Non-minor edit.",
+       "apihelp-edit-param-bot": "Mark this edit as bot.",
+       "apihelp-edit-param-basetimestamp": "Timestamp of the base revision, used to detect edit conflicts. May be obtained through [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+       "apihelp-edit-param-starttimestamp": "Timestamp when you began the editing process, used to detect edit conflicts. An appropriate value may be obtained using [[Special:ApiHelp/main|curtimestamp]] when beginning the edit process (e.g. when loading the page content to edit).",
+       "apihelp-edit-param-recreate": "Override any errors about the article having been deleted in the meantime.",
+       "apihelp-edit-param-createonly": "Don't edit the page if it exists already.",
+       "apihelp-edit-param-nocreate": "Throw an error if the page doesn't exist.",
+       "apihelp-edit-param-watch": "Add the page to your watchlist.",
+       "apihelp-edit-param-unwatch": "Remove the page from your watchlist.",
+       "apihelp-edit-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-edit-param-md5": "The MD5 hash of the $1text parameter, or the $1prependtext and $1appendtext parameters concatenated. If set, the edit won't be done unless the hash is correct.",
+       "apihelp-edit-param-prependtext": "Add this text to the beginning of the page. Overrides $1text.",
+       "apihelp-edit-param-appendtext": "Add this text to the end of the page. Overrides $1text.\n\nUse $1section=new to append a new section, rather than this parameter.",
+       "apihelp-edit-param-undo": "Undo this revision. Overrides $1text, $1prependtext and $1appendtext.",
+       "apihelp-edit-param-undoafter": "Undo all revisions from $1undo to this one. If not set, just undo one revision.",
+       "apihelp-edit-param-redirect": "Automatically resolve redirects.",
+       "apihelp-edit-param-contentformat": "Content serialization format used for the input text.",
+       "apihelp-edit-param-contentmodel": "Content model of the new content.",
+       "apihelp-edit-param-token": "The token should always be sent as the last parameter, or at least after the $1text parameter.",
+       "apihelp-edit-example-edit": "Edit a page",
+       "apihelp-edit-example-prepend": "Prepend _&#95;NOTOC_&#95; to a page",
+       "apihelp-edit-example-undo": "Undo revisions 13579 through 13585 with autosummary",
+
+       "apihelp-emailuser-description": "Email a user.",
+       "apihelp-emailuser-param-target": "User to send email to.",
+       "apihelp-emailuser-param-subject": "Subject header.",
+       "apihelp-emailuser-param-text": "Mail body.",
+       "apihelp-emailuser-param-ccme": "Send a copy of this mail to me.",
+       "apihelp-emailuser-example-email": "Send an email to the User \"WikiSysop\" with the text \"Content\"",
+
+       "apihelp-expandtemplates-description": "Expands all templates in wikitext.",
+       "apihelp-expandtemplates-param-title": "Title of page.",
+       "apihelp-expandtemplates-param-text": "Wikitext to convert.",
+       "apihelp-expandtemplates-param-prop": "Which pieces of information to get:\n;wikitext:The expanded wikitext.\n;categories:Any categories present in the input that are not represented in the wikitext output.\n;volatile:Whether the output is volatile and should not be reused elsewhere within the page.\n;ttl:The maximum time after which caches of the result should be invalidated.\n;parsetree:The XML parse tree of the input.\nNote that if no values are selected, the result will contain the wikitext, but the output will be in a deprecated format.",
+       "apihelp-expandtemplates-param-includecomments": "Whether to include HTML comments in the output.",
+       "apihelp-expandtemplates-param-generatexml": "Generate XML parse tree (replaced by $1prop=parsetree).",
+       "apihelp-expandtemplates-example-simple": "Expand the wikitext \"<nowiki>{{Project:Sandbox}}</nowiki>\"",
+
+       "apihelp-feedcontributions-description": "Returns a user contributions feed.",
+       "apihelp-feedcontributions-param-feedformat": "The format of the feed.",
+       "apihelp-feedcontributions-param-user": "What users to get the contributions for.",
+       "apihelp-feedcontributions-param-namespace": "Which namespace to filter the contributions by.",
+       "apihelp-feedcontributions-param-year": "From year (and earlier).",
+       "apihelp-feedcontributions-param-month": "From month (and earlier).",
+       "apihelp-feedcontributions-param-tagfilter": "Filter contributions that have these tags.",
+       "apihelp-feedcontributions-param-deletedonly": "Show only deleted contributions.",
+       "apihelp-feedcontributions-param-toponly": "Only show edits that are latest revisions.",
+       "apihelp-feedcontributions-param-newonly": "Only show edits that are page creations.",
+       "apihelp-feedcontributions-param-showsizediff": "Show the size difference between revisions.",
+       "apihelp-feedcontributions-example-simple": "Return contributions for [[User:Example]]",
+
+       "apihelp-feedrecentchanges-description": "Returns a recent changes feed.",
+       "apihelp-feedrecentchanges-param-feedformat": "The format of the feed.",
+       "apihelp-feedrecentchanges-param-namespace": "Namespace to limit the results to.",
+       "apihelp-feedrecentchanges-param-invert": "All namespaces but the selected one.",
+       "apihelp-feedrecentchanges-param-associated": "Include associated (talk or main) namespace.",
+       "apihelp-feedrecentchanges-param-days": "Days to limit the results to.",
+       "apihelp-feedrecentchanges-param-limit": "Maximum number of results to return.",
+       "apihelp-feedrecentchanges-param-from": "Show changes since then.",
+       "apihelp-feedrecentchanges-param-hideminor": "Hide minor changes.",
+       "apihelp-feedrecentchanges-param-hidebots": "Hide changes made by bots.",
+       "apihelp-feedrecentchanges-param-hideanons": "Hide changes made by anonymous users.",
+       "apihelp-feedrecentchanges-param-hideliu": "Hide changes made by registered users.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Hide patrolled changes.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Hide changes made by yourself.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Filter by tag.",
+       "apihelp-feedrecentchanges-param-target": "Show only changes on pages linked from this page.",
+       "apihelp-feedrecentchanges-param-showlinkedto": "Show changes on pages linked to the selected page instead.",
+       "apihelp-feedrecentchanges-example-simple": "Show recent changes",
+       "apihelp-feedrecentchanges-example-30days": "Show recent changes for 30 days",
+
+       "apihelp-feedwatchlist-description": "Returns a watchlist feed.",
+       "apihelp-feedwatchlist-param-feedformat": "The format of the feed.",
+       "apihelp-feedwatchlist-param-hours": "List pages modified within this many hours from now.",
+       "apihelp-feedwatchlist-param-linktosections": "Link directly to changed sections if possible.",
+       "apihelp-feedwatchlist-example-default": "Show the watchlist feed",
+       "apihelp-feedwatchlist-example-all6hrs": "Show all changes to watched pages in the past 6 hours",
+
+       "apihelp-filerevert-description": "Revert a file to an old version.",
+       "apihelp-filerevert-param-filename": "Target filename, without the File: prefix.",
+       "apihelp-filerevert-param-comment": "Upload comment.",
+       "apihelp-filerevert-param-archivename": "Archive name of the revision to revert to.",
+       "apihelp-filerevert-example-revert": "Revert Wiki.png to the version of 2011-03-05T15:27:40Z",
+
+       "apihelp-help-description": "Display help for the specified modules.",
+       "apihelp-help-param-modules": "Modules to display help for (values of the action= and format= parameters, or \"main\"). Can specify submodules with a \"+\".",
+       "apihelp-help-param-submodules": "Include help for submodules of the named module.",
+       "apihelp-help-param-recursivesubmodules": "Include help for submodules recursively.",
+       "apihelp-help-param-helpformat": "Format of the help output.",
+       "apihelp-help-param-wrap": "Wrap the output in a standard API response structure.",
+       "apihelp-help-param-toc": "Include a table of contents in the HTML output.",
+       "apihelp-help-example-main": "Help for the main module",
+       "apihelp-help-example-recursive": "All help in one page",
+       "apihelp-help-example-help": "Help for the help module itself",
+       "apihelp-help-example-query": "Help for two query submodules",
+
+       "apihelp-imagerotate-description": "Rotate one or more images.",
+       "apihelp-imagerotate-param-rotation": "Degrees to rotate image clockwise.",
+       "apihelp-imagerotate-example-simple": "Rotate [[:File:Example.png]] by 90 degrees",
+       "apihelp-imagerotate-example-generator": "Rotate all images in [[:Category:Flip]] by 180 degrees",
+
+       "apihelp-import-description": "Import a page from another wiki, or an XML file.\n\nNote that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when sending a file for the \"xml\" parameter.",
+       "apihelp-import-param-summary": "Import summary.",
+       "apihelp-import-param-xml": "Uploaded XML file.",
+       "apihelp-import-param-interwikisource": "For interwiki imports: wiki to import from.",
+       "apihelp-import-param-interwikipage": "For interwiki imports: page to import.",
+       "apihelp-import-param-fullhistory": "For interwiki imports: import the full history, not just the current version.",
+       "apihelp-import-param-templates": "For interwiki imports: import all included templates as well.",
+       "apihelp-import-param-namespace": "For interwiki imports: import to this namespace.",
+       "apihelp-import-param-rootpage": "Import as subpage of this page.",
+       "apihelp-import-example-import": "Import [[meta:Help:Parserfunctions]] to namespace 100 with full history.",
+
+       "apihelp-login-description": "Log in and get authentication cookies.\n\nIn the event of a successful log-in, the needed cookies will be included in the HTTP response headers. In the event of a failed log-in, further attempts may be throttled to limit automated password guessing attacks.",
+       "apihelp-login-param-name": "User name.",
+       "apihelp-login-param-password": "Password.",
+       "apihelp-login-param-domain": "Domain (optional).",
+       "apihelp-login-param-token": "Login token obtained in first request.",
+       "apihelp-login-example-gettoken": "Retrieve a login token",
+       "apihelp-login-example-login": "Log in",
+
+       "apihelp-logout-description": "Log out and clear session data.",
+       "apihelp-logout-example-logout": "Log the current user out",
+
+       "apihelp-move-description": "Move a page.",
+       "apihelp-move-param-from": "Title of the page you want to move. Cannot be used together with $1fromid.",
+       "apihelp-move-param-fromid": "Page ID of the page you want to move. Cannot be used together with $1from.",
+       "apihelp-move-param-to": "Title you want to rename the page to.",
+       "apihelp-move-param-reason": "Reason for the move.",
+       "apihelp-move-param-movetalk": "Move the talk page, if it exists.",
+       "apihelp-move-param-movesubpages": "Move subpages, if applicable.",
+       "apihelp-move-param-noredirect": "Don't create a redirect.",
+       "apihelp-move-param-watch": "Add the page and the redirect to your watchlist.",
+       "apihelp-move-param-unwatch": "Remove the page and the redirect from your watchlist.",
+       "apihelp-move-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-move-param-ignorewarnings": "Ignore any warnings.",
+       "apihelp-move-example-move": "Move \"Badtitle\" to \"Goodtitle\" without leaving a redirect",
+
+       "apihelp-opensearch-description": "Search the wiki using the OpenSearch protocol.",
+       "apihelp-opensearch-param-search": "Search string.",
+       "apihelp-opensearch-param-limit": "Maximum number of results to return.",
+       "apihelp-opensearch-param-namespace": "Namespaces to search.",
+       "apihelp-opensearch-param-suggest": "Do nothing if [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] is false.",
+       "apihelp-opensearch-param-format": "The format of the output.",
+       "apihelp-opensearch-example-te": "Find pages beginning with \"Te\"",
+
+       "apihelp-options-description": "Change preferences of the current user.\n\nOnly options which are registered in core or in one of installed extensions, or options with keys prefixed with \"userjs-\" (intended to be used by user scripts), can be set.",
+       "apihelp-options-param-reset": "Resets preferences to the site defaults.",
+       "apihelp-options-param-resetkinds": "List of types of options to reset when the \"$1reset\" option is set.",
+       "apihelp-options-param-change": "List of changes, formatted name=value (e.g. skin=vector). Value cannot contain pipe characters. If no value is given (not even an equals sign), e.g., optionname|otheroption|..., the option will be reset to its default value.",
+       "apihelp-options-param-optionname": "A name of a option which should be set to the value given by \"$1optionvalue\".",
+       "apihelp-options-param-optionvalue": "A value of the option specified by \"$1optionname\", can contain pipe characters.",
+       "apihelp-options-example-reset": "Reset all preferences",
+       "apihelp-options-example-change": "Change \"skin\" and \"hideminor\" preferences",
+       "apihelp-options-example-complex": "Reset all preferences, then set \"skin\" and \"nickname\"",
+
+       "apihelp-paraminfo-description": "Obtain information about API modules.",
+       "apihelp-paraminfo-param-modules": "List of module names (values of the action= and format= parameters, or \"main\"). Can specify submodules with a \"+\".",
+       "apihelp-paraminfo-param-helpformat": "Format of help strings.",
+       "apihelp-paraminfo-param-querymodules": "List of query module names (value of prop=, meta= or list= parameter). Use \"$1modules=query+foo\" instead of \"$1querymodules=foo\".",
+       "apihelp-paraminfo-param-mainmodule": "Get information about the main (top-level) module as well. Use \"$1modules=main\" 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 format= parameter). Use \"$1modules\" instead.",
+       "apihelp-paraminfo-example-1": "Show info for [[Special:ApiHelp/parse|action=parse]], [[Special:ApiHelp/jsonfm|format=jsonfm]], [[Special:ApiHelp/query+allpages|action=query&list=allpages]], and [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]",
+
+       "apihelp-parse-description": "Parses content and returns parser output.\n\nSee the various prop-modules of [[Special:ApiHelp/query|action=query]] 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 $1page, $1pageid, or $1oldid.\n# Specify content explicitly, using $1text, $1title, and $1contentmodel.\n# Specify only a summary to parse. $1prop should be given an empty value.",
+       "apihelp-parse-param-title": "Title of page the text belongs to. If omitted, $1contentmodel must be specified, and \"[[API]]\" will be used as the title.",
+       "apihelp-parse-param-text": "Text to parse. Use $1title or $1contentmodel to control the content model.",
+       "apihelp-parse-param-summary": "Summary to parse.",
+       "apihelp-parse-param-page": "Parse the content of this page. Cannot be used together with $1text and $1title.",
+       "apihelp-parse-param-pageid": "Parse the content of this page. Overrides $1page.",
+       "apihelp-parse-param-redirects": "If the $1page or the $1pageid parameter is set to a redirect, resolve it.",
+       "apihelp-parse-param-oldid": "Parse the content of this revision. Overrides $1page and $1pageid.",
+       "apihelp-parse-param-prop": "Which pieces of information to get:\n;text:Gives the parsed text of the wikitext.\n;langlinks:Gives the language links in the parsed wikitext.\n;categories:Gives the categories in the parsed wikitext.\n;categorieshtml:Gives the HTML version of the categories.\n;links:Gives the internal links in the parsed wikitext.\n;templates:Gives the templates in the parsed wikitext.\n;images:Gives the images in the parsed wikitext.\n;externallinks:Gives the external links in the parsed wikitext.\n;sections:Gives the sections in the parsed wikitext.\n;revid:Adds the revision ID of the parsed page.\n;displaytitle:Adds the title of the parsed wikitext.\n;headitems:Gives items to put in the &lt;head&gt; of the page.\n;headhtml:Gives parsed &lt;head&gt; of the page.\n;modules:Gives the ResourceLoader modules used on the page.\n;indicators:Gives the HTML of page status indicators used on the page.\n;iwlinks:Gives interwiki links in the parsed wikitext.\n;wikitext:Gives the original wikitext that was parsed.\n;properties:Gives various properties defined in the parsed wikitext.\n;limitreportdata:Gives the limit report in a structured way. Gives no data, when $1disablepp is set.\n;limitreporthtml:Gives the HTML version of the limit report. Gives no data, when $1disablepp is set.",
+       "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 $1text.",
+       "apihelp-parse-param-effectivelanglinks": "Includes language links supplied by extensions (for use with $1prop=langlinks).",
+       "apihelp-parse-param-section": "Only retrieve the content of this section number.",
+       "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 \"$1\").",
+       "apihelp-parse-param-preview": "Parse in preview mode.",
+       "apihelp-parse-param-sectionpreview": "Parse in section preview mode (enables preview mode too).",
+       "apihelp-parse-param-disabletoc": "Disable table of contents in output.",
+       "apihelp-parse-param-contentformat": "Content serialization format used for the input text. Only valid when used with $1text.",
+       "apihelp-parse-param-contentmodel": "Content model of the input text. If omitted, $1title must be specified, and default will be the model of the specified title. Only valid when used with $1text.",
+       "apihelp-parse-example-page": "Parse a page.",
+       "apihelp-parse-example-text": "Parse wikitext.",
+       "apihelp-parse-example-texttitle": "Parse wikitext, specifying the page title.",
+       "apihelp-parse-example-summary": "Parse a summary.",
+
+       "apihelp-patrol-description": "Patrol a page or revision.",
+       "apihelp-patrol-param-rcid": "Recentchanges ID to patrol.",
+       "apihelp-patrol-param-revid": "Revision ID to patrol.",
+       "apihelp-patrol-example-rcid": "Patrol a recent change",
+       "apihelp-patrol-example-revid": "Patrol a revision",
+
+       "apihelp-protect-description": "Change the protection level of a page.",
+       "apihelp-protect-param-title": "Title of the page to (un)protect. Cannot be used together with $1pageid.",
+       "apihelp-protect-param-pageid": "ID of the page to (un)protect. Cannot be used together with $1title.",
+       "apihelp-protect-param-protections": "List of protection levels, formatted action=level (e.g. edit=sysop).\n\n'''NOTE:''' Any actions not listed will have restrictions removed.",
+       "apihelp-protect-param-expiry": "Expiry timestamps. If only one timestamp is set, it'll be used for all protections. Use \"infinite\", \"indefinite\", \"infinity\" or \"never\", for a never-expiring protection.",
+       "apihelp-protect-param-reason": "Reason for (un)protecting.",
+       "apihelp-protect-param-cascade": "Enable cascading protection (i.e. protect pages included in this page). Ignored if all protection levels given do not support cascading.",
+       "apihelp-protect-param-watch": "If set, add the page being (un)protected to your watchlist.",
+       "apihelp-protect-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-protect-example-protect": "Protect a page",
+       "apihelp-protect-example-unprotect": "Unprotect a page by setting restrictions to \"all\"",
+       "apihelp-protect-example-unprotect2": "Unprotect a page by setting no restrictions",
+
+       "apihelp-purge-description": "Purge the cache for the given titles.\n\nRequires a POST request if the user is not logged in.",
+       "apihelp-purge-param-forcelinkupdate": "Update the links tables.",
+       "apihelp-purge-param-forcerecursivelinkupdate": "Update the links table, and update the links tables for any page that uses this page as a template.",
+       "apihelp-purge-example-simple": "Purge the \"Main Page\" and the \"API\" page",
+       "apihelp-purge-example-generator": "Purge the first 10 pages in the main namespace",
+
+       "apihelp-query-description": "Fetch data from and about MediaWiki.\n\nAll data modifications will first have to use query to acquire a token to prevent abuse from malicious sites.",
+       "apihelp-query-param-prop": "Which properties to get for the queried pages.",
+       "apihelp-query-param-list": "Which lists to get.",
+       "apihelp-query-param-meta": "Which metadata to get.",
+       "apihelp-query-param-indexpageids": "Include an additional pageids section listing all returned page IDs.",
+       "apihelp-query-param-export": "Export the current revisions of all given or generated pages.",
+       "apihelp-query-param-exportnowrap": "Return the export XML without wrapping it in an XML result (same format as [[Special:Export]]). Can only be used with $1export.",
+       "apihelp-query-param-iwurl": "Whether to get the full URL if the title is an interwiki link.",
+       "apihelp-query-param-continue": "When present, formats query-continue as key-value pairs that should simply be merged into the original request. This parameter must be set to an empty string in the initial query.\n\nThis parameter is recommended for all new development, and will be made default in the next API version.",
+       "apihelp-query-param-rawcontinue": "Currently ignored. In the future, \"$1continue=\" will become the default and this will be needed to receive the raw query-continue data.",
+       "apihelp-query-example-revisions": "Fetch [[Special:ApiHelp/query+siteinfo|site info]] and [[Special:ApiHelp/query+revisions|revisions]] of the Main Page",
+       "apihelp-query-example-allpages": "Fetch revisions of pages beginning with \"API/\"",
+
+       "apihelp-query+allcategories-description": "Enumerate all categories.",
+       "apihelp-query+allcategories-param-from": "The category to start enumerating from.",
+       "apihelp-query+allcategories-param-to": "The category to stop enumerating at.",
+       "apihelp-query+allcategories-param-prefix": "Search for all category titles that begin with this value.",
+       "apihelp-query+allcategories-param-dir": "Direction to sort in.",
+       "apihelp-query+allcategories-param-min": "Only return categories with at least this many members.",
+       "apihelp-query+allcategories-param-max": "Only return categories with at most this many members.",
+       "apihelp-query+allcategories-param-limit": "How many categories to return.",
+       "apihelp-query+allcategories-param-prop": "Which properties to get:\n;size:Adds number of pages in the category.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+allcategories-example-size": "List categories with information on the number of pages in each",
+       "apihelp-query+allcategories-example-generator": "Retrieve info about the category page itself for categories beginning \"List\"",
+
+       "apihelp-query+alldeletedrevisions-description": "List all deleted revisions by a user or in a namespace.",
+       "apihelp-query+alldeletedrevisions-paraminfo-useronly": "May only be used with $3user.",
+       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Cannot be used with $3user.",
+       "apihelp-query+alldeletedrevisions-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+alldeletedrevisions-param-end": "The timestamp to stop enumerating at.",
+       "apihelp-query+alldeletedrevisions-param-from": "Start listing at this title.",
+       "apihelp-query+alldeletedrevisions-param-to": "Stop listing at this title.",
+       "apihelp-query+alldeletedrevisions-param-prefix": "Search for all page titles that begin with this value.",
+       "apihelp-query+alldeletedrevisions-param-tag": "Only list revisions tagged with this tag.",
+       "apihelp-query+alldeletedrevisions-param-user": "Only list revisions by this user.",
+       "apihelp-query+alldeletedrevisions-param-excludeuser": "Don't list revisions by this user.",
+       "apihelp-query+alldeletedrevisions-param-namespace": "Only list pages in this namespace.",
+       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "'''NOTE:''' Due to [https://www.mediawiki.org/wiki/Manual:$wgMiserMode miser mode], using $1user and $1namespace together may result in fewer than \"$1limit\" results returned before continuing; in extreme cases, zero results may be returned.",
+       "apihelp-query+alldeletedrevisions-param-generatetitles": "When being used as a generator, generate titles rather than revision IDs.",
+       "apihelp-query+alldeletedrevisions-example-user": "List the last 50 deleted contributions by User:Example",
+       "apihelp-query+alldeletedrevisions-example-ns-main": "List the first 50 deleted revisions in the main namespace",
+
+       "apihelp-query+allfileusages-description": "List all file usages, including non-existing.",
+       "apihelp-query+allfileusages-param-from": "The title of the file to start enumerating from.",
+       "apihelp-query+allfileusages-param-to": "The title of the file to stop enumerating at.",
+       "apihelp-query+allfileusages-param-prefix": "Search for all file titles that begin with this value.",
+       "apihelp-query+allfileusages-param-unique": "Only show distinct file titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
+       "apihelp-query+allfileusages-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the using page (cannot be used with $1unique).\n;title:Adds the title of the file.",
+       "apihelp-query+allfileusages-param-limit": "How many total items to return.",
+       "apihelp-query+allfileusages-param-dir": "The direction in which to list.",
+       "apihelp-query+allfileusages-example-B": "List file titles, including missing ones, with page IDs they are from, starting at B",
+       "apihelp-query+allfileusages-example-unique": "List unique file titles",
+       "apihelp-query+allfileusages-example-unique-generator": "Gets all file titles, marking the missing ones",
+       "apihelp-query+allfileusages-example-generator": "Gets pages containing the files",
+
+       "apihelp-query+allimages-description": "Enumerate all images sequentially.",
+       "apihelp-query+allimages-param-sort": "Property to sort by.",
+       "apihelp-query+allimages-param-dir": "The direction in which to list.",
+       "apihelp-query+allimages-param-from": "The image title to start enumerating from. Can only be used with $1sort=name.",
+       "apihelp-query+allimages-param-to": "The image title to stop enumerating at. Can only be used with $1sort=name.",
+       "apihelp-query+allimages-param-start": "The timestamp to start enumerating from. Can only be used with $1sort=timestamp.",
+       "apihelp-query+allimages-param-end": "The timestamp to end enumerating. Can only be used with $1sort=timestamp.",
+       "apihelp-query+allimages-param-prop": "Which image information to get:\n;timestamp:Adds timestamp for the uploaded version.\n;user:Adds the user who uploaded the image version.\n;userid:Add the user ID that uploaded the image version.\n;comment:Comment on the version.\n;parsedcomment:Parse the comment on the version.\n;canonicaltitle:Adds the canonical title of the image file.\n;url:Gives URL to the image and the description page.\n;size:Adds the size of the image in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;sha1:Adds SHA-1 hash for the image.\n;mime:Adds MIME type of the image.\n;mediatype:Adds the media type of the image.\n;metadata:Lists Exif metadata for the version of the image.\n;commonmetadata:Lists file format generic metadata for the version of the image.\n;extmetadata:Lists formatted metadata combined from multiple sources. Results are HTML formatted.\n;bitdepth:Adds the bit depth of the version.",
+       "apihelp-query+allimages-param-prefix": "Search for all image titles that begin with this value. Can only be used with $1sort=name.",
+       "apihelp-query+allimages-param-minsize": "Limit to images with at least this many bytes.",
+       "apihelp-query+allimages-param-maxsize": "Limit to images with at most this many bytes.",
+       "apihelp-query+allimages-param-sha1": "SHA1 hash of image. Overrides $1sha1base36.",
+       "apihelp-query+allimages-param-sha1base36": "SHA1 hash of image in base 36 (used in MediaWiki).",
+       "apihelp-query+allimages-param-user": "Only return files uploaded by this user. Can only be used with $1sort=timestamp. Cannot be used together with $1filterbots.",
+       "apihelp-query+allimages-param-filterbots": "How to filter files uploaded by bots. Can only be used with $1sort=timestamp. Cannot be used together with $1user.",
+       "apihelp-query+allimages-param-mime": "What MIME type to search for. e.g. image/jpeg.",
+       "apihelp-query+allimages-param-limit": "How many images in total to return.",
+       "apihelp-query+allimages-example-B": "Show a list of files starting at the letter \"B\"",
+       "apihelp-query+allimages-example-recent": "Show a list of recently uploaded files similar to [[Special:NewFiles]]",
+       "apihelp-query+allimages-example-generator": "Show info about 4 files starting at the letter \"T\"",
+
+       "apihelp-query+alllinks-description": "Enumerate all links that point to a given namespace.",
+       "apihelp-query+alllinks-param-from": "The title of the link to start enumerating from.",
+       "apihelp-query+alllinks-param-to": "The title of the link to stop enumerating at.",
+       "apihelp-query+alllinks-param-prefix": "Search for all linked titles that begin with this value.",
+       "apihelp-query+alllinks-param-unique": "Only show distinct linked titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
+       "apihelp-query+alllinks-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the linking page (cannot be used with $1unique).\n;title:Adds the title of the link.",
+       "apihelp-query+alllinks-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+alllinks-param-limit": "How many total items to return.",
+       "apihelp-query+alllinks-param-dir": "The direction in which to list.",
+       "apihelp-query+alllinks-example-B": "List linked titles, including missing ones, with page IDs they are from, starting at B",
+       "apihelp-query+alllinks-example-unique": "List unique linked titles",
+       "apihelp-query+alllinks-example-unique-generator": "Gets all linked titles, marking the missing ones",
+       "apihelp-query+alllinks-example-generator": "Gets pages containing the links",
+
+       "apihelp-query+allmessages-description": "Return messages from this site.",
+       "apihelp-query+allmessages-param-messages": "Which messages to output. \"*\" (default) means all messages.",
+       "apihelp-query+allmessages-param-prop": "Which properties to get.",
+       "apihelp-query+allmessages-param-enableparser": "Set to enable parser, will preprocess the wikitext of message (substitute magic words, handle templates, etc.).",
+       "apihelp-query+allmessages-param-nocontent": "If set, do not include the content of the messages in the output.",
+       "apihelp-query+allmessages-param-includelocal": "Also include local messages, i.e. messages that don't exist in the software but do exist as a MediaWiki: page.\nThis lists all MediaWiki: pages, so it will also list those that aren't really messages such as [[MediaWiki:Common.js|Common.js]].",
+       "apihelp-query+allmessages-param-args": "Arguments to be substituted into message.",
+       "apihelp-query+allmessages-param-filter": "Return only messages with names that contain this string.",
+       "apihelp-query+allmessages-param-customised": "Return only messages in this customisation state.",
+       "apihelp-query+allmessages-param-lang": "Return messages in this language.",
+       "apihelp-query+allmessages-param-from": "Return messages starting at this message.",
+       "apihelp-query+allmessages-param-to": "Return messages ending at this message.",
+       "apihelp-query+allmessages-param-title": "Page name to use as context when parsing message (for $1enableparser option).",
+       "apihelp-query+allmessages-param-prefix": "Return messages with this prefix.",
+       "apihelp-query+allmessages-example-ipb": "Show messages starting with \"ipb-\"",
+       "apihelp-query+allmessages-example-de": "Show messages \"august\" and \"mainpage\" in German",
+
+       "apihelp-query+allpages-description": "Enumerate all pages sequentially in a given namespace.",
+       "apihelp-query+allpages-param-from": "The page title to start enumerating from.",
+       "apihelp-query+allpages-param-to": "The page title to stop enumerating at.",
+       "apihelp-query+allpages-param-prefix": "Search for all page titles that begin with this value.",
+       "apihelp-query+allpages-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+allpages-param-filterredir": "Which pages to list.",
+       "apihelp-query+allpages-param-minsize": "Limit to pages with at least this many bytes.",
+       "apihelp-query+allpages-param-maxsize": "Limit to pages with at most this many bytes.",
+       "apihelp-query+allpages-param-prtype": "Limit to protected pages only.",
+       "apihelp-query+allpages-param-prlevel": "Filter protections based on protection level (must be used with $1prtype= parameter).",
+       "apihelp-query+allpages-param-prfiltercascade": "Filter protections based on cascadingness (ignored when $1prtype isn't set).",
+       "apihelp-query+allpages-param-limit": "How many total pages to return.",
+       "apihelp-query+allpages-param-dir": "The direction in which to list.",
+       "apihelp-query+allpages-param-filterlanglinks": "Filter based on whether a page has langlinks. Note that this may not consider langlinks added by extensions.",
+       "apihelp-query+allpages-param-prexpiry": "Which protection expiry to filter the page on:\n;indefinite:Get only pages with indefinite protection expiry.\n;definite:Get only pages with a definite (specific) protection expiry.\n;all:Get pages with any protections expiry.",
+       "apihelp-query+allpages-example-B": "Show a list of pages starting at the letter \"B\"",
+       "apihelp-query+allpages-example-generator": "Show info about 4 pages starting at the letter \"T\"",
+       "apihelp-query+allpages-example-generator-revisions": "Show content of first 2 non-redirect pages beginning at \"Re\"",
+
+       "apihelp-query+allredirects-description": "List all redirects to a namespace.",
+       "apihelp-query+allredirects-param-from": "The title of the redirect to start enumerating from.",
+       "apihelp-query+allredirects-param-to": "The title of the redirect to stop enumerating at.",
+       "apihelp-query+allredirects-param-prefix": "Search for all target pages that begin with this value.",
+       "apihelp-query+allredirects-param-unique": "Only show distinct target pages. Cannot be used with $1prop=ids|fragment|interwiki.\nWhen used as a generator, yields target pages instead of source pages.",
+       "apihelp-query+allredirects-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the redirecting page (cannot be used with $1unique).\n;title:Adds the title of the redirect.\n;fragment:Adds the fragment from the redirect, if any (cannot be used with $1unique).\n;interwiki:Adds the interwiki prefix from the redirect, if any (cannot be used with $1unique).",
+       "apihelp-query+allredirects-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+allredirects-param-limit": "How many total items to return.",
+       "apihelp-query+allredirects-param-dir": "The direction in which to list.",
+       "apihelp-query+allredirects-example-B": "List target pages, including missing ones, with page IDs they are from, starting at B",
+       "apihelp-query+allredirects-example-unique": "List unique target pages",
+       "apihelp-query+allredirects-example-unique-generator": "Gets all target pages, marking the missing ones",
+       "apihelp-query+allredirects-example-generator": "Gets pages containing the redirects",
+
+       "apihelp-query+alltransclusions-description": "List all transclusions (pages embedded using &#123;&#123;x&#125;&#125;), including non-existing.",
+       "apihelp-query+alltransclusions-param-from": "The title of the transclusion to start enumerating from.",
+       "apihelp-query+alltransclusions-param-to": "The title of the transclusion to stop enumerating at.",
+       "apihelp-query+alltransclusions-param-prefix": "Search for all transcluded titles that begin with this value.",
+       "apihelp-query+alltransclusions-param-unique": "Only show distinct transcluded titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
+       "apihelp-query+alltransclusions-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the transcluding page (cannot be used with $1unique).\n;title:Adds the title of the transclusion.",
+       "apihelp-query+alltransclusions-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+alltransclusions-param-limit": "How many total items to return.",
+       "apihelp-query+alltransclusions-param-dir": "The direction in which to list.",
+       "apihelp-query+alltransclusions-example-B": "List transcluded titles, including missing ones, with page IDs they are from, starting at B",
+       "apihelp-query+alltransclusions-example-unique": "List unique transcluded titles",
+       "apihelp-query+alltransclusions-example-unique-generator": "Gets all transcluded titles, marking the missing ones",
+       "apihelp-query+alltransclusions-example-generator": "Gets pages containing the transclusions",
+
+       "apihelp-query+allusers-description": "Enumerate all registered users.",
+       "apihelp-query+allusers-param-from": "The user name to start enumerating from.",
+       "apihelp-query+allusers-param-to": "The user name to stop enumerating at.",
+       "apihelp-query+allusers-param-prefix": "Search for all users that begin with this value.",
+       "apihelp-query+allusers-param-dir": "Direction to sort in.",
+       "apihelp-query+allusers-param-group": "Only include users in the given groups.",
+       "apihelp-query+allusers-param-excludegroup": "Exclude users in the given groups.",
+       "apihelp-query+allusers-param-rights": "Only include users with the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
+       "apihelp-query+allusers-param-prop": "Which pieces of information to include:\n;blockinfo:Adds the information about a current block on the user.\n;groups:Lists groups that the user is in. This uses more server resources and may return fewer results than the limit.\n;implicitgroups:Lists all the groups the user is automatically in.\n;rights:Lists rights that the user has.\n;editcount:Adds the edit count of the user.\n;registration:Adds the timestamp of when the user registered if available (may be blank).",
+       "apihelp-query+allusers-param-limit": "How many total user names to return.",
+       "apihelp-query+allusers-param-witheditsonly": "Only list users who have made edits.",
+       "apihelp-query+allusers-param-activeusers": "Only list users active in the last $1 {{PLURAL:$1|day|days}}.",
+       "apihelp-query+allusers-example-Y": "List users starting at Y",
+
+       "apihelp-query+backlinks-description": "Find all pages that link to the given page.",
+       "apihelp-query+backlinks-param-title": "Title to search. Cannot be used together with $1pageid.",
+       "apihelp-query+backlinks-param-pageid": "Page ID to search. Cannot be used together with $1title.",
+       "apihelp-query+backlinks-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+backlinks-param-dir": "The direction in which to list.",
+       "apihelp-query+backlinks-param-filterredir": "How to filter for redirects. If set to nonredirects when $1redirect is enabled, this is only applied to the second level.",
+       "apihelp-query+backlinks-param-limit": "How many total pages to return. If $1redirect is enabled, limit applies to each level separately (which means you may get up to 2 * limit results).",
+       "apihelp-query+backlinks-param-redirect": "If linking page is a redirect, find all pages that link to that redirect as well. Maximum limit is halved.",
+       "apihelp-query+backlinks-example-simple": "Show links to [[Main page]]",
+       "apihelp-query+backlinks-example-generator": "Get information about pages linking to [[Main page]]",
+
+       "apihelp-query+blocks-description": "List all blocked users and IP addresses.",
+       "apihelp-query+blocks-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+blocks-param-end": "The timestamp to stop enumerating at.",
+       "apihelp-query+blocks-param-ids": "List of block IDs to list (optional).",
+       "apihelp-query+blocks-param-users": "List of users to search for (optional).",
+       "apihelp-query+blocks-param-ip": "Get all blocks applying to this IP or CIDR range, including range blocks.\nCannot be used together with $3users. CIDR ranges broader than IPv4/$1 or IPv6/$2 are not accepted.",
+       "apihelp-query+blocks-param-limit": "The maximum number of blocks to list.",
+       "apihelp-query+blocks-param-prop": "Which properties to get:\n;id:Adds the ID of the block.\n;user:Adds the username of the blocked user.\n;userid:Adds the user ID of the blocked user.\n;by:Adds the username of the blocking user.\n;byid:Adds the user ID of the blocking user.\n;timestamp:Adds the timestamp of when the block was given.\n;expiry:Adds the timestamp of when the block expires.\n;reason:Adds the reason given for the block.\n;range:Adds the range of IPs affected by the block.\n;flags:Tags the ban with (autoblock, anononly, etc.).",
+       "apihelp-query+blocks-param-show": "Show only items that meet these criteria.\nFor example, to see only indefinite blocks on IPs, set $1show=ip|!temp.",
+       "apihelp-query+blocks-example-simple": "List blocks",
+       "apihelp-query+blocks-example-users": "List blocks of users Alice and Bob",
+
+       "apihelp-query+categories-description": "List all categories the pages belong to.",
+       "apihelp-query+categories-param-prop": "Which additional properties to get for each category:\n;sortkey:Adds the sortkey (hexadecimal string) and sortkey prefix (human-readable part) for the category.\n;timestamp:Adds timestamp of when the category was added.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+categories-param-show": "Which kind of categories to show.",
+       "apihelp-query+categories-param-limit": "How many categories to return.",
+       "apihelp-query+categories-param-categories": "Only list these categories. Useful for checking whether a certain page is in a certain category.",
+       "apihelp-query+categories-param-dir": "The direction in which to list.",
+       "apihelp-query+categories-example-simple": "Get a list of categories [[Albert Einstein]] belongs to",
+       "apihelp-query+categories-example-generator": "Get information about all categories used in the [[Albert Einstein]]",
+
+       "apihelp-query+categoryinfo-description": "Returns information about the given categories.",
+       "apihelp-query+categoryinfo-example-simple": "Get information about [[:Category:Foo]] and [[:Category:Bar]]",
+
+       "apihelp-query+categorymembers-description": "List all pages in a given category.",
+       "apihelp-query+categorymembers-param-title": "Which category to enumerate (required). Must include the \"Category:\" prefix. Cannot be used together with $1pageid.",
+       "apihelp-query+categorymembers-param-pageid": "Page ID of the category to enumerate. Cannot be used together with $1title.",
+       "apihelp-query+categorymembers-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID.\n;title:Adds the title and namespace ID of the page.\n;sortkey:Adds the sortkey used for sorting in the category (hexadecimal string).\n;sortkeyprefix:Adds the sortkey prefix used for sorting in the category (human-readable part of the sortkey).\n;type:Adds the type that the page has been categorised as (page, subcat or file).\n;timestamp:Adds the timestamp of when the page was included.",
+       "apihelp-query+categorymembers-param-namespace": "Only include pages in these namespaces. Note that $1type=subcat or $1type=file may be used instead of $1namespace=14 or 6.",
+       "apihelp-query+categorymembers-param-type": "Which type of category members to include. Ignored when $1sort=timestamp is set.",
+       "apihelp-query+categorymembers-param-limit": "The maximum number of pages to return.",
+       "apihelp-query+categorymembers-param-sort": "Property to sort by.",
+       "apihelp-query+categorymembers-param-dir": "In which direction to sort.",
+       "apihelp-query+categorymembers-param-start": "Timestamp to start listing from. Can only be used with $1sort=timestamp.",
+       "apihelp-query+categorymembers-param-end": "Timestamp to end listing at. Can only be used with $1sort=timestamp.",
+       "apihelp-query+categorymembers-param-starthexsortkey": "Sortkey to start listing from, as returned by $1prop=sortkey. Can only be used with $1sort=sortkey.",
+       "apihelp-query+categorymembers-param-endhexsortkey": "Sortkey to end listing from, as returned by $1prop=sortkey. Can only be used with $1sort=sortkey.",
+       "apihelp-query+categorymembers-param-startsortkeyprefix": "Sortkey prefix to start listing from. Can only be used with $1sort=sortkey. Overrides $1starthexsortkey.",
+       "apihelp-query+categorymembers-param-endsortkeyprefix": "Sortkey prefix to end listing BEFORE (not at, if this value occurs it will not be included!). Can only be used with $1sort=sortkey. Overrides $1endhexsortkey.",
+       "apihelp-query+categorymembers-param-startsortkey": "Use $1starthexsortkey instead.",
+       "apihelp-query+categorymembers-param-endsortkey": "Use $1endhexsortkey instead.",
+       "apihelp-query+categorymembers-example-simple": "Get first 10 pages in [[:Category:Physics]]",
+       "apihelp-query+categorymembers-example-generator": "Get page info about first 10 pages in [[:Category:Physics]]",
+
+       "apihelp-query+contributors-description": "Get the list of logged-in contributors and the count of anonymous contributors to a page.",
+       "apihelp-query+contributors-param-group": "Only include users in the given groups. Does not include implicit or auto-promoted groups like *, user, or autoconfirmed.",
+       "apihelp-query+contributors-param-excludegroup": "Exclude users in the given groups. Does not include implicit or auto-promoted groups like *, user, or autoconfirmed.",
+       "apihelp-query+contributors-param-rights": "Only include users having the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
+       "apihelp-query+contributors-param-excluderights": "Exclude users having the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
+       "apihelp-query+contributors-param-limit": "How many contributors to return.",
+       "apihelp-query+contributors-example-simple": "Show contributors to the [[Main Page]]",
+
+       "apihelp-query+deletedrevisions-description": "Get deleted revision information.\n\nMay be used in several ways:\n# Get deleted revisions for a set of pages, by setting titles or pageids. Ordered by title and timestamp.\n# Get data about a set of deleted revisions by setting their IDs with revids. Ordered by revision ID.",
+       "apihelp-query+deletedrevisions-param-start": "The timestamp to start enumerating from. Ignored when processing a list of revision IDs.",
+       "apihelp-query+deletedrevisions-param-end": "The timestamp to stop enumerating at. Ignored when processing a list of revision IDs.",
+       "apihelp-query+deletedrevisions-param-tag": "Only list revisions tagged with this tag.",
+       "apihelp-query+deletedrevisions-param-user": "Only list revisions by this user.",
+       "apihelp-query+deletedrevisions-param-excludeuser": "Don't list revisions by this user.",
+       "apihelp-query+deletedrevisions-param-limit": "The maximum amount of revisions to list.",
+       "apihelp-query+deletedrevisions-param-prop": "Which properties to get:\n;revid:Adds the revision ID of the deleted revision.\n;parentid:Adds the revision ID of the previous revision to the page.\n;user:Adds the user who made the revision.\n;userid:Adds the user ID who made the revision.\n;comment:Adds the comment of the revision.\n;parsedcomment:Adds the parsed comment of the revision.\n;minor:Tags if the revision is minor.\n;len:Adds the length (bytes) of the revision.\n;sha1:Adds the SHA-1 (base 16) of the revision.\n;content:Adds the content of the revision.\n;tags:Tags for the revision.",
+       "apihelp-query+deletedrevisions-example-titles": "List the deleted revisions of [[Main Page]] and [[Talk:Main Page]], with content",
+       "apihelp-query+deletedrevisions-example-revids": "List the information for deleted revision 123456",
+
+       "apihelp-query+deletedrevs-description": "List deleted revisions.\n\nOperates in three modes:\n# List deleted revisions for the given titles, sorted by timestamp.\n# List deleted contributions for the given user, sorted by timestamp (no titles specified).\n# List all deleted revisions in the given namespace, sorted by title and timestamp (no titles specified, $1user not set).\n\nCertain parameters only apply to some modes and are ignored in others.",
+       "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Mode|Modes}}: $2",
+       "apihelp-query+deletedrevs-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+deletedrevs-param-end": "The timestamp to stop enumerating at.",
+       "apihelp-query+deletedrevs-param-from": "Start listing at this title.",
+       "apihelp-query+deletedrevs-param-to": "Stop listing at this title.",
+       "apihelp-query+deletedrevs-param-prefix": "Search for all page titles that begin with this value.",
+       "apihelp-query+deletedrevs-param-unique": "List only one revision for each page.",
+       "apihelp-query+deletedrevs-param-tag": "Only list revisions tagged with this tag.",
+       "apihelp-query+deletedrevs-param-user": "Only list revisions by this user.",
+       "apihelp-query+deletedrevs-param-excludeuser": "Don't list revisions by this user.",
+       "apihelp-query+deletedrevs-param-namespace": "Only list pages in this namespace.",
+       "apihelp-query+deletedrevs-param-limit": "The maximum amount of revisions to list.",
+       "apihelp-query+deletedrevs-param-prop": "Which properties to get:\n;revid:Adds the revision ID of the deleted revision.\n;parentid:Adds the revision ID of the previous revision to the page.\n;user:Adds the user who made the revision.\n;userid:Adds the user ID whom made the revision.\n;comment:Adds the comment of the revision.\n;parsedcomment:Adds the parsed comment of the revision.\n;minor:Tags if the revision is minor.\n;len:Adds the length (bytes) of the revision.\n;sha1:Adds the SHA-1 (base 16) of the revision.\n;content:Adds the content of the revision.\n;token:<span class=\"apihelp-deprecated\">Deprecated.</span> Gives the edit token.\n;tags:Tags for the revision.",
+       "apihelp-query+deletedrevs-example-mode1": "List the last deleted revisions of Main Page and Talk:Main Page, with content (mode 1)",
+       "apihelp-query+deletedrevs-example-mode2": "List the last 50 deleted contributions by Bob (mode 2)",
+       "apihelp-query+deletedrevs-example-mode3-main": "List the first 50 deleted revisions in the main namespace (mode 3)",
+       "apihelp-query+deletedrevs-example-mode3-talk": "List the first 50 deleted pages in the Talk namespace (mode 3):",
+
+       "apihelp-query+disabled-description": "This query module has been disabled.",
+
+       "apihelp-query+duplicatefiles-description": "List all files that are duplicates of the given files based on hash values.",
+       "apihelp-query+duplicatefiles-param-limit": "How many duplicate files to return.",
+       "apihelp-query+duplicatefiles-param-dir": "The direction in which to list.",
+       "apihelp-query+duplicatefiles-param-localonly": "Look only for files in the local repository.",
+       "apihelp-query+duplicatefiles-example-simple": "Look for duplicates of [[:File:Albert Einstein Head.jpg]]",
+       "apihelp-query+duplicatefiles-example-generated": "Look for duplicates of all files",
+
+       "apihelp-query+embeddedin-description": "Find all pages that embed (transclude) the given title.",
+       "apihelp-query+embeddedin-param-title": "Title to search. Cannot be used together with $1pageid.",
+       "apihelp-query+embeddedin-param-pageid": "Page ID to search. Cannot be used together with $1title.",
+       "apihelp-query+embeddedin-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+embeddedin-param-dir": "The direction in which to list.",
+       "apihelp-query+embeddedin-param-filterredir": "How to filter for redirects.",
+       "apihelp-query+embeddedin-param-limit": "How many total pages to return.",
+       "apihelp-query+embeddedin-example-simple": "Show pages transcluding [[Template:Stub]]",
+       "apihelp-query+embeddedin-example-generator": "Get information about pages transcluding [[Template:Stub]]",
+
+       "apihelp-query+extlinks-description": "Returns all external URLs (not interwikis) from the given pages.",
+       "apihelp-query+extlinks-param-limit": "How many links to return.",
+       "apihelp-query+extlinks-param-protocol": "Protocol of the URL. If empty and $1query is set, the protocol is \"http\". Leave both this and $1query empty to list all external links.",
+       "apihelp-query+extlinks-param-query": "Search string without protocol. Useful for checking whether a certain page contains a certain external url.",
+       "apihelp-query+extlinks-param-expandurl": "Expand protocol-relative URLs with the canonical protocol.",
+       "apihelp-query+extlinks-example-simple": "Get a list of external links on the [[Main Page]]",
+
+       "apihelp-query+exturlusage-description": "Enumerate pages that contain a given URL.",
+       "apihelp-query+exturlusage-param-prop": "Which pieces of information to include:\n;ids:Adds the ID of page.\n;title:Adds the title and namespace ID of the page.\n;url:Adds the URL used in the page.",
+       "apihelp-query+exturlusage-param-protocol": "Protocol of the URL. If empty and $1query set, the protocol is \"http\". Leave both this and $1query empty to list all external links.",
+       "apihelp-query+exturlusage-param-query": "Search string without protocol. See [[Special:LinkSearch]]. Leave empty to list all external links.",
+       "apihelp-query+exturlusage-param-namespace": "The page namespaces to enumerate.",
+       "apihelp-query+exturlusage-param-limit": "How many pages to return.",
+       "apihelp-query+exturlusage-param-expandurl": "Expand protocol-relative URLs with the canonical protocol.",
+       "apihelp-query+exturlusage-example-simple": "Show pages linking to http://www.mediawiki.org",
+
+       "apihelp-query+filearchive-description": "Enumerate all deleted files sequentially.",
+       "apihelp-query+filearchive-param-from": "The image title to start enumerating from.",
+       "apihelp-query+filearchive-param-to": "The image title to stop enumerating at.",
+       "apihelp-query+filearchive-param-prefix": "Search for all image titles that begin with this value.",
+       "apihelp-query+filearchive-param-limit": "How many images to return in total.",
+       "apihelp-query+filearchive-param-dir": "The direction in which to list.",
+       "apihelp-query+filearchive-param-sha1": "SHA1 hash of image. Overrides $1sha1base36.",
+       "apihelp-query+filearchive-param-sha1base36": "SHA1 hash of image in base 36 (used in MediaWiki).",
+       "apihelp-query+filearchive-param-prop": "Which image information to get:\n;sha1:Adds SHA-1 hash for the image.\n;timestamp:Adds timestamp for the uploaded version.\n;user:Adds user who uploaded the image version.\n;size:Adds the size of the image in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;description:Adds description the image version.\n;parseddescription:Parse the description on the version.\n;mime:Adds MIME of the image.\n;mediatype:Adds the media type of the image.\n;metadata:Lists Exif metadata for the version of the image.\n;bitdepth:Adds the bit depth of the version.\n;archivename:Adds the file name of the archive version for non-latest versions.",
+       "apihelp-query+filearchive-example-simple": "Show a list of all deleted files",
+
+       "apihelp-query+filerepoinfo-description": "Return meta information about image repositories configured on the wiki.",
+       "apihelp-query+filerepoinfo-param-prop": "Which repository properties to get (there may be more available on some wikis):\n;apiurl:URL to the repository API - helpful for getting image info from the host.\n;name:The key of the repository - used in e.g. $wgForeignFileRepos and imageinfo return values.\n;displayname:The human-readable name of the repository wiki.\n;rooturl:Root URL for image paths.\n;local:Whether that repository is the local one or not.",
+       "apihelp-query+filerepoinfo-example-simple": "Get information about file repositories",
+
+       "apihelp-query+fileusage-description": "Find all pages that use the given files.",
+       "apihelp-query+fileusage-param-prop": "Which properties to get:\n;pageid:Page ID of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+fileusage-param-namespace": "Only include pages in these namespaces.",
+       "apihelp-query+fileusage-param-limit": "How many to return.",
+       "apihelp-query+fileusage-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirects:Only show non-redirects.",
+       "apihelp-query+fileusage-example-simple": "Get a list of pages using [[:File:Example.jpg]]",
+       "apihelp-query+fileusage-example-generator": "Get information about pages using [[:File:Example.jpg]]",
+
+       "apihelp-query+imageinfo-description": "Returns file information and upload history.",
+       "apihelp-query+imageinfo-param-prop": "Which file information to get:\n;timestamp:Adds timestamp for the uploaded version.\n;user:Adds the user who uploaded each file version.\n;userid:Add the user ID that uploaded each file version.\n;comment:Comment on the version.\n;parsedcomment:Parse the comment on the version.\n;canonicaltitle:Adds the canonical title of the file.\n;url:Gives URL to the file and the description page.\n;size:Adds the size of the file in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;sha1:Adds SHA-1 hash for the file.\n;mime:Adds MIME type of the file.\n;thumbmime:Adds MIME type of the image thumbnail (requires url and param $1urlwidth).\n;mediatype:Adds the media type of the file.\n;metadata:Lists Exif metadata for the version of the file.\n;commonmetadata:Lists file format generic metadata for the version of the file.\n;extmetadata:Lists formatted metadata combined from multiple sources. Results are HTML formatted.\n;archivename:Adds the file name of the archive version for non-latest versions.\n;bitdepth:Adds the bit depth of the version.\n;uploadwarning:Used by the Special:Upload page to get information about an existing file. Not intended for use outside MediaWiki core.",
+       "apihelp-query+imageinfo-param-limit": "How many file revisions to return per file.",
+       "apihelp-query+imageinfo-param-start": "Timestamp to start listing from.",
+       "apihelp-query+imageinfo-param-end": "Timestamp to stop listing at.",
+       "apihelp-query+imageinfo-param-urlwidth": "If $2prop=url is set, a URL to an image scaled to this width will be returned.\nFor performance reasons if this option is used, no more than $1 scaled images will be returned.",
+       "apihelp-query+imageinfo-param-urlheight": "Similar to $1urlwidth.",
+       "apihelp-query+imageinfo-param-metadataversion": "Version of metadata to use. if \"latest\" is specified, use latest version. Defaults to \"1\" for backwards compatibility.",
+       "apihelp-query+imageinfo-param-extmetadatalanguage": "What language to fetch extmetadata in. This affects both which translation to fetch, if multiple are available, as well as how things like numbers and various values are formatted.",
+       "apihelp-query+imageinfo-param-extmetadatamultilang": "If translations for extmetadata property are available, fetch all of them.",
+       "apihelp-query+imageinfo-param-extmetadatafilter": "If specified and non-empty, only these keys will be returned for $1prop=extmetadata.",
+       "apihelp-query+imageinfo-param-urlparam": "A handler specific parameter string. For example, pdfs might use \"page15-100px\". $1urlwidth must be used and be consistent with $1urlparam.",
+       "apihelp-query+imageinfo-param-localonly": "Look only for files in the local repository.",
+       "apihelp-query+imageinfo-example-simple": "Fetch information about the current version of [[:File:Albert Einstein Head.jpg]]",
+       "apihelp-query+imageinfo-example-dated": "Fetch information about versions of [[:File:Test.jpg]] from 2008 and later",
+
+       "apihelp-query+images-description": "Returns all files contained on the given pages.",
+       "apihelp-query+images-param-limit": "How many files to return.",
+       "apihelp-query+images-param-images": "Only list these files. Useful for checking whether a certain page has a certain file.",
+       "apihelp-query+images-param-dir": "The direction in which to list.",
+       "apihelp-query+images-example-simple": "Get a list of files used in the [[Main Page]]",
+       "apihelp-query+images-example-generator": "Get information about all files used in the [[Main Page]]",
+
+       "apihelp-query+imageusage-description": "Find all pages that use the given image title.",
+       "apihelp-query+imageusage-param-title": "Title to search. Cannot be used together with $1pageid.",
+       "apihelp-query+imageusage-param-pageid": "Page ID to search. Cannot be used together with $1title.",
+       "apihelp-query+imageusage-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+imageusage-param-dir": "The direction in which to list.",
+       "apihelp-query+imageusage-param-filterredir": "How to filter for redirects. If set to nonredirects when $1redirect is enabled, this is only applied to the second level.",
+       "apihelp-query+imageusage-param-limit": "How many total pages to return. If $1redirect is enabled, limit applies to each level separately (which means you may get up to 2 * limit results).",
+       "apihelp-query+imageusage-param-redirect": "If linking page is a redirect, find all pages that link to that redirect as well. Maximum limit is halved.",
+       "apihelp-query+imageusage-example-simple": "Show pages using [[:File:Albert Einstein Head.jpg]]",
+       "apihelp-query+imageusage-example-generator": "Get information about pages using [[:File:Albert Einstein Head.jpg]]",
+
+       "apihelp-query+info-description": "Get basic page information.",
+       "apihelp-query+info-param-prop": "Which additional properties to get:\n;protection:List the protection level of each page.\n;talkid:The page ID of the talk page for each non-talk page.\n;watched:List the watched status of each page.\n;watchers:The number of watchers, if allowed.\n;notificationtimestamp:The watchlist notification timestamp of each page.\n;subjectid:The page ID of the parent page for each talk page.\n;url:Gives a full URL, an edit URL, and the canonical URL for each page.\n;readable:Whether the user can read this page.\n;preload:Gives the text returned by EditFormPreloadText.\n;displaytitle:Gives the way the page title is actually displayed.",
+       "apihelp-query+info-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] instead.",
+       "apihelp-query+info-example-simple": "Get information about the [[Main Page]]",
+       "apihelp-query+info-example-protection": "Get general and protection information about the [[Main Page]]",
+
+       "apihelp-query+iwbacklinks-description": "Find all pages that link to the given interwiki link.\n\nCan be used to find all links with a prefix, or all links to a title (with a given prefix). Using neither parameter is effectively \"all interwiki links\".",
+       "apihelp-query+iwbacklinks-param-prefix": "Prefix for the interwiki.",
+       "apihelp-query+iwbacklinks-param-title": "Interwiki link to search for. Must be used with $1blprefix.",
+       "apihelp-query+iwbacklinks-param-limit": "How many total pages to return.",
+       "apihelp-query+iwbacklinks-param-prop": "Which properties to get:\n;iwprefix:Adds the prefix of the interwiki.\n;iwtitle:Adds the title of the interwiki.",
+       "apihelp-query+iwbacklinks-param-dir": "The direction in which to list.",
+       "apihelp-query+iwbacklinks-example-simple": "Get pages linking to [[wikibooks:Test]]",
+       "apihelp-query+iwbacklinks-example-generator": "Get information about pages linking to [[wikibooks:Test]]",
+
+       "apihelp-query+iwlinks-description": "Returns all interwiki links from the given pages.",
+       "apihelp-query+iwlinks-param-url": "Whether to get the full URL (cannot be used with $1prop).",
+       "apihelp-query+iwlinks-param-prop": "Which additional properties to get for each interlanguage link:\n;url:Adds the full URL.",
+       "apihelp-query+iwlinks-param-limit": "How many interwiki links to return.",
+       "apihelp-query+iwlinks-param-prefix": "Only return interwiki links with this prefix.",
+       "apihelp-query+iwlinks-param-title": "Interwiki link to search for. Must be used with $1prefix.",
+       "apihelp-query+iwlinks-param-dir": "The direction in which to list.",
+       "apihelp-query+iwlinks-example-simple": "Get interwiki links from the [[Main Page]]",
+
+       "apihelp-query+langbacklinks-description": "Find all pages that link to the given language link.\n\nCan be used to find all links with a language code, or all links to a title (with a given language). Using neither parameter is effectively \"all language links\".\n\nNote that this may not consider language links added by extensions.",
+       "apihelp-query+langbacklinks-param-lang": "Language for the language link.",
+       "apihelp-query+langbacklinks-param-title": "Language link to search for. Must be used with $1lang.",
+       "apihelp-query+langbacklinks-param-limit": "How many total pages to return.",
+       "apihelp-query+langbacklinks-param-prop": "Which properties to get:\n;lllang:Adds the language code of the language link.\n;lltitle:Adds the title of the language link.",
+       "apihelp-query+langbacklinks-param-dir": "The direction in which to list.",
+       "apihelp-query+langbacklinks-example-simple": "Get pages linking to [[:fr:Test]]",
+       "apihelp-query+langbacklinks-example-generator": "Get information about pages linking to [[:fr:Test]]",
+
+       "apihelp-query+langlinks-description": "Returns all interlanguage links from the given pages.",
+       "apihelp-query+langlinks-param-limit": "How many langlinks to return.",
+       "apihelp-query+langlinks-param-url": "Whether to get the full URL (cannot be used with $1prop).",
+       "apihelp-query+langlinks-param-prop": "Which additional properties to get for each interlanguage link:\n;url:Adds the full URL.\n;langname:Adds the localised language name (best effort). Use $1inlanguagecode to control the language.\n;autonym:Adds the native language name.",
+       "apihelp-query+langlinks-param-lang": "Only return language links with this language code.",
+       "apihelp-query+langlinks-param-title": "Link to search for. Must be used with $1lang.",
+       "apihelp-query+langlinks-param-dir": "The direction in which to list.",
+       "apihelp-query+langlinks-param-inlanguagecode": "Language code for localised language names.",
+       "apihelp-query+langlinks-example-simple": "Get interlanguage links from the [[Main Page]]",
+
+       "apihelp-query+links-description": "Returns all links from the given pages.",
+       "apihelp-query+links-param-namespace": "Show links in these namespaces only.",
+       "apihelp-query+links-param-limit": "How many links to return.",
+       "apihelp-query+links-param-titles": "Only list links to these titles. Useful for checking whether a certain page links to a certain title.",
+       "apihelp-query+links-param-dir": "The direction in which to list.",
+       "apihelp-query+links-example-simple": "Get links from the [[Main Page]]",
+       "apihelp-query+links-example-generator": "Get information about the link pages in the [[Main Page]]",
+       "apihelp-query+links-example-namespaces": "Get links from the [[Main Page]] in the User and Template namespaces",
+
+       "apihelp-query+linkshere-description": "Find all pages that link to the given pages.",
+       "apihelp-query+linkshere-param-prop": "Which properties to get:\n;pageid:Page ID of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+linkshere-param-namespace": "Only include pages in these namespaces.",
+       "apihelp-query+linkshere-param-limit": "How many to return.",
+       "apihelp-query+linkshere-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirects:Only show non-redirects.",
+       "apihelp-query+linkshere-example-simple": "Get a list of pages linking to the [[Main Page]]",
+       "apihelp-query+linkshere-example-generator": "Get information about pages linking to the [[Main Page]]",
+
+       "apihelp-query+logevents-description": "Get events from logs.",
+       "apihelp-query+logevents-param-prop": "Which properties to get:\n;ids:Adds the ID of the log event.\n;title:Adds the title of the page for the log event.\n;type:Adds the type of log event.\n;user:Adds the user responsible for the log event.\n;userid:Adds the user ID who was responsible for the log event.\n;timestamp:Adds the timestamp for the event.\n;comment:Adds the comment of the event.\n;parsedcomment:Adds the parsed comment of the event.\n;details:Lists additional details about the event.\n;tags:Lists tags for the event.",
+       "apihelp-query+logevents-param-type": "Filter log entries to only this type.",
+       "apihelp-query+logevents-param-action": "Filter log actions to only this action. Overrides $1type. Wildcard actions like \"action/*\" allows to specify any string for the asterisk.",
+       "apihelp-query+logevents-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+logevents-param-end": "The timestamp to end enumerating.",
+       "apihelp-query+logevents-param-user": "Filter entries to those made by the given user.",
+       "apihelp-query+logevents-param-title": "Filter entries to those related to a page.",
+       "apihelp-query+logevents-param-namespace": "Filter entries to those in the given namespace.",
+       "apihelp-query+logevents-param-prefix": "Filter entries that start with this prefix.",
+       "apihelp-query+logevents-param-tag": "Only list event entries tagged with this tag.",
+       "apihelp-query+logevents-param-limit": "How many total event entries to return.",
+       "apihelp-query+logevents-example-simple": "List recent log events",
+
+       "apihelp-query+pagepropnames-description": "List all page prop names in use on the wiki.",
+       "apihelp-query+pagepropnames-param-limit": "The maximum number of names to return.",
+       "apihelp-query+pagepropnames-example-simple": "Get first 10 prop names",
+
+       "apihelp-query+pageprops-description": "Get various properties defined in the page content.",
+       "apihelp-query+pageprops-param-prop": "Only list these props. Useful for checking whether a certain page uses a certain page prop.",
+       "apihelp-query+pageprops-example-simple": "Get properties for [[:Category:Foo]]",
+
+       "apihelp-query+pageswithprop-description": "List all pages using a given page prop.",
+       "apihelp-query+pageswithprop-param-propname": "Page prop for which to enumerate pages.",
+       "apihelp-query+pageswithprop-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID.\n;title:Adds the title and namespace ID of the page.\n;value:Adds the value of the page prop.",
+       "apihelp-query+pageswithprop-param-limit": "The maximum number of pages to return.",
+       "apihelp-query+pageswithprop-param-dir": "In which direction to sort.",
+       "apihelp-query+pageswithprop-example-simple": "List the first 10 pages using &#123;&#123;DISPLAYTITLE:&#125;&#125;",
+       "apihelp-query+pageswithprop-example-generator": "Get page info about first 10 pages using _&#95;NOTOC_&#95;",
+
+       "apihelp-query+prefixsearch-description": "Perform a prefix search for page titles.",
+       "apihelp-query+prefixsearch-param-search": "Search string.",
+       "apihelp-query+prefixsearch-param-namespace": "Namespaces to search.",
+       "apihelp-query+prefixsearch-param-limit": "Maximum number of results to return.",
+       "apihelp-query+prefixsearch-example-simple": "Search for page titles beginning with \"meaning\"",
+
+       "apihelp-query+protectedtitles-description": "List all titles protected from creation.",
+       "apihelp-query+protectedtitles-param-namespace": "Only list titles in these namespaces.",
+       "apihelp-query+protectedtitles-param-level": "Only list titles with these protection levels.",
+       "apihelp-query+protectedtitles-param-limit": "How many total pages to return.",
+       "apihelp-query+protectedtitles-param-start": "Start listing at this protection timestamp.",
+       "apihelp-query+protectedtitles-param-end": "Stop listing at this protection timestamp.",
+       "apihelp-query+protectedtitles-param-prop": "Which properties to get:\n;timestamp:Adds the timestamp of when protection was added.\n;user:Adds the user that added the protection.\n;userid:Adds the user ID that added the protection.\n;comment:Adds the comment for the protection.\n;parsedcomment:Adds the parsed comment for the protection.\n;expiry:Adds the timestamp of when the protection will be lifted.\n;level:Adds the protection level.",
+       "apihelp-query+protectedtitles-example-simple": "List protected titles",
+       "apihelp-query+protectedtitles-example-generator": "Find links to protected titles in the main namespace",
+
+       "apihelp-query+querypage-description": "Get a list provided by a QueryPage-based special page.",
+       "apihelp-query+querypage-param-page": "The name of the special page. Note, this is case sensitive.",
+       "apihelp-query+querypage-param-limit": "Number of results to return.",
+       "apihelp-query+querypage-example-ancientpages": "Return results from [[Special:Ancientpages]].",
+
+       "apihelp-query+random-description": "Get a set of random pages.\n\nPages are listed in a fixed sequence, only the starting point is random. This means that if, for example, \"Main Page\" is the first random page on your list, \"List of fictional monkeys\" will *always* be second, \"List of people on stamps of Vanuatu\" third, etc.\n\nIf the number of pages in the namespace is lower than $1limit, you will get fewer pages. You will not get the same page twice.",
+       "apihelp-query+random-param-namespace": "Return pages in these namespaces only.",
+       "apihelp-query+random-param-limit": "Limit how many random pages will be returned.",
+       "apihelp-query+random-param-redirect": "Load a random redirect instead of a random page.",
+       "apihelp-query+random-example-simple": "Return two random pages from the main namespace",
+       "apihelp-query+random-example-generator": "Return page info about two random pages from the main namespace",
+
+       "apihelp-query+recentchanges-description": "Enumerate recent changes.",
+       "apihelp-query+recentchanges-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+recentchanges-param-end": "The timestamp to end enumerating.",
+       "apihelp-query+recentchanges-param-namespace": "Filter changes to only these namespaces.",
+       "apihelp-query+recentchanges-param-user": "Only list changes by this user.",
+       "apihelp-query+recentchanges-param-excludeuser": "Don't list changes by this user.",
+       "apihelp-query+recentchanges-param-tag": "Only list changes tagged with this tag.",
+       "apihelp-query+recentchanges-param-prop": "Include additional pieces of information:\n;user:Adds the user responsible for the edit and tags if they are an IP.\n;userid:Adds the user ID responsible for the edit.\n;comment:Adds the comment for the edit.\n;parsedcomment:Adds the parsed comment for the edit.\n;flags:Adds flags for the edit.\n;timestamp:Adds timestamp of the edit.\n;title:Adds the page title of the edit.\n;ids:Adds the page ID, recent changes ID and the new and old revision ID.\n;sizes:Adds the new and old page length in bytes.\n;redirect:Tags edit if page is a redirect.\n;patrolled:Tags patrollable edits as being patrolled or unpatrolled.\n;loginfo:Adds log information (log ID, log type, etc) to log entries.\n;tags:Lists tags for the entry.\n;sha1:Adds the content checksum for entries associated with a revision.",
+       "apihelp-query+recentchanges-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] instead.",
+       "apihelp-query+recentchanges-param-show": "Show only items that meet these criteria. For example, to see only minor edits done by logged-in users, set $1show=minor|!anon.",
+       "apihelp-query+recentchanges-param-limit": "How many total changes to return.",
+       "apihelp-query+recentchanges-param-type": "Which types of changes to show.",
+       "apihelp-query+recentchanges-param-toponly": "Only list changes which are the latest revision.",
+       "apihelp-query+recentchanges-example-simple": "List recent changes",
+       "apihelp-query+recentchanges-example-generator": "Get page info about recent unpatrolled changes",
+
+       "apihelp-query+redirects-description": "Returns all redirects to the given pages.",
+       "apihelp-query+redirects-param-prop": "Which properties to get:\n;pageid:Page ID of each redirect.\n;title:Title of each redirect.\n;fragment:Fragment of each redirect, if any.",
+       "apihelp-query+redirects-param-namespace": "Only include pages in these namespaces.",
+       "apihelp-query+redirects-param-limit": "How many redirects to return.",
+       "apihelp-query+redirects-param-show": "Show only items that meet these criteria:\n;fragment:Only show redirects with a fragment.\n;!fragment:Only show redirects without a fragment.",
+       "apihelp-query+redirects-example-simple": "Get a list of redirects to the [[Main Page]]",
+       "apihelp-query+redirects-example-generator": "Get information about all redirects to the [[Main Page]]",
+
+       "apihelp-query+revisions-description": "Get revision information.\n\nMay be used in several ways:\n# Get data about a set of pages (last revision), by setting titles or pageids.\n# Get revisions for one given page, by using titles or pageids with start, end, or limit.\n# Get data about a set of revisions by setting their IDs with revids.",
+       "apihelp-query+revisions-paraminfo-singlepageonly": "May only be used with a single page (mode #2).",
+       "apihelp-query+revisions-param-startid": "From which revision ID to start enumeration.",
+       "apihelp-query+revisions-param-endid": "Stop revision enumeration on this revision ID.",
+       "apihelp-query+revisions-param-start": "From which revision timestamp to start enumeration.",
+       "apihelp-query+revisions-param-end": "Enumerate up to this timestamp.",
+       "apihelp-query+revisions-param-user": "Only include revisions made by user.",
+       "apihelp-query+revisions-param-excludeuser": "Exclude revisions made by user.",
+       "apihelp-query+revisions-param-tag": "Only list revisions tagged with this tag.",
+       "apihelp-query+revisions-param-token": "Which tokens to obtain for each revision.",
+       "apihelp-query+revisions-example-content": "Get data with content for the last revision of titles \"API\" and \"Main Page\"",
+       "apihelp-query+revisions-example-last5": "Get last 5 revisions of the \"Main Page\"",
+       "apihelp-query+revisions-example-first5": "Get first 5 revisions of the \"Main Page\"",
+       "apihelp-query+revisions-example-first5-after": "Get first 5 revisions of the \"Main Page\" made after 2006-05-01",
+       "apihelp-query+revisions-example-first5-not-localhost": "Get first 5 revisions of the \"Main Page\" that were not made made by anonymous user \"127.0.0.1\"",
+       "apihelp-query+revisions-example-first5-user": "Get first 5 revisions of the \"Main Page\" that were made by the user \"MediaWiki default\"",
+
+       "apihelp-query+revisions+base-param-prop": "Which properties to get for each revision:\n;ids:The ID of the revision.\n;flags:Revision flags (minor).\n;timestamp:The timestamp of the revision.\n;user:User that made the revision.\n;userid:User ID of the revision creator.\n;size:Length (bytes) of the revision.\n;sha1:SHA-1 (base 16) of the revision.\n;contentmodel:Content model ID of the revision.\n;comment:Comment by the user for the revision.\n;parsedcomment:Parsed comment by the user for the revision.\n;content:Text of the revision.\n;tags:Tags for the revision.",
+       "apihelp-query+revisions+base-param-limit": "Limit how many revisions will be returned.",
+       "apihelp-query+revisions+base-param-expandtemplates": "Expand templates in revision content (requires $1prop=content).",
+       "apihelp-query+revisions+base-param-generatexml": "Generate XML parse tree for revision content (requires $1prop=content).",
+       "apihelp-query+revisions+base-param-parse": "Parse revision content (requires $1prop=content). For performance reasons, if this option is used, $1limit is enforced to 1.",
+       "apihelp-query+revisions+base-param-section": "Only retrieve the content of this section number.",
+       "apihelp-query+revisions+base-param-diffto": "Revision ID to diff each revision to. Use \"prev\", \"next\" and \"cur\" for the previous, next and current revision respectively.",
+       "apihelp-query+revisions+base-param-difftotext": "Text to diff each revision to. Only diffs a limited number of revisions. Overrides $1diffto. If $1section is set, only that section will be diffed against this text",
+       "apihelp-query+revisions+base-param-contentformat": "Serialization format used for $1difftotext and expected for output of content.",
+
+       "apihelp-query+search-description": "Perform a full text search.",
+       "apihelp-query+search-param-search": "Search for all page titles (or content) that have this value.",
+       "apihelp-query+search-param-namespace": "Search only within these namespaces.",
+       "apihelp-query+search-param-what": "Which type of search to perform.",
+       "apihelp-query+search-param-info": "Which metadata to return.",
+       "apihelp-query+search-param-prop": "Which properties to return:\n;size:Adds the size of the page in bytes.\n;wordcount:Adds the word count of the page.\n;timestamp:Adds the timestamp of when the page was last edited.\n;snippet:Adds a parsed snippet of the page.\n;titlesnippet:Adds a parsed snippet of the page title.\n;redirectsnippet:Adds a parsed snippet of the redirect title.\n;redirecttitle:Adds the title of the matching redirect.\n;sectionsnippet:Adds a parsed snippet of the matching section title.\n;sectiontitle:Adds the title of the matching section.\n;score:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>\n;hasrelated:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>",
+       "apihelp-query+search-param-limit": "How many total pages to return.",
+       "apihelp-query+search-param-interwiki": "Include interwiki results in the search, if available.",
+       "apihelp-query+search-param-backend": "Which search backend to use, if not the default.",
+       "apihelp-query+search-example-simple": "Search for \"meaning\"",
+       "apihelp-query+search-example-text": "Search texts for \"meaning\"",
+       "apihelp-query+search-example-generator": "Ger page info about the pages returned for a search for \"meaning\"",
+
+       "apihelp-query+siteinfo-description": "Return general information about the site.",
+       "apihelp-query+siteinfo-param-prop": "Which information to get:\n;general:Overall system information.\n;namespaces:List of registered namespaces and their canonical names.\n;namespacealiases:List of registered namespace aliases.\n;specialpagealiases:List of special page aliases.\n;magicwords:List of magic words and their aliases.\n;statistics:Returns site statistics.\n;interwikimap:Returns interwiki map (optionally filtered, (optionally localised by using $1inlanguagecode)).\n;dbrepllag:Returns database server with the highest replication lag.\n;usergroups:Returns user groups and the associated permissions.\n;extensions:Returns extensions installed on the wiki.\n;fileextensions:Returns list of file extensions allowed to be uploaded.\n;rightsinfo:Returns wiki rights (license) information if available.\n;restrictions:Returns information on available restriction (protection) types.\n;languages:Returns a list of languages MediaWiki supports (optionally localised by using $1inlanguagecode).\n;skins:Returns a list of all enabled skins (optionally localised by using $1inlanguagecode, otherwise in content language).\n;extensiontags:Returns a list of parser extension tags.\n;functionhooks:Returns a list of parser function hooks.\n;showhooks:Returns a list of all subscribed hooks (contents of $wgHooks).\n;variables:Returns a list of variable IDs.\n;protocols:Returns a list of protocols that are allowed in external links.\n;defaultoptions:Returns the default values for user preferences.",
+       "apihelp-query+siteinfo-param-filteriw": "Return only local or only nonlocal entries of the interwiki map.",
+       "apihelp-query+siteinfo-param-showalldb": "List all database servers, not just the one lagging the most.",
+       "apihelp-query+siteinfo-param-numberingroup": "Lists the number of users in user groups.",
+       "apihelp-query+siteinfo-param-inlanguagecode": "Language code for localised language names (best effort) and skin names.",
+       "apihelp-query+siteinfo-example-simple": "Fetch site information",
+       "apihelp-query+siteinfo-example-interwiki": "Fetch a list of local interwiki prefixes",
+       "apihelp-query+siteinfo-example-replag": "Check the current replication lag",
+
+       "apihelp-query+stashimageinfo-description": "Returns file information for stashed files.",
+       "apihelp-query+stashimageinfo-param-filekey": "Key that identifies a previous upload that was stashed temporarily.",
+       "apihelp-query+stashimageinfo-param-sessionkey": "Alias for $1filekey, for backward compatibility.",
+       "apihelp-query+stashimageinfo-param-prop": "Which image information to get:\n;timestamp:Adds timestamp for the uploaded version.\n;canonicaltitle:Adds the canonical title of the image file.\n;url:Gives URL to the image and the description page.\n;size:Adds the size of the image in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;sha1:Adds SHA-1 hash for the image.\n;mime:Adds MIME type of the image.\n;thumbmime:Adds MIME type of the image thumbnail (requires url and param $1urlwidth).\n;metadata:Lists Exif metadata for the version of the image.\n;commonmetadata:Lists file format generic metadata for the version of the image.\n;extmetadata:Lists formatted metadata combined from multiple sources. Results are HTML formatted.\n;bitdepth:Adds the bit depth of the version.",
+       "apihelp-query+stashimageinfo-example-simple": "Returns information for a stashed file",
+       "apihelp-query+stashimageinfo-example-params": "Returns thumbnails for two stashed files",
+
+       "apihelp-query+tags-description": "List change tags.",
+       "apihelp-query+tags-param-limit": "The maximum number of tags to list.",
+       "apihelp-query+tags-param-prop": "Which properties to get:\n;name:Adds name of tag.\n;displayname:Adds system message for the tag.\n;description:Adds description of the tag.\n;hitcount:Adds the amount of revisions that have this tag.",
+       "apihelp-query+tags-example-simple": "List available tags",
+
+       "apihelp-query+templates-description": "Returns all pages transcluded on the given pages.",
+       "apihelp-query+templates-param-namespace": "Show templates in this namespaces only.",
+       "apihelp-query+templates-param-limit": "How many templates to return.",
+       "apihelp-query+templates-param-templates": "Only list these templates. Useful for checking whether a certain page uses a certain template.",
+       "apihelp-query+templates-param-dir": "The direction in which to list.",
+       "apihelp-query+templates-example-simple": "Get templates from the [[Main Page]]",
+       "apihelp-query+templates-example-generator": "Get information about the template pages in the [[Main Page]]",
+       "apihelp-query+templates-example-namespaces": "Get templates from the [[Main Page]] in the User and Template namespaces",
+
+       "apihelp-query+tokens-description": "Gets tokens for data-modifying actions.",
+       "apihelp-query+tokens-param-type": "Types of token to request.",
+       "apihelp-query+tokens-example-simple": "Retrieve a csrf token (the default)",
+       "apihelp-query+tokens-example-types": "Retrieve a watch token and a patrol token",
+
+       "apihelp-query+transcludedin-description": "Find all pages that transclude the given pages.",
+       "apihelp-query+transcludedin-param-prop": "Which properties to get:\n;pageid:Page ID of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+transcludedin-param-namespace": "Only include pages in these namespaces.",
+       "apihelp-query+transcludedin-param-limit": "How many to return.",
+       "apihelp-query+transcludedin-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirects:Only show non-redirects.",
+       "apihelp-query+transcludedin-example-simple": "Get a list of pages transcluding the [[Main Page]]",
+       "apihelp-query+transcludedin-example-generator": "Get information about pages transcluding the [[Main Page]]",
+
+       "apihelp-query+usercontribs-description": "Get all edits by a user.",
+       "apihelp-query+usercontribs-param-limit": "The maximum number of contributions to return.",
+       "apihelp-query+usercontribs-param-start": "The start timestamp to return from.",
+       "apihelp-query+usercontribs-param-end": "The end timestamp to return to.",
+       "apihelp-query+usercontribs-param-user": "The users to retrieve contributions for.",
+       "apihelp-query+usercontribs-param-userprefix": "Retrieve contributions for all users whose names begin with this value. Overrides $1user.",
+       "apihelp-query+usercontribs-param-namespace": "Only list contributions in these namespaces.",
+       "apihelp-query+usercontribs-param-prop": "Include additional pieces of information:\n;ids:Adds the page ID and revision ID.\n;title:Adds the title and namespace ID of the page.\n;timestamp:Adds the timestamp of the edit.\n;comment:Adds the comment of the edit.\n;parsedcomment:Adds the parsed comment of the edit.\n;size:Adds the new size of the edit.\n;sizediff:Adds the size delta of the edit against its parent.\n;flags:Adds flags of the edit.\n;patrolled:Tags patrolled edits.\n;tags:Lists tags for the edit.",
+       "apihelp-query+usercontribs-param-show": "Show only items that meet thse criteria, e.g. non minor edits only: $2show=!minor.\n\nIf $2show=patrolled or $2show=!patrolled is set, revisions older than [https://www.mediawiki.org/wiki/Manual:$wgRCMaxAge $wgRCMaxAge] ($1 {{PLURAL:$1|second|seconds}}) won't be shown.",
+       "apihelp-query+usercontribs-param-tag": "Only list revisions tagged with this tag.",
+       "apihelp-query+usercontribs-param-toponly": "Only list changes which are the latest revision.",
+       "apihelp-query+usercontribs-example-user": "Show contributions of [[User:Example]]",
+       "apihelp-query+usercontribs-example-ipprefix": "Show contributions from all IPs with prefix \"192.0.2.\"",
+
+       "apihelp-query+userinfo-description": "Get information about the current user.",
+       "apihelp-query+userinfo-param-prop": "Which pieces of information to include:\n;blockinfo:Tags if the current user is blocked, by whom, and for what reason.\n;hasmsg:Adds a tag \"message\" if the current user has pending messages.\n;groups:Lists all the groups the current user belongs to.\n;implicitgroups:Lists all the groups the current user is automatically a member of.\n;rights:Lists all the rights the current user has.\n;changeablegroups:Lists the groups the current user can add to and remove from.\n;options:Lists all preferences the current user has set.\n;preferencestoken:DEPRECATED! Get a token to change current user's preferences.\n;editcount:Adds the current user's edit count.\n;ratelimits:Lists all rate limits applying to the current user.\n;realname:Adds the user's real name.\n;email:Adds the user's email address and email authentication date.\n;acceptlang:Echoes the Accept-Language header sent by the client in a structured format.\n;registrationdate:Adds the user's registration date.\n;unreadcount:Adds the count of unread pages on the user's watchlist (maximum $1; returns \"$2\" if more).",
+       "apihelp-query+userinfo-example-simple": "Get information about the current user",
+       "apihelp-query+userinfo-example-data": "Get additional information about the current user",
+
+       "apihelp-query+users-description": "Get information about a list of users.",
+       "apihelp-query+users-param-prop": "Which pieces of information to include:\n;blockinfo:Tags if the user is blocked, by whom, and for what reason.\n;groups:Lists all the groups each user belongs to.\n;implicitgroups:Lists all the groups a user is automatically a member of.\n;rights:Lists all the rights each user has.\n;editcount:Adds the user's edit count.\n;registration:Adds the user's registration timestamp.\n;emailable:Tags if the user can and wants to receive email through [[Special:Emailuser]].\n;gender:Tags the gender of the user. Returns \"male\", \"female\", or \"unknown\".",
+       "apihelp-query+users-param-users": "A list of users to obtain information for.",
+       "apihelp-query+users-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] instead.",
+       "apihelp-query+users-example-simple": "Return information for [[User:Example]]",
+
+       "apihelp-query+watchlist-description": "Get recent changes to pages in the logged in user's watchlist.",
+       "apihelp-query+watchlist-param-allrev": "Include multiple revisions of the same page within given timeframe.",
+       "apihelp-query+watchlist-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+watchlist-param-end": "The timestamp to end enumerating.",
+       "apihelp-query+watchlist-param-namespace": "Filter changes to only the given namespaces.",
+       "apihelp-query+watchlist-param-user": "Only list changes by this user.",
+       "apihelp-query+watchlist-param-excludeuser": "Don't list changes by this user.",
+       "apihelp-query+watchlist-param-limit": "How many total results to return per request.",
+       "apihelp-query+watchlist-param-prop": "Which additional items to get:\n;ids:Adds revision IDs and page IDs.\n;title:Adds title of the page.\n;flags:Adds flags for the edit.\n;user:Adds the user who made the edit.\n;userid:Adds user ID of whom made the edit.\n;comment:Adds comment of the edit.\n;parsedcomment:Adds parsed comment of the edit.\n;timestamp:Adds timestamp of the edit.\n;patrol:Tags edits that are patrolled.\n;sizes:Adds the old and new lengths of the page.\n;notificationtimestamp:Adds timestamp of when the user was last notified about the edit.\n;loginfo:Adds log information where appropriate.",
+       "apihelp-query+watchlist-param-show": "Show only items that meet these criteria. For example, to see only minor edits done by logged-in users, set $1show=minor|!anon.",
+       "apihelp-query+watchlist-param-type": "Which types of changes to show:\n;edit:Regular page edits.\n;external:External changes.\n;new:Page creations.\n;log:Log entries.",
+       "apihelp-query+watchlist-param-owner": "Used along with $1token to access a different user's watchlist.",
+       "apihelp-query+watchlist-param-token": "A security token (available in the user's [[Special:Preferences#mw-prefsection-watchlist|preferences]]) to allow access to another user's watchlist.",
+       "apihelp-query+watchlist-example-simple": "List the top revision for recently changed pages on the current user's watchlist",
+       "apihelp-query+watchlist-example-props": "Fetch additional information about the top revision for recently changed pages on the current user's watchlist",
+       "apihelp-query+watchlist-example-allrev": "Fetch information about all recent changes to pages on the current user's watchlist",
+       "apihelp-query+watchlist-example-generator": "Fetch page info for recently changed pages on the current user's watchlist",
+       "apihelp-query+watchlist-example-generator-rev": "Fetch revision info for recent changes to pages on the current user's watchlist",
+       "apihelp-query+watchlist-example-wlowner": "List the top revision for recently changed pages on [[User:Example]]'s watchlist",
+
+       "apihelp-query+watchlistraw-description": "Get all pages on the logged in user's watchlist.",
+       "apihelp-query+watchlistraw-param-namespace": "Only list pages in the given namespaces.",
+       "apihelp-query+watchlistraw-param-limit": "How many total results to return per request.",
+       "apihelp-query+watchlistraw-param-prop": "Which additional properties to get:\n;changed:Adds timestamp of when the user was last notified about the edit.",
+       "apihelp-query+watchlistraw-param-show": "Only list items that meet these criteria.",
+       "apihelp-query+watchlistraw-param-owner": "Used along with $1token to access a different user's watchlist.",
+       "apihelp-query+watchlistraw-param-token": "A security token (available in the user's [[Special:Preferences#mw-prefsection-watchlist|preferences]]) to allow access to another user's watchlist.",
+       "apihelp-query+watchlistraw-example-simple": "List pages on the current user's watchlist",
+       "apihelp-query+watchlistraw-example-generator": "Fetch page info for pages on the current user's watchlist",
+
+       "apihelp-revisiondelete-description": "Delete and undelete revisions.",
+       "apihelp-revisiondelete-param-type": "Type of revision deletion being performed.",
+       "apihelp-revisiondelete-param-target": "Page title for the revision deletion, if required for the type.",
+       "apihelp-revisiondelete-param-ids": "Identifiers for the revisions to be deleted.",
+       "apihelp-revisiondelete-param-hide": "What to hide for each revision.",
+       "apihelp-revisiondelete-param-show": "What to unhide for each revision.",
+       "apihelp-revisiondelete-param-suppress": "Whether to suppress data from administrators as well as others.",
+       "apihelp-revisiondelete-param-reason": "Reason for the deletion or undeletion.",
+       "apihelp-revisiondelete-example-revision": "Hide content for revision 12345 on the Main Page",
+       "apihelp-revisiondelete-example-log": "Hide all data on log entry 67890 with the reason \"BLP violation\"",
+
+       "apihelp-rollback-description": "Undo the last edit to the page.\n\nIf the last user who edited the page made multiple edits in a row, they will all be rolled back.",
+       "apihelp-rollback-param-title": "Title of the page you want to roll back. Cannot be used together with $1pageid.",
+       "apihelp-rollback-param-pageid": "Page ID of the page you want to roll back. Cannot be used together with $1title.",
+       "apihelp-rollback-param-user": "Name of the user whose edits are to be rolled back.",
+       "apihelp-rollback-param-summary": "Custom edit summary. If empty, default summary will be used.",
+       "apihelp-rollback-param-markbot": "Mark the reverted edits and the revert as bot edits.",
+       "apihelp-rollback-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-rollback-example-simple": "Roll back the last edits to [[Main Page]] by user Example",
+       "apihelp-rollback-example-summary": "Roll back the last edits to [[Main Page]] by IP user 192.0.2.5 with summary \"Reverting vandalism\", and mark those edits and the revert as \"bot\"",
+
+       "apihelp-rsd-description": "Export an RSD (Really Simple Discovery) schema.",
+       "apihelp-rsd-example-simple": "Export the RSD schema",
+
+       "apihelp-setnotificationtimestamp-description": "Update the notification timestamp for watched pages.\n\nThis affects the highlighting of changed pages in the watchlist and history, and the sending of email when the \"Email me when a page on my watchlist is changed\" preference is enabled.",
+       "apihelp-setnotificationtimestamp-param-entirewatchlist": "Work on all watched pages.",
+       "apihelp-setnotificationtimestamp-param-timestamp": "Timestamp to which to set the notification timestamp.",
+       "apihelp-setnotificationtimestamp-param-torevid": "Revision to set the notification timestamp to (one page only).",
+       "apihelp-setnotificationtimestamp-param-newerthanrevid": "Revision to set the notification timestamp newer than (one page only).",
+       "apihelp-setnotificationtimestamp-example-all": "Reset the notification status for the entire watchlist",
+       "apihelp-setnotificationtimestamp-example-page": "Reset the notification status for \"Main page\"",
+       "apihelp-setnotificationtimestamp-example-pagetimestamp": "Set the notification timestamp for \"Main page\" so all edits since 1 January 2012 are unviewed",
+       "apihelp-setnotificationtimestamp-example-allpages": "Reset the notification status for pages in the User namespace",
+
+       "apihelp-tokens-description": "Get tokens for data-modifying actions.\n\nThis module is deprecated in favor of [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-tokens-param-type": "Types of token to request.",
+       "apihelp-tokens-example-edit": "Retrieve an edit token (the default).",
+       "apihelp-tokens-example-emailmove": "Retrieve an email token and a move token.",
+
+       "apihelp-unblock-description": "Unblock a user.",
+       "apihelp-unblock-param-id": "ID of the block to unblock (obtained through list=blocks). Cannot be used together with $1user.",
+       "apihelp-unblock-param-user": "Username, IP address or IP range to unblock. Cannot be used together with $1id.",
+       "apihelp-unblock-param-reason": "Reason for unblock.",
+       "apihelp-unblock-example-id": "Unblock block ID #105",
+       "apihelp-unblock-example-user": "Unblock user Bob with reason \"Sorry Bob\"",
+
+       "apihelp-undelete-description": "Restore revisions of a deleted page.\n\nA list of deleted revisions (including timestamps) can be retrieved through [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], and a list of deleted file IDs can be retrieved through [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+       "apihelp-undelete-param-title": "Title of the page to restore.",
+       "apihelp-undelete-param-reason": "Reason for restoring.",
+       "apihelp-undelete-param-timestamps": "Timestamps of the revisions to restore. If both $1timestamps and $1fileids are empty, all will be restored.",
+       "apihelp-undelete-param-fileids": "IDs of the file revisions to restore. If both $1timestamps and $1fileids are empty, all will be restored.",
+       "apihelp-undelete-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-undelete-example-page": "Undelete [[Main Page]]",
+       "apihelp-undelete-example-revisions": "Undelete two revisions of [[Main Page]]",
+
+       "apihelp-upload-description": "Upload a file, or get the status of pending uploads.\n\nSeveral methods are available:\n* Upload file contents directly, using the \"$1file\" parameter.\n* Upload the file in pieces, using the \"$1filesize\", \"$1chunk\" and \"$1offset\" parameters.* Have the MediaWiki server fetch a file from a URL, using the \"$1url\" parameter.\n* Complete an earlier upload that failed due to warnings, using the \"$1filekey\" parameter.\nNote that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when sending the \"$1file\".",
+       "apihelp-upload-param-filename": "Target filename.",
+       "apihelp-upload-param-comment": "Upload comment. Also used as the initial page text for new files if \"$1text\" is not specified.",
+       "apihelp-upload-param-text": "Initial page text for new files.",
+       "apihelp-upload-param-watch": "Watch the page.",
+       "apihelp-upload-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-upload-param-ignorewarnings": "Ignore any warnings.",
+       "apihelp-upload-param-file": "File contents.",
+       "apihelp-upload-param-url": "URL to fetch the file from.",
+       "apihelp-upload-param-filekey": "Key that identifies a previous upload that was stashed temporarily.",
+       "apihelp-upload-param-sessionkey": "Same as $1filekey, maintained for backward compatibility.",
+       "apihelp-upload-param-stash": "If set, the server will not add the file to the repository and stash it temporarily.",
+       "apihelp-upload-param-filesize": "Filesize of entire upload.",
+       "apihelp-upload-param-offset": "Offset of chunk in bytes.",
+       "apihelp-upload-param-chunk": "Chunk contents.",
+       "apihelp-upload-param-async": "Make potentially large file operations asynchronous when possible.",
+       "apihelp-upload-param-asyncdownload": "Make fetching a URL asynchronous.",
+       "apihelp-upload-param-leavemessage": "If asyncdownload is used, leave a message on the user talk page if finished.",
+       "apihelp-upload-param-statuskey": "Fetch the upload status for this file key (upload by URL).",
+       "apihelp-upload-param-checkstatus": "Only fetch the upload status for the given file key.",
+       "apihelp-upload-example-url": "Upload from a URL",
+       "apihelp-upload-example-filekey": "Complete an upload that failed due to warnings",
+
+       "apihelp-userrights-description": "Change a user's group membership.",
+       "apihelp-userrights-param-user": "User name.",
+       "apihelp-userrights-param-userid": "User ID.",
+       "apihelp-userrights-param-add": "Add the user to these groups.",
+       "apihelp-userrights-param-remove": "Remove the user from these groups.",
+       "apihelp-userrights-param-reason": "Reason for the change.",
+       "apihelp-userrights-example-user": "Add user FooBot to group \"bot\", and remove from groups \"sysop\" and \"bureaucrat\"",
+       "apihelp-userrights-example-userid": "Add the user with ID 123 to group \"bot\", and remove from groups \"sysop\" and \"bureaucrat\"",
+
+       "apihelp-watch-description": "Add or remove pages from the current user's watchlist.",
+       "apihelp-watch-param-title": "The page to (un)watch. Use $1titles instead.",
+       "apihelp-watch-param-unwatch": "If set the page will be unwatched rather than watched.",
+       "apihelp-watch-example-watch": "Watch the page \"Main Page\"",
+       "apihelp-watch-example-unwatch": "Unwatch the page \"Main Page\"",
+       "apihelp-watch-example-generator": "Watch the first few pages in the main namespace",
+
+       "apihelp-format-example-generic": "Format the query result in the $1 format",
+       "apihelp-dbg-description": "Output data in PHP's var_export() format.",
+       "apihelp-dbgfm-description": "Output data in PHP's var_export() format (pretty-print in HTML).",
+       "apihelp-dump-description": "Output data in PHP's var_dump() format.",
+       "apihelp-dumpfm-description": "Output data in PHP's var_dump() format (pretty-print in HTML).",
+       "apihelp-json-description": "Output data in JSON format.",
+       "apihelp-json-param-callback": "If specified, wraps the output into a given function call. For safety, all user-specific data will be restricted.",
+       "apihelp-json-param-utf8": "If specified, encodes most (but not all) non-ASCII characters as UTF-8 instead of replacing them with hexadecimal escape sequences.",
+       "apihelp-jsonfm-description": "Output data in JSON format (pretty-print in HTML).",
+       "apihelp-none-description": "Output nothing.",
+       "apihelp-php-description": "Output data in serialized PHP format.",
+       "apihelp-phpfm-description": "Output data in serialized PHP format (pretty-print in HTML).",
+       "apihelp-rawfm-description": "Output data with the debugging elements in JSON format (pretty-print in HTML).",
+       "apihelp-txt-description": "Output data in PHP's print_r() format.",
+       "apihelp-txtfm-description": "Output data in PHP's print_r() format (pretty-print in HTML).",
+       "apihelp-wddx-description": "Output data in WDDX format.",
+       "apihelp-wddxfm-description": "Output data in WDDX format (pretty-print in HTML).",
+       "apihelp-xml-description": "Output data in XML format.",
+       "apihelp-xml-param-xslt": "If specified, adds &lt;xslt&gt; as stylesheet. This should be a wiki page in the MediaWiki namespace whose page name ends with \".xsl\".",
+       "apihelp-xml-param-includexmlnamespace": "If specified, adds an XML namespace.",
+       "apihelp-xmlfm-description": "Output data in XML format (pretty-print in HTML).",
+       "apihelp-yaml-description": "Output data in YAML format.",
+       "apihelp-yamlfm-description": "Output data in YAML format (pretty-print in HTML).",
+
+       "api-format-title": "MediaWiki API result",
+       "api-format-prettyprint-header": "You are looking at the HTML representation of the $1 format. HTML is good for debugging, but is unsuitable for application use.\n\nSpecify the format parameter to change the output format. To see the non-HTML representation of the $1 format, set format=$2.\n\nSee the [https://www.mediawiki.org/wiki/API complete documentation], or [[Special:ApiHelp/main|API help]] for more information.",
+
+       "api-orm-param-props": "Fields to query.",
+       "api-orm-param-limit": "Max amount of rows to return.",
+
+       "api-pageset-param-titles": "A list of titles to work on.",
+       "api-pageset-param-pageids": "A list of page IDs to work on.",
+       "api-pageset-param-revids": "A list of revision IDs to work on.",
+       "api-pageset-param-generator": "Get the list of pages to work on by executing the specified query module.\n\n'''NOTE:''' generator parameter names must be prefixed with a \"g\", see examples.",
+       "api-pageset-param-redirects-generator": "Automatically resolve redirects in $1titles, $1pageids, and $1revids, and in pages returned by $1generator.",
+       "api-pageset-param-redirects-nogenerator": "Automatically resolve redirects in $1titles, $1pageids, and $1revids.",
+       "api-pageset-param-converttitles": "Convert titles to other variants if necessary. Only works if the wiki's content language supports variant conversion. Languages that support variant conversion include $1.",
+
+       "api-help-title": "MediaWiki API help",
+       "api-help-lead": "This is an auto-generated MediaWiki API documentation page.\n\nDocumentation and examples: https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "Main module",
+       "api-help-fallback-description": "$1",
+       "api-help-fallback-parameter": "$1",
+       "api-help-fallback-example": "$1",
+       "api-help-flags": "",
+       "api-help-flag-deprecated": "This module is deprecated.",
+       "api-help-flag-internal": "<strong>This module is internal or unstable.</strong> Its operation may change without notice.",
+       "api-help-flag-readrights": "This module requires read rights.",
+       "api-help-flag-writerights": "This module requires write rights.",
+       "api-help-flag-mustbeposted": "This module only accepts POST requests.",
+       "api-help-flag-generator": "This module can be used as a generator.",
+       "api-help-help-urls": "",
+       "api-help-parameters": "{{PLURAL:$1|Parameter|Parameters}}:",
+       "api-help-param-deprecated": "Deprecated.",
+       "api-help-param-required": "This parameter is required.",
+       "api-help-param-list": "{{PLURAL:$1|1=One value|2=Values (separate with \"{{!}}\")}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Must be empty|Can be empty, or $2}}",
+       "api-help-param-limit": "No more than $1 allowed.",
+       "api-help-param-limit2": "No more than $1 ($2 for bots) allowed.",
+       "api-help-param-integer-min": "The {{PLURAL:$1|1=value|2=values}} must be no less than $2.",
+       "api-help-param-integer-max": "The {{PLURAL:$1|1=value|2=values}} must be no greater than $3.",
+       "api-help-param-integer-minmax": "The {{PLURAL:$1|1=value|2=values}} must be between $2 and $3.",
+       "api-help-param-upload": "Must be posted as a file upload using multipart/form-data.",
+       "api-help-param-multi-separate": "Separate values with \"|\".",
+       "api-help-param-multi-max": "Maximum number of values is {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} for bots).",
+       "api-help-param-default": "Default: $1",
+       "api-help-param-default-empty": "Default: <span class=\"apihelp-empty\">(empty)</span>",
+       "api-help-param-token": "A \"$1\" token retrieved from [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+       "api-help-param-token-webui": "For compatibility, the token used in the web UI is also accepted.",
+       "api-help-param-disabled-in-miser-mode": "Disabled due to [https://www.mediawiki.org/wiki/Manual:$wgMiserMode miser mode].",
+       "api-help-param-limited-in-miser-mode": "'''NOTE:''' Due to [https://www.mediawiki.org/wiki/Manual:$wgMiserMode miser mode], using this may result in fewer than \"$1limit\" results returned before continuing; in extreme cases, zero results may be returned.",
+       "api-help-param-direction": "In which direction to enumerate:\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.",
+       "api-help-param-continue": "When more results are available, use this to continue.",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(no description)</span>",
+       "api-help-examples": "{{PLURAL:$1|Example|Examples}}:",
+       "api-help-permissions": "{{PLURAL:$1|Permission|Permissions}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Granted to}}: $2",
+       "api-help-right-apihighlimits": "Use higher limits in API queries (slow queries: $1; fast queries: $2). The limits for slow queries also apply to multivalue parameters.",
+
+       "api-credits-header": "Credits",
+       "api-credits": "API developers:\n* Roan Kattouw (lead developer Sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (creator, lead developer Sep 2006–Sep 2007)\n* Brad Jorsch (lead developer 2013–present)\n\nPlease send your comments, suggestions and questions to mediawiki-api@lists.wikimedia.org\nor file a bug report at https://bugzilla.wikimedia.org/."
+}
diff --git a/includes/api/i18n/es.json b/includes/api/i18n/es.json
new file mode 100644 (file)
index 0000000..ebd5f1d
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Macofe",
+                       "Effy"
+               ]
+       },
+       "apihelp-block-description": "Bloquear usuario",
+       "apihelp-compare-param-fromtitle": "Primer título para comparar",
+       "apihelp-createaccount-description": "Crear una nueva cuenta de usuario.",
+       "apihelp-createaccount-param-name": "Nombre de usuario.",
+       "apihelp-delete-param-watch": "Añadir esta página a su lista de seguimiento",
+       "apihelp-delete-param-unwatch": "Borrar esta página de su lista de seguimiento",
+       "apihelp-edit-description": "Crear y editar páginas.",
+       "apihelp-expandtemplates-param-title": "Título de la página.",
+       "apihelp-feedrecentchanges-param-hideminor": "Ocultar cambios menores.",
+       "apihelp-query+allusers-param-activeusers": "Solo listar usuarios activos en {{PLURAL:$1|el último día|los $1 últimos días}}.",
+       "apihelp-query+images-description": "Devuelve todos los archivos contenidos en las páginas dadas.",
+       "apihelp-query+search-param-info": "Qué metadatos devolver.",
+       "apihelp-query+userinfo-description": "Obtener información sobre el usuario actual.",
+       "apihelp-query+watchlist-param-excludeuser": "No listar cambios de este usuario.",
+       "apihelp-query+watchlistraw-param-show": "Sólo listar los elementos que cumplen estos criterios."
+}
diff --git a/includes/api/i18n/fa.json b/includes/api/i18n/fa.json
new file mode 100644 (file)
index 0000000..265397f
--- /dev/null
@@ -0,0 +1,215 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Alirezaaa",
+                       "Arash.pt",
+                       "Fatemi127",
+                       "Reza1615",
+                       "KhabarNegar",
+                       "Sahehco"
+               ]
+       },
+       "apihelp-main-param-action": "کدام عملیات را انجام دهد.",
+       "apihelp-main-param-format": "فرمت خروجی.",
+       "apihelp-main-param-curtimestamp": "برچسب زمان کنونی را در نتیجه قرار دهید.",
+       "apihelp-block-description": "بستن کاربر",
+       "apihelp-block-param-user": "نام کاربری، آدرس آی پی یا محدوده آی پی موردنظر شما برای بستن.",
+       "apihelp-block-param-reason": "دلیل بسته‌شدن",
+       "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-allowusertalk": "به کاربر برای ویرایش صفحه بحث‌شان اجازه دهید (بسته به $wgBlockAllowsUTEdit).",
+       "apihelp-block-param-reblock": "اگر کاربر پیش از این مسدود شده‌است، مسدود موجود را بازنویسی کن.",
+       "apihelp-block-param-watchuser": "صفحه‌های کاربر و بحث کاربر نشانی آی‌پی یا کاربر را پی‌گیری کنید.",
+       "apihelp-block-example-ip-simple": "آی‌پی ۱۹۲.۰.۲.۵ را برای سه روز همراه دلیل «نخستین برخورد» ببندید",
+       "apihelp-clearhasmsg-description": "پرچم hasmsg را برای کاربر جاری پاک کن.",
+       "apihelp-clearhasmsg-example-1": "پاک‌کردن پرچم hasmsg برای کاربر جاری",
+       "apihelp-compare-description": "تفاوت بین ۲ صفحه را بیابید.\n\nشما باید یک شماره بازبینی، یک عنوان صفحه، یا یک شناسه صفحه برای هر دو «از» و «به» مشخص کنید.",
+       "apihelp-compare-param-fromtitle": "عنوان اول برای مقایسه.",
+       "apihelp-compare-param-fromid": "شناسه صفحه اول برای مقایسه.",
+       "apihelp-compare-param-fromrev": "نسخه اول برای مقایسه.",
+       "apihelp-compare-param-totitle": "عنوان دوم برای مقایسه.",
+       "apihelp-compare-param-toid": "شناسه صفحه دوم برای مقایسه.",
+       "apihelp-compare-param-torev": "نسخه دوم برای مقایسه.",
+       "apihelp-compare-example-1": "ایجاد تفاوت بین نسخه 1 و 2",
+       "apihelp-createaccount-description": "ایجاد حساب کاربری",
+       "apihelp-createaccount-param-name": "نام کاربری.",
+       "apihelp-createaccount-param-password": "رمز عبور (نادیده گرفته می‌شود اگر $1mailpassword تنظیم شده‌باشد).",
+       "apihelp-createaccount-param-domain": "دامنه برای احراز هویت خارجی (اختیاری).",
+       "apihelp-createaccount-param-email": "رایانامه کاربر (اختیاری)",
+       "apihelp-createaccount-param-realname": "نام واقعی کاربر (اختیاری).",
+       "apihelp-createaccount-param-mailpassword": "اگر به هر مقداری تنظیم شود، یک رمز عبور تصادفی به کاربر ایمیل خواهد شد.",
+       "apihelp-createaccount-param-reason": "دلیل اختیاری برای ایجاد حساب کاربری جهت قرارگرفتن در سیاهه‌ها.",
+       "apihelp-createaccount-example-pass": "ایجاد کاربر «testuser» همراه رمز عبور «test123»",
+       "apihelp-createaccount-example-mail": "ایجاد کاربر «testmailuser» و ایمیل‌کردن یک رمز عبور تصادفی ساخته‌شده",
+       "apihelp-delete-description": "حذف صفحه",
+       "apihelp-delete-param-title": "عنوان صفحه‌ای که قصد حذفش را دارید. نمی‌تواند در کنار $1pageid استفاده شود.",
+       "apihelp-delete-param-pageid": "شناسه صفحه‌ای که قصد حذفش را دارید. نمی‌تواند در کنار $1title استفاده شود.",
+       "apihelp-delete-param-reason": "دلیل برای حذف. اگر تنظیم نشود، یک دلیل خودکار ساخته‌شده استفاده می‌شود.",
+       "apihelp-delete-param-watch": "افزودن صفحه به فهرست پی‌گیری شما",
+       "apihelp-delete-param-unwatch": "صفحه را از پی‌گیری‌تان حذف کنید.",
+       "apihelp-delete-example-simple": "حذف صفحه اصلی",
+       "apihelp-delete-example-reason": "حذف صفحهٔ اصلی همراه دلیل «آماده برای انتقال»",
+       "apihelp-disabled-description": "این پودمان غیرفعال شده است.",
+       "apihelp-edit-description": "ایجاد و ویرایش صفحه",
+       "apihelp-edit-param-title": "عنوان صفحه‌ای که قصد ویرایشش را دارید. نمی‌تواند در کنار $1pageid استفاده شود.",
+       "apihelp-edit-param-pageid": "شناسه صفحهٔ صفحه‌ای که می‌خواهید ویرایشش کنید. نمی‌تواند در کنار $1title استفاده شود.",
+       "apihelp-edit-param-section": "شماره بخش. ۰ برای بخش بالا، «تازه» برای یک بخش تازه.",
+       "apihelp-edit-param-sectiontitle": "عنوان برای بخش جدید.",
+       "apihelp-edit-param-text": "محتوای صفحه.",
+       "apihelp-edit-param-summary": "خلاصه را ویرایش کنید. همچنین عنوان بخش را زمانی که $1section=تازه و $1sectiontitle تنظیم نشده‌است.",
+       "apihelp-edit-param-minor": "ویرایش جزئی.",
+       "apihelp-edit-param-notminor": "ویرایش غیر جزئی.",
+       "apihelp-edit-param-bot": "علامت زدن این ویرایش به عنوان ویرایش ربات.",
+       "apihelp-edit-param-createonly": "اگر صفحه موجود بود، ویرایش نکن.",
+       "apihelp-edit-param-nocreate": "رها کردن خطا در صورتی که صفحه وجود ندارد.",
+       "apihelp-edit-param-watch": "افزودن صفحه به فهرست پی‌گیری شما",
+       "apihelp-edit-param-unwatch": "حذف صفحه از فهرست پی‌گیری شما",
+       "apihelp-edit-param-prependtext": "این متن را به ابتدای صفحه اضافه کنید. $1text را لغو می‌کند.",
+       "apihelp-edit-param-undo": "این بازبینی را برگردانید. $1text، $1prependtext و $1appendtext را باطل می‌کند.",
+       "apihelp-edit-param-undoafter": "همه بازبینی‌ها را از $1undo تا این یکی برگردانید. اگر تنظیم نشد، فقط یک بازبینی را برگردانید.",
+       "apihelp-edit-param-redirect": "اصلاح خودکار تغییرمسیرها.",
+       "apihelp-edit-example-edit": "ویرایش صفحه",
+       "apihelp-emailuser-description": "ایمیل به کاربر",
+       "apihelp-emailuser-param-target": "کاربر برای ارسال رایانامه.",
+       "apihelp-emailuser-param-subject": "موضوع هدر.",
+       "apihelp-emailuser-param-text": "متن رایانه.",
+       "apihelp-emailuser-param-ccme": "ارسال یک نسخه از رایانه به شما.",
+       "apihelp-expandtemplates-description": "گسترش همه الگوها در ویکی نبشته",
+       "apihelp-expandtemplates-param-title": "عنوان صفحه",
+       "apihelp-expandtemplates-param-text": "تبدیل برای ویکی‌متن.",
+       "apihelp-feedcontributions-description": "خوراک مشارکت‌های یک کاربر را برمی‌گرداند.",
+       "apihelp-feedcontributions-param-feedformat": "فرمت خوراک.",
+       "apihelp-feedcontributions-param-namespace": "فیلتر شدن مشارکتها براساس فضای نام.",
+       "apihelp-feedcontributions-param-year": "از سال (و پیش از آن).",
+       "apihelp-feedcontributions-param-month": "از ماه (و پیش از آن).",
+       "apihelp-feedcontributions-param-tagfilter": "فیلتر کردن مشارکتها براساس این برچسب‌ها.",
+       "apihelp-feedcontributions-param-deletedonly": "فقط مشارکت‌های حذف شده نمایش داده شود.",
+       "apihelp-feedcontributions-param-toponly": "فقط ویرایش‌هایی که آخرین نسخه‌اند نمایش داده شود.",
+       "apihelp-feedcontributions-param-newonly": "فقط نمایش ویرایش‌هایی که تولید‌های صفحه هستند.",
+       "apihelp-feedcontributions-param-showsizediff": "نمایش تفاوت حجم تغییرات بین نسخه‌ها.",
+       "apihelp-feedcontributions-example-simple": "مشارکت‌های [[کاربر:نمونه]] را برگردان",
+       "apihelp-feedrecentchanges-description": "خوراک تغییرات اخیر را برمی‌گرداند.",
+       "apihelp-feedrecentchanges-param-feedformat": "فرمت خوراک.",
+       "apihelp-feedrecentchanges-param-namespace": "فضای نام برای محدودکردن نتایج به.",
+       "apihelp-feedrecentchanges-param-invert": "همهٔ فضاهای نام به جز انتخاب‌شده‌ها.",
+       "apihelp-feedrecentchanges-param-associated": "فضای نام مرتبط (بحث یا اصلی) را شامل می‌شود.",
+       "apihelp-feedrecentchanges-param-days": "روز برای محدود کردن نتایج.",
+       "apihelp-feedrecentchanges-param-limit": "حداکثر تعداد نتایج خروجی.",
+       "apihelp-feedrecentchanges-param-from": "نمایش تغییرات پس از آن.",
+       "apihelp-feedrecentchanges-param-hideminor": "پنهان کردن تغییرات جزئی.",
+       "apihelp-feedrecentchanges-param-hidebots": "پنهان کردن تغییرات انجام شده توسط ربات‌ها.",
+       "apihelp-feedrecentchanges-param-hideanons": "پنهان کردن ویرایش‌های کاربران ناشناس.",
+       "apihelp-feedrecentchanges-param-hideliu": "پنهان کردن ویرایش‌های کاربران ثبت‌نام کرده.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "پنهان کردن ویرایش گشت‌زن‌ها.",
+       "apihelp-feedrecentchanges-param-hidemyself": "پنهان کردن ویرایش‌های خودتان.",
+       "apihelp-feedrecentchanges-param-tagfilter": "فیلتر کردن براساس برچسب",
+       "apihelp-feedrecentchanges-param-target": "فقط نمایش ویرایش‌هایی که پیوند دارند به این صفحه.",
+       "apihelp-feedrecentchanges-param-showlinkedto": "نمایش ویرایش‌ها بر روی صفحات پیوند داده شده به صفحات انتخاب شده.",
+       "apihelp-feedrecentchanges-example-simple": "نمایش تغییرات اخیر",
+       "apihelp-feedrecentchanges-example-30days": "نمایش تغییرات اخیر در 30 روز اخیر",
+       "apihelp-feedwatchlist-description": "برگرداندن فهرست پیگیری‌های خوراک.",
+       "apihelp-feedwatchlist-param-feedformat": "فرمت خوراک.",
+       "apihelp-feedwatchlist-param-linktosections": "اگر ممکن است به طور مستقیم به بخش‌های تغییریافته پیوند دهید.",
+       "apihelp-feedwatchlist-example-default": "نمایش خوراک فهرست پی‌گیری",
+       "apihelp-feedwatchlist-example-all6hrs": "همهٔ تغییرات ۶ ساعت گذشته در صفحه‌های پی‌گیری را نمایش دهید",
+       "apihelp-filerevert-description": "واگردانی فایل به یک نسخه قدیمی",
+       "apihelp-filerevert-param-filename": "نام پروندهٔ مقصد، بدون پیشوند پرونده:.",
+       "apihelp-filerevert-param-comment": "ارسال دیدگاه.",
+       "apihelp-filerevert-param-archivename": "نام بایگانی بازبینی برای برگرداندن.",
+       "apihelp-filerevert-example-revert": "برگرداندن Wiki.png به نسخهٔ 2011-03-05T15:27:40Z",
+       "apihelp-help-description": "راهنما برای پودمان‌های مشخص‌شده را نمایش دهید.",
+       "apihelp-help-param-helpformat": "قالب‌بندی خروجی راهنما.",
+       "apihelp-help-example-main": "راهنما برای پودمان اصلی",
+       "apihelp-help-example-recursive": "همهٔ راهنما در یک صفحه",
+       "apihelp-help-example-help": "راهنما برای خود ماژول راهنما",
+       "apihelp-help-example-query": "راهنما برای دو زیر پودمان کوئری",
+       "apihelp-imagerotate-description": "چرخاندن یک یا چند تصویر",
+       "apihelp-imagerotate-param-rotation": "درجه برای چرخاندن تصویر در جهت ساعت‌گرد.",
+       "apihelp-imagerotate-example-simple": "چرخاندن ۹۰ درجه برای [[:File:Example.png]]",
+       "apihelp-imagerotate-example-generator": "چرخاندن ۱۸۰ درجه برای همهٔ تصاویر موجود در [[:Category:Flip]]",
+       "apihelp-import-param-summary": "خلاصه درون‌ریزی.",
+       "apihelp-import-param-xml": "پرونده XML بارگذاری شد.",
+       "apihelp-import-param-interwikisource": "برای درون‌ریز میان‌ویکی: ویکی برای درون‌ریزی از.",
+       "apihelp-import-param-interwikipage": "برای درون‌ریز میان‌ویکی: صفحه برای درون‌ریزی.",
+       "apihelp-import-param-fullhistory": "برای درون‌ریزی میان‌ویکی: درون‌ریزی تاریخچهٔ کامل، نه فقط نسخهٔ موجود.",
+       "apihelp-import-param-templates": "برای درون ریزی میان‌ویکی: همچنین درون‌ریزی الگوهای مورد استفاده.",
+       "apihelp-import-param-namespace": "برای درون‌ریزی میان‌ویکی: درون‌ریزی به این فضای نام.",
+       "apihelp-import-param-rootpage": "درون‌ریزی به عنوان زیر صفحهٔ این صفحه.",
+       "apihelp-login-param-name": "نام کاربری.",
+       "apihelp-login-param-password": "گذرواژه.",
+       "apihelp-login-param-domain": "دامنه (اختیاری)",
+       "apihelp-login-example-gettoken": "دریافت توکن ورود",
+       "apihelp-login-example-login": "ورود",
+       "apihelp-logout-description": "خروج به همراه پاک نمودن اطلاعات این نشست",
+       "apihelp-logout-example-logout": "خروج کاربر فعلی",
+       "apihelp-move-description": "انتقال صفحه",
+       "apihelp-move-param-to": "عنوانی که شما قصد دارید صفحه را به آن نام تغییر دهید.",
+       "apihelp-move-param-reason": "دلیل انتقال",
+       "apihelp-move-param-movetalk": "انتقال صفحهٔ بحث اگر وجود دارد.",
+       "apihelp-move-param-movesubpages": "انتقال زیر صفحه‌ها اگر امکان‌پذیر است.",
+       "apihelp-move-param-noredirect": "عدم ساخت تغییرمسیر.",
+       "apihelp-move-param-ignorewarnings": "چشم‌پوشی از همهٔ هشدارها.",
+       "apihelp-opensearch-param-search": "جستجوی رشته.",
+       "apihelp-opensearch-param-limit": "حداکثر تعداد نتایج برای بازگرداندن.",
+       "apihelp-opensearch-param-namespace": "فضاهای نامی برای جستجو",
+       "apihelp-opensearch-param-format": "فرمت خروجی.",
+       "apihelp-opensearch-example-te": "یافتن صفحه‌هایی که با «ته» آغاز می‌شوند",
+       "apihelp-options-example-reset": "بازنشانی همه تنظیمات.",
+       "apihelp-parse-example-page": "تجزیه یک صفحه.",
+       "apihelp-parse-example-text": "تجزیه متن ویکی.",
+       "apihelp-parse-example-summary": "تجزیه خلاصه.",
+       "apihelp-patrol-description": "گشت‌زنی یک صفحه یا نسخهٔ ویرایشی.",
+       "apihelp-patrol-example-rcid": "گشت‌زنی یک تغییر اخیر",
+       "apihelp-patrol-example-revid": "گشت‌زدن یک نسخه",
+       "apihelp-protect-description": "تغییر سطح محافظت صفحه",
+       "apihelp-protect-param-reason": "دلیل برای (عدم) حفاظت.",
+       "apihelp-protect-example-protect": "محافظت از صفحه",
+       "apihelp-protect-example-unprotect": "خارج ساختن صفحه از حفاظت با تغییر سطح حفاظتی به \"همگان\"",
+       "apihelp-protect-example-unprotect2": "خارج ساختن صفحه از حفاظت با قراردادن هیچ‌گونه محدودیت‌حفاظتی",
+       "apihelp-purge-param-forcelinkupdate": "به‌روزرسانی جداول پیوندها.",
+       "apihelp-query+allfileusages-param-limit": "تعداد آیتم‌ها برای بازگرداندن.",
+       "apihelp-query+allfileusages-param-dir": "جهتی که باید فهرست شود.",
+       "apihelp-query+allfileusages-example-unique": "فهرست پرونده‌های با عنوان یکتا",
+       "apihelp-query+allfileusages-example-unique-generator": "گرفتن عنوان همهٔ پرونده‌ها، برچسب زدن موارد گم شده",
+       "apihelp-query+allfileusages-example-generator": "گرفتن صفحاتی که دارای پرونده هستند",
+       "apihelp-query+allimages-description": "متوالی شمردن همهٔ تصاویر.",
+       "apihelp-query+allimages-param-sort": "خصوصیت برای مرتب‌سازی بر پایه آن",
+       "apihelp-query+allimages-param-dir": "جهتی که باید فهرست شود.",
+       "apihelp-query+allimages-param-minsize": "محدودکردن به صفحه‌هایی که دست کم این تعداد بایت دارند.",
+       "apihelp-query+allimages-param-maxsize": "محدودکردن به صفحه‌هایی که حداکثر این تعداد بایت دارند.",
+       "apihelp-query+alllinks-param-namespace": "فضای نامی که باید شمرده شود.",
+       "apihelp-query+alllinks-param-limit": "تعداد آیتم‌ها برای بازگرداندن.",
+       "apihelp-query+alllinks-param-dir": "جهتی که باید فهرست شود.",
+       "apihelp-query+allpages-param-filterredir": "صفحه‌هایی که باید فهرست شوند.",
+       "apihelp-query+allpages-param-minsize": "محدودکردن به صفحه‌هایی که همراه دست کم این تعداد بایت است.",
+       "apihelp-query+allredirects-param-limit": "تعداد آیتم‌ها برای بازگرداندن.",
+       "apihelp-query+categorymembers-description": "فهرست‌کردن همهٔ صفحه‌ها در یک ردهٔ مشخص‌شده.",
+       "apihelp-query+categorymembers-param-startsortkey": "جایش از $1starthexsortkey استفاده کنید.",
+       "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-limit": "تعداد صفحه‌ها برای بازگرداندن.",
+       "apihelp-query+linkshere-param-limit": "تعداد برای بازگرداندن.",
+       "apihelp-query+logevents-description": "دریافت رویدادها از سیاهه‌ها.",
+       "apihelp-query+protectedtitles-param-namespace": "فقط عنوان‌ها در این فضاهای نام را فهرست کنید.",
+       "apihelp-query+protectedtitles-param-level": "فقط عنوان‌ها در این سطح‌های حفاظت را فهرست کنید.",
+       "apihelp-query+protectedtitles-param-limit": "تعداد صفحه‌ها برای بازگرداندن.",
+       "apihelp-query+protectedtitles-param-start": "آغاز فهرست‌کردن از این برچسب زمانی حفاظت.",
+       "apihelp-query+protectedtitles-param-end": "متوقف‌کردن فهرست‌کردن در این برچسب زمانی حفاظت.",
+       "apihelp-query+random-param-namespace": "بازگرداندن صفحه‌های فقط در این فضاهای نام.",
+       "apihelp-query+random-param-limit": "محدود کنید چه تعداد صفحه بازگردانده خواهد شد.",
+       "apihelp-query+random-param-redirect": "یک تغییرمسیر تصادفی جای یک صفحه تصادفی بارگیری کنید.",
+       "apihelp-query+random-example-simple": "بازگرداندن تو صفحهٔ تصادفی از فضای نام اصلی",
+       "apihelp-query+random-example-generator": "بازگرداندن اطلاعات صفحه دربارهٔ دو صفحهٔ تصادفی از فضای نام اصلی",
+       "apihelp-query+recentchanges-param-start": "برچسب زمانی برای آغاز شمارش از.",
+       "apihelp-query+recentchanges-param-end": "برچسب زمانی برای پایان شمارش.",
+       "apihelp-query+redirects-param-limit": "تعداد تغییرمسیرها برای بازگرداندن.",
+       "apihelp-upload-param-ignorewarnings": "چشم‌پوشی از همهٔ هشدارها.",
+       "apihelp-userrights-param-user": "نام کاربری.",
+       "api-help-param-deprecated": "توصیه.",
+       "api-credits-header": "اعتبار"
+}
diff --git a/includes/api/i18n/fr.json b/includes/api/i18n/fr.json
new file mode 100644 (file)
index 0000000..2077c85
--- /dev/null
@@ -0,0 +1,651 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Gomoko",
+                       "Windes"
+               ]
+       },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page Documentation]\n* [https://www.mediawiki.org/wiki/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://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts 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>Demandes erronées :</strong> Qaund des demandes erronés sont envoyées à l’API, un entête HTTP sera renvoyé avec la clé « MediaWiki-API-Error » et à la fois la valeur de l’entête et le code d’erreur retourné prendront la même valeur. Pour plus d’information, voyez https://www.mediawiki.org/wiki/API:Errors_and_warnings.",
+       "apihelp-main-param-action": "Quelle action effectuer.",
+       "apihelp-main-param-format": "Le format de sortie.",
+       "apihelp-main-param-maxlag": "La latence maximale peut être utilisée quand MédiaWiki est installé sur un cluster de base de données répliqué. Pour éviter des actions provoquant un supplément de latence de réplication de site, ce paramètre peut faire attendre le client jusqu’à ce que la latence de réplication soit inférieure à une valeur spécifiée. En cas de latence excessive, le code d’erreur « maxlag » est renvoyé avec un message tel que « Attente de $host : $lag secondes de délai ».<br />Voyez https://www.mediawiki.org/wiki/Manual:Maxlag_parameter pour plus d’information.",
+       "apihelp-main-param-smaxage": "Fixer l’entête s-maxage à ce nombre de secondes. Les erreurs ne sont jamais mises en cache.",
+       "apihelp-main-param-maxage": "Fixer l’entête max-age à ce nombre de secondes. Les erreurs ne sont jamais mises en cache.",
+       "apihelp-main-param-assert": "Vérifier si l’utilisateur est connecté si positionné à « user », ou a le droit utilisateur robot si positionné à « bot ».",
+       "apihelp-main-param-requestid": "Toute valeur fournie ici sera incluse dans la réponse. Peut être utilisé pour distinguer des demandes.",
+       "apihelp-main-param-servedby": "Inclure le nom d’hôte qui a renvoyé la requête dans les résultats.",
+       "apihelp-main-param-curtimestamp": "Inclure l’horodatage actuel dans le résultat.",
+       "apihelp-main-param-origin": "En accédant à l’API en utilisant une requête AJAX inter-domaines (CORS), mettre le domaine d’origine dans ce paramètre. Il doit être inclus dans toute requête de pre-flight, et ne doit donc pas faire partie de l’URI de la requête (ni du corps du POST). Il doit correspondre exactement à une des origines dans l’entête Origin: header, donc il doit être fixé avec quelque chose comme http://en.wikipedia.org or https://meta.wikimedia.org. Si ce paramètre ne correspond pas à l’entête Origin:, une réponse 403 sera renvoyée. Si ce paramètre correspond à l’entête Origin: et que l’origine est en liste blanche, un entête Access-Control-Allow-Origin sera positionné.",
+       "apihelp-main-param-uselang": "Langue à utiliser pour les traductions de message. Une liste de codes peut être analysée depuis [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]] avec siprop=languages, ou en spécifiant « user » pour utiliser la préférence de langue de l’utilisateur actuel, ou en spécifiant « content » pour utiliser le langage du contenu de ce wiki.",
+       "apihelp-block-description": "Bloquer un utilisateur.",
+       "apihelp-block-param-user": "Nom d’utilisateur, adresse IP ou plage d’adresses IP que vous voulez bloquer.",
+       "apihelp-block-param-expiry": "Durée d’expiration. Peut être relative (par ex. « 5 mois » ou « 2 semaines ») ou absolue (par ex. « 2014-09-18T12:34:56Z »). Si elle est mise à « infinite », « indefinite » ou « never », le blocage n’expirera jamais.",
+       "apihelp-block-param-reason": "Motif du blocage.",
+       "apihelp-block-param-anononly": "Bloquer uniquement les utilisateurs anonymes (c’est-à-dire désactiver les modifications anonymes pour cette adresse IP).",
+       "apihelp-block-param-nocreate": "Empêcher la création de compte.",
+       "apihelp-block-param-autoblock": "Bloquer automatiquement la dernière adresse IP utilisée, et toute les adresses IP subséquentes depuis lesquelles ils ont essayé de se connecter.",
+       "apihelp-block-param-noemail": "Empêcher l’utilisateur d’envoyer des courriels via le wiki (nécessite le doit « blockemail »).",
+       "apihelp-block-param-hidename": "Masque le nom de l’utilisateur dans le journal des blocages (nécessite le droit « hideuser »).",
+       "apihelp-block-param-allowusertalk": "Autoriser les utilisateurs à modifier leur propre page de discussion (dépend de $wgBlockAllowsUTEdit).",
+       "apihelp-block-param-reblock": "Si l’utilisateur est déjà bloqué, écraser le blocage existant.",
+       "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 192.0.2.5 pour trois jours avec le motif « Premier avertissement ».",
+       "apihelp-block-example-user-complex": "Bloquer indéfiniment l’utilisateur Vandale avec le motif « Vandalisme », et empêcher la création de nouveau compte et de courriel",
+       "apihelp-clearhasmsg-description": "Efface le drapeau hasmsg pour l’utilisateur courant.",
+       "apihelp-clearhasmsg-example-1": "Effacer le drapeau hasmsg 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 ».",
+       "apihelp-compare-param-fromtitle": "Premier titre à comparer.",
+       "apihelp-compare-param-fromid": "ID de la première page à comparer.",
+       "apihelp-compare-param-fromrev": "Première révision à comparer.",
+       "apihelp-compare-param-totitle": "Second titre à comparer.",
+       "apihelp-compare-param-toid": "ID de la seconde page à comparer.",
+       "apihelp-compare-param-torev": "Seconde révision à comparer.",
+       "apihelp-compare-example-1": "Créer une différence entre les révisions 1 et 2",
+       "apihelp-createaccount-description": "Créer un nouveau compte utilisateur.",
+       "apihelp-createaccount-param-name": "Nom d’utilisateur.",
+       "apihelp-createaccount-param-password": "Mot de passe (ignoré si $1mailpassword est défini).",
+       "apihelp-createaccount-param-domain": "Domaine pour l’authentification externe (facultatif).",
+       "apihelp-createaccount-param-token": "Jeton de création de compte obtenu à la première requête.",
+       "apihelp-createaccount-param-email": "Adresse de courriel de l’utilisateur (facultatif).",
+       "apihelp-createaccount-param-realname": "Vrai nom de l’utilisateur (facultatif).",
+       "apihelp-createaccount-param-mailpassword": "S’il est fixé à une valeur quelconque, un mot de passe aléatoire sera envoyé par courriel à l’utilisateur.",
+       "apihelp-createaccount-param-reason": "Motif facultatif de création du compte à mettre dans les journaux.",
+       "apihelp-createaccount-param-language": "Code de langue à mettre par défaut pour l’utilisateur (facultatif, par défaut langue du contenu).",
+       "apihelp-createaccount-example-pass": "Créer l’utilisateur « testuser » avec le mot de passe « test123 »",
+       "apihelp-createaccount-example-mail": "Créer l’utilisateur « testmailuser » et envoyer par courriel un mot de passe généré aléatoirement",
+       "apihelp-delete-description": "Supprimer une page.",
+       "apihelp-delete-param-title": "Titre de la page que vous voulez supprimer. Impossible de l’utiliser avec $1pageid.",
+       "apihelp-delete-param-pageid": "ID de la page que vous voulez supprimer. Impossible à utiliser avec $1title.",
+       "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 à votre liste de suivi.",
+       "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-unwatch": "Supprimer la page de votre liste de suivi.",
+       "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 la Page principale",
+       "apihelp-delete-example-reason": "Supprimer la Page principale avec le motif « Préparation au déplacement »",
+       "apihelp-disabled-description": "Ce module a été désactivé.",
+       "apihelp-edit-description": "Créer et modifier les pages.",
+       "apihelp-edit-param-title": "Titre de la page que vous voulez modifier. Impossible de l’utiliser avec $1pageid.",
+       "apihelp-edit-param-pageid": "ID de la page que vous voulez modifier. Impossible à utiliser avec $1title.",
+       "apihelp-edit-param-section": "Numéro de section. 0 pour la section de tête, « new » pour une nouvelle section.",
+       "apihelp-edit-param-sectiontitle": "Le titre pour une nouvelle section.",
+       "apihelp-edit-param-text": "Contenu de la page.",
+       "apihelp-edit-param-summary": "Modifier le résumé. Également le titre de la section quand $1section=new et $1sectiontitle n’est pas défini.",
+       "apihelp-edit-param-minor": "Modification mineure.",
+       "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-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 à votre liste de suivi.",
+       "apihelp-edit-param-unwatch": "Supprimer la page de votre liste de suivi.",
+       "apihelp-edit-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-edit-param-md5": "Le hachage MD5 du paramètre $1text, ou les paramètres $1prependtext et $1appendtext concaténés. Si défini, la modification ne sera pas effectuée à moins que le hachage ne soit correct.",
+       "apihelp-edit-param-prependtext": "Ajouter ce texte au début de la page. Écrase $1text.",
+       "apihelp-edit-param-appendtext": "Ajouter ce texte à la fin de la page. Écrase $1text.\n\nUtiliser $1section=new pour ajouter une nouvelle section, plutôt que ce paramètre.",
+       "apihelp-edit-param-undo": "Annuler cette révision. Écrase $1text, $1prependtext et $1appendtext.",
+       "apihelp-edit-param-undoafter": "Annuler toutes les révisions depuis $1undo jusqu’à celle-ci. Si non défini, annuler uniquement une révision.",
+       "apihelp-edit-param-redirect": "Résoudre automatiquement les redirections.",
+       "apihelp-edit-param-contentformat": "Format de sérialisation du contenu utilisé pour le texte d’entrée.",
+       "apihelp-edit-param-contentmodel": "Modèle de contenu du nouveau contenu.",
+       "apihelp-edit-param-token": "Le jeton doit toujours être envoyé en tant que dernier paramètre, ou au moins après le paramètre $1text.",
+       "apihelp-edit-example-edit": "Modifier une page",
+       "apihelp-edit-example-prepend": "Préfixer une page par _&#95;NOTOC_&#95;",
+       "apihelp-edit-example-undo": "Annuler les révisions 13579 à 13585 avec résumé automatique",
+       "apihelp-emailuser-description": "Envoyer un courriel à un utilisateur.",
+       "apihelp-emailuser-param-target": "Utilisateur à qui envoyer le courriel.",
+       "apihelp-emailuser-param-subject": "Entête du sujet.",
+       "apihelp-emailuser-param-text": "Corps du courriel.",
+       "apihelp-emailuser-param-ccme": "M’envoyer une copie de ce courriel.",
+       "apihelp-emailuser-example-email": "Envoyer un courriel à l’utilisateur « WikiSysop » avec le texte « Contenu »",
+       "apihelp-expandtemplates-description": "Développe tous les modèles en wikitexte.",
+       "apihelp-expandtemplates-param-title": "Titre de la page.",
+       "apihelp-expandtemplates-param-text": "Wikitexte à convertir.",
+       "apihelp-expandtemplates-param-prop": "Quelles informations récupérer :\n;wikitext:Le wikitexte développé.\n;categories:Toutes les catégories présentes dans l’entrée qui ne sont pas représentées dans le wikitexte de sortie.\n;volatile:Si la sortie est volatile et ne devrait pas être réutilisée ailleurs dans la page.\n;ttl:Le délai maximal après lequel les caches du résultat devraient être invalidés.\n;parsetree:L’arbre d’analyse XML de l’entrée.\nNoter que si aucune valeur n’est sélectionnée, le résultat contiendra le wikitexte, mais la sortie sera dans un format obsolète.",
+       "apihelp-expandtemplates-param-includecomments": "S’il faut inclure les commentaires HTML dans la sortie.",
+       "apihelp-expandtemplates-param-generatexml": "Générer l’arbre d’analyse XML (remplacé par $1prop=parsetree).",
+       "apihelp-expandtemplates-example-simple": "Développe le wikitexte « <nowiki>{{Project:Sandbox}}</nowiki> »",
+       "apihelp-feedcontributions-description": "Renvoie le fil des contributions d’un utilisateur.",
+       "apihelp-feedcontributions-param-feedformat": "Le format du flux.",
+       "apihelp-feedcontributions-param-user": "Pour quels utilisateurs récupérer les contributions.",
+       "apihelp-feedcontributions-param-namespace": "Par quels espaces de nom filtrer les contributions.",
+       "apihelp-feedcontributions-param-year": "Depuis l’année (et plus récent).",
+       "apihelp-feedcontributions-param-month": "Depuis le mois (et plus récent).",
+       "apihelp-feedcontributions-param-tagfilter": "Filtrer les contributions qui ont ces balises.",
+       "apihelp-feedcontributions-param-deletedonly": "Afficher uniquement les contributions supprimées.",
+       "apihelp-feedcontributions-param-toponly": "Afficher uniquement les modifications qui sont les dernières révisions.",
+       "apihelp-feedcontributions-param-newonly": "Afficher uniquement les modifications qui sont des créations de page.",
+       "apihelp-feedcontributions-param-showsizediff": "Afficher la différence de taille entre les révisions.",
+       "apihelp-feedcontributions-example-simple": "Renvoyer les contributions de [[User:Example]]",
+       "apihelp-feedrecentchanges-description": "Renvoie un fil de modifications récentes.",
+       "apihelp-feedrecentchanges-param-feedformat": "Le format du flux.",
+       "apihelp-feedrecentchanges-param-namespace": "Espace de noms auquel limiter les résultats.",
+       "apihelp-feedrecentchanges-param-invert": "Tous les espaces de nom sauf le sélectionné.",
+       "apihelp-feedrecentchanges-param-associated": "Inclure l’espace de noms associé (discussion ou principal).",
+       "apihelp-feedrecentchanges-param-days": "Jours auxquels limiter le résultat.",
+       "apihelp-feedrecentchanges-param-limit": "Nombre maximal de résultats à renvoyer.",
+       "apihelp-feedrecentchanges-param-from": "Afficher les modifications depuis lors.",
+       "apihelp-feedrecentchanges-param-hideminor": "Masquer les modifications mineures.",
+       "apihelp-feedrecentchanges-param-hidebots": "Masquer les modifications faites par des robots.",
+       "apihelp-feedrecentchanges-param-hideanons": "Masquer les modifications faites par des utilisateurs anonymes.",
+       "apihelp-feedrecentchanges-param-hideliu": "Masquer les modifications faites par des utilisateurs enregistrés.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Masquer les modifications contrôlées.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Masquer les modifications que vous avez faites.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Filtrer par balise.",
+       "apihelp-feedrecentchanges-param-target": "Afficher uniquement les modifications sur les pages liées depuis cette page.",
+       "apihelp-feedrecentchanges-param-showlinkedto": "Afficher les modifications plutôt sur les pages liées vers la page sélectionnée.",
+       "apihelp-feedrecentchanges-example-simple": "Afficher les modifications récentes",
+       "apihelp-feedrecentchanges-example-30days": "Afficher les modifications récentes sur 30 jours",
+       "apihelp-feedwatchlist-description": "Renvoie un flux de liste de suivi.",
+       "apihelp-feedwatchlist-param-feedformat": "Le format du flux.",
+       "apihelp-feedwatchlist-param-hours": "Lister les pages modifiées lors de ce nombre d’heures depuis maintenant.",
+       "apihelp-feedwatchlist-param-linktosections": "Lier directement pour modifier les sections si possible.",
+       "apihelp-feedwatchlist-example-default": "Afficher le flux de la liste de suivi",
+       "apihelp-feedwatchlist-example-all6hrs": "Afficher toutes les modifications sur les pages suivies dans les dernières 6 heures",
+       "apihelp-filerevert-description": "Rétablir un fichier dans une ancienne version.",
+       "apihelp-filerevert-param-filename": "Nom de fichier cible, sans le préfixe File:.",
+       "apihelp-filerevert-param-comment": "Télécharger le commentaire.",
+       "apihelp-filerevert-param-archivename": "Nom d’archive de la révision à rétablir.",
+       "apihelp-filerevert-example-revert": "Rétablir Wiki.png dans la version du 2011-03-05T15:27:40Z",
+       "apihelp-help-description": "Afficher l’aide pour les modules spécifiés.",
+       "apihelp-help-param-modules": "Modules pour lesquels afficher l’aide (valeurs des paramètres action= et format=, ou « main »). Les sous-modules peuvent être spécifiés avec un « + ».",
+       "apihelp-help-param-submodules": "Inclure l’aide pour les sous-modules du module nommé.",
+       "apihelp-help-param-recursivesubmodules": "Inclure l’aide pour les sous-modules de façon récursive.",
+       "apihelp-help-param-helpformat": "Format de sortie de l’aide.",
+       "apihelp-help-param-wrap": "Inclut la sortie dans une structure de réponse API standard.",
+       "apihelp-help-param-toc": "Inclure une table des matières dans la sortir HTML.",
+       "apihelp-help-example-main": "Aide pour le module principal",
+       "apihelp-help-example-recursive": "Toute l’aide sur une page",
+       "apihelp-help-example-help": "Aide pour le module d’aide lui-même",
+       "apihelp-help-example-query": "Aide pour deux sous-modules de recherche",
+       "apihelp-imagerotate-description": "Faire pivoter une ou plusieurs images.",
+       "apihelp-imagerotate-param-rotation": "Degrés de rotation de l’image dans le sens des aiguilles d’une montre.",
+       "apihelp-imagerotate-example-simple": "Faire pivoter [[:File:Example.png]] de 90 degrés",
+       "apihelp-imagerotate-example-generator": "Faire pivoter toutes les images de [[:Category:Flip]] de 180 degrés",
+       "apihelp-import-description": "Importer une page depuis un autre wiki, ou un fichier XML.\n\nNoter que le POST HTTP doit être effectué comme un import de fichier (c’est-à-dire en utilisant multipart/form-data) lors de l’envoi d’un fichier pour le paramètre « xml ».",
+       "apihelp-import-param-summary": "Importer le résumé.",
+       "apihelp-import-param-xml": "Fichier XML téléchargé.",
+       "apihelp-import-param-interwikisource": "Pour les importations interwiki : wiki depuis lequel importer.",
+       "apihelp-import-param-interwikipage": "Pour les importations interwiki : page à importer.",
+       "apihelp-import-param-fullhistory": "Pour les importations interwiki : importer tout l’historique, et pas seulement la version courante.",
+       "apihelp-import-param-templates": "Pour les importations interwiki : importer aussi tous les modèles inclus.",
+       "apihelp-import-param-namespace": "Pour les importations interwiki : importer vers cet espace de noms.",
+       "apihelp-import-param-rootpage": "Importer comme une sous-page de cette page.",
+       "apihelp-import-example-import": "Importer [[meta:Help:Parserfunctions]] vers l’espace de noms 100 avec tout l’historique.",
+       "apihelp-login-description": "Se connecter et obtenir les cookies d’authentification.\n\nDans le cas d’une connexion réussie, les cookies nécessaires seront inclus dans les entêtes de la réponse HTTP. Dans le cas d’une connexion en échec, les essais ultérieurs pourront être réduits afin de limiter les attaques automatisées de découverte du mot de passe.",
+       "apihelp-login-param-name": "Nom d’utilisateur.",
+       "apihelp-login-param-password": "Mot de passe.",
+       "apihelp-login-param-domain": "Domaine (facultatif).",
+       "apihelp-login-param-token": "Jeton de connexion obtenu à la première requête.",
+       "apihelp-login-example-gettoken": "Récupérer un jeton de connexion",
+       "apihelp-login-example-login": "Se connecter",
+       "apihelp-logout-description": "Se déconnecter et effacer les données de session.",
+       "apihelp-logout-example-logout": "Déconnecter l’utilisateur actuel.",
+       "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-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-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-ignorewarnings": "Ignorer tous les avertissements.",
+       "apihelp-move-example-move": "Déplacer « Mauvais titre » en « Bon titre » sans garder de redirection",
+       "apihelp-opensearch-description": "Rechercher dans le wiki en utilisant le protocole OpenSearch.",
+       "apihelp-opensearch-param-search": "Chaîne de recherche.",
+       "apihelp-opensearch-param-limit": "Nombre maximal de résultats à renvoyer.",
+       "apihelp-opensearch-param-namespace": "Espaces de nom à rechercher.",
+       "apihelp-opensearch-param-suggest": "Ne rien faire si [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] vaut faux.",
+       "apihelp-opensearch-param-format": "Le format de sortie.",
+       "apihelp-opensearch-example-te": "Trouver les pages commençant par « Te »",
+       "apihelp-options-description": "Modifier les préférences de l’utilisateur courant.\n\nSeules les options enregistrées dans le cœur ou dans l’une des extensions installées, ou les options avec une clé préfixée par « userjs- » (devant être utilisées dans les scripts utilisateur), peuvent être définies.",
+       "apihelp-options-param-reset": "Réinitialise les préférences aux valeurs par défaut du site.",
+       "apihelp-options-param-resetkinds": "Liste des types d’option à réinitialiser quand l’option « $1reset » est définie.",
+       "apihelp-options-param-change": "Liste des modifications, au format nom=valeur (par ex. skin=vector). La valeur ne peut pas contenir de caractère barre verticale. Si aucune valeur n’est fournie (pas même un signe égal), par ex., nomoption|autreoption|…, l’option sera réinitialisée à sa valeur par défaut.",
+       "apihelp-options-param-optionname": "Un nom d’option qui doit être fixé à la valeur fournie par « $1optionvalue ».",
+       "apihelp-options-param-optionvalue": "La valeur d’une option spécifiée par « $1optionname » peut contenir des caractères barre verticale.",
+       "apihelp-options-example-reset": "Réinitialiser toutes les préférences",
+       "apihelp-options-example-change": "Modifier les préférences « skin » et « hideminor »",
+       "apihelp-options-example-complex": "Réinitialiser toutes les préférences, puis définir « skin » et « nickname »",
+       "apihelp-paraminfo-description": "Obtenir des informations sur les modules de l’API.",
+       "apihelp-paraminfo-param-modules": "Liste des noms de module (valeurs des paramètres action= et format=, ou « main »). Peut spécifier des sous-modules avec un « + ».",
+       "apihelp-paraminfo-param-helpformat": "Format des chaînes d’aide.",
+       "apihelp-paraminfo-param-querymodules": "Liste des noms de module de requêtage (valeur des paramètres prop=, meta= ou list=). Utiliser « $1modules=query+foo » au lieu de « $1querymodules=foo ».",
+       "apihelp-paraminfo-param-mainmodule": "Obtenir aussi des informations sur le module principal (niveau supérieur). Utiliser plutôt « $1modules=main ».",
+       "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 format=). Utiliser plutôt « $1modules ».",
+       "apihelp-paraminfo-example-1": "Afficher les informations pour [[Special:ApiHelp/parse|action=parse]], [[Special:ApiHelp/jsonfm|format=jsonfm]], [[Special:ApiHelp/query+allpages|action=query&list=allpages]], et [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]",
+       "apihelp-parse-description": "Analyse le contenu et renvoie le résultat de l’analyseur.\n\nVoyez les différents modules prop de [[Special:ApiHelp/query|action=query]] 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 $1page, $1pageid, ou $1oldid.\n# Spécifier explicitement un contenu, en utilisant $1text, $1title, et $1contentmodel.\n# Spécifier uniquement un résumé à analyser. $1prop doit recevoir une valeur vide.",
+       "apihelp-parse-param-title": "Titre de la page à laquelle appartient le texte. Si omis, $1contentmodel doit être spécifié, et « [[API]] » sera utilisé comme titre.",
+       "apihelp-parse-param-text": "Texte à analyser. utiliser $1title ou $1contentmodel pour contrôler le modèle de contenu.",
+       "apihelp-parse-param-summary": "Résumé à analyser.",
+       "apihelp-parse-param-page": "Analyser le contenu de cette page. Impossible à utiliser avec $1text et $1title.",
+       "apihelp-parse-param-pageid": "Analyser le contenu de cette page. Écrase $1page.",
+       "apihelp-parse-param-redirects": "Si le paramètre $1page ou $1pageid est positionné sur une redirection, la résoudre.",
+       "apihelp-parse-param-oldid": "Analyser le contenu de cette révision. Écrase $1page et $1pageid.",
+       "apihelp-parse-param-prop": "Quelles informations obtenir :\n;text:Fournit le texte analysé du wikitexte.\n;langlinks:Fournit les liens de langue dans le wikitexte analysé.\n;categories:Fournit les catégories dans le wikitexte analysé.\n;categorieshtml:Fournit la version HTML des catégories.\n;links:Fournit les liens internes dans le wikitexte analysé.\n;templates:Fournit les modèles dans le wikitexte analysé.\n;images:Fournit les images dans le wikitexte analysé.\n;externallinks:Fournit les liens externes dans le wikitexte analysé.\n;sections:Fournit les sections dans le wikitexte analysé.\n;revid:Ajoute l’ID de révision de la page analysée.\n;displaytitle:Ajoute le titre du wikitexte analysé.\n;headitems:Fournit les éléments à mettre dans le &lt;head&gt; de la page.\n;headhtml:Fournit le &lt;head&gt; analysé de la page.\n;modules:Fournit les modules ResourceLoader utilisés sur la page.\n;indicators:Fournit le HTML des indicateurs d’état de la page utilisés dans la page.\n;iwlinks:Fournit les liens interwiki dans le wikitexte analysé.\n;wikitext:Fournit le wikitexte d’origine qui a été analysé.\n;properties:Fournit différentes propriétés définies dans le wikitexte analysé.\n;limitreportdata:Fournit le rapport de limite de façon structurée. Ne fournit aucune donnée, quand $1disablepp est activé.\n;limitreporthtml:Fournit la version HTML du rapport de limite. Ne fournit aucune donnée, quand $1disablepp est activé.",
+       "apihelp-parse-param-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 $1text.",
+       "apihelp-parse-param-effectivelanglinks": "Inclut les liens de langue fournis par les extensions (à utiliser avec $1prop=langlinks).",
+       "apihelp-parse-param-section": "Récupérer uniquement le contenu de ce numéro de section.",
+       "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 « $1 »).",
+       "apihelp-parse-param-preview": "Analyser en mode aperçu.",
+       "apihelp-parse-param-sectionpreview": "Analyser en mode aperçu de section (active aussi le mode aperçu).",
+       "apihelp-parse-param-disabletoc": "Désactiver la table des matières dans la sortie.",
+       "apihelp-parse-param-contentformat": "Format de sérialisation du contenu utilisé pour le texte d’entrée. Valide uniquement si utilisé avec $1text.",
+       "apihelp-parse-param-contentmodel": "Modèle de contenu du texte d’entrée. Si omis, $1title doit être spécifié, et la valeur par défaut sera le modèle du titre spécifié. Valide uniquement quand utilisé avec $1text.",
+       "apihelp-parse-example-page": "Analyser une page.",
+       "apihelp-parse-example-text": "Analyser le wikitexte.",
+       "apihelp-parse-example-texttitle": "Analyser du wikitexte, en spécifiant le titre de la page.",
+       "apihelp-parse-example-summary": "Analyser un résumé.",
+       "apihelp-patrol-description": "Patrouiller une page ou une révision.",
+       "apihelp-patrol-param-rcid": "ID de modification récente à patrouiller.",
+       "apihelp-patrol-param-revid": "ID de révision à patrouiller.",
+       "apihelp-patrol-example-rcid": "Patrouiller une modification récente",
+       "apihelp-patrol-example-revid": "Patrouiller une révision",
+       "apihelp-protect-description": "Modifier le niveau de protection d’une page.",
+       "apihelp-protect-param-title": "Titre de la page à (dé)protéger. Impossible à utiliser avec $1pageid.",
+       "apihelp-protect-param-pageid": "ID de la page à (dé)protéger. Impossible à utiliser avec $1title.",
+       "apihelp-protect-param-protections": "Liste des niveaux de protection, au format action=niveau (par ex. edit=sysop).\n\n'''NOTE :''' Toutes les actions non listées auront leur restrictions supprimées.",
+       "apihelp-protect-param-expiry": "Horodatages d’expiration. Si un seul horodatage est fourni, il sera utilisé pour toutes les protections. Utiliser « infinite », « indefinite », « infinity » ou « never » 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-example-protect": "Protéger une page",
+       "apihelp-protect-example-unprotect": "Enlever la protection d’une page en mettant les restrictions à « all »",
+       "apihelp-protect-example-unprotect2": "Enlever la protection de la page en ne mettant aucune restriction",
+       "apihelp-purge-description": "Vider le cache des titres fournis.\n\nNécessite une requête POST si l’utilisateur n’est pas connecté.",
+       "apihelp-purge-param-forcelinkupdate": "Mettre à jour les tables de liens.",
+       "apihelp-purge-param-forcerecursivelinkupdate": "Mettre à jour la table des liens, et mettre à jour les tables de liens pour toute page qui utilise cette page comme modèle",
+       "apihelp-purge-example-simple": "Purger les pages « Page principale » et « API »",
+       "apihelp-purge-example-generator": "Purger les 10 premières pages de l’espace de noms principal",
+       "apihelp-query-description": "Extraire des données de et sur MédiaWiki.\n\nToutes les modifications de données devront d’abord utiliser une requête pour obtenir un jeton, afin d’éviter les abus de la part de sites malveillants.",
+       "apihelp-query-param-prop": "Quelles propriétés obtenir des pages demandées.",
+       "apihelp-query-param-list": "Quelles listes obtenir.",
+       "apihelp-query-param-meta": "Quelles métadonnées obtenir.",
+       "apihelp-query-param-indexpageids": "Inclure une section pageids supplémentaire listant tous les IDs de page renvoyés.",
+       "apihelp-query-param-export": "Exporter les révisions actuelles de toutes les pages fournies ou générées.",
+       "apihelp-query-param-exportnowrap": "Renvoyer le XML exporté sans l’inclure dans un résultat XML (même format que [[Special:Export]]). Utilisable uniquement avec $1export.",
+       "apihelp-query-param-iwurl": "S’il faut obtenir l’URL complète si le titre est un lien interwiki.",
+       "apihelp-query-param-continue": "Quand il est présent, met en forme query-continue sous forme de paires clé-valeur qui devrait simplement être fusionné dans la requête d’origine. Ce paramètre doit être fixé à une chaîne vide dans la requête initiale.\n\nCe paramètre est recommandé pour tout nouveau développement, et sera mis par défaut dans la prochaine version de l’API.",
+       "apihelp-query-param-rawcontinue": "Actuellement ignoré. Plus tard, « $1continue= » deviendra la valeur par défaut et sera nécessaire pour recevoir les données brutes de query-continue.",
+       "apihelp-query-example-revisions": "Récupérer [[Special:ApiHelp/query+siteinfo|l’info du site]] et [[Special:ApiHelp/query+revisions|les révisions]] de la Page principale",
+       "apihelp-query-example-allpages": "Récupérer les révisions des pages commençant par « API/ »",
+       "apihelp-query+allcategories-description": "Énumérer toutes les catégories.",
+       "apihelp-query+allcategories-param-from": "La catégorie depuis laquelle démarrer l’énumération.",
+       "apihelp-query+allcategories-param-to": "La catégorie à laquelle terminer l’énumération.",
+       "apihelp-query+allcategories-param-prefix": "Rechercher tous les titres de catégorie qui commencent avec cette valeur.",
+       "apihelp-query+allcategories-param-dir": "Direction dans laquelle trier.",
+       "apihelp-query+allcategories-param-min": "Renvoyer uniquement les catégories avec au moins ce nombre de membres.",
+       "apihelp-query+allcategories-param-max": "Renvoyer uniquement les catégories avec au plus ce nombre de membres.",
+       "apihelp-query+allcategories-param-limit": "Combien de catégories renvoyer.",
+       "apihelp-query+allcategories-param-prop": "Quelles propriétés récupérer :\n;size:Ajoute le nombre de pages dans la catégorie.\n;hidden:Marque les catégories qui sont cachées avec _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+allcategories-example-size": "Lister les catégories avec l’information sur le nombre de pages dans chacune",
+       "apihelp-query+allcategories-example-generator": "Récupérer l’information sur la page de catégorie elle-même pour les catégories commençant par « List »",
+       "apihelp-query+alldeletedrevisions-description": "Lister toutes les révisions supprimées par un utilisateur ou dans un espace de noms.",
+       "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Utilisable uniquement avec $3user.",
+       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Impossible à utiliser avec $3user.",
+       "apihelp-query+alldeletedrevisions-param-start": "L’horodatage auquel démarrer l’énumération.",
+       "apihelp-query+alldeletedrevisions-param-end": "L’horodatage auquel arrêter l’énumération.",
+       "apihelp-query+alldeletedrevisions-param-from": "Démarrer la liste à ce titre.",
+       "apihelp-query+alldeletedrevisions-param-to": "Arrêter la liste à ce titre.",
+       "apihelp-query+alldeletedrevisions-param-prefix": "Rechercher tous les titres de page commençant par cette valeur.",
+       "apihelp-query+alldeletedrevisions-param-tag": "Lister uniquement les révisions marquées avec cette balise.",
+       "apihelp-query+alldeletedrevisions-param-user": "Lister uniquement les révisions par cet utilisateur.",
+       "apihelp-query+alldeletedrevisions-param-excludeuser": "Ne pas lister les révisions par cet utilisateur.",
+       "apihelp-query+alldeletedrevisions-param-namespace": "Lister uniquement les pages dans cet espace de noms.",
+       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "'''REMARQUE :''' Du fait du [https://www.mediawiki.org/wiki/Manual:$wgMiserMode mode minimal], utiliser $1user et $1namespace ensemble peut aboutir à moins de résultats renvoyés que « $1limit » avant de continuer ; dans les cas extrêmes, zéro résultats peuvent être renvoyés.",
+       "apihelp-query+alldeletedrevisions-param-generatetitles": "Utilisé comme générateur, générer des titres plutôt que des IDs de révision.",
+       "apihelp-query+alldeletedrevisions-example-user": "Lister les 50 dernières contributions supprimées par User:Exemple",
+       "apihelp-query+alldeletedrevisions-example-ns-main": "Lister les 50 premières révisions supprimées dans l’espace de noms principal",
+       "apihelp-query+allfileusages-description": "Lister toutes les utilisations de fichier, y compris ceux n’existant pas.",
+       "apihelp-query+allfileusages-param-from": "Le titre du fichier depuis lequel commencer l’énumération.",
+       "apihelp-query+allfileusages-param-to": "Le titre du fichier auquel arrêter l’énumération.",
+       "apihelp-query+allfileusages-param-prefix": "Rechercher tous les fichiers dont le titre commence par cette valeur.",
+       "apihelp-query+allfileusages-param-unique": "Afficher uniquement les titres de fichier distincts. Impossible à utiliser avec $1prop=ids.\nQuand utilisé comme générateur, produit les pages cibles au lieu des sources.",
+       "apihelp-query+allfileusages-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page utilisatrice (impossible à utiliser avec $1unique).\n;title:Ajoute le titre du fichier.",
+       "apihelp-query+allfileusages-param-limit": "Combien d’éléments renvoyer au total.",
+       "apihelp-query+allfileusages-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+allfileusages-example-B": "Lister les titres de fichier, y compris les manquants, avec les ids de page d’où ils proviennent, en commençant à B",
+       "apihelp-query+allfileusages-example-unique": "Lister les titres de fichier uniques",
+       "apihelp-query+allfileusages-example-unique-generator": "Obtient tous les titres de fichier, en marquant les manquants",
+       "apihelp-query+allfileusages-example-generator": "Obtient les pages contenant les fichiers",
+       "apihelp-query+allimages-description": "Énumérer toutes les images séquentiellement.",
+       "apihelp-query+allimages-param-sort": "Propriété par laquelle trier.",
+       "apihelp-query+allimages-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+allimages-param-from": "Le titre de l’image depuis laquelle démarrer l’énumération. Ne peut être utilisé qu’avec $1sort=name.",
+       "apihelp-query+allimages-param-to": "Le titre de l’image auquel arrêter l’énumération. Ne peut être utilisé qu’avec $1sort=name.",
+       "apihelp-query+allimages-param-start": "L’horodatage depuis lequel énumérer. Ne peut être utilisé qu’avec $1sort=timestamp.",
+       "apihelp-query+allimages-param-end": "L’horodatage de fin de l’énumération. Ne peut être utilisé qu’avec $1sort=timestamp.",
+       "apihelp-query+allimages-param-prop": "Quelle information obtenir sur l’image :\n;timestamp:Ajoute l’horodatage de la version téléchargée.\n;user:Ajoute l’utilisateur qui a téléchargé la version de l’image.\n;userid:Ajoute l’ID de l’utilisateur qui a téléchargé la version de l’image.\n;comment:Commentaire sur la version.\n;parsedcomment:Analyser le commentaire de la version.\n;canonicaltitle:Ajoute le titre canonique du fichier image.\n;url:Fournit l’URL vers l’image et la page de description.\n;size:Ajoute la taille de l’image en octets et sa hauteur et largeur, et le numéro de page (si applicable).\n;dimensions:Alias de la taille.\n;sha1:Ajoute le hachage SHA-1 de l’image.\n;mime:Ajoute le type MIME de l’image.\n;mediatype:Ajoute le type de média de l’image.\n;metadata:Liste les métadonnées Exif de la version de l’image.\n;commonmetadata:Liste les métadonnées génériques du format de fichier pour la version de l’image.\n;extmetadata:Liste les métadonnées mises en forme regroupées depuis différentes sources. Les résultats sont au format HTML.\n;bitdepth:Ajoute la profondeur de couleur de la version.",
+       "apihelp-query+allimages-param-prefix": "Rechercher toutes les images dont le titre commence par cette valeur. Utilisable uniquement avec $1sort=name.",
+       "apihelp-query+allimages-param-minsize": "Restreindre aux images avec au moins ce nombre d’octets.",
+       "apihelp-query+allimages-param-maxsize": "Restreindre aux images avec au plus ce nombre d’octets.",
+       "apihelp-query+allimages-param-sha1": "Hachage SHA1 de l’image. Écrase $1sha1base36.",
+       "apihelp-query+allimages-param-sha1base36": "Hachage SHA1 de l’image en base 36 (utilisé dans MédiaWiki).",
+       "apihelp-query+allimages-param-user": "Renvoyer seulement les fichiers téléchargés par cet utilisateur. Utilisable uniquement avec $1sort=timestamp. Impossible à utiliser avec $1filterbots.",
+       "apihelp-query+allimages-param-filterbots": "Comment filtrer les fichiers téléchargés par des robots. Peut être utilisé uniquement avec $1sort=timestamp. Impossible à utiliser avec $1user.",
+       "apihelp-query+allimages-param-mime": "Quel type MIME rechercher, par ex. image/jpeg.",
+       "apihelp-query+allimages-param-limit": "Combien d’images renvoyer au total.",
+       "apihelp-query+allimages-example-B": "Afficher une liste des fichiers commençant par la lettre « B »",
+       "apihelp-query+allimages-example-recent": "Afficher une liste des fichiers récemment téléchargés semblable à [[Special:NewFiles]]",
+       "apihelp-query+allimages-example-generator": "Afficher l’information sur 4 fichiers commençant par la lettre « T »",
+       "apihelp-query+alllinks-description": "Énumérer tous les liens pointant vers un espace de noms donné.",
+       "apihelp-query+alllinks-param-from": "Le titre du lien auquel démarrer l’énumération.",
+       "apihelp-query+alllinks-param-to": "Le titre du lien auquel arrêter l’énumération.",
+       "apihelp-query+alllinks-param-prefix": "Rechercher tous les titres liés commençant par cette valeur.",
+       "apihelp-query+alllinks-param-unique": "Afficher uniquement les titres liés distincts. Impossible à utiliser avec $1prop=ids.\nUtilisé avec un générateur, produit les pages cible au lieu des pages source.",
+       "apihelp-query+alllinks-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page de liaison (impossible à utiliser avec $1unique).\n;title:Ajoute le titre du lien.",
+       "apihelp-query+alllinks-param-namespace": "L’espace de noms à énumérer.",
+       "apihelp-query+alllinks-param-limit": "Combien d’éléments renvoyer au total.",
+       "apihelp-query+alllinks-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+alllinks-example-B": "Lister les titres liés, y compris les manquants, avec les ids des pages d’où ils proviennent, en démarrant à B",
+       "apihelp-query+alllinks-example-unique": "Lister les titres liés uniques",
+       "apihelp-query+alllinks-example-unique-generator": "Obtient tous les titres liés, en marquant les manquants",
+       "apihelp-query+alllinks-example-generator": "Obtient les pages contenant les liens",
+       "apihelp-query+allmessages-description": "Renvoyer les messages depuis ce site.",
+       "apihelp-query+allmessages-param-messages": "Quels messages sortir. « * » (par défaut) signifie tous les messages.",
+       "apihelp-query+allmessages-param-prop": "Quelles propriétés obtenir.",
+       "apihelp-query+allmessages-param-enableparser": "Si positionné pour activer l’analyseur, traitera en avance le wikitexte du message (substitution des mots magiques, gestion des modèles, etc.).",
+       "apihelp-query+allmessages-param-nocontent": "Si positionné, ne pas inclure le contenu des messages dans la sortie.",
+       "apihelp-query+allmessages-param-includelocal": "Inclure aussi les messages locaux, c’est-à-dire les messages qui n’existent pas dans le logiciel mais sous forme d’une page MediaWiki:.\nCela liste toutes les pages MediaWiki:, donc aussi celles qui ne sont pas vraiment des messages, telles que [[MediaWiki:Common.js|Common.js]].",
+       "apihelp-query+allmessages-param-args": "Arguments à substituer dans le message.",
+       "apihelp-query+allmessages-param-filter": "Renvoyer uniquement les messages avec des noms contenant cette chaîne.",
+       "apihelp-query+allmessages-param-customised": "Renvoyer uniquement les messages dans cet état de personnalisation.",
+       "apihelp-query+allmessages-param-lang": "Renvoyer les messages dans cette langue.",
+       "apihelp-query+allmessages-param-from": "Renvoyer les messages commençant à ce message.",
+       "apihelp-query+allmessages-param-to": "Renvoyer les messages en terminant à ce message.",
+       "apihelp-query+allmessages-param-title": "Nom de page à utiliser comme contexte en analysant le message (pour l’option $1enableparser).",
+       "apihelp-query+allmessages-param-prefix": "Renvoyer les messages avec ce préfixe.",
+       "apihelp-query+allmessages-example-ipb": "Afficher les messages commençant par « ipb- »",
+       "apihelp-query+allmessages-example-de": "Afficher les messages « august » et «mainpage » en allemand",
+       "apihelp-query+allpages-description": "Énumérer toutes les pages séquentiellement dans un espace de noms donné.",
+       "apihelp-query+allpages-param-from": "Le titre de la page depuis lequel commencer l’énumération.",
+       "apihelp-query+allpages-param-to": "Le titre de la page auquel stopper l’énumération.",
+       "apihelp-query+allpages-param-prefix": "Rechercher tous les titres de page qui commencent par cette valeur.",
+       "apihelp-query+allpages-param-namespace": "L’espace de noms à énumérer.",
+       "apihelp-query+allpages-param-filterredir": "Quelles pages lister.",
+       "apihelp-query+allpages-param-minsize": "Limiter aux pages avec au moins ce nombre d’octets.",
+       "apihelp-query+allpages-param-maxsize": "Limiter aux pages avec au plus ce nombre d’octets.",
+       "apihelp-query+allpages-param-prtype": "Limiter aux pages protégées uniquement.",
+       "apihelp-query+allpages-param-prlevel": "Filtrer les protections basées sur le niveau de protection (doit être utilisé avec le paramètre $1prtype=).",
+       "apihelp-query+allpages-param-prfiltercascade": "Filtrer les protections d’après leur cascade (ignoré si $1prtype n’est pas positionné).",
+       "apihelp-query+allpages-param-limit": "Combien de pages renvoyer au total.",
+       "apihelp-query+allpages-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+allpages-param-filterlanglinks": "Filtrer si une page a des liens de langue. Noter que cela ne prend pas en compte les liens de langue ajoutés par des extensions.",
+       "apihelp-query+allpages-param-prexpiry": "Quelle expiration de protection sur laquelle filtrer la page :\n;indefinite:N’obtenir que les pages avec une expiration de protection infinie.\n;definite:N’obtenir que les pages avec une expiration de protection définie (spécifique).\n;all:Obtenir toutes les pages avec une expiration de protection.",
+       "apihelp-query+allpages-example-B": "Afficher une liste des pages commençant par la lettre « B »",
+       "apihelp-query+allpages-example-generator": "Afficher l’information sur 4 pages commençant par la lettre « T »",
+       "apihelp-query+allpages-example-generator-revisions": "Afficher le contenu des 2 premières pages hors redirections commençant par « Re »",
+       "apihelp-query+allredirects-description": "Lister toutes les redirections vers un espace de noms.",
+       "apihelp-query+allredirects-param-from": "Le titre de la redirection auquel démarrer l’énumération.",
+       "apihelp-query+allredirects-param-to": "Le titre de la redirection auquel arrêter l’énumération.",
+       "apihelp-query+allredirects-param-prefix": "Rechercher toutes les pages cible commençant par cette valeur.",
+       "apihelp-query+allredirects-param-unique": "Afficher uniquement les pages cibles distinctes. Impossible à utiliser avec $1prop=ids|fragment|interwiki.\nUtilisé avec un générateur, produit les pages cible au lieu des pages source.",
+       "apihelp-query+allredirects-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page de redirection (impossible à utiliser avec $1unique).\n;title:Ajoute le titre de la redirection.\n;fragment:Ajoute le fragment de la redirection, s’il y en a un (impossible à utiliser avec $1unique).\n;interwiki:Ajoute le préfixe interwiki de la redirection, s’il y en a un (impossible à utiliser avec $1unique).",
+       "apihelp-query+allredirects-param-namespace": "L’espace de noms à énumérer.",
+       "apihelp-query+allredirects-param-limit": "Combien d’éléments renvoyer au total.",
+       "apihelp-query+allredirects-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+allredirects-example-B": "Lister les pages cible, y compris les manquantes, avec les IDs de page d’où ils proviennent, en commençant à B",
+       "apihelp-query+allredirects-example-unique": "Lister les pages cible unique",
+       "apihelp-query+allredirects-example-unique-generator": "Obtient toutes les pages cible, en marquant les manquantes",
+       "apihelp-query+allredirects-example-generator": "Obtient les pages contenant les redirections",
+       "apihelp-query+alltransclusions-description": "Lister toutes les transclusions (pages intégrées en utilisant &#123;&#123;x&#125;&#125;), y compris les inexistantes.",
+       "apihelp-query+alltransclusions-param-from": "Le titre de la transclusion depuis lequel commencer l’énumération.",
+       "apihelp-query+alltransclusions-param-to": "Le titre de la transclusion auquel arrêter l’énumération.",
+       "apihelp-query+alltransclusions-param-prefix": "Rechercher tous les titres inclus qui commencent par cette valeur.",
+       "apihelp-query+alltransclusions-param-unique": "Afficher uniquement les titres inclus. Impossible à utiliser avec $1prop=ids.\nUtilisé avec un générateur, produit les pages cible plutôt que les pages source.",
+       "apihelp-query+alltransclusions-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page incluse (impossible à utiliser avec $1unique).\n;title:Ajoute le titre de la transclusion.",
+       "apihelp-query+alltransclusions-param-namespace": "L’espace de noms à énumérer.",
+       "apihelp-query+alltransclusions-param-limit": "Combien d’éléments renvoyer au total.",
+       "apihelp-query+alltransclusions-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+alltransclusions-example-B": "Lister les titres inclus, y compris les manquants, avec les IDs des pages d’où ils viennent, en commençant à B",
+       "apihelp-query+alltransclusions-example-unique": "Lister les titres inclus uniques",
+       "apihelp-query+alltransclusions-example-unique-generator": "Obtient tous les titres inclus, en marquant les manquants",
+       "apihelp-query+alltransclusions-example-generator": "Obtient les pages contenant des transclusions",
+       "apihelp-query+allusers-description": "Énumérer tous les utilisateurs enregistrés.",
+       "apihelp-query+allusers-param-from": "Le nom d’utilisateur auquel démarrer l’énumération.",
+       "apihelp-query+allusers-param-to": "Le nom d’utilisateur auquel stopper l’énumération.",
+       "apihelp-query+allusers-param-prefix": "Rechercher tous les utilisateurs commençant par cette valeur.",
+       "apihelp-query+allusers-param-dir": "Direction du tri.",
+       "apihelp-query+allusers-param-group": "Inclure uniquement les utilisateurs dans les groupes donnés.",
+       "apihelp-query+allusers-param-excludegroup": "Exclure les utilisateurs dans les groupes donnés.",
+       "apihelp-query+allusers-param-rights": "Inclure uniquement les utilisateurs avec les droits indiqués. Ne comprend pas les droits accordés par des groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+       "apihelp-query+allusers-param-prop": "Quelles informations inclure :\n;blockinfo:Ajoute l’information sur le bloc actuel d’un utilisateur.\n;groups:Liste des groupes auxquels appartient l’utilisateur. Cela utilise beaucoup de ressources du serveur et peut renvoyer moins de résultats que la limite.\n;implicitgroups:Liste tous les groupes auxquels l’utilisateur est affecté automatiquement.\n;rights:Liste les droits qu’à l’utilisateur.\n;editcount:Ajoute le compteur de modifications de l’utilisateur.\n;registration:Ajoute l’horodatage de l’inscription de l’utilisateur, s’il est disponible (peut être vide).",
+       "apihelp-query+allusers-param-limit": "Combien de noms d’utilisateur renvoyer au total.",
+       "apihelp-query+allusers-param-witheditsonly": "Ne lister que les utilisateurs qui ont fait des modifications.",
+       "apihelp-query+allusers-param-activeusers": "Lister uniquement les utilisateurs actifs durant {{PLURAL:$1|le dernier jour|les $1 derniers jours}}.",
+       "apihelp-query+allusers-example-Y": "Lister les utilisateurs en commençant à Y",
+       "apihelp-query+backlinks-description": "Trouver toutes les pages qui ont un lien vers la page donnée.",
+       "apihelp-query+backlinks-param-title": "Titre à rechercher. Impossible à utiliser avec $1pageid.",
+       "apihelp-query+backlinks-param-pageid": "ID de la page à chercher. Impossible à utiliser avec $1title.",
+       "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é à nonredirects quand $1redirect 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-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 [[Main page]]",
+       "apihelp-query+backlinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers [[Main page]]",
+       "apihelp-query+blocks-description": "Lister tous les utilisateurs et les adresses IP bloqués.",
+       "apihelp-query+blocks-param-start": "L’horodatage auquel démarrer l’énumération.",
+       "apihelp-query+blocks-param-end": "L’horodatage auquel arrêter l’énumération.",
+       "apihelp-query+blocks-param-ids": "Liste des IDs de bloc à lister (facultatif).",
+       "apihelp-query+blocks-param-users": "Liste des utilisateurs à rechercher (facultatif).",
+       "apihelp-query+blocks-param-ip": "Obtenir tous les blocs s’appliquant à cette adresse IP ou à cette plage CIDR, y compris les blocs de plage.\nImpossible à utiliser avec $3users. Les plages CIDR plus larges que IPv4/$1 ou IPv6/$2 ne sont pas acceptées.",
+       "apihelp-query+blocks-param-limit": "Le nombre maximal de blocs à lister.",
+       "apihelp-query+blocks-param-prop": "Quelles propriétés obtenir :\n;id:Ajoute l’ID du blocage.\n;user:Ajoute le nom de l’utilisateur bloqué.\n;userid:Ajoute l’ID de l’utilisateur bloqué.\n;by:Ajoute le nom de l’utilisateur ayant bloqué.\n;byid:Ajoute l’ID de l’utilisateur ayant bloqué.\n;timestamp:Ajoute l’horodatage du blocage.\n;expiry:Ajoute l’horodatage d’expiration du blocage.\n;reason:Ajoute le motif du blocage.\n;range:Ajoute la plage d&adresses IP affectée par le blocage.\n;flags:Marque le bannissement avec (autoblock, anononly, etc.).",
+       "apihelp-query+blocks-param-show": "Afficher uniquement les éléments correspondant à ces critères.\nPar exemple, pour voir uniquement les blocages infinis sur les adresses IP, mettre $1show=ip|!temp.",
+       "apihelp-query+blocks-example-simple": "Lister les blocages",
+       "apihelp-query+blocks-example-users": "Lister les blocages des utilisateurs Alice et Bob",
+       "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-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+categories-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+categories-example-simple": "Obtenir une liste des catégories auxquelles appartient [[Albert Einstein]]",
+       "apihelp-query+categories-example-generator": "Obtenir des informations sur toutes les catégories utilisées dans [[Albert Einstein]]",
+       "apihelp-query+categoryinfo-description": "Renvoie les informations sur les catégories données.",
+       "apihelp-query+categoryinfo-example-simple": "Obtenir des informations sur [[:Category:Foo]] et [[:Category:Bar]]",
+       "apihelp-query+categorymembers-description": "Lister toutes les pages d’une catégorie donnée.",
+       "apihelp-query+categorymembers-param-title": "Quelle catégorie énumérer (obligatoire). Doit comprendre le préfixe « Category: ». Impossible à utiliser avec $1pageid.",
+       "apihelp-query+categorymembers-param-pageid": "ID de la page de la catégorie à énumérer. Impossible à utiliser avec $1title.",
+       "apihelp-query+categorymembers-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page.\n;title:Ajoute le titre et l’ID de l’espace de noms de la page.\n;sortkey:Ajoute la clé de tri utilisée pour trier dans la catégorie (chaîne hexadécimale).\n;sortkeyprefix:Ajoute le préfixe de la clé de tri utilisé pour trier dans la catégorie (partie lisible de la clé de tri).\n;type:Ajoute le type dans lequel a été catégorisée la page (page, sous-catégorie ou fichier).\n;timestamp:Ajoute l’horodatage de l’inclusion de la page.",
+       "apihelp-query+categorymembers-param-namespace": "Inclure uniquement les pages dans ces espaces de nom. Remarquez que $1type=subcat ou $1type=file peuvent  être utilisés à la place de $1namespace=14 or 6.",
+       "apihelp-query+categorymembers-param-type": "Quel type de membres de la catégorie inclure. Ignoré quand $1sort=timestamp est positionné.",
+       "apihelp-query+categorymembers-param-limit": "Le nombre maximal de pages à renvoyer.",
+       "apihelp-query+categorymembers-param-sort": "Propriété par laquelle trier.",
+       "apihelp-query+categorymembers-param-dir": "Dans quelle direction trier.",
+       "apihelp-query+categorymembers-param-start": "Horodatage auquel démarrer la liste. Peut être utilisé uniquement avec $1sort=timestamp.",
+       "apihelp-query+categorymembers-param-end": "Horodatage auquel terminer la liste. Peut être utilisé uniquement avec $1sort=timestamp.",
+       "apihelp-query+categorymembers-param-starthexsortkey": "Clé de tri à laquelle démarrer le listage, telle que renvoyée par $1prop=sortkey. Utilisable uniquement avec $1sort=sortkey.",
+       "apihelp-query+categorymembers-param-endhexsortkey": "Clé de tri à laquelle arrêter le listage, telle que renvoyée par $1prop=sortkey. Utilisable uniquement avec $1sort=sortkey.",
+       "apihelp-query+categorymembers-param-startsortkeyprefix": "Préfixe de la clé de tri à laquelle démarrer le listage. Utilisable uniquement avec $1sort=sortkey. Écrase $1starthexsortkey.",
+       "apihelp-query+categorymembers-param-endsortkeyprefix": "Préfixe de la clé de tri AVANT laquelle se termine le listage (et non pas à, si cette valeur existe elle ne sera pas incluse !). Utilisable uniquement avec $1sort=sortkey. Écrase $1endhexsortkey.",
+       "apihelp-query+categorymembers-param-startsortkey": "Utiliser plutôt $1starthexsortkey.",
+       "apihelp-query+categorymembers-param-endsortkey": "Utiliser plutôt $1endhexsortkey.",
+       "apihelp-query+categorymembers-example-simple": "Obtenir les 10 premières pages de [[:Category:Physics]]",
+       "apihelp-query+categorymembers-example-generator": "Obtenir l’information sur les 10 premières pages de [[:Category:Physics]]",
+       "apihelp-query+contributors-description": "Obtenir la liste des contributeurs connectés et le nombre de contributeurs anonymes d’une page.",
+       "apihelp-query+contributors-param-group": "Inclure uniquement les utilisateurs dans les groupes donnés. Ne pas inclure les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+       "apihelp-query+contributors-param-excludegroup": "Exclure les utilisateurs des groupes donnés. Ne pas inclure les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+       "apihelp-query+contributors-param-rights": "Inclure uniquement les utilisateurs ayant les droits donnés. Ne pas inclure les droits accordés par les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+       "apihelp-query+contributors-param-excluderights": "Exclure les utilisateurs ayant les droits donnés. Ne pas inclure les droits accordés par les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+       "apihelp-query+contributors-param-limit": "Combien de contributeurs renvoyer.",
+       "apihelp-query+contributors-example-simple": "Afficher les contributeurs dans la [[Main Page]]",
+       "apihelp-query+deletedrevisions-description": "Obtenir des informations sur la révision supprimée.\n\nPeut être utilisé de différentes manières :\n# Obtenir les révisions supprimées pour un ensemble de pages, en donnant les titres ou les ids de page. Ordonné par titre  et horodatage.\n# Obtenir des données sur un ensemble de révisions supprimées en donnant leurs IDs et leurs ids de révision. Ordonné par ID de révision.",
+       "apihelp-query+deletedrevisions-param-start": "L’horodatage auquel démarrer l’énumération. Ignoré lors du traitement d’une liste d’IDs de révisions.",
+       "apihelp-query+deletedrevisions-param-end": "L’horodatage auquel arrêter l’énumération. Ignoré lors du traitement d’une liste d’IDs de révisions.",
+       "apihelp-query+deletedrevisions-param-tag": "Lister uniquement les révisions marquées par cette balise.",
+       "apihelp-query+deletedrevisions-param-user": "Lister uniquement les révisions faites par cet utilisateur.",
+       "apihelp-query+deletedrevisions-param-excludeuser": "Ne pas lister les révisions faites par cet utilisateur.",
+       "apihelp-query+deletedrevisions-param-limit": "Le nombre maximal de révisions à lister.",
+       "apihelp-query+deletedrevisions-param-prop": "Quelles propriétés obtenir :\n;revid:Ajoute l’ID de la révision supprimée.\n;parentid:Ajoute l’ID de la révision précédente de la page.\n;user:Ajoute l’utilisateur ayant fait la révision.\n;userid:Ajoute l’ID de l’utilisateur ayant fait la révision.\n;comment:Ajoute le commentaire de la révision.\n;parsedcomment:Ajoute le commentaire analysé de la révision.\n;minor:Marque si une révision est mineure.\n;len:Ajoute la taille (en octets) de la révision.\n;sha1:Ajoute le SHA-1 (base 16) de la révision.\n;content:Ajoute le contenu de la révision.\n;tags:Balises pour la révision.",
+       "apihelp-query+deletedrevisions-example-titles": "Lister les révisions supprimées de [[Main Page]] et [[Talk:Main Page]], avec leur contenu",
+       "apihelp-query+deletedrevisions-example-revids": "Lister les informations pour la révision supprimée 123456",
+       "apihelp-query+deletedrevs-description": "Lister les révisions supprimées.\n\nOpère selon trois modes :\n# Lister les révisions supprimées pour les titres donnés, triées par horodatage.\n# Lister les contributions supprimées pour l’utilisateur donné, triées par horodatage (pas de titres spécifiés).\n# Lister toutes les révisions supprimées dans l’espace de noms donné, triées par titre et horodatage (aucun titre spécifié, $1user non positionné).\n\nCertains paramètres ne s’appliquent qu’à certains modes et sont ignorés dans les autres.",
+       "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Mode|Modes}} : $2",
+       "apihelp-query+deletedrevs-param-start": "L’horodatage auquel démarrer l’énumération.",
+       "apihelp-query+deletedrevs-param-end": "L’horodatage auquel arrêter l’énumération.",
+       "apihelp-query+deletedrevs-param-from": "Démarrer la liste à ce titre.",
+       "apihelp-query+deletedrevs-param-to": "Arrêter la liste à ce titre.",
+       "apihelp-query+deletedrevs-param-prefix": "Rechercher tous les titres de page commençant par cette valeur.",
+       "apihelp-query+deletedrevs-param-unique": "Lister uniquement une révision pour chaque page.",
+       "apihelp-query+deletedrevs-param-tag": "Lister uniquement les révisions marquées par cette balise.",
+       "apihelp-query+deletedrevs-param-user": "Lister uniquement les révisions par cet utilisateur.",
+       "apihelp-query+deletedrevs-param-excludeuser": "Ne pas lister les révisions par cet utilisateur.",
+       "apihelp-query+deletedrevs-param-namespace": "Lister uniquement les pages dans cet espace de noms.",
+       "apihelp-query+deletedrevs-param-limit": "Le nombre maximal de révisions à lister.",
+       "apihelp-query+deletedrevs-param-prop": "Quelles propriétés obtenir :\n;revid:Ajoute l’ID de la révision supprimée.\n;parentid:Ajoute l’ID de la révision précédente de la page.\n;user:Ajoute l’utilisateur ayant fait la révision.\n;userid:Ajoute l’ID de l’utilisateur qui a fait la révision.\n;comment:Ajoute le commentaire de la révision.\n;parsedcomment:Ajoute le commentaire analysé de la révision.\n;minor:Marque si la révision est mineure.\n;len:Ajoute la longueur (en octets) de la révision.\n;sha1:Ajoute le SHA-1 (base 16) de la révision.\n;content:Ajoute le contenu de la révision.\n;token:<span class=\"apihelp-deprecated\">Obsolète.</span> Fournit le jeton de modification.\n;tags:Balises pour la révision.",
+       "apihelp-query+deletedrevs-example-mode1": "Lister les dernières révisions supprimées de Main Page et Talk:Main Page, avec le contenu (mode 1)",
+       "apihelp-query+deletedrevs-example-mode2": "Lister les 50 dernières contributions de Bob supprimées (mode 2)",
+       "apihelp-query+deletedrevs-example-mode3-main": "Lister les 50 premières révisions supprimées dans l’espace de noms principal (mode 3)",
+       "apihelp-query+deletedrevs-example-mode3-talk": "Lister les 50 premières pages supprimées dans l’espace de noms Talk (mode 3) :",
+       "apihelp-query+disabled-description": "Ce module de requête a été désactivé.",
+       "apihelp-query+duplicatefiles-description": "Lister tous les fichiers qui sont des doublons des fichiers donnés d’après leurs valeurs de hachage.",
+       "apihelp-query+duplicatefiles-param-limit": "Combien de fichiers dupliqués à renvoyer.",
+       "apihelp-query+duplicatefiles-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+duplicatefiles-param-localonly": "Rechercher les fichiers uniquement dans le référentiel local.",
+       "apihelp-query+duplicatefiles-example-simple": "Rechercher les doublons de [[:File:Albert Einstein Head.jpg]]",
+       "apihelp-query+duplicatefiles-example-generated": "Rechercher les doublons de tous les fichiers",
+       "apihelp-query+embeddedin-description": "Trouver toutes les pages qui incluent (par transclusion) le titre donné.",
+       "apihelp-query+embeddedin-param-title": "Titre à rechercher. Impossible à utiliser avec $1pageid.",
+       "apihelp-query+embeddedin-param-pageid": "ID de la page à rechercher. Impossible à utiliser avec $1title.",
+       "apihelp-query+embeddedin-param-namespace": "L’espace de noms à énumérer.",
+       "apihelp-query+embeddedin-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+embeddedin-param-filterredir": "Comment filtrer les redirections.",
+       "apihelp-query+embeddedin-param-limit": "Combien de pages renvoyer au total.",
+       "apihelp-query+embeddedin-example-simple": "Afficher les pages incluant [[Template:Stub]]",
+       "apihelp-query+embeddedin-example-generator": "Obteir des informations sur les pages incluant [[Template:Stub]]",
+       "apihelp-query+extlinks-description": "Renvoyer toutes les URLs externes (non interwikis) des pages données.",
+       "apihelp-query+extlinks-param-limit": "Combien de liens renvoyer.",
+       "apihelp-query+extlinks-param-protocol": "Protocole de l’URL. Si vide et $1query est positionné, le protocole est « http ». Laisser à la fois ceci et $1query vide pour lister tous les liens externes.",
+       "apihelp-query+extlinks-param-query": "Rechercher une chaîne sans protocole. Utile pour vérifier si une certaine page contient une certaine URL externe.",
+       "apihelp-query+extlinks-param-expandurl": "Étendre les URLs relatives au protocole avec le protocole canonique.",
+       "apihelp-query+extlinks-example-simple": "Obtenir une liste des liens externes de [[Main Page]]",
+       "apihelp-query+exturlusage-description": "Énumérer les pages contenant une URL donnée.",
+       "apihelp-query+exturlusage-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page.\n;title:Ajoute le titre et l’ID de l’espace de noms de la page.\n;url:Ajoute l’URL utilisée dans la page.",
+       "apihelp-query+exturlusage-param-protocol": "Protocole de l’URL. Si vide et que $1query est rempli, le protocole est « http ». Le laisser avec $1query vide pour lister tous les liens externes.",
+       "apihelp-query+exturlusage-param-query": "Rechercher une chaîne sans protocole. Voyez [[Special:LinkSearch]]. Le laisser vide liste tous les liens externes.",
+       "apihelp-query+exturlusage-param-namespace": "Les espaces de nom à énumérer.",
+       "apihelp-query+exturlusage-param-limit": "Combien de pages renvoyer.",
+       "apihelp-query+exturlusage-param-expandurl": "Étendre les URLs relatives au protocole avec le protocole canonique.",
+       "apihelp-query+exturlusage-example-simple": "Afficher les pages avec un lien vers http://www.mediawiki.org",
+       "apihelp-query+filearchive-description": "Énumérer séquentiellement tous les fichiers supprimés.",
+       "apihelp-query+filearchive-param-from": "Le titre de l’image auquel démarrer l’énumération.",
+       "apihelp-query+filearchive-param-to": "Le titre de l’image auquel arrêter l’énumération.",
+       "apihelp-query+filearchive-param-prefix": "Rechercher tous les titres d’image qui commencent par cette valeur.",
+       "apihelp-query+filearchive-param-limit": "Combien d’images renvoyer au total.",
+       "apihelp-query+filearchive-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+filearchive-param-sha1": "Hachage SHA1 de l’image. Écrase $1sha1base36.",
+       "apihelp-query+filearchive-param-sha1base36": "Hachage SHA1 de l’image en base 36 (utilisé dans MédiaWiki).",
+       "apihelp-query+filearchive-param-prop": "Quelle information obtenir sur l’image :\n;sha1:Ajoute le hachage SHA-1 pour l’image.\n;timestamp:Ajoute l÷’horodatage pour la version téléchargée.\n;user:Ajoute l’utilisateur qui a téléchargé la version de l’image.\n;size:Ajoute la taille de l’image en octets et la hauteur, la largeur et le nombre de page (si c’est applicable).\n;dimensions:Alias pour la taille.\n;description:Ajoute la description de la version de l’image.\n;parseddescription:Analyser la description de la version.\n;mime:Ajoute le MIME de l’image.\n;mediatype:Ajoute le type de média de l’image.\n;metadata:Liste les métadonnées Exif pour la version de l’image.\n;bitdepth:Ajoute la profondeur de bit de la version.\n;archivename:Ajoute le nom de fichier de la version d’archive pour les versions autres que la dernière.",
+       "apihelp-query+filearchive-example-simple": "Afficher une liste de tous les fichiers supprimés",
+       "apihelp-query+filerepoinfo-description": "Renvoyer les méta-informations sur les référentiels d’image configurés dans le wiki.",
+       "apihelp-query+filerepoinfo-param-prop": "Quelles propriétés du référentiel récupérer (il peut y en avoir plus de disponibles sur certains wikis) :\n;apiurl:URL de l’API du référentiel - utile pour obtenir les infos de l’image depuis l’hôte.\n;name:La clé du référentiel - utilisé par ex. dans $wgForeignFileRepos et les valeurs de retour de imageinfo.\n;displayname:Le nom lisible du wiki référentiel.\n;rooturl:URL racine des chemins d’image.\n;local:Si ce référentiel est le référentiel local ou non.",
+       "apihelp-query+filerepoinfo-example-simple": "Obtenir l’information sur les référentiels de fichier",
+       "apihelp-query+fileusage-description": "Trouver toutes les pages qui utilisent les fichiers donnés.",
+       "apihelp-query+fileusage-param-prop": "Quelles propriétés obtenir :\n;pageid:ID de chaque page.\n;title:Titre de chaque page.\n;redirect:Marque si la page est une redirection.",
+       "apihelp-query+fileusage-param-namespace": "Inclure uniquement les pages dans ces espaces de nom.",
+       "apihelp-query+fileusage-param-limit": "Combien renvoyer.",
+       "apihelp-query+fileusage-param-show": "Afficher uniquement les éléments qui correspondent à ces critères :\n;redirect:Afficher uniquement les redirections.\n;!redirects:Afficher uniquement les non-redirections.",
+       "apihelp-query+fileusage-example-simple": "Obtenir une liste des pages utilisant [[:File:Example.jpg]]",
+       "apihelp-query+fileusage-example-generator": "Obtenir l’information sur les pages utilisant [[:File:Example.jpg]]",
+       "apihelp-query+imageinfo-description": "Renvoyer l’information de fichier et l’historique de téléchargement.",
+       "apihelp-query+imageinfo-param-prop": "Quelles informations obtenir du fichier :\n;timestamp:Ajoute l’horodatage de la version téléchargée.\n;user:Ajoute l’utilisateur qui a téléchargé chaque version du fichier.\n;userid:Ajoute l’ID de l’utilisateur qui a téléchargé chaque version du fichier.\n;comment:Commentaire sur la version.\n;parsedcomment:Analyser le commentaire sur cette version.\n;canonicaltitle:Ajoute le titre canonique du fichier.\n;url:Fournit l’URL du fichier et la page de description.\n;size:Ajoute la taille du fichier en octets et la hauteur, la largeur et le nombre de pages (si applicable).\n;dimensions:Alias pour la taille.\n;sha1:Ajoute le hachage SHA-1 pour le fichier.\n;mime:Ajoute le type MIME du fichier.\n;thumbmime:Ajoute le type MIME de la vignette de l’image (nécessite l’URL et le paramètre $1urlwidth).\n;mediatype:Ajoute le type de média du fichier.\n;metadata:Liste les métadonnées Exif de la version du fichier.\n;commonmetadata:Liste les métadonnées génériques du format du fichier pour la version du fichier.\n;extmetadata:Liste les métadonnées mises en forme combinées depuis différentes sources. Les résultats sont au format HTML.\n;archivename:Ajoute le nom de fichier de la version d’archive pour les versions autres que la dernière.\n;bitdepth:Ajoute la profondeur de bit de la version.\n;uploadwarning:Utilisé par la page Special:Upload pour obtenir de l’information sur un fichier existant. Non prévu pour être utilisé en dehors du cœur de MédiaWiki.",
+       "apihelp-query+imageinfo-param-limit": "Combien de révision de fichier renvoyer par fichier.",
+       "apihelp-query+imageinfo-param-start": "Horodatage auquel démarrer la liste.",
+       "apihelp-query+imageinfo-param-end": "Horodatage auquel arrêter la liste.",
+       "apihelp-query+imageinfo-param-urlwidth": "Si $2prop=url est défini, une URL vers une image à l’échelle de cette largeur sera renvoyée.\nPour des raisons de performance si cette option est utilisée, pas plus de $1 images mises à l’échelle seront renvoyées.",
+       "apihelp-query+imageinfo-param-urlheight": "Similaire à $1urlwidth.",
+       "apihelp-query+imageinfo-param-metadataversion": "Version de métadonnées à utiliser. Si « latest » est spécifié, utiliser la dernière version. Par défaut à « 1 » pour la compatibilité ascendante.",
+       "apihelp-query+imageinfo-param-extmetadatalanguage": "Quelle langue pour analyser extmetadata. Cela affecte à la fois quelle traduction analyser, s’il y en a plusieurs, et comment les choses comme les nombres et d’autres valeurs sont mises en forme.",
+       "apihelp-query+imageinfo-param-extmetadatamultilang": "Si des traductions pour la propriété extmetadata sont disponibles, les analyser toutes.",
+       "apihelp-query+imageinfo-param-extmetadatafilter": "Si spécifié et non vide, seules ces clés seront renvoyées pour $1prop=extmetadata.",
+       "apihelp-query+imageinfo-param-urlparam": "Une chaîne de paramètre spécifique à l’analyseur. Par exemple, les PDFs peuvent utiliser « page15-100px ». $1urlwidth doit être utilisé et être cohérent avec $1urlparam.",
+       "apihelp-query+imageinfo-param-localonly": "Rechercher les fichiers uniquement dans le référentiel local.",
+       "apihelp-query+imageinfo-example-simple": "Analyser les informations sur la version actuelle de [[:File:Albert Einstein Head.jpg]]",
+       "apihelp-query+imageinfo-example-dated": "Analyser les informations sur les versions de [[:File:Test.jpg]] depuis 2008",
+       "apihelp-query+images-description": "Renvoie tous les fichiers contenus dans les pages fournies.",
+       "apihelp-query+images-param-limit": "Combien de fichiers renvoyer.",
+       "apihelp-query+images-param-images": "Lister uniquement ces fichiers. Utile pour vérifier si une page donnée contient un fichier donné.",
+       "apihelp-query+images-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+images-example-simple": "Obtenir une liste des fichiers utilisés dans [[Main Page]]",
+       "apihelp-query+images-example-generator": "Obtenir des informations sur tous les fichiers utilisés dans [[Main Page]]",
+       "apihelp-query+imageusage-description": "Trouver toutes les pages qui utilisent le titre de l’image donné.",
+       "apihelp-query+imageusage-param-title": "Titre à rechercher. Impossible à utiliser avec $1pageid.",
+       "apihelp-query+imageusage-param-pageid": "ID de la page à rechercher. Impossible à utiliser avec $1title.",
+       "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-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-description": "Obtenir les informations de base sur la page.",
+       "apihelp-format-example-generic": "Mettre en forme le résultat de la requête dans le format $1",
+       "apihelp-dbg-description": "Extraire les données au format de var_export() de PHP.",
+       "apihelp-dbgfm-description": "Extraire les données au format de var_export() de PHP (affiché proprement en HTML).",
+       "apihelp-dump-description": "Extraire les données au format de var_dump() de PHP.",
+       "apihelp-dumpfm-description": "Extraire les données au format de var_dump() de PHP (affiché proprement en HTML).",
+       "apihelp-json-description": "Extraire les données au format JSON.",
+       "apihelp-json-param-callback": "Si spécifié, inclut la sortie dans l’appel d’une fonction fournie. Pour plus de sûreté, toutes les données spécifiques à l’utilisateur seront restreintes.",
+       "apihelp-json-param-utf8": "Si spécifié, encode la plupart (mais pas tous) des caractères non ASCII en URF-8 au lieu de les remplacer par leur séquence d’échappement hexadécimale.",
+       "apihelp-jsonfm-description": "Extraire les données au format JSON (affiché proprement en HTML).",
+       "apihelp-none-description": "Ne rien extraire.",
+       "apihelp-php-description": "Extraire les données au format sérialisé de PHP.",
+       "apihelp-phpfm-description": "Extraire les données au format sérialisé de PHP (affiché proprement en HTML).",
+       "apihelp-rawfm-description": "Extraire les données avec les éléments de débogage au format JSON (affiché proprement en HTML).",
+       "apihelp-txt-description": "Extraire les données au format de print_r() de PHP.",
+       "apihelp-txtfm-description": "Extraire les données au format de print_r() de PHP (affiché proprement en HTML).",
+       "apihelp-wddx-description": "Extraire les données au format WDDX.",
+       "apihelp-wddxfm-description": "Extraire les données au format WDDX (affiché proprement en HTML).",
+       "apihelp-xml-description": "Extraire les données au format XML.",
+       "apihelp-xml-param-xslt": "Si spécifié, ajoute &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-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-help-title": "Aide de l’API de MédiaWiki",
+       "api-help-lead": "Ceci est une page d’aide de l’API de MédiaWiki générée automatiquement.\n\nDocumentation et exemples : https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "Module principal",
+       "api-help-flag-deprecated": "Ce module est obsolète.",
+       "api-help-flag-internal": "<strong>Ce module est interne ou instable.</strong> Son fonctionnement peut être modifié sans préavis.",
+       "api-help-flag-readrights": "Ce module nécessite des droits de lecture.",
+       "api-help-flag-writerights": "Ce module nécessite des droits d’écriture.",
+       "api-help-flag-mustbeposted": "Ce module n’accepte que les requêtes POST.",
+       "api-help-flag-generator": "Ce module peut être utilisé comme générateur.",
+       "api-help-parameters": "{{PLURAL:$1|Paramètre|Paramètres}} :",
+       "api-help-param-deprecated": "Obsolète.",
+       "api-help-param-required": "Ce paramètre est obligatoire.",
+       "api-help-param-list": "{{PLURAL:$1|1=Une valeur|2=Valeurs (séparées par « {{!}} »)}} : $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Doit être vide|Peut être vide, ou $2}}",
+       "api-help-param-limit": "Pas plus de $1 autorisé.",
+       "api-help-param-limit2": "Pas plus de $1 autorisé ($2 pour les robots).",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=La valeur doit être inférieure|2=Les valeurs doivent être inférieures}} à $2.",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=La valeur ne doit pas être supérieure|2=Les valeurs ne doivent pas être supérieures}} à $3.",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=La valeur doit|2=Les valeurs doivent}} être entre $2 et $3.",
+       "api-help-param-upload": "Doit être envoyé comme un fichier importé utilisant multipart/form-data.",
+       "api-help-param-multi-separate": "Valeurs séparées par « | ».",
+       "api-help-param-multi-max": "Le nombre maximal de valeurs est {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} pour les robots).",
+       "api-help-param-default": "Par défaut : $1",
+       "api-help-param-default-empty": "Par défaut : <span class=\"apihelp-empty\">(vide)</span>",
+       "api-help-param-token": "Un jeton « $1 » récupéré par [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(aucune description)</span>",
+       "api-help-examples": "{{PLURAL:$1|Exemple|Exemples}} :",
+       "api-help-permissions": "{{PLURAL:$1|Droit|Droits}} :",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Accordé à}} : $2",
+       "api-help-right-apihighlimits": "Utiliser des valeurs plus hautes dans les requêtes de l’API (requêtes lentes : $1 ; requêtes rapides : $2). Les limites pour les requêtes lentes s’appliquent aussi aux paramètres multivalués.",
+       "api-credits-header": "Remerciements",
+       "api-credits": "Développeurs de l’API :\n* Roan Kattouw (développeur en chef Sept. 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (créateur, développeur en chef Sept. 2006–Sept. 2007)\n* Brad Jorsch (développeur en chef depuis 2013)\n\nVeuillez envoyer vos commentaires, suggestions et questions à mediawiki-api@lists.wikimedia.org\nou remplir un rapport de bogue sur https://bugzilla.wikimedia.org/."
+}
diff --git a/includes/api/i18n/fy.json b/includes/api/i18n/fy.json
new file mode 100644 (file)
index 0000000..8013687
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Robin0van0der0vliet"
+               ]
+       },
+       "apihelp-login-param-name": "Brûkersnamme.",
+       "apihelp-login-param-password": "Wachtwurd.",
+       "apihelp-userrights-param-user": "Brûkersnamme."
+}
diff --git a/includes/api/i18n/he.json b/includes/api/i18n/he.json
new file mode 100644 (file)
index 0000000..8363d0d
--- /dev/null
@@ -0,0 +1,40 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Guycn2",
+                       "Amire80"
+               ]
+       },
+       "apihelp-main-param-action": "איזו פעולה לבצע.",
+       "apihelp-main-param-format": "התבנית של הפלט.",
+       "apihelp-help-description": "הצגת עזרה עבור היחידות שצוינו.",
+       "apihelp-help-param-toc": "לכלול תוכן עניינים בפלט HTML.",
+       "apihelp-query+categories-param-limit": "כמה קטגוריות להחזיר.",
+       "apihelp-query+tokens-example-types": "אחזור אסימון של רשימת המעקב ואסימון של ניטור",
+       "apihelp-xml-param-xslt": "אם צוין, מוסיף &lt;xslt&gt; כגליון סגנונות. זה צריך להיות דף ויקי במרחב השם מדיה ויקי ששמו מסתיים ב\".xsl\".",
+       "api-help-title": "עזרה של MediaWiki API",
+       "api-help-lead": "זהו דף תיעוד של API שנוצר באופן אוטומטי.\n\nתיעוד ודוגמאות: https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "יחידה ראשית",
+       "api-help-flag-deprecated": "יחידה זו אינה מומלצת לשימוש.",
+       "api-help-flag-internal": "<strong>יחידה זו היא פנימית או לא יציבה.</strong>\nהפעולה שלה עשויה להשתנות ללא הודעה מוקדמת.",
+       "api-help-flag-readrights": "יחידה זו דורשת הרשאות קריאה.",
+       "api-help-flag-writerights": "יחידה זו דורשת הרשאות כתיבה.",
+       "api-help-flag-mustbeposted": "יחידה זו מקבלת רק בקשות POST.",
+       "api-help-parameters": "{{PLURAL:$1|פרמטר|פרמטרים}}:",
+       "api-help-param-required": "פרמטר זה נדרש.",
+       "api-help-param-list": "{{PLURAL:$1|1=ערך אחד|2=ערכים (מופרדים באמצעות \"{{!}}\")}}: $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-multi-separate": "הפרדה בין ערכים נעשית באמצעות \"|\".",
+       "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-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": "קרדיטים"
+}
diff --git a/includes/api/i18n/hu.json b/includes/api/i18n/hu.json
new file mode 100644 (file)
index 0000000..cdf9057
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Csega"
+               ]
+       },
+       "apihelp-userrights-param-userid": "Felhasználói azonosító."
+}
diff --git a/includes/api/i18n/ia.json b/includes/api/i18n/ia.json
new file mode 100644 (file)
index 0000000..e16e368
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "McDutchie"
+               ]
+       },
+       "apihelp-main-param-action": "Qual action exequer.",
+       "apihelp-main-param-format": "Le formato del resultato."
+}
diff --git a/includes/api/i18n/it.json b/includes/api/i18n/it.json
new file mode 100644 (file)
index 0000000..884eb21
--- /dev/null
@@ -0,0 +1,15 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Beta16"
+               ]
+       },
+       "api-help-parameters": "{{PLURAL:$1|Parametro|Parametri}}:",
+       "api-help-param-deprecated": "Deprecato.",
+       "api-help-param-required": "Questo parametro è obbligatorio.",
+       "api-help-param-default": "Predefinito: $1",
+       "api-help-param-default-empty": "Predefinito: <span class=\"apihelp-empty\">(vuoto)</span>",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(nessuna descrizione)</span>",
+       "api-help-examples": "{{PLURAL:$1|Esempio|Esempi}}:",
+       "api-credits-header": "Crediti"
+}
diff --git a/includes/api/i18n/ja.json b/includes/api/i18n/ja.json
new file mode 100644 (file)
index 0000000..46da945
--- /dev/null
@@ -0,0 +1,80 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Shirayuki"
+               ]
+       },
+       "apihelp-main-param-action": "実行する操作です。",
+       "apihelp-main-param-format": "出力する形式です。",
+       "apihelp-main-param-smaxage": "s-maxage ヘッダーにこの秒数を設定します。エラーがキャッシュされることはありません。",
+       "apihelp-main-param-maxage": "max-age ヘッダーにこの秒数を設定します。エラーがキャッシュされることはありません。",
+       "apihelp-main-param-assert": "\"user\" を設定した場合は利用者がログイン済みかどうかを、\"bot\" を指定した場合はボット権限があるかどうかを、それぞれ検証します。",
+       "apihelp-main-param-requestid": "任意の値を指定でき、その値が結果に含められます。リクエストを識別するために使用できます。",
+       "apihelp-main-param-servedby": "リクエストを処理したホスト名を結果に含めます。",
+       "apihelp-main-param-curtimestamp": "現在のタイムスタンプを結果に含めます。",
+       "apihelp-main-param-uselang": "メッセージの翻訳に使用する言語です。コードの一覧は [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]] に siprop=languages を付けることで取得できます。\"user\" を指定することで現在の利用者の個人設定の言語を、\"content\" を指定することでこのウィキの本文の言語を使用することもできます。",
+       "apihelp-help-description": "指定したモジュールのヘルプを表示します。",
+       "apihelp-help-param-modules": "ヘルプを表示するモジュールです (action= パラメーターおよび format= パラメーターの値、または \"main\")。\"+\" を使用して下位モジュールを指定できます。",
+       "apihelp-help-param-submodules": "指定したモジュールの下位モジュールのヘルプを含めます。",
+       "apihelp-help-param-recursivesubmodules": "下位モジュールのヘルプを再帰的に含めます。",
+       "apihelp-help-param-helpformat": "ヘルプの出力形式です。",
+       "apihelp-help-param-toc": "HTML 出力に目次を含めます。",
+       "apihelp-help-example-main": "メイン モジュールのヘルプ",
+       "apihelp-help-example-recursive": "すべてのヘルプを1つのページに",
+       "apihelp-help-example-help": "ヘルプ モジュール自身のヘルプ",
+       "apihelp-help-example-query": "2つの下位モジュールのヘルプ",
+       "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-json-description": "データを JSON 形式で出力します。",
+       "apihelp-json-param-callback": "指定すると、指定した関数呼び出しで出力をラップします。安全のため、利用者固有のデータはすべて制限されます。",
+       "apihelp-json-param-utf8": "指定すると、大部分の非 ASCII 文字 (すべてではありません) を、16 進のエスケープ シーケンスに置換する代わりに UTF-8 として符号化します。",
+       "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-wddx-description": "データを WDDX 形式で出力します。",
+       "apihelp-wddxfm-description": "データを WDDX 形式 (HTML に埋め込んだ形式) で出力します。",
+       "apihelp-xml-description": "データを XML 形式で出力します。",
+       "apihelp-xml-param-xslt": "指定すると、スタイルシートとして &lt;xslt&gt; を追加します。MediaWiki 名前空間の、ページ名の末尾が \".xsl\" のウィキページに対して使用すべきです。",
+       "apihelp-xml-param-includexmlnamespace": "指定すると、XML 名前空間を追加します。",
+       "apihelp-xmlfm-description": "データを XML 形式 (HTML に埋め込んだ形式) で出力します。",
+       "apihelp-yaml-description": "データを YAML 形式で出力します。",
+       "apihelp-yamlfm-description": "データを YAML 形式 (HTML に埋め込んだ形式) で出力します。",
+       "api-format-title": "MediaWiki API の結果",
+       "api-format-prettyprint-header": "このページは $1 形式を HTML で表現したものです。HTML はデバッグに役立ちますが、アプリケーションでの使用には適していません。\n\n出力形式を変更するには format パラメーターを指定します。$1 形式の非 HTML 版を閲覧するには、format=$2 を設定します。\n\n詳細情報については [https://www.mediawiki.org/wiki/API の完全な説明文書]または [[Special:ApiHelp/main|API のヘルプ]]を参照してください。",
+       "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-internal": "<strong>このモジュールは内部的または不安定です。</strong>動作が予告なく変更される場合があります。",
+       "api-help-flag-readrights": "このモジュールは読み取りの権限を必要とします。",
+       "api-help-flag-writerights": "このモジュールは書き込みの権限を必要とします。",
+       "api-help-flag-mustbeposted": "このモジュールは POST リクエストのみを受け付けます。",
+       "api-help-flag-generator": "このモジュールはジェネレーターとして使用できます。",
+       "api-help-parameters": "{{PLURAL:$1|パラメーター}}:",
+       "api-help-param-deprecated": "廃止予定です。",
+       "api-help-param-required": "このパラメーターは必須です。",
+       "api-help-param-list": "{{PLURAL:$1|1=値 (いずれか1つ)|2=値 (「{{!}}」で区切る)}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=空欄にしてください|空欄にするか、または $2}}",
+       "api-help-param-integer-min": "{{PLURAL:$1|値}}は $2 以上にしてください。",
+       "api-help-param-integer-max": "{{PLURAL:$1|値}}は $3 以下にしてください。",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|値}}は $2 以上 $3 以下にしてください。",
+       "api-help-param-upload": "multipart/form-data 形式でファイルをアップロードしてください。",
+       "api-help-param-multi-separate": "複数の値は「|」で区切ってください。",
+       "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": "API の開発者:\n* Roan Kattouw (2007年9月-2009年の主任開発者)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (作成者、2006年9月-2007年9月の主任開発者)\n* Brad Jorsch (2013年-現在の主任開発者)\n\nコメント、提案、質問は mediawiki-api@lists.wikimedia.org にお送りください。\nバグはこちらへご報告ください: https://bugzilla.wikimedia.org/"
+}
diff --git a/includes/api/i18n/jam.json b/includes/api/i18n/jam.json
new file mode 100644 (file)
index 0000000..3c44fd2
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Chabi1"
+               ]
+       },
+       "api-help-main-header": "Mien madyuul"
+}
diff --git a/includes/api/i18n/lb.json b/includes/api/i18n/lb.json
new file mode 100644 (file)
index 0000000..8fa5ca9
--- /dev/null
@@ -0,0 +1,84 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Robby"
+               ]
+       },
+       "apihelp-block-description": "E Benotzer spären.",
+       "apihelp-block-param-user": "Benotzernumm, IP-Adress oder IP-Beräich deen Dir späre wëllt.",
+       "apihelp-block-param-reason": "Grond fir ze spären.",
+       "apihelp-block-param-anononly": "Nëmmen anonym Benotzer spären (z. Bsp. anonym Ännerunge vun dëser IP ausschalten)",
+       "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 hier Benotzer- an Diskussiouns-Säiten iwwerwaachen.",
+       "apihelp-createaccount-description": "En neie Benotzerkont uleeën.",
+       "apihelp-createaccount-param-name": "Benotzernumm.",
+       "apihelp-createaccount-param-email": "E-Mail-Adress vum Benotzer (fakultativ).",
+       "apihelp-createaccount-param-realname": "Richtegen Numm vum Benotzer (fakultativ).",
+       "apihelp-delete-description": "Eng Säit läschen.",
+       "apihelp-delete-param-watch": "D'Säit op Är Iwwerwaachungslëscht derbäisetzen.",
+       "apihelp-delete-example-simple": "D'Haaptsäit läschen",
+       "apihelp-disabled-description": "Dëse Modul gouf ausgeschalt.",
+       "apihelp-edit-param-sectiontitle": "Den Titel fir en neien Abschnitt.",
+       "apihelp-edit-param-minor": "Kleng Ännerung.",
+       "apihelp-edit-param-bot": "Dës Ännerung als Bot-Ännerung markéieren.",
+       "apihelp-edit-param-watch": "D'Säit op Är Iwwerwaachungslëscht derbäisetzen.",
+       "apihelp-edit-example-edit": "Eng Säit änneren",
+       "apihelp-expandtemplates-param-title": "Titel vun der Säit.",
+       "apihelp-feedrecentchanges-param-hideminor": "Kleng Ännerunge verstoppen.",
+       "apihelp-feedrecentchanges-param-hideanons": "Ännerunge vun anonyme Benotzer verstoppen.",
+       "apihelp-feedrecentchanges-param-hideliu": "Ännerunge vu registréierte Benotzer verstoppen.",
+       "apihelp-feedrecentchanges-example-simple": "Rezent Ännerunge weisen",
+       "apihelp-help-example-recursive": "All Hëllef op enger Säit",
+       "apihelp-imagerotate-description": "Eent oder méi Biller dréinen.",
+       "apihelp-imagerotate-example-generator": "All Biller an der [[:Category:Flip]] ëm 180 Grad dréinen",
+       "apihelp-import-param-summary": "Resumé importéieren.",
+       "apihelp-login-param-name": "Benotzernumm.",
+       "apihelp-login-param-password": "Passwuert.",
+       "apihelp-move-description": "Eng Säit réckelen.",
+       "apihelp-move-param-ignorewarnings": "All Warnungen ignoréieren.",
+       "apihelp-options-example-reset": "All Astellungen zrécksetzen",
+       "apihelp-protect-example-protect": "Eng Säit spären",
+       "apihelp-query+allcategories-description": "All Kategorien opzielen.",
+       "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Kann nëmme mam $3user benotzt ginn.",
+       "apihelp-query+alldeletedrevisions-param-user": "Nëmme Versioune vun dësem Benotzer opzielen.",
+       "apihelp-query+alldeletedrevisions-param-excludeuser": "Versioune vun dësem Benotzer net opzielen.",
+       "apihelp-query+allusers-description": "All registréiert Benotzer opzielen.",
+       "apihelp-query+allusers-param-activeusers": "Nëmme Benotzer opzielen déi an de leschten $1 {{PLURAL:$1|Dag|Deeg}} aktiv waren.",
+       "apihelp-query+blocks-description": "Lëscht vun de gespaarte Benotzer an IP-Adressen.",
+       "apihelp-query+blocks-example-simple": "Lëscht vun de Spären",
+       "apihelp-query+categories-description": "All Kategorien opzielen zu deenen dës Säit gehéiert.",
+       "apihelp-query+categorymembers-description": "All Säiten aus enger bestëmmter Kategorie opzielen.",
+       "apihelp-query+categorymembers-example-simple": "Déi éischt 10 Säiten aus der [[:Category:Physics]] kréien",
+       "apihelp-query+deletedrevisions-param-excludeuser": "Versioune vun dësem Benotzer net opzielen.",
+       "apihelp-query+deletedrevs-param-unique": "Nëmmen eng Versioun fir all Säit weisen.",
+       "apihelp-query+filearchive-example-simple": "Eng Lëscht vun alle geläschte Fichiere weisen",
+       "apihelp-query+imageinfo-param-urlheight": "Ähnlech wéi $1urlwidth.",
+       "apihelp-query+images-example-simple": "Eng Lëscht vun de Fichiere kréien déi op der [[Main Page|Haaptsäit]] benotzt ginn",
+       "apihelp-query+imageusage-example-simple": "Säite weisen déi [[:File:Albert Einstein Head.jpg]] benotzen",
+       "apihelp-query+langlinks-param-lang": "Nëmme Sproochlinke mat dësem Sproochcode zréckginn.",
+       "apihelp-query+protectedtitles-param-namespace": "Nëmmen Titelen aus dësen Nummraim opzielen.",
+       "apihelp-query+recentchanges-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
+       "apihelp-query+recentchanges-example-simple": "Rezent Ännerunge weisen",
+       "apihelp-query+revisions-example-last5": "Déi lescht 5 Versioune vun der \"Haaptsäit\" kréien",
+       "apihelp-query+usercontribs-description": "All Ännerunge vun engem Benotzer kréien.",
+       "apihelp-query+watchlist-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
+       "apihelp-query+watchlist-param-excludeuser": "Ännerunge vun dësem Benotzer net opzielen.",
+       "apihelp-query+watchlistraw-param-show": "Nëmmen Elementer opzielen déi dëse Critèren entspriechen.",
+       "apihelp-query+watchlistraw-example-simple": "Säite vum aktuelle Benotzer senger Iwwerwaachungslëscht opzielen",
+       "apihelp-revisiondelete-description": "Versioune läschen a restauréieren.",
+       "apihelp-revisiondelete-param-reason": "Grond fir ze Läschen oder ze Restauréieren.",
+       "apihelp-rsd-example-simple": "Den RSD-Schema exportéieren",
+       "apihelp-unblock-description": "D'Spär vun engem Benotzer ophiewen.",
+       "apihelp-unblock-param-reason": "Grond fir d'Spär opzehiewen",
+       "apihelp-undelete-param-reason": "Grond fir ze restauréieren.",
+       "apihelp-undelete-example-page": "[[Main Page]] restauréieren",
+       "apihelp-upload-param-watch": "D'Säit iwwerwaachen.",
+       "apihelp-userrights-param-user": "Benotzernumm.",
+       "apihelp-userrights-param-userid": "Benotzer Id.",
+       "apihelp-userrights-param-reason": "Grond fir d'Ännerung.",
+       "apihelp-watch-example-watch": "D'Säit \"Haaptsäit\" iwwerwaachen",
+       "api-help-param-deprecated": "Vereelst.",
+       "api-help-param-required": "Dëse Parameter ass obligatoresch.",
+       "api-help-examples": "{{PLURAL:$1|Beispill|Beispiler}}:"
+}
diff --git a/includes/api/i18n/lv.json b/includes/api/i18n/lv.json
new file mode 100644 (file)
index 0000000..b24e5f6
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Papuass"
+               ]
+       },
+       "apihelp-userrights-param-userid": "Lietotāja ID:"
+}
diff --git a/includes/api/i18n/mk.json b/includes/api/i18n/mk.json
new file mode 100644 (file)
index 0000000..ffd7079
--- /dev/null
@@ -0,0 +1,354 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bjankuloski06"
+               ]
+       },
+       "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 ЧПП]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Поштенски список]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Соопштенија за Прилогот]\n* [https://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts Грешки и барања]\n</div>\n<strong>Статус:</strong> Сите ставки на страницава би требало да работат, но Прилогот сепак е во активна разработка, што значи дека може да се смени во секое време. Објавите за измени можете да ги дознавате ако се пријавите на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ поштенскиот список „the mediawiki-api-announce“].\n\n<strong>Погрешни барања:</strong> Кога Прилогот ќе добие погрешни барања, ќе се испрати HTTP-заглавие со клучот „MediaWiki-API-Error“ и потоа на вредностите на заглавието и шифрата на грешката што ќе се појават ќе им биде зададена истата вредност. ПОвеќе информации ќе најдете на https://www.mediawiki.org/wiki/API:Errors_and_warnings.",
+       "apihelp-main-param-action": "Кое дејство да се изврши.",
+       "apihelp-main-param-format": "Формат на изводот.",
+       "apihelp-main-param-maxlag": "Максималниот заостаток може да се користи кога МедијаВики е воспоставен на грозд умножен од базата. За да спречите дополнителни заостатоци од дејства, овој параметар му наложува на клиентот да почека додека заостатокот не се намали под укажаната вредност. Во случај на преголем заостаток, системт ја дава грешката со код „maxlag“ со порака од обликот „Го чекам $host: има заостаток од $lag секунди“.<br />Погл. https://www.mediawiki.org/wiki/Manual:Maxlag_parameter за повеќе информации.",
+       "apihelp-main-param-smaxage": "Задајте му олку секунди на заглавитето s-maxage. Грешките никогаш не се чуваат во меѓускладот.",
+       "apihelp-main-param-maxage": "Задајте му олку секунди на заглавитето max-age. Грешките никогаш не се чуваат во меѓускладот.",
+       "apihelp-main-param-assert": "Провери дали корисникот е најавен ако е зададено „user“ или дали го има корисничкото право на бот, ако е зададено „bot“.",
+       "apihelp-main-param-requestid": "Тука внесената вредност ќе биде вклучена во извештајот. Може да се користи за разликување на барањата.",
+       "apihelp-main-param-servedby": "Вклучи го домаќинското име што го услужило барањето во резултатите.",
+       "apihelp-main-param-curtimestamp": "Бклучи тековно време и време и датум во резултатот.",
+       "apihelp-main-param-origin": "Кога му пристапувате на Пирлогот користејќи повеќедоменско AJAX-барање (CORS), задајте му го на ова изворниот домен. Ова мора да се вклучи во секое подготвително барање и затоа мора да биде дел од URI на барањето (не главната содржина во POST). Ова мора точно да се совпаѓа со еден од изворниците на заглавието Origin:, така што мора да е зададен на нешто како http://en.wikipedia.org or https://meta.wikimedia.org. Ако овој параметар не се совпаѓа со заглавието Origin:, ќе се појави одговор 403. Ако се совпаѓа, а изворникот е на бел список (на допуштени), тогаш ќе се зададе ззаглавието Контрола на пристап-Изворник.",
+       "apihelp-main-param-uselang": "Јазик за преведување на пораките. Список на јазични кодови ќе најдете на [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo&siprop=languages]], или пак укажете „user“ за да го користите тековно зададениот јазик корисникот.",
+       "apihelp-block-description": "Блокирај корисник.",
+       "apihelp-block-param-user": "Корисничко име, IP-адреса или IP-опсег ако сакате да блокирате.",
+       "apihelp-block-param-expiry": "Време на истек. Може да биде релативно (на пр. „5 месеци“ или „2 недели“) или пак апсолутно (на пр. „2014-09-18T12:34:56Z“). Ако го зададете „бесконечно“, „неодредено“ или „никогаш“, блокот ќе трае засекогаш.",
+       "apihelp-block-param-reason": "Причина за блокирање.",
+       "apihelp-block-param-anononly": "Блокирај само анонимни корисници (т.е. оневозможи анонимно уредување од оваа IP-адреса).",
+       "apihelp-block-param-nocreate": "Оневозможи создавање кориснички сметки.",
+       "apihelp-block-param-autoblock": "Автоматски блокирај ја последно употребената IP-адреса и сите понатамошни IP-адреси од кои лицето ќе се обиде да се најави.",
+       "apihelp-block-param-noemail": "Оневозможи му на корисникот да испаќа е-пошта преку викито. (Го бара правото „блокирање е-пошта“).",
+       "apihelp-block-param-hidename": "Скриј го корисничкото име од дневникот на блокирања. (Го бара правото „скривање корисник“)",
+       "apihelp-block-param-allowusertalk": "Овозможи му на корисникот да си ја уредува сопствената страница за разговор (зависи од $wgBlockAllowsUTEdit).",
+       "apihelp-block-param-reblock": "Ако корисникот е веќе блокиран, наметни врз постоечкиот блок.",
+       "apihelp-block-param-watchuser": "Набљудувај ја корисничката страница и страницата за разговор на овој корисник или IP-адреса",
+       "apihelp-block-example-ip-simple": "Блокирај ја IP-адресата 192.0.2.5 три дена со причината „Прва опомена“",
+       "apihelp-block-example-user-complex": "Блокирај го корисникот Вандал (Vandal) бесконечно со причината „Вандализам“ и оневозможи создавање на нови сметки и праќање е-пошта",
+       "apihelp-clearhasmsg-description": "Ја отстранува ознаката „hasmsg“ од тековниот корисник.",
+       "apihelp-clearhasmsg-example-1": "Отстрани ја ознаката „hasmsg“ од тековниот корисник",
+       "apihelp-compare-description": "Добивање на разлика помеѓу две страници.\n\nМора да се добие број на преработката, наслов на странивата или пак нејзина назнака. Важи и за „од“ и за „на“.",
+       "apihelp-compare-param-fromtitle": "Прв наслов за споредба.",
+       "apihelp-compare-param-fromid": "Прва назнака на страница за споредба.",
+       "apihelp-compare-param-fromrev": "Прва преработка за споредба.",
+       "apihelp-compare-param-totitle": "Втор наслов за споредба.",
+       "apihelp-compare-param-toid": "Втора назнака на страница за споредба.",
+       "apihelp-compare-param-torev": "Бтора преработка за споредба.",
+       "apihelp-compare-example-1": "Дај разлика помеѓу преработките 1 и 2",
+       "apihelp-createaccount-description": "Создај нова корисничка сметка.",
+       "apihelp-createaccount-param-name": "Корисничко име.",
+       "apihelp-createaccount-param-password": "Лозинка (се занемарува ако е зададено $1mailpassword).",
+       "apihelp-createaccount-param-domain": "Домен за надворешна заверка (незадолжително).",
+       "apihelp-createaccount-param-token": "Шифра за создавање сметка добиена во првото барање.",
+       "apihelp-createaccount-param-email": "Е-пошта на корисникот (незадолжително).",
+       "apihelp-createaccount-param-realname": "Вистинско име на корисникот (незадолжително).",
+       "apihelp-createaccount-param-mailpassword": "Ако му се зададе било каква вредност, тогаш на корисникот ќе му биде испратена случајна лозинка.",
+       "apihelp-createaccount-param-reason": "Незадолжителна прочина за создавање на сметката која ќе стои во дневниците.",
+       "apihelp-createaccount-param-language": "Јазичен код кој ќе биде стандарден за корисникот (незадолжително, по основно: јазикот на самото вики).",
+       "apihelp-createaccount-example-pass": "Создај го корисникот „testuser“ со лозинката „test123“",
+       "apihelp-createaccount-example-mail": "Создај го корисникот „testmailuser“ и испрати случајно-создадена лозинка по е-пошта",
+       "apihelp-delete-description": "Избриши страница.",
+       "apihelp-delete-param-title": "Наслов на страницата што сакате да ја избришете. Не може да се користи заедно со $1pageid.",
+       "apihelp-delete-param-pageid": "Назнака на страницата што сакате да ја избришете. Не може да се користи заедно со $1title.",
+       "apihelp-delete-param-reason": "Причина за бришење. Ако не се зададе, ќе се наведе автоматска причина.",
+       "apihelp-delete-param-watch": "Додај ја страницата во набљудуваните.",
+       "apihelp-delete-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
+       "apihelp-delete-param-unwatch": "Отстрани ја страницата од набљудуваните.",
+       "apihelp-delete-param-oldimage": "Името на страта слика за бришење според добиеното од [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+       "apihelp-delete-example-simple": "Избриши ја Главната страница",
+       "apihelp-delete-example-reason": "Избриши ја Главната страница со причината „Подготовка за преместување“",
+       "apihelp-disabled-description": "Модулот е деактивиран.",
+       "apihelp-edit-description": "Создај или уреди страници.",
+       "apihelp-edit-param-title": "Наслов на страницата што сакате да ја уредите. Не може да се користи заедно со $1pageid.",
+       "apihelp-edit-param-pageid": "Назнака на страницата што сакате да ја уредите. Не може да се користи заедно со $1title.",
+       "apihelp-edit-param-section": "Број на поднасловот. 0 за првиот, „new“ за нов.",
+       "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-starttimestamp": "Датум и време кога сте го почнале уредувањето, кои се користат за утврдување на спротиставености во уредувањата. Соодветната вредност се добива користејќи [[Special:ApiHelp/main|curtimestamp]] кога ќе почнете со уредување (на пр. кога ќе се вчита содржината што ќе ја уредувате).",
+       "apihelp-edit-param-recreate": "Занемари ги грешките што се појавуваат во врска со статијата што е избришана во меѓувреме.",
+       "apihelp-edit-param-createonly": "Не ја уредувај страницата ако веќе постои.",
+       "apihelp-edit-param-nocreate": "Дај грешка ако страницата не постои.",
+       "apihelp-edit-param-watch": "Додај ја страницата во набљудуваните.",
+       "apihelp-edit-param-unwatch": "Отстрани ја страницата од набљудуваните.",
+       "apihelp-edit-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
+       "apihelp-edit-param-md5": "MD5-тарабата на параметарот $1text, или параметрите $1prependtext и $1appendtext поврзани. Ако е зададено, уредувањето нема да се изврши без тарабата да биде исправна.",
+       "apihelp-edit-param-prependtext": "Ставете го текстов на почетокот од страницата. Го заменува  $1text.",
+       "apihelp-edit-param-appendtext": "Ставете го текстов на крајот од страницата. Го заменува $1text.\n\nКористете $1section=new наместо овој параметар за да приложите кон новиот поднаслов.",
+       "apihelp-edit-param-undo": "Отповикај ја преработкава. Ги заменува $1text, $1prependtext и $1appendtext.",
+       "apihelp-edit-param-undoafter": "Отповикај ги преработките од $1undo до оваа. Ако не е зададено, отповикај само една.",
+       "apihelp-edit-param-redirect": "Автоматски решавај пренасочувања.",
+       "apihelp-edit-param-contentformat": "Форматот за серијализација на содржината што се користи во вносниот текст.",
+       "apihelp-edit-param-contentmodel": "Содржински модел на новата содржина.",
+       "apihelp-edit-param-token": "Шифрата треба секогаш да се испраќа како последниот параметар, или барем по параметарот $1text.",
+       "apihelp-edit-example-edit": "Уреди страница",
+       "apihelp-edit-example-prepend": "Стави _&#95;NOTOC_&#95; пред страницата",
+       "apihelp-edit-example-undo": "Отповикај ги преработките од 13579 до 13585 со автоматски опис",
+       "apihelp-emailuser-description": "Испрати е-пошта на корисник.",
+       "apihelp-emailuser-param-target": "На кој корисник да му се испрати е-поштата.",
+       "apihelp-emailuser-param-subject": "Наслов.",
+       "apihelp-emailuser-param-text": "Содржина.",
+       "apihelp-emailuser-param-ccme": "Прати ми примерок и мене.",
+       "apihelp-emailuser-example-email": "Испрати е-пошта на корисникот „WikiSysop“ со текстот „Содржина“",
+       "apihelp-expandtemplates-description": "Ги проширува сите шаблони во викитекст.",
+       "apihelp-expandtemplates-param-title": "Наслов на страница.",
+       "apihelp-expandtemplates-param-text": "Викитекст за претворање.",
+       "apihelp-expandtemplates-param-prop": "Кои информации треба да ги добиете:\n;wikitext:The expanded wikitext.\n;categories: Категориите присутно во вносот кои не се претставени во викитекстуалниот извод.\n;volatile: Дали изводот е месно врзан и не треба да се преупотребува на други места во страницата.\n;ttl: Максималното време по кое треба да се поништи меѓускладираниот резултат.\n;parsetree: XML-дрвото на расчленување за изводот.\nИмајте на ум дека ако не изберете никаква вредност, резултатот ќе го содржи викитекстот, но изводот ќе биде во застарен формат.",
+       "apihelp-expandtemplates-param-includecomments": "Дали во изводот да се вклучени HTML-коментари.",
+       "apihelp-expandtemplates-param-generatexml": "Создај XML-дрво на расчленување (заменето со $1prop=parsetree).",
+       "apihelp-expandtemplates-example-simple": "Прошири го викитекстот „<nowiki>{{Project:Sandbox}}</nowiki>“",
+       "apihelp-feedcontributions-description": "Дава канал со придонеси на корисник.",
+       "apihelp-feedcontributions-param-feedformat": "Формат на каналот.",
+       "apihelp-feedcontributions-param-user": "За кои корисници да се прикажуваат придонесите.",
+       "apihelp-feedcontributions-param-namespace": "По кој именски простор да се филтрираат придонесите:",
+       "apihelp-feedcontributions-param-year": "Од година (и порано):",
+       "apihelp-feedcontributions-param-month": "Од месец (и порано):",
+       "apihelp-feedcontributions-param-tagfilter": "Филтрирај придонеси што имаат ознаки.",
+       "apihelp-feedcontributions-param-deletedonly": "Прикажувај само избришани придонеси.",
+       "apihelp-feedcontributions-param-toponly": "Прикажувај само последни преработки.",
+       "apihelp-feedcontributions-param-newonly": "Прикажувај само новосоздадени страници",
+       "apihelp-feedcontributions-param-showsizediff": "Покажувај ја големинската разлика меѓу преработките.",
+       "apihelp-feedcontributions-example-simple": "Покажувај придонеси на [[Корисник:Пример]]",
+       "apihelp-feedrecentchanges-description": "Дава канал со скорешни промени.",
+       "apihelp-feedrecentchanges-param-feedformat": "Форматот на каналот.",
+       "apihelp-feedrecentchanges-param-namespace": "На кој именски простор да се ограничат резултатите.",
+       "apihelp-feedrecentchanges-param-invert": "Сите именски простори освен избраниот.",
+       "apihelp-feedrecentchanges-param-associated": "Вклучи придружни именски простори (разговор или главен).",
+       "apihelp-feedrecentchanges-param-days": "На кои денови да се ограничат резултатите.",
+       "apihelp-feedrecentchanges-param-limit": "Максималниот број на резултати за прикажување.",
+       "apihelp-feedrecentchanges-param-from": "Прикажи ги промените оттогаш.",
+       "apihelp-feedrecentchanges-param-hideminor": "Скриј ги ситните промени.",
+       "apihelp-feedrecentchanges-param-hidebots": "Скриј ги промените напарвени од ботови.",
+       "apihelp-feedrecentchanges-param-hideanons": "Скриј ги промените направени од анонимни корисници.",
+       "apihelp-feedrecentchanges-param-hideliu": "Скриј ги промените направени од регистрирани корисници.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Скриј ги испатролираните промени.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Скриј ги моите промени.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Филтрирање по ознака.",
+       "apihelp-feedrecentchanges-param-target": "Прикажи само промени на страници што водат од оваа.",
+       "apihelp-feedrecentchanges-param-showlinkedto": "Наместо тоа, прикажи ги промените на страниците поврзани со избраната страница.",
+       "apihelp-feedrecentchanges-example-simple": "Прикажи скорешни промени",
+       "apihelp-feedrecentchanges-example-30days": "Прикажувај скорешни промени 30 дена",
+       "apihelp-feedwatchlist-description": "Дава канал од набљудуваните.",
+       "apihelp-feedwatchlist-param-feedformat": "Форматот на каналот.",
+       "apihelp-feedwatchlist-param-hours": "Испиши страници изменети во рок од олку часови отсега.",
+       "apihelp-feedwatchlist-param-linktosections": "Давај ме право на изменетите делови, ако е можно.",
+       "apihelp-feedwatchlist-example-default": "Прикажи го каналот од набљудуваните.",
+       "apihelp-feedwatchlist-example-all6hrs": "Прикажи ги сите промени во набљудуваните во последните 6 часа",
+       "apihelp-filerevert-description": "Врати податотека на претходна верзија.",
+       "apihelp-filerevert-param-filename": "Име на целната податотека, без претставката „Податотека:“.",
+       "apihelp-filerevert-param-comment": "Коментар за подигањето.",
+       "apihelp-filerevert-param-archivename": "Архивски назив на преработката што ја повраќате.",
+       "apihelp-filerevert-example-revert": "Врати ја Wiki.png на верзијата од 2011-03-05T15:27:40Z",
+       "apihelp-help-description": "Прикажувај помош за укажаните модули.",
+       "apihelp-help-param-modules": "Модули за приказ на помош за (вредности на параметрите action= и format=, или пак „main“). Може да се укажат подмодули со „+“.",
+       "apihelp-help-param-submodules": "Прикажувај и помош за подмодули на именуваниот модул.",
+       "apihelp-help-param-recursivesubmodules": "Прикажувај и помош за подмодули рекурзивно.",
+       "apihelp-help-param-helpformat": "Формат на изводот на помошта.",
+       "apihelp-help-param-wrap": "Обвиткај го изводот како станрадна одѕивна структура од прилотот.",
+       "apihelp-help-param-toc": "Вклучи табела со содржина во HTML-изводот.",
+       "apihelp-help-example-main": "Помош за главниот модул",
+       "apihelp-help-example-recursive": "Сета помош на една страница",
+       "apihelp-help-example-help": "Помош за самиот помошен модул",
+       "apihelp-help-example-query": "Помош за два подмодула за барања",
+       "apihelp-imagerotate-description": "Сврти една или повеќе слики.",
+       "apihelp-imagerotate-param-rotation": "За колку степени да се сврти надесно.",
+       "apihelp-imagerotate-example-simple": "Сврти ја [[:Податотека:Пример.png]] за 90 степени",
+       "apihelp-imagerotate-example-generator": "Сврти ги сите слики во [[:Категорија:Некоја]] за 180 степени",
+       "apihelp-import-description": "Увези страница од друго вики или XML-податотека.\n\nИмајте на ум дека POST на HTTP мора да се изведе како подигање на податотеката (т.е. користејќи повеќеделни податоци/податоци од образец) кога ја испраќате податотеката за параметарот „xml“.",
+       "apihelp-import-param-summary": "Увези опис.",
+       "apihelp-import-param-xml": "Подигната XML-податотека.",
+       "apihelp-import-param-interwikisource": "За меѓујазични увози: од кое вики да се увезе.",
+       "apihelp-import-param-interwikipage": "За меѓујазични увози: страница за увоз.",
+       "apihelp-import-param-fullhistory": "За меѓујазични увози:: увези ја целата историја, а не само тековната верзија.",
+       "apihelp-import-param-templates": "За меѓујазични увози: увези ги и сите вклучени шаблони.",
+       "apihelp-import-param-namespace": "За меѓујазични увози: увези во овој именски простор.",
+       "apihelp-import-param-rootpage": "Увези како потстраница на страницава.",
+       "apihelp-import-example-import": "Увези [[meta:Help:Parserfunctions]] во именскиот простор 100 со целата историја.",
+       "apihelp-login-description": "Најавете се и добијте колачиња за заверка.\n\nВо случај кога ќе се најавите успешно, потребните колачиња ќе се придодадат кон заглавијата на HTTP-одѕивот. Во случај да не успеете да се најавите, понатамошните обиди може да се ограничат за да се ограничат нападите со автоматизирано погодување на лозинката.",
+       "apihelp-login-param-name": "Корисничко име.",
+       "apihelp-login-param-password": "Лозинка.",
+       "apihelp-login-param-domain": "Домен (незадолжително).",
+       "apihelp-login-param-token": "Најавна шифра добиена со првото барање.",
+       "apihelp-login-example-gettoken": "Набави најавна шифра.",
+       "apihelp-login-example-login": "Најава",
+       "apihelp-logout-description": "Одјави се и исчисти ги податоците на седницата.",
+       "apihelp-logout-example-logout": "Одјави го тековниот корисник",
+       "apihelp-move-description": "Премести страница.",
+       "apihelp-move-param-from": "Наслов на страницата што сакате да ја преместите. Не може да се користи заедно со $1fromid.",
+       "apihelp-move-param-fromid": "Назнака на страницата што сакате да ја преместите. Не може да се користи заедно со $1from.",
+       "apihelp-move-param-to": "Како сакате да гласи новиот наслов на страницата.",
+       "apihelp-move-param-reason": "Причина за преместувањето.",
+       "apihelp-move-param-movetalk": "Премести ја и страницата за разговор, ако ја има.",
+       "apihelp-move-param-movesubpages": "Премести потстраници, ако има",
+       "apihelp-move-param-noredirect": "Не прави пренасочување.",
+       "apihelp-move-param-watch": "Додај ги страницата и пренасочувањето во набљудуваните.",
+       "apihelp-move-param-unwatch": "Отстрани ги страницата и пренасочувањето од набљудуваните.",
+       "apihelp-move-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
+       "apihelp-move-param-ignorewarnings": "Занемари предупредувања.",
+       "apihelp-move-example-move": "Премести го „Лош наслов“ на „Добар наслов“, неоставајќи пренасочување",
+       "apihelp-opensearch-description": "Пребарување на викито со протоколот OpenSearch.",
+       "apihelp-opensearch-param-search": "Низа за пребарување.",
+       "apihelp-opensearch-param-limit": "Максималниот број на резултати за прикажување.",
+       "apihelp-opensearch-param-namespace": "Именски простори за пребарување.",
+       "apihelp-opensearch-param-suggest": "Не прави ништо ако [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] е неточно.",
+       "apihelp-opensearch-param-format": "Формат на изводот.",
+       "apihelp-opensearch-example-te": "Најди страници што почнуваат со „Те“",
+       "apihelp-options-param-reset": "Ги враќа поставките по основно.",
+       "apihelp-options-param-resetkinds": "Писок на типови можности за повраток кога е зададена можноста „$1reset“.",
+       "apihelp-options-param-change": "Список на промени во форматот name=value (на пр. skin=vector). Вредностите не треба да содржат исправени црти. Ако не зададете вредност (дури ни знак за равенство), на пр., можност|другаможност|..., ќе биде зададена вредноста на можноста по основно.",
+       "apihelp-options-param-optionname": "Назив на можноста што треба да ѝ се зададе на вредноста дадена од „$1optionvalue“.",
+       "apihelp-options-param-optionvalue": "Вредноста на можноста укажана од „$1optionnam“. Може да содржи исправени црти.",
+       "apihelp-options-example-reset": "Врати ги сите поставки по основно",
+       "apihelp-options-example-change": "Смени ги поставките „skinЗ“ и „hideminor“",
+       "apihelp-options-example-complex": "Врати ги сите нагодувања по основно, а потоа задај ги „skin“ и „nickname“",
+       "apihelp-paraminfo-description": "Набави информации за прилошки (API) модули.",
+       "apihelp-paraminfo-param-modules": "Список на називи на модули (вредности на параметрите action= и format=, или пак „main“). Може да се укажат подмодули со „+“.",
+       "apihelp-paraminfo-param-helpformat": "Формат на помошните низи.",
+       "apihelp-paraminfo-param-querymodules": "Список на називи на модули за барања (вредност на параметарот prop=, meta= или list=). Користете го „$1modules=query+foo“ наместо „$1querymodules=foo“.",
+       "apihelp-paraminfo-param-mainmodule": "Добави информации и за главниот (врховен) модул. Користете го „$1modules=main“ наместо тоа.",
+       "apihelp-parse-param-summary": "Опис за расчленување.",
+       "apihelp-parse-param-preview": "Расчлени во прегледен режим.",
+       "apihelp-parse-param-sectionpreview": "Расчлени во прегледен режим на поднасловот (го овозможува и прегледниот режим).",
+       "apihelp-parse-param-disabletoc": "Изземи го преглед на содржината во изводеот.",
+       "apihelp-parse-param-contentformat": "Формат на серијализацијата на содржината во вносниот текст. Важи само кога се користи со $1text.",
+       "apihelp-parse-example-page": "Расчлени страница.",
+       "apihelp-parse-example-text": "Расчлени викитекст.",
+       "apihelp-parse-example-texttitle": "Расчлени страница, укажувајќи го насловот на страницата.",
+       "apihelp-parse-example-summary": "Расчлени опис.",
+       "apihelp-patrol-description": "Испатролирај страница или ревизија.",
+       "apihelp-patrol-param-rcid": "Назнака на спорешните промени за патролирање.",
+       "apihelp-patrol-param-revid": "Назнака на преработката за патролирање.",
+       "apihelp-patrol-example-rcid": "Испатролирај скорешна промена",
+       "apihelp-patrol-example-revid": "Патролирај праработка",
+       "apihelp-protect-description": "Смени го степенот на заштита на страница.",
+       "apihelp-protect-param-title": "Наслов на страница што се (од)заштитува. Не може да се користи заедно со $1pageid.",
+       "apihelp-protect-param-pageid": "Назнака на страница што се (од)заштитува. Не може да се користи заедно со $1title.",
+       "apihelp-protect-param-reason": "Причиина за (од)заштитување",
+       "apihelp-protect-example-protect": "Заштити страница",
+       "apihelp-purge-param-forcelinkupdate": "Поднови ги табелите со врски.",
+       "apihelp-purge-example-simple": "Превчитај ги „Главна страница“ и „Прилог“",
+       "apihelp-query-param-list": "Кои списоци да се набават.",
+       "apihelp-query-param-meta": "Кои метаподатоци да се набават.",
+       "apihelp-query+allcategories-description": "Наброј ги сите категории.",
+       "apihelp-query+allcategories-param-from": "Од која категорија да почне набројувањето.",
+       "apihelp-query+allcategories-param-to": "На која категорија да запре набројувањето.",
+       "apihelp-query+allcategories-param-dir": "Насока на подредувањето.",
+       "apihelp-query+backlinks-example-simple": "Прикажи врски до [[Главна страница|Главната страница]]",
+       "apihelp-query+backlinks-example-generator": "Дава информации за страниците што водат до [[Главна страница|Главната страница]]",
+       "apihelp-query+blocks-description": "Список на сите блокирани корисници и IP-адреси",
+       "apihelp-query+blocks-param-start": "Од кој датум и време да почне набројувањето.",
+       "apihelp-query+blocks-param-end": "На кој датум и време да запре набројувањето.",
+       "apihelp-query+blocks-param-ids": "Список на назнаки на блоковите за испис (незадолжително)",
+       "apihelp-query+blocks-param-users": "Список на корисници што ќе се пребаруваат (незадолжително)",
+       "apihelp-query+imageinfo-param-urlheight": "Слично на $1urlwidth.",
+       "apihelp-query+revisions-example-last5": "Дај ги последните 5 преработки на „Главна страница“",
+       "apihelp-query+revisions-example-first5": "Дај ги првите 5 преработки на „Главна страница“",
+       "apihelp-query+revisions-example-first5-after": "Дај ги првите 5 преработки на „Главна страница“ направени по 2006-05-01 (1 мај 2006 г.)",
+       "apihelp-query+revisions-example-first5-not-localhost": "Дај ги првите 5 преработки на „Главна страница“ кои не се направени од анонимниот корисник „127.0.0.1“",
+       "apihelp-query+revisions-example-first5-user": "Дај ги првите 5 преработки на „Главна страница“ кои се направени од корисникот „зададен од МедијаВики“ (MediaWiki default)",
+       "apihelp-query+search-example-simple": "Побарај „meaning“",
+       "apihelp-query+search-example-text": "Побарај го „meaning“ по текстовите",
+       "apihelp-query+search-example-generator": "Дај информации за страниците што излегуваат во резултатите од пребарувањето на „meaning“",
+       "apihelp-query+siteinfo-description": "Дај општи информации за мрежното место.",
+       "apihelp-upload-param-filename": "Целно име на податотеката.",
+       "apihelp-upload-param-comment": "Коментар при подигање. Се користи и како првичен текст на страницата за нови податотеки ако не е укажано „$1text“.",
+       "apihelp-upload-param-text": "Првичен текст на страницата за нови податотеки.",
+       "apihelp-upload-param-watch": "Набљудувај ја страницата.",
+       "apihelp-upload-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
+       "apihelp-upload-param-ignorewarnings": "Занемари предупредувања.",
+       "apihelp-upload-param-file": "Содржина на податотеката.",
+       "apihelp-upload-param-url": "Од која URL-адреса да се преземе податотеката.",
+       "apihelp-upload-param-filekey": "Клуч на претходното подигање кое е привремено складирано.",
+       "apihelp-upload-param-sessionkey": "Исто што и $1filekey. Се одржува за назадна складност.",
+       "apihelp-upload-param-stash": "Ако е зададено, опслужувачот нема да ја стави податотеката во складиштето за привремено чување.",
+       "apihelp-upload-param-filesize": "Големина на целото подигање.",
+       "apihelp-upload-param-offset": "Зафатнина на делот во бајти.",
+       "apihelp-upload-param-chunk": "Содржина на делот.",
+       "apihelp-upload-param-async": "Направи ги работите со потенцијално големи податотеки неусогласени, кога е можно.",
+       "apihelp-upload-param-asyncdownload": "Направи го добивањето на URL-адреса неусогласено.",
+       "apihelp-upload-param-leavemessage": "Ако се користи неусогласено преземање, остави порака на страницата за разговор на корисникот ако е готово.",
+       "apihelp-upload-param-statuskey": "Дај ја состојбата на подигнатост за овој податотечен клуч (подигање по URL-адреса).",
+       "apihelp-upload-param-checkstatus": "Дај ја состојбата на подигнатост само за дадениот податотечен клуч.",
+       "apihelp-upload-example-url": "Подигни од URL-адреса",
+       "apihelp-userrights-param-userid": "Корисничка назнака.",
+       "apihelp-userrights-param-add": "Стави го корисникот во следниве групи.",
+       "apihelp-userrights-param-remove": "Отстрани го корисникот од следниве групи.",
+       "apihelp-userrights-param-reason": "Причина за промената.",
+       "apihelp-watch-example-watch": "Набљудувај ја страницата „Главна страница“",
+       "apihelp-watch-example-unwatch": "Отстрани ја страницата „Главна страница“ од набљудуваните",
+       "apihelp-watch-example-generator": "Набљудувај ги првите неколку страници во главниот именски простор",
+       "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-json-description": "Давај го изводот во JSON-формат.",
+       "apihelp-json-param-callback": "Ако е укажано, го обвива изводот во даден повик на функција. За безбедност, ќе се ограничат сите податоци што се однесуваат на корисниците.",
+       "apihelp-json-param-utf8": "Ако е укажано, ја ги шифрира највеќето (но не сите) не-ASCII знаци како UTF-8 наместо да ги заменува со хексадецимални изводни низи.",
+       "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-wddx-description": "Давај го изводот во WDDX-формат.",
+       "apihelp-wddxfm-description": "Давај го изводот во WDDX-формат (подобрен испис во HTML).",
+       "apihelp-xml-description": "Давај го изводот во XML-формат.",
+       "apihelp-xml-param-xslt": "Ако е укажано, додава &lt;xslt&gt; како стилска страница. Ова треба да е викистраница во именскиот простор МедијаВики (MediaWiki) чиј наслов завршува со „.xsl“.",
+       "apihelp-xml-param-includexmlnamespace": "Ако е укажано, додава именски простор XML.",
+       "apihelp-xmlfm-description": "Давај го изводот во XML-формат (подобрен испис во HTML).",
+       "apihelp-yaml-description": "Давај го изводот во YAML-формат.",
+       "apihelp-yamlfm-description": "Давај го изводот во YAML-формат (подобрен испис во HTML).",
+       "api-format-title": "Резултат од Прилогот на МедијаВики",
+       "api-format-prettyprint-header": "Ја гледате HTML-претставата на форматот $1. HTML е добар за отстранување на грешки, но не е погоден за употреб во прилог.\n\nУкажете го параметарот за формат за да го смените изводниот формат. За да ги видите претставите на форматот $1 вон HTML, задајте format=$2.\n\nПовеќе информации ќе најдете на [https://www.mediawiki.org/wiki/API целосната документација], или пак [[Special:ApiHelp/main|помош со прилогот]].",
+       "api-orm-param-props": "Полиња за пребарување.",
+       "api-orm-param-limit": "Макс. број на редови во изводот.",
+       "api-pageset-param-titles": "Список на наслови на кои ќе се работи",
+       "api-pageset-param-pageids": "Список на назнаки за страници на кои ќе се работи",
+       "api-pageset-param-revids": "Список на назнаки на преработки на кои ќе се работи",
+       "api-pageset-param-generator": "Дај го списокот на страници на кои ќе се работи исполнувајќи го укажаниот модул за барање.\n\n'''НАПОМЕНА:''' називите на создавачките параметри мора да ја имаат претставката „g“. Погледајте ги примерите.",
+       "api-help-title": "Помош со Прилогот на МедијаВики",
+       "api-help-lead": "Ова е самосоздадена документациска страница за Прилогот на МедијаВики.\n\nDocumentation and examples: https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "Главен модул",
+       "api-help-flag-deprecated": "Овој модул е застарен.",
+       "api-help-flag-internal": "<strong>Овој модул е внатрешен или нестабилен.</strong> Работењето може да му се промени без предупредување.",
+       "api-help-flag-readrights": "За овој модул се потребни права на читање.",
+       "api-help-flag-writerights": "За овој модул се потребни права на пишување.",
+       "api-help-flag-mustbeposted": "Овој модул прифаќа само POST-барања.",
+       "api-help-flag-generator": "Овој модул може да се користи како создавач.",
+       "api-help-parameters": "{{PLURAL:$1|Параметар|Параметри}}:",
+       "api-help-param-deprecated": "Застарен.",
+       "api-help-param-required": "Овој параметар е задолжителен.",
+       "api-help-param-list": "{{PLURAL:$1|1=Една вредност|2=Вредности (одделени со „{{!}}“)}}: $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": "Мора да биде објавено како податотечно подигање користејќи податоци кои се повеќеделни или од образец.",
+       "api-help-param-multi-separate": "Одделувајте ги вредностите со „|“.",
+       "api-help-param-multi-max": "Максималниот број на вредности изнесува {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} за ботови).",
+       "api-help-param-default": "По основно: $1",
+       "api-help-param-default-empty": "По основно: <span class=\"apihelp-empty\">(празно)</span>",
+       "api-help-param-token": "Шифра „$1“ добиена од [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+       "api-help-param-token-webui": "За складност, се прифаќа и шифрата што се користи за обичниот кориснички посредник.",
+       "api-help-param-disabled-in-miser-mode": "Исклучено поради [https://www.mediawiki.org/wiki/Manual:$wgMiserMode скржавиот режим].",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(нема опис)</span>",
+       "api-help-examples": "{{PLURAL:$1|Пример|Примери}}:",
+       "api-help-permissions": "{{PLURAL:$1|Дозвола|Дозволи}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Доделена на}: $2",
+       "api-help-right-apihighlimits": "Уоптреба на повисоки ограничувања за приложни барања (бавни барања: $1; брзи барања: $2). Ограничувањата за бавни барања важат и за повеќевредносни параметри.",
+       "api-credits-header": "Признанија",
+       "api-credits": "Разработувачи на Прилогот:\n* Роан Катау (главен резработувач од септември 2007 до 2009 г.)\n* Виктор Василев\n* Брајан Тонг Мињ\n* Сем Рид\n* Јуриј Астрахан (создавач, главен разработувач од септември 2006 до септември 2007 г.)\n* Brad Jorsch (главен разработувач од 2013 г. до денес)\n\nВашите коментари, предлози и прашања испраќајте ги на mediawiki-api@lists.wikimedia.org\nа грешките пријавувајте ги на https://bugzilla.wikimedia.org/."
+}
diff --git a/includes/api/i18n/ms.json b/includes/api/i18n/ms.json
new file mode 100644 (file)
index 0000000..6b10584
--- /dev/null
@@ -0,0 +1,58 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Anakmalaysia"
+               ]
+       },
+       "apihelp-main-param-action": "Tindakan mana untuk dilakukan.",
+       "apihelp-main-param-format": "Format output.",
+       "apihelp-main-param-uselang": "Bahasa yang hendak digunakan untuk penterjemahan mesej. Senarai kod boleh diperoleh dari [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo&siprop=languages]], ataupun menyatakan \"user\" untuk menggunakan bahasa kegemaran pengguna semasa.",
+       "apihelp-expandtemplates-example-simple": "Perluaskan \"<nowiki>{{Project:Sandbox}}</nowiki>\" wikiteks",
+       "apihelp-help-param-helpformat": "Format output bantuan.",
+       "apihelp-help-example-main": "Bantuan untuk modul utama",
+       "apihelp-help-example-recursive": "Segala bantuan dalam satu halaman",
+       "apihelp-help-example-help": "Bantuan untuk modul bantuan",
+       "apihelp-userrights-param-userid": "ID pengguna.",
+       "apihelp-dbgfm-description": "Data output dalam format var_export() PHP (''pretty-print'' dalam HTML).",
+       "apihelp-dump-description": "Output data dalam format var_dump() PHP.",
+       "apihelp-dumpfm-description": "Data output dalam format var_dump() PHP (''pretty-print'' dalam HTML).",
+       "apihelp-json-description": "Data output dalam format JSON.",
+       "apihelp-json-param-utf8": "Jika dinyatakan, mengekodkan kenanyakan (tetapi bukan semua) aksara bukan ASCII sebagai UTF-8 daripada menggantikannya dengan jujukan lepasan perenambelasan.",
+       "apihelp-jsonfm-description": "Output data dalam format JSON (''pretty-print'' dalam HTML).",
+       "apihelp-php-description": "Data output dalam format PHP bersiri.",
+       "apihelp-txt-description": "Data output dalam format print_r() PHP.",
+       "apihelp-txtfm-description": "Data output dalam format print_r() PHP (''pretty-print'' dalam HTML).",
+       "apihelp-wddx-description": "Data output dalam format WDDX.",
+       "apihelp-wddxfm-description": "Output data dalam format WDDX (''pretty-print'' dalam HTML).",
+       "apihelp-xml-description": "Data output dalam format XML.",
+       "apihelp-xmlfm-description": "Data output dalam format XML (''pretty-print'' dalam HTML).",
+       "apihelp-yaml-description": "Data output dalam format YAML.",
+       "apihelp-yamlfm-description": "Output data dalam format YAML (''pretty-print'' dalam HTML).",
+       "api-format-title": "Hasil API MediaWiki",
+       "api-format-prettyprint-header": "Anda sedang menyaksikan representasi format $1 dalam bentuk HTML. HTML bagus untuk menyah pepijat, tetapi tidak sesuai untuk kegunaan aplikasi.\n\nNyatakan parameter format untuk mengubah format outputnya. Untuk melihat representasi format $1 yang bukan HTML, tetapkan format=$2.\n\nSila rujuk [https://www.mediawiki.org/wiki/API dokumentasi lengkapnya] ataupun [[Special:ApiHelp/main|bantuan API]] untuk keterangan lanjut.",
+       "api-help-title": "Bantuan API MediaWiki",
+       "api-help-lead": "Ini merupakan laman dokumentasi MediaWiki API yang dihasilkan secara automatik.\n\nDokumentasi dan contoh-contoh: https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "Modul utama",
+       "api-help-flag-deprecated": "Modul ini sudah lapuk.",
+       "api-help-flag-internal": "<strong>Modul ini dalaman atau tidak stabil.</strong> Operasinya boleh berubah tanpa amaran.",
+       "api-help-flag-readrights": "Modul ini memerlukan hak membaca.",
+       "api-help-flag-writerights": "Modul ini memerlukan hak menulis.",
+       "api-help-flag-mustbeposted": "Modul ini menerima permohonan POST sahaja.",
+       "api-help-flag-generator": "Modul ini boleh digunakan sebagai penjana.",
+       "api-help-parameters": "{{PLURAL:$1|Parameter}}:",
+       "api-help-param-deprecated": "Lapuk.",
+       "api-help-param-required": "Parameter ini diwajibkan.",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Mestilah kosong|Bolehlah kosong atau $2}}",
+       "api-help-param-limit2": "Dibenarkannya tidak lebih daripada $1 ($2 untuk bot).",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=Nilainya|2=Nilai-nilainya}} mesti tidak melebihi $3.",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=Nilainya|2=Nilai-nilainya}} mestilah antara $2 hingga $3.",
+       "api-help-param-multi-separate": "Asingkan nilai-nilai dengan \"|\".",
+       "api-help-param-multi-max": "Bilangan nilai maksimum adalah {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} untuk bot).",
+       "api-help-param-default": "Asal: $1",
+       "api-help-param-default-empty": "Asal: <span class=\"apihelp-empty\">(kosong)</span>",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(tiada keterangan)</span>",
+       "api-help-examples": "{{PLURAL:$1|Contoh|Contoh-contoh}}:",
+       "api-help-permissions": "{{PLURAL:$1|Keizinan}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Diberikan kepada}}: $2",
+       "api-credits-header": "Kredit"
+}
diff --git a/includes/api/i18n/nb.json b/includes/api/i18n/nb.json
new file mode 100644 (file)
index 0000000..6dcba40
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Jeblad"
+               ]
+       },
+       "apihelp-main-param-action": "Hvilken handling skal utføres",
+       "apihelp-main-param-format": "Resultatets format.",
+       "apihelp-main-param-servedby": "Inkluder navnet på tjeneren som utførte forespørselen i resultatene.",
+       "apihelp-main-param-curtimestamp": "Inkluder det nåværende tidsmerket i resultatet.",
+       "apihelp-dbg-description": "Resultatdata i PHP's var_export() format.",
+       "apihelp-dbgfm-description": "Resultatdata i PHP's var_export() format (pen utskrift i HTML).",
+       "apihelp-dump-description": "Resultatdata i PHP's var_export() format.",
+       "apihelp-dumpfm-description": "Resultatdata i PHP's var_export() format (pen utskrift i HTML).",
+       "apihelp-json-description": "Resultatdata i JSON-format.",
+       "apihelp-none-description": "Ingen resultat.",
+       "api-help-flag-readrights": "Denne modulen krever lesetilgang.",
+       "api-help-flag-writerights": "Denne modulen krever skrivetilgang.",
+       "api-help-flag-mustbeposted": "Denne modulen aksepterer bare POST forespørsler.",
+       "api-help-flag-generator": "Denne modulen kan brukes som en generator.",
+       "api-help-parameters": "{{PLURAL:$1|Parameter|Parametre}}:",
+       "api-help-param-deprecated": "Utgått.",
+       "api-help-param-required": "Denne parameteren er påkrevd."
+}
diff --git a/includes/api/i18n/nl.json b/includes/api/i18n/nl.json
new file mode 100644 (file)
index 0000000..8ead891
--- /dev/null
@@ -0,0 +1,34 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Siebrand",
+                       "Sjoerddebruin",
+                       "Robin0van0der0vliet",
+                       "Mar(c)"
+               ]
+       },
+       "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://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts Bugs & verzoeken]\n</div>\n<strong>Status:</strong> Alle funties 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-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-smaxage": "Stelt de header \"s-maxage\" in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
+       "apihelp-main-param-maxage": "Stelt de header \"max-age\" in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
+       "apihelp-block-description": "Gebruiker blokkeren.",
+       "apihelp-block-param-reason": "Reden voor blokkade.",
+       "apihelp-edit-example-edit": "Pagina bewerken",
+       "apihelp-emailuser-description": "Gebruiker e-mailen.",
+       "apihelp-emailuser-param-subject": "Onderwerp header.",
+       "apihelp-emailuser-param-text": "Mailbody",
+       "apihelp-expandtemplates-param-title": "Titel van de pagina.",
+       "apihelp-feedcontributions-param-year": "Van jaar (en eerder).",
+       "apihelp-feedcontributions-param-month": "Van maand (en eerder).",
+       "apihelp-login-param-name": "Gebruikersnaam.",
+       "apihelp-login-param-password": "Wachtwoord.",
+       "apihelp-login-param-domain": "Domein (optioneel).",
+       "apihelp-login-example-login": "Aanmelden",
+       "apihelp-move-description": "Pagina hernoemen.",
+       "api-help-parameters": "{{PLURAL:$1|Parameter|Parameters}}:",
+       "api-help-param-deprecated": "Verouderd.",
+       "api-help-param-default": "Standaard: $1",
+       "api-credits-header": "Vermeldingen"
+}
diff --git a/includes/api/i18n/pa.json b/includes/api/i18n/pa.json
new file mode 100644 (file)
index 0000000..96c8694
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Babanwalia"
+               ]
+       },
+       "apihelp-help-example-recursive": "ਇੱਕੋ ਸਫ਼ੇ 'ਤੇ ਸਾਰੀ ਮਦਦ"
+}
diff --git a/includes/api/i18n/pl.json b/includes/api/i18n/pl.json
new file mode 100644 (file)
index 0000000..7d89e3c
--- /dev/null
@@ -0,0 +1,74 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Chrumps",
+                       "Py64"
+               ]
+       },
+       "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-edit-example-edit": "Edytuj stronę",
+       "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-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-help-example-help": "Pomoc dla modułu pomocy",
+       "apihelp-move-description": "Przenieś stronę.",
+       "apihelp-protect-example-protect": "Zabezpiecz stronę",
+       "apihelp-query+search-description": "Wykonaj wyszukiwanie pełnotekstowe.",
+       "apihelp-query+watchlist-param-excludeuser": "Nie wyświetlaj zmian wykonanych przez tego użytkownika.",
+       "apihelp-unblock-param-reason": "Powód odblokowania.",
+       "apihelp-undelete-param-reason": "Powód przywracania.",
+       "apihelp-upload-param-filename": "Nazwa pliku docelowego.",
+       "apihelp-userrights-param-user": "Nazwa użytkownika.",
+       "apihelp-userrights-param-reason": "Powód zmiany.",
+       "apihelp-dbg-description": "Dane wyjściowe w formacie var_export() (funkcji PHP).",
+       "apihelp-dbgfm-description": "Dane wyjściowe w formacie var_export() (funkcji PHP) (prawidłowo wyświetlane w HTML).",
+       "apihelp-dump-description": "Dane wyjściowe w formacie var_dump() (funkcji PHP).",
+       "apihelp-dumpfm-description": "Dane wyjściowe w formacie var_dump() (funkcji PHP) (prawidłowo wyświetlane w HTML).",
+       "apihelp-json-description": "Dane wyjściowe w formacie JSON.",
+       "apihelp-jsonfm-description": "Dane wyjściowe w formacie JSON (prawidłowo wyświetlane w HTML).",
+       "apihelp-php-description": "Dane wyjściowe w serializowany formacie PHP.",
+       "apihelp-phpfm-description": "Dane wyjściowe w serializowanym formacie PHP (prawidłowo wyświetlane w HTML).",
+       "apihelp-txt-description": "Dane wyjściowe w formacie print_r() (funkcji PHP).",
+       "apihelp-txtfm-description": "Dane wyjściowe w formacie print_r() (funkcji PHP) (prawidłowo wyświetlane w HTML).",
+       "apihelp-wddx-description": "Dane wyjściowe w formacie WDDX.",
+       "apihelp-wddxfm-description": "Dane wyjściowe w formacie WDDX (prawidłowo wyświetlane w HTML).",
+       "apihelp-xml-description": "Dane wyjściowe w formacie XML.",
+       "apihelp-xml-param-xslt": "Jeśli określony, dodaje &lt;xslt&gt; jako arkusz styli. Powinna to być strona wiki w przestrzeni nazw MediaWiki, której nazwy stron kończą się na \".xsl\".",
+       "apihelp-xmlfm-description": "Dane wyjściowe w formacie XML (prawidłowo wyświetlane w HTML).",
+       "apihelp-yaml-description": "Dane wyjściowe w formacie YAML.",
+       "apihelp-yamlfm-description": "Dane wyjściowe w formacie YAML (prawidłowo wyświetlane w HTML).",
+       "api-format-title": "Wynik MediaWiki API",
+       "api-help-title": "Pomoc MediaWiki API",
+       "api-help-lead": "To jest automatycznie wygenerowana strona dokumentacji MediaWiki API.\nDokumentacja i przykłady: https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "Moduł główny",
+       "api-help-flag-deprecated": "Ten moduł jest przestarzały.",
+       "api-help-flag-internal": "<strong>Ten moduł jest wewnętrzny lub niestabilny.</strong> Jego działanie może się zmienić bez uprzedzenia.",
+       "api-help-flag-readrights": "Ten moduł wymaga praw odczytu.",
+       "api-help-flag-writerights": "Ten moduł wymaga praw zapisu.",
+       "api-help-flag-mustbeposted": "Ten moduł akceptuje tylko żądania POST.",
+       "api-help-flag-generator": "Ten moduł może być użyty jako generator.",
+       "api-help-parameters": "{{PLURAL:$1|Parametr|Parametry}}:",
+       "api-help-param-deprecated": "Przestarzałe.",
+       "api-help-param-required": "Ten parametr jest wymagany.",
+       "api-help-param-list": "{{PLURAL:$1|1=Jedna wartość|2=Wartości (oddziel z \"{{!}}\")}}: $2",
+       "api-help-param-limit": "Nie więcej niż $1 dozwolone.",
+       "api-help-param-limit2": "Nie więcej niż $1 ($2 dla botów) dozwolone.",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=Wartość|2=Wartości}} musza być mniejsze niż $2.",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=Wartość musi|2=Wartości muszą}} być nie większa niż $3.",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=Wartość musi|2=Wartości muszą}} być pomiędzy $2 a $3.",
+       "api-help-param-multi-separate": "Oddziel wartości z \"|\".",
+       "api-help-param-multi-max": "Maksymalna ilość 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>",
+       "api-help-examples": "{{PLURAL:$1|Przykład|Przykłady}}:",
+       "api-help-permissions": "{{PLURAL:$2|Uprawnienie|Uprawnienia}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Przydzielone dla}}: $2",
+       "api-credits-header": "Twórcy",
+       "api-credits": "Deweloperzy API:\n* Roan Kattouw (główny programista wrzesień 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (twórca, główny programista wrzesień 2006–wrzesień 2007)\n* Brad Jorsch (główny programista 2013–obecnie)\n\nProsimy wysyłać komentarze, sugestie i pytania do mediawiki-api@lists.wikimedia.org\nlub zgłoś błąd na https://bugzilla.wikimedia.org/."
+}
diff --git a/includes/api/i18n/pt.json b/includes/api/i18n/pt.json
new file mode 100644 (file)
index 0000000..27eaa94
--- /dev/null
@@ -0,0 +1,88 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Vitorvicentevalente"
+               ]
+       },
+       "apihelp-main-param-format": "O formato de saída.",
+       "apihelp-block-description": "Bloquear um utilizador.",
+       "apihelp-block-param-user": "Nome de utilizador(a), endereço ou gama de IP que pretende bloquear.",
+       "apihelp-block-param-nocreate": "Impedir criação de contas.",
+       "apihelp-createaccount-description": "Criar uma nova conta.",
+       "apihelp-createaccount-param-name": "Nome de utilizador(a).",
+       "apihelp-createaccount-param-email": "Endereço de correio eletrónico do utilizador (opcional).",
+       "apihelp-createaccount-param-realname": "Nome verdadeiro do utilizador (opcional).",
+       "apihelp-delete-description": "Eliminar uma página.",
+       "apihelp-delete-param-watch": "Adicionar esta página à lista de vigiadas.",
+       "apihelp-delete-param-unwatch": "Remover esta página da lista de vigiadas.",
+       "apihelp-delete-example-simple": "Eliminar Página Principal",
+       "apihelp-disabled-description": "O módulo foi desativado.",
+       "apihelp-edit-description": "Criar e editar páginas.",
+       "apihelp-edit-param-sectiontitle": "Título para uma nova seção.",
+       "apihelp-edit-param-text": "Conteúdo da página.",
+       "apihelp-edit-param-minor": "Edição menor.",
+       "apihelp-edit-param-bot": "Marcar esta edição como robô.",
+       "apihelp-edit-example-edit": "Editar uma página",
+       "apihelp-expandtemplates-param-title": "Título da página.",
+       "apihelp-feedcontributions-param-deletedonly": "Mostrar apenas contribuições eliminadas.",
+       "apihelp-feedcontributions-param-showsizediff": "Mostrar diferença de tamanho entre edições.",
+       "apihelp-feedrecentchanges-param-limit": "Número máximo de resultados a apresentar.",
+       "apihelp-feedrecentchanges-param-from": "Mostrar alterações desde então.",
+       "apihelp-feedrecentchanges-param-hideminor": "Ocultar edições menores.",
+       "apihelp-feedrecentchanges-param-hidebots": "Ocultar alterações feitas por robôs.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar alterações patrulhadas.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Ocultar alterações feitas por mim.",
+       "apihelp-feedrecentchanges-param-target": "Mostrar apenas mudanças em páginas afluentes a esta.",
+       "apihelp-feedrecentchanges-example-simple": "Mostrar mudanças recentes",
+       "apihelp-help-example-main": "Ajuda para o módulo principal",
+       "apihelp-help-example-recursive": "Toda a ajuda numa página",
+       "apihelp-login-param-name": "Nome de utilizador(a).",
+       "apihelp-login-param-password": "Palavra-passe.",
+       "apihelp-login-param-domain": "Domínio (opcional).",
+       "apihelp-login-example-login": "Entrar",
+       "apihelp-logout-description": "Terminar e limpar dados de sessão.",
+       "apihelp-move-description": "Mover uma página.",
+       "apihelp-move-param-noredirect": "Não criar um redirecionamento.",
+       "apihelp-move-param-ignorewarnings": "Ignorar quaisquer avisos.",
+       "apihelp-opensearch-param-limit": "Número máximo de resultados a apresentar.",
+       "apihelp-options-param-reset": "Reiniciar preferências para os padrões do sítio.",
+       "apihelp-options-example-reset": "Reiniciar todas as preferências",
+       "apihelp-patrol-description": "Patrulhar uma página ou edição.",
+       "apihelp-patrol-example-rcid": "Patrulhar uma mudança recente",
+       "apihelp-patrol-example-revid": "Patrulhar uma edição",
+       "apihelp-protect-example-protect": "Proteger uma página",
+       "apihelp-query+allcategories-description": "Enumerar todas as categorias.",
+       "apihelp-query+allpages-param-prefix": "Pesquisa para todos os títulos de páginas que comecem com este valor.",
+       "apihelp-query+allpages-example-generator": "Mostrar informação sobre 4 páginas que comecem com a letra \"T\"",
+       "apihelp-query+allusers-example-Y": "Lista de utilizadores que comecem com Y",
+       "apihelp-query+blocks-param-limit": "O número máximo de bloqueios a listar.",
+       "apihelp-query+categorymembers-description": "Lista de todas as páginas numa categoria fornecida.",
+       "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Modo|Modos}}: $2",
+       "apihelp-query+deletedrevs-param-excludeuser": "Não listar edições deste utilizador.",
+       "apihelp-query+deletedrevs-param-namespace": "Listar apenas as páginas neste domínio.",
+       "apihelp-query+filearchive-example-simple": "Mostrar lista de todos os ficheiros eliminados",
+       "apihelp-query+info-description": "Obter informação básica da página.",
+       "apihelp-query+recentchanges-example-simple": "Lista de mudanças recentes",
+       "apihelp-unblock-description": "Desbloquear um utilizador.",
+       "apihelp-unblock-param-reason": "Motivo para o desbloqueio.",
+       "apihelp-undelete-param-title": "Título da página a restaurar.",
+       "apihelp-upload-param-watch": "Vigiar página.",
+       "apihelp-upload-param-ignorewarnings": "Ignorar todos os avisos.",
+       "apihelp-userrights-param-user": "Nome de utilizador(a).",
+       "apihelp-userrights-param-userid": "ID de utilizador.",
+       "apihelp-userrights-param-add": "Adicionar o utilizador a estes grupos.",
+       "apihelp-userrights-param-remove": "Remover este utilizador destes grupos.",
+       "apihelp-watch-example-unwatch": "Deixar de vigiar a \"Página Principal\"",
+       "apihelp-json-description": "Dados de saída em formato JSON.",
+       "api-help-title": "Ajuda API da MediaWiki",
+       "api-help-main-header": "Módulo principal",
+       "api-help-flag-deprecated": "Este módulo está obsoleto.",
+       "api-help-parameters": "{{PLURAL:$1|Parâmetro|Parâmetros}}:",
+       "api-help-param-deprecated": "Obsoleto.",
+       "api-help-param-required": "Este parâmetro é obrigatório.",
+       "api-help-param-multi-separate": "Separe os valores com \"|\".",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(sem descrição)</span>",
+       "api-help-examples": "{{PLURAL:$1|Exemplo|Exemplos}}:",
+       "api-credits-header": "Créditos",
+       "api-credits": "Programadores API:\n* Roan Kattouw (programador principal Set 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (criador, programador-líder Set 2006–Set 2007)\n* Brad Jorsch (programador-líder 2013–presente)\n\nPor favor, envie os seus comentários, sugestões e perguntas para mediawiki-api@lists.wikimedia.org ou reporte um erro técnico em https://bugzilla.wikimedia.org/."
+}
diff --git a/includes/api/i18n/qqq.json b/includes/api/i18n/qqq.json
new file mode 100644 (file)
index 0000000..b81c2a6
--- /dev/null
@@ -0,0 +1,1004 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Liuxinyu970226",
+                       "Robby",
+                       "Shirayuki"
+               ]
+       },
+       "apihelp-main-description": "{{doc-apihelp-description|main}}",
+       "apihelp-main-param-action": "{{doc-apihelp-param|main|action}}",
+       "apihelp-main-param-format": "{{doc-apihelp-param|main|format}}",
+       "apihelp-main-param-maxlag": "{{doc-apihelp-param|main|maxlag}}\n\n\"$host\" and \"$lag\" are not variables and appear as is.",
+       "apihelp-main-param-smaxage": "{{doc-apihelp-param|main|smaxage}}",
+       "apihelp-main-param-maxage": "{{doc-apihelp-param|main|maxage}}",
+       "apihelp-main-param-assert": "{{doc-apihelp-param|main|assert}}",
+       "apihelp-main-param-requestid": "{{doc-apihelp-param|main|requestid}}",
+       "apihelp-main-param-servedby": "{{doc-apihelp-param|main|servedby}}",
+       "apihelp-main-param-curtimestamp": "{{doc-apihelp-param|main|curtimestamp}}",
+       "apihelp-main-param-origin": "{{doc-apihelp-param|main|origin}}",
+       "apihelp-main-param-uselang": "{{doc-apihelp-param|main|uselang}}",
+       "apihelp-block-description": "{{doc-apihelp-description|block}}",
+       "apihelp-block-param-user": "{{doc-apihelp-param|block|user}}",
+       "apihelp-block-param-expiry": "{{doc-apihelp-param|block|expiry}}",
+       "apihelp-block-param-reason": "{{doc-apihelp-param|block|reason}}",
+       "apihelp-block-param-anononly": "{{doc-apihelp-param|block|anononly}}",
+       "apihelp-block-param-nocreate": "{{doc-apihelp-param|block|nocreate}}",
+       "apihelp-block-param-autoblock": "{{doc-apihelp-param|block|autoblock}}",
+       "apihelp-block-param-noemail": "{{doc-apihelp-param|block|noemail}}",
+       "apihelp-block-param-hidename": "{{doc-apihelp-param|block|hidename}}",
+       "apihelp-block-param-allowusertalk": "{{doc-apihelp-param|block|allowusertalk}}",
+       "apihelp-block-param-reblock": "{{doc-apihelp-param|block|reblock}}",
+       "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|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-compare-param-fromrev": "{{doc-apihelp-param|compare|fromrev}}",
+       "apihelp-compare-param-totitle": "{{doc-apihelp-param|compare|totitle}}",
+       "apihelp-compare-param-toid": "{{doc-apihelp-param|compare|toid}}",
+       "apihelp-compare-param-torev": "{{doc-apihelp-param|compare|torev}}",
+       "apihelp-compare-example-1": "{{doc-apihelp-example|compare}}",
+       "apihelp-createaccount-description": "{{doc-apihelp-description|createaccount}}",
+       "apihelp-createaccount-param-name": "{{doc-apihelp-param|createaccount|name}}",
+       "apihelp-createaccount-param-password": "{{doc-apihelp-param|createaccount|password}}",
+       "apihelp-createaccount-param-domain": "{{doc-apihelp-param|createaccount|domain}}",
+       "apihelp-createaccount-param-token": "{{doc-apihelp-param|createaccount|token}}",
+       "apihelp-createaccount-param-email": "{{doc-apihelp-param|createaccount|email}}",
+       "apihelp-createaccount-param-realname": "{{doc-apihelp-param|createaccount|realname}}",
+       "apihelp-createaccount-param-mailpassword": "{{doc-apihelp-param|createaccount|mailpassword}}",
+       "apihelp-createaccount-param-reason": "{{doc-apihelp-param|createaccount|reason}}",
+       "apihelp-createaccount-param-language": "{{doc-apihelp-param|createaccount|language}}",
+       "apihelp-createaccount-example-pass": "{{doc-apihelp-example|createaccount}}",
+       "apihelp-createaccount-example-mail": "{{doc-apihelp-example|createaccount}}",
+       "apihelp-delete-description": "{{doc-apihelp-description|delete}}",
+       "apihelp-delete-param-title": "{{doc-apihelp-param|delete|title}}",
+       "apihelp-delete-param-pageid": "{{doc-apihelp-param|delete|pageid}}",
+       "apihelp-delete-param-reason": "{{doc-apihelp-param|delete|reason}}",
+       "apihelp-delete-param-watch": "{{doc-apihelp-param|delete|watch}}",
+       "apihelp-delete-param-watchlist": "{{doc-apihelp-param|delete|watchlist}}",
+       "apihelp-delete-param-unwatch": "{{doc-apihelp-param|delete|unwatch}}",
+       "apihelp-delete-param-oldimage": "{{doc-apihelp-param|delete|oldimage}}",
+       "apihelp-delete-example-simple": "{{doc-apihelp-example|delete}}",
+       "apihelp-delete-example-reason": "{{doc-apihelp-example|delete}}",
+       "apihelp-disabled-description": "{{doc-apihelp-description|disabled}}",
+       "apihelp-edit-description": "{{doc-apihelp-description|edit}}",
+       "apihelp-edit-param-title": "{{doc-apihelp-param|edit|title}}",
+       "apihelp-edit-param-pageid": "{{doc-apihelp-param|edit|pageid}}",
+       "apihelp-edit-param-section": "{{doc-apihelp-param|edit|section}}",
+       "apihelp-edit-param-sectiontitle": "{{doc-apihelp-param|edit|sectiontitle}}",
+       "apihelp-edit-param-text": "{{doc-apihelp-param|edit|text}}",
+       "apihelp-edit-param-summary": "{{doc-apihelp-param|edit|summary}}",
+       "apihelp-edit-param-minor": "{{doc-apihelp-param|edit|minor}}\n{{Identical|Minor edit}}",
+       "apihelp-edit-param-notminor": "{{doc-apihelp-param|edit|notminor}}",
+       "apihelp-edit-param-bot": "{{doc-apihelp-param|edit|bot}}",
+       "apihelp-edit-param-basetimestamp": "{{doc-apihelp-param|edit|basetimestamp}}",
+       "apihelp-edit-param-starttimestamp": "{{doc-apihelp-param|edit|starttimestamp}}",
+       "apihelp-edit-param-recreate": "{{doc-apihelp-param|edit|recreate}}",
+       "apihelp-edit-param-createonly": "{{doc-apihelp-param|edit|createonly}}",
+       "apihelp-edit-param-nocreate": "{{doc-apihelp-param|edit|nocreate}}",
+       "apihelp-edit-param-watch": "{{doc-apihelp-param|edit|watch}}",
+       "apihelp-edit-param-unwatch": "{{doc-apihelp-param|edit|unwatch}}",
+       "apihelp-edit-param-watchlist": "{{doc-apihelp-param|edit|watchlist}}",
+       "apihelp-edit-param-md5": "{{doc-apihelp-param|edit|md5}}",
+       "apihelp-edit-param-prependtext": "{{doc-apihelp-param|edit|prependtext}}",
+       "apihelp-edit-param-appendtext": "{{doc-apihelp-param|edit|appendtext}}",
+       "apihelp-edit-param-undo": "{{doc-apihelp-param|edit|undo}}",
+       "apihelp-edit-param-undoafter": "{{doc-apihelp-param|edit|undoafter}}",
+       "apihelp-edit-param-redirect": "{{doc-apihelp-param|edit|redirect}}",
+       "apihelp-edit-param-contentformat": "{{doc-apihelp-param|edit|contentformat}}",
+       "apihelp-edit-param-contentmodel": "{{doc-apihelp-param|edit|contentmodel}}",
+       "apihelp-edit-param-token": "{{doc-apihelp-param|edit|token}}",
+       "apihelp-edit-example-edit": "{{doc-apihelp-example|edit}}",
+       "apihelp-edit-example-prepend": "{{doc-apihelp-example|edit}}",
+       "apihelp-edit-example-undo": "{{doc-apihelp-example|edit}}",
+       "apihelp-emailuser-description": "{{doc-apihelp-description|emailuser}}",
+       "apihelp-emailuser-param-target": "{{doc-apihelp-param|emailuser|target}}",
+       "apihelp-emailuser-param-subject": "{{doc-apihelp-param|emailuser|subject}}",
+       "apihelp-emailuser-param-text": "{{doc-apihelp-param|emailuser|text}}",
+       "apihelp-emailuser-param-ccme": "{{doc-apihelp-param|emailuser|ccme}}",
+       "apihelp-emailuser-example-email": "{{doc-apihelp-example|emailuser}}",
+       "apihelp-expandtemplates-description": "{{doc-apihelp-description|expandtemplates}}",
+       "apihelp-expandtemplates-param-title": "{{doc-apihelp-param|expandtemplates|title}}",
+       "apihelp-expandtemplates-param-text": "{{doc-apihelp-param|expandtemplates|text}}",
+       "apihelp-expandtemplates-param-prop": "{{doc-apihelp-param|expandtemplates|prop}}",
+       "apihelp-expandtemplates-param-includecomments": "{{doc-apihelp-param|expandtemplates|includecomments}}",
+       "apihelp-expandtemplates-param-generatexml": "{{doc-apihelp-param|expandtemplates|generatexml}}",
+       "apihelp-expandtemplates-example-simple": "{{doc-apihelp-example|expandtemplates}}",
+       "apihelp-feedcontributions-description": "{{doc-apihelp-description|feedcontributions}}",
+       "apihelp-feedcontributions-param-feedformat": "{{doc-apihelp-param|feedcontributions|feedformat}}",
+       "apihelp-feedcontributions-param-user": "{{doc-apihelp-param|feedcontributions|user}}",
+       "apihelp-feedcontributions-param-namespace": "{{doc-apihelp-param|feedcontributions|namespace}}",
+       "apihelp-feedcontributions-param-year": "{{doc-apihelp-param|feedcontributions|year}}",
+       "apihelp-feedcontributions-param-month": "{{doc-apihelp-param|feedcontributions|month}}",
+       "apihelp-feedcontributions-param-tagfilter": "{{doc-apihelp-param|feedcontributions|tagfilter}}",
+       "apihelp-feedcontributions-param-deletedonly": "{{doc-apihelp-param|feedcontributions|deletedonly}}",
+       "apihelp-feedcontributions-param-toponly": "{{doc-apihelp-param|feedcontributions|toponly}}",
+       "apihelp-feedcontributions-param-newonly": "{{doc-apihelp-param|feedcontributions|newonly}}",
+       "apihelp-feedcontributions-param-showsizediff": "{{doc-apihelp-param|feedcontributions|showsizediff}}",
+       "apihelp-feedcontributions-example-simple": "{{doc-apihelp-example|feedcontributions}}",
+       "apihelp-feedrecentchanges-description": "{{doc-apihelp-description|feedrecentchanges}}",
+       "apihelp-feedrecentchanges-param-feedformat": "{{doc-apihelp-param|feedrecentchanges|feedformat}}",
+       "apihelp-feedrecentchanges-param-namespace": "{{doc-apihelp-param|feedrecentchanges|namespace}}",
+       "apihelp-feedrecentchanges-param-invert": "{{doc-apihelp-param|feedrecentchanges|invert}}",
+       "apihelp-feedrecentchanges-param-associated": "{{doc-apihelp-param|feedrecentchanges|associated}}",
+       "apihelp-feedrecentchanges-param-days": "{{doc-apihelp-param|feedrecentchanges|days}}",
+       "apihelp-feedrecentchanges-param-limit": "{{doc-apihelp-param|feedrecentchanges|limit}}",
+       "apihelp-feedrecentchanges-param-from": "{{doc-apihelp-param|feedrecentchanges|from}}",
+       "apihelp-feedrecentchanges-param-hideminor": "{{doc-apihelp-param|feedrecentchanges|hideminor}}",
+       "apihelp-feedrecentchanges-param-hidebots": "{{doc-apihelp-param|feedrecentchanges|hidebots}}",
+       "apihelp-feedrecentchanges-param-hideanons": "{{doc-apihelp-param|feedrecentchanges|hideanons}}",
+       "apihelp-feedrecentchanges-param-hideliu": "{{doc-apihelp-param|feedrecentchanges|hideliu}}",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "{{doc-apihelp-param|feedrecentchanges|hidepatrolled}}",
+       "apihelp-feedrecentchanges-param-hidemyself": "{{doc-apihelp-param|feedrecentchanges|hidemyself}}",
+       "apihelp-feedrecentchanges-param-tagfilter": "{{doc-apihelp-param|feedrecentchanges|tagfilter}}",
+       "apihelp-feedrecentchanges-param-target": "{{doc-apihelp-param|feedrecentchanges|target}}",
+       "apihelp-feedrecentchanges-param-showlinkedto": "{{doc-apihelp-param|feedrecentchanges|showlinkedto}}",
+       "apihelp-feedrecentchanges-example-simple": "{{doc-apihelp-example|feedrecentchanges}}",
+       "apihelp-feedrecentchanges-example-30days": "{{doc-apihelp-example|feedrecentchanges}}",
+       "apihelp-feedwatchlist-description": "{{doc-apihelp-description|feedwatchlist}}",
+       "apihelp-feedwatchlist-param-feedformat": "{{doc-apihelp-param|feedwatchlist|feedformat}}",
+       "apihelp-feedwatchlist-param-hours": "{{doc-apihelp-param|feedwatchlist|hours}}",
+       "apihelp-feedwatchlist-param-linktosections": "{{doc-apihelp-param|feedwatchlist|linktosections}}",
+       "apihelp-feedwatchlist-example-default": "{{doc-apihelp-example|feedwatchlist}}",
+       "apihelp-feedwatchlist-example-all6hrs": "{{doc-apihelp-example|feedwatchlist}}",
+       "apihelp-filerevert-description": "{{doc-apihelp-description|filerevert}}",
+       "apihelp-filerevert-param-filename": "{{doc-apihelp-param|filerevert|filename}}",
+       "apihelp-filerevert-param-comment": "{{doc-apihelp-param|filerevert|comment}}",
+       "apihelp-filerevert-param-archivename": "{{doc-apihelp-param|filerevert|archivename}}",
+       "apihelp-filerevert-example-revert": "{{doc-apihelp-example|filerevert}}",
+       "apihelp-help-description": "{{doc-apihelp-description|help}}",
+       "apihelp-help-param-modules": "{{doc-apihelp-param|help|modules}}",
+       "apihelp-help-param-submodules": "{{doc-apihelp-param|help|submodules}}",
+       "apihelp-help-param-recursivesubmodules": "{{doc-apihelp-param|help|recursivesubmodules}}",
+       "apihelp-help-param-helpformat": "{{doc-apihelp-param|help|helpformat}}",
+       "apihelp-help-param-wrap": "{{doc-apihelp-param|help|wrap}}",
+       "apihelp-help-param-toc": "{{doc-apihelp-param|help|toc}}",
+       "apihelp-help-example-main": "{{doc-apihelp-example|help}}",
+       "apihelp-help-example-recursive": "{{doc-apihelp-example|help}}",
+       "apihelp-help-example-help": "{{doc-apihelp-example|help}}",
+       "apihelp-help-example-query": "{{doc-apihelp-example|help}}",
+       "apihelp-imagerotate-description": "{{doc-apihelp-description|imagerotate}}",
+       "apihelp-imagerotate-param-rotation": "{{doc-apihelp-param|imagerotate|rotation}}",
+       "apihelp-imagerotate-example-simple": "{{doc-apihelp-example|imagerotate}}",
+       "apihelp-imagerotate-example-generator": "{{doc-apihelp-example|imagerotate}}",
+       "apihelp-import-description": "{{doc-apihelp-description|import}}",
+       "apihelp-import-param-summary": "{{doc-apihelp-param|import|summary}}",
+       "apihelp-import-param-xml": "{{doc-apihelp-param|import|xml}}",
+       "apihelp-import-param-interwikisource": "{{doc-apihelp-param|import|interwikisource}}",
+       "apihelp-import-param-interwikipage": "{{doc-apihelp-param|import|interwikipage}}",
+       "apihelp-import-param-fullhistory": "{{doc-apihelp-param|import|fullhistory}}",
+       "apihelp-import-param-templates": "{{doc-apihelp-param|import|templates}}",
+       "apihelp-import-param-namespace": "{{doc-apihelp-param|import|namespace}}",
+       "apihelp-import-param-rootpage": "{{doc-apihelp-param|import|rootpage}}",
+       "apihelp-import-example-import": "{{doc-apihelp-example|import}}",
+       "apihelp-login-description": "{{doc-apihelp-description|login}}",
+       "apihelp-login-param-name": "{{doc-apihelp-param|login|name}}\n{{Identical|Username}}",
+       "apihelp-login-param-password": "{{doc-apihelp-param|login|password}}\n{{Identical|Password}}",
+       "apihelp-login-param-domain": "{{doc-apihelp-param|login|domain}}",
+       "apihelp-login-param-token": "{{doc-apihelp-param|login|token}}",
+       "apihelp-login-example-gettoken": "{{doc-apihelp-example|login}}",
+       "apihelp-login-example-login": "{{doc-apihelp-example|login}}",
+       "apihelp-logout-description": "{{doc-apihelp-description|logout}}",
+       "apihelp-logout-example-logout": "{{doc-apihelp-example|logout}}",
+       "apihelp-move-description": "{{doc-apihelp-description|move}}",
+       "apihelp-move-param-from": "{{doc-apihelp-param|move|from}}",
+       "apihelp-move-param-fromid": "{{doc-apihelp-param|move|fromid}}",
+       "apihelp-move-param-to": "{{doc-apihelp-param|move|to}}",
+       "apihelp-move-param-reason": "{{doc-apihelp-param|move|reason}}",
+       "apihelp-move-param-movetalk": "{{doc-apihelp-param|move|movetalk}}",
+       "apihelp-move-param-movesubpages": "{{doc-apihelp-param|move|movesubpages}}",
+       "apihelp-move-param-noredirect": "{{doc-apihelp-param|move|noredirect}}",
+       "apihelp-move-param-watch": "{{doc-apihelp-param|move|watch}}",
+       "apihelp-move-param-unwatch": "{{doc-apihelp-param|move|unwatch}}",
+       "apihelp-move-param-watchlist": "{{doc-apihelp-param|move|watchlist}}",
+       "apihelp-move-param-ignorewarnings": "{{doc-apihelp-param|move|ignorewarnings}}",
+       "apihelp-move-example-move": "{{doc-apihelp-example|move}}",
+       "apihelp-opensearch-description": "{{doc-apihelp-description|opensearch}}",
+       "apihelp-opensearch-param-search": "{{doc-apihelp-param|opensearch|search}}",
+       "apihelp-opensearch-param-limit": "{{doc-apihelp-param|opensearch|limit}}",
+       "apihelp-opensearch-param-namespace": "{{doc-apihelp-param|opensearch|namespace}}",
+       "apihelp-opensearch-param-suggest": "{{doc-apihelp-param|opensearch|suggest}}",
+       "apihelp-opensearch-param-format": "{{doc-apihelp-param|opensearch|format}}",
+       "apihelp-opensearch-example-te": "{{doc-apihelp-example|opensearch}}",
+       "apihelp-options-description": "{{doc-apihelp-description|options}}",
+       "apihelp-options-param-reset": "{{doc-apihelp-param|options|reset}}",
+       "apihelp-options-param-resetkinds": "{{doc-apihelp-param|options|resetkinds}}",
+       "apihelp-options-param-change": "{{doc-apihelp-param|options|change}}",
+       "apihelp-options-param-optionname": "{{doc-apihelp-param|options|optionname}}",
+       "apihelp-options-param-optionvalue": "{{doc-apihelp-param|options|optionvalue}}",
+       "apihelp-options-example-reset": "{{doc-apihelp-example|options}}",
+       "apihelp-options-example-change": "{{doc-apihelp-example|options}}",
+       "apihelp-options-example-complex": "{{doc-apihelp-example|options}}",
+       "apihelp-paraminfo-description": "{{doc-apihelp-description|paraminfo}}",
+       "apihelp-paraminfo-param-modules": "{{doc-apihelp-param|paraminfo|modules}}",
+       "apihelp-paraminfo-param-helpformat": "{{doc-apihelp-param|paraminfo|helpformat}}",
+       "apihelp-paraminfo-param-querymodules": "{{doc-apihelp-param|paraminfo|querymodules}}",
+       "apihelp-paraminfo-param-mainmodule": "{{doc-apihelp-param|paraminfo|mainmodule}}",
+       "apihelp-paraminfo-param-pagesetmodule": "{{doc-apihelp-param|paraminfo|pagesetmodule}}",
+       "apihelp-paraminfo-param-formatmodules": "{{doc-apihelp-param|paraminfo|formatmodules}}",
+       "apihelp-paraminfo-example-1": "{{doc-apihelp-example|paraminfo}}",
+       "apihelp-parse-description": "{{doc-apihelp-description|parse}}",
+       "apihelp-parse-param-title": "{{doc-apihelp-param|parse|title}}",
+       "apihelp-parse-param-text": "{{doc-apihelp-param|parse|text}}",
+       "apihelp-parse-param-summary": "{{doc-apihelp-param|parse|summary}}",
+       "apihelp-parse-param-page": "{{doc-apihelp-param|parse|page}}",
+       "apihelp-parse-param-pageid": "{{doc-apihelp-param|parse|pageid}}",
+       "apihelp-parse-param-redirects": "{{doc-apihelp-param|parse|redirects}}",
+       "apihelp-parse-param-oldid": "{{doc-apihelp-param|parse|oldid}}",
+       "apihelp-parse-param-prop": "{{doc-apihelp-param|parse|prop}}",
+       "apihelp-parse-param-pst": "{{doc-apihelp-param|parse|pst}}",
+       "apihelp-parse-param-onlypst": "{{doc-apihelp-param|parse|onlypst}}",
+       "apihelp-parse-param-effectivelanglinks": "{{doc-apihelp-param|parse|effectivelanglinks}}",
+       "apihelp-parse-param-section": "{{doc-apihelp-param|parse|section}}",
+       "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-parse-param-preview": "{{doc-apihelp-param|parse|preview}}",
+       "apihelp-parse-param-sectionpreview": "{{doc-apihelp-param|parse|sectionpreview}}",
+       "apihelp-parse-param-disabletoc": "{{doc-apihelp-param|parse|disabletoc}}",
+       "apihelp-parse-param-contentformat": "{{doc-apihelp-param|parse|contentformat}}",
+       "apihelp-parse-param-contentmodel": "{{doc-apihelp-param|parse|contentmodel}}",
+       "apihelp-parse-example-page": "{{doc-apihelp-example|parse}}",
+       "apihelp-parse-example-text": "{{doc-apihelp-example|parse}}",
+       "apihelp-parse-example-texttitle": "{{doc-apihelp-example|parse}}",
+       "apihelp-parse-example-summary": "{{doc-apihelp-example|parse}}",
+       "apihelp-patrol-description": "{{doc-apihelp-description|patrol}}",
+       "apihelp-patrol-param-rcid": "{{doc-apihelp-param|patrol|rcid}}",
+       "apihelp-patrol-param-revid": "{{doc-apihelp-param|patrol|revid}}",
+       "apihelp-patrol-example-rcid": "{{doc-apihelp-example|patrol}}",
+       "apihelp-patrol-example-revid": "{{doc-apihelp-example|patrol}}",
+       "apihelp-protect-description": "{{doc-apihelp-description|protect}}",
+       "apihelp-protect-param-title": "{{doc-apihelp-param|protect|title}}",
+       "apihelp-protect-param-pageid": "{{doc-apihelp-param|protect|pageid}}",
+       "apihelp-protect-param-protections": "{{doc-apihelp-param|protect|protections}}",
+       "apihelp-protect-param-expiry": "{{doc-apihelp-param|protect|expiry}}",
+       "apihelp-protect-param-reason": "{{doc-apihelp-param|protect|reason}}",
+       "apihelp-protect-param-cascade": "{{doc-apihelp-param|protect|cascade}}",
+       "apihelp-protect-param-watch": "{{doc-apihelp-param|protect|watch}}",
+       "apihelp-protect-param-watchlist": "{{doc-apihelp-param|protect|watchlist}}",
+       "apihelp-protect-example-protect": "{{doc-apihelp-example|protect}}",
+       "apihelp-protect-example-unprotect": "{{doc-apihelp-example|protect}}",
+       "apihelp-protect-example-unprotect2": "{{doc-apihelp-example|protect}}",
+       "apihelp-purge-description": "{{doc-apihelp-description|purge}}",
+       "apihelp-purge-param-forcelinkupdate": "{{doc-apihelp-param|purge|forcelinkupdate}}",
+       "apihelp-purge-param-forcerecursivelinkupdate": "{{doc-apihelp-param|purge|forcerecursivelinkupdate}}",
+       "apihelp-purge-example-simple": "{{doc-apihelp-example|purge}}",
+       "apihelp-purge-example-generator": "{{doc-apihelp-example|purge}}",
+       "apihelp-query-description": "{{doc-apihelp-description|query}}",
+       "apihelp-query-param-prop": "{{doc-apihelp-param|query|prop}}",
+       "apihelp-query-param-list": "{{doc-apihelp-param|query|list}}",
+       "apihelp-query-param-meta": "{{doc-apihelp-param|query|meta}}",
+       "apihelp-query-param-indexpageids": "{{doc-apihelp-param|query|indexpageids}}",
+       "apihelp-query-param-export": "{{doc-apihelp-param|query|export}}",
+       "apihelp-query-param-exportnowrap": "{{doc-apihelp-param|query|exportnowrap}}",
+       "apihelp-query-param-iwurl": "{{doc-apihelp-param|query|iwurl}}",
+       "apihelp-query-param-continue": "{{doc-apihelp-param|query|continue}}",
+       "apihelp-query-param-rawcontinue": "{{doc-apihelp-param|query|rawcontinue}}",
+       "apihelp-query-example-revisions": "{{doc-apihelp-example|query}}",
+       "apihelp-query-example-allpages": "{{doc-apihelp-example|query}}",
+       "apihelp-query+allcategories-description": "{{doc-apihelp-description|query+allcategories}}",
+       "apihelp-query+allcategories-param-from": "{{doc-apihelp-param|query+allcategories|from}}",
+       "apihelp-query+allcategories-param-to": "{{doc-apihelp-param|query+allcategories|to}}",
+       "apihelp-query+allcategories-param-prefix": "{{doc-apihelp-param|query+allcategories|prefix}}",
+       "apihelp-query+allcategories-param-dir": "{{doc-apihelp-param|query+allcategories|dir}}",
+       "apihelp-query+allcategories-param-min": "{{doc-apihelp-param|query+allcategories|min}}",
+       "apihelp-query+allcategories-param-max": "{{doc-apihelp-param|query+allcategories|max}}",
+       "apihelp-query+allcategories-param-limit": "{{doc-apihelp-param|query+allcategories|limit}}",
+       "apihelp-query+allcategories-param-prop": "{{doc-apihelp-param|query+allcategories|prop}}",
+       "apihelp-query+allcategories-example-size": "{{doc-apihelp-example|query+allcategories}}",
+       "apihelp-query+allcategories-example-generator": "{{doc-apihelp-example|query+allcategories}}",
+       "apihelp-query+alldeletedrevisions-description": "{{doc-apihelp-description|query+alldeletedrevisions}}",
+       "apihelp-query+alldeletedrevisions-paraminfo-useronly": "{{doc-apihelp-paraminfo|query+alldeletedrevisions|useronly}}",
+       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "{{doc-apihelp-paraminfo|query+alldeletedrevisions|nonuseronly}}",
+       "apihelp-query+alldeletedrevisions-param-start": "{{doc-apihelp-param|query+alldeletedrevisions|start}}",
+       "apihelp-query+alldeletedrevisions-param-end": "{{doc-apihelp-param|query+alldeletedrevisions|end}}",
+       "apihelp-query+alldeletedrevisions-param-from": "{{doc-apihelp-param|query+alldeletedrevisions|from}}",
+       "apihelp-query+alldeletedrevisions-param-to": "{{doc-apihelp-param|query+alldeletedrevisions|to}}",
+       "apihelp-query+alldeletedrevisions-param-prefix": "{{doc-apihelp-param|query+alldeletedrevisions|prefix}}",
+       "apihelp-query+alldeletedrevisions-param-tag": "{{doc-apihelp-param|query+alldeletedrevisions|tag}}",
+       "apihelp-query+alldeletedrevisions-param-user": "{{doc-apihelp-param|query+alldeletedrevisions|user}}",
+       "apihelp-query+alldeletedrevisions-param-excludeuser": "{{doc-apihelp-param|query+alldeletedrevisions|excludeuser}}",
+       "apihelp-query+alldeletedrevisions-param-namespace": "{{doc-apihelp-param|query+alldeletedrevisions|namespace}}",
+       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "{{doc-apihelp-param|query+alldeletedrevisions|miser-user-namespace}}",
+       "apihelp-query+alldeletedrevisions-param-generatetitles": "{{doc-apihelp-param|query+alldeletedrevisions|generatetitles}}",
+       "apihelp-query+alldeletedrevisions-example-user": "{{doc-apihelp-example|query+alldeletedrevisions}}",
+       "apihelp-query+alldeletedrevisions-example-ns-main": "{{doc-apihelp-example|query+alldeletedrevisions}}",
+       "apihelp-query+allfileusages-description": "{{doc-apihelp-description|query+allfileusages}}",
+       "apihelp-query+allfileusages-param-from": "{{doc-apihelp-param|query+allfileusages|from}}",
+       "apihelp-query+allfileusages-param-to": "{{doc-apihelp-param|query+allfileusages|to}}",
+       "apihelp-query+allfileusages-param-prefix": "{{doc-apihelp-param|query+allfileusages|prefix}}",
+       "apihelp-query+allfileusages-param-unique": "{{doc-apihelp-param|query+allfileusages|unique}}",
+       "apihelp-query+allfileusages-param-prop": "{{doc-apihelp-param|query+allfileusages|prop}}",
+       "apihelp-query+allfileusages-param-limit": "{{doc-apihelp-param|query+allfileusages|limit}}",
+       "apihelp-query+allfileusages-param-dir": "{{doc-apihelp-param|query+allfileusages|dir}}",
+       "apihelp-query+allfileusages-example-B": "{{doc-apihelp-example|query+allfileusages}}",
+       "apihelp-query+allfileusages-example-unique": "{{doc-apihelp-example|query+allfileusages}}",
+       "apihelp-query+allfileusages-example-unique-generator": "{{doc-apihelp-example|query+allfileusages}}",
+       "apihelp-query+allfileusages-example-generator": "{{doc-apihelp-example|query+allfileusages}}",
+       "apihelp-query+allimages-description": "{{doc-apihelp-description|query+allimages}}",
+       "apihelp-query+allimages-param-sort": "{{doc-apihelp-param|query+allimages|sort}}",
+       "apihelp-query+allimages-param-dir": "{{doc-apihelp-param|query+allimages|dir}}",
+       "apihelp-query+allimages-param-from": "{{doc-apihelp-param|query+allimages|from}}",
+       "apihelp-query+allimages-param-to": "{{doc-apihelp-param|query+allimages|to}}",
+       "apihelp-query+allimages-param-start": "{{doc-apihelp-param|query+allimages|start}}",
+       "apihelp-query+allimages-param-end": "{{doc-apihelp-param|query+allimages|end}}",
+       "apihelp-query+allimages-param-prop": "{{doc-apihelp-param|query+allimages|prop}}",
+       "apihelp-query+allimages-param-prefix": "{{doc-apihelp-param|query+allimages|prefix}}",
+       "apihelp-query+allimages-param-minsize": "{{doc-apihelp-param|query+allimages|minsize}}",
+       "apihelp-query+allimages-param-maxsize": "{{doc-apihelp-param|query+allimages|maxsize}}",
+       "apihelp-query+allimages-param-sha1": "{{doc-apihelp-param|query+allimages|sha1}}",
+       "apihelp-query+allimages-param-sha1base36": "{{doc-apihelp-param|query+allimages|sha1base36}}",
+       "apihelp-query+allimages-param-user": "{{doc-apihelp-param|query+allimages|user}}",
+       "apihelp-query+allimages-param-filterbots": "{{doc-apihelp-param|query+allimages|filterbots}}",
+       "apihelp-query+allimages-param-mime": "{{doc-apihelp-param|query+allimages|mime}}",
+       "apihelp-query+allimages-param-limit": "{{doc-apihelp-param|query+allimages|limit}}",
+       "apihelp-query+allimages-example-B": "{{doc-apihelp-example|query+allimages}}",
+       "apihelp-query+allimages-example-recent": "{{doc-apihelp-example|query+allimages}}",
+       "apihelp-query+allimages-example-generator": "{{doc-apihelp-example|query+allimages}}",
+       "apihelp-query+alllinks-description": "{{doc-apihelp-description|query+alllinks}}",
+       "apihelp-query+alllinks-param-from": "{{doc-apihelp-param|query+alllinks|from}}",
+       "apihelp-query+alllinks-param-to": "{{doc-apihelp-param|query+alllinks|to}}",
+       "apihelp-query+alllinks-param-prefix": "{{doc-apihelp-param|query+alllinks|prefix}}",
+       "apihelp-query+alllinks-param-unique": "{{doc-apihelp-param|query+alllinks|unique}}",
+       "apihelp-query+alllinks-param-prop": "{{doc-apihelp-param|query+alllinks|prop}}",
+       "apihelp-query+alllinks-param-namespace": "{{doc-apihelp-param|query+alllinks|namespace}}",
+       "apihelp-query+alllinks-param-limit": "{{doc-apihelp-param|query+alllinks|limit}}",
+       "apihelp-query+alllinks-param-dir": "{{doc-apihelp-param|query+alllinks|dir}}",
+       "apihelp-query+alllinks-example-B": "{{doc-apihelp-example|query+alllinks}}",
+       "apihelp-query+alllinks-example-unique": "{{doc-apihelp-example|query+alllinks}}",
+       "apihelp-query+alllinks-example-unique-generator": "{{doc-apihelp-example|query+alllinks}}",
+       "apihelp-query+alllinks-example-generator": "{{doc-apihelp-example|query+alllinks}}",
+       "apihelp-query+allmessages-description": "{{doc-apihelp-description|query+allmessages}}",
+       "apihelp-query+allmessages-param-messages": "{{doc-apihelp-param|query+allmessages|messages}}",
+       "apihelp-query+allmessages-param-prop": "{{doc-apihelp-param|query+allmessages|prop}}",
+       "apihelp-query+allmessages-param-enableparser": "{{doc-apihelp-param|query+allmessages|enableparser}}",
+       "apihelp-query+allmessages-param-nocontent": "{{doc-apihelp-param|query+allmessages|nocontent}}",
+       "apihelp-query+allmessages-param-includelocal": "{{doc-apihelp-param|query+allmessages|includelocal}}",
+       "apihelp-query+allmessages-param-args": "{{doc-apihelp-param|query+allmessages|args}}",
+       "apihelp-query+allmessages-param-filter": "{{doc-apihelp-param|query+allmessages|filter}}",
+       "apihelp-query+allmessages-param-customised": "{{doc-apihelp-param|query+allmessages|customised}}",
+       "apihelp-query+allmessages-param-lang": "{{doc-apihelp-param|query+allmessages|lang}}",
+       "apihelp-query+allmessages-param-from": "{{doc-apihelp-param|query+allmessages|from}}",
+       "apihelp-query+allmessages-param-to": "{{doc-apihelp-param|query+allmessages|to}}",
+       "apihelp-query+allmessages-param-title": "{{doc-apihelp-param|query+allmessages|title}}",
+       "apihelp-query+allmessages-param-prefix": "{{doc-apihelp-param|query+allmessages|prefix}}",
+       "apihelp-query+allmessages-example-ipb": "{{doc-apihelp-example|query+allmessages}}",
+       "apihelp-query+allmessages-example-de": "{{doc-apihelp-example|query+allmessages}}",
+       "apihelp-query+allpages-description": "{{doc-apihelp-description|query+allpages}}",
+       "apihelp-query+allpages-param-from": "{{doc-apihelp-param|query+allpages|from}}",
+       "apihelp-query+allpages-param-to": "{{doc-apihelp-param|query+allpages|to}}",
+       "apihelp-query+allpages-param-prefix": "{{doc-apihelp-param|query+allpages|prefix}}",
+       "apihelp-query+allpages-param-namespace": "{{doc-apihelp-param|query+allpages|namespace}}",
+       "apihelp-query+allpages-param-filterredir": "{{doc-apihelp-param|query+allpages|filterredir}}",
+       "apihelp-query+allpages-param-minsize": "{{doc-apihelp-param|query+allpages|minsize}}",
+       "apihelp-query+allpages-param-maxsize": "{{doc-apihelp-param|query+allpages|maxsize}}",
+       "apihelp-query+allpages-param-prtype": "{{doc-apihelp-param|query+allpages|prtype}}",
+       "apihelp-query+allpages-param-prlevel": "{{doc-apihelp-param|query+allpages|prlevel}}",
+       "apihelp-query+allpages-param-prfiltercascade": "{{doc-apihelp-param|query+allpages|prfiltercascade}}",
+       "apihelp-query+allpages-param-limit": "{{doc-apihelp-param|query+allpages|limit}}",
+       "apihelp-query+allpages-param-dir": "{{doc-apihelp-param|query+allpages|dir}}",
+       "apihelp-query+allpages-param-filterlanglinks": "{{doc-apihelp-param|query+allpages|filterlanglinks}}",
+       "apihelp-query+allpages-param-prexpiry": "{{doc-apihelp-param|query+allpages|prexpiry}}",
+       "apihelp-query+allpages-example-B": "{{doc-apihelp-example|query+allpages}}",
+       "apihelp-query+allpages-example-generator": "{{doc-apihelp-example|query+allpages}}",
+       "apihelp-query+allpages-example-generator-revisions": "{{doc-apihelp-example|query+allpages}}",
+       "apihelp-query+allredirects-description": "{{doc-apihelp-description|query+allredirects}}",
+       "apihelp-query+allredirects-param-from": "{{doc-apihelp-param|query+allredirects|from}}",
+       "apihelp-query+allredirects-param-to": "{{doc-apihelp-param|query+allredirects|to}}",
+       "apihelp-query+allredirects-param-prefix": "{{doc-apihelp-param|query+allredirects|prefix}}",
+       "apihelp-query+allredirects-param-unique": "{{doc-apihelp-param|query+allredirects|unique}}",
+       "apihelp-query+allredirects-param-prop": "{{doc-apihelp-param|query+allredirects|prop}}",
+       "apihelp-query+allredirects-param-namespace": "{{doc-apihelp-param|query+allredirects|namespace}}",
+       "apihelp-query+allredirects-param-limit": "{{doc-apihelp-param|query+allredirects|limit}}",
+       "apihelp-query+allredirects-param-dir": "{{doc-apihelp-param|query+allredirects|dir}}",
+       "apihelp-query+allredirects-example-B": "{{doc-apihelp-example|query+allredirects}}",
+       "apihelp-query+allredirects-example-unique": "{{doc-apihelp-example|query+allredirects}}",
+       "apihelp-query+allredirects-example-unique-generator": "{{doc-apihelp-example|query+allredirects}}",
+       "apihelp-query+allredirects-example-generator": "{{doc-apihelp-example|query+allredirects}}",
+       "apihelp-query+alltransclusions-description": "{{doc-apihelp-description|query+alltransclusions}}",
+       "apihelp-query+alltransclusions-param-from": "{{doc-apihelp-param|query+alltransclusions|from}}",
+       "apihelp-query+alltransclusions-param-to": "{{doc-apihelp-param|query+alltransclusions|to}}",
+       "apihelp-query+alltransclusions-param-prefix": "{{doc-apihelp-param|query+alltransclusions|prefix}}",
+       "apihelp-query+alltransclusions-param-unique": "{{doc-apihelp-param|query+alltransclusions|unique}}",
+       "apihelp-query+alltransclusions-param-prop": "{{doc-apihelp-param|query+alltransclusions|prop}}",
+       "apihelp-query+alltransclusions-param-namespace": "{{doc-apihelp-param|query+alltransclusions|namespace}}",
+       "apihelp-query+alltransclusions-param-limit": "{{doc-apihelp-param|query+alltransclusions|limit}}",
+       "apihelp-query+alltransclusions-param-dir": "{{doc-apihelp-param|query+alltransclusions|dir}}",
+       "apihelp-query+alltransclusions-example-B": "{{doc-apihelp-example|query+alltransclusions}}",
+       "apihelp-query+alltransclusions-example-unique": "{{doc-apihelp-example|query+alltransclusions}}",
+       "apihelp-query+alltransclusions-example-unique-generator": "{{doc-apihelp-example|query+alltransclusions}}",
+       "apihelp-query+alltransclusions-example-generator": "{{doc-apihelp-example|query+alltransclusions}}",
+       "apihelp-query+allusers-description": "{{doc-apihelp-description|query+allusers}}",
+       "apihelp-query+allusers-param-from": "{{doc-apihelp-param|query+allusers|from}}",
+       "apihelp-query+allusers-param-to": "{{doc-apihelp-param|query+allusers|to}}",
+       "apihelp-query+allusers-param-prefix": "{{doc-apihelp-param|query+allusers|prefix}}",
+       "apihelp-query+allusers-param-dir": "{{doc-apihelp-param|query+allusers|dir}}",
+       "apihelp-query+allusers-param-group": "{{doc-apihelp-param|query+allusers|group}}",
+       "apihelp-query+allusers-param-excludegroup": "{{doc-apihelp-param|query+allusers|excludegroup}}",
+       "apihelp-query+allusers-param-rights": "{{doc-apihelp-param|query+allusers|rights}}",
+       "apihelp-query+allusers-param-prop": "{{doc-apihelp-param|query+allusers|prop}}",
+       "apihelp-query+allusers-param-limit": "{{doc-apihelp-param|query+allusers|limit}}",
+       "apihelp-query+allusers-param-witheditsonly": "{{doc-apihelp-param|query+allusers|witheditsonly}}",
+       "apihelp-query+allusers-param-activeusers": "{{doc-apihelp-param|query+allusers|activeusers|params=* $1 - Value of [[mw:Manual:$wgActiveUserDays]]|paramstart=2}}",
+       "apihelp-query+allusers-example-Y": "{{doc-apihelp-example|query+allusers}}",
+       "apihelp-query+backlinks-description": "{{doc-apihelp-description|query+backlinks}}",
+       "apihelp-query+backlinks-param-title": "{{doc-apihelp-param|query+backlinks|title}}",
+       "apihelp-query+backlinks-param-pageid": "{{doc-apihelp-param|query+backlinks|pageid}}",
+       "apihelp-query+backlinks-param-namespace": "{{doc-apihelp-param|query+backlinks|namespace}}",
+       "apihelp-query+backlinks-param-dir": "{{doc-apihelp-param|query+backlinks|dir}}",
+       "apihelp-query+backlinks-param-filterredir": "{{doc-apihelp-param|query+backlinks|filterredir}}",
+       "apihelp-query+backlinks-param-limit": "{{doc-apihelp-param|query+backlinks|limit}}",
+       "apihelp-query+backlinks-param-redirect": "{{doc-apihelp-param|query+backlinks|redirect}}",
+       "apihelp-query+backlinks-example-simple": "{{doc-apihelp-example|query+backlinks}}",
+       "apihelp-query+backlinks-example-generator": "{{doc-apihelp-example|query+backlinks}}",
+       "apihelp-query+blocks-description": "{{doc-apihelp-description|query+blocks}}",
+       "apihelp-query+blocks-param-start": "{{doc-apihelp-param|query+blocks|start}}",
+       "apihelp-query+blocks-param-end": "{{doc-apihelp-param|query+blocks|end}}",
+       "apihelp-query+blocks-param-ids": "{{doc-apihelp-param|query+blocks|ids}}",
+       "apihelp-query+blocks-param-users": "{{doc-apihelp-param|query+blocks|users}}",
+       "apihelp-query+blocks-param-ip": "{{doc-apihelp-param|query+blocks|ip|params=* $1 - Minimum CIDR prefix for IPv4\n* $2 - Minimum CIDR prefix for IPv6|paramstart=3}}",
+       "apihelp-query+blocks-param-limit": "{{doc-apihelp-param|query+blocks|limit}}",
+       "apihelp-query+blocks-param-prop": "{{doc-apihelp-param|query+blocks|prop}}",
+       "apihelp-query+blocks-param-show": "{{doc-apihelp-param|query+blocks|show}}",
+       "apihelp-query+blocks-example-simple": "{{doc-apihelp-example|query+blocks}}",
+       "apihelp-query+blocks-example-users": "{{doc-apihelp-example|query+blocks}}",
+       "apihelp-query+categories-description": "{{doc-apihelp-description|query+categories}}",
+       "apihelp-query+categories-param-prop": "{{doc-apihelp-param|query+categories|prop}}",
+       "apihelp-query+categories-param-show": "{{doc-apihelp-param|query+categories|show}}",
+       "apihelp-query+categories-param-limit": "{{doc-apihelp-param|query+categories|limit}}",
+       "apihelp-query+categories-param-categories": "{{doc-apihelp-param|query+categories|categories}}",
+       "apihelp-query+categories-param-dir": "{{doc-apihelp-param|query+categories|dir}}",
+       "apihelp-query+categories-example-simple": "{{doc-apihelp-example|query+categories}}",
+       "apihelp-query+categories-example-generator": "{{doc-apihelp-example|query+categories}}",
+       "apihelp-query+categoryinfo-description": "{{doc-apihelp-description|query+categoryinfo}}",
+       "apihelp-query+categoryinfo-example-simple": "{{doc-apihelp-example|query+categoryinfo}}",
+       "apihelp-query+categorymembers-description": "{{doc-apihelp-description|query+categorymembers}}",
+       "apihelp-query+categorymembers-param-title": "{{doc-apihelp-param|query+categorymembers|title}}",
+       "apihelp-query+categorymembers-param-pageid": "{{doc-apihelp-param|query+categorymembers|pageid}}",
+       "apihelp-query+categorymembers-param-prop": "{{doc-apihelp-param|query+categorymembers|prop}}",
+       "apihelp-query+categorymembers-param-namespace": "{{doc-apihelp-param|query+categorymembers|namespace}}",
+       "apihelp-query+categorymembers-param-type": "{{doc-apihelp-param|query+categorymembers|type}}",
+       "apihelp-query+categorymembers-param-limit": "{{doc-apihelp-param|query+categorymembers|limit}}",
+       "apihelp-query+categorymembers-param-sort": "{{doc-apihelp-param|query+categorymembers|sort}}",
+       "apihelp-query+categorymembers-param-dir": "{{doc-apihelp-param|query+categorymembers|dir}}",
+       "apihelp-query+categorymembers-param-start": "{{doc-apihelp-param|query+categorymembers|start}}",
+       "apihelp-query+categorymembers-param-end": "{{doc-apihelp-param|query+categorymembers|end}}",
+       "apihelp-query+categorymembers-param-starthexsortkey": "{{doc-apihelp-param|query+categorymembers|starthexsortkey}}",
+       "apihelp-query+categorymembers-param-endhexsortkey": "{{doc-apihelp-param|query+categorymembers|endhexsortkey}}",
+       "apihelp-query+categorymembers-param-startsortkeyprefix": "{{doc-apihelp-param|query+categorymembers|startsortkeyprefix}}",
+       "apihelp-query+categorymembers-param-endsortkeyprefix": "{{doc-apihelp-param|query+categorymembers|endsortkeyprefix}}",
+       "apihelp-query+categorymembers-param-startsortkey": "{{doc-apihelp-param|query+categorymembers|startsortkey}}",
+       "apihelp-query+categorymembers-param-endsortkey": "{{doc-apihelp-param|query+categorymembers|endsortkey}}",
+       "apihelp-query+categorymembers-example-simple": "{{doc-apihelp-example|query+categorymembers}}",
+       "apihelp-query+categorymembers-example-generator": "{{doc-apihelp-example|query+categorymembers}}",
+       "apihelp-query+contributors-description": "{{doc-apihelp-description|query+contributors}}",
+       "apihelp-query+contributors-param-group": "{{doc-apihelp-param|query+contributors|group}}",
+       "apihelp-query+contributors-param-excludegroup": "{{doc-apihelp-param|query+contributors|excludegroup}}",
+       "apihelp-query+contributors-param-rights": "{{doc-apihelp-param|query+contributors|rights}}",
+       "apihelp-query+contributors-param-excluderights": "{{doc-apihelp-param|query+contributors|excluderights}}",
+       "apihelp-query+contributors-param-limit": "{{doc-apihelp-param|query+contributors|limit}}",
+       "apihelp-query+contributors-example-simple": "{{doc-apihelp-example|query+contributors}}",
+       "apihelp-query+deletedrevisions-description": "{{doc-apihelp-description|query+deletedrevisions}}",
+       "apihelp-query+deletedrevisions-param-start": "{{doc-apihelp-param|query+deletedrevisions|start}}",
+       "apihelp-query+deletedrevisions-param-end": "{{doc-apihelp-param|query+deletedrevisions|end}}",
+       "apihelp-query+deletedrevisions-param-tag": "{{doc-apihelp-param|query+deletedrevisions|tag}}",
+       "apihelp-query+deletedrevisions-param-user": "{{doc-apihelp-param|query+deletedrevisions|user}}",
+       "apihelp-query+deletedrevisions-param-excludeuser": "{{doc-apihelp-param|query+deletedrevisions|excludeuser}}",
+       "apihelp-query+deletedrevisions-param-limit": "{{doc-apihelp-param|query+deletedrevisions|limit}}",
+       "apihelp-query+deletedrevisions-param-prop": "{{doc-apihelp-param|query+deletedrevisions|prop}}",
+       "apihelp-query+deletedrevisions-example-titles": "{{doc-apihelp-example|query+deletedrevisions}}",
+       "apihelp-query+deletedrevisions-example-revids": "{{doc-apihelp-example|query+deletedrevisions}}",
+       "apihelp-query+deletedrevs-description": "{{doc-apihelp-description|query+deletedrevs}}",
+       "apihelp-query+deletedrevs-paraminfo-modes": "{{doc-apihelp-paraminfo|query+deletedrevs|modes}}\n{{Identical|Mode}}",
+       "apihelp-query+deletedrevs-param-start": "{{doc-apihelp-param|query+deletedrevs|start}}",
+       "apihelp-query+deletedrevs-param-end": "{{doc-apihelp-param|query+deletedrevs|end}}",
+       "apihelp-query+deletedrevs-param-from": "{{doc-apihelp-param|query+deletedrevs|from}}",
+       "apihelp-query+deletedrevs-param-to": "{{doc-apihelp-param|query+deletedrevs|to}}",
+       "apihelp-query+deletedrevs-param-prefix": "{{doc-apihelp-param|query+deletedrevs|prefix}}",
+       "apihelp-query+deletedrevs-param-unique": "{{doc-apihelp-param|query+deletedrevs|unique}}",
+       "apihelp-query+deletedrevs-param-tag": "{{doc-apihelp-param|query+deletedrevs|tag}}",
+       "apihelp-query+deletedrevs-param-user": "{{doc-apihelp-param|query+deletedrevs|user}}",
+       "apihelp-query+deletedrevs-param-excludeuser": "{{doc-apihelp-param|query+deletedrevs|excludeuser}}",
+       "apihelp-query+deletedrevs-param-namespace": "{{doc-apihelp-param|query+deletedrevs|namespace}}",
+       "apihelp-query+deletedrevs-param-limit": "{{doc-apihelp-param|query+deletedrevs|limit}}",
+       "apihelp-query+deletedrevs-param-prop": "{{doc-apihelp-param|query+deletedrevs|prop}}",
+       "apihelp-query+deletedrevs-example-mode1": "{{doc-apihelp-example|query+deletedrevs}}",
+       "apihelp-query+deletedrevs-example-mode2": "{{doc-apihelp-example|query+deletedrevs}}",
+       "apihelp-query+deletedrevs-example-mode3-main": "{{doc-apihelp-example|query+deletedrevs}}",
+       "apihelp-query+deletedrevs-example-mode3-talk": "{{doc-apihelp-example|query+deletedrevs}}",
+       "apihelp-query+disabled-description": "{{doc-apihelp-description|query+disabled}}",
+       "apihelp-query+duplicatefiles-description": "{{doc-apihelp-description|query+duplicatefiles}}",
+       "apihelp-query+duplicatefiles-param-limit": "{{doc-apihelp-param|query+duplicatefiles|limit}}",
+       "apihelp-query+duplicatefiles-param-dir": "{{doc-apihelp-param|query+duplicatefiles|dir}}",
+       "apihelp-query+duplicatefiles-param-localonly": "{{doc-apihelp-param|query+duplicatefiles|localonly}}",
+       "apihelp-query+duplicatefiles-example-simple": "{{doc-apihelp-example|query+duplicatefiles}}",
+       "apihelp-query+duplicatefiles-example-generated": "{{doc-apihelp-example|query+duplicatefiles}}",
+       "apihelp-query+embeddedin-description": "{{doc-apihelp-description|query+embeddedin}}",
+       "apihelp-query+embeddedin-param-title": "{{doc-apihelp-param|query+embeddedin|title}}",
+       "apihelp-query+embeddedin-param-pageid": "{{doc-apihelp-param|query+embeddedin|pageid}}",
+       "apihelp-query+embeddedin-param-namespace": "{{doc-apihelp-param|query+embeddedin|namespace}}",
+       "apihelp-query+embeddedin-param-dir": "{{doc-apihelp-param|query+embeddedin|dir}}",
+       "apihelp-query+embeddedin-param-filterredir": "{{doc-apihelp-param|query+embeddedin|filterredir}}",
+       "apihelp-query+embeddedin-param-limit": "{{doc-apihelp-param|query+embeddedin|limit}}",
+       "apihelp-query+embeddedin-example-simple": "{{doc-apihelp-example|query+embeddedin}}",
+       "apihelp-query+embeddedin-example-generator": "{{doc-apihelp-example|query+embeddedin}}",
+       "apihelp-query+extlinks-description": "{{doc-apihelp-description|query+extlinks}}",
+       "apihelp-query+extlinks-param-limit": "{{doc-apihelp-param|query+extlinks|limit}}",
+       "apihelp-query+extlinks-param-protocol": "{{doc-apihelp-param|query+extlinks|protocol}}",
+       "apihelp-query+extlinks-param-query": "{{doc-apihelp-param|query+extlinks|query}}",
+       "apihelp-query+extlinks-param-expandurl": "{{doc-apihelp-param|query+extlinks|expandurl}}",
+       "apihelp-query+extlinks-example-simple": "{{doc-apihelp-example|query+extlinks}}",
+       "apihelp-query+exturlusage-description": "{{doc-apihelp-description|query+exturlusage}}",
+       "apihelp-query+exturlusage-param-prop": "{{doc-apihelp-param|query+exturlusage|prop}}",
+       "apihelp-query+exturlusage-param-protocol": "{{doc-apihelp-param|query+exturlusage|protocol}}",
+       "apihelp-query+exturlusage-param-query": "{{doc-apihelp-param|query+exturlusage|query}}",
+       "apihelp-query+exturlusage-param-namespace": "{{doc-apihelp-param|query+exturlusage|namespace}}",
+       "apihelp-query+exturlusage-param-limit": "{{doc-apihelp-param|query+exturlusage|limit}}",
+       "apihelp-query+exturlusage-param-expandurl": "{{doc-apihelp-param|query+exturlusage|expandurl}}",
+       "apihelp-query+exturlusage-example-simple": "{{doc-apihelp-example|query+exturlusage}}",
+       "apihelp-query+filearchive-description": "{{doc-apihelp-description|query+filearchive}}",
+       "apihelp-query+filearchive-param-from": "{{doc-apihelp-param|query+filearchive|from}}",
+       "apihelp-query+filearchive-param-to": "{{doc-apihelp-param|query+filearchive|to}}",
+       "apihelp-query+filearchive-param-prefix": "{{doc-apihelp-param|query+filearchive|prefix}}",
+       "apihelp-query+filearchive-param-limit": "{{doc-apihelp-param|query+filearchive|limit}}",
+       "apihelp-query+filearchive-param-dir": "{{doc-apihelp-param|query+filearchive|dir}}",
+       "apihelp-query+filearchive-param-sha1": "{{doc-apihelp-param|query+filearchive|sha1}}",
+       "apihelp-query+filearchive-param-sha1base36": "{{doc-apihelp-param|query+filearchive|sha1base36}}",
+       "apihelp-query+filearchive-param-prop": "{{doc-apihelp-param|query+filearchive|prop}}",
+       "apihelp-query+filearchive-example-simple": "{{doc-apihelp-example|query+filearchive}}",
+       "apihelp-query+filerepoinfo-description": "{{doc-apihelp-description|query+filerepoinfo}}",
+       "apihelp-query+filerepoinfo-param-prop": "{{doc-apihelp-param|query+filerepoinfo|prop}}",
+       "apihelp-query+filerepoinfo-example-simple": "{{doc-apihelp-example|query+filerepoinfo}}",
+       "apihelp-query+fileusage-description": "{{doc-apihelp-description|query+fileusage}}",
+       "apihelp-query+fileusage-param-prop": "{{doc-apihelp-param|query+fileusage|prop}}",
+       "apihelp-query+fileusage-param-namespace": "{{doc-apihelp-param|query+fileusage|namespace}}",
+       "apihelp-query+fileusage-param-limit": "{{doc-apihelp-param|query+fileusage|limit}}",
+       "apihelp-query+fileusage-param-show": "{{doc-apihelp-param|query+fileusage|show}}",
+       "apihelp-query+fileusage-example-simple": "{{doc-apihelp-example|query+fileusage}}",
+       "apihelp-query+fileusage-example-generator": "{{doc-apihelp-example|query+fileusage}}",
+       "apihelp-query+imageinfo-description": "{{doc-apihelp-description|query+imageinfo}}",
+       "apihelp-query+imageinfo-param-prop": "{{doc-apihelp-param|query+imageinfo|prop}}",
+       "apihelp-query+imageinfo-param-limit": "{{doc-apihelp-param|query+imageinfo|limit}}",
+       "apihelp-query+imageinfo-param-start": "{{doc-apihelp-param|query+imageinfo|start}}",
+       "apihelp-query+imageinfo-param-end": "{{doc-apihelp-param|query+imageinfo|end}}",
+       "apihelp-query+imageinfo-param-urlwidth": "{{doc-apihelp-param|query+imageinfo|urlwidth|params=* $1 - Maximum number of thumbnails per query|paramstart=2}}",
+       "apihelp-query+imageinfo-param-urlheight": "{{doc-apihelp-param|query+imageinfo|urlheight}}",
+       "apihelp-query+imageinfo-param-metadataversion": "{{doc-apihelp-param|query+imageinfo|metadataversion}}",
+       "apihelp-query+imageinfo-param-extmetadatalanguage": "{{doc-apihelp-param|query+imageinfo|extmetadatalanguage}}",
+       "apihelp-query+imageinfo-param-extmetadatamultilang": "{{doc-apihelp-param|query+imageinfo|extmetadatamultilang}}",
+       "apihelp-query+imageinfo-param-extmetadatafilter": "{{doc-apihelp-param|query+imageinfo|extmetadatafilter}}",
+       "apihelp-query+imageinfo-param-urlparam": "{{doc-apihelp-param|query+imageinfo|urlparam}}",
+       "apihelp-query+imageinfo-param-localonly": "{{doc-apihelp-param|query+imageinfo|localonly}}",
+       "apihelp-query+imageinfo-example-simple": "{{doc-apihelp-example|query+imageinfo}}",
+       "apihelp-query+imageinfo-example-dated": "{{doc-apihelp-example|query+imageinfo}}",
+       "apihelp-query+images-description": "{{doc-apihelp-description|query+images}}",
+       "apihelp-query+images-param-limit": "{{doc-apihelp-param|query+images|limit}}",
+       "apihelp-query+images-param-images": "{{doc-apihelp-param|query+images|images}}",
+       "apihelp-query+images-param-dir": "{{doc-apihelp-param|query+images|dir}}",
+       "apihelp-query+images-example-simple": "{{doc-apihelp-example|query+images}}",
+       "apihelp-query+images-example-generator": "{{doc-apihelp-example|query+images}}",
+       "apihelp-query+imageusage-description": "{{doc-apihelp-description|query+imageusage}}",
+       "apihelp-query+imageusage-param-title": "{{doc-apihelp-param|query+imageusage|title}}",
+       "apihelp-query+imageusage-param-pageid": "{{doc-apihelp-param|query+imageusage|pageid}}",
+       "apihelp-query+imageusage-param-namespace": "{{doc-apihelp-param|query+imageusage|namespace}}",
+       "apihelp-query+imageusage-param-dir": "{{doc-apihelp-param|query+imageusage|dir}}",
+       "apihelp-query+imageusage-param-filterredir": "{{doc-apihelp-param|query+imageusage|filterredir}}",
+       "apihelp-query+imageusage-param-limit": "{{doc-apihelp-param|query+imageusage|limit}}",
+       "apihelp-query+imageusage-param-redirect": "{{doc-apihelp-param|query+imageusage|redirect}}",
+       "apihelp-query+imageusage-example-simple": "{{doc-apihelp-example|query+imageusage}}",
+       "apihelp-query+imageusage-example-generator": "{{doc-apihelp-example|query+imageusage}}",
+       "apihelp-query+info-description": "{{doc-apihelp-description|query+info}}",
+       "apihelp-query+info-param-prop": "{{doc-apihelp-param|query+info|prop}}",
+       "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}}",
+       "apihelp-query+iwbacklinks-description": "{{doc-apihelp-description|query+iwbacklinks}}",
+       "apihelp-query+iwbacklinks-param-prefix": "{{doc-apihelp-param|query+iwbacklinks|prefix}}",
+       "apihelp-query+iwbacklinks-param-title": "{{doc-apihelp-param|query+iwbacklinks|title}}",
+       "apihelp-query+iwbacklinks-param-limit": "{{doc-apihelp-param|query+iwbacklinks|limit}}",
+       "apihelp-query+iwbacklinks-param-prop": "{{doc-apihelp-param|query+iwbacklinks|prop}}",
+       "apihelp-query+iwbacklinks-param-dir": "{{doc-apihelp-param|query+iwbacklinks|dir}}",
+       "apihelp-query+iwbacklinks-example-simple": "{{doc-apihelp-example|query+iwbacklinks}}",
+       "apihelp-query+iwbacklinks-example-generator": "{{doc-apihelp-example|query+iwbacklinks}}",
+       "apihelp-query+iwlinks-description": "{{doc-apihelp-description|query+iwlinks}}",
+       "apihelp-query+iwlinks-param-url": "{{doc-apihelp-param|query+iwlinks|url}}",
+       "apihelp-query+iwlinks-param-prop": "{{doc-apihelp-param|query+iwlinks|prop}}",
+       "apihelp-query+iwlinks-param-limit": "{{doc-apihelp-param|query+iwlinks|limit}}",
+       "apihelp-query+iwlinks-param-prefix": "{{doc-apihelp-param|query+iwlinks|prefix}}",
+       "apihelp-query+iwlinks-param-title": "{{doc-apihelp-param|query+iwlinks|title}}",
+       "apihelp-query+iwlinks-param-dir": "{{doc-apihelp-param|query+iwlinks|dir}}",
+       "apihelp-query+iwlinks-example-simple": "{{doc-apihelp-example|query+iwlinks}}",
+       "apihelp-query+langbacklinks-description": "{{doc-apihelp-description|query+langbacklinks}}",
+       "apihelp-query+langbacklinks-param-lang": "{{doc-apihelp-param|query+langbacklinks|lang}}",
+       "apihelp-query+langbacklinks-param-title": "{{doc-apihelp-param|query+langbacklinks|title}}",
+       "apihelp-query+langbacklinks-param-limit": "{{doc-apihelp-param|query+langbacklinks|limit}}",
+       "apihelp-query+langbacklinks-param-prop": "{{doc-apihelp-param|query+langbacklinks|prop}}",
+       "apihelp-query+langbacklinks-param-dir": "{{doc-apihelp-param|query+langbacklinks|dir}}",
+       "apihelp-query+langbacklinks-example-simple": "{{doc-apihelp-example|query+langbacklinks}}",
+       "apihelp-query+langbacklinks-example-generator": "{{doc-apihelp-example|query+langbacklinks}}",
+       "apihelp-query+langlinks-description": "{{doc-apihelp-description|query+langlinks}}",
+       "apihelp-query+langlinks-param-limit": "{{doc-apihelp-param|query+langlinks|limit}}",
+       "apihelp-query+langlinks-param-url": "{{doc-apihelp-param|query+langlinks|url}}",
+       "apihelp-query+langlinks-param-prop": "{{doc-apihelp-param|query+langlinks|prop}}",
+       "apihelp-query+langlinks-param-lang": "{{doc-apihelp-param|query+langlinks|lang}}",
+       "apihelp-query+langlinks-param-title": "{{doc-apihelp-param|query+langlinks|title}}",
+       "apihelp-query+langlinks-param-dir": "{{doc-apihelp-param|query+langlinks|dir}}",
+       "apihelp-query+langlinks-param-inlanguagecode": "{{doc-apihelp-param|query+langlinks|inlanguagecode}}",
+       "apihelp-query+langlinks-example-simple": "{{doc-apihelp-example|query+langlinks}}",
+       "apihelp-query+links-description": "{{doc-apihelp-description|query+links}}",
+       "apihelp-query+links-param-namespace": "{{doc-apihelp-param|query+links|namespace}}",
+       "apihelp-query+links-param-limit": "{{doc-apihelp-param|query+links|limit}}",
+       "apihelp-query+links-param-titles": "{{doc-apihelp-param|query+links|titles}}",
+       "apihelp-query+links-param-dir": "{{doc-apihelp-param|query+links|dir}}",
+       "apihelp-query+links-example-simple": "{{doc-apihelp-example|query+links}}",
+       "apihelp-query+links-example-generator": "{{doc-apihelp-example|query+links}}",
+       "apihelp-query+links-example-namespaces": "{{doc-apihelp-example|query+links}}",
+       "apihelp-query+linkshere-description": "{{doc-apihelp-description|query+linkshere}}",
+       "apihelp-query+linkshere-param-prop": "{{doc-apihelp-param|query+linkshere|prop}}",
+       "apihelp-query+linkshere-param-namespace": "{{doc-apihelp-param|query+linkshere|namespace}}",
+       "apihelp-query+linkshere-param-limit": "{{doc-apihelp-param|query+linkshere|limit}}",
+       "apihelp-query+linkshere-param-show": "{{doc-apihelp-param|query+linkshere|show}}",
+       "apihelp-query+linkshere-example-simple": "{{doc-apihelp-example|query+linkshere}}",
+       "apihelp-query+linkshere-example-generator": "{{doc-apihelp-example|query+linkshere}}",
+       "apihelp-query+logevents-description": "{{doc-apihelp-description|query+logevents}}",
+       "apihelp-query+logevents-param-prop": "{{doc-apihelp-param|query+logevents|prop}}",
+       "apihelp-query+logevents-param-type": "{{doc-apihelp-param|query+logevents|type}}",
+       "apihelp-query+logevents-param-action": "{{doc-apihelp-param|query+logevents|action}}",
+       "apihelp-query+logevents-param-start": "{{doc-apihelp-param|query+logevents|start}}",
+       "apihelp-query+logevents-param-end": "{{doc-apihelp-param|query+logevents|end}}",
+       "apihelp-query+logevents-param-user": "{{doc-apihelp-param|query+logevents|user}}",
+       "apihelp-query+logevents-param-title": "{{doc-apihelp-param|query+logevents|title}}",
+       "apihelp-query+logevents-param-namespace": "{{doc-apihelp-param|query+logevents|namespace}}",
+       "apihelp-query+logevents-param-prefix": "{{doc-apihelp-param|query+logevents|prefix}}",
+       "apihelp-query+logevents-param-tag": "{{doc-apihelp-param|query+logevents|tag}}",
+       "apihelp-query+logevents-param-limit": "{{doc-apihelp-param|query+logevents|limit}}",
+       "apihelp-query+logevents-example-simple": "{{doc-apihelp-example|query+logevents}}",
+       "apihelp-query+pagepropnames-description": "{{doc-apihelp-description|query+pagepropnames}}",
+       "apihelp-query+pagepropnames-param-limit": "{{doc-apihelp-param|query+pagepropnames|limit}}",
+       "apihelp-query+pagepropnames-example-simple": "{{doc-apihelp-example|query+pagepropnames}}",
+       "apihelp-query+pageprops-description": "{{doc-apihelp-description|query+pageprops}}",
+       "apihelp-query+pageprops-param-prop": "{{doc-apihelp-param|query+pageprops|prop}}",
+       "apihelp-query+pageprops-example-simple": "{{doc-apihelp-example|query+pageprops}}",
+       "apihelp-query+pageswithprop-description": "{{doc-apihelp-description|query+pageswithprop}}",
+       "apihelp-query+pageswithprop-param-propname": "{{doc-apihelp-param|query+pageswithprop|propname}}",
+       "apihelp-query+pageswithprop-param-prop": "{{doc-apihelp-param|query+pageswithprop|prop}}",
+       "apihelp-query+pageswithprop-param-limit": "{{doc-apihelp-param|query+pageswithprop|limit}}",
+       "apihelp-query+pageswithprop-param-dir": "{{doc-apihelp-param|query+pageswithprop|dir}}",
+       "apihelp-query+pageswithprop-example-simple": "{{doc-apihelp-example|query+pageswithprop}}",
+       "apihelp-query+pageswithprop-example-generator": "{{doc-apihelp-example|query+pageswithprop}}",
+       "apihelp-query+prefixsearch-description": "{{doc-apihelp-description|query+prefixsearch}}",
+       "apihelp-query+prefixsearch-param-search": "{{doc-apihelp-param|query+prefixsearch|search}}",
+       "apihelp-query+prefixsearch-param-namespace": "{{doc-apihelp-param|query+prefixsearch|namespace}}",
+       "apihelp-query+prefixsearch-param-limit": "{{doc-apihelp-param|query+prefixsearch|limit}}",
+       "apihelp-query+prefixsearch-example-simple": "{{doc-apihelp-example|query+prefixsearch}}",
+       "apihelp-query+protectedtitles-description": "{{doc-apihelp-description|query+protectedtitles}}",
+       "apihelp-query+protectedtitles-param-namespace": "{{doc-apihelp-param|query+protectedtitles|namespace}}",
+       "apihelp-query+protectedtitles-param-level": "{{doc-apihelp-param|query+protectedtitles|level}}",
+       "apihelp-query+protectedtitles-param-limit": "{{doc-apihelp-param|query+protectedtitles|limit}}",
+       "apihelp-query+protectedtitles-param-start": "{{doc-apihelp-param|query+protectedtitles|start}}",
+       "apihelp-query+protectedtitles-param-end": "{{doc-apihelp-param|query+protectedtitles|end}}",
+       "apihelp-query+protectedtitles-param-prop": "{{doc-apihelp-param|query+protectedtitles|prop}}",
+       "apihelp-query+protectedtitles-example-simple": "{{doc-apihelp-example|query+protectedtitles}}",
+       "apihelp-query+protectedtitles-example-generator": "{{doc-apihelp-example|query+protectedtitles}}",
+       "apihelp-query+querypage-description": "{{doc-apihelp-description|query+querypage}}",
+       "apihelp-query+querypage-param-page": "{{doc-apihelp-param|query+querypage|page}}",
+       "apihelp-query+querypage-param-limit": "{{doc-apihelp-param|query+querypage|limit}}",
+       "apihelp-query+querypage-example-ancientpages": "{{doc-apihelp-example|query+querypage}}",
+       "apihelp-query+random-description": "{{doc-apihelp-description|query+random}}",
+       "apihelp-query+random-param-namespace": "{{doc-apihelp-param|query+random|namespace}}",
+       "apihelp-query+random-param-limit": "{{doc-apihelp-param|query+random|limit}}",
+       "apihelp-query+random-param-redirect": "{{doc-apihelp-param|query+random|redirect}}",
+       "apihelp-query+random-example-simple": "{{doc-apihelp-example|query+random}}",
+       "apihelp-query+random-example-generator": "{{doc-apihelp-example|query+random}}",
+       "apihelp-query+recentchanges-description": "{{doc-apihelp-description|query+recentchanges}}",
+       "apihelp-query+recentchanges-param-start": "{{doc-apihelp-param|query+recentchanges|start}}",
+       "apihelp-query+recentchanges-param-end": "{{doc-apihelp-param|query+recentchanges|end}}",
+       "apihelp-query+recentchanges-param-namespace": "{{doc-apihelp-param|query+recentchanges|namespace}}",
+       "apihelp-query+recentchanges-param-user": "{{doc-apihelp-param|query+recentchanges|user}}",
+       "apihelp-query+recentchanges-param-excludeuser": "{{doc-apihelp-param|query+recentchanges|excludeuser}}",
+       "apihelp-query+recentchanges-param-tag": "{{doc-apihelp-param|query+recentchanges|tag}}",
+       "apihelp-query+recentchanges-param-prop": "{{doc-apihelp-param|query+recentchanges|prop}}",
+       "apihelp-query+recentchanges-param-token": "{{doc-apihelp-param|query+recentchanges|token}}",
+       "apihelp-query+recentchanges-param-show": "{{doc-apihelp-param|query+recentchanges|show}}",
+       "apihelp-query+recentchanges-param-limit": "{{doc-apihelp-param|query+recentchanges|limit}}",
+       "apihelp-query+recentchanges-param-type": "{{doc-apihelp-param|query+recentchanges|type}}",
+       "apihelp-query+recentchanges-param-toponly": "{{doc-apihelp-param|query+recentchanges|toponly}}",
+       "apihelp-query+recentchanges-example-simple": "{{doc-apihelp-example|query+recentchanges}}",
+       "apihelp-query+recentchanges-example-generator": "{{doc-apihelp-example|query+recentchanges}}",
+       "apihelp-query+redirects-description": "{{doc-apihelp-description|query+redirects}}",
+       "apihelp-query+redirects-param-prop": "{{doc-apihelp-param|query+redirects|prop}}",
+       "apihelp-query+redirects-param-namespace": "{{doc-apihelp-param|query+redirects|namespace}}",
+       "apihelp-query+redirects-param-limit": "{{doc-apihelp-param|query+redirects|limit}}",
+       "apihelp-query+redirects-param-show": "{{doc-apihelp-param|query+redirects|show}}",
+       "apihelp-query+redirects-example-simple": "{{doc-apihelp-example|query+redirects}}",
+       "apihelp-query+redirects-example-generator": "{{doc-apihelp-example|query+redirects}}",
+       "apihelp-query+revisions-description": "{{doc-apihelp-description|query+revisions}}",
+       "apihelp-query+revisions-paraminfo-singlepageonly": "{{doc-apihelp-paraminfo|query+revisions|singlepageonly}}",
+       "apihelp-query+revisions-param-startid": "{{doc-apihelp-param|query+revisions|startid}}",
+       "apihelp-query+revisions-param-endid": "{{doc-apihelp-param|query+revisions|endid}}",
+       "apihelp-query+revisions-param-start": "{{doc-apihelp-param|query+revisions|start}}",
+       "apihelp-query+revisions-param-end": "{{doc-apihelp-param|query+revisions|end}}",
+       "apihelp-query+revisions-param-user": "{{doc-apihelp-param|query+revisions|user}}",
+       "apihelp-query+revisions-param-excludeuser": "{{doc-apihelp-param|query+revisions|excludeuser}}",
+       "apihelp-query+revisions-param-tag": "{{doc-apihelp-param|query+revisions|tag}}",
+       "apihelp-query+revisions-param-token": "{{doc-apihelp-param|query+revisions|token}}",
+       "apihelp-query+revisions-example-content": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions-example-last5": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions-example-first5": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions-example-first5-after": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions-example-first5-not-localhost": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions-example-first5-user": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions+base-param-prop": "{{doc-apihelp-param|query+revisions+base|prop|description=the \"prop\" parameter to revision querying modules|noseealso=1}}",
+       "apihelp-query+revisions+base-param-limit": "{{doc-apihelp-param|query+revisions+base|limit|description=the \"limit\" parameter to revision querying modules|noseealso=1}}",
+       "apihelp-query+revisions+base-param-expandtemplates": "{{doc-apihelp-param|query+revisions+base|expandtemplates|description=the \"expandtemplates\" parameter to revision querying modules|noseealso=1}}",
+       "apihelp-query+revisions+base-param-generatexml": "{{doc-apihelp-param|query+revisions+base|generatexml|description=the \"generatexml\" parameter to revision querying modules|noseealso=1}}",
+       "apihelp-query+revisions+base-param-parse": "{{doc-apihelp-param|query+revisions+base|parse|description=the \"parse\" parameter to revision querying modules|noseealso=1}}",
+       "apihelp-query+revisions+base-param-section": "{{doc-apihelp-param|query+revisions+base|section|description=the \"section\" parameter to revision querying modules|noseealso=1}}",
+       "apihelp-query+revisions+base-param-diffto": "{{doc-apihelp-param|query+revisions+base|diffto|description=the \"diffto\" parameter to revision querying modules|noseealso=1}}",
+       "apihelp-query+revisions+base-param-difftotext": "{{doc-apihelp-param|query+revisions+base|difftotext|description=the \"difftotext\" parameter to revision querying modules|noseealso=1}}",
+       "apihelp-query+revisions+base-param-contentformat": "{{doc-apihelp-param|query+revisions+base|contentformat|description=the \"contentformat\" parameter to revision querying modules|noseealso=1}}",
+       "apihelp-query+search-description": "{{doc-apihelp-description|query+search}}",
+       "apihelp-query+search-param-search": "{{doc-apihelp-param|query+search|search}}",
+       "apihelp-query+search-param-namespace": "{{doc-apihelp-param|query+search|namespace}}",
+       "apihelp-query+search-param-what": "{{doc-apihelp-param|query+search|what}}",
+       "apihelp-query+search-param-info": "{{doc-apihelp-param|query+search|info}}",
+       "apihelp-query+search-param-prop": "{{doc-apihelp-param|query+search|prop}}",
+       "apihelp-query+search-param-limit": "{{doc-apihelp-param|query+search|limit}}",
+       "apihelp-query+search-param-interwiki": "{{doc-apihelp-param|query+search|interwiki}}",
+       "apihelp-query+search-param-backend": "{{doc-apihelp-param|query+search|backend}}",
+       "apihelp-query+search-example-simple": "{{doc-apihelp-example|query+search}}",
+       "apihelp-query+search-example-text": "{{doc-apihelp-example|query+search}}",
+       "apihelp-query+search-example-generator": "{{doc-apihelp-example|query+search}}",
+       "apihelp-query+siteinfo-description": "{{doc-apihelp-description|query+siteinfo}}",
+       "apihelp-query+siteinfo-param-prop": "{{doc-apihelp-param|query+siteinfo|prop}}",
+       "apihelp-query+siteinfo-param-filteriw": "{{doc-apihelp-param|query+siteinfo|filteriw}}",
+       "apihelp-query+siteinfo-param-showalldb": "{{doc-apihelp-param|query+siteinfo|showalldb}}",
+       "apihelp-query+siteinfo-param-numberingroup": "{{doc-apihelp-param|query+siteinfo|numberingroup}}",
+       "apihelp-query+siteinfo-param-inlanguagecode": "{{doc-apihelp-param|query+siteinfo|inlanguagecode}}",
+       "apihelp-query+siteinfo-example-simple": "{{doc-apihelp-example|query+siteinfo}}",
+       "apihelp-query+siteinfo-example-interwiki": "{{doc-apihelp-example|query+siteinfo}}",
+       "apihelp-query+siteinfo-example-replag": "{{doc-apihelp-example|query+siteinfo}}",
+       "apihelp-query+stashimageinfo-description": "{{doc-apihelp-description|query+stashimageinfo}}",
+       "apihelp-query+stashimageinfo-param-filekey": "{{doc-apihelp-param|query+stashimageinfo|filekey}}",
+       "apihelp-query+stashimageinfo-param-sessionkey": "{{doc-apihelp-param|query+stashimageinfo|sessionkey}}",
+       "apihelp-query+stashimageinfo-param-prop": "{{doc-apihelp-param|query+stashimageinfo|prop}}",
+       "apihelp-query+stashimageinfo-example-simple": "{{doc-apihelp-example|query+stashimageinfo}}",
+       "apihelp-query+stashimageinfo-example-params": "{{doc-apihelp-example|query+stashimageinfo}}",
+       "apihelp-query+tags-description": "{{doc-apihelp-description|query+tags}}",
+       "apihelp-query+tags-param-limit": "{{doc-apihelp-param|query+tags|limit}}",
+       "apihelp-query+tags-param-prop": "{{doc-apihelp-param|query+tags|prop}}",
+       "apihelp-query+tags-example-simple": "{{doc-apihelp-example|query+tags}}",
+       "apihelp-query+templates-description": "{{doc-apihelp-description|query+templates}}",
+       "apihelp-query+templates-param-namespace": "{{doc-apihelp-param|query+templates|namespace}}",
+       "apihelp-query+templates-param-limit": "{{doc-apihelp-param|query+templates|limit}}",
+       "apihelp-query+templates-param-templates": "{{doc-apihelp-param|query+templates|templates}}",
+       "apihelp-query+templates-param-dir": "{{doc-apihelp-param|query+templates|dir}}",
+       "apihelp-query+templates-example-simple": "{{doc-apihelp-example|query+templates}}",
+       "apihelp-query+templates-example-generator": "{{doc-apihelp-example|query+templates}}",
+       "apihelp-query+templates-example-namespaces": "{{doc-apihelp-example|query+templates}}",
+       "apihelp-query+tokens-description": "{{doc-apihelp-description|query+tokens}}",
+       "apihelp-query+tokens-param-type": "{{doc-apihelp-param|query+tokens|type}}",
+       "apihelp-query+tokens-example-simple": "{{doc-apihelp-example|query+tokens}}",
+       "apihelp-query+tokens-example-types": "{{doc-apihelp-example|query+tokens}}",
+       "apihelp-query+transcludedin-description": "{{doc-apihelp-description|query+transcludedin}}",
+       "apihelp-query+transcludedin-param-prop": "{{doc-apihelp-param|query+transcludedin|prop}}",
+       "apihelp-query+transcludedin-param-namespace": "{{doc-apihelp-param|query+transcludedin|namespace}}",
+       "apihelp-query+transcludedin-param-limit": "{{doc-apihelp-param|query+transcludedin|limit}}",
+       "apihelp-query+transcludedin-param-show": "{{doc-apihelp-param|query+transcludedin|show}}",
+       "apihelp-query+transcludedin-example-simple": "{{doc-apihelp-example|query+transcludedin}}",
+       "apihelp-query+transcludedin-example-generator": "{{doc-apihelp-example|query+transcludedin}}",
+       "apihelp-query+usercontribs-description": "{{doc-apihelp-description|query+usercontribs}}",
+       "apihelp-query+usercontribs-param-limit": "{{doc-apihelp-param|query+usercontribs|limit}}",
+       "apihelp-query+usercontribs-param-start": "{{doc-apihelp-param|query+usercontribs|start}}",
+       "apihelp-query+usercontribs-param-end": "{{doc-apihelp-param|query+usercontribs|end}}",
+       "apihelp-query+usercontribs-param-user": "{{doc-apihelp-param|query+usercontribs|user}}",
+       "apihelp-query+usercontribs-param-userprefix": "{{doc-apihelp-param|query+usercontribs|userprefix}}",
+       "apihelp-query+usercontribs-param-namespace": "{{doc-apihelp-param|query+usercontribs|namespace}}",
+       "apihelp-query+usercontribs-param-prop": "{{doc-apihelp-param|query+usercontribs|prop}}",
+       "apihelp-query+usercontribs-param-show": "{{doc-apihelp-param|query+usercontribs|show|params=* $1 - Value of [[mw:Manual:$RCMaxAge|$RCMaxAge]]|paramstart=2}}",
+       "apihelp-query+usercontribs-param-tag": "{{doc-apihelp-param|query+usercontribs|tag}}",
+       "apihelp-query+usercontribs-param-toponly": "{{doc-apihelp-param|query+usercontribs|toponly}}",
+       "apihelp-query+usercontribs-example-user": "{{doc-apihelp-example|query+usercontribs}}",
+       "apihelp-query+usercontribs-example-ipprefix": "{{doc-apihelp-example|query+usercontribs}}",
+       "apihelp-query+userinfo-description": "{{doc-apihelp-description|query+userinfo}}",
+       "apihelp-query+userinfo-param-prop": "{{doc-apihelp-param|query+userinfo|prop|params=* $1 - Maximum value for the \"unreadcount\" property.\n$2 - Return value when there are more unread pages.|paramstart=3}}",
+       "apihelp-query+userinfo-example-simple": "{{doc-apihelp-example|query+userinfo}}",
+       "apihelp-query+userinfo-example-data": "{{doc-apihelp-example|query+userinfo}}",
+       "apihelp-query+users-description": "{{doc-apihelp-description|query+users}}",
+       "apihelp-query+users-param-prop": "{{doc-apihelp-param|query+users|prop}}",
+       "apihelp-query+users-param-users": "{{doc-apihelp-param|query+users|users}}",
+       "apihelp-query+users-param-token": "{{doc-apihelp-param|query+users|token}}",
+       "apihelp-query+users-example-simple": "{{doc-apihelp-example|query+users}}",
+       "apihelp-query+watchlist-description": "{{doc-apihelp-description|query+watchlist}}",
+       "apihelp-query+watchlist-param-allrev": "{{doc-apihelp-param|query+watchlist|allrev}}",
+       "apihelp-query+watchlist-param-start": "{{doc-apihelp-param|query+watchlist|start}}",
+       "apihelp-query+watchlist-param-end": "{{doc-apihelp-param|query+watchlist|end}}",
+       "apihelp-query+watchlist-param-namespace": "{{doc-apihelp-param|query+watchlist|namespace}}",
+       "apihelp-query+watchlist-param-user": "{{doc-apihelp-param|query+watchlist|user}}",
+       "apihelp-query+watchlist-param-excludeuser": "{{doc-apihelp-param|query+watchlist|excludeuser}}",
+       "apihelp-query+watchlist-param-limit": "{{doc-apihelp-param|query+watchlist|limit}}",
+       "apihelp-query+watchlist-param-prop": "{{doc-apihelp-param|query+watchlist|prop}}",
+       "apihelp-query+watchlist-param-show": "{{doc-apihelp-param|query+watchlist|show}}",
+       "apihelp-query+watchlist-param-type": "{{doc-apihelp-param|query+watchlist|type}}",
+       "apihelp-query+watchlist-param-owner": "{{doc-apihelp-param|query+watchlist|owner}}",
+       "apihelp-query+watchlist-param-token": "{{doc-apihelp-param|query+watchlist|token}}",
+       "apihelp-query+watchlist-example-simple": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlist-example-props": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlist-example-allrev": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlist-example-generator": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlist-example-generator-rev": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlist-example-wlowner": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlistraw-description": "{{doc-apihelp-description|query+watchlistraw}}",
+       "apihelp-query+watchlistraw-param-namespace": "{{doc-apihelp-param|query+watchlistraw|namespace}}",
+       "apihelp-query+watchlistraw-param-limit": "{{doc-apihelp-param|query+watchlistraw|limit}}",
+       "apihelp-query+watchlistraw-param-prop": "{{doc-apihelp-param|query+watchlistraw|prop}}",
+       "apihelp-query+watchlistraw-param-show": "{{doc-apihelp-param|query+watchlistraw|show}}",
+       "apihelp-query+watchlistraw-param-owner": "{{doc-apihelp-param|query+watchlistraw|owner}}",
+       "apihelp-query+watchlistraw-param-token": "{{doc-apihelp-param|query+watchlistraw|token}}",
+       "apihelp-query+watchlistraw-example-simple": "{{doc-apihelp-example|query+watchlistraw}}",
+       "apihelp-query+watchlistraw-example-generator": "{{doc-apihelp-example|query+watchlistraw}}",
+       "apihelp-revisiondelete-description": "{{doc-apihelp-description|revisiondelete}}",
+       "apihelp-revisiondelete-param-type": "{{doc-apihelp-param|revisiondelete|type}}",
+       "apihelp-revisiondelete-param-target": "{{doc-apihelp-param|revisiondelete|target}}",
+       "apihelp-revisiondelete-param-ids": "{{doc-apihelp-param|revisiondelete|ids}}",
+       "apihelp-revisiondelete-param-hide": "{{doc-apihelp-param|revisiondelete|hide}}",
+       "apihelp-revisiondelete-param-show": "{{doc-apihelp-param|revisiondelete|show}}",
+       "apihelp-revisiondelete-param-suppress": "{{doc-apihelp-param|revisiondelete|suppress}}",
+       "apihelp-revisiondelete-param-reason": "{{doc-apihelp-param|revisiondelete|reason}}",
+       "apihelp-revisiondelete-example-revision": "{{doc-apihelp-example|revisiondelete}}",
+       "apihelp-revisiondelete-example-log": "{{doc-apihelp-example|revisiondelete}}",
+       "apihelp-rollback-description": "{{doc-apihelp-description|rollback}}",
+       "apihelp-rollback-param-title": "{{doc-apihelp-param|rollback|title}}",
+       "apihelp-rollback-param-pageid": "{{doc-apihelp-param|rollback|pageid}}",
+       "apihelp-rollback-param-user": "{{doc-apihelp-param|rollback|user}}",
+       "apihelp-rollback-param-summary": "{{doc-apihelp-param|rollback|summary}}",
+       "apihelp-rollback-param-markbot": "{{doc-apihelp-param|rollback|markbot}}",
+       "apihelp-rollback-param-watchlist": "{{doc-apihelp-param|rollback|watchlist}}",
+       "apihelp-rollback-example-simple": "{{doc-apihelp-example|rollback}}",
+       "apihelp-rollback-example-summary": "{{doc-apihelp-example|rollback}}",
+       "apihelp-rsd-description": "{{doc-apihelp-description|rsd}}",
+       "apihelp-rsd-example-simple": "{{doc-apihelp-example|rsd}}",
+       "apihelp-setnotificationtimestamp-description": "{{doc-apihelp-description|setnotificationtimestamp}}",
+       "apihelp-setnotificationtimestamp-param-entirewatchlist": "{{doc-apihelp-param|setnotificationtimestamp|entirewatchlist}}",
+       "apihelp-setnotificationtimestamp-param-timestamp": "{{doc-apihelp-param|setnotificationtimestamp|timestamp}}",
+       "apihelp-setnotificationtimestamp-param-torevid": "{{doc-apihelp-param|setnotificationtimestamp|torevid}}",
+       "apihelp-setnotificationtimestamp-param-newerthanrevid": "{{doc-apihelp-param|setnotificationtimestamp|newerthanrevid}}",
+       "apihelp-setnotificationtimestamp-example-all": "{{doc-apihelp-example|setnotificationtimestamp}}",
+       "apihelp-setnotificationtimestamp-example-page": "{{doc-apihelp-example|setnotificationtimestamp}}",
+       "apihelp-setnotificationtimestamp-example-pagetimestamp": "{{doc-apihelp-example|setnotificationtimestamp}}",
+       "apihelp-setnotificationtimestamp-example-allpages": "{{doc-apihelp-example|setnotificationtimestamp}}",
+       "apihelp-tokens-description": "{{doc-apihelp-description|tokens}}",
+       "apihelp-tokens-param-type": "{{doc-apihelp-param|tokens|type}}",
+       "apihelp-tokens-example-edit": "{{doc-apihelp-example|tokens}}",
+       "apihelp-tokens-example-emailmove": "{{doc-apihelp-example|tokens}}",
+       "apihelp-unblock-description": "{{doc-apihelp-description|unblock}}",
+       "apihelp-unblock-param-id": "{{doc-apihelp-param|unblock|id}}",
+       "apihelp-unblock-param-user": "{{doc-apihelp-param|unblock|user}}",
+       "apihelp-unblock-param-reason": "{{doc-apihelp-param|unblock|reason}}",
+       "apihelp-unblock-example-id": "{{doc-apihelp-example|unblock}}",
+       "apihelp-unblock-example-user": "{{doc-apihelp-example|unblock}}",
+       "apihelp-undelete-description": "{{doc-apihelp-description|undelete}}",
+       "apihelp-undelete-param-title": "{{doc-apihelp-param|undelete|title}}",
+       "apihelp-undelete-param-reason": "{{doc-apihelp-param|undelete|reason}}",
+       "apihelp-undelete-param-timestamps": "{{doc-apihelp-param|undelete|timestamps}}",
+       "apihelp-undelete-param-fileids": "{{doc-apihelp-param|undelete|fileids}}",
+       "apihelp-undelete-param-watchlist": "{{doc-apihelp-param|undelete|watchlist}}",
+       "apihelp-undelete-example-page": "{{doc-apihelp-example|undelete}}",
+       "apihelp-undelete-example-revisions": "{{doc-apihelp-example|undelete}}",
+       "apihelp-upload-description": "{{doc-apihelp-description|upload}}",
+       "apihelp-upload-param-filename": "{{doc-apihelp-param|upload|filename}}",
+       "apihelp-upload-param-comment": "{{doc-apihelp-param|upload|comment}}",
+       "apihelp-upload-param-text": "{{doc-apihelp-param|upload|text}}",
+       "apihelp-upload-param-watch": "{{doc-apihelp-param|upload|watch}}",
+       "apihelp-upload-param-watchlist": "{{doc-apihelp-param|upload|watchlist}}",
+       "apihelp-upload-param-ignorewarnings": "{{doc-apihelp-param|upload|ignorewarnings}}",
+       "apihelp-upload-param-file": "{{doc-apihelp-param|upload|file}}",
+       "apihelp-upload-param-url": "{{doc-apihelp-param|upload|url}}",
+       "apihelp-upload-param-filekey": "{{doc-apihelp-param|upload|filekey}}",
+       "apihelp-upload-param-sessionkey": "{{doc-apihelp-param|upload|sessionkey}}",
+       "apihelp-upload-param-stash": "{{doc-apihelp-param|upload|stash}}",
+       "apihelp-upload-param-filesize": "{{doc-apihelp-param|upload|filesize}}",
+       "apihelp-upload-param-offset": "{{doc-apihelp-param|upload|offset}}",
+       "apihelp-upload-param-chunk": "{{doc-apihelp-param|upload|chunk}}",
+       "apihelp-upload-param-async": "{{doc-apihelp-param|upload|async}}",
+       "apihelp-upload-param-asyncdownload": "{{doc-apihelp-param|upload|asyncdownload}}",
+       "apihelp-upload-param-leavemessage": "{{doc-apihelp-param|upload|leavemessage}}",
+       "apihelp-upload-param-statuskey": "{{doc-apihelp-param|upload|statuskey}}",
+       "apihelp-upload-param-checkstatus": "{{doc-apihelp-param|upload|checkstatus}}",
+       "apihelp-upload-example-url": "{{doc-apihelp-example|upload}}",
+       "apihelp-upload-example-filekey": "{{doc-apihelp-example|upload}}",
+       "apihelp-userrights-description": "{{doc-apihelp-description|userrights}}",
+       "apihelp-userrights-param-user": "{{doc-apihelp-param|userrights|user}}\n{{Identical|Username}}",
+       "apihelp-userrights-param-userid": "{{doc-apihelp-param|userrights|userid}}",
+       "apihelp-userrights-param-add": "{{doc-apihelp-param|userrights|add}}",
+       "apihelp-userrights-param-remove": "{{doc-apihelp-param|userrights|remove}}",
+       "apihelp-userrights-param-reason": "{{doc-apihelp-param|userrights|reason}}",
+       "apihelp-userrights-example-user": "{{doc-apihelp-example|userrights}}",
+       "apihelp-userrights-example-userid": "{{doc-apihelp-example|userrights}}",
+       "apihelp-watch-description": "{{doc-apihelp-description|watch}}",
+       "apihelp-watch-param-title": "{{doc-apihelp-param|watch|title}}",
+       "apihelp-watch-param-unwatch": "{{doc-apihelp-param|watch|unwatch}}",
+       "apihelp-watch-example-watch": "{{doc-apihelp-example|watch}}",
+       "apihelp-watch-example-unwatch": "{{doc-apihelp-example|watch}}",
+       "apihelp-watch-example-generator": "{{doc-apihelp-example|watch}}",
+       "apihelp-format-example-generic": "{{doc-apihelp-example|format|params=* $1 - Format name|paramstart=2|noseealso=1}}",
+       "apihelp-dbg-description": "{{doc-apihelp-description|dbg|seealso=* {{msg-mw|apihelp-dbgfm-description}}}}",
+       "apihelp-dbgfm-description": "{{doc-apihelp-description|dbgfm|seealso=* {{msg-mw|apihelp-dbg-description}}}}",
+       "apihelp-dump-description": "{{doc-apihelp-description|dump|seealso=* {{msg-mw|apihelp-dumpfm-description}}}}",
+       "apihelp-dumpfm-description": "{{doc-apihelp-description|dumpfm|seealso=* {{msg-mw|apihelp-dump-description}}}}",
+       "apihelp-json-description": "{{doc-apihelp-description|json|seealso=* {{msg-mw|apihelp-jsonfm-description}}}}",
+       "apihelp-json-param-callback": "{{doc-apihelp-param|json|callback}}",
+       "apihelp-json-param-utf8": "{{doc-apihelp-param|json|utf8}}",
+       "apihelp-jsonfm-description": "{{doc-apihelp-description|jsonfm|seealso=* {{msg-mw|apihelp-json-description}}}}",
+       "apihelp-none-description": "{{doc-apihelp-description|none}}",
+       "apihelp-php-description": "{{doc-apihelp-description|php|seealso=* {{msg-mw|apihelp-phpfm-description}}}}",
+       "apihelp-phpfm-description": "{{doc-apihelp-description|phpfm|seealso=* {{msg-mw|apihelp-php-description}}}}",
+       "apihelp-rawfm-description": "{{doc-apihelp-description|rawfm|seealso=* {{msg-mw|apihelp-raw-description}}}}",
+       "apihelp-txt-description": "{{doc-apihelp-description|txt|seealso=* {{msg-mw|apihelp-txtfm-description}}}}",
+       "apihelp-txtfm-description": "{{doc-apihelp-description|txtfm|seealso=* {{msg-mw|apihelp-txt-description}}}}",
+       "apihelp-wddx-description": "{{doc-apihelp-description|wddx|seealso=* {{msg-mw|apihelp-wddxfm-description}}}}",
+       "apihelp-wddxfm-description": "{{doc-apihelp-description|wddxfm|seealso=* {{msg-mw|apihelp-wddx-description}}}}",
+       "apihelp-xml-description": "{{doc-apihelp-description|xml|seealso=* {{msg-mw|apihelp-xmlfm-description}}}}",
+       "apihelp-xml-param-xslt": "{{doc-apihelp-param|xml|xslt}}",
+       "apihelp-xml-param-includexmlnamespace": "{{doc-apihelp-param|xml|includexmlnamespace}}",
+       "apihelp-xmlfm-description": "{{doc-apihelp-description|xmlfm|seealso=* {{msg-mw|apihelp-xml-description}}}}",
+       "apihelp-yaml-description": "{{doc-apihelp-description|yaml|seealso=* {{msg-mw|apihelp-yamlfm-description}}}}",
+       "apihelp-yamlfm-description": "{{doc-apihelp-description|yamlfm|seealso=* {{msg-mw|apihelp-yaml-description}}}}",
+       "api-format-title": "Page title when API output is pretty-printed in HTML.",
+       "api-format-prettyprint-header": "{{technical}} Displayed as a header when API output is pretty-printed in HTML.\n\nParameters:\n* $1 - Format name\n* $2 - Non-pretty-printing module name",
+       "api-orm-param-props": "{{doc-apihelp-param|orm|props|description=the \"props\" parameter in subclasses of ApiQueryORM}}",
+       "api-orm-param-limit": "{{doc-apihelp-param|orm|limit|description=the \"limit\" parameter in subclasses of ApiQueryORM}}",
+       "api-pageset-param-titles": "{{doc-apihelp-param|pageset|titles|description=the \"titles\" parameter in pageset-using modules}}",
+       "api-pageset-param-pageids": "{{doc-apihelp-param|pageset|pageids|description=the \"pageids\" parameter in pageset-using modules}}",
+       "api-pageset-param-revids": "{{doc-apihelp-param|pageset|revids|description=the \"revids\" parameter in pageset-using modules}}",
+       "api-pageset-param-generator": "{{doc-apihelp-param|pageset|generator|description=the \"generator\" parameter in pageset-using modules}}",
+       "api-pageset-param-redirects-generator": "{{doc-apihelp-param|pageset|redirects-generator|description=the \"redirects\" parameter in pageset-using modules when the \"generator\" parameter is also available}}",
+       "api-pageset-param-redirects-nogenerator": "{{doc-apihelp-param|pageset|redirects-generator|description=the \"redirects\" parameter in pageset-using modules when the \"generator\" parameter is not available}}",
+       "api-pageset-param-converttitles": "{{doc-apihelp-param|pageset|converttitles|description=the \"converttitles\" parameter in pageset-using modules|params=* $1 - List of languages with variants|paramstart=2}}",
+       "api-help-title": "Page title for the auto-generated help output",
+       "api-help-lead": "Text displayed at the top of the API help page",
+       "api-help-main-header": "Text for the header of the main module",
+       "api-help-fallback-description": "{{notranslate}}",
+       "api-help-fallback-parameter": "{{notranslate}}",
+       "api-help-fallback-example": "{{notranslate}}",
+       "api-help-flags": "{{optional}} Label for the API help flags box\n\nParameters:\n* $1 - Number of flags to be displayed",
+       "api-help-flag-deprecated": "Flag displayed for an API module that is deprecated",
+       "api-help-flag-internal": "Flag displayed for an API module that is considered internal or unstable",
+       "api-help-flag-readrights": "Flag displayed for an API module that requires read rights",
+       "api-help-flag-writerights": "Flag displayed for an API module that requires write rights",
+       "api-help-flag-mustbeposted": "Flag displayed for an API module that only accepts POST requests",
+       "api-help-flag-generator": "Flag displayed for an API module that can be used as a generator",
+       "api-help-help-urls": "{{optional}} Label for the API help urls section\n\nParameters:\n* $1 - Number of urls to be displayed",
+       "api-help-parameters": "Label for the API help parameters section\n\nParameters:\n* $1 - Number of parameters to be displayed\n{{Identical|Parameter}}",
+       "api-help-param-deprecated": "Displayed in the API help for any deprecated parameter\n{{Identical|Deprecated}}",
+       "api-help-param-required": "Displayed in the API help for any required parameter",
+       "api-help-param-list": "Used to display the possible values for a parameter taking a list of values\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - Comma-separated list of values, possibly formatted using {{msg-mw|api-help-param-list-can-be-empty}}",
+       "api-help-param-list-can-be-empty": "Used to indicate that one of the possible values in the list is the empty string.\n\nParameters:\n* $1 - Number of items in the rest of the list; may be 0\n* $2 - Remainder of the list as a comma-separated string",
+       "api-help-param-limit": "Used to display the maximum value of a limit parameter\n\nParameters:\n* $1 - Maximum value",
+       "api-help-param-limit2": "Used to display the maximum values of a limit parameter\n\nParameters:\n* $1 - Maximum value without the apihighlimits right\n* $2 - Maximum value with the apihighlimits right",
+       "api-help-param-integer-min": "Used to display an integer parameter with a minimum but no maximum value\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - Minimum value\n* $3 - unused\n\nSee also:\n* {{msg-mw|api-help-param-integer-max}}\n* {{msg-mw|api-help-param-integer-minmax}}",
+       "api-help-param-integer-max": "Used to display an integer parameter with a maximum but no minimum value.\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - (Unused)\n* $3 - Maximum value\nSee also:\n* {{msg-mw|Api-help-param-integer-min}}\n* {{msg-mw|Api-help-param-integer-minmax}}",
+       "api-help-param-integer-minmax": "Used to display an integer parameter with a maximum and minimum values\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - Minimum value\n* $3 - Maximum value\n\nSee also:\n* {{msg-mw|api-help-param-integer-min}}\n* {{msg-mw|api-help-param-integer-max}}",
+       "api-help-param-upload": "{{technical}} Used to indicate that an 'upload'-type parameter must be posted as a file upload using multipart/form-data",
+       "api-help-param-multi-separate": "Used to indicate how to separate multiple values. Not used with {{msg-mw|api-help-param-list}}.",
+       "api-help-param-multi-max": "Used to indicate the maximum number of values accepted for a multi-valued parameter.\n\nParameters:\n* $1 - Maximum value without the apihighlimits right\n* $2 - Maximum value with the apihighlimits right",
+       "api-help-param-default": "Used to display the default value for an API parameter\n\nParameters:\n* $1 - Default value\n\nSee also:\n* {{msg-mw|api-help-param-default-empty}}\n{{Identical|Default}}",
+       "api-help-param-default-empty": "Used to display the default value for an API parameter when that default is an empty value\n\nSee also:\n* {{msg-mw|api-help-param-default}}",
+       "api-help-param-token": "{{doc-apihelp-param|description=any 'token' parameter|paramstart=3|params=\n* $1 - Token type|noseealso=1}}",
+       "api-help-param-token-webui": "{{doc-apihelp-param|description=additional text for any \"token\" parameter, explaining that web UI tokens are also accepted|noseealso=1}}",
+       "api-help-param-disabled-in-miser-mode": "{{doc-apihelp-param|description=any parameter that is disabled when [[mw:Manual:$wgMiserMode|$wgMiserMode]] is set.|noseealso=1}}",
+       "api-help-param-limited-in-miser-mode": "{{doc-apihelp-param|description=additional text for any parameter that may cause the module to return few results when [[mw:Manual:$wgMiserMode|$wgMiserMode]] is set.|noseealso=1}}",
+       "api-help-param-direction": "{{doc-apihelp-param|description=any standard \"dir\" parameter|noseealso=1}}",
+       "api-help-param-continue": "{{doc-apihelp-param|description=any standard \"continue\" parameter, or other parameter with the same semantics|noseealso=1}}",
+       "api-help-param-no-description": "Displayed on API parameters that lack any description",
+       "api-help-examples": "Label for the API help examples section\n\nParameters:\n* $1 - Number of examples to be displayed\n{{Identical|Example}}",
+       "api-help-permissions": "Label for the \"permissions\" section in the main module's help output.\n\nParameters:\n* $1 - Number of permissions displayed\n{{Identical|Permission}}",
+       "api-help-permissions-granted-to": "Used to introduce the list of groups each permission is assigned to.\n\nParameters:\n* $1 - Number of groups\n* $2 - List of group names, comma-separated",
+       "api-help-right-apihighlimits": "{{technical}}{{doc-right|apihighlimits|prefix=api-help}}\nThis message is used instead of {{msg-mw|right-apihighlimits}} in the API help to display the actual limits.\n\nParameters:\n* $1 - Limit for slow queries\n* $2 - Limit for fast queries",
+       "api-credits-header": "Header for the API credits section in the API help output\n{{Identical|Credit}}",
+       "api-credits": "API credits text, displayed in the API help output"
+}
diff --git a/includes/api/i18n/ru.json b/includes/api/i18n/ru.json
new file mode 100644 (file)
index 0000000..330da6d
--- /dev/null
@@ -0,0 +1,44 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mahairod",
+                       "Okras"
+               ]
+       },
+       "apihelp-main-param-action": "Действие, которое следует выполнить.",
+       "apihelp-main-param-format": "Формат вывода.",
+       "apihelp-main-param-smaxage": "Устанавливает заголовок s-maxage в заданное число секунд. Ошибки никогда не кэшируются.",
+       "apihelp-main-param-maxage": "Устанавливает заголовок max-age в заданное число секунд. Ошибки никогда не кэшируются.",
+       "apihelp-main-param-assert": "Удостовериться, что пользователь авторизован, если задано \"user\", или что имеет права бота, если задано \"bot\".",
+       "apihelp-main-param-requestid": "Любое значение, заданное здесь, будет включено в ответ. Может быть использовано для различения запросов.",
+       "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-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": "Добавить эту страницу в список наблюдения.",
+       "apihelp-disabled-description": "Этот модуль был отключен.",
+       "apihelp-edit-param-sectiontitle": "Заголовок для нового раздела.",
+       "apihelp-edit-param-text": "Содержание страницы.",
+       "apihelp-edit-example-edit": "Редактировать страницу",
+       "apihelp-expandtemplates-param-title": "Заголовок страницы.",
+       "apihelp-import-param-xml": "Загруженный XML-файл.",
+       "apihelp-login-param-name": "Имя участника.",
+       "apihelp-login-param-password": "Пароль.",
+       "apihelp-login-param-domain": "Домен (необязательно).",
+       "apihelp-login-example-login": "Войти",
+       "apihelp-logout-description": "Выйти и очистить данные сессии.",
+       "api-help-main-header": "Главный модуль",
+       "api-help-parameters": "Параметр{{PLURAL:$1||ы}}:",
+       "api-help-param-deprecated": "Устаревший.",
+       "api-help-param-required": "Этот параметр является обязательным.",
+       "api-help-param-default": "По умолчанию: $1",
+       "api-help-param-default-empty": "По умолчанию: <span class=\"apihelp-empty\">(пусто)</span>",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(описание отсутствует)</span>",
+       "api-help-examples": "Пример{{PLURAL:$1||ы}}:",
+       "api-credits-header": "Создатели"
+}
diff --git a/includes/api/i18n/si.json b/includes/api/i18n/si.json
new file mode 100644 (file)
index 0000000..14e0015
--- /dev/null
@@ -0,0 +1,70 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Susith Chandira Gts"
+               ]
+       },
+       "apihelp-main-param-action": "ඉටු කිරීමට ඇත්තේ කුමන ක්‍රියාවද.",
+       "apihelp-main-param-format": "ප්‍රතිදානයේ ආකෘතිය.",
+       "apihelp-main-param-requestid": "මෙහි ඇති සියලුම වටිනාකම් ප්‍රතිචාරයන්හි අන්තර්ගතකොට ඇත. ඇතැම් විට පැහැදිලිව වටහාගත් ඉල්ලීම් සදහා භාවිතා වේ.",
+       "apihelp-main-param-servedby": "ප්‍රතිපලයන්හි ඉල්ලීම් ඉටුකළ ධාරකනාමය ඇතුලත් කරන්න.",
+       "apihelp-main-param-curtimestamp": "ප්‍රථිපලයන්හි කාල මුද්‍රාව ඇතුලත් කරන්න.",
+       "apihelp-help-description": "නිරූපිත ඒකක සදහා උදවු පෙන්වන්න.",
+       "apihelp-help-param-submodules": "නම් කරන ලද ඒකකයේ, අනුඒකක සදහා උදවු ඇතුලත් කරන්න.",
+       "apihelp-help-param-helpformat": "උදවු ප්‍රතිදානයේ ආකෘතිය.",
+       "apihelp-help-param-wrap": "ප්‍රතිදානය නියමිත API අනුකූලතා ආකෘතියකට හරවන්න.",
+       "apihelp-help-param-toc": "HTML ප්‍රතිදනයන්ගේ පටුනේ ලැයිස්තුවක් ඇතුලත් කරන්න.",
+       "apihelp-help-example-main": "ප්‍රධාන ඒකකය සදහා උදවු කරන්න",
+       "apihelp-help-example-recursive": "සියලුම උදවු එක පිටුවක් තුල",
+       "apihelp-help-example-query": "සැකසහිත අනුඒකක සදහා උදවු කරන්න",
+       "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-json-description": "ප්‍රතිදාන දත්ත JSON ආකෘතියෙන් පවතී.",
+       "apihelp-jsonfm-description": "ප්‍රතිදාන දත්ත JSON ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+       "apihelp-none-description": "ප්‍රතිදානයේ කිසිවක් නොමැත.",
+       "apihelp-php-description": "ප්‍රතිදාන දත්ත serialized PHP ආකෘතියෙන් පවතී.",
+       "apihelp-phpfm-description": "ප්‍රතිදාන දත්ත serialized PHP ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+       "apihelp-txt-description": "ප්‍රතිදාන දත්ත PHP හි print_r() ආකෘතියෙන් පවතී.",
+       "apihelp-txtfm-description": "ප්‍රතිදාන දත්ත PHP හි print_r() ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+       "apihelp-wddx-description": "ප්‍රතිදාන දත්ත WDDX ආකෘතියෙන් පවතී",
+       "apihelp-wddxfm-description": "ප්‍රතිදාන දත්ත WDDX ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+       "apihelp-xml-description": "ප්‍රතිදාන දත්ත XML ආකෘතියෙන් පවතී.",
+       "apihelp-xml-param-includexmlnamespace": "නිරූපණය කළා නම්, XML නාමාවකාශයක් එකතු කරන්න.",
+       "apihelp-xmlfm-description": "ප්‍රතිදාන දත්ත XML ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+       "apihelp-yaml-description": "ප්‍රතිදාන දත්ත YAML ආකෘතියෙන් පවතී.",
+       "apihelp-yamlfm-description": "ප්‍රතිදාන දත්ත YAML ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+       "api-format-title": "මාධ්‍යවිකි API ප්‍රථිපල",
+       "api-help-title": "මාධ්‍යවිකි API උදවු",
+       "api-help-lead": "මෙය ස්වයං-ජනිත මාධ්‍යවිකි API \tප්‍රලේඛන පිටුවකි.\n\nප්‍රලේඛනය සහ උදාහරණ:\nhttps://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "ප්‍රධාන ආකෘතිය",
+       "api-help-flag-deprecated": "මෙම ආකෘතිය විරුද්ධත්වය ප්‍රකාශ කරන ලදී.",
+       "api-help-flag-internal": "<strong>මෙම ඒකකය අභ්‍යන්තර හෝ අස්ථායි.\n</strong> එහි ක්‍රියාකාරිත්වය දැනුම් දීමකින් තොරව වෙනස් වියහැක.",
+       "api-help-flag-readrights": "මෙම ඒකකය සදහා හිමිකම් කියවීම අවශ්‍ය වේ.",
+       "api-help-flag-writerights": "මෙම ඒකකය සදහා හිමිකම් ලිවීම අවශ්‍ය වේ.",
+       "api-help-flag-mustbeposted": "මෙම ඒකකය POST ඉල්ලීම් පමණක් බාරගනී.",
+       "api-help-flag-generator": "මෙම ආකෘතිය \tඋත්පාදකයක් ලෙස භාවිතා කල හැක.",
+       "api-help-parameters": "{{PLURAL:$1|පරාමිතිය|පරාමිතීන්}}:",
+       "api-help-param-deprecated": "විරුද්ධත්වය ප්‍රකාශ කර ඇත.",
+       "api-help-param-required": "මෙම පරාමිතිය අවශ්‍යයි.",
+       "api-help-param-list": "{{PLURAL:$1|1=එක් වටිනාකමක්|2=වටිනාකම් (\"{{!}}\" සමග වෙන් කරන්න)}}: $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-multi-separate": "වටිනාකම් \"|\" සමග වෙන් කරන්න.",
+       "api-help-param-multi-max": "අංක සදහා උපරිම වටිනාකම {{PLURAL:$1|$1}}\n({{PLURAL:$2|$2}} බොට්ස් සදහා)",
+       "api-help-param-default": "Default: $1",
+       "api-help-param-default-empty": "Default: <span class=\"apihelp-empty\">(හිස්)</span>",
+       "api-help-param-token": "[[Special:ApiHelp/query+tokens|action=query&meta=tokens]] මගින් \"$1\" \tසංඥාව සොයාගන්නා ලදී",
+       "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|\tප්‍රදානලාභියාට}}: $2",
+       "api-credits-header": "ස්තුතිය",
+       "api-credits": "API වැඩිදියුණු කරන්නන්:\n* Roan Kattouw (ප්‍රධානියා 2007 සැප්. –2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (නිර්මාපකයා, ප්‍රධානියා 2006 සැප්. – 2007 සැප්.)\n* Brad Jorsch (ප්‍රධානියා 2013–මේ දක්වා)\n\nඔබගේ අදහස්, යෝජනා හා ගැටළු mediawiki-api@lists.wikimedia.org වෙත යොමු කරන්න, පින්තූර හෝ ගොනු හරහා ගැටළු ඉදිරිපත් කිරීමට  https://bugzilla.wikimedia.org/ වෙත පිවිසෙන්න."
+}
diff --git a/includes/api/i18n/sv.json b/includes/api/i18n/sv.json
new file mode 100644 (file)
index 0000000..ae40cd9
--- /dev/null
@@ -0,0 +1,66 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Jopparn",
+                       "Lokal Profil",
+                       "WikiPhoenix"
+               ]
+       },
+       "apihelp-main-param-curtimestamp": "Inkludera den aktuella tidsstämpeln i resultatet.",
+       "apihelp-block-description": "Blockera en användare.",
+       "apihelp-block-param-user": "Användare, IP-adress eller IP-intervall du vill blockera.",
+       "apihelp-block-param-reason": "Orsak till blockering.",
+       "apihelp-block-param-anononly": "Blockera endast anonyma användare (t.ex. inaktivera anonyma redigeringar för denna IP-adress).",
+       "apihelp-block-param-nocreate": "Förhindra registrering av användarkonton.",
+       "apihelp-createaccount-description": "Skapa ett nytt användarkonto.",
+       "apihelp-createaccount-param-name": "Användarnamn.",
+       "apihelp-createaccount-param-password": "Lösenord (ignoreras om $1mailpassword angetts).",
+       "apihelp-createaccount-param-email": "Användarens e-postadress (valfritt).",
+       "apihelp-createaccount-param-realname": "Användarens riktiga namn (valfritt).",
+       "apihelp-createaccount-example-pass": "Skapa användaren \"testuser\" med lösenordet \"test123\"",
+       "apihelp-delete-description": "Radera en sida.",
+       "apihelp-delete-param-watch": "Lägg till sidan i din bevakningslista.",
+       "apihelp-delete-param-unwatch": "Ta bort sidan från din bevakningslista.",
+       "apihelp-delete-example-simple": "Radera huvudsidan",
+       "apihelp-delete-example-reason": "Raderar huvudsidan med orsaken \"Förbereder flyttning\"",
+       "apihelp-disabled-description": "Denna modul har inaktiverats.",
+       "apihelp-edit-description": "Skapa och redigera sidor.",
+       "apihelp-edit-param-text": "Sidans innehåll.",
+       "apihelp-edit-param-summary": "Redigeringssammanfattning. Även avsnittets rubrik när $1section=new och $1sectiontitle inte anges.",
+       "apihelp-edit-param-minor": "Mindre redigering.",
+       "apihelp-edit-param-watch": "Lägg till sidan i din bevakningslista.",
+       "apihelp-edit-param-unwatch": "Ta bort sidan från din bevakningslista.",
+       "apihelp-edit-example-edit": "Redigera en sida",
+       "apihelp-emailuser-description": "Skicka e-post till en användare.",
+       "apihelp-expandtemplates-param-title": "Sidans rubrik.",
+       "apihelp-expandtemplates-param-text": "Wikitext att konvertera.",
+       "apihelp-feedcontributions-param-year": "Från år (och tidigare).",
+       "apihelp-feedcontributions-param-month": "Från månad (och tidigare).",
+       "apihelp-feedrecentchanges-param-hideminor": "Dölj mindre ändringar.",
+       "apihelp-feedrecentchanges-param-hidebots": "Dölj robotändringar.",
+       "apihelp-feedrecentchanges-param-hideanons": "Dölj ändringar av oinloggade användare.",
+       "apihelp-feedrecentchanges-param-hideliu": "Dölj ändringar av inloggade användare.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Dölj patrullerade ändringar.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Dölj mina ändringar.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Filtrera efter tagg.",
+       "apihelp-feedrecentchanges-param-target": "Visa endast ändringarna av sidor som den här sidan länkar till.",
+       "apihelp-feedrecentchanges-example-simple": "Visa senaste ändringar",
+       "apihelp-feedrecentchanges-example-30days": "Visa senaste ändringar för 30 dygn",
+       "apihelp-filerevert-param-comment": "Ladda upp kommentar.",
+       "apihelp-help-example-recursive": "All hjälp på en sida",
+       "apihelp-help-example-help": "Hjälp för själva hjälpmodulen",
+       "api-help-main-header": "Huvudmodul",
+       "api-help-flag-deprecated": "Denna modul är föråldrad.",
+       "api-help-flag-internal": "<strong>Denna modul är intern eller instabil.</strong> Dess funktion kan ändras utan föregående meddelande.",
+       "api-help-flag-readrights": "Denna modul kräver läsrättigheter.",
+       "api-help-flag-writerights": "Denna modul kräver skrivrättigheter.",
+       "api-help-flag-mustbeposted": "Denna modul accepterar endast POST-begäranden.",
+       "api-help-flag-generator": "Denna modul kan användas som en generator.",
+       "api-help-parameters": "{{PLURAL:$1|Parameter|Parametrar}}:",
+       "api-help-param-deprecated": "Föråldrad.",
+       "api-help-param-required": "Denna parameter är obligatorisk.",
+       "api-help-param-list": "{{PLURAL:$1|1=ett värde|2=värden (separade med \"{{!}}\")}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Måste vara tom|Kan vara tom, eller $2}}",
+       "api-help-param-limit": "Inte mer än $1 tillåts.",
+       "api-help-param-limit2": "Inte mer än $1 ($2 för robotar) tillåts."
+}
diff --git a/includes/api/i18n/tr.json b/includes/api/i18n/tr.json
new file mode 100644 (file)
index 0000000..3a9ff25
--- /dev/null
@@ -0,0 +1,40 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Sayginer"
+               ]
+       },
+       "apihelp-edit-param-text": "Sayfa içeriği.",
+       "apihelp-edit-param-minor": "Küçük değişiklik.",
+       "apihelp-edit-param-nocreate": "Sayfa mevcut değilse hata oluştur.",
+       "apihelp-edit-param-watch": "Sayfayı izleme listenize ekleyin.",
+       "apihelp-edit-param-unwatch": "Sayfayı izleme listenizden çıkarın.",
+       "apihelp-edit-param-redirect": "Yönlendirmeleri otomatik olarak çöz.",
+       "apihelp-emailuser-description": "Bir kullanıcıya e-posta gönder.",
+       "apihelp-emailuser-param-target": "E-posta gönderilecek kullanıcı.",
+       "apihelp-emailuser-param-subject": "Konu başlığı.",
+       "apihelp-emailuser-param-text": "E-posta metni.",
+       "apihelp-emailuser-param-ccme": "Bu e-postanın bir kopyasını bana gönder.",
+       "apihelp-feedcontributions-param-toponly": "Yalnızca son revizyon olan değişiklikleri göster.",
+       "apihelp-feedcontributions-param-newonly": "Yalnızca yeni sayfa oluşturan değişiklikleri göster.",
+       "apihelp-feedcontributions-param-showsizediff": "Sürümler arasındaki boyut farkını göster.",
+       "apihelp-feedrecentchanges-param-limit": "Verilecek azami sonuç sayısı.",
+       "apihelp-feedrecentchanges-param-hideminor": "Küçük değişiklikleri gizle.",
+       "apihelp-feedrecentchanges-param-hidebots": "Bot değişikliklerini gizle.",
+       "apihelp-feedrecentchanges-param-hideanons": "Anonim kullanıcı değişikliklerini gizle.",
+       "apihelp-feedrecentchanges-param-hideliu": "Kayıtlı kullanıcı değişikliklerini gizle.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Kendi değişikliklerini gizle.",
+       "apihelp-feedrecentchanges-example-simple": "Son değişiklikleri göster",
+       "apihelp-feedrecentchanges-example-30days": "Son 30 gündeki değişiklikleri göster",
+       "apihelp-filerevert-description": "Bir dosyayı eski bir sürümüne geri döndür.",
+       "apihelp-move-description": "Bir sayfayı taşı.",
+       "apihelp-move-param-from": "Taşımak istediğiniz sayfanın başlığı. $1fromid ile birlikte kullanılamaz.",
+       "apihelp-move-param-noredirect": "Yönlendirme oluşturmayın.",
+       "apihelp-opensearch-param-limit": "Verilecek azami sonuç sayısı.",
+       "apihelp-options-example-reset": "Tüm tercihleri sıfırla",
+       "api-help-title": "MediaWiki API yardımı",
+       "api-help-parameters": "{{PLURAL:$1|Parametre|Parametre}}:",
+       "api-help-param-limit": "$1 taneden fazla olamaz.",
+       "api-help-param-limit2": "$1 taneden fazla (botlar için $2) olamaz.",
+       "api-help-param-default": "Varsayılan: $1"
+}
diff --git a/includes/api/i18n/uk.json b/includes/api/i18n/uk.json
new file mode 100644 (file)
index 0000000..d9f89a4
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ата"
+               ]
+       },
+       "apihelp-main-param-action": "Яку дію виконати.",
+       "apihelp-main-param-format": "Формат виводу."
+}
diff --git a/includes/api/i18n/vi.json b/includes/api/i18n/vi.json
new file mode 100644 (file)
index 0000000..30211af
--- /dev/null
@@ -0,0 +1,123 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Minh Nguyen",
+                       "Max20091"
+               ]
+       },
+       "apihelp-main-param-action": "Tác vụ để thực hiện.",
+       "apihelp-main-param-format": "Định dạng của dữ liệu được cho ra.",
+       "apihelp-block-description": "Cấm người dùng.",
+       "apihelp-block-param-reason": "Lý do cấm.",
+       "apihelp-block-param-nocreate": "Cấm tạo tài khoản.",
+       "apihelp-createaccount-description": "Mở tài khoản mới.",
+       "apihelp-createaccount-param-name": "Tên người dùng.",
+       "apihelp-createaccount-param-password": "Mật khẩu (được bỏ qua nếu $1mailpassword được đặt).",
+       "apihelp-createaccount-param-domain": "Tên miền để xác thực bên ngoài (tùy chọn).",
+       "apihelp-createaccount-param-token": "Dấu hiệu mở tài khoản được lấy trong yêu cầu đầu tiên.",
+       "apihelp-createaccount-param-email": "Địa chỉ thư điện tử của thành viên (tùy chọn).",
+       "apihelp-createaccount-param-realname": "Tên thật của thành viên (tùy chọn).",
+       "apihelp-delete-description": "Xóa trang.",
+       "apihelp-delete-param-watch": "Thêm trang vào danh sách theo dõi của bạn.",
+       "apihelp-delete-param-unwatch": "Bỏ trang này khỏi danh sách theo dõi của bạn.",
+       "apihelp-delete-example-simple": "Xóa Trang Chính",
+       "apihelp-delete-example-reason": "Xóa Trang Chính với lý do “Chuẩn bị di chuyển”",
+       "apihelp-disabled-description": "Mô đun này đã bị vô hiệu hóa.",
+       "apihelp-edit-description": "Tạo và sửa trang.",
+       "apihelp-edit-param-section": "Số phần trang. 0 là phần đầu; “new” là phần mới.",
+       "apihelp-edit-param-sectiontitle": "Tên của phần mới.",
+       "apihelp-edit-param-text": "Nội dung trang.",
+       "apihelp-edit-param-summary": "Tóm lược sửa đổi. Cũng là tên phần khi $1section=new và $1sectiontitle không được đặt.",
+       "apihelp-edit-param-minor": "Sửa đổi nhỏ.",
+       "apihelp-edit-param-notminor": "Sửa đổi không nhỏ.",
+       "apihelp-edit-param-bot": "Đánh dấu sửa đổi này là do bot thực hiện.",
+       "apihelp-edit-param-createonly": "Không sửa đổi trang nếu nó đã tồn tại.",
+       "apihelp-edit-param-nocreate": "Gây lỗi nếu trang không tồn tại.",
+       "apihelp-edit-param-watch": "Thêm trang vào danh sách theo dõi của bạn.",
+       "apihelp-edit-param-unwatch": "Bỏ trang này khỏi danh sách theo dõi của bạn.",
+       "apihelp-edit-example-edit": "Sửa đổi trang",
+       "apihelp-edit-example-prepend": "Đưa _&#95;NOTOC_&#95; 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-emailuser-description": "Gửi thư cho người dùng.",
+       "apihelp-emailuser-param-target": "Người dùng để gửi thư điện tử cho.",
+       "apihelp-emailuser-param-subject": "Tiêu đề bức thư.",
+       "apihelp-emailuser-param-text": "Nội dung bức thư.",
+       "apihelp-emailuser-param-ccme": "Gửi bản sao của thư này cho tôi.",
+       "apihelp-emailuser-example-email": "Gửi thư điện tử cho thành viên “BQVWiki” với văn bản “Nội dung”",
+       "apihelp-expandtemplates-description": "Bung tất cả bản mẫu trong văn bản wiki.",
+       "apihelp-expandtemplates-param-title": "Tên trang.",
+       "apihelp-expandtemplates-param-text": "Văn bản wiki để bung.",
+       "apihelp-help-param-helpformat": "Định dạng của văn bản trợ giúp được cho ra.",
+       "apihelp-imagerotate-example-simple": "Xoay [[:Tập tin:Ví dụ.jpg]] 90 độ",
+       "apihelp-imagerotate-example-generator": "Xoay tất cả các hình ảnh trong [[:Thể loại:Búng]] 180 độ",
+       "apihelp-login-param-name": "Tên người dùng.",
+       "apihelp-login-param-password": "Mật khẩu.",
+       "apihelp-login-param-domain": "Tên miền (tùy chọn).",
+       "apihelp-login-param-token": "Dấu hiệu đăng nhập được lấy trong yêu cầu đầu tiên.",
+       "apihelp-login-example-gettoken": "Lấy dấu hiệu đăng nhập",
+       "apihelp-login-example-login": "Đăng nhập",
+       "apihelp-logout-example-logout": "Đăng xuất người dùng hiện tại",
+       "apihelp-move-description": "Di chuyển trang.",
+       "apihelp-move-param-reason": "Lý do di chuyển.",
+       "apihelp-move-param-noredirect": "Không tạo trang đổi hướng.",
+       "apihelp-move-param-ignorewarnings": "Bỏ qua tất cả các cảnh báo.",
+       "apihelp-opensearch-description": "Tìm kiếm trong wiki qua giao thức OpenSearch.",
+       "apihelp-opensearch-param-search": "Chuỗi tìm kiếm.",
+       "apihelp-opensearch-param-limit": "Đa số kết quả để cho ra.",
+       "apihelp-opensearch-param-namespace": "Không gian tên để tìm kiếm.",
+       "apihelp-opensearch-param-format": "Định dạng kết quả được cho ra.",
+       "apihelp-opensearch-example-te": "Tìm trang bắt đầu với “Te”",
+       "apihelp-options-example-reset": "Mặc định lại các tùy chọn",
+       "apihelp-paraminfo-param-helpformat": "Định dạng chuỗi trợ giúp.",
+       "apihelp-parse-param-summary": "Lời tóm lược để phân tích.",
+       "apihelp-parse-example-page": "Phân tích trang.",
+       "apihelp-parse-example-text": "Phân tích văn bản wiki.",
+       "apihelp-parse-example-texttitle": "Phân tích văn bản wiki theo tên trang.",
+       "apihelp-parse-example-summary": "Phân tích lời tóm lược.",
+       "apihelp-protect-example-protect": "Khóa trang.",
+       "apihelp-protect-example-unprotect": "Mở khóa trang bằng cách đặt hạn chế thành “all”",
+       "apihelp-protect-example-unprotect2": "Mở khóa trang bằng cách không đặt hạn chế nào",
+       "apihelp-purge-param-forcelinkupdate": "Cập nhật các bảng liên kết.",
+       "apihelp-purge-example-generator": "Làm mới 10 trang đầu tiên trong không gian tên chính",
+       "apihelp-query-param-prop": "Các thuộc tính để lấy khi truy vấn các trang.",
+       "apihelp-query-param-list": "Các danh sách để lấy.",
+       "apihelp-query-param-meta": "Siêu dữ liệu để lấy.",
+       "apihelp-format-example-generic": "Định dạng kết quả truy vấn dưới dạng $1",
+       "apihelp-dbg-description": "Cho ra dữ liệu dưới dạng var_export() của PHP.",
+       "apihelp-dbgfm-description": "Cho ra dữ liệu dưới dạng var_export() của PHP (định dạng bằng HTML).",
+       "apihelp-dump-description": "Cho ra dữ liệu dưới dạng var_dump() của PHP.",
+       "apihelp-dumpfm-description": "Cho ra dữ liệu dưới dạng var_dump() của PHP (định dạng bằng HTML).",
+       "apihelp-json-description": "Cho ra dữ liệu dưới dạng JSON.",
+       "apihelp-jsonfm-description": "Cho ra dữ liệu dưới dạng JSON (định dạng bằng HTML).",
+       "apihelp-none-description": "Không cho ra gì.",
+       "apihelp-rawfm-description": "Cho ra dữ liệu với các phần tử gỡ lỗi dưới dạng JSON (định dạng bằng HTML).",
+       "apihelp-txt-description": "Cho ra dữ liệu dưới dạng print_r() của PHP.",
+       "apihelp-txtfm-description": "Cho ra dữ liệu dưới dạng print_r() của PHP (định dạng bằng HTML).",
+       "apihelp-wddx-description": "Cho ra dữ liệu dưới dạng WDDX.",
+       "apihelp-wddxfm-description": "Cho ra dữ liệu dưới dạng WDDX (định dạng bằng HTML).",
+       "apihelp-xml-description": "Cho ra dữ liệu dưới dạng XML.",
+       "apihelp-xmlfm-description": "Cho ra dữ liệu dưới dạng XML (định dạng bằng HTML).",
+       "apihelp-yaml-description": "Cho ra dữ liệu dưới dạng YAML.",
+       "apihelp-yamlfm-description": "Cho ra dữ liệu dưới dạng YAML (định dạng bằng HTML).",
+       "api-format-title": "Kết quả API MediaWiki",
+       "api-help-title": "Trợ giúp về API MediaWiki",
+       "api-help-main-header": "Mô đun chính",
+       "api-help-flag-deprecated": "Mô đun này đã bị phản đối.",
+       "api-help-flag-readrights": "Mô đun này cần quyền đọc.",
+       "api-help-flag-writerights": "Mô đun này cần quyền ghi.",
+       "api-help-flag-mustbeposted": "Mô đun này chỉ có nhận các yêu cầu POST.",
+       "api-help-parameters": "{{PLURAL:$1|Tham số|Các tham số}}:",
+       "api-help-param-deprecated": "Bị phản đối.",
+       "api-help-param-required": "Tham số này là bắt buộc.",
+       "api-help-param-list": "{{PLURAL:$1|1=Một giá trị|2=Các giá trị (phân tách bằng “{{!}}”)}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Cần phải để trống|Cần phải để trống hoặc là $2}}",
+       "api-help-param-limit": "Không cho phép hơn $1.",
+       "api-help-param-limit2": "Không cho phép hơn $1 ($2 đối với các bot).",
+       "api-help-param-multi-separate": "Phân tách các giá trị bằng “|”.",
+       "api-help-param-default": "Mặc định: $1",
+       "api-help-param-default-empty": "Mặc định: <span class=\"apihelp-empty\">(trống)</span>",
+       "api-help-examples": "{{PLURAL:$1|Ví dụ|Các ví dụ}}:",
+       "api-help-permissions": "{{PLURAL:$1|Quyền hạn|Các quyền hạn}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1}}Cấp cho: $2",
+       "api-credits-header": "Ghi công"
+}
diff --git a/includes/api/i18n/zh-hans.json b/includes/api/i18n/zh-hans.json
new file mode 100644 (file)
index 0000000..3fb7b68
--- /dev/null
@@ -0,0 +1,388 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Gaoxuewei",
+                       "Linforest",
+                       "Liuxinyu970226",
+                       "Papapasan"
+               ]
+       },
+       "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 问答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 邮件列表]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts Bugs与需求信息]\n</div>\n<strong>状态信息:</strong> 本页所展示的所有特性都应正常工作,但是API仍在开发当中,将会随时变化。请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n<strong>错误请求:</strong> 当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅https://www.mediawiki.org/wiki/API:Errors_and_warnings 。",
+       "apihelp-main-param-action": "要执行哪些操作。",
+       "apihelp-main-param-format": "输出的格式。",
+       "apihelp-main-param-curtimestamp": "在结果中包括当前时间戳。",
+       "apihelp-block-description": "封禁一位用户。",
+       "apihelp-block-param-user": "您要封禁的用户、IP地址或IP地址段。",
+       "apihelp-block-param-reason": "封禁的原因",
+       "apihelp-block-param-nocreate": "防止创建帐户。",
+       "apihelp-block-param-noemail": "阻止用户通过 wiki发送电子邮件。(要求\"blockemail\"权限)。",
+       "apihelp-block-param-hidename": "从封禁日志中隐藏用户名。(需要“隐藏用户”权限)。",
+       "apihelp-block-param-allowusertalk": "允许用户编辑自己的讨论页 (取决于 $wgBlockAllowsUTEdit)。",
+       "apihelp-block-param-watchuser": "监视该用户或该 IP 的用户页和讨论页。",
+       "apihelp-block-example-ip-simple": "封禁IP地址192.0.2.5三天,原因“首次罢工”",
+       "apihelp-clearhasmsg-description": "清除当前用户的 hasmsg 标志。",
+       "apihelp-clearhasmsg-example-1": "清除当前用户的 hasmsg 标志",
+       "apihelp-compare-description": "获取2个页面之间的差别。\n\n您必须为\"from\"和\"to\"传递特定的修订版本号、 页面标题或页面ID。",
+       "apihelp-compare-param-fromtitle": "要比较的第一个标题。",
+       "apihelp-compare-param-fromid": "要比较的第一个页面 ID。",
+       "apihelp-compare-param-fromrev": "要比较的第一个修订版本。",
+       "apihelp-compare-param-totitle": "要比较的第二个标题。",
+       "apihelp-compare-param-toid": "要比较的第一个页面 ID。",
+       "apihelp-compare-param-torev": "要比较的第二个修订版本。",
+       "apihelp-compare-example-1": "在版本1和2中创建差异",
+       "apihelp-createaccount-description": "创建一个新用户账户。",
+       "apihelp-createaccount-param-name": "用户名",
+       "apihelp-createaccount-param-password": "密码(如果设置$1mailpassword则忽略)。",
+       "apihelp-createaccount-param-domain": "外部身份验证域 (可选)。",
+       "apihelp-createaccount-param-token": "在第一个请求中获得的帐户创建标记。",
+       "apihelp-createaccount-param-email": "用户的电子邮件地址(可选)。",
+       "apihelp-createaccount-param-realname": "用户的真实姓名(可选)。",
+       "apihelp-createaccount-param-mailpassword": "如果设置为任何值,将向用户发送一个随机密码。",
+       "apihelp-createaccount-param-reason": "将要放在日志中的,关于创建帐户的可选原因。",
+       "apihelp-createaccount-example-pass": "创建用户“testuser”和密码“test123”",
+       "apihelp-delete-description": "删除一个页面。",
+       "apihelp-delete-param-title": "你所希望删除的页面的标题。不能与$1pageid一起使用。",
+       "apihelp-delete-param-pageid": "你所希望删除的页面的页面ID。不能与$1title一起使用。",
+       "apihelp-delete-param-reason": "删除原因。如果未设置,将使用一个自动生成的原因。",
+       "apihelp-delete-param-watch": "将该页面加入您的监视列表。",
+       "apihelp-delete-param-unwatch": "将该页面从您的监视列表删除。",
+       "apihelp-delete-example-simple": "删除首页",
+       "apihelp-delete-example-reason": "删除首页,原因“准备移动”",
+       "apihelp-disabled-description": "此模块已禁用。",
+       "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": "标记此编辑为机器人编辑。",
+       "apihelp-edit-param-createonly": "不要编辑页面,如果已经存在。",
+       "apihelp-edit-param-nocreate": "如果该页面不存在,则抛出一个错误。",
+       "apihelp-edit-param-watch": "将页面加入您的监视列表。",
+       "apihelp-edit-param-unwatch": "将页面从您的监视列表移除。",
+       "apihelp-edit-param-redirect": "自动解析重定向。",
+       "apihelp-edit-example-edit": "编辑一个页面",
+       "apihelp-edit-example-prepend": "页面中预置_&#95;NOTOC_&#95;",
+       "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-expandtemplates-description": "展开维基文本中的所有模板。",
+       "apihelp-expandtemplates-param-title": "页面标题。",
+       "apihelp-expandtemplates-param-text": "要转换的wiki文本。",
+       "apihelp-expandtemplates-example-simple": "展开wiki文本“<nowiki>{{Project:Sandbox}}</nowiki>”",
+       "apihelp-feedcontributions-description": "返回用户贡献纲要。",
+       "apihelp-feedcontributions-param-feedformat": "纲要的格式。",
+       "apihelp-feedcontributions-param-deletedonly": "仅显示已删除的贡献。",
+       "apihelp-feedcontributions-param-toponly": "仅仅显示那些作为最新修订的编辑。",
+       "apihelp-feedcontributions-param-newonly": "仅仅显示那些作为页面创建的编辑。",
+       "apihelp-feedcontributions-param-showsizediff": "显示修订版本之间的大小差别。",
+       "apihelp-feedcontributions-example-simple": "返回[[User:Example]]的贡献",
+       "apihelp-feedrecentchanges-description": "返回最新变更纲要。",
+       "apihelp-feedrecentchanges-param-feedformat": "纲要的格式。",
+       "apihelp-feedrecentchanges-param-namespace": "用于限制结果的命名空间。",
+       "apihelp-feedrecentchanges-param-invert": "除所选定者外的所有命名空间。",
+       "apihelp-feedrecentchanges-param-days": "用于限制结果的天数。",
+       "apihelp-feedrecentchanges-param-limit": "所要返回结果的最大数目。",
+       "apihelp-feedrecentchanges-param-from": "显示自那时以来的更改。",
+       "apihelp-feedrecentchanges-param-hideminor": "隐藏小更改。",
+       "apihelp-feedrecentchanges-param-hidebots": "隐藏机器人所做的更改。",
+       "apihelp-feedrecentchanges-param-hideanons": "隐藏匿名用户做出的更改。",
+       "apihelp-feedrecentchanges-param-hideliu": "隐藏注册用户做出的更改。",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "隐藏已巡查更改。",
+       "apihelp-feedrecentchanges-param-hidemyself": "隐藏您做出的更改。",
+       "apihelp-feedrecentchanges-param-tagfilter": "按标签过滤。",
+       "apihelp-feedrecentchanges-param-target": "仅仅显示从该页面链出的那些页面的变更。",
+       "apihelp-feedrecentchanges-param-showlinkedto": "仅仅显示链入到该页面的那些页面的变更。",
+       "apihelp-feedrecentchanges-example-simple": "显示最近更改",
+       "apihelp-feedrecentchanges-example-30days": "显示最近30天的更改",
+       "apihelp-feedwatchlist-description": "返回监视列表纲要。",
+       "apihelp-feedwatchlist-param-feedformat": "纲要的格式。",
+       "apihelp-feedwatchlist-param-hours": "列出从现在起数小时内修改的页面。",
+       "apihelp-feedwatchlist-param-linktosections": "如果可能的话,直接链接到已变更的小节。",
+       "apihelp-feedwatchlist-example-default": "显示监视列表订阅",
+       "apihelp-feedwatchlist-example-all6hrs": "显示过去6小时内受监视页面的所有更改。",
+       "apihelp-filerevert-description": "回退一个文件至某一旧版本。",
+       "apihelp-filerevert-param-filename": "目标文件名,不包含前缀“File:”。",
+       "apihelp-filerevert-param-comment": "上传评论。",
+       "apihelp-filerevert-example-revert": "回退Wiki.png至2011-03-05T15:27:40Z的版本",
+       "apihelp-help-example-main": "主模块帮助",
+       "apihelp-help-example-recursive": "一个页面中的所有帮助",
+       "apihelp-help-example-help": "帮助模块本身的帮助",
+       "apihelp-help-example-query": "两个查询子模块的帮助",
+       "apihelp-import-param-summary": "导入摘要。",
+       "apihelp-import-param-xml": "上传的XML文件。",
+       "apihelp-import-param-interwikipage": "用于跨wiki导入:导入的页面。",
+       "apihelp-import-param-rootpage": "导入作为此页面的子页面。",
+       "apihelp-import-example-import": "将页面[[meta:Help:Parserfunctions]]连带完整历史导入至100名字空间。",
+       "apihelp-login-param-name": "用户名。",
+       "apihelp-login-param-password": "密码。",
+       "apihelp-login-param-domain": "域名(可选)。",
+       "apihelp-login-example-gettoken": "检索登录令牌",
+       "apihelp-login-example-login": "登录",
+       "apihelp-move-description": "移动一个页面。",
+       "apihelp-move-param-reason": "移动原因。",
+       "apihelp-move-param-movetalk": "移动讨论页,如果存在。",
+       "apihelp-move-param-movesubpages": "移动子页面,如果可以。",
+       "apihelp-move-param-noredirect": "不要创建重定向。",
+       "apihelp-move-param-ignorewarnings": "忽略任何警告。",
+       "apihelp-opensearch-param-search": "搜索字符串。",
+       "apihelp-opensearch-param-namespace": "搜索的名字空间。",
+       "apihelp-opensearch-param-suggest": "如果[https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest]设置为false则不做任何事情。",
+       "apihelp-opensearch-param-format": "输出格式。",
+       "apihelp-opensearch-example-te": "查找以“Te”开头的页面",
+       "apihelp-options-example-reset": "重置所有用户设置",
+       "apihelp-options-example-change": "更改“皮肤”和“hideminot”设置",
+       "apihelp-options-example-complex": "重置所有设置,之后设置“皮肤”和“昵称”",
+       "apihelp-paraminfo-description": "获取关于 API 模块的信息。",
+       "apihelp-paraminfo-param-modules": "模块名称列表(action=和format=参数值,或“主”)。可通过“+”指定子模块。",
+       "apihelp-paraminfo-param-helpformat": "帮助字符串的格式。",
+       "apihelp-paraminfo-example-1": "显示[[Special:ApiHelp/parse|action=parse]]、[[Special:ApiHelp/jsonfm|format=jsonfm]]、[[Special:ApiHelp/query+allpages|action=query&list=allpages]]和[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]的信息",
+       "apihelp-parse-param-summary": "所要解析的摘要。",
+       "apihelp-parse-param-page": "解析此页的内容。不能与$1text和$1title一起使用。",
+       "apihelp-parse-param-pageid": "解析此页的内容。覆盖 $1 页。",
+       "apihelp-parse-param-redirects": "如果 $1page 或 $1 pageid 参数被设置为一个重定向,则解析它。",
+       "apihelp-parse-param-oldid": "解析该修订版本的内容。覆盖 $1page 和 $1 pageid。",
+       "apihelp-parse-param-preview": "在预览模式下解析。",
+       "apihelp-parse-param-sectionpreview": "在小节预览模式下解析 (同时要启用预览模式)。",
+       "apihelp-parse-param-disabletoc": "在输出中禁用目录。",
+       "apihelp-parse-example-page": "解析一个页面。",
+       "apihelp-parse-example-text": "解析wiki文本。",
+       "apihelp-parse-example-texttitle": "解析维基文本,指定页面标题。",
+       "apihelp-parse-example-summary": "解析一个摘要。",
+       "apihelp-patrol-description": "巡查页面或修订版本。",
+       "apihelp-patrol-param-rcid": "所要巡查的最近变更 ID。",
+       "apihelp-patrol-param-revid": "要巡查的修订版本ID。",
+       "apihelp-patrol-example-rcid": "巡查一次最近更改",
+       "apihelp-patrol-example-revid": "巡查一次修订",
+       "apihelp-protect-description": "更改页面的保护等级。",
+       "apihelp-protect-param-title": "要(解除)保护的页面标题。不能与$1pageid一起使用。",
+       "apihelp-protect-param-pageid": "要(解除)保护的页面ID。不能与$1title一起使用。",
+       "apihelp-protect-param-protections": "保护等级列表,格式:action=level(例如edit=sysop)。\n\n'''注意:'''未列出的操作将移除限制。",
+       "apihelp-protect-param-reason": "(解除)保护的原因。",
+       "apihelp-protect-example-protect": "保护一个页面",
+       "apihelp-purge-param-forcelinkupdate": "更新链接表。",
+       "apihelp-purge-param-forcerecursivelinkupdate": "更新链接表中,并更新任何使用此页作为模板的页面的链接表。",
+       "apihelp-purge-example-simple": "刷新“首页”和“API”页面",
+       "apihelp-purge-example-generator": "刷新主名字空间的前10个页面",
+       "apihelp-query-param-list": "要获取的列表。",
+       "apihelp-query-param-meta": "要获取的元数据。",
+       "apihelp-query-example-revisions": "获取首页的[[Special:ApiHelp/query+siteinfo|站点信息]]和[[Special:ApiHelp/query+revisions|修订版本]]",
+       "apihelp-query+allcategories-description": "枚举所有类别。",
+       "apihelp-query+allcategories-param-from": "要作为枚举起始点的类别。",
+       "apihelp-query+allcategories-param-to": "要作为枚举终止点的类别。",
+       "apihelp-query+allcategories-param-limit": "要返回多少个类别。",
+       "apihelp-query+allfileusages-param-dir": "罗列所采用的方向。",
+       "apihelp-query+allfileusages-example-unique": "列出唯一性的文件标题",
+       "apihelp-query+allfileusages-example-unique-generator": "获取所有文件标题,并标记出缺失者",
+       "apihelp-query+allfileusages-example-generator": "获取包含这些文件的页面",
+       "apihelp-query+allimages-description": "按顺序枚举所有图像。",
+       "apihelp-query+allimages-param-sort": "要作为排序方式的属性。",
+       "apihelp-query+allimages-param-dir": "罗列所采用的方向。",
+       "apihelp-query+allimages-param-minsize": "限于至少这么多字节的图像。",
+       "apihelp-query+allimages-param-maxsize": "限于顶多这么多字节的图像。",
+       "apihelp-query+allimages-param-sha1": "图像的 SHA1 哈希。覆盖$1sha1base36。",
+       "apihelp-query+allimages-param-limit": "共计要返回多少图像。",
+       "apihelp-query+allimages-example-B": "显示以字母“B”开始的文件列表",
+       "apihelp-query+alllinks-example-generator": "获取包含这些链接的页面",
+       "apihelp-query+allmessages-description": "返回来自该站点的消息。",
+       "apihelp-query+allmessages-param-messages": "要输出的哪些消息。\"*\" (默认值) 表示所有消息。",
+       "apihelp-query+allmessages-param-prop": "要获取的属性。",
+       "apihelp-query+allmessages-param-lang": "返回这种语言的信息。",
+       "apihelp-query+allmessages-param-prefix": "返回带有该前缀的消息。",
+       "apihelp-query+allmessages-example-ipb": "显示以“ipb-”开始的消息",
+       "apihelp-query+allpages-param-filterredir": "要列出哪些页面。",
+       "apihelp-query+allpages-param-minsize": "限于至少这么多字节的页面。",
+       "apihelp-query+allpages-param-maxsize": "限于至多这么多字节的页面。",
+       "apihelp-query+allpages-param-prtype": "仅限于受保护页面。",
+       "apihelp-query+allredirects-description": "列出至一个名字空间的重定向。",
+       "apihelp-query+allredirects-param-namespace": "要列举的名字空间。",
+       "apihelp-query+allusers-param-witheditsonly": "只列出有编辑的用户。",
+       "apihelp-query+allusers-param-activeusers": "只列出最近$1天内活跃的用户。",
+       "apihelp-query+allusers-example-Y": "列出以Y开头的用户",
+       "apihelp-query+backlinks-example-simple": "显示至[[首页]]的链接",
+       "apihelp-query+backlinks-example-generator": "获取关于链接至[[首页]]的页面的信息",
+       "apihelp-query+blocks-description": "列出所有被封禁的用户和IP地址。",
+       "apihelp-query+blocks-example-simple": "封禁列表",
+       "apihelp-query+categories-param-show": "显示何种分类。",
+       "apihelp-query+categories-param-limit": "返回多少分类。",
+       "apihelp-query+categoryinfo-example-simple": "获取有关[[:Category:Foo]]和[[:Category:Bar]]的信息",
+       "apihelp-query+categorymembers-param-sort": "要作为排序方式的属性。",
+       "apihelp-query+categorymembers-param-startsortkey": "请改用$1starthexsortkey。",
+       "apihelp-query+categorymembers-param-endsortkey": "请改用$1endhexsortkey。",
+       "apihelp-query+categorymembers-example-simple": "获取[[:Category:Physics]]中的前10个页面。",
+       "apihelp-query+categorymembers-example-generator": "获取关于[[:Category:Physics]]中的前10个页面的页面信息。",
+       "apihelp-query+contributors-example-simple": "显示[[首页]]的贡献",
+       "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|模式}}:$2",
+       "apihelp-query+deletedrevs-param-namespace": "只列出此名字空间的页面。",
+       "apihelp-query+deletedrevs-example-mode1": "列出最近已删除的对首页和Talk:首页的贡献,带内容(模式1)",
+       "apihelp-query+deletedrevs-example-mode2": "列出由Bob作出的最近50次已删除贡献(模式2)",
+       "apihelp-query+deletedrevs-example-mode3-main": "列出前50次主名字空间已删除贡献(模式3)",
+       "apihelp-query+deletedrevs-example-mode3-talk": "列出前50次讨论名字空间已删除页面(模式3):",
+       "apihelp-query+disabled-description": "此查询模块已被禁用。",
+       "apihelp-query+duplicatefiles-param-limit": "返回多少重复文件。",
+       "apihelp-query+duplicatefiles-example-simple": "查找与[[:File:Albert Einstein Head.jpg]]重复的文件",
+       "apihelp-query+duplicatefiles-example-generated": "查找所有文件的重复文件",
+       "apihelp-query+embeddedin-param-title": "要搜索的标题。不能与$1pageid一起使用。",
+       "apihelp-query+embeddedin-param-pageid": "要搜索的页面ID。不能与$1title一起使用。",
+       "apihelp-query+embeddedin-param-namespace": "列举的名字空间。",
+       "apihelp-query+embeddedin-example-simple": "显示嵌入[[Template:Stub]]的页面",
+       "apihelp-query+embeddedin-example-generator": "获取有关显示嵌入[[Template:Stub]]的页面的信息",
+       "apihelp-query+extlinks-param-limit": "返回多少链接。",
+       "apihelp-query+exturlusage-param-limit": "返回多少页面。",
+       "apihelp-query+exturlusage-example-simple": "显示链接至http://www.mediawiki.org的页面",
+       "apihelp-query+filearchive-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+fileusage-example-simple": "获取使用[[:File:Example.jpg]]的页面列表",
+       "apihelp-query+fileusage-example-generator": "获取有关使用[[:File:Example.jpg]]的页面的信息",
+       "apihelp-query+imageinfo-description": "返回文件信息和上传历史。",
+       "apihelp-query+imageinfo-param-urlheight": "与$1urlwidth类似。",
+       "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-example-simple": "获取[[首页]]使用的文件列表",
+       "apihelp-query+images-example-generator": "获取有关[[首页]]使用的文件的信息",
+       "apihelp-query+imageusage-example-simple": "显示使用[[:File:Albert Einstein Head.jpg]]的页面",
+       "apihelp-query+imageusage-example-generator": "获取有关使用[[:File:Albert Einstein Head.jpg]]的页面的信息",
+       "apihelp-query+info-description": "获取基本页面信息。",
+       "apihelp-query+info-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
+       "apihelp-query+info-example-simple": "获取有关[[首页]]的信息",
+       "apihelp-query+iwbacklinks-param-prefix": "跨维基前缀。",
+       "apihelp-query+iwbacklinks-example-simple": "获取链接至[[wikibooks:Test]]的页面",
+       "apihelp-query+iwbacklinks-example-generator": "获取有关链接至[[wikibooks:Test]]的页面的信息",
+       "apihelp-query+iwlinks-param-limit": "返回多少跨wiki链接。",
+       "apihelp-query+iwlinks-param-prefix": "只返回此前缀的跨wiki链接。",
+       "apihelp-query+iwlinks-param-title": "用于搜索的跨wiki链接。必须与$1prefix一起使用。",
+       "apihelp-query+iwlinks-example-simple": "从[[首页]]获取跨wiki链接",
+       "apihelp-query+langbacklinks-param-lang": "用于语言链接的语言。",
+       "apihelp-query+langbacklinks-example-simple": "获取链接至[[:fr:Test]]的页面",
+       "apihelp-query+langbacklinks-example-generator": "获取链接至[[:fr:Test]]的页面的信息",
+       "apihelp-query+langlinks-param-limit": "返回多少语言链接。",
+       "apihelp-query+langlinks-example-simple": "从[[首页]]获取跨语言链接",
+       "apihelp-query+links-param-limit": "返回多少链接。",
+       "apihelp-query+links-example-simple": "从[[首页]]获取链接",
+       "apihelp-query+links-example-generator": "获取有关[[首页]]链接页面的信息",
+       "apihelp-query+linkshere-param-limit": "返回多少。",
+       "apihelp-query+linkshere-example-simple": "获取链接至[[首页]]的页面列表",
+       "apihelp-query+linkshere-example-generator": "获取有关链接至[[首页]]的页面的信息",
+       "apihelp-query+logevents-description": "从日志获取事件。",
+       "apihelp-query+pagepropnames-example-simple": "获取前10个常用名称",
+       "apihelp-query+pageprops-example-simple": "获取用于[[:Category:Foo]]的属性",
+       "apihelp-query+pageswithprop-example-simple": "列出前10个使用&#123;&#123;DISPLAYTITLE:&#125;&#125;的页面",
+       "apihelp-query+pageswithprop-example-generator": "获取有关前10个使用_&#95;NOTOC_&#95;的页面的信息",
+       "apihelp-query+prefixsearch-param-search": "搜索字符串。",
+       "apihelp-query+prefixsearch-param-namespace": "搜索的名字空间。",
+       "apihelp-query+protectedtitles-param-namespace": "只列出这些名字空间的标题。",
+       "apihelp-query+protectedtitles-example-simple": "受保护标题列表",
+       "apihelp-query+querypage-param-limit": "返回的结果数。",
+       "apihelp-query+querypage-example-ancientpages": "返回[[Special:Ancientpages]]的结果。",
+       "apihelp-query+random-param-namespace": "只返回这些名字空间的页面。",
+       "apihelp-query+recentchanges-description": "枚举最近更改。",
+       "apihelp-query+recentchanges-param-user": "只列出此用户的更改。",
+       "apihelp-query+recentchanges-param-excludeuser": "不要列出此用户的更改。",
+       "apihelp-query+recentchanges-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
+       "apihelp-query+recentchanges-example-simple": "最近更改列表",
+       "apihelp-query+redirects-example-simple": "获取至[[首页]]的重定向列表",
+       "apihelp-query+redirects-example-generator": "获取所有重定向至[[首页]]的信息",
+       "apihelp-query+revisions-example-last5": "获取“首页”的最近5次修订",
+       "apihelp-query+revisions-example-first5": "获取“首页”的前5次修订版本",
+       "apihelp-query+revisions-example-first5-after": "获取“首页”于2006年05月01日之后做出的前5次修订版本",
+       "apihelp-query+search-param-info": "要返回的元数据。",
+       "apihelp-query+search-param-interwiki": "搜索结果中包含跨wiki结果,如果可用。",
+       "apihelp-query+search-example-simple": "搜索“意义”",
+       "apihelp-query+search-example-text": "搜索文本“意义”",
+       "apihelp-query+siteinfo-example-simple": "获取网站信息",
+       "apihelp-query+siteinfo-example-interwiki": "获取本地跨wiki前缀列表",
+       "apihelp-query+tags-description": "列出更改标签。",
+       "apihelp-query+tags-example-simple": "可用标签列表",
+       "apihelp-query+templates-param-limit": "返回多少模板。",
+       "apihelp-query+templates-param-templates": "只列出这些模板。对于检查某一页面使用某一模板很有用。",
+       "apihelp-query+templates-example-simple": "从[[首页]]获取模板",
+       "apihelp-query+templates-example-generator": "获取有关[[首页]]中的模板页面的信息",
+       "apihelp-query+templates-example-namespaces": "从[[首页]]获取用户和模板名字空间中的模板",
+       "apihelp-query+transcludedin-param-namespace": "至包含这些名字空间的页面。",
+       "apihelp-query+transcludedin-param-limit": "返回多少。",
+       "apihelp-query+transcludedin-example-simple": "获取嵌入[[首页]]的页面列表",
+       "apihelp-query+transcludedin-example-generator": "获取有关嵌入[[首页]]的页面的信息",
+       "apihelp-query+usercontribs-description": "获取一位用户的所有编辑。",
+       "apihelp-query+usercontribs-param-namespace": "只列出这些名字空间的贡献。",
+       "apihelp-query+usercontribs-example-user": "显示[[User:Example]]的贡献",
+       "apihelp-query+usercontribs-example-ipprefix": "显示来自“192.0.2.”前缀所有IP地址的贡献",
+       "apihelp-query+userinfo-description": "获取有关当前用户的信息。",
+       "apihelp-query+userinfo-example-simple": "获取有关当前用户的信息",
+       "apihelp-query+userinfo-example-data": "获取有关当前用户的额外信息",
+       "apihelp-query+users-description": "获取有关列出用户的信息。",
+       "apihelp-query+users-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
+       "apihelp-query+users-example-simple": "返回[[User:Example]]的信息",
+       "apihelp-query+watchlist-param-user": "只列出此用户的更改。",
+       "apihelp-query+watchlist-param-excludeuser": "不要列出此用户的更改。",
+       "apihelp-query+watchlistraw-description": "获取登录用户的监视列表的所有页面。",
+       "apihelp-query+watchlistraw-param-namespace": "只列出指定名字空间的页面。",
+       "apihelp-revisiondelete-description": "删除和恢复修订版本。",
+       "apihelp-revisiondelete-param-reason": "删除或恢复的原因。",
+       "apihelp-rollback-example-simple": "回退由用户Example对[[首页]]做出的最近编辑",
+       "apihelp-rollback-example-summary": "回退由IP用户192.0.2.5对[[首页]]做出的最近编辑,带编辑摘要“回退破坏”,并将这些编辑和回退标记为“机器人”",
+       "apihelp-rsd-description": "导出一个RSD(Really Simple Discovery)架构",
+       "apihelp-rsd-example-simple": "导出RSD架构",
+       "apihelp-unblock-description": "解封一位用户。",
+       "apihelp-unblock-param-id": "解封时需要的封禁ID(通过list=blocks获得)。不能与$1user一起使用。",
+       "apihelp-unblock-param-user": "要解封的用户名、IP地址或IP段。不能与$1id一起使用。",
+       "apihelp-unblock-param-reason": "解封的原因。",
+       "apihelp-unblock-example-id": "解封封禁ID#105",
+       "apihelp-unblock-example-user": "解封用户Bob,原因“抱歉Bob”",
+       "apihelp-undelete-param-title": "要恢复的页面标题。",
+       "apihelp-undelete-param-reason": "恢复的原因。",
+       "apihelp-undelete-example-page": "恢复[[首页]]",
+       "apihelp-undelete-example-revisions": "恢复[[首页]]的两个修订",
+       "apihelp-upload-param-filename": "目标文件名。",
+       "apihelp-upload-param-watch": "监视页面。",
+       "apihelp-upload-param-ignorewarnings": "忽略任何警告。",
+       "apihelp-upload-param-file": "文件内容。",
+       "apihelp-upload-example-url": "从URL上传",
+       "apihelp-userrights-param-user": "用户名。",
+       "apihelp-userrights-param-userid": "用户ID。",
+       "apihelp-userrights-param-reason": "更改原因。",
+       "apihelp-userrights-example-user": "将用户FooBot添加至“机器人”用户组,并从“管理员”和“行政员”组移除",
+       "apihelp-watch-example-watch": "监视页面“首页”",
+       "apihelp-watch-example-unwatch": "取消监视页面“首页”",
+       "apihelp-none-description": "不输出任何东西。",
+       "apihelp-yaml-description": "以YAML格式输出数据。",
+       "api-format-title": "MediaWiki API 结果",
+       "api-orm-param-props": "要查询的字段。",
+       "api-help-title": "MediaWiki API 帮助",
+       "api-help-lead": "这是自动生成的MediaWiki API文档页面。\n\n文档和例子:https://www.mediawiki.org/wiki/API:Main_page/zh",
+       "api-help-main-header": "主模块",
+       "api-help-flag-deprecated": "此模块已弃用。",
+       "api-help-flag-internal": "<strong>此模块是内部或不稳定的。</strong>它的操作可以更改而不另行通知。",
+       "api-help-flag-readrights": "此模块需要读取权限。",
+       "api-help-flag-writerights": "此模块需要写入权限。",
+       "api-help-flag-mustbeposted": "此模块只允许POST请求。",
+       "api-help-flag-generator": "此模块可作为发生器使用。",
+       "api-help-parameters": "{{PLURAL:$1|参数}}:",
+       "api-help-param-deprecated": "不推荐使用。",
+       "api-help-param-required": "这个参数是必须的。",
+       "api-help-param-list": "{{PLURAL:$1|1=一个值|2=值(以“{{!}}”分隔)}}:$2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=必须为空|可以为空,或$2}}",
+       "api-help-param-limit": "不允许超过$1。",
+       "api-help-param-limit2": "不允许超过$1个(对于机器人则是$2个)。",
+       "api-help-param-integer-min": "{{PLURAL:$1|值}}必须不少于$2。",
+       "api-help-param-integer-max": "{{PLURAL:$1|值}}必须不大于$2。",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|值}}必须介于$2和$3之间。",
+       "api-help-param-multi-separate": "通过“|”隔开各值。",
+       "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-disabled-in-miser-mode": "由于[https://www.mediawiki.org/wiki/Manual:$wgMiserMode miser模式]而禁用。",
+       "api-help-param-limited-in-miser-mode": "'''注意:'''由于[https://www.mediawiki.org/wiki/Manual:$wgMiserMode miser模式],使用这个可能导致继续前返回少于“$1limit”个结果;极端情况下可能不会返回任何结果。",
+       "api-help-param-continue": "什么时候更多结果可用什么时候继续使用。",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(没有说明)</span>",
+       "api-help-examples": "{{PLURAL:$1|例子}}:",
+       "api-help-permissions": "{{PLURAL:$1|权限}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|授予}}:$2",
+       "api-credits-header": "制作人员",
+       "api-credits": "API 开发人员:\n* Roan Kattouw(2007年9月~2009年的开发组领导)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan(创建者,2006年9月~2007年9月的开发组领导)\n* Brad Jorsch(2013年至今的开发组领导)\n\n请将您的评论、建议和问题发送至mediawiki-api@lists.wikimedia.org,或提交错误请求在https://bugzilla.wikimedia.org/。"
+}
diff --git a/includes/api/i18n/zh-hant.json b/includes/api/i18n/zh-hant.json
new file mode 100644 (file)
index 0000000..1038f71
--- /dev/null
@@ -0,0 +1,51 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Cwlin0416",
+                       "Liuxinyu970226"
+               ]
+       },
+       "apihelp-main-param-action": "要執行的動作。",
+       "apihelp-main-param-format": "輸出的格式。",
+       "apihelp-login-param-name": "使用者名稱。",
+       "apihelp-userrights-param-user": "使用者名稱。",
+       "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-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-wddx-description": "使用 WDDX 格式輸出資料。",
+       "apihelp-wddxfm-description": "使用 WDDX 格式輸出資料 (使用 HTML 格式顯示)。",
+       "apihelp-xml-description": "使用 XML 格式輸出資料。",
+       "apihelp-xmlfm-description": "使用 XML 格式輸出資料 (使用 HTML 格式顯示)。",
+       "apihelp-yaml-description": "使用 YAML 格式輸出資料。",
+       "apihelp-yamlfm-description": "使用 YAML 格式輸出資料 (使用 HTML 格式顯示)。",
+       "api-format-title": "MediaWiki API 結果",
+       "api-help-title": "MediaWiki API 說明",
+       "api-help-main-header": "主要模組",
+       "api-help-flag-deprecated": "此模組已停用。",
+       "api-help-flag-readrights": "此模組需要讀取權限。",
+       "api-help-flag-writerights": "此模組需要寫入權限。",
+       "api-help-flag-mustbeposted": "此模組僅接受 POST 請求。",
+       "api-help-parameters": "{{PLURAL:$1|參數}}:",
+       "api-help-param-deprecated": "已停用。",
+       "api-help-param-required": "此參數為必填。",
+       "api-help-param-limit": "不允許超過 $1。",
+       "api-help-param-limit2": "不允許超過 $1 (機器人為 $2)。",
+       "api-help-param-multi-separate": "使用 \"|\" 分隔數值。",
+       "api-help-param-default": "預設值:$1",
+       "api-help-param-default-empty": "預設值:<span class=\"apihelp-empty\">(空)</span>",
+       "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": "製作群"
+}
index 91580f9..58ca2dc 100644 (file)
@@ -35,21 +35,28 @@ class HTMLFileCache extends FileCacheBase {
         * @param string $action
         * @throws MWException
         * @return HTMLFileCache
+        *
+        * @deprecated Since 1.24, instantiate this class directly
         */
        public static function newFromTitle( $title, $action ) {
-               $cache = new self();
+               return new self( $title, $action );
+       }
 
+       /**
+        * @param Title|string $title Title object or prefixed DB key string
+        * @param string $action
+        * @throws MWException
+        */
+       public function __construct( $title, $action ) {
                $allowedTypes = self::cacheablePageActions();
                if ( !in_array( $action, $allowedTypes ) ) {
-                       throw new MWException( "Invalid filecache type given." );
+                       throw new MWException( 'Invalid file cache type given.' );
                }
-               $cache->mKey = ( $title instanceof Title )
+               $this->mKey = ( $title instanceof Title )
                        ? $title->getPrefixedDBkey()
                        : (string)$title;
-               $cache->mType = (string)$action;
-               $cache->mExt = 'html';
-
-               return $cache;
+               $this->mType = (string)$action;
+               $this->mExt = 'html';
        }
 
        /**
@@ -120,7 +127,11 @@ class HTMLFileCache extends FileCacheBase {
                $clang = $wgContLang->getCode();
 
                // Check that there are no other sources of variation
-               return !$user->getId() && !$user->getNewtalk() && $ulang == $clang;
+               if ( $user->getId() || $user->getNewtalk() || $ulang != $clang ) {
+                       return false;
+               }
+               // Allow extensions to disable caching
+               return wfRunHooks( 'HTMLFileCache::useFileCache', array( $context ) );
        }
 
        /**
@@ -211,7 +222,7 @@ class HTMLFileCache extends FileCacheBase {
                }
 
                foreach ( self::cacheablePageActions() as $type ) {
-                       $fc = self::newFromTitle( $title, $type );
+                       $fc = new self( $title, $type );
                        $fc->clearCache();
                }
 
index 6925df9..82fb12d 100644 (file)
@@ -216,7 +216,7 @@ class LinkCache {
         * @return int
         */
        public function addLinkObj( $nt ) {
-               global $wgAntiLockFlags, $wgContentHandlerUseDB;
+               global $wgContentHandlerUseDB;
 
                wfProfileIn( __METHOD__ );
 
@@ -242,14 +242,8 @@ class LinkCache {
                # Some fields heavily used for linking...
                if ( $this->mForUpdate ) {
                        $db = wfGetDB( DB_MASTER );
-                       if ( !( $wgAntiLockFlags & ALF_NO_LINK_LOCK ) ) {
-                               $options = array( 'FOR UPDATE' );
-                       } else {
-                               $options = array();
-                       }
                } else {
                        $db = wfGetDB( DB_SLAVE );
-                       $options = array();
                }
 
                $f = array( 'page_id', 'page_len', 'page_is_redirect', 'page_latest' );
@@ -259,7 +253,7 @@ class LinkCache {
 
                $s = $db->selectRow( 'page', $f,
                        array( 'page_namespace' => $nt->getNamespace(), 'page_title' => $nt->getDBkey() ),
-                       __METHOD__, $options );
+                       __METHOD__ );
                # Set fields...
                if ( $s !== false ) {
                        $this->addGoodLinkObjFromRow( $nt, $s );
index bdfe510..ae27fba 100644 (file)
@@ -200,9 +200,6 @@ class LocalisationCache {
                                case 'db':
                                        $storeClass = 'LCStoreDB';
                                        break;
-                               case 'accel':
-                                       $storeClass = 'LCStoreAccel';
-                                       break;
                                case 'detect':
                                        $storeClass = $wgCacheDirectory ? 'LCStoreCDB' : 'LCStoreDB';
                                        break;
@@ -404,7 +401,7 @@ class LocalisationCache {
                $deps = $this->store->get( $code, 'deps' );
                $keys = $this->store->get( $code, 'list' );
                $preload = $this->store->get( $code, 'preload' );
-               // Different keys may expire separately, at least in LCStoreAccel
+               // Different keys may expire separately for some stores
                if ( $deps === null || $keys === null || $preload === null ) {
                        wfDebug( __METHOD__ . "($code): cache missing, need to make one\n" );
 
@@ -843,73 +840,109 @@ class LocalisationCache {
                        if ( $coreData['fallbackSequence'][$len - 1] !== 'en' ) {
                                $coreData['fallbackSequence'][] = 'en';
                        }
+               }
 
-                       # Load the fallback localisation item by item and merge it
-                       foreach ( $coreData['fallbackSequence'] as $fbCode ) {
-                               # Load the secondary localisation from the source file to
-                               # avoid infinite cycles on cyclic fallbacks
-                               $fbData = $this->readSourceFilesAndRegisterDeps( $fbCode, $deps );
-                               if ( $fbData === false ) {
-                                       continue;
-                               }
+               $codeSequence = array_merge( array( $code ), $coreData['fallbackSequence'] );
 
-                               foreach ( self::$allKeys as $key ) {
-                                       if ( !isset( $fbData[$key] ) ) {
-                                               continue;
-                                       }
+               wfProfileIn( __METHOD__ . '-fallbacks' );
 
-                                       if ( is_null( $coreData[$key] ) || $this->isMergeableKey( $key ) ) {
-                                               $this->mergeItem( $key, $coreData[$key], $fbData[$key] );
+               # Load non-JSON localisation data for extensions
+               $extensionData = array_combine(
+                       $codeSequence,
+                       array_fill( 0, count( $codeSequence ), $initialData ) );
+               foreach ( $wgExtensionMessagesFiles as $extension => $fileName ) {
+                       if ( isset( $wgMessagesDirs[$extension] ) ) {
+                               # This extension has JSON message data; skip the PHP shim
+                               continue;
+                       }
+
+                       $data = $this->readPHPFile( $fileName, 'extension' );
+                       $used = false;
+
+                       foreach ( $data as $key => $item ) {
+                               foreach ( $codeSequence as $csCode ) {
+                                       if ( isset( $item[$csCode] ) ) {
+                                               $this->mergeItem( $key, $extensionData[$csCode][$key], $item[$csCode] );
+                                               $used = true;
                                        }
                                }
                        }
-               }
 
-               $codeSequence = array_merge( array( $code ), $coreData['fallbackSequence'] );
+                       if ( $used ) {
+                               $deps[] = new FileDependency( $fileName );
+                       }
+               }
 
-               # Load core messages and the extension localisations.
-               wfProfileIn( __METHOD__ . '-extensions' );
+               # Load the localisation data for each fallback, then merge it into the full array
                $allData = $initialData;
-               foreach ( $wgMessagesDirs as $dirs ) {
-                       foreach ( (array)$dirs as $dir ) {
-                               foreach ( $codeSequence as $csCode ) {
+               foreach ( $codeSequence as $csCode ) {
+                       $csData = $initialData;
+
+                       # Load core messages and the extension localisations.
+                       foreach ( $wgMessagesDirs as $dirs ) {
+                               foreach ( (array)$dirs as $dir ) {
                                        $fileName = "$dir/$csCode.json";
                                        $data = $this->readJSONFile( $fileName );
 
                                        foreach ( $data as $key => $item ) {
-                                               $this->mergeItem( $key, $allData[$key], $item );
+                                               $this->mergeItem( $key, $csData[$key], $item );
                                        }
 
                                        $deps[] = new FileDependency( $fileName );
                                }
                        }
-               }
 
-               foreach ( $wgExtensionMessagesFiles as $extension => $fileName ) {
-                       if ( isset( $wgMessagesDirs[$extension] ) ) {
-                               # Already loaded the JSON files for this extension; skip the PHP shim
-                               continue;
+                       # Merge non-JSON extension data
+                       if ( isset( $extensionData[$csCode] ) ) {
+                               foreach ( $extensionData[$csCode] as $key => $item ) {
+                                       $this->mergeItem( $key, $csData[$key], $item );
+                               }
                        }
 
-                       $data = $this->readPHPFile( $fileName, 'extension' );
-                       $used = false;
-
-                       foreach ( $data as $key => $item ) {
-                               if ( $this->mergeExtensionItem( $codeSequence, $key, $allData[$key], $item ) ) {
-                                       $used = true;
+                       if ( $csCode === $code ) {
+                               # Merge core data into extension data
+                               foreach ( $coreData as $key => $item ) {
+                                       $this->mergeItem( $key, $csData[$key], $item );
+                               }
+                       } else {
+                               # Load the secondary localisation from the source file to
+                               # avoid infinite cycles on cyclic fallbacks
+                               $fbData = $this->readSourceFilesAndRegisterDeps( $csCode, $deps );
+                               if ( $fbData !== false ) {
+                                       # Only merge the keys that make sense to merge
+                                       foreach ( self::$allKeys as $key ) {
+                                               if ( !isset( $fbData[$key] ) ) {
+                                                       continue;
+                                               }
+
+                                               if ( is_null( $coreData[$key] ) || $this->isMergeableKey( $key ) ) {
+                                                       $this->mergeItem( $key, $csData[$key], $fbData[$key] );
+                                               }
+                                       }
                                }
                        }
 
-                       if ( $used ) {
-                               $deps[] = new FileDependency( $fileName );
+                       # Allow extensions an opportunity to adjust the data for this
+                       # fallback
+                       wfRunHooks( 'LocalisationCacheRecacheFallback', array( $this, $csCode, &$csData ) );
+
+                       # Merge the data for this fallback into the final array
+                       if ( $csCode === $code ) {
+                               $allData = $csData;
+                       } else {
+                               foreach ( self::$allKeys as $key ) {
+                                       if ( !isset( $csData[$key] ) ) {
+                                               continue;
+                                       }
+
+                                       if ( is_null( $allData[$key] ) || $this->isMergeableKey( $key ) ) {
+                                               $this->mergeItem( $key, $allData[$key], $csData[$key] );
+                                       }
+                               }
                        }
                }
 
-               # Merge core data into extension data
-               foreach ( $coreData as $key => $item ) {
-                       $this->mergeItem( $key, $allData[$key], $item );
-               }
-               wfProfileOut( __METHOD__ . '-extensions' );
+               wfProfileOut( __METHOD__ . '-fallbacks' );
 
                # Add cache dependencies for any referenced globals
                $deps['wgExtensionMessagesFiles'] = new GlobalDependency( 'wgExtensionMessagesFiles' );
@@ -1098,56 +1131,6 @@ interface LCStore {
        function set( $key, $value );
 }
 
-/**
- * LCStore implementation which uses PHP accelerator to store data.
- * This will work if one of XCache, WinCache or APC cacher is configured.
- * (See ObjectCache.php)
- */
-class LCStoreAccel implements LCStore {
-       private $currentLang;
-       private $keys;
-
-       public function __construct() {
-               $this->cache = wfGetCache( CACHE_ACCEL );
-       }
-
-       public function get( $code, $key ) {
-               $k = wfMemcKey( 'l10n', $code, 'k', $key );
-               $r = $this->cache->get( $k );
-
-               return $r === false ? null : $r;
-       }
-
-       public function startWrite( $code ) {
-               $k = wfMemcKey( 'l10n', $code, 'l' );
-               $keys = $this->cache->get( $k );
-               if ( $keys ) {
-                       foreach ( $keys as $k ) {
-                               $this->cache->delete( $k );
-                       }
-               }
-               $this->currentLang = $code;
-               $this->keys = array();
-       }
-
-       public function finishWrite() {
-               if ( $this->currentLang ) {
-                       $k = wfMemcKey( 'l10n', $this->currentLang, 'l' );
-                       $this->cache->set( $k, array_keys( $this->keys ) );
-               }
-               $this->currentLang = null;
-               $this->keys = array();
-       }
-
-       public function set( $key, $value ) {
-               if ( $this->currentLang ) {
-                       $k = wfMemcKey( 'l10n', $this->currentLang, 'k', $key );
-                       $this->keys[$k] = true;
-                       $this->cache->set( $k, $value );
-               }
-       }
-}
-
 /**
  * LCStore implementation which uses the standard DB functions to store data.
  * This will work on any MediaWiki installation.
index 1ef7cc5..99dafa6 100644 (file)
@@ -422,7 +422,7 @@ class MessageCache {
                        $this->mLoadedLanguages[$code] = true;
                }
                $info = implode( ', ', $where );
-               wfDebug( __METHOD__ . ": Loading $code... $info\n" );
+               wfDebugLog( 'MessageCache', __METHOD__ . ": Loading $code... $info\n" );
                wfProfileOut( __METHOD__ );
 
                return $success;
diff --git a/includes/cache/bloom/BloomCache.php b/includes/cache/bloom/BloomCache.php
new file mode 100644 (file)
index 0000000..a15b461
--- /dev/null
@@ -0,0 +1,323 @@
+<?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.
+        */
+       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 ) {
+               $section = new ProfileSection( 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 null;
+                               }
+
+                               $useFilter = call_user_func_array(
+                                       array( "BloomFilter{$type}", 'mergeAndCheck' ),
+                                       array( $this, $domain, $virtualKey, $status )
+                               );
+
+                               if ( $useFilter ) {
+                                       return ( $this->isHit( 'shared', "$virtualKey:$member" ) !== false );
+                               }
+                       } catch ( MWException $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 ) {
+               $section = new ProfileSection( 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 ( MWException $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 ) {
+               $section = new ProfileSection( 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 ) {
+               $section = new ProfileSection( 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 ) {
+               $section = new ProfileSection( 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 ) {
+               $section = new ProfileSection( 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 ) {
+               $section = new ProfileSection( 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 ) {
+               $section = new ProfileSection( 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
new file mode 100644 (file)
index 0000000..583556f
--- /dev/null
@@ -0,0 +1,371 @@
+<?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
new file mode 100644 (file)
index 0000000..9b710d7
--- /dev/null
@@ -0,0 +1,79 @@
+<?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 d3c44af..03d1289 100644 (file)
@@ -36,6 +36,9 @@ class ChangesList extends ContextSource {
        protected $rclistOpen;
        protected $rcMoveIndex;
 
+       /** @var MapCacheLRU */
+       protected $watchingCache;
+
        /**
         * Changeslist constructor
         *
@@ -50,6 +53,7 @@ class ChangesList extends ContextSource {
                        $this->skin = $obj;
                }
                $this->preCacheMessages();
+               $this->watchingCache = new MapCacheLRU( 50 );
        }
 
        /**
@@ -458,14 +462,14 @@ class ChangesList extends ContextSource {
         * @return string
         */
        protected function numberofWatchingusers( $count ) {
-               static $cache = array();
+               $cache = $this->watchingCache;
                if ( $count > 0 ) {
-                       if ( !isset( $cache[$count] ) ) {
-                               $cache[$count] = $this->msg( 'number_of_watching_users_RCview' )
-                                       ->numParams( $count )->escaped();
+                       if ( !$cache->has( $count ) ) {
+                               $cache->set( $count, $this->msg( 'number_of_watching_users_RCview' )
+                                       ->numParams( $count )->escaped() );
                        }
 
-                       return $cache[$count];
+                       return $cache->get( $count );
                } else {
                        return '';
                }
index 17c5b6e..4eed926 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 class OldChangesList extends ChangesList {
+
        /**
         * Format a line using the old system (aka without any javascript).
         *
@@ -33,10 +34,6 @@ class OldChangesList extends ChangesList {
        public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) {
                wfProfileIn( __METHOD__ );
 
-               # Should patrol-related stuff be shown?
-               $unpatrolled = $this->showAsUnpatrolled( $rc );
-
-               $s = '';
                $classes = array();
                // use mw-line-even/mw-line-odd class only if linenumber is given (feature from bug 14468)
                if ( $linenumber ) {
@@ -52,20 +49,53 @@ class OldChangesList extends ChangesList {
                $classes[] = $watched && $rc->mAttribs['rc_timestamp'] >= $watched
                        ? 'mw-changeslist-line-watched' : 'mw-changeslist-line-not-watched';
 
+               $html = $this->formatChangeLine( $rc, $classes, $watched );
+
+               if ( $this->watchlist ) {
+                       $classes[] = Sanitizer::escapeClass( 'watchlist-' .
+                               $rc->mAttribs['rc_namespace'] . '-' . $rc->mAttribs['rc_title'] );
+               }
+
+               if ( !wfRunHooks( 'OldChangesListRecentChangesLine', array( &$this, &$html, $rc, &$classes ) ) ) {
+                       wfProfileOut( __METHOD__ );
+
+                       return false;
+               }
+
+               wfProfileOut( __METHOD__ );
+
+               $dateheader = ''; // $html now contains only <li>...</li>, for hooks' convenience.
+               $this->insertDateHeader( $dateheader, $rc->mAttribs['rc_timestamp'] );
+
+               return "$dateheader<li class=\"" . implode( ' ', $classes ) . "\">" . $html . "</li>\n";
+       }
+
+       /**
+        * @param RecentChange $rc
+        * @param string[] &$classes
+        * @param boolean $watched
+        *
+        * @return string
+        */
+       private function formatChangeLine( RecentChange $rc, array &$classes, $watched ) {
+               $html = '';
+
                if ( $rc->mAttribs['rc_log_type'] ) {
                        $logtitle = SpecialPage::getTitleFor( 'Log', $rc->mAttribs['rc_log_type'] );
-                       $this->insertLog( $s, $logtitle, $rc->mAttribs['rc_log_type'] );
+                       $this->insertLog( $html, $logtitle, $rc->mAttribs['rc_log_type'] );
                // Log entries (old format) or log targets, and special pages
                } elseif ( $rc->mAttribs['rc_namespace'] == NS_SPECIAL ) {
-                       list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $rc->mAttribs['rc_title'] );
+                       list( $name, $htmlubpage ) = SpecialPageFactory::resolveAlias( $rc->mAttribs['rc_title'] );
                        if ( $name == 'Log' ) {
-                               $this->insertLog( $s, $rc->getTitle(), $subpage );
+                               $this->insertLog( $html, $rc->getTitle(), $htmlubpage );
                        }
                // Regular entries
                } else {
-                       $this->insertDiffHist( $s, $rc, $unpatrolled );
+                       $unpatrolled = $this->showAsUnpatrolled( $rc );
+
+                       $this->insertDiffHist( $html, $rc, $unpatrolled );
                        # M, N, b and ! (minor, new, bot and unpatrolled)
-                       $s .= $this->recentChangesFlags(
+                       $html .= $this->recentChangesFlags(
                                array(
                                        'newpage' => $rc->mAttribs['rc_type'] == RC_NEW,
                                        'minor' => $rc->mAttribs['rc_minor'],
@@ -74,56 +104,40 @@ class OldChangesList extends ChangesList {
                                ),
                                ''
                        );
-                       $this->insertArticleLink( $s, $rc, $unpatrolled, $watched );
+                       $this->insertArticleLink( $html, $rc, $unpatrolled, $watched );
                }
                # Edit/log timestamp
-               $this->insertTimestamp( $s, $rc );
+               $this->insertTimestamp( $html, $rc );
                # Bytes added or removed
                if ( $this->getConfig()->get( 'RCShowChangedSize' ) ) {
                        $cd = $this->formatCharacterDifference( $rc );
                        if ( $cd !== '' ) {
-                               $s .= $cd . '  <span class="mw-changeslist-separator">. .</span> ';
+                               $html .= $cd . '  <span class="mw-changeslist-separator">. .</span> ';
                        }
                }
 
                if ( $rc->mAttribs['rc_type'] == RC_LOG ) {
-                       $s .= $this->insertLogEntry( $rc );
+                       $html .= $this->insertLogEntry( $rc );
                } else {
                        # User tool links
-                       $this->insertUserRelatedLinks( $s, $rc );
+                       $this->insertUserRelatedLinks( $html, $rc );
                        # LTR/RTL direction mark
-                       $s .= $this->getLanguage()->getDirMark();
-                       $s .= $this->insertComment( $rc );
+                       $html .= $this->getLanguage()->getDirMark();
+                       $html .= $this->insertComment( $rc );
                }
 
                # Tags
-               $this->insertTags( $s, $rc, $classes );
+               $this->insertTags( $html, $rc, $classes );
                # Rollback
-               $this->insertRollback( $s, $rc );
+               $this->insertRollback( $html, $rc );
                # For subclasses
-               $this->insertExtra( $s, $rc, $classes );
+               $this->insertExtra( $html, $rc, $classes );
 
                # How many users watch this page
                if ( $rc->numberofWatchingusers > 0 ) {
-                       $s .= ' ' . $this->numberofWatchingusers( $rc->numberofWatchingusers );
-               }
-
-               if ( $this->watchlist ) {
-                       $classes[] = Sanitizer::escapeClass( 'watchlist-' .
-                               $rc->mAttribs['rc_namespace'] . '-' . $rc->mAttribs['rc_title'] );
+                       $html .= ' ' . $this->numberofWatchingusers( $rc->numberofWatchingusers );
                }
 
-               if ( !wfRunHooks( 'OldChangesListRecentChangesLine', array( &$this, &$s, $rc, &$classes ) ) ) {
-                       wfProfileOut( __METHOD__ );
-
-                       return false;
-               }
-
-               wfProfileOut( __METHOD__ );
-
-               $dateheader = ''; // $s now contains only <li>...</li>, for hooks' convenience.
-               $this->insertDateHeader( $dateheader, $rc->mAttribs['rc_timestamp'] );
-
-               return "$dateheader<li class=\"" . implode( ' ', $classes ) . "\">" . $s . "</li>\n";
+               return $html;
        }
 }
index e33274e..d187c54 100644 (file)
@@ -283,7 +283,7 @@ class RecentChange {
                }
 
                # If our database is strict about IP addresses, use NULL instead of an empty string
-               if ( $dbw->strictIPs() and $this->mAttribs['rc_ip'] == '' ) {
+               if ( $dbw->strictIPs() && $this->mAttribs['rc_ip'] == '' ) {
                        unset( $this->mAttribs['rc_ip'] );
                }
 
@@ -298,7 +298,7 @@ class RecentChange {
                $this->mAttribs['rc_id'] = $dbw->nextSequenceValue( 'recentchanges_rc_id_seq' );
 
                ## If we are using foreign keys, an entry of 0 for the page_id will fail, so use NULL
-               if ( $dbw->cascadingDeletes() and $this->mAttribs['rc_cur_id'] == 0 ) {
+               if ( $dbw->cascadingDeletes() && $this->mAttribs['rc_cur_id'] == 0 ) {
                        unset( $this->mAttribs['rc_cur_id'] );
                }
 
index 68e90b4..38f589d 100644 (file)
@@ -37,11 +37,11 @@ interface Config {
        public function get( $name );
 
        /**
-        * Set a configuration variable such a "Sitename" to something like "My Wiki"
+        * Check whether a configuration option is set for the given name
         *
         * @param string $name Name of configuration option
-        * @param mixed $value Value to set
-        * @throws ConfigException
+        * @return bool
+        * @since 1.24
         */
-       public function set( $name, $value );
+       public function has( $name );
 }
index 0841a00..589f7d3 100644 (file)
@@ -49,14 +49,17 @@ class GlobalVarConfig implements Config {
         * @see Config::get
         */
        public function get( $name ) {
+               if ( !$this->has( $name ) ) {
+                       throw new ConfigException( __METHOD__ . ": undefined option: '$name'" );
+               }
                return $this->getWithPrefix( $this->prefix, $name );
        }
 
        /**
-        * @see Config::set
+        * @see Config::has
         */
-       public function set( $name, $value ) {
-               $this->setWithPrefix( $this->prefix, $name, $value );
+       public function has( $name ) {
+               return $this->hasWithPrefix( $this->prefix, $name );
        }
 
        /**
@@ -64,25 +67,21 @@ class GlobalVarConfig implements Config {
         *
         * @param string $prefix Prefix to use on the variable, if one.
         * @param string $name Variable name without prefix
-        * @throws ConfigException
         * @return mixed
         */
        protected function getWithPrefix( $prefix, $name ) {
-               $var = $prefix . $name;
-               if ( !array_key_exists( $var, $GLOBALS ) ) {
-                       throw new ConfigException( __METHOD__ . ": undefined variable: '$var'" );
-               }
-               return $GLOBALS[$var];
+               return $GLOBALS[$prefix . $name];
        }
 
        /**
-        * Get a variable with a given prefix, if not the defaults.
+        * Check if a variable with a given prefix is set
         *
         * @param string $prefix Prefix to use on the variable
         * @param string $name Variable name without prefix
-        * @param mixed $value Value to set
+        * @return bool
         */
-       protected function setWithPrefix( $prefix, $name, $value ) {
-               $GLOBALS[$prefix . $name] = $value;
+       protected function hasWithPrefix( $prefix, $name ) {
+               $var = $prefix . $name;
+               return array_key_exists( $var, $GLOBALS );
        }
 }
diff --git a/includes/config/HashConfig.php b/includes/config/HashConfig.php
new file mode 100644 (file)
index 0000000..a09a0a4
--- /dev/null
@@ -0,0 +1,75 @@
+<?php
+/**
+ * Copyright 2014
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A Config instance which stores all settings as a member variable
+ *
+ * @since 1.24
+ */
+class HashConfig implements Config, MutableConfig {
+
+       /**
+        * Array of config settings
+        *
+        * @var array
+        */
+       private $settings;
+
+       /**
+        * @return HashConfig
+        */
+       public static function newInstance() {
+               return new HashConfig;
+       }
+
+       /**
+        * @param array $settings Any current settings to pre-load
+        */
+       public function __construct( array $settings = array() ) {
+               $this->settings = $settings;
+       }
+
+       /**
+        * @see Config::get
+        */
+       public function get( $name ) {
+               if ( !$this->has( $name ) ) {
+                       throw new ConfigException( __METHOD__ . ": undefined option: '$name'" );
+               }
+
+               return $this->settings[$name];
+       }
+
+       /**
+        * @see Config::has
+        */
+       public function has( $name ) {
+               return array_key_exists( $name, $this->settings );
+       }
+
+       /**
+        * @see Config::set
+        */
+       public function set( $name, $value ) {
+               $this->settings[$name] = $value;
+       }
+}
diff --git a/includes/config/MultiConfig.php b/includes/config/MultiConfig.php
new file mode 100644 (file)
index 0000000..cbb65aa
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Copyright 2014
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Provides a fallback sequence for Config objects
+ *
+ * @since 1.24
+ */
+class MultiConfig implements Config {
+
+       /**
+        * Array of Config objects to use
+        * Order matters, the Config objects
+        * will be checked in order to see
+        * whether they have the requested setting
+        *
+        * @var Config[]
+        */
+       private $configs;
+
+       /**
+        * @param Config[] $configs
+        */
+       public function __construct( array $configs ) {
+               $this->configs = $configs;
+       }
+
+       /**
+        * @see Config::get
+        */
+       public function get( $name ) {
+               foreach ( $this->configs as $config ) {
+                       if ( $config->has( $name ) ) {
+                               return $config->get( $name );
+                       }
+               }
+
+               throw new ConfigException( __METHOD__ . ": undefined option: '$name'" );
+       }
+
+       /**
+        * @see Config::has
+        */
+       public function has( $name ) {
+               foreach ( $this->configs as $config ) {
+                       if ( $config->has( $name ) ) {
+                               return true;
+                       }
+               }
+
+               return false;
+       }
+}
diff --git a/includes/config/MutableConfig.php b/includes/config/MutableConfig.php
new file mode 100644 (file)
index 0000000..e765e3b
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Copyright 2014
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Interface for mutable configuration instances
+ *
+ * @since 1.24
+ */
+interface MutableConfig {
+
+       /**
+        * Set a configuration variable such a "Sitename" to something like "My Wiki"
+        *
+        * @param string $name Name of configuration option
+        * @param mixed $value Value to set
+        * @throws ConfigException
+        */
+       public function set( $name, $value );
+}
index 683c959..cb39fac 100644 (file)
@@ -483,9 +483,16 @@ abstract class AbstractContent implements Content {
                if ( wfRunHooks( 'ContentGetParserOutput',
                        array( $this, $title, $revId, $options, $generateHtml, &$po ) ) ) {
 
+                       // Save and restore the old value, just in case something is reusing
+                       // the ParserOptions object in some weird way.
+                       $oldRedir = $options->getRedirectTarget();
+                       $options->setRedirectTarget( $this->getRedirectTarget() );
                        $this->fillParserOutput( $title, $revId, $options, $generateHtml, $po );
+                       $options->setRedirectTarget( $oldRedir );
                }
 
+               wfRunHooks( 'ContentAlterParserOutput', array( $this, $title, $po ) );
+
                return $po;
        }
 
diff --git a/includes/content/CodeContentHandler.php b/includes/content/CodeContentHandler.php
new file mode 100644 (file)
index 0000000..447a2a7
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Content handler for the pages with code, such as CSS, JavaScript, JSON.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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 Content
+ */
+
+/**
+ * Content handler for code content such as CSS, JavaScript, JSON, etc
+ * @since 1.24
+ * @ingroup Content
+ */
+abstract class CodeContentHandler extends TextContentHandler {
+
+       /**
+        * Returns the english language, because code is english, and should be handled as such.
+        *
+        * @param Title $title
+        * @param Content $content
+        *
+        * @return Language Return of wfGetLangObj( 'en' )
+        *
+        * @see ContentHandler::getPageLanguage()
+        */
+       public function getPageLanguage( Title $title, Content $content = null ) {
+               return wfGetLangObj( 'en' );
+       }
+
+       /**
+        * Returns the english language, because code is english, and should be handled as such.
+        *
+        * @param Title $title
+        * @param Content $content
+        *
+        * @return Language Return of wfGetLangObj( 'en' )
+        *
+        * @see ContentHandler::getPageViewLanguage()
+        */
+       public function getPageViewLanguage( Title $title, Content $content = null ) {
+               return wfGetLangObj( 'en' );
+       }
+
+       /**
+        * @return string
+        */
+       protected function getContentClass() {
+               throw new MWException( 'Subclass must override' );
+       }
+}
index 2673084..8290603 100644 (file)
@@ -34,9 +34,10 @@ class CssContent extends TextContent {
 
        /**
         * @param string $text CSS code.
+        * @param string $modelId the content content model
         */
-       public function __construct( $text ) {
-               parent::__construct( $text, CONTENT_MODEL_CSS );
+       public function __construct( $text, $modelId = CONTENT_MODEL_CSS ) {
+               parent::__construct( $text, $modelId );
        }
 
        /**
@@ -58,7 +59,7 @@ class CssContent extends TextContent {
                $text = $this->getNativeData();
                $pst = $wgParser->preSaveTransform( $text, $title, $user, $popts );
 
-               return new CssContent( $pst );
+               return new static( $pst );
        }
 
        /**
index fd326f0..b2a8676 100644 (file)
@@ -27,7 +27,7 @@
  * @since 1.21
  * @ingroup Content
  */
-class CssContentHandler extends TextContentHandler {
+class CssContentHandler extends CodeContentHandler {
 
        /**
         * @param string $modelId
@@ -36,55 +36,7 @@ class CssContentHandler extends TextContentHandler {
                parent::__construct( $modelId, array( CONTENT_FORMAT_CSS ) );
        }
 
-       /**
-        * @param string $text
-        * @param string $format
-        *
-        * @return CssContent
-        *
-        * @see ContentHandler::unserializeContent()
-        */
-       public function unserializeContent( $text, $format = null ) {
-               $this->checkFormat( $format );
-
-               return new CssContent( $text );
-       }
-
-       /**
-        * @return CssContent A new CssContent object with empty text.
-        *
-        * @see ContentHandler::makeEmptyContent()
-        */
-       public function makeEmptyContent() {
-               return new CssContent( '' );
-       }
-
-       /**
-        * Returns the english language, because CSS is english, and should be handled as such.
-        *
-        * @param Title $title
-        * @param Content $content
-        *
-        * @return Language Return of wfGetLangObj( 'en' )
-        *
-        * @see ContentHandler::getPageLanguage()
-        */
-       public function getPageLanguage( Title $title, Content $content = null ) {
-               return wfGetLangObj( 'en' );
-       }
-
-       /**
-        * Returns the english language, because CSS is english, and should be handled as such.
-        *
-        * @param Title $title
-        * @param Content $content
-        *
-        * @return Language Return of wfGetLangObj( 'en' )
-        *
-        * @see ContentHandler::getPageViewLanguage()
-        */
-       public function getPageViewLanguage( Title $title, Content $content = null ) {
-               return wfGetLangObj( 'en' );
+       protected function getContentClass() {
+               return 'CssContent';
        }
-
 }
diff --git a/includes/content/JSONContent.php b/includes/content/JSONContent.php
deleted file mode 100644 (file)
index e563780..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-/**
- * JSON Content Model
- *
- * @file
- *
- * @author Ori Livneh <ori@wikimedia.org>
- * @author Kunal Mehta <legoktm@gmail.com>
- */
-
-/**
- * Represents the content of a JSON content.
- * @since 1.24
- */
-class JSONContent extends TextContent {
-
-       public function __construct( $text, $modelId = CONTENT_MODEL_JSON ) {
-               parent::__construct( $text, $modelId );
-       }
-
-       /**
-        * Decodes the JSON into a PHP associative array.
-        * @return array
-        */
-       public function getJsonData() {
-               return FormatJson::decode( $this->getNativeData(), true );
-       }
-
-       /**
-        * @return bool Whether content is valid JSON.
-        */
-       public function isValid() {
-               return $this->getJsonData() !== null;
-       }
-
-       /**
-        * Pretty-print JSON
-        *
-        * @return bool|null|string
-        */
-       public function beautifyJSON() {
-               $decoded = FormatJson::decode( $this->getNativeData(), true );
-               if ( !is_array( $decoded ) ) {
-                       return null;
-               }
-               return FormatJson::encode( $decoded, true );
-
-       }
-
-       /**
-        * Beautifies JSON prior to save.
-        * @param Title $title Title
-        * @param User $user User
-        * @param ParserOptions $popts
-        * @return JSONContent
-        */
-       public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
-               return new static( $this->beautifyJSON() );
-       }
-
-       /**
-        * Set the HTML and add the appropriate styles
-        *
-        *
-        * @param Title $title
-        * @param int $revId
-        * @param ParserOptions $options
-        * @param bool $generateHtml
-        * @param ParserOutput $output
-        */
-       protected function fillParserOutput( Title $title, $revId,
-               ParserOptions $options, $generateHtml, ParserOutput &$output
-       ) {
-               if ( $generateHtml ) {
-                       $output->setText( $this->objectTable( $this->getJsonData() ) );
-                       $output->addModuleStyles( 'mediawiki.content.json' );
-               } else {
-                       $output->setText( '' );
-               }
-       }
-       /**
-        * Constructs an HTML representation of a JSON object.
-        * @param array $mapping
-        * @return string HTML
-        */
-       protected function objectTable( $mapping ) {
-               $rows = array();
-
-               foreach ( $mapping as $key => $val ) {
-                       $rows[] = $this->objectRow( $key, $val );
-               }
-               return Xml::tags( 'table', array( 'class' => 'mw-json' ),
-                       Xml::tags( 'tbody', array(), join( "\n", $rows ) )
-               );
-       }
-
-       /**
-        * Constructs HTML representation of a single key-value pair.
-        * @param string $key
-        * @param mixed $val
-        * @return string HTML.
-        */
-       protected function objectRow( $key, $val ) {
-               $th = Xml::elementClean( 'th', array(), $key );
-               if ( is_array( $val ) ) {
-                       $td = Xml::tags( 'td', array(), self::objectTable( $val ) );
-               } else {
-                       if ( is_string( $val ) ) {
-                               $val = '"' . $val . '"';
-                       } else {
-                               $val = FormatJson::encode( $val );
-                       }
-
-                       $td = Xml::elementClean( 'td', array( 'class' => 'value' ), $val );
-               }
-
-               return Xml::tags( 'tr', array(), $th . $td );
-       }
-
-}
diff --git a/includes/content/JSONContentHandler.php b/includes/content/JSONContentHandler.php
deleted file mode 100644 (file)
index 6b77527..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-/**
- * JSON Schema Content Handler
- *
- * @file
- *
- * @author Ori Livneh <ori@wikimedia.org>
- * @author Kunal Mehta <legoktm@gmail.com>
- */
-
-/**
- * @since 1.24
- */
-class JSONContentHandler extends TextContentHandler {
-
-       /**
-        * The class name of objects that should be created
-        *
-        * @var string
-        */
-       protected $contentClass = 'JSONContent';
-
-       public function __construct( $modelId = CONTENT_MODEL_JSON ) {
-               parent::__construct( $modelId, array( CONTENT_FORMAT_JSON ) );
-       }
-
-       /**
-        * Unserializes a JSONContent object.
-        *
-        * @param string $text Serialized form of the content
-        * @param null|string $format The format used for serialization
-        *
-        * @return JSONContent
-        */
-       public function unserializeContent( $text, $format = null ) {
-               $this->checkFormat( $format );
-               return new $this->contentClass( $text );
-       }
-
-       /**
-        * Creates an empty JSONContent object.
-        *
-        * @return JSONContent
-        */
-       public function makeEmptyContent() {
-               return new $this->contentClass( '' );
-       }
-
-       /**
-        * Returns the english language, because JSON is english, and should be handled as such.
-        *
-        * @param Title $title
-        * @param Content|null $content
-        *
-        * @return Language Return of wfGetLangObj( 'en' )
-        *
-        * @see ContentHandler::getPageLanguage()
-        */
-       public function getPageLanguage( Title $title, Content $content = null ) {
-               return wfGetLangObj( 'en' );
-       }
-
-       /**
-        * Returns the english language, because JSON is english, and should be handled as such.
-        *
-        * @param Title $title
-        * @param Content|null $content
-        *
-        * @return Language Return of wfGetLangObj( 'en' )
-        *
-        * @see ContentHandler::getPageLanguage()
-        */
-       public function getPageViewLanguage( Title $title, Content $content = null ) {
-               return wfGetLangObj( 'en' );
-       }
-}
index 442b705..c0194c2 100644 (file)
@@ -34,9 +34,10 @@ class JavaScriptContent extends TextContent {
 
        /**
         * @param string $text JavaScript code.
+        * @param string $modelId the content model name
         */
-       public function __construct( $text ) {
-               parent::__construct( $text, CONTENT_MODEL_JAVASCRIPT );
+       public function __construct( $text, $modelId = CONTENT_MODEL_JAVASCRIPT ) {
+               parent::__construct( $text, $modelId );
        }
 
        /**
@@ -57,7 +58,7 @@ class JavaScriptContent extends TextContent {
                $text = $this->getNativeData();
                $pst = $wgParser->preSaveTransform( $text, $title, $user, $popts );
 
-               return new JavaScriptContent( $pst );
+               return new static( $pst );
        }
 
        /**
index 122003f..457b83d 100644 (file)
@@ -27,7 +27,7 @@
  * @ingroup Content
  * @todo make ScriptContentHandler base class, do highlighting stuff there?
  */
-class JavaScriptContentHandler extends TextContentHandler {
+class JavaScriptContentHandler extends CodeContentHandler {
 
        /**
         * @param string $modelId
@@ -36,55 +36,7 @@ class JavaScriptContentHandler extends TextContentHandler {
                parent::__construct( $modelId, array( CONTENT_FORMAT_JAVASCRIPT ) );
        }
 
-       /**
-        * @param string $text
-        * @param string $format
-        *
-        * @return JavaScriptContent
-        *
-        * @see ContentHandler::unserializeContent()
-        */
-       public function unserializeContent( $text, $format = null ) {
-               $this->checkFormat( $format );
-
-               return new JavaScriptContent( $text );
-       }
-
-       /**
-        * @return JavaScriptContent A new JavaScriptContent object with empty text.
-        *
-        * @see ContentHandler::makeEmptyContent()
-        */
-       public function makeEmptyContent() {
-               return new JavaScriptContent( '' );
-       }
-
-       /**
-        * Returns the english language, because JS is english, and should be handled as such.
-        *
-        * @param Title $title
-        * @param Content $content
-        *
-        * @return Language Return of wfGetLangObj( 'en' )
-        *
-        * @see ContentHandler::getPageLanguage()
-        */
-       public function getPageLanguage( Title $title, Content $content = null ) {
-               return wfGetLangObj( 'en' );
-       }
-
-       /**
-        * Returns the english language, because JS is english, and should be handled as such.
-        *
-        * @param Title $title
-        * @param Content $content
-        *
-        * @return Language Return of wfGetLangObj( 'en' )
-        *
-        * @see ContentHandler::getPageViewLanguage()
-        */
-       public function getPageViewLanguage( Title $title, Content $content = null ) {
-               return wfGetLangObj( 'en' );
+       protected function getContentClass() {
+               return 'JavaScriptContent';
        }
-
 }
diff --git a/includes/content/JsonContent.php b/includes/content/JsonContent.php
new file mode 100644 (file)
index 0000000..b36827c
--- /dev/null
@@ -0,0 +1,120 @@
+<?php
+/**
+ * JSON Content Model
+ *
+ * @file
+ *
+ * @author Ori Livneh <ori@wikimedia.org>
+ * @author Kunal Mehta <legoktm@gmail.com>
+ */
+
+/**
+ * Represents the content of a JSON content.
+ * @since 1.24
+ */
+class JsonContent extends TextContent {
+
+       public function __construct( $text, $modelId = CONTENT_MODEL_JSON ) {
+               parent::__construct( $text, $modelId );
+       }
+
+       /**
+        * Decodes the JSON into a PHP associative array.
+        * @return array
+        */
+       public function getJsonData() {
+               return FormatJson::decode( $this->getNativeData(), true );
+       }
+
+       /**
+        * @return bool Whether content is valid JSON.
+        */
+       public function isValid() {
+               return $this->getJsonData() !== null;
+       }
+
+       /**
+        * Pretty-print JSON
+        *
+        * @return bool|null|string
+        */
+       public function beautifyJSON() {
+               $decoded = FormatJson::decode( $this->getNativeData(), true );
+               if ( !is_array( $decoded ) ) {
+                       return null;
+               }
+               return FormatJson::encode( $decoded, true );
+
+       }
+
+       /**
+        * Beautifies JSON prior to save.
+        * @param Title $title Title
+        * @param User $user User
+        * @param ParserOptions $popts
+        * @return JsonContent
+        */
+       public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
+               return new static( $this->beautifyJSON() );
+       }
+
+       /**
+        * Set the HTML and add the appropriate styles
+        *
+        *
+        * @param Title $title
+        * @param int $revId
+        * @param ParserOptions $options
+        * @param bool $generateHtml
+        * @param ParserOutput $output
+        */
+       protected function fillParserOutput( Title $title, $revId,
+               ParserOptions $options, $generateHtml, ParserOutput &$output
+       ) {
+               if ( $generateHtml ) {
+                       $output->setText( $this->objectTable( $this->getJsonData() ) );
+                       $output->addModuleStyles( 'mediawiki.content.json' );
+               } else {
+                       $output->setText( '' );
+               }
+       }
+       /**
+        * Constructs an HTML representation of a JSON object.
+        * @param array $mapping
+        * @return string HTML
+        */
+       protected function objectTable( $mapping ) {
+               $rows = array();
+
+               foreach ( $mapping as $key => $val ) {
+                       $rows[] = $this->objectRow( $key, $val );
+               }
+               return Xml::tags( 'table', array( 'class' => 'mw-json' ),
+                       Xml::tags( 'tbody', array(), join( "\n", $rows ) )
+               );
+       }
+
+       /**
+        * Constructs HTML representation of a single key-value pair.
+        * @param string $key
+        * @param mixed $val
+        * @return string HTML.
+        */
+       protected function objectRow( $key, $val ) {
+               $th = Xml::elementClean( 'th', array(), $key );
+               if ( is_array( $val ) ) {
+                       $td = Xml::tags( 'td', array(), self::objectTable( $val ) );
+               } else {
+                       if ( is_string( $val ) ) {
+                               $val = '"' . $val . '"';
+                       } else {
+                               $val = FormatJson::encode( $val );
+                       }
+
+                       $td = Xml::elementClean( 'td', array( 'class' => 'value' ), $val );
+               }
+
+               return Xml::tags( 'tr', array(), $th . $td );
+       }
+
+}
diff --git a/includes/content/JsonContentHandler.php b/includes/content/JsonContentHandler.php
new file mode 100644 (file)
index 0000000..392ce37
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+/**
+ * JSON Schema Content Handler
+ *
+ * @file
+ *
+ * @author Ori Livneh <ori@wikimedia.org>
+ * @author Kunal Mehta <legoktm@gmail.com>
+ */
+
+/**
+ * @since 1.24
+ */
+class JsonContentHandler extends CodeContentHandler {
+
+       public function __construct( $modelId = CONTENT_MODEL_JSON ) {
+               parent::__construct( $modelId, array( CONTENT_FORMAT_JSON ) );
+       }
+
+       /**
+        * @return string
+        */
+       protected function getContentClass() {
+               return 'JsonContent';
+       }
+}
index abaac53..5b84657 100644 (file)
@@ -29,7 +29,7 @@
  * Wrapper allowing us to handle a system message as a Content object.
  * Note that this is generally *not* used to represent content from the
  * MediaWiki namespace, and that there is no MessageContentHandler.
- * MessageContent is just intended as glue for wrapping a message programatically.
+ * MessageContent is just intended as glue for wrapping a message programmatically.
  *
  * @ingroup Content
  */
@@ -106,7 +106,7 @@ class MessageContent extends AbstractContent {
        }
 
        /**
-        * @param int $maxLength Maximum length of the summary text, defaults to 250.
+        * @param int $maxlength Maximum length of the summary text, defaults to 250.
         *
         * @return string The summary text.
         *
@@ -165,6 +165,8 @@ class MessageContent extends AbstractContent {
                }
 
                $po = new ParserOutput( $html );
+               // Message objects are in the user language.
+               $po->recordOption( 'userlang' );
 
                return $po;
        }
index d292880..c479f20 100644 (file)
@@ -160,7 +160,7 @@ class TextContent extends AbstractContent {
                $text = $this->getNativeData();
                $pst = rtrim( $text );
 
-               return ( $text === $pst ) ? $this : new static( $pst );
+               return ( $text === $pst ) ? $this : new static( $pst, $this->getModel() );
        }
 
        /**
index 0c9ee37..ffe1acb 100644 (file)
@@ -92,6 +92,19 @@ class TextContentHandler extends ContentHandler {
                return $mergedContent;
        }
 
+       /**
+        * Returns the name of the associated Content class, to
+        * be used when creating new objects. Override expected
+        * by subclasses.
+        *
+        * @since 1.24
+        *
+        * @return string
+        */
+       protected function getContentClass() {
+               return 'TextContent';
+       }
+
        /**
         * Unserializes a Content object of the type supported by this ContentHandler.
         *
@@ -105,7 +118,8 @@ class TextContentHandler extends ContentHandler {
        public function unserializeContent( $text, $format = null ) {
                $this->checkFormat( $format );
 
-               return new TextContent( $text );
+               $class = $this->getContentClass();
+               return new $class( $text );
        }
 
        /**
@@ -116,7 +130,8 @@ class TextContentHandler extends ContentHandler {
         * @return Content A new TextContent object with empty text.
         */
        public function makeEmptyContent() {
-               return new TextContent( '' );
+               $class = $this->getContentClass();
+               return new $class( '' );
        }
 
 }
index 237029b..9a8ab3a 100644 (file)
@@ -31,6 +31,7 @@
  * @ingroup Content
  */
 class WikitextContent extends TextContent {
+       private $redirectTargetAndText = null;
 
        public function __construct( $text ) {
                parent::__construct( $text, CONTENT_MODEL_WIKITEXT );
@@ -52,7 +53,7 @@ class WikitextContent extends TextContent {
                if ( $sect === false ) {
                        return false;
                } else {
-                       return new WikitextContent( $sect );
+                       return new static( $sect );
                }
        }
 
@@ -104,7 +105,7 @@ class WikitextContent extends TextContent {
                        $text = $wgParser->replaceSection( $oldtext, $sectionId, $text );
                }
 
-               $newContent = new WikitextContent( $text );
+               $newContent = new static( $text );
 
                wfProfileOut( __METHOD__ );
 
@@ -125,7 +126,7 @@ class WikitextContent extends TextContent {
                $text .= "\n\n";
                $text .= $this->getNativeData();
 
-               return new WikitextContent( $text );
+               return new static( $text );
        }
 
        /**
@@ -145,7 +146,7 @@ class WikitextContent extends TextContent {
                $pst = $wgParser->preSaveTransform( $text, $title, $user, $popts );
                rtrim( $pst );
 
-               return ( $text === $pst ) ? $this : new WikitextContent( $pst );
+               return ( $text === $pst ) ? $this : new static( $pst );
        }
 
        /**
@@ -164,7 +165,7 @@ class WikitextContent extends TextContent {
                $text = $this->getNativeData();
                $plt = $wgParser->getPreloadText( $text, $title, $popts, $params );
 
-               return new WikitextContent( $plt );
+               return new static( $plt );
        }
 
        /**
@@ -178,10 +179,17 @@ class WikitextContent extends TextContent {
         */
        protected function getRedirectTargetAndText() {
                global $wgMaxRedirects;
+
+               if ( $this->redirectTargetAndText !== null ) {
+                       return $this->redirectTargetAndText;
+               }
+
                if ( $wgMaxRedirects < 1 ) {
                        // redirects are disabled, so quit early
-                       return array( null, $this->getNativeData() );
+                       $this->redirectTargetAndText = array( null, $this->getNativeData() );
+                       return $this->redirectTargetAndText;
                }
+
                $redir = MagicWord::get( 'redirect' );
                $text = ltrim( $this->getNativeData() );
                if ( $redir->matchStartAndRemove( $text ) ) {
@@ -199,14 +207,17 @@ class WikitextContent extends TextContent {
                                $title = Title::newFromText( $m[1] );
                                // If the title is a redirect to bad special pages or is invalid, return null
                                if ( !$title instanceof Title || !$title->isValidRedirectTarget() ) {
-                                       return array( null, $this->getNativeData() );
+                                       $this->redirectTargetAndText = array( null, $this->getNativeData() );
+                                       return $this->redirectTargetAndText;
                                }
 
-                               return array( $title, substr( $text, strlen( $m[0] ) ) );
+                               $this->redirectTargetAndText = array( $title, substr( $text, strlen( $m[0] ) ) );
+                               return $this->redirectTargetAndText;
                        }
                }
 
-               return array( null, $this->getNativeData() );
+               $this->redirectTargetAndText = array( null, $this->getNativeData() );
+               return $this->redirectTargetAndText;
        }
 
        /**
@@ -246,7 +257,7 @@ class WikitextContent extends TextContent {
                        '[[' . $target->getFullText() . ']]',
                        $this->getNativeData(), 1 );
 
-               return new WikitextContent( $newText );
+               return new static( $newText );
        }
 
        /**
@@ -336,6 +347,7 @@ class WikitextContent extends TextContent {
                                        Article::getRedirectHeaderHtml( $title->getPageLanguage(), $chain, false ) .
                                        $output->getText()
                                );
+                               $output->addModuleStyles( 'mediawiki.action.view.redirectPage' );
                        }
                }
        }
index 5ae3e25..c1db1de 100644 (file)
@@ -34,19 +34,8 @@ class WikitextContentHandler extends TextContentHandler {
                parent::__construct( $modelId, array( CONTENT_FORMAT_WIKITEXT ) );
        }
 
-       public function unserializeContent( $text, $format = null ) {
-               $this->checkFormat( $format );
-
-               return new WikitextContent( $text );
-       }
-
-       /**
-        * @return Content A new WikitextContent object with empty text.
-        *
-        * @see ContentHandler::makeEmptyContent
-        */
-       public function makeEmptyContent() {
-               return new WikitextContent( '' );
+       protected function getContentClass() {
+               return 'WikitextContent';
        }
 
        /**
@@ -79,7 +68,8 @@ class WikitextContentHandler extends TextContentHandler {
                        $redirectText .= "\n" . $text;
                }
 
-               return new WikitextContent( $redirectText );
+               $class = $this->getContentClass();
+               return new $class( $redirectText );
        }
 
        /**
index 091e8da..059f18c 100644 (file)
@@ -140,11 +140,22 @@ class RequestContext implements IContextSource {
                if ( $this->title === null ) {
                        global $wgTitle; # fallback to $wg till we can improve this
                        $this->title = $wgTitle;
+                       wfDebugLog( 'GlobalTitleFail', __METHOD__ . ' called by ' . wfGetCaller() . ' with no title set.' );
                }
 
                return $this->title;
        }
 
+       /**
+        * Check, if a Title object is set
+        *
+        * @since 1.25
+        * @return bool
+        */
+       public function hasTitle() {
+               return $this->title !== null;
+       }
+
        /**
         * Check whether a WikiPage object can be get with getWikiPage().
         * Callers should expect that an exception is thrown from getWikiPage()
@@ -425,6 +436,7 @@ class RequestContext implements IContextSource {
         * Get the RequestContext object associated with the main request
         * and gives a warning to the log, to find places, where a context maybe is missing.
         *
+        * @param string $func
         * @return RequestContext
         * @since 1.24
         */
@@ -462,10 +474,14 @@ class RequestContext implements IContextSource {
        }
 
        /**
-        * Import the resolved user IP, HTTP headers, user ID, and session ID.
+        * Import an client IP address, HTTP headers, user ID, and session ID
+        *
         * This sets the current session and sets $wgUser and $wgRequest.
         * Once the return value falls out of scope, the old context is restored.
-        * This function can only be called within CLI mode scripts.
+        * This method should only be called in contexts (CLI or HTTP job runners)
+        * where there is no session ID or end user receiving the response. This
+        * is partly enforced, and is done so to avoid leaking cookies if certain
+        * error conditions arise.
         *
         * This will setup the session from the given ID. This is useful when
         * background scripts inherit context when acting on behalf of a user.
@@ -478,11 +494,12 @@ class RequestContext implements IContextSource {
         * @since 1.21
         */
        public static function importScopedSession( array $params ) {
-               if ( PHP_SAPI !== 'cli' ) {
-                       // Don't send random private cookies or turn $wgRequest into FauxRequest
-                       throw new MWException( "Sessions can only be imported in cli mode." );
-               } elseif ( !strlen( $params['sessionId'] ) ) {
-                       throw new MWException( "No session ID was specified." );
+               if ( session_id() != '' && strlen( $params['sessionId'] ) ) {
+                       // Sanity check to avoid sending random cookies for the wrong users.
+                       // This method should only called by CLI scripts or by HTTP job runners.
+                       throw new MWException( "Sessions can only be imported when none is active." );
+               } elseif ( !IP::isValid( $params['ip'] ) ) {
+                       throw new MWException( "Invalid client IP address '{$params['ip']}'." );
                }
 
                if ( $params['userId'] ) { // logged-in user
@@ -491,13 +508,11 @@ class RequestContext implements IContextSource {
                        if ( !$user->getId() ) {
                                throw new MWException( "No user with ID '{$params['userId']}'." );
                        }
-               } elseif ( !IP::isValid( $params['ip'] ) ) {
-                       throw new MWException( "Could not load user '{$params['ip']}'." );
                } else { // anon user
                        $user = User::newFromName( $params['ip'], false );
                }
 
-               $importSessionFunction = function ( User $user, array $params ) {
+               $importSessionFunc = function ( User $user, array $params ) {
                        global $wgRequest, $wgUser;
 
                        $context = RequestContext::getMain();
@@ -530,12 +545,19 @@ class RequestContext implements IContextSource {
                // Stash the old session and load in the new one
                $oUser = self::getMain()->getUser();
                $oParams = self::getMain()->exportSession();
-               $importSessionFunction( $user, $params );
+               $oRequest = self::getMain()->getRequest();
+               $importSessionFunc( $user, $params );
 
                // Set callback to save and close the new session and reload the old one
-               return new ScopedCallback( function () use ( $importSessionFunction, $oUser, $oParams ) {
-                       $importSessionFunction( $oUser, $oParams );
-               } );
+               return new ScopedCallback(
+                       function () use ( $importSessionFunc, $oUser, $oParams, $oRequest ) {
+                               global $wgRequest;
+                               $importSessionFunc( $oUser, $oParams );
+                               // Restore the exact previous Request object (instead of leaving FauxRequest)
+                               RequestContext::getMain()->setRequest( $oRequest );
+                               $wgRequest = RequestContext::getMain()->getRequest(); // b/c
+                       }
+               );
        }
 
        /**
index a46ee1c..34132aa 100644 (file)
@@ -272,9 +272,20 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * Either a short hexidecimal string if a transaction is active or ""
         *
         * @var string
+        * @see DatabaseBase::mTrxLevel
         */
        protected $mTrxShortId = '';
 
+       /**
+        * The UNIX time that the transaction started. Callers can assume that if
+        * snapshot isolation is used, then the data is *at least* up to date to that
+        * point (possibly more up-to-date since the first SELECT defines the snapshot).
+        *
+        * @var float|null
+        * @see DatabaseBase::mTrxLevel
+        */
+       private $mTrxTimestamp = null;
+
        /**
         * Remembers the function name given for starting the most recent transaction via begin().
         * Used to provide additional context for error reporting.
@@ -419,6 +430,19 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                return $this->mTrxLevel;
        }
 
+       /**
+        * Get the UNIX timestamp of the time that the transaction was established
+        *
+        * This can be used to reason about the staleness of SELECT data
+        * in REPEATABLE-READ transaction isolation level.
+        *
+        * @return float|null Returns null if there is not active transaction
+        * @since 1.25
+        */
+       public function trxTimestamp() {
+               return $this->mTrxLevel ? $this->mTrxTimestamp : null;
+       }
+
        /**
         * Get/set the number of errors logged. Only useful when errors are ignored
         * @param int $count The count to set, or omitted to leave it unchanged.
@@ -679,8 +703,6 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         *   - DBO_DEBUG: output some debug info (same as debug())
         *   - DBO_NOBUFFER: don't buffer results (inverse of bufferResults())
         *   - DBO_TRX: automatically start transactions
-        *   - DBO_DEFAULT: automatically sets DBO_TRX if not in command line mode
-        *       and removes it in command line mode
         *   - DBO_PERSISTENT: use persistant database connection
         * @return bool
         */
@@ -1095,7 +1117,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                # Keep track of whether the transaction has write queries pending
                if ( $this->mTrxLevel && !$this->mTrxDoneWrites && $this->isWriteQuery( $sql ) ) {
                        $this->mTrxDoneWrites = true;
-                       Profiler::instance()->transactionWritingIn(
+                       Profiler::instance()->getTransactionProfiler()->transactionWritingIn(
                                $this->mServer, $this->mDBname, $this->mTrxShortId );
                }
 
@@ -1140,6 +1162,14 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        throw new DBUnexpectedError( $this, "DB connection was already closed." );
                }
 
+               # Log the query time and feed it into the DB trx profiler
+               $queryStartTime = microtime( true );
+               $queryProfile = new ScopedCallback( function() use ( $queryStartTime, $queryProf ) {
+                       $elapsed = microtime( true ) - $queryStartTime;
+                       $trxProfiler = Profiler::instance()->getTransactionProfiler();
+                       $trxProfiler->recordFunctionCompletion( $queryProf, $elapsed );
+               } );
+
                # Do the query and handle errors
                $ret = $this->doQuery( $commentedSql );
 
@@ -1754,7 +1784,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
        }
 
        /**
-        * Estimate rows in dataset.
+        * Estimate the number of rows in dataset
         *
         * MySQL allows you to estimate the number of rows that would be returned
         * by a SELECT query, using EXPLAIN SELECT. The estimate is provided using
@@ -1773,8 +1803,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @param array $options Options for select
         * @return int Row count
         */
-       public function estimateRowCount( $table, $vars = '*', $conds = '',
-               $fname = __METHOD__, $options = array()
+       public function estimateRowCount(
+               $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array()
        ) {
                $rows = 0;
                $res = $this->select( $table, array( 'rowcount' => 'COUNT(*)' ), $conds, $fname, $options );
@@ -1787,6 +1817,36 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                return $rows;
        }
 
+       /**
+        * Get the number of rows in dataset
+        *
+        * This is useful when trying to do COUNT(*) but with a LIMIT for performance.
+        *
+        * Takes the same arguments as DatabaseBase::select().
+        *
+        * @param string $table Table name
+        * @param string $vars Unused
+        * @param array|string $conds Filters on the table
+        * @param string $fname Function name for profiling
+        * @param array $options Options for select
+        * @return int Row count
+        * @since 1.24
+        */
+       public function selectRowCount(
+               $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array()
+       ) {
+               $rows = 0;
+               $sql = $this->selectSQLText( $table, '1', $conds, $fname, $options );
+               $res = $this->query( "SELECT COUNT(*) AS rowcount FROM ($sql) tmp_count" );
+
+               if ( $res ) {
+                       $row = $this->fetchRow( $res );
+                       $rows = ( isset( $row['rowcount'] ) ) ? $row['rowcount'] : 0;
+               }
+
+               return $rows;
+       }
+
        /**
         * Removes most variables from an SQL query and replaces them with X or N for numbers.
         * It's only slightly flawed. Don't use for anything important.
@@ -2294,7 +2354,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                # Split database and table into proper variables.
                # We reverse the explode so that database.table and table both output
                # the correct table.
-               $dbDetails = explode( '.', $name, 2 );
+               $dbDetails = explode( '.', $name, 3 );
                if ( count( $dbDetails ) == 3 ) {
                        list( $database, $schema, $table ) = $dbDetails;
                        # We don't want any prefix added in this case
@@ -3472,7 +3532,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        $this->runOnTransactionPreCommitCallbacks();
                        $this->doCommit( $fname );
                        if ( $this->mTrxDoneWrites ) {
-                               Profiler::instance()->transactionWritingOut(
+                               Profiler::instance()->getTransactionProfiler()->transactionWritingOut(
                                        $this->mServer, $this->mDBname, $this->mTrxShortId );
                        }
                        $this->runOnTransactionIdleCallbacks();
@@ -3484,6 +3544,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                }
 
                $this->doBegin( $fname );
+               $this->mTrxTimestamp = microtime( true );
                $this->mTrxFname = $fname;
                $this->mTrxDoneWrites = false;
                $this->mTrxAutomatic = false;
@@ -3551,7 +3612,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                $this->runOnTransactionPreCommitCallbacks();
                $this->doCommit( $fname );
                if ( $this->mTrxDoneWrites ) {
-                       Profiler::instance()->transactionWritingOut(
+                       Profiler::instance()->getTransactionProfiler()->transactionWritingOut(
                                $this->mServer, $this->mDBname, $this->mTrxShortId );
                }
                $this->runOnTransactionIdleCallbacks();
@@ -3609,7 +3670,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                $this->mTrxPreCommitCallbacks = array(); // cancel
                $this->mTrxAtomicLevels = new SplStack;
                if ( $this->mTrxDoneWrites ) {
-                       Profiler::instance()->transactionWritingOut(
+                       Profiler::instance()->getTransactionProfiler()->transactionWritingOut(
                                $this->mServer, $this->mDBname, $this->mTrxShortId );
                }
        }
index 8229c99..2dfec41 100644 (file)
@@ -306,7 +306,7 @@ EOT;
                        }
                }
 
-               $cache = HTMLFileCache::newFromTitle( $t, 'view' );
+               $cache = new HTMLFileCache( $t, 'view' );
                if ( $cache->isCached() ) {
                        return $cache->fetchText();
                } else {
index 3a4bb27..669525a 100644 (file)
@@ -228,7 +228,7 @@ class DatabaseMssql extends DatabaseBase {
 
                                if ( $success ) {
                                        $this->mAffectedRows = 0;
-                                       return true;
+                                       return $stmt;
                                }
                        }
                }
@@ -415,10 +415,8 @@ class DatabaseMssql extends DatabaseBase {
                        }
                        $this->mScrollableCursor = true;
                        $this->mPrepareStatements = true;
-
                        return $ret;
                }
-
                return $this->query( $sql, $fname );
        }
 
@@ -614,6 +612,13 @@ class DatabaseMssql extends DatabaseBase {
                // Determine binary/varbinary fields so we can encode data as a hex string like 0xABCDEF
                $binaryColumns = $this->getBinaryColumns( $table );
 
+               // INSERT IGNORE is not supported by SQL Server
+               // remove IGNORE from options list and set ignore flag to true
+               if ( in_array( 'IGNORE', $options ) ) {
+                       $options = array_diff( $options, array( 'IGNORE' ) );
+                       $this->mIgnoreDupKeyErrors = true;
+               }
+
                foreach ( $arrToInsert as $a ) {
                        // start out with empty identity column, this is so we can return
                        // it as a result of the insert logic
@@ -645,14 +650,6 @@ class DatabaseMssql extends DatabaseBase {
 
                        $keys = array_keys( $a );
 
-                       // INSERT IGNORE is not supported by SQL Server
-                       // remove IGNORE from options list and set ignore flag to true
-                       $ignoreClause = false;
-                       if ( in_array( 'IGNORE', $options ) ) {
-                               $options = array_diff( $options, array( 'IGNORE' ) );
-                               $this->mIgnoreDupKeyErrors = true;
-                       }
-
                        // Build the actual query
                        $sql = $sqlPre . 'INSERT ' . implode( ' ', $options ) .
                                " INTO $table (" . implode( ',', $keys ) . ") $identityClause VALUES (";
@@ -691,15 +688,16 @@ class DatabaseMssql extends DatabaseBase {
                                throw $e;
                        }
                        $this->mScrollableCursor = true;
-                       $this->mIgnoreDupKeyErrors = false;
 
                        if ( !is_null( $identity ) ) {
                                // then we want to get the identity column value we were assigned and save it off
                                $row = $ret->fetchObject();
-                               $this->mInsertId = $row->$identity;
+                               if ( is_object( $row ) ) {
+                                       $this->mInsertId = $row->$identity;
+                               }
                        }
                }
-
+               $this->mIgnoreDupKeyErrors = false;
                return $ret;
        }
 
@@ -921,7 +919,7 @@ class DatabaseMssql extends DatabaseBase {
                        }
                        if ( !$s2 ) {
                                // no ORDER BY
-                               $overOrder = 'ORDER BY 1';
+                               $overOrder = 'ORDER BY (SELECT 1)';
                        } else {
                                if ( !isset( $orderby[2] ) || !$orderby[2] ) {
                                        // don't need to strip it out if we're using a FOR XML clause
@@ -955,12 +953,8 @@ class DatabaseMssql extends DatabaseBase {
                // Matches: LIMIT {[offset,] row_count | row_count OFFSET offset}
                $pattern = '/\bLIMIT\s+((([0-9]+)\s*,\s*)?([0-9]+)(\s+OFFSET\s+([0-9]+))?)/i';
                if ( preg_match( $pattern, $sql, $matches ) ) {
-                       // row_count = $matches[4]
                        $row_count = $matches[4];
-                       // offset = $matches[3] OR $matches[6]
-                       $offset = $matches[3] or
-                       $offset = $matches[6] or
-                       $offset = false;
+                       $offset = $matches[3] ?: $matches[6] ?: false;
 
                        // strip the matching LIMIT clause out
                        $sql = str_replace( $matches[0], '', $sql );
index dc4a67d..823d9b6 100644 (file)
@@ -142,13 +142,6 @@ class DatabaseMysql extends DatabaseMysqlBase {
                return mysql_select_db( $db, $this->mConn );
        }
 
-       /**
-        * @return string
-        */
-       function getServerVersion() {
-               return mysql_get_server_info( $this->mConn );
-       }
-
        protected function mysqlFreeResult( $res ) {
                return mysql_free_result( $res );
        }
index ba0f39f..2008f4d 100644 (file)
@@ -38,6 +38,9 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
 
        protected $mFakeMaster = false;
 
+       /** @var string|null */
+       private $serverVersion = null;
+
        /**
         * @return string
         */
@@ -763,9 +766,9 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
         * @return string
         */
        public function getSoftwareLink() {
-               // MariaDB includes its name in its version string (sent when the connection is opened),
-               // and this is how MariaDB's version of the mysql command-line client identifies MariaDB
-               // servers (see the mariadb_connection() function in libmysql/libmysql.c).
+               // MariaDB includes its name in its version string; this is how MariaDB's version of
+               // the mysql command-line client identifies MariaDB servers (see mariadb_connection()
+               // in libmysql/libmysql.c).
                $version = $this->getServerVersion();
                if ( strpos( $version, 'MariaDB' ) !== false || strpos( $version, '-maria-' ) !== false ) {
                        return '[{{int:version-db-mariadb-url}} MariaDB]';
@@ -777,6 +780,19 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                return '[{{int:version-db-mysql-url}} MySQL]';
        }
 
+       /**
+        * @return string
+        */
+       public function getServerVersion() {
+               // Not using mysql_get_server_info() or similar for consistency: in the handshake,
+               // MariaDB 10 adds the prefix "5.5.5-", and only some newer client libraries strip
+               // it off (see RPL_VERSION_HACK in include/mysql_com.h).
+               if ( $this->serverVersion === null ) {
+                       $this->serverVersion = $this->selectField( '', 'VERSION()', '', __METHOD__ );
+               }
+               return $this->serverVersion;
+       }
+
        /**
         * @param array $options
         */
index 2ce6307..e9c4b39 100644 (file)
@@ -58,14 +58,22 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                }
 
                // Other than mysql_connect, mysqli_real_connect expects an explicit port
-               // parameter. So we need to parse the port out of $realServer
+               // and socket parameters. So we need to parse the port and socket out of
+               // $realServer
                $port = null;
+               $socket = null;
                $hostAndPort = IP::splitHostAndPort( $realServer );
                if ( $hostAndPort ) {
                        $realServer = $hostAndPort[0];
                        if ( $hostAndPort[1] ) {
                                $port = $hostAndPort[1];
                        }
+               } elseif ( substr_count( $realServer, ':' ) == 1 ) {
+                       // If we have a colon and something that's not a port number
+                       // inside the hostname, assume it's the socket location
+                       $hostAndSocket = explode( ':', $realServer );
+                       $realServer = $hostAndSocket[0];
+                       $socket = $hostAndSocket[1];
                }
 
                $connFlags = 0;
@@ -90,7 +98,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                $mysqli->options( MYSQLI_OPT_CONNECT_TIMEOUT, 3 );
 
                if ( $mysqli->real_connect( $realServer, $this->mUser,
-                       $this->mPassword, $this->mDBname, $port, null, $connFlags )
+                       $this->mPassword, $this->mDBname, $port, $socket, $connFlags )
                ) {
                        return $mysqli;
                }
@@ -157,13 +165,6 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                return $this->mConn->select_db( $db );
        }
 
-       /**
-        * @return string
-        */
-       function getServerVersion() {
-               return $this->mConn->server_info;
-       }
-
        /**
         * @param mysqli $res
         * @return bool
index 9a03a33..dd2e813 100644 (file)
@@ -873,6 +873,9 @@ class DatabaseSqlite extends DatabaseBase {
                } elseif ( preg_match( '/^\s*DROP INDEX/i', $s ) ) {
                        // DROP INDEX is database-wide, not table-specific, so no ON <table> clause.
                        $s = preg_replace( '/\sON\s+[^\s]*/i', '', $s );
+               } elseif ( preg_match( '/^\s*INSERT IGNORE\b/i', $s ) ) {
+                       // INSERT IGNORE --> INSERT OR IGNORE
+                       $s = preg_replace( '/^\s*INSERT IGNORE\b/i', 'INSERT OR IGNORE', $s );
                }
 
                return $s;
index 4dc693a..6e262e8 100644 (file)
@@ -442,10 +442,11 @@ interface IORMTable {
         * Takes an array of field names with prefix and returns the unprefixed equivalent.
         *
         * @since 1.20
+        * @deprecated since 1.25, will be removed
         *
-        * @param array $fieldNames
+        * @param string[] $fieldNames
         *
-        * @return array
+        * @return string[]
         */
        public function unprefixFieldNames( array $fieldNames );
 
@@ -453,6 +454,7 @@ interface IORMTable {
         * Takes a field name with prefix and returns the unprefixed equivalent.
         *
         * @since 1.20
+        * @deprecated since 1.25, will be removed
         *
         * @param string $fieldName
         *
index db4ed60..eeb2fec 100644 (file)
  * @ingroup Database
  */
 class LoadBalancer {
-       private $mServers, $mConns, $mLoads, $mGroupLoads;
+       /** @var array Map of (server index => server config array) */
+       private $mServers;
+       /** @var array Map of (local/foreignUsed/foreignFree => server index => DatabaseBase array) */
+       private $mConns;
+       /** @var array Map of (server index => weight) */
+       private $mLoads;
+       /** @var array Map of (group => server index => weight) */
+       private $mGroupLoads;
+       /** @var bool Whether to disregard slave lag as a factor in slave selection */
+       private $mAllowLagged;
+       /** @var integer Seconds to spend waiting on slave lag to resolve */
+       private $mWaitTimeout;
+
+       /** @var array LBFactory information */
+       private $mParentInfo;
+       /** @var string The LoadMonitor subclass name */
+       private $mLoadMonitorClass;
+       /** @var LoadMonitor */
+       private $mLoadMonitor;
 
        /** @var bool|DatabaseBase Database connection that caused a problem */
        private $mErrorConnection;
-       private $mReadIndex, $mAllowLagged;
-
+       /** @var integer The generic (not query grouped) slave index (of $mServers) */
+       private $mReadIndex;
        /** @var bool|DBMasterPos False if not set */
        private $mWaitForPos;
-
-       private $mWaitTimeout;
-       private $mLaggedSlaveMode, $mLastError = 'Unknown error';
-       private $mParentInfo, $mLagTimes;
-       private $mLoadMonitorClass, $mLoadMonitor;
+       /** @var bool Whether the generic reader fell back to a lagged slave */
+       private $mLaggedSlaveMode;
+       /** @var string The last DB selection or connection error */
+       private $mLastError = 'Unknown error';
+       /** @var ProcessCacheLRU */
+       private $mProcCache;
 
        /**
         * @param array $params Array with keys:
@@ -89,6 +108,8 @@ class LoadBalancer {
                                }
                        }
                }
+
+               $this->mProcCache = new ProcessCacheLRU( 30 );
        }
 
        /**
@@ -294,20 +315,6 @@ class LoadBalancer {
                return $i;
        }
 
-       /**
-        * Wait for a specified number of microseconds, and return the period waited
-        * @param int $t
-        * @return int
-        */
-       function sleep( $t ) {
-               wfProfileIn( __METHOD__ );
-               wfDebug( __METHOD__ . ": waiting $t us\n" );
-               usleep( $t );
-               wfProfileOut( __METHOD__ );
-
-               return $t;
-       }
-
        /**
         * Set the master wait position
         * If a DB_SLAVE connection has been opened already, waits
@@ -375,7 +382,9 @@ class LoadBalancer {
         * @return bool
         */
        protected function doWait( $index, $open = false, $timeout = null ) {
-               # Find a connection to wait on
+               $close = false; // close the connection afterwards
+
+               # Find a connection to wait on, creating one if needed and allowed
                $conn = $this->getAnyOpenConnection( $index );
                if ( !$conn ) {
                        if ( !$open ) {
@@ -389,6 +398,9 @@ class LoadBalancer {
 
                                        return false;
                                }
+                               // Avoid connection spam in waitForAll() when connections
+                               // are made just for the sake of doing this lag check.
+                               $close = true;
                        }
                }
 
@@ -399,13 +411,17 @@ class LoadBalancer {
                if ( $result == -1 || is_null( $result ) ) {
                        # Timed out waiting for slave, use master instead
                        wfDebug( __METHOD__ . ": Timed out waiting for slave #$index pos {$this->mWaitForPos}\n" );
-
-                       return false;
+                       $ok = false;
                } else {
                        wfDebug( __METHOD__ . ": Done\n" );
+                       $ok = true;
+               }
 
-                       return true;
+               if ( $close ) {
+                       $this->closeConnection( $conn );
                }
+
+               return $ok;
        }
 
        /**
@@ -639,7 +655,9 @@ class LoadBalancer {
                        $conn = reset( $this->mConns['foreignFree'][$i] );
                        $oldWiki = key( $this->mConns['foreignFree'][$i] );
 
-                       if ( !$conn->selectDB( $dbName ) ) {
+                       // The empty string as a DB name means "don't care".
+                       // DatabaseMysqlBase::open() already handle this on connection.
+                       if ( $dbName !== '' && !$conn->selectDB( $dbName ) ) {
                                $this->mLastError = "Error selecting database $dbName on server " .
                                        $conn->getServer() . " from client host " . wfHostname() . "\n";
                                $this->mErrorConnection = $conn;
@@ -1052,7 +1070,8 @@ class LoadBalancer {
        }
 
        /**
-        * Get the hostname and lag time of the most-lagged slave.
+        * Get the hostname and lag time of the most-lagged slave
+        *
         * This is useful for maintenance scripts that need to throttle their updates.
         * May attempt to open connections to slaves on the default DB. If there is
         * no lag, the maximum lag will be reported as -1.
@@ -1065,67 +1084,45 @@ class LoadBalancer {
                $host = '';
                $maxIndex = 0;
 
-               if ( $this->getServerCount() <= 1 ) { // no replication = no lag
-                       return array( $host, $maxLag, $maxIndex );
+               if ( $this->getServerCount() <= 1 ) {
+                       return array( $host, $maxLag, $maxIndex ); // no replication = no lag
                }
 
-               // Try to get the max lag info from the server cache
-               $key = 'loadbalancer:maxlag:cluster:' . $this->mServers[0]['host'];
-               $cache = ObjectCache::newAccelerator( array(), 'hash' );
-               $maxLagInfo = $cache->get( $key ); // (host, lag, index)
-
-               // Fallback to connecting to each slave and getting the lag
-               if ( !$maxLagInfo ) {
-                       foreach ( $this->mServers as $i => $conn ) {
-                               if ( $i == $this->getWriterIndex() ) {
-                                       continue; // nothing to check
-                               }
-                               $conn = false;
-                               if ( $wiki === false ) {
-                                       $conn = $this->getAnyOpenConnection( $i );
-                               }
-                               if ( !$conn ) {
-                                       $conn = $this->openConnection( $i, $wiki );
-                               }
-                               if ( !$conn ) {
-                                       continue;
-                               }
-                               $lag = $conn->getLag();
-                               if ( $lag > $maxLag ) {
-                                       $maxLag = $lag;
-                                       $host = $this->mServers[$i]['host'];
-                                       $maxIndex = $i;
-                               }
+               $lagTimes = $this->getLagTimes( $wiki );
+               foreach ( $lagTimes as $i => $lag ) {
+                       if ( $lag > $maxLag ) {
+                               $maxLag = $lag;
+                               $host = $this->mServers[$i]['host'];
+                               $maxIndex = $i;
                        }
-                       $maxLagInfo = array( $host, $maxLag, $maxIndex );
-                       $cache->set( $key, $maxLagInfo, 5 );
                }
 
-               return $maxLagInfo;
+               return array( $host, $maxLag, $maxIndex );
        }
 
        /**
         * Get lag time for each server
-        * Results are cached for a short time in memcached, and indefinitely in the process cache
+        *
+        * Results are cached for a short time in memcached/process cache
         *
         * @param string|bool $wiki
-        * @return array
+        * @return array Map of (server index => seconds)
         */
        function getLagTimes( $wiki = false ) {
-               # Try process cache
-               if ( isset( $this->mLagTimes ) ) {
-                       return $this->mLagTimes;
+               if ( $this->getServerCount() <= 1 ) {
+                       return array( 0 => 0 ); // no replication = no lag
                }
-               if ( $this->getServerCount() == 1 ) {
-                       # No replication
-                       $this->mLagTimes = array( 0 => 0 );
-               } else {
-                       # Send the request to the load monitor
-                       $this->mLagTimes = $this->getLoadMonitor()->getLagTimes(
-                               array_keys( $this->mServers ), $wiki );
+
+               if ( $this->mProcCache->has( 'slave_lag', 'times', 1 ) ) {
+                       return $this->mProcCache->get( 'slave_lag', 'times' );
                }
 
-               return $this->mLagTimes;
+               # Send the request to the load monitor
+               $times = $this->getLoadMonitor()->getLagTimes( array_keys( $this->mServers ), $wiki );
+
+               $this->mProcCache->set( 'slave_lag', 'times', $times );
+
+               return $times;
        }
 
        /**
@@ -1151,15 +1148,15 @@ class LoadBalancer {
        }
 
        /**
-        * Clear the cache for getLagTimes
+        * Clear the cache for slag lag delay times
         */
        function clearLagTimeCache() {
-               $this->mLagTimes = null;
+               $this->mProcCache->clear( 'slave_lag' );
        }
 }
 
 /**
- * Helper class to handle automatically marking connectons as reusable (via RAII pattern)
+ * Helper class to handle automatically marking connections as reusable (via RAII pattern)
  * as well handling deferring the actual network connection until the handle is used
  *
  * @ingroup Database
index 7281485..b694a6f 100644 (file)
@@ -48,7 +48,7 @@ interface LoadMonitor {
         * @param array $serverIndexes
         * @param string $wiki
         *
-        * @return array
+        * @return array Map of (server index => seconds)
         */
        public function getLagTimes( $serverIndexes, $wiki );
 }
index 2f898b7..b22df39 100644 (file)
@@ -129,6 +129,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
         * Gets the db field prefix.
         *
         * @since 1.20
+        * @deprecated since 1.25, use the $this->fieldPrefix property instead
         *
         * @return string
         */
@@ -770,33 +771,54 @@ class ORMTable extends DBAccessBase implements IORMTable {
         * @return string
         */
        public function getPrefixedField( $field ) {
-               return $this->getFieldPrefix() . $field;
+               return $this->fieldPrefix . $field;
        }
 
        /**
         * Takes an array of field names with prefix and returns the unprefixed equivalent.
         *
         * @since 1.20
+        * @deprecated since 1.25, will be removed
         *
-        * @param array $fieldNames
+        * @param string[] $fieldNames
         *
-        * @return array
+        * @return string[]
         */
        public function unprefixFieldNames( array $fieldNames ) {
-               return array_map( array( $this, 'unprefixFieldName' ), $fieldNames );
+               wfDeprecated( __METHOD__, '1.25' );
+
+               return $this->stripFieldPrefix( $fieldNames );
+       }
+
+       /**
+        * Takes an array of field names with prefix and returns the unprefixed equivalent.
+        *
+        * @param string[] $fieldNames
+        *
+        * @return string[]
+        */
+       private function stripFieldPrefix( array $fieldNames ) {
+               $start = strlen( $this->fieldPrefix );
+
+               return array_map( function ( $fieldName ) use ( $start ) {
+                       return substr( $fieldName, $start );
+               }, $fieldNames );
        }
 
        /**
         * Takes a field name with prefix and returns the unprefixed equivalent.
         *
         * @since 1.20
+        * @deprecated since 1.25, will be removed
         *
         * @param string $fieldName
         *
         * @return string
         */
        public function unprefixFieldName( $fieldName ) {
-               return substr( $fieldName, strlen( $this->getFieldPrefix() ) );
+               wfDeprecated( __METHOD__, '1.25' );
+
+               return substr( $fieldName, strlen( $this->fieldPrefix ) );
        }
 
        /**
@@ -832,7 +854,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
                $result = (array)$result;
 
                $rawFields = array_combine(
-                       $this->unprefixFieldNames( array_keys( $result ) ),
+                       $this->stripFieldPrefix( array_keys( $result ) ),
                        array_values( $result )
                );
 
index 01e0ba0..ffc6b3b 100644 (file)
@@ -46,7 +46,7 @@ class MWDebug {
        protected static $debug = array();
 
        /**
-        * SQL statements of the databses queries.
+        * SQL statements of the database queries.
         *
         * @var array $query
         */
@@ -335,6 +335,28 @@ class MWDebug {
                        return -1;
                }
 
+               // Replace invalid UTF-8 chars with a square UTF-8 character
+               // This prevents json_encode from erroring out due to binary SQL data
+               $sql = preg_replace(
+                       '/(
+                               [\xC0-\xC1] # Invalid UTF-8 Bytes
+                               | [\xF5-\xFF] # Invalid UTF-8 Bytes
+                               | \xE0[\x80-\x9F] # Overlong encoding of prior code point
+                               | \xF0[\x80-\x8F] # Overlong encoding of prior code point
+                               | [\xC2-\xDF](?![\x80-\xBF]) # Invalid UTF-8 Sequence Start
+                               | [\xE0-\xEF](?![\x80-\xBF]{2}) # Invalid UTF-8 Sequence Start
+                               | [\xF0-\xF4](?![\x80-\xBF]{3}) # Invalid UTF-8 Sequence Start
+                               | (?<=[\x0-\x7F\xF5-\xFF])[\x80-\xBF] # Invalid UTF-8 Sequence Middle
+                               | (?<![\xC2-\xDF]|[\xE0-\xEF]|[\xE0-\xEF][\x80-\xBF]|[\xF0-\xF4]
+                                  |[\xF0-\xF4][\x80-\xBF]|[\xF0-\xF4][\x80-\xBF]{2})[\x80-\xBF] # Overlong Sequence
+                               | (?<=[\xE0-\xEF])[\x80-\xBF](?![\x80-\xBF]) # Short 3 byte sequence
+                               | (?<=[\xF0-\xF4])[\x80-\xBF](?![\x80-\xBF]{2}) # Short 4 byte sequence
+                               | (?<=[\xF0-\xF4][\x80-\xBF])[\x80-\xBF](?![\x80-\xBF]) # Short 4 byte sequence (2)
+                       )/x',
+                       '■',
+                       $sql
+               );
+
                self::$query[] = array(
                        'sql' => $sql,
                        'function' => $function,
@@ -538,7 +560,8 @@ class MWDebug {
 
                return array(
                        'mwVersion' => $wgVersion,
-                       'phpVersion' => PHP_VERSION,
+                       'phpEngine' => wfIsHHVM() ? 'HHVM' : 'PHP',
+                       'phpVersion' => wfIsHHVM() ? HHVM_VERSION : PHP_VERSION,
                        'gitRevision' => GitInfo::headSHA1(),
                        'gitBranch' => GitInfo::currentBranch(),
                        'gitViewUrl' => GitInfo::headViewUrl(),
diff --git a/includes/debug/logger/Logger.php b/includes/debug/logger/Logger.php
new file mode 100644 (file)
index 0000000..f5d2445
--- /dev/null
@@ -0,0 +1,221 @@
+<?php
+/**
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+if ( !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 );
+}
+
+/**
+ * PSR-3 logging service.
+ *
+ * This class provides a service interface for logging system events. The
+ * MWLogger class itself is intended to be a thin wrapper around another PSR-3
+ * compliant logging library. Creation of MWLogger instances is managed via
+ * the MWLogger::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
+ * MWLogger::registerProvider() static method can be called at any time to
+ * change the service provider. If MWLogger::getInstance() is called before
+ * any service provider has been registered, it will attempt to use the
+ * $wgMWLoggerDefaultSpi global to bootstrap MWLoggerSpi registration.
+ * $wgMWLoggerDefaultSpi can either be the name of a class implementing the
+ * MWLoggerSpi interface with a zero argument constructor or a callable that
+ * will return an MWLoggerSpi instance.
+ *
+ * @see MWLoggerSpi
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class MWLogger implements \Psr\Log\LoggerInterface {
+
+       /**
+        * Service provider.
+        * @var MWLoggerSpi $spi
+        */
+       protected static $spi;
+
+
+       /**
+        * Wrapped PSR-3 logger instance.
+        *
+        * @var \Psr\Log\LoggerInterface $delegate
+        */
+       protected $delegate;
+
+
+       /**
+        * @param \Psr\Log\LoggerInterface $logger
+        */
+       public function __construct( \Psr\Log\LoggerInterface $logger ) {
+               $this->delegate = $logger;
+       }
+
+
+       /**
+        * Logs with an arbitrary level.
+        *
+        * @param string|int $level
+        * @param string $message
+        * @param array $context
+        */
+       public function log( $level, $message, array $context = array() ) {
+               $this->delegate->log( $level, $message, $context );
+       }
+
+
+       /**
+        * System is unusable.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function emergency( $message, array $context = array() ) {
+               $this->log( \Psr\Log\LogLevel::EMERGENCY, $message, $context );
+       }
+
+
+       /**
+        * Action must be taken immediately.
+        *
+        * Example: Entire website down, database unavailable, etc. This should
+        * trigger the SMS alerts and wake you up.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function alert( $message, array $context = array() ) {
+               $this->log( \Psr\Log\LogLevel::ALERT, $message, $context );
+       }
+
+
+       /**
+        * Critical conditions.
+        *
+        * Example: Application component unavailable, unexpected exception.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function critical( $message, array $context = array( ) ) {
+               $this->log( \Psr\Log\LogLevel::CRITICAL, $message, $context );
+       }
+
+
+       /**
+        * Runtime errors that do not require immediate action but should typically
+        * be logged and monitored.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function error( $message, array $context = array( ) ) {
+               $this->log( \Psr\Log\LogLevel::ERROR, $message, $context );
+       }
+
+
+       /**
+        * Exceptional occurrences that are not errors.
+        *
+        * Example: Use of deprecated APIs, poor use of an API, undesirable things
+        * that are not necessarily wrong.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function warning( $message, array $context = array() ) {
+               $this->log( \Psr\Log\LogLevel::WARNING, $message, $context );
+       }
+
+
+       /**
+        * Normal but significant events.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function notice( $message, array $context = array() ) {
+               $this->log( \Psr\Log\LogLevel::NOTICE, $message, $context );
+       }
+
+
+       /**
+        * Interesting events.
+        *
+        * Example: User logs in, SQL logs.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function info( $message, array $context = array() ) {
+               $this->log( \Psr\Log\LogLevel::INFO, $message, $context );
+       }
+
+
+       /**
+        * Detailed debug information.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function debug( $message, array $context = array() ) {
+               $this->log( \Psr\Log\LogLevel::DEBUG, $message, $context );
+       }
+
+
+       /**
+        * Register a service provider to create new MWLogger instances.
+        *
+        * @param MWLoggerSpi $provider Provider to register
+        */
+       public static function registerProvider( MWLoggerSpi $provider ) {
+               self::$spi = $provider;
+       }
+
+
+       /**
+        * Get a named logger instance from the currently configured logger factory.
+        *
+        * @param string $channel Logger channel (name)
+        * @return MWLogger
+        */
+       public static function getInstance( $channel ) {
+               if ( self::$spi === null ) {
+                       global $wgMWLoggerDefaultSpi;
+                       $provider = ObjectFactory::getObjectFromSpec(
+                               $wgMWLoggerDefaultSpi
+                       );
+                       self::registerProvider( $provider );
+               }
+
+               return self::$spi->getLogger( $channel );
+       }
+
+}
diff --git a/includes/debug/logger/NullSpi.php b/includes/debug/logger/NullSpi.php
new file mode 100644 (file)
index 0000000..33304fc
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+/**
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * MWLogger service provider that creates \Psr\Log\NullLogger instances.
+ * A NullLogger silently discards all log events sent to it.
+ *
+ * Usage:
+ * @code
+ * $wgMWLoggerDefaultSpi = array(
+ *   'class' => 'MWLoggerNullSpi',
+ * );
+ * @endcode
+ *
+ * @see MWLogger
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class MWLoggerNullSpi implements MWLoggerSpi {
+
+       /**
+        * @var \Psr\Log\NullLogger $singleton
+        */
+       protected $singleton;
+
+
+       public function __construct() {
+               $this->singleton = new \Psr\Log\NullLogger();
+       }
+
+
+       /**
+        * Get a logger instance.
+        *
+        * @param string $channel Logging channel
+        * @return MWLogger Logger instance
+        */
+       public function getLogger( $channel ) {
+               return $this->singleton;
+       }
+
+}
diff --git a/includes/debug/logger/Spi.php b/includes/debug/logger/Spi.php
new file mode 100644 (file)
index 0000000..7139856
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+/**
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Service provider interface for MWLogger implementation libraries.
+ *
+ * MediaWiki can be configured to use a class implementing this interface to
+ * create new MWLogger instances via either the $wgMWLoggerDefaultSpi global
+ * variable or code that constructs an instance and registeres it via the
+ * MWLogger::registerProvider() static method.
+ *
+ * @see MWLogger
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+interface MWLoggerSpi {
+
+       /**
+        * Get a logger instance.
+        *
+        * @param string $channel Logging channel
+        * @return MWLogger Logger instance
+        */
+       public function getLogger( $channel );
+
+}
diff --git a/includes/debug/logger/legacy/Logger.php b/includes/debug/logger/legacy/Logger.php
new file mode 100644 (file)
index 0000000..daf3f51
--- /dev/null
@@ -0,0 +1,359 @@
+<?php
+/**
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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 MWLogger
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class MWLoggerLegacyLogger extends \Psr\Log\AbstractLogger {
+
+       /**
+        * @var string $channel
+        */
+       protected $channel;
+
+
+       /**
+        * @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, $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 array $context
+        * @return bool True if message should be sent to disk/network, false
+        * otherwise
+        */
+       protected static function shouldEmit( $channel, $message, $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 ) && isset( $logConfig['sample'] ) ) {
+                               // Emit randomly with a 1 in 'sample' chance for each message.
+                               $shouldEmit = mt_rand( 1, $logConfig['sample'] ) === 1;
+
+                       } 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 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
+        */
+       protected 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 $text;
+       }
+
+
+       /**
+        * 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['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;
+       }
+
+
+       /**
+        * 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:' ) {
+                       # Needs the sockets extension
+                       if ( preg_match( '!^udp:(?://)?\[([0-9a-fA-F:]+)\]:(\d+)(?:/(.*))?$!', $file, $m ) ) {
+                               // IPv6 bracketed host
+                               $host = $m[1];
+                               $port = intval( $m[2] );
+                               $prefix = isset( $m[3] ) ? $m[3] : false;
+                               $domain = AF_INET6;
+                       } elseif ( preg_match( '!^udp:(?://)?([a-zA-Z0-9.-]+):(\d+)(?:/(.*))?$!', $file, $m ) ) {
+                               $host = $m[1];
+                               if ( !IP::isIPv4( $host ) ) {
+                                       $host = gethostbyname( $host );
+                               }
+                               $port = intval( $m[2] );
+                               $prefix = isset( $m[3] ) ? $m[3] : false;
+                               $domain = AF_INET;
+                       } else {
+                               throw new MWException( __METHOD__ . ': Invalid UDP specification' );
+                       }
+
+                       // Clean it up for the multiplexer
+                       if ( strval( $prefix ) !== '' ) {
+                               $text = preg_replace( '/^/m', $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 );
+                       }
+
+                       $sock = socket_create( $domain, SOCK_DGRAM, SOL_UDP );
+                       if ( !$sock ) {
+                               return;
+                       }
+
+                       socket_sendto( $sock, $text, strlen( $text ), 0, $host, $port );
+                       socket_close( $sock );
+               } 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
new file mode 100644 (file)
index 0000000..a3d34fa
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+/**
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * MWLogger service provider that creates MWLoggerLegacyLogger instances.
+ *
+ * Usage:
+ * @code
+ * $wgMWLoggerDefaultSpi = array(
+ *   'class' => 'MWLoggerLegacySpi',
+ * );
+ * @endcode
+ *
+ * @see MWLogger
+ * @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 MWLogger 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
new file mode 100644 (file)
index 0000000..02ab309
--- /dev/null
@@ -0,0 +1,212 @@
+<?php
+/**
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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;
+
+       /**
+        * 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 int $level Minimum logging level that will trigger handler
+        * @param bool $bubble Can handled meesages bubble up the handler stack?
+        */
+       public function __construct(
+               $stream, $level = \Monolog\Logger::DEBUG, $bubble = true
+       ) {
+               parent::__construct( $level, $bubble );
+               $this->uri = $stream;
+       }
+
+
+       /**
+        * 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->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;
+       }
+
+}
diff --git a/includes/debug/logger/monolog/Processor.php b/includes/debug/logger/monolog/Processor.php
new file mode 100644 (file)
index 0000000..a9f72c8
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+/**
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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/Spi.php b/includes/debug/logger/monolog/Spi.php
new file mode 100644 (file)
index 0000000..e514715
--- /dev/null
@@ -0,0 +1,242 @@
+<?php
+/**
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * MWLogger 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 MWLogger 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 MWLogger 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] = new MWLogger( $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
+        */
+       protected 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
+        */
+       protected function getHandler( $name ) {
+               if ( !isset( $this->singletons['handlers'][$name] ) ) {
+                       $spec = $this->config['handlers'][$name];
+                       $handler = ObjectFactory::getObjectFromSpec( $spec );
+                       $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
+        */
+       protected 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 7bfafee..97a17c3 100644 (file)
@@ -22,9 +22,6 @@
  * Class for handling updates to the site_stats table
  */
 class SiteStatsUpdate implements DeferrableUpdate {
-       /** @var int */
-       protected $views = 0;
-
        /** @var int */
        protected $edits = 0;
 
@@ -42,7 +39,6 @@ class SiteStatsUpdate implements DeferrableUpdate {
 
        // @todo deprecate this constructor
        function __construct( $views, $edits, $good, $pages = 0, $users = 0 ) {
-               $this->views = $views;
                $this->edits = $edits;
                $this->articles = $good;
                $this->pages = $pages;
@@ -100,7 +96,6 @@ class SiteStatsUpdate implements DeferrableUpdate {
                        }
                        $pd = $this->getPendingDeltas();
                        // Piggy-back the async deltas onto those of this stats update....
-                       $this->views += ( $pd['ss_total_views']['+'] - $pd['ss_total_views']['-'] );
                        $this->edits += ( $pd['ss_total_edits']['+'] - $pd['ss_total_edits']['-'] );
                        $this->articles += ( $pd['ss_good_articles']['+'] - $pd['ss_good_articles']['-'] );
                        $this->pages += ( $pd['ss_total_pages']['+'] - $pd['ss_total_pages']['-'] );
@@ -110,7 +105,6 @@ class SiteStatsUpdate implements DeferrableUpdate {
 
                // Build up an SQL query of deltas and apply them...
                $updates = '';
-               $this->appendUpdate( $updates, 'ss_total_views', $this->views );
                $this->appendUpdate( $updates, 'ss_total_edits', $this->edits );
                $this->appendUpdate( $updates, 'ss_good_articles', $this->articles );
                $this->appendUpdate( $updates, 'ss_total_pages', $this->pages );
@@ -160,7 +154,6 @@ class SiteStatsUpdate implements DeferrableUpdate {
        }
 
        protected function doUpdatePendingDeltas() {
-               $this->adjustPending( 'ss_total_views', $this->views );
                $this->adjustPending( 'ss_total_edits', $this->edits );
                $this->adjustPending( 'ss_good_articles', $this->articles );
                $this->adjustPending( 'ss_total_pages', $this->pages );
@@ -226,7 +219,7 @@ class SiteStatsUpdate implements DeferrableUpdate {
                global $wgMemc;
 
                $pending = array();
-               foreach ( array( 'ss_total_views', 'ss_total_edits',
+               foreach ( array( 'ss_total_edits',
                        'ss_good_articles', 'ss_total_pages', 'ss_users', 'ss_images' ) as $type
                ) {
                        // Get pending increments and pending decrements
index 9c58503..7ec61ea 100644 (file)
@@ -35,7 +35,7 @@ abstract class SqlDataUpdate extends DataUpdate {
        protected $mDb;
 
        /** @var array SELECT options to be used (array) */
-       protected $mOptions;
+       protected $mOptions = array();
 
        /** @var bool Whether a transaction is open on this object (internal use only!) */
        private $mHasTransaction;
@@ -51,16 +51,8 @@ abstract class SqlDataUpdate extends DataUpdate {
         *   transaction is already in progress, see beginTransaction() for details.
         */
        public function __construct( $withTransaction = true ) {
-               global $wgAntiLockFlags;
-
                parent::__construct();
 
-               if ( $wgAntiLockFlags & ALF_NO_LINK_LOCK ) {
-                       $this->mOptions = array();
-               } else {
-                       $this->mOptions = array( 'FOR UPDATE' );
-               }
-
                // @todo Get connection only when it's needed? Make sure that doesn't
                // break anything, especially transactions!
                $this->mDb = wfGetDB( DB_MASTER );
index 0dcff44..d4fc7a0 100644 (file)
@@ -51,41 +51,6 @@ class SquidUpdate {
                $this->urlArr = $urlArr;
        }
 
-       /**
-        * Create a SquidUpdate from the given Title object.
-        *
-        * The resulting SquidUpdate will purge the given Title's URLs as well as
-        * the pages that link to it. Capped at $wgMaxSquidPurgeTitles total URLs.
-        *
-        * @param Title $title
-        * @return SquidUpdate
-        */
-       public static function newFromLinksTo( Title $title ) {
-               global $wgMaxSquidPurgeTitles;
-               wfProfileIn( __METHOD__ );
-
-               # Get a list of URLs linking to this page
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( array( 'links', 'page' ),
-                       array( 'page_namespace', 'page_title' ),
-                       array(
-                               'pl_namespace' => $title->getNamespace(),
-                               'pl_title' => $title->getDBkey(),
-                               'pl_from=page_id' ),
-                       __METHOD__ );
-               $blurlArr = $title->getSquidURLs();
-               if ( $res->numRows() <= $wgMaxSquidPurgeTitles ) {
-                       foreach ( $res as $BL ) {
-                               $tobj = Title::makeTitle( $BL->page_namespace, $BL->page_title );
-                               $blurlArr[] = $tobj->getInternalURL();
-                       }
-               }
-
-               wfProfileOut( __METHOD__ );
-
-               return new SquidUpdate( $blurlArr );
-       }
-
        /**
         * Create a SquidUpdate from an array of Title objects, or a TitleArray object
         *
diff --git a/includes/deferred/ViewCountUpdate.php b/includes/deferred/ViewCountUpdate.php
deleted file mode 100644 (file)
index 8282295..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-/**
- * Update for the 'page_counter' field
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * Update for the 'page_counter' field, when $wgDisableCounters is false.
- *
- * Depending on $wgHitcounterUpdateFreq, this will directly increment the
- * 'page_counter' field or use the 'hitcounter' table and then collect the data
- * from that table to update the 'page_counter' field in a batch operation.
- */
-class ViewCountUpdate implements DeferrableUpdate {
-       /** @var int Page ID to increment the view count */
-       protected $id;
-
-       /**
-        * Constructor
-        *
-        * @param int $id Page ID to increment the view count
-        */
-       public function __construct( $id ) {
-               $this->id = intval( $id );
-       }
-
-       /**
-        * Run the update
-        */
-       public function doUpdate() {
-               global $wgHitcounterUpdateFreq;
-
-               $dbw = wfGetDB( DB_MASTER );
-
-               if ( $wgHitcounterUpdateFreq <= 1 || $dbw->getType() == 'sqlite' ) {
-                       $id = $this->id;
-                       $method = __METHOD__;
-                       $dbw->onTransactionIdle( function () use ( $dbw, $id, $method ) {
-                               try {
-                                       $dbw->update( 'page',
-                                               array( 'page_counter = page_counter + 1' ),
-                                               array( 'page_id' => $id ),
-                                               $method
-                                       );
-                               } catch ( DBError $e ) {
-                                       MWExceptionHandler::logException( $e );
-                               }
-                       } );
-                       return;
-               }
-
-               # Not important enough to warrant an error page in case of failure
-               try {
-                       // Since `hitcounter` is non-transactional, the contention is minimal
-                       $dbw->insert( 'hitcounter', array( 'hc_id' => $this->id ), __METHOD__ );
-                       $checkfreq = intval( $wgHitcounterUpdateFreq / 25 + 1 );
-                       if ( rand() % $checkfreq == 0 && $dbw->lastErrno() == 0 ) {
-                               $this->collect();
-                       }
-               } catch ( DBError $e ) {
-                       MWExceptionHandler::logException( $e );
-               }
-       }
-
-       protected function collect() {
-               global $wgHitcounterUpdateFreq;
-
-               $dbw = wfGetDB( DB_MASTER );
-
-               $rown = $dbw->selectField( 'hitcounter', 'COUNT(*)', array(), __METHOD__ );
-               if ( $rown < $wgHitcounterUpdateFreq ) {
-                       return;
-               }
-
-               wfProfileIn( __METHOD__ . '-collect' );
-               $old_user_abort = ignore_user_abort( true );
-
-               $dbType = $dbw->getType();
-               $tabletype = $dbType == 'mysql' ? "ENGINE=HEAP " : '';
-               $hitcounterTable = $dbw->tableName( 'hitcounter' );
-               $acchitsTable = $dbw->tableName( 'acchits' );
-               $pageTable = $dbw->tableName( 'page' );
-
-               $dbw->lockTables( array(), array( 'hitcounter' ), __METHOD__, false );
-               $dbw->query( "CREATE TEMPORARY TABLE $acchitsTable $tabletype AS " .
-                       "SELECT hc_id,COUNT(*) AS hc_n FROM $hitcounterTable " .
-                       'GROUP BY hc_id', __METHOD__ );
-               $dbw->delete( 'hitcounter', '*', __METHOD__ );
-               $dbw->unlockTables( __METHOD__ );
-
-               if ( $dbType == 'mysql' ) {
-                       $dbw->query( "UPDATE $pageTable,$acchitsTable SET page_counter=page_counter + hc_n " .
-                               'WHERE page_id = hc_id', __METHOD__ );
-               } else {
-                       $dbw->query( "UPDATE $pageTable SET page_counter=page_counter + hc_n " .
-                               "FROM $acchitsTable WHERE page_id = hc_id", __METHOD__ );
-               }
-               $dbw->query( "DROP TABLE $acchitsTable", __METHOD__ );
-
-               ignore_user_abort( $old_user_abort );
-               wfProfileOut( __METHOD__ . '-collect' );
-       }
-}
index ee918f3..dd5f3c7 100644 (file)
@@ -224,8 +224,11 @@ class DifferenceEngine extends ContextSource {
                }
 
                $out->setPageTitle( $this->msg( 'errorpagetitle' ) );
-               $out->addWikiMsg( 'difference-missing-revision',
-                       $this->getLanguage()->listToText( $missing ), count( $missing ) );
+               $msg = $this->msg( 'difference-missing-revision' )
+                       ->params( $this->getLanguage()->listToText( $missing ) )
+                       ->numParams( count( $missing ) )
+                       ->parseAsBlock();
+               $out->addHtml( $msg );
        }
 
        public function showDiffPage( $diffOnly = false ) {
@@ -310,11 +313,11 @@ class DifferenceEngine extends ContextSource {
                                                                'undoafter' => $this->mOldid,
                                                                'undo' => $this->mNewid
                                                        ) ),
-                                                       'title' => Linker::titleAttrib( 'undo' )
+                                                       'title' => Linker::titleAttrib( 'undo' ),
                                                ),
                                                $this->msg( 'editundo' )->text()
                                        );
-                                       $revisionTools[] = $undoLink;
+                                       $revisionTools['mw-diff-undo'] = $undoLink;
                                }
                        }
 
@@ -387,8 +390,14 @@ class DifferenceEngine extends ContextSource {
                wfRunHooks( 'DiffRevisionTools', array( $this->mNewRev, &$revisionTools, $this->mOldRev ) );
                $formattedRevisionTools = array();
                // Put each one in parentheses (poor man's button)
-               foreach ( $revisionTools as $tool ) {
-                       $formattedRevisionTools[] = $this->msg( 'parentheses' )->rawParams( $tool )->escaped();
+               foreach ( $revisionTools as $key => $tool ) {
+                       $toolClass = is_string( $key ) ? $key : 'mw-diff-tool';
+                       $element = Html::rawElement(
+                               'span',
+                               array( 'class' => $toolClass ),
+                               $this->msg( 'parentheses' )->rawParams( $tool )->escaped()
+                       );
+                       $formattedRevisionTools[] = $element;
                }
                $newRevisionHeader = $this->getRevisionHeader( $this->mNewRev, 'complete' ) .
                        ' ' . implode( ' ', $formattedRevisionTools );
@@ -1052,8 +1061,13 @@ class DifferenceEngine extends ContextSource {
 
                        $key = $title->quickUserCan( 'edit', $user ) ? 'editold' : 'viewsourceold';
                        $msg = $this->msg( $key )->escaped();
-                       $header .= ' ' . $this->msg( 'parentheses' )->rawParams(
-                               Linker::linkKnown( $title, $msg, array(), $editQuery ) )->plain();
+                       $editLink = $this->msg( 'parentheses' )->rawParams(
+                               Linker::linkKnown( $title, $msg, array( ), $editQuery ) )->plain();
+                       $header .= ' ' . Html::rawElement(
+                               'span',
+                               array( 'class' => 'mw-diff-edit' ),
+                               $editLink
+                       );
                        if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
                                $header = Html::rawElement(
                                        'span',
index 71917e1..1f1ba9c 100644 (file)
@@ -82,6 +82,8 @@ class MWExceptionHandler {
                        } else {
                                echo nl2br( htmlspecialchars( $message ) ) . "\n";
                        }
+
+                       self::logException( $e );
                }
        }
 
diff --git a/includes/exception/TimestampException.php b/includes/exception/TimestampException.php
new file mode 100644 (file)
index 0000000..b9c0c35
--- /dev/null
@@ -0,0 +1,7 @@
+<?php
+
+/**
+ * @since 1.20
+ */
+class TimestampException extends MWException {
+}
index 03ba0b2..02fca3d 100644 (file)
@@ -25,8 +25,9 @@
  * 'exception-nologin' as a title and 'exception-nologin-text' for the message.
  *
  * @note In order for this exception to redirect, the error message passed to the
- * constructor has to be explicitly added to LoginForm::validErrorMessages. Otherwise,
- * the user will just be shown the message rather than redirected.
+ * constructor has to be explicitly added to LoginForm::validErrorMessages or with
+ * the LoginFormValidErrorMessages hook. Otherwise, the user will just be shown the message
+ * rather than redirected.
  *
  * @par Example:
  * @code
@@ -52,7 +53,8 @@
 class UserNotLoggedIn extends ErrorPageError {
 
        /**
-        * @note The value of the $reasonMsg parameter must be put into LoginForm::validErrorMessages
+        * @note The value of the $reasonMsg parameter must be put into LoginForm::validErrorMessages or
+        * set with the LoginFormValidErrorMessages Hook.
         * if you want the user to be automatically redirected to the login form.
         *
         * @param string $reasonMsg A message key containing the reason for the error.
@@ -77,7 +79,7 @@ class UserNotLoggedIn extends ErrorPageError {
        public function report() {
                // If an unsupported message is used, don't try redirecting to Special:Userlogin,
                // since the message may not be compatible.
-               if ( !in_array( $this->msg, LoginForm::$validErrorMessages ) ) {
+               if ( !in_array( $this->msg, LoginForm::getValidErrorMessages() ) ) {
                        parent::report();
                }
 
index 5774a24..952bf63 100644 (file)
@@ -96,9 +96,6 @@ class ExternalStoreDB extends ExternalStoreMedium {
                if ( !$id ) {
                        throw new MWException( __METHOD__ . ': no insert ID' );
                }
-               if ( $dbw->getFlag( DBO_TRX ) ) {
-                       $dbw->commit( __METHOD__ );
-               }
 
                return "DB://$cluster/$id";
        }
@@ -134,7 +131,10 @@ class ExternalStoreDB extends ExternalStoreMedium {
                        wfDebug( "writable external store\n" );
                }
 
-               return $lb->getConnection( DB_SLAVE, array(), $wiki );
+               $db = $lb->getConnection( DB_SLAVE, array(), $wiki );
+               $db->clearFlag( DBO_TRX ); // sanity
+
+               return $db;
        }
 
        /**
@@ -147,7 +147,10 @@ class ExternalStoreDB extends ExternalStoreMedium {
                $wiki = isset( $this->params['wiki'] ) ? $this->params['wiki'] : false;
                $lb = $this->getLoadBalancer( $cluster );
 
-               return $lb->getConnection( DB_MASTER, array(), $wiki );
+               $db = $lb->getConnection( DB_MASTER, array(), $wiki );
+               $db->clearFlag( DBO_TRX ); // sanity
+
+               return $db;
        }
 
        /**
@@ -282,6 +285,10 @@ class ExternalStoreDB extends ExternalStoreMedium {
                }
        }
 
+       /**
+        * @param string $url
+        * @return array
+        */
        protected function parseURL( $url ) {
                $path = explode( '/', $url );
 
index 78810eb..8c0a61a 100644 (file)
@@ -135,19 +135,12 @@ abstract class FileBackend {
         */
        public function __construct( array $config ) {
                $this->name = $config['name'];
+               $this->wikiId = $config['wikiId']; // e.g. "my_wiki-en_"
                if ( !preg_match( '!^[a-zA-Z0-9-_]{1,255}$!', $this->name ) ) {
-                       throw new FileBackendException( "Backend name `{$this->name}` is invalid." );
-               }
-               if ( !isset( $config['wikiId'] ) ) {
-                       $config['wikiId'] = wfWikiID();
-                       wfDeprecated( __METHOD__ . ' called without "wikiID".', '1.23' );
+                       throw new FileBackendException( "Backend name '{$this->name}' is invalid." );
+               } elseif ( !is_string( $this->wikiId ) ) {
+                       throw new FileBackendException( "Backend wiki ID not provided for '{$this->name}'." );
                }
-               if ( isset( $config['lockManager'] ) && !is_object( $config['lockManager'] ) ) {
-                       $config['lockManager'] =
-                               LockManagerGroup::singleton( $config['wikiId'] )->get( $config['lockManager'] );
-                       wfDeprecated( __METHOD__ . ' called with non-object "lockManager".', '1.23' );
-               }
-               $this->wikiId = $config['wikiId']; // e.g. "my_wiki-en_"
                $this->lockManager = isset( $config['lockManager'] )
                        ? $config['lockManager']
                        : new NullLockManager( array() );
index f40ec46..625b9b4 100644 (file)
@@ -112,7 +112,7 @@ class SwiftFileBackend extends FileBackendStore {
                // Optional settings
                $this->authTTL = isset( $config['swiftAuthTTL'] )
                        ? $config['swiftAuthTTL']
-                       : 5 * 60; // some sane number
+                       : 15 * 60; // some sane number
                $this->swiftTempUrlKey = isset( $config['swiftTempUrlKey'] )
                        ? $config['swiftTempUrlKey']
                        : '';
index df8d2d4..762bc66 100644 (file)
@@ -72,9 +72,9 @@ abstract class LockManager {
        public function __construct( array $config ) {
                $this->domain = isset( $config['domain'] ) ? $config['domain'] : wfWikiID();
                if ( isset( $config['lockTTL'] ) ) {
-                       $this->lockTTL = max( 1, $config['lockTTL'] );
+                       $this->lockTTL = max( 5, $config['lockTTL'] );
                } elseif ( PHP_SAPI === 'cli' ) {
-                       $this->lockTTL = 2 * 3600;
+                       $this->lockTTL = 3600;
                } else {
                        $met = ini_get( 'max_execution_time' ); // this is 0 in CLI mode
                        $this->lockTTL = max( 5 * 60, 2 * (int)$met );
index 5929525..58245a5 100644 (file)
@@ -114,6 +114,9 @@ class FileRepo {
        /** @var string The URL of the repo's favicon, if any */
        protected $favicon;
 
+       /** @var bool Whether all zones should be private (e.g. private wiki repo) */
+       protected $isPrivate;
+
        /**
         * Factory functions for creating new files
         * Override these in the base class
@@ -269,7 +272,7 @@ class FileRepo {
         * @return string|bool
         */
        public function getZoneUrl( $zone, $ext = null ) {
-               if ( in_array( $zone, array( 'public', 'temp', 'thumb', 'transcoded' ) ) ) {
+               if ( in_array( $zone, array( 'public', 'thumb', 'transcoded' ) ) ) {
                        // standard public zones
                        if ( $ext !== null && isset( $this->zones[$zone]['urlsByExt'][$ext] ) ) {
                                // custom URL for extension/zone
@@ -283,7 +286,6 @@ class FileRepo {
                        case 'public':
                                return $this->url;
                        case 'temp':
-                               return "{$this->url}/temp";
                        case 'deleted':
                                return false; // no public URL
                        case 'thumb':
@@ -1305,7 +1307,10 @@ class FileRepo {
                list( , $container, ) = FileBackend::splitStoragePath( $path );
 
                $params = array( 'dir' => $path );
-               if ( $this->isPrivate || $container === $this->zones['deleted']['container'] ) {
+               if ( $this->isPrivate
+                       || $container === $this->zones['deleted']['container']
+                       || $container === $this->zones['temp']['container']
+               ) {
                        # Take all available measures to prevent web accessibility of new deleted
                        # directories, in case the user has not configured offline storage
                        $params = array( 'noAccess' => true, 'noListing' => true ) + $params;
@@ -1785,9 +1790,9 @@ class FileRepo {
        }
 
        /**
-        * Get an temporary FileRepo associated with this repo.
-        * Files will be created in the temp zone of this repo and
-        * thumbnails in a /temp subdirectory in thumb zone of this repo.
+        * Get a temporary private FileRepo associated with this repo.
+        *
+        * Files will be created in the temp zone of this repo.
         * It will have the same backend as this repo.
         *
         * @return TempFileRepo
@@ -1798,26 +1803,26 @@ class FileRepo {
                        'backend' => $this->backend,
                        'zones' => array(
                                'public' => array(
+                                       // Same place storeTemp() uses in the base repo, though
+                                       // the path hashing is mismatched, which is annoying.
                                        'container' => $this->zones['temp']['container'],
                                        'directory' => $this->zones['temp']['directory']
                                ),
                                'thumb' => array(
-                                       'container' => $this->zones['thumb']['container'],
-                                       'directory' => $this->zones['thumb']['directory'] == ''
-                                               ? 'temp'
-                                               : $this->zones['thumb']['directory'] . '/temp'
+                                       'container' => $this->zones['temp']['container'],
+                                       'directory' => $this->zones['temp']['directory'] == ''
+                                               ? 'thumb'
+                                               : $this->zones['temp']['directory'] . '/thumb'
                                ),
                                'transcoded' => array(
-                                       'container' => $this->zones['transcoded']['container'],
-                                       'directory' => $this->zones['transcoded']['directory'] == ''
-                                               ? 'temp'
-                                               : $this->zones['transcoded']['directory'] . '/temp'
+                                       'container' => $this->zones['temp']['container'],
+                                       'directory' => $this->zones['temp']['directory'] == ''
+                                               ? 'transcoded'
+                                               : $this->zones['temp']['directory'] . '/transcoded'
                                )
                        ),
-                       'url' => $this->getZoneUrl( 'temp' ),
-                       'thumbUrl' => $this->getZoneUrl( 'thumb' ) . '/temp',
-                       'transcodedUrl' => $this->getZoneUrl( 'transcoded' ) . '/temp',
-                       'hashLevels' => $this->hashLevels // performance
+                       'hashLevels' => $this->hashLevels, // performance
+                       'isPrivate' => true // all in temp zone
                ) );
        }
 
index 8bf9040..5b0d8e2 100644 (file)
@@ -264,6 +264,9 @@ class ArchivedFile {
                        // old row, populate from key
                        $this->sha1 = LocalRepo::getHashFromKey( $this->key );
                }
+               if ( !$this->title ) {
+                       $this->title = Title::makeTitleSafe( NS_FILE, $row->fa_name );
+               }
        }
 
        /**
@@ -272,6 +275,9 @@ class ArchivedFile {
         * @return Title
         */
        public function getTitle() {
+               if ( !$this->title ) {
+                       $this->load();
+               }
                return $this->title;
        }
 
@@ -572,6 +578,7 @@ class ArchivedFile {
        public function userCan( $field, User $user = null ) {
                $this->load();
 
-               return Revision::userCanBitfield( $this->deleted, $field, $user );
+               $title = $this->getTitle();
+               return Revision::userCanBitfield( $this->deleted, $field, $user, $title ? : null );
        }
 }
index 4fab33b..7563d64 100644 (file)
@@ -714,7 +714,7 @@ abstract class File {
         */
        function canRender() {
                if ( !isset( $this->canRender ) ) {
-                       $this->canRender = $this->getHandler() && $this->handler->canRender( $this );
+                       $this->canRender = $this->getHandler() && $this->handler->canRender( $this ) && $this->exists();
                }
 
                return $this->canRender;
@@ -1231,9 +1231,25 @@ abstract class File {
                        }
                }
 
+               // Thumbnailing a very large file could result in network saturation if
+               // everyone does it at once.
+               if ( $this->getSize() >= 1e7 ) { // 10MB
+                       $that = $this;
+                       $work = new PoolCounterWorkViaCallback( 'GetLocalFileCopy', sha1( $this->getName() ),
+                               array(
+                                       'doWork' => function () use ( $that ) {
+                                               return $that->getLocalRefPath();
+                                       }
+                               )
+                       );
+                       $srcPath = $work->execute();
+               } else {
+                       $srcPath = $this->getLocalRefPath();
+               }
+
                // Original file
                return array(
-                       'path' => $this->getLocalRefPath(),
+                       'path' => $srcPath,
                        'width' => $this->getWidth(),
                        'height' => $this->getHeight()
                );
@@ -1312,16 +1328,16 @@ abstract class File {
         * @return ThumbnailImage
         */
        function iconThumb() {
-               global $wgStylePath, $wgStyleDirectory;
+               global $wgResourceBasePath, $IP;
+               $assetsPath = "$wgResourceBasePath/resources/assets/file-type-icons/";
+               $assetsDirectory = "$IP/resources/assets/file-type-icons/";
 
                $try = array( 'fileicon-' . $this->getExtension() . '.png', 'fileicon.png' );
                foreach ( $try as $icon ) {
-                       $path = '/common/images/icons/' . $icon;
-                       $filepath = $wgStyleDirectory . $path;
-                       if ( file_exists( $filepath ) ) { // always FS
+                       if ( file_exists( $assetsDirectory . $icon ) ) { // always FS
                                $params = array( 'width' => 120, 'height' => 120 );
 
-                               return new ThumbnailImage( $this, $wgStylePath . $path, false, $params );
+                               return new ThumbnailImage( $this, $assetsPath . $icon, false, $params );
                        }
                }
 
index 8824b66..9f14669 100644 (file)
@@ -1303,9 +1303,11 @@ class LocalFile extends File {
                );
                if ( $dbw->affectedRows() == 0 ) {
                        if ( $allowTimeKludge ) {
-                               # Use FOR UPDATE to ignore any transaction snapshotting
+                               # Use LOCK IN SHARE MODE to ignore any transaction snapshotting
                                $ltimestamp = $dbw->selectField( 'image', 'img_timestamp',
-                                       array( 'img_name' => $this->getName() ), __METHOD__, array( 'FOR UPDATE' ) );
+                                       array( 'img_name' => $this->getName() ),
+                                       __METHOD__,
+                                       array( 'LOCK IN SHARE MODE' ) );
                                $lUnixtime = $ltimestamp ? wfTimestamp( TS_UNIX, $ltimestamp ) : false;
                                # Avoid a timestamp that is not newer than the last version
                                # TODO: the image/oldimage tables should be like page/revision with an ID field
@@ -1850,7 +1852,7 @@ class LocalFile extends File {
         * Start a transaction and lock the image for update
         * Increments a reference counter if the lock is already held
         * @throws MWException Throws an error if the lock was not acquired
-        * @return bool Success
+        * @return bool Whether the file lock owns/spawned the DB transaction
         */
        function lock() {
                $dbw = $this->repo->getMasterDB();
@@ -1877,7 +1879,7 @@ class LocalFile extends File {
 
                $this->markVolatile(); // file may change soon
 
-               return true;
+               return $this->lockedOwnTrx;
        }
 
        /**
@@ -2419,13 +2421,19 @@ class LocalFileRestoreBatch {
                        return $this->file->repo->newGood();
                }
 
-               $this->file->lock();
+               $lockOwnsTrx = $this->file->lock();
 
                $dbw = $this->file->repo->getMasterDB();
                $status = $this->file->repo->newGood();
 
                $exists = (bool)$dbw->selectField( 'image', '1',
-                       array( 'img_name' => $this->file->getName() ), __METHOD__, array( 'FOR UPDATE' ) );
+                       array( 'img_name' => $this->file->getName() ),
+                       __METHOD__,
+                       // The lock() should already prevents changes, but this still may need
+                       // to bypass any transaction snapshot. However, if lock() started the
+                       // trx (which it probably did) then snapshot is post-lock and up-to-date.
+                       $lockOwnsTrx ? array() : array( 'LOCK IN SHARE MODE' )
+               );
 
                // Fetch all or selected archived revisions for the file,
                // sorted from the most recent to the oldest.
@@ -2797,7 +2805,7 @@ class LocalFileMoveBatch {
                        array( 'oi_archive_name', 'oi_deleted' ),
                        array( 'oi_name' => $this->oldName ),
                        __METHOD__,
-                       array( 'FOR UPDATE' ) // ignore snapshot
+                       array( 'LOCK IN SHARE MODE' ) // ignore snapshot
                );
 
                foreach ( $result as $row ) {
index 0adcc73..710058f 100644 (file)
@@ -404,4 +404,18 @@ class OldLocalFile extends LocalFile {
 
                return true;
        }
+
+       /**
+        * If archive name is an empty string, then file does not "exist"
+        *
+        * This is the case for a couple files on Wikimedia servers where
+        * the old version is "lost".
+        */
+       public function exists() {
+               $archiveName = $this->getArchiveName();
+               if ( $archiveName === '' || !is_string( $archiveName ) ) {
+                       return false;
+               }
+               return parent::exists();
+       }
 }
index f9c131f..01360d0 100644 (file)
@@ -50,7 +50,7 @@ class PackedOverlayImageGallery extends PackedImageGallery {
 
                return "\n\t\t\t" . $outerWrapper . '<div class="gallerytext">' . "\n"
                        . $galleryText
-                       . "\n\t\t\t</div>";
+                       . "\n\t\t\t</div></div>";
        }
 }
 
diff --git a/includes/htmlform/HTMLAutoCompleteSelectField.php b/includes/htmlform/HTMLAutoCompleteSelectField.php
new file mode 100644 (file)
index 0000000..4905362
--- /dev/null
@@ -0,0 +1,165 @@
+<?php
+
+/**
+ * Text field for selecting a value from a large list of possible values, with
+ * auto-completion and optionally with a select dropdown for selecting common
+ * options.
+ *
+ * If one of 'options-messages', 'options', or 'options-message' is provided
+ * and non-empty, the select dropdown will be shown. An 'other' key will be
+ * appended using message 'htmlform-selectorother-other' if not already
+ * present.
+ *
+ * Besides the parameters recognized by HTMLTextField, the following are
+ * recognized:
+ *   options-messages - As for HTMLSelectField
+ *   options - As for HTMLSelectField
+ *   options-message - As for HTMLSelectField
+ *   autocomplete - Associative array mapping display text to values.
+ *   autocomplete-messages - Like autocomplete, but keys are message names.
+ *   require-match - Boolean, if true the value must be in the options or the
+ *     autocomplete.
+ *   other-message - Message to use instead of htmlform-selectorother-other for
+ *      the 'other' message.
+ *   other - Raw text to use for the 'other' message
+ *
+ */
+class HTMLAutoCompleteSelectField extends HTMLTextField {
+       protected $autocomplete = array();
+
+       function __construct( $params ) {
+               $params += array(
+                       'require-match' => false,
+               );
+
+               parent::__construct( $params );
+
+               if ( array_key_exists( 'autocomplete-messages', $this->mParams ) ) {
+                       foreach ( $this->mParams['autocomplete-messages'] as $key => $value ) {
+                               $key = $this->msg( $key )->plain();
+                               $this->autocomplete[$key] = strval( $value );
+                       }
+               } elseif ( array_key_exists( 'autocomplete', $this->mParams ) ) {
+                       foreach ( $this->mParams['autocomplete'] as $key => $value ) {
+                               $this->autocomplete[$key] = strval( $value );
+                       }
+               }
+               if ( !is_array( $this->autocomplete ) || !$this->autocomplete ) {
+                       throw new MWException( 'HTMLAutoCompleteSelectField called without any autocompletions' );
+               }
+
+               $this->getOptions();
+               if ( $this->mOptions && !in_array( 'other', $this->mOptions, true ) ) {
+                       if ( isset( $params['other-message'] ) ) {
+                               $msg = wfMessage( $params['other-message'] )->text();
+                       } elseif ( isset( $params['other'] ) ) {
+                               $msg = $params['other'];
+                       } else {
+                               $msg = wfMessage( 'htmlform-selectorother-other' )->text();
+                       }
+                       $this->mOptions[$msg] = 'other';
+               }
+       }
+
+       function loadDataFromRequest( $request ) {
+               if ( $request->getCheck( $this->mName ) ) {
+                       $val = $request->getText( $this->mName . '-select', 'other' );
+
+                       if ( $val === 'other' ) {
+                               $val = $request->getText( $this->mName );
+                               if ( isset( $this->autocomplete[$val] ) ) {
+                                       $val = $this->autocomplete[$val];
+                               }
+                       }
+
+                       return $val;
+               } else {
+                       return $this->getDefault();
+               }
+       }
+
+       function validate( $value, $alldata ) {
+               $p = parent::validate( $value, $alldata );
+
+               if ( $p !== true ) {
+                       return $p;
+               }
+
+               $validOptions = HTMLFormField::flattenOptions( $this->getOptions() );
+
+               if ( in_array( strval( $value ), $validOptions, true ) ) {
+                       return true;
+               } elseif ( in_array( strval( $value ), $this->autocomplete, true ) ) {
+                       return true;
+               } elseif ( $this->mParams['require-match'] ) {
+                       return $this->msg( 'htmlform-select-badoption' )->parse();
+               }
+
+               return true;
+       }
+
+       function getAttributes( array $list ) {
+               $attribs = array(
+                       'type' => 'text',
+                       'data-autocomplete' => FormatJson::encode( array_keys( $this->autocomplete ) ),
+               ) + parent::getAttributes( $list );
+
+               if ( $this->getOptions() ) {
+                       $attribs['data-hide-if'] = FormatJson::encode(
+                               array( '!==', $this->mName . '-select', 'other' )
+                       );
+               }
+
+               return $attribs;
+       }
+
+       function getInputHTML( $value ) {
+               $oldClass = $this->mClass;
+               $this->mClass = (array)$this->mClass;
+
+               $valInSelect = false;
+               $ret = '';
+
+               if ( $this->getOptions() ) {
+                       if ( $value !== false ) {
+                               $value = strval( $value );
+                               $valInSelect = in_array(
+                                       $value, HTMLFormField::flattenOptions( $this->getOptions() ), true
+                               );
+                       }
+
+                       $selected = $valInSelect ? $value : 'other';
+                       $select = new XmlSelect( $this->mName . '-select', $this->mID . '-select', $selected );
+                       $select->addOptions( $this->getOptions() );
+                       $select->setAttribute( 'class', 'mw-htmlform-select-or-other' );
+
+                       if ( !empty( $this->mParams['disabled'] ) ) {
+                               $select->setAttribute( 'disabled', 'disabled' );
+                       }
+
+                       if ( isset( $this->mParams['tabindex'] ) ) {
+                               $select->setAttribute( 'tabindex', $this->mParams['tabindex'] );
+                       }
+
+                       $ret = $select->getHTML() . "<br />\n";
+
+                       $this->mClass[] = 'mw-htmlform-hide-if';
+               }
+
+               if ( $valInSelect ) {
+                       $value = '';
+               } else {
+                       $key = array_search( strval( $value ), $this->autocomplete, true );
+                       if ( $key !== false ) {
+                               $value = $key;
+                       }
+               }
+
+               $this->mClass[] = 'mw-htmlform-autocomplete';
+               $ret .= parent::getInputHTML( $valInSelect ? '' : $value );
+               $this->mClass = $oldClass;
+
+               return $ret;
+       }
+
+}
index 3a455ab..62345b8 100644 (file)
@@ -115,11 +115,14 @@ class HTMLForm extends ContextSource {
                'info' => 'HTMLInfoField',
                'selectorother' => 'HTMLSelectOrOtherField',
                'selectandother' => 'HTMLSelectAndOtherField',
+               'namespaceselect' => 'HTMLSelectNamespace',
+               'tagfilter' => 'HTMLTagFilter',
                'submit' => 'HTMLSubmitField',
                'hidden' => 'HTMLHiddenField',
                'edittools' => 'HTMLEditTools',
                'checkmatrix' => 'HTMLCheckMatrix',
                'cloner' => 'HTMLFormFieldCloner',
+               'autocompleteselect' => 'HTMLAutoCompleteSelectField',
                // HTMLTextField will output the correct type="" attribute automagically.
                // There are about four zillion other HTML5 input types, like range, but
                // we don't use those at the moment, so no point in adding all of them.
@@ -138,6 +141,7 @@ class HTMLForm extends ContextSource {
        protected $mFieldTree;
        protected $mShowReset = false;
        protected $mShowSubmit = true;
+       protected $mSubmitModifierClass = 'mw-ui-constructive';
 
        protected $mSubmitCallback;
        protected $mValidationErrorMessage;
@@ -472,6 +476,9 @@ class HTMLForm extends ContextSource {
                        if ( !empty( $field->mParams['nodata'] ) ) {
                                continue;
                        }
+                       if ( $field->isHidden( $this->mFieldData ) ) {
+                               continue;
+                       }
                        if ( $field->validate(
                                        $this->mFieldData[$fieldname],
                                        $this->mFieldData )
@@ -783,9 +790,14 @@ class HTMLForm extends ContextSource {
                $this->getOutput()->preventClickjacking();
                $this->getOutput()->addModules( 'mediawiki.htmlform' );
                if ( $this->isVForm() ) {
+                       // This is required for VForm HTMLForms that use that style regardless
+                       // of wgUseMediaWikiUIEverywhere (since they pre-date it).
+                       // When wgUseMediaWikiUIEverywhere is removed, this should be consolidated
+                       // with the addModuleStyles in SpecialPage->setHeaders.
                        $this->getOutput()->addModuleStyles( array(
                                'mediawiki.ui',
                                'mediawiki.ui.button',
+                               'mediawiki.ui.input',
                        ) );
                        // @todo Should vertical form set setWrapperLegend( false )
                        // to hide ugly fieldsets?
@@ -893,7 +905,7 @@ class HTMLForm extends ContextSource {
                        $attribs['class'] = array( 'mw-htmlform-submit' );
 
                        if ( $this->isVForm() || $useMediaWikiUIEverywhere ) {
-                               array_push( $attribs['class'], 'mw-ui-button', 'mw-ui-constructive' );
+                               array_push( $attribs['class'], 'mw-ui-button', $this->mSubmitModifierClass );
                        }
 
                        if ( $this->isVForm() ) {
@@ -935,12 +947,15 @@ class HTMLForm extends ContextSource {
                                $attrs['id'] = $button['id'];
                        }
 
-                       if ( $useMediaWikiUIEverywhere ) {
-                               if ( isset( $attrs['class' ] ) ) {
+                       if ( $this->isVForm() || $useMediaWikiUIEverywhere ) {
+                               if ( isset( $attrs['class'] ) ) {
                                        $attrs['class'] .= ' mw-ui-button';
                                } else {
                                        $attrs['class'] = 'mw-ui-button';
                                }
+                               if ( $this->isVForm() ) {
+                                       $attrs['class'] .= ' mw-ui-big mw-ui-block';
+                               }
                        }
 
                        $buttons .= Html::element( 'input', $attrs ) . "\n";
@@ -1035,6 +1050,22 @@ class HTMLForm extends ContextSource {
                return $this;
        }
 
+       /**
+        * Identify that the submit button in the form has a destructive action
+        * @since 1.24
+        */
+       public function setSubmitDestructive() {
+               $this->mSubmitModifierClass = 'mw-ui-destructive';
+       }
+
+       /**
+        * Identify that the submit button in the form has a progressive action
+        * @since 1.25
+        */
+       public function setSubmitProgressive() {
+               $this->mSubmitModifierClass = 'mw-ui-progressive';
+       }
+
        /**
         * Set the text for the submit button to a message
         * @since 1.19
index 70b1535..4cf2394 100644 (file)
@@ -113,7 +113,7 @@ abstract class HTMLFormField {
                                }
                                $data = $data[$key];
                        }
-                       $testValue = $data;
+                       $testValue = (string)$data;
                        break;
                }
 
index 597a03f..5dadaf8 100644 (file)
@@ -80,7 +80,7 @@ class HTMLFormFieldCloner extends HTMLFormField {
         * specified key.
         *
         * @param string $key Array key under which these fields should be named
-        * @return HTMLFormFields[]
+        * @return HTMLFormField[]
         */
        protected function createFieldsForKey( $key ) {
                $fields = array();
@@ -276,6 +276,7 @@ class HTMLFormFieldCloner extends HTMLFormField {
                }
 
                $html = '';
+               $hidden = '';
                $hasLabel = false;
 
                $fields = $this->createFieldsForKey( $key );
@@ -283,11 +284,18 @@ class HTMLFormFieldCloner extends HTMLFormField {
                        $v = ( empty( $field->mParams['nodata'] ) && $values !== null )
                                ? $values[$fieldname]
                                : $field->getDefault();
-                       $html .= $field->$getFieldHtmlMethod( $v );
 
-                       $labelValue = trim( $field->getLabel() );
-                       if ( $labelValue != '&#160;' && $labelValue !== '' ) {
-                               $hasLabel = true;
+                       if ( $field instanceof HTMLHiddenField ) {
+                               // HTMLHiddenField doesn't generate its own HTML
+                               list( $name, $value, $params ) = $field->getHiddenFieldData( $v );
+                               $hidden .= Html::hidden( $name, $value, $params ) . "\n";
+                       } else {
+                               $html .= $field->$getFieldHtmlMethod( $v );
+
+                               $labelValue = trim( $field->getLabel() );
+                               if ( $labelValue != '&#160;' && $labelValue !== '' ) {
+                                       $hasLabel = true;
+                               }
                        }
                }
 
@@ -303,6 +311,7 @@ class HTMLFormFieldCloner extends HTMLFormField {
                                'cssclass' => 'mw-htmlform-cloner-delete-button',
                                'default' => $this->msg( $label )->text(),
                        ) );
+                       $field->mParent = $this->mParent;
                        $v = $field->getDefault();
 
                        if ( $displayFormat === 'table' ) {
@@ -334,6 +343,8 @@ class HTMLFormFieldCloner extends HTMLFormField {
                        }
                }
 
+               $html .= $hidden;
+
                if ( !empty( $this->mParams['row-legend'] ) ) {
                        $legend = $this->msg( $this->mParams['row-legend'] )->text();
                        $html = Xml::fieldset( $legend, $html );
@@ -373,6 +384,7 @@ class HTMLFormFieldCloner extends HTMLFormField {
                        'cssclass' => 'mw-htmlform-cloner-create-button',
                        'default' => $this->msg( $label )->text(),
                ) );
+               $field->mParent = $this->mParent;
                $html .= $field->getInputHTML( $field->getDefault() );
 
                return $html;
index e32c0bb..ffde915 100644 (file)
@@ -1,22 +1,36 @@
 <?php
 
 class HTMLHiddenField extends HTMLFormField {
+       protected $outputAsDefault = true;
+
        public function __construct( $params ) {
                parent::__construct( $params );
 
+               if ( isset( $this->mParams['output-as-default'] ) ) {
+                       $this->outputAsDefault = (bool)$this->mParams['output-as-default'];
+               }
+
                # Per HTML5 spec, hidden fields cannot be 'required'
                # http://www.w3.org/TR/html5/forms.html#hidden-state-%28type=hidden%29
                unset( $this->mParams['required'] );
        }
 
-       public function getTableRow( $value ) {
+       public function getHiddenFieldData( $value ) {
                $params = array();
                if ( $this->mID ) {
                        $params['id'] = $this->mID;
                }
 
-               $this->mParent->addHiddenField( $this->mName, $this->mDefault, $params );
+               if ( $this->outputAsDefault ) {
+                       $value = $this->mDefault;
+               }
+
+               return array( $this->mName, $value, $params );
+       }
 
+       public function getTableRow( $value ) {
+               list( $name, $value, $params ) = $this->getHiddenFieldData( $value );
+               $this->mParent->addHiddenField( $name, $value, $params );
                return '';
        }
 
index 1b71ab9..8d28b59 100644 (file)
@@ -59,6 +59,14 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
                                        $label
                                );
 
+                               if ( $this->mParent->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
+                                       $checkbox = Html::rawElement(
+                                               'div',
+                                               array( 'class' => 'mw-ui-checkbox' ),
+                                               $checkbox
+                                       );
+                               }
+
                                $html .= ' ' . Html::rawElement(
                                        'div',
                                        array( 'class' => 'mw-htmlform-flatlist-item' ),
diff --git a/includes/htmlform/HTMLSelectNamespace.php b/includes/htmlform/HTMLSelectNamespace.php
new file mode 100644 (file)
index 0000000..9638106
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Wrapper for Html::namespaceSelector to use in HTMLForm
+ */
+class HTMLSelectNamespace extends HTMLFormField {
+       function getInputHTML( $value ) {
+               return Html::namespaceSelector(
+                       array(
+                               'selected' => $value,
+                               'all' => 'all'
+                       ), array(
+                               'name' => $this->mName,
+                               'id' => $this->mID,
+                               'class' => 'namespaceselector',
+                       )
+               );
+       }
+}
diff --git a/includes/htmlform/HTMLTagFilter.php b/includes/htmlform/HTMLTagFilter.php
new file mode 100644 (file)
index 0000000..eac9423
--- /dev/null
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Wrapper for ChgangeTags::buildTagFilterSelector to use in HTMLForm
+ */
+class HTMLTagFilter extends HTMLFormField {
+       function getInputHTML( $value ) {
+               $tagFilter = ChangeTags::buildTagFilterSelector( $value );
+               if ( $tagFilter ) {
+                       list( $tagFilterLabel, $tagFilterSelector ) = $tagFilter;
+                       // we only need the select field, HTMLForm should handle the label
+                       return $tagFilterSelector;
+               }
+               return '';
+       }
+}
index 10bc67f..88df49d 100644 (file)
@@ -20,6 +20,7 @@ class HTMLTextField extends HTMLFormField {
                # @todo Enforce pattern, step, required, readonly on the server side as
                # well
                $allowedParams = array(
+                       'type',
                        'min',
                        'max',
                        'pattern',
@@ -38,10 +39,13 @@ class HTMLTextField extends HTMLFormField {
 
                $attribs += $this->getAttributes( $allowedParams );
 
+               # Extract 'type'
+               $type = isset( $attribs['type'] ) ? $attribs['type'] : 'text';
+               unset( $attribs['type'] );
+
                # Implement tiny differences between some field variants
                # here, rather than creating a new class for each one which
                # is essentially just a clone of this one.
-               $type = 'text';
                if ( isset( $this->mParams['type'] ) ) {
                        switch ( $this->mParams['type'] ) {
                                case 'int':
@@ -60,6 +64,7 @@ class HTMLTextField extends HTMLFormField {
                                        break;
                        }
                }
+
                return Html::input( $this->mName, $value, $type, $attribs );
        }
 }
index 1c7762b..7290740 100644 (file)
@@ -107,6 +107,15 @@ class CliInstaller extends Installer {
                if ( isset( $option['pass'] ) ) {
                        $this->setVar( '_AdminPassword', $option['pass'] );
                }
+
+               // Set up the default skins
+               $skins = $this->findExtensions( 'skins' );
+               $this->setVar( '_Skins', $skins );
+
+               if ( $skins ) {
+                       $skinNames = array_map( 'strtolower', $skins );
+                       $this->setVar( 'wgDefaultSkin', $this->getDefaultSkin( $skinNames ) );
+               }
        }
 
        /**
index 193d592..dac4337 100644 (file)
@@ -31,6 +31,7 @@ require_once __DIR__ . '/../../maintenance/Maintenance.php';
  * @since 1.17
  */
 abstract class DatabaseUpdater {
+       protected static $updateCounter = 0;
 
        /**
         * Array of updates to perform on the database
@@ -460,7 +461,8 @@ abstract class DatabaseUpdater {
                if ( !$this->canUseNewUpdatelog() ) {
                        return;
                }
-               $key = "updatelist-$version-" . time();
+               $key = "updatelist-$version-" . time() . self::$updateCounter;
+               self::$updateCounter++;
                $this->db->insert( 'updatelog',
                        array( 'ul_key' => $key, 'ul_value' => serialize( $updates ) ),
                        __METHOD__ );
@@ -895,6 +897,29 @@ abstract class DatabaseUpdater {
                return true;
        }
 
+       /**
+        * Set any .htaccess files or equivilent for storage repos
+        *
+        * Some zones (e.g. "temp") used to be public and may have been initialized as such
+        */
+       public function setFileAccess() {
+               $repo = RepoGroup::singleton()->getLocalRepo();
+               $zonePath = $repo->getZonePath( 'temp' );
+               if ( $repo->getBackend()->directoryExists( array( 'dir' => $zonePath ) ) ) {
+                       // If the directory was never made, then it will have the right ACLs when it is made
+                       $status = $repo->getBackend()->secure( array(
+                               'dir' => $zonePath,
+                               'noAccess' => true,
+                               'noListing' => true
+                       ) );
+                       if ( $status->isOK() ) {
+                               $this->output( "Set the local repo temp zone container to be private.\n" );
+                       } else {
+                               $this->output( "Failed to set the local repo temp zone container to be private.\n" );
+                       }
+               }
+       }
+
        /**
         * Purge the objectcache table
         */
index aca3119..760254d 100644 (file)
@@ -225,7 +225,7 @@ abstract class Installer {
 
                // $wgLogo is probably wrong (bug 48084); set something that will work.
                // Single quotes work fine here, as LocalSettingsGenerator outputs this unescaped.
-               'wgLogo' => '$wgStylePath/common/images/wiki.png',
+               'wgLogo' => '$wgScriptPath/resources/assets/wiki.png',
        );
 
        /**
@@ -286,27 +286,27 @@ abstract class Installer {
        public $licenses = array(
                'cc-by' => array(
                        'url' => 'http://creativecommons.org/licenses/by/3.0/',
-                       'icon' => '{$wgStylePath}/common/images/cc-by.png',
+                       'icon' => '{$wgResourceBasePath}/resources/assets/licenses/cc-by.png',
                ),
                'cc-by-sa' => array(
                        'url' => 'http://creativecommons.org/licenses/by-sa/3.0/',
-                       'icon' => '{$wgStylePath}/common/images/cc-by-sa.png',
+                       'icon' => '{$wgResourceBasePath}/resources/assets/licenses/cc-by-sa.png',
                ),
                'cc-by-nc-sa' => array(
                        'url' => 'http://creativecommons.org/licenses/by-nc-sa/3.0/',
-                       'icon' => '{$wgStylePath}/common/images/cc-by-nc-sa.png',
+                       'icon' => '{$wgResourceBasePath}/resources/assets/licenses/cc-by-nc-sa.png',
                ),
                'cc-0' => array(
                        'url' => 'https://creativecommons.org/publicdomain/zero/1.0/',
-                       'icon' => '{$wgStylePath}/common/images/cc-0.png',
+                       'icon' => '{$wgResourceBasePath}/resources/assets/licenses/cc-0.png',
                ),
                'pd' => array(
                        'url' => '',
-                       'icon' => '{$wgStylePath}/common/images/public-domain.png',
+                       'icon' => '{$wgResourceBasePath}/resources/assets/licenses/public-domain.png',
                ),
                'gfdl' => array(
                        'url' => 'http://www.gnu.org/copyleft/fdl.html',
-                       'icon' => '{$wgStylePath}/common/images/gnu-fdl.png',
+                       'icon' => '{$wgResourceBasePath}/resources/assets/licenses/gnu-fdl.png',
                ),
                'none' => array(
                        'url' => '',
@@ -434,7 +434,11 @@ abstract class Installer {
        public function doEnvironmentChecks() {
                // Php version has already been checked by entry scripts
                // Show message here for information purposes
-               $this->showMessage( 'config-env-php', PHP_VERSION );
+               if ( wfIsHHVM() ) {
+                       $this->showMessage( 'config-env-hhvm', HHVM_VERSION );
+               } else {
+                       $this->showMessage( 'config-env-php', PHP_VERSION );
+               }
 
                $good = true;
                // Must go here because an old version of PCRE can prevent other checks from completing
@@ -894,11 +898,12 @@ abstract class Installer {
        }
 
        /**
-        * Scare user to death if they have mod_security
+        * Scare user to death if they have mod_security or mod_security2
         * @return bool
         */
        protected function envCheckModSecurity() {
-               if ( self::apacheModulePresent( 'mod_security' ) ) {
+               if ( self::apacheModulePresent( 'mod_security' )
+                       || self::apacheModulePresent( 'mod_security2' ) ) {
                        $this->showMessage( 'config-mod-security' );
                }
 
@@ -1464,6 +1469,22 @@ abstract class Installer {
                return $exts;
        }
 
+       /**
+        * Returns a default value to be used for $wgDefaultSkin: the preferred skin, if available among
+        * the installed skins, or any other one otherwise.
+        *
+        * @param string[] $skinNames Names of installed skins.
+        * @return string
+        */
+       public function getDefaultSkin( array $skinNames ) {
+               $defaultSkin = $GLOBALS['wgDefaultSkin'];
+               if ( in_array( $defaultSkin, $skinNames ) ) {
+                       return $defaultSkin;
+               } else {
+                       return $skinNames[0];
+               }
+       }
+
        /**
         * Installs the auto-detected extensions.
         *
@@ -1768,11 +1789,6 @@ abstract class Installer {
 
                // Some of the environment checks make shell requests, remove limits
                $GLOBALS['wgMaxShellMemory'] = 0;
-
-               // Don't bother embedding images into generated CSS, which is not cached
-               $GLOBALS['wgResourceLoaderLESSFunctions']['embeddable'] = function ( $frame, $less ) {
-                       return $less->toBool( false );
-               };
        }
 
        /**
index 3a3e809..f3dba3a 100644 (file)
@@ -679,7 +679,7 @@ class WebInstaller extends Installer {
                        'images/' . $icon;
                $alt = wfMessage( 'config-information' )->text();
 
-               return Html::infoBox( $text, $icon, $alt, $class, false );
+               return Html::infoBox( $text, $icon, $alt, $class );
        }
 
        /**
index f797ef9..3094d55 100644 (file)
@@ -124,53 +124,55 @@ class WebInstallerOutput {
         * @return string
         */
        public function getCSS() {
-               // Horrible, horrible hack: the installer is currently hardcoded to use the Vector skin, so load
-               // it here. Include instead of require, as this will work without it, it will just look bad.
-               // We need the 'global' statement for $wgResourceModules because the Vector skin adds the
-               // definitions for its RL modules there that we use implicitly below.
-               // @codingStandardsIgnoreStart
-               global $wgResourceModules; // This is NOT UNUSED!
-               // @codingStandardsIgnoreEnd
                global $wgStyleDirectory;
-               include_once "$wgStyleDirectory/Vector/Vector.php";
 
                $moduleNames = array(
                        // See SkinTemplate::setupSkinUserCss
                        'mediawiki.legacy.shared',
                        // See Vector::setupSkinUserCss
                        'mediawiki.skinning.interface',
-                       'skins.vector.styles',
-
-                       'mediawiki.legacy.config',
                );
 
-               $css = '';
+               if ( file_exists( "$wgStyleDirectory/Vector/Vector.php" ) ) {
+                       // Force loading Vector skin if available as a fallback skin
+                       // for whatever ResourceLoader wants to have as the default.
+
+                       // Include instead of require, as this will work without it, it will just look bad.
+                       // We need the 'global' statement for $wgResourceModules because the Vector skin adds the
+                       // definitions for its RL modules there that we use implicitly below.
+
+                       // @codingStandardsIgnoreStart
+                       global $wgResourceModules; // This is NOT UNUSED!
+                       // @codingStandardsIgnoreEnd
+
+                       include_once "$wgStyleDirectory/Vector/Vector.php";
+
+                       $moduleNames[] = 'skins.vector.styles';
+               }
+
+               $moduleNames[] = 'mediawiki.legacy.config';
 
                $resourceLoader = new ResourceLoader();
                $rlContext = new ResourceLoaderContext( $resourceLoader, new FauxRequest( array(
                                'debug' => 'true',
                                'lang' => $this->getLanguageCode(),
                                'only' => 'styles',
-                               'skin' => 'vector',
                ) ) );
+
+               $styles = array();
                foreach ( $moduleNames as $moduleName ) {
                        /** @var ResourceLoaderFileModule $module */
                        $module = $resourceLoader->getModule( $moduleName );
-                       // One of the modules will be missing if Vector is unavailable
-                       if ( !$module ) {
-                               continue;
-                       }
 
                        // Based on: ResourceLoaderFileModule::getStyles (without the DB query)
-                       $styles = ResourceLoader::makeCombinedStyles( $module->readStyleFiles(
-                               $module->getStyleFiles( $rlContext ),
-                               $module->getFlip( $rlContext )
-                       ) );
-
-                       $css .= implode( "\n", $styles );
+                       $styles = array_merge( $styles, ResourceLoader::makeCombinedStyles(
+                               $module->readStyleFiles(
+                                       $module->getStyleFiles( $rlContext ),
+                                       $module->getFlip( $rlContext )
+                       ) ) );
                }
 
-               return $css;
+               return implode( "\n", $styles );
        }
 
        /**
@@ -271,8 +273,8 @@ class WebInstallerOutput {
 <?php echo Html::openElement( 'body', array( 'class' => $this->getDir() ) ) . "\n"; ?>
 <div id="mw-page-base"></div>
 <div id="mw-head-base"></div>
-<div id="content">
-<div id="bodyContent">
+<div id="content" class="mw-body">
+<div id="bodyContent" class="mw-body-content">
 
 <h1><?php $this->outputTitle(); ?></h1>
 <?php
index 2a9c54c..b2b0a69 100644 (file)
@@ -796,6 +796,9 @@ class WebInstallerName extends WebInstallerPage {
                        ) ) .
                        $this->parent->getTextBox( array(
                                'var' => '_AdminEmail',
+                               'attribs' => array(
+                                       'dir' => 'ltr',
+                               ),
                                'label' => 'config-admin-email',
                                'help' => $this->parent->getHelpBox( 'config-admin-email-help' )
                        ) ) .
@@ -1037,7 +1040,7 @@ class WebInstallerOptions extends WebInstallerPage {
                                'var' => 'wgDefaultSkin',
                                'itemLabels' => array_fill_keys( $skinNames, 'config-skins-use-as-default' ),
                                'values' => $skinNames,
-                               'value' => $this->getVar( 'wgDefaultSkin', $this->getDefaultSkin( $skinNames ) ),
+                               'value' => $this->getVar( 'wgDefaultSkin', $this->parent->getDefaultSkin( $skinNames ) ),
                        ) );
 
                        foreach ( $skins as $skin ) {
@@ -1254,22 +1257,6 @@ class WebInstallerOptions extends WebInstallerPage {
                $this->addHTML( $this->getCCDoneBox() );
        }
 
-       /**
-        * Returns a default value to be used for $wgDefaultSkin: the preferred skin, if available among
-        * the installed skins, or any other one otherwise.
-        *
-        * @param string[] $skinNames Names of installed skins.
-        * @return string
-        */
-       public function getDefaultSkin( array $skinNames ) {
-               $defaultSkin = $GLOBALS['wgDefaultSkin'];
-               if ( in_array( $defaultSkin, $skinNames ) ) {
-                       return $defaultSkin;
-               } else {
-                       return $skinNames[0];
-               }
-       }
-
        /**
         * If the user skips this installer page, we still need to set up the default skins, but ignore
         * everything else.
@@ -1282,7 +1269,7 @@ class WebInstallerOptions extends WebInstallerPage {
 
                if ( $skins ) {
                        $skinNames = array_map( 'strtolower', $skins );
-                       $this->parent->setVar( 'wgDefaultSkin', $this->getDefaultSkin( $skinNames ) );
+                       $this->parent->setVar( 'wgDefaultSkin', $this->parent->getDefaultSkin( $skinNames ) );
                }
 
                return true;
index d7dbd2c..0aeae7f 100644 (file)
@@ -51,6 +51,7 @@
        "config-env-good": "Асяродзьдзе было праверанае.\nВы можаце ўсталёўваць MediaWiki.",
        "config-env-bad": "Асяродзьдзе было праверанае.\nУсталяваньне MediaWiki немагчымае.",
        "config-env-php": "Усталяваны PHP $1.",
+       "config-env-hhvm": "HHVM $1 усталяваная.",
        "config-unicode-using-utf8": "Выкарыстоўваецца бібліятэка Unicode-нармалізацыі Браяна Вібэра",
        "config-unicode-using-intl": "Выкарыстоўваецца [http://pecl.php.net/intl intl пашырэньне з PECL] для Unicode-нармалізацыі",
        "config-unicode-pure-php-warning": "'''Папярэджаньне''': [http://pecl.php.net/intl Пашырэньне intl з PECL] — ня слушнае для Unicode-нармалізацыі, цяпер выкарыстоўваецца марудная PHP-рэалізацыя.\nКалі ў Вас сайт з высокай наведваемасьцю, раім пачытаць пра [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-нармалізацыю].",
        "config-skins": "Тэмы афармленьня",
        "config-skins-help": "Пералічаныя вышэй тэмы афармленьня знойдзеныя ў вашай тэчцы <code>./skins</code>. Вы мусіце ўключыць як мінімум адну, а таксама абраць тэму па змоўчаньні.",
        "config-skins-use-as-default": "Выкарыстоўваць па змоўчаньні гэтую тэму афармленьня",
+       "config-skins-missing": "Тэмы афармленьня ня знойдзеныя; MediaWiki будзе ўжываць рэзэрвовую тэму афармленьня, пакуль вы не ўсталюеце нешта адпаведнае.",
+       "config-skins-must-enable-some": "Вы павінны ўключыць як мінімум адну тэму афармленьня.",
+       "config-skins-must-enable-default": "Тэма афармленьня, абраная па змоўчаньні, мусіць быць уключаная.",
        "config-install-alreadydone": "'''Папярэджаньне:''' здаецца, што Вы ўжо ўсталёўвалі MediaWiki і спрабуеце зрабіць гэтай зноў.\nКалі ласка, перайдзіце на наступную старонку.",
        "config-install-begin": "Пасьля націску кнопкі «{{int:config-continue}}» пачнецца ўсталяваньне MediaWiki.\nКалі Вы жадаеце што-небудзь зьмяніць, націсьніце кнопку «{{int:config-back}}».",
        "config-install-step-done": "зроблена",
        "config-install-stats": "Ініцыялізацыі статыстыкі",
        "config-install-keys": "Стварэньне сакрэтных ключоў",
        "config-insecure-keys": "<strong>Папярэджаньне:</strong> {{PLURAL:$2|1=Ключ бясьпекі $1 створаны|Ключы бясьпекі $1 створаныя}} падчас усталяваньня, {{PLURAL:$2|1=не зьяўляецца паўнасьцю бясьпечным|не зьяўляюцца поўнасьцю бясьпечнымі}}. Рэкамэндуецца зьмяніць {{PLURAL:$2|1=яго ўручную|іх уручную}}.",
+       "config-install-updates": "Прадухіленьне запуску непатрэбных абнаўленьняў",
+       "config-install-updates-failed": "<strong>Памылка</strong>: устаўка ключоў абнаўленьня ў табліцы завершылася наступнай памылкай: $1",
        "config-install-sysop": "Стварэньне рахунку адміністратара",
        "config-install-subscribe-fail": "Немагчыма падпісацца на «mediawiki-announce»: $1",
        "config-install-subscribe-notpossible": "cURL не ўсталяваны, <code>allow_url_fopen</code> недаступны.",
index 7f353ec..028ef62 100644 (file)
@@ -1,5 +1,20 @@
 {
-       "@metadata": [],
+       "@metadata": {
+               "authors": [
+                       "Чаховіч Уладзіслаў"
+               ]
+       },
+       "config-desc": "Інсталятар MediaWiki",
+       "config-information": "Інфармацыя",
+       "config-localsettings-key": "Ключ абнаўлення:",
+       "config-your-language": "Ваша мова:",
+       "config-wiki-language": "Мова Вікі:",
+       "config-back": "← Назад",
+       "config-page-language": "Мова",
+       "config-page-welcome": "Сардэчна запрашаем у MediaWiki!",
+       "config-page-name": "Назва",
+       "config-page-options": "Настройкі",
+       "config-upload-settings": "Загрузка выяў і файлаў",
        "mainpagetext": "'''MediaWiki паспяхова ўсталяваная.'''",
        "mainpagedocfooter": "Гл. [//meta.wikimedia.org/wiki/Help:Contents Дапаможнік карыстальніка (англ.)] па далейшыя звесткі аб карыстанні вікі-праграмамі.\n\n== З чаго пачаць ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Пералік параметраў канфігурацыі (англ.)]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ ЧАПЫ MediaWiki (англ.)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Ліставанне аб выпусках MediaWiki (англ.)]"
 }
index 880e974..212c599 100644 (file)
        "config-help-restart": "আপনি কী সকল সংরক্ষিত উপাত্ত পরিষ্কার করতে যা আপনি প্রবেস করিয়েছিলেন এবং ইন্সটালেসন ব্যবস্থা পুনরায় আরম্ভ করতে চান?",
        "config-restart": "হ্যাঁ, পুনরায় চালু করুন",
        "config-env-php": "পিএইচপি $1 ইন্সটল করা হয়েছে।",
+       "config-env-hhvm": "HHVM $1 ইনস্টল করা হয়েছে।",
+       "config-xcache": "[http://xcache.lighttpd.net/ XCache] ইনস্টল করা হয়েছে",
        "config-apc": "[http://www.php.net/apc এপিসি] ইনস্টল হয়েছে",
+       "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] ইনস্টল করা হয়েছে",
        "config-db-type": "ডেটাবেজের ধরন:",
        "config-db-host": "ডেটাবেজের হোস্ট:",
        "config-db-wiki-settings": "এই উইকি সনাক্ত করুন",
@@ -44,6 +47,9 @@
        "config-db-install-account": "ইন্সটলের জন্য ব্যবহারকারী অ্যাকাউন্ট",
        "config-db-username": "ডেটাবেজের ব্যবহারকারী নাম:",
        "config-db-password": "ডেটাবেজের শব্দচাবি:",
+       "config-db-username-empty": "আপনাকে অবশ্যই \"{{int:config-db-username}}\"-এর জন্য একটি মান প্রবেশ করাতে হবে।",
+       "config-db-wiki-account": "সাধারণ অভিযানের জন্য ব্যবহারকারী একাউন্ট",
+       "config-db-prefix": "উপাত্তশালা ছক প্রিফিক্স:",
        "config-db-charset": "ডেটাবেজের অক্ষর সেট",
        "config-db-port": "ডেটাবেজ পোর্ট:",
        "config-db-schema": "মিডিয়াউইকির স্কিমা",
@@ -51,6 +57,7 @@
        "config-sqlite-dir": "এসকিউলাইট ডেটা ডিরেক্টরি:",
        "config-oracle-def-ts": "পূর্বনির্ধারিত টেবিলস্পেস",
        "config-oracle-temp-ts": "সাময়কি টেবিলস্পেস:",
+       "config-type-mssql": "মাইক্রোসফট এসকিউএল সার্ভার",
        "config-header-mysql": "মাইএসকিউএল সেটিংস",
        "config-header-postgres": "পোস্টগ্রেএসকিউএল সেটিংস",
        "config-header-sqlite": "এসকিউলাইট সেটিংস",
@@ -92,6 +99,7 @@
        "config-license": "কপিরাইট ও লাইসেন্স:",
        "config-license-none": "কোনো লাইসেন্স ফুটার নেই",
        "config-license-cc-by-sa": "ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন শেয়ার অ্যালাইক",
+       "config-license-cc-by": "ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন",
        "config-license-cc-by-nc-sa": "ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন নন-কমার্শিয়াল শেয়ার অ্যালাইক",
        "config-license-cc-0": "ক্রিয়েটিভ কমন্স জিরো (পাবলিক ডোমেইন)",
        "config-license-pd": "পাবলিক ডোমেইন",
index c2aaf64..78381be 100644 (file)
@@ -50,6 +50,7 @@
        "config-env-good": "Gwiriet eo bet an endro.\nGallout a rit staliañ MediaWiki.",
        "config-env-bad": "Gwiriet eo bet an endro.\nNe c'hallit ket staliañ MediaWiki.",
        "config-env-php": "Staliet eo PHP $1.",
+       "config-env-hhvm": "HHVM $1 zo staliet.",
        "config-unicode-using-utf8": "Oc'h implijout utf8_normalize.so gant Brion Vibber evit ar reolata Unicode.",
        "config-unicode-using-intl": "Oc'h implijout [http://pecl.php.net/intl an astenn PECL intl] evit ar reolata Unicode.",
        "config-unicode-pure-php-warning": "'''Diwallit''' : N'haller ket kaout an [http://pecl.php.net/intl intl PECL astenn] evit merañ reoladur Unicode, a zistro d'ar stumm gorrek emplementet e-PHP.\nMa lakait da dreiñ ul lec'hienn darempredet-stank e vo mat deoc'h lenn un tammig bihan diwar-benn se war [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization]. (e saozneg)",
        "config-header-oracle": "Arventennoù Oracle",
        "config-header-mssql": "Arventennoù Microsoft SQL Server",
        "config-invalid-db-type": "Direizh eo ar seurt diaz roadennoù",
-       "config-missing-db-name": "Ret eo deoc'h merkañ un dalvoudenn evit \"Anv an diaz titouroù\"",
-       "config-missing-db-host": "Ret eo deoc'h merkañ un dalvoudenn evit \"Ostiz an diaz titouroù\"",
-       "config-missing-db-server-oracle": "Ret eo deoc'h merkañ un dalvoudenn evit \"Anv TNS an diaz titouroù\"",
+       "config-missing-db-name": "Ret eo deoc'h merkañ un dalvoudenn evit \"{{int:config-db-name}}\".",
+       "config-missing-db-host": "Ret eo deoc'h merkañ un dalvoudenn evit \"{{int:config-db-host}}\"",
+       "config-missing-db-server-oracle": "Ret eo deoc'h merkañ un dalvoudenn evit \"{{int:config-db-host-oracle}}\".",
        "config-invalid-db-server-oracle": "Direizh eo anv TNS an diaz titouroù \"$1\".\nOber hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha pikoù (.).",
        "config-invalid-db-name": "Direizh eo anv an diaz titouroù \"$1\".\nOber hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha tiredoù (-).",
        "config-invalid-db-prefix": "Direizh eo rakger an diaz titouroù \"$1\".\nOber hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha tiredoù (-).",
        "config-db-web-help": "Diuzañ an anv implijer hag ar ger-tremen a vo implijet gant ar servijer web evit kevreañ ouzh ar servijer diaz roadennoù pa vez ar wiki o vont en-dro war ar pemdez.",
        "config-db-web-account-same": "Ober gant an hevelep kont hag an hini implijet evit ar staliañ",
        "config-db-web-create": "Krouiñ ar gont ma n'eus ket anezhi c'hoazh",
+       "config-db-web-no-create-privs": "Ar gont ho peus diferet evit ar staliañ n'he deus ket gwirioù a-walc'h evit krouiñ ur gont.\nRet eo d'ar gont diferet amañ bezañ anezhi dija.",
        "config-mysql-engine": "Lusker stokañ :",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
        "config-install-interwiki-list": "Ne c'haller ket kavout ar restr <code>interwiki.list</code>.",
        "config-install-stats": "O sevel ar stadegoù",
        "config-install-keys": "Genel an alc'hwezioù kuzh",
+       "config-install-updates": "Mirout da lakaat hizivadennoù diezhomm da vont en-dro",
        "config-install-sysop": "Krouidigezh kont ar merour",
        "config-install-subscribe-fail": "N'haller ket koumanantiñ da mediawiki-announce : $1",
        "config-install-subscribe-notpossible": "cURL n'eo ket staliet ha ne c'haller ket ober gant <code>allow_url_fopen</code>.",
index 3f1fcfc..e0c985b 100644 (file)
@@ -5,7 +5,8 @@
                        "පසිඳු කාවින්ද",
                        "Kippelboy",
                        "Toniher",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Jmarchn"
                ]
        },
        "config-desc": "L'instal·lador del MediaWiki",
@@ -19,6 +20,8 @@
        "config-localsettings-incomplete": "El <code>LocalSettings.php</code> que hi ha sembla incomplet.\nLa variable $1 no està definida.\nCanvieu <code>LocalSettings.php</code> perquè la variable estigui definida i feu clic a «{{int:Config-continue}}».",
        "config-localsettings-connection-error": "S'ha trobat un error en connectar-se amb la base de dades fent servir els paràmetres especificats a <code>LocalSettings.php</code>. Corregiu aquests paràmetres i torneu-ho a provar.\n\n$1",
        "config-session-error": "Error en iniciar la sessió: $1",
+       "config-session-expired": "Les dades de la vostra sessió sembla que han caducat.\nLes sessions estan configurades per a un temps de $1.\nPodeu augmentar-lo posant <code>session.gc_maxlifetime</code> en php.ini.\nReprengueu el procés d'instal·lació.",
+       "config-no-session": "Les dades de la vostra sessió s'han perdut!\nComprovar el vostre php.ini i assegureu-vos que <code>session.save_path</code> està assignat a un directori apropiat.",
        "config-your-language": "La vostra llengua:",
        "config-your-language-help": "Seleccioneu la llengua que s'utilitzarà durant el procés d'instal·lació.",
        "config-wiki-language": "Llengua del wiki:",
        "config-help-restart": "Voleu esborrar totes les dades que heu introduït i tornar a començar el procés d'instal·lació?",
        "config-restart": "Sí, torna a començar",
        "config-welcome": "=== Comprovacions de l'entorn ===\nS'efectuaran comprovacions bàsiques per veure si l'entorn és adequat per a la instal·lació del MediaWiki.\nRecordeu d'incloure aquesta informació si heu de demanar ajuda sobre com completar la instal·lació.",
+       "config-copyright": "=== Drets d'autor i condicions ===\n\n$1\n\nAquest programa és de programari lliure; podeu redistribuir-lo i/o modificar-lo sota les condicions de la Llicència Pública General GNU com es publicada per la Free Software Foundation; qualsevol versió 2 de la llicència, o (opcionalment) qualsevol versió posterior.\n\nAquest programa és distribueix amb l'esperança que serà útil, però <strong>sense cap garantia</strong>; sense ni tan sols la garantia implícita de <strong>\ncomerciabilitat</strong> o <strong>idoneïtat per a un propòsit particular</strong>.\nConsulteu la Llicència Pública General GNU, per a més detalls.\n\nHauríeu d'haver rebut <doclink href=\"Copying\">una còpia de la Llicència Pública General GNU</doclink> amb aquest programa; si no, escriviu a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA o [http://www.gnu.org/copyleft/gpl.html per llegir-lo en línia].",
+       "config-sidebar": "* [//www.mediawiki.org la Pàgina d'inici]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guia de l'Usuari]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guia de l'Administrador]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Llegeix-me</doclink>\n* <doclink href=ReleaseNotes>Notes de la versió</doclink>\n* <doclink href=Còpia>Còpia</doclink>\n* <doclink href=UpgradeDoc>Actualització</doclink>",
        "config-env-good": "S'ha comprovat l'entorn.\nPodeu instal·lar el MediaWiki.",
        "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-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-apc": "L’[http://www.php.net/apc APC] està instal·lat",
        "config-profile-private": "Wiki privat",
        "config-license": "Copyright i llicència:",
        "config-license-none": "Sense llicència al peu de pàgina",
+       "config-license-cc-by-sa": "Creative Commons Reconeixement-CompartirIgual",
+       "config-license-cc-by": "Creative Commons Reconeixement",
+       "config-license-cc-by-nc-sa": "Creative Commons Reconeixement-NoComercial-CompartirIgual",
+       "config-license-cc-0": "Creative Commons Zero (Domini Públic)",
+       "config-license-gfdl": "GNU Free Documentation License 1.3 o posterior",
        "config-license-pd": "Domini públic",
+       "config-license-cc-choose": "Selecció d'una llicència personalitzada de Creative Commons",
        "config-email-settings": "Paràmetres del correu electrònic",
        "config-email-user": "Habilita el correu electrònic usuari-a-usuari",
        "config-email-user-help": "Permet que tots els usuaris puguin enviar-se correu si ho han habilitat a les preferències.",
index 0510bfc..a783cfe 100644 (file)
@@ -52,6 +52,7 @@
        "config-env-good": "Prostředí bylo zkontrolováno.\nMůžete nainstalovat MediaWiki.",
        "config-env-bad": "Prostředí bylo zkontrolováno.\nMediaWiki nelze nainstalovat.",
        "config-env-php": "Je nainstalováno PHP $1.",
+       "config-env-hhvm": "Je nainstalováno HHVM $1.",
        "config-unicode-using-utf8": "Pro normalizaci Unicode se používá utf8_normalize.so Briona Vibbera.",
        "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-install-stats": "Inicializují se statistiky",
        "config-install-keys": "Vytvářejí se tajné klíče",
        "config-insecure-keys": "'''Upozornění:''' {{PLURAL:$2|Tajný klíč|Tajné klíče}} ($1) vytvořené v průběhu instalace {{PLURAL:$2|není|nejsou}} zcela {{PLURAL:$2|bezpečný|bezpečné}}. Zvažte {{PLURAL:$2|jeho|jejich}} ruční změnu.",
+       "config-install-updates": "Ruší se spuštění nepotřebných aktualizací",
+       "config-install-updates-failed": "<strong>Chyba:</strong> Vložení aktualizačních klíčů do tabulek selhalo s následující chybou: $1",
        "config-install-sysop": "Zakládá se uživatelský účet správce",
        "config-install-subscribe-fail": "Nelze se přihlásit k odběru mediawiki-announce: $1",
        "config-install-subscribe-notpossible": "Není nainstalován cURL a není dostupné <code>allow_url_fopen</code>.",
index 532d7c1..f329db9 100644 (file)
@@ -58,6 +58,7 @@
        "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-advanced-settings": "Erweiterte Konfiguration",
        "config-cache-options": "Einstellungen für die Zwischenspeicherung von Objekten:",
        "config-cache-help": "Das Objektcaching wird dazu genutzt, die Geschwindigkeit von MediaWiki zu verbessern, indem häufig genutzte Daten zwischengespeichert werden.\nEs wird sehr empfohlen, es für mittelgroße bis große Wikis zu nutzen, aber auch für kleine Wikis ergeben sich erkennbare Geschwindigkeitsverbesserungen.",
-       "config-cache-none": "Kein Objektcaching (es wird keine Funktion entfernt, allerdings kann dies die Geschwindigkeit größerer Wikis negativ beeinflussen)",
+       "config-cache-none": "Kein Objektcaching (es wird keine Funktion entfernt, allerdings kann dies die Leistungsfähigkeit größerer Wikis negativ beeinflussen)",
        "config-cache-accel": "Objektcaching von PHP (APC, XCache oder WinCache)",
-       "config-cache-memcached": "Memcached Cacheserver nutzen (erfordert einen zusätzlichen Installationsvorgang mitsamt Konfiguration)",
+       "config-cache-memcached": "Memcached Cacheserver (erfordert einen zusätzlichen Installationsvorgang mitsamt Konfiguration)",
        "config-memcached-servers": "Memcached Cacheserver",
        "config-memcached-help": "Liste der für Memcached nutzbaren IP-Adressen.\nEs sollte eine je Zeile mitsamt des vorgesehenen Ports angegeben werden. Beispiele:\n127.0.0.1:11211 oder\n192.168.1.25:1234 usw.",
        "config-memcache-needservers": "Memcached wurde als Cacheserver ausgewählt. Dabei wurde allerdings kein Server angegeben.",
        "config-install-stats": "Statistiken werden initialisiert",
        "config-install-keys": "Geheimschlüssel werden erstellt",
        "config-insecure-keys": "'''Warnung:''' {{PLURAL:$2|Der Geheimschlüssel|Die Geheimschlüssel}} $1, {{PLURAL:$2|der|die}} während des Installationsvorgangs generiert {{PLURAL:$2|wurde, ist|wurden, sind}} nicht sehr sicher. {{PLURAL:$2|Er sollte|Sie sollten}} manuell geändert werden.",
+       "config-install-updates": "Unnötige Aktualisierungen nicht ausführen",
+       "config-install-updates-failed": "<strong>Fehler:</strong> Das Einfügen von Aktualisierungsschlüssel in die Tabellen ist mit dem folgenden Fehler fehlgeschlagen: $1",
        "config-install-sysop": "Administratorkonto wird erstellt",
        "config-install-subscribe-fail": "Abonnieren von „mediawiki-announce“ ist gescheitert: $1",
        "config-install-subscribe-notpossible": "cURL ist nicht installiert und <code>allow_url_fopen</code> ist nicht verfügbar.",
index 7d782d5..6b9f590 100644 (file)
@@ -15,7 +15,7 @@
        "config-license-none": "No licence footer",
        "config-license-gfdl": "GNU Free Documentation Licence 1.3 or later",
        "config-license-cc-choose": "Select a custom Creative Commons licence",
-       "config-license-help": "Many public wikis put all contributions under a [http://freedomdefined.org/Definition free licence].\nThis helps to create a sense of community ownership and encourages long-term contribution.\nIt is not generally necessary for a private or corporate wiki.\n\nIf you want to be able to use text from Wikipedia, and you want Wikipedia to be able to accept text copied from your wiki, you should choose '''Creative Commons Attribution Share Alike'''.\n\nWikipedia previously used the GNU Free Documentation Licence.\nThe GFDL is a valid licence, but it is difficult to understand.\nIt is also difficult to reuse content licenced under the GFDL.",
+       "config-license-help": "Many public wikis put all contributions under a [http://freedomdefined.org/Definition free licence].\nThis helps to create a sense of community ownership and encourages long-term contribution.\nIt is not generally necessary for a private or corporate wiki.\n\nIf you want to be able to use text from Wikipedia, and you want Wikipedia to be able to accept text copied from your wiki, you should choose <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nWikipedia previously used the GNU Free Documentation Licence.\nThe GFDL is a valid licence, but it is difficult to understand.\nIt is also difficult to reuse content licenced under the GFDL.",
        "config-cc-error": "The Creative Commons licence chooser gave no result.\nEnter the licence name manually.",
        "config-cc-not-chosen": "Choose which Creative Commons licence you want and click \"proceed\".",
        "config-install-stats": "Initialising statistics"
index ca328cf..4857495 100644 (file)
@@ -44,6 +44,7 @@
        "config-env-good": "The environment has been checked.\nYou can install MediaWiki.",
        "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].",
@@ -69,7 +70,7 @@
        "config-apc": "[http://www.php.net/apc APC] is installed",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] is installed",
        "config-no-cache": "<strong>Warning:</strong> Could not find [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] or [http://www.iis.net/download/WinCacheForPhp WinCache].\nObject caching is not enabled.",
-       "config-mod-security": "<strong>Warning:</strong> Your web server has [http://modsecurity.org/ mod_security] enabled. If misconfigured, it can cause problems for MediaWiki or other software that allows users to post arbitrary content.\nRefer to [http://modsecurity.org/documentation/ mod_security documentation] or contact your host's support if you encounter random errors.",
+       "config-mod-security": "<strong>Warning:</strong> Your web server has [http://modsecurity.org/ mod_security]/mod_security2 enabled. Many common configurations of this will cause problems for MediaWiki and other software that allows users to post arbitrary content.\nIf possible, this should be disabled. Otherwise, refer to [http://modsecurity.org/documentation/ mod_security documentation] or contact your host's support if you encounter random errors.",
        "config-diff3-bad": "GNU diff3 not found.",
        "config-git": "Found the Git version control software: <code>$1</code>.",
        "config-git-bad": "Git version control software not found.",
index 135a32b..ee1a2f4 100644 (file)
@@ -24,7 +24,8 @@
                        "McDutchie",
                        "Miguel2706",
                        "Macofe",
-                       "AVIADOR"
+                       "AVIADOR",
+                       "FuzzyDice"
                ]
        },
        "config-desc": "El instalador de MediaWiki",
@@ -41,9 +42,9 @@
        "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-your-language": "Tu idioma:",
-       "config-your-language-help": "Seleccionar un idioma a usar durante el proceso de instalación.",
+       "config-your-language-help": "Selecciona un idioma para usar durante el proceso de instalación.",
        "config-wiki-language": "Idioma del wiki:",
-       "config-wiki-language-help": "Seleccionar el idioma en el que el wiki será escrito predominantemente.",
+       "config-wiki-language-help": "Selecciona el idioma en el que se escribirá predominantemente el wiki.",
        "config-back": "← Atrás",
        "config-continue": "Continuar →",
        "config-page-language": "Idioma",
@@ -69,6 +70,7 @@
        "config-env-good": "El entorno ha sido comprobado.\nPuedes instalar MediaWiki.",
        "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-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-diff3-bad": "GNU diff3 no se encuentra.",
-       "config-git": "Se encontró el ''software'' de control de versiones Git: <code>$1</code>.",
+       "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-uri": "'''Error:''' No se pudo determinar el URI actual.\nSe interrumpió la instalación.",
+       "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 dirección URL del servidor \"<nowiki>$1$2</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-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-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-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": "Identifique este wiki",
-       "config-db-name": "Nombre de base de datos:",
+       "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-oracle": "Esquema de base de datos:",
+       "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 base de datos:",
-       "config-db-password": "contraseña de base de datos:",
+       "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-account-lock": "Usar el mismo nombre de usuario y contraseña durante operación normal",
-       "config-db-wiki-account": "Usar cuenta para 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-prefix": "Prefijo de tablas de base de datos:",
+       "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-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-charset-mysql4": "MySQL 4.0 retrocompatible UTF-8",
        "config-charset-help": "'''Atención:''' Si emplea '''backwards-compatible UTF-8''' en MySQL 4.1+ y posteriormente hace copia de seguridad de la base de datos con <code>mysqldump</code> , puede destruir todos los caracteres no-ASCII, ¡dañando irreversiblemente sus copias de seguridad!\n\nEn '''modo binario''', MediaWiki almacena texto UTF-8 en la base de datos en campos binarios.\nEsto es más eficiente que el modo UTF-8 de MySQL, y le permite utilizar la gama completa de caracteres Unicode.\nEn ''' modo UTF-8'' ', MySQL sabrá el juego de caracteres de sus datos y puede presentarlos y convertirlos apropiadamente,\npero no le permitirá almacenar caracteres por encima del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plano multilingüe básico].",
-       "config-mysql-old": "Se necesita MySQL $1 o una versión más reciente. Tienes la versión $2.",
+       "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-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-regenerate": "Regenerar LocalSettings.php →",
-       "config-show-table-status": "<code>SHOW TABLE STATUS</code> ha fallado!",
+       "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-db-web-account": "Cuenta de base de datos para acceso Web",
+       "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-account-same": "Utilizar la misma cuenta que en la instalación",
        "config-db-web-create": "Crear la cuenta si no existe",
        "config-mysql-binary": "Binario",
        "config-mysql-utf8": "UTF-8",
        "config-mysql-charset-help": "En '''modo binario''', MediaWiki almacena texto UTF-8 para la base de datos en campos binarios.\nEsto es más eficiente que el modo UTF-8 de MySQL y le permite utilizar la gama completa de caracteres Unicode.\n\nEn '''modo UTF-8''', MySQL sabrá qué conjunto de caracteres emplean sus datos y puede presentarlos y convertirlos adecuadamente, pero no le permitirá almacenar caracteres por encima del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plano multilingüe básico].",
-       "config-mssql-auth": "Tipo de autentificación:",
+       "config-mssql-auth": "Tipo de autenticación:",
        "config-mssql-install-auth": "Seleccione el tipo de autenticación que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nSi selecciona \"{{int:config-mssql-windowsauth}}\", las credenciales de cualquier usuario de el servidor web que se está ejecutando van a ser utilizadas.",
        "config-mssql-web-auth": "Seleccione el tipo de autenticación que utilizará el servidor web para conectarse al servidor de base de datos, durante el funcionamiento normal de la wiki.\nSi selecciona \"{{int:config-mssql-windowsauth}}\", las credenciales del usuario que sea cual sea el servidor Web se ejecuta como será utilizado.",
        "config-mssql-sqlauth": "Autenticación de SQL Server",
        "config-site-name-blank": "Ingresar un nombre de sitio.",
        "config-project-namespace": "Espacio de nombre de proyecto:",
        "config-ns-generic": "Proyecto",
-       "config-ns-site-name": "Igual como el nombre del wiki: $1",
+       "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-admin-box": "Cuenta de administrador",
        "config-admin-name": "Tu nombre de usuario:",
        "config-admin-password": "Contraseña:",
-       "config-admin-password-confirm": "Repita la 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-profile-fishbowl": "Sólo editores autorizados",
        "config-profile-private": "Wiki privado",
        "config-profile-help": "Los wikis funcionan mejor cuando dejas que los edite tanta gente como sea posible.\nEn MediaWiki, es fácil revisar los cambios recientes y revertir los daños realizados por usuarios malintencionados o novatos.\nSin embargo, muchos han encontrado que MediaWiki es útil para una amplia variedad de funciones, y a veces no es fácil convencer a todos de los beneficios de la forma wiki.\nPor lo tanto tienes la elección.\n\nEl modelo '''{{int:config-profile-wiki}}''' permite que cualquiera pueda editar, sin siquiera iniciar sesión.\nUn wiki con '''{{int:config-profile-no-anon}}''' ofrece rendición de cuentas adicional, pero puede disuadir a colaboradores.\n\nEl modelo '''{{int:config-profile-fishbowl}}''' permite editar a los usuarios autorizados, pero el público puede ver las páginas, incluyendo el historial.\nUn '''{{int:config-profile-private}}''' sólo permite ver páginas a los usuarios autorizados, el mismo grupo al que le está permitido editar.\n\nConfiguraciones más complejas de derechos de usuario están disponibles después de la instalación, consulte [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights esta entrada en el manual].",
-       "config-license": "Copyright and licencia:",
+       "config-license": "Derechos de autor y licencia:",
        "config-license-none": "Pie sin licencia",
-       "config-license-cc-by-sa": "Creative Commons Reconocimiento Compartir Igual",
-       "config-license-cc-by": "Creative Commons Reconocimiento",
-       "config-license-cc-by-nc-sa": "Creative Commons Reconocimiento Compartir Igual no comercial",
+       "config-license-cc-by-sa": "Creative Commons Atribución-CompartirIgual",
+       "config-license-cc-by": "Creative Commons Atribución",
+       "config-license-cc-by-nc-sa": "Creative Commons Atribución-NoComercial-CompartirIgual",
        "config-license-cc-0": "Creative Commons Zero (dominio público)",
        "config-license-gfdl": "Licencia de documentación libre de GNU 1.3 o posterior",
-       "config-license-pd": "Dominio Público",
+       "config-license-pd": "Dominio público",
        "config-license-cc-choose": "Selecciona una licencia personalizada de Creative Commons",
        "config-license-help": "Muchos wikis públicos ponen todas las contribuciones bajo una [http://freedomdefined.org/Definition licencia libre].\nEsto ayuda a crear un sentido de propiedad comunitaria y alienta la contribución a largo plazo.\nEsto no es generalmente necesario para un wiki privado o corporativo.\n\nSi deseas poder utilizar texto de Wikipedia, y deseas que Wikipedia pueda aceptar el texto copiado de tu wiki, debes elegir <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nWikipedia utilizaba anteriormente la licencia de documentación libre de GNU (GFDL).\nLa GFDL es una licencia válida, pero es difícil de entender.\nTambién es difícil reutilizar el contenido licenciado bajo la GFDL.",
        "config-email-settings": "Configuración de correo electrónico",
        "config-enable-email": "Activar el envío de correos electrónicos",
        "config-enable-email-help": "Si quieres que el correo electrónico funcione, la [http://www.php.net/manual/en/mail.configuration.php configuración PHP de correo electrónico] debe ser la correcta.\nSi no quieres la funcionalidad de correo electrónico, puedes desactivarla aquí.",
-       "config-email-user": "Habilitar correo electrónico de usuario a usuario",
+       "config-email-user": "Habilitar correo electrónico entre usuarios",
        "config-email-user-help": "Permitir que todos los usuarios intercambien correos electrónicos si lo han activado en sus preferencias.",
        "config-email-usertalk": "Activar notificaciones de páginas de discusión de usuarios",
        "config-email-usertalk-help": "Permitir a los usuarios recibir notificaciones de cambios en la página de discusión de usuario, si lo han activado en sus preferencias.",
        "config-install-user": "Creando el usuario de la base de datos",
        "config-install-user-alreadyexists": "El usuario \"$1\" ya existe",
        "config-install-user-create-failed": "La creación del usuario \"$1\" falló:  $2",
-       "config-install-user-grant-failed": "La concesión de permisos para el usuario \"$1\" ha fallado: $2",
+       "config-install-user-grant-failed": "La concesión de permisos al usuario \"$1\" falló: $2",
        "config-install-user-missing": "El usuario especificado \"$1\" no existe.",
        "config-install-user-missing-create": "El usuario especificado \"$1\" no existe.\nPor favor, haga clic en la casilla \"Crear cuenta\" que aparece a continuación si desea crearlo.",
        "config-install-tables": "Creando tablas",
        "config-install-interwiki-list": "No se pudo encontrar el archivo <code>interwiki.list</code>.",
        "config-install-interwiki-exists": "'''Advertencia''': La tabla de interwikis parece ya contener entradas.\nSe omitirá la lista predeterminada.",
        "config-install-stats": "Iniciando las estadísticas",
-       "config-install-keys": "Generación de claves secretas",
+       "config-install-keys": "Generando claves secretas",
        "config-insecure-keys": "''' Atención:'' '  {{PLURAL:$2|Una clave de seguridad generada|Las claves de seguridad generadas}} ($1) durante la instalación no  {{PLURAL:$2|es totalmente segura|son totalmente seguras}}. Considere {{PLURAL:$2| cambiarla|cambiarlas}} manualmente.",
-       "config-install-sysop": "Creando cuenta de usuario del administrador",
+       "config-install-updates": "Evitar ejecutar actualizaciones innecesarias",
+       "config-install-updates-failed": "<strong>Error:</strong> falló la inserción de claves de actualización en las tablas con el siguiente error: $1",
+       "config-install-sysop": "Creando la cuenta de usuario del administrador",
        "config-install-subscribe-fail": "No se ha podido suscribir a mediawiki-announce: $1",
        "config-install-subscribe-notpossible": "cURL no está instalado y <code>allow_url_fopen</code> no está disponible.",
        "config-install-mainpage": "Creando página principal con contenido predeterminado",
        "config-install-mainpage-failed": "No se pudo insertar la página principal: $1",
        "config-install-done": "<strong>¡Felicidades!</strong>\nHas instalado MediaWiki correctamente.\n\nEl instalador ha generado un  archivo <code>LocalSettings.php</code>.\nEste contiene toda su configuración.\n\nDeberás descargarlo y ponerlo en la base de la instalación de wiki (el mismo directorio que index.php). La descarga debería haber comenzado automáticamente.\n\nSi no comenzó la descarga, o si se ha cancelado, puedes reiniciar la descarga haciendo clic en el siguiente enlace:\n\n$3\n\n<strong>Nota</strong>: Si no haces esto ahora, este archivo de configuración generado no estará disponible más tarde si sales de la instalación sin descargarlo.\n\nCuando lo hayas hecho, podrás <strong>[$2  entrar en tu wiki]</strong>.",
        "config-download-localsettings": "Descargar archivo <code>LocalSettings.php</code>",
-       "config-help": "Ayuda",
-       "config-help-tooltip": "Haz clic para ampliar",
+       "config-help": "ayuda",
+       "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": "'''MediaWiki ha sido instalado con éxito.'''",
+       "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 13b61ed..8fae026 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Avjoska",
-                       "Pikne"
+                       "Pikne",
+                       "Boxmein"
                ]
        },
        "config-information": "Teave",
@@ -26,6 +27,7 @@
        "config-page-upgradedoc": "Uuendamine",
        "config-page-existingwiki": "Olemasolev viki",
        "config-restart": "Jah, tee taaskäivitus",
+       "config-env-hhvm": "HHVM $1 on installitud.",
        "config-db-name": "Andmebaasi nimi:",
        "config-db-username": "Andmebaasi kasutajanimi:",
        "config-db-password": "Andmebaasi parool:",
index d619cff..7e06c60 100644 (file)
@@ -6,7 +6,8 @@
                        "Ebraminio",
                        "Omidh",
                        "Pouyana",
-                       "Reza1615"
+                       "Reza1615",
+                       "Alirezaaa"
                ]
        },
        "config-desc": "نصب کنندهٔ ویکی‌مدیا",
@@ -19,7 +20,7 @@
        "config-upgrade-key-missing": "نصب موجود مدیاویکی شناسایی شده‌است.\nبرای بروزرسانی این نصب، لطفاً خط زیر را در آخر کد \nقرار دادن به نصب ارتقاء داده شده، به خط زیر لطفاً در پایین خود را <code>LocalSettings.php</code> قرار دهید:\n\n$1",
        "config-localsettings-incomplete": "وجود <code>LocalSettings.php</code> به نظر ناقص می‌رسد.\nمتغیر $1 تنظیم نشده‌است.\nبرای اینکه این متغیر تنظیم شود لطفاً <code>LocalSettings.php</code> را تغییر دهید، و \"{{int:Config-continue}}\" را کلیک کنید.",
        "config-localsettings-connection-error": "هنگام اتصال به پایگاه اطلاعاتی که ازتنظیمات مشخص شده در<code>LocalSettings.php</code> استفاده می‌کند، خطایی رخ داد. لطفاً این تنظیمات را نصب کنید و دوباره تلاش کنید.\n$1",
-       "config-session-error": "خطا در شروع جلسه $1",
+       "config-session-error": "خطا در شروع جلسه: $1",
        "config-session-expired": "به نظر می‌رسد اطلاعات جلسهٔ شما منقضی شده‌است.\nجلسات برای مادام العمر $1 پیکربندی شده‌اند.\nشما می‌توانید این پیکربندی را با تنظیم <code>session.gc_maxlifetime</code> در php.ini افزایش دهید.\nروند نصب را دوباره شروع کنید.",
        "config-no-session": "اطلاعات دورهٔ شما از دست رفته‌ است!\nphp.ini خود را بررسی کنید و مطمئن شوید <code>session.save_path</code> برای یک فهرست مناسب تنظیم شده‌است.",
        "config-your-language": "زبان شما:",
        "config-page-language": "زبان",
        "config-page-welcome": "به مدیاویکی خوش آمدید!",
        "config-page-dbconnect": "اتصال به پایگاه داده",
-       "config-page-upgrade": "نصب موجود را ارتقاء دهید.",
-       "config-page-dbsettings": "تÙ\86ظÛ\8cÙ\85ات Ù¾Ø§Û\8cگاÙ\87 Ø§Ø·Ù\84اعاتÛ\8c",
+       "config-page-upgrade": "ارتقای نصب موجود",
+       "config-page-dbsettings": "تÙ\86ظÛ\8cÙ\85ات Ù¾Ø§Û\8cگاÙ\87 Ø¯Ø§Ø¯Ù\87",
        "config-page-name": "نام",
        "config-page-options": "گزینه‌ها",
        "config-page-install": "نصب",
        "config-page-complete": "کامل!",
-       "config-page-restart": "نصب را دوباره شروع کنید",
+       "config-page-restart": "راه‌اندازی دوباره نصب",
        "config-page-readme": "مرا بخوان",
        "config-page-releasenotes": "یادداشت‌های انتشار",
        "config-page-copying": "تکثیر",
-       "config-page-upgradedoc": "ارتقا",
+       "config-page-upgradedoc": "ارتقاء",
        "config-page-existingwiki": "ویکی موجود",
        "config-help-restart": "آیا می‌خواهید همهٔ اطلاعات ذخیره شده‌ای که وارد کرده‌اید را پاک کنید و دوباره روند نصب را شروع کنید؟",
-       "config-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-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] را بخوانید.",
@@ -78,8 +80,8 @@
        "config-no-cache": "'''هشدار:''' [http://www.php.net/apc APC],[http://xcache.lighttpd.net/ XCache] یا [http://www.iis.net/download/WinCacheForPhp WinCache] را نتوانست پیدا کند.\nذخیره شی فعال نیست.",
        "config-mod-security": "'''هشدار:''' وب سرور شما [http://modsecurity.org/ mod_security] فعال است.اگر اشتباه پیکربندی شده‌‌ باشد،می تواند باعث ایجاد مشکلاتی برای مدیاویکی یا دیگر نرم‌افزاری شود که به کاربران اجازه می‌دهد پیام دلخواه ارسال کنند.\nبه [http://modsecurity.org/documentation/ mod_security documentation] مراجعه کنید یا اگر با خطاهای اتفاقی مواجه شدید با پشتیبانی میزبان خود در تماس باشید.",
        "config-diff3-bad": "جی‌ان‌یو دیف۳ پیدا نشد.",
-       "config-git": "نسخهٔ کنترل نرم‌افزار جیت پیدا شد:<code>$1</code>.",
-       "config-git-bad": "نسخه نرم‌افزار کنترل جیت پیدا نشد.",
+       "config-git": "کنترل نسخهٔ نرم‌افزار گیت پیدا شد: <code>$1</code>.",
+       "config-git-bad": "کنترل نسخهٔ نرم‌افزار گیت پیدا نشد.",
        "config-imagemagick": "ایمیج‌مجیک پیدا شد: <code>$1</code>.\nاگر ارسال‌ها را فعال کنید،تصویر کوچک فعال خواهد‌شد.",
        "config-gd": "گرافیک‌های جی‌دی ساخته‌‌ شده در کتابخانه پیدا شد.\nاگر ارسال‌ها را فعال کنید تصویر کوچک فعال خواهد‌شد.",
        "config-no-scaling": "کتابخانهٔ جی‌دی یا ایمیج‌مجیک نتوانست پیدا شود.\nتصویر کوچک غیر‌فعال خواهد‌شد.",
        "config-db-install-account": "حساب کاربری برای نصب",
        "config-db-username": "نام کاربری پایگاه اطلاعات:",
        "config-db-password": "گذرواژه پایگاه داده‌ها:",
-       "config-db-password-empty": "Ù\84Ø·Ù\81اÙ\8b Û\8cÚ© Ø±Ù\85ز Ø¹Ø¨Ù\88ر Ø¨Ø±Ø§Û\8c Ú©Ø§Ø±Ø¨Ø± Ø¬Ø¯Û\8cد پایگاه اطلا‌عاتی وارد کنید: $1\nدر صورتی که ممکن است کاربران بدون رمز عبور به وجود آیند،امن نیست.",
+       "config-db-password-empty": "Ù\84Ø·Ù\81اÙ\8b Û\8cÚ© Ø±Ù\85ز Ø¹Ø¨Ù\88ر Ø¨Ø±Ø§Û\8c Ú©Ø§Ø±Ø¨Ø± ØªØ§Ø²Ù\87 پایگاه اطلا‌عاتی وارد کنید: $1\nدر صورتی که ممکن است کاربران بدون رمز عبور به وجود آیند،امن نیست.",
        "config-db-username-empty": "شما باید یک مقدار برای \"نام کاربری {{int:config-db-username}}\" وارد کنید",
        "config-db-install-username": "نام کاربری را وارد کنید که برای اتصال به پایگاه اطلاعاتی در طول روند نصب استفاده خواهد‌شد.\nاین نام کاربری حساب مدیاویکی نیست; نام کاربری برای پایگاه اطلاعاتی شما است.",
        "config-db-install-password": "رمز عبوری را وارد کنید که برای اتصال به پایگاه اطلاعاتی در طول روند نصب استفاده خواهد‌شد.\nاین رمز عبور برای حساب مدیاویکی نیست;رمز عبور برای پایگاه اطلاعاتی شما است.",
        "config-profile": "شرح‌حال حقوق کاربر:",
        "config-profile-wiki": "بازکردن ویکی",
        "config-profile-no-anon": "ساخت کاربری مورد نیاز است",
-       "config-profile-fishbowl": "فقط کاربر تأیید شده",
+       "config-profile-fishbowl": "فقط کاربر مجاز",
        "config-profile-private": "ویکی خصوصی",
        "config-profile-help": "زمانی ویکی درست کار می کند که شما اجازه دهید تعداد زیادی از مردم آن را ویرایش کنند.\nدر مدیاویکی امکان مشاهدهٔ تغییرات اخیر و واگردانی ویرایش‌های خرابکاری به آسانی وجود دارد.\n\nبا وجودی که مدیا ویکی منافع بسیاری برای مردم دارد ولی متقاعد کردن خیلی از مردم درباره روش کار ویکی‌ها کار آسانی نیست.\n\nدر نتیجه شما دو انتخاب دارید.\n\n'''{{int:config-profile-wiki}}''' به همه کاربرها اجازهٔ ویرایش می دهد حتی بدون ثبت‌نام.\n\nیک ویکی که دارای '''{{int:config-profile-no-anon}}''' باشد امکانات کاربری بیشتری ارائه می‌دهد ولی امکان دارد ویرایشگران عادی را نگران کند.\n\nسناریوی '''{{int:config-profile-fishbowl}}''' به کاربرها اجازهٔ ویرایش می دهد ولی همه می توانند متن و تاریخچه را ببیند.\n\n'''{{int:config-profile-private}}''' فقط به کاربران اجازهٔ مشاهدهٔ مطالب را می‌دهد و فقط آنها می توانند ویرایش کنند.\n\nدسترسی‌های بیشتر کاربری بعد از نصب در [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights راهنماهای مرتبط] موجود است.",
        "config-license": "حق تکثیر و مجوز:",
        "config-install-stats": "شروع آمار",
        "config-install-keys": "تولید کلیدهای مخفی",
        "config-insecure-keys": "'''هشدار:''' {{PLURAL:$2|کلید امن|کلیدهای امن}} ($1) در طی نصب  کاملاً ایمن {{PLURAL:$2|نیست|نیستند}}. تغییر دستی {{PLURAL:$2|آن|آنها}} را در نظر بگیرید.",
+       "config-install-updates": "جلوگیری از به روز رسانی‌های غیر ضروری در حال اجرا",
+       "config-install-updates-failed": "<strong>خطا:</strong> قراردادن کلیدهای به روز رسانی به داخل جداول با خطای روبرو مواجه شد: $1",
        "config-install-sysop": "ایجاد حساب کاربری مدیر",
        "config-install-subscribe-fail": "قادر تصدیق اعلام مدیاویکی نیست:$1",
        "config-install-subscribe-notpossible": "سی‌یوآر‌ال نصب نشده‌است و <code>allow_url_fopen</code> در دسترس نیست.",
index 0835f41..f88ab91 100644 (file)
@@ -12,7 +12,9 @@
                        "아라",
                        "Elseweyr",
                        "Lliehu",
-                       "Syreeni"
+                       "Syreeni",
+                       "Stryn",
+                       "SMAUG"
                ]
        },
        "config-desc": "MediaWiki-asennin",
@@ -56,6 +58,7 @@
        "config-env-good": "Asennusympäristö on tarkastettu.\nVoit asentaa MediaWikin.",
        "config-env-bad": "Asennusympäristö on tarkastettu.\nEt voi asentaa MediaWikiä.",
        "config-env-php": "PHP $1 on asennettu.",
+       "config-env-hhvm": "HHVM $1 on asennettu.",
        "config-no-db": "Sopivaa tietokanta-ajuria ei löytynyt! Sinun täytyy asentaa tietokanta-ajurit PHP:lle.\nSeuraavat tietokantatyypit ovat tuettuja: $1.",
        "config-outdated-sqlite": "<strong>Varoitus:</strong> sinulla on käytössä SQLite $1, joke on vanhempi kuin vähintään vaadittava versio $2. SQLite ei ole saatavilla.",
        "config-safe-mode": "'''Varoitus:''' PHP:n [http://www.php.net/features.safe-mode safe mode] -tila on aktiivinen.\nSe voi aiheuttaa ongelmia erityisesti tiedostojen tallentamisen ja matemaattisten kaavojen kanssa.",
        "config-profile-fishbowl": "Vain hyväksytyt muokkaajat",
        "config-profile-private": "Yksityinen wiki",
        "config-license": "Tekijänoikeus ja lisenssi:",
+       "config-license-cc-by-sa": "Creative Commons Nimeä-Tarttuva",
+       "config-license-cc-by": "Creative Commons Nimeä",
+       "config-license-cc-by-nc-sa": "Creative Commons Nimeä-Epäkaupallinen-Tarttuva",
+       "config-license-cc-0": "Creative Commons Zero (Public Domain)",
+       "config-license-gfdl": "GNU Free Documentation -lisenssi 1.3 tai uudempi",
        "config-license-pd": "Public domain",
+       "config-license-cc-choose": "Valitse mukautettu Creative Commons -lisenssi",
        "config-email-settings": "Sähköpostiasetukset",
        "config-enable-email": "Ota käyttöön sähköpostien lähetys",
        "config-enable-email-help": "Jotta sähköposti toimii, [http://www.php.net/manual/en/mail.configuration.php PHP:n sähköpostiasetukset] täytyy asettaa oikein.\nJos et halua käyttää sähköpostiominaisuuksia, ne voi kytkeä pois päältä tästä.",
index 57d7444..9fd6726 100644 (file)
@@ -66,6 +66,7 @@
        "config-env-good": "L’environnement a été vérifié.\nVous pouvez installer MediaWiki.",
        "config-env-bad": "L’environnement a été vérifié.\nVous ne pouvez pas installer MediaWiki.",
        "config-env-php": "PHP $1 est installé.",
+       "config-env-hhvm": "HHVM $1 est installé.",
        "config-unicode-using-utf8": "Utilisation de utf8_normalize.so par Brion Vibber pour la normalisation Unicode.",
        "config-unicode-using-intl": "Utilisation de [http://pecl.php.net/intl l'extension PECL intl] pour la normalisation Unicode.",
        "config-unicode-pure-php-warning": "<strong>Attention</strong> : L'[http://pecl.php.net/intl extension PECL intl] n'est pas disponible pour la normalisation d’Unicode, retour à la version lente implémentée en PHP.\nSi votre site web sera très fréquenté, vous devriez lire ceci : [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ''Unicode normalization''] (en anglais).",
        "config-install-stats": "Initialisation des statistiques",
        "config-install-keys": "Génération de la clé secrète",
        "config-insecure-keys": "'''Avertissement''' : {{PLURAL:$2|Une clé de sécurité générée ($1) pendant l'installation n'est pas complètement sécuritaire. Envisagez de la modifier manuellement.|Des clés de sécurité générées ($1) pendant l'installation ne sont pas complètement sécuritaires. Envisagez de les modifier manuellement.}}",
+       "config-install-updates": "Empêcher l’exécution des mises à jour inutiles",
+       "config-install-updates-failed": "<strong>Erreur :</strong> L’insertion de clés modifiées dans les tables a échoué avec l’erreur suivante : $1",
        "config-install-sysop": "Création du compte administrateur",
        "config-install-subscribe-fail": "Impossible de s'abonner à mediawiki-announce : $1",
        "config-install-subscribe-notpossible": "cURL n’est pas installé et <code>allow_url_fopen</code> n’est pas disponible.",
index 1eb0d89..ac2f69e 100644 (file)
@@ -1,9 +1,15 @@
 {
        "@metadata": {
                "authors": [
-                       "Seb35"
+                       "Seb35",
+                       "Robin0van0der0vliet"
                ]
        },
+       "config-page-language": "Taal",
+       "config-page-name": "Namme",
+       "config-page-options": "Opsjes",
+       "config-admin-password": "Wachtwurd:",
+       "config-help": "help",
        "mainpagetext": "'''MediaWiki-program goed ynstallearre.'''",
        "mainpagedocfooter": "Rieplachtsje de [//meta.wikimedia.org/wiki/Help:Contents Ynhâldsopjefte hantlieding] foar ynformaasje oer it gebrûk fan 'e wikisoftware.\n\n== Mear help oer Mediawiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings List mei ynstellings]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Faak stelde fragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglist foar oankundigings fan nije ferzjes]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index cd209c5..a42cb17 100644 (file)
@@ -49,6 +49,7 @@
        "config-env-good": "Rematou a comprobación da contorna.\nPode instalar MediaWiki.",
        "config-env-bad": "Rematou a comprobación da contorna.\nNon pode instalar MediaWiki.",
        "config-env-php": "Está instalado o PHP $1.",
+       "config-env-hhvm": "Está instalado o HHVM $1.",
        "config-unicode-using-utf8": "Usando utf8_normalize.so de Brion Vibber para a normalización Unicode.",
        "config-unicode-using-intl": "Usando a [http://pecl.php.net/intl extensión intl PECL] para a normalización Unicode.",
        "config-unicode-pure-php-warning": "<strong>Atención:</strong> A [http://pecl.php.net/intl extensión intl PECL] non está dispoñible para manexar a normalización Unicode; volvendo á implementación lenta de PHP puro.\nSe o seu sitio posúe un alto tráfico de visitantes, debería ler un chisco sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].",
        "config-install-stats": "Iniciando as estatísticas",
        "config-install-keys": "Xerando as claves secretas",
        "config-insecure-keys": "<strong>Atención:</strong> {{PLURAL:$2|A clave de seguridade|As claves de seguridade}} ($1) {{PLURAL:$2|xerada|xeradas}} durante a instalación non {{PLURAL:$2|é|son}} completamente {{PLURAL:$2|segura|seguras}}. Considere a posibilidade de {{PLURAL:$2|cambiala|cambialas}} manualmente.",
+       "config-install-updates": "Evitar executar actualizacións innecesarias",
+       "config-install-updates-failed": "<strong>Error:</strong> a inserción de claves de actualización nas táboas fallou co seguinte erro: $1",
        "config-install-sysop": "Creando a conta de usuario de administrador",
        "config-install-subscribe-fail": "Non se puido subscribir á lista mediawiki-announce: $1",
        "config-install-subscribe-notpossible": "cURL non está instalado e <code>allow_url_fopen</code> non está dispoñible.",
index 57e3c94..dd14e63 100644 (file)
@@ -51,6 +51,7 @@
        "config-env-good": "הסביבה שלכם נבדקה.\nאפשר להתקין מדיה־ויקי.",
        "config-env-bad": "הסביבה שלכם נבדקה.\nאי־אפשר להתקין מדיה־ויקי.",
        "config-env-php": "מותקנת <span dir=\"ltr\">PHP $1</span>.",
+       "config-env-hhvm": "מותקנת <span dir=\"ltr\">HHVM $1</span>.",
        "config-unicode-using-utf8": "משתמש ב־utf8_normalize.so של בריון ויבר לנרמול יוניקוד.",
        "config-unicode-using-intl": "משתמש ב[http://pecl.php.net/intl הרחבת intl PECL] לנרמול יוניקוד.",
        "config-unicode-pure-php-warning": "'''אזהרה''': [http://pecl.php.net/intl הרחבת intl PECL] אינה זמינה לטיפול בנרמול יוניקוד. משתמש ביישום PHP טהור ואטי יותר.\nאם זהו אתר בעל תעבורה גבוהה, כדאי לקרוא את המסמך הבא: [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
        "config-install-stats": "אתחול סטטיסטיקות",
        "config-install-keys": "יצירת מפתחות סודיים",
        "config-insecure-keys": "'''אזהרה''': {{PLURAL:$2|מפתח|מפתחות}} אבטחה ($1) {{PLURAL:$2|שנוצר|שנוצרו}} במהלך ההתקנה {{PLURAL:$2|אינו בטוח|אינם בטוחים}} מספיק. מומלץ לשקול לשנות {{PLURAL:$2|אותו|אותם}} ידנית.",
+       "config-install-updates": "למנוע הרצת עדכונים מיותרים",
+       "config-install-updates-failed": "<strong>שגיאה:</strong> הוספת מפתחות עדכון לטבלאות נכשל עם השגיאה הבאה: $1",
        "config-install-sysop": "יצירת חשבון מפעיל",
        "config-install-subscribe-fail": "הרישום ל־mediawiki-announce לא הצליח: $1",
        "config-install-subscribe-notpossible": "cURL אינה מותקנת ו־<code>allow_url_fopen</code> אינה זמינה.",
index a150fbc..a35ea31 100644 (file)
@@ -6,7 +6,8 @@
                        "아라",
                        "Dj",
                        "Misibacsi",
-                       "Tacsipacsi"
+                       "Tacsipacsi",
+                       "Dorgan"
                ]
        },
        "config-desc": "A MediaWiki telepítője",
        "config-env-good": "A környezet ellenőrzése befejeződött.\nA MediaWiki telepíthető.",
        "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-php-toolow": "PHP $1 van telepítve,\nazonban a MediaWikinek PHP $2, vagy újabb szükséges.",
        "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-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-register-globals": "'''Figyelmeztetés: A PHP <code>[http://php.net/register_globals register_globals]</code> beállítása engedélyezve van.'''\n'''Tiltsd le, ha van rá lehetőséged.'''\nA MediaWiki működőképes a beállítás használata mellett, de a szerver biztonsági kockázatnak lesz kitéve.",
        "config-magic-quotes-runtime": "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] aktív!'''\nEz a beállítás kiszámíthatatlan károkat okoz a bevitt adatokban.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
        "config-magic-quotes-sybase": "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] aktív!'''\nEz a beállítás kiszámíthatatlan károkat okoz a bevitt adatokban.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
        "config-mbstring": "'''Kritikus hiba: az [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime mbstring.func_overload] aktív!'''\nEz a beállítás hibákat okoz és kiszámíthatatlanul károsíthatja bevitt adatokat.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
        "config-memcache-badport": "A Memcached a(z) $1 és $2 közötti portokat szokta használni.",
        "config-extensions": "Kiterjesztések",
        "config-extensions-help": "A fent felsorolt kiterjesztések találhatóak meg az <code>./extensions</code> könyvtárban.\n\nLehetséges, hogy további beállításra lesz szükség hozzájuk, de már most engedélyezheted őket.",
+       "config-skins": "Felületek",
+       "config-skins-use-as-default": "Felület használata alapértelmezettként",
        "config-install-alreadydone": "'''Figyelmeztetés:''' Úgy tűnik, hogy a MediaWiki telepítve van, és te ismét megpróbálod telepíteni.\nFolytasd a következő oldalon.",
        "config-install-begin": "A „{{int:config-continue}}” gomb megnyomása elindítja a MediaWiki telepítését.\nHa szeretnél módosítani a beállításokon, kattints a \"{{int:config-back}}\" gombra.",
        "config-install-step-done": "kész",
index 62afb44..0e8f597 100644 (file)
@@ -47,6 +47,7 @@
        "config-env-good": "Le ambiente ha essite verificate.\nTu pote installar MediaWiki.",
        "config-env-bad": "Le ambiente ha essite verificate.\nTu non pote installar MediaWiki.",
        "config-env-php": "PHP $1 es installate.",
+       "config-env-hhvm": "HHVM $1 es installate.",
        "config-unicode-using-utf8": "utf8_normalize.so per Brion Vibber es usate pro le normalisation Unicode.",
        "config-unicode-using-intl": "Le [http://pecl.php.net/intl extension PECL intl] es usate pro le normalisation Unicode.",
        "config-unicode-pure-php-warning": "'''Aviso''': Le [http://pecl.php.net/intl extension PECL intl] non es disponibile pro exequer le normalisation Unicode; le systema recurre al implementation lente in PHP pur.\nSi tu sito ha un alte volumine de traffico, tu deberea informar te un poco super le [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisation Unicode].",
@@ -55,6 +56,7 @@
        "config-outdated-sqlite": "'''Attention''': tu ha SQLite $1, que es inferior al version minimal requirite, $2. SQLite essera indisponibile.",
        "config-no-fts3": "'''Attention''': SQLite es compilate sin [//sqlite.org/fts3.html modulo FTS3]; functionalitate de recerca non essera disponibile in iste back-end.",
        "config-register-globals-error": "<strong>Error: Le option <code>[http://php.net/register_globals register_globals]</code> de PHP es active.\nIllo debe esser disactivate pro continuar le installation.</strong>\nVide [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] pro obtener adjuta sur como facer lo.",
+       "config-magic-quotes-gpc": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] es active!</strong>\nIste option corrumpe le datos entrate de maniera imprevisibile.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
        "config-magic-quotes-runtime": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] es active!'''\nIste option corrumpe le entrata de datos imprevisibilemente.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
        "config-magic-quotes-sybase": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] es active!'''\nIste option corrumpe le entrata de datos imprevisibilemente.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
        "config-mbstring": "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] es active!'''\nIste option causa errores e pote corrumper datos imprevisibilemente.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
@@ -65,6 +67,7 @@
        "config-memory-raised": "Le <code>memory_limit</code> de PHP es $1, elevate a $2.",
        "config-memory-bad": "'''Aviso:''' Le <code>memory_limit</code> de PHP es $1.\nIsto es probabilemente troppo basse.\nLe installation pote faller!",
        "config-ctype": "'''Fatal''': PHP debe esser compilate con supporto pro le [http://www.php.net/manual/en/ctype.installation.php extension Ctype].",
+       "config-iconv": "<strong>Fatal:</strong> PHP debe esser compilate con supporto pro le [http://www.php.net/manual/en/iconv.installation.php extension iconv].",
        "config-json": "'''Fatal:''' PHP ha essite compilate sin supporto de JSON.\nTu debe installar le extension JSON de PHP o le extension [http://pecl.php.net/package/jsonc PECL jsonc] extension ante de installar MediaWiki.\n* Le extension de PHP es includite in Red Hat Enterprise Linux (CentOS) 5 e 6, ma debe esser activate in <code>/etc/php.ini</code> o <code>/etc/php.d/json.ini</code>.\n* Alcun distributiones de Linux liberate post maio 2013 omitte iste extension de PHP, forniente in su loco le extension PECL como <code>php5-json</code> o <code>php-pecl-jsonc</code>.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] es installate",
        "config-apc": "[http://www.php.net/apc APC] es installate",
        "config-license-gfdl": "Licentia GNU pro Documentation Libere 1.3 o plus recente",
        "config-license-pd": "Dominio public",
        "config-license-cc-choose": "Seliger un licentia Creative Commons personalisate",
-       "config-license-help": "Multe wikis public pone tote le contributiones sub un [http://freedomdefined.org/Definition/Ia?uselang=ia licentia libere].\nIsto adjuta a crear un senso de proprietate communitari e incoragia le contribution in longe termino.\nIsto non es generalmente necessari pro un wiki private o de interprisa.\n\nSi tu vole poter usar texto de Wikipedia, e si tu vole que Wikipedia pote acceptar texto copiate de tu wiki, tu debe seliger '''Creative Commons Attribution Share Alike'''.\n\nWikipedia usava anteriormente le Licentia GNU pro Documentation Libere (GFDL).\nIste es un licentia valide, ma es difficile a comprender.\nIl es anque difficile reusar le contento licentiate sub GFDL.",
+       "config-license-help": "Multe wikis public pone tote le contributiones sub un [http://freedomdefined.org/Definition/Ia?uselang=ia licentia libere].\nIsto adjuta a crear un senso de proprietate communitari e incoragia le contribution in longe termino.\nIsto non es generalmente necessari pro un wiki private o de interprisa.\n\nSi tu vole poter usar texto de Wikipedia, e si tu vole que Wikipedia pote acceptar texto copiate de tu wiki, tu debe seliger <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nWikipedia usava anteriormente le Licentia GNU pro Documentation Libere (GFDL).\nIste es un licentia valide, ma es difficile a comprender.\nIl es anque difficile reusar le contento licentiate sub GFDL.",
        "config-email-settings": "Configuration de e-mail",
        "config-enable-email": "Activar le e-mail sortiente",
        "config-enable-email-help": "Si tu vole que e-mail functiona, [http://www.php.net/manual/en/mail.configuration.php le optiones de e-mail de PHP] debe esser configurate correctemente.\nSi tu non vole functiones de e-mail, tu pote disactivar los hic.",
        "config-memcache-badport": "Le numeros de porto de Memcached debe esser inter $1 e $2",
        "config-extensions": "Extensiones",
        "config-extensions-help": "Le extensiones listate hic supra esseva detegite in tu directorio <code>./extensions</code>.\n\nIstes pote requirer additional configuration, ma tu pote activar los ora.",
+       "config-skins": "Apparentias",
+       "config-skins-help": "Hic supra es le lista de apparentias detegite in tu directorio <code>./skins</code>. Tu debe activar al minus un de illos e seliger le predefinite.",
+       "config-skins-use-as-default": "Usar iste apparentia como predefinite",
+       "config-skins-missing": "Nulle apparentia ha essite trovate; MediaWiki usara un apparentia de reserva usque tu installa alcun apparentia complete.",
+       "config-skins-must-enable-some": "Tu debe seliger al minus un apparentia a activar.",
+       "config-skins-must-enable-default": "Le apparentia seligite como predefinite debe esser activate.",
        "config-install-alreadydone": "'''Aviso:''' Il pare que tu ha jam installate MediaWiki e tenta installar lo de novo.\nPer favor continua al proxime pagina.",
        "config-install-begin": "Un clic sur \"{{int:config-continue}}\" comencia le installation de MediaWiki.\nPro facer alterationes, clicca sur \"{{int:config-back}}\".",
        "config-install-step-done": "finite",
        "config-install-stats": "Initialisation del statisticas",
        "config-install-keys": "Generation de claves secrete",
        "config-insecure-keys": "'''Attention:''' {{PLURAL:$2|Un clave|Alcun claves}} secur ($1) generate durante le installation non es completemente secur. Considera cambiar {{PLURAL:$2|lo|los}} manualmente.",
+       "config-install-updates": "Impedir le execution de actualisationes innecessari",
+       "config-install-updates-failed": "<strong>Error:</strong> Le insertion de claves de actualisation in le tabellas ha fallite con le error sequente: $1",
        "config-install-sysop": "Crea conto de usator pro administrator",
        "config-install-subscribe-fail": "Impossibile subscriber a mediawiki-announce: $1",
        "config-install-subscribe-notpossible": "cURL non es installate e <code>allow_url_fopen</code> non es disponibile.",
index 908d282..8ef3188 100644 (file)
@@ -10,7 +10,8 @@
                        "Lucas2",
                        "Ontsed",
                        "Seb35",
-                       "Nemo bis"
+                       "Nemo bis",
+                       "Ricordisamoa"
                ]
        },
        "config-desc": "Il programma di installazione per MediaWiki",
@@ -55,6 +56,7 @@
        "config-env-good": "L'ambiente è stato controllato.\nÈ possibile installare MediaWiki.",
        "config-env-bad": "L'ambiente è stato controllato.\nNon è possibile installare MediaWiki.",
        "config-env-php": "PHP $1 è installato.",
+       "config-env-hhvm": "HHVM $1 è installato.",
        "config-unicode-using-utf8": "Usa Brion Vibber's utf8_normalize.so per la normalizzazione Unicode.",
        "config-unicode-using-intl": "Usa [http://pecl.php.net/intl l'estensione PECL intl] per la normalizzazione Unicode.",
        "config-unicode-pure-php-warning": "'''Attenzione:''' [http://pecl.php.net/intl l'estensione PECL intl] non è disponibile per gestire la normalizzazione Unicode, così si usa la lenta implementazione in puro PHP.\nSe esegui un sito ad alto traffico, dovresti leggere alcune considerazioni sulla [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzazione Unicode].",
@@ -62,6 +64,8 @@
        "config-no-db": "Impossibile trovare un driver adatto per il database! È necessario installare un driver per PHP.\nI seguenti formati di database sono supportati: $1.\n\nSe compili PHP autonomamente, riconfiguralo attivando un client database, per esempio utilizzando <code>./configure --with-mysqli</code>.\nQualora avessi installato PHP per mezzo di un pacchetto Debian o Ubuntu, allora devi installare anche il pacchetto <code>php5-mysql</code>.",
        "config-outdated-sqlite": "'''Attenzione''': è presente SQLite $1 mentre è richiesta la versione $2, SQLite non sarà disponibile.",
        "config-no-fts3": "'''Attenzione''': SQLite è compilato senza il [//sqlite.org/fts3.html modulo FTS3], le funzionalità di ricerca non saranno disponibili su questo backend.",
+       "config-register-globals-error": "<strong>Errore: l'opzione PHP <code>[http://php.net/register_globals register_globals]</code> è abilitata.\nDeve essere disabilitata per continuare con l'installazione.</strong>\nVedi [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] per un aiuto su come farlo.",
+       "config-magic-quotes-gpc": "<strong>Fatale: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] è attivo!</strong>\nQuesta opzione danneggia i dati di input in modo imprevedibile.\nNon puoi installare o utilizzare MediaWiki, a meno che questa opzione sia disabilitata.",
        "config-magic-quotes-runtime": "'''Errore: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] è attivato!''' Questa opzione interferisce in modo imprevedibile con l'inserimento dei dati. Non è possibile installare o utilizzare MediaWiki a meno che questa opzione non sia disabilitata.",
        "config-magic-quotes-sybase": "'''Errore: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] è attivato!''' Questa opzione interferisce in modo imprevedibile con l'inserimento dei dati. Non è possibile installare o utilizzare MediaWiki a meno che questa opzione non sia disabilitata.",
        "config-mbstring": "'''Errore: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] è attivato!''' Questa opzione causa errori e può interferire in modo imprevedibile coi dati. Non è possibile installare o utilizzare MediaWiki a meno che questa opzione non sia disabilitata.",
@@ -72,6 +76,7 @@
        "config-memory-raised": "Il valore <code>memory_limit</code> di PHP è $1, aumentato a $2.",
        "config-memory-bad": "''Attenzione:''' Il valore di <code>memory_limit</code> di PHP è $1.\nProbabilmente è troppo basso.\nL'installazione potrebbe non riuscire!",
        "config-ctype": "'''Errore''': PHP deve essere compilato con il supporto per l'[http://www.php.net/manual/it/ctype.installation.php estensione Ctype].",
+       "config-iconv": "<strong>Fatale:</strong> PHP deve essere compilato con il supporto per l'[http://www.php.net/manual/en/iconv.installation.php estensione iconv].",
        "config-json": "'''Errore:''' PHP è stato compilato senza il supporto per JSON. E' necessario installare l'estensione PHP per JSON o l'estensione [http://pecl.php.net/package/jsonc PECL jsonc] prima di installare MediaWiki.\n* L'estensione PHP è inclusa in Red Hat Enterprise Linux (CentOS) 5 e 6, ma deve essere abilitata in <code>/etc/php.ini</code> o <code>/etc/php.d/json.ini</code>.\n* Alcune distribuzioni di Linux pubblicate dopo il maggio 2013 omettono l'estensione PHP, e al posto utilizzano l'estensione PECL come <code>php5-json</code> o <code>php-pecl-jsonc</code>",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] è installato",
        "config-apc": "[http://www.php.net/apc APC] è installato",
        "config-uploads-not-safe": "<strong>Attenzione:</strong> la directory predefinita per i caricamenti <code>$1</code> è vulnerabile all'esecuzione arbitraria di script.\nAnche se MediaWiki controlla tutti i file caricati per rischi alla sicurezza, è fortemente raccomandato di [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security chiudere questa vulnerabilità di sicurezza] prima di abilitare i caricamenti.",
        "config-no-cli-uploads-check": "<strong>Attenzione:</strong> la directory predefinita per i caricamenti (<code>$1</code>) non è stata verificata per la vulnerabilità sull'esecuzione arbitraria di script durante l'installazione da linea di comando.",
        "config-brokenlibxml": "Il tuo sistema ha una combinazione di versioni di PHP e libxml2 che è difettosa e che può provocare un danneggiamento non visibile di dati in MediaWiki ed in altre applicazioni per il web.\nAggiorna a libxml2 2.7.3 o successivo ([https://bugs.php.net/bug.php?id=45996 il bug è studiato dal lato PHP]).\nInstallazione interrotta.",
+       "config-suhosin-max-value-length": "Suhosin è installato e limita il parametro GET <code>length</code> a $1 byte.\nIl componente MediaWiki ResourceLoader funzionerà aggirando questo limite, ma riducendo le prestazioni.\nSe possibile, dovresti impostare <code>suhosin.get.max_value_length</code> a 1024 o superiore in <code>php.ini</code>, ed impostare <code>$wgResourceLoaderMaxQueryLength</code> allo stesso valore in <code>LocalSettings.php</code>.",
        "config-db-type": "Tipo di database:",
        "config-db-host": "Host del database:",
        "config-db-host-help": "Se il server del tuo database è su un server diverso, immetti qui il nome dell'host o il suo indirizzo IP.\n\nSe stai utilizzando un web hosting condiviso, il tuo hosting provider dovrebbe fornirti il nome host corretto nella sua documentazione.\n\nSe stai installando su un server Windows con uso di MySQL, l'uso di \"localhost\" potrebbe non funzionare correttamente come nome del server. In caso di problemi, prova a impostare \"127.0.0.1\" come indirizzo IP locale.\n\nSe usi PostgreSQL, lascia questo campo vuoto per consentire di connettersi tramite un socket Unix.",
        "config-db-host-oracle": "TNS del database:",
+       "config-db-host-oracle-help": "Inserisci un valido [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; un file tnsnames.ora deve essere visibile a questa installazione.<br />Se stai usando la libreria cliente 10g o più recente puoi anche usare il metodo di denominazione [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifica questo wiki",
        "config-db-name": "Nome del database:",
        "config-db-name-help": "Scegli un nome che identifica il tuo wiki.\nNon deve contenere spazi.\n\nSe utilizzi un web hosting condiviso, il tuo hosting provider o ti fornisce uno specifico nome di database da utilizzare, oppure ti consentirà di creare il database tramite un pannello di controllo.",
        "config-db-name-oracle": "Schema del database:",
+       "config-db-account-oracle-warn": "Ci sono tre scenari supportati per l'installazione di Oracle come database di backend:\n\nSe vuoi creare un'utenza di database come parte del processo di installazione, fornisci un account con ruolo SYSDBA come utenza di database per l'installazione e specifica le credenziali volute per l'utenza di accesso web, altrimenti è possibile creare manualmente l'utenza di accesso web e fornire solo quell'account (se dispone delle autorizzazioni necessario per creare gli oggetti dello schema) o fornire due diverse utenze, una con i permessi di creazione e una per l'accesso web.\n\nScript per la creazione di un'utenza con le autorizzazioni necessarie può essere trovato nella directory \"maintenance/oracle/\" di questa installazione. Tieni presente che l'uso di un'utenza con restrizioni disabiliterà tutte le funzionalità di manutenzione con l'account predefinito.",
        "config-db-install-account": "Account utente per l'installazione",
        "config-db-username": "Nome utente del database:",
        "config-db-password": "Password del database:",
        "config-charset-mysql5-binary": "MySQL 4.1/5.0 binario",
        "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
        "config-charset-mysql4": "MySQL 4.0 con compatibilità UTF-8",
+       "config-charset-help": "<strong>Attenzione:</strong> se si utilizza <strong>backwards-compatible UTF-8</strong> su MySQL 4.1+, e successivamente si esegue il backup del database con <code>mysqldump</code>, si può distriggere tutti i caratteri non ASCII, danneggiando irreversibilmente i backup!\n\nIn <strong>modalità binaria</strong>, MediaWiki archivia il testo UTF-8 nel database in cambi binari.\nQuesto è più efficiente rispetto alla modalità UTF-8 di MySQL, e consente di utilizzare la gamma completa di caratteri Unicode.\nIn <strong>modalità UTF-8</strong>, MySQL conoscerà in quale set di caratteri sono i tuoi dati, e può presentarli e convertirli in modo appropriato,\nma non ti permetterà di memorizzare i caratteri al di sopra del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
        "config-mysql-old": "MySQL $1 o una versione successiva è necessaria, rilevata la $2.",
        "config-db-port": "Porta del database:",
        "config-db-schema": "Schema per MediaWiki:",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki supporta i seguenti sistemi di database:\n\n$1\n\nSe fra quelli elencati qui sotto non vedi il sistema di database che vorresti utilizzare, seguire le istruzioni linkate sopra per abilitare il supporto.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] è la configurazione preferibile per MediaWiki ed è quella meglio supportata. MediaWiki funziona anche con [{{int:version-db-mariadb-url}} MariaDB] e [{{int:version-db-percona-url}} Percona Server], che sono compatibili con MySQL.([http://www.php.net/manual/en/mysqli.installation.php Come compilare PHP con supporto MySQL])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] è un popolare sistema di database open source come alternativa a MySQL. Ci possono essere alcuni bug minori in sospeso, e non è raccomandato per l'uso in un ambiente di produzione. ([http://www.php.net/manual/en/pgsql.installation.php Come compilare PHP con supporto PostgreSQL])",
+       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite]  è un sistema di database leggero, che è supportato molto bene. ([http://www.php.net/manual/en/pdo.installation.php Come compilare PHP con supporto SQLite], utilizza PDO)",
+       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] è un database di un'impresa commerciale. ([http://www.php.net/manual/en/oci8.installation.php Come compilare PHP con supporto OCI8])",
+       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] è un database di un'impresa commerciale per Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Come compilare PHP con supporto SQLSRV])",
        "config-header-mysql": "Impostazioni MySQL",
        "config-header-postgres": "Impostazioni PostgreSQL",
        "config-header-sqlite": "Impostazioni SQLite",
        "config-postgres-old": "PostgreSQL $1 o una versione successiva è necessaria, rilevata la $2.",
        "config-mssql-old": "Si richiede Microsoft SQL Server $1 o successivo. Tu hai la versione $2.",
        "config-sqlite-name-help": "Scegli un nome che identifichi il tuo wiki.\nNon utilizzare spazi o trattini.\nQuesto servirà per il nome del file di dati SQLite.",
+       "config-sqlite-parent-unwritable-group": "Non è possibile creare la directory dati <code><nowiki>$1</nowiki></code>, perché la directory superiore <code><nowiki>$2</nowiki></code> non è scrivibile dal webserver.\n\nIl programma di installazione ha determinato l'utente con cui il server web è in esecuzione.\nForniscigli la possibilità di scrivere nella directory <code><nowiki>$3</nowiki></code> per continuare.\nSu un sistema Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+       "config-sqlite-parent-unwritable-nogroup": "Non è possibile creare la directory dati <code><nowiki>$1</nowiki></code>, perché la directory superiore <code><nowiki>$2</nowiki></code> non è scrivibile dal webserver.\n\nIl programma di installazione non ha potuto determinare l'utente con cui il server web è in esecuzione.\nFornisci ad esso (ed altri!) la possibilità di scrivere globalmente nella directory <code><nowiki>$3</nowiki></code> per continuare.\nSu un sistema Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-sqlite-mkdir-error": "Errore durante la creazione della directory dati \"$1\".\nControlla la posizione e riprova.",
        "config-sqlite-dir-unwritable": "Impossibile scrivere nella directory \"$1\".\nModifica le autorizzazioni in modo che il webserver possa scrivere in essa e riprova.",
        "config-sqlite-connection-error": "$1.\n\nControlla la directory dati e il nome del database qui sotto, poi riprova.",
        "config-mysql-engine": "Storage engine:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
+       "config-mysql-myisam-dep": "<strong>Attenzione:</strong> hai selezionato MyISAM come motore di archiviazione per MySQL, che non è raccomandato per l'uso con  MediaWiki, perché:\n* supporta debolmente la concorrenza per il blocco della tabella\n* è più incline alla corruzione di altri motori\n* il codice di base MediaWiki non gestisce sempre MyISAM come dovrebbe\n\nSe la tua installazione MySQL supporta InnoDB, è altamente raccomandato che lo si scelga al suo posto.\nSe la tua installazione MySQL non supporta InnoDB, forse è il momento per un aggiornamento.",
+       "config-mysql-only-myisam-dep": "<strong>Attenzione:</strong> MyISAM è l'unico motore di archiviazione disponibile per MySQL su questa macchina, e questo non è consigliato per l'uso con MediaWiki, perché:\n* supporta debolmente la concorrenza per il blocco della tabella\n* è più incline alla corruzione di altri motori\n* il codice di base MediaWiki non gestisce sempre MyISAM come dovrebbe\n\nSe la tua installazione MySQL non supporta InnoDB, forse è il momento per un aggiornamento.",
+       "config-mysql-engine-help": "<strong>InnoDB</strong> è quasi sempre l'opzione migliore, in quanto ha un buon supporto della concorrenza.\n\n<strong>MyISAM</strong> potrebbe essere più veloce nelle installazioni monoutente o in sola lettura.\nI database MyISAM tendono a danneggiarsi più spesso dei database InnoDB.",
        "config-mysql-charset": "Set di caratteri del database:",
        "config-mysql-binary": "Binario",
        "config-mysql-utf8": "UTF-8",
+       "config-mysql-charset-help": "In <strong>modalità binaria</strong>, MediaWiki archivia il testo UTF-8 nel database in cambi binari.\nQuesto è più efficiente rispetto alla modalità UTF-8 di MySQL, e consente di utilizzare la gamma completa di caratteri Unicode.\n\nIn <strong>modalità UTF-8</strong>, MySQL conoscerà in quale set di caratteri sono i tuoi dati, e può presentarli e convertirli in modo appropriato, ma non ti permetterà di memorizzare i caratteri al di sopra del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
        "config-mssql-auth": "Tipo di autenticazione:",
+       "config-mssql-install-auth": "Seleziona il tipo di autenticazione che verrà utilizzato per connettersi al database durante il processo di installazione.\nSe si seleziona \"{{int:config-mssql-windowsauth}}\", saranno utilizzate le credenziali dell'utente con cui viene eseguito il server web, qualunque esso sia.",
+       "config-mssql-web-auth": "Seleziona il tipo di autenticazione che il server web utilizzerà per connettersi al database, durante il normale funzionamento del wiki.\nSe si seleziona \"{{int:config-mssql-windowsauth}}\", saranno utilizzate le credenziali dell'utente con cui viene eseguito il server web, qualunque esso sia.",
        "config-mssql-sqlauth": "Autenticazione di SQL Server",
        "config-mssql-windowsauth": "Autenticazione di Windows",
        "config-site-name": "Nome del wiki:",
        "config-ns-site-name": "Stesso nome del wiki: $1",
        "config-ns-other": "Altro (specificare)",
        "config-ns-other-default": "MyWiki",
+       "config-project-namespace-help": "Seguendo l'esempio di Wikipedia, molti wiki tengono le loro pagine con le regole separate dalle pagine di contenuto, in un \"'''namespace di progetto'''\".\nTutti i titoli delle pagine in questo namespace iniziano con un certo prefisso, che puoi indicare qui.\nSolitamente, questo prefisso deriva dal nome del wiki, ma non può contenere caratteri di punteggiatura come \"#\" o \":\".",
+       "config-ns-invalid": "Il namespace indicato \"<nowiki>$1</nowiki>\" non è valido.\nSpecificare un diverso namespace di progetto.",
+       "config-ns-conflict": "Il namespace indicato \"<nowiki>$1</nowiki>\" è in conflitto con un namespace predefinito MediaWiki.\nSpecificare un diverso namespace di progetto.",
        "config-admin-box": "Account amministratore",
        "config-admin-name": "Il tuo nome utente:",
        "config-admin-password": "Password:",
        "config-admin-name-invalid": "Il nome utente specificato \"<nowiki>$1</nowiki>\" non è valido.\nSpecificare un nome utente diverso.",
        "config-admin-password-blank": "Inserisci una password per l'account di amministratore.",
        "config-admin-password-mismatch": "Le password inserite non coincidono tra loro.",
-       "config-admin-email": "Indirizzo e-mail:",
+       "config-admin-email": "Indirizzo email:",
        "config-admin-email-help": "Inserisci qui un indirizzo email per poter ricevere email dagli altri utenti del wiki, reimpostare la tua password, ed essere informato delle modifiche apportate alle pagine tuoi osservati speciali. Se non ti interessa, puoi lasciare vuoto questo campo.",
        "config-admin-error-user": "Errore interno durante la creazione di un amministratore con il nome \"<nowiki>$1</nowiki>\".",
        "config-admin-error-password": "Errore interno durante l'impostazione di una password per amministratore \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
        "config-admin-error-bademail": "È stato inserito un indirizzo email non valido.",
        "config-subscribe": "Sottoscrivi la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailing list degli annunci di rilasci].",
-       "config-subscribe-help": "Si tratta di una mailing list a basso traffico dedicata agli annunci di nuove versioni, compresi importanti segnalazioni riguardanti la sicurezza.\nÈ consigliato iscriversi e aggiornare la proprio installazione di MediaWiki quando una nuova versione viene resa pubblica.",
+       "config-subscribe-help": "Si tratta di una mailing list a basso traffico dedicata agli annunci di nuove versioni, compresi importanti segnalazioni riguardanti la sicurezza.\nÈ consigliato iscriversi e aggiornare la propria installazione di MediaWiki quando una nuova versione viene resa pubblica.",
        "config-subscribe-noemail": "Hai provato ad iscriverti alla mailing list dedicata agli annunci delle nuove versioni senza fornire un indirizzo email.\nInserire un indirizzo email se si desidera effettuare l'iscrizione alla mailing list.",
        "config-almost-done": "Hai quasi finito!\nAdesso puoi saltare la rimanente parte della configurazione e semplicemente installare la wiki.",
        "config-optional-continue": "Fammi altre domande.",
        "config-profile-wiki": "Wiki aperto",
        "config-profile-no-anon": "Creazione utenza obbligatoria",
        "config-profile-fishbowl": "Solo editori autorizzati",
-       "config-profile-private": "Wiki privata",
+       "config-profile-private": "Wiki privato",
+       "config-profile-help": "I wiki funzionano meglio se si lascia che molte persone li possano modificare.\nIn MediaWiki, è semplice rivedere le ultime modifiche, e ripristinare i danni causati da utenti ingenui o malintenzionati.\n\nTuttavia, molti hanno trovato MediaWiki essere utile in un'ampia varietà di ruoli, e a volte non è facile convincere tutti i vantaggi della modalità wiki.\nPerciò, fai la tua scelta.\n\nIl modello <strong>{{int:config-profile-wiki}}</strong> consente a chiunque di modificare, anche senza effettuare l'accesso.\nUn wiki con <strong>{{int:config-profile-no-anon}}</strong> offre una maggiore responsabilità, ma potrebbe scoraggiare i contributori occasionali.\n\nLo scenario <strong>{{int:config-profile-fishbowl}}</strong> consente agli utenti autorizzati di modificare, ma il pubblico può visualizzare le pagine, compresa la cronologia.\nUn <strong>{{int:config-profile-private}}</strong> consente solo agli utenti autorizzati di visualizzare le pagine, lo stesso gruppo può modificarle.\n\nConfigurazioni di diritti utente più complesse sono disponibili dopo l'installazione, vedi la  [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights parte relativa del manuale].",
        "config-license": "Copyright e licenza:",
        "config-license-none": "Nessun piè di pagina per la licenza",
        "config-license-cc-by-sa": "Creative Commons Attribuzione-Condividi allo stesso modo",
        "config-license-help": "Molti wiki pubblici rilasciano i loro contributi con una [http://freedomdefined.org/Definition licenza libera]. Questo aiuta a creare un senso di proprietà condivisa nella comunità e incoraggia a contribuire a lungo termine. Non è generalmente necessario per un wiki privato o aziendale.\n\nSe vuoi usare testi da Wikipedia, o desideri che Wikipedia possa essere in grado di accettare testi copiati dal tuo wiki, dovresti scegliere <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nIn precedenza Wikipedia ha utilizzato la GNU Free Documentation License. La GFDL è una licenza valida, ma è di difficile comprensione e complica il riutilizzo dei contenuti.",
        "config-email-settings": "Impostazioni email",
        "config-enable-email": "Abilita la posta elettronica in uscita",
+       "config-enable-email-help": "Se vuoi che funzionino le email, le [http://www.php.net/manual/en/mail.configuration.php PHP's impostazioni della posta] devono essere configurate correttamente.\nSe non si desidera alcuna funzionalità di posta elettronica, puoi disabilitarla qui.",
        "config-email-user": "Abilita invio email fra utenti",
        "config-email-user-help": "Consente a tutti gli utenti di inviarsi a vicenda email, se lo hanno abilitato nelle loro preferenze.",
        "config-email-usertalk": "Abilita le notifiche per le pagine di discussione utente",
        "config-email-watchlist": "Abilita le notifiche per gli osservati speciali",
        "config-email-watchlist-help": "Consente agli utenti di ricevere notifiche per pagine tra gli osservati speciali, se lo hanno abilitato nelle loro preferenze.",
        "config-email-auth": "Abilita autenticazione via email",
+       "config-email-auth-help": "Se questa opzione è attivata, gli utenti dovranno confermare il loro indirizzo email utilizzando un collegamento che viene inviato ogni volta che lo impostano o lo modificano.\nSolo gli indirizzi di posta elettronica autenticati possono ricevere email da altri utenti o modificare le email di notifica.\nImpostare questa opzione è <strong>raccomandato</strong> per wiki pubblici a causa del potenziale abuso delle funzioni di posta elettronica.",
        "config-email-sender": "Indirizzo email di ritorno:",
+       "config-email-sender-help": "Inserisci l'indirizzo email da utilizzare come indirizzo di ritorno per la posta in uscita.\nQuesto è dove verranno inviati gli eventuali errori.\nMolti server di posta richiedono che almeno la parte del nome di dominio sia valido.",
        "config-upload-settings": "Caricamenti di immagini e file",
        "config-upload-enable": "Consentire il caricamento di file",
+       "config-upload-help": "Il caricamento di file può potenzialmente esporre il tuo server a rischi di sicurezza.\nPer ulteriori informazioni, leggi la  [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security sezione sulla sicurezza] nel manuale.\n\nPer consentire il caricamento di file, modificare la modalità nella sottodirectory <code>images</code> della directory principale di MediaWiki affinché il server web possa scriverci.\nPoi attivare questa opzione.",
        "config-upload-deleted": "Directory per i file cancellati:",
        "config-upload-deleted-help": "Scegli una directory in cui archiviare i file cancellati.\nIdealmente, questa non dovrebbe essere accessibile dal web.",
        "config-logo": "URL del logo:",
        "config-logo-help": "La skin predefinita di MediaWiki include lo spazio per un logo di 135 x 160 pixel sopra il menu laterale.\nCarica un'immagine di dimensioni appropriate e inserisci l'URL qui.\n\nÈ possibile utilizzare <code>$wgStylePath</code> o <code>$wgScriptPath</code> se il logo è relativo a tali percorsi.\n\nSe non si desidera un logo, lascia vuota questa casella.",
        "config-instantcommons": "Abilita Instant Commons",
+       "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] è una funzionalità che consente ai wiki di usare immagini, suoni e altri file multimediali che trovate sul sito [//commons.wikimedia.org/ Wikimedia Commons].\nPer fare questo, MediaWiki richiede l'accesso a Internet.\n\nPer ulteriori informazioni su questa funzionalità, incluse le istruzioni su come configurarlo per wiki diversi da Wikimedia Commons, consultare [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos il manuale].",
        "config-cc-error": "Il selettore di licenze Creative Commons non ha dato alcun risultato.\nInserisci manualmente il nome della licenza.",
        "config-cc-again": "Seleziona di nuovo...",
        "config-cc-not-chosen": "Scegliere quale licenza Creative Commons si desidera e cliccare su \"procedi\".",
        "config-memcache-badport": "I numeri di porta per memcached dovrebbero essere tra $1 e $2.",
        "config-extensions": "Estensioni",
        "config-extensions-help": "Le estensioni elencate sopra sono state rilevate nella tua directory <code>./extensions</code>.\n\nQueste potrebbero richiedere ulteriore configurazione, ma è possibile attivarle ora",
+       "config-skins": "Skin",
+       "config-skins-help": "Le skin elencate sopra sono state rilevate nella tua directory <code>./skins</code>. Devi attivarne almeno una e scegliere quella predefinita.",
+       "config-skins-use-as-default": "Usa questa skin come predefinita",
+       "config-skins-missing": "Non è stata trovata alcuna skin, MediaWiki userà una soluzione di ripiego finché non ne installerai una appropriata.",
+       "config-skins-must-enable-some": "Devi scegliere almeno una skin da attivare.",
+       "config-skins-must-enable-default": "La skin scelta come predefinita deve essere attivata.",
        "config-install-alreadydone": "'''Attenzione:''' sembra che hai già installato MediaWiki e stai tentando di installarlo nuovamente.\nProcedi alla pagina successiva.",
        "config-install-begin": "Premendo \"{{int:config-continue}}\", si avvierà l'installazione di MediaWiki.\nSe prima desideri apportare altre modifiche, premi \"{{int:config-back}}\".",
        "config-install-step-done": "fatto",
        "config-install-pg-plpgsql": "Controllo il linguaggio PL/pgSQL",
        "config-pg-no-plpgsql": "È necessario installare il linguaggio PL/pgSQL nel database $1",
        "config-pg-no-create-privs": "L'account indicato per l'installazione non dispone dei permessi necessari per creare un'utenza.",
+       "config-pg-not-in-role": "L'account indicato per l'utente web esiste già.\nL'account indicato per l'installazione non è un utente avanzato e non è un membro del ruolo degli utente web, quindi non è in grado di creare oggetti di proprietà dell'utente web.\n\nMediaWiki attualmente richiede che le tabelle siano di proprietà dell'utente web. Indica un altro account web, o fai click su  \"indietro\" e specifica un utente per l'installazione opportunamente privilegiato.",
        "config-install-user": "Creazione di utente del database",
        "config-install-user-alreadyexists": "L'utente \"$1\" è già presente",
        "config-install-user-create-failed": "Creazione dell'utente \"$1\" non riuscita: $2",
        "config-install-stats": "Inizializzazione delle statistiche",
        "config-install-keys": "Generazione delle chiavi segrete",
        "config-insecure-keys": "'''Attenzione:''' {{PLURAL:$2|Una chiave sicura|Delle chiavi sicure}} ($1) {{PLURAL:$2|generata|generate}} durante l'installazione non {{PLURAL:$2|è|sono}} completamente {{PLURAL:$2|sicura|sicure}}. Considera di {{PLURAL:$2|cambiarla|cambiarle}} manualmente.",
+       "config-install-updates": "Impedire l'esecuzione di aggiornamenti non necessari",
+       "config-install-updates-failed": "<strong>Errore:</strong> l'inserimento delle chiavi di aggiornamento nelle tabelle non è riuscito con il seguente errore: $1",
        "config-install-sysop": "Creazione dell'account utente per l'amministratore",
        "config-install-subscribe-fail": "Impossibile sottoscrivere mediawiki-announce: $1",
        "config-install-subscribe-notpossible": "cURL non è installato e <code>allow_url_fopen</code> non è disponibile.",
index 39ebf87..dedc3c2 100644 (file)
@@ -58,6 +58,7 @@
        "config-env-good": "環境を確認しました。\nMediaWiki をインストールできます。",
        "config-env-bad": "環境を確認しました。\nMediaWiki のインストールはできません。",
        "config-env-php": "PHP $1がインストールされています。",
+       "config-env-hhvm": "HHVM $1 がインストールされています。",
        "config-unicode-using-utf8": "Unicode正規化に、Brion Vibberのutf8_normalize.soを使用。",
        "config-unicode-using-intl": "Unicode正規化に[http://pecl.php.net/intl intl PECL 拡張機能]を使用。",
        "config-unicode-pure-php-warning": "<strong>警告:</strong> Unicode 正規化の処理に [http://pecl.php.net/intl intl PECL 拡張機能]を利用できないため、処理が遅いピュア PHP の実装を代わりに使用しています。\n高トラフィックのサイトを運営する場合は、[//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode 正規化]をお読みください。",
        "config-install-stats": "統計情報の初期化",
        "config-install-keys": "秘密鍵の生成",
        "config-insecure-keys": "<strong>警告:</strong> インストール中に生成されたセキュアキー ($1) は完璧に安全ではありません。手動で変更することを検討してください。",
+       "config-install-updates": "不要な更新を実行するのを防ぐ",
        "config-install-sysop": "管理者のアカウントの作成",
        "config-install-subscribe-fail": "mediawiki-announce を購読できませんでした: $1",
        "config-install-subscribe-notpossible": "cURL がインストールされていないため、<code>allow_url_fopen</code> を利用できません。",
index bc828a5..081f50f 100644 (file)
@@ -5,17 +5,18 @@
                        "아라",
                        "Hym411",
                        "Priviet",
-                       "Namoroka"
+                       "Namoroka",
+                       "Revi"
                ]
        },
        "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-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": "ì\9e\85ë ¥한 키가 잘못되었습니다.",
-       "config-upgrade-key-missing": "기존에 설치 했던 미디어위키를 감지했습니다.\n이 설치를 업그레이드하려면 <code>LocalSettings.php</code>의 아래에 다음 줄을 넣으세요:\n\n$1",
+       "config-localsettings-badkey": "ì \9cê³µ한 키가 잘못되었습니다.",
+       "config-upgrade-key-missing": "미디어위키의 기존 설치를 감지했습니다.\n이 설치를 업그레이드하려면, <code>LocalSettings.php</code>의 아래에 다음 줄을 넣으세요:\n\n$1",
        "config-localsettings-incomplete": "기존 <code>LocalSettings.php</code>가 완전하지 않은 것 같습니다.\n$1 변수가 설정되어 있지 않습니다.\n이 변수가 설정되도록 <code>LocalSettings.php</code>를 바꾸고 \"{{int:Config-continue}}\"을 클릭하세요.",
        "config-localsettings-connection-error": "<code>LocalSettings.php</code>에 지정한 설정을 사용하여 데이터베이스에 연결할 때 오류가 발생했습니다. 이러한 설정을 고치고 다시 시도하세요.\n\n$1",
        "config-session-error": "세션 시작 오류: $1",
        "config-help-restart": "입력한 모든 저장된 데이터를 지우고 설치 과정을 다시 시작하겠습니까?",
        "config-restart": "예, 다시 시작합니다",
        "config-welcome": "=== 사용 환경 검사 ===\n기본 검사는 지금 이 환경이 미디어위키 설치에 적합한지 수행합니다.\n설치를 완료하는 방법에 대한 지원을 찾는다면 이 정보를 포함해야 하는 것을 기억하세요.",
-       "config-copyright": "=== ì \80ì\9e\91ê¶\8c ë°\8f ì\9d´ì\9a© ì\95½ê´\80 ===\n\n$1\n\nì\9d´ í\94\84ë¡\9cê·¸ë\9e¨ì\9d\80 ì\9e\90ì\9c  ì\86\8cí\94\84í\8a¸ì\9b¨ì\96´ì\9e\85ë\8b\88ë\8b¤. ë\8b¹ì\8b ì\9d\80 ì\9e\90ì\9c  ì\86\8cí\94\84í\8a¸ì\9b¨ì\96´ ì\9e¬ë\8b¨ì\9d´ ë°\9cí\91\9cí\95\9c GNU ì\9d¼ë°\98 ê³µì¤\91 ì\82¬ì\9a© í\97\88ê°\80ì\84\9c ë²\84ì \84 2ë\82\98 ê·¸ ì\9d´í\9b\84 ë²\84ì \84ì\97\90 ë\94°ë\9d¼ ì\9d´ í\94\84ë¡\9cê·¸ë\9e¨ì\9d\84 ì\9e¬ë°°í\8f¬í\95\98ê±°ë\82\98 ì\88\98ì \95í\95  ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤.\n\nì\9d´ í\94\84ë¡\9cê·¸ë\9e¨ì\9d´ ì\9c ì\9a©í\95\98ê²\8c ì\82¬ì\9a©ë\90  ì\88\98 ì\9e\88기를 ë°\94ë\9d¼ì§\80ë§\8c '''ì\83\81ì\9a©ì\9c¼ë¡\9c ì\82¬ì\9a©'''ë\90\98ê±°ë\82\98 '''í\8a¹ì \95 ëª©ì \81ì\97\90 ë§\9eì\9d\84 ê²\83'''ì\9d´ë\9d¼ë\8a\94 ê²\83ì\9d\84 '''ë³´ì¦\9dí\95\98ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤'''.\nì\9e\90ì\84¸í\95\9c ë\82´ì\9a©ì\9d\80 GNU ì\9d¼ë°\98 ê³µì¤\91 ì\82¬ì\9a© í\97\88ê°\80ì\84\9c를 ì°¸ê³ í\95\98ì\8b­ì\8b\9cì\98¤.\n\në\8b¹ì\8b ì\9d\80 ì\9d´ í\94\84ë¡\9cê·¸ë\9e¨ì\9d\84 í\86µí\95´ <doclink href=Copying>GNU ì\9d¼ë°\98 ê³µì¤\91 ì\82¬ì\9a© í\97\88ê°\80ì\84\9c ì \84문</doclink>ì\9d\84 ë°\9bì\95\98ì\8aµë\8b\88ë\8b¤. ê·¸ë \87ì§\80 ì\95\8aë\8b¤ë©´, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USAë¡\9c í\8e¸ì§\80를 ë³´ë\82´ì£¼ì\8b\9cê±°ë\82\98 [http://www.gnu.org/copyleft/gpl.html ì\98¨ë\9d¼ì\9d¸ì\9c¼ë¡\9c ì\9d½ì\96´ë³´ì\8b\9c기] ë°\94ë\9e\8dë\8b\88ë\8b¤.",
+       "config-copyright": "=== 저작권 및 약관 ===\n\n$1\n\n이 프로그램은 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 프로그램을 재배포하거나 수정할 수 있습니다.\n\n이 프로그램이 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''.\n자세한 내용은 GNU 일반 공중 사용 허가서를 참고하십시오.\n\n당신은 이 프로그램을 통해 <doclink href=Copying>GNU 일반 공중 사용 허가서 전문</doclink>을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [http://www.gnu.org/copyleft/gpl.html 온라인으로 읽어보시기] 바랍니다.",
        "config-sidebar": "* [//www.mediawiki.org 미디어위키 홈]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 사용자 가이드]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents 관리자 가이드]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>읽어보기</doclink>\n* <doclink href=ReleaseNotes>릴리스 노트</doclink>\n* <doclink href=Copying>전문</doclink>\n* <doclink href=UpgradeDoc>업그레이드하기</doclink>",
        "config-env-good": "환경이 확인되었습니다.\n미디어위키를 설치할 수 있습니다.",
        "config-env-bad": "환경이 확인되었습니다.\n미디어위키를 설치할 수 없습니다.",
-       "config-env-php": "PHP $1(이)가 설치되었습니다.",
+       "config-env-php": "PHP $1이(가) 설치되어 있습니다.",
+       "config-env-hhvm": "HHMV $1이(가) 설치되어 있습니다.",
        "config-unicode-using-utf8": "유니코드 정규화에 Brion Vibber의 utf8_normalize.so를 사용합니다.",
        "config-unicode-using-intl": "유니코드 정규화에 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용합니다.",
-       "config-unicode-pure-php-warning": "'''경고''': 유니코드 정규화를 처리할 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용할 수 없기 때문에 느린 pure-PHP 구현을 대신 사용합니다.\n트래픽이 높은 사이트에서 실행하시려면 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 유니코드 정규화]를 읽어보시기 바랍니다.",
-       "config-unicode-update-warning": "'''경고''': 유니코드 정규화 래퍼의 설치된 버전은 [http://site.icu-project.org/ ICU 프로젝트]의 라이브러리의 이전 버전을 사용합니다.\n만약 유니코드를 사용하는 것에 대해 우려가 된다면 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 업그레이드]해야합니다.",
+       "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-outdated-sqlite": "'''경고''': 최소인 $2 버전보다 낮은 SQLite $1(이)가 있습니다. SQLite를 사용할 수 없습니다.",
-       "config-no-fts3": "'''경고''': SQLite를 [//sqlite.org/fts3.html FTS3 모듈] 없이 컴파일하며, 검색 기능은 백엔드에 사용할 수 없습니다.",
+       "config-outdated-sqlite": "<strong>경고</strong>: 최소인 $2 버전보다 낮은 SQLite $1(이)가 있습니다. SQLite를 사용할 수 없습니다.",
+       "config-no-fts3": "<strong>경고</strong>: SQLite를 [//sqlite.org/fts3.html FTS3 모듈] 없이 컴파일하며, 검색 기능은 백엔드에 사용할 수 없습니다.",
        "config-register-globals-error": "<strong>오류: PHP의 <code>[http://php.net/register_globals register_globals]</code> 옵션이 활성화되어 있습니다.\n설치를 계속하려면 비활성화해야 합니다.</strong>\n어떻게 하는지에 대한 도움말에 대해서는 [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals]를 보세요.",
-       "config-magic-quotes-runtime": "'''치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]이 활성화됩니다!'''\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상이 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
-       "config-magic-quotes-sybase": "'''치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]이 활성화됩니다!'''\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상을 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
-       "config-mbstring": "'''치명: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]이 활성화됩니다!'''\n이 옵션은 오류가 발생하고 데이터를 입력하는 데 예기치 않는 손상을 일으킬 수 있습니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
-       "config-safe-mode": "'''경고:''' [http://www.php.net/features.safe-mode 안전 모드]가 활성화됩니다!\n특히 파일을 올리거나 <code>math</code>를 지원하는 데 문제가 발생할 수 있습니다.",
+       "config-magic-quotes-gpc": "<strong>치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc]이 활성화되어 있습니다!</strong>\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상을 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
+       "config-magic-quotes-runtime": "<strong>치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]이 활성화되어 있습니다!</strong>\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상이 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
+       "config-magic-quotes-sybase": "<strong>치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]이 활성화되어 있습니다!</strong>\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상을 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
+       "config-mbstring": "<strong>치명: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]이 활성화되어 있습니다!</strong>\n이 옵션은 오류가 발생하고 데이터를 입력하는 데 예기치 않는 손상을 일으킬 수 있습니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
+       "config-safe-mode": "<strong>경고:</strong> PHP의 [http://www.php.net/features.safe-mode 안전 모드]가 활성화되어 있습니다!\n특히 파일을 올리거나 <code>math</code>를 지원하는 데 문제가 발생할 수 있습니다.",
        "config-xml-bad": "PHP의 XML 모듈이 없습니다.\n미디어위키는 이 모듈의 기능이 필요하며 이 설정에서는 작동하지 않습니다.\nMandrake를 실행하고 있다면 php-xml 패키지를 설치하세요.",
-       "config-pcre-old": "'''치명적인 오류:''' PCRE $1 또는 이후의 것들이 필요합니다. 당신의 PHP 바이너리는 PCRE $2와 연결되어 있습니다. [https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE 더 많은 정보].",
-       "config-pcre-no-utf8": "'''치명''': PHP의 PCRE 모듈은 RCRE_UTF8 지원 없이 컴파일된 것 같습니다.\n미디어위키가 제대로 작동하려면 UTF-8을 지원해야 합니다.",
+       "config-pcre-old": "<strong>치명:</strong> PCRE $1 또는 그 이상이 필요합니다.\nPHP 바이너리는 PCRE $2에 연결되어 있습니다. [https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE 자세한 정보].",
+       "config-pcre-no-utf8": "<strong>치명:</strong> PHP의 PCRE 모듈은 RCRE_UTF8 지원 없이 컴파일된 것 같습니다.\n미디어위키가 올바르게 작동하려면 UTF-8을 지원해야 합니다.",
        "config-memory-raised": "PHP의 <code>memory_limit</code>는 $1이며 $2(으)로 늘렸습니다.",
        "config-memory-bad": "'''경고:''' PHP의 <code>memory_limit</code>는 $1입니다.\n아마도 너무 낮은 것 같습니다.\n설치가 실패할 수 있습니다!",
        "config-ctype": "'''치명''': PHP는 [http://www.php.net/manual/en/ctype.installation.php Ctype 확장 기능]을 지원하도록 하여 컴파일해야 합니다.",
+       "config-iconv": "<strong>치명</strong>: PHP는 [http://www.php.net/manual/en/iconv.installation.php iconv 확장 기능]을 지원하도록 하여 컴파일해야 합니다.",
        "config-json": "'''치명:''' PHP가 JSON 지원이 없이 컴파일되었습니다.\n미디어위키를 설치하기 전에 PHP JSON 확장 기능이나 [http://pecl.php.net/package/jsonc PECL jsonc] 확장 기능 중 하나를 설치해야 합니다.\n* PHP 확장 기능은 Red Hat Enterprise Linux (CentOS) 5와 6에 포함되어 있지만, <code>/etc/php.ini</code>나 <code>/etc/php.d/json.ini</code>에서 활성화해야 합니다.\n* 2013년 5월 이후에 출시된 일부 리눅스 배포판은 PHP 확장 기능이 생략된 대신, <code>php5-json</code>이나 <code>php-pecl-jsonc</code>로 PECL 확장 기능이 포장되어 있습니다.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache]가 설치되었습니다",
        "config-apc": "[http://www.php.net/apc APC]가 설치되었습니다",
        "config-suhosin-max-value-length": "수호신(Suhosin)이 설치되고 $1 바이트로 GET 매개 변수 <code>length</code>를 제한하고 있습니다.\n미디어위키의 ResourceLoader 구성 요소는 이 제한을 회피하지만 성능이 저하됩니다.\n가능하면 <code>php.ini</code>의 <code>suhosin.get.max_value_length</code>를 1024 이상으로 설정하고 <code>LocalSettings.php</code>의 <code>$wgResourceLoaderMaxQueryLength</code>를 같은 값으로 설정해야 합니다.",
        "config-db-type": "데이터베이스 종류:",
        "config-db-host": "데이터베이스 호스트:",
-       "config-db-host-help": "ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ ì\84\9cë²\84ê°\80 ë\8b¤ë¥¸ ì\84\9cë²\84ì\97\90 ì\9e\88ì\9c¼ë©´ ì\97¬ê¸°ì\97\90 í\98¸ì\8a¤í\8a¸ ì\9d´ë¦\84ì\9d´ë\82\98 IP ì£¼ì\86\8c를 ì\9e\85ë ¥í\95\98ì\84¸ì\9a\94.\n\nê³µì\9c í\95\98ë\8a\94 ì\9b¹ í\98¸ì\8a¤í\8c\85ì\9d\84 ì\82¬ì\9a©í\95\98ê³  ì\9e\88ì\9c¼ë©´ í\98¸ì\8a¤í\8c\85 ì \9cê³µ ì\97\85ì²´ë\8a\94 ì \95í\99\95í\95\9c í\98¸ì\8a¤í\8a¸ ì\9d´ë¦\84ì\9d\84 ì\84¤ëª\85í\95\98ê³  ì\9e\88ì\9d\84 ê²\83ì\9e\85ë\8b\88ë\8b¤.\n\nì\9c\88ë\8f\84 ì\84\9cë²\84ì\97\90 ì\84¤ì¹\98í\95\98ê³  MySQLì\9d\84 ì\82¬ì\9a©í\95\98ë©´ \"localhost\"ê°\80 í\95´ë\8b¹ 서버 이름으로는 작동하지 않을 수 있습니다. 그렇게 된다면 로컬 IP 주소로 \"127.0.0.1\"을 시도하세요.\n\nPostgreSQL을 사용하면 유닉스 소켓을 통해 연결되도록 입력란을 비워두세요.",
+       "config-db-host-help": "ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ ì\84\9cë²\84ê°\80 ë\8b¤ë¥¸ ì\84\9cë²\84ì\97\90 ì\9e\88ì\9c¼ë©´ ì\97¬ê¸°ì\97\90 í\98¸ì\8a¤í\8a¸ ì\9d´ë¦\84ì\9d´ë\82\98 IP ì£¼ì\86\8c를 ì\9e\85ë ¥í\95\98ì\84¸ì\9a\94.\n\nê³µì\9c í\95\98ë\8a\94 ì\9b¹ í\98¸ì\8a¤í\8c\85ì\9d\84 ì\82¬ì\9a©í\95\98ê³  ì\9e\88ì\9c¼ë©´ í\98¸ì\8a¤í\8c\85 ì \9cê³µ ì\97\85ì²´ë\8a\94 ì\98¬ë°\94른 í\98¸ì\8a¤í\8a¸ ì\9d´ë¦\84ì\9d\84 ì\84¤ëª\85í\95\98ê³  ì\9e\88ì\9d\84 ê²\83ì\9e\85ë\8b\88ë\8b¤.\n\nWindows ì\84\9cë²\84ì\97\90 ì\84¤ì¹\98í\95\98ê³  MySQLì\9d\84 ì\82¬ì\9a©í\95\98ë©´ \"localhost\"ê°\80 서버 이름으로는 작동하지 않을 수 있습니다. 그렇게 된다면 로컬 IP 주소로 \"127.0.0.1\"을 시도하세요.\n\nPostgreSQL을 사용하면 유닉스 소켓을 통해 연결되도록 입력란을 비워두세요.",
        "config-db-host-oracle": "데이터베이스 TNS:",
        "config-db-host-oracle-help": "올바른 [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 로컬 연결 이름]을 입력하세요. tnsnames.ora 파일이 이 설치 위치에서 참조할 수 있는 곳에 있어야 합니다.<br />10g 이후의 클라이언트 라이브러리를 사용하는 경우 [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 쉬운 연결] 네이밍 메서드도 사용할 수 있습니다.",
        "config-db-wiki-settings": "이 위키 식별",
        "config-db-name": "데이터베이스 이름:",
        "config-db-name-help": "위키를 식별하기 위한 이름을 선택하세요.\n공백이 없어야 합니다.\n\n공유하는 웹 호스팅 사용하면 호스팅 제공 업체가 특정 데이터베이스 이름을 제공하거나 제어판에서 데이터베이스를 만들 수 있습니다.",
        "config-db-name-oracle": "데이터베이스 스키마:",
-       "config-db-account-oracle-warn": "데이터베이스 백엔드로 오라클을 설치하기 위해 지원하는 세 가지 시나리오가 있습니다:\n\n설치 과정의 일부로 데이터베이스 계정을 만들려면 설치를 위해 데이터베이스 계정으로 SYSDBA 역할을 가진 계정을 제공하고 웹 접근 계정에 대해 원하는 자격 증명을 지정하세요, 그렇지 않으면 수동으로 웹 접근 계정을 만들 수 있으며 (스키마 개체를 만들 권한이 필요한 경우) 또는 생성 권한으 가진 계정과 웹 접근이 제한된 계정의 두 가지 다른 계정을 제공할 수도 있습니다\n\n필요한 권한을 가진 계정을 만드는 스크립트는 이 설치 위치의 \"maintenance/oracle/\" 디렉터리에서 찾을 수 있습니다. 제한된 계정을 사용하면 기본 계정의 모든 유지 관리 기능이 비활성화된다는 점에 유의하십시오.",
+       "config-db-account-oracle-warn": "데이터베이스 백엔드로 Oracle을 설치하기 위해 지원하는 세 가지 시나리오가 있습니다:\n\n설치 과정의 일부로 데이터베이스 계정을 만들려면 설치를 위해 데이터베이스 계정으로 SYSDBA 역할을 가진 계정을 제공하고 웹 접근 계정에 대해 원하는 자격 증명을 지정하세요, 그렇지 않으면 수동으로 웹 접근 계정을 만들 수 있으며 (스키마 개체를 만들 권한이 필요한 경우) 또는 생성 권한을 가진 계정과 웹 접근이 제한된 계정의 두 가지 다른 계정을 제공할 수도 있습니다\n\n필요한 권한을 가진 계정을 만드는 스크립트는 이 설치 위치의 \"maintenance/oracle/\" 디렉터리에서 찾을 수 있습니다. 제한된 계정을 사용하면 기본 계정의 모든 유지 관리 기능이 비활성화된다는 점에 유의하십시오.",
        "config-db-install-account": "설치를 위한 사용자 계정",
        "config-db-username": "데이터베이스 사용자 이름:",
        "config-db-password": "데이터베이스 비밀번호:",
        "config-oracle-temp-ts": "임시 테이블공간:",
        "config-type-mysql": "MySQL (또는 호환되는 데이터베이스 시스템)",
        "config-type-oracle": "Oracle",
-       "config-type-mssql": "마이크로소프트 SQL 서버",
+       "config-type-mssql": "Microsoft SQL 서버",
        "config-support-info": "미디어위키는 다음의 데이터베이스 시스템을 지원합니다:\n\n$1\n\n데이터베이스 시스템이 표시되지 않을 때 아래에 나열된 다음 지원을 활성화하려면 위의 링크된 지시에 따라 설치해볼 수 있습니다.",
-       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL]은 미디어위키의 기본 대상이며 가장 잘 지원됩니다. 미디어위키는 또한 MySQL와 호환되는 [{{int:version-db-mariadb-url}} MariaDB]와 [{{int:version-db-percona-url}} Percona 서버]에서도 작동합니다. \n\n([http://www.php.net/manual/en/mysql.installation.php MySQL을 지원하여 PHP를 컴파일하는 방법])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL]은 MySQL의 대안으로서 인기 있는 오픈 소스 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQL을 지원하여 PHP를 컴파일하는 방법]) 몇 가지 해결하지 못한 사소한 버그가 있을 수 있으며, 이를 제작 환경에서 사용하지 않는 것이 좋습니다.",
-       "config-dbsupport-sqlite": "*  [{{int:version-db-sqlite-url}} SQLite]는 매우 잘 지원되고 가벼운 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pdo.installation.php SQLite를 지원하여 PHP를 컴파일하는 방법], PDO 사용)",
-       "config-dbsupport-oracle": "*  [{{int:version-db-oracle-url}} 오라클]은 상용 엔터프라이스 데이터베이스입니다. ([http://www.php.net/manual/en/oci8.installation.php OCI8을 지원하여 PHP를 컴파일하는 방법])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} 마이크로소프트 SQL 서버]는 윈도용 상용 기업 데이터베이스입니다.([http://www.php.net/manual/en/sqlsrv.installation.php SQLSRV 지원으로 PHP를 컴파일하는 방법])",
+       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL]은 미디어위키의 기본 대상이며 가장 잘 지원됩니다. 미디어위키는 또한 MySQL와 호환되는 [{{int:version-db-mariadb-url}} MariaDB]와 [{{int:version-db-percona-url}} Percona 서버]에서도 작동합니다. ([http://www.php.net/manual/en/mysql.installation.php MySQL 지원으로 PHP를 컴파일하는 방법])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL]은 MySQL의 대안으로서 인기 있는 오픈 소스 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQL 지원으로 PHP를 컴파일하는 방법]) 몇 가지 해결하지 못한 사소한 버그가 있을 수 있으며, 이를 제작 환경에서 사용하지 않는 것이 좋습니다.",
+       "config-dbsupport-sqlite": "*  [{{int:version-db-sqlite-url}} SQLite]는 매우 잘 지원되고 가벼운 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pdo.installation.php SQLite 지원으로 PHP를 컴파일하는 방법], PDO 사용)",
+       "config-dbsupport-oracle": "*  [{{int:version-db-oracle-url}} Oracle]은 상용 기업 데이터베이스입니다. ([http://www.php.net/manual/en/oci8.installation.php OCI8 지원으로 PHP를 컴파일하는 방법])",
+       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL 서버]는 Windows용 상용 기업 데이터베이스입니다. ([http://www.php.net/manual/en/sqlsrv.installation.php SQLSRV 지원으로 PHP를 컴파일하는 방법])",
        "config-header-mysql": "MySQL 설정",
        "config-header-postgres": "PostgreSQL 설정",
        "config-header-sqlite": "SQLite 설정",
        "config-header-oracle": "Oracle 설정",
-       "config-header-mssql": "마이크로소프트 SQL 서버 설정",
+       "config-header-mssql": "Microsoft SQL 서버 설정",
        "config-invalid-db-type": "잘못된 데이터베이스 종류",
        "config-missing-db-name": "\"{{int:config-db-name}}\"에 대한 값을 입력해야 합니다.",
        "config-missing-db-host": "\"{{int:config-db-host}}\"에 대한 값을 입력해야 합니다.",
        "config-missing-db-server-oracle": "\"{{int:config-db-host-oracle}}\"에 대한 값을 입력해야 합니다.",
-       "config-invalid-db-server-oracle": "\"$1\" 데이터베이스 TNS가 잘못됐습니다.\n\"TNS Name\"이나 \"Easy Connect\" 문자열 중 하나를 사용하세요 ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm 오라클 네이밍 메서드])",
+       "config-invalid-db-server-oracle": "\"$1\" 데이터베이스 TNS가 잘못됐습니다.\n\"TNS Name\"이나 \"Easy Connect\" 문자열 중 하나를 사용하세요 ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle 네이밍 메서드]).",
        "config-invalid-db-name": "\"$1\" 데이터베이스 이름이 잘못되었습니다.\nASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.",
        "config-invalid-db-prefix": "\"$1\" 데이터베이스 접두어가 잘못됐습니다.\nASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.",
        "config-connection-error": "$1.\n\n호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.",
        "config-db-sys-create-oracle": "설치 프로그램은 새 계정을 만들기 위한 SYSDBA 계정만을 지원합니다.",
        "config-db-sys-user-exists-oracle": "\"$1\" 사용자 계정이 이미 존재합니다. SYSDBA는 새 계정을 만드는 데에만 사용할 수 있습니다!",
        "config-postgres-old": "PostgreSQL $1 이상이 필요하나 $2(이)가 있습니다.",
-       "config-mssql-old": "마이크로소프트 SQL 서버 $1 이상의 버전이 필요합니다. 현재 버전은 $2입니다.",
+       "config-mssql-old": "Microsoft SQL 서버 $1 이상의 버전이 필요합니다. 현재 버전은 $2입니다.",
        "config-sqlite-name-help": "위키를 식별하기 위한 이름을 선택하세요.\n공백이나 하이픈을 사용하지 마십시오.\nSQLite 데이터 파일 이름에 사용됩니다.",
        "config-sqlite-parent-unwritable-group": "<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며, 이는 웹 서버는 상위 디렉토리인 <code><nowiki>$2</nowiki></code>에 쓸 수 없기 때문입니다.\n\n설치 프로그램은 웹 서버로 실행 중인 사용자를 지정할 수 없습니다.\n계속하려면 웹 서버가 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.\n유닉스/리눅스 시스템에서의 수행:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며, 이는 웹 서버가 상위 디렉토리인 <code><nowiki>$2</nowiki></code>에 쓸 수 없기 때문입니다.\n\n설치 프로그램은 웹 서버로 실행 중인 사용자를 지정할 수 없습니다.\n계속하려면 웹 서버(와 그 외 서버!)가 전역으로 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.\n유닉스/리눅스 시스템에서의 수행:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-extensions": "확장 기능",
        "config-extensions-help": "위에 나열된 확장 기능이 <code>./extensions</code>에서 발견되었습니다.\n\n추가적인 설정이 필요할 수 있습니다만 지금 활성화시킬 수 있습니다.",
        "config-skins": "스킨",
+       "config-skins-help": "위에 나열된 스킨이 <code>./skins</code> 디렉터리에서 감지되었습니다. 적어도 하나를 활성화하고 나서, 기본값을 선택해야 합니다.",
        "config-skins-use-as-default": "이 스킨을 기본값으로 사용",
+       "config-skins-missing": "스킨을 찾을 수 없습니다; 미디어위키는 당신이 적절한 스킨을 설치할 때까지 대체 스킨을 사용합니다.",
        "config-skins-must-enable-some": "적어도 활성화활 스킨 하나를 선택해야 합니다.",
        "config-skins-must-enable-default": "기본값으로 설정한 스킨은 반드시 활성화해야 합니다.",
        "config-install-alreadydone": "'''경고:''' 이미 미디어위키를 설치했고 다시 설치하려고 합니다.\n다음 페이지로 진행하세요.",
        "config-install-stats": "통계를 초기화하는 중",
        "config-install-keys": "보안 키를 만드는 중",
        "config-insecure-keys": "'''경고:''' 설치 중에 생성한 {{PLURAL:$2|보안 키}} ($1)는 완전히 안전하지 {{PLURAL:$2|않습니다}}. 직접 바꾸는 것을 고려하세요.",
+       "config-install-updates": "불필요한 업데이트 실행 방지",
+       "config-install-updates-failed": "<strong>오류:</strong> 다음 오류로 테이블 안에 업데이트 키를 넣기에 실패했습니다: $1",
        "config-install-sysop": "관리자 사용자 계정을 만드는 중",
        "config-install-subscribe-fail": "미디어위키 알림을 구독할 수 없습니다: $1",
        "config-install-subscribe-notpossible": "cURL이 설치되어 있지 않고 <code>allow_url_fopen</code>을 사용할 수 없습니다.",
index 785b2b5..f87389d 100644 (file)
@@ -21,7 +21,7 @@
        "config-no-session": "De Daate för Ding Setzung sinn verschött jejange.\nDonn en dä Dattei <code>php.ini</code> nohloore, ov dä <code lang=\"en\">session.save_path</code> op e zopaß Verzeijschneß zeisch.",
        "config-your-language": "Ding Schprooch:",
        "config-your-language-help": "Donn heh di Shprooch ußsöhke, di dat Enshtallzjuhnsprojramm kalle sull.",
-       "config-wiki-language": "Dem Wiki sing Shprooch:",
+       "config-wiki-language": "Dem Wiki sing Schprohch:",
        "config-wiki-language-help": "Donn heh di Shprooch ußsöhke, di et Wiki shtandattmääßesch kalle sull.",
        "config-back": "← Retuur",
        "config-continue": "Wigger →",
@@ -48,7 +48,7 @@
        "config-env-good": "De Ömjävung es jeprööf.\nDo kanns MediaWiki opsäze.",
        "config-env-bad": "De Ömjävung es jeprööf.\nDo kanns MediaWiki nit opsäze.",
        "config-env-php": "PHP $1 es doh.",
-       "config-env-php-toolow": "PHP $1 es enshtalleert.\nÄvver MediaWiki bruch PHP $2 udder hühter.",
+       "config-env-hhvm": "HHVM $1 es enschtalleerd.",
        "config-unicode-using-utf8": "För et <i lang=\"en\">Unicode</i>-Nommaliseere dom_mer däm <i lang=\"en\">Brion Vibber</i> sing Projramm <code lang=\"en\">utf8_normalize.so</code> nämme.",
        "config-unicode-using-intl": "För et <i lang=\"en\">Unicode</i>-Nommaliseere dom_mer dä [http://pecl.php.net/intl Zohsaz <code lang=\"en\">intl</code> uss em <code lang=\"en\">PECL</code>] nämme.",
        "config-unicode-pure-php-warning": "'''Opjepaß:''' Mer kunnte dä [http://pecl.php.net/intl Zohsaz <code lang=\"en\">intl</code> uss em <code lang=\"en\">PECL</code>] för et <i lang=\"en\">Unicode</i>-Nommaliseere nit fenge. Dröm nämme mer dat eijfache, ävver ärsh lahme, <i lang=\"en\">PHP</i>-Projrammshtöck doför.\nFör jruuße Wikis met vill Metmaachere doht Üsch die Sigg övver et [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations <i lang=\"en\">Unicode</i>-Nommaliseere] (es op Änglesch) aanloore.",
@@ -56,7 +56,8 @@
        "config-no-db": "Mer kunnte kei zopaß Daatebangk-Driiverprojamm fenge.\nMer bruche e Daatebangk-Driiverprojamm för PHP. Dat moß enjeresht wääde.\nMer künne met heh dä Daatebangke ömjonn: $1.\n\nWann De nit om eijene Rääshner bes, moß De Dinge <i lang=\"en\">provider</i> bedde, dat hä Der ene zopaß Driiver enresht.\nWann de PHP sellver övversaz häs, donn e Zohjangsprojramm för en Daatebangk enbenge, för e Beishpell met: <code  lang=\"en\">./configure --with-mysql</code>.\nWann De PHP uss enem <i lang=\"en\">Debian</i> udder <i lang=\"en\">Ubuntu</i> Pakätt enjeresht häs, moß De dann och noch et <code lang=\"en\">php5-mysql</code> op Dinge Räschner bränge.",
        "config-outdated-sqlite": "'''Opjepaß:''' <i lang=\"en\">SQLite</i> $1 es enschtaleert. Avver MediaWiki bruch <i lang=\"en\">SQLite</i> $2 udder hühter. <i lang=\"en\">SQLite</i> kann dröm nit enjesaz wääde.",
        "config-no-fts3": "'''Opjepaß:''' De Projramme vum <i lang=\"en\">SQLite</i> sin der ohne et [//sqlite.org/fts3.html FTS3-Modul] övversaz, dröm wääde de Funxjohne för et Söhke fähle.",
-       "config-register-globals": "'''Opjepaß:''' dem PHP singe Schallder <code lang=\"en\">[http://php.net/register_globals register_globals]</code> es enjeschalldt.\n'''Donn dä ußmaache, wann De kann.'''\nMediaWiki löp och esu, dä künnt ävver Sesherheitslöcke opmaache, di mer noch nit jefonge un eruß jemaat hät.",
+       "config-register-globals-error": "<strong>Fähler: dem PHP sing Enschtällong <code>[http://php.net/register_globals register_globals]</code> es aanjeschalldt.\nSe moß ußjeschalldt sin, domet mer heh wigger maache kann.</strong>\nLoor op dä Sigg [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] wi mer se ußschallde kann.",
+       "config-magic-quotes-gpc": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc]</code> es enjeschalldt.\nDä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
        "config-magic-quotes-runtime": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]</code> es enjeschalldt.\nDä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
        "config-magic-quotes-sybase": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]</code> es enjeschalldt.\nDä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
        "config-mbstring": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]</code> es enjeschalldt.\nDat sorresch för Fähler un kann enjejovve Daate esu kapott maach, dat doh draan nix mieh ze repareere es.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
@@ -67,6 +68,7 @@
        "config-memory-raised": "Der jrühzte zohjelasse Shpeisherbedarf vum PHP, et <code lang=\"en\">memory_limit</code>, shtund op $1 un es op $2 erop jesaz woode.",
        "config-memory-bad": "'''Opjepaß:''' Dem PHP singe Parameeter <code lang=\"en\">memory_limit</code> es $1.\nDat es wall ze winnisch.\nEt Enreeschte kunnt doh draan kappott jon!",
        "config-ctype": "'''Fähler:''' <i lang=\"en\">PHP</i> moß met dä Ongerschtözong för der [http://www.php.net/manual/en/ctype.installation.php <code lang=\"en\">Ctype</code> Zohsaz] övversaz woode sin.",
+       "config-iconv": "'''Fähler:''' <i lang=\"en\">PHP</i> moß met dä Ongerschtözong för der [http://www.php.net/manual/en/iconv.installation.php <code lang=\"en\">iconv</code> Zohsaz] övversaz woode sin.",
        "config-json": "'''Dä!:''' PHP wood der ohne <i lang=\"en\" xml:lang=\"en\">JSON</i> övversaz.\nJäz moß de äntweeder dä PHP-<i lang=\"en\" xml:lang=\"en\">JSON</i>-Zohsaz enschtallere udder der <i lang=\"en\" xml:lang=\"en\">[http://pecl.php.net/package/jsonc PECL jsonc]</i>-Zohsaz, ih dat de MedijaWikki enschtallere kanns.\n* Dä PHP-Zohsaz es em <i lang=\"en\" xml:lang=\"en\">Red Hat Enterprise Linux (CentOS)</i> 5 un 6 änthallde, moß ävver en de <code lang=\"en\" xml:lang=\"en\">/etc/php.ini</code> udder <code lang=\"en\" xml:lang=\"en\">/etc/php.d/json.ini</code> enjeschalldt wääde.\n* E paa Linux Destrebuzjohne lohß zigg_em Mai 2013 dä PHP-Zohsaz fott un packe doför der PECL-Zohsaz als <code lang=\"en\" xml:lang=\"en\">php5-json</code> udder <code lang=\"en\" xml:lang=\"en\">php-pecl-jsonc</code> med ein.",
        "config-xcache": "Dä <code lang=\"en\">[http://xcache.lighttpd.net/ XCache]</code> es ennjeresht.",
        "config-apc": "Dä <code lang=\"en\">[http://www.php.net/apc APC]</code> es ennjeresht.",
        "config-license-gfdl": "De <i lang=\"en\">GNU</i>-Lizänz för frei Dokemäntazjuhne, Version 1.3 udder en späädere",
        "config-license-pd": "Allmende (jemeinfrei, <i lang=\"en\">public domain</i>)",
        "config-license-cc-choose": "En <i lang=\"en\">Creative Commons</i> Lizänz, sellver ußjesöhk:",
-       "config-license-help": "Ättlijje öffentleje Wikis donn iehr Beidrääsh onger en [http://freedomdefined.org/Definition frei Lizänz] shtelle.\nDat hellef, e Jeföhl vun Jemeinsamkeid opzeboue, un op lange Seesh emmer wider Beidrääsch ze krijje.\nDat es nit onbedengk nüüdesh för e Jeschäffs- udder Privaat_Wiki.\n\nWä Stöcke uß de Wikipedia bruche well, un han well, dat de Wikipedia uss_em eije Wiki jät övvernämme kann, sullt „'''<i lang=\"en\">Creative Commons</i>, dem Schriever singe Name moß jenannt wääde, un Wiggerjävve zoh dersellve Bedengunge es zohjelohße'''“ ußwähle.\n\nDe su jenannte '''<i lang=\"en\">GNU Free Documentation License</i>''' (de freije Lizänz för Dokemäntazjuhne vun dä GNU) sen de ahle Lizänzbedenonge vun de Wikipedia. Se es emmer noch in Odenong un jöltesch, ävver se es schwer ze vershtonn un et Wiggerjävve un widder Verwände es manshmool schwieeresch domet.",
+       "config-license-help": "Ättlijje öffentleje Wikis donn iehr Beidrääsch onger en [http://freedomdefined.org/Definition freije Lizänz] schtelle.\nDat hellef, e Jeföhl vun Jemeinsamkeid opzeboue, un op lange Seesch emmer wider Beidrääsch ze krijje.\nDat es nit onbedengk nüüdesh för e Jeschäffs- udder Privaat_Wiki.\n\nWä Stöcke uß de Wikipedia bruche well, un dröm han well, dat mer för Wikipedia uss_em eije Wiki jät övvernämme kann, sullt „'''<i lang=\"en\">Creative Commons</i>, dem Schriever singe Name moß jenannt wääde, un Wiggerjävve zoh dersellve Bedengunge es zohjelohße'''“ ußwähle.\n\nDe su jenannte '''<i lang=\"en\">GNU Free Documentation License</i>''' (de freije Lizänz för Dokemäntazjuhne vun dä GNU) sen de ahle Lizänzbedenonge vun de Wikipedia. Se es emmer noch in Odenong un jöltesch, ävver se es schwer ze verschtonn un et Wiggerjävve un widder Bruche es ens schwieerejer domet.",
        "config-email-settings": "Enschtellunge för de <i lang=\"en\">e-mail</i>",
        "config-enable-email": "De <i lang=\"en\">e-mail</i> noh druße zohlohße",
        "config-enable-email-help": "Sulle <i lang=\"en\">e-mails</i> zohjelohße sin, moß mer, domet et noher flupp, de [http://www.php.net/manual/en/mail.configuration.php Enschtellunge em PHP för de <i lang=\"en\">e-mails</i>] zopaß jemaat han.\nWann kein <i lang=\"en\">e-mails</i> nüüdesch sin, kam_mer se heh afschallde.",
        "config-memcache-badport": "Dem <code lang=\"en\">memcached</code> ẞööver singe Pooz (<code lang=\"en\">port</code>) Nommere sullte zwesche $1 un $2 sin.",
        "config-extensions": "Projramm-Zohsäz (<i lang=\"en\">Extensions</i>)",
        "config-extensions-help": "Di bovve opjeleß Zohsazprojramme för et MediaWiki sin em Verzeischneß <code lang=\"en\">./extensions</code> ald ze fenge.\n\nDo kann se heh un jez aanschallde, ävver se künnte noch zohsäzlesch Enshtellunge bruche.",
+       "config-skins": "Bedeenbovverfläsche",
+       "config-skins-help": "De opjeleß Beddenbovverfläsche sin en Dingem Verzeischnesß <code>./skins</code> dre. Do moß winneschßdens eine enschallde, un eine för der Schtandatt ußsöhke.",
+       "config-skins-use-as-default": "Donn heh di Bovverfläsch als der Schtandatt nämme.",
+       "config-skins-missing": "Mer han kein bedeebovverfläsche jevonge un nämme dröm der Schtandatt, bes De wälsche enjeresch häß.",
+       "config-skins-must-enable-some": "Do moß winneschßtens ein Beddenbovverfläsch ußsöhke zum aanschallde.",
+       "config-skins-must-enable-default": "De Schtadatt-Beddenbovverfläsch moß och enjeschalldt sin.",
        "config-install-alreadydone": "'''Opjepaß:'''\nEt sühd esu uß, wi wann De MediaWiki ald enshtalleet hätß, un wöhrs aam Versöhke, dat norr_ens ze donn.\nJang wigger op de näähßte Sigg.",
        "config-install-begin": "Wann De op „{{int:config-continue}}“ klecks, jeiht de Enshtallazjuhn vum MediaWiki loßß.\nWann De noch Änderonge maache wells, dann kleck op „{{int:config-back}}“.",
        "config-install-step-done": "jedonn",
        "config-install-stats": "De Shtatestek-Zahle wääde op Aanfang jeshtallt.",
        "config-install-keys": "Jeheime Schlößel wääde opjebout.",
        "config-insecure-keys": "'''Opjepaß:''' {{PLURAL:$2|Ene jeheime Schlößel|Jeheim Schlößele|Keine jeheime Schlößel}} ($1) {{PLURAL:$2|es|sin|es}} automattesch aanjelaat woode. {{PLURAL:$2|Dä es|Di sin|Hä es}} ävver nit onbedengk janz sescher. Övverlääsch Der, {{PLURAL:$2|dä|di|en}} norr_ens vun Hand ze ändere.",
+       "config-install-updates": "Donn kein onnühdeje Änderonge maache.",
+       "config-install-updates-failed": "<strong>Dä:</strong> Schlößßelle för et Ändere en Tabälle  bränge es donävve jajange. Jemäldt wood: $1",
        "config-install-sysop": "Dä Zohjang för der Wiki-Köbes weed aanjelaat.",
        "config-install-subscribe-fail": "Mer künne de <i lang=\"en\">e-mail</i>-Leß <code lang=\"en\">mediawiki-announce</code> nit abonneere: $1",
        "config-install-subscribe-notpossible": "<code lang=\"en\">cURL</code> es nit enstalleed un <code lang=\"en\">allow_url_fopen</code>es nit doh.",
        "config-install-done": "'''Jlöckwonsch!'''\nMediaWiki es jetz enstalleet.\n\nEt Projramm zom Enreeschte hät en Dattei <code lang=\"en\">LocalSettings.php</code> aanjelaat.\nDoh sin de Enstellunge vum Wiki dren.\n\nDo weeß se eronge laade möße un dann en dem Wiki sing Aanfangsverzeishnes donn möße, et sellve Verzeisneß, woh di Dattei <code lang=\"en\">index.php</code> dren litt. Dat Erongerlaade sullt automattesch aanjefange han.\n\nWann domet jet nit jeflupp hät, udder De di Dattei norr_ens han wells, donn op dä Lengk heh dronger klecke:\n\n$3\n\n'''Opjepaß''': Wann De dat jez nit deihß, es alles verschött, wat De bes jöz enjejovve häs, weil di Dattei fott es en däm Momang, woh heh dat Projamm aam Engk es.\n\nWann De mem Ronger- un widder Huhlaade fäädesh bes, kanns De '''[$2 en Ding Wiki jonn]'''.",
        "config-download-localsettings": "Donn di Dattei <code lang=\"en\">LocalSettings.php</code> eronger laade",
        "config-help": "Hölp",
+       "config-help-tooltip": "Donn Hölp heh aan däm Plaaz enblände.",
        "config-nofile": "De Dattei „$1“ ham_mer nit jefonge. Es di fottjeschmeße?",
        "config-extension-link": "Häs De jewoß, dat et Wiki [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions Zohsazprojramme] hann kann?\n\nDo kanns [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category Zohsazprojramme noh Saachjroppe] söhke udder en de [//www.mediawiki.org/wiki/Extension_Matrix Tabäll met de Zohsazprojramme] kike, öm de kumplätte Leß met de Zohsazprojramme ze krijje.",
        "mainpagetext": "'''MediaWiki es jäz enschtalleht.'''",
index 9941442..bb1c829 100644 (file)
@@ -44,6 +44,7 @@
        "config-env-good": "Den Environement gouf nogekuckt.\nDir kënnt MediaWiki installéieren.",
        "config-env-bad": "Den Environnement gouf iwwerpréift.\nDir kënnt MediWiki net installéieren.",
        "config-env-php": "PHP $1 ass installéiert.",
+       "config-env-hhvm": "HHVM $1 ass installéiert.",
        "config-unicode-using-utf8": "Fir d'Unicode-Normalisatioun gëtt dem Brion Vibber säin <code>utf8_normalize.so</code> benotzt.",
        "config-no-db": "Et konnt kee passenden Datebank-Driver fonnt ginn! Dir musst een Datebank-Driver fir PHP installéieren.\nDës Datebank-Type ginn ënnerstëtzt: $1.\n\nWann Dir PHP selwer compiléiert hutt, da rekonfiguréiert en mat dem ageschalten Datebank-Client, zum Beispill an deem Dir <code>./configure --with-mysql</code> benotzt.\nWann Dir PHP vun engem Debian oder Ubuntu Package aus installéiert hutt, da musst Dir och den php5-mysql Modul installéieren.",
        "config-outdated-sqlite": "'''Warnung:''' SQLite $1 ass installéiert. Allerdengs brauch MediaWiki SQLite $2 oder méi nei. SQLite ass dofir net disponibel.",
        "config-missing-db-name": "Dir musst e Wäert fir \"{{int:config-db-name}}\" aginn",
        "config-missing-db-host": "Dir musst e Wäert fir \"{{int:config-db-host}}\" aginn.",
        "config-missing-db-server-oracle": "Dir musst e Wäert fir \"{{int:config-db-host-oracle}}\" aginn",
+       "config-connection-error": "$1.\n\nKuckt den Numm vum Server, de Benotzernumm an d'Passwuert no a probéiert et nach eng Kéier.",
        "config-db-sys-user-exists-oracle": "De Benotzerkont \"$1\" gëtt et schonn. SYSDBA kann nëmme benotzt gi fir en neie Benotzerkont opzemaachen.",
        "config-postgres-old": "PostgreSQL $1 oder eng méi nei Versioun gëtt gebraucht, Dir hutt $2.",
        "config-mssql-old": "Microsoft SQL Server $1 oder eng méi rezent Versioun gëtt gebraucht. Dir hutt d'Versioun $2.",
        "config-install-interwiki-list": "De Fichier <code>interwiki.list</code> gouf net fonnt.",
        "config-install-stats": "Initialisatioun vun de Statistiken",
        "config-install-keys": "Generéiere vum Geheimschlëssel",
+       "config-install-updates": "Net néideg Aktualiséierungen net maachen",
        "config-install-sysop": "Administrateur Benotzerkont gëtt ugeluecht",
        "config-install-mainpage": "Haaptsäit mat Standard-Inhalt gëtt ugeluecht",
        "config-install-extension-tables": "D'Tabelle fir déi aktivéiert Erweiderunge ginn ugeluecht",
index 190ee04..9135393 100644 (file)
@@ -5,6 +5,7 @@
                ]
        },
        "config-information": "文訊",
+       "config-page-language": "語",
        "mainpagetext": "'''共筆臺已立'''",
        "mainpagedocfooter": "欲識維基,見[//meta.wikimedia.org/wiki/Help:Contents User's Guide]\n\n== 始 ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
 }
index b52cef7..d061824 100644 (file)
@@ -1,9 +1,29 @@
 {
        "@metadata": {
                "authors": [
-                       "Umeshberma"
+                       "Umeshberma",
+                       "बिप्लब आनन्द"
                ]
        },
+       "config-information": "जानकारी",
+       "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-upgrade": "भेल इन्स्टलेसन क नविनीकरण करु",
+       "config-page-dbsettings": "डाटाबेस",
+       "config-page-name": "नाम",
+       "config-page-options": "विकल्प",
+       "config-page-install": "स्थापित करु",
+       "config-page-complete": "पूर्ण!",
+       "config-page-restart": "स्थापनाके पुनारम्भ करु",
+       "config-page-readme": "पढू",
+       "config-page-existingwiki": "रहल विकी",
+       "config-restart": "हँ, एकरा पुन: सुरु कएल जाए",
        "mainpagetext": "'''मीडियाविकी नीक जकाँ प्रस्थापित भेल।'''",
        "mainpagedocfooter": "सम्पर्क करू [//meta.wikimedia.org/wiki/Help:Contents User's Guide] विकी तंत्रांशक प्रयोगक जानकारी लेल।\n\n==प्रारम्भ कोना करी==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
 }
diff --git a/includes/installer/i18n/mfe.json b/includes/installer/i18n/mfe.json
new file mode 100644 (file)
index 0000000..0cd9b6e
--- /dev/null
@@ -0,0 +1,45 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Moris231"
+               ]
+       },
+       "config-desc": "Programme installasion pu MediaWiki",
+       "config-title": "Installasion MediaWiki $1",
+       "config-information": "Informasion",
+       "config-localsettings-key": "Mis a zour lakle:",
+       "config-localsettings-badkey": "Lakle ki ou inn fourni inkorrekt.",
+       "config-your-language": "Ou langaz:",
+       "config-your-language-help": "Seleksionn enn langaz ki pu servi pendan prosesis installasion.",
+       "config-wiki-language": "Langaz Wiki:",
+       "config-wiki-language-help": "Seleksionn langaz dan ki Wiki pu prinsipalman ekrir.",
+       "config-back": "← Retourne",
+       "config-continue": "Kontinye →",
+       "config-page-language": "Langaz",
+       "config-page-welcome": "Bienvini lor MediaWiki!",
+       "config-page-dbconnect": "Konekte base donnee",
+       "config-page-dbsettings": "Paramets database",
+       "config-page-name": "Nom",
+       "config-page-options": "Opsion",
+       "config-page-install": "Installe",
+       "config-page-complete": "Termine!",
+       "config-page-restart": "Rekoumans installasion",
+       "config-page-readme": "Lir-mwa",
+       "config-page-releasenotes": "Notes verzion",
+       "config-page-copying": "Kopi",
+       "config-page-upgradedoc": "Mis a zour",
+       "config-page-existingwiki": "Wiki existan",
+       "config-restart": "Oui, rekoumans li",
+       "config-env-php": "PHP $1 inn finn installe.",
+       "config-env-hhvm": "HHVM $1 inn finn installe.",
+       "config-diff3-bad": "GNU diff3 introuvab.",
+       "config-db-type": "Type database:",
+       "config-db-host": "Hote database:",
+       "config-db-host-oracle": "Nom TNS database:",
+       "config-db-wiki-settings": "Idantifie sa wiki-la",
+       "config-db-name": "Nom base donnee:",
+       "config-db-name-oracle": "Schema base donnee:",
+       "config-db-install-account": "Kontt litilizater pu sa installasion",
+       "config-db-username": "Itilizater database:",
+       "config-db-password": "Password database:"
+}
index 74359b2..52d049b 100644 (file)
@@ -25,7 +25,7 @@
        "config-back": "← Назад",
        "config-continue": "Продолжи →",
        "config-page-language": "Јазик",
-       "config-page-welcome": "Добредојдовте на МедијаВики!",
+       "config-page-welcome": "Добре дојдовте на МедијаВики!",
        "config-page-dbconnect": "Поврзување со базата",
        "config-page-upgrade": "Надградба на постоечката воспоставка",
        "config-page-dbsettings": "Нагодувања на базата",
@@ -47,6 +47,7 @@
        "config-env-good": "Околината е проверена.\nМожете да го воспоставите МедијаВики.",
        "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 уникодната нормализација].",
@@ -91,7 +92,7 @@
        "config-db-host": "Домаќин на базата:",
        "config-db-host-help": "Ако вашата база е на друг опслужувач, тогаш тука внесете го името на домаќинот или IP-адресата.\n\nАко користите заедничко (споделено) вдомување, тогаш вашиот вдомител треба да го наведе точното име на домаќинот во неговата документација.\n\nАко воспоставувате на опслужувач на Windows и користите MySQL, можноста „localhost“ може да не функционира за опслужувачкото име. Во тој случај, обидете се со внесување на „127.0.0.1“ како локална IP-адреса.\n\nАко користите PostgreSQL, оставете го полево празно за да се поврзете преку Unix-приклучок.",
        "config-db-host-oracle": "TNS на базата:",
-       "config-db-host-oracle-help": "Ð\92неÑ\81еÑ\82е Ð²Ð°Ð¶ÐµÑ\87ко [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Ð»Ð¾ÐºÐ°Ð»но име за поврзување]. На оваа воспоставка мора да ѝ биде видлива податотеката tnsnames.ora.<br />Ако користите клиентски библиотеки 10g или понови, тогаш можете да го користите и методот на иметнување на [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+       "config-db-host-oracle-help": "Ð\92неÑ\81еÑ\82е Ð²Ð°Ð¶ÐµÑ\87ко [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Ð¼ÐµÑ\81но име за поврзување]. На оваа воспоставка мора да ѝ биде видлива податотеката tnsnames.ora.<br />Ако користите клиентски библиотеки 10g или понови, тогаш можете да го користите и методот на иметнување на [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Идентификувај го викиво",
        "config-db-name": "Име на базата:",
        "config-db-name-help": "Одберете име што ќе го претставува вашето вики.\nИмето не смее да содржи празни места.\n\nАко користите заедничко (споделено) вдомување, тогаш вашиот вдомител ќе ви даде конкретно име на база за користење, или пак ќе ви даде да создавате бази преку контролната табла.",
        "config-install-stats": "Ги подготвувам статистиките",
        "config-install-keys": "Создавање на тајни клучеви",
        "config-insecure-keys": "'''Предупредување:''' {{PLURAL:$2|Безбедносниот клуч $1 создаден во текот на воспоставката не е сосем безбеден|Безбедносните клучеви $1 создадени во текот на воспоставката не се сосем безбедни}}. Ви препорачуваме да {{PLURAL:$2|го|ги}} смените рачно.",
+       "config-install-updates": "Спречи вршење на непотребни поднови",
+       "config-install-updates-failed": "<strong>Грешка:</strong> Вметнувањето на подновни клучеви во табелите не успеа, со следнава грешка: $1",
        "config-install-sysop": "Создавање на администраторска корисничка сметка",
        "config-install-subscribe-fail": "Не можам да ве претплатам на известувањето mediawiki-announce: $1",
        "config-install-subscribe-notpossible": "cURL не е воспоставен, а <code>allow_url_fopen</code> не е достапно.",
index 057410b..4aeba75 100644 (file)
@@ -53,6 +53,7 @@
        "config-unicode-using-utf8": "utf8_normalize.so oleh Brion Vibber digunakan untuk penormalan Unicode.",
        "config-unicode-using-intl": "[http://pecl.php.net/intl Sambungan intl PECL] digunakan untuk penormalan Unicode.",
        "config-unicode-update-warning": "<strong>Amaran:</strong> Versi pembalut penormalan Unicode yang terpasang menggunakan perpustakaan [http://site.icu-project.org/ projek ICU] dalam versi yang lampau.\nAnda harus [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations menaik taraf] jika Unicode penting bagi anda.",
+       "config-outdated-sqlite": "<strong>Amaran:</strong> anda mempunyai SQLite $1 yang lebih rendah daripada versi keperluan minimum $1. SQLite tidak akan disediakan.",
        "config-no-fts3": "<strong>Amaran:</strong> SQLite disusun tanpa [//sqlite.org/fts3.html modil FTS3], maka ciri-ciri pencarian tidak akan disediakan pada backend ini.",
        "config-mbstring": "<strong>Amaran keras: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] sedang aktif!</strong>\nOpsyen ini menyebabkan ralat dan mungkin mencemari data secara tanpa diduga.\nAnda tidak boleh memasang atau menggunakan MediaWiki melainkan opsyen ini dinyahdayakan.",
        "config-pcre-old": "<strong>Amaran keras:</strong> PCRE $1 ke atas diperlukan.\nBinari PHP anda berpaut dengan PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Keterangan lanjut].",
@@ -61,6 +62,7 @@
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] dipasang",
        "config-apc": "[http://www.php.net/apc APC] dipasang",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] dipasang",
+       "config-mod-security": "<strong>Amaran:</strong> Pelayan web anda dihidupkan [http://modsecurity.org/ mod_security]/mod_security2. Kebanyakan konfigurasinya yang umum boleh menimbulkan kesulitan untuk MediaWiki dan perisian-perisian lain yang membolehkan pengguna untuk mengeposkan kandungan yang sewenang-wenang.\nJika boleh, ciri-ciri ini harus dimatikan. Jika tidak, rujuki [http://modsecurity.org/documentation/ dokumentasi mod_security] atau hubungi bantuan hos anda jika anda menghadapi ralat sembarangan.",
        "config-diff3-bad": "GNU diff3 tidak dijumpai.",
        "config-git": "Perisian kawalan versi Git dijumpai: <code>$1</code>.",
        "config-git-bad": "Perisian kawalan versi Git tidak dijumpai.",
        "config-mysql-charset": "Peranggu aksara pangkalan data:",
        "config-mysql-binary": "Perduaan",
        "config-mysql-utf8": "UTF-8",
+       "config-mssql-auth": "Jenis pengesahan:",
        "config-site-name": "Nama wiki:",
        "config-site-name-help": "Ini akan dipaparkan pada bar tajuk perisian pelayar dan tempat-tempat lain yang berkenaan.",
        "config-site-name-blank": "Isikan nama tapak.",
        "config-admin-password": "Kata laluan:",
        "config-admin-password-confirm": "Kata laluan lagi:",
        "config-admin-name-blank": "Masukkan nama pengguna pentadbir.",
+       "config-admin-password-blank": "Berikan kata laluan untuk akaun pentadbir.",
        "config-admin-password-mismatch": "Kata-kata laluan yang kamu berikan tidak sepadan.",
        "config-admin-email": "Alamat e-mel:",
        "config-admin-error-bademail": "Kamu telah memberikan alamat e-mel yang tidak betul.",
        "config-license-gfdl": "Lesen Pendokumenan Bebas GNU 1.3 atau ke atas",
        "config-license-pd": "Domain Awam",
        "config-email-settings": "Tetapan e-mel",
+       "config-skins": "Rupa",
+       "config-skins-use-as-default": "Gunakan rupa ini sebagai asal",
        "config-install-step-done": "siap",
        "config-install-step-failed": "gagal",
        "config-install-user-alreadyexists": "Pengguna \"$1\" sudah wujud",
+       "config-install-tables": "Mencipta jadual",
        "config-install-tables-exist": "<strong>Amaran:</strong> Nampaknya sudah terdapat jadual MediaWiki. Penciptaan dilangkau.",
+       "config-install-interwiki": "Mengisi jadual antara wiki lalai",
+       "config-install-interwiki-list": "Fail <code>interwiki.list</code> tidak dapat dibaca.",
        "config-install-interwiki-exists": "<strong>Amaran:</strong> Jadual antara wiki nampaknya sudah ada entri. Senarai asali dilangkau.",
+       "config-install-keys": "Menjana kunci-kunci rahsia",
        "config-insecure-keys": "<strong>Amaran:</strong> {{PLURAL:$2|Kunci keselamatan|Kunci-kunci keselamatan}} ($1) yang dihasilkan sewaktu pemasangan itu {{PLURAL:$2|adalah}} tidak selamat sepenuhnya. Oleh itu, {{PLURAL:$2|ia}} wajar ditukar secara manual.",
+       "config-install-sysop": "Membuka akaun pengguna pentadbir",
+       "config-install-mainpage": "Mewujudkan laman utama dengan kandungan lalai",
        "config-help": "bantuan",
        "mainpagetext": "'''MediaWiki telah berjaya dipasang.'''",
        "mainpagedocfooter": "Sila rujuk [//meta.wikimedia.org/wiki/Help:Contents Panduan Penggunaan] untuk maklumat mengenai penggunaan perisian wiki ini.\n\n== Permulaan ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Senarai tetapan konfigurasi]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Soalan Lazim MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Senarai surat keluaran MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Terjemahkan MediaWiki ke dalam bahasa anda]"
index 0a84d87..262a837 100644 (file)
@@ -1,7 +1,8 @@
 {
        "@metadata": {
                "authors": [
-                       "Chrisportelli"
+                       "Chrisportelli",
+                       "Leli Forte"
                ]
        },
        "config-title": "Installazzjoni ta' MediaWiki $1",
@@ -30,6 +31,7 @@
        "config-page-existingwiki": "Wiki eżistenti",
        "config-restart": "Iva, erġa' ibda",
        "config-env-php": "PHP $1 huwa installat.",
+       "config-env-hhvm": "HHVM $1 hu installat.",
        "config-db-wiki-settings": "Identifika din il-wiki",
        "config-db-name": "Isem tad-databażi:",
        "config-db-install-account": "Kont tal-utent għall-installazzjoni",
        "config-site-name": "Isem tal-wiki:",
        "config-site-name-help": "Dan se jidher fil-barra tat-titlu tal-browżer u f'diversi postijiet oħra.",
        "config-site-name-blank": "Daħħal isem tas-sit.",
-       "config-project-namespace": "Spazju tal-isem tal-proġett:",
+       "config-project-namespace": "Spazju tal-ismijiet tal-proġett:",
        "config-ns-generic": "Proġett",
        "config-ns-site-name": "L-istess bħall-isem tal-wiki: $1",
        "config-ns-other": "Oħrajn (speċifika)",
        "config-ns-other-default": "MyWiki",
-       "config-ns-invalid": "L-ispazju speċifikat \"<nowiki>$1</nowiki>\" huwa ħażin.\nSpeċifika spazju tal-isem tal-proġett differenti.",
-       "config-ns-conflict": "L-ispazju speċifikat \"<nowiki>$1</nowiki>\" joħloq kunflitt ma' spazju tal-isem ieħor tal-MediaWiki.\nSpeċifika spazju tal-isem tal-proġett differenti.",
+       "config-ns-invalid": "L-ispazju speċifikat \"<nowiki>$1</nowiki>\" huwa ħażin.\nSpeċifika spazju tal-ismijiet ta' proġett differenti.",
+       "config-ns-conflict": "L-ispazju speċifikat \"<nowiki>$1</nowiki>\" joħloq kunflitt ma' spazju tal-ismijiet tal-MediaWiki predeterminat.\nSpeċifika spazju tal-ismijiet ta' proġett differenti.",
        "config-admin-box": "Kont tal-amministratur",
        "config-admin-name": "Ismek:",
        "config-admin-password": "Password:",
index 0bfcbe8..05b0eca 100644 (file)
@@ -4,6 +4,118 @@
                        "C.R."
                ]
        },
+       "config-desc": "'O prugramma d'istallazione 'e MediaWiki",
+       "config-title": "Installazione 'e MediaWiki $1",
+       "config-information": "Nfurmaziune",
+       "config-localsettings-upgrade": "È stato rilevato nu file <code>LocalSettings.php</code>.\nP'agghiurnà sta installazione, pe' piacere nzertàte 'o valore 'e <code>$wgUpgradeKey</code> dint' 'a cascia ccà abbascio.\n'O putite truvà dint'a <code>LocalSettings.php</code>.",
+       "config-localsettings-cli-upgrade": "È stato scummigliato nu file <code>LocalSettings.php</code>.\nPe l'agghiurnà sta installazione, secutate <code>update.php</code>",
+       "config-localsettings-key": "Chiave d'agghiurnamiento:",
+       "config-localsettings-badkey": "'A chiave c'avete dato nun è curretta.",
+       "config-upgrade-key-missing": "S'è scummigliata n'installazione 'e MediaWiki ch'esisteva già.\nPe' ll'agghiurnà, nzertate pe' piacere sta riga ccà abbascio dint' 'a parta vascia d' 'o <code>LocalSettings.php</code> vuosto:\n\n$1",
+       "config-localsettings-incomplete": "'O file <code>LocalSettings.php</code> esistente pare ca fosse cumpleto a metà.\n'A variabbele $1 nun è mpustata.\nCagnate <code>LocalSettings.php</code> in modo ca sta variabbele fosse mpustata e facite clic ncopp'a \"{{int:Config-continue}}\".",
+       "config-localsettings-connection-error": "S'è truvato n'errore pe' tramente ca se faceva 'a connessione a 'o database ausanno 'e mpustaziune specificate dint'a <code>LocalSettings.php</code>. Pe' piacere curriggite sti mpustaziuni e provate n'ata vota.\n\n$1",
+       "config-session-error": "Errore facenno accumincià 'a sessione: $1",
+       "config-session-expired": "'E date d' 'a sessione pareno ammaturate.\n'E sessiune so' configurate pe na durata 'e $1.\n'A putite aumentà pe' bbìa 'e na mpustazione  <code>session.gc_maxlifetime</code> dint' 'o file php.ini.\nRiabbìa 'o prucesso 'e installazione.",
+       "config-no-session": "'E date d' 'a sessione so' state perdute!\nCuntrullate 'o file php.ini vuosto e assicurateve ca 'a <code>session.save_path</code> è stata mpustata ncopp'a na cartella appropriata.",
+       "config-your-language": "'A lengua vosta:",
+       "config-your-language-help": "Scigliete na lengua pe' l'ausà pe' tramente ca se fa 'o prucesso 'installazione.",
+       "config-wiki-language": "Lengua d' 'o wiki:",
+       "config-wiki-language-help": "Scigliete 'a lengua ca sarrà ausàta prevalentemente ncopp' 'a wiki.",
+       "config-back": "← Arreto",
+       "config-continue": "Annanze →",
+       "config-page-language": "Lengua",
+       "config-page-welcome": "Bemmenute a MediaWiki!",
+       "config-page-dbconnect": "Connessione a 'o database",
+       "config-page-upgrade": "Agghiuorna l'istallazione esistente",
+       "config-page-dbsettings": "Mpustaziune d' 'o database",
+       "config-page-name": "Nomme",
+       "config-page-options": "Opziune",
+       "config-page-install": "Installa",
+       "config-page-complete": "Cumpreta!",
+       "config-page-restart": "Riabbìa l'installazione",
+       "config-page-readme": "Lieggeme",
+       "config-page-releasenotes": "Note 'e verziona",
+       "config-page-copying": "Copia",
+       "config-page-upgradedoc": "Agghiurnanno",
+       "config-page-existingwiki": "Wiki esistente",
+       "config-help-restart": "Vulite scancellà tutt' 'e date astipate c'avite nzertato e riabbià 'o prucesso d'installazione?",
+       "config-restart": "Sì, riabbìa",
+       "config-welcome": "=== Cuntrollo 'e ll'ambiente ===\nSarranno eseguite 'e cuntrolle bbase pe' putè vedè si st'ambiente è adatto pe' ne ffà l'installazione 'e MediaWiki.\nArricurdateve d'includere sti nfurmaziune si spiate assistenza ncopp' 'a maniera 'e cumpletà l'installazione.",
+       "config-copyright": "=== Copyright e termine ===\n\n$1\n\nChistu programma è nu software libbero; vuje 'o putite redestribbuì e/o cagnà sott' 'e termine d' 'a licienza GNU GPL ('a Licienza Pubbreca Generale) comme pubbrecata d' 'a Free Software Foundation; o pure 'a verziona 2 d' 'a Licienza, o pure (comme vulite vuje) 'a n'ata verziona cchiù nnova.\n\nChistu programma è destribbuito c' 'a speranza d'essere utile, ma SENZA NISCIUNA GARANZIA; senza manco 'a garanzia p' 'a CUMMERCIABBELETÀ O IDONIETÀ PE' NU SCOPO PARTICOLARE.\nIate a vedé 'a GNU GPL pe' n'avé cchiù nfurmaziune.\n\nCu stu programma avísseve 'a ricevere <doclink href=Copying>na copia d' 'a Licienza GNU GPL</doclink> cu stu prugramma; si nò, scrivete â Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [http://www.gnu.org/copyleft/gpl.html liggite sta paggena ncopp' 'a l'Internet].",
+       "config-sidebar": "* [//www.mediawiki.org Paggina prencepale MediaWiki]\n* [//www.mediawiki.org/wiki/Aiuto:Guida a 'e cuntenute pe' l'utente]\n* [//www.mediawiki.org/wiki/Manuale:Guida a 'e cuntenute pe l'ammenistrature]\n* [//www.mediawiki.org/wiki/Manuale:FAQ FAQ]\n----\n* <doclink href=Readme>Lieggeme</doclink>\n* <doclink href=ReleaseNotes>Note 'e verziona</doclink>\n* <doclink href=Copying>Copie</doclink>\n* <doclink href=UpgradeDoc>Agghiurnamento</doclink>",
+       "config-env-good": "L'ambiente è stato cuntrullato.\nÈ pussibbele installare MediaWiki.",
+       "config-env-bad": "L'ambiente è stato cuntrullato.\nNun se può installà MediaWiki.",
+       "config-env-php": "PHP $1 è installato.",
+       "config-env-hhvm": "HHVM $1 è installato.",
+       "config-unicode-using-utf8": "Aúsa Brion Vibber's utf8_normalize.so pe' ne fà 'a normalizzazione Unicode.",
+       "config-unicode-using-intl": "Aúsa [http://pecl.php.net/intl l'estensione PECL intl] pe' ne fà 'a normalizzazione Unicode.",
+       "config-unicode-pure-php-warning": "<strong>Attenziò:</strong> L' [http://pecl.php.net/intl estensione intl PECL] nun è a disposizione pe' gestire 'a normalizzazione Unicode, accussì se ausasse n'imprementazziona llenta 'n puro PHP.\nSi state a gestire nu pizzo ad alto traffico, avisseve a lieggere cocche considerazione ncopp' 'a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzaziona Unicode].",
+       "config-unicode-update-warning": "<strong>Attenziò:</strong> 'A verziona installata 'e normalizzazione Unicode aùsa 'a verziona viecchia d' 'o [http://site.icu-project.org/ pruggetto ICU].\nV'avite 'a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations agghiurnà] si state a penzà ncopp' 'o fatto d'ausà Unicode.",
+       "config-no-db": "Nun se può truvà nu driver adatto p' 'o database! È necessario installare nu driver p' 'o PHP.\n'E furmatte 'e database ccà annanze songo suppurtate: $1.\n\nSi cumpilate PHP autonomamente, riaccunciatevello attivando nu client database, p'esempio ausannoo <code>./configure --with-mysqli</code>.\nQuanno fosse installato PHP pe' bbìa 'e nu pacchetto Debian o Ubuntu, allora avite 'a installà pure 'o pacchetto <code>php5-mysql</code>.",
+       "config-outdated-sqlite": "'''Attenziò''': tenite 'o SQLite $1 pe' tramente ca ce vulesse 'a verziona $2, SQLite nun sarrà a disposizione.",
+       "config-no-fts3": "'''Attenziò''': SQLite è cumpilato senza 'o [//sqlite.org/fts3.html modulo FTS3], 'e funziune 'e p'ascià dinto nun sarranno a disposizione ncopp'a stu backend.",
+       "config-register-globals-error": "<strong>Errore: l'opzione PHP <code>[http://php.net/register_globals register_globals]</code> è apicciata.\nS'avesse 'a stutà pe' cuntinuà c' 'a installazione.</strong>\nVide [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] pe' n'avé n'aiuto ncopp'a comme s'avess'a ffà.",
+       "config-magic-quotes-gpc": "<strong>Fatale: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] è attivo!</strong>\nChest'opzione scassa 'e date d'input 'n modo scanusciuto.\nNun putite installare o utilizzare MediaWiki, si nun stutate st'opzione.",
+       "config-magic-quotes-runtime": "<strong>Fatale: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] è attivo!'</strong>\nSt'opzione scassa 'e date 'e na manera scanusciuta.\nNun se può installà o ausà MediaWiki si nun se stuta st'opzione.",
+       "config-magic-quotes-sybase": "<strong>Fatale: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] è attivo!'</strong>\nSt'opzione scassa 'e date 'e na manera scanusciuta.\nNun se può installà o ausà MediaWiki si nun se stuta st'opzione.",
+       "config-mbstring": "<strong>Fatale: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] è attivo!'</strong>\nSt'opzione scassa 'e date 'e na manera scanusciuta.\nNun se può installà o ausà MediaWiki si nun se stuta st'opzione.",
+       "config-safe-mode": "<strong>Warning:</strong> PHP's [http://www.php.net/features.safe-mode safe mode] è attivato.\nPutesse fà cocche probblema, specialmente si state ausanno 'a funziona 'e carrecà file e 'o supporto d' ' e funziune <code>math</code>.",
+       "config-xml-bad": "'O modulo XML 'e PHP è mancante.\nA MediaWiki servessero 'e funziune prisente dint'a stu modulo e nun faticarrà c' 'a configurazione 'e mò.\nSi se sta eseguenno Mandrake, installare 'o pacco php-xml.",
+       "config-pcre-old": "<strong>Errore fatale:</strong> s'addimanna PCRE  $1 o succiessivo.\n'O file vuosto binario PHP è acucchiato c' 'o PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Cchiù nfurmaziune].",
+       "config-memory-raised": "'O valore 'e PHP <code>memory_limit</code> è $1, aumentato a $2.",
+       "config-memory-bad": "<strong>Attenziò:</strong> 'o valore 'e PHP <code>memory_limit</code> è $1.\nProbabbilmente troppo basso.\n'A installazione se putesse scassà!",
+       "config-ctype": "'''Errore''': 'o PHP s'adda ghienchere c' 'o supporto pe' l'[http://www.php.net/manual/it/ctype.installation.php estensione Ctype].",
+       "config-iconv": "<strong>Fatale:</strong> PHP s'adda ghienchere c' 'o supporto pe' l'[http://www.php.net/manual/en/iconv.installation.php estensione iconv].",
+       "config-xcache": "[http://xcache.lighttpd.net/ XCache] è installato",
+       "config-apc": "[http://www.php.net/apc APC] è installato",
+       "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] è installato",
+       "config-no-cache": "'''Attenziò:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache] nun so' state truvate.\n'A funziona caching 'e ll'oggette non è apicciata.",
+       "config-diff3-bad": "GNU diff3 nun truvato.",
+       "config-git": "Truvato software 'e cuntrollo d' 'a verziona Git: <code>$1</code>.",
+       "config-git-bad": "Software 'e cuntrollo d' 'a verziona Git nun truvato.",
+       "config-imagemagick": "Truvato ImageMagick: <code>$1</code>.\n'E miniature d' 'e fiùre sarranno prisente si l'upload song'abbiàte.",
+       "config-gd": "Truvata 'a bibblioteca ntegrata GD Graphics.\n'E miniature 'e ll'immaggene sarranno prisente si l'upload se song'abbiàte.",
+       "config-no-scaling": "Nun se può truvà 'a bibblioteca GD o ImageMagick.\n'E miniature 'e l'immaggene sarranno stutate.",
+       "config-no-uri": "<strong>Errore:</strong> Nun se può determina l'URI 'e mmò.\nInstallazione spezzata.",
+       "config-using-server": "Nomme d' 'o server ca se stà ausanno \"<nowiki>$1</nowiki>\".",
+       "config-using-uri": "URL d' 'o server ca se stà ausanno \"<nowiki>$1$2</nowiki>\".",
+       "config-brokenlibxml": "'O sistema vuosto ave na combinazione 'e verziune 'e PHP e libxml2 nguacchiata ca putesse scassà 'e date 'e MediaWiki 'n manera annascunnusa e pure l'ati apprecaziune p' 'o web.\nAgghiurnate a libxml2 2.7.3 o cchiù muderno ([https://bugs.php.net/bug.php?id=45996 'o bug studiato d' 'o lato PHP]).\nInstallaziona spezzata.",
+       "config-db-type": "Tipo 'e database:",
+       "config-db-host": "Host d' 'o database:",
+       "config-db-host-oracle": "TNS d' 'o database:",
+       "config-db-wiki-settings": "Identifica stu wiki",
+       "config-db-name": "Nomme d' 'o database:",
+       "config-db-name-help": "Sciglite nu nomme ca identificasse 'a wiki vosta.\nNun avess'a cuntenè spazie.\n\nSi ausate nu web hosting spartuto, 'o furnitore d' 'o hosting v'avesse 'a specificà nu nomme 'e database specifico pe' ve permettere 'e crià database pe' bbìa 'e nu pannello 'e cuntrollo.",
+       "config-db-name-oracle": "Schema d' 'o database:",
+       "config-db-install-account": "Cunto utente pe' l'installazione",
+       "config-db-username": "Nomme utente p' 'o database:",
+       "config-db-password": "Password d' 'o database:",
+       "config-db-password-empty": "Avita nzertà na password pe' l'utente nuovo d' 'o database: $1.\nPure si fosse possibbele 'e crià ll'utente senza password chisto nun fosse sicuro.",
+       "config-db-username-empty": "Avita miette nu valore p' 'o \"{{int:config-db-username}}\"",
+       "config-db-wiki-account": "Account utente p' 'o funzionamento nurmale",
+       "config-db-charset": "Nzieme 'e carattere d' 'o database",
+       "config-charset-mysql5-binary": "MySQL 4.1/5.0 binario",
+       "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+       "config-charset-mysql4": "MySQL 4.0 cu compatibbelità UTF-8",
+       "config-mysql-old": "MySQL $1 o cchiù muderno è necessario. Vuje avite $2.",
+       "config-db-port": "Porta d' 'o database:",
+       "config-db-schema": "Schema pe' MediaWiki:",
+       "config-db-schema-help": "Stu schema 'n genere sarrà buono.\nSi 'o vulite cagnà facite sulamente si ne tenite abbesuogno.",
+       "config-pg-test-error": "Nun se può connettà a 'o database <strong>$1</strong>: $2",
+       "config-sqlite-dir": "Cartella 'e data 'e SQLite:",
+       "config-oracle-def-ts": "Tablespace 'e default:",
+       "config-oracle-temp-ts": "Tablespace temporaneo:",
+       "config-type-mysql": "MySQL (o compatibbele)",
+       "config-type-mssql": "Microsoft SQL Server",
+       "config-header-mysql": "Mpustaziune MySQL",
+       "config-header-postgres": "Mpustaziune PostgreSQL",
+       "config-header-sqlite": "Mpustaziune SQLite",
+       "config-header-oracle": "Mpustaziune Oracle",
+       "config-header-mssql": "Mpustaziune 'e Microsoft SQL Server",
+       "config-invalid-db-type": "'O tipo 'e database nun è buono.",
+       "config-missing-db-name": "Avita miette nu valore p' 'o \"{{int:config-db-name}}\"",
+       "config-missing-db-host": "Avita miette nu valore p' 'o \"{{int:config-db-host}}\"",
+       "config-missing-db-server-oracle": "Avita miette nu valore p' 'o \"{{int:config-db-host-oracle}}\"",
        "config-mssql-install-auth": "Sceglie 'o tipo d'autenticazziona ca s'ausarrà pe cunnettà â database, durante ll'operazziona d'istallazziona. Si piglie \"{{int:config-mssql-windowsauth}}\", 'e credenziale 'e qualunque fosse ll'utenza ca 'o webserver sta pruciessanno sarranno ausate.",
-       "config-mssql-web-auth": "Sceglie 'o tipo d'autenticazziona ca 'o web server pigliarrà pe se cunnettà a 'o server 'e bbase 'e dati, durante ll'operazziona nurmale d&#39;'a wiki.\nSi piglie \"{{int:config-mssql-windowsauth}}\", 'e credenziale 'e qualunque fosse ll'utenza ca 'o webserver sta pruciessanno sarranno ausate."
+       "config-mssql-web-auth": "Sceglie 'o tipo d'autenticazziona ca 'o web server pigliarrà pe se cunnettà a 'o server 'e bbase 'e dati, durante ll'operazziona nurmale d'a wiki.\nSi piglie \"{{int:config-mssql-windowsauth}}\", 'e credenziale 'e qualunque fosse ll'utenza ca 'o webserver sta pruciessanno sarranno ausate."
 }
index 93ddfa4..55771c8 100644 (file)
@@ -50,6 +50,7 @@
        "config-env-good": "Miljøet har blitt sjekket.\nDu kan installere MediaWiki.",
        "config-env-bad": "Miljøet har blitt sjekket.\nDu kan installere MediaWiki.",
        "config-env-php": "PHP $1 er innstallert.",
+       "config-env-hhvm": "HHVM $1 er installert.",
        "config-unicode-using-utf8": "Bruker Brion Vibbers utf8_normalize.so for Unicode-normalisering.",
        "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].",
@@ -58,6 +59,7 @@
        "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-magic-quotes-gpc": "<strong>Fatalt: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] er aktiv!</strong>\nDette valget kan ødelegge inndata på en uforutsigelig måte.\nDu kan ikke installere eller bruke MediaWiki uten at denne valgmuligheten er slått av.",
        "config-magic-quotes-runtime": "'''Kritisk: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] er aktiv!'''\nDette alternativet ødelegger inndata på en uforutsigbar måte.\nDu kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.",
        "config-magic-quotes-sybase": "'''Kritisk: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] er aktiv!'''\nDette alternativet ødelegger inndata på en uforutsigbar måte.\nDu kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.",
        "config-mbstring": "'''Kritisk: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] er aktiv!'''\nDette alternativet fører til feil og kan ødelegge data på en uforutsigbar måte.\nDu kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.",
@@ -68,6 +70,7 @@
        "config-memory-raised": "PHPs <code>memory_limit</code> er $1, økt til $2.",
        "config-memory-bad": "'''Advarsel:''' PHPs <code>memory_limit</code> er $1.\nDette er sannsynligvis for lavt.\nInstallasjonen kan mislykkes!",
        "config-ctype": "'''Fatal feil''': PHP må kompileres med støtte for [http://www.php.net/manual/en/ctype.installation.php Ctype-utvidelsen].",
+       "config-iconv": "<strong>Kritisk:</strong> PHP må kompileres med støtte for [http://www.php.net/manual/en/iconv.installation.php iconv-utvidelsen].",
        "config-json": "'''Alvorlig:''' PHP ble kompilert uten JSON-støtte.\nDu må installere enten PHP JSON-utvidelsen eller [http://pecl.php.net/package/jsonc PECL jsonc]-utvidelsen før du installere MediaWiki.\n* PHP-utvidelsen inngår i Red Hat Enterprise Linux (CentOS) 5 and 6, men må aktiveres i <code>/etc/php.ini</code> eller <code>/etc/php.d/json.ini</code>.\n* Noen Linux-distribusjoner sluppet etter mai 2013 har ikke med PHP-utvidelsen, men har i stedet med PECL-utvidelsen <code>php5-json</code> eller <code>php-pecl-jsonc</code>.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] er innstallert",
        "config-apc": "[http://www.php.net/apc APC] er innstallert",
        "config-subscribe": "Abonner på [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce e-postlisten for utgivelsesannonseringer].",
        "config-subscribe-help": "Dette er en lav-volums e-postliste brukt til utgivelsesannonseringer, herunder viktige sikkerhetsannonseringer.\nDu bør abonnere på den og oppdatere MediaWikiinstallasjonen din når nye versjoner kommer ut.",
        "config-subscribe-noemail": "Du prøvde å abonnere på epost-meldinger om nye versjoner uten å oppgi en epost-adresse. Vær vennlig å oppgi en epost-adresse om du ønsker dette abonnementet.",
-       "config-almost-done": "Du er nesten ferdig!\nDu kan hoppe over de resterende konfigurasjonene og installere wikien nå.",
-       "config-optional-continue": "Spør meg flere spørsmål.",
+       "config-almost-done": "Du er nesten ferdig!\nDu kan velge å hoppe over de siste konfigurasjonstrinnene og installere wikien med en gang.",
+       "config-optional-continue": "Still meg flere spørsmål.",
        "config-optional-skip": "Jeg er lei, bare installer wikien.",
        "config-profile": "Brukerrettighetsprofil:",
        "config-profile-wiki": "Åpen wiki",
        "config-profile-help": "Wikier fungerer best om du lar så mange mennesker som mulig redigere den.\nI MediaWiki er det enkelt å se på de siste endringene og tilbakestille eventuell skade som er gjort av naive eller ondsinnede brukere.\n\nImidlertid har mange funnet at MediaWiki er nyttig for mange formål, og av og til er det ikke lett å overbevise alle om fordelene med wiki-funksjonaliteten.\nSå du har valget.\n\nEn '''{{int:config-profile-wiki}}''' tillater enhver å redigere, selv uten å logge inn.\nEn wiki med '''{{int:config-profile-no-anon}}''' tilbyr ekstra ansvarlighet, men kan avskrekke tilfeldige bidragsytere.\n\n'''{{int:config-profile-fishbowl}}'''-scenariet tillater godkjente brukere å redigere, mens publikum kan se sider, og også historikken.\nEn '''{{int:config-profile-private}}''' tillater kun godkjente brukere å se sider, der den samme gruppen også får lov til å redigere dem.\n\nMer komplekse konfigurasjoner av brukerrettigheter er tilgjengelige etter installasjonen, se [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights relevant avsnitt i brukerbeskrivelsen].",
        "config-license": "Opphavsrett og lisens:",
        "config-license-none": "Ingen lisensbunntekst",
-       "config-license-cc-by-sa": "Creative Commons Navngivelse Del på samme vilkår",
-       "config-license-cc-by": "Creative Commons Attribution",
-       "config-license-cc-by-nc-sa": "Creative Commons Navngivelse Ikke-kommersiell Del på samme vilkår",
-       "config-license-cc-0": "Creative Commons Zero (tilgjengelig for alle)",
+       "config-license-cc-by-sa": "Creative Commons Navngivelse-DelPåSammeVilkår",
+       "config-license-cc-by": "Creative Commons Navngivelse",
+       "config-license-cc-by-nc-sa": "Creative Commons Navngivelse-IkkeKommersiell-DelPåSammeVilkår",
+       "config-license-cc-0": "Creative Commons Zero (Fristatus-erklæring)",
        "config-license-gfdl": "GNU Free Documentation License 1.3 eller senere",
-       "config-license-pd": "Offentlig rom",
+       "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-email-settings": "E-postinnstillinger",
        "config-memcache-badport": "Memcached-port-numrene må være mellom $1 og $2.",
        "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-use-as-default": "Bruk denne drakta som standard",
        "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",
index b2d4a04..836e0fc 100644 (file)
@@ -4,9 +4,15 @@
                        "Bhawani Gautam",
                        "RajeshPandey",
                        "सरोज कुमार ढकाल",
-                       "Ganesh Paudel"
+                       "Ganesh Paudel",
+                       "बिप्लब आनन्द"
                ]
        },
+       "config-information": "जानकारी",
+       "config-localsettings-badkey": "तपाइले दिनु भएको कुन्जी गलत छ ।",
+       "config-your-language": "तपाईंको भाषा:",
+       "config-your-language-help": "इन्स्टल गर्दा उपयोग गर्ने भाषा छान्नुहोस् ।",
+       "config-wiki-language": "विकि भाषाहरू",
        "config-page-name": "नाम",
        "config-page-options": "विकल्पहरु",
        "config-page-install": "स्थापना गर्ने",
index 5bf1645..9cf7006 100644 (file)
        "config-restart": "Ja, opnieuw starten",
        "config-welcome": "=== Controle omgeving ===\nEr worden een aantal basiscontroles uitgevoerd met als doel vast te stellen of deze omgeving geschikt is voor een installatie van MediaWiki.\nLever deze gegevens dan ook aan indien u support vraagt bij de installatie.",
        "config-copyright": "=== Auteursrechten en voorwaarden ===\n\n$1\n\nDit programma is vrije software. U mag het verder verspreiden en/of aanpassen in overeenstemming met de voorwaarden van de GNU General Public License zoals uitgegeven door de Free Software Foundation; ofwel versie 2 van de Licentie of - naar uw keuze - enige latere versie.\n\nDit programma wordt verspreid in de hoop dat het nuttig is, maar '''zonder enige garantie''', zelfs zonder de impliciete garantie van '''verkoopbaarheid''' of '''geschiktheid voor een bepaald doel'''.\nZie de GNU General Public License voor meer informatie.\n\nSamen met dit programma hoort u een <doclink href=Copying>exemplaar van de GNU General Public License</doclink> ontvangen te hebben; zo niet, schrijf dan aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Verenigde Staten. Of [http://www.gnu.org/copyleft/gpl.html lees de licentie online].",
-       "config-sidebar": "* [//www.mediawiki.org MediaWiki thuispagina]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Gebruikershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Beheerdershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veel gestelde vragen] (Engelstalig)\n----\n* <doclink href=Readme>Leesmij</doclink> (Engelstalig)\n* <doclink href=ReleaseNotes>Release notes</doclink> (Engelstalig)\n* <doclink href=Copying>Kopiëren</doclink> (Engelstalig)\n* <doclink href=UpgradeDoc>Versie bijwerken</doclink> (Engelstalig)",
+       "config-sidebar": "* [//www.mediawiki.org MediaWiki thuispagina]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Gebruikershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Beheerdershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veelgestelde vragen] (Engelstalig)\n----\n* <doclink href=Readme>Leesmij</doclink> (Engelstalig)\n* <doclink href=ReleaseNotes>Release notes</doclink> (Engelstalig)\n* <doclink href=Copying>Kopiëren</doclink> (Engelstalig)\n* <doclink href=UpgradeDoc>Versie bijwerken</doclink> (Engelstalig)",
        "config-env-good": "De omgeving is gecontroleerd.\nU kunt MediaWiki installeren.",
        "config-env-bad": "De omgeving is gecontroleerd.\nU kunt MediaWiki niet installeren.",
        "config-env-php": "PHP $1 is op dit moment geïnstalleerd.",
+       "config-env-hhvm": "HHVM $1 is geïnstalleerd.",
        "config-unicode-using-utf8": "Voor Unicode-normalisatie wordt utf8_normalize.so van Brion Vibber gebruikt.",
        "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].",
@@ -65,6 +66,8 @@
        "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-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-magic-quotes-gpc": "<strong>Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] is actief!<strong>\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
        "config-magic-quotes-runtime": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
        "config-magic-quotes-sybase": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
        "config-mbstring": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
@@ -75,6 +78,7 @@
        "config-memory-raised": "PHP's <code>memory_limit</code> is $1 en is verhoogd tot $2.",
        "config-memory-bad": "'''Waarschuwing:''' PHP's <code>memory_limit</code> is $1.\nDit is waarschijnlijk te laag.\nDe installatie kan mislukken!",
        "config-ctype": "'''Fataal:''' PHP moet gecompileerd zijn met ondersteuning voor de [http://www.php.net/manual/en/ctype.installation.php extensie Ctype].",
+       "config-iconv": "<strong>Onherstelbare fout:</strong> PHP moet gecompileerd zijn met ondersteuning voor de [http://www.php.net/manual/en/iconv.installation.php uitbreiding iconv].",
        "config-json": "'''Fatale fout:''' PHP is gecompileerd zonder ondersteuning voor JSON.\nU moet de PHP-extensie JSON installeren of de extensie [http://pecl.php.net/package/jsonc PECL jsonc] voordat u MediaWiki installeert.\n* De PHP-extensie is beschikbaar in Red Hat Enterprise Linux (CentOS) 5 en 6, maar moet ingeschakeld worden <code>/etc/php.ini</code> or <code>/etc/php.d/json.ini</code>.\n* Sommige Linuxdistributies die zijn uitgebracht na mei 2013 hebben de PHP-extensie niet, maar hebben een package voor de PECL-extensie als <code>php5-json</code> of <code>php-pecl-jsonc</code>.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] is op dit moment geïnstalleerd",
        "config-apc": "[http://www.php.net/apc APC] is op dit moment geïnstalleerd",
        "config-license-gfdl": "GNU Free Documentation License 1.3 of hoger",
        "config-license-pd": "Publiek domein",
        "config-license-cc-choose": "Een Creative Commons-licentie selecteren",
-       "config-license-help": "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [http://freedomdefined.org/Definition vrije licentie].\nDit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.\nDit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.\n\nAls u teksten uit Wikipedia wilt kunnen gebruiken en u wilt het mogelijk maken teksten uit uw wiki naar Wikipedia te kopiëren, kies dan de licentie '''Creative Commons Naamsvermelding-Gelijk delen'''.\n\nDe GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.\nDit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.\nHet is ook lastig inhoud te hergebruiken onder de GFDL.",
+       "config-license-help": "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [http://freedomdefined.org/Definition vrije licentie].\nDit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.\nDit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.\n\nAls u teksten uit Wikipedia wilt kunnen gebruiken en u wilt het mogelijk maken teksten uit uw wiki naar Wikipedia te kopiëren, kies dan de licentie <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nDe GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.\nDit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.\nHet is ook lastig inhoud te hergebruiken onder de GFDL.",
        "config-email-settings": "E-mailinstellingen",
        "config-enable-email": "Uitgaande e-mail inschakelen",
        "config-enable-email-help": "Als u wilt dat e-mailen mogelijk is, dan moeten de [http://www.php.net/manual/en/mail.configuration.php e-mailinstellingen van PHP] correct zijn.\nAls u niet wilt dat e-mailen mogelijk is, dan kunt u de instellingen hier uitschakelen.",
        "config-extensions": "Uitbreidingen",
        "config-extensions-help": "De bovenstaande uitbreidingen zijn aangetroffen in de map <code>./extensions</code>.\n\nMogelijk moet u aanvullende instellingen maken, maar u kunt deze uitbreidingen nu inschakelen.",
        "config-skins": "Vormgevingen",
+       "config-skins-help": "De hierboven weergegeven uiterlijken zijn aangetroffen in de map <code>./skins</code>. U moet tenminste één uiterlijk inschakelen en het standaard uiterlijk kiezen.",
        "config-skins-use-as-default": "Als standaard vormgeving instellen",
+       "config-skins-missing": "Er zijn geen uiterlijken aangetroffen. MediaWiki gebruikt een basisuiterlijk totdat u een uiterlijk installeert.",
+       "config-skins-must-enable-some": "U moet minstens één vormgeving kiezen om in te schakelen.",
+       "config-skins-must-enable-default": "De vormgeving gekozen als standaard moet ingeschakeld zijn.",
        "config-install-alreadydone": "'''Waarschuwing:''' het lijkt alsof u MediaWiki al hebt geïnstalleerd en probeert het programma opnieuw te installeren.\nGa door naar de volgende pagina.",
        "config-install-begin": "Als u nu op \"{{int:config-continue}}\" klikt, begint de installatie van MediaWiki.\nAls u nog wijzigingen wilt maken, klik dan op \"{{int:config-back}}\".",
        "config-install-step-done": "afgerond",
        "config-install-stats": "Statistieken initialiseren",
        "config-install-keys": "Bezig met aanmaken van geheime sleutels",
        "config-insecure-keys": "'''Waarschuwing:''' De {{PLURAL:$2|sleutel die is aangemaakt|sleutels die zijn aangemaakt}} ($1) tijdens de installatie {{PLURAL:$2|is|zijn}} niet volledig veilig. Overweeg deze handmatig te wijzigen.",
+       "config-install-updates": "Voorkomen dat updates onnodig worden uitgevoerd",
+       "config-install-updates-failed": "<strong>Fout:</strong> het toevoegen van updatesleutels aan tabellen is mislukt met de volgende fout: $1",
        "config-install-sysop": "Gebruiker voor beheerder aanmaken",
        "config-install-subscribe-fail": "Het is niet mogelijk te abonneren op mediawiki-announce: $1",
        "config-install-subscribe-notpossible": "cURL is niet geïnstalleerd en <code>allow_url_fopen</code> is niet beschikbaar.",
index e4bcb6e..98d54ac 100644 (file)
@@ -37,7 +37,7 @@
        "config-env-good": "L’environament es estat verificat.\nPodètz installar MediaWiki.",
        "config-env-bad": "L’environament es estat verificat.\nPodètz pas installar MediaWiki.",
        "config-env-php": "PHP $1 es installat.",
-       "config-env-php-toolow": "PHP $1 es installat.\nPasmens, MediaWiki requerís PHP $2 o superior.",
+       "config-env-hhvm": "HHVM $1 es installat.",
        "config-unicode-using-utf8": "Utilizacion de utf8_normalize.so per Brion Vibber per la normalizacion Unicode.",
        "config-unicode-using-intl": "Utilizacion de [http://pecl.php.net/intl l'extension PECL intl] per la normalizacion Unicode.",
        "config-memory-raised": "Lo paramètre <code>memory_limit</code> de PHP èra a $1, portat a $2.",
        "config-cache-options": "Paramètres per la mesa en escondedor dels objèctes :",
        "config-memcached-servers": "servidors per Memcached :",
        "config-extensions": "Extensions",
+       "config-skins": "Abilhatges",
+       "config-skins-use-as-default": "Utilizar aqueste abilhatge per defaut",
        "config-install-step-done": "fach",
        "config-install-step-failed": "fracàs",
        "config-install-extensions": "Inclusion de las extensions",
        "config-install-database": "Creacion de la banca de donadas",
        "config-install-schema": "Creacion d'esquèma",
+       "config-install-pg-schema-not-exist": "L'esquèma PostgreSQL existís pas",
        "config-install-pg-commit": "Validacion de las modificacions",
        "config-install-pg-plpgsql": "Verificacion del lengatge PL/pgSQL",
        "config-install-user": "Creacion d'un utilizaire de la banca de donadas",
+       "config-install-user-alreadyexists": "L'utilizaire « $1 » existís ja.",
+       "config-install-user-create-failed": "Fracàs al moment de la creacion de l'utilizaire « $1 » : $2",
+       "config-install-user-grant-failed": "Fracàs al moment de l'apondon de permissions a l'utilizaire « $1 » : $2",
+       "config-install-user-missing": "L'utilizaire «$1» existís pas.",
        "config-install-tables": "Creacion de las taulas",
        "config-install-stats": "Inicializacion de las estatisticas",
+       "config-install-keys": "Generacion de la clau secreta",
+       "config-install-updates": "Empachar l’execucion de las mesas a jorn inutilas",
        "config-install-sysop": "Creacion del compte administrator",
+       "config-install-mainpage": "Creacion de la pagina principala amb un contengut per defaut",
+       "config-install-extension-tables": "Creacion de taulas per las extensions activadas",
        "config-install-mainpage-failed": "Impossible d’inserir la pagina principala : $1",
        "config-download-localsettings": "Telecargar <code>LocalSettings.php</code>",
        "config-help": "ajuda",
+       "config-help-tooltip": "clicar per agrandir",
        "mainpagetext": "'''MediaWiki es estat installat amb succès.'''",
        "mainpagedocfooter": "Consultatz lo [//meta.wikimedia.org/wiki/Help:Contents/fr Guida de l'utilizaire] per mai d'entresenhas sus l'utilizacion d'aqueste logicial de wiki.\n\n== Per començar ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista dels paramètres de configuracion]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/oc FAQ MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussions de las distribucions de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptatz MediaWiki dins vòstra lenga]"
 }
index c129ab9..75f73d3 100644 (file)
@@ -1,13 +1,35 @@
 {
        "@metadata": {
                "authors": [
-                       "Aalam"
+                       "Aalam",
+                       "Babanwalia"
                ]
        },
        "config-information": "ਜਾਣਕਾਰੀ",
        "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-upgrade": "ਮੌਜੂਦਾ ਜੜਾਈ ਦਾ ਮਿਆਰ ਚੁੱਕੋ",
+       "config-page-dbsettings": "ਤੱਥ-ਅਧਾਰ ਦੀਆਂ ਸੈਟਿੰਗਾਂ",
+       "config-page-name": "ਨਾਂ",
+       "config-page-options": "ਚੋਣਾਂ",
+       "config-page-install": "ਜੜੋ",
+       "config-page-complete": "ਮੁਕੰਮਲ!",
+       "config-page-restart": "ਜੜਾਈ ਮੁੜ-ਸ਼ੁਰੂ ਕਰੋ",
+       "config-page-readme": "ਮੈਨੂੰ ਪੜ੍ਹੋ",
+       "config-page-copying": "ਨਕਲ",
+       "config-page-upgradedoc": "ਮਿਆਰ-ਉਚਾਈ",
+       "config-page-existingwiki": "ਮੌਜੂਦਾ ਵਿਕੀ",
+       "config-restart": "ਹਾਂਜੀ, ਮੁੜ ਸ਼ੁਰੂ ਕਰੋ",
+       "config-env-php": "PHP $1 ਜੜਿਆ ਗਿਆ।",
+       "config-env-hhvm": "HHVM $1 ਜੜਿਆ ਗਿਆ।",
+       "config-db-wiki-settings": "ਇਸ ਵਿਕੀ ਦੀ ਪਛਾਣ ਕਰਾਉ",
+       "config-db-name": "ਤੱਥ-ਅਧਾਰ ਦਾ ਨਾਂ:",
        "mainpagetext": "'''ਮੀਡਿਆਵਿਕਿ ਠੀਕ ਤਰ੍ਹਾਂ ਇੰਸਟਾਲ ਹੋ ਗਿਆ ਹੈ।'''"
 }
index 0c48ffa..bc8caed 100644 (file)
@@ -17,7 +17,8 @@
                        "WTM",
                        "Alan ffm",
                        "Matik7",
-                       "Pio387"
+                       "Pio387",
+                       "Darellur"
                ]
        },
        "config-desc": "Instalator MediaWiki",
@@ -62,6 +63,7 @@
        "config-env-good": "Środowisko oprogramowania zostało sprawdzone.\nMożesz teraz zainstalować MediaWiki.",
        "config-env-bad": "Środowisko oprogramowania zostało sprawdzone.\nNie możesz zainstalować MediaWiki.",
        "config-env-php": "Zainstalowane jest PHP w wersji $1.",
+       "config-env-hhvm": "Zainstalowany jest HHVM $1.",
        "config-unicode-using-utf8": "Korzystanie z normalizacji Unicode utf8_normalize.so napisanej przez Brion Vibbera.",
        "config-unicode-using-intl": "Korzystanie z [http://pecl.php.net/intl rozszerzenia intl PECL] do normalizacji Unicode.",
        "config-unicode-pure-php-warning": "'''Uwaga!''' [http://pecl.php.net/intl Rozszerzenie intl PECL] do obsługi normalizacji Unicode nie jest dostępne. Użyta zostanie mało wydajna zwykła implementacja w PHP.\nJeśli prowadzisz stronę o dużym natężeniu ruchu, powinieneś zapoznać się z informacjami o [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizacji Unicode].",
@@ -87,7 +89,7 @@
        "config-apc": "[Http://www.php.net/apc APC] jest zainstalowany",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] jest zainstalowany",
        "config-no-cache": "'''Uwaga:''' Pamięć podręczna dla kodu MediaWiki nie będzie uruchomiona., gdyż nie ma żadnego z następujących narzędzi: [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] lub [http://www.iis.net/download/WinCacheForPhp WinCache].",
-       "config-mod-security": "''' Ostrzeżenie ''': Serwer sieci web ma włączone [http://modsecurity.org/ mod_security]. Jeśli niepoprawnie skonfigurowane, może być przyczyną problemów MediaWiki lub innego oprogramowania, które pozwala użytkownikom na wysyłanie dowolnej zawartości.\nSprawdź w [http://modsecurity.org/documentation/ dokumentacji mod_security] lub skontaktuj się z obsługa hosta, jeśli wystąpią losowe błędy.",
+       "config-mod-security": "''' Ostrzeżenie ''': Serwer sieci web ma włączone [http://modsecurity.org/ mod_security]. Jeśli jest niepoprawnie skonfigurowane, może być przyczyną problemów MediaWiki lub innego oprogramowania, które pozwala użytkownikom na wysyłanie dowolnej zawartości.\nSprawdź w [http://modsecurity.org/documentation/ dokumentacji mod_security] lub skontaktuj się z obsługa hosta, jeśli wystąpią losowe błędy.",
        "config-diff3-bad": "Nie znaleziono GNU diff3.",
        "config-git": "Znaleziono oprogramowanie kontroli wersji Git: <code>$1</code>.",
        "config-git-bad": "Oprogramowanie systemu kontroli wersji Git nie zostało znalezione.",
        "config-install-stats": "Inicjowanie statystyki",
        "config-install-keys": "Generowanie tajnych kluczy",
        "config-insecure-keys": "'''Ostrzeżenie:''' {{PLURAL:$2|Klucz bezpieczeństwa|Klucze bezpieczeństwa|Klucze bezpieczeństwa}} ($1) utworzone podczas instalacji {{PLURAL:$2|utworzony podczas instalacji nie jest|utworzone podczas instalacji nie są|utworzone podczas instalacji nie są}} w pełni bezpieczne. Być może warto wygenerować {{PLURAL:$2|własny klucz|własne klucze|własne klucze}}.",
+       "config-install-updates": "Zapobieganie uruchamianiu niepotrzebnych aktualizacji",
        "config-install-sysop": "Tworzenie konta administratora",
        "config-install-subscribe-fail": "Nie można zapisać na listę „mediawiki-announce“ – $1",
        "config-install-subscribe-notpossible": "cURL nie jest zainstalowany, więc <code>allow_url_fopen</code> nie jest dostępne.",
index 68a94e8..a28f610 100644 (file)
@@ -12,7 +12,8 @@
                        "Cybermandrake",
                        "Fabsouza1",
                        "Rodrigo codignoli",
-                       "Tuliouel"
+                       "Tuliouel",
+                       "Marcos dias de oliveira"
                ]
        },
        "config-desc": "O instalador do MediaWiki",
@@ -57,6 +58,7 @@
        "config-env-good": "O ambiente foi verificado.\nVocê pode instalar o MediaWiki.",
        "config-env-bad": "O ambiente foi verificado.\nVocê não pode instalar o MediaWiki.",
        "config-env-php": "O PHP $1 está instalado.",
+       "config-env-hhvm": "HHVM $1 está instalado.",
        "config-unicode-using-utf8": "Usando o utf8_normalize.so, de Brion Vibber, para a normalização Unicode.",
        "config-unicode-using-intl": "Usando a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.",
        "config-unicode-pure-php-warning": "<strong>Aviso</strong>: A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode, abortando e passando para a lenta implementação de PHP puro.\nSe o seu site tem um alto volume de tráfego, informe-se sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalização Unicode].",
        "config-instantcommons": "Ativar o Instant Commons",
        "config-cc-again": "Escolha novamente...",
        "config-advanced-settings": "Configuração avançada",
+       "config-cache-options": "Configuração da cache de objetos:",
+       "config-cache-help": "A cache de objetos é usada para melhorar o desempenho do MediaWiki. Armazena dados usados com frequência.\nSites de tamanho médio ou grande são altamente encorajados a ativar esta funcionalidade e os sites pequenos também terão alguns benefícios em fazê-lo.",
        "config-extensions": "Extensões",
        "config-install-step-done": "feito",
        "config-install-extensions": "Incluindo extensões",
index a827fac..835cf9b 100644 (file)
@@ -59,6 +59,7 @@
        "config-env-good": "O ambiente foi verificado.\nPode instalar o MediaWiki.",
        "config-env-bad": "O ambiente foi verificado.\nNão pode instalar o MediaWiki.",
        "config-env-php": "O PHP $1 está instalado.",
+       "config-env-hhvm": "HHVM $1 está instalado.",
        "config-unicode-using-utf8": "A usar o utf8_normalize.so, por Brion Vibber, para a normalização Unicode.",
        "config-unicode-using-intl": "A usar a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.",
        "config-unicode-pure-php-warning": "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode. Irá recorrer-se à implementação em PHP puro, que é mais lenta.\nSe o seu site tem alto volume de tráfego, devia informar-se um pouco sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/pt normalização Unicode].",
index 410b1d5..772ce96 100644 (file)
@@ -62,6 +62,7 @@
        "config-env-good": "See also:\n* {{msg-mw|Config-env-bad}}",
        "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-upload-deleted": "Prompt for the server directory into which deleted files should be moved.",
        "config-upload-deleted-help": "Explanation for {{msg|config-upload-deleted}}.",
        "config-logo": "Prompt for a link to the logo to use for the wiki.",
-       "config-logo-help": "",
+       "config-logo-help": "Help string shown to the user explaining the requirements for the wiki's logo.",
        "config-instantcommons": "Used as label for the checkbox.\n\nThe help message for this checkbox is:\n* {{msg-mw|Config-instantcommons-help}}",
        "config-instantcommons-help": "Used as help message for the checkbox which is labeled {{msg-mw|config-instantcommons}}.",
        "config-cc-error": "Prompt to manually enter a license when the tool fails to match.",
        "config-cache-help": "Explanation for what object caching is, next to {{msg|config-cache-options}}.",
        "config-cache-none": "Label for the object caching disabled option.",
        "config-cache-accel": "Label for the object caching via PHP option.",
-       "config-cache-memcached": "Label for the object caching via memcached option.",
+       "config-cache-memcached": "{{doc-important|Do not translate \"memcached\".}}\nLabel for the object caching via memcached option.",
        "config-memcached-servers": "{{doc-important|Do not translate \"memcached\".}}\n{{Identical|Memcached server}}",
        "config-memcached-help": "Prompt for the object caching via Memcached option for the user to define server(s) to be used.",
-       "config-memcache-needservers": "Error message for the object caching via Memcached option when the user has failed to define servers at the above prompt.",
+       "config-memcache-needservers": "Error message for the object caching via Memcached option when the user has failed to define servers at the above prompt.\n{{doc-important|Do not translate \"memcached\".}}",
        "config-memcache-badip": "Used as error message. Parameters:\n* $1 - IP address for Memcached\nSee also:\n* {{msg-mw|Config-memcache-noport}}\n* {{msg-mw|Config-memcache-badport}}",
-       "config-memcache-noport": "Used as error message. Parameters:\n* $1 - Memcached server name\nSee also:\n* {{msg-mw|Config-memcache-badip}}\n* {{msg-mw|Config-memcache-badport}}",
-       "config-memcache-badport": "Used as error message. Parameters:\n* $1 - 1 (hard-coded)\n* $2 - 65535 (hard-coded)\nSee also:\n* {{msg-mw|Config-memcache-badip}}\n* {{msg-mw|Config-memcache-noport}}",
+       "config-memcache-noport": "Used as error message. Parameters:\n* $1 - Memcached server name\nSee also:\n* {{msg-mw|Config-memcache-badip}}\n* {{msg-mw|Config-memcache-badport}}\n{{doc-important|Do not translate \"memcached\".}}",
+       "config-memcache-badport": "Used as error message. Parameters:\n* $1 - 1 (hard-coded)\n* $2 - 65535 (hard-coded)\nSee also:\n* {{msg-mw|Config-memcache-badip}}\n* {{msg-mw|Config-memcache-noport}}\n{{doc-important|Do not translate \"memcached\".}}",
        "config-extensions": "{{Identical|Extension}}",
        "config-extensions-help": "{{doc-important|Do not translate <code>./extensions</code>.}}\nUsed in help box.",
        "config-skins": "{{Identical|Skin}}",
        "config-install-step-done": "{{Identical|Done}}",
        "config-install-step-failed": "{{Identical|Failed}}",
        "config-install-extensions": "Notice shown to the user during the install about progress when extensions are being installed.",
-       "config-install-database": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
+       "config-install-database": "Message indicates the database is being set up\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-updates}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
        "config-install-schema": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
        "config-install-pg-schema-not-exist": "Error message shown to users picking PostgreSQL.",
        "config-install-pg-schema-failed": "Parameters:\n* $1 = database user name (usernames in the database are unrelated to wiki user names)\n* $2 =",
        "config-install-user-grant-failed": "Parameters:\n* $1 is the database username for which granting rights failed\n* $2 is the error message",
        "config-install-user-missing": "Used as PostgreSQL error message. Parameters:\n* $1 - database username\nSee also:\n* {{msg-mw|Config-install-user-missing-create}}",
        "config-install-user-missing-create": "Used as PostgreSQL error message. Parameters:\n* $1 - database username\nSee also:\n* {{msg-mw|Config-install-user-missing}}",
-       "config-install-tables": "Message indicates that the tables are being created\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
+       "config-install-tables": "Message indicates that the tables are being created\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-updates}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
        "config-install-tables-exist": "Error notice during the installation saying that the database already seems set up for MediaWiki, so it's continuing without taking that step.",
        "config-install-tables-failed": "Used as PostgreSQL error message. Parameters:\n* $1 - detailed error message",
        "config-install-interwiki": "Message indicates that the interwikitables are being populated\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
        "config-install-stats": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
        "config-install-keys": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
        "config-insecure-keys": "Parameters:\n* $1 - A list of names of the secret keys that were generated.\n* $2 - the number of items in the list $1, to be used with PLURAL.",
-       "config-install-updates": "Message indicating that the updatelog table is filled with keys of updates that won't be run when running database updates.",
+       "config-install-updates": "Message indicating that the updatelog table is filled with keys of updates that won't be run when running database updates.\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-updates}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
        "config-install-updates-failed": "Used as error message. Parameters:\n* $1 - detailed error message",
        "config-install-sysop": "Message indicates that the administrator user account is being created\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
        "config-install-subscribe-fail": "{{doc-important|\"[[m:mail:mediawiki-announce|mediawiki-announce]]\" is the name of a mailing list and should not be translated.}}\nA message displayed if the MediaWiki installer encounters an error making a request to lists.wikimedia.org which hosts the mailing list.\n* $1 - the HTTP error encountered, reproduced as is (English string)",
index 7725734..333aa7d 100644 (file)
        "config-page-existingwiki": "Wiki existent",
        "config-restart": "Da, repornește.",
        "config-env-php": "PHP $1 este instalat.",
-       "config-env-php-toolow": "PHP $1 este instalat.\nTotuși, MediaWiki necesită PHP $2 sau mai nou.",
+       "config-env-hhvm": "HHVM $1 este instalat.",
+       "config-xcache": "[http://xcache.lighttpd.net/ XCache] este instalat",
+       "config-apc": "[http://www.php.net/apc APC] este instalat",
+       "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] este instalat",
        "config-db-type": "Tipul bazei de date:",
        "config-db-host": "Gazdă bază de date:",
        "config-db-host-oracle": "Baza de date TNS:",
@@ -65,7 +68,9 @@
        "config-header-oracle": "Setări Oracle",
        "config-header-mssql": "Setări Microsoft SQL Server",
        "config-invalid-db-type": "Tip de bază de date incorect",
-       "config-missing-db-name": "Trebuie să introduci o valoare pentru „Numele bazei de date”",
+       "config-missing-db-name": "Trebuie să introduceți o valoare pentru „{{int:config-db-name}}”.",
+       "config-missing-db-host": "Trebuie să introduceți o valoare pentru „{{int:config-db-host}}”.",
+       "config-missing-db-server-oracle": "Trebuie să introduceți o valoare pentru „{{int:config-db-host-oracle}}”.",
        "config-connection-error": "$1.\n\nVerificați gazda, numele de utilizator și parola și reîncercați.",
        "config-upgrade-done-no-regenerate": "Actualizare completă.\n\nAcum puteți [$1 începe să vă folosiți wikiul].",
        "config-regenerate": "Regenerare LocalSettings.php →",
@@ -78,6 +83,7 @@
        "config-mysql-charset": "Setul de caractere al bazei de date:",
        "config-mysql-binary": "Binar",
        "config-mysql-utf8": "UTF-8",
+       "config-mssql-auth": "Tip de autentificare:",
        "config-site-name": "Numele wikiului:",
        "config-site-name-blank": "Introduceți un nume pentru sit.",
        "config-project-namespace": "Spațiul de nume al proiectului:",
@@ -86,7 +92,7 @@
        "config-ns-other": "Altul (specificați)",
        "config-ns-other-default": "MyWiki",
        "config-admin-box": "Cont de administrator",
-       "config-admin-name": "Numele dumneavoastră:",
+       "config-admin-name": "Numele dumneavoastră de utilizator:",
        "config-admin-password": "Parolă:",
        "config-admin-password-confirm": "Parola, din nou:",
        "config-admin-password-blank": "Introduceți o parolă pentru contul de administrator.",
        "config-optional-continue": "Adresează-mi mai multe întrebări.",
        "config-optional-skip": "Sunt deja plictisit, doar instalează wikiul.",
        "config-profile": "Profilul drepturilor de utilizator:",
-       "config-profile-wiki": "Wiki tradițional",
+       "config-profile-wiki": "Wiki deschis",
        "config-profile-no-anon": "Crearea de cont este necesară",
        "config-profile-fishbowl": "Doar editorii autorizați",
        "config-profile-private": "Wiki privat",
        "config-license-cc-choose": "Alegeți o licență Creative Commons personalizată",
        "config-email-settings": "Setări pentru e-mail",
        "config-email-usertalk": "Activați notificările pentru pagina de discuții a utilizatorului",
+       "config-upload-settings": "Încărcare de imagini și fișiere",
        "config-upload-deleted": "Director pentru fișierele șterse:",
        "config-logo": "Adresa URL a siglei:",
        "config-cc-again": "Alegeți din nou...",
        "config-install-user": "Se creează utilizatorul pentru baza de date",
        "config-install-user-alreadyexists": "Utilizatorul „$1” există deja",
        "config-install-user-create-failed": "Crearea utilizatorului „$1” a eșuat: $2",
+       "config-install-user-missing": "Utilizatorul „$1” specificat nu există.",
        "config-install-tables": "Se creează tabelele",
        "config-install-stats": "Se inițializează statisticile",
        "config-install-keys": "Se generează cheile secrete",
        "config-install-mainpage-failed": "Nu s-a putut insera pagina principală: $1",
        "config-download-localsettings": "Descarcă <code>LocalSettings.php</code>",
        "config-help": "ajutor",
+       "config-help-tooltip": "clic pentru a extinde",
        "mainpagetext": "'''Programul Wiki a fost instalat cu succes.'''",
        "mainpagedocfooter": "Consultați [//meta.wikimedia.org/wiki/Help:Contents Ghidul utilizatorului (en)] pentru informații despre utilizarea software-ului wiki.\n\n== Primii pași ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista parametrilor configurabili (en)]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Întrebări frecvente despre MediaWiki (en)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discuții a MediaWiki (en)]"
 }
index b5441c1..eef6cac 100644 (file)
@@ -17,7 +17,8 @@
                        "아라",
                        "Meshkov.a",
                        "Eroha",
-                       "Seb35"
+                       "Seb35",
+                       "Striking Blue"
                ]
        },
        "config-desc": "Инсталлятор MediaWiki",
@@ -62,6 +63,7 @@
        "config-env-good": "Проверка внешней среды была успешно проведена.\nВы можете установить MediaWiki.",
        "config-env-bad": "Была проведена проверка внешней среды.\nВы не можете установить MediaWiki.",
        "config-env-php": "Установленная версия PHP: $1.",
+       "config-env-hhvm": "HHVM $1 установлена.",
        "config-unicode-using-utf8": "Использовать Brion Vibber utf8_normalize.so для нормализации Юникода.",
        "config-unicode-using-intl": "Будет использовано [http://pecl.php.net/intl расширение «intl» для PECL] для нормализации Юникода.",
        "config-unicode-pure-php-warning": "'''Внимание!''': [http://pecl.php.net/intl расширение intl из PECL] недоступно для нормализации Юникода, будет использоваться медленная реализация на чистом PHP.\nЕсли ваш сайт работает под высокой нагрузкой, вам следует больше узнать о [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормализации Юникода].",
@@ -87,7 +89,7 @@
        "config-apc": "[http://www.php.net/apc APC] установлен",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] установлен",
        "config-no-cache": "'''Внимание:''' Не найдены [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] или [http://www.iis.net/download/WinCacheForPhp WinCache].\nКэширование объектов будет отключено.",
-       "config-mod-security": "'''Внимание''': на вашем веб-сервере включен [http://modsecurity.org/ mod_security]. При неправильной настройке он может вызывать проблемы для MediaWiki или другого ПО, позволяющего пользователям отправлять на сервер произвольный текст.\nОбратитесь к [http://modsecurity.org/documentation/ документации mod_security] или в поддержку вашего хостера, если при работе возникают непонятные ошибки.",
+       "config-mod-security": "<strong>Внимание</strong>: На вашем веб-сервере включен [http://modsecurity.org/ mod_security]/mod_security2. Многие его стандартные настройки могут вызывать проблемы для MediaWiki или другого ПО, позволяющего пользователям отправлять на сервер произвольный контент.\nОбратитесь к [http://modsecurity.org/documentation/ документации mod_security] или в службу поддержки вашего хостинг-провайдера, если вы сталкиваетесь со случайными ошибками.",
        "config-diff3-bad": "GNU diff3 не найден.",
        "config-git": "Найдена система контроля версий Git: <code>$1</code>.",
        "config-git-bad": "Программное обеспечение по управлению версиями Git не найдено.",
        "config-install-stats": "Статистика инициализации",
        "config-install-keys": "Создание секретных ключей",
        "config-insecure-keys": "'''Предупреждение.''' {{PLURAL:$2|1=Ключ безопасности $1, созданный во время установки, недостаточно надёжен|Ключи безопасности $1, созданные во время установки, недостаточно надёжны}}. Рассмотрите возможность {{PLURAL:$2|1=его|их}} изменения вручную.",
+       "config-install-updates": "Предотвращение запуска ненужных обновлений",
+       "config-install-updates-failed": "<strong>Ошибка:</strong> Вставка ключей обновления в таблицы завершилась со следующей ошибкой: $1",
        "config-install-sysop": "Создание учётной записи администратора",
        "config-install-subscribe-fail": "Не удаётся подписаться на mediawiki-announce: $1",
        "config-install-subscribe-notpossible": "cURL не установлен и не доступна опция <code>allow_url_fopen</code>.",
index 4d44735..4181893 100644 (file)
@@ -48,6 +48,7 @@
        "config-env-good": "The environment haes been checked.\nYe can install MediaWiki.",
        "config-env-bad": "The environment haes been checked.\nYe canna install MediaWiki.",
        "config-env-php": "PHP $1 is instâlled.",
+       "config-env-hhvm": "HHVM $1 is instawed.",
        "config-unicode-using-utf8": "Uising Brion Vibber's utf8_normalize.so fer Unicode normalization.",
        "config-unicode-using-intl": "Uising the [http://pecl.php.net/intl intl PECL extension] fer Unicode normalization.",
        "config-unicode-pure-php-warning": "<strong>Warnishment:</strong> The [http://pecl.php.net/intl intl PECL extension] is no available tae haunle Unicode normalisation, fawin back tae slaw pure-PHP implementation.\nGif ye rin ae hei-traffic steid, ye shid read ae wee bit oan [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
@@ -55,6 +56,7 @@
        "config-no-db": "Coudna fynd ae suitable database driver! Ye need tae instaw ae database driver fer PHP.\nThe follaein database types ar supported: $1.\n\nGif ye compiled PHP yersel, reconfeegure it wi ae database client enabled, fer example, uising <code>./confeegure --wi-mysqli</code>.\nGif ye installed PHP fae ae Debian or Ubuntu package, than ye need tae instaw forby, fer example, the <code>php5-mysql</code> package.",
        "config-outdated-sqlite": "<strong>Warnishment:</strong> ye have SQLite $1, this is lower than minimum required version $2. SQLite will be onavailable.",
        "config-no-fts3": "<strong>Warnishment:</strong> SQLite is compiled wioot the [//sqlite.org/fts3.html FTS3 module], rake features will be onavailable oan this backend.",
+       "config-register-globals-error": "<strong>Mistak: PHP's <code>[http://php.net/register_globals register_globals]</code> optie is enablit.\nIt maun be disablit tae keep gaun wi the instawation.</strong>\nSee [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] fer help oan hou tae dae sae.",
        "config-magic-quotes-gpc": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] is active!</strong>\nThis option corrupts data input unpredictably.\nYe cannae install or uise MediaWiki unless this option is disabled.",
        "config-magic-quotes-runtime": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is active!'</strong>\nThis optie rots data input onpredictably.\nYe canna install or uise MediaWiki onless this optie is disabled.",
        "config-magic-quotes-sybase": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] is active!</strong>\nThis optie rots data input onpredictably.\nYe canna install or uise MediaWiki onless this optie is disabled.",
@@ -66,6 +68,7 @@
        "config-memory-raised": "PHP's <code>memerie_limit</code> is $1, raised til $2.",
        "config-memory-bad": "<strong>Warnishment:</strong> PHP's <code>memerie_limit</code> is $1.\nThis is proably ower low.\nThe installation micht fail!",
        "config-ctype": "<strong>Fatal:</strong> PHP maun be compiled wi support fer the [http://www.php.net/manual/en/ctype.installation.php Ctype extension].",
+       "config-iconv": "<strong>Fatal:</strong> PHP maun be compiled wi support fer the [http://www.php.net/manual/en/iconv.installation.php iconv extension].",
        "config-json": "<strong>Fatal:</strong> PHP wis compiled wioot JSON support.\nYe maun instaw either the PHP JSON extension or the [http://pecl.php.net/package/jsonc PECL jsonc] extension afore instawin MediaWiki.\n* The PHP extension is incluided in Red Hat Enterprise Linux (CentOS) 5 n 6, thoogh it maun be enabled in <code>/etc/php.ini</code> or <code>/etc/php.d/json.ini</code>.\n* Some Linux distributions released efter Mey 2013 omit the PHP extension, instead packagin the PECL extension aes <code>php5-json</code> or <code>php-pecl-jsonc</code>.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] is installed.",
        "config-apc": "[http://www.php.net/apc APC] is installed.",
        "config-db-username": "Database uisername:",
        "config-db-password": "Database passwaird:",
        "config-db-password-empty": "Please enter ae passwaird fer the new database uiser: $1.\nWhile it micht be possible tae mak uisers wi naw passwairds, it's naw secure.",
+       "config-db-username-empty": "Ye maun enter ae value fer \"{{int:config-db-username}}\".",
        "config-db-install-username": "Enter the uisername that will be uised tae connect til the database durin the installâtion process.\nThis isna the uisername o the MediaWiki accont; this is the uisername fr yer database.",
        "config-db-install-password": "Enter the passwaird that will be uised tae connect til the database durin the installâtion process.\nThis isna the passwaird fer the MediaWiki accoont; this is the passwaird fer yer database.",
        "config-db-install-help": "Enter the uisername an passwaird that will be uised tae connect til the database durin the installâtion process.",
        "config-memcache-badport": "Memcached port nummers shid be atween $1 n $2.",
        "config-extensions": "Extensions",
        "config-extensions-help": "The extensions leetit abuin were detected in yer <code>./extensions</code> directerie.\n\nThey micht need addeetional confeeguration, but ye can enable thaim nou.",
+       "config-skins": "Skins",
+       "config-skins-help": "The skins leetit abuin were detectit in yer <code>./skins</code> directerie. Ye maun enable at least yin, n chuise the defaut.",
+       "config-skins-use-as-default": "Uise this skin aes the defaut",
+       "config-skins-missing": "Nae skins were foond; MediaWiki will uise ae fawback skin ontil ye instaw some proper skins.",
+       "config-skins-must-enable-some": "Ye need tae chuisse at least yin skin tae enable.",
+       "config-skins-must-enable-default": "The skin chosen aes the defaut maun be enablit.",
        "config-install-alreadydone": "<strong>Warnishment:</strong> Ye seem tae'v awreadie instawed MediaWiki n ar tryin tae instaw it again.\nPlease proceed til the nex page.",
        "config-install-begin": "Bi pressin \"{{int:config-continue}}\", ye will begin the installation o MediaWiki.\nGif ye still wish tae mak chynges, press \"{{int:config-back}}\".",
        "config-install-step-done": "dun",
        "config-install-stats": "Ineetializin stateestics",
        "config-install-keys": "Generatin hidlins keys",
        "config-insecure-keys": "<strong>Warnishment:</strong> {{PLURAL:$2|Ae secure key|Secure keys}} ($1) generated durin instawation {{PLURAL:$2|is|ar}} naw compleatelie safe. Consider chyngin {{PLURAL:$2|it|theim}} manuallie.",
+       "config-install-updates": "Hinder the runnin o onneedit updates.",
+       "config-install-updates-failed": "<strong>Mistak:</strong> Insertin update keys intae the buirds failed wi the folleain mistak: $1",
        "config-install-sysop": "Makin admeenistrâter uiser accoont",
        "config-install-subscribe-fail": "Onable tae subscribe til mediawiki-announce: $1",
        "config-install-subscribe-notpossible": "cURL isna instawed n <code>allow_url_fopen</code> is na available.",
        "config-install-done": "<strong>Congratulations!</strong>\nYe'v successfulie instawed MediaWiki.\n\nThe instawer haes generated ae <code>LocalSettings.php</code> file.\nIt contains aw yer confeeguration.\n\nYe'll need tae doonlaid it n pit it in the base o yer wiki instawation (the same directerie aes index.php). The doonlaid shid hae stairted autæmateeclie.\n\nGif the doonlaid wisna affered, or gif ye cancelled it, ye can restairt the doonlaid bi clapin oan the airtin ablo:\n\n$3\n\n<strong>Mynd:</strong> Gif ye dinna dae this the nou, this generated confeeguration file willna be available til ye laiter gif ye exit the instawation wioot doonlaidin it.\n\nWhan that haes been dun, ye can <strong>[$2 enter yer wiki]</strong>.",
        "config-download-localsettings": "Dounlaid <code>LocalSettings.php</code>",
        "config-help": "heelp",
+       "config-help-tooltip": "clap tae mak muckler",
        "config-nofile": "File \"$1\" coudna be foond. Haes it been delytit?",
        "config-extension-link": "Did ye ken that yer wiki supports [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensions]?\n\nYe can brouse [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions bi categorie] or the [//www.mediawiki.org/wiki/Extension_Matrix Extension Matrix] tae see the full leet o extensions.",
        "mainpagetext": "<strong>MediaWiki haes been installit wi speed.</strong>",
index ad6bca7..a22f94d 100644 (file)
@@ -37,7 +37,7 @@
        "config-env-good": "Prostredie bolo skontrolované.\nMôžete nainštalovať MediaWiki.",
        "config-env-bad": "Prostredie bolo skontrolované.\nNemôžete nainštalovať MediaWiki.",
        "config-env-php": "PHP $1 je nainštalované.",
-       "config-env-php-toolow": "PHP $1 je nainštalované. Avšak, MediaWiki vyžaduje PHP $2 alebo vyššie.",
+       "config-env-hhvm": "HHVM $1 je nainštalované.",
        "config-db-type": "Typ databázy:",
        "config-db-host": "Databázový server:",
        "config-db-host-oracle": "Databázové TNS:",
        "config-missing-db-name": "Musíte zadať hodnotu pre \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Musíte zadať hodnotu pre \"{{int:config-db-host}}\".",
        "config-missing-db-server-oracle": "Musíte zadať hodnotu pre \"{{int:config-db-host-oracle}}\".",
+       "config-admin-box": "Účet správcu",
        "config-admin-name": "Vaše používateľské meno:",
        "config-admin-password": "Heslo:",
-       "config-admin-password-confirm": "Zopakuj heslo:",
+       "config-admin-password-confirm": "Zopakujte heslo:",
        "config-admin-name-blank": "Zadajte používateľské meno správcu.",
        "config-admin-name-invalid": "Zadané používateľské meno \"<nowiki>$1</nowiki>\" je neplatné. \nZadajte iné meno.",
        "config-admin-password-blank": "Zadajte heslo ku správcovskému účtu.",
index 961264d..d7f435e 100644 (file)
@@ -2,16 +2,20 @@
        "@metadata": {
                "authors": [
                        "Dbc334",
-                       "Eleassar"
+                       "Eleassar",
+                       "Yerpo"
                ]
        },
        "config-desc": "Namestitveni program za MediaWiki",
        "config-title": "Namestitev MediaWiki $1",
        "config-information": "Informacije",
+       "config-localsettings-upgrade": "Zaznana je bila datoteka <code>LocalSettings.php</code>.\nZa nadgradnjo te inštalacije prosim vnesite vrednost <code>$wgUpgradeKey</code> v polje za vnos spodaj.\nNašli jo boste v <code>LocalSettings.php</code>.",
        "config-localsettings-cli-upgrade": "Zaznana je bila datoteka <code>LocalSettings.php</code>.\nZa nadgradnjo te namestitve zaženite <code>update.php</code>",
        "config-localsettings-key": "Nadgraditveni ključ:",
        "config-localsettings-badkey": "Naveden ključ je napačen.",
        "config-upgrade-key-missing": "Zaznana je bila obstoječa namestitev MediaWiki.\nZa nadgradnjo te namestitve vstavite naslednjo vrstico na dno vaše <code>LocalSettings.php</code>:\n\n$1",
+       "config-localsettings-incomplete": "Kaže, da je obstoječa datoteka <code>LocalSettings.php</code> nepopolna. Vrednost $1 ni nastavljena. Prosimo, nastavite to vrednost v <code>LocalSettings.php</code> in kliknite \"{{int:Config-continue}}\".",
+       "config-localsettings-connection-error": "Prišlo je do napake pri povezovanju s podatkovno zbirko z nastavitvami, določenimi v <code>LocalSettings.php</code>. Prosimo popravite te nastavitve in poskusite znova.\n\n$1",
        "config-session-error": "Napaka pri začenjanju seje: $1",
        "config-session-expired": "Kot kaže, so vaši podatki seje potekli.\nSeje so konfigurirane za dobo $1.\nTo lahko povečate tako, da nastavite <code>session.gc_maxlifetime</code> v php.ini.\nPonovno zaženite postopek namestitve.",
        "config-no-session": "Vaši podatki seje so bili izgubljeni!\nPreverite vaš php.ini in se prepričajte, da je <code>session.save_path</code> nastavljena na ustrezno mapo.",
@@ -43,7 +47,7 @@
        "config-env-good": "Okolje je pregledano.\nLahko namestite MediaWiki.",
        "config-env-bad": "Okolje je pregledano.\nNe morete namestiti MediaWiki.",
        "config-env-php": "Nameščen je PHP $1.",
-       "config-env-php-toolow": "Nameščen je PHP $1.\nVendar pa MediaWiki zahteva PHP $2 ali višji.",
+       "config-env-hhvm": "HHVM $1 je nameščen.",
        "config-unicode-using-utf8": "Uporaba utf8_normalize.so Briona Vibberja za normalizacijo unikoda.",
        "config-unicode-using-intl": "Uporaba [http://pecl.php.net/intl razširitve PECL intl] za normalizacijo unikoda.",
        "config-memory-raised": "PHP-jev <code>memory_limit</code> je $1, dvignjen na $2.",
        "config-apc": "[http://www.php.net/apc APC] je nameščen",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] je nameščen",
        "config-diff3-bad": "GNU diff3 ni bilo mogoče najti.",
+       "config-using-server": "Uporabljam ime strežnika \"<nowiki>$1</nowiki>\".",
+       "config-using-uri": "Uporabljam URL strežnika \"<nowiki>$1$2</nowiki>\".",
        "config-db-type": "Vrsta zbirke podatkov:",
        "config-db-host": "Gostitelj zbirke podatkov:",
        "config-db-host-oracle": "TNS zbirke podatkov:",
        "config-db-wiki-settings": "Prepoznaj ta wiki:",
        "config-db-name": "Ime zbirke podatkov:",
        "config-db-name-oracle": "Shema zbirke podatkov:",
+       "config-db-install-account": "Uporabniški račun za namestitev",
        "config-db-username": "Uporabniško ime zbirke podatkov:",
        "config-db-password": "Geslo zbirke podatkov:",
+       "config-db-password-empty": "Prosimo, vnesite geslo za novega uporabnika podatkovne zbirke: $1. Morda je mogoče ustvarjati uporabnike brez gesel, ni pa varno.",
+       "config-db-username-empty": "Vnesti morate vrednost za \"{{int:config-db-username}}\".",
+       "config-db-install-username": "Vnesite uporabniško ime za povezavo s podatkovno zbirko med postopkom nameščanja.\nTo ni uporabniško ime računa MediaWiki, pač pa uporabniško ime za vašo podatkovno zbirko.",
+       "config-db-install-password": "Vnesite geslo za povezavo s podatkovno zbirko med postopkom nameščanja.\nTo ni geslo računa MediaWiki, pač pa geslo za vašo podatkovno zbirko.",
+       "config-db-install-help": "Vnesite uporabniško ime in geslo za povezavo s podatkovno zbirko med postopkom nameščanja.",
+       "config-db-account-lock": "Uporabite isto uporabniško ime in geslo tudi po namestitvi.",
        "config-db-prefix": "Predpona tabel zbirke podatkov:",
        "config-db-charset": "Nabor znakov zbirke podatkov",
        "config-charset-mysql5-binary": "MySQL 4.1/5.0 dvojiško",
        "config-db-port": "Vrata zbirke podatkov:",
        "config-db-schema": "Shema MediaWiki",
        "config-db-schema-help": "Ta shema je po navadi v redu.\nSpremenite jo samo, če veste, da jo morate.",
+       "config-pg-test-error": "Ne morem se povezati z zbirko podatkov <strong>$1</strong>: $2",
        "config-sqlite-dir": "Mapa podatkov SQLite:",
+       "config-type-mysql": "MySQL (ali združljiv)",
        "config-support-info": "MediaWiki podpira naslednje sisteme zbirk podatkov:\n\n$1\n\nČe zgoraj ne vidite navedenega sistema zbirk podatkov, ki ga poskušate uporabiti, sledite navodilom na spodnji povezavi, da omogočite podporo.",
        "config-header-mysql": "Nastavitve MySQL",
        "config-header-postgres": "Nastavitve PostgreSQL",
        "config-header-sqlite": "Nastavitve SQLite",
        "config-header-oracle": "Nastavitve Oracle",
+       "config-header-mssql": "nastavitve Microsoft SQL Server",
        "config-invalid-db-type": "Neveljavna vrsta zbirke podatkov",
        "config-missing-db-name": "Vnesti morate vrednost za »{{int:config-db-name}}«",
        "config-missing-db-host": "Vnesti morate vrednost za »{{int:config-db-host}}«.",
        "config-mysql-charset": "Nabor znakov zbirke podatkov:",
        "config-mysql-binary": "Dvojiško",
        "config-mysql-utf8": "UTF-8",
+       "config-mssql-auth": "Tip avtentikacije:",
        "config-site-name": "Ime wikija:",
        "config-site-name-help": "To bo prikazano v naslovni vrstici brskalnika in na drugih različnih mestih.",
        "config-site-name-blank": "Vnesite ime strani.",
        "config-profile-no-anon": "Zahtevano je ustvarjanje računa",
        "config-profile-fishbowl": "Samo pooblaščeni urejevalci",
        "config-profile-private": "Zasebni wiki",
+       "config-profile-help": "Wikiji delujejo najbolje, kadar jih lahko ureja največje možno število ljudi.\nPregled nad zadnjimi spremembami in razveljavljanje škode, ki jo povzročijo neuki ali zlonamerni uporabniki, je v MediaWiki preprosto.\n\nVendar pa je MediaWiki uporaben v celi vrsti različnih vlog, pri čemer včasih ni lahko prepričati vseh o prednostih wiki načina. Zato imate izbiro.\n\nModel <strong>{{int:config-profile-wiki}}</strong> dovoljuje urejanje vsem, tudi brez prijavljanja.\nWiki, nastavljen na <strong>{{int:config-profile-no-anon}}</strong> nudi dodatno sledljivost, vendar lahko odvrne priložnostne urejevalce.\n\nScenarij <strong>{{int:config-profile-fishbowl}}</strong> dovoljuje urejanje odobrenim uporabnikom, pri čemer sta vsebina in zgodovina strani javni.\nV načinu <strong>{{int:config-profile-private}}</strong> lahko urejajo in pregledujejo strani le odobreni uporabniki.\n\nPodrobnejše konfiguriranje uporabniških pravic je možno po namestitvi, glejte [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights vnos v uporabniškem priročniku].",
        "config-license": "Avtorske pravice in licenca:",
        "config-license-none": "Brez noge dovoljenja",
        "config-license-cc-by-sa": "Creative Commons Priznanje avtorstva-Deljenje pod enakimi pogoji",
        "config-license-cc-by": "Creative Commons Priznanje avtorstva",
        "config-license-cc-by-nc-sa": "Creative Commons Priznanje avtorstva-Nekomercialno-Deljenje pod enakimi pogoji",
        "config-license-cc-0": "Creative Commons Zero (javna last)",
+       "config-license-gfdl": "Dovoljenje GNU za rabo proste dokumentacije 1.3 ali kasnejše",
        "config-license-pd": "Javna last",
        "config-license-cc-choose": "Izberite dovoljenje Creative Commons po meri",
        "config-email-settings": "Nastavitve e-pošte",
index 7a0976b..b8f131e 100644 (file)
@@ -1,5 +1,9 @@
 {
-       "@metadata": [],
-       "mainpagetext": "'''''Software'' MediaWiki geus diinstal.'''",
+       "@metadata": {
+               "authors": [
+                       "Kandar"
+               ]
+       },
+       "mainpagetext": "<strong>MediaWiki geus réngsé diinstal.</strong>",
        "mainpagedocfooter": "Mangga tingal ''[//meta.wikimedia.org/wiki/MediaWiki_localisation documentation on customizing the interface]'' jeung [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Tungtunan Pamaké] pikeun pitulung maké jeung konfigurasi."
 }
index b46902c..60d072a 100644 (file)
@@ -6,7 +6,8 @@
                        "WikiPhoenix",
                        "Josve05a",
                        "Lokal Profil",
-                       "Tobulos1"
+                       "Tobulos1",
+                       "Rotsee"
                ]
        },
        "config-desc": "Installationsprogrammet för MediaWiki",
@@ -51,6 +52,7 @@
        "config-env-good": "Miljön har kontrollerats.\nDu kan installera MediaWiki.",
        "config-env-bad": "Miljön har kontrollerats.\nDu kan inte installera MediaWiki.",
        "config-env-php": "PHP $1 är installerat.",
+       "config-env-hhvm": "HHVM $1 är installerat.",
        "config-unicode-using-utf8": "Använder Brion Vibbers utf8_normalize.so för Unicode-normalisering.",
        "config-unicode-using-intl": "Använder [http://pecl.php.net/intl intl PECL-tillägget] för Unicode-normalisering.",
        "config-unicode-pure-php-warning": "'''Varning:''' [http://pecl.php.net/intl intl PECL-tillägget] är inte tillgängligt för att hantera Unicode-normalisering, faller tillbaka till en långsamt implementering i ren PHP.\nOm du driver en högtrafikerad webbplats bör du läsa lite om [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].",
        "config-profile-no-anon": "Kontoskapande krävs",
        "config-profile-fishbowl": "Endast auktoriserade redigerare",
        "config-profile-private": "Privat wiki",
-       "config-profile-help": "Wikis fungerar bäst när du låter som många människor som möjligt redigera dem.\nI MediaWiki, är det lätt att granska de senaste ändringarna och återställa alla skador som utförs av naiva eller illvilliga användare.\n\nMen många har funnit MediaWiki användbart i en mängd olika roller, och ibland är det inte lätt att övertyga alla fördelarna med wiki-sättet.\nSå valet är ditt.\n\nModellen <strong>{{int:config-profil-wiki}}</strong> tillåter vem som helst att redigera, utan att ens behöva logga in.\nEn wiki med <strong>{{int:config-profil-ingen-anon}}</strong> ger extra ansvarskänsla, men kan avskräcka tillfälliga bidragsgivare.\n\nScenariot <strong>{{int:config-profil-fishbowl}}</strong> tillåter godkända användare att redigera, men allmänheten kan se sidorna, inklusive historik.\nA <strong>{{int:config-profil-privat}}</strong> tillåter endast godkända användare att se sidor, samma grupp får även redigera.\n\nMer komplexa användarrättighetskonfigurationer finns tillgängliga efter installationen, se [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights avsnittet i manualen].",
+       "config-profile-help": "Wikier fungerar bäst när du låter som många människor som möjligt redigera dem.\nI MediaWiki är det lätt att granska de senaste ändringarna och återställa alla skador som utförs av naiva eller illvilliga användare.\n\nMen många har funnit MediaWiki användbart i en mängd olika roller, och ibland är det inte lätt att övertyga alla om fördelarna med wiki-sättet.\nSå valet är ditt.\n\nModellen <strong>{{int:config-profil-wiki}}</strong> tillåter vem som helst att redigera, utan att ens behöva logga in.\nEn wiki med <strong>{{int:config-profil-ingen-anon}}</strong> ger extra ansvarskänsla, men kan avskräcka tillfälliga bidragsgivare.\n\nScenariot <strong>{{int:config-profil-fishbowl}}</strong> tillåter godkända användare att redigera, men allmänheten kan se sidorna, inklusive historik.\nA <strong>{{int:config-profil-privat}}</strong> tillåter endast godkända användare att se sidor, samma grupp får även redigera.\n\nMer komplexa användarrättighetskonfigurationer finns tillgängliga efter installationen, se [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights avsnittet i manualen].",
        "config-license": "Upphovsrätt och licens:",
        "config-license-none": "Ingen licenssidfot",
        "config-license-cc-by-sa": "Creative Commons Erkännande-DelaLika",
        "config-install-stats": "Initierar statistik",
        "config-install-keys": "Genererar hemliga nycklar",
        "config-insecure-keys": "'''Varning:''' {{PLURAL:$2|En säkerhetsnyckel|Säkerhetsnycklar}} ($1) som generades under installationen är inte helt {{PLURAL:$2|säker|säkra}} . Överväg att ändra {{PLURAL:$2|den|dem}} manuellt.",
+       "config-install-updates": "Förhindra att onödiga uppdateringar körs",
+       "config-install-updates-failed": "<strong>Fel:</strong> Infogning av uppdateringsnycklar i tabeller misslyckades med följande fel:$1",
        "config-install-sysop": "Skapar administratörskonto",
        "config-install-subscribe-fail": "Det gick inte att prenumerera på mediawiki-announce: $1",
        "config-install-subscribe-notpossible": "cURL är inte installerad och <code>allow_url_fopen</code> är inte tillgänglig.",
index 9a894c2..4b83500 100644 (file)
@@ -50,7 +50,6 @@
        "config-env-good": "Nasuri na ang kapaligiran.\nMailuluklok mo ang MediaWiki.",
        "config-env-bad": "Nasuri na ang kapaligiran.\nHindi mo mailuklok ang MediaWiki.",
        "config-env-php": "Naitalaga ang PHP na $1.",
-       "config-env-php-toolow": "Naitalaga ang PHP $1.\nSubalit, nangangailangan ang MediaWiki ng PHP $2 o mas mataas pa.",
        "config-unicode-using-utf8": "Ginagamit ang utf8_normalize.so ni Brion Vibber para sa pagpapanormal ng Unikodigo.",
        "config-unicode-using-intl": "Ginagamit ang [http://pecl.php.net/intl intl dugtong na PECL] para sa pagsasanormal ng Unikodigo.",
        "config-unicode-pure-php-warning": "'''Babala''': Ang [http://pecl.php.net/intl dugtong ng internasyunal na PECL] ay hindi makukuha upang makapanghawak ng pagpapanormal ng Unikodigo, na babagsak na pabalik sa mabagal na pagsasakatuparan ng dalisay na PHP.\nKapag nagpapatakbo ka ng isang pook na mataas ang trapiko, dapat kang bumasa ng kaunti hinggil sa [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations pagpapanormal ng Unikodigo].",
@@ -58,7 +57,6 @@
        "config-no-db": "Hindi matagpuan ang isang angkop na tagapagmaneho ng kalipunan ng datos! Kailangan mong magluklok ng isang tagapagmaneho ng kalipunan ng dato para sa PHP.\nTinatangkilik ang sumusunod na mga uri ng kalipunan ng dato: $1.\n\nKung ikaw ay nasa isang pinagsasaluhang pagpapasinaya, hilingin sa iyong tagapagbigay ng pagpapasinaya na iluklok ang isang angkop na tagapagmaneho ng kalipunan ng dato.\nKung ikaw mismo ang nangalap ng PHP, muling isaayos ito na pinagagana ang isang kliyente ng kalipunan ng dato, halimbawa na ang paggamit ng <code>./configure --with-mysql</code>.\nKung iniluklok mo ang PHP mula sa isang pakete ng Debian o Ubuntu, kung gayon kailangan mo ring magluklok ng modyul na php5-mysql.",
        "config-outdated-sqlite": "'''Babala''': mayroong kang $1 ng SQLite, na mas mababa kaysa sa pinaka mababang kailangang bersiyon na $2. Magiging hindi makukuha ang SQLite.",
        "config-no-fts3": "'''Warning''': Ang SQLite ay hindi itinala at tinipon na wala ang [//sqlite.org/fts3.html modulong FTS3], ang mga tampok na panghanap ay magiging hindi makukuha sa ibabaw ng panlikod na dulong ito.",
-       "config-register-globals": "'''Babala: Ang mapipili na <code>[http://php.net/register_globals register_globals]</code> ng PHP ay pinagagana.'''\n'''Huwag paganahin kung kaya mo.'''\nAandar ang MediaWiki, subalit ang tagapaghain mo ay nakalantad sa maaaring maganap na mga kahinaang pangkatiwasayan.",
        "config-magic-quotes-runtime": "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!'''\nAng piniling ito ay hindi mahuhulaan na pipinsala sa lahok na dato.\nHindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na gumagana ang pinili na ito.",
        "config-magic-quotes-sybase": "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!'''\nHindi mahuhulaan na sinisira ng napiling ito ang lahok na dato.\nHindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na pinagagana ang napiling ito.",
        "config-mbstring": "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''\nAng napiling ito ay nagdurulot ng mga kamalian at maaaring sumira nang hindi nahuhulaan ang dato.\nHindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na pinagagana ang napiling ito.",
index 83c51ee..8b4136e 100644 (file)
@@ -6,7 +6,8 @@
                        "Rhinestorm",
                        "SiLveRLeaD",
                        "Trncmvsr",
-                       "Sayginer"
+                       "Sayginer",
+                       "Trockya"
                ]
        },
        "config-desc": "MediaWiki yükleyicisi",
        "config-install-schema": "Şema oluştur",
        "config-install-pg-schema-not-exist": "PostgreSQL şema yok.",
        "config-install-pg-commit": "Değişiklikleri yapılıyor",
+       "config-pg-no-create-privs": "Kurulum için belirttiğiniz hesap yeni bir hesap oluşturmak için gereken izinlere sahip değil.",
        "config-install-user": "Veritabanı kullanıcısı oluşturma",
        "config-install-user-alreadyexists": "Kullanıcı \" $1 \" zaten var",
        "config-install-user-create-failed": "Kullanıcı oluşturma \" $1 \" başarısız oldu:$2",
index 001a0f8..e030443 100644 (file)
@@ -55,6 +55,7 @@
        "config-env-good": "Перевірку середовища успішно завершено.\nВи можете встановити MediaWiki.",
        "config-env-bad": "Було проведено перевірку середовища. Ви не можете встановити MediaWiki.",
        "config-env-php": "Встановлено версію PHP: $1.",
+       "config-env-hhvm": "HHVM $1  встановлено.",
        "config-unicode-using-utf8": "Використовувати utf8_normalize.so Брайона Віббера для нормалізації Юнікоду.",
        "config-unicode-using-intl": "Використовувати [http://pecl.php.net/intl міжнародне розширення PECL] для нормалізації Юнікоду.",
        "config-unicode-pure-php-warning": "'''Увага''': [http://pecl.php.net/intl міжнародне розширення PECL] не може провести нормалізацію Юнікоду.\nЯкщо ваш сайт має високий трафік, вам варто почитати про [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормалізацію Юнікоду].",
        "config-install-stats": "Ініціалізація статистики",
        "config-install-keys": "Генерація секретних ключів",
        "config-insecure-keys": "'''Увага:''' {{PLURAL:$2|1=Секретний ключ|Секретні ключі}} ($1), {{PLURAL:$2|1=згенерований в процесі встановлення, недостатньо надійний|згенеровані в процесі встановлення, недостатньо надійні}}. Розгляньте можливість {{PLURAL:$2|1=його|їх}} заміни вручну.",
+       "config-install-updates": "Запобігти запуску непотрібних оновлень",
+       "config-install-updates-failed": "<strong>Помилка:</strong> Вставка оновленних ключів в таблиці не вдалося через таку помилку:$1",
        "config-install-sysop": "Створення облікового запису адміністратора",
        "config-install-subscribe-fail": "Не можливо підписатись на mediawiki-announce: $1",
        "config-install-subscribe-notpossible": "cURL не встановлено і опція <code>allow_url_fopen</code> не доступна.",
index 1f3f89e..4be4d98 100644 (file)
        "config-page-upgradedoc": "Nâng cấp",
        "config-page-existingwiki": "Wiki đã tồn tại",
        "config-restart": "Có, khởi động lại nó",
+       "config-welcome": "=== Kiểm tra môi trường ===\nBây giờ sẽ kiểm tra sơ qua môi trường này có phù hợp cho việc cài đặt MediaWiki.\nHãy nhớ bao gồm thông tin này khi nào xin hỗ trợ hoàn thành việc cài đặt.",
        "config-env-good": "Đã kiểm tra môi trường.\nBạn có thể cài đặt MediaWiki.",
        "config-env-bad": "Đã kiểm tra môi trường.\nBạn không thể cài đặt MediaWiki.",
        "config-env-php": "PHP $1 đã được cài đặt.",
-       "config-env-php-toolow": "PHP $1 đã được cài đặt.\nTuy nhiên, MediaWiki cần PHP $2 trở lên.",
+       "config-env-hhvm": "HHVM $1 được cài đặt.",
        "config-unicode-using-utf8": "Đang sử dụng utf8_normalize.so của Brion Vibber để chuẩn hóa văn bản Unicode.",
        "config-unicode-using-intl": "Sẽ sử dụng [http://pecl.php.net/intl phần mở rộng PECL intl] để chuẩn hóa Unicode.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] đã được cài đặt",
        "config-profile": "Hồ sơ quyền người dùng:",
        "config-profile-wiki": "Mở wiki",
        "config-profile-no-anon": "Bắt buộc mở tài khoản",
+       "config-profile-fishbowl": "Chỉ những người dùng được phép",
        "config-profile-private": "Wiki riêng tư",
        "config-license": "Bản quyền và giấy phép:",
        "config-license-none": "Không hiển thị giấy phép ở chân trang",
        "config-memcache-badip": "Bạn đã nhập một địa chỉ IP không hợp lệ cho Memcached: $1.",
        "config-memcache-badport": "Số cổng Memcached phải từ $1 đến $2.",
        "config-extensions": "Phần mở rộng",
+       "config-skins": "Giao diện",
+       "config-skins-use-as-default": "Dùng giao diện này làm mặc định",
+       "config-skins-must-enable-some": "Phải chọn ít nhất một giao diện để kích hoạt.",
+       "config-skins-must-enable-default": "Giao diện được chọn làm mặc định phải được kích hoạt.",
        "config-install-step-done": "hoàn tất",
        "config-install-step-failed": "thất bại",
        "config-install-extensions": "Đang bao gồm phần mở rộng",
        "config-install-schema": "Đang tạo giản đồ",
        "config-install-pg-schema-not-exist": "Lược đồ PostgreSQL không tồn tại.",
        "config-install-pg-schema-failed": "Thất bại khi tạo các bảng.\nHãy chắc chắn rằng người dùng “$1” có thể ghi vào giản đồ “$2”.",
+       "config-install-pg-commit": "Đang gửi các thay đổi",
        "config-install-pg-plpgsql": "Tìm ngôn ngữ PL/pgSQL",
        "config-pg-no-plpgsql": "Bạn cần phải cài đặt ngôn ngữ PL/pgSQL vào cơ sở dữ liệu $1",
        "config-install-user": "Đang tạo người dùng trên cơ sở dữ liệu",
        "config-install-interwiki-exists": "'''Cảnh báo:''' Hình như đã có mục trong bảng liên wiki.\nĐã bỏ qua danh sách mặc định.",
        "config-install-stats": "Đang khởi tạo các thống kê",
        "config-install-keys": "Tạo ra các chìa khóa bí mật",
+       "config-install-updates": "Tránh các cập nhật không cần thiết",
        "config-install-sysop": "Đang mở tài khoản người dùng bảo quản viên",
        "config-install-subscribe-fail": "Không thể theo dõi mediawiki-announce: $1",
        "config-install-subscribe-notpossible": "cURL không được cài đặt và <code>allow_url_fopen</code> không có sẵn.",
        "config-install-mainpage-failed": "Không thể chèn trang đầu: $1",
        "config-download-localsettings": "Tải về <code>LocalSettings.php</code>",
        "config-help": "Trợ giúp",
+       "config-help-tooltip": "nhấn chuột để mở rộng",
        "config-nofile": "Không tìm thấy tập tin “$1”. Nó có phải bị xóa không?",
        "mainpagetext": "'''MediaWiki đã được cài đặt thành công.'''",
        "mainpagedocfooter": "Xin đọc [//meta.wikimedia.org/wiki/Help:Contents Hướng dẫn sử dụng] để biết thêm thông tin về cách sử dụng phần mềm wiki.\n\n== Để bắt đầu ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Danh sách các thiết lập cấu hình]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Các câu hỏi thường gặp MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Danh sách gửi thư về việc phát hành MediaWiki]"
index b297a19..f4c3316 100644 (file)
@@ -21,7 +21,8 @@
                        "Zjzengdongyang",
                        "Mywood",
                        "Impersonator 1",
-                       "Fengchao"
+                       "Fengchao",
+                       "Duolaimi"
                ]
        },
        "config-desc": "MediaWiki安装程序",
        "config-env-good": "环境检查已经完成。您可以安装MediaWiki。",
        "config-env-bad": "环境检查已经完成。您不能安装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>è­¦å\91\8aï¼\9a</strong>å\9b ä¸ºå°\9aæ\9cªå®\89è£\85 [http://pecl.php.net/intl intl PECL æ\89©å±\95]以å¤\84ç\90\86 Unicode æ­£å¸¸å\8c\96ï¼\8cæ\95\85å\8fªè\83½é\80\80è\80\8cé\87\87ç\94¨è¿\90è¡\8cè¾\83æ\85¢ç\9a\84纯 PHP å®\9eç\8e°ç\9a\84æ\96¹æ³\95ã\80\82\nå¦\82æ\9e\9cæ\82¨è¿\90è¡\8cç\9d\80ä¸\80个é«\98æµ\81é\87\8fç\9a\84ç«\99ç\82¹ï¼\8c请å\8f\82é\98\85 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode æ­£å¸¸化]一文。",
+       "config-unicode-pure-php-warning": "<strong>è­¦å\91\8aï¼\9a</strong>å\9b ä¸ºå°\9aæ\9cªå®\89è£\85 [http://pecl.php.net/intl intl PECL æ\89©å±\95]以å¤\84ç\90\86 Unicode æ­£å¸¸å\8c\96ï¼\8cæ\95\85å\8fªè\83½é\80\80è\80\8cé\87\87ç\94¨è¿\90è¡\8cè¾\83æ\85¢ç\9a\84纯 PHP å®\9eç\8e°ç\9a\84æ\96¹æ³\95ã\80\82\nå¦\82æ\9e\9cæ\82¨è¿\90è¡\8cç\9d\80ä¸\80个é«\98æµ\81é\87\8fç\9a\84ç½\91ç«\99ï¼\8c请å\8f\82é\98\85 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicodeæ \87å\87\86化]一文。",
        "config-unicode-update-warning": "'''警告''':Unicode正常化封装器的已安装版本使用了旧版本的[http://site.icu-project.org/ ICU项目]库。如果您需要使用Unicode,请将其[//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 升级]。",
        "config-no-db": "找不到合适的数据库驱动!您需要为PHP安装数据库驱动。目前支持以下数据库:$1。如果您是自己编译的PHP,请重新配置他与数据库客户端将其启用,诸如,使用<code>./configure --with-mysqli</code>。如果您从Debian或Ubuntu包安装了PHP,之后您仍需要安装诸如<code>php5-mysql</code>包。",
        "config-outdated-sqlite": "'''警告''':您已安装SQLite $1,但是它的版本低于最低要求版本$2。因此您无法选择SQLite。",
        "config-type-mysql": "MySQL(或兼容程序)",
        "config-type-mssql": "微软SQL服务器",
        "config-support-info": "MediaWiki支持以下数据库系统:\n\n$1\n\n如果您在下面列出的数据库系统中没有找到您希望使用的系统,请根据上方链向的指引启用支持。",
-       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL]是MediaWiki的首选数据库,对它的支持最为完备([http://www.php.net/manual/en/mysql.installation.php 如何将对MySQL的支持编译进PHP中])",
+       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL]是MediaWiki的首选数据库,对它的支持最为完备。MediaWiki也可以在[{{int:version-db-mariadb-url}} MariaDB]和[{{int:version-db-percona-url}} Percona Server]下工作,它们与MySQL兼容。([http://www.php.net/manual/en/mysql.installation.php 如何将对MySQL的支持编译进PHP中])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL]是一种流行的开源数据库系统,可作为MySQL的替代([http://www.php.net/manual/en/pgsql.installation.php 如何将对PostgreSQL的支持编译进PHP中])。本程序中可能依然存在一些小而明显的错误,因此并不建议在生产环境中使用该数据库系统。",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite]是一种轻量级的数据库系统,能被良好地支持。([http://www.php.net/manual/en/pdo.installation.php 如何将对SQLite的支持编译进PHP中],须使用PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle]是一种商用企业级的数据库。([http://www.php.net/manual/en/oci8.installation.php 如何将对OCI8的支持编译进PHP中])",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
        "config-mysql-myisam-dep": "'''警告''':您选择了MyISAM作为MySQL的存储引擎,MediaWiki并不推荐您这么做,因为:\n* 它仅能通过表锁定来勉强支持并发\n* 与其他引擎相比,它更容易被损坏\n* MediaWiki代码库并不总会去处理MyISAM\n\n如果您的MySQL程序支持InnoDB,我们高度推荐您使用该引擎替代MyISAM。\n如果您的MySQL程序不支持InnoDB,请考虑升级。",
-       "config-mysql-only-myisam-dep": "''''警告:'''MyISAM是MySQL在此机器上唯一可用的存储引擎,但它不适合用于MediaWiki,因为:\n*因为表级锁定,它几乎不支持并发。\n*它相比其他引擎更容易损坏。\n*MediaWiki代码不能总是按照预期操作MyISAM。\n\n你的MySQL不支持InnoDB,是时候升级了。",
+       "config-mysql-only-myisam-dep": "<strong>警告:</strong>MyISAM是MySQL在此机器上唯一可用的存储引擎,但它不适合用于MediaWiki,因为:\n*因为表级锁定,它几乎不支持并发。\n*它相比其他引擎更容易损坏。\n*MediaWiki代码不能总是按照预期操作MyISAM。\n\n你的MySQL不支持InnoDB,是时候升级了。",
        "config-mysql-engine-help": "'''InnoDB'''通常是最佳选项,因为它对并发操作有着良好的支持。\n\n'''MyISAM'''在单用户或只读环境下可能会有更快的性能表现。但MyISAM数据库出错的概率一般要大于InnoDB数据库。",
        "config-mysql-charset": "数据库字符集:",
        "config-mysql-binary": "二进制",
        "config-profile-help": "如果您允许尽量多的人编写wiki,网站上的内容会更加丰富。在MediaWiki中,您可以轻松地审查最近更改,并轻易回退掉新手或破坏者造成的损害。\n\n然而,许多人觉得让MediaWiki存在多种角色将更加好用;同时,要说服所有人都愿以wiki的方式作贡献并非一件易事。因此,您可以有以下选择:\n\n'''{{int:config-profile-wiki}}'''允许包括未登录用户在内的所有人编辑。'''{{int:config-profile-no-anon}}'''的wiki需要额外的注册流程,这有可能会阻碍随意贡献者。\n\n'''{{int:config-profile-fishbowl}}'''模式只允许获批准的用户编辑,但对公众开放页面浏览(包括历史记录)。'''{{int:config-profile-private}}'''则只允许获批准的用户浏览、编辑页面。\n\n安装完成后,您还可以对用户权限进行更多、更复杂的配置,参见[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights 相关的使用手册]。",
        "config-license": "版权和许可证:",
        "config-license-none": "页脚无许可证",
-       "config-license-cc-by-sa": "知识共享署名-相同方式共享",
+       "config-license-cc-by-sa": "知识共享“署名-相同方式共享”",
        "config-license-cc-by": "知识共享署名",
        "config-license-cc-by-nc-sa": "知识共享署名-非商业性使用-相同方式共享",
        "config-license-cc-0": "知识共享Zero(公有领域)",
        "config-install-stats": "初始化统计",
        "config-install-keys": "生成密钥中",
        "config-insecure-keys": "'''警告''':在安装过程中生成的{{PLURAL:$2|安全密钥|安全密钥}}($1){{PLURAL:$2|并|并}}不一定安全。请考虑手动更改{{PLURAL:$2|它|它们}}。",
+       "config-install-updates": "防止运行不需要的更新",
+       "config-install-updates-failed": "<strong>错误:</strong>表格中插入更新关键字失败并出现如下错误:$1",
        "config-install-sysop": "正在创建管理员用户帐号",
        "config-install-subscribe-fail": "无法订阅mediawiki-announce:$1",
        "config-install-subscribe-notpossible": "没有安装cURL,<code>allow_url_fopen</code>也不可用。",
index cb6cefb..ce1b260 100644 (file)
        "config-restart": "是的,重新開始",
        "config-welcome": "=== 環境檢查 ===\n現在會做基本的檢查,檢查環境是否符合 MediaWiki 安裝所需。\n若您要尋求如何完成安裝的協助,請記得提供以下訊息。",
        "config-copyright": "=== 版權聲明與授權條款 ===\n\n$1\n\n本程式為自由軟體;您可依據自由軟體基金會所發表的 GNU 通用公共授權條款規定,將本程式重新發佈與/或修改;無論您依據的是本授權條款的第二版或 (您可自行選擇) 之後的任何版本。\n\n本程式發佈的目的是希望可以提供幫助,但 <strong>不負任何擔保責任</strong>;亦無隱含對 <strong>適售性</strong> 或 <strong>特定用途的適用性</strong> 的情形擔保。詳情請參照 GNU 通用公共授權。\n\n您應已隨本程式收到 <doclink href=\"Copying\">GNU 通用公共授權條款的副本</doclink>;如果沒有,請信件通知自由軟體基金會,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或 [http://www.gnu.org/copyleft/gpl.html 線上閱讀]。",
-       "config-sidebar": "* [www.mediawiki.org/wiki/MediaWiki/zh-hant MediaWiki 首頁]\n* [www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/zh 使用者指南]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/zh 管理者指南]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh-hant 常見問題集]\n----\n* <doclink href=Readme>讀我說明</doclink>\n* <doclink href=ReleaseNotes>發行說明</doclink>\n* <doclink href=Copying>版權聲明</doclink>\n* <doclink href=UpgradeDoc>升級</doclink>",
+       "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/zh-hant MediaWiki 首頁]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/zh 使用者指南]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/zh 管理員指南]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh 常見問題集]\n----\n* <doclink href=Readme>讀我說明</doclink>\n* <doclink href=ReleaseNotes>發行說明</doclink>\n* <doclink href=Copying>版權聲明</doclink>\n* <doclink href=UpgradeDoc>升級</doclink>",
        "config-env-good": "環境檢查已完成。\n您可以安裝 MediaWiki。",
        "config-env-bad": "環境檢查已完成。\n您無法安裝 MediaWiki。",
        "config-env-php": "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-sqlite-cant-create-db": "無法建立資料庫檔案 <code>$1</code>。",
        "config-sqlite-fts3-downgrade": "PHP 不支援 FTS3,正在降級資料表。",
        "config-can-upgrade": "在資料庫中找到 MediaWiki 的資料表。\n要升級至 MediaWiki $1,請點選 <strong>繼續</strong>。",
-       "config-upgrade-done": "升級完成。\n\n現在您可以 [$1 開始使用您的 Wiki] 了。\n\n如果您需要重新產生 <code>LocalSettings.php</code> 檔案,請點下方按鈕。\n除非您的 Wiki 出現了問題,否則我們 <strong>不建議</strong> 您執行此操作。",
+       "config-upgrade-done": "升級完成。\n\n現在您可以 [$1 開始使用您的 Wiki] 了。\n\n如果您需要重新產生 <code>LocalSettings.php</code> 檔案,請點下方按鈕。\n除非您的 Wiki 出現了問題,否則我們 <strong>不建議</strong> 您執行此操作。",
        "config-upgrade-done-no-regenerate": "升級完成。\n\n現在您可以 [$1 開始使用您的 Wiki] 了。",
        "config-regenerate": "重新產生 LocalSettings.php →",
        "config-show-table-status": "<code>SHOW TABLE STATUS</code> 查詢失敗!",
        "config-email-usertalk": "開啟使用者討論頁面通知",
        "config-email-usertalk-help": "若使用者在個人偏好開啟了此功能,則可收到使用者討論頁面被修改的通知。",
        "config-email-watchlist": "開啟監視清單通知",
-       "config-email-watchlist-help": "若使用者在個人偏好開啟了此功能,允許使用者收到與其監視列表有關的通知。",
+       "config-email-watchlist-help": "若使用者在個人偏好開啟了此功能,允許使用者收到與其監視清單有關的通知。",
        "config-email-auth": "開啟電子郵件身份認證",
        "config-email-auth-help": "若開啟此選項,使用者不論設定或者更改電子郵件地址,都必須透過收信的方式確認沒有問題。\n只有驗證過的電子郵件地址可以收到來自其他使用者或修改通知的信件。\n公開的 Wiki 會 <strong>建議</strong> 設定此選項,以防使用者濫用電子郵件功能。",
        "config-email-sender": "電子郵件回覆位址:",
        "config-install-stats": "初始化統計資訊",
        "config-install-keys": "產生秘密金鑰中",
        "config-insecure-keys": "<strong>警告:</strong>在安裝過程中所產生的 $2 組安全金鑰($1)並不完全安全。請考慮手動更改。",
+       "config-install-updates": "略過執行不需要的更新",
+       "config-install-updates-failed": "<strong>錯誤:</strong> 插入更新鍵值至資料表失敗,並出現以下錯誤:$1",
        "config-install-sysop": "正在建立管理員使用者帳號",
        "config-install-subscribe-fail": "無法訂閱 mediawiki-announce:$1",
        "config-install-subscribe-notpossible": "未安裝 cURL,因此無法使用 <code>allow_url_fopen</code> 設定項目。",
index ee3f2c2..56fd1c6 100644 (file)
@@ -47,20 +47,12 @@ abstract class Job implements IJobSpecification {
        /** @var string Text for error that occurred last */
        protected $error;
 
-       /*-------------------------------------------------------------------------
-        * Abstract functions
-        *------------------------------------------------------------------------*/
-
        /**
         * Run the job
         * @return bool Success
         */
        abstract public function run();
 
-       /*-------------------------------------------------------------------------
-        * Static functions
-        *------------------------------------------------------------------------*/
-
        /**
         * Create the appropriate object to handle a specific job
         *
@@ -80,6 +72,20 @@ abstract class Job implements IJobSpecification {
                throw new MWException( "Invalid job command `{$command}`" );
        }
 
+       /**
+        * @param string $command
+        * @param Title $title
+        * @param array|bool $params Can not be === true
+        */
+       public function __construct( $command, $title, $params = false ) {
+               $this->command = $command;
+               $this->title = $title;
+               $this->params = $params;
+
+               // expensive jobs may set this to true
+               $this->removeDuplicates = false;
+       }
+
        /**
         * Batch-insert a group of jobs into the queue.
         * This will be wrapped in a transaction with a forced commit.
@@ -87,73 +93,16 @@ abstract class Job implements IJobSpecification {
         * This may add duplicate at insert time, but they will be
         * removed later on, when the first one is popped.
         *
-        * @param array $jobs Array of Job objects
+        * @param Job[] $jobs Array of Job objects
         * @return bool
         * @deprecated since 1.21
         */
        public static function batchInsert( $jobs ) {
+               wfDeprecated( __METHOD__, '1.21' );
                JobQueueGroup::singleton()->push( $jobs );
                return true;
        }
 
-       /**
-        * Insert a group of jobs into the queue.
-        *
-        * Same as batchInsert() but does not commit and can thus
-        * be rolled-back as part of a larger transaction. However,
-        * large batches of jobs can cause slave lag.
-        *
-        * @param array $jobs Array of Job objects
-        * @return bool
-        * @deprecated since 1.21
-        */
-       public static function safeBatchInsert( $jobs ) {
-               JobQueueGroup::singleton()->push( $jobs, JobQueue::QOS_ATOMIC );
-               return true;
-       }
-
-       /**
-        * Pop a job of a certain type.  This tries less hard than pop() to
-        * actually find a job; it may be adversely affected by concurrent job
-        * runners.
-        *
-        * @param string $type
-        * @return Job|bool Returns false if there are no jobs
-        * @deprecated since 1.21
-        */
-       public static function pop_type( $type ) {
-               return JobQueueGroup::singleton()->get( $type )->pop();
-       }
-
-       /**
-        * Pop a job off the front of the queue.
-        * This is subject to $wgJobTypesExcludedFromDefaultQueue.
-        *
-        * @return Job|bool False if there are no jobs
-        * @deprecated since 1.21
-        */
-       public static function pop() {
-               return JobQueueGroup::singleton()->pop();
-       }
-
-       /*-------------------------------------------------------------------------
-        * Non-static functions
-        *------------------------------------------------------------------------*/
-
-       /**
-        * @param string $command
-        * @param Title $title
-        * @param array|bool $params
-        */
-       public function __construct( $command, $title, $params = false ) {
-               $this->command = $command;
-               $this->title = $title;
-               $this->params = $params;
-
-               // expensive jobs may set this to true
-               $this->removeDuplicates = false;
-       }
-
        /**
         * @return string
         */
@@ -315,7 +264,7 @@ abstract class Job implements IJobSpecification {
                                                        break;
                                                }
                                        }
-                                       if ( $filteredValue ) {
+                                       if ( $filteredValue && count( $filteredValue ) < 10 ) {
                                                $value = FormatJson::encode( $filteredValue );
                                        } else {
                                                $value = "array(" . count( $value ) . ")";
@@ -328,16 +277,25 @@ abstract class Job implements IJobSpecification {
                        }
                }
 
-               if ( is_object( $this->title ) ) {
-                       $s = "{$this->command} " . $this->title->getPrefixedDBkey();
-                       if ( $paramString !== '' ) {
-                               $s .= ' ' . $paramString;
+               $metaString = '';
+               foreach ( $this->metadata as $key => $value ) {
+                       if ( is_scalar( $value ) && mb_strlen( $value ) < 1024 ) {
+                               $metaString .= ( $metaString ? ",$key=$value" : "$key=$value" );
                        }
+               }
 
-                       return $s;
-               } else {
-                       return "{$this->command} $paramString";
+               $s = $this->command;
+               if ( is_object( $this->title ) ) {
+                       $s .= " {$this->title->getPrefixedDBkey()}";
                }
+               if ( $paramString != '' ) {
+                       $s .= " $paramString";
+               }
+               if ( $metaString != '' ) {
+                       $s .= " ($metaString)";
+               }
+
+               return $s;
        }
 
        protected function setLastError( $error ) {
index 08873cc..056e5a8 100644 (file)
@@ -556,7 +556,7 @@ class JobQueueDB extends JobQueue {
         * @return void
         */
        protected function doWaitForBackups() {
-               wfWaitForSlaves();
+               wfWaitForSlaves( false, $this->wiki, $this->cluster ?: false );
        }
 
        /**
index 98a78c5..b0b35e9 100644 (file)
@@ -104,7 +104,7 @@ class JobQueueGroup {
         * This inserts the jobs into the queue specified by $wgJobTypeConf
         * and updates the aggregate job queue information cache as needed.
         *
-        * @param Job|array $jobs A single Job or a list of Jobs
+        * @param Job|Job[] $jobs A single Job or a list of Jobs
         * @throws MWException
         * @return void
         */
index 3519eac..abfdc8c 100644 (file)
@@ -91,6 +91,7 @@ class JobQueueRedis extends JobQueue {
                $this->compression = isset( $params['compression'] ) ? $params['compression'] : 'none';
                $this->redisPool = RedisConnectionPool::singleton( $params['redisConfig'] );
                $this->daemonized = !empty( $params['daemonized'] );
+               $this->checkDelay = true; // always enabled
        }
 
        protected function supportedOrders() {
@@ -134,9 +135,6 @@ class JobQueueRedis extends JobQueue {
         * @throws JobQueueError
         */
        protected function doGetAcquiredCount() {
-               if ( $this->claimTTL <= 0 ) {
-                       return 0; // no acknowledgements
-               }
                $conn = $this->getConnection();
                try {
                        $conn->multi( Redis::PIPELINE );
@@ -155,9 +153,6 @@ class JobQueueRedis extends JobQueue {
         * @throws JobQueueError
         */
        protected function doGetDelayedCount() {
-               if ( !$this->checkDelay ) {
-                       return 0; // no delayed jobs
-               }
                $conn = $this->getConnection();
                try {
                        return $conn->zSize( $this->getQueueKey( 'z-delayed' ) );
@@ -172,9 +167,6 @@ class JobQueueRedis extends JobQueue {
         * @throws JobQueueError
         */
        protected function doGetAbandonedCount() {
-               if ( $this->claimTTL <= 0 ) {
-                       return 0; // no acknowledgements
-               }
                $conn = $this->getConnection();
                try {
                        return $conn->zSize( $this->getQueueKey( 'z-abandoned' ) );
@@ -301,22 +293,18 @@ LUA;
 
                // Push ready delayed jobs into the queue every 10 jobs to spread the load.
                // This is also done as a periodic task, but we don't want too much done at once.
-               if ( $this->checkDelay && mt_rand( 0, 9 ) == 0 ) {
+               if ( !$this->daemonized && mt_rand( 0, 9 ) == 0 ) {
                        $this->recyclePruneAndUndelayJobs();
                }
 
                $conn = $this->getConnection();
                try {
                        do {
-                               if ( $this->claimTTL > 0 ) {
-                                       // Keep the claimed job list down for high-traffic queues
-                                       if ( mt_rand( 0, 99 ) == 0 ) {
-                                               $this->recyclePruneAndUndelayJobs();
-                                       }
-                                       $blob = $this->popAndAcquireBlob( $conn );
-                               } else {
-                                       $blob = $this->popAndDeleteBlob( $conn );
+                               // Keep the claimed job list down for high-traffic queues
+                               if ( !$this->daemonized && mt_rand( 0, 99 ) == 0 ) {
+                                       $this->recyclePruneAndUndelayJobs();
                                }
+                               $blob = $this->popAndAcquireBlob( $conn );
                                if ( !is_string( $blob ) ) {
                                        break; // no jobs; nothing to do
                                }
@@ -338,39 +326,6 @@ LUA;
                return $job;
        }
 
-       /**
-        * @param RedisConnRef $conn
-        * @return array Serialized string or false
-        * @throws RedisException
-        */
-       protected function popAndDeleteBlob( RedisConnRef $conn ) {
-               static $script =
-<<<LUA
-               local kUnclaimed, kSha1ById, kIdBySha1, kData = unpack(KEYS)
-               -- Pop an item off the queue
-               local id = redis.call('rpop',kUnclaimed)
-               if not id then return false end
-               -- Get the job data and remove it
-               local item = redis.call('hGet',kData,id)
-               redis.call('hDel',kData,id)
-               -- Allow new duplicates of this job
-               local sha1 = redis.call('hGet',kSha1ById,id)
-               if sha1 then redis.call('hDel',kIdBySha1,sha1) end
-               redis.call('hDel',kSha1ById,id)
-               -- Return the job data
-               return item
-LUA;
-               return $conn->luaEval( $script,
-                       array(
-                               $this->getQueueKey( 'l-unclaimed' ), # KEYS[1]
-                               $this->getQueueKey( 'h-sha1ById' ), # KEYS[2]
-                               $this->getQueueKey( 'h-idBySha1' ), # KEYS[3]
-                               $this->getQueueKey( 'h-data' ), # KEYS[4]
-                       ),
-                       4 # number of first argument(s) that are keys
-               );
-       }
-
        /**
         * @param RedisConnRef $conn
         * @return array Serialized string or false
@@ -416,36 +371,35 @@ LUA;
                if ( !isset( $job->metadata['uuid'] ) ) {
                        throw new MWException( "Job of type '{$job->getType()}' has no UUID." );
                }
-               if ( $this->claimTTL > 0 ) {
-                       $conn = $this->getConnection();
-                       try {
-                               static $script =
+
+               $conn = $this->getConnection();
+               try {
+                       static $script =
 <<<LUA
-                               local kClaimed, kAttempts, kData = unpack(KEYS)
-                               -- Unmark the job as claimed
-                               redis.call('zRem',kClaimed,ARGV[1])
-                               redis.call('hDel',kAttempts,ARGV[1])
-                               -- Delete the job data itself
-                               return redis.call('hDel',kData,ARGV[1])
+                       local kClaimed, kAttempts, kData = unpack(KEYS)
+                       -- Unmark the job as claimed
+                       redis.call('zRem',kClaimed,ARGV[1])
+                       redis.call('hDel',kAttempts,ARGV[1])
+                       -- Delete the job data itself
+                       return redis.call('hDel',kData,ARGV[1])
 LUA;
-                               $res = $conn->luaEval( $script,
-                                       array(
-                                               $this->getQueueKey( 'z-claimed' ), # KEYS[1]
-                                               $this->getQueueKey( 'h-attempts' ), # KEYS[2]
-                                               $this->getQueueKey( 'h-data' ), # KEYS[3]
-                                               $job->metadata['uuid'] # ARGV[1]
-                                       ),
-                                       3 # number of first argument(s) that are keys
-                               );
-
-                               if ( !$res ) {
-                                       wfDebugLog( 'JobQueueRedis', "Could not acknowledge {$this->type} job." );
-
-                                       return false;
-                               }
-                       } catch ( RedisException $e ) {
-                               $this->throwRedisException( $conn, $e );
+                       $res = $conn->luaEval( $script,
+                               array(
+                                       $this->getQueueKey( 'z-claimed' ), # KEYS[1]
+                                       $this->getQueueKey( 'h-attempts' ), # KEYS[2]
+                                       $this->getQueueKey( 'h-data' ), # KEYS[3]
+                                       $job->metadata['uuid'] # ARGV[1]
+                               ),
+                               3 # number of first argument(s) that are keys
+                       );
+
+                       if ( !$res ) {
+                               wfDebugLog( 'JobQueueRedis', "Could not acknowledge {$this->type} job." );
+
+                               return false;
                        }
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
                }
 
                return true;
@@ -658,7 +612,6 @@ LUA;
                                if attempts < ARGV[3] then
                                        -- Claim expired and retries left: re-enqueue the job
                                        redis.call('lPush',kUnclaimed,id)
-                                       redis.call('hIncrBy',kAttempts,id,1)
                                        released = released + 1
                                else
                                        -- Claim expired and no retries left: mark the job as dead
@@ -723,12 +676,9 @@ LUA;
                if ( $this->daemonized ) {
                        return array(); // managed in the runner loop
                }
-               $periods = array( 3600 ); // standard cleanup (useful on config change)
+               $periods = array( 300 ); // 5 min; delayed/stale jobs
                if ( $this->claimTTL > 0 ) {
-                       $periods[] = ceil( $this->claimTTL / 2 ); // avoid bad timing
-               }
-               if ( $this->checkDelay ) {
-                       $periods[] = 300; // 5 minutes
+                       $periods[] = ceil( $this->claimTTL / 2 ); // halved to avoid bad timing
                }
                $period = min( $periods );
                $period = max( $period, 30 ); // sanity
index 617a3a3..6b19340 100644 (file)
@@ -76,23 +76,34 @@ class JobRunner {
                        $this->runJobsLog( "Executed $count periodic queue task(s)." );
                }
 
+               // Bail out if there is too much DB lag
+               list( , $maxLag ) = wfGetLBFactory()->getMainLB( wfWikiID() )->getMaxLag();
+               if ( $maxLag >= 5 ) {
+                       $response['reached'] = 'slave-lag-limit';
+                       return $response;
+               }
+
                // Flush any pending DB writes for sanity
                wfGetLBFactory()->commitMasterChanges();
 
-               $backoffs = $this->loadBackoffs(); // map of (type => UNIX expiry)
-               $startingBackoffs = $backoffs; // avoid unnecessary writes
-               $backoffExpireFunc = function ( $t ) {
-                       return $t > time();
-               };
+               // Some jobs types should not run until a certain timestamp
+               $backoffs = array(); // map of (type => UNIX expiry)
+               $backoffDeltas = array(); // map of (type => seconds)
+               $wait = 'wait'; // block to read backoffs the first time
 
-               $jobsRun = 0; // counter
+               $jobsRun = 0;
                $timeMsTotal = 0;
                $flags = JobQueueGroup::USE_CACHE;
+               $checkPeriod = 5.0; // seconds
+               $checkPhase = mt_rand( 0, 1000 * $checkPeriod ) / 1000; // avoid stampedes
                $startTime = microtime( true ); // time since jobs started running
-               $lastTime = microtime( true ); // time since last slave check
+               $lastTime = microtime( true ) - $checkPhase; // time since last slave check
                do {
-                       $backoffs = array_filter( $backoffs, $backoffExpireFunc );
+                       // Sync the persistent backoffs with concurrent runners
+                       $backoffs = $this->syncBackoffDeltas( $backoffs, $backoffDeltas, $wait );
                        $blacklist = $noThrottle ? array() : array_keys( $backoffs );
+                       $wait = 'nowait'; // less important now
+
                        if ( $type === false ) {
                                $job = $group->pop( JobQueueGroup::TYPE_DEFAULT, $flags, $blacklist );
                        } elseif ( in_array( $type, $blacklist ) ) {
@@ -100,14 +111,26 @@ class JobRunner {
                        } else {
                                $job = $group->pop( $type ); // job from a single queue
                        }
+
                        if ( $job ) { // found a job
                                $jType = $job->getType();
 
+                               // Back off of certain jobs for a while (for throttling and for errors)
+                               $ttw = $this->getBackoffTimeToWait( $job );
+                               if ( $ttw > 0 ) {
+                                       // Always add the delta for other runners in case the time running the
+                                       // job negated the backoff for each individually but not collectively.
+                                       $backoffDeltas[$jType] = isset( $backoffDeltas[$jType] )
+                                               ? $backoffDeltas[$jType] + $ttw
+                                               : $ttw;
+                                       $backoffs = $this->syncBackoffDeltas( $backoffs, $backoffDeltas, $wait );
+                               }
+
                                $this->runJobsLog( $job->toString() . " STARTING" );
 
                                // Run the job...
                                wfProfileIn( __METHOD__ . '-' . get_class( $job ) );
-                               $t = microtime( true );
+                               $jobStartTime = microtime( true );
                                try {
                                        ++$jobsRun;
                                        $status = $job->run();
@@ -119,7 +142,7 @@ class JobRunner {
                                        $error = get_class( $e ) . ': ' . $e->getMessage();
                                        MWExceptionHandler::logException( $e );
                                }
-                               $timeMs = intval( ( microtime( true ) - $t ) * 1000 );
+                               $timeMs = intval( ( microtime( true ) - $jobStartTime ) * 1000 );
                                wfProfileOut( __METHOD__ . '-' . get_class( $job ) );
                                $timeMsTotal += $timeMs;
 
@@ -128,6 +151,14 @@ class JobRunner {
                                        $group->ack( $job ); // done
                                }
 
+                               // Back off of certain jobs for a while (for throttling and for errors)
+                               if ( $status === false && mt_rand( 0, 49 ) == 0 ) {
+                                       $ttw = max( $ttw, 30 ); // too many errors
+                                       $backoffDeltas[$jType] = isset( $backoffDeltas[$jType] )
+                                               ? $backoffDeltas[$jType] + $ttw
+                                               : $ttw;
+                               }
+
                                if ( $status === false ) {
                                        $this->runJobsLog( $job->toString() . " t=$timeMs error={$error}" );
                                } else {
@@ -141,16 +172,6 @@ class JobRunner {
                                        'time'   => $timeMs
                                );
 
-                               // Back off of certain jobs for a while (for throttling and for errors)
-                               $ttw = $this->getBackoffTimeToWait( $job );
-                               if ( $status === false && mt_rand( 0, 49 ) == 0 ) {
-                                       $ttw = max( $ttw, 30 );
-                               }
-                               if ( $ttw > 0 ) {
-                                       $backoffs[$jType] = isset( $backoffs[$jType] ) ? $backoffs[$jType] : 0;
-                                       $backoffs[$jType] = max( $backoffs[$jType], time() + $ttw );
-                               }
-
                                // Break out if we hit the job count or wall time limits...
                                if ( $maxJobs && $jobsRun >= $maxJobs ) {
                                        $response['reached'] = 'job-limit';
@@ -160,10 +181,15 @@ class JobRunner {
                                        break;
                                }
 
-                               // Don't let any of the main DB slaves get backed up
+                               // Don't let any of the main DB slaves get backed up.
+                               // 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 ) {
-                                       wfWaitForSlaves( $lastTime );
+                                       if ( !wfWaitForSlaves( $lastTime, false, '*', 5 ) ) {
+                                               $response['reached'] = 'slave-lag-limit';
+                                               break;
+                                       }
                                        $lastTime = microtime( true );
                                }
                                // Don't let any queue slaves/backups fall behind
@@ -177,9 +203,8 @@ class JobRunner {
                } while ( $job ); // stop when there are no jobs
 
                // Sync the persistent backoffs for the next runJobs.php pass
-               $backoffs = array_filter( $backoffs, $backoffExpireFunc );
-               if ( $backoffs !== $startingBackoffs ) {
-                       $this->syncBackoffs( $backoffs );
+               if ( $backoffDeltas ) {
+                       $this->syncBackoffDeltas( $backoffs, $backoffDeltas, 'wait' );
                }
 
                $response['backoffs'] = $backoffs;
@@ -221,47 +246,86 @@ class JobRunner {
 
        /**
         * Get the previous backoff expiries from persistent storage
+        * On I/O or lock acquisition failure this returns the original $backoffs.
         *
+        * @param array $backoffs Map of (job type => UNIX timestamp)
+        * @param string $mode Lock wait mode - "wait" or "nowait"
         * @return array Map of (job type => backoff expiry timestamp)
         */
-       private function loadBackoffs() {
+       private function loadBackoffs( array $backoffs, $mode = 'wait' ) {
                $section = new ProfileSection( __METHOD__ );
 
-               $backoffs = array();
                $file = wfTempDir() . '/mw-runJobs-backoffs.json';
                if ( is_file( $file ) ) {
+                       $noblock = ( $mode === 'nowait' ) ? LOCK_NB : 0;
                        $handle = fopen( $file, 'rb' );
-                       flock( $handle, LOCK_SH );
+                       if ( !flock( $handle, LOCK_SH | $noblock ) ) {
+                               fclose( $handle );
+                               return $backoffs; // don't wait on lock
+                       }
                        $content = stream_get_contents( $handle );
                        flock( $handle, LOCK_UN );
                        fclose( $handle );
-                       $backoffs = json_decode( $content, true ) ?: array();
+                       $ctime = microtime( true );
+                       $cBackoffs = json_decode( $content, true ) ?: array();
+                       foreach ( $cBackoffs as $type => $timestamp ) {
+                               if ( $timestamp < $ctime ) {
+                                       unset( $cBackoffs[$type] );
+                               }
+                       }
+               } else {
+                       $cBackoffs = array();
                }
 
-               return $backoffs;
+               return $cBackoffs;
        }
 
        /**
         * Merge the current backoff expiries from persistent storage
         *
-        * @param array $backoffs Map of (job type => backoff expiry timestamp)
+        * The $deltas map is set to an empty array on success.
+        * On I/O or lock acquisition failure this returns the original $backoffs.
+        *
+        * @param array $backoffs Map of (job type => UNIX timestamp)
+        * @param array $deltas Map of (job type => seconds)
+        * @param string $mode Lock wait mode - "wait" or "nowait"
+        * @return array The new backoffs account for $backoffs and the latest file data
         */
-       private function syncBackoffs( array $backoffs ) {
+       private function syncBackoffDeltas( array $backoffs, array &$deltas, $mode = 'wait' ) {
                $section = new ProfileSection( __METHOD__ );
 
+               if ( !$deltas ) {
+                       return $this->loadBackoffs( $backoffs, $mode );
+               }
+
+               $noblock = ( $mode === 'nowait' ) ? LOCK_NB : 0;
                $file = wfTempDir() . '/mw-runJobs-backoffs.json';
                $handle = fopen( $file, 'wb+' );
-               flock( $handle, LOCK_EX );
+               if ( !flock( $handle, LOCK_EX | $noblock ) ) {
+                       fclose( $handle );
+                       return $backoffs; // don't wait on lock
+               }
+               $ctime = microtime( true );
                $content = stream_get_contents( $handle );
                $cBackoffs = json_decode( $content, true ) ?: array();
-               foreach ( $backoffs as $type => $timestamp ) {
-                       $cBackoffs[$type] = isset( $cBackoffs[$type] ) ? $cBackoffs[$type] : 0;
-                       $cBackoffs[$type] = max( $cBackoffs[$type], $backoffs[$type] );
+               foreach ( $deltas as $type => $seconds ) {
+                       $cBackoffs[$type] = isset( $cBackoffs[$type] ) && $cBackoffs[$type] >= $ctime
+                               ? $cBackoffs[$type] + $seconds
+                               : $ctime + $seconds;
+               }
+               foreach ( $cBackoffs as $type => $timestamp ) {
+                       if ( $timestamp < $ctime ) {
+                               unset( $cBackoffs[$type] );
+                       }
                }
                ftruncate( $handle, 0 );
-               fwrite( $handle, json_encode( $backoffs ) );
+               fwrite( $handle, json_encode( $cBackoffs ) );
                flock( $handle, LOCK_UN );
                fclose( $handle );
+
+               $deltas = array();
+
+               return $cBackoffs;
        }
 
        /**
index 9e9bda6..cc28a01 100644 (file)
@@ -35,26 +35,16 @@ class AssembleUploadChunksJob extends Job {
        public function run() {
                $scope = RequestContext::importScopedSession( $this->params['session'] );
                $context = RequestContext::getMain();
+               $user = $context->getUser();
                try {
-                       $user = $context->getUser();
                        if ( !$user->isLoggedIn() ) {
                                $this->setLastError( "Could not load the author user from session." );
 
                                return false;
                        }
 
-                       if ( count( $_SESSION ) === 0 ) {
-                               // Empty session probably indicates that we didn't associate
-                               // with the session correctly. Note that being able to load
-                               // the user does not necessarily mean the session was loaded.
-                               // Most likely cause by suhosin.session.encrypt = On.
-                               $this->setLastError( "Error associating with user session. " .
-                                       "Try setting suhosin.session.encrypt = Off" );
-
-                               return false;
-                       }
-
                        UploadBase::setSessionStatus(
+                               $user,
                                $this->params['filekey'],
                                array( 'result' => 'Poll', 'stage' => 'assembling', 'status' => Status::newGood() )
                        );
@@ -70,6 +60,7 @@ class AssembleUploadChunksJob extends Job {
                        $status = $upload->concatenateChunks();
                        if ( !$status->isGood() ) {
                                UploadBase::setSessionStatus(
+                                       $user,
                                        $this->params['filekey'],
                                        array( 'result' => 'Failure', 'stage' => 'assembling', 'status' => $status )
                                );
@@ -93,6 +84,7 @@ class AssembleUploadChunksJob extends Job {
 
                        // Cache the info so the user doesn't have to wait forever to get the final info
                        UploadBase::setSessionStatus(
+                               $user,
                                $this->params['filekey'],
                                array(
                                        'result' => 'Success',
@@ -104,6 +96,7 @@ class AssembleUploadChunksJob extends Job {
                        );
                } catch ( MWException $e ) {
                        UploadBase::setSessionStatus(
+                               $user,
                                $this->params['filekey'],
                                array(
                                        'result' => 'Failure',
index 918a392..55215b3 100644 (file)
@@ -35,26 +35,16 @@ class PublishStashedFileJob extends Job {
        public function run() {
                $scope = RequestContext::importScopedSession( $this->params['session'] );
                $context = RequestContext::getMain();
+               $user = $context->getUser();
                try {
-                       $user = $context->getUser();
                        if ( !$user->isLoggedIn() ) {
                                $this->setLastError( "Could not load the author user from session." );
 
                                return false;
                        }
 
-                       if ( count( $_SESSION ) === 0 ) {
-                               // Empty session probably indicates that we didn't associate
-                               // with the session correctly. Note that being able to load
-                               // the user does not necessarily mean the session was loaded.
-                               // Most likely cause by suhosin.session.encrypt = On.
-                               $this->setLastError( "Error associating with user session. " .
-                                       "Try setting suhosin.session.encrypt = Off" );
-
-                               return false;
-                       }
-
                        UploadBase::setSessionStatus(
+                               $user,
                                $this->params['filekey'],
                                array( 'result' => 'Poll', 'stage' => 'publish', 'status' => Status::newGood() )
                        );
@@ -72,6 +62,7 @@ class PublishStashedFileJob extends Job {
                                $status = Status::newFatal( 'verification-error' );
                                $status->value = array( 'verification' => $verification );
                                UploadBase::setSessionStatus(
+                                       $user,
                                        $this->params['filekey'],
                                        array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
                                );
@@ -89,6 +80,7 @@ class PublishStashedFileJob extends Job {
                        );
                        if ( !$status->isGood() ) {
                                UploadBase::setSessionStatus(
+                                       $user,
                                        $this->params['filekey'],
                                        array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
                                );
@@ -106,6 +98,7 @@ class PublishStashedFileJob extends Job {
 
                        // Cache the info so the user doesn't have to wait forever to get the final info
                        UploadBase::setSessionStatus(
+                               $user,
                                $this->params['filekey'],
                                array(
                                        'result' => 'Success',
@@ -117,6 +110,7 @@ class PublishStashedFileJob extends Job {
                        );
                } catch ( MWException $e ) {
                        UploadBase::setSessionStatus(
+                               $user,
                                $this->params['filekey'],
                                array(
                                        'result' => 'Failure',
diff --git a/includes/jobqueue/jobs/ThumbnailRenderJob.php b/includes/jobqueue/jobs/ThumbnailRenderJob.php
new file mode 100644 (file)
index 0000000..dbc4f23
--- /dev/null
@@ -0,0 +1,107 @@
+<?php
+/**
+ * Job for asynchronous rendering of thumbnails.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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
+ */
+
+/**
+ * Job for asynchronous rendering of thumbnails.
+ *
+ * @ingroup JobQueue
+ */
+class ThumbnailRenderJob extends Job {
+       public function __construct( $title, $params ) {
+               parent::__construct( 'ThumbnailRender', $title, $params );
+       }
+
+       public function run() {
+               global $wgUploadThumbnailRenderMethod;
+
+               $transformParams = $this->params['transformParams'];
+
+               $file = wfLocalFile( $this->title );
+
+               if ( $file && $file->exists() ) {
+                       if ( $wgUploadThumbnailRenderMethod === 'jobqueue' ) {
+                               $thumb = $file->transform( $transformParams, File::RENDER_NOW );
+
+                               if ( $thumb && !$thumb->isError() ) {
+                                       return true;
+                               } else {
+                                       $this->setLastError( __METHOD__ . ': thumbnail couln\'t be generated' );
+                                       return false;
+                               }
+                       } elseif ( $wgUploadThumbnailRenderMethod === 'http' ) {
+                               $status = $this->hitThumbUrl( $file, $transformParams );
+
+                               wfDebug( __METHOD__ . ": received status {$status}\n" );
+
+                               if ( $status === 200 || $status === 301 || $status === 302 ) {
+                                       return true;
+                               } elseif ( $status ) {
+                                       // Note that this currently happens (500) when requesting sizes larger then or
+                                       // equal to the original, which is harmless.
+                                       $this->setLastError( __METHOD__ . ': incorrect HTTP status ' . $status );
+                                       return false;
+                               } else {
+                                       $this->setLastError( __METHOD__ . ': HTTP request failure' );
+                                       return false;
+                               }
+                       } else {
+                               $this->setLastError( __METHOD__ . ': unknown thumbnail render method ' . $wgUploadThumbnailRenderMethod );
+                               return false;
+                       }
+               } else {
+                       $this->setLastError( __METHOD__ . ': file doesn\'t exist' );
+                       return false;
+               }
+       }
+
+       protected function hitThumbUrl( $file, $transformParams ) {
+               global $wgUploadThumbnailRenderHttpCustomHost, $wgUploadThumbnailRenderHttpCustomDomain;
+
+               $thumbName = $file->thumbName( $transformParams );
+               $thumbUrl = $file->getThumbUrl( $thumbName );
+
+               if ( $wgUploadThumbnailRenderHttpCustomDomain ) {
+                       $parsedUrl = wfParseUrl( $thumbUrl );
+
+                       if ( !$parsedUrl || !isset( $parsedUrl['path'] ) || !strlen( $parsedUrl['path'] ) ) {
+                               return false;
+                       }
+
+                       $thumbUrl = '//' . $wgUploadThumbnailRenderHttpCustomDomain . $parsedUrl['path'];
+               }
+
+               wfDebug( __METHOD__ . ": hitting url {$thumbUrl}\n" );
+
+               $request = MWHttpRequest::factory( $thumbUrl, array(
+                       'method' => 'HEAD',
+                       'followRedirects' => true ) );
+
+               if ( $wgUploadThumbnailRenderHttpCustomHost ) {
+                       $request->setHeader( 'Host', $wgUploadThumbnailRenderHttpCustomHost );
+               }
+
+               $status = $request->execute();
+
+               return $request->getStatus();
+       }
+}
index e45dd3a..74775b5 100644 (file)
@@ -54,6 +54,29 @@ class FormatJson {
         */
        const ALL_OK = 3;
 
+       /**
+        * If set, treat json objects '{...}' as associative arrays. Without this option,
+        * json objects will be converted to stdClass.
+        * The value is set to 1 to be backward compatible with 'true' that was used before.
+        *
+        * @since 1.24
+        */
+       const FORCE_ASSOC = 0x100;
+
+       /**
+        * If set, attempts to fix invalid json.
+        *
+        * @since 1.24
+        */
+       const TRY_FIXING = 0x200;
+
+       /**
+        * If set, strip comments from input before parsing as JSON.
+        *
+        * @since 1.25
+        */
+       const STRIP_COMMENTS = 0x400;
+
        /**
         * Regex that matches whitespace inside empty arrays and objects.
         *
@@ -114,19 +137,93 @@ class FormatJson {
        }
 
        /**
-        * Decodes a JSON string.
+        * 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.
         *
         * @return mixed The value encoded in JSON in appropriate PHP type.
-        * `null` is returned if the JSON cannot be decoded or if the encoded data is deeper than
-        * the recursion limit.
+        * `null` is returned if $value represented `null`, if $value could not be decoded,
+        * or if the encoded data was deeper than the recursion limit.
+        * Use FormatJson::parse() to distinguish between types of `null` and to get proper error code.
         */
        public static function decode( $value, $assoc = false ) {
                return json_decode( $value, $assoc );
        }
 
+       /**
+        * Decodes a JSON string.
+        * 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,
+        * STRIP_COMMENTS
+        * @return Status If valid JSON, the value is available in $result->getValue()
+        */
+       public static function parse( $value, $options = 0 ) {
+               if ( $options & self::STRIP_COMMENTS ) {
+                       $value = self::stripComments( $value );
+               }
+               $assoc = ( $options & self::FORCE_ASSOC ) !== 0;
+               $result = json_decode( $value, $assoc );
+               $code = json_last_error();
+
+               if ( $code === JSON_ERROR_SYNTAX && ( $options & self::TRY_FIXING ) !== 0 ) {
+                       // The most common error is the trailing comma in a list or an object.
+                       // We cannot simply replace /,\s*[}\]]/ because it could be inside a string value.
+                       // But we could use the fact that JSON does not allow multi-line string values,
+                       // And remove trailing commas if they are et the end of a line.
+                       // JSON only allows 4 control characters: [ \t\r\n].  So we must not use '\s' for matching.
+                       // Regex match   ,]<any non-quote chars>\n   or   ,\n]   with optional spaces/tabs.
+                       $count = 0;
+                       $value =
+                               preg_replace( '/,([ \t]*[}\]][^"\r\n]*([\r\n]|$)|[ \t]*[\r\n][ \t\r\n]*[}\]])/', '$1',
+                                       $value, - 1, $count );
+                       if ( $count > 0 ) {
+                               $result = json_decode( $value, $assoc );
+                               if ( JSON_ERROR_NONE === json_last_error() ) {
+                                       // Report warning
+                                       $st = Status::newGood( $result );
+                                       $st->warning( wfMessage( 'json-warn-trailing-comma' )->numParams( $count ) );
+                                       return $st;
+                               }
+                       }
+               }
+
+               switch ( $code ) {
+                       case JSON_ERROR_NONE:
+                               return Status::newGood( $result );
+                       default:
+                               return Status::newFatal( wfMessage( 'json-error-unknown' )->numParams( $code ) );
+                       case JSON_ERROR_DEPTH:
+                               $msg = 'json-error-depth';
+                               break;
+                       case JSON_ERROR_STATE_MISMATCH:
+                               $msg = 'json-error-state-mismatch';
+                               break;
+                       case JSON_ERROR_CTRL_CHAR:
+                               $msg = 'json-error-ctrl-char';
+                               break;
+                       case JSON_ERROR_SYNTAX:
+                               $msg = 'json-error-syntax';
+                               break;
+                       case JSON_ERROR_UTF8:
+                               $msg = 'json-error-utf8';
+                               break;
+                       case JSON_ERROR_RECURSION:
+                               $msg = 'json-error-recursion';
+                               break;
+                       case JSON_ERROR_INF_OR_NAN:
+                               $msg = 'json-error-inf-or-nan';
+                               break;
+                       case JSON_ERROR_UNSUPPORTED_TYPE:
+                               $msg = 'json-error-unsupported-type';
+                               break;
+               }
+               return Status::newFatal( $msg );
+       }
+
        /**
         * JSON encoder wrapper for PHP >= 5.4, which supports useful encoding options.
         *
@@ -261,4 +358,79 @@ class FormatJson {
 
                return str_replace( "\x01", '\"', $buf );
        }
+
+       /**
+        * Remove multiline and single line comments from an otherwise valid JSON
+        * input string. This can be used as a preprocessor for to allow JSON
+        * formatted configuration files to contain comments.
+        *
+        * @param string $json
+        * @return string JSON with comments removed
+        */
+       public static function stripComments( $json ) {
+               // Ensure we have a string
+               $str = (string) $json;
+               $buffer = '';
+               $maxLen = strlen( $str );
+               $mark = 0;
+
+               $inString = false;
+               $inComment = false;
+               $multiline = false;
+
+               for ($idx = 0; $idx < $maxLen; $idx++) {
+                       switch ( $str[$idx] ) {
+                               case '"':
+                                       $lookBehind = ( $idx - 1 >= 0 ) ? $str[$idx - 1] : '';
+                                       if ( !$inComment && $lookBehind !== '\\' ) {
+                                               // Either started or ended a string
+                                               $inString = !$inString;
+                                       }
+                                       break;
+
+                               case '/':
+                                       $lookAhead = ( $idx + 1 < $maxLen ) ? $str[$idx + 1] : '';
+                                       $lookBehind = ( $idx - 1 >= 0 ) ? $str[$idx - 1] : '';
+                                       if ( $inString ) {
+                                               continue;
+
+                                       } elseif ( !$inComment &&
+                                               ( $lookAhead === '/' || $lookAhead === '*' )
+                                       ) {
+                                               // Transition into a comment
+                                               // Add characters seen to buffer
+                                               $buffer .= substr( $str, $mark, $idx - $mark );
+                                               // Consume the look ahead character
+                                               $idx++;
+                                               // Track state
+                                               $inComment = true;
+                                               $multiline = $lookAhead === '*';
+
+                                       } elseif ( $multiline && $lookBehind === '*' ) {
+                                               // Found the end of the current comment
+                                               $mark = $idx + 1;
+                                               $inComment = false;
+                                               $multiline = false;
+                                       }
+                                       break;
+
+                               case "\n":
+                                       if ( $inComment && !$multiline ) {
+                                               // Found the end of the current comment
+                                               $mark = $idx + 1;
+                                               $inComment = false;
+                                       }
+                                       break;
+                       }
+               }
+               if ( $inComment ) {
+                       // Comment ends with input
+                       // Technically we should check to ensure that we aren't in
+                       // a multiline comment that hasn't been properly ended, but this
+                       // is a strip filter, not a validating parser.
+                       $mark = $maxLen;
+               }
+               // Add final chunk to buffer before returning
+               return $buffer . substr( $str, $mark, $maxLen - $mark );
+       }
 }
diff --git a/includes/libs/APACHE-LICENSE-2.0.txt b/includes/libs/APACHE-LICENSE-2.0.txt
new file mode 100644 (file)
index 0000000..d645695
--- /dev/null
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/includes/libs/ArrayUtils.php b/includes/libs/ArrayUtils.php
new file mode 100644 (file)
index 0000000..f934021
--- /dev/null
@@ -0,0 +1,187 @@
+<?php
+/**
+ * Methods to play with 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
+ */
+
+/**
+ * A collection of static methods to play with arrays.
+ *
+ * @since 1.21
+ */
+class ArrayUtils {
+       /**
+        * Sort the given array in a pseudo-random order which depends only on the
+        * given key and each element value. This is typically used for load
+        * balancing between servers each with a local cache.
+        *
+        * Keys are preserved. The input array is modified in place.
+        *
+        * Note: Benchmarking on PHP 5.3 and 5.4 indicates that for small
+        * strings, md5() is only 10% slower than hash('joaat',...) etc.,
+        * since the function call overhead dominates. So there's not much
+        * justification for breaking compatibility with installations
+        * compiled with ./configure --disable-hash.
+        *
+        * @param array $array Array to sort
+        * @param string $key
+        * @param string $separator A separator used to delimit the array elements and the
+        *     key. This can be chosen to provide backwards compatibility with
+        *     various consistent hash implementations that existed before this
+        *     function was introduced.
+        */
+       public static function consistentHashSort( &$array, $key, $separator = "\000" ) {
+               $hashes = array();
+               foreach ( $array as $elt ) {
+                       $hashes[$elt] = md5( $elt . $separator . $key );
+               }
+               uasort( $array, function ( $a, $b ) use ( $hashes ) {
+                       return strcmp( $hashes[$a], $hashes[$b] );
+               } );
+       }
+
+       /**
+        * Given an array of non-normalised probabilities, this function will select
+        * an element and return the appropriate key
+        *
+        * @param array $weights
+        * @return bool|int|string
+        */
+       public static function pickRandom( $weights ) {
+               if ( !is_array( $weights ) || count( $weights ) == 0 ) {
+                       return false;
+               }
+
+               $sum = array_sum( $weights );
+               if ( $sum == 0 ) {
+                       # No loads on any of them
+                       # In previous versions, this triggered an unweighted random selection,
+                       # but this feature has been removed as of April 2006 to allow for strict
+                       # separation of query groups.
+                       return false;
+               }
+               $max = mt_getrandmax();
+               $rand = mt_rand( 0, $max ) / $max * $sum;
+
+               $sum = 0;
+               foreach ( $weights as $i => $w ) {
+                       $sum += $w;
+                       # Do not return keys if they have 0 weight.
+                       # Note that the "all 0 weight" case is handed above
+                       if ( $w > 0 && $sum >= $rand ) {
+                               break;
+                       }
+               }
+
+               return $i;
+       }
+
+       /**
+        * Do a binary search, and return the index of the largest item that sorts
+        * less than or equal to the target value.
+        *
+        * @since 1.23
+        *
+        * @param callable $valueCallback A function to call to get the value with
+        *     a given array index.
+        * @param int $valueCount The number of items accessible via $valueCallback,
+        *     indexed from 0 to $valueCount - 1
+        * @param callable $comparisonCallback A callback to compare two values, returning
+        *     -1, 0 or 1 in the style of strcmp().
+        * @param string $target The target value to find.
+        *
+        * @return int|bool The item index of the lower bound, or false if the target value
+        *     sorts before all items.
+        */
+       public static function findLowerBound( $valueCallback, $valueCount,
+               $comparisonCallback, $target
+       ) {
+               if ( $valueCount === 0 ) {
+                       return false;
+               }
+
+               $min = 0;
+               $max = $valueCount;
+               do {
+                       $mid = $min + ( ( $max - $min ) >> 1 );
+                       $item = call_user_func( $valueCallback, $mid );
+                       $comparison = call_user_func( $comparisonCallback, $target, $item );
+                       if ( $comparison > 0 ) {
+                               $min = $mid;
+                       } elseif ( $comparison == 0 ) {
+                               $min = $mid;
+                               break;
+                       } else {
+                               $max = $mid;
+                       }
+               } while ( $min < $max - 1 );
+
+               if ( $min == 0 ) {
+                       $item = call_user_func( $valueCallback, $min );
+                       $comparison = call_user_func( $comparisonCallback, $target, $item );
+                       if ( $comparison < 0 ) {
+                               // Before the first item
+                               return false;
+                       }
+               }
+               return $min;
+       }
+
+       /**
+        * Do array_diff_assoc() on multi-dimensional arrays.
+        *
+        * Note: empty arrays are removed.
+        *
+        * @since 1.23
+        *
+        * @param array $array1 The array to compare from
+        * @param array $array2,... More arrays to compare against
+        * @return array An array containing all the values from array1
+        *               that are not present in any of the other arrays.
+        */
+       public static function arrayDiffAssocRecursive( $array1 ) {
+               $arrays = func_get_args();
+               array_shift( $arrays );
+               $ret = array();
+
+               foreach ( $array1 as $key => $value ) {
+                       if ( is_array( $value ) ) {
+                               $args = array( $value );
+                               foreach ( $arrays as $array ) {
+                                       if ( isset( $array[$key] ) ) {
+                                               $args[] = $array[$key];
+                                       }
+                               }
+                               $valueret = call_user_func_array( __METHOD__, $args );
+                               if ( count( $valueret ) ) {
+                                       $ret[$key] = $valueret;
+                               }
+                       } else {
+                               foreach ( $arrays as $array ) {
+                                       if ( isset( $array[$key] ) && $array[$key] === $value ) {
+                                               continue 2;
+                                       }
+                               }
+                               $ret[$key] = $value;
+                       }
+               }
+
+               return $ret;
+       }
+}
diff --git a/includes/libs/CSSJanus.php b/includes/libs/CSSJanus.php
deleted file mode 100644 (file)
index 30b92c7..0000000
+++ /dev/null
@@ -1,433 +0,0 @@
-<?php
-/**
- * PHP port of CSSJanus.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * This is a PHP port of CSSJanus, a utility that transforms CSS style sheets
- * written for LTR to RTL.
- *
- * The original Python version of CSSJanus is Copyright 2008 by Google Inc. and
- * is distributed under the Apache license. This PHP port is Copyright 2010 by
- * Roan Kattouw and is dual-licensed under the GPL (as in the comment above) and
- * the Apache (as in the original code) licenses.
- *
- * Original code: http://code.google.com/p/cssjanus/source/browse/trunk/cssjanus.py
- * License of original code: http://code.google.com/p/cssjanus/source/browse/trunk/LICENSE
- * @author Roan Kattouw
- *
- */
-class CSSJanus {
-       // Patterns defined as null are built dynamically by buildPatterns()
-       private static $patterns = array(
-               'tmpToken' => '`TMP`',
-               'nonAscii' => '[\200-\377]',
-               'unicode' => '(?:(?:\\[0-9a-f]{1,6})(?:\r\n|\s)?)',
-               'num' => '(?:[0-9]*\.[0-9]+|[0-9]+)',
-               'unit' => '(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)',
-               'body_selector' => 'body\s*{\s*',
-               'direction' => 'direction\s*:\s*',
-               'escape' => null,
-               'nmstart' => null,
-               'nmchar' => null,
-               'ident' => null,
-               'quantity' => null,
-               'possibly_negative_quantity' => null,
-               'color' => null,
-               'url_special_chars' => '[!#$%&*-~]',
-               'valid_after_uri_chars' => '[\'\"]?\s*',
-               'url_chars' => null,
-               'lookahead_not_open_brace' => null,
-               'lookahead_not_closing_paren' => null,
-               'lookahead_for_closing_paren' => null,
-               'lookahead_not_letter' => '(?![a-zA-Z])',
-               'lookbehind_not_letter' => '(?<![a-zA-Z])',
-               'chars_within_selector' => '[^\}]*?',
-               'noflip_annotation' => '\/\*\s*@noflip\s*\*\/',
-               'noflip_single' => null,
-               'noflip_class' => null,
-               'comment' => '/\/\*[^*]*\*+([^\/*][^*]*\*+)*\//',
-               'direction_ltr' => null,
-               'direction_rtl' => null,
-               'left' => null,
-               'right' => null,
-               'left_in_url' => null,
-               'right_in_url' => null,
-               'ltr_in_url' => null,
-               'rtl_in_url' => null,
-               'cursor_east' => null,
-               'cursor_west' => null,
-               'four_notation_quantity' => null,
-               'four_notation_color' => null,
-               'border_radius' => null,
-               'box_shadow' => null,
-               'text_shadow1' => null,
-               'text_shadow2' => null,
-               'bg_horizontal_percentage' => null,
-               'bg_horizontal_percentage_x' => null,
-       );
-
-       /**
-        * Build patterns we can't define above because they depend on other patterns.
-        */
-       private static function buildPatterns() {
-               if ( !is_null( self::$patterns['escape'] ) ) {
-                       // Patterns have already been built
-                       return;
-               }
-
-               // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
-               $patterns =& self::$patterns;
-               $patterns['escape'] = "(?:{$patterns['unicode']}|\\[^\r\n\f0-9a-f])";
-               $patterns['nmstart'] = "(?:[_a-z]|{$patterns['nonAscii']}|{$patterns['escape']})";
-               $patterns['nmchar'] = "(?:[_a-z0-9-]|{$patterns['nonAscii']}|{$patterns['escape']})";
-               $patterns['ident'] = "-?{$patterns['nmstart']}{$patterns['nmchar']}*";
-               $patterns['quantity'] = "{$patterns['num']}(?:\s*{$patterns['unit']}|{$patterns['ident']})?";
-               $patterns['possibly_negative_quantity'] = "((?:-?{$patterns['quantity']})|(?:inherit|auto))";
-               $patterns['color'] = "(#?{$patterns['nmchar']}+|(?:rgba?|hsla?)\([ \d.,%-]+\))";
-               $patterns['url_chars'] = "(?:{$patterns['url_special_chars']}|{$patterns['nonAscii']}|{$patterns['escape']})*";
-               $patterns['lookahead_not_open_brace'] = "(?!({$patterns['nmchar']}|\r?\n|\s|#|\:|\.|\,|\+|>|\(|\)|\[|\]|=|\*=|~=|\^=|'[^']*'])*?{)";
-               $patterns['lookahead_not_closing_paren'] = "(?!{$patterns['url_chars']}?{$patterns['valid_after_uri_chars']}\))";
-               $patterns['lookahead_for_closing_paren'] = "(?={$patterns['url_chars']}?{$patterns['valid_after_uri_chars']}\))";
-               $patterns['noflip_single'] = "/({$patterns['noflip_annotation']}{$patterns['lookahead_not_open_brace']}[^;}]+;?)/i";
-               $patterns['noflip_class'] = "/({$patterns['noflip_annotation']}{$patterns['chars_within_selector']}})/i";
-               $patterns['direction_ltr'] = "/({$patterns['direction']})ltr/i";
-               $patterns['direction_rtl'] = "/({$patterns['direction']})rtl/i";
-               $patterns['left'] = "/{$patterns['lookbehind_not_letter']}(left){$patterns['lookahead_not_letter']}{$patterns['lookahead_not_closing_paren']}{$patterns['lookahead_not_open_brace']}/i";
-               $patterns['right'] = "/{$patterns['lookbehind_not_letter']}(right){$patterns['lookahead_not_letter']}{$patterns['lookahead_not_closing_paren']}{$patterns['lookahead_not_open_brace']}/i";
-               $patterns['left_in_url'] = "/{$patterns['lookbehind_not_letter']}(left){$patterns['lookahead_for_closing_paren']}/i";
-               $patterns['right_in_url'] = "/{$patterns['lookbehind_not_letter']}(right){$patterns['lookahead_for_closing_paren']}/i";
-               $patterns['ltr_in_url'] = "/{$patterns['lookbehind_not_letter']}(ltr){$patterns['lookahead_for_closing_paren']}/i";
-               $patterns['rtl_in_url'] = "/{$patterns['lookbehind_not_letter']}(rtl){$patterns['lookahead_for_closing_paren']}/i";
-               $patterns['cursor_east'] = "/{$patterns['lookbehind_not_letter']}([ns]?)e-resize/";
-               $patterns['cursor_west'] = "/{$patterns['lookbehind_not_letter']}([ns]?)w-resize/";
-               $patterns['four_notation_quantity'] = "/(:\s*){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s*[;}])/i";
-               $patterns['four_notation_color'] = "/(-color\s*:\s*){$patterns['color']}(\s+){$patterns['color']}(\s+){$patterns['color']}(\s+){$patterns['color']}(\s*[;}])/i";
-               $patterns['border_radius'] = "/(border-radius\s*:\s*){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s*[;}])/i";
-               $patterns['box_shadow'] = "/(box-shadow\s*:\s*(?:inset\s*)?){$patterns['possibly_negative_quantity']}/i";
-               $patterns['text_shadow1'] = "/(text-shadow\s*:\s*){$patterns['color']}(\s*){$patterns['possibly_negative_quantity']}/i";
-               $patterns['text_shadow2'] = "/(text-shadow\s*:\s*){$patterns['possibly_negative_quantity']}/i";
-               // The two regexes below are parenthesized differently then in the original implementation to make the
-               // callback's job more straightforward
-               $patterns['bg_horizontal_percentage'] = "/(background(?:-position)?\s*:\s*[^%]*?)(-?{$patterns['num']})(%\s*(?:{$patterns['quantity']}|{$patterns['ident']}))/";
-               $patterns['bg_horizontal_percentage_x'] = "/(background-position-x\s*:\s*)(-?{$patterns['num']})(%)/";
-               // @codingStandardsIgnoreEnd
-       }
-
-       /**
-        * Transform an LTR stylesheet to RTL
-        * @param string $css stylesheet to transform
-        * @param $swapLtrRtlInURL Boolean: If true, swap 'ltr' and 'rtl' in URLs
-        * @param $swapLeftRightInURL Boolean: If true, swap 'left' and 'right' in URLs
-        * @return string Transformed stylesheet
-        */
-       public static function transform( $css, $swapLtrRtlInURL = false, $swapLeftRightInURL = false ) {
-               // We wrap tokens in ` , not ~ like the original implementation does.
-               // This was done because ` is not a legal character in CSS and can only
-               // occur in URLs, where we escape it to %60 before inserting our tokens.
-               $css = str_replace( '`', '%60', $css );
-
-               self::buildPatterns();
-
-               // Tokenize single line rules with /* @noflip */
-               $noFlipSingle = new CSSJanusTokenizer( self::$patterns['noflip_single'], '`NOFLIP_SINGLE`' );
-               $css = $noFlipSingle->tokenize( $css );
-
-               // Tokenize class rules with /* @noflip */
-               $noFlipClass = new CSSJanusTokenizer( self::$patterns['noflip_class'], '`NOFLIP_CLASS`' );
-               $css = $noFlipClass->tokenize( $css );
-
-               // Tokenize comments
-               $comments = new CSSJanusTokenizer( self::$patterns['comment'], '`C`' );
-               $css = $comments->tokenize( $css );
-
-               // LTR->RTL fixes start here
-               $css = self::fixDirection( $css );
-               if ( $swapLtrRtlInURL ) {
-                       $css = self::fixLtrRtlInURL( $css );
-               }
-
-               if ( $swapLeftRightInURL ) {
-                       $css = self::fixLeftRightInURL( $css );
-               }
-               $css = self::fixLeftAndRight( $css );
-               $css = self::fixCursorProperties( $css );
-               $css = self::fixFourPartNotation( $css );
-               $css = self::fixBorderRadius( $css );
-               $css = self::fixBackgroundPosition( $css );
-               $css = self::fixShadows( $css );
-
-               // Detokenize stuff we tokenized before
-               $css = $comments->detokenize( $css );
-               $css = $noFlipClass->detokenize( $css );
-               $css = $noFlipSingle->detokenize( $css );
-
-               return $css;
-       }
-
-       /**
-        * Replace direction: ltr; with direction: rtl; and vice versa.
-        *
-        * The original implementation only does this inside body selectors
-        * and misses "body\n{\ndirection:ltr;\n}". This function does not have
-        * these problems.
-        *
-        * See http://code.google.com/p/cssjanus/issues/detail?id=15 and
-        * TODO: URL
-        * @param $css string
-        * @return string
-        */
-       private static function fixDirection( $css ) {
-               $css = preg_replace( self::$patterns['direction_ltr'],
-                       '$1' . self::$patterns['tmpToken'], $css );
-               $css = preg_replace( self::$patterns['direction_rtl'], '$1ltr', $css );
-               $css = str_replace( self::$patterns['tmpToken'], 'rtl', $css );
-
-               return $css;
-       }
-
-       /**
-        * Replace 'ltr' with 'rtl' and vice versa in background URLs
-        * @param $css string
-        * @return string
-        */
-       private static function fixLtrRtlInURL( $css ) {
-               $css = preg_replace( self::$patterns['ltr_in_url'], self::$patterns['tmpToken'], $css );
-               $css = preg_replace( self::$patterns['rtl_in_url'], 'ltr', $css );
-               $css = str_replace( self::$patterns['tmpToken'], 'rtl', $css );
-
-               return $css;
-       }
-
-       /**
-        * Replace 'left' with 'right' and vice versa in background URLs
-        * @param $css string
-        * @return string
-        */
-       private static function fixLeftRightInURL( $css ) {
-               $css = preg_replace( self::$patterns['left_in_url'], self::$patterns['tmpToken'], $css );
-               $css = preg_replace( self::$patterns['right_in_url'], 'left', $css );
-               $css = str_replace( self::$patterns['tmpToken'], 'right', $css );
-
-               return $css;
-       }
-
-       /**
-        * Flip rules like left: , padding-right: , etc.
-        * @param $css string
-        * @return string
-        */
-       private static function fixLeftAndRight( $css ) {
-               $css = preg_replace( self::$patterns['left'], self::$patterns['tmpToken'], $css );
-               $css = preg_replace( self::$patterns['right'], 'left', $css );
-               $css = str_replace( self::$patterns['tmpToken'], 'right', $css );
-
-               return $css;
-       }
-
-       /**
-        * Flip East and West in rules like cursor: nw-resize;
-        * @param $css string
-        * @return string
-        */
-       private static function fixCursorProperties( $css ) {
-               $css = preg_replace( self::$patterns['cursor_east'],
-                       '$1' . self::$patterns['tmpToken'], $css );
-               $css = preg_replace( self::$patterns['cursor_west'], '$1e-resize', $css );
-               $css = str_replace( self::$patterns['tmpToken'], 'w-resize', $css );
-
-               return $css;
-       }
-
-       /**
-        * Swap the second and fourth parts in four-part notation rules like
-        * padding: 1px 2px 3px 4px;
-        *
-        * Unlike the original implementation, this function doesn't suffer from
-        * the bug where whitespace is not preserved when flipping four-part rules
-        * and four-part color rules with multiple whitespace characters between
-        * colors are not recognized.
-        * See http://code.google.com/p/cssjanus/issues/detail?id=16
-        * @param $css string
-        * @return string
-        */
-       private static function fixFourPartNotation( $css ) {
-               $css = preg_replace( self::$patterns['four_notation_quantity'], '$1$2$3$8$5$6$7$4$9', $css );
-               $css = preg_replace( self::$patterns['four_notation_color'], '$1$2$3$8$5$6$7$4$9', $css );
-               return $css;
-       }
-
-       /**
-        * Swaps appropriate corners in four-part border-radius rules.
-        * Needs to undo the effect of fixFourPartNotation() on those rules, too.
-        *
-        * @param $css string
-        * @return string
-        */
-       private static function fixBorderRadius( $css ) {
-               // Undo four_notation_quantity
-               $css = preg_replace( self::$patterns['border_radius'], '$1$2$3$8$5$6$7$4$9', $css );
-               // Do the real thing
-               $css = preg_replace( self::$patterns['border_radius'], '$1$4$3$2$5$8$7$6$9', $css );
-
-               return $css;
-       }
-
-       /**
-        * Negates horizontal offset in box-shadow and text-shadow rules.
-        *
-        * @param $css string
-        * @return string
-        */
-       private static function fixShadows( $css ) {
-               // Flips the sign of a CSS value, possibly with a unit.
-               // (We can't just negate the value with unary minus due to the units.)
-               $flipSign = function ( $cssValue ) {
-                       // Don't mangle zeroes
-                       if ( floatval( $cssValue ) === 0.0 ) {
-                               return $cssValue;
-                       } elseif ( $cssValue[0] === '-' ) {
-                               return substr( $cssValue, 1 );
-                       } else {
-                               return "-" . $cssValue;
-                       }
-               };
-
-               $css = preg_replace_callback(
-                       self::$patterns['box_shadow'], function ( $matches ) use ( $flipSign ) {
-                               return $matches[1] . $flipSign( $matches[2] );
-                       },
-                       $css
-               );
-
-               $css = preg_replace_callback(
-                       self::$patterns['text_shadow1'],
-                       function ( $matches ) use ( $flipSign ) {
-                               return $matches[1] . $matches[2] . $matches[3] . $flipSign( $matches[4] );
-                       },
-                       $css
-               );
-
-               $css = preg_replace_callback(
-                       self::$patterns['text_shadow2'],
-                       function ( $matches ) use ( $flipSign ) {
-                               return $matches[1] . $flipSign( $matches[2] );
-                       },
-                       $css
-               );
-
-               return $css;
-       }
-
-       /**
-        * Flip horizontal background percentages.
-        * @param $css string
-        * @return string
-        */
-       private static function fixBackgroundPosition( $css ) {
-               $replaced = preg_replace_callback( self::$patterns['bg_horizontal_percentage'],
-                       array( 'self', 'calculateNewBackgroundPosition' ), $css );
-               if ( $replaced !== null ) {
-                       // Check for null; sometimes preg_replace_callback() returns null here for some weird reason
-                       $css = $replaced;
-               }
-               $replaced = preg_replace_callback( self::$patterns['bg_horizontal_percentage_x'],
-                       array( 'self', 'calculateNewBackgroundPosition' ), $css );
-               if ( $replaced !== null ) {
-                       $css = $replaced;
-               }
-
-               return $css;
-       }
-
-       /**
-        * Callback for calculateNewBackgroundPosition()
-        * @param $matches array
-        * @return string
-        */
-       private static function calculateNewBackgroundPosition( $matches ) {
-               return $matches[1] . ( 100 - $matches[2] ) . $matches[3];
-       }
-}
-
-/**
- * Utility class used by CSSJanus that tokenizes and untokenizes things we want
- * to protect from being janused.
- * @author Roan Kattouw
- */
-class CSSJanusTokenizer {
-       private $regex, $token;
-       private $originals;
-
-       /**
-        * Constructor
-        * @param string $regex Regular expression whose matches to replace by a token.
-        * @param string $token Token
-        */
-       public function __construct( $regex, $token ) {
-               $this->regex = $regex;
-               $this->token = $token;
-               $this->originals = array();
-       }
-
-       /**
-        * Replace all occurrences of $regex in $str with a token and remember
-        * the original strings.
-        * @param string $str to tokenize
-        * @return string Tokenized string
-        */
-       public function tokenize( $str ) {
-               return preg_replace_callback( $this->regex, array( $this, 'tokenizeCallback' ), $str );
-       }
-
-       /**
-        * @param $matches array
-        * @return string
-        */
-       private function tokenizeCallback( $matches ) {
-               $this->originals[] = $matches[0];
-               return $this->token;
-       }
-
-       /**
-        * Replace tokens with their originals. If multiple strings were tokenized, it's important they be
-        * detokenized in exactly the SAME ORDER.
-        * @param string $str previously run through tokenize()
-        * @return string Original string
-        */
-       public function detokenize( $str ) {
-               // PHP has no function to replace only the first occurrence or to
-               // replace occurrences of the same string with different values,
-               // so we use preg_replace_callback() even though we don't really need a regex
-               return preg_replace_callback( '/' . preg_quote( $this->token, '/' ) . '/',
-                       array( $this, 'detokenizeCallback' ), $str );
-       }
-
-       /**
-        * @param $matches
-        * @return mixed
-        */
-       private function detokenizeCallback( $matches ) {
-               $retval = current( $this->originals );
-               next( $this->originals );
-
-               return $retval;
-       }
-}
index 4e2ca83..6eb5258 100644 (file)
@@ -38,6 +38,7 @@ class CSSMin {
         * which when base64 encoded will result in a 1/3 increase in size.
         */
        const EMBED_SIZE_LIMIT = 24576;
+       const DATA_URI_SIZE_LIMIT = 32768;
        const URL_REGEX = 'url\(\s*[\'"]?(?P<file>[^\?\)\'"]*?)(?P<query>\?[^\)\'"]*?|)[\'"]?\s*\)';
        const EMBED_REGEX = '\/\*\s*\@embed\s*\*\/';
        const COMMENT_REGEX = '\/\*.*?\*\/';
@@ -100,10 +101,11 @@ class CSSMin {
        }
 
        /**
-        * Encode an image file as a base64 data URI.
-        * If the image file has a suitable MIME type and size, encode it as a
-        * base64 data URI. Return false if the image type is unfamiliar or exceeds
-        * the size limit.
+        * Encode an image file as a data URI.
+        *
+        * If the image file has a suitable MIME type and size, encode it as a data URI, base64-encoded
+        * for binary files or just percent-encoded otherwise. Return false if the image type is
+        * unfamiliar or file exceeds the size limit.
         *
         * @param string $file Image file to encode.
         * @param string|null $type File's MIME type or null. If null, CSSMin will
@@ -111,7 +113,7 @@ class CSSMin {
         * @param int|bool $sizeLimit If the size of the target file is greater than
         *     this value, decline to encode the image file and return false
         *     instead. If $sizeLimit is false, no limit is enforced.
-        * @return string|bool: Image contents encoded as a data URI or false.
+        * @return string|bool Image contents encoded as a data URI or false.
         */
        public static function encodeImageAsDataURI( $file, $type = null,
                $sizeLimit = self::EMBED_SIZE_LIMIT
@@ -125,8 +127,23 @@ class CSSMin {
                if ( !$type ) {
                        return false;
                }
-               $data = base64_encode( file_get_contents( $file ) );
-               return 'data:' . $type . ';base64,' . $data;
+
+               $contents = file_get_contents( $file );
+               // Only whitespace and printable ASCII characters
+               $isText = (bool)preg_match( '/^[\r\n\t\x20-\x7e]+$/', $contents );
+
+               if ( $isText ) {
+                       // Do not base64-encode non-binary files (sane SVGs), unless that'd exceed URI length limit.
+                       // (This often produces longer URLs, but they compress better, yielding a net smaller size.)
+                       $uri = 'data:' . $type . ',' . rawurlencode( $contents );
+                       if ( strlen( $uri ) >= self::DATA_URI_SIZE_LIMIT ) {
+                               $uri = 'data:' . $type . ';base64,' . base64_encode( $contents );
+                       }
+               } else {
+                       $uri = 'data:' . $type . ';base64,' . base64_encode( $contents );
+               }
+
+               return $uri;
        }
 
        /**
@@ -135,27 +152,21 @@ class CSSMin {
         */
        public static function getMimeType( $file ) {
                $realpath = realpath( $file );
-               // Try a couple of different ways to get the MIME-type of a file, in order of
-               // preference
                if (
                        $realpath
                        && function_exists( 'finfo_file' )
                        && function_exists( 'finfo_open' )
                        && defined( 'FILEINFO_MIME_TYPE' )
                ) {
-                       // As of PHP 5.3, this is how you get the MIME-type of a file; it uses the Fileinfo
-                       // PECL extension
                        return finfo_file( finfo_open( FILEINFO_MIME_TYPE ), $realpath );
-               } elseif ( function_exists( 'mime_content_type' ) ) {
-                       // Before this was deprecated in PHP 5.3, this was how you got the MIME-type of a file
-                       return mime_content_type( $file );
-               } else {
-                       // Worst-case scenario has happened, use the file extension to infer the MIME-type
-                       $ext = strtolower( pathinfo( $file, PATHINFO_EXTENSION ) );
-                       if ( isset( self::$mimeTypes[$ext] ) ) {
-                               return self::$mimeTypes[$ext];
-                       }
                }
+
+               // Infer the MIME-type from the file extension
+               $ext = strtolower( pathinfo( $file, PATHINFO_EXTENSION ) );
+               if ( isset( self::$mimeTypes[$ext] ) ) {
+                       return self::$mimeTypes[$ext];
+               }
+
                return false;
        }
 
@@ -206,10 +217,9 @@ class CSSMin {
                        $remote = substr( $remote, 0, -1 );
                }
 
-               // Replace all comments by a placeholder so they will not interfere
-               // with the remapping
-               // Warning: This will also catch on anything looking like the start of
-               // a comment between quotation marks (e.g. "foo /* bar").
+               // Replace all comments by a placeholder so they will not interfere with the remapping.
+               // Warning: This will also catch on anything looking like the start of a comment between
+               // quotation marks (e.g. "foo /* bar").
                $comments = array();
                $placeholder = uniqid( '', true );
 
@@ -232,12 +242,13 @@ class CSSMin {
 
                $source = preg_replace_callback(
                        $pattern,
-                       function ( $matchOuter ) use ( $local, $remote, $embedData ) {
+                       function ( $matchOuter ) use ( $local, $remote, $embedData, $placeholder ) {
                                $rule = $matchOuter[0];
 
-                               // Check for global @embed comment and remove it
+                               // Check for global @embed comment and remove it. Allow other comments to be present
+                               // before @embed (they have been replaced with placeholders at this point).
                                $embedAll = false;
-                               $rule = preg_replace( '/^(\s*)' . CSSMin::EMBED_REGEX . '\s*/', '$1', $rule, 1, $embedAll );
+                               $rule = preg_replace( '/^((?:\s+|' . $placeholder . '(\d+)x)*)' . CSSMin::EMBED_REGEX . '\s*/', '$1', $rule, 1, $embedAll );
 
                                // Build two versions of current rule: with remapped URLs
                                // and with embedded data: URIs (where possible).
@@ -254,9 +265,12 @@ class CSSMin {
                                );
 
                                if ( $embedData ) {
+                                       // Remember the occurring MIME types to avoid fallbacks when embedding some files.
+                                       $mimeTypes = array();
+
                                        $ruleWithEmbedded = preg_replace_callback(
                                                $pattern,
-                                               function ( $match ) use ( $embedAll, $local, $remote ) {
+                                               function ( $match ) use ( $embedAll, $local, $remote, &$mimeTypes ) {
                                                        $embed = $embedAll || $match['embed'];
                                                        $embedded = CSSMin::remapOne(
                                                                $match['file'],
@@ -266,21 +280,35 @@ class CSSMin {
                                                                $embed
                                                        );
 
+                                                       $url = $match['file'] . $match['query'];
+                                                       $file = $local . $match['file'];
+                                                       if (
+                                                               !CSSMin::isRemoteUrl( $url ) && !CSSMin::isLocalUrl( $url )
+                                                               && file_exists( $file )
+                                                       ) {
+                                                               $mimeTypes[ CSSMin::getMimeType( $file ) ] = true;
+                                                       }
+
                                                        return CSSMin::buildUrlValue( $embedded );
                                                },
                                                $rule
                                        );
+
+                                       // Are all referenced images SVGs?
+                                       $needsEmbedFallback = $mimeTypes !== array( 'image/svg+xml' => true );
                                }
 
-                               if ( $embedData && $ruleWithEmbedded !== $ruleWithRemapped ) {
-                                       // Build 2 CSS properties; one which uses a base64 encoded data URI in place
-                                       // of the @embed comment to try and retain line-number integrity, and the
-                                       // other with a remapped an versioned URL and an Internet Explorer hack
+                               if ( !$embedData || $ruleWithEmbedded === $ruleWithRemapped ) {
+                                       // We're not embedding anything, or we tried to but the file is not embeddable
+                                       return $ruleWithRemapped;
+                               } elseif ( $embedData && $needsEmbedFallback ) {
+                                       // Build 2 CSS properties; one which uses a data URI in place of the @embed comment, and
+                                       // the other with a remapped and versioned URL with an Internet Explorer 6 and 7 hack
                                        // making it ignored in all browsers that support data URIs
                                        return "$ruleWithEmbedded;$ruleWithRemapped!ie";
                                } else {
-                                       // No reason to repeat twice
-                                       return $ruleWithRemapped;
+                                       // Look ma, no fallbacks! This is for files which IE 6 and 7 don't support anyway: SVG.
+                                       return $ruleWithEmbedded;
                                }
                        }, $source );
 
@@ -294,6 +322,34 @@ class CSSMin {
 
        }
 
+       /**
+        * Is this CSS rule referencing a remote URL?
+        *
+        * @private Until we require PHP 5.5 and we can access self:: from closures.
+        * @param string $maybeUrl
+        * @return bool
+        */
+       public static function isRemoteUrl( $maybeUrl ) {
+               if ( substr( $maybeUrl, 0, 2 ) === '//' || parse_url( $maybeUrl, PHP_URL_SCHEME ) ) {
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Is this CSS rule referencing a local URL?
+        *
+        * @private Until we require PHP 5.5 and we can access self:: from closures.
+        * @param string $maybeUrl
+        * @return bool
+        */
+       public static function isLocalUrl( $maybeUrl ) {
+               if ( !self::isRemoteUrl( $maybeUrl ) && $maybeUrl !== '' && $maybeUrl[0] === '/' ) {
+                       return true;
+               }
+               return false;
+       }
+
        /**
         * Remap or embed a CSS URL path.
         *
@@ -308,22 +364,16 @@ class CSSMin {
                // The full URL possibly with query, as passed to the 'url()' value in CSS
                $url = $file . $query;
 
-               // Skip fully-qualified and protocol-relative URLs and data URIs
-               if ( substr( $url, 0, 2 ) === '//' || parse_url( $url, PHP_URL_SCHEME ) ) {
-                       return $url;
+               // Expand local URLs with absolute paths like /w/index.php to possibly protocol-relative URL, if
+               // wfExpandUrl() is available. (This will not be the case if we're running outside of MW.)
+               if ( self::isLocalUrl( $url ) && function_exists( 'wfExpandUrl' ) ) {
+                       return wfExpandUrl( $url, PROTO_RELATIVE );
                }
 
-               // URLs with absolute paths like /w/index.php need to be expanded
-               // to absolute URLs but otherwise left alone
-               if ( $url !== '' && $url[0] === '/' ) {
-                       // Replace the file path with an expanded (possibly protocol-relative) URL
-                       // ...but only if wfExpandUrl() is even available.
-                       // This will not be the case if we're running outside of MW
-                       if ( function_exists( 'wfExpandUrl' ) ) {
-                               return wfExpandUrl( $url, PROTO_RELATIVE );
-                       } else {
-                               return $url;
-                       }
+               // Pass thru fully-qualified and protocol-relative URLs and data URIs, as well as local URLs if
+               // we can't expand them.
+               if ( self::isRemoteUrl( $url ) || self::isLocalUrl( $url ) ) {
+                       return $url;
                }
 
                if ( $local === false ) {
diff --git a/includes/libs/Cookie.php b/includes/libs/Cookie.php
new file mode 100644 (file)
index 0000000..56dc6ea
--- /dev/null
@@ -0,0 +1,291 @@
+<?php
+/**
+ * Cookie for HTTP requests.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup HTTP
+ */
+
+class Cookie {
+       protected $name;
+       protected $value;
+       protected $expires;
+       protected $path;
+       protected $domain;
+       protected $isSessionKey = true;
+       // TO IMPLEMENT  protected $secure
+       // TO IMPLEMENT? protected $maxAge (add onto expires)
+       // TO IMPLEMENT? protected $version
+       // TO IMPLEMENT? protected $comment
+
+       function __construct( $name, $value, $attr ) {
+               $this->name = $name;
+               $this->set( $value, $attr );
+       }
+
+       /**
+        * Sets a cookie.  Used before a request to set up any individual
+        * cookies. Used internally after a request to parse the
+        * Set-Cookie headers.
+        *
+        * @param string $value The value of the cookie
+        * @param array $attr Possible key/values:
+        *        expires A date string
+        *        path    The path this cookie is used on
+        *        domain  Domain this cookie is used on
+        * @throws MWException
+        */
+       public function set( $value, $attr ) {
+               $this->value = $value;
+
+               if ( isset( $attr['expires'] ) ) {
+                       $this->isSessionKey = false;
+                       $this->expires = strtotime( $attr['expires'] );
+               }
+
+               if ( isset( $attr['path'] ) ) {
+                       $this->path = $attr['path'];
+               } else {
+                       $this->path = '/';
+               }
+
+               if ( isset( $attr['domain'] ) ) {
+                       if ( self::validateCookieDomain( $attr['domain'] ) ) {
+                               $this->domain = $attr['domain'];
+                       }
+               } else {
+                       throw new InvalidArgumentException( '$attr must contain a domain' );
+               }
+       }
+
+       /**
+        * Return the true if the cookie is valid is valid.  Otherwise,
+        * false.  The uses a method similar to IE cookie security
+        * described here:
+        * http://kuza55.blogspot.com/2008/02/understanding-cookie-security.html
+        * A better method might be to use a blacklist like
+        * http://publicsuffix.org/
+        *
+        * @todo fixme fails to detect 3-letter top-level domains
+        * @todo fixme fails to detect 2-letter top-level domains for single-domain use (probably
+        * not a big problem in practice, but there are test cases)
+        *
+        * @param string $domain The domain to validate
+        * @param string $originDomain (optional) the domain the cookie originates from
+        * @return bool
+        */
+       public static function validateCookieDomain( $domain, $originDomain = null ) {
+               $dc = explode( ".", $domain );
+
+               // Don't allow a trailing dot or addresses without a or just a leading dot
+               if ( substr( $domain, -1 ) == '.' ||
+                       count( $dc ) <= 1 ||
+                       count( $dc ) == 2 && $dc[0] === ''
+               ) {
+                       return false;
+               }
+
+               // Only allow full, valid IP addresses
+               if ( preg_match( '/^[0-9.]+$/', $domain ) ) {
+                       if ( count( $dc ) != 4 ) {
+                               return false;
+                       }
+
+                       if ( ip2long( $domain ) === false ) {
+                               return false;
+                       }
+
+                       if ( $originDomain == null || $originDomain == $domain ) {
+                               return true;
+                       }
+
+               }
+
+               // Don't allow cookies for "co.uk" or "gov.uk", etc, but allow "supermarket.uk"
+               if ( strrpos( $domain, "." ) - strlen( $domain ) == -3 ) {
+                       if ( ( count( $dc ) == 2 && strlen( $dc[0] ) <= 2 )
+                               || ( count( $dc ) == 3 && strlen( $dc[0] ) == "" && strlen( $dc[1] ) <= 2 ) ) {
+                               return false;
+                       }
+                       if ( ( count( $dc ) == 2 || ( count( $dc ) == 3 && $dc[0] == '' ) )
+                               && preg_match( '/(com|net|org|gov|edu)\...$/', $domain ) ) {
+                               return false;
+                       }
+               }
+
+               if ( $originDomain != null ) {
+                       if ( substr( $domain, 0, 1 ) != '.' && $domain != $originDomain ) {
+                               return false;
+                       }
+
+                       if ( substr( $domain, 0, 1 ) == '.'
+                               && substr_compare(
+                                       $originDomain,
+                                       $domain,
+                                       -strlen( $domain ),
+                                       strlen( $domain ),
+                                       true
+                               ) != 0
+                       ) {
+                               return false;
+                       }
+               }
+
+               return true;
+       }
+
+       /**
+        * Serialize the cookie jar into a format useful for HTTP Request headers.
+        *
+        * @param string $path The path that will be used. Required.
+        * @param string $domain The domain that will be used. Required.
+        * @return string
+        */
+       public function serializeToHttpRequest( $path, $domain ) {
+               $ret = '';
+
+               if ( $this->canServeDomain( $domain )
+                               && $this->canServePath( $path )
+                               && $this->isUnExpired() ) {
+                       $ret = $this->name . '=' . $this->value;
+               }
+
+               return $ret;
+       }
+
+       /**
+        * @param string $domain
+        * @return bool
+        */
+       protected function canServeDomain( $domain ) {
+               if ( $domain == $this->domain
+                       || ( strlen( $domain ) > strlen( $this->domain )
+                               && substr( $this->domain, 0, 1 ) == '.'
+                               && substr_compare(
+                                       $domain,
+                                       $this->domain,
+                                       -strlen( $this->domain ),
+                                       strlen( $this->domain ),
+                                       true
+                               ) == 0
+                       )
+               ) {
+                       return true;
+               }
+
+               return false;
+       }
+
+       /**
+        * @param string $path
+        * @return bool
+        */
+       protected function canServePath( $path ) {
+               return ( $this->path && substr_compare( $this->path, $path, 0, strlen( $this->path ) ) == 0 );
+       }
+
+       /**
+        * @return bool
+        */
+       protected function isUnExpired() {
+               return $this->isSessionKey || $this->expires > time();
+       }
+}
+
+class CookieJar {
+       private $cookie = array();
+
+       /**
+        * Set a cookie in the cookie jar. Make sure only one cookie per-name exists.
+        * @see Cookie::set()
+        * @param string $name
+        * @param string $value
+        * @param array $attr
+        */
+       public function setCookie( $name, $value, $attr ) {
+               /* cookies: case insensitive, so this should work.
+                * We'll still send the cookies back in the same case we got them, though.
+                */
+               $index = strtoupper( $name );
+
+               if ( isset( $this->cookie[$index] ) ) {
+                       $this->cookie[$index]->set( $value, $attr );
+               } else {
+                       $this->cookie[$index] = new Cookie( $name, $value, $attr );
+               }
+       }
+
+       /**
+        * @see Cookie::serializeToHttpRequest
+        * @param string $path
+        * @param string $domain
+        * @return string
+        */
+       public function serializeToHttpRequest( $path, $domain ) {
+               $cookies = array();
+
+               foreach ( $this->cookie as $c ) {
+                       $serialized = $c->serializeToHttpRequest( $path, $domain );
+
+                       if ( $serialized ) {
+                               $cookies[] = $serialized;
+                       }
+               }
+
+               return implode( '; ', $cookies );
+       }
+
+       /**
+        * Parse the content of an Set-Cookie HTTP Response header.
+        *
+        * @param string $cookie
+        * @param string $domain Cookie's domain
+        * @return null
+        */
+       public function parseCookieResponseHeader( $cookie, $domain ) {
+               $len = strlen( 'Set-Cookie:' );
+
+               if ( substr_compare( 'Set-Cookie:', $cookie, 0, $len, true ) === 0 ) {
+                       $cookie = substr( $cookie, $len );
+               }
+
+               $bit = array_map( 'trim', explode( ';', $cookie ) );
+
+               if ( count( $bit ) >= 1 ) {
+                       list( $name, $value ) = explode( '=', array_shift( $bit ), 2 );
+                       $attr = array();
+
+                       foreach ( $bit as $piece ) {
+                               $parts = explode( '=', $piece );
+                               if ( count( $parts ) > 1 ) {
+                                       $attr[strtolower( $parts[0] )] = $parts[1];
+                               } else {
+                                       $attr[strtolower( $parts[0] )] = true;
+                               }
+                       }
+
+                       if ( !isset( $attr['domain'] ) ) {
+                               $attr['domain'] = $domain;
+                       } elseif ( !Cookie::validateCookieDomain( $attr['domain'], $domain ) ) {
+                               return null;
+                       }
+
+                       $this->setCookie( $name, $value, $attr );
+               }
+       }
+}
diff --git a/includes/libs/ObjectFactory.php b/includes/libs/ObjectFactory.php
new file mode 100644 (file)
index 0000000..ee696c3
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+/**
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Construct objects from configuration instructions.
+ *
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class ObjectFactory {
+
+       /**
+        * Instantiate an object based on a specification array.
+        *
+        * The specification array must contain a 'class' key with string value
+        * that specifies the class name to instantiate or a 'factory' key with
+        * a callable (is_callable() === true). It can optionally contain
+        * an 'args' key that provides arguments to pass to the
+        * constructor/callable.
+        *
+        * Object construction using a specification having both 'class' and
+        * 'args' members will call the constructor of the class using
+        * ReflectionClass::newInstanceArgs. The use of ReflectionClass carries
+        * a performance penalty and should not be used to create large numbers of
+        * objects. If this is needed, consider introducing a factory method that
+        * can be called via call_user_func_array() instead.
+        *
+        * Values in the arguments collection which are Closure instances will be
+        * expanded by invoking them with no arguments before passing the
+        * resulting value on to the constructor/callable. This can be used to
+        * pass DatabaseBase instances or other live objects to the
+        * constructor/callable.
+        *
+        * @param array $spec Object specification
+        * @return object
+        * @throws InvalidArgumentException when object specification does not
+        * contain 'class' or 'factory' keys
+        * @throws ReflectionException when 'args' are supplied and 'class'
+        * constructor is non-public or non-existant
+        */
+       public static function getObjectFromSpec( $spec ) {
+               $args = isset( $spec['args'] ) ? $spec['args'] : array();
+
+               $args = array_map( function ( $value ) {
+                       if ( is_object( $value ) && $value instanceof Closure ) {
+                               // If an argument is a Closure, call it.
+                               return $value();
+                       } else {
+                               return $value;
+                       }
+               }, $args );
+
+               if ( isset( $spec['class'] ) ) {
+                       $clazz = $spec['class'];
+                       if ( !$args ) {
+                               $obj = new $clazz();
+                       } else {
+                               $ref = new ReflectionClass( $clazz );
+                               $obj = $ref->newInstanceArgs( $args );
+                       }
+               } elseif ( isset( $spec['factory'] ) ) {
+                       $obj = call_user_func_array( $spec['factory'], $args );
+               } else {
+                       throw new InvalidArgumentException(
+                               'Provided specification lacks both factory and class parameters.'
+                       );
+               }
+
+               return $obj;
+       }
+}
index f988207..ce97142 100644 (file)
@@ -61,7 +61,7 @@ class ProcessCacheLRU {
                        unset( $this->cacheTimes[$evictKey] );
                }
                $this->cache[$key][$prop] = $value;
-               $this->cacheTimes[$key][$prop] = time();
+               $this->cacheTimes[$key][$prop] = microtime( true );
        }
 
        /**
@@ -69,12 +69,13 @@ class ProcessCacheLRU {
         *
         * @param $key string
         * @param $prop string
-        * @param $maxAge integer Ignore items older than this many seconds (since 1.21)
+        * @param $maxAge float Ignore items older than this many seconds (since 1.21)
         * @return bool
         */
-       public function has( $key, $prop, $maxAge = 0 ) {
+       public function has( $key, $prop, $maxAge = 0.0 ) {
                if ( isset( $this->cache[$key][$prop] ) ) {
-                       return ( $maxAge <= 0 || ( time() - $this->cacheTimes[$key][$prop] ) <= $maxAge );
+                       return ( $maxAge <= 0 ||
+                               ( microtime( true ) - $this->cacheTimes[$key][$prop] ) <= $maxAge );
                }
 
                return false;
@@ -121,6 +122,7 @@ class ProcessCacheLRU {
         *
         * @param $maxKeys integer
         * @return void
+        * @throws UnexpectedValueException
         */
        public function resize( $maxKeys ) {
                if ( !is_int( $maxKeys ) || $maxKeys < 1 ) {
index eb98a4a..aca857e 100644 (file)
@@ -39,6 +39,23 @@ class XmlTypeCheck {
         */
        public $rootElement = '';
 
+       /**
+        * A stack of strings containing the data of each xml element as it's processed. Append
+        * data to the top string of the stack, then pop off the string and process it when the
+        * element is closed.
+        */
+       protected $elementData = array();
+
+       /**
+        * A stack of element names and attributes, as we process them.
+        */
+       protected $elementDataContext = array();
+
+       /**
+        * Current depth of the data stack.
+        */
+       protected $stackDepth = 0;
+
        /**
         * Additional parsing options
         */
@@ -51,7 +68,7 @@ class XmlTypeCheck {
         * @param callable $filterCallback (optional)
         *        Function to call to do additional custom validity checks from the
         *        SAX element handler event. This gives you access to the element
-        *        namespace, name, and attributes, but not to text contents.
+        *        namespace, name, attributes, and text contents.
         *        Filter should return 'true' to toggle on $this->filterMatch
         * @param boolean $isFile (optional) indicates if the first parameter is a
         *        filename (default, true) or if it is a string (false)
@@ -179,7 +196,12 @@ class XmlTypeCheck {
                $this->rootElement = $name;
 
                if ( is_callable( $this->filterCallback ) ) {
-                       xml_set_element_handler( $parser, array( $this, 'elementOpen' ), false );
+                       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
@@ -193,12 +215,41 @@ class XmlTypeCheck {
         * @param $attribs
         */
        private function elementOpen( $parser, $name, $attribs ) {
-               if ( call_user_func( $this->filterCallback, $name, $attribs ) ) {
+               $this->elementDataContext[] = array( $name, $attribs );
+               $this->elementData[] = '';
+               $this->stackDepth++;
+       }
+
+       /**
+        * @param $parser
+        * @param $name
+        */
+       private function elementClose( $parser, $name ) {
+               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!
                        $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
+               $this->elementData[ $this->stackDepth - 1 ] .= trim( $data );
+       }
+
        /**
         * @param $parser
         * @param $target
index ed0382c..99cf399 100644 (file)
@@ -1017,7 +1017,7 @@ class JSParser
 
                        case KEYWORD_CATCH:
                        case KEYWORD_FINALLY:
-                               throw $this->t->newSyntaxError($tt + ' without preceding try');
+                               throw $this->t->newSyntaxError($tt . ' without preceding try');
 
                        case KEYWORD_THROW:
                                $n = new JSNode($this->t);
old mode 100644 (file)
new mode 100755 (executable)
index bebe3a9..46c5515 100644 (file)
@@ -533,6 +533,10 @@ 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;
        }
 
index 4dc25ef..c7f5e5a 100644 (file)
@@ -57,17 +57,6 @@ class LogEventsList extends ContextSource {
                $this->flags = $flags;
        }
 
-       /**
-        * Deprecated alias for getTitle(); do not use.
-        *
-        * @deprecated since 1.20; use getTitle() instead.
-        * @return Title
-        */
-       public function getDisplayTitle() {
-               wfDeprecated( __METHOD__, '1.20' );
-               return $this->getTitle();
-       }
-
        /**
         * Show options for the log list
         *
@@ -234,7 +223,8 @@ class LogEventsList extends ContextSource {
                        'user',
                        'mw-log-user',
                        15,
-                       $user
+                       $user,
+                       array( 'class' => 'mw-autocomplete-user' )
                );
 
                return '<span style="white-space: nowrap">' . $label . '</span>';
@@ -271,14 +261,21 @@ class LogEventsList extends ContextSource {
         * @return string
         */
        private function getExtraInputs( $types ) {
-               $offender = $this->getRequest()->getVal( 'offender' );
-               $user = User::newFromName( $offender, false );
-               if ( !$user || ( $user->getId() == 0 && !IP::isIPAddress( $offender ) ) ) {
-                       $offender = ''; // Blank field if invalid
-               }
-               if ( count( $types ) == 1 && $types[0] == 'suppress' ) {
-                       return Xml::inputLabel( $this->msg( 'revdelete-offender' )->text(), 'offender',
-                               'mw-log-offender', 20, $offender );
+               if ( count( $types ) == 1 ) {
+                       if ( $types[0] == 'suppress' ) {
+                               $offender = $this->getRequest()->getVal( 'offender' );
+                               $user = User::newFromName( $offender, false );
+                               if ( !$user || ( $user->getId() == 0 && !IP::isIPAddress( $offender ) ) ) {
+                                       $offender = ''; // Blank field if invalid
+                               }
+                               return Xml::inputLabel( $this->msg( 'revdelete-offender' )->text(), 'offender',
+                                       'mw-log-offender', 20, $offender );
+                       } else {
+                               // Allow extensions to add their own extra inputs
+                               $input = '';
+                               wfRunHooks( 'LogEventsListGetExtraInputs', array( $types[0], $this, &$input ) );
+                               return $input;
+                       }
                }
 
                return '';
@@ -545,13 +542,29 @@ class LogEventsList extends ContextSource {
                        $pager->mLimit = $lim;
                }
 
-               $logBody = $pager->getBody();
+               $logBody = null;
+               // 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 ) ) {
+                                       $logBody = '';
+                               }
+                       } else {
+                               $logBody = '';
+                       }
+               }
+
+               // Fetch the log rows and build the HTML if needed
+               $logBody = ( $logBody === null ) ? $pager->getBody() : $logBody;
+
                $s = '';
 
                if ( $logBody ) {
                        if ( $msgKey[0] ) {
                                $dir = $context->getLanguage()->getDir();
-                               $lang = $context->getLanguage()->getCode();
+                               $lang = $context->getLanguage()->getHtmlCode();
 
                                $s = Xml::openElement( 'div', array(
                                        'class' => "mw-warning-with-logexcerpt mw-content-$dir",
index 92985f3..bbe2f42 100644 (file)
@@ -322,6 +322,12 @@ class LogFormatter {
                                                break;
                                }
                                break;
+
+                       case 'merge':
+                               $text = wfMessage( 'pagemerge-logentry' )
+                                       ->rawParams( $target, $parameters['4::dest'], $parameters['5::mergepoint'] )
+                                       ->inContentLanguage()->escaped();
+                               break;
                        // case 'suppress' --private log -- aaron  (so we know who to blame in a few years :-D)
                        // default:
                }
@@ -791,25 +797,6 @@ class LegacyLogFormatter extends LogFormatter {
 
                        return $this->msg( 'parentheses' )->rawParams(
                                $this->context->getLanguage()->pipeList( $links ) )->escaped();
-               // Show unmerge link
-               } elseif ( $type == 'merge' && $subtype == 'merge' ) {
-                       if ( !$this->context->getUser()->isAllowed( 'mergehistory' ) ) {
-                               return '';
-                       }
-
-                       $params = $this->extractParameters();
-                       $revert = Linker::linkKnown(
-                               SpecialPage::getTitleFor( 'MergeHistory' ),
-                               $this->msg( 'revertmerge' )->escaped(),
-                               array(),
-                               array(
-                                       'target' => $params[3],
-                                       'dest' => $title->getPrefixedDBkey(),
-                                       'mergepoint' => $params[4]
-                               )
-                       );
-
-                       return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
                }
 
                // Do nothing. The implementation is handled by the hook modifiying the
index ce5b972..d576d74 100644 (file)
@@ -371,26 +371,6 @@ class LogPage {
                }
 
                switch ( $type ) {
-                       case 'move':
-                               $titleLink = Linker::link(
-                                       $title,
-                                       htmlspecialchars( $title->getPrefixedText() ),
-                                       array(),
-                                       array( 'redirect' => 'no' )
-                               );
-
-                               $targetTitle = Title::newFromText( $params[0] );
-
-                               if ( !$targetTitle ) {
-                                       # Workaround for broken database
-                                       $params[0] = htmlspecialchars( $params[0] );
-                               } else {
-                                       $params[0] = Linker::link(
-                                               $targetTitle,
-                                               htmlspecialchars( $params[0] )
-                                       );
-                               }
-                               break;
                        case 'block':
                                if ( substr( $title->getText(), 0, 1 ) == '#' ) {
                                        $titleLink = $title->getText();
@@ -402,19 +382,6 @@ class LogPage {
                                                . Linker::userToolLinks( $id, $title->getText(), false, Linker::TOOL_LINKS_NOBLOCK );
                                }
                                break;
-                       case 'merge':
-                               $titleLink = Linker::link(
-                                       $title,
-                                       $title->getPrefixedText(),
-                                       array(),
-                                       array( 'redirect' => 'no' )
-                               );
-                               $params[0] = Linker::link(
-                                       Title::newFromText( $params[0] ),
-                                       htmlspecialchars( $params[0] )
-                               );
-                               $params[1] = $lang->timeanddate( $params[1] );
-                               break;
                        default:
                                if ( $title->isSpecialPage() ) {
                                        list( $name, $par ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
diff --git a/includes/logging/MergeLogFormatter.php b/includes/logging/MergeLogFormatter.php
new file mode 100644 (file)
index 0000000..263d37a
--- /dev/null
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Formatter for merge 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 merge log entries.
+ *
+ * @since 1.25
+ */
+class MergeLogFormatter extends LogFormatter {
+       public function getPreloadTitles() {
+               $params = $this->extractParameters();
+
+               return array( Title::newFromText( $params[3] ) );
+       }
+
+       protected function getMessageParameters() {
+               $params = parent::getMessageParameters();
+               $oldname = $this->makePageLink( $this->entry->getTarget(), array( 'redirect' => 'no' ) );
+               $newname = $this->makePageLink( Title::newFromText( $params[3] ) );
+               $params[2] = Message::rawParam( $oldname );
+               $params[3] = Message::rawParam( $newname );
+               $params[4] = $this->context->getLanguage()->timeanddate( $params[4] );
+               return $params;
+       }
+
+       public function getActionLinks() {
+               if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) // Action is hidden
+                       || !$this->context->getUser()->isAllowed( 'mergehistory' )
+               ) {
+                       return '';
+               }
+
+               // Show unmerge link
+               $params = $this->extractParameters();
+               $revert = Linker::linkKnown(
+                       SpecialPage::getTitleFor( 'MergeHistory' ),
+                       $this->msg( 'revertmerge' )->escaped(),
+                       array(),
+                       array(
+                               'target' => $params[3],
+                               'dest' => $this->entry->getTarget()->getPrefixedDBkey(),
+                               'mergepoint' => $params[4],
+                               'submitted' => 1 // show the revisions immediately
+                       )
+               );
+
+               return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
+       }
+}
index 3913016..35da113 100644 (file)
@@ -37,8 +37,9 @@ class MoveLogFormatter extends LogFormatter {
 
        protected function getMessageKey() {
                $key = parent::getMessageKey();
-               $params = $this->getMessageParameters();
+               $params = $this->extractParameters();
                if ( isset( $params[4] ) && $params[4] === '1' ) {
+                       // Messages: logentry-move-move-noredirect, logentry-move-move_redir-noredirect
                        $key .= '-noredirect';
                }
 
@@ -51,6 +52,7 @@ class MoveLogFormatter extends LogFormatter {
                $newname = $this->makePageLink( Title::newFromText( $params[3] ) );
                $params[2] = Message::rawParam( $oldname );
                $params[3] = Message::rawParam( $newname );
+               unset( $params[4] ); // handled in getMessageKey
 
                return $params;
        }
diff --git a/includes/mail/EmailNotification.php b/includes/mail/EmailNotification.php
new file mode 100644 (file)
index 0000000..8215403
--- /dev/null
@@ -0,0 +1,512 @@
+<?php
+/**
+ * Classes used to send e-mails
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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 <brion@pobox.com>
+ * @author <mail@tgries.de>
+ * @author Tim Starling
+ * @author Luke Welling lwelling@wikimedia.org
+ */
+
+/**
+ * This module processes the email notifications when the current page is
+ * changed. It looks up the table watchlist to find out which users are watching
+ * that page.
+ *
+ * The current implementation sends independent emails to each watching user for
+ * the following reason:
+ *
+ * - Each watching user will be notified about the page edit time expressed in
+ * his/her local time (UTC is shown additionally). To achieve this, we need to
+ * find the individual timeoffset of each watching user from the preferences..
+ *
+ * Suggested improvement to slack down the number of sent emails: We could think
+ * of sending out bulk mails (bcc:user1,user2...) for all these users having the
+ * same timeoffset in their preferences.
+ *
+ * Visit the documentation pages under http://meta.wikipedia.com/Enotif
+ */
+class EmailNotification {
+       protected $subject, $body, $replyto, $from;
+       protected $timestamp, $summary, $minorEdit, $oldid, $composed_common, $pageStatus;
+       protected $mailTargets = array();
+
+       /**
+        * @var Title
+        */
+       protected $title;
+
+       /**
+        * @var User
+        */
+       protected $editor;
+
+       /**
+        * @param User $editor The editor that triggered the update.  Their notification
+        *  timestamp will not be updated(they have already seen it)
+        * @param Title $title The title to update timestamps for
+        * @param string $timestamp Set the upate timestamp to this value
+        * @return int[]
+        */
+       public static function updateWatchlistTimestamp( User $editor, Title $title, $timestamp ) {
+               global $wgEnotifWatchlist, $wgShowUpdatedMarker;
+
+               if ( !$wgEnotifWatchlist && !$wgShowUpdatedMarker ) {
+                       return array();
+               }
+
+               $dbw = wfGetDB( DB_MASTER );
+               $res = $dbw->select( array( 'watchlist' ),
+                       array( 'wl_user' ),
+                       array(
+                               'wl_user != ' . intval( $editor->getID() ),
+                               'wl_namespace' => $title->getNamespace(),
+                               'wl_title' => $title->getDBkey(),
+                               'wl_notificationtimestamp IS NULL',
+                       ), __METHOD__
+               );
+
+               $watchers = array();
+               foreach ( $res as $row ) {
+                       $watchers[] = intval( $row->wl_user );
+               }
+
+               if ( $watchers ) {
+                       // Update wl_notificationtimestamp for all watching users except the editor
+                       $fname = __METHOD__;
+                       $dbw->onTransactionIdle(
+                               function () use ( $dbw, $timestamp, $watchers, $title, $fname ) {
+                                       $dbw->update( 'watchlist',
+                                               array( /* SET */
+                                                       'wl_notificationtimestamp' => $dbw->timestamp( $timestamp )
+                                               ), array( /* WHERE */
+                                                       'wl_user' => $watchers,
+                                                       'wl_namespace' => $title->getNamespace(),
+                                                       'wl_title' => $title->getDBkey(),
+                                               ), $fname
+                                       );
+                               }
+                       );
+               }
+
+               return $watchers;
+       }
+
+       /**
+        * Send emails corresponding to the user $editor editing the page $title.
+        * Also updates wl_notificationtimestamp.
+        *
+        * May be deferred via the job queue.
+        *
+        * @param User $editor
+        * @param Title $title
+        * @param string $timestamp
+        * @param string $summary
+        * @param bool $minorEdit
+        * @param bool $oldid (default: false)
+        * @param string $pageStatus (default: 'changed')
+        */
+       public function notifyOnPageChange( $editor, $title, $timestamp, $summary,
+               $minorEdit, $oldid = false, $pageStatus = 'changed'
+       ) {
+               global $wgEnotifUseJobQ, $wgEnotifMinorEdits, $wgUsersNotifiedOnAllChanges, $wgEnotifUserTalk;
+
+               if ( $title->getNamespace() < 0 ) {
+                       return;
+               }
+
+               // update wl_notificationtimestamp for watchers
+               $watchers = self::updateWatchlistTimestamp( $editor, $title, $timestamp );
+
+               $sendEmail = true;
+               // If nobody is watching the page, and there are no users notified on all changes
+               // don't bother creating a job/trying to send emails
+               // $watchers deals with $wgEnotifWatchlist
+               if ( !count( $watchers ) && !count( $wgUsersNotifiedOnAllChanges ) ) {
+                       $sendEmail = false;
+                       // Only send notification for non minor edits, unless $wgEnotifMinorEdits
+                       if ( !$minorEdit || ( $wgEnotifMinorEdits && !$editor->isAllowed( 'nominornewtalk' ) ) ) {
+                               $isUserTalkPage = ( $title->getNamespace() == NS_USER_TALK );
+                               if ( $wgEnotifUserTalk
+                                       && $isUserTalkPage
+                                       && $this->canSendUserTalkEmail( $editor, $title, $minorEdit )
+                               ) {
+                                       $sendEmail = true;
+                               }
+                       }
+               }
+
+               if ( !$sendEmail ) {
+                       return;
+               }
+
+               if ( $wgEnotifUseJobQ ) {
+                       $params = array(
+                               'editor' => $editor->getName(),
+                               'editorID' => $editor->getID(),
+                               'timestamp' => $timestamp,
+                               'summary' => $summary,
+                               'minorEdit' => $minorEdit,
+                               'oldid' => $oldid,
+                               'watchers' => $watchers,
+                               'pageStatus' => $pageStatus
+                       );
+                       $job = new EnotifNotifyJob( $title, $params );
+                       JobQueueGroup::singleton()->push( $job );
+               } else {
+                       $this->actuallyNotifyOnPageChange(
+                               $editor,
+                               $title,
+                               $timestamp,
+                               $summary,
+                               $minorEdit,
+                               $oldid,
+                               $watchers,
+                               $pageStatus
+                       );
+               }
+       }
+
+       /**
+        * Immediate version of notifyOnPageChange().
+        *
+        * Send emails corresponding to the user $editor editing the page $title.
+        * Also updates wl_notificationtimestamp.
+        *
+        * @param User $editor
+        * @param Title $title
+        * @param string $timestamp Edit timestamp
+        * @param string $summary Edit summary
+        * @param bool $minorEdit
+        * @param int $oldid Revision ID
+        * @param array $watchers Array of user IDs
+        * @param string $pageStatus
+        * @throws MWException
+        */
+       public function actuallyNotifyOnPageChange( $editor, $title, $timestamp, $summary, $minorEdit,
+               $oldid, $watchers, $pageStatus = 'changed' ) {
+               # we use $wgPasswordSender as sender's address
+               global $wgEnotifWatchlist;
+               global $wgEnotifMinorEdits, $wgEnotifUserTalk;
+
+               wfProfileIn( __METHOD__ );
+
+               # The following code is only run, if several conditions are met:
+               # 1. EmailNotification for pages (other than user_talk pages) must be enabled
+               # 2. minor edits (changes) are only regarded if the global flag indicates so
+
+               $isUserTalkPage = ( $title->getNamespace() == NS_USER_TALK );
+
+               $this->title = $title;
+               $this->timestamp = $timestamp;
+               $this->summary = $summary;
+               $this->minorEdit = $minorEdit;
+               $this->oldid = $oldid;
+               $this->editor = $editor;
+               $this->composed_common = false;
+               $this->pageStatus = $pageStatus;
+
+               $formattedPageStatus = array( 'deleted', 'created', 'moved', 'restored', 'changed' );
+
+               wfRunHooks( 'UpdateUserMailerFormattedPageStatus', array( &$formattedPageStatus ) );
+               if ( !in_array( $this->pageStatus, $formattedPageStatus ) ) {
+                       wfProfileOut( __METHOD__ );
+                       throw new MWException( 'Not a valid page status!' );
+               }
+
+               $userTalkId = false;
+
+               if ( !$minorEdit || ( $wgEnotifMinorEdits && !$editor->isAllowed( 'nominornewtalk' ) ) ) {
+                       if ( $wgEnotifUserTalk
+                               && $isUserTalkPage
+                               && $this->canSendUserTalkEmail( $editor, $title, $minorEdit )
+                       ) {
+                               $targetUser = User::newFromName( $title->getText() );
+                               $this->compose( $targetUser );
+                               $userTalkId = $targetUser->getId();
+                       }
+
+                       if ( $wgEnotifWatchlist ) {
+                               // Send updates to watchers other than the current editor
+                               $userArray = UserArray::newFromIDs( $watchers );
+                               foreach ( $userArray as $watchingUser ) {
+                                       if ( $watchingUser->getOption( 'enotifwatchlistpages' )
+                                               && ( !$minorEdit || $watchingUser->getOption( 'enotifminoredits' ) )
+                                               && $watchingUser->isEmailConfirmed()
+                                               && $watchingUser->getID() != $userTalkId
+                                       ) {
+                                               if ( wfRunHooks( 'SendWatchlistEmailNotification', array( $watchingUser, $title, $this ) ) ) {
+                                                       $this->compose( $watchingUser );
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               global $wgUsersNotifiedOnAllChanges;
+               foreach ( $wgUsersNotifiedOnAllChanges as $name ) {
+                       if ( $editor->getName() == $name ) {
+                               // No point notifying the user that actually made the change!
+                               continue;
+                       }
+                       $user = User::newFromName( $name );
+                       $this->compose( $user );
+               }
+
+               $this->sendMails();
+               wfProfileOut( __METHOD__ );
+       }
+
+       /**
+        * @param User $editor
+        * @param Title $title
+        * @param bool $minorEdit
+        * @return bool
+        */
+       private function canSendUserTalkEmail( $editor, $title, $minorEdit ) {
+               global $wgEnotifUserTalk;
+               $isUserTalkPage = ( $title->getNamespace() == NS_USER_TALK );
+
+               if ( $wgEnotifUserTalk && $isUserTalkPage ) {
+                       $targetUser = User::newFromName( $title->getText() );
+
+                       if ( !$targetUser || $targetUser->isAnon() ) {
+                               wfDebug( __METHOD__ . ": user talk page edited, but user does not exist\n" );
+                       } elseif ( $targetUser->getId() == $editor->getId() ) {
+                               wfDebug( __METHOD__ . ": user edited their own talk page, no notification sent\n" );
+                       } elseif ( $targetUser->getOption( 'enotifusertalkpages' )
+                               && ( !$minorEdit || $targetUser->getOption( 'enotifminoredits' ) )
+                       ) {
+                               if ( !$targetUser->isEmailConfirmed() ) {
+                                       wfDebug( __METHOD__ . ": talk page owner doesn't have validated email\n" );
+                               } elseif ( !wfRunHooks( 'AbortTalkPageEmailNotification', array( $targetUser, $title ) ) ) {
+                                       wfDebug( __METHOD__ . ": talk page update notification is aborted for this user\n" );
+                               } else {
+                                       wfDebug( __METHOD__ . ": sending talk page update notification\n" );
+                                       return true;
+                               }
+                       } else {
+                               wfDebug( __METHOD__ . ": talk page owner doesn't want notifications\n" );
+                       }
+               }
+               return false;
+       }
+
+       /**
+        * Generate the generic "this page has been changed" e-mail text.
+        */
+       private function composeCommonMailtext() {
+               global $wgPasswordSender, $wgNoReplyAddress;
+               global $wgEnotifFromEditor, $wgEnotifRevealEditorAddress;
+               global $wgEnotifImpersonal, $wgEnotifUseRealName;
+
+               $this->composed_common = true;
+
+               # You as the WikiAdmin and Sysops can make use of plenty of
+               # named variables when composing your notification emails while
+               # simply editing the Meta pages
+
+               $keys = array();
+               $postTransformKeys = array();
+               $pageTitleUrl = $this->title->getCanonicalURL();
+               $pageTitle = $this->title->getPrefixedText();
+
+               if ( $this->oldid ) {
+                       // Always show a link to the diff which triggered the mail. See bug 32210.
+                       $keys['$NEWPAGE'] = "\n\n" . wfMessage( 'enotif_lastdiff',
+                                       $this->title->getCanonicalURL( array( 'diff' => 'next', 'oldid' => $this->oldid ) ) )
+                                       ->inContentLanguage()->text();
+
+                       if ( !$wgEnotifImpersonal ) {
+                               // For personal mail, also show a link to the diff of all changes
+                               // since last visited.
+                               $keys['$NEWPAGE'] .= "\n\n" . wfMessage( 'enotif_lastvisited',
+                                               $this->title->getCanonicalURL( array( 'diff' => '0', 'oldid' => $this->oldid ) ) )
+                                               ->inContentLanguage()->text();
+                       }
+                       $keys['$OLDID'] = $this->oldid;
+                       // Deprecated since MediaWiki 1.21, not used by default. Kept for backwards-compatibility.
+                       $keys['$CHANGEDORCREATED'] = wfMessage( 'changed' )->inContentLanguage()->text();
+               } else {
+                       # clear $OLDID placeholder in the message template
+                       $keys['$OLDID'] = '';
+                       $keys['$NEWPAGE'] = '';
+                       // Deprecated since MediaWiki 1.21, not used by default. Kept for backwards-compatibility.
+                       $keys['$CHANGEDORCREATED'] = wfMessage( 'created' )->inContentLanguage()->text();
+               }
+
+               $keys['$PAGETITLE'] = $this->title->getPrefixedText();
+               $keys['$PAGETITLE_URL'] = $this->title->getCanonicalURL();
+               $keys['$PAGEMINOREDIT'] = $this->minorEdit ?
+                       wfMessage( 'minoredit' )->inContentLanguage()->text() : '';
+               $keys['$UNWATCHURL'] = $this->title->getCanonicalURL( 'action=unwatch' );
+
+               if ( $this->editor->isAnon() ) {
+                       # real anon (user:xxx.xxx.xxx.xxx)
+                       $keys['$PAGEEDITOR'] = wfMessage( 'enotif_anon_editor', $this->editor->getName() )
+                               ->inContentLanguage()->text();
+                       $keys['$PAGEEDITOR_EMAIL'] = wfMessage( 'noemailtitle' )->inContentLanguage()->text();
+
+               } else {
+                       $keys['$PAGEEDITOR'] = $wgEnotifUseRealName && $this->editor->getRealName() !== ''
+                               ? $this->editor->getRealName() : $this->editor->getName();
+                       $emailPage = SpecialPage::getSafeTitleFor( 'Emailuser', $this->editor->getName() );
+                       $keys['$PAGEEDITOR_EMAIL'] = $emailPage->getCanonicalURL();
+               }
+
+               $keys['$PAGEEDITOR_WIKI'] = $this->editor->getUserPage()->getCanonicalURL();
+               $keys['$HELPPAGE'] = wfExpandUrl(
+                       Skin::makeInternalOrExternalUrl( wfMessage( 'helppage' )->inContentLanguage()->text() )
+               );
+
+               # Replace this after transforming the message, bug 35019
+               $postTransformKeys['$PAGESUMMARY'] = $this->summary == '' ? ' - ' : $this->summary;
+
+               // Now build message's subject and body
+
+               // Messages:
+               // enotif_subject_deleted, enotif_subject_created, enotif_subject_moved,
+               // enotif_subject_restored, enotif_subject_changed
+               $this->subject = wfMessage( 'enotif_subject_' . $this->pageStatus )->inContentLanguage()
+                       ->params( $pageTitle, $keys['$PAGEEDITOR'] )->text();
+
+               // Messages:
+               // enotif_body_intro_deleted, enotif_body_intro_created, enotif_body_intro_moved,
+               // enotif_body_intro_restored, enotif_body_intro_changed
+               $keys['$PAGEINTRO'] = wfMessage( 'enotif_body_intro_' . $this->pageStatus )
+                       ->inContentLanguage()->params( $pageTitle, $keys['$PAGEEDITOR'], $pageTitleUrl )
+                       ->text();
+
+               $body = wfMessage( 'enotif_body' )->inContentLanguage()->plain();
+               $body = strtr( $body, $keys );
+               $body = MessageCache::singleton()->transform( $body, false, null, $this->title );
+               $this->body = wordwrap( strtr( $body, $postTransformKeys ), 72 );
+
+               # Reveal the page editor's address as REPLY-TO address only if
+               # the user has not opted-out and the option is enabled at the
+               # global configuration level.
+               $adminAddress = new MailAddress( $wgPasswordSender,
+                       wfMessage( 'emailsender' )->inContentLanguage()->text() );
+               if ( $wgEnotifRevealEditorAddress
+                       && ( $this->editor->getEmail() != '' )
+                       && $this->editor->getOption( 'enotifrevealaddr' )
+               ) {
+                       $editorAddress = MailAddress::newFromUser( $this->editor );
+                       if ( $wgEnotifFromEditor ) {
+                               $this->from = $editorAddress;
+                       } else {
+                               $this->from = $adminAddress;
+                               $this->replyto = $editorAddress;
+                       }
+               } else {
+                       $this->from = $adminAddress;
+                       $this->replyto = new MailAddress( $wgNoReplyAddress );
+               }
+       }
+
+       /**
+        * Compose a mail to a given user and either queue it for sending, or send it now,
+        * depending on settings.
+        *
+        * Call sendMails() to send any mails that were queued.
+        * @param User $user
+        */
+       function compose( $user ) {
+               global $wgEnotifImpersonal;
+
+               if ( !$this->composed_common ) {
+                       $this->composeCommonMailtext();
+               }
+
+               if ( $wgEnotifImpersonal ) {
+                       $this->mailTargets[] = MailAddress::newFromUser( $user );
+               } else {
+                       $this->sendPersonalised( $user );
+               }
+       }
+
+       /**
+        * Send any queued mails
+        */
+       function sendMails() {
+               global $wgEnotifImpersonal;
+               if ( $wgEnotifImpersonal ) {
+                       $this->sendImpersonal( $this->mailTargets );
+               }
+       }
+
+       /**
+        * Does the per-user customizations to a notification e-mail (name,
+        * timestamp in proper timezone, etc) and sends it out.
+        * Returns true if the mail was sent successfully.
+        *
+        * @param User $watchingUser
+        * @return bool
+        * @private
+        */
+       function sendPersonalised( $watchingUser ) {
+               global $wgContLang, $wgEnotifUseRealName;
+               // From the PHP manual:
+               //   Note: The to parameter cannot be an address in the form of
+               //   "Something <someone@example.com>". The mail command will not parse
+               //   this properly while talking with the MTA.
+               $to = MailAddress::newFromUser( $watchingUser );
+
+               # $PAGEEDITDATE is the time and date of the page change
+               # expressed in terms of individual local time of the notification
+               # recipient, i.e. watching user
+               $body = str_replace(
+                       array( '$WATCHINGUSERNAME',
+                               '$PAGEEDITDATE',
+                               '$PAGEEDITTIME' ),
+                       array( $wgEnotifUseRealName && $watchingUser->getRealName() !== ''
+                               ? $watchingUser->getRealName() : $watchingUser->getName(),
+                               $wgContLang->userDate( $this->timestamp, $watchingUser ),
+                               $wgContLang->userTime( $this->timestamp, $watchingUser ) ),
+                       $this->body );
+
+               return UserMailer::send( $to, $this->from, $this->subject, $body, $this->replyto );
+       }
+
+       /**
+        * Same as sendPersonalised but does impersonal mail suitable for bulk
+        * mailing.  Takes an array of MailAddress objects.
+        * @param MailAddress[] $addresses
+        * @return Status|null
+        */
+       function sendImpersonal( $addresses ) {
+               global $wgContLang;
+
+               if ( empty( $addresses ) ) {
+                       return null;
+               }
+
+               $body = str_replace(
+                       array( '$WATCHINGUSERNAME',
+                               '$PAGEEDITDATE',
+                               '$PAGEEDITTIME' ),
+                       array( wfMessage( 'enotif_impersonal_salutation' )->inContentLanguage()->text(),
+                               $wgContLang->date( $this->timestamp, false, false ),
+                               $wgContLang->time( $this->timestamp, false, false ) ),
+                       $this->body );
+
+               return UserMailer::send( $addresses, $this->from, $this->subject, $body, $this->replyto );
+       }
+
+}
diff --git a/includes/mail/MailAddress.php b/includes/mail/MailAddress.php
new file mode 100644 (file)
index 0000000..7a228bd
--- /dev/null
@@ -0,0 +1,91 @@
+<?php
+/**
+ * Classes used to send e-mails
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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 <brion@pobox.com>
+ * @author <mail@tgries.de>
+ * @author Tim Starling
+ * @author Luke Welling lwelling@wikimedia.org
+ */
+
+/**
+ * Stores a single person's name and email address.
+ * These are passed in via the constructor, and will be returned in SMTP
+ * header format when requested.
+ */
+class MailAddress {
+       /**
+        * @param string $address String with an email address, or a User object
+        * @param string $name Human-readable name if a string address is given
+        * @param string $realName Human-readable real name if a string address is given
+        */
+       function __construct( $address, $name = null, $realName = null ) {
+               if ( is_object( $address ) && $address instanceof User ) {
+                       // Old calling format, now deprecated
+                       wfDeprecated( __METHOD__ . ' with a User object', '1.24' );
+                       $this->address = $address->getEmail();
+                       $this->name = $address->getName();
+                       $this->realName = $address->getRealName();
+               } else {
+                       $this->address = strval( $address );
+                       $this->name = strval( $name );
+                       $this->realName = strval( $realName );
+               }
+       }
+
+       /**
+        * Create a new MailAddress object for the given user
+        *
+        * @since 1.24
+        * @param User $user
+        * @return MailAddress
+        */
+       public static function newFromUser( User $user ) {
+               return new MailAddress( $user->getEmail(), $user->getName(), $user->getRealName() );
+       }
+
+       /**
+        * Return formatted and quoted address to insert into SMTP headers
+        * @return string
+        */
+       function toString() {
+               # PHP's mail() implementation under Windows is somewhat shite, and
+               # can't handle "Joe Bloggs <joe@bloggs.com>" format email addresses,
+               # so don't bother generating them
+               if ( $this->address ) {
+                       if ( $this->name != '' && !wfIsWindows() ) {
+                               global $wgEnotifUseRealName;
+                               $name = ( $wgEnotifUseRealName && $this->realName !== '' ) ? $this->realName : $this->name;
+                               $quoted = UserMailer::quotedPrintable( $name );
+                               if ( strpos( $quoted, '.' ) !== false || strpos( $quoted, ',' ) !== false ) {
+                                       $quoted = '"' . $quoted . '"';
+                               }
+                               return "$quoted <{$this->address}>";
+                       } else {
+                               return $this->address;
+                       }
+               } else {
+                       return "";
+               }
+       }
+
+       function __toString() {
+               return $this->toString();
+       }
+}
diff --git a/includes/mail/UserMailer.php b/includes/mail/UserMailer.php
new file mode 100644 (file)
index 0000000..b5a57a8
--- /dev/null
@@ -0,0 +1,425 @@
+<?php
+/**
+ * Classes used to send e-mails
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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 <brion@pobox.com>
+ * @author <mail@tgries.de>
+ * @author Tim Starling
+ * @author Luke Welling lwelling@wikimedia.org
+ */
+
+/**
+ * Collection of static functions for sending mail
+ */
+class UserMailer {
+       private static $mErrorString;
+
+       /**
+        * Send mail using a PEAR mailer
+        *
+        * @param UserMailer $mailer
+        * @param string $dest
+        * @param string $headers
+        * @param string $body
+        *
+        * @return Status
+        */
+       protected static function sendWithPear( $mailer, $dest, $headers, $body ) {
+               $mailResult = $mailer->send( $dest, $headers, $body );
+
+               # Based on the result return an error string,
+               if ( PEAR::isError( $mailResult ) ) {
+                       wfDebug( "PEAR::Mail failed: " . $mailResult->getMessage() . "\n" );
+                       return Status::newFatal( 'pear-mail-error', $mailResult->getMessage() );
+               } else {
+                       return Status::newGood();
+               }
+       }
+
+       /**
+        * Creates a single string from an associative array
+        *
+        * @param array $headers Associative Array: keys are header field names,
+        *                 values are ... values.
+        * @param string $endl The end of line character.  Defaults to "\n"
+        *
+        * Note RFC2822 says newlines must be CRLF (\r\n)
+        * but php mail naively "corrects" it and requires \n for the "correction" to work
+        *
+        * @return string
+        */
+       static function arrayToHeaderString( $headers, $endl = "\n" ) {
+               $strings = array();
+               foreach ( $headers as $name => $value ) {
+                       // Prevent header injection by stripping newlines from value
+                       $value = self::sanitizeHeaderValue( $value );
+                       $strings[] = "$name: $value";
+               }
+               return implode( $endl, $strings );
+       }
+
+       /**
+        * Create a value suitable for the MessageId Header
+        *
+        * @return string
+        */
+       static function makeMsgId() {
+               global $wgSMTP, $wgServer;
+
+               $msgid = uniqid( wfWikiID() . ".", true ); /* true required for cygwin */
+               if ( is_array( $wgSMTP ) && isset( $wgSMTP['IDHost'] ) && $wgSMTP['IDHost'] ) {
+                       $domain = $wgSMTP['IDHost'];
+               } else {
+                       $url = wfParseUrl( $wgServer );
+                       $domain = $url['host'];
+               }
+               return "<$msgid@$domain>";
+       }
+
+       /**
+        * This function will perform a direct (authenticated) login to
+        * a SMTP Server to use for mail relaying if 'wgSMTP' specifies an
+        * array of parameters. It requires PEAR:Mail to do that.
+        * Otherwise it just uses the standard PHP 'mail' function.
+        *
+        * @param MailAddress|MailAddress[] $to Recipient's email (or an array of them)
+        * @param MailAddress $from Sender's email
+        * @param string $subject Email's subject.
+        * @param string $body Email's text or Array of two strings to be the text and html bodies
+        * @param MailAddress $replyto Optional reply-to email (default: null).
+        * @param string $contentType Optional custom Content-Type (default: text/plain; charset=UTF-8)
+        * @throws MWException
+        * @throws Exception
+        * @return Status
+        */
+       public static function send( $to, $from, $subject, $body, $replyto = null,
+               $contentType = 'text/plain; charset=UTF-8'
+       ) {
+               global $wgSMTP, $wgEnotifMaxRecips, $wgAdditionalMailParams, $wgAllowHTMLEmail;
+               $mime = null;
+               if ( !is_array( $to ) ) {
+                       $to = array( $to );
+               }
+
+               // mail body must have some content
+               $minBodyLen = 10;
+               // arbitrary but longer than Array or Object to detect casting error
+
+               // body must either be a string or an array with text and body
+               if (
+                       !(
+                               !is_array( $body ) &&
+                               strlen( $body ) >= $minBodyLen
+                       )
+                       &&
+                       !(
+                               is_array( $body ) &&
+                               isset( $body['text'] ) &&
+                               isset( $body['html'] ) &&
+                               strlen( $body['text'] ) >= $minBodyLen &&
+                               strlen( $body['html'] ) >= $minBodyLen
+                       )
+               ) {
+                       // if it is neither we have a problem
+                       return Status::newFatal( 'user-mail-no-body' );
+               }
+
+               if ( !$wgAllowHTMLEmail && is_array( $body ) ) {
+                       // HTML not wanted.  Dump it.
+                       $body = $body['text'];
+               }
+
+               wfDebug( __METHOD__ . ': sending mail to ' . implode( ', ', $to ) . "\n" );
+
+               # Make sure we have at least one address
+               $has_address = false;
+               foreach ( $to as $u ) {
+                       if ( $u->address ) {
+                               $has_address = true;
+                               break;
+                       }
+               }
+               if ( !$has_address ) {
+                       return Status::newFatal( 'user-mail-no-addy' );
+               }
+
+               # Forge email headers
+               # -------------------
+               #
+               # WARNING
+               #
+               # DO NOT add To: or Subject: headers at this step. They need to be
+               # handled differently depending upon the mailer we are going to use.
+               #
+               # To:
+               #  PHP mail() first argument is the mail receiver. The argument is
+               #  used as a recipient destination and as a To header.
+               #
+               #  PEAR mailer has a recipient argument which is only used to
+               #  send the mail. If no To header is given, PEAR will set it to
+               #  to 'undisclosed-recipients:'.
+               #
+               #  NOTE: To: is for presentation, the actual recipient is specified
+               #  by the mailer using the Rcpt-To: header.
+               #
+               # Subject:
+               #  PHP mail() second argument to pass the subject, passing a Subject
+               #  as an additional header will result in a duplicate header.
+               #
+               #  PEAR mailer should be passed a Subject header.
+               #
+               # -- hashar 20120218
+
+               $headers['From'] = $from->toString();
+               $returnPath = $from->address;
+               $extraParams = $wgAdditionalMailParams;
+
+               // Hook to generate custom VERP address for 'Return-Path'
+               wfRunHooks( 'UserMailerChangeReturnPath', array( $to, &$returnPath ) );
+               # Add the envelope sender address using the -f command line option when PHP mail() is used.
+               # Will default to the $from->address when the UserMailerChangeReturnPath hook fails and the
+               # generated VERP address when the hook runs effectively.
+               $extraParams .= ' -f ' . $returnPath;
+
+               $headers['Return-Path'] = $returnPath;
+
+               if ( $replyto ) {
+                       $headers['Reply-To'] = $replyto->toString();
+               }
+
+               $headers['Date'] = MWTimestamp::getLocalInstance()->format( 'r' );
+               $headers['Message-ID'] = self::makeMsgId();
+               $headers['X-Mailer'] = 'MediaWiki mailer';
+
+               # Line endings need to be different on Unix and Windows due to
+               # the bug described at http://trac.wordpress.org/ticket/2603
+               if ( wfIsWindows() ) {
+                       $endl = "\r\n";
+               } else {
+                       $endl = "\n";
+               }
+
+               if ( is_array( $body ) ) {
+                       // we are sending a multipart message
+                       wfDebug( "Assembling multipart mime email\n" );
+                       if ( !stream_resolve_include_path( 'Mail/mime.php' ) ) {
+                               wfDebug( "PEAR Mail_Mime package is not installed. Falling back to text email.\n" );
+                               // remove the html body for text email fall back
+                               $body = $body['text'];
+                       } else {
+                               require_once 'Mail/mime.php';
+                               if ( wfIsWindows() ) {
+                                       $body['text'] = str_replace( "\n", "\r\n", $body['text'] );
+                                       $body['html'] = str_replace( "\n", "\r\n", $body['html'] );
+                               }
+                               $mime = new Mail_mime( array(
+                                       'eol' => $endl,
+                                       'text_charset' => 'UTF-8',
+                                       'html_charset' => 'UTF-8'
+                               ) );
+                               $mime->setTXTBody( $body['text'] );
+                               $mime->setHTMLBody( $body['html'] );
+                               $body = $mime->get(); // must call get() before headers()
+                               $headers = $mime->headers( $headers );
+                       }
+               }
+               if ( $mime === null ) {
+                       // sending text only, either deliberately or as a fallback
+                       if ( wfIsWindows() ) {
+                               $body = str_replace( "\n", "\r\n", $body );
+                       }
+                       $headers['MIME-Version'] = '1.0';
+                       $headers['Content-type'] = ( is_null( $contentType ) ?
+                               'text/plain; charset=UTF-8' : $contentType );
+                       $headers['Content-transfer-encoding'] = '8bit';
+               }
+
+               $ret = wfRunHooks( 'AlternateUserMailer', array( $headers, $to, $from, $subject, $body ) );
+               if ( $ret === false ) {
+                       // the hook implementation will return false to skip regular mail sending
+                       return Status::newGood();
+               } elseif ( $ret !== true ) {
+                       // the hook implementation will return a string to pass an error message
+                       return Status::newFatal( 'php-mail-error', $ret );
+               }
+
+               if ( is_array( $wgSMTP ) ) {
+                       #
+                       # PEAR MAILER
+                       #
+
+                       if ( !stream_resolve_include_path( 'Mail.php' ) ) {
+                               throw new MWException( 'PEAR mail package is not installed' );
+                       }
+                       require_once 'Mail.php';
+
+                       wfSuppressWarnings();
+
+                       // Create the mail object using the Mail::factory method
+                       $mail_object =& Mail::factory( 'smtp', $wgSMTP );
+                       if ( PEAR::isError( $mail_object ) ) {
+                               wfDebug( "PEAR::Mail factory failed: " . $mail_object->getMessage() . "\n" );
+                               wfRestoreWarnings();
+                               return Status::newFatal( 'pear-mail-error', $mail_object->getMessage() );
+                       }
+
+                       wfDebug( "Sending mail via PEAR::Mail\n" );
+
+                       $headers['Subject'] = self::quotedPrintable( $subject );
+
+                       # When sending only to one recipient, shows it its email using To:
+                       if ( count( $to ) == 1 ) {
+                               $headers['To'] = $to[0]->toString();
+                       }
+
+                       # Split jobs since SMTP servers tends to limit the maximum
+                       # number of possible recipients.
+                       $chunks = array_chunk( $to, $wgEnotifMaxRecips );
+                       foreach ( $chunks as $chunk ) {
+                               $status = self::sendWithPear( $mail_object, $chunk, $headers, $body );
+                               # FIXME : some chunks might be sent while others are not!
+                               if ( !$status->isOK() ) {
+                                       wfRestoreWarnings();
+                                       return $status;
+                               }
+                       }
+                       wfRestoreWarnings();
+                       return Status::newGood();
+               } else {
+                       #
+                       # PHP mail()
+                       #
+                       if ( count( $to ) > 1 ) {
+                               $headers['To'] = 'undisclosed-recipients:;';
+                       }
+                       $headers = self::arrayToHeaderString( $headers, $endl );
+
+                       wfDebug( "Sending mail via internal mail() function\n" );
+
+                       self::$mErrorString = '';
+                       $html_errors = ini_get( 'html_errors' );
+                       ini_set( 'html_errors', '0' );
+                       set_error_handler( 'UserMailer::errorHandler' );
+
+                       try {
+                               $safeMode = wfIniGetBool( 'safe_mode' );
+
+                               foreach ( $to as $recip ) {
+                                       if ( $safeMode ) {
+                                               $sent = mail( $recip, self::quotedPrintable( $subject ), $body, $headers );
+                                       } else {
+                                               $sent = mail(
+                                                       $recip,
+                                                       self::quotedPrintable( $subject ),
+                                                       $body,
+                                                       $headers,
+                                                       $extraParams
+                                               );
+                                       }
+                               }
+                       } catch ( Exception $e ) {
+                               restore_error_handler();
+                               throw $e;
+                       }
+
+                       restore_error_handler();
+                       ini_set( 'html_errors', $html_errors );
+
+                       if ( self::$mErrorString ) {
+                               wfDebug( "Error sending mail: " . self::$mErrorString . "\n" );
+                               return Status::newFatal( 'php-mail-error', self::$mErrorString );
+                       } elseif ( !$sent ) {
+                               // mail function only tells if there's an error
+                               wfDebug( "Unknown error sending mail\n" );
+                               return Status::newFatal( 'php-mail-error-unknown' );
+                       } else {
+                               return Status::newGood();
+                       }
+               }
+       }
+
+       /**
+        * Set the mail error message in self::$mErrorString
+        *
+        * @param int $code Error number
+        * @param string $string Error message
+        */
+       static function errorHandler( $code, $string ) {
+               self::$mErrorString = preg_replace( '/^mail\(\)(\s*\[.*?\])?: /', '', $string );
+       }
+
+       /**
+        * Strips bad characters from a header value to prevent PHP mail header injection attacks
+        * @param string $val String to be santizied
+        * @return string
+        */
+       public static function sanitizeHeaderValue( $val ) {
+               return strtr( $val, array( "\r" => '', "\n" => '' ) );
+       }
+
+       /**
+        * Converts a string into a valid RFC 822 "phrase", such as is used for the sender name
+        * @param string $phrase
+        * @return string
+        */
+       public static function rfc822Phrase( $phrase ) {
+               // Remove line breaks
+               $phrase = self::sanitizeHeaderValue( $phrase );
+               // Remove quotes
+               $phrase = str_replace( '"', '', $phrase );
+               return '"' . $phrase . '"';
+       }
+
+       /**
+        * Converts a string into quoted-printable format
+        * @since 1.17
+        *
+        * From PHP5.3 there is a built in function quoted_printable_encode()
+        * This method does not duplicate that.
+        * This method is doing Q encoding inside encoded-words as defined by RFC 2047
+        * This is for email headers.
+        * The built in quoted_printable_encode() is for email bodies
+        * @param string $string
+        * @param string $charset
+        * @return string
+        */
+       public static function quotedPrintable( $string, $charset = '' ) {
+               # Probably incomplete; see RFC 2045
+               if ( empty( $charset ) ) {
+                       $charset = 'UTF-8';
+               }
+               $charset = strtoupper( $charset );
+               $charset = str_replace( 'ISO-8859', 'ISO8859', $charset ); // ?
+
+               $illegal = '\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff=';
+               $replace = $illegal . '\t ?_';
+               if ( !preg_match( "/[$illegal]/", $string ) ) {
+                       return $string;
+               }
+               $out = "=?$charset?Q?";
+               $out .= preg_replace_callback( "/([$replace])/",
+                       array( __CLASS__, 'quotedPrintableCallback' ), $string );
+               $out .= '?=';
+               return $out;
+       }
+
+       protected static function quotedPrintableCallback( $matches ) {
+               return sprintf( "=%02X", ord( $matches[1] ) );
+       }
+}
index b2802dd..e81b37d 100644 (file)
  *
  * @ingroup Media
  */
-class BitmapHandler extends ImageHandler {
-       /**
-        * @param File $image
-        * @param array $params Transform parameters. Entries with the keys 'width'
-        * and 'height' are the respective screen width and height, while the keys
-        * 'physicalWidth' and 'physicalHeight' indicate the thumbnail dimensions.
-        * @return bool
-        */
-       function normaliseParams( $image, &$params ) {
-               if ( !parent::normaliseParams( $image, $params ) ) {
-                       return false;
-               }
-
-               # Obtain the source, pre-rotation dimensions
-               $srcWidth = $image->getWidth( $params['page'] );
-               $srcHeight = $image->getHeight( $params['page'] );
-
-               # Don't make an image bigger than the source
-               if ( $params['physicalWidth'] >= $srcWidth ) {
-                       $params['physicalWidth'] = $srcWidth;
-                       $params['physicalHeight'] = $srcHeight;
-
-                       # Skip scaling limit checks if no scaling is required
-                       # due to requested size being bigger than source.
-                       if ( !$image->mustRender() ) {
-                               return true;
-                       }
-               }
-
-               # Check if the file is smaller than the maximum image area for thumbnailing
-               $checkImageAreaHookResult = null;
-               wfRunHooks(
-                       'BitmapHandlerCheckImageArea',
-                       array( $image, &$params, &$checkImageAreaHookResult )
-               );
-
-               if ( is_null( $checkImageAreaHookResult ) ) {
-                       global $wgMaxImageArea;
-
-                       if ( $srcWidth * $srcHeight > $wgMaxImageArea
-                               && !( $image->getMimeType() == 'image/jpeg'
-                                       && self::getScalerType( false, false ) == 'im' )
-                       ) {
-                               # Only ImageMagick can efficiently downsize jpg images without loading
-                               # the entire file in memory
-                               return false;
-                       }
-               } else {
-                       return $checkImageAreaHookResult;
-               }
-
-               return true;
-       }
-
-       /**
-        * Extracts the width/height if the image will be scaled before rotating
-        *
-        * This will match the physical size/aspect ratio of the original image
-        * prior to application of the rotation -- so for a portrait image that's
-        * stored as raw landscape with 90-degress rotation, the resulting size
-        * will be wider than it is tall.
-        *
-        * @param array $params Parameters as returned by normaliseParams
-        * @param int $rotation The rotation angle that will be applied
-        * @return array ($width, $height) array
-        */
-       public function extractPreRotationDimensions( $params, $rotation ) {
-               if ( $rotation == 90 || $rotation == 270 ) {
-                       # We'll resize before rotation, so swap the dimensions again
-                       $width = $params['physicalHeight'];
-                       $height = $params['physicalWidth'];
-               } else {
-                       $width = $params['physicalWidth'];
-                       $height = $params['physicalHeight'];
-               }
-
-               return array( $width, $height );
-       }
-
-       /**
-        * @param File $image
-        * @param string $dstPath
-        * @param string $dstUrl
-        * @param array $params
-        * @param int $flags
-        * @return MediaTransformError|ThumbnailImage|TransformParameterError
-        */
-       function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
-               if ( !$this->normaliseParams( $image, $params ) ) {
-                       return new TransformParameterError( $params );
-               }
-
-               # Create a parameter array to pass to the scaler
-               $scalerParams = array(
-                       # The size to which the image will be resized
-                       'physicalWidth' => $params['physicalWidth'],
-                       'physicalHeight' => $params['physicalHeight'],
-                       'physicalDimensions' => "{$params['physicalWidth']}x{$params['physicalHeight']}",
-                       # The size of the image on the page
-                       'clientWidth' => $params['width'],
-                       'clientHeight' => $params['height'],
-                       # Comment as will be added to the Exif of the thumbnail
-                       'comment' => isset( $params['descriptionUrl'] )
-                               ? "File source: {$params['descriptionUrl']}"
-                               : '',
-                       # Properties of the original image
-                       'srcWidth' => $image->getWidth(),
-                       'srcHeight' => $image->getHeight(),
-                       'mimeType' => $image->getMimeType(),
-                       'dstPath' => $dstPath,
-                       'dstUrl' => $dstUrl,
-               );
-
-               if ( isset( $params['quality'] ) && $params['quality'] === 'low' ) {
-                       $scalerParams['quality'] = 30;
-               }
-
-               # Determine scaler type
-               $scaler = self::getScalerType( $dstPath );
-
-               wfDebug( __METHOD__ . ": creating {$scalerParams['physicalDimensions']} " .
-                       "thumbnail at $dstPath using scaler $scaler\n" );
-
-               if ( !$image->mustRender() &&
-                       $scalerParams['physicalWidth'] == $scalerParams['srcWidth']
-                       && $scalerParams['physicalHeight'] == $scalerParams['srcHeight']
-                       && !isset( $scalerParams['quality'] )
-               ) {
-
-                       # normaliseParams (or the user) wants us to return the unscaled image
-                       wfDebug( __METHOD__ . ": returning unscaled image\n" );
-
-                       return $this->getClientScalingThumbnailImage( $image, $scalerParams );
-               }
-
-               if ( $scaler == 'client' ) {
-                       # Client-side image scaling, use the source URL
-                       # Using the destination URL in a TRANSFORM_LATER request would be incorrect
-                       return $this->getClientScalingThumbnailImage( $image, $scalerParams );
-               }
-
-               if ( $flags & self::TRANSFORM_LATER ) {
-                       wfDebug( __METHOD__ . ": Transforming later per flags.\n" );
-                       $newParams = array(
-                               'width' => $scalerParams['clientWidth'],
-                               'height' => $scalerParams['clientHeight']
-                       );
-                       if ( isset( $params['quality'] ) ) {
-                               $newParams['quality'] = $params['quality'];
-                       }
-                       return new ThumbnailImage( $image, $dstUrl, false, $newParams );
-               }
-
-               # Try to make a target path for the thumbnail
-               if ( !wfMkdirParents( dirname( $dstPath ), null, __METHOD__ ) ) {
-                       wfDebug( __METHOD__ . ": Unable to create thumbnail destination " .
-                               "directory, falling back to client scaling\n" );
-
-                       return $this->getClientScalingThumbnailImage( $image, $scalerParams );
-               }
-
-               # Transform functions and binaries need a FS source file
-               $thumbnailSource = $image->getThumbnailSource( $params );
-
-               $scalerParams['srcPath'] = $thumbnailSource['path'];
-               $scalerParams['srcWidth'] = $thumbnailSource['width'];
-               $scalerParams['srcHeight'] = $thumbnailSource['height'];
-
-               if ( $scalerParams['srcPath'] === false ) { // Failed to get local copy
-                       wfDebugLog( 'thumbnail',
-                               sprintf( 'Thumbnail failed on %s: could not get local copy of "%s"',
-                                       wfHostname(), $image->getName() ) );
-
-                       return new MediaTransformError( 'thumbnail_error',
-                               $scalerParams['clientWidth'], $scalerParams['clientHeight'],
-                               wfMessage( 'filemissing' )->text()
-                       );
-               }
-
-               # Try a hook
-               $mto = null;
-               wfRunHooks( 'BitmapHandlerTransform', array( $this, $image, &$scalerParams, &$mto ) );
-               if ( !is_null( $mto ) ) {
-                       wfDebug( __METHOD__ . ": Hook to BitmapHandlerTransform created an mto\n" );
-                       $scaler = 'hookaborted';
-               }
-
-               switch ( $scaler ) {
-                       case 'hookaborted':
-                               # Handled by the hook above
-                               /** @var MediaTransformOutput $mto */
-                               $err = $mto->isError() ? $mto : false;
-                               break;
-                       case 'im':
-                               $err = $this->transformImageMagick( $image, $scalerParams );
-                               break;
-                       case 'custom':
-                               $err = $this->transformCustom( $image, $scalerParams );
-                               break;
-                       case 'imext':
-                               $err = $this->transformImageMagickExt( $image, $scalerParams );
-                               break;
-                       case 'gd':
-                       default:
-                               $err = $this->transformGd( $image, $scalerParams );
-                               break;
-               }
-
-               # Remove the file if a zero-byte thumbnail was created, or if there was an error
-               $removed = $this->removeBadFile( $dstPath, (bool)$err );
-               if ( $err ) {
-                       # transform returned MediaTransforError
-                       return $err;
-               } elseif ( $removed ) {
-                       # Thumbnail was zero-byte and had to be removed
-                       return new MediaTransformError( 'thumbnail_error',
-                               $scalerParams['clientWidth'], $scalerParams['clientHeight'],
-                               wfMessage( 'unknown-error' )->text()
-                       );
-               } elseif ( $mto ) {
-                       return $mto;
-               } else {
-                       $newParams = array(
-                               'width' => $scalerParams['clientWidth'],
-                               'height' => $scalerParams['clientHeight']
-                       );
-                       if ( isset( $params['quality'] ) ) {
-                               $newParams['quality'] = $params['quality'];
-                       }
-                       return new ThumbnailImage( $image, $dstUrl, $dstPath, $newParams );
-               }
-       }
+class BitmapHandler extends TransformationalImageHandler {
 
        /**
         * Returns which scaler type should be used. Creates parent directories
@@ -265,9 +34,9 @@ class BitmapHandler extends ImageHandler {
         *
         * @param string $dstPath
         * @param bool $checkDstPath
-        * @return string One of client, im, custom, gd, imext
+        * @return string|Callable One of client, im, custom, gd, imext or an array( object, method )
         */
-       protected static function getScalerType( $dstPath, $checkDstPath = true ) {
+       protected function getScalerType( $dstPath, $checkDstPath = true ) {
                global $wgUseImageResize, $wgUseImageMagick, $wgCustomConvertCommand;
 
                if ( !$dstPath && $checkDstPath ) {
@@ -290,25 +59,6 @@ class BitmapHandler extends ImageHandler {
                return $scaler;
        }
 
-       /**
-        * Get a ThumbnailImage that respresents an image that will be scaled
-        * client side
-        *
-        * @param File $image File associated with this thumbnail
-        * @param array $scalerParams Array with scaler params
-        * @return ThumbnailImage
-        *
-        * @todo FIXME: No rotation support
-        */
-       protected function getClientScalingThumbnailImage( $image, $scalerParams ) {
-               $params = array(
-                       'width' => $scalerParams['clientWidth'],
-                       'height' => $scalerParams['clientHeight']
-               );
-
-               return new ThumbnailImage( $image, $image->getURL(), null, $params );
-       }
-
        /**
         * Transform an image using ImageMagick
         *
@@ -544,18 +294,6 @@ class BitmapHandler extends ImageHandler {
                return false; # No error
        }
 
-       /**
-        * Get a MediaTransformError with error 'thumbnail_error'
-        *
-        * @param array $params Parameter array as passed to the transform* functions
-        * @param string $errMsg Error message
-        * @return MediaTransformError
-        */
-       public function getMediaTransformError( $params, $errMsg ) {
-               return new MediaTransformError( 'thumbnail_error', $params['clientWidth'],
-                       $params['clientHeight'], $errMsg );
-       }
-
        /**
         * Transform an image using the built in GD library
         *
@@ -651,131 +389,8 @@ class BitmapHandler extends ImageHandler {
        }
 
        /**
-        * Escape a string for ImageMagick's property input (e.g. -set -comment)
-        * See InterpretImageProperties() in magick/property.c
-        * @param string $s
-        * @return string
-        */
-       function escapeMagickProperty( $s ) {
-               // Double the backslashes
-               $s = str_replace( '\\', '\\\\', $s );
-               // Double the percents
-               $s = str_replace( '%', '%%', $s );
-               // Escape initial - or @
-               if ( strlen( $s ) > 0 && ( $s[0] === '-' || $s[0] === '@' ) ) {
-                       $s = '\\' . $s;
-               }
-
-               return $s;
-       }
-
-       /**
-        * Escape a string for ImageMagick's input filenames. See ExpandFilenames()
-        * and GetPathComponent() in magick/utility.c.
-        *
-        * This won't work with an initial ~ or @, so input files should be prefixed
-        * with the directory name.
-        *
-        * Glob character unescaping is broken in ImageMagick before 6.6.1-5, but
-        * it's broken in a way that doesn't involve trying to convert every file
-        * in a directory, so we're better off escaping and waiting for the bugfix
-        * to filter down to users.
-        *
-        * @param string $path The file path
-        * @param bool|string $scene The scene specification, or false if there is none
-        * @throws MWException
-        * @return string
-        */
-       function escapeMagickInput( $path, $scene = false ) {
-               # Die on initial metacharacters (caller should prepend path)
-               $firstChar = substr( $path, 0, 1 );
-               if ( $firstChar === '~' || $firstChar === '@' ) {
-                       throw new MWException( __METHOD__ . ': cannot escape this path name' );
-               }
-
-               # Escape glob chars
-               $path = preg_replace( '/[*?\[\]{}]/', '\\\\\0', $path );
-
-               return $this->escapeMagickPath( $path, $scene );
-       }
-
-       /**
-        * Escape a string for ImageMagick's output filename. See
-        * InterpretImageFilename() in magick/image.c.
-        * @param string $path The file path
-        * @param bool|string $scene The scene specification, or false if there is none
-        * @return string
-        */
-       function escapeMagickOutput( $path, $scene = false ) {
-               $path = str_replace( '%', '%%', $path );
-
-               return $this->escapeMagickPath( $path, $scene );
-       }
-
-       /**
-        * Armour a string against ImageMagick's GetPathComponent(). This is a
-        * helper function for escapeMagickInput() and escapeMagickOutput().
-        *
-        * @param string $path The file path
-        * @param bool|string $scene The scene specification, or false if there is none
-        * @throws MWException
-        * @return string
-        */
-       protected function escapeMagickPath( $path, $scene = false ) {
-               # Die on format specifiers (other than drive letters). The regex is
-               # meant to match all the formats you get from "convert -list format"
-               if ( preg_match( '/^([a-zA-Z0-9-]+):/', $path, $m ) ) {
-                       if ( wfIsWindows() && is_dir( $m[0] ) ) {
-                               // OK, it's a drive letter
-                               // ImageMagick has a similar exception, see IsMagickConflict()
-                       } else {
-                               throw new MWException( __METHOD__ . ': unexpected colon character in path name' );
-                       }
-               }
-
-               # If there are square brackets, add a do-nothing scene specification
-               # to force a literal interpretation
-               if ( $scene === false ) {
-                       if ( strpos( $path, '[' ) !== false ) {
-                               $path .= '[0--1]';
-                       }
-               } else {
-                       $path .= "[$scene]";
-               }
-
-               return $path;
-       }
-
-       /**
-        * Retrieve the version of the installed ImageMagick
-        * You can use PHPs version_compare() to use this value
-        * Value is cached for one hour.
-        * @return string Representing the IM version.
+        * Callback for transformGd when transforming jpeg images.
         */
-       protected function getMagickVersion() {
-               global $wgMemc;
-
-               $cache = $wgMemc->get( "imagemagick-version" );
-               if ( !$cache ) {
-                       global $wgImageMagickConvertCommand;
-                       $cmd = wfEscapeShellArg( $wgImageMagickConvertCommand ) . ' -version';
-                       wfDebug( __METHOD__ . ": Running convert -version\n" );
-                       $retval = '';
-                       $return = wfShellExec( $cmd, $retval );
-                       $x = preg_match( '/Version: ImageMagick ([0-9]*\.[0-9]*\.[0-9]*)/', $return, $matches );
-                       if ( $x != 1 ) {
-                               wfDebug( __METHOD__ . ": ImageMagick version check failed\n" );
-
-                               return null;
-                       }
-                       $wgMemc->set( "imagemagick-version", $matches[1], 3600 );
-
-                       return $matches[1];
-               }
-
-               return $cache;
-       }
-
        // FIXME: transformImageMagick() & transformImageMagickExt() uses JPEG quality 80, here it's 95?
        static function imageJpegWrapper( $dst_image, $thumbPath, $quality = 95 ) {
                imageinterlace( $dst_image );
@@ -787,8 +402,8 @@ class BitmapHandler extends ImageHandler {
         *
         * @return bool
         */
-       public static function canRotate() {
-               $scaler = self::getScalerType( null, false );
+       public function canRotate() {
+               $scaler = $this->getScalerType( null, false );
                switch ( $scaler ) {
                        case 'im':
                                # ImageMagick supports autorotation
@@ -810,12 +425,12 @@ class BitmapHandler extends ImageHandler {
         * @see $wgEnableAutoRotation
         * @return bool Whether auto rotation is enabled
         */
-       public static function autoRotateEnabled() {
+       public function autoRotateEnabled() {
                global $wgEnableAutoRotation;
 
                if ( $wgEnableAutoRotation === null ) {
-                       // Only enable auto-rotation when the bitmap handler can rotate
-                       $wgEnableAutoRotation = BitmapHandler::canRotate();
+                       // Only enable auto-rotation when we actually can
+                       return $this->canRotate();
                }
 
                return $wgEnableAutoRotation;
@@ -834,7 +449,7 @@ class BitmapHandler extends ImageHandler {
                $rotation = ( $params['rotation'] + $this->getRotation( $file ) ) % 360;
                $scene = false;
 
-               $scaler = self::getScalerType( null, false );
+               $scaler = $this->getScalerType( null, false );
                switch ( $scaler ) {
                        case 'im':
                                $cmd = wfEscapeShellArg( $wgImageMagickConvertCommand ) . " " .
@@ -872,15 +487,4 @@ class BitmapHandler extends ImageHandler {
                                        "$scaler rotation not implemented" );
                }
        }
-
-       /**
-        * Returns whether the file needs to be rendered. Returns true if the
-        * file requires rotation and we are able to rotate it.
-        *
-        * @param File $file
-        * @return bool
-        */
-       public function mustRender( $file ) {
-               return self::canRotate() && $this->getRotation( $file ) != 0;
-       }
 }
index 6ff19c9..596d3e8 100644 (file)
@@ -265,12 +265,16 @@ class DjVuImage {
 
        /**
         * Return an XML string describing the DjVu image
-        * @return string
+        * @return string|bool
         */
        function retrieveMetaData() {
                global $wgDjvuToXML, $wgDjvuDump, $wgDjvuTxt;
                wfProfileIn( __METHOD__ );
 
+               if ( !$this->isValid() ) {
+                       return false;
+               }
+
                if ( isset( $wgDjvuDump ) ) {
                        # djvudump is faster as of version 3.5
                        # http://sourceforge.net/tracker/index.php?func=detail&aid=1704049&group_id=32953&atid=406583
index ae1ff9d..b7657cb 100644 (file)
@@ -173,7 +173,7 @@ class ExifBitmapHandler extends BitmapHandler {
 
                // Don't just call $image->getMetadata(); FSFile::getPropsFromPath() calls us with a bogus object.
                // This may mean we read EXIF data twice on initial upload.
-               if ( BitmapHandler::autoRotateEnabled() ) {
+               if ( $this->autoRotateEnabled() ) {
                        $meta = $this->getMetadata( $image, $path );
                        $rotation = $this->getRotationForExif( $meta );
                } else {
@@ -202,7 +202,7 @@ class ExifBitmapHandler extends BitmapHandler {
         * @return int 0, 90, 180 or 270
         */
        public function getRotation( $file ) {
-               if ( !BitmapHandler::autoRotateEnabled() ) {
+               if ( !$this->autoRotateEnabled() ) {
                        return 0;
                }
 
index 13c2a91..64ca011 100644 (file)
@@ -745,10 +745,10 @@ abstract class MediaHandler {
 
        /**
         * True if the handler can rotate the media
-        * @since 1.21
+        * @since 1.24 non-static. From 1.21-1.23 was static
         * @return bool
         */
-       public static function canRotate() {
+       public function canRotate() {
                return false;
        }
 
index 7b3ddb5..3cf8488 100644 (file)
@@ -174,7 +174,10 @@ class PNGHandler extends BitmapHandler {
                return $wgLang->commaList( $info );
        }
 
+       // PNGs should be easy to support, but it will need some sharpening applied
+       // and another user test to check if the perceived quality change is noticeable
+
        public function supportsBucketing() {
-               return true;
+               return false;
        }
 }
diff --git a/includes/media/TransformationalImageHandler.php b/includes/media/TransformationalImageHandler.php
new file mode 100644 (file)
index 0000000..3e3be3d
--- /dev/null
@@ -0,0 +1,593 @@
+<?php
+/**
+ * Base class for handlers which require transforming images in a
+ * similar way as BitmapHandler does.
+ *
+ * This was split from BitmapHandler on the basis that some extensions
+ * might want to work in a similar way to BitmapHandler, but for
+ * different formats.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Media
+ */
+
+/**
+ * Handler for images that need to be transformed
+ *
+ * @since 1.24
+ * @ingroup Media
+ */
+abstract class TransformationalImageHandler extends ImageHandler {
+       /**
+        * @param File $image
+        * @param array $params Transform parameters. Entries with the keys 'width'
+        * and 'height' are the respective screen width and height, while the keys
+        * 'physicalWidth' and 'physicalHeight' indicate the thumbnail dimensions.
+        * @return bool
+        */
+       function normaliseParams( $image, &$params ) {
+               if ( !parent::normaliseParams( $image, $params ) ) {
+                       return false;
+               }
+
+               # Obtain the source, pre-rotation dimensions
+               $srcWidth = $image->getWidth( $params['page'] );
+               $srcHeight = $image->getHeight( $params['page'] );
+
+               # Don't make an image bigger than the source
+               if ( $params['physicalWidth'] >= $srcWidth ) {
+                       $params['physicalWidth'] = $srcWidth;
+                       $params['physicalHeight'] = $srcHeight;
+
+                       # Skip scaling limit checks if no scaling is required
+                       # due to requested size being bigger than source.
+                       if ( !$image->mustRender() ) {
+                               return true;
+                       }
+               }
+
+               # Check if the file is smaller than the maximum image area for thumbnailing
+               # For historical reasons, hook starts with BitmapHandler
+               $checkImageAreaHookResult = null;
+               wfRunHooks(
+                       'BitmapHandlerCheckImageArea',
+                       array( $image, &$params, &$checkImageAreaHookResult )
+               );
+
+               if ( is_null( $checkImageAreaHookResult ) ) {
+                       global $wgMaxImageArea;
+
+                       if ( $srcWidth * $srcHeight > $wgMaxImageArea
+                               && !( $image->getMimeType() == 'image/jpeg'
+                                       && $this->getScalerType( false, false ) == 'im' )
+                       ) {
+                               # Only ImageMagick can efficiently downsize jpg images without loading
+                               # the entire file in memory
+                               return false;
+                       }
+               } else {
+                       return $checkImageAreaHookResult;
+               }
+
+               return true;
+       }
+
+       /**
+        * Extracts the width/height if the image will be scaled before rotating
+        *
+        * This will match the physical size/aspect ratio of the original image
+        * prior to application of the rotation -- so for a portrait image that's
+        * stored as raw landscape with 90-degress rotation, the resulting size
+        * will be wider than it is tall.
+        *
+        * @param array $params Parameters as returned by normaliseParams
+        * @param int $rotation The rotation angle that will be applied
+        * @return array ($width, $height) array
+        */
+       public function extractPreRotationDimensions( $params, $rotation ) {
+               if ( $rotation == 90 || $rotation == 270 ) {
+                       # We'll resize before rotation, so swap the dimensions again
+                       $width = $params['physicalHeight'];
+                       $height = $params['physicalWidth'];
+               } else {
+                       $width = $params['physicalWidth'];
+                       $height = $params['physicalHeight'];
+               }
+
+               return array( $width, $height );
+       }
+
+       /**
+        * Create a thumbnail.
+        *
+        * This sets up various parameters, and then calls a helper method
+        * based on $this->getScalerType in order to scale the image.
+        *
+        * @param File $image
+        * @param string $dstPath
+        * @param string $dstUrl
+        * @param array $params
+        * @param int $flags
+        * @return MediaTransformError|ThumbnailImage|TransformParameterError
+        */
+       function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
+               if ( !$this->normaliseParams( $image, $params ) ) {
+                       return new TransformParameterError( $params );
+               }
+
+               # Create a parameter array to pass to the scaler
+               $scalerParams = array(
+                       # The size to which the image will be resized
+                       'physicalWidth' => $params['physicalWidth'],
+                       'physicalHeight' => $params['physicalHeight'],
+                       'physicalDimensions' => "{$params['physicalWidth']}x{$params['physicalHeight']}",
+                       # The size of the image on the page
+                       'clientWidth' => $params['width'],
+                       'clientHeight' => $params['height'],
+                       # Comment as will be added to the Exif of the thumbnail
+                       'comment' => isset( $params['descriptionUrl'] )
+                               ? "File source: {$params['descriptionUrl']}"
+                               : '',
+                       # Properties of the original image
+                       'srcWidth' => $image->getWidth(),
+                       'srcHeight' => $image->getHeight(),
+                       'mimeType' => $image->getMimeType(),
+                       'dstPath' => $dstPath,
+                       'dstUrl' => $dstUrl,
+               );
+
+               if ( isset( $params['quality'] ) && $params['quality'] === 'low' ) {
+                       $scalerParams['quality'] = 30;
+               }
+
+               // For subclasses that might be paged.
+               if ( $image->isMultipage() && isset( $params['page'] ) ) {
+                       $scalerParams['page'] = intval( $params['page'] );
+               }
+
+               # Determine scaler type
+               $scaler = $this->getScalerType( $dstPath );
+
+               if ( is_array( $scaler ) ) {
+                       $scalerName = get_class( $scaler[0] );
+               } else {
+                       $scalerName = $scaler;
+               }
+
+               wfDebug( __METHOD__ . ": creating {$scalerParams['physicalDimensions']} " .
+                       "thumbnail at $dstPath using scaler $scalerName\n" );
+
+               if ( !$image->mustRender() &&
+                       $scalerParams['physicalWidth'] == $scalerParams['srcWidth']
+                       && $scalerParams['physicalHeight'] == $scalerParams['srcHeight']
+                       && !isset( $scalerParams['quality'] )
+               ) {
+
+                       # normaliseParams (or the user) wants us to return the unscaled image
+                       wfDebug( __METHOD__ . ": returning unscaled image\n" );
+
+                       return $this->getClientScalingThumbnailImage( $image, $scalerParams );
+               }
+
+               if ( $scaler == 'client' ) {
+                       # Client-side image scaling, use the source URL
+                       # Using the destination URL in a TRANSFORM_LATER request would be incorrect
+                       return $this->getClientScalingThumbnailImage( $image, $scalerParams );
+               }
+
+               if ( $flags & self::TRANSFORM_LATER ) {
+                       wfDebug( __METHOD__ . ": Transforming later per flags.\n" );
+                       $newParams = array(
+                               'width' => $scalerParams['clientWidth'],
+                               'height' => $scalerParams['clientHeight']
+                       );
+                       if ( isset( $params['quality'] ) ) {
+                               $newParams['quality'] = $params['quality'];
+                       }
+                       if ( isset( $params['page'] ) && $params['page'] ) {
+                               $newParams['page'] = $params['page'];
+                       }
+                       return new ThumbnailImage( $image, $dstUrl, false, $newParams );
+               }
+
+               # Try to make a target path for the thumbnail
+               if ( !wfMkdirParents( dirname( $dstPath ), null, __METHOD__ ) ) {
+                       wfDebug( __METHOD__ . ": Unable to create thumbnail destination " .
+                               "directory, falling back to client scaling\n" );
+
+                       return $this->getClientScalingThumbnailImage( $image, $scalerParams );
+               }
+
+               # Transform functions and binaries need a FS source file
+               $thumbnailSource = $this->getThumbnailSource( $image, $params );
+
+               $scalerParams['srcPath'] = $thumbnailSource['path'];
+               $scalerParams['srcWidth'] = $thumbnailSource['width'];
+               $scalerParams['srcHeight'] = $thumbnailSource['height'];
+
+               if ( $scalerParams['srcPath'] === false ) { // Failed to get local copy
+                       wfDebugLog( 'thumbnail',
+                               sprintf( 'Thumbnail failed on %s: could not get local copy of "%s"',
+                                       wfHostname(), $image->getName() ) );
+
+                       return new MediaTransformError( 'thumbnail_error',
+                               $scalerParams['clientWidth'], $scalerParams['clientHeight'],
+                               wfMessage( 'filemissing' )->text()
+                       );
+               }
+
+               # Try a hook. Called "Bitmap" for historical reasons.
+               /** @var $mto MediaTransformOutput */
+               $mto = null;
+               wfRunHooks( 'BitmapHandlerTransform', array( $this, $image, &$scalerParams, &$mto ) );
+               if ( !is_null( $mto ) ) {
+                       wfDebug( __METHOD__ . ": Hook to BitmapHandlerTransform created an mto\n" );
+                       $scaler = 'hookaborted';
+               }
+
+               // $scaler will return a MediaTransformError on failure, or false on success.
+               // If the scaler is succesful, it will have created a thumbnail at the destination
+               // path.
+               if ( is_array( $scaler ) && is_callable( $scaler ) ) {
+                       // Allow subclasses to specify their own rendering methods.
+                       $err = call_user_func( $scaler, $image, $scalerParams );
+               } else {
+                       switch ( $scaler ) {
+                               case 'hookaborted':
+                                       # Handled by the hook above
+                                       $err = $mto->isError() ? $mto : false;
+                                       break;
+                               case 'im':
+                                       $err = $this->transformImageMagick( $image, $scalerParams );
+                                       break;
+                               case 'custom':
+                                       $err = $this->transformCustom( $image, $scalerParams );
+                                       break;
+                               case 'imext':
+                                       $err = $this->transformImageMagickExt( $image, $scalerParams );
+                                       break;
+                               case 'gd':
+                               default:
+                                       $err = $this->transformGd( $image, $scalerParams );
+                                       break;
+                       }
+               }
+
+               # Remove the file if a zero-byte thumbnail was created, or if there was an error
+               $removed = $this->removeBadFile( $dstPath, (bool)$err );
+               if ( $err ) {
+                       # transform returned MediaTransforError
+                       return $err;
+               } elseif ( $removed ) {
+                       # Thumbnail was zero-byte and had to be removed
+                       return new MediaTransformError( 'thumbnail_error',
+                               $scalerParams['clientWidth'], $scalerParams['clientHeight'],
+                               wfMessage( 'unknown-error' )->text()
+                       );
+               } elseif ( $mto ) {
+                       return $mto;
+               } else {
+                       $newParams = array(
+                               'width' => $scalerParams['clientWidth'],
+                               'height' => $scalerParams['clientHeight']
+                       );
+                       if ( isset( $params['quality'] ) ) {
+                               $newParams['quality'] = $params['quality'];
+                       }
+                       if ( isset( $params['page'] ) && $params['page'] ) {
+                               $newParams['page'] = $params['page'];
+                       }
+                       return new ThumbnailImage( $image, $dstUrl, $dstPath, $newParams );
+               }
+       }
+
+       /**
+        * Get the source file for the transform
+        *
+        * @param $file File
+        * @param $params Array
+        * @return Array Array with keys  width, height and path.
+        */
+       protected function getThumbnailSource( $file, $params ) {
+               return $file->getThumbnailSource( $params );
+       }
+
+       /**
+        * Returns what sort of scaler type should be used.
+        *
+        * Values can be one of client, im, custom, gd, imext, or an array
+        * of object, method-name to call that specific method.
+        *
+        * If specifying a custom scaler command with array( Obj, method ),
+        * the method in question should take 2 parameters, a File object,
+        * and a $scalerParams array with various options (See doTransform
+        * for what is in $scalerParams). On error it should return a
+        * MediaTransformError object. On success it should return false,
+        * and simply make sure the thumbnail file is located at
+        * $scalerParams['dstPath'].
+        *
+        * If there is a problem with the output path, it returns "client"
+        * to do client side scaling.
+        *
+        * @param string $dstPath
+        * @param bool $checkDstPath Check that $dstPath is valid
+        * @return string|Callable One of client, im, custom, gd, imext, or a Callable array.
+        */
+       abstract protected function getScalerType( $dstPath, $checkDstPath = true );
+
+       /**
+        * Get a ThumbnailImage that respresents an image that will be scaled
+        * client side
+        *
+        * @param File $image File associated with this thumbnail
+        * @param array $scalerParams Array with scaler params
+        * @return ThumbnailImage
+        *
+        * @todo FIXME: No rotation support
+        */
+       protected function getClientScalingThumbnailImage( $image, $scalerParams ) {
+               $params = array(
+                       'width' => $scalerParams['clientWidth'],
+                       'height' => $scalerParams['clientHeight']
+               );
+
+               return new ThumbnailImage( $image, $image->getURL(), null, $params );
+       }
+
+       /**
+        * Transform an image using ImageMagick
+        *
+        * This is a stub method. The real method is in BitmapHander.
+        *
+        * @param File $image File associated with this thumbnail
+        * @param array $params Array with scaler params
+        *
+        * @return MediaTransformError Error object if error occurred, false (=no error) otherwise
+        */
+       protected function transformImageMagick( $image, $params ) {
+               return $this->getMediaTransformError( $params, "Unimplemented" );
+       }
+
+       /**
+        * Transform an image using the Imagick PHP extension
+        *
+        * This is a stub method. The real method is in BitmapHander.
+        *
+        * @param File $image File associated with this thumbnail
+        * @param array $params Array with scaler params
+        *
+        * @return MediaTransformError Error object if error occurred, false (=no error) otherwise
+        */
+       protected function transformImageMagickExt( $image, $params ) {
+               return $this->getMediaTransformError( $params, "Unimplemented" );
+       }
+
+       /**
+        * Transform an image using a custom command
+        *
+        * This is a stub method. The real method is in BitmapHander.
+        *
+        * @param File $image File associated with this thumbnail
+        * @param array $params Array with scaler params
+        *
+        * @return MediaTransformError Error object if error occurred, false (=no error) otherwise
+        */
+       protected function transformCustom( $image, $params ) {
+               return $this->getMediaTransformError( $params, "Unimplemented" );
+       }
+
+       /**
+        * Get a MediaTransformError with error 'thumbnail_error'
+        *
+        * @param array $params Parameter array as passed to the transform* functions
+        * @param string $errMsg Error message
+        * @return MediaTransformError
+        */
+       public function getMediaTransformError( $params, $errMsg ) {
+               return new MediaTransformError( 'thumbnail_error', $params['clientWidth'],
+                       $params['clientHeight'], $errMsg );
+       }
+
+       /**
+        * Transform an image using the built in GD library
+        *
+        * This is a stub method. The real method is in BitmapHander.
+        *
+        * @param File $image File associated with this thumbnail
+        * @param array $params Array with scaler params
+        *
+        * @return MediaTransformError Error object if error occurred, false (=no error) otherwise
+        */
+       protected function transformGd( $image, $params ) {
+               return $this->getMediaTransformError( $params, "Unimplemented" );
+       }
+
+       /**
+        * Escape a string for ImageMagick's property input (e.g. -set -comment)
+        * See InterpretImageProperties() in magick/property.c
+        * @param string $s
+        * @return string
+        */
+       function escapeMagickProperty( $s ) {
+               // Double the backslashes
+               $s = str_replace( '\\', '\\\\', $s );
+               // Double the percents
+               $s = str_replace( '%', '%%', $s );
+               // Escape initial - or @
+               if ( strlen( $s ) > 0 && ( $s[0] === '-' || $s[0] === '@' ) ) {
+                       $s = '\\' . $s;
+               }
+
+               return $s;
+       }
+
+       /**
+        * Escape a string for ImageMagick's input filenames. See ExpandFilenames()
+        * and GetPathComponent() in magick/utility.c.
+        *
+        * This won't work with an initial ~ or @, so input files should be prefixed
+        * with the directory name.
+        *
+        * Glob character unescaping is broken in ImageMagick before 6.6.1-5, but
+        * it's broken in a way that doesn't involve trying to convert every file
+        * in a directory, so we're better off escaping and waiting for the bugfix
+        * to filter down to users.
+        *
+        * @param string $path The file path
+        * @param bool|string $scene The scene specification, or false if there is none
+        * @throws MWException
+        * @return string
+        */
+       function escapeMagickInput( $path, $scene = false ) {
+               # Die on initial metacharacters (caller should prepend path)
+               $firstChar = substr( $path, 0, 1 );
+               if ( $firstChar === '~' || $firstChar === '@' ) {
+                       throw new MWException( __METHOD__ . ': cannot escape this path name' );
+               }
+
+               # Escape glob chars
+               $path = preg_replace( '/[*?\[\]{}]/', '\\\\\0', $path );
+
+               return $this->escapeMagickPath( $path, $scene );
+       }
+
+       /**
+        * Escape a string for ImageMagick's output filename. See
+        * InterpretImageFilename() in magick/image.c.
+        * @param string $path The file path
+        * @param bool|string $scene The scene specification, or false if there is none
+        * @return string
+        */
+       function escapeMagickOutput( $path, $scene = false ) {
+               $path = str_replace( '%', '%%', $path );
+
+               return $this->escapeMagickPath( $path, $scene );
+       }
+
+       /**
+        * Armour a string against ImageMagick's GetPathComponent(). This is a
+        * helper function for escapeMagickInput() and escapeMagickOutput().
+        *
+        * @param string $path The file path
+        * @param bool|string $scene The scene specification, or false if there is none
+        * @throws MWException
+        * @return string
+        */
+       protected function escapeMagickPath( $path, $scene = false ) {
+               # Die on format specifiers (other than drive letters). The regex is
+               # meant to match all the formats you get from "convert -list format"
+               if ( preg_match( '/^([a-zA-Z0-9-]+):/', $path, $m ) ) {
+                       if ( wfIsWindows() && is_dir( $m[0] ) ) {
+                               // OK, it's a drive letter
+                               // ImageMagick has a similar exception, see IsMagickConflict()
+                       } else {
+                               throw new MWException( __METHOD__ . ': unexpected colon character in path name' );
+                       }
+               }
+
+               # If there are square brackets, add a do-nothing scene specification
+               # to force a literal interpretation
+               if ( $scene === false ) {
+                       if ( strpos( $path, '[' ) !== false ) {
+                               $path .= '[0--1]';
+                       }
+               } else {
+                       $path .= "[$scene]";
+               }
+
+               return $path;
+       }
+
+       /**
+        * Retrieve the version of the installed ImageMagick
+        * You can use PHPs version_compare() to use this value
+        * Value is cached for one hour.
+        * @return string Representing the IM version.
+        */
+       protected function getMagickVersion() {
+               global $wgMemc;
+
+               $cache = $wgMemc->get( "imagemagick-version" );
+               if ( !$cache ) {
+                       global $wgImageMagickConvertCommand;
+                       $cmd = wfEscapeShellArg( $wgImageMagickConvertCommand ) . ' -version';
+                       wfDebug( __METHOD__ . ": Running convert -version\n" );
+                       $retval = '';
+                       $return = wfShellExec( $cmd, $retval );
+                       $x = preg_match( '/Version: ImageMagick ([0-9]*\.[0-9]*\.[0-9]*)/', $return, $matches );
+                       if ( $x != 1 ) {
+                               wfDebug( __METHOD__ . ": ImageMagick version check failed\n" );
+
+                               return null;
+                       }
+                       $wgMemc->set( "imagemagick-version", $matches[1], 3600 );
+
+                       return $matches[1];
+               }
+
+               return $cache;
+       }
+
+       /**
+        * Returns whether the current scaler supports rotation.
+        *
+        * @since 1.24 No longer static
+        * @return bool
+        */
+       public function canRotate() {
+               return false;
+       }
+
+       /**
+        * Should we automatically rotate an image based on exif
+        *
+        * @since 1.24 No longer static
+        * @see $wgEnableAutoRotation
+        * @return bool Whether auto rotation is enabled
+        */
+       public function autoRotateEnabled() {
+               return false;
+       }
+
+       /**
+        * Rotate a thumbnail.
+        *
+        * This is a stub. See BitmapHandler::rotate.
+        *
+        * @param File $file
+        * @param array $params Rotate parameters.
+        *   'rotation' clockwise rotation in degrees, allowed are multiples of 90
+        * @since 1.24 Is non-static. From 1.21 it was static
+        * @return bool
+        */
+       public function rotate( $file, $params ) {
+               return new MediaTransformError( 'thumbnail_error', 0, 0,
+                       get_class( $this ) . ' rotation not implemented' );
+       }
+
+       /**
+        * Returns whether the file needs to be rendered. Returns true if the
+        * file requires rotation and we are able to rotate it.
+        *
+        * @param File $file
+        * @return bool
+        */
+       public function mustRender( $file ) {
+               return $this->canRotate() && $this->getRotation( $file ) != 0;
+       }
+}
index aa77fa8..48b7a47 100644 (file)
@@ -209,7 +209,7 @@ class XCFHandler extends BitmapHandler {
         * @param bool $checkDstPath
         * @return string
         */
-       protected static function getScalerType( $dstPath, $checkDstPath = true ) {
+       protected function getScalerType( $dstPath, $checkDstPath = true ) {
                return "im";
        }
 
index b86d7d7..07b2495 100644 (file)
@@ -13,7 +13,7 @@ image/jpeg    [BITMAP]
 image/jp2      [BITMAP]
 image/xbm      [BITMAP]
 image/tiff     [BITMAP]
-image/x-icon image/x-ico       [BITMAP]
+image/x-icon image/x-ico image/vnd.microsoft.icon      [BITMAP]
 image/x-rgb    [BITMAP]
 image/x-portable-pixmap                [BITMAP]
 image/x-portable-graymap image/x-portable-greymap      [BITMAP]
index ae6ca4d..75017db 100644 (file)
@@ -91,6 +91,7 @@ image/png png apng
 image/svg+xml svg
 image/tiff tiff tif
 image/vnd.djvu djvu djv
+image/vnd.microsoft.icon ico
 image/vnd.wap.wbmp wbmp
 image/webp webp
 image/x-cmu-raster ras
index 6f8f9af..1978c3e 100644 (file)
@@ -277,21 +277,6 @@ abstract class BagOStuff {
                return false; // key already set
        }
 
-       /**
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime
-        * @return bool Success
-        * @deprecated since 1.23
-        */
-       public function replace( $key, $value, $exptime = 0 ) {
-               wfDeprecated( __METHOD__, '1.23' );
-               if ( $this->get( $key ) !== false ) {
-                       return $this->set( $key, $value, $exptime );
-               }
-               return false; // key not already set
-       }
-
        /**
         * Increase stored value of $key by $value while preserving its TTL
         * @param string $key Key to increase
index 6e50a8c..06a0865 100644 (file)
@@ -65,7 +65,7 @@ class HashBagOStuff extends BagOStuff {
                        return false;
                }
 
-               $casToken = serialize( $this->bag[$key][0] );
+               $casToken = $this->bag[$key][0];
 
                return $this->bag[$key][0];
        }
@@ -89,7 +89,7 @@ class HashBagOStuff extends BagOStuff {
         * @return bool
         */
        function cas( $casToken, $key, $value, $exptime = 0 ) {
-               if ( serialize( $this->get( $key ) ) === $casToken ) {
+               if ( $this->get( $key ) === $casToken ) {
                        return $this->set( $key, $value, $exptime );
                }
 
index 54a464d..0e133a8 100644 (file)
@@ -145,7 +145,7 @@ class MemcachedBagOStuff extends BagOStuff {
         * TTLs higher than 30 days will be detected as absolute TTLs
         * (UNIX timestamps), and will result in the cache entry being
         * discarded immediately because the expiry is in the past.
-        * Clamp expiries >30d at 30d, unless they're >=1e9 in which
+        * Clamp expires >30d at 30d, unless they're >=1e9 in which
         * case they are likely to really be absolute (1e9 = 2011-09-09)
         * @param int $expiry
         * @return int
@@ -154,7 +154,7 @@ class MemcachedBagOStuff extends BagOStuff {
                if ( $expiry > 2592000 && $expiry < 1000000000 ) {
                        $expiry = 2592000;
                }
-               return (int) $expiry;
+               return (int)$expiry;
        }
 
        /**
index 8700c8c..c853bcf 100644 (file)
@@ -247,6 +247,7 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
                $callback = array( $this, 'encodeKey' );
                $result = $this->client->getMulti( array_map( $callback, $keys ) );
                wfProfileOut( __METHOD__ );
+               $result = $result ?: array(); // must be an array
                return $this->checkResult( false, $result );
        }
 
index 497f75d..6a69137 100644 (file)
@@ -115,16 +115,6 @@ class MultiWriteBagOStuff extends BagOStuff {
                return $this->doWrite( 'add', $key, $value, $exptime );
        }
 
-       /**
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime
-        * @return bool
-        */
-       public function replace( $key, $value, $exptime = 0 ) {
-               return $this->doWrite( 'replace', $key, $value, $exptime );
-       }
-
        /**
         * @param string $key
         * @param int $value
index 5872079..3585e57 100644 (file)
@@ -322,9 +322,7 @@ class SqlBagOStuff extends BagOStuff {
                        if ( $exptime == 0 ) {
                                $encExpiry = $this->getMaxDateTime( $db );
                        } else {
-                               if ( $exptime < 3.16e8 ) { # ~10 years
-                                       $exptime += time();
-                               }
+                               $exptime = $this->convertExpiry( $exptime );
                                $encExpiry = $db->timestamp( $exptime );
                        }
                        foreach ( $serverKeys as $tableName => $tableKeys ) {
@@ -377,10 +375,7 @@ class SqlBagOStuff extends BagOStuff {
                        if ( $exptime == 0 ) {
                                $encExpiry = $this->getMaxDateTime( $db );
                        } else {
-                               if ( $exptime < 3.16e8 ) { # ~10 years
-                                       $exptime += time();
-                               }
-
+                               $exptime = $this->convertExpiry( $exptime );
                                $encExpiry = $db->timestamp( $exptime );
                        }
                        // (bug 24425) use a replace if the db supports it instead of
@@ -421,9 +416,7 @@ class SqlBagOStuff extends BagOStuff {
                        if ( $exptime == 0 ) {
                                $encExpiry = $this->getMaxDateTime( $db );
                        } else {
-                               if ( $exptime < 3.16e8 ) { # ~10 years
-                                       $exptime += time();
-                               }
+                               $exptime = $this->convertExpiry( $exptime );
                                $encExpiry = $db->timestamp( $exptime );
                        }
                        // (bug 24425) use a replace if the db supports it instead of
@@ -621,7 +614,8 @@ class SqlBagOStuff extends BagOStuff {
                                                                if ( $remainingSeconds > $totalSeconds ) {
                                                                        $totalSeconds = $remainingSeconds;
                                                                }
-                                                               $percent = ( $i + $remainingSeconds / $totalSeconds )
+                                                               $processedSeconds = $totalSeconds - $remainingSeconds;
+                                                               $percent = ( $i + $processedSeconds / $totalSeconds )
                                                                        / $this->shards * 100;
                                                        }
                                                        $percent = ( $percent / $this->numServers )
@@ -638,6 +632,11 @@ class SqlBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * Delete content of shard tables in every server.
+        * Return true if the operation is successful, false otherwise.
+        * @return bool
+        */
        public function deleteAll() {
                for ( $serverIndex = 0; $serverIndex < $this->numServers; $serverIndex++ ) {
                        try {
index 8970539..cf53f1d 100644 (file)
@@ -53,25 +53,25 @@ class Article implements Page {
         * @var Content Content of the revision we are working on
         * @since 1.21
         */
-       protected $mContentObject;
+       public $mContentObject;
 
        /** @var bool Is the content ($mContent) already loaded? */
-       protected $mContentLoaded = false;
+       public $mContentLoaded = false;
 
        /** @var int|null The oldid of the article that is to be shown, 0 for the current revision */
-       protected $mOldId;
+       public $mOldId;
 
        /** @var Title Title from which we were redirected here */
-       protected $mRedirectedFrom = null;
+       public $mRedirectedFrom = null;
 
        /** @var string|bool URL to redirect to or false if none */
-       protected $mRedirectUrl = false;
+       public $mRedirectUrl = false;
 
        /** @var int Revision ID of revision we are working on */
-       protected $mRevIdFetched = 0;
+       public $mRevIdFetched = 0;
 
        /** @var Revision Revision we are working on */
-       protected $mRevision = null;
+       public $mRevision = null;
 
        /** @var ParserOutput */
        public $mParserOutput;
@@ -790,7 +790,11 @@ class Article implements Page {
 
                if ( !$rev ) {
                        $this->getContext()->getOutput()->setPageTitle( wfMessage( 'errorpagetitle' ) );
-                       $this->getContext()->getOutput()->addWikiMsg( 'difference-missing-revision', $oldid, 1 );
+                       $msg = $this->getContext()->msg( 'difference-missing-revision' )
+                               ->params( $oldid )
+                               ->numParams( 1 )
+                               ->parseAsBlock();
+                       $this->getContext()->getOutput()->addHtml( $msg );
                        return;
                }
 
@@ -982,6 +986,10 @@ class Article implements Page {
                $query = $request->getValues();
                unset( $query['rdfrom'] );
                unset( $query['title'] );
+               if ( $this->getTitle()->isRedirect() ) {
+                       // Prevent double redirects
+                       $query['redirect'] = 'no';
+               }
                $redirectTargetUrl = $this->getTitle()->getLinkURL( $query );
 
                if ( isset( $this->mRedirectedFrom ) ) {
@@ -1190,15 +1198,18 @@ class Article implements Page {
         */
        public function showMissingArticle() {
                global $wgSend404Code;
+
                $outputPage = $this->getContext()->getOutput();
                // Whether the page is a root user page of an existing user (but not a subpage)
                $validUserPage = false;
 
+               $title = $this->getTitle();
+
                # Show info in user (talk) namespace. Does the user exist? Is he blocked?
-               if ( $this->getTitle()->getNamespace() == NS_USER
-                       || $this->getTitle()->getNamespace() == NS_USER_TALK
+               if ( $title->getNamespace() == NS_USER
+                       || $title->getNamespace() == NS_USER_TALK
                ) {
-                       $parts = explode( '/', $this->getTitle()->getText() );
+                       $parts = explode( '/', $title->getText() );
                        $rootPart = $parts[0];
                        $user = User::newFromName( $rootPart, false /* allow IP users*/ );
                        $ip = User::isIP( $rootPart );
@@ -1207,7 +1218,8 @@ class Article implements Page {
                        if ( !( $user && $user->isLoggedIn() ) && !$ip ) { # User does not exist
                                $outputPage->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n\$1\n</div>",
                                        array( 'userpage-userdoesnotexist-view', wfEscapeWikiText( $rootPart ) ) );
-                       } elseif ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) { # Show log extract if the user is currently blocked
+                       } elseif ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) {
+                               # Show log extract if the user is currently blocked
                                LogEventsList::showLogExtract(
                                        $outputPage,
                                        'block',
@@ -1222,9 +1234,9 @@ class Article implements Page {
                                                )
                                        )
                                );
-                               $validUserPage = !$this->getTitle()->isSubpage();
+                               $validUserPage = !$title->isSubpage();
                        } else {
-                               $validUserPage = !$this->getTitle()->isSubpage();
+                               $validUserPage = !$title->isSubpage();
                        }
                }
 
@@ -1236,7 +1248,7 @@ class Article implements Page {
                wfRunHooks( 'Article::MissingArticleConditions', array( &$conds, $logTypes ) );
 
                # Show delete and move logs
-               LogEventsList::showLogExtract( $outputPage, $logTypes, $this->getTitle(), '',
+               LogEventsList::showLogExtract( $outputPage, $logTypes, $title, '',
                        array( 'lim' => 10,
                                'conds' => $conds,
                                'showIfEmpty' => false,
@@ -1264,11 +1276,11 @@ class Article implements Page {
                $oldid = $this->getOldID();
                if ( $oldid ) {
                        $text = wfMessage( 'missing-revision', $oldid )->plain();
-               } elseif ( $this->getTitle()->getNamespace() === NS_MEDIAWIKI ) {
+               } elseif ( $title->getNamespace() === NS_MEDIAWIKI ) {
                        // Use the default message text
-                       $text = $this->getTitle()->getDefaultMessageText();
-               } elseif ( $this->getTitle()->quickUserCan( 'create', $this->getContext()->getUser() )
-                       && $this->getTitle()->quickUserCan( 'edit', $this->getContext()->getUser() )
+                       $text = $title->getDefaultMessageText();
+               } elseif ( $title->quickUserCan( 'create', $this->getContext()->getUser() )
+                       && $title->quickUserCan( 'edit', $this->getContext()->getUser() )
                ) {
                        $message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
                        $text = wfMessage( $message )->plain();
@@ -1366,9 +1378,14 @@ class Article implements Page {
                        : 'revision-info';
 
                $outputPage = $this->getContext()->getOutput();
-               $outputPage->addSubtitle( "<div id=\"mw-{$infomsg}\">" . wfMessage( $infomsg,
-                       $td )->rawParams( $userlinks )->params( $revision->getID(), $tddate,
-                       $tdtime, $revision->getUserText() )->rawParams( Linker::revComment( $revision, true, true ) )->parse() . "</div>" );
+               $outputPage->addSubtitle( "<div id=\"mw-{$infomsg}\">" .
+                       wfMessage( $infomsg, $td )
+                               ->rawParams( $userlinks )
+                               ->params( $revision->getID(), $tddate, $tdtime, $revision->getUserText() )
+                               ->rawParams( Linker::revComment( $revision, true, true ) )
+                               ->parse() .
+                       "</div>"
+               );
 
                $lnk = $current
                        ? wfMessage( 'currentrevisionlink' )->escaped()
@@ -1455,14 +1472,15 @@ class Article implements Page {
         * @param Title|array $target Destination(s) to redirect
         * @param bool $appendSubtitle [optional]
         * @param bool $forceKnown Should the image be shown as a bluelink regardless of existence?
-        * @return string Containing HMTL with redirect link
+        * @return string Containing HTML with redirect link
         */
        public function viewRedirect( $target, $appendSubtitle = true, $forceKnown = false ) {
                $lang = $this->getTitle()->getPageLanguage();
+               $out = $this->getContext()->getOutput();
                if ( $appendSubtitle ) {
-                       $out = $this->getContext()->getOutput();
                        $out->addSubtitle( wfMessage( 'redirectpagesub' )->parse() );
                }
+               $out->addModuleStyles( 'mediawiki.action.view.redirectPage' );
                return static::getRedirectHeaderHtml( $lang, $target, $forceKnown );
        }
 
@@ -1476,58 +1494,33 @@ class Article implements Page {
         * @param Language $lang
         * @param Title|array $target Destination(s) to redirect
         * @param bool $forceKnown Should the image be shown as a bluelink regardless of existence?
-        * @return string Containing HMTL with redirect link
+        * @return string Containing HTML with redirect link
         */
        public static function getRedirectHeaderHtml( Language $lang, $target, $forceKnown = false ) {
-               global $wgStylePath;
-
                if ( !is_array( $target ) ) {
                        $target = array( $target );
                }
 
-               $imageDir = $lang->getDir();
-
-               // the loop prepends the arrow image before the link, so the first case needs to be outside
-
-               /** @var $title Title */
-               $title = array_shift( $target );
-
-               if ( $forceKnown ) {
-                       $link = Linker::linkKnown( $title, htmlspecialchars( $title->getFullText() ) );
-               } else {
-                       $link = Linker::link( $title, htmlspecialchars( $title->getFullText() ) );
+               $html = '<ul class="redirectText">';
+               /** @var Title $title */
+               foreach ( $target as $title ) {
+                       $html .= '<li>' . Linker::link(
+                               $title,
+                               htmlspecialchars( $title->getFullText() ),
+                               array(),
+                               // Automatically append redirect=no to each link, since most of them are
+                               // redirect pages themselves.
+                               array( 'redirect' => 'no' ),
+                               ( $forceKnown ? array( 'known', 'noclasses' ) : array() )
+                       ) . '</li>';
                }
 
-               $nextRedirect = $wgStylePath . '/common/images/nextredirect' . $imageDir . '.png';
-               $alt = $lang->isRTL() ? '←' : '→';
-
-               // Automatically append redirect=no to each link, since most of them are
-               // redirect pages themselves.
-               /** @var Title $rt */
-               foreach ( $target as $rt ) {
-                       $link .= Html::element( 'img', array( 'src' => $nextRedirect, 'alt' => $alt ) );
-                       if ( $forceKnown ) {
-                               $link .= Linker::linkKnown(
-                                       $rt,
-                                       htmlspecialchars( $rt->getFullText(),
-                                       array(),
-                                       array( 'redirect' => 'no' )
-                               )
-                               );
-                       } else {
-                               $link .= Linker::link(
-                                       $rt,
-                                       htmlspecialchars( $rt->getFullText() ),
-                                       array(),
-                                       array( 'redirect' => 'no' )
-                               );
-                       }
-               }
+               $redirectToText = wfMessage( 'redirectto' )->inLanguage( $lang )->text();
 
-               $imageUrl = $wgStylePath . '/common/images/redirect' . $imageDir . '.png';
                return '<div class="redirectMsg">' .
-                       Html::element( 'img', array( 'src' => $imageUrl, 'alt' => '#REDIRECT' ) ) .
-                       '<span class="redirectText">' . $link . '</span></div>';
+                       '<p>' . $redirectToText . '</p>' .
+                       $html .
+                       '</div>';
        }
 
        /**
@@ -1640,10 +1633,11 @@ class Article implements Page {
                if ( $hasHistory ) {
                        $title = $this->getTitle();
 
-                       // The following can use the real revision count as this is only being shown for users that can delete
-                       // this page.
-                       // This, as a side-effect, also makes sure that the following query isn't being run for pages with a
-                       // larger history, unless the user has the 'bigdelete' right (and is about to delete this page).
+                       // The following can use the real revision count as this is only being shown for users
+                       // that can delete this page.
+                       // This, as a side-effect, also makes sure that the following query isn't being run for
+                       // pages with a larger history, unless the user has the 'bigdelete' right
+                       // (and is about to delete this page).
                        $dbr = wfGetDB( DB_SLAVE );
                        $revisions = $edits = (int)$dbr->selectField(
                                'revision',
@@ -1653,7 +1647,8 @@ class Article implements Page {
                        );
 
                        // @todo FIXME: i18n issue/patchwork message
-                       $this->getContext()->getOutput()->addHTML( '<strong class="mw-delete-warning-revisions">' .
+                       $this->getContext()->getOutput()->addHTML(
+                               '<strong class="mw-delete-warning-revisions">' .
                                wfMessage( 'historywarning' )->numParams( $revisions )->parse() .
                                wfMessage( 'word-separator' )->plain() . Linker::linkKnown( $title,
                                        wfMessage( 'history' )->escaped(),
@@ -1685,7 +1680,9 @@ class Article implements Page {
                wfDebug( "Article::confirmDelete\n" );
 
                $title = $this->getTitle();
-               $outputPage = $this->getContext()->getOutput();
+               $ctx = $this->getContext();
+               $outputPage = $ctx->getOutput();
+               $useMediaWikiUIEverywhere = $ctx->getConfig()->get( 'UseMediaWikiUIEverywhere' );
                $outputPage->setPageTitle( wfMessage( 'delete-confirm', $title->getPrefixedText() ) );
                $outputPage->addBacklinkSubtitle( $title );
                $outputPage->setRobotPolicy( 'noindex,nofollow' );
@@ -1701,75 +1698,67 @@ class Article implements Page {
                $user = $this->getContext()->getUser();
 
                if ( $user->isAllowed( 'suppressrevision' ) ) {
-                       $suppress = "<tr id=\"wpDeleteSuppressRow\">
-                                       <td></td>
-                                       <td class='mw-input'><strong>" .
+                       $suppress = Html::openElement( 'div', array( 'id' => 'wpDeleteSuppressRow' ) ) .
+                               "<strong>" .
                                                Xml::checkLabel( wfMessage( 'revdelete-suppress' )->text(),
                                                        'wpSuppress', 'wpSuppress', false, array( 'tabindex' => '4' ) ) .
-                                       "</strong></td>
-                               </tr>";
+                                       "</strong>" .
+                               Html::closeElement( 'div' );
                } else {
                        $suppress = '';
                }
                $checkWatch = $user->getBoolOption( 'watchdeletion' ) || $user->isWatched( $title );
 
-               $form = Xml::openElement( 'form', array( 'method' => 'post',
+               $form = Html::openElement( 'form', array( 'method' => 'post',
                        'action' => $title->getLocalURL( 'action=delete' ), 'id' => 'deleteconfirm' ) ) .
-                       Xml::openElement( 'fieldset', array( 'id' => 'mw-delete-table' ) ) .
-                       Xml::tags( 'legend', null, wfMessage( 'delete-legend' )->escaped() ) .
-                       Xml::openElement( 'table', array( 'id' => 'mw-deleteconfirm-table' ) ) .
-                       "<tr id=\"wpDeleteReasonListRow\">
-                               <td class='mw-label'>" .
-                                       Xml::label( wfMessage( 'deletecomment' )->text(), 'wpDeleteReasonList' ) .
-                               "</td>
-                               <td class='mw-input'>" .
-                                       Xml::listDropDown(
-                                               'wpDeleteReasonList',
-                                               wfMessage( 'deletereason-dropdown' )->inContentLanguage()->text(),
-                                               wfMessage( 'deletereasonotherlist' )->inContentLanguage()->text(),
-                                               '',
-                                               'wpReasonDropDown',
-                                               1
-                                       ) .
-                               "</td>
-                       </tr>
-                       <tr id=\"wpDeleteReasonRow\">
-                               <td class='mw-label'>" .
-                                       Xml::label( wfMessage( 'deleteotherreason' )->text(), 'wpReason' ) .
-                               "</td>
-                               <td class='mw-input'>" .
-                               Html::input( 'wpReason', $reason, 'text', array(
-                                       'size' => '60',
-                                       'maxlength' => '255',
-                                       'tabindex' => '2',
-                                       'id' => 'wpReason',
-                                       'autofocus'
-                               ) ) .
-                               "</td>
-                       </tr>";
+                       Html::openElement( 'fieldset', array( 'id' => 'mw-delete-table' ) ) .
+                       Html::element( 'legend', null, wfMessage( 'delete-legend' )->text() ) .
+                       Html::openElement( 'div', array( 'id' => 'mw-deleteconfirm-table' ) ) .
+                       Html::openElement( 'div', array( 'id' => 'wpDeleteReasonListRow' ) ) .
+                       Html::label( wfMessage( 'deletecomment' )->text(), 'wpDeleteReasonList' ) .
+                       '&nbsp;' .
+                       Xml::listDropDown(
+                               'wpDeleteReasonList',
+                               wfMessage( 'deletereason-dropdown' )->inContentLanguage()->text(),
+                               wfMessage( 'deletereasonotherlist' )->inContentLanguage()->text(),
+                               '',
+                               'wpReasonDropDown',
+                               1
+                       ) .
+                       Html::closeElement( 'div' ) .
+                       Html::openElement( 'div', array( 'id' => 'wpDeleteReasonRow' ) ) .
+                       Html::label( wfMessage( 'deleteotherreason' )->text(), 'wpReason' ) .
+                       '&nbsp;' .
+                       Html::input( 'wpReason', $reason, 'text', array(
+                               'size' => '60',
+                               'maxlength' => '255',
+                               'tabindex' => '2',
+                               'id' => 'wpReason',
+                               'class' => 'mw-ui-input-inline',
+                               'autofocus'
+                       ) ) .
+                       Html::closeElement( 'div' );
 
                # Disallow watching if user is not logged in
                if ( $user->isLoggedIn() ) {
-                       $form .= "
-                       <tr>
-                               <td></td>
-                               <td class='mw-input'>" .
+                       $form .=
                                        Xml::checkLabel( wfMessage( 'watchthis' )->text(),
-                                               'wpWatch', 'wpWatch', $checkWatch, array( 'tabindex' => '3' ) ) .
-                               "</td>
-                       </tr>";
+                                               'wpWatch', 'wpWatch', $checkWatch, array( 'tabindex' => '3' ) );
                }
 
-               $form .= "
-                       $suppress
-                       <tr>
-                               <td></td>
-                               <td class='mw-submit'>" .
+               $form .=
+                               Html::openElement( 'div' ) .
+                               $suppress .
                                        Xml::submitButton( wfMessage( 'deletepage' )->text(),
-                                               array( 'name' => 'wpConfirmB', 'id' => 'wpConfirmB', 'tabindex' => '5' ) ) .
-                               "</td>
-                       </tr>" .
-                       Xml::closeElement( 'table' ) .
+                                               array(
+                                                       'name' => 'wpConfirmB',
+                                                       'id' => 'wpConfirmB',
+                                                       'tabindex' => '5',
+                                                       'class' => $useMediaWikiUIEverywhere ? 'mw-ui-button mw-ui-destructive' : '',
+                                               )
+                                       ) .
+                               Html::closeElement( 'div' ) .
+                       Html::closeElement( 'div' ) .
                        Xml::closeElement( 'fieldset' ) .
                        Html::hidden(
                                'wpEditToken',
@@ -1814,6 +1803,9 @@ class Article implements Page {
                        $loglink = '[[Special:Log/delete|' . wfMessage( 'deletionlog' )->text() . ']]';
 
                        $outputPage->addWikiMsg( 'deletedtext', wfEscapeWikiText( $deleted ), $loglink );
+
+                       wfRunHooks( 'ArticleDeleteAfterSuccess', array( $this->getTitle(), $outputPage ) );
+
                        $outputPage->returnToMain( false );
                } else {
                        $outputPage->setPageTitle(
@@ -1858,7 +1850,7 @@ class Article implements Page {
 
                $called = true;
                if ( $this->isFileCacheable() ) {
-                       $cache = HTMLFileCache::newFromTitle( $this->getTitle(), 'view' );
+                       $cache = new HTMLFileCache( $this->getTitle(), 'view' );
                        if ( $cache->isCacheGood( $this->mPage->getTouched() ) ) {
                                wfDebug( "Article::tryFileCache(): about to load file\n" );
                                $cache->loadFromFileCache( $this->getContext() );
index 380252f..348eff1 100644 (file)
@@ -267,8 +267,7 @@ class ImagePage extends Article {
                                # @todo FIXME: Why is this using escapeId for a class?!
                                $class = Sanitizer::escapeId( $v['id'] );
                                if ( $type == 'collapsed' ) {
-                                       // Handled by mediawiki.action.view.metadata module
-                                       // and skins/common/shared.css.
+                                       // Handled by mediawiki.action.view.metadata module.
                                        $class .= ' collapsable';
                                }
                                $r .= "<tr class=\"$class\">\n";
@@ -1200,9 +1199,9 @@ class ImageHistoryList extends ContextSource {
                        . $this->msg( 'filehist-help' )->parseAsBlock()
                        . $navLinks . "\n"
                        . Xml::openElement( 'table', array( 'class' => 'wikitable filehistory' ) ) . "\n"
-                       . '<tr><td></td>'
+                       . '<tr><th></th>'
                        . ( $this->current->isLocal()
-                               && ( $this->getUser()->isAllowedAny( 'delete', 'deletedhistory' ) ) ? '<td></td>' : '' )
+                               && ( $this->getUser()->isAllowedAny( 'delete', 'deletedhistory' ) ) ? '<th></th>' : '' )
                        . '<th>' . $this->msg( 'filehist-datetime' )->escaped() . '</th>'
                        . ( $this->showThumb ? '<th>' . $this->msg( 'filehist-thumb' )->escaped() . '</th>' : '' )
                        . '<th>' . $this->msg( 'filehist-dimensions' )->escaped() . '</th>'
@@ -1329,6 +1328,9 @@ class ImageHistoryList extends ContextSource {
                                $url = $lang->userTimeAndDate( $timestamp, $user );
                        }
                        $row .= '<span class="history-deleted">' . $url . '</span>';
+               } elseif ( !$file->exists() ) {
+                       $row .= '<span class="mw-file-missing">'
+                               . $lang->userTimeAndDate( $timestamp, $user ) . '</span>';
                } else {
                        $url = $iscur ? $this->current->getUrl() : $this->current->getArchiveUrl( $img );
                        $row .= Xml::element(
index b62f40d..61f0504 100644 (file)
@@ -88,11 +88,6 @@ class WikiPage implements Page, IDBAccessObject {
         */
        protected $mLinksUpdated = '19700101000000';
 
-       /**
-        * @var int|null
-        */
-       protected $mCounter = null;
-
        /**
         * Constructor and clear the article
         * @param Title $title Reference to a Title object.
@@ -247,7 +242,6 @@ class WikiPage implements Page, IDBAccessObject {
         */
        protected function clearCacheFields() {
                $this->mId = null;
-               $this->mCounter = null;
                $this->mRedirectTarget = null; // Title object if set
                $this->mLastRevision = null; // Latest revision
                $this->mTouched = '19700101000000';
@@ -284,7 +278,6 @@ class WikiPage implements Page, IDBAccessObject {
                        'page_namespace',
                        'page_title',
                        'page_restrictions',
-                       'page_counter',
                        'page_is_redirect',
                        'page_is_new',
                        'page_random',
@@ -352,8 +345,7 @@ class WikiPage implements Page, IDBAccessObject {
        }
 
        /**
-        * Set the general counter, title etc data loaded from
-        * some source.
+        * Load the object from a given source by title
         *
         * @param object|string|int $from One of the following:
         *   - A DB query result object.
@@ -419,7 +411,6 @@ class WikiPage implements Page, IDBAccessObject {
                        $this->mTitle->loadRestrictions( $data->page_restrictions );
 
                        $this->mId = intval( $data->page_id );
-                       $this->mCounter = intval( $data->page_counter );
                        $this->mTouched = wfTimestamp( TS_MW, $data->page_touched );
                        $this->mLinksUpdated = wfTimestampOrNull( TS_MW, $data->page_links_updated );
                        $this->mIsRedirect = intval( $data->page_is_redirect );
@@ -476,17 +467,6 @@ class WikiPage implements Page, IDBAccessObject {
                return $this->exists() || $this->mTitle->isAlwaysKnown();
        }
 
-       /**
-        * @return int The view count for the page
-        */
-       public function getCount() {
-               if ( !$this->mDataLoaded ) {
-                       $this->loadPageData();
-               }
-
-               return $this->mCounter;
-       }
-
        /**
         * Tests if the article content represents a redirect
         *
@@ -1183,17 +1163,10 @@ class WikiPage implements Page, IDBAccessObject {
         * @param int $oldid The revision id being viewed. If not given or 0, latest revision is assumed.
         */
        public function doViewUpdates( User $user, $oldid = 0 ) {
-               global $wgDisableCounters;
                if ( wfReadOnly() ) {
                        return;
                }
 
-               // Don't update page view counters on views from bot users (bug 14044)
-               if ( !$wgDisableCounters && !$user->isAllowed( 'bot' ) && $this->exists() ) {
-                       DeferredUpdates::addUpdate( new ViewCountUpdate( $this->getId() ) );
-                       DeferredUpdates::addUpdate( new SiteStatsUpdate( 1, 0, 0 ) );
-               }
-
                // Update newtalk / watchlist notification status
                $user->clearNotification( $this->mTitle, $oldid );
        }
@@ -1262,7 +1235,6 @@ class WikiPage implements Page, IDBAccessObject {
                        'page_id'           => $page_id,
                        'page_namespace'    => $this->mTitle->getNamespace(),
                        'page_title'        => $this->mTitle->getDBkey(),
-                       'page_counter'      => 0,
                        'page_restrictions' => '',
                        'page_is_redirect'  => 0, // Will set this shortly...
                        'page_is_new'       => 1,
@@ -2168,6 +2140,7 @@ class WikiPage implements Page, IDBAccessObject {
         * @param array $options Array of options, following indexes are used:
         * - changed: boolean, whether the revision changed the content (default true)
         * - created: boolean, whether the revision created the page (default false)
+        * - moved: boolean, whether the page was moved (default false)
         * - oldcountable: boolean or null (default null):
         *   - boolean: whether the page was counted as an article before that
         *     revision, only used in changed is true and created is false
@@ -2178,7 +2151,12 @@ class WikiPage implements Page, IDBAccessObject {
 
                wfProfileIn( __METHOD__ );
 
-               $options += array( 'changed' => true, 'created' => false, 'oldcountable' => null );
+               $options += array(
+                       'changed' => true,
+                       'created' => false,
+                       'moved' => false,
+                       'oldcountable' => null
+               );
                $content = $revision->getContent();
 
                // Parse the text
@@ -2227,7 +2205,7 @@ class WikiPage implements Page, IDBAccessObject {
                $title = $this->mTitle->getPrefixedDBkey();
                $shortTitle = $this->mTitle->getDBkey();
 
-               if ( !$options['changed'] ) {
+               if ( !$options['changed'] && !$options['moved'] ) {
                        $good = 0;
                } elseif ( $options['created'] ) {
                        $good = (int)$this->isCountable( $editInfo );
@@ -2876,8 +2854,6 @@ class WikiPage implements Page, IDBAccessObject {
                // Clone the title, so we have the information we need when we log
                $logTitle = clone $this->mTitle;
 
-               $this->doDeleteUpdates( $id, $content );
-
                // Log the deletion, if the page was suppressed, log it at Oversight instead
                $logtype = $suppress ? 'suppress' : 'delete';
 
@@ -2896,6 +2872,8 @@ class WikiPage implements Page, IDBAccessObject {
                        $dbw->commit( __METHOD__ );
                }
 
+               $this->doDeleteUpdates( $id, $content );
+
                wfRunHooks( 'ArticleDeleteComplete', array( &$this, &$user, $reason, $id, $content, $logEntry ) );
                $status->value = $logid;
                return $status;
index 1d93c27..9398e30 100644 (file)
  * @ingroup Pager
  */
 abstract class IndexPager extends ContextSource implements Pager {
+       /**
+        * Constants for the $mDefaultDirection field.
+        *
+        * These are boolean for historical reasons and should stay boolean for backwards-compatibility.
+        */
+       const DIR_ASCENDING = false;
+       const DIR_DESCENDING = true;
+
        public $mRequest;
        public $mLimitsShown = array( 20, 50, 100, 250, 500 );
        public $mDefaultLimit = 50;
@@ -87,7 +95,7 @@ abstract class IndexPager extends ContextSource implements Pager {
        protected $mOrderType;
        /**
         * $mDefaultDirection gives the direction to use when sorting results:
-        * false for ascending, true for descending.  If $mIsBackwards is set, we
+        * DIR_ASCENDING or DIR_DESCENDING.  If $mIsBackwards is set, we
         * start from the opposite end, but we still sort the page itself according
         * to $mDefaultDirection.  E.g., if $mDefaultDirection is false but we're
         * going backwards, we'll display the last page of results, but the last
@@ -190,6 +198,7 @@ abstract class IndexPager extends ContextSource implements Pager {
                $fname = __METHOD__ . ' (' . get_class( $this ) . ')';
                wfProfileIn( $fname );
 
+               // @todo This should probably compare to DIR_DESCENDING and DIR_ASCENDING constants
                $descending = ( $this->mIsBackwards == $this->mDefaultDirection );
                # Plus an extra row so that we can tell the "next" link should be shown
                $queryLimit = $this->mLimit + 1;
@@ -447,8 +456,8 @@ abstract class IndexPager extends ContextSource implements Pager {
         *
         * @param string $text Text displayed on the link
         * @param array $query Associative array of parameter to be in the query string
-        * @param string $type Value of the "rel" attribute
-        *
+        * @param string $type Link type used to create additional attributes, like "rel", "class" or
+        *  "title". Valid values (non-exhaustive list): 'first', 'last', 'prev', 'next', 'asc', 'desc'.
         * @return string HTML fragment
         */
        function makeLink( $text, array $query = null, $type = null ) {
@@ -457,11 +466,14 @@ abstract class IndexPager extends ContextSource implements Pager {
                }
 
                $attrs = array();
-               if ( in_array( $type, array( 'first', 'prev', 'next', 'last' ) ) ) {
-                       # HTML5 rel attributes
+               if ( in_array( $type, array( 'prev', 'next' ) ) ) {
                        $attrs['rel'] = $type;
                }
 
+               if ( in_array( $type, array( 'asc', 'desc' ) ) ) {
+                       $attrs['title'] = wfMessage( $type == 'asc' ? 'sort-ascending' : 'sort-descending' )->text();
+               }
+
                if ( $type ) {
                        $attrs['class'] = "mw-{$type}link";
                }
@@ -705,8 +717,8 @@ abstract class IndexPager extends ContextSource implements Pager {
        }
 
        /**
-        * Return the default sorting direction: false for ascending, true for
-        * descending.  You can also have an associative array of ordertype => dir,
+        * Return the default sorting direction: DIR_ASCENDING or DIR_DESCENDING.
+        * You can also have an associative array of ordertype => dir,
         * if multiple order types are supported.  In this case getIndexField()
         * must return an array, and the keys of that must exactly match the keys
         * of this.
@@ -724,6 +736,6 @@ abstract class IndexPager extends ContextSource implements Pager {
         * @return bool
         */
        protected function getDefaultDirections() {
-               return false;
+               return IndexPager::DIR_ASCENDING;
        }
 }
index 3f96382..4f8c438 100644 (file)
@@ -26,7 +26,7 @@
  * @ingroup Pager
  */
 abstract class ReverseChronologicalPager extends IndexPager {
-       public $mDefaultDirection = true;
+       public $mDefaultDirection = IndexPager::DIR_DESCENDING;
        public $mYear;
        public $mMonth;
 
index 19538c6..8095539 100644 (file)
@@ -42,56 +42,107 @@ abstract class TablePager extends IndexPager {
                        $this->mSort = $this->getDefaultSort();
                }
                if ( $this->getRequest()->getBool( 'asc' ) ) {
-                       $this->mDefaultDirection = false;
+                       $this->mDefaultDirection = IndexPager::DIR_ASCENDING;
                } elseif ( $this->getRequest()->getBool( 'desc' ) ) {
-                       $this->mDefaultDirection = true;
+                       $this->mDefaultDirection = IndexPager::DIR_DESCENDING;
                } /* Else leave it at whatever the class default is */
 
                parent::__construct();
        }
 
+       /**
+        * Get the formatted result list. Calls getStartBody(), formatRow() and getEndBody(), concatenates
+        * the results and returns them.
+        *
+        * Also adds the required styles to our OutputPage object (this means that if context wasn't
+        * passed to constructor or otherwise set up, you will get a pager with missing styles).
+        *
+        * This method has been made 'final' in 1.24. There's no reason to override it, and if there exist
+        * any subclasses that do, the style loading hack is probably broken in them. Let's fail fast
+        * rather than mysteriously render things wrong.
+        *
+        * @deprecated since 1.24, use getBodyOutput() or getFullOutput() instead
+        * @return string
+        */
+       final public function getBody() {
+               $this->getOutput()->addModuleStyles( $this->getModuleStyles() );
+               return parent::getBody();
+       }
+
+       /**
+        * Get the formatted result list.
+        *
+        * Calls getBody() and getModuleStyles() and builds a ParserOutput object. (This is a bit hacky
+        * but works well.)
+        *
+        * @since 1.24
+        * @return ParserOutput
+        */
+       public function getBodyOutput() {
+               $body = parent::getBody();
+
+               $pout = new ParserOutput;
+               $pout->setText( $body );
+               $pout->addModuleStyles( $this->getModuleStyles() );
+               return $pout;
+       }
+
+       /**
+        * Get the formatted result list, with navigation bars.
+        *
+        * Calls getBody(), getNavigationBar() and getModuleStyles() and
+        * builds a ParserOutput object. (This is a bit hacky but works well.)
+        *
+        * @since 1.24
+        * @return ParserOutput
+        */
+       public function getFullOutput() {
+               $navigation = $this->getNavigationBar();
+               $body = parent::getBody();
+
+               $pout = new ParserOutput;
+               $pout->setText( $navigation . $body . $navigation );
+               $pout->addModuleStyles( $this->getModuleStyles() );
+               return $pout;
+       }
+
        /**
         * @protected
         * @return string
         */
        function getStartBody() {
-               global $wgStylePath;
                $sortClass = $this->getSortHeaderClass();
 
                $s = '';
                $fields = $this->getFieldNames();
 
-               # Make table header
+               // Make table header
                foreach ( $fields as $field => $name ) {
                        if ( strval( $name ) == '' ) {
                                $s .= Html::rawElement( 'th', array(), '&#160;' ) . "\n";
                        } elseif ( $this->isFieldSortable( $field ) ) {
                                $query = array( 'sort' => $field, 'limit' => $this->mLimit );
-                               if ( $field == $this->mSort ) {
-                                       # This is the sorted column
-                                       # Prepare a link that goes in the other sort order
-                                       if ( $this->mDefaultDirection ) {
-                                               # Descending
-                                               $image = 'Arr_d.png';
+                               $linkType = null;
+                               $class = null;
+
+                               if ( $this->mSort == $field ) {
+                                       // The table is sorted by this field already, make a link to sort in the other direction
+                                       // We don't actually know in which direction other fields will be sorted by default…
+                                       if ( $this->mDefaultDirection == IndexPager::DIR_DESCENDING ) {
+                                               $linkType = 'asc';
+                                               $class = "$sortClass TablePager_sort-descending";
                                                $query['asc'] = '1';
                                                $query['desc'] = '';
-                                               $alt = $this->msg( 'descending_abbrev' )->escaped();
                                        } else {
-                                               # Ascending
-                                               $image = 'Arr_u.png';
+                                               $linkType = 'desc';
+                                               $class = "$sortClass TablePager_sort-ascending";
                                                $query['asc'] = '';
                                                $query['desc'] = '1';
-                                               $alt = $this->msg( 'ascending_abbrev' )->escaped();
                                        }
-                                       $image = "$wgStylePath/common/images/$image";
-                                       $link = $this->makeLink(
-                                               Html::element( 'img', array( 'width' => 12, 'height' => 12,
-                                                       'alt' => $alt, 'src' => $image ) ) . htmlspecialchars( $name ), $query );
-                                       $s .= Html::rawElement( 'th', array( 'class' => $sortClass ), $link ) . "\n";
-                               } else {
-                                       $s .= Html::rawElement( 'th', array(),
-                                               $this->makeLink( htmlspecialchars( $name ), $query ) ) . "\n";
                                }
+
+                               $link = $this->makeLink( htmlspecialchars( $name ), $query, $linkType );
+                               $s .= Html::rawElement( 'th', array( 'class' => $class ), $link ) . "\n";
                        } else {
                                $s .= Html::element( 'th', array(), $name ) . "\n";
                        }
@@ -99,7 +150,6 @@ abstract class TablePager extends IndexPager {
 
                $tableClass = $this->getTableClass();
                $ret = Html::openElement( 'table', array(
-                       'style' => 'border:1px;',
                        'class' => "mw-datatable $tableClass" )
                );
                $ret .= Html::rawElement( 'thead', array(), Html::rawElement( 'tr', array(), "\n" . $s . "\n" ) );
@@ -235,45 +285,23 @@ abstract class TablePager extends IndexPager {
         * @return string HTML
         */
        public function getNavigationBar() {
-               global $wgStylePath;
-
                if ( !$this->isNavigationBarShown() ) {
                        return '';
                }
 
-               $path = "$wgStylePath/common/images";
                $labels = array(
                        'first' => 'table_pager_first',
                        'prev' => 'table_pager_prev',
                        'next' => 'table_pager_next',
                        'last' => 'table_pager_last',
                );
-               $images = array(
-                       'first' => 'arrow_first_25.png',
-                       'prev' => 'arrow_left_25.png',
-                       'next' => 'arrow_right_25.png',
-                       'last' => 'arrow_last_25.png',
-               );
-               $disabledImages = array(
-                       'first' => 'arrow_disabled_first_25.png',
-                       'prev' => 'arrow_disabled_left_25.png',
-                       'next' => 'arrow_disabled_right_25.png',
-                       'last' => 'arrow_disabled_last_25.png',
-               );
-               if ( $this->getLanguage()->isRTL() ) {
-                       $keys = array_keys( $labels );
-                       $images = array_combine( $keys, array_reverse( $images ) );
-                       $disabledImages = array_combine( $keys, array_reverse( $disabledImages ) );
-               }
 
                $linkTexts = array();
                $disabledTexts = array();
                foreach ( $labels as $type => $label ) {
                        $msgLabel = $this->msg( $label )->escaped();
-                       $linkTexts[$type] = Html::element( 'img', array( 'src' => "$path/{$images[$type]}",
-                               'alt' => $msgLabel ) ) . "<br />$msgLabel";
-                       $disabledTexts[$type] = Html::element( 'img', array( 'src' => "$path/{$disabledImages[$type]}",
-                               'alt' => $msgLabel ) ) . "<br />$msgLabel";
+                       $linkTexts[$type] = "<div class='TablePager_nav-enabled'>$msgLabel</div>";
+                       $disabledTexts[$type] = "<div class='TablePager_nav-disabled'>$msgLabel</div>";
                }
                $links = $this->getPagingLinks( $linkTexts, $disabledTexts );
 
@@ -281,12 +309,26 @@ abstract class TablePager extends IndexPager {
                $s .= Html::openElement( 'tr' ) . "\n";
                $width = 100 / count( $links ) . '%';
                foreach ( $labels as $type => $label ) {
-                       $s .= Html::rawElement( 'td', array( 'style' => "width:$width;" ), $links[$type] ) . "\n";
+                       // We want every cell to have the same width. We could use table-layout: fixed; in CSS,
+                       // but it only works if we specify the width of a cell or the table and we don't want to.
+                       // There is no better way. <http://www.w3.org/TR/CSS2/tables.html#fixed-table-layout>
+                       $s .= Html::rawElement( 'td',
+                               array( 'style' => "width: $width;", 'class' => "TablePager_nav-$type" ),
+                               $links[$type] ) . "\n";
                }
                $s .= Html::closeElement( 'tr' ) . Html::closeElement( 'table' ) . "\n";
                return $s;
        }
 
+       /**
+        * ResourceLoader modules that must be loaded to provide correct styling for this pager
+        * @since 1.24
+        * @return string[]
+        */
+       public function getModuleStyles() {
+               return array( 'mediawiki.pager.tablePager' );
+       }
+
        /**
         * Get a "<select>" element which has options for each of the allowed limits
         *
@@ -360,13 +402,11 @@ abstract class TablePager extends IndexPager {
         * @return string HTML fragment
         */
        function getLimitForm() {
-               global $wgScript;
-
                return Html::rawElement(
                        'form',
                        array(
                                'method' => 'get',
-                               'action' => $wgScript
+                               'action' => wfScript(),
                        ),
                        "\n" . $this->getLimitDropdown()
                ) . "\n";
index 983fc14..d9f1761 100644 (file)
@@ -44,7 +44,7 @@ class CoreParserFunctions {
                        'canonicalurle', 'formatnum', 'grammar', 'gender', 'plural',
                        'numberofpages', 'numberofusers', 'numberofactiveusers',
                        'numberofarticles', 'numberoffiles', 'numberofadmins',
-                       'numberingroup', 'numberofedits', 'numberofviews', 'language',
+                       'numberingroup', 'numberofedits', 'language',
                        'padleft', 'padright', 'anchorencode', 'defaultsort', 'filepath',
                        'pagesincategory', 'pagesize', 'protectionlevel',
                        'namespacee', 'namespacenumber', 'talkspace', 'talkspacee',
@@ -379,8 +379,7 @@ class CoreParserFunctions {
                $text = $parser->doQuotes( $text );
 
                // remove stripped text (e.g. the UNIQ-QINU stuff) that was generated by tag extensions/whatever
-               $text = preg_replace( '/' . preg_quote( $parser->uniqPrefix(), '/' ) . '.*?'
-                       . preg_quote( Parser::MARKER_SUFFIX, '/' ) . '/', '', $text );
+               $text = $parser->killMarkers( $text );
 
                // list of disallowed tags for DISPLAYTITLE
                // these will be escaped even though they are allowed in normal wiki text
@@ -489,10 +488,6 @@ class CoreParserFunctions {
        public static function numberofedits( $parser, $raw = null ) {
                return self::formatRaw( SiteStats::edits(), $raw );
        }
-       public static function numberofviews( $parser, $raw = null ) {
-               global $wgDisableCounters;
-               return !$wgDisableCounters ? self::formatRaw( SiteStats::views(), $raw ) : '';
-       }
        public static function pagesinnamespace( $parser, $namespace = 0, $raw = null ) {
                return self::formatRaw( SiteStats::pagesInNs( intval( $namespace ) ), $raw );
        }
@@ -1000,11 +995,6 @@ class CoreParserFunctions {
         * @since 1.23
         */
        private static function getCachedRevisionObject( $parser, $title = null ) {
-               static $cache = null;
-               if ( !isset( $cache ) ) {
-                       $cache = new MapCacheLRU( 100 );
-               }
-
                if ( is_null( $title ) ) {
                        return null;
                }
@@ -1024,22 +1014,18 @@ class CoreParserFunctions {
                // Normalize name for cache
                $page = $title->getPrefixedDBkey();
 
-               if ( $cache->has( $page ) ) { // cache contains null values
-                       return $cache->get( $page );
+               if ( !( $parser->currentRevisionCache && $parser->currentRevisionCache->has( $page ) )
+                       && !$parser->incrementExpensiveFunctionCount() ) {
+                       return null;
                }
-               if ( $parser->incrementExpensiveFunctionCount() ) {
-                       $rev = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
-                       $pageID = $rev ? $rev->getPage() : 0;
-                       $revID = $rev ? $rev->getId() : 0;
-                       $cache->set( $page, $rev ); // maybe null
+               $rev = $parser->fetchCurrentRevisionOfTitle( $title );
+               $pageID = $rev ? $rev->getPage() : 0;
+               $revID = $rev ? $rev->getId() : 0;
 
-                       // Register dependency in templatelinks
-                       $parser->getOutput()->addTemplate( $title, $pageID, $revID );
+               // Register dependency in templatelinks
+               $parser->getOutput()->addTemplate( $title, $pageID, $revID );
 
-                       return $rev;
-               }
-               $cache->set( $page, null );
-               return null;
+               return $rev;
        }
 
        /**
index 85920cc..9755ea9 100644 (file)
@@ -35,6 +35,7 @@ class CoreTagHooks {
                $parser->setHook( 'pre', array( __CLASS__, 'pre' ) );
                $parser->setHook( 'nowiki', array( __CLASS__, 'nowiki' ) );
                $parser->setHook( 'gallery', array( __CLASS__, 'gallery' ) );
+               $parser->setHook( 'indicator', array( __CLASS__, 'indicator' ) );
                if ( $wgRawHtml ) {
                        $parser->setHook( 'html', array( __CLASS__, 'html' ) );
                }
@@ -119,4 +120,30 @@ class CoreTagHooks {
        public static function gallery( $content, $attributes, $parser ) {
                return $parser->renderImageGallery( $content, $attributes );
        }
+
+       /**
+        * XML-style tag for page status indicators: icons (or short text snippets) usually displayed in
+        * the top-right corner of the page, outside of the main content.
+        *
+        * @param string $content
+        * @param array $attributes
+        * @param Parser $parser
+        * @param PPFrame $frame
+        * @return string
+        * @since 1.25
+        */
+       public static function indicator( $content, array $attributes, Parser $parser, PPFrame $frame ) {
+               if ( !isset( $attributes['name'] ) || trim( $attributes['name'] ) === '' ) {
+                       return '<span class="error">' .
+                               wfMessage( 'invalid-indicator-name' )->inContentLanguage()->parse() .
+                               '</span>';
+               }
+
+               $parser->getOutput()->setIndicator(
+                       trim( $attributes['name'] ),
+                       Parser::stripOuterParagraph( $parser->recursiveTagParseFully( $content, $frame ) )
+               );
+
+               return '';
+       }
 }
index 61fffc5..e6486ff 100644 (file)
@@ -210,6 +210,14 @@ class Parser {
         */
        public $mLangLinkLanguages;
 
+       /**
+        * @var MapCacheLRU|null
+        * @since 1.24
+        *
+        * A cache of the current revisions of titles. Keys are $title->getPrefixedDbKey()
+        */
+       public $currentRevisionCache;
+
        /**
         * @var bool Recursive call protection.
         * This variable should be treated as if it were private.
@@ -258,6 +266,21 @@ class Parser {
         */
        public function __clone() {
                $this->mInParse = false;
+
+               // Bug 56226: When you create a reference "to" an object field, that
+               // makes the object field itself be a reference too (until the other
+               // reference goes out of scope). When cloning, any field that's a
+               // reference is copied as a reference in the new object. Both of these
+               // are defined PHP5 behaviors, as inconvenient as it is for us when old
+               // hooks from PHP4 days are passing fields by reference.
+               foreach ( array( 'mStripState', 'mVarCache' ) as $k ) {
+                       // Make a non-reference copy of the field, then rebind the field to
+                       // reference the new copy.
+                       $tmp = $this->$k;
+                       $this->$k =& $tmp;
+                       unset( $tmp );
+               }
+
                wfRunHooks( 'ParserCloned', array( $this ) );
        }
 
@@ -305,6 +328,7 @@ class Parser {
                $this->mVarCache = array();
                $this->mUser = null;
                $this->mLangLinkLanguages = array();
+               $this->currentRevisionCache = null;
 
                /**
                 * Prefix for temporary replacement strings for the multipass parser.
@@ -365,7 +389,7 @@ class Parser {
                 * to internalParse() which does all the real work.
                 */
 
-               global $wgUseTidy, $wgAlwaysUseTidy, $wgShowHostnames;
+               global $wgShowHostnames;
                $fname = __METHOD__ . '-' . wfGetCaller();
                wfProfileIn( __METHOD__ );
                wfProfileIn( $fname );
@@ -376,6 +400,7 @@ class Parser {
 
                $this->startParse( $title, $options, self::OT_HTML, $clearState );
 
+               $this->currentRevisionCache = null;
                $this->mInputSize = strlen( $text );
                if ( $this->mOptions->getEnableLimitReport() ) {
                        $this->mOutput->resetParseStartTime();
@@ -405,40 +430,7 @@ class Parser {
                $text = $this->internalParse( $text );
                wfRunHooks( 'ParserAfterParse', array( &$this, &$text, &$this->mStripState ) );
 
-               $text = $this->mStripState->unstripGeneral( $text );
-
-               # Clean up special characters, only run once, next-to-last before doBlockLevels
-               $fixtags = array(
-                       # french spaces, last one Guillemet-left
-                       # only if there is something before the space
-                       '/(.) (?=\\?|:|;|!|%|\\302\\273)/' => '\\1&#160;',
-                       # french spaces, Guillemet-right
-                       '/(\\302\\253) /' => '\\1&#160;',
-                       '/&#160;(!\s*important)/' => ' \\1', # Beware of CSS magic word !important, bug #11874.
-               );
-               $text = preg_replace( array_keys( $fixtags ), array_values( $fixtags ), $text );
-
-               $text = $this->doBlockLevels( $text, $linestart );
-
-               $this->replaceLinkHolders( $text );
-
-               /**
-                * The input doesn't get language converted if
-                * a) It's disabled
-                * b) Content isn't converted
-                * c) It's a conversion table
-                * d) it is an interface message (which is in the user language)
-                */
-               if ( !( $options->getDisableContentConversion()
-                       || isset( $this->mDoubleUnderscores['nocontentconvert'] ) )
-               ) {
-                       if ( !$this->mOptions->getInterfaceMessage() ) {
-                               # The position of the convert() call should not be changed. it
-                               # assumes that the links are all replaced and the only thing left
-                               # is the <nowiki> mark.
-                               $text = $this->getConverterLanguage()->convert( $text );
-                       }
-               }
+               $text = $this->internalParseHalfParsed( $text, true, $linestart );
 
                /**
                 * A converted title will be provided in the output object if title and
@@ -461,45 +453,6 @@ class Parser {
                        }
                }
 
-               $text = $this->mStripState->unstripNoWiki( $text );
-
-               wfRunHooks( 'ParserBeforeTidy', array( &$this, &$text ) );
-
-               $text = $this->replaceTransparentTags( $text );
-               $text = $this->mStripState->unstripGeneral( $text );
-
-               $text = Sanitizer::normalizeCharReferences( $text );
-
-               if ( ( $wgUseTidy && $this->mOptions->getTidy() ) || $wgAlwaysUseTidy ) {
-                       $text = MWTidy::tidy( $text );
-               } else {
-                       # attempt to sanitize at least some nesting problems
-                       # (bug #2702 and quite a few others)
-                       $tidyregs = array(
-                               # ''Something [http://www.cool.com cool''] -->
-                               # <i>Something</i><a href="http://www.cool.com"..><i>cool></i></a>
-                               '/(<([bi])>)(<([bi])>)?([^<]*)(<\/?a[^<]*>)([^<]*)(<\/\\4>)?(<\/\\2>)/' =>
-                               '\\1\\3\\5\\8\\9\\6\\1\\3\\7\\8\\9',
-                               # fix up an anchor inside another anchor, only
-                               # at least for a single single nested link (bug 3695)
-                               '/(<a[^>]+>)([^<]*)(<a[^>]+>[^<]*)<\/a>(.*)<\/a>/' =>
-                               '\\1\\2</a>\\3</a>\\1\\4</a>',
-                               # fix div inside inline elements- doBlockLevels won't wrap a line which
-                               # contains a div, so fix it up here; replace
-                               # div with escaped text
-                               '/(<([aib]) [^>]+>)([^<]*)(<div([^>]*)>)(.*)(<\/div>)([^<]*)(<\/\\2>)/' =>
-                               '\\1\\3&lt;div\\5&gt;\\6&lt;/div&gt;\\8\\9',
-                               # remove empty italic or bold tag pairs, some
-                               # introduced by rules above
-                               '/<([bi])><\/\\1>/' => '',
-                       );
-
-                       $text = preg_replace(
-                               array_keys( $tidyregs ),
-                               array_values( $tidyregs ),
-                               $text );
-               }
-
                if ( $this->mExpensiveFunctionCount > $this->mOptions->getExpensiveParserFunctionLimit() ) {
                        $this->limitationWarn( 'expensive-parserfunction',
                                $this->mExpensiveFunctionCount,
@@ -507,8 +460,6 @@ class Parser {
                        );
                }
 
-               wfRunHooks( 'ParserAfterTidy', array( &$this, &$text ) );
-
                # Information on include size limits, for the benefit of users who try to skirt them
                if ( $this->mOptions->getEnableLimitReport() ) {
                        $max = $this->mOptions->getMaxIncludeSize();
@@ -588,6 +539,7 @@ class Parser {
                $this->mRevisionUser = $oldRevisionUser;
                $this->mRevisionSize = $oldRevisionSize;
                $this->mInputSize = false;
+               $this->currentRevisionCache = null;
                wfProfileOut( $fname );
                wfProfileOut( __METHOD__ );
 
@@ -595,15 +547,26 @@ class Parser {
        }
 
        /**
-        * Recursive parser entry point that can be called from an extension tag
-        * hook.
+        * Half-parse wikitext to half-parsed HTML. This recursive parser entry point
+        * can be called from an extension tag hook.
         *
-        * If $frame is not provided, then template variables (e.g., {{{1}}}) within $text are not expanded
+        * The output of this function IS NOT SAFE PARSED HTML; it is "half-parsed"
+        * instead, which means that lists and links have not been fully parsed yet,
+        * and strip markers are still present.
+        *
+        * Use recursiveTagParseFully() to fully parse wikitext to output-safe HTML.
+        *
+        * Use this function if you're a parser tag hook and you want to parse
+        * wikitext before or after applying additional transformations, and you
+        * intend to *return the result as hook output*, which will cause it to go
+        * through the rest of parsing process automatically.
+        *
+        * If $frame is not provided, then template variables (e.g., {{{1}}}) within
+        * $text are not expanded
         *
         * @param string $text Text extension wants to have parsed
         * @param bool|PPFrame $frame The frame to use for expanding any template variables
-        *
-        * @return string
+        * @return string UNSAFE half-parsed HTML
         */
        public function recursiveTagParse( $text, $frame = false ) {
                wfProfileIn( __METHOD__ );
@@ -614,6 +577,31 @@ class Parser {
                return $text;
        }
 
+       /**
+        * Fully parse wikitext to fully parsed HTML. This recursive parser entry
+        * point can be called from an extension tag hook.
+        *
+        * The output of this function is fully-parsed HTML that is safe for output.
+        * If you're a parser tag hook, you might want to use recursiveTagParse()
+        * instead.
+        *
+        * If $frame is not provided, then template variables (e.g., {{{1}}}) within
+        * $text are not expanded
+        *
+        * @since 1.25
+        *
+        * @param string $text Text extension wants to have parsed
+        * @param bool|PPFrame $frame The frame to use for expanding any template variables
+        * @return string Fully parsed HTML
+        */
+       public function recursiveTagParseFully( $text, $frame = false ) {
+               wfProfileIn( __METHOD__ );
+               $text = $this->recursiveTagParse( $text, $frame );
+               $text = $this->internalParseHalfParsed( $text, false );
+               wfProfileOut( __METHOD__ );
+               return $text;
+       }
+
        /**
         * Expand templates and variables in the text, producing valid, static wikitext.
         * Also removes comments.
@@ -1201,7 +1189,7 @@ class Parser {
        }
 
        /**
-        * Helper function for parse() that transforms wiki markup into
+        * Helper function for parse() that transforms wiki markup into half-parsed
         * HTML. Only called for $mOutputType == self::OT_HTML.
         *
         * @private
@@ -1274,6 +1262,101 @@ class Parser {
                return $text;
        }
 
+       /**
+        * Helper function for parse() that transforms half-parsed HTML into fully
+        * parsed HTML.
+        *
+        * @param string $text
+        * @param bool $isMain
+        * @param bool $linestart
+        * @return string
+        */
+       private function internalParseHalfParsed( $text, $isMain = true, $linestart = true ) {
+               global $wgUseTidy, $wgAlwaysUseTidy;
+
+               $text = $this->mStripState->unstripGeneral( $text );
+
+               # Clean up special characters, only run once, next-to-last before doBlockLevels
+               $fixtags = array(
+                       # french spaces, last one Guillemet-left
+                       # only if there is something before the space
+                       '/(.) (?=\\?|:|;|!|%|\\302\\273)/' => '\\1&#160;',
+                       # french spaces, Guillemet-right
+                       '/(\\302\\253) /' => '\\1&#160;',
+                       '/&#160;(!\s*important)/' => ' \\1', # Beware of CSS magic word !important, bug #11874.
+               );
+               $text = preg_replace( array_keys( $fixtags ), array_values( $fixtags ), $text );
+
+               $text = $this->doBlockLevels( $text, $linestart );
+
+               $this->replaceLinkHolders( $text );
+
+               /**
+                * The input doesn't get language converted if
+                * a) It's disabled
+                * b) Content isn't converted
+                * c) It's a conversion table
+                * d) it is an interface message (which is in the user language)
+                */
+               if ( !( $this->mOptions->getDisableContentConversion()
+                       || isset( $this->mDoubleUnderscores['nocontentconvert'] ) )
+               ) {
+                       if ( !$this->mOptions->getInterfaceMessage() ) {
+                               # The position of the convert() call should not be changed. it
+                               # assumes that the links are all replaced and the only thing left
+                               # is the <nowiki> mark.
+                               $text = $this->getConverterLanguage()->convert( $text );
+                       }
+               }
+
+               $text = $this->mStripState->unstripNoWiki( $text );
+
+               if ( $isMain ) {
+                       wfRunHooks( 'ParserBeforeTidy', array( &$this, &$text ) );
+               }
+
+               $text = $this->replaceTransparentTags( $text );
+               $text = $this->mStripState->unstripGeneral( $text );
+
+               $text = Sanitizer::normalizeCharReferences( $text );
+
+               if ( ( $wgUseTidy && $this->mOptions->getTidy() ) || $wgAlwaysUseTidy ) {
+                       $text = MWTidy::tidy( $text );
+               } else {
+                       # attempt to sanitize at least some nesting problems
+                       # (bug #2702 and quite a few others)
+                       $tidyregs = array(
+                               # ''Something [http://www.cool.com cool''] -->
+                               # <i>Something</i><a href="http://www.cool.com"..><i>cool></i></a>
+                               '/(<([bi])>)(<([bi])>)?([^<]*)(<\/?a[^<]*>)([^<]*)(<\/\\4>)?(<\/\\2>)/' =>
+                               '\\1\\3\\5\\8\\9\\6\\1\\3\\7\\8\\9',
+                               # fix up an anchor inside another anchor, only
+                               # at least for a single single nested link (bug 3695)
+                               '/(<a[^>]+>)([^<]*)(<a[^>]+>[^<]*)<\/a>(.*)<\/a>/' =>
+                               '\\1\\2</a>\\3</a>\\1\\4</a>',
+                               # fix div inside inline elements- doBlockLevels won't wrap a line which
+                               # contains a div, so fix it up here; replace
+                               # div with escaped text
+                               '/(<([aib]) [^>]+>)([^<]*)(<div([^>]*)>)(.*)(<\/div>)([^<]*)(<\/\\2>)/' =>
+                               '\\1\\3&lt;div\\5&gt;\\6&lt;/div&gt;\\8\\9',
+                               # remove empty italic or bold tag pairs, some
+                               # introduced by rules above
+                               '/<([bi])><\/\\1>/' => '',
+                       );
+
+                       $text = preg_replace(
+                               array_keys( $tidyregs ),
+                               array_values( $tidyregs ),
+                               $text );
+               }
+
+               if ( $isMain ) {
+                       wfRunHooks( 'ParserAfterTidy', array( &$this, &$text ) );
+               }
+
+               return $text;
+       }
+
        /**
         * Replace special strings like "ISBN xxx" and "RFC xxx" with
         * magic external links.
@@ -1402,7 +1485,7 @@ class Parser {
                                $this->getExternalLinkAttribs( $url ) );
                        # Register it in the output object...
                        # Replace unnecessary URL escape codes with their equivalent characters
-                       $pasteurized = self::replaceUnusualEscapes( $url );
+                       $pasteurized = self::normalizeLinkUrl( $url );
                        $this->mOutput->addExternalLink( $pasteurized );
                }
                wfProfileOut( __METHOD__ );
@@ -1710,7 +1793,7 @@ class Parser {
                        # Register link in the output object.
                        # Replace unnecessary URL escape codes with the referenced character
                        # This prevents spammers from hiding links from the filters
-                       $pasteurized = self::replaceUnusualEscapes( $url );
+                       $pasteurized = self::normalizeLinkUrl( $url );
                        $this->mOutput->addExternalLink( $pasteurized );
                }
 
@@ -1759,40 +1842,75 @@ class Parser {
        }
 
        /**
-        * Replace unusual URL escape codes with their equivalent characters
+        * Replace unusual escape codes in a URL with their equivalent characters
         *
+        * @deprecated since 1.24, use normalizeLinkUrl
         * @param string $url
         * @return string
-        *
-        * @todo This can merge genuinely required bits in the path or query string,
-        *       breaking legit URLs. A proper fix would treat the various parts of
-        *       the URL differently; as a workaround, just use the output for
-        *       statistical records, not for actual linking/output.
         */
        public static function replaceUnusualEscapes( $url ) {
-               return preg_replace_callback( '/%[0-9A-Fa-f]{2}/',
-                       array( __CLASS__, 'replaceUnusualEscapesCallback' ), $url );
+               wfDeprecated( __METHOD__, '1.24' );
+               return self::normalizeLinkUrl( $url );
        }
 
        /**
-        * Callback function used in replaceUnusualEscapes().
-        * Replaces unusual URL escape codes with their equivalent character
+        * Replace unusual escape codes in a URL with their equivalent characters
         *
-        * @param array $matches
+        * This generally follows the syntax defined in RFC 3986, with special
+        * consideration for HTTP query strings.
         *
+        * @param string $url
         * @return string
         */
-       private static function replaceUnusualEscapesCallback( $matches ) {
-               $char = urldecode( $matches[0] );
-               $ord = ord( $char );
-               # Is it an unsafe or HTTP reserved character according to RFC 1738?
-               if ( $ord > 32 && $ord < 127 && strpos( '<>"#{}|\^~[]`;/?', $char ) === false ) {
-                       # No, shouldn't be escaped
-                       return $char;
-               } else {
-                       # Yes, leave it escaped
-                       return $matches[0];
+       public static function normalizeLinkUrl( $url ) {
+               # First, make sure unsafe characters are encoded
+               $url = preg_replace_callback( '/[\x00-\x20"<>\[\\\\\]^`{|}\x7F-\xFF]/',
+                       function ( $m ) {
+                               return rawurlencode( $m[0] );
+                       },
+                       $url
+               );
+
+               $ret = '';
+               $end = strlen( $url );
+
+               # Fragment part - 'fragment'
+               $start = strpos( $url, '#' );
+               if ( $start !== false && $start < $end ) {
+                       $ret = self::normalizeUrlComponent(
+                               substr( $url, $start, $end - $start ), '"#%<>[\]^`{|}' ) . $ret;
+                       $end = $start;
+               }
+
+               # Query part - 'query' minus &=+;
+               $start = strpos( $url, '?' );
+               if ( $start !== false && $start < $end ) {
+                       $ret = self::normalizeUrlComponent(
+                               substr( $url, $start, $end - $start ), '"#%<>[\]^`{|}&=+;' ) . $ret;
+                       $end = $start;
                }
+
+               # Scheme and path part - 'pchar'
+               # (we assume no userinfo or encoded colons in the host)
+               $ret = self::normalizeUrlComponent(
+                       substr( $url, 0, $end ), '"#%<>[\]^`{|}/?' ) . $ret;
+
+               return $ret;
+       }
+
+       private static function normalizeUrlComponent( $component, $unsafe ) {
+               $callback = function ( $matches ) use ( $unsafe ) {
+                       $char = urldecode( $matches[0] );
+                       $ord = ord( $char );
+                       if ( $ord > 32 && $ord < 127 && strpos( $unsafe, $char ) === false ) {
+                               # Unescape it
+                               return $char;
+                       } else {
+                               # Leave it escaped, but use uppercase for a-f
+                               return strtoupper( $matches[0] );
+                       }
+               };
+               return preg_replace_callback( '/%[0-9A-Fa-f]{2}/', $callback, $component );
        }
 
        /**
@@ -2533,11 +2651,11 @@ class Parser {
                                        $t
                                );
 
-                               if ( $openmatch or $closematch ) {
+                               if ( $openmatch || $closematch ) {
                                        $paragraphStack = false;
                                        # @todo bug 5718: paragraph closed
                                        $output .= $this->closeParagraph();
-                                       if ( $preOpenMatch and !$preCloseMatch ) {
+                                       if ( $preOpenMatch && !$preCloseMatch ) {
                                                $this->mInPre = true;
                                        }
                                        $bqOffset = 0;
@@ -3094,10 +3212,6 @@ class Parser {
                        case 'numberofedits':
                                $value = $pageLang->formatNum( SiteStats::edits() );
                                break;
-                       case 'numberofviews':
-                               global $wgDisableCounters;
-                               $value = !$wgDisableCounters ? $pageLang->formatNum( SiteStats::views() ) : '';
-                               break;
                        case 'currenttimestamp':
                                $value = wfTimestamp( TS_MW, $ts );
                                break;
@@ -3794,6 +3908,44 @@ class Parser {
                return array( $dom, $title );
        }
 
+       /**
+        * Fetch the current revision of a given title. Note that the revision
+        * (and even the title) may not exist in the database, so everything
+        * contributing to the output of the parser should use this method
+        * where possible, rather than getting the revisions themselves. This
+        * method also caches its results, so using it benefits performance.
+        *
+        * @since 1.24
+        * @param Title $title
+        * @return Revision
+        */
+       public function fetchCurrentRevisionOfTitle( $title ) {
+               $cacheKey = $title->getPrefixedDBkey();
+               if ( !$this->currentRevisionCache ) {
+                       $this->currentRevisionCache = new MapCacheLRU( 100 );
+               }
+               if ( !$this->currentRevisionCache->has( $cacheKey ) ) {
+                       $this->currentRevisionCache->set( $cacheKey,
+                               // Defaults to Parser::statelessFetchRevision()
+                               call_user_func( $this->mOptions->getCurrentRevisionCallback(), $title, $this )
+                       );
+               }
+               return $this->currentRevisionCache->get( $cacheKey );
+       }
+
+       /**
+        * Wrapper around Revision::newFromTitle to allow passing additional parameters
+        * without passing them on to it.
+        *
+        * @since 1.24
+        * @param Title $title
+        * @param Parser|bool $parser
+        * @return Revision
+        */
+       public static function statelessFetchRevision( $title, $parser = false ) {
+               return Revision::newFromTitle( $title );
+       }
+
        /**
         * Fetch the unparsed text of a template and register a reference to it.
         * @param Title $title
@@ -3859,9 +4011,13 @@ class Parser {
                                break;
                        }
                        # Get the revision
-                       $rev = $id
-                               ? Revision::newFromId( $id )
-                               : Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
+                       if ( $id ) {
+                               $rev = Revision::newFromId( $id );
+                       } elseif ( $parser ) {
+                               $rev = $parser->fetchCurrentRevisionOfTitle( $title );
+                       } else {
+                               $rev = Revision::newFromTitle( $title );
+                       }
                        $rev_id = $rev ? $rev->getId() : 0;
                        # If there is no current revision, there is no page
                        if ( $id === false && !$rev ) {
@@ -4256,40 +4412,12 @@ class Parser {
        }
 
        /**
-        * Add a tracking category, getting the title from a system message,
-        * or print a debug message if the title is invalid.
-        *
-        * Please add any message that you use with this function to
-        * $wgTrackingCategories. That way they will be listed on
-        * Special:TrackingCategories.
-        *
+        * @see ParserOutput::addTrackingCategory()
         * @param string $msg Message key
         * @return bool Whether the addition was successful
         */
        public function addTrackingCategory( $msg ) {
-               if ( $this->mTitle->getNamespace() === NS_SPECIAL ) {
-                       wfDebug( __METHOD__ . ": Not adding tracking category $msg to special page!\n" );
-                       return false;
-               }
-               // Important to parse with correct title (bug 31469)
-               $cat = wfMessage( $msg )
-                       ->title( $this->getTitle() )
-                       ->inContentLanguage()
-                       ->text();
-
-               # Allow tracking categories to be disabled by setting them to "-"
-               if ( $cat === '-' ) {
-                       return false;
-               }
-
-               $containerCategory = Title::makeTitleSafe( NS_CATEGORY, $cat );
-               if ( $containerCategory ) {
-                       $this->mOutput->addCategory( $containerCategory->getDBkey(), $this->getDefaultSort() );
-                       return true;
-               } else {
-                       wfDebug( __METHOD__ . ": [[MediaWiki:$msg]] is not a valid title!\n" );
-                       return false;
-               }
+               return $this->mOutput->addTrackingCategory( $msg, $this->mTitle );
        }
 
        /**
@@ -4597,13 +4725,13 @@ class Parser {
                                if ( $isTemplate ) {
                                        # Put a T flag in the section identifier, to indicate to extractSections()
                                        # that sections inside <includeonly> should be counted.
-                                       $editlinkArgs = array( $titleText, "T-$sectionIndex"/*, null */ );
+                                       $editsectionPage = $titleText;
+                                       $editsectionSection = "T-$sectionIndex";
+                                       $editsectionContent = null;
                                } else {
-                                       $editlinkArgs = array(
-                                               $this->mTitle->getPrefixedText(),
-                                               $sectionIndex,
-                                               $headlineHint
-                                       );
+                                       $editsectionPage = $this->mTitle->getPrefixedText();
+                                       $editsectionSection = $sectionIndex;
+                                       $editsectionContent = $headlineHint;
                                }
                                // We use a bit of pesudo-xml for editsection markers. The
                                // language converter is run later on. Using a UNIQ style marker
@@ -4616,10 +4744,11 @@ class Parser {
                                // important bits of data, but put the headline hint inside a
                                // content block because the language converter is supposed to
                                // be able to convert that piece of data.
-                               $editlink = '<mw:editsection page="' . htmlspecialchars( $editlinkArgs[0] );
-                               $editlink .= '" section="' . htmlspecialchars( $editlinkArgs[1] ) . '"';
-                               if ( isset( $editlinkArgs[2] ) ) {
-                                       $editlink .= '>' . $editlinkArgs[2] . '</mw:editsection>';
+                               // Gets replaced with html in ParserOutput::getText
+                               $editlink = '<mw:editsection page="' . htmlspecialchars( $editsectionPage );
+                               $editlink .= '" section="' . htmlspecialchars( $editsectionSection ) . '"';
+                               if ( $editsectionContent !== null ) {
+                                       $editlink .= '>' . $editsectionContent . '</mw:editsection>';
                                } else {
                                        $editlink .= '/>';
                                }
index 2ca9d50..b570fa5 100644 (file)
@@ -116,6 +116,12 @@ class ParserOptions {
         */
        public $mRemoveComments = true;
 
+       /**
+        * Callback for current revision fetching. Used as first argument to call_user_func().
+        */
+       public $mCurrentRevisionCallback =
+               array( 'Parser', 'statelessFetchRevision' );
+
        /**
         * Callback for template fetching. Used as first argument to call_user_func().
         */
@@ -211,6 +217,13 @@ class ParserOptions {
         */
        protected $onAccessCallback = null;
 
+       /**
+        * If the page being parsed is a redirect, this should hold the redirect
+        * target.
+        * @var Title|null
+        */
+       private $redirectTarget = null;
+
        public function getInterwikiMagic() {
                return $this->mInterwikiMagic;
        }
@@ -282,6 +295,11 @@ class ParserOptions {
                return $this->mRemoveComments;
        }
 
+       /* @since 1.24 */
+       public function getCurrentRevisionCallback() {
+               return $this->mCurrentRevisionCallback;
+       }
+
        public function getTemplateCallback() {
                return $this->mTemplateCallback;
        }
@@ -455,6 +473,11 @@ class ParserOptions {
                return wfSetVar( $this->mRemoveComments, $x );
        }
 
+       /* @since 1.24 */
+       public function setCurrentRevisionCallback( $x ) {
+               return wfSetVar( $this->mCurrentRevisionCallback, $x );
+       }
+
        public function setTemplateCallback( $x ) {
                return wfSetVar( $this->mTemplateCallback, $x );
        }
@@ -515,6 +538,30 @@ class ParserOptions {
                return wfSetVar( $this->mIsPrintable, $x );
        }
 
+       /**
+        * Set the redirect target.
+        *
+        * Note that setting or changing this does not *make* the page a redirect
+        * or change its target, it merely records the information for reference
+        * during the parse.
+        *
+        * @since 1.24
+        * @param Title|null $title
+        */
+       function setRedirectTarget( $title ) {
+               $this->redirectTarget = $title;
+       }
+
+       /**
+        * Get the previously-set redirect target.
+        *
+        * @since 1.24
+        * @return Title|null
+        */
+       function getRedirectTarget() {
+               return $this->redirectTarget;
+       }
+
        /**
         * Extra key that should be present in the parser cache key.
         * @param string $key
index 7fa4436..428e7b2 100644 (file)
@@ -25,6 +25,7 @@ class ParserOutput extends CacheTime {
        public $mText,                       # The output text
                $mLanguageLinks,              # List of the full text of language links, in the order they appear
                $mCategories,                 # Map of category names to sort keys
+               $mIndicators = array(),       # Page status indicators, usually displayed in top-right corner
                $mTitleText,                  # title text of the chosen language variant
                $mLinks = array(),            # 2-D map of NS/DBK to ID for the links in the document. ID=zero for broken.
                $mTemplates = array(),        # 2-D map of NS/DBK to ID for the template references. ID=zero for broken.
@@ -50,13 +51,13 @@ class ParserOutput extends CacheTime {
                $mTOCHTML = '',               # HTML of the TOC
                $mTimestamp,                  # Timestamp of the revision
                $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 $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 $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 $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
 
        const EDITSECTION_REGEX =
                '#<(?:mw:)?editsection page="(.*?)" section="(.*?)"(?:/>|>(.*?)(</(?:mw:)?editsection>))#';
@@ -75,8 +76,27 @@ class ParserOutput extends CacheTime {
                wfProfileIn( __METHOD__ );
                $text = $this->mText;
                if ( $this->mEditSectionTokens ) {
-                       $text = preg_replace_callback( ParserOutput::EDITSECTION_REGEX,
-                               array( &$this, 'replaceEditSectionLinksCallback' ), $text );
+                       $text = preg_replace_callback(
+                               ParserOutput::EDITSECTION_REGEX,
+                               function ( $m ) {
+                                       global $wgOut, $wgLang;
+                                       $editsectionPage = Title::newFromText( htmlspecialchars_decode( $m[1] ) );
+                                       $editsectionSection = htmlspecialchars_decode( $m[2] );
+                                       $editsectionContent = isset( $m[4] ) ? $m[3] : null;
+
+                                       if ( !is_object( $editsectionPage ) ) {
+                                               throw new MWException( "Bad parser output text." );
+                                       }
+
+                                       $skin = $wgOut->getSkin();
+                                       return call_user_func_array(
+                                               array( $skin, 'doEditSectionLink' ),
+                                               array( $editsectionPage, $editsectionSection,
+                                                       $editsectionContent, $wgLang->getCode() )
+                                       );
+                               },
+                               $text
+                       );
                } else {
                        $text = preg_replace( ParserOutput::EDITSECTION_REGEX, '', $text );
                }
@@ -95,29 +115,6 @@ class ParserOutput extends CacheTime {
                return $text;
        }
 
-       /**
-        * callback used by getText to replace editsection tokens
-        * @private
-        * @param array $m
-        * @throws MWException
-        * @return mixed
-        */
-       public function replaceEditSectionLinksCallback( $m ) {
-               global $wgOut, $wgLang;
-               $args = array(
-                       htmlspecialchars_decode( $m[1] ),
-                       htmlspecialchars_decode( $m[2] ),
-                       isset( $m[4] ) ? $m[3] : null,
-               );
-               $args[0] = Title::newFromText( $args[0] );
-               if ( !is_object( $args[0] ) ) {
-                       throw new MWException( "Bad parser output text." );
-               }
-               $args[] = $wgLang->getCode();
-               $skin = $wgOut->getSkin();
-               return call_user_func_array( array( $skin, 'doEditSectionLink' ), $args );
-       }
-
        public function &getLanguageLinks() {
                return $this->mLanguageLinks;
        }
@@ -134,6 +131,13 @@ class ParserOutput extends CacheTime {
                return $this->mCategories;
        }
 
+       /**
+        * @since 1.25
+        */
+       public function getIndicators() {
+               return $this->mIndicators;
+       }
+
        public function getTitleText() {
                return $this->mTitleText;
        }
@@ -271,6 +275,13 @@ class ParserOutput extends CacheTime {
                $this->mCategories[$c] = $sort;
        }
 
+       /**
+        * @since 1.25
+        */
+       public function setIndicator( $id, $content ) {
+               $this->mIndicators[$id] = $content;
+       }
+
        public function addLanguageLink( $t ) {
                $this->mLanguageLinks[] = $t;
        }
@@ -475,6 +486,46 @@ class ParserOutput extends CacheTime {
                $this->mPreventClickjacking = $this->mPreventClickjacking || $out->getPreventClickjacking();
        }
 
+       /**
+        * Add a tracking category, getting the title from a system message,
+        * or print a debug message if the title is invalid.
+        *
+        * Please add any message that you use with this function to
+        * $wgTrackingCategories. That way they will be listed on
+        * Special:TrackingCategories.
+        *
+        * @param string $msg Message key
+        * @param Title $title title of the page which is being tracked
+        * @return bool Whether the addition was successful
+        * @since 1.25
+        */
+       public function addTrackingCategory( $msg, $title ) {
+               if ( $title->getNamespace() === NS_SPECIAL ) {
+                       wfDebug( __METHOD__ . ": Not adding tracking category $msg to special page!\n" );
+                       return false;
+               }
+
+               // Important to parse with correct title (bug 31469)
+               $cat = wfMessage( $msg )
+                       ->title( $title )
+                       ->inContentLanguage()
+                       ->text();
+
+               # Allow tracking categories to be disabled by setting them to "-"
+               if ( $cat === '-' ) {
+                       return false;
+               }
+
+               $containerCategory = Title::makeTitleSafe( NS_CATEGORY, $cat );
+               if ( $containerCategory ) {
+                       $this->addCategory( $containerCategory->getDBkey(), $this->getProperty( 'defaultsort' ) ?: '' );
+                       return true;
+               } else {
+                       wfDebug( __METHOD__ . ": [[MediaWiki:$msg]] is not a valid title!\n" );
+                       return false;
+               }
+       }
+
        /**
         * Override the title to be used for display
         * -- this is assumed to have been validated
@@ -737,10 +788,12 @@ class ParserOutput extends CacheTime {
                if ( !$clock || $clock === 'wall' ) {
                        $ret['wall'] = microtime( true );
                }
-               if ( ( !$clock || $clock === 'cpu' ) && function_exists( 'getrusage' ) ) {
-                       $ru = getrusage();
-                       $ret['cpu'] = $ru['ru_utime.tv_sec'] + $ru['ru_utime.tv_usec'] / 1e6;
-                       $ret['cpu'] += $ru['ru_stime.tv_sec'] + $ru['ru_stime.tv_usec'] / 1e6;
+               if ( !$clock || $clock === 'cpu' ) {
+                       $ru = wfGetRusage();
+                       if ( $ru ) {
+                               $ret['cpu'] = $ru['ru_utime.tv_sec'] + $ru['ru_utime.tv_usec'] / 1e6;
+                               $ret['cpu'] += $ru['ru_stime.tv_sec'] + $ru['ru_stime.tv_usec'] / 1e6;
+                       }
                }
                return $ret;
        }
index 8416ac3..2cce574 100644 (file)
@@ -1033,7 +1033,7 @@ class PPFrame_DOM implements PPFrame {
                                if ( $arg instanceof PPNode ) {
                                        $arg = $arg->node;
                                }
-                               if ( !$xpath ) {
+                               if ( !$xpath || $xpath->document !== $arg->ownerDocument ) {
                                        $xpath = new DOMXPath( $arg->ownerDocument );
                                }
 
@@ -1043,11 +1043,17 @@ class PPFrame_DOM implements PPFrame {
                                        // Numbered parameter
                                        $index = $nameNodes->item( 0 )->attributes->getNamedItem( 'index' )->textContent;
                                        $index = $index - $indexOffset;
+                                       if ( isset( $namedArgs[$index] ) || isset( $numberedArgs[$index] ) ) {
+                                               $this->parser->addTrackingCategory( 'duplicate-args-category' );
+                                       }
                                        $numberedArgs[$index] = $value->item( 0 );
                                        unset( $namedArgs[$index] );
                                } else {
                                        // Named parameter
                                        $name = trim( $this->expand( $nameNodes->item( 0 ), PPFrame::STRIP_COMMENTS ) );
+                                       if ( isset( $namedArgs[$name] ) || isset( $numberedArgs[$name] ) ) {
+                                               $this->parser->addTrackingCategory( 'duplicate-args-category' );
+                                       }
                                        $namedArgs[$name] = $value->item( 0 );
                                        unset( $numberedArgs[$name] );
                                }
index 6376396..b4b14dc 100644 (file)
@@ -985,11 +985,17 @@ class PPFrame_Hash implements PPFrame {
                                if ( $bits['index'] !== '' ) {
                                        // Numbered parameter
                                        $index = $bits['index'] - $indexOffset;
+                                       if ( isset( $namedArgs[$index] ) || isset( $numberedArgs[$index] ) ) {
+                                               $this->parser->addTrackingCategory( 'duplicate-args-category' );
+                                       }
                                        $numberedArgs[$index] = $bits['value'];
                                        unset( $namedArgs[$index] );
                                } else {
                                        // Named parameter
                                        $name = trim( $this->expand( $bits['name'], PPFrame::STRIP_COMMENTS ) );
+                                       if ( isset( $namedArgs[$name] ) || isset( $numberedArgs[$name] ) ) {
+                                               $this->parser->addTrackingCategory( 'duplicate-args-category' );
+                                       }
                                        $namedArgs[$name] = $bits['value'];
                                        unset( $numberedArgs[$name] );
                                }
index 0ba407f..afa5cac 100644 (file)
@@ -38,7 +38,7 @@ class MWOldPassword extends ParameterizedPassword {
        public function crypt( $plaintext ) {
                global $wgPasswordSalt;
 
-               if ( $wgPasswordSalt && count( $this->args ) == 1 ) {
+               if ( $wgPasswordSalt && count( $this->args ) === 1 ) {
                        $this->hash = md5( $this->args[0] . '-' . md5( $plaintext ) );
                } else {
                        $this->args = array();
index 4d6e415..187f895 100644 (file)
@@ -83,10 +83,14 @@ abstract class ParameterizedPassword extends Password {
        }
 
        public function toString() {
-               return
-                       ':' . $this->config['type'] . ':' .
-                       implode( $this->getDelimiter(), array_merge( $this->params, $this->args ) ) .
-                       $this->getDelimiter() . $this->hash;
+               $str = ':' . $this->config['type'] . ':';
+
+               if ( count( $this->params ) || count( $this->args ) ) {
+                       $str .= implode( $this->getDelimiter(), array_merge( $this->params, $this->args ) );
+                       $str .= $this->getDelimiter();
+               }
+
+               return $str . $this->hash;
        }
 
        /**
index 3b4ebb1..86a3fef 100644 (file)
@@ -68,6 +68,15 @@ final class PasswordFactory {
                $this->default = $type;
        }
 
+       /**
+        * Get the default password type
+        *
+        * @return string
+        */
+       public function getDefaultType() {
+               return $this->default;
+       }
+
        /**
         * Initialize the internal static variables using the global variables
         *
@@ -141,11 +150,15 @@ final class PasswordFactory {
         * If no existing object is given, make a new default object. If one is given, clone that
         * object. Then pass the plaintext to Password::crypt().
         *
-        * @param string $password Plaintext password
+        * @param string|null $password Plaintext password, or null for an invalid password
         * @param Password|null $existing Optional existing hash to get options from
         * @return Password
         */
        public function newFromPlaintext( $password, Password $existing = null ) {
+               if ( $password === null ) {
+                       return new InvalidPassword( $this, array( 'type' => '' ), null );
+               }
+
                if ( $existing === null ) {
                        $config = $this->types[$this->default];
                        $obj = new $config['class']( $this, $config );
diff --git a/includes/profiler/ProfileSection.php b/includes/profiler/ProfileSection.php
new file mode 100644 (file)
index 0000000..ca80ebc
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Function scope profiling assistant
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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
+ */
+
+/**
+ * Class for handling function-scope profiling
+ *
+ * @since 1.22
+ */
+class ProfileSection {
+       /** @var string $name Method name */
+       protected $name;
+       /** @var boolean $enabled Is profiling enabled? */
+       protected $enabled = false;
+
+       /**
+        * Begin profiling of a function and return an object that ends profiling
+        * of the function when that object leaves scope. As long as the object is
+        * not specifically linked to other objects, it will fall out of scope at
+        * the same moment that the function to be profiled terminates.
+        *
+        * This is typically called like:
+        * <code>$section = new ProfileSection( __METHOD__ );</code>
+        *
+        * @param string $name Name of the function to profile
+        */
+       public function __construct( $name ) {
+               $this->name = $name;
+               // Use Profiler member variable directly to reduce overhead
+               if ( Profiler::$__instance === null ) {
+                       Profiler::instance();
+               }
+               if ( !( Profiler::$__instance instanceof ProfilerStub ) ) {
+                       $this->enabled = true;
+                       Profiler::$__instance->profileIn( $this->name );
+               }
+       }
+
+       function __destruct() {
+               if ( $this->enabled ) {
+                       Profiler::$__instance->profileOut( $this->name );
+               }
+       }
+}
index 7b8f340..4c12b10 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Base class and functions for profiling.
+ * Base class for profiling.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * @file
  * @ingroup Profiler
  * @defgroup Profiler Profiler
- * This file is only included if profiling is enabled
  */
 
 /**
- * Begin profiling of a function
- * @param string $functionname Name of the function we will profile
- */
-function wfProfileIn( $functionname ) {
-       if ( Profiler::$__instance === null ) { // use this directly to reduce overhead
-               Profiler::instance();
-       }
-       if ( !( Profiler::$__instance instanceof ProfilerStub ) ) {
-               Profiler::$__instance->profileIn( $functionname );
-       }
-}
-
-/**
- * Stop profiling of a function
- * @param string $functionname Name of the function we have profiled
- */
-function wfProfileOut( $functionname = 'missing' ) {
-       if ( Profiler::$__instance === null ) { // use this directly to reduce overhead
-               Profiler::instance();
-       }
-       if ( !( Profiler::$__instance instanceof ProfilerStub ) ) {
-               Profiler::$__instance->profileOut( $functionname );
-       }
-}
-
-/**
- * Class for handling function-scope profiling
- *
- * @since 1.22
- */
-class ProfileSection {
-       protected $name; // string; method name
-       protected $enabled = false; // boolean; whether profiling is enabled
-
-       /**
-        * Begin profiling of a function and return an object that ends profiling of
-        * the function when that object leaves scope. As long as the object is not
-        * specifically linked to other objects, it will fall out of scope at the same
-        * moment that the function to be profiled terminates.
-        *
-        * This is typically called like:
-        * <code>$section = new ProfileSection( __METHOD__ );</code>
-        *
-        * @param string $name Name of the function to profile
-        */
-       public function __construct( $name ) {
-               $this->name = $name;
-               if ( Profiler::$__instance === null ) { // use this directly to reduce overhead
-                       Profiler::instance();
-               }
-               if ( !( Profiler::$__instance instanceof ProfilerStub ) ) {
-                       $this->enabled = true;
-                       Profiler::$__instance->profileIn( $this->name );
-               }
-       }
-
-       function __destruct() {
-               if ( $this->enabled ) {
-                       Profiler::$__instance->profileOut( $this->name );
-               }
-       }
-}
-
-/**
- * Profiler base class that defines the interface and some trivial functionality
+ * Profiler base class that defines the interface and some trivial
+ * functionality
  *
  * @ingroup Profiler
  */
 abstract class Profiler {
        /** @var string|bool Profiler ID for bucketing data */
-       protected $mProfileID = false;
+       protected $profileID = false;
        /** @var bool Whether MediaWiki is in a SkinTemplate output context */
-       protected $mTemplated = false;
+       protected $templated = false;
 
        /** @var TransactionProfiler */
        protected $trxProfiler;
@@ -111,7 +47,7 @@ abstract class Profiler {
         */
        public function __construct( array $params ) {
                if ( isset( $params['profileID'] ) ) {
-                       $this->mProfileID = $params['profileID'];
+                       $this->profileID = $params['profileID'];
                }
                $this->trxProfiler = new TransactionProfiler();
        }
@@ -126,14 +62,10 @@ abstract class Profiler {
                        if ( is_array( $wgProfiler ) ) {
                                if ( !isset( $wgProfiler['class'] ) ) {
                                        $class = 'ProfilerStub';
-                               } elseif ( $wgProfiler['class'] === 'Profiler' ) {
-                                       $class = 'ProfilerStub'; // b/c; don't explode
                                } else {
                                        $class = $wgProfiler['class'];
                                }
                                self::$__instance = new $class( $wgProfiler );
-                       } elseif ( $wgProfiler instanceof Profiler ) {
-                               self::$__instance = $wgProfiler; // back-compat
                        } else {
                                self::$__instance = new ProfilerStub( array() );
                        }
@@ -141,14 +73,6 @@ abstract class Profiler {
                return self::$__instance;
        }
 
-       /**
-        * Set the profiler to a specific profiler instance. Mostly for dumpHTML
-        * @param Profiler $p
-        */
-       final public static function setInstance( Profiler $p ) {
-               self::$__instance = $p;
-       }
-
        /**
         * Return whether this a stub profiler
         *
@@ -172,17 +96,17 @@ abstract class Profiler {
         * @param string $id
         */
        public function setProfileID( $id ) {
-               $this->mProfileID = $id;
+               $this->profileID = $id;
        }
 
        /**
         * @return string
         */
        public function getProfileID() {
-               if ( $this->mProfileID === false ) {
+               if ( $this->profileID === false ) {
                        return wfWikiID();
                } else {
-                       return $this->mProfileID;
+                       return $this->profileID;
                }
        }
 
@@ -201,31 +125,11 @@ abstract class Profiler {
        abstract public function profileOut( $functionname );
 
        /**
-        * Mark a DB as in a transaction with one or more writes pending
-        *
-        * Note that there can be multiple connections to a single DB.
-        *
-        * @param string $server DB server
-        * @param string $db DB name
-        * @param string $id Resource ID string of connection
-        */
-       public function transactionWritingIn( $server, $db, $id = '' ) {
-               $this->trxProfiler->transactionWritingIn( $server, $db, $id );
-       }
-
-       /**
-        * Mark a DB as no longer in a transaction
-        *
-        * This will check if locks are possibly held for longer than
-        * needed and log any affected transactions to a special DB log.
-        * Note that there can be multiple connections to a single DB.
-        *
-        * @param string $server DB server
-        * @param string $db DB name
-        * @param string $id Resource ID string of connection
+        * @return TransactionProfiler
+        * @since 1.25
         */
-       public function transactionWritingOut( $server, $db, $id = '' ) {
-               $this->trxProfiler->transactionWritingOut( $server, $db, $id );
+       public function getTransactionProfiler() {
+               return $this->trxProfiler;
        }
 
        /**
@@ -244,7 +148,7 @@ abstract class Profiler {
         * @param bool $t
         */
        public function setTemplated( $t ) {
-               $this->mTemplated = $t;
+               $this->templated = $t;
        }
 
        /**
@@ -272,10 +176,10 @@ abstract class Profiler {
         */
        protected function getTime( $metric = 'wall' ) {
                if ( $metric === 'cpu' || $metric === 'user' ) {
-                       if ( !function_exists( 'getrusage' ) ) {
+                       $ru = wfGetRusage();
+                       if ( !$ru ) {
                                return 0;
                        }
-                       $ru = getrusage();
                        $time = $ru['ru_utime.tv_sec'] + $ru['ru_utime.tv_usec'] / 1e6;
                        if ( $metric === 'cpu' ) {
                                # This is the time of system calls, added to the user time
@@ -322,131 +226,4 @@ abstract class Profiler {
                        }
                }
        }
-
-       /**
-        * Add an entry in the debug log file
-        *
-        * @param string $s String to output
-        */
-       protected function debug( $s ) {
-               if ( function_exists( 'wfDebug' ) ) {
-                       wfDebug( $s );
-               }
-       }
-
-       /**
-        * Add an entry in the debug log group
-        *
-        * @param string $group Group to send the message to
-        * @param string $s String to output
-        */
-       protected function debugGroup( $group, $s ) {
-               if ( function_exists( 'wfDebugLog' ) ) {
-                       wfDebugLog( $group, $s );
-               }
-       }
-}
-
-/**
- * Helper class that detects high-contention DB queries via profiling calls
- *
- * This class is meant to work with a Profiler, as the later already knows
- * when methods start and finish (which may take place during transactions).
- *
- * @since 1.24
- */
-class TransactionProfiler {
-       /** @var float Seconds */
-       protected $mDBLockThreshold = 3.0;
-       /** @var array DB/server name => (active trx count, time, DBs involved) */
-       protected $mDBTrxHoldingLocks = array();
-       /** @var array DB/server name => list of (function name, elapsed time) */
-       protected $mDBTrxMethodTimes = array();
-
-       /**
-        * Mark a DB as in a transaction with one or more writes pending
-        *
-        * Note that there can be multiple connections to a single DB.
-        *
-        * @param string $server DB server
-        * @param string $db DB name
-        * @param string $id ID string of transaction
-        */
-       public function transactionWritingIn( $server, $db, $id ) {
-               $name = "{$server} ({$db}) (TRX#$id)";
-               if ( isset( $this->mDBTrxHoldingLocks[$name] ) ) {
-                       wfDebugLog( 'DBPerformance', "Nested transaction for '$name' - out of sync." );
-               }
-               $this->mDBTrxHoldingLocks[$name] =
-                       array( 'start' => microtime( true ), 'conns' => array() );
-               $this->mDBTrxMethodTimes[$name] = array();
-
-               foreach ( $this->mDBTrxHoldingLocks as $name => &$info ) {
-                       $info['conns'][$name] = 1; // track all DBs in transactions for this transaction
-               }
-       }
-
-       /**
-        * Register the name and time of a method for slow DB trx detection
-        *
-        * This method is only to be called by the Profiler class as methods finish
-        *
-        * @param string $method Function name
-        * @param float $realtime Wal time ellapsed
-        */
-       public function recordFunctionCompletion( $method, $realtime ) {
-               if ( !$this->mDBTrxHoldingLocks ) {
-                       return; // short-circuit
-               // @todo hardcoded check is a tad janky (what about FOR UPDATE?)
-               } elseif ( !preg_match( '/^query-m: (?!SELECT)/', $method )
-                       && $realtime < $this->mDBLockThreshold
-               ) {
-                       return; // not a DB master query nor slow enough
-               }
-               $now = microtime( true );
-               foreach ( $this->mDBTrxHoldingLocks as $name => $info ) {
-                       // Hacky check to exclude entries from before the first TRX write
-                       if ( ( $now - $realtime ) >= $info['start'] ) {
-                               $this->mDBTrxMethodTimes[$name][] = array( $method, $realtime );
-                       }
-               }
-       }
-
-       /**
-        * Mark a DB as no longer in a transaction
-        *
-        * This will check if locks are possibly held for longer than
-        * needed and log any affected transactions to a special DB log.
-        * Note that there can be multiple connections to a single DB.
-        *
-        * @param string $server DB server
-        * @param string $db DB name
-        * @param string $id ID string of transaction
-        */
-       public function transactionWritingOut( $server, $db, $id ) {
-               $name = "{$server} ({$db}) (TRX#$id)";
-               if ( !isset( $this->mDBTrxMethodTimes[$name] ) ) {
-                       wfDebugLog( 'DBPerformance', "Detected no transaction for '$name' - out of sync." );
-                       return;
-               }
-               $slow = false;
-               foreach ( $this->mDBTrxMethodTimes[$name] as $info ) {
-                       $realtime = $info[1];
-                       if ( $realtime >= $this->mDBLockThreshold ) {
-                               $slow = true;
-                               break;
-                       }
-               }
-               if ( $slow ) {
-                       $dbs = implode( ', ', array_keys( $this->mDBTrxHoldingLocks[$name]['conns'] ) );
-                       $msg = "Sub-optimal transaction on DB(s) [{$dbs}]:\n";
-                       foreach ( $this->mDBTrxMethodTimes[$name] as $i => $info ) {
-                               list( $method, $realtime ) = $info;
-                               $msg .= sprintf( "%d\t%.6f\t%s\n", $i, $realtime, $method );
-                       }
-                       wfDebugLog( 'DBPerformance', $msg );
-               }
-               unset( $this->mDBTrxHoldingLocks[$name] );
-               unset( $this->mDBTrxMethodTimes[$name] );
-       }
 }
diff --git a/includes/profiler/ProfilerFunctions.php b/includes/profiler/ProfilerFunctions.php
new file mode 100644 (file)
index 0000000..a0d5943
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Core profiling functions. Have to exist before basically anything.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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
+ */
+
+/**
+ * Get system resource usage of current request context.
+ * Invokes the getrusage(2) system call, requesting RUSAGE_SELF if on PHP5
+ * or RUSAGE_THREAD if on HHVM. Returns false if getrusage is not available.
+ *
+ * @since 1.24
+ * @return array|bool Resource usage data or false if no data available.
+ */
+function wfGetRusage() {
+       if ( !function_exists( 'getrusage' ) ) {
+               return false;
+       } elseif ( defined ( 'HHVM_VERSION' ) ) {
+               return getrusage( 2 /* RUSAGE_THREAD */ );
+       } else {
+               return getrusage( 0 /* RUSAGE_SELF */ );
+       }
+}
+
+/**
+ * Begin profiling of a function
+ * @param string $functionname Name of the function we will profile
+ */
+function wfProfileIn( $functionname ) {
+       // Use Profiler member variable directly to reduce overhead
+       if ( Profiler::$__instance === null ) {
+               Profiler::instance();
+       }
+       if ( !( Profiler::$__instance instanceof ProfilerStub ) ) {
+               Profiler::$__instance->profileIn( $functionname );
+       }
+}
+
+/**
+ * Stop profiling of a function
+ * @param string $functionname Name of the function we have profiled
+ */
+function wfProfileOut( $functionname = 'missing' ) {
+       // Use Profiler member variable directly to reduce overhead
+       if ( Profiler::$__instance === null ) {
+               Profiler::instance();
+       }
+       if ( !( Profiler::$__instance instanceof ProfilerStub ) ) {
+               Profiler::$__instance->profileOut( $functionname );
+       }
+}
diff --git a/includes/profiler/ProfilerMwprof.php b/includes/profiler/ProfilerMwprof.php
deleted file mode 100644 (file)
index af3c774..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-<?php
-/**
- * Profiler class for Mwprof.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write 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 class for Mwprof.
- *
- * Mwprof is a high-performance MediaWiki profiling data collector, designed to
- * collect profiling data from multiple hosts running in tandem. This class
- * serializes profiling samples into MessagePack arrays and sends them to an
- * Mwprof instance via UDP.
- *
- * @see https://github.com/wikimedia/operations-software-mwprof
- * @since 1.23
- */
-class ProfilerMwprof extends Profiler {
-       /** @var array Queue of open profile calls with start data */
-       protected $mWorkStack = array();
-
-       /** @var array Map of (function name => aggregate data array) */
-       protected $mCollated = array();
-       /** @var array Cache of a standard broken collation entry */
-       protected $mErrorEntry;
-
-       // Message types
-       const TYPE_SINGLE = 1;
-       const TYPE_RUNNING = 2;
-
-       public function isStub() {
-               return false;
-       }
-
-       public function isPersistent() {
-               return true;
-       }
-
-       /**
-        * Start a profiling section.
-        *
-        * Marks the beginning of the function or code-block that should be time
-        * and logged under some specific name.
-        *
-        * @param string $inName Section to start
-        */
-       public function profileIn( $inName ) {
-               $this->mWorkStack[] = array( $inName, count( $this->mWorkStack ),
-                       $this->getTime(), $this->getTime( 'cpu' ), 0 );
-       }
-
-       /**
-        * Close a profiling section.
-        *
-        * Marks the end of the function or code-block that should be timed and
-        * logged under some specific name.
-        *
-        * @param string $outName Section to close
-        */
-       public function profileOut( $outName ) {
-               list( $inName, $inCount, $inWall, $inCpu ) = array_pop( $this->mWorkStack );
-
-               // Check for unbalanced profileIn / profileOut calls.
-               // Bad entries are logged but not sent.
-               if ( $inName !== $outName ) {
-                       $this->debugGroup( 'ProfilerUnbalanced', json_encode( array( $inName, $outName ) ) );
-                       return;
-               }
-
-               $elapsedCpu = $this->getTime( 'cpu' ) - $inCpu;
-               $elapsedWall = $this->getTime() - $inWall;
-               $this->updateRunningEntry( $outName, $elapsedCpu, $elapsedWall );
-               $this->trxProfiler->recordFunctionCompletion( $outName, $elapsedWall );
-       }
-
-       /**
-        * Update an entry with timing data.
-        *
-        * @param string $name Section name
-        * @param float $elapsedCpu Elapsed CPU time
-        * @param float $elapsedWall Elapsed wall-clock time
-        */
-       public function updateRunningEntry( $name, $elapsedCpu, $elapsedWall ) {
-               // If this is the first measurement for this entry, store plain values.
-               // Many profiled functions will only be called once per request.
-               if ( !isset( $this->mCollated[$name] ) ) {
-                       $this->mCollated[$name] = array(
-                               'cpu'   => $elapsedCpu,
-                               'wall'  => $elapsedWall,
-                               'count' => 1,
-                       );
-                       return;
-               }
-
-               $entry = &$this->mCollated[$name];
-
-               // If it's the second measurement, convert the plain values to
-               // RunningStat instances, so we can push the incoming values on top.
-               if ( $entry['count'] === 1 ) {
-                       $cpu = new RunningStat();
-                       $cpu->push( $entry['cpu'] );
-                       $entry['cpu'] = $cpu;
-
-                       $wall = new RunningStat();
-                       $wall->push( $entry['wall'] );
-                       $entry['wall'] = $wall;
-               }
-
-               $entry['count']++;
-               $entry['cpu']->push( $elapsedCpu );
-               $entry['wall']->push( $elapsedWall );
-       }
-
-       /**
-        * @return array
-        */
-       public function getRawData() {
-               // This method is called before shutdown in the footer method on Skins.
-               // If some outer methods have not yet called wfProfileOut(), work around
-               // that by clearing anything in the work stack to just the "-total" entry.
-               if ( count( $this->mWorkStack ) > 1 ) {
-                       $oldWorkStack = $this->mWorkStack;
-                       $this->mWorkStack = array( $this->mWorkStack[0] ); // just the "-total" one
-               } else {
-                       $oldWorkStack = null;
-               }
-               $this->close();
-               // If this trick is used, then the old work stack is swapped back afterwards.
-               // This means that logData() will still make use of all the method data since
-               // the missing wfProfileOut() calls should be made by the time it is called.
-               if ( $oldWorkStack ) {
-                       $this->mWorkStack = $oldWorkStack;
-               }
-
-               $totalWall = 0.0;
-               $profile = array();
-               foreach ( $this->mCollated as $fname => $data ) {
-                       if ( $data['count'] == 1 ) {
-                               $profile[] = array(
-                                       'name' => $fname,
-                                       'calls' => $data['count'],
-                                       'elapsed' => $data['wall'] * 1000,
-                                       'memory' => 0, // not supported
-                                       'min' => $data['wall'] * 1000,
-                                       'max' => $data['wall'] * 1000,
-                                       'overhead' => 0, // not supported
-                                       'periods' => array() // not supported
-                               );
-                               $totalWall += $data['wall'];
-                       } else {
-                               $profile[] = array(
-                                       'name' => $fname,
-                                       'calls' => $data['count'],
-                                       'elapsed' => $data['wall']->n * $data['wall']->getMean() * 1000,
-                                       'memory' => 0, // not supported
-                                       'min' => $data['wall']->min * 1000,
-                                       'max' => $data['wall']->max * 1000,
-                                       'overhead' => 0, // not supported
-                                       'periods' => array() // not supported
-                               );
-                               $totalWall += $data['wall']->n * $data['wall']->getMean();
-                       }
-               }
-               $totalWall = $totalWall * 1000;
-
-               foreach ( $profile as &$item ) {
-                       $item['percent'] = $totalWall ? 100 * $item['elapsed'] / $totalWall : 0;
-               }
-
-               return $profile;
-       }
-
-       /**
-        * Serialize profiling data and send to a profiling data aggregator.
-        *
-        * Individual entries are represented as arrays and then encoded using
-        * MessagePack, an efficient binary data-interchange format. Encoded
-        * entries are accumulated into a buffer and sent in batch via UDP to the
-        * profiling data aggregator.
-        */
-       public function logData() {
-               global $wgUDPProfilerHost, $wgUDPProfilerPort;
-
-               $this->close();
-
-               if ( !function_exists( 'socket_create' ) ) {
-                       return; // avoid fatal
-               }
-
-               $sock = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
-               socket_connect( $sock, $wgUDPProfilerHost, $wgUDPProfilerPort );
-               $bufferLength = 0;
-               $buffer = '';
-               foreach ( $this->mCollated as $name => $entry ) {
-                       $count = $entry['count'];
-                       $cpu = $entry['cpu'];
-                       $wall = $entry['wall'];
-
-                       if ( $count === 1 ) {
-                               $data = array( self::TYPE_SINGLE, $name, $cpu, $wall );
-                       } else {
-                               $data = array( self::TYPE_RUNNING, $name, $count,
-                                       $cpu->m1, $cpu->m2, $cpu->min, $cpu->max,
-                                       $wall->m1, $wall->m2, $wall->min, $wall->max );
-                       }
-
-                       $encoded = MWMessagePack::pack( $data );
-                       $length = strlen( $encoded );
-
-                       // If adding this entry would cause the size of the buffer to
-                       // exceed the standard ethernet MTU size less the UDP header,
-                       // send all pending data and reset the buffer. Otherwise, continue
-                       // accumulating entries into the current buffer.
-                       if ( $length + $bufferLength > 1450 ) {
-                               socket_send( $sock, $buffer, $bufferLength, 0 );
-                               $buffer = '';
-                               $bufferLength = 0;
-                       }
-                       $buffer .= $encoded;
-                       $bufferLength += $length;
-               }
-               if ( $bufferLength !== 0 ) {
-                       socket_send( $sock, $buffer, $bufferLength, 0 );
-               }
-       }
-
-       /**
-        * Close opened profiling sections
-        */
-       public function close() {
-               while ( count( $this->mWorkStack ) ) {
-                       $this->profileOut( 'close' );
-               }
-       }
-
-       public function getOutput() {
-               return ''; // no report
-       }
-}
index 38a6436..3625db6 100644 (file)
  * @ingroup Profiler
  */
 class ProfilerSimpleDB extends ProfilerStandard {
-       protected function collateOnly() {
-               return true;
-       }
-
        public function isPersistent() {
                return true;
        }
@@ -58,9 +54,9 @@ class ProfilerSimpleDB extends ProfilerStandard {
                        $dbw = wfGetDB( DB_MASTER );
                        $useTrx = ( $dbw->getType() === 'sqlite' ); // much faster
                        if ( $useTrx ) {
-                               $dbw->begin();
+                               $dbw->startAtomic( __METHOD__ );
                        }
-                       foreach ( $this->mCollated as $name => $data ) {
+                       foreach ( $this->collated as $name => $data ) {
                                $eventCount = $data['count'];
                                $timeSum = (float)( $data['real'] * 1000 );
                                $memorySum = (float)$data['memory'];
@@ -103,7 +99,7 @@ class ProfilerSimpleDB extends ProfilerStandard {
                                //     "pf_time=pf_time + VALUES(pf_time)";
                        }
                        if ( $useTrx ) {
-                               $dbw->commit();
+                               $dbw->endAtomic( __METHOD__ );
                        }
                } catch ( DBError $e ) {
                }
index 0ee7aad..264845e 100644 (file)
@@ -33,7 +33,6 @@
  */
 class ProfilerSimpleText extends ProfilerStandard {
        public $visible = false; /* Show as <PRE> or <!-- ? */
-       static private $out;
 
        public function __construct( $profileConfig ) {
                if ( isset( $profileConfig['visible'] ) && $profileConfig['visible'] ) {
@@ -42,41 +41,41 @@ class ProfilerSimpleText extends ProfilerStandard {
                parent::__construct( $profileConfig );
        }
 
-       protected function collateOnly() {
-               return true;
-       }
-
        public function logData() {
-               if ( $this->mTemplated ) {
+               $out = '';
+               if ( $this->templated ) {
                        $this->close();
-                       $totalReal = isset( $this->mCollated['-total'] )
-                               ? $this->mCollated['-total']['real']
+                       $totalReal = isset( $this->collated['-total'] )
+                               ? $this->collated['-total']['real']
                                : 0; // profiling mismatch error?
-                       uasort( $this->mCollated, array( 'self', 'sort' ) );
-                       array_walk( $this->mCollated, array( 'self', 'format' ), $totalReal );
+
+                       uasort( $this->collated, function( $a, $b ) {
+                               // sort descending by time elapsed
+                               return $a['real'] < $b['real'];
+                       } );
+
+                       array_walk( $this->collated,
+                               function( $item, $key ) use ( &$out, $totalReal ) {
+                                       $perc = $totalReal ? $item['real'] / $totalReal * 100 : 0;
+                                       $out .= sprintf( "%6.2f%% %3.6f %6d - %s\n",
+                                               $perc, $item['real'], $item['count'], $key );
+                               }
+                       );
+
+                       $contentType = $this->getContentType();
                        if ( PHP_SAPI === 'cli' ) {
-                               print "<!--\n" . self::$out . "\n-->\n";
-                       } elseif ( $this->getContentType() === 'text/html' ) {
+                               print "<!--\n{$out}\n-->\n";
+                       } elseif ( $contentType === 'text/html' ) {
                                if ( $this->visible ) {
-                                       print '<pre>' . self::$out . '</pre>';
+                                       print "<pre>{$out}</pre>";
                                } else {
-                                       print "<!--\n" . self::$out . "\n-->\n";
+                                       print "<!--\n{$out}\n-->\n";
                                }
-                       } elseif ( $this->getContentType() === 'text/javascript' ) {
-                               print "\n/*\n" . self::$out . "*/\n";
-                       } elseif ( $this->getContentType() === 'text/css' ) {
-                               print "\n/*\n" . self::$out . "*/\n";
+                       } elseif ( $contentType === 'text/javascript' ) {
+                               print "\n/*\n${$out}*/\n";
+                       } elseif ( $contentType === 'text/css' ) {
+                               print "\n/*\n{$out}*/\n";
                        }
                }
        }
-
-       static function sort( $a, $b ) {
-               return $a['real'] < $b['real']; /* sort descending by time elapsed */
-       }
-
-       static function format( $item, $key, $totalReal ) {
-               $perc = $totalReal ? $item['real'] / $totalReal * 100 : 0;
-               self::$out .= sprintf( "%6.2f%% %3.6f %6d - %s\n",
-                       $perc, $item['real'], $item['count'], $key );
-       }
 }
index 2a44494..893d960 100644 (file)
@@ -30,19 +30,15 @@ class ProfilerSimpleTrace extends ProfilerStandard {
        protected $trace = "Beginning trace: \n";
        protected $memory = 0;
 
-       protected function collateOnly() {
-               return true;
-       }
-
        public function profileIn( $functionname ) {
                parent::profileIn( $functionname );
 
                $this->trace .= "         " . sprintf( "%6.1f", $this->memoryDiff() ) .
-                       str_repeat( " ", count( $this->mWorkStack ) ) . " > " . $functionname . "\n";
+                       str_repeat( " ", count( $this->workStack ) ) . " > " . $functionname . "\n";
        }
 
        public function profileOut( $functionname ) {
-               $item = end( $this->mWorkStack );
+               $item = end( $this->workStack );
 
                parent::profileOut( $functionname );
 
@@ -59,7 +55,7 @@ class ProfilerSimpleTrace extends ProfilerStandard {
                        }
                        $elapsedreal = $this->getTime() - $ortime;
                        $this->trace .= sprintf( "%03.6f %6.1f", $elapsedreal, $this->memoryDiff() ) .
-                               str_repeat( " ", count( $this->mWorkStack ) + 1 ) . " < " . $functionname . "\n";
+                               str_repeat( " ", count( $this->workStack ) + 1 ) . " < " . $functionname . "\n";
                }
        }
 
@@ -70,14 +66,15 @@ class ProfilerSimpleTrace extends ProfilerStandard {
        }
 
        public function logData() {
-               if ( $this->mTemplated ) {
+               if ( $this->templated ) {
+                       $contentType = $this->getContentType();
                        if ( PHP_SAPI === 'cli' ) {
                                print "<!-- \n {$this->trace} \n -->";
-                       } elseif ( $this->getContentType() === 'text/html' ) {
+                       } elseif ( $contentType === 'text/html' ) {
                                print "<!-- \n {$this->trace} \n -->";
-                       } elseif ( $this->getContentType() === 'text/javascript' ) {
+                       } elseif ( $contentType === 'text/javascript' ) {
                                print "\n/*\n {$this->trace}\n*/";
-                       } elseif ( $this->getContentType() === 'text/css' ) {
+                       } elseif ( $contentType === 'text/css' ) {
                                print "\n/*\n {$this->trace}\n*/";
                        }
                }
index 627b4de..2671376 100644 (file)
  * @ingroup Profiler
  */
 class ProfilerSimpleUDP extends ProfilerStandard {
-       protected function collateOnly() {
-               return true;
-       }
-
        public function isPersistent() {
                return true;
        }
@@ -49,7 +45,7 @@ class ProfilerSimpleUDP extends ProfilerStandard {
                $sock = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
                $plength = 0;
                $packet = "";
-               foreach ( $this->mCollated as $entry => $pfdata ) {
+               foreach ( $this->collated as $entry => $pfdata ) {
                        if ( !isset( $pfdata['count'] )
                                || !isset( $pfdata['cpu'] )
                                || !isset( $pfdata['cpu_sq'] )
index cc13416..4825f7a 100644 (file)
  */
 class ProfilerStandard extends Profiler {
        /** @var array List of resolved profile calls with start/end data */
-       protected $mStack = array();
+       protected $stack = array();
        /** @var array Queue of open profile calls with start data */
-       protected $mWorkStack = array();
+       protected $workStack = array();
 
        /** @var array Map of (function name => aggregate data array) */
-       protected $mCollated = array();
+       protected $collated = array();
        /** @var bool */
-       protected $mCollateDone = false;
-       /** @var bool */
-       protected $mCollateOnly = false;
+       protected $collateDone = false;
+       /** @var bool Whether to collect the full stack trace or just aggregates */
+       protected $collateOnly = true;
        /** @var array Cache of a standard broken collation entry */
-       protected $mErrorEntry;
+       protected $errorEntry;
 
        /**
         * @param array $params
@@ -51,8 +51,6 @@ class ProfilerStandard extends Profiler {
        public function __construct( array $params ) {
                parent::__construct( $params );
 
-               $this->mCollateOnly = $this->collateOnly();
-
                $this->addInitialStack();
        }
 
@@ -75,33 +73,21 @@ class ProfilerStandard extends Profiler {
                return false;
        }
 
-       /**
-        * Whether to internally just track aggregates and ignore the full stack trace
-        *
-        * Only doing collation saves memory overhead but limits the use of certain
-        * features like that of graph generation for the debug toolbar.
-        *
-        * @return bool
-        */
-       protected function collateOnly() {
-               return false;
-       }
-
        /**
         * Add the inital item in the stack.
         */
        protected function addInitialStack() {
-               $this->mErrorEntry = $this->getErrorEntry();
+               $this->errorEntry = $this->getErrorEntry();
 
                $initialTime = $this->getInitialTime( 'wall' );
                $initialCpu = $this->getInitialTime( 'cpu' );
                if ( $initialTime !== null && $initialCpu !== null ) {
-                       $this->mWorkStack[] = array( '-total', 0, $initialTime, $initialCpu, 0 );
-                       if ( $this->mCollateOnly ) {
-                               $this->mWorkStack[] = array( '-setup', 1, $initialTime, $initialCpu, 0 );
+                       $this->workStack[] = array( '-total', 0, $initialTime, $initialCpu, 0 );
+                       if ( $this->collateOnly ) {
+                               $this->workStack[] = array( '-setup', 1, $initialTime, $initialCpu, 0 );
                                $this->profileOut( '-setup' );
                        } else {
-                               $this->mStack[] = array( '-setup', 1, $initialTime, $initialCpu, 0,
+                               $this->stack[] = array( '-setup', 1, $initialTime, $initialCpu, 0,
                                        $this->getTime( 'wall' ), $this->getTime( 'cpu' ), 0 );
                        }
                } else {
@@ -124,8 +110,8 @@ class ProfilerStandard extends Profiler {
                        'max_cpu'  => 0.0,
                        'min_real' => 0.0,
                        'max_real' => 0.0,
-                       'periods'  => array(), // not filled if mCollateOnly
-                       'overhead' => 0 // not filled if mCollateOnly
+                       'periods'  => array(), // not filled if collateOnly
+                       'overhead' => 0 // not filled if collateOnly
                );
        }
 
@@ -151,10 +137,10 @@ class ProfilerStandard extends Profiler {
        protected function updateEntry(
                $name, $elapsedCpu, $elapsedReal, $memChange, $subcalls = 0, $period = null
        ) {
-               $entry =& $this->mCollated[$name];
+               $entry =& $this->collated[$name];
                if ( !is_array( $entry ) ) {
                        $entry = $this->getZeroEntry();
-                       $this->mCollated[$name] =& $entry;
+                       $this->collated[$name] =& $entry;
                }
                $entry['cpu'] += $elapsedCpu;
                $entry['cpu_sq'] += $elapsedCpu * $elapsedCpu;
@@ -182,13 +168,13 @@ class ProfilerStandard extends Profiler {
                global $wgDebugFunctionEntry;
 
                if ( $wgDebugFunctionEntry ) {
-                       $this->debug( str_repeat( ' ', count( $this->mWorkStack ) ) .
+                       $this->debug( str_repeat( ' ', count( $this->workStack ) ) .
                                'Entering ' . $functionname . "\n" );
                }
 
-               $this->mWorkStack[] = array(
+               $this->workStack[] = array(
                        $functionname,
-                       count( $this->mWorkStack ),
+                       count( $this->workStack ),
                        $this->getTime( 'time' ),
                        $this->getTime( 'cpu' ),
                        memory_get_usage()
@@ -204,11 +190,11 @@ class ProfilerStandard extends Profiler {
                global $wgDebugFunctionEntry;
 
                if ( $wgDebugFunctionEntry ) {
-                       $this->debug( str_repeat( ' ', count( $this->mWorkStack ) - 1 ) .
+                       $this->debug( str_repeat( ' ', count( $this->workStack ) - 1 ) .
                                'Exiting ' . $functionname . "\n" );
                }
 
-               $item = array_pop( $this->mWorkStack );
+               $item = array_pop( $this->workStack );
                list( $ofname, /* $ocount */, $ortime, $octime, $omem ) = $item;
 
                if ( $item === null ) {
@@ -218,34 +204,33 @@ class ProfilerStandard extends Profiler {
                                if ( $ofname !== '-total' ) {
                                        $message = "Profile section ended by close(): {$ofname}";
                                        $this->debugGroup( 'profileerror', $message );
-                                       if ( $this->mCollateOnly ) {
-                                               $this->mCollated[$message] = $this->mErrorEntry;
+                                       if ( $this->collateOnly ) {
+                                               $this->collated[$message] = $this->errorEntry;
                                        } else {
-                                               $this->mStack[] = array( $message, 0, 0.0, 0.0, 0, 0.0, 0.0, 0 );
+                                               $this->stack[] = array( $message, 0, 0.0, 0.0, 0, 0.0, 0.0, 0 );
                                        }
                                }
                                $functionname = $ofname;
                        } elseif ( $ofname !== $functionname ) {
                                $message = "Profiling error: in({$ofname}), out($functionname)";
                                $this->debugGroup( 'profileerror', $message );
-                               if ( $this->mCollateOnly ) {
-                                       $this->mCollated[$message] = $this->mErrorEntry;
+                               if ( $this->collateOnly ) {
+                                       $this->collated[$message] = $this->errorEntry;
                                } else {
-                                       $this->mStack[] = array( $message, 0, 0.0, 0.0, 0, 0.0, 0.0, 0 );
+                                       $this->stack[] = array( $message, 0, 0.0, 0.0, 0, 0.0, 0.0, 0 );
                                }
                        }
                        $realTime = $this->getTime( 'wall' );
                        $cpuTime = $this->getTime( 'cpu' );
-                       if ( $this->mCollateOnly ) {
+                       if ( $this->collateOnly ) {
                                $elapsedcpu = $cpuTime - $octime;
                                $elapsedreal = $realTime - $ortime;
                                $memchange = memory_get_usage() - $omem;
                                $this->updateEntry( $functionname, $elapsedcpu, $elapsedreal, $memchange );
                        } else {
-                               $this->mStack[] = array_merge( $item,
+                               $this->stack[] = array_merge( $item,
                                        array( $realTime, $cpuTime,     memory_get_usage() ) );
                        }
-                       $this->trxProfiler->recordFunctionCompletion( $functionname, $realTime - $ortime );
                }
        }
 
@@ -253,7 +238,7 @@ class ProfilerStandard extends Profiler {
         * Close opened profiling sections
         */
        public function close() {
-               while ( count( $this->mWorkStack ) ) {
+               while ( count( $this->workStack ) ) {
                        $this->profileOut( 'close' );
                }
        }
@@ -275,7 +260,7 @@ class ProfilerStandard extends Profiler {
 
                $wgDebugFunctionEntry = false; // hack
 
-               if ( !count( $this->mStack ) && !count( $this->mCollated ) ) {
+               if ( !count( $this->stack ) && !count( $this->collated ) ) {
                        return "No profiling output\n";
                }
 
@@ -292,7 +277,7 @@ class ProfilerStandard extends Profiler {
         */
        protected function getCallTree() {
                return implode( '', array_map(
-                       array( &$this, 'getCallTreeLine' ), $this->remapCallTree( $this->mStack )
+                       array( &$this, 'getCallTreeLine' ), $this->remapCallTree( $this->stack )
                ) );
        }
 
@@ -353,28 +338,28 @@ class ProfilerStandard extends Profiler {
        }
 
        /**
-        * Populate mCollated
+        * Populate collated
         */
        protected function collateData() {
-               if ( $this->mCollateDone ) {
+               if ( $this->collateDone ) {
                        return;
                }
-               $this->mCollateDone = true;
+               $this->collateDone = true;
                $this->close(); // set "-total" entry
 
-               if ( $this->mCollateOnly ) {
+               if ( $this->collateOnly ) {
                        return; // already collated as methods exited
                }
 
-               $this->mCollated = array();
+               $this->collated = array();
 
                # Estimate profiling overhead
-               $profileCount = count( $this->mStack );
+               $profileCount = count( $this->stack );
                self::calculateOverhead( $profileCount );
 
                # First, subtract the overhead!
                $overheadTotal = $overheadMemory = $overheadInternal = array();
-               foreach ( $this->mStack as $entry ) {
+               foreach ( $this->stack as $entry ) {
                        // $entry is (name,pos,rtime0,cputime0,mem0,rtime1,cputime1,mem1)
                        $fname = $entry[0];
                        $elapsed = $entry[5] - $entry[2];
@@ -395,13 +380,13 @@ class ProfilerStandard extends Profiler {
                        array_sum( $overheadInternal ) / count( $overheadInternal ) : 0;
 
                # Collate
-               foreach ( $this->mStack as $index => $entry ) {
+               foreach ( $this->stack as $index => $entry ) {
                        // $entry is (name,pos,rtime0,cputime0,mem0,rtime1,cputime1,mem1)
                        $fname = $entry[0];
                        $elapsedCpu = $entry[6] - $entry[3];
                        $elapsedReal = $entry[5] - $entry[2];
                        $memchange = $entry[7] - $entry[4];
-                       $subcalls = $this->calltreeCount( $this->mStack, $index );
+                       $subcalls = $this->calltreeCount( $this->stack, $index );
 
                        if ( substr( $fname, 0, 9 ) !== '-overhead' ) {
                                # Adjust for profiling overhead (except special values with elapsed=0
@@ -417,8 +402,8 @@ class ProfilerStandard extends Profiler {
                        $this->updateEntry( $fname, $elapsedCpu, $elapsedReal, $memchange, $subcalls, $period );
                }
 
-               $this->mCollated['-overhead-total']['count'] = $profileCount;
-               arsort( $this->mCollated, SORT_NUMERIC );
+               $this->collated['-overhead-total']['count'] = $profileCount;
+               arsort( $this->collated, SORT_NUMERIC );
        }
 
        /**
@@ -436,11 +421,11 @@ class ProfilerStandard extends Profiler {
                $prof = "\nProfiling data\n";
                $prof .= sprintf( $titleFormat, 'Name', 'Calls', 'Total', 'Each', '%', 'Mem' );
 
-               $total = isset( $this->mCollated['-total'] )
-                       ? $this->mCollated['-total']['real']
+               $total = isset( $this->collated['-total'] )
+                       ? $this->collated['-total']['real']
                        : 0;
 
-               foreach ( $this->mCollated as $fname => $data ) {
+               foreach ( $this->collated as $fname => $data ) {
                        $calls = $data['count'];
                        $percent = $total ? 100 * $data['real'] / $total : 0;
                        $memory = $data['memory'];
@@ -469,28 +454,28 @@ class ProfilerStandard extends Profiler {
                // If some outer methods have not yet called wfProfileOut(), work around
                // that by clearing anything in the work stack to just the "-total" entry.
                // Collate after doing this so the results do not include profile errors.
-               if ( count( $this->mWorkStack ) > 1 ) {
-                       $oldWorkStack = $this->mWorkStack;
-                       $this->mWorkStack = array( $this->mWorkStack[0] ); // just the "-total" one
+               if ( count( $this->workStack ) > 1 ) {
+                       $oldWorkStack = $this->workStack;
+                       $this->workStack = array( $this->workStack[0] ); // just the "-total" one
                } else {
                        $oldWorkStack = null;
                }
                $this->collateData();
                // If this trick is used, then the old work stack is swapped back afterwards
-               // and mCollateDone is reset to false. This means that logData() will still
+               // and collateDone is reset to false. This means that logData() will still
                // make use of all the method data since the missing wfProfileOut() calls
                // should be made by the time it is called.
                if ( $oldWorkStack ) {
-                       $this->mWorkStack = $oldWorkStack;
-                       $this->mCollateDone = false;
+                       $this->workStack = $oldWorkStack;
+                       $this->collateDone = false;
                }
 
-               $total = isset( $this->mCollated['-total'] )
-                       ? $this->mCollated['-total']['real']
+               $total = isset( $this->collated['-total'] )
+                       ? $this->collated['-total']['real']
                        : 0;
 
                $profile = array();
-               foreach ( $this->mCollated as $fname => $data ) {
+               foreach ( $this->collated as $fname => $data ) {
                        $periods = array();
                        foreach ( $data['periods'] as $period ) {
                                $period['start'] *= 1000;
@@ -556,4 +541,27 @@ class ProfilerStandard extends Profiler {
                }
                return null;
        }
+
+       /**
+        * Add an entry in the debug log file
+        *
+        * @param string $s String to output
+        */
+       protected function debug( $s ) {
+               if ( function_exists( 'wfDebug' ) ) {
+                       wfDebug( $s );
+               }
+       }
+
+       /**
+        * Add an entry in the debug log group
+        *
+        * @param string $group Group to send the message to
+        * @param string $s String to output
+        */
+       protected function debugGroup( $group, $s ) {
+               if ( function_exists( 'wfDebugLog' ) ) {
+                       wfDebugLog( $group, $s );
+               }
+       }
 }
index 1d3b65d..e81f579 100644 (file)
@@ -54,12 +54,6 @@ class ProfilerStub extends Profiler {
                return '';
        }
 
-       public function transactionWritingIn( $server, $db, $id = '' ) {
-       }
-
-       public function transactionWritingOut( $server, $db, $id = '' ) {
-       }
-
        public function getRawData() {
                return array();
        }
diff --git a/includes/profiler/TransactionProfiler.php b/includes/profiler/TransactionProfiler.php
new file mode 100644 (file)
index 0000000..7843ac1
--- /dev/null
@@ -0,0 +1,131 @@
+<?php
+/**
+ * Transaction profiling.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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
+ * @author Aaron Schulz
+ */
+
+/**
+ * Helper class that detects high-contention DB queries via profiling calls
+ *
+ * This class is meant to work with a Profiler, as the later already knows
+ * when methods start and finish (which may take place during transactions).
+ *
+ * @since 1.24
+ */
+class TransactionProfiler {
+       /** @var float Seconds */
+       protected $dbLockThreshold = 3.0;
+       /** @var array DB/server name => (active trx count, time, DBs involved) */
+       protected $dbTrxHoldingLocks = array();
+       /** @var array DB/server name => list of (function name, elapsed time) */
+       protected $dbTrxMethodTimes = array();
+
+       /**
+        * Mark a DB as in a transaction with one or more writes pending
+        *
+        * Note that there can be multiple connections to a single DB.
+        *
+        * @param string $server DB server
+        * @param string $db DB name
+        * @param string $id ID string of transaction
+        */
+       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->dbTrxHoldingLocks[$name] = array(
+                       'start' => microtime( true ),
+                       'conns' => array(),
+               );
+               $this->dbTrxMethodTimes[$name] = array();
+
+               foreach ( $this->dbTrxHoldingLocks as $name => &$info ) {
+                       // Track all DBs in transactions for this transaction
+                       $info['conns'][$name] = 1;
+               }
+       }
+
+       /**
+        * Register the name and time of a method for slow DB trx detection
+        *
+        * This method is only to be called by the Profiler class as methods finish
+        *
+        * @param string $method Function name
+        * @param float $realtime Wall time ellapsed
+        */
+       public function recordFunctionCompletion( $method, $realtime ) {
+               if ( !$this->dbTrxHoldingLocks ) {
+                       // Short-circuit
+                       return;
+               // @todo hardcoded check is a tad janky
+               } elseif ( !preg_match( '/^query-m: /', $method ) && $realtime < 1.0 ) {
+                       // Not a DB master query nor slow enough
+                       return;
+               }
+
+               $now = microtime( true );
+               foreach ( $this->dbTrxHoldingLocks as $name => $info ) {
+                       // Hacky check to exclude entries from before the first TRX write
+                       if ( ( $now - $realtime ) >= $info['start'] ) {
+                               $this->dbTrxMethodTimes[$name][] = array( $method, $realtime );
+                       }
+               }
+       }
+
+       /**
+        * Mark a DB as no longer in a transaction
+        *
+        * This will check if locks are possibly held for longer than
+        * needed and log any affected transactions to a special DB log.
+        * Note that there can be multiple connections to a single DB.
+        *
+        * @param string $server DB server
+        * @param string $db DB name
+        * @param string $id ID string of transaction
+        */
+       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." );
+                       return;
+               }
+               $slow = false;
+               foreach ( $this->dbTrxMethodTimes[$name] as $info ) {
+                       $realtime = $info[1];
+                       if ( $realtime >= $this->dbLockThreshold ) {
+                               $slow = true;
+                               break;
+                       }
+               }
+               if ( $slow ) {
+                       $dbs = implode( ', ', array_keys( $this->dbTrxHoldingLocks[$name]['conns'] ) );
+                       $msg = "Sub-optimal transaction on DB(s) [{$dbs}]:\n";
+                       foreach ( $this->dbTrxMethodTimes[$name] as $i => $info ) {
+                               list( $method, $realtime ) = $info;
+                               $msg .= sprintf( "%d\t%.6f\t%s\n", $i, $realtime, $method );
+                       }
+                       wfDebugLog( 'DBPerformance', $msg );
+               }
+               unset( $this->dbTrxHoldingLocks[$name] );
+               unset( $this->dbTrxMethodTimes[$name] );
+       }
+}
index 18e6003..519606c 100644 (file)
@@ -39,64 +39,63 @@ abstract class MachineReadableRCFeedFormatter implements RCFeedFormatter {
         */
        public function getLine( array $feed, RecentChange $rc, $actionComment ) {
                global $wgCanonicalServer, $wgServerName, $wgScriptPath;
-               $attrib = $rc->getAttributes();
 
                $packet = array(
                        // Usually, RC ID is exposed only for patrolling purposes,
                        // but there is no real reason not to expose it in other cases,
                        // and I can see how this may be potentially useful for clients.
-                       'id' => $attrib['rc_id'],
-                       'type' => RecentChange::parseFromRCType( $attrib['rc_type'] ),
+                       'id' => $rc->getAttribute( 'rc_id' ),
+                       'type' => RecentChange::parseFromRCType( $rc->getAttribute( 'rc_type' ) ),
                        'namespace' => $rc->getTitle()->getNamespace(),
                        'title' => $rc->getTitle()->getPrefixedText(),
-                       'comment' => $attrib['rc_comment'],
-                       'timestamp' => (int)wfTimestamp( TS_UNIX, $attrib['rc_timestamp'] ),
-                       'user' => $attrib['rc_user_text'],
-                       'bot' => (bool)$attrib['rc_bot'],
+                       'comment' => $rc->getAttribute( 'rc_comment' ),
+                       'timestamp' => (int)wfTimestamp( TS_UNIX, $rc->getAttribute( 'rc_timestamp' ) ),
+                       'user' => $rc->getAttribute( 'rc_user_text' ),
+                       'bot' => (bool)$rc->getAttribute( 'rc_bot' ),
                );
 
                if ( isset( $feed['channel'] ) ) {
                        $packet['channel'] = $feed['channel'];
                }
 
-               $type = $attrib['rc_type'];
+               $type = $rc->getAttribute( 'rc_type' );
                if ( $type == RC_EDIT || $type == RC_NEW ) {
                        global $wgUseRCPatrol, $wgUseNPPatrol;
 
-                       $packet['minor'] = (bool)$attrib['rc_minor'];
+                       $packet['minor'] = (bool)$rc->getAttribute( 'rc_minor' );
                        if ( $wgUseRCPatrol || ( $type == RC_NEW && $wgUseNPPatrol ) ) {
-                               $packet['patrolled'] = (bool)$attrib['rc_patrolled'];
+                               $packet['patrolled'] = (bool)$rc->getAttribute( 'rc_patrolled' );
                        }
                }
 
                switch ( $type ) {
                        case RC_EDIT:
                                $packet['length'] = array(
-                                       'old' => $attrib['rc_old_len'],
-                                       'new' => $attrib['rc_new_len']
+                                       'old' => $rc->getAttribute( 'rc_old_len' ),
+                                       'new' => $rc->getAttribute( 'rc_new_len' )
                                );
                                $packet['revision'] = array(
-                                       'old' => $attrib['rc_last_oldid'],
-                                       'new' => $attrib['rc_this_oldid']
+                                       'old' => $rc->getAttribute( 'rc_last_oldid' ),
+                                       'new' => $rc->getAttribute( 'rc_this_oldid' )
                                );
                                break;
 
                        case RC_NEW:
-                               $packet['length'] = array( 'old' => null, 'new' => $attrib['rc_new_len'] );
-                               $packet['revision'] = array( 'old' => null, 'new' => $attrib['rc_this_oldid'] );
+                               $packet['length'] = array( 'old' => null, 'new' => $rc->getAttribute( 'rc_new_len' ) );
+                               $packet['revision'] = array( 'old' => null, 'new' => $rc->getAttribute( 'rc_this_oldid' ) );
                                break;
 
                        case RC_LOG:
-                               $packet['log_id'] = $attrib['rc_logid'];
-                               $packet['log_type'] = $attrib['rc_log_type'];
-                               $packet['log_action'] = $attrib['rc_log_action'];
-                               if ( $attrib['rc_params'] ) {
+                               $packet['log_id'] = $rc->getAttribute( 'rc_logid' );
+                               $packet['log_type'] = $rc->getAttribute( 'rc_log_type' );
+                               $packet['log_action'] = $rc->getAttribute( 'rc_log_action' );
+                               if ( $rc->getAttribute( 'rc_params' ) ) {
                                        wfSuppressWarnings();
-                                       $params = unserialize( $attrib['rc_params'] );
+                                       $params = unserialize( $rc->getAttribute( 'rc_params' ) );
                                        wfRestoreWarnings();
                                        if (
                                                // If it's an actual serialised false...
-                                               $attrib['rc_params'] == serialize( false ) ||
+                                               $rc->getAttribute( 'rc_params' ) == serialize( false ) ||
                                                // Or if we did not get false back when trying to unserialise
                                                $params !== false
                                        ) {
@@ -113,7 +112,7 @@ abstract class MachineReadableRCFeedFormatter implements RCFeedFormatter {
                                                }
                                                $packet['log_params'] = $logParams;
                                        } else {
-                                               $packet['log_params'] = explode( "\n", $attrib['rc_params'] );
+                                               $packet['log_params'] = explode( "\n", $rc->getAttribute( 'rc_params' ) );
                                        }
                                }
                                $packet['log_action_comment'] = $actionComment;
index d114d7e..5784f2a 100644 (file)
@@ -126,6 +126,7 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        public function setUser( $user ) {
                $this->user = $user;
                $this->hash = null;
+               $this->userObj = null;
        }
 
        public function getDebug() {
index 60fd783..eecb936 100644 (file)
@@ -32,28 +32,35 @@ class ResourceLoader {
        /** @var int */
        protected static $filterCacheVersion = 7;
 
-       /** @var array */
-       protected static $requiredSourceProperties = array( 'loadScript' );
-
        /** @var bool */
        protected static $debugMode = null;
 
-       /** @var array Module name/ResourceLoaderModule object pairs */
+       /**
+        * Module name/ResourceLoaderModule object pairs
+        * @var array
+        */
        protected $modules = array();
 
-       /** @var array Associative array mapping module name to info associative array */
+       /**
+        * Associative array mapping module name to info associative array
+        * @var array
+        */
        protected $moduleInfos = array();
 
        /** @var Config $config */
        private $config;
 
        /**
-        * @var array Associative array mapping framework ids to a list of names of test suite modules
-        *      like array( 'qunit' => array( 'mediawiki.tests.qunit.suites', 'ext.foo.tests', .. ), .. )
+        * Associative array mapping framework ids to a list of names of test suite modules
+        * like array( 'qunit' => array( 'mediawiki.tests.qunit.suites', 'ext.foo.tests', .. ), .. )
+        * @var array
         */
        protected $testModuleNames = array();
 
-       /** @var array E.g. array( 'source-id' => array( 'loadScript' => 'http://.../load.php' ) ) */
+       /**
+        * E.g. array( 'source-id' => 'http://.../load.php' )
+        * @var array
+        */
        protected $sources = array();
 
        /** @var bool */
@@ -231,10 +238,7 @@ class ResourceLoader {
                $this->config = $config;
 
                // Add 'local' source first
-               $this->addSource(
-                       'local',
-                       array( 'loadScript' => wfScript( 'load' ), 'apiScript' => wfScript( 'api' ) )
-               );
+               $this->addSource( 'local', wfScript( 'load' ) );
 
                // Add other sources
                $this->addSource( $config->get( 'ResourceLoaderSources' ) );
@@ -401,14 +405,12 @@ class ResourceLoader {
        /**
         * Add a foreign source of modules.
         *
-        * Source properties:
-        * 'loadScript': URL (either fully-qualified or protocol-relative) of load.php for this source
-        *
-        * @param mixed $id Source ID (string), or array( id1 => props1, id2 => props2, ... )
-        * @param array $properties Source properties
+        * @param array|string $id Source ID (string), or array( id1 => loadUrl, id2 => loadUrl, ... )
+        * @param string|array $loadUrl load.php url (string), or array with loadUrl key for
+        *  backwards-compatibility.
         * @throws MWException
         */
-       public function addSource( $id, $properties = null ) {
+       public function addSource( $id, $loadUrl = null ) {
                // Allow multiple sources to be registered in one call
                if ( is_array( $id ) ) {
                        foreach ( $id as $key => $value ) {
@@ -425,14 +427,18 @@ class ResourceLoader {
                        );
                }
 
-               // Validate properties
-               foreach ( self::$requiredSourceProperties as $prop ) {
-                       if ( !isset( $properties[$prop] ) ) {
-                               throw new MWException( "Required property $prop missing from source ID $id" );
+               // Pre 1.24 backwards-compatibility
+               if ( is_array( $loadUrl ) ) {
+                       if ( !isset( $loadUrl['loadScript'] ) ) {
+                               throw new MWException(
+                                       __METHOD__ . ' was passed an array with no "loadScript" key.'
+                               );
                        }
+
+                       $loadUrl = $loadUrl['loadScript'];
                }
 
-               $this->sources[$id] = $properties;
+               $this->sources[$id] = $loadUrl;
        }
 
        /**
@@ -527,7 +533,7 @@ class ResourceLoader {
        /**
         * Get the list of sources.
         *
-        * @return array Like array( id => array of properties, .. )
+        * @return array Like array( id => load.php url, .. )
         */
        public function getSources() {
                return $this->sources;
@@ -546,7 +552,7 @@ class ResourceLoader {
                if ( !isset( $this->sources[$source] ) ) {
                        throw new MWException( "The $source source was never registered in ResourceLoader." );
                }
-               return $this->sources[$source]['loadScript'];
+               return $this->sources[$source];
        }
 
        /**
@@ -968,12 +974,20 @@ class ResourceLoader {
                                        case 'messages':
                                                $out .= self::makeMessageSetScript( new XmlJsCode( $messagesBlob ) );
                                                break;
+                                       case 'templates':
+                                               $out .= Xml::encodeJsCall(
+                                                       'mw.templates.set',
+                                                       array( $name, (object)$module->getTemplates() ),
+                                                       ResourceLoader::inDebugMode()
+                                               );
+                                               break;
                                        default:
                                                $out .= self::makeLoaderImplementScript(
                                                        $name,
                                                        $scripts,
                                                        $styles,
-                                                       new XmlJsCode( $messagesBlob )
+                                                       new XmlJsCode( $messagesBlob ),
+                                                       $module->getTemplates()
                                                );
                                                break;
                                }
@@ -1006,15 +1020,6 @@ class ResourceLoader {
                        if ( count( $states ) ) {
                                $out .= self::makeLoaderStateScript( $states );
                        }
-
-                       if ( $context->getOnly() === 'scripts' ) {
-                               // In only=script requests for modules that are not raw (e.g. not the startup module)
-                               // ensure the execution is conditional to avoid situations where browsers with an
-                               // unsupported environment do unconditionally execute a module's scripts. Otherwise users
-                               // will get things like "ReferenceError: mw is undefined" or "jQuery is undefined" from
-                               // legacy scripts loaded with only=scripts (such as the 'site' module).
-                               $out = self::makeLoaderConditionalScript( $out );
-                       }
                } else {
                        if ( count( $states ) ) {
                                $exceptions .= self::makeComment(
@@ -1047,15 +1052,20 @@ class ResourceLoader {
         * @param mixed $messages List of messages associated with this module. May either be an
         *   associative array mapping message key to value, or a JSON-encoded message blob containing
         *   the same data, wrapped in an XmlJsCode object.
+        * @param array $templates Keys are name of templates and values are the source of
+        *   the template.
         * @throws MWException
         * @return string
         */
-       public static function makeLoaderImplementScript( $name, $scripts, $styles, $messages ) {
+       public static function makeLoaderImplementScript( $name, $scripts, $styles,
+               $messages, $templates
+       ) {
                if ( is_string( $scripts ) ) {
                        $scripts = new XmlJsCode( "function ( $, jQuery ) {\n{$scripts}\n}" );
                } elseif ( !is_array( $scripts ) ) {
                        throw new MWException( 'Invalid scripts error. Array of URLs or string of code expected.' );
                }
+
                return Xml::encodeJsCall(
                        'mw.loader.implement',
                        array(
@@ -1067,7 +1077,8 @@ class ResourceLoader {
                                // PHP/json_encode() consider empty arrays to be numerical arrays and
                                // output javascript "[]" instead of "{}". This fixes that.
                                (object)$styles,
-                               (object)$messages
+                               (object)$messages,
+                               (object)$templates,
                        ),
                        ResourceLoader::inDebugMode()
                );
@@ -1230,7 +1241,7 @@ class ResourceLoader {
         *   - ResourceLoader::makeLoaderSourcesScript( $id, $properties ):
         *       Register a single source
         *
-        *   - ResourceLoader::makeLoaderSourcesScript( array( $id1 => $props1, $id2 => $props2, ... ) );
+        *   - ResourceLoader::makeLoaderSourcesScript( array( $id1 => $loadUrl, $id2 => $loadUrl, ... ) );
         *       Register sources with the given IDs and properties.
         *
         * @param string $id Source ID
index e79aadc..02744a6 100644 (file)
@@ -41,6 +41,7 @@ class ResourceLoaderContext {
        protected $version;
        protected $hash;
        protected $raw;
+       protected $userObj;
 
        /* Methods */
 
@@ -113,7 +114,9 @@ class ResourceLoaderContext {
         * @return ResourceLoaderContext
         */
        public static function newDummyContext() {
-               return new self( new ResourceLoader, new FauxRequest( array() ) );
+               return new self( new ResourceLoader(
+                       ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
+               ), new FauxRequest( array() ) );
        }
 
        /**
@@ -176,6 +179,31 @@ class ResourceLoaderContext {
                return $this->user;
        }
 
+       /**
+        * Get the possibly-cached User object for the specified username
+        *
+        * @since 1.25
+        * @return User|bool false if a valid object cannot be created
+        */
+       public function getUserObj() {
+               if ( $this->userObj === null ) {
+                       $username = $this->getUser();
+                       if ( $username ) {
+                               // Optimize: Avoid loading a new User object if possible
+                               global $wgUser;
+                               if ( is_object( $wgUser ) && $wgUser->getName() === $username ) {
+                                       $this->userObj = $wgUser;
+                               } else {
+                                       $this->userObj = User::newFromName( $username );
+                               }
+                       } else {
+                               $this->userObj = new User; // Anonymous user
+                       }
+               }
+
+               return $this->userObj;
+       }
+
        /**
         * @return bool
         */
diff --git a/includes/resourceloader/ResourceLoaderEditToolbarModule.php b/includes/resourceloader/ResourceLoaderEditToolbarModule.php
new file mode 100644 (file)
index 0000000..2e07911
--- /dev/null
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Resource loader module for the edit toolbar.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * ResourceLoader module for the edit toolbar.
+ *
+ * @since 1.24
+ */
+class ResourceLoaderEditToolbarModule extends ResourceLoaderFileModule {
+       /**
+        * Serialize a string (escape and quote) for use as a CSS string value.
+        * http://www.w3.org/TR/2013/WD-cssom-20131205/#serialize-a-string
+        *
+        * @param string $value
+        * @return string
+        */
+       private static function cssSerializeString( $value ) {
+               if ( strstr( $value, "\0" ) ) {
+                       throw new Exception( "Invalid character in CSS string" );
+               }
+               $value = strtr( $value, array( '\\' => '\\\\', '"' => '\\"' ) );
+               $value = preg_replace_callback( '/[\x01-\x1f\x7f-\x9f]/', function ( $match ) {
+                       return '\\' . base_convert( ord( $match[0] ), 10, 16 ) . ' ';
+               }, $value );
+               return '"' . $value . '"';
+       }
+
+       /**
+        * Get language-specific LESS variables for this module.
+        *
+        * @return array
+        */
+       private function getLessVars( ResourceLoaderContext $context ) {
+               $language = Language::factory( $context->getLanguage() );
+
+               // This is very conveniently formatted and we can pass it right through
+               $vars = $language->getImageFiles();
+
+               // lessc tries to be helpful and parse our variables as LESS source code
+               foreach ( $vars as $key => &$value ) {
+                       $value = self::cssSerializeString( $value );
+               }
+
+               return $vars;
+       }
+
+       /**
+        * @param ResourceLoaderContext $context
+        * @return int UNIX timestamp
+        */
+       public function getModifiedTime( ResourceLoaderContext $context ) {
+               return max(
+                       parent::getModifiedTime( $context ),
+                       $this->getHashMtime( $context )
+               );
+       }
+
+       /**
+        * @param ResourceLoaderContext $context
+        * @return string Hash
+        */
+       public function getModifiedHash( ResourceLoaderContext $context ) {
+               return md5(
+                       parent::getModifiedHash( $context ) .
+                       serialize( $this->getLessVars( $context ) )
+               );
+       }
+
+       /**
+        * Get a LESS compiler instance for this module.
+        *
+        * Set our variables in it.
+        *
+        * @throws MWException
+        * @param ResourceLoaderContext $context
+        * @return lessc
+        */
+       protected function getLessCompiler( ResourceLoaderContext $context = null ) {
+               $compiler = parent::getLessCompiler();
+               $compiler->setVariables( $this->getLessVars( $context ) );
+               return $compiler;
+       }
+}
index 0c84700..bcef149 100644 (file)
@@ -34,6 +34,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        /** @var string Remote base path, see __construct() */
        protected $remoteBasePath = '';
 
+       /** @var array Saves a list of the templates named by the modules. */
+       protected $templates = array();
+
        /**
         * @var array List of paths to JavaScript files to always include
         * @par Usage:
@@ -168,7 +171,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @param string $localBasePath Base path to prepend to all local paths in $options. Defaults
         *     to $IP
         * @param string $remoteBasePath Base path to prepend to all remote paths in $options. Defaults
-        *     to $wgScriptPath
+        *     to $wgResourceBasePath
         *
         * Below is a description for the $options array:
         * @throws MWException
@@ -177,7 +180,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         *     array(
         *         // Base path to prepend to all local paths in $options. Defaults to $IP
         *         'localBasePath' => [base path],
-        *         // Base path to prepend to all remote paths in $options. Defaults to $wgScriptPath
+        *         // Base path to prepend to all remote paths in $options. Defaults to $wgResourceBasePath
         *         'remoteBasePath' => [base path],
         *         // Equivalent of remoteBasePath, but relative to $wgExtensionAssetsPath
         *         'remoteExtPath' => [base path],
@@ -199,6 +202,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         *         'loaderScripts' => [file path string or array of file path strings],
         *         // Modules which must be loaded before this module
         *         'dependencies' => [module name string or array of module name strings],
+        *         'templates' => array(
+        *             [template alias with file.ext] => [file path to a template file],
+        *         ),
         *         // Styles to always load
         *         'styles' => [file path string or array of file path strings],
         *         // Styles to include in specific skin contexts
@@ -223,6 +229,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                $localBasePath = null,
                $remoteBasePath = null
        ) {
+               // Flag to decide whether to automagically add the mediawiki.template module
+               $hasTemplates = false;
                // localBasePath and remoteBasePath both have unbelievably long fallback chains
                // and need to be handled separately.
                list( $this->localBasePath, $this->remoteBasePath ) =
@@ -238,6 +246,10 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                                case 'styles':
                                        $this->{$member} = (array)$option;
                                        break;
+                               case 'templates':
+                                       $hasTemplates = true;
+                                       $this->{$member} = (array)$option;
+                                       break;
                                // Collated lists of file paths
                                case 'languageScripts':
                                case 'skinScripts':
@@ -281,6 +293,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                                        break;
                        }
                }
+               if ( $hasTemplates ) {
+                       $this->dependencies[] = 'mediawiki.template';
+               }
        }
 
        /**
@@ -291,7 +306,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @param string $localBasePath Path to use if not provided in module definition. Defaults
         *     to $IP
         * @param string $remoteBasePath Path to use if not provided in module definition. Defaults
-        *     to $wgScriptPath
+        *     to $wgResourceBasePath
         * @return array Array( localBasePath, remoteBasePath )
         */
        public static function extractBasePaths(
@@ -299,14 +314,16 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                $localBasePath = null,
                $remoteBasePath = null
        ) {
-               global $IP, $wgScriptPath, $wgResourceBasePath;
+               global $IP, $wgResourceBasePath;
 
                // The different ways these checks are done, and their ordering, look very silly,
                // but were preserved for backwards-compatibility just in case. Tread lightly.
 
-               $localBasePath = $localBasePath === null ? $IP : $localBasePath;
+               if ( $localBasePath === null ) {
+                       $localBasePath = $IP;
+               }
                if ( $remoteBasePath === null ) {
-                       $remoteBasePath = $wgResourceBasePath === null ? $wgScriptPath : $wgResourceBasePath;
+                       $remoteBasePath = $wgResourceBasePath;
                }
 
                if ( isset( $options['remoteExtPath'] ) ) {
@@ -385,7 +402,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        public function getStyles( ResourceLoaderContext $context ) {
                $styles = $this->readStyleFiles(
                        $this->getStyleFiles( $context ),
-                       $this->getFlip( $context )
+                       $this->getFlip( $context ),
+                       $context
                );
                // Collect referenced files
                $this->localFileRefs = array_unique( $this->localFileRefs );
@@ -532,8 +550,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                $files = array_merge(
                        $files,
                        $this->scripts,
+                       $this->templates,
                        $context->getDebug() ? $this->debugScripts : array(),
-                       self::tryForKey( $this->languageScripts, $context->getLanguage() ),
+                       $this->getLanguageScripts( $context->getLanguage() ),
                        self::tryForKey( $this->skinScripts, $context->getSkin(), 'default' ),
                        $this->loaderScripts
                );
@@ -587,6 +606,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        'dependencies',
                        'messages',
                        'targets',
+                       'templates',
                        'group',
                        'position',
                        'skipFunction',
@@ -697,7 +717,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        protected function getScriptFiles( ResourceLoaderContext $context ) {
                $files = array_merge(
                        $this->scripts,
-                       self::tryForKey( $this->languageScripts, $context->getLanguage() ),
+                       $this->getLanguageScripts( $context->getLanguage() ),
                        self::tryForKey( $this->skinScripts, $context->getSkin(), 'default' )
                );
                if ( $context->getDebug() ) {
@@ -707,6 +727,29 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                return array_unique( $files, SORT_REGULAR );
        }
 
+       /**
+        * Get the set of language scripts for the given language,
+        * possibly using a fallback language.
+        *
+        * @param string $lang
+        * @return array
+        */
+       private function getLanguageScripts( $lang ) {
+               $scripts = self::tryForKey( $this->languageScripts, $lang );
+               if ( $scripts ) {
+                       return $scripts;
+               }
+               $fallbacks = Language::getFallbacksFor( $lang );
+               foreach ( $fallbacks as $lang ) {
+                       $scripts = self::tryForKey( $this->languageScripts, $lang );
+                       if ( $scripts ) {
+                               return $scripts;
+                       }
+               }
+
+               return array();
+       }
+
        /**
         * Get a list of file paths for all styles in this module, in order of proper inclusion.
         *
@@ -816,14 +859,14 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         *
         * @param array $styles List of media type/list of file paths pairs, to read, remap and
         * concetenate
-        *
         * @param bool $flip
+        * @param ResourceLoaderContext $context (optional)
         *
         * @throws MWException
         * @return array List of concatenated and remapped CSS data from $styles,
         *     keyed by media type
         */
-       public function readStyleFiles( array $styles, $flip ) {
+       public function readStyleFiles( array $styles, $flip, $context = null ) {
                if ( empty( $styles ) ) {
                        return array();
                }
@@ -831,7 +874,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        $uniqueFiles = array_unique( $files, SORT_REGULAR );
                        $styleFiles = array();
                        foreach ( $uniqueFiles as $file ) {
-                               $styleFiles[] = $this->readStyleFile( $file, $flip );
+                               $styleFiles[] = $this->readStyleFile( $file, $flip, $context );
                        }
                        $styles[$media] = implode( "\n", $styleFiles );
                }
@@ -845,11 +888,12 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         *
         * @param string $path File path of style file to read
         * @param bool $flip
+        * @param ResourceLoaderContext $context (optional)
         *
         * @return string CSS data in script file
         * @throws MWException If the file doesn't exist
         */
-       protected function readStyleFile( $path, $flip ) {
+       protected function readStyleFile( $path, $flip, $context = null ) {
                $localPath = $this->getLocalPath( $path );
                $remotePath = $this->getRemotePath( $path );
                if ( !file_exists( $localPath ) ) {
@@ -859,7 +903,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                }
 
                if ( $this->getStyleSheetLang( $localPath ) === 'less' ) {
-                       $style = $this->compileLessFile( $localPath );
+                       $compiler = $this->getLessCompiler( $context );
+                       $style = $this->compileLessFile( $localPath, $compiler );
                        $this->hasGeneratedStyles = true;
                } else {
                        $style = file_get_contents( $localPath );
@@ -906,12 +951,55 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @since 1.22
         * @throws Exception If lessc encounters a parse error
         * @param string $fileName File path of LESS source
+        * @param lessc $compiler Compiler to use, if not default
         * @return string CSS source
         */
-       protected function compileLessFile( $fileName ) {
-               $compiler = ResourceLoader::getLessCompiler( $this->getConfig() );
+       protected function compileLessFile( $fileName, $compiler = null ) {
+               if ( !$compiler ) {
+                       $compiler = $this->getLessCompiler();
+               }
                $result = $compiler->compileFile( $fileName );
                $this->localFileRefs += array_keys( $compiler->allParsedFiles() );
                return $result;
        }
+
+       /**
+        * Get a LESS compiler instance for this module in given context.
+        *
+        * Just calls ResourceLoader::getLessCompiler() by default to get a global compiler.
+        *
+        * @param ResourceLoaderContext $context
+        * @throws MWException
+        * @since 1.24
+        * @return lessc
+        */
+       protected function getLessCompiler( ResourceLoaderContext $context = null ) {
+               return ResourceLoader::getLessCompiler( $this->getConfig() );
+       }
+
+       /**
+        * Takes named templates by the module and returns an array mapping.
+        *
+        * @return array of templates mapping template alias to content
+        */
+       public function getTemplates() {
+               $templates = array();
+
+               foreach ( $this->templates as $alias => $templatePath ) {
+                       // Alias is optional
+                       if ( is_int( $alias ) ) {
+                               $alias = $templatePath;
+                       }
+                       $localPath = $this->getLocalPath( $templatePath );
+                       if ( file_exists( $localPath ) ) {
+                               $content = file_get_contents( $localPath );
+                               $templates[$alias] = $content;
+                       } else {
+                               $msg = __METHOD__ . ": template file not found: \"$localPath\"";
+                               wfDebugLog( 'resourceloader', $msg );
+                               throw new MWException( $msg );
+                       }
+               }
+               return $templates;
+       }
 }
diff --git a/includes/resourceloader/ResourceLoaderLESSFunctions.php b/includes/resourceloader/ResourceLoaderLESSFunctions.php
deleted file mode 100644 (file)
index eb1461f..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-/**
- * PHP-provided functions for LESS; see docs for $wgResourceLoaderLESSFunctions
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-class ResourceLoaderLESSFunctions {
-       /**
-        * Check if an image file reference is suitable for embedding.
-        * An image is embeddable if it (a) exists, (b) has a suitable MIME-type,
-        * (c) does not exceed IE<9 size limit of 32kb. This is a LESS predicate
-        * function; it returns a LESS boolean value and can thus be used as a
-        * mixin guard.
-        *
-        * @par Example:
-        * @code
-        *   .background-image(@url) when(embeddable(@url)) {
-        *       background-image: url(@url) !ie;
-        *   }
-        * @endcode
-        */
-       public static function embeddable( $frame, $less ) {
-               $base = pathinfo( $less->parser->sourceName, PATHINFO_DIRNAME );
-               $url = trim( $less->compileValue( $frame ), '"\'' );
-               $file = realpath( $base . '/' . $url );
-               return $less->toBool( $file
-                       && strpos( $url, '//' ) === false
-                       && filesize( $file ) < CSSMin::EMBED_SIZE_LIMIT
-                       && CSSMin::getMimeType( $file ) !== false );
-       }
-
-       /**
-        * Convert an image URI to a base64-encoded data URI.
-        *
-        * @par Example:
-        * @code
-        *   .fancy-button {
-        *       background-image: embed('../images/button-bg.png');
-        *   }
-        * @endcode
-        */
-       public static function embed( $frame, $less ) {
-               $base = pathinfo( $less->parser->sourceName, PATHINFO_DIRNAME );
-               $url = trim( $less->compileValue( $frame ), '"\'' );
-               $file = realpath( $base . '/' . $url );
-
-               $data = CSSMin::encodeImageAsDataURI( $file );
-               $less->addParsedFile( $file );
-               return CSSMin::buildUrlValue( $data );
-       }
-}
index 45eb70f..4c49fae 100644 (file)
@@ -134,6 +134,16 @@ abstract class ResourceLoaderModule {
                return '';
        }
 
+       /**
+        * Takes named templates by the module and returns an array mapping.
+        *
+        * @return array of templates mapping template alias to content
+        */
+       public function getTemplates() {
+               // Stub, override expected.
+               return array();
+       }
+
        /**
         * @return Config
         * @since 1.24
diff --git a/includes/resourceloader/ResourceLoaderSkinModule.php b/includes/resourceloader/ResourceLoaderSkinModule.php
new file mode 100644 (file)
index 0000000..6de1be0
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Resource loader module for skin stylesheets.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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 Timo Tijhof
+ */
+
+class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
+
+       /* Methods */
+
+       /**
+        * @param $context ResourceLoaderContext
+        * @return array
+        */
+       public function getStyles( ResourceLoaderContext $context ) {
+               $logo = $this->getConfig()->get( 'Logo' );
+               $styles = parent::getStyles( $context );
+               $styles['all'][] = '.mw-wiki-logo { background-image: ' .
+                       CSSMin::buildUrlValue( $logo ) .
+                       '; }';
+
+               return $styles;
+       }
+
+       /**
+        * @param $context ResourceLoaderContext
+        * @return boolean
+        */
+       public function isKnownEmpty( ResourceLoaderContext $context ) {
+               // Regardless of whether the files are specified, we always
+               // provide mw-wiki-logo styles.
+               return false;
+       }
+
+       /**
+        * @param $context ResourceLoaderContext
+        * @return int|mixed
+        */
+       public function getModifiedTime( ResourceLoaderContext $context ) {
+               $parentMTime = parent::getModifiedTime( $context );
+               return max( $parentMTime, $this->getHashMtime( $context ) );
+       }
+
+       /**
+        * @param $context ResourceLoaderContext
+        * @return string: Hash
+        */
+       public function getModifiedHash( ResourceLoaderContext $context ) {
+               $logo = $this->getConfig()->get( 'Logo' );
+               return md5( parent::getModifiedHash( $context ) . $logo );
+       }
+}
index 78fe45c..ee66288 100644 (file)
@@ -92,9 +92,6 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        'wgSiteName' => $conf->get( 'Sitename' ),
                        'wgFileExtensions' => array_values( array_unique( $conf->get( 'FileExtensions' ) ) ),
                        'wgDBname' => $conf->get( 'DBname' ),
-                       // This sucks, it is only needed on Special:Upload, but I could
-                       // not find a way to add vars only for a certain module
-                       'wgFileCanRotate' => BitmapHandler::canRotate(),
                        'wgAvailableSkins' => Skin::getSkinNames(),
                        'wgExtensionAssetsPath' => $conf->get( 'ExtensionAssetsPath' ),
                        // MediaWiki sets cookies to have this prefix by default
@@ -207,6 +204,13 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                                continue;
                        }
 
+                       if ( $module->isRaw() ) {
+                               // Don't register "raw" modules (like 'jquery' and 'mediawiki') client-side because
+                               // depending on them is illegal anyway and would only lead to them being reloaded
+                               // causing any state to be lost (like jQuery plugins, mw.config etc.)
+                               continue;
+                       }
+
                        // getModifiedTime() is supposed to return a UNIX timestamp, but it doesn't always
                        // seem to do that, and custom implementations might forget. Coerce it to TS_UNIX
                        $moduleMtime = wfTimestamp( TS_UNIX, $module->getModifiedTime( $context ) );
@@ -383,11 +387,20 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        $registrations = $this->getModuleRegistrations( $context );
                        // Fix indentation
                        $registrations = str_replace( "\n", "\n\t", trim( $registrations ) );
+                       $mwMapJsCall = Xml::encodeJsCall(
+                               'mw.Map',
+                               array( $this->getConfig()->get( 'LegacyJavaScriptGlobals' ) )
+                       );
+                       $mwConfigSetJsCall = Xml::encodeJsCall(
+                               'mw.config.set',
+                               array( $configuration )
+                       );
+
                        $out .= "var startUp = function () {\n" .
                                "\tmw.config = new " .
-                               Xml::encodeJsCall( 'mw.Map', array( $this->getConfig()->get( 'LegacyJavaScriptGlobals' ) ) ) . "\n" .
+                               $mwMapJsCall . "\n" .
                                "\t$registrations\n" .
-                               "\t" . Xml::encodeJsCall( 'mw.config.set', array( $configuration ) ) .
+                               "\t" . $mwConfigSetJsCall .
                                "};\n";
 
                        // Conditional script injection
index 40274c6..9d97eea 100644 (file)
@@ -42,8 +42,7 @@ class ResourceLoaderUserCSSPrefsModule extends ResourceLoaderModule {
        public function getModifiedTime( ResourceLoaderContext $context ) {
                $hash = $context->getHash();
                if ( !isset( $this->modifiedTime[$hash] ) ) {
-                       global $wgUser;
-                       $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $wgUser->getTouched() );
+                       $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $context->getUserObj()->getTouched() );
                }
 
                return $this->modifiedTime[$hash];
@@ -54,13 +53,11 @@ class ResourceLoaderUserCSSPrefsModule extends ResourceLoaderModule {
         * @return array
         */
        public function getStyles( ResourceLoaderContext $context ) {
-               global $wgUser;
-
                if ( !$this->getConfig()->get( 'AllowUserCssPrefs' ) ) {
                        return array();
                }
 
-               $options = $wgUser->getOptions();
+               $options = $context->getUserObj()->getOptions();
 
                // Build CSS rules
                $rules = array();
index 7cf1942..ee350cf 100644 (file)
@@ -37,27 +37,15 @@ class ResourceLoaderUserGroupsModule extends ResourceLoaderWikiModule {
         * @return array
         */
        protected function getPages( ResourceLoaderContext $context ) {
-               global $wgUser;
-
-               $userName = $context->getUser();
-               if ( $userName === null ) {
-                       return array();
-               }
-
                $useSiteJs = $this->getConfig()->get( 'UseSiteJs' );
                $useSiteCss = $this->getConfig()->get( 'UseSiteCss' );
                if ( !$useSiteJs && !$useSiteCss ) {
                        return array();
                }
 
-               // Use $wgUser is possible; allows to skip a lot of code
-               if ( is_object( $wgUser ) && $wgUser->getName() == $userName ) {
-                       $user = $wgUser;
-               } else {
-                       $user = User::newFromName( $userName );
-                       if ( !$user instanceof User ) {
-                               return array();
-                       }
+               $user = $context->getUserObj();
+               if ( !$user || $user->isAnon() ) {
+                       return array();
                }
 
                $pages = array();
index bd97a8e..e6b07c1 100644 (file)
@@ -44,8 +44,7 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
        public function getModifiedTime( ResourceLoaderContext $context ) {
                $hash = $context->getHash();
                if ( !isset( $this->modifiedTime[$hash] ) ) {
-                       global $wgUser;
-                       $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $wgUser->getTouched() );
+                       $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $context->getUserObj()->getTouched() );
                }
 
                return $this->modifiedTime[$hash];
@@ -56,9 +55,8 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
         * @return string
         */
        public function getScript( ResourceLoaderContext $context ) {
-               global $wgUser;
                return Xml::encodeJsCall( 'mw.user.options.set',
-                       array( $wgUser->getOptions() ),
+                       array( $context->getUserObj()->getOptions() ),
                        ResourceLoader::inDebugMode()
                );
        }
index e652422..ccd1dfd 100644 (file)
@@ -37,15 +37,16 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
        /**
         * Fetch the tokens for the current user.
         *
+        * @param ResourceLoaderContext $context
         * @return array List of tokens keyed by token type
         */
-       protected function contextUserTokens() {
-               global $wgUser;
+       protected function contextUserTokens( ResourceLoaderContext $context ) {
+               $user = $context->getUserObj();
 
                return array(
-                       'editToken' => $wgUser->getEditToken(),
-                       'patrolToken' => ApiQueryRecentChanges::getPatrolToken( null, null ),
-                       'watchToken' => ApiQueryInfo::getWatchToken( null, null ),
+                       'editToken' => $user->getEditToken(),
+                       'patrolToken' => $user->getEditToken( 'patrol' ),
+                       'watchToken' => $user->getEditToken( 'watch' ),
                );
        }
 
@@ -55,7 +56,7 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
         */
        public function getScript( ResourceLoaderContext $context ) {
                return Xml::encodeJsCall( 'mw.user.tokens.set',
-                       array( $this->contextUserTokens() ),
+                       array( $this->contextUserTokens( $context ) ),
                        ResourceLoader::inDebugMode()
                );
        }
index 0472f1a..e195cf2 100644 (file)
@@ -36,8 +36,8 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
        # Origin is user-supplied code
        protected $origin = self::ORIGIN_USER_SITEWIDE;
 
-       // In-object cache for title mtimes
-       protected $titleMtimes = array();
+       // In-object cache for title info
+       protected $titleInfo = array();
 
        /* Abstract Protected Methods */
 
@@ -70,7 +70,7 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
         * In particular, it doesn't work for getting the content of JS and CSS pages. That functionality
         * will use the local DB irrespective of the return value of this method.
         *
-        * @return DatabaseBase|null
+        * @return IDatabase|null
         */
        protected function getDB() {
                return wfGetDB( DB_SLAVE );
@@ -81,9 +81,15 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
         * @return null|string
         */
        protected function getContent( $title ) {
-               if ( !$title->isCssJsSubpage() && !$title->isCssOrJsPage() ) {
+               $handler = ContentHandler::getForTitle( $title );
+               if ( $handler->isSupportedFormat( CONTENT_FORMAT_CSS ) ) {
+                       $format = CONTENT_FORMAT_CSS;
+               } elseif ( $handler->isSupportedFormat( CONTENT_FORMAT_JAVASCRIPT ) ) {
+                       $format = CONTENT_FORMAT_JAVASCRIPT;
+               } else {
                        return null;
                }
+
                $revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
                if ( !$revision ) {
                        return null;
@@ -96,14 +102,7 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
                        return null;
                }
 
-               $model = $content->getModel();
-
-               if ( $model !== CONTENT_MODEL_CSS && $model !== CONTENT_MODEL_JAVASCRIPT ) {
-                       wfDebugLog( 'resourceloader', __METHOD__ . ': bad content model $model for JS/CSS page!' );
-                       return null;
-               }
-
-               return $content->getNativeData(); //NOTE: this is safe, we know it's JS or CSS
+               return $content->serialize( $format );
        }
 
        /* Methods */
@@ -169,8 +168,11 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
         */
        public function getModifiedTime( ResourceLoaderContext $context ) {
                $modifiedTime = 1; // wfTimestamp() interprets 0 as "now"
-               $mtimes = $this->getTitleMtimes( $context );
-               if ( count( $mtimes ) ) {
+               $titleInfo = $this->getTitleInfo( $context );
+               if ( count( $titleInfo ) ) {
+                       $mtimes = array_map( function ( $value ) {
+                               return $value['timestamp'];
+                       }, $titleInfo );
                        $modifiedTime = max( $modifiedTime, max( $mtimes ) );
                }
                $modifiedTime = max(
@@ -199,16 +201,35 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
         * @return bool
         */
        public function isKnownEmpty( ResourceLoaderContext $context ) {
-               return count( $this->getTitleMtimes( $context ) ) == 0;
+               $titleInfo = $this->getTitleInfo( $context );
+               // Bug 68488: For modules in the "user" group, we should actually
+               // check that the pages are empty (page_len == 0), but for other
+               // groups, just check the pages exist so that we don't end up
+               // caching temporarily-blank pages without the appropriate
+               // <script> or <link> tag.
+               if ( $this->getGroup() !== 'user' ) {
+                       return count( $titleInfo ) === 0;
+               }
+
+               foreach ( $titleInfo as $info ) {
+                       if ( $info['length'] !== 0 ) {
+                               // At least one non-0-lenth page, not empty
+                               return false;
+                       }
+               }
+
+               // All pages are 0-length, so it's empty
+               return true;
        }
 
        /**
         * Get the modification times of all titles that would be loaded for
         * a given context.
         * @param ResourceLoaderContext $context Context object
-        * @return array( prefixed DB key => UNIX timestamp ), nonexistent titles are dropped
+        * @return array keyed by page dbkey, with value is an array with 'length' and 'timestamp'
+        *               keys, where the timestamp is a unix one
         */
-       protected function getTitleMtimes( ResourceLoaderContext $context ) {
+       protected function getTitleInfo( ResourceLoaderContext $context ) {
                $dbr = $this->getDB();
                if ( !$dbr ) {
                        // We're dealing with a subclass that doesn't have a DB
@@ -216,11 +237,11 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
                }
 
                $hash = $context->getHash();
-               if ( isset( $this->titleMtimes[$hash] ) ) {
-                       return $this->titleMtimes[$hash];
+               if ( isset( $this->titleInfo[$hash] ) ) {
+                       return $this->titleInfo[$hash];
                }
 
-               $this->titleMtimes[$hash] = array();
+               $this->titleInfo[$hash] = array();
                $batch = new LinkBatch;
                foreach ( $this->getPages( $context ) as $titleText => $options ) {
                        $batch->addObj( Title::newFromText( $titleText ) );
@@ -228,16 +249,18 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
 
                if ( !$batch->isEmpty() ) {
                        $res = $dbr->select( 'page',
-                               array( 'page_namespace', 'page_title', 'page_touched' ),
+                               array( 'page_namespace', 'page_title', 'page_touched', 'page_len' ),
                                $batch->constructSet( 'page', $dbr ),
                                __METHOD__
                        );
                        foreach ( $res as $row ) {
                                $title = Title::makeTitle( $row->page_namespace, $row->page_title );
-                               $this->titleMtimes[$hash][$title->getPrefixedDBkey()] =
-                                       wfTimestamp( TS_UNIX, $row->page_touched );
+                               $this->titleInfo[$hash][$title->getPrefixedDBkey()] = array(
+                                       'timestamp' => wfTimestamp( TS_UNIX, $row->page_touched ),
+                                       'length' => $row->page_len,
+                               );
                        }
                }
-               return $this->titleMtimes[$hash];
+               return $this->titleInfo[$hash];
        }
 }
index 0bd6ca8..c3c3a8f 100644 (file)
@@ -560,15 +560,15 @@ class SearchHighlighter {
         * Returns the first few lines of the text
         *
         * @param string $text
-        * @param int $contextlines max number of returned lines
-        * @param int $contextchars average number of characters per line
+        * @param int $contextlines Max number of returned lines
+        * @param int $contextchars Average number of characters per line
         * @return string
         */
-       public function highlightNone( $text, $contextlines, $contextchars) {
+       public function highlightNone( $text, $contextlines, $contextchars ) {
                $match = array();
                $text = ltrim( $text ) . "\n"; // make sure the preg_match may find the last line
-               $text = str_replace( "\n\n", "\n", $text); // remove empty lines
-               preg_match( "/^(.*\n){0,$contextlines}/", $text , $match);
+               $text = str_replace( "\n\n", "\n", $text ); // remove empty lines
+               preg_match( "/^(.*\n){0,$contextlines}/", $text, $match );
                $text = htmlspecialchars( substr( trim( $match[0] ), 0, $contextlines * $contextchars ) ); // trim and limit to max number of chars
                return str_replace( "\n", '<br>', $text );
        }
index de701f7..0d7970d 100644 (file)
@@ -34,10 +34,7 @@ class SearchMssql extends SearchDatabase {
         * @access public
         */
        function searchText( $term ) {
-               $resultSet = $this->db->resultObject(
-                       $this->db->query( $this->getQuery( $this->filter( $term ), true ) )
-               );
-
+               $resultSet = $this->db->query( $this->getQuery( $this->filter( $term ), true ) );
                return new SqlSearchResultSet( $resultSet, $this->searchTerms );
        }
 
@@ -49,10 +46,7 @@ class SearchMssql extends SearchDatabase {
         * @access public
         */
        function searchTitle( $term ) {
-               $resultSet = $this->db->resultObject(
-                       $this->db->query( $this->getQuery( $this->filter( $term ), false ) )
-               );
-
+               $resultSet = $this->db->query( $this->getQuery( $this->filter( $term ), false ) );
                return new SqlSearchResultSet( $resultSet, $this->searchTerms );
        }
 
index 348da79..5821148 100644 (file)
@@ -69,10 +69,7 @@ class SearchOracle extends SearchDatabase {
                        return new SqlSearchResultSet( false, '' );
                }
 
-               $resultSet = $this->db->resultObject(
-                       $this->db->query( $this->getQuery( $this->filter( $term ), true ) )
-               );
-
+               $resultSet = $this->db->query( $this->getQuery( $this->filter( $term ), true ) );
                return new SqlSearchResultSet( $resultSet, $this->searchTerms );
        }
 
@@ -87,10 +84,7 @@ class SearchOracle extends SearchDatabase {
                        return new SqlSearchResultSet( false, '' );
                }
 
-               $resultSet = $this->db->resultObject(
-                       $this->db->query( $this->getQuery( $this->filter( $term ), false ) )
-               );
-
+               $resultSet = $this->db->query( $this->getQuery( $this->filter( $term ), false ) );
                return new SqlSearchResultSet( $resultSet, $this->searchTerms );
        }
 
index 914bc1c..bda10b0 100644 (file)
@@ -40,7 +40,7 @@ class SearchPostgres extends SearchDatabase {
        function searchTitle( $term ) {
                $q = $this->searchQuery( $term, 'titlevector', 'page_title' );
                $olderror = error_reporting( E_ERROR );
-               $resultSet = $this->db->resultObject( $this->db->query( $q, 'SearchPostgres', true ) );
+               $resultSet = $this->db->query( $q, 'SearchPostgres', true );
                error_reporting( $olderror );
                return new SqlSearchResultSet( $resultSet, $this->searchTerms );
        }
@@ -48,7 +48,7 @@ class SearchPostgres extends SearchDatabase {
        function searchText( $term ) {
                $q = $this->searchQuery( $term, 'textvector', 'old_text' );
                $olderror = error_reporting( E_ERROR );
-               $resultSet = $this->db->resultObject( $this->db->query( $q, 'SearchPostgres', true ) );
+               $resultSet = $this->db->query( $q, 'SearchPostgres', true );
                error_reporting( $olderror );
                return new SqlSearchResultSet( $resultSet, $this->searchTerms );
        }
@@ -85,7 +85,7 @@ class SearchPostgres extends SearchDatabase {
                                if ( strtolower( $terms[2] ) === 'and' ) {
                                        $searchstring .= ' & ';
                                }
-                               elseif ( strtolower( $terms[2] ) === 'or' or $terms[2] === '|' ) {
+                               elseif ( strtolower( $terms[2] ) === 'or' || $terms[2] === '|' ) {
                                        $searchstring .= ' | ';
                                }
                                elseif ( strtolower( $terms[2] ) === 'not' ) {
@@ -142,6 +142,7 @@ class SearchPostgres extends SearchDatabase {
                $top = $res->fetchRow();
                $top = $top[0];
 
+               $this->searchTerms = array();
                if ( $top === "" ) { ## e.g. if only stopwords are used XXX return something better
                        $query = "SELECT page_id, page_namespace, page_title, 0 AS score " .
                                "FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
index 1d28691..2cdf9f4 100644 (file)
@@ -61,35 +61,6 @@ class SearchResult {
                return $result;
        }
 
-       /**
-        * Return a new SearchResult and initializes it with a row.
-        *
-        * @param object $row
-        * @return SearchResult
-        */
-       public static function newFromRow( $row ) {
-               $result = new self();
-               $result->initFromRow( $row );
-               return $result;
-       }
-
-       public function __construct( $row = null ) {
-               if ( !is_null( $row ) ) {
-                       // Backwards compatibility with pre-1.17 callers
-                       $this->initFromRow( $row );
-               }
-       }
-
-       /**
-        * Initialize from a database row. Makes a Title and passes that to
-        * initFromTitle.
-        *
-        * @param object $row
-        */
-       protected function initFromRow( $row ) {
-               $this->initFromTitle( Title::makeTitle( $row->page_namespace, $row->page_title ) );
-       }
-
        /**
         * Initialize from a Title and if possible initializes a corresponding
         * Revision and File.
@@ -214,6 +185,13 @@ class SearchResult {
                return null;
        }
 
+       /**
+        * @return string Highlighted relevant category name or '' if none or not supported
+        */
+       public function getCategorySnippet() {
+               return '';
+       }
+
        /**
         * @return string Timestamp
         */
@@ -242,13 +220,6 @@ class SearchResult {
                return strlen( $this->mText );
        }
 
-       /**
-        * @return bool If hit has related articles
-        */
-       function hasRelated() {
-               return false;
-       }
-
        /**
         * @return string Interwiki prefix of the title (return iw even if title is broken)
         */
index 698f93c..406d322 100644 (file)
@@ -161,7 +161,9 @@ class SqlSearchResultSet extends SearchResultSet {
                        return false;
                }
 
-               return SearchResult::newFromRow( $row );
+               return SearchResult::newFromTitle(
+                       Title::makeTitle( $row->page_namespace, $row->page_title )
+               );
        }
 
        function free() {
index 6659407..e5d05be 100644 (file)
@@ -314,11 +314,7 @@ class SiteSQLStore implements SiteStore {
 
                $dbw = $this->sitesTable->getWriteDbConnection();
 
-               $trx = $dbw->trxLevel();
-
-               if ( $trx == 0 ) {
-                       $dbw->begin( __METHOD__ );
-               }
+               $dbw->startAtomic( __METHOD__ );
 
                $success = true;
 
@@ -360,9 +356,7 @@ class SiteSQLStore implements SiteStore {
                        );
                }
 
-               if ( $trx == 0 ) {
-                       $dbw->commit( __METHOD__ );
-               }
+               $dbw->endAtomic( __METHOD__ );
 
                // purge cache
                $this->reset();
@@ -398,18 +392,10 @@ class SiteSQLStore implements SiteStore {
                wfProfileIn( __METHOD__ );
                $dbw = $this->sitesTable->getWriteDbConnection();
 
-               $trx = $dbw->trxLevel();
-
-               if ( $trx == 0 ) {
-                       $dbw->begin( __METHOD__ );
-               }
-
+               $dbw->startAtomic( __METHOD__ );
                $ok = $dbw->delete( 'sites', '*', __METHOD__ );
                $ok = $dbw->delete( 'site_identifiers', '*', __METHOD__ ) && $ok;
-
-               if ( $trx == 0 ) {
-                       $dbw->commit( __METHOD__ );
-               }
+               $dbw->endAtomic( __METHOD__ );
 
                $this->reset();
 
diff --git a/includes/skins/BaseTemplate.php b/includes/skins/BaseTemplate.php
new file mode 100644 (file)
index 0000000..7217000
--- /dev/null
@@ -0,0 +1,645 @@
+<?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
+ */
+
+/**
+ * New base template for a skin's template extended from QuickTemplate
+ * this class features helper methods that provide common ways of interacting
+ * with the data stored in the QuickTemplate
+ */
+abstract class BaseTemplate extends QuickTemplate {
+
+       /**
+        * Get a Message object with its context set
+        *
+        * @param string $name Message name
+        * @return Message
+        */
+       public function getMsg( $name ) {
+               return $this->getSkin()->msg( $name );
+       }
+
+       function msg( $str ) {
+               echo $this->getMsg( $str )->escaped();
+       }
+
+       function msgHtml( $str ) {
+               echo $this->getMsg( $str )->text();
+       }
+
+       function msgWiki( $str ) {
+               echo $this->getMsg( $str )->parseAsBlock();
+       }
+
+       /**
+        * Create an array of common toolbox items from the data in the quicktemplate
+        * stored by SkinTemplate.
+        * The resulting array is built according to a format intended to be passed
+        * through makeListItem to generate the html.
+        * @return array
+        */
+       function getToolbox() {
+               wfProfileIn( __METHOD__ );
+
+               $toolbox = array();
+               if ( isset( $this->data['nav_urls']['whatlinkshere'] )
+                       && $this->data['nav_urls']['whatlinkshere']
+               ) {
+                       $toolbox['whatlinkshere'] = $this->data['nav_urls']['whatlinkshere'];
+                       $toolbox['whatlinkshere']['id'] = 't-whatlinkshere';
+               }
+               if ( isset( $this->data['nav_urls']['recentchangeslinked'] )
+                       && $this->data['nav_urls']['recentchangeslinked']
+               ) {
+                       $toolbox['recentchangeslinked'] = $this->data['nav_urls']['recentchangeslinked'];
+                       $toolbox['recentchangeslinked']['msg'] = 'recentchangeslinked-toolbox';
+                       $toolbox['recentchangeslinked']['id'] = 't-recentchangeslinked';
+               }
+               if ( isset( $this->data['feeds'] ) && $this->data['feeds'] ) {
+                       $toolbox['feeds']['id'] = 'feedlinks';
+                       $toolbox['feeds']['links'] = array();
+                       foreach ( $this->data['feeds'] as $key => $feed ) {
+                               $toolbox['feeds']['links'][$key] = $feed;
+                               $toolbox['feeds']['links'][$key]['id'] = "feed-$key";
+                               $toolbox['feeds']['links'][$key]['rel'] = 'alternate';
+                               $toolbox['feeds']['links'][$key]['type'] = "application/{$key}+xml";
+                               $toolbox['feeds']['links'][$key]['class'] = 'feedlink';
+                       }
+               }
+               foreach ( array( 'contributions', 'log', 'blockip', 'emailuser',
+                       'userrights', 'upload', 'specialpages' ) as $special
+               ) {
+                       if ( isset( $this->data['nav_urls'][$special] ) && $this->data['nav_urls'][$special] ) {
+                               $toolbox[$special] = $this->data['nav_urls'][$special];
+                               $toolbox[$special]['id'] = "t-$special";
+                       }
+               }
+               if ( isset( $this->data['nav_urls']['print'] ) && $this->data['nav_urls']['print'] ) {
+                       $toolbox['print'] = $this->data['nav_urls']['print'];
+                       $toolbox['print']['id'] = 't-print';
+                       $toolbox['print']['rel'] = 'alternate';
+                       $toolbox['print']['msg'] = 'printableversion';
+               }
+               if ( isset( $this->data['nav_urls']['permalink'] ) && $this->data['nav_urls']['permalink'] ) {
+                       $toolbox['permalink'] = $this->data['nav_urls']['permalink'];
+                       if ( $toolbox['permalink']['href'] === '' ) {
+                               unset( $toolbox['permalink']['href'] );
+                               $toolbox['ispermalink']['tooltiponly'] = true;
+                               $toolbox['ispermalink']['id'] = 't-ispermalink';
+                               $toolbox['ispermalink']['msg'] = 'permalink';
+                       } else {
+                               $toolbox['permalink']['id'] = 't-permalink';
+                       }
+               }
+               if ( isset( $this->data['nav_urls']['info'] ) && $this->data['nav_urls']['info'] ) {
+                       $toolbox['info'] = $this->data['nav_urls']['info'];
+                       $toolbox['info']['id'] = 't-info';
+               }
+
+               wfRunHooks( 'BaseTemplateToolbox', array( &$this, &$toolbox ) );
+               wfProfileOut( __METHOD__ );
+               return $toolbox;
+       }
+
+       /**
+        * Create an array of personal tools items from the data in the quicktemplate
+        * stored by SkinTemplate.
+        * The resulting array is built according to a format intended to be passed
+        * through makeListItem to generate the html.
+        * This is in reality the same list as already stored in personal_urls
+        * however it is reformatted so that you can just pass the individual items
+        * to makeListItem instead of hardcoding the element creation boilerplate.
+        * @return array
+        */
+       function getPersonalTools() {
+               $personal_tools = array();
+               foreach ( $this->get( 'personal_urls' ) as $key => $plink ) {
+                       # The class on a personal_urls item is meant to go on the <a> instead
+                       # of the <li> so we have to use a single item "links" array instead
+                       # of using most of the personal_url's keys directly.
+                       $ptool = array(
+                               'links' => array(
+                                       array( 'single-id' => "pt-$key" ),
+                               ),
+                               'id' => "pt-$key",
+                       );
+                       if ( isset( $plink['active'] ) ) {
+                               $ptool['active'] = $plink['active'];
+                       }
+                       foreach ( array( 'href', 'class', 'text', 'dir' ) as $k ) {
+                               if ( isset( $plink[$k] ) ) {
+                                       $ptool['links'][0][$k] = $plink[$k];
+                               }
+                       }
+                       $personal_tools[$key] = $ptool;
+               }
+               return $personal_tools;
+       }
+
+       function getSidebar( $options = array() ) {
+               // Force the rendering of the following portals
+               $sidebar = $this->data['sidebar'];
+               if ( !isset( $sidebar['SEARCH'] ) ) {
+                       $sidebar['SEARCH'] = true;
+               }
+               if ( !isset( $sidebar['TOOLBOX'] ) ) {
+                       $sidebar['TOOLBOX'] = true;
+               }
+               if ( !isset( $sidebar['LANGUAGES'] ) ) {
+                       $sidebar['LANGUAGES'] = true;
+               }
+
+               if ( !isset( $options['search'] ) || $options['search'] !== true ) {
+                       unset( $sidebar['SEARCH'] );
+               }
+               if ( isset( $options['toolbox'] ) && $options['toolbox'] === false ) {
+                       unset( $sidebar['TOOLBOX'] );
+               }
+               if ( isset( $options['languages'] ) && $options['languages'] === false ) {
+                       unset( $sidebar['LANGUAGES'] );
+               }
+
+               $boxes = array();
+               foreach ( $sidebar as $boxName => $content ) {
+                       if ( $content === false ) {
+                               continue;
+                       }
+                       switch ( $boxName ) {
+                       case 'SEARCH':
+                               // Search is a special case, skins should custom implement this
+                               $boxes[$boxName] = array(
+                                       'id' => 'p-search',
+                                       'header' => $this->getMsg( 'search' )->text(),
+                                       'generated' => false,
+                                       'content' => true,
+                               );
+                               break;
+                       case 'TOOLBOX':
+                               $msgObj = $this->getMsg( 'toolbox' );
+                               $boxes[$boxName] = array(
+                                       'id' => 'p-tb',
+                                       'header' => $msgObj->exists() ? $msgObj->text() : 'toolbox',
+                                       'generated' => false,
+                                       'content' => $this->getToolbox(),
+                               );
+                               break;
+                       case 'LANGUAGES':
+                               if ( $this->data['language_urls'] ) {
+                                       $msgObj = $this->getMsg( 'otherlanguages' );
+                                       $boxes[$boxName] = array(
+                                               'id' => 'p-lang',
+                                               'header' => $msgObj->exists() ? $msgObj->text() : 'otherlanguages',
+                                               'generated' => false,
+                                               'content' => $this->data['language_urls'],
+                                       );
+                               }
+                               break;
+                       default:
+                               $msgObj = $this->getMsg( $boxName );
+                               $boxes[$boxName] = array(
+                                       'id' => "p-$boxName",
+                                       'header' => $msgObj->exists() ? $msgObj->text() : $boxName,
+                                       'generated' => true,
+                                       'content' => $content,
+                               );
+                               break;
+                       }
+               }
+
+               // HACK: Compatibility with extensions still using SkinTemplateToolboxEnd
+               $hookContents = null;
+               if ( isset( $boxes['TOOLBOX'] ) ) {
+                       ob_start();
+                       // We pass an extra 'true' at the end so extensions using BaseTemplateToolbox
+                       // can abort and avoid outputting double toolbox links
+                       wfRunHooks( 'SkinTemplateToolboxEnd', array( &$this, true ) );
+                       $hookContents = ob_get_contents();
+                       ob_end_clean();
+                       if ( !trim( $hookContents ) ) {
+                               $hookContents = null;
+                       }
+               }
+               // END hack
+
+               if ( isset( $options['htmlOnly'] ) && $options['htmlOnly'] === true ) {
+                       foreach ( $boxes as $boxName => $box ) {
+                               if ( is_array( $box['content'] ) ) {
+                                       $content = '<ul>';
+                                       foreach ( $box['content'] as $key => $val ) {
+                                               $content .= "\n " . $this->makeListItem( $key, $val );
+                                       }
+                                       // HACK, shove the toolbox end onto the toolbox if we're rendering itself
+                                       if ( $hookContents ) {
+                                               $content .= "\n $hookContents";
+                                       }
+                                       // END hack
+                                       $content .= "\n</ul>\n";
+                                       $boxes[$boxName]['content'] = $content;
+                               }
+                       }
+               } else {
+                       if ( $hookContents ) {
+                               $boxes['TOOLBOXEND'] = array(
+                                       'id' => 'p-toolboxend',
+                                       'header' => $boxes['TOOLBOX']['header'],
+                                       'generated' => false,
+                                       'content' => "<ul>{$hookContents}</ul>",
+                               );
+                               // HACK: Make sure that TOOLBOXEND is sorted next to TOOLBOX
+                               $boxes2 = array();
+                               foreach ( $boxes as $key => $box ) {
+                                       if ( $key === 'TOOLBOXEND' ) {
+                                               continue;
+                                       }
+                                       $boxes2[$key] = $box;
+                                       if ( $key === 'TOOLBOX' ) {
+                                               $boxes2['TOOLBOXEND'] = $boxes['TOOLBOXEND'];
+                                       }
+                               }
+                               $boxes = $boxes2;
+                               // END hack
+                       }
+               }
+
+               return $boxes;
+       }
+
+       /**
+        * @param string $name
+        */
+       protected function renderAfterPortlet( $name ) {
+               $content = '';
+               wfRunHooks( 'BaseTemplateAfterPortlet', array( $this, $name, &$content ) );
+
+               if ( $content !== '' ) {
+                       echo "<div class='after-portlet after-portlet-$name'>$content</div>";
+               }
+
+       }
+
+       /**
+        * Makes a link, usually used by makeListItem to generate a link for an item
+        * in a list used in navigation lists, portlets, portals, sidebars, etc...
+        *
+        * @param string $key Usually a key from the list you are generating this
+        * link from.
+        * @param array $item Contains some of a specific set of keys.
+        *
+        * The text of the link will be generated either from the contents of the
+        * "text" key in the $item array, if a "msg" key is present a message by
+        * that name will be used, and if neither of those are set the $key will be
+        * used as a message name.
+        *
+        * If a "href" key is not present makeLink will just output htmlescaped text.
+        * The "href", "id", "class", "rel", and "type" keys are used as attributes
+        * for the link if present.
+        *
+        * If an "id" or "single-id" (if you don't want the actual id to be output
+        * on the link) is present it will be used to generate a tooltip and
+        * accesskey for the link.
+        *
+        * The keys "context" and "primary" are ignored; these keys are used
+        * internally by skins and are not supposed to be included in the HTML
+        * output.
+        *
+        * If you don't want an accesskey, set $item['tooltiponly'] = true;
+        *
+        * @param array $options Can be used to affect the output of a link.
+        * Possible options are:
+        *   - 'text-wrapper' key to specify a list of elements to wrap the text of
+        *   a link in. This should be an array of arrays containing a 'tag' and
+        *   optionally an 'attributes' key. If you only have one element you don't
+        *   need to wrap it in another array. eg: To use <a><span>...</span></a>
+        *   in all links use array( 'text-wrapper' => array( 'tag' => 'span' ) )
+        *   for your options.
+        *   - 'link-class' key can be used to specify additional classes to apply
+        *   to all links.
+        *   - 'link-fallback' can be used to specify a tag to use instead of "<a>"
+        *   if there is no link. eg: If you specify 'link-fallback' => 'span' than
+        *   any non-link will output a "<span>" instead of just text.
+        *
+        * @return string
+        */
+       function makeLink( $key, $item, $options = array() ) {
+               if ( isset( $item['text'] ) ) {
+                       $text = $item['text'];
+               } else {
+                       $text = $this->translator->translate( isset( $item['msg'] ) ? $item['msg'] : $key );
+               }
+
+               $html = htmlspecialchars( $text );
+
+               if ( isset( $options['text-wrapper'] ) ) {
+                       $wrapper = $options['text-wrapper'];
+                       if ( isset( $wrapper['tag'] ) ) {
+                               $wrapper = array( $wrapper );
+                       }
+                       while ( count( $wrapper ) > 0 ) {
+                               $element = array_pop( $wrapper );
+                               $html = Html::rawElement( $element['tag'], isset( $element['attributes'] )
+                                       ? $element['attributes']
+                                       : null, $html );
+                       }
+               }
+
+               if ( isset( $item['href'] ) || isset( $options['link-fallback'] ) ) {
+                       $attrs = $item;
+                       foreach ( array( 'single-id', 'text', 'msg', 'tooltiponly', 'context', 'primary' ) as $k ) {
+                               unset( $attrs[$k] );
+                       }
+
+                       if ( isset( $item['id'] ) && !isset( $item['single-id'] ) ) {
+                               $item['single-id'] = $item['id'];
+                       }
+                       if ( isset( $item['single-id'] ) ) {
+                               if ( isset( $item['tooltiponly'] ) && $item['tooltiponly'] ) {
+                                       $title = Linker::titleAttrib( $item['single-id'] );
+                                       if ( $title !== false ) {
+                                               $attrs['title'] = $title;
+                                       }
+                               } else {
+                                       $tip = Linker::tooltipAndAccesskeyAttribs( $item['single-id'] );
+                                       if ( isset( $tip['title'] ) && $tip['title'] !== false ) {
+                                               $attrs['title'] = $tip['title'];
+                                       }
+                                       if ( isset( $tip['accesskey'] ) && $tip['accesskey'] !== false ) {
+                                               $attrs['accesskey'] = $tip['accesskey'];
+                                       }
+                               }
+                       }
+                       if ( isset( $options['link-class'] ) ) {
+                               if ( isset( $attrs['class'] ) ) {
+                                       $attrs['class'] .= " {$options['link-class']}";
+                               } else {
+                                       $attrs['class'] = $options['link-class'];
+                               }
+                       }
+                       $html = Html::rawElement( isset( $attrs['href'] )
+                               ? 'a'
+                               : $options['link-fallback'], $attrs, $html );
+               }
+
+               return $html;
+       }
+
+       /**
+        * Generates a list item for a navigation, portlet, portal, sidebar... list
+        *
+        * @param string $key Usually a key from the list you are generating this link from.
+        * @param array $item Array of list item data containing some of a specific set of keys.
+        * The "id", "class" and "itemtitle" keys will be used as attributes for the list item,
+        * if "active" contains a value of true a "active" class will also be appended to class.
+        *
+        * @param array $options
+        *
+        * If you want something other than a "<li>" you can pass a tag name such as
+        * "tag" => "span" in the $options array to change the tag used.
+        * link/content data for the list item may come in one of two forms
+        * A "links" key may be used, in which case it should contain an array with
+        * a list of links to include inside the list item, see makeLink for the
+        * format of individual links array items.
+        *
+        * Otherwise the relevant keys from the list item $item array will be passed
+        * to makeLink instead. Note however that "id" and "class" are used by the
+        * list item directly so they will not be passed to makeLink
+        * (however the link will still support a tooltip and accesskey from it)
+        * If you need an id or class on a single link you should include a "links"
+        * array with just one link item inside of it. If you want to add a title
+        * to the list item itself, you can set "itemtitle" to the value.
+        * $options is also passed on to makeLink calls
+        *
+        * @return string
+        */
+       function makeListItem( $key, $item, $options = array() ) {
+               if ( isset( $item['links'] ) ) {
+                       $links = array();
+                       foreach ( $item['links'] as $linkKey => $link ) {
+                               $links[] = $this->makeLink( $linkKey, $link, $options );
+                       }
+                       $html = implode( ' ', $links );
+               } else {
+                       $link = $item;
+                       // These keys are used by makeListItem and shouldn't be passed on to the link
+                       foreach ( array( 'id', 'class', 'active', 'tag', 'itemtitle' ) as $k ) {
+                               unset( $link[$k] );
+                       }
+                       if ( isset( $item['id'] ) && !isset( $item['single-id'] ) ) {
+                               // The id goes on the <li> not on the <a> for single links
+                               // but makeSidebarLink still needs to know what id to use when
+                               // generating tooltips and accesskeys.
+                               $link['single-id'] = $item['id'];
+                       }
+                       $html = $this->makeLink( $key, $link, $options );
+               }
+
+               $attrs = array();
+               foreach ( array( 'id', 'class' ) as $attr ) {
+                       if ( isset( $item[$attr] ) ) {
+                               $attrs[$attr] = $item[$attr];
+                       }
+               }
+               if ( isset( $item['active'] ) && $item['active'] ) {
+                       if ( !isset( $attrs['class'] ) ) {
+                               $attrs['class'] = '';
+                       }
+                       $attrs['class'] .= ' active';
+                       $attrs['class'] = trim( $attrs['class'] );
+               }
+               if ( isset( $item['itemtitle'] ) ) {
+                       $attrs['title'] = $item['itemtitle'];
+               }
+               return Html::rawElement( isset( $options['tag'] ) ? $options['tag'] : 'li', $attrs, $html );
+       }
+
+       function makeSearchInput( $attrs = array() ) {
+               $realAttrs = array(
+                       'type' => 'search',
+                       'name' => 'search',
+                       'placeholder' => wfMessage( 'searchsuggest-search' )->text(),
+                       'value' => $this->get( 'search', '' ),
+               );
+               $realAttrs = array_merge( $realAttrs, Linker::tooltipAndAccesskeyAttribs( 'search' ), $attrs );
+               return Html::element( 'input', $realAttrs );
+       }
+
+       function makeSearchButton( $mode, $attrs = array() ) {
+               switch ( $mode ) {
+                       case 'go':
+                       case 'fulltext':
+                               $realAttrs = array(
+                                       'type' => 'submit',
+                                       'name' => $mode,
+                                       'value' => $this->translator->translate(
+                                               $mode == 'go' ? 'searcharticle' : 'searchbutton' ),
+                               );
+                               $realAttrs = array_merge(
+                                       $realAttrs,
+                                       Linker::tooltipAndAccesskeyAttribs( "search-$mode" ),
+                                       $attrs
+                               );
+                               return Html::element( 'input', $realAttrs );
+                       case 'image':
+                               $buttonAttrs = array(
+                                       'type' => 'submit',
+                                       'name' => 'button',
+                               );
+                               $buttonAttrs = array_merge(
+                                       $buttonAttrs,
+                                       Linker::tooltipAndAccesskeyAttribs( 'search-fulltext' ),
+                                       $attrs
+                               );
+                               unset( $buttonAttrs['src'] );
+                               unset( $buttonAttrs['alt'] );
+                               unset( $buttonAttrs['width'] );
+                               unset( $buttonAttrs['height'] );
+                               $imgAttrs = array(
+                                       'src' => $attrs['src'],
+                                       'alt' => isset( $attrs['alt'] )
+                                               ? $attrs['alt']
+                                               : $this->translator->translate( 'searchbutton' ),
+                                       'width' => isset( $attrs['width'] ) ? $attrs['width'] : null,
+                                       'height' => isset( $attrs['height'] ) ? $attrs['height'] : null,
+                               );
+                               return Html::rawElement( 'button', $buttonAttrs, Html::element( 'img', $imgAttrs ) );
+                       default:
+                               throw new MWException( 'Unknown mode passed to BaseTemplate::makeSearchButton' );
+               }
+       }
+
+       /**
+        * Returns an array of footerlinks trimmed down to only those footer links that
+        * are valid.
+        * If you pass "flat" as an option then the returned array will be a flat array
+        * of footer icons instead of a key/value array of footerlinks arrays broken
+        * up into categories.
+        * @param string $option
+        * @return array|mixed
+        */
+       function getFooterLinks( $option = null ) {
+               $footerlinks = $this->get( 'footerlinks' );
+
+               // Reduce footer links down to only those which are being used
+               $validFooterLinks = array();
+               foreach ( $footerlinks as $category => $links ) {
+                       $validFooterLinks[$category] = array();
+                       foreach ( $links as $link ) {
+                               if ( isset( $this->data[$link] ) && $this->data[$link] ) {
+                                       $validFooterLinks[$category][] = $link;
+                               }
+                       }
+                       if ( count( $validFooterLinks[$category] ) <= 0 ) {
+                               unset( $validFooterLinks[$category] );
+                       }
+               }
+
+               if ( $option == 'flat' ) {
+                       // fold footerlinks into a single array using a bit of trickery
+                       $validFooterLinks = call_user_func_array(
+                               'array_merge',
+                               array_values( $validFooterLinks )
+                       );
+               }
+
+               return $validFooterLinks;
+       }
+
+       /**
+        * Returns an array of footer icons filtered down by options relevant to how
+        * the skin wishes to display them.
+        * If you pass "icononly" as the option all footer icons which do not have an
+        * image icon set will be filtered out.
+        * If you pass "nocopyright" then MediaWiki's copyright icon will not be included
+        * in the list of footer icons. This is mostly useful for skins which only
+        * display the text from footericons instead of the images and don't want a
+        * duplicate copyright statement because footerlinks already rendered one.
+        * @param string $option
+        * @return string
+        */
+       function getFooterIcons( $option = null ) {
+               // Generate additional footer icons
+               $footericons = $this->get( 'footericons' );
+
+               if ( $option == 'icononly' ) {
+                       // Unset any icons which don't have an image
+                       foreach ( $footericons as &$footerIconsBlock ) {
+                               foreach ( $footerIconsBlock as $footerIconKey => $footerIcon ) {
+                                       if ( !is_string( $footerIcon ) && !isset( $footerIcon['src'] ) ) {
+                                               unset( $footerIconsBlock[$footerIconKey] );
+                                       }
+                               }
+                       }
+                       // Redo removal of any empty blocks
+                       foreach ( $footericons as $footerIconsKey => &$footerIconsBlock ) {
+                               if ( count( $footerIconsBlock ) <= 0 ) {
+                                       unset( $footericons[$footerIconsKey] );
+                               }
+                       }
+               } elseif ( $option == 'nocopyright' ) {
+                       unset( $footericons['copyright']['copyright'] );
+                       if ( count( $footericons['copyright'] ) <= 0 ) {
+                               unset( $footericons['copyright'] );
+                       }
+               }
+
+               return $footericons;
+       }
+
+       /**
+        * Get the suggested HTML for page status indicators: icons (or short text snippets) usually
+        * displayed in the top-right corner of the page, outside of the main content.
+        *
+        * Your skin may implement this differently, for example by handling some indicator names
+        * specially with a different UI. However, it is recommended to use a `<div class="mw-indicator"
+        * id="mw-indicator-<id>" />` as a wrapper element for each indicator, for better compatibility
+        * with extensions and user scripts.
+        *
+        * The raw data is available in `$this->data['indicators']` as an associative array (keys:
+        * identifiers, values: contents) internally ordered by keys.
+        *
+        * @return string HTML
+        * @since 1.25
+        */
+       public function getIndicators() {
+               $out = "<div class=\"mw-indicators\">\n";
+               foreach ( $this->data['indicators'] as $id => $content ) {
+                       $out .= Html::rawElement(
+                               'div',
+                               array(
+                                       'id' => Sanitizer::escapeId( "mw-indicator-$id" ),
+                                       'class' => 'mw-indicator',
+                               ),
+                               $content
+                       ) . "\n";
+               }
+               $out .= "</div>\n";
+               return $out;
+       }
+
+       /**
+        * Output the basic end-page trail including bottomscripts, reporttime, and
+        * debug stuff. This should be called right before outputting the closing
+        * body and html tags.
+        */
+       function printTrail() { ?>
+<?php echo MWDebug::getDebugHTML( $this->getSkin()->getContext() ); ?>
+<?php $this->html( 'bottomscripts' ); /* JS call to runBodyOnloadHook */ ?>
+<?php $this->html( 'reporttime' ) ?>
+<?php
+       }
+}
diff --git a/includes/skins/MediaWikiI18N.php b/includes/skins/MediaWikiI18N.php
new file mode 100644 (file)
index 0000000..8bd77cc
--- /dev/null
@@ -0,0 +1,54 @@
+<?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
+ */
+
+/**
+ * Wrapper object for MediaWiki's localization functions,
+ * to be passed to the template engine.
+ *
+ * @private
+ * @ingroup Skins
+ */
+class MediaWikiI18N {
+       private $context = array();
+
+       function set( $varName, $value ) {
+               $this->context[$varName] = $value;
+       }
+
+       function translate( $value ) {
+               wfProfileIn( __METHOD__ );
+
+               // Hack for i18n:attributes in PHPTAL 1.0.0 dev version as of 2004-10-23
+               $value = preg_replace( '/^string:/', '', $value );
+
+               $value = wfMessage( $value )->text();
+               // interpolate variables
+               $m = array();
+               while ( preg_match( '/\$([0-9]*?)/sm', $value, $m ) ) {
+                       list( $src, $var ) = $m;
+                       wfSuppressWarnings();
+                       $varValue = $this->context[$var];
+                       wfRestoreWarnings();
+                       $value = str_replace( $src, $varValue, $value );
+               }
+               wfProfileOut( __METHOD__ );
+               return $value;
+       }
+}
diff --git a/includes/skins/QuickTemplate.php b/includes/skins/QuickTemplate.php
new file mode 100644 (file)
index 0000000..b28dc51
--- /dev/null
@@ -0,0 +1,180 @@
+<?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
+ */
+
+/**
+ * Generic wrapper for template functions, with interface
+ * compatible with what we use of PHPTAL 0.7.
+ * @ingroup Skins
+ */
+abstract class QuickTemplate {
+
+       /** @var Config $config */
+       protected $config;
+
+       /**
+        * @param Config $config
+        */
+       function __construct( Config $config = null ) {
+               $this->data = array();
+               $this->translator = new MediaWikiI18N();
+               if ( $config === null ) {
+                       wfDebug( __METHOD__ . ' was called with no Config instance passed to it' );
+                       $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+               }
+               $this->config = $config;
+       }
+
+       /**
+        * Sets the value $value to $name
+        * @param string $name
+        * @param mixed $value
+        */
+       public function set( $name, $value ) {
+               $this->data[$name] = $value;
+       }
+
+       /**
+        * Gets the template data requested
+        * @since 1.22
+        * @param string $name Key for the data
+        * @param mixed $default Optional default (or null)
+        * @return mixed The value of the data requested or the deafult
+        */
+       public function get( $name, $default = null ) {
+               if ( isset( $this->data[$name] ) ) {
+                       return $this->data[$name];
+               } else {
+                       return $default;
+               }
+       }
+
+       /**
+        * @param string $name
+        * @param mixed $value
+        */
+       public function setRef( $name, &$value ) {
+               $this->data[$name] =& $value;
+       }
+
+       /**
+        * @param MediaWikiI18N $t
+        */
+       public function setTranslator( &$t ) {
+               $this->translator = &$t;
+       }
+
+       /**
+        * Main function, used by classes that subclass QuickTemplate
+        * to show the actual HTML output
+        */
+       abstract public function execute();
+
+       /**
+        * @private
+        * @param string $str
+        * @return string
+        */
+       function text( $str ) {
+               echo htmlspecialchars( $this->data[$str] );
+       }
+
+       /**
+        * @private
+        * @param string $str
+        * @return string
+        */
+       function html( $str ) {
+               echo $this->data[$str];
+       }
+
+       /**
+        * @private
+        * @param string $str
+        * @return string
+        */
+       function msg( $str ) {
+               echo htmlspecialchars( $this->translator->translate( $str ) );
+       }
+
+       /**
+        * @private
+        * @param string $str
+        * @return string
+        */
+       function msgHtml( $str ) {
+               echo $this->translator->translate( $str );
+       }
+
+       /**
+        * An ugly, ugly hack.
+        * @private
+        * @param string $str
+        * @return string
+        */
+       function msgWiki( $str ) {
+               global $wgOut;
+
+               $text = $this->translator->translate( $str );
+               echo $wgOut->parse( $text );
+       }
+
+       /**
+        * @private
+        * @param string $str
+        * @return bool
+        */
+       function haveData( $str ) {
+               return isset( $this->data[$str] );
+       }
+
+       /**
+        * @private
+        *
+        * @param string $str
+        * @return bool
+        */
+       function haveMsg( $str ) {
+               $msg = $this->translator->translate( $str );
+               return ( $msg != '-' ) && ( $msg != '' ); # ????
+       }
+
+       /**
+        * Get the Skin object related to this object
+        *
+        * @return Skin
+        */
+       public function getSkin() {
+               return $this->data['skin'];
+       }
+
+       /**
+        * Fetch the output of a QuickTemplate and return it
+        *
+        * @since 1.23
+        * @return string
+        */
+       public function getHTML() {
+               ob_start();
+               $this->execute();
+               $html = ob_get_contents();
+               ob_end_clean();
+               return $html;
+       }
+}
index dc06eba..384aeda 100644 (file)
@@ -239,23 +239,33 @@ abstract class Skin extends ContextSource {
         * Preload the existence of three commonly-requested pages in a single query
         */
        function preloadExistence() {
+               $titles = array();
+
                $user = $this->getUser();
+               $title = $this->getRelevantTitle();
 
                // User/talk link
-               $titles = array( $user->getUserPage(), $user->getTalkPage() );
+               if ( $user->isLoggedIn() || $this->showIPinHeader() ) {
+                       $titles[] = $user->getUserPage();
+                       $titles[] = $user->getTalkPage();
+               }
 
                // Other tab link
-               if ( $this->getTitle()->isSpecialPage() ) {
+               if ( $title->isSpecialPage() ) {
                        // nothing
-               } elseif ( $this->getTitle()->isTalkPage() ) {
-                       $titles[] = $this->getTitle()->getSubjectPage();
+               } elseif ( $title->isTalkPage() ) {
+                       $titles[] = $title->getSubjectPage();
                } else {
-                       $titles[] = $this->getTitle()->getTalkPage();
+                       $titles[] = $title->getTalkPage();
                }
 
-               $lb = new LinkBatch( $titles );
-               $lb->setCaller( __METHOD__ );
-               $lb->execute();
+               wfRunHooks( 'SkinPreloadExistence', array( &$titles, $this ) );
+
+               if ( count( $titles ) ) {
+                       $lb = new LinkBatch( $titles );
+                       $lb->setCaller( __METHOD__ );
+                       $lb->execute();
+               }
        }
 
        /**
@@ -645,12 +655,12 @@ abstract class Skin extends ContextSource {
        function getUndeleteLink() {
                $action = $this->getRequest()->getVal( 'action', 'view' );
 
-               if ( $this->getUser()->isAllowed( 'deletedhistory' ) &&
+               if ( $this->getTitle()->userCan( 'deletedhistory', $this->getUser() ) &&
                        ( $this->getTitle()->getArticleID() == 0 || $action == 'history' ) ) {
                        $n = $this->getTitle()->isDeleted();
 
                        if ( $n ) {
-                               if ( $this->getUser()->isAllowed( 'undelete' ) ) {
+                               if ( $this->getTitle()->userCan( 'undelete', $this->getUser() ) ) {
                                        $msg = 'thisisdeleted';
                                } else {
                                        $msg = 'viewdeleted';
@@ -825,9 +835,9 @@ abstract class Skin extends ContextSource {
         * @return string
         */
        function getPoweredBy() {
-               global $wgStylePath;
+               global $wgResourceBasePath;
 
-               $url = htmlspecialchars( "$wgStylePath/common/images/poweredby_mediawiki_88x31.png" );
+               $url = htmlspecialchars( "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png" );
                $text = '<a href="//www.mediawiki.org/"><img src="' . $url
                        . '" height="31" width="88" alt="Powered by MediaWiki" /></a>';
                wfRunHooks( 'SkinGetPoweredBy', array( &$text, $this ) );
@@ -930,6 +940,7 @@ abstract class Skin extends ContextSource {
         * @return string HTML anchor
         */
        public function footerLink( $desc, $page ) {
+               $section = new ProfileSection( __METHOD__ );
                // if the link description has been set to "-" in the default language,
                if ( $this->msg( $desc )->inContentLanguage()->isDisabled() ) {
                        // then it is disabled, for all languages.
@@ -1006,15 +1017,18 @@ abstract class Skin extends ContextSource {
        }
 
        /**
-        * Return a fully resolved style path url to images or styles stored in the common folder.
-        * This method returns a url resolved using the configured skin style path
-        * and includes the style version inside of the url.
+        * This function previously returned a fully resolved style path URL to images or styles stored in
+        * the legacy skins/common/ directory.
+        *
+        * That directory has been removed in 1.24 and the function always returns an empty string.
+        *
+        * @deprecated since 1.24
         * @param string $name The name or path of a skin resource file
-        * @return string The fully resolved style path url including styleversion
+        * @return string Empty string
         */
        function getCommonStylePath( $name ) {
-               global $wgStylePath, $wgStyleVersion;
-               return "$wgStylePath/common/$name?$wgStyleVersion";
+               wfDeprecated( __METHOD__, '1.24' );
+               return '';
        }
 
        /**
diff --git a/includes/skins/SkinApi.php b/includes/skins/SkinApi.php
new file mode 100644 (file)
index 0000000..2fef220
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Extremely basic "skin" for API output, which needs to output a page without
+ * the usual skin elements but still using CSS, JS, and such via OutputPage and
+ * ResourceLoader.
+ *
+ * Created on Sep 08, 2014
+ *
+ * Copyright © 2014 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
+ */
+
+/**
+ * SkinTemplate class for API output
+ * @since 1.25
+ */
+class SkinApi extends SkinTemplate {
+       public $skinname = 'apioutput';
+       public $template = 'SkinApiTemplate';
+
+       public function setupSkinUserCss( OutputPage $out ) {
+               parent::setupSkinUserCss( $out );
+               $out->addModuleStyles( 'mediawiki.skinning.interface' );
+       }
+
+       // Skip work and hooks for stuff we don't use
+
+       function buildSidebar() {
+               return array();
+       }
+
+       function getNewtalks() {
+               return '';
+       }
+
+       function getSiteNotice() {
+               return '';
+       }
+
+       public function getLanguages() {
+               return array();
+       }
+
+       protected function buildPersonalUrls() {
+               return array();
+       }
+
+       protected function buildContentNavigationUrls() {
+               return array();
+       }
+
+       protected function buildNavUrls() {
+               return array();
+       }
+}
diff --git a/includes/skins/SkinApiTemplate.php b/includes/skins/SkinApiTemplate.php
new file mode 100644 (file)
index 0000000..2062da8
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Extremely basic "skin" for API output, which needs to output a page without
+ * the usual skin elements but still using CSS, JS, and such via OutputPage and
+ * ResourceLoader.
+ *
+ * Created on Sep 08, 2014
+ *
+ * Copyright © 2014 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
+ */
+
+/**
+ * BaseTemplate class for the 'apioutput' skin
+ * @since 1.25
+ */
+class SkinApiTemplate extends BaseTemplate {
+
+       public function execute() {
+               $this->html( 'headelement' ) ?>
+
+               <div class="mw-body" role="main">
+                       <h1 class="firstHeading">
+                               <span dir="auto"><?php $this->html( 'title' ) ?></span>
+                       </h1>
+                       <div class="mw-body-content">
+                               <?php $this->html( 'bodytext' ) ?>
+                       </div>
+               </div>
+
+               <?php $this->printTrail() ?>
+               </body></html>
+<?php
+       }
+
+       // Skip work and hooks for stuff we don't use
+
+       function getToolbox() {
+               return array();
+       }
+
+       function getPersonalTools() {
+               return array();
+       }
+
+       function getSidebar( $options = array() ) {
+               return array();
+       }
+}
index 6448088..ffbe629 100644 (file)
@@ -40,13 +40,6 @@ class SkinFactory {
         * @var array
         */
        private $displayNames = array();
-       /**
-        * Map of name => class name without "Skin" prefix, for legacy skins using the autodiscovery
-        * mechanism
-        *
-        * @var array
-        */
-       private $legacySkins = array();
 
        /**
         * @var SkinFactory
@@ -70,7 +63,7 @@ class SkinFactory {
         *     to be, but doing so would change the case of i18n message keys).
         * @param string $displayName For backwards-compatibility with old skin loading system. This is
         *     the text used as skin's human-readable name when the 'skinname-<skin>' message is not
-   *     available. It should be the same as the skin name provided in $wgExtensionCredits.
+        *     available. It should be the same as the skin name provided in $wgExtensionCredits.
         * @param callable $callback Callback that takes the skin name as an argument
         * @throws InvalidArgumentException If an invalid callback is provided
         */
@@ -82,66 +75,6 @@ class SkinFactory {
                $this->displayNames[$name] = $displayName;
        }
 
-       /**
-        * @return array
-        */
-       private function getLegacySkinNames() {
-               static $skinsInitialised = false;
-
-               if ( !$skinsInitialised || !count( $this->legacySkins ) ) {
-                       # Get a list of available skins
-                       # Build using the regular expression '^(.*).php$'
-                       # Array keys are all lower case, array value keep the case used by filename
-                       #
-                       wfProfileIn( __METHOD__ . '-init' );
-
-                       global $wgStyleDirectory;
-
-                       $skinDir = dir( $wgStyleDirectory );
-
-                       if ( $skinDir !== false && $skinDir !== null ) {
-                               # while code from www.php.net
-                               while ( false !== ( $file = $skinDir->read() ) ) {
-                                       // Skip non-PHP files, hidden files, and '.dep' includes
-                                       $matches = array();
-
-                                       if ( preg_match( '/^([^.]*)\.php$/', $file, $matches ) ) {
-                                               $aSkin = $matches[1];
-
-                                               // Explicitly disallow loading core skins via the autodiscovery mechanism.
-                                               //
-                                               // They should be loaded already (in a non-autodicovery way), but old files might still
-                                               // exist on the server because our MW version upgrade process is widely documented as
-                                               // requiring just copying over all files, without removing old ones.
-                                               //
-                                               // This is one of the reasons we should have never used autodiscovery in the first
-                                               // place. This hack can be safely removed when autodiscovery is gone.
-                                               if ( in_array( $aSkin, array( 'CologneBlue', 'Modern', 'MonoBook', 'Vector' ) ) ) {
-                                                       wfLogWarning(
-                                                               "An old copy of the $aSkin skin was found in your skins/ directory. " .
-                                                               "You should remove it to avoid problems in the future." .
-                                                               "See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for details."
-                                                       );
-                                                       continue;
-                                               }
-
-                                               wfLogWarning(
-                                                       "A skin using autodiscovery mechanism, $aSkin, was found in your skins/ directory. " .
-                                                       "The mechanism will be removed in MediaWiki 1.25 and the skin will no longer be recognized. " .
-                                                       "See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for information how to fix this."
-                                               );
-                                               $this->legacySkins[strtolower( $aSkin )] = $aSkin;
-                                       }
-                               }
-                               $skinDir->close();
-                       }
-                       $skinsInitialised = true;
-                       wfProfileOut( __METHOD__ . '-init' );
-               }
-               return $this->legacySkins;
-
-       }
-
        /**
         * Returns an associative array of:
         *  skin name => human readable name
@@ -149,43 +82,7 @@ class SkinFactory {
         * @return array
         */
        public function getSkinNames() {
-               return array_merge(
-                       $this->getLegacySkinNames(),
-                       $this->displayNames
-               );
-       }
-
-       /**
-        * Get a legacy skin which uses the autodiscovery mechanism.
-        *
-        * @param string $name
-        * @return Skin|bool False if the skin couldn't be constructed
-        */
-       private function getLegacySkin( $name ) {
-               $skinNames = $this->getLegacySkinNames();
-               if ( !isset( $skinNames[$name] ) ) {
-                       return false;
-               }
-               $skinName = $skinNames[$name];
-               $className = "Skin{$skinName}";
-
-               # Grab the skin class and initialise it.
-               if ( !class_exists( $className ) ) {
-                       global $wgStyleDirectory;
-                       require_once "{$wgStyleDirectory}/{$skinName}.php";
-
-                       # Check if we got it
-                       if ( !class_exists( $className ) ) {
-                               # DO NOT die if the class isn't found. This breaks maintenance
-                               # scripts and can cause a user account to be unrecoverable
-                               # except by SQL manipulation if a previously valid skin name
-                               # is no longer valid.
-                               return false;
-                       }
-               }
-               $skin = new $className( $name );
-               return $skin;
-
+               return $this->displayNames;
        }
 
        /**
@@ -197,11 +94,6 @@ class SkinFactory {
         */
        public function makeSkin( $name ) {
                if ( !isset( $this->factoryFunctions[$name] ) ) {
-                       // Check the legacy autodiscovery method of skin loading
-                       $legacy = $this->getLegacySkin( $name );
-                       if ( $legacy ) {
-                               return $legacy;
-                       }
                        throw new SkinException( "No registered builder available for $name." );
                }
                $skin = call_user_func( $this->factoryFunctions[$name], $name );
index 603ee5c..ea94fad 100644 (file)
@@ -91,9 +91,7 @@ class SkinFallbackTemplate extends BaseTemplate {
                </form>
 
                <div class="mw-body" role="main">
-                       <h1 class="firstHeading">
-                               <span dir="auto"><?php $this->html( 'title' ) ?></span>
-                       </h1>
+                       <h1 class="firstHeading"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
 
                        <div class="mw-body-content">
                                <?php $this->html( 'bodytext' ) ?>
index b6077b3..0d4e623 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Base class for template-based skins.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  */
 
 /**
- * Wrapper object for MediaWiki's localization functions,
- * to be passed to the template engine.
+ * Base class for template-based skins.
  *
- * @private
- * @ingroup Skins
- */
-class MediaWikiI18N {
-       private $context = array();
-
-       function set( $varName, $value ) {
-               $this->context[$varName] = $value;
-       }
-
-       function translate( $value ) {
-               wfProfileIn( __METHOD__ );
-
-               // Hack for i18n:attributes in PHPTAL 1.0.0 dev version as of 2004-10-23
-               $value = preg_replace( '/^string:/', '', $value );
-
-               $value = wfMessage( $value )->text();
-               // interpolate variables
-               $m = array();
-               while ( preg_match( '/\$([0-9]*?)/sm', $value, $m ) ) {
-                       list( $src, $var ) = $m;
-                       wfSuppressWarnings();
-                       $varValue = $this->context[$var];
-                       wfRestoreWarnings();
-                       $value = str_replace( $src, $varValue, $value );
-               }
-               wfProfileOut( __METHOD__ );
-               return $value;
-       }
-}
-
-/**
  * Template-filler skin base class
  * Formerly generic PHPTal (http://phptal.sourceforge.net/) skin
  * Based on Brion's smarty skin
@@ -200,7 +165,7 @@ class SkinTemplate extends Skin {
                                );
                                wfRunHooks(
                                        'SkinTemplateGetLanguageLink',
-                                       array( &$languageLink, $languageLinkTitle, $this->getTitle() )
+                                       array( &$languageLink, $languageLinkTitle, $this->getTitle(), $this->getOutput() )
                                );
                                $languageLinks[] = $languageLink;
                        }
@@ -261,7 +226,8 @@ class SkinTemplate extends Skin {
 
                $oldContext = null;
                if ( $out !== null ) {
-                       // @todo Add wfDeprecated in 1.20
+                       // Deprecated since 1.20, note added in 1.25
+                       wfDeprecated( __METHOD__, '1.25' );
                        $oldContext = $this->getContext();
                        $this->setContext( $out->getContext() );
                }
@@ -271,7 +237,7 @@ class SkinTemplate extends Skin {
                wfProfileIn( __METHOD__ . '-init' );
                $this->initPage( $out );
                wfProfileOut( __METHOD__ . '-init' );
-               $tpl = $this->prepareQuickTemplate();
+               $tpl = $this->prepareQuickTemplate( $out );
                // execute template
                wfProfileIn( __METHOD__ . '-execute' );
                $res = $tpl->execute();
@@ -295,8 +261,8 @@ class SkinTemplate extends Skin {
         */
        protected function prepareQuickTemplate() {
                global $wgContLang, $wgScript, $wgStylePath, $wgMimeType, $wgJsMimeType,
-                       $wgDisableCounters, $wgSitename, $wgLogo, $wgMaxCredits,
-                       $wgShowCreditsIfMax, $wgPageShowWatchingUsers, $wgArticlePath,
+                       $wgSitename, $wgLogo, $wgMaxCredits,
+                       $wgShowCreditsIfMax, $wgArticlePath,
                        $wgScriptPath, $wgServer;
 
                wfProfileIn( __METHOD__ );
@@ -408,32 +374,13 @@ class SkinTemplate extends Skin {
                $tpl->set( 'logo', $this->logoText() );
 
                $tpl->set( 'copyright', false );
+               // No longer used
                $tpl->set( 'viewcount', false );
                $tpl->set( 'lastmod', false );
                $tpl->set( 'credits', false );
                $tpl->set( 'numberofwatchingusers', false );
                if ( $out->isArticle() && $title->exists() ) {
                        if ( $this->isRevisionCurrent() ) {
-                               if ( !$wgDisableCounters ) {
-                                       $viewcount = $this->getWikiPage()->getCount();
-                                       if ( $viewcount ) {
-                                               $tpl->set( 'viewcount', $this->msg( 'viewcount' )->numParams( $viewcount )->parse() );
-                                       }
-                               }
-
-                               if ( $wgPageShowWatchingUsers ) {
-                                       $dbr = wfGetDB( DB_SLAVE );
-                                       $num = $dbr->selectField( 'watchlist', 'COUNT(*)',
-                                               array( 'wl_title' => $title->getDBkey(), 'wl_namespace' => $title->getNamespace() ),
-                                               __METHOD__
-                                       );
-                                       if ( $num > 0 ) {
-                                               $tpl->set( 'numberofwatchingusers',
-                                                       $this->msg( 'number_of_watching_users_pageview' )->numParams( $num )->parse()
-                                               );
-                                       }
-                               }
-
                                if ( $wgMaxCredits != 0 ) {
                                        $tpl->set( 'credits', Action::factory( 'credits', $this->getWikiPage(),
                                                $this->getContext() )->getCredits( $wgMaxCredits, $wgShowCreditsIfMax ) );
@@ -455,7 +402,6 @@ class SkinTemplate extends Skin {
                $tpl->set( 'footerlinks', array(
                        'info' => array(
                                'lastmod',
-                               'viewcount',
                                'numberofwatchingusers',
                                'credits',
                                'copyright',
@@ -486,6 +432,8 @@ class SkinTemplate extends Skin {
                        }
                }
 
+               $tpl->set( 'indicators', $out->getIndicators() );
+
                $tpl->set( 'sitenotice', $this->getSiteNotice() );
                $tpl->set( 'bottomscripts', $this->bottomScripts() );
                $tpl->set( 'printfooter', $this->printSource() );
@@ -1365,759 +1313,3 @@ class SkinTemplate extends Skin {
                return $this->getTitle()->getNamespaceKey();
        }
 }
-
-/**
- * Generic wrapper for template functions, with interface
- * compatible with what we use of PHPTAL 0.7.
- * @ingroup Skins
- */
-abstract class QuickTemplate {
-
-       /** @var Config $config */
-       protected $config;
-
-       /**
-        * @param Config $config
-        */
-       function __construct( Config $config = null ) {
-               $this->data = array();
-               $this->translator = new MediaWikiI18N();
-               if ( $config === null ) {
-                       wfDebug( __METHOD__ . ' was called with no Config instance passed to it' );
-                       $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
-               }
-               $this->config = $config;
-       }
-
-       /**
-        * Sets the value $value to $name
-        * @param string $name
-        * @param mixed $value
-        */
-       public function set( $name, $value ) {
-               $this->data[$name] = $value;
-       }
-
-       /**
-        * Gets the template data requested
-        * @since 1.22
-        * @param string $name Key for the data
-        * @param mixed $default Optional default (or null)
-        * @return mixed The value of the data requested or the deafult
-        */
-       public function get( $name, $default = null ) {
-               if ( isset( $this->data[$name] ) ) {
-                       return $this->data[$name];
-               } else {
-                       return $default;
-               }
-       }
-
-       /**
-        * @param string $name
-        * @param mixed $value
-        */
-       public function setRef( $name, &$value ) {
-               $this->data[$name] =& $value;
-       }
-
-       /**
-        * @param MediaWikiI18N $t
-        */
-       public function setTranslator( &$t ) {
-               $this->translator = &$t;
-       }
-
-       /**
-        * Main function, used by classes that subclass QuickTemplate
-        * to show the actual HTML output
-        */
-       abstract public function execute();
-
-       /**
-        * @private
-        * @param string $str
-        * @return string
-        */
-       function text( $str ) {
-               echo htmlspecialchars( $this->data[$str] );
-       }
-
-       /**
-        * @private
-        * @param string $str
-        * @return string
-        */
-       function html( $str ) {
-               echo $this->data[$str];
-       }
-
-       /**
-        * @private
-        * @param string $str
-        * @return string
-        */
-       function msg( $str ) {
-               echo htmlspecialchars( $this->translator->translate( $str ) );
-       }
-
-       /**
-        * @private
-        * @param string $str
-        * @return string
-        */
-       function msgHtml( $str ) {
-               echo $this->translator->translate( $str );
-       }
-
-       /**
-        * An ugly, ugly hack.
-        * @private
-        * @param string $str
-        * @return string
-        */
-       function msgWiki( $str ) {
-               global $wgOut;
-
-               $text = $this->translator->translate( $str );
-               echo $wgOut->parse( $text );
-       }
-
-       /**
-        * @private
-        * @param string $str
-        * @return bool
-        */
-       function haveData( $str ) {
-               return isset( $this->data[$str] );
-       }
-
-       /**
-        * @private
-        *
-        * @param string $str
-        * @return bool
-        */
-       function haveMsg( $str ) {
-               $msg = $this->translator->translate( $str );
-               return ( $msg != '-' ) && ( $msg != '' ); # ????
-       }
-
-       /**
-        * Get the Skin object related to this object
-        *
-        * @return Skin
-        */
-       public function getSkin() {
-               return $this->data['skin'];
-       }
-
-       /**
-        * Fetch the output of a QuickTemplate and return it
-        *
-        * @since 1.23
-        * @return string
-        */
-       public function getHTML() {
-               ob_start();
-               $this->execute();
-               $html = ob_get_contents();
-               ob_end_clean();
-               return $html;
-       }
-}
-
-/**
- * New base template for a skin's template extended from QuickTemplate
- * this class features helper methods that provide common ways of interacting
- * with the data stored in the QuickTemplate
- */
-abstract class BaseTemplate extends QuickTemplate {
-
-       /**
-        * Get a Message object with its context set
-        *
-        * @param string $name Message name
-        * @return Message
-        */
-       public function getMsg( $name ) {
-               return $this->getSkin()->msg( $name );
-       }
-
-       function msg( $str ) {
-               echo $this->getMsg( $str )->escaped();
-       }
-
-       function msgHtml( $str ) {
-               echo $this->getMsg( $str )->text();
-       }
-
-       function msgWiki( $str ) {
-               echo $this->getMsg( $str )->parseAsBlock();
-       }
-
-       /**
-        * Create an array of common toolbox items from the data in the quicktemplate
-        * stored by SkinTemplate.
-        * The resulting array is built according to a format intended to be passed
-        * through makeListItem to generate the html.
-        * @return array
-        */
-       function getToolbox() {
-               wfProfileIn( __METHOD__ );
-
-               $toolbox = array();
-               if ( isset( $this->data['nav_urls']['whatlinkshere'] )
-                       && $this->data['nav_urls']['whatlinkshere']
-               ) {
-                       $toolbox['whatlinkshere'] = $this->data['nav_urls']['whatlinkshere'];
-                       $toolbox['whatlinkshere']['id'] = 't-whatlinkshere';
-               }
-               if ( isset( $this->data['nav_urls']['recentchangeslinked'] )
-                       && $this->data['nav_urls']['recentchangeslinked']
-               ) {
-                       $toolbox['recentchangeslinked'] = $this->data['nav_urls']['recentchangeslinked'];
-                       $toolbox['recentchangeslinked']['msg'] = 'recentchangeslinked-toolbox';
-                       $toolbox['recentchangeslinked']['id'] = 't-recentchangeslinked';
-               }
-               if ( isset( $this->data['feeds'] ) && $this->data['feeds'] ) {
-                       $toolbox['feeds']['id'] = 'feedlinks';
-                       $toolbox['feeds']['links'] = array();
-                       foreach ( $this->data['feeds'] as $key => $feed ) {
-                               $toolbox['feeds']['links'][$key] = $feed;
-                               $toolbox['feeds']['links'][$key]['id'] = "feed-$key";
-                               $toolbox['feeds']['links'][$key]['rel'] = 'alternate';
-                               $toolbox['feeds']['links'][$key]['type'] = "application/{$key}+xml";
-                               $toolbox['feeds']['links'][$key]['class'] = 'feedlink';
-                       }
-               }
-               foreach ( array( 'contributions', 'log', 'blockip', 'emailuser',
-                       'userrights', 'upload', 'specialpages' ) as $special
-               ) {
-                       if ( isset( $this->data['nav_urls'][$special] ) && $this->data['nav_urls'][$special] ) {
-                               $toolbox[$special] = $this->data['nav_urls'][$special];
-                               $toolbox[$special]['id'] = "t-$special";
-                       }
-               }
-               if ( isset( $this->data['nav_urls']['print'] ) && $this->data['nav_urls']['print'] ) {
-                       $toolbox['print'] = $this->data['nav_urls']['print'];
-                       $toolbox['print']['id'] = 't-print';
-                       $toolbox['print']['rel'] = 'alternate';
-                       $toolbox['print']['msg'] = 'printableversion';
-               }
-               if ( isset( $this->data['nav_urls']['permalink'] ) && $this->data['nav_urls']['permalink'] ) {
-                       $toolbox['permalink'] = $this->data['nav_urls']['permalink'];
-                       if ( $toolbox['permalink']['href'] === '' ) {
-                               unset( $toolbox['permalink']['href'] );
-                               $toolbox['ispermalink']['tooltiponly'] = true;
-                               $toolbox['ispermalink']['id'] = 't-ispermalink';
-                               $toolbox['ispermalink']['msg'] = 'permalink';
-                       } else {
-                               $toolbox['permalink']['id'] = 't-permalink';
-                       }
-               }
-               if ( isset( $this->data['nav_urls']['info'] ) && $this->data['nav_urls']['info'] ) {
-                       $toolbox['info'] = $this->data['nav_urls']['info'];
-                       $toolbox['info']['id'] = 't-info';
-               }
-
-               wfRunHooks( 'BaseTemplateToolbox', array( &$this, &$toolbox ) );
-               wfProfileOut( __METHOD__ );
-               return $toolbox;
-       }
-
-       /**
-        * Create an array of personal tools items from the data in the quicktemplate
-        * stored by SkinTemplate.
-        * The resulting array is built according to a format intended to be passed
-        * through makeListItem to generate the html.
-        * This is in reality the same list as already stored in personal_urls
-        * however it is reformatted so that you can just pass the individual items
-        * to makeListItem instead of hardcoding the element creation boilerplate.
-        * @return array
-        */
-       function getPersonalTools() {
-               $personal_tools = array();
-               foreach ( $this->get( 'personal_urls' ) as $key => $plink ) {
-                       # The class on a personal_urls item is meant to go on the <a> instead
-                       # of the <li> so we have to use a single item "links" array instead
-                       # of using most of the personal_url's keys directly.
-                       $ptool = array(
-                               'links' => array(
-                                       array( 'single-id' => "pt-$key" ),
-                               ),
-                               'id' => "pt-$key",
-                       );
-                       if ( isset( $plink['active'] ) ) {
-                               $ptool['active'] = $plink['active'];
-                       }
-                       foreach ( array( 'href', 'class', 'text', 'dir' ) as $k ) {
-                               if ( isset( $plink[$k] ) ) {
-                                       $ptool['links'][0][$k] = $plink[$k];
-                               }
-                       }
-                       $personal_tools[$key] = $ptool;
-               }
-               return $personal_tools;
-       }
-
-       function getSidebar( $options = array() ) {
-               // Force the rendering of the following portals
-               $sidebar = $this->data['sidebar'];
-               if ( !isset( $sidebar['SEARCH'] ) ) {
-                       $sidebar['SEARCH'] = true;
-               }
-               if ( !isset( $sidebar['TOOLBOX'] ) ) {
-                       $sidebar['TOOLBOX'] = true;
-               }
-               if ( !isset( $sidebar['LANGUAGES'] ) ) {
-                       $sidebar['LANGUAGES'] = true;
-               }
-
-               if ( !isset( $options['search'] ) || $options['search'] !== true ) {
-                       unset( $sidebar['SEARCH'] );
-               }
-               if ( isset( $options['toolbox'] ) && $options['toolbox'] === false ) {
-                       unset( $sidebar['TOOLBOX'] );
-               }
-               if ( isset( $options['languages'] ) && $options['languages'] === false ) {
-                       unset( $sidebar['LANGUAGES'] );
-               }
-
-               $boxes = array();
-               foreach ( $sidebar as $boxName => $content ) {
-                       if ( $content === false ) {
-                               continue;
-                       }
-                       switch ( $boxName ) {
-                       case 'SEARCH':
-                               // Search is a special case, skins should custom implement this
-                               $boxes[$boxName] = array(
-                                       'id' => 'p-search',
-                                       'header' => $this->getMsg( 'search' )->text(),
-                                       'generated' => false,
-                                       'content' => true,
-                               );
-                               break;
-                       case 'TOOLBOX':
-                               $msgObj = $this->getMsg( 'toolbox' );
-                               $boxes[$boxName] = array(
-                                       'id' => 'p-tb',
-                                       'header' => $msgObj->exists() ? $msgObj->text() : 'toolbox',
-                                       'generated' => false,
-                                       'content' => $this->getToolbox(),
-                               );
-                               break;
-                       case 'LANGUAGES':
-                               if ( $this->data['language_urls'] ) {
-                                       $msgObj = $this->getMsg( 'otherlanguages' );
-                                       $boxes[$boxName] = array(
-                                               'id' => 'p-lang',
-                                               'header' => $msgObj->exists() ? $msgObj->text() : 'otherlanguages',
-                                               'generated' => false,
-                                               'content' => $this->data['language_urls'],
-                                       );
-                               }
-                               break;
-                       default:
-                               $msgObj = $this->getMsg( $boxName );
-                               $boxes[$boxName] = array(
-                                       'id' => "p-$boxName",
-                                       'header' => $msgObj->exists() ? $msgObj->text() : $boxName,
-                                       'generated' => true,
-                                       'content' => $content,
-                               );
-                               break;
-                       }
-               }
-
-               // HACK: Compatibility with extensions still using SkinTemplateToolboxEnd
-               $hookContents = null;
-               if ( isset( $boxes['TOOLBOX'] ) ) {
-                       ob_start();
-                       // We pass an extra 'true' at the end so extensions using BaseTemplateToolbox
-                       // can abort and avoid outputting double toolbox links
-                       wfRunHooks( 'SkinTemplateToolboxEnd', array( &$this, true ) );
-                       $hookContents = ob_get_contents();
-                       ob_end_clean();
-                       if ( !trim( $hookContents ) ) {
-                               $hookContents = null;
-                       }
-               }
-               // END hack
-
-               if ( isset( $options['htmlOnly'] ) && $options['htmlOnly'] === true ) {
-                       foreach ( $boxes as $boxName => $box ) {
-                               if ( is_array( $box['content'] ) ) {
-                                       $content = '<ul>';
-                                       foreach ( $box['content'] as $key => $val ) {
-                                               $content .= "\n " . $this->makeListItem( $key, $val );
-                                       }
-                                       // HACK, shove the toolbox end onto the toolbox if we're rendering itself
-                                       if ( $hookContents ) {
-                                               $content .= "\n $hookContents";
-                                       }
-                                       // END hack
-                                       $content .= "\n</ul>\n";
-                                       $boxes[$boxName]['content'] = $content;
-                               }
-                       }
-               } else {
-                       if ( $hookContents ) {
-                               $boxes['TOOLBOXEND'] = array(
-                                       'id' => 'p-toolboxend',
-                                       'header' => $boxes['TOOLBOX']['header'],
-                                       'generated' => false,
-                                       'content' => "<ul>{$hookContents}</ul>",
-                               );
-                               // HACK: Make sure that TOOLBOXEND is sorted next to TOOLBOX
-                               $boxes2 = array();
-                               foreach ( $boxes as $key => $box ) {
-                                       if ( $key === 'TOOLBOXEND' ) {
-                                               continue;
-                                       }
-                                       $boxes2[$key] = $box;
-                                       if ( $key === 'TOOLBOX' ) {
-                                               $boxes2['TOOLBOXEND'] = $boxes['TOOLBOXEND'];
-                                       }
-                               }
-                               $boxes = $boxes2;
-                               // END hack
-                       }
-               }
-
-               return $boxes;
-       }
-
-       /**
-        * @param string $name
-        */
-       protected function renderAfterPortlet( $name ) {
-               $content = '';
-               wfRunHooks( 'BaseTemplateAfterPortlet', array( $this, $name, &$content ) );
-
-               if ( $content !== '' ) {
-                       echo "<div class='after-portlet after-portlet-$name'>$content</div>";
-               }
-
-       }
-
-       /**
-        * Makes a link, usually used by makeListItem to generate a link for an item
-        * in a list used in navigation lists, portlets, portals, sidebars, etc...
-        *
-        * @param string $key Usually a key from the list you are generating this
-        * link from.
-        * @param array $item Contains some of a specific set of keys.
-        *
-        * The text of the link will be generated either from the contents of the
-        * "text" key in the $item array, if a "msg" key is present a message by
-        * that name will be used, and if neither of those are set the $key will be
-        * used as a message name.
-        *
-        * If a "href" key is not present makeLink will just output htmlescaped text.
-        * The "href", "id", "class", "rel", and "type" keys are used as attributes
-        * for the link if present.
-        *
-        * If an "id" or "single-id" (if you don't want the actual id to be output
-        * on the link) is present it will be used to generate a tooltip and
-        * accesskey for the link.
-        *
-        * The keys "context" and "primary" are ignored; these keys are used
-        * internally by skins and are not supposed to be included in the HTML
-        * output.
-        *
-        * If you don't want an accesskey, set $item['tooltiponly'] = true;
-        *
-        * @param array $options Can be used to affect the output of a link.
-        * Possible options are:
-        *   - 'text-wrapper' key to specify a list of elements to wrap the text of
-        *   a link in. This should be an array of arrays containing a 'tag' and
-        *   optionally an 'attributes' key. If you only have one element you don't
-        *   need to wrap it in another array. eg: To use <a><span>...</span></a>
-        *   in all links use array( 'text-wrapper' => array( 'tag' => 'span' ) )
-        *   for your options.
-        *   - 'link-class' key can be used to specify additional classes to apply
-        *   to all links.
-        *   - 'link-fallback' can be used to specify a tag to use instead of "<a>"
-        *   if there is no link. eg: If you specify 'link-fallback' => 'span' than
-        *   any non-link will output a "<span>" instead of just text.
-        *
-        * @return string
-        */
-       function makeLink( $key, $item, $options = array() ) {
-               if ( isset( $item['text'] ) ) {
-                       $text = $item['text'];
-               } else {
-                       $text = $this->translator->translate( isset( $item['msg'] ) ? $item['msg'] : $key );
-               }
-
-               $html = htmlspecialchars( $text );
-
-               if ( isset( $options['text-wrapper'] ) ) {
-                       $wrapper = $options['text-wrapper'];
-                       if ( isset( $wrapper['tag'] ) ) {
-                               $wrapper = array( $wrapper );
-                       }
-                       while ( count( $wrapper ) > 0 ) {
-                               $element = array_pop( $wrapper );
-                               $html = Html::rawElement( $element['tag'], isset( $element['attributes'] )
-                                       ? $element['attributes']
-                                       : null, $html );
-                       }
-               }
-
-               if ( isset( $item['href'] ) || isset( $options['link-fallback'] ) ) {
-                       $attrs = $item;
-                       foreach ( array( 'single-id', 'text', 'msg', 'tooltiponly', 'context', 'primary' ) as $k ) {
-                               unset( $attrs[$k] );
-                       }
-
-                       if ( isset( $item['id'] ) && !isset( $item['single-id'] ) ) {
-                               $item['single-id'] = $item['id'];
-                       }
-                       if ( isset( $item['single-id'] ) ) {
-                               if ( isset( $item['tooltiponly'] ) && $item['tooltiponly'] ) {
-                                       $title = Linker::titleAttrib( $item['single-id'] );
-                                       if ( $title !== false ) {
-                                               $attrs['title'] = $title;
-                                       }
-                               } else {
-                                       $tip = Linker::tooltipAndAccesskeyAttribs( $item['single-id'] );
-                                       if ( isset( $tip['title'] ) && $tip['title'] !== false ) {
-                                               $attrs['title'] = $tip['title'];
-                                       }
-                                       if ( isset( $tip['accesskey'] ) && $tip['accesskey'] !== false ) {
-                                               $attrs['accesskey'] = $tip['accesskey'];
-                                       }
-                               }
-                       }
-                       if ( isset( $options['link-class'] ) ) {
-                               if ( isset( $attrs['class'] ) ) {
-                                       $attrs['class'] .= " {$options['link-class']}";
-                               } else {
-                                       $attrs['class'] = $options['link-class'];
-                               }
-                       }
-                       $html = Html::rawElement( isset( $attrs['href'] )
-                               ? 'a'
-                               : $options['link-fallback'], $attrs, $html );
-               }
-
-               return $html;
-       }
-
-       /**
-        * Generates a list item for a navigation, portlet, portal, sidebar... list
-        *
-        * @param string $key Usually a key from the list you are generating this link from.
-        * @param array $item Array of list item data containing some of a specific set of keys.
-        * The "id", "class" and "itemtitle" keys will be used as attributes for the list item,
-        * if "active" contains a value of true a "active" class will also be appended to class.
-        *
-        * @param array $options
-        *
-        * If you want something other than a "<li>" you can pass a tag name such as
-        * "tag" => "span" in the $options array to change the tag used.
-        * link/content data for the list item may come in one of two forms
-        * A "links" key may be used, in which case it should contain an array with
-        * a list of links to include inside the list item, see makeLink for the
-        * format of individual links array items.
-        *
-        * Otherwise the relevant keys from the list item $item array will be passed
-        * to makeLink instead. Note however that "id" and "class" are used by the
-        * list item directly so they will not be passed to makeLink
-        * (however the link will still support a tooltip and accesskey from it)
-        * If you need an id or class on a single link you should include a "links"
-        * array with just one link item inside of it. If you want to add a title
-        * to the list item itself, you can set "itemtitle" to the value.
-        * $options is also passed on to makeLink calls
-        *
-        * @return string
-        */
-       function makeListItem( $key, $item, $options = array() ) {
-               if ( isset( $item['links'] ) ) {
-                       $links = array();
-                       foreach ( $item['links'] as $linkKey => $link ) {
-                               $links[] = $this->makeLink( $linkKey, $link, $options );
-                       }
-                       $html = implode( ' ', $links );
-               } else {
-                       $link = $item;
-                       // These keys are used by makeListItem and shouldn't be passed on to the link
-                       foreach ( array( 'id', 'class', 'active', 'tag', 'itemtitle' ) as $k ) {
-                               unset( $link[$k] );
-                       }
-                       if ( isset( $item['id'] ) && !isset( $item['single-id'] ) ) {
-                               // The id goes on the <li> not on the <a> for single links
-                               // but makeSidebarLink still needs to know what id to use when
-                               // generating tooltips and accesskeys.
-                               $link['single-id'] = $item['id'];
-                       }
-                       $html = $this->makeLink( $key, $link, $options );
-               }
-
-               $attrs = array();
-               foreach ( array( 'id', 'class' ) as $attr ) {
-                       if ( isset( $item[$attr] ) ) {
-                               $attrs[$attr] = $item[$attr];
-                       }
-               }
-               if ( isset( $item['active'] ) && $item['active'] ) {
-                       if ( !isset( $attrs['class'] ) ) {
-                               $attrs['class'] = '';
-                       }
-                       $attrs['class'] .= ' active';
-                       $attrs['class'] = trim( $attrs['class'] );
-               }
-               if ( isset( $item['itemtitle'] ) ) {
-                       $attrs['title'] = $item['itemtitle'];
-               }
-               return Html::rawElement( isset( $options['tag'] ) ? $options['tag'] : 'li', $attrs, $html );
-       }
-
-       function makeSearchInput( $attrs = array() ) {
-               $realAttrs = array(
-                       'type' => 'search',
-                       'name' => 'search',
-                       'placeholder' => wfMessage( 'searchsuggest-search' )->text(),
-                       'value' => $this->get( 'search', '' ),
-               );
-               $realAttrs = array_merge( $realAttrs, Linker::tooltipAndAccesskeyAttribs( 'search' ), $attrs );
-               return Html::element( 'input', $realAttrs );
-       }
-
-       function makeSearchButton( $mode, $attrs = array() ) {
-               switch ( $mode ) {
-                       case 'go':
-                       case 'fulltext':
-                               $realAttrs = array(
-                                       'type' => 'submit',
-                                       'name' => $mode,
-                                       'value' => $this->translator->translate(
-                                               $mode == 'go' ? 'searcharticle' : 'searchbutton' ),
-                               );
-                               $realAttrs = array_merge(
-                                       $realAttrs,
-                                       Linker::tooltipAndAccesskeyAttribs( "search-$mode" ),
-                                       $attrs
-                               );
-                               return Html::element( 'input', $realAttrs );
-                       case 'image':
-                               $buttonAttrs = array(
-                                       'type' => 'submit',
-                                       'name' => 'button',
-                               );
-                               $buttonAttrs = array_merge(
-                                       $buttonAttrs,
-                                       Linker::tooltipAndAccesskeyAttribs( 'search-fulltext' ),
-                                       $attrs
-                               );
-                               unset( $buttonAttrs['src'] );
-                               unset( $buttonAttrs['alt'] );
-                               unset( $buttonAttrs['width'] );
-                               unset( $buttonAttrs['height'] );
-                               $imgAttrs = array(
-                                       'src' => $attrs['src'],
-                                       'alt' => isset( $attrs['alt'] )
-                                               ? $attrs['alt']
-                                               : $this->translator->translate( 'searchbutton' ),
-                                       'width' => isset( $attrs['width'] ) ? $attrs['width'] : null,
-                                       'height' => isset( $attrs['height'] ) ? $attrs['height'] : null,
-                               );
-                               return Html::rawElement( 'button', $buttonAttrs, Html::element( 'img', $imgAttrs ) );
-                       default:
-                               throw new MWException( 'Unknown mode passed to BaseTemplate::makeSearchButton' );
-               }
-       }
-
-       /**
-        * Returns an array of footerlinks trimmed down to only those footer links that
-        * are valid.
-        * If you pass "flat" as an option then the returned array will be a flat array
-        * of footer icons instead of a key/value array of footerlinks arrays broken
-        * up into categories.
-        * @param string $option
-        * @return array|mixed
-        */
-       function getFooterLinks( $option = null ) {
-               $footerlinks = $this->get( 'footerlinks' );
-
-               // Reduce footer links down to only those which are being used
-               $validFooterLinks = array();
-               foreach ( $footerlinks as $category => $links ) {
-                       $validFooterLinks[$category] = array();
-                       foreach ( $links as $link ) {
-                               if ( isset( $this->data[$link] ) && $this->data[$link] ) {
-                                       $validFooterLinks[$category][] = $link;
-                               }
-                       }
-                       if ( count( $validFooterLinks[$category] ) <= 0 ) {
-                               unset( $validFooterLinks[$category] );
-                       }
-               }
-
-               if ( $option == 'flat' ) {
-                       // fold footerlinks into a single array using a bit of trickery
-                       $validFooterLinks = call_user_func_array(
-                               'array_merge',
-                               array_values( $validFooterLinks )
-                       );
-               }
-
-               return $validFooterLinks;
-       }
-
-       /**
-        * Returns an array of footer icons filtered down by options relevant to how
-        * the skin wishes to display them.
-        * If you pass "icononly" as the option all footer icons which do not have an
-        * image icon set will be filtered out.
-        * If you pass "nocopyright" then MediaWiki's copyright icon will not be included
-        * in the list of footer icons. This is mostly useful for skins which only
-        * display the text from footericons instead of the images and don't want a
-        * duplicate copyright statement because footerlinks already rendered one.
-        * @param string $option
-        * @return string
-        */
-       function getFooterIcons( $option = null ) {
-               // Generate additional footer icons
-               $footericons = $this->get( 'footericons' );
-
-               if ( $option == 'icononly' ) {
-                       // Unset any icons which don't have an image
-                       foreach ( $footericons as &$footerIconsBlock ) {
-                               foreach ( $footerIconsBlock as $footerIconKey => $footerIcon ) {
-                                       if ( !is_string( $footerIcon ) && !isset( $footerIcon['src'] ) ) {
-                                               unset( $footerIconsBlock[$footerIconKey] );
-                                       }
-                               }
-                       }
-                       // Redo removal of any empty blocks
-                       foreach ( $footericons as $footerIconsKey => &$footerIconsBlock ) {
-                               if ( count( $footerIconsBlock ) <= 0 ) {
-                                       unset( $footericons[$footerIconsKey] );
-                               }
-                       }
-               } elseif ( $option == 'nocopyright' ) {
-                       unset( $footericons['copyright']['copyright'] );
-                       if ( count( $footericons['copyright'] ) <= 0 ) {
-                               unset( $footericons['copyright'] );
-                       }
-               }
-
-               return $footericons;
-       }
-
-       /**
-        * Output the basic end-page trail including bottomscripts, reporttime, and
-        * debug stuff. This should be called right before outputting the closing
-        * body and html tags.
-        */
-       function printTrail() { ?>
-<?php echo MWDebug::getDebugHTML( $this->getSkin()->getContext() ); ?>
-<?php $this->html( 'bottomscripts' ); /* JS call to runBodyOnloadHook */ ?>
-<?php $this->html( 'reporttime' ) ?>
-<?php
-       }
-}
index ae0003d..167135b 100644 (file)
@@ -60,7 +60,6 @@ abstract class QueryPage extends SpecialPage {
         * @return array
         */
        public static function getPages() {
-               global $wgDisableCounters;
                static $qp = null;
 
                if ( $qp === null ) {
@@ -76,6 +75,7 @@ abstract class QueryPage extends SpecialPage {
                                array( 'ListredirectsPage', 'Listredirects' ),
                                array( 'LonelyPagesPage', 'Lonelypages' ),
                                array( 'LongPagesPage', 'Longpages' ),
+                               array( 'MediaStatisticsPage', 'MediaStatistics' ),
                                array( 'MIMEsearchPage', 'MIMEsearch' ),
                                array( 'MostcategoriesPage', 'Mostcategories' ),
                                array( 'MostimagesPage', 'Mostimages' ),
@@ -101,10 +101,6 @@ abstract class QueryPage extends SpecialPage {
                                array( 'WithoutInterwikiPage', 'Withoutinterwiki' ),
                        );
                        wfRunHooks( 'wgQueryPages', array( &$qp ) );
-
-                       if ( !$wgDisableCounters ) {
-                               $qp[] = array( 'PopularPagesPage', 'Popularpages' );
-                       }
                }
 
                return $qp;
@@ -324,7 +320,7 @@ abstract class QueryPage extends SpecialPage {
                                                        'qc_value' => $value );
                                }
 
-                               $dbw->begin( __METHOD__ );
+                               $dbw->startAtomic( __METHOD__ );
                                # Clear out any old cached data
                                $dbw->delete( 'querycache', array( 'qc_type' => $this->getName() ), $fname );
                                # Save results into the querycache table on the master
@@ -336,7 +332,7 @@ abstract class QueryPage extends SpecialPage {
                                $dbw->insert( 'querycache_info',
                                        array( 'qci_type' => $this->getName(), 'qci_timestamp' => $dbw->timestamp() ),
                                        $fname );
-                               $dbw->commit( __METHOD__ );
+                               $dbw->endAtomic( __METHOD__ );
                        }
                } catch ( DBError $e ) {
                        if ( !$ignoreErrors ) {
@@ -405,7 +401,7 @@ abstract class QueryPage extends SpecialPage {
                        $res = $dbr->query( $sql, $fname );
                }
 
-               return $dbr->resultObject( $res );
+               return $res;
        }
 
        /**
index cd41a1c..4226ee0 100644 (file)
@@ -71,10 +71,13 @@ abstract class RedirectSpecialPage extends UnlistedSpecialPage {
         */
        public function getRedirectQuery() {
                $params = array();
+               $request = $this->getRequest();
 
                foreach ( $this->mAllowedRedirectParams as $arg ) {
-                       if ( $this->getRequest()->getVal( $arg, null ) !== null ) {
-                               $params[$arg] = $this->getRequest()->getVal( $arg );
+                       if ( $request->getVal( $arg, null ) !== null ) {
+                               $params[$arg] = $request->getVal( $arg );
+                       } elseif ( $request->getArray( $arg, null ) !== null ) {
+                               $params[$arg] = $request->getArray( $arg );
                        }
                }
 
@@ -188,7 +191,7 @@ abstract class RedirectSpecialArticle extends RedirectSpecialPage {
                        'action',
                        'redirect', 'rdfrom',
                        # Options for preloaded edits
-                       'preload', 'editintro', 'preloadtitle', 'summary', 'nosummary',
+                       'preload', 'preloadparams', 'editintro', 'preloadtitle', 'summary', 'nosummary',
                        # Options for overriding user settings
                        'preview', 'minor', 'watchthis',
                        # Options for history/diffs
index 8fc28f8..c0a94af 100644 (file)
@@ -39,7 +39,7 @@ class SpecialPage {
 
        // Minimum user level required to access this page, or "" for anyone.
        // Also used to categorise the pages in Special:Specialpages
-       private $mRestriction;
+       protected $mRestriction;
 
        // Listed in Special:Specialpages?
        private $mListed;
index 07b6b4e..b110bda 100644 (file)
@@ -47,7 +47,7 @@ class SpecialPageFactory {
        /**
         * List of special page names to the subclass of SpecialPage which handles them.
         */
-       private static $list = array(
+       private static $coreList = array(
                // Maintenance Reports
                'BrokenRedirects' => 'BrokenRedirectsPage',
                'Deadendpages' => 'DeadendPagesPage',
@@ -59,7 +59,7 @@ class SpecialPageFactory {
                'Withoutinterwiki' => 'WithoutInterwikiPage',
                'Protectedpages' => 'SpecialProtectedpages',
                'Protectedtitles' => 'SpecialProtectedtitles',
-               'Shortpages' => 'ShortpagesPage',
+               'Shortpages' => 'ShortPagesPage',
                'Uncategorizedcategories' => 'UncategorizedCategoriesPage',
                'Uncategorizedimages' => 'UncategorizedImagesPage',
                'Uncategorizedpages' => 'UncategorizedPagesPage',
@@ -74,7 +74,7 @@ class SpecialPageFactory {
                'Wantedtemplates' => 'WantedTemplatesPage',
 
                // List of pages
-               'Allpages' => 'SpecialAllpages',
+               'Allpages' => 'SpecialAllPages',
                'Prefixindex' => 'SpecialPrefixindex',
                'Categories' => 'SpecialCategories',
                'Listredirects' => 'ListredirectsPage',
@@ -114,6 +114,7 @@ class SpecialPageFactory {
                // Media reports and uploads
                'Listfiles' => 'SpecialListFiles',
                'Filepath' => 'SpecialFilepath',
+               'MediaStatistics' => 'MediaStatisticsPage',
                'MIMEsearch' => 'MIMEsearchPage',
                'FileDuplicateSearch' => 'FileDuplicateSearchPage',
                'Upload' => 'SpecialUpload',
@@ -122,7 +123,7 @@ class SpecialPageFactory {
 
                // Data and tools
                'Statistics' => 'SpecialStatistics',
-               'Allmessages' => 'SpecialAllmessages',
+               'Allmessages' => 'SpecialAllMessages',
                'Version' => 'SpecialVersion',
                'Lockdb' => 'SpecialLockdb',
                'Unlockdb' => 'SpecialUnlockdb',
@@ -155,6 +156,7 @@ class SpecialPageFactory {
                'Booksources' => 'SpecialBookSources',
 
                // Unlisted / redirects
+               'ApiHelp' => 'SpecialApiHelp',
                'Blankpage' => 'SpecialBlankpage',
                'Diff' => 'SpecialDiff',
                'Emailuser' => 'SpecialEmailUser',
@@ -173,25 +175,54 @@ class SpecialPageFactory {
                'Userlogout' => 'SpecialUserlogout',
        );
 
+       private static $list;
        private static $aliases;
 
        /**
-        * Get the special page list
+        * Reset the internal list of special pages. Useful when changing $wgSpecialPages after
+        * the internal list has already been initialized, e.g. during testing.
+        */
+       public static function resetList() {
+               self::$list = null;
+               self::$aliases = null;
+       }
+
+       /**
+        * Returns a list of canonical special page names.
+        * May be used to iterate over all registered special pages.
+        *
+        * @return string[]
+        */
+       public static function getNames() {
+               return array_keys( self::getPageList() );
+       }
+
+       /**
+        * Get the special page list as an array
+        *
+        * @deprecated since 1.24, use getNames() instead.
+        * @return array
+        */
+       public static function getList() {
+               wfDeprecated( __FUNCTION__, '1.24' );
+               return self::getPageList();
+       }
+
+       /**
+        * Get the special page list as an array
         *
         * @return array
         */
-       static function getList() {
+       private static function getPageList() {
                global $wgSpecialPages;
-               global $wgDisableCounters, $wgDisableInternalSearch, $wgEmailAuthentication;
+               global $wgDisableInternalSearch, $wgEmailAuthentication;
                global $wgEnableEmail, $wgEnableJavaScriptTest;
                global $wgPageLanguageUseDB;
 
-               if ( !is_object( self::$list ) ) {
+               if ( !is_array( self::$list ) ) {
                        wfProfileIn( __METHOD__ );
 
-                       if ( !$wgDisableCounters ) {
-                               self::$list['Popularpages'] = 'PopularPagesPage';
-                       }
+                       self::$list = self::$coreList;
 
                        if ( !$wgDisableInternalSearch ) {
                                self::$list['Search'] = 'SpecialSearch';
@@ -223,9 +254,6 @@ class SpecialPageFactory {
                        // This hook can be used to remove undesired built-in special pages
                        wfRunHooks( 'SpecialPage_initList', array( &self::$list ) );
 
-                       // Cast to object: func()[$key] doesn't work, but func()->$key does
-                       settype( self::$list, 'object' );
-
                        wfProfileOut( __METHOD__ );
                }
 
@@ -234,33 +262,55 @@ class SpecialPageFactory {
 
        /**
         * Initialise and return the list of special page aliases.  Returns an object with
-        * properties which can be accessed $obj->pagename - each property is an array of
-        * aliases; the first in the array is the canonical alias.  All registered special
-        * pages are guaranteed to have a property entry, and for that property array to
-        * contain at least one entry (English fallbacks will be added if necessary).
+        * properties which can be accessed $obj->pagename - each property name is an
+        * alias, with the value being the canonical name of the special page. All
+        * registered special pages are guaranteed to map to themselves.
         * @return object
         */
-       static function getAliasList() {
+       private static function getAliasListObject() {
                if ( !is_object( self::$aliases ) ) {
                        global $wgContLang;
                        $aliases = $wgContLang->getSpecialPageAliases();
-
-                       // Objects are passed by reference by default, need to create a copy
-                       $missingPages = clone self::getList();
+                       $pageList = self::getPageList();
 
                        self::$aliases = array();
+                       $keepAlias = array();
+
+                       // Force every canonical name to be an alias for itself.
+                       foreach ( $pageList as $name => $stuff ) {
+                               $caseFoldedAlias = $wgContLang->caseFold( $name );
+                               self::$aliases[$caseFoldedAlias] = $name;
+                               $keepAlias[$caseFoldedAlias] = 'canonical';
+                       }
+
                        // Check for $aliases being an array since Language::getSpecialPageAliases can return null
                        if ( is_array( $aliases ) ) {
                                foreach ( $aliases as $realName => $aliasList ) {
-                                       foreach ( $aliasList as $alias ) {
-                                               self::$aliases[$wgContLang->caseFold( $alias )] = $realName;
+                                       $aliasList = array_values( $aliasList );
+                                       foreach ( $aliasList as $i => $alias ) {
+                                               $caseFoldedAlias = $wgContLang->caseFold( $alias );
+
+                                               if ( isset( self::$aliases[$caseFoldedAlias] ) &&
+                                                       $realName === self::$aliases[$caseFoldedAlias]
+                                               ) {
+                                                       // Ignore same-realName conflicts
+                                                       continue;
+                                               }
+
+                                               if ( !isset( $keepAlias[$caseFoldedAlias] ) ) {
+                                                       self::$aliases[$caseFoldedAlias] = $realName;
+                                                       if ( !$i ) {
+                                                               $keepAlias[$caseFoldedAlias] = 'first';
+                                                       }
+                                               } elseif ( !$i ) {
+                                                       wfWarn( "First alias '$alias' for $realName conflicts with " .
+                                                               "{$keepAlias[$caseFoldedAlias]} alias for " .
+                                                               self::$aliases[$caseFoldedAlias]
+                                                       );
+                                               }
                                        }
-                                       unset( $missingPages->$realName );
                                }
                        }
-                       foreach ( $missingPages as $name => $stuff ) {
-                               self::$aliases[$wgContLang->caseFold( $name )] = $name;
-                       }
 
                        // Cast to object: func()[$key] doesn't work, but func()->$key does
                        self::$aliases = (object)self::$aliases;
@@ -283,8 +333,8 @@ class SpecialPageFactory {
 
                $caseFoldedAlias = $wgContLang->caseFold( $bits[0] );
                $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
-               if ( isset( self::getAliasList()->$caseFoldedAlias ) ) {
-                       $name = self::getAliasList()->$caseFoldedAlias;
+               if ( isset( self::getAliasListObject()->$caseFoldedAlias ) ) {
+                       $name = self::getAliasListObject()->$caseFoldedAlias;
                } else {
                        return array( null, null );
                }
@@ -335,7 +385,8 @@ class SpecialPageFactory {
        public static function exists( $name ) {
                list( $title, /*...*/ ) = self::resolveAlias( $name );
 
-               return property_exists( self::getList(), $title );
+               $specialPageList = self::getPageList();
+               return isset( $specialPageList[$title] );
        }
 
        /**
@@ -346,21 +397,39 @@ class SpecialPageFactory {
         */
        public static function getPage( $name ) {
                list( $realName, /*...*/ ) = self::resolveAlias( $name );
-               if ( property_exists( self::getList(), $realName ) ) {
-                       $rec = self::getList()->$realName;
-                       if ( is_string( $rec ) ) {
-                               $className = $rec;
 
-                               return new $className;
+               $specialPageList = self::getPageList();
+
+               if ( isset( $specialPageList[$realName] ) ) {
+                       $rec = $specialPageList[$realName];
+
+                       if ( is_callable( $rec ) ) {
+                               // Use callback to instantiate the special page
+                               $page = call_user_func( $rec );
+                       } elseif ( is_string( $rec ) ) {
+                               $className = $rec;
+                               $page = new $className;
                        } elseif ( is_array( $rec ) ) {
                                $className = array_shift( $rec );
                                // @deprecated, officially since 1.18, unofficially since forever
                                wfDeprecated( "Array syntax for \$wgSpecialPages is deprecated ($className), " .
                                        "define a subclass of SpecialPage instead.", '1.18' );
-                               self::getList()->$realName = MWFunction::newObj( $className, $rec );
+                               $page = MWFunction::newObj( $className, $rec );
+                       } elseif ( $rec instanceof SpecialPage ) {
+                               $page = $rec; //XXX: we should deep clone here
+                       } else {
+                               $page = null;
+                       }
+
+                       if ( $page instanceof SpecialPage ) {
+                               return $page;
+                       } else {
+                               // It's not a classname, nor a callback, nor a legacy constructor array,
+                               // nor a special page object. Give up.
+                               wfLogWarning( "Cannot instantiate special page $realName: bad spec!" );
+                               return null;
                        }
 
-                       return self::getList()->$realName;
                } else {
                        return null;
                }
@@ -380,7 +449,7 @@ class SpecialPageFactory {
                        global $wgUser;
                        $user = $wgUser;
                }
-               foreach ( self::getList() as $name => $rec ) {
+               foreach ( self::getPageList() as $name => $rec ) {
                        $page = self::getPage( $name );
                        if ( $page ) { // not null
                                $page->setContext( RequestContext::getMain() );
@@ -402,7 +471,7 @@ class SpecialPageFactory {
         */
        public static function getRegularPages() {
                $pages = array();
-               foreach ( self::getList() as $name => $rec ) {
+               foreach ( self::getPageList() as $name => $rec ) {
                        $page = self::getPage( $name );
                        if ( $page->isListed() && !$page->isRestricted() ) {
                                $pages[$name] = $page;
@@ -425,7 +494,7 @@ class SpecialPageFactory {
                        global $wgUser;
                        $user = $wgUser;
                }
-               foreach ( self::getList() as $name => $rec ) {
+               foreach ( self::getPageList() as $name => $rec ) {
                        $page = self::getPage( $name );
                        if (
                                $page->isListed()
@@ -534,7 +603,7 @@ class SpecialPageFactory {
         * @param IContextSource $context
         * @return string HTML fragment
         */
-       static function capturePath( Title $title, IContextSource $context ) {
+       public static function capturePath( Title $title, IContextSource $context ) {
                global $wgOut, $wgTitle, $wgRequest, $wgUser, $wgLang;
 
                // Save current globals
@@ -571,32 +640,45 @@ class SpecialPageFactory {
         * @param string|bool $subpage
         * @return string
         */
-       static function getLocalNameFor( $name, $subpage = false ) {
+       public static function getLocalNameFor( $name, $subpage = false ) {
                global $wgContLang;
                $aliases = $wgContLang->getSpecialPageAliases();
+               $aliasList = self::getAliasListObject();
 
-               if ( isset( $aliases[$name][0] ) ) {
-                       $name = $aliases[$name][0];
-               } else {
-                       // Try harder in case someone misspelled the correct casing
+               // Find the first alias that maps back to $name
+               if ( isset( $aliases[$name] ) ) {
                        $found = false;
-                       // Check for $aliases being an array since Language::getSpecialPageAliases can return null
+                       foreach ( $aliases[$name] as $alias ) {
+                               $caseFoldedAlias = $wgContLang->caseFold( $alias );
+                               $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
+                               if ( isset( $aliasList->$caseFoldedAlias ) &&
+                                       $aliasList->$caseFoldedAlias === $name
+                               ) {
+                                       $name = $alias;
+                                       $found = true;
+                                       break;
+                               }
+                       }
+                       if ( !$found ) {
+                               wfWarn( "Did not find a usable alias for special page '$name'. " .
+                                       "It seems all defined aliases conflict?" );
+                       }
+               } else {
+                       // Check if someone misspelled the correct casing
                        if ( is_array( $aliases ) ) {
                                foreach ( $aliases as $n => $values ) {
                                        if ( strcasecmp( $name, $n ) === 0 ) {
                                                wfWarn( "Found alias defined for $n when searching for " .
                                                        "special page aliases for $name. Case mismatch?" );
-                                               $name = $values[0];
-                                               $found = true;
-                                               break;
+                                               return self::getLocalNameFor( $n, $subpage );
                                        }
                                }
                        }
-                       if ( !$found ) {
-                               wfWarn( "Did not find alias for special page '$name'. " .
-                                       "Perhaps no aliases are defined for it?" );
-                       }
+
+                       wfWarn( "Did not find alias for special page '$name'. " .
+                               "Perhaps no aliases are defined for it?" );
                }
+
                if ( $subpage !== false && !is_null( $subpage ) ) {
                        $name = "$name/$subpage";
                }
@@ -610,10 +692,10 @@ class SpecialPageFactory {
         * @param string $alias
         * @return Title|null Title or null if there is no such alias
         */
-       static function getTitleForAlias( $alias ) {
-               $name = self::resolveAlias( $alias );
-               if ( $name ) {
-                       return SpecialPage::getTitleFor( $name );
+       public static function getTitleForAlias( $alias ) {
+               list( $name, $subpage ) = self::resolveAlias( $alias );
+               if ( $name != null ) {
+                       return SpecialPage::getTitleFor( $name, $subpage );
                } else {
                        return null;
                }
index 678c803..be2f1e8 100644 (file)
@@ -78,15 +78,9 @@ abstract class WantedQueryPage extends QueryPage {
                $title = Title::makeTitleSafe( $result->namespace, $result->title );
                if ( $title instanceof Title ) {
                        if ( $this->isCached() || $this->forceExistenceCheck() ) {
-                               $pageLink = $title->isKnown()
+                               $pageLink = $this->existenceCheck( $title )
                                        ? '<del>' . Linker::link( $title ) . '</del>'
-                                       : Linker::link(
-                                               $title,
-                                               null,
-                                               array(),
-                                               array(),
-                                               array( 'broken' )
-                                       );
+                                       : Linker::link( $title );
                        } else {
                                $pageLink = Linker::link(
                                        $title,
@@ -102,6 +96,25 @@ abstract class WantedQueryPage extends QueryPage {
                }
        }
 
+       /**
+        * Does the Title currently exists
+        *
+        * This method allows a subclass to override this check
+        * (For example, wantedfiles, would want to check if the file exists
+        * not just that a page in the file namespace exists).
+        *
+        * This will only control if the link is crossed out. Whether or not the link
+        * is blue vs red is controlled by if the title exists.
+        *
+        * @note This will only be run if the page is cached (ie $wgMiserMode = true)
+        *   unless forceExistenceCheck() is true.
+        * @since 1.24
+        * @return boolean
+        */
+       protected function existenceCheck( Title $title ) {
+               return $title->isKnown();
+       }
+
        /**
         * Make a "what links here" link for a given title
         *
index ce43652..6219fc4 100644 (file)
@@ -205,7 +205,8 @@ class ActiveUsersPager extends UsersPager {
 
                # Username field
                $out .= Xml::inputLabel( $this->msg( 'activeusers-from' )->text(),
-                       'username', 'offset', 20, $this->requestedUser, array( 'tabindex' => 1 ) ) . '<br />';
+                       'username', 'offset', 20, $this->requestedUser,
+                       array( 'class' => 'mw-ui-input-inline', 'tabindex' => 1 ) ) . '<br />';
 
                $out .= Xml::checkLabel( $this->msg( 'activeusers-hidebots' )->text(),
                        'hidebots', 'hidebots', $this->opts->getValue( 'hidebots' ), array( 'tabindex' => 2 ) );
@@ -258,7 +259,7 @@ class SpecialActiveUsers extends SpecialPage {
                        array( 'activeusers-intro', $this->getLanguage()->formatNum( $days ) ) );
 
                // Occasionally merge in new updates
-               $seconds = min( self::mergeActiveUsers( 600, $days ), $days * 86400 );
+               $seconds = min( self::mergeActiveUsers( 300, $days ), $days * 86400 );
                // Mention the level of staleness
                $out->addWikiMsg( 'cachedspecial-viewing-cached-ttl',
                        $this->getLanguage()->formatDuration( $seconds ) );
@@ -331,12 +332,15 @@ class SpecialActiveUsers extends SpecialPage {
         * @return int|bool UNIX timestamp the cache is now up-to-date as of (false on error)
         */
        protected static function doQueryCacheUpdate( DatabaseBase $dbw, $days, $window ) {
+               $dbw->startAtomic( __METHOD__ );
+
                $lockKey = wfWikiID() . '-activeusers';
                if ( !$dbw->lock( $lockKey, __METHOD__, 1 ) ) {
                        return false; // exclusive update (avoids duplicate entries)
                }
 
-               $now = time();
+               $nowUnix = time();
+               // Get the last-updated timestamp for the cache
                $cTime = $dbw->selectField( 'querycache_info',
                        'qci_timestamp',
                        array( 'qci_type' => 'activeusers' )
@@ -346,8 +350,8 @@ class SpecialActiveUsers extends SpecialPage {
                // Pick the date range to fetch from. This is normally from the last
                // update to till the present time, but has a limited window for sanity.
                // If the window is limited, multiple runs are need to fully populate it.
-               $sTimestamp = max( $cTimeUnix, $now - $days * 86400 );
-               $eTimestamp = min( $sTimestamp + $window, $now );
+               $sTimestamp = max( $cTimeUnix, $nowUnix - $days * 86400 );
+               $eTimestamp = min( $sTimestamp + $window, $nowUnix );
 
                // Get all the users active since the last update
                $res = $dbw->select(
@@ -375,7 +379,7 @@ class SpecialActiveUsers extends SpecialPage {
                $dbw->delete( 'querycachetwo',
                        array(
                                'qcc_type' => 'activeusers',
-                               'qcc_value < ' . $dbw->addQuotes( $now - $days * 86400 ) // TS_UNIX
+                               'qcc_value < ' . $dbw->addQuotes( $nowUnix - $days * 86400 ) // TS_UNIX
                        ),
                        __METHOD__
                );
@@ -388,7 +392,10 @@ class SpecialActiveUsers extends SpecialPage {
                                        'qcc_type' => 'activeusers',
                                        'qcc_namespace' => NS_USER,
                                        'qcc_title' => array_keys( $names ) ),
-                               __METHOD__
+                               __METHOD__,
+                               // See the latest data (ignoring trx snapshot) to avoid
+                               // duplicates if this method was called in a transaction
+                               array( 'LOCK IN SHARE MODE' )
                        );
                        foreach ( $res as $row ) {
                                unset( $names[$row->user_name] );
@@ -416,15 +423,20 @@ class SpecialActiveUsers extends SpecialPage {
                        }
                }
 
+               // If a transaction was already started, it might have an old
+               // snapshot, so kludge the timestamp range back as needed.
+               $asOfTimestamp = min( $eTimestamp, (int)$dbw->trxTimestamp() );
+
                // Touch the data freshness timestamp
                $dbw->replace( 'querycache_info',
                        array( 'qci_type' ),
                        array( 'qci_type' => 'activeusers',
-                               'qci_timestamp' => $dbw->timestamp( $eTimestamp ) ), // not always $now
+                               'qci_timestamp' => $dbw->timestamp( $asOfTimestamp ) ), // not always $now
                        __METHOD__
                );
 
                $dbw->unlock( $lockKey, __METHOD__ );
+               $dbw->endAtomic( __METHOD__ );
 
                return $eTimestamp;
        }
index 7096fde..96be4d0 100644 (file)
@@ -68,10 +68,8 @@ class SpecialAllMessages extends SpecialPage {
 
                $this->langcode = $this->table->lang->getCode();
 
-               $out->addHTML( $this->table->buildForm() .
-                       $this->table->getNavigationBar() .
-                       $this->table->getBody() .
-                       $this->table->getNavigationBar() );
+               $out->addHTML( $this->table->buildForm() );
+               $out->addParserOutputContent( $this->table->getFullOutput() );
        }
 
        protected function getGroupName() {
@@ -103,7 +101,8 @@ class AllMessagesTablePager extends TablePager {
                $this->mIndexField = 'am_title';
                $this->mPage = $page;
                $this->mConds = $conds;
-               $this->mDefaultDirection = true; // always sort ascending
+               // FIXME: Why does this need to be set to DIR_DESCENDING to produce ascending ordering?
+               $this->mDefaultDirection = IndexPager::DIR_DESCENDING;
                $this->mLimitsShown = array( 20, 50, 100, 250, 500, 5000 );
 
                global $wgContLang;
index c8fae68..08b8761 100644 (file)
@@ -225,6 +225,7 @@ class SpecialAllPages extends IncludableSpecialPage {
                                        } else {
                                                $out .= '<li>[[' . htmlspecialchars( $s->page_title ) . "]]</li>\n";
                                        }
+                                       $n++;
                                }
                                $out .= Xml::closeElement( 'ul' );
                        } else {
diff --git a/includes/specials/SpecialApiHelp.php b/includes/specials/SpecialApiHelp.php
new file mode 100644 (file)
index 0000000..b43911f
--- /dev/null
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Implements Special:ApiHelp
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Special page to redirect to API help pages, for situations where linking to
+ * the api.php endpoint is not wanted.
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialApiHelp extends UnlistedSpecialPage {
+       public function __construct() {
+               parent::__construct( 'ApiHelp' );
+       }
+
+       public function execute( $par ) {
+               if ( empty( $par ) ) {
+                       $par = 'main';
+               }
+
+               // These come from transclusions
+               $request = $this->getRequest();
+               $options = array(
+                       'action' => 'help',
+                       'nolead' => true,
+                       'submodules' => $request->getCheck( 'submodules' ),
+                       'recursivesubmodules' => $request->getCheck( 'recursivesubmodules' ),
+                       'title' => $request->getVal( 'title', $this->getPageTitle( '$1' )->getPrefixedText() ),
+               );
+
+               // These are for linking from wikitext, since url parameters are a pain
+               // to do.
+               while ( true ) {
+                       if ( substr( $par, 0, 4 ) === 'sub/' ) {
+                               $par = substr( $par, 4 );
+                               $options['submodules'] = 1;
+                               continue;
+                       }
+
+                       if ( substr( $par, 0, 5 ) === 'rsub/' ) {
+                               $par = substr( $par, 5 );
+                               $options['recursivesubmodules'] = 1;
+                               continue;
+                       }
+
+                       $moduleName = $par;
+                       break;
+               }
+
+               if ( !$this->including() ) {
+                       unset( $options['nolead'], $options['title'] );
+                       $options['modules'] = $moduleName;
+                       $link = wfAppendQuery( wfExpandUrl( wfScript( 'api' ), PROTO_CURRENT ), $options );
+                       $this->getOutput()->redirect( $link );
+                       return;
+               }
+
+               $main = new ApiMain( $this->getContext(), false );
+               try {
+                       $module = $main->getModuleFromPath( $moduleName );
+               } catch ( UsageException $ex ) {
+                       $this->getOutput()->addHTML( Html::rawElement( 'span', array( 'class' => 'error' ),
+                               $this->msg( 'apihelp-no-such-module', $moduleName )->inContentLanguage()->parse()
+                       ) );
+                       return;
+               }
+
+               ApiHelp::getHelp( $this->getContext(), $module, $options );
+       }
+
+       public function isIncludable() {
+               return true;
+       }
+}
index 3297c17..cf82b86 100644 (file)
@@ -98,6 +98,7 @@ class SpecialBlock extends FormSpecialPage {
                $form->setWrapperLegendMsg( 'blockip-legend' );
                $form->setHeaderText( '' );
                $form->setSubmitCallback( array( __CLASS__, 'processUIForm' ) );
+               $form->setSubmitDestructive();
 
                $msg = $this->alreadyBlocked ? 'ipb-change-block' : 'ipbsubmit';
                $form->setSubmitTextMsg( $msg );
index e2ebdbe..aefd99a 100644 (file)
@@ -103,6 +103,7 @@ class SpecialBlockList extends SpecialPage {
                $form->setMethod( 'get' );
                $form->setWrapperLegendMsg( 'ipblocklist-legend' );
                $form->setSubmitTextMsg( 'ipblocklist-submit' );
+               $form->setSubmitProgressive();
                $form->prepareForm();
 
                $form->displayForm( '' );
@@ -181,11 +182,7 @@ class SpecialBlockList extends SpecialPage {
 
                $pager = new BlockListPager( $this, $conds );
                if ( $pager->getNumRows() ) {
-                       $out->addHTML(
-                               $pager->getNavigationBar() .
-                                       $pager->getBody() .
-                                       $pager->getNavigationBar()
-                       );
+                       $out->addParserOutputContent( $pager->getFullOutput() );
                } elseif ( $this->target ) {
                        $out->addWikiMsg( 'ipblocklist-no-results' );
                } else {
@@ -228,7 +225,7 @@ class BlockListPager extends TablePager {
        function __construct( $page, $conds ) {
                $this->page = $page;
                $this->conds = $conds;
-               $this->mDefaultDirection = true;
+               $this->mDefaultDirection = IndexPager::DIR_DESCENDING;
                parent::__construct( $page->getContext() );
        }
 
index 72f4e46..d8eec7d 100644 (file)
@@ -26,7 +26,6 @@
  * The parser creates links to this page when dealing with ISBNs in wikitext
  *
  * @author Rob Church <robchur@gmail.com>
- * @todo Validate ISBNs using the standard check-digit method
  * @ingroup SpecialPage
  */
 class SpecialBookSources extends SpecialPage {
@@ -73,7 +72,9 @@ class SpecialBookSources extends SpecialPage {
                $sum = 0;
                if ( strlen( $isbn ) == 13 ) {
                        for ( $i = 0; $i < 12; $i++ ) {
-                               if ( $i % 2 == 0 ) {
+                               if ( $isbn[$i] === 'X' ) {
+                                       return false;
+                               } elseif ( $i % 2 == 0 ) {
                                        $sum += $isbn[$i];
                                } else {
                                        $sum += 3 * $isbn[$i];
@@ -81,11 +82,14 @@ class SpecialBookSources extends SpecialPage {
                        }
 
                        $check = ( 10 - ( $sum % 10 ) ) % 10;
-                       if ( $check == $isbn[12] ) {
+                       if ( (string)$check === $isbn[12] ) {
                                return true;
                        }
                } elseif ( strlen( $isbn ) == 10 ) {
                        for ( $i = 0; $i < 9; $i++ ) {
+                               if ( $isbn[$i] === 'X' ) {
+                                       return false;
+                               }
                                $sum += $isbn[$i] * ( $i + 1 );
                        }
 
@@ -93,7 +97,7 @@ class SpecialBookSources extends SpecialPage {
                        if ( $check == 10 ) {
                                $check = "X";
                        }
-                       if ( $check == $isbn[9] ) {
+                       if ( (string)$check === $isbn[9] ) {
                                return true;
                        }
                }
@@ -131,9 +135,14 @@ class SpecialBookSources extends SpecialPage {
                        'isbn',
                        20,
                        $this->isbn,
-                       array( 'autofocus' => true )
+                       array( 'autofocus' => true, 'class' => 'mw-ui-input-inline' )
                );
-               $form .= '&#160;' . Xml::submitButton( $this->msg( 'booksources-go' )->text() ) . "</p>\n";
+
+               $form .= '&#160;' . Html::submitButton(
+                       $this->msg( 'booksources-search' )->text(),
+                       array(), array( 'mw-ui-progressive' )
+               ) . "</p>\n";
+
                $form .= Html::closeElement( 'form' ) . "\n";
                $form .= Html::closeElement( 'fieldset' ) . "\n";
 
index 95f9efd..3a13b7e 100644 (file)
@@ -188,9 +188,11 @@ class CategoryPager extends AlphabeticPager {
                                        $this->msg( 'categories' )->text(),
                                        Xml::inputLabel(
                                                $this->msg( 'categoriesfrom' )->text(),
-                                               'from', 'from', 20, $from ) .
+                                               'from', 'from', 20, $from, array( 'class' => 'mw-ui-input-inline' ) ) .
                                                ' ' .
-                                               Xml::submitButton( $this->msg( 'allpagessubmit' )->text()
+                                               Html::submitButton(
+                                                       $this->msg( 'allpagessubmit' )->text(),
+                                                       array(), array( 'mw-ui-progressive' )
                                                )
                                )
                );
index 7fc4a17..12bbd2a 100644 (file)
  *
  * @ingroup SpecialPage
  */
-class SpecialChangeEmail extends UnlistedSpecialPage {
+class SpecialChangeEmail extends FormSpecialPage {
        /**
-        * Users password
-        * @var string
+        * @var Status
         */
-       protected $mPassword;
-
-       /**
-        * Users new email address
-        * @var string
-        */
-       protected $mNewEmail;
+       private $status;
 
        public function __construct() {
                parent::__construct( 'ChangeEmail', 'editmyprivateinfo' );
@@ -57,196 +50,127 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
         * @param string $par
         */
        function execute( $par ) {
-               global $wgAuth;
-
-               $this->setHeaders();
-               $this->outputHeader();
-
                $out = $this->getOutput();
                $out->disallowUserJs();
                $out->addModules( 'mediawiki.special.changeemail' );
 
-               if ( !$wgAuth->allowPropChange( 'emailaddress' ) ) {
-                       $this->error( 'cannotchangeemail' );
-
-                       return;
-               }
-
-               $user = $this->getUser();
-               $request = $this->getRequest();
-
-               $this->requireLogin( 'changeemail-no-info' );
+               return parent::execute( $par );
+       }
 
-               if ( $request->wasPosted() && $request->getBool( 'wpCancel' ) ) {
-                       $this->doReturnTo();
+       protected function checkExecutePermissions( User $user ) {
+               global $wgAuth;
 
-                       return;
+               if ( !$wgAuth->allowPropChange( 'emailaddress' ) ) {
+                       throw new ErrorPageError( 'changeemail', 'cannotchangeemail' );
                }
 
-               $this->checkReadOnly();
-               $this->checkPermissions();
+               $this->requireLogin( 'changeemail-no-info' );
 
                // This could also let someone check the current email address, so
                // require both permissions.
-               if ( !$user->isAllowed( 'viewmyprivateinfo' ) ) {
+               if ( !$this->getUser()->isAllowed( 'viewmyprivateinfo' ) ) {
                        throw new PermissionsError( 'viewmyprivateinfo' );
                }
 
-               $this->mPassword = $request->getVal( 'wpPassword' );
-               $this->mNewEmail = $request->getVal( 'wpNewEmail' );
+               parent::checkExecutePermissions( $user );
+       }
 
-               if ( $request->wasPosted()
-                       && $user->matchEditToken( $request->getVal( 'token' ) )
-               ) {
-                       $info = $this->attemptChange( $user, $this->mPassword, $this->mNewEmail );
-                       if ( $info === true ) {
-                               $this->doReturnTo();
-                       } elseif ( $info === 'eauth' ) {
-                               # Notify user that a confirmation email has been sent...
-                               $out->wrapWikiMsg( "<div class='error' style='clear: both;'>\n$1\n</div>",
-                                       'eauthentsent', $user->getName() );
-                               $this->doReturnTo( 'soft' ); // just show the link to go back
-                               return; // skip form
-                       }
-               }
+       protected function getFormFields() {
+               $user = $this->getUser();
 
-               $this->showForm();
-       }
+               $fields = array(
+                       'Name' => array(
+                               'type' => 'info',
+                               'label-message' => 'username',
+                               'default' => $user->getName(),
+                       ),
+                       'OldEmail' => array(
+                               'type' => 'info',
+                               'label-message' => 'changeemail-oldemail',
+                               'default' => $user->getEmail() ?: $this->msg( 'changeemail-none' )->text(),
+                       ),
+                       'NewEmail' => array(
+                               'type' => 'email',
+                               'label-message' => 'changeemail-newemail',
+                       ),
+               );
 
-       /**
-        * @param string $type
-        */
-       protected function doReturnTo( $type = 'hard' ) {
-               $titleObj = Title::newFromText( $this->getRequest()->getVal( 'returnto' ) );
-               if ( !$titleObj instanceof Title ) {
-                       $titleObj = Title::newMainPage();
-               }
-               if ( $type == 'hard' ) {
-                       $this->getOutput()->redirect( $titleObj->getFullURL() );
-               } else {
-                       $this->getOutput()->addReturnTo( $titleObj );
+               if ( $this->getConfig()->get( 'RequirePasswordforEmailChange' ) ) {
+                       $fields['Password'] = array(
+                               'type' => 'password',
+                               'label-message' => 'changeemail-password',
+                               'autofocus' => true,
+                       );
                }
+
+               return $fields;
        }
 
-       /**
-        * @param string $msg
-        */
-       protected function error( $msg ) {
-               $this->getOutput()->wrapWikiMsg( "<p class='error'>\n$1\n</p>", $msg );
+       protected function alterForm( HTMLForm $form ) {
+               $form->setDisplayFormat( 'vform' );
+               $form->setId( 'mw-changeemail-form' );
+               $form->setTableId( 'mw-changeemail-table' );
+               $form->setWrapperLegend( false );
+               $form->setSubmitTextMsg( 'changeemail-submit' );
+               $form->addHiddenFields( $this->getRequest()->getValues( 'returnto', 'returntoquery' ) );
        }
 
-       protected function showForm() {
-               $user = $this->getUser();
+       public function onSubmit( array $data ) {
+               $password = isset( $data['Password'] ) ? $data['Password'] : null;
+               $status = $this->attemptChange( $this->getUser(), $password, $data['NewEmail'] );
 
-               $oldEmailText = $user->getEmail()
-                       ? $user->getEmail()
-                       : $this->msg( 'changeemail-none' )->text();
-
-               $this->getOutput()->addHTML(
-                       Xml::fieldset( $this->msg( 'changeemail-header' )->text() ) .
-                               Xml::openElement( 'form',
-                                       array(
-                                               'method' => 'post',
-                                               'action' => $this->getPageTitle()->getLocalURL(),
-                                               'id' => 'mw-changeemail-form' ) ) . "\n" .
-                               Html::hidden( 'token', $user->getEditToken() ) . "\n" .
-                               Html::hidden( 'returnto', $this->getRequest()->getVal( 'returnto' ) ) . "\n" .
-                               $this->msg( 'changeemail-text' )->parseAsBlock() . "\n" .
-                               Xml::openElement( 'table', array( 'id' => 'mw-changeemail-table' ) ) . "\n"
-               );
-               $items = array(
-                       array( 'wpName', 'username', 'text', $user->getName() ),
-                       array( 'wpOldEmail', 'changeemail-oldemail', 'text', $oldEmailText ),
-                       array( 'wpNewEmail', 'changeemail-newemail', 'email', $this->mNewEmail ),
-               );
-               if ( $this->getConfig()->get( 'RequirePasswordforEmailChange' ) ) {
-                       $items[] = array( 'wpPassword', 'changeemail-password', 'password', $this->mPassword );
-               }
+               $this->status = $status;
 
-               $this->getOutput()->addHTML(
-                       $this->pretty( $items ) .
-                               "\n" .
-                               "<tr>\n" .
-                               "<td></td>\n" .
-                               '<td class="mw-input">' .
-                               Xml::submitButton( $this->msg( 'changeemail-submit' )->text() ) .
-                               Xml::submitButton( $this->msg( 'changeemail-cancel' )->text(), array( 'name' => 'wpCancel' ) ) .
-                               "</td>\n" .
-                               "</tr>\n" .
-                               Xml::closeElement( 'table' ) .
-                               Xml::closeElement( 'form' ) .
-                               Xml::closeElement( 'fieldset' ) . "\n"
-               );
+               return $status;
        }
 
-       /**
-        * @param array $fields
-        * @return string
-        */
-       protected function pretty( $fields ) {
-               $out = '';
-               foreach ( $fields as $list ) {
-                       list( $name, $label, $type, $value ) = $list;
-                       if ( $type == 'text' ) {
-                               $field = htmlspecialchars( $value );
-                       } else {
-                               $attribs = array( 'id' => $name );
-                               if ( $name == 'wpPassword' ) {
-                                       $attribs[] = 'autofocus';
-                               }
-                               $field = Html::input( $name, $value, $type, $attribs );
-                       }
-                       $out .= "<tr>\n";
-                       $out .= "\t<td class='mw-label'>";
-                       if ( $type != 'text' ) {
-                               $out .= Xml::label( $this->msg( $label )->text(), $name );
-                       } else {
-                               $out .= $this->msg( $label )->escaped();
-                       }
-                       $out .= "</td>\n";
-                       $out .= "\t<td class='mw-input'>";
-                       $out .= $field;
-                       $out .= "</td>\n";
-                       $out .= "</tr>";
-               }
+       public function onSuccess() {
+               $request = $this->getRequest();
 
-               return $out;
+               $titleObj = Title::newFromText( $request->getVal( 'returnto' ) );
+               if ( !$titleObj instanceof Title ) {
+                       $titleObj = Title::newMainPage();
+               }
+               $query = $request->getVal( 'returntoquery' );
+
+               if ( $this->status->value === true ) {
+                       $this->getOutput()->redirect( $titleObj->getFullURL( $query ) );
+               } elseif ( $this->status->value === 'eauth' ) {
+                       # 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
+               }
        }
 
        /**
         * @param User $user
         * @param string $pass
         * @param string $newaddr
-        * @return bool|string True or string on success, false on failure
+        * @return Status
         */
        protected function attemptChange( User $user, $pass, $newaddr ) {
                global $wgAuth;
 
                if ( $newaddr != '' && !Sanitizer::validateEmail( $newaddr ) ) {
-                       $this->error( 'invalidemailaddress' );
-
-                       return false;
+                       return Status::newFatal( 'invalidemailaddress' );
                }
 
                $throttleCount = LoginForm::incLoginThrottle( $user->getName() );
                if ( $throttleCount === true ) {
                        $lang = $this->getLanguage();
                        $throttleInfo = $this->getConfig()->get( 'PasswordAttemptThrottle' );
-                       $this->error( array(
+                       return Status::newFatal(
                                'changeemail-throttled',
                                $lang->formatDuration( $throttleInfo['seconds'] )
-                       ) );
-
-                       return false;
+                       );
                }
 
                if ( $this->getConfig()->get( 'RequirePasswordforEmailChange' )
                        && !$user->checkTemporaryPassword( $pass )
                        && !$user->checkPassword( $pass )
                ) {
-                       $this->error( 'wrongpassword' );
-
-                       return false;
+                       return Status::newFatal( 'wrongpassword' );
                }
 
                if ( $throttleCount ) {
@@ -256,12 +180,7 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
                $oldaddr = $user->getEmail();
                $status = $user->setEmailWithConfirmation( $newaddr );
                if ( !$status->isGood() ) {
-                       $this->getOutput()->addHTML(
-                               '<p class="error">' .
-                                       $this->getOutput()->parseInline( $status->getWikiText( 'mailerror' ) ) .
-                                       '</p>' );
-
-                       return false;
+                       return $status;
                }
 
                wfRunHooks( 'PrefsEmailAudit', array( $user, $oldaddr, $newaddr ) );
@@ -270,7 +189,11 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
 
                $wgAuth->updateExternalDB( $user );
 
-               return $status->value;
+               return $status;
+       }
+
+       public function requiresUnblock() {
+               return false;
        }
 
        protected function getGroupName() {
index af8ab58..107413e 100644 (file)
@@ -478,18 +478,15 @@ class SpecialContributions extends IncludableSpecialPage {
                if ( $tagFilter ) {
                        $filterSelection = Html::rawElement(
                                'td',
-                               array( 'class' => 'mw-label' ),
-                               array_shift( $tagFilter )
-                       );
-                       $filterSelection .= Html::rawElement(
-                               'td',
-                               array( 'class' => 'mw-input' ),
-                               implode( '&#160', $tagFilter )
+                               array(),
+                               array_shift( $tagFilter ) . implode( '&#160', $tagFilter )
                        );
                } else {
                        $filterSelection = Html::rawElement( 'td', array( 'colspan' => 2 ), '' );
                }
 
+               $this->getOutput()->addModules( 'mediawiki.userSuggest' );
+
                $labelNewbies = Xml::radioLabel(
                        $this->msg( 'sp-contributions-newbies' )->text(),
                        'contribs',
@@ -510,9 +507,15 @@ class SpecialContributions extends IncludableSpecialPage {
                        'target',
                        $this->opts['target'],
                        'text',
-                       array( 'size' => '40', 'required' => '', 'class' => 'mw-input' ) +
-                               ( $this->opts['target'] ? array() : array( 'autofocus' )
-                               )
+                       array(
+                               'size' => '40',
+                               'required' => '',
+                               'class' => array(
+                                       'mw-input',
+                                       'mw-ui-input-inline',
+                                       'mw-autocomplete-user', // used by mediawiki.userSuggest
+                               ),
+                       ) + ( $this->opts['target'] ? array() : array( 'autofocus' ) )
                );
                $targetSelection = Html::rawElement(
                        'td',
@@ -522,16 +525,12 @@ class SpecialContributions extends IncludableSpecialPage {
 
                $namespaceSelection = Xml::tags(
                        'td',
-                       array( 'class' => 'mw-label' ),
+                       array(),
                        Xml::label(
                                $this->msg( 'namespace' )->text(),
                                'namespace',
                                ''
-                       )
-               );
-               $namespaceSelection .= Html::rawElement(
-                       'td',
-                       null,
+                       ) .
                        Html::namespaceSelector(
                                array( 'selected' => $this->opts['namespace'], 'all' => '' ),
                                array(
@@ -617,9 +616,9 @@ class SpecialContributions extends IncludableSpecialPage {
                                $this->opts['year'] === '' ? MWTimestamp::getInstance()->format( 'Y' ) : $this->opts['year'],
                                $this->opts['month']
                        ) . ' ' .
-                               Xml::submitButton(
+                               Html::submitButton(
                                        $this->msg( 'sp-contributions-submit' )->text(),
-                                       array( 'class' => 'mw-submit' )
+                                       array( 'class' => 'mw-submit' ), array( 'mw-ui-progressive' )
                                )
                );
 
@@ -652,7 +651,7 @@ class SpecialContributions extends IncludableSpecialPage {
  * @ingroup SpecialPage Pager
  */
 class ContribsPager extends ReverseChronologicalPager {
-       public $mDefaultDirection = true;
+       public $mDefaultDirection = IndexPager::DIR_DESCENDING;
        public $messages;
        public $target;
        public $namespace = '';
index 934b7a3..e739a86 100644 (file)
@@ -26,7 +26,7 @@
  * @ingroup SpecialPage
  */
 class DeletedContribsPager extends IndexPager {
-       public $mDefaultDirection = true;
+       public $mDefaultDirection = IndexPager::DIR_DESCENDING;
        public $messages;
        public $target;
        public $namespace = '';
@@ -315,7 +315,8 @@ class DeletedContributionsPage extends SpecialPage {
                        return;
                }
 
-               $options['limit'] = $request->getInt( 'limit', $this->getConfig()->get( 'QueryPageDefaultLimit' ) );
+               $options['limit'] = $request->getInt( 'limit',
+                       $this->getConfig()->get( 'QueryPageDefaultLimit' ) );
                $options['target'] = $target;
 
                $userObj = User::newFromName( $target, false );
@@ -533,6 +534,8 @@ class DeletedContributionsPage extends SpecialPage {
                        $f .= "\t" . Html::hidden( $name, $value ) . "\n";
                }
 
+               $this->getOutput()->addModules( 'mediawiki.userSuggest' );
+
                $f .= Xml::openElement( 'fieldset' );
                $f .= Xml::element( 'legend', array(), $this->msg( 'sp-contributions-search' )->text() );
                $f .= Xml::tags(
@@ -546,7 +549,10 @@ class DeletedContributionsPage extends SpecialPage {
                        'text',
                        array(
                                'size' => '20',
-                               'required' => ''
+                               'required' => '',
+                               'class' => array(
+                                       'mw-autocomplete-user', // used by mediawiki.userSuggest
+                               ),
                        ) + ( $options['target'] ? array() : array( 'autofocus' ) )
                ) . ' ';
                $f .= Html::namespaceSelector(
index 76f2f4a..bc63e99 100644 (file)
@@ -553,7 +553,15 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                $fields = array();
                $count = 0;
 
-               foreach ( $this->getWatchlistInfo() as $namespace => $pages ) {
+               // Allow subscribers to manipulate the list of watched pages (or use it
+               // to preload lots of details at once)
+               $watchlistInfo = $this->getWatchlistInfo();
+               wfRunHooks(
+                       'WatchlistEditorBeforeFormRender',
+                       array( &$watchlistInfo )
+               );
+
+               foreach ( $watchlistInfo as $namespace => $pages ) {
                        $options = array();
 
                        foreach ( array_keys( $pages ) as $dbkey ) {
@@ -601,6 +609,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                $context->setTitle( $this->getPageTitle() ); // Remove subpage
                $form = new EditWatchlistNormalHTMLForm( $fields, $context );
                $form->setSubmitTextMsg( 'watchlistedit-normal-submit' );
+               $form->setSubmitDestructive();
                # Used message keys:
                # 'accesskey-watchlistedit-normal-submit', 'tooltip-watchlistedit-normal-submit'
                $form->setSubmitTooltip( 'watchlistedit-normal-submit' );
@@ -620,15 +629,13 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
        private function buildRemoveLine( $title ) {
                $link = Linker::link( $title );
 
-               if ( $title->isRedirect() ) {
-                       // Linker already makes class mw-redirect, so this is redundant
-                       $link = '<span class="watchlistredir">' . $link . '</span>';
-               }
-
-               $tools[] = Linker::link( $title->getTalkPage(), $this->msg( 'talkpagelinktext' )->escaped() );
+               $tools['talk'] = Linker::link(
+                       $title->getTalkPage(),
+                       $this->msg( 'talkpagelinktext' )->escaped()
+               );
 
                if ( $title->exists() ) {
-                       $tools[] = Linker::linkKnown(
+                       $tools['history'] = Linker::linkKnown(
                                $title,
                                $this->msg( 'history_short' )->escaped(),
                                array(),
@@ -637,7 +644,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                }
 
                if ( $title->getNamespace() == NS_USER && !$title->isSubpage() ) {
-                       $tools[] = Linker::linkKnown(
+                       $tools['contributions'] = Linker::linkKnown(
                                SpecialPage::getTitleFor( 'Contributions', $title->getText() ),
                                $this->msg( 'contributions' )->escaped()
                        );
@@ -645,9 +652,14 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
 
                wfRunHooks(
                        'WatchlistEditorBuildRemoveLine',
-                       array( &$tools, $title, $title->isRedirect(), $this->getSkin() )
+                       array( &$tools, $title, $title->isRedirect(), $this->getSkin(), &$link )
                );
 
+               if ( $title->isRedirect() ) {
+                       // Linker already makes class mw-redirect, so this is redundant
+                       $link = '<span class="watchlistredir">' . $link . '</span>';
+               }
+
                return $link . " (" . $this->getLanguage()->pipeList( $tools ) . ")";
        }
 
index 0958126..20532a9 100644 (file)
@@ -113,7 +113,8 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                // error out if sending user cannot do this
                $error = self::getPermissionsError(
                        $this->getUser(),
-                       $this->getRequest()->getVal( 'wpEditToken' )
+                       $this->getRequest()->getVal( 'wpEditToken' ),
+                       $this->getConfig()
                );
 
                switch ( $error ) {
@@ -208,12 +209,15 @@ class SpecialEmailUser extends UnlistedSpecialPage {
         *
         * @param User $user
         * @param string $editToken Edit token
+        * @param Config $config optional for backwards compatibility
         * @return string|null Null on success or string on error
         */
-       public static function getPermissionsError( $user, $editToken ) {
-               global $wgEnableEmail, $wgEnableUserEmail;
-
-               if ( !$wgEnableEmail || !$wgEnableUserEmail ) {
+       public static function getPermissionsError( $user, $editToken, Config $config = null ) {
+               if ( $config === null ) {
+                       wfDebug( __METHOD__ . ' called without a Config instance passed to it' );
+                       $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+               }
+               if ( !$config->get( 'EnableEmail' ) || !$config->get( 'EnableUserEmail' ) ) {
                        return 'usermaildisabled';
                }
 
@@ -256,10 +260,9 @@ class SpecialEmailUser extends UnlistedSpecialPage {
         * @return string Form asking for user name.
         */
        protected function userForm( $name ) {
-               global $wgScript;
                $string = Xml::openElement(
                        'form',
-                       array( 'method' => 'get', 'action' => $wgScript, 'id' => 'askusername' )
+                       array( 'method' => 'get', 'action' => wfScript(), 'id' => 'askusername' )
                ) .
                        Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
                        Xml::openElement( 'fieldset' ) .
@@ -302,7 +305,7 @@ class SpecialEmailUser extends UnlistedSpecialPage {
         * or maybe even true on success if anything uses the EmailUser hook.
         */
        public static function submit( array $data, IContextSource $context ) {
-               global $wgUserEmailUseReplyTo;
+               $config = $context->getConfig();
 
                $target = self::getTarget( $data['Target'] );
                if ( !$target instanceof User ) {
@@ -310,8 +313,8 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                        return $context->msg( $target . 'text' )->parseAsBlock();
                }
 
-               $to = new MailAddress( $target );
-               $from = new MailAddress( $context->getUser() );
+               $to = MailAddress::newFromUser( $target );
+               $from = MailAddress::newFromUser( $context->getUser() );
                $subject = $data['Subject'];
                $text = $data['Text'];
 
@@ -325,16 +328,14 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                        return $error;
                }
 
-               if ( $wgUserEmailUseReplyTo ) {
+               if ( $config->get( 'UserEmailUseReplyTo' ) ) {
                        // Put the generic wiki autogenerated address in the From:
                        // header and reserve the user for Reply-To.
                        //
                        // This is a bit ugly, but will serve to differentiate
                        // wiki-borne mails from direct mails and protects against
                        // SPF and bounce problems with some mailers (see below).
-                       global $wgPasswordSender;
-
-                       $mailFrom = new MailAddress( $wgPasswordSender,
+                       $mailFrom = new MailAddress( $config->get( 'PasswordSender' ),
                                wfMessage( 'emailsender' )->inContentLanguage()->text() );
                        $replyTo = $from;
                } else {
index 269dff6..aab9c3e 100644 (file)
@@ -77,7 +77,7 @@ class SpecialExpandTemplates extends SpecialPage {
                        $options->setMaxIncludeSize( self::MAX_INCLUDE_SIZE );
 
                        if ( $this->generateXML ) {
-                               $wgParser->startExternalParse( $title, $options, OT_PREPROCESS );
+                               $wgParser->startExternalParse( $title, $options, Parser::OT_PREPROCESS );
                                $dom = $wgParser->preprocessToDom( $input );
 
                                if ( method_exists( $dom, 'saveXML' ) ) {
@@ -151,7 +151,7 @@ class SpecialExpandTemplates extends SpecialPage {
                        'contexttitle',
                        60,
                        $title,
-                       array( 'autofocus' => true )
+                       array( 'autofocus' => true, 'class' => 'mw-ui-input-inline' )
                ) . '</p>';
                $form .= '<p>' . Xml::label(
                        $this->msg( 'expand_templates_input' )->text(),
@@ -251,6 +251,7 @@ class SpecialExpandTemplates extends SpecialPage {
                ) ) );
                $out->addParserOutputContent( $pout );
                $out->addHTML( Html::closeElement( 'div' ) );
+               $out->setCategoryLinks( $pout->getCategories() );
        }
 
        protected function getGroupName() {
index 1b45315..0831c20 100644 (file)
@@ -30,6 +30,7 @@
  * @ingroup SpecialPage
  */
 class SpecialImport extends SpecialPage {
+       private $sourceName = false;
        private $interwiki = false;
        private $subproject;
        private $fullInterwikiPrefix;
@@ -98,7 +99,7 @@ class SpecialImport extends SpecialPage {
                $isUpload = false;
                $request = $this->getRequest();
                $this->namespace = $request->getIntOrNull( 'namespace' );
-               $sourceName = $request->getVal( "source" );
+               $this->sourceName = $request->getVal( "source" );
 
                $this->logcomment = $request->getText( 'log-comment' );
                $this->pageLinkDepth = $this->getConfig()->get( 'ExportMaxLinkDepth' ) == 0
@@ -109,14 +110,14 @@ class SpecialImport extends SpecialPage {
                $user = $this->getUser();
                if ( !$user->matchEditToken( $request->getVal( 'editToken' ) ) ) {
                        $source = Status::newFatal( 'import-token-mismatch' );
-               } elseif ( $sourceName == 'upload' ) {
+               } elseif ( $this->sourceName == 'upload' ) {
                        $isUpload = true;
                        if ( $user->isAllowed( 'importupload' ) ) {
                                $source = ImportStreamSource::newFromUpload( "xmlimport" );
                        } else {
                                throw new PermissionsError( 'importupload' );
                        }
-               } elseif ( $sourceName == "interwiki" ) {
+               } elseif ( $this->sourceName == "interwiki" ) {
                        if ( !$user->isAllowed( 'import' ) ) {
                                throw new PermissionsError( 'import' );
                        }
@@ -156,7 +157,7 @@ class SpecialImport extends SpecialPage {
                                array( 'importfailed', $source->getWikiText() )
                        );
                } else {
-                       $importer = new WikiImporter( $source->value );
+                       $importer = new WikiImporter( $source->value, $this->getConfig() );
                        if ( !is_null( $this->namespace ) ) {
                                $importer->setTargetNamespace( $this->namespace );
                        }
@@ -250,7 +251,8 @@ class SpecialImport extends SpecialPage {
                                        Xml::label( $this->msg( 'import-comment' )->text(), 'mw-import-comment' ) .
                                        "</td>
                                        <td class='mw-input'>" .
-                                       Xml::input( 'log-comment', 50, '',
+                                       Xml::input( 'log-comment', 50,
+                                               ( $this->sourceName == 'upload' ? $this->logcomment : '' ),
                                                array( 'id' => 'mw-import-comment', 'type' => 'text' ) ) . ' ' .
                                        "</td>
                                </tr>
@@ -327,7 +329,7 @@ class SpecialImport extends SpecialPage {
                        foreach ( $importSources as $key => $value ) {
                                if ( is_int( $key ) ) {
                                        $key = $value;
-                               } else if ( $value !== $key ) {
+                               } elseif ( $value !== $key ) {
                                        $needSubprojectField = true;
                                }
 
@@ -430,7 +432,8 @@ class SpecialImport extends SpecialPage {
                                        Xml::label( $this->msg( 'import-comment' )->text(), 'mw-interwiki-comment' ) .
                                        "</td>
                                        <td class='mw-input'>" .
-                                       Xml::input( 'log-comment', 50, '',
+                                       Xml::input( 'log-comment', 50,
+                                               ( $this->sourceName == 'interwiki' ? $this->logcomment : '' ),
                                                array( 'id' => 'mw-interwiki-comment', 'type' => 'text' ) ) . ' ' .
                                        "</td>
                                </tr>
index 371469b..2d6213a 100644 (file)
@@ -88,7 +88,7 @@ class LinkSearchPage extends QueryPage {
 
                $request = $this->getRequest();
                $target = $request->getVal( 'target', $par );
-               $namespace = $request->getIntorNull( 'namespace', null );
+               $namespace = $request->getIntOrNull( 'namespace', null );
 
                $protocols_list = array();
                foreach ( $this->getConfig()->get( 'UrlProtocols' ) as $prot ) {
@@ -251,6 +251,25 @@ class LinkSearchPage extends QueryPage {
                return $retval;
        }
 
+       /**
+        * Pre-fill the link cache
+        *
+        * @param DatabaseBase $db
+        * @param ResultWrapper $res
+        */
+       function preprocessResults( $db, $res ) {
+               if ( $res->numRows() > 0 ) {
+                       $linkBatch = new LinkBatch();
+
+                       foreach ( $res as $row ) {
+                               $linkBatch->add( $row->namespace, $row->title );
+                       }
+
+                       $res->seek( 0 );
+                       $linkBatch->execute();
+               }
+       }
+
        /**
         * @param Skin $skin
         * @param object $result Result row
index cea6ff8..c68341c 100644 (file)
@@ -48,15 +48,13 @@ class SpecialListFiles extends IncludableSpecialPage {
                        $showAll
                );
 
+               $out = $this->getOutput();
                if ( $this->including() ) {
-                       $html = $pager->getBody();
+                       $out->addParserOutputContent( $pager->getBodyOutput() );
                } else {
-                       $form = $pager->getForm();
-                       $body = $pager->getBody();
-                       $nav = $pager->getNavigationBar();
-                       $html = "$form<br />\n$body<br />\n$nav";
+                       $out->addHTML( $pager->getForm() );
+                       $out->addParserOutputContent( $pager->getFullOutput() );
                }
-               $this->getOutput()->addHTML( $html );
        }
 
        protected function getGroupName() {
@@ -89,7 +87,7 @@ class ImageListPager extends TablePager {
                $this->mIncluding = $including;
                $this->mShowAll = $showAll;
 
-               if ( $userName ) {
+               if ( $userName !== null && $userName !== '' ) {
                        $nt = Title::newFromText( $userName, NS_USER );
                        if ( !is_null( $nt ) ) {
                                $this->mUserName = $nt->getText();
@@ -110,12 +108,12 @@ class ImageListPager extends TablePager {
 
                if ( !$including ) {
                        if ( $context->getRequest()->getText( 'sort', 'img_date' ) == 'img_date' ) {
-                               $this->mDefaultDirection = true;
+                               $this->mDefaultDirection = IndexPager::DIR_DESCENDING;
                        } else {
-                               $this->mDefaultDirection = false;
+                               $this->mDefaultDirection = IndexPager::DIR_ASCENDING;
                        }
                } else {
-                       $this->mDefaultDirection = true;
+                       $this->mDefaultDirection = IndexPager::DIR_DESCENDING;
                }
 
                parent::__construct( $context );
@@ -205,7 +203,9 @@ class ImageListPager extends TablePager {
                        } else {
                                return false;
                        }
-               } elseif ( $this->getConfig()->get( 'MiserMode' ) && $this->mShowAll /* && mUserName === null */ ) {
+               } elseif ( $this->getConfig()->get( 'MiserMode' )
+                       && $this->mShowAll /* && mUserName === null */
+               ) {
                        // no oi_timestamp index, so only alphabetical sorting in this case.
                        if ( $field === 'img_name' ) {
                                return true;
@@ -521,6 +521,7 @@ class ImageListPager extends TablePager {
                        );
                }
 
+               $this->getOutput()->addModules( 'mediawiki.userSuggest' );
                $fields['user'] = array(
                        'type' => 'text',
                        'name' => 'user',
@@ -529,6 +530,7 @@ class ImageListPager extends TablePager {
                        'default' => $this->mUserName,
                        'size' => '40',
                        'maxlength' => '255',
+                       'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
                );
 
                $fields['ilshowall'] = array(
@@ -543,11 +545,13 @@ class ImageListPager extends TablePager {
                unset( $query['title'] );
                unset( $query['limit'] );
                unset( $query['ilsearch'] );
+               unset( $query['ilshowall'] );
                unset( $query['user'] );
 
                $form = new HTMLForm( $fields, $this->getContext() );
 
                $form->setMethod( 'get' );
+               $form->setTitle( $this->getTitle() );
                $form->setId( 'mw-listfiles-form' );
                $form->setWrapperLegendMsg( 'listfiles' );
                $form->setSubmitTextMsg( 'table_pager_limit_submit' );
index b5818ea..8b9a0ee 100644 (file)
@@ -38,10 +38,6 @@ class SpecialListGroupRights extends SpecialPage {
         * @param string|null $par
         */
        public function execute( $par ) {
-               global $wgImplicitGroups;
-               global $wgGroupPermissions, $wgRevokePermissions, $wgAddGroups, $wgRemoveGroups;
-               global $wgGroupsAddToSelf, $wgGroupsRemoveFromSelf;
-
                $this->setHeaders();
                $this->outputHeader();
 
@@ -58,19 +54,26 @@ class SpecialListGroupRights extends SpecialPage {
                                '</tr>'
                );
 
+               $config = $this->getConfig();
+               $groupPermissions = $config->get( 'GroupPermissions' );
+               $revokePermissions = $config->get( 'RevokePermissions' );
+               $addGroups = $config->get( 'AddGroups' );
+               $removeGroups = $config->get( 'RemoveGroups' );
+               $groupsAddToSelf = $config->get( 'GroupsAddToSelf' );
+               $groupsRemoveFromSelf = $config->get( 'GroupsRemoveFromSelf' );
                $allGroups = array_unique( array_merge(
-                       array_keys( $wgGroupPermissions ),
-                       array_keys( $wgRevokePermissions ),
-                       array_keys( $wgAddGroups ),
-                       array_keys( $wgRemoveGroups ),
-                       array_keys( $wgGroupsAddToSelf ),
-                       array_keys( $wgGroupsRemoveFromSelf )
+                       array_keys( $groupPermissions ),
+                       array_keys( $revokePermissions ),
+                       array_keys( $addGroups ),
+                       array_keys( $removeGroups ),
+                       array_keys( $groupsAddToSelf ),
+                       array_keys( $groupsRemoveFromSelf )
                ) );
                asort( $allGroups );
 
                foreach ( $allGroups as $group ) {
-                       $permissions = isset( $wgGroupPermissions[$group] )
-                               ? $wgGroupPermissions[$group]
+                       $permissions = isset( $groupPermissions[$group] )
+                               ? $groupPermissions[$group]
                                : array();
                        $groupname = ( $group == '*' ) // Replace * with a more descriptive groupname
                                ? 'all'
@@ -100,7 +103,7 @@ class SpecialListGroupRights extends SpecialPage {
                                        SpecialPage::getTitleFor( 'Listusers' ),
                                        $this->msg( 'listgrouprights-members' )->escaped()
                                );
-                       } elseif ( !in_array( $group, $wgImplicitGroups ) ) {
+                       } elseif ( !in_array( $group, $config->get( 'ImplicitGroups' ) ) ) {
                                $grouplink = '<br />' . Linker::linkKnown(
                                        SpecialPage::getTitleFor( 'Listusers' ),
                                        $this->msg( 'listgrouprights-members' )->escaped(),
@@ -112,12 +115,12 @@ class SpecialListGroupRights extends SpecialPage {
                                $grouplink = '';
                        }
 
-                       $revoke = isset( $wgRevokePermissions[$group] ) ? $wgRevokePermissions[$group] : array();
-                       $addgroups = isset( $wgAddGroups[$group] ) ? $wgAddGroups[$group] : array();
-                       $removegroups = isset( $wgRemoveGroups[$group] ) ? $wgRemoveGroups[$group] : array();
-                       $addgroupsSelf = isset( $wgGroupsAddToSelf[$group] ) ? $wgGroupsAddToSelf[$group] : array();
-                       $removegroupsSelf = isset( $wgGroupsRemoveFromSelf[$group] )
-                               ? $wgGroupsRemoveFromSelf[$group]
+                       $revoke = isset( $revokePermissions[$group] ) ? $revokePermissions[$group] : array();
+                       $addgroups = isset( $addGroups[$group] ) ? $addGroups[$group] : array();
+                       $removegroups = isset( $removeGroups[$group] ) ? $removeGroups[$group] : array();
+                       $addgroupsSelf = isset( $groupsAddToSelf[$group] ) ? $groupsAddToSelf[$group] : array();
+                       $removegroupsSelf = isset( $groupsRemoveFromSelf[$group] )
+                               ? $groupsRemoveFromSelf[$group]
                                : array();
 
                        $id = $group == '*' ? false : Sanitizer::escapeId( $group );
@@ -135,10 +138,11 @@ class SpecialListGroupRights extends SpecialPage {
        }
 
        private function outputNamespaceProtectionInfo() {
-               global $wgNamespaceProtection, $wgParser, $wgContLang;
+               global $wgParser, $wgContLang;
                $out = $this->getOutput();
+               $namespaceProtection = $this->getConfig()->get( 'NamespaceProtection' );
 
-               if ( count( $wgNamespaceProtection ) == 0 ) {
+               if ( count( $namespaceProtection ) == 0 ) {
                        return;
                }
 
@@ -161,8 +165,8 @@ class SpecialListGroupRights extends SpecialPage {
                        )
                );
 
-               ksort( $wgNamespaceProtection );
-               foreach ( $wgNamespaceProtection as $namespace => $rights ) {
+               ksort( $namespaceProtection );
+               foreach ( $namespaceProtection as $namespace => $rights ) {
                        if ( !in_array( $namespace, MWNamespace::getValidNamespaces() ) ) {
                                continue;
                        }
@@ -231,65 +235,49 @@ class SpecialListGroupRights extends SpecialPage {
                foreach ( $permissions as $permission => $granted ) {
                        //show as granted only if it isn't revoked to prevent duplicate display of permissions
                        if ( $granted && ( !isset( $revoke[$permission] ) || !$revoke[$permission] ) ) {
-                               $description = $this->msg( 'listgrouprights-right-display',
+                               $r[] = $this->msg( 'listgrouprights-right-display',
                                        User::getRightDescription( $permission ),
                                        '<span class="mw-listgrouprights-right-name">' . $permission . '</span>'
                                )->parse();
-                               $r[] = $description;
                        }
                }
                foreach ( $revoke as $permission => $revoked ) {
                        if ( $revoked ) {
-                               $description = $this->msg( 'listgrouprights-right-revoked',
+                               $r[] = $this->msg( 'listgrouprights-right-revoked',
                                        User::getRightDescription( $permission ),
                                        '<span class="mw-listgrouprights-right-name">' . $permission . '</span>'
                                )->parse();
-                               $r[] = $description;
                        }
                }
 
                sort( $r );
 
                $lang = $this->getLanguage();
+               $allGroups = User::getAllGroups();
 
-               if ( $add === true ) {
-                       $r[] = $this->msg( 'listgrouprights-addgroup-all' )->escaped();
-               } elseif ( is_array( $add ) && count( $add ) ) {
-                       $add = array_values( array_unique( $add ) );
-                       $r[] = $this->msg( 'listgrouprights-addgroup',
-                               $lang->listToText( array_map( array( 'User', 'makeGroupLinkWiki' ), $add ) ),
-                               count( $add )
-                       )->parse();
-               }
-
-               if ( $remove === true ) {
-                       $r[] = $this->msg( 'listgrouprights-removegroup-all' )->escaped();
-               } elseif ( is_array( $remove ) && count( $remove ) ) {
-                       $remove = array_values( array_unique( $remove ) );
-                       $r[] = $this->msg( 'listgrouprights-removegroup',
-                               $lang->listToText( array_map( array( 'User', 'makeGroupLinkWiki' ), $remove ) ),
-                               count( $remove )
-                       )->parse();
-               }
-
-               if ( $addSelf === true ) {
-                       $r[] = $this->msg( 'listgrouprights-addgroup-self-all' )->escaped();
-               } elseif ( is_array( $addSelf ) && count( $addSelf ) ) {
-                       $addSelf = array_values( array_unique( $addSelf ) );
-                       $r[] = $this->msg( 'listgrouprights-addgroup-self',
-                               $lang->listToText( array_map( array( 'User', 'makeGroupLinkWiki' ), $addSelf ) ),
-                               count( $addSelf )
-                       )->parse();
-               }
+               $changeGroups = array(
+                       'addgroup' => $add,
+                       'removegroup' => $remove,
+                       'addgroup-self' => $addSelf,
+                       'removegroup-self' => $removeSelf
+               );
 
-               if ( $removeSelf === true ) {
-                       $r[] = $this->msg( 'listgrouprights-removegroup-self-all' )->parse();
-               } elseif ( is_array( $removeSelf ) && count( $removeSelf ) ) {
-                       $removeSelf = array_values( array_unique( $removeSelf ) );
-                       $r[] = $this->msg( 'listgrouprights-removegroup-self',
-                               $lang->listToText( array_map( array( 'User', 'makeGroupLinkWiki' ), $removeSelf ) ),
-                               count( $removeSelf )
-                       )->parse();
+               foreach ( $changeGroups as $messageKey => $changeGroup ) {
+                       if ( $changeGroup === true ) {
+                               // For grep: listgrouprights-addgroup-all, listgrouprights-removegroup-all,
+                               // listgrouprights-addgroup-self-all, listgrouprights-removegroup-self-all
+                               $r[] = $this->msg( 'listgrouprights-' . $messageKey . '-all' )->escaped();
+                       } elseif ( is_array( $changeGroup ) ) {
+                               $changeGroup = array_intersect( array_values( array_unique( $changeGroup ) ), $allGroups );
+                               if ( count( $changeGroup ) ) {
+                                       // For grep: listgrouprights-addgroup, listgrouprights-removegroup,
+                                       // listgrouprights-addgroup-self, listgrouprights-removegroup-self
+                                       $r[] = $this->msg( 'listgrouprights-' . $messageKey,
+                                               $lang->listToText( array_map( array( 'User', 'makeGroupLinkWiki' ), $changeGroup ) ),
+                                               count( $changeGroup )
+                                       )->parse();
+                               }
+                       }
                }
 
                if ( empty( $r ) ) {
index 993285f..dad9074 100644 (file)
@@ -69,7 +69,9 @@ class UsersPager extends AlphabeticPager {
                $this->editsOnly = $request->getBool( 'editsOnly' );
                $this->creationSort = $request->getBool( 'creationSort' );
                $this->including = $including;
-               $this->mDefaultDirection = $request->getBool( 'desc' );
+               $this->mDefaultDirection = $request->getBool( 'desc' )
+                       ? IndexPager::DIR_DESCENDING
+                       : IndexPager::DIR_ASCENDING;
 
                $this->requestedUser = '';
 
@@ -192,10 +194,8 @@ class UsersPager extends AlphabeticPager {
 
                $edits = '';
                if ( !$this->including && $this->getConfig()->get( 'Edititis' ) ) {
-                       // @todo fixme i18n issue: Hardcoded square brackets.
-                       $edits = ' [' .
-                               $this->msg( 'usereditcount' )->numParams( $row->edits )->escaped() .
-                               ']';
+                       $count = $this->msg( 'usereditcount' )->numParams( $row->edits )->escaped();
+                       $edits = $this->msg( 'word-separator' )->escaped() . $this->msg( 'brackets', $count )->escaped();
                }
 
                $created = '';
index dc33801..99704a9 100644 (file)
@@ -47,6 +47,7 @@ class SpecialLog extends SpecialPage {
        public function execute( $par ) {
                $this->setHeaders();
                $this->outputHeader();
+               $this->getOutput()->addModules( 'mediawiki.userSuggest' );
 
                $opts = new FormOptions;
                $opts->add( 'type', '' );
@@ -94,6 +95,9 @@ class SpecialLog extends SpecialPage {
                        } elseif ( $offender && IP::isIPAddress( $offender->getName() ) ) {
                                $qc = array( 'ls_field' => 'target_author_ip', 'ls_value' => $offender->getName() );
                        }
+               } else {
+                       // Allow extensions to add relations to their search types
+                       wfRunHooks( 'SpecialLogAddLogSearchRelations', array( $opts->getValue( 'type' ), $this->getRequest(), &$qc ) );
                }
 
                # Some log types are only for a 'User:' title but we might have been given
index 5bd69e0..60225ea 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup SpecialPage
  */
 class MIMEsearchPage extends QueryPage {
-       protected $major, $minor;
+       protected $major, $minor, $mime;
 
        function __construct( $name = 'MIMEsearch' ) {
                parent::__construct( $name );
@@ -105,32 +105,36 @@ class MIMEsearchPage extends QueryPage {
                return array();
        }
 
-       function execute( $par ) {
-               $mime = $par ? $par : $this->getRequest()->getText( 'mime' );
-               $mime = trim( $mime );
+       /**
+        * Return HTML to put just before the results.
+        */
+       function getPageHeader() {
 
-               $this->setHeaders();
-               $this->outputHeader();
-               $this->getOutput()->addHTML(
-                       Xml::openElement(
+               return Xml::openElement(
                                'form',
                                array( 'id' => 'specialmimesearch', 'method' => 'get', 'action' => wfScript() )
                        ) .
-                               Xml::openElement( 'fieldset' ) .
-                               Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
-                               Xml::element( 'legend', null, $this->msg( 'mimesearch' )->text() ) .
-                               Xml::inputLabel( $this->msg( 'mimetype' )->text(), 'mime', 'mime', 20, $mime ) .
-                               ' ' .
-                               Xml::submitButton( $this->msg( 'ilsubmit' )->text() ) .
-                               Xml::closeElement( 'fieldset' ) .
-                               Xml::closeElement( 'form' )
-               );
+                       Xml::openElement( 'fieldset' ) .
+                       Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
+                       Xml::element( 'legend', null, $this->msg( 'mimesearch' )->text() ) .
+                       Xml::inputLabel( $this->msg( 'mimetype' )->text(), 'mime', 'mime', 20, $this->mime ) .
+                       ' ' .
+                       Xml::submitButton( $this->msg( 'ilsubmit' )->text() ) .
+                                       Xml::closeElement( 'fieldset' ) .
+                                       Xml::closeElement( 'form' );
+       }
 
-               list( $this->major, $this->minor ) = File::splitMime( $mime );
+       function execute( $par ) {
+               $this->mime = $par ? $par : $this->getRequest()->getText( 'mime' );
+               $this->mime = trim( $this->mime );
+               list( $this->major, $this->minor ) = File::splitMime( $this->mime );
 
                if ( $this->major == '' || $this->minor == '' || $this->minor == 'unknown' ||
                        !self::isValidType( $this->major )
                ) {
+                       $this->setHeaders();
+                       $this->outputHeader();
+                       $this->getOutput()->addHTML( $this->getPageHeader() );
                        return;
                }
 
diff --git a/includes/specials/SpecialMediaStatistics.php b/includes/specials/SpecialMediaStatistics.php
new file mode 100644 (file)
index 0000000..1084482
--- /dev/null
@@ -0,0 +1,329 @@
+<?php
+/**
+ * Implements Special:MediaStatistics
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ * @author Brian Wolff
+ */
+
+/**
+ * @ingroup SpecialPage
+ */
+class MediaStatisticsPage extends QueryPage {
+       protected $totalCount = 0, $totalBytes = 0;
+
+       function __construct( $name = 'MediaStatistics' ) {
+               parent::__construct( $name );
+               // Generally speaking there is only a small number of file types,
+               // so just show all of them.
+               $this->limit = 5000;
+               $this->shownavigation = false;
+       }
+
+       function isExpensive() {
+               return true;
+       }
+
+       /**
+        * Query to do.
+        *
+        * This abuses the query cache table by storing mime types as "titles".
+        *
+        * This will store entries like [[Media:BITMAP;image/jpeg;200;20000]]
+        * where the form is Media type;mime type;count;bytes.
+        *
+        * This relies on the behaviour that when value is tied, the order things
+        * come out of querycache table is the order they went in. Which is hacky.
+        * However, other special pages like Special:Deadendpages and
+        * Special:BrokenRedirects also rely on this.
+        */
+       public function getQueryInfo() {
+               $dbr = wfGetDB( DB_SLAVE );
+               $fakeTitle = $dbr->buildConcat( array(
+                       'img_media_type',
+                       $dbr->addQuotes( ';' ),
+                       'img_major_mime',
+                       $dbr->addQuotes( '/' ),
+                       'img_minor_mime',
+                       $dbr->addQuotes( ';' ),
+                       'COUNT(*)',
+                       $dbr->addQuotes( ';' ),
+                       'SUM( img_size )'
+               ) );
+               return array(
+                       'tables' => array( 'image' ),
+                       'fields' => array(
+                               'title' => $fakeTitle,
+                               'namespace' => NS_MEDIA, /* needs to be something */
+                               'value' => '1'
+                       ),
+                       'options' => array(
+                               'GROUP BY' => array(
+                                       'img_media_type',
+                                       'img_major_mime',
+                                       'img_minor_mime',
+                               )
+                       )
+               );
+       }
+
+       /**
+        * How to sort the results
+        *
+        * It's important that img_media_type come first, otherwise the
+        * tables will be fragmented.
+        * @return Array Fields to sort by
+        */
+       function getOrderFields() {
+               return array( 'img_media_type', 'count(*)', 'img_major_mime', 'img_minor_mime' );
+       }
+
+       /**
+        * Output the results of the query.
+        *
+        * @param $out OutputPage
+        * @param $skin Skin (deprecated presumably)
+        * @param $dbr DatabaseBase
+        * @param $res ResultWrapper Results from query
+        * @param $num integer Number of results
+        * @param $offset integer Paging offset (Should always be 0 in our case)
+        */
+       protected function outputResults( $out, $skin, $dbr, $res, $num, $offset ) {
+               $prevMediaType = null;
+               foreach ( $res as $row ) {
+                       list( $mediaType, $mime, $totalCount, $totalBytes ) = $this->splitFakeTitle( $row->title );
+                       if ( $prevMediaType !== $mediaType ) {
+                               if ( $prevMediaType !== null ) {
+                                       // We're not at beginning, so we have to
+                                       // close the previous table.
+                                       $this->outputTableEnd();
+                               }
+                               $this->outputMediaType( $mediaType );
+                               $this->outputTableStart( $mediaType );
+                               $prevMediaType = $mediaType;
+                       }
+                       $this->outputTableRow( $mime, intval( $totalCount ), intval( $totalBytes ) );
+               }
+               if ( $prevMediaType !== null ) {
+                       $this->outputTableEnd();
+               }
+       }
+
+       /**
+        * Output closing </table>
+        */
+       protected function outputTableEnd() {
+               $this->getOutput()->addHtml( Html::closeElement( 'table' ) );
+       }
+
+       /**
+        * Output a row of the stats table
+        *
+        * @param $mime String mime type (e.g. image/jpeg)
+        * @param $count integer Number of images of this type
+        * @param $totalBytes integer Total space for images of this type
+        */
+       protected function outputTableRow( $mime, $count, $bytes ) {
+               $mimeSearch = SpecialPage::getTitleFor( 'MIMEsearch', $mime );
+               $row = Html::rawElement(
+                       'td',
+                       array(),
+                       Linker::link( $mimeSearch, htmlspecialchars( $mime ) )
+               );
+               $row .= Html::element(
+                       'td',
+                       array(),
+                       $this->getExtensionList( $mime )
+               );
+               $row .= Html::rawElement(
+                       'td',
+                       // Make sure js sorts it in numeric order
+                       array( 'data-sort-value' => $count ),
+                       $this->msg( 'mediastatistics-nfiles' )
+                               ->numParams( $count )
+                               /** @todo Check to be sure this really should have number formatting */
+                               ->numParams( $this->makePercentPretty( $count / $this->totalCount ) )
+                               ->parse()
+               );
+               $row .= Html::rawElement(
+                       'td',
+                       // Make sure js sorts it in numeric order
+                       array( 'data-sort-value' =>  $bytes ),
+                       $this->msg( 'mediastatistics-nbytes' )
+                               ->numParams( $bytes )
+                               ->sizeParams( $bytes )
+                               /** @todo Check to be sure this really should have number formatting */
+                               ->numParams( $this->makePercentPretty( $bytes / $this->totalBytes ) )
+                               ->parse()
+               );
+
+               $this->getOutput()->addHTML( Html::rawElement( 'tr', array(), $row ) );
+       }
+
+       /**
+        * @param float $decimal A decimal percentage (ie for 12.3%, this would be 0.123)
+        * @return String The percentage formatted so that 3 significant digits are shown.
+        */
+       protected function makePercentPretty( $decimal ) {
+               $decimal *= 100;
+               // Always show three useful digits
+               if ( $decimal == 0 ) {
+                       return '0';
+               }
+               if ( $decimal >= 100 ) {
+                       return '100';
+               }
+               $percent = sprintf( "%." . max( 0, 2 - floor( log10( $decimal ) ) ) . "f", $decimal );
+               // Then remove any trailing 0's
+               return preg_replace( '/\.?0*$/', '', $percent );
+       }
+
+       /**
+        * Given a mime type, return a comma separated list of allowed extensions.
+        *
+        * @param $mime String mime type
+        * @return String Comma separated list of allowed extensions (e.g. ".ogg, .oga")
+        */
+       private function getExtensionList( $mime ) {
+               $exts = MimeMagic::singleton()->getExtensionsForType( $mime );
+               if ( $exts === null ) {
+                       return '';
+               }
+               $extArray = explode( ' ', $exts );
+               $extArray = array_unique( $extArray );
+               foreach ( $extArray as &$ext ) {
+                       $ext = '.' . $ext;
+               }
+
+               return $this->getLanguage()->commaList( $extArray );
+       }
+
+       /**
+        * Output the start of the table
+        *
+        * Including opening <table>, and first <tr> with column headers.
+        */
+       protected function outputTableStart( $mediaType ) {
+               $this->getOutput()->addHTML(
+                       Html::openElement(
+                               'table',
+                               array( 'class' => array(
+                                       'mw-mediastats-table',
+                                       'mw-mediastats-table-' . strtolower( $mediaType ),
+                                       'sortable',
+                                       'wikitable'
+                               ))
+                       )
+               );
+               $this->getOutput()->addHTML( $this->getTableHeaderRow() );
+       }
+
+       /**
+        * Get (not output) the header row for the table
+        *
+        * @return String the header row of the able
+        */
+       protected function getTableHeaderRow() {
+               $headers = array( 'mimetype', 'extensions', 'count', 'totalbytes' );
+               $ths = '';
+               foreach ( $headers as $header ) {
+                       $ths .= Html::rawElement(
+                               'th',
+                               array(),
+                               // for grep:
+                               // mediastatistics-table-mimetype, mediastatistics-table-extensions
+                               // tatistics-table-count, mediastatistics-table-totalbytes
+                               $this->msg( 'mediastatistics-table-' . $header )->parse()
+                       );
+               }
+               return Html::rawElement( 'tr', array(), $ths );
+       }
+
+       /**
+        * Output a header for a new media type section
+        *
+        * @param $mediaType string A media type (e.g. from the MEDIATYPE_xxx constants)
+        */
+       protected function outputMediaType( $mediaType ) {
+               $this->getOutput()->addHTML(
+                       Html::element(
+                               'h2',
+                               array( 'class' => array(
+                                       'mw-mediastats-mediatype',
+                                       'mw-mediastats-mediatype-' . strtolower( $mediaType )
+                               )),
+                               // for grep
+                               // mediastatistics-header-unknown, mediastatistics-header-bitmap,
+                               // mediastatistics-header-drawing, mediastatistics-header-audio,
+                               // mediastatistics-header-video, mediastatistics-header-multimedia,
+                               // mediastatistics-header-office, mediastatistics-header-text,
+                               // mediastatistics-header-executable, mediastatistics-header-archive,
+                               $this->msg( 'mediastatistics-header-' . strtolower( $mediaType ) )->text()
+                       )
+               );
+               /** @todo Possibly could add a message here explaining what the different types are.
+                *    not sure if it is needed though.
+                */
+       }
+
+       /**
+        * parse the fake title format that this special page abuses querycache with.
+        *
+        * @param $fakeTitle String A string formatted as <media type>;<mime type>;<count>;<bytes>
+        * @return Array The constituant parts of $fakeTitle
+        */
+       private function splitFakeTitle( $fakeTitle ) {
+               return explode( ';', $fakeTitle, 4 );
+       }
+
+       /**
+        * What group to put the page in
+        * @return string
+        */
+       protected function getGroupName() {
+               return 'media';
+       }
+
+       /**
+        * This method isn't used, since we override outputResults, but
+        * we need to implement since abstract in parent class.
+        *
+        * @param $skin Skin
+        * @param $result stdObject Result row
+        */
+       public function formatResult( $skin, $result ) {
+               throw new MWException( "unimplemented" );
+       }
+
+       /**
+        * Initialize total values so we can figure out percentages later.
+        *
+        * @param $dbr DatabaseBase
+        * @param $res ResultWrapper
+        */
+       public function preprocessResults( $dbr, $res ) {
+               $this->totalCount = $this->totalBytes = 0;
+               foreach ( $res as $row ) {
+                       list( , , $count, $bytes ) = $this->splitFakeTitle( $row->title );
+                       $this->totalCount += $count;
+                       $this->totalBytes += $bytes;
+               }
+               $res->seek( 0 );
+       }
+}
index 6efc12b..c71ef76 100644 (file)
@@ -388,11 +388,11 @@ class SpecialMergeHistory extends SpecialPage {
                }
                # Check that there are not too many revisions to move
                $limit = 5000; // avoid too much slave lag
-               $count = $dbw->select( 'revision', '1',
+               $count = $dbw->selectRowCount( 'revision', '1',
                        array( 'rev_page' => $this->mTargetID, $timewhere ),
                        __METHOD__,
                        array( 'LIMIT' => $limit + 1 )
-               )->numRows();
+               );
                if ( $count > $limit ) {
                        $this->getOutput()->addWikiMsg( 'mergehistory-fail-toobig' );
 
@@ -469,15 +469,21 @@ class SpecialMergeHistory extends SpecialPage {
                        return false;
                }
                # Update our logs
-               $log = new LogPage( 'merge' );
-               $log->addEntry(
-                       'merge', $targetTitle, $this->mComment,
-                       array( $destTitle->getPrefixedText(), $timestampLimit ), $this->getUser()
-               );
+               $logEntry = new ManualLogEntry( 'merge', 'merge' );
+               $logEntry->setPerformer( $this->getUser() );
+               $logEntry->setComment( $this->mComment );
+               $logEntry->setTarget( $targetTitle );
+               $logEntry->setParameters( array(
+                       '4::dest' => $destTitle->getPrefixedText(),
+                       '5::mergepoint' => $timestampLimit
+               ) );
+               $logId = $logEntry->insert();
+               $logEntry->publish( $logId );
 
                # @todo message should use redirect=no
-               $this->getOutput()->addWikiMsg( 'mergehistory-success',
-                       $targetTitle->getPrefixedText(), $destTitle->getPrefixedText(), $count );
+               $this->getOutput()->addWikiText( $this->msg( 'mergehistory-success',
+                       $targetTitle->getPrefixedText(), $destTitle->getPrefixedText() )->numParams(
+                       $count )->text() );
 
                wfRunHooks( 'ArticleMergeComplete', array( $targetTitle, $destTitle ) );
 
@@ -496,7 +502,7 @@ class MergeHistoryPager extends ReverseChronologicalPager {
        /** @var array */
        public $mConds;
 
-       function __construct( $form, $conds = array(), $source, $dest ) {
+       function __construct( $form, $conds, $source, $dest ) {
                $this->mForm = $form;
                $this->mConds = $conds;
                $this->title = $source;
@@ -550,7 +556,7 @@ class MergeHistoryPager extends ReverseChronologicalPager {
        function getQueryInfo() {
                $conds = $this->mConds;
                $conds['rev_page'] = $this->articleID;
-               $conds[] = "rev_timestamp < {$this->maxTimestamp}";
+               $conds[] = "rev_timestamp < " . $this->mDb->addQuotes( $this->maxTimestamp );
 
                return array(
                        'tables' => array( 'revision', 'page', 'user' ),
index ec9593f..4cbf584 100644 (file)
@@ -549,10 +549,22 @@ class MovePageForm extends UnlistedSpecialPage {
                }
 
                # Do the actual move.
-               $error = $ot->moveTo( $nt, true, $this->reason, $createRedirect );
-               if ( $error !== true ) {
-                       $this->showForm( $error );
+               $mp = new MovePage( $ot, $nt );
+               $valid = $mp->isValidMove();
+               if ( !$valid->isOK() ) {
+                       $this->showForm( $valid->getErrorsArray() );
+                       return;
+               }
+
+               $permStatus = $mp->checkPermissions( $user, $this->reason );
+               if ( !$permStatus->isOK() ) {
+                       $this->showForm( $permStatus->getErrorsArray() );
+                       return;
+               }
 
+               $status = $mp->move( $user, $this->reason, $createRedirect );
+               if ( !$status->isOK() ) {
+                       $this->showForm( $status->getErrorsArray() );
                        return;
                }
 
index 546c191..bc16925 100644 (file)
@@ -59,7 +59,7 @@ class SpecialNewFiles extends IncludableSpecialPage {
                if ( !$message->isDisabled() ) {
                        $this->getOutput()->addWikiText(
                                Html::rawElement( 'p',
-                                       array( 'lang' => $wgContLang->getCode(), 'dir' => $wgContLang->getDir() ),
+                                       array( 'lang' => $wgContLang->getHtmlCode(), 'dir' => $wgContLang->getDir() ),
                                        "\n" . $message->plain() . "\n"
                                ),
                                /* $lineStart */ false,
@@ -201,7 +201,10 @@ class NewFilesPager extends ReverseChronologicalPager {
                $context = new DerivativeContext( $this->getContext() );
                $context->setTitle( $this->getTitle() ); // Remove subpage
                $form = new HTMLForm( $fields, $context );
+
                $form->setSubmitTextMsg( 'ilsubmit' );
+               $form->setSubmitProgressive();
+
                $form->setMethod( 'get' );
                $form->setWrapperLegendMsg( 'newimages-legend' );
 
index 0b70bb7..ad1f051 100644 (file)
@@ -198,6 +198,7 @@ class SpecialNewpages extends IncludableSpecialPage {
        }
 
        protected function form() {
+               $out = $this->getOutput();
                // Consume values
                $this->opts->consumeValue( 'offset' ); // don't carry offset, DWIW
                $namespace = $this->opts->consumeValue( 'namespace' );
@@ -216,72 +217,62 @@ class SpecialNewpages extends IncludableSpecialPage {
                }
                $hidden = implode( "\n", $hidden );
 
-               $tagFilter = ChangeTags::buildTagFilterSelector( $tagFilterVal );
-               if ( $tagFilter ) {
-                       list( $tagFilterLabel, $tagFilterSelector ) = $tagFilter;
-               }
+               $form = array(
+                       'namespace' => array(
+                               'type' => 'namespaceselect',
+                               'name' => 'namespace',
+                               'label-message' => 'namespace',
+                               'default' => $namespace,
+                       ),
+                       'nsinvert' => array(
+                               'type' => 'check',
+                               'name' => 'nsinvert',
+                               'label-message' => 'invert',
+                               'default' => $nsinvert,
+                               'tooltip' => $this->msg( 'tooltip-invert' )->text(),
+                       ),
+                       'tagFilter' => array(
+                               'type' => 'tagfilter',
+                               'name' => 'tagfilter',
+                               'label-raw' => wfMessage( 'tag-filter' )->parse(),
+                               'default' => $tagFilterVal,
+                       ),
+                       'username' => array(
+                               'type' => 'text',
+                               'name' => 'username',
+                               'label-message' => 'newpages-username',
+                               'default' => $userText,
+                               'id' => 'mw-np-username',
+                               'size' => 30,
+                               'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
+                       ),
+               );
+
+               $htmlForm = new HTMLForm( $form, $this->getContext() );
+
+               $htmlForm->setSubmitText( $this->msg( 'allpagessubmit' )->text() );
+               $htmlForm->setSubmitProgressive();
+               // The form should be visible on each request (inclusive requests with submitted forms), so
+               // return always false here.
+               $htmlForm->setSubmitCallback(
+                       function () {
+                               return false;
+                       }
+               );
+               $htmlForm->setMethod( 'get' );
+
+               $out->addHtml( Xml::fieldset( $this->msg( 'newpages' )->text() ) );
 
-               $form = Xml::openElement( 'form', array( 'action' => wfScript() ) ) .
-                       Html::hidden( 'title', $this->getPageTitle()->getPrefixedDBkey() ) .
-                       Xml::fieldset( $this->msg( 'newpages' )->text() ) .
-                       Xml::openElement( 'table', array( 'id' => 'mw-newpages-table' ) ) .
-                       '<tr>
-                               <td class="mw-label">' .
-                       Xml::label( $this->msg( 'namespace' )->text(), 'namespace' ) .
-                       '</td>
-                       <td class="mw-input">' .
-                       Html::namespaceSelector(
-                               array(
-                                       'selected' => $namespace,
-                                       'all' => 'all',
-                               ), array(
-                                       'name' => 'namespace',
-                                       'id' => 'namespace',
-                                       'class' => 'namespaceselector',
-                               )
-                       ) . '&#160;' .
-                       Xml::checkLabel(
-                               $this->msg( 'invert' )->text(),
-                               'invert',
-                               'nsinvert',
-                               $nsinvert,
-                               array( 'title' => $this->msg( 'tooltip-invert' )->text() )
+               $htmlForm->show();
+
+               $out->addHtml(
+                       Html::rawElement(
+                               'div',
+                               null,
+                               $this->filterLinks()
                        ) .
-                       '</td>
-                       </tr>' . ( $tagFilter ? (
-                       '<tr>
-                               <td class="mw-label">' .
-                               $tagFilterLabel .
-                               '</td>
-                               <td class="mw-input">' .
-                               $tagFilterSelector .
-                               '</td>
-                       </tr>' ) : '' ) .
-                       '<tr>
-                               <td class="mw-label">' .
-                                       Xml::label( $this->msg( 'newpages-username' )->text(), 'mw-np-username' ) .
-                                       '</td>
-                               <td class="mw-input">' .
-                                       Xml::input( 'username', 30, $userText, array( 'id' => 'mw-np-username' ) ) .
-                                       '</td>
-                       </tr>' .
-                       '<tr> <td></td>
-                               <td class="mw-submit">' .
-                       Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) .
-                       '</td>
-               </tr>' .
-                       '<tr>
-                               <td></td>
-                               <td class="mw-input">' .
-                       $this->filterLinks() .
-                       '</td>
-                       </tr>' .
-                       Xml::closeElement( 'table' ) .
-                       Xml::closeElement( 'fieldset' ) .
-                       $hidden .
-                       Xml::closeElement( 'form' );
-
-               $this->getOutput()->addHTML( $form );
+                       Xml::closeElement( 'fieldset' )
+               );
        }
 
        /**
index 5c8794a..2acf23c 100644 (file)
@@ -76,6 +76,7 @@ class SpecialPageLanguage extends FormSpecialPage {
 
                $page['language'] = array(
                        'id' => 'mw-pl-languageselector',
+                       'cssclass' => 'mw-languageselector',
                        'type' => 'select',
                        'options' => $options,
                        'label-message' => 'pagelang-language',
@@ -92,6 +93,7 @@ class SpecialPageLanguage extends FormSpecialPage {
        public function alterForm( HTMLForm $form ) {
                $form->setDisplayFormat( 'vform' );
                $form->setWrapperLegend( false );
+               wfRunHooks( 'LanguageSelector', array( $this->getOutput(), 'mw-languageselector' ) );
        }
 
        /**
diff --git a/includes/specials/SpecialPopularpages.php b/includes/specials/SpecialPopularpages.php
deleted file mode 100644 (file)
index 2a80f65..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/**
- * Implements Special:PopularPages
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup SpecialPage
- */
-
-/**
- * A special page that list most viewed pages
- *
- * @ingroup SpecialPage
- */
-class PopularPagesPage extends QueryPage {
-       function __construct( $name = 'Popularpages' ) {
-               parent::__construct( $name );
-       }
-
-       function isExpensive() {
-               # page_counter is not indexed
-               return true;
-       }
-
-       function isSyndicated() {
-               return false;
-       }
-
-       function getQueryInfo() {
-               return array(
-                       'tables' => array( 'page' ),
-                       'fields' => array(
-                               'namespace' => 'page_namespace',
-                               'title' => 'page_title',
-                               'value' => 'page_counter' ),
-                       'conds' => array(
-                               'page_is_redirect' => 0,
-                               'page_namespace' => MWNamespace::getContentNamespaces()
-                       )
-               );
-       }
-
-       /**
-        * @param Skin $skin
-        * @param object $result Result row
-        * @return string
-        */
-       function formatResult( $skin, $result ) {
-               global $wgContLang;
-
-               $title = Title::makeTitleSafe( $result->namespace, $result->title );
-               if ( !$title ) {
-                       return Html::element(
-                               'span',
-                               array( 'class' => 'mw-invalidtitle' ),
-                               Linker::getInvalidTitleDescription(
-                                       $this->getContext(),
-                                       $result->namespace,
-                                       $result->title )
-                       );
-               }
-
-               $link = Linker::linkKnown(
-                       $title,
-                       htmlspecialchars( $wgContLang->convert( $title->getPrefixedText() ) )
-               );
-               $nv = $this->msg( 'nviews' )->numParams( $result->value )->escaped();
-
-               return $this->getLanguage()->specialList( $link, $nv );
-       }
-
-       protected function getGroupName() {
-               return 'wiki';
-       }
-}
index 4cfd445..cea00fa 100644 (file)
@@ -73,6 +73,7 @@ class SpecialPreferences extends SpecialPage {
                $htmlForm = new HTMLForm( array(), $context, 'prefs-restore' );
 
                $htmlForm->setSubmitTextMsg( 'restoreprefs' );
+               $htmlForm->setSubmitDestructive();
                $htmlForm->setSubmitCallback( array( $this, 'submitReset' ) );
                $htmlForm->suppressReset();
 
index 5072e76..0ba7385 100644 (file)
@@ -79,11 +79,7 @@ class SpecialProtectedpages extends SpecialPage {
                ) );
 
                if ( $pager->getNumRows() ) {
-                       $this->getOutput()->addHTML(
-                               $pager->getNavigationBar() .
-                                       $pager->getBody() .
-                                       $pager->getNavigationBar()
-                       );
+                       $this->getOutput()->addParserOutputContent( $pager->getFullOutput() );
                } else {
                        $this->getOutput()->addWikiMsg( 'protectedpagesempty' );
                }
index 5938f01..e6d8f1c 100644 (file)
@@ -595,9 +595,9 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                }
 
                # Look up
-               $c = new Categoryfinder;
-               $c->seed( $articles, $cats, $opts['categories_any'] ? 'OR' : 'AND' );
-               $match = $c->run();
+               $catFind = new CategoryFinder;
+               $catFind->seed( $articles, $cats, $opts['categories_any'] ? 'OR' : 'AND' );
+               $match = $catFind->run();
 
                # Filter
                $newrows = array();
@@ -732,7 +732,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
 
                        $link = $this->makeOptionsLink( $linkMessage->text(),
                                array( $key => 1 - $options[$key] ), $nondefaults );
-                       $links[] = $this->msg( $msg )->rawParams( $link )->escaped();
+                       $links[] = "<span class=\"$msg rcshowhideoption\">" . $this->msg( $msg )->rawParams( $link )->escaped() . '</span>';
                }
 
                // show from this onward link
@@ -740,13 +740,16 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                $now = $lang->userTimeAndDate( $timestamp, $user );
                $timenow = $lang->userTime( $timestamp, $user );
                $datenow = $lang->userDate( $timestamp, $user );
-               $rclinks = $this->msg( 'rclinks' )->rawParams( $cl, $dl, $lang->pipeList( $links ) )
-                       ->parse();
-               $rclistfrom = $this->makeOptionsLink(
+               $pipedLinks = '<span class="rcshowhide">' . $lang->pipeList( $links ) . '</span>';
+
+               $rclinks = '<span class="rclinks">' . $this->msg( 'rclinks' )->rawParams( $cl, $dl, $pipedLinks )
+                       ->parse() . '</span>';
+
+               $rclistfrom = '<span class="rclistfrom">' . $this->makeOptionsLink(
                        $this->msg( 'rclistfrom' )->rawParams( $now, $timenow, $datenow )->parse(),
                        array( 'from' => $timestamp ),
                        $nondefaults
-               );
+               ) . '</span>';
 
                return "{$note}$rclinks<br />$rclistfrom";
        }
index 54f224a..d4a06eb 100644 (file)
@@ -61,7 +61,7 @@ class SpecialRunJobs extends UnlistedSpecialPage {
 
                $squery = $params;
                unset( $squery['signature'] );
-               $cSig = self::getQuerySignature( $squery ); // correct signature
+               $cSig = self::getQuerySignature( $squery, $this->getConfig()->get( 'SecretKey' ) ); // correct signature
                $rSig = $params['signature']; // provided signature
 
                $verified = is_string( $rSig ) && hash_equals( $cSig, $rSig );
@@ -102,12 +102,11 @@ class SpecialRunJobs extends UnlistedSpecialPage {
 
        /**
         * @param array $query
+        * @param string $secretKey
         * @return string
         */
-       public static function getQuerySignature( array $query ) {
-               global $wgSecretKey;
-
+       public static function getQuerySignature( array $query, $secretKey ) {
                ksort( $query ); // stable order
-               return hash_hmac( 'sha1', wfArrayToCgi( $query ), $wgSecretKey );
+               return hash_hmac( 'sha1', wfArrayToCgi( $query ), $secretKey );
        }
 }
index 59d65bc..b1baf67 100644 (file)
@@ -197,14 +197,6 @@ class SpecialSearch extends SpecialPage {
                $title = Title::newFromText( $term );
                if ( !is_null( $title ) ) {
                        wfRunHooks( 'SpecialSearchNogomatch', array( &$title ) );
-                       wfDebugLog( 'nogomatch', $title->getFullText(), 'private' );
-
-                       # If the feature is enabled, go straight to the edit page
-                       if ( $this->getConfig()->get( 'GoToEdit' ) ) {
-                               $this->getOutput()->redirect( $title->getFullURL( array( 'action' => 'edit' ) ) );
-
-                               return;
-                       }
                }
                $this->showResults( $term );
        }
@@ -367,10 +359,8 @@ class SpecialSearch extends SpecialPage {
                                        $this->limit + $this->offset >= $totalRes
                                );
                        }
-                       wfRunHooks( 'SpecialSearchResults', array( $term, &$titleMatches, &$textMatches ) );
-               } else {
-                       wfRunHooks( 'SpecialSearchNoResults', array( $term ) );
                }
+               wfRunHooks( 'SpecialSearchResults', array( $term, &$titleMatches, &$textMatches ) );
 
                $out->parserOptions()->setEditSection( false );
                if ( $titleMatches ) {
@@ -436,15 +426,18 @@ class SpecialSearch extends SpecialPage {
                        return;
                }
 
+               $messageName = 'searchmenu-new-nocreate';
                $linkClass = 'mw-search-createlink';
-               if ( $title->isKnown() ) {
-                       $messageName = 'searchmenu-exists';
-                       $linkClass = 'mw-search-exists';
-               } elseif ( $title->quickUserCan( 'create', $this->getUser() ) ) {
-                       $messageName = 'searchmenu-new';
-               } else {
-                       $messageName = 'searchmenu-new-nocreate';
+
+               if ( !$title->isExternal() ) {
+                       if ( $title->isKnown() ) {
+                               $messageName = 'searchmenu-exists';
+                               $linkClass = 'mw-search-exists';
+                       } elseif ( $title->quickUserCan( 'create', $this->getUser() ) ) {
+                               $messageName = 'searchmenu-new';
+                       }
                }
+
                $params = array(
                        $messageName,
                        wfEscapeWikiText( $title->getPrefixedText() ),
@@ -593,7 +586,7 @@ class SpecialSearch extends SpecialPage {
 
                $title = $result->getTitle();
 
-               $titleSnippet = $result->getTitleSnippet( $terms );
+               $titleSnippet = $result->getTitleSnippet();
 
                if ( $titleSnippet == '' ) {
                        $titleSnippet = null;
@@ -625,11 +618,12 @@ class SpecialSearch extends SpecialPage {
 
                // format redirects / relevant sections
                $redirectTitle = $result->getRedirectTitle();
-               $redirectText = $result->getRedirectSnippet( $terms );
+               $redirectText = $result->getRedirectSnippet();
                $sectionTitle = $result->getSectionTitle();
-               $sectionText = $result->getSectionSnippet( $terms );
-               $redirect = '';
+               $sectionText = $result->getSectionSnippet();
+               $categorySnippet = $result->getCategorySnippet();
 
+               $redirect = '';
                if ( !is_null( $redirectTitle ) ) {
                        if ( $redirectText == '' ) {
                                $redirectText = null;
@@ -642,7 +636,6 @@ class SpecialSearch extends SpecialPage {
                }
 
                $section = '';
-
                if ( !is_null( $sectionTitle ) ) {
                        if ( $sectionText == '' ) {
                                $sectionText = null;
@@ -654,6 +647,13 @@ class SpecialSearch extends SpecialPage {
                                "</span>";
                }
 
+               $category = '';
+               if ( $categorySnippet ) {
+                       $category = "<span class='searchalttitle'>" .
+                               $this->msg( 'search-category' )->rawParams( $categorySnippet )->text() .
+                               "</span>";
+               }
+
                // format text extract
                $extract = "<div class='searchresult'>" . $result->getTextSnippet( $terms ) . "</div>";
 
@@ -675,26 +675,6 @@ class SpecialSearch extends SpecialPage {
 
                $date = $lang->userTimeAndDate( $timestamp, $this->getUser() );
 
-               // link to related articles if supported
-               $related = '';
-               if ( $result->hasRelated() ) {
-                       $stParams = array_merge(
-                               $this->powerSearchOptions(),
-                               array(
-                                       'search' => $this->msg( 'searchrelated' )->inContentLanguage()->text() .
-                                               ':' . $title->getPrefixedText(),
-                                       'fulltext' => $this->msg( 'search' )->text()
-                               )
-                       );
-
-                       $related = ' -- ' . Linker::linkKnown(
-                               $this->getPageTitle(),
-                               $this->msg( 'search-relatedarticle' )->text(),
-                               array(),
-                               $stParams
-                       );
-               }
-
                $fileMatch = '';
                // Include a thumbnail for media files...
                if ( $title->getNamespace() == NS_FILE ) {
@@ -718,9 +698,9 @@ class SpecialSearch extends SpecialPage {
                                                $thumb->toHtml( array( 'desc-link' => true ) ) .
                                                '</td>' .
                                                '<td style="vertical-align: top;">' .
-                                               "{$link} {$redirect} {$section} {$fileMatch}" .
+                                               "{$link} {$redirect} {$category} {$section} {$fileMatch}" .
                                                $extract .
-                                               "<div class='mw-search-result-data'>{$desc} - {$date}{$related}</div>" .
+                                               "<div class='mw-search-result-data'>{$desc} - {$date}</div>" .
                                                '</td>' .
                                                '</tr>' .
                                                '</table>' .
@@ -739,8 +719,8 @@ class SpecialSearch extends SpecialPage {
                        &$html
                ) ) ) {
                        $html = "<li><div class='mw-search-result-heading'>" .
-                               "{$link} {$redirect} {$section} {$fileMatch}</div> {$extract}\n" .
-                               "<div class='mw-search-result-data'>{$size} - {$date}{$related}</div>" .
+                               "{$link} {$redirect} {$category} {$section} {$fileMatch}</div> {$extract}\n" .
+                               "<div class='mw-search-result-data'>{$size} - {$date}</div>" .
                                "</li>\n";
                }
 
@@ -915,10 +895,7 @@ class SpecialSearch extends SpecialPage {
                // be arranged nicely while still accommodating different screen widths
                $namespaceTables = '';
                for ( $i = 0; $i < $numRows; $i += 4 ) {
-                       $namespaceTables .= Xml::openElement(
-                               'table',
-                               array( 'cellpadding' => 0, 'cellspacing' => 0 )
-                       );
+                       $namespaceTables .= Xml::openElement( 'table' );
 
                        for ( $j = $i; $j < $i + 4 && $j < $numRows; $j++ ) {
                                $namespaceTables .= Xml::tags( 'tr', null, $rows[$j] );
@@ -1090,16 +1067,16 @@ class SpecialSearch extends SpecialPage {
                        'class' => 'mw-ui-input mw-ui-input-inline',
                ) ) . "\n";
                $out .= Html::hidden( 'fulltext', 'Search' ) . "\n";
-               $out .= Xml::submitButton(
+               $out .= Html::submitButton(
                        $this->msg( 'searchbutton' )->text(),
-                       array( 'class' => array( 'mw-ui-button', 'mw-ui-progressive' ) )
+                       array( 'class' => 'mw-ui-button mw-ui-progressive' ),
+                       array( 'mw-ui-progressive' )
                ) . "\n";
 
                // Results-info
                if ( $totalNum > 0 && $this->offset < $totalNum ) {
-                       $top = $this->msg( 'showingresultsheader' )
+                       $top = $this->msg( 'search-showingresults' )
                                ->numParams( $this->offset + 1, $this->offset + $resultsShown, $totalNum )
-                               ->params( wfEscapeWikiText( $term ) )
                                ->numParams( $resultsShown )
                                ->parse();
                        $out .= Xml::tags( 'div', array( 'class' => 'results-info' ), $top ) .
index 67c96a7..1bbc2f3 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup SpecialPage
  */
 class SpecialStatistics extends SpecialPage {
-       private $views, $edits, $good, $images, $total, $users,
+       private $edits, $good, $images, $total, $users,
                $activeUsers = 0;
 
        public function __construct() {
@@ -38,13 +38,11 @@ class SpecialStatistics extends SpecialPage {
        public function execute( $par ) {
                global $wgMemc;
 
-               $disableCounters = $this->getConfig()->get( 'DisableCounters' );
                $miserMode = $this->getConfig()->get( 'MiserMode' );
 
                $this->setHeaders();
                $this->getOutput()->addModuleStyles( 'mediawiki.special' );
 
-               $this->views = SiteStats::views();
                $this->edits = SiteStats::edits();
                $this->good = SiteStats::articles();
                $this->images = SiteStats::images();
@@ -53,12 +51,6 @@ class SpecialStatistics extends SpecialPage {
                $this->activeUsers = SiteStats::activeUsers();
                $this->hook = '';
 
-               # Staticic - views
-               $viewsStats = '';
-               if ( !$disableCounters ) {
-                       $viewsStats = $this->getViewsStats();
-               }
-
                # Set active user count
                if ( !$miserMode ) {
                        $key = wfMemcKey( 'sitestats', 'activeusers-updated' );
@@ -83,12 +75,6 @@ class SpecialStatistics extends SpecialPage {
 
                # Statistic - usergroups
                $text .= $this->getGroupStats();
-               $text .= $viewsStats;
-
-               # Statistic - popular pages
-               if ( !$disableCounters && !$miserMode ) {
-                       $text .= $this->getMostViewedPages();
-               }
 
                # Statistic - other
                $extraStats = array();
@@ -151,7 +137,7 @@ class SpecialStatistics extends SpecialPage {
                                        $this->getLanguage()->formatNum( $this->total ),
                                        array( 'class' => 'mw-statistics-pages' ),
                                        'statistics-pages-desc' ) .
-                               $this->formatRow( Linker::linkKnown( SpecialPage::getTitleFor( 'Listfiles' ),
+                               $this->formatRow( Linker::linkKnown( SpecialPage::getTitleFor( 'MediaStatistics' ),
                                        $this->msg( 'statistics-files' )->parse() ),
                                        $this->getLanguage()->formatNum( $this->images ),
                                        array( 'class' => 'mw-statistics-files' ) );
@@ -237,63 +223,6 @@ class SpecialStatistics extends SpecialPage {
                return $text;
        }
 
-       private function getViewsStats() {
-               return Xml::openElement( 'tr' ) .
-                       Xml::tags( 'th', array( 'colspan' => '2' ), $this->msg( 'statistics-header-views' )->parse() ) .
-                       Xml::closeElement( 'tr' ) .
-                               $this->formatRow( $this->msg( 'statistics-views-total' )->parse(),
-                                       $this->getLanguage()->formatNum( $this->views ),
-                                               array( 'class' => 'mw-statistics-views-total' ), 'statistics-views-total-desc' ) .
-                               $this->formatRow( $this->msg( 'statistics-views-peredit' )->parse(),
-                                       $this->getLanguage()->formatNum( sprintf( '%.2f', $this->edits ?
-                                               $this->views / $this->edits : 0 ) ),
-                                               array( 'class' => 'mw-statistics-views-peredit' ) );
-       }
-
-       private function getMostViewedPages() {
-               $text = '';
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select(
-                       'page',
-                       array(
-                               'page_namespace',
-                               'page_title',
-                               'page_counter',
-                       ),
-                       array(
-                               'page_is_redirect' => 0,
-                               'page_counter > 0',
-                       ),
-                       __METHOD__,
-                       array(
-                               'ORDER BY' => 'page_counter DESC',
-                               'LIMIT' => 10,
-                       )
-               );
-
-               if ( $res->numRows() > 0 ) {
-                       $text .= Xml::openElement( 'tr' );
-                       $text .= Xml::tags(
-                               'th',
-                               array( 'colspan' => '2' ),
-                               $this->msg( 'statistics-mostpopular' )->parse()
-                       );
-                       $text .= Xml::closeElement( 'tr' );
-
-                       foreach ( $res as $row ) {
-                               $title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
-
-                               if ( $title instanceof Title ) {
-                                       $text .= $this->formatRow( Linker::link( $title ),
-                                               $this->getLanguage()->formatNum( $row->page_counter ) );
-                               }
-                       }
-                       $res->free();
-               }
-
-               return $text;
-       }
-
        /**
         * Conversion of external statistics into an internal representation
         * Following a ([<header-message>][<item-message>] = number) pattern
index 552031f..7684c05 100644 (file)
@@ -56,6 +56,71 @@ class SpecialTrackingCategories extends SpecialPage {
                        </tr></thead>"
                );
 
+               $trackingCategories = $this->prepareTrackingCategoriesData();
+
+               $batch = new LinkBatch();
+               foreach ( $trackingCategories as $catMsg => $data ) {
+                       $batch->addObj( $data['msg'] );
+                       foreach ( $data['cats'] as $catTitle ) {
+                               $batch->addObj( $catTitle );
+                       }
+               }
+               $batch->execute();
+
+               foreach ( $trackingCategories as $catMsg => $data ) {
+                       $allMsgs = array();
+                       $catDesc = $catMsg . '-desc';
+
+                       $catMsgTitleText = Linker::link(
+                               $data['msg'],
+                               htmlspecialchars( $catMsg )
+                       );
+
+                       foreach ( $data['cats'] as $catTitle ) {
+                               $catTitleText = Linker::link(
+                                       $catTitle,
+                                       htmlspecialchars( $catTitle->getText() )
+                               );
+                               $allMsgs[] = $catTitleText;
+                       }
+
+                       # Extra message, when no category was found
+                       if ( !count( $allMsgs ) ) {
+                               $allMsgs[] = $this->msg( 'trackingcategories-disabled' )->parse();
+                       }
+
+                       /*
+                        * Show category description if it exists as a system message
+                        * as category-name-desc
+                        */
+                       $descMsg = $this->msg( $catDesc );
+                       if ( $descMsg->isBlank() ) {
+                               $descMsg = $this->msg( 'trackingcategories-nodesc' );
+                       }
+
+                       $this->getOutput()->addHTML(
+                               Html::openElement( 'tr' ) .
+                               Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-name' ) ) .
+                                       $this->getLanguage()->commaList( array_unique( $allMsgs ) ) .
+                               Html::closeElement( 'td' ) .
+                               Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-msg' ) ) .
+                                       $catMsgTitleText .
+                               Html::closeElement( 'td' ) .
+                               Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-desc' ) ) .
+                                       $descMsg->parse() .
+                               Html::closeElement( 'td' ) .
+                               Html::closeElement( 'tr' )
+                       );
+               }
+               $this->getOutput()->addHTML( Html::closeElement( 'table' ) );
+       }
+
+       /**
+        * Read the global and extract title objects from the corresponding messages
+        * @return array Array( 'msg' => Title, 'cats' => Title[] )
+        */
+       private function prepareTrackingCategoriesData() {
+               $trackingCategories = array();
                foreach ( $this->getConfig()->get( 'TrackingCategories' ) as $catMsg ) {
                        /*
                         * Check if the tracking category varies by namespace
@@ -63,16 +128,11 @@ class SpecialTrackingCategories extends SpecialPage {
                         * If it does vary, show pages considering all namespaces
                         */
                        $msgObj = $this->msg( $catMsg )->inContentLanguage();
-                       $allMsgs = array();
-                       $catDesc = $catMsg . '-desc';
+                       $allCats = array();
                        $catMsgTitle = Title::makeTitleSafe( NS_MEDIAWIKI, $catMsg );
                        if ( !$catMsgTitle ) {
                                continue;
                        }
-                       $catMsgTitleText = Linker::link(
-                               $catMsgTitle,
-                               htmlspecialchars( $catMsg )
-                       );
 
                        // Match things like {{NAMESPACE}} and {{NAMESPACENUMBER}}.
                        // False positives are ok, this is just an efficiency shortcut
@@ -88,11 +148,7 @@ class SpecialTrackingCategories extends SpecialPage {
                                        if ( $catName !== '-' ) {
                                                $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
                                                if ( $catTitle ) {
-                                                       $catTitleText = Linker::link(
-                                                               $catTitle,
-                                                               htmlspecialchars( $catName )
-                                                       );
-                                                       $allMsgs[] = $catTitleText;
+                                                       $allCats[] = $catTitle;
                                                }
                                        }
                                }
@@ -102,44 +158,17 @@ class SpecialTrackingCategories extends SpecialPage {
                                if ( $catName !== '-' ) {
                                        $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
                                        if ( $catTitle ) {
-                                               $catTitleText = Linker::link(
-                                                       $catTitle,
-                                                       htmlspecialchars( $catName )
-                                               );
-                                               $allMsgs[] = $catTitleText;
+                                               $allCats[] = $catTitle;
                                        }
                                }
                        }
-
-                       # Extra message, when no category was found
-                       if ( !count( $allMsgs ) ) {
-                               $allMsgs[] = $this->msg( 'trackingcategories-disabled' )->parse();
-                       }
-
-                       /*
-                        * Show category description if it exists as a system message
-                        * as category-name-desc
-                        */
-                       $descMsg = $this->msg( $catDesc );
-                       if ( $descMsg->isBlank() ) {
-                               $descMsg = $this->msg( 'trackingcategories-nodesc' );
-                       }
-
-                       $this->getOutput()->addHTML(
-                               Html::openElement( 'tr' ) .
-                               Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-name' ) ) .
-                                       $this->getLanguage()->commaList( array_unique( $allMsgs ) ) .
-                               Html::closeElement( 'td' ) .
-                               Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-msg' ) ) .
-                                       $catMsgTitleText .
-                               Html::closeElement( 'td' ) .
-                               Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-desc' ) ) .
-                                       $descMsg->parse() .
-                               Html::closeElement( 'td' ) .
-                               Html::closeElement( 'tr' )
+                       $trackingCategories[$catMsg] = array(
+                               'cats' => $allCats,
+                               'msg' => $catMsgTitle,
                        );
                }
-               $this->getOutput()->addHTML( Html::closeElement( 'table' ) );
+
+               return $trackingCategories;
        }
 
        protected function getGroupName() {
index 96e4dbf..244b889 100644 (file)
@@ -63,8 +63,10 @@ class SpecialUnblock extends SpecialPage {
 
                if ( $form->show() ) {
                        switch ( $this->type ) {
-                               case Block::TYPE_USER:
                                case Block::TYPE_IP:
+                                       $out->addWikiMsg( 'unblocked-ip', wfEscapeWikiText( $this->target ) );
+                                       break;
+                               case Block::TYPE_USER:
                                        $out->addWikiMsg( 'unblocked', wfEscapeWikiText( $this->target ) );
                                        break;
                                case Block::TYPE_RANGE:
@@ -111,8 +113,14 @@ class SpecialUnblock extends SpecialPage {
                                $fields['Target']['default'] = $target;
                                $fields['Target']['type'] = 'hidden';
                                switch ( $type ) {
-                                       case Block::TYPE_USER:
                                        case Block::TYPE_IP:
+                                               $fields['Name']['default'] = Linker::linkKnown(
+                                                       SpecialPage::getTitleFor( 'Contributions', $target->getName() ),
+                                                       $target->getName()
+                                               );
+                                               $fields['Name']['raw'] = true;
+                                               break;
+                                       case Block::TYPE_USER:
                                                $fields['Name']['default'] = Linker::link(
                                                        $target->getUserPage(),
                                                        $target->getName()
index 8acf8a2..a1f48e9 100644 (file)
@@ -99,7 +99,7 @@ class PageArchive {
         * @return bool|ResultWrapper
         */
        protected static function listPages( $dbr, $condition ) {
-               return $dbr->resultObject( $dbr->select(
+               return $dbr->select(
                        array( 'archive' ),
                        array(
                                'ar_namespace',
@@ -113,7 +113,7 @@ class PageArchive {
                                'ORDER BY' => array( 'ar_namespace', 'ar_title' ),
                                'LIMIT' => 100,
                        )
-               ) );
+               );
        }
 
        /**
@@ -152,15 +152,13 @@ class PageArchive {
                        $options
                );
 
-               $res = $dbr->select( $tables,
+               return $dbr->select( $tables,
                        $fields,
                        $conds,
                        __METHOD__,
                        $options,
                        $join_conds
                );
-
-               return $dbr->resultObject( $res );
        }
 
        /**
@@ -177,15 +175,13 @@ class PageArchive {
                }
 
                $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select(
+               return $dbr->select(
                        'filearchive',
                        ArchivedFile::selectFields(),
                        array( 'fa_name' => $this->title->getDBkey() ),
                        __METHOD__,
                        array( 'ORDER BY' => 'fa_timestamp DESC' )
                );
-
-               return $dbr->resultObject( $res );
        }
 
        /**
@@ -532,9 +528,8 @@ class PageArchive {
                        __METHOD__,
                        /* options */ array( 'ORDER BY' => 'ar_timestamp' )
                );
-               $ret = $dbw->resultObject( $result );
-               $rev_count = $dbw->numRows( $result );
 
+               $rev_count = $result->numRows();
                if ( !$rev_count ) {
                        wfDebug( __METHOD__ . ": no revisions to restore\n" );
 
@@ -544,10 +539,10 @@ class PageArchive {
                        return $status;
                }
 
-               $ret->seek( $rev_count - 1 ); // move to last
-               $row = $ret->fetchObject(); // get newest archived rev
+               $result->seek( $rev_count - 1 ); // move to last
+               $row = $result->fetchObject(); // get newest archived rev
                $oldPageId = (int)$row->ar_page_id; // pass this to ArticleUndelete hook
-               $ret->seek( 0 ); // move back
+               $result->seek( 0 ); // move back
 
                // grab the content to check consistency with global state before restoring the page.
                $revision = Revision::newFromArchiveRow( $row,
@@ -589,7 +584,7 @@ class PageArchive {
                $revision = null;
                $restored = 0;
 
-               foreach ( $ret as $row ) {
+               foreach ( $result as $row ) {
                        // Check for key dupes due to shitty archive integrity.
                        if ( $row->ar_rev_id ) {
                                $exists = $dbw->selectField( 'revision', '1',
@@ -720,10 +715,10 @@ class SpecialUndelete extends SpecialPage {
                $this->mUnsuppress = $request->getVal( 'wpUnsuppress' ) && $user->isAllowed( 'suppressrevision' );
                $this->mToken = $request->getVal( 'token' );
 
-               if ( $user->isAllowed( 'undelete' ) && !$user->isBlocked() ) {
+               if ( $this->isAllowed( 'undelete' ) && !$user->isBlocked() ) {
                        $this->mAllowed = true; // user can restore
                        $this->mCanView = true; // user can view content
-               } elseif ( $user->isAllowed( 'deletedtext' ) ) {
+               } elseif ( $this->isAllowed( 'deletedtext' ) ) {
                        $this->mAllowed = false; // user cannot restore
                        $this->mCanView = true; // user can view content
                        $this->mRestore = false;
@@ -752,14 +747,35 @@ class SpecialUndelete extends SpecialPage {
                }
        }
 
+       /**
+        * Checks whether a user is allowed the permission for the
+        * specific title if one is set.
+        *
+        * @param string $permission
+        * @param User $user
+        * @return bool
+        */
+       private function isAllowed( $permission, User $user = null ) {
+               $user = $user ? : $this->getUser();
+               if ( $this->mTargetObj !== null ) {
+                       return $this->mTargetObj->userCan( $permission, $user );
+               } else {
+                       return $user->isAllowed( $permission );
+               }
+       }
+
+       function userCanExecute( User $user ) {
+               return $this->isAllowed( $this->mRestriction, $user );
+       }
+
        function execute( $par ) {
-               $this->checkPermissions();
                $user = $this->getUser();
 
                $this->setHeaders();
                $this->outputHeader();
 
                $this->loadRequest( $par );
+               $this->checkPermissions(); // Needs to be after mTargetObj is set
 
                $out = $this->getOutput();
 
@@ -1458,12 +1474,14 @@ class SpecialUndelete extends SpecialPage {
                $ts = wfTimestamp( TS_MW, $row->fa_timestamp );
                $user = $this->getUser();
 
-               if ( $this->mAllowed && $row->fa_storage_key ) {
-                       $checkBox = Xml::check( 'fileid' . $row->fa_id );
+               $checkBox = '';
+               if ( $this->mCanView && $row->fa_storage_key ) {
+                       if ( $this->mAllowed ) {
+                               $checkBox = Xml::check( 'fileid' . $row->fa_id );
+                       }
                        $key = urlencode( $row->fa_storage_key );
                        $pageLink = $this->getFileLink( $file, $this->getPageTitle(), $ts, $key );
                } else {
-                       $checkBox = '';
                        $pageLink = $this->getLanguage()->userTimeAndDate( $ts, $user );
                }
                $userLink = $this->getFileUser( $file );
@@ -1475,8 +1493,8 @@ class SpecialUndelete extends SpecialPage {
                $comment = $this->getFileComment( $file );
 
                // Add show/hide deletion links if available
-               $canHide = $user->isAllowed( 'deleterevision' );
-               if ( $canHide || ( $file->getVisibility() && $user->isAllowed( 'deletedhistory' ) ) ) {
+               $canHide = $this->isAllowed( 'deleterevision' );
+               if ( $canHide || ( $file->getVisibility() && $this->isAllowed( 'deletedhistory' ) ) ) {
                        if ( !$file->userCan( File::DELETED_RESTRICTED, $user ) ) {
                                // Revision was hidden from sysops
                                $revdlink = Linker::revDeleteLinkDisabled( $canHide );
@@ -1610,7 +1628,9 @@ class SpecialUndelete extends SpecialPage {
        }
 
        function undelete() {
-               if ( $this->getConfig()->get( 'UploadMaintenance' ) && $this->mTargetObj->getNamespace() == NS_FILE ) {
+               if ( $this->getConfig()->get( 'UploadMaintenance' )
+                       && $this->mTargetObj->getNamespace() == NS_FILE
+               ) {
                        throw new ErrorPageError( 'undelete-error', 'filedelete-maintenance' );
                }
 
index 5c5026c..77ad9aa 100644 (file)
@@ -485,6 +485,7 @@ class SpecialUpload extends SpecialPage {
         * @param string $copyStatus
         * @param string $source
         * @return string
+        * @todo Use Config obj instead of globals
         */
        public static function getInitialPageText( $comment = '', $license = '',
                $copyStatus = '', $source = ''
@@ -568,8 +569,6 @@ class SpecialUpload extends SpecialPage {
         * @throws MWException
         */
        protected function processVerificationError( $details ) {
-               global $wgFileExtensions;
-
                switch ( $details['status'] ) {
 
                        /** Statuses that only require name changing **/
@@ -604,7 +603,7 @@ class SpecialUpload extends SpecialPage {
                                } else {
                                        $msg->params( $details['finalExt'] );
                                }
-                               $extensions = array_unique( $wgFileExtensions );
+                               $extensions = array_unique( $this->getConfig()->get( 'FileExtensions' ) );
                                $msg->params( $this->getLanguage()->commaList( $extensions ),
                                        count( $extensions ) );
 
@@ -739,6 +738,18 @@ class SpecialUpload extends SpecialPage {
        protected function getGroupName() {
                return 'media';
        }
+
+       /**
+        * Should we rotate images in the preview on Special:Upload.
+        *
+        * This controls js: mw.config.get( 'wgFileCanRotate' )
+        *
+        * @todo What about non-BitmapHandler handled files?
+        */
+       public static function rotationEnabled() {
+               $bitmapHandler = new BitmapHandler();
+               return $bitmapHandler->autoRotateEnabled();
+       }
 }
 
 /**
@@ -822,8 +833,6 @@ class UploadForm extends HTMLForm {
         * @return array Descriptor array
         */
        protected function getSourceSection() {
-               global $wgCopyUploadsFromSpecialUpload;
-
                if ( $this->mSessionKey ) {
                        return array(
                                'SessionKey' => array(
@@ -839,7 +848,7 @@ class UploadForm extends HTMLForm {
 
                $canUploadByUrl = UploadFromUrl::isEnabled()
                        && ( UploadFromUrl::isAllowed( $this->getUser() ) === true )
-                       && $wgCopyUploadsFromSpecialUpload;
+                       && $this->getConfig()->get( 'CopyUploadsFromSpecialUpload' );
                $radio = $canUploadByUrl;
                $selectedSourceType = strtolower( $this->getRequest()->getText( 'wpSourceType', 'File' ) );
 
@@ -894,7 +903,7 @@ class UploadForm extends HTMLForm {
                                        $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['url'] )
                                )->parse() .
                                        $this->msg( 'word-separator' )->escaped() .
-                                       $this->msg( 'upload_source_url' )->escaped(),
+                                       $this->msg( 'upload_source_url' )->parse(),
                                'checked' => $selectedSourceType == 'url',
                        );
                }
@@ -918,17 +927,18 @@ class UploadForm extends HTMLForm {
        protected function getExtensionsMessage() {
                # Print a list of allowed file extensions, if so configured.  We ignore
                # MIME type here, it's incomprehensible to most people and too long.
-               global $wgCheckFileExtensions, $wgStrictFileExtensions,
-                       $wgFileExtensions, $wgFileBlacklist;
+               $config = $this->getConfig();
 
-               if ( $wgCheckFileExtensions ) {
-                       if ( $wgStrictFileExtensions ) {
+               if ( $config->get( 'CheckFileExtensions' ) ) {
+                       if ( $config->get( 'StrictFileExtensions' ) ) {
                                # Everything not permitted is banned
                                $extensionsList =
                                        '<div id="mw-upload-permitted">' .
                                        $this->msg(
                                                'upload-permitted',
-                                               $this->getContext()->getLanguage()->commaList( array_unique( $wgFileExtensions ) )
+                                               $this->getContext()->getLanguage()->commaList(
+                                                       array_unique( $config->get( 'FileExtensions' ) )
+                                               )
                                        )->parseAsBlock() .
                                        "</div>\n";
                        } else {
@@ -937,13 +947,17 @@ class UploadForm extends HTMLForm {
                                        '<div id="mw-upload-preferred">' .
                                                $this->msg(
                                                        'upload-preferred',
-                                                       $this->getContext()->getLanguage()->commaList( array_unique( $wgFileExtensions ) )
+                                                       $this->getContext()->getLanguage()->commaList(
+                                                               array_unique( $config->get( 'FileExtensions' ) )
+                                                       )
                                                )->parseAsBlock() .
                                        "</div>\n" .
                                        '<div id="mw-upload-prohibited">' .
                                                $this->msg(
                                                        'upload-prohibited',
-                                                       $this->getContext()->getLanguage()->commaList( array_unique( $wgFileBlacklist ) )
+                                                       $this->getContext()->getLanguage()->commaList(
+                                                               array_unique( $config->get( 'FileBlacklist' ) )
+                                                       )
                                                )->parseAsBlock() .
                                        "</div>\n";
                        }
@@ -962,6 +976,7 @@ class UploadForm extends HTMLForm {
         * @return array Descriptor array
         */
        protected function getDescriptionSection() {
+               $config = $this->getConfig();
                if ( $this->mSessionKey ) {
                        $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash();
                        try {
@@ -1034,8 +1049,7 @@ class UploadForm extends HTMLForm {
                        );
                }
 
-               global $wgUseCopyrightUpload;
-               if ( $wgUseCopyrightUpload ) {
+               if ( $config->get( 'UseCopyrightUpload' ) ) {
                        $descriptor['UploadCopyStatus'] = array(
                                'type' => 'text',
                                'section' => 'description',
@@ -1110,11 +1124,11 @@ class UploadForm extends HTMLForm {
         * Add upload JS to the OutputPage
         */
        protected function addUploadJS() {
-               global $wgUseAjax, $wgAjaxUploadDestCheck, $wgAjaxLicensePreview,
-                       $wgEnableAPI, $wgStrictFileExtensions;
+               $config = $this->getConfig();
 
-               $useAjaxDestCheck = $wgUseAjax && $wgAjaxUploadDestCheck;
-               $useAjaxLicensePreview = $wgUseAjax && $wgAjaxLicensePreview && $wgEnableAPI;
+               $useAjaxDestCheck = $config->get( 'UseAjax' ) && $config->get( 'AjaxUploadDestCheck' );
+               $useAjaxLicensePreview = $config->get( 'UseAjax' ) &&
+                       $config->get( 'AjaxLicensePreview' ) && $config->get( 'EnableAPI' );
                $this->mMaxUploadSize['*'] = UploadBase::getMaxUploadSize();
 
                $scriptVars = array(
@@ -1125,9 +1139,10 @@ class UploadForm extends HTMLForm {
                                // the wpDestFile textbox
                                $this->mDestFile === '',
                        'wgUploadSourceIds' => $this->mSourceIds,
-                       'wgStrictFileExtensions' => $wgStrictFileExtensions,
+                       'wgStrictFileExtensions' => $config->get( 'StrictFileExtensions' ),
                        'wgCapitalizeUploads' => MWNamespace::isCapitalized( NS_FILE ),
                        'wgMaxUploadSize' => $this->mMaxUploadSize,
+                       'wgFileCanRotate' => SpecialUpload::rotationEnabled(),
                );
 
                $out = $this->getOutput();
@@ -1135,8 +1150,7 @@ class UploadForm extends HTMLForm {
 
                $out->addModules( array(
                        'mediawiki.action.edit', // For <charinsert> support
-                       'mediawiki.legacy.upload', // Old form stuff...
-                       'mediawiki.special.upload', // Newer extras for thumbnail preview.
+                       'mediawiki.special.upload', // Extras for thumbnail and license preview.
                ) );
        }
 
index afa12a0..b6a3be2 100644 (file)
@@ -41,6 +41,7 @@ class LoginForm extends SpecialPage {
        const USER_BLOCKED = 11;
        const NEED_TOKEN = 12;
        const WRONG_TOKEN = 13;
+       const USER_MIGRATED = 14;
 
        /**
         * Valid error and warning messages
@@ -104,9 +105,27 @@ class LoginForm extends SpecialPage {
         * @param WebRequest $request
         */
        public function __construct( $request = null ) {
+               global $wgUseMediaWikiUIEverywhere;
                parent::__construct( 'Userlogin' );
 
                $this->mOverrideRequest = $request;
+               // Override UseMediaWikiEverywhere to true, to force login and create form to use mw ui
+               $wgUseMediaWikiUIEverywhere = true;
+       }
+
+       /**
+        * Returns an array of all valid error messages.
+        *
+        * @return array
+        */
+       public static function getValidErrorMessages() {
+               static $messages = null;
+               if ( !$messages ) {
+                       $messages = self::$validErrorMessages;
+                       wfRunHooks( 'LoginFormValidErrorMessages', array( &$messages ) );
+               }
+
+               return $messages;
        }
 
        /**
@@ -171,13 +190,13 @@ class LoginForm extends SpecialPage {
 
                // Only show valid error or warning messages.
                if ( $entryError->exists()
-                       && in_array( $entryError->getKey(), self::$validErrorMessages )
+                       && in_array( $entryError->getKey(), self::getValidErrorMessages() )
                ) {
                        $this->mEntryErrorType = 'error';
                        $this->mEntryError = $entryError->rawParams( $loginreqlink )->escaped();
 
                } elseif ( $entryWarning->exists()
-                       && in_array( $entryWarning->getKey(), self::$validErrorMessages )
+                       && in_array( $entryWarning->getKey(), self::getValidErrorMessages() )
                ) {
                        $this->mEntryErrorType = 'warning';
                        $this->mEntryError = $entryWarning->rawParams( $loginreqlink )->escaped();
@@ -237,11 +256,19 @@ class LoginForm extends SpecialPage {
                }
                $this->setHeaders();
 
-               // In the case where the user is already logged in, do not show the login page.
-               // The use case scenario for this is when a user opens a large number of tabs, is
-               // redirected to the login page on all of them, and then logs in on one, expecting
-               // all the others to work properly.
-               if ( $this->mType !== 'signup' && !$this->mPosted && $this->getUser()->isLoggedIn() ) {
+               // In the case where the user is already logged in, and was redirected to the login form from a
+               // page that requires login, do not show the login page. The use case scenario for this is when
+               // a user opens a large number of tabs, is redirected to the login page on all of them, and then
+               // logs in on one, expecting all the others to work properly.
+               //
+               // However, do show the form if it was visited intentionally (no 'returnto' is present). People
+               // who often switch between several accounts have grown accustomed to this behavior.
+               if (
+                       $this->mType !== 'signup' &&
+                       !$this->mPosted &&
+                       $this->getUser()->isLoggedIn() &&
+                       ( $this->mReturnTo !== '' || $this->mReturnToQuery !== '' )
+               ) {
                        $this->successfulLogin();
                }
 
@@ -697,6 +724,14 @@ class LoginForm extends SpecialPage {
                }
 
                $u = User::newFromName( $this->mUsername );
+
+               // Give extensions a way to indicate the username has been updated,
+               // rather than telling the user the account doesn't exist.
+               if ( !wfRunHooks( 'LoginUserMigrated', array( $u, &$msg ) ) ) {
+                       $this->mAbortLoginErrorMsg = $msg;
+                       return self::USER_MIGRATED;
+               }
+
                if ( !( $u instanceof User ) || !User::isUsableName( $u->getName() ) ) {
                        return self::ILLEGAL;
                }
@@ -996,6 +1031,15 @@ class LoginForm extends SpecialPage {
                                $this->mainLoginForm( $this->msg( $error,
                                                wfEscapeWikiText( $this->mUsername ) )->text() );
                                break;
+                       case self::USER_MIGRATED:
+                               $error = $this->mAbortLoginErrorMsg ?: 'login-migrated-generic';
+                               $params = array();
+                               if ( is_array( $error ) ) {
+                                       $error = array_shift( $this->mAbortLoginErrorMsg );
+                                       $params = $this->mAbortLoginErrorMsg;
+                               }
+                               $this->mainLoginForm( $this->msg( $error, $params )->text() );
+                               break;
                        default:
                                throw new MWException( 'Unhandled case value' );
                }
@@ -1397,16 +1441,9 @@ class LoginForm extends SpecialPage {
                }
 
                $template->set( 'secureLoginUrl', $this->mSecureLoginUrl );
-               // Use loginend-https for HTTPS requests if it's not blank, loginend otherwise
-               // Ditto for signupend.  New forms use neither.
+               // Use signupend-https for HTTPS requests if it's not blank, signupend otherwise
                $usingHTTPS = $this->mRequest->getProtocol() == 'https';
-               $loginendHTTPS = $this->msg( 'loginend-https' );
                $signupendHTTPS = $this->msg( 'signupend-https' );
-               if ( $usingHTTPS && !$loginendHTTPS->isBlank() ) {
-                       $template->set( 'loginend', $loginendHTTPS->parse() );
-               } else {
-                       $template->set( 'loginend', $this->msg( 'loginend' )->parse() );
-               }
                if ( $usingHTTPS && !$signupendHTTPS->isBlank() ) {
                        $template->set( 'signupend', $signupendHTTPS->parse() );
                } else {
index cefdad0..6ca57aa 100644 (file)
@@ -415,6 +415,8 @@ class UserrightsPage extends SpecialPage {
         * Output a form to allow searching for a user
         */
        function switchForm() {
+               $this->getOutput()->addModules( 'mediawiki.userSuggest' );
+
                $this->getOutput()->addHTML(
                        Html::openElement(
                                'form',
@@ -433,7 +435,10 @@ class UserrightsPage extends SpecialPage {
                                'username',
                                30,
                                str_replace( '_', ' ', $this->mTarget ),
-                               array( 'autofocus' => true )
+                               array(
+                                       'autofocus' => true,
+                                       'class' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
+                               )
                        ) . ' ' .
                        Xml::submitButton( $this->msg( 'editusergroup' )->text() ) .
                        Html::closeElement( 'fieldset' ) .
index 4b1abac..34f434f 100644 (file)
@@ -191,8 +191,8 @@ class SpecialVersion extends SpecialPage {
                        'Alexandre Emsenhuber', 'Siebrand Mazeland', 'Chad Horohoe',
                        'Roan Kattouw', 'Trevor Parscal', 'Bryan Tong Minh', 'Sam Reed',
                        'Victor Vasiliev', 'Rotem Liss', 'Platonides', 'Antoine Musso',
-                       'Timo Tijhof', 'Daniel Kinzler', 'Jeroen De Dauw', $othersLink,
-                       $translatorsLink
+                       'Timo Tijhof', 'Daniel Kinzler', 'Jeroen De Dauw', 'Brad Jorsch',
+                       $othersLink, $translatorsLink
                );
 
                return wfMessage( 'version-poweredby-credits', MWTimestamp::getLocalInstance()->format( 'Y' ),
@@ -204,7 +204,7 @@ class SpecialVersion extends SpecialPage {
         *
         * @return string
         */
-       static function softwareInformation() {
+       public static function softwareInformation() {
                $dbr = wfGetDB( DB_SLAVE );
 
                // Put the software in an array of form 'name' => 'version'. All messages should
@@ -212,9 +212,11 @@ class SpecialVersion extends SpecialPage {
                // wikimarkup can be used.
                $software = array();
                $software['[https://www.mediawiki.org/ MediaWiki]'] = self::getVersionLinked();
-               $phpKey = wfIsHHVM() ? '[http://hhvm.com/ HHVM]' :
-                       '[https://php.net/ PHP]';
-               $software[$phpKey] = PHP_VERSION . " (" . PHP_SAPI . ")";
+               if ( wfIsHHVM() ) {
+                       $software['[http://hhvm.com/ HHVM]'] = HHVM_VERSION . " (" . PHP_SAPI . ")";
+               } else {
+                       $software['[https://php.net/ PHP]'] = PHP_VERSION . " (" . PHP_SAPI . ")";
+               }
                $software[$dbr->getSoftwareLink()] = $dbr->getServerInfo();
 
                // Allow a hook to add/remove items.
@@ -426,7 +428,7 @@ class SpecialVersion extends SpecialPage {
         *
         * @return string Wikitext
         */
-       function getExtensionCredits() {
+       public function getExtensionCredits() {
                global $wgExtensionCredits;
 
                if (
@@ -480,7 +482,7 @@ class SpecialVersion extends SpecialPage {
         *
         * @return string Wikitext
         */
-       function getSkinCredits() {
+       public function getSkinCredits() {
                global $wgExtensionCredits;
                if ( !isset( $wgExtensionCredits['skin'] ) || count( $wgExtensionCredits['skin'] ) === 0 ) {
                        return '';
@@ -523,8 +525,17 @@ class SpecialVersion extends SpecialPage {
                        );
 
                        array_walk( $tags, function ( &$value ) {
-                               $value = '&lt;' . htmlspecialchars( $value ) . '&gt;';
+                               // Bidirectional isolation improves readability in RTL wikis
+                               $value = Html::element(
+                                       'bdi',
+                                       // Prevent < and > from slipping to another line
+                                       array(
+                                               'style' => 'white-space: nowrap;',
+                                       ),
+                                       "<$value>"
+                               );
                        } );
+
                        $out .= $this->listToText( $tags );
                } else {
                        $out = '';
@@ -591,7 +602,7 @@ class SpecialVersion extends SpecialPage {
         * @param array $b
         * @return int
         */
-       function compare( $a, $b ) {
+       public function compare( $a, $b ) {
                if ( $a['name'] === $b['name'] ) {
                        return 0;
                } else {
@@ -618,7 +629,7 @@ class SpecialVersion extends SpecialPage {
         *
         * @return string Raw HTML
         */
-       function getCreditsForExtension( array $extension ) {
+       public function getCreditsForExtension( array $extension ) {
                $out = $this->getOutput();
 
                // We must obtain the information for all the bits and pieces!
@@ -741,13 +752,19 @@ class SpecialVersion extends SpecialPage {
                        $licenseLink = Linker::link(
                                $this->getPageTitle( 'License/' . $extensionName ),
                                $out->parseInline( $extension['license-name'] ),
-                               array( 'class' => 'mw-version-ext-license' )
+                               array(
+                                       'class' => 'mw-version-ext-license',
+                                       'dir' => 'auto',
+                               )
                        );
                } elseif ( $this->getExtLicenseFileName( $extensionPath ) ) {
                        $licenseLink = Linker::link(
                                $this->getPageTitle( 'License/' . $extensionName ),
                                $this->msg( 'version-ext-license' ),
-                               array( 'class' => 'mw-version-ext-license' )
+                               array(
+                                       'class' => 'mw-version-ext-license',
+                                       'dir' => 'auto',
+                               )
                        );
                }
 
@@ -791,7 +808,7 @@ class SpecialVersion extends SpecialPage {
                $html .= Html::rawElement( 'td', array( 'class' => 'mw-version-ext-description' ), $description );
                $html .= Html::rawElement( 'td', array( 'class' => 'mw-version-ext-authors' ), $authors );
 
-               $html .= Html::closeElement( 'td' );
+               $html .= Html::closeElement( 'tr' );
 
                return $html;
        }
@@ -903,7 +920,7 @@ class SpecialVersion extends SpecialPage {
         *
         * @return string HTML fragment
         */
-       function listAuthors( $authors, $extName, $extDir ) {
+       public function listAuthors( $authors, $extName, $extDir ) {
                $hasOthers = false;
 
                $list = array();
@@ -1006,7 +1023,7 @@ class SpecialVersion extends SpecialPage {
         *
         * @return string
         */
-       function listToText( $list, $sort = true ) {
+       public function listToText( $list, $sort = true ) {
                if ( !count( $list ) ) {
                        return '';
                }
@@ -1186,7 +1203,7 @@ class SpecialVersion extends SpecialPage {
                $language = $this->getLanguage();
                $thAttribures = array(
                        'dir' => $language->getDir(),
-                       'lang' => $language->getCode()
+                       'lang' => $language->getHtmlCode()
                );
                $out = Html::element(
                                'h2',
index 8269b01..16127d9 100644 (file)
@@ -93,6 +93,18 @@ class WantedFilesPage extends WantedQueryPage {
                return true;
        }
 
+       /**
+        * Does the file exist?
+        *
+        * Use wfFindFile so we still think file namespace pages without
+        * files are missing, but valid file redirects and foreign files are ok.
+        *
+        * @return boolean
+        */
+       protected function existenceCheck( Title $title ) {
+               return (bool)wfFindFile( $title );
+       }
+
        function getQueryInfo() {
                return array(
                        'tables' => array(
index 8f2f86b..421840f 100644 (file)
@@ -288,7 +288,9 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                );
        }
 
-       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 )
                        && wfRunHooks(
                                'SpecialWatchlistQuery',
@@ -367,7 +369,9 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                                $updated = false;
                        }
 
-                       if ( $this->getConfig()->get( 'RCShowWatchingUsers' ) && $user->getOption( 'shownumberswatching' ) ) {
+                       if ( $this->getConfig()->get( 'RCShowWatchingUsers' )
+                               && $user->getOption( 'shownumberswatching' )
+                       ) {
                                $rc->numberofWatchingusers = $dbr->selectField( 'watchlist',
                                        'COUNT(*)',
                                        array(
@@ -503,7 +507,9 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                        $form .= $this->msg( 'nowatchlist' )->parse() . "\n";
                } else {
                        $form .= $this->msg( 'watchlist-details' )->numParams( $numItems )->parse() . "\n";
-                       if ( $this->getConfig()->get( 'EnotifWatchlist' ) && $user->getOption( 'enotifwatchlistpages' ) ) {
+                       if ( $this->getConfig()->get( 'EnotifWatchlist' )
+                               && $user->getOption( 'enotifwatchlistpages' )
+                       ) {
                                $form .= $this->msg( 'wlheader-enotif' )->parse() . "\n";
                        }
                        if ( $showUpdatedMarker ) {
@@ -562,12 +568,10 @@ class SpecialWatchlist extends ChangesListSpecialPage {
 
        protected function daysLink( $d, $options = array() ) {
                $options['days'] = $d;
-               $message = $d ? $this->getLanguage()->formatNum( $d )
-                       : $this->msg( 'watchlistall2' )->escaped();
 
                return Linker::linkKnown(
                        $this->getPageTitle(),
-                       $message,
+                       $this->getLanguage()->formatNum( $d ),
                        array(),
                        $options
                );
@@ -581,8 +585,11 @@ class SpecialWatchlist extends ChangesListSpecialPage {
         * @return string
         */
        protected function cutoffLinks( $days, $options = array() ) {
+               global $wgRCMaxAge;
+               $watchlistMaxDays = ceil( $wgRCMaxAge / ( 3600 * 24 ) );
+
                $hours = array( 1, 2, 6, 12 );
-               $days = array( 1, 3, 7 );
+               $days = array( 1, 3, 7, $watchlistMaxDays );
                $i = 0;
                foreach ( $hours as $h ) {
                        $hours[$i++] = $this->hoursLink( $h, $options );
@@ -594,8 +601,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
 
                return $this->msg( 'wlshowlast' )->rawParams(
                        $this->getLanguage()->pipeList( $hours ),
-                       $this->getLanguage()->pipeList( $days ),
-                       $this->daysLink( 0, $options ) )->parse();
+                       $this->getLanguage()->pipeList( $days ) )->parse();
        }
 
        /**
index 7dc6da1..e373cff 100644 (file)
@@ -431,9 +431,9 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
 
                $f .= Xml::fieldset( $this->msg( 'whatlinkshere' )->text() );
 
-               # Target input
+               # Target input (.mw-searchInput enables suggestions)
                $f .= Xml::inputLabel( $this->msg( 'whatlinkshere-page' )->text(), 'target',
-                       'mw-whatlinkshere-target', 40, $target );
+                       'mw-whatlinkshere-target', 40, $target, array( 'class' => 'mw-searchInput' ) );
 
                $f .= ' ';
 
index 33b2400..5b88dfd 100644 (file)
@@ -72,7 +72,7 @@ if ( !function_exists( 'session_name' ) ) {
                </style>
        </head>
        <body>
-               <img src="<?php echo htmlspecialchars( $path ) ?>skins/common/images/mediawiki.png" alt='The MediaWiki logo' />
+               <img src="<?php echo htmlspecialchars( $path ) ?>resources/assets/mediawiki.png" alt='The MediaWiki logo' />
 
                <h1>MediaWiki <?php echo htmlspecialchars( $wgVersion ) ?></h1>
                <div class='error'>
@@ -81,9 +81,9 @@ if ( !function_exists( 'session_name' ) ) {
                        <p>
                        <?php
                        if ( $installerStarted ) {
-                               echo "Please <a href=\"" . htmlspecialchars( $path ) . "mw-config/index." . htmlspecialchars( $ext ) . "\"> complete the installation</a> and download LocalSettings.php.";
+                               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.";
+                               echo "Please <a href=\"" . htmlspecialchars( $path ) . "mw-config/index." . htmlspecialchars( $ext ) . "\">set up the wiki</a> first.";
                        }
                        ?>
                        </p>
index 01da0bd..4eea01c 100644 (file)
@@ -254,14 +254,17 @@ class UsercreateTemplate extends BaseTemplate {
                        ?>
                        <div class="mw-ui-vform-field mw-submit">
                                <?php
-                               echo Html::input(
-                                       'wpCreateaccount',
+                               echo Html::submitButton(
                                        $this->getMsg( $this->data['loggedin'] ? 'createacct-another-submit' : 'createacct-submit' ),
-                                       'submit',
-                                       array(
-                                               'class' => "mw-ui-button mw-ui-big mw-ui-block mw-ui-constructive",
+                                       $attrs = array(
                                                'id' => 'wpCreateaccount',
+                                               'name' => 'wpCreateaccount',
                                                'tabindex' => $tabIndex++
+                                       ),
+                                       array(
+                                               'mw-ui-big',
+                                               'mw-ui-block',
+                                               'mw-ui-constructive',
                                        )
                                );
                                ?>
index 8bba426..2a9badf 100644 (file)
@@ -148,11 +148,15 @@ class UserloginTemplate extends BaseTemplate {
 
                        <div class="mw-ui-vform-field">
                                <?php
-                               echo Html::input( 'wpLoginAttempt', $this->getMsg( 'pt-login-button' )->text(), 'submit', array(
+                               $attrs = array(
                                        'id' => 'wpLoginAttempt',
+                                       'name' => 'wpLoginAttempt',
                                        'tabindex' => '6',
-                                       'class' => 'mw-ui-button mw-ui-big mw-ui-block mw-ui-constructive'
-                               ) );
+                               );
+                               $modifiers = array(
+                                       'mw-ui-big', 'mw-ui-block', 'mw-ui-constructive',
+                               );
+                               echo Html::submitButton( $this->getMsg( 'pt-login-button' )->text(), $attrs, $modifiers );
                                ?>
                        </div>
 
index 5de543e..a278652 100644 (file)
@@ -69,8 +69,6 @@ abstract class UploadBase {
        const WINDOWS_NONASCII_FILENAME = 13;
        const FILENAME_TOO_LONG = 14;
 
-       const SESSION_STATUS_KEY = 'wsUploadStatusData';
-
        /**
         * @param int $error
         * @return string
@@ -426,7 +424,7 @@ abstract class UploadBase {
         * @return mixed True of the file is verified, array otherwise.
         */
        protected function verifyFile() {
-               global $wgVerifyMimeType;
+               global $wgVerifyMimeType, $wgDisableUploadScriptChecks;
                wfProfileIn( __METHOD__ );
 
                $status = $this->verifyPartialFile();
@@ -448,6 +446,18 @@ abstract class UploadBase {
                        }
                }
 
+               # check for htmlish code and javascript
+               if ( !$wgDisableUploadScriptChecks ) {
+                       if ( $this->mFinalExtension == 'svg' || $mime == 'image/svg+xml' ) {
+                               $svgStatus = $this->detectScriptInSvg( $this->mTempPath, false );
+                               if ( $svgStatus !== false ) {
+                                       wfProfileOut( __METHOD__ );
+
+                                       return $svgStatus;
+                               }
+                       }
+               }
+
                $handler = MediaHandler::getHandler( $mime );
                if ( $handler ) {
                        $handlerStatus = $handler->verifyUpload( $this->mTempPath );
@@ -506,7 +516,7 @@ abstract class UploadBase {
                                return array( 'uploadscripted' );
                        }
                        if ( $this->mFinalExtension == 'svg' || $mime == 'image/svg+xml' ) {
-                               $svgStatus = $this->detectScriptInSvg( $this->mTempPath );
+                               $svgStatus = $this->detectScriptInSvg( $this->mTempPath, true );
                                if ( $svgStatus !== false ) {
                                        wfProfileOut( __METHOD__ );
 
@@ -746,6 +756,8 @@ abstract class UploadBase {
                                );
                        }
                        wfRunHooks( 'UploadComplete', array( &$this ) );
+
+                       $this->postProcessUpload();
                }
 
                wfProfileOut( __METHOD__ );
@@ -753,6 +765,35 @@ abstract class UploadBase {
                return $status;
        }
 
+       /**
+        * Perform extra steps after a successful upload.
+        *
+        * @since  1.25
+        */
+       public function postProcessUpload() {
+               global $wgUploadThumbnailRenderMap;
+
+               $jobs = array();
+
+               $sizes = $wgUploadThumbnailRenderMap;
+               rsort( $sizes );
+
+               $file = $this->getLocalFile();
+
+               foreach ( $sizes as $size ) {
+                       if ( $file->isVectorized()
+                               || $file->getWidth() > $size ) {
+                                       $jobs[] = new ThumbnailRenderJob( $file->getTitle(), array(
+                                               'transformParams' => array( 'width' => $size ),
+                                       ) );
+                       }
+               }
+
+               if ( $jobs ) {
+                       JobQueueGroup::singleton()->push( $jobs );
+               }
+       }
+
        /**
         * Returns the title of the file to be uploaded. Sets mTitleError in case
         * the name was illegal.
@@ -1252,9 +1293,10 @@ abstract class UploadBase {
 
        /**
         * @param string $filename
+        * @param bool $partial
         * @return mixed False of the file is verified (does not contain scripts), array otherwise.
         */
-       protected function detectScriptInSvg( $filename ) {
+       protected function detectScriptInSvg( $filename, $partial ) {
                $this->mSVGNSError = false;
                $check = new XmlTypeCheck(
                        $filename,
@@ -1264,7 +1306,8 @@ abstract class UploadBase {
                );
                if ( $check->wellFormed !== true ) {
                        // Invalid xml (bug 58553)
-                       return array( 'uploadinvalidxml' );
+                       // But only when non-partial (bug 65724)
+                       return $partial ? false : array( 'uploadinvalidxml' );
                } elseif ( $check->filterMatch ) {
                        if ( $this->mSVGNSError ) {
                                return array( 'uploadscriptednamespace', $this->mSVGNSError );
@@ -1297,7 +1340,8 @@ abstract class UploadBase {
         * @param array $attribs
         * @return bool
         */
-       public function checkSvgScriptCallback( $element, $attribs ) {
+       public function checkSvgScriptCallback( $element, $attribs, $data = null ) {
+
                list( $namespace, $strippedElement ) = $this->splitXmlNamespace( $element );
 
                // We specifically don't include:
@@ -1381,6 +1425,14 @@ abstract class UploadBase {
                        return true;
                }
 
+               # Check <style> css
+               if ( $strippedElement == 'style'
+                       && self::checkCssFragment( Sanitizer::normalizeCss( $data ) )
+               ) {
+                       wfDebug( __METHOD__ . ": hostile css in style element.\n" );
+                       return true;
+               }
+
                foreach ( $attribs as $attrib => $value ) {
                        $stripped = $this->stripXmlNamespace( $attrib );
                        $value = strtolower( $value );
@@ -1423,6 +1475,18 @@ abstract class UploadBase {
                                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'
+                               && $strippedElement === 'animate'
+                               && !preg_match( '!^https?://!im', $value )
+                       ) {
+                               wfDebug( __METHOD__ . ": Found animate that might be changing href using from "
+                                       . "\"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
+
+                               return true;
+                       }
+
                        # use set/animate to add event-handler attribute to parent
                        if ( ( $strippedElement == 'set' || $strippedElement == 'animate' )
                                && $stripped == 'attributename'
@@ -1463,23 +1527,23 @@ abstract class UploadBase {
                        }
 
                        # use CSS styles to bring in remote code
-                       # catch url("http:..., url('http:..., url(http:..., but not url("#..., url('#..., url(#....
-                       $tagsList = "font|clip-path|fill|filter|marker|marker-end|marker-mid|marker-start|mask|stroke";
                        if ( $stripped == 'style'
-                               && preg_match_all(
-                                       '!((?:' . $tagsList . ')\s*:\s*url\s*\(\s*["\']?\s*[^#]+.*?\))!sim',
-                                       $value,
-                                       $matches
-                               )
+                               && self::checkCssFragment( Sanitizer::normalizeCss( $value ) )
                        ) {
-                               foreach ( $matches[1] as $match ) {
-                                       if ( !preg_match( '!(?:' . $tagsList . ')\s*:\s*url\s*\(\s*(#|\'#|"#)!sim', $match ) ) {
-                                               wfDebug( __METHOD__ . ": Found svg setting a style with "
-                                                       . "remote url '$attrib'='$value' in uploaded file.\n" );
+                               wfDebug( __METHOD__ . ": Found svg setting a style with "
+                                       . "remote url '$attrib'='$value' in uploaded file.\n" );
+                               return true;
+                       }
 
-                                               return true;
-                                       }
-                               }
+                       # Several attributes can include css, css character escaping isn't allowed
+                       $cssAttrs = array( 'font', 'clip-path', 'fill', 'filter', 'marker',
+                               'marker-end', 'marker-mid', 'marker-start', 'mask', 'stroke' );
+                       if ( in_array( $stripped, $cssAttrs )
+                               && self::checkCssFragment( $value )
+                       ) {
+                               wfDebug( __METHOD__ . ": Found svg setting a style with "
+                                       . "remote url '$attrib'='$value' in uploaded file.\n" );
+                               return true;
                        }
 
                        # image filters can pull in url, which could be svg that executes scripts
@@ -1497,6 +1561,58 @@ abstract class UploadBase {
                return false; //No scripts detected
        }
 
+       /**
+        * Check a block of CSS or CSS fragment for anything that looks like
+        * it is bringing in remote code.
+        * @param string $value a string of CSS
+        * @param bool $propOnly only check css properties (start regex with :)
+        * @return bool true if the CSS contains an illegal string, false if otherwise
+        */
+       private static function checkCssFragment( $value ) {
+
+               # Forbid external stylesheets, for both reliability and to protect viewer's privacy
+               if ( strpos( $value, '@import' ) !== false ) {
+                       return true;
+               }
+
+               # We allow @font-face to embed fonts with data: urls, so we snip the string
+               # 'url' out so this case won't match when we check for urls below
+               $pattern = '!(@font-face\s*{[^}]*src:)url(\("data:;base64,)!im';
+               $value = preg_replace( $pattern, '$1$2', $value );
+
+               # Check for remote and executable CSS. Unlike in Sanitizer::checkCss, the CSS
+               # properties filter and accelerator don't seem to be useful for xss in SVG files.
+               # Expression and -o-link don't seem to work either, but filtering them here in case.
+               # Additionally, we catch remote urls like url("http:..., url('http:..., url(http:...,
+               # but not local ones such as url("#..., url('#..., url(#....
+               if ( preg_match( '!expression
+                               | -o-link\s*:
+                               | -o-link-source\s*:
+                               | -o-replace\s*:!imx', $value ) ) {
+                       return true;
+               }
+
+               if ( preg_match_all(
+                               "!(\s*(url|image|image-set)\s*\(\s*[\"']?\s*[^#]+.*?\))!sim",
+                               $value,
+                               $matches
+                       ) !== 0
+               ) {
+                       # TODO: redo this in one regex. Until then, url("#whatever") matches the first
+                       foreach ( $matches[1] as $match ) {
+                               if ( !preg_match( "!\s*(url|image|image-set)\s*\(\s*(#|'#|\"#)!im", $match ) ) {
+                                       return true;
+                               }
+                       }
+               }
+
+               if ( preg_match( '/[\000-\010\013\016-\037\177]/', $value ) ) {
+                       return true;
+               }
+
+               return false;
+       }
+
        /**
         * Divide the element name passed by the xml parser to the callback into URI and prifix.
         * @param string $element
@@ -1882,29 +1998,38 @@ abstract class UploadBase {
        }
 
        /**
-        * Get the current status of a chunked upload (used for polling).
-        * The status will be read from the *current* user session.
+        * Get the current status of a chunked upload (used for polling)
+        *
+        * The value will be read from cache.
+        *
+        * @param User $user
         * @param string $statusKey
         * @return Status[]|bool
         */
-       public static function getSessionStatus( $statusKey ) {
-               return isset( $_SESSION[self::SESSION_STATUS_KEY][$statusKey] )
-                       ? $_SESSION[self::SESSION_STATUS_KEY][$statusKey]
-                       : false;
+       public static function getSessionStatus( User $user, $statusKey ) {
+               $key = wfMemcKey( 'uploadstatus', $user->getId() ?: md5( $user->getName() ), $statusKey );
+
+               return wfGetCache( CACHE_ANYTHING )->get( $key );
        }
 
        /**
-        * Set the current status of a chunked upload (used for polling).
-        * The status will be stored in the *current* user session.
+        * Set the current status of a chunked upload (used for polling)
+        *
+        * The value will be set in cache for 1 day
+        *
+        * @param User $user
         * @param string $statusKey
         * @param array|bool $value
         * @return void
         */
-       public static function setSessionStatus( $statusKey, $value ) {
+       public static function setSessionStatus( User $user, $statusKey, $value ) {
+               $key = wfMemcKey( 'uploadstatus', $user->getId() ?: md5( $user->getName() ), $statusKey );
+
+               $cache = wfGetCache( CACHE_ANYTHING );
                if ( $value === false ) {
-                       unset( $_SESSION[self::SESSION_STATUS_KEY][$statusKey] );
+                       $cache->delete( $key );
                } else {
-                       $_SESSION[self::SESSION_STATUS_KEY][$statusKey] = $value;
+                       $cache->set( $key, $value, 86400 );
                }
        }
 }
index 7d80b44..52ce4d3 100644 (file)
@@ -151,6 +151,7 @@ class UploadStash {
 
                if ( !$this->files[$key]->exists() ) {
                        wfDebug( __METHOD__ . " tried to get file at $key, but it doesn't exist\n" );
+                       // @todo Is this not an UploadStashFileNotFoundException case?
                        throw new UploadStashBadPathException( "path doesn't exist" );
                }
 
diff --git a/includes/utils/ArrayUtils.php b/includes/utils/ArrayUtils.php
deleted file mode 100644 (file)
index 1e521cb..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-<?php
-/**
- * Methods to play with 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
- */
-
-/**
- * A collection of static methods to play with arrays.
- *
- * @since 1.21
- */
-class ArrayUtils {
-       /**
-        * Sort the given array in a pseudo-random order which depends only on the
-        * given key and each element value. This is typically used for load
-        * balancing between servers each with a local cache.
-        *
-        * Keys are preserved. The input array is modified in place.
-        *
-        * Note: Benchmarking on PHP 5.3 and 5.4 indicates that for small
-        * strings, md5() is only 10% slower than hash('joaat',...) etc.,
-        * since the function call overhead dominates. So there's not much
-        * justification for breaking compatibility with installations
-        * compiled with ./configure --disable-hash.
-        *
-        * @param array $array Array to sort
-        * @param string $key
-        * @param string $separator A separator used to delimit the array elements and the
-        *     key. This can be chosen to provide backwards compatibility with
-        *     various consistent hash implementations that existed before this
-        *     function was introduced.
-        */
-       public static function consistentHashSort( &$array, $key, $separator = "\000" ) {
-               $hashes = array();
-               foreach ( $array as $elt ) {
-                       $hashes[$elt] = md5( $elt . $separator . $key );
-               }
-               uasort( $array, function ( $a, $b ) use ( $hashes ) {
-                       return strcmp( $hashes[$a], $hashes[$b] );
-               } );
-       }
-
-       /**
-        * Given an array of non-normalised probabilities, this function will select
-        * an element and return the appropriate key
-        *
-        * @param array $weights
-        * @return bool|int|string
-        */
-       public static function pickRandom( $weights ) {
-               if ( !is_array( $weights ) || count( $weights ) == 0 ) {
-                       return false;
-               }
-
-               $sum = array_sum( $weights );
-               if ( $sum == 0 ) {
-                       # No loads on any of them
-                       # In previous versions, this triggered an unweighted random selection,
-                       # but this feature has been removed as of April 2006 to allow for strict
-                       # separation of query groups.
-                       return false;
-               }
-               $max = mt_getrandmax();
-               $rand = mt_rand( 0, $max ) / $max * $sum;
-
-               $sum = 0;
-               foreach ( $weights as $i => $w ) {
-                       $sum += $w;
-                       # Do not return keys if they have 0 weight.
-                       # Note that the "all 0 weight" case is handed above
-                       if ( $w > 0 && $sum >= $rand ) {
-                               break;
-                       }
-               }
-
-               return $i;
-       }
-
-       /**
-        * Do a binary search, and return the index of the largest item that sorts
-        * less than or equal to the target value.
-        *
-        * @since 1.23
-        *
-        * @param array $valueCallback A function to call to get the value with
-        *     a given array index.
-        * @param int $valueCount The number of items accessible via $valueCallback,
-        *     indexed from 0 to $valueCount - 1
-        * @param array $comparisonCallback A callback to compare two values, returning
-        *     -1, 0 or 1 in the style of strcmp().
-        * @param string $target The target value to find.
-        *
-        * @return int|bool The item index of the lower bound, or false if the target value
-        *     sorts before all items.
-        */
-       public static function findLowerBound( $valueCallback, $valueCount,
-               $comparisonCallback, $target
-       ) {
-               if ( $valueCount === 0 ) {
-                       return false;
-               }
-
-               $min = 0;
-               $max = $valueCount;
-               do {
-                       $mid = $min + ( ( $max - $min ) >> 1 );
-                       $item = call_user_func( $valueCallback, $mid );
-                       $comparison = call_user_func( $comparisonCallback, $target, $item );
-                       if ( $comparison > 0 ) {
-                               $min = $mid;
-                       } elseif ( $comparison == 0 ) {
-                               $min = $mid;
-                               break;
-                       } else {
-                               $max = $mid;
-                       }
-               } while ( $min < $max - 1 );
-
-               if ( $min == 0 ) {
-                       $item = call_user_func( $valueCallback, $min );
-                       $comparison = call_user_func( $comparisonCallback, $target, $item );
-                       if ( $comparison < 0 ) {
-                               // Before the first item
-                               return false;
-                       }
-               }
-               return $min;
-       }
-
-       /**
-        * Do array_diff_assoc() on multi-dimensional arrays.
-        *
-        * Note: empty arrays are removed.
-        *
-        * @since 1.23
-        *
-        * @param array $array1 The array to compare from
-        * @param array $array2,... More arrays to compare against
-        * @return array An array containing all the values from array1
-        *               that are not present in any of the other arrays.
-        */
-       public static function arrayDiffAssocRecursive( $array1 ) {
-               $arrays = func_get_args();
-               array_shift( $arrays );
-               $ret = array();
-
-               foreach ( $array1 as $key => $value ) {
-                       if ( is_array( $value ) ) {
-                               $args = array( $value );
-                               foreach ( $arrays as $array ) {
-                                       if ( isset( $array[$key] ) ) {
-                                               $args[] = $array[$key];
-                                       }
-                               }
-                               $valueret = call_user_func_array( __METHOD__, $args );
-                               if ( count( $valueret ) ) {
-                                       $ret[$key] = $valueret;
-                               }
-                       } else {
-                               foreach ( $arrays as $array ) {
-                                       if ( isset( $array[$key] ) && $array[$key] === $value ) {
-                                               continue 2;
-                                       }
-                               }
-                               $ret[$key] = $value;
-                       }
-               }
-
-               return $ret;
-       }
-}
index 3a0492d..9fb4c19 100644 (file)
 
 class MWFunction {
 
-       /**
-        * @deprecated since 1.22; use call_user_func()
-        * @param callable $callback
-        * @return mixed
-        */
-       public static function call( $callback ) {
-               wfDeprecated( __METHOD__, '1.22' );
-               $args = func_get_args();
-
-               return call_user_func_array( 'call_user_func', $args );
-       }
-
-       /**
-        * @deprecated since 1.22; use call_user_func_array()
-        * @param callable $callback
-        * @param array $argsarams
-        * @return mixed
-        */
-       public static function callArray( $callback, $argsarams ) {
-               wfDeprecated( __METHOD__, '1.22' );
-
-               return call_user_func_array( $callback, $argsarams );
-       }
-
        /**
         * @param string $class
         * @param array $args
index dffe242..5346afa 100644 (file)
@@ -117,7 +117,7 @@ class UIDGenerator {
        }
 
        /**
-        * @param array $info (UIDGenerator::millitime(), clock sequence)
+        * @param array $info (UIDGenerator::millitime(), counter, clock sequence)
         * @return string 88 bits
         */
        protected function getTimestampedID88( array $info ) {
index b35967b..c32bd3a 100644 (file)
--- a/index.php
+++ b/index.php
@@ -34,7 +34,7 @@
 # has structures (try/catch, foo()->bar(), etc etc) which throw parse errors in
 # PHP 4. Setup.php and ObjectCache.php have structures invalid in PHP 5.0 and
 # 5.1, respectively.
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
+if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.3' ) < 0 ) {
        // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require dirname( __FILE__ ) . '/includes/PHPVersionError.php';
        wfPHPVersionError( 'index.php' );
index 2bc4554..fb04255 100644 (file)
@@ -143,6 +143,12 @@ class Language {
         */
        static private $fallbackLanguageCache = array();
 
+       /**
+        * Cache for language names
+        * @var MapCacheLRU|null
+        */
+       static private $languageNameCache;
+
        /**
         * Get a cached or new language object for a given language code
         * @param string $code
@@ -731,6 +737,8 @@ class Language {
        }
 
        /**
+        * @deprecated since 1.24, doesn't handle conflicting aliases. Use
+        *   SpecialPageFactory::getLocalNameFor instead.
         * @param string $name
         * @return string
         */
@@ -784,6 +792,14 @@ class Language {
                return self::$dataCache->getSubitem( $this->mCode, 'imageFiles', $image );
        }
 
+       /**
+        * @return array
+        * @since 1.24
+        */
+       function getImageFiles() {
+               return self::$dataCache->getItem( $this->mCode, 'imageFiles' );
+       }
+
        /**
         * @return array
         */
@@ -838,6 +854,33 @@ class Language {
         * @since 1.20
         */
        public static function fetchLanguageNames( $inLanguage = null, $include = 'mw' ) {
+               wfProfileIn( __METHOD__ );
+               $cacheKey = $inLanguage === null ? 'null' : $inLanguage;
+               $cacheKey .= ":$include";
+               if ( self::$languageNameCache === null ) {
+                       self::$languageNameCache = new MapCacheLRU( 20 );
+               }
+               if ( self::$languageNameCache->has( $cacheKey ) ) {
+                       $ret = self::$languageNameCache->get( $cacheKey );
+               } else {
+                       $ret = self::fetchLanguageNamesUncached( $inLanguage, $include );
+                       self::$languageNameCache->set( $cacheKey, $ret );
+               }
+               wfProfileOut( __METHOD__ );
+               return $ret;
+       }
+
+       /**
+        * Uncached helper for fetchLanguageNames
+        * @param null|string $inLanguage Code of language in which to return the names
+        *              Use null for autonyms (native names)
+        * @param string $include One of:
+        *              'all' all available languages
+        *              'mw' only if the language is defined in MediaWiki or wgExtraLanguageNames (default)
+        *              'mwfile' only if the language is in 'mw' *and* has a message file
+        * @return array Language code => language name
+        */
+       private static function fetchLanguageNamesUncached( $inLanguage = null, $include = 'mw' ) {
                global $wgExtraLanguageNames;
                static $coreLanguageNames;
 
@@ -3142,7 +3185,7 @@ class Language {
                }
 
                if ( !is_array( $rawEntry ) ) {
-                       error_log( "\"$rawEntry\" is not a valid magic word for \"$mw->mId\"" );
+                       wfWarn( "\"$rawEntry\" is not a valid magic word for \"$mw->mId\"" );
                } else {
                        $mw->mCaseSensitive = $rawEntry[0];
                        $mw->mSynonyms = array_slice( $rawEntry, 1 );
@@ -3166,7 +3209,7 @@ class Language {
 
        /**
         * Get special page names, as an associative array
-        *   case folded alias => real name
+        *   canonical name => array of valid names, including aliases
         * @return array
         */
        function getSpecialPageAliases() {
index abca495..eae77fb 100644 (file)
@@ -1102,6 +1102,7 @@ class LanguageConverter {
 
        /**
         * Get the cached separator pattern for ConverterRule::parseRules()
+        * @return string
         */
        function getVarSeparatorPattern() {
                if ( is_null( $this->mVarSeparatorPattern ) ) {
index 2051a5b..4a41b42 100644 (file)
@@ -33,7 +33,7 @@
  * Some writing systems require some line-height fixes. This includes
  * most Indic scripts, like Devanagari.
  * If you are adding support for such a language, add it also to
- * the relevant section in skins/common/shared.css.
+ * the relevant section in shared.css.
  *
  * @ingroup Language
  */
@@ -41,6 +41,7 @@
        'aa' => 'Qafár af',    # Afar
        'ab' => 'Аҧсшәа', # Abkhaz
        'ace' => 'Acèh',       # Aceh
+       'aeb' => 'زَوُن',  # Tunisian Arabic
        'af' => 'Afrikaans',    # Afrikaans
        'ak' => 'Akan',         # Akan
        'aln' => 'Gegë',       # Gheg Albanian
@@ -85,6 +86,7 @@
        'br' => 'brezhoneg',    # Breton
        'brh' => 'Bráhuí',    # Brahui
        'bs' => 'bosanski',             # Bosnian
+       'bto' => 'Iriga Bicolano',      # Rinconada Bikol
        'bug' => 'ᨅᨔ ᨕᨘᨁᨗ', # Buginese
        'bxr' => 'буряад',        # Buryat (Russia)
        'ca' => 'català',      # Catalan
        'rmy' => 'Romani',      # Vlax Romany
        'rn' => 'Kirundi',              # Rundi/Kirundi/Urundi
        'ro' => 'română',     # Romanian
-       'roa-rup' => 'Armãneashce', # Aromanian (deprecated code, 'rup' exists in ISO 693-3)
+       'roa-rup' => 'armãneashti', # Aromanian (deprecated code, 'rup' exists in ISO 693-3)
        'roa-tara' => 'tarandíne',     # Tarantino
        'ru' => 'русский',       # Russian
        'rue' => 'русиньскый',        # Rusyn
-       'rup' => 'Armãneashce', # Aromanian
+       'rup' => 'armãneashti', # Aromanian
        'ruq' => 'Vlăheşte',  # Megleno-Romanian (multiple scripts - defaults to Latin)
        'ruq-cyrl' => 'Влахесте',       # Megleno-Romanian (Cyrillic script)
        # 'ruq-grek' => 'Βλαεστε',       # Megleno-Romanian (Greek script)
        'sdc' => 'Sassaresu',   # Sassarese
        'se' => 'sámegiella',  # Northern Sami
        'sei' => 'Cmique Itom', # Seri
+       'ses' => 'Koyraboro Senni',     # Koyraboro Senni
        'sg' => 'Sängö',              # Sango/Sangho
        'sgs' => 'žemaitėška', # Samogitian
        'sh' => 'srpskohrvatski / српскохрватски', # Serbocroatian
index aafc393..1ed6a51 100644 (file)
@@ -2,14 +2,6 @@
 <!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd">
 <supplementalData>
        <plurals>
-               <!-- Lower Sorbian (Dolnoserbski) and  Upper Sorbian (Hornjoserbsce). Not present in CLDR -->
-               <pluralRules locales="dsb hsb">
-                       <pluralRule count="one">n % 100 = 1 @integer 1, 101, 201, 301, …</pluralRule>
-                       <pluralRule count="two">n % 100 = 2 @integer 2, 102, 202, 302, …</pluralRule>
-                       <pluralRule count="few">n % 100 = 3..4 @integer 3~4, 103~104, …</pluralRule>
-                       <pluralRule count="other"> @integer 5, 6, 7, 8, 9, 10, 105, 206, 307, …</pluralRule>
-               </pluralRules>
-
                <!-- Belarusian in Taraškievica orthography (Беларуская тарашкевіца). Copied from "be" -->
                <pluralRules locales="be-tarask">
                        <pluralRule count="one">n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule>
index fd4eaf6..e364f1b 100644 (file)
@@ -6,71 +6,148 @@ CLDR data files are interpreted according to the LDML specification (http://unic
 For terms of use, see http://www.unicode.org/copyright.html
 -->
 <supplementalData>
-    <version number="$Revision: 9369 $"/>
-    <generation date="$Date: 2013-09-14 01:26:08 +0530 (ശ, 14 സെപ് 2013) $"/>
+    <version number="$Revision: 10807 $"/>
+    <generation date="$Date: 2014-08-14 14:43:27 -0500 (Thu, 14 Aug 2014) $"/>
     <plurals type="cardinal">
         <!-- For a canonicalized list, use GeneratedPluralSamples -->
-        <!-- if locale is known to have no plurals, there are no rules -->
-        <pluralRules locales="ar">
-            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
-            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
-            <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
-            <pluralRule count="few">n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …</pluralRule>
-            <pluralRule count="many">n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …</pluralRule>
-            <pluralRule count="other"> @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+
+        <!-- 1: other -->
+
+        <pluralRules locales="bm bo dz id ig ii in ja jbo jv jw kde kea km ko lkt lo ms my nqo root sah ses sg th to vi wo yo zh">
+            <pluralRule count="other"> @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="he iw">
+
+        <!-- 2: one,other -->
+
+        <pluralRules locales="am bn fa gu hi kn mr zu">
+            <pluralRule count="one">i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04</pluralRule>
+            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ff fr hy kab">
+            <pluralRule count="one">i = 0,1 @integer 0, 1 @decimal 0.0~1.5</pluralRule>
+            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ast ca de en et fi fy gl it ji nl sv sw ur yi">
             <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule>
-            <pluralRule count="two">i = 2 and v = 0 @integer 2</pluralRule>
-            <pluralRule count="many">v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
-            <pluralRule count="other"> @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="af asa ast az bem bez bg brx cgg chr ckb dv ee el eo es eu fo fur fy gsw ha haw hu jgo jmc ka kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn nah nb nd ne nn nnh no nr ny nyn om or os pap ps rm rof rwk saq seh sn so sq ss ssy st syr ta te teo tig tk tn tr ts uz ve vo vun wae xh xog">
-            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
-            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        <pluralRules locales="si">
+            <pluralRule count="one">n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.00, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000</pluralRule>
+            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0.9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
         <pluralRules locales="ak bh guw ln mg nso pa ti wa">
             <pluralRule count="one">n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000</pluralRule>
             <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="ff fr hy kab">
-            <pluralRule count="one">i = 0,1 @integer 0, 1 @decimal 0.0~1.5</pluralRule>
-            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        <pluralRules locales="tzm">
+            <pluralRule count="one">n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0</pluralRule>
+            <pluralRule count="other"> @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="pt">
+            <pluralRule count="one">n = 0..2 and n != 2 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000</pluralRule>
+            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="af asa az bem bez bg brx cgg chr ckb dv ee el eo es eu fo fur gsw ha haw hu jgo jmc ka kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn nah nb nd ne nn nnh no nr ny nyn om or os pap ps rm rof rwk saq seh sn so sq ss ssy st syr ta te teo tig tk tn tr ts ug uz ve vo vun wae xh xog">
+            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
+            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="pt_PT">
+            <pluralRule count="one">n = 1 and v = 0 @integer 1</pluralRule>
+            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="da">
+            <pluralRule count="one">n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6</pluralRule>
+            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="is">
+            <pluralRule count="one">t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 1000.1, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="mk">
+            <pluralRule count="one">v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 2~10, 12~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="fil tl">
+            <pluralRule count="one">v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+            <pluralRule count="other"> @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="lv">
+
+        <!-- 3: zero,one,other -->
+
+        <pluralRules locales="lv prg">
             <pluralRule count="zero">n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
             <pluralRule count="one">n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
             <pluralRule count="other"> @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …</pluralRule>
         </pluralRules>
+        <pluralRules locales="lag">
+            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
+            <pluralRule count="one">i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6</pluralRule>
+            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ksh">
+            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
+            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
+            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+
+        <!-- 3: one,two,other -->
+
         <pluralRules locales="iu kw naq se sma smi smj smn sms">
             <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
             <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
             <pluralRule count="other"> @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="ga">
-            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
-            <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
-            <pluralRule count="few">n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000</pluralRule>
-            <pluralRule count="many">n = 7..10 @integer 7~10 @decimal 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000</pluralRule>
-            <pluralRule count="other"> @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+
+        <!-- 3: one,few,other -->
+
+        <pluralRules locales="shi">
+            <pluralRule count="one">i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04</pluralRule>
+            <pluralRule count="few">n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00</pluralRule>
+            <pluralRule count="other"> @integer 11~26, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~1.9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
         <pluralRules locales="mo ro">
             <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule>
             <pluralRule count="few">v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
             <pluralRule count="other"> @integer 20~35, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="lt">
-            <pluralRule count="one">n % 10 = 1 and n % 100 != 11..19 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule>
-            <pluralRule count="few">n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, … @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, …</pluralRule>
-            <pluralRule count="many">f != 0   @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …</pluralRule>
-            <pluralRule count="other"> @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        <pluralRules locales="bs hr sh sr">
+            <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
+            <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="be">
-            <pluralRule count="one">n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule>
-            <pluralRule count="few">n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …</pluralRule>
-            <pluralRule count="many">n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-            <pluralRule count="other">   @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …</pluralRule>
+
+        <!-- 4: one,two,few,other -->
+
+        <pluralRules locales="gd">
+            <pluralRule count="one">n = 1,11 @integer 1, 11 @decimal 1.0, 11.0, 1.00, 11.00, 1.000, 11.000, 1.0000</pluralRule>
+            <pluralRule count="two">n = 2,12 @integer 2, 12 @decimal 2.0, 12.0, 2.00, 12.00, 2.000, 12.000, 2.0000</pluralRule>
+            <pluralRule count="few">n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00</pluralRule>
+            <pluralRule count="other"> @integer 0, 20~34, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="sl">
+            <pluralRule count="one">v = 0 and i % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, …</pluralRule>
+            <pluralRule count="two">v = 0 and i % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, …</pluralRule>
+            <pluralRule count="few">v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="dsb hsb">
+            <pluralRule count="one">v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
+            <pluralRule count="two">v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …</pluralRule>
+            <pluralRule count="few">v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        </pluralRules>
+
+        <!-- 4: one,two,many,other -->
+
+        <pluralRules locales="he iw">
+            <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule>
+            <pluralRule count="two">i = 2 and v = 0 @integer 2</pluralRule>
+            <pluralRule count="many">v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
+
+        <!-- 4: one,few,many,other -->
+
         <pluralRules locales="cs sk">
             <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule>
             <pluralRule count="few">i = 2..4 and v = 0 @integer 2~4</pluralRule>
@@ -83,11 +160,17 @@ For terms of use, see http://www.unicode.org/copyright.html
             <pluralRule count="many">v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
             <pluralRule count="other">   @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="sl">
-            <pluralRule count="one">v = 0 and i % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, …</pluralRule>
-            <pluralRule count="two">v = 0 and i % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, …</pluralRule>
-            <pluralRule count="few">v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-            <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
+        <pluralRules locales="be">
+            <pluralRule count="one">n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule>
+            <pluralRule count="few">n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …</pluralRule>
+            <pluralRule count="many">n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+            <pluralRule count="other">   @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …</pluralRule>
+        </pluralRules>
+        <pluralRules locales="lt">
+            <pluralRule count="one">n % 10 = 1 and n % 100 != 11..19 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule>
+            <pluralRule count="few">n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, … @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, …</pluralRule>
+            <pluralRule count="many">f != 0   @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …</pluralRule>
+            <pluralRule count="other"> @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
         <pluralRules locales="mt">
             <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
@@ -95,28 +178,15 @@ For terms of use, see http://www.unicode.org/copyright.html
             <pluralRule count="many">n % 100 = 11..19 @integer 11~19, 111~117, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …</pluralRule>
             <pluralRule count="other"> @integer 20~35, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="mk">
-            <pluralRule count="one">v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
-            <pluralRule count="other"> @integer 0, 2~10, 12~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="cy">
-            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
-            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
-            <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
-            <pluralRule count="few">n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000</pluralRule>
-            <pluralRule count="many">n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000</pluralRule>
-            <pluralRule count="other"> @integer 4, 5, 7~20, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="lag">
-            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
-            <pluralRule count="one">i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6</pluralRule>
-            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="shi">
-            <pluralRule count="one">i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04</pluralRule>
-            <pluralRule count="few">n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00</pluralRule>
-            <pluralRule count="other"> @integer 11~26, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~1.9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        <pluralRules locales="ru uk">
+            <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …</pluralRule>
+            <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …</pluralRule>
+            <pluralRule count="many">v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
+            <pluralRule count="other">   @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
+
+        <!-- 5: one,two,few,many,other -->
+
         <pluralRules locales="br">
             <pluralRule count="one">n % 10 = 1 and n % 100 != 11,71,91 @integer 1, 21, 31, 41, 51, 61, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 81.0, 101.0, 1001.0, …</pluralRule>
             <pluralRule count="two">n % 10 = 2 and n % 100 != 12,72,92 @integer 2, 22, 32, 42, 52, 62, 82, 102, 1002, … @decimal 2.0, 22.0, 32.0, 42.0, 52.0, 62.0, 82.0, 102.0, 1002.0, …</pluralRule>
@@ -124,77 +194,38 @@ For terms of use, see http://www.unicode.org/copyright.html
             <pluralRule count="many">n != 0 and n % 1000000 = 0 @integer 1000000, … @decimal 1000000.0, 1000000.00, 1000000.000, …</pluralRule>
             <pluralRule count="other"> @integer 0, 5~8, 10~20, 100, 1000, 10000, 100000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="ksh">
-            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
+        <pluralRules locales="ga">
             <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
-            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="tzm">
-            <pluralRule count="one">n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0</pluralRule>
-            <pluralRule count="other"> @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+            <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
+            <pluralRule count="few">n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000</pluralRule>
+            <pluralRule count="many">n = 7..10 @integer 7~10 @decimal 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000</pluralRule>
+            <pluralRule count="other"> @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
         <pluralRules locales="gv">
-            <pluralRule count="one">n % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 1.0, 11.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 101.0, 1001.0, …</pluralRule>
-            <pluralRule count="two">n % 10 = 2 @integer 2, 12, 22, 32, 42, 52, 62, 72, 102, 1002, … @decimal 2.0, 12.0, 22.0, 32.0, 42.0, 52.0, 62.0, 72.0, 102.0, 1002.0, …</pluralRule>
-            <pluralRule count="few">n % 100 = 0,20,40,60 @integer 0, 20, 40, 60, 100, 120, 140, 160, 1000, 10000, 100000, 1000000, … @decimal 0.0, 20.0, 40.0, 60.0, 100.0, 120.0, 140.0, 160.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-            <pluralRule count="other"> @integer 3~10, 13~19, 23, 103, 1003, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.1, 1000.1, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="gd">
-            <pluralRule count="one">n = 1,11 @integer 1, 11 @decimal 1.0, 11.0, 1.00, 11.00, 1.000, 11.000, 1.0000</pluralRule>
-            <pluralRule count="two">n = 2,12 @integer 2, 12 @decimal 2.0, 12.0, 2.00, 12.00, 2.000, 12.000, 2.0000</pluralRule>
-            <pluralRule count="few">n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00</pluralRule>
-            <pluralRule count="other"> @integer 0, 20~34, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="bm bo dz id ig ii in ja jbo jv jw kde kea km ko lkt lo ms my nqo sah ses sg th to vi wo yo zh">
-            <pluralRule count="other"> @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="fil tl">
-            <pluralRule count="one">i = 0..1 and v = 0 @integer 0, 1</pluralRule>
-            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="ca de en et fi gl it ji nl sv sw ur yi">
-            <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule>
-            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="pt">
-            <pluralRule count="one">i = 1 and v = 0 or i = 0 and t = 1 @integer 1 @decimal 0.1, 0.01, 0.10, 0.001, 0.010, 0.100, 0.0001, 0.0010, 0.0100, 0.1000</pluralRule>
-            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="da">
-            <pluralRule count="one">n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6</pluralRule>
-            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="pt_PT">
-            <pluralRule count="one">n = 1 and v = 0 @integer 1</pluralRule>
-            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="am bn fa gu hi kn mr zu">
-            <pluralRule count="one">i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04</pluralRule>
-            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="is">
-            <pluralRule count="one">t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 1000.1, …</pluralRule>
-            <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="si">
-            <pluralRule count="one">n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.00, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000</pluralRule>
-            <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0.9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
-        </pluralRules>
-        <pluralRules locales="bs hr sh sr">
-            <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
-            <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …</pluralRule>
-            <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+            <pluralRule count="one">v = 0 and i % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, …</pluralRule>
+            <pluralRule count="two">v = 0 and i % 10 = 2 @integer 2, 12, 22, 32, 42, 52, 62, 72, 102, 1002, …</pluralRule>
+            <pluralRule count="few">v = 0 and i % 100 = 0,20,40,60,80 @integer 0, 20, 40, 60, 80, 100, 120, 140, 1000, 10000, 100000, 1000000, …</pluralRule>
+            <pluralRule count="many">v != 0   @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+            <pluralRule count="other"> @integer 3~10, 13~19, 23, 103, 1003, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="ru">
-            <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …</pluralRule>
-            <pluralRule count="many">v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
-            <pluralRule count="other"> @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+
+        <!-- 6: zero,one,two,few,many,other -->
+
+        <pluralRules locales="ar">
+            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
+            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
+            <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
+            <pluralRule count="few">n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …</pluralRule>
+            <pluralRule count="many">n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …</pluralRule>
+            <pluralRule count="other"> @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
-        <pluralRules locales="uk">
-            <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …</pluralRule>
-            <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …</pluralRule>
-            <pluralRule count="many">v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
-            <pluralRule count="other">   @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+        <pluralRules locales="cy">
+            <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
+            <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
+            <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
+            <pluralRule count="few">n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000</pluralRule>
+            <pluralRule count="many">n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000</pluralRule>
+            <pluralRule count="other"> @integer 4, 5, 7~20, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
         </pluralRules>
     </plurals>
 </supplementalData>
index aae2255..41f3556 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Comp1089",
-            "Mzhiba",
-            "Temuri rajavi",
-            "ОйЛ"
-        ]
-    },
-    "sunday": "амҽыш",
-    "monday": "ашәахь",
-    "tuesday": "аҩаш",
-    "wednesday": "ахаш",
-    "thursday": "аҧшьаш",
-    "friday": "ахәуаш",
-    "saturday": "асабш",
-    "january": "ажьырныҳәа",
-    "february": "жәабран",
-    "march": "хәажәкыр",
-    "april": "мшаҧы",
-    "may_long": "лаҵара",
-    "june": "рашәара",
-    "july": "ҧхынгәы",
-    "august": "нанҳәа",
-    "september": "цәыббра",
-    "october": "жьҭаара",
-    "november": "абҵара",
-    "december": "ҧхынҷкәын",
-    "january-gen": "ажьырныҳәа",
-    "february-gen": "жәабран",
-    "march-gen": "хәажәкыра",
-    "april-gen": "мшаҧы",
-    "may-gen": "лаҵара",
-    "june-gen": "рашәара",
-    "july-gen": "ҧхынгәы",
-    "august-gen": "нанҳәа",
-    "september-gen": "цәыббра",
-    "october-gen": "жьҭаара",
-    "november-gen": "абҵара",
-    "december-gen": "ҧхынҷкәын",
-    "jan": "ажь",
-    "feb": "жәа",
-    "mar": "хәа",
-    "apr": "мша",
-    "may": "лаҵ",
-    "jun": "раш",
-    "jul": "ҧхг",
-    "aug": "нан",
-    "sep": "цәы",
-    "oct": "жьҭ",
-    "nov": "абҵ",
-    "dec": "ҧхҷ",
-    "pagecategories": "{{PLURAL:$1|1=Акатегориа|Акатегориақәа}}",
-    "article": "Адаҟьа",
-    "mytalk": "Сахцәажәара",
-    "navigation": "Анавигациа",
-    "qbfind": "Аҧшаара",
-    "qbedit": "Ариашара",
-    "qbpageoptions": "Ари адаҟьа",
-    "vector-action-move": "Ахьӡ аҧсахра",
-    "vector-view-create": "Арҿиара",
-    "vector-view-edit": "Ариашамҭа",
-    "vector-view-history": "Аҭоурых",
-    "vector-view-view": "Аҧхьара",
-    "vector-view-viewsource": "Ахәаҧшра",
-    "help": "Ацхыраара",
-    "search": "Аҧшаара",
-    "searchbutton": "Аҧшаара",
-    "searcharticle": "Адаҟьа",
-    "history": "Аҭоурых",
-    "history_short": "Аҭоурых",
-    "printableversion": "Акьыҧхьразы аверсиа",
-    "permalink": "Еисымшатәи ахьарҧш",
-    "edit": "Ариашамҭа",
-    "create": "Арҿиара",
-    "create-this-page": "Ариашара ари адаҟьа",
-    "newpage": "Адаҟьа Ҿыц",
-    "talkpagelinktext": "Ахцәажәара",
-    "specialpage": "Цастәи адаҟьа",
-    "talk": "Ахцәажәара",
-    "toolbox": "Амаҵыругақәа",
-    "otherlanguages": "Абызшәақәа",
-    "lastmodifiedat": "Ацыхәтәантәи аҧсахрақәа абри адаҟьа аҟны: $2, $1.",
-    "jumptonavigation": "Анавигациа",
-    "jumptosearch": "Аҧшаара",
-    "aboutsite": "{{SITENAME}} иазкны",
-    "currentevents": "Ииасуа ахҭысқәа",
-    "mainpage": "Ихадоу Адаҟьа",
-    "mainpage-description": "Ихадоу адаҟьа",
-    "privacy": "Аконфиденциалтә аполитика",
-    "privacypage": "Project: Аконфиденциалтә аполитика",
-    "youhavenewmessages": "Уара $1 уауит ($2).",
-    "editsection": "ариашамҭа",
-    "editold": "ариашара",
-    "editlink": "ариашара",
-    "nstab-main": "Адаҟьа",
-    "nstab-user": "Алахәыла",
-    "nstab-special": "Цастәи адаҟьа",
-    "nstab-image": "Афаил",
-    "nstab-template": "Ашаблон",
-    "nstab-help": "Ацхыраара",
-    "nstab-category": "Акатегориа",
-    "viewsource": "Ахәаҧшра",
-    "login": "Урдырра",
-    "nav-login-createaccount": "Урдырра / Арегистрациара",
-    "userlogin": "Урдырра/Арегистрациара",
-    "logout": "Асеанс дәылҵра",
-    "userlogout": "Асеанс дәылҵра",
-    "loginlanguagelabel": "Абызшәа: $1",
-    "summary": "Описание изменений:",
-    "savearticle": "Адаҟьа ахьчара",
-    "editing": "Ариашамҭа: $1",
-    "searchresults-title": "Аҧшаара «$1»",
-    "preferences": "Архиарақәа",
-    "mypreferences": "Архиарақәа",
-    "searchresultshead": "Аҧшаара",
-    "uid": "Алахәыла ID:",
-    "yourlanguage": "Абызшәа:",
-    "prefs-signature": "Анапынҵамҭа",
-    "group-user": "Алахәылацәа",
-    "group-user-member": "{{GENDER:$1|алахәыла}}",
-    "grouppage-sysop": "{{ns:project}}:Администраторцәа",
-    "recentchanges": "Арҽеира ҿыцқәа",
-    "recentchanges-legend-newpage": "$1 — адаҟьа ҿыц",
-    "newpageletter": "Ҿ",
-    "recentchangeslinked": "Еимадоу ариашарақәа",
-    "recentchangeslinked-feed": "Еимадоу ариашарақәа",
-    "recentchangeslinked-toolbox": "Еимадоу ариашарақәа",
-    "upload": "Афаил аҭагалара",
-    "filehist-user": "Алахәыла",
-    "randompage": "Машәырлатәи аҩымҭа",
-    "brokenredirects-edit": "ариашамҭа",
-    "newpages-username": "Алахәыла:",
-    "move": "Ахьӡ аҧсахра",
-    "movethispage": "Ахьӡ аҧсахра ари адаҟьа",
-    "specialloguserlabel": "Алахәыла:",
-    "alphaindexline": "$1 ... $2",
-    "linksearch-ok": "Аҧшаара",
-    "watchlist": "Ашклаҧшра асна",
-    "mywatchlist": "Ашклаҧшра асна",
-    "restriction-edit": "Ариашамҭа",
-    "mycontris": "Салагала",
-    "contribsub2": "Алагала $1 ($2)",
-    "sp-contributions-talk": "ахцәажәара",
-    "sp-contributions-submit": "Аҧшаара",
-    "whatlinkshere": "Арахьтәи ахьарҧшқәа",
-    "whatlinkshere-page": "Адаҟьа:",
-    "contribslink": "алагала",
-    "movearticle": "Ахьӡ аҧсахра:",
-    "allmessages-language": "Абызшәа:",
-    "ilsubmit": "Аҧшаара",
-    "watchlistall2": "зегьы",
-    "namespacesall": "зегьы",
-    "monthsall": "зегьы",
-    "fileduplicatesearch-submit": "Аҧшаара",
-    "specialpages": "Цастәи адаҟьақәа",
-    "specialpages-group-login": "Урдырра / Арегистрациара"
+       "@metadata": {
+               "authors": [
+                       "Comp1089",
+                       "Mzhiba",
+                       "Temuri rajavi",
+                       "ОйЛ"
+               ]
+       },
+       "sunday": "амҽыш",
+       "monday": "ашәахь",
+       "tuesday": "аҩаш",
+       "wednesday": "ахаш",
+       "thursday": "аҧшьаш",
+       "friday": "ахәуаш",
+       "saturday": "асабш",
+       "january": "ажьырныҳәа",
+       "february": "жәабран",
+       "march": "хәажәкыр",
+       "april": "мшаҧы",
+       "may_long": "лаҵара",
+       "june": "рашәара",
+       "july": "ҧхынгәы",
+       "august": "нанҳәа",
+       "september": "цәыббра",
+       "october": "жьҭаара",
+       "november": "абҵара",
+       "december": "ҧхынҷкәын",
+       "january-gen": "ажьырныҳәа",
+       "february-gen": "жәабран",
+       "march-gen": "хәажәкыра",
+       "april-gen": "мшаҧы",
+       "may-gen": "лаҵара",
+       "june-gen": "рашәара",
+       "july-gen": "ҧхынгәы",
+       "august-gen": "нанҳәа",
+       "september-gen": "цәыббра",
+       "october-gen": "жьҭаара",
+       "november-gen": "абҵара",
+       "december-gen": "ҧхынҷкәын",
+       "jan": "ажь",
+       "feb": "жәа",
+       "mar": "хәа",
+       "apr": "мша",
+       "may": "лаҵ",
+       "jun": "раш",
+       "jul": "ҧхг",
+       "aug": "нан",
+       "sep": "цәы",
+       "oct": "жьҭ",
+       "nov": "абҵ",
+       "dec": "ҧхҷ",
+       "pagecategories": "{{PLURAL:$1|1=Акатегориа|Акатегориақәа}}",
+       "article": "Адаҟьа",
+       "mytalk": "Сахцәажәара",
+       "navigation": "Анавигациа",
+       "qbfind": "Аҧшаара",
+       "qbedit": "Ариашара",
+       "qbpageoptions": "Ари адаҟьа",
+       "help": "Ацхыраара",
+       "search": "Аҧшаара",
+       "searchbutton": "Аҧшаара",
+       "searcharticle": "Адаҟьа",
+       "history": "Аҭоурых",
+       "history_short": "Аҭоурых",
+       "printableversion": "Акьыҧхьразы аверсиа",
+       "permalink": "Еисымшатәи ахьарҧш",
+       "edit": "Ариашамҭа",
+       "create": "Арҿиара",
+       "create-this-page": "Ариашара ари адаҟьа",
+       "newpage": "Адаҟьа Ҿыц",
+       "talkpagelinktext": "Ахцәажәара",
+       "specialpage": "Цастәи адаҟьа",
+       "talk": "Ахцәажәара",
+       "toolbox": "Амаҵыругақәа",
+       "otherlanguages": "Абызшәақәа",
+       "lastmodifiedat": "Ацыхәтәантәи аҧсахрақәа абри адаҟьа аҟны: $2, $1.",
+       "jumptonavigation": "Анавигациа",
+       "jumptosearch": "Аҧшаара",
+       "aboutsite": "{{SITENAME}} иазкны",
+       "currentevents": "Ииасуа ахҭысқәа",
+       "mainpage": "Ихадоу Адаҟьа",
+       "mainpage-description": "Ихадоу адаҟьа",
+       "privacy": "Аконфиденциалтә аполитика",
+       "privacypage": "Project: Аконфиденциалтә аполитика",
+       "youhavenewmessages": "Уара $1 уауит ($2).",
+       "editsection": "ариашамҭа",
+       "editold": "ариашара",
+       "editlink": "ариашара",
+       "nstab-main": "Адаҟьа",
+       "nstab-user": "Алахәыла",
+       "nstab-special": "Цастәи адаҟьа",
+       "nstab-image": "Афаил",
+       "nstab-template": "Ашаблон",
+       "nstab-help": "Ацхыраара",
+       "nstab-category": "Акатегориа",
+       "viewsource": "Ахәаҧшра",
+       "login": "Урдырра",
+       "nav-login-createaccount": "Урдырра / Арегистрациара",
+       "userlogin": "Урдырра/Арегистрациара",
+       "logout": "Асеанс дәылҵра",
+       "userlogout": "Асеанс дәылҵра",
+       "loginlanguagelabel": "Абызшәа: $1",
+       "summary": "Описание изменений:",
+       "savearticle": "Адаҟьа ахьчара",
+       "editing": "Ариашамҭа: $1",
+       "searchresults-title": "Аҧшаара «$1»",
+       "preferences": "Архиарақәа",
+       "mypreferences": "Архиарақәа",
+       "searchresultshead": "Аҧшаара",
+       "yourlanguage": "Абызшәа:",
+       "prefs-signature": "Анапынҵамҭа",
+       "group-user": "Алахәылацәа",
+       "group-user-member": "{{GENDER:$1|алахәыла}}",
+       "grouppage-sysop": "{{ns:project}}:Администраторцәа",
+       "recentchanges": "Арҽеира ҿыцқәа",
+       "recentchanges-legend-newpage": "$1 — адаҟьа ҿыц",
+       "newpageletter": "Ҿ",
+       "recentchangeslinked": "Еимадоу ариашарақәа",
+       "recentchangeslinked-feed": "Еимадоу ариашарақәа",
+       "recentchangeslinked-toolbox": "Еимадоу ариашарақәа",
+       "upload": "Афаил аҭагалара",
+       "filehist-user": "Алахәыла",
+       "randompage": "Машәырлатәи аҩымҭа",
+       "brokenredirects-edit": "ариашамҭа",
+       "newpages-username": "Алахәыла:",
+       "move": "Ахьӡ аҧсахра",
+       "movethispage": "Ахьӡ аҧсахра ари адаҟьа",
+       "specialloguserlabel": "Алахәыла:",
+       "linksearch-ok": "Аҧшаара",
+       "watchlist": "Ашклаҧшра асна",
+       "mywatchlist": "Ашклаҧшра асна",
+       "restriction-edit": "Ариашамҭа",
+       "mycontris": "Салагала",
+       "contribsub2": "Алагала $1 ($2)",
+       "sp-contributions-talk": "ахцәажәара",
+       "sp-contributions-submit": "Аҧшаара",
+       "whatlinkshere": "Арахьтәи ахьарҧшқәа",
+       "whatlinkshere-page": "Адаҟьа:",
+       "contribslink": "алагала",
+       "movearticle": "Ахьӡ аҧсахра:",
+       "allmessages-language": "Абызшәа:",
+       "ilsubmit": "Аҧшаара",
+       "namespacesall": "зегьы",
+       "monthsall": "зегьы",
+       "fileduplicatesearch-submit": "Аҧшаара",
+       "specialpages": "Цастәи адаҟьақәа",
+       "specialpages-group-login": "Урдырра / Арегистрациара"
 }
index f9e54ae..89638d5 100644 (file)
        "passwordreset-emailtitle": "Teuneurang nan ureueng ngui bak {{SITENAME}}",
        "passwordreset-emailelement": "Nan ureuëng ngui: $1\nLageuëm rahsia sijamong: $2",
        "changeemail": "Gantoe alamat surat-e",
-       "changeemail-header": "Gantoe alamat surat-e",
        "changeemail-no-info": "Droeneuh suwah neutamöng mangat jeuet neu'eu laman nyoe",
        "changeemail-oldemail": "Alamat surat-e jinoe:",
        "changeemail-newemail": "Alamat surat-e barô:",
        "changeemail-none": "(hana)",
        "changeemail-password": "Lageuem rahsia {{SITENAME}} droeneuh:",
        "changeemail-submit": "Gantoe surat-e",
-       "changeemail-cancel": "Peubateue",
        "bold_sample": "Rakam teubai",
        "bold_tip": "Haraih teubai",
        "italic_sample": "Rakam singèt naseukah nyoë",
        "search-interwiki-more": "(lom)",
        "searchrelated": "meusambat",
        "searchall": "ban dum",
-       "showingresultsheader": "{{PLURAL:$5|Hase '''$1''' nibak '''$3'''|Hase '''$1 - $2''' nibak '''$3'''}} keu '''$4'''",
        "search-nonefound": "Hana hasé nyang paih lagèë neulakèë",
        "powersearch-legend": "Mita lanjut",
        "powersearch-ns": "Mita bak ruweuëng nan:",
        "uncategorizedtemplates": "Seunaleuëk hana kawan",
        "unusedcategories": "Kawan hana geungui",
        "unusedimages": "Beureukaih hana geungui",
-       "popularpages": "Laman jithèë",
        "wantedcategories": "Kawan geuh'eut",
        "wantedpages": "Laman geuh‘eut",
        "wantedpages-badtitle": "Nan hana sah lam kawan hasé: $1",
        "pager-older-n": "{{PLURAL:$1|1 leubèh awai|$1 leubèh awai}}",
        "booksources": "Nè kitab",
        "booksources-search-legend": "Mita bak nè kitab",
-       "booksources-go": "Mita",
        "specialloguserlabel": "Ureuëng ngui:",
        "speciallogtitlelabel": "Sasaran (nan atawa ureuëng ngui):",
        "log": "Log",
        "watchthispage": "Kalön ôn nyoë",
        "unwatch": "Bateuë kalön",
        "watchlist-details": "{{PLURAL:$1|$1 ôn|$1 ôn}} geukalön, hana kira ôn peugah haba.",
-       "wlshowlast": "Peudeuh $1 jeum $2 uroë $3 seuneulheuëh",
+       "wlshowlast": "Peudeuh $1 jeum $2 uroë  seuneulheuëh",
        "watchlist-options": "Peuniléh dapeuta kalön",
        "watching": "Kalön...",
        "unwatching": "Hana kalön...",
        "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",
-       "watchlistall2": "ban dum",
        "namespacesall": "ban dum",
        "monthsall": "ban dum",
        "recreate": "Peugöt ulang",
index 32b7b8c..cb582a1 100644 (file)
        "passwordreset-emailsent-capture": "أرسل بريد إلكتروني تذكيري وهو معروض بالأسفل.",
        "passwordreset-emailerror-capture": "ولّد بريد إلكتروني تذكيري وهو معروض بالأسفل لكن فشل إرساله للمستخدم: $1",
        "changeemail": "تغيير عنوان البريد الإلكتروني",
-       "changeemail-header": "تغيير عنوان البريد الإلكتروني للحساب",
        "changeemail-text": "أكمل هذا النموذج لتغيير عنوان البريد الإلكتروني. سوف تحتاج إلى إدخال كلمة السر الخاصة بك لتأكيد هذا التغيير.",
        "changeemail-no-info": "يجب تسجيل الدخول للوصول إلى هذه الصفحة مباشرة.",
        "changeemail-oldemail": "عنوان البريد الإلكتروني الحالي:",
        "changeemail-newemail": "عنوان البريد الإلكتروني الجديد:",
        "changeemail-none": "(لا شيء)",
        "changeemail-submit": "غيّر البريد الإلكتروني",
-       "changeemail-cancel": "ifsa5",
        "bold_sample": "نص غليظ",
        "bold_tip": "نص غليظ",
        "italic_sample": "نص مائل",
        "mergehistory-same-destination": "صفحتا المصدر والهدف لا يمكن أن تكونا نفس الشيء",
        "mergehistory-reason": "السبب:",
        "mergelog": "سجل الدمج",
-       "pagemerge-logentry": "دمج [[$1]] إلى [[$2]] (المراجعات حتى $3)",
        "revertmerge": "إلغاء الدمج",
        "mergelogpagetext": "بالأسفل قائمة بأحدث عمليات الدمج لتاريخ صفحة ما إلى أخرى.",
        "history-title": " «$1»: تاريخ المراجعة",
        "search-suggest": "هل كنت تقصد: $1",
        "searchrelated": "مرتبطة",
        "searchall": "Elkol",
-       "showingresultsheader": "{{PLURAL:$5|النتيجة '''$1''' من'''$3'''|النتائج '''$1 - $2''' من'''$3'''}} ل'''$4'''",
        "search-nonefound": "لا توجد نتائج تطابق الاستعلام.",
        "mypreferences": "تفضيلاتي",
        "youremail": "البريد:",
        "pager-older-n": "{{PLURAL:$1|أقدم 1|أقدم $1}}",
        "booksources": "مصادر كتاب",
        "booksources-search-legend": "البحث عن مصادر الكتب",
-       "booksources-go": "اذهب",
        "log": "سجلات",
        "allpages": "kol ess'afa7at",
        "allarticles": "kol ess'afa7at",
        "watch": "راقب",
        "unwatch": "أوقف المراقبة",
        "watchlist-details": "{{PLURAL:$1||صفحة واحدة|صفحتان|$1 صفحات|$1 صفحة}} في قائمة مراقبتك، بدون عد صفحات النقاش.",
-       "wlshowlast": "عرض آخر $1 ساعات $2 أيام $3",
+       "wlshowlast": "عرض آخر $1 ساعات $2 أيام",
        "watchlist-options": "خيارات قائمة المراقبة",
        "actioncomplete": "انتهاء العملية",
        "actionfailed": "الفعل فشل",
        "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",
-       "watchlistall2": "الكل",
        "namespacesall": "الكل",
        "monthsall": "الكل",
        "watchlistedit-clear-explain": "Elɛanawin lkol bech yetnaħaw mel'lista mteɛek",
index 3db54fb..70c29aa 100644 (file)
        "otherlanguages": "Ander tale",
        "redirectedfrom": "(Aangestuur vanaf $1)",
        "redirectpagesub": "Aanstuurblad",
+       "redirectto": "Aanstuur na:",
        "lastmodifiedat": "Die bladsy is laas op $1 om $2 bygewerk.",
        "viewcount": "Hierdie bladsy is al {{PLURAL:$1|keer|$1 kere}} aangevra.",
        "protectedpage": "Beskermde bladsy",
        "hidetoc": "versteek",
        "collapsible-collapse": "Vou toe",
        "collapsible-expand": "Vou oop",
+       "confirmable-confirm": "Is {{GENDER:$1|u}} seker?",
+       "confirmable-yes": "Ja",
+       "confirmable-no": "Nee",
        "thisisdeleted": "Wys of herstel $1?",
        "viewdeleted": "Bekyk $1?",
        "restorelink": "{{PLURAL:$1|die geskrapte wysiging|$1 geskrapte wysigings}}",
        "passwordreset-emailsent-capture": "'n E-pos vir die herstel van 'n wagwoord is gestuur. Dit word hieronder vertoon.",
        "passwordreset-emailerror-capture": "'n E-pos vir die herstel van 'n wagwoord is saamgestel. Dit word hieronder vertoon. Die uitstuur daarvan na die {{GENDER:$2|gebruiker}} het egter gefaal: $1",
        "changeemail": "Wysig E-posadres",
-       "changeemail-header": "Wysig rekening se e-posadres",
        "changeemail-text": "Voltooi die vorm om u e-posadres te verander. U sal u wagwoord moet insleutel om die verandering te bevestig.",
        "changeemail-no-info": "U moet aangemeld wees om regstreeks toegang tot die bladsy te kry.",
        "changeemail-oldemail": "Huidige e-posadres:",
        "changeemail-none": "(geen)",
        "changeemail-password": "U wagwoord vir {{SITENAME}}:",
        "changeemail-submit": "Wysig E-posadres",
-       "changeemail-cancel": "Kanselleer",
        "resettokens-token-label": "$1 (huidige waarde: $2)",
        "bold_sample": "Vetgedrukte teks",
        "bold_tip": "Vetdruk",
        "mergehistory-same-destination": "Die oorsprong en bestemming kan nie dieselfde wees nie",
        "mergehistory-reason": "Rede:",
        "mergelog": "Versmeltingslogboek",
-       "pagemerge-logentry": "versmelt [[$1]] met [[$2]] (weergawes tot en met $3)",
        "revertmerge": "Samesmelting ongedaan maak",
        "mergelogpagetext": "Hieronder is 'n lys van die mees onlangse versmeltings van een bladsy se geskiedenis na 'n ander.",
        "history-title": "$1: weergawegeskiedenis",
        "searchrelated": "verwante",
        "searchall": "alle",
        "showingresults": "Hier volg {{PLURAL:$1|'''1''' resultaat|'''$1''' resultate}} vanaf #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Resultaat '''$1''' van '''$3'''|Resultate '''$1 - $2''' van '''$3'''}} vir '''$4'''",
        "search-nonefound": "Daar is geen resultate vir u soekopdrag nie.",
        "powersearch-legend": "Gevorderde soektog",
        "powersearch-ns": "Soek in naamruimtes:",
        "randomincategory": "Lukrake bladsy in die kategorie",
        "randomincategory-invalidcategory": "\"$1\" is nie 'n geldige kategorienaam nie.",
        "randomincategory-nopages": "Daar is geen bladsye in kategorie [[:Category:$1|$1]].",
-       "randomincategory-selectcategory": "Kry 'n lukrake bladsy uit hierdie kategorie: $1 $2.",
-       "randomincategory-selectcategory-submit": "Gaan",
+       "randomincategory-category": "Kategorie:",
        "randomredirect": "Lukrake aanstuur",
        "randomredirect-nopages": "Daar is geen aansture in naamruimte \"$1\" nie.",
        "statistics": "Statistieke",
        "statistics-header-pages": "Bladsystatistiek",
        "statistics-header-edits": "Wysigingstatistiek",
-       "statistics-header-views": "Wys statistieke",
        "statistics-header-users": "Gebruikerstatistiek",
        "statistics-header-hooks": "Ander statistieke",
        "statistics-articles": "Inhoudelike bladsye",
        "statistics-files": "Opgelaaide lêers",
        "statistics-edits": "Wysigings sedert {{SITENAME}} begin is",
        "statistics-edits-average": "Gemiddelde wysigings per bladsy",
-       "statistics-views-total": "Totale aantal bladsye vertoon",
-       "statistics-views-total-desc": "Die wys van nie-bestaande bladsye en spesiale bladsye is nie ingesluit nie",
-       "statistics-views-peredit": "Bladsye besigtig per wysiging",
        "statistics-users": "Geregistreerde [[Special:ListUsers|gebruikers]]",
        "statistics-users-active": "Aktiewe gebruikers",
        "statistics-users-active-desc": "Gebruikers wat in die afgelope {{PLURAL:$1|dag|$1 dae}} 'n handeling uitgevoer het",
-       "statistics-mostpopular": "Mees bekykte bladsye",
        "pageswithprop": "Blaaie met 'n bladsy-eienskap",
        "pageswithprop-legend": "Blaaie met 'n bladsy-eienskap",
        "pageswithprop-text": "Hierdie bladsy lys blaaie met 'n bepaalde blady-eienskap.",
        "uncategorizedtemplates": "Ongekategoriseerde sjablone",
        "unusedcategories": "Ongebruikte kategorieë",
        "unusedimages": "Ongebruikte lêers",
-       "popularpages": "Gewilde bladsye",
        "wantedcategories": "Gesoekte kategorieë",
        "wantedpages": "Gesoekte bladsye",
        "wantedpages-badtitle": "Ongeldige bladsynaam in resultate: $1",
        "querypage-disabled": "Hierdie spesiale bladsy is afgeskakel om werkverrigting te verbeter (bediener is oorlaai).",
        "booksources": "Boekbronne",
        "booksources-search-legend": "Soek vir boekbronne",
-       "booksources-go": "Soek",
        "booksources-text": "Hieronder is 'n lys van webtuistes wat nuwe en gebruikte boeke verkoop, en dalk meer inligting oor die boeke waarna u soek kan bevat:",
        "booksources-invalid-isbn": "Die ingevoerde ISBN-kode blyk asof dit ongeldig is; maak asseblief seker dat u dit sonder fout oorgekopiëer het vanaf die oorspronklike bron.",
        "specialloguserlabel": "Uitvoerende gebruiker:",
        "wlheader-enotif": "E-pos kennisgewings is aangeskakel.",
        "wlheader-showupdated": "Bladsye wat verander is sedert u hulle laas besoek het word in '''vetdruk''' uitgewys.",
        "wlnote": "Hier volg die laaste {{PLURAL:$1|verandering|'''$1''' veranderings}} binne die laaste {{PLURAL:$2|uur|'''$2''' ure}}, soos vanaf $3 om $4.",
-       "wlshowlast": "Wys afgelope $1 ure, $2 dae of $3",
+       "wlshowlast": "Wys afgelope $1 ure, $2 dae of",
        "watchlist-options": "Opsies vir dophoulys",
        "watching": "Plaas op dophoulys...",
        "unwatching": "Verwyder van dophoulys...",
        "ipb-unblock-addr": "Deblokkeer $1",
        "ipb-unblock": "Deblokkeer 'n gebruiker of IP-adres",
        "ipb-blocklist": "Wys bestaande blokkades",
-       "ipb-blocklist-contribs": "Bydraes van $1",
+       "ipb-blocklist-contribs": "Bydraes van {{GENDER:$1|$1}}",
        "unblockip": "Maak IP-adres oop",
        "unblockiptext": "Gebruik die vorm hier onder om skryftoegang te herstel vir 'n voorheen geblokkeerde IP-adres.",
        "ipusubmit": "Hef blokkade op",
        "import": "Voer bladsye in",
        "importinterwiki": "Transwiki-importeer",
        "import-interwiki-text": "Kies 'n wiki en bladsynaam om te importeer.\nWeergawe- en outeursinligting word sodoende bewaar.\nAlle transwiki-laaie word opgeteken in die [[Special:Log/import|invoer-logboek]].",
-       "import-interwiki-source": "Bronwiki/bladsy:",
+       "import-interwiki-sourcewiki": "Bronwiki:",
+       "import-interwiki-sourcepage": "Bronbladsy:",
        "import-interwiki-history": "Kopieer ook volledige geskiedenis van hierdie bladsy",
        "import-interwiki-templates": "Sluit alle sjablone in",
        "import-interwiki-submit": "Importeer",
        "pageinfo-robot-policy": "Status vir soekenjins",
        "pageinfo-robot-index": "Toegestaan",
        "pageinfo-robot-noindex": "Nie toegestaan",
-       "pageinfo-views": "Aantal kere gewys",
        "pageinfo-watchers": "Aantal dophouers",
        "pageinfo-few-watchers": "Minder as {{PLURAL:$1|dophouer|$1 dophouers}}",
        "pageinfo-redirects-name": "Aantal aansture na die bladsy",
        "newimages-summary": "Die spesiale bladsy wys die nuutste lêers wat na die wiki opgelaai is.",
        "newimages-legend": "Filter",
        "newimages-label": "Lêernaam (of deel daarvan):",
+       "newimages-showbots": "Wys robotte se oplaaie",
        "noimages": "Niks te sien nie.",
        "ilsubmit": "Soek",
        "bydate": "volgens datum",
        "exif-urgency-low": "Laag ( $1 )",
        "exif-urgency-high": "Hoog ($1)",
        "exif-urgency-other": "Gebruiker-gedefinieerde prioriteit ($1)",
-       "watchlistall2": "alles",
        "namespacesall": "alle",
        "monthsall": "alle",
        "confirmemail": "Bevestig e-posadres",
        "confirm-watch-top": "Voeg hierdie bladsy by u dophoulys?",
        "confirm-unwatch-button": "OK",
        "confirm-unwatch-top": "Verwyder hierdie bladsy van u dophoulys?",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← vorige bladsy",
        "imgmultipagenext": "volgende bladsy →",
        "imgmultigo": "Laat waai!",
        "duplicate-defaultsort": "Waarskuwing: Die standaardsortering \"$2\" kry voorrang voor die sortering \"$1\".",
        "version": "Weergawe",
        "version-extensions": "Uitbreidings geïnstalleer",
-       "version-skins": "Omslae",
+       "version-skins": "Geïnstalleerde omslae",
        "version-specialpages": "Spesiale bladsye",
        "version-parserhooks": "Ontlederhoeke",
        "version-variables": "Veranderlikes",
        "logentry-rights-rights": "$1 {{GENDER:$2|het}} groepslidmaatskap vir $3 van $4 na $5 gewysig",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|het}} groepslidmaatskap vir $3 gewysig",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|is}} outomaties van $4 na $5 gepromoveerd",
+       "logentry-upload-upload": "$1 het $3 {{GENDER:$2|opgelaai}}",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|het}} 'n nuwe weergawe van $3 opgelaai",
+       "logentry-upload-revert": "$1 het $3 {{GENDER:$2|opgelaai}}",
        "rightsnone": "(geen)",
+       "revdelete-summary": "redigeringsopsomming",
        "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:",
        "expand_templates_preview": "Voorskou",
        "pagelang-name": "Bladsy",
        "pagelang-language": "Taal",
-       "pagelang-select-lang": "Kies taal"
+       "pagelang-use-default": "Gebruik standaard taal",
+       "pagelang-select-lang": "Kies taal",
+       "right-pagelang": "Wysig die taal van die bladsy",
+       "log-name-pagelang": "Logboek van taalwysigings",
+       "log-description-pagelang": "Hierdie is 'n logboek van wysigings van die taal van bladsye.",
+       "logentry-pagelang-pagelang": "$1 wysig die taal van bladsy '$3' van $4 na $5.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 greep|$1 grepe}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME-tipe",
+       "mediastatistics-table-extensions": "Moontlike uitbreidings",
+       "mediastatistics-table-count": "Aantal lêers",
+       "mediastatistics-table-totalbytes": "Totale grootte",
+       "mediastatistics-header-unknown": "Onbekend",
+       "mediastatistics-header-audio": "Oudio",
+       "mediastatistics-header-video": "Video's"
 }
index 3d3cfad..cc09e7d 100644 (file)
@@ -1,66 +1,66 @@
 {
-    "@metadata": {
-        "authors": [
-            "Kasahorow",
-            "Natsubee",
-            "Paa.kwesi",
-            "Riches4christ"
-        ]
-    },
-    "tog-underline": "Twa lenk nyina ase:",
-    "tog-hideminor": "Suma nsesae a wɔakɔ so a wɔnnkyɛree koraa",
-    "tog-hidepatrolled": "Suma nsesae a wɔapatrole wɔn ndansa yi ara",
-    "tog-newpageshidepatrolled": "Suma nkrataafa a wɔapatrole wɔn fi krataafa-foforo lest no so",
-    "tog-extendwatchlist": "San list-nhwɛso no mu ama wo ehu nsesae nyinara a wɔakɔ so",
-    "tog-usenewrc": "Fa ndansa nsesae a woetu mpon fa di dwuma (wo hia JavaScript)",
-    "tog-numberheadings": "Ma ti-nsɛm no ara ankasa mma wɔn ho nɔmba",
-    "tog-showtoolbar": "Kyerɛ tulbaa a wɔde yɛ nsesa (wo hia JavaScript)",
-    "tog-editondblclick": "Sesa nkrataafa sɛ womia klik mpɛn mienu a (wo hia JavaScript)",
-    "sunday": "Kwasiada",
-    "monday": "Ɛdwoada",
-    "tuesday": "Ɛbenada",
-    "wednesday": "Wukuada",
-    "thursday": "Yawoada",
-    "friday": "Efiada",
-    "saturday": "Memeneda",
-    "january": "Ɔpɛpɔn",
-    "february": "Ɔgyefuo",
-    "march": "Ɔbenem",
-    "april": "Oforisuo",
-    "may_long": "Kɔtonimma",
-    "june": "Ayɛwohomumu",
-    "july": "Kutawonsa",
-    "august": "Ɔsannaa",
-    "september": "Ɛbɔ",
-    "october": "Ahinime",
-    "november": "Obubuo",
-    "december": "Ɔpenimma",
-    "listingcontinuesabbrev": "toa so",
-    "search": "Hwehwɛ",
-    "searchbutton": "Hwehwɛ",
-    "go": "Kɔ",
-    "searcharticle": "Kɔ",
-    "history": "Krataafa abakɔsɛm",
-    "history_short": "Abakɔsɛm",
-    "talkpagelinktext": "Kasa",
-    "talk": "Nkɔmbɔ",
-    "jumptosearch": "hwehwɛ",
-    "aboutsite": "Fa {{SITENAME}} ho",
-    "mainpage": "Krataafa Titiriw",
-    "editsection": "sesa",
-    "editsectionhint": "Sesa sɛkhyɛn: $1",
-    "red-link-title": "$1 (krataafa nni hɔ)",
-    "nstab-main": "kratafa",
-    "login": "Bra mu",
-    "nav-login-createaccount": "Bra mu / yɛ akawnt",
-    "userlogin": "Bra mu / yɛ akawnt",
-    "logout": "Pue",
-    "userlogout": "Pue",
-    "notloggedin": "Mmbaa mu",
-    "nologin": "Wo nni akawnt anaa? $1.",
-    "searchresultshead": "Hwehwɛ",
-    "hist": "abakɔsɛm",
-    "watch": "Hwɛ",
-    "sp-contributions-talk": "Kasa",
-    "contribslink": "ntoboa"
+       "@metadata": {
+               "authors": [
+                       "Kasahorow",
+                       "Natsubee",
+                       "Paa.kwesi",
+                       "Riches4christ"
+               ]
+       },
+       "tog-underline": "Twa lenk nyina ase:",
+       "tog-hideminor": "Suma nsesae a wɔakɔ so a wɔnnkyɛree koraa",
+       "tog-hidepatrolled": "Suma nsesae a wɔapatrole wɔn ndansa yi ara",
+       "tog-newpageshidepatrolled": "Suma nkrataafa a wɔapatrole wɔn fi krataafa-foforo lest no so",
+       "tog-extendwatchlist": "San list-nhwɛso no mu ama wo ehu nsesae nyinara a wɔakɔ so",
+       "tog-usenewrc": "Fa ndansa nsesae a woetu mpon fa di dwuma (wo hia JavaScript)",
+       "tog-numberheadings": "Ma ti-nsɛm no ara ankasa mma wɔn ho nɔmba",
+       "tog-showtoolbar": "Kyerɛ tulbaa a wɔde yɛ nsesa (wo hia JavaScript)",
+       "tog-editondblclick": "Sesa nkrataafa sɛ womia klik mpɛn mienu a (wo hia JavaScript)",
+       "sunday": "Kwasiada",
+       "monday": "Ɛdwoada",
+       "tuesday": "Ɛbenada",
+       "wednesday": "Wukuada",
+       "thursday": "Yawoada",
+       "friday": "Efiada",
+       "saturday": "Memeneda",
+       "january": "Ɔpɛpɔn",
+       "february": "Ɔgyefuo",
+       "march": "Ɔbenem",
+       "april": "Oforisuo",
+       "may_long": "Kɔtonimma",
+       "june": "Ayɛwohomumu",
+       "july": "Kutawonsa",
+       "august": "Ɔsannaa",
+       "september": "Ɛbɔ",
+       "october": "Ahinime",
+       "november": "Obubuo",
+       "december": "Ɔpenimma",
+       "listingcontinuesabbrev": "toa so",
+       "search": "Hwehwɛ",
+       "searchbutton": "Hwehwɛ",
+       "go": "Kɔ",
+       "searcharticle": "Kɔ",
+       "history": "Krataafa abakɔsɛm",
+       "history_short": "Abakɔsɛm",
+       "talkpagelinktext": "Kasa",
+       "talk": "Nkɔmbɔ",
+       "jumptosearch": "hwehwɛ",
+       "aboutsite": "Fa {{SITENAME}} ho",
+       "mainpage": "Krataafa Titiriw",
+       "editsection": "sesa",
+       "editsectionhint": "Sesa sɛkhyɛn: $1",
+       "red-link-title": "$1 (krataafa nni hɔ)",
+       "nstab-main": "kratafa",
+       "login": "Bra mu",
+       "nav-login-createaccount": "Bra mu / yɛ akawnt",
+       "userlogin": "Bra mu / yɛ akawnt",
+       "logout": "Pue",
+       "userlogout": "Pue",
+       "notloggedin": "Mmbaa mu",
+       "nologin": "Wo nni akawnt anaa? $1.",
+       "searchresultshead": "Hwehwɛ",
+       "hist": "abakɔsɛm",
+       "watch": "Hwɛ",
+       "sp-contributions-talk": "Kasa",
+       "contribslink": "ntoboa"
 }
index 6399f44..4ed68bc 100644 (file)
        "mergehistory-comment": "U bashkua [[:$1]] në [[:$2]]: $3",
        "mergehistory-same-destination": "Burimi dhe faqja e përcaktimit nuk mund të jenë të njëjta",
        "mergelog": "Regjistri i bashkimeve",
-       "pagemerge-logentry": "u bashkua [[$1]] në [[$2]] (versione deri më $3)",
        "revertmerge": "Çkape",
        "mergelogpagetext": "Më poshtë jepet një listë e bashkimeve së fundmi nga historiku i një faqeje në historikun e një faqeje tjetër.",
        "history-title": "Historiku i redaktimeve për \"$1\"",
        "searchrelated": "të ngjajshme",
        "searchall": "tâna",
        "showingresults": "Mâ poshtë {{PLURAL:$1|tregohet '''1''' rezultat|tregohen '''$1''' rezultate}} që nisin me #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Rezultati '''$1''' prej '''$3'''|Rezultatet '''$1 - $2''' prej '''$3'''}} për '''$4'''",
        "search-nonefound": "Nuk ka rezultate që përputhen me kërkesën.",
        "powersearch-legend": "Kërkimi i detajshëm",
        "powersearch-ns": "Kërkimi në hapësina:",
        "pager-older-n": "{{PLURAL:$1|mâ e vjetër 1|mâ të vjetra $1}}",
        "booksources": "Burime librash",
        "booksources-search-legend": "Kërkim në burime librash",
-       "booksources-go": "Shko",
        "log": "Regjistrat",
        "allpages": "Tâna faqet",
        "prevpage": "Faqja paraprake ($1)",
        "watchthispage": "Mbikëqyr këtë faqe",
        "unwatch": "Çmbikqyre",
        "watchlist-details": "{{PLURAL:$1|$1 faqe|$1 faqe}} në listën tuej të mbikëqyrjes, pa i numrue faqet e diskutimit.",
-       "wlshowlast": "Trego $1 orët $2 ditët $3 e fundit",
+       "wlshowlast": "Trego $1 orët $2 ditët  e fundit",
        "watchlist-options": "Opcionet e listës së mbikëqyrjes",
        "watching": "Tuj mbikqyrë...",
        "unwatching": "Tuj çmbikqyrë...",
        "metadata-expand": "Tregoji detajet",
        "metadata-collapse": "Mshefi detajet",
        "metadata-fields": "Fushat EXIF metadata që listohen në këtë mesazh do të përfshihen në faqen e figurës kur palohet tabela e metadatave.\nTjerat kanë me mbetë të mshefuna.\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",
-       "watchlistall2": "krejt",
        "namespacesall": "krejt",
        "monthsall": "krejt",
        "watchlisttools-view": "Shihi ndryshimet përkatëse",
        "revdelete-restricted": "u vendosën kufizime për administruesit",
        "revdelete-unrestricted": "u hoqën kufizimet për administruesit",
        "rightsnone": "(asgjë)",
+       "revdelete-summary": "përmbledhja redaktimit",
        "searchsuggest-search": "Kërkim",
        "searchsuggest-containing": "përmban ..."
 }
index 1ff713b..b74b682 100644 (file)
        "passwordreset-emailsent-capture": "የማስታወሻ ኢ-ሜል ተልኳል፤ ከዚህም ታች ይታያል።",
        "passwordreset-emailerror-capture": "የማስታወሻ ኢ-ሜል ተልኳል፤ ከዚህም ታች ይታያል፤ ነገር ግን ወደ ተጠቃሚው ለመላክ ስንል አልተከናወነም፡",
        "changeemail": "ኢ-ሜል አድራሻዎን ለመቀይር",
-       "changeemail-header": "የአባልነትዎን ኢ-ሜል አድራሻ ለመቀይር",
        "changeemail-text": "ኢ-ሜል አድራሻዎን ለመቀይር ይህን ማመልከቻ ጨርስ። ለውጡን ለማረጋገጥ፣ መግቢያ ቃልዎን ማስገባት አስፈላጊ ነው።",
        "changeemail-no-info": "ይህንን ገጽ በቀጥታ ለማግኘት አስቀድሞ መግባት ያስፈልጋል።",
        "changeemail-oldemail": "የቆየው ኢ-ሜል አድራሻዎ፦",
        "changeemail-none": "(የለም)",
        "changeemail-password": "የ{{SITENAME}} መግቢያ ቃልዎ፦",
        "changeemail-submit": "አድራሻዎን ለመቀይር",
-       "changeemail-cancel": "ይቅር",
        "bold_sample": "ጉልህ ፊደላት",
        "bold_tip": "በጉልህ ፊደላት ይጻፍ",
        "italic_sample": "ያንጋደደ ፊደላት",
        "mergehistory-same-destination": "መነሻና መድረሻ ገጾች አንድላይ ሊሆኑ አይቻልም",
        "mergehistory-reason": "ምክንያቱ፦",
        "mergelog": "የመዋሐድ መዝገብ",
-       "pagemerge-logentry": "[[$1]]ን ወደ [[$2]] አዋሐደ (እትሞች እስከ $3 ድረስ)",
        "revertmerge": "መዋሐዱን ለመገልበጥ",
        "mergelogpagetext": "የአንድ ገጽ ታሪክ ወደ ሌላው ሲዋሐድ ከዚህ ታች ያለው ዝርዝር ያሳያል።",
        "history-title": "የ«$1» እትሞች ታሪክ",
        "searchrelated": "የተዛመደ",
        "searchall": "ሁሉ",
        "showingresults": "ከ ቁ.#<b>$2</b> ጀምሮ እስከ <b>$1</b> ውጤቶች ድረስ ከዚህ በታች ይታያሉ።",
-       "showingresultsheader": "{{PLURAL:$5|ከ'''$3''' ውጤት ውስጥ '''$1'''|ከ'''$3''' ውጤቶች ውስጥ ከ'''$1''' እስከ '''$2'''}} ለ'''$4'''",
        "search-nonefound": "ለጥያቄው ምንም የሚስማማ ውጤት አልተገኘም።",
        "powersearch-legend": "ተጨማሪ ፍለጋ",
        "powersearch-ns": "በነዚሁ ክፍለ-ዊኪዎች ይፈልግ:",
        "recentchanges": "በቅርብ ጊዜ የተለወጡ",
        "recentchanges-legend": "የቅርብ ለውጥ አማራጮች፦",
        "recentchanges-summary": "በዚሁ ገጽ ላይ በቅርብ ጊዜ የወጡ አዳዲስ ለውጦች ለመከታተል ይችላሉ።",
+       "recentchanges-noresult": "ለዚሁ ጥያቄ በተሰጠው ወቅት ውስጥ  አንዳችም ለውጥ አልነበረም።",
        "recentchanges-feed-description": "በዚህ ዊኪ ላይ በቅርብ ግዜ የተለወጠውን በዚሁ feed መከታተል ይችላሉ",
        "recentchanges-label-newpage": "ይኸው ለውጥ አዲስ ገጽ ፈጠረ።",
        "recentchanges-label-minor": "ይህ ለውጥ ጥቃቅን ነው።",
        "statistics-users": "አባልነት የገቡ [[Special:ListUsers|ተጠቃሚዎች]]",
        "statistics-users-active": "ተግባራዊ ተጠቃሚዎች",
        "statistics-users-active-desc": "ባለፈው {{PLURAL:$1|ቀን|$1 ቀን}} ማንኛውንም ድርጊት የሠሩት ተጠቃሚዎች",
-       "statistics-mostpopular": "ከሁሉ የታዩት ገጾች",
        "doubleredirects": "ድርብ መምሪያ መንገዶች",
        "doubleredirectstext": "ይህ ድርብ መምሪያ መንገዶች ይዘርዘራል።\n\nድርብ መምሪያ መንገድ ካለ ወደ መጨረሻ መያያዣ እንዲሄድ ቢስተካከል ይሻላል።",
        "double-redirect-fixed-move": "[[$1]] ተዛውራልና አሁን ለ[[$2]] መምሪያ መንገድ ነው።",
        "uncategorizedtemplates": "ያልተመደቡ መለጠፊያዎች",
        "unusedcategories": "ባዶ መደቦች",
        "unusedimages": "ያልተያያዙ ፋይሎች",
-       "popularpages": "የሚወደዱ ገጾች",
        "wantedcategories": "ቀይ መያያዣዎች የበዙላቸው መደቦች",
        "wantedpages": "ቀይ መያያዣዎች የበዙላቸው አርእስቶች",
        "wantedfiles": "የተፈለጉ ፋይሎች",
        "booksources": "የመጻሕፍት ቤቶችና ሸጪዎች",
        "booksources-search-legend": "የመጽሐፍ ቦታ ፍለጋ",
        "booksources-isbn": "የመጽሐፉ ISBN #:",
-       "booksources-go": "ይሂድ",
        "booksources-text": "ከዚህ ታች ያሉት ውጭ መያያዦች መጻሕፍት ይሸጣሉ፤ ስለ ተፈለጉት መጻሕፍት ተጨማሪ መረጃ እዚያ እንደሚገኝ ይሆናል።",
        "specialloguserlabel": "ብዕር ስም፡",
        "speciallogtitlelabel": "አርዕስት፡",
        "wlheader-enotif": "የ-ኢሜል ማስታወቂያ እንዲሠራ ተደርጓል።",
        "wlheader-showupdated": "መጨረሻ ከጎበኟቸው ጀምሮ የተቀየሩት ገጾች በ'''ጉልህ ፊደላት''' ይታያሉ",
        "wlnote": "ባለፉት <b>$2</b> ሰዓቶች የተደረጉት $1 መጨረሻ ለውጦች እታች ይገኛሉ።",
-       "wlshowlast": "ያለፉት $1 ሰዓት፤ $2 ቀን፤ $3 ይታዩ።",
+       "wlshowlast": "ያለፉት $1 ሰዓት፤ $2 ቀን፤  ይታዩ።",
        "watchlist-options": "የዝርዝሩ ምርጫዎች",
        "watching": "እየተጨመረ ነው...",
        "unwatching": "እየተወገደ ነው...",
        "thumbnail_invalid_params": "ትክክለኛ ያልሆነ የናሙና ግቤት",
        "import": "ገጾች ከሌላ ዊኪ ለማስገባት",
        "importinterwiki": "ከሌላ ዊኪ ማስገባት",
-       "import-interwiki-source": "መነሻ ዊኪ/ገጽ:",
        "import-interwiki-history": "ለዚህ ገጽ የታሪክ ዕትሞች ሁሉ ለመቅዳት",
        "import-interwiki-submit": "ለማስገባት",
        "import-interwiki-namespace": "መድረሻ ክፍለ-ዊኪ:",
        "exif-iimcategory-spo": "ስፖርት",
        "exif-iimcategory-war": "ጦርነት፣ ግጭት ወይም ሁከት",
        "exif-urgency-high": "ከፍተኛ ($1)",
-       "watchlistall2": "ሁሉ",
        "namespacesall": "ሁሉ (all)",
        "monthsall": "ሁሉ",
        "confirmemail": "ኢ-ሜልዎን ለማረጋገጥ",
        "htmlform-selectorother-other": "ሌላ",
        "logentry-delete-delete": "$1 ገጹን $3 አጠፋ",
        "rightsnone": "(የለም)",
+       "revdelete-summary": "ማጠቃለያ",
        "feedback-cancel": "ይቅር",
        "searchsuggest-search": "ፈልግ",
        "searchsuggest-containing": "በመጣጥፎች ይዘት ለመፈልግ...",
index bc94329..ee38c93 100644 (file)
        "passwordreset-emailsent-capture": "Se le ha ninviau un recordatorio por correu electronico, que s'amuestra contino.",
        "passwordreset-emailerror-capture": "S'ha chenerau un recordatorio por correu electronico, que s'amuestra contino, pero o ninvío ta l'usuario ha fallau: $1",
        "changeemail": "Cambiar l'adreza de correu-e",
-       "changeemail-header": "Cambiar l'adreza de correu-e d'a cuenta",
        "changeemail-text": "Replene iste formulario ta cambiar a suya adreza de correu electronico. Habrá d'introducir a clau ta confirmar iste cambeo.",
        "changeemail-no-info": "Debe identificar-se como usuario ta poder acceder dreitament ta ista pachina.",
        "changeemail-oldemail": "Adreza de correu-e actual:",
        "changeemail-newemail": "No bi ha garra adreza de correu electronico",
        "changeemail-none": "(garra)",
        "changeemail-submit": "Cambiar adreza de correu-e",
-       "changeemail-cancel": "Cancelar",
        "bold_sample": "Texto en negreta",
        "bold_tip": "Texto en negreta",
        "italic_sample": "Texto en cursiva",
        "mergehistory-same-destination": "As pachinas d'orichen y destín han d'estar diferents",
        "mergehistory-reason": "Razón:",
        "mergelog": "Rechistro d'unions",
-       "pagemerge-logentry": "s'ha fusionato [[$1]] con [[$2]] (revisions dica o $3)",
        "revertmerge": "Desfer a fusión",
        "mergelogpagetext": "Contino s'amuestra una lista d'as pachinas más recients que os suyos historials s'han fusionato con o d'atra pachina.",
        "history-title": "Historial de versions de \"$1\"",
        "searchrelated": "relacionato",
        "searchall": "totz",
        "showingresults": "Contino se bi {{PLURAL:$1|amuestra '''1''' resultau|amuestran '''$1''' resultaus}} prencipiando por o numero '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Resultau '''$1''' de '''$3'''|Resultaus '''$1-$2''' de '''$3'''}} ta '''$4'''",
        "search-nonefound": "No s'ha trobato garra resultau que cumpla os criterios.",
        "powersearch-legend": "Busca abanzata",
        "powersearch-ns": "Mirar en os espacios de nombres:",
        "statistics": "Estatisticas",
        "statistics-header-pages": "Estatisticas de pachinas",
        "statistics-header-edits": "Estatisticas d'edicions",
-       "statistics-header-views": "Estatisticas de vesitas",
        "statistics-header-users": "Estatisticas d'usuarios",
        "statistics-header-hooks": "Atras estatisticas",
        "statistics-articles": "Pachinas de contenito",
        "statistics-files": "Fichers cargatos",
        "statistics-edits": "Edicions en pachinas dende que se debantó {{SITENAME}}",
        "statistics-edits-average": "Meya d'edicions por pachina",
-       "statistics-views-total": "Total de vesitas",
-       "statistics-views-total-desc": "No s'inclui as vesitas a pachinas inexistents ni a pachinas especials",
-       "statistics-views-peredit": "Vesitas por edición",
        "statistics-users": "[[Special:ListUsers|Usuarios]] rechistratos",
        "statistics-users-active": "Usuarios activos",
        "statistics-users-active-desc": "Usuarios que han feito qualsiquier acción en {{PLURAL:$1|o zaguer día|os zaguers $1 días}}",
-       "statistics-mostpopular": "Pachinas más vistas",
        "doubleredirects": "Reendreceras dobles",
        "doubleredirectstext": "En ista pachina s'amuestran as pachinas que son reendreceras enta atras pachinas reendrezatas.\nCada ringlera contién o vinclo t'a primer y segunda reendreceras, y tamién o destino d'a segunda reendrecera, que ye a ormino a pachina obchectivo \"reyal\" a la que a primer pachina habría d'endrezar.",
        "double-redirect-fixed-move": "S'ha tresladau [[$1]], agora ye una endrecera ta [[$2]]",
        "uncategorizedtemplates": "Plantillas sin categorizar",
        "unusedcategories": "Categorías sin emplegar",
        "unusedimages": "Imachens sin uso",
-       "popularpages": "Pachinas populars",
        "wantedcategories": "Categorías requiestas",
        "wantedpages": "Pachinas requiestas",
        "wantedpages-badtitle": "Títol no conforme en o conchunto de resultaus: $1",
        "querypage-disabled": "Ista pachina especial ye desactivata por motivos de rendimiento.",
        "booksources": "Fuents de libros",
        "booksources-search-legend": "Mirar fuents de libros",
-       "booksources-go": "Ir-ie",
        "booksources-text": "Contino ye una lista de vinclos ta atros puestos an que venden libros nuevos y usatos, talment bi haiga más información sobre os libros que ye mirando.",
        "booksources-invalid-isbn": "O numero d'ISBN dato pareix que no ye conforme; comprebe si no bi ha garra error en copiar d'a fuent orichinal.",
        "specialloguserlabel": "Fedor:",
        "wlheader-enotif": "A notificación por correu electronico ye activata",
        "wlheader-showupdated": "Las pachinas cambiadas dende a suya zaguer vesita s'amuestran en '''negreta'''",
        "wlnote": "Contino se i {{PLURAL:$1|amuestra o solo cambeo|amuestran os zaguers '''$1''' cambeos}} feitos en {{PLURAL:$2|a zaguer hora|as zagueras '''$2''' horas}}, o $3 a las $4.",
-       "wlshowlast": "Amostrar as zagueras $1 horas, $2 días u $3",
+       "wlshowlast": "Amostrar as zagueras $1 horas, $2 días u",
        "watchlist-options": "Opcions d'a lista de seguimiento",
        "watching": "Cosirando...",
        "unwatching": "Deixar de cosirar...",
        "import": "Importar pachinas",
        "importinterwiki": "Importación interwiki",
        "import-interwiki-text": "Trigue un wiki y un títol de pachina ta importar.\nAs calendatas d'as versions y os nombres d'os editors se preservarán.\nTodas as importacions interwiki se rechistran en o [[Special:Log/import|rechistro d'importacions]].",
-       "import-interwiki-source": "Wiki/pachina fuent:",
        "import-interwiki-history": "Copiar todas as versions de l'historial d'ista pachina",
        "import-interwiki-templates": "Incluir-ie todas as las plantillas",
        "import-interwiki-submit": "Importar",
        "simpleantispam-label": "Preba anti-spam.\n'''NO''' replene esto!",
        "pageinfo-title": "Información ta «$1»",
        "pageinfo-header-edits": "Edicions",
-       "pageinfo-views": "Numero de vistas",
        "pageinfo-watchers": "Numero d'usuarios que la cosiran",
        "pageinfo-edits": "Numero d'edicions",
        "pageinfo-authors": "Numero d'autors diferents",
        "exif-urgency-low": "Baixo ($1)",
        "exif-urgency-high": "Alto ($1)",
        "exif-urgency-other": "Prioridat definida por l'usuario ($1)",
-       "watchlistall2": "totz",
        "namespacesall": "totz",
        "monthsall": "totz",
        "confirmemail": "Confirmar adreza de correu-e",
        "logentry-newusers-create2": "$1 creyó una cuenta d'usuario $3",
        "logentry-newusers-autocreate": "S'ha creyau automaticament a cuenta $1",
        "rightsnone": "(garra)",
+       "revdelete-summary": "editar resumen",
        "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:",
index c3bcbf6..d176033 100644 (file)
        "statistics-articles": "Innunge trametas",
        "statistics-pages": "Trametas",
        "statistics-users-active": "Hwate brūcendas",
-       "statistics-mostpopular": "Gesawenoste trametas",
        "doubleredirects": "Twifealda edlǣdunga",
        "brokenredirects": "Gebrocena edlǣdunga",
        "brokenredirectstext": "Þā folgiendan edlǣdunga gāþ tō æfweardum trametum.",
        "specialpage-empty": "Nis þǣr nāht þe āh cȳðan þes tramet.",
        "lonelypages": "Ealdorlēase trametas",
        "unusedimages": "Īdela ymelan",
-       "popularpages": "Folclīce trametas",
        "wantedcategories": "Gewilnode floccas",
        "wantedpages": "Gewilnode trametas",
        "mostlinked": "Trametas mid þǣm mǣstan rīme hlencena",
        "pager-older-n": "{{PLURAL:$1|ieldre 1|ieldran $1}}",
        "booksources": "Bōcfruman",
        "booksources-search-legend": "Sēcan bōcfruman",
-       "booksources-go": "Gān",
        "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):",
        "unwatchthispage": "Ablinnan behealdunge",
        "watchlist-details": "{{PLURAL:$1|Þǣr is $1 tramet|Þǣr sind $1 trameta}} on þīnum behealdunggetæle, nā sunderlīce arīmedum mōtunga trametum.",
        "wlnote": "Niðer {{PLURAL:$1|is sēo nīwoste andwendung|sind þā nīwostan '''$1''' andwendunga}} in {{PLURAL:$2|þǣre latostan tīde|þǣm latostan '''$2''' tīda}}, fram: $3, $4.",
-       "wlshowlast": "Īwan þā nīwostan $1 tīda $2 daga $3",
+       "wlshowlast": "Īwan þā nīwostan $1 tīda $2 daga",
        "watchlist-options": "Behealdungtæles cyras",
        "watching": "Behealdende...",
        "unwatching": "Ablinnende behealdunge...",
        "exif-gpslongitude-e": "Ēast lengu",
        "exif-gpslongitude-w": "West lengu",
        "exif-gpsdirection-t": "Sōþ rihtung",
-       "watchlistall2": "eall",
        "namespacesall": "eall",
        "monthsall": "eall",
        "confirmemail_body": "Hwilchwega, gewēne þu of IP stōwe $1, hæfþ in namanbēc gestt ǣnne hordcleofan\n\"$2\" mid þissum e-ǣrendes naman on {{SITENAME}}n.\n\nTō āsēðenne þæt þes hordcleofa tō þē gebyraþ and tō openienne\ne-ǣrenda hwilcnessa on {{SITENAME}}n, opena þisne bend in þīnum webbscēawere:\n\n$3\n\nGif þis is *nā* þū, ne folga þisne bend.\n\n$5\n\nÞēos āsēðungrūn forealdaþ æt $4.",
        "tags-edit": "adihtan",
        "htmlform-submit": "Forþsendan",
        "htmlform-reset": "Undōn andwendunga",
-       "htmlform-selectorother-other": "Ōðer"
+       "htmlform-selectorother-other": "Ōðer",
+       "revdelete-summary": "ādihtscortnes"
 }
index 66d7617..1ecde6a 100644 (file)
        "pager-older-n": "{{PLURAL:$1|पुराना 1|पुरानॊ सीनी $1}}",
        "booksources": "पुस्तक स्रोत",
        "booksources-search-legend": "पुस्तक स्रोत खोजॊ",
-       "booksources-go": "जा",
        "log": "लॉग सूची",
        "allpages": "सब्भे पन्ना",
        "prevpage": "पिछला पन्ना ($1)",
        "watchthispage": "ई पन्ना ध्यानसूची में डालॊ",
        "unwatch": "ध्यान हटाबॊ",
        "watchlist-details": "वार्ता पन्ना केरॊ अलावा {{PLURAL:$1|$1 पन्ना|$1 पन्ने}} आपने के ध्यानसूची मॆं छै.",
-       "wlshowlast": "पिछला $1 घंटा $2 दिन $3 देखॊ",
+       "wlshowlast": "पिछला $1 घंटा $2 दिन  देखॊ",
        "watchlist-options": "ध्यानसूची विकल्प",
        "watching": "ध्यान दय रहलॊ छै...",
        "unwatching": "ध्यान हटाय रहलॊ छियै...",
        "metadata-expand": "अतिरिक्त जानकारी दिखाबॊ",
        "metadata-collapse": "विस्तारित जानकारी छुपाबॊ",
        "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",
-       "watchlistall2": "सब्भे",
        "namespacesall": "सब्भे",
        "monthsall": "सब्भे",
        "watchlisttools-view": "प्रासंगिक बदलाव देखॊ",
index 8453772..75bfc34 100644 (file)
@@ -45,7 +45,8 @@
                        "아라",
                        "Test Create account",
                        "Kuwaity26",
-                       "Calak"
+                       "Calak",
+                       "Omda4wady"
                ]
        },
        "tog-underline": "سطر تحت الوصلات:",
        "jumptonavigation": "تصفح",
        "jumptosearch": "ابحث",
        "view-pool-error": "عذرا، الخواديم منهكة حاليا.\nيحاول مستخدمون كثر الوصول إلى هذه الصفحة.\nمن فضلك تمهّل قليلا قبل محاولة الوصول إلى هذه الصفحة مجددا.\n\n$1",
+       "generic-pool-error": "عذرا، الخوادم مشغولة حاليا لوجود مستخدمون كثر يطلبون عرض هذا المورد. انتظر قليلا وأعد المحاولة.",
        "pool-timeout": "انتهت مهلة القفل",
        "pool-queuefull": "الطابور ملآن",
        "pool-errorunknown": "خطأ غير معروف",
        "hidetoc": "أخف",
        "collapsible-collapse": "أخف",
        "collapsible-expand": "أظهر",
+       "confirmable-confirm": "أأنت متأكد{{GENDER:$1||ة}}؟",
+       "confirmable-yes": "نعم",
+       "confirmable-no": "لا",
        "thisisdeleted": "عرض أو استرجاع $1؟",
        "viewdeleted": "عرض $1؟",
        "restorelink": "{{PLURAL:$1|$1 تعديل محذوف|تعديلا واحدا محذوفا|تعديلين محذوفين|$1 تعديلات محذوفة|$1 تعديلا محذوفا|$1 تعديل محذوف}}",
        "invalidtitle-knownnamespace": "عنوان غير صالح في النطاق «$2» مع نص «$3»",
        "invalidtitle-unknownnamespace": "عنوان غير صالح ذو نطاق غير معروف رقم $1 ونص «$2»",
        "exception-nologin": "غير مسجل الدخول",
-       "exception-nologin-text": "اÙ\84رجاء [[Special:Userlogin|تسجÙ\8aÙ\84 Ø§Ù\84دخÙ\88Ù\84]] Ù\84تتÙ\85Ù\83Ù\86 Ù\85Ù\86 Ø§Ù\84Ù\88صÙ\88Ù\84 Ù\84Ù\87Ø°Ù\87 Ø§Ù\84صÙ\81حة Ø£Ù\88 Ø£Ø¯Ø§Ø¡ Ù\87ذا Ø§Ù\84إجراء.",
+       "exception-nologin-text": "سجÙ\84 Ø§Ù\84دخÙ\88Ù\84 Ù\84Ù\84تÙ\85Ù\83Ù\86 Ù\85Ù\86 Ø¹Ø±Ø¶ Ù\87Ø°Ù\87 Ø§Ù\84صÙ\81حة Ø£Ù\88 Ø¥Ø¬Ø±Ø§Ø¡ Ù\87ذا Ø§Ù\84Ù\81عÙ\84.",
        "exception-nologin-text-manual": "الرجاء $1 لتتمكن من الوصول لهذه الصفحة أو أداء هذا الإجراء.",
        "virus-badscanner": "ضبط سيء: ماسح فيروسات غير معروف: ''$1''",
        "virus-scanfailed": "فشل المسح (كود $1)",
        "passwordreset-emailsent-capture": "أُرسل بريد إلكتروني لإعادة ضبط كلمة السر، وهو معروض بالأسفل.",
        "passwordreset-emailerror-capture": "تم توليد رسالة بريد إلكتروني لتصفير كلمة السر نصّه التالي، إلا أنه تعذّر إرسال الرّسالة إلى {{GENDER:$2|المستخدم|المستخدمة}}: $1",
        "changeemail": "تغيير عنوان البريد الإلكتروني",
-       "changeemail-header": "تغيير عنوان البريد الإلكتروني للحساب",
        "changeemail-text": "أكمل هذا النموذج لتغيير عنوان البريد الإلكتروني. سوف تحتاج إلى إدخال كلمة السر الخاصة بك لتأكيد هذا التغيير.",
        "changeemail-no-info": "يجب تسجيل الدخول للوصول إلى هذه الصفحة مباشرة.",
        "changeemail-oldemail": "عنوان البريد الإلكتروني الحالي:",
        "changeemail-none": "(لا شيء)",
        "changeemail-password": "كلمة سر {{SITENAME}} الخاصة بك:",
        "changeemail-submit": "غيّر البريد الإلكتروني",
-       "changeemail-cancel": "إلغاء",
        "changeemail-throttled": "أنت قمت بمحاولات تسجيل دخول كثيرة.\nمن فضلك انتظر $1 قبل المحاولة ثانية.",
        "resettokens": "غير المفاتيح",
        "resettokens-text": " يمكن تغيير المفاتيح من الاطلاع على البيانات الخصوصية المتعلقة بحسابك.\nغير المفاتيح إذا أطلعت عليها أحدهم عن طريف الخطأ أو إذا كان حسابك قد اخترق.",
        "parser-template-recursion-depth-warning": "تم تجاوز حد عمق فرد القوالب ($1)",
        "language-converter-depth-warning": "تم تخطي حد عمق محول اللغة ($1)",
        "node-count-exceeded-category": "تجاوزات تعداد العقد",
-       "node-count-exceeded-warning": "تجاوزت هذه الصفحة تعداد العقد",
+       "node-count-exceeded-category-desc": "الصفحة تتجاوز الحد الأقصى للعقد البرمجية.",
+       "node-count-exceeded-warning": "الصفحة تجاوزت الحد الأقصى للعقد البرمجية.",
        "expansion-depth-exceeded-category": "تجاوزات عمق التوسيع",
-       "expansion-depth-exceeded-category-desc": "هذا تصنيف للصفحات التي تتجاوز عمق التوسيع.",
+       "expansion-depth-exceeded-category-desc": "الصفحة تجاوزت الحد الأقصى لعمق التوسيع.",
        "expansion-depth-exceeded-warning": "الصفحة تجاوزت عمق التوسيع",
        "parser-unstrip-loop-warning": "حلقة معراة تم الكشف عنها",
        "parser-unstrip-recursion-limit": "تعدى حد العودية Unstrip  ($1)",
        "currentrev": "المراجعة الحالية",
        "currentrev-asof": "المراجعة الحالية بتاريخ $1",
        "revisionasof": "مراجعة $1",
-       "revision-info": "Ù\85راجعة $1 Ø¨Ù\88اسطة $2",
+       "revision-info": "Ù\86سخة $1 Ù\84Ù\84Ù\85ستخدÙ\85 {{GENDER:$6|$2}}$7",
        "previousrevision": "→ مراجعة أقدم",
        "nextrevision": "مراجعة أحدث ←",
        "currentrevisionlink": "المراجعة الحالية",
        "rev-deleted-event": "(فعل السجل تمت إزالته)",
        "rev-deleted-user-contribs": "[اسم المستخدم أو عنوان الأيبي تمت إزالته - التعديل مخفي من المساهمات]",
        "rev-deleted-text-permission": "'''حُذِفت''' مراجعة هذه الصفحة.\nيمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
+       "rev-suppressed-text-permission": "هذه النسخة قد <strong>أخفيت</strong> ([{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} تفاصيل].)",
        "rev-deleted-text-unhide": "'''حُذِفت''' مراجعة الصفحة هذه.\nيمكن العثور على تفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].\nمازال بإمكانك [$1 رؤية هذه المراجعة] إذا أردت المتابعة.",
        "rev-suppressed-text-unhide": "'''أُخفيت''' مراجعة الصفحة هذه.\nيمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].\nبإمكانك [$1 رؤية هذه المراجعة] إذا أردت المتابعة.",
        "rev-deleted-text-view": "'''حُذِفت''' مراجعة هذه الصفحة.\nيمكنك رؤيتها؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
        "revdelete-no-file": "الملف المحدد غير موجود.",
        "revdelete-show-file-confirm": "هل أنت متأكد أنك تريد رؤية مراجعة محذوفة للملف \"<nowiki>$1</nowiki>\" بتاريخ $2 الساعة $3؟",
        "revdelete-show-file-submit": "نعم",
+       "revdelete-selected-text": "{{PLURAL:$1|نسخة مختارة|نسخ مختارة}} ل[[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|حدث السجل المختار|أحداث السجل المختارة}}:",
        "revdelete-text-others": "سيتمكن الإداريون الآخرون على {{SITENAME}} من الوصول إلى المحتوى المخفي وإلغاء حذفه مجددا من خلال ذات الواجهة ما لم تطبق قيود إضافية.",
        "revdelete-confirm": "الإداريون الآخرون في {{SITENAME}} سيظل بإمكانهم رؤية المحتوى المخفي ويمكنهم استرجاعه مجددا من خلال هذه الواجهة نفسها، مالم يتم وضع قيود إضافية.\nمن فضلك أكد أنك تنوي فعل هذا، وأنك تفهم العواقب، وأنك تفعل هذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].",
        "mergehistory-same-destination": "صفحتا المصدر والهدف لا يمكن أن تكونا نفس الشيء",
        "mergehistory-reason": "السبب:",
        "mergelog": "سجل الدمج",
-       "pagemerge-logentry": "دمج [[$1]] إلى [[$2]] (المراجعات حتى $3)",
        "revertmerge": "إلغاء الدمج",
        "mergelogpagetext": "بالأسفل قائمة بأحدث عمليات الدمج لتاريخ صفحة ما إلى أخرى.",
        "history-title": "تاريخ \"$1\"",
        "searchrelated": "مرتبطة",
        "searchall": "الكل",
        "showingresults": "معروض بالأسفل {{PLURAL:$1|'''1''' نتيجة|'''$1''' نتيجة}} بدءا من رقم '''$2'''.",
-       "showingresultsinrange": "معروض بالأسفل حتى {{PLURAL:$1|<strong>1</strong> نتيجة|<strong>$1</strong> نتائج}} في النطاق #<strong>$2</strong> إلى #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|النتيجة '''$1''' من'''$3'''|النتائج '''$1 - $2''' من'''$3'''}} ل'''$4'''",
+       "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": "بحث متقدم",
        "powersearch-ns": "بحث في النطاقات:",
        "prefs-files": "ملفات",
        "prefs-custom-css": "CSS مخصص",
        "prefs-custom-js": "جافاسكربت مخصص",
-       "prefs-common-css-js": "CSS أو جافاسكربت مشتركة لجميع المظاهر:",
+       "prefs-common-css-js": "سي إس إس وجافاسكربت مشترك لجميع المظاهر:",
        "prefs-reset-intro": "يمكنك استخدام هذه الصفحة لإعادة تفضيلاتك للحالة الافتراضية للموقع.\nلن تستطيع استرجاع الحالة السابقة.",
        "prefs-emailconfirm-label": "تأكيد البريد الإلكتروني:",
        "youremail": "البريد:",
        "userrights-lookup-user": "أدِر مجموعات المستخدم",
        "userrights-user-editname": "أدخل اسم مستخدم:",
        "editusergroup": "عدل مجموعات المستخدم",
-       "editinguser": "تغيير صلاحيات المستخدم '''[[User:$1|$1]]''' $2",
+       "editinguser": "تغيير صلاحيات {{GENDER:$1|المستخدم|المستخدمة}} '''[[User:$1|$1]]''' $2",
        "userrights-editusergroup": "تعديل مجموعات المستخدم",
        "saveusergroups": "احفظ مجموعات المستخدم",
        "userrights-groupsmember": "عضو في:",
        "randomincategory": "صفحة عشوائية في التصنيف",
        "randomincategory-invalidcategory": "\"$1\" ليس اسم تصنيف صالح.",
        "randomincategory-nopages": "لا توجد صفحات في التصنيف [[:Category:$1|$1]].",
+       "randomincategory-category": "التصنيف:",
+       "randomincategory-legend": "صفحة عشوائية في التصنيف",
        "randomredirect": "تحويلة عشوائية",
        "randomredirect-nopages": "لا توجد تحويلات في النطاق \"$1\".",
        "statistics": "إحصاءات",
        "statistics-header-pages": "إحصاءات الصفحات",
        "statistics-header-edits": "إحصاءات التعديلات",
-       "statistics-header-views": "إحصاءات المشاهدة",
        "statistics-header-users": "إحصاءات المستخدمين",
        "statistics-header-hooks": "إحصاءات أخرى",
        "statistics-articles": "صفحات المحتوى",
        "statistics-files": "الملفات المرفوعة",
        "statistics-edits": "تعديلات الصفحات منذ تنصيب {{SITENAME}}",
        "statistics-edits-average": "متوسط التعديلات لكل صفحة",
-       "statistics-views-total": "إجمالي المشاهدات",
-       "statistics-views-total-desc": "مشاهدات الصفحات غير الموجودة والصفحات الخاصة غير مشمولة.",
-       "statistics-views-peredit": "المشاهدات لكل تعديل",
        "statistics-users": "[[Special:ListUsers|مستخدمون]] مسجلون",
        "statistics-users-active": "مستخدمون نشطون",
        "statistics-users-active-desc": "المستخدمون الذين قاموا بفعل في آخر {{PLURAL:$1||يوم|يومين|$1 أيام|$1 يوماً|$1 يوم}}",
-       "statistics-mostpopular": "أكثر الصفحات مشاهدة",
        "pageswithprop": "صفحات مع خاصية الصفحة",
        "pageswithprop-legend": "صفحات مع خاصية الصفحة",
        "pageswithprop-text": "تسرد هذه الصفحة الصفحات التي تستخدم خاصية صفحة معينة.",
        "uncategorizedtemplates": "قوالب غير مصنفة",
        "unusedcategories": "تصنيفات غير مستخدمة",
        "unusedimages": "ملفات غير مستخدمة",
-       "popularpages": "صفحات مشهورة",
        "wantedcategories": "تصنيفات مطلوبة",
        "wantedpages": "صفحات مطلوبة",
        "wantedpages-badtitle": "عنوان غير صحيح في مجموعة النتائج: $1",
        "booksources": "مصادر كتاب",
        "booksources-search-legend": "البحث عن مصادر الكتب",
        "booksources-isbn": "ردمك:",
-       "booksources-go": "اذهب",
+       "booksources-search": "بحث",
        "booksources-text": "توجد أدناه قائمة بوصلات لمواقع أخرى تبيع الكتب الجديدة والمستعملة، أيضا يمكنك أن تحصل على معلومات إضافية عن الكتب التي تبحث عنها من هناك:",
        "booksources-invalid-isbn": "رقم ISBN المعطى لا يبدو صحيحا؛ تحقق من أخطاء النسخ من المصدر الأصلي.",
        "specialloguserlabel": "المؤدي:",
        "wlheader-enotif": "الإخطار بالبريد الإلكتروني مُفعّل.",
        "wlheader-showupdated": "الصفحات التي تم تحريرها بعد مطالعتك إياها آخر مرة عناوينها بالخط '''الغليظ'''",
        "wlnote": "بالأسفل {{PLURAL:$1|لا توجد تغييرات|التغيير الأخير|آخر تغييرين|آخر '''$1''' تغييرات|آخر '''$1''' تغييرا|آخر '''$1''' تغيير}} في {{PLURAL:$2||'''الساعة''' الماضية|'''الساعتين''' الماضيتين|ال'''$2''' ساعات الماضية|ال'''$2''' ساعة الماضية}} وفقاً ل$3، $4.",
-       "wlshowlast": "عرض آخر $1 ساعات $2 أيام $3",
+       "wlshowlast": "عرض آخر $1 ساعات $2 يوما",
        "watchlist-options": "خيارات قائمة المراقبة",
        "watching": "يراقب...",
        "unwatching": "إزالة المراقبة...",
        "contribsub2": "ل{{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "حساب المستخدم \"$1\" غير مسجل.",
        "nocontribs": "لم يتم العثور على تغييرات تطابق هذه المحددات.",
-       "uctop": "حالي",
+       "uctop": "(حالية)",
        "month": "من شهر (وأقدم):",
        "year": "من سنة (وأقدم):",
        "sp-contributions-newbies": "اعرض مساهمات الحسابات الجديدة فقط",
        "isimage": "وصلة ملف",
        "whatlinkshere-prev": "{{PLURAL:$1|السابق|ال$1 السابقة}}",
        "whatlinkshere-next": "{{PLURAL:$1|القادمة|ال$1 القادمة}}",
-       "whatlinkshere-links": "← وصلات",
+       "whatlinkshere-links": "وصلات",
        "whatlinkshere-hideredirs": "$1 التحويلات",
        "whatlinkshere-hidetrans": "$1 التضمينات",
        "whatlinkshere-hidelinks": "$1 الوصلات",
        "movepagetalktext": "صفحة النقاش المرفقة سيتم نقلها كذلك، '''إلا في حالة''':\n* توجد صفحة نقاش غير فارغة تحت العنوان الجديد، أو\n* قمت بإزالة اختيار الصندوق بالأسفل.\n\nوفي هذه الحالات، يجب عليك نقل أو دمج محتويات الصفحة يدويا، إذا رغب في ذلك.",
        "movearticle": "انقل الصفحة:",
        "moveuserpage-warning": "'''تحذير: أنت على وشك نقل صفحة مستخدم. من فضلك لاحظ أن الصفحة وحدها سوف تنقل وأن المستخدم لن يعاد تسميته.'''",
-       "movecategorypage-warning": "أنت على وشك نقل صفحة التصنيف إلى عنوان جديد؛ لن تنقل الصفحات المندرجة تحت التصنيف إلى العنوان الجديد.",
+       "movecategorypage-warning": "<strong>تحذير:</strong> أنت على وشك نقل صفحة التصنيف إلى عنوان جديد؛ <em>لن</em> تنقل الصفحات المندرجة تحت التصنيف إلى العنوان الجديد.",
        "movenologintext": "يجب أن تكون مستخدماً مسجلاً وأن  [[Special:UserLogin|تسجل دخولك]] لكي تنقل صفحة.",
        "movenotallowed": "أنت لا تمتلك الصلاحية لنقل الصفحات.",
        "movenotallowedfile": "أنت لا تمتلك الصلاحية لنقل الملفات.",
        "pageinfo-robot-policy": "فهرسة الروبوتات",
        "pageinfo-robot-index": "مسموحة",
        "pageinfo-robot-noindex": "غير مسموحة",
-       "pageinfo-views": "عدد المشاهدات",
        "pageinfo-watchers": "عدد المراقبين",
        "pageinfo-few-watchers": "أقل من {{PLURAL:$1||مراقب واحد|مراقبين اثنين|$1 مراقبين|$1 مراقباً|$1 مراقب}}",
        "pageinfo-redirects-name": "عدد التحويلات إلى هذه الصفحة",
        "exif-urgency-low": "منخفض ( $1 )",
        "exif-urgency-high": "عالي ( $1 )",
        "exif-urgency-other": "الأولوية محددة من قبل المستخدم ($1)",
-       "watchlistall2": "الكل",
        "namespacesall": "الكل",
        "monthsall": "الكل",
        "confirmemail": "تأكيد عنوان البريد الإلكتروني",
        "logentry-rights-rights-legacy": "{{GENDER:$2|غيّر|غيّرت}} $1 عضوية $3",
        "logentry-rights-autopromote": "تمت تلقائيا ترقية {{GENDER:$2|المستخدم|المستخدمة}} $1 من  $4 إلى $5",
        "rightsnone": "(لا شيء)",
+       "revdelete-summary": "ملخص التعديل",
        "feedback-bugornote": "إن كنت مستعدا لشرح  مشكلة تقنية بالتفصيل، رجاءا [$1 قدم تقريرا بالخلل].\nبخلاف ذلك، يمكنك أستخدام الطريقة الأسهل أسفله، سيتم إضافة تعليقك للصفحة \"[$3 $2]\"، بالإضافة إلى اسم المستخدم و نوع المتصفح الذي تستخدمه حاليا.",
        "feedback-subject": "الموضوع:",
        "feedback-message": "الرسالة:",
        "duration-centuries": "{{PLURAL:$1||قرن واحد|قرنان|$1 قرون|$1 قرنًا|$1 قرن}}",
        "duration-millennia": "{{PLURAL:$1||ألفية واحدة|ألفيتان|$1 ألفيات|$1 ألفية}}",
        "rotate-comment": "تدوير الصورة  {{PLURAL:$1||درجة واحدة|درجتان|$1 درجات|$1 درجة}} باتجاه عقارب الساعة",
-       "limitreport-title": "محلل سمات البيانات:",
+       "limitreport-title": "بيانات تحليلية",
        "limitreport-cputime": "زمن المعالجة المستغرق",
        "limitreport-cputime-value": "{{PLURAL:$1|أقل من ثانية|ثانية واحدة|ثانيتان|$1 ثوان|$1 ثانية}}",
        "limitreport-walltime": "الزمن الحقيقي المستغرق",
        "limitreport-walltime-value": "{{PLURAL:$1|أقل من ثانية|ثانية واحدة|ثانيتان|$1 ثوان|$1 ثانية}}",
-       "limitreport-ppvisitednodes": "زار Ø§Ù\84Ù\85عاÙ\84ج Ø¹Ù\82دة Ø¥Ø­ØµØ§Ø¡",
-       "limitreport-ppgeneratednodes": "أحدث Ø§Ù\84Ù\85عاÙ\84ج Ø¹Ù\82دة Ø¥Ø­ØµØ§Ø¡",
-       "limitreport-postexpandincludesize": "بعد ØªÙ\88سÙ\8aع Ø§Ù\84Ù\85ساحة Ø§Ù\84شاÙ\85Ù\84Ø©",
+       "limitreport-ppvisitednodes": "عدد Ø§Ù\84عÙ\82د Ø§Ù\84Ù\85عاÙ\84جة",
+       "limitreport-ppgeneratednodes": "عÙ\82د Ø²Ø§Ø±Ù\87ا Ø§Ù\84Ù\85عاÙ\84ج Ø§Ù\84Ù\85سبÙ\82",
+       "limitreport-postexpandincludesize": "حجÙ\85 ØªØ¶Ù\85Ù\8aÙ\86 Ø§Ù\84تÙ\88سÙ\8aعات",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|بايت}}",
-       "limitreport-templateargumentsize": "حجÙ\85 Ù\86Ù\82اش Ø§Ù\84Ù\82الب",
+       "limitreport-templateargumentsize": "حجÙ\85 Ù\85عطÙ\8aات Ø§Ù\84Ù\82Ù\88الب",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|بايت}}",
-       "limitreport-expansiondepth": "أكثر عمق توسعي",
-       "limitreport-expensivefunctioncount": "تحÙ\84Ù\8aÙ\84 Ø¥Ø­ØµØ§Ø¡ Ù\88ظÙ\8aÙ\81Ø© Ù\85Ù\83Ù\84Ù\81",
-       "expandtemplates": "فرد القوالب",
+       "limitreport-expansiondepth": "أعمق التوسيعات",
+       "limitreport-expensivefunctioncount": "دÙ\88اÙ\84 Ù\85Ø­Ù\84Ù\84Ø© Ù\85Ù\83Ù\84Ù\81Ø©",
+       "expandtemplates": "توسعة قالب",
        "expand_templates_intro": "تتعامل هذه الصفحة الخاصة مع نصوص الويكي وتقوم بفرد كل القوالب الموجودة به.\nوتقوم أيضا بفرد دوال القوالب مثل\n<code><nowiki>{{</nowiki>#language:…}}</code> and variables like <code><nowiki>{{</nowiki>CURRENTDAY}}</code>. حقيقةً، تقوم التعامل مع كل ما بين الأقواس المزدوجة.",
        "expand_templates_title": "عنوان صفحة هذا النص، لأجل معالجة {{FULLPAGENAME}} إلخ.:",
        "expand_templates_input": "النص المدخل:",
        "pagelang-select-lang": "اختر اللغة",
        "right-pagelang": "تغيير لغة الصفحة",
        "action-pagelang": "تغيير لغة الصفحة",
-       "log-name-pagelang": "تغيير سجل الصفحة"
+       "log-name-pagelang": "تغيير سجل الصفحة",
+       "mediastatistics-header-video": "مقاطع الفيديو",
+       "json-error-syntax": "خطأ صياغة"
 }
index 1a86697..5dde327 100644 (file)
        "mergehistory-comment": "ܚܒܛ [[:$1]] ܒ [[:$2]]: $3",
        "mergehistory-reason": "ܥܠܬܐ:",
        "mergelog": "ܣܓܠܐ ܕܚܒܛܐ",
-       "pagemerge-logentry": "ܚܒܛ [[$1]] ܒ [[$2]] (ܬܢܝܬ̈ܐ ܥܕܡܐ ܠ $3)",
        "revertmerge": "ܒܛܘܠ ܚܒܛܐ",
        "history-title": "\"$1\": ܬܫܥܝܬܐ ܕܬܢܝܬܐ",
        "difference-title": "«$1»: ܦܘܪܫܐ ܒܝܢܝ ܬܢܝܬ̈ܐ",
        "searchrelated": "ܐܚܝܢܝ̈ܐ",
        "searchall": "ܟܠ",
        "showingresults": "ܚܘܘܝܐ ܠܬܚܬ {{PLURAL:$1|'''1''' ܦܠܛܐ|'''$1''' ܦܠܛ̈ܐ}} ܫܪܐ ܡܢ ܡܢܝܢܐ '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|ܦܠܛܐ '''$1''' ܡܢ '''$3'''|ܦܠܛ̈ܐ '''$1 - $2''' ܡܢ '''$3'''}} ܠ'''$4'''",
        "search-nonefound": "ܠܝܬ ܦܠܛ̈ܐ ܐܘܝܢ̈ܐ ܠܗܢܐ ܒܨܝܐ.",
        "powersearch-legend": "ܒܨܝܐ ܡܬܩܕܡܢܐ",
        "powersearch-ns": "ܒܨܝ ܒܚܩܠܬ̈ܐ:",
        "statistics": "ܚܒܝܫܘܬ ܡܢܝܢܐ",
        "statistics-header-pages": "ܚܒܝܫܘܬ ܡܢܝܢ̈ܐ ܕܦܐܬܐ",
        "statistics-header-edits": "ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܫܘܚܠܦ̈ܐ",
-       "statistics-header-views": "ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܚܙܝܐ",
        "statistics-header-users": "ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܡܦܠܚܢܐ",
        "statistics-header-hooks": "ܚܒܝܫܘܬ ܡܢܝܢܐ ܐܚܪܢܐ",
        "statistics-articles": "ܦܐܬܬ̈ܐ ܕܚܒܝܫܬ̈ܐ",
        "statistics-pages": "ܦܐܬܬ̈ܐ",
        "statistics-edits": "ܫܘܚܠܦ̈ܐ ܕܦܐܬܬ̈ܐ ܡܢ ܫܘܪܝܐ ܕ {{SITENAME}}",
        "statistics-edits-average": "ܡܨܥܐ ܕܫܘܚܠܦ̈ܐ ܠܟܠ ܦܐܬܐ",
-       "statistics-views-total": "ܣܘܝܟܐ ܕܚܙܝܐ",
-       "statistics-views-peredit": "ܚܘܘܝ̈ܐ ܠܟܠ ܫܘܚܠܦܐ",
        "statistics-users": "[[Special:ListUsers|ܡܦܠܚܢ̈ܐ]] ܡܣܓܠ̈ܐ",
        "statistics-users-active": "ܡܦܠܚܢ̈ܐ ܙܪ̄ܝܙܐ",
-       "statistics-mostpopular": "ܦܐܬܬ̈ܐ ܚܙܝ̈ܐ ܝܬܝܪ ܡܢ ܟܠ",
        "pageswithprop": "ܦܐܬܬ̈ܐ ܥܡ ܕܝܠܝܬܐ ܕܦܐܬܐ",
        "pageswithprop-legend": "ܦܐܬܬ̈ܐ ܥܡ ܕܝܠܝܬܐ ܕܦܐܬܐ",
        "pageswithprop-prop": "ܫܡܐ ܕܕܝܠܝܬܐ",
        "uncategorizedtemplates": "ܩܠܒ̈ܐ ܠܐ ܣܕܝܪ̈ܐ",
        "unusedcategories": "ܣܕܪ̈ܐ ܠܐ ܦܠܝܚ̈ܐ",
        "unusedimages": "ܠܦܦ̈ܐ ܠܐ ܦܠܝܚ̈ܐ",
-       "popularpages": "ܦܐܬܬ̈ܐ ܡܫܡܗܬ̈ܐ",
        "wantedcategories": "ܣܕܪ̈ܐ ܒܥܝ̈ܐ",
        "wantedpages": "ܦܐܬܬ̈ܐ ܣܢܝܩܬ̈ܐ",
        "wantedfiles": "ܠܦܦ̈ܐ ܣܢܝܩ̈ܐ",
        "suppress": "ܚܝܘܪܐ",
        "booksources": "ܙܠ",
        "booksources-search-legend": "ܒܨܝ ܥܠ ܡܒܘܥ̈ܐ ܕܟܬܒ̈ܐ",
-       "booksources-go": "ܙܠ",
        "specialloguserlabel": "ܡܦܩܢܐ:",
        "speciallogtitlelabel": "ܢܘܦܐ (ܟܘܢܝܐ ܐܘ ܡܦܠܚܢܐ):",
        "log": "ܣܓܠ̈ܐ",
        "watchlist-details": "{{PLURAL:$1|$1 ܦܐܬܐ|$1 ܦܐܬܬ̈ܐ}} ܒܪ̈ܗܝܬܟ, ܫܒܘܩ ܡܢ ܦܐܬܬ̈ܐ ܕܡܡܠܠܐ.",
        "wlheader-showupdated": "ܦܐܬܬ̈ܐ ܕܐܫܬܚܠܦܢ ܡܢ ܒܬܪ ܣܘܥܪܢܐ ܐܚܪܝܐ ܠܗܝܢ ܡܬܓܠܚܢ ܒܣܪܛܐ '''ܚܠܝܡܐ'''",
        "wlnote": "ܠܬܚܬ {{PLURAL:$1|ܫܘܚܠܦܐ ܐܚܪܝܐ| '''$1''' ܫܘܚܠܦ̈ܐ ܐܚܪ̈ܝܐ}} {{PLURAL:$2|ܒܫܥܬܐ ܐܚܪܝܬܐ|'''$2''' ܒܫܥܬ̈ܐ ܐܚܪ̈ܝܬܐ}}, ܠܦܘܬ $3, $4.",
-       "wlshowlast": "ܚܘܝ $1 ܫܥܬ̈ܐ $2 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܐ $3",
+       "wlshowlast": "ܚܘܝ $1 ܫܥܬ̈ܐ $2 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܐ",
        "watchlist-options": "ܨܒܝܢܝܘܬ̈ܐ ܕܪ̈ܗܝܬܐ",
        "watching": "ܪܗܝܐ...",
        "unwatching": "ܠܚܝ ܪܗܝܐ...",
        "pageinfo-robot-policy": "ܫܘܘܕܥܐ ܒܝܕ ܪ̈ܘܒܘܛܐ",
        "pageinfo-robot-index": "ܡܬܦܣܣܢܐ",
        "pageinfo-robot-noindex": "ܠܐ ܡܬܦܣܣܢܐ",
-       "pageinfo-views": "ܡܢܝܢܐ ܕܚܙܝܬ̈ܐ",
        "pageinfo-watchers": "ܡܢܝܢܐ ܕܪ̈ܗܝܐ",
        "pageinfo-redirects-name": "ܡܢܝܢܐ ܕܨܘܝܒ̈ܐ ܠܦܐܬܐ ܗܕܐ",
        "pageinfo-subpages-name": "ܦܐܬܬ̈ܐ ܦܪ̈ܥܝܐ ܕܦܐܬܐ ܗܕܐ",
        "exif-gpsdirection-t": "ܨܘܒܐ ܬܪܝܨܐ",
        "exif-gpsdirection-m": "ܨܘܒܐ ܡܓܢܛܝܣܝܐ",
        "exif-dc-contributor": "ܫܘܬܦܢ̈ܐ",
-       "watchlistall2": "ܟܠ",
        "namespacesall": "ܟܠ",
        "monthsall": "ܟܠ",
        "confirmemail": "ܫܪܪ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ",
        "logentry-newusers-create2": "ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $3 {{GENDER:$2|ܐܬܬܟܝܢ}} ܒܝܕ $1",
        "logentry-newusers-autocreate": "ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $1 {{GENDER:$2|ܐܬܬܣܝܡ}} ܝܬܐܝܬ",
        "rightsnone": "(ܠܐ ܡܕܡ)",
+       "revdelete-summary": "ܫܚܠܦ ܦܣܝܩܬ̈ܐ",
        "feedback-subject": "ܡܠܘܐܐ:",
        "feedback-message": "ܐܓܪܬܐ:",
        "feedback-cancel": "ܒܛܘܠ",
index 4eb0a96..5e55cf6 100644 (file)
        "search-interwiki-more": "(Doy)",
        "searchrelated": "koneltuyelelu",
        "searchall": "kom",
-       "showingresultsheader": "{{PLURAL:$5|'''$1''' ñi tripalu '''$3''' mew|'''$1-$2''' ñi tripalu '''$3''' mew}} '''$4''' ngealu",
        "search-nonefound": "Tripalu dungu falilay chumngechi kintuael.",
        "mypreferences": "Dullin",
        "prefs-edits": "Rakin Wirin:",
        "pager-older-n": "{{PLURAL: Rupachi $1}}",
        "booksources": "Lifüru ñi chew küpan",
        "booksources-search-legend": "Kintun lifüru ñi chew küpan",
-       "booksources-go": "Amun",
        "specialloguserlabel": "Kellufe:",
        "speciallogtitlelabel": "Chew ñi amuael (Üy):",
        "log": "Wirintukun",
        "unwatchthispage": "Llaytuwelan",
        "notanarticle": "Trokiñdungu wülngiñ nu",
        "watchlist-details": "{{PLURAL:$1|$1 wülngiñ}} tami llaytun wif mew. Inantukulay nütramkawün ñi wülngiñ.",
-       "wlshowlast": "Pengelün kalekünun rupalu $1 ora, $2 antü $3",
+       "wlshowlast": "Pengelün kalekünun rupalu $1 ora, $2 antü",
        "watchlist-options": "Llaytun wif ñi dullin",
        "watching": "Llaytumekey...",
        "unwatching": "Llaytumekewelay...",
        "exif-contrast-2": "Yafü",
        "exif-sharpness-2": "Yafü",
        "exif-subjectdistancerange-0": "Kimnoelchi",
-       "watchlistall2": "kom",
        "namespacesall": "kom",
        "monthsall": "(kom)",
        "confirm_purge_button": "Feley may",
index c5e815b..68d2398 100644 (file)
        "search-suggest": "كنت باغي تقول: $1",
        "searchrelated": "مرتابطه",
        "searchall": "ألكل",
-       "showingresultsheader": "{{PLURAL:$5|نتيجه'''$1'''|نتايج'''$1–$2'''}} تع'''$3''' لـ'''$4'''",
        "search-nonefound": "ما كانش نتائج تطابق المسقسية.",
        "mypreferences": "إختيارات",
        "youremail": "البريه الالكترونيه:",
        "pager-older-n": "{{PLURAL:$1|قديم بزاف 1|قديم بزاف $1}}",
        "booksources": "مصادر كتاب",
        "booksources-search-legend": "حوس ما بين مصادر الكتب",
-       "booksources-go": "اذهب",
        "log": "ريجيسترات العمليات",
        "allpages": "قاع الباجات",
        "allarticles": "قاع الباجات",
        "watch": "تبع",
        "unwatch": "ما تزيدش تعس",
        "watchlist-details": "{{PLURAL:$1||باجه وحده|زوج باجات|$1 باجات|$1 باجه }} في ليستت مراقبتك، بلا ما تعد باجات النقاش.",
-       "wlshowlast": "بين آخر $1 سوايع $2 يامات$3",
+       "wlshowlast": "بين آخر $1 سوايع $2 يامات",
        "watchlist-options": "ابسيون ليستت المراقبه",
        "actioncomplete": "العمليه اندارت",
        "actionfailed": "العمليه فشلت",
        "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",
-       "watchlistall2": "لكل",
        "namespacesall": "لكل",
        "monthsall": "لكل",
        "watchlisttools-view": "اعرض التبديلات المرتابطه",
index 770e261..f408d43 100644 (file)
        "passwordreset-emailelement": "smiṫ l-mosṫĥdim: $1\nklmṫ s-srr l-mo'qaṫa: $2",
        "passwordreset-emailsent": "ṫsift email liṫ-ṫdkir.",
        "changeemail": "bddel ĝonwan l-email",
-       "changeemail-header": "bddel ĝonwan l-email dl-ḫisab",
        "changeemail-no-info": "ĥaṣṣ tkon daĥol baĥ tqdr twṣl l-had ṣfḫa niċan.",
        "changeemail-oldemail": "ĝonwan l-email l-ḫali:",
        "changeemail-newemail": "ĝonwan dial l-email jdid:",
        "changeemail-none": "(walo)",
        "changeemail-submit": "bddel l-email",
-       "changeemail-cancel": "lġi",
        "bold_sample": "Kṫaba ġliḍa",
        "bold_tip": "Kṫaba ġliḍa",
        "italic_sample": "Kṫaba mayla",
        "mergehistory-same-destination": "ma ymkn-ċ tkon ṣ-ṣfḫa l-mosṫhdafa hia l-mṣḍṛ braso",
        "mergehistory-reason": "sabab:",
        "mergelog": "sjl damj",
-       "pagemerge-logentry": "[[$1]] ṫdmjaṫ f-[[$2]] (morajaĝaṫ ĝṫṫa l-$3)",
        "revertmerge": "Ḫiyyed ṫ-ṫeĥlat.",
        "history-title": "Ṫ-Ṫariĥ dyal lé-vérsyon dyal \"$1\"",
        "difference-multipage": "(l-fṛq bin ṣ-ṣfaḫi)",
        "searchrelated": "mortabita",
        "searchall": "kolċi",
        "showingresults": "mbyyena l-ṫḫṫ ḫṫṫa l-{{PLURAL:$3|'''1''' n-naṫija|'''$3''' d-nnaṫa'ij}} badya mn rqm '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|n-naṫija '''$1''' mn '''$3'''|n-naṫa'ij '''$1 - $2''' mn '''$3'''}} l-'''$4'''",
        "search-nonefound": "ḫṫṫa naṫija ma bḫal ḫad t-talab.",
        "powersearch-legend": "Ṫeqlab ṣĝib",
        "powersearch-ns": "Qelleb fe maḫel s-smiyyaṫ",
        "statistics": "Staṫisṫik",
        "statistics-header-pages": "ihsa'at sfahi",
        "statistics-header-edits": "ihsa'at taadilat",
-       "statistics-header-views": "ihsa'at lmochahada",
        "statistics-header-users": "ihsa'at lmstkhdimin",
        "statistics-header-hooks": "ihsa'at khra",
        "statistics-articles": "sfht mohtawa",
        "statistics-pages": "ṣfaḫi",
        "statistics-files": "Ṣifet ci fiċyé",
        "statistics-edits-average": "otawassit taadilat lkol sfha",
-       "statistics-views-total": "chof total",
-       "statistics-views-peredit": "l-moċahadaĝ l-koll ṫĝdil",
        "statistics-users-active": "mostakhdimon nachtin",
-       "statistics-mostpopular": "aktar sfahi mochahada",
        "doubleredirects": "ṫḫwila mḍoḅla",
        "double-redirect-fixed-move": "[[$1]] ṫnqlaṫ.\ndaba ka ṫḫwwal l-[[$2]].",
        "double-redirect-fixed-maintenance": "iṣlaḫ ṫḫwil mḍobl mon [[$1]] l-[[$2]].",
        "uncategorizedtemplates": "qwalb mamsnfinch",
        "unusedcategories": "tsnifat mabqatch mstaamla",
        "unusedimages": "milfat mamstkhdmach",
-       "popularpages": "sfahi mchhora",
        "wantedcategories": "tsnifat mtloba",
        "wantedpages": "sfahi mtloba",
        "wantedpages-badtitle": "ĝonwan ma ṣḫiḫ-ċ f-mjmoĝṫ n-naṫa'ij: $1",
        "booksources": "Ĝyon l-kṫab",
        "booksources-search-legend": "Qelleb ĝla l-kṫoba",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Sir",
        "specialloguserlabel": "Mosṫeĥdim:",
        "speciallogtitlelabel": "l'adresse:",
        "log": "sijillaṫ",
        "watchlist-details": "{{PLURAL:$1|ṣefḫa weḫda|$1 de ṣ-ṣefḫaṫ}} kaynin fe l-lista dyal s-suivi dyalṫek, bla ma nḫesbo ṣ-ṣefḫaṫ dyal n-niqaċ.",
        "wlheader-enotif": "l-iĝlam bl-email mtloq.",
        "wlheader-showupdated": "ṣ-ṣfaḫi lli ṫġyyeraṫ mn aĥir ẓiyaṛa ṫaĝk mkṫoba b-ĥatt '''ġliḍ'''",
-       "wlshowlast": "Werri  l-$1 de s-swayeĝ o l-$2 iyam l-leĥĥrin, ola werri $3",
+       "wlshowlast": "Werri  l-$1 de s-swayeĝ o l-$2 iyam l-leĥĥrin, ola werri",
        "watchlist-options": "Lé-Opsyon de l-lista dyal s-suivi",
        "watching": "Kayraqeb...",
        "unwatching": "Nihayaṫ 's-suivi...",
        "thumbnail_image-missing": "milef naqṣ: $1",
        "import": "Éxporté ċi ṣefḫaṫ",
        "importinterwiki": "sṫirad t-transwiki",
-       "import-interwiki-source": "wiki/ṣfḫṫ l-ṃṣḍṛ:",
        "import-interwiki-submit": "importé",
        "import-upload-filename": "smiyt lfichier:",
        "import-comment": "taĜelleq:",
        "spambot_username": "tandif spam mediawiki",
        "pageinfo-title": "mĝlomaṫ l-\"$1\"",
        "pageinfo-header-edits": "ṫĝdilaṫ",
-       "pageinfo-views": "ĝadad l-moċahadaṫ",
        "pageinfo-watchers": "ĝadad l-moraqibin",
        "pageinfo-edits": "ĝadad ṫ-ṫĝdilaṫ",
        "pageinfo-authors": "ĝadad l-mo'llifin l-mĥṫalfin",
        "exif-urgency-low": "mnĥafḍa ($1)",
        "exif-urgency-high": "ĝalia ($1)",
        "exif-urgency-other": "l-awlawiyya lli ḫddadha l-mosṫĥdim ($1)",
-       "watchlistall2": "kolċi",
        "namespacesall": "kolċi",
        "monthsall": "kolhom",
        "confirmemail": "konfirmasyon dyal l'email",
        "sqlite-no-fts": "$1 imkaniyat lbaht f nass kaml",
        "revdelete-restricted": "tḅḅq ḍ-ḍawaḅit ll-idariyyin",
        "revdelete-unrestricted": "ḫyyd ḍ-ḍawaḅit ll-idariyyin",
-       "rightsnone": "(walo)"
+       "rightsnone": "(walo)",
+       "revdelete-summary": "molkhass taadil"
 }
index 6f52b4a..65f556f 100644 (file)
        "mergehistory-same-destination": "صفحتا المصدر والهدف لا يمكن أن تكونا نفس الشىء",
        "mergehistory-reason": "السبب:",
        "mergelog": "سجل الدمج",
-       "pagemerge-logentry": "دمج [[$1]] لـ [[$2]] (النسخ حتى $3)",
        "revertmerge": "استرجاع الدمج",
        "mergelogpagetext": "فى تحت لستة بأحدث عمليات الدمج لتاريخ صفحة فى التانية.",
        "history-title": " «$1»: تاريخ التعديل",
        "searchrelated": "مرتبطه",
        "searchall": "الكل",
        "showingresults": "القائمة دى بتعرض {{PLURAL:$1|'''1''' نتيجة|'''$1''' نتيجة}} من أول  رقم '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|النتيجه '''$1''' من'''$3'''|النتايج '''$1 - $2''' من'''$3'''}} ل'''$4'''",
        "search-nonefound": "لا توجد نتائج تطابق الاستعلام.",
        "powersearch-legend": "تدوير متقدم",
        "powersearch-ns": "تدوير فى اسم المساحه:",
        "statistics": "احصائيات",
        "statistics-header-pages": "إحصاءات الصفحات",
        "statistics-header-edits": "إحصاءات التعديلات",
-       "statistics-header-views": "إحصاءات المشاهدة",
        "statistics-header-users": "الاحصاءات بتاعة اليوزر",
        "statistics-header-hooks": "احصائيات تانيه",
        "statistics-articles": "صفحات المحتوى",
        "statistics-files": "الملفات المتحملة",
        "statistics-edits": "تعديلات الصفحات من بداية {{SITENAME}}",
        "statistics-edits-average": "متوسط التعديلات لكل صفحة",
-       "statistics-views-total": "إجمالى المشاهدات",
-       "statistics-views-peredit": "المشاهدات لكل تعديل",
        "statistics-users": "[[Special:ListUsers|يوزرز]] مسجلين",
        "statistics-users-active": "يوزرز نشطين",
        "statistics-users-active-desc": "اليوزرز اللى نفذو عمليه فى الـ {{PLURAL:$1|يوم|$1 ايام}} اللى فاتو",
-       "statistics-mostpopular": "اكتر صفحات اتشافت",
        "doubleredirects": "تحويلات مزدوجه",
        "doubleredirectstext": "الصفحة دى فيها لستة الصفحات اللى فيها تحويلة لصفحة تانية فيها تحويلة.\nكل سطر فى اللستة دى  فيه لينك للتحويلة الأولانية والتانية و كمان للصفحة بتاعة التحويلة التانية و اللى غالبا هى الصفحة الاصلية اللى المفروض التحويلة الاولانية توصل ليها.\n<del>Crossed out</del> اتحلت.",
        "double-redirect-fixed-move": "[[$1]] اتنقلت، هى دلوقتى تحويله ل [[$2]]",
        "uncategorizedtemplates": "قوالب مش متصنفه",
        "unusedcategories": "تصانيف مش  مستعمله",
        "unusedimages": "صور مش مستعمله",
-       "popularpages": "صفحات مشهورة",
        "wantedcategories": "تصانيف مطلوبه",
        "wantedpages": "صفحات مطلوبه",
        "wantedpages-badtitle": "عنوان مش صحيح فى مجموعة النتايج: $1",
        "suppress": "أوفرسايت",
        "booksources": "مصادر من كتب",
        "booksources-search-legend": "التدوير على مصادر الكتب",
-       "booksources-go": "روح",
        "booksources-text": "فى تحت لستة بوصلات لمواقع تانية بتبيع الكتب الجديدة والمستعملة، كمان ممكن تلاقى معلومات إضافية عن الكتب اللى يتدور عليها :",
        "booksources-invalid-isbn": "رقم الـ ISBN اللى كتبته شكله مش صحيح؛ اتإكد من الغلطات بتاعة النسخ من المصدر الاصلى.",
        "specialloguserlabel": "اليوزر:",
        "wlheader-enotif": "*خاصية الاعلام بالايميل متفعلة",
        "wlheader-showupdated": "الصفحات اللى اتغيرت  بعد زيارتك ليها اخر مرة معروضة بالخط '''العريض'''",
        "wlnote": "تحت فى {{PLURAL:$1|آخر تغيير|آخر '''$1''' تغيير}} فى آخر {{PLURAL:$2|ساعه|'''$2''' ساعه}}، من الوقت $3، $4.",
-       "wlshowlast": "عرض اخر $1 ساعات $2 ايام $3",
+       "wlshowlast": "عرض اخر $1 ساعات $2 ايام",
        "watchlist-options": "اختيارات قايمة المراقبة",
        "watching": "بيراقب...",
        "unwatching": "بيبطل مراقبه...",
        "import": "استيراد صفحات",
        "importinterwiki": "استيراد ترانسويكي",
        "import-interwiki-text": "اختار الويكى و عنوان الصفحة اللى عاوز تستوردها.\nتواريخ التعديلات و اسامى المحررين  ح يتحافظ عليها.\nكل عمليات الاستيراد للترانسويكى بتتسجل فى [[Special:Log/import|سجل الاستيراد]].",
-       "import-interwiki-source": "مصدر ويكي/صفحه:",
        "import-interwiki-history": "انسخ كل نسخ التاريخ للصفحة دي",
        "import-interwiki-templates": "اشمل كل القوالب",
        "import-interwiki-submit": "استيراد",
        "exif-gpsspeed-n": "عقد",
        "exif-gpsdirection-t": "الاتجاه الحقيقي",
        "exif-gpsdirection-m": "الاتجاه المغناطيسي",
-       "watchlistall2": "الكل",
        "namespacesall": "الكل",
        "monthsall": "الكل",
        "confirmemail": "اعمل تأكيد للأيميل بتاعك",
        "revdelete-restricted": "طبق التعليمات على السيسوبات",
        "revdelete-unrestricted": "شيل الضوابط من على السيسوبات",
        "rightsnone": "(فاضى)",
+       "revdelete-summary": "ملخص التعديل",
        "searchsuggest-search": "تدوير",
        "searchsuggest-containing": "جوّاه...",
        "expandtemplates": "تكبير القوالب",
index 4c63928..6b0eb78 100644 (file)
@@ -29,7 +29,7 @@
        "tog-editsectiononrightclick": "অনুচ্ছেদৰ শিৰোনামাত ৰাইট্‌ ক্লিক টিপি সম্পাদনা কৰাটো সক্ৰিয় কৰক",
        "tog-watchcreations": "মই সৃষ্টি সকলো পৃষ্ঠা মোৰ লক্ষ্য-তালিকাত যোগ কৰক",
        "tog-watchdefault": "মই সম্পাদনা কৰা সকলো পৃষ্ঠা মোৰ লক্ষ্য-তালিকাত যোগ কৰক",
-       "tog-watchmoves": "মই স্থানান্তৰ কৰা সকলো পৃষ্ঠা মোৰ লক্ষ্য-তালিকাত যোগ কৰক",
+       "tog-watchmoves": "মà¦\87 à¦¸à§\8dথানানà§\8dতৰ à¦\95ৰা à¦¸à¦\95লà§\8b à¦ªà§\83ষà§\8dঠা à¦\86ৰà§\81 à¦«à¦¾à¦\87ল à¦®à§\8bৰ à¦²à¦\95à§\8dষà§\8dয-তালিà¦\95াত à¦¯à§\8bà¦\97 à¦\95ৰà¦\95",
        "tog-watchdeletion": "মই বিলোপ কৰা সকলো পৃষ্ঠা মোৰ লক্ষ্য-তালিকাত যোগ কৰক",
        "tog-minordefault": "সকলো সম্পাদনা অগুৰুত্বপূৰ্ণ বুলি নিজে নিজে চিহ্নিত কৰক",
        "tog-previewontop": "সম্পাদনা বাকছৰ ওপৰত খচৰা দেখুৱাওক",
        "hidetoc": "দেখুৱাব নালাগে",
        "collapsible-collapse": "সংকোচন",
        "collapsible-expand": "বহলাওক",
+       "confirmable-yes": "হয়",
+       "confirmable-no": "নহয়",
        "thisisdeleted": "$1 চাওক বা সলনি কৰক?",
        "viewdeleted": "$1 চাওক?",
        "restorelink": "{{PLURAL:$1| এটা বিলুপ্ত সম্পাদনা|$1 টা বিলুপ্ত সম্পাদনা}}",
        "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)",
        "noemail": "\"$1\" সদস্যজনৰ কোনো ই-মেইল ঠিকনা সঞ্চিত কৰা নাই।",
        "noemailcreate": "আপুনি এটা সঠিক ই-মেইল ঠিকনা দিব লাগিব",
        "passwordsent": "\"$1\" ৰ ই-মেইল ঠিকনাত নতুন গুপ্তশব্দ এটা পঠোৱা হৈছে। অনুগ্ৰহ কৰি সেয়া পোৱাৰ পাছত পুনৰ প্ৰৱেশ কৰক।",
-       "blocked-mailpassword": "à¦\86পà§\8bনাৰ à¦\86à¦\87পি à¦ à¦¿à¦\95নাৰ à¦ªà§°à¦¾ à¦¸à¦®à§\8dপাদনা à¦\95ৰা à¦¬à¦¾à§°à¦£ à¦\95ৰা à¦¹à§\88à¦\9bà§\87, à¦\8fনà§\87 à¦\85ৱসà§\8dথাত à¦¦à§\81ৰà§\8dবà§\8dযৱহাৰ à§°à§\8bধ à¦\95ৰিবলà§\88 à¦\97à§\81পà§\8dতশবà§\8dদ à¦ªà§\81নà¦\83à¦\89দà§\8dধাৰ à¦\95ৰা à¦¸à§\81বিধাতà§\8b বাতিল কৰা হৈছে।",
+       "blocked-mailpassword": "à¦\86পà§\8bনাৰ à¦\86à¦\87পি à¦ à¦¿à¦\95নাৰ à¦ªà§°à¦¾ à¦¸à¦®à§\8dপাদনা à¦\95ৰা à¦¬à¦¾à§°à¦£ à¦\95ৰা à¦¹à§\88à¦\9bà§\87, à¦\8fনà§\87 à¦\85ৱসà§\8dথাত à¦¦à§\81ৰà§\8dবà§\8dযৱহাৰ à§°à§\8bধ à¦\95ৰিবলà§\88 à¦\97à§\81পà§\8dতশবà§\8dদ à¦ªà§\81নà¦\83à¦\89দà§\8dধাৰ à¦\95ৰা à¦¸à§\81বিধাà¦\93 বাতিল কৰা হৈছে।",
        "eauthentsent": "সঞ্চিত ই-মেইল ঠিকনালৈ নিশ্চিতকৰণ ই-মেইল এখন পঠিওৱা হৈছে।\nএকাউণ্টটোলৈ আন ই-মেইল পঠিওৱাৰ আগতে আপোনাৰ সদস্যতা নিশ্চিত কৰিবলৈ সেই ই-মেইলত দিয়া নিৰ্দেশনা আপুনি অনু্সৰণ কৰিব লাগিব।",
        "throttled-mailpassword": "যোৱা {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} এখন গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হৈছে।\nঅবৈধ ব্যৱহাৰ ৰোধ কৰিবলৈ প্ৰতি {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} এবাৰহে গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হ'ব।",
        "mailerror": "ই-মেইল পঠিওৱাত সমস্যা হৈছে: $1",
        "login-throttled": "আপুনি স‍ম্প্ৰতি অজস্ৰবাৰ লগ্‌-ইনৰ প্ৰয়াস কৰিছে ।\nঅনুগ্ৰহ কৰি $1 সময়ৰ পিছত আকৌ চেষ্টা কৰক ।",
        "login-abort-generic": "আপোনাৰ প্ৰৱেশ অসফল হৈছে- বাতিল কৰা হ’ল",
        "loginlanguagelabel": "ভাষা: $1",
-       "suspicious-userlogout": "আপোনাৰ প্ৰস্থানৰ অনুৰোধ বাতিল কৰা হৈছে কাৰণ হয়তো আপোনাৰ ব্ৰাউজাৰ অসম্পূৰ্ণ নতুবা পূৰ্বৱতী তথ্য পঠাইছে ।",
+       "suspicious-userlogout": "à¦\86পà§\8bনাৰ à¦ªà§\8dৰসà§\8dথানৰ à¦\85নà§\81ৰà§\8bধ à¦¬à¦¾à¦¤à¦¿à¦² à¦\95ৰা à¦¹à§\88à¦\9bà§\87 à¦\95াৰণ à¦¹à¦¯à¦¼à¦¤à§\8b à¦\86পà§\8bনাৰ à¦¬à§\8dৰাà¦\89à¦\9cাৰ à¦\85সমà§\8dপà§\82ৰà§\8dণ à¦¨à¦¤à§\81বা à¦ªà§\82ৰà§\8dবৱতà§\80 à¦¤à¦¥à§\8dয à¦ªà¦ à¦¿à¦¯à¦¼à¦¾à¦\87à¦\9bà§\87 à¥¤",
        "createacct-another-realname-tip": "প্ৰকৃত নাম দিয়াটো বৈকল্পিক।\nআপুনি নামটো দিলে সেইটো আপোনাৰ বৰঙণিসমূহৰ বাবে স্বীকৃতি প্ৰদানত ব্যৱহাৰ কৰা হ'ব।",
        "pt-login": "প্ৰৱেশ",
        "pt-login-button": "প্ৰৱেশ",
        "passwordreset-emailsent-capture": "এখন গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হৈছে, এইখন তলত দেখা পাব।",
        "passwordreset-emailerror-capture": "এখন গুপ্তশব্দ উদ্ধাৰ ইমেইল সৃষ্টি কৰা হ'ল, কিন্তু {{GENDER:$2|সদস্যজনলৈ}} পঠিয়াব পৰা নগ'ল। সেইখন তলত দেখুওৱা হৈছে: $1",
        "changeemail": "ই-মেইল ঠিকনা সলনি কৰক",
-       "changeemail-header": "একাউণ্টৰ ই-মেইল ঠিকনা সলনি কৰক",
        "changeemail-text": "আপোনাৰ ই-মেইল ঠিকনা সলাবলৈ এই প্ৰপত্ৰখন পূৰাওক । এই সালসলনি নিশ্চিত কৰিবলৈ আপোনাৰ গুপ্তশব্দ দিব লাগিব ।",
        "changeemail-no-info": "এই পৃষ্ঠাটোত প্ৰৱেশাধিকাৰ পাবলৈ আপুনি লগ্‌ ইন কৰিব লাগিব।",
        "changeemail-oldemail": "বৰ্তমানৰ ই-মেইল ঠিকনা:",
        "changeemail-none": "(নাই)",
        "changeemail-password": "আপোনাৰ  {{SITENAME}} গুপ্তশব্দ:",
        "changeemail-submit": "ই-মেইল ঠিকনা সলনি কৰক",
-       "changeemail-cancel": "বাতিল কৰক",
        "changeemail-throttled": "আপুনি স‍ম্প্ৰতি অজস্ৰবাৰ লগ্‌-ইনৰ প্ৰয়াস কৰিছে।\nঅনুগ্ৰহ কৰি $1 সময়ৰ পিছত আকৌ চেষ্টা কৰক।",
        "resettokens": "ট'কেন ৰিছে'ট কৰক",
        "resettokens-text": "আপোনাৰ একাউণ্টৰ সৈতে জড়িত কিছুমান ব্যক্তিগত তথ্য চাবলৈ আপুনি ট'কেন ৰিছে'ট কৰিব পাৰে।\n\nআপুনি দুৰ্ঘটনাবশতঃ আন কাৰোবাক সেই ট'কেন দিলে বা আপোনাৰ একাউণ্টৰ বিসংগতি হ'লে আপুনি এনে কৰাটো উচিত।",
        "preview": "খচৰা",
        "showpreview": "খচৰা চাওক",
        "showdiff": "সালসলনিবোৰ দেখুৱাওক",
+       "blankarticle": "<strong>Warning:</strong>আপুনি সৃষ্টি কৰি থকা পৃষ্ঠাটো খালি।\nযদি আপুনি \"{{int:savearticle}}\" বুটামটোত আকৌ ক্লিক কৰে তেন্তে বিষয়বস্তু অবিহনেই পৃষ্ঠাটো সৃষ্টি হ'ব।",
        "anoneditwarning": "<span style=\"color:red;\">'''সাৱধান:''' আপুনি প্ৰৱেশ কৰা নাই ।</span> \nএই পৃষ্ঠাৰ ইতিহাসত আপোনাৰ আই পি ঠিকনা সংৰক্ষিত কৰা হ'ব।",
        "anonpreviewwarning": "''আপুনি প্ৰৱেশ কৰা নাই। আপোনাৰ সম্পাদনা সাঁচিলে আপোনাৰ আই-পি ঠিকনা এই পৃষ্ঠাৰ ইতিহাসত সংৰক্ষিত হ'ব।\"",
        "missingsummary": "'''স্মাৰক:''' আপুনি সম্পাদনা সাৰাংশ দিয়া নাই।\nআপুনি আৰু এবাৰ সংৰক্ষণৰ বাবে ক্লিক কৰিলে সাৰাংশৰ অবিহনে সংৰক্ষিত হব।",
        "summary-preview": "সাৰাংশৰ খচৰা:",
        "subject-preview": "বিষয়/শিৰোনামাৰ খচৰা:",
        "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এই বিষয়ে হোৱা আলোচনাত ইয়াৰ সবিশেষ সদৰী কৰে যেন।",
+       "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আপোনাৰ এতিয়াৰ আই পি ঠিকনা হৈছে $3, আৰু আপোনাৰ অৱৰোধ ক্ৰমিক হৈছে $5 ।\nএই বিষয়ে হোৱা আলোচনাত ইয়াক ব্যৱহাৰ কৰিবলৈ অনুৰোধ কৰা হ’ল।",
        "blockednoreason": "কাৰণ দিয়া নাই",
        "whitelistedittext": "সম্পাদনা কৰিবলৈ $1 কৰক ।",
        "missing-revision": "\"{{FULLPAGENAME}}\" নামৰ পৃষ্ঠাৰ #$1 সংশোধনৰ অস্তিত্ব নাই।\n\nসাধাৰণতে বিলোপ কৰা এখন পৃষ্ঠাৰ পুৰণা ইতিহাস লিংক অনুসৰণ কৰিলে এনে হয়।\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} বিলোপন ল'গ]ত অধিক তথ্য পাব।",
        "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" নামৰ সদস্য একাউন্ট নিবন্ধিত নহয় ।\nঅনুগ্ৰহ কৰি চাওক আপুনি এই পৃষ্ঠা সৃষ্টি/সম্পাদনা কৰিব বিচাৰিছে নেকি ।",
        "userpage-userdoesnotexist-view": "সদস্য একাউন্ট ''$1'' পঞ্জীভূত নহয়",
-       "blocked-notice-logextract": "বৰ্তমানে এই সদস্যক বাৰণ কৰা হৈছে ।\nপ্ৰসংগক্ৰমে সাম্প্ৰতিক বাৰণ সূচী তলত দিয়া হ'ল ।",
+       "blocked-notice-logextract": "বৰ্তমানে এই সদস্যক বাৰণ কৰা হৈছে।\nআপোনাৰ সুবিধাৰ্থে সাম্প্ৰতিক বাৰণ সূচী তলত দিয়া হ'ল ।",
        "clearyourcache": "'''টোকা:''' সাঁচি ৰখাৰ পিছত পৰিৱৰ্তনখিনি চাবৰ বাবে আপুনি আপোনাৰ ব্ৰাউজাৰৰ কেচ্‌ (cache) অগ্ৰাহ্য কৰিব লগা হ’ব পাৰে।\n* '''Firefox / Safari: ''' ''Shift'' ধৰি ৰাখি ''Reload'' ক্লিক কৰক, নাইবা ''Ctrl-F5'' বা ''Ctrl-R'' টিপক (এপল মেকৰ বাবে ''⌘-R'')\n* '''Google Chrome:''' ''Ctrl-Shift-R'' টিপক (এপল মেকৰ বাবে ''⌘-Shift-R'' )\n* '''Internet Explorer:''' ''Ctrl'' ধৰি ৰাখি ''Refresh'' ক্লিক কৰক, অথবা ''Ctrl-F5'' টিপক\n* '''Opera:''' ''Tools→Preferences'' ত গৈ কেচ্‌ মচি পেলাওক",
        "usercssyoucanpreview": "'''পৰামৰ্শ:''' \"{{int:showpreview}}\" বুটাম ব্যৱহাৰ কৰি সাঁচি ৰখাৰ আগতে আপোনাৰ নতুন CSS পৰীক্ষা কৰক ।",
        "userjsyoucanpreview": "'''পৰামৰ্শ:''' \"{{int:showpreview}}\" বুটাম ব্যৱহাৰ কৰি সাঁচি ৰখাৰ আগতে আপোনাৰ নতুন জাভালিপি পৰীক্ষা কৰক ।",
        "permissionserrorstext": "আপোনাৰ এই কামটো কৰিবলৈ অনুমতি নাই, যাৰ {{PLURAL:$1|কাৰণ|কাৰণসমূহ}} হ'ল:",
        "permissionserrorstext-withaction": "আপোনাৰ $2 কৰিবলৈ অনুমতি নাই, যাৰ {{PLURAL:$1|কাৰণ|কাৰণসমূহ}} হ'ল:",
        "recreate-moveddeleted-warn": "'''সাৱধান: আগতে বিলোপ কৰা পৃষ্ঠা এটা আপুনি পুনঃনিৰ্মাণ কৰি আছে। '''\n\nএই পৃষ্ঠাটো সম্পাদনা কৰা উচিত হব নে নহয় আপুনি বিবেচনা কৰি চাওক।\nএই পৃষ্ঠাটো বিলোপ আৰু স্থানান্তৰ কৰাৰ অভিলেখ আপোনাৰ সুবিধাৰ্থে ইয়াত দিয়া হৈছে।",
-       "moveddeleted-notice": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠা à¦¬à¦¾à¦¤à¦¿à¦² à¦\95ৰা à¦¹à§\88à¦\9bà§\87 à¥¤\nপà§\83ষà§\8dঠাà¦\9fিৰ à¦¬à¦¾à¦¤à¦¿à¦² à¦\86ৰà§\81 à¦¸à§\8dথানানà§\8dতৰ à¦\95ৰা à¦\85ভিলà§\87à¦\96 à¦¤à¦²à¦¤ à¦¦à¦¿à¦¯à¦¼à¦¾ à¦¹'ল ।",
+       "moveddeleted-notice": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠা à¦¬à¦¿à¦²à§\8bপ à¦\95ৰা à¦¹à§\88à¦\9bà§\87।\nপà§\83ষà§\8dঠাৰ à¦¬à¦¿à¦²à§\8bপ à¦\86ৰà§\81 à¦¸à§\8dথানানà§\8dতৰণ à¦\85ভিলà§\87à¦\96 à¦¤à¦²à¦¤ à¦¦à¦¿à¦¯à¦¼à¦¾ à¦¹'ল।",
        "log-fulllog": "সম্পূৰ্ণ অভিলেখ চাওক",
        "edit-hook-aborted": "হুকৰ দ্বাৰা সম্পাদনা প্ৰত্যাখ্যান কৰা হৈছে।\nইয়াৰ কোনো ব্যাখ্যা নাই।",
-       "edit-gone-missing": "পà§\83ষà§\8dঠাà¦\9fà§\8b à¦¨à¦¬à§\80à¦\95ৰণ à¦\95ৰিব à¦ªà§°à¦¾ à¦¨à¦\97â\80\99ল।\nসমà§\8dভৱতà¦\83 à¦ªà§\83ষà§\8dঠাà¦\96ন বিলোপ কৰা হৈছে।",
+       "edit-gone-missing": "পà§\83ষà§\8dঠাà¦\9fà§\8b à¦¨à¦¬à§\80à¦\95ৰণ à¦\95ৰিব à¦ªà§°à¦¾ à¦¨à¦\97â\80\99ল।\nসমà§\8dভৱতà¦\83 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b বিলোপ কৰা হৈছে।",
        "edit-conflict": "সম্পাদনা দ্বন্দ্ব।",
        "edit-no-change": "আপোনাৰ সম্পাদনা আওকাণ কৰা হৈছে, কাৰণ লেখাত কোনো তফাৎ নাই।",
        "postedit-confirmation-created": "পৃষ্ঠাটো সৃষ্টি কৰা হৈছে।",
        "parser-template-recursion-depth-warning": "সাঁচৰ পুনৰাবৃত্তি গভীৰতা সীমা ($1) তকৈ অধিক হৈছে",
        "language-converter-depth-warning": "ভাষা পৰিৱৰ্তকৰ গভীৰতা সীমাই ($1) অতিক্ৰম কৰিছে",
        "node-count-exceeded-category": "ন'ড-গণনা বেছি হোৱা পৃষ্ঠাসমূহ",
-       "node-count-exceeded-warning": "পৃষ্ঠাৰ ন'ড-গণনা বেছি হৈছে",
+       "node-count-exceeded-category-desc": "এই পৃষ্ঠাই সৰ্বোচ্চ ন'ড কাউণ্ট সীমা অতিক্ৰম কৰিছে।",
+       "node-count-exceeded-warning": "পৃষ্ঠাৰ ন'ড গণনা বেছি হৈছে",
        "expansion-depth-exceeded-category": "বিস্তৃতি গভীৰতা বেছি হোৱা পৃষ্ঠা",
        "expansion-depth-exceeded-warning": "পৃষ্ঠাটোৰ বিস্তৃতি গভীৰতা বেছি হৈছে",
        "parser-unstrip-loop-warning": "আন্‌ষ্ট্ৰীপ লুপ চিনাক্ত কৰা হৈছে",
        "converter-manual-rule-error": "মেনুৱেল ভাষা পৰিৱৰ্তন নিয়মত ত্ৰুটি পোৱা গৈছে",
        "undo-success": "এই সম্পাদনা পূৰ্ববৎ কৰিব পাৰি ।\nঅনুগ্ৰহ কৰি তলৰ তুলনাটি পৰীক্ষা কৰি ঠাৱৰ কৰক যে আপুনি এনে কৰিব বিচাৰিছে, আৰু তলত সালসলনিসমূহ সাঁচি এই কাৰ্য্য সম্পন্ন কৰক ।",
        "undo-failure": "এই সম্পাদনা মধ্যৱৰ্তী সম্পাদনাসমূহৰ দ্বন্দৰ কাৰণে পূৰ্ববৎ কৰা নহ'ব ।",
-       "undo-norev": "à¦\8fà¦\87 à¦¸à¦®à§\8dপাদনাà¦\9fি à§°à¦¦ à¦\95ৰিব à¦¨à§\8bৱাৰি, à¦\95াৰণ à¦\87 à¦\86ৰà§\81 à¦¨à¦¾à¦\87 à¦¬à¦¾ à¦\87য়াà¦\95 à¦¬à¦¾à¦¤à¦¿à¦² à¦\95ৰা à¦¹'ল ।",
+       "undo-norev": "à¦\8fà¦\87 à¦¸à¦®à§\8dপাদনাà¦\9fà§\8b à§°à¦¦ à¦\95ৰিব à¦¨à§\8bৱাৰি, à¦\95াৰণ à¦\8fà¦\87à¦\9fà§\8b à¦\86ৰà§\81 à¦¨à¦¾à¦\87 à¦¬à¦¾ à¦\87য়াà¦\95 à¦¬à¦¿à¦²à§\8bপ à¦\95ৰা à¦¹'ল।",
        "undo-nochange": "সম্পাদনাটো ইতিমধ্যেই বাতিল কৰা হৈছে।",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|আলোচনা]]) সম্পাদিত $1 সংশোধনটি বাতিল কৰক",
        "undo-summary-username-hidden": "এজন গোপন ব্যৱহাৰকাৰীয়ে কৰা $1 সংশোধন বাতিল কৰক",
        "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-text-unhide": "পà§\83ষà§\8dঠাà¦\96নৰ এই সংশোধনটো '''নিবাৰণ''' কৰা হৈছে ।\nসবিশেষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ অভিলেখত]।\nআপুনি মন কৰিলে [$1 এই সংশোধনটো চাব পাৰে]।",
+       "rev-suppressed-text-unhide": "পà§\83ষà§\8dঠাà¦\9fà§\8bৰ এই সংশোধনটো '''নিবাৰণ''' কৰা হৈছে ।\nসবিশেষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ অভিলেখত]।\nআপুনি মন কৰিলে [$1 এই সংশোধনটো চাব পাৰে]।",
        "rev-deleted-text-view": "পৃষ্ঠাৰ এই সংশোধনটো '''বিলোপ''' কৰা হ'ল ।\nআপুনি এইটো চাব পাৰে; সবিশেষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অবলুপ্তি অভিলেখত]।",
        "rev-suppressed-text-view": "পৃষ্ঠাৰ এই সংশোধনটো '''নিবাৰণ''' কৰা হ’ল।\nআপুনি এইটো চাব পাৰে; সবিশেষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ অভিলেখত]।",
        "rev-deleted-no-diff": "আপুনি এই পাৰ্থক্য চাব নোৱাৰে কাৰণ এটা সংস্কৰণ '''বিলোপ''' কৰা হৈছে ।\nসবিশেষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অৱলুপ্তি অভিলেখত]।",
        "mergehistory-same-destination": "উৎস আৰু গন্তব্য পৃষ্ঠা একে হ'ব নোৱাৰে",
        "mergehistory-reason": "কাৰণ:",
        "mergelog": "অভিলেখ একত্ৰীকৰণ",
-       "pagemerge-logentry": "[[$1]] [[$2]]-ত মিলোৱা হ'ল (সংশোধনসমূহ $3-লৈ)",
        "revertmerge": "একত্ৰীকৰণ বাতিল কৰক",
        "mergelogpagetext": "এটা পৃষ্ঠাৰ ইতিহাস আন এখনৰ লগত কৰা একত্ৰীকৰণৰ সকলোতকৈ শেহতীয়া তালিকা তলত দিয়া হ’ল ।",
        "history-title": "\"$1\" ৰ সংশোধনৰ ইতিহাস",
        "searchrelated": "সম্পৰ্কিত",
        "searchall": "সকলো",
        "showingresults": "তলত #'''$2'''ৰ পৰা {{PLURAL:$1|'''1''' ফলাফল|'''$1''' ফলাফল}} দেখুওৱা হৈছে।",
-       "showingresultsheader": "'''$4'''ৰ বাবে {{PLURAL:$5|'''$3''' ৰ '''$1''' ফলাফল| '''$3''' ৰ '''$1 - $2''' ফলাফলসমূহ}}",
        "search-nonefound": "এই অনুসন্ধানৰ কোনো ফলাফল নাই ।",
        "powersearch-legend": "শক্তিশালী সন্ধান",
        "powersearch-ns": "নামস্থানবোৰত সন্ধান:",
        "action-patrol": "আনৰ সম্পাদনা পৰীক্ষিত বুলি চিহ্নিত কৰক",
        "action-autopatrol": "আপোনাৰ সম্পাদনা পৰীক্ষিত বুলি চিহ্নিত কৰক",
        "action-unwatchedpages": "নিৰীক্ষণ নকৰা পৃষ্ঠাসমূহৰ তালিকা চাওক",
-       "action-mergehistory": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96নৰ ইতিহাস একত্ৰিত কৰক",
+       "action-mergehistory": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8bৰ ইতিহাস একত্ৰিত কৰক",
        "action-userrights": "সকলো সদস্য অধিকাৰ সম্পাদনা কৰক",
        "action-userrights-interwiki": "আন ৱিকিৰ সদস্যৰ অধিকাৰসমূহ সম্পাদনা কৰক",
        "action-siteadmin": "তথ্যকোষ বন্ধ কৰক বা খোলক",
        "license": "অনুজ্ঞাপত্ৰ:",
        "license-header": "অনুজ্ঞাপত্ৰ",
        "nolicense": "একো বাছনি কৰা নাই",
+       "licenses-edit": "অনুজ্ঞাপত্ৰ বিকল্পসমূহ সম্পাদনা কৰক",
        "license-nopreview": "(প্ৰাকদৰ্শন উপলব্ধ নহয়)",
        "upload_source_url": "(এটা বৈধ, ৰাজহুৱাকৈ উন্মুক্ত URL)",
        "upload_source_file": "(আপোনাৰ কম্পিউটাৰৰ এটা ফাইল)",
        "download": "ডাউনল’ড কৰক",
        "unwatchedpages": "চকু নৰখা পৃষ্ঠাসমূহ",
        "listredirects": "পুননিৰ্দেশনাৰ তালিকা",
+       "listduplicatedfiles": "প্ৰতিলিপি থকা ফাইলসমূহৰ তালিকা",
+       "listduplicatedfiles-summary": "এই তালিকাখনত থকা ফাইলবোৰৰ শেহতীয়া সংস্কৰণ আন কোনো ফাইলৰ শেহতীয়া সংস্কৰণৰ প্ৰতিলিপি। কেৱল স্থানীয় ফাইলবোৰহে গণ্য কৰা হৈছে।",
        "unusedtemplates": "অব্যৱহৃত সাঁচসমূহ",
        "unusedtemplatestext": "অন্য কোনো পৃষ্ঠাত নথকা {{ns:template}} নামস্থানৰ সকলো পৃষ্ঠা ইয়াত পাব ।\nসাঁচসমূহ বিলোপ কৰাৰ আগতে সেইবোৰলৈ থকা সংযোগ পৰীক্ষা কৰক ।",
        "unusedtemplateswlh": "অন্য সংযোগসমূহ",
        "randomincategory": "শ্ৰেণীৰ যিকোনো পৃষ্ঠা",
        "randomincategory-invalidcategory": "\"$1\" বৈধ শ্ৰেণী নাম নহয়।",
        "randomincategory-nopages": "[[:Category:$1|$1]] শ্ৰেণীত কোনো পৃষ্ঠা নাই।",
-       "randomincategory-selectcategory": "এই শ্ৰেণীৰ পৰা যিকোনো পৃষ্ঠা চাওক: $1 $2।",
-       "randomincategory-selectcategory-submit": "যাওক",
        "randomredirect": "অনিৰ্ধাৰিত পুননিৰ্দেশ",
        "randomredirect-nopages": "\"$1\" নামস্থানত কোনো পুননিৰ্দেশ নাই ।",
        "statistics": "পৰিসংখ্যা",
        "statistics-header-pages": "পৃষ্ঠা পৰিসংখ্যা",
        "statistics-header-edits": "পৰিসংখ্যা সম্পাদনা কৰক",
-       "statistics-header-views": "পৰিসংখ্যা দেখুৱাওক",
        "statistics-header-users": "ব্যৱহাৰকাৰীৰ পৰিসংখ্যা",
        "statistics-header-hooks": "অন্য পৰিসংখ্যা",
        "statistics-articles": "বিষয়বস্তুৰ পৃষ্ঠা",
        "statistics-files": "আপল’ড কৰা ফাইলসমূহ",
        "statistics-edits": "{{SITENAME}} স্থাপন কৰাৰেপৰা পৃষ্ঠা সম্পাদনাসমূহ",
        "statistics-edits-average": "প্ৰতি পৃষ্ঠাৰ গড় সম্পাদনা",
-       "statistics-views-total": "সৰ্বমুঠ প্ৰদৰ্শন",
-       "statistics-views-total-desc": "অস্তিত্বহীন পৃষ্ঠা আৰু বিশেষ পৃষ্ঠাসমূহৰ দৰ্শন ইয়াত ভুক্ত নহয়",
-       "statistics-views-peredit": "সম্পাদনা প্ৰতি দৰ্শন",
        "statistics-users": "পঞ্জীভূত [[Special:ListUsers|সদস্যসমূহ]]",
        "statistics-users-active": "সক্ৰিয় সদস্য",
        "statistics-users-active-desc": "শেষ {{PLURAL:$1|দিনত|$1 দিনত}} কোনো কাম কৰা সদস্যসমূহ",
-       "statistics-mostpopular": "সৰ্বোচ্চ দৰ্শন কৰা পৃষ্ঠাসমূহ",
        "pageswithprop": "পৃষ্ঠা উপাদান সম্বলিত পৃষ্ঠাসমূহ",
        "pageswithprop-legend": "পৃষ্ঠা উপাদান সম্বলিত পৃষ্ঠাসমূহ",
        "pageswithprop-text": "বিশেষ পৃষ্ঠা উপাদান ব্যৱহাৰ কৰা পৃষ্ঠাসমূহ ইয়াত তালিকাভুক্ত কৰা হৈছে।",
        "uncategorizedtemplates": "অশ্ৰেণীকৃত সাঁচসমূহ",
        "unusedcategories": "অব্যৱহৃত শ্ৰেণীসমূহ",
        "unusedimages": "অব্যৱহৃত ফাইলসমূহ",
-       "popularpages": "জনপ্ৰিয় পৃষ্ঠাসমূহ",
        "wantedcategories": "কাম্য শ্ৰেণীসমূহ",
        "wantedpages": "কাম্য পৃষ্ঠাসমূহ",
        "wantedpages-badtitle": "ফলাফল তালিকাত অবৈধ শিৰোনামা: $1",
        "querypage-disabled": "কাৰ্য্যগত কাৰণত এই বিশেষ পৃষ্ঠাটো নিষ্ক্ৰিয় কৰা হৈছে।",
        "booksources": "গ্ৰন্থৰ উৎস সমূহ",
        "booksources-search-legend": "গ্ৰন্থ উৎস অনুসন্ধান",
-       "booksources-go": "যাওক",
        "booksources-text": "নতুন আৰু পুৰণি কিতাপ বেচা চাইটসমূহৰ সংযোগ তলত দিয়া হৈছে, তাত আপুনি বিচৰা কিতাপসমূহৰ বিষয়ে অধিক তথ্যও পাব পাৰে:",
        "booksources-invalid-isbn": "আপুনি দিয়া ISBN সম্ভৱতঃ অবৈধ; মূল উৎসৰ পৰা তুলি লওঁতে হ’ব পৰা ভুলৰ বাবে পৰীক্ষা কৰক ।",
        "specialloguserlabel": "প্ৰদৰ্শনকাৰী:",
        "wlheader-enotif": "ইমেইল জাননী সক্ৰিয় কৰা হৈছে।",
        "wlheader-showupdated": "আপোনাৰ শেষ পৰিদৰ্শনৰ পিছত সলনি হোৱা পৃষ্ঠাসমূহ '''গাঢ়''' আখৰত দেখুওৱা হৈছে।",
        "wlnote": "তলত {{PLURAL:$1| হ'ল সৰ্বশেষ পৰিৱৰ্তন|হ'ল সৰ্বশেষ '''$1''' পৰিৱৰ্তনসমূহ}} সৰ্বশেষ {{PLURAL:$2|ঘন্টা|'''$2''' ঘন্টা}}, $3, $4 -ৰ হিচাপে।",
-       "wlshowlast": "যোৱা $1 ঘণ্টা $2 দিন $3 চাওক",
+       "wlshowlast": "যোৱা $1 ঘণ্টা $2 দিন  চাওক",
        "watchlist-options": "লক্ষ্য-তালিকা পছন্দসমূহ",
        "watching": "চকু দিয়া হৈছে.....",
        "unwatching": "আঁতৰোৱা হৈ আছে.....",
        "actioncomplete": "কাৰ্য সম্পূৰ্ণ",
        "actionfailed": "কাৰ্য বিফল হ'ল",
        "deletedtext": "\"$1\" ক বিলোপন কৰা হৈছে।\nসাম্প্ৰতিক বিলোপনসমূহৰ তালিকা চাবলৈ $2 চাওক।",
-       "dellogpage": "বাতিল কৰা সূচী",
+       "dellogpage": "বিলà§\8bপ কৰা সূচী",
        "dellogpagetext": "তলত সাম্প্ৰতিক বিলোপনৰ তালিকা দিয়া হ'ল ।",
-       "deletionlog": "বাতিল কৰা সূচী",
+       "deletionlog": "বিলà§\8bপ কৰা সূচী",
        "reverted": "পূৰ্ববৰ্তী সংস্কৰণলৈ উভতি যোৱা হ'ল",
        "deletecomment": "কাৰণ:",
        "deleteotherreason": "আন/অতিৰিক্ত কাৰণ:",
        "deletereasonotherlist": "আন কাৰণ:",
        "deletereason-dropdown": "* বিলোপনৰ সাধাৰণ কাৰণসমূহ\n** স্পাম\n** অসভ্যালি\n** কপিৰাইট উলঙ্ঘন\n** লেখকৰ অনুৰোধ\n** ভঙা পুনঃনিৰ্দেশনা",
        "delete-edit-reasonlist": "অপসাৰণ কৰা কাৰণ সম্পাদনা কৰক",
-       "delete-toobig": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96নৰ সম্পাদনা ইতিহাস অতি দীঘল, $1 {{PLURAL:$1|টা সংশোধনৰো|টা সংশোধনৰো}} বেছি ।\n{{SITENAME}}ৰ আকস্মিক ক্ষতি ৰোধ কৰিবলৈ এনে পৃষ্ঠাৰ ইতিহাস বিলোপ কৰাত সীমাবদ্ধতা আৰোপ কৰা হৈছে ।",
+       "delete-toobig": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8bৰ সম্পাদনা ইতিহাস অতি দীঘল, $1 {{PLURAL:$1|টা সংশোধনৰো|টা সংশোধনৰো}} বেছি ।\n{{SITENAME}}ৰ আকস্মিক ক্ষতি ৰোধ কৰিবলৈ এনে পৃষ্ঠাৰ ইতিহাস বিলোপ কৰাত সীমাবদ্ধতা আৰোপ কৰা হৈছে ।",
        "delete-warning-toobig": "এই পৃষ্ঠাখনৰ সম্পাদনা ইতিহাস অতি দীঘল, $1 {{PLURAL:$1|টা সংশোধনৰো|টা সংশোধনৰো}} বেছি ।\nইয়াক বিলোপ কৰিলে {{SITENAME}} ৰ তথ্যভঁৰালৰ কাৰ্য্যকাৰীতাত সমস্যা হ’ব পাৰে;\nসাৱধানেৰে আগ বাঢ়ক ।",
        "rollback": "সম্পাদনা পূৰ্ববৎ কৰক",
        "rollback_short": "পূৰ্ববৎ কৰক",
        "movetalk": "সংলগ্ন বাৰ্তা পৃষ্ঠা স্থানান্তৰ কৰক",
        "move-subpages": "উপ-পৃষ্ঠাসমূহ স্থানান্তৰ কৰক ($1লৈ)",
        "move-talk-subpages": "আলোচনা পৃষ্ঠাৰ উপ-পৃষ্ঠাসমূহ স্থানান্তৰ কৰক ($1-লৈ)",
-       "movepage-page-exists": "$1 à¦ªà§\83ষà§\8dঠাà¦\96ন à¦\87তিমধà§\8dযà§\87à¦\87 à¦\86à¦\9bà§\87 à¦\86ৰà§\81 à¦¤à¦¾à§° à¦\93পৰত à¦¸à§\8dবয়à¦\82à¦\95à§\8dৰিয়ভাৱà§\87 à¦²à¦¿à¦\96িব à¦¨à§\8bৱাৰি ।",
+       "movepage-page-exists": "$1 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b à¦\87তিমধà§\8dযà§\87 à¦\86à¦\9bà§\87à¦\87 à¦\86ৰà§\81 à¦¤à¦¾à§° à¦\93পৰত à¦¸à§\8dবয়à¦\82à¦\95à§\8dৰিয়ভাৱà§\87 à¦²à¦¿à¦\96িব à¦¨à§\8bৱাৰি।",
        "movepage-page-moved": "$1 পৃষ্ঠাটো $2লৈ স্থানান্তৰ কৰা হ'ল।",
        "movepage-page-unmoved": "$1 পৃষ্ঠাটো $2লৈ স্থানান্তৰ কৰা সম্ভৱ নহয়",
        "movepage-max-pages": "সৰ্বোচ্চ $1 {{PLURAL:$1|পৃষ্ঠা|পৃষ্ঠা}} স্থানান্তৰ কৰা হৈছে আৰু ইয়াতকৈ অধিক স্বয়ংক্ৰিয়ভাৱে স্থানান্তৰ নহ’ব ।",
        "movelogpage": "স্থানান্তৰন অভিলেখ",
        "movelogpagetext": "সকলো পৃষ্ঠা স্থানান্তৰৰ এখন তালিকা তলত দিয়া হৈছে ।",
        "movesubpage": "{{PLURAL:$1|টা উপপৃষ্ঠা}}",
-       "movesubpagetext": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96নৰ à¦¤à¦²à¦¤ à¦¦à¦¿à¦¯à¦¼à¦¾ {{PLURAL:$1|à¦\9fা à¦\89পপà§\83ষà§\8dঠা}} à¦\86à¦\9bà§\87 ।",
+       "movesubpagetext": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8bৰ à¦¤à¦²à¦¤ à¦¦à¦¿à¦¯à¦¼à¦¾ {{PLURAL:$1|à¦\9fা à¦\89পপà§\83ষà§\8dঠা}} à¦\86à¦\9bà§\87।",
        "movenosubpage": "এই পৃষ্ঠাৰ কোনো উপপৃষ্ঠা নাই ।",
        "movereason": "কাৰণ:",
        "revertmove": "আগৰ অৱস্থালৈ ঘূৰি যাওক",
        "import": "পৃষ্ঠা আমদানি কৰক",
        "importinterwiki": "আন্তঃৱিকি আমদানি",
        "import-interwiki-text": "আমদানি কৰিবলৈ এটা ৱিকি বা পৃষ্ঠাৰ শিৰোনামা নিৰ্বাচন কৰক ।\nসংশোধনৰ তাৰিখ আৰু সম্পাদকৰ নাম সংৰক্ষণ কৰা হ'ব ।\nসকলো আন্তঃৱিকি আমদানি [[Special:Log/import|আমদানি অভিলেখ]]ত লিপিবদ্ধ আছে ।",
-       "import-interwiki-source": "উৎস ৱিকি/পৃষ্ঠা:",
+       "import-interwiki-sourcewiki": "উৎস ৱিকি:",
+       "import-interwiki-sourcepage": "উৎস পৃষ্ঠা:",
        "import-interwiki-history": "এই পৃষ্ঠাৰ সকলো সংশোধনৰ ইতিহাস প্ৰতিলিপি কৰক",
        "import-interwiki-templates": "সকলো সাঁচ অন্তৰ্ভুক্ত কৰক",
        "import-interwiki-submit": "আমদানি",
        "importbadinterwiki": "আন্ত:ৱিকি সংযোগ বেয়া",
        "importsuccess": "আমদানি সমাপ্ত !",
        "importnosources": "কোনো আন্তঃৱিকি আমদানি উৎসৰ সংজ্ঞা দিয়া হোৱা নাই আৰু প্ৰত্যক্ষ ইতিহাস আপল'ড নিষ্ক্ৰিয় কৰা হৈছে ।",
-       "importnofile": "কোনো আমদানি নথি আপল'ড কৰা হোৱা নাই ।",
+       "importnofile": "কোনো আমদানি নথি আপল'ড কৰা হোৱা নাই।",
        "importuploaderrorsize": "আমদানি নথিৰ আপল'ড অসফল হৈছে ।\nঅনুমোদিত আপল'ড নথিতকৈ এই নথিৰ আকাৰ ডাঙৰ ।",
        "importuploaderrorpartial": "আমদানি নথিৰ আপল'ড অসফল হৈছে ।\nনথিখন কেৱল আংশিকভাৱে আপল'ড কৰা হৈছে ।",
        "importuploaderrortemp": "আমদানি নথিৰ আপল'ড বিফল হৈছে ।\nএটা অস্থায়ী ফ'ল্ডাৰ হেৰাইছে ।",
        "import-error-create": "\"$1\" পৃষ্ঠাটো আমদানি কৰা নহ'ল কাৰণ ইয়াক সৃষ্টি কৰিবলৈ আপোনাৰ অনুমতি নাই।",
        "import-error-interwiki": "\"$1\" পৃষ্ঠাটো আমদানি কৰা নহ'ল কাৰণ ইয়াৰ নামটো বাহিৰা সংযোগৰ (আন্তঃৱিকি) বাবে সংৰক্ষিত।",
        "import-error-special": "\"$1\" পৃষ্ঠাটো আমদানি কৰা নহ'ল কাৰণ ই পৃষ্ঠা অনুমোদন নকৰা এটা বিশেষ নামস্থানৰ অন্তৰ্গত।",
-       "import-error-invalid": "\"$1\" à¦ªà§\83ষà§\8dঠাà¦\96ন à¦\86মদানি à¦\95ৰা à¦¨à¦¹'ল à¦\95াৰণ à¦\87য়াৰ à¦¨à¦¾à¦®à¦\9fà§\8b অবৈধ।",
+       "import-error-invalid": "\"$1\" à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b à¦\86মদানি à¦\95ৰা à¦¨à¦¹'ল à¦\95াৰণ à¦¯à¦¿à¦\9fà§\8b à¦¨à¦¾à¦®à¦²à§\88 à¦\87য়াà¦\95 à¦\86মদানি à¦\95ৰিব à¦¬à¦¿à¦\9aৰা à¦¹à§\88à¦\9bিল à¦¸à§\87à¦\87à¦\9fà§\8b à¦\8fà¦\87 à§±à¦¿à¦\95িত অবৈধ।",
        "import-error-unserialize": " \"$1\" পৃষ্ঠাৰ $2 সংশোধনৰ ক্ৰম আঁতৰ কৰিব পৰা নগ'ল। এই সংশোধনে $4 ক্ৰমৰ সমল মডেল $3 ব্যৱহাৰ কৰা বুলি জনোৱা হৈছিল।",
        "import-options-wrong": "ভুল {{PLURAL:$2|বিকল্প|বিকল্পসমূহ}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "মূল পৃষ্ঠাৰ শিৰোনামা অবৈধ।",
        "tooltip-ca-protect": "এই পৃষ্ঠাটো সুৰক্ষিত কৰক",
        "tooltip-ca-unprotect": "এই পৃষ্ঠাৰ সুৰক্ষা সলনি কৰক",
        "tooltip-ca-delete": "এই পৃষ্ঠাটো বিলোপ কৰক",
-       "tooltip-ca-undelete": "বিলà§\8bপ à¦\95ৰাৰ à¦\86à¦\97à§\87য়à§\87 à¦\95ৰা à¦ªà§\83ষà§\8dঠাà¦\96নৰ à¦¸à¦¾à¦²à¦¸à¦²à¦¨à¦¿à¦¸à¦®à§\82হ à¦ªà§\81নà¦\83সংস্থাপন কৰক",
+       "tooltip-ca-undelete": "বিলà§\8bপ à¦\95ৰাৰ à¦\86à¦\97à§\87য়à§\87 à¦\95ৰা à¦ªà§\83ষà§\8dঠাà¦\9fà§\8bৰ à¦¸à¦¾à¦²à¦¸à¦²à¦¨à¦¿à¦¸à¦®à§\82হ à¦ªà§\81নৰà§\8dসংস্থাপন কৰক",
        "tooltip-ca-move": "এই পৃষ্ঠাটো স্থানান্তৰিত কৰক",
        "tooltip-ca-watch": "এই পৃষ্ঠাটো আপোনাৰ লক্ষ্য-তালিকাত যোগ কৰক",
        "tooltip-ca-unwatch": "এই পৃষ্ঠাটো আপোনাৰ লক্ষ্য-তালিকাৰ পৰা আঁতৰাওক",
        "tooltip-compareselectedversions": "এই পৃষ্ঠাত নিৰ্বাচিত দুটা সংশোধনৰ মাজত পাৰ্থক্য দেখুৱাওক",
        "tooltip-watch": "এই পৃষ্ঠাটো আপোনাৰ লক্ষ্য-তালিকাভুক্ত কৰক",
        "tooltip-watchlistedit-normal-submit": "শিৰোনামা আঁতৰাওক",
-       "tooltip-watchlistedit-raw-submit": "লক্ষ্য-তালিকা আপডেট কৰক",
+       "tooltip-watchlistedit-raw-submit": "লক্ষ্য-তালিকা আপডে'ট কৰক",
        "tooltip-recreate": "বিলোপ কৰা সত্বেও পৃষ্ঠাটো পুনৰ সৃষ্টি কৰক",
        "tooltip-upload": "আপল'ড আৰম্ভ কৰক",
        "tooltip-rollback": "\"পূৰ্ববত\" কৰিলে এটা ক্লিকত এই পৃষ্ঠাৰ শেষ অৱদানকাৰীৰ সম্পাদনা বাতিল কৰি ইয়াক পূৰ্বাৱস্থালৈ ঘূৰাই নিব।",
        "pageinfo-robot-policy": "ৰ'ব'টৰ জৰিয়তে ইন্‌ডেক্সিং কৰা হৈছে",
        "pageinfo-robot-index": "অনুমোদিত",
        "pageinfo-robot-noindex": "অনুমোদন অগ্ৰাহ্য",
-       "pageinfo-views": "দৰ্শনৰ সংখ্যা",
        "pageinfo-watchers": "পৃষ্ঠা নিৰীক্ষকৰ সংখ্যা",
        "pageinfo-few-watchers": "$1 {{PLURAL:$1|তকৈ কম নিৰীক্ষক}}",
        "pageinfo-redirects-name": "এই পৃষ্ঠালৈ থকা পুনৰ্নিৰ্দেশৰ সংখ্যা",
        "exif-urgency-low": "নিম্ন ($1)",
        "exif-urgency-high": "উচ্চ ($1)",
        "exif-urgency-other": "ব্যৱহাৰকাৰী-বিৱৰিত প্ৰাথমিকতা ($1)",
-       "watchlistall2": "সকলো",
        "namespacesall": "সকলোবোৰ",
        "monthsall": "সকলো",
        "confirmemail": "ই-মেইল ঠিকনা নিশ্চিত কৰক",
        "confirmemail_body": "কোনোবাই (সম্ভৱতঃ আপুনি) আই.পি. ঠিকনা $1ৰ পৰা এইটো ই-মেইল ঠিকনা ব্যৱহাৰ কৰি {{SITENAME}}ত\nএটা একাউণ্ট \"$2\" পঞ্জীয়ন কৰিছে ।\n\nএই একাউণ্ট আপোনাৰ হয়নে নহয় নিশ্চিত কৰাৰ বাবে আৰু {{SITENAME}}ত ই-মেইল বৈশিষ্টসমূহ সক্ৰিয় কৰাৰ বাবে\nআপোনাৰ ব্ৰাউজাৰত এই সংযোগটো খোলক:\n\n$3\n\nযদি আপুনি একাউণ্টটো পঞ্জীয়ন কৰা *নাই*, তেন্তে ই-মেইল ঠিকনা নিশ্চিতকৰণ বাতিলৰ বাবে\nএই সংযোগটো চাওক:\n\n$5\n\nএই নিশ্চিতকৰণ সংকেতৰ ম্যাদ $4ত উকলিব ।",
        "confirmemail_body_changed": "কোনোবাই (সম্ভৱতঃ আপুনি) আই.পি. ঠিকনা $1ৰ পৰা {{SITENAME}}ত\nএকাউণ্ট \"$2\"ৰ ই-মেইল ঠিকনা সলনি  কৰিছে ।\n\nএই একাউণ্ট আপোনাৰ হয়নে নহয় নিশ্চিত কৰাৰ বাবে আৰু {{SITENAME}}ত ই-মেইল বৈশিষ্টসমূহ পুনৰ সক্ৰিয় কৰাৰ বাবে\nআপোনাৰ ব্ৰাউজাৰত এই সংযোগটো খুলক:\n\n$3\n\nযদি একাউণ্টটো আপোনাৰ *নহয়*, তেন্তে ই-মেইল ঠিকনা নিশ্চিতকৰণ বাতিলৰ বাবে\nএই সংযোগটো চাওক:\n\n$5\n\nএই নিশ্চিতকৰণ সংকেতৰ ম্যাদ $4ত উকলিব ।",
        "confirmemail_body_set": "কোনোবাই (সম্ভৱতঃ আপুনি) আই.পি. ঠিকনা $1ৰ পৰা {{SITENAME}}ত\nএকাউণ্ট \"$2\"ৰ ইমেইল ঠিকনা এইটো প্ৰদান কৰিছে ।\n\nএই একাউণ্ট আপোনাৰ হয়নে নহয় নিশ্চিত কৰাৰ বাবে আৰু {{SITENAME}}ত ই-মেইল বৈশিষ্টসমূহ সক্ৰিয় কৰাৰ বাবে\nআপোনাৰ ব্ৰাউজাৰত এই সংযোগটো খোলক:\n\n$3\n\nযদি একাউণ্টটো আপোনাৰ *নহয়*, তেন্তে ইমেইল ঠিকনা নিশ্চিতকৰণ বাতিলৰ বাবে\nএই সংযোগটো চাওক:\n\n$5\n\nএই নিশ্চিতকৰণ সংকেতৰ ম্যাদ $4ত উকলিব ।",
-       "confirmemail_invalidated": "ই-মেইল ঠিকনা নিশ্চিতকৰণ বাতিল কৰা হৈছে",
+       "confirmemail_invalidated": "ইমেইল ঠিকনা নিশ্চিতকৰণ বাতিল কৰা হৈছে",
        "invalidateemail": "ই-মেইল নিশ্চিতকৰণ বাতিল কৰক",
        "scarytranscludedisabled": "[আন্তঃৱিকি আন্তঃভুক্তি নিষ্ক্ৰিয় কৰা আছে]",
        "scarytranscludefailed": "[$1ৰ বাবে সাঁচ অনা অসফল হৈছে]",
        "scarytranscludetoolong": "[URL অত্যাধিক দীঘল]",
        "deletedwhileediting": "'''সতৰ্কবাণী''': আপুনি সম্পাদনা আৰম্ভ কৰাৰ পাছত পৃষ্ঠাটো বিলোপ কৰা হৈছে !",
        "confirmrecreate": "আপুনি সম্পাদনা আৰম্ভ কৰাৰ পিছত সদস্য [[User:$1|$1]] ([[User talk:$1|আলোচনা]])য়ে পৃষ্ঠাটো বিলোপ কৰিছে, তাৰ কাৰণ:\n: ''$2''\nআপুনি এই পৃষ্ঠাটো আকৌ সৃষ্টি কৰিব খোজাটো নিশ্চিত কৰক ।",
-       "confirmrecreate-noreason": "à¦\86পà§\81নি à¦¸à¦®à§\8dপাদনা à¦\86ৰমà§\8dভ à¦\95ৰাৰ à¦ªà¦¿à¦\9bত à¦¸à¦¦à¦¸à§\8dয [[User:$1|$1]] ([[User talk:$1|à¦\86লà§\8bà¦\9aনা]])য়à§\87 à¦ªà§\83ষà§\8dঠাà¦\96ন à¦¬à¦¿à¦²à§\8bপ à¦\95ৰিà¦\9bà§\87 à¥¤ à¦\86পà§\81নি à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন à¦\86à¦\95à§\8c à¦¸à§\83ষà§\8dà¦\9fি à¦\95ৰিব à¦\96à§\8bà¦\9cাà¦\9fà§\8b à¦\85নà§\81à¦\97à§\8dৰহ à¦\95ৰি à¦¨à¦¿à¦¶à§\8dà¦\9aিত à¦\95ৰà¦\95 ।",
+       "confirmrecreate-noreason": "à¦\86পà§\81নি à¦¸à¦®à§\8dপাদনা à¦\86ৰমà§\8dভ à¦\95ৰাৰ à¦ªà¦¿à¦\9bত à¦¸à¦¦à¦¸à§\8dয [[User:$1|$1]] ([[User talk:$1|à¦\86লà§\8bà¦\9aনা]])য়à§\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b à¦¬à¦¿à¦²à§\8bপ à¦\95ৰিà¦\9bà§\87। à¦\86পà§\81নি à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন à¦\86à¦\95à§\8c à¦¸à§\83ষà§\8dà¦\9fি à¦\95ৰিব à¦\96à§\8bà¦\9cাà¦\9fà§\8b à¦\85নà§\81à¦\97à§\8dৰহ à¦\95ৰি à¦¨à¦¿à¦¶à§\8dà¦\9aিত à¦\95ৰà¦\95।",
        "recreate": "পুনৰ সৃষ্টি কৰক",
        "confirm_purge_button": "শুদ্ধ",
        "confirm-purge-top": "এই পৃষ্ঠাৰ কেচ্‌ খালী কৰা হওক ?",
        "confirm-watch-top": "এই পৃষ্ঠাটো আপোনাৰ লক্ষ্য-তালিকাত যোগ কৰিব?",
        "confirm-unwatch-button": "শুদ্ধ",
        "confirm-unwatch-top": "এই পৃষ্ঠাটো আপোনাৰ লক্ষ্য-তালিকাৰ পৰা আঁতৰাব?",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← পূৰ্বৱৰ্তী পৃষ্ঠা",
        "imgmultipagenext": "পৰৱৰ্তী পৃষ্ঠা →",
        "imgmultigo": "যাওক",
        "watchlistedit-raw-legend": "অশোধিত অনুসৰণ-তালিকা সম্পাদন কৰক",
        "watchlistedit-raw-explain": "আপোনাৰ দৰ্শন তালিকাত থকা শীৰ্ষকসমূহ তলত দেখুওৱা হৈছে, আৰু তালিকালৈ যোগ কৰি অথবা তালিকাৰ পৰা আতৰাই সম্পাদন কৰিব পাৰি;\nপ্ৰতি শাৰী এটা শীৰ্ষক হিচাপে।\nযেতিয়া সম্পূৰ্ণ হব, \"{{int:Watchlistedit-raw-submit}}\"ত ক্লিক কৰিব।\nআপুনি লগতে [[Special:EditWatchlist|প্ৰামাণিক সম্পাদকক ব্যৱহাৰ কৰিব পাৰে]]।",
        "watchlistedit-raw-titles": "শিৰোনামা:",
-       "watchlistedit-raw-submit": "লক্ষ্য-তালিকা আপডেট কৰক",
+       "watchlistedit-raw-submit": "লক্ষ্য-তালিকা আপডে'ট কৰক",
        "watchlistedit-raw-done": "আপোনাৰ লক্ষ্য-তালিকা নবীকৰণ কৰা হ'ল",
        "watchlistedit-raw-added": "{{PLURAL:$1|এটা শিৰোনামা|$1-টা শিৰোনামা}} যোগ কৰা হ'ল:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|এটা শিৰোনামা|$1-টা শিৰোনামা}} আঁতৰোৱা হ'ল:",
        "watchlistedit-clear-titles": "শিৰোনামাসমূহ:",
        "watchlistedit-clear-submit": "লক্ষ্য-তালিকা পৰিষ্কাৰ কৰক (এইটো স্থায়ী!)",
        "watchlistedit-clear-done": "আপোনাৰ লক্ষ্য-তালিকা পৰিষ্কাৰ কৰা হ'ল।",
+       "watchlisttools-clear": "লক্ষ্য-তালিকা পৰিষ্কাৰ কৰক",
        "watchlisttools-view": "সংগতি থকা সাল-সলনিবোৰ চাওক",
        "watchlisttools-edit": "লক্ষ্য-তালিকা চাওক আৰু সম্পাদনা কৰক",
        "watchlisttools-raw": "অশোধিত লক্ষ্য-তালিকা সম্পাদনা কৰক",
        "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-ext-colheader-credits": "লেখকসকল",
+       "version-license-title": "$1ৰ বাবে অনুজ্ঞাপত্ৰ",
        "version-poweredby-credits": "এই ৱিকি '''[https://www.mediawiki.org/ মিডিয়াৱিকিৰ]''' দ্বাৰা প্ৰচলিত , কপিৰাইট © ২০০১-$1 $2.",
        "version-poweredby-others": "অন্য",
        "version-poweredby-translators": "translatewiki.net অনুবাদকসকল",
        "compare-submit": "তুলনা কৰক",
        "compare-invalid-title": "আপুনি নিৰ্ধাৰণ কৰা শিৰোনামাটো অবৈধ ।",
        "compare-title-not-exists": "আপুনি নিৰ্ধাৰণ কৰা ফাইলটোৰ অস্বিত্ব নাই ।",
-       "compare-revision-not-exists": "à¦\86পà§\81নি à¦¨à¦¿à§°à§\8dধাৰণ à¦\95ৰা à¦¸à¦\82শà§\8bধনà§\80à¦\9fà§\8bৰ à¦\85সà§\8dবিত্ব নাই ।",
+       "compare-revision-not-exists": "à¦\86পà§\81নি à¦¨à¦¿à§°à§\8dধাৰণ à¦\95ৰা à¦¸à¦\82শà§\8bধনà¦\9fà§\8bৰ à¦\85সà§\8dতিত্ব নাই ।",
        "dberr-problems": "দুঃখিত! চাইটটোত কিছু কাৰিকৰী সমস্যা হৈছে ।",
        "dberr-again": "অলপ সময় অপেক্ষা কৰি পুনৰ আপল'ডৰ চেষ্টা কৰক ।",
        "dberr-info": "(তথ্যকোষৰ চাৰ্ভাৰৰ লগত যোগাযোগ কৰিব নোৱাৰি: $1)",
        "sqlite-has-fts": "$1 সম্পূৰ্ণ-পাঠ অনুসন্ধান সমৰ্থন সহ",
        "sqlite-no-fts": "$1 সম্পূৰ্ণ-পাঠ অনুসন্ধান সমৰ্থন অবিহনে",
        "logentry-delete-delete": "$3 পৃষ্ঠাটো $1ৰদ্বাৰা {{GENDER:$2|বিলোপ কৰা হ'ল}}",
-       "logentry-delete-restore": "$3 পৃষ্ঠাখন $1 ৰদ্বাৰা {{GENDER:$2|পুনৰ্সংৰক্ষণ কৰা হ'ল}}",
+       "logentry-delete-restore": "$1-এ $3 পৃষ্ঠাটো {{GENDER:$2|পুনৰ্সংৰক্ষণ কৰিলে}}",
        "logentry-delete-event": "$3: $4 -ত {{PLURAL:$5|এটা লগ ঘটনা|$5 লগ ঘটনাসমূহ}} -ৰ $1 পৰিৱৰ্তন কৰা দৃশ্যমানতা",
        "logentry-delete-revision": "পৃষ্ঠা $3ত {{PLURAL:$5|এটা সংশোধন|$5 সংশোধনসমূহ}}ৰ দৃশ্যমানতা $1 {{GENDER:$2|য়ে সলালে}}: $4",
        "logentry-delete-event-legacy": "$3ত ল'গ ঘটনাসমূহৰ দৃশ্যমানতা $1 {{GENDER:$2|ৰদ্বাৰা সলোৱা হ'ল}}",
        "logentry-rights-rights-legacy": "$1-ৰ গোট সদস্যপদ $3-লৈ সলনি কৰা হ'ল",
        "logentry-rights-autopromote": "$1ক  $4ৰ পৰা $5লৈ স্বয়ংক্ৰিয়ভাৱে পদোন্নীত কৰা হ’ল",
        "rightsnone": "(নাই)",
+       "revdelete-summary": "সম্পাদনাৰ সাৰমৰ্ম",
        "feedback-bugornote": "যদি আপুনি এটা কাৰিকৰী সমস্যাৰ বিৱৰণ দিবলৈ প্ৰস্তুত, অনুগ্ৰহ কৰি [$1 এটা বাগ ৰিপ'ৰ্ট কৰক]।\nনহ'লে আপুনি তলৰ সহজ ফৰ্ম ব্যৱহাৰ কৰিব পাৰিব। আপোনাৰ মন্তব্য আপোনাৰ সদস্যনাম আৰু আপুনি ব্যৱহাৰ কৰা ব্ৰাউজাৰৰ সৈতে \"[$3 $2]\" -পৃষ্ঠাত যোগ কৰা হ'ব।",
        "feedback-subject": "বিষয়:",
        "feedback-message": "বাৰ্তা:",
        "expand_templates_output": "ফলাফল",
        "expand_templates_ok": "ওকে",
        "expand_templates_remove_comments": "মন্তব্য গু়চাওক",
-       "expand_templates_preview": "খচৰা"
+       "expand_templates_preview": "খচৰা",
+       "pagelanguage": "পৃষ্ঠাৰ ভাষা নিৰ্বাচক",
+       "pagelang-name": "পৃষ্ঠা",
+       "pagelang-language": "ভাষা",
+       "pagelang-use-default": "ডিফল্ট ভাষা ব্যৱহাৰ কৰক",
+       "pagelang-select-lang": "ভাষা নিৰ্বাচন কৰক",
+       "right-pagelang": "পৃষ্ঠাৰ ভাষা পৰিৱৰ্তন কৰক",
+       "action-pagelang": "পৃষ্ঠাৰ ভাষা পৰিৱৰ্তন কৰক",
+       "log-name-pagelang": "ভাষা পৰিৱৰ্তন ল'গ"
 }
index dfb04a9..0bae445 100644 (file)
        "otherlanguages": "N'otres llingües",
        "redirectedfrom": "(Redirixío dende $1)",
        "redirectpagesub": "Páxina de redireición",
+       "redirectto": "Redirixe a:",
        "lastmodifiedat": "L'últimu cambiu d'esta páxina foi el $1, a les $2.",
        "viewcount": "Esta páxina visitóse {{PLURAL:$1|una vegada|$1 vegaes}}.",
        "protectedpage": "Páxina protexida",
        "createaccount-text": "Daquién creó una cuenta cola to direición de corréu electrónicu en {{SITENAME}} ($4) col nome «$2», y cola contraseña «$3».\nAgora tendríes d'aniciar sesión y camudar la contraseña.\n\nPues escaecer esti mensaxe si esta cuenta creóse por error.",
        "login-throttled": "Ficisti demasiaos intentos d'aniciu de sesión recientes.\nPor favor espera $1 enantes d'intentalo otra vuelta.",
        "login-abort-generic": "Falló la identificación - Encaboxao",
+       "login-migrated-generic": "La to cuenta migróse ya'l to nome d'usuariu yá nun esiste nesta wiki.",
        "loginlanguagelabel": "Llingua: $1",
        "suspicious-userlogout": "La to solicitú de zarrar sesión refugose porque paez qu'unvióla un restolador frañíu o un proxy de caché.",
        "createacct-another-realname-tip": "El nome real ye opcional.\nSi decide conseñalu, va usase p'atribuir el trabayu al usuariu.",
        "passwordreset-emailsent-capture": "Unvióse un corréu electrónicu pa reaniciar la contraseña, que s'amuesa abaxo.",
        "passwordreset-emailerror-capture": "Unvióse un corréu electrónicu pa reaniciar la contraseña, que s'amuesa abaxo, pero falló l'unviu {{GENDER:$2|al usuariu|a la usuaria}}: $1",
        "changeemail": "Camudar la direición de corréu electrónicu",
-       "changeemail-header": "Camudar la direición de corréu electrónicu de la cuenta",
        "changeemail-text": "Rellena esti formulariu pa camudar la to direición de corréu electrónicu. Tendrás d'escribir la contraseña pa confirmar esti cambéu.",
        "changeemail-no-info": "Tien d'aniciar sesión pa entrar direutamente a esta páxina.",
        "changeemail-oldemail": "Direición de corréu electrónicu actual:",
        "changeemail-none": "(nengún)",
        "changeemail-password": "La to contraseña en {{SITENAME}}:",
        "changeemail-submit": "Camudar el corréu electrónicu",
-       "changeemail-cancel": "Encaboxar",
        "changeemail-throttled": "Ficisti demasiaos intentos d'aniciu de sesión.\nPor favor espera $1 enantes d'intentalo otra vuelta.",
        "resettokens": "Reaniciar los pases",
        "resettokens-text": "Equí pue reaniciar los pases que permiten l'accesu a ciertos datos privaos asociaos cola so cuenta.\n\nTendría de facelo si los compartió con alguién de mou accidental o si la so cuenta quedó comprometida.",
        "showpreview": "Amosar previsualización",
        "showdiff": "Amosar cambeos",
        "blankarticle": "<strong>Atención:</strong> La páxina que tas a piques de crear ta balera.\nSi vuelves a facer click en «{{int:savearticle}}», crearáse la páxina ensin conteníu dengún.",
-       "anoneditwarning": "<strong>Avisu:</strong> Nun anició sesión.\nLa direición IP quedará grabada nel historial d'edición d'esta páxina.",
+       "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.",
        "missingcommenttext": "Por favor, escribi un comentariu abaxo.",
        "mergehistory-same-destination": "Les páxines d'orixe y destín nun puen ser la mesma",
        "mergehistory-reason": "Motivu:",
        "mergelog": "Rexistru de fusiones",
-       "pagemerge-logentry": "[[$1]] foi fusionada en [[$2]] (hasta la revisión $3)",
        "revertmerge": "Dixebrar",
        "mergelogpagetext": "Abaxo amuésase una llista de les fusiones más recientes d'un historial de páxina con otru.",
        "history-title": "Historial de revisiones de «$1»",
        "searchall": "toos",
        "showingresults": "Abaxo {{PLURAL:$1|amuésase '''un''' resultáu|amuésense '''$1''' resultaos}}, entamando col #'''$2'''.",
        "showingresultsinrange": "Más abaxo s'{{PLURAL:$1|amuesa|amuesen}} fasta {{PLURAL:$1|<strong>1</strong> resultáu|<strong>$1</strong> resultaos}} nel rangu ente #<strong>$2</strong> y #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Resultáu '''$1''' de '''$3'''|Resultaos '''$1 - $2''' de '''$3'''}} pa '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Resultáu <strong>$1</strong> de <strong>$3</strong>|Resultaos <strong>$1 - $2</strong> de <strong>$3</strong>}}",
        "search-nonefound": "Nun hebo resultaos que casaren cola consulta.",
        "powersearch-legend": "Busca avanzada",
        "powersearch-ns": "Buscar nos espacios de nome:",
        "prefs-tokenwatchlist": "Pase",
        "prefs-diffs": "Diferencies",
        "prefs-help-prefershttps": "Esta preferencia aplicaráse nel siguiente aniciu de sesión.",
+       "prefswarning-warning": "Ficisti cambios nes tos preferencies qu'inda nun se guardaron.\nSi abandones esta páxina ensin calcar \"$1\" les preferencies nun s'anovarán.",
        "prefs-tabs-navigation-hint": "Gabitu: pue usar les tecles de flecha izquierda y drecha pa navegar peles llingüetes de la llista.",
        "email-address-validity-valid": "La direición de corréu paez válida",
        "email-address-validity-invalid": "Escribi una direición de corréu válida",
        "randomincategory": "Páxina al debalu de la categoría",
        "randomincategory-invalidcategory": "\"$1\" nun ye un nome de categoría válidu.",
        "randomincategory-nopages": "Nun hai páxines en [[:Category:$1]].",
-       "randomincategory-selectcategory": "Ver una páxina al debalu de la categoría: $1. $2",
-       "randomincategory-selectcategory-submit": "Dir",
+       "randomincategory-category": "Categoría:",
+       "randomincategory-legend": "Páxina al debalu de la categoría",
        "randomredirect": "Redireición al debalu",
        "randomredirect-nopages": "Nun hai redireiciones nel espaciu de nomes \"$1\".",
        "statistics": "Estadístiques",
        "statistics-header-pages": "Estadístiques de páxines",
        "statistics-header-edits": "Estadístiques d'ediciones",
-       "statistics-header-views": "Estadístiques de visites",
        "statistics-header-users": "Estadístiques d'usuariu",
        "statistics-header-hooks": "Otres estadístiques",
        "statistics-articles": "Páxines de conteníu",
        "statistics-files": "Archivos xubíos",
        "statistics-edits": "Ediciones de páxines dende qu'entamó {{SITENAME}}",
        "statistics-edits-average": "Media d'ediciones por páxina",
-       "statistics-views-total": "Visites totales",
-       "statistics-views-total-desc": "Nun s'incluyen les visites a les páxines inesistentes y especiales",
-       "statistics-views-peredit": "Visites por edición",
        "statistics-users": "[[Special:ListUsers|Usuarios]] rexistraos",
        "statistics-users-active": "Usuarios activos",
        "statistics-users-active-desc": "Usuarios que realizaron una aición {{PLURAL:$1|nel caberu día|nos caberos $1 díes}}",
-       "statistics-mostpopular": "Páxines más vistes",
        "pageswithprop": "Páxines con una propiedá de páxina",
        "pageswithprop-legend": "Páxines con una propiedá de páxina",
        "pageswithprop-text": "Esta páxina llista les páxines qu'usen una propiedá de páxina determinada.",
        "uncategorizedtemplates": "Plantíes non categorizaes",
        "unusedcategories": "Categoríes non usaes",
        "unusedimages": "Imáxenes non usaes",
-       "popularpages": "Páxines populares",
        "wantedcategories": "Categoríes buscaes",
        "wantedpages": "Páxines buscaes",
        "wantedpages-badtitle": "Títulu inválidu nel conxuntu de resultaos: $1",
        "querypage-disabled": "Esta páxina especial ta desactivada por razones de rindimientu.",
        "booksources": "Fontes de llibros",
        "booksources-search-legend": "Busca de fontes de llibros",
-       "booksources-go": "Dir",
+       "booksources-search": "Buscar",
        "booksources-text": "Esta ye una llista d'enllaces a otros sitios que vienden llibros nuevos y usaos, y que puen tener más información sobre los llibros que ta buscando:",
        "booksources-invalid-isbn": "El códigu ISBN que puxisti nun paez que valga; mira que te vien copiáu de la fonte orixinal.",
        "specialloguserlabel": "Fecho por:",
        "wlheader-enotif": "La notificación per corréu electrónicu ta activada.",
        "wlheader-showupdated": "Les páxines que camudaron dende que les visitasti anteriormente amuesense en '''negrina'''",
        "wlnote": "Abaxo {{PLURAL:$1|tá'l caberu cambiu|tan los caberos <strong>$1</strong> cambios}} {{PLURAL:$2|na cabera hora|nes caberes <strong>$2</strong> hores}}, a día $3, a les $4.",
-       "wlshowlast": "Amosar les últimes $1 hores $2 díes $3",
+       "wlshowlast": "Amosar les últimes $1 hores, los últimos $2 díes",
        "watchlist-options": "Opciones de la llista de siguimientu",
        "watching": "Vixilando...",
        "unwatching": "Dexando de vixilar...",
        "exbeforeblank": "el conteníu enantes de dexar en blanco yera: '$1'",
        "delete-confirm": "Desaniciar «$1»",
        "delete-legend": "Desaniciar",
-       "historywarning": "'''Avisu:'''' La páxina que vas desaniciar tien un historial con aproximadamente $1 {{PLURAL:$1|revisión|revisiones}}:",
+       "historywarning": "<strong>Avisu:</strong> La páxina que vas desaniciar tien un historial con $1 {{PLURAL:$1|revisión|revisiones}}:",
        "confirmdeletetext": "Tas a piques d'esborrar una páxina xunto con tol so historial.\nPor favor confirma que ye lo que quies facer, qu'entiendes les consecuencies, y que lo tas faciendo acordies coles [[{{MediaWiki:Policy-url}}|polítiques]].",
        "actioncomplete": "Aición completada",
        "actionfailed": "Falló l'aición",
        "delete-edit-reasonlist": "Editar los motivos d'esborráu",
        "delete-toobig": "Esta páxina tien un historial d'ediciones grande, más de $1 {{PLURAL:$1|revisión|revisiones}}.\nRestrinxóse l'esborráu d'estes páxines pa evitar perturbaciones accidentales de {{SITENAME}}.",
        "delete-warning-toobig": "Esta páxina tien un historial d'ediciones grande, más de $1 {{PLURAL:$1|revisión|revisiones}}.\nEsborralu pue perturbar les operaciones de la base de datos de {{SITENAME}};\nobra con precaución.",
-       "delete-cantedit": "Nun pues desaniciar esta páxina porque nun tienes permisu pa editala.",
+       "deleteprotected": "Nun pues desaniciar esta páxina porque ta protexida.",
        "deleting-backlinks-warning": "'''Avisu:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otres páxines]] enllacen a, o trescluyen de, la páxina que ta a piques de desaniciar.",
        "rollback": "Revertir ediciones",
        "rollback_short": "Revertir",
        "protect-othertime": "Otru periodu:",
        "protect-othertime-op": "otru periodu",
        "protect-existing-expiry": "Caducidá actual: $2, $3",
+       "protect-existing-expiry-infinity": "Tiempu de caducidá esistente: infinitu",
        "protect-otherreason": "Motivu distintu/adicional:",
        "protect-otherreason-op": "Otru motivu",
        "protect-dropdown": "*Motivos comunes de proteición\n** Vandalismu escomanáu\n** Spamming escesivu\n** Guerra d'ediciones contraproducente\n** Páxina de tráficu altu",
        "unblocked": "[[User:$1|$1]] desbloquióse.",
        "unblocked-range": "$1 se desbloquió",
        "unblocked-id": "Desaniciose'l bloquéu $1.",
+       "unblocked-ip": "Desbloquióse a [[Special:Contributions/$1|$1]].",
        "blocklist": "Usuarios bloquiaos",
        "ipblocklist": "Usuarios bloquiaos",
        "ipblocklist-legend": "Atopar un usuariu bloquiáu",
        "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]].",
-       "import-interwiki-source": "Códigu wiki/páxina:",
+       "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",
        "import-interwiki-templates": "Incluyir toles plantíes",
        "import-interwiki-submit": "Importar",
        "pageinfo-robot-policy": "Indexación por robots",
        "pageinfo-robot-index": "Permitío",
        "pageinfo-robot-noindex": "Torgao",
-       "pageinfo-views": "Númberu de visites",
        "pageinfo-watchers": "Númberu de vixilantes de la páxina",
        "pageinfo-few-watchers": "Menos de $1 {{PLURAL:$1|vixilante|vixilantes}}",
        "pageinfo-redirects-name": "Númberu de redireiciones a esta páxina",
        "exif-urgency-low": "Baxa ($1)",
        "exif-urgency-high": "Alta ($1)",
        "exif-urgency-other": "Prioridá definía pol usuariu ($1)",
-       "watchlistall2": "too",
        "namespacesall": "toos",
        "monthsall": "toos",
        "confirmemail": "Confirmar direición de corréu",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|xubió}} una versión nueva de $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|xubió}} $3",
        "rightsnone": "(nengún)",
+       "revdelete-summary": "editar resume",
        "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:",
        "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": "¡Coime! L'aspeutu predetermináu pa la to wiki (<code>$wgDefaultSkin</code>), <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>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>$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": "¡Coime! L'aspeutu predetermináu pa la to wiki (<code>$wgDefaultSkin</code>), <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>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": "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-row-enabled": "* <code>$1</code> / $2 (activáu)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactiváu''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactiváu''')",
+       "mediastatistics": "Estadístiques de multimedia",
+       "mediastatistics-summary": "Estadístiques sobro los tipos de ficheros xubíos. Esto sólo incluye la versión más nueva d'un ficheru. Escluyense les versiones antigües o desaniciaes de los ficheros.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "Tipu MIME",
+       "mediastatistics-table-extensions": "Estensiones posibles",
+       "mediastatistics-table-count": "Númberu de ficheros",
+       "mediastatistics-table-totalbytes": "Tamañu combináu",
+       "mediastatistics-header-unknown": "Desconocíu",
+       "mediastatistics-header-bitmap": "Imaxes de mapa de bits",
+       "mediastatistics-header-drawing": "Dibuxos (imaxes vectoriales)",
+       "mediastatistics-header-audio": "Soníu",
+       "mediastatistics-header-video": "Videos",
+       "mediastatistics-header-multimedia": "Multimedia enriquecida",
+       "mediastatistics-header-office": "Oficina",
+       "mediastatistics-header-text": "Testual",
+       "mediastatistics-header-executable": "Executables",
+       "mediastatistics-header-archive": "Formatos comprimíos",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|coma al final desanicióse|comes al final desaniciáronse}} de JSON",
+       "json-error-unknown": "Hebo un problema col JSON. Error: $1",
+       "json-error-depth": "Pasóse de la fondura máxima de la pila",
+       "json-error-state-mismatch": "JSON inválidu o incorreutu",
+       "json-error-ctrl-char": "Error de caráuter de control, seique codificáu incorreutamente",
+       "json-error-syntax": "Error de sintaxis",
+       "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"
 }
index 249d6a1..2bacf2a 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Amikeco",
-            "Amire80",
-            "MF-Warburg",
-            "MONARCH79",
-            "Phoebe",
-            "Умар"
-        ]
-    },
-    "sunday": "ГьатӀан",
-    "monday": "Итни",
-    "tuesday": "Талат",
-    "wednesday": "АрбагӀ",
-    "thursday": "Хамиз",
-    "friday": "Рузман",
-    "saturday": "Шаммат",
-    "mytalk": "Дур бахlс",
-    "and": "&#32;ва",
-    "vector-view-edit": "Хисизабизе",
-    "errorpagetitle": "Гъалатl",
-    "help": "Кумек",
-    "history": "Хиса-басазул тарих",
-    "printableversion": "КутӀизе версия",
-    "permalink": "Кидаго букӀунеб рехсей",
-    "edit": "Хисизабе",
-    "talkpage": "Гьумералда тlасан бахlс",
-    "talk": "Бахlс",
-    "toolbox": "Алатал",
-    "userpage": "ГӀахьалчиясул гьумер",
-    "otherlanguages": "Цойги мацӀазда",
-    "currentevents": "Жакъасел лъугьа-бахъинал",
-    "mainpage": "БетӀераб гьумер",
-    "mainpage-description": "БетӀераб гьумер",
-    "portal": "Майдан",
-    "portal-url": "Project:Майдан",
-    "editsection": "хисизабизе",
-    "nstab-help": "Кумек",
-    "error": "Гъалатl",
-    "internalerror": "Жанисеб гъалатl",
-    "viewsource": "Код бихьи",
-    "userlogin": "ЦIар бице",
-    "userlogout": "Къватlиве лъугьине",
-    "savearticle": "Хъвай-хъвай цӀунизе",
-    "preferences": "Рекъезаби",
-    "localtime": "Бакlалъул заман",
-    "userrights-user-editname": "ГӀахьалчиясул цӀар хъвай:",
-    "recentchanges": "ЦӀиял хиса-басал",
-    "rcshowhideminor": "$1 гӀиси-микъинал хиса-басал",
-    "rcshowhidebots": "$1 бот",
-    "rcshowhideliu": "$1 цӀар рагьарал гӀахьалчагӀи",
-    "rcshowhideanons": "$1 цӀаргьечӀ",
-    "rcshowhidemine": "$1 дир хиса-басал",
-    "diff": "батӀалъи",
-    "hide": "Бахчизе",
-    "show": "Бихьизабизе",
-    "minoreditletter": "гӀ.-м.",
-    "newpageletter": "ЦӀ",
-    "recentchangeslinked": "Рухьарал хиса-басиял",
-    "recentchangeslinked-feed": "Рухьарал хиса-басиял",
-    "recentchangeslinked-toolbox": "Рухьарал хиса-басиял",
-    "uploadnologin": "Дуца цӀар бицун гьечӀо",
-    "randompage": "Цебе ккараб гьумер",
-    "shortpages": "Къокъал макъалаби",
-    "longpages": "Кlудиял гьумерал",
-    "listusers": "Гlахьалчагlазул сияхl",
-    "specialloguserlabel": "ГӀахьалчи:",
-    "allarticles": "Киналго макъалаби",
-    "watchlist": "Дур халгьабиялъул сияхl",
-    "watch": "хал гьабизе",
-    "contributions": "ГӀахьалчиясул хӀалтӀи",
-    "mycontris": "Дур гlахьаллъи",
-    "whatlinkshere": "Рехсей гьанибе",
-    "move-page-legend": "Гьумералъул цlар хисизе",
-    "movearticle": "Гьумералъул цӀар хисизе",
-    "movepagebtn": "Гьумералъул цlар хисизе",
-    "specialpages": "Хассал гьумерал"
+       "@metadata": {
+               "authors": [
+                       "Amikeco",
+                       "Amire80",
+                       "MF-Warburg",
+                       "MONARCH79",
+                       "Phoebe",
+                       "Умар",
+                       "Gazimagomedov",
+                       "Kaganer",
+                       "Аль-Гимравий"
+               ]
+       },
+       "tog-underline": "Линкал гъоркьмухъизе",
+       "tog-hideminor": "ЧIахIиял хиса-басиязул сияхIалда дагьа-макъал хиса-басиял рахчизе",
+       "tog-showtoolbar": "Хиса-басиял гьарулеб мехалда тIасияб алатазул панель бихьизабизе",
+       "tog-editondblclick": "КIиго щелчоказдалъун гьемералъул хиса-баси гьабизе",
+       "tog-oldsig": "Гьанжесеб гъулбас",
+       "underline-always": "Кидаго",
+       "underline-never": "Киданиги",
+       "sunday": "ГьатӀан",
+       "monday": "Итни",
+       "tuesday": "Талат",
+       "wednesday": "АрбагӀ",
+       "thursday": "Хамиз",
+       "friday": "Рузман",
+       "saturday": "Шаммат",
+       "sun": "ГьатI",
+       "mon": "Итн",
+       "tue": "Тал",
+       "wed": "Арб",
+       "thu": "Хам",
+       "fri": "Руз",
+       "sat": "Шам",
+       "january": "Январ",
+       "february": "Феврал",
+       "march": "Март",
+       "april": "Апрел",
+       "may_long": "Май",
+       "june": "Июн",
+       "july": "Июл",
+       "august": "Август",
+       "september": "Сентябр",
+       "october": "Октябр",
+       "november": "Ноябр",
+       "december": "Декабр",
+       "january-gen": "Январ",
+       "february-gen": "Феврал",
+       "march-gen": "Март",
+       "april-gen": "Апрел",
+       "may-gen": "Май",
+       "june-gen": "Июн",
+       "july-gen": "Июл",
+       "august-gen": "Август",
+       "september-gen": "Сентябр",
+       "october-gen": "Октябр",
+       "november-gen": "Ноябр",
+       "december-gen": "Декабр",
+       "jan": "Янв",
+       "feb": "Фев",
+       "mar": "Мар",
+       "apr": "Апр",
+       "may": "Май",
+       "jun": "Июн",
+       "jul": "Июл",
+       "aug": "Авг",
+       "sep": "Сен",
+       "oct": "Окт",
+       "nov": "Ноя",
+       "dec": "Дек",
+       "january-date": "Январ $1",
+       "february-date": "Феврал $1",
+       "march-date": "Март $1",
+       "april-date": "Апрел $1",
+       "may-date": "Май $1",
+       "june-date": "Июн $1",
+       "july-date": "Июл $1",
+       "august-date": "Август $1",
+       "september-date": "Сентябр $1",
+       "october-date": "Октябр $1",
+       "november-date": "Ноябр $1",
+       "december-date": "Декабр $1",
+       "pagecategories": "{{PLURAL:$1|1=Категория|Категориял}}",
+       "category_header": "Категориялда «$1» гьумер",
+       "subcategories": "Подкатегориял",
+       "category-media-header": "Категориялда «$1» файл",
+       "category-empty": "\"ГьабсагIаталъ гьаб категория чIобого буго.\"",
+       "hidden-categories": "{{PLURAL:$1|1=Бахчараб категория|Рахчарал категориял}}",
+       "hidden-category-category": "Рахчарал категориял",
+       "listingcontinuesabbrev": "(жеги)",
+       "about": "Программаялъул хIакъалъулъ",
+       "cancel": "НахъчIвазе",
+       "moredotdotdot": "Жеги...",
+       "morenotlisted": "Гьаб сияхI цIураб гьечIо",
+       "mypage": "Гьумер",
+       "mytalk": "Бахlс",
+       "navigation": "Навигация",
+       "and": "&#32;ва",
+       "qbfind": "ЦIехезе",
+       "qbbrowse": "Балагьизе",
+       "qbedit": "Хисизабизе",
+       "qbpageoptions": "Гьемералъул рекъезаби",
+       "qbmyoptions": "Дур рекъезаби",
+       "faq": "FAQ",
+       "errorpagetitle": "Гъалатl",
+       "tagline": "{{grammar:genitive|{{SITENAME}}}} сайталдасан материал",
+       "help": "Кумек",
+       "search": "ЦIехезе",
+       "searchbutton": "ЦIехезе",
+       "go": "Ине",
+       "searcharticle": "Ине",
+       "history": "Хиса-басазул тарих",
+       "history_short": "Тарих",
+       "printableversion": "КутӀизе версия",
+       "permalink": "Кидагояб линк",
+       "print": "КIутIизе",
+       "view": "Балагьи",
+       "view-foreign": "$1 сайталда балагьизе",
+       "edit": "Хисизабизе",
+       "create": "Гьабизе",
+       "editthispage": "Гьаб гьубер хисизабизе",
+       "create-this-page": "Гьаб гьаб гьумер гьабизе",
+       "delete": "БацIцIине",
+       "deletethispage": "Гьаб гьумер бацIине",
+       "undeletethispage": "Гьаб гьумер цӀигьабизе",
+       "undelete_short": "{{PLURAL:$1|$1 хиса-баси|1=Хиса-баси}} цӀигьабизе",
+       "viewdeleted_short": "{{PLURAL:$1|$1 бацӀцӀараб хиса-баси|$1 рацӀцӀарал хиса-басиязда|бацӀцӀараб хиса-баси}} балагьизе",
+       "protect": "Хиса-басияздасан цIунизе",
+       "protect_change": "хисизе",
+       "unprotect": "ЦӀуни хисизе",
+       "unprotectthispage": "Гьаб гьумералъул цӀуни хисизабизе",
+       "newpage": "ЦIияб гьумер",
+       "talkpage": "БахӀс",
+       "talkpagelinktext": "Бахlс",
+       "specialpage": "Хъулухъияб гьумер",
+       "personaltools": "Дур алатал",
+       "articlepage": "Балагьизе макъалаялда",
+       "talk": "Бахlс",
+       "views": "Балагьиял",
+       "toolbox": "Алатал",
+       "userpage": "ГӀахьалчиясул гьумер",
+       "imagepage": "Файлалъул гьумер балагьизе",
+       "mediawikipage": "Кагъаталъул гьумер балагьизе",
+       "otherlanguages": "Цоги мацӀазда",
+       "redirectpagesub": "Цоги гьумералда сверизабураб гьумер",
+       "lastmodifiedat": "Ахирисеб нухалъ гьаб гьумералъул хиса-баси гьабуна:  $2, $1.",
+       "protectedpage": "ЦӀунараб гьумер",
+       "jumpto": "КӀанцӀизе:",
+       "jumptonavigation": "Навигация",
+       "jumptosearch": "цIехезе",
+       "pool-errorunknown": "Лъалареб гъалатӀ",
+       "aboutsite": "{{grammar:genitive|{{SITENAME}}}} хӀакъалъулъ",
+       "currentevents": "Жакъасел лъугьа-бахъинал",
+       "edithelp": "Хисизабиялъе кумек",
+       "mainpage": "БетӀераб гьумер",
+       "mainpage-description": "БетӀераб гьумер",
+       "policy-url": "Project:КъагӀидаби",
+       "portal": "ЖамагIаталъул портал",
+       "portal-url": "Project:Майдан",
+       "privacy": "Конфиденциальносталъул сиясат",
+       "privacypage": "Project:Конфиденциальносталъул сиясат",
+       "badaccess": "Ихтияразул гъалатӀ",
+       "ok": "OK",
+       "retrievedfrom": "Босараб бакӀ — «$1»",
+       "youhavenewmessages": "Духъе $1 бачӀана ($2).",
+       "youhavenewmessagesmanyusers": "Духъе $1 бачӀана чамалиго гӀахьалчиясухъан ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|цӀияб кагъат|999=цӀиял кагътал}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|ахирисеб хиса-баси|999=ахирисел хиса-басиял}}",
+       "youhavenewmessagesmulti": "Духъе цӀиял кагътал рачӀана $1",
+       "editsection": "хисизабизе",
+       "editold": "хисизабизе",
+       "viewsourceold": "вики-текст балагьизе",
+       "editlink": "хисизабизе",
+       "viewsourcelink": "вики-текст балагьизе",
+       "editsectionhint": "$1 бутӀа хисизабизе",
+       "toc": "Жаниб бугеб жо",
+       "showtoc": "бихьизабизе",
+       "hidetoc": "бахчизе",
+       "collapsible-collapse": "Кьуризабизе",
+       "collapsible-expand": "Рагьизе",
+       "confirmable-confirm": "{{GENDER:$1|Мун}} унгойищ?",
+       "confirmable-yes": "У",
+       "confirmable-no": "Гуро",
+       "viewdeleted": "$1 балагьизеищ?",
+       "nstab-main": "Гьумер",
+       "nstab-user": "ГIахьалчи",
+       "nstab-media": "Мультимедиа",
+       "nstab-special": "Хъулухъияб гьумер",
+       "nstab-project": "Проект хIакъалъулъ",
+       "nstab-image": "Файл",
+       "nstab-mediawiki": "Кагъат",
+       "nstab-template": "Шаблон",
+       "nstab-help": "Кумек",
+       "nstab-category": "Категория",
+       "error": "Гъалатl",
+       "databaseerror-error": "ГъалатI: $1",
+       "internalerror": "Жанисеб гъалатl",
+       "badtitle": "Бегьулареб цIар",
+       "viewsource": "Вики-текст балагьизе",
+       "viewsource-title": "$1 гьумералъул вики-текст балагьизе",
+       "exception-nologin": "Мун жаниве лъугьун гьечIо",
+       "exception-nologin-text": "Жаниве лъугьине ккола.",
+       "yourname": "ХӀалтӀизабулчиясул цӀар:",
+       "userlogin-yourname": "ХӀалтӀизабулчиясул цӀар",
+       "userlogin-yourname-ph": "Дур аккаунталъул цӀар хъвае",
+       "createacct-another-username-ph": "ГӀахьалчиясул цӀар хъвай",
+       "yourpassword": "Пароль:",
+       "userlogin-yourpassword": "Пароль",
+       "userlogin-yourpassword-ph": "Дур пароль хъвае",
+       "createacct-yourpassword-ph": "Дур пароль хъвае",
+       "yourpasswordagain": "Пароль такрар гьабе:",
+       "userlogin-remembermypassword": "Системалда чӀезе",
+       "yourdomainname": "Дур домен:",
+       "login": "Жаниве лъугьине",
+       "nav-login-createaccount": "Жаниве лъугьине / аккаунт гьабизе",
+       "userlogin": "Жаниве лъугьине / аккаунт гьабизе",
+       "userloginnocreate": "Жаниве лъугьине",
+       "logout": "Къватlиве вачIизе",
+       "userlogout": "Къватlиве лъугьине",
+       "notloggedin": "Мун жаниве лъугьун гьечIо",
+       "userlogin-noaccount": "Дур аккаунт гьечIебищ?",
+       "nologin": "Дур аккаунт гьечIебищ? $1.",
+       "nologinlink": "Аккаунт гьабизе",
+       "createaccount": "Аккаунт гьабизе",
+       "gotaccount": "Дур аккаунт бугиш? $1.",
+       "gotaccountlink": "Жаниве лъугьине",
+       "loginsuccesstitle": "Жаниве лъугьана",
+       "resettokens-tokens": "Токенал:",
+       "media_tip": "Файлалъе линк",
+       "sig_tip": "Дур гъулбас ва гьабсагӀаталъ заман",
+       "summary": "Хиса-басиязул куц:",
+       "subject": "Тема/бетӀер",
+       "minoredit": "Дагьа-макъаб хиса-баси",
+       "watchthis": "Гьаб гьумералда хадуб хал кквезе",
+       "savearticle": "Хъвай-хъвай цӀунизе",
+       "preview": "ЦIебесеб",
+       "showpreview": "Цин балагьизе",
+       "showdiff": "Хисараб жо балагьизе",
+       "updated": "(ЦӀигьабуна)",
+       "note": "<strong>ХӀужа:</strong>",
+       "previewnote": "<strong>КӀочоге, мун гьабсагӀаталъ балагьула вуго макъалаялъул букӀине бугеб куцалъухъ.</strong>\nДуца гьарурал хиса-басиял цӀунун гьечӀо!",
+       "continue-editing": "Жегиги хисизабизе",
+       "editing": "Хисизаби $1",
+       "creating": "Гьабула буго цӀияб гьумер - $1",
+       "editingsection": "$1 (бутӀа) хисизаби",
+       "editingcomment": "$1 (цӀияб бутӀа) хисизаби",
+       "editconflict": "Хисизабиялул дагӀба:",
+       "yourdiff": "БатӀалъи",
+       "template-protected": "(цӀунун буго)",
+       "template-semiprotected": "(цо-цо бакӀал цунун руго)",
+       "next": "хадуб",
+       "last": "цебе",
+       "page_first": "тӀоцебесеб",
+       "page_last": "ахирисеб",
+       "histfirst": "некӀсиял",
+       "histlast": "бищун цӀиял",
+       "historysize": "($1 {{PLURAL:$1|байт|байт|байт}})",
+       "historyempty": "(чӀобого буго)",
+       "history-feed-title": "Хиса-басиязул тарих",
+       "rev-showdeleted": "бихьизабизе",
+       "revdelete-show-file-submit": "У",
+       "revdelete-reasonotherlist": "Цоги гӀила",
+       "mergehistory-reason": "ГӀила:",
+       "editundo": "нахъчIвазе",
+       "diff-empty": "(БатӀалъи гьечӀо)",
+       "preferences": "Рекъезаби",
+       "mypreferences": "Рекъезаби",
+       "localtime": "Бакlалъул заман",
+       "userrights-user-editname": "ГӀахьалчиясул цӀар хъвай:",
+       "recentchanges": "ЦӀиял хиса-басиял",
+       "rcshowhideminor": "$1 гӀиси-микъинал хиса-басиял",
+       "rcshowhideminor-show": "Бихьизабизе",
+       "rcshowhideminor-hide": "Бахчизе",
+       "rcshowhidebots": "$1 ботал",
+       "rcshowhidebots-show": "Бихьизабизе",
+       "rcshowhidebots-hide": "Бахчизе",
+       "rcshowhideliu": "$1 цӀар рагьарал гӀахьалчагӀи",
+       "rcshowhideliu-show": "Бихьизабизе",
+       "rcshowhideliu-hide": "Бахчизе",
+       "rcshowhideanons": "$1 цӀаргьечӀ",
+       "rcshowhideanons-show": "Бихьизабизе",
+       "rcshowhideanons-hide": "Бахчизе",
+       "rcshowhidepatr-show": "Бихьизабизе",
+       "rcshowhidepatr-hide": "Бахчизе",
+       "rcshowhidemine": "$1 дир хиса-басиял",
+       "rcshowhidemine-show": "Бихьизабизе",
+       "rcshowhidemine-hide": "Бахчизе",
+       "diff": "батӀалъи",
+       "hide": "Бахчизе",
+       "show": "Бихьизабизе",
+       "minoreditletter": "гӀ.-м.",
+       "newpageletter": "ЦӀ",
+       "recentchangeslinked": "Рухьарал хиса-басиял",
+       "recentchangeslinked-feed": "Рухьарал хиса-басиял",
+       "recentchangeslinked-toolbox": "Рухьарал хиса-басиял",
+       "upload": "Файл цIазе",
+       "uploadnologin": "Дуца цӀар бицун гьечӀо",
+       "randompage": "Цебе ккараб гьумер",
+       "shortpages": "Къокъал макъалаби",
+       "longpages": "Кlудиял гьумерал",
+       "listusers": "Гlахьалчагlазул сияхl",
+       "newpages": "ЦIиял гьумерал",
+       "specialloguserlabel": "ГӀахьалчи:",
+       "allarticles": "Киналго макъалаби",
+       "watchlist": "Дур халгьабиялъул сияхl",
+       "watch": "Хал кквезе",
+       "contributions": "{{GENDER:$1|ГӀахьалчиясул}} хӀалтӀи",
+       "mycontris": "Дур гlахьаллъи",
+       "whatlinkshere": "Гьанире линкал",
+       "move-page-legend": "Гьумералъул цlар хисизе",
+       "movearticle": "Гьумералъул цӀар хисизе:",
+       "movepagebtn": "Гьумералъул цlар хисизе",
+       "lastmodifiedatby": "Ахирисеб нухалъ гьаб гьумералъул хиса-баси гьабуна:  $2, $1. Хисизабуна гьас: $3.",
+       "specialpages": "Хассал гьумерал"
 }
index a8c72d1..40b39fc 100644 (file)
        "passwordreset-emailtitle": "Pinta va pata dene {{SITENAME}}",
        "passwordreset-emailelement": "Favesikyolt : $1\nUgaloraf remravlem : $2",
        "changeemail": "Betara va e-mail mane",
-       "changeemail-header": "Betara va patafe e-mail mane",
        "changeemail-oldemail": "Noelafe e-mail mane",
        "changeemail-newemail": "Warzafe e-mail mane",
        "changeemail-none": "(mek)",
        "changeemail-submit": "Betara va e-mail mane",
-       "changeemail-cancel": "Kuidera",
        "bold_sample": "Bold krent",
        "bold_tip": "Bold krent",
        "italic_sample": "Italic krent",
        "mergehistory-same-destination": "Buklita is bugraskaxo vol rotid milafo",
        "mergehistory-reason": "Lazava",
        "mergelog": "Va \"log\" joara",
-       "pagemerge-logentry": "joara va [[$1]] ko [[$2]] (betaks yo kali $3)",
        "revertmerge": "Voljoara",
        "mergelogpagetext": "Vleveon tir vexala dem tel lonoeltafa joara se va buizvot ko ar.",
        "history-title": "Va \"$1\" betarizvot",
        "searchrelated": "skedaf",
        "searchall": "kot",
        "showingresults": "Vlevefa nedira va {{PLURAL:$1|'''1''' trasiks|'''$1''' trasiks}} dem #'''$2''' toza.",
-       "showingresultsheader": "{{PLURAL:$5|Trasiks '''$1''' ke '''$3'''|Trasiks '''$1 - $2''' ke '''$3'''}} icde '''$4'''",
        "search-nonefound": "Mek trasiks vas kucilara",
        "powersearch-legend": "Aneyapara",
        "powersearch-ns": "Aneyara koe yoltxo:",
        "statistics": "Enkopaca yo",
        "statistics-header-pages": "Buenkopaceem",
        "statistics-header-edits": "Betarenkopaceem",
-       "statistics-header-views": "Wirenkopaceem",
        "statistics-header-users": "Enkopaca yo va favesik",
        "statistics-pages": "Bueem",
        "statistics-files": "Kalvajayan iyeltakeem",
        "statistics-edits-average": "Mialukafa bubetarota",
        "statistics-users-active": "Tegiraf pakesikeem",
-       "statistics-mostpopular": "Tel lorupen bueem",
        "doubleredirects": "Jontolafa graskara",
        "doubleredirectstext": "<b>Attention:</b> cette liste peut contenir des « faux positifs ». Dans ce cas, c'est probablement la page du premier #REDIRECT contient aussi du texte.<br />Chaque ligne contient les liens à la 1re et 2e page de redirection, ainsi que la première ligne de cette dernière, qui donne normalement la « vraie » destination. Le premier #REDIRECT devrait lier vers cette destination.",
        "double-redirect-fixed-move": "arrundayan [[$1]], dure graskan kal [[$2]]",
        "uncategorizedtemplates": "Lomiskaf tezeem",
        "unusedcategories": "Mefaven lomeem",
        "unusedimages": "Avuwikaf ewaveem",
-       "popularpages": "Tel lorupen bueem",
        "wantedcategories": "Eruna loma",
        "wantedpages": "Tel loderun bueem",
        "wantedfiles": "Erun iyeltak",
        "suppress": "Rokla",
        "booksources": "Vuestes suteks",
        "booksources-search-legend": "Aneyara va nevaklita",
-       "booksources-go": "Rupera",
        "specialloguserlabel": "Favesik:",
        "speciallogtitlelabel": "Vergumvelt:",
        "log": "\"logs\"",
        "wlheader-enotif": "Email walzera tir tegisa.",
        "wlheader-showupdated": "Bu betayanu vielu rin ironokon worayal tir '''sulatcalakorafu'''.",
        "wlnote": "Vleveon tid tela '''$1''' ironokafa betara mali '''$2''' ironokaf bartiv.",
-       "wlshowlast": "Nedira va ironokaf $1 bartiv isu $2 viel isu $3",
+       "wlshowlast": "Nedira va ironokaf $1 bartiv isu $2 viel isu",
        "watchlist-options": "Suzdasikiolkeem",
        "watching": "Nedis...",
        "unwatching": "Menedis...",
        "thumbnail_dest_directory": "Redura va kalbonja tir merotisa",
        "import": "Bukoburera",
        "importinterwiki": "Transwiki koburera",
-       "import-interwiki-source": "Wiki ik bu klita :",
        "import-interwiki-history": "Ksudara va kot izvotsiatos ke batu bu",
        "import-interwiki-submit": "Koburera",
        "import-interwiki-namespace": "Graskarafo yoltxo :",
        "exif-gpsspeed-n": "Webokeem",
        "exif-gpsdirection-t": "Ageltania",
        "exif-gpsdirection-m": "Zatnia",
-       "watchlistall2": "kot",
        "namespacesall": "koto",
        "monthsall": "kot",
        "confirmemail": "Va e-mail gruyel",
        "tag-filter": "[[Special:Tags|Tag]] espara:",
        "revdelete-restricted": "irutara rewana pu ristusik",
        "revdelete-unrestricted": "irutara tiolteyena pu ristusik",
-       "rightsnone": "(mek)"
+       "rightsnone": "(mek)",
+       "revdelete-summary": "betara va vildeks"
 }
index e5fa216..d3b45fa 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Alhen",
-            "Diego Grez",
-            "Erebedhel",
-            "Kanon6917"
-        ]
-    },
-    "tog-underline": "Sipita siqiraña",
-    "tog-hideminor": "Jichha jaqukipawina sullka askiptawix imantaña",
-    "tog-hidepatrolled": "Jichhnaki jaqukipawina askiptawix unch'ukita imantaña",
-    "tog-newpageshidepatrolled": "Machaqa uñstawix waruchatat uñstawix unch'ukita imantaña",
-    "tog-extendwatchlist": "Sarayawi jaqukipaw uñachayasuñatakiw unch'ukit waruch aqatatayaña",
-    "tog-usenewrc": "Jichhnaki jaqukipawi waliptäta (JavaScript munawiwa)",
-    "tog-numberheadings": "Titulun chinu achuraña",
-    "tog-showtoolbar": "Turkawit irnaqañ täta tisi uñachayaña (JavaScript munawiwa)",
-    "tog-editondblclick": "Uñstawi turkayaña päsuxuqiña (JavaScript munawiwa)",
-    "tog-editsectiononrightclick": "(JavaScript munawiwa) titulxat tuqina kupi suxuqiñampi tuqitaki turkawi luräña",
-    "tog-rememberpassword": "Akax jasanchirin imt'awija amtaña (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "tog-watchcreations": "Unch'ukit waruchatajana nayaxa uñstawix uñstayawajata yapxataña",
-    "tog-watchdefault": "Unch'ukit waruchatajana nayaxa uñstawix turkajata yapxataña",
-    "tog-watchmoves": "Unch'ukit waruchatajana nayaxa uñstawix sutiyarajata yapxataña",
-    "tog-watchdeletion": "Unch'ukit waruchatajana nayaxa uñstawix phiskhurajata yapxataña",
-    "tog-minordefault": "Sullka askiptawpacha chimpuriña",
-    "tog-previewontop": "Askiptawit llataxa nayraxa uñtawikar uñachayaña",
-    "tog-previewonfirst": "Mayïri askiptawina uñtawikar uñachayaña",
-    "tog-enotifwatchlistpages": "Nayaru chaski jalayiriña ukja unch'ukit waruchatana mäuñstawi turkañäna",
-    "tog-enotifusertalkpages": "Nayaru chaski jalayiriña ukja tuqisiwit uñstawija turkañäna",
-    "tog-enotifminoredits": "Nayaru chaski jalayiriña uñstawina sullka askiptawimpiraki",
-    "tog-enotifrevealaddr": "Yatiyawita chaski jalayirinakana chaski jalayirit untjäwija uñachayaña",
-    "tog-shownumberswatching": "Qawqha apnaqirinaka uñch'ukiskar uñacht'ayaña",
-    "tog-fancysig": "Mayaxta rixt'a (sipitarachayatawisa)",
-    "tog-uselivepreview": "Uñtawikach'ukix mirq'iña (JavaScript munawiwa) (yant'awiwaki)",
-    "tog-forceeditsummary": "Nayaru yatiyaña ukja ch'usa askiptawit juk'aptayawi apantaskaña",
-    "tog-watchlisthideown": "Unch'ukit waruchatana askiptawijax imantaña",
-    "tog-watchlisthidebots": "Unch'ukit waruchatana bot-ta askiptawipax imantaña",
-    "tog-watchlisthideminor": "Unch'ukit waruchatana sullka askiptawix imantaña",
-    "tog-watchlisthideliu": "Unch'ukit waruchatana qillqt'ayasita apnaqirina askiptawipax imantaña",
-    "tog-watchlisthideanons": "Unch'ukit waruchatana sutiwisa apnaqirina askiptawipax imantaña",
-    "tog-watchlisthidepatrolled": "Unch'ukit waruchatana unch'ukit askiptawix imantaña",
-    "tog-ccmeonemails": "Chaski jalayirija nayax yaqhar apayayäta qillqaqawix nayaru apayaña",
-    "tog-diffonly": "Manqha diff-nakax uñstawit yati utjawi janiw uñachayaña",
-    "tog-showhiddencats": "Imantata patawix uñachayaña",
-    "underline-always": "Wiñaya",
-    "underline-never": "Janipini",
-    "sunday": "tuminku",
-    "monday": "lunisa",
-    "tuesday": "martisa",
-    "wednesday": "mirkulisa",
-    "thursday": "juywisa",
-    "friday": "wirnisa",
-    "saturday": "sawaru",
-    "sun": "tum",
-    "mon": "lun",
-    "tue": "mar",
-    "wed": "mir",
-    "thu": "juy",
-    "fri": "wir",
-    "sat": "saw",
-    "january": "chichu phaxsi",
-    "february": "anata phaxsi",
-    "march": "achuqa phaxsi",
-    "april": "yapu apthapi phaxsi",
-    "may_long": "llamayu phaxsi",
-    "june": "juyphi phaxsi",
-    "july": "huillka kuti phaxsi",
-    "august": "thaya phaxsi",
-    "september": "llamp'u phaxsi",
-    "october": "taypi sata phaxsi",
-    "november": "awti phaxsi",
-    "december": "jallu qallta phaxsi",
-    "january-gen": "chichu phaxsi",
-    "february-gen": "anata phaxsi",
-    "march-gen": "achuqa phaxsi",
-    "april-gen": "yapu apthapi phaxsi",
-    "may-gen": "llamayu phaxsi",
-    "june-gen": "juyphi phaxsi",
-    "july-gen": "huillka kuti phaxsi",
-    "august-gen": "thaya phaxsi",
-    "september-gen": "llamp'u phaxsi",
-    "october-gen": "taypi sata phaxsi",
-    "november-gen": "awti phaxsi",
-    "december-gen": "jallu qallta phaxsi",
-    "jan": "chi",
-    "feb": "ana",
-    "mar": "ach",
-    "apr": "yap",
-    "may": "llam",
-    "jun": "juy",
-    "jul": "hui",
-    "aug": "tha",
-    "sep": "llmp",
-    "oct": "tay",
-    "nov": "awt",
-    "dec": "jall",
-    "article": "Amtachinu",
-    "cancel": "Jan saña",
-    "moredotdotdot": "Yapa...",
-    "mypage": "Uñstawija",
-    "navigation": "Wampuña",
-    "and": "&#32;-mpi",
-    "qbfind": "Thaqaña",
-    "qbbrowse": "Wampuña",
-    "qbedit": "Turkaña",
-    "qbpageoptions": "Uñstawitaki ajllita",
-    "qbmyoptions": "Ajllitanakaja",
-    "errorpagetitle": "Pantja",
-    "help": "Yanapaña",
-    "search": "Thaqaña",
-    "searchbutton": "Thaqaña",
-    "go": "Saraña",
-    "searcharticle": "Saraña",
-    "history": "Nayra qillqata",
-    "history_short": "Nayra qillqata",
-    "edit": "Turkaña",
-    "create": "Uñstayaña",
-    "editthispage": "Aka uñstawi turkaña",
-    "create-this-page": "Aka uñstawi uñstayaña",
-    "delete": "Pichaña",
-    "deletethispage": "Aka uñstawi phiskhuraña",
-    "undelete_short": "{{PLURAL:$1|mayaskiptawi|$1 askiptanakawi}} kutt'ayxaña",
-    "protect": "Jark'aña",
-    "protect_change": "turkaña",
-    "protectthispage": "Aka uñstawi jark'aña",
-    "unprotect": "Jark'ch'ukiña",
-    "unprotectthispage": "Aka uñstawi jark'ch'ukiña",
-    "newpage": "Machaqa uñstawi",
-    "talkpage": "Aka uñstawxat tuqisiña",
-    "talkpagelinktext": "Kutkatasiña",
-    "specialpage": "Ajalla Uñstawi",
-    "talk": "Tuqisiwi",
-    "otherlanguages": "Yaqha arunaka",
-    "protectedpage": "Uñstawi jark'ata",
-    "jumptonavigation": "wampuña",
-    "jumptosearch": "thaqaña",
-    "currentevents": "Jichha pacha",
-    "currentevents-url": "Project:Jichha pacha",
-    "mainpage": "Nayriri Uñstawi",
-    "mainpage-description": "Nayriri Uñstawi",
-    "portal": "Jayma punku",
-    "portal-url": "Project:Jayma punku",
-    "editsection": "turkaña",
-    "editold": "turkaña",
-    "editlink": "trukaña",
-    "toc": "Utjirinaka",
-    "showtoc": "uñachayaña",
-    "site-rss-feed": "$1 RSS jalsuri",
-    "site-atom-feed": "$1 Atom jalsuri",
-    "page-rss-feed": "\"$1\" RSS jalsuri",
-    "page-atom-feed": "\"$1\" Atom jalsuri",
-    "nstab-main": "Amtachinu",
-    "nstab-user": "Apnaqiri",
-    "nstab-image": "Q'ipi",
-    "nstab-help": "Yanapaña",
-    "nstab-category": "Patawi",
-    "error": "Pantja",
-    "login": "Qillqt'ayasiña",
-    "userlogin": "Qillqt'ayasiña",
-    "logout": "Mistuña",
-    "userlogout": "Mistuña",
-    "loginlanguagelabel": "Aru: $1",
-    "summary": "Juk’aptayäwi:",
-    "subject": "Yatsuwi/titulu:",
-    "minoredit": "Akax janiw taqpachäkiti",
-    "yourdiff": "Jalaqtatanaka",
-    "preferences": "Amtajarjama",
-    "prefs-rc": "Jichha kutikiptatanaka",
-    "yourlanguage": "Aru:",
-    "email": "Chaski jalayiri",
-    "recentchanges": "Jichha kutikiptatanaka",
-    "show": "uñachayaña",
-    "fileuploadsummary": "Uñt’ayawi:",
-    "license": "Iyawsawi:",
-    "license-header": "Iyawsawi:",
-    "listfiles_date": "Uru jakhu",
-    "listfiles_user": "Apnaqiri",
-    "listfiles_description": "Uñt’ayawi",
-    "file-anchor-link": "Q'ipi",
-    "filehist-user": "Apnaqiri",
-    "move": "Qillqaraña",
-    "booksources-go": "Saraña",
-    "specialloguserlabel": "Apnaqiri:",
-    "speciallogtitlelabel": "Titulu:",
-    "listusers-submit": "Uñachayaña",
-    "watch": "Uñjaña",
-    "restriction-move": "Qillqaraña",
-    "undelete-search-submit": "Thaqaña",
-    "sp-contributions-talk": "Kutkatasiña",
-    "sp-contributions-submit": "Thaqaña",
-    "ipblocklist-submit": "Thaqaña",
-    "tooltip-p-logo": "Nayriri Uñstawi",
-    "others": "yaqha",
-    "confirm_purge_button": "Iyawa saña",
-    "imgmultigo": "¡Saraña!",
-    "table_pager_limit_submit": "Saraña"
+       "@metadata": {
+               "authors": [
+                       "Alhen",
+                       "Diego Grez",
+                       "Erebedhel",
+                       "Kanon6917"
+               ]
+       },
+       "tog-underline": "Sipita siqiraña",
+       "tog-hideminor": "Jichha jaqukipawina sullka askiptawix imantaña",
+       "tog-hidepatrolled": "Jichhnaki jaqukipawina askiptawix unch'ukita imantaña",
+       "tog-newpageshidepatrolled": "Machaqa uñstawix waruchatat uñstawix unch'ukita imantaña",
+       "tog-extendwatchlist": "Sarayawi jaqukipaw uñachayasuñatakiw unch'ukit waruch aqatatayaña",
+       "tog-usenewrc": "Jichhnaki jaqukipawi waliptäta (JavaScript munawiwa)",
+       "tog-numberheadings": "Titulun chinu achuraña",
+       "tog-showtoolbar": "Turkawit irnaqañ täta tisi uñachayaña (JavaScript munawiwa)",
+       "tog-editondblclick": "Uñstawi turkayaña päsuxuqiña (JavaScript munawiwa)",
+       "tog-editsectiononrightclick": "(JavaScript munawiwa) titulxat tuqina kupi suxuqiñampi tuqitaki turkawi luräña",
+       "tog-watchcreations": "Unch'ukit waruchatajana nayaxa uñstawix uñstayawajata yapxataña",
+       "tog-watchdefault": "Unch'ukit waruchatajana nayaxa uñstawix turkajata yapxataña",
+       "tog-watchmoves": "Unch'ukit waruchatajana nayaxa uñstawix sutiyarajata yapxataña",
+       "tog-watchdeletion": "Unch'ukit waruchatajana nayaxa uñstawix phiskhurajata yapxataña",
+       "tog-minordefault": "Sullka askiptawpacha chimpuriña",
+       "tog-previewontop": "Askiptawit llataxa nayraxa uñtawikar uñachayaña",
+       "tog-previewonfirst": "Mayïri askiptawina uñtawikar uñachayaña",
+       "tog-enotifwatchlistpages": "Nayaru chaski jalayiriña ukja unch'ukit waruchatana mäuñstawi turkañäna",
+       "tog-enotifusertalkpages": "Nayaru chaski jalayiriña ukja tuqisiwit uñstawija turkañäna",
+       "tog-enotifminoredits": "Nayaru chaski jalayiriña uñstawina sullka askiptawimpiraki",
+       "tog-enotifrevealaddr": "Yatiyawita chaski jalayirinakana chaski jalayirit untjäwija uñachayaña",
+       "tog-shownumberswatching": "Qawqha apnaqirinaka uñch'ukiskar uñacht'ayaña",
+       "tog-fancysig": "Mayaxta rixt'a (sipitarachayatawisa)",
+       "tog-uselivepreview": "Uñtawikach'ukix mirq'iña (JavaScript munawiwa) (yant'awiwaki)",
+       "tog-forceeditsummary": "Nayaru yatiyaña ukja ch'usa askiptawit juk'aptayawi apantaskaña",
+       "tog-watchlisthideown": "Unch'ukit waruchatana askiptawijax imantaña",
+       "tog-watchlisthidebots": "Unch'ukit waruchatana bot-ta askiptawipax imantaña",
+       "tog-watchlisthideminor": "Unch'ukit waruchatana sullka askiptawix imantaña",
+       "tog-watchlisthideliu": "Unch'ukit waruchatana qillqt'ayasita apnaqirina askiptawipax imantaña",
+       "tog-watchlisthideanons": "Unch'ukit waruchatana sutiwisa apnaqirina askiptawipax imantaña",
+       "tog-watchlisthidepatrolled": "Unch'ukit waruchatana unch'ukit askiptawix imantaña",
+       "tog-ccmeonemails": "Chaski jalayirija nayax yaqhar apayayäta qillqaqawix nayaru apayaña",
+       "tog-diffonly": "Manqha diff-nakax uñstawit yati utjawi janiw uñachayaña",
+       "tog-showhiddencats": "Imantata patawix uñachayaña",
+       "underline-always": "Wiñaya",
+       "underline-never": "Janipini",
+       "sunday": "tuminku",
+       "monday": "lunisa",
+       "tuesday": "martisa",
+       "wednesday": "mirkulisa",
+       "thursday": "juywisa",
+       "friday": "wirnisa",
+       "saturday": "sawaru",
+       "sun": "tum",
+       "mon": "lun",
+       "tue": "mar",
+       "wed": "mir",
+       "thu": "juy",
+       "fri": "wir",
+       "sat": "saw",
+       "january": "chichu phaxsi",
+       "february": "anata phaxsi",
+       "march": "achuqa phaxsi",
+       "april": "yapu apthapi phaxsi",
+       "may_long": "llamayu phaxsi",
+       "june": "juyphi phaxsi",
+       "july": "huillka kuti phaxsi",
+       "august": "thaya phaxsi",
+       "september": "llamp'u phaxsi",
+       "october": "taypi sata phaxsi",
+       "november": "awti phaxsi",
+       "december": "jallu qallta phaxsi",
+       "january-gen": "chichu phaxsi",
+       "february-gen": "anata phaxsi",
+       "march-gen": "achuqa phaxsi",
+       "april-gen": "yapu apthapi phaxsi",
+       "may-gen": "llamayu phaxsi",
+       "june-gen": "juyphi phaxsi",
+       "july-gen": "huillka kuti phaxsi",
+       "august-gen": "thaya phaxsi",
+       "september-gen": "llamp'u phaxsi",
+       "october-gen": "taypi sata phaxsi",
+       "november-gen": "awti phaxsi",
+       "december-gen": "jallu qallta phaxsi",
+       "jan": "chi",
+       "feb": "ana",
+       "mar": "ach",
+       "apr": "yap",
+       "may": "llam",
+       "jun": "juy",
+       "jul": "hui",
+       "aug": "tha",
+       "sep": "llmp",
+       "oct": "tay",
+       "nov": "awt",
+       "dec": "jall",
+       "article": "Amtachinu",
+       "cancel": "Jan saña",
+       "moredotdotdot": "Yapa...",
+       "mypage": "Uñstawija",
+       "navigation": "Wampuña",
+       "and": "&#32;-mpi",
+       "qbfind": "Thaqaña",
+       "qbbrowse": "Wampuña",
+       "qbedit": "Turkaña",
+       "qbpageoptions": "Uñstawitaki ajllita",
+       "qbmyoptions": "Ajllitanakaja",
+       "errorpagetitle": "Pantja",
+       "help": "Yanapaña",
+       "search": "Thaqaña",
+       "searchbutton": "Thaqaña",
+       "go": "Saraña",
+       "searcharticle": "Saraña",
+       "history": "Nayra qillqata",
+       "history_short": "Nayra qillqata",
+       "edit": "Turkaña",
+       "create": "Uñstayaña",
+       "editthispage": "Aka uñstawi turkaña",
+       "create-this-page": "Aka uñstawi uñstayaña",
+       "delete": "Pichaña",
+       "deletethispage": "Aka uñstawi phiskhuraña",
+       "undelete_short": "{{PLURAL:$1|mayaskiptawi|$1 askiptanakawi}} kutt'ayxaña",
+       "protect": "Jark'aña",
+       "protect_change": "turkaña",
+       "protectthispage": "Aka uñstawi jark'aña",
+       "unprotect": "Jark'ch'ukiña",
+       "unprotectthispage": "Aka uñstawi jark'ch'ukiña",
+       "newpage": "Machaqa uñstawi",
+       "talkpage": "Aka uñstawxat tuqisiña",
+       "talkpagelinktext": "Kutkatasiña",
+       "specialpage": "Ajalla Uñstawi",
+       "talk": "Tuqisiwi",
+       "otherlanguages": "Yaqha arunaka",
+       "protectedpage": "Uñstawi jark'ata",
+       "jumptonavigation": "wampuña",
+       "jumptosearch": "thaqaña",
+       "currentevents": "Jichha pacha",
+       "currentevents-url": "Project:Jichha pacha",
+       "mainpage": "Nayriri Uñstawi",
+       "mainpage-description": "Nayriri Uñstawi",
+       "portal": "Jayma punku",
+       "portal-url": "Project:Jayma punku",
+       "editsection": "turkaña",
+       "editold": "turkaña",
+       "editlink": "trukaña",
+       "toc": "Utjirinaka",
+       "showtoc": "uñachayaña",
+       "site-rss-feed": "$1 RSS jalsuri",
+       "site-atom-feed": "$1 Atom jalsuri",
+       "page-rss-feed": "\"$1\" RSS jalsuri",
+       "page-atom-feed": "\"$1\" Atom jalsuri",
+       "nstab-main": "Amtachinu",
+       "nstab-user": "Apnaqiri",
+       "nstab-image": "Q'ipi",
+       "nstab-help": "Yanapaña",
+       "nstab-category": "Patawi",
+       "error": "Pantja",
+       "login": "Qillqt'ayasiña",
+       "userlogin": "Qillqt'ayasiña",
+       "logout": "Mistuña",
+       "userlogout": "Mistuña",
+       "loginlanguagelabel": "Aru: $1",
+       "summary": "Juk’aptayäwi:",
+       "subject": "Yatsuwi/titulu:",
+       "minoredit": "Akax janiw taqpachäkiti",
+       "yourdiff": "Jalaqtatanaka",
+       "preferences": "Amtajarjama",
+       "prefs-rc": "Jichha kutikiptatanaka",
+       "yourlanguage": "Aru:",
+       "email": "Chaski jalayiri",
+       "recentchanges": "Jichha kutikiptatanaka",
+       "show": "uñachayaña",
+       "fileuploadsummary": "Uñt’ayawi:",
+       "license": "Iyawsawi:",
+       "license-header": "Iyawsawi:",
+       "listfiles_date": "Uru jakhu",
+       "listfiles_user": "Apnaqiri",
+       "listfiles_description": "Uñt’ayawi",
+       "file-anchor-link": "Q'ipi",
+       "filehist-user": "Apnaqiri",
+       "move": "Qillqaraña",
+       "specialloguserlabel": "Apnaqiri:",
+       "speciallogtitlelabel": "Titulu:",
+       "listusers-submit": "Uñachayaña",
+       "watch": "Uñjaña",
+       "restriction-move": "Qillqaraña",
+       "undelete-search-submit": "Thaqaña",
+       "sp-contributions-talk": "Kutkatasiña",
+       "sp-contributions-submit": "Thaqaña",
+       "ipblocklist-submit": "Thaqaña",
+       "tooltip-p-logo": "Nayriri Uñstawi",
+       "others": "yaqha",
+       "confirm_purge_button": "Iyawa saña",
+       "imgmultigo": "¡Saraña!",
+       "table_pager_limit_submit": "Saraña"
 }
index 1a429a7..eb4226a 100644 (file)
        "changeemail-newemail": "Yeni e-poçt ünvanı:",
        "changeemail-none": "(yoxdur)",
        "changeemail-submit": "E-poçtu dəyiş",
-       "changeemail-cancel": "İmtina",
        "bold_sample": "Qalın mətn",
        "bold_tip": "Qalın mətn",
        "italic_sample": "Kursiv mətn",
        "mergehistory-same-destination": "Mənbə və hədəf səhifələri eyni ola bilməz",
        "mergehistory-reason": "Səbəb:",
        "mergelog": "Birləşdirmə qeydi",
-       "pagemerge-logentry": "[[$1]] [[$2]]-yə birləşdirildi ($3-ə qədər)",
        "revertmerge": "Ayır",
        "history-title": "\"$1\" səhifəsinin tarixçəsi",
        "difference-title": "\"$1\" səhifəsinin versiyaları arasındakı fərqlər",
        "searchrelated": "əlaqəli",
        "searchall": "bütün",
        "showingresults": "Aşağıda #'''$2''' ilə başlayan {{PLURAL:$1|'''$1'''-ə qədər}} nəticə göstərilib.",
-       "showingresultsheader": "'''$4''' üçün {{PLURAL:$5|'''$3'''-dən '''$1''' nəticə|'''$3'''-dən '''$1 - $2''' nəticə}}",
        "search-nonefound": "Sorğunuza uyğun nəticə tapılmadı.",
        "powersearch-legend": "Təkmil axtarış",
        "powersearch-ns": "Ad aralığında axtar:",
        "statistics": "Statistika",
        "statistics-header-pages": "Səhifə statistikası",
        "statistics-header-edits": "Redaktə statistikası",
-       "statistics-header-views": "Statistikaya bax",
        "statistics-header-users": "İstifadəçi statistika",
        "statistics-header-hooks": "Digər statistikalar",
        "statistics-articles": "Məqalələr",
        "statistics-files": "Yüklənmiş fayllar",
        "statistics-edits": "{{SITENAME}} yaranandan bəri edilən səhifə dəyişiklikləri",
        "statistics-edits-average": "Hər səhifədəki orta hesabla dəyişiklik",
-       "statistics-views-total": "Cəmi göstərmə",
-       "statistics-views-total-desc": "Mövcud olmayan və xüsusi səhifələrin göstərilmələri daxil edilməmişdir.",
-       "statistics-views-peredit": "Redaktə başına göstərmə",
        "statistics-users": "Qeydiyyatdan keçmiş [[Special:ListUsers|istifadəçilər]]",
        "statistics-users-active": "Aktiv istifadəçilər",
        "statistics-users-active-desc": "Son {{PLURAL:$1|gün|$1 gündə}} iş görən istifadəçilər",
-       "statistics-mostpopular": "Ən çox baxılan səhifələr",
        "doubleredirects": "İkiqat istiqamətləndirmələr",
        "double-redirect-fixed-move": "[[$1]] dəyişdirilib.\nHazırda [[$2]]-yə istiqamətlənib.",
        "double-redirect-fixed-maintenance": "[[$1]]-dən [[$2]]-yə ikiqat istiqamətlənmə düzəldilir.",
        "uncategorizedtemplates": "Kateqoriyasız şablonlar",
        "unusedcategories": "İstifadə edilməmiş kateqoriyalar",
        "unusedimages": "İstifadə edilməmiş fayllar",
-       "popularpages": "Məşhur səhifələr",
        "wantedcategories": "Təlabat olunan kateqoriyalar",
        "wantedpages": "Tələb olunan səhifələr",
        "wantedpages-badtitle": "Müraciət zamantı yanlış başlıq: $1",
        "booksources": "Kitab mənbələri",
        "booksources-search-legend": "Kitab mənbələri axtar",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Seç",
        "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):",
        "wlheader-enotif": " E-məktubla bildiriş aktivdir.",
        "wlheader-showupdated": "Son ziyarətinizdən sonra edilən dəyişikliklər '''qalın şriftlərlə''' göstərilmişdir.",
        "wlnote": "Aşağıdakı {{PLURAL:$1|'''$1''' dəyişiklik|'''$1''' dəyişiklik}} son {{PLURAL:$2|saatda|'''$2''' saatda}} edilmişdir.",
-       "wlshowlast": "Bunları göstər: son $1 saatı $2 günü $3",
+       "wlshowlast": "Bunları göstər: son $1 saatı $2 günü",
        "watchlist-options": "İzləmə siyahısının nizamlamaları",
        "watching": "İzlənilir...",
        "unwatching": "İzlənilmir...",
        "pageinfo-header-edits": "Redaktələr",
        "pageinfo-header-restrictions": "Səhifə mühafizəsi",
        "pageinfo-header-properties": "Səhifə xüsusiyyətləri",
-       "pageinfo-views": "Göstərmə səhifəsi",
        "pageinfo-watchers": "Baxış sayı",
        "pageinfo-firstuser": "Səhifəni yaradan",
        "pageinfo-firsttime": "Səhifənin yaranma tarixi",
        "exif-urgency-low": "Aşağı ($1)",
        "exif-urgency-high": "Yüksək ($1)",
        "exif-urgency-other": "İstifadəçi tərəfindən müəyyən olunmuş birincilik ($1)",
-       "watchlistall2": "hamısını",
        "namespacesall": "hamısı",
        "monthsall": "hamısı",
        "confirmemail": "E-məktubunu təsdiq et",
        "logentry-newusers-create2": "$1 $3 üçün istifadəçi hesabı yaratdı",
        "logentry-newusers-autocreate": "$1 hesabı avtomatik yaradıldı",
        "rightsnone": "(yoxdur)",
+       "revdelete-summary": "redaktə xülasəsi",
        "feedback-subject": "Mövzu:",
        "feedback-message": "Mesaj:",
        "feedback-cancel": "İmtina",
index e72d941..493f818 100644 (file)
@@ -11,7 +11,8 @@
                        "Mousa",
                        "Shirayuki",
                        "Microchip08",
-                       "아라"
+                       "아라",
+                       "Koroğlu"
                ]
        },
        "tog-underline": "باغلانتیلارین آلتینی خطله:",
        "cancel": "وازگئچ",
        "moredotdotdot": "داها...",
        "morenotlisted": "بۇ لیست کامل دئییل.",
-       "mypage": "صحیفه",
+       "mypage": "صفحه",
        "mytalk": "دانیشیق",
        "anontalk": "بو آی‌پی آدرسینه دانیشیق",
        "navigation": "دوْلانماق",
        "qbfind": "تاپ",
        "qbbrowse": "گؤزدن گئچیرت",
        "qbedit": "دَییشدیر",
-       "qbpageoptions": "بۇ صحیفه‌‌",
-       "qbmyoptions": "صحیفه‌‌لریم",
+       "qbpageoptions": "بۇ صفحه‌‌",
+       "qbmyoptions": "صفحه‌‌لریم",
        "faq": "چوْخ سوْروشولان سوْال‌لار",
        "faqpage": "Project:چوْخ سوْروشولان سوْال‌لار",
        "actions": "چالیشمالار",
        "searchbutton": "آختار",
        "go": "گئت",
        "searcharticle": "گئت",
-       "history": "صحیفه‌‌نین گئچمیشی",
+       "history": "صفحه‌‌نین گئچمیشی",
        "history_short": "گئچمیش",
        "updatedmarker": "سوْن باخیشیمدان سوْنرا یئنی‌لنیب‌دیر",
        "printableversion": "یازدیریرا بیلن نۆسخه",
        "newpage": "يئنی صحیفه‌‌",
        "talkpage": "بۇ صحیفه‌نی دانیش",
        "talkpagelinktext": "دانیشیق",
-       "specialpage": "اؤزل صحیفه",
+       "specialpage": "اؤزل صفحه",
        "personaltools": "شخصی آراجلار",
        "articlepage": "ایچری‌لی صحیفه‌یه باخ",
        "talk": "دانیشیق",
        "disclaimers": "رد ائتمک",
        "disclaimerpage": "Project:عمومی رد ائتمک",
        "edithelp": "ديَیشتیرمک یاردیمی",
-       "mainpage": "آنا صحیفه",
-       "mainpage-description": "آنا صحیفه",
+       "mainpage": "آنا صفحه",
+       "mainpage-description": "آنا صفحه",
        "policy-url": "Project:قایدالار",
        "portal": "توْپلوم پوْرتالی",
        "portal-url": "Project:توْپلوم پوْرتالی",
        "red-link-title": "$1 (صحیفه یوْخدور)",
        "sort-descending": "آزالان سیرالاماق",
        "sort-ascending": "چوْخالان سیرالاماق",
-       "nstab-main": "صحیفه",
+       "nstab-main": "صفحه",
        "nstab-user": "ایستیفاده‌چی صحیفه‌سی",
        "nstab-media": "مئدیا صحیفه‌سی",
        "nstab-special": "اؤزل صحیفه",
        "passwordreset-emailsent-capture": "آشاغیدا گؤستریلن کیمی بیر رمز یئنیله‌مه ایمیلی گؤندریلیب‌دیر.",
        "passwordreset-emailerror-capture": "آشاغیدا گؤستریلن کیمی بیر رمز یئنیله‌مه ایمیلی یارادیلیب‌دیر، اما {{GENDER:$2ایستیفاده‌چی}}‌یه گؤندرمگی باشاریلی اولمادی: $1",
        "changeemail": "ایمیل آدرسینی دَییشدیر",
-       "changeemail-header": "حساب ایمیل آدرسینی دَییشدیر",
        "changeemail-text": "ایمیل آدرسینیزی دَییشمک اوچون بو فورمو دولدورون. بو دَییشیگی دوغرولاماق اوچون رمزینیزی وئرمه‌لیسینیز.",
        "changeemail-no-info": "بو صحیفه‌نی دوغرو گؤردوگونوز اوچون سیستمه گیرمه‌لیسینیز.",
        "changeemail-oldemail": "ایندیکی ایمیل آدرس:",
        "changeemail-none": "(هئچ)",
        "changeemail-password": "سیزین {{SITENAME}} رمزینیز:",
        "changeemail-submit": "ایمیلی دَییشدیر",
-       "changeemail-cancel": "لغو",
        "bold_sample": "قالین یازی",
        "bold_tip": "قالین یازی",
        "italic_sample": "اَیری یازی",
        "mergehistory-same-destination": "قایناق و مقصد صحیفه‌لر، بیر اولانمازلار",
        "mergehistory-reason": "ندن",
        "mergelog": "بیرلشدیرمه سیاهی‌سی",
-       "pagemerge-logentry": "[[$1]]، [[$2]] ایله بیرلشدیریلدی (نوسخه‌لر $3-ه قدر)",
        "revertmerge": "آيیر",
        "mergelogpagetext": "آشاغدی‌دا، ان سون صحیفه بیرلشدیریلمه‌لری گؤستریلیر.",
        "history-title": "«$1»-ین گئچمیشی",
        "searchrelated": "ایلگیلی",
        "searchall": "بوتون",
        "showingresults": "آشاغیدا نومره '''$2'''-دن باشلایان {{PLURAL:$1|'''بیر'''|'''$1'''}} سونوجا قدر گؤستریلیر.",
-       "showingresultsheader": "'''$4''' اوچون {{PLURAL:$5|'''$3'''-دن '''$1''' نتیجه|'''$3'''-دن '''$1-$2''' نتیجه}}",
        "search-nonefound": "سیزین سورونوزا اویغون نتیجه تاپیلمادی.",
        "powersearch-legend": "گلیشمیش آختاریش",
        "powersearch-ns": "آدفضالاریندا آختار",
        "randomincategory": "بؤلمه‌ده راست‌گله صحیفه",
        "randomincategory-invalidcategory": "«$1» بیر گئچرلی بؤلمه آدی دئییل.",
        "randomincategory-nopages": "[[:Category:$1|$1]] بؤلمه‌سین‌ده، هئچ صحیفه یوخدور.",
-       "randomincategory-selectcategory": "بؤلمه‌دن آلیناجاق راست‌گله صحیفه: $1 $2.",
-       "randomincategory-selectcategory-submit": "گئت",
        "randomredirect": "راست‌گله یول‌لاندیرما",
        "randomredirect-nopages": "«$1» آدفضاسیندا هئچ بیر یول‌لاندیرما یوخدور.",
        "statistics": "آمارلار",
        "statistics-header-pages": "صحیفه آمارلاری",
        "statistics-header-edits": "دَییشمه آمارلاری",
-       "statistics-header-views": "باخما آمارلاری",
        "statistics-header-users": "ایستیفاده‌چی آمارلاری",
        "statistics-header-hooks": "باشقا آمارلار",
        "statistics-articles": "مقاله‌لر",
        "statistics-files": "یوکلنمیش فایل‌لار",
        "statistics-edits": "{{SITENAME}} یولا دوشندن بَری صحیفه دَییشیکلیکلری",
        "statistics-edits-average": "هر صحیفه‌ده اورتا دَییشیکلیک سایی",
-       "statistics-views-total": "گؤرونوشلر جمعی",
-       "statistics-views-total-desc": "اولمایان صحیفه‌لر و اؤزل صحیفه‌لره گؤرونوشلر، داخیل ائدیلمه‌ییب‌دیر",
-       "statistics-views-peredit": "دَییشیکلیگه گؤرونوشلر",
        "statistics-users": "یازیلمیش [[Special:ListUsers|ایستیفاده‌چیلر]]",
        "statistics-users-active": "چالیشقان ایستیفاده‌چیلر",
        "statistics-users-active-desc": "سون {{PLURAL:$1|بیر|$1}} گون‌ده بیر ایش گؤرن ایستیفاده‌چیلر",
-       "statistics-mostpopular": "ان چوخ گؤرونموش صحیفه‌لر",
        "pageswithprop": "صحیفه اؤزل‌لیگی اولان صحیفه‌لر",
        "pageswithprop-legend": "صحیفه اؤزل‌لیگی اولان صحیفه‌لر",
        "pageswithprop-text": "بو صحیفه‌ده، بیر خاص صحیفه اؤزل‌لیگی ایشلدن صحیفه‌لرین لیستی واردیر.",
        "uncategorizedtemplates": "بؤلمه‌سیز شابلون‌لار",
        "unusedcategories": "ایستیفاده ائدیلمه‌میش بؤلمه‌لر",
        "unusedimages": "ایشلنمه‌میش فایل‌لار",
-       "popularpages": "سئویلن صحیفه‌لر",
        "wantedcategories": "یسته نن بؤلمه‌لر",
        "wantedpages": "ایسته‌نیلن صحیفه‌لر",
        "wantedpages-badtitle": "مراجعت زامانتی يانلیش باشلیق: $1",
        "querypage-disabled": "پِرفورمانس اوچون بو اؤزل صحیفه باغلانیب‌دیر.",
        "booksources": "کیتاب قایناقلاری",
        "booksources-search-legend": "کیتاب قایناقلارین آختار",
-       "booksources-go": "گئت",
        "booksources-text": "آشاغیدا یئنی و ایشلنمیش کیتاب‌لار ساتان خاریجی کئچیدلرده سیز آختاردیغینیز کیتاب حاقیندا علاوه معلومات آلا بیلرسیز:",
        "booksources-invalid-isbn": "وئریلن ISBN اعتبارسیز کیمی گؤرونور؛ اورجینال قایناق‌دان کوپیالاما اشکالار اوچون نظارت ائدین.",
        "specialloguserlabel": "ایجراچی",
        "wlheader-enotif": "ایمیل ایله بیلدیریش آچیلیب‌دیر.",
        "wlheader-showupdated": "سون گؤروشونوزدن سونرا ائدیلن دییشیکلیکلر '''قالین''' گؤستریلیبدیلر.",
        "wlnote": "آشاغیداکی {{PLURAL:$1|'''$1''' ديَیشیک‌لیک|'''$1'''ديَیشیک‌لیک}}  سون {{PLURAL:$2|ساعتدا|'''$2''' ساعتدا}} ائدیلمیشدیر.$3، $4",
-       "wlshowlast": "سون $1 ساعات $2 گون گؤستر $3",
+       "wlshowlast": "سون $1 ساعات $2 گون گؤستر",
        "watchlist-options": "ایزله‌دیکلر سئچمه‌لری",
        "watching": "ایزله‌نیلیر...",
        "unwatching": "ایزله‌مه...",
        "import": "صحیفه‌لری ایدخال ائت",
        "importinterwiki": "ویکیلر اراسی چیخارما",
        "import-interwiki-text": "ایچه کؤچورمک اوچون بیر wiki و صحیفه باش‌لیغی سئچین.\nرئویزیون تاریخ‌لری و یازارلارین آدلاری قورونا‌جاق.\nبوتون ویکیلئراراسی ایچه کؤچورمه حرکت‌لری [[Special:Log/import|ایچه کؤچورمه گوندلیگینده]] یازیلماقدا‌دیر.",
-       "import-interwiki-source": "قایناق ویکی/صحیفه:",
        "import-interwiki-history": "صحیفه‌نین دییشمه تاریخچه‌لری‌نین هامی‌سینی کؤچور",
        "import-interwiki-templates": "بوتون شابلون‌لارلا بیرلیکده",
        "import-interwiki-submit": "ایچری توکمه اولسون",
        "tooltip-search": "{{SITENAME}}-دا آختار",
        "tooltip-search-go": "اولورسا بو آددا بیر صحیفه‌یه گئت",
        "tooltip-search-fulltext": "بو یازی اولان صحیفه‌لری آختار",
-       "tooltip-p-logo": "آنا صحیفه‌یه باخ",
+       "tooltip-p-logo": "آنا صفحه‌یه باخ",
        "tooltip-n-mainpage": "آنا صحیفه‌‌یه باخین",
-       "tooltip-n-mainpage-description": "آنا صحیفه‌یه باخین",
+       "tooltip-n-mainpage-description": "آنا صفحه‌یه باخ",
        "tooltip-n-portal": "پروژه‌ یه گؤره، سیز نه ایش گوره بیلرسیز، هاردا نه‌لری تاپا بیلرسیز",
        "tooltip-n-currentevents": "ایندیکی اولایلارا ایلگیلی بیلگیلر تاپ",
        "tooltip-n-recentchanges": "بو ویکی‌ده سون دَییشیکلرین لیستی",
        "pageinfo-robot-policy": "آختاریش سیستمین دورومو",
        "pageinfo-robot-index": "سییاهه آلینیشی",
        "pageinfo-robot-noindex": "ایندِکسله‌نه بیلمز",
-       "pageinfo-views": "گؤسترمه صحیفه‌سی",
        "pageinfo-watchers": "صحیفه‌نین تاماشا‌چی سایی",
        "pageinfo-few-watchers": "$1-دن آز {{PLURAL:$1|ایزله‌ین}}",
        "pageinfo-redirects-name": "بو صحیفه‌یه یول‌لاندیرمالار",
        "exif-urgency-low": "آز ($1)",
        "exif-urgency-high": "چوخ($1)",
        "exif-urgency-other": "ایستیفاده‌چی طرفین‌دن مویین اولونموش بیرینجی‌لیک ($1)",
-       "watchlistall2": "بوتون",
        "namespacesall": "بوتون",
        "monthsall": "بوتون",
        "confirmemail": "ایمیل-پوست اونوانینی تصدیق ائت",
index b92e7b6..af8a98c 100644 (file)
        "createacct-another-submit": "Тағы бер иҫәп яҙмаһын булдырырға",
        "createacct-benefit-heading": "{{SITENAME}} һеҙҙең кеүек үк кешеләр тарафынан булдырылған",
        "createacct-benefit-body1": "{{PLURAL:$1|үҙгәртеү}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|мәҡәлә|мәҡәләнең|мәҡәлә}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|мәҡәлә|мәҡәлә|мәҡәләнең}}",
        "createacct-benefit-body3": "һуңғы ваҡытта {{PLURAL:$1|ҡатнашыусы}}",
        "badretype": "Һеҙ кереткән серһүҙҙәр тап килмәй.",
        "userexists": "Керетелгән исем ҡулланыла инде.\nЗинһар, башҡа исем һайлағыҙ.",
        "passwordreset-emailsent-capture": "Серһүҙҙе ташлау тураһындағы мәғлүмәт менән электрон хат ебәрелде, уның тексы түбәндә бирелә:",
        "passwordreset-emailerror-capture": "Серһүҙҙе ташлау тураһында хәбәр итеүсе электрон хат булдырылғайны, ләкин уны  {{GENDER:$2|kullanıcıya}} түбәндәге сәбәп арҡаһында ебәреп булманы: $1",
        "changeemail": "Электрон почта адресын үҙгәртергә",
-       "changeemail-header": "Электрон почта адресын үҙгәртеү",
        "changeemail-text": "Электрон почта адресығыҙҙы үҙгәртеү өсөн түбәндәге форманы тултырығыҙ. Үҙгәртеүҙәрҙе раҫлау өсөн серһүҙегеҙҙе керетеү кәрәк буласаҡ.",
        "changeemail-no-info": "Был биткә туранан ирешеү өсөн һеҙгә системала танылыу кәрәк.",
        "changeemail-oldemail": "Хәҙерге электрон почта адресы:",
        "changeemail-none": "(юҡ)",
        "changeemail-password": "{{SITENAME}} прокты өсөн серһүҙегеҙ:",
        "changeemail-submit": "Адресты үҙгәртергә",
-       "changeemail-cancel": "Кире алырға",
        "resettokens": "Токендарҙы ташларға",
        "resettokens-text": "Иҫәп яҙмағыҙ менән бәйләнгән ҡайһы бер шәхси мәғлүмәттәрегеҙгә инеүгә юл асыусы токендарҙы ташлай алаһығыҙ.\n\nЯңылыштан уларҙы берәйһе менән уртаҡлашҡан  йәки аккаунтығыҙ ваттырылған осраҡта быны эшләү мотлаҡ.",
        "resettokens-no-tokens": "Ташлар өсөн токендар юҡ.",
        "mergehistory-same-destination": "Сығанаҡ һәм маҡсат бит бер иш булырға тейеш түгел",
        "mergehistory-reason": "Сәбәп:",
        "mergelog": "Берләштереүҙәр яҙмаһы",
-       "pagemerge-logentry": "[[$1]] менән [[$2]] берлештерелде ($3 тиклемге версиялар)",
        "revertmerge": "Бүлергә",
        "mergelogpagetext": "Түбәндә һуңғы биттәр үҙгәртеү тарихтарын берләштереүҙәр исемлеге килтерелгән.",
        "history-title": "$1 битенең үҙгәртеү тарихы",
        "searchrelated": "ҡағылышлы",
        "searchall": "барыһы",
        "showingresults": "Түбәндә №&nbsp;<strong>$2</strong> һөҙөмтәнән башлап <strong>$1</strong> {{PLURAL:$1|һөҙөмтә}} күрһәтелгән.",
-       "showingresultsheader": "'''$4''' өсөн '''$3''' һөҙөмтәнән {{PLURAL:$5|1='''$1''' һөҙөмтә|'''$1 - $2''' арауығындағы һөҙөмтәләр}}",
        "search-nonefound": "Был һорауға яуап биреүсе һөҙөмтәләр табылманы.",
        "powersearch-legend": "Киңәйтелгән эҙләү",
        "powersearch-ns": "Исем аралыҡтарында эҙләү:",
        "randomincategory": "Категориялағы осраҡлы бит",
        "randomincategory-invalidcategory": "$1 тигән категория юҡ.",
        "randomincategory-nopages": "[[:Category:$1|$1]] категорияһында биттәр юҡ.",
-       "randomincategory-selectcategory": "$1 $2 категорияһынан осраҡлы биткә күсергә.",
-       "randomincategory-selectcategory-submit": "Күсергә",
        "randomredirect": "Осраҡлы биткә күсеү",
        "randomredirect-nopages": "\"$1\" исемдәр арауығында йүнәлтеүҙәр юҡ.",
        "statistics": "Статистика",
        "statistics-header-pages": "Бит статистикаһы",
        "statistics-header-edits": "Мөхәррирләү статистикаһы",
-       "statistics-header-views": "Ҡарау статистикаһы",
        "statistics-header-users": "Ҡулланыусы статистикаһы",
        "statistics-header-hooks": "Башҡа статистика",
        "statistics-articles": "Мәҡәләләр",
        "statistics-files": "Рәсем йәки тауыш эстәлекле күсереп яҙылған файлдар",
        "statistics-edits": "{{SITENAME}} проекты булдырылған ваҡыттан башлап үҙгәртеүҙәр һаны",
        "statistics-edits-average": "Уртаса бер биткә тура килгән төҙәтеүҙәр һаны",
-       "statistics-views-total": "Ҡарап сығыуҙар",
-       "statistics-views-total-desc": "Булмаған биттәрҙе һәм махсус биттәрҙе ҡарап сығыуҙарҙы үҙ эсенә алмай",
-       "statistics-views-peredit": "Бер үҙгәртеүгә ҡарап сығыуҙар",
        "statistics-users": "Теркәлгән [[Special:ListUsers|ҡатнашыусылар]]",
        "statistics-users-active": "Әүҙем ҡатнашыусылар",
        "statistics-users-active-desc": "Һуңғы {{PLURAL:$1|1=көндә|$1 көндә}} ниндәйҙер эшмәкәрлек башҡарған ҡатнашыусылар",
-       "statistics-mostpopular": "Иң күп ҡаралған биттәр",
        "pageswithprop": "Үҙенсәлектәре ҡайтанан билдәләнгән биттәр",
        "pageswithprop-legend": "Үҙенсәлектәре ҡайтанан билдәләнгән биттәр",
        "pageswithprop-text": "Бында айырым үҙенсәлектәре ҡулдан яңыртып билдәләнгән биттәр һанала.",
        "uncategorizedtemplates": "Категорияланмаған ҡалыптар",
        "unusedcategories": "Ҡулланылмаған категориялар",
        "unusedimages": "Ҡулланылмаған файлдар",
-       "popularpages": "Популяр биттәр",
        "wantedcategories": "Кәрәкле категориялар",
        "wantedpages": "Кәрәкле биттәр",
        "wantedpages-badtitle": "Һорау һөҙөмтәләрендә дөрөҫ булмаған исем: $1",
        "querypage-disabled": "Был махсус бит һөҙөмтәлелекте арттырыу өсөн ябылған.",
        "booksources": "Китап сығанаҡтары",
        "booksources-search-legend": "Китап сығанаҡтарын эҙлә",
-       "booksources-go": "Эҙлә",
        "booksources-text": "Түбәндәге исемлектә — китаптар һатыу менән шөғөлләнеүсе сайттарға һәм китапханаларҙың эҙләү системаларына һылтанмалар, һәм уларҙа һеҙ эҙләгән китаптар тураһында өҫтәмә мәғлүмәт булыуы мөмкин.",
        "booksources-invalid-isbn": "Күрһәтелгән ISBN номерҙа хата булырға тейеш. Зинһар, номерҙы сығанаҡтан дөрөҫ күсереүегеҙҙе тикшерегеҙ.",
        "specialloguserlabel": "Башҡарыусы:",
        "wlheader-enotif": "Электрон почта аша белдереү индерелгән.",
        "wlheader-showupdated": "Һеҙҙең аҙаҡҡы кереүегеҙҙән һуң үҙгәргән биттәр '''ҡалын''' шрифт менән күрһәтелгән.",
        "wlnote": "Түбәндә $3 $4 ваҡытына тиклем аҙаҡҡы {{PLURAL:$2|1=сәғәт|'''$2''' сәғәт}} эсендә эшләнгән {{PLURAL:$1|1=үҙгәртеү|'''$1''' үҙгәртеү}} күрһәтелгән.",
-       "wlshowlast": "Һуңғы $1 сәғәт $2 көн өсөн күрһәт $3",
+       "wlshowlast": "Һуңғы $1 сәғәт $2 көн өсөн күрһәт",
        "watchlist-options": "Күҙәтеү исемлеге көйләүҙәре",
        "watching": "Күҙәтеү исемлегенә өҫтәү...",
        "unwatching": "Күҙәтеү исемлегенән сығарыу...",
        "import": "Биттәрҙе тейәү",
        "importinterwiki": "Вики проекттар-ара индереү",
        "import-interwiki-text": "Вики проектты һәм тейәлә торған биттең исемен күрһәтегеҙ.\nҮҙгәртеү ваҡыттары һәм автор исемдәре һаҡланасаҡ.\nБөтә вики проекттары-ара тейәүҙәр [[Special:Log/import|тейәү яҙмалары журналында]] теркәлә.",
-       "import-interwiki-source": "Сығанаҡ вики проект/бит:",
        "import-interwiki-history": "Был биттең бөтә үҙгәртеү тарихын яҙҙырырға",
        "import-interwiki-templates": "Бөтә ҡалыптарҙы индерергә",
        "import-interwiki-submit": "Тейәргә",
        "pageinfo-robot-policy": "Эҙләү роботтары тарафынан индексацияланыу",
        "pageinfo-robot-index": "Рөхсәт ителгән",
        "pageinfo-robot-noindex": "Рөхсәт ителмәй",
-       "pageinfo-views": "Ҡарау һаны",
        "pageinfo-watchers": "Битте күҙәтеүселәр һаны",
        "pageinfo-few-watchers": "Күп тигәндә $1 {{PLURAL:$1|күҙәтеүсе}}",
        "pageinfo-redirects-name": "Был биткә йүнәлтеүҙәр һаны",
        "exif-urgency-low": "Түбән ($1)",
        "exif-urgency-high": "Юғары ($1)",
        "exif-urgency-other": "Ҡулланыусы билдәләгән өҫтөнлөк ($1)",
-       "watchlistall2": "бөтә",
        "namespacesall": "бөтә",
        "monthsall": "бөтә",
        "confirmemail": "Электрон почта адресын раҫлау",
        "logentry-rights-rights-legacy": "$1  $3 өсөн төркөмдәрҙәге ағзалыҡты {{GENDER:$2|үҙгәртте}}",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|}} автоматик рәүештә {{GENDER:$2|}} $4 урынына $5 ителде.",
        "rightsnone": "(юҡ)",
+       "revdelete-summary": "үҙгәртеүҙәр тасуирламаһы",
        "feedback-bugornote": "Әгәр Һеҙ техник проблеманы ентекле рәүештә аңлатырға теләһәгеҙ, зинһар, [$1 хата тураһында белдерегеҙ].\nБашҡа осраҡта, ошо ябай форманы ҡуллана алаһығыҙ. Комментарийығыҙ «[$3 $2]» битенә ҡулланыусы исемегеҙ һәм браузер мәғлүмәте менән өҫтәләсәк.",
        "feedback-subject": "Тема:",
        "feedback-message": "Хәбәр:",
        "duration-minutes": "$1 {{PLURAL:$1|1=минут|минут}}",
        "duration-hours": "$1 {{PLURAL:$1|1=сәғәт|сәғәт}}",
        "duration-days": "$1 {{PLURAL:$1|1=көн|көн}}",
-       "duration-weeks": "$1 {{PLURAL:$1|аҙна|аҙна|аҙналар}}",
+       "duration-weeks": "$1 {{PLURAL:$1|аҙна|аҙналар|аҙна}}",
        "duration-years": "$1 {{PLURAL:$1|1=йыл|йылдар}}",
        "duration-decades": "$1 {{PLURAL:$1|1=ун көнлөк|ун көнлөктәр}}",
        "duration-centuries": "$1 {{PLURAL:$1|1=быуат|быуаттар}}",
index 4ebcf4a..daada20 100644 (file)
        "search-interwiki-more": "(mea)",
        "searchrelated": "vawandt",
        "searchall": "olle",
-       "showingresultsheader": "{{PLURAL:$5|Ergebnis '''$1''' vo '''$3'''|Ergebniss '''$1–$2''' vo '''$3'''}} fia '''$4'''",
        "search-nonefound": "Fia dei Suachofrog gibts koa Ergebnis",
        "powersearch-legend": "Daweiterde Suach",
        "powersearch-ns": "Suach in Nåmensraim:",
        "statistics-files": "Aufféglooderne Daatein",
        "statistics-edits": "Seitenbeorweitungen",
        "statistics-edits-average": "Beorweitungen pró Seiten im Durchschnit",
-       "statistics-views-total": "Seitenaufruaff gsåmmt",
-       "statistics-mostpopular": "Dé am moastbsuachten Seiten",
        "doubleredirects": "Doppede Weidaloatunga",
        "doubleredirectstext": "Af dea Seitn stengan Weidaloatunga, de wo af Weidaloatunga zoang.\n\nA <del>duachgstrichane</del> Eidrog is scho repariad worn.",
        "double-redirect-fixed-maintenance": "Doppede Weidaloatunga vo [[$1]] af [[$2]] mid oana Aktion reparian.",
        "uncategorizedtemplates": "Néd kategorisirde Vurlong",
        "unusedcategories": "Néd bnutzde Kategorien",
        "unusedimages": "Néd bnutzde Daatein",
-       "popularpages": "Dé bliabtersten Seiten",
        "wantedcategories": "Bnutzde, ower néd åglégte Kategorien",
        "wantedpages": "Gwynschde Seiten",
        "wantedpages-badtitle": "Ungütiger Titel im Ergeewnis: $1",
        "pager-older-n": "{{PLURAL:$1|vorheriga|vorherign $1}}",
        "booksources": "ISBN-Suach",
        "booksources-search-legend": "Suach noch Bezugsquejn fia Biacha",
-       "booksources-go": "Suach",
        "log": "Logbiacha",
        "all-logs-page": "Olle effmtlichen Logbiacher",
        "alllogstext": "Des is de kombinierte Anzeige vo alle in {{SITENAME}} gführten Logbiacha. Die Ausgabe ko durch de Auswahl vom Logbuchtyp, vom Benutzer oder vom Seitntitel eigschränkt wern.",
        "wlheader-enotif": "Da E-Mail-Benoochrichtigungsdeanst is aktivierd.",
        "wlheader-showupdated": "Seiten mid noh néd gseengne Änderrungen wern '''fett''' dorgstöd.",
        "wlnote": "Es {{PLURAL:$1|fóigt d' létzde Änderrung|fóing d' létzden '''$1''' Änderrungen}} voh da/dé {{PLURAL:$2|Stund| '''$2''' Stunden}}. Staund: $3, $4 Uar.",
-       "wlshowlast": "Zoag dé Änderrungen voh dé létzden $1 Stunden, $2 Dog óder $3 (in dé létzden 30 Dog).",
+       "wlshowlast": "Zoag dé Änderrungen voh dé létzden $1 Stunden, $2 Dog óder  (in dé létzden 30 Dog).",
        "watchlist-options": "Mei Beobochta: Optiona",
        "watching": "Beówochten ...",
        "unwatching": "Néd Beówochten",
        "metadata-fields": "De foigandn Fejda vo de EXIF-Metadaten, wo im MediaWiki-Systemtext ogebm san, wean auf Buidbschriebseitn mid eikloppta Metadatentabejn ozoagt.\nWeidane wean standardmassi ned ozoagt.\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-gpsspeed": "Gschwindigkeid vom GPS-Empfänger",
        "exif-componentsconfiguration-0": "Gibts néd",
-       "watchlistall2": "olle",
        "namespacesall": "olle",
        "monthsall": "olle",
        "confirmemail": "E-Post-Adressn bestäting (Authentifiziarung)",
        "htmlform-selectorother-other": "Åndre",
        "logentry-move-move_redir": "$1 hod de Seitn $3 af $4 {{GENDER:$2|verschom}} und hod dabei a Weidaloatung ibaschriem",
        "logentry-move-move_redir-noredirect": "$1 hod de Seitn $3 af $4 {{GENDER:$2|verschom}} und dabei a Weidaloatung ibaschriem, ohne a neiche ozlegn",
+       "revdelete-summary": "Zåmmfossungskommentar",
        "searchsuggest-search": "Suach",
        "searchsuggest-containing": "Voitextsuach noch ..."
 }
index 829e636..6ecfcb3 100644 (file)
        "passwordreset-username": "Goar pamangke",
        "passwordreset-domain": "Domain:",
        "changeemail-none": "(Ndada)",
-       "changeemail-cancel": "Sundati",
        "bold_sample": "Surat tobal",
        "bold_tip": "Surat na hapal",
        "italic_sample": "Guratan Italic",
        "search-suggest": "On do ra maksudmu: $1",
        "searchrelated": "marpandomuan",
        "searchall": "sude",
-       "showingresultsheader": "{{PLURAL:$5|Hasil '''$1''' sian '''$3'''|Hasil '''$1 - $2''' sian '''$3'''}} tu '''$4'''",
        "search-nonefound": "Ndang adong hasil na suman tu pangidoan",
        "powersearch-toggleall": "Sude",
        "powersearch-togglenone": "Ndang adong",
        "move": "Paorot",
        "pager-newer-n": "{{PLURAL:$1|na imbaru|na imbaru $1}}",
        "pager-older-n": "{{PLURAL:$1|na leleng|$1 na lumeleng}}",
-       "booksources-go": "Torushon",
        "log": "Angka log",
        "allpages": "Sude alaman",
        "allarticles": "Sude alaman",
        "watchlistfor2": "Laho tu $1 $2",
        "watch": "Parrohahon",
        "unwatch": "Sundat mamarrohahon",
-       "wlshowlast": "Pataridahon $1 jom $2 ari $3 na parpudi",
+       "wlshowlast": "Pataridahon $1 jom $2 ari  na parpudi",
        "actioncomplete": "Sae ulaon",
        "actionfailed": "Ulaon sundat",
        "dellogpage": "Log pasesaan",
        "metadata-fields": "Angka bidang metadata gombar na dipajojor di bagasan tona on naeng dipamasuk di hataridaan ni alaman gombar tingki tabel metadata dipametmet. Data na asing gabe dibunihon songon naung ditontuhon.\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": "Bolak",
        "exif-imagelength": "Timbo",
-       "watchlistall2": "Sasude",
        "namespacesall": "sude",
        "monthsall": "Sasude",
        "watchlisttools-edit": "Pataridahon jala patota daftar siparrohahonon",
index 08c0dde..f038e86 100644 (file)
@@ -27,6 +27,7 @@
        "tog-watchdefault": "منی اصلاح کتگین فایل و پیجانء چارگ لیستء توکا هوار کن",
        "tog-watchmoves": "منی سُرینتگین فایل و پیجانء چارگ لیستء توکا هوار کن",
        "tog-watchdeletion": "منی حذف کتگین فایل و پیجانء چارگ لیستء توکا هوار بکن",
+       "tog-watchrollback": "آ دیمانی آڈ کورتین که آوانا برگردان کورته اون په منی پیگیری لیستی هاتیرا",
        "tog-minordefault": "په طور پیش فرض کل اصلاحات آ په داب جزی مشخص کن",
        "tog-previewontop": "بازبین پیش دار پیش چه جعبه اصلاح",
        "tog-previewonfirst": "ته اولین اصلاح بازبینی پیش دار",
        "editfont-monospace": "فۆنت گۆن مالومێن پاسلگ",
        "editfont-sansserif": "بئ گۆشگێن فۆنت",
        "editfont-serif": "گۆشه دارێن فۆنت",
-       "sunday": "Û\8cÚ© Ø´Ù\86بÙ\87",
-       "monday": "دÙ\88Ø´Ù\86بÙ\87",
-       "tuesday": "سی شنبه",
-       "wednesday": "Ú\86ارشÙ\86بÙ\87",
-       "thursday": "Ù¾Ù\86Ú\86 Ø´Ù\86بÙ\87",
-       "friday": "آدینگ",
-       "saturday": "Ø´Ù\86بÙ\87",
-       "sun": "ی.شنبه",
-       "mon": "د.شنبه",
-       "tue": "س.شنبه",
-       "wed": "چ.شنبه",
-       "thu": "پ.شنبه",
-       "fri": "آدینگ",
-       "sat": "Ø´Ù\86بÙ\87",
-       "january": "ژانویه",
-       "february": "Ù\81Ù\88رÛ\8cÙ\87",
-       "march": "مارس",
+       "sunday": "Û\8cÚ© Ø´Ù\85بÛ\8c",
+       "monday": "دÙ\88Ø´Ù\85بÛ\8c",
+       "tuesday": "سئه شمبی",
+       "wednesday": "Ú\86ارشÙ\85بÛ\8c",
+       "thursday": "Ù¾Ù\86Ú\86 Ø´Ù\85بÛ\8c",
+       "friday": "آدینگ ٬جوما",
+       "saturday": "Ø´Ù\85بÛ\8c",
+       "sun": "یک شمی",
+       "mon": "دو شمبی",
+       "tue": "سئه شمبی",
+       "wed": "چار شمبی",
+       "thu": "پنچ شمبی",
+       "fri": "آدینگ٬ جوما",
+       "sat": "Ø´Ù\85بÛ\8c",
+       "january": "جنوری",
+       "february": "Ù¾Û\8cبرÙ\88رÛ\8c",
+       "march": "مارچ",
        "april": "آپریل",
        "may_long": "می",
        "june": "جون",
        "july": "جولای",
        "august": "آگوست",
-       "september": "سپتامبر",
-       "october": "اکتبر",
-       "november": "نومبر",
+       "september": "سپٹامبر",
+       "october": "اکتوبر",
+       "november": "نوامبر",
        "december": "دسمبر",
-       "january-gen": "ژانویه",
-       "february-gen": "Ù\81Ù\88رÛ\8cÙ\87",
-       "march-gen": "مارس",
+       "january-gen": "جنوری",
+       "february-gen": "Ù¾Û\8cبرÙ\88رÛ\8c",
+       "march-gen": "مارچ",
        "april-gen": "آپریل",
        "may-gen": "می",
        "june-gen": "جون",
        "july-gen": "جولای",
        "august-gen": "آگوست",
-       "september-gen": "سپتمبر",
-       "october-gen": "اکتبر",
-       "november-gen": "نومبر",
+       "september-gen": "سپٹامبر",
+       "october-gen": "اکتوبر",
+       "november-gen": "نوامبر",
        "december-gen": "دسمبر",
-       "jan": "جن",
-       "feb": "Ù\81ب",
-       "mar": "ما",
-       "apr": "آپر",
+       "jan": "جنوری",
+       "feb": "Ù¾Û\8cبرÙ\88رÛ\8c",
+       "mar": "مارچ",
+       "apr": "آپریل",
        "may": "می",
        "jun": "جون",
-       "jul": "جول",
-       "aug": "آگ",
-       "sep": "سپت",
-       "oct": "اکت",
-       "nov": "نو",
-       "dec": "دس",
-       "january-date": "جانری، بهارگاه $1",
-       "february-date": "Ù\81براری، اۆستپان $1",
+       "jul": "جولای",
+       "aug": "آگوست",
+       "sep": "سپٹ\tامبر",
+       "oct": "اکتوبر",
+       "nov": "نوامبر",
+       "dec": "دسمبر",
+       "january-date": "جنوری، بهارگاه $1",
+       "february-date": "Ù¾Û\8cبرÙ\88ری، اۆستپان $1",
        "march-date": "مارچ، مۆلمان $1",
        "april-date": "اپریل، کرا $1",
        "may-date": "مئ، سۆچکان $1",
        "june-date": "جون، جلکان $1",
-       "july-date": "جÙ\88Ù\84ئ، سهێل $1",
-       "august-date": "اگست، ساچان $1",
-       "september-date": "سپتمبر، تۆمشان $1",
+       "july-date": "جÙ\88Ù\84اÛ\8c، سهێل $1",
+       "august-date": "اگوست، ساچان $1",
+       "september-date": "سپٹامبر، تۆمشان $1",
        "october-date": "اکتۆبر، سارتان $1",
-       "november-date": "نومبر، گۆپشان $1",
-       "december-date": "دسمبر، تاکشان $1",
+       "november-date": "نوامبر، گۆپشان $1",
+       "december-date": "دسمبر، تۆمشان $1",
        "pagecategories": "{{PLURAL:$1|دسته|دسته جات}}",
        "category_header": "صفحات ته دسته \"$1\"",
        "subcategories": "زیردسته جات",
        "article": "محتوا صفحه",
        "newwindow": "(ته نوکین پنچره ی پچ کن)",
        "cancel": "کنسل",
-       "moredotdotdot": "گیشتر...",
+       "moredotdotdot": "گیشتیر...",
        "morenotlisted": "ائ لیست پکا نه انت",
-       "mypage": "تاک",
+       "mypage": "دÛ\8cÙ\85 Û\8cا ØªØ§Ú©",
        "mytalk": "گپ",
        "anontalk": "گپ کن گون ای آی پی",
        "navigation": "گردگ",
        "and": "&#32;و",
-       "qbfind": "درگیزگ",
+       "qbfind": "ودی کورتین",
        "qbbrowse": "بروز",
-       "qbedit": "اصلاح",
-       "qbpageoptions": "صÙ\81Ø­Ù\87",
-       "qbmyoptions": "Ù\85Ù\86Û\8c ØµÙ\81حات",
+       "qbedit": "ایڈیٹ",
+       "qbpageoptions": "اÛ\8c Ø¯Û\8cÙ\85",
+       "qbmyoptions": "Ù\85Ù\86Û\8c Ø¯Û\8cÙ\85اÙ\86",
        "faq": "ب.ج.س",
        "faqpage": "Project:ب.ج.س",
        "actions": "کاران",
        "variants": "گوشگان",
        "navigation-heading": "منوء ناویگ",
        "errorpagetitle": "حطا",
-       "returnto": "تررگ Ø¨Ù\87 $1.",
-       "tagline": "چه {{SITENAME}}",
-       "help": "کمک",
+       "returnto": "Ø´Ù\88تÛ\8cÙ\86 Ø¨Û\8c $1.",
+       "tagline": "شه {{SITENAME}}",
+       "help": "Ú©Ù\88Ù\85Ú©",
        "search": "گردگ",
        "searchbutton": "گردگ",
-       "go": "برو",
-       "searcharticle": "برو",
-       "history": "تارÛ\8cØ­ ØµÙ\81Ø­Ù\87",
-       "history_short": "تارÛ\8cØ­",
+       "go": "برا",
+       "searcharticle": "برا",
+       "history": "دÛ\8cÙ\85Û\8c ØªØ§Ø±Û\8cØ®",
+       "history_short": "دپتر",
        "updatedmarker": "په روچ بیتگین چه منی اهری  اهری  چارگ",
        "printableversion": "نسخه چهاپی",
        "permalink": "دایمی لینک",
        "print": "چهاپ",
-       "view": "چارگ",
-       "view-foreign": "بÚ\86ار Ù\85اÙ\86 $1",
-       "edit": "اصلاح",
-       "edit-local": "لوکال دسکریپشنء اصلاح کن",
-       "create": "شرکتن",
-       "create-local": "لوکال دسکریپشنء هوار کن",
-       "editthispage": "اÛ\8c ØµÙ\81Ø­Ù\87 Ø§ØµÙ\84اح Ú©ن",
-       "create-this-page": "اÛ\8c ØµÙ\81Ø­Ù\87 Ø´Ø±Ú©ØªÙ\86 Ú©ن",
-       "delete": "حذف",
-       "deletethispage": "اÛ\8c ØµÙ\81Ø­Ù\87 Ø­Ø°Ù\81 Ú©ن",
-       "undeletethispage": "ائ تاکء دلیت مکن",
-       "undelete_short": "حذف مکن {{PLURAL:$1|one edit|$1 edits}}",
-       "viewdeleted_short": "چارگ {{باز،زیاتیگ:$1|یکین حذف بوتگین اصلاح|$1 اصلاح کتگانء حذف بکن}}",
-       "protect": "Ø­Ù\81اظت",
-       "protect_change": "عÙ\88ض Ú©ن",
-       "protectthispage": "اÛ\8c ØµÙ\81Ø­Ù\87 Ø­Ù\81اظت Ú©Ù\86",
+       "view": "دیستین",
+       "view-foreign": "بگÛ\8cÙ\86د Ø¨Û\8c $1",
+       "edit": "ایڈیٹ",
+       "edit-local": "لوکال دسکریپشنء ایڈیٹ کورتین",
+       "create": "جÙ\88Ú\91 Ú©Ù\88رتÛ\8cن",
+       "create-local": "لوکال دسکریپشنء اڈ کورتین",
+       "editthispage": "اÛ\8c Ø¯Û\8cÙ\85ا Ø§Û\8cÚ\88Û\8cÙ¹ Ú©Ù\88رتÛ\8cن",
+       "create-this-page": "اÛ\8c Ø¯Û\8cÙ\85Û\8c Ø¬Ù\88Ú\91 Ú©Ù\88رتÛ\8cن",
+       "delete": "پاک کورتین",
+       "deletethispage": "اÛ\8c Ø¯Û\8cÙ\85Û\8c Ù¾Ø§Ú© Ú©Ù\88رتÛ\8cن",
+       "undeletethispage": "ای دیما پاک مکن",
+       "undelete_short": "پاک مکن {{PLURAL:$1|one edit|$1 edits}}",
+       "viewdeleted_short": "نمایش داتین {{PLURAL:$1|یک پاک بوتینوکین ای\tڈیٹی |$1 پاک بوتینوکین ای\tڈیٹ}}",
+       "protect": "ساتÛ\8cتÛ\8cÙ\86",
+       "protect_change": "بدÙ\84 Ú©Ù\88رتÛ\8cن",
+       "protectthispage": "اÛ\8c Ø¯Û\8cÙ\85ا Ø¨Ø³Ø§Øª",
        "unprotect": "پروتکشنء ٹگل بدئ",
        "unprotectthispage": "ائ تاکء پروتکشنء ٹگل بدئ",
-       "newpage": "Ù\86Ù\88Ú©Û\8cÙ\86 ØµÙ\81Ø­Ù\87",
-       "talkpage": "اÛ\8c ØµÙ\81Ø­Ù\87 بحث کن",
+       "newpage": "Ù\86Ù\88Ú©Û\8cÙ\86 Ø¯Û\8cÙ\85",
+       "talkpage": "اÛ\8c Ø¯Û\8cÙ\85ا بحث کن",
        "talkpagelinktext": "گپ کن",
-       "specialpage": "حاصین صفحه",
+       "specialpage": "هاسین دیم",
        "personaltools": "شخصی وسایل",
        "articlepage": "محتوا صفحه به گند",
-       "talk": "بحث",
+       "talk": "گپ",
        "views": "چارگان",
        "toolbox": "ابزار",
        "userpage": "به گند صفحه کاربر",
        "projectpage": "به گند صفحه",
-       "imagepage": "به چار فایل صفحه ءَ",
-       "mediawikipage": "به گند صفحه کوله",
-       "templatepage": "به گند صفحه تمپلت آ",
-       "viewhelppage": "به گند صفحه کمک آ",
-       "categorypage": "به گند صفحه دسته آ",
+       "imagepage": "بگیند پایلی دیما",
+       "mediawikipage": "بگیند پیامی دیما",
+       "templatepage": "بگیند تیملیتی دیما",
+       "viewhelppage": "بگیند کومکی دیما",
+       "categorypage": "بگیند کتیگوریی دیما",
        "viewtalkpage": "به گند بحث آ",
-       "otherlanguages": "تÙ\87 Ø¯Ú¯Ø± Ø²Ø¨Ø§Ù\86",
+       "otherlanguages": "بÛ\8c Ø¯Ú¯Ù\87 Ø²Ø¨Ø§Ù\86اÙ\86Û\8c ØªØ§",
        "redirectedfrom": "(غیر مستقیم بوتگ چه $1)",
        "redirectpagesub": "صفحه غیر مستقیم",
+       "redirectto": "مسیری ٹگل داتین بی:",
        "lastmodifiedat": "  $2, $1.ای صفحه اهری تغییر دهگ بیته",
        "viewcount": "ای صفحه دسترسی بیتگ {{PLURAL:$1|بار|$1رند}}.",
        "protectedpage": "صفحه محافظتی",
        "disclaimers": "بی میاری گیان",
        "disclaimerpage": "Project:عمومی بی میاریگان",
        "edithelp": "کمک اصلاح",
-       "mainpage": "صÙ\81Ø­Ù\87 Ø§ØµÙ\84Û\8c",
-       "mainpage-description": "صÙ\81Ø­Ù\87 Ø§ØµÙ\84Û\8c",
+       "mainpage": "بÙ\8fÙ\86Û\8cادÛ\8c Ø¯Û\8cÙ\85",
+       "mainpage-description": "بÙ\8fÙ\86Û\8cادÛ\8c Ø¯Û\8cÙ\85",
        "policy-url": "Project:سیاست",
        "portal": "پرتال انجمن",
        "portal-url": "Project:پرتال انجمن",
        "newmessageslinkplural": "{{PLURAL:$1|نوکین کله|999=نوکین کله هان}}",
        "newmessagesdifflinkplural": "$1 {{PLURAL:$1|ٹگل داتن|پهکین ٹگل}}",
        "youhavenewmessagesmulti": "شما را نوکین کوله یان هست ته   $1",
-       "editsection": "اصلاح",
-       "editold": "اصلاح",
+       "editsection": "ایڈیٹ",
+       "editold": "ایڈیٹ",
        "viewsourceold": "به گند منبع ا",
-       "editlink": "اصلاح",
+       "editlink": "ایڈیٹ",
        "viewsourcelink": "چارگ منبع",
        "editsectionhint": ": $1اصلاح انتخاب",
        "toc": "محتوا",
        "showtoc": "پیش دار",
-       "hidetoc": "پناه کن",
-       "collapsible-collapse": "چیر داتن",
+       "hidetoc": "چیهر داتین",
+       "collapsible-collapse": "چیهر داتین",
        "collapsible-expand": "تچک کتن",
        "confirmable-confirm": "آیا {{GENDER:$1|شما}} مطمعین ویت?",
        "confirmable-yes": "هان",
        "page-atom-feed": "منبع \"$1\" Atom",
        "feed-atom": "اتم",
        "feed-rss": "ار اس اس",
-       "red-link-title": "$1 (هنگت  نیستن)",
+       "red-link-title": "$1 (ای دیم وجود نداریت)",
        "sort-descending": "نزولی نز آرتن",
        "sort-ascending": "صعودی نز آرتن",
-       "nstab-main": "صÙ\81Ø­Ù\87",
-       "nstab-user": "صفحه کاربر",
-       "nstab-media": "صفحه مدیا",
-       "nstab-special": "حاصین صفحات",
-       "nstab-project": "صفحه پروژه",
-       "nstab-image": "Ù\81ایل",
+       "nstab-main": "دÛ\8cÙ\85 Û\8cا ØªØ§Ú©",
+       "nstab-user": "کار زوروکی دیم",
+       "nstab-media": "میڈیای دیم",
+       "nstab-special": "هاسین تاکدیم",
+       "nstab-project": "پروژه یی تاکدیم",
+       "nstab-image": "Ù¾ایل",
        "nstab-mediawiki": "کوله",
-       "nstab-template": "تمپلت",
-       "nstab-help": "صÙ\81Ø­Ù\87 Ú©Ù\85Ú©",
-       "nstab-category": "دستÙ\87",
+       "nstab-template": "تراشوان",
+       "nstab-help": "رÙ\87Ù\86Ù\85اÛ\8cÛ\8c ØªØ§Ú©Ø¯Û\8cÙ\85",
+       "nstab-category": "تÙ\87ر",
        "nosuchaction": "نی چشین عمل",
        "nosuchactiontext": "ای کاری که گون اای یو ار ال مشخص بیتت نامشخص انت.\nشما بلکین یو‌ارال شر ننوشتت یا رند چه هرابیت لینکی اتکگیت\nشی بلکین یک خطایی ته برنامه سایت {{SITENAME}} پیش داریت.",
        "nosuchspecialpage": "نی چشین حاصین صفحه",
        "invalidtitle-knownnamespace": "نامهتبرین عنوان گون نامء جاگاه «$2» ءُ تکست «$3»",
        "invalidtitle-unknownnamespace": "نامهتبرین نام گون ناشناسین نامء جاگاه نمبر $1 ءُ تکست «$2»",
        "exception-nologin": "مان نبیتگ ات",
-       "exception-nologin-text": "دزبندی انت سیستمء تها [[Special:Userlogin|مان بئیت]] تانکه بتوان ات ائ تاکء بگند ات.",
+       "exception-nologin-text": "مهربانی بکنیت بی سامانه یی [[Special:Userlogin|لوگین بیبیت]] تا که بتوانیت بی ای دیما دسترسی داشته به ئیت.",
        "exception-nologin-text-manual": "دزبندی انت  $1  تانکه شمارء پر ائ تاک یانکه اکشنء دزرس ببیت انت.",
        "virus-badscanner": "تنظیم بد: ناشناسین اسکنر ویروس: ''$1''",
        "virus-scanfailed": "اسکن پروش وارت(کد $1)",
        "logouttext": "''' شما انیگء در شُت ات'''\nبزان که تانکه شمئی بروزرء چیرداتگین هافظه پهک مبیت، لهتئ چه تاکان ممکن انت رندا هم هنچوش پیش دارگ ببنت که انگار شما لاگین کتگ ات.",
        "welcomeuser": "وشاتک ات $1!",
        "welcomecreation-msg": "انیگء شمئی اکانت اڈ بیتگ انت.\nمشموش ات که وتی [[Special:Preferences|ترجیحات {{SITENAME}}]] رء ٹگل دئیت.",
-       "yourname": "نام کاربری",
-       "userlogin-yourname": "اکانتء نام",
+       "yourname": "کار زوروکی نام:",
+       "userlogin-yourname": "کار زوروکی نام",
        "userlogin-yourname-ph": "وتی یوزرنامء بلک ات",
        "createacct-another-username-ph": "وتی یوزرنامء بلک ات",
        "yourpassword": "کلمه رمز",
        "nav-login-createaccount": "ورود/شرکتن حساب",
        "userlogin": "ورود/شرکتن حساب",
        "userloginnocreate": "لاگین",
-       "logout": "در بیگ",
-       "userlogout": "در بیگ",
+       "logout": "در بوتین",
+       "userlogout": "در بوتین",
        "notloggedin": "وارد نهت",
        "userlogin-noaccount": "شما رء اکانت نه انت؟",
        "userlogin-joinproject": "مان {{SITENAME}} ناملکی بکن ات!",
        "nologin": "حسابء  نیستن؟ '''$1'''.",
-       "nologinlink": "شرکتن یک حساب",
+       "nologinlink": "یک حسابی جوڑ کورتین",
        "createaccount": "حساب شرکن",
        "gotaccount": "یک حساب الان هست؟'''$1'''.",
        "gotaccountlink": "ورود",
        "createacct-another-email-ph": "ایمیلء ادرسء بلک ات",
        "createaccountmail": "کارمرز چه وتکارین موقتین پسورد ءُ رندا آئی دیم داتن پر مالومین ایمیل",
        "createacct-realname": "شمئی اصلیگین نام (ایهتیاری)",
+       "createaccountreason": "دلیل:",
+       "createacct-reason": "دلیل:",
        "createacct-reason-ph": "پرچا شما ادگر نوکین اکانتء اڈ کن ات",
        "createacct-captcha": "سکیوریتی چک",
        "createacct-imgcaptcha-ph": "برزین سیاهگء ادان بلک ات",
        "createaccount-text": "یکی یک حساب په شمی آدرس ایمیل ته  {{SITENAME}} گون نام ($4)  \"$2\"، گون کلمه رمز \"$3\" شرکتت.\nشما بایدن وارد بیت و وتی کلمه رمز الان عوض کنیت.\n\nشما شاید ای پیام شموشیت اگه ای ای حساب گون حطا شر بوتت.",
        "login-throttled": "شما انیگ پر لاگین کتنء چنت بار جهد کتگ ات. دزبندی انت پیسر چه پدایین جهدء $1 موه بداریت.",
        "login-abort-generic": "شمئی لاگینء پکا نبیت - Aborted",
+       "login-migrated-generic": "شمی کاربرین حساب منتکل بوته ، و شمی کاربری نام دیگه ای ویکی تا وجود نداریت .",
        "loginlanguagelabel": "زبان: $1",
        "suspicious-userlogout": "شمئی لوٹ پر در شتن چه سیستمء رد بوت پرچا که چوش که پیداگ انت ائ لوٹ چه هرابین بروزر یانکه پراکسیء راهیگ بیتگ انت.",
        "createacct-another-realname-tip": "اصلیگین نام ایهتیاری انت.\nاگان آئرا بلک ات رهشونء درگتء پر شمئی سیاهگان چه اصلیگین نام کارمرز بیت انت.",
        "passwordreset-legend": "نوکین پسوردء بلوٹ",
        "passwordreset-disabled": "پسوردء واتر کتن مان ائ ویکیء نافعال بیتگ انت.",
        "passwordreset-emaildisabled": "ایمیلء حالتان مان ائ ویکیء نافعال بیتگ انت.",
-       "passwordreset-username": "یوزرنام:",
+       "passwordreset-username": "کار زوروکی نام:",
        "passwordreset-domain": "دامین:",
        "passwordreset-capture": "آسریگین ایمیل پیش دارگ بیت؟",
        "passwordreset-capture-help": "اگان ائ گزینگ رء نشانیگ بهل ات، یک ایمیلء (گون موکتین پسوردء) شما رء پیش دارگ بیت ءُ هنچوش پر کاربرء راهیگ بیت انت.",
        "passwordreset-emailsent-capture": "یک ایمیلء پر پسورد واترء واسته که جهلیگء پیش دارگ بیت، راهیگ بیتگ انت.",
        "passwordreset-emailerror-capture": "واترین ایمیل، که جهلیگء پیش دارگ بیت، اڈ بوت، بلئی آئی راهیگ پر {{GENDER:$2|کاربر}} پکا نبوت: $1",
        "changeemail": "ایمیل ادرسء ٹگل بدئ",
-       "changeemail-header": "وتی اکانتء ایمیل ادرسء ٹگل بدئ",
        "changeemail-text": "ائ فرمء پکا کن ات تانکه شمئی ایمیلء ٹگل به بیت. پریشی که ائ تغییرء تایید کن ات ضرور انت وتی پسوردء بلک ات.",
        "changeemail-no-info": "پر یکپارگین دزرسی مان ائ تاکء پیکن لاگین کن ات.",
        "changeemail-oldemail": "انیگین ایمیل ادرس:",
        "changeemail-none": "هج کجام",
        "changeemail-password": " {{SITENAME}} شمئی پسورد:",
        "changeemail-submit": "ایمیلء ٹگل بدئ",
-       "changeemail-cancel": "کنسیل",
        "changeemail-throttled": "شما انیگ پر لاگین کتنء چنت بار جهد کتگ ات. دزبندی انت پیسر چه پدایین جهدء $1 موه بداریت.",
        "resettokens": "پجاروکان(tokens)ی واتر",
        "resettokens-text": "شما توان ات پجاروکان(tokens) که دزرسیء اجازت پر شمئی وتیگین دیتا همگرنچ گون شمئی اکانتء دینت، واتر بکن ات.\nهما درگتء ائ کار بیت کنت که نامالومین شهسء شمئی اکانتء لاگین کتگ انت.",
        "subject": "موضوع/سرخط:",
        "minoredit": "ای شی یک هوردین اصلاحیت",
        "watchthis": "ای صفحه بچار",
-       "savearticle": "صÙ\81Ø­Ù\87 Ø°Ø®Û\8cرÙ\87 Ú©ن",
-       "preview": "بازبین",
+       "savearticle": "تاکدÛ\8cÙ\85Ù\90 Ø°Ø®Û\8cرÙ\87 Ú©Ù\88رتÛ\8cن",
+       "preview": "دÛ\8cستین",
        "showpreview": "بازبین پیش دار",
        "showdiff": "تغییرات پیش دار",
-       "anoneditwarning": "'''هوژاری:''' شما وارد نه بیتگیت.\nشمی آی پی ته تاریح اصلاح ای صفحه ثبت بیت.",
+       "blankarticle": "<strong>هشتار:</strong> شما بی یک هالی دیمی جوڑ\t کورتینا ئالاتا ویت.\nاگه \"{{int:savearticle}}\" ها پدا کلیک کنیت، بدون مئتواین دیمی جوڑ\tا بیت .",
+       "anoneditwarning": "<strong>هشتار:</strong> شما لوگین نه بوته ایت . شمی آی پی نشانی په موچان دیستینی وڑ\tا بیت اگه هر \tٹگلی جوڑ\t بداریت . اگه <strong>[$1 لوگین بئیت]</strong> یا <strong>[$2 یک کاربرین حسابی جوڑ بکنیت]</strong>، شمی ایڈیت بی شمی کاربرین نام نسبت داته آ بینت، لوڑ گون دیگرین مزایایان .",
        "anonpreviewwarning": "''شما مان سیستمء لاگین نکتگ. ذخیره کتنء حالت شمئی آی‌پیء نشانیگ مان ائ پیجء هاپزگ سبت بیت انت.''",
        "missingsummary": "'''یادآوری:''' شما یک خلاصه چه اصلاح وارد نه کرت.\nاگر دگه کلیک کنیت ذخیره آ، شمی اصلاح به بی آی ذخیره بنت.",
        "missingcommenttext": "لطفا یک نظری وارد کنیت جهل آ",
        "edit-gone-missing": "نه تونیت صفحهء په روچی کنت.\nچوش که جاه کیت آیی حذف بوتگت.",
        "edit-conflict": "جنگ اصلاحی",
        "edit-no-change": "شمی اصلاح نادید گرگ بوت، په چی که هچ تغییری په متن دهگ نه بوت.",
-       "postedit-confirmation-created": "تاک اڈ بوت.",
+       "postedit-confirmation-created": "تاکدیم جوڑ بوت.",
        "postedit-confirmation-restored": "تاک واتر بوت.",
        "postedit-confirmation-saved": "شمئی ادیت ذخیرگ بوت.",
        "edit-already-exists": "نه تونیت یک نوکین صفحه ای شر کنت.\nهنو شی هستن.",
        "content-model-text": "سادگین سیاهگ",
        "content-model-javascript": "جاوا اسکریپٹ",
        "content-model-css": "سی اس اس",
+       "duplicate-args-category": "آ دیمان که گٹ زورته بوته انت گون تکرارین دلیلان بی تماس تیمپلیتی تا",
        "expensive-parserfunction-warning": "هوژاری: ای صفحه شامل بازگین توار عملگر تجریه کنوک سنگیننت.\nآیی بایدن کمتر چه  $2{{PLURAL:$2|توار|توار}}, داشته بیت ادان هنو  $1 هست.",
        "expensive-parserfunction-category": " صفحات گونبازگین توار عملگر تجریه کنوک",
        "post-expand-template-inclusion-warning": "هوژاری: اندازه شامل تمپلت باز مزننت.\nلهتی تمپلتان هور نه بینت.",
        "parser-template-recursion-depth-warning": "محدودیت عمق تررگ رد بوت ($1)",
        "language-converter-depth-warning": "چه محدودیت عمق زبانانی کارمرز گؤست ات ($1)",
        "node-count-exceeded-category": "پیج انی که گیش چه مکسیمم تعداد گره بیتگ انت",
-       "node-count-exceeded-category-desc": "کتگوری پر پیج انی که مان آهان ساب کنوگ برزتر شتگ انت.",
-       "node-count-exceeded-warning": "پیج چه مکسیمم تعداد گره گیش شُت",
+       "node-count-exceeded-category-desc": "ای دیم شه ئادین ئالا گیشتیر مشکل داریت .",
+       "node-count-exceeded-warning": "دیم شه مکسیمم اندازه ها گیشتیر گره  شُت",
        "expansion-depth-exceeded-category": "پیج انی که چه مکسیمم تچک کتنء امک (عمق) گیش شتگ انت",
-       "expansion-depth-exceeded-category-desc": "کتگری پر پیج انی که مان آهان تچک کتنء امک(عمق) گیش شتگ انت.",
+       "expansion-depth-exceeded-category-desc": "کتگوری په دیمان که آوانی تا پرش بوتینی  جولی  گیشتیر شُته گنت.",
        "expansion-depth-exceeded-warning": "پیج چه مکسیمم تچک کتنء امک(عمق) گیش شُت",
        "parser-unstrip-loop-warning": "حلقهء unstrip ودی بوت",
        "parser-unstrip-recursion-limit": "چه مکسیمم ارجاع مان دستور unstrip گیش شُت ات($1)",
        "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}}/suppress|page={{FULLPAGENAMEE}}}} هزپانی سیاهگ] موجوت بیت انت.\nشما هنچوش اگان بلوٹ ات توان ات [$1 ائ نسخگء بچار ات].",
        "rev-suppressed-text-unhide": "ائ ویرایش چه ائ پیج '''دیم داشت''' بوت.\nبلکین اطلاعات گون آئی همگرنچء مان [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} دیم داشتانی سیاهگ]. موجوت بیت انت.\nشما هنچوش اگان بلوٹ ات توان ات [$1 ائ نسخگء بچار ات].",
        "rev-deleted-text-view": "ائ ویرایش چه ائ پیج '''هزپ بیتگ انت'''.\nبلکین اطلاعات گون آئی همگرنچء مان [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} هزپانی سیاهگ]. موجوت بیت انت.",
        "mergehistory-same-destination": "صفحهٔ مبدأ و مقصد نمی‌تواند یکی باشد",
        "mergehistory-reason": "دلیل:",
        "mergelog": "آمار چن وبند",
-       "pagemerge-logentry": "چن و بند بوت [[$1]] په  [[$2]] (بازبینی ان تا$3)",
        "revertmerge": "بی چن وبند",
        "mergelogpagetext": "جهلء یک لیست چه نوکترین چن وبندان یکی تاریح صفحه په دگری هست.",
        "history-title": "$1: ویرایش انی دپتر",
        "search-result-category-size": "{{PLURAL:$1|یک عضو|$1 عضو}} ({{PLURAL:$2|یک جهلرده|$2 جهلرده}}، {{PLURAL:$3|یک فایل|$3 فایل}})",
        "search-redirect": "(غیر مستقیم $1 )",
        "search-section": "(بخش $1 )",
+       "search-category": "(تهر  $1)",
        "search-file-match": "(فایلء محتواء همجندی)",
        "search-suggest": "شما را منظور ات: $1",
        "search-interwiki-caption": "پروژه آن گوهار",
        "searchall": "کل",
        "showingresults": "جهل پیش دارگنت تا  {{PLURAL:$1|'''1'''نتیجه|'''$1''' نتایج}} شروع بنت گون #'''$2'''.",
        "showingresultsinrange": "پیش دارگ مان جهلء تان {{PLURAL:$1|<strong>1</strong> نتیجگ|<strong>$1</strong> نتیجگ}} in range #<strong>$2</strong> تان #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|نتیجه '''$1''' چه '''$3'''|نتایج '''$1 - $2''' چه '''$3'''}} په '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|نتایج <strong>$1</strong> شه <strong>$3</strong>|نتایج <strong>$1 - $2</strong> شه <strong>$3</strong>}}",
        "search-nonefound": "نتیجه هم دپ په درخواست نیست",
        "powersearch-legend": "گردگ پیشرفته",
        "powersearch-ns": "گردگ ته نام فضا آن",
        "preferences": "ترجیحات",
        "mypreferences": "ترجیحات",
        "prefs-edits": "تعداد اصلاحات:",
-       "prefsnologintext2": "دزبندی انت  $1  پر ترجیحاتء تنظیم کتن.",
+       "prefsnologintext2": "منتوارون شمی که په ٹگل داتین تنزیماتانی هاتبرا لوگین بئیت .",
        "prefs-skin": "پوست",
        "skin-preview": "بازین",
        "datedefault": "هچ ترجیح",
        "yourlanguage": "زبان:",
        "yourvariant": "زبان محتواء گؤشگ:",
        "prefs-help-variant": "شمئی درچتگین گؤشگ پر تاکانی محتواء پیش دارگ مان ائ ویکی.",
-       "yournick": "امضا:",
+       "yournick": "نوکین دسنام:",
        "prefs-help-signature": "نبشتگین کامنت ان مان ترانء تاک پیکن گون «<nowiki>~~~~</nowiki>» ایمزا به بنت؛ ائ نشانیگ گون وتکارین حالت پر شمئی ایمزا و وهدستامپء کنورتء بیت انت.",
        "badsig": "نامعتبرین حامین امضا تگان HTML چک کن",
        "badsiglength": "شمل امضا باز مزنتت.\nآی بایدن   $1 {{PLURAL:$1|کارکاتر|کاراکتران}} مزن تر مبیت",
        "yourgender": "لوٹ ات که چونکا توصیف به بیت؟",
        "gender-unknown": "ترجیحء دیان که نامالوم به بیت",
-       "gender-male": "مردین",
-       "gender-female": "جنین",
+       "gender-male": "مردین زاگ",
+       "gender-female": "جنین زاگ",
        "prefs-help-gender": "ائ تنظیمء کارمرز کتن ایهتیاری انت.\nسفتور چه ائ انداجگ پر درستین اشارگ پر شمئی اکانت گون زبانء گرامرء بهر زیر ات.\nائ اطلاهات عام انت.",
        "email": "ایمیل",
        "prefs-help-realname": "راستین  نام اهتیاریتن. اگه شما یکی انتخاب کنیت شی په شمی کارء نشان هلگ په روت.",
        "prefs-help-email-required": "آدرس ایمیل نیازنت.",
        "prefs-info": "اولگین اطلاعات",
        "prefs-i18n": "بین المللی کتن",
-       "prefs-signature": "اÙ\85ضا",
+       "prefs-signature": "دسÙ\86اÙ\85",
        "prefs-dateformat": "تاریح داب",
-       "prefs-timeoffset": "وهد بنگیج",
+       "prefs-timeoffset": "بنگیج بوتینِ وهد",
        "prefs-advancedediting": "عمومی تنظیمات",
        "prefs-editor": "اصلاح کنوک",
        "prefs-preview": "پیشچارگ",
        "prefs-tokenwatchlist": "نشانگ",
        "prefs-diffs": "پرک",
        "prefs-help-prefershttps": "ائ ترجیحء تاثیر رند چه شمئی رندی لاگینء کارمرز بیت انت.",
+       "prefswarning-warning": "شمی ٹگل داتینوکین ترجیئات تا انون زاپاس نه بوته انت .\nاگه ای دیم بدون شه کلیک کورتینا بی «$1» ایلا بیت شمی ترجیئات زاپاسا نه بیینت .",
        "prefs-tabs-navigation-hint": "بزان: شما توان ات چه چپی و راستی پیشداروکین بٹن ان  پر حرکت زبانگ انی توکا مان زبانگانی لیست کارمرز بکن ات.",
        "email-address-validity-valid": "شمئی ایمیل ادرس پر درستی پیداگ انت",
        "email-address-validity-invalid": "مهتبرین ایمیل ادرسء بلک ات",
        "right-createtalk": "شرکتن صفحات بحث",
        "right-createaccount": "شرکتن نوکین حسابان کاربری",
        "right-minoredit": "نشان کن اصلاحات په داب هوردین",
-       "right-move": "جاه په جاه کن صفحات",
+       "right-move": "جاه بی جاه کن تاکدیمانا",
        "right-move-subpages": "جاه په جاه کن صفحات گون زیرصفحاتش",
        "right-move-rootuserpages": "جاه په جاه کتن صفحات کاربری اصلی",
        "right-move-categorypages": "انتقال مان کتگوریء پیج ان",
        "right-nominornewtalk": "نداشتن هوردین اصلاح ته صفحات بحث یک نوکین کوله یانی پیش داریت",
        "right-apihighlimits": "استفاده کن چه بالاترین محدویتان ته جوستان API",
        "right-writeapi": "استفاده چه نوشتن API",
-       "right-delete": "حذÙ\81 ØµÙ\81حات",
+       "right-delete": "تاکدÛ\8cÙ\85اÙ\86Ù\90 Ù¾Ø§Ú© Ú©Ù\88رتÛ\8cÙ\86",
        "right-bigdelete": "حذف صفحات گون درازین تاریح",
        "right-deletelogentry": "هزپ و واتر چه خاصین مدخل چه سیاهه",
        "right-deleterevision": "حذف و حذف نه کتن مخصوصین بازبینی آن صفحات",
        "right-browsearchive": "گردگ صفحات حذفی",
        "right-undelete": "حذف مکن یک صفحه ایء",
        "right-suppressrevision": "بازبینی و ترینگ بازبینی آن پناهین چه مدیران سیستم",
+       "right-viewsuppressed": "دیستین آ نسهه هانی که شه کار زوروکان چیهر داته بوته انت",
        "right-suppressionlog": "به گند خصوصی آماران",
        "right-block": "دگ کابران چه اصلاح محدود کن",
        "right-blockemail": "یک کاربری چه ایمیل دیم دهگ منع کن",
        "recentchanges-label-plusminus": "تاکء سایز همگرنچ گون ائ بایت انی انداجگ ٹگل وارتگ انت",
        "recentchanges-legend-heading": "'''اختصاران:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (هنچوش پر [[Special:NewPages|نوکین تاکانء فهرست]] بچار ات)",
-       "rcnotefrom": "جÙ\87Ù\84Û\8cگء ØªØºÛ\8cÛ\8cرات Ú\86Ù\87 <strong>$2</strong> (تاÙ\86 <strong>$1</strong> Ù¾Û\8cØ´ Ø¯Ø§Ø±Ú¯ Ø¨Û\8cتگ Ø§Ù\86ت).",
+       "rcnotefrom": "بÛ\8c Ø¬Ù\87Ù\84گا Ù¹Ú¯Ù\84اÙ\86 Ø´Ù\87 <strong>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|Ù\86شاÙ\86 Ø¯Ø§ØªÙ\87 Ø¨Ù\88تÙ\87 Ø§Ù\86ت|Ù\86شاÙ\86 Ø¯Ø§ØªÙ\87 Ø¨Ù\88تÙ\87 Ø§Ù\86ت}}).",
        "rclistfrom": "پیش دار نوکین تغییراتآ چه $3 $2",
        "rcshowhideminor": "$1 هوردین تغییرات",
        "rcshowhideminor-show": "پیش دارگ",
        "recentchangeslinked-toolbox": "مربوطین تغییرات",
        "recentchangeslinked-title": "تغییراتی مربوط په \"$1\"",
        "recentchangeslinked-summary": "شی یک لیستی چه تغییراتی هستنت که نوکی اعمال بوتگنت په صفحاتی که چه یک صفحه خاصی لینک بوته( یا په اعضای یک خاصین دسته).\nصفحات ته [[Special:Watchlist| شمی لیست چارگ]] '''' پررنگنت''''",
-       "recentchangeslinked-page": "صÙ\81Ø­Ù\87 نام:",
+       "recentchangeslinked-page": "تاکدÛ\8cÙ\85Ù\90 نام:",
        "recentchangeslinked-to": "پیش دار تغییرات په صفحاتی که لینک بوتگنت به جاه داتگین صفحه",
        "upload": "آپلود کتن فایل",
        "uploadbtn": "آپلود فایل",
        "reuploaddesc": "کنسل آپلودء و ترر په فرم آپلود",
        "upload-tryagain": "فایلء ٹگا وارتگین توضیحاتء راهیگ بکن ات",
        "uploadnologin": "وارد نهیت",
-       "uploadnologintext": "شما بایدن [[Special:UserLogin|واردبیت]] په آپلود کتن فایل.",
+       "uploadnologintext": "په اپلوڈ\t کورتین پایلی هاتیرا باید $1.",
        "upload_directory_missing": "مسیر آپلود ($1)  گارنت و گون وب سرور شر گنگ نه بیت.",
        "upload_directory_read_only": "مسیر آپلود ($1)  قابل نوشتن گون وب سرور نهنت.",
        "uploaderror": "حطا آپلود",
+       "upload-recreate-warning": "'''هشتار: پایلی بی ناما ڈ\tیلیت یا اینتیکال بوته .'''\n\nپه آسانی هاتیرا، ڈ\tیلیتی چالگ و انتیکالی دیم بی جهلگا آته :",
        "uploadtext": "چه جهلگین فرم په آپلود فایلان استفاده کنت.\nپه دیستن یا گشتن پیشگین آپلودی فایلان برو  [[Special:FileList|لیست فایلان آپلودی]], آپلودان و حذفیات هنچو هستن ته [[Special:Log/upload|آمار آپلود]].\n\nپه وارد کتن فایل ته یک صفحه ای، چه لینک ته فرم استفاده کن\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' په استفاده چه نسخه کامل فایل\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' په استفاده چه ۲۰۰ پیکسل پهنات ته یک جعبه ته چپ\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>'''  په مسیری لینک دهگ په فایل بی پیش دارگ فایل",
        "upload-permitted": "مجازین نوع فایل:  $1.",
        "upload-preferred": "ترجیحی نوع فایل:  $1.",
        "ignorewarnings": "هردابین هوژاری شموش",
        "minlength1": "نام فایل باید یک حرفی حداقل بیت",
        "illegalfilename": "نام فایل  \"$1\"  شامل کاراکترانی انت که مجاز نهنت ته ای عناوین صفحه.\nلطفا نام فایل بدل کنیت و دگه آپلود آزمایش کنیت.",
+       "filename-toolong": "پایلی نام نباید شه ۲۴۰ بایتا تچکتیر بیت .",
        "badfilename": "نام فایل عوض بوتت په \"$1\".",
+       "filetype-mime-mismatch": "پایلی پدوند «$1.‎» گون آیی  MIME رکما ($2) متابیکت نداریت.",
        "filetype-badmime": "فایلان نوع مایم  \"$1\" مجاز په آپلود بیگ نهنت.",
        "filetype-bad-ie-mime": "نه تونیت ای فایلءَ آپلود کنیت په چی که اینترنت ایکسپلورر آییءَ په دا ب \"$1\" جاه کاریت که شی غیرمجازین نوع فایلینت و حطرناک انت.",
        "filetype-unwanted-type": "'''\".$1\"' یک نه لوٹتگین نوع فایل انت. انواع فایل ترجیحی  $2 انت.\nنوع ترجیحی {{PLURAL:$3|نوع فایلنت|انواع فایلان انت}} $2.",
        "filetype-banned-type": "'''\".$1\"''' یک نوع مجازی ان فایلی نهنت. مجازین {{PLURAL:$3|نوع فایل|انواع فایلان}}  $2.",
        "filetype-missing": " (په داب \".jpg\").فایل هچ بندی نیست",
+       "empty-file": "پایلی که دیم داتیت هالی اینت.",
+       "file-too-large": "پایلی که دیم داته ایت باز ٹو اینت .",
+       "filename-tooshort": "پایلی نام بی شه اندازهگا گونڈ اینت.",
+       "filetype-banned": "ای رکمی پایل اجازه نداریت.",
+       "verification-error": "پایل شه تائید تستا در نه بوت.",
        "large-file": "توصیه بیت که فایلان مزنتر چه  $1 مبنت;\nای فایل $2 انت.",
        "largefileserver": "ای فایل مزنتر چه حدی انت که سرور تنظیم بوتت په اجازه دهگ.",
        "emptyfile": "فایلی که شما آپلود کتت هالیک انت. شاید شی په خاطر اشتباه نه نام فایل بیت.\nلطفا کتنرل کنیت که آیا واقعا شما لوٹیت ای فایلء آپلود کنیت.",
        "uploadwarning": "هوژاری آپلود",
        "savefile": "ذخیره فایل",
        "uploaddisabled": "آپ.د غبر فعال انت",
+       "copyuploaddisabled": "بارگذاری از طریق نشانی اینترنتی غیرفعال است.",
        "uploaddisabledtext": "آپلود فایل غیر فعال انت.",
        "php-uploaddisabledtext": "آپلود کتن فایل ته پی‌اچ‌پی فعال نهنت. تنظیم file_uploads کنترل کنیت.",
        "uploadscripted": "ای فایل شامل کد HTML یا اسکریپت انت که شاید گون وب بروزر اشتباهی وانگ بیت.",
+       "uploadscriptednamespace": "این پوشه اس‌وی‌جی شامل فضای نام غیرقانونی '$1' است",
+       "uploadinvalidxml": "XML در پروندهٔ بارگذاری‌شده نمی‌تواند تجزیه شود.",
        "uploadvirus": "فایل یک ویروسی داریتن! جزییات: $1",
+       "uploadjava": "این پرونده یک پرونده زیپ است که حاوی پرونده‌ای از نوع ‎‎.class جاوا است.\nبارگذاری پرونده‌های جاوا مجاز نیست، چرا که ممکن است اجازه دور زدن محدودیت‌های امنیتی را بدهند.",
+       "upload-source": "پرونده منبع",
        "sourcefilename": "منبع نام فایل:",
+       "sourceurl": "نشانی منبع:",
        "destfilename": "مقصد نام فایل",
        "upload-maxfilesize": "آهرین هد اندازه فایل : $1",
+       "upload-description": "توضیحات پرونده",
+       "upload-options": "گزینه‌های بارگذاری",
        "watchthisupload": "ای فایل بچار",
        "filewasdeleted": "یک فایلی گو ای نام پیشتر آپلود بوتت و رندا حذف بوت.\nشما بایدن کنترل کنیت  $1 پیش چه شی که دگه آپلود کنیت.",
        "filename-bad-prefix": "نام  فایلی که آپلود بیت شروع بیت گون '''\"$1\"''', که یک نام بی توضیحی هنچکا اتوماتیکی گون دوربین دیجیتال دهگ بوتت.\nلطفا یک تشریحی ترین نامی په وتی فایل بزرویت.",
        "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 mobil phones\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- leave this line exactly as it is -->",
        "upload-success-subj": "آپلود موفق",
+       "upload-success-msg": "بارگذاری شما از [$2] موفق بود. این پرونده در اینجا قابل دسترسی است: [[:{{ns:file}}:$1]]",
+       "upload-failure-subj": "مشکل در بارگذاری",
+       "upload-failure-msg": "مشکلی در بارگذاری شما از [$2] وجود داشت:\n\n$1",
+       "upload-warning-subj": "هشدار بارگذاری",
+       "upload-warning-msg": "فرم بارگذاری مشکلی داشت [$2]. شما می‌توانید به [[Special:Upload/stash/$1|فرم بارگذاری]] بازگردید تا این اشکال را رفع کنید.",
        "upload-proto-error": "اشتباه پروتوکل",
        "upload-proto-error-text": "آپلود دراین نیاز په URL آنی داریت که شروع بیت گون  <code>http://</code> یا <code>ftp://</code>.",
        "upload-file-error": "حطا درونی",
        "upload-misc-error-text": "یک ناشناسین حطا وهد آپلود کتن پیش آتک.\nلطفا تایید کنیت که URL معتبرانت و دسترسی بیت و دگه سعی کنیت.\nاگر مشکل ادامه داشت، گون [[Special:ListUsers/sysop|مدیر]]ء تماس گریت.",
        "upload-too-many-redirects": "ای لینک بازگین غیرمستقیم ی هستن",
        "upload-http-error": "یک ارور اچ‌تی‌تی‌پی پیش آتک : $1",
+       "upload-copy-upload-invalid-domain": "بارگذاری کپی پرونده‌ها از این دامنه امکان‌پذیر نیست.",
+       "backend-fail-stream": "نمی‌توان پروندهٔ $1 را ارسال کرد.",
+       "backend-fail-backup": "نمی‌توان نسخهٔ پشتیبان برای پروندهٔ $1 ایجاد کرد.",
+       "backend-fail-notexists": "ای $1 پایل وجود نداریت.",
+       "backend-fail-hashes": "دریافت هش‌های پرونده برای مقایسه ناموفق بود.",
+       "backend-fail-notsame": "پروندهٔ غیریکسانی در $1 وجود دارد.",
+       "backend-fail-invalidpath": "$1 مسیر ذخیره‌سازی معتبری نیست.",
+       "backend-fail-delete": "شما نتوانیت ای $1 پایلا پاک کنیت.",
+       "backend-fail-describe": "نمی‌توان فرادادهٔ پروندهٔ «$1» را تغییر داد.",
+       "backend-fail-alreadyexists": "ای پایل $1 شه دیما وجود داشت.",
+       "backend-fail-store": "شما نتوانیت ای $1 پایلابی $2 تاذخیره بکنیت.",
+       "backend-fail-copy": "نمی‌توان پروندهٔ $1 را به $2 کپی کرد.",
+       "backend-fail-move": "نمی‌توان پروندهٔ $1 را به $2 منتقل کرد.",
+       "backend-fail-opentemp": "نمی‌توان پروندهٔ موقتی را باز کرد.",
+       "backend-fail-writetemp": "امکان نوشتن بر روی پروندهٔ موقتی وجود ندارد.",
+       "backend-fail-closetemp": "نمی‌توان پروندهٔ موقتی را بست.",
+       "backend-fail-read": "نمی‌توان پروندهٔ $1 را خواند.",
+       "backend-fail-create": "نمی‌توان بر روی پروندهٔ $1 اطلاعات نوشت.",
+       "backend-fail-maxsize": "نمی‌توان بر روی پروندهٔ $1 اطلاعات نوشت چون بزرگتر از {{PLURAL:$2|یک بایت|$2 بایت}} است.",
+       "backend-fail-readonly": "پشتیبان «$1» درحال حاضر در وضیت فقط خواندنی است. دلیل ارائه شده چنین است: «$2»",
+       "backend-fail-synced": "پرونده «$1» در پشتیبان‌های ذخیره داخلی در وضعیتی ناپایدار قرار دارد",
+       "backend-fail-connect": "ارتباط با پشیبان ذخیره «$1» برقرار نشد.",
+       "backend-fail-internal": "خطایی نامعلوم در پشتیبان ذخیره «$1» رخ داد.",
+       "backend-fail-contenttype": "تعیین نوع محتوای پایل په ذخیره بی «$1» ناموفق ات.",
+       "backend-fail-batchsize": "دسته‌ای مشتمل بر $1 {{PLURAL:$1|عملکرد|عملکرد}} پرونده به پشتیبان ذخیره داده شد؛ حداکثر مجاز $2 {{PLURAL:$2|عملکرد|عملکرد}} است.",
+       "backend-fail-usable": "امکان خواندن یا نوشتن پروندهٔ $1 وجود نداشت چرا که سطح دسترسی کافی نیست یا شاخه/محفظهٔ مورد نظر وجود ندارد.",
+       "filejournal-fail-dbconnect": "امکان وصل شدن به پایگاه داده دفترخانه برای پشتیبان ذخیره‌سازی «$1» وجود نداشت.",
+       "filejournal-fail-dbquery": "امکان به روز کردن پایگاه داده دفترخانه برای پشتیبان ذخیره‌سازی «$1» وجود نداشت.",
+       "lockmanager-notlocked": "نمی‌توان قفل «$1» را گشود؛ چون قفل نشده‌است.",
+       "lockmanager-fail-closelock": "امکان بستن پرونده قفل شده \"$1\" وجود ندارد.",
+       "lockmanager-fail-deletelock": "امکان حذف پرونده قفل شده \"$1\" وجود ندارد.",
+       "lockmanager-fail-acquirelock": "نمی‌توان قفل «$1» را کسب کرد.",
+       "lockmanager-fail-openlock": "امکان باز کردن پرونده قفل شده \"$1\" وجود ندارد.",
+       "lockmanager-fail-releaselock": "نمی‌توان قفل «$1» را گشود.",
+       "lockmanager-fail-db-bucket": "امکان ارتباط با تعداد کافی پایگاه داده قفل‌ها در محفظه $1 وجود نداشت.",
+       "lockmanager-fail-db-release": "بازکردن قفل‌های پایگاه دادهٔ $1 ممکن نیست.",
+       "lockmanager-fail-svr-acquire": "امکان گرفتن قفل‌های سرور $1 وجود ندارد.",
+       "lockmanager-fail-svr-release": "امکان باز کردن قفل‌های سرور $1 وجود ندارد.",
+       "zip-file-open-error": "در هنگام باز کردن پرونده زیپ برای بررسی محتوای آن خطایی رخ داد.",
+       "zip-wrong-format": "پرونده مشخص شده یک پرونده زیپ نیست.",
+       "zip-bad": "پرونده زیپ خراب یا غیر قابل خواندن است.\nنمی‌توان محتوای آن را از نظر امنیت به درستی بررسی کرد.",
+       "zip-unsupported": "پرونده زیپ از ویژگی‌هایی استفاده می‌کند که توسط مدیاویکی پشتیبانی نمی‌شوند.\nنمی‌توان محتوای آن را از نظر امنیت به درستی بررسی کرد.",
+       "uploadstash": "اپلوڈی سٹاش",
+       "uploadstash-summary": "این صفحه دسترسی به پرونده‌هایی که بارگذاری شده‌اند (یا در حال بارگذاری هستند) اما هنوز در ویکی منتشر نشده‌اند را فراهم می‌کند. این پرونده‌ها توسط هیچ کاربری به جز کسی که آن‌ها را بارگذاری کرده قابل دیدن نیستند.",
+       "uploadstash-clear": "پاک‌کردن پرونده‌های انبارشده",
+       "uploadstash-nofiles": "شما هیچ پروندهٔ انبارشده‌ای ندارید.",
+       "uploadstash-badtoken": "انجام این اقدام ناموفق بود، احتمالاً به این دلیل که اعتبار ویرایش شما به اتمام رسیده است. دوباره امتحان کنید.",
+       "uploadstash-errclear": "پاک‌کردن پرونده‌ها ناموفق بود.",
+       "uploadstash-refresh": "تازه‌کردن فهرست پرونده‌ها",
+       "invalid-chunk-offset": "جابجایی نامعتبر قطعه",
+       "img-auth-accessdenied": "منع دسترسی",
+       "img-auth-nopathinfo": "PATH_INFO موجود نیست.\nسرور شما برای ردکردن این مقدار تنظیم نشده‌است.\nممکن است مبتنی بر سی‌جی‌آی باشد و از img_auth پشتیبانی نکند.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization را ببینید.",
+       "img-auth-notindir": "مسیر درخواست شده در شاخهٔ بارگذاری تنظیم‌شده قرار ندارد.",
+       "img-auth-badtitle": "امکان ایجاد یک عنوان مجاز از «$1» وجود ندارد.",
+       "img-auth-nologinnWL": "شما به سامانه وارد نشده‌اید و «$1» در فهرست سفید قرار ندارد.",
+       "img-auth-nofile": "پایلی «$1» وجود نداریت.",
+       "img-auth-isdir": "شما تلاش کرده‌اید به شاخهٔ «$1» دسترسی پیدا کنید.\nتنها دسترسی به پرونده مجاز است.",
+       "img-auth-streaming": "در حال جاری ساختن «$1».",
+       "img-auth-public": "عملکرد img_auth.php برونداد پرونده‌ها از یک ویکی خصوصی است.\nاین ویکی به عنوان یک ویکی عمومی تنظیم شده‌است.\nبرای امنیت بهینه، img_auth.php غیرفعال است.",
+       "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": "نه تونیت په URL برسیت",
        "upload-curl-error6-text": "داتگین URL دسترسی نه بیت.\nلطفا دگه کنترل کنیت که URL درستنت و سایت په راه انت.",
        "upload-curl-error28": "وهد آپلود هلت",
        "upload-curl-error28-text": "سایت باز وهدی بورت په جواب دهگء.\nلطفا کنترل کنیت که سایت روشننت، کمی صبر کنیت و دگه سعی کنیت.\nشاید شما یک وهد حلوت تری کوشش کنیت.",
        "license": "لیسانس کنت:",
-       "license-header": "لیسانس کنت:",
+       "license-header": "اجازه‌نامه",
        "nolicense": "هچ یک انتخاب نه بوتت",
+       "licenses-edit": "گزینه‌های مجوز ویرایش",
        "license-nopreview": "(بازبین موجود نهنت)",
-       "upload_source_url": "(یک متعبرین، عمومی دسترسی انت URL)",
-       "upload_source_file": "(یک فایل ته شمی کامپیوتر)",
-       "listfiles-summary": "ای حاصین صفحه کل آپلودی فایلانء پیش داریت.\nبه طور پیش فرض اهری فایل آپلودی ته بالاد لیست پیش دارگ بیت.\nیک کلیکی بالاد ستون ترتیب عوض کنت.",
+       "upload_source_url": "(شما یک پرونده انتخاب از یک URL معتبر و دسترس عموم انتخاب کردید)",
+       "upload_source_file": "(پرونده‌ای از رایانهٔ شما انتخاب شده‌است)",
+       "listfiles-delete": "پاک کورتین",
+       "listfiles-summary": "این صفحهٔ ویژه تمام پرونده‌های بارگذاری‌شده را نمایش می‌دهد.",
        "listfiles_search_for": "گردگ په  مدیا:",
        "imgfile": "فایل",
        "listfiles": "لیست فایل",
+       "listfiles_thumb": "نائونی",
        "listfiles_date": "تاریح",
        "listfiles_name": "نام",
        "listfiles_user": "کاربر",
        "listfiles_size": "اندازه",
        "listfiles_description": "توضیح",
        "listfiles_count": "نسخ",
+       "listfiles-show-all": "شامل نسخه‌های قدیمی عکس‌ها",
+       "listfiles-latestversion": "انونین ویرژن",
+       "listfiles-latestversion-yes": "هان",
+       "listfiles-latestversion-no": "نه",
        "file-anchor-link": "فایل",
        "filehist": "تاریح فایل",
        "filehist-help": "اور تاریح/زمان کلیک کنیت دان فایلا په داب هما تاریح بگندیت",
        "filehist-dimensions": "جنبه یان",
        "filehist-filesize": "اندازه فایل",
        "filehist-comment": "نظر",
-       "imagelinks": "Ù\84Û\8cÙ\86Ú© Ù\81اÛ\8cÙ\84",
+       "imagelinks": "پاÛ\8cÙ\84Û\8c Ù¾Ù\87 Ú©Ø§Ø± Ú©Û\8cپتÛ\8cÙ\86",
        "linkstoimage": "جهلیگین {{PLURAL:$1|صفحه |$1 صفحات لینک}} پی ای فایل",
        "linkstoimage-more": "گیشتر چه  $1 {{PLURAL:$1|صفحه لینکان|صفحات لینک}} پی ای فایل.\nجهلگین لیست {{PLURAL:$1|اولین لینک صفحه|اولین $1 لینکان صفحه ی}} پی ای فایل فقط پیش داریت.\nیک [[Special:WhatLinksHere/$2|لیست کامل]] موجودنت.",
        "nolinkstoimage": "هچ صفحه ای نیست که به ای فایل لینک بوت.",
        "morelinkstoimage": "View [[Special:WhatLinksHere/$1|گیشتر لینکان]]به ای فایل",
+       "linkstoimage-redirect": "$1 (تغییرمسیر پرونده) $2",
        "duplicatesoffile": "جهلیگین {{PLURAL:$1|فایل یک کپی انت|$2 فایلان کپی انت}} چه هی فایل ([[Special:FileDuplicateSearch/$2|گیشترین اطلاعات]]):",
        "sharedupload": "ای فایل چه $1 انت و شاید گون دگه پروژه یان استفاده بیت.",
        "sharedupload-desc-there": "ای پرونده در $1 انت و ممکن انت ته دگه پروژه‌ها هم استفاده ببیت.\nپه اطلاعات گیشتذ لطفاً [$2 صفحهٔ توضیحات پرونده] را بچاریت.",
        "sharedupload-desc-here": "ای پرونده ته $1 هستن و ممکن انت ته دگه پروژه‌هان هم استفاده ببیت.\nتوضیحات موجود ته [$2 صفحهٔ توضیحات پرونده] ته ادان،جهل پیش دارگ بنت.",
+       "sharedupload-desc-edit": "این پرونده از $1 است و می‌تواند توسط پروژه‌های دیگر هم استفاده شود.\nاگر خواستید می‌توانید توضیحات پرونده را از [$2 صفحهٔ توضیحاتش] در آنجا ویرایش کنید.",
+       "sharedupload-desc-create": "این پرونده از $1 است و می‌تواند توسط پروژه‌های دیگر هم استفاده شود.\nاگر خواستید می‌توانید توضیحات پرونده را از [$2 صفحهٔ توضیحاتش] در آنجا ویرایش کنید.",
        "filepage-nofile": "هچ فایلی گون ای نام نیستن",
        "filepage-nofile-link": "هی فایلی گوپن ای نام نیستن، بله شما تونیت [آی ءَ $1 بار کنیت]",
        "uploadnewversion-linktext": "یک نوکین نسخه ای چه ای فایل آپلود کن",
-       "shared-repo-from": "چه $1",
+       "shared-repo-from": "شه $1",
        "shared-repo": "هورین مخزن",
+       "upload-disallowed-here": "متأسفانه شما نمی‌توانید این پرونده را بازنویس کنید.",
        "filerevert": "ترین $1",
        "filerevert-legend": "ترینگ فایل",
        "filerevert-intro": " شما په ترینگء '''[[Media:$1|$1]]''' په  [$4 نسخه ای په داب چه $3, $2].",
-       "filerevert-comment": "نظر:",
+       "filerevert-comment": "دلیل:",
        "filerevert-defaultcomment": "تررت په نسخه په داب $2, $1",
        "filerevert-submit": "تررگ",
        "filerevert-success": "''[[Media:$1|$1]]'''  بدل بوتت په [$4 نسخه په داب چه $3, $2].",
        "filedelete-reason-otherlist": "دگ دلیل",
        "filedelete-reason-dropdown": "*متداول این دلایل حذف\n** نقص حق کپی\n** فایل کپی",
        "filedelete-edit-reasonlist": "اصلاح دلایل حذف",
+       "filedelete-maintenance": "حذف و احیای پرونده‌ها در مدت نگهداری به طور موقت غیرفعال است.",
+       "filedelete-maintenance-title": "نمی‌تواند پرونده را حذف کند",
        "mimesearch": "گردگ په مایم",
-       "mimesearch-summary": "اÛ\8c ØµÙ\81Ø­Ù\87 Ù\81Û\8cÙ\84تر Ú©ØªÙ\86 Ù\81اÛ\8cÙ\84اÙ\86 Ù¾Ù\87 Ø§Ø³Ø§Ø³ Ù\86Ù\88ع Ù\85اÛ\8cÙ\85 Ø§Ø´ Ù\81عاÙ\84 Ú©Ù\86ت.\nÙ\88رÙ\88دÛ\8c\85تحÙ\88اÙ\86Ù\88ع/زÛ\8cرÙ\86Ù\88عØ\8cÙ\85Ø«Ù\84<code>image/jpeg</code>.",
+       "mimesearch-summary": "با Ú©Ù\85Ú© Ø§Û\8cÙ\86 ØµÙ\81Ø­Ù\87 Ø´Ù\85ا Ù\85Û\8câ\80\8cتÙ\88اÙ\86Û\8cد Ù¾Ø±Ù\88Ù\86دÙ\87â\80\8cÙ\87اÛ\8cÛ\8c Ú©Ù\87 Û\8cÚ© Ù\86Ù\88ع MIME Ø¨Ù\87 Ø®ØµÙ\88ص Ø¯Ø§Ø±Ù\86د Ø±Ø§ Ù¾Û\8cدا Ú©Ù\86Û\8cد.\nÙ\88رÙ\88دÛ\8c: Ø¨Ù\87 ØµÙ\88رت contenttype/subtype Û\8cا contenttype/*&lrm;Ø\8c Ù\86ظÛ\8cر <code>image/jpeg</code>.",
        "mimetype": "نوع مایم:",
        "download": "آیرگیزگ",
        "unwatchedpages": "نه چارتگین صفحات",
        "listredirects": "لیست غیر مستقیمان",
+       "listduplicatedfiles": "فهرست همهٔ پرونده‌ها به‌همراه تکراری‌ها",
+       "listduplicatedfiles-summary": "این فهرست پرونده‌هایی با نسخه‌های اخیر این پرونده تکراری است که نسخه‌های اخبر سایر پرونده‌ها است. فقط پرونده‌های محلی در نظر گرفته شده‌اند.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]][[$3|{{PLURAL:$2|یک تکرار|$2 تکرار}}]] دارد.",
        "unusedtemplates": "تمپلتان بی استفاده",
        "unusedtemplatestext": "ای صفحه لیست کن کل صفحات ته {{ns:template}} نام فضا که ته دگه صفحه نهنت.\nمه شموش تا کنترل کنیت په دگه لینکان ته تمپلتان پیش چه حذف کتن آیان.",
        "unusedtemplateswlh": "دگر لینکان",
        "randompage": "تصادفی صفحه",
-       "randompage-nopages": "\"$1\" هچ صفحه ای ته ای نام فضا نیست.",
+       "randompage-nopages": "هیچ صفحه‌ای در این {{PLURAL:$2|فضای نام|فضاهای نام}} موجود نیست: $1.",
+       "randomincategory": "بی اهتیارین تاکدیم بی تهرِ تا",
+       "randomincategory-invalidcategory": "«$1» نامی معتبر برای یک ردهٔ نیست.",
+       "randomincategory-nopages": "هیچ تاکدیمی بی ای تهرِ تا [[:Category:$1|$1]] وجود نداریت.",
+       "randomincategory-category": "تهر:",
+       "randomincategory-legend": "بی اهتیارین تاکدیم بی تهرِ تا",
        "randomredirect": "تصادفی غیر مستقیم",
        "randomredirect-nopages": "\"$1\"هچ غیر مستقیمی ته ای نام فضا نیست.",
        "statistics": "آمار",
        "statistics-header-pages": "صفحه ی آمار",
        "statistics-header-edits": "اصلاح آمار",
-       "statistics-header-views": "چارگ آمار",
        "statistics-header-users": "آمار کاربر",
+       "statistics-header-hooks": "دیگرین آمار",
        "statistics-articles": "صفحات محتوا",
-       "statistics-pages": "صÙ\81حات",
+       "statistics-pages": "تاکدÛ\8cÙ\85اÙ\86",
        "statistics-pages-desc": "کل صفحات ته ویکی په داب صفحات بحث ،غیر مستقیمان و دگه چیز.",
        "statistics-files": "آپلود بیتگین فایلان",
        "statistics-edits": "اصلاح صفحات چه وهدی که {{SITENAME}} شر بوتت",
        "statistics-edits-average": "میانگین اصلاحات ته هر صفحه ای",
-       "statistics-views-total": "چارگان کل",
-       "statistics-views-peredit": "چارگ ته هر اصلاح",
        "statistics-users": "ثبت نامی [[Special:ListUsers|users]]",
        "statistics-users-active": "فعالین کاربر",
        "statistics-users-active-desc": "کاربرانی که ته پیشگین {{PLURAL:$1|روچ|$1 روچان}} کاری اش کتت",
-       "statistics-mostpopular": "باز چار تگین صفحات",
+       "pageswithprop": "آ تاکدیمان که بی تاکدیمی رکما انت",
+       "pageswithprop-legend": "آ تاکدیمان که بی تاکدیمی رکما انت",
+       "pageswithprop-text": "این صفحه فهرستی است از صفحه‌هایی که از یک خاصیت صفحهٔ خاص استفاده می‌کنند.",
+       "pageswithprop-prop": "هاسیئتی نام:",
+       "pageswithprop-submit": "برا",
+       "pageswithprop-prophidden-long": "جزییات مخفی متن طولانی ($1)",
+       "pageswithprop-prophidden-binary": "جزییات مقدار مخفی باینری ($1)",
        "doubleredirects": "دوبل غیر مستقیم",
        "doubleredirectstext": "ای صفحه لیست کنت صفحاتی که غیر مستقیم رونت په دگه صفحات. هر ردیف شامل لینکانی انت به اولی و دومی غیر مستقیم، و هدف دومی غیر مستقیم، که معمولا استفاده بیت \"real\" صفحه هدف، که بایدن اولی غیر مستقیم پیش داریت.",
        "double-redirect-fixed-move": "[[$1]] انتقال دهگ بوتت، و الان تغییر مسیری په [[$2]] انت",
+       "double-redirect-fixed-maintenance": "رفع خودکار تغییرمسیر دوتایی از [[$1]] به [[$2]] در روند نگهداری.",
        "double-redirect-fixer": "تعمیرکنوک غیر مستقیم",
        "brokenredirects": "پروشتگین غیر مستقیمان",
        "brokenredirectstext": "جهلیگین غیر مستقیم لینک بوتگن په صفحات نیستن:",
        "fewestrevisions": "صفحات گون کمترین بازبینی",
        "nbytes": "$1 {{PLURAL:$1|بایت|بایت}}",
        "ncategories": "$1 {{PLURAL:$1|دسته|دسته جات}}",
+       "ninterwikis": "$1 {{PLURAL:$1|میان‌ویکی|میان‌ویکی}}",
        "nlinks": "$1 {{PLURAL:$1|link|لینک}}",
        "nmembers": "$1 {{PLURAL:$1|member|اعضا}}",
+       "nmemberschanged": "$1 → $2   {{PLURAL:$2| عضو|عضو}}",
        "nrevisions": "$1 {{PLURAL:$1|بازبینی|بازبینی ان}}",
        "nviews": "$1 {{PLURAL:$1|دیستن|دیستن}}",
+       "nimagelinks": "$1 × $2, $3 {{PLURAL:$3|صفحه|صفحات}}",
+       "ntransclusions": "بی $1 {{PLURAL:$1|تاکدیم|تاکدیم}} استپاده بوته",
        "specialpage-empty": "په ای گزارش هچ نتیجه ای نیست ان.",
        "lonelypages": "صفحات یتیم",
        "lonelypagestext": "جهلیگین صفحات چه دگه صفحات لینک یا داهل نه بوتگنت ته {{SITENAME}}.",
        "uncategorizedtemplates": "تمپلتان بی دسته",
        "unusedcategories": "بی استفاده این دسته جات",
        "unusedimages": "بی استفاده این فایلان",
-       "popularpages": "مردمی صفحات",
        "wantedcategories": "لوٹتگین دسته جات",
        "wantedpages": "لوٹتگین صفحات",
        "wantedpages-badtitle": "عنوان غیر مجازین ته جمع نتایج: $1",
        "wantedfiles": "لوٹتگین فایلان",
+       "wantedfiletext-cat": "پرونده‌های زیر استفاده می‌شوند اما موجود نیستند. همچنین ممکن است پرونده‌های مخازن خارجی با وجود موجود بودن در اینجا فهرست شوند. هرگونه رتبه مثبت کاذب <del>خط خواهد خورد.</del> علاوه بر این، صفحاتی که پرونده‌هایی ناموجود را در خود جای داده‌اند در [[:$1]] فهرست شده‌اند.",
        "wantedtemplates": "لوٹتگین تمپلت",
        "mostlinked": "صفحاتی که گیشنر لینک دیگ بیتگنت",
        "mostlinkedcategories": "دسته جاتی که گیشتر لینک دیگ بیتگنت",
        "protectedpages-indef": "فقط محافظت نامحدود",
        "protectedpages-cascade": "محافظتان آبشاری فقط",
        "protectedpagesempty": "هچ صفحه ای گون ای پارامترآن",
+       "protectedpages-page": "تاکدیم",
+       "protectedpages-unknown-timestamp": "ناشناس",
+       "protectedpages-unknown-performer": "نا زانتین کار زوروک",
        "protectedtitles": "عناوین محافظتی",
+       "protectedtitles-summary": "این صفحه فهرست صفحات موجود است که در حال حاضر محافظت از ساخت شده‌اند. برای فهرست عنوان‌هایی که محافظت از ویرایش شده‌اند، به [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] مراجعه کنید.",
        "protectedtitlesempty": "هچ عنوانی هنو گو ای پارامتران محافظت نهنت.",
        "listusers": "لیست کاربر",
        "listusers-editsonly": "فقط کاربرانی که اصلاحاتش هست پیش بدار",
        "booksources": "منابع کتاب",
        "booksources-search-legend": "گردگ په منابع کتاب",
        "booksources-isbn": "شابک:",
-       "booksources-go": "برو",
+       "booksources-search": "گردگ",
        "booksources-text": "چهلا یک لیستی چه لینکان په دگه سایتان هست که نوکین  یا مستعمل این کتاب بها کنند و شما شاید گیشترین اطلاعات آی کتابانی باره که پرش گردیت در گیزیت:",
        "booksources-invalid-isbn": "داتگین شماره کتاب چوش که جاه کیت درست نهنت, خطایانءِ بچار چه اصلی جاگاه کپی کن",
-       "specialloguserlabel": "کاربر:",
+       "specialloguserlabel": "Ú¯Ù\88Ø´Û\8cÙ\86دÙ\87:",
        "speciallogtitlelabel": "عنوان:",
        "log": "ورودان",
        "all-logs-page": "کل ورودان",
        "allpagesto": "پیش بدار صفحاتی که هلنت گون:",
        "allarticles": "کل صفحات",
        "allinnamespace": "کل صفحات($1 نام فضا)",
-       "allpagessubmit": "برو",
+       "allpagessubmit": "برا",
        "allpagesprefix": "صفحات پیش دار گون پیشوند:",
        "allpagesbadtitle": "داتگین عنوان صفحه نامعتبر انت یا  یک پیشوند بین ویکی یا یبن زبانی سحتی هستت.\nشاید شامل یک یا گیشتر کاراکتر بیت که ته عنوانین استفاده نه بیت.",
        "allpages-bad-ns": "{{SITENAME}} فضانامی نیست \"$1\".",
-       "categories": "دستÙ\87 Û\8cان",
+       "categories": "تÙ\87رئان",
        "categoriespagetext": "جهلیگین {{PLURAL:$1|دسته شامل|دسته جات شامل}} صفحات یا مدیا انت\n[[Special:UnusedCategories|دسته جات بی استفاده]] ادان پیشدارگ نه بنت.\n هنچوش بچار[[Special:WantedCategories|لوٹتگین دسته]].",
        "categoriesfrom": "پیشدار دسته جات که شروع بنت گون:",
        "special-categories-sort-count": "ترتیب په اساس شمار",
        "noemailtitle": "هچ آدرس ایمیل",
        "noemailtext": "ای کاربر یک آدرس ایمیل معتبری مشخص نه کتت.",
        "nowikiemailtext": "ای کاربر نه لوٹیت چه دگه کاربران ایمیل بگیرت.",
+       "emailusername": "کار زوروکی نام:",
+       "emailusernamesubmit": "دیم دی",
        "email-legend": "یک ایمیلی په دگه کاربر {{SITENAME}} دیم دی",
-       "emailfrom": ":چه",
-       "emailto": "به:",
+       "emailfrom": "شه:",
+       "emailto": "بی:",
        "emailsubject": "موضوع:",
        "emailmessage": "کوله:",
        "emailsend": "دیم دی",
        "addedwatchtext": "صفحه  \"[[:$1]]\"  په شمی [[Special:Watchlist|watchlist]] هور بیت.\nدیمگی تغییرات په ای صفحه و آیاء صفحه گپ ادان لیست بنت، و صفحه پررنگ جاه کیت ته [[Special:RecentChanges|لیست نوکیت تغییرات]] په راحتر کتن شی که آی زورگ بیت.",
        "removedwatchtext": "صفحه\"[[:$1]]\"  چه [[Special:Watchlist|شمی لیست چارگ]]. دربیت.",
        "watch": "به چار",
-       "watchthispage": "اÛ\8c ØµÙ\81Ø­Ù\87 Û\8c Ø¨Ú\86ار",
+       "watchthispage": "اÛ\8c ØªØ§Ú©Ø¯Û\8cÙ\85ا Ø¨Ú¯Û\8cÙ\86د",
        "unwatch": "نه چارگ",
        "unwatchthispage": "چارگ بند کن",
        "notanarticle": "یک صفحه محتوا نهت",
        "wlheader-enotif": "اخطار ایمیل فعالنت.",
        "wlheader-showupdated": "صفحات که عوض بوتگنت چه شمی آهری چارتن '''پررنگ''' پیش دراگ بنت.",
        "wlnote": "جهلء {{PLURAL:$1|آهرین تغییر هست|آهرین هست'''$1''' تغییرات}} ته آهرین {{PLURAL:$2|ساعت|'''$2''' ساعات}}.",
-       "wlshowlast": "پیش دار آهرین $1  ساعات $2 روچان $3",
+       "wlshowlast": "پیش دار آهرین $1  ساعات $2 روچان",
        "watchlist-options": "گزینه یان لیست چارگ",
        "watching": "چارگ بین",
        "unwatching": "نه چارگ بیت",
        "enotif_body": "آزیزین $WATCHINGUSERNAME،\n\nصفحه {{SITENAME}} $PAGETITLE بوتت $CHANGEDORCREATED ته  $PAGEEDITDATE گون $PAGEEDITOR، بچار $PAGETITLE_URL په هنوکین نسخه.\n\n$NEWPAGE\n\nخلاصهء اصلاح کنوک:$PAGESUMMARY $PAGEMINOREDIT\n\nتماس گر گون اصلاح کنوک:\nایمیل:$PAGEEDITOR_EMAIL\nویکی: $PAGEEDITOR_WIKI\n\nدگه گیشترین اخطار په تغییرات دگه دیم دهگ نه بوت مگر شی که شما ای صفحه بچاریت.\nشما تونیت هنچوش نشانآن اخطارء ته وتی لیست چارگ په کلی چارتگین صفحات تنظیم کنیت.\n\nشمی دوستین سیستم اخطار {{SITENAME}}\n\n--\nپه عوض کتن تنظیمات وتی لیست چارگ،به چار\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nنظرات و گیشترین کمک:\n$HELPPAGE",
        "created": "شربوتت",
        "changed": "عوض بوت.",
-       "deletepage": "حذÙ\81 ØµÙ\81Ø­Ù\87",
+       "deletepage": "تاکدÛ\8cÙ\85Ù\90 Ù¾Ø§Ú© Ú©Ù\88رتÛ\8cÙ\86",
        "confirm": "تایید",
        "excontent": "محتوا هستنت:  '$1'",
        "excontentauthor": "محتوا ات: '$1' (و  فقط شرکت کنندگان انت '[[Special:Contributions/$2|$2]]')",
        "undelete-show-file-submit": "بله",
        "namespace": "فاصله نام",
        "invert": "برگردینگ انتخاب",
-       "blanknamespace": "(اصÙ\84ی)",
+       "blanknamespace": "(بÙ\8fÙ\86Û\8cادی)",
        "contributions": "مشارکتان کاربر",
        "contributions-title": "مشارکتان کاربر په $1",
        "mycontris": "می مشارکتان",
        "exportcuronly": "فقط شامل هنوکین بازبینی، نه تاریح کامل",
        "exportnohistory": "----\n'''توجه:''' گردگ تاریح کامل صفحات چه طریق ای فرم په خاطر دلایل اجرایی غیر فعال بوتت.",
        "export-submit": "درگیزگ",
-       "export-addcattext": "چه دسته صفحات اضافه کن:",
+       "export-addcattext": "تاکدیمانِ اڈ کورتین شه تهر آ :",
        "export-addcat": "اضافه کن",
        "export-addnstext": "صفحاتی چه نام‌فضا هورکن:",
        "export-addns": "هورکن",
        "allmessages-filter-modified": "عوض بیتگ",
        "allmessages-prefix": "فیلتر گون پیشوند:",
        "allmessages-language": "زبان:",
-       "allmessages-filter-submit": "برو",
+       "allmessages-filter-submit": "برا",
        "thumbnail-more": "مزن",
        "filemissing": "فایل گارنت",
        "thumbnail_error": "خطا ته شرکتن هوردوکین$1",
        "tooltip-search": "گردگ {{SITENAME}}",
        "tooltip-search-go": "برو به یک صفحه گون همی نامی اگر که هستن",
        "tooltip-search-fulltext": "گرد صفحات په ای متن",
-       "tooltip-p-logo": "صÙ\81Ø­Ù\87 Ø§ØµÙ\84ی",
-       "tooltip-n-mainpage": "صÙ\81Ø­Ù\87 Ø§ØµÙ\84Û\8c Ø¨Ú\86ار",
+       "tooltip-p-logo": "دÛ\8cستÛ\8cÙ\86 Ø¨Ù\8fÙ\86Û\8cادÛ\8c Ø¯Û\8cÙ\85ی",
+       "tooltip-n-mainpage": "دÛ\8cستÛ\8cÙ\86 Ø¨Ù\8fÙ\86Û\8cادÛ\8c Ø¯Û\8cÙ\85Û\8c",
        "tooltip-n-mainpage-description": "دیستن صفحه اصلی",
        "tooltip-n-portal": "پروژه ی باره: هرچی که شما تونیت انجام دهیت، جاهی که چیزانا درگیزیت",
        "tooltip-n-currentevents": "در گیزگ اطلاعات پیش زمینه ته هنوکین رویدادآن",
        "spam_reverting": "عوض کتن په آهری نسحه که شامل لینکان می بیت په $1",
        "spam_blanking": "کل بازبینی آن شامل لینکان په $1, بوتت  هالیکی",
        "simpleantispam-label": "کنترل ضد اسپم.\nای شیء پر ''مکن''",
+       "pageinfo-firstuser": "تاکدیمی جوڑ کنوک",
+       "pageinfo-category-info": "تهرِ مئلومات",
        "markaspatrolleddiff": "نشان کن په داب نظارت بوتگین",
        "markaspatrolledtext": "ای صفحه نشان کن په داب نظارت بوتگین",
        "markedaspatrolled": "نشاننت په داب نظارتی",
        "seconds-abbrev": "$1س",
        "minutes-abbrev": "$1م",
        "hours-abbrev": "$1ه",
+       "just-now": "همی انون",
+       "hours-ago": "$1 سائت دیمتیرا",
+       "minutes-ago": "$1 دکیکه دیمتیرا",
+       "seconds-ago": "$1 {{PLURAL:$1|سانیه|سانیه}} دیمتیرا",
+       "monday-at": "دوشمبی $1",
+       "tuesday-at": "سئه شمبی $1",
+       "wednesday-at": "چارشمبی $1",
+       "thursday-at": "پنج‌شمبی $1",
+       "friday-at": "جوما",
+       "saturday-at": "شمبی",
+       "sunday-at": "یک‌شمبی $1",
+       "yesterday-at": "زئ بی $1",
        "bad_image_list": "فرمت په داب جهلیگی انت:\n\nفقط ایتمان لیست چارگ بنت(خطانی که گون * شروع بنت).\nاولین لینک ته یک خط باید یک لینکی په یک بدین فایلی بیت.\nهر لینکی که کیت ته هما خط اسنثتا بینت.",
        "variantname-zh-hans": "هانس",
        "variantname-zh-hant": "هانت",
        "metadata-help": "ای فایل شامل مزیدین اطلاعاتنیت، شاید چه یک دوربین یا اسکنر په شرکتن و دیجیتالی کتن هور بیتت.\nاگه فایل چه اولیگین حالتی تغییر داته بوته شاید لهتی کل جزییات شر پیش مداریت.",
        "metadata-expand": "پیش دار گیشترین جزییات",
        "metadata-collapse": "پناه کن مزیدین جزییاتا",
-       "metadata-fields": "EXIF Ù\85تادÛ\8cتا Ù\81Û\8cÙ\84داÙ\86 Ù\84سÛ\8cت Ø¨Ù\88تگÙ\86 ØªÙ\87 Ø§Û\8c Ú©Ù\88Ù\84Ù\87 Ø´Ø§Ù\85Ù\84 Ø¨Û\8cÙ\86ت ØªØ¹  Ø¹کس  صفحه پیش داریت وهخهدی کهجدول متادیتا is هراب بیت.\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 Ù\85تادÛ\8cتا Ù\81Û\8cÙ\84داÙ\86 Ù\84سÛ\8cت Ø¨Ù\88تگÙ\86 ØªÙ\87 Ø§Û\8c Ú©Ù\88Ù\84Ù\87 Ø´Ø§Ù\85Ù\84 Ø¨Û\8cÙ\86ت ØªØ¹  Ø§کس  صفحه پیش داریت وهخهدی کهجدول متادیتا is هراب بیت.\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-bitspersample": "بیت ته جز",
        "exif-gpsareainformation": "نام منطقه جی پی اس",
        "exif-gpsdatestamp": "تاریح جی پی اس",
        "exif-gpsdifferential": "اصلاح متفاوت جی پی اس",
+       "exif-countrydest": "نشان داته بوته گین ملک",
+       "exif-countrycodedest": "نشان داته بوته گین ملکِ کود",
+       "exif-provinceorstatedest": "نشان داته بوته گین ولایت یا ایالت",
+       "exif-citydest": "نشان داته بوته گین شار",
+       "exif-sublocationdest": "نشان داته بوته گین مئل",
+       "exif-writer": "نویسوک",
+       "exif-languagecode": "زبان",
+       "exif-iimcategory": "تهر",
        "exif-compression-1": "کمپرس نه بوتت",
        "exif-compression-6": "جیی پی ای جی",
        "exif-photometricinterpretation-2": "آی جی بی",
        "exif-gpsdestdistance-n": "دریایی مایل",
        "exif-gpsdirection-t": "جهت درست",
        "exif-gpsdirection-m": "مسیر آهن ربایی",
-       "watchlistall2": "کل",
        "namespacesall": "کل",
        "monthsall": "کل",
        "confirmemail": "آدرس ایمیل تایید کن",
        "colon-separator": ":&#32;",
        "imgmultipageprev": "← پیشگین صفحه",
        "imgmultipagenext": "صفحه بعدی →",
-       "imgmultigo": "برو!",
+       "imgmultigo": "برا!",
        "imgmultigoto": "برو به صفحه  $1",
        "ascending_abbrev": "بالادی",
        "descending_abbrev": "جهلادی",
        "table_pager_first": "اولی صفحه",
        "table_pager_last": "اهری صفحه",
        "table_pager_limit": "پیش دار  $1  ایتم ته هر صفحه",
-       "table_pager_limit_submit": "برو",
+       "table_pager_limit_submit": "برا",
        "table_pager_empty": "بی نتیجه",
        "autosumm-blank": "هالیکین صفحه",
        "autosumm-replace": "جاه په جاه کتن صفحه گون '$1'",
        "version-software": "نصبین برنامه",
        "version-software-product": "محصول",
        "version-software-version": "نسخه",
+       "redirect-submit": "برا",
        "fileduplicatesearch": "گردگ په کپی  فایلان",
        "fileduplicatesearch-summary": "گردگ په کپی فایلان په اساس درهمین ارزش.",
        "fileduplicatesearch-legend": "گردگ په  کپی",
        "revdelete-restricted": "محدودیت آن په مدیران سیستم بوت",
        "revdelete-unrestricted": "به زور چه مدیران سیستم محدودیتان",
        "rightsnone": "(هچ یک)",
+       "revdelete-summary": "خلاصه اصلاح",
+       "limitreport-templateargumentsize": "تراشوانِ ارگومینت اندازه",
        "expandtemplates": "پچ کن تمپلیت آنء",
-       "expand_templates_intro": "اÛ\8c ØµÙ\81Ø­Ù\87 حاص لهتی متنء گریت و کل تمپلتان ته آییء برگشتی مزنش کنت.\nآیی هنچوش عمگر تجزیه کنوکء مزن کنت په داب\n<nowiki>{{</nowiki>#language:…}}, و متغییرانی په داب\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash; در حقیقت هر چیزی که ته دو براکتن.\nآیی ای کارء گون توار کنگ تجزیه کنوک مناسب چه مدیا وی کی وت انجام دنت.",
+       "expand_templates_intro": "اÛ\8c ØªØ§Ú© حاص لهتی متنء گریت و کل تمپلتان ته آییء برگشتی مزنش کنت.\nآیی هنچوش عمگر تجزیه کنوکء مزن کنت په داب\n<nowiki>{{</nowiki>#language:…}}, و متغییرانی په داب\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash; در حقیقت هر چیزی که ته دو براکتن.\nآیی ای کارء گون توار کنگ تجزیه کنوک مناسب چه مدیا وی کی وت انجام دنت.",
        "expand_templates_title": "عنوان متن په {{FULLPAGENAME}} و دگه.:",
        "expand_templates_input": "ورودی متن",
        "expand_templates_output": "نتیجه",
index b471419..f72e846 100644 (file)
@@ -12,9 +12,9 @@
                ]
        },
        "tog-underline": "Linyahan an kilyawan:",
-       "tog-hideminor": "Tagoon an saradít na paghira sa nakakaagi pa sanang pagbabàgo",
+       "tog-hideminor": "Tagoon an saradít na mga pagliwat sa dae pa sana nahaloy na mga pagbabàgo",
        "tog-hidepatrolled": "Tagóa an patrolyadong mga paghirá sa nakakaági pa sanáng pagbabàgo",
-       "tog-newpageshidepatrolled": "Tagoon an patrolyadong mga pahina gikan sa listahan kan bàgong pahina",
+       "tog-newpageshidepatrolled": "Tagoon an patrolyadong mga pahina gikan sa baguhong listahan nin pahina",
        "tog-extendwatchlist": "Palakbanga an bantay-listahan (watchlist) na maipahiling an gabos na pinagbago, bako sana an pinakahurihang binago",
        "tog-usenewrc": "Pangrupong mga kaliwatan sa kada pahina kan mga dae pa sana nahaloy na mga kaliwatan asin bantay-listahan",
        "tog-numberheadings": "Tolos-bilang na mga pamayohán",
@@ -27,7 +27,7 @@
        "tog-watchdeletion": "Idagdag an mga pahina asin mga sagunson na ako an nagpura sa sakong bantay-listahan",
        "tog-minordefault": "Markahán gabos na saradit na pagliwat sa paaging panugmad",
        "tog-previewontop": "Ipahilíng an patànaw bàgo an kahon nin paghirá",
-       "tog-previewonfirst": "Ipahiling an patànaw sa inot na paghira",
+       "tog-previewonfirst": "Ipahiling an patànaw sa enot na pagliwat",
        "tog-enotifwatchlistpages": "E-suratan mo ako kunsoarin an sarong pahina o sagunson na yaon sa sakong bantay-listahan pinagliwat",
        "tog-enotifusertalkpages": "E-koreohan ako pag pigribáyan an pahina kan sakóng olay",
        "tog-enotifminoredits": "E-suratan man ako para sa saraditon na mga pagliwat kan mga pahina asin mga sagunson",
@@ -50,7 +50,7 @@
        "tog-useeditwarning": "Patanidan ako kunsoarin na ako nagbaya sa pahinang pigliliwat na dae naitatagama an mga kaliwatan",
        "tog-prefershttps": "Pirmeng gumamit nin sarong seguradong koneksyon kunsoarin na ika nakalaog na",
        "underline-always": "Parati",
-       "underline-never": "Dai lamang",
+       "underline-never": "Dae pa lamang",
        "underline-default": "Kublit o kilyaw na panugmad",
        "editfont-style": "Baguhon an estilo nin kalwig sa sinasakupan",
        "editfont-default": "Kilyawang tugmad",
        "june-date": "Hunyo $1",
        "july-date": "Hulyo $1",
        "august-date": "Agosto $1",
-       "september-date": "Setyembre $1",
+       "september-date": "Septyembre $1",
        "october-date": "Oktobre $1",
        "november-date": "Nobyembre $1",
-       "december-date": "Desyembre $1",
+       "december-date": "Disyembre $1",
        "pagecategories": "{{PLURAL:$1|Kategorya|Mga kategorya}}",
        "category_header": "Mga pahina sa kategoryang \"$1\"",
        "subcategories": "Mga sub-kategorya",
        "category-media-header": "Media sa kategoryang \"$1\"",
-       "category-empty": "''Ining kategorya mayong laog na mga pahina o media sa ngunyan.''",
+       "category-empty": "''Ining kategorya sa ngunyan mayong laog nin mga pahina o midya.''",
        "hidden-categories": "{{PLURAL:$1|Nakatagong kategorya|Mga nakatagong kategorya}}",
        "hidden-category-category": "Mga nakatagong kategorya",
        "category-subcat-count": "{{PLURAL:$2|Ining kategorya igwa sana kan minasunod na sub-kategorya.|Ining kategorya igwa kan minasunod {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}",
        "category-article-count-limited": "An minasunod na {{PLURAL:$1|pahina|$1 mga pahina}} yaon sa presenteng kategorya.",
        "category-file-count": "{{PLURAL:$2|Ining kategorya naglalaman sana kan minasunod na sagunson.|An minasunod {{PLURAL:$1|sagunson iyo|$1 na mga sagunson iyo}} sa kategoryang ini, na ginahi sa $2 sa kabilogan.}}",
        "category-file-count-limited": "An minasunod {{PLURAL:$1|na sagunson|$1 na mga sagunson}} yaon sa presenteng kategorya.",
-       "listingcontinuesabbrev": "sunod",
+       "listingcontinuesabbrev": "kasumpay",
        "index-category": "Panhinukdong mga pahina",
        "noindex-category": "Bakong panhinukdong mga pahina",
        "broken-file-category": "Mga pahina na igwang nagkaparasa na sagunsong kilyawan",
        "about": "Manonongod",
        "article": "Laog na pahina",
        "newwindow": "(minabukas sa bàgong bintanà)",
-       "cancel": "Pondohon",
+       "cancel": "Kanselaron",
        "moredotdotdot": "Kadagdagan...",
-       "morenotlisted": "Kulang ining listahan.",
+       "morenotlisted": "Ining listahan bakong kumpleto.",
        "mypage": "Pahina",
        "mytalk": "Mag-ulay",
-       "anontalk": "Urulay para kaining IP address",
+       "anontalk": "Urulay para kaining IP estada",
        "navigation": "Paglibotlibot",
        "and": "&#32;asin",
        "qbfind": "Maghanap",
        "qbedit": "Liwaton",
        "qbpageoptions": "Ining pahina",
        "qbmyoptions": "Sakong mga pahina",
-       "faq": "PH (Parating Hapot)",
-       "faqpage": "Proyekto:PH (Parating Hapot)",
+       "faq": "PHK (Pirmehang Hinahapot na mga Kahaputan)",
+       "faqpage": "Proyekto:PHK",
        "actions": "Mga paghiro",
        "namespaces": "Mga espasyong ngaran",
-       "variants": "Mga lain pa",
-       "navigation-heading": "Hihilngan nin paglibotlibot",
+       "variants": "Mga Kinalaenan",
+       "navigation-heading": "Hihilngan sa paglibotlibot",
        "errorpagetitle": "Salâ",
        "returnto": "Magbalik sa $1.",
        "tagline": "Gikan sa {{SITENAME}}",
-       "help": "Tabang",
+       "help": "Katabangan",
        "search": "Maghanap",
        "searchbutton": "Maghanap",
        "go": "Dumani",
        "protectthispage": "Protektaran ining pahina",
        "unprotect": "Ribayan an proteksyon",
        "unprotectthispage": "Ribayan an proteksyon kaining pahina",
-       "newpage": "Bàgong pahina",
+       "newpage": "Bàguhong pahina",
        "talkpage": "Urulayan ining pahina",
        "talkpagelinktext": "Mag-ulay",
-       "specialpage": "Sadyang Pahina",
-       "personaltools": "Pansadiring mga kagamitan",
+       "specialpage": "Espesyal na pahina",
+       "personaltools": "Pansadiring mga gamiton",
        "articlepage": "Tànawon an laog kan pahina",
-       "talk": "Urulay",
-       "views": "Mga tànaw",
-       "toolbox": "Mga gamit:",
+       "talk": "Urulayan",
+       "views": "Mga Tanawon",
+       "toolbox": "Mga gamiton:",
        "userpage": "Tànawon an pahina kan paragamit",
        "projectpage": "Tànawon an pahina kan proyekto",
-       "imagepage": "Hilingon an pahina nin sagunson (file)",
+       "imagepage": "Tànawon an pahina nin sagunson (file)",
        "mediawikipage": "Tànawon an pahina kan mensahe",
        "templatepage": "Tànawon an pahina kan panguyog",
        "viewhelppage": "Tànawon an pahina nin pagtabang",
        "categorypage": "Tànawon an pahina nin kategorya",
        "viewtalkpage": "Tànawon an urulay",
-       "otherlanguages": "Sa ibang mga tataramon",
-       "redirectedfrom": "(Inilikay gikan sa $1)",
-       "redirectpagesub": "Likay na pahina",
+       "otherlanguages": "Sa ibang mga lengguwahe",
+       "redirectedfrom": "(Pinagbalikwat gikan sa $1)",
+       "redirectpagesub": "Balikwaton an pahina",
+       "redirectto": "Balikwaton pasiring sa:",
        "lastmodifiedat": "Ining pahina huring pinagbago kan $1, mga alas $2.",
        "viewcount": "Ining pahina pinaglaog nin {{PLURAL:$1|sarong beses|nin $1 beses}}.",
        "protectedpage": "Protektadong pahina",
        "toc": "Mga laog",
        "showtoc": "ipahiling",
        "hidetoc": "tagoon",
-       "collapsible-collapse": "Ibagsak",
-       "collapsible-expand": "Ibuka",
+       "collapsible-collapse": "Pahalipoton",
+       "collapsible-expand": "Pahiwason",
+       "confirmable-yes": "Iyo",
+       "confirmable-no": "Dae",
        "thisisdeleted": "Hilingon o isulit an $1?",
        "viewdeleted": "Hilingon an $1?",
        "restorelink": "{{PLURAL:$1|sarong pinagpurang pagliwat|$1 na pinagpurang mga pagliwat}}",
        "feedlinks": "Hungit:",
        "feed-invalid": "Imbalidong tipo nin hungit sa subkripsyon.",
-       "feed-unavailable": "Mayò an mga sindikasyon na hungit",
+       "feed-unavailable": "Mga sindikasyong hungit dae magagamit",
        "site-rss-feed": "$1 Hungit nin RSS",
        "site-atom-feed": "$1 Hungit Atomo",
        "page-rss-feed": "\"$1\" Hungit na RSS",
        "nosuchspecialpage": "Mayong siring na espesyal na páhina",
        "nospecialpagetext": "<strong>Dai pwede an pahinang espesyal na pinilî mo.</strong>\n\nPwede mong mahiling an lista nin mga marhay na pahina sa [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Salâ",
-       "databaseerror": "Salâ sa base nin datos",
+       "databaseerror": "Kasalaan sa datos-sarayan",
        "databaseerror-text": "Sarong hapot sa datos-sarayan na kasalaan an nangyari.\nIni puwedeng minapasabot nin sarong kudol sa panuklob.",
        "databaseerror-textcl": "Sarong hapot sa datos-sarayan na kasalaan an nangyari.",
        "databaseerror-query": "Hapot: $1",
        "directorycreateerror": "Dai nagibo an direktorya na \"$1\".",
        "filenotfound": "Dai nahanap an file na \"$1\".",
        "unexpected": "Dai pighuhunà na balór: \"$1\"=\"$2\".",
-       "formerror": "Salâ: dai pwedeng isumitir an porma",
-       "badarticleerror": "Dai pwedeng gibohon ini sa ining páhina.",
+       "formerror": "Salâ: Dae maisusumiter an porma.",
+       "badarticleerror": "Ining aksyon dae magigibo sa pahinang ini.",
        "cannotdelete": "An pahina o an sagunson (file) na \"$1\" dae tabi napupura.\nIni puwede nang napura kan iba.",
        "cannotdelete-title": "Dae mapura an pahina na \"$1\"",
        "delete-hook-aborted": "An pagpura pinundo kan pangawit.\nIni dae nagtao nin kapaliwanagan.",
        "badtitletext": "An pinaghagad na titulo kan pahina imbalido, daeng laog, o sarong salaon na sinugpunan na titulo kan inter-lengguwahe o inter-wiki.\nIni gayod may laog nin o dakol na mga karakter na dae pinaggagamit sa mga titulo.",
        "perfcached": "An minasunod na datos pinagtago asin bakong gayo napapanahon. An maximum na {{PLURAL:$1|sarong resulta na|$1 mga resulta na}} yaon sana sa pinagtago.",
        "perfcachedts": "An minasunod na datos pinagtago, asin huring pinagdagdagan kan $1. An maximum na {{PLURAL:$4|sarong result na |$4 mga resulta na }} yaon sana sa pinagtago.",
-       "querypage-no-updates": "Pigpopogol mùna an mga pagbabàgo sa pahinang ini. Dai mùna mababàgo an mga datos digdi.",
+       "querypage-no-updates": "Mga kasugponan para sa pahinang ini sa ngunyan pinagpupugulan. An datos na yaon digde dae sa presente maipagpresko.",
        "viewsource": "Hilingón an ginikanan",
        "viewsource-title": "Hilnga an piggikanan para sa $1",
        "actionthrottled": "An aksyon pinagpugulan",
        "actionthrottledtext": "Bilang sarong pangontra sa spam, ika limitadong sanang himoon ining aksyon sa kadakulon na beses sa halipot sanang panahon, asin ika nakasobra na sa limitasyong ini.\nPaki-otroha giraray sa nagkapirang minuto sana.",
        "protectedpagetext": "Ining pahina protektado tanganing malikayan an pagliliwat o ibang aksyon.",
-       "viewsourcetext": "Pwede mong hilingón asin arógon an ginikanan kan pahinang ini:",
+       "viewsourcetext": "Ika makakatanaw asin makakakopya sa ginikanan kaining pahina:",
        "viewyourtext": "Saimong mahihiling asin makokopya an gikanan kan '''saimong mga pinagriliwat''' sa pahinang ini:",
        "protectedinterface": "An pahinang ini nagtatao nin panlaog-olay para sa software, asin protektado tangaring malikayan an abuso.\nSa pagdagdag or pagliwat nin mga dakit-taramon para sa bilog na wiki, gamita tabi an [//translatewiki.net/translatewiki.net], an MediaWiki sa proyektong lokalisasyon.",
        "editinginterface": "'''Patanid:''' Ika nagliliwat kan pahina na ginagamit sa pagtao nin pantahaw-olay na teksto para sa software.\nAn mga pagbabago kaining pahina makaka-apekto sa hitsura kan pantahaw-olay nin paragamit para sa iba man na paragamit.\nPara sa mga pagdadakit-taramon, pakikonsidera man tabi an paggagamit kan [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], an MediaWiking lokalisasyon kan proyekto.",
-       "cascadeprotected": "Pinoprotehirán ining páhina sa mga paghirá, ta sarô ini sa mga minasunod na {{PLURAL:$1|páhina|mga páhina}} na pinoprotehiran kan opsyón na \"katarata\" na nakabuká:\n$2",
-       "namespaceprotected": "Mayô kang permisong maghirá kan mga páhina sa '''$1''' ngaran-espacio.",
+       "cascadeprotected": "Ining pahina pinagprotehiran gikan sa pagliliwat nin huli ta ini pinagbale sa minasunod na {{PLURAL:$1|pahina, na iyo ngani an|mga pahina, na iyo ngani an mga}} protektado kan pinagbukasang opsyon na \"pasurunod-sunudan\":\n$2",
+       "namespaceprotected": "Ika mayong permiso sa pagliwat nin mga pahina sa <strong>$1</strong> na ngarang-espasyo.",
        "customcssprotected": "Ika mayong permiso sa pagliwat kaining pahinang CSS, nin huli ta ini naglalaman kan personal na panuytoy (settings) kan ibang paragamit.",
        "customjsprotected": "Ika mayong permiso sa pagliwat kaining pahinang JavaScript, nin huli ta ini naglalaman kan personal na panuytoy (settings) kan ibang paragamit.",
        "mycustomcssprotected": "Ika mayo nin permiso sa pagliwat kaining CSS na pahina.",
        "mycustomjsprotected": "Ika mayo nin permiso sa pagliwat kaining JavaScript na pahina.",
        "myprivateinfoprotected": "Ika daeng permiso na magliliwat kan pribado mong impormasyon.",
        "mypreferencesprotected": "Ika daeng permiso na magliliwat kan saimong mga kamuyahan.",
-       "ns-specialprotected": "An mga pahinang nasa {{ns:special}} na liang-liang dai pwedeng hirahón.",
+       "ns-specialprotected": "Mga espesyal na pahina dae makakapagliwat.",
        "titleprotected": "Ining titulo pinagprotektaran poon pagkamukna ni [[User:$1|$1]].\nAn rason na pinagtao iyo na \"''$2''\".",
        "filereadonlyerror": "Dae kinayang baguhon an sagunson (file) \"$1$ nin huli ta an repositoryo kan sagunson \"$2\" yaon sa kamugtakan na basahon sana.\n\nAn administrador na iyo an nagkandado kaini nagpahayag kaining kapaliwanagan: \"$3\".",
        "invalidtitle-knownnamespace": "Imbalidong titulo na igwang espasyadong ngaran na \"$2\" asin teksto na \"$3\"",
        "invalidtitle-unknownnamespace": "Imbalidong titulo na igwang nin bakong bistado na bilang kan espasyadong ngaran na $1 asin teksto na \"$2\"",
-       "exception-nologin": "Dai ka nakalaog",
+       "exception-nologin": "Dai ka nakapaglaog",
        "exception-nologin-text": "Pakipalaog tabi tanganing makalangkay sa pahinang ini o aksyon.",
        "exception-nologin-text-manual": "Tabi man $1 na tanganing makalangkay sa pahinang ini o aksyon.",
        "virus-badscanner": "Raot na kasalansanan: Bakong bistadong virus scanner: ''$1''",
        "userlogin-yourname": "Paragamit-na-Ngaran",
        "userlogin-yourname-ph": "Ikaag an saimong paragamit-na-ngaran",
        "createacct-another-username-ph": "Ikaag an paragamit-na-ngaran",
-       "yourpassword": "Sekretong Panlaog",
-       "userlogin-yourpassword": "Sekretong Panlaog",
+       "yourpassword": "Pasa-taramon:",
+       "userlogin-yourpassword": "Pasa-taramon",
        "userlogin-yourpassword-ph": "Ikaag an saimong sekretong panlaog",
        "createacct-yourpassword-ph": "Ikaag an sekretong panlaog",
        "yourpasswordagain": "Pakilaog giraray kan sekretong panlaog:",
        "php-mail-error-unknown": "Bakong bantog na kasalaan sa PHP mail() function.",
        "user-mail-no-addy": "Nagprubar na magpadara nin e-koreo na mayo nin e-koreong address.",
        "user-mail-no-body": "Nagprubar na magpadara nin e-surat na mayong laman o daeng kanultulan na halipot an hawak.",
-       "changepassword": "Ribayan an sekretong panlaog",
+       "changepassword": "Ribayan an pasa-taramon",
        "resetpass_announce": "Sa pagtapos kan paglalaog mo, ika kaipuhanan na magkaag nin sarong baguhong pasa-taramon.",
        "resetpass_text": "<!-- Magdagdag nin teksto digdi -->",
        "resetpass_header": "Ribayan an panindog na sekretong panlaog",
        "resetpass-no-info": "Ika dapat nakalaog na tanganing direktang makagamit kaining pahina.",
        "resetpass-submit-loggedin": "Ribayan an sekretong panlaog",
        "resetpass-submit-cancel": "I-kansela",
-       "resetpass-wrong-oldpass": "Saláng temporaryo o presenteng sekretong panlaog.\nMatriumpo mo nang nailaog an sekretong panlaog o nakua an bàgong temporaryong sekretong panlaog.",
+       "resetpass-wrong-oldpass": "Imbalidong temporaryo o sa ngunyan na pasa-taramon.\nIka matrayumpong nakapagbago na kan saimong pasa-taramon o naghagad nin sarong baguhon na temporaryong pasa-taramon.",
        "resetpass-recycled": "Tabi man pakibaguha an saimong pasa-taramon na magin sarong bagay na ibahon kesa sa ngunyan mong pasa-taramon.",
        "resetpass-temp-emailed": "Ika nakapaglaog na igwa nin sarong temporaryong koda na pinag-esurat saimo. Sa pagtapos kan paglalaog mo, ika kaipuhan na magkaag nin sarong baguhong pasa-taramon digde:",
        "resetpass-temp-password": "Temporaryong sekretong panlaog:",
        "passwordreset-emailsent-capture": "Sarong e-surat sa pagliliwat kan sekretong panlaog an ipinadara na, yaon ipinapahiling sa ibaba.",
        "passwordreset-emailerror-capture": "Sarong e-surat sa pagliliwat kan sekretong panlaog an pinagpuyos na, yaon ipinapahiling sa ibaba, alagad sa pagpapadara kaini sa {{GENDER:$2|paragamit}} nagpalya: $1",
        "changeemail": "Ribayan an e-koreong address",
-       "changeemail-header": "Ribayan an panindog na e-koreong address",
        "changeemail-text": "Kumpletoha ining porma tanganing ribayan an saimong e-koreong address. Kinakaipo mong ilaog an saimong sekretong panlaog tanganing kumpirmaron ining pagribay.",
        "changeemail-no-info": "Ika dapat nakalaog na tanganing direktang makagamit kaining pahina.",
        "changeemail-oldemail": "Presenteng e-koreong address:",
        "changeemail-none": "mayo tabi.",
        "changeemail-password": "An saimong {{SITENAME}} sikretong panlaog:",
        "changeemail-submit": "Ribayan an e-koreo",
-       "changeemail-cancel": "Kanselaha",
        "resettokens": "Pakibaguha an mga paduos",
        "resettokens-text": "Ika makakapagbago kan ma paduos na magtutugot nin kalangkayan pasiring sa siyertong datos na pribado na asosyado sa saimong panindog digde.\n\nGibohon mo ini kun aksidente mong naipagheras sinda sa kiisay man o kun an saimong panindog kompromitido na.",
        "resettokens-no-tokens": "Mayo nin mga paduos na babaguhon.",
        "bold_sample": "Mahìbog na teksto",
        "bold_tip": "Mahìbog na teksto",
        "italic_sample": "Italikong teksto",
-       "italic_tip": "Tekstong Italiko",
+       "italic_tip": "Italikong teksto",
        "link_sample": "Titulo nin sugpon",
        "link_tip": "Panlaog na sugpon",
        "extlink_sample": "http://www.example.com títulong sugpon",
        "sig_tip": "An saimong pirma na igwang tatak-oras",
        "hr_tip": "Pabalagbag na linya (gamiton paminsan-minsan)",
        "summary": "Sumaryo:",
-       "subject": "Tema/pamayohan:",
+       "subject": "Subheto/kapamayuhan:",
        "minoredit": "Ini sarong dikiton na pagliwat",
        "watchthis": "Bantayan ining pahina",
        "savearticle": "Itagáma an pahina",
        "showdiff": "Ipahiling an mga kaliwatan",
        "anoneditwarning": "'''Patanid:''' Ika dae nakapaglaog. An saimong estada kan IP maisusurat sa laog kan historiya nin pagliliwat sa pahinang ini.",
        "anonpreviewwarning": "Dae ka tabi nakalaog. An pagtatagama matala kan saimong IP address sa historya nin pagliwat sa pahinang ini.",
-       "missingsummary": "'''Paisi:''' Dai ka nagkaag nin sumád kan paghirâ. Kun pindotón mo giraray an Itagama, maitatagama an hirá mo na mayô kaini.",
-       "missingcommenttext": "Paki lâgan nin komento sa ibabâ.",
+       "missingsummary": "<strong>Pagiromdom:</strong>Ika dae pa nakapagtao nin sumaryo sa pagliwat. Kun i-klik mo an \"{{int:savearticle}}\" giraray, an saimong pagliwat ipagtatagama na mayo kaiyan.",
+       "missingcommenttext": "Pakikaag nin sarong komento sa ibaba.",
        "missingcommentheader": "'''Pagiromdom:''' Ika dae tabi nagtao nin sarong panultol (subject)/Pamayong linya (headline) para kaining sinambit mo.\nKun saimong pinduton an \"{{int:savearticle}}\" giraray, an saimong pigliwat matatagama na mayo kaiyan.",
-       "summary-preview": "Patànaw nin sumada:",
-       "subject-preview": "Patânaw nin tema/pamayohan:",
-       "blockedtitle": "Pigbágat an parágamit",
+       "summary-preview": "Paenot na patanaw nin sumaryo:",
+       "subject-preview": "Paenot na patanaw sa Subheto/kapamayuhan:",
+       "blockedtitle": "An paragamit pinagbagat",
        "blockedtext": "'''An saimong paragamit na ngaran o IP address pinagkubkob.'''\n\nAn pagkubkob hinimo ni $1.\nAn rason na ipinagtao iyo na ''$2''.\n\n* Pagpoon kan pagkubkob: $8\n* Pagpasó kan pagkubkob: $6\n* Katuyuhan kan parakubkob: $7\n\nIka puwedeng magkontak sa $1 or ibang [[{{MediaWiki:Grouppage-sysop}}|administrador]] tanganing pag-orolayan an pagkubkob.\nIka dae makakagamit kan 'e-koreo kaining paragamit' na panuytuyan laen lang na may sarong balidong e-koreo address na ipinahayag sa saimong [[Special:Preferences|panindog na mga kabotan]] asin ika dae pinagkubkob para sa paggamit kaini.\nAn saimong presenteng IP address iyo $3, asin an kubkob ID iyo #$5.\nPakibale na lang tabi an gabos na mga detalye sa itaas sa anuman na mga kahaputan na saimong himoon.",
        "autoblockedtext": "An saimong IP address awtomatikong pinagkubkob nin huli ta ini pinaggamit kan ibang paragamit, na pinagkubkob ni $1.\nAn rason na ipinagtao iyo na:\n\n:''$2''\n\n* Pagpoon kan pagkubkob: $8\n* Pagpasó kan pagkubkob: $6\n* Katuyuhan kan parakubkob: $7\n\nPuwede mong kontakon si $1 o saro sa [[{{MediaWiki:Grouppage-sysop}}|mga administrador]] tanganing pag-orolayan an kubkob.\n\nPatanid tabi dae mo puwedeng gamiton an \"e-koreo kaining paragamit\" estima laen lang kun ika igwa nin sarong balidong e-koreo address na rehistrado sa saimong [[Special:Preferences|paragamit na mga kabotan]] asin ika dae pinagkubkob para sa paggamit kaini.\n\nAn saimong presenteng IP address iyo an $3, asin and Kubkob ID iyo an #$5.\nPakibale tabi an gabos na mga detalye sa itaas sa arinman na mga kahaputan na saimong himoon.",
-       "blockednoreason": "mayong itinaong rason",
-       "whitelistedittext": "Kaipuhan mong $1 tangarig makahirá nin mga páhina.",
-       "confirmedittext": "Kaipuhan mong kompirmaron an saimong ''e''-surat. Ipwesto tabî asin patunayan an saimong ''e''-surat sa [[Special:Preferences|mga kabôtan kan parágamit]].",
+       "blockednoreason": "mayong rason na ipinagtao",
+       "whitelistedittext": "Tabi man $1 tanganing makapagliwat nin mga pahina.",
+       "confirmedittext": "Ika kaipuhan na magkumpirma kan saimong estada sa e-surat bago makapagliwat nin mga pahina. Tabi man pakikaag asin balidaron an saimong estada sa e-surat sa paagi kan saimong [[Special:Mga Kamuyahan|paragamit na mga kamuyahan]].",
        "nosuchsectiontitle": "Dae managboan an seksyon",
        "nosuchsectiontext": "Ika nagprubar na liwaton an sarong seksyon na bakong eksistido.\nIni puwedeng pinagbalyo o pinagpara na habang saimong pinaghihiling an pahina.",
-       "loginreqtitle": "Kaipuhan Maglaog",
+       "loginreqtitle": "An paglaog pinaghahagad",
        "loginreqlink": "maglaog",
-       "loginreqpagetext": "Kaipuhan kang $1 tangarig makahilíng nin ibang pahina.",
-       "accmailtitle": "Napadará na an sekretong panlaog.",
+       "loginreqpagetext": "Tabi man $1 tanganing makapagtanaw kan ibang mga pahina.",
+       "accmailtitle": "Pasa-taramon naipadara na",
        "accmailtext": "An purak na pinagpuyos na pasa-taramon para ki [[User talk:$1|$1]] ipinagpadara na sa $2. Ini mapupuwedeng pagribayan sa ''[[Special:ChangePassword|change password]]'' na pahina matapos na ika nakalaog na.",
        "newarticle": "(Bàgo)",
-       "newarticletext": "Ika nakapagsunod sa sarong sugpon pasiring sa sarong pahina na bako pang eksistido. Tanganing makapagmukna nin pahina, magpoon sa pagpindot sa laog nin kahon sa ibaba (hilngon an [$1 pahina nin katabangan] para sa kadugangan na impormasyon).\nKun ika napasalang nakadigde, i-klik an  '''ibalik''' na pindutan kan saimong kilyaw.",
+       "newarticletext": "Ika nakapagsunod sa sarong sugpon pasiring sa sarong pahina na bako pang eksistido. Tanganing makapagmukna nin pahina, magpoon sa pagpindot sa laog nin kahon sa ibaba (hilngon an [$1 pahina nin katabangan] para sa kadugangan na impormasyon).\nKun ika napasalang nakadigde, i-klik an  '''ibalik''' na pindutan kan saimong kilyawan.",
        "anontalkpagetext": "----''Ini iyo an pahina kan orolayan para an sarong dae bistadong paragamit na dae pa nakapagmukna nin panindog, o dae pa nakapaggamit kaini.\nKaya kami kaipong gumamit nin numerikal na IP address sa pagbisto saiya.\nAn arog kaining IP address puwedeng maikapagheras sa nagkapirang mga paragamit.\nKun ika sarong dae pa bistadong paragamit asin mati mo na igwang irelebanteng sambit na pinanungod saimo, tabi paki [[Special:UserLogin/signup|mukna nin panindog]] or [[Special:UserLogin|maglaog ka]] tanganing malikayan an pagkaribong sa pag-iriba kan iba pang mga paragamit.''",
        "noarticletext": "Mayo tabi sa presente nin teksto sa pahinang ini.\nIka mapuwedeng [[Special:Search/{{PAGENAME}}|maghanap para sa titulo kan pahinang ini]] sa iba pang mga pahina,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} maghanap sa magkasurundong mga talaan],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} liwaton ining pahina]</span>.",
        "noarticletext-nopermission": "Mayong sa presente nin teksto an pahinang ini.\nIka mapuwedeng [[Special:Search/{{PAGENAME}}|hanapa para kaining titulo kan pahina]] sa iba pang mga pahina,\no <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} maghanap sa magkasurundong mga talaan]</span>.",
        "sitecsspreview": "'''Giromdoma baya na ika nagtatanaw pa sana kaining CSS.'''\n'''Ini dae pa tabi naitatagama!'''",
        "sitejspreview": "'''Giromdoma baya na ika nagtatatanaw pa sana kaining koda sa JavaScript.'''\n'''Ini dae pa tabi naitatagama!'''",
        "userinvalidcssjstitle": "'''Patanid:''' Mayong ''skin'' na \"$1\". Giromdomon tabî na an .css asin .js na mga páhina naggagamit nin titulong nakasurat sa sadit na letras, halimbawa {{ns:user}}:Foo/vector.css bakong {{ns:user}}:Foo/Vector.css.",
-       "updated": "(Binàgo)",
+       "updated": "(Pinagsugpunan na)",
        "note": "'''Paisi:'''",
        "previewnote": "'''Giromdoma na ini sarong patanaw pa sana.'''\nAn saimong mga pinagriliwat dae pa tabi naitatagama!",
        "continue-editing": "Magduman sa lugar nin pagliliwat",
        "mergehistory-same-destination": "Gikanan asin destinasyong mga pahina dae puwedeng magkapareho",
        "mergehistory-reason": "Rason:",
        "mergelog": "Talaan kan pagtiripon",
-       "pagemerge-logentry": "pinagtiripon [[$1]] na magin [[$2]] (mga pagbabago sagkod sa $3)",
        "revertmerge": "Suruwayón",
        "mergelogpagetext": "Sa ibaba yaon an sarong listahan kan pinakahuring mga pagtitiripon kan sarong pahinang historiya sagkod sa iba pa.",
        "history-title": "Pagbabagong historiya kan \"$1\"",
        "searchrelated": "kauyon",
        "searchall": "gabós",
        "showingresults": "Pigpapahiling sa babâ sagkod sa {{PLURAL:$1|'''1''' resulta|'''$1''' mga resulta}} poon sa #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Resulta '''$1''' kan '''$3'''|Mga Resulta '''$1 - $2''' kan '''$3'''}} para sa '''$4'''",
        "search-nonefound": "Mayo nin mga resulta na panampok sa kahaputan.",
        "powersearch-legend": "Adbansiyadong paghahanap",
        "powersearch-ns": "Maghanap sa mga espasyong-ngaran:",
        "statistics": "Mga Estadistiko",
        "statistics-header-pages": "Estadistikong pahina",
        "statistics-header-edits": "Estadistiko nin pagliwat",
-       "statistics-header-views": "Estadistiko nin pagmansay",
        "statistics-header-users": "Mga estadistiko nin parágamit",
        "statistics-header-hooks": "Iba pang estadistiko",
        "statistics-articles": "Laman na mga pahina",
        "statistics-files": "Pinagkargang mga sagunson",
        "statistics-edits": "Mga pagliwat sa pahina magpoon pa na an {{SITENAME}} pinagmukna.",
        "statistics-edits-average": "Katahaw kan mga pagliliwat sa kada pahina",
-       "statistics-views-total": "Mga Kamansayan sa kabilogan",
-       "statistics-views-total-desc": "Mga kamansayan sa dae pa eksistidong mga pahina asin espesyal na mga pahina bakong kabali",
-       "statistics-views-peredit": "Mga kamansayan kada pagliwat",
        "statistics-users": "Rehistrado [[Special:ListUsers|users]]",
        "statistics-users-active": "Mga Aktibong Paragamit",
        "statistics-users-active-desc": "Mga paragamit na may ginibong aksyon sa nakaaging {{PLURAL:$1|aldaw|$1 mga aldaw}}",
-       "statistics-mostpopular": "mga pinaka pighiling na pahina",
        "pageswithprop": "Mga pahina na igwang pahina nin kagrugaring",
        "pageswithprop-legend": "Mga pahina na igwang pahina nin kagrugaring",
        "pageswithprop-text": "Ining mahina naglilista kan mga pahina na minagamit nin partikular na pahina nin kagrugaring.",
        "uncategorizedtemplates": "Mga templatong mayong kategorya",
        "unusedcategories": "Dai gamit na mga kategorya",
        "unusedimages": "Mga dokumentong dai nagamit",
-       "popularpages": "Mga popular na páhina",
        "wantedcategories": "Mga hinahanap na kategorya",
        "wantedpages": "Mga hinahanap na pahina",
        "wantedpages-badtitle": "Imbalidong titulo sa resultang kinaag: $1",
        "querypage-disabled": "Ining espesyal na pahina pinagpundo nin huli sa kaggibohang mga rason.",
        "booksources": "Mga Ginikanan kan libro",
        "booksources-search-legend": "Maghanap para sa mga ginikanang libro",
-       "booksources-go": "Dumanán",
        "booksources-text": "Mahihiling sa babâ an lista kan mga takod sa ibang ''site'' na nagbenbenta nin mga bâgo asin nagamit nang libro, asin pwede ser na igwa pang mga ibang impormasyon manonongod sa mga librong pighahanap mo:",
        "booksources-invalid-isbn": "An pinagtaong ISBN dae minaluwas na balido; paki-tsek tabi nin mga sala sa pagkopya gikan sa orihinal na piggikanan.",
        "specialloguserlabel": "Paragibo:",
        "wlheader-enotif": "E-surat na paisi pinagpaandar na.",
        "wlheader-showupdated": "Mga pahina na pinagriliwat poon kaidtong huri kang nagbisita sainda ipinapatanaw na '''mahîbog'''",
        "wlnote": "Sa ibaba an {{PLURAL:$1|huring pagbabago|mga huring '''$1''' pagbabago}} sa nakaaging {{PLURAL:$2|oras|'''$2''' mga oras}}, magpoon pa kan $3, $4.",
-       "wlshowlast": "Ipahilíng an nakaaging $1 na mga oras mga $2 na aldaw $3",
+       "wlshowlast": "Ipahilíng an nakaaging $1 na mga oras mga $2 na aldaw",
        "watchlist-options": "Bantay-listahan na mga pagpipilian",
        "watching": "Pigbabantayan...",
        "unwatching": "Dai pigbabantayan...",
        "pageinfo-robot-policy": "Pinaghuhukdo sa paagi nin mga robot",
        "pageinfo-robot-index": "Pinagtutugotan",
        "pageinfo-robot-noindex": "Dae pinagtutugotan",
-       "pageinfo-views": "Numero kan mga patanaw",
        "pageinfo-watchers": "Numero kan parabantay nin pahina",
        "pageinfo-few-watchers": "Kadikiton kesa $1{{PLURAL:$1|parabantay|mga parabantay}}",
        "pageinfo-redirects-name": "Numero kan mga palikwat kaining pahina",
        "exif-urgency-low": "Hababaon ($1)",
        "exif-urgency-high": "Halangkawon ($1)",
        "exif-urgency-other": "Prayoridad na pakahulugan nin paragamit ($1)",
-       "watchlistall2": "gabos",
        "namespacesall": "gabós",
        "monthsall": "gabos",
        "confirmemail": "Kompirmaron an ''e''-surat",
index 81b2db5..cc253d3 100644 (file)
        "otherlanguages": "На іншых мовах",
        "redirectedfrom": "(Перанакіравана з «$1»)",
        "redirectpagesub": "Старонка-перанакіраваньне",
+       "redirectto": "Перанакіраваньне на:",
        "lastmodifiedat": "Гэтая старонка апошні раз рэдагавалася $1 году ў $2.",
        "viewcount": "Гэтую старонку праглядалі $1 {{PLURAL:$1|раз|разы|разоў}}.",
        "protectedpage": "Абароненая старонка",
        "pagetitle": "$1 — {{SITENAME}}",
        "retrievedfrom": "Атрымана з «$1»",
        "youhavenewmessages": "Вы атрымалі $1 ($2).",
-       "youhavenewmessagesfromusers": "{{PLURAL:$4|Вы}} атрымалі $1 ад {{PLURAL:$3|1=іншага ўдзельніка|$3 удзельнікаў}} ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Вы}} атрымалі $1 ад $3 {{PLURAL:$3|удзельніка|удзельнікаў}} ($2).",
        "youhavenewmessagesmanyusers": "Вы атрымалі $1 ад некалькіх удзельнікаў ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|1=новае паведамленьне|999=новыя паведамленьні}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|1=апошняя зьмена|999=апошнія зьмены}}",
        "sort-ascending": "Сартаваць па ўзрастаньні",
        "nstab-main": "Старонка",
        "nstab-user": "Старонка {{GENDER:{{BASEPAGENAME}}|ўдзельніка|ўдзельніцы}}",
-       "nstab-media": "Мэдыя",
+       "nstab-media": "Ð\9cÑ\83лÑ\8cÑ\82Ñ\8bмÑ\8dдÑ\8bÑ\8f",
        "nstab-special": "Спэцыяльная старонка",
        "nstab-project": "Старонка праекту",
        "nstab-image": "Файл",
        "viewsourcetext": "Вы можаце праглядаць і капіяваць крынічны тэкст гэтай старонкі:",
        "viewyourtext": "Вы можаце праглядзець і скапіяваць крынічны тэкст '''вашых рэдагаваньняў''' на гэтую старонку:",
        "protectedinterface": "Гэтая старонка ўтрымлівае інтэрфэйснае паведамленьне праграмнага забесьпячэньня, і яе зьмена забаронена. Каб дадаць ці зьмяніць пераклад ва ўсіх праектах, зьвярніцеся на [//translatewiki.net/ translatewiki.net], праект для перакладу MediaWiki.",
-       "editinginterface": "'''Увага:''' Вы рэдагуеце старонку, якая ўтрымлівае сыстэмнае паведамленьне MediaWiki.\nЯе зьмена паўплывае на вонкавы выгляд інтэрфэйсу іншых удзельнікаў у гэтай вікі.\nКаб дадаць ці зьмяніць пераклад ва ўсіх праектах, зьвярніцеся на [//translatewiki.net/wiki/Main_Page?setlang=be-tarask translatewiki.net] — праект для лякалізацыі MediaWiki.",
+       "editinginterface": "<strong>Увага:</strong> Вы рэдагуеце старонку, якая ўтрымлівае тэкст інтэрфэйсу праграмнага забесьпячэньня.\nЯе зьмена паўплывае на вонкавы выгляд інтэрфэйсу іншых удзельнікаў у гэтай вікі.",
+       "translateinterface": "Каб дадаць ці зьмяніць пераклады для ўсіх вікі, калі ласка, крыстаецеся [//translatewiki.net/ translatewiki.net], лякалізацыйным праектам MediaWiki.",
        "cascadeprotected": "Гэтая старонка абароненая ад рэдагаваньня, таму што яна ўключаная ў {{PLURAL:$1|1=наступную старонку, якая была абароненая|наступныя старонкі, якія былі абароненыя}} з актывізаванай опцыяй «каскаднай абароны»:\n$2",
        "namespaceprotected": "Вы ня маеце правоў на рэдагаваньне старонак у прасторы назваў '''$1'''.",
        "customcssprotected": "Вы ня маеце правоў на рэдагаваньне гэтай CSS-старонкі, таму што яна ўтрымлівае пэрсанальныя налады іншага ўдзельніка.",
        "createaccount-text": "Нехта стварыў рахунак «$2» у {{GRAMMAR:месны|{{SITENAME}}}} ($4) для Вашага адрасу электроннай пошты. Пароль для гэтага рахунку — «$3». Вам трэба ўвайсьці і зьмяніць Ваш пароль зараз.\n\nВы можаце праігнараваць гэты ліст, калі гэты рахунак быў створаны памылкова.",
        "login-throttled": "Вы зрабілі надта шмат спробаў уваходу ў сыстэму.\nКалі ласка, пачакайце $1 перад тым як паспрабаваць ізноў.",
        "login-abort-generic": "Не атрымалася ўвайсьці ў сыстэму, скасавана",
+       "login-migrated-generic": "Ваш рахунак быў перанесены і вашае імя ўдзельніка больш не існуе ў гэтай вікі.",
        "loginlanguagelabel": "Мова: $1",
        "suspicious-userlogout": "Ваш запыт на выхад з сыстэмы быў адхілены, таму што выглядае, што ён быў дасланы пашкоджаным браўзэрам альбо кэшаваным проксі-сэрвэрам.",
        "createacct-another-realname-tip": "Сапраўднае імя паведамляць неабавязкова.\nКалі Вы яго пазначыце, яно будзе выкарыстоўвацца для пазначэньня Вашай працы.",
        "passwordreset-emailsent-capture": "Ліст пра скіданьне паролю быў дасланы, што паказана ніжэй.",
        "passwordreset-emailerror-capture": "Ліст пра скіданьне паролю быў створаны і паказаны ніжэй, але не ўдалося адправіць яго {{GENDER:$2|ўдзельніку|ўдзельніцы}}: $1",
        "changeemail": "Зьмяніць адрас электроннай пошты",
-       "changeemail-header": "Зьмена адрасу электроннай пошты для рахунку",
        "changeemail-text": "Запоўніце гэтую форму для зьмены адрасу Вашай электроннай пошты. Вам неабходна будзе ўвесьці Ваш пароль для пацьверджаньня зьмены.",
        "changeemail-no-info": "Для непасрэднага доступу да гэтай старонкі Вам неабходна ўвайсьці ў сыстэму.",
        "changeemail-oldemail": "Цяперашні адрас электроннай пошты:",
        "changeemail-none": "(няма)",
        "changeemail-password": "Ваш пароль у {{GRAMMAR:месны|{{SITENAME}}}}:",
        "changeemail-submit": "Зьмяніць адрас электроннай пошты",
-       "changeemail-cancel": "Скасаваць",
        "changeemail-throttled": "Вы зрабілі зашмат спробаў увайсьці ў сыстэму.\nКалі ласка, пачакайце $1 перад наступнай спробай.",
        "resettokens": "Скідваньне токенаў",
        "resettokens-text": "Тут вы можаце скінуць токены, якія даюць вамд доступ да пэўных прыватных зьвестак, асацыяваных з вашым рахункам.\n\nКалі вы выпадкова падзяліліся токенамі зь іншымі, або калі ваш рахунак быў скампрамэтаваны, скарыстайцеся гэтай магчымасьцю і скіньце токены.",
        "showpreview": "Праглядзець",
        "showdiff": "Паказаць зьмены",
        "blankarticle": "<strong>Папярэджаньне:</strong> вы ствараеце пустую старонку.\nКалі вы націсьніце «{{int:savearticle}}» яшчэ раз, старонка будзе створаная без аніякага зьместу.",
-       "anoneditwarning": "'''Папярэджаньне:''' Вы не ўвайшлі ў сыстэму. Ваш IP-адрас будзе запісаны ў гісторыі гэтай старонкі.",
+       "anoneditwarning": "<strong>Папярэджаньне</strong>: вы не ўвайшлі ў сыстэму. Ваш IP-адрас будзе бачны ўсім, калі вы адрэдагуеце старонку. Калі вы <strong>[$1 ўвойдзеце]</strong> або <strong>[$2 створыце рахунак]</strong>, вашыя рэдагаваньні будуць зьвязаныя з вашым імем карыстальніка, а таксама вам будуць даступныя дадатковыя перавагі.",
        "anonpreviewwarning": "''Вы не ўвайшлі ў сыстэму. Падчас захаваньня Ваш IP-адрас будзе дададзены ў гісторыю рэдагаваньняў старонкі.''",
        "missingsummary": "'''Напамін:''' Вы не пазначылі кароткае апісаньне зьменаў.\nКалі Вы націсьніце кнопку «Запісаць» яшчэ раз, Вашае рэдагаваньне будзе запісанае без апісаньня.",
        "missingcommenttext": "Калі ласка, увядзіце камэнтар ніжэй.",
        "content-model-text": "просты тэкст",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Старонкі, на якіх у шаблёнах выкарыстоўваюцца парамэтры-дублікаты",
+       "duplicate-args-category-desc": "Старонкі, якія ўтрымліваюць шаблёны з парамэтрамі-дублікатамі, напрыклад, <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> або <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Папярэджаньне: гэтая старонка ўтрымлівае зашмат працаёмістых зваротаў да функцыяў парсэра.\n\nПавінна быць ня болей за $2 {{PLURAL:$2|зварот|звароты|зваротаў}}, а цяпер ўтрымліваецца {{PLURAL:$1|$1 зварот|$1 звароты|$1 зваротаў}}.",
        "expensive-parserfunction-category": "Старонкі, якія ўтрымліваюць зашмат працаёмістых зваротаў да функцыяў парсэра",
        "post-expand-template-inclusion-warning": "Папярэджаньне: Памер уключаемых шаблёнаў занадта вялікі.\nНекаторыя шаблёны ня будуць уключаныя.",
        "mergehistory-same-destination": "Крынічная і мэтавая старонкі ня могуць супадаць",
        "mergehistory-reason": "Прычына:",
        "mergelog": "Журнал аб’яднаньняў",
-       "pagemerge-logentry": "аб’яднаная [[$1]] ў [[$2]] (гісторыя рэдагаваньняў да $3)",
        "revertmerge": "Разьяднаць",
        "mergelogpagetext": "Ніжэй знаходзіцца сьпіс апошніх аб'яднаньняў гісторыяў старонак.",
        "history-title": "$1 — гісторыя зьменаў",
        "search-result-category-size": "$1 {{PLURAL:$1|элемэнт|элемэнты|элемэнтаў}} ($2 {{PLURAL:$2|падкатэгорыя|падкатэгорыі|падкатэгорыяў}}, $3 {{PLURAL:|файл|файлы|файлаў}})",
        "search-redirect": "(перанакіраваньне $1)",
        "search-section": "(сэкцыя $1)",
+       "search-category": "(катэгорыя $1)",
        "search-file-match": "(супадае зь зьмесьцівам файла)",
        "search-suggest": "Магчыма, вы мелі на ўвазе: $1",
        "search-interwiki-caption": "Сумежныя праекты",
        "searchall": "усе",
        "showingresults": "Ніжэй {{PLURAL:$1|паданы|паданыя|паданыя}} да '''$1''' {{PLURAL:$1|выніку|вынікаў|вынікаў}}, пачынаючы з #<b>$2</b>.",
        "showingresultsinrange": "Ніжэй паказаныя да {{PLURAL:$1|<strong>$1</strong> выніку ў|<strong>$1</strong> вынікаў у}} дыяпазоне ад <strong>$2</strong> да <strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|1=Вынік '''$1''' з '''$3'''|Вынікі '''$1—$2''' з '''$3'''}} для '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|1=Вынік <strong>$1</strong> з <strong>$3</strong>|Вынікі <strong>$1—$2</strong> з <strong>$3</strong>}}",
        "search-nonefound": "Супадзеньняў па запыце ня знойдзена.",
        "powersearch-legend": "Удасканалены пошук",
        "powersearch-ns": "Шукаць у прасторах назваў:",
        "gender-female": "Яна рэдагуе вікістаронкі",
        "prefs-help-gender": "Вызначаць гэта неабавязкова.\nАпраграмаваньне выкарыстоўвае гэтае значэньне толькі для граматычна карэктнага звароту да вас.\nГэтая інфармацыя будзе агульнадаступнай.",
        "email": "Электронная пошта",
-       "prefs-help-realname": "Сапраўднае імя паведамляць неабавязкова.\nКалі Вы яго пазначыце, яно будзе выкарыстоўвацца для пазначэньня Вашай працы.",
+       "prefs-help-realname": "Сапраўднае імя паведамляць неабавязковае.\nКалі Вы яго пазначыце, яно можа быць выкарыстанае для пазначэньня Вашай працы.",
        "prefs-help-email": "Адрас электроннай пошты неабавязковы, але ён дае магчымасьць даслаць Вам пароль, калі Вы забылі яго.",
        "prefs-help-email-others": "Вы можаце таксама дазволіць іншым удзельнікам кантактаваць з Вамі праз Вашую асабістую старонку гутарак безь неабходнасьці раскрыцьця адрасу электроннай пошты.",
        "prefs-help-email-required": "Патрабуецца адрас электроннай пошты.",
        "prefs-tokenwatchlist": "Токен",
        "prefs-diffs": "Розьніцы вэрсіяў",
        "prefs-help-prefershttps": "Гэтая налада набудзе моц пры наступным уваходзе ў сыстэму.",
+       "prefswarning-warning": "Вы зрабілі зьмены ў вашых наладах, якія яшчэ не былі захаваныя.\nКалі вы закрыеце гэтую старонку і не націсьніце «$1», вашыя налады ня будуць абноўленыя.",
        "prefs-tabs-navigation-hint": "Падказка: вы можаце пераходзіць паміж укладкамі ў сьпісе ўкладак з дапамогай клявішаў налева і направа.",
        "email-address-validity-valid": "Выглядае слушна",
        "email-address-validity-invalid": "Неабходны слушны адрас!",
        "statistics": "Статыстыка",
        "statistics-header-pages": "Статыстыка старонак",
        "statistics-header-edits": "Статыстыка рэдагаваньняў",
-       "statistics-header-views": "Статыстыка праглядаў",
        "statistics-header-users": "Статыстыка ўдзелу",
        "statistics-header-hooks": "Іншая статыстыка",
        "statistics-articles": "Колькасьць старонак са зьместам",
        "statistics-files": "Колькасьць загружаных файлаў",
        "statistics-edits": "Агульная колькасьць рэдагаваньняў",
        "statistics-edits-average": "Сярэдняя колькасьць рэдагаваньняў на старонку",
-       "statistics-views-total": "Агульная колькасьць праглядаў",
-       "statistics-views-total-desc": "Прагляды неіснуючых старонак і спэцыяльных старонак не ўлічаныя",
-       "statistics-views-peredit": "Колькасьць праглядаў на рэдагаваньне",
        "statistics-users": "[[Special:ListUsers|Зарэгістраваныя ўдзельнікі]]",
        "statistics-users-active": "Актыўныя ўдзельнікі",
        "statistics-users-active-desc": "Удзельнікі, якія выканалі нейкае дзеяньне цягам {{PLURAL:$1|апошняга $1 дня|апошніх $1 дзён|апошніх $1 дзён}}",
-       "statistics-mostpopular": "Найпапулярнейшыя старонкі",
        "pageswithprop": "Старонкі з уласьцівасьцямі старонак",
        "pageswithprop-legend": "Старонкі з уласьцівасьцямі старонак",
        "pageswithprop-text": "На гэтай старонцы адлюстроўваюцца старонкі, якія ўжываюць пэўныя ўласьцівасьці старонак",
        "uncategorizedtemplates": "Некатэгарызаваныя шаблёны",
        "unusedcategories": "Катэгорыі, якія не выкарыстоўваюцца",
        "unusedimages": "Файлы, якія не выкарыстоўваюцца",
-       "popularpages": "Папулярныя старонкі",
        "wantedcategories": "Запатрабаваныя катэгорыі",
        "wantedpages": "Запатрабаваныя старонкі",
        "wantedpages-badtitle": "Няслушная назва сярод вынікаў: $1",
        "pager-older-n": "$1 {{PLURAL:$1|старэйшая|старэйшыя|старэйшых}}",
        "suppress": "Рэвізаваць",
        "querypage-disabled": "Гэта спэцыяльная старонка адключаная для падвышэньня прадукцыйнасьці",
+       "apihelp": "Даведка API",
+       "apihelp-no-such-module": "Модуль «$1» ня знойдзены.",
        "booksources": "Пошук кніг",
        "booksources-search-legend": "Пошук кніг",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Паказаць",
+       "booksources-search": "Шукаць",
        "booksources-text": "Ніжэй знаходзіцца сьпіс спасылак на іншыя сайты, якія прадаюць новыя і патрыманыя кнігі, і могуць таксама мець інфармацыю пра кнігі, якія Вы шукаеце:",
        "booksources-invalid-isbn": "Пададзены няслушны ISBN; праверце, магчыма ўзьніклі памылкі пры пераносе нумару з арыгінальнай крыніцы.",
        "specialloguserlabel": "Выканаўца:",
        "wlheader-enotif": "Апавяшчэньне па e-mail уключанае.",
        "wlheader-showupdated": "Старонкі, зьмененыя з часу вашага апошняга візыту, вылучаныя '''тоўстым''' шрыфтам.",
        "wlnote": "Ніжэй {{PLURAL:$1|паказаная <strong>$1</strong> апошняя зьмена|паказаныя <strong>$1</strong> апошнія зьмены|паказаныя <strong>$1</strong> апошніх зьменаў}} за <strong>$2</strong> {{PLURAL:$2|гадзіну|гадзіны|гадзінаў}}, па стане на $4 $3.",
-       "wlshowlast": "Паказаць: за апошнія $1 гадзінаў, $2 дзён, $3",
+       "wlshowlast": "Паказаць за апошнія $1 гадзінаў, $2 дзён",
        "watchlist-options": "Налады сьпісу назіраньня",
        "watching": "Дадаецца ў сьпіс назіраньня…",
        "unwatching": "Выдаляецца са сьпісу назіраньня…",
        "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** Папулярная старонка",
        "unblocked": "[[User:$1|$1]] быў разблякаваны.",
        "unblocked-range": "$1 быў разблякаваны",
        "unblocked-id": "Блякаваньне $1 зьнятае",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] быў разблякаваны.",
        "blocklist": "Заблякаваныя ўдзельнікі",
        "ipblocklist": "Заблякаваныя ўдзельнікі",
        "ipblocklist-legend": "Пошук заблякаванага ўдзельніка",
        "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": "Імпартаваць",
        "tooltip-pt-mycontris": "Ваш унёсак",
        "tooltip-pt-login": "Вас запрашаюць увайсьці, хаця гэта і неабавязкова.",
        "tooltip-pt-logout": "Выйсьці",
+       "tooltip-pt-createaccount": "Мы прапануем вам стварыць рахунак і ўвайсьці, але гэта не абавязкова",
        "tooltip-ca-talk": "Абмеркаваньне зьместу старонкі",
        "tooltip-ca-edit": "Вы можаце рэдагаваць гэтую старонку. Калі ласка, ужывайце кнопку прагляду перад захаваньнем.",
        "tooltip-ca-addsection": "Пачаць новую сэкцыю",
        "tooltip-feed-atom": "Atom-стужка для гэтай старонкі",
        "tooltip-t-contributions": "Паказаць унёсак гэтага удзельніка/гэтай удзельніцы",
        "tooltip-t-emailuser": "Даслаць ліст гэтаму ўдзельніку/гэтай удзельніцы па электроннай пошце",
+       "tooltip-t-info": "Болей інфармацыі пра гэтую старонку",
        "tooltip-t-upload": "Загрузіць файл",
        "tooltip-t-specialpages": "Сьпіс усіх спэцыяльных старонак",
        "tooltip-t-print": "Вэрсія гэтай старонкі для друку",
        "pageinfo-robot-policy": "Індэксацыя пашукавікамі",
        "pageinfo-robot-index": "Дазволеная",
        "pageinfo-robot-noindex": "Не дазволеная",
-       "pageinfo-views": "Колькасьць праглядаў",
        "pageinfo-watchers": "Колькасьць назіральнікаў і назіральніц",
        "pageinfo-few-watchers": "Менш за $1 {{PLURAL:$1|назіральніка|назіральнікі|назіральнікаў}}",
        "pageinfo-redirects-name": "Перанакіраваньняў на гэтую старонку",
        "exif-urgency-low": "Нізкая ($1)",
        "exif-urgency-high": "Высокая ($1)",
        "exif-urgency-other": "Прыярытэт вызначаны карыстальнікам ($1)",
-       "watchlistall2": "усё",
        "namespacesall": "усе",
        "monthsall": "усе",
        "confirmemail": "Пацьвердзіць адрас электроннай пошты",
        "unknown_extension_tag": "Невядомы тэг пашырэньня «$1»",
        "duplicate-defaultsort": "Папярэджаньне: Ключ сартыроўкі па змоўчваньні «$2» замяняе папярэдні ключ сартыроўкі па змоўчваньні «$1».",
        "duplicate-displaytitle": "<strong>Папярэджаньне:</strong> назва для адлюстраваньня «$2» перапісвае ранейшую назву для адлюстраваньня «$1».",
+       "invalid-indicator-name": "<strong>Памылка:</strong> атрыбут <code>name</code> індыкатараў статусу старонкі ня мусіць быць пустым.",
        "version": "Вэрсія",
        "version-extensions": "Усталяваныя пашырэньні",
        "version-skins": "Усталяваныя тэмы афармленьня",
        "revdelete-uname-unhid": "імя ўдзельніка адкрытае",
        "revdelete-restricted": "ужыць абмежаваньні для адміністратараў",
        "revdelete-unrestricted": "зьнятыя абмежаваньні для адміністратараў",
+       "logentry-merge-merge": "$1 {{GENDER:$2|аб’яднаў|аб’яднала}} $3 у $4 (вэрсіі да $5)",
        "logentry-move-move": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4 без пакінутага перанакіраваньня",
        "logentry-move-move_redir": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4 паўзьверх перанакіраваньня",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|загрузіў|загрузіла}} новую вэрсію $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|загрузіў|загрузіла}} $3",
        "rightsnone": "(няма)",
+       "revdelete-summary": "кароткае апісаньне зьменаў",
        "feedback-bugornote": "Калі Вы гатовы падрабязна апісаць тэхнічную праблему, калі ласка [$1 паведаміце пра памылку]. \nУ адваротным выпадку, Вы можаце выкарыстоўваць простую форму пададзеную ніжэй. Ваш камэнтар будзе дададзены на старонку «[$3 $2]», разам з Вашым іменем удзельніка і выкарыстоўваемым браўзэрам.",
        "feedback-subject": "Тэма:",
        "feedback-message": "Паведамленьне:",
        "api-error-stashfailed": "Унутраная памылка: сэрвэр ня змог захаваць часовы файл.",
        "api-error-publishfailed": "Унутраная памылка: сэрвэр ня змог захаваць часловы файл.",
        "api-error-stasherror": "Падчас загрузкі файла ў сховішча адбылася памылка.",
+       "api-error-stashedfilenotfound": "Схаваны файл ня быў знойдзены пры спробе загрузіць яго з схованкі.",
+       "api-error-stashpathinvalid": "Шлях, дзе павінен быў знаходзіцца схаваны файл, апынуўся няслушным.",
+       "api-error-stashfilestorage": "Адбылася памылка пры захаваньні файла ў схованку.",
+       "api-error-stashzerolength": "Сэрвэр ня змог схаваць файл, бо ён мае нулявы памер.",
        "api-error-timeout": "Сэрвэр не адказаў у чаканы тэрмін.",
        "api-error-unclassified": "Узьнікла невядомая памылка",
        "api-error-unknown-code": "Невядомая памылка: «$1».",
        "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 Інструкцыя:Наладка тэмаў афармленьня] дзеля інфармацыі, як падключыць іх і абраць тэму па змоўчаньні.\n\n$2\n\n; Калі вы толькі што ўсталявалі MediaWiki:\n: Напэўна вы ўсталявалі з git або наўпрост з крынічнага коду з ужываньнем іншага мэтаду. Гэта чакана. Паспрабуйце ўсталяваць некалькі тэмаў афармленьня з [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's каталёгу тэмаў]:\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": "Упс! Тэма афармленьня па змоўчаньні для вашай вікі, вызначаная ў <code dir=\"ltr\">$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's каталёгу тэмаў]:\n:* Спампуйце [https://www.mediawiki.org/wiki/Download tarball-усталёўнік], які ўтрымлівае некалькі тэмаў і пашырэньняў. Вы можаце скапіяваць каталёг <code>skins/</code> зь яго.\n:* Зрабіце клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталёг <code dir=\"ltr\">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 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; Калі вы толькі што ўсталявалі або абнавілі 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 dir=\"ltr\">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 ('''адключана''')",
+       "mediastatistics": "Статыстыка мэдыяфайлаў",
+       "mediastatistics-summary": "Статыстыка тыпаў загружаных файлаў. Яна ўключае толькі актуальныя вэрсіі файлаў. Старыя і выдаленыя вэрсіі ня ўлічваюцца.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 байт|$1 байты|$1 байтаў}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME-тып",
+       "mediastatistics-table-extensions": "Магчымыя пашырэньні",
+       "mediastatistics-table-count": "Колькасьць файлаў",
+       "mediastatistics-table-totalbytes": "Агульны памер",
+       "mediastatistics-header-unknown": "Невядомыя",
+       "mediastatistics-header-bitmap": "Растравыя выявы",
+       "mediastatistics-header-drawing": "Рысункі (вэктарныя выявы)",
+       "mediastatistics-header-audio": "Гук",
+       "mediastatistics-header-video": "Відэа",
+       "mediastatistics-header-multimedia": "Зьмяшанае мультымэдыя",
+       "mediastatistics-header-office": "Офіс",
+       "mediastatistics-header-text": "Тэкст",
+       "mediastatistics-header-executable": "Выконваныя файлы",
+       "mediastatistics-header-archive": "Сьціснутыя фарматы",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|залішняя коска ў канцы была выдаленая|залішнія коскі ў канцы былі выдаленыя|залішніх косак у канцы былі выдаленыя}} з JSON",
+       "json-error-unknown": "Узьнікла праблема з JSON. Памылка: $1",
+       "json-error-depth": "Перавышаная максымальная глыбіня стэку",
+       "json-error-state-mismatch": "Недазволены або няслушна сфармаваны JSON",
+       "json-error-ctrl-char": "Памылка кантрольнага сымбалю, магчыма, няслушнае кадаваньне",
+       "json-error-syntax": "Сынтаксычная памылка",
+       "json-error-utf8": "Некарэктныя сымбалі UTF-8, магчыма, няслушнае кадаваньне",
+       "json-error-recursion": "Значэньне, якое трэба закадаваць, утрымлівае адну ці некалькі рэкурсіўных спасылак",
+       "json-error-inf-or-nan": "У значэньні, якое трэба закадаваць, прысутнічаюць адно ці болей NAN- або INF-значэньняў",
+       "json-error-unsupported-type": "Было пададзенае значэньне тыпу, які ня можа быць закадаваны"
 }
index 929d9c4..d7e2743 100644 (file)
        "otherlanguages": "На іншых мовах",
        "redirectedfrom": "(Пасля перасылкі з $1)",
        "redirectpagesub": "Старонка-перасылка",
+       "redirectto": "Перасылае да",
        "lastmodifiedat": "Апошняе змяненне старонкі адбылося $2, $1.",
        "viewcount": "Гэту старонку адкрывалі {{PLURAL:$1|адзін раз|$1 разы|$1 разоў}}.",
        "protectedpage": "Старонка пад аховай",
        "nstab-user": "Старонка",
        "nstab-media": "Мультымедыя",
        "nstab-special": "Адмысловая старонка",
-       "nstab-project": "Старонка праекту",
+       "nstab-project": "Старонка праекта",
        "nstab-image": "Файл",
        "nstab-mediawiki": "Паведамленне",
        "nstab-template": "Шаблон",
        "passwordreset-email": "Адрас электроннай пошты:",
        "passwordreset-emailtitle": "Інфармацыя пра рахунак на сайце {{SITENAME}}",
        "passwordreset-emailtext-ip": "Нехта (магчыма вы, з IP-адрасу $1) запытаў скід  вашага пароля ў праекце {{SITENAME}} ($4).\n{{PLURAL:$3|Наступны ўліковы запіс звязаны|Наступныя ўліковыя запісы звязаны}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць {{PLURAL:$5|адзін дзень|$5 дні|$5 дзён}}.\nВы павінны зараз увайсці ў сістэму і абраць новы пароль. Калі вы не рабілі гэтага запыту, ці ўспомнілі свой зыходны пароль і не жадаеце яго мяняць, вы можаце праігнараваць гэтае паведамленне і працягнуць выкарыстоўваць свой стары пароль.",
-       "passwordreset-emailtext-user": "Удзельнік $1 з праекту {{SITENAME}} запытаў скід вашага пароля ў праекце {{SITENAME}}\n($4).\n{{PLURAL:$3|Наступны ўліковы запіс звязаны|Наступныя уліковыя запісы звязаны}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць {{PLURAL:$5|$5 дзень |$5 дні |$5 дзён}}.\nВы павінны зараз увайсці ў сістэму і абраць новы пароль. Калі вы не рабілі гэтага запыту, ці ўспомнілі свой зыходны пароль і не жадаеце яго мяняць, вы можаце праігнараваць гэтае паведамленне і працягваць выкарыстоўваць свой стары пароль.",
+       "passwordreset-emailtext-user": "Удзельнік $1 з праекта {{SITENAME}} запытаў скід вашага пароля ў праекце {{SITENAME}}\n($4).\n{{PLURAL:$3|Наступны ўліковы запіс звязаны|Наступныя уліковыя запісы звязаны}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць {{PLURAL:$5|$5 дзень |$5 дні |$5 дзён}}.\nВы павінны зараз увайсці ў сістэму і выбраць новы пароль. Калі вы не рабілі гэтага запыту, ці ўспомнілі свой зыходны пароль і не жадаеце яго мяняць, вы можаце праігнараваць гэтае паведамленне і працягваць выкарыстоўваць свой стары пароль.",
        "passwordreset-emailelement": "Імя ўдзельніка: $1\nЧасовы пароль: $2",
        "passwordreset-emailsent": "Па электроннай пошце быў адпраўлены ліст пра скід пароля.",
        "passwordreset-emailsent-capture": "Ніжэй прыведзены адпраўлены ліст пра скід пароля.",
        "passwordreset-emailerror-capture": "Ніжэй прыведзены створаны ліст пра скід пароля, яго адпраўка не атрымалася па прычыне: $1",
        "changeemail": "Змяніць адрас электроннай пошты",
-       "changeemail-header": "Змена электроннага адрасу акаўнта",
        "changeemail-text": "Запоўніце гэтую форму, каб змяніць свой адрас электроннай пошты. Вам трэба будзе ўвесці пароль, каб пацвердзіць змяненне.",
        "changeemail-no-info": "Каб звяртацца непасрэдна да гэтай старонкі, вам варта прадставіцца сістэме.",
        "changeemail-oldemail": "Бягучы адрас электроннай пошты:",
        "changeemail-none": "(няма)",
        "changeemail-password": "Ваш {{SITENAME}} пароль:",
        "changeemail-submit": "Змяніць адрас электроннай пошты:",
-       "changeemail-cancel": "Адмена",
        "changeemail-throttled": "Надта штмат спробаў увайсці пад гэтым рахункам. Пачакайце $1 перад тым, як спрабаваць ізноў.",
        "resettokens": "Скінуць токены",
        "resettokens-text": "Вы можаце пераўстанавіць токены, якія дазваляюць атрымліваць доступ да пэўных прыватных звестак, звязаных з вашым уліковым запісам.\n\nВы мусіце скінуць токены, калі выпадкова падзяліліся імі з кім-небудзь, ці ваш уліковы запіс быў скампраметаваны.",
        "mergehistory-same-destination": "Нельга, каб выток і мэта былі аднолькавымі",
        "mergehistory-reason": "Прычына:",
        "mergelog": "Журнал аб'яднанняў",
-       "pagemerge-logentry": "аб'яднана [[$1]] у склад [[$2]] (версіі перад? і лучна з $3)",
        "revertmerge": "Адкаціць аб'яднанне",
        "mergelogpagetext": "Ніжэй паказаны пералік самых нядаўніх аб'яднанняў гісторый старонак.",
        "history-title": "Гісторыя версій \"$1\"",
        "searchall": "усе",
        "showingresults": "Ніжэй паказаны да {{PLURAL:$1|'''$1''' выніку|'''$1''' вынікаў}}, пачынаючы з нумару '''$2'''.",
        "showingresultsinrange": "Ніжэй паказаны да {{PLURAL:$1|<strong>1</strong> выніку|<strong>$1</strong> вынікаў}} у дыяпазоне ад #<strong>$2</strong> да #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Вынік '''$1''' из '''$3'''|Вынікі '''$1 — $2''' из '''$3'''}} для '''$4'''",
        "search-nonefound": "Нічога не было знойдзена.",
        "powersearch-legend": "Падрабязны пошук",
        "powersearch-ns": "Шукаць у прасторах назваў:",
        "statistics": "Статыстыка",
        "statistics-header-pages": "Статыстыка старонак",
        "statistics-header-edits": "Статыстыка правак",
-       "statistics-header-views": "Статыстыка паказаў",
        "statistics-header-users": "Статыстыка ўдзельніка",
        "statistics-header-hooks": "Іншыя статыстыкі",
        "statistics-articles": "Змястоўныя старонкі",
        "statistics-files": "Укладзеныя файлы",
        "statistics-edits": "Праўкі старонак ад часу інсталяцыі {{SITENAME}}",
        "statistics-edits-average": "Колькасць правак на 1 старонку",
-       "statistics-views-total": "Усе паказы",
-       "statistics-views-total-desc": "Не ўлічваюцца прагляды неіснуючых і адмысловых старонак.",
-       "statistics-views-peredit": "Колькасць паказаў на 1 праўку",
        "statistics-users": "Registered [[Special:ListUsers|users]]",
        "statistics-users-active": "Актыўныя ўдзельнікі",
        "statistics-users-active-desc": "Удзельнікі, якія хоць нешта зрабілі за апошн{{PLURAL:$1|і дзень|ія $1 дзён}}",
-       "statistics-mostpopular": "Самыя папулярныя старонкі",
        "pageswithprop": "Старонкі з уласцівасцю старонкі",
        "pageswithprop-legend": "Старонкі з пэўнай уласцівасцю",
        "pageswithprop-text": "На гэтай старонцы пералічаны старонкі, якія выкарыстоўваюць пэўную уласцівасць.",
        "uncategorizedtemplates": "Шаблоны без катэгорый",
        "unusedcategories": "Катэгорыі без складнікаў",
        "unusedimages": "Файлы, якія не выкарыстаны",
-       "popularpages": "Папулярныя старонкі",
        "wantedcategories": "Вельмі патрэбныя катэгорыі",
        "wantedpages": "Вельмі патрэбныя старонкі",
        "wantedpages-badtitle": "Недапушчальная назва ў выніках: $1",
        "querypage-disabled": "Гэта адмысловая старонка адключана для павышэння прадукцыйнасці.",
        "booksources": "Кнігі",
        "booksources-search-legend": "Знайсці, дзе купіць кнігі",
-       "booksources-go": "Пошук",
        "booksources-text": "Ніжэй паказаны пералік спасылак на іншыя сеціўныя пляцоўкі, якія прадаюць новыя і б/у кнігі, і, магчыма, маюць больш звестак пра кнігі, якіх вы шукаеце:",
        "booksources-invalid-isbn": "Гэты ISBN не выглядае правільным; праверце правільнасць капіравання з арыгіналу.",
        "specialloguserlabel": "Выканаўца:",
        "wlheader-enotif": "Працуе апавяшчанне праз эл.пошту.",
        "wlheader-showupdated": "Старонкі, якія былі зменены пасля вашага апошняга наведвання, паказаны <strong>абрысам шрыфту</strong>.",
        "wlnote": "Ніжэй {{PLURAL:$1|паказана апошняя <strong>$1</strong> змена|паказаны апошнія <strong>$1</strong> змены|паказаны апошнія <strong>$1</strong> змен}} за {{PLURAL:$2|апошнюю|апошнія|апошнія}} <strong>$2</strong> {{PLURAL:$2|гадзіну|гадзіны|гадзін}}, на момант часу $3 $4.",
-       "wlshowlast": "Паказваць апошнія $1 гадз. $2 дзён $3",
+       "wlshowlast": "Паказваць апошнія $1 гадз. $2 дзён",
        "watchlist-options": "Магчымасці назірання",
        "watching": "Дапісваецца ў спіс назірання...",
        "unwatching": "Спыняем назіранне...",
        "contributions-userdoesnotexist": "Уліковы запіс удзельніка \"$1\" не зарэгістраваны.",
        "nocontribs": "Не знойдзена змен, адпаведных зададзеным параметрам.",
        "uctop": "(апошн.)",
-       "month": "Ад месяцу (і раней):",
-       "year": "Ад году (і раней):",
+       "month": "Ад месяца (і раней):",
+       "year": "Ад года (і раней):",
        "sp-contributions-newbies": "Паказваць толькі ўклады з новых рахункаў",
        "sp-contributions-newbies-sub": "З новых рахункаў",
        "sp-contributions-newbies-title": "Уклады ўдзельнікаў з новых рахункаў",
        "pageinfo-robot-policy": "Індэксаванне робатамі",
        "pageinfo-robot-index": "Дазволена",
        "pageinfo-robot-noindex": "Не дазволена",
-       "pageinfo-views": "Колькасць праглядаў",
        "pageinfo-watchers": "Колькасць назіральнікаў старонкі",
        "pageinfo-few-watchers": "Менш чым $1 {{PLURAL:$1|назіральнік|назіральнікі|назіральнікаў}}",
        "pageinfo-redirects-name": "Колькасць перасылак на гэту старонку",
        "exif-urgency-low": "Нізкая ($1)",
        "exif-urgency-high": "Высокая ($1)",
        "exif-urgency-other": "Вызначаны карыстальнікам прыярытэт ($1)",
-       "watchlistall2": "усе",
        "namespacesall": "усе",
        "monthsall": "усе",
        "confirmemail": "Пацвердзіць адрас эл.пошты",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|уклаў|уклала}} новую версію $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|уклаў|уклала}} $3",
        "rightsnone": "(няма)",
+       "revdelete-summary": "тлумачэнне праўкі",
        "feedback-bugornote": "Калі вы гатовыя падрабязна апісаць тэхнічную праблему, калі ласка, [$1 паведаміце пра памылку].\nУ адваротным выпадку вы можаце выкарыстоўваць гэтую простую форму. Ваш каментар будзе дададзены на старонку «[$3 $2]» разам з вашым імем удзельніка і выкарыстоўваемым браўзерам.",
        "feedback-subject": "Тэма:",
        "feedback-message": "Паведамленне",
index a2afa90..fe7d7ad 100644 (file)
@@ -22,7 +22,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Gazimagomedov",
-                       "StanProg"
+                       "StanProg",
+                       "Bjankuloski06"
                ]
        },
        "tog-underline": "Подчертаване на препратките:",
        "permalink": "Постоянна препратка",
        "print": "Печат",
        "view": "Преглед",
+       "view-foreign": "Преглед на $1",
        "edit": "Редактиране",
        "edit-local": "Редактиране на локалното описание",
        "create": "Създаване",
        "jumptonavigation": "навигация",
        "jumptosearch": "търсене",
        "view-pool-error": "Съжаляваме, но сървърите в момента са претоварени.\nТвърде много потребители се опитват да отворят тази страница.\nМоля, изчакайте малко преди отново да пробвате да отворите страницата.\n\n$1",
+       "generic-pool-error": "Съжаляваме, но сървърите в момента са претоварени.\nТвърде много потребители се опитват да отворят тази страница.\nМоля, изчакайте малко преди отново да пробвате да отворите страницата.",
        "pool-timeout": "Изтичане на времето за заключване на страницата",
        "pool-queuefull": "Опашката за заявки е пълна",
        "pool-errorunknown": "Непозната грешка",
        "badarticleerror": "Действието не може да се изпълни върху страницата.",
        "cannotdelete": "Указаната страница или файл \"$1\" не можа да бъде изтрит(а). Възможно е вече да е бил(а) изтрит(а) от някой друг.",
        "cannotdelete-title": "Страницата „$1“ не може да бъде изтрита",
+       "delete-hook-aborted": "Изтриването беше прекъснато от кука.\nНе беше посочена причина за това.",
        "no-null-revision": "Не може да бъде създадена празна версия на страницата „$1“",
        "badtitle": "Невалидно заглавие",
        "badtitletext": "Желаното заглавие на страница е невалидно, празно или неправилна препратка към друго уики. Възможно е да съдържа знаци, които не са позволени в заглавия.",
        "titleprotected": "Тази страница е била защитена срещу създаване от [[User:$1|$1]].\nПосочената причина е ''$2''.",
        "filereadonlyerror": "Файлът „$1“ не може да бъде променен, тъй като файловото хранилище „$2“ е в режим само за четене.\n\nАдминистраторът, който го е заключил, е посочил следната причина: „$3“.",
        "invalidtitle-knownnamespace": "Невалидно заглавие с именно пространство $2\" и текст \"$3\"",
+       "invalidtitle-unknownnamespace": "Невалидно заглавие с неразпознато именно пространство номер $1 и текст „$2“",
        "exception-nologin": "Не сте влезли",
-       "exception-nologin-text": "Ð\97а Ð´Ð¾Ñ\81Ñ\8aп Ð´Ð¾ Ð¶ÐµÐ»Ð°Ð½Ð°Ñ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¸Ð»Ð¸ Ð´ÐµÐ¹Ñ\81Ñ\82вие Ñ\83икиÑ\82о Ð¸Ð·Ð¸Ñ\81ква [[Special:Userlogin|влизане Ð² Ñ\81иÑ\81Ñ\82емаÑ\82а]].",
+       "exception-nologin-text": "Ð\97а Ð´Ð¾Ñ\81Ñ\82Ñ\8aп Ð´Ð¾ Ð¸Ð·Ð±Ñ\80аноÑ\82о Ð´ÐµÐ¹Ñ\81Ñ\82вие Ð¸Ð»Ð¸ Ñ\81Ñ\82Ñ\80аниÑ\86а Ðµ Ð½ÐµÐ¾Ð±Ñ\85одимо Ð²Ð»Ð¸Ð·Ð°Ð½Ðµ Ð² Ñ\81иÑ\81Ñ\82емаÑ\82а.",
        "exception-nologin-text-manual": "За достъп до избраното действие или страница е необходимо $1 в системата.",
        "virus-badscanner": "Лоша конфигурация: непознат скенер за вируси: ''$1''",
        "virus-scanfailed": "сканирането не сполучи (код $1)",
        "passwordreset-emailsent-capture": "По-долу е показано електронното писмо за възстановяване на паролата, което беше изпратено.",
        "passwordreset-emailerror-capture": "По-долу е показано създадено електронно писмо за възстановяване на паролата, което не беше изпратено на {{GENDER:$2|потребителя}}: $1",
        "changeemail": "Промяна на адреса за е-поща",
-       "changeemail-header": "Промяна на адреса за е-поща на сметката",
        "changeemail-text": "Попълването на този формуляр ще промени адреса за електронна поща. Необходимо е да се въведе и паролата, за да се потвърди промяната.",
        "changeemail-no-info": "За да достъпвате тази страница директно, необходимо е да влезете в системата.",
        "changeemail-oldemail": "Текущ адрес за е-поща:",
        "changeemail-none": "(няма)",
        "changeemail-password": "Парола за {{SITENAME}}:",
        "changeemail-submit": "Промяна на е-пощата",
-       "changeemail-cancel": "Отказване",
        "resettokens": "Изчистване на маркерите",
        "resettokens-no-tokens": "Няма маркери за изчистване.",
        "resettokens-legend": "Изчистване на маркерите",
        "recreate-moveddeleted-warn": "'''Внимание: Създавате страница, която по-рано вече е била изтрита.'''\n\nОбмислете добре дали е уместно повторното създаване на страницата.\nЗа ваша информация по-долу е посочена причината за предишното изтриване на страницата:",
        "moveddeleted-notice": "Тази страница е била изтрита.\nЗа справка, по-долу са включени извадки от дневниците на изтриванията и преместванията.",
        "log-fulllog": "Преглеждане на пълния дневник",
-       "edit-hook-aborted": "Редакцията беше прекъсната от кука. Не беше посочена причина за това.",
+       "edit-hook-aborted": "Редакцията беше прекъсната от кука.\nНе беше посочена причина за това.",
        "edit-gone-missing": "Страницата не можа да се обнови.\nВероятно междувременно е била изтрита.",
        "edit-conflict": "Редакционен конфликт.",
        "edit-no-change": "Редакцията ви беше пренебрегната, защото не съдържа промени по текста.",
        "currentrev": "Текуща версия",
        "currentrev-asof": "Текуща версия към $1",
        "revisionasof": "Версия от $1",
-       "revision-info": "Версия от $1 на $2",
+       "revision-info": "Версия от $1 на {{GENDER:$6|$2}}$7",
        "previousrevision": "←По-стара версия",
        "nextrevision": "По-нова версия→",
        "currentrevisionlink": "преглед на текущата версия",
        "mergehistory-same-destination": "Изходната и целевата страница не могат да съвпадат",
        "mergehistory-reason": "Причина:",
        "mergelog": "Дневник на сливанията",
-       "pagemerge-logentry": "обедини [[$1]] с [[$2]] (до редакция $3)",
        "revertmerge": "Разделяне",
        "mergelogpagetext": "Страницата съдържа списък с последните сливания на редакционни истории.",
        "history-title": "Преглед на историята на „$1“",
        "searchrelated": "свързани",
        "searchall": "всички",
        "showingresults": "Показване на до {{PLURAL:$1|'''1''' резултат|'''$1''' резултата}}, като се започва от номер '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Резултат '''$1''' от '''$3'''|Резултати '''$1 - $2''' от '''$3'''}} за '''$4'''",
        "search-nonefound": "Няма резултати, които да отговарят на заявката.",
        "powersearch-legend": "Разширено търсене",
        "powersearch-ns": "Търсене в именни пространства:",
        "preferences": "Настройки",
        "mypreferences": "Настройки",
        "prefs-edits": "Брой редакции:",
-       "prefsnologintext2": "Ð\9cолÑ\8f, Ð²Ð»ÐµÐ·Ñ\82е Ð·Ð° Ð´Ð° Ð¿Ñ\80омениÑ\82е Ð½Ð°Ñ\81Ñ\82Ñ\80ойкиÑ\82е Ñ\81и.",
+       "prefsnologintext2": "Ð\97а Ð´Ð° Ð¿Ñ\80омениÑ\82е Ð½Ð°Ñ\81Ñ\82Ñ\80ойкиÑ\82е Ñ\81и Ðµ Ð½ÐµÐ¾Ð±Ñ\85одимо Ð´Ð° Ð²Ð»ÐµÐ·ÐµÑ\82е Ð² Ñ\81иÑ\81Ñ\82еаÑ\82а.",
        "prefs-skin": "Облик",
        "skin-preview": "предварителен преглед",
        "datedefault": "Без предпочитание",
        "action-sendemail": "изпращане на е-писма",
        "action-editmywatchlist": "редактиране на списъка ви за наблюдение",
        "action-viewmywatchlist": "преглед на списъка ви за наблюдение",
-       "action-viewmyprivateinfo": "пÑ\80еглед Ð½Ð° Ð»Ð¸Ñ\87наÑ\82а Ñ\81и Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\8f",
+       "action-viewmyprivateinfo": "пÑ\80еглеждане Ð½Ð° Ð»Ð¸Ñ\87ниÑ\82е Ð´Ð°Ð½Ð½Ð¸",
        "action-editmyprivateinfo": "редактиране на личната си информация",
        "nchanges": "$1 {{PLURAL:$1|промяна|промени}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|от последното посещение}}",
        "recentchanges": "Последни промени",
        "recentchanges-legend": "Настройки на списъка с последни промени",
        "recentchanges-summary": "Проследяване на последните промени в {{SITENAME}}.\n\nЛегенда: '''тек''' = разлика на текущата версия,\n'''ист''' = история на версиите",
-       "recentchanges-noresult": "Не са намерени промени за дадения период, отговарящи на критерия.",
+       "recentchanges-noresult": "Не бяха намерени промени за дадения период, които отговарят на критериите.",
        "recentchanges-feed-description": "Проследяване на последните промени в {{SITENAME}}.",
        "recentchanges-label-newpage": "Нова страница",
        "recentchanges-label-minor": "Това е малка промяна",
        "download": "сваляне",
        "unwatchedpages": "Ненаблюдавани страници",
        "listredirects": "Списък на пренасочванията",
+       "listduplicatedfiles": "Списък на повтарящи се файлове",
        "unusedtemplates": "Неизползвани шаблони",
        "unusedtemplatestext": "Тази страница съдържа списък на страниците в именно пространство {{ns:template}}, които не са включени в друга страница. Проверявайте за препратки към отделните шаблони преди да ги изтриете или предложите за изтриване.",
        "unusedtemplateswlh": "други препратки",
        "statistics": "Статистика",
        "statistics-header-pages": "Статистики за страницата",
        "statistics-header-edits": "Статистики за редакциите",
-       "statistics-header-views": "Преглеждане на статистиките",
        "statistics-header-users": "Потребители",
        "statistics-header-hooks": "Други статистики",
        "statistics-articles": "Съдържателни страници",
        "statistics-files": "Качени файлове",
        "statistics-edits": "Брой редакции по страници от началото на {{SITENAME}}",
        "statistics-edits-average": "Средно редакции на страница",
-       "statistics-views-total": "Общо прегледи",
-       "statistics-views-total-desc": "Не са включени прегледите на несъществуващи и специални страници",
-       "statistics-views-peredit": "Прегледи на редакция",
        "statistics-users": "Регистрирани [[Special:ListUsers|потребители]]",
        "statistics-users-active": "Активни потребители",
        "statistics-users-active-desc": "Потребители, направили редакция през {{PLURAL:$1|последния ден|последните $1 дни}}",
-       "statistics-mostpopular": "Най-преглеждани страници",
        "pageswithprop-prop": "Име на свойството:",
        "pageswithprop-submit": "Отваряне",
        "doubleredirects": "Двойни пренасочвания",
        "uncategorizedtemplates": "Некатегоризирани шаблони",
        "unusedcategories": "Неизползвани категории",
        "unusedimages": "Неизползвани файлове",
-       "popularpages": "Най-посещавани страници",
        "wantedcategories": "Желани категории",
        "wantedpages": "Желани страници",
        "wantedpages-badtitle": "Невалидно заглавие в резултатното множество: $1",
        "protectedpages-page": "Страница",
        "protectedpages-expiry": "Срок на изтичане",
        "protectedpages-performer": "Защитаващ потребител",
-       "protectedpages-params": "Параметри на защитата",
+       "protectedpages-params": "Параметри на защита",
        "protectedpages-reason": "Причина",
        "protectedpages-unknown-timestamp": "Неизвестни",
        "protectedpages-unknown-performer": "Неизвестен потребител",
        "querypage-disabled": "Тази специална страница е изключена, защото затруднява производителността на уикито.",
        "booksources": "Източници на книги",
        "booksources-search-legend": "Търсене на информация за книга",
-       "booksources-go": "Отваряне",
        "booksources-text": "По-долу е списъкът от връзки към други сайтове, продаващи нови и използвани книги или имащи повече информация за книгите, които търсите:",
        "booksources-invalid-isbn": "Предоставеният ISBN изглежда е невалиден; проверете за грешки и копирайте от оригиналния източник.",
        "specialloguserlabel": "Изпълнител:",
        "listgrouprights-removegroup-self-all": "Може да премахва всички групи от собствената сметка",
        "listgrouprights-namespaceprotection-namespace": "Именно пространство",
        "trackingcategories": "Категории за проследяване",
-       "trackingcategories-summary": "СÑ\82Ñ\80аниÑ\86аÑ\82а Ð¿Ñ\80едÑ\81Ñ\82авлÑ\8fва Ñ\81пиÑ\81Ñ\8aк Ð½Ð° ÐºÐ°Ñ\82егоÑ\80ии Ð·Ð° Ð¿Ñ\80оÑ\81ледÑ\8fване, ÐºÐ¾Ð¸Ñ\82о Ñ\81е Ð¿Ð¾Ð¿Ñ\8aлваÑ\82 Ð°Ð²Ñ\82омаÑ\82иÑ\87но Ð¾Ñ\82 Ð\9cедиÑ\8fУики Ñ\81оÑ\84Ñ\82Ñ\83еÑ\80. Ð\98менаÑ\82а Ð¸Ð¼ Ð¼Ð¾Ð³Ð°Ñ\82 Ð´Ð° Ñ\81е Ð¿Ñ\80оменÑ\8fÑ\82 Ð¿Ð¾Ñ\81Ñ\80едÑ\81Ñ\82вом Ð¿Ñ\80омÑ\8fна Ð½Ð° съответните системни съобщения в именното пространство {{ns:8}}.",
+       "trackingcategories-summary": "Тази Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81Ñ\8aдÑ\8aÑ\80жа Ñ\81пиÑ\81Ñ\8aк Ð½Ð° ÐºÐ°Ñ\82егоÑ\80ии Ð·Ð° Ð¿Ñ\80оÑ\81ледÑ\8fване, ÐºÐ¾Ð¸Ñ\82о Ñ\81е Ð¿Ð¾Ð¿Ñ\8aлваÑ\82 Ð°Ð²Ñ\82омаÑ\82иÑ\87но Ð¾Ñ\82 Ñ\81оÑ\84Ñ\82Ñ\83еÑ\80а Ð½Ð° Ð\9cедиÑ\8fУики. Ð\98менаÑ\82а Ð¸Ð¼ Ð¼Ð¾Ð³Ð°Ñ\82 Ð´Ð° Ñ\81е Ð¿Ñ\80оменÑ\8fÑ\82 Ñ\87Ñ\80ез съответните системни съобщения в именното пространство {{ns:8}}.",
        "trackingcategories-msg": "Категория за проследяване",
        "trackingcategories-name": "Име на съобщението",
        "trackingcategories-desc": "Критерий за включване на категория",
+       "trackingcategories-nodesc": "Няма налично описание.",
        "trackingcategories-disabled": "Категорията е деактивирана",
        "mailnologin": "Няма електронна поща",
        "mailnologintext": "Необходимо е да [[Special:UserLogin|влезете]] и да посочите валидна електронна поща в [[Special:Preferences|настройките]] си, за да може да пращате писма на други потребители.",
        "watchnologin": "Не сте влезли",
        "addwatch": "Добавяне към списъка за наблюдение",
        "addedwatchtext": "Страницата „'''[[:$1]]'''“ беше добавена към [[Special:Watchlist|списъка ви за наблюдение]].\nНейните бъдещи промени, както и на съответната й дискусионна страница, ще се описват там.",
-       "addedwatchtext-short": "Страница \"$1\" беше добавена към списъка ви за наблюдение.",
+       "addedwatchtext-short": "Страницата „$1“ беше добавена към списъка Ви за наблюдение.",
        "removewatch": "Премахване от списъка за наблюдение",
        "removedwatchtext": "Страницата „[[:$1]]“ беше премахната от [[Special:Watchlist|списъка ви за наблюдение]].",
-       "removedwatchtext-short": "Страница \"$1\" беше премахната от списъка ви за наблюдение.",
+       "removedwatchtext-short": "Страницата „$1“ беше премахната от списъка Ви за наблюдение.",
        "watch": "Наблюдение",
        "watchthispage": "Наблюдаване на страницата",
        "unwatch": "Спиране на наблюдение",
        "wlheader-enotif": "Известяването по е-поща е включено.",
        "wlheader-showupdated": "Страниците, които са били променени след последния път, когато сте ги посетили, са показани в '''получер'''.",
        "wlnote": "{{PLURAL:$1|Показана е последната промяна|Показани са последните '''$1''' промени}} през {{PLURAL:$2|последния час|последните '''$2''' часа}}.",
-       "wlshowlast": "Показване на последните $1 часа $2 дни $3",
+       "wlshowlast": "Показване на последните $1 часа $2 дни",
        "watchlist-options": "Опции на списъка за наблюдение",
        "watching": "Наблюдение…",
        "unwatching": "Спиране на наблюдение…",
        "contributions-title": "Потребителски приноси за $1",
        "mycontris": "Приноси",
        "contribsub2": "За {{GENDER:$3|$1}} ($2)",
-       "contributions-userdoesnotexist": "Няма регистрирана потребителска сметка за \"$1\".",
+       "contributions-userdoesnotexist": "Няма регистрирана потребителска сметка за „$1“.",
        "nocontribs": "Не са намерени промени, отговарящи на критерия.",
        "uctop": "(текуща)",
        "month": "Месец:",
        "ipb-unblock-addr": "Отблокиране на $1",
        "ipb-unblock": "Отблокиране на потребителско име IP-адрес",
        "ipb-blocklist": "Преглед на текущите блокирания",
-       "ipb-blocklist-contribs": "Приноси на $1",
+       "ipb-blocklist-contribs": "Приноси на {{GENDER:$1|$1}}",
        "unblockip": "Отблокиране на потребител",
        "unblockiptext": "Използвайте долния формуляр, за да възстановите правото на писане на по-рано блокиран IP-адрес или потребител.",
        "ipusubmit": "Сваляне на блокирането",
        "import-error-create": "Страницата „$1“ не беше внесена, тъй като нямате права да я създадете.",
        "import-error-interwiki": "Страницата „$1“ не беше внесена, тъй като името ѝ е запазено за външно свързване (междууики).",
        "import-error-special": "Страницата „$1“ не беше внесена, тъй като принадлежи към специално именно пространство, което не позволява страници.",
-       "import-error-invalid": "Страницата „$1“ не беше внесена, тъй като името ѝ е невалидно.",
+       "import-error-invalid": "Страницата „$1“ не беше внесена, тъй като името към което трябваше да бъде внесена е невалидно на това уики.",
        "import-rootpage-invalid": "Посочената основна страница е с невалидно заглавие.",
        "import-rootpage-nosubpage": "Именното пространство „$1“ на основната страница не позволява създаването на подстраници.",
        "importlogpage": "Дневник на внасянията",
        "importlogpagetext": "Административни внасяния на страници с редакционна история от други уикита.",
        "import-logentry-upload": "[[$1]] беше внесена от файл",
-       "import-logentry-upload-detail": "{{PLURAL:$1|една версия|$1 версии}}",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|версия беше внесена|версии бяха внесени}}",
        "import-logentry-interwiki": "$1 беше внесена от друго уики",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|една версия|$1 версии}} на $2 бяха внесени",
        "javascripttest": "Тестване на JavaScript",
        "spam_reverting": "Връщане на последната версия, несъдържаща препратки към $1",
        "spam_blanking": "Всички версии, съдържащи препратки към $1, изчистване",
        "spam_deleting": "Всички версии съдържат препратки към $1, изтриване",
-       "simpleantispam-label": "Проверка за спам.\nНеобходимо е да '''НЕ''' попълвате това поле!",
+       "simpleantispam-label": "Проверка за спам.\nНеобходимо е да <strong>НЕ</strong> попълвате това поле!",
        "pageinfo-title": "Информация за \"$1\"",
        "pageinfo-not-current": "За съжаление тази информация не може да бъде предоставена за стари версии.",
        "pageinfo-header-basic": "Основна информация",
        "pageinfo-length": "Дължина на страницата (в байтове)",
        "pageinfo-article-id": "Номер на страницата",
        "pageinfo-language": "Език на съдържанието на страницата",
-       "pageinfo-robot-policy": "Статут на страницата в търсачките",
-       "pageinfo-robot-index": "Индексируема",
-       "pageinfo-robot-noindex": "Неиндексируема",
-       "pageinfo-views": "Брой прегледи",
+       "pageinfo-robot-policy": "Индексиране от роботи",
+       "pageinfo-robot-index": "Позволено",
+       "pageinfo-robot-noindex": "Непозволено",
        "pageinfo-watchers": "Брой наблюдаващи страницата",
        "pageinfo-few-watchers": "Под $1 {{PLURAL:$1|наблюдаващ|наблюдаващи}}",
        "pageinfo-redirects-name": "Брой пренасочвания към тази страница",
        "exif-originalimageheight": "Височина на изображението преди намаляването",
        "exif-originalimagewidth": "Ширина на изображението преди намаляването",
        "exif-compression-1": "Некомпресиран",
-       "exif-copyrighted-true": "С авторски права",
+       "exif-copyrighted-true": "Ð\97аÑ\88Ñ\82иÑ\82ено Ñ\81о авторски права",
        "exif-copyrighted-false": "Статута на авторските права не е указан",
        "exif-unknowndate": "Неизвестна дата",
        "exif-orientation-1": "Нормално",
        "exif-urgency-low": "Ниска ($1)",
        "exif-urgency-high": "Висока ($1)",
        "exif-urgency-other": "Зададен от потребителя приоритет ($1)",
-       "watchlistall2": "всички",
        "namespacesall": "Всички",
        "monthsall": "всички",
        "confirmemail": "Потвърждаване на адрес за електронна поща",
        "logentry-delete-delete": "$1 {{GENDER:$2|изтри}} страницата $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|възстанови}} страницата $3",
        "logentry-suppress-revision": "$1 тайно промени видимостта на {{PLURAL:$5|една версия|$5 версии}} на страницата $3: $4",
-       "logentry-suppress-revision-legacy": "$1 тайно промени видимостта на версиите на страница $3",
+       "logentry-suppress-revision-legacy": "$1 тайно {{GENDER:$2|промени}} видимостта на версиите на страница $3",
        "revdelete-content-hid": "скрито съдържание",
        "revdelete-summary-hid": "скрито резюме на редакцията",
        "revdelete-uname-hid": "скрито потребителско име",
        "logentry-move-move": "$1 {{GENDER:$2|премести}} страница „$3“ като „$4“",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|премести}} страницата „$3“ като „$4“ без пренасочване",
        "logentry-move-move_redir": "$1 {{GENDER:$2|премести}} страницата $3 като $4 (върху пренасочване)",
-       "logentry-move-move_redir-noredirect": "$1 премести върху пренасочване „$3“ като „$4“ без пренасочване",
+       "logentry-move-move_redir-noredirect": "$1 {GENDER:$2|премести}} върху пренасочване $3 като $4 без пренасочване",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|отбеляза}} като патрулирана версия $4 на страницата „$3“",
        "logentry-patrol-patrol-auto": "$1 автоматично {{GENDER:$2|отбеляза}} като патрулирана версия $4 на страницата $3",
        "logentry-newusers-newusers": "Потребителската сметка $1 беше {{GENDER:$2|създадена}}",
        "logentry-newusers-autocreate": "Сметката $1 беше {{GENDER:$2|създадена}} автоматично",
        "logentry-rights-rights": "$1 {{GENDER:$2|промени}} потребителската група на $3 от $4 на $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|промени}} потребителската група на $3",
-       "logentry-rights-autopromote": "\n$1 е автоматично повишен от $4 до $5",
+       "logentry-rights-autopromote": "$1 е автоматично {{GENDER:$2|повишен|повишена}} от $4 до $5",
        "rightsnone": "(никакви)",
+       "revdelete-summary": "резюме",
        "feedback-bugornote": "Ако сте готови подробно да опишете технически проблем, моля [$1 докладвайте го тук].\nВ противен случай, можете да използвате лесния формуляр по-долу. Коментарът ви ще бъде добавен към страницата \"[$3 $2]\", наред с вашето потребителско име.",
        "feedback-subject": "Тема:",
        "feedback-message": "Съобщение:",
        "pagelang-language": "Език",
        "pagelang-use-default": "Използване на езика по подразбиране",
        "pagelang-select-lang": "Избиране на език",
-       "right-pagelang": "Променяне на езика на страница",
-       "action-pagelang": "Ð\9fÑ\80оменÑ\8fне на езика на страницата",
+       "right-pagelang": "Промяна езика на страница",
+       "action-pagelang": "пÑ\80омÑ\8fна езика на страницата",
        "log-name-pagelang": "Дневник на езиковите промени",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (включено)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''изключено''')"
index 7781475..86d2168 100644 (file)
        "passwordreset-emailsent-capture": "नीचे दिखावल गईल गुप्तशब्द पुनर्स्थापना ई-मेल भेज दिहल गईल बा।",
        "passwordreset-emailerror-capture": "नीचे दिखावल गईल गुप्तशब्द पुनर्स्थापना ई-मेल उत्पन्न करल गईल रहल, परंतु उ के {{GENDER:$2|सदस्य}} के भेजे के क्रिया असफल रहल।\nत्रुटि: $1",
        "changeemail": "ई-मेल पता बदलीं",
-       "changeemail-header": "खाता के ई-मेल पता बदलीं",
        "changeemail-text": "आपन ई-मेल पता बदले खातिर इ फॉर्म के भरीं। इ बदलाव के पुष्टे करे खातिर रउआ आपन गुप्तशब्द पुनः लिखे के पड़ी।",
        "changeemail-no-info": "इ पन्ना के सिधे प्रयोग करे खातिर रउआ पहिले खाता में प्रवेश करे के पड़ी।",
        "changeemail-oldemail": "वर्तमान ई-मेल पता:",
        "changeemail-none": "(कउनो नाहीं)",
        "changeemail-password": "राउर {{SITENAME}} गुप्तशब्द:",
        "changeemail-submit": "ई-मेल बदलीं",
-       "changeemail-cancel": "रद्द करीं",
        "changeemail-throttled": "रउआ हाले में कईयन बार खाता में प्रवेश करे के कोशिश कर चुकल बानी।\nकृपया $1 प्रतिक्षा करला के बाद फिर से प्रयास करब।",
        "resettokens": "टोकन रीसेट करीं",
        "resettokens-text": "जौन टोकन राउर खाता से सम्बद्ध कुछ विशिष्ट व्यक्तिगत जानकारी प्रदान करेला, आप उ के अहिजा रीसेट कर सकत बानी।\n\nयदि रउआ ई के गलती से केहू के दिखा देले बानी या फिर राउर खाता हैक हो गईल बा त रउआ ई के रीसेट कर देवे के चाहीं।",
        "version-no-ext-name": "[अज्ञात नाम]",
        "specialpages": "ख़ाश पन्ना",
        "revdelete-restricted": "प्रबंधक पर प्रतिबंध लागू",
-       "revdelete-unrestricted": "प्रबंधक पर से प्रतिबंध समाप्त"
+       "revdelete-unrestricted": "प्रबंधक पर से प्रतिबंध समाप्त",
+       "revdelete-summary": "सारांश संपादन"
 }
index 7e1934c..6a6d53a 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Iketsi",
-            "Sotiale",
-            "Ushanka"
-        ]
-    },
-    "underline-always": "Oltaem",
-    "underline-never": "Neva",
-    "sunday": "Sande",
-    "monday": "Mande",
-    "tuesday": "Tusde",
-    "wednesday": "Wenesde",
-    "thursday": "Tosde",
-    "friday": "Fraede",
-    "saturday": "Sarede",
-    "sun": "San",
-    "mon": "Man",
-    "tue": "Tu",
-    "wed": "Wen",
-    "thu": "To",
-    "fri": "Frae",
-    "sat": "Sar",
-    "january": "Januware",
-    "february": "Februari",
-    "march": "Maj",
-    "april": "Epril",
-    "may_long": "Mei",
-    "june": "Jun",
-    "july": "Julae",
-    "august": "Ogis",
-    "september": "Septemba",
-    "october": "Oktoba",
-    "november": "Novemba",
-    "december": "Desemba",
-    "january-gen": "Januware",
-    "february-gen": "Februari",
-    "march-gen": "Maj",
-    "april-gen": "Epril",
-    "may-gen": "Mei",
-    "june-gen": "Jun",
-    "july-gen": "Julae",
-    "august-gen": "Ogis",
-    "september-gen": "Septemba",
-    "october-gen": "Oktoba",
-    "november-gen": "Novemba",
-    "december-gen": "Desemba",
-    "mar": "Maj",
-    "apr": "Epr",
-    "may": "Mei",
-    "aug": "Ogis",
-    "oct": "Okt",
-    "dec": "Des",
-    "mypage": "Pej blong mi",
-    "mytalk": "Tingting blong mi",
-    "and": "&#32;mo",
-    "qbedit": "Jenisim hem",
-    "qbpageoptions": "Pej ia",
-    "qbmyoptions": "Ol pej blong mi",
-    "vector-action-move": "Muv",
-    "vector-view-history": "Lukluk histri",
-    "vector-view-view": "Rid",
-    "search": "Faenem samting",
-    "history": "Pej histri",
-    "history_short": "Histri",
-    "edit": "Jenisim hem",
-    "newpage": "Mekem niu pej",
-    "talkpagelinktext": "Toktok",
-    "specialpage": "Spesel Pej",
-    "talk": "Tingting",
-    "mainpage": "Nambawan Pej",
-    "mainpage-description": "Nambawan Pej",
-    "portal": "Haus blong toktok‎",
-    "portal-url": "Project:Haus blong toktok‎",
-    "retrievedfrom": "Kam long \"$1\"",
-    "editsection": "jenisim hem",
-    "editold": "jenisim hem",
-    "red-link-title": "$1 (pej i no stap)",
-    "nstab-main": "Atikel",
-    "nstab-special": "Spesel pej",
-    "nstab-project": "Projek pej",
-    "minoredit": "Mi bin mekem wan smol jenis",
-    "servertime": "Taem blong server",
-    "recentchanges": "Niu jenis",
-    "listfiles_name": "Nem",
-    "shortpages": "Ol smol pej",
-    "longpages": "Ol big pej",
-    "newpages": "Ol niu pej",
-    "allarticles": "Olgeta atikel",
-    "emailfrom": "Kam long",
-    "emailto": "Go long:",
-    "year": "Yia:",
-    "sp-contributions-talk": "toktok",
-    "move-page-legend": "Muvum pej",
-    "movearticle": "Muvum pej:",
-    "allmessagesname": "Nem",
-    "tooltip-pt-mytalk": "Pej blong tingting blong mi",
-    "tooltip-p-logo": "Nambawan Pej",
-    "tooltip-n-mainpage": "Go long Nambawan Pej",
-    "tooltip-minoredit": "Em i stap wan smol jenis",
-    "showhidebots": "($1 bot)",
-    "exif-imagedescription": "Nem blong pikta",
-    "exif-exposuretime-format": "$1 sek. ($2)",
-    "watchlistall2": "olgeta",
-    "namespacesall": "olgeta",
-    "monthsall": "olgeta",
-    "table_pager_first": "Nambawan pej",
-    "autosumm-new": "Niu pej: $1",
-    "specialpages": "Spesel pej"
+       "@metadata": {
+               "authors": [
+                       "Iketsi",
+                       "Sotiale",
+                       "Ushanka"
+               ]
+       },
+       "underline-always": "Oltaem",
+       "underline-never": "Neva",
+       "sunday": "Sande",
+       "monday": "Mande",
+       "tuesday": "Tusde",
+       "wednesday": "Wenesde",
+       "thursday": "Tosde",
+       "friday": "Fraede",
+       "saturday": "Sarede",
+       "sun": "San",
+       "mon": "Man",
+       "tue": "Tu",
+       "wed": "Wen",
+       "thu": "To",
+       "fri": "Frae",
+       "sat": "Sar",
+       "january": "Januware",
+       "february": "Februari",
+       "march": "Maj",
+       "april": "Epril",
+       "may_long": "Mei",
+       "june": "Jun",
+       "july": "Julae",
+       "august": "Ogis",
+       "september": "Septemba",
+       "october": "Oktoba",
+       "november": "Novemba",
+       "december": "Desemba",
+       "january-gen": "Januware",
+       "february-gen": "Februari",
+       "march-gen": "Maj",
+       "april-gen": "Epril",
+       "may-gen": "Mei",
+       "june-gen": "Jun",
+       "july-gen": "Julae",
+       "august-gen": "Ogis",
+       "september-gen": "Septemba",
+       "october-gen": "Oktoba",
+       "november-gen": "Novemba",
+       "december-gen": "Desemba",
+       "mar": "Maj",
+       "apr": "Epr",
+       "may": "Mei",
+       "aug": "Ogis",
+       "oct": "Okt",
+       "dec": "Des",
+       "mypage": "Pej blong mi",
+       "mytalk": "Tingting blong mi",
+       "and": "&#32;mo",
+       "qbedit": "Jenisim hem",
+       "qbpageoptions": "Pej ia",
+       "qbmyoptions": "Ol pej blong mi",
+       "search": "Faenem samting",
+       "history": "Pej histri",
+       "history_short": "Histri",
+       "edit": "Jenisim hem",
+       "newpage": "Mekem niu pej",
+       "talkpagelinktext": "Toktok",
+       "specialpage": "Spesel Pej",
+       "talk": "Tingting",
+       "mainpage": "Nambawan Pej",
+       "mainpage-description": "Nambawan Pej",
+       "portal": "Haus blong toktok‎",
+       "portal-url": "Project:Haus blong toktok‎",
+       "retrievedfrom": "Kam long \"$1\"",
+       "editsection": "jenisim hem",
+       "editold": "jenisim hem",
+       "red-link-title": "$1 (pej i no stap)",
+       "nstab-main": "Atikel",
+       "nstab-special": "Spesel pej",
+       "nstab-project": "Projek pej",
+       "minoredit": "Mi bin mekem wan smol jenis",
+       "servertime": "Taem blong server",
+       "recentchanges": "Niu jenis",
+       "listfiles_name": "Nem",
+       "shortpages": "Ol smol pej",
+       "longpages": "Ol big pej",
+       "newpages": "Ol niu pej",
+       "allarticles": "Olgeta atikel",
+       "emailfrom": "Kam long",
+       "emailto": "Go long:",
+       "year": "Yia:",
+       "sp-contributions-talk": "toktok",
+       "move-page-legend": "Muvum pej",
+       "movearticle": "Muvum pej:",
+       "allmessagesname": "Nem",
+       "tooltip-pt-mytalk": "Pej blong tingting blong mi",
+       "tooltip-p-logo": "Nambawan Pej",
+       "tooltip-n-mainpage": "Go long Nambawan Pej",
+       "tooltip-minoredit": "Em i stap wan smol jenis",
+       "exif-imagedescription": "Nem blong pikta",
+       "exif-exposuretime-format": "$1 sek. ($2)",
+       "namespacesall": "olgeta",
+       "monthsall": "olgeta",
+       "table_pager_first": "Nambawan pej",
+       "autosumm-new": "Niu pej: $1",
+       "specialpages": "Spesel pej"
 }
index 328fcd2..42d6e0a 100644 (file)
        "passwordreset-emailsent-capture": "Sabuting suril pangingat sudah dikirim, nangkaya ditampaiakan di bawah.",
        "passwordreset-emailerror-capture": "Suril paugingat, nang ditampaikan di bawah, hudah dihasilakan, tagal gagal mangirimakannya ka pamakai: $1",
        "changeemail": "Ganti alamat suril",
-       "changeemail-header": "Ganti akun alamat suril",
        "changeemail-text": "Manuntungakan purmulir ngini hagan mangganti alamat suril Pian. Pian akan parlu mamasukakan katasunduk Pian hagan mayakinakan paubahan ngini.",
        "changeemail-no-info": "Pian musti babuat log hagan babuat ka tungkaran ngini langsung.",
        "changeemail-oldemail": "Alamat suril wayah ni:",
        "changeemail-none": "(kadada)",
        "changeemail-password": "Sandi {{SITENAME}} Pian:",
        "changeemail-submit": "Ganti suril",
-       "changeemail-cancel": "Walangi",
        "bold_sample": "Naskah kandal",
        "bold_tip": "Naskah kandal",
        "italic_sample": "Naskah hiring",
        "mergehistory-same-destination": "Tungkaran-tungkaran asal mula wan tatuju kada kawa sama",
        "mergehistory-reason": "Alasan:",
        "mergelog": "Log panggabungan",
-       "pagemerge-logentry": "Sudah digabungakan [[$1]] ka dalam [[$2]] (ralatan-ralatan sampai $3)",
        "revertmerge": "Walang panggabungan",
        "mergelogpagetext": "Di bawah adalah daptar nang paling hanyar panggabungan matan sabuah tungkaran halam ka dalam nang lain.",
        "history-title": "Ralatan halam matan ''$1''",
        "searchrelated": "bakulaan",
        "searchall": "samunyaan",
        "showingresults": "Di bawah ngini ditampaiakan hingga {{PLURAL:$1|'''1''' kulihan|'''$1''' kukulihan}}, dimulai matan #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Kulihan '''$1''' matan '''$3'''|Kukulihan '''$1 - $2''' matan '''$3'''}} gasan '''$4'''",
        "search-nonefound": "Kadada kulihan nang pas awan parmintaan.",
        "powersearch-legend": "Panggagaian mahir",
        "powersearch-ns": "Manggagai di ngaran kamar:",
        "statistics": "Statistik",
        "statistics-header-pages": "Statistik tungkaran",
        "statistics-header-edits": "Statistik babakan",
-       "statistics-header-views": "Statistik panampaian",
        "statistics-header-users": "Statistik pamuruk",
        "statistics-header-hooks": "Statistik lainnya",
        "statistics-articles": "Tungkaran isi",
        "statistics-files": "Barakas nang dihunggahakan",
        "statistics-edits": "Jumlah babakan tumatan {{SITENAME}} dimulai",
        "statistics-edits-average": "Rata-rata babakan par tungkaran",
-       "statistics-views-total": "Jumlah panampaian tungkaran",
-       "statistics-views-total-desc": "Tilik ka tutungkaran nang kadada wan tungkaran istimiwa kada tamasuk",
-       "statistics-views-peredit": "Titiringan par babakan",
        "statistics-users": "Jumlah [[Special:ListUsers|pamuruk tadaptar]]",
        "statistics-users-active": "Jumlah pamuruk aktip",
        "statistics-users-active-desc": "Pamuruk nang sudah malakukan suatu aksi dalam {{PLURAL:$1|sahari|$1 hari}} tauncit.",
-       "statistics-mostpopular": "Tungkaran nang paling banyak ditampaiakan",
        "doubleredirects": "Paugahan ganda",
        "doubleredirectstext": "Tungkaran ngini mandaptar tutungkaran nang maugah ka tutungkaran ugahan lain.\nTiap baris mangandung tautan ka ugahan panambaian wan kadua, sasarannya adalah ugahn kadua, nang biasanya tungkaran sasaran \"sabujurnya\", nang ugahan partama tuju.\nMasukan nang <del>Disilangi</del> sudah dibaiki.",
        "double-redirect-fixed-move": "[[$1]] sudah dipindahakan.\nNgini wayah ini sudah diugahakan ka [[$2]].",
        "uncategorizedtemplates": "Citakan nang kada batumbung",
        "unusedcategories": "Tutumbung kada tapuruk",
        "unusedimages": "Barakas nang kada tapakai",
-       "popularpages": "Tutungkaran popular",
        "wantedcategories": "Tutumbung naang dihandaki",
        "wantedpages": "Tutungkaran nang dihandaki",
        "wantedpages-badtitle": "Judul kada sah dalam setelan kulihan: $1",
        "querypage-disabled": "Tungkaran istimiwa ngini dikada-kawakan gasan alasan ginawi.",
        "booksources": "Buku bamula",
        "booksources-search-legend": "Gagai gasan buku asal mula",
-       "booksources-go": "Tulak ka",
        "booksources-text": "Di bawah adalah sabuah daptar tautan ka situs lain nang manjual bubuku hanyar wan bakas, wan jua baisi panjalasan labih pasal bubuku nang Pian ugai:",
        "booksources-invalid-isbn": "ISBN nang dibari mancungul kada sah; pariksa kalua-ai tasalah marekap matan asal-mula aslinya.",
        "specialloguserlabel": "Pamakai:",
        "wlheader-enotif": "Suril pamadahan dipajahi.",
        "wlheader-showupdated": "Tutungkaran nang ba-ubah tumatan ilangan tauncit Pian ditampaiakan dalam '''hurup kandal'''",
        "wlnote": "Di bawah naya adalah {{PLURAL:$1|paubahan|'''$1''' paubahan}} tauncit dalam '''$2''' jam tauncit, par $3, $4.",
-       "wlshowlast": "Tampaiakan $1 jam $2 hari pahabisan $3",
+       "wlshowlast": "Tampaiakan $1 jam $2 hari pahabisan",
        "watchlist-options": "Pilihan daptar itihan",
        "watching": "Maitihi...",
        "unwatching": "Kada jadi maitihi...",
        "import": "Pamasuk tungkaran",
        "importinterwiki": "Impur transwiki",
        "import-interwiki-text": "Pilihi sabuting wiki wan judul tungkaran hagan di-impor.\nTanggal raralatan wan ngaran pambabak akan di partahanakan.\nSamunyaan gawi impur transwiki akan dicatat pada [[Special:Log/import|log impur]].",
-       "import-interwiki-source": "Wiki/tungkaran asal mula:",
        "import-interwiki-history": "Salin sabarataan halam raralatan gasan tungkaran ngini",
        "import-interwiki-templates": "Tamasuk samunyaan cicitakan",
        "import-interwiki-submit": "Impur",
        "pageinfo-robot-policy": "Status masin panggagai",
        "pageinfo-robot-index": "Kawa diindeks",
        "pageinfo-robot-noindex": "Kada kawa diindeks",
-       "pageinfo-views": "Rikinan titiringan",
        "pageinfo-watchers": "Jumlah pa-itih tungkaran",
        "pageinfo-few-watchers": "Kurang matan $1 {{PLURAL:$1|pa-ilang}}",
        "pageinfo-redirects-name": "Paugahan ka tungkaran ngini",
        "exif-urgency-low": "Randah ($1)",
        "exif-urgency-high": "Pancau ($1)",
        "exif-urgency-other": "Ganti-suai utamaan ($1)",
-       "watchlistall2": "samunyaan",
        "namespacesall": "samunyaan",
        "monthsall": "samunyaan",
        "confirmemail": "Yakinakan alamat suril",
        "logentry-newusers-create2": "$1 ma-ulah sabuting akun pamakai $3",
        "logentry-newusers-autocreate": "Akun $1 utumatis diulah",
        "rightsnone": "(kadada)",
+       "revdelete-summary": "Kasimpulan babakan",
        "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:",
index 072e7ab..1725aa7 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Guaka",
-            "לערי ריינהארט"
-        ]
-    },
-    "tog-hideminor": "Yɛlɛmaliw kura fitini dogo",
-    "sunday": "karidon",
-    "monday": "ntɛnɛdon",
-    "tuesday": "taratadon",
-    "wednesday": "arabadon",
-    "thursday": "alamisadon",
-    "friday": "jumadon",
-    "saturday": "sibiridon",
-    "august": "uti",
-    "aug": "uti",
-    "category_header": "Nyɛw cogoya kɔnɔ: \"$1\"",
-    "article": "Nyɛ",
-    "mypage": "N'ka nyɛ",
-    "mytalk": "N'ka baronyɛ",
-    "and": "&#32;ani",
-    "qbfind": "Nyini",
-    "qbedit": "Yɛlɛma",
-    "help": "Dɛmɛ",
-    "search": "Nyini",
-    "searchbutton": "Nyini",
-    "go": "Taa",
-    "searcharticle": "Taa",
-    "history": "Nyɛka tariku",
-    "history_short": "Tariku",
-    "edit": "yɛlɛma",
-    "editthispage": "Nyɛ nin yɛlɛma",
-    "newpage": "Nyɛ kura",
-    "specialpage": "Nyɛ kɛrɛnkɛrɛnnen",
-    "talk": "Sɔsɔli",
-    "toolbox": "Minanw",
-    "userpage": "Utilisateur ka nyɛ",
-    "imagepage": "Janin ka nyɛ",
-    "otherlanguages": "Kanw wɛrɛ",
-    "jumptosearch": "Nyini",
-    "currentevents": "Kunnafoni",
-    "currentevents-url": "Project:Kunnafoni",
-    "disclaimers": "Kangari",
-    "edithelp": "Dɛmɛ",
-    "mainpage": "Nyɛ fɔlɔ",
-    "mainpage-description": "Nyɛ fɔlɔ",
-    "portal": "Jamaje",
-    "editsection": "yɛlɛma",
-    "hidetoc": "dogo",
-    "nstab-main": "Nyɛ",
-    "nstab-image": "Janin",
-    "nstab-help": "Dɛmɛ",
-    "nstab-category": "Cogoya",
-    "minoredit": "Yɛlɛma fitini.",
-    "watchthis": "Nyɛ tulomajɔ",
-    "newarticle": "(Kura)",
-    "editing": "$1 ka yɛlɛmali",
-    "editingsection": "$1 ka yɛlɛmali (section)",
-    "editingcomment": "$1 ka yɛlɛmali (baro)",
-    "preferences": "Fisayali",
-    "prefs-skin": "Apparence",
-    "hide": "dogo",
-    "file-anchor-link": "Janin",
-    "randompage": "Nyɛ min man ni ja",
-    "popularpages": "Nyɛw les plus consultées",
-    "newpages": "Nyɛw kura",
-    "ancientpages": "Nyɛw les plus anciens",
-    "move": "telun",
-    "movethispage": "Nyɛ telun",
-    "allpages": "Nyɛw bɛɛ",
-    "categories": "Nyɛ ka cogoyaw",
-    "linksearch-ok": "Nyini",
-    "watch": "Tulomajɔ",
-    "watchthispage": "Nyɛ tulomajɔ",
-    "mycontris": "N'ka contributions",
-    "lockconfirm": "Awɔ, je confirme que je souhaite verrouiller la base de données.",
-    "move-page-legend": "Nyɛ telun",
-    "movearticle": "Nyɛ telun",
-    "movepagebtn": "Nyɛ telun",
-    "others": "wɛrɛ",
-    "ilsubmit": "Nyini",
-    "specialpages": "Nyɛw kɛrɛnkɛrɛnnen"
+       "@metadata": {
+               "authors": [
+                       "Guaka",
+                       "לערי ריינהארט",
+                       "Amadouyoro.thiam"
+               ]
+       },
+       "tog-hideminor": "Yɛlɛmaliw kura fitini dogo",
+       "tog-hidepatrolled": "Yɛlɛmaliw kura fitini dogo",
+       "underline-always": "Donko don",
+       "underline-never": "Abada",
+       "sunday": "karidon",
+       "monday": "ntɛnɛdon",
+       "tuesday": "taratadon",
+       "wednesday": "arabadon",
+       "thursday": "alamisadon",
+       "friday": "jumadon",
+       "saturday": "sibiridon",
+       "sun": "Kar",
+       "mon": "Ntɛ",
+       "tue": "Tar",
+       "wed": "Ara",
+       "thu": "Ala",
+       "fri": "Jum",
+       "sat": "sib",
+       "january": "Zanwuyekalo",
+       "february": "Fewuruyekalo",
+       "march": "Marisikalo",
+       "april": "Awirilikalo",
+       "may_long": "Mɛkalo",
+       "june": "Zuwɛnkalo",
+       "july": "Zuluyekalo",
+       "august": "uti",
+       "september": "Sɛtanburukalo",
+       "october": "Ɔkutɔburukalo",
+       "november": "Nowanburukalo",
+       "december": "Desanburukalo",
+       "january-gen": "Zanwuyekalo",
+       "february-gen": "Fewuruyekalo",
+       "march-gen": "Marisikalo",
+       "april-gen": "Awirilikalo",
+       "may-gen": "Mɛkalo",
+       "june-gen": "Zuwɛnkalo",
+       "july-gen": "Zuluyekalo",
+       "august-gen": "Uti",
+       "september-gen": "Sɛtanburukalo",
+       "october-gen": "Ɔkutɔburukalo",
+       "november-gen": "Nowanburukalo",
+       "december-gen": "Desanburukalo",
+       "jan": "Zan",
+       "feb": "Few",
+       "mar": "Mar",
+       "apr": "Awi",
+       "may": "Mɛ",
+       "jun": "Zuw",
+       "jul": "Zul",
+       "aug": "uti",
+       "sep": "Sɛt",
+       "oct": "Ɔku",
+       "nov": "Now",
+       "dec": "Des",
+       "january-date": "Zanwuyekalo $1",
+       "february-date": "Fewuruyekalo $1",
+       "march-date": "Marisikalo $1",
+       "april-date": "Awirilikalo $1",
+       "may-date": "Mɛkalo $1",
+       "june-date": "Zuwɛnkalo $1",
+       "july-date": "Zuluyekalo $1",
+       "august-date": "Utikalo $1",
+       "september-date": "Sɛtanburukalo $1",
+       "october-date": "Ɔkutɔburukalo $1",
+       "november-date": "Nowanburukalo $1",
+       "december-date": "Desanburukalo $1",
+       "category_header": "Nyɛw cogoya kɔnɔ: \"$1\"",
+       "article": "Nyɛ",
+       "cancel": "A bali",
+       "moredotdotdot": "Wɛrɛ",
+       "morenotlisted": "Ni nyɛ té sé ka sôrô",
+       "mypage": "Nyɛ",
+       "mytalk": "N'ka baronyɛ",
+       "navigation": "Nawigation",
+       "and": "&#32;ani",
+       "qbfind": "Nyini",
+       "qbbrowse": "A ɲini",
+       "qbedit": "Yɛlɛma",
+       "qbpageoptions": "Ni nyɛ",
+       "qbmyoptions": "Ne ka nyɛ",
+       "actions": "Kèw",
+       "errorpagetitle": "Fili",
+       "returnto": "Ka seguin $1 la",
+       "tagline": "Ka bô {{SITITƆGƆ}}",
+       "help": "Dɛmɛ",
+       "search": "Nyini",
+       "searchbutton": "Nyini",
+       "go": "Taa",
+       "searcharticle": "Taa",
+       "history": "Nyɛka tariku",
+       "history_short": "Tariku",
+       "updatedmarker": "A yailai mara kabri ne ka nali laban",
+       "print": "A kɛ papiye kan",
+       "view": "Ayé",
+       "view-foreign": "Yé $1",
+       "edit": "yɛlɛma",
+       "edit-local": "KounafƆni yailai ma",
+       "create": "Da",
+       "create-local": "Kounafɔni fara a kan",
+       "editthispage": "Nyɛ nin yɛlɛma",
+       "create-this-page": "Da ni nyɛ",
+       "delete": "A la tounou",
+       "deletethispage": "Ni nyɛ latounou",
+       "undeletethispage": "Ni nyɛ ka latounouni bô a man",
+       "protect": "Kôlôchi",
+       "protect_change": "Yailaima",
+       "protectthispage": "Ni nyɛ kôlôchi",
+       "unprotect": "Kôlôchili yailaima",
+       "unprotectthispage": "Ni nyɛ ka kôlôchili yailaima",
+       "newpage": "Nyɛ kura",
+       "talkpage": "Baro ni  nyɛ kan",
+       "talkpagelinktext": "N'ka baronyɛ",
+       "specialpage": "Nyɛ kɛrɛnkɛrɛnnen",
+       "personaltools": "Ne ka minɛnw",
+       "articlepage": "Nyɛ kònòna finw yé",
+       "talk": "Sɔsɔli",
+       "views": "Yéw",
+       "toolbox": "Minanw",
+       "userpage": "Utilisateur ka nyɛ",
+       "imagepage": "Janin ka nyɛ",
+       "viewhelppage": "Dɛmɛn ka nyɛ",
+       "viewtalkpage": "Baro yé",
+       "otherlanguages": "Kanw wɛrɛ",
+       "jumptonavigation": "Nawigation",
+       "jumptosearch": "Nyini",
+       "pool-timeout": "Makônôni kouma tèmènan",
+       "pool-errorunknown": "Fili",
+       "aboutsite": "Ka bô {{SITITƆGƆ}}",
+       "currentevents": "Kunnafoni",
+       "currentevents-url": "Project:Kunnafoni",
+       "disclaimers": "Kangari",
+       "edithelp": "Dɛmɛ",
+       "mainpage": "Nyɛ fɔlɔ",
+       "mainpage-description": "Nyɛ fɔlɔ",
+       "portal": "Jamaje",
+       "ok": "O bɛ bɛn",
+       "editsection": "yɛlɛma",
+       "editold": "yɛlɛma",
+       "viewsourceold": "A bôyôrô yé",
+       "editlink": "yɛlɛma",
+       "viewsourcelink": "A bôyôrô yé",
+       "hidetoc": "dogo",
+       "nstab-main": "Nyɛ",
+       "nstab-image": "Janin",
+       "nstab-help": "Dɛmɛ",
+       "nstab-category": "Cogoya",
+       "minoredit": "Yɛlɛma fitini.",
+       "watchthis": "Nyɛ tulomajɔ",
+       "newarticle": "(Kura)",
+       "editing": "$1 ka yɛlɛmali",
+       "editingsection": "$1 ka yɛlɛmali (section)",
+       "editingcomment": "$1 ka yɛlɛmali (baro)",
+       "preferences": "Fisayali",
+       "prefs-skin": "Apparence",
+       "hide": "dogo",
+       "file-anchor-link": "Janin",
+       "randompage": "Nyɛ min man ni ja",
+       "newpages": "Nyɛw kura",
+       "ancientpages": "Nyɛw les plus anciens",
+       "move": "telun",
+       "movethispage": "Nyɛ telun",
+       "allpages": "Nyɛw bɛɛ",
+       "categories": "Nyɛ ka cogoyaw",
+       "linksearch-ok": "Nyini",
+       "watch": "Tulomajɔ",
+       "watchthispage": "Nyɛ tulomajɔ",
+       "mycontris": "N'ka contributions",
+       "lockconfirm": "Awɔ, je confirme que je souhaite verrouiller la base de données.",
+       "move-page-legend": "Nyɛ telun",
+       "movearticle": "Nyɛ telun",
+       "movepagebtn": "Nyɛ telun",
+       "others": "wɛrɛ",
+       "ilsubmit": "Nyini",
+       "specialpages": "Nyɛw kɛrɛnkɛrɛnnen"
 }
index 6a75312..3c29c24 100644 (file)
@@ -38,6 +38,7 @@
        "tog-watchdefault": "আমার সম্পাদিত পাতা এবং ফাইলগুলো আমার নজরতালিকায় যোগ করা হোক",
        "tog-watchmoves": "আমার স্থানান্তরিত পাতা এবং ফাইলগুলো আমার নজরতালিকায় যোগ করা হোক",
        "tog-watchdeletion": "আমার অপসারিত পাতা এবং ফাইলগুলো আমার নজর তালিকায় যোগ করা হোক",
+       "tog-watchrollback": "আমার দ্বারা রোলব্যাক করা পাতা আমার নজরতালিকায় যোগ করা হোক",
        "tog-minordefault": "শুরুতেই সব সম্পাদনাকে অনুল্লেখ্য বলে চিহ্নিত করা হোক",
        "tog-previewontop": "সম্পাদনা বাক্সের আগে প্রাকদর্শন দেখানো হোক",
        "tog-previewonfirst": "প্রথম সম্পাদনার ক্ষেত্রে প্রাকদর্শন দেখানো হোক",
        "otherlanguages": "অন্যান্য ভাষাসমূহ",
        "redirectedfrom": "($1 থেকে ঘুরে এসেছে)",
        "redirectpagesub": "পুনর্নির্দেশ পাতা",
+       "redirectto": "পুননির্দেশিত হয়েছে:",
        "lastmodifiedat": "এ পাতায় শেষ পরিবর্তন হয়েছিল $2টার সময়, $1 তারিখে।",
        "viewcount": "এ পাতাটি {{PLURAL:$1|বার|$1 বার}} দেখা হয়েছে।",
        "protectedpage": "সুরক্ষিত পাতা",
        "viewsourcetext": "এ পাতাটি আপনি দেখতে এবং উৎসের অনুলিপি নিতে পারবেন:",
        "viewyourtext": "আপনি ' ' ' আপনার সম্পাদনা ' ' ' এই পাতায় দেখতে এবং কপি করতে পারেন:",
        "protectedinterface": "এই পাতার বিষয়বস্তু এই উইকি সফটওয়্যারের একটি ইন্টারফেস বার্তা প্রদান করে, তাই এটিকে সুরক্ষিত করে রাখা হয়েছে।\nসকল উইকির অনুবাদে কোনো ধরনের সংযোজন বা পরিবর্তন করতে, অনুগ্রহ করে মিডিয়াউইকি স্থানীয়করন প্রকল্প [//translatewiki.net/ translatewiki.net] ব্যবহার করুন।",
-       "editinginterface": "'''সতর্কীকরণ:''' আপনি এমন একটি পাতা সম্পাদনা করছেন যা সফটওয়্যারের জন্য ইন্টারফেস টেক্সট প্রদান করে।\nএই পাতাতে সংঘটিত পরিবর্তন এই উইকির ব্যবহারকারীদের ইন্টারফেসে প্রভাব ফেলবে, যা অন্য ব্যবহারকারীরা দেখতে পাবেন।\nসকল উইকির অনুবাদে কোনো ধরনের সংযোজন বা পরিবর্তন করতে, অনুগ্রহ করে মিডিয়াউইকি স্থানীয়করন প্রকল্প [//translatewiki.net/ translatewiki.net] ব্যবহার করুন।",
+       "editinginterface": "<strong>সতর্কীকরণ:</strong> আপনি এমন একটি পাতা সম্পাদনা করছেন যা সফটওয়্যারের জন্য ইন্টারফেস টেক্সট প্রদান করে।\nএই পাতাতে সংঘটিত পরিবর্তন এই উইকির ব্যবহারকারীদের ইন্টারফেসে প্রভাব ফেলবে, যা অন্য ব্যবহারকারীরা দেখতে পাবেন।",
+       "translateinterface": "সকল উইকির জন্য অনুবাদ যোগ বা পরিবর্তন করতে, দয়া করে [//translatewiki.net/ translatewiki.net], মিডিয়াউইকি স্থানীয়করণ প্রকল্প ব্যবহার করুন।",
        "cascadeprotected": "এই পাতাটি সম্পাদনা থেকে সুরক্ষিত, কারণ পাতাটি নিচের {{PLURAL:$1|টি পাতার|টি পাতার}} অন্তর্গত, যে পাতা(গুলি) \"প্রপাতাকার\" (cascading) বৈশিষ্ট্য সহযোগে সুরক্ষিত করা হয়েছে:\n$2",
        "namespaceprotected": "'''$1''' নামস্থানে কোন পাতা আপনার সম্পাদনা করার অনুমতি নেই।",
        "customcssprotected": "আপনার এই সিএসএস পাতাটি সম্পাদনা করার অনুমতি নেই, কারণ এ পাতায় অন্য ব্যবহারকারীর নিজস্ব সেটিংস রয়েছে।",
        "createaccount-text": "কেউ $2-এর জন্য {{SITENAME}}-এ একটি অ্যাকাউন্ট সৃষ্টি করেছেন ($4)। \"$2\"-এর জন্য পাসওয়ার্ড হল \"$3\"। আপনার এখন অ্যাকাউন্টে প্রবেশ করে পাসওয়ার্ড পরিবর্তন করা উচিত।\n\nযদি ভুল করে অ্যাকাউন্টটি সৃষ্টি হয়ে থাকে, তাহলে এই বার্তাটি উপেক্ষা করুন।",
        "login-throttled": "আপনি সাম্প্রতিক সময়ে পরপর বেশ কয়েকবার প্রবেশের চেষ্টা করেছেন।\nপুনরায় চেষ্টা করার পূর্বে অনুগ্রহ করে $1 অপেক্ষা করুন।",
        "login-abort-generic": "আপনার লগইন সফল ছিলো না - বাতিল করা হয়েছে",
+       "login-migrated-generic": "আপনার অ্যাকাউন্ট স্থানান্তরিত করা হয়েছে, এবং আপনার ব্যবহারকারী নাম আর এই উইকিতে বিদ্যমান নয়।",
        "loginlanguagelabel": "ভাষা: $1",
        "suspicious-userlogout": "আপনার প্রস্থানের অনুরোধ বাতিল হয়েছে কারণ অনুমিত যে আপনার ব্রাউজার অসম্পূর্ণ অথবা পূবর্বতী তথ্য প্রেরণ করেছে।",
        "createacct-another-realname-tip": "আসল নাম ঐচ্ছিক।\nআপনি যদি তা দিতে চান, তাহলে তা ব্যবহারকারীকে তাদের কাজের জন্য স্বীকৃতিদানে ব্যবহার করা হবে।",
        "passwordreset-emailsent-capture": "স্মরণ করিয়ে দেয়ার জন্য একটি ইমেইল করা হয়েছে, যা নিচে দেখানো হচ্ছে।",
        "passwordreset-emailerror-capture": "স্মরণ করিয়ে দেয়ার জন্য একটি ইমেইল তৈরী করা হয়েছিল, যা নিচে দেখানো হচ্ছে, তবে $1 {{GENDER:$2|ব্যবহারকারীকে}} এটি পাঠানো যায়নি!",
        "changeemail": "ই-মেইল ঠিকানা পরিবর্তন",
-       "changeemail-header": "অ্যাকাউন্ট ই-মেইল ঠিকানা পরিবর্তন",
        "changeemail-text": "ই-মেইল ঠিকানা পরিবর্তন করতে আপনাকে এই ফরমটি পূরণ করতে হবে। এই পরিবর্তনটি নিশ্চিত করতে আপনার পাসওয়ার্ড প্রদানের প্রয়োজন হবে।",
        "changeemail-no-info": "এই পাতাটিতে সরাসরি প্রবেশাধিকার পেতে আপনাকে অবশ্যই লগইন করতে হবে।",
        "changeemail-oldemail": "বর্তমান ই-মেইল ঠিকানা:",
        "changeemail-none": "(কিছু নাই)",
        "changeemail-password": "আপনার {{SITENAME}} পাসওয়ার্ড:",
        "changeemail-submit": "ই-মেইল পরিবর্তন",
-       "changeemail-cancel": "বাতিল",
        "changeemail-throttled": "আপনি পরপর বেশ কয়েকবার প্রবেশের চেষ্টা করেছেন। পুনরায় চেষ্টা করার পূর্বে অনুগ্রহ করে $1 অপেক্ষা করুন।",
        "resettokens": "রিসেট টোকেন",
        "resettokens-text": "আপনি টোকেন রিসেট করতে পারেন, যা অ্যাকাউন্টের সাথে সম্পর্কিত আপনার ব্যক্তিগত তথ্য দেখার কাজে ব্যবহার করা হয়।",
        "showpreview": "প্রাকদর্শন",
        "showdiff": "পরিবর্তনসমূহ",
        "blankarticle": "<strong>সতর্ক বার্তা:</strong> আপনি একটি খালি পাতা তৈরী করতে যাচ্ছেন।\nআপনি যদি পুনরায় \"{{int:savearticle}}\" বাটন ক্লিক করেন তাহলে, পাতাটি তৈরী হবে যেখানে কোনো তথ্য লেখা নেই।",
-       "anoneditwarning": "আপনি লগ ইন করেননি। এই পাতার সম্পাদনার ইতিহাসে আপনার আইপি সংখ্যা সংরক্ষিত হবে।",
+       "anoneditwarning": "<strong>সতর্কতা:</strong> আপনি বর্তমানে প্রবেশ করেননি। যদি আপনি সম্পাদনা করেন এই পাতার সম্পাদনার ইতিহাসে আপনার আইপি ঠিকানা সার্বজনীনভাবে সংরক্ষিত হবে। যদি আপনি  <strong>[$1 প্রবেশ করেন]</strong> বা  <strong>[$2 একটি অ্যাকাউন্ট তৈরি করেন]</strong>, তাহলে আপনি আপনার আইপি ঠিকানা গোপন রাখতে পারবেন ও অন্যান্য অনেক কিছু সুবিধা পাবেন।",
        "anonpreviewwarning": "আপনি লগ ইন করেননি। এই পাতার সম্পাদনার ইতিহাসে আপনার আইপি সংখ্যা সংরক্ষিত হবে।",
        "missingsummary": "'''খেয়াল করুন''':  আপনি কিন্তু সম্পাদনার সারাংশ দেননি। আবার যদি \"সংরক্ষণ\" বোতামে ক্লিক করেন, তাহলে ঐ সারাংশ বাক্যটি ছাড়াই আপনার সম্পাদনা সংরক্ষিত হবে।",
        "missingcommenttext": "দয়া করে নিচে মন্তব্য যোগ করুন।",
        "content-model-text": "সাধারণ লেখা",
        "content-model-javascript": "জাভাস্ক্রিপ্ট",
        "content-model-css": "সিএসএস",
+       "duplicate-args-category": "টেমপ্লেট আহ্বানে সদৃশ আর্গুমেন্ট ব্যবহার করা পাতা",
+       "duplicate-args-category-desc": "এই পাতায় টেমপ্লেট আহ্বান উপস্থিত রয়েছে যা সদৃশ আর্গুমেন্ট ব্যবহার করেছে, যেমন <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> বা <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>।",
        "expensive-parserfunction-warning": "'''সতর্ক হোন:''' এই পাতাটি অনেক বেশি পরিমাণে এক্সপেনসিভ পার্সার ফাংশন কল রয়েছে।\n\nএটি $2-এর চেয়ে কম পরিমাণ {{PLURAL:$2|কল|কল}} থাকা উচিত, যেখানে মোট কলের সংখ্যা {{PLURAL:$1|বর্তমানে $1|বর্তমানে $1}}।",
        "expensive-parserfunction-category": "অনেক বেশি পরিমাণে এক্সপেনসিভ পার্সার ফাংশন কল থাকা পাতাসমূহ",
        "post-expand-template-inclusion-warning": "'''সতর্ক হোন:''' টেমপ্লেটের ইনক্লুড আকার অনেক বেশি।\nকিছু টেমপ্লেট সংযুক্ত করা নাও যেতে পারে।",
        "mergehistory-same-destination": "উৎস এবং গন্তব্য পাতা একই হতে পারবে না",
        "mergehistory-reason": "কারণ:",
        "mergelog": "একত্রীকরণ লগ",
-       "pagemerge-logentry": "[[$1]]-কে [[$2]]-এ একত্র করা হয়েছে ($3 পর্যন্ত সংশোধনগুলিসহ)",
        "revertmerge": "একত্রীকরণ বাতিল",
        "mergelogpagetext": "নিচে সবচেয়ে সাম্প্রতিক ঘটা এক পাতার ইতিহাসের সাথে অন্য পাতার ইতিহাসের একত্রীকরণের একটি তালিকা দেওয়া হল।",
        "history-title": "\"$1\" এর সংশোধনের ইতিহাস",
        "search-result-category-size": "{{PLURAL:$1 |১টি সদস্য |$1টি সদস্য}} ({{PLURAL:$2 |১টি উপবিষয়শ্রেণী|$2টি উপবিষয়শ্রেণী}}, {{PLURAL:$3 |১টি ফাইল |$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": "#<strong>$2</strong> থেকে #<strong>$3</strong> পরিসীমার মধ্যে {{PLURAL:$1|<strong>১টি</strong> ফলাফল|<strong>$1টি</strong> ফলাফল}} নিচে দেখানো হচ্ছে।",
-       "showingresultsheader": "'''$4''' এর জন্য {{PLURAL:$5|ফলাফল '''$3''' এর '''$1'''|ফলাফলসমূহ '''$3''' এর মধ্যে '''$1 - $2'''}}",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong>-এর মধ্যে <strong>$1</strong>টি ফলাফল|<strong>$3</strong>-এর মধ্যে <strong>$1 - $2</strong>টি ফলাফল}}",
        "search-nonefound": "খোঁজকৃত পাতার সাথে মিলে যায় এমন কোনো ফলাফল নেই।",
        "powersearch-legend": "উন্নত অনুসন্ধান",
        "powersearch-ns": "নামস্থানে অনুসন্ধান করো:",
        "gender-female": "তিনি (মহিলা) উইকি পাতা সম্পাদনা করেন",
        "prefs-help-gender": "সেটিংসের এই পরিবর্তন ঐচ্ছিক।\nসফটওয়্যারে মাধ্যমে লিঙ্গ অনুযায়ী সম্বধনের ক্ষেত্রে এটি ব্যবহৃত হয়।\nএই তথ্য সকলের জন্য উন্মুক্ত থাকেবে।",
        "email": "ই-মেইল",
-       "prefs-help-realname": "আসল নাম দেওয়া অনাবশ্যক। যদি আসল নাম দেন, তবে আপনার কাজের স্বীকৃতি দানে তা ব্যবহার করা হবে।",
+       "prefs-help-realname": "আসল নাম দেওয়া অনাবশ্যক।\nযদি আসল নাম দেন, তবে আপনার কাজের স্বীকৃতি দানে তা ব্যবহার করা হবে।",
        "prefs-help-email": "ইমেইল ঠিকানা ঐচ্ছিক, তবে পাসওয়ার্ড ভুলে গেলে নতুন করে পাসওয়ার্ড নিতে এটির প্রয়োজন হবে।",
        "prefs-help-email-others": "আপনি আপনার পরিচয় প্রকাশ না করেও আপনার ব্যবহারকারী অথবা আলাপ পাতাটির মাধ্যমে অন্যদেরকে আপনার সাথে যোগাযোগ করতে দিতে পারেন।",
        "prefs-help-email-required": "ই-মেইল ঠিকানা আবশ্যক।",
        "right-deletedtext": "অপরাসারিত সংশোধনের অপরাসারিত লেখা এবং পরিবর্তনসমূহ দেখাও",
        "right-browsearchive": "অপসারিত পাতা অনুসন্ধান করো",
        "right-undelete": "পাতাটি পুনরুদ্ধার করুন",
-       "right-suppressrevision": "প্রশাসকদের থেকে লুকানো সংস্করণগুলো রিভিউ এবং রিস্টোর করুন",
+       "right-suppressrevision": "যেকোন ব্যবহারকারী থেকে পাতার নির্দিষ্ট সংশোধন দেখুন, আড়াল করুন এবং অ-আড়াল করুন",
+       "right-viewsuppressed": "সকল ব্যবহারকারীর জন্য লুকিয়াত সংশোধন প্রদর্শন কর",
        "right-suppressionlog": "ব্যক্তিগত লগ দেখাও",
        "right-block": "সম্পাদনা করতে কোনো ব্যবহারকারীকে বাঁধা দাও",
        "right-blockemail": "ই-মেইল পাঠাতে কোনো ব্যবহারকারীকে বাঁধা দাও",
        "largefileserver": "সার্ভারে যতখানি অনুমোদিত তার চেয়ে এই ফাইলের আকার বড়।",
        "emptyfile": "আপনি যে ফাইলটি আপলোড করেছেন, তা খালি মনে হচ্ছে। ফাইলের নামে টাইপিং ত্রুটির কারণে এরকম হতে পারে। অনুগ্রহ করে পরীক্ষা করে দেখুন আপনি আসলেই এই ফাইলটি আপলোড করতে চান কি না।",
        "windows-nonascii-filename": "এই উইকি বিশেষ ক্যারেক্টারসমৃদ্ধ ফাইলের নাম সমর্থন করে না।",
-       "fileexists": "এই নামের একটি ফাইল ইতিমধ্যেই বিদ্যমান অনুগ্রহ করে <strong>[[:$1]]</strong> পরীক্ষা করে দেখুন, যদি আপনি এটি পরিবর্তনের ব্যাপারে নিশ্চিত না হন। [[$1|thumb]]",
+       "fileexists": "এই নামের একটি ফাইল ইতিমধ্যেই বিদ্যমান, অনুগ্রহ করে <strong>[[:$1]]</strong> পরীক্ষা করে দেখুন, যদি আপনি এটি পরিবর্তনের ব্যাপারে নিশ্চিত না হন। [[$1|thumb]]",
        "filepageexists": "এই ফাইলের বর্ণনা পাতা এখানে <strong>[[:$1]]</strong> তৈরী করা হয়েছে, কিন্তু এই নামের কোনো ফাইল নেই।\nআপনার লেখা তথ্যগুলো বর্ণনা পাতায় যোগ করা যাচ্ছে না।\nতথ্যটি সংযোজনের জন্য আপনাকে ম্যানুয়ালী এই পাতাটি সম্পাদনা করতে হবে।\n[[$1|thumb]]",
-       "fileexists-extension": "à¦\8fà¦\95à¦\87 à¦¨à¦¾à¦®à§\87র à¦\86রà§\87à¦\95à¦\9fি à¦«à¦¾à¦\87ল à¦\86à¦\9bà§\87: [[$2|thumb]]\n* à¦\86পলà§\8bড à¦\95রা à¦«à¦¾à¦\87লà§\87র à¦¨à¦¾à¦®: <strong>[[:$1]]</strong>\n* à¦\8fà¦\95à¦\87 à¦¨à¦¾à¦®à§\87 à¦¬à¦°à§\8dতমান à¦«à¦¾à¦\87লà§\87র à¦¨à¦¾à¦®: <strong>[[:$2]]</strong>\nà¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 à¦\8fà¦\95à¦\9fি à¦­à¦¿à¦¨à§\8dন à¦¨à¦¾à¦® à¦ªà¦\9bনà§\8dদ à¦\95রà§\81ন।",
+       "fileexists-extension": "à¦\8fà¦\95à¦\87 à¦¨à¦¾à¦®à§\87র à¦\86রà§\87à¦\95à¦\9fি à¦«à¦¾à¦\87ল à¦\86à¦\9bà§\87: [[$2|thumb]]\n* à¦\86পলà§\8bড à¦\95রা à¦«à¦¾à¦\87লà§\87র à¦¨à¦¾à¦®: <strong>[[:$1]]</strong>\n* à¦\8fà¦\95à¦\87 à¦¨à¦¾à¦®à§\87 à¦¬à¦°à§\8dতমান à¦«à¦¾à¦\87লà§\87র à¦¨à¦¾à¦®: <strong>[[:$2]]</strong>\nà¦\86পনি à¦\95ি à¦\86রà§\8b à¦\8fà¦\95à¦\9fি à¦¸à§\8dবতনà§\8dতà§\8dর à¦¨à¦¾à¦® à¦¬à§\8dযবহার à¦\95রতà§\87 à¦\9aান?",
        "fileexists-thumbnail-yes": "ফাইলটি একটি সংক্ষেপিত আকারের ছবি ''(থাম্বনেইল)'' বলে মনে হচ্ছে। [[$1|thumb]]\nঅনুগ্রহ করে <strong>[[:$1]]</strong> ফাইলটি পরীক্ষা করে দেখুন।\nযদি পরীক্ষাকৃত ফাইলটি একই ছবির মূল আকার হয়, তবে একটি অতিরিক্ত থাম্বনেইল আপলোড করার প্রয়োজন নেই।",
        "file-thumbnail-no": "ফাইলের নামটি <strong>$1</strong> দিয়ে শুরু হয়েছে।\nমনে হচ্ছে এটি একটি সংকুচিত আকারের ছবি  ''(থাম্বনেইল)''।\nআপনার কাছে যদি পূর্ণ রেজোলিউশনের ছবিটি থাকে, তবে সেটি আপলোড করুন, নতুবা অনুগ্রহ করে ফাইলের নামটি পরিবর্তন করুন।",
        "fileexists-forbidden": "এই নামের একটি ফাইল ইতিমধ্যেই বিদ্যমান, এবং এটি প্রতিস্থাপনযোগ্য নয়।\nআপনি যদি এখনো ফাইলটি আপলোড করতে চান, তবে অনুগ্রহপূর্বক পেছনে গিয়ে একটি নতুন নামে ফাইলটি আপলোড করুন।\n[[File:$1|thumb|center|$1]]",
        "nolicense": "কিছুই নির্বাচন করা হয়নি",
        "licenses-edit": "লাইসেন্স অপশন সম্পাদনা করুন",
        "license-nopreview": "(প্রাকদর্শন লভ্য নয়)",
-       "upload_source_url": " (à¦\8fà¦\95à¦\9fি à¦¬à§\88ধ, à¦\89নà§\8dমà§\81à¦\95à§\8dত URL)",
-       "upload_source_file": " (আপনার কম্পিউটারের একটি ফাইল)",
+       "upload_source_url": " (à¦\86পনি à¦\8fà¦\95à¦\9fি à¦¬à§\88ধ, à¦\89নà§\8dমà§\81à¦\95à§\8dত URL à¦¥à§\87à¦\95à§\87 à¦«à¦¾à¦\87ল à¦\9aয়ন à¦\95রà§\87à¦\9bà§\87ন)",
+       "upload_source_file": "(আপনার কম্পিউটারের একটি ফাইল)",
        "listfiles-delete": "অপসারণ",
        "listfiles-summary": "এই বিশেষ পাতাটি আপলোড করা সকল ফাইল প্রদর্শন করে।",
        "listfiles_search_for": "ছবির নাম অনুসন্ধান:",
        "filedelete-maintenance": "রক্ষণাবেক্ষণের সময় ফাইল অপরাসণ এবং পুনরুদ্ধার সাময়িকভাবে নিস্ক্রিয় রয়েছে।",
        "filedelete-maintenance-title": "ফাইলটি অপসারণ করা সম্ভব নয়",
        "mimesearch": "MIME অনুসন্ধান",
-       "mimesearch-summary": "এই পাতার মাধ্যমে MIME-ধরন অনুসারে ফাইলগুলিকে ফিল্টার করা যায়। ইনপুট: contenttype/subtype, যেমন <code>image/jpeg</code>।",
+       "mimesearch-summary": "এই পাতা তাদের MIME-এর ধরণের জন্য ফাইল ফিল্টার করা সক্ষম করে। ইনপুট: contenttype/subtype বা contenttype/*, উদা: <code>image/jpeg</code>।",
        "mimetype": "MIME ধরন:",
        "download": "ডাউনলোড",
        "unwatchedpages": "নজরে না রাখা পাতাগুলি",
        "statistics": "পরিসংখ্যান",
        "statistics-header-pages": "পাতার পরিসংখ্যান",
        "statistics-header-edits": "সম্পাদনার পরিসংখ্যান",
-       "statistics-header-views": "প্রদর্শনের পরিসংখ্যান",
        "statistics-header-users": "ব্যবহারকারীর পরিসংখ্যান",
        "statistics-header-hooks": "অন্য পরিসংখ্যান",
        "statistics-articles": "বিষয়বস্তুর পাতা",
        "statistics-files": "আপলোডকৃত ফাইল",
        "statistics-edits": "{{SITENAME}} চালু করার পর থেকে পাতার সম্পাদনাসমূহ",
        "statistics-edits-average": "প্রতি পাতার গড় সম্পাদনা",
-       "statistics-views-total": "সর্বোমোট প্রদর্শন",
-       "statistics-views-total-desc": "অপসারিত হয়েছে এবং বিশেষ পাতার প্রদর্শন এখানে যোগ করা হয়নি",
-       "statistics-views-peredit": "প্রতি সম্পাদনায় পরিদর্শন",
        "statistics-users": "নিবন্ধিত [[Special:ListUsers|ব্যবহারকারী]]",
        "statistics-users-active": "সক্রিয় ব্যবহারকারী",
        "statistics-users-active-desc": "ব্যবহারকারী যারা বিগত {{PLURAL:$1|দিনে|$1 দিনে}} একটি কাজ করেছেন।",
-       "statistics-mostpopular": "সবচেয়ে বেশী বার দেখা পাতাসমূহ",
        "pageswithprop": "পাতার উপাদান সম্বলিত পৃষ্ঠাসমূহ",
        "pageswithprop-legend": "পাতার উপাদান সম্বলিত পৃষ্ঠাসমূহ",
        "pageswithprop-text": "একটি নির্দিষ্ট পাতার বৈশিষ্ট রয়েছে এমন পাতাসমূহের তালিকা।",
        "uncategorizedtemplates": "যেসব টেমপ্লেটের বিষয়শ্রেণী নেই",
        "unusedcategories": "অব্যবহৃত বিষয়শ্রেণীসমূহ",
        "unusedimages": "অব্যবহৃত ফাইলসমূহ",
-       "popularpages": "জনপ্রিয় পাতাসমূহ",
        "wantedcategories": "বাঞ্ছনীয় বিষয়শ্রেণীগুলি",
        "wantedpages": "বাঞ্ছনীয় পাতাগুলি",
        "wantedpages-badtitle": "ফলাফলে ভুল শিরনাম: $1",
        "wantedfiles": "আবশ্যিক ফাইলগুলো",
        "wantedfiletext-cat": "নিচের ফাইলগুলো ব্যবহৃত হচ্ছে কিন্তু এগুলো অপসারিত হয়েছে। অন্যান্য রিপোজিটরী থেকে ব্যবহৃত ফাইলগুলো এভাবে প্রদর্শিত হতে পারে। এই ধরনের কোন ফাইল খুজে পেলে <del>অপসারণ করুন</del>। এছাড়া অপসারিত হয়েছে এমন ছবির সংযোগ রয়েছে এমন পাতাসমূহের লিংক পাওয়া যাবে এখানে [[:$1]]।",
        "wantedfiletext-nocat": "নিচের ফাইলগুলো ব্যবহৃত হচ্ছে কিন্তু এগুলো অপসারিত হয়েছে। অন্যান্য রিপোজিটরী থেকে ব্যবহৃত ফাইলগুলো এভাবে প্রদর্শিত হতে পারে। এই ধরনের ভূলগুলো শিঘ্রই <del>অপসারিত হবে</del>।",
+       "wantedfiletext-nocat-noforeign": "নিম্নলিখিত ফাইলসমূহ ব্যবহৃত হয়েছে কিন্তু এর অস্তিত্ব নেই।",
        "wantedtemplates": "আবশ্যিক টেম্পলেটগুলো",
        "mostlinked": "যেসব পাতার প্রতি সবচেয়ে বেশি সংযোগ আছে",
        "mostlinkedcategories": "যেসব বিষয়শ্রেণীর প্রতি সবচেয়ে বেশি সংযোগ আছে",
        "pager-older-n": "{{PLURAL:$1|আরও পুরনো ১টি|আরও পুরনো $1টি}}",
        "suppress": "ওভারসাইট",
        "querypage-disabled": "কারিগরি কারণে এই বিশেষ পাতাটি আপাতত বন্ধ রয়েছে।",
+       "apihelp": "এপিআই সাহায্য",
+       "apihelp-no-such-module": "মডিউল \"$1\" পাওয়া যায়নি।",
        "booksources": "বইয়ের উৎস",
        "booksources-search-legend": "বইয়ের উৎসের জন্য অনুসন্ধান করা হোক",
        "booksources-isbn": "আইএসবিএন:",
-       "booksources-go": "চলো",
+       "booksources-search": "অনুসন্ধান",
        "booksources-text": "নতুন ও পুরাতন ব্যবহৃত বই বিক্রি করে, এমন কতগুলি সাইটের সংযোগের তালিকা নিচে দেওয়া হল, যে সাইটগুলিতে আপনার অনুসন্ধানকৃত বইগুলির উপর আরও তথ্য থাকতে পারে:",
        "booksources-invalid-isbn": "উল্লেখিত ISBN সঠিক নয়; অনুগ্রহ করে মূল উৎস থেকে আবার পরীক্ষা করুন।",
        "specialloguserlabel": "সম্পাদক:",
        "trackingcategories": "বিষয়শ্রেণীসমূহ অনুসরণ করা হচ্ছে",
        "trackingcategories-msg": "বিষয়শ্রেণী অনুসরণ করা হচ্ছে",
        "trackingcategories-name": "বার্তা নাম",
+       "broken-file-category-desc": "এই পাতায় একটি ভাঙ্গা ফাইলের লিঙ্ক রয়েছে (একটি ফাইল এম্বেড করার জন্য একটি লিঙ্ক যখন ফাইলটির অস্তিত্ব নেই)",
        "trackingcategories-nodesc": "কোন বর্ণনা নেই।",
        "trackingcategories-disabled": "বিষয়শ্রেণীটি বিকল",
        "mailnologin": "প্রাপকের ঠিকানা নেই",
        "wlheader-enotif": "ইমেল বিজ্ঞপ্তি সক্রিয় করা আছে।",
        "wlheader-showupdated": "আপনার শেষ আগমনের পর থেকে যেসব পাতায় পরিবর্তন হয়েছে সেগুলি '''গাঢ়''' করে দেখানো হয়েছে।",
        "wlnote": "নিচে $3, $4 তারিখ থেকে বিগত {{PLURAL:$2|১ ঘন্টায়|<strong>$2</strong> ঘন্টায়}} সংঘটিত {{PLURAL:$1|শেষ ১টি পরিবর্তন|শেষ <strong>$1টি</strong> পরিবর্তন}} দেখানো হল।",
-       "wlshowlast": "দà§\87à¦\96াà¦\93 à¦¸à¦°à§\8dবশà§\87ষ  $1 à¦\98ণà§\8dà¦\9fা $2 à¦¦à¦¿à¦¨ $3",
+       "wlshowlast": "সরà§\8dবশà§\87ষ $1 à¦\98ণà§\8dà¦\9fা $2 à¦¦à¦¿à¦¨à§\87 à¦¦à§\87à¦\96াà¦\93",
        "watchlist-options": "নজর তালিকা পছন্দসমূহ",
        "watching": "নজর রাখা হচ্ছে...",
        "unwatching": "নজর তুলে নেওয়া হচ্ছে...",
        "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": "সম্পাদনা ফিরিয়ে নিন",
        "rollback_short": "ফিরিয়ে নিন",
        "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** বেশি মাত্রায় প্রদর্শনকৃত পাতা",
        "import": "পাতা আমদানি",
        "importinterwiki": "আন্তঃউইকি আমদানি",
        "import-interwiki-text": "আমদানির জন্য একটি উইকি ও পাতার শিরোনাম নির্বাচন করুন।\nসংশোধনের তারিখগুলি এবং সম্পাদকদের নামগুলি সংরক্ষণ করা হবে।\nসমস্ত আন্তঃউইকি আমদানিগুলি [[Special:Log/import|আমদানি লগে]] লিপিবদ্ধ আছে।",
+       "import-interwiki-sourcewiki": "উত্স উইকি:",
        "import-interwiki-sourcepage": "উৎস পাতা:",
        "import-interwiki-history": "এই পাতার সমস্ত ইতিহাসের সংস্করণের অনুলিপি করা হোক",
        "import-interwiki-templates": "সকল টেম্পলেট অন্তর্ভুক্ত",
        "import-upload": "XML ডাটা আপলোড",
        "import-token-mismatch": "সেশন ডাটা হারিয়ে গিয়েছে।\nঅনুগ্রহ করে পুনরায় চেষ্টা করুন।",
        "import-invalid-interwiki": "নির্ধারিত উইকি থেকে আমদানী করা যাবে না।",
-       "import-error-edit": "Page \"$1\" was not imported because you are not allowed to edit it.",
+       "import-error-edit": "\"$1\" পাতাটি আমদানি করা যায়নি কারণ আপনার এটি সম্পাদনা করার অনুমতি নেই।",
        "import-error-create": "\"$1\" পাতাটি ইম্পোর্ট করা যায়নি কারণ আপনার এটি তৈরী করার অনুমতি নেই।",
        "import-error-interwiki": "\"$1\" পাতাটি ইম্পোর্ট করা যায়নি কারণ এই নামটি বহিঃসংযোগর জন্য নির্ধারিত (ইন্টারউইকি)।",
-       "import-error-special": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\87মà§\8dপà§\8bরà§\8dà¦\9f করা যায়নি কারণ এটি একটি বিশেষ নামস্থানকে নির্দেশ করে যেটি সম্পাদনার জন্য অনুমোদিত নয়।",
+       "import-error-special": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\86মদানি করা যায়নি কারণ এটি একটি বিশেষ নামস্থানকে নির্দেশ করে যেটি সম্পাদনার জন্য অনুমোদিত নয়।",
        "import-error-invalid": "\"$1\" পাতাটি ইম্পোর্ট করা যায়নি কারণ নামটি সঠিক নয়।",
        "import-error-unserialize": "$1 পাতার $2 সংস্করণটি সিরিয়ালাইজ করা যাচ্ছে না। এই রিভিশনে $4 হিসাবে $3 কন্টেন্ট মডেলে সিরিয়ালাইজ করা আছে।",
        "import-options-wrong": "ভুল {{PLURAL:$2|অপশন|অপশনসমূহ}}: <nowiki>$1</nowiki>",
        "tooltip-feed-atom": "এই পাতার জন্য অ্যাটম ফিড",
        "tooltip-t-contributions": "এই ব্যবহারকারীর অবদানগুলির তালিকা দেখুন",
        "tooltip-t-emailuser": "এই ব্যবহারকারীকে একটি ই-মেইল পাঠান",
+       "tooltip-t-info": "এই পাতা সম্পর্কে আরো তথ্য",
        "tooltip-t-upload": "ফাইল আপলোড করুন",
        "tooltip-t-specialpages": "সব বিশেষ পাতার তালিকা",
        "tooltip-t-print": "এ পাতার ছাপানোর উপযোগী সংস্করণ",
        "tooltip-preferences-save": "পছন্দ সংরক্ষণ",
        "tooltip-summary": "একটি সংক্ষিপ্ত সারাংশ দিন",
        "interlanguage-link-title": "$1 - $2",
+       "common.css": "/* এখানে সিএসএস নিবেশিত করা হলে তা সব স্কিনে প্রয়োগ করা হবে */",
        "anonymous": "{{SITENAME}} এর বেনামী {{PLURAL:$1|ব্যবহারকারী|ব্যবহারকারীবৃন্দ}}",
        "siteuser": "{{SITENAME}} ব্যবহারকারী $1",
        "anonuser": "{{SITENAME}} বেনামী ব্যবহারকারী $1",
        "pageinfo-robot-policy": "রোবটের মাধ্যমে ইন্ডেক্স করা হচ্ছে",
        "pageinfo-robot-index": "অনুমোদিত",
        "pageinfo-robot-noindex": "অনুনমোদিন",
-       "pageinfo-views": "পরিদর্শন সংখ্যা",
        "pageinfo-watchers": "পাতাটি প্রদর্শনের সংখ্যা",
        "pageinfo-few-watchers": "$1 জন {{PLURAL:$1|নজরকারীও}} কম",
        "pageinfo-redirects-name": "এই পাতায় পুননির্দেশনাসমূহের সংখ্যা",
        "exif-urgency-low": "নিম্ন ($1)",
        "exif-urgency-high": "উচ্চ ($1)",
        "exif-urgency-other": "ব্যবহারকারী নির্ধারিত অগ্রাধিকার ক্রম ($1)",
-       "watchlistall2": "সবগুলো",
        "namespacesall": "সমস্ত",
        "monthsall": "সমস্ত",
        "confirmemail": "ই-মেইলের ঠিকানা নিশ্চিত করুন",
        "autosumm-blank": "পাতা খালি করা হয়েছে",
        "autosumm-replace": "পাতাকে '$1' দিয়ে প্রতিস্থাপিত করা হল",
        "autoredircomment": "[[$1]]-এ পুনর্নির্দেশ করা হল",
-       "autosumm-new": "$1 দিয়ে তৈরি পাতা",
+       "autosumm-new": "\"$1\" দিয়ে পাতা তৈরি",
        "autosumm-newblank": "খালি পাতা তৈরি হয়েছে",
        "size-bytes": "$1 বাইট",
        "size-kilobytes": "$1 কিলোবাইট",
        "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-overwrite": "$1 $3-এর একটি নতুন সংস্করণ {{GENDER:$2|আপলোড করেছেন}}",
        "logentry-upload-revert": "$1 $3 {{GENDER:$2|আপলোড করেছেন}}",
        "rightsnone": "(কিছু নাই)",
+       "revdelete-summary": "সম্পাদনা সারাংশ",
        "feedback-bugornote": "কারিগরী ত্রুটির বিস্তারিত বর্ণনা জানতে [$1 বাগ রিপোর্ট করুন]।\nঅথবা নিচের এই সরল ফর্মটি ব্যবহার করতে পারেন। \"[$3 $2]\" পাতায় আপনার ব্যবহারকারী নাম সহ মন্তব্যটি প্রকাশিত হবে।",
        "feedback-subject": "বিষয়:",
        "feedback-message": "বার্তা:",
        "log-description-pagelang": "এটি পাতার ভাষা পরিবর্তনের লগ।",
        "logentry-pagelang-pagelang": "$1 পাতার ভাষা $3 এর জন্য $4 থেকে $5 এ {{GENDER:$2|পরিবর্তন}} করেছেন।",
        "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 ('''নিষ্ক্রিয় করা''')",
+       "mediastatistics": "মিডিয়া পরিসংখ্যান",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 বাইট}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME ধরন",
+       "mediastatistics-table-extensions": "সম্ভাব্য এক্সটেনশন",
+       "mediastatistics-table-count": "ফাইলের সংখ্যা",
+       "mediastatistics-table-totalbytes": "সম্মিলিত আকার",
+       "mediastatistics-header-unknown": "অজানা",
+       "mediastatistics-header-bitmap": "বিটম্যাপ চিত্র",
+       "mediastatistics-header-drawing": "অংকন (ভেক্টর চিত্র)",
+       "mediastatistics-header-audio": "অডিও",
+       "mediastatistics-header-video": "ভিডিও",
+       "mediastatistics-header-office": "অফিস",
+       "mediastatistics-header-archive": "সংকুচিত বিন্যাস",
+       "json-error-unknown": "JSON-এ একটি সমস্যা রয়েছে। ত্রুটি: $1",
+       "json-error-syntax": "সিনট্যাক্স ত্রুটি"
 }
index 434232e..2ff0ef4 100644 (file)
        "changeemail-newemail": "དྲ་འཕྲིན་ཁ་བྱང་གསར་བ།",
        "changeemail-none": "(སྟོང་པ།)",
        "changeemail-submit": "དྲ་འཕྲིན་བརྗེ་བ།",
-       "changeemail-cancel": "རྩིས་མེད་ཐོངས།",
        "bold_sample": "ཡིག་གཟུགས་སྦོམ་པོ།",
        "bold_tip": "ཡིག་གཟུགས་སྦོམ་པོ།",
        "italic_sample": "ཡིག་གཟུགས་གསེག་མ།",
        "search-relatedarticle": "འབྲེལ་ཡོད།",
        "searchrelated": "འབྲེལ་ཡོད།",
        "searchall": "ཚང་མ།",
-       "showingresultsheader": "{{PLURAL:$5|གྲུབ་འབྲས་ <strong>$1</strong> ཡི་<strong>$3</strong>གྲབ་འབྲས། <strong>$1 - $2</strong> ཡི་ <strong>$3</strong>}} ཆེད་དུ་ <strong>$4</strong>",
        "search-nonefound": "ཁྱེད་ཀྱི་འདྲི་ཞིབ་དང་མཐུན་པའི་ལན་མི་འདུག་",
        "powersearch-legend": "ཞིབ་ཏུ་འཚོལ་བ།",
        "powersearch-ns": "མིང་གནས་ནང་འཚོལ་བ།",
        "pager-older-n": "{{PLURAL:$1|རྙིང་པ་1|རྙིང་པ་$1}}",
        "booksources": "དཔེ་ཆའི་ཁུངས།",
        "booksources-search-legend": "དེབ་ཁུངས་འཚོལ་བ།",
-       "booksources-go": "སོང་།",
        "log": "པོད་ཁུག",
        "allpages": "དྲ་ངོས་ཡོངས།",
        "prevpage": "ཤོག་ངོས་གོང་མ་ ($1)",
        "watchthispage": "དྲ་ངོས་འདི་ལ་གཟིགས།",
        "unwatch": "མི་བལྟ་བ།",
        "unwatchthispage": "བལྟ་བ་མཚམས་འཇོག",
-       "wlshowlast": "འདས་བའི་དུས་ཚོད་ $1 ནང་ཚུན་  ཉིན་མ་ $2 ནང་ཚུན་ $3 སྟོན།",
+       "wlshowlast": "འདས་བའི་དུས་ཚོད་ $1 ནང་ཚུན་  ཉིན་མ་ $2 ནང་ཚུན་  སྟོན།",
        "watchlist-options": "ལྟ་ཐོའི་འདེམས་ཚན།",
        "watching": "ལྟ་ཐོར་འཇུག་བཞིན་པ་་་",
        "unwatching": "ལྟ་ཐོ་ལས་འདོར་བཞིན་པ་་་",
        "metadata": "རྒྱུ་གཞི་གྲངས།",
        "metadata-help": "ཡིག་ཆ་འདིར་ཆ་འཕྲིན་གཞན་དག་པ་ཁ་ཅིག་འདུག། ཕལ་ཆེར་གྲངས་འཛིན་དཔར་ཆས་འམ་འབེབས་ཆས་ལས་གྲངས་འཛིན་ཡོང་ཆེད་བཟོས་པ་ཡིན། \nགལ་སྲིད་ཡིག་ཆ་འདིར་འགྱུར་བ་གཏོང་གནང་ན། དེ་སྔོན་གྱི་ལྟར་ཞིབས་ཚག་སྟོན་མི་ཐུབ།",
        "metadata-fields": "དཔར་རིས་ཀྱི་ནང་དོན་འདིར་ཡོད་པ་རྣམས་ནང་དོན་ཞིབ་ཕྲའི་སྐབས་སྟོན་རྒྱུ་ཡིན། དེ་མིན་རྣམས་རང་འགུལ་གྱི་འབས་ཞོགས་རྒྱུ་ཡིན།\n* བཟོ་སྐྲུན།\n* དབྱབས་གཟུགས།",
-       "watchlistall2": "ཚང་མ།",
        "namespacesall": "ཡོངས་རྫོགས།",
        "monthsall": "ཡོངས་རྫོགས།",
        "imgmultigo": "སོང་།!",
        "watchlisttools-raw": "ལྟ་ཐོའི་གོ་རིམ་བཅོས་སྒྲིག",
        "specialpages": "ཆེད་ལས་ཤོག་ངོས།",
        "tag-filter": "འདེམས་འཚག། [[Special:Tags|Tag]]",
-       "rightsnone": "(སྟོང་པ།)"
+       "rightsnone": "(སྟོང་པ།)",
+       "revdelete-summary": "བསྡུས་དོན་བཟོ་བཅོས།"
 }
index 3da2377..0138d20 100644 (file)
        "passwordreset-username": "আতাকুরার নাংহান:",
        "passwordreset-domain": "ডমেইন:",
        "changeemail": "ই-মেইল ঠিকানাহান সিলকর",
-       "changeemail-header": "অ্যাকাউন্টর ই-মেইল ঠিকানাহান সিলকর",
        "changeemail-text": "ইমেইল ঠিকানাহান সিরকরানি মনেইলে ফরম এহান পুরন কর। সিলপা এহান লেপকরতে তর খন্তাচাবিগ দেনা লাগতই।",
        "changeemail-no-info": "পাতা এহানাত হমিতে গেলেগা তি যেসারেউ লগইন করানি লাগতই।",
        "changeemail-none": "(নেই)",
        "changeemail-submit": "ই-মেইল সিলকর",
-       "changeemail-cancel": "বাতিল করেদে",
        "bold_sample": "গাঢ়পা ৱাহি",
        "bold_tip": "গাঢ়পা ৱাহি",
        "italic_sample": "ইটালিক মেয়েক",
        "mergehistory-same-destination": "উৎস বারো যিতইগা পাতা মান্না ইয়া নুৱারব",
        "mergehistory-reason": "কারণ:",
        "mergelog": "সুপকরানির লগ",
-       "pagemerge-logentry": "[[$1]]-রে [[$2]]-র লগে তিলকরিসি ($3 পেয়া পতাসি অতান)",
        "revertmerge": "মিলাপ নাকরি",
        "mergelogpagetext": "তলে হাদি এহানর পাতার ইতিহাসর লগে আরাক পাতার ইতিহাস তিলকরিসি অতার লাতঙগ দেনা ইল।",
        "history-title": "\"$1\"-র পতানির ইতিহাসহান",
        "search-relatedarticle": "সাকেই আসে",
        "searchrelated": "সাকেই আসে",
        "searchall": "হাব্বি",
-       "showingresultsheader": "'''$4''' র কা {{PLURAL:$5|ফলহান '''$3''' র '''$1'''|ফলহানি '''$3''' র মা '''$1 - $2'''}}",
        "search-nonefound": "তি বিসারার অহানর লগে মান্নাপাতা নাপারাঙ।",
        "powersearch-legend": "উন্নত বিসারানি",
        "powersearch-ns": "নেমস্পেসর মা বিসারা:",
        "statistics": "হিসাবহান",
        "statistics-header-pages": "পাতার পরিসংখ্যান",
        "statistics-header-edits": "পতানির পরিসংখ্যান",
-       "statistics-header-views": "চাসিতার পরিসংখ্যান",
        "statistics-header-users": "আতাকুরার পরিসংখ্যান",
        "statistics-header-hooks": "আরআর পরিসংখ্যান",
        "statistics-articles": "পাতার কন্টেনহানি",
        "pager-older-n": "{{PLURAL:$1|আরাকউ পুরানা ১হান|আরাকউ পুরানা $1হান}}",
        "booksources": "লেরিকর উৎসহান",
        "booksources-search-legend": "লেরিকরর উৎসহান বিসারা",
-       "booksources-go": "হাত",
        "specialloguserlabel": "আতাকুরাগ:",
        "speciallogtitlelabel": "চিঙনাঙ:",
        "log": "লগ",
        "unwatch": "তালাবি নেই",
        "unwatchthispage": "তালাবি এরাদেনা",
        "watchlist-details": "{{PLURAL:$1|$1 পাতা|$1 পাতাহানি}} তর তালাবিত আসে, য়্যারির পাতা ধরানি নাসে।",
-       "wlshowlast": "গেলগা $1 ঘন্টা $2 দিনর $3 দেখাদে",
+       "wlshowlast": "গেলগা $1 ঘন্টা $2 দিনর  দেখাদে",
        "watchlist-options": "তালাবিত আসে পাতার পছনহানি",
        "watching": "চা...",
        "unwatching": "নাউচা...",
        "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-gpsspeed-n": "গাথিগি",
-       "watchlistall2": "হাব্বি",
        "namespacesall": "হাব্বি",
        "monthsall": "হাব্বি",
        "confirmemail": "ই-মেইল ঠিকানাহান লেপকর",
        "revdelete-restricted": "ডান্ডিকরেকুরাগরাঙ সীমাবদ্ধতাহানি ফলা",
        "revdelete-unrestricted": "ডান্ডিকরেকুরাগরাঙ সীমাবদ্ধতাহানি নেইকর",
        "rightsnone": "(নেই)",
+       "revdelete-summary": "সারাংশ পতানি",
        "searchsuggest-search": "বিসারা",
        "searchsuggest-containing": "আসেতা..."
 }
index 0203515..8537087 100644 (file)
        "watchthispage": "پیگیری ای صفحه",
        "unwatch": "پيگري نبيڎه",
        "watchlist-details": "{{PLURAL:$1|$1 صفحه|$1 صفحات}} درلیست پیگیری ایسا, صفحات صحبت حساب نیبوه.",
-       "wlshowlast": "نمایش آخرین $1 ساعت $2 روز $3",
+       "wlshowlast": "نمایش آخرین $1 ساعت $2 روز",
        "watching": "مئن حالت پي جوري",
        "unwatching": "درحالت عدم پیگیری...",
        "deletepage": "حذف صفحه",
        "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",
-       "watchlistall2": "همه",
        "namespacesall": "همه",
        "monthsall": "همه ماهها",
        "watchlisttools-view": "نشودادن تغییرات مربوطه",
index fd5b641..c468220 100644 (file)
        "otherlanguages": "Yezhoù all",
        "redirectedfrom": "(Adkaset eus $1)",
        "redirectpagesub": "Pajenn adkas",
+       "redirectto": "Adkas da :",
        "lastmodifiedat": "Kemmoù diwezhañ degaset d'ar bajenn-mañ, d'an/ar $1 da $2.",
        "viewcount": "Sellet ez eus bet {{PLURAL:$1|$1 wezh|$1 gwezh}} ouzh ar bajenn-mañ.",
        "protectedpage": "Pajenn warezet",
        "jumptonavigation": "merdeiñ",
        "jumptosearch": "klask",
        "view-pool-error": "Ho tigarez, soulgarget eo ar servijerioù evit poent.\nRe a implijerien a glask mont war ar bajenn-mañ war un dro.\nGortozit ur pennadig a-raok klask mont war ar bjann-mañ en-dro.\n\n$1",
+       "generic-pool-error": "Ho tigarez, soulgarget eo ar servijerioù evit poent.\nRe a implijerien a glask mont war ar bajenn-mañ war un dro.\nGortozit ur pennadig a-raok klask mont war ar bajenn-mañ en-dro.",
        "pool-timeout": "Aet eur dreist d'an termen gortoz evit ar stankadenn",
        "pool-queuefull": "Soulgarget eo ar servijerioù",
        "pool-errorunknown": "Fazi dianav",
        "invalidtitle-knownnamespace": "Titl direizh gant an esaouenn anv \"$2\" hag an destenn \"$3\"",
        "invalidtitle-unknownnamespace": "Titl direizh gant an niverenn esaouenn anv $1 hag an destenn \"$2\" dianav",
        "exception-nologin": "N'oc'h ket kevreet",
-       "exception-nologin-text": "Ar bajenn-mañ pe an ober-mañ a c'houlenn e vefec'h kevreet er wiki-mañ.",
+       "exception-nologin-text": "Ar bajenn-mañ pe an ober-mañ a c'houlenn e vefec'h kevreet.",
        "exception-nologin-text-manual": "$1, mar plij, evit gallout mont d'ar bajenn-mañ pe ober an dra-mañ",
        "virus-badscanner": "Kefluniadur fall : skanner viruzoù dianav : ''$1''",
        "virus-scanfailed": "Skannadenn c'hwitet (kod $1)",
        "resetpass-submit-cancel": "Nullañ",
        "resetpass-wrong-oldpass": "Direizh eo ar ger-tremen a-vremañ pe da c'hortoz.",
        "resetpass-recycled": "Ret eo d'ho ker-tremen nevez bezañ disheñvel diouzh ho ker-tremen a vremañ.",
+       "resetpass-temp-emailed": "Kevreet e oac'h bet gant ur c'hod dibad kaset deoc'h dre bostel.\nEvit echuiñ kevreañ e rankit lakaat ur ger-tremen nevez amañ :",
        "resetpass-temp-password": "Ger-tremen da c'hortoz :",
        "resetpass-abort-generic": "Nullet eo bet kemm ar ger-tremen gant un astenn.",
        "resetpass-expired": "Deuet eo ho ker-tremen d'e dermen. Lakait ur ger-tremen nevez, mar plij, evit kevreañ.",
        "passwordreset-emailsent-capture": "Ur postel evit aderaouekaat ho ker-tremen, evel diskouezet amañ dindan, zo bet kaset.",
        "passwordreset-emailerror-capture": "Kaset ez eus bet ur postel degas da soñj evel m'emañ diskouezet amañ dindan met c'hwitet eo bet ar gasadenn d'an {{GENDER:$2|implijer|implijerez}} : $1",
        "changeemail": "Kemmañ ar chomlec'h postel",
-       "changeemail-header": "Kemmañ chomlec'h postel ar gont",
        "changeemail-text": "Leugnit ar furmskrid-mañ da cheñch ho chomlec'h postel. Ret e vo deoc'h merkañ ho ker-tremen evit kadarnaat ar c'hemm-se.",
        "changeemail-no-info": "Ret eo deoc'h bezañ kevreet a-benn mont d'ar bajenn-se war-eeun.",
        "changeemail-oldemail": "Chomlec'h postel a-vremañ :",
        "changeemail-none": "(hini ebet)",
        "changeemail-password": "Ho ker-tremen war {{SITENAME}}:",
        "changeemail-submit": "Cheñch chomlec'h postel",
-       "changeemail-cancel": "Nullañ",
        "changeemail-throttled": "Betek re hoc'h heus klasket kevreañ en aner.\nGortozit $1, mar plij, a-raok esaeañ en-dro.",
        "resettokens": "Adderaouekaat ar jedoueroù",
        "resettokens-no-tokens": "N'eus jedouer ebet da adderaouekaat.",
        "parser-template-recursion-depth-warning": "Tizhet bevenn donder galvoù ar patromoù ($1)",
        "language-converter-depth-warning": "Aet eur en tu all d'ar vevenn amdreiñ yezhoù ($1)",
        "node-count-exceeded-category": "Pajennoù m'eur aet en tu all d'an niver a skoulmoù",
-       "node-count-exceeded-warning": "Pajenn a ya en tu all d'an niver a skoulmoù",
+       "node-count-exceeded-category-desc": "Mont a ra ar bajenn-mañ en tu all da gont uhelañ ar skoulmoù.",
+       "node-count-exceeded-warning": "Pajenn hag a ya en tu all d'an niver a skoulmoù",
        "expansion-depth-exceeded-category": "Pajennoù m'eur aet dreist d'an donder astenn",
+       "expansion-depth-exceeded-category-desc": "En tu all d'an donder astenn brasañ emañ ar bajenn.",
        "expansion-depth-exceeded-warning": "Pajenn a ya dreist d'an donder astenn",
        "parser-unstrip-loop-warning": "Detektet ez eus bet ul lagadenn n'haller ket divontañ",
        "parser-unstrip-recursion-limit": "Aet dreist d'ar vevenn rekurziñ n'haller ket divontañ : $1",
        "currentrev": "Stumm a-vremañ pe stumm red",
        "currentrev-asof": "Stumm red eus an $1",
        "revisionasof": "Stumm eus an $1",
-       "revision-info": "Stumm eus an $1 gant $2",
+       "revision-info": "Stumm eus an $1 gant $2$7",
        "previousrevision": "← Stumm kent",
        "nextrevision": "Stumm war-lerc'h →",
        "currentrevisionlink": "Gwelet ar stumm red",
        "revdelete-show-file-confirm": "Ha sur oc'h e fell deoc'h gwelet stumm diverket ar restr \"<nowiki>$1</nowiki>\" deiziataet eus an $2 da $3?",
        "revdelete-show-file-submit": "Ya",
        "logdelete-selected": "{{PLURAL:$1|Darvoud eus ar marilh diuzet}} :",
+       "revdelete-text-file": "Dalc'het e vo da welet stummoù restroù dilamet en istor ar restr, nemet ne c'hallo ket an dud mont da welet un darn anezho.",
+       "logdelete-text": "Gwelet e vo c'hoazh dilamadennoù er marilhoù, nemet ne c'hallo ket an dud mont da welet un darn anezho.",
+       "revdelete-text-others": "Ar verourien a c'hallo c'hoazh mont da welet petra zo e-barzh, hag eilpennañ an dilamadenn, nemet ha reolennoù strishoc'h ouzhpenn a vefe.",
        "revdelete-confirm": "Kadarnait eo mat an dra-se a fell deoc'h ober, e komprenit mat ar pezh a empleg, hag en grit en ur zoujañ d'ar [[{{MediaWiki:Policy-url}}|reolennoù]].",
        "revdelete-suppress-text": "Ne zlefe an dilemel bezañ implijet <strong>nemet</strong> abalamour d'an abegoù da-heul :\n* Titouroù personel dizere\n*: <em>chomlec'hioù, niverennoù pellgomz pe surentez sokial personel, hag all.</em>",
        "revdelete-legend": "Lakaat strishadurioù gwelet",
        "mergehistory-empty": "N'haller ket kendeuziñ stumm ebet.",
        "mergehistory-success": "Kendeuzet ez eus bet $3 {{PLURAL:$3|stumm|stumm}} eus [[:$1]] e [[:$2]].",
        "mergehistory-fail": "Dibosupl kendeuziñ an istorioù. Gwiriit ar bajenn hag arventennoù an deiziadoù.",
+       "mergehistory-fail-toobig": "Ne c'haller ket kendeuziñ an istorioù o vezañ ma vefe mont en tu all d'ar harzh a $1 reizhadenn da zilec'hiañ.",
        "mergehistory-no-source": "N'eus ket eus ar bajenn orin $1.",
        "mergehistory-no-destination": "N'eus ket eus ar bajenn dal $1.",
        "mergehistory-invalid-source": "Ret eo da anv ar bajenn orin bezañ reizh.",
        "mergehistory-same-destination": "N'hall ket ar pajennoù kein hag ar pajennoù tal bezañ an hevelep re",
        "mergehistory-reason": "Abeg :",
        "mergelog": "Marilh ar c'hendeuzadennoù",
-       "pagemerge-logentry": "kendeuzet [[$1]] gant [[$2]] (stummoù betek an $3)",
        "revertmerge": "Nullañ ar c'hendeuziñ",
        "mergelogpagetext": "Setu aze roll kendeuzadennoù diwezhañ un eil pajenn istor gant eben.",
        "history-title": "Istor stummoù disheñvel \"$1\"",
        "shown-title": "Diskouez $1 {{PLURAL:$1|disoc'h|disoc'h}} dre bajenn",
        "viewprevnext": "Gwelet ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Ur bajenn anvet\"[[:$1]]\" zo war ar wiki-mañ'''",
-       "searchmenu-new": "'''Krouiñ ar bajenn \"[[:$1]]\" war ar wiki-mañ !'''",
+       "searchmenu-new": "<strong>Krouiñ ar bajenn \"[[:$1]]\" war ar wiki-mañ !</strong> {{PLURAL:$2|0=|Gwelet ivez ar bajenn kavet gant ho klask.|Gwelet ivez disoc'hoù ar c'hlask.}}",
        "searchprofile-articles": "Pajennoù gant boued",
        "searchprofile-images": "Liesmedia",
        "searchprofile-everything": "Pep tra",
        "searchrelated": "disoc'hoù kar",
        "searchall": "An holl",
        "showingresults": "Diskouez betek {{PLURAL:$1|'''1''' disoc'h|'''$1''' disoc'h}} o kregiñ gant #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Disoc'h '''$1''' diwar '''$3'''|Disoc'hoù '''$1 - $2''' diwar '''$3'''}} evit '''$4'''",
+       "showingresultsinrange": "O tiskouez amañ dindan betek {{PLURAL:$1|<strong>1</strong> disoc'h|<strong>$1</strong> a zisoc'hoù}} etre #<strong>$2</strong> ha #<strong>$3</strong>.",
+       "search-showingresults": "{{PLURAL:$4|Disoc'h <strong>$1</strong> of <strong>$3</strong>|a zisoc'hoù <strong>$1 - $2</strong> diwar <strong>$3</strong>}}",
        "search-nonefound": "An enklask-mañ ne zisoc'h war netra.",
        "powersearch-legend": "Klask araokaet",
        "powersearch-ns": "Klask en esaouennoù anv :",
        "preferences": "Penndibaboù",
        "mypreferences": "Penndibaboù",
        "prefs-edits": "Niver a zegasadennoù :",
-       "prefsnologintext2": "$1, mar plij, evit cheñch ho penndibaboù.",
+       "prefsnologintext2": "Kevreit evit cheñch ho penndibaboù, mar plij.",
        "prefs-skin": "Gwiskadur",
        "skin-preview": "Rakwelet",
        "datedefault": "Dre ziouer",
        "recentchangesdays-max": "D'ar muiañ $1 {{PLURAL:$1|deiz|deiz}}",
        "recentchangescount": "Niver a gemmoù da ziskouez dre ziouer",
        "prefs-help-recentchangescount": "Kemer a ra an dra-mañ e kont ar c'hemmoù diwezhañ, istor ar pajennoù hag ar marilhoù.",
+       "prefs-help-watchlist-token2": "Homañ zo an alc'hwez kuzh d'ho roll-evezhiañ davit boued war ar web. Forzh piv a anavez anezhañ a c'hall lenn ho roll-evezhiañ, setu na lavarit grit diwar e benn. M'ho pez ezhomm, e c'hallit [[Special:ResetTokens|assevel anezhañ]].",
        "savedprefs": "Enrollet eo bet ar penndibaboù.",
        "timezonelegend": "Takad eur :",
        "localtime": "Eur lec'hel :",
        "userrights-notallowed": "N'oc'h ket aotreet da ouzhpennañ na da lemel gwirioù an implijerien.",
        "userrights-changeable-col": "Ar strolladoù a c'hallit cheñch",
        "userrights-unchangeable-col": "Ar strolladoù n'hallit ket cheñch",
+       "userrights-conflict": "Bec'h zo abalamour da gemmoù e gwirioù an implijerien. Adwelit an traoù, mar plij, ha kadarnait ho kemmoù.",
        "userrights-removed-self": "Lamet ho peus ho kwirioù deoc'h-c'hwi. Dre se ne c'hallit ket ken mont d'ar bajenn-mañ.",
        "group": "Strollad :",
        "group-user": "Implijerien",
        "right-move": "Adenvel pajennoù",
        "right-move-subpages": "Dilec'hiañ ar pajennoù gant o ispajennoù",
        "right-move-rootuserpages": "Adenvel pajennoù diazez an implijer",
+       "right-move-categorypages": "Dilec'hiañ pajennoù rummad",
        "right-movefile": "Dilec'hiañ ar restroù",
        "right-suppressredirect": "Chom hep sevel un adkas adalek ar bajenn gozh en ur adenvel ar bajenn",
        "right-upload": "Enporzhiañ restroù",
        "action-move": "dilec'hiañ ar bajenn-mañ",
        "action-move-subpages": "dilec'hiañ ar bajenn-mañ hag an ispajennoù anezhi",
        "action-move-rootuserpages": "dilec'hiañ pajennoù an implijer diazez.",
+       "action-move-categorypages": "dilec'hiañ pajennoù rummad",
        "action-movefile": "Adenvel ar restr-mañ",
        "action-upload": "enporzhiañ ar restr-mañ",
        "action-reupload": "frikañ ar restr-mañ",
        "license": "Aotre-implijout :",
        "license-header": "Aotre implijout",
        "nolicense": "Hini ebet diuzet",
+       "licenses-edit": "Aozañ dibarzhioù an aotre-implijout",
        "license-nopreview": "(Dibosupl rakwelet)",
-       "upload_source_url": " (Un URL reizh a c'hall bezañ tizhet gant an holl)",
-       "upload_source_file": " (ur restr war hoc'h urzhiataer)",
+       "upload_source_url": " (ar restr ho peus dibabet diwar un URL reizh hag a c'hall bezañ tizhet gant an holl)",
+       "upload_source_file": " (ar restr ho peus dibabet en hoc'h urzhiataer)",
        "listfiles-delete": "dilemel",
        "listfiles-summary": "Diskouez a ra ar bajenn dibar-mañ an holl restroù bet ezporzhiet.",
        "listfiles_search_for": "Klask anv ar skeudenn :",
        "randomincategory-invalidcategory": "\"$1\" n'eo ket un anv rummad reizh.",
        "randomincategory-nopages": "N'eus pajenn ebet e [[:Category:$1]].",
        "randomincategory-category": "Rummad :",
+       "randomincategory-legend": "Ur bajenn dre zegouezh er rummad",
        "randomredirect": "Ur bajenn adkas dre zegouezh",
        "randomredirect-nopages": "N'eus pajenn adkas ebet en esaouenn anv \"$1\".",
        "statistics": "Stadegoù",
        "statistics-header-pages": "Stadegoù ar pajennoù",
        "statistics-header-edits": "Stadegoù ar c'hemmoù",
-       "statistics-header-views": "Stadegoù ar selladennoù",
        "statistics-header-users": "Stadegoù implijer",
        "statistics-header-hooks": "Stadegoù all",
        "statistics-articles": "Pajennoù endalc'had",
        "statistics-files": "Restroù enporzhiet",
        "statistics-edits": "Kemmoù war ar pajennoù abaoe krouidigezh {{SITENAME}}",
        "statistics-edits-average": "Keidenn ar c'hemmoù dre bajenn",
-       "statistics-views-total": "Hollad ar selladennoù",
-       "statistics-views-total-desc": "N'haller ket mont war ar pajennoù n'eus ket anezho pe war ar pajennoù dibar.",
-       "statistics-views-peredit": "Keidenn gweladenniñ dre gemmoù",
        "statistics-users": "[[Special:ListUsers|Implijerien]] enrollet",
        "statistics-users-active": "Implijerien oberiant",
        "statistics-users-active-desc": "Implijerien o deus degaset da nebeutañ ur c'hemm {{PLURAL:$1|an deiz paseet|e-kerzh an $1 deiz diwezhañ}}",
-       "statistics-mostpopular": "Pajennoù muiañ sellet",
        "pageswithprop": "Pajennoù gant ur perzh pajenn",
        "pageswithprop-legend": "Pajennoù gant ur perzh pajenn",
        "pageswithprop-prop": "Anv ar perzh :",
        "pageswithprop-prophidden-long": "talvoud perzh testenn hir kuzhet ($1)",
        "doubleredirects": "Adkasoù doubl",
        "doubleredirectstext": "Rollañ a ra ar bajenn-mañ ar pajennoù a adkas da bajennoù adkas all.\nWar bep linenn ez eus liammoù war-du pajennoù an adkas kentañ hag en eil adkas, hag ivez war-du pajenn-dal an eil adkas zo sañset bezañ ar pal \"gwirion\" a zlefe an adkas kentañ kas di.\nDiskoulmet eo bet an enmontoù <del>barrennet</del>.",
-       "double-redirect-fixed-move": "Adanvet eo bet [[$1]], adkaset eo war-du [[$2]] bremañ",
-       "double-redirect-fixed-maintenance": "O reizhañ an adkas doubl adalek [[$1]] war-zu [[$2]].",
+       "double-redirect-fixed-move": "Dilec'hiet eo [[$1]].\nHizivaet eo bet ent emgefre ha bremañ ez adkas da [[$2]].",
+       "double-redirect-fixed-maintenance": "O reizhañ ent emgefre an adkas doubl adalek [[$1]] war-zu [[$2]] en un trevell trezalc'h.",
        "double-redirect-fixer": "Reizher adkasoù",
        "brokenredirects": "Adkasoù torret",
        "brokenredirectstext": "Kas a ra an adkasoù-mañ da bajennoù n'eus ket anezho.",
        "uncategorizedtemplates": "Patromoù hep rummad",
        "unusedcategories": "Rummadoù dizimplij",
        "unusedimages": "Skeudennoù en o-unan",
-       "popularpages": "Pajennoù sellet ar muiañ",
        "wantedcategories": "Rummadoù goulennet a vank",
        "wantedpages": "Pajennoù goulennet ar muiañ",
        "wantedpages-badtitle": "Titl direizh er strollad disoc'hoù : $1",
        "wantedfiles": "Restroù a vank",
        "wantedfiletext-cat": "Ober a reer gant ar restroù da-heul koulskoude n'eus ket anezho. Gallout a reer rollañ kavlec'hioù diavaez ha pa vefe anezho. <del>Barrennet</del> e vo an holl falspozitivoù-se. Ouzhpenn-se emañ renablet an holl bajennoù zo enno restroù n'eus ket anezho e [[:$1]].",
+       "wantedfiletext-cat-noforeign": "Implijet eo ar restroù-mañ, met n'eus ket anezho. Ouzhpenn-se, emañ ar pajennoù a enframm ar restroù er roll [[:$1]].",
        "wantedfiletext-nocat": "Ober a reer gant ar restroù da-heul koulskoude n'eus ket anezho. Gallout a reer rollañ kavlec'hioù diavaez ha pa vefe anezho. <del>Barrennet</del> e vo an holl falspozitivoù-se.",
        "wantedfiletext-nocat-noforeign": "Implijet e vez ar restroù-mañ met n'eus ket anezho.",
        "wantedtemplates": "Patromoù a vank",
        "mostlinked": "Pajennoù dezho al liammoù niverusañ",
        "mostlinkedcategories": "Rummadoù dezho al liammoù niverusañ",
-       "mostlinkedtemplates": "Patromoù implijet ar muiañ",
+       "mostlinkedtemplates": "Pajennoù enframmet ar muiañ",
        "mostcategories": "Pennadoù rummatet ar muiañ",
        "mostimages": "Skeudennoù implijet ar muiañ",
        "mostinterwikis": "Pajennoù gant an niver brasañ a etrewikioù",
        "booksources": "Oberennoù dave",
        "booksources-search-legend": "Klask en oberennoù dave",
        "booksources-isbn": "ISBN :",
-       "booksources-go": "Kadarnaat",
+       "booksources-search": "Klask",
        "booksources-text": "Ur roll liammoù a gas da lec'hiennoù all ma werzher levrioù kozh ha nevez a gavot a-is; marteze e kavot eno titouroù pelloc'h war al levrioù a glaskit :",
        "booksources-invalid-isbn": "Evit doare n'eo ket reizh an ISBN merket; gwiriit ha n'oc'h ket faziet en ur eilañ adal ar vammenn orin.",
        "specialloguserlabel": "Implijer :",
        "listgrouprights-addgroup-self-all": "Gallout a ra ouzhpennañ an holl strolladoù da gont an-unan",
        "listgrouprights-removegroup-self-all": "Gallout a ra tennañ kuit an holl strolladoù eus kont an-unan.",
        "listgrouprights-namespaceprotection-namespace": "Esaouenn anv",
+       "listgrouprights-namespaceprotection-restrictedto": "Gwir(ioù) hag a aotre an implijer da aozañ",
+       "trackingcategories": "Rummadoù evezhiañ",
+       "trackingcategories-msg": "Rummad evezhiañ",
        "trackingcategories-name": "Anv ar gemennadenn",
+       "broken-file-category-desc": "Er bajenn-mañ ez eus ul liamm restr torr (ul liamm da enframmañ ur restr pa n'eus ket eus ar restr-se).",
        "trackingcategories-nodesc": "N'eus deskrivadur ebet.",
        "trackingcategories-disabled": "Diweredekaet eo ar rummad",
        "mailnologin": "Chomlec'h ebet",
        "mywatchlist": "Ma roll evezhiañ",
        "watchlistfor2": "Evit $1 $2",
        "nowatchlist": "N'eus pennad ebet en ho roll evezhiañ.",
-       "watchlistanontext": "Ret eo deoc'h $1 evit gwelet pe kemmañ an elfennoù zo en ho roll evezhiañ.",
+       "watchlistanontext": "Ret eo deoc'h kevreañ evit gwelet pe aozañ an elfennoù a zo en ho roll evezhiañ.",
        "watchnologin": "Digevreet",
        "addwatch": "Ouzhpennañ d'ar roll evezhiañ",
        "addedwatchtext": "Ouzh ho [[Special:Watchlist|rollad evezhiañ]] eo bet ouzhpennet ar bajenn \"[[:$1]]\".\nAmañ e vo rollet ar c'hemmoù da zont evit ar bajenn-mañ hag ar bajenn gaozeal stag outi.",
        "unwatchthispage": "Paouez da evezhiañ",
        "notanarticle": "Pennad ebet",
        "notvisiblerev": "Stumm diverket",
-       "watchlist-details": "Lakaet hoc'h eus {{PLURAL:$1|$1 bajenn|$1 pajenn}} dindan evezh, anez kontañ ar pajennoù kaozeal.",
+       "watchlist-details": "Lakaet hoc'h eus {{PLURAL:$1|$1 bajenn|$1 a bajennoù}} war ho roll evezhiañ, anez kontañ ar pajennoù kaozeal.",
        "wlheader-enotif": "Gweredekaet eo ar c'has posteloù.",
        "wlheader-showupdated": "E '''tev''' emañ merket ar pajennoù bet kemmet abaoe ar wezh ziwezhañ hoc'h eus sellet outo",
-       "wlnote": "Setu aze {{PLURAL:$1|ar c'hemm diwezhañ|ar '''$1''' kemm diwezhañ}} c'hoarvezet e-kerzh an {{PLURAL:$2|eurvezh|'''$2''' eurvezh}} ziwezhañ, evit an $3 da $4.",
-       "wlshowlast": "Diskouez an $1 eurvezh $2 devezh diwezhañ $3",
+       "wlnote": "Setu aze {{PLURAL:$1|ar c'hemm diwezhañ|ar '''$1''' kemm diwezhañ}} c'hoarvezet e-kerzh an {{PLURAL:$2|eurvezh|'''$2''' eurvezh}} diwezhañ, d'an $3 da $4.",
+       "wlshowlast": "Diskouez an $1 eurvezh $2 devezh diwezhañ",
        "watchlist-options": "Dibarzhioù ar roll evezhiañ",
        "watching": "Heuliet...",
        "unwatching": "Paouez da evezhiañ...",
        "exbeforeblank": "A-raok diverkañ e oa an endalc'had : '$1'",
        "delete-confirm": "Diverkañ \"$1\"",
        "delete-legend": "Diverkañ",
-       "historywarning": "'''Diwallit :''' Emaoc'h war-nes diverkañ ur bajenn dezhi un istor gant e-tro {{PLURAL:$1|adweladenn|adweladenn}} :",
+       "historywarning": "<strong>Diwallit :</strong> Emaoc'h war-nes diverkañ ur bajenn dezhi un istor gant {{PLURAL:$1|adweladenn}} :",
        "confirmdeletetext": "War-nes diverkañ da viken ur bajenn pe ur skeudenn eus ar bank roadennoù emaoc'h. Diverket e vo ivez an holl stummoù kozh stag outi.\nKadarnait, mar plij, eo mat an dra-se hoc'h eus c'hoant da ober, e komprenit mat an heuliadoù, hag e rit se diouzh ar [[{{MediaWiki:Policy-url}}]].",
        "actioncomplete": "Diverkadenn kaset da benn",
        "actionfailed": "Ober c'hwitet",
        "delete-edit-reasonlist": "Kemmañ a ra an abegoù diverkañ",
        "delete-toobig": "Bras eo istor ar bajenn-mañ, ouzhpenn $1 {{PLURAL:$1|stumm|stumm}} zo. Bevennet eo bet an diverkañ pajennoù a-seurt-se kuit da zegas reuz war {{SITENAME}} dre fazi .",
        "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",
        "alreadyrolled": "Dibosupl eo disteuler ar c'hemm diwezhañ graet d'ar bajenn [[:$1]] gant [[User:$2|$2]] ([[User talk:$2|Kaozeal]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nkemmet pe distaolet eo bet c'hoazh gant unan bennak all.\n\nAr c'hemm diwezhañ d'ar bajenn-mañ a oa bet graet gant [[User:$3|$3]] ([[User talk:$3|Kaozeal]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Diverradenn ar c'hemm a oa : \"''$1''\".",
        "revertpage": "Kemmoù distaolet gant [[Special:Contributions/$2|$2]] ([[User talk:$2|Kaozeal]]); adlakaet d'ar stumm diwezhañ a-gent gant [[User:$1|$1]]",
-       "revertpage-nouser": "Disteuler kemmoù un implijer kuzhet ha distreiñ d'ar stumm diwezhañ gant [[User:$1|$1]]",
+       "revertpage-nouser": "Disteuler kemmoù un implijer kuzhet ha distreiñ d'ar stumm diwezhañ gant an {{GENDER:$1|[[implijer :$1|$1]]}}",
        "rollback-success": "Disteuler kemmoù $1; distreiñ da stumm diwezhañ $2.",
        "sessionfailure-title": "Fazi dalc'h",
        "sessionfailure": "Evit doare ez eus ur gudenn gant ho talc'h;\nNullet eo bet an ober-mañ a-benn en em wareziñ diouzh an tagadennoù preizhañ.\nKlikit war \"kent\" hag adkargit ar bajenn oc'h deuet drezi; goude klaskit en-dro.",
        "autoblockid": "Emstankañ #$1",
        "block": "Stankañ an implijer",
        "unblock": "Distankañ an implijer",
-       "blockip": "Stankañ ur chomlec'h IP",
+       "blockip": "Stankañ an {{GENDER:$1|implijer|implijerez}}",
        "blockip-legend": "Stankañ an implijer",
        "blockiptext": "Grit gant ar furmskrid a-is evit stankañ ar moned skrivañ ouzh ur chomlec'h IP pe un implijer bennak.\nSeurt diarbennoù n'hallont bezañ kemeret nemet evit mirout ouzh ar vandalerezh hag a-du gant an [[{{MediaWiki:Policy-url}}|erbedadennoù ha reolennoù da heuliañ]].\nRoit a-is an abeg resis (o verkañ, da skouer, roll ar pajennoù bet graet gaou outo).",
        "ipaddressorusername": "Chomlec'h IP pe anv implijer",
        "blockipsuccesstext": "Stanket eo bet [[Special:Contributions/$1|$1]].<br />\nSellit ouzh [[Special:BlockList|roll ar chomlec'hioù IP ha kontoù stanket]] evit gwiriañ ar stankadennoù.",
        "ipb-blockingself": "Emaoc'h war-nes stankañ ac'hanoc'h hoc'h-unan ! Ha sur oc'h eo se a fell deoc'h ober ?",
        "ipb-confirmhideuser": "Emaoc'h war-nes stankañ un implijer ha gweredekaet hoc'h eus \"kuzhat an implijer\". Diverkañ a ra an dra-se anv an implijer en holl rolloù ha monedoù ar marilh.",
+       "ipb-confirmaction": "A'z oc'h sur e fell deoc'h ober an dra-se evit gwir, askit ar vaezienn \"{{int:ipb-confirm}}\" en traoñ.",
        "ipb-edit-dropdown": "Kemmañ an abegoù stankañ",
        "ipb-unblock-addr": "Distankañ $1",
        "ipb-unblock": "Distankañ un implijer pe ur chomlec'h IP",
        "unblocked": "Distanket eo bet [[User:$1|$1]]",
        "unblocked-range": "Distanket eo bet $1",
        "unblocked-id": "Distanket eo bet $1",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] zo bet distanket.",
        "blocklist": "Implijerien stanket",
        "ipblocklist": "Implijerien stanket",
        "ipblocklist-legend": "Kavout un implijer stanket",
        "cant-move-user-page": "Noc'h ket aotreet da adenvel pajennoù pennañ an implijerien (er-maez eus o ispajennoù).",
        "cant-move-to-user-page": "Noc'h ket aotreet da adenvel ur bajenn gant anv hini un implijer all (nemet un ispajenn e vefe).",
        "cant-move-category-page": "N'oc'h ket aotreet da zilec'hiañ pajennoù rummad.",
+       "cant-move-to-category-page": "N'oc'h ket aotreet da zilec'hiañ ur bajenn d'ur bajenn rummad.",
        "newtitle": "anv nevez",
        "move-watch": "Evezhiañ ar bajenn-mañ",
        "movepagebtn": "Adenvel ar pennad",
        "import": "Enporzhiañ pajennoù",
        "importinterwiki": "enporzhiadenn etrewiki",
        "import-interwiki-text": "Diuzit ur wiki hag ur bajenn da enporzhiañ.\nMiret e vo deiziadoù ar stummmoù hag anvioù an aozerien.\nMiret eo an holl enporzhiadennoù etrewiki e-barzh [[Special:Log/import|log an enporzhiadennoù]].",
+       "import-interwiki-sourcewiki": "Wiki mammenn :",
+       "import-interwiki-sourcepage": "Pajenn orin :",
        "import-interwiki-history": "Eilañ holl stummoù istor ar bajenn-mañ",
        "import-interwiki-templates": "Lakaat e-barzh an holl batromoù",
        "import-interwiki-submit": "Enporzhiañ",
        "import-error-create": "N'eo ket bet enporzhiet ar bajenn \"$1\" peogwir n'oc'h ket aotreet da grouiñ anezhi.",
        "import-error-interwiki": "Ne vez ket enporzhiet ar bajenn \"$1\" rak miret eo an anv evit liammoù diavaez (etrewiki).",
        "import-error-special": "Ne vez ket enporzhiet ar bajenn \"$1\" rak stag eo ouzh un esaouenn anv dibar na aotre ket pajennoù.",
-       "import-error-invalid": "Ne vez ket enporzhiet ar bajenn \"$1\" rak direizh eo hec'h anv.",
+       "import-error-invalid": "N'eo ket bet enporzhiet ar bajenn \"$1\" rak direizh e vefe hec'h anv er wiki-mañ.",
        "import-options-wrong": "{{PLURAL:$2|Dibab fall|Dibaboù fall}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Pourchas a ra ar bennbajenn un titl n'eo ket reizh.",
        "import-rootpage-nosubpage": "Esaouenn anvioù \"$1\" eus ar bennpajenn ne aotre ket an ispajennoù.",
        "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|stumm|stumm}}",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|adweladenn}} enporzhiet",
        "import-logentry-interwiki": "treuzwikiet $1",
-       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|c'hemm|kemm}} abaoe $2",
+       "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.",
        "pageinfo-robot-policy": "Menegeriñ gant robotoù",
        "pageinfo-robot-index": "Aotreet",
        "pageinfo-robot-noindex": "Diaotreet",
-       "pageinfo-views": "Niver a weladennoù",
        "pageinfo-watchers": "Niver a dud o heuliañ",
        "pageinfo-few-watchers": "Nebeutoc'h eget $1 {{PLURAL:$1|lenner}}",
        "pageinfo-redirects-name": "Niver a adkasoù war-zu ar bajenn-mañ",
        "newimages-summary": "Diskouez a ra ar bajenn dibar-mañ roll ar restroù diwezhañ bet enporzhiet.",
        "newimages-legend": "Sil",
        "newimages-label": "Anv ar restr (pe darn anezhi) :",
+       "newimages-showbots": "Diskouez an ezporzhiadennoù graet gant robotoù",
        "noimages": "Netra da welet.",
        "ilsubmit": "Klask",
        "bydate": "dre an deiziad anezho",
        "exif-urgency-low": "Izel ($1)",
        "exif-urgency-high": "Uhel ($1)",
        "exif-urgency-other": "Priorelezh termenet gant an aozer ($1)",
-       "watchlistall2": "pep tra",
        "namespacesall": "pep tra",
        "monthsall": "an holl",
        "confirmemail": "Kadarnaat ar chomlec'h postel",
        "watchlistedit-raw-done": "Nevesaet eo bet ho roll evezhiañ.",
        "watchlistedit-raw-added": "Ouzhpennet ez eus bet {{PLURAL:$1|1 pajenn|$1 pajenn}} :",
        "watchlistedit-raw-removed": "Tennet ez eus bet {{PLURAL:$1|1 pajenn|$1 pajenn}} :",
+       "watchlistedit-clear-title": "Roll evezhiañ goulloet",
        "watchlistedit-clear-legend": "Diverkañ ar roll-evezhiañ",
+       "watchlistedit-clear-explain": "Lamet e vo an holl ditloù eus ho roll evezhiañ",
        "watchlistedit-clear-titles": "Titloù :",
+       "watchlistedit-clear-done": "Goulloet eo bet ho roll evezhiañ.",
        "watchlistedit-clear-removed": "Dilamet ez eus bet {{PLURAL:$1|1 titl|$1 a ditloù}} :",
        "watchlistedit-too-many": "Re a bajennoù zo da ziskwel amañ.",
        "watchlisttools-clear": "Diverkañ ar roll-evezhiañ",
        "fileduplicatesearch-noresults": "N'eus bet kavet restr ebet anvet \"$1\".",
        "specialpages": "Pajennoù dibar",
        "specialpages-note-top": "Alc'hwez",
-       "specialpages-note": "* Pajennoù dibar boutin.\n* <span class=\"mw-specialpagerestricted\">Pajennoù dibar miret strizh.</span>\n* <span class=\"mw-specialpagecached\">Pajennoù dibar krubuilhet hepken (a c'hellfe bezañ re gozh).</span>",
+       "specialpages-note": "* Pajennoù dibar ordinal.\n* <span class=\"mw-specialpagerestricted\">Pajennoù dibar miret strizh.</span>",
        "specialpages-group-maintenance": "Rentaoù-kont trezalc'h",
        "specialpages-group-other": "Pajennoù dibar all",
        "specialpages-group-login": "Kevreañ / krouiñ ur gont",
        "logentry-newusers-byemail": "Krouet eo bet ar gont implijer $3 gant $1 ha kaset eo bet ar ger-tremen dre bostel",
        "logentry-newusers-autocreate": "{{GENDER:$2|Krouet}} eo bet kont $1 ent emgefre",
        "logentry-rights-autopromote": "$1 zo bet {{GENDER:$2|anvet}} ent emgefre a $4 da $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|en deus|he deus}} ezporzhiet $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|en deus|he deus}} ezporzhiet ur stumm nevez eus $3",
+       "logentry-upload-revert": "$1 {{GENDER:$2|en deus|he deus}} ezporzhiet $3",
        "rightsnone": "(netra)",
+       "revdelete-summary": "diverradenn eus ar c'hemmoù",
        "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 :",
        "pagelang-select-lang": "Dibab ar yezh",
        "right-pagelang": "Cheñch yezh ar bajenn",
        "action-pagelang": "cheñch yezh ar bajenn",
+       "log-name-pagelang": "Cheñch yezh",
+       "log-description-pagelang": "Hemañ zo ur marilh eus ar c'hemmoù e pajenn ar yezhoù.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|en deus|he deus}} cheñchet yezh ar bajenn evit $3 eus $4 da $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (gweredekaet)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''diweredekaet''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''diweredekaet''')",
+       "mediastatistics": "Stadegoù ar media",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 okted|$1 a oktedoù}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "Seurt MIME",
+       "mediastatistics-table-extensions": "Astennoù hag a c'haller lakaat",
+       "mediastatistics-table-count": "Niver a restroù",
+       "mediastatistics-table-totalbytes": "Ment kenstrollet",
+       "mediastatistics-header-unknown": "Dianav",
+       "mediastatistics-header-bitmap": "Skeudennom bitmap",
+       "mediastatistics-header-drawing": "Tresadennoù (skeudennoù vektorel)",
+       "mediastatistics-header-audio": "Kleved",
+       "mediastatistics-header-video": "Videoioù",
+       "mediastatistics-header-office": "Burev",
+       "mediastatistics-header-text": "Testenn",
+       "mediastatistics-header-archive": "Furmadoù gwasket",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|virgulenn|a virgulennoù}} dibenn zo bet lamet eus JSON",
+       "json-error-unknown": "Ur gudenn a oa gant ar JSON. Fazi : $1",
+       "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"
 }
index d7ada3a..bac1f15 100644 (file)
        "pager-older-n": "{{PLURAL:$1|mutkuná 1|mutkuná $1}}",
        "booksources": "Kitábí bumpad",
        "booksources-search-legend": "Kitábí bumpad átekin paŧŧpol",
-       "booksources-go": "Ráím",
        "log": "Lekav",
        "allpages": "Ģuŧŧ panna ģák",
        "prevpage": "Mustko panna ($1)",
        "watchthispage": "Dá panna ná xiálí mar",
        "unwatch": "Bexiál mar",
        "watchlist-details": "Ná xiálí rid aŧí {{PLURAL:$1|$1 panna se|$1 panna o}}, ítgap panna ģák hisáb aŧí affas.",
-       "wlshowlast": "Guđđíko $1 ganŧa $2 de $3 e nişán et",
+       "wlshowlast": "Guđđíko $1 ganŧa $2 de  e nişán et",
        "watchlist-options": "Xiálírid gicenk",
        "watching": "Xiálí manning...",
        "unwatching": "Bexiál manning...",
        "nextdiff": "Púskuná radbadal",
        "metadata-expand": "Vaddíko hál e nişán et",
        "metadata-collapse": "Vaddíko hál e đakka",
-       "watchlistall2": "ģuŧŧ",
        "namespacesall": "ģuŧŧ",
        "monthsall": "ģuŧŧ",
        "watchlisttools-view": "Đek kunoká radbadal áke ur",
index bf0f1e2..69b38ea 100644 (file)
        "searcharticle": "Idi",
        "history": "Historija stranice",
        "history_short": "Historija",
-       "updatedmarker": "promjene od moje zadnje posjete",
+       "updatedmarker": "promjene od moje posljednje posjete",
        "printableversion": "Prilagođeno štampanju",
        "permalink": "Trajni link",
        "print": "Štampa",
        "view": "Pogled",
+       "view-foreign": "Vidi na $1",
        "edit": "Uredi",
+       "edit-local": "Uredi lokalni opis",
        "create": "Napravi",
+       "create-local": "Dodaj lokalni opis",
        "editthispage": "Uredite ovu stranicu",
        "create-this-page": "Napravi ovu stranicu",
        "delete": "Obriši",
        "jumptonavigation": "navigacija",
        "jumptosearch": "traži",
        "view-pool-error": "Žao nam je, serveri su trenutno preopterećeni.\nPreviše korisnika pokušava da pregleda ovu stranicu.\nMolimo pričekajte trenutak prije nego što ponovno pokušate pristupiti ovoj stranici.\n\n$1",
+       "generic-pool-error": "Nažalost, serveri su trenutno preopterećeni.\nPreviše korisnika pokušava da vidi ovaj resurs.\nMolimo pričekajte trenutak prije nego što ponovo pokušate da mu pristupite.",
        "pool-timeout": "Zaustavi čekanje na zaključavanje",
        "pool-queuefull": "Red na pool je prenapunjen",
        "pool-errorunknown": "Nepoznata greška",
        "hidetoc": "sakrij",
        "collapsible-collapse": "sklopi",
        "collapsible-expand": "Proširi",
+       "confirmable-confirm": "Da li {{GENDER:$1|ste}} sigurni?",
+       "confirmable-yes": "Da",
+       "confirmable-no": "Ne",
        "thisisdeleted": "Pogledaj ili vrati $1?",
        "viewdeleted": "Pogledaj $1?",
        "restorelink": "{{PLURAL:$1|$1 izbrisana izmjena|$1 izbrisanih izmjena}}",
        "nospecialpagetext": "<strong>Tražili ste nevaljanu posebnu stranicu.</strong>\n\nSpisak valjanih posebnih stranica se može naći na [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Greška",
        "databaseerror": "Greška u bazi",
+       "databaseerror-text": "Došlo je do greške u upitu baze podataka. \nMožda je u pitanju softverska greška.",
+       "databaseerror-textcl": "Došlo je do greške u upitu baze podataka.",
+       "databaseerror-query": "Upit: $1",
        "databaseerror-function": "Funkcija: $1",
        "databaseerror-error": "Greška: $1",
        "laggedslavemode": "'''Upozorenje''': Stranica, možda, nije ažurirana.",
        "badtitle": "Loš naslov",
        "badtitletext": "Zahtjevani naslov stranice je bio neispravan, prazan ili neispravno povezan međujezički ili interviki naslov.",
        "perfcached": "Slijedeći podaci su keširani i možda neće biti u potpunosti ažurirani. Keš sadrži najviše {{PLURAL:$1|jedan rezultat|$1 rezultata}}.",
-       "perfcachedts": "Slijedeći podaci se nalaze u memoriji i zadnji put su ažurirani $1. Keš sadrži najviše {{PLURAL:$4|jedan rezultat|$4 rezultata}}.",
+       "perfcachedts": "Sljedeći podaci nalaze se u memoriji i posljednji put ažurirani su $1. Keš sadrži najviše {{PLURAL:$4|jedan rezultat|$4 rezultata}}.",
        "querypage-no-updates": "Ažuriranje ove stranice je isključeno.\nPodaci koji se ovdje nalaze ne moraju biti aktuelni.",
        "viewsource": "Pogledaj izvor",
        "viewsource-title": "Prikaz izvora stranice $1",
        "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": "Molimo $1 da biste pristupili ovoj stranici ili radnji.",
        "virus-badscanner": "Loša konfiguracija: nepoznati anti-virus program: ''$1''",
        "virus-scanfailed": "skeniranje nije uspjelo (code $1)",
        "virus-unknownscanner": "nepoznati anti-virus program:",
        "passwordsent": "Nova šifra je poslata na adresu e-pošte korisnika \"$1\".\nMolimo Vas da se prijavite pošto je primite.",
        "blocked-mailpassword": "Da bi se spriječila nedozvoljena akcija, Vašoj IP adresi je onemogućeno uređivanje stranica kao i mogućnost zahtijevanje nove šifre.",
        "eauthentsent": "Na navedenu adresu poslana je e-poruka s potvrdom.\nPrije nego što pošaljemo daljnje poruke, pratite uputstva s e-pošte da biste potvrdili da je račun zaista Vaš.",
-       "throttled-mailpassword": "Već Vam je poslan e-mail za promjenu šifre u {{PLURAL:$1|zadnjih sat vremena|zadnja $1 sata|zadnjih $1 sati}}.\nDa bi se spriječila zloupotreba, može se poslati samo jedan e-mail za promjenu šifre {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.",
+       "throttled-mailpassword": "Već Vam je poslan e-mail za promjenu šifre u {{PLURAL:$1|posljednjih sat vremena|posljednja $1 sata|posljednjih $1 sati}}.\nDa bi se spriječila zloupotreba, može se poslati samo jedan e-mail za promjenu šifre {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.",
        "mailerror": "Greška pri slanju e-pošte: $1",
        "acct_creation_throttle_hit": "Posjetioci na ovoj wiki koji koriste Vašu IP adresu su već napravili {{PLURAL:$1|$1 račun|$1 računa}} u zadnjih nekoliko dana, što je najveći broj dopuštenih napravljenih računa za ovaj period.\nKao rezultat, posjetioci koji koriste ovu IP adresu ne mogu trenutno praviti više računa.",
        "emailauthenticated": "Vaša adresa e-pošte potvrđena je $2 u $3.",
        "retypenew": "Unesite ponovo novu šifru:",
        "resetpass_submit": "Odredi šifru i prijavi se",
        "changepassword-success": "Vaša šifra/lozinka je uspiješno promjenjena!",
+       "changepassword-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.",
        "resetpass_forbidden": "Šifre ne mogu biti promjenjene",
        "resetpass-no-info": "Morate biti prijavljeni da bi ste pristupili ovoj stranici direktno.",
        "resetpass-submit-loggedin": "Promijeni šifru",
        "resetpass-submit-cancel": "Odustani",
        "resetpass-wrong-oldpass": "Privremena ili trenutna šifra nije validna.\nMožda ste već uspješno promijenili Vašu šifru ili ste tražili novu privremenu šifru.",
+       "resetpass-recycled": "Molimo resetirajte vašu lozinku u nešto drugo od vaše trenutne lozinke.",
+       "resetpass-temp-emailed": "Prijavili ste se sa privremenim kodom iz e-pošte.\nDa biste završili prijavljivanje morate postaviti novu lozinku ovdje:",
        "resetpass-temp-password": "Privremena šifra:",
        "resetpass-abort-generic": "Promjenu šifre/lozinke je prekinula ekstenzija.",
+       "resetpass-expired": "Vaša lozinka je istekla. Postavite novu lozinku da biste se prijavili.",
        "passwordreset": "Poništavanje šifre",
        "passwordreset-text-one": "Ispunite ovaj obrazac da biste resetovali Vašu šifru/lozinku.",
        "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako biste dobili privremenu lozinku putem e-pošte.}}",
        "passwordreset-emailsent-capture": "Poslan je podsjetnik preko e-pošte (prikazano ispod).",
        "passwordreset-emailerror-capture": "E-poruka za resetiranje lozinke, prikazano ispod, poslana je, ali slanje {{GENDER:$2|korisniku|korisnici}} nije uspjelo: $1",
        "changeemail": "Promijeni e-mail adresu",
-       "changeemail-header": "Promijeni e-mail adresu korisničkog računa",
        "changeemail-text": "Ispunite ovaj formular da biste promijenili svoju e-mail adresu. Morat ćete upisati svoj pasvord da potvrdite ovu promjenu.",
        "changeemail-no-info": "Morate biti prijavljeni za direktan pristup ovoj stranici.",
        "changeemail-oldemail": "Trenutna e-mail adresa:",
        "changeemail-none": "(ništa)",
        "changeemail-password": "Tvoja šifra/lozinka za {{SITENAME}}:",
        "changeemail-submit": "Promijeni e-mail",
-       "changeemail-cancel": "Otkaži",
+       "resettokens-token-label": "$1 (trenutna vrijednost: $2)",
        "bold_sample": "Podebljan tekst",
        "bold_tip": "Podebljan tekst",
        "italic_sample": "Kurzivan tekst",
        "edit-gone-missing": "Stranica se nije mogla osvježiti.\nIzgleda da je obrisana.",
        "edit-conflict": "Sukob izmjena.",
        "edit-no-change": "Vaša izmjena je ignorirana, jer nije bilo promjena teksta stranice.",
+       "postedit-confirmation-created": "Stranica je napravljena.",
        "postedit-confirmation-saved": "Vaša izmjena je sačuvana.",
        "edit-already-exists": "Stranica nije mogla biti kreirana.\nIzgleda da već postoji.",
        "defaultmessagetext": "Uobičajeni tekst poruke",
        "invalid-content-data": "Nevaljani podaci sadržaja",
        "content-not-allowed-here": "Sadržaj napisan u obliku \"$1\" nije dozvoljen na stranici [[$2]]",
-       "editwarning-warning": "Napuštanje ove stranice može dovesti do gubitka svih promjena koje ste načinili.\nAko ste prijavljeni, možete isključiti ovo upozorenje u Sekciji za \"Uređivanje\" vaših opcija.",
+       "editwarning-warning": "Napuštanje ove stranice može dovesti do gubitka svih promjena koje ste načinili.\nAko ste prijavljeni, možete isključiti ovo upozorenje u Sekciji za \"{{int:prefs-editing}}\" vaših opcija.",
+       "editpage-notsupportedcontentformat-title": "Format sadržaja nije podržan",
        "content-model-wikitext": "wikitekst",
        "content-model-text": "obični tekst",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Stranice sa istim argumentima kod poziva šablona",
        "expensive-parserfunction-warning": "Upozorenje: Ova stranica sadrži previše poziva opterećujućih parserskih funkcija.\n\nTrebalo bi imati manje od $2 {{PLURAL:$2|poziv|poziva}}, a sad ima {{PLURAL:$1|$1 poziv|$1 poziva}}.",
        "expensive-parserfunction-category": "Stranice sa previše poziva parserskih funkcija",
        "post-expand-template-inclusion-warning": "Pažnja: Šablon koji je uključen je prevelik.\nNeki šabloni neće biti uključeni.",
        "next": "slijed",
        "last": "preth",
        "page_first": "prva",
-       "page_last": "zadnja",
+       "page_last": "posljednja",
        "histlegend": "Odabir razlika: označite radio dugme verzija koje uspoređujete i pritistnite enter ili dugme na dnu. <br />\nObjašnjenje: '''(tren)''' = razlika sa trenutnom verzijom,\n'''(preth)''' = razlika sa prethodnom verzijom, '''m''' = mala izmjena.",
        "history-fieldset-title": "Pretraga historije",
        "history-show-deleted": "Samo obrisane",
        "mergehistory-same-destination": "Izvorne i odredišne stranice ne mogu biti iste",
        "mergehistory-reason": "Razlog:",
        "mergelog": "Zapis spajanja",
-       "pagemerge-logentry": "spojeno [[$1]] u [[$2]] (sve do $3 revizije)",
        "revertmerge": "Vrati spajanje",
        "mergelogpagetext": "Ispod je spisak nedavnih spajanja historija stranica.",
        "history-title": "Historija revizija \"$1\"",
        "searchrelated": "povezano",
        "searchall": "sve",
        "showingresults": "Dolje {{PLURAL:$1|je prikazan '''1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}} počev od '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Rezultat '''$1''' od '''$3'''|Rezultati '''$1 - $2''' od '''$3'''}} za '''$4'''",
        "search-nonefound": "Nisu pronađeni rezultati koji odgovaraju upitu.",
        "powersearch-legend": "Napredna pretraga",
        "powersearch-ns": "Pretraga u imenskim prostorima:",
        "prefs-displayrc": "Postavke izgleda",
        "prefs-displaywatchlist": "Postavke izgleda",
        "prefs-diffs": "Razlike",
+       "prefs-help-prefershttps": "Ova podešavanja će stupiti na snagu pri sljedećoj prijavi.",
        "email-address-validity-valid": "Izgleda valjano",
        "email-address-validity-invalid": "Neophodna valjana adresa!",
        "userrights": "Postavke korisničkih prava",
        "userrights-notallowed": "Vaš račun nema privilegije da dodaje ili oduzima prava korisnika.",
        "userrights-changeable-col": "Grupe koje možete mijenjati",
        "userrights-unchangeable-col": "Grupe koje ne možete mijenjati",
-       "userrights-conflict": "Sukob u korisničkim pravima! Molimo pošaljite Vaše promjene ponovno.",
+       "userrights-conflict": "Sukob u izmjeni korisničkih prava! Molimo da razmotrite i potvrdite Vaše promjene.",
        "userrights-removed-self": "Uspješno ste uklonili vlastite prava. Zbog toga više niste u stanju pristupiti ovoj stranici.",
        "group": "Grupa:",
        "group-user": "Korisnici",
        "license-nopreview": "(Pregled nije dostupan)",
        "upload_source_url": " (validni, javno dostupni URL)",
        "upload_source_file": " (datoteka na Vašem računaru)",
+       "listfiles-delete": "obriši",
        "listfiles-summary": "Ova posebna stranica prikazuje sve postavljene datoteke.",
        "listfiles_search_for": "Traži medije po imenu:",
        "imgfile": "datoteka",
        "randompage": "Slučajna stranica",
        "randompage-nopages": "Nema stranica u {{PLURAL:$2|slijedećem imenskom prostoru|slijedećim imenskim prostorima}}: \"$1\".",
        "randomincategory": "Slučajna stranica u kategoriji",
-       "randomincategory-selectcategory-submit": "Idi",
+       "randomincategory-nopages": "Nema stranica u kategoriji [[:Category:$1|$1]].",
+       "randomincategory-category": "Kategorija:",
+       "randomincategory-legend": "Slučajna stranica u kategoriji",
        "randomredirect": "Slučajno preusmjerenje",
        "randomredirect-nopages": "Ne postoje preusmjerenja u imenskom prostoru \"$1\".",
        "statistics": "Statistike",
        "statistics-header-pages": "Statistike stranice",
        "statistics-header-edits": "Statistike izmjena",
-       "statistics-header-views": "Statistike pregleda",
        "statistics-header-users": "Statistike korisnika",
        "statistics-header-hooks": "Ostale statistike",
        "statistics-articles": "Stranice sadržaja",
        "statistics-files": "Broj postavljenih datoteka",
        "statistics-edits": "Broj izmjena od kako je instalirana {{SITENAME}}",
        "statistics-edits-average": "Prosječno izmjena po stranici",
-       "statistics-views-total": "Ukupno pregleda",
-       "statistics-views-total-desc": "Pregledi nepostojećih stranica i posebnih stranica nisu uključeni",
-       "statistics-views-peredit": "Pogleda po izmjeni",
        "statistics-users": "Registrovani [[Special:ListUsers|korisnici]]",
        "statistics-users-active": "Aktivni korisnici",
-       "statistics-users-active-desc": "Korisnici koju su izvršili akciju u toku {{PLURAL:$1|zadnjeg dana|zadnja $1 dana|zadnjih $1 dana}}",
-       "statistics-mostpopular": "Najviše pregledane stranice",
+       "statistics-users-active-desc": "Korisnici koji su izvršili akciju u toku {{PLURAL:$1|posljednjeg dana|posljednja $1 dana|posljednjih $1 dana}}",
        "pageswithprop-prop": "Naziv svojstva:",
        "pageswithprop-submit": "Idi",
        "doubleredirects": "Dvostruka preusmjerenja",
        "uncategorizedtemplates": "Šabloni bez kategorije",
        "unusedcategories": "Neiskorištene kategorije",
        "unusedimages": "Neupotrebljene slike",
-       "popularpages": "Popularne stranice",
        "wantedcategories": "Tražene kategorije",
        "wantedpages": "Tražene stranice",
        "wantedpages-badtitle": "Nevaljan naslov u setu rezultata: $1",
        "protectedpages-expiry": "Istječe",
        "protectedpages-reason": "Razlog",
        "protectedpages-unknown-timestamp": "Nepoznato",
+       "protectedpages-unknown-performer": "Nepoznati korisnik",
        "protectedtitles": "Zaštićeni naslovi",
        "protectedtitlesempty": "Nijedan naslov članka trenutno nije zaštićen ovim parametrima.",
        "listusers": "Spisak korisnika",
        "querypage-disabled": "Ova posebna stranica je onemogućena jer smanjuje performanse.",
        "booksources": "Štampani izvori",
        "booksources-search-legend": "Traži književne izvore",
-       "booksources-go": "Idi",
        "booksources-text": "Ispod se nalazi spisak vanjskih linkova na ostale stranice koje prodaju nove ili korištene knjige kao i stranice koje mogu da imaju važnije podatke o knjigama koje tražite:",
        "booksources-invalid-isbn": "Navedeni ISBN broj nije validan; molimo da provjerite da li je došlo do greške pri kopiranju iz prvobitnog izvora.",
        "specialloguserlabel": "Izvršilac:",
        "listusers-noresult": "Nije pronađen korisnik.",
        "listusers-blocked": "(blokiran)",
        "activeusers": "Spisak aktivnih korisnika",
-       "activeusers-intro": "Ovo je spisak korisnika koji su napravili neku aktivnost u {{PLURAL:$1|zadnji $1 dan|zadnja $1 dana|zadnjih $1 dana}}.",
+       "activeusers-intro": "Ovo je spisak korisnika koji su imali neku aktivnost u {{PLURAL:$1|posljednji $1 dan|posljednja $1 dana|posljednjih $1 dana}}.",
        "activeusers-count": "$1 {{PLURAL:$1|izmjena|izmjene|izmjena}} u {{PLURAL:$3|posljednji $3 dan|posljednja $3 dana|posljednjih $3 dana}}",
        "activeusers-from": "Prikaži korisnike koji počinju sa:",
        "activeusers-hidebots": "Sakrij botove",
        "listgrouprights-removegroup-self": "Može ukloniti {{PLURAL:$2|grupu|grupe|grupa}} sa svog računa: $1",
        "listgrouprights-addgroup-self-all": "Može dodati sve grupe na svoj račun",
        "listgrouprights-removegroup-self-all": "Može ukloniti sve grupe sa svog računa",
+       "listgrouprights-namespaceprotection-namespace": "Imenski prostor",
+       "trackingcategories-nodesc": "Opis nije dostupan.",
        "mailnologin": "Nema adrese za slanje",
        "mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]]\ni imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]]\nda biste slali e-poštu drugim korisnicima.",
        "emailuser": "Pošalji e-poštu ovom korisniku",
        "wlheader-enotif": "Obavještavanje e-poštom je omogućeno.",
        "wlheader-showupdated": "Stranice koje su izmijenjene od kad ste ih posljednji put posjetili su prikazane '''podebljanim slovima'''",
        "wlnote": "Ispod je {{PLURAL:$1|najskorija izmjena|'''$1''' najskorije izmjene|'''$1''' najskorijih izmjena}} načinjenih {{PLURAL:$2|posljednjeg sata|u posljednjih '''$2''' sata|u posljednjih '''$2''' sati}}, od $3, $4.",
-       "wlshowlast": "Prikaži posljednjih $1 sati $2 dana $3",
+       "wlshowlast": "Prikaži posljednjih $1 sati $2 dana",
        "watchlist-options": "Opcije spiska praćenja",
        "watching": "Pratim...",
        "unwatching": "Ne pratim...",
        "autoblockid": "Automatska blokada #$1",
        "block": "Blokiraj korisnika",
        "unblock": "Odblokiraj korisnika",
-       "blockip": "Blokiraj korisnika",
+       "blockip": "Blokiraj {{GENDER:$1|korisnika|korisnicu}}",
        "blockip-legend": "Blokiranje korisnika",
        "blockiptext": "Upotrebite donji upitnik da biste uklonili prava pisanja sa određene IP adrese ili korisničkog imena.  Ovo bi trebalo da bude urađeno samo da bi se spriječio vandalizam, i u skladu sa [[{{MediaWiki:Policy-url}}|smjernicama]]. Unesite konkretan razlog ispod (na primjer, navodeći koje stranice su vandalizovane).",
        "ipaddressorusername": "IP adresa ili korisničko ime:",
        "ipb-hardblock": "Onemogući prijavljene korisnike da uređuju sa ove IP adrese",
        "ipbcreateaccount": "Onemogući pravljenje računa",
        "ipbemailban": "Onemogući korisnika da šalje e-mail",
-       "ipbenableautoblock": "Automatski blokiraj zadnju IP adresu koju je koristio ovaj korisnik i sve druge IP adrese s kojih je on pokušao uređivati",
+       "ipbenableautoblock": "Automatski blokiraj posljednju IP-adresu koju je koristio ovaj korisnik i sve druge IP-adrese s kojih je pokušao uređivati",
        "ipbsubmit": "Blokirajte ovog korisnika",
        "ipbother": "Ostali period:",
        "ipboptions": "2 sata:2 hours,1 dan:1 day,3 dana:3 days,1 sedmica:1 week,2 sedmice:2 weeks,1 mjesec:1 month,3 mjeseca:3 months,6 mjeseci:6 months,1 godine:1 year,zauvijek:infinite",
        "import": "Uvoz stranica",
        "importinterwiki": "Međuwiki uvoz",
        "import-interwiki-text": "Izaberi wiki i naslov stranice za uvoz.\nDatumi revizija i imena autora će biti sačuvani.\nSve akcije pri međuwiki uvozu će biti zapisane u [[Special:Log/import|zapisu uvoza]].",
-       "import-interwiki-source": "Izvorna wiki/stranica:",
        "import-interwiki-history": "Kopiraj sve verzije historije za ovu stranicu",
        "import-interwiki-templates": "Uključi sve šablone",
        "import-interwiki-submit": "Uvoz",
        "spamprotectiontext": "Strana koju želite da sačuvate je blokirana od strane filtera za neželjene poruke.\nOvo je vjerovatno izazvao vezom ka vanjskoj nepoželjnoj stranici.",
        "spamprotectionmatch": "Slijedeći tekst je izazvao naš filter za neželjene poruke: $1",
        "spambot_username": "MediaWiki čišćenje spama",
-       "spam_reverting": "Vraćanje na zadnju verziju koja ne sadrži linkove ka $1",
+       "spam_reverting": "Vraćanje na posljednju verziju koja ne sadrži linkove ka $1",
        "spam_blanking": "Sve revizije koje sadrže linkove ka $1, očisti",
        "spam_deleting": "Sve revizije koje sadrže linkove na $1, brišem",
        "simpleantispam-label": "Provjera protiv spama.\n'''NE''' popunjavaj ovo!",
        "pageinfo-robot-policy": "Indeksiranje od strane robota",
        "pageinfo-robot-index": "Dozvoljeno",
        "pageinfo-robot-noindex": "Nije dozvoljeno",
-       "pageinfo-views": "Broj pogleda",
        "pageinfo-watchers": "Broj pratitelja stranice",
        "pageinfo-few-watchers": "Manje od $1 {{PLURAL:$1|pratioca|pratilaca}}",
        "pageinfo-redirects-name": "Broj preusmjeravanja na ovu stranicu",
        "exif-urgency-low": "Nisko ( $1 )",
        "exif-urgency-high": "Visoko ($1)",
        "exif-urgency-other": "Korisnički određen prioritet ($1)",
-       "watchlistall2": "sve",
        "namespacesall": "sve",
        "monthsall": "sve",
        "confirmemail": "Potvrdite adresu e-pošte",
        "table_pager_next": "Slijedeća stranica",
        "table_pager_prev": "Prethodna stranica",
        "table_pager_first": "Prva stranica",
-       "table_pager_last": "Zadnja stranica",
+       "table_pager_last": "Posljednja stranica",
        "table_pager_limit": "Pokaži $1 stavki po stranici",
        "table_pager_limit_label": "Stavke po stranici:",
        "table_pager_limit_submit": "Idi",
        "version-ext-colheader-license": "Licenca",
        "version-ext-colheader-description": "Opis",
        "version-ext-colheader-credits": "Autori",
+       "version-license-title": "Licenca za $1",
        "version-poweredby-credits": "Ova wiki je zasnovana na '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.",
        "version-poweredby-others": "ostali",
        "version-credits-summary": "Željeli bismo se zahvaliti sljedećim ljudima na njihovom doprinosu [[Special:Version|MediaWikiju]].",
        "logentry-rights-rights-legacy": "$1 je {{GENDER:$2|promijenio|promijenila|promijenio}} članstvo grupe za $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$1|je automatski promijenjeno članstvo|su automatski promijenjena članstva}} iz $4 u $5",
        "rightsnone": "(nema)",
+       "revdelete-summary": "sažetak",
        "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:",
        "expand_templates_remove_comments": "Ukloni komentare",
        "expand_templates_remove_nowiki": "Onemogući oznake <nowiki> u rezultatima",
        "expand_templates_generate_xml": "Prikaži XML stablo parsera",
-       "expand_templates_preview": "Pregled"
+       "expand_templates_preview": "Pregled",
+       "pagelang-name": "Stranica",
+       "pagelang-language": "Jezik",
+       "pagelang-select-lang": "Izaberi jezik"
 }
diff --git a/languages/i18n/bto.json b/languages/i18n/bto.json
new file mode 100644 (file)
index 0000000..474a143
--- /dev/null
@@ -0,0 +1,571 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Filipinayzd",
+                       "Rinconada"
+               ]
+       },
+       "tog-hideminor": "Itago a mga gatikot na pagbalyow sa mga bagong pagribay",
+       "tog-hidepatrolled": "Itago a mga binabantayang na pagbalyow sa mga bagong pagribay",
+       "tog-newpageshidepatrolled": "Itago a mga binabantayan na pagbalyow sa lista ka bagong pahina",
+       "tog-extendwatchlist": "Ibuka a lista ka binabantayan para maipabayad a ngamin na pagribay, buku sana a pinakabago",
+       "tog-usenewrc": "Igrupo a mga pagribay por pahina sa mga bagong pagribay anggan binabantayan",
+       "tog-numberheadings": "Automatikong bilangun a mga titulo",
+       "tog-showtoolbar": "Ipabayad a gamit sa pagbalyow",
+       "tog-editondblclick": "Balyowan a mga pahina sa dobleng click",
+       "tog-watchcreations": "Irugang a mga pahinang kanakong ginibo anggan mga file na isinangat sa kanakong binabantayan",
+       "tog-watchdefault": "Irugang a mga pahinang anggan mga file na binabalyowan ko sa kanakong binabantayan",
+       "tog-watchmoves": "Irugang a mga pahinang anggan mga file na inililipat ko sa kanakong binabantayan",
+       "tog-watchdeletion": "Irugang a mga pahinang anggan mga file na pinupura ko sa kanakong binabantayan",
+       "tog-watchlisthideown": "Itago a kanakong mga pagbalyow sa binabantayan ko",
+       "tog-watchlisthidebots": "Itago a mga pagbalyow ka bot sa binabantayan ko",
+       "tog-watchlisthideminor": "Itago a mga gatikot na pagbalyow sa binabantayan ko",
+       "tog-watchlisthideliu": "Itago a mga pagbalyow ka mga nakaloog na user sa binabantayan ko",
+       "tog-watchlisthideanons": "Itago a mga pagbalyow ka mga diri ising user sa binabantayan ko",
+       "tog-watchlisthidepatrolled": "Itago a mga binabantayan na pagbalyow sa binabantayan ko",
+       "tog-ccmeonemails": "Padarhi ko ka mga kopya ka mga email na ipinapadara ko sa obang user",
+       "tog-diffonly": "Diri ipagpabayad a loog ka pahina sa iraraum ka pagkakaiba",
+       "tog-showhiddencats": "Ipabayad a mga nakatagong kategorya",
+       "tog-norollbackdiff": "Galinon an pagkakaiba matapos gibowon a pagbalik",
+       "underline-always": "Pirmi",
+       "underline-never": "Nungka",
+       "editfont-monospace": "font na Monospaced",
+       "editfont-sansserif": "font na Sans-serif",
+       "editfont-serif": "font na Serif",
+       "sunday": "Domingo",
+       "monday": "Lunis",
+       "tuesday": "Martes",
+       "wednesday": "Myirkules",
+       "thursday": "Hwebes",
+       "friday": "Byernis",
+       "saturday": "Sabado",
+       "sun": "Dom",
+       "mon": "Lun",
+       "tue": "Mar",
+       "wed": "Myi",
+       "thu": "Hwe",
+       "fri": "Bye",
+       "sat": "Sab",
+       "january": "Enero",
+       "february": "Pebrero",
+       "march": "Marso",
+       "april": "Abril",
+       "may_long": "Mayo",
+       "june": "Hunyo",
+       "july": "Hulyo",
+       "august": "Agusto",
+       "september": "Sityembre",
+       "october": "Oktubre",
+       "november": "Nubyembre",
+       "december": "Disyembre",
+       "january-gen": "Enero",
+       "february-gen": "Pebrero",
+       "march-gen": "Marso",
+       "april-gen": "Abril",
+       "may-gen": "Mayo",
+       "june-gen": "Hunyo",
+       "july-gen": "Hulyo",
+       "august-gen": "Agusto",
+       "september-gen": "Sityembre",
+       "october-gen": "Oktubre",
+       "november-gen": "Nubyembre",
+       "december-gen": "Disyembre",
+       "jan": "Ene",
+       "feb": "Peb",
+       "mar": "Mar",
+       "apr": "Abr",
+       "may": "May",
+       "jun": "Hun",
+       "jul": "Hul",
+       "aug": "Agu",
+       "sep": "Sit",
+       "oct": "Okt",
+       "nov": "Nub",
+       "dec": "Dis",
+       "january-date": "Enero $1",
+       "february-date": "Pebrero $1",
+       "march-date": "Marso $1",
+       "april-date": "Abril $1",
+       "may-date": "Mayo $1",
+       "june-date": "Hunyo $1",
+       "july-date": "Hulyo $1",
+       "august-date": "Agusto $1",
+       "september-date": "Sityembre $1",
+       "october-date": "Oktubre $1",
+       "november-date": "Nubyembre $1",
+       "december-date": "Disyembre $1",
+       "pagecategories": "{{PLURAL:$1|Kategorya|Mga kategorya}}",
+       "category_header": "Mga pahina sa kategoryang \"$1\"",
+       "subcategories": "Mga subkategorya",
+       "category-media-header": "Mga pahina sa kategoryang \"$1\"",
+       "hidden-categories": "{{PLURAL:$1|Nakatagong kategorya|Mga nakatagong kategorya}}",
+       "hidden-category-category": "Mga nakatagong kategorya",
+       "listingcontinuesabbrev": "sunod",
+       "cancel": "Galinon",
+       "moredotdotdot": "Dakul pa...",
+       "morenotlisted": "Bukung kumpleto ading lista.",
+       "mypage": "Pahina",
+       "mytalk": "Magbisara",
+       "anontalk": "Pagbisara kading IP adres",
+       "navigation": "Nabigasyon",
+       "and": ",&#32;anggan",
+       "qbfind": "Anapun",
+       "qbedit": "Balyowan",
+       "qbpageoptions": "Ading pahina",
+       "qbmyoptions": "Kanakong mga pahina",
+       "faq": "FAQ",
+       "faqpage": "Proyekto:FAQ",
+       "actions": "Mga aksyon",
+       "namespaces": "Bubutangan",
+       "variants": "Iba pa",
+       "navigation-heading": "Menung nabigasyon",
+       "errorpagetitle": "Sala",
+       "returnto": "Bumalik sa $1",
+       "tagline": "Galin {{SITENAME}}",
+       "help": "Tabang",
+       "search": "Pag-anapon",
+       "searchbutton": "Pag-anapon",
+       "go": "Dumuman",
+       "searcharticle": "Dumuman",
+       "history": "Kasaysayan kan pahina",
+       "history_short": "Kasaysayan",
+       "print": "Ilimbag",
+       "view": "Silung",
+       "view-foreign": "Silung sa $1",
+       "edit": "Balyowan",
+       "create": "Gumibo",
+       "create-local": "Dugangan sa lokal na deskripsyon",
+       "editthispage": "Balyowan ading pahina",
+       "create-this-page": "Gumibo kading pahina",
+       "delete": "Puraon",
+       "deletethispage": "Puraon ading pahina",
+       "undeletethispage": "Ibalik ading pahina",
+       "undelete_short": "Ibalik ading {{PLURAL:$1|pagbalyow|$1 mga pagbalyow}}",
+       "viewdeleted_short": "Baydon a {{PLURAL:$1|pagbalyow|$1 mga pagbalyow}}",
+       "protect": "Protektaran",
+       "protect_change": "ribayan",
+       "protectthispage": "Protektaran ading pahina",
+       "unprotect": "Ribayan a proteksyon",
+       "unprotectthispage": "Ribayan a proteksyon kading pahina",
+       "newpage": "Bagong pahina",
+       "talkpage": "Pagbisara kading pahina",
+       "talkpagelinktext": "Magbisara",
+       "specialpage": "Espesyal na pahina",
+       "personaltools": "Mga personal na gamit",
+       "articlepage": "Baydon a loog ka pahina",
+       "talk": "Pagbisara",
+       "views": "Mga silung",
+       "toolbox": "Mga gamit",
+       "userpage": "Baydon a pahina ka paragamit",
+       "projectpage": "Baydon a pahina ka proyekto",
+       "imagepage": "Baydon a pahina ka file",
+       "mediawikipage": "Baydon a pahina ka mensahe",
+       "templatepage": "Baydon a pahina ka template",
+       "viewhelppage": "Baydon a pahina ka tabang",
+       "categorypage": "Baydon a pahina ka kategorya",
+       "viewtalkpage": "Baydon an pagbisara",
+       "otherlanguages": "Sa ibang mga ngangabilon",
+       "redirectedfrom": "(Nilipat galin sa $1)",
+       "redirectpagesub": "Pahina ka paglipat",
+       "lastmodifiedat": "Huring binago ading pahina ku $1, $2.",
+       "viewcount": "Binuksan ading pahina sa {{PLURAL:$1|beses|$1 beses}}.",
+       "protectedpage": "Protektado ading pahina",
+       "jumpto": "Lumukso sa:",
+       "jumptonavigation": "nabigasyon",
+       "jumptosearch": "anapon",
+       "pool-queuefull": "Punu a pool queue",
+       "pool-errorunknown": "Diri isi a sala",
+       "edithelp": "Tabang sa pagbalyow",
+       "mainpage": "Unang Pahina",
+       "mainpage-description": "Unang Pahina",
+       "policy-url": "Proyekto:Polisiya",
+       "portal": "Portal ka kumunidad",
+       "portal-url": "Proyekto:Portal ka kumunidad",
+       "privacy": "Polisiya ka pribasidad",
+       "privacypage": "Proyekto:Polisiya ka pribasidad",
+       "badaccess": "Sala a pagtugot",
+       "badaccess-group0": "Diri ka pwedeng gibowon a aksyon na boot mo.",
+       "ok": "Amo",
+       "retrievedfrom": "Nakuku galin sa \"$1\"",
+       "youhavenewmessages": "{{PLURAL:$3|Agko ka}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Agko ka}} $1 galin sa {{PLURAL:$3|ibang user|$3 users}} ($2).",
+       "youhavenewmessagesmanyusers": "Agko ka $1 galin dakul na users ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|bagong mensahe|999=mga bagong mensahe}}",
+       "newmessagesdifflinkplural": "huring {{PLURAL:$1|pagbago|999=mga pagbago}}",
+       "youhavenewmessagesmulti": "Agko ka mga bagong mensahe sa $1.",
+       "editsection": "balyowan",
+       "editold": "balyowan",
+       "viewsourceold": "baydon a ginikanan",
+       "editlink": "balyowan",
+       "viewsourcelink": "baydon a ginikanan",
+       "editsectionhint": "Balyowan a sekyon: $1",
+       "toc": "Mga loog",
+       "showtoc": "ipabayad",
+       "hidetoc": "itago",
+       "collapsible-collapse": "Ibaba",
+       "collapsible-expand": "Ibuka",
+       "confirmable-yes": "Amo",
+       "confirmable-no": "Diri",
+       "thisisdeleted": "Baydon o ibalik a $1?",
+       "viewdeleted": "Baydon a $1?",
+       "restorelink": "{{PLURAL:$1|usad na pinurang pagbalyow|$1 mga pinurang pagbalyow}}",
+       "feedlinks": "Karga:",
+       "site-rss-feed": "Kargang $1 RSS",
+       "site-atom-feed": "Kargang $1",
+       "page-rss-feed": "Kargang \"$1\" RSS",
+       "page-atom-feed": "Kargang \"$1\" Atom",
+       "red-link-title": "$1 (uda ading pahina)",
+       "nstab-main": "Pahina",
+       "nstab-user": "Pahina ka user",
+       "nstab-media": "Pahina ka media",
+       "nstab-special": "Espesyal na pahina",
+       "nstab-project": "Pahina ka proyekto",
+       "nstab-image": "File",
+       "nstab-mediawiki": "Mensahe",
+       "nstab-template": "Padron",
+       "nstab-help": "Pahina ka tabang",
+       "nstab-category": "Kategorya",
+       "nosuchaction": "Uda kan aksyon",
+       "nosuchspecialpage": "Uda ka espesyal na pahinang iyan",
+       "error": "Sala",
+       "databaseerror": "Sala a database",
+       "databaseerror-query": "Unga: $1",
+       "databaseerror-function": "Gibo: $1",
+       "databaseerror-error": "Sala: $1",
+       "missingarticle-rev": "(pagbago#: $1)",
+       "missingarticle-diff": "(Iba: $1, $2)",
+       "internalerror": "Panloog na sala",
+       "internalerror_info": "Panloog na sala: $1",
+       "filecopyerror": "Diri makopya a \"$1\" sa \"$2\".",
+       "filerenameerror": "Diri mabalyowan a ngaran ka file na \"$1\" sa \"$2\".",
+       "filedeleteerror": "Diri mapura a file na \"$1\".",
+       "directorycreateerror": "Diri magibo a direktoryong \"$1\".",
+       "filenotfound": "Diri maturakan a file na \"$1\".",
+       "formerror": "Sala: Diri maisumitir ana porma.",
+       "badarticleerror": "Diri magibo ading aksyon sadi pahina.",
+       "cannotdelete-title": "Diri mapura a pahinang \"$1\"",
+       "badtitle": "Bukung tamang titulo",
+       "viewsource": "Baydon a ginikanan",
+       "viewsource-title": "Baydon a ginikanan para sa $1",
+       "viewsourcetext": "Pwede mong silungon anggan arogon a ginikanan kading pahina:",
+       "viewyourtext": "Pwede mong silungon anggan arogon a ginikanan ku <strong?mga pagbalyow mo</strong> kading pahina:",
+       "namespaceprotected": "Uda kang permiso na balyowan a mga pahina sa <strong>$1</strong> bubutangan.",
+       "customjsprotected": "Uda kang permiso na balyowan ading pahina ka JavaScript ta agko di pansadiring settings ka ibang user.",
+       "mycustomjsprotected": "Uda ikang persmiso na balyowan ading pahinang JavaCript.",
+       "mypreferencesprotected": "Uda ikang persmiso na balyowan a kanimong mga kamuyahan.",
+       "ns-specialprotected": "Diri mababalyowan a mga espesyal na pahina.",
+       "exception-nologin": "Diri nakaloog",
+       "virus-unknownscanner": "diri ising antivirus:",
+       "welcomeuser": "Dagos, $1!",
+       "welcomecreation-msg": "Nagibo na a kanimong account.\nPwede mong ribayan a [[Special:kamuyahan|mga kamuyahan]] ka kanimong {{SITENAME}} kin boot mo.",
+       "yourname": "Pangaran:",
+       "userlogin-yourname": "Pangaran",
+       "userlogin-yourname-ph": "Ibutang a kanimong username",
+       "createacct-another-username-ph": "Ibutang a username",
+       "yourpassword": "Password:",
+       "userlogin-yourpassword": "Password",
+       "userlogin-yourpassword-ph": "Ibutang a password",
+       "createacct-yourpassword-ph": "Ibutang a password",
+       "yourpasswordagain": "Ibutang dayday a password:",
+       "createacct-yourpasswordagain": "Ikumpirmar a password",
+       "createacct-yourpasswordagain-ph": "Ibutang dayday a password",
+       "yourdomainname": "A kanimong domain:",
+       "password-change-forbidden": "Diri mo mariribayan a mga password kading wiki.",
+       "login": "Lumoog",
+       "nav-login-createaccount": "Lumoog/gumibo sa account",
+       "userlogin": "Lumoog / gumibo sa account",
+       "userloginnocreate": "Lumoog",
+       "logout": "Lumuwas",
+       "userlogout": "Lumuwas",
+       "notloggedin": "Di nakaloog",
+       "userlogin-noaccount": "Uda sa account?",
+       "userlogin-joinproject": "Bumali sa {{SITENAME}}",
+       "nologin": "Uda sa account? $1.",
+       "nologinlink": "Gumibo sa account",
+       "createaccount": "Gumibo sa account",
+       "gotaccount": "Agko na sa account? $1.",
+       "gotaccountlink": "Lumoog",
+       "userlogin-resetlink": "Nalingawan mo a detalye ku kanimong pagloog?",
+       "createacct-emailrequired": "Email address",
+       "createacct-email-ph": "Iloog a kanimong email adres",
+       "createacct-another-email-ph": "Iloog a email adres",
+       "createaccountreason": "Rason:",
+       "createacct-reason": "Rason",
+       "createacct-reason-ph": "Tauno ta muya mong gumibo sa ibang account",
+       "createacct-imgcaptcha-ph": "Ibutang a tekstong nababayad mo sa ibabow",
+       "createacct-submit": "Gumibo sa sadiring account",
+       "createacct-another-submit": "Gumibo sa ibang account",
+       "createacct-benefit-heading": "Gibo ka mga tawo pareho mo ading {{SITENAME}}.",
+       "createacct-benefit-body1": "{{PLURAL:$1|pabalyow|mga pagbalyow}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|pahina|mga pahina}}",
+       "badretype": "Diri pareho a mga password na ibinutang mo.",
+       "loginerror": "Sala a pagloog",
+       "createacct-error": "Sala a paggibo sa account",
+       "createaccounterror": "Diri makagibo sa account: $1",
+       "loginsuccesstitle": "Matriyumpong nakaloog",
+       "loginsuccess": "'''Nakaloog ka na sa {{SITENAME}} bilang si \"$1\".'''",
+       "mailmypassword": "Balyowan a password",
+       "passwordremindertitle": "Bagong temporaryong password para sa {{SITENAME}}",
+       "noemailcreate": "Kaipowan mong ibutang a tamang email adres.",
+       "mailerror": "Sala ana pagpadara ka surat: $1",
+       "emaildisabled": "Diri makapadadarang surat ading sityo.",
+       "accountcreated": "Nakagibo na sa account",
+       "login-abort-generic": "A kanimong pagloog diri magibo - Pinundo.",
+       "loginlanguagelabel": "Sarita: $1",
+       "pt-login": "Lumoog",
+       "pt-login-button": "Lumoog",
+       "pt-createaccount": "Gumibo sa account",
+       "pt-userlogout": "Lumuwas",
+       "changepassword": "Balyowan a password",
+       "oldpassword": "Lumang password:",
+       "newpassword": "Bagong password:",
+       "resetpass-submit-cancel": "Kanselaron",
+       "resetpass-temp-password": "Temporaryong password:",
+       "passwordreset": "Balyowan a password",
+       "passwordreset-legend": "Balyowan a password",
+       "passwordreset-domain": "Nasasakupan:",
+       "passwordreset-email": "Email address:",
+       "changeemail": "Ribayan a email adres",
+       "changeemail-none": "(uda)",
+       "extlink_sample": "http://www.example.com titulo kan link",
+       "watchthis": "Silungon ading pahina",
+       "blockednoreason": "udang binutang na rason",
+       "nosuchsectiontitle": "diri maturakan a seksyon",
+       "loginreqlink": "lumoog",
+       "loginreqpagetext": "Paki $1 para masilung a ibang mga pahina.",
+       "newarticle": "(Bago)",
+       "updated": "(Binago)",
+       "note": "strong>Paisi:</strong>",
+       "editing": "Binabalyowan a $1",
+       "creating": "Ginigibo a $1",
+       "editingsection": "Binabalyowan a $1 (seksyon)",
+       "editingcomment": "Binabalyowan a $1 (bagong seksyon)",
+       "yourtext": "A kanimong teksto",
+       "template-protected": "(protektado)",
+       "template-semiprotected": "(medyo protektado)",
+       "defaultmessagetext": "Dating teksto ka mensahe",
+       "content-model-wikitext": "wikiteksto",
+       "content-model-text": "simpleng teksto",
+       "content-model-javascript": "JavaScript",
+       "content-model-css": "CSS",
+       "cantcreateaccounttitle": "Diri makagibo sa account",
+       "next": "sunod",
+       "last": "sinundan",
+       "page_first": "una",
+       "page_last": "huri",
+       "history-show-deleted": "Puraon sana",
+       "histfirst": "pinakaluma",
+       "histlast": "pinakabago",
+       "historysize": "({{PLURAL:$1|1 byte|$1 mga byte}})",
+       "historyempty": "(uda loog)",
+       "history-feed-item-nocomment": "$1 sa $2",
+       "rev-showdeleted": "ipabayad",
+       "revdelete-show-file-submit": "Amo",
+       "revdelete-radio-set": "Nakatago",
+       "revdelete-radio-unset": "Nababayad",
+       "revdelete-log": "Rason:",
+       "pagehist": "Kasaysayan kan pahina",
+       "revdelete-otherreason": "Iba/rugang na rason:",
+       "revdelete-reasonotherlist": "Ibang rason",
+       "mergehistory-reason": "Rason:",
+       "lineno": "Linya $1:",
+       "editundo": "ibalik",
+       "diff-empty": "(Udang pagkakaiba)",
+       "searchresults": "Resulta ka pag-anap",
+       "searchprofile-images": "Multimedia",
+       "searchprofile-everything": "Ngamin",
+       "searchprofile-articles-tooltip": "Anapon sa $1",
+       "searchprofile-everything-tooltip": "Anapon sa ngamin na loog (pati sa mga pahina ka pagbisara)",
+       "searchall": "ngamin",
+       "powersearch-toggleall": "Ngamin",
+       "powersearch-togglenone": "Uda",
+       "prefs-misc": "Misc",
+       "prefs-resetpass": "Balyowan a password",
+       "prefs-changeemail": "Ribayan a email adres",
+       "searchresultshead": "Pag-anapon",
+       "recentchangesdays": "Mga aldow na ipababayad a mga bagong pagribay:",
+       "recentchangescount": "Bilang ka pagbalow na ipababayad:",
+       "timezoneregion-africa": "Aprika",
+       "timezoneregion-america": "Amerika",
+       "timezoneregion-antarctica": "Antartika",
+       "timezoneregion-arctic": "Artiko",
+       "timezoneregion-asia": "Asya",
+       "timezoneregion-atlantic": "Kadagatan Atlantiko",
+       "timezoneregion-australia": "Australya",
+       "timezoneregion-europe": "Europa",
+       "timezoneregion-indian": "Kadagatan Indyano",
+       "timezoneregion-pacific": "Kadagatan Pasipiko",
+       "prefs-searchoptions": "Pag-anapon",
+       "default": "dati",
+       "youremail": "Email:",
+       "yourlanguage": "Sarita:",
+       "email": "Email",
+       "prefs-signature": "Pirma",
+       "prefs-editor": "Editor",
+       "userrights-reason": "Rason:",
+       "group": "Grupo:",
+       "group-bot": "Bots",
+       "group-all": "(ngamin)",
+       "right-delete": "Puraon a mga pahina",
+       "right-browsearchive": "Anapon a mga pinurang pahina",
+       "right-userrights": "Balyowan ngamin na katanusan ka user",
+       "action-edit": "balyowan ading pahina",
+       "action-createpage": "gumibo sa mga pahina",
+       "action-delete": "puraon ading pahina",
+       "action-browsearchive": "anapon a mga pinurang pahina",
+       "action-userrights": "balyowan ngamin na katanusan ka user",
+       "enhancedrc-history": "kasaysayan",
+       "rcshowhideminor-show": "Ipabayad",
+       "rcshowhideminor-hide": "Itago",
+       "rcshowhidebots": "$1 bots",
+       "rcshowhidebots-show": "Ipabayad",
+       "rcshowhidebots-hide": "Itago",
+       "rcshowhideliu-show": "Ipabayad",
+       "rcshowhideliu-hide": "Itago",
+       "rcshowhideanons-show": "Ipabayad",
+       "rcshowhideanons-hide": "Itago",
+       "rcshowhidepatr-show": "Ipabayad",
+       "rcshowhidepatr-hide": "Itago",
+       "rcshowhidemine-show": "Ipabayad",
+       "rcshowhidemine-hide": "Itago",
+       "diff": "iba",
+       "hist": "usip",
+       "hide": "Itago",
+       "show": "Ipabayad",
+       "minoreditletter": "m",
+       "newpageletter": "B",
+       "boteditletter": "b",
+       "rc_categories_any": "Dawa uno",
+       "newsectionsummary": "/* $1 */ bagong seksyon",
+       "rc-enhanced-expand": "Ipabayad a mga detalye",
+       "filename": "Filename",
+       "filesource": "Ginalinan:",
+       "watchthisupload": "Silungon ading file",
+       "backend-fail-read": "Diri mabasa a file na \"$1\".",
+       "backend-fail-create": "Diri masuratan a file na \"$1\".",
+       "nolicense": "Udang napili",
+       "listfiles-delete": "puraon",
+       "imgfile": "file",
+       "listfiles_date": "Petsa",
+       "listfiles_name": "Ngaran",
+       "listfiles-latestversion-yes": "Amo",
+       "listfiles-latestversion-no": "Diri",
+       "file-anchor-link": "File",
+       "filehist-deleteall": "puraon ngamin",
+       "filehist-datetime": "Petsa/Oras",
+       "filedelete": "Puraon a $1",
+       "filedelete-submit": "Puraon",
+       "filedelete-success": "Napura na a <strong>$1</strong>.",
+       "filedelete-otherreason": "Iba/rugang na rason:",
+       "randomincategory-category": "Kategorya:",
+       "statistics": "Estadistika",
+       "statistics-pages": "Mga pahina",
+       "brokenredirects-edit": "balyowan",
+       "brokenredirects-delete": "puraon",
+       "withoutinterwiki-submit": "Ipabayad",
+       "nbytes": "$1 {{PLURAL:$1|byte|mga bytes}}",
+       "ncategories": "{{PLURAL:$1|Kategorya|Mga kategorya}}",
+       "ninterwikis": "$1 {{PLURAL:$1|interwiki|mga interwiki}}",
+       "nlinks": "$1 {{PLURAL:$1|link|mga links}}",
+       "prefixindex": "Ngamin na mga pahina na agko prefix",
+       "protectedpages-page": "Pahina",
+       "protectedpages-reason": "Rason",
+       "protectedpages-unknown-timestamp": "Diri isi",
+       "newpages": "Mga bagong pahina",
+       "all-logs-page": "Ngamin na mga pampublikong pagloog",
+       "allpages": "Ngamin na mga pahina",
+       "nextpage": "Sunod na pahina ($1)",
+       "allarticles": "Ngamin na mga pahina",
+       "allinnamespace": "Ngamin na mga pahina ($1 butangan)",
+       "deletedcontributions": "Napurang mga ambag ka user",
+       "linksearch-ok": "Pag-anapon",
+       "listusers-submit": "Ipabayad",
+       "activeusers-hidebots": "Itago a bots",
+       "listgrouprights-group": "Grupo",
+       "listgrouprights-addgroup": "Mairurugang a {{PLURAL:$2|grupo|mga grupo}}: $1",
+       "listgrouprights-addgroup-all": "Irugang ngamin na mga grupo",
+       "listgrouprights-removegroup-all": "Galinon ngamin na mga grupo",
+       "listgrouprights-addgroup-self": "Mairurugang a {{PLURAL:$2|grupo|mga grupo}} sa sadiring account: $1",
+       "listgrouprights-addgroup-self-all": "Irugang a ngamin na mga grupo sa sadiring account",
+       "trackingcategories-name": "Ngaran ka mensahe",
+       "mailnologin": "Udang adres na mapapadarhan",
+       "noemailtitle": "Udang email adres",
+       "emailfrom": "Galin ki:",
+       "emailto": "Para ki:",
+       "emailmessage": "Mensahe:",
+       "emailccme": "Padarhi ako sa kopya ku kanakong mensahe",
+       "emailsenttext": "A kanimong email naipadara na.",
+       "watchlistfor2": "Para sa $1 $2",
+       "wlshowlast": "Ipabayad a huring $1 mga oras $2 mga aldow",
+       "delete-confirm": "Puraon a $1",
+       "deleteotherreason": "Iba/rugang na rason:",
+       "protect-otherreason": "Iba/rugang na rason:",
+       "restriction-edit": "Balyowan",
+       "restriction-move": "Ilipat",
+       "restriction-create": "Gumibo",
+       "restriction-upload": "Magkarga",
+       "restriction-level-all": "dawa unung lebel",
+       "undelete": "Baydon a mga napurang pahina",
+       "undeletepage": "Baydon anggan ibalik a mga napurang pahina",
+       "undeletebtn": "Ibalik",
+       "undeletelink": "baydon/ibalik",
+       "undeleteviewlink": "silungon",
+       "undeletecomment": "Rason:",
+       "undelete-search-title": "Anapon a mga pinurang pahina",
+       "undelete-search-box": "Anapon a mga pinurang pahina",
+       "undelete-search-prefix": "Ipabayad a mga pahinang nagpopoon sa",
+       "undelete-search-submit": "Pag-anapon",
+       "undelete-show-file-submit": "Ano",
+       "namespace": "Butangan:",
+       "blanknamespace": "(Una)",
+       "contributions": "Mga ambag ka {{GENDER:$1|User}}",
+       "mycontris": "Mga ambag",
+       "contribsub2": "Para sa {{GENDER:$3|$1}} ($2)",
+       "uctop": "(nguwan)",
+       "month": "Poon bulan (anggan nauna):",
+       "year": "Poon taon (anggan nauna):",
+       "sp-contributions-newbies-sub": "Para sa mga bagong account",
+       "sp-contributions-deleted": "napurang mga ambag ka user",
+       "sp-contributions-uploads": "mga karga",
+       "sp-contributions-logs": "mga loog",
+       "sp-contributions-talk": "magbisara",
+       "sp-contributions-search": "Mag-anap sa mga ambag",
+       "sp-contributions-submit": "Pag-anapon",
+       "whatlinkshere-page": "Pahina:",
+       "isredirect": "pahina ka paglipat",
+       "whatlinkshere-hideredirs": "$1 mga redirekta",
+       "ipbreason": "Rason:",
+       "ipblocklist-submit": "Pag-anapon",
+       "lockconfirm": "Amo, muya kong ikandado a database.",
+       "delete_and_move": "Puraon anggan ilipat",
+       "delete_and_move_confirm": "Amo, puraon ading pahina",
+       "export-addcattext": "Irugang a mga pahina galin sa kategorya:",
+       "export-addnstext": "Irugang a mga pahina galin sa bubutangan:",
+       "allmessagesname": "Ngaran",
+       "thumbnail_error_remote": "Salang mensahe galin sa $1: $2",
+       "tooltip-ca-delete": "Puraon ading pahina",
+       "tooltip-ca-watch": "Irugang ading pahina sa kanimong binabantayan",
+       "tooltip-search": "Mag-anap sa {{SITENAME}}",
+       "tooltip-ca-nstab-mediawiki": "Silungon a mensahe ka mensahe",
+       "tooltip-watch": "Irugang ading pahina sa kanimong binabantayan",
+       "pageinfo-contentpage-yes": "Amo",
+       "pageinfo-protect-cascading-yes": "Amo",
+       "ilsubmit": "Pag-anapon",
+       "yesterday-at": "Suhapon ku $1",
+       "exif-worldregiondest": "Ipinababayad na rehiyon ka kinaban",
+       "exif-countrycodedest": "Koda para sa ipinababayad na nasyon",
+       "exif-citydest": "Ipinababayad na syudad",
+       "exif-gaincontrol-0": "Uda",
+       "monthsall": "ngamin",
+       "confirm-watch-top": "Muya mong irugang ading pahina sa kanimong binabantayan?",
+       "table_pager_limit": "Ipabayad a $1 na items kada pahina",
+       "version-no-ext-name": "[uda ngaran]",
+       "fileduplicatesearch-submit": "Pag-anapon",
+       "tags-active-yes": "Amo",
+       "htmlform-yes": "Amo",
+       "htmlform-cloner-create": "Rugangan pa",
+       "rightsnone": "(uda)",
+       "feedback-message": "Mensahe:",
+       "searchsuggest-search": "Pag-anapon",
+       "expand_templates_remove_nowiki": "Itago a <nowiki> tags sa resulta"
+}
index b615e24..2d52534 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Ezagren",
-            "Kurniasan",
-            "Zaidpjd (on bug.wikipedia.org)"
-        ]
-    },
-    "sunday": "Āha'",
-    "monday": "Asenéŋ",
-    "tuesday": "Salasa",
-    "wednesday": "Araba",
-    "thursday": "Kamisi'",
-    "friday": "Jumā",
-    "saturday": "Sattu",
-    "sun": "Āha",
-    "mon": "Ase",
-    "tue": "Sal",
-    "wed": "Ara",
-    "thu": "Kam",
-    "fri": "Jum",
-    "sat": "Sat",
-    "january": "Januari",
-    "february": "Fébruari",
-    "march": "Maré'",
-    "april": "April",
-    "may_long": "Méi",
-    "june": "Juni",
-    "july": "Juli",
-    "august": "Ogoso'",
-    "september": "September",
-    "october": "Oktober",
-    "november": "November",
-    "december": "Désémber",
-    "january-gen": "Januari",
-    "february-gen": "Fébruari",
-    "march-gen": "Maré'",
-    "april-gen": "April",
-    "may-gen": "Méi",
-    "june-gen": "Juni",
-    "july-gen": "Juli",
-    "august-gen": "Ogoso'",
-    "september-gen": "September",
-    "october-gen": "Oktober",
-    "november-gen": "November",
-    "december-gen": "Désémber",
-    "category_header": "Leppa rilaleŋ kategori \"$1\"",
-    "subcategories": "Subkategori",
-    "about": "Atajangeng",
-    "article": "Lontara",
-    "cancel": "Rusa",
-    "mypage": "Leppana iya'",
-    "mytalk": "Bicarana iyya",
-    "anontalk": "Bicarana IP édé",
-    "navigation": "Navigasi",
-    "and": "&#32;na",
-    "qbfind": "Assapparang",
-    "qbbrowse": "Berowoso",
-    "qbedit": "Padécéŋ",
-    "qbpageoptions": "Édé leppa",
-    "qbmyoptions": "Leppana iya'",
-    "faq": "FAQ",
-    "faqpage": "Project:FAQ",
-    "vector-action-move": "Paléccé'",
-    "vector-view-create": "Ebbu",
-    "vector-view-edit": "Padéccéng",
-    "vector-view-view": "Baca",
-    "vector-view-viewsource": "Ita sumber",
-    "errorpagetitle": "Asalaŋ",
-    "returnto": "Lisu ri $1.",
-    "tagline": "Polé {{SITENAME}}",
-    "help": "Paŋinriŋ",
-    "search": "Assapparaŋ",
-    "searchbutton": "Sappa",
-    "go": "Lao",
-    "searcharticle": "Lao",
-    "history": "Versi riolo leppaë",
-    "history_short": "versi riolo",
-    "permalink": "Pranala permanen",
-    "edit": "Padécéŋ",
-    "create": "Ebbu",
-    "editthispage": "Padécéŋiki iyé leppa",
-    "create-this-page": "Ebbuiki leppa iyé",
-    "delete": "Peddé",
-    "deletethispage": "Peddé iyé leppa",
-    "protect": "Accalinruŋi",
-    "protect_change": "pinra",
-    "protectthispage": "Accalinruŋi leppa iyyé",
-    "unprotect": "Téccalinruŋi",
-    "newpage": "Leppa baru",
-    "talkpage": "Bicara iyé leppa",
-    "talkpagelinktext": "Bicara",
-    "specialpage": "Leppa spésiala",
-    "personaltools": "Tool sialé-alé",
-    "articlepage": "Ita lontara",
-    "talk": "Bicara",
-    "toolbox": "Toolbox",
-    "userpage": "Ita leppa papaké",
-    "projectpage": "Ita leppa proyék",
-    "imagepage": "Ita leppa rapaŋ",
-    "mediawikipage": "Ita leppa méséje",
-    "templatepage": "Ita leppa templata",
-    "viewhelppage": "Ita leppa panginriŋ",
-    "categorypage": "Ita leppa kategori",
-    "viewtalkpage": "Ita leppa bicara",
-    "redirectedfrom": "(Riredirect polé $1)",
-    "redirectpagesub": "Leppa redirect",
-    "jumpto": "Luppe lao:",
-    "jumptosearch": "sappa",
-    "aboutsite": "Tentang {{SITENAME}}",
-    "currentevents": "Accanjingeŋ kokkoro",
-    "currentevents-url": "Project:Accanjingeŋ kokkoro",
-    "disclaimers": "Diseklaima",
-    "edithelp": "Paŋinriŋ mapadécéŋ",
-    "mainpage": "Leppa Indoë",
-    "mainpage-description": "Leppa Indoë",
-    "portal": "Portal komunitas",
-    "editsection": "padécéŋ",
-    "editold": "padécéŋ",
-    "viewsourceold": "ita sumber",
-    "editlink": "padécéŋ",
-    "viewsourcelink": "ita sumber",
-    "editsectionhint": "Padécéŋ kajuru: $1",
-    "nstab-main": "Leppa",
-    "nstab-user": "Leppa papaké",
-    "nstab-media": "Leppa média",
-    "nstab-special": "Leppa spésiala",
-    "nstab-project": "Proyek",
-    "nstab-image": "Rapang",
-    "nstab-mediawiki": "Pappaseŋ",
-    "nstab-template": "Templata",
-    "nstab-help": "Paŋinriŋ",
-    "nstab-category": "Kategori",
-    "nosuchspecialpage": "Iyaro leppa spésiala dé'na eŋka",
-    "error": "Éro",
-    "databaseerror": "Éro databése",
-    "readonly": "Databése rikonci",
-    "missingarticle-diff": "(Beda: $1, $2)",
-    "internalerror": "Éro internal",
-    "internalerror_info": "Éro internal: $1",
-    "badtitle": "Judul dek essa",
-    "viewsource": "Ita sumber",
-    "virus-unknownscanner": "Antivirus dé' riisseŋ:",
-    "yourname": "Aseŋ papaké:",
-    "yourpassword": "Adacili:",
-    "login": "log attama",
-    "nav-login-createaccount": "Log attama / ebbu akun",
-    "userlogin": "Log attama / ebbu akun",
-    "logout": "Log essu",
-    "userlogout": "Log essu",
-    "notloggedin": "Déppa log attama",
-    "nologin": "Dé' gaga akaun? '''$1'''.",
-    "nologinlink": "Ebbu akun",
-    "createaccount": "Ebbu akun",
-    "gotaccount": "Purani eŋka akun? '''$1'''.",
-    "gotaccountlink": "Log attama",
-    "loginerror": "Éro log attama",
-    "mailmypassword": "E-mail adacili baru",
-    "oldpassword": "Pasewodo matoa:",
-    "bold_tip": "Teks maumpek",
-    "italic_tip": "Teks Italik",
-    "extlink_tip": "Link risaliweŋ (jangan lupa awalan http:// )",
-    "savearticle": "Taro leppa",
-    "preview": "Pribiu",
-    "showpreview": "Ita pribiu",
-    "showlivepreview": "Pribiu live",
-    "showdiff": "Mita perubahan",
-    "summary-preview": "Pribiu summary:",
-    "blockedtitle": "Papaké riblok",
-    "accmailtitle": "Ada sandi ni riantarak.",
-    "accmailtext": "Ada sandi \"$1\" riantarak ri $2.",
-    "anontalkpagetext": "----''Ini adalah halaman diskusi untuk pengguna anonim yang belum membuat rekening atau tidak menggunakannya. Karena tidak membuat rekening, kami terpaksa memakai alamat IP untuk mengenalinya. Alamat IP seperti ini dapat dipakai oleh beberapa pengguna yang berbeda. Jika Anda adalah pengguna anonim dan merasa mendapatkan komentar-komentar yang tidak berkaitan dengan anda, kami anjurkan untuk [[Special:UserLogin|membuat rekening atau masuk log]] untuk menghindari kerancuan dengan pengguna anonim lain.''",
-    "editing": "Mapadécéŋ $1",
-    "previousrevision": "←Revisi riolo",
-    "currentrevisionlink": "Revisi tannapa",
-    "page_first": "séuwani",
-    "histfirst": "Poŋ loa",
-    "histlast": "Poŋ nappa",
-    "historysize": "($1 {{PLURAL:$1|bita|bita}})",
-    "historyempty": "(kapa)",
-    "history-feed-item-nocomment": "$1 ri $2",
-    "rev-deleted-comment": "(komentar ripeddé)",
-    "rev-deleted-user": "(ripeddéni aseŋna papakeë)",
-    "rev-deleted-event": "(log gau ripeddéni)",
-    "rev-delundel": "pakitaï/tapo'",
-    "revdelete-selected": "'''{{PLURAL:$2|Revisi|Revisi-revisi}} ripiléna [[$1]]ë:'''",
-    "logdelete-selected": "'''{{PLURAL:$1|Log|Log-log}} ripilé:'''",
-    "revdelete-hide-text": "Tapoïki text revisië",
-    "revdelete-hide-comment": "Tapo komentar mapadecéŋ",
-    "revdelete-hide-user": "Tapo aseŋ papakéna/IPna papadéceŋë",
-    "revdelete-log": "Saba:",
-    "editundo": "undo",
-    "viewprevnext": "Ita ($1 {{int:pipe-separator}} $2) ($3)",
-    "search-result-size": "$1 ({{PLURAL:$2|1 ada|$2 ada}})",
-    "search-redirect": "(redirect $1)",
-    "mypreferences": "Bérékkeŋeŋna iyya",
-    "prefs-watchlist": "Watchlist",
-    "prefs-misc": "Misc",
-    "saveprefs": "Taro",
-    "prefs-editing": "Mapadécéŋ",
-    "searchresultshead": "Masappa",
-    "youremail": "E-mail:",
-    "username": "Aseŋ papaké:",
-    "uid": "ID papaké:",
-    "email": "E-mail",
-    "group-sysop": "Puŋgawa",
-    "group-all": "(sininna)",
-    "group-user-member": "{{GENDER:$1|Pappaké}}",
-    "group-sysop-member": "Puŋgawa",
-    "grouppage-user": "{{ns:project}}:Pappaké",
-    "grouppage-sysop": "{{ns:project}}:Puŋgawa",
-    "right-read": "Mabbaca leppa",
-    "right-edit": "Mappadécéŋi leppa",
-    "recentchanges": "Pappakinra tanappa",
-    "rcshowhidebots": "$1 bot",
-    "rcshowhideliu": "$1 papaké mattama' log",
-    "rcshowhideanons": "$1 papaké anon",
-    "diff": "beda",
-    "hide": "Tapok",
-    "minoreditletter": "k",
-    "newpageletter": "B",
-    "boteditletter": "b",
-    "recentchangeslinked": "Pappakapinra terkait",
-    "recentchangeslinked-feed": "Pappakapinra terkait",
-    "recentchangeslinked-toolbox": "Pappakapinra terkait",
-    "upload": "Lureng berkas",
-    "uploadbtn": "Lureng berkas",
-    "listfiles_name": "Aseŋ",
-    "file-anchor-link": "Rapang",
-    "filehist-user": "Papaké",
-    "filehist-dimensions": "Dimensi",
-    "imagelinks": "Liŋke",
-    "filedelete": "Mapeddé $1",
-    "filedelete-legend": "Mapeddé berkas",
-    "filedelete-intro": "Iko purani mapeddé '''[[Media:$1|$1]]'''.",
-    "filedelete-submit": "Peddé",
-    "filedelete-success": "'''$1''' purani ripeddé.",
-    "filedelete-success-old": "Berkas '''[[Media:$1|$1]]''' versi $3, $2 purani ripeddé.",
-    "filedelete-nofile": "'''$1''' dé'na eŋka.",
-    "mimesearch": "Assapparaŋ MIME",
-    "mimetype": "Tipe MIME:",
-    "download": "unduh",
-    "randompage": "Leppa random",
-    "randompage-nopages": "Degaga leppa rilaleŋ iyyé namespaceë.",
-    "statistics-articles": "Leppa liseë",
-    "statistics-pages": "Leppaë",
-    "statistics-files": "File-file nalise menré",
-    "ancientpages": "Leppa talloa",
-    "move": "Paleccé",
-    "movethispage": "Paleccé leppa iyyé",
-    "specialloguserlabel": "Papaké:",
-    "log": "Log",
-    "all-logs-page": "Maneŋ log",
-    "allpages": "Maneng halamang",
-    "alphaindexline": "$1 ri $2",
-    "allpagesfrom": "Mappaitang halamang-halamang rimulai:",
-    "allarticles": "Sininna leppa",
-    "allinnamespace": "Maneŋ leppa (namespace $1)",
-    "allpagessubmit": "Lanre",
-    "allpagesprefix": "Mappaitang halamang-halamang éngkalinga awang:",
-    "categories": "Maneŋ kategori",
-    "addedwatchtext": "Halamang \"[[:$1]]\" ni ritamba ri ida [[Special:Watchlist|watchlist]].\nHalamang bicara éréngé gabungan halamang bicara pada wettu depan didaftarkan koe,\néréngé halamang akan wessi '''umpek''' ri [[Special:RecentChanges|daftar pinra tanappa]] barak lebih lemmak ita.\n\nApak ida ronnak mappedde halamang édé ri daftar jagaan, klik \"Mangedda jaga\" pada kolom ri sedde.",
-    "watch": "Ampi",
-    "unwatch": "Tenriampi",
-    "actioncomplete": "Proses makkapo",
-    "dellogpage": "Log peddé-peddé",
-    "prot_1movedto2": "[[$1]] ésuk ri [[$2]]",
-    "blanknamespace": "(Utama)",
-    "sp-contributions-talk": "Bicara",
-    "whatlinkshere": "Pranala ri leppa iyéwé",
-    "whatlinkshere-page": "Leppa:",
-    "whatlinkshere-links": "← liŋke",
-    "ipblocklist-submit": "Sappa",
-    "blocklink": "blok",
-    "contribslink": "kontrib",
-    "articleexists": "Leppa béla ida pile ni ujuk, a dek essa.\nSilakan pile aseng laing.",
-    "movelogpage": "Log leccé",
-    "movereason": "Saba:",
-    "delete_and_move": "Peddé nappa paleccé",
-    "delete_and_move_text": "==Mapeddé riperelu==\nLeppa destinasi \"[[:$1]]\" purani eŋka.\nEloko peddéï supaya weddiŋi mapalecé?",
-    "delete_and_move_confirm": "Iyé', peddé iyaro leppa",
-    "delete_and_move_reason": "Ripeddé supaya weddiŋi mapalecé",
-    "immobile-source-namespace": "Leppa-leppa rilaleŋna namespace \"$1\"ë de'na ullé ripaleccé",
-    "immobile-source-page": "Iyyedé leppaë de'na ullé ripaleccé.",
-    "allmessages": "Maneng pappaseng",
-    "allmessagesname": "Aseng",
-    "allmessagesdefault": "Teks totok",
-    "allmessagescurrent": "Teks kokkoro",
-    "tooltip-pt-userpage": "Leppa papaké iya'",
-    "tooltip-pt-mytalk": "Leppa bicara iya'",
-    "tooltip-pt-preferences": "Preferencena iya'",
-    "tooltip-pt-logout": "Log maessu",
-    "tooltip-ca-talk": "Pabicarana iyé leppa",
-    "tooltip-ca-move": "Paléccé leppa édé",
-    "tooltip-search": "Sappa ri {{SITENAME}}",
-    "tooltip-search-go": "Lao ri leppa aseŋna pappada iyyé rekko eŋkaï",
-    "tooltip-n-mainpage": "Lao ri Leppa Indoë",
-    "tooltip-ca-nstab-special": "Iyanaéwé séuwa leppa spésiala', dé'na idi' ullé padécéŋiki",
-    "anonymous": "Pabbuak anonim {{SITENAME}}",
-    "imagemaxsize": "Gangkai rapang pada keterangan rapang ri halamang hingga:",
-    "ilsubmit": "Sappa",
-    "watchlistall2": "maneŋ",
-    "namespacesall": "maneŋ",
-    "monthsall": "maneŋ",
-    "imgmultigo": "Lao!",
-    "imgmultigoto": "Lao ri leppa $1",
-    "ascending_abbrev": "énré",
-    "descending_abbrev": "no",
-    "table_pager_first": "Leppa séuwani",
-    "table_pager_limit_submit": "Lao",
-    "autosumm-replace": "Masullé leppaë lao '$1'",
-    "autosumm-new": "Leppa baru: '$1'",
-    "size-bytes": "$1 B",
-    "size-kilobytes": "$1 KB",
-    "size-megabytes": "$1 MB",
-    "size-gigabytes": "$1 GB",
-    "livepreview-loading": "Mallise…",
-    "livepreview-ready": "Mallise… Sokkuni!",
-    "version-specialpages": "Leppa spésiala",
-    "specialpages": "Leppa spésiala",
-    "specialpages-note": "* Leppa spésiala normal\n* <strong class=\"mw-specialpagerestricted\">Leppa spésiala terbatas</strong>",
-    "specialpages-group-other": "Leppa spésiala laiŋë",
-    "specialpages-group-login": "Log attama / mendaftar",
-    "specialpages-group-changes": "Pinrana tanappaë sibawa logeë",
-    "specialpages-group-users": "Papaké sibawa hak-hak",
-    "specialpages-group-pages": "Sininna leppaë",
-    "specialpages-group-pagetools": "Tool leppaë",
-    "specialpages-group-wiki": "Data sibawa tool wiki",
-    "specialpages-group-spam": "Tool spam",
-    "blankpage": "Leppa kosoŋë"
+       "@metadata": {
+               "authors": [
+                       "Ezagren",
+                       "Kurniasan",
+                       "Zaidpjd (on bug.wikipedia.org)"
+               ]
+       },
+       "sunday": "Āha'",
+       "monday": "Asenéŋ",
+       "tuesday": "Salasa",
+       "wednesday": "Araba",
+       "thursday": "Kamisi'",
+       "friday": "Jumā",
+       "saturday": "Sattu",
+       "sun": "Āha",
+       "mon": "Ase",
+       "tue": "Sal",
+       "wed": "Ara",
+       "thu": "Kam",
+       "fri": "Jum",
+       "sat": "Sat",
+       "january": "Januari",
+       "february": "Fébruari",
+       "march": "Maré'",
+       "april": "April",
+       "may_long": "Méi",
+       "june": "Juni",
+       "july": "Juli",
+       "august": "Ogoso'",
+       "september": "September",
+       "october": "Oktober",
+       "november": "November",
+       "december": "Désémber",
+       "january-gen": "Januari",
+       "february-gen": "Fébruari",
+       "march-gen": "Maré'",
+       "april-gen": "April",
+       "may-gen": "Méi",
+       "june-gen": "Juni",
+       "july-gen": "Juli",
+       "august-gen": "Ogoso'",
+       "september-gen": "September",
+       "october-gen": "Oktober",
+       "november-gen": "November",
+       "december-gen": "Désémber",
+       "category_header": "Leppa rilaleŋ kategori \"$1\"",
+       "subcategories": "Subkategori",
+       "about": "Atajangeng",
+       "article": "Lontara",
+       "cancel": "Rusa",
+       "mypage": "Leppana iya'",
+       "mytalk": "Bicarana iyya",
+       "anontalk": "Bicarana IP édé",
+       "navigation": "Navigasi",
+       "and": "&#32;na",
+       "qbfind": "Assapparang",
+       "qbbrowse": "Berowoso",
+       "qbedit": "Padécéŋ",
+       "qbpageoptions": "Édé leppa",
+       "qbmyoptions": "Leppana iya'",
+       "faq": "FAQ",
+       "faqpage": "Project:FAQ",
+       "errorpagetitle": "Asalaŋ",
+       "returnto": "Lisu ri $1.",
+       "tagline": "Polé {{SITENAME}}",
+       "help": "Paŋinriŋ",
+       "search": "Assapparaŋ",
+       "searchbutton": "Sappa",
+       "go": "Lao",
+       "searcharticle": "Lao",
+       "history": "Versi riolo leppaë",
+       "history_short": "versi riolo",
+       "permalink": "Pranala permanen",
+       "edit": "Padécéŋ",
+       "create": "Ebbu",
+       "editthispage": "Padécéŋiki iyé leppa",
+       "create-this-page": "Ebbuiki leppa iyé",
+       "delete": "Peddé",
+       "deletethispage": "Peddé iyé leppa",
+       "protect": "Accalinruŋi",
+       "protect_change": "pinra",
+       "protectthispage": "Accalinruŋi leppa iyyé",
+       "unprotect": "Téccalinruŋi",
+       "newpage": "Leppa baru",
+       "talkpage": "Bicara iyé leppa",
+       "talkpagelinktext": "Bicara",
+       "specialpage": "Leppa spésiala",
+       "personaltools": "Tool sialé-alé",
+       "articlepage": "Ita lontara",
+       "talk": "Bicara",
+       "toolbox": "Toolbox",
+       "userpage": "Ita leppa papaké",
+       "projectpage": "Ita leppa proyék",
+       "imagepage": "Ita leppa rapaŋ",
+       "mediawikipage": "Ita leppa méséje",
+       "templatepage": "Ita leppa templata",
+       "viewhelppage": "Ita leppa panginriŋ",
+       "categorypage": "Ita leppa kategori",
+       "viewtalkpage": "Ita leppa bicara",
+       "redirectedfrom": "(Riredirect polé $1)",
+       "redirectpagesub": "Leppa redirect",
+       "jumpto": "Luppe lao:",
+       "jumptosearch": "sappa",
+       "aboutsite": "Tentang {{SITENAME}}",
+       "currentevents": "Accanjingeŋ kokkoro",
+       "currentevents-url": "Project:Accanjingeŋ kokkoro",
+       "disclaimers": "Diseklaima",
+       "edithelp": "Paŋinriŋ mapadécéŋ",
+       "mainpage": "Leppa Indoë",
+       "mainpage-description": "Leppa Indoë",
+       "portal": "Portal komunitas",
+       "editsection": "padécéŋ",
+       "editold": "padécéŋ",
+       "viewsourceold": "ita sumber",
+       "editlink": "padécéŋ",
+       "viewsourcelink": "ita sumber",
+       "editsectionhint": "Padécéŋ kajuru: $1",
+       "nstab-main": "Leppa",
+       "nstab-user": "Leppa papaké",
+       "nstab-media": "Leppa média",
+       "nstab-special": "Leppa spésiala",
+       "nstab-project": "Proyek",
+       "nstab-image": "Rapang",
+       "nstab-mediawiki": "Pappaseŋ",
+       "nstab-template": "Templata",
+       "nstab-help": "Paŋinriŋ",
+       "nstab-category": "Kategori",
+       "nosuchspecialpage": "Iyaro leppa spésiala dé'na eŋka",
+       "error": "Éro",
+       "databaseerror": "Éro databése",
+       "readonly": "Databése rikonci",
+       "missingarticle-diff": "(Beda: $1, $2)",
+       "internalerror": "Éro internal",
+       "internalerror_info": "Éro internal: $1",
+       "badtitle": "Judul dek essa",
+       "viewsource": "Ita sumber",
+       "virus-unknownscanner": "Antivirus dé' riisseŋ:",
+       "yourname": "Aseŋ papaké:",
+       "yourpassword": "Adacili:",
+       "login": "log attama",
+       "nav-login-createaccount": "Log attama / ebbu akun",
+       "userlogin": "Log attama / ebbu akun",
+       "logout": "Log essu",
+       "userlogout": "Log essu",
+       "notloggedin": "Déppa log attama",
+       "nologin": "Dé' gaga akaun? '''$1'''.",
+       "nologinlink": "Ebbu akun",
+       "createaccount": "Ebbu akun",
+       "gotaccount": "Purani eŋka akun? '''$1'''.",
+       "gotaccountlink": "Log attama",
+       "loginerror": "Éro log attama",
+       "mailmypassword": "E-mail adacili baru",
+       "oldpassword": "Pasewodo matoa:",
+       "bold_tip": "Teks maumpek",
+       "italic_tip": "Teks Italik",
+       "extlink_tip": "Link risaliweŋ (jangan lupa awalan http:// )",
+       "savearticle": "Taro leppa",
+       "preview": "Pribiu",
+       "showpreview": "Ita pribiu",
+       "showdiff": "Mita perubahan",
+       "summary-preview": "Pribiu summary:",
+       "blockedtitle": "Papaké riblok",
+       "accmailtitle": "Ada sandi ni riantarak.",
+       "accmailtext": "Ada sandi \"$1\" riantarak ri $2.",
+       "anontalkpagetext": "----''Ini adalah halaman diskusi untuk pengguna anonim yang belum membuat rekening atau tidak menggunakannya. Karena tidak membuat rekening, kami terpaksa memakai alamat IP untuk mengenalinya. Alamat IP seperti ini dapat dipakai oleh beberapa pengguna yang berbeda. Jika Anda adalah pengguna anonim dan merasa mendapatkan komentar-komentar yang tidak berkaitan dengan anda, kami anjurkan untuk [[Special:UserLogin|membuat rekening atau masuk log]] untuk menghindari kerancuan dengan pengguna anonim lain.''",
+       "editing": "Mapadécéŋ $1",
+       "previousrevision": "←Revisi riolo",
+       "currentrevisionlink": "Revisi tannapa",
+       "page_first": "séuwani",
+       "histfirst": "Poŋ loa",
+       "histlast": "Poŋ nappa",
+       "historysize": "($1 {{PLURAL:$1|bita|bita}})",
+       "historyempty": "(kapa)",
+       "history-feed-item-nocomment": "$1 ri $2",
+       "rev-deleted-comment": "(komentar ripeddé)",
+       "rev-deleted-user": "(ripeddéni aseŋna papakeë)",
+       "rev-deleted-event": "(log gau ripeddéni)",
+       "rev-delundel": "pakitaï/tapo'",
+       "logdelete-selected": "{{PLURAL:$1|Log|Log-log}} ripilé:",
+       "revdelete-hide-text": "Tapoïki text revisië",
+       "revdelete-hide-comment": "Tapo komentar mapadecéŋ",
+       "revdelete-hide-user": "Tapo aseŋ papakéna/IPna papadéceŋë",
+       "revdelete-log": "Saba:",
+       "editundo": "undo",
+       "viewprevnext": "Ita ($1 {{int:pipe-separator}} $2) ($3)",
+       "search-result-size": "$1 ({{PLURAL:$2|1 ada|$2 ada}})",
+       "search-redirect": "(redirect $1)",
+       "mypreferences": "Bérékkeŋeŋna iyya",
+       "prefs-watchlist": "Watchlist",
+       "prefs-misc": "Misc",
+       "saveprefs": "Taro",
+       "prefs-editing": "Mapadécéŋ",
+       "searchresultshead": "Masappa",
+       "youremail": "E-mail:",
+       "username": "Aseŋ papaké:",
+       "email": "E-mail",
+       "group-sysop": "Puŋgawa",
+       "group-all": "(sininna)",
+       "group-user-member": "{{GENDER:$1|Pappaké}}",
+       "group-sysop-member": "Puŋgawa",
+       "grouppage-user": "{{ns:project}}:Pappaké",
+       "grouppage-sysop": "{{ns:project}}:Puŋgawa",
+       "right-read": "Mabbaca leppa",
+       "right-edit": "Mappadécéŋi leppa",
+       "recentchanges": "Pappakinra tanappa",
+       "rcshowhidebots": "$1 bot",
+       "rcshowhideliu": "$1 papaké mattama' log",
+       "rcshowhideanons": "$1 papaké anon",
+       "diff": "beda",
+       "hide": "Tapok",
+       "minoreditletter": "k",
+       "newpageletter": "B",
+       "boteditletter": "b",
+       "recentchangeslinked": "Pappakapinra terkait",
+       "recentchangeslinked-feed": "Pappakapinra terkait",
+       "recentchangeslinked-toolbox": "Pappakapinra terkait",
+       "upload": "Lureng berkas",
+       "uploadbtn": "Lureng berkas",
+       "listfiles_name": "Aseŋ",
+       "file-anchor-link": "Rapang",
+       "filehist-user": "Papaké",
+       "filehist-dimensions": "Dimensi",
+       "imagelinks": "Liŋke",
+       "filedelete": "Mapeddé $1",
+       "filedelete-legend": "Mapeddé berkas",
+       "filedelete-intro": "Iko purani mapeddé '''[[Media:$1|$1]]'''.",
+       "filedelete-submit": "Peddé",
+       "filedelete-success": "'''$1''' purani ripeddé.",
+       "filedelete-success-old": "Berkas '''[[Media:$1|$1]]''' versi $3, $2 purani ripeddé.",
+       "filedelete-nofile": "'''$1''' dé'na eŋka.",
+       "mimesearch": "Assapparaŋ MIME",
+       "mimetype": "Tipe MIME:",
+       "download": "unduh",
+       "randompage": "Leppa random",
+       "randompage-nopages": "Degaga leppa rilaleŋ iyyé namespaceë.",
+       "statistics-articles": "Leppa liseë",
+       "statistics-pages": "Leppaë",
+       "statistics-files": "File-file nalise menré",
+       "ancientpages": "Leppa talloa",
+       "move": "Paleccé",
+       "movethispage": "Paleccé leppa iyyé",
+       "specialloguserlabel": "Papaké:",
+       "log": "Log",
+       "all-logs-page": "Maneŋ log",
+       "allpages": "Maneng halamang",
+       "allpagesfrom": "Mappaitang halamang-halamang rimulai:",
+       "allarticles": "Sininna leppa",
+       "allinnamespace": "Maneŋ leppa (namespace $1)",
+       "allpagessubmit": "Lanre",
+       "allpagesprefix": "Mappaitang halamang-halamang éngkalinga awang:",
+       "categories": "Maneŋ kategori",
+       "addedwatchtext": "Halamang \"[[:$1]]\" ni ritamba ri ida [[Special:Watchlist|watchlist]].\nHalamang bicara éréngé gabungan halamang bicara pada wettu depan didaftarkan koe,\néréngé halamang akan wessi '''umpek''' ri [[Special:RecentChanges|daftar pinra tanappa]] barak lebih lemmak ita.\n\nApak ida ronnak mappedde halamang édé ri daftar jagaan, klik \"Mangedda jaga\" pada kolom ri sedde.",
+       "watch": "Ampi",
+       "unwatch": "Tenriampi",
+       "actioncomplete": "Proses makkapo",
+       "dellogpage": "Log peddé-peddé",
+       "prot_1movedto2": "[[$1]] ésuk ri [[$2]]",
+       "blanknamespace": "(Utama)",
+       "sp-contributions-talk": "Bicara",
+       "whatlinkshere": "Pranala ri leppa iyéwé",
+       "whatlinkshere-page": "Leppa:",
+       "whatlinkshere-links": "← liŋke",
+       "ipblocklist-submit": "Sappa",
+       "blocklink": "blok",
+       "contribslink": "kontrib",
+       "articleexists": "Leppa béla ida pile ni ujuk, a dek essa.\nSilakan pile aseng laing.",
+       "movelogpage": "Log leccé",
+       "movereason": "Saba:",
+       "delete_and_move": "Peddé nappa paleccé",
+       "delete_and_move_text": "==Mapeddé riperelu==\nLeppa destinasi \"[[:$1]]\" purani eŋka.\nEloko peddéï supaya weddiŋi mapalecé?",
+       "delete_and_move_confirm": "Iyé', peddé iyaro leppa",
+       "delete_and_move_reason": "Ripeddé supaya weddiŋi mapalecé",
+       "immobile-source-namespace": "Leppa-leppa rilaleŋna namespace \"$1\"ë de'na ullé ripaleccé",
+       "immobile-source-page": "Iyyedé leppaë de'na ullé ripaleccé.",
+       "allmessages": "Maneng pappaseng",
+       "allmessagesname": "Aseng",
+       "allmessagesdefault": "Teks totok",
+       "allmessagescurrent": "Teks kokkoro",
+       "tooltip-pt-userpage": "Leppa papaké iya'",
+       "tooltip-pt-mytalk": "Leppa bicara iya'",
+       "tooltip-pt-preferences": "Preferencena iya'",
+       "tooltip-pt-logout": "Log maessu",
+       "tooltip-ca-talk": "Pabicarana iyé leppa",
+       "tooltip-ca-move": "Paléccé leppa édé",
+       "tooltip-search": "Sappa ri {{SITENAME}}",
+       "tooltip-search-go": "Lao ri leppa aseŋna pappada iyyé rekko eŋkaï",
+       "tooltip-n-mainpage": "Lao ri Leppa Indoë",
+       "tooltip-ca-nstab-special": "Iyanaéwé séuwa leppa spésiala', dé'na idi' ullé padécéŋiki",
+       "anonymous": "Pabbuak anonim {{SITENAME}}",
+       "imagemaxsize": "Gangkai rapang pada keterangan rapang ri halamang hingga:",
+       "ilsubmit": "Sappa",
+       "namespacesall": "maneŋ",
+       "monthsall": "maneŋ",
+       "imgmultigo": "Lao!",
+       "imgmultigoto": "Lao ri leppa $1",
+       "ascending_abbrev": "énré",
+       "descending_abbrev": "no",
+       "table_pager_first": "Leppa séuwani",
+       "table_pager_limit_submit": "Lao",
+       "autosumm-replace": "Masullé leppaë lao '$1'",
+       "autosumm-new": "Leppa baru: '$1'",
+       "size-bytes": "$1 B",
+       "size-kilobytes": "$1 KB",
+       "size-megabytes": "$1 MB",
+       "size-gigabytes": "$1 GB",
+       "version-specialpages": "Leppa spésiala",
+       "specialpages": "Leppa spésiala",
+       "specialpages-note": "* Leppa spésiala normal\n* <strong class=\"mw-specialpagerestricted\">Leppa spésiala terbatas</strong>",
+       "specialpages-group-other": "Leppa spésiala laiŋë",
+       "specialpages-group-login": "Log attama / mendaftar",
+       "specialpages-group-changes": "Pinrana tanappaë sibawa logeë",
+       "specialpages-group-users": "Papaké sibawa hak-hak",
+       "specialpages-group-pages": "Sininna leppaë",
+       "specialpages-group-pagetools": "Tool leppaë",
+       "specialpages-group-wiki": "Data sibawa tool wiki",
+       "specialpages-group-spam": "Tool spam",
+       "blankpage": "Leppa kosoŋë"
 }
index 65888a7..f036e88 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Amire80",
-            "Bjargal",
-            "Elvonudinium",
-            "Korol Bumi",
-            "Soul Train",
-            "Губин Михаил",
-            "ОйЛ"
-        ]
-    },
-    "tog-underline": "Холбооһо доогуурнь зураха:",
-    "tog-watchcreations": "Минии үүдхэһэн хуудаһа болон ашаалһан файлыем хинаха жагсаалтада оруула",
-    "tog-watchdefault": "Минии заһаһан хуудаһа болон файлыем хинаха жагсаалтада оруула",
-    "tog-watchmoves": "Минии зөөһэн хуудаһа болон файлыем хинаха жагсаалтада оруула",
-    "tog-watchdeletion": "Минии усадхаһан хуудаһа болон файлыем хинаха жагсаалтада оруула",
-    "tog-minordefault": "Бүхы заһабариие бага зэргын гэжэ үгэгдэмэлөөр тэмдэглэ",
-    "tog-previewontop": "Уридшалан харахые заһабарилха талбарай урда үзүүлэ",
-    "tog-previewonfirst": "Уридшалан харахые эхилжэ заһаха үедэ үзүүлэ",
-    "underline-always": "хододоол",
-    "underline-never": "хэзээшье",
-    "sunday": "Няма",
-    "monday": "Дабаа",
-    "tuesday": "Мягмар",
-    "wednesday": "Һагба",
-    "thursday": "Пүрбэ",
-    "friday": "Баасан",
-    "saturday": "Бямба",
-    "sun": "Ня",
-    "mon": "Да",
-    "tue": "Мя",
-    "wed": "Һа",
-    "thu": "Пү",
-    "fri": "Ба",
-    "sat": "Бя",
-    "january": "Нэгэдүгээр һара",
-    "february": "Хоёрдугаар һара",
-    "march": "Гурбадугаар һара",
-    "april": "Дүрбэдүгээр һара",
-    "may_long": "Табадугаар һара",
-    "june": "Зургадугаар һара",
-    "july": "Долодугаар һара",
-    "august": "Наймадугаар һара",
-    "september": "Юһэдүгээр һара",
-    "october": "Арбадугаар һара",
-    "november": "Арбаннэгэдүгээр һара",
-    "december": "Арбанхоёрдугаар һара",
-    "january-gen": "Нэгэдүгээр һарын",
-    "february-gen": "Хоёрдугаар һарын",
-    "march-gen": "Гурбадугаар һарын",
-    "april-gen": "Дүрбэдүгээр һарын",
-    "may-gen": "Табадугаар һарын",
-    "june-gen": "Зургадугаар һарын",
-    "july-gen": "Долодугаар һарын",
-    "august-gen": "Наймадугаар һарын",
-    "september-gen": "Юһэдүгээр һарын",
-    "october-gen": "Арбадугаар һарын",
-    "november-gen": "Арбаннэгэдүгээр һарын",
-    "december-gen": "Арбанхоёрдугаар һарын",
-    "jan": "1 һара",
-    "feb": "2 һара",
-    "mar": "3 һара",
-    "apr": "4 һара",
-    "may": "5 һара",
-    "jun": "6 һара",
-    "jul": "7 һара",
-    "aug": "8 һара",
-    "sep": "9 һара",
-    "oct": "10 һара",
-    "nov": "11 һара",
-    "dec": "12 һара",
-    "january-date": "1 һарын $1",
-    "february-date": "2 һарын $1",
-    "march-date": "3 һарын $1",
-    "april-date": "4 һарын $1",
-    "may-date": "5 һарын $1",
-    "june-date": "6 һарын $1",
-    "july-date": "7 һарын $1",
-    "august-date": "8 һарын $1",
-    "september-date": "9 һарын $1",
-    "october-date": "10 һарын $1",
-    "november-date": "11 һарын $1",
-    "december-date": "12 һарын $1",
-    "category_header": "\"$1\" категориин үгүүлэлнүүд",
-    "cancel": "Болихо",
-    "moredotdotdot": "Үшөө...",
-    "morenotlisted": "Энэ жагсаалта дүүргэһэнгүй.",
-    "mypage": "Хуудаһан",
-    "mytalk": "Хэлэлсэл",
-    "anontalk": "Энэ IP адресаарнь хэлэхэ",
-    "navigation": "Залуурдалга",
-    "and": "&#32;ба",
-    "qbfind": "Хайха",
-    "qbedit": "Заһабарилха",
-    "vector-action-addsection": "Һэдэб нэмэхэ",
-    "vector-action-delete": "Усадхаха",
-    "vector-view-create": "Үүдхэхэ",
-    "vector-view-edit": "Заһабарилха",
-    "vector-view-history": "Түүхые хараха",
-    "vector-view-view": "Уншаха",
-    "vector-view-viewsource": "эшэ үндэһэндэнь хандаха",
-    "actions": "γйлэ",
-    "variants": "Хубилбари",
-    "navigation-heading": "Тамаралгын меню",
-    "errorpagetitle": "Алдуу",
-    "tagline": "{{SITENAME}} сайтһаа мэдээлэл",
-    "help": "Туһаламжа",
-    "search": "Хайха",
-    "searchbutton": "Хайлта",
-    "go": "Ябаха",
-    "searcharticle": "Ябаха",
-    "history": "Хуудаһанай түүхэ",
-    "history_short": "Түүхэ",
-    "printableversion": "Хэблэхэ хубилбари",
-    "permalink": "Үргэлжын холбооһон",
-    "print": "Хэблэхэ",
-    "view": "Харуулха",
-    "edit": "Заһабарилха",
-    "create": "Үүдхэхэ",
-    "delete": "Усадхаха",
-    "protect": "Хамгаалха",
-    "protect_change": "Хубилалга",
-    "newpage": "Шэнэ хуудаһан",
-    "talkpage": "Тус хуудаһа хэлэлсэхэ",
-    "talkpagelinktext": "Хэлэлсэхэ",
-    "specialpage": "Тусхай хуудаһан",
-    "personaltools": "Хубиин хэрэгсэлнүүд",
-    "postcomment": "Шэнэ бүлэг",
-    "talk": "Хэлэлсэхэ",
-    "views": "Үзэһэн",
-    "toolbox": "Багажа зэбсэг",
-    "projectpage": "Түлэблэлгын хуудаһые хараха",
-    "otherlanguages": "Бусад хэлээр",
-    "jumpto": "Шууд ошохо:",
-    "jumptonavigation": "тамаралга",
-    "jumptosearch": "хайха",
-    "pool-errorunknown": "Танигдаагүй алдуу",
-    "aboutsite": "{{SITENAME}} тухай",
-    "aboutpage": "Project:Түлэблэлгын тухай",
-    "currentevents": "Мүнөө боложо байгаа үйлэ ябадал",
-    "currentevents-url": "Project:Һонин мэдээн",
-    "disclaimers": "Татагалзалнууд",
-    "disclaimerpage": "Project:Ниитэ татагалзал",
-    "mainpage": "Нюур хуудаһан",
-    "mainpage-description": "Нюур хуудаһан",
-    "portal": "Хурал",
-    "portal-url": "Project:Хурал",
-    "privacy": "Хубиин мэдээлэлэй талаар баримталал",
-    "privacypage": "Project:Хубиин мэдээлэлэй талаар баримталал",
-    "ok": "За",
-    "retrievedfrom": "\"$1\" холбооһоо абагдаһан",
-    "editsection": "заһабарилха",
-    "editold": "заһабарилха",
-    "viewsourceold": "эшэ үндэһэндэнь хандаха",
-    "editlink": "заһабарилха",
-    "viewsourcelink": "эшэ үндэһэндэнь хандаха",
-    "editsectionhint": "$1 гэһэн бүлэг заһаха",
-    "toc": "Агуулга",
-    "showtoc": "харуулха",
-    "hidetoc": "нюуха",
-    "collapsible-collapse": "Нюуха",
-    "collapsible-expand": "Дэлгээхэ",
-    "site-atom-feed": "$1 Атом фиид",
-    "red-link-title": "$1 (хуудаһан үгы байна)",
-    "nstab-main": "Хуудаһан",
-    "nstab-user": "Хэрэглэгшын хуудаһан",
-    "nstab-media": "Медиагай хуудаһан",
-    "nstab-special": "Тусхай хуудаһан",
-    "nstab-project": "Түлэблэлгын хуудаһан",
-    "nstab-image": "Файл",
-    "nstab-mediawiki": "Бэшэг",
-    "nstab-template": "Загбар",
-    "nstab-help": "Туһаламжын хуудаһан",
-    "nstab-category": "Категори",
-    "error": "Алдуу",
-    "internalerror": "Доторой алдуу",
-    "internalerror_info": "Доторой алдуу: $1",
-    "welcomeuser": "Морилжо хайрлыт, $1!",
-    "welcomecreation-msg": "Танай данса үүдхэһэн байна.\nТа танай {{SITENAME}} [[Special:Preferences|preferences]]-ые өөршэлхэ боломжотойт.",
-    "yourname": "Хэрэглэгшын нэрэ:",
-    "userlogin-yourname": "Хэрэглэгшын нэрэ:",
-    "userlogin-yourname-ph": "Танай хэрэглэгшын нэрые оруулагты",
-    "createacct-another-username-ph": "Хэрэглэгшын нэрые оруулагты",
-    "yourpassword": "Нюуса үгэ:",
-    "login": "Нэбтэрхэ",
-    "nav-login-createaccount": "Нэбтэрхэ / данса үүдхэхэ",
-    "userlogin": "Нэбтэрхэ / данса үүдхэхэ",
-    "logout": "Гараха",
-    "userlogout": "Гараха",
-    "createaccount": "Данса үүдхэхэ",
-    "gotaccountlink": "Нэбтэрхэ",
-    "loginlanguagelabel": "Хэлэн: $1",
-    "savearticle": "Хуудаһые хадагалха",
-    "showpreview": "Уридшалан хараха",
-    "showdiff": "Хубилалтые харуул",
-    "newarticle": "(Шэнэ)",
-    "template-protected": "(хамгаалалтатай)",
-    "permissionserrorstext-withaction": "Та доро тодорхойлһон $1 ушар шалтагаанһаа боложо, $2 эрхэгүйт.",
-    "rev-delundel": "харуулха/нюуха",
-    "revdel-restore": "харагдасыень хубилгаха",
-    "editundo": "болюулха",
-    "searchmenu-new": "'''Энэ викидэ \"[[:$1]]\" гэһэн хуудаһа үүсхэхэ!''' Мүн олдоһон ондоо хуудаһа харагты.\"",
-    "searchprofile-articles": "Агуулгын хуудаһанууд",
-    "searchprofile-images-tooltip": "Файл хайха",
-    "search-result-size": "$1 (ниитэ $2 үгэ�)",
-    "mypreferences": "Тааруулга",
-    "prefs-datetime": "Огноо ба саг",
-    "youremail": "Сахим шуудан:",
-    "yourrealname": "Бодото нэрэ:",
-    "yourlanguage": "Хэлэн:",
-    "yourgender": "Хүйһыетнай хэн гэжэ заабал болохоб?",
-    "gender-male": "Эрэ хүн",
-    "action-edit": "энэ хуудаһа заһабарилха",
-    "recentchanges": "Һүүлшын хубилалта",
-    "diff": "илгаа",
-    "hist": "түүхэ",
-    "hide": "Нюуха",
-    "recentchangeslinked": "Холбогдохо хубилалта",
-    "recentchangeslinked-toolbox": "Холбогдохо хубилалта",
-    "upload": "Файл ашаалха",
-    "license-header": "Лицензи",
-    "file-anchor-link": "Файл",
-    "filehist": "Файлын түүхэ",
-    "filehist-datetime": "Огноо/Саг",
-    "filehist-user": "Хэрэглэгшэ",
-    "randompage": "Һанамсаргүй хуудаһан",
-    "statistics": "Тоо бүридхэл",
-    "nbytes": "$1 {{PLURAL:$1|байт|байтууд}}",
-    "newpages": "Шэнэ хуудаһанууд",
-    "ancientpages": "Хуушарһан хуудаһан",
-    "move": "Шэлжүүлхэ",
-    "log": "Логнууд",
-    "allpages": "Бүхы хуудаһан",
-    "allarticles": "Бүхы хуудаһан",
-    "categories": "Категоринууд",
-    "mywatchlist": "Ажаглаха зүйл",
-    "watch": "Ажаглаха",
-    "undeletelink": "хараха/һэргээхэ",
-    "blanknamespace": "(Гол)",
-    "mycontris": "Минии оруулһан зүйл",
-    "sp-contributions-talk": "Хэлэлсэл",
-    "whatlinkshere": "Эндэ холбогдоһон хуудаһанууд",
-    "whatlinkshere-page": "Хуудаһан:",
-    "block": "Блок",
-    "change-blocklink": "багса хубилгаха",
-    "contribslink": "γйлэ",
-    "revertmove": "һэргээхэ",
-    "allmessages": "Бүхы зурбас",
-    "allmessagesname": "Нэрэ",
-    "allmessages-language": "Хэлэн:",
-    "thumbnail-more": "Томоруулха",
-    "tooltip-pt-login": "Бидэ та нэбтэрхые хүсэнэбди; гэбэшье, та заататай байна.",
-    "tooltip-pt-logout": "Гараха",
-    "tooltip-ca-talk": "Агуулгын хуудаһанай хэлэлсэл",
-    "tooltip-ca-edit": "Та энэ хуудаһа заһабарилжа боломжотой. \"Уридшалан үзэлхэ\" гэһэн тобшые хэрэглээрэй.",
-    "tooltip-ca-addsection": "Шэнэ хэһэг эхилүүлхэ",
-    "tooltip-ca-history": "Энэ хуудаһанай үмэнэхи заһабаринууд",
-    "tooltip-ca-delete": "энэ хуудаһые усадхаха",
-    "tooltip-search": "{{SITENAME}} сайтһаа бэдэрхэ",
-    "tooltip-search-fulltext": "Хуудаһанһаа бэдэрхэ бэшэбэри",
-    "tooltip-p-logo": "Нюур хуудаһанда ошохо",
-    "tooltip-n-mainpage": "Нюур хуудаһанда ошохо",
-    "tooltip-n-mainpage-description": "Нюур хуудаһанда ошохо",
-    "tooltip-n-portal": "Түһэл, өөрын оруулалта, туһалбари тухай мэдээлэл",
-    "tooltip-n-currentevents": "Мүнөө боложо байгаа үйлэ ябадал тухай һониниие дуулаха",
-    "tooltip-n-recentchanges": "Тус Викиин һүүлшын хубилалтанууд",
-    "tooltip-n-randompage": "Гэнтын хуудаһые нээхэ",
-    "tooltip-n-help": "Туһалалсалгые олохо газар",
-    "tooltip-t-whatlinkshere": "Эндэ холбогдоһон хуудаһануудай жагсаалта",
-    "tooltip-t-recentchangeslinked": "Энэ хуудаһаһаа холбоогдоһон хуудаһуудай шэнэ хубилалтууд",
-    "tooltip-feed-atom": "Тус хуудаһанай Атом фиид",
-    "tooltip-t-upload": "Файл ашаалха",
-    "tooltip-t-specialpages": "Бүхы тусхай хуудаһанай жагсаалта",
-    "tooltip-t-print": "Энэ хуудаһанай хэблэхэ хубилбари",
-    "tooltip-ca-nstab-main": "Үгүүлэлэй хуудаһые үзэхэ",
-    "exif-languagecode": "Хэлэн",
-    "specialpages": "Тусхай хуудаһан"
+       "@metadata": {
+               "authors": [
+                       "Amire80",
+                       "Bjargal",
+                       "Elvonudinium",
+                       "Korol Bumi",
+                       "Soul Train",
+                       "Губин Михаил",
+                       "ОйЛ"
+               ]
+       },
+       "tog-underline": "Холбооһо доогуурнь зураха:",
+       "tog-watchcreations": "Минии үүдхэһэн хуудаһа болон ашаалһан файлыем хинаха жагсаалтада оруула",
+       "tog-watchdefault": "Минии заһаһан хуудаһа болон файлыем хинаха жагсаалтада оруула",
+       "tog-watchmoves": "Минии зөөһэн хуудаһа болон файлыем хинаха жагсаалтада оруула",
+       "tog-watchdeletion": "Минии усадхаһан хуудаһа болон файлыем хинаха жагсаалтада оруула",
+       "tog-minordefault": "Бүхы заһабариие бага зэргын гэжэ үгэгдэмэлөөр тэмдэглэ",
+       "tog-previewontop": "Уридшалан харахые заһабарилха талбарай урда үзүүлэ",
+       "tog-previewonfirst": "Уридшалан харахые эхилжэ заһаха үедэ үзүүлэ",
+       "underline-always": "хододоол",
+       "underline-never": "хэзээшье",
+       "sunday": "Няма",
+       "monday": "Дабаа",
+       "tuesday": "Мягмар",
+       "wednesday": "Һагба",
+       "thursday": "Пүрбэ",
+       "friday": "Баасан",
+       "saturday": "Бямба",
+       "sun": "Ня",
+       "mon": "Да",
+       "tue": "Мя",
+       "wed": "Һа",
+       "thu": "Пү",
+       "fri": "Ба",
+       "sat": "Бя",
+       "january": "Нэгэдүгээр һара",
+       "february": "Хоёрдугаар һара",
+       "march": "Гурбадугаар һара",
+       "april": "Дүрбэдүгээр һара",
+       "may_long": "Табадугаар һара",
+       "june": "Зургадугаар һара",
+       "july": "Долодугаар һара",
+       "august": "Наймадугаар һара",
+       "september": "Юһэдүгээр һара",
+       "october": "Арбадугаар һара",
+       "november": "Арбаннэгэдүгээр һара",
+       "december": "Арбанхоёрдугаар һара",
+       "january-gen": "Нэгэдүгээр һарын",
+       "february-gen": "Хоёрдугаар һарын",
+       "march-gen": "Гурбадугаар һарын",
+       "april-gen": "Дүрбэдүгээр һарын",
+       "may-gen": "Табадугаар һарын",
+       "june-gen": "Зургадугаар һарын",
+       "july-gen": "Долодугаар һарын",
+       "august-gen": "Наймадугаар һарын",
+       "september-gen": "Юһэдүгээр һарын",
+       "october-gen": "Арбадугаар һарын",
+       "november-gen": "Арбаннэгэдүгээр һарын",
+       "december-gen": "Арбанхоёрдугаар һарын",
+       "jan": "1 һара",
+       "feb": "2 һара",
+       "mar": "3 һара",
+       "apr": "4 һара",
+       "may": "5 һара",
+       "jun": "6 һара",
+       "jul": "7 һара",
+       "aug": "8 һара",
+       "sep": "9 һара",
+       "oct": "10 һара",
+       "nov": "11 һара",
+       "dec": "12 һара",
+       "january-date": "1 һарын $1",
+       "february-date": "2 һарын $1",
+       "march-date": "3 һарын $1",
+       "april-date": "4 һарын $1",
+       "may-date": "5 һарын $1",
+       "june-date": "6 һарын $1",
+       "july-date": "7 һарын $1",
+       "august-date": "8 һарын $1",
+       "september-date": "9 һарын $1",
+       "october-date": "10 һарын $1",
+       "november-date": "11 һарын $1",
+       "december-date": "12 һарын $1",
+       "pagecategories": "{{PLURAL:$1|Анги}}",
+       "category_header": "\"$1\" ангиин үгүүлэлнүүд",
+       "hidden-categories": "{{PLURAL:$1|Нюуса анги}}",
+       "cancel": "Болихо",
+       "moredotdotdot": "Үшөө...",
+       "morenotlisted": "Энэ жагсаалта дүүргэһэнгүй.",
+       "mypage": "Хуудаһан",
+       "mytalk": "Хэлэлсэл",
+       "anontalk": "Энэ IP адресаарнь хэлэхэ",
+       "navigation": "Залуурдалга",
+       "and": "&#32;ба",
+       "qbfind": "Хайха",
+       "qbedit": "Заһабарилха",
+       "actions": "γйлэ",
+       "variants": "Хубилбари",
+       "navigation-heading": "Тамаралгын меню",
+       "errorpagetitle": "Алдуу",
+       "tagline": "{{SITENAME}} сайтһаа мэдээлэл",
+       "help": "Туһаламжа",
+       "search": "Хайха",
+       "searchbutton": "Хайлта",
+       "go": "Ябаха",
+       "searcharticle": "Ябаха",
+       "history": "Хуудаһанай түүхэ",
+       "history_short": "Түүхэ",
+       "printableversion": "Хэблэхэ хубилбари",
+       "permalink": "Үргэлжын холбооһон",
+       "print": "Хэблэхэ",
+       "view": "Харуулха",
+       "edit": "Заһабарилха",
+       "create": "Үүдхэхэ",
+       "delete": "Усадхаха",
+       "protect": "Хамгаалха",
+       "protect_change": "Хубилалга",
+       "newpage": "Шэнэ хуудаһан",
+       "talkpage": "Тус хуудаһа хэлэлсэхэ",
+       "talkpagelinktext": "Хэлэлсэхэ",
+       "specialpage": "Тусхай хуудаһан",
+       "personaltools": "Хубиин хэрэгсэлнүүд",
+       "talk": "Хэлэлсэхэ",
+       "views": "Үзэһэн",
+       "toolbox": "Багажа зэбсэг",
+       "projectpage": "Түлэблигэй хуудаһые хараха",
+       "otherlanguages": "Бусад хэлээр",
+       "lastmodifiedat": "Энэ хуудаһанай эгээн һүүлшын хубилалга: $2, $1.",
+       "jumpto": "Шууд ошохо:",
+       "jumptonavigation": "тамаралга",
+       "jumptosearch": "хайха",
+       "pool-errorunknown": "Танигдаагүй алдуу",
+       "aboutsite": "{{SITENAME}} тухай",
+       "aboutpage": "Project:Түлэблиг тухай",
+       "currentevents": "Мүнөө боложо байгаа үйлэ ябадал",
+       "currentevents-url": "Project:Һонин мэдээн",
+       "disclaimers": "Татагалзалнууд",
+       "disclaimerpage": "Project:Ниитэ татагалзал",
+       "mainpage": "Нюур хуудаһан",
+       "mainpage-description": "Нюур хуудаһан",
+       "portal": "Хурал",
+       "portal-url": "Project:Хурал",
+       "privacy": "Хубиин мэдээлэлэй талаар баримталал",
+       "privacypage": "Project:Хубиин мэдээлэлэй талаар баримталал",
+       "ok": "За",
+       "retrievedfrom": "\"$1\" холбооһоо абагдаһан",
+       "editsection": "заһабарилха",
+       "editold": "заһабарилха",
+       "viewsourceold": "эшэ үндэһэндэнь хандаха",
+       "editlink": "заһабарилха",
+       "viewsourcelink": "эшэ үндэһэндэнь хандаха",
+       "editsectionhint": "$1 гэһэн бүлэг заһаха",
+       "toc": "Агуулга",
+       "showtoc": "харуулха",
+       "hidetoc": "нюуха",
+       "collapsible-collapse": "Нюуха",
+       "collapsible-expand": "Дэлгээхэ",
+       "site-atom-feed": "$1 Атом фиид",
+       "red-link-title": "$1 (хуудаһан үгы байна)",
+       "nstab-main": "Хуудаһан",
+       "nstab-user": "Хэрэглэгшын хуудаһан",
+       "nstab-media": "Медиагай хуудаһан",
+       "nstab-special": "Тусхай хуудаһан",
+       "nstab-project": "Түлэблигэй хуудаһан",
+       "nstab-image": "Файл",
+       "nstab-mediawiki": "Бэшэг",
+       "nstab-template": "Загбар",
+       "nstab-help": "Туһаламжын хуудаһан",
+       "nstab-category": "Анги",
+       "error": "Алдуу",
+       "internalerror": "Доторой алдуу",
+       "internalerror_info": "Доторой алдуу: $1",
+       "welcomeuser": "Морилжо хайрлыт, $1!",
+       "welcomecreation-msg": "Танай данса үүдхэһэн байна.\nТа танай {{SITENAME}} [[Special:Preferences|preferences]]-ые өөршэлхэ боломжотойт.",
+       "yourname": "Хэрэглэгшын нэрэ:",
+       "userlogin-yourname": "Хэрэглэгшын нэрэ:",
+       "userlogin-yourname-ph": "Танай хэрэглэгшын нэрые оруулагты",
+       "createacct-another-username-ph": "Хэрэглэгшын нэрые оруулагты",
+       "yourpassword": "Нюуса үгэ:",
+       "login": "Нэбтэрхэ",
+       "nav-login-createaccount": "Нэбтэрхэ / данса үүдхэхэ",
+       "userlogin": "Нэбтэрхэ / данса үүдхэхэ",
+       "logout": "Гараха",
+       "userlogout": "Гараха",
+       "createaccount": "Данса үүдхэхэ",
+       "gotaccountlink": "Нэбтэрхэ",
+       "loginlanguagelabel": "Хэлэн: $1",
+       "pt-userlogout": "Гараха",
+       "watchthis": "Энэ хуудаһые хинаха",
+       "savearticle": "Хуудаһые хадагалха",
+       "showpreview": "Уридшалан хараха",
+       "showdiff": "Хубилалтые харуул",
+       "newarticle": "(Шэнэ)",
+       "editing": "«$1» гэһэн хуудаһые заһабарилжа байна",
+       "creating": "«$1» хуудаһые үүсхэжэ байна",
+       "editingsection": "«$1» гэһэн хуудаһанай бүлэгые заһабарилжа байна",
+       "template-protected": "(хамгаалалтатай)",
+       "permissionserrorstext-withaction": "Та доро тодорхойлһон $1 ушар шалтагаанһаа боложо, $2 эрхэгүйт.",
+       "rev-delundel": "харуулха/нюуха",
+       "revdel-restore": "харагдасыень хубилгаха",
+       "history-title": "«$1» гэһэн хуудаһанай хинаһан түүхэ",
+       "editundo": "болюулха",
+       "searchmenu-new": "<strong>Энэ викидэ \"[[:$1]]\" гэһэн хуудаһые үүсхэхэ!</strong> {{PLURAL:$2|0=|Мүн олдоһон хуудаһые харагты.|Мүн хайлтын дүные харагты.}}",
+       "searchprofile-articles": "Агуулгын хуудаһанууд",
+       "searchprofile-images-tooltip": "Файл хайха",
+       "search-result-size": "$1 (ниитэ $2 үгэ�)",
+       "search-interwiki-more": "(үшөө)",
+       "search-nonefound": "Хайлтада таараһан үрэ дүн олдоһонгүй.",
+       "mypreferences": "Тааруулга",
+       "youremail": "Сахим шуудан:",
+       "yourrealname": "Бодото нэрэ:",
+       "yourlanguage": "Хэлэн:",
+       "yourgender": "Хүйһыетнай хэн гэжэ заабал болохоб?",
+       "gender-male": "Эрэ хүн",
+       "right-move": "Хуудаһануудые зөөхэ",
+       "right-move-rootuserpages": "Хэрэглэгшын үндэһэн хуудаһануудые зөөхэ",
+       "action-edit": "энэ хуудаһа заһабарилха",
+       "action-move": "хуудаһые зөөхэ",
+       "recentchanges": "Һүүлшын хубилалта",
+       "diff": "илгаа",
+       "hist": "түүхэ",
+       "hide": "Нюуха",
+       "recentchangeslinked": "Холбогдохо хубилалта",
+       "recentchangeslinked-toolbox": "Холбогдохо хубилалта",
+       "upload": "Файл ашаалха",
+       "license-header": "Лицензи",
+       "file-anchor-link": "Файл",
+       "filehist": "Файлын түүхэ",
+       "filehist-datetime": "Огноо/Саг",
+       "filehist-user": "Хэрэглэгшэ",
+       "randompage": "Һанамсаргүй хуудаһан",
+       "statistics": "Тоо бүридхэл",
+       "nbytes": "$1 {{PLURAL:$1|байт|байтууд}}",
+       "newpages": "Шэнэ хуудаһанууд",
+       "ancientpages": "Хуушарһан хуудаһан",
+       "move": "Зөөхэ",
+       "log": "Логнууд",
+       "allpages": "Бүхы хуудаһан",
+       "allarticles": "Бүхы хуудаһан",
+       "categories": "Анги",
+       "mywatchlist": "Ажаглаха зүйл",
+       "watch": "Ажаглаха",
+       "watchthispage": "Энэ хуудаһые хинаха",
+       "undeletelink": "хараха/һэргээхэ",
+       "blanknamespace": "(Гол)",
+       "mycontris": "Минии оруулһан зүйл",
+       "sp-contributions-talk": "Хэлэлсэл",
+       "whatlinkshere": "Эндэ холбогдоһон хуудаһанууд",
+       "whatlinkshere-page": "Хуудаһан:",
+       "block": "Блок",
+       "change-blocklink": "багса хубилгаха",
+       "contribslink": "γйлэ",
+       "move-page": "«$1» хуудаһые зөөхэ",
+       "move-watch": "Энэ хуудаһые хинаха",
+       "revertmove": "һэргээхэ",
+       "allmessages": "Бүхы зурбас",
+       "allmessagesname": "Нэрэ",
+       "allmessages-language": "Хэлэн:",
+       "thumbnail-more": "Томоруулха",
+       "tooltip-pt-login": "Бидэ та нэбтэрхые хүсэнэбди; гэбэшье, та заататай байна.",
+       "tooltip-pt-logout": "Гараха",
+       "tooltip-ca-talk": "Агуулгын хуудаһанай хэлэлсэл",
+       "tooltip-ca-edit": "Та энэ хуудаһа заһабарилжа боломжотой. \"Уридшалан үзэлхэ\" гэһэн тобшые хэрэглээрэй.",
+       "tooltip-ca-addsection": "Шэнэ хэһэг эхилүүлхэ",
+       "tooltip-ca-history": "Энэ хуудаһанай үмэнэхи заһабаринууд",
+       "tooltip-ca-delete": "энэ хуудаһые усадхаха",
+       "tooltip-search": "{{SITENAME}} сайтһаа бэдэрхэ",
+       "tooltip-search-fulltext": "Хуудаһанһаа бэдэрхэ бэшэбэри",
+       "tooltip-p-logo": "Нюур хуудаһада ошохо",
+       "tooltip-n-mainpage": "Нюур хуудаһада ошохо",
+       "tooltip-n-mainpage-description": "Нюур хуудаһада ошохо",
+       "tooltip-n-portal": "Түһэл, өөрын оруулалта, туһалбари тухай мэдээлэл",
+       "tooltip-n-currentevents": "Мүнөө боложо байгаа үйлэ ябадал тухай һониниие дуулаха",
+       "tooltip-n-recentchanges": "Тус Викиин һүүлшын хубилалтанууд",
+       "tooltip-n-randompage": "Гэнтын хуудаһые нээхэ",
+       "tooltip-n-help": "Туһалалсалгые олохо газар",
+       "tooltip-t-whatlinkshere": "Эндэ холбогдоһон хуудаһануудай жагсаалта",
+       "tooltip-t-recentchangeslinked": "Энэ хуудаһаһаа холбоогдоһон хуудаһуудай шэнэ хубилалтууд",
+       "tooltip-feed-atom": "Тус хуудаһанай Атом фиид",
+       "tooltip-t-upload": "Файл ашаалха",
+       "tooltip-t-specialpages": "Бүхы тусхай хуудаһанай жагсаалта",
+       "tooltip-t-print": "Энэ хуудаһанай хэблэхэ хубилбари",
+       "tooltip-ca-nstab-main": "Үгүүлэлэй хуудаһые үзэхэ",
+       "exif-languagecode": "Хэлэн",
+       "exif-iimcategory": "Анги",
+       "specialpages": "Тусхай хуудаһан"
 }
index 33eeb6e..880f255 100644 (file)
@@ -59,6 +59,7 @@
        "tog-watchdefault": "Afegeix les pàgines que vagi editant a la llista de seguiment",
        "tog-watchmoves": "Afegeix les pàgines que reanomeni a la llista de seguiment",
        "tog-watchdeletion": "Afegeix les pàgines que elimini a la llista de seguiment",
+       "tog-watchrollback": "Afegeix les pàgines on he realitzat una reversió a la llista de seguiment",
        "tog-minordefault": "Marca totes les contribucions com a edicions menors per defecte",
        "tog-previewontop": "Mostra una previsualització abans del quadre d'edició",
        "tog-previewonfirst": "Mostra una previsualització en la primera modificació",
@@ -77,7 +78,7 @@
        "tog-watchlisthideliu": "Amaga a la llista les edicions d'usuaris registrats",
        "tog-watchlisthideanons": "Amaga a la llista les edicions d'usuaris anònims",
        "tog-watchlisthidepatrolled": "Amaga edicions patrullades de la llista de seguiment",
-       "tog-ccmeonemails": "Envia'm còpia dels missatges que enviï als altres usuaris",
+       "tog-ccmeonemails": "Envia’m còpies dels missatges que enviï als altres usuaris",
        "tog-diffonly": "Amaga el contingut de la pàgina davall de la taula de diferències",
        "tog-showhiddencats": "Mostra les categories ocultes",
        "tog-norollbackdiff": "Omet la pàgina de diferències després de realitzar una reversió",
        "otherlanguages": "En altres llengües",
        "redirectedfrom": "(S'ha redirigit des de: $1)",
        "redirectpagesub": "Pàgina de redirecció",
+       "redirectto": "Redirigeix a:",
        "lastmodifiedat": "Darrera modificació de la pàgina: $1 a les $2.",
        "viewcount": "S'ha visitat aquesta pàgina {{PLURAL:$1|una vegada|$1 vegades}}.",
        "protectedpage": "Pàgina protegida",
        "viewyourtext": "Vostè pot veure i copiar la font de ' ' les modificacions ' ' d'aquesta pàgina:",
        "protectedinterface": "Aquesta pàgina proporciona el text de la interfície del software d'aquest wiki i està protegida per evitar els abusos.\nPer afegir o canviar les traduccions per a tots els wikis, feu servir [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
        "editinginterface": "'''Avís:''' Esteu editant una pàgina que conté cadenes de text per a la interfície d'aquest programari. Tingueu en compte que els canvis que es fan a aquesta pàgina afecten a l'aparença de la interfície d'altres usuaris. Per afegir o modificar traduccions a totes les wikis, plantegeu-vos utilitzar la [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
+       "translateinterface": "Per afegir o canviar traduccions per a tots els wikis, utilitzeu [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
        "cascadeprotected": "Aquesta pàgina està protegida i no es pot modificar perquè està inclosa en {{PLURAL:$1|la següent pàgina, que té|les següents pàgines, que tenen}} activada l'opció de «protecció en cascada»:\n$2",
        "namespaceprotected": "No teniu permís per a modificar pàgines en l'espai de noms '''$1'''.",
        "customcssprotected": "No teniu permisos per editar la pàgina CSS perquè conté els paràmetres personals d'un altre usuari.",
        "gotaccount": "Ja teniu un compte? $1.",
        "gotaccountlink": "Inicia una sessió",
        "userlogin-resetlink": "Heu oblidat les vostres dades d'accés?",
-       "userlogin-resetpassword-link": "Has oblidat la teva contrasenya?",
+       "userlogin-resetpassword-link": "Heu oblidat la contrasenya?",
        "userlogin-helplink2": "Ajuda amb el registre",
        "userlogin-loggedin": "Heu iniciat una sessió com {{GENDER:$1|$1}}.\nFeu servir el formulari de sota per iniciar la sessió com un altre usuari.",
        "userlogin-createanother": "Crea un altre compte",
        "createaccount-text": "Algú ha creat un compte d'usuari anomenat $2 al projecte {{SITENAME}}\n($4) amb la vostra adreça de correu electrònic. La contrasenya per a l'usuari «$2» és «$3». Hauríeu d'accedir al compte i canviar-vos aquesta contrasenya quan abans millor.\n\nSi no hi teniu cap relació i aquest compte s'ha creat per error, simplement ignoreu el missatge.",
        "login-throttled": "Heu realitzat massa intents d'accés a la sessió.\nEspereu $1 abans de tornar-ho a provar.",
        "login-abort-generic": "L'entrada al compte d'usuari no ha reeixit - Abortada",
+       "login-migrated-generic": "S'ha migrat el vostre compte, i el vostre nom d'usuari ja no existeix en aquest wiki.",
        "loginlanguagelabel": "Llengua: $1",
        "suspicious-userlogout": "S'ha denegat la vostra petició per tancar la sessió ja què sembla que va ser enviada per un navegador defectuós o un proxy cau.",
        "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.",
        "passwordreset-emailsent-capture": "S'ha enviat un correu electrònic de reinicialització de contrasenya, tal com es mostra a continuació.",
        "passwordreset-emailerror-capture": "S'ha generat un correu electrònic de renovació de contrasenya, que es mostra a continuació, però ha fallat l'enviament a {{GENDER:$2:l'usuari|la usuària}}: $1",
        "changeemail": "Canvi de correu electrònic",
-       "changeemail-header": "Canvi de l'adreça de correu electrònic del compte",
        "changeemail-text": "Completeu el següent formulari per canviar la vostra adreça de correu electrònic. Haureu d'introduir la contrasenya per confirmar el canvi.",
        "changeemail-no-info": "Heu d'entrar en un compte d'usuari per accedir directament a aquesta pàgina.",
        "changeemail-oldemail": "Adreça de correu electrònic actual:",
        "changeemail-none": "(cap)",
        "changeemail-password": "La vostra contrasenya a {{SITENAME}}:",
        "changeemail-submit": "Canvia de correu electrònic",
-       "changeemail-cancel": "Cancel·la",
        "changeemail-throttled": "Heu realitzat massa intents d'inici de sessió.\nEspereu $1 abans de tornar-ho a provar.",
        "resettokens": "Reinicia els testimonis",
        "resettokens-text": "Des d'aquí podeu reiniciar els testimonis que permeten l'accés a certes dades privades associades amb el vostre compte.\n\nHo hauríeu de fer si accidentalment els heu compartit amb algú o si el vostre compte ha estat compromès.",
        "showpreview": "Mostra una previsualització",
        "showdiff": "Mostra els canvis",
        "blankarticle": "<strong>Avís:</strong> La pàgina que esteu creant és en blanc.\nSi feu clic a «{{int:savearticle}}» un altre cop, la pàgina es crearà sense cap contingut.",
-       "anoneditwarning": "'''Avís:''' No esteu identificats amb un compte d'usuari. Es mostrarà la vostra adreça IP en l'historial d'aquesta pàgina.",
+       "anoneditwarning": "<strong>Avís</strong>: No heu iniciat cap sessió. Per tant, la vostra adreça IP serà visible públicament si feu qualsevol modificació. Si <strong>[$1 inicieu una sessió]</strong> o <strong>[$2 creeu un compte]</strong>, les vostres edicions s'atribuiran al vostre nom d'usuari, juntament amb altres beneficis.",
        "anonpreviewwarning": "''No us heu identificat amb un compte d'usuari. La vostra adreça IP quedarà registrada a l'historial d'aquesta pàgina.''",
        "missingsummary": "'''Recordatori''': Heu deixat en blanc el resum de l'edició. Si torneu a clicar al botó de desar, l'edició es guardarà sense resum.",
        "missingcommenttext": "Introduïu un comentari a continuació.",
        "mergehistory-same-destination": "Les pàgines d'origen i de destinació no poden ser la mateixa",
        "mergehistory-reason": "Motiu:",
        "mergelog": "Registre de fusions",
-       "pagemerge-logentry": "s'ha fusionat [[$1]] en [[$2]] (revisions fins a $3)",
        "revertmerge": "Desfusiona",
        "mergelogpagetext": "A sota hi ha una llista de les fusions més recents d'una pàgina d'historial en una altra.",
        "history-title": "«$1»: Historial de revisions",
        "searchall": "tots",
        "showingresults": "Tot seguit es {{PLURAL:$1|mostra el resultat|mostren els <b>$1</b> resultats començant pel número <b>$2</b>}}.",
        "showingresultsinrange": "Es mostren a continuació fins a {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resultats}} de #<strong>$2</strong> a #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' de '''$3'''|Resultats '''$1 - $2''' de '''$3'''}} per '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Resultat <strong>$1</strong> de <strong>$3</strong>|Resultats <strong>$1 - $2</strong> de <strong>$3</strong>}}",
        "search-nonefound": "La cerca no ha donat cap resultat.",
        "powersearch-legend": "Cerca avançada",
        "powersearch-ns": "Cerca als espais de noms:",
        "gender-female": "Femení",
        "prefs-help-gender": "Opcional: s'usa perquè el programari se us adreci amb missatges amb el gènere adient. Aquesta informació serà pública.",
        "email": "Correu electrònic",
-       "prefs-help-realname": "<nowiki>*</nowiki> Nom real (opcional): si escolliu donar aquesta informació es utilitzarà per a donar-vos l’atribució de la vostra feina.",
+       "prefs-help-realname": "El nom real és opcional.\nSi escolliu donar aquesta informació, s'utilitzarà per a donar-vos l'atribució del vostre treball.",
        "prefs-help-email": "L'adreça electrònica és opcional, però permet l'enviament d'una nova contrasenya en cas que oblideu l'actual.",
        "prefs-help-email-others": "També podeu optar per deixar que els altres contactin amb vós a través de la pàgina personal de discussió, sense necessitat de desvetllar la vostra identitat.",
        "prefs-help-email-required": "Cal una adreça de correu electrònic.",
        "prefs-tokenwatchlist": "Testimoni",
        "prefs-diffs": "Difs",
        "prefs-help-prefershttps": "Aquesta preferència tindrà efecte quan inicieu una nova sessió.",
+       "prefswarning-warning": "Heu fet canvis a les preferències que encara no s'han desat.\nSi abandoneu la pàgina sense fer clic a «$1», les preferències no s'actualitzaran.",
        "prefs-tabs-navigation-hint": "Consell: Podeu utilitzar les tecles de cursor de dreta i esquerra per a navegar entre les pestanyes.",
        "email-address-validity-valid": "L'adreça de correu electrònic sembla vàlida",
        "email-address-validity-invalid": "Escriviu una adreça vàlida de correu electrònic",
-       "userrights": "Gestió dels permisos d'usuari",
+       "userrights": "Gestió dels permisos dusuari",
        "userrights-lookup-user": "Gestiona els grups d'usuari",
        "userrights-user-editname": "Introduïu un nom d'usuari:",
        "editusergroup": "Edita els grups d'usuaris",
        "randomincategory-invalidcategory": "«$1» no és un nom de categoria vàlid.",
        "randomincategory-nopages": "No hi ha pàgines a la categoria [[:Category:$1|$1]].",
        "randomincategory-category": "Categoria:",
+       "randomincategory-legend": "Pàgina a l’atzar en la categoria",
        "randomredirect": "Redirecció a l'atzar",
        "randomredirect-nopages": "No hi ha cap redirecció a l'espai de noms «$1».",
        "statistics": "Estadístiques",
        "statistics-header-pages": "Estadístiques de pàgines",
        "statistics-header-edits": "Estadístiques d'edicions",
-       "statistics-header-views": "Visualitza estadístiques",
        "statistics-header-users": "Estadístiques d'usuari",
        "statistics-header-hooks": "Altres estadístiques",
        "statistics-articles": "Pàgines de contingut",
        "statistics-files": "Fitxers carregats",
        "statistics-edits": "Edicions en pàgines des que el projecte {{SITENAME}} fou instal·lat",
        "statistics-edits-average": "Edicions per pàgina de mitjana",
-       "statistics-views-total": "Visualitzacions totals",
-       "statistics-views-total-desc": "No hom inclou l'accès a pàgines inexistents o pàgines especials",
-       "statistics-views-peredit": "Visualitzacions per modificació",
        "statistics-users": "[[Special:ListUsers|Usuaris]] registrats",
        "statistics-users-active": "Usuaris actius",
        "statistics-users-active-desc": "Usuaris que han dut a terme alguna acció en {{PLURAL:$1|l'últim dia|els últims $1 dies}}",
-       "statistics-mostpopular": "Pàgines més visualitzades",
        "pageswithprop": "Pàgines amb una propietat de pàgina",
        "pageswithprop-legend": "Pàgines amb una propietat de pàgina",
        "pageswithprop-text": "Aquesta pàgina llista les pàgines que utilitzen una propietat de pàgina en particular.",
        "uncategorizedtemplates": "Plantilles sense categoria",
        "unusedcategories": "Categories sense cap ús",
        "unusedimages": "Fitxers no utilitzats",
-       "popularpages": "Pàgines populars",
        "wantedcategories": "Categories demanades",
        "wantedpages": "Pàgines demanades",
        "wantedpages-badtitle": "Títol invàlid al conjunt de resultats: $1",
        "pager-older-n": "{{PLURAL:$1|anterior|$1 anteriors}}",
        "suppress": "Oversight",
        "querypage-disabled": "Aquesta pàgina especial està desactivada per a no perjudicar el rendiment.",
+       "apihelp": "Ajuda de l'API",
+       "apihelp-no-such-module": "No s'ha trobat el mòdul \"$1\".",
        "booksources": "Obres de referència",
        "booksources-search-legend": "Cerca fonts de llibres",
-       "booksources-go": "Vés-hi",
+       "booksources-search": "Cerca",
        "booksources-text": "A sota hi ha una llista d'enllaços d'altres llocs que venen llibres nous i de segona mà, i també podrien tenir més informació dels llibres que esteu cercant:",
        "booksources-invalid-isbn": "El codi ISBN donat no és vàlid. Comproveu si l'heu copiat correctament.",
        "specialloguserlabel": "Realitzador:",
        "noindex-category-desc": "La pàgina conté una paraula màgica <code><nowiki>__NOINDEX__</nowiki></code> (i és en un espai de noms on està permesa) i per tant no està indexada per robots.",
        "index-category-desc": "La pàgina conté un <code><nowiki>__INDEX__</nowiki></code> (i és en un espai de noms on està permès) i per tant està indexat per robots quan normalment no ho seria.",
        "post-expand-template-inclusion-category-desc": "La mida de la pàgina és més gran que <code>$wgMaxArticleSize</code> un cop expandides totes les plantilles, per tant algunes plantilles no s'han expandit.",
-       "post-expand-template-argument-category-desc": "Després d'expandir un argument de plantilla (alguna cosa entre claus triples, com <code>{{{Això}}}</code>), la pàgina és més gran que <code>$wgMaxArticleSize</code>.",
+       "post-expand-template-argument-category-desc": "La pàgina és més gran que <code>$wgMaxArticleSize</code> després d'expandir un argument de plantilla (quelcom entre claus triples, com ara <code>{{{Foo}}}</code>).",
        "expensive-parserfunction-category-desc": "La pàgina utilitza massa funcions d'analitzador costoses (com <code>#ifexist</code>). Vegeu [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "broken-file-category-desc": "La pàgina conté un enllaç de fitxer trencat (un enllaç per inserir un fitxer quan aquest fitxer no existeix).",
-       "hidden-category-category-desc": "Aquesta és una categoria que conté <code><nowiki>__HIDDENCAT__</nowiki></code>, que impedeix que aparegui en la caixa d'enllaços de categoria a les pàgines, per defecte.",
+       "hidden-category-category-desc": "La categoria conté <code><nowiki>__HIDDENCAT__</nowiki></code> en el contingut de la pàgina, fet que impedeix que aparegui en la caixa d'enllaços de categoria a les pàgines per defecte.",
        "trackingcategories-nodesc": "Sense descripció disponible.",
        "trackingcategories-disabled": "La categoria està inhabilitada",
        "mailnologin": "Cap adreça de remitent",
        "emailsubject": "Assumpte:",
        "emailmessage": "Missatge:",
        "emailsend": "Envia",
-       "emailccme": "Envia'm una còpia del meu missatge.",
+       "emailccme": "Enviam una còpia del meu missatge.",
        "emailccsubject": "Còpia del vostre missatge a $1: $2",
        "emailsent": "Correu electrònic enviat",
        "emailsenttext": "S'ha enviat el vostre correu electrònic.",
        "watchlist-details": "Teniu $1 {{PLURAL:$1|pàgina|pàgines}} a la llista de seguiment, sense comptar les pàgines de discussió.",
        "wlheader-enotif": "La notificació per correu electrònic està habilitada.",
        "wlheader-showupdated": "Les pàgines que s'han canviat des de la vostra darrera visita es mostren en '''negreta'''.",
-       "wlnote": "A sota hi ha {{PLURAL:$1|el darrer canvi|els darrers '''$1''' canvis}} en {{PLURAL:$2|la darrera hora|les  '''$2''' darreres hores}}, a $4 del $3.",
-       "wlshowlast": "<small>- Mostra les darreres $1 hores, els darrers $2 dies o $3</small>",
+       "wlnote": "A sota hi ha {{PLURAL:$1|el darrer canvi|els darrers <strong>$1</strong> canvis}} en {{PLURAL:$2|la darrera hora|les <strong>$2</strong> darreres hores}}, a $4 del $3.",
+       "wlshowlast": "Mostra les darreres $1 hores, els darrers $2 dies",
        "watchlist-options": "Opcions de la llista de seguiment",
        "watching": "S'està vigilant...",
        "unwatching": "S'està desatenent...",
        "exbeforeblank": "el contingut abans de buidar era: '$1'",
        "delete-confirm": "Elimina «$1»",
        "delete-legend": "Elimina",
-       "historywarning": "'''Atenció:''' La pàgina que esteu a punt d'eliminar té un historial amb $1 {{PLURAL:$1|versió|versions}}, aproximadament:",
+       "historywarning": "<strong>Avís:</strong> la pàgina que esteu a punt d'eliminar té un historial amb $1 {{PLURAL:$1|revisió|revisions}}:",
        "confirmdeletetext": "Esteu a punt d'esborrar de forma permanent una pàgina o imatge i tot el seu historial de la base de dades.\nConfirmeu que realment ho voleu fer, que enteneu les\nconseqüències, i que el que esteu fent està d'acord amb la [[{{MediaWiki:Policy-url}}|política]] del projecte.",
-       "actioncomplete": "S'ha realitzat l'acció de manera satisfactòria.",
+       "actioncomplete": "Acció realitzada",
        "actionfailed": "L'acció ha fallat",
        "deletedtext": "S'ha suprimit «$1».\nVegeu $2 per a un registre dels esborrats més recents.",
        "dellogpage": "Registre d'eliminació",
        "delete-edit-reasonlist": "Edita els motius d'eliminació",
        "delete-toobig": "Aquesta pàgina té un historial d'edicions molt gran, amb més de $1 {{PLURAL:$1|canvi|canvis}}. L'eliminació d'aquestes pàgines està restringida per a prevenir que hi pugui haver un desajustament seriós de la base de dades de tot el projecte {{SITENAME}} per accident.",
        "delete-warning-toobig": "Aquesta pàgina té un historial d'edicions molt gran, amb més de $1 {{PLURAL:$1|canvi|canvis}}. Eliminar-la podria suposar un seriós desajustament de la base de dades de tot el projecte {{SITENAME}}; aneu en compte abans dur a terme l'acció.",
+       "deleteprotected": "No podeu eliminar la pàgina perquè ha estat protegida.",
        "deleting-backlinks-warning": "'''Avís:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Altres pàgines]] enllacen o transclouen de la pàgina que esteu a punt de suprimir.",
        "rollback": "Reverteix edicions",
        "rollback_short": "Revoca",
        "protect-othertime": "Un altre termini:",
        "protect-othertime-op": "un altre termini",
        "protect-existing-expiry": "Data d'expiració existent: $2 a les $3",
+       "protect-existing-expiry-infinity": "Temps d'expiració existent: infinit",
        "protect-otherreason": "Motiu diferent o addicional:",
        "protect-otherreason-op": "Altres motius",
        "protect-dropdown": "*Motius comuns de protecció\n** Vandalisme excessiu\n** Spam excessiu\n** Guerra d'edicions improductiva\n** Pàgina amb alt trànsit",
        "namespace_association": "Espai de noms associat",
        "tooltip-namespace_association": "Marqueu aquesta casella per incloure l'espai de noms de discussió o de no discussió associat a l'espai de noms seleccionat",
        "blanknamespace": "(Principal)",
-       "contributions": "Contribucions de {{GENDER:$1|l'usuari|la usuària}}",
+       "contributions": "Contribucions de {{GENDER:$1|lusuari|la usuària}}",
        "contributions-title": "Contribucions de l'usuari $1",
        "mycontris": "Contribucions",
        "contribsub2": "Per a {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "El compte d'usuari «$1» no està registrat.",
-       "nocontribs": "No s'ha trobat canvis que encaixessin amb aquests criteris.",
+       "nocontribs": "No s’ha trobat cap canvi que encaixessi amb aquests criteris.",
        "uctop": "(actual)",
        "month": "Mes (i anteriors):",
        "year": "Any (i anteriors):",
        "autoblockid": "Autoblocatge #$1",
        "block": "Blocatge d'usuaris",
        "unblock": "Desblocatge d'usuaris",
-       "blockip": "Bloqueig d'usuaris",
+       "blockip": "Bloca {{GENDER:$1|l'usuari|l'usuària}}",
        "blockip-legend": "Bloca l'usuari",
        "blockiptext": "Empreu el següent formulari per blocar l'accés\nd'escriptura des d'una adreça IP específica o des d'un usuari determinat.\naixò només s'hauria de fer per prevenir el vandalisme, i\nd'acord amb la [[{{MediaWiki:Policy-url}}|política del projecte]].\nEmpleneu el diàleg de sota amb un motiu específic (per exemple, citant\nquines pàgines en concret estan sent vandalitzades).",
        "ipaddressorusername": "Adreça IP o nom de l'usuari",
        "badipaddress": "L'adreça IP no té el format correcte.",
        "blockipsuccesssub": "S'ha blocat amb èxit",
        "blockipsuccesstext": "S'ha {{GENDER:$1|blocat|blocada}} [[Special:Contributions/$1|$1]] .<br />\nVegeu la [[Special:BlockList|llista de bloqueigs]] per revisar-los.",
-       "ipb-blockingself": "Esteu a punt de blocar-vos a vós mateix! Esteu segurs de voler-ho fer?",
-       "ipb-confirmhideuser": "Esteu a punt de bloquejar un usuari que està marcat amb l'opció «amaga l'usuari». Això suprimirà el seu nom a totes les llistes i registres. Esteu segurs de voler-ho fer?",
+       "ipb-blockingself": "Esteu a punt de blocar el vostre propi compte! Esteu segur de voler-ho fer?",
+       "ipb-confirmhideuser": "Esteu a punt de blocar un usuari amb l'opció d'amagar el seu nom. Això suprimirà el seu nom a totes les llistes i registres. Esteu segur de voler-ho fer?",
        "ipb-confirmaction": "Si esteu segur que voleu fer-ho, marqueu el camp «{{int:ipb-confirm}}» a la part inferior.",
        "ipb-edit-dropdown": "Edita les raons per a blocar",
        "ipb-unblock-addr": "Desbloca $1",
        "ipb-unblock": "Desbloca un usuari o una adreça IP",
        "ipb-blocklist": "Llista els bloquejos existents",
-       "ipb-blocklist-contribs": "Contribucions de $1",
+       "ipb-blocklist-contribs": "Contribucions de {{GENDER:$1|$1}}",
        "unblockip": "Desbloca l'usuari",
        "unblockiptext": "Empreu el següent formulari per restaurar\nl'accés a l'escriptura a una adreça IP o un usuari prèviament bloquejat.",
        "ipusubmit": "Desbloca aquesta adreça",
        "unblocked": "S'ha desbloquejat l'{{GENDER:$1|usuari|usuària}} [[User:$1|$1]]",
        "unblocked-range": "s'ha desblocat $1",
        "unblocked-id": "S'ha eliminat el bloqueig de $1",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] ha estat desbloquejat.",
        "blocklist": "Usuaris blocats",
        "ipblocklist": "Usuaris blocats",
        "ipblocklist-legend": "Cerca un usuari blocat",
        "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]].",
+       "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-interwiki-templates": "Inclou totes les plantilles",
        "import-interwiki-submit": "Importa",
        "pageinfo-robot-policy": "Indexació per robots",
        "pageinfo-robot-index": "Permès",
        "pageinfo-robot-noindex": "No permès",
-       "pageinfo-views": "Número de visites",
        "pageinfo-watchers": "Número d'usuaris que vigilen la pàgina",
        "pageinfo-few-watchers": "Menys de $1 {{PLURAL:$1|observador|observadors}}",
        "pageinfo-redirects-name": "Nombre de redireccions a aquesta pàgina",
        "exif-urgency-low": "Baixa ($1)",
        "exif-urgency-high": "Alta ($1)",
        "exif-urgency-other": "Prioritat definida per l'usuari ($1)",
-       "watchlistall2": "totes",
        "namespacesall": "tots",
        "monthsall": "tots",
        "confirmemail": "Confirma l'adreça de correu electrònic",
        "table_pager_limit": "Mostra $1 elements per pàgina",
        "table_pager_limit_label": "Ítems per pàgina:",
        "table_pager_limit_submit": "Vés-hi",
-       "table_pager_empty": "Sense resultats",
+       "table_pager_empty": "No hi ha resultats",
        "autosumm-blank": "Pàgina blanquejada",
        "autosumm-replace": "Contingut canviat per «$1».",
        "autoredircomment": "Redirecció a [[$1]]",
        "specialpages-group-changes": "Canvis recents i registres",
        "specialpages-group-media": "Informes multimèdia i càrregues",
        "specialpages-group-users": "Usuaris i drets",
-       "specialpages-group-highuse": "Pàgines d'alt ús",
+       "specialpages-group-highuse": "Pàgines d’ús elevat",
        "specialpages-group-pages": "Llistes de pàgines",
-       "specialpages-group-pagetools": "Pàgines d'eines",
+       "specialpages-group-pagetools": "Eines per a les pàgines",
        "specialpages-group-wiki": "Dades i eines",
        "specialpages-group-redirects": "Pàgines especials de redirecció",
        "specialpages-group-spam": "Eines de spam",
        "logentry-rights-rights": "$1 {{GENDER:$2|ha canviat}} la pertinença de grup per $3 de $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ha canviat}} la pertinença de grup per $3",
        "logentry-rights-autopromote": "$1 ha estat {{GENDER:$2|promogut}} automàticament de $4 a $5",
+       "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",
        "rightsnone": "(cap)",
+       "revdelete-summary": "el resum d'edició",
        "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:",
        "log-name-pagelang": "Canvia el registre de llengua",
        "log-description-pagelang": "Aquest és un registre dels canvis en les llengües de les pàgines.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha canviat}} la llengua de la pàgina per a $3 de $4 a $5.",
+       "default-skin-not-found": "Òndia! L'aparença per defecte per al wiki, definit en <code dir=\"ltr\">$wgDefaultSkin</code> com <code>$1</code>, no està disponible.\n\nLa vostra instal·lació sembla que inclou les següents aparences. Consulteu [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Configuració d'aparences] per a la informació de com habilitar-les i triar-ne el valor per defecte.\n\n$2\n\n; Si heu acabat d'instal·lar MediaWiki:\n: Probablement l'instal·làveu des de git, o directament des del codi font utilitzant algun altre mètode. Això és l'esperat. Intenteu instal·lar algunes aparences des del [https://www.mediawiki.org/wiki/Category:All_skins directori d'aparences de mediawiki.org], per:\n: * Descarregar l'[https://www.mediawiki.org/wiki/Download instal·lador tarball], que ve amb diverses aparences i ampliacions. Podeu copiar i enganxar el directori <code>skins/</code> des d'aquí.\n: * Clonar un dels repositoris <code>mediawiki/skins/*</code> a través de git en el directori <code dir=\"ltr\">skins/</code> de la vostra instal·lació de MediaWiki.\n: Fent això no s'hauria d'interferir amb el vostre dipòsit git si sou un desenvolupador de MediaWiki.\n\n; Si només heu actualitzat MediaWiki:\n: Per MediaWiki 1.24 i posteriors ja no permet aparences instal·lades automàticament (consulteu [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Aparences autodiscovery]). Podeu enganxar les línies següents en <code>LocalSettings.php</code> per permetre totes les aparences instal·lades actualment:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si només heu modificat <code>LocalSettings.php</code>:\n: Reviseu els noms de l'aparença per errors tipogràfics.",
+       "default-skin-not-found-no-skins": "Òndia! L'aparença per defecte per al wiki, definit en <code>$wgDefaultSkin</code> com <code>$1</code>, no està disponible.\n\nNo teniu cap aparença instal·lada.\n\n\n; Si heu acabat d'instal·lar o actualitzar MediaWiki:\n: Probablement l'heu instal·lat des de git, o directament des del codi font utilitzant algun altre mètode. Això és l'esperat. Per MediaWiki 1.24 i posteriors ja no s'inclouen aparences en el repositori principal. Proveu d'instal·lar algunes aparences des del [https://www.mediawiki.org/wiki/Category:All_skins directori d'aparences de mediawiki.org], per:\n: * Descarregar l'[https://www.mediawiki.org/wiki/Download instal·lador tarball], que ve amb diverses aparences i ampliacions. Podeu copiar i enganxar el directori <code>skins/</code> des d'aquí.\n: * Clonar un dels repositoris <code>mediawiki/skins/*</code> a través de git en el directori <code dir=\"ltr\">skins/</code> de la vostra instal·lació de MediaWiki.\n: Fent això no s'hauria d'interferir amb el vostre dipòsit git si sou un desenvolupador de MediaWiki. Consulteu [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: configuració de l'aparença] per informació de com permetre aparences i triar-ne per defecte.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (habilitat)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''inhabilitat''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''inhabilitat''')",
+       "mediastatistics": "Estadístiques dels multimèdia",
+       "mediastatistics-summary": "Les estadístiques sobre els tipus de fitxers pujats. Això només inclou la versió més recent d'un fitxer. S'exclouen les versions antigues o eliminades dels fitxers.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "Tipus MIME",
+       "mediastatistics-table-extensions": "Extensions possibles",
+       "mediastatistics-table-count": "Nombre de fitxers",
+       "mediastatistics-table-totalbytes": "Mida combinada",
+       "mediastatistics-header-unknown": "Desconegut",
+       "mediastatistics-header-bitmap": "Imatges de mapa de bits",
+       "mediastatistics-header-drawing": "Dibuixos (imatges vectorials)",
+       "mediastatistics-header-audio": "Àudio",
+       "mediastatistics-header-video": "Vídeos",
+       "mediastatistics-header-multimedia": "Multimèdia enriquida",
+       "mediastatistics-header-office": "Oficina",
+       "mediastatistics-header-text": "Textual",
+       "mediastatistics-header-executable": "Executables",
+       "mediastatistics-header-archive": "Formats comprimits",
+       "json-warn-trailing-comma": "$1 al final {{PLURAL:$1|coma ha estat eliminada|comes han estat eliminades}} de JSON",
+       "json-error-unknown": "S'ha produït un error amb el JSON. Error: $1",
+       "json-error-depth": "S'ha superat la profunditat màxima de pila",
+       "json-error-state-mismatch": "JSON incorrecte o no vàlid",
+       "json-error-ctrl-char": "Error de caràcter de control, possiblement incorrectament codificat",
+       "json-error-syntax": "Error de sintaxi",
+       "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"
 }
index e6b9022..1ce81c6 100644 (file)
@@ -1,85 +1,85 @@
 {
-    "@metadata": {
-        "authors": [
-            "Weekeejames"
-        ]
-    },
-    "january": "Enero",
-    "february": "Febrero",
-    "march": "Marzo",
-    "april": "Abril",
-    "may_long": "Mayo",
-    "june": "Junio",
-    "july": "Julio",
-    "august": "Agosto",
-    "september": "Septiembre",
-    "october": "Octubre",
-    "november": "Noviembre",
-    "december": "Diciembre",
-    "april-gen": "Abril",
-    "august-gen": "Agosto",
-    "december-gen": "Diciembre",
-    "apr": "Abr",
-    "aug": "Ago",
-    "dec": "Dic",
-    "category_header": "Maga articulo na categoria \"$1\"",
-    "about": "Acerca de",
-    "article": "El laman del pagina",
-    "tagline": "Estava na {{SITENAME}}",
-    "help": "Ayuda",
-    "search": "Busqueda",
-    "searchbutton": "Busca",
-    "searcharticle": "Anda",
-    "history_short": "Historia",
-    "printableversion": "El version que puede imprenta",
-    "edit": "Revisa",
-    "delete": "Bora",
-    "talkpagelinktext": "Cuento",
-    "personaltools": "Maga herramientas personal",
-    "articlepage": "Mira con el laman del pagina",
-    "views": "Maga vista",
-    "categorypage": "Mira con el pagina de categoria",
-    "otherlanguages": "na otro maga lenguaje",
-    "lastmodifiedat": "Ya modifica con este pagina por ultimo vez en hora $2 del $1.",
-    "aboutsite": "Acerca de {{SITENAME}}",
-    "aboutpage": "Project:Acerca de",
-    "copyright": "Obtenible el maga texto de este Wikipedia bajo los terminos y maga condicion del <i>$1</i>.",
-    "copyrightpage": "{{ns:project}}:Maga derecho del autor",
-    "currentevents": "Maga sucesos actual",
-    "currentevents-url": "Project:Maga sucesos actual",
-    "disclaimers": "Maga aviso legal",
-    "disclaimerpage": "Project:El maga limitacion general de maga responsabilidad",
-    "mainpage": "El Primero Pagina",
-    "mainpage-description": "El Primero Pagina",
-    "portal": "Portal del Comunidad",
-    "privacy": "Policia na proteccion del maga informacion",
-    "privacypage": "Project:Policia na proteccion del maga informacion",
-    "retrievedfrom": "Obtenido de \"$1\"",
-    "editsectionhint": "Revisa el seccion: $1",
-    "site-rss-feed": "$1 Informacion de RSS",
-    "site-atom-feed": "$1 Informacion de Atom",
-    "red-link-title": "$1 (jendeh ta existi el pagina)",
-    "acct_creation_throttle_hit": "Ya crea ya {{PLURAL:$1|un cuenta registro|$1 maga cuenta registro}} el maga visita de este wiki usando el de uste direccion de IP  en el ultimo dia. Entonces, ya sobra ya na maximo numero que ta puede permiti el sistema para crea cuenta. Por causa de este razon, no puede mas crea nuevo cuenta usando el de uste direccion de IP este maga tiempo.",
-    "accountcreated": "El cuenta registro del usuario es creando",
-    "accountcreatedtext": "Creao ya el cuenta registro por usuario $1.",
-    "changepassword": "Cambia con el contraseña",
-    "blockedtitle": "El usuario es prohibido o bloqueado",
-    "accmailtitle": "Enviao ya el contraseña.",
-    "accmailtext": "El contraseña que el sistema ya escogi automatico por usuario [[User talk:$1|$1]] enviado ya a $2.\n\nEl contraseña de este nuevo cuenta puede cambia na pagina ''[[Special:ChangePassword|cambia el contraseña]]'' despues el autenticacion.",
-    "search-result-size": "$1 ({{PLURAL:$2|1 palabra|$2 maga palabra}})",
-    "recentchanges": "Maga Reciente Cambio",
-    "randompage": "Pagina Escujido Automatico",
-    "allarticles": "Todo maga articulo",
-    "categories": "Maga categoria",
-    "categoriespagetext": "El maga siguiente {{PLURAL:$1|categoria tiene|categoria tiene}} maga pagina o medio de comunicacion.\n\nEl maga [[Special:UnusedCategories|categoria sin usando]] jendeh ta abuya aqui.\n\nPor favor mira tambien el maga [[Special:WantedCategories|categoria requeridas]].",
-    "watch": "Vicia",
-    "created": "creao",
-    "changed": "cambiao",
-    "actioncomplete": "Completo el accion",
-    "contributions": "Maga contribuciones del usuario",
-    "blockip": "Usuario prohibido",
-    "blockipsuccesssub": "El prohibicion es confirmado con exito",
-    "contribslink": "Maga contribuciones",
-    "tooltip-search": "Busca na {{SITENAME}}",
-    "tooltip-n-mainpage": "Visita na Primero Pagina"
+       "@metadata": {
+               "authors": [
+                       "Weekeejames"
+               ]
+       },
+       "january": "Enero",
+       "february": "Febrero",
+       "march": "Marzo",
+       "april": "Abril",
+       "may_long": "Mayo",
+       "june": "Junio",
+       "july": "Julio",
+       "august": "Agosto",
+       "september": "Septiembre",
+       "october": "Octubre",
+       "november": "Noviembre",
+       "december": "Diciembre",
+       "april-gen": "Abril",
+       "august-gen": "Agosto",
+       "december-gen": "Diciembre",
+       "apr": "Abr",
+       "aug": "Ago",
+       "dec": "Dic",
+       "category_header": "Maga articulo na categoria \"$1\"",
+       "about": "Acerca de",
+       "article": "El laman del pagina",
+       "tagline": "Estava na {{SITENAME}}",
+       "help": "Ayuda",
+       "search": "Busqueda",
+       "searchbutton": "Busca",
+       "searcharticle": "Anda",
+       "history_short": "Historia",
+       "printableversion": "El version que puede imprenta",
+       "edit": "Revisa",
+       "delete": "Bora",
+       "talkpagelinktext": "Cuento",
+       "personaltools": "Maga herramientas personal",
+       "articlepage": "Mira con el laman del pagina",
+       "views": "Maga vista",
+       "categorypage": "Mira con el pagina de categoria",
+       "otherlanguages": "na otro maga lenguaje",
+       "lastmodifiedat": "Ya modifica con este pagina por ultimo vez en hora $2 del $1.",
+       "aboutsite": "Acerca de {{SITENAME}}",
+       "aboutpage": "Project:Acerca de",
+       "copyright": "Obtenible el maga texto de este Wikipedia bajo los terminos y maga condicion del <i>$1</i>.",
+       "copyrightpage": "{{ns:project}}:Maga derecho del autor",
+       "currentevents": "Maga sucesos actual",
+       "currentevents-url": "Project:Maga sucesos actual",
+       "disclaimers": "Maga aviso legal",
+       "disclaimerpage": "Project:El maga limitacion general de maga responsabilidad",
+       "mainpage": "El Primero Pagina",
+       "mainpage-description": "El Primero Pagina",
+       "portal": "Portal del Comunidad",
+       "privacy": "Policia na proteccion del maga informacion",
+       "privacypage": "Project:Policia na proteccion del maga informacion",
+       "retrievedfrom": "Obtenido de \"$1\"",
+       "editsectionhint": "Revisa el seccion: $1",
+       "site-rss-feed": "$1 Informacion de RSS",
+       "site-atom-feed": "$1 Informacion de Atom",
+       "red-link-title": "$1 (jendeh ta existi el pagina)",
+       "acct_creation_throttle_hit": "Ya crea ya {{PLURAL:$1|un cuenta registro|$1 maga cuenta registro}} el maga visita de este wiki usando el de uste direccion de IP  en el ultimo dia. Entonces, ya sobra ya na maximo numero que ta puede permiti el sistema para crea cuenta. Por causa de este razon, no puede mas crea nuevo cuenta usando el de uste direccion de IP este maga tiempo.",
+       "accountcreated": "El cuenta registro del usuario es creando",
+       "accountcreatedtext": "Creao ya el cuenta registro por usuario $1.",
+       "changepassword": "Cambia con el contraseña",
+       "blockedtitle": "El usuario es prohibido o bloqueado",
+       "accmailtitle": "Enviao ya el contraseña.",
+       "accmailtext": "El contraseña que el sistema ya escogi automatico por usuario [[User talk:$1|$1]] enviado ya a $2.\n\nEl contraseña de este nuevo cuenta puede cambia na pagina ''[[Special:ChangePassword|cambia el contraseña]]'' despues el autenticacion.",
+       "search-result-size": "$1 ({{PLURAL:$2|1 palabra|$2 maga palabra}})",
+       "recentchanges": "Maga Reciente Cambio",
+       "randompage": "Pagina Escujido Automatico",
+       "allarticles": "Todo maga articulo",
+       "categories": "Maga categoria",
+       "categoriespagetext": "El maga siguiente {{PLURAL:$1|categoria tiene|categoria tiene}} maga pagina o medio de comunicacion.\n\nEl maga [[Special:UnusedCategories|categoria sin usando]] jendeh ta abuya aqui.\n\nPor favor mira tambien el maga [[Special:WantedCategories|categoria requeridas]].",
+       "watch": "Vicia",
+       "created": "creao",
+       "changed": "cambiao",
+       "actioncomplete": "Completo el accion",
+       "contributions": "Maga contribuciones del usuario",
+       "blockip": "Usuario prohibido",
+       "blockipsuccesssub": "El prohibicion es confirmado con exito",
+       "contribslink": "Maga contribuciones",
+       "tooltip-search": "Busca na {{SITENAME}}",
+       "tooltip-n-mainpage": "Visita na Primero Pagina"
 }
index 23a3b46..3cd8d75 100644 (file)
@@ -13,8 +13,8 @@
                ]
        },
        "tog-underline": "下劃綫鏈接",
-       "tog-hideminor": "藏起最近改變其過要修改",
-       "tog-hidepatrolled": "起最近改變其巡邏修改",
+       "tog-hideminor": "囥起最近改變其過幼修改",
+       "tog-hidepatrolled": "起最近改變其巡邏修改",
        "tog-extendwatchlist": "敆擴展監視單單臺中顯示所有其更改,伓啻最近其更改",
        "tog-numberheadings": "自動編號其標題",
        "tog-showtoolbar": "顯示編輯工具欄",
        "tog-watchdefault": "添加我編輯其頁面共文件遘我其監視單",
        "tog-watchmoves": "添加我移動其頁面共文件遘我其監視單",
        "tog-watchdeletion": "添加我刪掉其頁面共文件遘我其監視單",
-       "tog-minordefault": "默認共所有其編輯都當作過修改",
+       "tog-minordefault": "默認共所有其編輯都當作過修改",
        "tog-previewontop": "敆編輯框以前顯示預覽",
        "tog-previewonfirst": "敆頭蜀回編輯時候看預覽",
        "tog-enotifwatchlistpages": "我其監視單有變時候,發電子郵件乞我",
        "tog-enotifusertalkpages": "我其討論頁有變時候,發電子郵件乞我",
-       "tog-enotifminoredits": "å\8d³ä½¿æ\98¯é\81\8eè¦\81編輯ï¼\8cä¹\9fè\91\97發電子郵件乞我",
+       "tog-enotifminoredits": "å°±ã\91\9aè¬\9bæ\98¯é\81\8e幼編輯ï¼\8cä¹\9fç\9d\80發電子郵件乞我",
        "tog-shownumberswatching": "顯示監視用戶其數量",
        "tog-oldsig": "存在其簽名",
        "tog-fancysig": "共簽名當成維基文本(無自動鏈接)",
        "tog-uselivepreview": "使即時預覽(敆𡅏實驗)",
        "tog-forceeditsummary": "提醒我行遘蜀萆空白其編輯總結",
-       "tog-watchlisthideown": "趁監視單𡅏起我其修改",
-       "tog-watchlisthidebots": "起監視單其機器人其修改",
-       "tog-watchlisthideminor": "藏起監視單其過要修改",
-       "tog-watchlisthideliu": "共已經躒底其用戶其編輯趁監視單𡅏起咯",
-       "tog-watchlisthideanons": "共匿名其用戶其編輯趁監視單𡅏起咯",
-       "tog-watchlisthidepatrolled": "共巡查其編輯趁監視單𡅏起咯",
+       "tog-watchlisthideown": "趁監視單𡅏起我其修改",
+       "tog-watchlisthidebots": "起監視單其機器人其修改",
+       "tog-watchlisthideminor": "囥起監視單其過幼修改",
+       "tog-watchlisthideliu": "共已經躒底其用戶其編輯趁監視單𡅏起咯",
+       "tog-watchlisthideanons": "共匿名其用戶其編輯趁監視單𡅏起咯",
+       "tog-watchlisthidepatrolled": "共巡查其編輯趁監視單𡅏起咯",
        "tog-ccmeonemails": "共我發乞其他用戶其電子郵件其備份發乞我。",
        "tog-diffonly": "伓使敆下底其顯示𣍐蜀様其地方顯示頁面內容",
        "tog-showhiddencats": "㪗藏類別",
        "editfont-monospace": "蜀様寬其字體",
        "editfont-sansserif": "無襯線其字體",
        "editfont-serif": "有襯線其字體",
-       "sunday": "Lā̤ buái/禮拜",
-       "monday": "Buái ék/拜一",
-       "tuesday": "Buái nê/拜二",
-       "wednesday": "Buái săng / 拜三",
-       "thursday": "Buái sé/拜四",
-       "friday": "Buái ngô/拜五",
-       "saturday": "Buái lĕ̤k/拜六",
-       "sun": "Lā̤ buái/禮拜",
-       "mon": "Buái ék/拜一",
-       "tue": "Buái nê/拜二",
-       "wed": "Buái săng/拜三",
-       "thu": "Buái sé/拜四",
-       "fri": "Buái ngô/拜五",
-       "sat": "Buái lĕ̤k/拜六",
+       "sunday": "禮拜",
+       "monday": "拜一",
+       "tuesday": "拜二",
+       "wednesday": "拜三",
+       "thursday": "拜四",
+       "friday": "拜五",
+       "saturday": "拜六",
+       "sun": "禮拜",
+       "mon": "拜一",
+       "tue": "拜二",
+       "wed": "拜三",
+       "thu": "拜四",
+       "fri": "拜五",
+       "sat": "拜六",
        "january": "一月",
        "february": "二月",
        "march": "三月",
        "subcategories": "子類別",
        "category-media-header": "「$1」類別下底其媒體",
        "category-empty": "''茲類別下底現在無文章也無媒體。''",
-       "hidden-categories": "{{PLURAL:$1}}乞起其類別",
-       "hidden-category-category": "已經起其類別",
+       "hidden-categories": "{{PLURAL:$1}}乞起其類別",
+       "hidden-category-category": "已經起其類別",
        "category-subcat-count": "{{PLURAL:$2|茲萆分類僅包括下底蜀萆子分類|茲分類有 {{PLURAL:$1|子分類|$1 萆子分類}},總計 $2 萆。}}",
        "category-subcat-count-limited": "茲蜀萆類別下底有子類別{{PLURAL:$1}}",
        "category-article-count": "{{PLURAL:$2|茲蜀萆類別儷有下底蜀頁。|共總有$2頁,下底其茲$1頁敆茲蜀萆類別𡅏。}}",
        "history_short": "歷史",
        "updatedmarker": "趁我最後蜀回訪問開始更新",
        "printableversion": "會拍印其版本",
-       "permalink": "固定链接",
+       "permalink": "永久鏈接",
        "print": "拍印",
        "view": "覷蜀覷",
        "edit": "修改",
        "talkpage": "討論茲頁",
        "talkpagelinktext": "討論",
        "specialpage": "特殊頁",
-       "personaltools": "å\80\8b人å\85¶å®¶ç§\81",
+       "personaltools": "å\80\8b人å\85¶å\82¢ç§\81è\8a±",
        "articlepage": "覷蜀覷內容頁面",
        "talk": "討論",
        "views": "覷蜀覷",
-       "toolbox": "家ç§\81",
+       "toolbox": "å\82¢ç§\81è\8a±",
        "userpage": "覷蜀覷用戶頁面",
        "projectpage": "看工程頁",
        "imagepage": "覷蜀覷文件頁面",
        "privacypage": "Project:隱私政策",
        "badaccess": "權限錯誤",
        "badaccess-group0": "汝𣍐使做汝要求其茲蜀萆動作。",
-       "badaccess-groups": "汝要求其動作è\91\97$2åº\95è£\8fç\94¨æ\88¶æ\89\8dæ\9c\83å\81\9aå\85¶ï¼\9a$1{{PLURAL:$1}}",
-       "versionrequired": "需要版本$1其媒體維基",
-       "versionrequiredtext": "需要媒體維基其版本$1來使茲蜀頁。\n覷[[Special:Version|版本頁面]]。",
+       "badaccess-groups": "汝要求其動作ç\9d\80$2è£\8få\8b¢ç\94¨æ\88¶ä¹\8dæ\9c\83å\81\9aå\85¶ï¼\9a$1{{PLURAL:$1}}",
+       "versionrequired": "需要版本$1其MediaWiki",
+       "versionrequiredtext": "需要MediaWiki其版本$1來使茲蜀頁。\n覷[[Special:Version|版本頁面]]。",
        "ok": "好",
        "retrievedfrom": "趁「$1」退過來",
        "youhavenewmessages": "汝有$1($2)。",
        "editsectionhint": "修改段:$1",
        "toc": "目錄",
        "showtoc": "顯示",
-       "hidetoc": "起",
-       "collapsible-collapse": "崩潰",
-       "collapsible-expand": "擴展",
+       "hidetoc": "起",
+       "collapsible-collapse": "",
+       "collapsible-expand": "",
        "thisisdeleted": "卜看或者恢復$1?",
        "viewdeleted": "看$1?",
        "restorelink": "$1萆乞刪掉其修改{{PLURAL:$1}}",
        "nosuchspecialpage": "無總款其特殊頁",
        "nospecialpagetext": "<strong>汝請求蜀萆𣍐合法其特殊頁面。</strong>\n\n合法其特殊頁面清單會使敆[[Special:SpecialPages|{{int:特殊頁面}}]]頁面討著",
        "error": "鄭咯",
-       "databaseerror": "數據庫有",
+       "databaseerror": "數據庫有",
        "laggedslavemode": "'''警告:'''頁面可能無最近其更新。",
        "readonly": "數據庫乞鎖起咯",
        "readonlytext": "Só-gé̤ṳ-kó cī-buàng ké̤ṳk nè̤ng sō̤ kī lāu, mâ̤-sāi siā sĭng dèu-mĕ̤k hĕ̤k có̤ siŭ-gāi, ô kō̤-nèng sê ôi-lāu nĭk-siòng mì-hô, cĭ-hâiu cêu â̤ ciáng-siòng.\n\nSō̤ kī só-gé̤ṳ-kó gì guāng-lī-uòng cūng-kuāng gāi-sék: $1",
        "protectedpagetext": "茲頁已經乞保護起咯,𣍐使修改或者其它行動。",
        "viewsourcetext": "汝會使看共複製茲蜀頁其源代碼:",
        "viewyourtext": "汝會使覷蜀覷或者複製茲頁'''汝其修改'''其源代碼:",
-       "editinginterface": "'''警告:'''汝敆𡅏修改其頁面廮𡅏提供茲蜀萆軟件其界面文本。\n茲蜀頁其改變會影響遘其它用戶其用戶界面其顯示。\n如果卜想修改維基其翻譯,起動遘媒體維基本地化計劃[//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]。",
+       "editinginterface": "'''警告:'''汝敆𡅏修改其頁面廮𡅏提供茲蜀萆軟件其界面文本。\n茲蜀頁其改變會影響遘其它用戶其用戶界面其顯示。\n如果卜想修改維基其翻譯,起動遘MediaWiki本地化計劃[//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]。",
        "namespaceprotected": "汝𣍐使修改敆'''$1'''命名空間其頁面。",
        "customcssprotected": "汝𣍐使修改茲蜀萆CSS頁面,因為伊有別蜀隻用戶其設定。",
        "customjsprotected": "汝𣍐使修改茲蜀萆JavaScript頁面,因為伊有別蜀隻用戶其設定。",
        "userlogin-signwithsecure": "使安全其連接",
        "yourdomainname": "汝其域名:",
        "password-change-forbidden": "汝𣍐使敆茲蜀萆維基百科𡅏修改密碼。",
-       "externaldberror": "可能是驗證數據庫咯,或者是汝𣍐使升級汝其外部賬戶。",
+       "externaldberror": "可能是驗證數據庫咯,或者是汝𣍐使升級汝其外部賬戶。",
        "login": "躒底",
        "nav-login-createaccount": "躒底/開賬戶",
        "userlogin": "躒底/開賬戶",
        "gotaccountlink": "躒底",
        "userlogin-resetlink": "躒底其資料𣍐記咯?",
        "userlogin-resetpassword-link": "密码𣍐記?",
+       "userlogin-helplink2": "對手汝躒底",
        "createacct-emailrequired": "電子郵件地址",
        "createacct-emailoptional": "電子郵件地址(愛寫就寫)",
        "createacct-email-ph": "輸底汝其電子郵件地址",
        "passwordtooshort": "密碼著設最少{{PLURAL:$1|$1萆字符}}。",
        "password-name-match": "汝其密碼硬著共汝其用戶名𣍐蜀様才會使其。",
        "password-login-forbidden": "茲蜀萆用戶名共密碼應經乞禁止去了。",
-       "mailmypassword": "共新密碼發遘電子郵件",
+       "mailmypassword": "重新設置密碼",
        "passwordremindertitle": "{{SITENAME}}其新其臨時密碼",
        "passwordsent": "新密碼已經寄遘「$1」註冊其電子郵件地址了。\n收遘後,請再躒底蜀頭部。",
        "mailerror": "發電子郵件有賺:$1",
        "resetpass-submit-cancel": "取消",
        "resetpass-temp-password": "臨時密碼:",
        "passwordreset": "重置密碼",
+       "passwordreset-text-one": "完成者隻表單,通過電子郵件發送臨時密碼來重新設定汝其密碼。",
        "passwordreset-legend": "重置密碼",
        "passwordreset-username": "用戶名:",
        "passwordreset-domain": "域名:",
        "passwordreset-emailsent": "蜀萆密碼重置其電子郵件已經發出去了。",
        "passwordreset-emailsent-capture": "蜀萆密碼重置其電子郵件已經發出去了,顯示敆下底。",
        "changeemail": "修改電子郵件地址",
-       "changeemail-header": "修改賬戶電子郵件地址",
        "changeemail-oldemail": "現刻時其電子郵件地址:",
        "changeemail-newemail": "新其電子郵件地址:",
        "changeemail-none": "(無)",
        "changeemail-password": "汝其{{SITENAME}}密碼:",
        "changeemail-submit": "修改電子郵件地址",
-       "changeemail-cancel": "取消",
        "bold_sample": "粗體文字",
        "bold_tip": "粗體文字",
        "italic_sample": "敧其文字",
        "hr_tip": "水平線(廮𡅏保護使其)",
        "summary": "總結:",
        "subject": "主題/標題:",
-       "minoredit": "過修改",
+       "minoredit": "過修改",
        "watchthis": "監視茲頁",
        "savearticle": "保存茲頁",
        "preview": "預覽",
        "showpreview": "顯示預覽",
        "showdiff": "看改變其部分",
-       "anoneditwarning": "'''警告:'''汝未躒底。\n汝起IP地址會乞記錄敆茲頁面修改歷史底裏。",
+       "anoneditwarning": "'''警告:'''汝未躒底。\n汝其IP地址會乞記着茲頁面其修改歷史裏勢。",
        "missingcommenttext": "起動敆下底輸底蜀條評論。",
        "summary-preview": "總結預覽:",
        "blockedtitle": "用戶乞封鎖了",
        "readonlywarning": "'''警告:數據庫已經乞鎖定來保養去了,故此汝現刻時𣍐使保存汝其編輯。'''\n汝可能希望複製再粘貼汝其文字遘蜀萆文本文件𡅏,再共伊保存起咯。\n\n鎖定伊其管理員給出茲蜀萆解釋:$1",
        "protectedpagewarning": "''警告:茲蜀頁已經乞保護起去了,故此囇有管理員權力其用戶乍會使修改伊。'''\n最新其日誌已經敆下底提供來做參考:",
        "semiprotectedpagewarning": "'''注意:''' 茲蜀頁已經乞保護起去了,故此囇有註冊其用戶乍會使修改伊。\n最新其日誌已經敆下底提供來做參考:",
-       "templatesused": "{{PLURAL:$1}}茲頁底裏使其模板:",
+       "templatesused": "{{PLURAL:$1}}茲頁裏勢使其模板:",
        "templatesusedpreview": "茲萆預覽使其{{PLURAL:$1|模板}}:",
        "templatesusedsection": "茲蜀段使其{{PLURAL:$1|模板}}:",
        "template-protected": "(保護)",
        "template-semiprotected": "(半保護)",
-       "recreate-moveddeleted-warn": "'''注意:汝重新創建其茲蜀頁面以前已經乞刪掉了。'''\n\n汝著考慮蜀下到底是伓是合適繼續去編輯茲蜀頁。茲蜀頁其刪除記錄共移動記錄都敆嚽塊共汝看:",
+       "recreate-moveddeleted-warn": "'''注意:汝敆𡅏重新創建舊底已經乞刪唻其頁面。'''\n\n汝應該考慮蜀下繼續去編輯茲蜀頁到底是伓是合適其。茲蜀頁其刪除記錄共移動記錄都敆嚽塊:",
        "undo-summary": "取消[[Special:Contributions/$2|$2]]([[User talk:$2|Tō̤-lâung]])其$1修改",
        "cantcreateaccounttitle": "無能獃開賬戶",
        "viewpagelogs": "看茲頁其歷史",
        "last": "前",
        "page_first": "頭",
        "page_last": "尾",
-       "histlegend": "差別揀選:選擇卜比並其版本,再擪「回車」('''Enter''')或者擪底底其'''比並揀選版本'''。<br />\n說明:(伶)=共第一新其版本比並,(前)=共前蜀版本比並,~=過修改。",
+       "histlegend": "差別揀選:選擇卜比並其版本,再擪「回車」('''Enter''')或者擪底底其'''比並揀選版本'''。<br />\n說明:(伶)=共第一新其版本比並,(前)=共前蜀版本比並,~=過修改。",
        "history-fieldset-title": "瀏覽歷史",
        "history-show-deleted": "囇刪掉去",
        "histfirst": "最旧",
        "recentchanges": "這般其改變",
        "recentchanges-summary": "敆維基茲頁跟蹤這般其改變。",
        "recentchanges-label-newpage": "茲蜀萆修改創建新其蜀頁",
-       "recentchanges-label-minor": "茲是蜀萆過修改",
+       "recentchanges-label-minor": "茲是蜀萆過修改",
        "recentchanges-label-bot": "茲蜀萆修改是機器人做其",
        "rclistfrom": "顯示由$3 $2開始其新其改變",
-       "rcshowhideminor": "$1過修改",
+       "rcshowhideminor": "$1過修改",
        "rcshowhidebots": "$1機器人",
        "rcshowhideliu": "$1躒底用戶",
        "rcshowhideanons": "$1無名用戶",
        "minoreditletter": "~",
        "newpageletter": "!",
        "boteditletter": "^",
-       "rc-enhanced-hide": "起細節",
+       "rc-enhanced-hide": "起細節",
        "recentchangeslinked": "相關其改變",
        "recentchangeslinked-feed": "相關其改變",
        "recentchangeslinked-toolbox": "相關其改變",
        "movethispage": "移動茲頁",
        "booksources": "書源",
        "booksources-search-legend": "尋討書源",
-       "booksources-go": "去",
        "booksources-text": "下底是鏈接遘其它賣新書共舊書其站點其單單,固加可能有更多關於汝敆𡅏看其茲本書其信息:",
        "specialloguserlabel": "表演者:",
        "speciallogtitlelabel": "目標(稱呼或者用戶):",
        "log": "日誌",
        "alllogstext": "所有會使趁{{SITENAME}}獲得其日誌其都合併顯示。\n汝會使使揀選日誌類型、用戶名(大小寫敏感),或者受影響其頁面(大小寫敏感)其方法來縮小視角。",
-       "logempty": "日誌底裏討要𣍐著項目",
+       "logempty": "日誌裏勢討要𣍐着項目",
        "allpages": "所有頁面",
        "nextpage": "下蜀頁($1)",
        "prevpage": "前蜀頁($1)",
        "allinnamespace": "所有頁面($1命名空間)",
        "allpagessubmit": "去",
        "allpagesprefix": "按頭部顯示頁面:",
-       "allpagesbadtitle": "給出其頁面其標題是𣍐合法其,或者有蜀萆跨語言或跨維基其前綴。伊可能包括蜀萆或者価萆𣍐使廮標題底裏其字符。",
+       "allpagesbadtitle": "給出其頁面其標題是𣍐合法其,或者有蜀萆跨語言或跨維基其前綴。伊可能包括蜀萆或者価萆𣍐使廮標題裏勢其字符。",
        "categories": "類別",
        "deletedcontributions": "乞刪掉其用戶貢獻",
        "deletedcontributions-title": "乞刪掉其用戶貢獻",
        "unwatch": "伓使監視",
        "unwatchthispage": "停止監視",
        "watchlist-details": "{{PLURAL:$1}}$1頁敆汝其監視單𡅏,無算討論頁。",
-       "wlshowlast": "顯示最$1點鐘$2日$3",
+       "wlshowlast": "顯示最$1點鐘$2日",
        "watchlist-options": "監視單選項",
        "watching": "監視...",
        "deletepage": "刪頁",
        "sp-contributions-search": "尋討貢獻",
        "sp-contributions-username": "IP地址或者用戶名:",
        "sp-contributions-submit": "尋討",
-       "whatlinkshere": "乇鏈遘嚽塊",
+       "whatlinkshere": "乇鏈遘嚽塊",
        "whatlinkshere-title": "鏈接遘$1其頁面",
        "whatlinkshere-page": "頁面:",
        "linkshere": "下底其頁面鏈接遘'''[[:$1]]''':",
        "block-log-flags-nocreate": "防止開賬戶",
        "ipb_expiry_invalid": "過期時間無效。",
        "ipb_already_blocked": "「$1」已經乞封鎖了",
-       "lockconfirm": "正,我卜想鎖定數據庫。",
+       "lockconfirm": "正,我卜想鎖定數據庫。",
        "lockbtn": "鎖定數據庫",
        "unlockbtn": "開數據庫",
        "lockdbsuccesssub": "數據庫鎖定好了",
        "allmessagesname": "名",
        "allmessagesdefault": "默認其消息文字",
        "allmessagescurrent": "現時其文字",
-       "allmessagestext": "茲是敆媒體維基命名空間底裏系統消息其蜀萆單單。\n如果汝卜想貢獻通用其媒體維基本地化服務,請訪問[https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation 媒體維基本地化]共[//translatewiki.net translatewiki.net]。",
+       "allmessagestext": "茲是敆MediaWiki命名空間裏勢系統消息其蜀萆單單。\n如果汝卜想貢獻通用其MediaWiki基本地化服務,起動汝訪問[https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki本地化]共[//translatewiki.net translatewiki.net]。",
        "allmessagesnotsupportedDB": "茲蜀頁𣍐使其,因為'''$wgUseDatabaseMessages'''已經乞禁止去了。",
        "thumbnail-more": "放大",
        "tooltip-pt-userpage": "汝其用戶頁",
        "tooltip-pt-mytalk": "汝其討論頁",
        "tooltip-pt-preferences": "汝其設定",
+       "tooltip-pt-watchlist": "汝監視其頁面有改過其單單",
        "tooltip-pt-mycontris": "汝其貢獻其單單",
        "tooltip-pt-login": "希望汝躒底其;當然,無逼汝總款做。",
        "tooltip-pt-logout": "躒出",
        "tooltip-n-recentchanges": "維基百科最近其改變其單單",
        "tooltip-n-randompage": "隨便罔看",
        "tooltip-t-whatlinkshere": "鏈遘嚽塊其所有維基頁面其單單",
+       "tooltip-t-recentchangeslinked": "鏈遘茲頁其頁面其最近修改",
        "tooltip-t-contributions": "茲蜀用戶其貢獻單單",
        "tooltip-t-emailuser": "共茲蜀隻用戶發電子郵件",
        "tooltip-t-upload": "上傳文件",
        "tooltip-t-specialpages": "特殊頁其單單",
        "tooltip-t-print": "茲蜀頁其會拍印其版本",
+       "tooltip-t-permalink": "茲頁茲版本其永久鏈接",
        "tooltip-ca-nstab-main": "看蜀看內容頁",
        "tooltip-ca-nstab-user": "覷蜀覷用戶頁",
        "tooltip-ca-nstab-special": "茲是蜀萆特殊頁,汝𣍐使修改茲蜀頁。",
        "tooltip-ca-nstab-project": "看工程頁",
        "tooltip-ca-nstab-image": "看文件頁",
        "tooltip-ca-nstab-template": "覷蜀覷模板",
-       "tooltip-minoredit": "共茲標記成過修改",
+       "tooltip-minoredit": "共茲標記成過修改",
        "tooltip-save": "保存汝其改變 [alt-s]",
        "tooltip-preview": "預覽汝其改變,起動敆汝保存以前使茲。",
        "tooltip-watch": "共茲蜀頁加遘汝其監視單[alt-w]",
        "exif-meteringmode-0": "𣍐八",
        "exif-lightsource-0": "𣍐八",
        "exif-subjectdistancerange-0": "𣍐八",
-       "watchlistall2": "所有",
        "namespacesall": "所有",
        "monthsall": "囫圇年",
        "confirmemail": "確定電子郵件地址",
        "confirmemail_needlogin": "汝著$1來確定汝其電子郵件地址。",
        "confirmemail_loggedin": "汝其電子郵件地址現在已經確定去了。",
        "confirmemail_body": "有人(可能是汝)敆IP地址$1𡅏已經使茲蜀萆電子郵件地址來註冊蜀萆賬戶「$2」去了。\n\n卜想確認茲蜀萆賬戶當真是汝其,固加敆{{SITENAME}}激活電子郵件特點,許敆汝其瀏覽器𡅏拍開茲蜀萆鏈接:\n\n$3\n\n如果汝*無*註冊茲賬戶,單擊茲蜀萆鏈接來取消電子郵件確認:\n\n$5\n\n茲蜀萆確認代碼會敆$4時候過期。",
-       "deletedwhileediting": "'''警告:'''茲蜀頁å·²ç¶\93æ\95\86æ±\9d編輯以å\89\8då\88ªæ\8e\89å\8e»äº\86ï¼\81",
+       "deletedwhileediting": "'''警告:'''茲蜀頁æ\95\86æ±\9d編輯以å\89\8då·²ç¶\93ä¹\9eå\88ªå\94»äº\86ï¼\81",
        "recreate": "重新開",
        "confirm_purge_button": "好",
        "imgmultipageprev": "← 前蜀頁",
index b7127fb..8c9c020 100644 (file)
        "category-file-count": "{{PLURAL:$2|ХӀокху категори чохь цхьа файл бе яц.|{{PLURAL:$1|Гойту $1 файл|Гойту $1 файлаш}} хӀокху категорешца кху $2.}}",
        "category-file-count-limited": "ХӀокху категори чохь {{PLURAL:$1|$1 файл|$1 файлаш|1=цхьаъ бен файл яц}}.",
        "listingcontinuesabbrev": "(кхин дlа)",
-       "index-category": "Меттигтерахьйо агlонаш",
+       "index-category": "Меттигтерахьйо агӀонаш",
        "noindex-category": "ДӀахьушйоцу агӀонаш",
        "broken-file-category": "{{#switch:{{NAMESPACE}}\n |{{ns:0}}=Болх цабеш файлийн хьажоргаш йолу агӀонаш}}",
        "about": "Цуьнах лаьцна",
        "viewtalkpage": "Хьажа дийцаре",
        "otherlanguages": "Кхечу маттахь дерш",
        "redirectedfrom": "(ДӀасахьажийна кху $1)",
-       "redirectpagesub": "АгӀо-дӀасахьажайар",
+       "redirectpagesub": "АгӀо-дӀасахьажорг",
+       "redirectto": "ДӀасахьажор тӀе:",
        "lastmodifiedat": "ХӀокху агӀон тӀаьххьаралера хийцам: $2, $1.",
        "viewcount": "ХӀокху агӀонг хьовсийна $1 {{PLURAL:$1|за}}.",
        "protectedpage": "ГӀароллийца йолу агӀо",
        "aboutpage": "Project:Цуьнах лаьцна",
        "copyright": "Чулацам лело мега $1 лицензица (кхениг билгалйина яцахь).",
        "copyrightpage": "{{ns:project}}:Авторан бакъонаш",
-       "currentevents": "ХӀинцлера хилларш",
-       "currentevents-url": "Project:ХӀинцлера хилларш",
+       "currentevents": "Ð¥Ó\80инÑ\86алеÑ\80а Ñ\85иллаÑ\80Ñ\88",
+       "currentevents-url": "Project:Ð¥Ó\80инÑ\86алеÑ\80а Ñ\85иллаÑ\80Ñ\88",
        "disclaimers": "Бехк тӀецалацар",
        "disclaimerpage": "Project:Бехк тӀецалацар",
        "edithelp": "ГӀо оцу тадарна",
        "nosuchaction": "Ишта дийриг дац",
        "nosuchactiontext": "ДӀаязйина URL нийса яц.\nURL язъеш гӀалат даьлла хила мега.\nИза кхин {{SITENAME}} пороектехь гӀалат хила мега.",
        "nosuchspecialpage": "Иштта белхан агӀо яц",
-       "nospecialpagetext": "<strong>Ð\98Ñ\88Ñ\82Ñ\82а Ð±ÐµÐ»Ñ\85ан Ð°Ð³Ó\80о Ñ\8fÑ\86.</strong>\n\nÐ\91елÑ\85ан Ð°Ð³Ó\80онаÑ\88ан могӀам: [[Special:SpecialPages|{{int:specialpages}}]].",
+       "nospecialpagetext": "<strong>Ð\98Ñ\88Ñ\82Ñ\82а Ð±ÐµÐ»Ñ\85ан Ð°Ð³Ó\80о Ñ\8fÑ\86.</strong>\n\nÐ\91елÑ\85ан Ð°Ð³Ó\80онийн могӀам: [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "ГӀалат",
        "databaseerror": "ГӀалат хаамийн бухера",
        "databaseerror-text": "Хаамийн базан гӀалат даьлла.\nИза хила мега программин гӀалат.",
        "readonlytext": "АгӀонаш тӀетохар а кхин хийцамаш барна а блоктоьхна:\nБлокоьхначо биттина хаам: $1.",
        "missing-article": "ХӀокху чохь кароезаш йолу хьан дехарца йозан агӀонаш цакарийна «$1» $2.\n\nИштнарг наггахь хуьлу хьажораг дӀаяьккхина елахь я хийцам бина тиша хьажорагца дехьа гӀо гӀоьртича.\n\nНагахьсан гӀулкх цуьнах доьзна дацахь, хьуна карийна гӀирс латточехь гӀалат.\nДехар до, хаам бе оцуьнах [[Special:ListUsers/sysop|куьйгалхога]], гойтуш URL.",
        "missingarticle-rev": "(верси № $1)",
-       "missingarticle-diff": "(тейп тайпнара: $1, $2)",
+       "missingarticle-diff": "(башхалла: $1, $2)",
        "readonly_lag": "Хаамашан базина цхьана хан блоктоьхна, хаамашан базан сервераш нисялца.",
        "internalerror": "Чоьхьара гӀалат",
        "internalerror_info": "Чоьхьара гӀалат: $1",
        "invalidtitle-knownnamespace": "Магийна боцу коьртамогӀа цӀерийн меттигца «$2» йоза  «$3»",
        "invalidtitle-unknownnamespace": "Магийна боцу коьртамогӀа ца йовза меттигца $1 «$2» йозанца",
        "exception-nologin": "ХӀинца а ахьа системин чохь болх беш бац",
-       "exception-nologin-text": "Ð\98за Ð´Ð°Ð½ [[Special:Userlogin|системин чугӀо]].",
+       "exception-nologin-text": "Ð¥Ó\80окÑ\85Ñ\83 Ð°Ð³Ó\80о Ñ\82Ó\80екÑ\85аÑ\87а Ð»Ñ\83Ñ\88 Ñ\85илийÑ\82а [[Special:Userlogin|системин чугӀо]].",
        "exception-nologin-text-manual": "АгӀо тӀекхача луш хилийта оьшу $1.",
        "virus-badscanner": "Нисяран гӀалат. Ца йовза вирусийн сканер: ''$1''",
        "virus-scanfailed": "сканиран гӀалат (код $1)",
        "passwordreset-emailsent-capture": "Электронан хаам баийтина кхоьссинчу паролах лаьцна хаам чохь болуш. \nцуна йозане хьажа йиш ю лахахь.",
        "passwordreset-emailerror-capture": "Пароль кхоссаран хаам чохь болуш электронан кехат кхоьллина, цуна йоза хьажа йиш ю лахахь, амма иза {{GENDER:$2|декъашхочунга}} дӀадахьийта тар цаделира бахьнехь: $1",
        "changeemail": "Хийца электронан почта",
-       "changeemail-header": "Электронан почтан адрес хийцар",
        "changeemail-text": "Юза хӀара форма хьайн электронан почтан адрес хуьйцуш. Ахьа хийцар бакъдан язъян еза пароль.",
        "changeemail-no-info": "ХӀара агӀо лело системин чугӀо.",
        "changeemail-oldemail": "Карара электронан почтан адрес:",
        "changeemail-none": "(яц)",
        "changeemail-password": "Хьан пароль «{{SITENAME}}» проектан:",
        "changeemail-submit": "Хийца email",
-       "changeemail-cancel": "Цаоьшу",
        "changeemail-throttled": "Хьо дукха гӀиртира.\nДехар до, собар де $1 юха гӀортале.",
        "resettokens": "Токенаш кхоссар",
        "resettokens-text": "Хьан йиш ю токенаш кхосса, цара йиш хуьлуьйту цхьаболу долара хаамашна тӀекхача, уьш ю хьан дӀаяздар ца вовшахтесна. \n\nХьона иза оьшу, ахьа хьай токенаш цхьам гучу яьхна елахь я хьан аккаунт йохийна елахь.",
        "minoredit": "Жим хийцам",
        "watchthis": "Латайе хӀара агӀо тергаме могӀанан юкъахь",
        "savearticle": "Дlайазъé агlо",
-       "preview": "Хьалха муха ю хьажа",
-       "showpreview": "Хьалха муха ю хьажар",
-       "showdiff": "Ð¥lоÑ\82Ñ\82ина Ð±Ð¾Ð»Ñ\83 Ñ\85ийÑ\86ам",
+       "preview": "Хьалха хьажар",
+       "showpreview": "Хьалха хьажар",
+       "showdiff": "Ð\91ина Ñ\85ийÑ\86амаÑ\88ка Ñ\85Ñ\8cажаÑ\80",
        "blankarticle": "<strong>ДӀахьедар:</strong> Ахьа кхуллуш йолу агӀо еса ю.\nЮху кнопка «{{int:savearticle}}» тӀетаӀаяхь, агӀо цхьа чулацам боцуш кхуллур ю.",
        "anoneditwarning": "'''Тергам бе''': Ахьа хьай цӀарца тадарш деш дац. Хьан IP-адрес дӀаяздина хира ду хӀокху агӀон истори чу.",
        "anonpreviewwarning": "''Системин чу цагӀахь хьан IP-адрес агӀона истори чу дӀаяз лур ду.''",
        "content-model-text": "цхьалхе йоза",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Кепийн кхайкхамашкахь аргументаш юх-юха лелош йолу агӀонаш",
        "expensive-parserfunction-warning": "'''Тидам бе!''' Ресурсийн функцийн дехарш сов даьлла агӀонаш .\n\nДукху хилла ца деза {{PLURAL:$2|$2 дехар|$2 дехарш|1=цхьана дехар}}, хӀинца $1 {{PLURAL:$1|дехар}} ду.",
        "expensive-parserfunction-category": "Ресурсийн функцийн дехарш сов даьлла агӀонаш",
        "post-expand-template-inclusion-warning": "ДӀахьедар: юкъа тоьхна кепашан жамӀан барам тӀех бокха бу. Цхьайолу кепаш юкъа тухур яц.",
        "last": "хьалх.",
        "page_first": "хьалхара",
        "page_last": "тlаьххьара",
-       "histlegend": "Кхетор: (хlинцлера.) — йолучу башхон къастам; (хьалх.) — хьалхлерачу башхон къастам; '''ж''' — жимо бозалца болу хийцам.",
+       "histlegend": "Кхетор: (хӀинцалера.) — йолучу башхон къастам; (хьалх.) — хьалхлерачу башхон къастам; '''ж''' — жимо бозалца болу хийцам.",
        "history-fieldset-title": "АгӀона хийцамаш",
        "history-show-deleted": "ДӀаяхинарш",
        "histfirst": "ширниш",
        "revdelete-nooldid-text": "Ахьа хӀара функци кхочушъян билгалйина яц Ӏалашонан верси (я версеш).",
        "revdelete-no-file": "Иштта файл яц.",
        "revdelete-show-file-confirm": "Бакъалла лаьий хьуна дӀаяьккхина файлан версега хьажа «<nowiki>$1</nowiki>» $2 тӀера, $3?",
-       "revdelete-show-file-submit": "Хlаъ",
+       "revdelete-show-file-submit": "ХӀаъ",
        "revdelete-selected-text": "{{PLURAL:$1|Файлан хаьржина верси|Файлан хаьржина версеш}} [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Файлан хаьржина верси|Файлан хаьржина версеш}} [[:$2]]:",
        "logdelete-selected": "Тептар чура {{PLURAL:$1|хаьржина дӀаяздар|хаьржина дӀаяздарш}}:",
        "mergehistory-comment": "Дехьа яьккхина [[:$1]] [[:$2]] чу: $3",
        "mergehistory-reason": "Бахьна:",
        "mergelog": "Цхьаьнатохаршан тептар",
-       "pagemerge-logentry": "цхьаьнатоьхна [[$1]] а [[$2]] а ($3 кхаччалц)",
        "revertmerge": "Йекъа",
        "mergelogpagetext": "Лахахь гойту тӀеххьара вовшахтоьхна агӀонийн могӀам.",
        "history-title": "$1 — хийцаман истори",
        "searchresults-title": "Лаха «$1»",
        "titlematches": "АгӀонийн цӀераш цхьаьнанисялар",
        "textmatches": "АгӀонийн йоза цхьаьнанисдалар",
-       "notextmatches": "Агlонаш чура йозанашца цхьатера йогlуш яц",
+       "notextmatches": "АгӀонаш чура йозанашца цхьатера йогlуш яц",
        "prevn": "хьалхарнаш {{PLURAL:$1|$1}}",
        "nextn": "тӀаьхьйогӀурш {{PLURAL:$1|$1}}",
        "prevn-title": "{{PLURAL:$1|1=Хьалхара $1 дӀаяздар|Хьалхара $1 дӀаяздарш}}",
        "viewprevnext": "Хьажа ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''ХӀокху вики чохь йолуш ю ишта агӀо «[[:$1]]»'''",
        "searchmenu-new": "<strong>Кхолла «[[:$1]]» агӀо хӀокху вики-проектехь!</strong>\n{{PLURAL:$2|0=|Хьан лахарца карина.}}",
-       "searchprofile-articles": "Къаьстина агlонаш",
+       "searchprofile-articles": "Къаьстина агӀонаш",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything": "Массанхьа",
        "searchprofile-advanced": "Шуьйра",
        "search-result-category-size": "$1 {{PLURAL:$1|юкъаяр}} ($2 {{PLURAL:$2|1=бухара категори|бухара категореш}}, $3 {{PLURAL:$3|1=файл|файлаш}}).",
        "search-redirect": "(дlасахьажийна $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": "хlоттаделларг",
        "searchall": "массо",
-       "showingresults": "Лахахьа {{PLURAL:$1|гойта|гойту|гойту}} <strong>$1</strong> {{PLURAL:$1|хилам|хиламаш|хиламаш}}, дlаболало кху № <strong>$2</strong>.",
+       "showingresults": "Лахахьа {{PLURAL:$1|гойту}} <strong>$1</strong> {{PLURAL:$1|хилам}}, дӀаболало кху № <strong>$2</strong>.",
        "showingresultsinrange": "Лахахь гайтина {{PLURAL:$1|<strong>1</strong> хилам}} диапазонехь <strong>$2</strong> тӀера <strong>$3</strong> кхаччалц.",
-       "showingresultsheader": "{{PLURAL:$5|1=Хилам '''$1''' кху '''$3'''|Хиламаш '''$1 — $2''' кху '''$3'''}} оцун '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Хилам <strong>$1</strong> <strong>$3</strong> нах}}",
        "search-nonefound": "Дехаре терра цхьа хӀума ца карийна.",
        "powersearch-legend": "Шуьро лахар",
        "powersearch-ns": "ЦӀерийн меттигашкахь лахар:",
        "prefs-edits": "Нисдарийн дукхалла:",
        "prefsnologintext2": "Оьшу $1, гӀирс дӀанисбан.",
        "prefs-skin": "Кечяран тема",
-       "skin-preview": "Хьалха муха ю хьажа",
+       "skin-preview": "Хьалха хьажар",
        "datedefault": "Iад йитарца",
        "prefs-labs": "Муха ю хьажарна таронаш",
        "prefs-user-pages": "Декъашхочун агӀо",
        "recentchangesdays": "Керла нисдар гайта динахь:",
        "recentchangesdays-max": "Къезиг $1 {{PLURAL:$1|дена}}",
        "recentchangescount": "Iад йитарца гойтуш долу нисдарийн дукхалла",
-       "prefs-help-recentchangescount": "Ð\93ойÑ\82Ñ\83 ÐºÐµÑ\80ла Ð½Ð¸Ñ\81даÑ\80Ñ\88, Ð°Ð³Ó\80онаÑ\88ан истори, тептарш.",
+       "prefs-help-recentchangescount": "Ð\93ойÑ\82Ñ\83 ÐºÐµÑ\80ла Ð½Ð¸Ñ\81даÑ\80Ñ\88, Ð°Ð³Ó\80онийн истори, тептарш.",
        "prefs-help-watchlist-token2": "Иза хьан тергаме могӀан къайла догӀа ду.\nМуьлха и хуучунна йиш ю хьан тергаме могӀам беша, цундела ма хаийта иза кхечаьрга. [[Special:ResetTokens|ТӀетаӀа йе кхуза и хьайга кхосса лууш делахь]].",
        "savedprefs": "Хьан гӀирс Ӏалашбина.",
        "timezonelegend": "Сахьтан аса:",
        "timezoneuseoffset": "Кхин (билгалде дӀахилар)",
        "servertime": "Сервера хан:",
        "guesstimezone": "Юза браузеран чура",
+       "timezoneregion-africa": "Африка",
+       "timezoneregion-america": "Америка",
+       "timezoneregion-antarctica": "Антарктика",
+       "timezoneregion-arctic": "Арктика",
        "timezoneregion-asia": "Ази",
        "timezoneregion-atlantic": "Атлантикан океан",
        "timezoneregion-australia": "Австрали",
+       "timezoneregion-europe": "Европа",
        "timezoneregion-indian": "Индин океан",
        "timezoneregion-pacific": "Тийна океан",
        "allowemail": "Магийта декъашхошна хьайга электрони почтехула кехат кхехьийта",
        "prefs-files": "Файлаш",
        "prefs-custom-css": "Долахь йолу CSS",
        "prefs-custom-js": "Долахь йолу JS",
-       "prefs-common-css-js": "ЮкÑ\8aаÑ\80а CSS/JS Ð¼Ð°Ñ\81Ñ\81о ÐºÐµÑ\87 Ð´Ð°Ñ\80ан Ñ\82емаÑ\88ан:",
+       "prefs-common-css-js": "ЮкÑ\8aаÑ\80а CSS/JS Ð¼Ð°Ñ\81Ñ\81о ÐºÐµÑ\87 Ð´Ð°Ñ\80ан Ñ\82емийн:",
        "prefs-reset-intro": "ХӀара агӀо лело мега ахьа нисбина гӀирс Ӏад битарца юха бокхуш.\nХӀара дешдерг кхочушъ динчул  тӀехьа хьан йиш хир-яц и юха меттахӀотто.",
        "prefs-emailconfirm-label": "Электронан почта бакъ яр:",
        "youremail": "Электронан почта:",
        "prefs-timeoffset": "Хенан  гӀирс",
        "prefs-advancedediting": "Юкъара параметреш",
        "prefs-editor": "Тадар",
-       "prefs-preview": "Хьалха муха ю хьажар",
+       "prefs-preview": "Хьалха хьажар",
        "prefs-advancedrc": "Кхин гӀирс нисбар",
        "prefs-advancedrendering": "Кхин гӀирс нисбар",
        "prefs-advancedsearchoptions": "Кхин гӀирс нисбар",
        "prefs-advancedwatchlist": "Кхин гӀирс нисбар",
        "prefs-displayrc": "Гуш болу гӀирсаш",
        "prefs-displaywatchlist": "Гуш болу гӀирсаш",
+       "prefs-tokenwatchlist": "Токен",
        "prefs-diffs": "Башхон верси",
        "prefs-help-prefershttps": "И хийцам болх байта юхугӀо системин чу.",
        "email-address-validity-valid": "Го нийса",
        "userrights-nologin": "Куьйгалхочунна бакъо йолу [[Special:UserLogin|дӀаяздарца]] ло декъашхочун бакъо.",
        "userrights-notallowed": "Хьан дӀаяздарца магийна дац декъашхошна бакъо яла а дӀаяккха а.",
        "userrights-changeable-col": "Хьона хийца луш йолу бакъонаш",
-       "userrights-unchangeable-col": "Хьона хийца луш йоцу бакъонаш",
+       "userrights-unchangeable-col": "Хьуна хийца луш йоцу бакъонаш",
        "group": "Тоба:",
        "group-user": "Декъашхой",
        "group-autoconfirmed": "Ша тӀелаьцболу декъашхой",
        "right-createtalk": "Дийцаре агӀонаш кхоллар",
        "right-createaccount": "декъашхошна керла дӀаяздарш кхоллар",
        "right-minoredit": "«къезиг хийцам» аьлла билгало хӀоттор",
-       "right-move": "Ð\90гÓ\80онаÑ\88ан цӀераш хийцар",
-       "right-move-subpages": "Ð\90гÓ\80онаÑ\88ан цӀераш хийцар цера бухара агӀонашцан",
+       "right-move": "Ð\90гÓ\80онийн цӀераш хийцар",
+       "right-move-subpages": "Ð\90гÓ\80онийн цӀераш хийцар цера бухара агӀонашцан",
        "right-move-rootuserpages": "декъашхочун ораман агӀонийн цӀераш хийцар",
        "right-move-categorypages": "Категорийн агӀонийн цӀераш хийцар",
        "right-movefile": "Файлийн цӀе хийцар",
-       "right-suppressredirect": "агÓ\80она Ñ\86Ó\80е Ñ\85Ñ\83Ñ\8cйÑ\86Ñ\83Ñ\88 Ñ\88иÑ\80Ñ\87Ñ\83 Ñ\86Ó\80аÑ\80аÑ\85 Ð¼Ð° ÐºÑ\85олла Ð´Ó\80аÑ\81аÑ\85Ñ\8cажаÑ\8fÑ\80",
+       "right-suppressredirect": "агÓ\80она Ñ\86Ó\80е Ñ\85Ñ\83Ñ\8cйÑ\86Ñ\83Ñ\88 Ñ\88иÑ\80Ñ\87Ñ\83 Ñ\86Ó\80аÑ\80аÑ\85 Ð¼Ð° ÐºÑ\85олла Ð´Ó\80аÑ\81аÑ\85Ñ\8cажоÑ\80г",
        "right-upload": "Файлаш чуйаьхар",
        "right-reupload": "йолуш йолу чера тӀехула файлаш дӀаязъяр",
        "right-reupload-own": "тохарлеррачу декъашхочо файлаш юху дӀаязъяр",
        "recentchanges-label-bot": "ХӀара нисдар шаболх бечо дина",
        "recentchanges-label-unpatrolled": "ХӀара нисдар хӀинца цхьано патрулировать дина дац",
        "recentchanges-label-plusminus": "байташкахь барам хийцар",
+       "recentchanges-legend-heading": "'''Легенда:&nbsp;'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (хьажа кхин [[Special:NewPages|керла агӀонийн могӀа]])",
        "rcnotefrom": "Лахахь гайтина тӀера <strong>$2</strong> (хийцамаш <strong>$1</strong> кӀезиг).",
        "rclistfrom": "Гайта хийцам $3 $2 хан",
        "rcshowhidemine-show": "Гайта",
        "rcshowhidemine-hide": "Къайладаха",
        "rclinks": "Гайта тӀаьхьара $1 хийцамаш $2 ден<br />$3",
-       "diff": "тейп тайпнара",
+       "diff": "башхалла",
        "hist": "истори",
        "hide": "Къайлаяккха",
        "show": "Гайта",
        "recentchangeslinked-feed": "Кхуьнца долу нисдарш",
        "recentchangeslinked-toolbox": "Кхуьнца долу нисдарш",
        "recentchangeslinked-title": "Кхуьнца долу нисдарш $1",
-       "recentchangeslinked-summary": "Ð¥Ó\80аÑ\80а Ñ\85ийÑ\86ам Ð±Ð¸Ð½Ð°Ñ\87Ñ\83 Ð°Ð³Ó\80онаÑ\88ан Ð¼Ð¾Ð³Ó\80ам Ð±Ñ\83, Ñ\82Ó\80еÑ\82овжаÑ\80 Ð´Ð¾Ð»Ñ\83Ñ\88 Ñ\85Ñ\8cагÑ\83Ñ\87Ñ\83 Ð°Ð³Ó\80он (йа Ñ\85Ñ\8cагойÑ\82Ñ\83Ñ\88 Ð¹Ð¾Ð»Ñ\83Ñ\87Ñ\83 ÐºÐ°Ñ\82егоÑ\80ена).\nÐ\90гÓ\80онаÑ\88 Ñ\8eÑ\8cкÑ\8aайогӀуш йолу хьан [[Special:Watchlist|тергаме могӀам чохь]] '''къастийна ю'''.",
+       "recentchangeslinked-summary": "Ð¥Ó\80аÑ\80а Ñ\85ийÑ\86ам Ð±Ð¸Ð½Ð°Ñ\87Ñ\83 Ð°Ð³Ó\80онийн Ð¼Ð¾Ð³Ó\80ам Ð±Ñ\83, Ñ\82Ó\80еÑ\82овжаÑ\80 Ð´Ð¾Ð»Ñ\83Ñ\88 Ñ\85Ñ\8cагÑ\83Ñ\87Ñ\83 Ð°Ð³Ó\80он (Ñ\8f Ñ\85Ñ\8cагойÑ\82Ñ\83Ñ\88 Ð¹Ð¾Ð»Ñ\83Ñ\87Ñ\83 ÐºÐ°Ñ\82егоÑ\80ена).\nÐ\90гÓ\80онаÑ\88 Ñ\8eÑ\8cкÑ\8aа йогӀуш йолу хьан [[Special:Watchlist|тергаме могӀам чохь]] '''къастийна ю'''.",
        "recentchangeslinked-page": "АгӀон цӀе:",
        "recentchangeslinked-to": "Кхечу агӀор, гайта хийцамаш агӀонашца, хӀоттийначу агӀонтӀе хьажораг йолуш",
        "upload": "Файл чуяккхар",
        "license-header": "Бакъойалар",
        "nolicense": "Яц",
        "licenses-edit": "Лицензин параметраш хийца",
-       "license-nopreview": "(Хьалха муха ю хьажа цало)",
+       "license-nopreview": "(Хьалха хьажа цало)",
        "upload_source_url": "(ахьа хаьржина нийса, массо тӀекхочу интернет-адрес)",
        "upload_source_file": "(файл хьан компьютер чохь ю)",
        "listfiles-delete": "дӀаяккха",
        "randomredirect-nopages": "«$1» цӀерийн меттиган чохь дӀасахьажораш яц.",
        "statistics": "Статистика",
        "statistics-header-pages": "АгӀонийн жамӀ",
-       "statistics-header-edits": "Нисдаран жамӀ",
-       "statistics-header-views": "Хьажаран статистика",
-       "statistics-header-users": "Декъашхойн жамӀа",
+       "statistics-header-edits": "Нисдарийн статистика",
+       "statistics-header-users": "Декъашхойн статистика",
        "statistics-header-hooks": "Кхин статистика",
        "statistics-articles": "Яззамаш",
        "statistics-pages": "АгӀонаш",
-       "statistics-pages-desc": "Массо вики агlонаш, дийцаре агlонашцани, дlасахьаждарш а кхин дерш.",
+       "statistics-pages-desc": "Массо вики агӀонаш, дийцаре агӀонашцани, дӀасахьаждарш а кхин дерш.",
        "statistics-files": "Чуяьхна файлаш",
        "statistics-edits": "Нисдаран дукхалла {{grammar:genitive|{{SITENAME}}}} дlа йолайаларца",
-       "statistics-edits-average": "Юккъера агӀонан нисдаран терахь",
-       "statistics-views-total": "Массо хьажарш",
-       "statistics-views-total-desc": "Ма лара дӀаяьхна а белхан а агӀонашка хьажар",
-       "statistics-views-peredit": "Нисдаре хьажарш",
-       "statistics-users": "[[ВП:ДӀаязвалар|ДӀаязбелларш]] берриге декъашхой чохь болу [[Special:ListUsers|(могӀам)]]",
+       "statistics-edits-average": "АгӀонан нисдарийн юкъара дукхалла",
+       "statistics-users": "[[ВП:ДӀаязбаллар|ДӀаязбелларш]] берриге декъашхой чохь болу [[Special:ListUsers|(могӀам)]]",
        "statistics-users-active": "Жигара декъашхой",
        "statistics-users-active-desc": "Декъашхой, муьлха цхьа хӀум дина болу, кху {{PLURAL:$1|1=тӀаьххьара $1 динахь|тӀаьххьара $1 дийнахь}}",
-       "statistics-mostpopular": "Дукху хьоьжу агӀонаш",
        "pageswithprop": "АгӀонаш цхьадолу къастамашца",
        "pageswithprop-legend": "АгӀонаш цхьадолу къастамашца",
        "pageswithprop-text": "Кхузахь гойтуш ю агӀонаш цхьадолу къастамаш куьйга юху билгал даьхнарш.",
        "brokenredirects-delete": "дӀаяккха",
        "withoutinterwiki": "Юкъарвики-хьажоргаш йоцу агӀонаш",
        "withoutinterwiki-summary": "Лахара агӀонийн юкъарвики-хьажоргаш яц:",
+       "withoutinterwiki-legend": "ТӀетоьхна элпаш",
        "withoutinterwiki-submit": "Гайта",
        "fewestrevisions": "ЧӀогӀа кӀезиг версеш йолу агӀонаш",
        "nbytes": "$1 {{PLURAL:$1|байт}}",
        "uncategorizedtemplates": "Категореш йоцу кепаш",
        "unusedcategories": "Йаьсса категореш",
        "unusedimages": "Лелош йоцу файлаш",
-       "popularpages": "ГӀараяьлла агӀонаш",
        "wantedcategories": "Оьшуш йолу категореш",
        "wantedpages": "Оьшуш йолу агӀонаш",
        "wantedfiles": "Оьшуш йолу файлаш",
        "mostinterwikis": "Дуккха юкъарвики хьажоргаш тӀе тоьхна йолу агӀонаш",
        "mostrevisions": "Сих сиха нисйина йолу агӀонаш",
        "prefixindex": "Хьалха агӀонийн цӀераш хӀотто еза",
-       "prefixindex-namespace": "Ð¥Ñ\8cалÑ\85а Ð°Ð³Ó\80онаÑ\88ан цӀераш хӀотто еза («{{ns:$1}}»)",
+       "prefixindex-namespace": "Ð¥Ñ\8cалÑ\85а Ð°Ð³Ó\80онийн цӀераш хӀотто еза («{{ns:$1}}»)",
        "prefixindex-strip": "Хиламийн могӀам чура префикс къайлаяккха",
        "shortpages": "Боца яззамаш",
        "longpages": "Беха яззамаш",
        "usercreated": "{{GENDER:$3|дӀавазвелла|дӀаязелла}} $1 $2",
        "newpages": "Керла агӀонаш",
        "newpages-username": "Декъашхо:",
-       "ancientpages": "ЯззамаÑ\88 Ð¾Ñ\86Ñ\83 Ñ\82еÑ\80аÑ\85Ñ\8cÑ\86а Ñ\82Ó\80аÑ\8cÑ\85Ñ\85Ñ\8cаÑ\80а Ñ\82адаÑ\80 Ð´Ð¸Ð½Ð° Ð´Ð¾Ð»Ñ\83",
+       "ancientpages": "ТÓ\80еÑ\85Ñ\8cаÑ\80а Ñ\82еÑ\80аÑ\85Ñ\8cÑ\86а Ñ\82адаÑ\80 Ð´Ð¸Ð½Ð° Ñ\8fззамаÑ\88",
        "move": "ЦӀе хийца",
        "movethispage": "ХӀокху агӀон цӀе хийца",
        "unusedimagestext": "Дехар до, тидаме эца, кхин йолу дуьнана машан-меттигаш а лелош хила мега нийсса йогӀу хьажораг (URL) хӀокху хӀуман, хӀокху могӀаме йогӀуш ялахь яцахь а иза хила мега жигара лелош.",
        "pager-newer-n": "{{PLURAL:$1|алсамо керла 1|алсамо керланаш $1}}",
        "pager-older-n": "{{PLURAL:$1|алсамо шира 1|алсамо ширниш $1}}",
        "suppress": "Хьулдар",
+       "apihelp": "API гӀо",
+       "apihelp-no-such-module": "Модуль «$1» цакарий.",
        "booksources": "Жайнан хьосташ",
        "booksources-search-legend": "Жайнех лаьцна хаам лахар",
-       "booksources-go": "Лаха",
+       "booksources-search": "Лаха",
+       "booksources-text": "ХӀокху агӀонгахь гул бина сайтийн тӀе хьажоргийн могӀам оцу чохь шуна жайнах лаьцна хаам каро мега. И ю интернет-туьканаш а категорийн библиотекийн категорешкахь лахаран система а.",
        "specialloguserlabel": "Декъашхо:",
        "speciallogtitlelabel": "Ӏалашо (цӀе я декъашхо):",
        "log": "Тéптарш",
        "allpagesfrom": "Гучé яха агӀонаш, йолалуш йолу оцу:",
        "allpagesto": "Арайахар сацадé оцу:",
        "allarticles": "Массо агӀонаш",
-       "allinnamespace": "Массо агlонаш оцу цlери анахь «$1»",
+       "allinnamespace": "Массо агӀонаш оцу цӀерийн анахь «$1»",
        "allpagessubmit": "Кхочушдé",
        "allpagesprefix": "Лаха агӀонаш, дӀайолалуш йолу:",
        "allpagesbadtitle": "Цамагош йолу агӀон цӀе. Коьрта могӀан юкъах ю юкъарвики меттанашан юкъе тӀечӀагӀйина йолу хьаьрк йа магийна доцу оцу коьрта моӀанца символаш йа кхин.",
        "allpages-bad-ns": "{{SITENAME}} кху чохь ана цӀераш яц «$1».",
        "allpages-hide-redirects": "Къайлаяха дӀасахьажийнарш",
+       "cachedspecial-viewing-cached-ttl": "Хьо хьоьжу агӀона верси кэш чура ю, иза карлаяьккхина хила мега $1 хьалха.",
        "cachedspecial-refresh-now": "Хьажа тӀехьарчу версега.",
        "categories": "Категореш",
        "categoriespagetext": "{{PLURAL:$1|1=Лахара категореш чохь ю|Лахара категореш чохь ю}} агӀонаш я медиа-файлаш.\nКхузахь гойтуш яц [[Special:UnusedCategories|лелош йоцу категореш]].\nКхин дӀа [[Special:WantedCategories| хийла еза категореш]].",
        "watchlist-details": "Хьан тергаме могӀанца $1 {{PLURAL:$1|агӀо}} ю, дийцаре агӀонаш йоцуш.",
        "wlheader-enotif": "Электронан почте хаамаш байтар латина ду.",
        "wlheader-showupdated": "Хийцам бина агӀонаш '''Ӏаьржа''' шрифтцан билгальяха ю.",
-       "wlnote": "Лахахьа {{PLURAL:$1|тlаьхьа богlу $1 хийцам|тlаьхьа богlу $1 хийцамаш|тlаьхьа богlу $1 хийцамаш}} хlокху {{PLURAL:$2|тlаьхьар|тlаьхьара|тlаьхьара}} <strong>$2</strong> {{PLURAL:$2|сохьт|сохьатехь|сохьташкахь}}.",
-       "wlshowlast": "Гайта тӀаьххьара $1 сахьт $2 де $3",
+       "wlnote": "Лахахьа {{PLURAL:$1|тӀаьхьабогӀу $1 хийцам|тӀаьхьабогӀу $1 хийцамаш}} хӀокху {{PLURAL:$2|тӀаьхьар}} <strong>$2</strong> {{PLURAL:$2|сахьтехь}}.",
+       "wlshowlast": "Гайта тӀаьххьара $1 сахьт $2 де",
        "watchlist-options": "Тергаме могlаман гlирс нисбар",
        "watching": "Тергаме мlогаман юкъаяккха…",
        "unwatching": "Тергаме могӀанан чура дӀаяккхар…",
        "deletecomment": "Бахьна:",
        "deleteotherreason": "Кхин бахьна/тӀетохар:",
        "deletereasonotherlist": "Кхин бахьна",
-       "deletereason-dropdown": "* Даржина долу дӀаяккхаран баьхьанаш \n** зулма  \n** авторан лаамца\n** авторан бакъонаш талхор",
+       "deletereason-dropdown": "* Даржина долу дӀаяккхаран баьхьанаш \n** спам\n** зулма  \n** авторан лаамца\n** авторан бакъонаш талхор\n** болх цабо дӀасхьажорг",
        "delete-edit-reasonlist": "Бахьанин могӀам нисбар",
        "deleting-backlinks-warning": "'''ДӀахьедар:''' Ахьа дӀайоккхуш йолчун тӀе товжийна [[Special:WhatLinksHere/{{FULLPAGENAME}}|кхин агӀонаш]] ю.",
        "rollback": "Юхабаккха хийцам",
        "rollbackfailed": "Юхайоккхуш гӀалат ду",
        "alreadyrolled": "ТӀехьара [[User:$2|$2]] ([[User talk:$2|дийцаре]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) декъашхочо «[[:$1]]» агӀона  бина хийцамаш юхабаха цатарло,\nхӀинцале цхъаъ кхиъна хийцамаш юхабаха я агӀо тая.\n\nХийцамаш бинарг [[User:$3|$3]] ([[User talk:$3|дийцаре]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Хийцамаш барна гайтина бахьна: ''$1''.",
-       "revertpage": "Ð\9dиÑ\81даÑ\80Ñ\88 [[Special:Contributions/$2|$2]] ([[User talk:$2|дийÑ\86аÑ\80е]]) Ñ\8eÑ\85а Ð´Ð°Ñ\8cÑ\85на Ð±Ð°Ñ\88Ñ\85аллийн [[User:$1|$1]]",
-       "revertpage-nouser": "Ð\9dиÑ\81даÑ\80Ñ\88 (декÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ñ\86Ó\80е Ñ\85Ñ\8cÑ\83лйина) Ñ\8eÑ\85адаÑ\8cÑ\85ина Ð±Ð°Ñ\88Ñ\85аллин {{GENDER:$1|[[User:$1|$1]]}}",
+       "revertpage": "Ð\9dиÑ\81даÑ\80Ñ\88 [[Special:Contributions/$2|$2]] ([[User talk:$2|дийÑ\86аÑ\80е]]) Ñ\8eÑ\85а Ð´Ð°Ñ\8cÑ\85на Ð²ÐµÑ\80Ñ\81ин [[User:$1|$1]]",
+       "revertpage-nouser": "Ð\9dиÑ\81даÑ\80Ñ\88 (декÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ñ\86Ó\80е Ñ\85Ñ\8cÑ\83лйина) Ñ\8eÑ\85адаÑ\8cÑ\85ина Ð²ÐµÑ\80Ñ\81ин {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Юхадаьхна $1; нисдарш, $2 версен.",
        "sessionfailure-title": "Сеансан гӀалат",
        "sessionfailure": "Карара белхан сеансан гӀалат деллачух тера ду;\nиза дешдерг сацийна «сеанс долаерзийтта».\nДехар до, тӀетаӀе «ЮхугӀо» кнопка, кхин агӀо карлаяккха.",
        "protect-expiring": "чакхйолу $1 (UTC)",
        "protect-expiring-local": "чекхйолу $1",
        "protect-expiry-indefinite": "хан чаккхе йоцуш",
-       "protect-cascade": "Гlаролла йé агlонаш, хlокху агlонца хlоттайелларш (чахчарé гlаролла)",
+       "protect-cascade": "ГӀаролла йé агӀонаш, хӀокху агӀонца хӀоттайелларш (чахчарé гӀаролла)",
        "protect-cantedit": "Хьéга хийцам цабало хӀокху агӀон гlаролли локхалан, хӀуд аьлча хьан бакъо яц оцунна тадар дан.",
        "protect-othertime": "Кхин хан:",
        "protect-othertime-op": "кхин хан",
+       "protect-existing-expiry": "Карара чекхйолу хан: $2, $3",
        "protect-otherreason": "Кхин бахьна/тӀетохар:",
        "protect-otherreason-op": "Кхин бахьна",
        "protect-dropdown": "* ГӀоралла дарна баьхьаш \n** сих-сиха зулам дар \n** дуккха спам хилар\n** нисдарийн тӀом \n** гӀараялл агӀо",
        "restriction-level": "ТӀекхочаран локхалла:",
        "minimum-size": "Лаххара бараме",
        "maximum-size": "Лаккхара бараме:",
+       "pagesize": "(байт)",
        "restriction-edit": "Тадар",
        "restriction-move": "ЦӀе хийцар",
        "restriction-create": "Кхоллар",
        "viewdeletedpage": "ДӀаяьхна йолу агӀонашка хьажар",
        "undelete-fieldset-title": "МеттахӀоттае версеш",
        "undeleteextrahelp": "Ерриге агӀонан истори меттахӀоттая массо а билгалонаш еса а йити '''«{{int:undeletebtn}}»''' тӀетаӀае.\nЦхӀайолу агӀонан версеш меттахӀоттая хьалха меттахӀоттош йолу версеш билгалъяьхна тӀетагӀе '''«{{int:undeletebtn}}»'''.",
+       "undeleterevisions": "$1 {{PLURAL:$1|верси}} архив чу {{PLURAL:$1|йиллина}}",
        "undeletehistory": "Агӏо меттахӏотта йича цуьнан хийцаман истори меттахӏотта ло.\nАгӏо дӏаяккхинчул тӏяха юху кхолийна елахь меттахӏоттина йолу версеш гучуер ю керлачу версешна хьалха",
        "undeleterevdel": "Метта хlоттор хира дац, нагахь иза дакъошкахь дlадайина далахь а тlаьххьара кисак башхо йа хlума.\nИштнарг хилча ахьа дlабаккха беза хlоттийна болу къастам йа хьагайта тlаьххьара дlайайина башхо.",
        "undelete-revision": "Декъашхочун $3 дӀаяьккхина верси $1 (цу $4 $5 хан):",
+       "undelete-nodiff": "Хьалхалера версеш цакарий.",
        "undeletebtn": "МеттахӀоттае",
        "undeletelink": "хьажа/меттахӀоттае",
        "undeleteviewlink": "хьажа",
        "undeleteinvert": "Къастае массо",
        "undeletecomment": "Бахьна:",
        "undeletedrevisions": "{{PLURAL:$1|меттахӀоттайина}} $1 {{PLURAL:$1|хийцам}}",
+       "undeletedrevisions-files": "меттахӀоьттина $1 {{PLURAL:$1|верси}} а $2 {{PLURAL:$2|файл}} а",
        "undeletedfiles": "$1 {{PLURAL:$1|файл меттахӀоттайина|файлаш меттахӀоттайина}}",
        "cannotundelete": "ГӀалат меттахӀоттайина:\n$1",
        "undeletedpage": "'''МеттахӀоттайина агӀо «$1».'''\n\nДӀадяхнарш долу могӀане [[Special:Log/delete|тéптаре хьажа]].",
        "undelete-error": "АгӀо меттахӀоттаяран гӀалат",
        "undelete-error-short": "Файл меттахӀоттаяран гӀалат: $1",
        "undelete-error-long": "Файл меттахӀоттош гӀалат даьлла:\n\n$1",
-       "undelete-show-file-submit": "Хlаъ",
+       "undelete-show-file-submit": "ХӀаъ",
        "namespace": "Цlерийн ана:",
        "invert": "Хаьржинарг къайлаяккха",
-       "tooltip-invert": "Ð¥Ó\80оÑ\82Ñ\82ае Ñ\85Ó\80аÑ\80а Ð±Ð¸Ð»Ð³Ð°Ð»Ð¾, Ñ\85аÑ\8cÑ\80жинÑ\87Ñ\83 Ñ\86Ó\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82иган Ð°Ð³Ó\80онаÑ\88ан хийцамаш къайлабаха (кхин дихкина цӀерийн меттигаш, гайтина елахь)",
+       "tooltip-invert": "Ð¥Ó\80оÑ\82Ñ\82ае Ñ\85Ó\80аÑ\80а Ð±Ð¸Ð»Ð³Ð°Ð»Ð¾, Ñ\85аÑ\8cÑ\80жинÑ\87Ñ\83 Ñ\86Ó\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82иган Ð°Ð³Ó\80онийн хийцамаш къайлабаха (кхин дихкина цӀерийн меттигаш, гайтина елахь)",
        "namespace_association": "Йихкина меттиг",
        "tooltip-namespace_association": "ХӀоттае хӀара билгало, иштта дийцарийн (я кхин) цӀерийн меттиг юкъахь хилийта",
        "blanknamespace": "(Коьрта)",
        "contributions-title": "{{GENDER:$1|Декъашхочун}} къинхьегам $1",
        "mycontris": "Сан къинхьегам",
        "contribsub2": "Къинхьегам $1 ($2)",
-       "contributions-userdoesnotexist": "«$1» Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ð´Ó\80аÑ\8fздаÑ\80 Ð´Ó\80аÑ\8fздина Ñ\8fц.",
+       "contributions-userdoesnotexist": "«$1» Ð¸Ñ\88Ñ\82а Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ð´Ó\80аÑ\8fздаÑ\80 Ð´Ð°ц.",
        "nocontribs": "Дехарца хийцамаш цакарий.",
        "uctop": "(карара)",
        "month": "Баттачохь (я хьалхе):",
        "year": "Шерачохь (я хьалхе):",
        "sp-contributions-newbies": "Гайта бекъ къинхьегам, керла дlабазбиначара бина болу",
        "sp-contributions-newbies-sub": "Керла декъашхойн дӀаяздаршкара",
+       "sp-contributions-newbies-title": "Дукху хан йоцуш кхоьллинчу декъашхойн дӀаяздарийн къинхьегам",
        "sp-contributions-blocklog": "блоктоьхарш",
        "sp-contributions-suppresslog": "Декъашхочун дӀабаьккхина къинхьегам",
        "sp-contributions-deleted": "дӀадяхна нийсдарш",
        "linkshere": "ТӀаьхьайогӀу агӀонаш оцу '''[[:$1]]''': хьажорагца ю",
        "nolinkshere": "ХӀокху '''[[:$1]]''' агӀона тӀе кхечу агӀонашкахь хьажоргаш яц.",
        "nolinkshere-ns": "Хаьржинчу анахь яц '''[[:$1]]''' цӀе йолу агӀонаш",
-       "isredirect": "агÓ\80о-дÓ\80аÑ\81аÑ\85Ñ\8cажайаÑ\80",
+       "isredirect": "агÓ\80о-дÓ\80аÑ\81аÑ\85Ñ\8cажоÑ\80г",
        "istemplate": "юкъаялийнарш",
        "isimage": "Файлан хьажораг",
        "whatlinkshere-prev": "{{PLURAL:$1|1=хьалхайодарг|хьалхайодарш}} $1",
        "noautoblockblock": "ша блоктухарг дӏаяйина",
        "createaccountblock": "цамагдо керла дӀаяздарш кхоллар",
        "emailblock": "цамаго кехаташ кхехӀита",
-       "blocklist-nousertalk": "шин дийцаре агӀо тая лууш дац",
+       "blocklist-nousertalk": "шин дийцаре агӀо таян луш дац",
        "ipblocklist-empty": "Блоктохаран могӀам баьсса бу.",
        "ipblocklist-no-results": "И адрес блоктоьхна дац.",
        "blocklink": "блоктоха",
        "block-log-flags-nocreate": "цамагдо керла дӏаяздарш кхоллар",
        "block-log-flags-noautoblock": "ша блоктухарг дӏаяйина",
        "block-log-flags-noemail": "цамаго кехаташ кхехӀита",
-       "block-log-flags-nousertalk": "шин дийцаре агӀо тая лууш дац",
+       "block-log-flags-nousertalk": "шин дийцаре агӀо таян луш дац",
        "block-log-flags-angry-autoblock": "латина шуьйра автоблоктохар",
        "block-log-flags-hiddenname": "декъашхочун цӀе къайлаяьккхина",
        "range_block_disabled": "Куьйгалхошна диапазонашна блоктоха цамага до.",
        "locknoconfirm": "Ахьа бакъдеш йолу меттиге билгало йилина яц.",
        "lockdbsuccesssub": "Хаамийн базан блоктоьхна",
        "unlockdbsuccesssub": "Хаамийн базан тӀера блокдӀаяьккхина",
+       "lockedbyandtime": "($1 $2 $3)",
        "move-page": "$1 — цӀе хийцар",
        "move-page-legend": "ЦӀe хийца яр",
        "movepagetext": "Бухахь йолу форманца агӀон цӀе хийцало. Цул совнах цуьна хийцаман тептар кхоьчу метте доккха. Хьалхалера цӀарахь хиръю керла кхоьллина агӀонан хьажораг.\n\nХьовсалаш [[Special:DoubleRedirects|шалха]] а [[Special:BrokenRedirects|йохна хьажоргаш]] юй техь аьлла.\n\nШу жоьпехь ду хьажоргаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажораг елахь, я еса елахь а, цуьна хийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хилларгчунтӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
        "movepagetext-noredirectfixer": "Бухахь йолу форманца агӀон цӀе хийцало. Цул совнах цуьна хийцаман тептар кхоьчу метте доккха. Хьалхалера цӀарахь хиръю керла кхоьллина агӀонан хьажораг.\n\nХьовсалаш [[Special:DoubleRedirects|шалха]] а [[Special:BrokenRedirects|йохна хьажоргаш]] юй техь аьлла.\n\nШу жоьпехь ду хьажоргаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажораг елахь, я еса елахь а, цуьна хийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хилларгчунтӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
        "movepagetalktext": "ТӀе хӀоьттина йолу дийцаре агӀо ишта цӀе хийцина хира ю, '''цхьа йолу ханчохь, маца:'''\n\n*Йаьсса йоцу дийцаре агӀо йолуш ю оцу цӀарца йа\n*Ахьа къастаман харжам цабиняхь а къастам хӀотточехь.\n\nИшта чу ханчохь, ахьа дехьа яккха йезар ю йа куьйга хӀоттайар, нагахь иза хьашт йалахь.",
-       "movearticle": "Цle хийца хlокху агlон",
+       "movearticle": "ЦӀе хийца хӀокху агӀон",
        "moveuserpage-warning": "'''Тергам бе.''' Хьо декъашхочун агӀона цӀе хийца гӀерта. Дехар до, тергам бе, декъашхочун агӀона цӀе бен хийца лур яц, декъашхочун дӀаяздаран цӀе хийца лур яц.",
        "movecategorypage-warning": "<strong>ДӀахьедар:</strong> Хьо категорин агӀон цӀе хийца гӀерта. Дехар до, терго йе, хӀокху агӀона бен цӀе хуьйцур яц, шира чу категори чура массо агӀонаш керла категори чу йохур <em>яц</em>.",
        "movenologintext": "АгӀона цӀе хийца [[Special:UserLogin|системин чугӀо]].",
        "movenotallowedfile": "Хьан файлийн цӀераш хийца бакъо яц.",
        "cant-move-user-page": "Хьан бакъо яц декъашхойн коьрта агӀонийн цӀераш хийца.",
        "cant-move-to-user-page": "Хьан бакъо яц агӀона цӀе декъашхочун агӀон тӀе хийца (бухара агӀон тӀе хийца мега).",
+       "cant-move-category-page": "Хьан категорийн цӀераш хийца бакъо яц.",
+       "cant-move-to-category-page": "Хьан категорийн цӀераш хийца бакъо яц.",
        "newtitle": "Керла цӀе",
        "move-watch": "Латайé хӀара агӀо тергаме могӀанан юкъахь",
        "movepagebtn": "АгӀон цӀе хийца",
        "movepage-moved-noredirect": "ДӀасхьажорг кхоллар дохина.",
        "articleexists": "ХӀарасанна цӀе йолу агӀо йолуш ю йа ахьа гойтуш йолу цӀе магош яц.\nДехар до, харжа кхин цӀе.",
        "movetalk": "Цуьнца йогӀуш йолу дийцаре агӀон цӀе хийцар",
-       "move-subpages": "ЦӀeрш хийцае бухара агӀонаши ($1 кхаччалц)",
-       "move-talk-subpages": "ЦÓ\80е Ñ\85ийÑ\86а Ð±Ñ\83Ñ\85аÑ\80а Ð°Ð³Ó\80онаÑ\88и Ð° Ð°Ð³Ó\80онаÑ\88ан дийцаре а ($1  кхаччалц)",
+       "move-subpages": "ЦӀераш хийца бухара агӀонийн ($1 кхаччалц)",
+       "move-talk-subpages": "ЦÓ\80е Ñ\85ийÑ\86а Ð±Ñ\83Ñ\85аÑ\80а Ð°Ð³Ó\80онийн Ð° Ð°Ð³Ó\80онийн дийцаре а ($1  кхаччалц)",
        "movepage-page-exists": "Агӏо $1 йолуш ю цундела и ша юху дӏаязъян йиш яц.",
        "movepage-page-moved": "АгӀона $1 цӀе хийцина → $2.",
        "movelogpage": "ЦӀераш хийцаран тептар",
        "revertmove": "юхаяккха",
        "delete_and_move": "Цle а хуьйцуш дӀаяккха",
        "delete_and_move_text": "== ДӀаяккха хьокъ ю ==\nИ цӀе йолу аг1о «[[:$1]]» йолуш ю. \nЛаьий хьуна и дӀаяккха, цӀе хийца таро хилийта?",
-       "delete_and_move_confirm": "Хlаъ, дӀаяккха хlара агlо",
+       "delete_and_move_confirm": "ХӀаъ, дӀаяккха хӀара агӀо",
        "delete_and_move_reason": "ДӀаяьккхина цӀе хийца я таро хилийта  «[[$1]]»",
        "selfmove": "АгӀона цӏе хийца йиш яц: и цӏе хӏокху агӏона йолуш ю.",
        "immobile-source-page": "ХӀокху агӏона цӏе хийца йиш яц.",
        "thumbnail_image-missing": "$1 файл йоцчух тера ду",
        "import": "АгӀонаш чуяхар",
        "importinterwiki": "Викиюкъахь-импорт",
+       "import-interwiki-sourcewiki": "ДӀайолалун вики-проект:",
        "import-interwiki-sourcepage": "ДӀайолалун агӀо:",
        "import-interwiki-history": "ХӀокху агӀона ерриг хийцаман истори копи ян",
        "import-interwiki-templates": "Юкъайихка массо кепаш",
        "importnopages": "Импорт ян агӀонаш яц.",
        "imported-log-entries": "{{PLURAL:$1|Тептар чура импорт дина $1 дӀаяздар|Тептар чура импорт дина $1 дӀаяздарш}}.",
        "importfailed": "Импорт ян цаелира: $1",
+       "importunknownsource": "Импорт еш йолу агӀона цадевза тайп",
        "importcantopen": "Цатарло импорт еш йолу файл елла.",
        "importbadinterwiki": "Нийса йоцу юкъаравики-хьажорг",
        "importsuccess": "Импорт яр кхочушдина!",
        "import-error-interwiki": "«$1» агӀо импорт ца йина, цуна цӀе арахьара хьажоргашна (юкъаравикешна) кечйина хилар бахьнехь.",
        "import-error-special": "«$1» агӀо импорт йина яц, и къастина цӀерийн меттигийн юкъайогӀуш хиларна.",
        "import-error-invalid": "«$1» агӀо импорт цайина, оцунна импорт еш йолу цӀе хӀокху вики чохь ца магийна хилар бахьнехь.",
+       "import-options-wrong": "{{PLURAL:$2|1=Нийса йоцу опци|Нийса йоцу опцеш}}: <nowiki>$1</nowiki>",
+       "import-rootpage-invalid": "Билгалйина коьрта агӀона цӀе нийса яц.",
        "importlogpage": "Импортан тептар",
        "importlogpagetext": "Куьйгалхоша агӀонаш импорт яр царна бина хийцамашца кхечу википедеш чура.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|верси импорт йина|версеш импорт йина}}",
        "tooltip-ca-unwatch": "ДӀаяккха хӀара агӀо хьай тергаме могӀанан юкъар",
        "tooltip-search": "Лаха иза дош",
        "tooltip-search-go": "Билгала и санна цӀе йолучу агӀон чу дехьа гӀо",
-       "tooltip-search-fulltext": "Лаха агlонаш ше чулацамехь хlара йоза долуш",
+       "tooltip-search-fulltext": "Лаха агӀонаш ше чулацамехь хӀара йоза долуш",
        "tooltip-p-logo": "Коьрта агӀона дехьа гӀо",
        "tooltip-n-mainpage": "Коьрта агӀона дехьа гӀо",
        "tooltip-n-mainpage-description": "Коьрта агӀона дехьа гӀо",
        "tooltip-ca-nstab-category": "Категорешан агӀо",
        "tooltip-minoredit": "Къастам бé хӀокху хийцамна кӀеззиг болуш санна",
        "tooltip-save": "Хьан хийцамаш lалашбой",
-       "tooltip-preview": "Дехар до, агlо lалаш йарал хьалха хьажа муха йу яз!",
+       "tooltip-preview": "Дехар до, агӀо Ӏалаш ярал хьалха хьажа муха ю из!",
        "tooltip-diff": "Гайта долуш долу йозанах бина болу хийцам.",
-       "tooltip-compareselectedversions": "Хlокху шина хаьржина агlона башхо муха ю хьажа.",
+       "tooltip-compareselectedversions": "ХӀокху шина хаьржина агӀона башхо муха ю хьажа.",
        "tooltip-watch": "ТӀетоха хӀара агӀо сан тергаме могӀанан юкъа",
        "tooltip-watchlistedit-normal-submit": "Билгалйина цӀераш дӀаяха",
        "tooltip-watchlistedit-raw-submit": "Тергаме могӀам карлабаккха",
        "pageinfo-robot-policy": "Лахарийн системийн индексаци",
        "pageinfo-robot-index": "Магийна",
        "pageinfo-robot-noindex": "Магийна дац",
-       "pageinfo-views": "Хьажаран дукхалла",
        "pageinfo-watchers": "Хьоьжучера дукхалла",
        "pageinfo-few-watchers": "{{PLURAL:$1|ТӀаьхьадогӀучерал}} $1 кӀезиг",
        "pageinfo-redirects-name": "ХӀокху агӀон тӀе йолу дӀассахьажорийн дукхалла",
        "nextdiff": "Тlяхьа догlа нисдинарг →",
        "imagemaxsize": "Суьртан бараман доза тохар:<br />''(Файла агӀона куц дийцар)''",
        "thumbsize": "Жима дина суьртан барам:",
-       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|агlо|агlонаш|агlонаш}}",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|агӀо}}",
        "file-info": "файлан барам: $1, MIME-тайп: $2",
        "file-info-size": "$1 × $2 пиксель, файлан барам: $3, MIME-тайп: $4",
        "file-info-size-pages": "$1 × $2 пиксель, файлан барам: $3, MIME-тайп: $4, $5 {{PLURAL:$5|1=агӀо|агӀонаш}}",
        "exif-imagewidth": "Шоралла",
        "exif-imagelength": "Локхалла",
        "exif-bitspersample": "Бесан кIоргалла",
+       "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": "Доладаларан кеп preview",
+       "exif-jpeginterchangeformatlength": "Сизан хааман барам preview",
+       "exif-whitepoint": "Къайн тӀадаман бос",
+       "exif-primarychromaticities": "Коьрта беснийн бос",
        "exif-referenceblackwhite": "Ӏаьржа а къай а тӀадамийн меттиг",
        "exif-datetime": "Файл хийцина терахь а хан",
        "exif-imagedescription": "Суьртан цӏе",
        "exif-make": "Камера арахоьцург",
        "exif-model": "Камеран модель",
        "exif-software": "Лелина программа",
+       "exif-artist": "Автор",
        "exif-copyright": "Авторан бакъо ерг",
        "exif-exifversion": "Верси Exif",
        "exif-flashpixversion": "Ловш йолу верси FlashPix",
        "exif-compressedbitsperpixel": "Бесан кIоргалла дацдина чул тӀехьа",
        "exif-pixelydimension": "Суьртан шоралла",
        "exif-pixelxdimension": "Суьртан локхалла",
+       "exif-usercomment": "Кхин тӀе къамел",
        "exif-relatedsoundfile": "Къамелан аьзнийн файл",
        "exif-datetimeoriginal": "Дуьххьарлера терахь а хан",
        "exif-datetimedigitized": "Оцифровк йина терахь а хан а",
        "exif-urgency-low": "Лахара ($1)",
        "exif-urgency-high": "Лакхара ($1)",
        "exif-urgency-other": "Декъашхочо билгалйина приоритет ($1)",
-       "watchlistall2": "массо",
        "namespacesall": "массо",
        "monthsall": "массо",
        "confirmemail": "Электронан почтан адрес бакъдар",
        "confirm-unwatch-button": "ХӀаъ",
        "confirm-unwatch-top": "ДӀаяккха хӀара агӀо хьай тергаме могӀанан юкъар?",
        "comma-separator": ",&#32;",
+       "quotation-marks": "«$1»",
        "imgmultipageprev": "← хьалхара агlо",
        "imgmultipagenext": "тlаьхьара агlо →",
        "imgmultigo": "ДехьагӀо!",
        "imgmultigoto": "АгӀончу $1 гӀо",
        "img-lang-default": "(Ӏад битарца болу мотт)",
+       "img-lang-info": "Гайта хӀара сурт $1 $2 маттахь",
        "img-lang-go": "Кхочушдé",
+       "ascending_abbrev": "гар",
+       "descending_abbrev": "йина",
        "table_pager_next": "Тlаьхьа йогlу агlо",
        "table_pager_prev": "Хьалха йоьду агlо",
        "table_pager_first": "Дуьххьаралера агlо",
        "autoredircomment": "[[$1]] тӀе хьажийна",
        "autosumm-new": "Керла агlо: «$1»",
        "autosumm-newblank": "Кхоьллина еса агӀо",
+       "lag-warn-normal": "{{PLURAL:$1|$1 Секунд}} хьалха бина хийцамаш хӀокху могӀамехь гуш ца хилла мега.",
+       "lag-warn-high": "Сервераш синхронизаци еш тӀехьайисарна, {{PLURAL:$1|$1 секунд}} хьалха бина хийцамаш хӀокху могӀамехь гуш ца хилла мега.",
        "watchlistedit-normal-title": "Тергаме могӀанийн хийцамаш",
        "watchlistedit-normal-legend": "Тергаме могӀам юкъар дӀаяккхар",
        "watchlistedit-normal-explain": "Лахахь гойту хьан тергаме могӀамехь йолу агӀонаш.\nДӀаяздарш дӀадаха билгалде уьш такха тӀетаӀе кнопка «{{int:Watchlistedit-normal-submit}}».\nКхин хьа йиш ю [[Special:EditWatchlist/raw|йозан кепар могӀом нисба ]].",
        "watchlistedit-raw-explain": "Лахахь гойтуш ю хьа тергаме могӀанийн юкъахь йолу агӀонаш. Хьан йиш ю могӀан хийцам ба, оьцу чура цӀераш тӀетухуш а дӀайохкуш а.\nХийцамаш бина баьлчи тӀетаӀе кнопка «{{int:Watchlistedit-raw-submit}}».\nХьа кхин йиш ю [[Special:EditWatchlist|лело стандартни тадар]].",
        "watchlistedit-raw-titles": "ДӀаяздарш:",
        "watchlistedit-raw-submit": "МогӀам Ӏалашбар",
+       "watchlistedit-raw-done": "Хьан тергаман могӀам Ӏалашбина",
        "watchlistedit-raw-added": "{{PLURAL:$1|ТӀетоьхна}} $1 {{PLURAL:$1|дӀаяздар|дӀаяздарш}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|ДӀаяьккхина|ДӀаяьхна}} $1 {{PLURAL:$1|дӀаяздар|дӀаяздарш}}:",
        "watchlistedit-clear-title": "Тергаман могӀам дӀацӀанбар",
        "watchlistedit-clear-removed": "{{PLURAL:$1|ДӀаяьккхина|ДӀаяьхна}} $1 {{PLURAL:$1|дӀаяздар|дӀаяздарш}}:",
        "watchlistedit-too-many": "Кхузахь гайта тӀехь дукха агӀонаш ю.",
        "watchlisttools-clear": "Тергаман могӀам дӀацӀанбан",
-       "watchlisttools-view": "Ð\9cогÓ\80ам Ñ\87Ñ\83Ñ\80а Ð°Ð³Ó\80онаÑ\88ан хийцамаш",
+       "watchlisttools-view": "Ð\9cогÓ\80ам Ñ\87Ñ\83Ñ\80а Ð°Ð³Ó\80онийн хийцамаш",
        "watchlisttools-edit": "Хьажа/нисбé могӀам",
        "watchlisttools-raw": "Йоза санна тае",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|дийцаре]])",
+       "unknown_extension_tag": "«$1» шордаран ца йоьвзу тег",
        "version": "Верси MediaWiki",
        "version-extensions": "ДӀахӀоттийна шордарш",
        "version-skins": "ДӀахӀоттийна кечяран темаш",
        "version-software-version": "Верси",
        "version-entrypoints": "ЧугӀо адресин тӀадамаш",
        "version-entrypoints-header-entrypoint": "Яздаран тӀадам",
+       "version-entrypoints-header-url": "URL",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath АгӀона тӀе некъ]",
        "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Скриптан тӀе некъ]",
        "redirect": "Декъашхочун файлан тӀера дӀасхьажор",
        "fileduplicatesearch-info": "$1 × $2 пиксель<br />Файлан барам: $3<br />MIME-тайп: $4",
        "fileduplicatesearch-result-1": "«$1» файлах тера хӀума яц.",
        "fileduplicatesearch-noresults": "ЦӀе «$1» йолуш файл цакарий.",
-       "specialpages": "Леррина агlонаш",
+       "specialpages": "Леррина агӀонаш",
+       "specialpages-note-top": "Легенда",
        "specialpages-note": "* Гуттарлера белха агlонаш.\n* <strong class=\"mw-specialpagerestricted\">Кlеззиг таронаш йолу леррина агlонаш.</strong>",
        "specialpages-group-maintenance": "Жамlаш гlирса хьашташ кхочушдар",
        "specialpages-group-other": "Кхин белхан агӀонаш",
        "specialpages-group-users": "Декъашхой а бакъонаш",
        "specialpages-group-highuse": "Уггаре дукха лелайо агӀонаш",
        "specialpages-group-pages": "АгӀонийн могӀанаш",
-       "specialpages-group-pagetools": "Ð\93Ó\80иÑ\80Ñ\81аÑ\88 Ð¾Ñ\86Ñ\83 Ð°Ð³Ó\80онаÑ\88ан",
+       "specialpages-group-pagetools": "Ð\93Ó\80иÑ\80Ñ\81аÑ\88 Ð¾Ñ\86Ñ\83 Ð°Ð³Ó\80онийн",
        "specialpages-group-wiki": "Хаамаш а гӀирсаш а",
        "specialpages-group-redirects": "ДӀасахьажош йолу белхан агӀонаш",
        "specialpages-group-spam": "Спаман дуьхьала гӀирсаш",
        "revdelete-uname-unhid": "декъашхочун цӀе гуча яьккхина",
        "revdelete-restricted": "куьйгалхойн доза туху",
        "revdelete-unrestricted": "куьйгалхойн доза тохар дӀаяьккхина",
+       "logentry-merge-merge": "$1 {{GENDER:$2|вовшахтоьхна}} $3 $4 чохь ($5 кхаччалц версеш)",
        "logentry-move-move": "$1 {{GENDER:$2|цӀе хийцина}} $3 → $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|цӀе хийцина}} $3 → $4 дӀасахьажийнарг цаюьтуш",
        "logentry-move-move_redir": "$1 {{GENDER:$2|цӀе хийцина}} $3 → $4 дӀасахьажоран тӀохул",
        "logentry-rights-rights": "$1 {{GENDER:$2|хийцина}} $3 бакъо $4 → $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|хийцина}} хӏокхуна $3 бакъо",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|вара|яра}} автоматически {{GENDER:$2|сихьа ваьлла|сихьа яьлла}} $4 $5 чу",
+       "logentry-upload-upload": "$1 {{GENDER:$2|чуяьккхина}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|чуяьккхина}} керла верси $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|чуяьккхина}} $3",
        "rightsnone": "(яц)",
+       "revdelete-summary": "хийцамах лаьцна",
        "feedback-bugornote": "Хьайн техникин халонах лаьцна яздан хӀума делахь, дехар до, [$1 хаам бе тхоьга].\nДацахь хьан йиш ю хӀокху атта кепаца «[$3 $2]» агӀонг къамел тӀетоха хьан декъашхочун цӀарца, кхин лелош йолу браузер билгал еш.",
        "feedback-subject": "Къамел:",
        "feedback-message": "Хаам:",
        "expand_templates_remove_nowiki": "ДӀайоху тегаш <nowiki> хилча",
        "expand_templates_generate_xml": "Гойту дитта цу XML",
        "expand_templates_generate_rawhtml": "Гайта HTML",
-       "expand_templates_preview": "Хьалха муха ю хьажа",
+       "expand_templates_preview": "Хьалха хьажар",
        "pagelanguage": "АгӀона мотт харжар",
        "pagelang-name": "АгӀо",
        "pagelang-language": "Мотт",
        "log-description-pagelang": "ХӀара агӀонашкахь мотт хийцаран тептар ду.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|хийцина}} агӀона мотт $3 $4 → $5.",
        "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 ('''дӀаяйина''')",
+       "mediastatistics": "Медиа-статистика",
+       "mediastatistics-nbytes": "$1 {{PLURAL:$1|байт}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME-тайп",
+       "mediastatistics-table-extensions": "Хила мега шордарш",
+       "mediastatistics-table-count": "Файлийн дукхалла",
+       "mediastatistics-table-totalbytes": "Юкъара барам",
+       "mediastatistics-header-unknown": "Хууш доцурш",
+       "mediastatistics-header-bitmap": "Басаршца долу сурт",
+       "mediastatistics-header-drawing": "Сурт (векторийн сурташ)",
+       "mediastatistics-header-audio": "Аудио",
+       "mediastatistics-header-video": "Видео",
+       "mediastatistics-header-multimedia": "Къамел-медиа",
+       "mediastatistics-header-office": "Офисийн",
+       "mediastatistics-header-text": "Йозанан",
+       "mediastatistics-header-executable": "Кхочушдийриш",
+       "mediastatistics-header-archive": "Архиваш",
+       "json-error-unknown": "JSON бала бу. ГӀалат: $1",
+       "json-error-syntax": "Синтаксин гӀалат"
 }
index 84c6ea2..427275b 100644 (file)
        "search-interwiki-caption": "Mga kaubang proyekto",
        "search-interwiki-default": "$1 ka mga resulta:",
        "search-interwiki-more": "(dugang pa)",
-       "showingresultsheader": "{{PLURAL:$5|Resulta '''$1''' sa '''$3'''|Mga resulta '''$1 - $2''' of '''$3'''}} sa '''$4'''",
        "search-nonefound": "Walay mga resulta nga nag-match sa gipangita.",
        "powersearch-legend": "Abansadong pagpangita",
        "powersearch-ns": "Pangitaa sa mga ngalang espasyo:",
        "pager-older-n": "{{PLURAL:$1|mas daan1|mas daan $1}}",
        "booksources": "Mga reperensiyang libro",
        "booksources-search-legend": "Pangitaa ang mga reperensiyang libro",
-       "booksources-go": "Sige",
        "log": "Mga log",
        "allpages": "Tanang panid",
        "prevpage": "Miaging panid ($1)",
        "watchthispage": "Bantayi kining panid",
        "unwatch": "Pasagdi",
        "watchlist-details": "{{PLURAL:$1|$1 ka panid|$1 ka mga panid}} ang imong gibantayan, way labot ang mga panid sa hisgot.",
-       "wlshowlast": "Ipakita ang miaging $1 ka oras $2 ka mga adlaw $3",
+       "wlshowlast": "Ipakita ang miaging $1 ka oras $2 ka mga adlaw",
        "watchlist-options": "Mga opsyon sa akong gibantayan",
        "watching": "Gibantayan...",
        "unwatching": "Gipasagdan...",
        "metadata-expand": "Ipakita ang mas daghang detalye",
        "metadata-collapse": "Tagoa ang mga ekstended nga detalye",
        "metadata-fields": "Ang XIF metadata fields nga nakatala niining mensahe iapil sa display sa panid sa imahen kon gi-collapse ang metadata table.\nAng uban default nga nakatago.\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",
-       "watchlistall2": "tanan",
        "namespacesall": "tanan",
        "monthsall": "tanan",
        "watchlisttools-view": "Tan-awa ang may kalabotan nga mga pag-usab",
        "specialpages": "Espesyal nga mga panid",
        "revdelete-restricted": "mga na-aplay nga restriksyon sa mga tagdumala",
        "revdelete-unrestricted": "gitangtang ang mga restriksyon alang sa mga tagdumala",
-       "rightsnone": "(wala)"
+       "rightsnone": "(wala)",
+       "revdelete-summary": "mubong sugid sa pag-usab"
 }
index 6a2eddc..9e309af 100644 (file)
        "mergehistory-autocomment": "Mana'daña [[:$1]] yan [[:$2]]",
        "mergehistory-comment": "Mana'daña [[:$1]] yan [[:$2]]: $3",
        "mergelog": "Log i manmana'daña",
-       "pagemerge-logentry": "ha na'daña [[$1]] yan [[$2]] (ribision asta $3)",
        "revertmerge": "Sipåra",
        "mergelogpagetext": "Guåha gi sampapa' un listan i manmana'daña siha ni historian påhina gi halacha.",
        "history-title": "Historian tinilaika nu \"$1\"",
        "unusedtemplates": "Plantiyas siha ti ma'usa",
        "randompage": "Maseha håfa na påhina",
        "randomredirect": "Muna'dirihi maseha manu guatu",
-       "statistics-mostpopular": "Påhina siha ni mas ma'atan",
        "doubleredirects": "Mandoble na inachetton ma'dirihi siha",
        "brokenredirects": "Manmayulang na muna'dirihi siha",
        "brokenredirects-edit": "tulaika",
        "move": "Kånya",
        "movethispage": "Kånya i påhina",
        "booksources": "I source i lepblo",
-       "booksources-go": "Hånao",
        "specialloguserlabel": "Muna'sesetbi:",
        "speciallogtitlelabel": "Titulo:",
        "log": "Logs",
        "watchthispage": "Pulan este na påhina",
        "unwatch": "Basta mapulan",
        "watchlist-details": "{{PLURAL:$1|$1 påhina|$1 na påhina siha}} un pupulan, sin i påhinan kombetsasion siha.",
-       "wlshowlast": "Na'annok $1 na ora yan $2 na diha siha gi halacha $3",
+       "wlshowlast": "Na'annok $1 na ora yan $2 na diha siha gi halacha",
        "watching": "Mamulan...",
        "unwatching": "Pumapara mamulan...",
        "deletepage": "Na'suha i påhina",
        "metadata": "Metadata",
        "metadata-expand": "Na'annok todu i infotmasion-ña",
        "metadata-collapse": "Na'atok patte i infotmasion-ña",
-       "watchlistall2": "todu",
        "namespacesall": "todu",
        "monthsall": "todu",
        "imgmultigo": "Hånao!",
        "version": "Tinilaika",
        "version-specialpages": "Manespesiat na påhina",
        "fileduplicatesearch-submit": "Aligao",
-       "specialpages": "Manespesiat na påhina"
+       "specialpages": "Manespesiat na påhina",
+       "revdelete-summary": "tulaika i sumaria"
 }
index 09cbddd..4d49563 100644 (file)
@@ -1,74 +1,74 @@
 {
-    "@metadata": {
-        "authors": [
-            "Etse (on chr.wikipedia.org)",
-            "Gmaxwell (on chr.wikipedia.org)",
-            "Malafaya",
-            "Maximillion Pegasus",
-            "Srtxg (on chr.wikipedia.org)"
-        ]
-    },
-    "january": "ᏚᏃᎸᏔᏂ",
-    "february": "ᎧᎦᎵ",
-    "march": "ᎠᏄᏱ",
-    "april": "ᎧᏩᏂ",
-    "may_long": "ᎠᎾᎠᎬᏘ",
-    "june": "ᏕᎭᎷᏱ",
-    "july": "ᎫᏰᏉᏂ",
-    "august": "ᎦᎶᏂᎢ",
-    "september": "ᏚᎵᎢᏍᏗ",
-    "october": "ᏚᏂᏅᏗ",
-    "november": "ᏄᏓᏕᏆ",
-    "december": "ᎥᏍᎩᎦ",
-    "jan": "ᏚᏃᎸ",
-    "feb": "ᎧᎦᎵ",
-    "mar": "ᎠᏄᏱ",
-    "apr": "ᎧᏩᏂ",
-    "may": "ᎠᎾᎠ",
-    "jun": "ᏕᎭᎷ",
-    "jul": "ᎫᏰᏉ",
-    "aug": "ᎦᎶᏂ",
-    "sep": "ᏚᎵᎢ",
-    "oct": "ᏚᏂᏅ",
-    "nov": "ᏄᏓᏕ",
-    "dec": "ᎥᏍᎩ",
-    "about": "ᎬᏩᏚᏫᏛ",
-    "article": "ᎤᏓᏡᎬ",
-    "navigation": "ᎠᏂᎩᏍᏗ ᏥᏳ",
-    "help": "ᎠᎵᏍᏕᎸᏗ",
-    "search": "ᎠᏯᏍᏗ",
-    "searchbutton": "ᎠᏯᏍᏗ",
-    "go": "ᎮᎦ",
-    "history": "ᏆᏥ ᎧᏃᎮᏍᎩ",
-    "history_short": "ᎧᏃᎮᏍᎩ",
-    "printableversion": "ᎦᎴᏯᏛ ᏅᎬᎪᏔᏅᎯ",
-    "permalink": "ᏂᎪᎯᎸ ᏕᎬᏔᏛ",
-    "talkpagelinktext": "ᎧᏃᎮᎸᏗ",
-    "talk": "ᎧᏃᎮᎸᏗ",
-    "toolbox": "ᎪᎱᏍᏗ ᎬᏔᏂᏓᏍᏗ ᎧᏁᏌᎢ",
-    "otherlanguages": "ᎭᏫᎾᏗᏢ ᏐᎢ ᏗᎦᏬᏂᎯᏍᏗ",
-    "jumptosearch": "ᎡᏗt",
-    "aboutpage": "Project:ᎬᏩᏚᏫᏛ",
-    "currentevents": "ᏗᏤᎢ",
-    "mainpage": "ᎤᎵᎮᎵᏍᏗ",
-    "mainpage-description": "ᎤᎵᎮᎵᏍᏗ",
-    "portal": "ᎾᎥ ᏄᎾᏓᎸ ᎠᏍᏚᎢᏍᏗ",
-    "nstab-main": "ᎤᏓᏡᎬ",
-    "nstab-category": "ᏗᎦᎪᏗ",
-    "viewsource": "DᎢᎧᏃᏗᎢ DᎢᏓᎴᎲᏍᎬ",
-    "revdelete-radio-set": "ᎥᎥ",
-    "editundo": "IᎬᎾᏕᏍᏗ",
-    "searchresultshead": "ᎠᏯᏍᏗ",
-    "recentchanges": "ᎾᏞᎬ ᏗᎦᏁᏟᏴᏍᏗ",
-    "recentchangeslinked": "ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ",
-    "recentchangeslinked-feed": "ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ",
-    "recentchangeslinked-toolbox": "ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ",
-    "upload": "ᎦᎸᎳᏗᏢ ᎠᎧᎵᎢ ᎠᏝᎥᎢ",
-    "randompage": "ᎤᏍᏆᏂᎪᏗ ᎤᏆᏓᏛ",
-    "watch": "WᎠᏥ",
-    "actioncomplete": "ᎠᏍᏆᏙᏅᎯ",
-    "sp-contributions-talk": "ᎧᏃᎮᎸᏗ",
-    "whatlinkshere": "ᎦᏙ ᎤᏍᏗ ᏗᏕᎬᏔᏛ ᎠᎭᏂ",
-    "ilsubmit": "ᎠᏯᏍᏗ",
-    "specialpages": "ᎤᏤᎵᏛ ᏚᏆᏓᏛ"
+       "@metadata": {
+               "authors": [
+                       "Etse (on chr.wikipedia.org)",
+                       "Gmaxwell (on chr.wikipedia.org)",
+                       "Malafaya",
+                       "Maximillion Pegasus",
+                       "Srtxg (on chr.wikipedia.org)"
+               ]
+       },
+       "january": "ᏚᏃᎸᏔᏂ",
+       "february": "ᎧᎦᎵ",
+       "march": "ᎠᏄᏱ",
+       "april": "ᎧᏩᏂ",
+       "may_long": "ᎠᎾᎠᎬᏘ",
+       "june": "ᏕᎭᎷᏱ",
+       "july": "ᎫᏰᏉᏂ",
+       "august": "ᎦᎶᏂᎢ",
+       "september": "ᏚᎵᎢᏍᏗ",
+       "october": "ᏚᏂᏅᏗ",
+       "november": "ᏄᏓᏕᏆ",
+       "december": "ᎥᏍᎩᎦ",
+       "jan": "ᏚᏃᎸ",
+       "feb": "ᎧᎦᎵ",
+       "mar": "ᎠᏄᏱ",
+       "apr": "ᎧᏩᏂ",
+       "may": "ᎠᎾᎠ",
+       "jun": "ᏕᎭᎷ",
+       "jul": "ᎫᏰᏉ",
+       "aug": "ᎦᎶᏂ",
+       "sep": "ᏚᎵᎢ",
+       "oct": "ᏚᏂᏅ",
+       "nov": "ᏄᏓᏕ",
+       "dec": "ᎥᏍᎩ",
+       "about": "ᎬᏩᏚᏫᏛ",
+       "article": "ᎤᏓᏡᎬ",
+       "navigation": "ᎠᏂᎩᏍᏗ ᏥᏳ",
+       "help": "ᎠᎵᏍᏕᎸᏗ",
+       "search": "ᎠᏯᏍᏗ",
+       "searchbutton": "ᎠᏯᏍᏗ",
+       "go": "ᎮᎦ",
+       "history": "ᏆᏥ ᎧᏃᎮᏍᎩ",
+       "history_short": "ᎧᏃᎮᏍᎩ",
+       "printableversion": "ᎦᎴᏯᏛ ᏅᎬᎪᏔᏅᎯ",
+       "permalink": "ᏂᎪᎯᎸ ᏕᎬᏔᏛ",
+       "talkpagelinktext": "ᎧᏃᎮᎸᏗ",
+       "talk": "ᎧᏃᎮᎸᏗ",
+       "toolbox": "ᎪᎱᏍᏗ ᎬᏔᏂᏓᏍᏗ ᎧᏁᏌᎢ",
+       "otherlanguages": "ᎭᏫᎾᏗᏢ ᏐᎢ ᏗᎦᏬᏂᎯᏍᏗ",
+       "jumptosearch": "ᎡᏗt",
+       "aboutpage": "Project:ᎬᏩᏚᏫᏛ",
+       "currentevents": "ᏗᏤᎢ",
+       "mainpage": "ᎤᎵᎮᎵᏍᏗ",
+       "mainpage-description": "ᎤᎵᎮᎵᏍᏗ",
+       "portal": "ᎾᎥ ᏄᎾᏓᎸ ᎠᏍᏚᎢᏍᏗ",
+       "nstab-main": "ᎤᏓᏡᎬ",
+       "nstab-category": "ᏗᎦᎪᏗ",
+       "viewsource": "DᎢᎧᏃᏗᎢ DᎢᏓᎴᎲᏍᎬ",
+       "revdelete-radio-set": "ᎥᎥ",
+       "editundo": "IᎬᎾᏕᏍᏗ",
+       "searchresultshead": "ᎠᏯᏍᏗ",
+       "recentchanges": "ᎾᏞᎬ ᏗᎦᏁᏟᏴᏍᏗ",
+       "recentchangeslinked": "ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ",
+       "recentchangeslinked-feed": "ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ",
+       "recentchangeslinked-toolbox": "ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ",
+       "upload": "ᎦᎸᎳᏗᏢ ᎠᎧᎵᎢ ᎠᏝᎥᎢ",
+       "randompage": "ᎤᏍᏆᏂᎪᏗ ᎤᏆᏓᏛ",
+       "watch": "WᎠᏥ",
+       "actioncomplete": "ᎠᏍᏆᏙᏅᎯ",
+       "sp-contributions-talk": "ᎧᏃᎮᎸᏗ",
+       "whatlinkshere": "ᎦᏙ ᎤᏍᏗ ᏗᏕᎬᏔᏛ ᎠᎭᏂ",
+       "ilsubmit": "ᎠᏯᏍᏗ",
+       "specialpages": "ᎤᏤᎵᏛ ᏚᏆᏓᏛ"
 }
index 75eb8fb..ad2fe74 100644 (file)
        "category-empty": "''ئەم پۆلە ھەنووکە ھیچ پەڕە یان پەڕگەیەک لە خۆ ناگرێت.‌''",
        "hidden-categories": "{{PLURAL:$1|پۆلی شارداوە|پۆلە شارداوەکان}}",
        "hidden-category-category": "پۆلە شاردراوەکان",
-       "category-subcat-count": "{{PLURAL:$2|ئەم پۆلە تەنیا ژێرپۆلی ژێرەوەی تێدایە.| ئەم پۆلە ئەم {{PLURAL:$1|ژێرپۆلەی|$1 ژێرپۆلانەی}} ژێرەوەی تێدایە، لە کۆی سەرجەم $2 دانە.}}",
+       "category-subcat-count": "{{PLURAL:$2|ئەم پۆلە تەنیا ژێرپۆلی ژێرەوەی تێدایە.|ئەم پۆلە {{PLURAL:$1|ژێرپۆل|$1 ژێرپۆل}}ی ژێرەوەی تێدایە، لە سەرجەم $2 ژێرپۆل.}}",
        "category-subcat-count-limited": "ئەم هاوپۆلە {{PLURAL:$1|ژێرهاوپۆلی}} لەخۆ گرتووە.",
-       "category-article-count": "{{PLURAL:$2|ئەم پۆلە تەنھا ئەم پەڕەی لەخۆگرتووە.|{{PLURAL:$1|پەڕە|$1 پەڕە}} لەم پۆلەدا، لە سەرجەم $2 پەڕە.}}",
+       "category-article-count": "{{PLURAL:$2|ئەم پۆلە تەنیا پەڕەی ژێرەوەی تێدایە.|{{PLURAL:$1|پەڕە|$1 پەڕە}}ی ژێرەوە لەم پۆلەدا{{PLURAL:$1|یە|ن}}، لە سەرجەم $2 پەڕە.}}",
        "category-article-count-limited": "ئەم {{PLURAL:$1|لاپەڕە|$1 لاپەڕانە}}، لەم هاوپۆلەدان.",
        "category-file-count": "{{PLURAL:$2|ئەم هاوپۆلە تەنها ئەم پەڕگەی لەخۆ گرتووە.|ئەم‌ {{PLURAL:$1|پەڕگەیە}} کە بەشێکە لە هەموو $2پەڕگەی ئەم هاوپۆلە‌ دەیبینی.}}",
        "category-file-count-limited": "ئەم {{PLURAL:$1|پەڕگە|پەڕگانە}} لەم هاوپۆلەدایە.",
        "mainpage": "دەستپێک",
        "mainpage-description": "دەستپێک",
        "policy-url": "Project: سیاسەت",
-       "portal": "دەروازەی بەکارھێنەران",
-       "portal-url": "Project: دەروازەی بەکارھێنەران",
+       "portal": "دەروازەی کۆمەڵگا",
+       "portal-url": "Project:دەروازەی کۆمەڵگا",
        "privacy": "سیاسەتی تایبەتێتی",
        "privacypage": "Project:پاراستنی زانیارییەکان",
        "badaccess": "ھەڵە لە بە دەست ھێنان",
        "hidetoc": "بیشارەوە",
        "collapsible-collapse": "کۆی بکەوە",
        "collapsible-expand": "بڵاوی بکەوە",
+       "confirmable-confirm": "{{GENDER:$1|دڵنیای}}؟",
+       "confirmable-yes": "بەڵێ",
+       "confirmable-no": "نا",
        "thisisdeleted": "$1 نیشان بدە یا بھێنەوە؟",
        "viewdeleted": "$1 نیشان بده‌؟",
        "restorelink": "{{PLURAL:$1|یەک گۆڕانکاریی سڕاو|$1 گۆڕانکاریی سڕاو}}",
        "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)",
        "resetpass-submit-cancel": "ھەڵوەشاندنەوە",
        "resetpass-wrong-oldpass": "تێپەڕوشەی ھەنووکەیی یان تێپەڕوشەی کاتی ھەڵەیە.\nوا دیارە تێپەڕوشەکەت بە سەرکەوتوویی گۆڕدراوە یان داوای تێپەڕوشەیەکی نوێت کردووە.",
        "resetpass-temp-password": "تێپەڕوشەی کاتی:",
-       "passwordreset": "دووبارە ڕێکخستنەوەی تێپەڕوشە",
+       "passwordreset": "ڕێکخستنەوەی تێپەڕوشە",
        "passwordreset-legend": "دووبارە ڕێکخستنەوەی تێپەڕوشە",
        "passwordreset-username": "ناوی بەکارھێنەری:",
        "passwordreset-domain": "پاوان:",
        "passwordreset-emailsent": "ئیمەیلێکی ڕیسێتکردنەوەی تێپەڕوشە نێردرا.",
        "passwordreset-emailsent-capture": "ئیمەیلێکی ڕیسێتکردنەوەی تێپەڕوشە نێردرا، کە لە ژێرەوە نیشان دراوە.",
        "passwordreset-emailerror-capture": "ئیمەیلێکی ڕیسێتکردنەوەی تێپەڕوشە نێردرا، کە لە ژێرەوە نیشان دراوە، بەڵام ناردنەکەی بۆ {{GENDER:$2|بەکارھێنەر}} سەرکەوتوو نەبوو: $1",
-       "changeemail": "ناونیشانی ئیمەیل بگۆڕە",
-       "changeemail-header": "ناونیشانی ئیمەیلی ھەژمار بگۆڕە",
+       "changeemail": "گۆڕینی ناونیشانی ئیمەیل",
        "changeemail-no-info": "بۆ گەیشتنی راستەوخۆ بەم پەڕە دەبێت بچیتە ژوورەوە.",
        "changeemail-oldemail": "ئەدرەسی ئیمەیڵی ئێستا:",
        "changeemail-newemail": "ناونیشانی ئیمەیلی نوێ:",
        "changeemail-none": "(ھیچ)",
        "changeemail-password": "تێپەڕوشەکەت لە {{SITENAME}}:",
        "changeemail-submit": "ئەمەیل بگۆڕە",
-       "changeemail-cancel": "ھەڵیوەشێنەوە",
        "bold_sample": "دەقی ئەستوور",
        "bold_tip": "دەقی ئەستوور",
        "italic_sample": "دەقی لار",
        "rev-delundel": "نیشان بدە/بشارەوە",
        "rev-showdeleted": "نیشان بدە",
        "revisiondelete": "سڕینەوە/ھێنانەوەی پێداچوونەوەکان",
-       "revdelete-nooldid-title": "Ù\85Û\95بÛ\95ستÛ\8c Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95Û\8c Ù\86ادÛ\8cار",
-       "revdelete-nooldid-text": "پێداچوەنەوەی مەبەستت ڕاچاو نەکردە بۆ ئەنجامی ئەم فەنکشێنە یان ئەو پێداچوونەوەی ڕاچاوت کردە بوونی نیە، یا خەریکی هەوڵی داشاردنی پێداچوونەوهی ئێستا‌ ئەدەی.",
+       "revdelete-nooldid-title": "Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95Û\8c Ù\85Û\95بÛ\95ستÛ\8c Ù\86ادرÙ\88ست",
+       "revdelete-nooldid-text": "پێداچوەنەوە(کان)ی مەبەستت بۆ جێبەجێکردنی ئەم کارە دەستنیشان نەکردووە یان پێداچوونەوەی دەستنیشان‌کراو بوونی نییە، یان خەریکی هەوڵی شاردنەوەی پێداچوونەوەی ھەنووکەیی دەدەیت.",
        "revdelete-no-file": "ئەو پەڕگەی ڕاچاوت کردووە بوونی نیە.",
        "revdelete-show-file-confirm": "ئایا دڵنیایت دەتەوێ پێداچوونەوەی سڕاوەی پەڕگەی \"<nowiki>$1</nowiki>\" لە $2، لە $3دا ببیینی؟",
        "revdelete-show-file-submit": "بەڵێ",
+       "revdelete-selected-text": "{{PLURAL:$1|پێداچوونەوەی ھەڵبژێردراوی|پێداچوونەوە ھەڵبژێردراوەکانی}} [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|لۆگی ڕووداوەی هەڵبژێراو|لۆگی ڕووداوە هەڵبژێراوەکان}}:",
-       "revdelete-confirm": "تکایە بەڵێن بدە کە دەتەوێ ئەوە بکەی و لە ئەنجامەکانی ئەوە ئاگاداریت و بە پێی [[{{MediaWiki:Policy-url}}|سیاسەتنامە]] ئەنجامی ئەدەی.",
+       "revdelete-text-text": "پێداچوونە سڕاوەکان ھێشتا لە مێژووی پەڕەدا دەردەکەوێت بەڵام بەشێک لە ناوەرۆکەکەیان بۆ ھەمووان لەبەر دەست دەبێت.",
+       "revdelete-text-file": "وەشانە سڕاوەکانی پەڕگە ھێشتا لە مێژووی پەڕگەدا دەردەکەوێت بەڵام بەشێک لە ناوەرۆکەکەیان بۆ ھەمووان لەبەر دەست دەبێت.",
+       "logdelete-text": "ڕووداوە سڕاوەکانی لۆگ ھێشتا لە لۆگەکاندا دەردەکەوێت بەڵام بەشێک لە ناوەرۆکەکەیان بۆ ھەمووان لەبەر دەست دەبێت.",
+       "revdelete-text-others": "بەڕێوەبەرانی تر ھێشتا دەتوانن ناوەرۆکی شاردراو ببینن و بیھێننەوە، مەگەر سنووردارکردنی تر ڕێک بخرێت.",
+       "revdelete-confirm": "تکایە پشتڕاست بکەوە دەتەوێ ئەمە بکەیت و لە ئاکامەکەی ئاگاداریت و ئەمە بە پێی [[{{MediaWiki:Policy-url}}|سیاسەتنامە]] دەکەیت.",
        "revdelete-suppress-text": "بەرگری دەبێ '''تەنها''' بۆ ئەم بابەتانە بەکاربهێندرێت:<br />\n* سووکایەتیکردن بە کەسایەتییەک<br />\n* بڵاوکردنەوەی زانیاریی تاکەکەسی نەگونجاو<br />\n*: '' ناونیشانی ماڵ یا ژمارە تەلەفۆن و وەک ئەمانە.''<br />",
-       "revdelete-legend": "سنووردارکردنی دەرکەوتن",
+       "revdelete-legend": "ڕێکخستنی سنووردارکردنی دیاریکردن",
        "revdelete-hide-text": "دەقی پێداچوونەوە",
        "revdelete-hide-image": "ناوەڕۆکی پەڕگە بشارەوە",
        "revdelete-hide-name": "داشاردنی مەبەست و کردەوە",
        "revdelete-suppress": "بەرگری دراوە لە بەڕێوبەران هەر وەک ئەوانی دیکە",
        "revdelete-unsuppress": "لابردنی بەربەستەکان لە سەر پێداچوونەوە گەڕێندراوەکان",
        "revdelete-log": "هۆکار:",
-       "revdelete-submit": "خستÙ\86Û\95کار Ø¨Û\86 Ø³Û\95ر Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95 {{PLURAL:$1|Ú¾Û\95ڵبÚ\98Û\8eردراÙ\88Û\95Ú©Û\95|ھەڵبژێردراوەکان}}",
+       "revdelete-submit": "بÛ\95کاربÛ\95رÛ\95 Ø¨Û\86 Ø³Û\95ر {{PLURAL:$1|Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95Û\8c Ú¾Û\95ڵبÚ\98Û\8eردراÙ\88|Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95 ھەڵبژێردراوەکان}}",
        "revdelete-success": "'''چۆنیەتی بیندرانی پێداچوونەوە بە سەرکەوتوویی نوێکراوە.'''",
        "revdelete-failure": "'''ناکرێ دەرکەوتنی پێداچوونەوە نوێبکرێتەوە:'''\n$1",
        "logdelete-success": "'''بیندرانی لۆگ‌ بە سەرکەوتوویی داندرا.'''",
        "mergehistory-same-destination": "پەڕەی سەرچاوە و مەبەست نابێ یەک بن.",
        "mergehistory-reason": "هۆکار:",
        "mergelog": "لۆگی کردنەیەک",
-       "pagemerge-logentry": "[[$1]]ی لەگەڵ [[$2]] کردە یەک (پێداچوونەوەکان ھەتا $3)",
        "revertmerge": "ھەڵوەشاندنەوەی کردنەیەک",
        "mergelogpagetext": "لە خوارەوە دوایین مێژووی‌لاپەڕە خستنە سەر لاپەڕەیەکی‌تر، دەبینی.",
        "history-title": "مێژووی پێداچوونەوەکانی «$1»",
        "difference-multipage": "(جیاوازی نێوان پەڕەکان)",
        "lineno": "ھێڵی  $1:",
        "compareselectedversions": "پیاچوونەوە ھەڵبژێردراوەکان ھەڵسەنگێنە",
-       "showhideselectedversions": "پیاچوونەوە ھەڵبژێردراوەکان نیشانبدە/بشارەوە",
+       "showhideselectedversions": "دیاریکردنی پێداچوونەوە ھەڵبژێردراوەکان بگۆڕە",
        "editundo": "پووچەڵکردنەوە",
        "searchresults": "ئاکامەکانی گەڕان",
        "searchresults-title": "ئاکامەکانی گەڕان بۆ «$1»",
        "search-section": "(بەشی $1)",
        "search-suggest": "ئایا مەبەستت ئەمە بوو: $1",
        "search-interwiki-caption": "پرۆژە خوشکەکان",
-       "search-interwiki-default": "$1 ئەنجام:",
+       "search-interwiki-default": "ئاکام لە $1:",
        "search-interwiki-more": "(زیاتر)",
        "search-relatedarticle": "پەیوەست",
        "searchrelated": "پەیوەست",
        "searchall": "ھەموو",
        "showingresults": "لە خوارەوە {{PLURAL:$1|'''یەک''' ئەنجام|'''$1''' ئەنجام}} نیشان دراوە، بە دەست پێ کردن لە ژمارەی '''$2'''ەوە.",
-       "showingresultsheader": "{{PLURAL:$5|ئاکامی '''$1''' لە '''$3'''|ئاکامەکانی '''$1 - $2''' لە '''$3'''}} بۆ '''$4'''",
+       "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}} ئێستە کار ناکات.\nدەتوانی بۆ ئێستا لە گەڕانی گووگڵ کەڵک وەرگری.\nلەیادت بێت لەوانەیە پێرستەکانیان بۆ گەڕانی ناو {{SITENAME}}، کات‌بەسەرچوو بێت.",
        "preferences": "ھەڵبژاردەکان",
        "default": "بنچینەیی",
        "prefs-files": "پەڕگەکان",
        "prefs-custom-css": "CSSی دڵخواز",
-       "prefs-custom-js": "JSی دڵخواز",
+       "prefs-custom-js": "جاڤاسکریپتی دڵخواز",
        "prefs-common-css-js": "سی‌ئێس‌ئێس/جاڤاسکریپتی ھاوبەش بۆ گشت پێستەکان:",
        "prefs-reset-intro": "دەتوانی لەم لاپەڕە بۆ گەڕانەوەی هەڵبژاردەکانت بۆ بنچینەیی ماڵپەر کەڵک وەرگریت.\nگەر ئەوە بکەی ئیتر گۆڕانەکەت ناگەڕێتەوە.",
        "prefs-emailconfirm-label": "پشتڕاستکردنەوەی ئیمەیل:",
        "recentchanges-legend-heading": "'''کورتکراوەکان:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ھەروەھا بڕوانە [[Special:NewPages|پێرستی پەڕە نوێکان]])",
        "recentchanges-legend-plusminus": "(''±۱٢٣'')",
-       "rcnotefrom": "ژێرەوە گۆڕانکارییەکانە لە <strong>$2</strong>ەوە (ھەتا <strong>$1</strong> نیشان دراوە).",
+       "rcnotefrom": "ژێرەوە {{PLURAL:$5|گۆڕانکارییەکەیە|گۆڕانکارییەکانە}} لە strong>$3، $4</strong>ەوە (ھەتا <strong>$1</strong> نیشان دراوە).",
        "rclistfrom": "گۆڕانکارییە نوێکان نیشان بدە بە دەستپێکردن لە $3 $2",
        "rcshowhideminor": "دەستکارییە بچووکەکان $1",
        "rcshowhideminor-show": "نیشان بدە",
        "mimesearch-summary": "ئەم لاپەڕە پاڵێوتنی هەیە بۆ جۆرەکانی MIME.\nناودراو: جۆرەی ناوەڕۆک\\ژێرجۆرە، وەک <code>image/jpeg</code>.",
        "mimetype": "جۆرەی MIME:",
        "download": "داگرتن",
-       "unwatchedpages": "پەڕە چاودێرینەکراوەکان",
+       "unwatchedpages": "پەڕە چاودێری نەکراوەکان",
        "listredirects": "پێرستی ڕەوانەکەرەکان",
-       "unusedtemplates": "داڕێژە بەکارنەھێنراوەکان",
+       "unusedtemplates": "داڕێژە بەکارنەھاتووەکان",
        "unusedtemplatestext": "ئەم پەڕە هەموو پەڕەکانی بۆشاییی ناوی {{ns:template}} بە لیست دەکات کە لە پەڕەی تردا بەکارنەھێنراون.\nلە بیری نەکەی پێش سڕینەوەیان پشکنینی بەستەرەکانی تر بۆ داڕێژەکان بکەی.",
        "unusedtemplateswlh": "بەستەرەکانی تر",
-       "randompage": "پەڕەیەک بە هەڵکەوت",
+       "randompage": "پەڕەی ھەڕەمەکی",
        "randompage-nopages": "هیچ لاپەڕەیەک لەم {{PLURAL:$2|ناوبۆشاییەدا|ناوبۆشاییانەدا}} نیە: $1.",
-       "randomredirect": "ڕەوانەکەری ھەرمەکی",
+       "randomincategory": "پەڕەی پۆلی ھەڕەمەکی",
+       "randomredirect": "ڕەوانەکەری ھەڕەمەکی",
        "randomredirect-nopages": "لە ناوبۆشایی \"$1\" هیچ ڕەوانکەرێک نییە.",
        "statistics": "ئامارەکان",
        "statistics-header-pages": "ئامارەکانی پەڕەکان",
        "statistics-header-edits": "ئامارەکانی گۆڕانکارییەکان",
-       "statistics-header-views": "ئامارەکانی سەردانەکان",
        "statistics-header-users": "ئامارەکانی بەکارھێنەران",
        "statistics-header-hooks": "ئامارەکانی دیکە",
        "statistics-articles": "پەڕە بە ناوەڕۆکەکان",
        "statistics-files": "پەڕگە بارکراوەکان",
        "statistics-edits": "دەستکارییەکانی پەڕەکان لە کاتی دامەزراندنی {{SITENAME}}",
        "statistics-edits-average": "ناونجیی دەستکارییەکان بۆ ھەر پەڕە",
-       "statistics-views-total": "دیتنی هەموو",
-       "statistics-views-peredit": "دیتنی هەر دەستکارییەک",
        "statistics-users": "[[Special:ListUsers|بەکارھێنەر]]ە تۆمارکراوەکان",
        "statistics-users-active": "ئەندامە چالاکەکان",
        "statistics-users-active-desc": "ئەو بەکارھێنەرانەی لە {{PLURAL:$1|ڕۆژ|$1 ڕۆژ}}ی ڕابردوودا کردەوەیەکیان بەڕێوە بردووە",
-       "statistics-mostpopular": "زۆرترین لاپەڕە بینراوەکان",
        "pageswithprop": "پەڕەکان بە تایبەتمەندیی پەڕە",
        "pageswithprop-legend": "پەڕەکان بە تایبەتمەندیی پەڕە",
        "pageswithprop-text": "ئەم پەڕەیە ئەو پەڕانەی تایبەتمەندییەکی پەرەیەکی دیاریکراو بەکاردەھێنن پێرست دەکا.",
        "pageswithprop-prop": "ناوی تایبەتمەندی:",
        "pageswithprop-submit": "بڕۆ",
-       "doubleredirects": "دووجار ڕەوانەکراوەکان",
+       "doubleredirects": "ڕەوانەکەرە دووسەرەکان",
        "doubleredirectstext": "ئەم پەڕە لیستی ئەو پەڕانەیە کە ڕەوانەکراون بۆ پەڕەیەکی ڕەوانەکراوی دیکە.\nهەر ڕیزێک، بەستەرەکانی ڕەوانەکردنەوەی یەکەم و دووەم و ھەروەھا ئامانجی ڕەوانەکراوی دووەمی تێدایە کە حاڵەتی ئاساییدا مەبەستی «ڕاستی»ی ڕەوانەکراوی یەکەمیش دەبێ بۆ ئەوێ بێت.\nئەوانەی <del>هێڵیان بەسەردا کێشراوە</del> چارەسەر کراون.",
        "double-redirect-fixed-move": "[[$1]] گوازرایەوە.\nخۆگەڕ نوێ کرایەوە و ئێستا ڕەوانەکەرە بۆ [[$2]].",
        "double-redirect-fixer": "چارەسەرکەری ڕەوانکەر",
        "withoutinterwiki-summary": "ئەم پەڕانە بەستەریان بۆ وەشانەکانی زمانەکانی تر نیە.",
        "withoutinterwiki-legend": "پێشگر",
        "withoutinterwiki-submit": "پیشاندان",
-       "fewestrevisions": "پەڕەکان بە کەمترین پێداچوونەوەکان",
+       "fewestrevisions": "پەڕەکان بە کەمترین پێداچوونەوە",
        "nbytes": "$1 {{PLURAL:$1|بایت|بایت}}",
        "ncategories": "$1 {{PLURAL:$1|ھاوپۆل|ھاوپۆل}}",
        "ninterwikis": "$1 {{PLURAL:$1|نێوانویکی}}",
        "uncategorizedimages": "پەڕگە پۆلێن نەکراوەکان",
        "uncategorizedtemplates": "داڕێژە پۆلێن نەکراوەکان",
        "unusedcategories": "پۆلە بەکارنەھێنراوەکان",
-       "unusedimages": "پەڕگە بەکارنەھێنراوەکان",
-       "popularpages": "پەڕە مەحبووبەکان",
+       "unusedimages": "پەڕگە بەکارنەھاتووەکان",
        "wantedcategories": "پۆلە داواکراوەکان",
        "wantedpages": "پەڕە داواکراوەکان",
        "wantedpages-badtitle": "سەردێڕی نەگونجاو لە سەرجەمی ئەنجامەکان: $1",
        "protectedpages-page": "پەڕە",
        "protectedpages-params": "پارامەترەکانی پاراستن",
        "protectedpages-reason": "ھۆکار",
-       "protectedtitles": "سەرناوە پارێزراوەکان",
+       "protectedtitles": "سەردێڕە پارێزراوەکان",
        "protectedtitlesempty": "ھیچ سەرناوێک بەم سنوورانەوە ئێستا نەپارێزراوە.",
        "listusers": "پێرستی بەکارھێنەران",
        "listusers-editsonly": "تەنیا ئەو بەکارھێنەرانە نیشان بدە کە دەستکارییان کردووە",
        "suppress": "چاودێری",
        "booksources": "سەرچاوەکانی کتێب",
        "booksources-search-legend": "بۆ سەرچاوەی کتێب بگەڕێ",
-       "booksources-go": "بڕۆ",
        "booksources-text": "لە خوارەوە لیستێک لە بەستەر بۆ ماڵپەڕهایەک کە کتێبی نوێ و بەکارهێنراو دەفرۆشێت و لەوانەیە لەوێ زانیاریی زیاترت دەست‌کەوێت سەبارەت بەو کتێبانەی لە دووی دەگەڕیت:",
        "booksources-invalid-isbn": "ISBN دراو لەوە ناچی بەکار بێت، سەرنج بدە لە کاتی کۆپی کردن لە سەرچاوە تووشی هەڵە نوبوبێت.",
        "specialloguserlabel": "بەجێھێنەر:",
        "alllogstext": "نیشاندانی تێکڕای هەموو لۆگە بەردەستەکانی {{SITENAME}}.\nدەتوانی بە ھەڵبژاردنی جۆرە لۆگێک، ناوی بەکارھێنەرەکە (ھەستیار بە گەورە و بچووکی پیتەکان) یان پەڕە کارتێکراوەکە (ھەستیار بە گەورە و بچووکی پیتەکان)\nبینینەکە سنووردار بکەیتەوە.",
        "logempty": "هیچ بابەتێکی هاوتا لە لۆگەکاندا نەدۆزرایەوە.",
        "log-title-wildcard": "گەڕانی ئەو سەرناوانە بەم دەقەوە دەست پێدەکەن",
-       "showhideselectedlogentries": "بابÛ\95تÛ\95کاÙ\86Û\8c Ú¾Û\95ڵبÚ\98Û\8eردراÙ\88Û\8c Ù\84Û\86Ú¯ Ù\86Û\8cشاÙ\86 Ø¨Ø¯Û\95/بشارÛ\95Ù\88ە",
+       "showhideselectedlogentries": "دÛ\8cارÛ\8cکردÙ\86Û\8c Ø¨Ø§Ø¨Û\95تÛ\95 Ú¾Û\95ڵبÚ\98Û\8eردراÙ\88Û\95کاÙ\86Û\8c Ù\84Û\86Ú¯ Ø¨Ú¯Û\86Ú\95ە",
        "allpages": "ھەموو پەڕەکان",
        "nextpage": "پەڕەی پاشەوە ($1)",
        "prevpage": "پەڕەی پێشەوە ($1)",
        "listusers-submit": "نیشانیبدە",
        "listusers-noresult": "ھیچ بەکارھێنەرێک نەدۆزرایەوە.",
        "listusers-blocked": "(بەربەست کراوە)",
-       "activeusers": "پێرستی بەکارھێنەرە چالاکەکان",
+       "activeusers": "پێرستی بەکارھێنەرانی چالاک",
        "activeusers-intro": "ئەمە لیستێکی ئەو بەکارھێنەرانەیە کە لە  $1 {{PLURAL:$1|ڕۆژ|ڕۆژ}}ی ڕابردوودا بە جۆرێک چالاکییەکیان ھەبووە.",
        "activeusers-count": "$1 {{PLURAL:$1|کردەوە}} لە دوایین {{PLURAL:$3|ڕۆژ|$3 ڕۆژ}}دا",
        "activeusers-from": "نیشاندانی بەکارھێنەران بە دەستپێکردن لە:",
        "listgrouprights-namespaceprotection-header": "سنوورداریی بۆشایی ناو",
        "listgrouprights-namespaceprotection-namespace": "بۆشایی ناو",
        "listgrouprights-namespaceprotection-restrictedto": "مافی رێ‌پێدراوی بەکارھێنەر بۆ دەستکاری",
+       "trackingcategories": "پۆلەکانی شوێنکەوتن",
        "trackingcategories-name": "ناوی پەیام",
        "mailnologin": "ناونیشان بۆ ناردن نییه‌",
        "mailnologintext": "ده‌بێ له‌ [[Special:UserLogin|ژووره‌وه‌]] بیت و ناونیشانێکی بڕواپێ‌کراوی ئی‌مه‌یلت له‌ ناو [[Special:Preferences|هه‌ڵبژارده‌کان]] دیاری کردبێت تا بتوانی ئی‌مه‌یل بنێریت بۆ به‌کارهێنه‌رانی دیکه‌.",
        "wlheader-enotif": "ئاگاداری بە ئیمەیل چالاکە.",
        "wlheader-showupdated": "‏ئەو پەڕانە کە لە پاش دواین سەردانت دەستکاری کراون بە '''ئەستوور''' نیشان دراون",
        "wlnote": "خوارەوە {{PLURAL:$1|دوایین گۆڕانکارییە|دوایین '''$1''' گۆڕانکارییە}} لە دوایین {{PLURAL:$2|کاتژمێر|'''$2''' کاتژمێر}}دا ھەتا $4 لە $3.",
-       "wlshowlast": "دوایین $1 کاتژمێر $2 ڕۆژی $3 نیشان بدە",
+       "wlshowlast": "دوایین $1 کاتژمێر $2 ڕۆژی  نیشان بدە",
        "watchlist-options": "ھەڵبژاردەکانی لیستی چاودێری",
        "watching": "چاودێری...",
        "unwatching": "لابردنی چاودێری...",
        "deletecomment": "ھۆکار:",
        "deleteotherreason": "ھۆکاری تر/زیاتر:",
        "deletereasonotherlist": "ھۆکاری تر",
-       "deletereason-dropdown": "* Ú¾Û\86کارÛ\8c Ø³Ú\95Û\8cÙ\86Û\95Ù\88Û\95\n** Ø¯Ø§Ù\88اکارÛ\8cÛ\8c Ù\86Ù\88Ù\88سÛ\95ر\n** ØªÛ\8eکداÙ\86Û\8c Ù\85اÙ\81Û\8c Ù\84Û\95بÛ\95رگرتÙ\86Û\95Ù\88Û\95\n** Ø®Ø±Ø§Ù¾Ú©Ø§Ø±Û\8c",
+       "deletereason-dropdown": "* Ú¾Û\86کارÛ\95 Ø¨Ø§Ù\88Û\95کاÙ\86Û\8c Ø³Ú\95Û\8cÙ\86Û\95Ù\88Û\95\n** Ø³Ù¾Ø§Ù\85\n** Ø®Ø±Ø§Ù¾Ú©Ø§Ø±Û\8c\n** Ù¾Û\8eØ´Û\8eÙ\84کردÙ\86Û\8c Ù\85اÙ\81Û\8c Ù\84Û\95بÛ\95رگرتÙ\86Û\95Ù\88Û\95\n** Ø¯Ø§Ø®Ù\88ازÛ\8c Ø¯Ø§Ù\86Û\95ر\n** Ú\95Û\95Ù\88اÙ\86Û\95Ú©Û\95رÛ\8c Ø´Ú©Ø§Ù\88",
        "delete-edit-reasonlist": "دەستکاری کردنی ھۆکارەکانی سڕینەوە",
        "delete-toobig": "ئەم لاپەڕە مێژوویەکی دەستکاری زۆر گەورەی هەیە، زیاتر لە $1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}.\nبۆ بەرگری لە خراپ‌بوونی چاوەڕوان نەکراوی {{SITENAME}}، سڕینەوەی لاپەڕەی وا بەربەست‌کراوە.",
        "delete-warning-toobig": "ئەم لاپەڕە مێژوویەکی دەستکاری زۆر گەورەی هەیە، زیاتر لە $1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}.\nسڕینەوی ئەوە لە وانەیە کارەکانی بنکەدراوی {{SITENAME}} تووشی کێشە بکات؛\nدوورنواڕانە جێ‌بەجێی بکە.",
        "restriction-move": "گواستنەوە",
        "restriction-create": "دروستکردن",
        "restriction-upload": "بارکردن",
-       "restriction-level-sysop": "تەواو پارێزراو",
+       "restriction-level-sysop": "تەواوپارێزراو",
        "restriction-level-autoconfirmed": "نیوەپارێزراو",
        "restriction-level-all": "هەر ئاستێک",
        "undelete": "پەڕە سڕاوەکان ببینە",
        "whatlinkshere": "بەسراوەکان بە ئێرەوە",
        "whatlinkshere-title": "ئەو پەڕانەی بەستەریان ھەیە بۆ «$1»",
        "whatlinkshere-page": "پەڕە:",
-       "linkshere": "ئەم پەڕانە بەستەریان ھەیە بۆ '''[[:$1]]''':",
+       "linkshere": "پەڕەکانی ژێرەوە بەستەر دراون بۆ <strong>[[:$1]]</strong>:",
        "nolinkshere": "هیچ لاپەڕەیەک بەستەری نەداوە بە '''[[:$1]]'''.",
        "nolinkshere-ns": "هیچ لاپەڕەیەک بەستەری نەداوە بە '''[[:$1]]''' لە بۆشایی‌ناوی هەڵبژێردراو.",
        "isredirect": "پەڕەی ڕەوانەکەر",
        "whatlinkshere-hidelinks": "$1 بەستەر",
        "whatlinkshere-hideimages": "$1 بەستەرەکانی پەڕگە",
        "whatlinkshere-filters": "پاڵێوکەکان",
-       "block": "بەربەستکردنی بەکارھێنەر",
+       "block": "بەربەستنی بەکارھێنەر",
        "unblock": "لە بەربەست‌دەرهێنانی بەکارهێنەر",
-       "blockip": "بەربەستنی بەکارھێنەر",
+       "blockip": "بەربەستنی {{GENDER:$1|بەکارھێنەر}}",
        "blockip-legend": "بەربەست‌کردنی بەکارهێنەر",
        "blockiptext": "لەم فۆرمەی خوارەوە دەتوانی بۆ بەربەست‌کردنی دەست‌پێ‌گەیشتنی نووسین لە ناونیشانێکی ئای‌پی تایبەت یا ناوی بەکارهێنەریەک، کەڵک وەرگریت.\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": "لابردنی ئەم بەربەستە",
        "unblocked": "[[User:$1|$1]] لە بەربەست دەرهێنرا",
        "unblocked-id": "بەربەستی $1 لابرا",
-       "blocklist": "بەکارھێنەر بەربەستکراوەکان",
+       "blocklist": "بەکارھێنەرانی بەربەسراو",
        "ipblocklist": "بەکارھێنەرە بەربەستکراوەکان",
        "ipblocklist-legend": "دۆزینەوەی بەکارهێنەرێکی بەربەست‌کراو",
        "blocklist-userblocks": "ھەژمارە بەربەستکراوەکان بشارەوە",
        "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تکایە پێش گۆڕینی ناو باش بیر لە ئاکامەکەی بکەوە.",
-       "movepagetalktext": "Ù¾Û\95Ú\95Û\95Û\8c Ù\88تÙ\88Ù\88Û\8eÚ\98Û\8c Ù¾Û\95Û\8cÙ\88Û\95Ù\86دÛ\8cدارÛ\8c Ø¨Û\95 Ø´Û\8eÙ\88Û\95Û\8c Ø®Û\86کار Ù\84Û\95Ú¯Û\95ÚµÛ\8cدا Ø¯Û\95Ú¯Ù\88ازرÛ\8eتÛ\95Ù\88Û\95Ø\8c '''Ù\85Û\95Ú¯Û\95ر:'''\n* Ù¾Û\95Ú\95Û\95Û\8cÛ\95Ú©Û\8c Ù\88تÙ\88Ù\88Û\8eÚ\98Û\8c Ù\86اÙ\88اڵا Ù¾Û\8eشتر Ú¾Û\95بÛ\8eت Ù\84Û\95 Ú\98Û\8eر Ù\86اÙ\88Û\95 Ù\86Ù\88Û\8eÚ©Û\95داØ\8c Û\8cاÙ\86\n* Ø¦Û\95Ù\88 Ú\86Ù\88ارÚ\86Û\8eÙ\88Û\95Û\8c Ø®Ù\88ارÛ\95Ù\88Û\95 Ù\84Û\8eÙ\86Û\95دراÙ\88 Ø¨Ú©Û\95Û\8c.\n\nÙ\84Û\95Ù\88 Ø­Ø§ÚµÛ\95تÛ\95داØ\8c Ø¦Û\95Ú¯Û\95ر Ø¨ØªÛ\95Ù\88Û\8eت Ø¨Û\8cÚ¯Ù\88ازÛ\8cتÛ\95Ù\88Û\95 Ù\86اÚ\86ار Ø¯Û\95بÛ\8cت Ø¨Û\95 Ø´Û\8eÙ\88Û\95Û\8c Ø¯Û\95ستÛ\8c Ø¨Û\8cÚ¯Ù\88ازÛ\8cتÛ\95Ù\88Û\95 Û\8cاÙ\86 ØªÛ\8eÚ©Û\95ÚµÛ\8cاÙ\86 Ø¨Ú©Û\95Û\8c.",
+       "movepagetext-noredirectfixer": "بەکارھێنانی فۆرمەکەی ژێرەوە ناوی پەڕەیەک دەگۆڕێت، بە گواستنەوەی ھەموو مێژووەکەی بۆ ناوی نوێ.\nناوە کۆنەکە دەبێتە پەڕەیەکی ڕەوانەکەر بۆ ناوە نوێکە.\nلە بیرت بێ ڕەوانەکەرە [[Special:DoubleRedirects|دووسەرەکان]] یان [[Special:BrokenRedirects|شکاوەکان]] تاوتوێ بکەیت.\nتۆ بەرپرسی بۆ ئەوەی دڵنیا ببیتەوە بەستەرەکان ھەر پەیوەندییان ھەیە بەو شوێنەوە کە چاوەڕوان دەکرێت.\n\nئەمە بزانە کە پەڕەکە <strong>ناگوازرێتەوە</strong> ئەگەر پێشتر پەڕەیەک بە ناوە نوێکەوە ھەبێت، مەگەر ئەوەی کە ڕەوانەکەرێک بێت و مێژووی دەستکاریی پێشووی نەبێت.\nئەمە یانی ئەگەر ھەڵەیەک بکەیت دەتوانی ناوی پەڕەکە بگۆڕییەوە بۆ ناوی پێشووی، و ناتوانی بیخەیتە جێگەی پەڕەیەک کە ئێستا ھەیە.\n\n<strong>ھۆشدار!</strong>\nئەمە دەتوانێت گۆڕانێکی زۆر نابەجێ و چاوەڕوان‌نەکراو بێت بۆ پەڕەیەکی بەناوبانگ؛\nتکایە پێش گۆڕینی ناو دڵنیا بە بیرت لە ئاکامەکەی کردووەتەوە.",
+       "movepagetalktext": "Ù¾Û\95Ú\95Û\95Û\8c Ù\84Û\8eدÙ\88اÙ\86Û\8c Ù¾Û\95Û\8cÙ\88Û\95Ù\86دÛ\8cدار Ø¨Û\95 Ø´Û\8eÙ\88Û\95Û\8c Ø®Û\86Ú¯Û\95Ú\95 Ù\84Û\95Ú¯Û\95ÚµÛ\8c Ø¯Û\95Ú¯Ù\88ازرÛ\8eتÛ\95Ù\88Û\95Ø\8c <strong>Ù\85Û\95Ú¯Û\95ر:</strong>\n* Ù¾Û\95Ú\95Û\95Û\8cÛ\95Ú©Û\8c Ù\84Û\8eدÙ\88اÙ\86Û\8c Ù\86اÙ\88اڵا Ù¾Û\8eشتر Ù\84Û\95 Ú\98Û\8eر Ù\86اÙ\88Û\95 Ù\86Ù\88Û\8eÚ©Û\95دا Ú¾Û\95بÛ\8eتØ\8c Û\8cاÙ\86\n* Ø¦Û\95Ù\88 Ú\86Ù\88ارÚ\86Û\8eÙ\88Û\95Û\8c Ú\98Û\8eرÛ\95Ù\88Û\95 Ù\84Û\8eÙ\86Û\95دراÙ\88 Ø¨Ú©Û\95Û\8cت.\n\nÙ\84Û\95Ù\88 Ø¯Û\86خاÙ\86Û\95داØ\8c Ø¦Û\95Ú¯Û\95ر Ø¨ØªÛ\95Ù\88Û\8eت Ø¯Û\95بÛ\8e Ø¨Û\95 Ø¯Û\95ستÛ\8c Ù¾Û\95Ú\95Û\95Ú©Û\95 Ø¨Ú¯Ù\88ازÛ\8cتÛ\95Ù\88Û\95 Û\8cاÙ\86 ØªÛ\8eÚ©Û\95ÚµÛ\8cاÙ\86 Ø¨Ú©Û\95Û\8cت.",
        "movearticle": "ئەم پەڕەیە بگوازەوە:",
+       "moveuserpage-warning": "<strong>ھۆشدار:</strong> تۆ خەریکی گواستنەوەی پەڕەیەکی بەکارھێنەری. تکایە ئەمە لەبەرچاو بگرە تەنیا پەڕەکە دەگوازرێتەوە و ناوی بەکارھێنەر <em>ناگۆڕدرێ</em>.",
+       "movecategorypage-warning": "<strong>ھۆشدار:</strong> تۆ خەریکی گواستنەوەی پەڕەی پۆلی. تکایە ئەمە لەبەرچاو بگرە تەنیا پەڕەکە دەگوازرێتەوە و پەڕەکانی ناو پۆلە کۆنەکە <em>ناچێتە</em> ناو پۆلە نوێکەوە.",
        "movenologintext": "بۆ گواستنەوەی پەڕەیەک، ئەشێ ببی بە ئەندام و [[Special:UserLogin|لە ژوورەوە]] بیت.",
        "movenotallowed": "ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەکان.",
        "movenotallowedfile": "ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی پەڕگەکان.",
        "import-upload": "بارکردنی دراوەی XML",
        "import-token-mismatch": "لەدەستدانی دراوەکانی کۆڕ.\nتکایە دیسان تاقی بکەوە.",
        "import-invalid-interwiki": "لە ویکی‌ دیاریکراو ھاوردن ناکرێ.",
-       "import-error-edit": "پەڕەی «$1» ھاوردە ناکرێ، چون ناتوانی ئەم پەڕەیە دەستکاری بکەی.",
-       "import-error-create": "پەڕەی «$1» ھاوردە ناکرێ، چون ناتوانی ئەم پەڕەیە دروست بکەی.",
-       "import-error-interwiki": "پەڕەی «$1» ھاوردە ناکرێ چون ناوەکەی بۆ بەستەری دەرەکیی (interwiki) گیراوەتەوە.",
-       "import-error-special": "پەڕەی «$1» ھاوردە ناکرێ چون لە بۆشاییی ناوی نەگونجاودایە.",
+       "import-error-edit": "پەڕەی «$1» ھاوردە نەکرا، چون ناتوانی ئەم پەڕەیە دەستکاری بکەی.",
+       "import-error-create": "پەڕەی «$1» ھاوردە نەکرا، چون ناتوانی ئەم پەڕەیە دروست بکەی.",
+       "import-error-interwiki": "پەڕەی «$1» ھاوردە نەکرا چون ناوەکەی بۆ بەستەری دەرەکیی (interwiki) گیراوەتەوە.",
+       "import-error-special": "پەڕەی «$1» ھاوردە نەکرا چون لە بۆشاییی ناوی نەگونجاودایە.",
        "import-error-invalid": "پەڕەی «$1» ھاوردە ناکرێ چون ناوەکەی نادروستە.",
        "importlogpage": "لۆگی ھاوردن",
        "importlogpagetext": "ھاوردنی پەڕەکان لەگەڵ مێژووی دەستکاری لە ویکییەکانی ترەوە.",
        "import-logentry-upload": "[[$1]]ی بە بارکردنی پەڕگە ھاورد",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|پێداچوونەوە}}",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|پێداچوونەوە}} ھاوردە کرا",
        "import-logentry-interwiki": "$1ی ناوویکی کرد",
-       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|پێداچوونەوە}} لە $2",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|پێداچوونەوە}} لە $2 ھاوردە کرا",
        "javascripttest": "تاقیکردنەوەی جاڤاسکریپت",
        "tooltip-pt-userpage": "پەڕەی بەکارھێنەرییەکەت",
        "tooltip-pt-anonuserpage": "پەڕەی بەکارھێنەری بۆ ئای‌پی یەکە کە بەناویەوە خەریکی دەستکاری کردنی",
        "pageinfo-robot-policy": "پێرستکردن بە بۆتەکان",
        "pageinfo-robot-index": "ڕێ پێدراو",
        "pageinfo-robot-noindex": "ڕێ پێنەدراوه",
-       "pageinfo-views": "ژمارەی بینینەکان",
        "pageinfo-watchers": "ژمارەی چاودێرانی پەڕە",
        "pageinfo-few-watchers": "کەمتر لە $1 {{PLURAL:$1|چاودێر}}",
        "pageinfo-redirects-name": "ژمارەی ڕەوانەکەرەکان بۆ ئەم پەڕەیە",
        "markedaspatrollederror-noautopatrol": "ناتوانی گۆڕانکارییەکانی خۆت وەک پاس دراو نیشان بکەی.",
        "markedaspatrollednotify": "ئەم گۆڕانکارییە لەسەر $1 وەک پاس دراو نیشان کرا.",
        "markedaspatrollederrornotify": "نیشانکردن وەک پاس دراو سەرکەوتوو نەبوو.",
-       "patrol-log-page": "لۆگی پاسدەری",
+       "patrol-log-page": "لۆگی پاسدان",
        "patrol-log-header": "ئەمە لۆگێکی پێداچوونەوە پاس دراوەکانە.",
-       "log-show-hide-patrol": "لۆگی پاسدەری $1",
+       "log-show-hide-patrol": "لۆگی پاسدان $1",
        "deletedrevision": "پێداچوونەوەی کۆنی سڕاوە $1",
        "filedeleteerror-short": "هەڵە لە سڕینەوەی پەڕگە: $1",
        "filedeleteerror-long": "کاتی سڕینەوەی ئەم پەڕگەی ڕووبەڕووی کێشە بووینەوە:\n\n$1",
        "exif-urgency-normal": "ئاسایی ($1)",
        "exif-urgency-low": "کەم ($1)",
        "exif-urgency-high": "زۆر ($1)",
-       "watchlistall2": "ھەموو",
        "namespacesall": "ھەموو",
        "monthsall": "ھەموو",
        "confirmemail": "بڕواپێکردنی ناونیشانی ئیمەیل",
        "autosumm-replace": "«$1»ی لە جێی ناوەرۆک دانا",
        "autoredircomment": "ڕەوانە کرا بۆ [[$1]]",
        "autosumm-new": "پەڕەی دروست کرد بە «$1»ەوە",
+       "autosumm-newblank": "پەڕەی واڵای دروست کرد",
        "size-bytes": "$1 بایت",
        "size-kilobytes": "$1 کیلۆبایت",
        "size-megabytes": "$1 مێگابایت",
        "version-software-product": "بەرهەم",
        "version-software-version": "وەشان",
        "version-entrypoints-header-url": "ناونیشانی ئینتەرنێتی",
+       "redirect": "ڕەوانەکەر بە پێی پەڕگە، بەکارھێنەر، پەڕە یان پێناسەی پێداچوونەوە",
+       "redirect-legend": "ڕەوانەکەر بۆ پەڕگە یان پەڕەیەک",
+       "redirect-summary": "ئەم پەڕە تایبەتە ڕەوانە دەکرێ بۆ پەڕگەیەک (ناوی پەڕگەکە)، پەڕەیەک (پێناسەی پێداچوونەوەیەک یان پێناسەی پەڕە) یان پەڕەیەکی بەکارھێنەر (پێناسەیەکی  ژمارەیی بەکارھێنەر). بەکارھێنان: [[{{#Special:Redirect}}/file/Example.jpg]]، [[{{#Special:Redirect}}/page/64308]]، [[{{#Special:Redirect}}/revision/328429]] یان [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "بڕۆ",
+       "redirect-lookup": "گەڕان لە:",
+       "redirect-value": "نرخ:",
+       "redirect-user": "پێناسەی بەکارھێنەر",
+       "redirect-page": "پێناسەی پەڕە",
+       "redirect-revision": "پێداچوونەوەی پەڕە",
+       "redirect-file": "ناوی پەڕگە",
        "fileduplicatesearch": "گەڕان بۆ پەڕگە دووپات کراوەکان",
        "fileduplicatesearch-summary": "گەڕان بۆ پەڕگە دووبارەکراوەکان لەسەر بنەمای نرخی hash.",
        "fileduplicatesearch-legend": "گەڕان بۆ دووبارەکردنێک",
        "fileduplicatesearch-noresults": "پەڕگەیەک بە ناوی «$1» نەدۆزرایەوە.",
        "specialpages": "پەڕە تایبەتەکان",
        "specialpages-note": "* پەڕە تایبەتە ئاسایییەکان.\n* <span class=\"mw-specialpagerestricted\">پەڕە تایبەتە بەرگری‌لێکراوەکان.</span>",
-       "specialpages-group-maintenance": "Ú\95اپÛ\86رتÛ\95کاÙ\86Û\8c Ú\86اکسازÛ\8c",
+       "specialpages-group-maintenance": "Ú\95اپÛ\86رتÛ\95کاÙ\86Û\8c Ú\95اگرتÙ\86",
        "specialpages-group-other": "پەڕە تایبەتەکانی دیکە",
        "specialpages-group-login": "چوونەژوورەوە / دروستکردنی ھەژمار",
        "specialpages-group-changes": "دوایین گۆڕانکارییەکان و لۆگەکان",
        "specialpages-group-pages": "پێرستەکانی پەڕەکان",
        "specialpages-group-pagetools": "ئامرازەکانی پەڕە",
        "specialpages-group-wiki": "دراوەکان و ئامرازەکان",
-       "specialpages-group-redirects": "پەڕە تایبەتەکانی رەوانکردنەوە",
+       "specialpages-group-redirects": "پەڕە تایبەتەکانی ڕەوانەکردن",
        "specialpages-group-spam": "ئامرازەکانی سپەم",
        "blankpage": "پەڕەی واڵا",
        "intentionallyblankpage": "ئەم پەڕەیە لەقەست واڵا ھێڵراوەتەوە.",
        "external_image_whitelist": " #ئەم دێڕ ھەر بەم جۆرە کە ھەیە بەجێبێڵە<pre>\n#کەرتەکانی regular expression (تەنیا ئە بەشە کە لە نێوان // دا دێت) لە خوارەوە دابنێ\n#These will be matched with the URLs of external (hotlinked) images\n#Those that match will be displayed as images, otherwise only a link to the image will be shown\n#ئەو دێڕانە بە # دەست پێدەکەن وەک شرۆڤە (comments) مامەڵەیان لەگەڵ دەکرێ\n#بە گەورە و بچووکی پیتەکان ھەستیارە (case-insensitive)\n\n#گشت کەرتەکانی regex لە سەرەوەی ئەم دێرەدا دابنێ. ئەم دێڕ ھەر بەم جۆرە کە ھەیە بەجێبێڵە</pre>",
-       "tags": "گۆڕانکاری گونجاوی تاگەکان",
+       "tags": "تاگەکانی گۆڕانکاریی گونجاو",
        "tag-filter": "پاڵێوی [[Special:Tags|تاگ]]:",
        "tag-filter-submit": "پاڵاوتن",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|تاگ|تاگەکان}}]]: $2)",
        "tags-title": "تاگەکان",
        "tags-intro": "ئەم لاپەڕە ئەو تاگانەی لیست دەکات کە لەوانەیە نەرمامێر دەستکاریەکی بۆ نیشان بکات و مەبەستی نیشان بدات.",
        "tags-tag": "ناوی تاگ",
        "logentry-newusers-byemail": "ھەژماری بەکارھێنەریی $3 لە لایەن $1 {{GENDER:$2|دروست کرا}} و تێپەڕوشە بە ئیمەیل نێردرا",
        "logentry-newusers-autocreate": "ھەژماری بەکارھێنەریی $1 بە شێوەی خۆگەڕ {{GENDER:$2|دروست کرا}}",
        "logentry-rights-rights": "$1 ئەندامێتیی $3ی لە $4 بۆ $5 {{GENDER:$2|گۆڕی}}",
+       "logentry-upload-upload": "$1 $3ی {{GENDER:$2|بار کرد}}",
+       "logentry-upload-overwrite": "$1 وەشانێکی نوێی $3ی {{GENDER:$2|بار کرد}}",
        "rightsnone": "(ھیچ)",
+       "revdelete-summary": "پوختەی دەستکاری",
        "feedback-subject": "بابەت:",
        "feedback-message": "پەیام:",
        "feedback-cancel": "ھەڵیوەشێنەوە",
        "feedback-submit": "تێبینییەکان بنێرە",
-       "feedback-close": "ئەنجام درا",
+       "feedback-close": "کرا",
        "searchsuggest-search": "گەڕان",
        "searchsuggest-containing": "بە لەبەرگرتنەوەی ...",
        "api-error-empty-file": "ئەو پەڕگەیە کە ناردووتە واڵا بوو.",
index 01fe0c0..69e8949 100644 (file)
        "loginlanguagelabel": "Lingua: $1",
        "retypenew": "Scrive torna a nova parulla secreta:",
        "resetpass-submit-cancel": "Cancillà",
-       "changeemail-cancel": "Cancillà",
        "bold_sample": "Grassettu",
        "bold_tip": "Grassettu",
        "italic_sample": "Italicu",
        "search-section": "(sezzione $1)",
        "search-suggest": "Forse vulii dì",
        "searchrelated": "currilati",
-       "showingresultsheader": "{{PLURAL:$5|Risultatu '''$1''' di '''$3'''|Risultati '''$1 - $2''' di '''$3'''}} per '''$4'''",
        "search-nonefound": "A ricerca ùn hà micca datu risultati.",
        "powersearch-ns": "Circà in u spaziu di nomi",
        "preferences": "Preferenze",
        "ncategories": "$1 {{PLURAL:$1|categuria|categurie}}",
        "nmembers": "$1 {{PLURAL:$1|elementu|elementi}}",
        "specialpage-empty": "Issa pagina hè biota.",
-       "popularpages": "Pagine populare",
        "prefixindex": "Indice di e pagine per lettere iniziale",
        "shortpages": "Pagine corte",
        "longpages": "Pagine longhe",
        "pager-newer-n": "{{PLURAL:$1|1 più ricente|$1 più ricenti}}",
        "pager-older-n": "{{PLURAL:$1|1 menu ricente|$1 menu ricenti}}",
        "booksources": "Libri di fonti",
-       "booksources-go": "Andà",
        "specialloguserlabel": "Utilizatore:",
        "speciallogtitlelabel": "Titulu:",
        "log": "Righjistramenti",
        "watchlistfor2": "Per $1 ($2)",
        "watch": "Suvità",
        "unwatch": "Ùn suvità micca",
-       "wlshowlast": "Mustrà l'ultime $1 ore $2 ghjorni $3",
+       "wlshowlast": "Mustrà l'ultime $1 ore $2 ghjorni",
        "enotif_reset": "Marcà tutte e pagine visitate",
        "created": "creatu",
        "changed": "cambiatu",
        "exif-scenecapturetype-2": "Ritrattu",
        "exif-contrast-0": "Nurmale",
        "exif-saturation-0": "Nurmale",
-       "watchlistall2": "tutte",
        "monthsall": "tutti",
        "confirm_purge_button": "D'accordu",
        "table_pager_next": "Pagina seguente",
index a878acd..4d4784c 100644 (file)
        "search-interwiki-default": "$1 mga resulta:",
        "search-interwiki-more": "(mas damu pa)",
        "searchall": "tanan",
-       "showingresultsheader": "{{PLURAL:$5|Resulta nga '''$1''' sang '''$3'''|Mga resulta nga '''$1 - $2''' sang '''$3'''}} para sa '''$4'''",
        "search-nonefound": "Wala sang mga resulta nga nagatugma sa pamangkot/pagpamangkot.",
        "powersearch-legend": "Abanse nga pagpangita",
        "powersearch-ns": "Magpangita sa mga espasyo sang pangalan:",
        "pager-older-n": "{{PLURAL:$1|mas daan nga 1|mas daan nga $1}}",
        "booksources": "Mga makuhaan nga libro",
        "booksources-search-legend": "Magpangita sa makuha-an nga mga libro",
-       "booksources-go": "Padayon",
        "log": "Mga Listahan",
        "allpages": "Tanan nga pahina",
        "prevpage": "Antes nga pahina ($1)",
        "watchthispage": "Bantayan ang mini nga pahina",
        "unwatch": "Di pagbantayan",
        "watchlist-details": "{{PLURAL:$1|$1 ka pahina|$1 ka mga pahina}} sa imo listahan sang ginabantayan, wala madala ang mga pahina sang istoryahanay.",
-       "wlshowlast": "Ipakita ang nagligad nga $1 ka mga oras $2 ka mga adlaw $3",
+       "wlshowlast": "Ipakita ang nagligad nga $1 ka mga oras $2 ka mga adlaw",
        "watchlist-options": "Pililian para sa listahan sang mga ginabantayan",
        "watching": "Ginabantayan...",
        "unwatching": "Wala ginabantayan...",
        "metadata-expand": "Ipakita ang mga dugang nga detalye",
        "metadata-collapse": "Itago ang mga dugang nga detalye",
        "metadata-fields": "Ang mga lugar sang EXIF metadata nga nalista sa mini nga mensahe pagadal-on sa mga laragway nga ginapakita sa pahina kung maguba ang tabla sang metadata.\nAng iban ay pagataguon sang default.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
-       "watchlistall2": "tanan",
        "namespacesall": "tanan",
        "monthsall": "tanan",
        "watchlisttools-view": "Tan-awon ang mga kapareho nga ginbag-o",
index bc24170..e715dbb 100644 (file)
        "statistics": "Статистика",
        "statistics-header-pages": "Саифе статистикасы",
        "statistics-header-edits": "Денъиштирюв статистикасы",
-       "statistics-header-views": "Козьден кечирме статистикасы",
        "statistics-header-users": "Къулланыджы статистикасы",
        "statistics-header-hooks": "Дигер статистика",
-       "statistics-mostpopular": "Энъ сыкъ бакъылгъан саифелер",
        "doubleredirects": "Ёлламагъа олгъан ёлламалар",
        "doubleredirectstext": "Бу саифеде дигер ёллама саифелерине ёлланма олгъан саифелери косьтериле.\nЭр сатырда биринджи ве экинджи ёлламагъа багълантылар да, экинджи ёлламанынъ макъсат саифеси (адетиндже о биринджи ёлламанынъ керекли макъсады ола) да бар.\n<del>Устю сызылгъан</del> меселелер энди чезильген.",
        "double-redirect-fixed-move": "[[$1]] авуштырылды, шимди [[$2]] саифесине ёллап тура.",
        "uncategorizedtemplates": "Эр анги бир категорияда олмагъан шаблонлар",
        "unusedcategories": "Къулланылмагъан категориялар",
        "unusedimages": "Къулланылмагъан ресимлер",
-       "popularpages": "Популяр саифелер",
        "wantedcategories": "Истенильген категориялар",
        "wantedpages": "Истенильген саифелер",
        "wantedfiles": "Истенильген файллар",
        "pager-older-n": "{{PLURAL:$1|1=даа эски 1|даа эски $1}}",
        "booksources": "Китаплар менбасы",
        "booksources-search-legend": "Китаплар менбасыны къыдырув",
-       "booksources-go": "Къыдыр",
        "specialloguserlabel": "Къулланыджы:",
        "speciallogtitlelabel": "Серлева:",
        "log": "Журналлар",
        "wlheader-enotif": "E-mail иле хабер берюв ачылды.",
        "wlheader-showupdated": "Сонъки зияретинъизден сонъ денъиштирильген саифелер '''къалын арифлернен''' косьтерильди.",
        "wlnote": "Ашагъыда саат $3, $4 ичюн сонъки {{PLURAL:$2|1=саат|'''$2''' саат}} ичинде япылгъан сонъки {{PLURAL:$1|1=денъиштирме|'''$1''' денъиштирме}} косьтериле.",
-       "wlshowlast": "Сонъки $1 саат ичюн, $2 кунь ичюн я да $3 косьтер",
+       "wlshowlast": "Сонъки $1 саат ичюн, $2 кунь ичюн я да  косьтер",
        "watchlist-options": "Козетюв джедвели сазламалары",
        "watching": "Козетюв джедвелине кирсетильмекте...",
        "unwatching": "Козетюв джедвелинден ёкъ этильмекте...",
        "exif-scenecapturetype-3": "Гедже съёмкасы",
        "exif-subjectdistancerange-0": "Билинмей",
        "exif-subjectdistancerange-1": "Макро",
-       "watchlistall2": "эписини",
        "namespacesall": "Эписи",
        "monthsall": "Эписи",
        "confirmemail": "E-mail адресини тасдыкъла",
index 1e10057..3d6d991 100644 (file)
        "statistics": "Statistika",
        "statistics-header-pages": "Saife statistikası",
        "statistics-header-edits": "Deñiştirüv statistikası",
-       "statistics-header-views": "Közden keçirme statistikası",
        "statistics-header-users": "Qullanıcı statistikası",
        "statistics-header-hooks": "Diger statistika",
-       "statistics-mostpopular": "Eñ sıq baqılğan saifeler",
        "doubleredirects": "Yollamağa olğan yollamalar",
        "doubleredirectstext": "Bu saifede diger yollama saifelerine yollanma olğan saifeleri kösterile.\nEr satırda birinci ve ekinci yollamağa bağlantılar da, ekinci yollamanıñ maqsat saifesi (adetince o birinci yollamanıñ kerekli maqsadı ola) da bar.\n<del>Üstü sızılğan</del> meseleler endi çezilgen.",
        "double-redirect-fixed-move": "[[$1]] avuştırıldı, şimdi [[$2]] saifesine yollap tura.",
        "uncategorizedtemplates": "Er angi bir kategoriyada olmağan şablonlar",
        "unusedcategories": "Qullanılmağan kategoriyalar",
        "unusedimages": "Qullanılmağan resimler",
-       "popularpages": "Populâr saifeler",
        "wantedcategories": "İstenilgen kategoriyalar",
        "wantedpages": "İstenilgen saifeler",
        "wantedfiles": "İstenilgen fayllar",
        "pager-older-n": "{{PLURAL:$1|daa eski 1|daa eski $1}}",
        "booksources": "Kitaplar menbası",
        "booksources-search-legend": "Kitaplar menbasını qıdıruv",
-       "booksources-go": "Qıdır",
        "specialloguserlabel": "Qullanıcı:",
        "speciallogtitlelabel": "Serleva:",
        "log": "Jurnallar",
        "wlheader-enotif": "E-mail ile haber berüv açıldı.",
        "wlheader-showupdated": "Soñki ziyaretiñizden soñ deñiştirilgen saifeler '''qalın ariflernen''' kösterildi.",
        "wlnote": "Aşağıda saat $3, $4 içün soñki {{PLURAL:$2|saat|'''$2''' saat}} içinde yapılğan soñki {{PLURAL:$1|deñiştirme|'''$1''' deñiştirme}} kösterile.",
-       "wlshowlast": "Soñki $1 saat içün, $2 kün içün ya da $3 köster",
+       "wlshowlast": "Soñki $1 saat içün, $2 kün içün ya da  köster",
        "watchlist-options": "Közetüv cedveli sazlamaları",
        "watching": "Közetüv cedveline kirsetilmekte...",
        "unwatching": "Közetüv cedvelinden yoq etilmekte...",
        "exif-scenecapturetype-3": "Gece syomkası",
        "exif-subjectdistancerange-0": "Bilinmey",
        "exif-subjectdistancerange-1": "Makro",
-       "watchlistall2": "episini",
        "namespacesall": "Episi",
        "monthsall": "Episi",
        "confirmemail": "E-mail adresini tasdıqla",
index 37b969e..f23330b 100644 (file)
        "otherlanguages": "V jiných jazycích",
        "redirectedfrom": "(Přesměrováno z $1)",
        "redirectpagesub": "Přesměrování",
+       "redirectto": "Přesměrování na:",
        "lastmodifiedat": "Stránka byla naposledy editována $1 v $2.",
        "viewcount": "Stránka byla zobrazena {{PLURAL:$1|jedenkrát|$1krát|$1krát}}.",
        "protectedpage": "Zamčená stránka",
        "viewsourcetext": "Můžete si prohlédnout a zkopírovat zdrojový kód této stránky:",
        "viewyourtext": "Můžete si prohlédnout a zkopírovat zdrojový kód '''vašich změn''' této stránky:",
        "protectedinterface": "Tato stránka obsahuje text softwarového rozhraní a 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": "'''Upozornění:''' 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.\nPro přidávání a změny překladů pro všechny wiki použijte [//translatewiki.net/ translatewiki.net], projekt pro lokalizaci MediaWiki.",
+       "editinginterface": "<strong>Upozornění:</strong> Editujete stránku, která definuje texty rozhraní.\nZměny této stránky ovlivní vzhled uživatelského rozhraní všem uživatelům této wiki.",
+       "translateinterface": "Pro přidávání a změny překladů pro všechny wiki použijte [//translatewiki.net/ translatewiki.net], projekt pro lokalizaci MediaWiki.",
        "cascadeprotected": "Tato stránka je zamčena, neboť je vložena do {{PLURAL:$1|následující stránky, zamčené|následujících stránek, zamčených|následujících stránek, zamčených}} kaskádovým zámkem:\n$2",
        "namespaceprotected": "Nemáte povoleno editovat stránky ve jmenném prostoru '''$1'''.",
        "customcssprotected": "Nemáte povoleno editovat tuto stránku s CSS, protože obsahuje osobní nastavení jiného uživatele.",
        "nocookiesnew": "Uživatelský účet byl vytvořen, ale nejste přihlášeni. {{SITENAME}} používá cookies k přihlášení uživatelů. Vy máte cookies vypnuty. Prosím, zapněte je a poté se přihlaste svým novým uživatelským jménem a heslem.",
        "nocookieslogin": "{{SITENAME}} používá cookies k přihlášení uživatelů. Vy máte cookies vypnuty. Prosím zapněte je a zkuste znovu.",
        "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": "Musíte uvést jméno svého účtu.",
+       "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“.",
        "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]].",
        "createaccount-text": "Někdo na {{grammar:6sg|{{SITENAME}}}} ($4) vytvořil účet s vaší e-mailovou adresou.\nJméno účtu: „$2“\nHeslo: „$3“\nMěli byste se co nejdřív přihlásit a změnit si heslo.\n\nPokud byl účet vytvořen omylem, považujte tuto zprávu za bezpředmětnou.",
        "login-throttled": "Provedli jste příliš mnoho pokusů o přihlášení.\nNež to zkusíte znovu, musíte počkat na vypršení lhůty $1.",
        "login-abort-generic": "Vaše přihlášení se nezdařilo – přerušeno",
+       "login-migrated-generic": "Váš účet byl zmigrován a vaše uživatelské jméno již nadále na této wiki neexistuje.",
        "loginlanguagelabel": "Jazyk: $1",
        "suspicious-userlogout": "Váš požadavek na odhlášení byl odmítnut, neboť to vypadá, že ho poslal rozbitý prohlížeč nebo cachující proxy.",
        "createacct-another-realname-tip": "Skutečné jméno je nepovinné.\nPokud se ho rozhodnete uvést, bude použito pro označení autorství vaší práce.",
        "passwordreset-emailsent-capture": "Byl odeslán e-mail pro získání nového hesla, který je zobrazen níže.",
        "passwordreset-emailerror-capture": "Byl vygenerován e-mail pro získání nového hesla, který je zobrazen níže, ale {{GENDER:$2|uživateli|uživatelce}} se ho nepodařilo odeslat: $1",
        "changeemail": "Změna e-mailové adresy",
-       "changeemail-header": "Změna e-mailové adresy k účtu",
        "changeemail-text": "Vyplněním tohoto formuláře si změníte e-mailovou adresu. Pro potvrzení změny budete muset zadat své heslo.",
        "changeemail-no-info": "K této stránce mají přímý přístup jen přihlášení uživatelé.",
        "changeemail-oldemail": "Stávající e-mailová adresa:",
        "changeemail-none": "(žádná)",
        "changeemail-password": "Vaše heslo do {{gender:2sg|{{SITENAME}}}}:",
        "changeemail-submit": "Změnit e-mail",
-       "changeemail-cancel": "Storno",
        "changeemail-throttled": "Provedli jste příliš mnoho pokusů o přihlášení.\nČekejte prosím $1 a zkuste to znovu.",
        "resettokens": "Reinicializace klíčů",
        "resettokens-text": "Na této stránce můžete reinicializovat klíče, které umožňují přístup k jistým soukromým údajům spojeným s vaším účtem.\n\n{{GENDER:|Měl|Měla|Měli}} byste to provést v případě, že jste je omylem někomu {{GENDER:|prozradil|prozradila|prozradili}}, nebo byl váš účet narušen.",
        "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). Vaše IP adresa bude zveřejněna v historii této stránky.",
+       "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í.",
        "missingcommenttext": "Zadejte komentář",
        "content-model-text": "čistý text",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Stránky s duplicitními argumenty ve voláních šablon",
+       "duplicate-args-category-desc": "Stránka obsahuje volání šablony, které používá duplicitní argumenty, např. <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> nebo <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Varování:''' Tato stránka obsahuje příliš mnoho volání výkonnostně náročných funkcí syntaktického analyzátoru.\n\nPovolený limit je $2, v současné chvíli však {{PLURAL:$1|zde jedno volání je|zde jsou $1 volání|zde je $1 volání}}.",
        "expensive-parserfunction-category": "Stránky s příliš mnoho voláními náročných funkcí syntaktického analyzátoru",
        "post-expand-template-inclusion-warning": "Varování: Objem vkládaných šablon je příliš velký.\nNěkteré šablony nebudou vloženy.",
        "mergehistory-same-destination": "Zdrojová a cílová stránka se nemůžou shodovat",
        "mergehistory-reason": "Důvod:",
        "mergelog": "Kniha slučování",
-       "pagemerge-logentry": "slučuje stránku [[$1]] se stránkou [[$2]] (verze do $3)",
        "revertmerge": "Zrušit sloučení",
        "mergelogpagetext": "Níže je seznam nejnovějších sloučení historie jedné stránky s jinou.",
        "history-title": "Historie verzí stránky „$1“",
        "searchresults-title": "Výsledky hledání „$1“",
        "titlematches": "Stránky s odpovídajícím názvem",
        "textmatches": "Stránky s odpovídajícím textem",
-       "notextmatches": "Žádné stránky textem neodpovídají.",
+       "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}}",
        "prevn-title": "{{PLURAL:$1|Předchozí výsledek|Předchozí $1 výsledky|Předchozích $1 výsledků}}",
        "search-result-category-size": "{{PLURAL:$1|1 položka|$1 položky|$1 položek}} ({{PLURAL:$2|1 podkategorie|$2 podkategorie|$2 podkategorií}}, {{PLURAL:$3|1 soubor|$3 soubory|$3 souborů}})",
        "search-redirect": "(přesměrování $1)",
        "search-section": "(část $1)",
+       "search-category": "(kategorie $1)",
        "search-file-match": "(odpovídá obsahu souboru)",
        "search-suggest": "Mysleli jste: $1",
        "search-interwiki-caption": "Sesterské projekty",
        "searchall": "vše",
        "showingresults": "Níže zobrazuji nejvýše <strong>$1</strong> {{PLURAL:$1|výsledek|výsledky|výsledků}} počínaje od <strong>$2</strong>.",
        "showingresultsinrange": "Níže zobrazuji nejvýše <strong>$1</strong> {{PLURAL:$1|výsledek|výsledky|výsledků}} v rozsahu #<strong>$2</strong>–#<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Výsledek '''$1''' z '''$3'''|Výsledky '''$1–$2''' z '''$3'''}} pro '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Výsledek <strong>$1</strong> z <strong>$3</strong>|Výsledky <strong>$1–$2</strong> z <strong>$3</strong>}}",
        "search-nonefound": "Na váš dotaz nebyly nalezeny žádné výsledky.",
        "powersearch-legend": "Rozšířené vyhledávání",
        "powersearch-ns": "Hledat ve jmenných prostorech:",
        "gender-female": "Ona upravila článek.",
        "prefs-help-gender": "Toto nastavení je nepovinné.\nSoftware ho používá pro volbu gramatického rodu, když vás oslovuje nebo vás zmiňuje.\nTato informace je veřejná.",
        "email": "E-mail",
-       "prefs-help-realname": "Skutečné jméno je nepovinné.\nPokud se ho rozhodnete uvést, bude použito pro označení autorství vaší práce.",
+       "prefs-help-realname": "Skutečné jméno je nepovinné.\nPokud ho uvedete, může být použito pro označení autorství vaší práce.",
        "prefs-help-email": "Uvedení e-mailu není povinné, ale umožní zaslání nového hesla v případě, že své heslo zapomenete.",
        "prefs-help-email-others": "Také můžete dovolit ostatním uživatelům vás prostřednictvím uživatelské stránky kontaktovat.\nVaše adresa v takovém případě není prozrazena.",
        "prefs-help-email-required": "Je vyžadována e-mailová adresa.",
        "prefs-tokenwatchlist": "Klíč",
        "prefs-diffs": "Porovnání verzí",
        "prefs-help-prefershttps": "Toto nastavení se projeví při příštím přihlášení.",
+       "prefswarning-warning": "Provedli jste změny nastavení, které dosud nejsou uloženy. Pokud tuto stránku opustíte, aniž byste klikli na „$1“, vaše nastavení se nezmění.",
        "prefs-tabs-navigation-hint": "Tip: Pro přepínání mezi záložkami můžete používat šipky vlevo a vpravo.",
        "email-address-validity-valid": "E-mailová adresa vypadá jako platná",
        "email-address-validity-invalid": "Zadejte platnou e-mailovou adresu",
        "statistics": "Statistika",
        "statistics-header-pages": "Statistika stránek",
        "statistics-header-edits": "Statistika editací",
-       "statistics-header-views": "Statistika zobrazení",
        "statistics-header-users": "O uživatelích",
        "statistics-header-hooks": "Další statistiky",
        "statistics-articles": "Obsahové stránky",
        "statistics-files": "Načtené soubory",
        "statistics-edits": "Počet editací od založení wiki",
        "statistics-edits-average": "Průměrný počet editací na stránku",
-       "statistics-views-total": "Celkový počet zobrazení",
-       "statistics-views-total-desc": "Zobrazení neexistujících a speciálních stránek se nepočítají",
-       "statistics-views-peredit": "Počet zobrazení na editaci",
        "statistics-users": "Registrovaní [[Special:ListUsers|uživatelé]]",
        "statistics-users-active": "Aktivní uživatelé",
        "statistics-users-active-desc": "Uživatelé, kteří v {{PLURAL:$1|posledním dni|posledních $1 dnech}} provedli nějakou operaci",
-       "statistics-mostpopular": "Nejčtenější stránky",
        "pageswithprop": "Stránky s vlastností",
        "pageswithprop-legend": "Stránky s vlastností",
        "pageswithprop-text": "Tato stránka obsahuje seznam stránek, které používají zadanou vlastnost stránky.",
        "uncategorizedtemplates": "Nekategorizované šablony",
        "unusedcategories": "Nepoužívané kategorie",
        "unusedimages": "Nepoužívané soubory",
-       "popularpages": "Nejnavštěvovanější stránky",
        "wantedcategories": "Chybějící kategorie",
        "wantedpages": "Chybějící stránky",
        "wantedpages-badtitle": "Výsledky obsahují neplatný název: $1",
        "pager-older-n": "{{PLURAL:$1|1 starší|$1 starší|$1 starších}}",
        "suppress": "Dozor",
        "querypage-disabled": "Tato speciální stránka je z výkonnostních důvodů vypnuta.",
+       "apihelp": "Nápověda k API",
+       "apihelp-no-such-module": "Modul „$1“ nebyl nalezen.",
        "booksources": "Zdroje knih",
        "booksources-search-legend": "Vyhledat knižní zdroje",
-       "booksources-go": "Vyhledat",
+       "booksources-search": "Hledat",
        "booksources-text": "Níže je seznam odkazů na servery prodávající knihy, nebo které mohou mít další informace o knihách, které hledáte.",
        "booksources-invalid-isbn": "Zadané ISBN se zdá být neplatné. Zkontrolujte jej s originálním zdrojem.",
        "specialloguserlabel": "Původce:",
        "noindex-category-desc": "Stránka není indexována roboty, protože obsahuje kouzelné slovo <code><nowiki>__NOINDEX__</nowiki></code> a je ve jmenném prostoru, ve kterém je tento příznak dovolen.",
        "index-category-desc": "Stránka obsahuje kouzelné slovo <code><nowiki>__INDEX__</nowiki></code> (a je ve jmenném prostoru, ve kterém je tento příznak dovolen), takže je indexována roboty, přestože by normálně nebyla.",
        "post-expand-template-inclusion-category-desc": "Stránka je po rozbalení všech šablon větší než <code>$wgMaxArticleSize</code>, takže některé šablony rozbaleny nebyly.",
-       "post-expand-template-argument-category-desc": "Stránka je po rozbalení argumentu šablony (něco v trojitých závorkách, např. <code>{{{Foo}}})</code> větší než <code>$wgMaxArticleSize</code>.",
+       "post-expand-template-argument-category-desc": "Stránka je po rozbalení argumentu šablony (něco v trojitých závorkách, např. <code>{{{Foo}}}</code>) větší než <code>$wgMaxArticleSize</code>.",
        "expensive-parserfunction-category-desc": "Stránka používá příliš mnoho náročných funkcí syntaktického analyzátoru (jako <code>#ifexist</code>). Vizte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "broken-file-category-desc": "Stránka obsahuje nefunkční odkaz na soubor (odkaz pro vložení souboru, který neexistuje).",
        "hidden-category-category-desc": "Kategorie ve svém textu obsahuje <code><nowiki>__HIDDENCAT__</nowiki></code>, což způsobuje, že se na stránkách implicitně nezobrazuje v rámečku odkazů na kategorie.",
        "wlheader-enotif": "Upozorňování e-mailem je zapnuto.",
        "wlheader-showupdated": "Stránky, které se změnily od vaší poslední návštěvy, jsou zobrazeny '''tučně'''.",
        "wlnote": "Níže {{PLURAL:$1|je poslední změna|jsou poslední <strong>$1</strong> změny|je posledních <strong>$1</strong> změn}} za {{PLURAL:$2|poslední hodinu|poslední <strong>$2</strong> hodiny|posledních <strong>$2</strong> hodin}} do $4, $3.",
-       "wlshowlast": "Ukázat posledních $1 hodin $2 dnů $3",
+       "wlshowlast": "Ukázat posledních $1 hodin $2 dnů",
        "watchlist-options": "Možnosti sledovaných stránek",
        "watching": "Přidávám na seznam sledovaných stránek…",
        "unwatching": "Odebírám ze seznamu sledovaných stránek…",
        "protect-othertime": "Jiný čas vypršení:",
        "protect-othertime-op": "jiný čas",
        "protect-existing-expiry": "Současný čas vypršení: $2, $3",
+       "protect-existing-expiry-infinity": "Současný čas vypršení: do odvolání",
        "protect-otherreason": "Jiný/další důvod:",
        "protect-otherreason-op": "Jiný důvod",
        "protect-dropdown": "*Obvyklé důvody zamčení\n** Opakovaný vandalismus\n** Vkládání reklamních externích odkazů\n** Editační válka\n** Často používaná stránka",
        "unblocked": "{{GENDER:$1|||Uživatel}} [[User:$1|$1]] {{GENDER:$1|byl odblokován|byla odblokována|byl odblokován}}.",
        "unblocked-range": "Rozsah $1 byl odblokován.",
        "unblocked-id": "Blok $1 byl zrušen.",
+       "unblocked-ip": "Adresa [[Special:Contributions/$1|$1]] byla odblokována.",
        "blocklist": "Zablokovaní uživatelé",
        "ipblocklist": "Zablokovaní uživatelé",
        "ipblocklist-legend": "Hledat zablokovaného uživatele",
        "import-error-create": "Stránka „$1“ se nenaimportovala, protože nemáte oprávnění ji založit.",
        "import-error-interwiki": "Stránka „$1“ se nenaimportovala, protože její název je vyhrazen pro externí odkazy (interwiki).",
        "import-error-special": "Stránka „$1“ se nenaimportovala, protože patří do speciálního jmenného prostoru, ve kterém stránky být nemohou.",
-       "import-error-invalid": "Stránka „$1“ se nenaimportovala, protože název, do kterého by se naimportovala, je na této wiki nepoužitelný.",
+       "import-error-invalid": "Stránka „$1“ se nenaimportovala, protože název, pod kterým by se naimportovala, je na této wiki nepoužitelný.",
        "import-error-unserialize": "Nepodařilo se deserializovat revizi $2 stránky „$1“. Revize měla používat model obsahu $3 serializovaný jako $4.",
        "import-error-bad-location": "Revizi $2 používající obsahový model $3 nelze uložit na \"$1\" na této wiki, neboť tento model není na této stránce podporován.",
        "import-options-wrong": "{{PLURAL:$2|Chybná volba|Chybné volby}}: <nowiki>$1</nowiki>",
        "tooltip-pt-anonuserpage": "Uživatelská stránka pro IP adresu, ze které editujete",
        "tooltip-pt-mytalk": "Vaše diskusní stránka",
        "tooltip-pt-anontalk": "Diskuse o editacích provedených z této IP adresy",
-       "tooltip-pt-preferences": "Moje nastavení",
-       "tooltip-pt-watchlist": "Seznam stránek, jejichž změny sleduji",
+       "tooltip-pt-preferences": "Vaše nastavení",
+       "tooltip-pt-watchlist": "Seznam stránek, jejichž změny sledujete",
        "tooltip-pt-mycontris": "Seznam vašich příspěvků",
        "tooltip-pt-login": "Doporučujeme vám přihlásit se, ovšem není to povinné.",
        "tooltip-pt-logout": "Odhlásit se",
+       "tooltip-pt-createaccount": "Doporučujeme vytvořit si účet a přihlásit se, není to však povinné",
        "tooltip-ca-talk": "Diskuse ke stránce",
        "tooltip-ca-edit": "Tuto stránku můžete editovat. Prosíme použijte tlačítko Ukázat náhled před uložením.",
        "tooltip-ca-addsection": "Začít novou sekci",
        "tooltip-feed-atom": "Atom kanál pro tuto stránku",
        "tooltip-t-contributions": "Prohlédnout si seznam příspěvků tohoto uživatele",
        "tooltip-t-emailuser": "Poslat e-mail tomuto uživateli",
+       "tooltip-t-info": "Více informací o této stránce",
        "tooltip-t-upload": "Nahrát obrázky či jiná multimédia",
        "tooltip-t-specialpages": "Seznam všech speciálních stránek",
        "tooltip-t-print": "Tato stránka v podobě vhodné k tisku",
        "pageinfo-robot-policy": "Indexování roboty",
        "pageinfo-robot-index": "Dovoleno",
        "pageinfo-robot-noindex": "Zakázáno",
-       "pageinfo-views": "Počet zobrazení",
        "pageinfo-watchers": "Počet sledujících",
        "pageinfo-few-watchers": "Méně než $1 {{PLURAL:$1|sledující|sledující|sledujících}}",
        "pageinfo-redirects-name": "Počet přesměrování na tuto stránku",
        "exif-urgency-low": "Nízká ($1)",
        "exif-urgency-high": "Vysoká ($1)",
        "exif-urgency-other": "Uživatelsky definovaná ($1)",
-       "watchlistall2": "všechny",
        "namespacesall": "všechny",
        "monthsall": "všechny",
        "confirmemail": "Potvrzení e-mailové adresy",
        "unknown_extension_tag": "Neznámá značka rozšíření: „$1“",
        "duplicate-defaultsort": "Upozornění: Implicitní klíč řazení (DEFAULTSORTKEY) „$2“ přepisuje dříve nastavenou hodnotu „$1“.",
        "duplicate-displaytitle": "<strong>Upozornění:</strong> Předchozí zobrazovaný název „$1“ je nahrazen zobrazovaným názvem „$2“.",
+       "invalid-indicator-name": "<strong>Chyba:</strong> Atribut <code>name</code> indikátoru stavu stránky nesmí být prázdný.",
        "version": "Verze",
        "version-extensions": "Nainstalovaná rozšíření",
        "version-skins": "Nainstalované vzhledy",
        "revdelete-uname-unhid": "odkryto uživatelské jméno",
        "revdelete-restricted": "omezení správců použito",
        "revdelete-unrestricted": "omezení správců odstraněno",
+       "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-move-move_redir": "$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4 s výměnou přesměrování",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|načetl|načetla}} novou verzi $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|načetl|načetla}} $3",
        "rightsnone": "(žádné)",
+       "revdelete-summary": "shrnutí editace",
        "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:",
        "api-error-stashfailed": "Vnitřní chyba: Serveru se nepodařilo uložit dočasný soubor.",
        "api-error-publishfailed": "Vnitřní chyba: Serveru se nepodařilo zveřejnit dočasný soubor.",
        "api-error-stasherror": "Při načítání souboru do skrýše došlo k chybě.",
+       "api-error-stashedfilenotfound": "Při pokusu o načtení souboru ze skrýše nebyl uložený soubor nalezen.",
+       "api-error-stashpathinvalid": "Cesta, na které měl být soubor uložen ve skrýši, je neplatná.",
+       "api-error-stashfilestorage": "Při ukládání souboru do skrýše došlo k chybě.",
+       "api-error-stashzerolength": "Server nemohl soubor uložit do skrýše, protože má nulovou délku.",
+       "api-error-stashnotloggedin": "Pro ukládání souboru do skrýše musíte být přihlášeni.",
+       "api-error-stashwrongowner": "Soubor, ke kterému se ve skrýši pokoušíte přistoupit, vám nepatří.",
+       "api-error-stashnosuchfilekey": "Klíč souboru, ke kterém se ve skrýši pokoušíte přistoupit, neexistuje.",
        "api-error-timeout": "Server neodpověděl v očekávaném čase.",
        "api-error-unclassified": "Došlo k neznámé chybě.",
        "api-error-unknown-code": "Neznámá chyba: „$1“.",
        "log-name-pagelang": "Kniha změn jazyků",
        "log-description-pagelang": "Toto je protokol změn jazyků stránek.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|změnil|změnila}} jazyk stránky $3 z $4 na $5.",
-       "default-skin-not-found": "Jejda! Výchozí vzhled vaší wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, není dostupný.\n\nVaše instalace zřejmě obsahuje následující vzhledy. Informace o tom, jak je povolit a vybrat výchozí, najdete na stránce [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration/cs Manual:Skin configuration].\n\n$2\n\n; Pokud jste právě nainstalovali MediaWiki:\n: Zřejmě jste instalovali z gitu nebo nějakým jiným způsobem přímo ze zdrojového kódu. Tak to má fungovat. Zkuste nainstalovat některé vzhledy ze [https://www.mediawiki.org/wiki/Category:All_skins seznamu vzhledů na mediawiki.org] buď:\n:* Můžete si stáhnout [https://www.mediawiki.org/wiki/Download/cs instalace v tarballu], která zahrnuje několik vzhledů a rozšíření, a vykopírovat si z ní adresář <code>skins/</code>, nebo\n:* Nebo si můžete gitem naklonovat jeden z repozitářů <code>mediawiki/skins/*</code> do adresáře <code>skins/</code> ve vaší instalaci MediaWiki.\n: Pokud jste vývojářem MediaWiki, nemělo by to nijak narušit váš gitový repozitář.\n\n; Pokud jste právě aktualizovali MediaWiki:\n: MediaWiki 1.24 a novější již automaticky nepovolují nainstalované vzhledy (vizte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_autodiscovery/cs Manual:Skin autodiscovery]). Pro povolení všech právě nainstalovaných vzhledů vlepte následující řádky do <code>LocalSettings.php</code>:\n\n<pre>$3</pre>\n\n; Pokud jste právě upravili <code>LocalSettings.php</code>:\n: Překontrolujte případné překlepy v názvech vzhledů.",
-       "default-skin-not-found-no-skins": "Jejda! Výchozí vzhled vaší wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, není dostupný.\n\nNemáte nainstalovány žádné vzhledy.\n\n; Pokud jste právě nainstalovali nebo aktualizovali MediaWiki:\n: Zřejmě jste instalovali z gitu nebo nějakým jiným způsobem přímo ze zdrojového kódu. Tak to má fungovat. MediaWiki 1.24 a novější již v hlavním repozitáři neobsahují žádné vzhledy. Zkuste nainstalovat některé vzhledy ze [https://www.mediawiki.org/wiki/Category:All_skins seznamu vzhledů na mediawiki.org] buď:\n:* Můžete si stáhnout [https://www.mediawiki.org/wiki/Download/cs instalace v tarballu], která zahrnuje několik vzhledů a rozšíření, a vykopírovat si z ní adresář <code>skins/</code>, nebo\n:* Nebo si můžete gitem naklonovat jeden z repozitářů <code>mediawiki/skins/*</code> do adresáře <code>skins/</code> ve vaší instalaci MediaWiki.\n: Pokud jste vývojářem MediaWiki, nemělo by to nijak narušit váš gitový repozitář. Informace o tom, jak povolit vzhledy a vybrat výchozí, najdete na stránce [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration/cs Manual:Skin configuration].",
+       "default-skin-not-found": "Jejda! Výchozí vzhled vaší wiki, definovaný ve <code dir=\"ltr\">$wgDefaultSkin</code> jako <code>$1</code>, není dostupný.\n\nVaše instalace zřejmě obsahuje následující vzhledy. Informace o tom, jak je povolit a vybrat výchozí, najdete na stránce [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration/cs Manual:Skin configuration].\n\n$2\n\n; Pokud jste právě nainstalovali MediaWiki:\n: Zřejmě jste instalovali z gitu nebo nějakým jiným způsobem přímo ze zdrojového kódu. Tak to má fungovat. Zkuste nainstalovat některé vzhledy ze [https://www.mediawiki.org/wiki/Category:All_skins seznamu vzhledů na mediawiki.org] buď:\n:* Můžete si stáhnout [https://www.mediawiki.org/wiki/Download/cs instalace v tarballu], která zahrnuje několik vzhledů a rozšíření, a vykopírovat si z ní adresář <code dir=\"ltr\">skins/</code>, nebo\n:* Nebo si můžete gitem naklonovat jeden z repozitářů <code>mediawiki/skins/*</code> do adresáře <code>skins/</code> ve vaší instalaci MediaWiki.\n: Pokud jste vývojářem MediaWiki, nemělo by to nijak narušit váš gitový repozitář.\n\n; Pokud jste právě aktualizovali MediaWiki:\n: MediaWiki 1.24 a novější již automaticky nepovolují nainstalované vzhledy (vizte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_autodiscovery/cs Manual:Skin autodiscovery]). Pro povolení všech právě nainstalovaných vzhledů vlepte následující řádky do <code>LocalSettings.php</code>:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Pokud jste právě upravili <code>LocalSettings.php</code>:\n: Překontrolujte případné překlepy v názvech vzhledů.",
+       "default-skin-not-found-no-skins": "Jejda! Výchozí vzhled vaší wiki, definovaný ve <code dir=\"ltr\">$wgDefaultSkin</code> jako <code>$1</code>, není dostupný.\n\nNemáte nainstalovány žádné vzhledy.\n\n; Pokud jste právě nainstalovali nebo aktualizovali MediaWiki:\n: Zřejmě jste instalovali z gitu nebo nějakým jiným způsobem přímo ze zdrojového kódu. Tak to má fungovat. MediaWiki 1.24 a novější již v hlavním repozitáři neobsahují žádné vzhledy. Zkuste nainstalovat některé vzhledy ze [https://www.mediawiki.org/wiki/Category:All_skins seznamu vzhledů na mediawiki.org] buď:\n:* Můžete si stáhnout [https://www.mediawiki.org/wiki/Download/cs instalace v tarballu], která zahrnuje několik vzhledů a rozšíření, a vykopírovat si z ní adresář <code>skins/</code>, nebo\n:* Nebo si můžete gitem naklonovat jeden z repozitářů <code>mediawiki/skins/*</code> do adresáře <code dir=\"ltr\">skins/</code> ve vaší instalaci MediaWiki.\n: Pokud jste vývojářem MediaWiki, nemělo by to nijak narušit váš gitový repozitář. Informace o tom, jak povolit vzhledy a vybrat výchozí, najdete na stránce [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration/cs Manual:Skin configuration].",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (povolený)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''zakázaný''')"
+       "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-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajty|$1 bajtů}} ($2; $3 %)",
+       "mediastatistics-table-mimetype": "MIME typ",
+       "mediastatistics-table-extensions": "Možné přípony",
+       "mediastatistics-table-count": "Počet souborů",
+       "mediastatistics-table-totalbytes": "Celková velikost",
+       "mediastatistics-header-unknown": "Neznámé",
+       "mediastatistics-header-bitmap": "Rastrové obrázky",
+       "mediastatistics-header-drawing": "Kresby (vektorové obrázky)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Videa",
+       "mediastatistics-header-multimedia": "Multimédia",
+       "mediastatistics-header-office": "Kancelářské soubory",
+       "mediastatistics-header-text": "Text",
+       "mediastatistics-header-executable": "Spustitelné soubory",
+       "mediastatistics-header-archive": "Komprimované formáty",
+       "json-warn-trailing-comma": "Z JSONu {{PLURAL:$1|byla odstraněna 1 koncová čárka|byly odstraněny $1 koncové čárky|bylo odstraněno $1 koncových čárek}}",
+       "json-error-unknown": "Došlo k potížím s JSONem. Chyba: $1",
+       "json-error-depth": "Byla překročena maximální hloubka zásobníku",
+       "json-error-state-mismatch": "Neplatný nebo poškozený JSON",
+       "json-error-ctrl-char": "Chybný řídicí znak, možná nesprávné kódování",
+       "json-error-syntax": "Syntaktická chyba",
+       "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"
 }
index 7049f9a..aca1e80 100644 (file)
        "uncategorizedtemplates": "Szablónë bez kategòrëji",
        "unusedcategories": "Pùsté kategòrëje",
        "unusedimages": "Nie wëzwëskóné òbrôzczi",
-       "popularpages": "Nôwidzalszé starnë",
        "wantedpages": "Nônótniészé starnë",
        "prefixindex": "Wszëtczé starnë ò prefiksu",
        "shortpages": "Nôkrótszé starnë",
        "pager-older-n": "{{PLURAL:$1|1 stôrszi|$1 stôrszé|$1 stôrszich}}",
        "booksources": "Ksążczi",
        "booksources-search-legend": "Szëkba za wëdowiédzą ò ksążkach",
-       "booksources-go": "Biéj",
        "specialloguserlabel": "Brëkòwnik:",
        "speciallogtitlelabel": "Titel:",
        "log": "Lodżi",
        "watchlist-details": "Ùzérôsz {{PLURAL:$1|$1 artikel|$1 artikle/-ów}}, nie rechùjąc diskùsëjów.",
        "wlheader-showupdated": "Artiklë jakczé òsta zmienioné òd Twòji slédny wizytë są wëapratnioné '''pògrëbieniém'''",
        "wlnote": "Niżi môsz wëskrzënioné {{PLURAL:$1|slédną zmianã|'''$1''' slédnëch zmianów}} zrobioné òb {{PLURAL:$2|gòdzënã|'''$2''' gòdzënë/gòdzënów}}.",
-       "wlshowlast": "Wëskrzëni zjinaczi z $1 gòdzënów $2 dni $3",
+       "wlshowlast": "Wëskrzëni zjinaczi z $1 gòdzënów $2 dni",
        "watchlist-options": "Òptacëje ùzérónych",
        "watching": "Ùzéróm...",
        "unwatching": "Ju ni ùzéróm...",
        "exif-source": "Zdrój",
        "exif-languagecode": "Jãzëk",
        "exif-iimcategory-spo": "Szpòrt",
-       "watchlistall2": "wszëtczé",
        "namespacesall": "wszëtczé",
        "monthsall": "wszëtczé",
        "confirmemail_loggedin": "Twòjô adresa e-mail òsta pòcwierdzona.",
        "version": "Wersëjô",
        "specialpages": "Specjalné starnë",
        "revdelete-restricted": "nastôwi ògrańczenia dlô sprôwników",
-       "revdelete-unrestricted": "rëmôj ògrańczenia dlô sprôwników"
+       "revdelete-unrestricted": "rëmôj ògrańczenia dlô sprôwników",
+       "revdelete-summary": "òpisënk zjinaczi"
 }
index f5e4590..df0bddf 100644 (file)
        "movethispage": "си страницѧ прѣимєнованиѥ",
        "pager-newer-n": "{{PLURAL:$1|нова 1|новꙑ $1|новъ $1}}",
        "pager-older-n": "{{PLURAL:$1|давьнꙗ 1|давьни $1|давьн҄ь $1}}",
-       "booksources-go": "прѣиди",
        "specialloguserlabel": "испльнитєл҄ь :",
        "speciallogtitlelabel": "страницѧ или польꙃєватєлꙗ имѧ :",
        "log": "їсторїѩ",
        "exif-iimcategory-rel": "вѣра",
        "exif-iimcategory-sci": "оучєниѥ и тєхнологїꙗ",
        "exif-iimcategory-spo": "аѳлитїка",
-       "watchlistall2": "вьсꙗ",
        "namespacesall": "вьсꙗ",
        "monthsall": "вьсѩ",
        "unit-pixel": "п҃ѯ",
        "logentry-move-move": "$1 {{GENDER:$2|нарєчє}} страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|нарєчє}} страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖ бєꙁ прѣнаправлєниꙗ сътворѥниꙗ",
        "logentry-newusers-create": "польꙃєватєльско мѣсто ⁖ $1 ⁖ {{GENDER:$2|сътворѥно}} ѥстъ",
+       "revdelete-summary": "мѣнꙑ опьсаниѥ",
        "searchsuggest-search": "исканиѥ",
        "searchsuggest-containing": "сѥ дрьжащи···",
        "api-error-unknownerror": "нєвѣдома блаꙁна : ⁖ $1 ⁖"
index 7ac4c5d..d4349e0 100644 (file)
        "nextn": "малалли {{PLURAL:$1|$1}}",
        "search-result-size": "$1 ({{PLURAL:$2|1=1 сăмах|$2 сăмах}})",
        "showingresults": "Аяларах эсир <b>#$2</b> пуçласа кăтартнă <b>$1</b> йĕркене куратăр.",
-       "showingresultsheader": "{{PLURAL:$5|1=Результат '''$1'''  '''$3''' хушшинчен|Результатсем'''$1 - $2''' '''$3''' хушшинчен}}  '''$4''' валли",
        "powersearch-legend": "Анлă шырав",
        "preferences": "Ĕнерлевсем",
        "mypreferences": "Ĕнерлев",
        "randomredirect": "Ăнсăртран илнĕ куçару",
        "statistics": "Статистика",
        "statistics-header-users": "Хутшăнакансен статистики",
-       "statistics-mostpopular": "Чи нумай пăхакан страницăсем",
        "doubleredirects": "Икĕ хут куçаракансем",
        "brokenredirects": "Татăк куçару страницисем",
        "brokenredirectstext": "Ку куçару страницисем çук страницăна куçараççĕ:",
        "unusedcategoriestext": "Çак категори страницисем çинче ытти категорисемпе статьясем çук.",
        "notargettitle": "Тĕллевне кăтартман",
        "booksources": "Кĕнекесен çăлкуçĕсем",
-       "booksources-go": "Шыра",
        "specialloguserlabel": "Хутшăнакан:",
        "log": "Журналсем",
        "all-logs-page": "Журналсем",
        "exif-lightsource-0": "Паллă мар",
        "exif-scenecapturetype-0": "Стандартлă",
        "exif-gpsspeed-k": "км/сех",
-       "watchlistall2": "пурте",
        "namespacesall": "пурте",
        "confirmemail_sent": "Çирĕплетмелли ыйтуллă çырăва ятăмăр.",
        "confirmemail_success": "Сирĕн электронлă почтăн адресне çирĕплентĕ.",
index 3a0a6ab..4c992a8 100644 (file)
        "passwordreset-emailsent-capture": "Anfonwyd e-bost i ailosod cyfrinair, ac fe'i ddangosir isod.",
        "passwordreset-emailerror-capture": "Lluniwyd e-bost i ailosod cyfrinair fel ag a welir isod, ond ni lwyddwyd i'w anfon at y {{GENDER:$2|defnyddiwr}}: $1",
        "changeemail": "Newid y cyfeiriad e-bost",
-       "changeemail-header": "Newid cyfeiriad e-bost y cyfrif",
        "changeemail-text": "Cwblhewch y ffurflen hon i newid eich cyfeiriad e-bost. Bydd angen i chi roi eich cyfrinair i gadarnhau hyn o newid.",
        "changeemail-no-info": "Ni allwch fynd at y dudalen hon heblaw eich bod wedi mewngofnodi.",
        "changeemail-oldemail": "Y cyfeiriad e-bost presennol:",
        "changeemail-none": "(dim)",
        "changeemail-password": "Eich cyfrinair ar {{SITENAME}}:",
        "changeemail-submit": "Newidier y cyfeiriad e-bost",
-       "changeemail-cancel": "Diddymer",
        "changeemail-throttled": "'Da chi wedi trio mewngofnodi gormod o weithiau.\nDaliwch eich gafael am $1 cyn ceisio eto.",
        "resettokens": "Ailosod tocynnau",
        "resettokens-text": "Gallwch ailosod tocynnau sy'n galluogi mynediad at rai manylion preifat sydd ynghlwm wrth y cyfrif yma.\n\nDylech wneud hyn os wnaethoch rannu'r manylion hyn gyda rhywun ar ddamwain neu os oes problem wedi codi gyda diogelwch eich cyfrif.",
        "mergehistory-same-destination": "Ni all y tudalen gwreiddiol a'r cyrchfan fod yr un enw",
        "mergehistory-reason": "Rheswm:",
        "mergelog": "Lòg cyfuno",
-       "pagemerge-logentry": "llyncwyd [[$1]] gan [[$2]] (golygiadau hyd at $3)",
        "revertmerge": "Daduno",
        "mergelogpagetext": "Fe ddilyn rhestr o'r achosion diweddaraf o hanes tudalen yn cael ei gyfuno a hanes tudalen arall.",
        "history-title": "$1: hanes golygu",
        "searchall": "oll",
        "showingresults": "Yn dangos $1 {{PLURAL:$1|canlyniad|canlyniad|ganlyniad|chanlyniad|chanlyniad|canlyniad}} isod gan ddechrau gyda rhif '''$2'''.",
        "showingresultsinrange": "Yn dangos hyd at {{PLURAL:$1||<strong>1</strong> canlyniad|<strong>$1</strong> ganlyniad|$1 o ganlyniadau}} isod yn yr ystod #<strong>$2</strong> i #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5||Canlyniad '''$1''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''}} ar gyfer '''$4'''",
        "search-nonefound": "Ni chafwyd dim canlyniadau i'r ymholiad.",
        "powersearch-legend": "Chwiliad uwch",
        "powersearch-ns": "Chwilio yn y parthau:",
        "randomincategory": "Tudalen ar hap o blith tudalennau'r categori",
        "randomincategory-invalidcategory": "Nid yw \"$1\" yn enw dilys i gategori.",
        "randomincategory-nopages": "Nid oes unrhyw dudalennau yn y categori [[:Category:$1]].",
-       "randomincategory-selectcategory": "Nôl tudalen ar hap o'r categori: $1 $2.",
-       "randomincategory-selectcategory-submit": "Gwneler",
        "randomredirect": "Tudalen ailgyfeirio ar hap",
        "randomredirect-nopages": "Does dim tudalennau ailgyfeirio yn y parth \"$1\".",
        "statistics": "Ystadegau",
        "statistics-header-pages": "Ystadegau tudalennau",
        "statistics-header-edits": "Ystadegau golygiadau",
-       "statistics-header-views": "Ystadegau ymweliadau",
        "statistics-header-users": "Ystadegau defnyddwyr",
        "statistics-header-hooks": "Ystadegau eraill",
        "statistics-articles": "Tudalennau pwnc",
        "statistics-files": "Ffeiliau wedi eu huwchlwytho",
        "statistics-edits": "Golygiadau ers y dechrau ar {{SITENAME}}",
        "statistics-edits-average": "Golygiadau'r dudalen, ar gyfartaledd",
-       "statistics-views-total": "Cyfanswm yr ymweliadau",
-       "statistics-views-total-desc": "Ni chynhwysir ymweliadau â thudalennau nad ydynt yn bod na thudalennau arbennig",
-       "statistics-views-peredit": "Ymweliadau wrth y golygiad:",
        "statistics-users": "[[Special:ListUsers|Defnyddwyr]] cofrestredig",
        "statistics-users-active": "Defnyddwyr gweithgar",
        "statistics-users-active-desc": "Defnyddwyr sydd wedi gweithredu unwaith neu ragor yn ystod y {{PLURAL:$1||diwrnod|deuddydd|tridiau|$1 diwrnod|$1 diwrnod}} diwethaf",
-       "statistics-mostpopular": "Tudalennau sy'n derbyn ymweliad amlaf",
        "pageswithprop": "Tudalennau a chanddynt nodwedd arbennig",
        "pageswithprop-legend": "Tudalennau a chanddynt nodwedd arbennig",
        "pageswithprop-text": "Mae'r dudalen hon yn rhestru tudalennau sydd yn defnyddio nodwedd arbennig yn y dudalen.",
        "uncategorizedtemplates": "Nodiadau heb eu categoreiddio",
        "unusedcategories": "Categorïau gwag",
        "unusedimages": "Lluniau na ddefnyddiwyd eto",
-       "popularpages": "Erthyglau poblogaidd",
        "wantedcategories": "Categorïau sydd eu hangen",
        "wantedpages": "Erthyglau sydd eu hangen",
        "wantedpages-badtitle": "Mae teitl annilys ymhlith y canlyniadau, sef: $1",
        "querypage-disabled": "Analluogwyd y dudalen arbennig hon er mwyn osgoi iddi andwyo perfformiad y wefan.",
        "booksources": "Ffynonellau llyfrau",
        "booksources-search-legend": "Chwilier am lyfrau",
-       "booksources-go": "Mynd",
        "booksources-text": "Mae'r rhestr isod yn cynnwys cysylltiadau i wefannau sy'n gwerthu llyfrau newydd a rhai ail-law. Mae rhai o'r gwefannau hefyd yn cynnig gwybodaeth pellach am y llyfrau hyn:",
        "booksources-invalid-isbn": "Ymddengys nad yw'r rhif ISBN hwn yn ddilys; efallai y cafwyd gwall wrth drosglwyddo'r rhif.",
        "specialloguserlabel": "Gwneuthurwr:",
        "wlheader-enotif": "Galluogwyd hysbysiadau trwy e-bost.",
        "wlheader-showupdated": "Mae tudalennau sydd wedi newid ers i chi eu gweld ddiwethaf wedi'u '''hamlygu'''.",
        "wlnote": "{{PLURAL:$1|Ni fu unrhyw newid|Isod mae'r '''$1''' newid diweddaraf|Isod mae'r '''$1''' newid diweddaraf|Isod mae'r '''$1''' newid diweddaraf|Isod mae'r '''$1''' newid diweddaraf|Isod mae'r '''$1''' newid diweddaraf}} yn ystod {{PLURAL:$2||yr awr|y ddwyawr|y teirawr|y \"$2\" awr|y(r) \"$2\" awr}} ddiwethaf, fel ag yr oedd am $4, $3.",
-       "wlshowlast": "Dangoser newidiadau'r $1 awr ddiwethaf neu'r $2 {{PLURAL:$2|diwrnod|diwrnod|ddiwrnod|diwrnod|diwrnod|diwrnod}} diwethaf neu'r $3 newidiadau.",
+       "wlshowlast": "Dangoser newidiadau'r $1 awr ddiwethaf neu'r $2 {{PLURAL:$2|diwrnod|diwrnod|ddiwrnod|diwrnod|diwrnod|diwrnod}} diwethaf neu'r  newidiadau.",
        "watchlist-options": "Dewisiadau ar gyfer y rhestr wylio",
        "watching": "Wrthi'n ychwanegu...",
        "unwatching": "Wrthi'n tynnu...",
        "import": "Mewnforio tudalennau",
        "importinterwiki": "Mewnforiad traws-wici",
        "import-interwiki-text": "Dewiswch wici a thudalen i'w mewnforio.\nFe gedwir dyddiadau ac enwau'r golygwyr ar gyfer y diwygiadau i'r dudalen.\nMae cofnod o bob weithred o fewnforio i'w gweld ar y [[Special:Log/import|lòg mewnforio]].",
-       "import-interwiki-source": "Wici/tudalen y gwreiddiol:",
        "import-interwiki-history": "Copïer yr holl fersiynau yn hanes y dudalen hon",
        "import-interwiki-templates": "Cynhwyser pob nodyn",
        "import-interwiki-submit": "Mewnforio",
        "tooltip-feed-atom": "Porthiant atom ar gyfer y dudalen hon",
        "tooltip-t-contributions": "Gwelwch restr o gyfraniadau'r defnyddiwr hwn",
        "tooltip-t-emailuser": "Anfonwch e-bost at y defnyddiwr hwn",
+       "tooltip-t-info": "Mwy o wybodaeth am y dudalen hon",
        "tooltip-t-upload": "Uwchlwythwch ffeil delwedd, sain, fideo, ayb",
        "tooltip-t-specialpages": "Rhestr o'r holl dudalennau arbennig",
        "tooltip-t-print": "Cynhyrchwch fersiwn o'r dudalen yn barod at ei hargraffu",
        "pageinfo-robot-policy": "Rhestrwyd gan robot",
        "pageinfo-robot-index": "Caniateir",
        "pageinfo-robot-noindex": "Gwrthodedig",
-       "pageinfo-views": "Nifer yr ymweliadau",
        "pageinfo-watchers": "Nifer gwylwyr y dudalen",
        "pageinfo-few-watchers": "Llai na $1 {{PLURAL:$1|gwyliwr|gwyliwr|wyliwr|gwyliwr|o wylwyr}}",
        "pageinfo-redirects-name": "Nifer yr ailgyfeiriadau i'r dudalen hon",
        "exif-urgency-low": "Isel ($1)",
        "exif-urgency-high": "Uchel ($1)",
        "exif-urgency-other": "Blaenoriaeth yn ôl y defnyddiwr ($1)",
-       "watchlistall2": "holl",
        "namespacesall": "pob un",
        "monthsall": "pob mis",
        "confirmemail": "Cadarnhau'r cyfeiriad e-bost",
        "logentry-rights-rights-legacy": "{{GENDER:$2|Newidiodd}} $1 y grwpiau y mae $3 yn aelod ohonynt",
        "logentry-rights-autopromote": "{{GENDER:$2|Dyrchafwyd}} $1 yn awtomatig o $4 i $5",
        "rightsnone": "(dim)",
+       "revdelete-summary": "crynodeb golygu",
        "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:",
index cc426f3..ec6594d 100644 (file)
        "resetpass-submit-loggedin": "Skift adgangskode",
        "resetpass-submit-cancel": "Annuller",
        "resetpass-wrong-oldpass": "Ugyldig midlertidig eller gældende adgangskode.\nDu har muligvis allerede skiftet din adgangskode eller anmodet om en ny midlertidig kode.",
-       "resetpass-recycled": "Vær venlig at ændre dit kodeord til et andet end dit nuværende kodeord.",
-       "resetpass-temp-emailed": "Du loggede på med en midlertidig kode tilsendt på e-mail.\nFor at afslutte indlogning, skal du oprette et nyt kodeord:",
+       "resetpass-recycled": "Vær venlig at ændre din adgangskode til noget andet end din nuværende adgangskode.",
+       "resetpass-temp-emailed": "Du loggede på med en midlertidig kode tilsendt på e-mail.\nFor at afslutte indlogning, skal du oprette en nyt adgangskode:",
        "resetpass-temp-password": "Midlertidig adgangskode",
        "resetpass-abort-generic": "Ændring af adgangskode er blevet afbrudt af en udvidelse",
-       "resetpass-expired": "Dit kodeord er udløbet. Vær venlig at ændre det til et nyt.",
+       "resetpass-expired": "Din adgangskode er udløbet. Angiv en ny adgangskode for at logge på.",
        "resetpass-expired-soft": "Din adgangskode er udløbet og skal ændres. Vær venlig at ændre den nu, eller tryk \"{{int:resetpass-submit-cancel}}\" for at ændre den senere.",
        "resetpass-validity-soft": "Din adgangskode er ikke gyldig:  $1 \n\nVær venlig at ændre den nu, eller tryk \"{{int:resetpass-submit-cancel}}\" for at ændre den senere.",
        "passwordreset": "Nulstil adgangskode",
        "passwordreset-emailsent-capture": "En e-mail om nulstilling af adgangskode, som vist nedenfor, er blevet sendt.",
        "passwordreset-emailerror-capture": "En mail om nulstilling af adgangskode, som vist nedenfor, blev genereret, men det lykkedes ikke at sende den til {{GENDER:$2|bruger}}: $1",
        "changeemail": "Ændre e-mailadresse",
-       "changeemail-header": "Ændre kontoens e-mailadresse",
        "changeemail-text": "Udfyld denne formular for at ændre din e-mailadresse. Du skal indtaste din adgangskode for at bekræfte denne ændring.",
        "changeemail-no-info": "Du skal være logget på for at komme direkte til denne side.",
        "changeemail-oldemail": "Nuværende e-mailadresse:",
        "changeemail-none": "(ingen)",
        "changeemail-password": "Din adgangskode til {{SITENAME}}:",
        "changeemail-submit": "Ændre e-mail",
-       "changeemail-cancel": "Afbryd",
        "changeemail-throttled": "Du har forsøgt at logge på for mange gange.\nVent venligst $1, før du prøver igen.",
        "resettokens": "Nulstil nøgler",
        "resettokens-text": "Du kan nulstille nøgler, som giver adgang til visse private data i forbindelse med din konto her.\n\nDu bør gøre det, hvis du ved et uheld deler dem med nogen, eller hvis din konto er blevet kompromitteret.",
        "mergehistory-same-destination": "Kilde- og målside kan ikke være den samme",
        "mergehistory-reason": "Begrundelse:",
        "mergelog": "Sammenfletningslog",
-       "pagemerge-logentry": "flettede [[$1]] ind i [[$2]] (revisioner indtil $3)",
        "revertmerge": "Gendan sammenfletning",
        "mergelogpagetext": "Nedenfor vises en liste med de nyeste sammenfletninger af en sides historik i en anden.",
        "history-title": "$1: Versionshistorik",
        "searchrelated": "relateret",
        "searchall": "alle",
        "showingresults": "Nedenfor vises <b>$1</b> {{PLURAL:$1|resultat|resultater}} startende med nummer <b>$2</b>.",
-       "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' af '''$3'''|Resultat '''$1 - $2''' af '''$3'''}} for '''$4'''",
        "search-nonefound": "Søgningen gav ingen resultater.",
        "powersearch-legend": "Avanceret søgning",
        "powersearch-ns": "Søg i navnerummene:",
        "randomincategory": "Tilfældig side i kategori",
        "randomincategory-invalidcategory": "\"$1\" er ikke et gyldigt kategorinavn.",
        "randomincategory-nopages": "Der er ingen sider i [[:Category:$1]].",
-       "randomincategory-selectcategory": "Få tilfældig side fra kategori: $1 $2.",
-       "randomincategory-selectcategory-submit": "Gå til",
+       "randomincategory-category": "Kategori:",
        "randomredirect": "Tilfældige henvisninger",
        "randomredirect-nopages": "Der er ingen omdirigeringer i navnerummet $1.",
        "statistics": "Statistik",
        "statistics-header-pages": "Sidestatistik",
        "statistics-header-edits": "Redigeringsstatistik",
-       "statistics-header-views": "Statistik over sidevisninger",
        "statistics-header-users": "Statistik om brugere på {{SITENAME}}",
        "statistics-header-hooks": "Anden statistik",
        "statistics-articles": "Indholdssider",
        "statistics-files": "Oplagte filer",
        "statistics-edits": "Redigeringer siden {{SITENAME}} blev oprettet",
        "statistics-edits-average": "Gennemsnitligt antal redigeringer per side",
-       "statistics-views-total": "Visninger i alt",
-       "statistics-views-total-desc": "Visninger på ikke-eksisterende sider og special sider er ikke inkluderet",
-       "statistics-views-peredit": "Visninger per redigering",
        "statistics-users": "Registrerede [[Special:ListUsers|brugere]]",
        "statistics-users-active": "Aktive brugere",
        "statistics-users-active-desc": "Brugere som har udført handlinger i {{PLURAL:$1|det sidste døgn|de sidste $1 dage}}",
-       "statistics-mostpopular": "Mest besøgte sider",
        "pageswithprop": "Sider med en sideegenskab",
        "pageswithprop-legend": "Sider med en sideegenskab",
        "pageswithprop-text": "Denne side viser en liste over sider, der har en bestemt sideegenskab.",
        "uncategorizedtemplates": "Ikke kategoriserede skabeloner",
        "unusedcategories": "Ubrugte kategorier",
        "unusedimages": "Ubrugte filer",
-       "popularpages": "Populære sider",
        "wantedcategories": "Ønskede kategorier",
        "wantedpages": "Ønskede sider",
        "wantedpages-badtitle": "Ugyldig titel i resultaterne: $1",
        "querypage-disabled": "Denne specialside er deaktiveret af hensyn til ydeevnen.",
        "booksources": "Bogkilder",
        "booksources-search-legend": "Søgning efter bøger",
-       "booksources-go": "Søg",
        "booksources-text": "Dette er en liste med henvisninger til Internetsider, som sælger nye og brugte bøger. Der kan der også findes yderligere informationer om bøgerne. {{SITENAME}} er ikke forbundet med nogen af dem.",
        "booksources-invalid-isbn": "Det angivne ISBN-nummer ser forkert ud. Tjek med kilden om det er skrevet korrekt.",
        "specialloguserlabel": "Udført af:",
        "listgrouprights-namespaceprotection-header": "Navnerumsbegrænsninger",
        "listgrouprights-namespaceprotection-namespace": "Navnerum",
        "listgrouprights-namespaceprotection-restrictedto": "Rettighed(er) der giver brugeren mulighed for at redigere",
+       "trackingcategories-desc": "Optagelseskriterier for kategori",
+       "noindex-category-desc": "Siden indekseres ikke af robotter, fordi den indeholder det magiske ord <code><nowiki>__NOINDEX__</nowiki></code> og er i et navnerum, hvor dette flag er tilladt.",
+       "index-category-desc": "Siden indeholder <code><nowiki>__INDEX__</nowiki></code> (og er i et navnerum, hvor dette flag er tilladt), og bliver derfor indekseret af robotter, hvor den normalt ikke ville blive det.",
        "mailnologin": "Du er ikke logget på",
        "mailnologintext": "Du skal være [[Special:UserLogin|logget på]] og have en gyldig e-mailadresse sat i dine [[Special:Preferences|indstillinger]] for at sende e-mail til andre brugere.",
        "emailuser": "E-mail til denne bruger",
        "emailuser-title-target": "Send e-mail til denne {{GENDER:$1|bruger}}",
        "emailuser-title-notarget": "Send e-mail til en bruger",
-       "emailpage": "E-mail bruger",
+       "emailpage": "E-mail til bruger",
        "emailpagetext": "Du kan bruge formularen nedenfor til at sende en e-mail til denne {{GENDER:$1|bruger}}.\nDen e-mailadresse, du har angivet i [[Special:Preferences|dine indstillinger]], vil dukke op i \"fra\"-feltet på e-mailen, så modtageren kan svare dig.",
        "defemailsubject": "{{SITENAME}}-e-mail fra brugeren \"$1\"",
        "usermaildisabled": "Bruger-e-mail deaktiveret",
        "emailmessage": "Besked:",
        "emailsend": "Send",
        "emailccme": "Send en kopi af denne e-mail til mig",
-       "emailccsubject": "Kopi sendes til $1: $2",
+       "emailccsubject": "Kopi af din besked til $1: $2",
        "emailsent": "E-mail sendt",
        "emailsenttext": "Din e-mail er blevet sendt.",
        "emailuserfooter": "Denne e-mail er sendt af $1 til $2 ved hjælp af funktionen \"E-mail til denne bruger\" på {{SITENAME}}.",
        "watchlist-details": "Du har $1 {{PLURAL:$1|side|sider}} på din overvågningsliste (ekskl. diskussionssider).",
        "wlheader-enotif": "E-mail-underretning er slået til.",
        "wlheader-showupdated": "Sider, der er ændret siden dit sidste besøg, er vist med '''fed skrift'''.",
-       "wlnote": "Nedenfor ses {{PLURAL:$1|den seneste ændring|de seneste '''$1''' ændringer}} i {{PLURAL:$2|den sidste time|de sidste '''$2''' timer}} op til den $3 kl. $4.",
-       "wlshowlast": "Vis de seneste $1 timer $2 dage $3",
+       "wlnote": "Nedenfor ses {{PLURAL:$1|den seneste ændring|de seneste <strong>$1</strong> ændringer}} i {{PLURAL:$2|den sidste time|de sidste <strong>$2</strong> timer}} op til den $3 kl. $4.",
+       "wlshowlast": "Vis de seneste $1 timer $2 dage",
        "watchlist-options": "Indstillinger for overvågningslisten",
        "watching": "Tilføjer overvågning …",
        "unwatching": "Fjerner overvågning …",
        "exbeforeblank": "indholdet før siden blev tømt var: '$1'",
        "delete-confirm": "Slet \"$1\"",
        "delete-legend": "Slet",
-       "historywarning": "Advarsel: Siden du er ved at slette har en historie med $1 {{PLURAL:$1|revision|revisioner}}:",
+       "historywarning": "<strong>Advarsel:</strong> Siden du er ved at slette har en historie med $1 {{PLURAL:$1|version|versioner}}:",
        "confirmdeletetext": "Du er ved at slette en side sammen med hele dens tilhørende historik.\nBekræft venligst at du virkelig vil gøre dette, at du forstår konsekvenserne, og at du gør det i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjerne]].",
        "actioncomplete": "Gennemført",
        "actionfailed": "Handlingen mislykkedes",
        "delete-edit-reasonlist": "Rediger sletningsårsager",
        "delete-toobig": "Denne side har en stor historik, over {{PLURAL:$1|en version|$1 versioner}}. Sletning af sådanne sider er begrænset, for at forhindre utilsigtet forstyrrelse af {{SITENAME}}.",
        "delete-warning-toobig": "Denne side har en stor historik, over {{PLURAL:$1|en version|$1 versioner}} versioner, slettes den kan det forstyrre driften af {{SITENAME}}, gå forsigtigt frem.",
+       "deleteprotected": "Du kan ikke slette denne side, fordi den er beskyttet.",
        "deleting-backlinks-warning": "'''Advarsel:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Andre sider]] linker til eller inkluderer den side, du er ved at slette.",
        "rollback": "Fjern redigeringer",
        "rollback_short": "Fjern redigering",
        "contributions-title": "Brugerbidrag for $1",
        "mycontris": "Bidrag",
        "contribsub2": "For {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Brugerkontoen \"$1\" er ikke registreret.",
        "nocontribs": "Ingen ændringer er fundet som opfylder disse kriterier.",
        "uctop": "(seneste)",
        "month": "Måned:",
        "autoblockid": "Autoblock #$1",
        "block": "Bloker bruger",
        "unblock": "Ophæv blokering af bruger",
-       "blockip": "Bloker bruger",
+       "blockip": "Bloker {{GENDER:$1|bruger}}",
        "blockip-legend": "Bloker bruger",
        "blockiptext": "Brug formularen herunder til at blokere for skriveadgang fra en bestemt IP-adresse eller et brugernavn.\nDette bør kun gøres for at forhindre vandalisme og skal være i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjerne]].\nAngiv en konkret begrundelse herunder (for eksempel med angivelse af sider der har været udsat for vandalisme).",
        "ipaddressorusername": "IP-adresse eller brugernavn",
        "ipb-unblock-addr": "Ophæv blokeringen af \"$1\"",
        "ipb-unblock": "Frigive IP-adresse/bruger",
        "ipb-blocklist": "Vis alle blokeringer som er i kraft",
-       "ipb-blocklist-contribs": "Bidrag fra $1",
+       "ipb-blocklist-contribs": "Bidrag fra {{GENDER:$1|$1}}",
        "unblockip": "Ophæv blokering af bruger",
        "unblockiptext": "Brug formularen herunder for at gendanne skriveadgangen for en tidligere blokeret IP-adresse eller bruger.",
        "ipusubmit": "Ophæv blokeringen",
        "import": "Importer sider",
        "importinterwiki": "Importer sider fra en anden wiki",
        "import-interwiki-text": "Vælg en Wiki og en side til importen.\nDatoen i den pågældende version og forfatterne ændres ikke.\nAlle Transwiki import-aktioner protokolleres i [[Special:Log/import|import-loggen]].",
-       "import-interwiki-source": "Kildewiki/-side:",
        "import-interwiki-history": "Importer alle versioner af denne side",
        "import-interwiki-templates": "Inkluder alle skabeloner",
        "import-interwiki-submit": "Importer",
        "import-upload": "Upload XML-data",
        "import-token-mismatch": "Sessionsdata er mistet. Prøv venligst igen.",
        "import-invalid-interwiki": "Kan ikke importere fra den angivne wiki.",
-       "import-error-edit": "Siden \"$1\" importeres ikke, da du ikke har rettigheden til at redigere den.",
-       "import-error-create": "Siden \"$1\" importeres ikke, da du ikke har rettigheden til at oprette den.",
-       "import-error-interwiki": "Siden \"$1\" importeres ikke, da dens navn er reserveret for eksterne henvisninger (interwiki).",
-       "import-error-special": "Siden \"$1\" importeres ikke, da den tilhører et særligt navnerum, der ikke tillader sider.",
-       "import-error-invalid": "Siden \"$1\" importeres ikke, da dens navn er ugyldigt.",
+       "import-error-edit": "Siden \"$1\" blev ikke importeret, da du ikke har rettighed til at redigere den.",
+       "import-error-create": "Siden \"$1\" blev ikke importeret, da du ikke har rettighed til at oprette den.",
+       "import-error-interwiki": "Siden \"$1\" blev ikke importeret, da dens navn er reserveret for eksterne henvisninger (interwiki).",
+       "import-error-special": "Siden \"$1\" blev ikke importeret, da den tilhører et særligt navnerum, der ikke tillader sider.",
+       "import-error-invalid": "Siden \"$1\" blev ikke importeret, fordi det navn, som den ville være importeret til er ugyldigt på denne wiki.",
        "import-error-unserialize": "Ændring $2 af siden \"$1\" kunne ikke afserialiseres. Ændringen brugte indholdsmodel $3 serialiseret som $4.",
        "import-error-bad-location": "Version $2 der bruger indholdsmodellen $3 kan ikke gemmes på \"$1\" på denne wiki, da denne model ikke understøttes på denne side.",
        "import-options-wrong": "{{PLURAL:$2|Ugyldig indstilling|Ugyldige indstillinger}}: <nowiki>$1</nowiki>",
        "importlogpage": "Importlog",
        "importlogpagetext": "Administrativ import af sider med versionshistorik fra andre Wikis.",
        "import-logentry-upload": "[[$1]] blev importeret",
-       "import-logentry-upload-detail": "{{PLURAL:$1|1 version|$1 versioner}}",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versioner}} importeret",
        "import-logentry-interwiki": "$1 blev importeret (Transwiki)",
-       "import-logentry-interwiki-detail": "{{PLURAL:$1|1 version|$1 versioner}} af $2 importeret",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|version|versioner}} importeret fra $2",
        "javascripttest": "Test af JavaScript",
        "javascripttest-title": "Kører $1 test",
        "javascripttest-pagetext-noframework": "Denne side er reserveret til at teste JavaScript.",
        "pageinfo-robot-policy": "Indeksering af robotter",
        "pageinfo-robot-index": "Tilladt",
        "pageinfo-robot-noindex": "Ikke tilladt",
-       "pageinfo-views": "Antal visninger",
        "pageinfo-watchers": "Antal brugere, der overvåger siden",
        "pageinfo-few-watchers": "Overvåget af færre end $1 {{PLURAL:$1|bruger|brugere}}",
        "pageinfo-redirects-name": "Antal omdirigeringer til denne side",
        "newimages-summary": "Denne specialside viser de senest oplagte filer.",
        "newimages-legend": "Filter",
        "newimages-label": "Filnavn (eller en del af det):",
+       "newimages-showbots": "Vis oplægninger af robotter",
        "noimages": "Ingen filer fundet.",
        "ilsubmit": "Søg",
        "bydate": "efter dato",
        "exif-urgency-low": "Lav ($1)",
        "exif-urgency-high": "Høj ($1)",
        "exif-urgency-other": "Bruger-defineret prioritet ($1)",
-       "watchlistall2": "alle",
        "namespacesall": "alle",
        "monthsall": "alle",
        "confirmemail": "Bekræft e-mailadresse",
        "confirm-watch-top": "Tilføj denne side til din overvågningsliste?",
        "confirm-unwatch-button": "OK",
        "confirm-unwatch-top": "Fjern denne side fra din overvågningsliste?",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← forrige side",
        "imgmultipagenext": "næste side →",
        "imgmultigo": "OK",
        "autosumm-replace": "Erstatter sidens indhold med \"$1\"",
        "autoredircomment": "Omdirigering til [[$1]] oprettet",
        "autosumm-new": "Oprettede siden med \"$1\"",
+       "autosumm-newblank": "Oprettede tom side",
        "lag-warn-normal": "Ændringer som er nyere end {{PLURAL:$1|et sekund|$1 sekunder}}, vises muligvis ikke i denne liste.",
        "lag-warn-high": "Grundet stor belastning af databaseserveren vil ændringer der er nyere end {{PLURAL:$1|et sekund|$1 sekunder}} måske ikke blive vist i denne liste.",
        "watchlistedit-normal-title": "Rediger overvågningsliste",
        "watchlistedit-raw-done": "Din overvågningsliste blev opdateret.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 side|$1 sider}} er tilføjet:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 side|$1 sider}} er fjernet:",
+       "watchlistedit-clear-title": "Ryddet overvågningsliste",
+       "watchlistedit-clear-legend": "Ryd overvågningsliste",
+       "watchlistedit-clear-explain": "Alle siderne vil blive fjernet fra din overvågningsliste",
+       "watchlistedit-clear-titles": "Sider:",
+       "watchlistedit-clear-submit": "Ryd overvågningslisten (dette er permanent!)",
+       "watchlistedit-clear-done": "Din overvågningsliste er blevet ryddet.",
        "watchlisttools-clear": "Ryd overvågningsliste",
        "watchlisttools-view": "Se ændrede sider i overvågningslisten",
        "watchlisttools-edit": "Rediger overvågningsliste",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ændrede}} gruppemedlemskabet for $3",
        "logentry-rights-autopromote": "$1 blev automatisk {{GENDER:$2|forfremmet}} fra $4 til $5",
        "rightsnone": "(-)",
+       "revdelete-summary": "redigeringsbeskrivelse",
        "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:",
index e04af3b..29a9b07 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Filzstift",
-            "Geitost",
-            "Ianusius",
-            "Kghbln",
-            "MichaelFrey",
-            "SVG",
-            "The Evil IP address",
-            "Umherirrender"
-        ]
-    },
-    "tog-hideminor": "Kleine Änderungen in den «Letzten Änderungen» ausblenden",
-    "tog-hidepatrolled": "Kontrollierte Änderungen in den «Letzten Änderungen» ausblenden",
-    "tog-newpageshidepatrolled": "Kontrollierte Seiten bei den «Neuen Seiten» ausblenden",
-    "tog-usenewrc": "Seitenbezogene Gruppierung in den «Letzten Änderungen» und auf der Beobachtungsliste",
-    "tog-minordefault": "Eigene Änderungen standardmässig als minim markieren",
-    "category_header": "Seiten in der Kategorie «$1»",
-    "category-media-header": "Medien in der Kategorie «$1»",
-    "badaccess-groups": "Diese Aktion ist auf Benutzer beschränkt, die {{PLURAL:$2|der Gruppe|einer der Gruppen}} «$1» angehören.",
-    "retrievedfrom": "Von «$1»",
-    "site-atom-feed": "Atom-Feed für «$1»",
-    "page-rss-feed": "RSS-Feed für «$1»",
-    "page-atom-feed": "Atom-Feed für «$1»",
-    "missing-article": "Der Text von «$1» $2 wurde nicht in der Datenbank gefunden.\n\nDie Seite ist möglicherweise gelöscht oder verschoben worden.\n\nFalls dies nicht  zutrifft, hast du eventuell einen Fehler in der Software gefunden. Bitte melde dies einem [[Special:ListUsers/sysop|Administrator]] unter Nennung der URL.",
-    "fileappenderrorread": "«$1» konnte während des Hinzufügens nicht gelesen werden.",
-    "fileappenderror": "Konnte «$1» nicht an «$2» anhängen.",
-    "filecopyerror": "Die Datei «$1» konnte nicht nach «$2» kopiert werden.",
-    "filerenameerror": "Die Datei «$1» konnte nicht nach «$2» umbenannt werden.",
-    "filedeleteerror": "Die Datei «$1» konnte nicht gelöscht werden.",
-    "directorycreateerror": "Das Verzeichnis «$1» konnte nicht angelegt werden.",
-    "filenotfound": "Die Datei «$1» wurde nicht gefunden.",
-    "fileexistserror": "In die Datei «$1» konnte nicht geschrieben werden, da die Datei bereits vorhanden ist.",
-    "unexpected": "Unerwarteter Wert: «$1» = «$2»",
-    "cannotdelete": "Die Seite oder Datei «$1» kann nicht gelöscht werden.\nMöglicherweise wurde sie bereits von jemand anderem gelöscht.",
-    "cannotdelete-title": "Seite «$1» kann nicht gelöscht werden",
-    "actionthrottledtext": "Im Rahmen einer Anti-Spam-Massnahme oder aufgrund eines Missbrauchsfilters kann diese Aktion in einem kurzen Zeitabstand nur begrenzt oft ausgeführt werden. Diese Grenze hast du überschritten.\nBitte versuche es in ein paar Minuten erneut.",
-    "editinginterface": "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.\nÄnderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.\nNutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
-    "titleprotected": "Eine Seite mit diesem Namen kann nicht angelegt werden.\nDie Sperre wurde durch [[User:$1|$1]] mit der Begründung ''«$2»'' eingerichtet.",
-    "filereadonlyerror": "Die Datei «$1» kann nicht verändert werden, da auf das Dateirepositorium «$2» nur Lesezugriff möglich ist.\n\nDer Administrator, der den Schreibzugriff sperrte, gab folgenden Grund an: «$3».",
-    "loginsuccess": "Du bist jetzt als «$1» bei {{SITENAME}} angemeldet.",
-    "nosuchuser": "Der Benutzername «$1» existiert nicht.\nÜberprüfe die Schreibweise (Gross-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|melde dich als neuer Benutzer an]].",
-    "nosuchusershort": "Der Benutzername «$1» ist nicht vorhanden. Bitte überprüfe die Schreibweise.",
-    "passwordremindertext": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.\n\nDas automatisch generierte Passwort für Benutzer «$2» lautet nun: $3\n\nFalls du dies wirklich gewünscht hast, solltest du dich jetzt anmelden und das Passwort ändern.\nDas neue Passwort ist {{PLURAL:$5|1 Tag|$5 Tage}} gültig.\n\nBitte ignoriere dieses E-Mail, falls du es nicht selbst angefordert hast. Das alte Passwort bleibt weiterhin gültig.",
-    "noemail": "{{GENDER:$1|Benutzer|Benutzerin|Benutzer}} «$1» hat keine E-Mail-Adresse angegeben.",
-    "passwordsent": "Ein neues, temporäres Passwort wurde an die E-Mail-Adresse von Benutzer «$1» gesandt.\nBitte melde dich damit an, sobald du es erhalten hast. Das alte Passwort bleibt weiterhin gültig.",
-    "eauthentsent": "Ein Bestätigungs-E-Mail wurde an die angegebene Adresse verschickt.\n\nBevor ein E-Mail von anderen Benutzern über die E-Mail-Funktion empfangen werden kann, muss die Adresse und ihre tatsächliche Zugehörigkeit zu diesem Benutzerkonto erst bestätigt werden. Bitte befolge die Hinweise im Bestätigungs-E-Mail.",
-    "throttled-mailpassword": "Es wurde innerhalb der letzten {{PLURAL:$1|Stunde|$1 Stunden}} bereits ein Passwortzurücksetzungs-E-Mail angefordert. Um einen Missbrauch der Funktion zu verhindern, kann nur {{PLURAL:$1|einmal pro Stunde|alle $1 Stunden}} ein Passwortzurücksetzungs-E-Mail angefordert werden.",
-    "mailerror": "Fehler beim Senden des E-Mails: $1",
-    "createaccount-text": "Es wurde für dich ein Benutzerkonto «$2» auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für «$2» ist «$3». Du solltest dich nun anmelden und das Passwort ändern.\n\nFalls das Benutzerkonto irrtümlich angelegt wurde, kannst du diese Nachricht ignorieren.",
-    "user-mail-no-addy": "Versuchte ein E-Mail ohne Angabe einer E-Mail-Adresse zu versenden",
-    "user-mail-no-body": "Es wurde versucht, ein E-Mail mit einem leeren oder zu kurzen Textkörper zu versenden.",
-    "resetpass_announce": "Anmeldung mit dem per E-Mail zugesandten Code. Um die Anmeldung abzuschliessen, musst du jetzt ein neues Passwort wählen.",
-    "passwordreset-emailsent": "Ein Passwortzurücksetzungs-E-Mail wurde versandt.",
-    "passwordreset-emailsent-capture": "Ein Passwortzurücksetzungs-E-Mail wurde versandt, das unten angezeigt wird.",
-    "passwordreset-emailerror-capture": "Die unten angezeigte Passwortzurücksetzungs-E-Mail wurde generiert, allerdings ist der Versand an {{GENDER:$2|den Benutzer|die Benutzerin}} gescheitert: $1",
-    "missingsummary": "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf «{{int:savearticle}}» klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
-    "missingcommentheader": "'''Achtung:''' Du hast kein Betreff/Überschrift eingegeben. Wenn du erneut auf «{{int:savearticle}}» klickst, wird deine Bearbeitung ohne Überschrift gespeichert.",
-    "blockedtext": "'''Dein Benutzername oder deine IP-Adresse wurde gesperrt.'''\n\nDie Sperrung wurde von $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 Sperr-ID ist $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.",
-    "confirmedittext": "Du musst deine E-Mail-Adresse erst bestätigen, bevor du Bearbeitungen durchführen kannst. Bitte ergänze und bestätige dein E-Mail in den [[Special:Preferences|Einstellungen]].",
-    "accmailtext": "Ein zufällig generiertes Passwort für [[User talk:$1|$1]] wurde an $2 versandt. Es kann auf der Seite ''[[Special:ChangePassword|Passwort ändern]]'' nach der Anmeldung geändert werden.",
-    "userpage-userdoesnotexist": "Das Benutzerkonto «<nowiki>$1</nowiki>» ist nicht vorhanden. Bitte prüfe, ob du diese Seite wirklich erstellen/bearbeiten willst.",
-    "userpage-userdoesnotexist-view": "Das Benutzerkonto «$1» ist nicht vorhanden.",
-    "clearyourcache": "'''Hinweis:''' Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.\n* '''Firefox/Safari:''' ''Umschalttaste'' drücken und gleichzeitig ''Aktualisieren'' anklicken oder entweder ''Ctrl+F5'' oder ''Ctrl+R'' (''⌘+R'' auf dem Mac) drücken\n* '''Google Chrome:''' ''Umschalttaste+Ctrl+R'' (''⌘+Umschalttaste+R'' auf dem Mac) drücken\n* '''Internet Explorer:''' ''Ctrl+F5'' drücken oder ''Ctrl'' drücken und gleichzeitig ''Aktualisieren'' anklicken\n* '''Opera:''' ''Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen''",
-    "usercssyoucanpreview": "'''Tipp:''' Benutze den «{{int:showpreview}}»-Button, um dein neues CSS vor dem Speichern zu testen.",
-    "userjsyoucanpreview": "'''Tipp:''' Benutze den «{{int:showpreview}}»-Button, um dein neues JavaScript vor dem Speichern zu testen.",
-    "userinvalidcssjstitle": "'''Achtung:''' Die Benutzeroberfläche «$1» existiert nicht. Bedenke, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also beispielsweise ''{{ns:user}}:Mustermann/vector.css'' an Stelle von ''{{ns:user}}:Mustermann/Vector.css''.",
-    "editing": "Bearbeiten von «$1»",
-    "creating": "Erstellen von «$1»",
-    "editingsection": "Bearbeiten von «$1» (Abschnitt)",
-    "editingcomment": "Bearbeiten von «$1» (Neuer Abschnitt)",
-    "explainconflict": "Jemand anders hat diese Seite geändert, nachdem du angefangen hast sie zu bearbeiten.\nDas obere Textfeld enthält den aktuellen Bearbeitungsstand der Seite.\nDas untere Textfeld enthält deine Änderungen.\nBitte füge deine Änderungen in das obere Textfeld ein.\n'''Nur''' der Inhalt des oberen Textfeldes wird gespeichert, wenn du auf «{{int:savearticle}}» klickst.",
-    "copyrightwarning": "'''Bitte kopiere keine Webseiten, die nicht deine eigenen sind, benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />\nDu gibst uns hiermit deine Zusage, dass du den Text '''selbst verfasst''' hast, dass der Text Allgemeingut '''(public domain)''' ist, oder dass der '''Urheber''' seine '''Zustimmung''' gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der Diskussionsseite darauf hin.\n<i>Bitte beachte, dass alle {{SITENAME}}-Beiträge automatisch unter der «$2» stehen (siehe $1 für Einzelheiten). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann drücke nicht auf «Seite speichern».</i>",
-    "longpageerror": "'''Fehler: Der Text, den du zu speichern versuchst, ist {{PLURAL:$1|ein Kilobyte|$1 Kilobytes}} gross. Dies ist grösser als das erlaubte Maximum von {{PLURAL:$2|ein Kilobyte|$2 Kilobytes}}.'''\nEr kann nicht gespeichert werden.",
-    "post-expand-template-inclusion-warning": "Warnung: Die Grösse eingebundener Vorlagen ist zu gross, einige Vorlagen können nicht eingebunden werden.",
-    "post-expand-template-inclusion-category": "Seiten, in denen die maximale Grösse eingebundener Vorlagen überschritten ist",
-    "post-expand-template-argument-warning": "'''Warnung:''' Diese Seite enthält mindestens einen Parameter in einer Vorlage, der expandiert zu gross ist. Diese Parameter werden ignoriert.",
-    "histlegend": "Zur Anzeige der Änderungen einfach die zu vergleichenden Versionen auswählen und die Schaltfläche «{{int:compareselectedversions}}» klicken.<br />\n* ({{int:cur}}) = Unterschied zur aktuellen Version, ({{int:last}}) = Unterschied zur vorherigen Version\n* Uhrzeit/Datum = Version zu dieser Zeit, Benutzername/IP-Adresse des Bearbeiters, {{int:minoreditletter}} = Kleine Änderung",
-    "revdelete-show-file-confirm": "Bist du sicher, dass du die gelöschte Version der Datei «<nowiki>$1</nowiki>» vom $2 um $3 Uhr ansehen willst?",
-    "revdelete-show-no-access": "Fehler beim Anzeigen des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als «eingeschränkt» markiert.\nDu hast darauf keinen Zugriff.",
-    "revdelete-modify-no-access": "Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als «eingeschränkt» markiert.\nDu hast darauf keinen Zugriff.",
-    "mergehistory-merge": "Die folgenden Versionen von «[[:$1]]» können nach «[[:$2]]» übertragen werden. Markiere die Version, bis zu der (einschliesslich) die Versionen übertragen werden sollen. Bitte beachte, dass die Nutzung der Navigationslinks die Auswahl zurücksetzt.",
-    "mergehistory-success": "{{PLURAL:$3|1 Version|$3 Versionen}} von «[[:$1]]» erfolgreich nach «[[:$2]]» vereinigt.",
-    "mergehistory-no-source": "Ursprungsseite «$1» ist nicht vorhanden.",
-    "mergehistory-no-destination": "Zielseite «$1» ist nicht vorhanden.",
-    "mergehistory-autocomment": "«[[:$1]]» vereinigt nach «[[:$2]]»",
-    "mergehistory-comment": "«[[:$1]]» vereinigt nach «[[:$2]]»: $3",
-    "history-title": "$1: Versionsgeschichte",
-    "searchresults-title": "Suchergebnisse für «$1»",
-    "toomanymatches": "Die Anzahl der Suchergebnisse ist zu gross, bitte versuche eine andere Abfrage.",
-    "searchmenu-exists": "'''Es gibt eine Seite, die den Namen «[[:$1]]» hat.'''",
-    "searchmenu-new": "'''Erstelle die Seite «[[:$1]]» in diesem Wiki.'''",
-    "search-redirect": "(Weiterleitung von «$1»)",
-    "search-suggest": "Meintest du «$1»?",
-    "prefs-watchlist-days": "Anzahl der Tage, die die Beobachtungsliste standardmässig umfassen soll:",
-    "recentchangesdays": "Anzahl der Tage, die die Liste der «Letzten Änderungen» standardmässig umfassen soll:",
-    "recentchangescount": "Anzahl der standardmässig angezeigten Bearbeitungen:",
-    "defaultns": "In diesen Namensräumen soll standardmässig gesucht werden:",
-    "prefs-help-signature": "Beiträge auf Diskussionsseiten sollten mit «<nowiki>~~~~</nowiki>» signiert werden, was dann in die Signatur mit Zeitstempel umgewandelt wird.",
-    "right-createpage": "Seiten erstellen (ausser Diskussionsseiten)",
-    "right-nominornewtalk": "Kleine Bearbeitungen an Diskussionsseiten führen zu keiner «Neue Nachrichten»-Anzeige",
-    "right-bigdelete": "Seiten mit grosser Versionsgeschichte löschen",
-    "right-override-export-depth": "Exportiere Seiten einschliesslich verlinkter Seiten bis zu einer Tiefe von 5",
-    "right-passwordreset": "Passwort eines Benutzers zurücksetzen und das dazu verschickte E-Mail einsehen",
-    "recentchanges-label-plusminus": "Die Änderung der Seitengrösse in Bytes",
-    "rc_categories": "Nur Seiten aus den Kategorien (getrennt mit «|»):",
-    "rc-old-title": "ursprünglich erstellt als «$1»",
-    "recentchangeslinked-title": "Änderungen an Seiten, die von «$1» verlinkt sind",
-    "uploadtext": "Benutze dieses Formular, um neue Dateien hochzuladen.\n\nGehe zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]].\n\nUm ein '''Bild''' in einer Seite zu verwenden, nutze einen Link in der folgenden Form:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></code>''' – für ein Vollbild\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|Alternativer Text]]</nowiki></code>''' – für ein 200px breites Bild innerhalb einer Box, mit «Alternativer Text» als Bildbeschreibung\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></code>''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei",
-    "illegalfilename": "Der Dateiname «$1» enthält mindestens ein nicht erlaubtes Zeichen. Bitte benenne die Datei um und versuche, sie erneut hochzuladen.",
-    "filename-toolong": "Dateinamen dürfen nicht grösser als 240 Byte sein.",
-    "badfilename": "Der Dateiname wurde in «$1» geändert.",
-    "filetype-mime-mismatch": "Dateierweiterung «.$1» stimmt nicht mit dem MIME-Typ ($2) überein.",
-    "filetype-badmime": "Dateien mit dem MIME-Typ «$1» dürfen nicht hochgeladen werden.",
-    "filetype-bad-ie-mime": "Diese Datei kann nicht hochgeladen werden, da der Internet Explorer sie als «$1» erkennt, welcher ein nicht erlaubter potentiell gefährlicher Dateityp ist.",
-    "filetype-unwanted-type": "'''«.$1»''' ist ein unerwünschtes Dateiformat. Erlaubt {{PLURAL:$3|ist das Dateiformat|sind die Dateiformate}}: $2.",
-    "filetype-banned-type": "'''«.$1»''' {{PLURAL:$4|ist ein nicht erlaubter Dateityp|sind nicht erlaubte Dateitypen}}.\n{{PLURAL:$3|Erlaubter Dateityp ist|Erlaubte Dateitypen sind}} $2.",
-    "filetype-missing": "Die hochzuladende Datei hat keine Erweiterung (z. B. «.jpg»).",
-    "file-too-large": "Die hochgeladene Datei war zu gross.",
-    "large-file": "Die Dateigrösse sollte nach Möglichkeit $1 nicht überschreiten. Diese Datei ist $2 gross.",
-    "largefileserver": "Die Datei ist grösser als die vom Server eingestellte Maximalgrösse.",
-    "fileexists-extension": "Eine Datei mit ähnlichem Namen existiert bereits: [[$2|thumb]]\n* Name der hochzuladenden Datei: <strong>[[:$1]]</strong>\n* Name der vorhandenen Datei: <strong>[[:$2]]</strong>\nNur die Dateiendung unterscheidet sich in Gross-/Kleinschreibung. Bitte prüfe, ob die Dateien inhaltlich identisch sind.",
-    "fileexists-thumbnail-yes": "Bei der Datei scheint es sich um ein Bild verringerter Grösse ''(thumbnail)'' zu handeln. [[$1|thumb]]\nBitte prüfe die Datei <strong>[[:$1]]</strong>.\nWenn es sich um das Bild in Originalgrösse handelt, so braucht kein separates Vorschaubild hochgeladen zu werden.",
-    "file-thumbnail-no": "Der Dateiname beginnt mit <strong>$1</strong>. Dies deutet auf ein Bild verringerter Grösse ''(thumbnail)'' hin.\nBitte prüfe, ob du das Bild in voller Auflösung vorliegen hast und lade dieses unter dem Originalnamen hoch.",
-    "uploadedimage": "lud «[[$1]]» hoch",
-    "overwroteimage": "lud eine neue Version von «[[$1]]» hoch",
-    "upload-maxfilesize": "Maximale Dateigrösse: $1",
-    "filename-bad-prefix": "Der Dateiname beginnt mit '''«$1»'''. Dies ist im allgemeinen der von einer Digitalkamera vorgegebene Dateiname und daher nicht sehr aussagekräftig.\nBitte gib der Datei einen Namen, der den Inhalt besser beschreibt.",
-    "upload-unknown-size": "Unbekannte Grösse",
-    "backend-fail-maxsize": "Die Datei $1 konnte nicht gespeichert werden, da sie grösser als {{PLURAL:$2|ein Byte|$2 Bytes}} ist.",
-    "backend-fail-readonly": "Das Speicher-Backend «$1» befindet sich derzeit im Lesemodus. Der angegebene Grund lautet: «$2»",
-    "backend-fail-synced": "Die Datei «$1» befindet sich, innerhalb des internen Speicher-Backends, in einem inkonsistenten Zustand.",
-    "backend-fail-connect": "Es konnte keine Verbindung zum Speicher-Backend «$1» hergestellt werden.",
-    "backend-fail-internal": "Im Speicher-Backend «$1» ist ein unbekannter Fehler aufgetreten.",
-    "backend-fail-contenttype": "Der Inhaltstyp, der im Pfad «$1» zu speichernden Datei, konnte nicht bestimmt werden.",
-    "backend-fail-usable": "Die Datei «$1» konnte entweder aufgrund eines nicht vorhandenen Verzeichnisses oder wegen unzureichender Berechtigungen weder abgerufen noch gespeichert werden.",
-    "filejournal-fail-dbconnect": "Es konnte keine Verbindung zur Journaldatenbank des Speicher-Backends «$1» hergestellt werden.",
-    "filejournal-fail-dbquery": "Die Journaldatenbank des Speicher-Backends «$1» konnte nicht aktualisiert werden.",
-    "lockmanager-notlocked": "«$1» konnte nicht entsperrt werden, da keine Sperrung besteht.",
-    "lockmanager-fail-closelock": "Die Sperrdatei für «$1» konnte nicht geschlossen werden.",
-    "lockmanager-fail-deletelock": "Die Sperrdatei für «$1» konnte nicht gelöscht werden.",
-    "lockmanager-fail-acquirelock": "Die Sperre für «$1» konnte nicht abgerufen werden.",
-    "lockmanager-fail-openlock": "Die Sperrdatei für «$1» konnte nicht geöffnet werden.",
-    "lockmanager-fail-releaselock": "Die Sperre für «$1» konnte nicht freigegeben werden.",
-    "zip-bad": "Die Datei ist beschädigt oder eine aus anderweitigen Gründen nicht lesbare ZIP-Datei.\nSie kann daher keiner ordnungsgemässen Sicherheitsüberprüfung unterzogen werden.",
-    "zip-unsupported": "Diese ZIP-Datei verfügt über Komprimierungseigenschaften, die nicht von MediaWiki unterstützt werden.\nSie kann daher keiner ordnungsgemässen Sicherheitsüberprüfung unterzogen werden.",
-    "img-auth-badtitle": "Aus «$1» kann kein gültiger Titel erstellt werden.",
-    "img-auth-nologinnWL": "Du bist nicht angemeldet und «$1» ist nicht in der weissen Liste.",
-    "img-auth-nofile": "Datei «$1» existiert nicht.",
-    "img-auth-isdir": "Du versuchst, auf ein Verzeichnis «$1» zuzugreifen.\nNur Dateizugriff ist erlaubt.",
-    "img-auth-streaming": "Lade «$1».",
-    "img-auth-noread": "Benutzer hat keine Berechtigung, «$1» zu lesen.",
-    "http-invalid-scheme": "URLs mit dem Schema «$1» werden nicht unterstützt",
-    "listfiles-summary": "Diese Spezialseite listet alle hochgeladenen Dateien auf.",
-    "listfiles_size": "Grösse",
-    "filehist-dimensions": "Masse",
-    "filehist-filesize": "Dateigrösse",
-    "filerevert": "Zurücksetzen von «$1»",
-    "filedelete": "Lösche «$1»",
-    "filedelete-intro": "Du löschst die Datei '''«[[Media:$1|$1]]»''' inklusive ihrer Versionsgeschichte.",
-    "filedelete-intro-old": "Du löschst von der Datei '''«[[Media:$1|$1]]»''' die [$4 Version vom $2, $3 Uhr].",
-    "filedelete-success": "'''«$1»''' wurde gelöscht.",
-    "filedelete-success-old": "Von der Datei '''«[[Media:$1|$1]]»''' wurde die Version vom $2, $3 Uhr gelöscht.",
-    "filedelete-nofile": "'''«$1»''' ist nicht vorhanden.",
-    "filedelete-nofile-old": "Es gibt von '''«$1»''' keine archivierte Version mit den angegebenen Attributen.",
-    "randompage-nopages": "Es sind keine Seiten {{PLURAL:$2|im folgenden Namensraum|in den folgenden Namensräumen}} enthalten: «$1»",
-    "randomredirect-nopages": "Im Namensraum «$1» sind keine Weiterleitungen vorhanden.",
-    "alllogstext": "Dies ist die kombinierte Anzeige aller in {{SITENAME}} geführten Logbücher.\nDie Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seitentitels eingeschränkt werden (Gross-/Kleinschreibung muss beachtet werden).",
-    "allpages-bad-ns": "Der Namensraum «$1» ist in {{SITENAME}} nicht vorhanden.",
-    "linksearch-text": "Diese Spezialseite ermöglicht die Suche nach Seiten, in denen bestimmte Weblinks enthalten sind. Dabei können Platzhalter wie beispielsweise <code>*.beispiel.ch</code> benutzt werden. Es muss mindestens eine Top-Level-Domain, z. B. «*.org». angegeben werden. <br />{{PLURAL:$2|Unterstütztes Protokoll|Unterstützte Protokolle}}: <code>$1</code> (Standard ist http, falls kein Protokoll angegeben ist.)",
-    "emailpagetext": "Du kannst {{GENDER:$1|dem Benutzer|der Benutzerin}} mit dem unten stehenden Formular ein E-Mail senden.\nAls Absender wird die E-Mail-Adresse aus deinen [[Special:Preferences|Einstellungen]] eingetragen, damit {{GENDER:$1|der Benutzer|die Benutzerin}} dir direkt antworten kann.",
-    "defemailsubject": "{{SITENAME}} - E-Mail von Benutzer «$1»",
-    "emailnotarget": "Nicht vorhandener oder ungültiger Benutzername für den Empfang eines E-Mails.",
-    "emailccme": "Sende eine Kopie des E-Mails an mich",
-    "emailsenttext": "Dein E-Mail wurde verschickt.",
-    "emailuserfooter": "Dieses E-Mail wurde von {{SITENAME}}-Benutzer «$1» an «$2» gesendet.",
-    "addedwatchtext": "Die Seite «[[:$1]]» wurde zu deiner [[Special:Watchlist|Beobachtungsliste]] hinzugefügt.\nSpätere Änderungen an dieser Seite und der zugehörigen Diskussionsseite werden dort gelistet.",
-    "removedwatchtext": "Die Seite «[[:$1]]» wurde von deiner [[Special:Watchlist|Beobachtungsliste]] entfernt.",
-    "iteminvalidname": "Problem mit dem Eintrag «$1», ungültiger Name.",
-    "watcherrortext": "Beim Ändern der Beobachtungslisteneinstellungen für «$1» ist ein Fehler aufgetreten.",
-    "excontent": "Inhalt war: «$1»",
-    "excontentauthor": "Inhalt war: «$1» (einziger Bearbeiter: [[Special:Contributions/$2|$2]])",
-    "exbeforeblank": "Inhalt vor dem Leeren der Seite: «$1»",
-    "delete-confirm": "Löschen von «$1»",
-    "deletedtext": "«$1» wurde gelöscht. Im $2 findest du eine Liste der letzten Löschungen.",
-    "editcomment": "Die Änderungszusammenfassung lautet: ''«$1»''.",
-    "protectedarticle": "schützte «[[$1]]»",
-    "modifiedarticleprotection": "änderte den Schutz von «[[$1]]»",
-    "unprotectedarticle": "hob den Schutz von «[[$1]]» auf",
-    "movedarticleprotection": "übertrug den Seitenschutz von «[[$2]]» auf «[[$1]]»",
-    "protect-title": "Schutz ändern von «$1»",
-    "protect-title-notallowed": "Schutz ansehen von «$1»",
-    "protect-text": "Hier kannst du den Schutzstatus der Seite «$1» einsehen und ändern.",
-    "protect-locked-blocked": "Du kannst den Seitenschutz nicht ändern, da dein Benutzerkonto gesperrt ist. Hier sind die aktuellen Seitenschutz-Einstellungen der Seite '''«$1»:'''",
-    "protect-locked-dblock": "Die Datenbank ist gesperrt, der Seitenschutz kann daher nicht geändert werden. Hier sind die aktuellen Seitenschutz-Einstellungen der Seite '''«$1»:'''",
-    "protect-locked-access": "Dein Benutzerkonto verfügt nicht über die notwendigen Rechte zur Änderung des Seitenschutzes. Hier sind die aktuellen Seitenschutzeinstellungen der Seite '''«$1»:'''",
-    "protect-fallback": "Nur Benutzern mit der «$1»-Berechtigung erlauben.",
-    "minimum-size": "Mindestgrösse",
-    "maximum-size": "Maximalgrösse:",
-    "undeleteextrahelp": "* Um die Seite mitsamt aller Versionen wiederherzustellen, wähle keine Version aus, gib eine Begründung an und klicke dann auf «{{int:undeletebtn}}».\n* Um lediglich bestimmte Versionen der Seite wiederherzustellen, wähle die betreffenden Versionen einzeln aus, gib eine Begründung an und klicke dann auf «{{int:undeletebtn}}».",
-    "undeletedpage": "'''«$1»''' wurde wiederhergestellt.\n\nIm [[Special:Log/delete|Lösch-Logbuch]] findest du eine Übersicht der gelöschten und wiederhergestellten Seiten.",
-    "undelete-cleanup-error": "Fehler beim Löschen der unbenutzten Archiv-Version «$1».",
-    "undelete-show-file-confirm": "Bist du sicher, dass du eine gelöschte Version der Datei «<nowiki>$1</nowiki>» vom $2, $3 Uhr sehen willst?",
-    "contributions-title": "Benutzerbeiträge von «$1»",
-    "whatlinkshere-title": "Seiten, die auf «$1» verlinken",
-    "linkshere": "Die folgenden Seiten verlinken auf '''«[[:$1]]»''':",
-    "nolinkshere": "Keine Seite verlinkt auf '''«[[:$1]]»'''.",
-    "nolinkshere-ns": "Keine Seite verlinkt auf '''«[[:$1]]»''' im gewählten Namensraum.",
-    "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-unblock-addr": "«$1» freigeben",
-    "ipb-blocklist-contribs": "Benutzerbeiträge von «$1»",
-    "autoblocker": "Automatische Sperre, da du eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzt. Grund der Benutzersperre: «$2».",
-    "blocklogentry": "sperrte «[[$1]]» für den Zeitraum: $2 $3",
-    "reblock-logentry": "änderte die Sperre von «[[$1]]» für den Zeitraum: $2 $3",
-    "unblocklogentry": "hob die Sperre von «$1» auf",
-    "ipb_already_blocked": "«$1» wurde bereits gesperrt.",
-    "ipb-needreblock": "«$1» ist bereits gesperrt. Möchtest du die Sperrparameter ändern?",
-    "ip_range_toolarge": "Adressbereiche, die grösser als /$1 sind, sind nicht erlaubt.",
-    "cant-see-hidden-user": "Der Benutzer, den du versuchst zu sperren, wurde bereits gesperrt und verborgen. Da du das «hideuser»-Recht nicht hast, kannst du die Benutzersperre nicht sehen und nicht bearbeiten.",
-    "move-page": "Verschieben von «$1»",
-    "movepage-moved": "'''Die Seite «$1» wurde nach «$2» verschoben.'''",
-    "movepage-page-exists": "Die Seite «$1» ist bereits vorhanden und kann nicht automatisch überschrieben werden.",
-    "movepage-page-moved": "Die Seite «$1» wurde nach «$2» verschoben.",
-    "movepage-page-unmoved": "Die Seite «$1» konnte nicht nach «$2» verschoben werden.",
-    "delete_and_move_text": "== Löschung erforderlich ==\n\nDie Seite «[[:$1]]» existiert bereits. Möchtest du diese löschen, um die Seite verschieben zu können?",
-    "delete_and_move_reason": "gelöscht, um Platz für die Verschiebung von «[[$1]]» zu machen",
-    "immobile-source-namespace": "Seiten des «$1»-Namensraums können nicht verschoben werden",
-    "immobile-target-namespace": "Seiten können nicht in den «$1»-Namensraum verschoben werden",
-    "thumbnail-more": "vergrössern",
-    "djvu_page_error": "DjVu-Seite ausserhalb des Seitenbereichs",
-    "import-interwiki-templates": "Alle Vorlagen einschliessen",
-    "importuploaderrorsize": "Das Hochladen der Importdatei ist fehlgeschlagen. Die Datei ist grösser als die maximal erlaubte Dateigrösse.",
-    "import-error-edit": "Die Seite «$1» wurde nicht importiert, da du nicht berechtigt bist, sie zu bearbeiten.",
-    "import-error-create": "Die Seite «$1» wurde nicht importiert, da du nicht berechtigt bist, sie zu erstellen.",
-    "import-error-interwiki": "Die Seite «$1» wurde nicht importiert, da deren Name für externe Links (Interwiki) reserviert ist.",
-    "import-error-special": "Die Seite «$1» wurde nicht importiert, da sie zu einem besonderen Namensraum gehört, in dem keine Seiten möglich sind.",
-    "import-error-invalid": "Seite «$1» wurde nicht importiert, da deren Name ungültig ist.",
-    "import-logentry-upload": "importierte «[[$1]]» von einer Datei",
-    "import-logentry-interwiki": "importierte «$1» (Transwiki)",
-    "javascripttest-pagetext-unknownframework": "Unbekanntes Framework «$1».",
-    "tooltip-t-emailuser": "Ein E-Mail an diesen Benutzer senden",
-    "pageinfo-title": "Informationen zu «$1»",
-    "markedaspatrollederror": "Markierung als «kontrolliert» nicht möglich.",
-    "filedelete-missing": "Die Datei «$1» kann nicht gelöscht werden, da sie nicht vorhanden ist.",
-    "filedelete-old-unregistered": "Die angegebene Datei-Version «$1» ist nicht in der Datenbank vorhanden.",
-    "filedelete-current-unregistered": "Die angegebene Datei «$1» ist nicht in der Datenbank vorhanden.",
-    "filedelete-archive-read-only": "Das Archiv-Verzeichnis «$1» ist für den Webserver nicht beschreibbar.",
-    "imagemaxsize": "Maximale Bildgrösse:<br />''(für Dateibeschreibungsseiten)''",
-    "thumbsize": "Standardgrösse der Vorschaubilder:",
-    "file-info": "Dateigrösse: $1, MIME-Typ: $2",
-    "file-info-size": "$1 × $2 Pixel, Dateigrösse: $3, MIME-Typ: $4",
-    "file-info-size-pages": "$1 × $2 Pixel, Dateigrösse: $3, MIME-Typ: $4, $5 {{PLURAL:$5|Seite| Seiten}}",
-    "svg-long-desc": "SVG-Datei, Basisgrösse: $1 × $2 Pixel, Dateigrösse: $3",
-    "show-big-image-preview": "Grösse dieser Vorschau: $1.",
-    "metadata-fields": "Die folgenden Felder der EXIF-Metadaten, die in diesem MediaWiki-Systemtext angegeben sind, werden auf Bildbeschreibungsseiten mit eingeklappter Metadatentabelle angezeigt.\nWeitere werden standardmässig nicht angezeigt.\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-jpeginterchangeformatlength": "Grösse der JPEG-Daten in Bytes",
-    "exif-referenceblackwhite": "Schwarz/Weiss-Referenzpunkte",
-    "exif-maxaperturevalue": "Grösste Blende",
-    "exif-whitebalance": "Weissabgleich",
-    "exif-gpsdop": "Masspräzision",
-    "exif-lightsource-13": "Tagesweiss fluoreszierend (N 4600–5400 K)",
-    "exif-lightsource-14": "Kaltweiss fluoreszierend (W 3900–4500 K)",
-    "exif-lightsource-15": "Weiss fluoreszierend (WW 3200–3700 K)",
-    "exif-isospeedratings-overflow": "Grösser als 65535",
-    "confirmemail_text": "{{SITENAME}} erfordert, dass du deine E-Mail-Adresse bestätigst (authentifizierst), bevor du die erweiterten E-Mail-Funktionen benutzen kannst. Klicke bitte auf die unten stehende, mit «Bestätigungscode zuschicken» beschriftete Schaltfläche, damit ein automatisch erstelltes E-Mail an die angegebene Adresse geschickt wird. Dieses E-Mail enthält eine Web-Adresse mit einem Bestätigungscode. Indem du diese Webseite in deinem Webbrowser öffnest, bestätigst du, dass die angegebene E-Mail-Adresse korrekt und gültig ist.",
-    "confirmemail_pending": "Es wurde dir bereits ein Bestätigungscode per E-Mail zugeschickt.\nWenn du dein Benutzerkonto erst vor kurzem erstellt hast, warte bitte noch ein paar Minuten auf das E-Mail, bevor du einen neuen Code anforderst.",
-    "confirmemail_sent": "Das Bestätigungs-E-Mail wurde verschickt.",
-    "confirmemail_sendfailed": "{{SITENAME}} konnte das Bestätigungs-E-Mail nicht an dich versenden.\nBitte prüfe die E-Mail-Adresse auf ungültige Zeichen.\n\nRückmeldung des Mailservers: $1",
-    "confirmemail_body": "Hallo,\n\njemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat das Benutzerkonto «$2» bei {{SITENAME}} registriert.\n\nUm die E-Mail-Funktionen von {{SITENAME}} (wieder) zu aktivieren und um zu bestätigen,\ndass dieses Benutzerkonto wirklich zu deiner E-Mail-Adresse und damit zu dir gehört, öffne bitte folgenden Link in deinem Browser:\n\n$3\n\nWenn du das genannte Benutzerkonto *nicht* registriert hast, folge diesem Link, um den Bestätigungsprozess abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis zum $6, $7 Uhr.",
-    "confirmemail_body_changed": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,\nhat die E-Mail-Adresse des Benutzerkontos «$2» zu dieser Adresse bei {{SITENAME}} geändert.\n\nUm zu bestätigen, dass dieses Benutzerkonto wirklich dir gehört,\nund um die E-Mail-Features bei {{SITENAME}} zu reaktivieren, öffne diesen Link in deinem Browser:\n\n$3\n\nFalls das Konto *nicht* dir gehört, folge diesem Link,\num die E-Mail-Bestätigung abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis $4.",
-    "confirmemail_body_set": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,\nhat die E-Mail-Adresse des Benutzerkontos «$2» auf {{SITENAME}} zu dieser E-Mail-Adresse abgeändert.\n\nUm zu bestätigen, dass dieses Benutzerkonto wirklich zu dir gehört\nund um die E-Mail-Funktionen auf {{SITENAME}} wieder zu aktivieren, öffne bitte den folgenden Link in deinem Browser:\n\n$3\n\nFalls das Konto *nicht* zu dir gehört, bitte den nachfolgenden Link öffnen,\num die Bestätigung der E-Mail-Adresse abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis $4.",
-    "autosumm-replace": "Der Seiteninhalt wurde durch einen anderen Text ersetzt: «$1»",
-    "autosumm-new": "Die Seite wurde neu angelegt: «$1»",
-    "livepreview-error": "Verbindung nicht möglich: $1 «$2». Bitte die normale Vorschau benutzen.",
-    "watchlistedit-normal-explain": "Dies sind die Einträge deiner Beobachtungsliste. Um Einträge zu entfernen, markiere die Kästchen neben den Einträgen und klicke am Ende der Seite auf «{{int:Watchlistedit-normal-submit}}». Du kannst deine Beobachtungsliste auch im [[Special:EditWatchlist/raw|Listenformat bearbeiten]].",
-    "watchlistedit-raw-explain": "Dies sind die Einträge deiner Beobachtungsliste im Listenformat. Die Einträge können zeilenweise gelöscht oder hinzugefügt werden.\nPro Zeile ist ein Eintrag erlaubt. Sobald du fertig bist, klicke auf «{{int:Watchlistedit-raw-submit}}».\nDu kannst auch die [[Special:EditWatchlist|Standardseite]] zum Bearbeiten benutzen.",
-    "unknown_extension_tag": "Unbekanntes Parsertag «$1»",
-    "duplicate-defaultsort": "Achtung: Der Sortierungsschlüssel «$2» überschreibt den vorher verwendeten Schlüssel «$1».",
-    "version-license-info": "MediaWiki ist freie Software, d. h. sie kann, gemäss den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.\n\nMediaWiki 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 [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License''] 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 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html online gelesen] werden.",
-    "fileduplicatesearch-info": "$1 × $2 Pixel<br />Dateigrösse: $3<br />MIME-Typ: $4",
-    "fileduplicatesearch-result-1": "Die Datei «$1» hat keine identischen Duplikate.",
-    "fileduplicatesearch-result-n": "Die Datei «$1» hat {{PLURAL:$2|ein identisches Duplikat|$2 identische Duplikate}}.",
-    "fileduplicatesearch-noresults": "Es wurde keine Datei namens «$1» gefunden.",
-    "external_image_whitelist": " #Diese Zeile nicht verändern.<pre>\n#Untenstehend können Fragmente regulärer Ausdrücke (der Teil zwischen den //) eingegeben werden.\n#Diese werden mit den URLs von Bildern aus externen Quellen verglichen.\n#Ein positiver Vergleich führt zur Anzeige des Bildes, andernfalls wird das Bild nur als Link angezeigt.\n#Zeilen, die mit einem # beginnen, werden als Kommentar behandelt.\n#Es wird nicht zwischen Gross- und Kleinschreibung unterschieden.\n\n#Fragmente regulärer Ausdrücke nach dieser Zeile eintragen. Diese Zeile nicht verändern.</pre>",
-    "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-thanks": "Vielen Dank. Deine Rückmeldung wurde auf der Seite «[$2 $1]» gespeichert.",
-    "api-error-file-too-large": "Die hochgeladene Datei war zu gross.",
-    "api-error-hookaborted": "Die von dir vorgesehene Anpassung kann nicht durchgeführt werden (Unterbruch durch eine Programmschnittstelle).",
-    "api-error-unknown-code": "Unbekannter Fehler: «$1»",
-    "api-error-unknown-warning": "Unbekannte Warnung: «$1»",
-    "api-error-unknownerror": "Unbekannter Fehler: «$1»"
+       "@metadata": {
+               "authors": [
+                       "Filzstift",
+                       "Geitost",
+                       "Ianusius",
+                       "Kghbln",
+                       "MichaelFrey",
+                       "SVG",
+                       "The Evil IP address",
+                       "Umherirrender",
+                       "Das Schäfchen"
+               ]
+       },
+       "tog-hideminor": "Kleine Änderungen in den «Letzten Änderungen» ausblenden",
+       "tog-hidepatrolled": "Kontrollierte Änderungen in den «Letzten Änderungen» ausblenden",
+       "tog-newpageshidepatrolled": "Kontrollierte Seiten bei den «Neuen Seiten» ausblenden",
+       "tog-usenewrc": "Seitenbezogene Gruppierung in den «Letzten Änderungen» und auf der Beobachtungsliste",
+       "tog-minordefault": "Eigene Änderungen standardmässig als minim markieren",
+       "category_header": "Seiten in der Kategorie «$1»",
+       "category-media-header": "Medien in der Kategorie «$1»",
+       "badaccess-groups": "Diese Aktion ist auf Benutzer beschränkt, die {{PLURAL:$2|der Gruppe|einer der Gruppen}} «$1» angehören.",
+       "retrievedfrom": "Von «$1»",
+       "site-atom-feed": "Atom-Feed für «$1»",
+       "page-rss-feed": "RSS-Feed für «$1»",
+       "page-atom-feed": "Atom-Feed für «$1»",
+       "missing-article": "Der Text von «$1» $2 wurde nicht in der Datenbank gefunden.\n\nDie Seite ist möglicherweise gelöscht oder verschoben worden.\n\nFalls dies nicht  zutrifft, hast du eventuell einen Fehler in der Software gefunden. Bitte melde dies einem [[Special:ListUsers/sysop|Administrator]] unter Nennung der URL.",
+       "filecopyerror": "Die Datei «$1» konnte nicht nach «$2» kopiert werden.",
+       "filerenameerror": "Die Datei «$1» konnte nicht nach «$2» umbenannt werden.",
+       "filedeleteerror": "Die Datei «$1» konnte nicht gelöscht werden.",
+       "directorycreateerror": "Das Verzeichnis «$1» konnte nicht angelegt werden.",
+       "filenotfound": "Die Datei «$1» wurde nicht gefunden.",
+       "unexpected": "Unerwarteter Wert: «$1» = «$2»",
+       "cannotdelete": "Die Seite oder Datei «$1» kann nicht gelöscht werden.\nMöglicherweise wurde sie bereits von jemand anderem gelöscht.",
+       "cannotdelete-title": "Seite «$1» kann nicht gelöscht werden",
+       "actionthrottledtext": "Im Rahmen einer Anti-Spam-Massnahme oder aufgrund eines Missbrauchsfilters kann diese Aktion in einem kurzen Zeitabstand nur begrenzt oft ausgeführt werden. Diese Grenze hast du überschritten.\nBitte versuche es in ein paar Minuten erneut.",
+       "editinginterface": "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.\nÄnderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.\nNutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
+       "titleprotected": "Eine Seite mit diesem Namen kann nicht angelegt werden.\nDie Sperre wurde durch [[User:$1|$1]] mit der Begründung ''«$2»'' eingerichtet.",
+       "filereadonlyerror": "Die Datei «$1» kann nicht verändert werden, da auf das Dateirepositorium «$2» nur Lesezugriff möglich ist.\n\nDer Administrator, der den Schreibzugriff sperrte, gab folgenden Grund an: «$3».",
+       "createacct-realname": "Richtiger Name (optional)",
+       "loginsuccess": "Du bist jetzt als «$1» bei {{SITENAME}} angemeldet.",
+       "nosuchuser": "Der Benutzername «$1» existiert nicht.\nÜberprüfe die Schreibweise (Gross-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|melde dich als neuer Benutzer an]].",
+       "nosuchusershort": "Der Benutzername «$1» ist nicht vorhanden. Bitte überprüfe die Schreibweise.",
+       "passwordremindertext": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.\n\nDas automatisch generierte Passwort für Benutzer «$2» lautet nun: $3\n\nFalls du dies wirklich gewünscht hast, solltest du dich jetzt anmelden und das Passwort ändern.\nDas neue Passwort ist {{PLURAL:$5|1 Tag|$5 Tage}} gültig.\n\nBitte ignoriere dieses E-Mail, falls du es nicht selbst angefordert hast. Das alte Passwort bleibt weiterhin gültig.",
+       "noemail": "{{GENDER:$1|Benutzer|Benutzerin|Benutzer}} «$1» hat keine E-Mail-Adresse angegeben.",
+       "passwordsent": "Ein neues, temporäres Passwort wurde an die E-Mail-Adresse von Benutzer «$1» gesandt.\nBitte melde dich damit an, sobald du es erhalten hast. Das alte Passwort bleibt weiterhin gültig.",
+       "eauthentsent": "Ein Bestätigungs-E-Mail wurde an die angegebene Adresse verschickt.\n\nBevor ein E-Mail von anderen Benutzern über die E-Mail-Funktion empfangen werden kann, muss die Adresse und ihre tatsächliche Zugehörigkeit zu diesem Benutzerkonto erst bestätigt werden. Bitte befolge die Hinweise im Bestätigungs-E-Mail.",
+       "throttled-mailpassword": "Es wurde innerhalb der letzten {{PLURAL:$1|Stunde|$1 Stunden}} bereits ein Passwortzurücksetzungs-E-Mail angefordert. Um einen Missbrauch der Funktion zu verhindern, kann nur {{PLURAL:$1|einmal pro Stunde|alle $1 Stunden}} ein Passwortzurücksetzungs-E-Mail angefordert werden.",
+       "mailerror": "Fehler beim Senden des E-Mails: $1",
+       "createaccount-text": "Es wurde für dich ein Benutzerkonto «$2» auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für «$2» ist «$3». Du solltest dich nun anmelden und das Passwort ändern.\n\nFalls das Benutzerkonto irrtümlich angelegt wurde, kannst du diese Nachricht ignorieren.",
+       "createacct-another-realname-tip": "Der richtige Name ist optional.\nWenn du ihn angibst, wird er für die Zuordnung der Beiträge verwendet.",
+       "user-mail-no-addy": "Versuchte, ein E-Mail ohne Angabe einer E-Mail-Adresse zu versenden",
+       "user-mail-no-body": "Es wurde versucht, ein E-Mail mit einem leeren oder zu kurzen Textkörper zu versenden.",
+       "resetpass_announce": "Um die Anmeldung abzuschliessen, musst du ein neues Passwort festlegen.",
+       "passwordreset-emailsent": "Ein Passwortzurücksetzungs-E-Mail wurde versandt.",
+       "passwordreset-emailsent-capture": "Ein Passwortzurücksetzungs-E-Mail wurde versandt, das unten angezeigt wird.",
+       "passwordreset-emailerror-capture": "Die unten angezeigte Passwortzurücksetzungs-E-Mail wurde generiert, allerdings ist der Versand an {{GENDER:$2|den Benutzer|die Benutzerin}} gescheitert: $1",
+       "missingsummary": "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf «{{int:savearticle}}» klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
+       "missingcommentheader": "'''Achtung:''' Du hast kein Betreff/Überschrift eingegeben. Wenn du erneut auf «{{int:savearticle}}» klickst, wird deine Bearbeitung ohne Überschrift gespeichert.",
+       "blockedtext": "'''Dein Benutzername oder deine IP-Adresse wurde gesperrt.'''\n\nDie Sperrung wurde von $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 Sperr-ID ist $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.",
+       "confirmedittext": "Du musst deine E-Mail-Adresse erst bestätigen, bevor du Bearbeitungen durchführen kannst. Bitte ergänze und bestätige dein E-Mail in den [[Special:Preferences|Einstellungen]].",
+       "accmailtext": "Ein zufällig generiertes Passwort für [[User talk:$1|$1]] wurde an $2 versandt. Es kann auf der Seite ''[[Special:ChangePassword|Passwort ändern]]'' nach der Anmeldung geändert werden.",
+       "userpage-userdoesnotexist": "Das Benutzerkonto «<nowiki>$1</nowiki>» ist nicht vorhanden. Bitte prüfe, ob du diese Seite wirklich erstellen/bearbeiten willst.",
+       "userpage-userdoesnotexist-view": "Das Benutzerkonto «$1» ist nicht vorhanden.",
+       "clearyourcache": "'''Hinweis:''' Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.\n* '''Firefox/Safari:''' ''Umschalttaste'' drücken und gleichzeitig ''Aktualisieren'' anklicken oder entweder ''Ctrl+F5'' oder ''Ctrl+R'' (''⌘+R'' auf dem Mac) drücken\n* '''Google Chrome:''' ''Umschalttaste+Ctrl+R'' (''⌘+Umschalttaste+R'' auf dem Mac) drücken\n* '''Internet Explorer:''' ''Ctrl+F5'' drücken oder ''Ctrl'' drücken und gleichzeitig ''Aktualisieren'' anklicken\n* '''Opera:''' ''Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen''",
+       "usercssyoucanpreview": "'''Tipp:''' Benutze den «{{int:showpreview}}»-Button, um dein neues CSS vor dem Speichern zu testen.",
+       "userjsyoucanpreview": "'''Tipp:''' Benutze den «{{int:showpreview}}»-Button, um dein neues JavaScript vor dem Speichern zu testen.",
+       "userinvalidcssjstitle": "'''Achtung:''' Die Benutzeroberfläche «$1» existiert nicht. Bedenke, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also beispielsweise ''{{ns:user}}:Mustermann/vector.css'' an Stelle von ''{{ns:user}}:Mustermann/Vector.css''.",
+       "editing": "Bearbeiten von «$1»",
+       "creating": "Erstellen von «$1»",
+       "editingsection": "Bearbeiten von «$1» (Abschnitt)",
+       "editingcomment": "Bearbeiten von «$1» (Neuer Abschnitt)",
+       "explainconflict": "Jemand anders hat diese Seite geändert, nachdem du angefangen hast, sie zu bearbeiten.\nDas obere Textfeld enthält den aktuellen Bearbeitungsstand der Seite.\nDas untere Textfeld enthält deine Änderungen.\nBitte füge deine Änderungen in das obere Textfeld ein.\n'''Nur''' der Inhalt des oberen Textfeldes wird gespeichert, wenn du auf «{{int:savearticle}}» klickst.",
+       "copyrightwarning": "'''Bitte kopiere keine Webseiten, die nicht deine eigenen sind, benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />\nDu gibst uns hiermit deine Zusage, dass du den Text '''selbst verfasst''' hast, dass der Text Allgemeingut '''(public domain)''' ist, oder dass der '''Urheber''' seine '''Zustimmung''' gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der Diskussionsseite darauf hin.\n<i>Bitte beachte, dass alle {{SITENAME}}-Beiträge automatisch unter der «$2» stehen (siehe $1 für Einzelheiten). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann drücke nicht auf «Seite speichern».</i>",
+       "longpageerror": "'''Fehler: Der Text, den du zu speichern versuchst, ist {{PLURAL:$1|ein Kilobyte|$1 Kilobytes}} gross. Dies ist grösser als das erlaubte Maximum von {{PLURAL:$2|ein Kilobyte|$2 Kilobytes}}.'''\nEr kann nicht gespeichert werden.",
+       "post-expand-template-inclusion-warning": "Warnung: Die Grösse eingebundener Vorlagen ist zu gross, einige Vorlagen können nicht eingebunden werden.",
+       "post-expand-template-inclusion-category": "Seiten, in denen die maximale Grösse eingebundener Vorlagen überschritten ist",
+       "post-expand-template-argument-warning": "'''Warnung:''' Diese Seite enthält mindestens einen Parameter in einer Vorlage, der expandiert zu gross ist. Diese Parameter werden ignoriert.",
+       "histlegend": "Zur Anzeige der Änderungen einfach die zu vergleichenden Versionen auswählen und die Schaltfläche «{{int:compareselectedversions}}» klicken.<br />\n* ({{int:cur}}) = Unterschied zur aktuellen Version, ({{int:last}}) = Unterschied zur vorherigen Version\n* Uhrzeit/Datum = Version zu dieser Zeit, Benutzername/IP-Adresse des Bearbeiters, {{int:minoreditletter}} = Kleine Änderung",
+       "revdelete-show-file-confirm": "Bist du sicher, dass du die gelöschte Version der Datei «<nowiki>$1</nowiki>» vom $2 um $3 Uhr ansehen willst?",
+       "revdelete-show-no-access": "Fehler beim Anzeigen des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als «eingeschränkt» markiert.\nDu hast darauf keinen Zugriff.",
+       "revdelete-modify-no-access": "Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als «eingeschränkt» markiert.\nDu hast darauf keinen Zugriff.",
+       "mergehistory-merge": "Die folgenden Versionen von «[[:$1]]» können nach «[[:$2]]» übertragen werden. Markiere die Version, bis zu der (einschliesslich) die Versionen übertragen werden sollen. Bitte beachte, dass die Nutzung der Navigationslinks die Auswahl zurücksetzt.",
+       "mergehistory-success": "{{PLURAL:$3|1 Version|$3 Versionen}} von «[[:$1]]» erfolgreich nach «[[:$2]]» vereinigt.",
+       "mergehistory-no-source": "Ursprungsseite «$1» ist nicht vorhanden.",
+       "mergehistory-no-destination": "Zielseite «$1» ist nicht vorhanden.",
+       "mergehistory-autocomment": "«[[:$1]]» vereinigt nach «[[:$2]]»",
+       "mergehistory-comment": "«[[:$1]]» vereinigt nach «[[:$2]]»: $3",
+       "history-title": "$1: Versionsgeschichte",
+       "searchresults-title": "Suchergebnisse für «$1»",
+       "searchmenu-exists": "'''Es gibt eine Seite, die den Namen «[[:$1]]» hat.'''",
+       "searchmenu-new": "<strong>Erstelle die Seite «[[:$1]]» in diesem Wiki.</strong> {{PLURAL:$2|0=|Siehe auch die über deine Suche gefundene Seite.|Siehe auch die gefundenen Suchergebnisse.}}",
+       "search-redirect": "(Weiterleitung von «$1»)",
+       "search-suggest": "Meintest du «$1»?",
+       "prefs-watchlist-days": "Anzahl der Tage, die die Beobachtungsliste standardmässig umfassen soll:",
+       "prefs-watchlist-edits-max": "Maximal 1'000 Einträge",
+       "recentchangesdays": "Anzahl der Tage, die die Liste der «Letzten Änderungen» standardmässig umfassen soll:",
+       "recentchangescount": "Anzahl der standardmässig angezeigten Bearbeitungen:",
+       "yourrealname": "Richtiger Name:",
+       "prefs-help-signature": "Beiträge auf Diskussionsseiten sollten mit «<nowiki>~~~~</nowiki>» signiert werden, was dann in die Signatur mit Zeitstempel umgewandelt wird.",
+       "prefs-help-realname": "Dies ist eine freiwillige Angabe. Damit kann dein richtiger Name deinen Beiträgen zugeordnet werden.",
+       "right-createpage": "Seiten erstellen (ausser Diskussionsseiten)",
+       "right-nominornewtalk": "Kleine Bearbeitungen an Diskussionsseiten führen zu keiner «Neue Nachrichten»-Anzeige",
+       "right-bigdelete": "Seiten mit grosser Versionsgeschichte löschen",
+       "right-viewmyprivateinfo": "Eigene private Daten ansehen (beispielsweise E-Mail-Adresse, richtiger Name)",
+       "right-editmyprivateinfo": "Eigene private Daten bearbeiten (beispielsweise E-Mail-Adresse, richtiger Name)",
+       "right-override-export-depth": "Exportiere Seiten einschliesslich verlinkter Seiten bis zu einer Tiefe von 5",
+       "right-passwordreset": "Passwort eines Benutzers zurücksetzen und das dazu verschickte E-Mail einsehen",
+       "recentchanges-label-plusminus": "Die Änderung der Seitengrösse in Bytes",
+       "rc_categories": "Nur Seiten aus den Kategorien (getrennt mit «|»):",
+       "rc-old-title": "ursprünglich erstellt als «$1»",
+       "recentchangeslinked-title": "Änderungen an Seiten, die von «$1» verlinkt sind",
+       "uploadtext": "Benutze dieses Formular, um neue Dateien hochzuladen.\n\nGehe zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]].\n\nUm ein '''Bild''' in einer Seite zu verwenden, nutze einen Link in der folgenden Form:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></code>''' – für ein Vollbild\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|Alternativer Text]]</nowiki></code>''' – für ein 200px breites Bild innerhalb einer Box, mit «Alternativer Text» als Bildbeschreibung\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></code>''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei",
+       "illegalfilename": "Der Dateiname «$1» enthält mindestens ein nicht erlaubtes Zeichen. Bitte benenne die Datei um und versuche, sie erneut hochzuladen.",
+       "filename-toolong": "Dateinamen dürfen nicht grösser als 240 Byte sein.",
+       "badfilename": "Der Dateiname wurde in «$1» geändert.",
+       "filetype-mime-mismatch": "Dateierweiterung «.$1» stimmt nicht mit dem MIME-Typ ($2) überein.",
+       "filetype-badmime": "Dateien mit dem MIME-Typ «$1» dürfen nicht hochgeladen werden.",
+       "filetype-bad-ie-mime": "Diese Datei kann nicht hochgeladen werden, da der Internet Explorer sie als «$1» erkennt, welcher ein nicht erlaubter potentiell gefährlicher Dateityp ist.",
+       "filetype-unwanted-type": "'''«.$1»''' ist ein unerwünschtes Dateiformat. Erlaubt {{PLURAL:$3|ist das Dateiformat|sind die Dateiformate}}: $2.",
+       "filetype-banned-type": "'''«.$1»''' {{PLURAL:$4|ist ein nicht erlaubter Dateityp|sind nicht erlaubte Dateitypen}}.\n{{PLURAL:$3|Erlaubter Dateityp ist|Erlaubte Dateitypen sind}} $2.",
+       "filetype-missing": "Die hochzuladende Datei hat keine Erweiterung (z. B. «.jpg»).",
+       "file-too-large": "Die hochgeladene Datei war zu gross.",
+       "large-file": "Die Dateigrösse sollte nach Möglichkeit $1 nicht überschreiten. Diese Datei ist $2 gross.",
+       "largefileserver": "Die Datei ist grösser als die vom Server eingestellte Maximalgrösse.",
+       "fileexists-extension": "Eine Datei mit ähnlichem Namen existiert bereits: [[$2|thumb]]\n* Name der hochzuladenden Datei: <strong>[[:$1]]</strong>\n* Name der vorhandenen Datei: <strong>[[:$2]]</strong>\nNur die Dateiendung unterscheidet sich in Gross-/Kleinschreibung. Bitte prüfe, ob die Dateien inhaltlich identisch sind.",
+       "fileexists-thumbnail-yes": "Bei der Datei scheint es sich um ein Bild verringerter Grösse ''(thumbnail)'' zu handeln. [[$1|thumb]]\nBitte prüfe die Datei <strong>[[:$1]]</strong>.\nWenn es sich um das Bild in Originalgrösse handelt, so braucht kein separates Vorschaubild hochgeladen zu werden.",
+       "file-thumbnail-no": "Der Dateiname beginnt mit <strong>$1</strong>. Dies deutet auf ein Bild verringerter Grösse ''(thumbnail)'' hin.\nBitte prüfe, ob du das Bild in voller Auflösung vorliegen hast und lade dieses unter dem Originalnamen hoch.",
+       "upload-maxfilesize": "Maximale Dateigrösse: $1",
+       "filename-bad-prefix": "Der Dateiname beginnt mit '''«$1»'''. Dies ist im allgemeinen der von einer Digitalkamera vorgegebene Dateiname und daher nicht sehr aussagekräftig.\nBitte gib der Datei einen Namen, der den Inhalt besser beschreibt.",
+       "backend-fail-maxsize": "Die Datei $1 konnte nicht gespeichert werden, da sie grösser als {{PLURAL:$2|ein Byte|$2 Bytes}} ist.",
+       "backend-fail-readonly": "Das Speicher-Backend «$1» befindet sich derzeit im Lesemodus. Der angegebene Grund lautet: «$2»",
+       "backend-fail-synced": "Die Datei «$1» befindet sich, innerhalb des internen Speicher-Backends, in einem inkonsistenten Zustand.",
+       "backend-fail-connect": "Es konnte keine Verbindung zum Speicher-Backend «$1» hergestellt werden.",
+       "backend-fail-internal": "Im Speicher-Backend «$1» ist ein unbekannter Fehler aufgetreten.",
+       "backend-fail-contenttype": "Der Inhaltstyp, der im Pfad «$1» zu speichernden Datei, konnte nicht bestimmt werden.",
+       "backend-fail-usable": "Die Datei «$1» konnte entweder aufgrund eines nicht vorhandenen Verzeichnisses oder wegen unzureichender Berechtigungen weder abgerufen noch gespeichert werden.",
+       "filejournal-fail-dbconnect": "Es konnte keine Verbindung zur Journaldatenbank des Speicher-Backends «$1» hergestellt werden.",
+       "filejournal-fail-dbquery": "Die Journaldatenbank des Speicher-Backends «$1» konnte nicht aktualisiert werden.",
+       "lockmanager-notlocked": "«$1» konnte nicht entsperrt werden, da keine Sperrung besteht.",
+       "lockmanager-fail-closelock": "Die Sperrdatei für «$1» konnte nicht geschlossen werden.",
+       "lockmanager-fail-deletelock": "Die Sperrdatei für «$1» konnte nicht gelöscht werden.",
+       "lockmanager-fail-acquirelock": "Die Sperre für «$1» konnte nicht abgerufen werden.",
+       "lockmanager-fail-openlock": "Die Sperrdatei für «$1» konnte nicht geöffnet werden.",
+       "lockmanager-fail-releaselock": "Die Sperre für «$1» konnte nicht freigegeben werden.",
+       "zip-bad": "Die Datei ist beschädigt oder eine aus anderweitigen Gründen nicht lesbare ZIP-Datei.\nSie kann daher keiner ordnungsgemässen Sicherheitsüberprüfung unterzogen werden.",
+       "zip-unsupported": "Diese ZIP-Datei verfügt über Komprimierungseigenschaften, die nicht von MediaWiki unterstützt werden.\nSie kann daher keiner ordnungsgemässen Sicherheitsüberprüfung unterzogen werden.",
+       "img-auth-badtitle": "Aus «$1» kann kein gültiger Titel erstellt werden.",
+       "img-auth-nologinnWL": "Du bist nicht angemeldet und «$1» ist nicht in der weissen Liste.",
+       "img-auth-nofile": "Datei «$1» existiert nicht.",
+       "img-auth-isdir": "Du versuchst, auf ein Verzeichnis «$1» zuzugreifen.\nNur Dateizugriff ist erlaubt.",
+       "img-auth-streaming": "Lade «$1».",
+       "img-auth-noread": "Benutzer hat keine Berechtigung, «$1» zu lesen.",
+       "http-invalid-scheme": "URLs mit dem Schema «$1» werden nicht unterstützt",
+       "listfiles-summary": "Diese Spezialseite listet alle hochgeladenen Dateien auf.",
+       "listfiles_size": "Grösse",
+       "filehist-dimensions": "Masse",
+       "filehist-filesize": "Dateigrösse",
+       "filerevert": "Zurücksetzen von «$1»",
+       "filedelete": "Lösche «$1»",
+       "filedelete-intro": "Du löschst die Datei '''«[[Media:$1|$1]]»''' inklusive ihrer Versionsgeschichte.",
+       "filedelete-intro-old": "Du löschst von der Datei '''«[[Media:$1|$1]]»''' die [$4 Version vom $2, $3 Uhr].",
+       "filedelete-success": "'''«$1»''' wurde gelöscht.",
+       "filedelete-success-old": "Von der Datei '''«[[Media:$1|$1]]»''' wurde die Version vom $2, $3 Uhr gelöscht.",
+       "filedelete-nofile": "'''«$1»''' ist nicht vorhanden.",
+       "filedelete-nofile-old": "Es gibt von '''«$1»''' keine archivierte Version mit den angegebenen Attributen.",
+       "randompage-nopages": "Es sind keine Seiten {{PLURAL:$2|im folgenden Namensraum|in den folgenden Namensräumen}} enthalten: «$1»",
+       "randomredirect-nopages": "Im Namensraum «$1» sind keine Weiterleitungen vorhanden.",
+       "alllogstext": "Dies ist die kombinierte Anzeige aller in {{SITENAME}} geführten Logbücher.\nDie Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seitentitels eingeschränkt werden (Gross-/Kleinschreibung muss beachtet werden).",
+       "allpages-bad-ns": "Der Namensraum «$1» ist in {{SITENAME}} nicht vorhanden.",
+       "linksearch-text": "Diese Spezialseite ermöglicht die Suche nach Seiten, in denen bestimmte Weblinks enthalten sind. Dabei können Platzhalter wie beispielsweise <code>*.beispiel.ch</code> benutzt werden. Es muss mindestens eine Top-Level-Domain, z. B. «*.org». angegeben werden. <br />{{PLURAL:$2|Unterstütztes Protokoll|Unterstützte Protokolle}}: <code>$1</code> (Standard ist http, falls kein Protokoll angegeben ist.)",
+       "post-expand-template-inclusion-category-desc": "Nach dem Expandieren aller Vorlagen ist die Seitengrösse grösser als <code>$wgMaxArticleSize</code>, sodass einige Vorlagen nicht expandiert werden.",
+       "post-expand-template-argument-category-desc": "Nach dem Expandieren eines Vorlagenargumentes (etwas in dreifach geschweiften Klammern, z.&nbsp;B. <code>{{{Foo}}})</code> ist die Seite grösser als <code>$wgMaxArticleSize</code>.",
+       "hidden-category-category-desc": "Dies ist eine Kategorie mit <code><nowiki>__HIDDENCAT__</nowiki></code>, die standardmässig nicht auf Seiten im Kategorienbereich angezeigt wird.",
+       "emailpagetext": "Du kannst {{GENDER:$1|dem Benutzer|der Benutzerin}} mit dem unten stehenden Formular ein E-Mail senden.\nAls Absender wird die E-Mail-Adresse aus deinen [[Special:Preferences|Einstellungen]] eingetragen, damit {{GENDER:$1|der Benutzer|die Benutzerin}} dir direkt antworten kann.",
+       "defemailsubject": "{{SITENAME}} - E-Mail von Benutzer «$1»",
+       "emailnotarget": "Nicht vorhandener oder ungültiger Benutzername für den Empfang eines E-Mails.",
+       "emailccme": "Sende eine Kopie des E-Mails an mich",
+       "emailsenttext": "Dein E-Mail wurde verschickt.",
+       "emailuserfooter": "Dieses E-Mail wurde von {{SITENAME}}-Benutzer «$1» an «$2» gesendet.",
+       "addedwatchtext": "Die Seite «[[:$1]]» wurde zu deiner [[Special:Watchlist|Beobachtungsliste]] hinzugefügt.\nSpätere Änderungen an dieser Seite und der zugehörigen Diskussionsseite werden dort gelistet.",
+       "removedwatchtext": "Die Seite «[[:$1]]» wurde von deiner [[Special:Watchlist|Beobachtungsliste]] entfernt.",
+       "watcherrortext": "Beim Ändern der Beobachtungslisteneinstellungen für «$1» ist ein Fehler aufgetreten.",
+       "excontent": "Inhalt war: «$1»",
+       "excontentauthor": "Inhalt war: «$1» (einziger Bearbeiter: [[Special:Contributions/$2|$2]])",
+       "exbeforeblank": "Inhalt vor dem Leeren der Seite: «$1»",
+       "delete-confirm": "Löschen von «$1»",
+       "deletedtext": "«$1» wurde gelöscht. Im $2 findest du eine Liste der letzten Löschungen.",
+       "editcomment": "Die Änderungszusammenfassung lautet: ''«$1»''.",
+       "protectedarticle": "schützte «[[$1]]»",
+       "modifiedarticleprotection": "änderte den Schutz von «[[$1]]»",
+       "unprotectedarticle": "hob den Schutz von «[[$1]]» auf",
+       "movedarticleprotection": "übertrug den Seitenschutz von «[[$2]]» auf «[[$1]]»",
+       "protect-title": "Schutz ändern von «$1»",
+       "protect-title-notallowed": "Schutz ansehen von «$1»",
+       "protect-text": "Hier kannst du den Schutzstatus der Seite «$1» einsehen und ändern.",
+       "protect-locked-blocked": "Du kannst den Seitenschutz nicht ändern, da dein Benutzerkonto gesperrt ist. Hier sind die aktuellen Seitenschutz-Einstellungen der Seite '''«$1»:'''",
+       "protect-locked-dblock": "Die Datenbank ist gesperrt, der Seitenschutz kann daher nicht geändert werden. Hier sind die aktuellen Seitenschutz-Einstellungen der Seite '''«$1»:'''",
+       "protect-locked-access": "Dein Benutzerkonto verfügt nicht über die notwendigen Rechte zur Änderung des Seitenschutzes. Hier sind die aktuellen Seitenschutzeinstellungen der Seite '''«$1»:'''",
+       "protect-fallback": "Nur Benutzern mit der «$1»-Berechtigung erlauben.",
+       "minimum-size": "Mindestgrösse",
+       "maximum-size": "Maximalgrösse:",
+       "undeleteextrahelp": "* Um die Seite mitsamt aller Versionen wiederherzustellen, wähle keine Version aus, gib eine Begründung an und klicke dann auf «{{int:undeletebtn}}».\n* Um lediglich bestimmte Versionen der Seite wiederherzustellen, wähle die betreffenden Versionen einzeln aus, gib eine Begründung an und klicke dann auf «{{int:undeletebtn}}».",
+       "undeletedpage": "'''«$1»''' wurde wiederhergestellt.\n\nIm [[Special:Log/delete|Lösch-Logbuch]] findest du eine Übersicht der gelöschten und wiederhergestellten Seiten.",
+       "undelete-cleanup-error": "Fehler beim Löschen der unbenutzten Archiv-Version «$1».",
+       "undelete-show-file-confirm": "Bist du sicher, dass du eine gelöschte Version der Datei «<nowiki>$1</nowiki>» vom $2, $3 Uhr sehen willst?",
+       "contributions-title": "Benutzerbeiträge von «$1»",
+       "whatlinkshere-title": "Seiten, die auf «$1» verlinken",
+       "linkshere": "Die folgenden Seiten verlinken auf '''«[[:$1]]»''':",
+       "nolinkshere": "Keine Seite verlinkt auf '''«[[:$1]]»'''.",
+       "nolinkshere-ns": "Keine Seite verlinkt auf '''«[[:$1]]»''' im gewählten Namensraum.",
+       "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-unblock-addr": "«$1» freigeben",
+       "ipb-blocklist-contribs": "Benutzerbeiträge von «$1»",
+       "autoblocker": "Automatische Sperre, da du eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzt.\nGrund der Benutzersperre: «$2»",
+       "blocklogentry": "sperrte «[[$1]]» für den Zeitraum: $2 $3",
+       "reblock-logentry": "änderte die Sperre von «[[$1]]» für den Zeitraum: $2 $3",
+       "unblocklogentry": "hob die Sperre von «$1» auf",
+       "ipb_already_blocked": "«$1» wurde bereits gesperrt.",
+       "ipb-needreblock": "«$1» ist bereits gesperrt. Möchtest du die Sperrparameter ändern?",
+       "ip_range_toolarge": "Adressbereiche, die grösser als /$1 sind, sind nicht erlaubt.",
+       "cant-see-hidden-user": "Der Benutzer, den du versuchst zu sperren, wurde bereits gesperrt und verborgen. Da du das «hideuser»-Recht nicht hast, kannst du die Benutzersperre nicht sehen und nicht bearbeiten.",
+       "move-page": "Verschieben von «$1»",
+       "movepage-moved": "'''Die Seite «$1» wurde nach «$2» verschoben.'''",
+       "movepage-page-exists": "Die Seite «$1» ist bereits vorhanden und kann nicht automatisch überschrieben werden.",
+       "movepage-page-moved": "Die Seite «$1» wurde nach «$2» verschoben.",
+       "movepage-page-unmoved": "Die Seite «$1» konnte nicht nach «$2» verschoben werden.",
+       "delete_and_move_text": "== Löschung erforderlich ==\n\nDie Seite «[[:$1]]» existiert bereits. Möchtest du diese löschen, um die Seite verschieben zu können?",
+       "delete_and_move_reason": "gelöscht, um Platz für die Verschiebung von «[[$1]]» zu machen",
+       "immobile-source-namespace": "Seiten des «$1»-Namensraums können nicht verschoben werden",
+       "immobile-target-namespace": "Seiten können nicht in den «$1»-Namensraum verschoben werden",
+       "thumbnail-more": "vergrössern",
+       "djvu_page_error": "DjVu-Seite ausserhalb des Seitenbereichs",
+       "import-interwiki-templates": "Alle Vorlagen einschliessen",
+       "importuploaderrorsize": "Das Hochladen der Importdatei ist fehlgeschlagen. Die Datei ist grösser als die maximal erlaubte Dateigrösse.",
+       "import-error-edit": "Die Seite «$1» wurde nicht importiert, da du nicht berechtigt bist, sie zu bearbeiten.",
+       "import-error-create": "Die Seite «$1» wurde nicht importiert, da du nicht berechtigt bist, sie zu erstellen.",
+       "import-error-interwiki": "Die Seite «$1» wurde nicht importiert, da deren Name für externe Links (Interwiki) reserviert ist.",
+       "import-error-special": "Die Seite «$1» wurde nicht importiert, da sie zu einem besonderen Namensraum gehört, in dem keine Seiten möglich sind.",
+       "import-error-invalid": "Seite «$1» wurde nicht importiert, da deren Name ungültig ist.",
+       "import-logentry-upload": "importierte «[[$1]]» von einer Datei",
+       "import-logentry-interwiki": "importierte «$1» (Transwiki)",
+       "javascripttest-pagetext-unknownframework": "Unbekanntes Framework «$1».",
+       "tooltip-t-emailuser": "Ein E-Mail an diesen Benutzer senden",
+       "pageinfo-title": "Informationen zu «$1»",
+       "markedaspatrollederror": "Markierung als «kontrolliert» nicht möglich.",
+       "filedelete-missing": "Die Datei «$1» kann nicht gelöscht werden, da sie nicht vorhanden ist.",
+       "filedelete-old-unregistered": "Die angegebene Datei-Version «$1» ist nicht in der Datenbank vorhanden.",
+       "filedelete-current-unregistered": "Die angegebene Datei «$1» ist nicht in der Datenbank vorhanden.",
+       "filedelete-archive-read-only": "Das Archiv-Verzeichnis «$1» ist für den Webserver nicht beschreibbar.",
+       "imagemaxsize": "Maximale Bildgrösse:<br />''(für Dateibeschreibungsseiten)''",
+       "thumbsize": "Standardgrösse der Vorschaubilder:",
+       "file-info": "Dateigrösse: $1, MIME-Typ: $2",
+       "file-info-size": "$1 × $2 Pixel, Dateigrösse: $3, MIME-Typ: $4",
+       "file-info-size-pages": "$1 × $2 Pixel, Dateigrösse: $3, MIME-Typ: $4, $5 {{PLURAL:$5|Seite| Seiten}}",
+       "svg-long-desc": "SVG-Datei, Basisgrösse: $1 × $2 Pixel, Dateigrösse: $3",
+       "show-big-image-preview": "Grösse dieser Vorschau: $1.",
+       "metadata-fields": "Die folgenden Felder der EXIF-Metadaten, die in diesem MediaWiki-Systemtext angegeben sind, werden auf Bildbeschreibungsseiten mit eingeklappter Metadatentabelle angezeigt.\nWeitere werden standardmässig nicht angezeigt.\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-jpeginterchangeformatlength": "Grösse der JPEG-Daten in Bytes",
+       "exif-referenceblackwhite": "Schwarz/Weiss-Referenzpunkte",
+       "exif-maxaperturevalue": "Grösste Blende",
+       "exif-whitebalance": "Weissabgleich",
+       "exif-gpsdop": "Masspräzision",
+       "exif-lightsource-13": "Tagesweiss fluoreszierend (N 4600–5400 K)",
+       "exif-lightsource-14": "Kaltweiss fluoreszierend (W 3900–4500 K)",
+       "exif-lightsource-15": "Weiss fluoreszierend (WW 3200–3700 K)",
+       "exif-isospeedratings-overflow": "Grösser als 65535",
+       "confirmemail_text": "{{SITENAME}} erfordert, dass du deine E-Mail-Adresse bestätigst (authentifizierst), bevor du die erweiterten E-Mail-Funktionen benutzen kannst. Klicke bitte auf die unten stehende, mit «Bestätigungscode zuschicken» beschriftete Schaltfläche, damit ein automatisch erstelltes E-Mail an die angegebene Adresse geschickt wird. Dieses E-Mail enthält eine Web-Adresse mit einem Bestätigungscode. Indem du diese Webseite in deinem Webbrowser öffnest, bestätigst du, dass die angegebene E-Mail-Adresse korrekt und gültig ist.",
+       "confirmemail_pending": "Es wurde dir bereits ein Bestätigungscode per E-Mail zugeschickt.\nWenn du dein Benutzerkonto erst vor kurzem erstellt hast, warte bitte noch ein paar Minuten auf das E-Mail, bevor du einen neuen Code anforderst.",
+       "confirmemail_sent": "Das Bestätigungs-E-Mail wurde verschickt.",
+       "confirmemail_sendfailed": "{{SITENAME}} konnte das Bestätigungs-E-Mail nicht an dich versenden.\nBitte prüfe die E-Mail-Adresse auf ungültige Zeichen.\n\nRückmeldung des Mailservers: $1",
+       "confirmemail_body": "Hallo,\n\njemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat das Benutzerkonto «$2» bei {{SITENAME}} registriert.\n\nUm die E-Mail-Funktionen von {{SITENAME}} (wieder) zu aktivieren und um zu bestätigen,\ndass dieses Benutzerkonto wirklich zu deiner E-Mail-Adresse und damit zu dir gehört, öffne bitte folgenden Link in deinem Browser:\n\n$3\n\nWenn du das genannte Benutzerkonto *nicht* registriert hast, folge diesem Link, um den Bestätigungsprozess abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis zum $6, $7 Uhr.",
+       "confirmemail_body_changed": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,\nhat die E-Mail-Adresse des Benutzerkontos «$2» zu dieser Adresse bei {{SITENAME}} geändert.\n\nUm zu bestätigen, dass dieses Benutzerkonto wirklich dir gehört,\nund um die E-Mail-Features bei {{SITENAME}} zu reaktivieren, öffne diesen Link in deinem Browser:\n\n$3\n\nFalls das Konto *nicht* dir gehört, folge diesem Link,\num die E-Mail-Bestätigung abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis $4.",
+       "confirmemail_body_set": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,\nhat die E-Mail-Adresse des Benutzerkontos «$2» auf {{SITENAME}} zu dieser E-Mail-Adresse abgeändert.\n\nUm zu bestätigen, dass dieses Benutzerkonto wirklich zu dir gehört\nund um die E-Mail-Funktionen auf {{SITENAME}} wieder zu aktivieren, öffne bitte den folgenden Link in deinem Browser:\n\n$3\n\nFalls das Konto *nicht* zu dir gehört, bitte den nachfolgenden Link öffnen,\num die Bestätigung der E-Mail-Adresse abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis $4.",
+       "autosumm-replace": "Der Seiteninhalt wurde durch einen anderen Text ersetzt: «$1»",
+       "autosumm-new": "Die Seite wurde neu angelegt: «$1»",
+       "watchlistedit-normal-explain": "Dies sind die Einträge deiner Beobachtungsliste. Um Einträge zu entfernen, markiere die Kästchen neben den Einträgen und klicke am Ende der Seite auf «{{int:Watchlistedit-normal-submit}}». Du kannst deine Beobachtungsliste auch im [[Special:EditWatchlist/raw|Listenformat bearbeiten]].",
+       "watchlistedit-raw-explain": "Dies sind die Einträge deiner Beobachtungsliste im Listenformat. Die Einträge können zeilenweise gelöscht oder hinzugefügt werden.\nPro Zeile ist ein Eintrag erlaubt. Sobald du fertig bist, klicke auf «{{int:Watchlistedit-raw-submit}}».\nDu kannst auch die [[Special:EditWatchlist|Standardseite]] zum Bearbeiten benutzen.",
+       "unknown_extension_tag": "Unbekanntes Parsertag «$1»",
+       "duplicate-defaultsort": "Achtung: Der Sortierungsschlüssel «$2» überschreibt den vorher verwendeten Schlüssel «$1».",
+       "version-license-info": "MediaWiki ist freie Software, d. h. sie kann, gemäss den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.\n\nMediaWiki 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 [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License''] 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 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html online gelesen] werden.",
+       "fileduplicatesearch-info": "$1 × $2 Pixel<br />Dateigrösse: $3<br />MIME-Typ: $4",
+       "fileduplicatesearch-result-1": "Die Datei «$1» hat keine identischen Duplikate.",
+       "fileduplicatesearch-result-n": "Die Datei «$1» hat {{PLURAL:$2|ein identisches Duplikat|$2 identische Duplikate}}.",
+       "fileduplicatesearch-noresults": "Es wurde keine Datei namens «$1» gefunden.",
+       "external_image_whitelist": " #Diese Zeile nicht verändern.<pre>\n#Untenstehend können Fragmente regulärer Ausdrücke (der Teil zwischen den //) eingegeben werden.\n#Diese werden mit den URLs von Bildern aus externen Quellen verglichen.\n#Ein positiver Vergleich führt zur Anzeige des Bildes, andernfalls wird das Bild nur als Link angezeigt.\n#Zeilen, die mit einem # beginnen, werden als Kommentar behandelt.\n#Es wird nicht zwischen Gross- und Kleinschreibung unterschieden.\n\n#Fragmente regulärer Ausdrücke nach dieser Zeile eintragen. Diese Zeile nicht verändern.</pre>",
+       "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-thanks": "Vielen Dank. Deine Rückmeldung wurde auf der Seite «[$2 $1]» gespeichert.",
+       "api-error-file-too-large": "Die hochgeladene Datei war zu gross.",
+       "api-error-hookaborted": "Die von dir vorgesehene Anpassung kann nicht durchgeführt werden (Unterbruch durch eine Programmschnittstelle).",
+       "api-error-unknown-code": "Unbekannter Fehler: «$1»",
+       "api-error-unknown-warning": "Unbekannte Warnung: «$1»",
+       "api-error-unknownerror": "Unbekannter Fehler: «$1»"
 }
index 4248cbe..6314a70 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "*Surak*",
-            "ChrisiPK",
-            "Das Schäfchen",
-            "Filzstift",
-            "Geitost",
-            "Imre",
-            "Jimmy Collins <jimmy.collins@web.de>",
-            "Kghbln",
-            "Leithian",
-            "Merlissimo",
-            "MichaelFrey",
-            "Michawiki",
-            "Pill",
-            "Raimond Spekking (Raymond) <raimond.spekking@gmail.com> since January 2007",
-            "SVG",
-            "Se4598",
-            "The Evil IP address",
-            "Tim Bartel (avatar) <wikipedia@computerkultur.org> formal addressing",
-            "Tischbeinahe",
-            "Umherirrender",
-            "Urhixidur"
-        ]
-    },
-    "tog-enotifrevealaddr": "Ihre E-Mail-Adresse in Benachrichtigungs-E-Mails anzeigen",
-    "view-pool-error": "Entschuldigung, die Server sind im Moment überlastet.\nZu viele Benutzer versuchen, diese Seite zu besuchen.\nBitte warten Sie einige Minuten, bevor Sie es noch einmal versuchen.\n\n$1",
-    "badaccess-group0": "Sie haben nicht die erforderlichen Benutzerrechte für diese Aktion.",
-    "youhavenewmessages": "Sie haben $1 ($2).",
-    "youhavenewmessagesmulti": "Sie haben neue Nachrichten: $1",
-    "enterlockreason": "Bitte geben Sie einen Grund ein, warum die Datenbank gesperrt werden soll und eine Abschätzung über die Dauer der Sperrung",
-    "readonlytext": "Die Datenbank ist vorübergehend für Neueinträge und Änderungen gesperrt. Bitte versuchen Sie es später noch einmal.\n\nGrund der Sperrung: $1",
-    "missing-article": "Der Text von „$1“ $2 wurde nicht in der Datenbank gefunden.\n\nDie Seite ist möglicherweise gelöscht oder verschoben worden.\n\nFalls dies nicht der Fall ist, haben Sie eventuell einen Fehler in der Software gefunden. Bitte melden Sie dies einem [[Special:ListUsers/sysop|Administrator]] unter Nennung der URL.",
-    "actionthrottledtext": "Im Rahmen einer Anti-Spam-Maßnahme kann diese Aktion in einem kurzen Zeitabstand nur begrenzt oft ausgeführt werden. Diese Grenze haben Sie überschritten.\nBitte versuchen Sie es in ein paar Minuten erneut.",
-    "viewsourcetext": "Sie können den Quelltext dieser Seite betrachten und kopieren:",
-    "viewyourtext": "Sie können den Quelltext '''Ihrer Bearbeitung''' dieser Seite betrachten und kopieren:",
-    "protectedinterface": "Diese Seite enthält Text für die Benutzeroberfläche der Software auf diesem Wiki und ist geschützt, um Missbrauch vorzubeugen.\nNutzen Sie bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
-    "editinginterface": "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.\nÄnderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.\nNutzen Sie bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
-    "namespaceprotected": "Sie haben nicht die erforderliche Berechtigung, um Seiten im Namensraum '''$1''' bearbeiten zu können.",
-    "customcssprotected": "Sie haben nicht die Berechtigung diese CSS enthaltende Seite zu bearbeiten, da sie die persönlichen Einstellungen eines anderen Benutzers enthält.",
-    "customjsprotected": "Sie haben nicht die Berechtigung, diese JavaScript enthaltende Seite zu bearbeiten, da es sich hierbei um die persönlichen Einstellungen eines anderen Benutzers handelt.",
-    "exception-nologin-text": "Sie müssen sich [[Special:Userlogin|anmelden]], um auf diese Seite oder Aktion zugreifen zu können.",
-    "logouttext": "'''Sie sind nun abgemeldet.'''\n\nBeachten Sie, dass einige Seiten noch anzeigen können, dass Sie angemeldet sind, solange Sie nicht Ihren Browsercache geleert haben.",
-    "welcomecreation-msg": "Ihr Benutzerkonto wurde erstellt.\nVergessen Sie nicht, Ihre [[Special:Preferences|{{SITENAME}}-Einstellungen]] zu ändern.",
-    "yourdomainname": "Ihre Domain:",
-    "password-change-forbidden": "Sie können auf diesem Wiki keine Passwörter ändern.",
-    "externaldberror": "Entweder es liegt ein Fehler bei der externen Authentifizierung vor oder Sie dürfen Ihr externes Benutzerkonto nicht aktualisieren.",
-    "nologin": "Sie haben kein Benutzerkonto? $1.",
-    "gotaccount": "Haben Sie bereits ein Benutzerkonto? '''$1'''.",
-    "userlogin-loggedin": "Sie sind bereits als {{GENDER:$1|$1}} angemeldet.\nBenutzen Sie das unten stehende Formular, um sich unter einem anderen Benutzernamen anzumelden.",
-    "userexists": "Dieser Benutzername ist schon vergeben.\nBitte wählen Sie einen anderen.",
-    "nocookiesnew": "Der Benutzerzugang wurde erstellt, aber Sie sind nicht angemeldet.\n{{SITENAME}} benötigt für diese Funktion Cookies, bitte aktivieren Sie diese und melden sich dann mit Ihrem neuen Benutzernamen und dem zugehörigen Passwort an.",
-    "nocookieslogin": "{{SITENAME}} benutzt Cookies zur Anmeldung der Benutzer.\nSie haben Cookies deaktiviert, bitte aktivieren Sie diese und versuchen Sie es erneut.",
-    "noname": "Sie müssen einen gültigen Benutzernamen angeben.",
-    "loginsuccess": "Sie sind jetzt als „$1“ bei {{SITENAME}} angemeldet.",
-    "nosuchuser": "Der Benutzername „$1“ existiert nicht.\nÜberprüfen Sie die Schreibweise (Groß-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|melden Sie sich als neuer Benutzer an]].",
-    "nosuchusershort": "Der Benutzername „$1“ ist nicht vorhanden. Bitte überprüfen Sie die Schreibweise.",
-    "nouserspecified": "Bitte geben Sie einen Benutzernamen an.",
-    "wrongpassword": "Das Passwort ist falsch. Bitte versuchen Sie es erneut.",
-    "wrongpasswordempty": "Es wurde kein Passwort eingegeben. Bitte versuchen Sie es erneut.",
-    "password-name-match": "Ihr Passwort muss sich von Ihrem Benutzernamen unterscheiden.",
-    "passwordremindertext": "Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.\n\nDas automatisch generierte Passwort für Benutzer „$2“ lautet nun: $3\n\nFalls Sie dies wirklich gewünscht haben, sollten Sie sich jetzt anmelden und das Passwort ändern.\nDas neue Passwort ist {{PLURAL:$5|1 Tag|$5 Tage}} gültig.\n\nBitte ignorieren Sie diese E-Mail, falls Sie sie nicht selbst angefordert haben. Das alte Passwort bleibt weiterhin gültig.",
-    "noemailcreate": "Sie müssen eine gültige E-Mail-Adresse angeben",
-    "passwordsent": "Ein neues, temporäres Passwort wurde an die E-Mail-Adresse von Benutzer „$1“ gesandt.\nBitte melden Sie sich damit an, sobald sie es erhalten haben. Das alte Passwort bleibt weiterhin gültig.",
-    "blocked-mailpassword": "Die von Ihnen verwendete IP-Adresse ist für das Ändern von Seiten gesperrt. Um einen Missbrauch zu verhindern, wurde die Möglichkeit zur Anforderung eines neuen Passwortes ebenfalls gesperrt.",
-    "eauthentsent": "Eine Bestätigungs-E-Mail wurde an die angegebene Adresse verschickt.\n\nBevor eine E-Mail von anderen Benutzern über die E-Mail-Funktion empfangen werden kann, muss die Adresse und ihre tatsächliche Zugehörigkeit zu diesem Benutzerkonto erst bestätigt werden. Bitte befolgen Sie die Hinweise in der Bestätigungs-E-Mail.",
-    "acct_creation_throttle_hit": "Besucher dieses Wikis, die Ihre IP-Adresse verwenden, haben innerhalb des letzten Tages {{PLURAL:$1|1 Benutzerkonto|$1 Benutzerkonten}} erstellt, was die maximal erlaubte Anzahl in dieser Zeitperiode ist.\n\nBesucher, die diese IP-Adresse verwenden, können momentan keine Benutzerkonten mehr erstellen.",
-    "emailauthenticated": "Ihre E-Mail-Adresse wurde am $2 um $3 Uhr bestätigt.",
-    "emailnotauthenticated": "Ihre E-Mail-Adresse ist noch nicht bestätigt. Die folgenden E-Mail-Funktionen stehen erst nach erfolgreicher Bestätigung zur Verfügung.",
-    "noemailprefs": "Geben Sie eine E-Mail-Adresse in den Einstellungen an, damit die nachfolgenden Funktionen zur Verfügung stehen.",
-    "invalidemailaddress": "Die E-Mail-Adresse wird nicht akzeptiert, weil sie ein ungültiges Format (eventuell ungültige Zeichen) zu haben scheint. Bitte geben Sie eine korrekte Adresse ein oder leeren Sie das Feld.",
-    "createaccount-text": "Es wurde für Sie ein Benutzerkonto „$2“ auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für „$2“ ist „$3“. Sie sollten sich nun anmelden und das Passwort ändern.\n\nFalls das Benutzerkonto irrtümlich angelegt wurde, können Sie diese Nachricht ignorieren.",
-    "login-throttled": "Sie haben zu oft versucht, sich anzumelden.\nBitte warten Sie $1, bevor Sie es erneut probieren.",
-    "resetpass_announce": "Anmeldung mit dem per E-Mail zugesandten Code. Um die Anmeldung abzuschließen, müssen Sie jetzt ein neues Passwort wählen.",
-    "resetpass_text": "<!-- Ergänzen Sie den Text hier -->",
-    "changepassword-success": "Ihr Passwort wurde erfolgreich geändert.",
-    "resetpass-no-info": "Sie müssen sich anmelden, um auf diese Seite direkt zuzugreifen.",
-    "resetpass-wrong-oldpass": "Ungültiges temporäres oder aktuelles Passwort.\nMöglicherweise haben Sie Ihr Passwort bereits erfolgreich geändert oder ein neues temporäres Passwort beantragt.",
-    "passwordreset-capture-help": "Wenn Sie dieses Kästchen ankreuzen, wird die E-Mail-Nachricht mit dem temporären Passwort sowohl Ihnen angezeigt als auch dem Benutzer zugesandt.",
-    "passwordreset-emailtext-ip": "Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat eine Zurücksetzung Ihres\nPassworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}}\nmit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab.\nSie sollten sich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese\nAnfrage getätigt hat oder Sie sich wieder an Ihr ursprüngliches Passwort erinnern können und es nicht länger\nändern möchten, können Sie diese Nachricht ignorieren und weiterhin Ihr altes\nPasswort benutzen.",
-    "passwordreset-emailtext-user": "Benutzer $1 bei {{SITENAME}} hat eine Zurücksetzung Ihres Passworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab. Sie sollten sich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese Anfrage getätigt hat oder Sie sich wieder an Ihr ursprüngliches Passwort erinnern können und es nicht ändern möchten, können Sie diese Nachricht ignorieren und weiterhin Ihr altes Passwort benutzen.",
-    "changeemail-text": "Füllen Sie dieses Formular vollständig aus, um Ihre E-Mail-Adresse zu ändern. Sie müssen Ihr Passwort angeben, um diese Änderung zu bestätigen.",
-    "changeemail-no-info": "Sie müssen angemeldet sein, um direkt auf diese Seite zugreifen zu können.",
-    "sig_tip": "Ihre Signatur mit Zeitstempel",
-    "anoneditwarning": "Sie bearbeiten diese Seite unangemeldet. Wenn Sie sie abspeichern, wird Ihre aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit unwiderruflich '''öffentlich''' einsehbar.",
-    "missingsummary": "'''Hinweis:''' Sie haben keine Zusammenfassung angegeben. Wenn Sie erneut auf „{{int:savearticle}}“ klicken, wird Ihre Änderung ohne Zusammenfassung übernommen.",
-    "missingcommenttext": "Ihr Abschnitt enthält keinen Text.",
-    "missingcommentheader": "'''Achtung:''' Sie haben kein Betreff/Überschrift eingegeben. Wenn Sie erneut auf „{{int:savearticle}}“ klicken, wird Ihre Bearbeitung ohne Überschrift gespeichert.",
-    "blockedtext": "'''Ihr Benutzername oder Ihre IP-Adresse wurde gesperrt.'''\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\nSie könnten $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\nSie können die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für Sie gesperrt wurde.\nIhre aktuelle IP-Adresse ist $3 und die Sperrkennung lautet $5.\nBitte fügen Sie alle Informationen jeder Anfrage hinzu, die Sie stellen.",
-    "autoblockedtext": "Ihre IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der von $1 gesperrt wurde.\nAls Grund wurde angegeben:\n\n:''$2''\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nSie können $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\n\nSie können die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für Sie gesperrt wurde.\n\nIhre aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.\nBitte fügen Sie alle Informationen jeder Anfrage hinzu, die Sie stellen.",
-    "whitelistedittext": "Sie müssen sich $1, um Seiten bearbeiten zu können.",
-    "confirmedittext": "Sie müssen Ihre E-Mail-Adresse erst bestätigen, bevor Sie Bearbeitungen vornehmen können. Bitte ergänzen und bestätigen Sie Ihre E-Mail in den [[Special:Preferences|Einstellungen]].",
-    "nosuchsectiontext": "Sie haben versucht, einen Abschnitt zu bearbeiten, der nicht existiert.\nVermutlich wurde er verschoben oder gelöscht, nachdem Sie die Seite aufgerufen haben.",
-    "loginreqpagetext": "Sie müssen sich $1, um Seiten lesen zu können.",
-    "newarticletext": "Sie sind einem Link zu einer Seite gefolgt, die nicht vorhanden ist.\nUm diese Seite anzulegen, tragen Sie Ihren Text in das untenstehende Bearbeitungsfeld ein (weitere Informationen auf der [[{{MediaWiki:Helppage}}|Hilfeseite]]).\nSofern Sie fälschlicherweise hier sind, klicken Sie auf die Schaltfläche '''Zurück''' Ihres Browsers.",
-    "anontalkpagetext": "----''Diese Seite dient dazu, einem nicht angemeldeten Benutzer Nachrichten zu hinterlassen. Es wird seine IP-Adresse zur Identifizierung verwendet. IP-Adressen können von mehreren Benutzern gemeinsam verwendet werden. Wenn Sie mit den Kommentaren auf dieser Seite nichts anfangen können, richten sie sich vermutlich an einen früheren Inhaber Ihrer IP-Adresse und Sie können sie ignorieren. Sie können sich auch ein [[Special:UserLogin/signup|Benutzerkonto erstellen]] oder sich [[Special:UserLogin|anmelden]], um künftig Verwechslungen mit anderen anonymen Benutzern zu vermeiden.''",
-    "noarticletext": "Diese Seite enthält momentan noch keinen Text.\nSie können diesen Titel auf den anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]],\n<span class=\"plainlinks\">in den zugehörigen [{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbüchern suchen] oder diese Seite [{{fullurl:{{FULLPAGENAME}}|action=edit}} bearbeiten]</span>.",
-    "noarticletext-nopermission": "Diese Seite enthält momentan noch keinen Text.\nSie können ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]] oder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span>. Sie sind allerdings nicht berechtigt diese Seite zu erstellen.",
-    "userpage-userdoesnotexist": "Das Benutzerkonto „<nowiki>$1</nowiki>“ ist nicht vorhanden. Bitte prüfen Sie, ob Sie diese Seite wirklich erstellen/bearbeiten möchten.",
-    "clearyourcache": "'''Hinweis:''' Leeren Sie nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.\n* '''Firefox/Safari:''' ''Umschalttaste'' drücken und gleichzeitig ''Aktualisieren'' anklicken oder entweder ''Strg+F5'' oder ''Strg+R'' (''⌘+R'' auf dem Mac) drücken\n* '''Google Chrome:''' ''Umschalttaste+Strg+R'' (''⌘+Umschalttaste+R'' auf dem Mac) drücken\n* '''Internet Explorer:''' ''Strg+F5'' drücken oder ''Strg'' drücken und gleichzeitig ''Aktualisieren'' anklicken\n* '''Opera:''' ''Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen''",
-    "usercssyoucanpreview": "'''Tipp:''' Benutzen Sie den „{{int:showpreview}}“-Button, um Ihr neues CSS vor dem Speichern zu testen.",
-    "userjsyoucanpreview": "'''Tipp:''' Benutzen Sie den „{{int:showpreview}}“-Button, um Ihr neues JavaScript vor dem Speichern zu testen.",
-    "usercsspreview": "'''Beachten Sie, dass Sie nur eine Vorschau Ihres Benutzer-CSS betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
-    "userjspreview": "'''Beachten Sie, dass Sie nur eine Vorschau Ihres Benutzer-JavaScript betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
-    "sitecsspreview": "'''Beachten Sie, dass Sie nur eine Vorschau dieses CSS betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
-    "sitejspreview": "'''Beachten Sie, dass Sie nur eine Vorschau dieses JavaScript betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
-    "userinvalidcssjstitle": "'''Achtung:''' Die Benutzeroberfläche „$1“ existiert nicht. Bedenken Sie, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also beispielsweise ''{{ns:user}}:Mustermann/vector.css'' an Stelle von ''{{ns:user}}:Mustermann/Vector.css''.",
-    "previewconflict": "Diese Vorschau gibt den Inhalt des oberen Textfeldes wieder. So wird die Seite aussehen, wenn Sie jetzt speichern.",
-    "session_fail_preview": "'''Ihre Bearbeitung konnte nicht gespeichert werden, da Sitzungsdaten verloren gegangen sind.\nBitte versuchen Sie es erneut, indem Sie unter der folgenden Textvorschau nochmals auf „Seite speichern“ klicken.\nSollte das Problem bestehen bleiben, [[Special:UserLogout|melden Sie sich ab]] und danach wieder an.'''",
-    "session_fail_preview_html": "'''Ihre Bearbeitung konnte nicht gespeichert werden, da Sitzungsdaten verloren gegangen sind.'''\n\n''Da in {{SITENAME}} das Speichern von reinem HTML aktiviert ist, wurde die Vorschau ausgeblendet, um JavaScript-Attacken vorzubeugen.''\n\n'''Bitte versuchen Sie es erneut, indem Sie unter der folgenden Textvorschau nochmals auf „Seite speichern“ klicken.\nSollte das Problem bestehen bleiben, [[Special:UserLogout|melden Sie sich ab]] und danach wieder an.'''",
-    "token_suffix_mismatch": "'''Ihre Bearbeitung wurde zurückgewiesen, da Ihr Browser Zeichen im Bearbeiten-Token verstümmelt hat.\nEine Speicherung kann den Seiteninhalt zerstören. Dies geschieht bisweilen durch die Benutzung eines anonymen Proxy-Dienstes, der fehlerhaft arbeitet.'''",
-    "edit_form_incomplete": "'''Der Inhalt des Bearbeitungsformulars hat den Server nicht vollständig erreicht. Bitte prüfen Sie Ihre Bearbeitungen auf Vollständigkeit und versuchen Sie es erneut.'''",
-    "explainconflict": "Jemand anders hat diese Seite geändert, nachdem Sie angefangen haben, sie zu bearbeiten.\nDas obere Textfeld enthält den aktuellen Bearbeitungsstand der Seite.\nDas untere Textfeld enthält Ihre Änderungen.\nBitte fügen Sie Ihre Änderungen in das obere Textfeld ein.\n'''Nur''' der Inhalt des oberen Textfeldes wird gespeichert, wenn Sie auf „{{int:savearticle}}“ klicken.",
-    "yourtext": "Ihr Text",
-    "nonunicodebrowser": "'''Achtung: Ihr Browser kann Unicode-Zeichen nicht richtig verarbeiten.''' Es wird eine Hilfsroutine eingesetzt, um Ihnen zu erlauben, Seiten sicher zu bearbeiten: Nicht-ASCII-Zeichen werden dabei im Bearbeitungsfenster als hexadezimale Codes angezeigt.",
-    "editingold": "'''Achtung: Sie bearbeiten eine alte Version dieser Seite. Sofern Sie sie speichern, werden alle neueren Versionen überschrieben.'''",
-    "copyrightwarning": "'''Bitte kopieren Sie keine Webseiten, die nicht Ihre eigenen sind, benutzen Sie keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />\nSie geben uns hiermit Ihre Zusage, dass Sie den Text '''selbst verfasst''' haben, dass der Text Allgemeingut '''(public domain)''' ist, oder dass der '''Urheber''' seine '''Zustimmung''' gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weisen Sie bitte auf der Diskussionsseite darauf hin.\n<i>Bitte beachten Sie, dass alle {{SITENAME}}-Beiträge automatisch unter der „$2“ stehen (siehe $1 für Einzelheiten). Falls Sie nicht möchten, dass Ihre Arbeit hier von anderen verändert und verbreitet wird, dann klicken Sie nicht auf „Seite speichern“.</i>",
-    "copyrightwarning2": "Bitte beachten Sie, dass alle Beiträge zu {{SITENAME}} von anderen Mitwirkenden bearbeitet, geändert oder gelöscht werden können.\nReichen Sie keine Texte ein, falls Sie nicht wollen, dass diese ohne Einschränkung geändert werden können.\n\nSie bestätigen hiermit auch, dass Sie diese Texte selbst geschrieben haben oder diese von einer gemeinfreien Quelle kopiert haben\n(weitere Einzelheiten unter $1). '''ÜBERTRAGEN SIE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!'''",
-    "longpageerror": "'''Fehler: Der Text, den Sie zu speichern versuchen, ist {{PLURAL:$1|ein Kilobyte|$1 Kilobyte}} groß. Dies ist größer als das erlaubte Maximum von {{PLURAL:$2|ein Kilobyte|$2 Kilobyte}}.'''\nEr kann nicht gespeichert werden.",
-    "readonlywarning": "'''Achtung: Die Datenbank wurde für Wartungsarbeiten gesperrt, so dass Ihre Änderungen derzeit nicht gespeichert werden können.\nSichern Sie den Text bitte lokal auf Ihrem Computer und versuchen Sie zu einem späteren Zeitpunkt, die Änderungen zu übertragen.'''\n\nGrund für die Sperre: $1",
-    "nocreatetext": "Auf {{SITENAME}} wurde das Erstellen neuer Seiten eingeschränkt. Sie können bestehende Seiten ändern oder sich [[Special:UserLogin|anmelden]].",
-    "nocreate-loggedin": "Sie haben nicht die erforderliche Berechtigung, um neue Seiten erstellen zu können.",
-    "permissionserrorstext": "Sie sind nicht berechtigt, die Aktion auszuführen. {{PLURAL:$1|Grund|Gründe}}:",
-    "permissionserrorstext-withaction": "Sie sind nicht berechtigt, $2.\n{{PLURAL:$1|Grund|Gründe}}:",
-    "recreate-moveddeleted-warn": "'''Achtung: Sie erstellen eine Seite, die bereits früher gelöscht wurde.'''\n\nBitte prüfen Sie sorgfältig, ob die erneute Seitenerstellung den Richtlinien entspricht.\nZu Ihrer Information folgt das Lösch- und Verschiebungs-Logbuch mit der Begründung für die vorhergehende Löschung:",
-    "edit-no-change": "Ihre Bearbeitung wurde ignoriert, da keine Änderung an dem Text vorgenomme wurde.",
-    "postedit-confirmation": "Ihre Bearbeitung wurde gespeichert.",
-    "editwarning-warning": "Das Verlassen dieser Seite kann dazu führen, dass Ihre Änderungen verloren gehen.\nWenn Sie angemeldet sind, können Sie das Anzeigen dieser Warnung im „Bearbeiten“-Bereich Ihrer Einstellungen abschalten.",
-    "undo-success": "Die Bearbeitung kann rückgängig gemacht werden.\nBitte prüfen Sie den Vergleich unten, um sicherzustellen, dass Sie dies tun möchten, und speichern Sie dann unten Ihre Änderungen, um die Bearbeitung rückgängig zu machen.",
-    "history-feed-empty": "Die angeforderte Seite existiert nicht. Vielleicht wurde sie gelöscht oder verschoben. [[Special:Search|Durchsuchen Sie]] {{SITENAME}} nach passenden neuen Seiten.",
-    "rev-deleted-text-unhide": "Diese Version wurde '''gelöscht'''.\nNähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].\nSie können [$1 diese Version einsehen], sofern Sie möchten.",
-    "rev-suppressed-text-unhide": "Diese Version wurde '''unterdrückt'''.\nNähere Angaben stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].\nSie können [$1 diese Version einsehen], sofern Sie möchten.",
-    "rev-deleted-text-view": "Diese Version wurde '''gelöscht'''.\nSie können sie einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
-    "rev-suppressed-text-view": "Diese Version wurde '''unterdrückt'''.\nSie können sie einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].",
-    "rev-deleted-no-diff": "Sie können diesen Unterschied nicht betrachten, da eine der Versionen '''gelöscht''' wurde.\nDetails stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
-    "rev-suppressed-no-diff": "Sie können diesen Versionsunterschied nicht betrachten, da eine der Versionen '''gelöscht''' wurde.",
-    "rev-deleted-unhide-diff": "Eine der Versionen dieses Versionsunterschieds wurde '''gelöscht'''.\nNähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].\nSie können [$1 diesen Versionsunterschied einsehen], sofern Sie möchten.",
-    "rev-suppressed-unhide-diff": "Eine der Versionen dieses Versionsunterschieds wurde '''unterdrückt'''.\nNähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].\nSie können [$1 diesen Versionsunterschied einsehen], sofern Sie möchten.",
-    "rev-deleted-diff-view": "Eine Version dieses Versionsunterschieds wurde '''gelöscht'''.\nSie können diesen Versionsunterschied einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
-    "rev-suppressed-diff-view": "Eine der Versionen dieses Versionsunterschiedes wurde '''unterdrückt'''.\nSie können diesen Versionsunterschied einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].",
-    "revdelete-nooldid-text": "Sie haben entweder keine Version angegeben, auf die diese Aktion ausgeführt werden soll, die gewählte Version ist nicht vorhanden oder Sie versuchen, die aktuelle Version zu entfernen.",
-    "revdelete-show-file-confirm": "Sind Sie sicher, dass Sie die gelöschte Version der Datei „<nowiki>$1</nowiki>“ vom $2 um $3 Uhr ansehen wollen?",
-    "revdelete-confirm": "Bitte bestätigen Sie, dass Sie beabsichtigen, dies zu tun, die Konsequenzen verstehen und es in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] tun.",
-    "revdelete-show-no-access": "Fehler beim Anzeigen des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als „eingeschränkt“ markiert.\nSie haben darauf keinen Zugriff.",
-    "revdelete-modify-no-access": "Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als „eingeschränkt“ markiert.\nSie haben darauf keinen Zugriff.",
-    "revdelete-concurrent-change": "Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Es scheint, als ob der Status von jemandem geändert wurde, bevor Sie vorhatten, ihn zu bearbeiten.\nBitte prüfen Sie die Logbücher.",
-    "revdelete-only-restricted": "Fehler beim Verstecken des Eintrags vom $1, $2 Uhr: Sie können keinen Eintrag vor Administratoren verstecken, ohne eine der anderen Ansichtsoptionen gewählt zu haben.",
-    "mergehistory-header": "Mit dieser Spezialseite können Sie die Versionsgeschichte einer Ursprungsseite mit der Versionsgeschichte einer Zielseite vereinen.\nStellen Sie sicher, dass die Versionsgeschichte einer Seite historisch korrekt ist.",
-    "mergehistory-merge": "Die folgenden Versionen von „[[:$1]]“ können nach „[[:$2]]“ übertragen werden. Markieren Sie die Version, bis zu der (einschließlich) die Versionen übertragen werden sollen. Bitte beachten Sie, dass die Nutzung der Navigationslinks die Auswahl zurücksetzt.",
-    "mergehistory-fail": "Versionsvereinigung nicht möglich, bitte prüfen Sie die Seite und die Zeitangaben.",
-    "toomanymatches": "Die Anzahl der Suchergebnisse ist zu groß, bitte versuchen Sie eine andere Abfrage.",
-    "searchmenu-new": "'''Erstellen Sie die Seite „[[:$1]]“ in diesem Wiki.'''",
-    "search-suggest": "Meinten Sie „$1“?",
-    "search-nonefound": "Für Ihre Suchanfrage wurden keine Ergebnisse gefunden.",
-    "searchdisabled": "Die {{SITENAME}} Suche wurde deaktiviert. Sie können unterdessen mit Google suchen. Bitte bedenken Sie, dass der Suchindex von {{SITENAME}} veraltet sein kann.",
-    "prefsnologintext2": "Sie müssen sich $1, um Ihre Benutzereinstellungen festzulegen.",
-    "prefs-help-watchlist-token2": "Dies ist der geheime Schlüssel zum Webfeed Ihrer Beobachtungsliste.\nJeder, der ihn kennt, kann Ihre Beobachtungsliste lesen. Teilen Sie ihn deshalb nicht.\n[[Special:ResetTokens|Klicken Sie hier, wenn Sie ihn zurücksetzen müssen]].",
-    "savedprefs": "Ihre Einstellungen wurden gespeichert.",
-    "prefs-reset-intro": "Sie können diese Seite verwenden, um die Einstellungen auf die Standards zurückzusetzen.\nDies kann nicht mehr rückgängig gemacht werden.",
-    "yourgender": "Welches Geschlecht haben Sie?",
-    "prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um Sie anzureden sowie als Hinweis für andere durch Verwendung des zutreffenden grammatikalischen Geschlechts.\nDiese Information ist öffentlich.",
-    "prefs-help-realname": "Dies ist eine freiwillige Angabe. Damit kann Ihr bürgerlicher Name Ihren Beiträgen zugeordnet werden.",
-    "prefs-help-email": "Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern Sie Ihr Passwort vergessen haben.",
-    "prefs-help-email-others": "Mit anderen Benutzern können Sie auch über die Benutzerdiskussionsseiten Kontakt aufnehmen, ohne dass Sie Ihre Identität offenlegen müssen.",
-    "userrights-groups-help": "Sie können die Gruppenzugehörigkeit dieses Benutzers ändern:\n* Ein markiertes Kästchen bedeutet, dass der Benutzer Mitglied dieser Gruppe ist.\n* Ein nichtmarkiertes Kästchen bedeutet, dass der Benutzer nicht Mitglied dieser Gruppe ist.\n* Ein * bedeutet, dass Sie das Benutzerrecht nach Erteilung nicht wieder zurücknehmen können (oder umgekehrt).",
-    "userrights-no-interwiki": "Sie haben nicht die erforderliche Berechtigung, um Benutzerrechte in anderen Wikis ändern zu können.",
-    "userrights-nologin": "Sie müssen sich mit einem Administrator-Benutzerkonto [[Special:UserLogin|anmelden]], um Benutzerrechte zu ändern.",
-    "userrights-notallowed": "Sie verfügen nicht über die erforderlichen Berechtigungen, um Benutzerrechte vergeben oder entziehen zu können.",
-    "userrights-changeable-col": "Gruppenzugehörigkeit, die Sie ändern dürfen",
-    "userrights-unchangeable-col": "Gruppenzugehörigkeit, die Sie nicht ändern dürfen",
-    "recentchanges-summary": "Auf dieser Seite können Sie die letzten Änderungen in diesem Wiki nachverfolgen.",
-    "recentchanges-feed-description": "Verfolgen Sie mit diesem Feed die letzten Änderungen in {{SITENAME}}.",
-    "recentchangeslinked-summary": "Diese Spezialseite listet die letzten Änderungen an den verlinkten Seiten auf (bzw. bei Kategorien an den Mitgliedern dieser Kategorie).\nSeiten auf Ihrer [[Special:Watchlist|Beobachtungsliste]] sind '''fett''' dargestellt.",
-    "uploadnologintext": "Sie müssen sich $1 um Dateien hochladen zu können.",
-    "uploadtext": "Benutzen Sie dieses Formular, um neue Dateien hochzuladen.\n\nGehen Sie zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]].\n\nUm ein '''Bild''' in einer Seite zu verwenden, nutzen Sie einen Link in der folgenden Form:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></code>''' – für ein Vollbild\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|Alternativer Text]]</nowiki></code>''' – für ein 200px breites Bild innerhalb einer Box, mit „Alternativer Text“ als Bildbeschreibung\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></code>''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei",
-    "illegalfilename": "Der Dateiname „$1“ enthält mindestens ein nicht erlaubtes Zeichen. Bitte benennen Sie die Datei um und versuchen Sie, sie erneut hochzuladen.",
-    "empty-file": "Die von Ihnen übertragene Datei hat keinen Inhalt.",
-    "emptyfile": "Die hochgeladene Datei ist leer. Der Grund kann ein Tippfehler im Dateinamen sein. Bitte kontrollieren Sie, ob Sie die Datei wirklich hochladen wollen.",
-    "fileexists": "Eine Datei dieses Namens ist bereits vorhanden. Bitte prüfen Sie <strong>[[:$1]]</strong>, sofern Sie sich nicht sicher sind, ob Sie sie ändern möchten.\n[[$1|thumb]]",
-    "filepageexists": "Eine Beschreibungsseite wurde bereits als <strong>[[:$1]]</strong> erstellt, es ist aber keine Datei mit diesem Namen vorhanden.\nDie eingegebene Beschreibung wird nicht auf die Beschreibungsseite übernommen.\nDie Beschreibungsseite müssen Sie nach dem Hochladen der Datei noch manuell bearbeiten.\n[[$1|thumb]]",
-    "fileexists-extension": "Eine Datei ähnlichen Namens ist bereits vorhanden: [[$2|thumb]]\n* Name der hochzuladenden Datei: <strong>[[:$1]]</strong>\n* Name der vorhandenen Datei: <strong>[[:$2]]</strong>\nBitte wählen Sie einen anderen Namen.",
-    "fileexists-thumbnail-yes": "Bei der Datei scheint es sich um ein Bild verringerter Größe ''(Minitatur)'' zu handeln. [[$1|thumb]]\nBitte prüfen Sie die Datei <strong>[[:$1]]</strong>.\nWenn es sich um das Bild in Originalgröße handelt, so braucht kein separates Vorschaubild hochgeladen zu werden.",
-    "file-thumbnail-no": "Der Dateiname beginnt mit <strong>$1</strong>. Dies deutet auf ein Bild verringerter Größe ''(Miniatur)'' hin.\nBitte prüfen Sie, ob Sie das Bild in voller Auflösung vorliegen haben und laden dieses unter dem Originalnamen hoch.",
-    "fileexists-forbidden": "Unter diesem Namen existiert bereits eine Datei und sie kann nicht überschrieben werden. Bitte gehen Sie zurück und laden Sie die Datei unter einem anderen Namen hoch. [[File:$1|thumb|center|$1]]",
-    "fileexists-shared-forbidden": "Unter diesem Namen existiert bereits eine Datei im zentralen Medienarchiv.\nWenn Sie diese Datei trotzdem hochladen möchten, gehen Sie bitte zurück und ändern den Namen.\n[[File:$1|thumb|center|$1]]",
-    "file-deleted-duplicate": "Eine mit dieser identische Datei ([[:$1]]) wurde früher gelöscht. Sehen Sie das Lösch-Logbuch ein, bevor Sie sie hochladen.",
-    "uploadwarning-text": "Bitte ändern Sie unten die Dateibeschreibung und versuchen Sie es erneut.",
-    "uploadfromurl-queued": "Ihr Upload befindet sich nun in der Warteschlange.",
-    "php-uploaddisabledtext": "Das Hochladen von Dateien wurde in PHP deaktiviert.\nBitte überprüfen Sie die <code>file_uploads</code>-Einstellung.",
-    "filewasdeleted": "Eine Datei mit diesem Namen wurde schon einmal hochgeladen und zwischenzeitlich wieder gelöscht. Bitte prüfen Sie zuerst den Eintrag im $1, bevor Sie die Datei wirklich speichern.",
-    "filename-bad-prefix": "Der Dateiname beginnt mit '''„$1“'''. Dies ist im allgemeinen der von einer Digitalkamera vorgegebene Dateiname und daher nicht sehr aussagekräftig.\nBitte geben Sie der Datei einen Namen, der den Inhalt besser beschreibt.",
-    "upload-file-error-text": "Bei der Erstellung einer temporären Datei auf dem Server ist ein interner Fehler aufgetreten.\nBitte informieren Sie einen [[Special:ListUsers/sysop|Administrator]].",
-    "upload-misc-error-text": "Beim Hochladen ist ein unbekannter Fehler aufgetreten.\nPrüfen Sie die URL auf Fehler, den Online-Status der Seite und versuchen es erneut.\nWenn das Problem weiter besteht, informieren Sie einen [[Special:ListUsers/sysop|Administrator]].",
-    "uploadstash-badtoken": "Das Entfernen der vorab gespeicherten Dateien war erfolglos, vielleicht weil Ihre Sitzungsdaten abgelaufen sind. Bitte versuchen Sie es erneut.",
-    "img-auth-nopathinfo": "PATH_INFO fehlt.\nIhr Server ist nicht dafür eingerichtet, diese Information weiterzugeben.\nSie könnte CGI-gestützt sein und kann daher img_auth nicht ermöglichen.\nSiehe auch http://www.mediawiki.org/wiki/Manual:Image_Authorization.",
-    "img-auth-nologinnWL": "Sie sind nicht angemeldet und „$1“ ist nicht in der weißen Liste.",
-    "img-auth-isdir": "Sie versuchen, auf ein Verzeichnis „$1“ zuzugreifen.\nNur Dateizugriff ist erlaubt.",
-    "upload-curl-error6-text": "Die angegebene URL ist nicht erreichbar. Prüfen Sie sowohl die URL auf Fehler als auch den Online-Status der Seite.",
-    "upload-curl-error28-text": "Die Seite braucht zu lange, um zu antworten. Prüfen Sie, ob die Seite online ist, warten Sie einen kurzen Moment und versuchen Sie es dann erneut. Es kann sinnvoll sein, es zu einem anderen Zeitpunkt erneut zu versuchen.",
-    "upload_source_file": " (eine Datei auf Ihrem Computer)",
-    "filehist-help": "Klicken Sie auf einen Zeitpunkt, um diese Version zu laden.",
-    "sharedupload-desc-edit": "Diese Datei stammt aus $1 und kann auf anderen Projekten verwendet werden.\nVielleicht möchten Sie die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.",
-    "sharedupload-desc-create": "Diese Datei stammt aus $1 und kann von anderen Projekten verwendet werden.\nVielleicht möchten Sie die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.",
-    "filepage-nofile-link": "Es ist keine Datei dieses Namens vorhanden. Sie können jedoch [$1 diese Datei hochladen].",
-    "filerevert-intro": "Sie setzen die Datei '''[[Media:$1|$1]]''' auf die [$4 Version vom $2, $3 Uhr] zurück.",
-    "filedelete-intro": "Sie löschen die Datei '''„[[Media:$1|$1]]“''' inklusive ihrer Versionsgeschichte.",
-    "filedelete-intro-old": "Sie löschen von der Datei '''„[[Media:$1|$1]]“''' die [$4 Version vom $2, $3 Uhr].",
-    "unusedtemplatestext": "Diese Seite listet alle Seiten im {{ns:template}}-Namensraum auf, die nicht in anderen Seiten eingebunden sind.\nÜberprüfen Sie andere Links zu den Vorlagen, bevor Sie diese löschen.",
-    "unusedimagestext": "Bitte beachten Sie, dass andere Webseiten eine Datei mit einer direkten URL verlinken können. Sie könnte daher hier aufgelistet sein, obwohl sie in aktiver Verwendung ist.",
-    "notargettext": "Sie haben nicht angegeben, auf welche Seite diese Funktion angewendet werden soll.",
-    "booksources-invalid-isbn": "Vermutlich ist die ISBN ungültig.\nBitte prüfen Sie, ob sie korrekt von der Quelle übertragen wurde.",
-    "cachedspecial-viewing-cached-ttl": "Sie sehen die gecachte Version dieser Seite, die bis zu $1 alt sein kann.",
-    "cachedspecial-viewing-cached-ts": "Sie sehen die gecachte Version dieser Seite, die möglicherweise nicht aktuell ist.",
-    "mailnologintext": "Sie müssen [[Special:UserLogin|angemeldet sein]] und eine bestätigte E-Mail-Adresse in Ihren [[Special:Preferences|Einstellungen]] eingetragen haben, um anderen Benutzern E-Mails schicken zu können.",
-    "emailpagetext": "Sie können {{GENDER:$1|dem Benutzer|der Benutzerin}} mit dem unten stehenden Formular eine E-Mail senden.\nAls Absender wird die E-Mail-Adresse aus Ihren [[Special:Preferences|Einstellungen]] eingetragen, damit {{GENDER:$1|der Benutzer|die Benutzerin}} Ihnen direkt antworten kann.",
-    "emailccsubject": "Kopie Ihrer Nachricht an $1: $2",
-    "emailsenttext": "Ihre E-Mail wurde verschickt.",
-    "nowatchlist": "Es befinden sich keine Einträge auf Ihrer Beobachtungsliste.",
-    "watchlistanontext": "Sie müssen sich $1, um Ihre Beobachtungsliste sehen oder Einträge auf ihr bearbeiten zu können.",
-    "watchnologin": "Sie sind nicht angemeldet",
-    "watchnologintext": "Sie müssen [[Special:UserLogin|angemeldet]] sein, um Ihre Beobachtungsliste bearbeiten zu können.",
-    "addedwatchtext": "Die Seite „[[:$1]]“ wurde zu Ihrer [[Special:Watchlist|Beobachtungsliste]] hinzugefügt.\n\nSpätere Änderungen an dieser Seite und der dazugehörigen Diskussionsseite werden dort gelistet.",
-    "removedwatchtext": "Die Seite „[[:$1]]“ wurde von Ihrer [[Special:Watchlist|Beobachtungsliste]] entfernt.",
-    "watchlist-details": "Sie beobachten {{PLURAL:$1|1 Seite|$1 Seiten}}.",
-    "watchlistcontains": "Ihre Beobachtungsliste enthält $1 {{PLURAL:$1|Seite|Seiten}}.",
-    "enotif_body": "Hallo $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nZusammenfassung des Bearbeiters: $PAGESUMMARY $PAGEMINOREDIT\n\nKontakt zum Bearbeiter:\nE-Mail: $PAGEEDITOR_EMAIL\nWiki: $PAGEEDITOR_WIKI\n\nBei weiterer Aktivität auf der Seite werden Ihnen so lange keine weiteren Benachrichtigungs-E-Mails gesendet, bis Sie die Seite wieder angemeldet besucht haben.\nAuf Ihrer Beobachtungsliste können Sie alle Benachrichtigungsmarkierungen zusammen zurücksetzen.\n\nIhr freundliches {{SITENAME}}-Benachrichtigungssystem\n\n--\nUm die Einstellungen der E-Mail-Benachrichtigung anzupassen, besuchen Sie {{canonicalurl:{{#special:Preferences}}}}.\n\nUm die Einstellungen Ihrer Beobachtungsliste anzupassen, besuchen Sie {{canonicalurl:{{#special:EditWatchlist}}}}.\n\nUm diese Seite von Ihrer Beobachtungsliste zu entfernen, besuchen Sie $UNWATCHURL.\n\nRückmeldungen und weitere Hilfe: {{canonicalurl:{{MediaWiki:Helppage}}}}",
-    "historywarning": "'''Achtung:''' Die Seite, die Sie löschen möchten, hat eine Versionsgeschichte mit etwa $1 {{PLURAL:$1|Version|Versionen}}:",
-    "confirmdeletetext": "Sie sind dabei, eine Seite mit allen zugehörigen älteren Versionen zu löschen. Bitte bestätigen Sie, dass Sie sich der Konsequenzen bewusst sind, und dass Sie in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] handeln.",
-    "deletedtext": "„$1“ wurde gelöscht. Im $2 finden Sie eine Liste der letzten Löschungen.",
-    "sessionfailure": "Es gab ein Problem bei der Übertragung Ihrer Benutzerdaten.\nDiese Aktion wurde daher sicherheitshalber abgebrochen, um eine falsche Zuordnung Ihrer Änderungen zu einem anderen Benutzer zu verhindern.\nBitte gehen Sie zurück zur vorherigen Seite, laden Sie sie erneut und versuchen Sie, den Vorgang erneut auszuführen.",
-    "protect-text": "Hier können Sie den Schutzstatus der Seite „$1“ einsehen und ändern.",
-    "protect-locked-blocked": "Sie können den Seitenschutz nicht ändern, da Ihr Benutzerkonto gesperrt ist. Hier sind die aktuellen Seitenschutz-Einstellungen der Seite '''„$1“:'''",
-    "protect-locked-access": "Ihr Benutzerkonto verfügt nicht über die notwendigen Rechte zur Änderung des Seitenschutzes. Hier sind die aktuellen Seitenschutzeinstellungen für die Seite '''„$1“:'''",
-    "protect-cantedit": "Sie können die Sperre dieser Seite nicht ändern, da Sie keine Berechtigung zum Bearbeiten der Seite haben.",
-    "undeleteextrahelp": "* Um die Seite mitsamt aller Versionen wiederherzustellen, wählen Sie keine Version aus, geben eine Begründung an und klicken dann auf „{{int:undeletebtn}}“.\n* Um lediglich bestimmte Versionen der Seite wiederherzustellen, wählen Sie die betreffenden Versionen einzeln aus, geben eine Begründung an und klicken dann auf „{{int:undeletebtn}}“.",
-    "undeletehistory": "Wenn Sie diese Seite wiederherstellen, werden auch alle alten Versionen wiederhergestellt.\nWenn seit der Löschung eine neue Seite gleichen Namens erstellt wurde, werden die wiederhergestellten Versionen chronologisch in die Versionsgeschichte eingeordnet.",
-    "undeleterevdel": "Die Wiederherstellung wird nicht durchgeführt, wenn die aktuellste Version versteckt ist oder versteckte Teile enthält.\nIn diesem Fall darf die aktuellste Version nicht markiert werden oder ihr Status muss auf den einer normalen Version geändert werden.\nVersionen von Dateien, auf die Sie keinen Zugriff haben, werden nicht wiederhergestellt.",
-    "undeletedpage": "'''$1''' wurde wiederhergestellt.\n\nIm [[Special:Log/delete|Lösch-Logbuch]] finden Sie eine Übersicht der gelöschten und wiederhergestellten Seiten.",
-    "undelete-show-file-confirm": "Sind Sie sicher, dass Sie eine gelöschte Version der Datei „<nowiki>$1</nowiki>“ vom $2, $3 Uhr sehen wollen?",
-    "tooltip-namespace_association": "Dieses Auswahlfeld anklicken, um den Ihrer Auswahl zugehörigen Diskussionsnamensraum, oder im umgekehrten Fall, den zugehörigen Namensraum, mit einzubeziehen",
-    "blockiptext": "Mit diesem Formular sperren Sie eine IP-Adresse oder einen Benutzernamen, so dass von dort keine Änderungen mehr vorgenommen werden können.\nDies sollte nur erfolgen, um Vandalismus zu verhindern und in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]].\nBitte geben Sie den Grund für die Sperre an.",
-    "ipb-blockingself": "Sie sind gerade dabei, sich selbst zu sperren! Möchten Sie das wirklich tun?",
-    "ipb-confirmhideuser": "Sie sind gerade dabei, einen Benutzer im Modus „Benutzer verstecken“ zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchten Sie das wirklich tun?",
-    "unblockiptext": "Mit diesem Formular können Sie eine IP-Adresse oder einen Benutzer freigeben.",
-    "autoblocker": "Automatische Sperre, da Sie eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzen. Grund der Benutzersperre: „$2“.",
-    "ipb-needreblock": "„$1“ ist bereits gesperrt. Möchten Sie die Sperrparameter ändern?",
-    "proxyblockreason": "Ihre IP-Adresse wurde gesperrt, da sie ein offener Proxy ist. Bitte kontaktieren Sie Ihren Internet-Provider oder Ihre Systemadministratoren und informieren Sie sie über dieses mögliche Sicherheitsproblem.",
-    "cant-see-hidden-user": "Der Benutzer, den Sie versuchen zu sperren, wurde bereits gesperrt und verborgen. Da Sie das „hideuser“-Recht nicht haben, können Sie die Benutzersperre nicht sehen und nicht bearbeiten.",
-    "ipbblocked": "Sie können keine anderen Benutzer sperren oder entsperren, da Sie selbst gesperrt sind",
-    "ipbnounblockself": "Sie haben nicht die Berechtigung, sich selbst zu entsperren",
-    "locknoconfirm": "Sie haben das Bestätigungsfeld nicht markiert.",
-    "lockdbsuccesstext": "Die {{SITENAME}}-Datenbank wurde gesperrt.<br />Bitte geben Sie die Datenbank [[Special:UnlockDB|wieder frei]], sobald die Wartung abgeschlossen ist.",
-    "movepagetext": "Mit untenstehendem Formular können Sie eine Seite umbenennen, indem Sie sie mitsamt allen Versionen auf einen neuen Titel verschieben.\nDer alte Titel wird danach zum neuen weiterleiten.\nSie können Weiterleitungen, die auf den Originaltitel verlinken, automatisch korrigieren lassen.\nStellen Sie sicher, dass Sie im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|defekten Weiterleitungen]] überprüfen.\nSie sind dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.\n\nDie Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, letztere ist eine Weiterleitung ohne Versionsgeschichte.\nDies bedeutet, dass Sie die Umbenennung rückgängig machen können, sofern Sie einen Fehler gemacht haben. Sie können hingegen keine existierende Seite überschreiben.\n\n'''Warnung!'''\nDie Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben.\nSie sollten daher die Konsequenzen verstanden haben, bevor Sie jetzt fortfahren.",
-    "movepagetext-noredirectfixer": "Mit untenstehendem Formular können Sie eine Seite umbenennen, indem Sie sie mitsamt allen Versionen auf einen neuen Titel verschieben.\nDer alte Titel wird danach zum neuen weiterleiten.\nStellen Sie sicher, dass Sie im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|defekten Weiterleitungen]] überprüfen.\nSie sind dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.\n\nDie Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese ist eine Weiterleitung ohne Versionsgeschichte.\nDies bedeutet, dass Sie die Umbenennung rückgängig machen können, sofern Sie einen Fehler gemacht haben. Sie können hingegen keine existierende Seite überschreiben.\n\n'''Warnung!'''\nDie Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben.\nSie sollten daher die Konsequenzen verstanden haben, bevor Sie jetzt fortfahren.",
-    "movepagetalktext": "Die dazugehörige Diskussionsseite wird, sofern vorhanden, mitverschoben, '''es sei denn:'''\n*Es existiert bereits eine Diskussionsseite mit diesem Namen, oder\n*Sie wählen die unten stehende Option ab.\n\nIn diesen Fällen müssen Sie, falls gewünscht, den Inhalt der Seite von Hand verschieben oder zusammenführen.\n\nBitte den '''neuen''' Titel unter '''Ziel''' eintragen, darunter die Umbenennung bitte '''begründen.'''",
-    "moveuserpage-warning": "'''Warnung:''' Sie sind dabei, eine Benutzerseite zu verschieben. Bitte bedenken Sie, dass dadurch nur die Benutzerseite verschoben, '''nicht''' aber der Benutzer umbenannt wird.",
-    "movenologintext": "Sie müssen ein registrierter Benutzer und [[Special:UserLogin|angemeldet]] sein, um eine Seite zu verschieben.",
-    "movenotallowed": "Sie haben nicht die erforderliche Berechtigung, um Seiten verschieben zu können.",
-    "movenotallowedfile": "Sie haben nicht die erforderliche Berechtigung, um Dateien verschieben zu können.",
-    "cant-move-user-page": "Sie haben nicht die erforderliche Berechtigung, Benutzerhauptseiten verschieben zu können.",
-    "cant-move-to-user-page": "Sie haben nicht die Berechtigung, Seiten auf eine Benutzerseite zu verschieben (mit Ausnahme von Benutzerunterseiten).",
-    "articleexists": "Unter diesem Namen existiert bereits eine Seite. Bitte wählen Sie einen anderen Namen.",
-    "delete_and_move_text": "== Löschung erforderlich ==\n\nDie Seite „[[:$1]]“ existiert bereits. Möchten Sie diese löschen, um die Seite verschieben zu können?",
-    "file-exists-sharedrepo": "Der gewählte Dateiname wird bereits in einem gemeinsam genutzten Repositorium verwendet.\nBitte wählen Sie einen anderen Namen.",
-    "exporttext": "Mit dieser Spezialseite können Sie den Text inklusive der Versionsgeschichte einzelner Seiten in eine XML-Datei exportieren.\nDie Datei kann in ein anderes MediaWiki-Wiki über die [[Special:Import|Importfunktion]] eingespielt werden.\n\nTragen Sie den oder die entsprechenden Seitentitel in das folgende Textfeld ein (pro Zeile jeweils nur eine Seite).\n\nAlternativ ist der Export auch mit der Syntax [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] möglich, beispielsweise für die [[{{MediaWiki:Mainpage}}]].",
-    "allmessagestext": "Dies ist eine Liste der MediaWiki-Systemtexte.\nBitte besuchen Sie die Seiten [https://www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisierung] und [//translatewiki.net translatewiki.net], sofern Sie sich an der Lokalisierung von MediaWiki beteiligen möchten.",
-    "import-interwiki-text": "Wählen Sie 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.",
-    "import-token-mismatch": "Verlust der Sessiondaten. Bitte versuchen Sie es erneut.",
-    "import-error-edit": "Die Seite „$1“ wurde nicht importiert, da Sie nicht berechtigt sind, sie zu bearbeiten.",
-    "import-error-create": "Die Seite „$1“ wurde nicht importiert, da Sie nicht berechtigt sind, sie zu erstellen.",
-    "javascripttest-pagetext-frameworks": "Bitte wählen Sie eine der folgenden Prüfumgebungen aus: $1",
-    "javascripttest-pagetext-skins": "Wählen Sie eine Benutzeroberfläche zur Durchführung der Tests aus:",
-    "tooltip-pt-userpage": "Ihre Benutzerseite",
-    "tooltip-pt-anonuserpage": "Benutzerseite der IP-Adresse, von der aus Sie Änderungen durchführen",
-    "tooltip-pt-mytalk": "Ihre Diskussionsseite",
-    "tooltip-pt-mycontris": "Liste Ihrer Beiträge",
-    "tooltip-n-mainpage": "Besuchen Sie die Hauptseite",
-    "tooltip-n-mainpage-description": "Besuchen Sie die Hauptseite",
-    "tooltip-n-portal": "Über das Projekt, was Sie tun können, wo was zu finden ist",
-    "tooltip-watch": "Diese Seite zu Ihrer Beobachtungsliste hinzufügen",
-    "tooltip-summary": "Geben Sie eine kurze Zusammenfassung ein.",
-    "notacceptable": "Der Wiki-Server kann die Daten nicht für Ihr Ausgabegerät aufbereiten.",
-    "spamprotectiontext": "Der Text, die Sie speichern wollen, wurde vom Spamschutzfilter blockiert.\nDas liegt wahrscheinlich an einem Link auf eine externe Seite.",
-    "markedaspatrollederrortext": "Sie müssen eine Seitenänderung auswählen.",
-    "mediawarning": "'''Warnung:''' Dieser Dateityp kann böswilligen Programmcode enthalten.\nDurch das Herunterladen und Öffnen der Datei kann Ihr Computer beschädigt werden.",
-    "confirmemail_noemail": "Sie haben keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|persönlichen Einstellungen]] eingetragen.",
-    "confirmemail_text": "{{SITENAME}} erfordert, dass Sie Ihre E-Mail-Adresse bestätigen (authentifizieren), bevor Sie die erweiterten E-Mail-Funktionen benutzen können. Klicken Sie bitte auf die unten stehende, mit „Bestätigungscode zuschicken“ beschriftete Schaltfläche, damit eine automatisch erstellte E-Mail an die angegebene Adresse geschickt wird. Diese E-Mail enthält eine Web-Adresse mit einem Bestätigungscode. Indem Sie diese Webseite in Ihrem Webbrowser öffnen, bestätigen Sie, dass die angegebene E-Mail-Adresse korrekt und gültig ist.",
-    "confirmemail_pending": "Es wurde Ihnen bereits ein Bestätigungscode per E-Mail zugeschickt.\nWenn Sie Ihr Benutzerkonto erst vor kurzem erstellt haben, warten Sie bitte noch ein paar Minuten auf die E-Mail, bevor Sie einen neuen Code anfordern.",
-    "confirmemail_oncreate": "Ein Bestätigungs-Code wurde an Ihre E-Mail-Adresse gesandt. Dieser Code wird für die Anmeldung nicht benötigt, jedoch wird er zur Aktivierung der E-Mail-Funktionen innerhalb des Wikis gebraucht.",
-    "confirmemail_sendfailed": "{{SITENAME}} konnte die Bestätigungs-E-Mail nicht an Sie versenden.\nBitte prüfen Sie die E-Mail-Adresse auf ungültige Zeichen.\n\nRückmeldung des Mailservers: $1",
-    "confirmemail_invalid": "Ungültiger Bestätigungscode. Möglicherweise ist der Bestätigungszeitraum verstrichen. Versuchen Sie bitte, die Bestätigung zu wiederholen.",
-    "confirmemail_needlogin": "Sie müssen sich $1, um Ihre E-Mail-Adresse zu bestätigen.",
-    "confirmemail_success": "Ihre E-Mail-Adresse wurde erfolgreich bestätigt. Sie können sich jetzt [[Special:UserLogin|anmelden]].",
-    "confirmemail_loggedin": "Ihre E-Mail-Adresse wurde erfolgreich bestätigt.",
-    "confirmemail_body": "Hallo,\n\njemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat das Benutzerkonto „$2“ bei {{SITENAME}} registriert.\n\nUm die E-Mail-Funktionen von {{SITENAME}} (wieder) zu aktivieren und um zu bestätigen,\ndass dieses Benutzerkonto wirklich zu Ihrer E-Mail-Adresse und damit zu Ihnen gehört, öffnen Sie bitte folgenden Link in Ihrem Browser:\n\n$3\n\nWenn Sie das genannte Benutzerkonto *nicht* registriert haben, folgen Sie diesem Link, um den Bestätigungsprozess abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis zum $6, $7 Uhr.",
-    "confirmemail_body_set": "Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst,\nhat die E-Mail-Adresse des Benutzerkontos „$2“ auf {{SITENAME}} zu dieser E-Mail-Adresse abgeändert.\n\nUm zu bestätigen, dass dieses Benutzerkonto wirklich zu Ihnen gehört\nund um die E-Mail-Funktionen auf {{SITENAME}} zu aktivieren, öffnen Sie bitte den folgenden Link in Ihrem Browser:\n\n$3\n\nFalls das Konto *nicht* zu Ihnen gehört, bitte den nachfolgenden Link öffnen,\num die Bestätigung der E-Mail-Adresse abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis $4.",
-    "deletedwhileediting": "Achtung: Diese Seite wurde gelöscht, nachdem Sie angefangen haben sie zu bearbeiten!\nIm [{{fullurl:{{#special:Log}}|type=delete&page={{FULLPAGENAMEE}}}} Lösch-Logbuch] finden Sie den Grund für die Löschung.\nWenn Sie die Seite speichern, wird sie neu angelegt.",
-    "confirmrecreate": "Benutzer [[User:$1|$1]] ([[User talk:$1|Diskussion]]) hat diese Seite gelöscht, nachdem Sie angefangen haben, sie zu bearbeiten. Die Begründung lautete:\n: ''$2''\nBitte bestätigen Sie, dass Sie diese Seite wirklich neu erstellen möchten.",
-    "livepreview-failed": "Die Vorschau kann nicht sofort angezeigt werden!\nBitte nutzen Sie die reguläre Vorschau.",
-    "watchlistedit-numitems": "Ihre Beobachtungsliste enthält {{PLURAL:$1|einen Eintrag|$1 Einträge}}. Die Diskussionsseiten wurden dabei nicht mitgezählt.",
-    "watchlistedit-noitems": "Ihre Beobachtungsliste ist leer.",
-    "watchlistedit-normal-explain": "Dies sind die Einträge Ihrer Beobachtungsliste. Um Einträge zu entfernen, markieren Sie die Kästchen neben den Einträgen und klicken Sie am Ende der Seite auf „{{int:Watchlistedit-normal-submit}}“. Sie können Ihre Beobachtungsliste auch im [[Special:EditWatchlist/raw|Listenformat bearbeiten]].",
-    "watchlistedit-normal-done": "{{PLURAL:$1|Ein Eintrag wurde|$1 Einträge wurden}} von Ihrer Beobachtungsliste entfernt:",
-    "watchlistedit-raw-explain": "Dies sind die Einträge Ihrer Beobachtungsliste im Listenformat. Die Einträge können zeilenweise gelöscht oder hinzugefügt werden.\nPro Zeile ist ein Eintrag erlaubt.\nSobald Sie fertig sind, klicken Sie auf „{{int:Watchlistedit-raw-submit}}“.\nSie können auch die [[Special:EditWatchlist|Standardseite]] zum Bearbeiten benutzen.",
-    "watchlistedit-raw-done": "Ihre Beobachtungsliste wurde gespeichert.",
-    "dberr-again": "Warten Sie einige Minuten und versuchen Sie dann neu zuladen.",
-    "dberr-usegoogle": "Sie könnten in der Zwischenzeit mit Google suchen.",
-    "dberr-outofdate": "Beachten Sie, dass der Suchindex unserer Inhalte bei Google veraltet sein kann.",
-    "feedback-bugornote": "Sofern Sie detailliert ein technisches Problem beschreiben möchten, melden Sie bitte [$1 einen Fehler].\nAnderenfalls können Sie auch das untenstehende einfache Formular nutzen. Ihr Kommentar wird, zusammen mit Ihrem Benutzernamen und der Version des von Ihnen verwendeten Webbrowsers sowie Betriebssystems, auf der Seite „[$3 $2]“ hinzugefügt.",
-    "feedback-thanks": "Vielen Dank. Ihre Rückmeldung wurde auf der Seite „[$2 $1]“ gespeichert.",
-    "feedback-bugcheck": "Super! Bitte überprüfen Sie noch, ob es sich hierbei nicht um einen bereits [$1 bekannten Fehler] handelt.",
-    "api-error-badaccess-groups": "Sie haben nicht die Berechtigung Dateien in dieses Wiki hochzuladen.",
-    "api-error-hookaborted": "Die von Ihnen vorgesehene Anpassung kann nicht durchgeführt werden (Unterbrechung durch eine Programmschnittstelle).",
-    "api-error-mustbeloggedin": "Um Dateien hochladen zu können, müssen Sie angemeldet sein."
+       "@metadata": {
+               "authors": [
+                       "*Surak*",
+                       "ChrisiPK",
+                       "Das Schäfchen",
+                       "Filzstift",
+                       "Geitost",
+                       "Imre",
+                       "Jimmy Collins <jimmy.collins@web.de>",
+                       "Kghbln",
+                       "Leithian",
+                       "Merlissimo",
+                       "MichaelFrey",
+                       "Michawiki",
+                       "Pill",
+                       "Raimond Spekking (Raymond) <raimond.spekking@gmail.com> since January 2007",
+                       "SVG",
+                       "Se4598",
+                       "The Evil IP address",
+                       "Tim Bartel (avatar) <wikipedia@computerkultur.org> formal addressing",
+                       "Tischbeinahe",
+                       "Umherirrender",
+                       "Urhixidur"
+               ]
+       },
+       "tog-enotifrevealaddr": "Ihre E-Mail-Adresse in Benachrichtigungs-E-Mails anzeigen",
+       "view-pool-error": "Entschuldigung, die Server sind im Moment überlastet.\nZu viele Benutzer versuchen, diese Seite zu besuchen.\nBitte warten Sie einige Minuten, bevor Sie es noch einmal versuchen.\n\n$1",
+       "badaccess-group0": "Sie haben nicht die erforderlichen Benutzerrechte für diese Aktion.",
+       "youhavenewmessages": "Sie haben $1 ($2).",
+       "youhavenewmessagesmulti": "Sie haben neue Nachrichten: $1",
+       "enterlockreason": "Bitte geben Sie einen Grund ein, warum die Datenbank gesperrt werden soll und eine Abschätzung über die Dauer der Sperrung",
+       "readonlytext": "Die Datenbank ist vorübergehend für Neueinträge und Änderungen gesperrt. Bitte versuchen Sie es später noch einmal.\n\nGrund der Sperrung: $1",
+       "missing-article": "Der Text von „$1“ $2 wurde nicht in der Datenbank gefunden.\n\nDie Seite ist möglicherweise gelöscht oder verschoben worden.\n\nFalls dies nicht der Fall ist, haben Sie eventuell einen Fehler in der Software gefunden. Bitte melden Sie dies einem [[Special:ListUsers/sysop|Administrator]] unter Nennung der URL.",
+       "actionthrottledtext": "Im Rahmen einer Anti-Spam-Maßnahme kann diese Aktion in einem kurzen Zeitabstand nur begrenzt oft ausgeführt werden. Diese Grenze haben Sie überschritten.\nBitte versuchen Sie es in ein paar Minuten erneut.",
+       "viewsourcetext": "Sie können den Quelltext dieser Seite betrachten und kopieren:",
+       "viewyourtext": "Sie können den Quelltext '''Ihrer Bearbeitung''' dieser Seite betrachten und kopieren:",
+       "protectedinterface": "Diese Seite enthält Text für die Benutzeroberfläche der Software auf diesem Wiki und ist geschützt, um Missbrauch vorzubeugen.\nNutzen Sie bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
+       "editinginterface": "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.\nÄnderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.\nNutzen Sie bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
+       "namespaceprotected": "Sie haben nicht die erforderliche Berechtigung, um Seiten im Namensraum '''$1''' bearbeiten zu können.",
+       "customcssprotected": "Sie haben nicht die Berechtigung, diese CSS enthaltende Seite zu bearbeiten, da sie die persönlichen Einstellungen eines anderen Benutzers enthält.",
+       "customjsprotected": "Sie haben nicht die Berechtigung, diese JavaScript enthaltende Seite zu bearbeiten, da es sich hierbei um die persönlichen Einstellungen eines anderen Benutzers handelt.",
+       "mycustomjsprotected": "Sie haben keine Berechtigung, diese JavaScript-Seite zu bearbeiten.",
+       "myprivateinfoprotected": "Sie haben keine Berechtigung, Ihre privaten Informationen zu bearbeiten.",
+       "mypreferencesprotected": "Sie haben keine Berechtigung, Ihre Einstellungen zu bearbeiten.",
+       "exception-nologin-text": "Sie müssen sich [[Special:Userlogin|anmelden]], um auf diese Seite oder Aktion zugreifen zu können.",
+       "exception-nologin-text-manual": "Sie müssen sich $1, um auf diese Seite oder Aktion zugreifen zu können.",
+       "logouttext": "'''Sie sind nun abgemeldet.'''\n\nBeachten Sie, dass einige Seiten noch anzeigen können, dass Sie angemeldet sind, solange Sie nicht Ihren Browsercache geleert haben.",
+       "welcomecreation-msg": "Ihr Benutzerkonto wurde erstellt.\nVergessen Sie nicht, Ihre [[Special:Preferences|{{SITENAME}}-Einstellungen]] zu ändern.",
+       "userlogin-yourname-ph": "Geben Sie Ihren Benutzernamen ein",
+       "userlogin-yourpassword-ph": "Geben Sie Ihr Passwort ein",
+       "createacct-yourpassword-ph": "Geben Sie Ihr Passwort ein",
+       "createacct-yourpasswordagain-ph": "Geben Sie das Passwort erneut ein",
+       "yourdomainname": "Ihre Domain:",
+       "password-change-forbidden": "Sie können auf diesem Wiki keine Passwörter ändern.",
+       "externaldberror": "Entweder liegt ein Fehler bei der externen Authentifizierung vor oder Sie dürfen Ihr externes Benutzerkonto nicht aktualisieren.",
+       "userlogin-noaccount": "Sie haben noch kein Benutzerkonto?",
+       "nologin": "Sie haben kein Benutzerkonto? $1.",
+       "gotaccount": "Haben Sie bereits ein Benutzerkonto? '''$1'''.",
+       "userlogin-loggedin": "Sie sind bereits als {{GENDER:$1|$1}} angemeldet.\nBenutzen Sie das unten stehende Formular, um sich unter einem anderen Benutzernamen anzumelden.",
+       "createacct-email-ph": "Geben Sie Ihre E-Mail-Adresse ein",
+       "createacct-reason-ph": "Warum erstellen Sie ein anderes Benutzerkonto?",
+       "createacct-imgcaptcha-ph": "Geben Sie den Text ein, den Sie oben sehen.",
+       "createacct-benefit-heading": "{{SITENAME}} wird von Menschen wie Ihnen geschaffen.",
+       "userexists": "Dieser Benutzername ist schon vergeben.\nBitte wählen Sie einen anderen.",
+       "nocookiesnew": "Der Benutzerzugang wurde erstellt, aber Sie sind nicht angemeldet.\n{{SITENAME}} benötigt für diese Funktion Cookies, bitte aktivieren Sie diese und melden sich dann mit Ihrem neuen Benutzernamen und dem zugehörigen Passwort an.",
+       "nocookieslogin": "{{SITENAME}} benutzt Cookies zur Anmeldung der Benutzer.\nSie haben Cookies deaktiviert, bitte aktivieren Sie diese und versuchen Sie es erneut.",
+       "nocookiesfornew": "Das Benutzerkonto wurde nicht erstellt, da die Datenherkunft nicht ermittelt werden konnte.\nBitte stellen Sie sicher, dass Sie Cookies aktiviert haben. Laden Sie diese Seite danach erneut und versuchen Sie es noch einmal.",
+       "noname": "Sie müssen einen gültigen Benutzernamen angeben.",
+       "loginsuccess": "Sie sind jetzt als „$1“ bei {{SITENAME}} angemeldet.",
+       "nosuchuser": "Der Benutzername „$1“ existiert nicht.\nÜberprüfen Sie die Schreibweise (Groß-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|melden Sie sich als neuer Benutzer an]].",
+       "nosuchusershort": "Der Benutzername „$1“ ist nicht vorhanden. Bitte überprüfen Sie die Schreibweise.",
+       "nouserspecified": "Bitte geben Sie einen Benutzernamen an.",
+       "wrongpassword": "Das Passwort ist falsch. Bitte versuchen Sie es erneut.",
+       "wrongpasswordempty": "Es wurde kein Passwort eingegeben. Bitte versuchen Sie es erneut.",
+       "password-name-match": "Ihr Passwort muss sich von Ihrem Benutzernamen unterscheiden.",
+       "passwordremindertext": "Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.\n\nDas automatisch generierte Passwort für Benutzer „$2“ lautet nun: $3\n\nFalls Sie dies wirklich gewünscht haben, sollten Sie sich jetzt anmelden und das Passwort ändern.\nDas neue Passwort ist {{PLURAL:$5|1 Tag|$5 Tage}} gültig.\n\nBitte ignorieren Sie diese E-Mail, falls Sie sie nicht selbst angefordert haben. Das alte Passwort bleibt weiterhin gültig.",
+       "noemailcreate": "Sie müssen eine gültige E-Mail-Adresse angeben",
+       "passwordsent": "Ein neues, temporäres Passwort wurde an die E-Mail-Adresse von Benutzer „$1“ gesandt.\nBitte melden Sie sich damit an, sobald sie es erhalten haben. Das alte Passwort bleibt weiterhin gültig.",
+       "blocked-mailpassword": "Die von Ihnen verwendete IP-Adresse ist für das Ändern von Seiten gesperrt. Um einen Missbrauch zu verhindern, wurde die Möglichkeit zur Anforderung eines neuen Passwortes ebenfalls gesperrt.",
+       "eauthentsent": "Eine Bestätigungs-E-Mail wurde an die angegebene Adresse verschickt.\n\nBevor eine E-Mail von anderen Benutzern über die E-Mail-Funktion empfangen werden kann, muss die Adresse und ihre tatsächliche Zugehörigkeit zu diesem Benutzerkonto erst bestätigt werden. Bitte befolgen Sie die Hinweise in der Bestätigungs-E-Mail.",
+       "acct_creation_throttle_hit": "Besucher dieses Wikis, die Ihre IP-Adresse verwenden, haben innerhalb des letzten Tages {{PLURAL:$1|1 Benutzerkonto|$1 Benutzerkonten}} erstellt, was die maximal erlaubte Anzahl in dieser Zeitperiode ist.\n\nBesucher, die diese IP-Adresse verwenden, können momentan keine Benutzerkonten mehr erstellen.",
+       "emailauthenticated": "Ihre E-Mail-Adresse wurde am $2 um $3 Uhr bestätigt.",
+       "emailnotauthenticated": "Ihre E-Mail-Adresse ist noch nicht bestätigt. Die folgenden E-Mail-Funktionen stehen erst nach erfolgreicher Bestätigung zur Verfügung.",
+       "noemailprefs": "Geben Sie eine E-Mail-Adresse in den Einstellungen an, damit die nachfolgenden Funktionen zur Verfügung stehen.",
+       "invalidemailaddress": "Die E-Mail-Adresse wird nicht akzeptiert, weil sie ein ungültiges Format (eventuell ungültige Zeichen) zu haben scheint. Bitte geben Sie eine korrekte Adresse ein oder leeren Sie das Feld.",
+       "createaccount-text": "Es wurde für Sie ein Benutzerkonto „$2“ auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für „$2“ ist „$3“. Sie sollten sich nun anmelden und das Passwort ändern.\n\nFalls das Benutzerkonto irrtümlich angelegt wurde, können Sie diese Nachricht ignorieren.",
+       "login-throttled": "Sie haben zu oft versucht, sich anzumelden.\nBitte warten Sie $1, bevor Sie es erneut probieren.",
+       "login-abort-generic": "Ihre Anmeldung war nicht erfolgreich – Abgebrochen",
+       "suspicious-userlogout": "Ihre Abmeldeanfrage wurde verweigert, da sie vermutlich von einem defekten Browser oder einem Cache-Proxy gesendet wurde.",
+       "createacct-another-realname-tip": "Der bürgerliche Name ist optional.\nWenn Sie ihn angeben, wird er für die Zuordnung der Beiträge verwendet.",
+       "resetpass_announce": "Um die Anmeldung abzuschließen, müssen Sie ein neues Passwort festlegen.",
+       "resetpass_text": "<!-- Ergänzen Sie den Text hier -->",
+       "changepassword-success": "Ihr Passwort wurde erfolgreich geändert.",
+       "resetpass-no-info": "Sie müssen sich anmelden, um auf diese Seite direkt zuzugreifen.",
+       "resetpass-wrong-oldpass": "Ungültiges temporäres oder aktuelles Passwort.\nMöglicherweise haben Sie Ihr Passwort bereits erfolgreich geändert oder ein neues temporäres Passwort beantragt.",
+       "passwordreset-capture-help": "Wenn Sie dieses Kästchen ankreuzen, wird die E-Mail-Nachricht mit dem temporären Passwort sowohl Ihnen angezeigt als auch dem Benutzer zugesandt.",
+       "passwordreset-emailtext-ip": "Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat eine Zurücksetzung Ihres\nPassworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}}\nmit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab.\nSie sollten sich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese\nAnfrage getätigt hat oder Sie sich wieder an Ihr ursprüngliches Passwort erinnern können und es nicht länger\nändern möchten, können Sie diese Nachricht ignorieren und weiterhin Ihr altes\nPasswort benutzen.",
+       "passwordreset-emailtext-user": "Benutzer $1 bei {{SITENAME}} hat eine Zurücksetzung Ihres Passworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab. Sie sollten sich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese Anfrage getätigt hat oder Sie sich wieder an Ihr ursprüngliches Passwort erinnern können und es nicht ändern möchten, können Sie diese Nachricht ignorieren und weiterhin Ihr altes Passwort benutzen.",
+       "changeemail-text": "Füllen Sie dieses Formular vollständig aus, um Ihre E-Mail-Adresse zu ändern. Sie müssen Ihr Passwort angeben, um diese Änderung zu bestätigen.",
+       "changeemail-no-info": "Sie müssen angemeldet sein, um direkt auf diese Seite zugreifen zu können.",
+       "resettokens-text": "Sie können Tokens zurücksetzen, welche Ihnen den Zugriff auf bestimmte private Daten ermöglichen, die mit Ihrem Benutzerkonto hier verknüpft sind.\n\nSie sollten dies nur machen, wenn Sie die Tokens versehentlich mit jemandem geteilt haben oder Ihr Konto gefährdet ist.",
+       "sig_tip": "Ihre Signatur mit Zeitstempel",
+       "anoneditwarning": "Sie bearbeiten diese Seite unangemeldet. Wenn Sie sie abspeichern, wird Ihre aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit unwiderruflich '''öffentlich''' einsehbar.",
+       "missingsummary": "'''Hinweis:''' Sie haben keine Zusammenfassung angegeben. Wenn Sie erneut auf „{{int:savearticle}}“ klicken, wird Ihre Änderung ohne Zusammenfassung übernommen.",
+       "missingcommenttext": "Ihr Abschnitt enthält keinen Text.",
+       "missingcommentheader": "'''Achtung:''' Sie haben kein Betreff/Überschrift eingegeben. Wenn Sie erneut auf „{{int:savearticle}}“ klicken, wird Ihre Bearbeitung ohne Überschrift gespeichert.",
+       "blockedtext": "'''Ihr Benutzername oder Ihre IP-Adresse wurde gesperrt.'''\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\nSie könnten $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\nSie können die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für Sie gesperrt wurde.\nIhre aktuelle IP-Adresse ist $3 und die Sperrkennung lautet $5.\nBitte fügen Sie alle Informationen jeder Anfrage hinzu, die Sie stellen.",
+       "autoblockedtext": "Ihre IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der von $1 gesperrt wurde.\nAls Grund wurde angegeben:\n\n:''$2''\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nSie können $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\n\nSie können die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für Sie gesperrt wurde.\n\nIhre aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.\nBitte fügen Sie alle Informationen jeder Anfrage hinzu, die Sie stellen.",
+       "whitelistedittext": "Sie müssen sich $1, um Seiten bearbeiten zu können.",
+       "confirmedittext": "Sie müssen Ihre E-Mail-Adresse erst bestätigen, bevor Sie Bearbeitungen vornehmen können. Bitte ergänzen und bestätigen Sie Ihre E-Mail in den [[Special:Preferences|Einstellungen]].",
+       "nosuchsectiontext": "Sie haben versucht, einen Abschnitt zu bearbeiten, der nicht existiert.\nVermutlich wurde er verschoben oder gelöscht, nachdem Sie die Seite aufgerufen haben.",
+       "loginreqpagetext": "Sie müssen sich $1, um Seiten lesen zu können.",
+       "newarticletext": "Sie sind einem Link zu einer Seite gefolgt, die nicht vorhanden ist.\nUm diese Seite anzulegen, tragen Sie Ihren Text in das untenstehende Bearbeitungsfeld ein (weitere Informationen auf der [$1 Hilfeseite]).\nSofern Sie fälschlicherweise hier sind, klicken Sie auf die Schaltfläche '''Zurück''' Ihres Browsers.",
+       "anontalkpagetext": "----''Diese Seite dient dazu, einem nicht angemeldeten Benutzer Nachrichten zu hinterlassen. Es wird seine IP-Adresse zur Identifizierung verwendet. IP-Adressen können von mehreren Benutzern gemeinsam verwendet werden. Wenn Sie mit den Kommentaren auf dieser Seite nichts anfangen können, richten sie sich vermutlich an einen früheren Inhaber Ihrer IP-Adresse und Sie können sie ignorieren. Sie können sich auch ein [[Special:UserLogin/signup|Benutzerkonto erstellen]] oder sich [[Special:UserLogin|anmelden]], um künftig Verwechslungen mit anderen anonymen Benutzern zu vermeiden.''",
+       "noarticletext": "Diese Seite enthält momentan noch keinen Text.\nSie können diesen Titel auf den anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]],\n<span class=\"plainlinks\">in den zugehörigen [{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbüchern suchen] oder diese Seite [{{fullurl:{{FULLPAGENAME}}|action=edit}} bearbeiten]</span>.",
+       "noarticletext-nopermission": "Diese Seite enthält momentan noch keinen Text.\nSie können ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]] oder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span>. Sie sind allerdings nicht berechtigt diese Seite zu erstellen.",
+       "userpage-userdoesnotexist": "Das Benutzerkonto „<nowiki>$1</nowiki>“ ist nicht vorhanden. Bitte prüfen Sie, ob Sie diese Seite wirklich erstellen/bearbeiten möchten.",
+       "clearyourcache": "'''Hinweis:''' Leeren Sie nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.\n* '''Firefox/Safari:''' ''Umschalttaste'' drücken und gleichzeitig ''Aktualisieren'' anklicken oder entweder ''Strg+F5'' oder ''Strg+R'' (''⌘+R'' auf dem Mac) drücken\n* '''Google Chrome:''' ''Umschalttaste+Strg+R'' (''⌘+Umschalttaste+R'' auf dem Mac) drücken\n* '''Internet Explorer:''' ''Strg+F5'' drücken oder ''Strg'' drücken und gleichzeitig ''Aktualisieren'' anklicken\n* '''Opera:''' ''Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen''",
+       "usercssyoucanpreview": "'''Tipp:''' Benutzen Sie den „{{int:showpreview}}“-Button, um Ihr neues CSS vor dem Speichern zu testen.",
+       "userjsyoucanpreview": "'''Tipp:''' Benutzen Sie den „{{int:showpreview}}“-Button, um Ihr neues JavaScript vor dem Speichern zu testen.",
+       "usercsspreview": "'''Beachten Sie, dass Sie nur eine Vorschau Ihres Benutzer-CSS betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
+       "userjspreview": "'''Beachten Sie, dass Sie nur eine Vorschau Ihres Benutzer-JavaScript betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
+       "sitecsspreview": "'''Beachten Sie, dass Sie nur eine Vorschau dieses CSS betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
+       "sitejspreview": "'''Beachten Sie, dass Sie nur eine Vorschau dieses JavaScript betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
+       "userinvalidcssjstitle": "'''Achtung:''' Die Benutzeroberfläche „$1“ existiert nicht. Bedenken Sie, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also beispielsweise ''{{ns:user}}:Mustermann/vector.css'' an Stelle von ''{{ns:user}}:Mustermann/Vector.css''.",
+       "previewconflict": "Diese Vorschau gibt den Inhalt des oberen Textfeldes wieder. So wird die Seite aussehen, wenn Sie jetzt speichern.",
+       "session_fail_preview": "'''Ihre Bearbeitung konnte nicht gespeichert werden, da Sitzungsdaten verloren gegangen sind.\nBitte versuchen Sie es erneut, indem Sie unter der folgenden Textvorschau nochmals auf „Seite speichern“ klicken.\nSollte das Problem bestehen bleiben, [[Special:UserLogout|melden Sie sich ab]] und danach wieder an.'''",
+       "session_fail_preview_html": "'''Ihre Bearbeitung konnte nicht gespeichert werden, da Sitzungsdaten verloren gegangen sind.'''\n\n''Da in {{SITENAME}} das Speichern von reinem HTML aktiviert ist, wurde die Vorschau ausgeblendet, um JavaScript-Attacken vorzubeugen.''\n\n'''Bitte versuchen Sie es erneut, indem Sie unter der folgenden Textvorschau nochmals auf „Seite speichern“ klicken.\nSollte das Problem bestehen bleiben, [[Special:UserLogout|melden Sie sich ab]] und danach wieder an.'''",
+       "token_suffix_mismatch": "'''Ihre Bearbeitung wurde zurückgewiesen, da Ihr Browser Zeichen im Bearbeiten-Token verstümmelt hat.\nEine Speicherung kann den Seiteninhalt zerstören. Dies geschieht bisweilen durch die Benutzung eines anonymen Proxy-Dienstes, der fehlerhaft arbeitet.'''",
+       "edit_form_incomplete": "'''Der Inhalt des Bearbeitungsformulars hat den Server nicht vollständig erreicht. Bitte prüfen Sie Ihre Bearbeitungen auf Vollständigkeit und versuchen Sie es erneut.'''",
+       "explainconflict": "Jemand anders hat diese Seite geändert, nachdem Sie angefangen haben, sie zu bearbeiten.\nDas obere Textfeld enthält den aktuellen Bearbeitungsstand der Seite.\nDas untere Textfeld enthält Ihre Änderungen.\nBitte fügen Sie Ihre Änderungen in das obere Textfeld ein.\n'''Nur''' der Inhalt des oberen Textfeldes wird gespeichert, wenn Sie auf „{{int:savearticle}}“ klicken.",
+       "yourtext": "Ihr Text",
+       "nonunicodebrowser": "'''Achtung: Ihr Browser kann Unicode-Zeichen nicht richtig verarbeiten.''' Es wird eine Hilfsroutine eingesetzt, um Ihnen zu erlauben, Seiten sicher zu bearbeiten: Nicht-ASCII-Zeichen werden dabei im Bearbeitungsfenster als hexadezimale Codes angezeigt.",
+       "editingold": "'''Achtung: Sie bearbeiten eine alte Version dieser Seite. Sofern Sie sie speichern, werden alle neueren Versionen überschrieben.'''",
+       "copyrightwarning": "'''Bitte kopieren Sie keine Webseiten, die nicht Ihre eigenen sind, benutzen Sie keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />\nSie geben uns hiermit Ihre Zusage, dass Sie den Text '''selbst verfasst''' haben, dass der Text Allgemeingut '''(public domain)''' ist, oder dass der '''Urheber''' seine '''Zustimmung''' gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weisen Sie bitte auf der Diskussionsseite darauf hin.\n<i>Bitte beachten Sie, dass alle {{SITENAME}}-Beiträge automatisch unter der „$2“ stehen (siehe $1 für Einzelheiten). Falls Sie nicht möchten, dass Ihre Arbeit hier von anderen verändert und verbreitet wird, dann klicken Sie nicht auf „Seite speichern“.</i>",
+       "copyrightwarning2": "Bitte beachten Sie, dass alle Beiträge zu {{SITENAME}} von anderen Mitwirkenden bearbeitet, geändert oder gelöscht werden können.\nReichen Sie keine Texte ein, falls Sie nicht wollen, dass diese ohne Einschränkung geändert werden können.\n\nSie bestätigen hiermit auch, dass Sie diese Texte selbst geschrieben haben oder diese von einer gemeinfreien Quelle kopiert haben\n(weitere Einzelheiten unter $1). '''ÜBERTRAGEN SIE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!'''",
+       "longpageerror": "'''Fehler: Der Text, den Sie zu speichern versuchen, ist {{PLURAL:$1|ein Kilobyte|$1 Kilobyte}} groß. Dies ist größer als das erlaubte Maximum von {{PLURAL:$2|ein Kilobyte|$2 Kilobyte}}.'''\nEr kann nicht gespeichert werden.",
+       "readonlywarning": "'''Achtung: Die Datenbank wurde für Wartungsarbeiten gesperrt, so dass Ihre Änderungen derzeit nicht gespeichert werden können.\nSichern Sie den Text bitte lokal auf Ihrem Computer und versuchen Sie zu einem späteren Zeitpunkt, die Änderungen zu übertragen.'''\n\nGrund für die Sperre: $1",
+       "nocreatetext": "Auf {{SITENAME}} wurde das Erstellen neuer Seiten eingeschränkt. Sie können bestehende Seiten ändern oder sich [[Special:UserLogin|anmelden]].",
+       "nocreate-loggedin": "Sie haben nicht die erforderliche Berechtigung, um neue Seiten erstellen zu können.",
+       "permissionserrorstext": "Sie sind nicht berechtigt, die Aktion auszuführen. {{PLURAL:$1|Grund|Gründe}}:",
+       "permissionserrorstext-withaction": "Sie sind nicht berechtigt, $2.\n{{PLURAL:$1|Grund|Gründe}}:",
+       "recreate-moveddeleted-warn": "'''Achtung: Sie erstellen eine Seite, die bereits früher gelöscht wurde.'''\n\nBitte prüfen Sie sorgfältig, ob die erneute Seitenerstellung den Richtlinien entspricht.\nZu Ihrer Information folgt das Lösch- und Verschiebungs-Logbuch mit der Begründung für die vorhergehende Löschung:",
+       "edit-no-change": "Ihre Bearbeitung wurde ignoriert, da keine Änderung an dem Text vorgenomme wurde.",
+       "postedit-confirmation-saved": "Ihre Bearbeitung wurde gespeichert.",
+       "editwarning-warning": "Das Verlassen dieser Seite kann dazu führen, dass Ihre Änderungen verloren gehen.\nWenn Sie angemeldet sind, können Sie das Anzeigen dieser Warnung im „{{int:prefs-editing}}“-Bereich Ihrer Einstellungen abschalten.",
+       "undo-success": "Die Bearbeitung kann rückgängig gemacht werden.\nBitte prüfen Sie den Vergleich unten, um sicherzustellen, dass Sie dies tun möchten, und speichern Sie dann unten Ihre Änderungen, um die Bearbeitung rückgängig zu machen.",
+       "history-feed-empty": "Die angeforderte Seite existiert nicht. Vielleicht wurde sie gelöscht oder verschoben. [[Special:Search|Durchsuchen Sie]] {{SITENAME}} nach passenden neuen Seiten.",
+       "rev-deleted-text-unhide": "Diese Version wurde '''gelöscht'''.\nNähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].\nSie können [$1 diese Version einsehen], sofern Sie möchten.",
+       "rev-suppressed-text-unhide": "Diese Version wurde '''unterdrückt'''.\nNähere Angaben stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].\nSie können [$1 diese Version einsehen], sofern Sie möchten.",
+       "rev-deleted-text-view": "Diese Version wurde '''gelöscht'''.\nSie können sie einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
+       "rev-suppressed-text-view": "Diese Version wurde '''unterdrückt'''.\nSie können sie einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].",
+       "rev-deleted-no-diff": "Sie können diesen Unterschied nicht betrachten, da eine der Versionen '''gelöscht''' wurde.\nDetails stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
+       "rev-suppressed-no-diff": "Sie können diesen Versionsunterschied nicht betrachten, da eine der Versionen '''gelöscht''' wurde.",
+       "rev-deleted-unhide-diff": "Eine der Versionen dieses Versionsunterschieds wurde '''gelöscht'''.\nNähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].\nSie können [$1 diesen Versionsunterschied einsehen], sofern Sie möchten.",
+       "rev-suppressed-unhide-diff": "Eine der Versionen dieses Versionsunterschieds wurde '''unterdrückt'''.\nNähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].\nSie können [$1 diesen Versionsunterschied einsehen], sofern Sie möchten.",
+       "rev-deleted-diff-view": "Eine Version dieses Versionsunterschieds wurde '''gelöscht'''.\nSie können diesen Versionsunterschied einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
+       "rev-suppressed-diff-view": "Eine der Versionen dieses Versionsunterschiedes wurde '''unterdrückt'''.\nSie können diesen Versionsunterschied einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].",
+       "revdelete-nooldid-text": "Sie haben entweder keine Version angegeben, auf die diese Aktion ausgeführt werden soll, die gewählte Version ist nicht vorhanden oder Sie versuchen, die aktuelle Version zu entfernen.",
+       "revdelete-show-file-confirm": "Sind Sie sicher, dass Sie die gelöschte Version der Datei „<nowiki>$1</nowiki>“ vom $2 um $3 Uhr ansehen wollen?",
+       "revdelete-confirm": "Bitte bestätigen Sie, dass Sie beabsichtigen, dies zu tun, die Konsequenzen verstehen und es in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] tun.",
+       "revdelete-show-no-access": "Fehler beim Anzeigen des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als „eingeschränkt“ markiert.\nSie haben darauf keinen Zugriff.",
+       "revdelete-modify-no-access": "Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als „eingeschränkt“ markiert.\nSie haben darauf keinen Zugriff.",
+       "revdelete-concurrent-change": "Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Es scheint, als ob der Status von jemandem geändert wurde, bevor Sie vorhatten, ihn zu bearbeiten.\nBitte prüfen Sie die Logbücher.",
+       "revdelete-only-restricted": "Fehler beim Verstecken des Eintrags vom $1, $2 Uhr: Sie können keinen Eintrag vor Administratoren verstecken, ohne eine der anderen Ansichtsoptionen gewählt zu haben.",
+       "mergehistory-header": "Mit dieser Spezialseite können Sie die Versionsgeschichte einer Ursprungsseite mit der Versionsgeschichte einer Zielseite vereinen.\nStellen Sie sicher, dass die Versionsgeschichte einer Seite historisch korrekt ist.",
+       "mergehistory-merge": "Die folgenden Versionen von „[[:$1]]“ können nach „[[:$2]]“ übertragen werden. Markieren Sie die Version, bis zu der (einschließlich) die Versionen übertragen werden sollen. Bitte beachten Sie, dass die Nutzung der Navigationslinks die Auswahl zurücksetzt.",
+       "mergehistory-fail": "Versionsvereinigung nicht möglich, bitte prüfen Sie die Seite und die Zeitangaben.",
+       "searchmenu-new": "<strong>Erstellen Sie die Seite „[[:$1]]“ in diesem Wiki.</strong> {{PLURAL:$2|0=|Siehe auch die über Ihre Suche gefundene Seite.|Siehe auch die gefundenen Suchergebnisse.}}",
+       "search-suggest": "Meinten Sie „$1“?",
+       "search-nonefound": "Für Ihre Suchanfrage wurden keine Ergebnisse gefunden.",
+       "searchdisabled": "Die {{SITENAME}} Suche wurde deaktiviert. Sie können unterdessen mit Google suchen. Bitte bedenken Sie, dass der Suchindex von {{SITENAME}} veraltet sein kann.",
+       "prefsnologintext2": "Sie müssen sich $1, um Ihre Benutzereinstellungen festzulegen.",
+       "prefs-help-watchlist-token2": "Dies ist der geheime Schlüssel zum Webfeed Ihrer Beobachtungsliste.\nJeder, der ihn kennt, kann Ihre Beobachtungsliste lesen. Teilen Sie ihn deshalb nicht Anderen mit.\nSofern notwendig, [[Special:ResetTokens|können Sie ihn zurücksetzen]].",
+       "savedprefs": "Ihre Einstellungen wurden gespeichert.",
+       "prefs-reset-intro": "Sie können diese Seite verwenden, um die Einstellungen auf die Standards zurückzusetzen.\nDies kann nicht mehr rückgängig gemacht werden.",
+       "yourgender": "Welches Geschlecht haben Sie?",
+       "prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um Sie anzureden sowie als Hinweis für andere durch Verwendung des zutreffenden grammatikalischen Geschlechts.\nDiese Information ist öffentlich.",
+       "prefs-help-realname": "Dies ist eine freiwillige Angabe. Damit kann Ihr bürgerlicher Name Ihren Beiträgen zugeordnet werden.",
+       "prefs-help-email": "Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern Sie Ihr Passwort vergessen haben.",
+       "prefs-help-email-others": "Mit anderen Benutzern können Sie auch über die Benutzerdiskussionsseiten Kontakt aufnehmen, ohne dass Sie Ihre Identität offenlegen müssen.",
+       "prefs-help-prefershttps": "Diese Einstellung wird bei Ihrer nächsten Anmeldung wirksam.",
+       "userrights-groups-help": "Sie können die Gruppenzugehörigkeit dieses Benutzers ändern:\n* Ein markiertes Kästchen bedeutet, dass der Benutzer Mitglied dieser Gruppe ist.\n* Ein nichtmarkiertes Kästchen bedeutet, dass der Benutzer nicht Mitglied dieser Gruppe ist.\n* Ein * bedeutet, dass Sie das Benutzerrecht nach Erteilung nicht wieder zurücknehmen können (oder umgekehrt).",
+       "userrights-no-interwiki": "Sie haben nicht die erforderliche Berechtigung, um Benutzerrechte in anderen Wikis ändern zu können.",
+       "userrights-nologin": "Sie müssen sich mit einem Administrator-Benutzerkonto [[Special:UserLogin|anmelden]], um Benutzerrechte zu ändern.",
+       "userrights-notallowed": "Sie verfügen nicht über die erforderlichen Berechtigungen, um Benutzerrechte vergeben oder entziehen zu können.",
+       "userrights-changeable-col": "Gruppenzugehörigkeit, die Sie ändern dürfen",
+       "userrights-unchangeable-col": "Gruppenzugehörigkeit, die Sie nicht ändern dürfen",
+       "recentchanges-summary": "Auf dieser Seite können Sie die letzten Änderungen in diesem Wiki nachverfolgen.",
+       "recentchanges-feed-description": "Verfolgen Sie mit diesem Feed die letzten Änderungen in {{SITENAME}}.",
+       "recentchangeslinked-summary": "Diese Spezialseite listet die letzten Änderungen an den verlinkten Seiten auf (bzw. bei Kategorien an den Mitgliedern dieser Kategorie).\nSeiten auf Ihrer [[Special:Watchlist|Beobachtungsliste]] sind '''fett''' dargestellt.",
+       "uploadnologintext": "Sie müssen sich $1 um Dateien hochladen zu können.",
+       "uploadtext": "Benutzen Sie dieses Formular, um neue Dateien hochzuladen.\n\nGehen Sie zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]].\n\nUm ein '''Bild''' in einer Seite zu verwenden, nutzen Sie einen Link in der folgenden Form:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></code>''' – für ein Vollbild\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|Alternativer Text]]</nowiki></code>''' – für ein 200px breites Bild innerhalb einer Box, mit „Alternativer Text“ als Bildbeschreibung\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></code>''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei",
+       "illegalfilename": "Der Dateiname „$1“ enthält mindestens ein nicht erlaubtes Zeichen. Bitte benennen Sie die Datei um und versuchen Sie, sie erneut hochzuladen.",
+       "empty-file": "Die von Ihnen übertragene Datei hat keinen Inhalt.",
+       "emptyfile": "Die hochgeladene Datei ist leer. Der Grund kann ein Tippfehler im Dateinamen sein. Bitte kontrollieren Sie, ob Sie die Datei wirklich hochladen wollen.",
+       "fileexists": "Eine Datei dieses Namens ist bereits vorhanden. Bitte prüfen Sie <strong>[[:$1]]</strong>, sofern Sie sich nicht sicher sind, ob Sie sie ändern möchten.\n[[$1|thumb]]",
+       "filepageexists": "Eine Beschreibungsseite wurde bereits als <strong>[[:$1]]</strong> erstellt, es ist aber keine Datei mit diesem Namen vorhanden.\nDie eingegebene Beschreibung wird nicht auf die Beschreibungsseite übernommen.\nDie Beschreibungsseite müssen Sie nach dem Hochladen der Datei noch manuell bearbeiten.\n[[$1|thumb]]",
+       "fileexists-extension": "Eine Datei ähnlichen Namens ist bereits vorhanden: [[$2|thumb]]\n* Name der hochzuladenden Datei: <strong>[[:$1]]</strong>\n* Name der vorhandenen Datei: <strong>[[:$2]]</strong>\nBitte wählen Sie einen anderen Namen.",
+       "fileexists-thumbnail-yes": "Bei der Datei scheint es sich um ein Bild verringerter Größe ''(Minitatur)'' zu handeln. [[$1|thumb]]\nBitte prüfen Sie die Datei <strong>[[:$1]]</strong>.\nWenn es sich um das Bild in Originalgröße handelt, so braucht kein separates Vorschaubild hochgeladen zu werden.",
+       "file-thumbnail-no": "Der Dateiname beginnt mit <strong>$1</strong>. Dies deutet auf ein Bild verringerter Größe ''(Miniatur)'' hin.\nBitte prüfen Sie, ob Sie das Bild in voller Auflösung vorliegen haben und laden dieses unter dem Originalnamen hoch.",
+       "fileexists-forbidden": "Unter diesem Namen existiert bereits eine Datei und sie kann nicht überschrieben werden. Bitte gehen Sie zurück und laden Sie die Datei unter einem anderen Namen hoch. [[File:$1|thumb|center|$1]]",
+       "fileexists-shared-forbidden": "Unter diesem Namen existiert bereits eine Datei im zentralen Medienarchiv.\nWenn Sie diese Datei trotzdem hochladen möchten, gehen Sie bitte zurück und ändern den Namen.\n[[File:$1|thumb|center|$1]]",
+       "file-deleted-duplicate": "Eine mit dieser identische Datei ([[:$1]]) wurde früher gelöscht. Sehen Sie das Lösch-Logbuch ein, bevor Sie sie hochladen.",
+       "uploadwarning-text": "Bitte ändern Sie unten die Dateibeschreibung und versuchen Sie es erneut.",
+       "php-uploaddisabledtext": "Das Hochladen von Dateien wurde in PHP deaktiviert.\nBitte überprüfen Sie die <code>file_uploads</code>-Einstellung.",
+       "filewasdeleted": "Eine Datei mit diesem Namen wurde schon einmal hochgeladen und zwischenzeitlich wieder gelöscht. Bitte prüfen Sie zuerst den Eintrag im $1, bevor Sie die Datei wirklich speichern.",
+       "filename-bad-prefix": "Der Dateiname beginnt mit '''„$1“'''. Dies ist im allgemeinen der von einer Digitalkamera vorgegebene Dateiname und daher nicht sehr aussagekräftig.\nBitte geben Sie der Datei einen Namen, der den Inhalt besser beschreibt.",
+       "upload-file-error-text": "Bei der Erstellung einer temporären Datei auf dem Server ist ein interner Fehler aufgetreten.\nBitte informieren Sie einen [[Special:ListUsers/sysop|Administrator]].",
+       "upload-misc-error-text": "Beim Hochladen ist ein unbekannter Fehler aufgetreten.\nPrüfen Sie die URL auf Fehler, den Online-Status der Seite und versuchen es erneut.\nWenn das Problem weiter besteht, informieren Sie einen [[Special:ListUsers/sysop|Administrator]].",
+       "uploadstash-badtoken": "Das Entfernen der vorab gespeicherten Dateien war erfolglos, vielleicht weil Ihre Sitzungsdaten abgelaufen sind. Bitte versuchen Sie es erneut.",
+       "img-auth-nopathinfo": "PATH_INFO fehlt.\nIhr Server ist nicht dafür eingerichtet, diese Information weiterzugeben.\nSie könnte CGI-gestützt sein und kann daher img_auth nicht ermöglichen.\nSiehe auch http://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
+       "img-auth-nologinnWL": "Sie sind nicht angemeldet und „$1“ ist nicht in der weißen Liste.",
+       "img-auth-isdir": "Sie versuchen, auf ein Verzeichnis „$1“ zuzugreifen.\nNur Dateizugriff ist erlaubt.",
+       "upload-curl-error6-text": "Die angegebene URL ist nicht erreichbar. Prüfen Sie sowohl die URL auf Fehler als auch den Online-Status der Seite.",
+       "upload-curl-error28-text": "Die Seite braucht zu lange, um zu antworten. Prüfen Sie, ob die Seite online ist, warten Sie einen kurzen Moment und versuchen Sie es dann erneut. Es kann sinnvoll sein, es zu einem anderen Zeitpunkt erneut zu versuchen.",
+       "upload_source_file": " (eine Datei auf Ihrem Computer)",
+       "filehist-help": "Klicken Sie auf einen Zeitpunkt, um diese Version zu laden.",
+       "sharedupload-desc-edit": "Diese Datei stammt aus $1 und kann auf anderen Projekten verwendet werden.\nVielleicht möchten Sie die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.",
+       "sharedupload-desc-create": "Diese Datei stammt aus $1 und kann von anderen Projekten verwendet werden.\nVielleicht möchten Sie die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.",
+       "filepage-nofile-link": "Es ist keine Datei dieses Namens vorhanden. Sie können jedoch [$1 diese Datei hochladen].",
+       "filerevert-intro": "Sie setzen die Datei '''[[Media:$1|$1]]''' auf die [$4 Version vom $2, $3 Uhr] zurück.",
+       "filedelete-intro": "Sie löschen die Datei '''„[[Media:$1|$1]]“''' inklusive ihrer Versionsgeschichte.",
+       "filedelete-intro-old": "Sie löschen von der Datei '''„[[Media:$1|$1]]“''' die [$4 Version vom $2, $3 Uhr].",
+       "unusedtemplatestext": "Diese Seite listet alle Seiten im {{ns:template}}-Namensraum auf, die nicht in anderen Seiten eingebunden sind.\nÜberprüfen Sie andere Links zu den Vorlagen, bevor Sie diese löschen.",
+       "unusedimagestext": "Bitte beachten Sie, dass andere Webseiten eine Datei mit einer direkten URL verlinken können. Sie könnte daher hier aufgelistet sein, obwohl sie in aktiver Verwendung ist.",
+       "notargettext": "Sie haben nicht angegeben, auf welche Seite diese Funktion angewendet werden soll.",
+       "booksources-invalid-isbn": "Vermutlich ist die ISBN ungültig.\nBitte prüfen Sie, ob sie korrekt von der Quelle übertragen wurde.",
+       "cachedspecial-viewing-cached-ttl": "Sie sehen die gecachte Version dieser Seite, die bis zu $1 alt sein kann.",
+       "cachedspecial-viewing-cached-ts": "Sie sehen die gecachte Version dieser Seite, die möglicherweise nicht aktuell ist.",
+       "mailnologintext": "Sie müssen [[Special:UserLogin|angemeldet sein]] und eine bestätigte E-Mail-Adresse in Ihren [[Special:Preferences|Einstellungen]] eingetragen haben, um anderen Benutzern E-Mails schicken zu können.",
+       "emailpagetext": "Sie können {{GENDER:$1|dem Benutzer|der Benutzerin}} mit dem unten stehenden Formular eine E-Mail senden.\nAls Absender wird die E-Mail-Adresse aus Ihren [[Special:Preferences|Einstellungen]] eingetragen, damit {{GENDER:$1|der Benutzer|die Benutzerin}} Ihnen direkt antworten kann.",
+       "emailccsubject": "Kopie Ihrer Nachricht an $1: $2",
+       "emailsenttext": "Ihre E-Mail wurde verschickt.",
+       "nowatchlist": "Es befinden sich keine Einträge auf Ihrer Beobachtungsliste.",
+       "watchlistanontext": "Sie müssen sich $1, um Ihre Beobachtungsliste sehen oder Einträge auf ihr bearbeiten zu können.",
+       "watchnologin": "Sie sind nicht angemeldet",
+       "addedwatchtext": "Die Seite „[[:$1]]“ wurde zu Ihrer [[Special:Watchlist|Beobachtungsliste]] hinzugefügt.\n\nSpätere Änderungen an dieser Seite und der dazugehörigen Diskussionsseite werden dort gelistet.",
+       "removedwatchtext": "Die Seite „[[:$1]]“ wurde von Ihrer [[Special:Watchlist|Beobachtungsliste]] entfernt.",
+       "watchlist-details": "Sie beobachten {{PLURAL:$1|1 Seite|$1 Seiten}}.",
+       "enotif_body": "Hallo $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nZusammenfassung des Bearbeiters: $PAGESUMMARY $PAGEMINOREDIT\n\nKontakt zum Bearbeiter:\nE-Mail: $PAGEEDITOR_EMAIL\nWiki: $PAGEEDITOR_WIKI\n\nBei weiterer Aktivität auf der Seite werden Ihnen so lange keine weiteren Benachrichtigungs-E-Mails gesendet, bis Sie die Seite wieder angemeldet besucht haben.\nAuf Ihrer Beobachtungsliste können Sie alle Benachrichtigungsmarkierungen zusammen zurücksetzen.\n\nIhr freundliches {{SITENAME}}-Benachrichtigungssystem\n\n--\nUm die Einstellungen der E-Mail-Benachrichtigung anzupassen, besuchen Sie {{canonicalurl:{{#special:Preferences}}}}.\n\nUm die Einstellungen Ihrer Beobachtungsliste anzupassen, besuchen Sie {{canonicalurl:{{#special:EditWatchlist}}}}.\n\nUm diese Seite von Ihrer Beobachtungsliste zu entfernen, besuchen Sie $UNWATCHURL.\n\nRückmeldungen und weitere Hilfe: $HELPPAGE",
+       "historywarning": "'''Achtung:''' Die Seite, die Sie löschen möchten, hat eine Versionsgeschichte mit etwa $1 {{PLURAL:$1|Version|Versionen}}:",
+       "confirmdeletetext": "Sie sind dabei, eine Seite mit allen zugehörigen älteren Versionen zu löschen. Bitte bestätigen Sie, dass Sie sich der Konsequenzen bewusst sind, und dass Sie in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] handeln.",
+       "deletedtext": "„$1“ wurde gelöscht. Im $2 finden Sie eine Liste der letzten Löschungen.",
+       "sessionfailure": "Es gab ein Problem bei der Übertragung Ihrer Benutzerdaten.\nDiese Aktion wurde daher sicherheitshalber abgebrochen, um eine falsche Zuordnung Ihrer Änderungen zu einem anderen Benutzer zu verhindern.\nBitte gehen Sie zurück zur vorherigen Seite, laden Sie sie erneut und versuchen Sie, den Vorgang erneut auszuführen.",
+       "protect-text": "Hier können Sie den Schutzstatus der Seite „$1“ einsehen und ändern.",
+       "protect-locked-blocked": "Sie können den Seitenschutz nicht ändern, da Ihr Benutzerkonto gesperrt ist. Hier sind die aktuellen Seitenschutz-Einstellungen der Seite '''„$1“:'''",
+       "protect-locked-access": "Ihr Benutzerkonto verfügt nicht über die notwendigen Rechte zur Änderung des Seitenschutzes. Hier sind die aktuellen Seitenschutzeinstellungen für die Seite '''„$1“:'''",
+       "protect-cantedit": "Sie können die Sperre dieser Seite nicht ändern, da Sie keine Berechtigung zum Bearbeiten der Seite haben.",
+       "undeleteextrahelp": "* Um die Seite mitsamt aller Versionen wiederherzustellen, wählen Sie keine Version aus, geben eine Begründung an und klicken dann auf „{{int:undeletebtn}}“.\n* Um lediglich bestimmte Versionen der Seite wiederherzustellen, wählen Sie die betreffenden Versionen einzeln aus, geben eine Begründung an und klicken dann auf „{{int:undeletebtn}}“.",
+       "undeletehistory": "Wenn Sie diese Seite wiederherstellen, werden auch alle alten Versionen wiederhergestellt.\nWenn seit der Löschung eine neue Seite gleichen Namens erstellt wurde, werden die wiederhergestellten Versionen chronologisch in die Versionsgeschichte eingeordnet.",
+       "undeleterevdel": "Die Wiederherstellung wird nicht durchgeführt, wenn die aktuellste Version versteckt ist oder versteckte Teile enthält.\nIn diesem Fall darf die aktuellste Version nicht markiert werden oder ihr Status muss auf den einer normalen Version geändert werden.\nVersionen von Dateien, auf die Sie keinen Zugriff haben, werden nicht wiederhergestellt.",
+       "undeletedpage": "'''$1''' wurde wiederhergestellt.\n\nIm [[Special:Log/delete|Lösch-Logbuch]] finden Sie eine Übersicht der gelöschten und wiederhergestellten Seiten.",
+       "undelete-show-file-confirm": "Sind Sie sicher, dass Sie eine gelöschte Version der Datei „<nowiki>$1</nowiki>“ vom $2, $3 Uhr sehen wollen?",
+       "tooltip-namespace_association": "Dieses Auswahlfeld anklicken, um den Ihrer Auswahl zugehörigen Diskussionsnamensraum, oder im umgekehrten Fall, den zugehörigen Namensraum, mit einzubeziehen",
+       "blockiptext": "Mit diesem Formular sperren Sie eine IP-Adresse oder einen Benutzernamen, so dass von dort keine Änderungen mehr vorgenommen werden können.\nDies sollte nur erfolgen, um Vandalismus zu verhindern und in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]].\nBitte geben Sie den Grund für die Sperre an.",
+       "ipb-blockingself": "Sie sind gerade dabei, sich selbst zu sperren! Möchten Sie das wirklich tun?",
+       "ipb-confirmhideuser": "Sie sind gerade dabei, einen Benutzer im Modus „Benutzer verstecken“ zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchten Sie das wirklich tun?",
+       "unblockiptext": "Mit diesem Formular können Sie eine IP-Adresse oder einen Benutzer freigeben.",
+       "autoblocker": "Automatische Sperre, da Sie eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzen. Der bei der Sperren von „$1“ angegebene Grund lautet: „$2“.",
+       "ipb-needreblock": "„$1“ ist bereits gesperrt. Möchten Sie die Sperrparameter ändern?",
+       "proxyblockreason": "Ihre IP-Adresse wurde gesperrt, da sie ein offener Proxy ist. Bitte kontaktieren Sie Ihren Internet-Provider oder Ihre Systemadministratoren und informieren Sie sie über dieses mögliche Sicherheitsproblem.",
+       "cant-see-hidden-user": "Der Benutzer, den Sie versuchen zu sperren, wurde bereits gesperrt und verborgen. Da Sie das „hideuser“-Recht nicht haben, können Sie die Benutzersperre nicht sehen und nicht bearbeiten.",
+       "ipbblocked": "Sie können keine anderen Benutzer sperren oder entsperren, da Sie selbst gesperrt sind",
+       "ipbnounblockself": "Sie haben nicht die Berechtigung, sich selbst zu entsperren",
+       "locknoconfirm": "Sie haben das Bestätigungsfeld nicht markiert.",
+       "lockdbsuccesstext": "Die {{SITENAME}}-Datenbank wurde gesperrt.<br />Bitte geben Sie die Datenbank [[Special:UnlockDB|wieder frei]], sobald die Wartung abgeschlossen ist.",
+       "movepagetext": "Mit untenstehendem Formular können Sie eine Seite umbenennen, indem Sie sie mitsamt allen Versionen auf einen neuen Titel verschieben.\nDer alte Titel wird danach zum neuen weiterleiten.\nSie können Weiterleitungen, die auf den Originaltitel verlinken, automatisch korrigieren lassen.\nStellen Sie sicher, dass Sie im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|defekten Weiterleitungen]] überprüfen.\nSie sind dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.\n\nDie Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, letztere ist eine Weiterleitung ohne Versionsgeschichte.\nDies bedeutet, dass Sie die Umbenennung rückgängig machen können, sofern Sie einen Fehler gemacht haben. Sie können hingegen keine existierende Seite überschreiben.\n\n'''Warnung!'''\nDie Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben.\nSie sollten daher die Konsequenzen verstanden haben, bevor Sie jetzt fortfahren.",
+       "movepagetext-noredirectfixer": "Mit untenstehendem Formular können Sie eine Seite umbenennen, indem Sie sie mitsamt allen Versionen auf einen neuen Titel verschieben.\nDer alte Titel wird danach zum neuen weiterleiten.\nStellen Sie sicher, dass Sie im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|defekten Weiterleitungen]] überprüfen.\nSie sind dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.\n\nDie Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese ist eine Weiterleitung ohne Versionsgeschichte.\nDies bedeutet, dass Sie die Umbenennung rückgängig machen können, sofern Sie einen Fehler gemacht haben. Sie können hingegen keine existierende Seite überschreiben.\n\n'''Warnung!'''\nDie Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben.\nSie sollten daher die Konsequenzen verstanden haben, bevor Sie jetzt fortfahren.",
+       "movepagetalktext": "Die dazugehörige Diskussionsseite wird, sofern vorhanden, mitverschoben, '''es sei denn:'''\n*Es existiert bereits eine Diskussionsseite mit diesem Namen, oder\n*Sie wählen die unten stehende Option ab.\n\nIn diesen Fällen müssen Sie, falls gewünscht, den Inhalt der Seite von Hand verschieben oder zusammenführen.\n\nBitte den '''neuen''' Titel unter '''Ziel''' eintragen, darunter die Umbenennung bitte '''begründen.'''",
+       "moveuserpage-warning": "'''Warnung:''' Sie sind dabei, eine Benutzerseite zu verschieben. Bitte bedenken Sie, dass dadurch nur die Benutzerseite verschoben, '''nicht''' aber der Benutzer umbenannt wird.",
+       "movenologintext": "Sie müssen ein registrierter Benutzer und [[Special:UserLogin|angemeldet]] sein, um eine Seite zu verschieben.",
+       "movenotallowed": "Sie haben nicht die erforderliche Berechtigung, um Seiten verschieben zu können.",
+       "movenotallowedfile": "Sie haben nicht die erforderliche Berechtigung, um Dateien verschieben zu können.",
+       "cant-move-user-page": "Sie haben nicht die erforderliche Berechtigung, Benutzerhauptseiten verschieben zu können.",
+       "cant-move-to-user-page": "Sie haben nicht die Berechtigung, Seiten auf eine Benutzerseite zu verschieben (mit Ausnahme von Benutzerunterseiten).",
+       "articleexists": "Unter diesem Namen existiert bereits eine Seite. Bitte wählen Sie einen anderen Namen.",
+       "delete_and_move_text": "== Löschung erforderlich ==\n\nDie Seite „[[:$1]]“ existiert bereits. Möchten Sie diese löschen, um die Seite verschieben zu können?",
+       "file-exists-sharedrepo": "Der gewählte Dateiname wird bereits in einem gemeinsam genutzten Repositorium verwendet.\nBitte wählen Sie einen anderen Namen.",
+       "exporttext": "Mit dieser Spezialseite können Sie den Text inklusive der Versionsgeschichte einzelner Seiten in eine XML-Datei exportieren.\nDie Datei kann in ein anderes MediaWiki-Wiki über die [[Special:Import|Importfunktion]] eingespielt werden.\n\nTragen Sie den oder die entsprechenden Seitentitel in das folgende Textfeld ein (pro Zeile jeweils nur eine Seite).\n\nAlternativ ist der Export auch mit der Syntax [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] möglich, beispielsweise für die [[{{MediaWiki:Mainpage}}]].",
+       "allmessagestext": "Dies ist eine Liste der MediaWiki-Systemtexte.\nBitte besuchen Sie die Seiten [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki-Lokalisierung] und [//translatewiki.net translatewiki.net], sofern Sie sich an der Lokalisierung von MediaWiki beteiligen möchten.",
+       "import-interwiki-text": "Wählen Sie 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.",
+       "import-token-mismatch": "Verlust der Sessiondaten. Bitte versuchen Sie es erneut.",
+       "import-error-edit": "Die Seite „$1“ wurde nicht importiert, da Sie nicht berechtigt sind, sie zu bearbeiten.",
+       "import-error-create": "Die Seite „$1“ wurde nicht importiert, da Sie nicht berechtigt sind, sie zu erstellen.",
+       "javascripttest-pagetext-frameworks": "Bitte wählen Sie eine der folgenden Prüfumgebungen aus: $1",
+       "javascripttest-pagetext-skins": "Wählen Sie eine Benutzeroberfläche zur Durchführung der Tests aus:",
+       "tooltip-pt-userpage": "Ihre Benutzerseite",
+       "tooltip-pt-anonuserpage": "Benutzerseite der IP-Adresse, von der aus Sie Änderungen durchführen",
+       "tooltip-pt-mytalk": "Ihre Diskussionsseite",
+       "tooltip-pt-mycontris": "Liste Ihrer Beiträge",
+       "tooltip-n-mainpage": "Besuchen Sie die Hauptseite",
+       "tooltip-n-mainpage-description": "Besuchen Sie die Hauptseite",
+       "tooltip-n-portal": "Über das Projekt, was Sie tun können, wo was zu finden ist",
+       "tooltip-watch": "Diese Seite zu Ihrer Beobachtungsliste hinzufügen",
+       "tooltip-summary": "Geben Sie eine kurze Zusammenfassung ein.",
+       "spamprotectiontext": "Der Text, die Sie speichern wollen, wurde vom Spamschutzfilter blockiert.\nDas liegt wahrscheinlich an einem Link auf eine externe Seite.",
+       "markedaspatrollederrortext": "Sie müssen eine Seitenänderung auswählen.",
+       "mediawarning": "'''Warnung:''' Dieser Dateityp kann böswilligen Programmcode enthalten.\nDurch das Herunterladen und Öffnen der Datei kann Ihr Computer beschädigt werden.",
+       "confirmemail_noemail": "Sie haben keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|persönlichen Einstellungen]] eingetragen.",
+       "confirmemail_text": "{{SITENAME}} erfordert, dass Sie Ihre E-Mail-Adresse bestätigen (authentifizieren), bevor Sie die erweiterten E-Mail-Funktionen benutzen können. Klicken Sie bitte auf die unten stehende, mit „Bestätigungscode zuschicken“ beschriftete Schaltfläche, damit eine automatisch erstellte E-Mail an die angegebene Adresse geschickt wird. Diese E-Mail enthält eine Web-Adresse mit einem Bestätigungscode. Indem Sie diese Webseite in Ihrem Webbrowser öffnen, bestätigen Sie, dass die angegebene E-Mail-Adresse korrekt und gültig ist.",
+       "confirmemail_pending": "Es wurde Ihnen bereits ein Bestätigungscode per E-Mail zugeschickt.\nWenn Sie Ihr Benutzerkonto erst vor kurzem erstellt haben, warten Sie bitte noch ein paar Minuten auf die E-Mail, bevor Sie einen neuen Code anfordern.",
+       "confirmemail_oncreate": "Ein Bestätigungs-Code wurde an Ihre E-Mail-Adresse gesandt. Dieser Code wird für die Anmeldung nicht benötigt, jedoch wird er zur Aktivierung der E-Mail-Funktionen innerhalb des Wikis gebraucht.",
+       "confirmemail_sendfailed": "{{SITENAME}} konnte die Bestätigungs-E-Mail nicht an Sie versenden.\nBitte prüfen Sie die E-Mail-Adresse auf ungültige Zeichen.\n\nRückmeldung des Mailservers: $1",
+       "confirmemail_invalid": "Ungültiger Bestätigungscode. Möglicherweise ist der Bestätigungszeitraum verstrichen. Versuchen Sie bitte, die Bestätigung zu wiederholen.",
+       "confirmemail_needlogin": "Sie müssen sich $1, um Ihre E-Mail-Adresse zu bestätigen.",
+       "confirmemail_success": "Ihre E-Mail-Adresse wurde erfolgreich bestätigt. Sie können sich jetzt [[Special:UserLogin|anmelden]].",
+       "confirmemail_loggedin": "Ihre E-Mail-Adresse wurde erfolgreich bestätigt.",
+       "confirmemail_body": "Hallo,\n\njemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat das Benutzerkonto „$2“ bei {{SITENAME}} registriert.\n\nUm die E-Mail-Funktionen von {{SITENAME}} (wieder) zu aktivieren und um zu bestätigen,\ndass dieses Benutzerkonto wirklich zu Ihrer E-Mail-Adresse und damit zu Ihnen gehört, öffnen Sie bitte folgenden Link in Ihrem Browser:\n\n$3\n\nWenn Sie das genannte Benutzerkonto *nicht* registriert haben, folgen Sie diesem Link, um den Bestätigungsprozess abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis zum $6, $7 Uhr.",
+       "confirmemail_body_set": "Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst,\nhat die E-Mail-Adresse des Benutzerkontos „$2“ auf {{SITENAME}} zu dieser E-Mail-Adresse abgeändert.\n\nUm zu bestätigen, dass dieses Benutzerkonto wirklich zu Ihnen gehört\nund um die E-Mail-Funktionen auf {{SITENAME}} zu aktivieren, öffnen Sie bitte den folgenden Link in Ihrem Browser:\n\n$3\n\nFalls das Konto *nicht* zu Ihnen gehört, bitte den nachfolgenden Link öffnen,\num die Bestätigung der E-Mail-Adresse abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis $4.",
+       "deletedwhileediting": "Achtung: Diese Seite wurde gelöscht, nachdem Sie angefangen haben, sie zu bearbeiten!\nIm [{{fullurl:{{#special:Log}}|type=delete&page={{FULLPAGENAMEE}}}} Lösch-Logbuch] finden Sie den Grund für die Löschung.\nWenn Sie die Seite speichern, wird sie neu angelegt.",
+       "confirmrecreate": "Benutzer [[User:$1|$1]] ([[User talk:$1|Diskussion]]) hat diese Seite gelöscht, nachdem Sie angefangen haben, sie zu bearbeiten. Die Begründung lautete:\n: ''$2''\nBitte bestätigen Sie, dass Sie diese Seite wirklich neu erstellen möchten.",
+       "watchlistedit-normal-explain": "Dies sind die Einträge Ihrer Beobachtungsliste. Um Einträge zu entfernen, markieren Sie die Kästchen neben den Einträgen und klicken Sie am Ende der Seite auf „{{int:Watchlistedit-normal-submit}}“. Sie können Ihre Beobachtungsliste auch im [[Special:EditWatchlist/raw|Listenformat bearbeiten]].",
+       "watchlistedit-normal-done": "{{PLURAL:$1|Ein Eintrag wurde|$1 Einträge wurden}} von Ihrer Beobachtungsliste entfernt:",
+       "watchlistedit-raw-explain": "Dies sind die Einträge Ihrer Beobachtungsliste im Listenformat. Die Einträge können zeilenweise gelöscht oder hinzugefügt werden.\nPro Zeile ist ein Eintrag erlaubt.\nSobald Sie fertig sind, klicken Sie auf „{{int:Watchlistedit-raw-submit}}“.\nSie können auch die [[Special:EditWatchlist|Standardseite]] zum Bearbeiten benutzen.",
+       "watchlistedit-raw-done": "Ihre Beobachtungsliste wurde gespeichert.",
+       "dberr-again": "Warten Sie einige Minuten und versuchen Sie dann neu zuladen.",
+       "dberr-usegoogle": "Sie könnten in der Zwischenzeit mit Google suchen.",
+       "dberr-outofdate": "Beachten Sie, dass der Suchindex unserer Inhalte bei Google veraltet sein kann.",
+       "feedback-bugornote": "Sofern Sie detailliert ein technisches Problem beschreiben möchten, melden Sie bitte [$1 einen Fehler].\nAnderenfalls können Sie auch das untenstehende einfache Formular nutzen. Ihr Kommentar wird, zusammen mit Ihrem Benutzernamen und der Version des von Ihnen verwendeten Webbrowsers sowie Betriebssystems, auf der Seite „[$3 $2]“ hinzugefügt.",
+       "feedback-thanks": "Vielen Dank. Ihre Rückmeldung wurde auf der Seite „[$2 $1]“ gespeichert.",
+       "feedback-bugcheck": "Super! Bitte überprüfen Sie noch, ob es sich hierbei nicht um einen bereits [$1 bekannten Fehler] handelt.",
+       "api-error-badaccess-groups": "Sie haben nicht die Berechtigung Dateien in dieses Wiki hochzuladen.",
+       "api-error-hookaborted": "Die von Ihnen vorgesehene Anpassung kann nicht durchgeführt werden (Unterbrechung durch eine Programmschnittstelle).",
+       "api-error-mustbeloggedin": "Um Dateien hochladen zu können, müssen Sie angemeldet sein."
 }
index 7e89946..eecd71f 100644 (file)
@@ -82,7 +82,7 @@
        "tog-hideminor": "Kleine Änderungen in den „Letzten Änderungen“ ausblenden",
        "tog-hidepatrolled": "Kontrollierte Änderungen in den „Letzten Änderungen“ ausblenden",
        "tog-newpageshidepatrolled": "Kontrollierte Seiten bei den „Neuen Seiten“ ausblenden",
-       "tog-extendwatchlist": "Beobachtungsliste erweitern, um statt nur der letzten Änderung alle Änderungen anzuzeigen.",
+       "tog-extendwatchlist": "Alle, und nicht nur die aktuellsten Änderungen in der Beobachtungsliste anzeigen",
        "tog-usenewrc": "Änderungen auf „Letzte Änderungen“ und der Beobachtungsliste nach Seite gruppieren",
        "tog-numberheadings": "Überschriften automatisch nummerieren",
        "tog-showtoolbar": "Bearbeiten-Werkzeugleiste anzeigen",
@@ -92,7 +92,7 @@
        "tog-watchdefault": "Selbst geänderte Seiten und Dateien automatisch beobachten",
        "tog-watchmoves": "Selbst verschobene Seiten und Dateien automatisch beobachten",
        "tog-watchdeletion": "Selbst gelöschte Seiten und Dateien automatisch beobachten",
-       "tog-watchrollback": "Seiten, bei denen ich eine Zurücksetzung durchgeführt habe, der Beobachtungsliste hinzufügen.",
+       "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-watchlisthidepatrolled": "Kontrollierte Änderungen in der Beobachtungsliste ausblenden",
        "tog-ccmeonemails": "Schicke mir Kopien der E-Mails, die ich anderen Benutzern sende",
        "tog-diffonly": "Beim Versionsvergleich nur die Unterschiede und nicht die vollständige Seite anzeigen",
-       "tog-showhiddencats": "Anzeige versteckter Kategorien",
+       "tog-showhiddencats": "Versteckte Kategorien anzeigen",
        "tog-norollbackdiff": "Unterschied nach dem Zurücksetzen unterdrücken",
        "tog-useeditwarning": "Warnen, sofern eine zur Bearbeitung geöffnete Seite verlassen wird, die nicht gespeicherte Änderungen enthält",
        "tog-prefershttps": "Wenn angemeldet, immer eine sichere Verbindung benutzen.",
        "otherlanguages": "In anderen Sprachen",
        "redirectedfrom": "(Weitergeleitet von $1)",
        "redirectpagesub": "Weiterleitung",
+       "redirectto": "Weiterleitung nach:",
        "lastmodifiedat": "Diese Seite wurde zuletzt am $1 um $2 Uhr geändert.",
        "viewcount": "Diese Seite wurde bisher {{PLURAL:$1|einmal|$1 mal}} abgerufen.",
        "protectedpage": "Geschützte Seite",
        "viewsourcetext": "Du kannst den Quelltext dieser Seite betrachten und kopieren:",
        "viewyourtext": "Du kannst den Quelltext '''deiner Bearbeitung''' dieser Seite betrachten und kopieren:",
        "protectedinterface": "Diese Seite enthält Text für die Benutzeroberfläche der Software auf diesem Wiki und ist geschützt, um Missbrauch vorzubeugen.\nNutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
-       "editinginterface": "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.\nÄnderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.\nNutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
+       "editinginterface": "<strong>Warnung:</strong> Diese Seite enthält von der MediaWiki-Software genutzten Text.\nÄnderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.",
+       "translateinterface": "Um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern, verwende bitte [//translatewiki.net/ translatewiki.net], das MediaWiki-Lokalisierungsprojekt.",
        "cascadeprotected": "Diese Seite ist zur Bearbeitung gesperrt. Sie ist in die {{PLURAL:$1|folgende Seite|folgenden Seiten}} eingebunden, die mittels der Kaskadensperroption geschützt {{PLURAL:$1|ist|sind}}:\n$2",
        "namespaceprotected": "Du hast nicht die erforderliche Berechtigung, um Seiten im Namensraum '''$1''' bearbeiten zu können.",
        "customcssprotected": "Du hast nicht die Berechtigung, diese CSS enthaltende Seite zu bearbeiten, da sie die persönlichen Einstellungen eines anderen Benutzers enthält.",
        "createaccount-text": "Es wurde für dich ein Benutzerkonto „$2“ auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für „$2“ ist „$3“. Du solltest dich nun anmelden und das Passwort ändern.\n\nFalls das Benutzerkonto irrtümlich angelegt wurde, kannst du diese Nachricht ignorieren.",
        "login-throttled": "Du hast zu oft versucht, dich anzumelden.\nBitte warte $1, bevor du es erneut probierst.",
        "login-abort-generic": "Deine Anmeldung war nicht erfolgreich – Abgebrochen",
+       "login-migrated-generic": "Dein Benutzerkonto wurde migriert. Dein Benutzername ist auf diesem Wiki nicht mehr vorhanden.",
        "loginlanguagelabel": "Sprache: $1",
        "suspicious-userlogout": "Deine Abmeldeanfrage wurde verweigert, da sie vermutlich von einem defekten Browser oder einem Cache-Proxy gesendet wurde.",
        "createacct-another-realname-tip": "Der bürgerliche Name ist optional.\nWenn du ihn angibst, wird er für die Zuordnung der Beiträge verwendet.",
        "passwordreset-emailsent-capture": "Eine Passwortzurücksetzungs-E-Mail wurde versandt, die unten angezeigt wird.",
        "passwordreset-emailerror-capture": "Die unten angezeigte Passwortzurücksetzungs-E-Mail wurde generiert, allerdings ist der Versand an {{GENDER:$2|den Benutzer|die Benutzerin}} gescheitert: $1",
        "changeemail": "E-Mail-Adresse ändern",
-       "changeemail-header": "E-Mail-Adresse ändern",
        "changeemail-text": "Fülle dieses Formular vollständig aus, um deine E-Mail-Adresse zu ändern. Du musst dein Passwort angeben, um diese Änderung zu bestätigen.",
        "changeemail-no-info": "Du musst angemeldet sein, um direkt auf diese Seite zugreifen zu können.",
        "changeemail-oldemail": "Aktuelle E-Mail-Adresse:",
        "changeemail-none": "(keine)",
        "changeemail-password": "Dein {{SITENAME}}-Passwort:",
        "changeemail-submit": "E-Mail-Adresse ändern",
-       "changeemail-cancel": "Abbrechen",
        "changeemail-throttled": "Du hast zu viele Anmeldeversuche unternommen.\nBitte warte $1, bevor du es erneut versuchst.",
        "resettokens": "Tokens zurücksetzen",
        "resettokens-text": "Du kannst Tokens zurücksetzen, welche dir den Zugriff auf bestimmte private Daten ermöglichen, die mit deinem Benutzerkonto hier verknüpft sind.\n\nDu solltest dies nur machen, wenn du die Tokens versehentlich mit jemandem geteilt hast oder dein Konto gefährdet ist.",
        "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": "Du bearbeitest diese Seite unangemeldet. Wenn du sie abspeicherst, wird deine aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit unwiderruflich '''öffentlich''' einsehbar.",
+       "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.",
        "anonpreviewwarning": "''Du bist nicht angemeldet. Beim Speichern wird deine IP-Adresse in der Versionsgeschichte aufgezeichnet.''",
        "missingsummary": "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf „{{int:savearticle}}“ klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
        "missingcommenttext": "Dein Abschnitt enthält keinen Text.",
        "content-model-text": "Klartext",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Seiten, die doppelte Argumente in Vorlagenaufrufen verwenden",
+       "duplicate-args-category-desc": "Die Seite enthält Vorlagenaufrufe, die Duplikate von Argumenten verwenden, wie <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> oder <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Achtung:''' Diese Seite enthält zu viele Aufrufe aufwändiger Parserfunktionen.\n\nSie darf nicht mehr als $2 {{PLURAL:$2|Aufruf|Aufrufe}} haben, es {{PLURAL:$1|ist aktuell $1 Aufruf|sind aktuell $1 Aufrufe}}.",
        "expensive-parserfunction-category": "Seiten, die aufwändige Parserfunktionen zu oft aufrufen",
        "post-expand-template-inclusion-warning": "Warnung: Die Größe eingebundener Vorlagen ist zu groß, einige Vorlagen können nicht eingebunden werden.",
        "mergehistory-same-destination": "Ausgangs- und Zielseite dürfen nicht identisch sein",
        "mergehistory-reason": "Grund:",
        "mergelog": "Vereinigungs-Logbuch",
-       "pagemerge-logentry": "vereinigte [[$1]] in [[$2]] (Versionen bis $3)",
        "revertmerge": "Vereinigung rückgängig machen",
        "mergelogpagetext": "Dies ist das Logbuch der vereinigten Versionsgeschichten.",
        "history-title": "$1: Versionsgeschichte",
        "search-result-category-size": "{{PLURAL:$1|1 Seite|$1 Seiten}} ({{PLURAL:$2|1 Unterkategorie|$2 Unterkategorien}}, {{PLURAL:$3|1 Datei|$3 Dateien}})",
        "search-redirect": "(Weiterleitung von „$1“)",
        "search-section": "(Abschnitt $1)",
+       "search-category": "(Kategorie $1)",
        "search-file-match": "(treffende Dateiinhalte)",
        "search-suggest": "Meintest du „$1“?",
        "search-interwiki-caption": "Schwesterprojekte",
        "searchall": "alle",
        "showingresults": "Hier {{PLURAL:$1|ist '''1''' Ergebnis|sind '''$1''' Ergebnisse}}, beginnend mit Nummer '''$2.'''",
        "showingresultsinrange": "Unten {{PLURAL:$1|wird <strong>ein</strong> Ergebnis|werden bis zu <strong>$1</strong> Ergebnisse}} im Bereich <strong>$2</strong> bis <strong>$3</strong> angezeigt.",
-       "showingresultsheader": "{{PLURAL:$5|Ergebnis '''$1''' von '''$3'''|Ergebnisse '''$1–$2''' von '''$3'''}} für '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Ergebnis <strong>$1</strong> von <strong>$3</strong>|Ergebnisse <strong>$1 bis $2</strong> von <strong>$3</strong>}}",
        "search-nonefound": "Zu deiner Suchanfrage wurden keine Ergebnisse gefunden.",
        "powersearch-legend": "Erweiterte Suche",
        "powersearch-ns": "Suche in Namensräumen:",
        "gender-female": "Ich bin weiblich",
        "prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um dich anzureden sowie als Hinweis für andere durch Verwendung des zutreffenden grammatikalischen Geschlechts.\nDiese Information ist öffentlich.",
        "email": "E-Mail",
-       "prefs-help-realname": "Dies ist eine freiwillige Angabe. Damit kann dein bürgerlicher Name deinen Beiträgen zugeordnet werden.",
+       "prefs-help-realname": "Der bürgerliche Name ist optional.\nFalls angegeben, kann er verwendet werden, um dir eine Zuordnung für deine Beiträge zu geben.",
        "prefs-help-email": "Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern du dein Passwort vergessen hast.",
        "prefs-help-email-others": "Mit anderen Benutzern kannst du auch über die Benutzerdiskussionsseiten Kontakt aufnehmen, ohne dass du deine Identität offenlegen musst.",
        "prefs-help-email-required": "Es wird eine gültige E-Mail-Adresse benötigt.",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Versionsvergleich",
        "prefs-help-prefershttps": "Diese Einstellung wird bei deiner nächsten Anmeldung wirksam.",
+       "prefswarning-warning": "Du hast Änderungen an deinen Einstellungen durchgeführt, die noch nicht gespeichert wurden.\nWenn du diese Seite verlässt ohne auf „$1“ zu klicken, werden deine Einstellungen nicht aktualisiert.",
        "prefs-tabs-navigation-hint": "Tipp: Du kannst die linke und rechte Pfeiltasten benutzen, um zwischen den Registerkarten in der Reiterliste zu navigieren.",
        "email-address-validity-valid": "Diese E-Mail-Adresse scheint gültig zu sein.",
        "email-address-validity-invalid": "Eine gültige E-Mail-Adresse ist erforderlich.",
        "grouppage-suppress": "{{ns:project}}:Oversighter",
        "right-read": "Seiten lesen",
        "right-edit": "Seiten bearbeiten",
-       "right-createpage": "Seiten erstellen (außer Diskussionsseiten)",
+       "right-createpage": "Seiten erstellen (die keine Diskussionsseiten sind)",
        "right-createtalk": "Diskussionsseiten erstellen",
        "right-createaccount": "Benutzerkonto erstellen",
        "right-minoredit": "Bearbeitungen als klein markieren",
        "statistics": "Statistik",
        "statistics-header-pages": "Seitenstatistik",
        "statistics-header-edits": "Bearbeitungsstatistik",
-       "statistics-header-views": "Seitenaufrufstatistik",
        "statistics-header-users": "Benutzerstatistik",
        "statistics-header-hooks": "Andere Statistiken",
        "statistics-articles": "Inhaltsseiten",
        "statistics-files": "Hochgeladene Dateien",
        "statistics-edits": "Seitenbearbeitungen",
        "statistics-edits-average": "Bearbeitungen pro Seite im Durchschnitt",
-       "statistics-views-total": "Seitenaufrufe gesamt",
-       "statistics-views-total-desc": "Aufrufe nicht vorhandener Seiten und von Spezialseiten werden nicht berücksichtigt.",
-       "statistics-views-peredit": "Seitenaufrufe pro Bearbeitung",
        "statistics-users": "Registrierte [[Special:ListUsers|Benutzer]]",
        "statistics-users-active": "Aktive Benutzer",
        "statistics-users-active-desc": "Benutzer mit Bearbeitungen {{PLURAL:$1|während der letzten 24 Stunden|während der vergangenen $1 Tage}}",
-       "statistics-mostpopular": "Meistbesuchte Seiten",
        "pageswithprop": "Seiten mit einer Seiteneigenschaft",
        "pageswithprop-legend": "Seiten mit einer Seiteneigenschaft",
        "pageswithprop-text": "Diese Spezialseite listet Seiten auf, die eine bestimmte Seiteneigenschaft verwenden.",
        "uncategorizedtemplates": "Nicht kategorisierte Vorlagen",
        "unusedcategories": "Verwaiste Kategorien",
        "unusedimages": "Verwaiste Dateien",
-       "popularpages": "Beliebteste Seiten",
        "wantedcategories": "Gewünschte Kategorien",
        "wantedpages": "Gewünschte Seiten",
        "wantedpages-badtitle": "Ungültiger Titel im Ergebnis: $1",
        "pager-older-n": "{{PLURAL:$1|vorheriger|vorherige $1}}",
        "suppress": "Oversight",
        "querypage-disabled": "Diese Spezialseite wurde aus Gründen der Leistungserhaltung deaktiviert.",
+       "apihelp": "API-Hilfe",
+       "apihelp-no-such-module": "Modul „$1“ nicht gefunden.",
        "booksources": "ISBN-Suche",
        "booksources-search-legend": "Suche nach Bezugsquellen für Bücher",
-       "booksources-go": "Suchen",
+       "booksources-search": "Suchen",
        "booksources-text": "Dies ist eine Liste mit Links zu Internetseiten, die neue und gebrauchte Bücher verkaufen. Dort kann es auch weitere Informationen über die Bücher geben. {{SITENAME}} ist mit keinem dieser Anbieter geschäftlich verbunden.",
        "booksources-invalid-isbn": "Vermutlich ist die ISBN ungültig.\nBitte prüfe, ob sie korrekt von der Quelle übertragen wurde.",
        "specialloguserlabel": "Ausführender Benutzer:",
        "wlheader-enotif": "Der E-Mail-Benachrichtigungsdienst ist aktiviert.",
        "wlheader-showupdated": "Seiten mit noch nicht gesehenen Änderungen werden '''fett''' dargestellt.",
        "wlnote": "Es {{PLURAL:$1|folgt die letzte Änderung|folgen die letzten <strong>$1</strong> Änderungen}} der letzten {{PLURAL:$2|Stunde|<strong>$2</strong> Stunden}}. Stand: $3, $4 Uhr.",
-       "wlshowlast": "Zeige die Änderungen der letzten $1 Stunden, $2 Tage oder $3.",
+       "wlshowlast": "Zeige die Änderungen der letzten $1 Stunden, $2 Tage.",
        "watchlist-options": "Anzeigeoptionen",
        "watching": "Beobachten …",
        "unwatching": "Nicht mehr beobachten …",
        "protect-othertime": "Andere Sperrdauer:",
        "protect-othertime-op": "andere Sperrdauer",
        "protect-existing-expiry": "Aktuelles Seitenschutzende: $2, $3 Uhr",
+       "protect-existing-expiry-infinity": "Vorhandene Ablaufzeit: unbeschränkt",
        "protect-otherreason": "Anderer/ergänzender Grund:",
        "protect-otherreason-op": "Anderer Grund",
        "protect-dropdown": "* Allgemeine Schutzgründe\n** Edit-War\n** Wiederkehrender Vandalismus\n** Wiederholtes Einstellen von Werbung\n** Häufig eingebundene Vorlage\n** Seite mit hoher Besucherzahl",
        "unblocked": "[[User:$1|$1]] wurde freigegeben",
        "unblocked-range": "Sperre für $1 wurde aufgehoben",
        "unblocked-id": "Sperr-ID $1 wurde freigegeben",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] wurde freigegeben.",
        "blocklist": "Gesperrte Benutzer",
        "ipblocklist": "Gesperrte Benutzer",
        "ipblocklist-legend": "Suche nach einem gesperrten Benutzer",
        "tooltip-pt-mycontris": "Liste eigener Beiträge",
        "tooltip-pt-login": "Sich anzumelden wird zwar gerne gesehen, ist aber keine Pflicht.",
        "tooltip-pt-logout": "Abmelden",
+       "tooltip-pt-createaccount": "Du wirst ermuntert, ein Benutzerkonto zu erstellen und dich anzumelden. Es ist jedoch nicht verpflichtend.",
        "tooltip-ca-talk": "Diskussion zum Seiteninhalt",
        "tooltip-ca-edit": "Seite bearbeiten. Bitte vor dem Speichern die Vorschaufunktion benutzen.",
        "tooltip-ca-addsection": "Neuen Abschnitt beginnen",
        "tooltip-feed-atom": "Atom-Feed dieser Seite",
        "tooltip-t-contributions": "Liste der Beiträge von diesem Benutzer ansehen",
        "tooltip-t-emailuser": "Eine E-Mail an diesen Benutzer senden",
+       "tooltip-t-info": "Weitere Informationen über diese Seite",
        "tooltip-t-upload": "Dateien hochladen",
        "tooltip-t-specialpages": "Liste aller Spezialseiten",
        "tooltip-t-print": "Druckansicht dieser Seite",
        "others": "anderen",
        "siteusers": "{{SITENAME}}-{{PLURAL:$2|Benutzer}} $1",
        "anonusers": "{{PLURAL:$2|unangemeldetem|unangemeldeten}} {{SITENAME}}-{{PLURAL:$2|Benutzer|Benutzern}} $1",
-       "creditspage": "Seiteninformationen",
-       "nocredits": "Für diese Seite sind keine Informationen vorhanden.",
+       "creditspage": "Seitenzuschreibung",
+       "nocredits": "Für diese Seite sind keine Zuschreibungen vorhanden.",
        "spamprotectiontitle": "Spamschutzfilter",
        "spamprotectiontext": "Der Text, die du speichern willst, wurde vom Spamschutzfilter blockiert.\nDas liegt wahrscheinlich an einem Link auf eine externe Seite.",
        "spamprotectionmatch": "'''Der folgende Text wurde vom Spamfilter gefunden: ''$1'''''",
        "pageinfo-robot-policy": "Indizierung durch Suchmaschinen",
        "pageinfo-robot-index": "Erlaubt",
        "pageinfo-robot-noindex": "Nicht erlaubt",
-       "pageinfo-views": "Anzahl der Seitenaufrufe",
        "pageinfo-watchers": "Anzahl der Beobachter der Seite",
        "pageinfo-few-watchers": "Weniger als {{PLURAL:$1|ein|$1}} Beobachter",
        "pageinfo-redirects-name": "Anzahl der Weiterleitungen zu dieser Seite",
        "exif-urgency-low": "Niedrig ($1)",
        "exif-urgency-high": "Hoch ($1)",
        "exif-urgency-other": "Benutzerdefinierte Priorität ($1)",
-       "watchlistall2": "alle",
        "namespacesall": "alle",
        "monthsall": "alle",
        "confirmemail": "E-Mail-Adresse bestätigen (Authentifizierung)",
        "unknown_extension_tag": "Unbekanntes Parsertag „$1“",
        "duplicate-defaultsort": "Achtung: Der Sortierungsschlüssel „$2“ überschreibt den vorher verwendeten Schlüssel „$1“.",
        "duplicate-displaytitle": "<strong>Warnung:</strong> Der Anzeigetitel „$2“ überschreibt den früheren Anzeigetitel „$1“.",
+       "invalid-indicator-name": "<strong>Fehler:</strong> Das Attribut <code>name</code> des Seitenstatusindikators darf nicht leer sein.",
        "version": "Version",
        "version-extensions": "Installierte Erweiterungen",
        "version-skins": "Installierte Benutzeroberflächen",
        "revdelete-uname-unhid": "Benutzername freigegeben",
        "revdelete-restricted": "Einschränkungen gelten auch für Administratoren",
        "revdelete-unrestricted": "Einschränkungen für Administratoren aufgehoben",
+       "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-move-move_redir": "$1 {{GENDER:$2|verschob}} die Seite $3 nach $4 und überschrieb dabei eine Weiterleitung",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|lud}} eine neue Version von $3 hoch",
        "logentry-upload-revert": "$1 {{GENDER:$2|lud}} $3 hoch",
        "rightsnone": "(–)",
+       "revdelete-summary": "Zusammenfassungskommentar",
        "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:",
        "api-error-stashfailed": "Interner Fehler: Der Server konnte keine temporäre Datei speichern.",
        "api-error-publishfailed": "Interner Fehler: Der Server konnte die temporäre Datei nicht veröffentlichen.",
        "api-error-stasherror": "Beim Hochladen der Datei gab es einen Fehler.",
+       "api-error-stashedfilenotfound": "Die vorab gespeicherte Datei wurde beim Versuch, sie vom Speicher hochzuladen, nicht gefunden.",
+       "api-error-stashpathinvalid": "Der Pfad, unter dem die gespeicherte Datei gefunden werden sollte, war ungültig.",
+       "api-error-stashfilestorage": "Beim Speichern der Datei in den Speicher gab es einen Fehler.",
+       "api-error-stashzerolength": "Der Server konnte die Datei nicht speichern, da sie eine Länge von Null hat.",
+       "api-error-stashnotloggedin": "Du musst angemeldet sein, um Dateien in den Hochladespeicher zu speichern.",
+       "api-error-stashwrongowner": "Die Datei, auf die du im Speicher zugreifen möchtest, gehört nicht dir.",
+       "api-error-stashnosuchfilekey": "Der Dateischlüssel, auf den du im Speicher zugreifen möchtest, ist nicht vorhanden.",
        "api-error-timeout": "Der Server hat nicht innerhalb der erwarteten Zeit reagiert.",
        "api-error-unclassified": "Ein unbekannter Fehler ist aufgetreten.",
        "api-error-unknown-code": "Unbekannter Fehler: „$1“",
        "duration-millennia": "$1 {{PLURAL:$1|Jahrtausend|Jahrtausende}}",
        "rotate-comment": "Bild um $1 {{PLURAL:$1|Grad}} im Uhrzeigersinn gedreht",
        "limitreport-title": "Profilingdaten des Parsers:",
-       "limitreport-cputime": "CPU-Zeit-Nutzung",
+       "limitreport-cputime": "Genutzte CPU-Zeit",
        "limitreport-cputime-value": "{{PLURAL:$1|Eine Sekunde|$1 Sekunden}}",
-       "limitreport-walltime": "Echtzeitnutzung",
+       "limitreport-walltime": "Genutzte Zeit",
        "limitreport-walltime-value": "{{PLURAL:$1|Eine Sekunde|$1 Sekunden}}",
-       "limitreport-ppvisitednodes": "Besuchte Knotenanzahl des Präprozessors",
+       "limitreport-ppvisitednodes": "Vom Präprozessor besuchte Knoten",
        "limitreport-ppvisitednodes-value": "$1/$2",
-       "limitreport-ppgeneratednodes": "Erzeugte Knotenanzahl des Präprozessors",
+       "limitreport-ppgeneratednodes": "Vom Präprozessor erzeugte Knoten",
        "limitreport-ppgeneratednodes-value": "$1/$2",
        "limitreport-postexpandincludesize": "Einbindungsgröße nach dem Expandieren",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|Byte|Bytes}}",
        "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 Standard-Benutzeroberfläche für dein Wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, ist nicht verfügbar.\n\nDeine Installation scheint die folgenden Benutzeroberflächen zu enthalten. Siehe das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch] für Informationen zur Aktivierung dieser und Auswahl des Standards.\n\n$2\n\n; Falls du gerade MediaWiki installiert hast:\n: Du hast vermutlich von Git oder direkt vom Quellcode mithilfe einer anderen Methode installiert. Dies wird erwartet.\n:* Versuche, einige Benutzeroberflächen aus dem [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Benutzeroberflächenverzeichnis] zu installieren.\n:* Lade den [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] herunter, der einige Benutzeroberflächen und Erweiterungen enthält. Du kannst das Verzeichnis <code>skins/</code> kopieren und einfügen.\n: Dies sollte nicht dein Git-Repositorium beeinträchtigen, falls du ein MediaWiki-Entwickler bist.\n\n; Falls du gerade MediaWiki aktualisiert hast:\n: MediaWiki 1.24 und neuere Versionen aktivieren installierte Benutzeroberflächen nicht mehr automatisch (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>$3</pre>\n\n; Falls du gerade <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 Standard-Benutzeroberfläche für dein Wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, ist nicht verfügbar.\n\nDu hast keine installierten Benutzeroberflächen.\n\n; Falls du gerade MediaWiki installiert hast:\n: Du hast vermutlich von Git oder direkt vom Quellcode mithilfe einer anderen Methode installiert. Dies wird erwartet.\n:* Versuche, einige Benutzeroberflächen aus dem [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Benutzeroberflächenverzeichnis] zu installieren.\n:* Lade den [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] herunter, das mehrere Benutzeroberflächen und Erweiterungen enthält. Du kannst das Verzeichnis <code>skins/</code> kopieren und einfügen.\n: Dies sollte nicht dein Git-Repositorium beeinträchtigen, falls du ein MediaWiki-Entwickler bist. Siehe das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch] für Informationen zur Aktivierung von Benutzeroberflächen und Auswahl des Standards.",
+       "default-skin-not-found": "Hoppla! Die in <code dir=\"ltr\">$wgDefaultSkin</code> als <code>$1</code> definierte Standardbenutzeroberfläche für dein Wiki ist nicht verfügbar.\n\nDeine Installation scheint die folgenden Benutzeroberflächen zu enthalten. Siehe [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de das Benutzerhandbuch] zur Aktivierung und Auswahl des Standards.\n\n$2\n\n; Falls du gerade MediaWiki installiert hast:\n: Du hast vermutlich von Git oder direkt vom Quellcode mithilfe einer anderen Methode installiert. Dies wird erwartet. Versuche einige Benutzeroberflächen aus dem  [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Benutzeroberflächenverzeichnis] zu installieren, indem du:\n:* Den [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] herunterlädst, der mit verschiedenen Benutzeroberflächen und Erweiterungen kommt. Du kannst das Verzeichnis <code>skins/</code> kopieren und einfügen.\n:* Eine der <code>mediawiki/skins/*</code>-Repositorien über Git in das <code dir=\"ltr\">skins/</code>-Verzeichnis deiner MediaWiki-Installation klonst.\n: Dies sollte nicht dein Git-Repositorium beeinträchtigen, falls du ein MediaWiki-Entwickler bist.\n\n; Falls du gerade MediaWiki aktualisiert hast:\n: MediaWiki 1.24 und neuere Versionen aktivieren nicht mehr automatisch installierte Benutzeroberflächen (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 <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 in <code>$wgDefaultSkin</code> als <code>$1</code> definierte Standardbenutzeroberfläche für dein Wiki ist nicht verfügbar.\n\nDu hast keine installierten Benutzeroberflächen.\n\n; Falls du gerade MediaWiki installiert oder aktualisiert hast:\n: Du hast vermutlich von Git oder direkt vom Quellcode mithilfe einer anderen Methode installiert. Dies wird erwartet. MediaWiki 1.24 und neuere Versionen enthalten keine Benutzeroberflächen im Haupt-Repositorium. Versuche einige Benutzeroberflächen aus dem [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Benutzeroberflächenverzeichnis] zu installieren, indem du:\n:* Den [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] herunterlädst, der mit verschiedenen Benutzeroberflächen und Erweiterungen kommt. Du kannst das  <code>skins/</code>-Verzeichnis kopieren und einfügen.\n:* Eine der <code>mediawiki/skins/*</code>-Repositorien über Git in das <code dir=\"ltr\">skins/</code>-Verzeichnis deiner MediaWiki-Installation klonst.\n: Dies sollte nicht dein Git-Repositorium beeinträchtigen, falls du ein MediaWiki-Entwickler bist. Siehe das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch] zur Aktivierung von Benutzeroberflächen und Auswahl des Standards.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiviert)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''deaktiviert''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''deaktiviert''')",
+       "mediastatistics": "Medienstatistiken",
+       "mediastatistics-summary": "Statistiken über hochgeladene Dateitypen. Dies beinhaltet nur die aktuellste Version einer Datei. Alte oder gelöschte Dateiversionen sind ausgeschlossen.",
+       "mediastatistics-nfiles": "$1 ($2 %)",
+       "mediastatistics-nbytes": "{{PLURAL:$1|Ein Byte|$1 Bytes}} ($2; $3 %)",
+       "mediastatistics-table-mimetype": "MIME-Typ",
+       "mediastatistics-table-extensions": "Mögliche Erweiterungen",
+       "mediastatistics-table-count": "Anzahl der Dateien",
+       "mediastatistics-table-totalbytes": "Gesamtgröße",
+       "mediastatistics-header-unknown": "Unbekannt",
+       "mediastatistics-header-bitmap": "Bitmap-Bilder",
+       "mediastatistics-header-drawing": "Zeichnungen (Vektorbilder)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Videos",
+       "mediastatistics-header-multimedia": "Rich Media",
+       "mediastatistics-header-office": "Office",
+       "mediastatistics-header-text": "Text",
+       "mediastatistics-header-executable": "Ausführbare Dateien",
+       "mediastatistics-header-archive": "Komprimierte Formate",
+       "json-warn-trailing-comma": "{{PLURAL:$1|Ein anhängendes Komma wurde|$1 anhängende Kommas wurden}} aus JSON entfernt",
+       "json-error-unknown": "Es gab ein Problem mit dem JSON. Fehler: $1",
+       "json-error-depth": "Die maximale Stapeltiefe wurde überschritten",
+       "json-error-state-mismatch": "Ungültiges oder fehlerhaftes JSON",
+       "json-error-ctrl-char": "Steuerzeichenfehler, vermutlich falsch kodiert",
+       "json-error-syntax": "Syntax-Fehler",
+       "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"
 }
index 7b0a6ad..95472a5 100644 (file)
        "unprotectthispage": "Starkerdışe ena peler bıvurne",
        "newpage": "Pela newiye",
        "talkpage": "Ena pele sero werêne",
-       "talkpagelinktext": "Vatenayış",
+       "talkpagelinktext": "Werênayış",
        "specialpage": "Pela xısusiye",
        "personaltools": "Hacetê şexsiy",
        "articlepage": "Pela zerreki bıvêne",
        "passwordreset-emailsent-capture": "Yew e-posteyê esterıtışê parolayo ke rışiya, no cêr mocniyayo.",
        "passwordreset-emailerror-capture": "Yew e-posteyê esterıtışê parolayo ke rışiya, no cêr mocniyayo, ema {{GENDER:$2|karber}}i rê rıştış de mıwefeq nêbi: $1",
        "changeemail": "E-posta adresa xo bıvurnê",
-       "changeemail-header": "E-posya adresta hesabdê xo bıvurnê",
        "changeemail-text": "Şıma ke qailê  e-postay xo bıvırnê, enê formi pırr kerê. Raştkerdışi rê ki şıma gani parolay xo bınusnê",
        "changeemail-no-info": "Şıma gani bıkewê pele ke derdest bıresê na pele.",
        "changeemail-oldemail": "E-postay şımawa nıkaêne:",
        "changeemail-none": "(Çıniyo)",
        "changeemail-password": "Parolay şımawa {{SITENAME}}i:",
        "changeemail-submit": "E-postay xo bıvırnên",
-       "changeemail-cancel": "Bıtexelne",
        "changeemail-throttled": "Şıma zaf ronıştış akerdış ke.\nKerem ke verdi dekewten $1 bıpawe.",
        "resettokens": "Nışanan reset ke",
        "resettokens-text": "Şıma tiya de hesabê şıma ra elaqedar tayê kılitê icazetê cıresayışê melumati şenê sıfır kerê.\n\nŞıma be ğeletiye ra ke nê kerdê vıla ya zi hesabê şıma de xırabiye ke esta, naye bıkerê.",
        "mergehistory-reason": "Sebeb:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Qeydé zew kerdışi",
-       "pagemerge-logentry": "[[$1]] u [[$2]] yew kerd (revizyonî heta $3)",
        "revertmerge": "Abırnê",
        "mergelogpagetext": "Cêr de yew liste esta ke mocnena ra, raya tewr peyêne kamci pela tarixi be a bine ra şanawa pê.",
        "history-title": "Tarixê çımraviyarnayışê \"$1\"",
        "searchall": "pêro",
        "showingresults": "#<strong>$2</strong> netican ra {{PLURAL:$1|<strong>1</strong> netice cêr dero|<strong>$1</strong> neticey cêr derê}}.",
        "showingresultsinrange": "{{PLURAL:$1|<strong>1</strong> netice|<strong>$1</strong> neticey}} be mabeynê #<strong>$2</strong> ra be #<strong>$3</strong> cêr asenê.",
-       "showingresultsheader": "{{PLURAL:$5|Neticeyê '''$1''' of '''$3'''|Neticeyanê '''$1 - $2''' hetê '''$3'''}} qe '''$4'''",
        "search-nonefound": "Zey perskerdışê şıma netice nêvêniya.",
        "powersearch-legend": "Cıgeyrayışo hera",
        "powersearch-ns": "Cayanê nameyan de cıgeyrayış:",
        "action-deleterevision": "nê çımraviyarnayışi bestere",
        "action-deletedhistory": "tarixê ena pel ki estereyî biya, ey bivine",
        "action-browsearchive": "pelanê esterıteyan bıgeyre",
-       "action-undelete": "ena pele reyna biyere",
+       "action-undelete": "ena pele meestere",
        "action-suppressrevision": "revizyone ki nimnaye biye reyna bivîne u restore bike",
        "action-suppressionlog": "enê qeydê xısusi bıvêne",
        "action-block": "enê karberi vurnayışi ra bıreyne",
        "action-editmyprivateinfo": "Xısusi malumate xo bıvurne",
        "nchanges": "$1 {{PLURAL:$1|fın vurna|fıni vurna}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ra yok wazino}}",
-       "enhancedrc-history": "verenayış",
+       "enhancedrc-history": "tarix",
        "recentchanges": "Vurnayışê peyêni",
        "recentchanges-legend": "Tercihê vurnayışanê peyênan",
        "recentchanges-summary": "Ena pele de wiki sero vurnayışanê peyênan teqib ke.",
        "randomincategory": "Ğoseri pera kategoriya",
        "randomincategory-invalidcategory": "\"$1\" yew nameyê kategoriya vêrdiye niyo.",
        "randomincategory-nopages": "Kategori da [[:Category:$1|$1]] de qet  per çıniya.",
-       "randomincategory-selectcategory": "Pera ke cıra raşt ameye kategori do bıgéri yo: $1 $2.",
-       "randomincategory-selectcategory-submit": "Şo",
        "randomredirect": "Serçarnayışo rastameye",
        "randomredirect-nopages": "Cayê nameyê \"$1\" de serşıkıtışi çıniyê.",
        "statistics": "İstatistiki",
        "statistics-header-pages": "İstatistikê pele",
        "statistics-header-edits": "Îstatistikê vurnayîşî",
-       "statistics-header-views": "Îstatistiksê vînayîşî",
        "statistics-header-users": "Îstatistiksê karberî",
        "statistics-header-hooks": "Îstatistiksê binî",
        "statistics-articles": "Pelanê tedesteyî",
        "statistics-files": "Dosyayê bar biye",
        "statistics-edits": "{{SITENAME}} saz kerdış ra hetana newke amora vırnayışan",
        "statistics-edits-average": "Her pele sero nısbi vurnayış",
-       "statistics-views-total": "Yekunî bivîne",
-       "statistics-views-total-desc": "Peleyê ke çınyê yana xısusiyê e nina zerre nêkerdê",
-       "statistics-views-peredit": "Ser her vurnayîşî de vînayîşî",
        "statistics-users": "Qeyd biye [[Special:ListUsers|karberî]]",
        "statistics-users-active": "Karberê aktifi",
        "statistics-users-active-desc": "{{PLURAL:$1|roco peyin de|$1 roco peyin de}} karber ê ke kar kerdê.",
-       "statistics-mostpopular": "Pelayanê ke tewr zafî vînî biye",
        "pageswithprop": "Peli be yew xısusiyetê pele",
        "pageswithprop-legend": "Peli be yew xısusiyetê pele",
        "pageswithprop-text": "Na per pimanen pera kena liste.",
        "uncategorizedtemplates": "Şablonê ke bêkategoriyê",
        "unusedcategories": "Kategoriyê ke nêgureniyê",
        "unusedimages": "Dosyeyê ke nê xebtênê",
-       "popularpages": "Pelî ke populer o.",
        "wantedcategories": "Kategoriyê ke waziyayê",
        "wantedpages": "Peleye ke waştênê",
        "wantedpages-badtitle": "sernuşte meqbul niyo: $1",
        "booksources": "Çımeyê kıtaban",
        "booksources-search-legend": "Seba çımeyanê kıtaban cı geyre",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Şo",
+       "booksources-search": "Cı geyre",
        "booksources-text": "listeya cêrıni, keyepelê kitap rotoxan o.",
        "booksources-invalid-isbn": "ISBN raşt nêasena bıewnê çımeyê orjinali, raşt kopya biya nê nêbiyaya?",
        "specialloguserlabel": "Kerdoğ:",
        "categoriesfrom": "Kategoriyê ke be ninan dest pêkenê, bımocne:",
        "special-categories-sort-count": "goreyê çendi rêz ker.",
        "special-categories-sort-abc": "alfabetik rêz ker",
-       "deletedcontributions": "İştiraqê karberan de besternayına",
-       "deletedcontributions-title": "Îştirakê karberî wederna",
+       "deletedcontributions": "İştırakê karberi esterdi",
+       "deletedcontributions-title": "İştırakê karberi esterdi",
        "sp-deletedcontributions-contribs": "iştıraqi",
        "linksearch": "Gıreyê teberi cı geyrê",
        "linksearch-pat": "bıgêr motif:",
        "wlheader-enotif": "E-mail xeber dayiş abiyo.",
        "wlheader-showupdated": "ziyaretê şıma ye peyini de vuryayişê peli pê '''nuşteyo qalıni''' mocyayo.",
        "wlnote": "$3 seate u bahde $4 deqa dıma {{PLURAL:$2|ju seate dı|'''$2''' ju seate dı}} {{PLURAL:$1|vurnayışe peyeni|vurnayışe '''$1''' peyeni}} cêrdeyê",
-       "wlshowlast": "Peyni de vurnayışan ra  $1 seata u $2 roca $3 bımocnê",
+       "wlshowlast": "Peyni de vurnayışan ra  $1 seata u $2 roca  bımocnê",
        "watchlist-options": "Tercihê liste da seyri",
        "watching": "Seyr ke...",
        "unwatching": "Seyr meke...",
        "sp-contributions-newbies-sub": "Qe hesebê newe",
        "sp-contributions-newbies-title": "Îştîrakê karberî ser hesabê neweyî",
        "sp-contributions-blocklog": "Qeydê blokey",
-       "sp-contributions-deleted": "İştırakê karberi esterd",
+       "sp-contributions-deleted": "iştırakê karberi esterdi",
        "sp-contributions-uploads": "barkerdey",
        "sp-contributions-logs": "qeydi",
        "sp-contributions-talk": "werênayış",
        "import": "Peleyi import bik",
        "importinterwiki": "Împortê transwîkî",
        "import-interwiki-text": "qey kırıştışê zerreyi yew wiki u pel bıvıcinê.\ntarixê revizyon u nameyê nuştoxi pawyene.\nkarê zerredayişê benateyê wikiyani[[Special:Log/import|zerreyê rocaneyê kırıştî de]] qeyd beno.",
-       "import-interwiki-source": "Çime wîkî/pel:",
        "import-interwiki-history": "Qe eno pel, revizyonê tarixê hemî kopya bike",
        "import-interwiki-templates": "Şablonê hemî dehil bike",
        "import-interwiki-submit": "Azare de",
        "pageinfo-robot-policy": "Weziyetê motor de cıgeyrayışi",
        "pageinfo-robot-index": "İndeksbiyayen",
        "pageinfo-robot-noindex": "İndeksnêbiyayen",
-       "pageinfo-views": "Amarina mocnayışan",
        "pageinfo-watchers": "Amariya pela serykeran",
        "pageinfo-few-watchers": "$1 ra tayê {{PLURAL:$1|seyrker|seyrkeri}}",
        "pageinfo-redirects-name": "Hetenayışê na perer",
        "hours": "{{PLURAL:$1|$1 saete|$1 saetan}}",
        "days": "{{PLURAL:$1|$1 roce|$1 roci}}",
        "weeks": "{{PLURAL:$1|$1 hefte|$1 heftey}}",
-       "months": "{{PLURAL:$1|aşme|$1 aşman}}",
+       "months": "{{PLURAL:$1|aşme|$1 aşmi}}",
        "years": "{{PLURAL:$1|$1 serre|$1 serri}}",
        "ago": "Verê $1",
        "just-now": "tafte nıka",
        "exif-urgency-low": "($1) Kemiyo",
        "exif-urgency-high": "( $1 ) Vêşiyo",
        "exif-urgency-other": "Sıftê  şınasiya karberi ($1)",
-       "watchlistall2": "pêro",
        "namespacesall": "pêro",
        "monthsall": "pêro",
        "confirmemail": "Adresê e-posta tesdiq ker",
        "logentry-rights-rights-legacy": "$1 qandê $3 rê ezayiya grube {{GENDER:$2|vuriye}}",
        "logentry-rights-autopromote": "$1 otomatikmen $4 ra $5 {{GENDER:$2|terfi bi}}",
        "rightsnone": "(çıniyo)",
+       "revdelete-summary": "kılmvatışê vuriyayişi",
        "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:",
index 2cebf9a..e079cf5 100644 (file)
        "passwordreset-emailsent-capture": "E-mail za anulěrowanje gronidła jo se pósłała, kótaraž pokazujo se dołojce.",
        "passwordreset-emailerror-capture": "E-mail za anulěrowanje gronidła jo se napórała, kótaraž se dołojce pokazujo, ale słanje {{GENDER:$2|wužywarjeju|wužywarce}} njejo se raźiło: $1",
        "changeemail": "E-mailowu adresu změniś",
-       "changeemail-header": "Kontowu e-mailowu adresu změniś",
        "changeemail-text": "Wupołni toś ten formular, aby swóju e-mailowu adresu změnił. Musyš swójo gronidło zapódaś, aby toś tu změnu wobkšuśił.",
        "changeemail-no-info": "Dejš pśizjawjony byś, aby direktny pśistup na toś ten bok měł.",
        "changeemail-oldemail": "Aktualna e-mailowa adresa:",
        "changeemail-none": "(žedna)",
        "changeemail-password": "Twójo gronidło za {{GRAMMAR:akuzatiw|{{SITENAME}}}}",
        "changeemail-submit": "E-mailowu adresu změniś",
-       "changeemail-cancel": "Pśetergnuś",
        "changeemail-throttled": "Sy pśecesto wopytał se pśizjawiś.\nPócakaj pšosym $1, nježli až wopytajoš znowego.",
        "resettokens": "Tokeny slědk stajiś",
        "resettokens-text": "Móžoš tokeny slědk stajiś, kótarež dowóluju pśistup na wěste priwatne daty, kótarež su z twójim kontom zwězane.\n\nTy by dejał to cyniś, jolic sy je zmylnje z někim źělił abo jolic twóje konto jo se nadpadało.",
        "mergehistory-same-destination": "Žrědłowy bok a celowy bok njesmějotej identiskej byś",
        "mergehistory-reason": "Pśicyna:",
        "mergelog": "Protokol zjadnośenja",
-       "pagemerge-logentry": "zjadnośi [[$1]] do [[$2]] (Wersije až do $3)",
        "revertmerge": "Zjadnośenje anulěrowaś",
        "mergelogpagetext": "Dołojce jo lisćina nejnowejšych zjadnośenjow historije boka z drugej.",
        "history-title": "$1: Wersijowe stawizny",
        "searchall": "wše",
        "showingresults": "How {{PLURAL:|jo '''1''' wuslědk|stej '''$1''' wuslědka|su '''$1''' wuslědki}} wót cysła '''$2'''.",
        "showingresultsinrange": "Dołojce pokazujo se do {{PLURAL:$1|<strong>1</strong> wuslědka|<strong>$1</strong> wuslědkowu|<strong>$1</strong> wuslědkow}} we wobłuku <strong>$2</strong> až do <strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Wuslědk '''$1''' z '''$3'''|Wuslědki '''$1 - $2''' z '''$3'''}} za '''$4'''",
        "search-nonefound": "Njejsu se wuslědki namakali, kótarež wótpowěduju napšašowanjeju.",
        "powersearch-legend": "Rozšyrjone pytanje",
        "powersearch-ns": "W mjenjowych rumach pytaś:",
        "randomincategory": "Pśipadny bok w kategoriji",
        "randomincategory-invalidcategory": "\"$1\" njejo płaśiwe kategorijowe mě.",
        "randomincategory-nopages": "W kategoriji [[:Category:$1|$1]] žedne boki njejsu.",
-       "randomincategory-selectcategory": "Pśipadny bok z kategorija: $1 $2",
-       "randomincategory-selectcategory-submit": "Wótpósłaś",
        "randomredirect": "Pśipadne dalejpósrědnjenje",
        "randomredirect-nopages": "W mjenjowem rumje \"$1\" njejsu dalejpósrědnjenja.",
        "statistics": "Statistika",
        "statistics-header-pages": "Statistika bokow",
        "statistics-header-edits": "Statistika změnow",
-       "statistics-header-views": "Statistiku zwobrazniś",
        "statistics-header-users": "Statistika wužywarjow",
        "statistics-header-hooks": "Druga statistika",
        "statistics-articles": "Wopśimjeśowe boki",
        "statistics-files": "Nagrate dataje",
        "statistics-edits": "Změny bokow wót załoženja {{SITENAME}}",
        "statistics-edits-average": "Změny na bok w pśerězku",
-       "statistics-views-total": "Zwobraznjenja dogromady",
-       "statistics-views-total-desc": "Woglědanja na njeeksistěrujucych bokach a specialnych bokach njejsu zapśimjone",
-       "statistics-views-peredit": "Zwobraznjenja na změnu",
        "statistics-users": "Zregistrěrowane [[Special:ListUsers|wužywarje]]",
        "statistics-users-active": "Aktiwne wužywarje",
        "statistics-users-active-desc": "Wužywarje, kótarež su {{PLURAL:$1|cora|w slědnyma $1 dnjoma|w slědnych $1 dnjach|w slědnych $1 dnjach}} aktiwne byli",
-       "statistics-mostpopular": "Nejwěcej woglědane boki",
        "pageswithprop": "Boki z kakosću boka",
        "pageswithprop-legend": "Boki z kakosću boka",
        "pageswithprop-text": "Toś ten bok nalicyjo boki, kótarež wužywaju wěstu kakosć boka.",
        "uncategorizedtemplates": "Njekategorizěrowane pśedłogi",
        "unusedcategories": "Njewužywane kategorije",
        "unusedimages": "Njewužywane dataje",
-       "popularpages": "Woblubowane boki",
        "wantedcategories": "Póžedane kategorije",
        "wantedpages": "Póžedane boki",
        "wantedpages-badtitle": "Njepłaśiwy titel we wuslědku: $1",
        "querypage-disabled": "Toś ten specialny bok jo z wugbaśowych pśicynow znjemóžnjony.",
        "booksources": "Pytanje pó ISBN",
        "booksources-search-legend": "Knigłowe žrědła pytaś",
-       "booksources-go": "Pytaś",
        "booksources-text": "To jo lisćina z wótkazami na internetowe boki, kótarež pśedawaju nowe a trjebane knigły. Tam mógu teke dalšne informacije wó knigłach byś. {{SITENAME}} njezwisujo góspodarski z žednym z toś tych póbitowarjow.",
        "booksources-invalid-isbn": "Pódane ISBN-cysło njezda se płaśiwe byś; pséglědaj za zmólkami, z tym až kopěrujoš z originalnego žrědła.",
        "specialloguserlabel": "Wuwjeźaŕ:",
        "wlheader-enotif": "E-mailowa zdźěleńska słužba jo zmóžnjona.",
        "wlheader-showupdated": "Boki, kótarež su wót twójogo slědnego woglěda se změnili, pokazuju se '''tucnje'''.",
        "wlnote": "{{PLURAL:$1|Slědujo slědna změna|slědujotej '''$1''' slědnej změnje|slěduju slědne '''$1''' změny}} {{PLURAL:$2|slědneje góźiny|slědneju '''$2''' góźinowu|slědnych '''$2''' góźinow}}, staw: $3, $4.",
-       "wlshowlast": "Pokaž změny slědnych $1 góźinow, $2 dnjow abo $3 (w slědnych 30 dnjach).",
+       "wlshowlast": "Pokaž změny slědnych $1 góźinow, $2 dnjow abo  (w slědnych 30 dnjach).",
        "watchlist-options": "Opcije wobglědowańki",
        "watching": "Wobglědowaś …",
        "unwatching": "Njewobglědowaś …",
        "import": "Boki importěrowaś",
        "importinterwiki": "Transwiki-importěrowanje",
        "import-interwiki-text": "Wuzwól wiki a bok za importěrowanje.\nDatumy wersijow a wužywarske mjenja pśi tym se njezměniju.\nWšykne transwiki-importowe akcije protokolěruju se w [[Special:Log/import|log-lisćinje importow]].",
-       "import-interwiki-source": "Žrědłowy wiki/bok:",
        "import-interwiki-history": "Importěruj wšykne wersije toś togo boka",
        "import-interwiki-templates": "Wše pśedłogi zapśěgnuś",
        "import-interwiki-submit": "Importěrowaś",
        "pageinfo-robot-policy": "Indicěrowanje pśez roboty",
        "pageinfo-robot-index": "Dowólony",
        "pageinfo-robot-noindex": "Zakazany",
-       "pageinfo-views": "Licba zwobraznjenjow",
        "pageinfo-watchers": "Licba  wobglědowarjow boka",
        "pageinfo-few-watchers": "Mjenjej ako $1 {{PLURAL:$1|wobglědowaŕ|wobglědowarja|wobglědowarje|wobglědowarjow}}",
        "pageinfo-redirects-name": "Licba dalejpósrědnjenjow k toś tomu bokoju",
        "exif-urgency-low": "Niska ($1)",
        "exif-urgency-high": "Wusoka ($1)",
        "exif-urgency-other": "Swójska priorita ($1)",
-       "watchlistall2": "wšykne",
        "namespacesall": "wšykne",
        "monthsall": "wšykne",
        "confirmemail": "E-mailowu adresu wobkšuśiś.",
        "logentry-rights-rights-legacy": "$1 jo kupkowe cłonkojstwo za $3 {{GENDER:$2|změnił|změniła}}",
        "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-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ć:",
index 53f608f..de7ba43 100644 (file)
        "passwordreset-emailsent-capture": "Surat-i pononsorou nakaatod noh, miagal id siriba diti.",
        "passwordreset-emailerror-capture": "Surat-i pononsorou nopudali noh, miagal id siriba diti, nga awu kaatod id momomoguno: $1",
        "changeemail": "Alanai porikatan surat-i",
-       "changeemail-header": "Alanai akaun porikatan surat-i",
        "changeemail-text": "Gonopo poom diti do mongolon porikatan surat-i nuh. Mangai posuango kaatalibnu do papasaah di naalanan.",
        "changeemail-no-info": "Mositi sumuang log ko do mongoguno monilombus id bolikon diti.",
        "changeemail-oldemail": "Porikatan surat-i maso diti:",
        "changeemail-newemail": "Porikatan surat-i it kawawagu:",
        "changeemail-none": "(ingaa)",
        "changeemail-submit": "Alanai surat-i",
-       "changeemail-cancel": "Kinsilo",
        "bold_sample": "Polombono tik",
        "bold_tip": "Polombono tik",
        "italic_sample": "Tik lingging",
        "mergehistory-same-destination": "Wowonod om korikoton do bolikon awu milo do miagal",
        "mergehistory-reason": "Sabab:",
        "mergelog": "Log pinisompuru",
-       "pagemerge-logentry": "pisompuruo [[$1]] sumuang id [[$2]] (sinimakan gisom do $3)",
        "revertmerge": "Kada piisoo",
        "mergelogpagetext": "Id siriba diti nopo nga lis kawawagu do pinisompuruan susuyan tiso-iso bolikon kumaa doid bolikon do suai.",
        "history-title": "Susuyan sinimakan do \"$1\"",
        "search-relatedarticle": "Kompinaian",
        "searchrelated": "kompinaian",
        "searchall": "oinsanan",
-       "showingresultsheader": "{{PLURAL:$5|Kootuson '''$1''' of '''$3'''|Tongkootuson '''$1 - $2''' of '''$3'''}} montok '''$4'''",
        "search-nonefound": "Ingaa kootuson kaagal di kuiri.",
        "powersearch-legend": "Pogigihum poimogot",
        "powersearch-ns": "Pogihum momoguno ngaran:",
        "pager-older-n": "{{PLURAL:$1|nokodori 1|nokodori $1}}",
        "booksources": "Nantadon buuk",
        "booksources-search-legend": "Ihumo tadon buuk",
-       "booksources-go": "Ibok",
        "specialloguserlabel": "Momoguno:",
        "log": "Tongolog",
        "allpages": "Oinsanan bolikon",
        "unwatch": "Awu intangan",
        "unwatchthispage": "Tingkod do mongintong",
        "watchlist-details": "{{PLURAL:$1|$1 bolikon|$1 bobolikon}} id lis piintangannu, bobolikon bolotok awu pinosuang.",
-       "wlshowlast": "Pokitono dohuri $1 jaam $2 tadau $3",
+       "wlshowlast": "Pokitono dohuri $1 jaam $2 tadau",
        "watchlist-options": "Pomilian lis piintangan",
        "watching": "Piintong...",
        "unwatching": "Awu piintong...",
        "metadata-expand": "Pokitono kointalangan pinatapil",
        "metadata-collapse": "Polisoko kointalangan pinatapil",
        "metadata-fields": "Batas pongodata it poinlis id suang pason diti maan poruhango id upa bolikon pongintalangan nung olisok jodual pongodata.\nIri suai sinandad do poinlisok.\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",
-       "watchlistall2": "oinsanan",
        "namespacesall": "oinsanan",
        "monthsall": "oinsanan",
        "watchlisttools-view": "Intaai kinoolonon di kosudong",
        "external_image_whitelist": " #Pologoson baris diti<pre>\n#Suangai do boros koubasanan (guas boros id pialatan //) ponongsiriba\n#Noputan di kaagal pojodion do toput poinsuang (toput koubasanan) do tangagambar\n#Toput di kaagal no silihon do gambar, nung awu nga okito o noputan sinuratan\n#Baris di kisimbol do # nopo nga ointutunan sobaagi do bolotok\n#Tumanud do pisuaian A om a\n\n#Posurato toinsanan id sawat do garis diti. Pologoson iti garis miagal diti</pre>",
        "tag-filter": "[[Special:Tags|Pananda]] gagan:",
        "revdelete-restricted": "pinokogos pogoduhan montok momuruan",
-       "revdelete-unrestricted": "pinoidu pogoduhan montok momuruan"
+       "revdelete-unrestricted": "pinoidu pogoduhan montok momuruan",
+       "revdelete-summary": "idito koinibaan"
 }
index 703f898..6620701 100644 (file)
        "passwordreset-legend": "ސިއްރުބަސް އައު ކުރައްވާ",
        "passwordreset-email": "އީމެއިލް އެޑްރެސް:",
        "changeemail": "އީމެއިލް އެޑްރެސް ބަދަލުކުރައްވާ",
-       "changeemail-header": "އެކައުންޓްގެ އީމެއިލް އެޑްރެސް ބަދަލުކުރައްވާ",
        "changeemail-oldemail": "މިހާރު ބޭނުންކުރާ އީމެއިލް އެޑްރެސް:",
        "changeemail-newemail": "އައު އީމެއިލް އެޑްރެސް:",
        "changeemail-password": "ތިޔަބޭފުޅާގެ {{SITENAME}} ސިއްރުބަސް:",
        "changeemail-submit": "އީމެއިލް ބަދަލުކުރައްވާ",
-       "changeemail-cancel": "މަންސޫޚް",
        "bold_sample": "ބޯ އިބާރާތް",
        "bold_tip": "ބޯ އިބާރާތް",
        "italic_sample": "ކަތި އިބާރާތް",
        "statistics": "ތަފާސްހިސާބުތައް",
        "statistics-header-pages": "ޞަފްޙާގެ ތަފާސްހިސާބު",
        "statistics-header-edits": "އުނިއިތުރުތަކުގެ ތަފާސްހިސާބު",
-       "statistics-header-views": "ތަފާސްހިސާބު ބައްލަވާ",
        "statistics-header-users": "މެންބަރުގެ ތަފާސްހިސާބު",
        "statistics-header-hooks": "އެހެނިހެން ތަފާސްހިސާބު",
        "statistics-articles": "މަޒުމޫނުތައް",
        "statistics-users": "ރަޖިސްޓަރކުރެވިފައިވާ [[Special:ListUsers|މެމްބަރުން]]",
        "statistics-users-active": "ހަރަކާތްތެރި މެމްބަރުން",
        "statistics-users-active-desc": "ފާއިތުވެދިޔަ {{PLURAL:$1|ދުވަސް|$1 ދުވަސްތައް}} ތެރޭގައި ކޮންމެވެސް ކަމެއް ކޮށްފައިވާ މެމްބަރުން",
-       "statistics-mostpopular": "އެންމެ މަޤްބޫލް ޞަފްޙާތައް",
        "brokenredirects": "އޮޅިފައިވާ މިސްރާބުތައް",
        "nbytes": "$1 {{PLURAL:$1|ބައިޓް|ބައިޓްތައް}}",
        "unusedcategories": "ބޭނުންނުކުރެވޭ ގިސްމުތައް",
        "unusedimages": "ބޭނުންނުކުރެވޭ ފައިލުތައް",
-       "popularpages": "މަޤްބޫލު ޞަފްޙާތައް",
        "wantedcategories": "ބޭނުންފުޅުވާ ގިސްމުތައް",
        "wantedpages": "ބޭނުންފުޅުވާ ޞަފްޙާތައް",
        "shortpages": "ކުރު ޞަފްޙާތައް",
        "move": "ނަން/ތަން ބަދަލުކުރައްވާ",
        "movethispage": "މި ޞަފްހާގެ ނަންބަދަލުކުރައްވާ",
        "booksources": "ފޮތްތަކުގެ މަސްދަރުތައް",
-       "booksources-go": "ދުރުވޭ",
        "allpages": "ހުރިހާ ޞަފްޙާތައް",
        "nextpage": "ކުރިއަށް ($1)",
        "prevpage": "ފަހަތަށް ($1)",
        "exif-iimcategory-pol": "ސިޔާސަތު",
        "exif-iimcategory-sci": "ސައިންސާއި ޓެކްނޮލޮޖީ",
        "exif-iimcategory-spo": "ކުޅިވަރު",
-       "watchlistall2": "ހުރިހާ",
        "namespacesall": "ހުރިހާ",
        "confirmemail": "އީމޭލު އެޑްރެސް ޔަގީންކުރައްވާ",
        "confirm_purge_button": "ރަނގަޅު",
index 988dc2c..0c81529 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "CFynn",
                        "Tenzin",
-                       "Ævar Arnfjörð Bjarmason <avarab@gmail.com>"
+                       "Ævar Arnfjörð Bjarmason <avarab@gmail.com>",
+                       "아라"
                ]
        },
        "sunday": "འབྲུག་གཟའ་ཟླཝ་",
        "remembermypassword": "གློག་རིག་དེ་གུར་ ངེ་གི་ནང་བསྐྱོད་སེམས་ཁར་བཞག (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "login": "ནང་བསྐྱོད།",
        "nav-login-createaccount": "ནང་བསྐྱོད་འབད་ / རྩིས་ཐོ་གསརཔ་བཟོ།",
-       "loginprompt": "{{SITENAME}} ནང་ལུ་ ནང་བསྐྱོད་འབད་ནིའི་དོན་ལུ་ ཁྱོད་ཀྱིས་ ཀུ་ཀིསི་འདི་ལྕོགས་ཅན་བཟོ་དགོ།",
        "userlogin": "ནང་བསྐྱོད་འབད་ / རྩིས་ཐོ་གསརཔ་བཟོ།",
        "logout": "ཕྱིར་བསྐྱོད།",
        "userlogout": "ཕྱིར་བསྐྱོད།",
        "recentchanges": "འཕྲལ་གྱི་བསྒྱུར་བཅོས",
        "recentchanges-feed-description": "འབྱུང་སའི་ནང་ ཝི་ཀི་ལུ་འཕྲལ་གྱི་བསྒྱུར་བཅོས་འབད་མི་འདི་ རྗེས་འཚོལ་འབད།",
        "rcnotefrom": "འོག་གི་ཚུ་ '''$2''' (up to '''$1''' shown) ལས་ཚུར་གྱི་བསྒྱུར་བཅོས་ཨིན།",
-       "rclistfrom": "$1 ལས་ འགོ་བཟུང་སྟེ་ བསྒྱུར་བཅོས་གསརཔ་ཚུ་སྟོན་",
+       "rclistfrom": "$3 $2 ལས་ འགོ་བཟུང་སྟེ་ བསྒྱུར་བཅོས་གསརཔ་ཚུ་སྟོན་",
        "rcshowhideminor": "$1 གལ་གནད་ཆུང་བའི་ཞུན་དག།",
        "rcshowhidebots": "$1 བོཊིསི།",
        "rcshowhideliu": "$1 ནང་བསྐྱོད་འབད་ཡོད་པའི་ལག་ལེན་པ་ཚུ་",
        "upload": "ཡིག་སྣོད་སྐྱེལ་བཙུགས་འབད།",
        "uploadbtn": "ཡིག་སྣོད་སྐྱེལ་བཙུགས་འབད།",
        "uploadlogpage": "ལོག་སྐྱེལ་བཙུགས་འབད།",
-       "uploadedimage": "\"[[$1]]\" སྐྱེལ་བཙུགས་འབད་ཡོདཔ།",
        "listfiles": "ཡིག་སྣོད་ཐོ་ཡིག།",
        "file-anchor-link": "ཡིག་སྣོད།",
        "filehist": "ཡིག་སྣོད་སྤྱོད་ཤུལ།",
        "log": "ལོགསི།",
        "all-logs-page": "ལོག་སི་ཆ་མཉམ།",
        "allpages": "ཤོག་ལེབ་ག་ར།",
-       "alphaindexline": "$1 ལས་ $2",
        "nextpage": "ཤུལ་མའི་ཤོག་ལེབ་ ($1)",
        "prevpage": "ཧེ་མའི་ཤོག་ལེབ་ ($1)",
        "allpagesfrom": "ཤོག་ལེབ་བཀྲམ་སྟོན་འགོ་བཙུགས་:",
        "watchthispage": "ཤོག་ལེབ་འདི་ལྟ།",
        "unwatch": "བལྟ་བཤོལ།",
        "watchlist-details": "{{PLURAL:$1|$1 ཤོག་ལེབ་|$1 ཤོག་ལེབ་ཚུ་}} ཁག་ཆེ་བའི་བློ་ཤོག་ བལྟ་ཞིབ་མ་འབད་བས།",
-       "wlshowlast": "མཇུག་གི་ ཆུ་ཚོད་ $1 ཉིནམ་ $2  $3 སྟོན་",
+       "wlshowlast": "མཇུག་གི་ ཆུ་ཚོད་ $1 ཉིནམ་ $2   སྟོན་",
        "watching": "བལྟ་ཞིབ་འབད་དོ་་་",
        "unwatching": "བལྟ་ཞིབ་འབད་བཤོལ་དོ་་་",
        "deletepage": "ཤོག་ལེབ་བཏོན་གཏང་།",
        "metadata-expand": "རྒྱ་བསྐྱེད་ཅན་གྱི་རྒྱས་བཤད་སྟོན།",
        "metadata-collapse": "རྒྱ་བསྐྱེད་ཅན་གྱི་རྒྱས་བཤད་ཚུ་སྦ།",
        "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",
-       "watchlistall2": "ཆ་མཉམ།",
        "namespacesall": "ཆ་མཉམ།",
        "monthsall": "ཆ་མཉམ།",
        "watchlisttools-view": "འབྲེལ་བ་ཡོད་པའི་བསྒྱུར་བཅོས་ཚུ་སྟོན།",
index f0f9b71..6a9db68 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Cbrown1023",
-                       "Natsubee"
+                       "Natsubee",
+                       "아라"
                ]
        },
        "tog-hideminor": "Ɣla tɔtrɔ suewo le tɔtrɔ yeyeawo me",
        "qbedit": "Trɔ asi le eŋu",
        "qbpageoptions": "Axa sia",
        "qbmyoptions": "Nyeƒe axawo",
-       "vector-action-delete": "Tutui",
-       "vector-action-move": "Ɖɔli eƒe nɔƒe",
-       "vector-view-create": "Dze egɔme",
-       "vector-view-edit": "Trɔ asi le eŋu",
-       "vector-view-history": "Kpɔ xoxoawo",
-       "vector-view-view": "Xlẽ",
-       "vector-view-viewsource": "Kpɔ alesi woŋlɔe",
        "errorpagetitle": "Vodada",
        "returnto": "Gbugbɔ yi $1.",
        "tagline": "Tso {{SITENAME}}",
        "talkpagelinktext": "Nyamedzroƒe",
        "specialpage": "Axa Tɔxe",
        "personaltools": "Wòƒe dɔwɔnuwo",
-       "postcomment": "Akpa yeye",
        "talk": "Nyamedzroƒe",
        "toolbox": "Dɔwɔnuɖaka",
        "otherlanguages": "Le gbe bubuwo me",
        "searchmenu-new": "'''Dze axa \"[[:$1]]\" sia ŋlɔm ɖe wiki la dzi!'''",
        "searchprofile-everything": "Nuɖesiaɖe",
        "searchprofile-articles-tooltip": "Dii le $1",
-       "searchprofile-project-tooltip": "Dii le $1",
        "search-result-size": "$1 ({{PLURAL:$2|nya 1|nya $2}})",
        "search-suggest": "Ɖe wò be: $1",
        "search-interwiki-more": "(kɔ kpe ɖe eŋu)",
        "recentchanges": "Tɔtrɔ yeyewo",
        "recentchanges-legend": "Tatiawo na tɔtrɔ yeyewo",
        "rcnotefrom": "Tɔtrɔwo siwo wowɔ tso '''$2''' (wofia vaseɖe '''$1''') le afii.",
-       "rclistfrom": "Fia tɔtrɔ yeyewo tso $1",
+       "rclistfrom": "Fia tɔtrɔ yeyewo tso $3 $2",
        "rcshowhideminor": "$1 tɔtrɔ suewo",
        "rcshowhidebots": "$1 bɔtwo",
        "rcshowhideliu": "$1 ezãla siwo ŋlɔ ŋkɔ",
        "pager-older-n": "{{PLURAL:$1|1 xoxoa|$1 xoxoawo}}",
        "booksources": "Agbalɛ̃wo ƒe tsoƒe",
        "booksources-search-legend": "Di agbalẽwo ƒe tsoƒewo",
-       "booksources-go": "Yi",
        "specialloguserlabel": "Ezãla:",
        "speciallogtitlelabel": "Ta nya:",
        "allpages": "Axawo katã",
-       "alphaindexline": "$1 vaseɖe $2",
        "nextpage": "Axa yometɔ ($1)",
        "prevpage": "Axa do ŋgɔ ($1)",
        "allpagesfrom": "Fia axawo tso:",
        "listgrouprights-group": "Hame",
        "watch": "Le ŋku ɖe eŋu",
        "watchthispage": "Le ŋku ɖe axa sia ŋu",
-       "wlshowlast": "Fia gaƒoƒo $1 ŋkeke $2 mamleawo. $3",
+       "wlnote": "Afisia wofia {{PLURAL:$1|tɔtrɔ '''1''' mamlea|tɔtrɔ '''$1''' mamleawo}} le {{PLURAL:$2|gaƒoƒo mamlea si|gaƒoƒo '''$2''' mamleawo siwo}} vayi la me.",
+       "wlshowlast": "Fia gaƒoƒo $1 ŋkeke $2 mamleawo.",
        "deletepage": "Tutu axa sia",
        "delete-confirm": "Tutu \"$1\"",
        "delete-legend": "Tutui",
        "nextdiff": "Tɔtrɔ yeyea →",
        "newimages": "Nutata yeyewo",
        "ilsubmit": "Dii",
-       "watchlistall2": "katã",
        "namespacesall": "wokatã",
        "monthsall": "wokatã",
        "imgmultipagenext": "axa yometɔ",
index 8945156..057709c 100644 (file)
@@ -23,7 +23,7 @@
        "tog-watchmoves": "Zûnta al pàgini e i file spustê int i tgnû 'd ôc specêl.",
        "tog-watchdeletion": "Zûnta al pàgini e i file scanşlê int i tgnû 'd ôc specêl.",
        "tog-watchrollback": "Zûta al pàgini in dóv' ó fât al ritōren a la pàgina 'd préma a i tgnû 'd ôc specêl",
-       "tog-minordefault": "Sògna ògni mudéfica cme céca (sōl cme pre-stabilî)",
+       "tog-minordefault": "Sègna ògni mudéfica cme céca (sōl cme pre-stabilî)",
        "tog-previewontop": "Fà vèder còl ch' ò fât sōver la caşèla ed mudéfica e mìa sòta.",
        "tog-previewonfirst": "Fà vèder còl ch' ò fât almēno 'na vôlta préma 'd salvêr",
        "tog-enotifwatchlistpages": "Mândon un avîş cun la pôsta eletrônica quând a vîn cambiê 'na pàgina o un file preşèint int i tgnû 'd ôc specêl",
        "tog-watchlisthideanons": "Lōga al mudéfichi 'd j utèint sèinsa nòm int i tgnû 'd ôc specêl",
        "tog-watchlisthidepatrolled": "Lōga al mudéfichi verifichêdi int i tgnû 'd ôc specêl",
        "tog-ccmeonemails": "Mândom 'na côpia di mesâg spidî a chiêter utèint",
-       "tog-diffonly": "An fê mia vèder còl che gh'é dèinter int la pàgina dôp al cunfrûnt tr'al versiòun",
+       "tog-diffonly": "An fêr mia vèder còl che gh'é dèinter int la pàgina dôp al cunfrûnt tr'al versiòun",
        "tog-showhiddencats": "Fà vèder al categoréi lughêdi",
-       "tog-norollbackdiff": "An fê mia vèder al cunfrûnt tr' al versiòun dôp avèir fât un \"rollback\"",
+       "tog-norollbackdiff": "An fêr mia vèder al cunfrûnt tr' al versiòun dôp avèir fât un \"rollback\"",
        "tog-useeditwarning": "Avîşom quând a vâgh fōra da 'na pàgina d' mudéfica e an n'ò mìa salvê al mudéfichi fâti",
-       "tog-prefershttps": "Drōva sèimper un colegamèint sicûr quând ét fê l'ingès",
+       "tog-prefershttps": "Drōva sèimper un colegamèint sicûr quând ét fê l'ingrès",
        "underline-always": "Sèimper",
        "underline-never": "Mài",
        "underline-default": "Mantî al j impustasiòun dal navigadōr o 'd la skin",
        "toolbox": "Strumèint",
        "userpage": "Guêrda la pàgina utèint",
        "projectpage": "Guêrda la pàgina dal prugèt",
-       "imagepage": "Guêrda la pàgina dal 'file'",
+       "imagepage": "Guêrda la pàgina dal file",
        "mediawikipage": "Guêrda al mesâg",
-       "templatepage": "Guêrda al 'template'",
+       "templatepage": "Guêrda 'l mudèl",
        "viewhelppage": "Guêrda la pàgina 'd ajót",
        "categorypage": "Guêrda la categuréia",
        "viewtalkpage": "Guêrda la discusiòun",
        "otherlanguages": "In êtri léngvi",
        "redirectedfrom": "(Tót còst al deşvîn da <b>$1</b>)",
        "redirectpagesub": "Pàgina 'd partèinsa",
+       "redirectto": "Rimânda a:",
        "lastmodifiedat": "Ûltmi mudéfichi 'dla pàgina: $2, $1.",
        "viewcount": "Cla pàgina ché l'é stêda lişûda {{PLURAL:$1|'na vôlta|$1 vôlti}}.",
        "protectedpage": "Pàgina sòta prutesiòun",
        "viewsourcelink": "guêrda la surzéia",
        "editsectionhint": "Mudéfica la sesiòn: $1",
        "toc": "Argumèint",
-       "showtoc": "Fà vèder",
+       "showtoc": "fà vèder",
        "hidetoc": "Lōga",
        "collapsible-collapse": "Stréca",
        "collapsible-expand": "Şlêrga",
        "nstab-media": "File multimediêl",
        "nstab-special": "Pàgina specêla",
        "nstab-project": "Pàgina 'd servési",
-       "nstab-image": "'File'",
+       "nstab-image": "File",
        "nstab-mediawiki": "Mesâg",
        "nstab-template": "Mudèl",
        "nstab-help": "Pàgina 'd ajót",
        "no-null-revision": "An pōl èser fât 'na versiòun mìa vâlida per la pàgina \"$1\"",
        "badtitle": "Tétol mìa curèt.",
        "badtitletext": "Al tétol ed la pàgina serchêda l'é vōd, şbaliê opór al deşvîn da 'n erōr int i colegamèint di côdis o int i colegamèint druvê in wiki. In pió al pré avèir ûn o pió carâter ch'an pōlen mìa èser druvê int i tétol.",
-       "perfcached": "Al j infurmasiòun ché sòta vînen registrêdi int la \"cache\" dal databêş e an pōlen mìa èser arnuvê. Int la \"cache\" a gh'é  un mâsim ed {{PLURAL:$1|un rişultêt |$1 rişultêt}} ch' es pōl/en druvêr.",
-       "perfcachedts": "Al j infurmasiòun ché sòta vînen registrêdi int la \"cache\" dal databêş e l'ûltma vôlta l' è stê arnuvê al  $ 1. Int la \"cache\" a gh'é  un mâsim ed {{PLURAL:$4|un rişultêt |$4 rişultêt}} ch' es pōl/en druvêr.",
+       "perfcached": "Al j infurmasiòun ché sòta vînen registrêdi int la \"cache\" dal databêş e an pōlen mìa èser arnuvê. Int la \"cache\" a gh'é  un mâsim ed {{PLURAL:$1|un rişultêt |$1 rişultêt}} ch' es pōlen druvêr.",
+       "perfcachedts": "Al j infurmasiòun ché sòta vînen registrêdi int la cache dal databêş e l'ûltma vôlta l' è stê arnuvê al  $1. Int la cache a gh'é  un mâsim ed {{PLURAL:$4|un rişultêt |$4 rişultêt}} ch' es pōlen druvêr.",
        "querypage-no-updates": "J arnuvamèint ed la pàgina în p'r al mumèint fērom. Al j infurmasiòun dèinter a la pàgina a gnirân mia arnuvêdi.",
        "viewsource": "Guêrda la surzéia",
        "viewsource-title": "Guêrda la surzéia 'd $1",
        "viewsourcetext": "L'é pusébil vèder e cupiêr al côdis surzéia ed cla pàgina ché.",
        "viewyourtext": "L'é pusébil vèder e cupiêr al côdis surzéia dal \"tō mudéfichi\" ed cla pàgina ché:",
        "protectedinterface": "Cla pàgina ché la gh'à 'n elemèint ch' al fa pêrt dal colegamèint tra utèint e al progrâma 'd cól sît ché e l'é prutèta per schivşêr pusébil abûş. Per zuntêr o mudufichêr tradusiòun per tót i sistēma wiki druvêr [//translatewiki.net/ translatewiki.net], al prugèt 'd adatamèint a ògni léngva 'd MediaWiki.",
-       "editinginterface": "'''Atèinti:''' Al tèst ed cla pàgina ché 'l fa pêrt dal colegamèint tra utèint e 'l progrâma dal sît.  Tót' al modéfichi fâti a cla pàgina ché a gnîran spustêdi insém a i mesâg vést da tót j utèint ed cól wiki ché. Per zuntêr o mudufichêr tradusiòun vâlidi per tót i wiki, cunsîdra la pusibilitê 'd druvêr [/ / translatewiki.net / translatewiki.net], al prugèt 'd adatamèint a ògni léngva 'd MediaWiki.",
+       "editinginterface": "<strong>Atèinti:</strong> Al tèst ed cla pàgina ché 'l fa pêrt dal colegamèint tra utèint e 'l prugrâma dal sît.  Tót' al modéfichi fâti a cla pàgina ché a se spècen in sém a i mesâg vést per tót j utèint ed cól wiki ché.",
+       "translateinterface": "Per zuntêr o mudifichêr al tradusiòun vâlidi in sém a tót i wiki, drōva [//translatewiki.net/ translatewiki.net], al prugèt Media Wiki p'r al léngui di divêrs pôst.",
        "cascadeprotected": "Insém a cla pàgina ché an n'é mìa pusébil fêr dal mudéfichi perchè l'é dèinter {{PLURAL:$1|int la pàgina sgnêda ché  'd sègvit, ch' l'é stêda prutèta|int al pàgini sgnêdi ché  'd sègvit, ch' în stêdi prutèti}} cun la prutesiòun ch' la 's arfà in cuntinvasiòun:\n$2",
        "namespaceprotected": "An 's gh'à mìa i permès necesâri per mudifichêr al pàgini dal spâsi di nòm <strong>$1</strong>.",
        "customcssprotected": "An 's gh'à mìa i permès necesâri per mudifichêr cla pàgina CSS ché, perchè la gh'à dèinter al j impustasiòun personêli 'd n' êter utèint.",
        "createaccount-text": "Quelchidûn l'à fât un inscrisiòun a  {{SITENAME}} ($4) a nòm ed $2 coleghê a cl'indirés ed pôsta eletrônica ché. La cêva 'd ingrès per l'utèint \"$2\" l'é  impustêda a \"$3\". \nÉ necesâri fêr un ingrès préma ch' es pôl e cambiêr subét la cêva 'd ingrès. \nSe l'inscrisiòun l'é stêda fâta per şbâli, es pōl scanşlêr sté mesâg.",
        "login-throttled": "În stê fât trôp tentatîv 'd ingrès in pôch tèimp. Spèta $1 e pó tōrna pruvêr.",
        "login-abort-generic": "An t'é mìa stê arcgnusû - Scanşlê",
+       "login-migrated-generic": "La tó utèinsa l'é stêda spustêda, e al tó nòm utèint al gh'é mìa pió in sém a cla wiki ché.",
        "loginlanguagelabel": "Léngva: $1",
        "suspicious-userlogout": "La tó dmânda per destachêret l'é stēda rifiutêda perchè la sèmbra spidîda da un navigadōr ch' al funsiòuna mìa o da un proxy di caching.",
        "createacct-another-realname-tip": "Druvêr al nòm vèira l'é 'na siēlta personêla; s' es pèinsa 'd druvêrel al gnirâ uşê per dêr la paternitê di lavōr spidî.",
        "passwordreset-emailsent-capture": "É stê spidî un mesâg ed pôsta eletrônica per turnêr a impustêr la cêva 'd ingrès, ché sòta a gh'é al tèst che gh'é scrét.",
        "passwordreset-emailerror-capture": "É stê fât un mesâg ed pôsta eletrônica per turnêr a impustêr la cêva 'd ingrès, scréta ché 'd sègvit. La spedisiòun {{GENDER:$2|a l'utèint}} an n'é mia 'riusîda:$1",
        "changeemail": "Câmbia l'indirés ed la pôsta eletrônica",
-       "changeemail-header": "Câmbia l'indirés ed la pôsta eletrônica 'd la tó inscrisiòun.",
        "changeemail-text": "Impés sté mòdul per cambiêr al tó indirés ed pòsta eletrônica. A srà necesâri mèter dèinter la cêva 'd ingrès per cunfermêr la mudéfica.",
        "changeemail-no-info": "Per andêr dèinter diretamèint a cla pàgina ché 't gh'ê da fêr l'ingrès.",
        "changeemail-oldemail": "L'indirés ed la pôsta eletrànica 'd adès.",
        "changeemail-none": "(nisûn)",
        "changeemail-password": "La cêva 'd ingrès só {{SITENAME}}:",
        "changeemail-submit": "Cambiêr l'indirés ed pôsta eletrônica",
-       "changeemail-cancel": "Scanşèla",
        "changeemail-throttled": "În stê fât trôp tentatîv 'd ingrès in pôch tèimp. Spèta $1 e pó tōrna pruvêr dôp.",
        "resettokens": "Tōrna 'd impustêr la cêva",
        "resettokens-text": "Ché 't pō turnêr a impustêr al cêvi ch'ét permèten l'ingrès a precîşi infurmasiòun privêdi lighêdi a la tó utèinsa. Ét duvrés fêrel se per chêş ét j ê spartîdi cun quelchidûn o se al j infurmasiòun ed la tó utèinsa în  in perécol.",
        "nowiki_sample": "Mèt dèinter ché al tèst mìa furmatê",
        "nowiki_tip": "An badêr mìa la furmatasiòun wiki",
        "image_tip": "Mèt dèinter al file",
-       "media_tip": "Colegamèint al 'file'",
+       "media_tip": "Colegamèint al file",
        "sig_tip": "Fîrma cun la dâta e l'ōra",
        "hr_tip": "Rîga spiâna (drōva cun giudési)",
-       "summary": "Sûnt:",
+       "summary": "Ogèt:",
        "subject": "Argumèint (tétol):",
        "minoredit": "Còsta l'é 'na mudéfica céca",
        "watchthis": "Tîn adrē a cla pàgina ché",
        "showpreview": "Guêrda préma 'd salvêr",
        "showdiff": "Guêrda i cambiamèint",
        "blankarticle": "<strong>Atèinti:</strong>la pàgina che t'é drē fêr la gh'à gnînto dèinter. S' ét tōren a schisêr in sém a \"{{int:savearticle}}\", la pàgina la srà fât sèinsa gnînto dèinter.",
-       "anoneditwarning": "'''Atensiòun:''' Ingrès mìa fât. Al tó indirés IP al srà sgnê int la stòria ed cla pàgina chè.",
+       "anoneditwarning": "<strong>Atèinti:</strong> An n'é mìa stê fât l'ingrès. S' ét farê dal mudéfichi al tó indirés IP al srà vést da tót. Se <strong>[$1 và dèinter]</strong> o <strong>[$2 fà 'n' utèinsa]</strong>, al tô mudéfichi a srân sgnêdi al tó nòm utèint, insèm a êter benefési.",
        "anonpreviewwarning": "\"An n'é mìa stê fât l'ingrès. Mèinter es sêlva la pàgina, l'indirés IP al srà sgnê int la stòria 'd la pàgina.\"",
        "missingsummary": "'''Atensiòun:''' an n'é mìa stê precişê al mutîv de sté mudéfica. S'es tōrna a clichêr insém a \"{{int:savearticle}}\" la mudéfica la gnirà salvêda cun al mutîv vōd.",
        "missingcommenttext": "Scréver un cumèint ché sòta.",
        "content-model-text": "tèst normêl",
        "content-model-javascript": "linguâg JavaScript",
        "content-model-css": "fòj de stîl CSS",
+       "duplicate-args-category": "Pàgini che drōven argumèint dópiê in ciamêdi a i mudē",
+       "duplicate-args-category-desc": "La pàgina la gh'à dèinter ciamêdi a mudē che drōven argumèint dupiê,cme per eşèimpi <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Atensiòun:''' cla pàgina ché la gh'à trôpi ciamêdi ala funsiòun parse. A n' in duvré avèir mēno 'd $2, adèsa a {{PLURAL:$1|'gh n'é $1}}.",
        "expensive-parserfunction-category": "Pàgini cun trôpi ciamêdi a la funsiòun parser.",
        "post-expand-template-inclusion-warning": "'''Atensiòun:''' la grandèsa di mudē més dèinter l'é trôp grôsa. Soquânt mudē gnirâ mìa més dèinter.",
        "mergehistory-same-destination": "Al pàgini 'd urégin e 'd arîv an pōlen mìa cumbinêr",
        "mergehistory-reason": "Mutîv:",
        "mergelog": "Uniòun",
-       "pagemerge-logentry": "l'à unî [[$1]] a [[$2]] (versiòun fîn a $3)",
        "revertmerge": "Scanşèla l'uniòun",
        "mergelogpagetext": "Ed sègvit în elenchêdi la j ûltmi operasiòun 'd uniòun ed la stòria ed dō pàgini.",
        "history-title": "$1 stòria dal mudéfichi",
        "searchprofile-everything": "Tót",
        "searchprofile-advanced": "Specêla",
        "searchprofile-articles-tooltip": "Sèirca in $1",
-       "searchprofile-images-tooltip": "Sèirca 'file'",
+       "searchprofile-images-tooltip": "Sèirca file",
        "searchprofile-everything-tooltip": "Sērca dapertót (ânch int al pàgini 'd discusuòun).",
        "searchprofile-advanced-tooltip": "Sērca int i spâsi di nòm fât só mzûra.",
        "search-result-size": "$1 ({{PLURAL:$2|'na parôla|$2 parôli}})",
        "search-result-category-size": "{{PLURAL:$1|1 utèint|$1 utèint}} ({{PLURAL:$2|1 sotcategoréia|$2 sotcategoréi}},{{PLURAL:$3|1 file|$3 files}})",
        "search-redirect": "(redirect $1)",
        "search-section": "(sesiòun $1)",
+       "search-category": "(categoréia $1)",
        "search-file-match": "(relasiòun dèinter al file)",
        "search-suggest": "Fōrsi 't serchêv $1",
        "search-interwiki-caption": "Prugèt fradē",
        "searchrelated": "coleghê",
        "searchall": "tót",
        "showingresults": "Ed sègvit {{PLURAL:$1|a vîn preşentê al mâsim <strong>1</strong> rişultêt| a vînen preşentê al mâsim <strong>$1</strong> rişultêt}} a partîr dal nómer #<strong>$2</strong>.",
-       "showingresultsinrange": "{{PLURAL:$1|A vîn mustrê| a vînen mustrê}} sòta {{PLURAL:$1|<strong>1</strong> rişultêt|<strong>$1</strong> rişultêt}} dal #<strong>$2</strong> al #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Al risultêt '''$1''' ed '''$3'''|I risultêt '''$1 - $2''' ed '''$3'''}} per '''$4'''",
+       "showingresultsinrange": "{{PLURAL:$1|Sòt a vîn mustrê| Sòt a vînen mustrê}}  {{PLURAL:$1|<strong>1</strong> rişultêt|<strong>$1</strong> rişultêt}} dal <strong>$2</strong> al <strong>$3</strong>.",
+       "search-showingresults": "{{PLURAL:$4|Rişultêt <strong>$1</strong> ed <strong>$3</strong>|Rişultêt <strong>$1 - $2</strong> ed <strong>$3</strong>}}",
        "search-nonefound": "La sērca an n'à mìa dê di rişultê.",
        "powersearch-legend": "Sèirca specêla",
        "powersearch-ns": "Sērca int al spâsi di nòm:",
        "search-external": "Sèirca fâta fōra",
        "searchdisabled": "La sèirca intêrna ed {{SITENAME}} l'a funsiòuna mìa; int al mèinter a s' pōl pruvêr a druvêr un mutōr ed sèirca d'ed fōra cme Google. (A gh' è da nutêr però che còl che gh'é dèinter in {{SITENAME}} che es câten in chi mutōr a prém èser mìa arnuvê.)",
        "search-error": "É sucès un erōr mèinter a's fêva la sèirca:$1",
-       "preferences": "Preferèinsa",
+       "preferences": "Preferèinsi",
        "mypreferences": "Preferèinsi",
        "prefs-edits": "Mudéfichi fâti:",
        "prefsnologintext2": "Es prèiga ed l'ingres per impustêr al tō  preferèinsi 'd utèint.",
        "gender-female": "L'é registrêda in sém a {{SITENAME}}",
        "prefs-help-gender": "L'impustasiòun ed cla preferèinsa ché l'é a siēlta. Al progrâma al drōva cól valōr ché per parlêr cun tè e numinêret cun chiêter cun al druvêr al gèner ed gramâtica gióst. Cl'infurmasiòun ché la srà póblica.",
        "email": "E-mail",
-       "prefs-help-realname": "Druvêr al nòm vèira l'é 'na siēlta personêla; s' es pèinsa 'd druvêrel al gnirâ uşê per dêr la paternitê di lavōr spidî.",
+       "prefs-help-realname": "Al nòm vèira l'é da druvêr a piaşèir. Se druvê, al pōl èser uşê per dêr la paternitê al lavōr fât.",
        "prefs-help-email": "Mèter l'indéris ed la tó pôsta eletrônica an n'é mia necesâri, mó al permèt ed ricêver la cêva 'd ingrès se per chêş ét la scurdés.",
        "prefs-help-email-others": "Ét pō ânca sernîr ed lasêr che chiêter a 's mèten in cuntât  tēgh cun la pôsta eletrônica cun al colegamèint da la tó pàgina utèint o da còla 'd discusiòun.  Al tó indirés al vîn mìa fât savèir a quî ch'ét 's mèten in cuntât tēgh.",
        "prefs-help-email-required": "L'indirés ed pôsta eletrônica l'é ubligatôri.",
        "prefs-info": "Infurmasiòun necesâri",
+       "prefs-i18n": "Internalişasiòun",
        "prefs-signature": "Fîrma",
        "prefs-dateformat": "Fōrma 'd la dâta",
        "prefs-timeoffset": "Ōri 'd diferèinsa",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Diferèinsi",
        "prefs-help-prefershttps": "Cla diferèinsa ché la gh'à efèt dal st'êter ingrès.",
+       "prefswarning-warning": "T'é fât dal mudéfichi al tō preferèinsi ch'în mìa stêdi salvêdi. S'ét vê fōra da cla pàgina ché sèinsa clichêr \"$1\" al preferèinsi a gnîran mìa arnuvêdi.",
+       "prefs-tabs-navigation-hint": "Sugerimèint: è pusébil druvêr i tâst frècia a mansèina e a dréta per spustêres tr'al schēdi int l'elèinch dal schēdi.",
+       "email-address-validity-valid": "L'indirès ed pôste eletrônica a sèmbra vâlid",
+       "email-address-validity-invalid": "Mèt un indirés ed pôsta eletrônica vâlid",
+       "userrights": "Gestiòun di permès relatîv a j utèint",
+       "userrights-lookup-user": "Gestiòun di gróp utèint",
+       "userrights-user-editname": "Mèt dèinter al nòm utèint:",
+       "editusergroup": "Mudéfica gróp utèint",
+       "editinguser": "Mudéfica i dirét utèint ed l' utèint <strong>[[User:$1|$1]]</strong> $2",
+       "userrights-editusergroup": "Mudéfica gróp utèint",
+       "saveusergroups": "Sêlva gróp utèint",
+       "userrights-groupsmember": "Al fà pêrt {{PLURAL:$1|al gróp|ai gróp}}:",
+       "userrights-groupsmember-auto": "Al fà pêrt ed sicûr a:",
+       "userrights-groups-help": "L'é pusébil mudifichêr i gróp in dó fà pêrt l'utèint. \n*'Na caşèla sernîda la sègna a che gróp al fà pêrt l'utèint. \n*'Na caşèla mìa serrnîda la sègna che l'utèin al fà mìa pêrt al gróp. \n*Al sègn * al sègna ch' an n'é m'a pusébil scanşlêr che l'utèin al fà pêrt al gróp dōp avèirel sgnê (o invicivêrsa).",
+       "userrights-reason": "Mutîv:",
+       "userrights-no-interwiki": "An es gh'à mìa i permès necesâri per cambiêr i dirét ed j utèint in sém a êter sît.",
+       "userrights-nodatabase": "Al databēş $1 al gh'é mìa o an n' mìa un databêş lochêl.",
+       "userrights-nologin": "Per dêr i dirét a j utèint l'é necesâri [[Special:UserLogin|fêr l'ingrès]] cme aministardōr.",
+       "userrights-notallowed": "An 't gh'ê mìa al permès per zuntêr o tōr via i permès utèint.",
+       "userrights-changeable-col": "Gróp ch'es pōlen mudifichêr.",
+       "userrights-unchangeable-col": "Gróp ch'an 's pōlen mìa mudifichêr.",
+       "userrights-conflict": "Cuntrâst ed mudéfica di dirét utèint! Cuntròla e cunfērma al tó mudéfichi.",
+       "userrights-removed-self": "T'é tôt via cun sucès i tō dirét. E dòunca, an 't prê pió andêr dèinter a cla pàgina ché.",
        "group": "Gróp:",
        "group-user": "Utèint",
        "group-autoconfirmed": "Utèint cunvalidê da per ló",
        "grouppage-suppress": "{{ns:project}}:Oversight",
        "right-read": "Al lēş al pàgini",
        "right-edit": "Mudéfica pàgini",
+       "right-createpage": "Ét pō fêr al pàgini (fōra che 'l pàgini 'd discusiòun).",
+       "right-createtalk": "Fà 'l pàgini 'd discusiòun.",
+       "right-createaccount": "Fà dal j utèinsi nōvi.",
+       "right-minoredit": "Sègna 'l mudéfichi cme céchi.",
+       "right-move": "Spôsta 'l pàgini",
+       "right-move-subpages": "Spôsta 'l pàgini insèm al relatîvi sòt pàgini",
+       "right-move-rootuserpages": "Spôsta 'l pàgini principêli 'd j utèint",
+       "right-move-categorypages": "Spôsta 'l categoréi",
+       "right-movefile": "Spôsta i file",
+       "right-suppressredirect": "An fà mìa un indirés nōv in atvomâtich quând a se spôsta 'na pàgina",
+       "right-upload": "Cârga un file",
+       "right-reupload": "Al scré in sém a 'n file ch' al gh'é bèle",
+       "right-reupload-own": "Al scré in sém a 'n file ch' al gh'é bèle carghê da l'istès utèint",
+       "right-reupload-shared": "Al souvrascrév int al pôst file ch' în int l'archévi spartî",
+       "right-upload_by_url": "Cârga un file da un indirés URL",
+       "right-purge": "Al pulés la memôria pruvişôria dal sît sèinsa cunfērma.",
+       "right-autoconfirmed": "An n'é mìa ublighê al lémit 'd asiòun per IP",
+       "right-bot": "Da tratêr cme şvilóp avtomâtich",
+       "right-nominornewtalk": "Al fa in môd che al mudéfichi céchi al pàgini 'd discussiòun an fâghen mìa vèder l'avîş 'd un mesâg nōv",
+       "right-apihighlimits": "Drōva di lémit pió êlt p'r al j interugasiòun API",
+       "right-writeapi": "Drōva l' API in scritûra",
+       "right-delete": "Scanşèla pàgini",
+       "right-bigdelete": "Scanşèla pàgini cun la stòria 'd la pàgina lònghi",
+       "right-deletelogentry": "Al scanşèla e al tōrna mèter vōş ed regéster bèin precîşi",
+       "right-deleterevision": "Al lōga versiòun precîşi dal pàgini",
+       "right-deletedhistory": "Al fà vèder al versiòun ed la stòria scanşlêdi sèinsa al tèst che gh'é unî",
+       "right-deletedtext": "Al fà veder al tèst scanşlê e al mudéfichi tr'al versiòun scanşlêdi",
+       "right-browsearchive": "Al sêrca int al pàgini scanşlêdi",
+       "right-undelete": "Recópra 'na pàgina",
+       "right-suppressrevision": "Al vèd, al lōga e al tōra mèter versiòun precîşi dal pàgini a utèint bast' ech sìa",
+       "right-viewsuppressed": "Al vèd versiòun lughêdi a utèint bast' ech sìa",
+       "right-suppressionlog": "Al fà vèder i regéster privê",
+       "right-block": "Blôca al mudéfichi da pêrta 'd êter utèint",
+       "right-blockemail": "L'impidés a 'n utèint de spidîr la pôsta eletrônica",
+       "right-hideuser": "Blôca un nòm utèint, e 'l lōga al póblich",
+       "right-ipblock-exempt": "Al vèd mìa i blôch 'd IP, i blôch avtomâtich e i blôch ed range IP",
+       "right-proxyunbannable": "An vèder mìa i blôch avtomâtich di proxi",
+       "right-unblockself": "A şblôca ló 'stès",
+       "right-protect": "Câmbia i livē 'd prutesiòun e mudéfica 'l pàgini prutèti in ripetisiòun",
+       "right-editprotected": "Mudéfica 'l pàgini prutèti cun \"{{int:protect-level-sysop}}\"",
+       "right-editsemiprotected": "Mudéfica 'l pàgini prutèti cun \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editinterface": "Mudéfica al colegamèint tra sistēma e utèint",
        "newuserlogpage": "Utèint nōv",
        "action-read": "lēzer cla pàgina ché",
        "action-edit": "Mudifichêr cla pàgina ché",
        "action-createpage": "inventêr pàgini",
        "action-move": "spustêr cla pàgina ché",
-       "action-movefile": "spustêr cól 'file' ché",
-       "action-upload": "carghêr cól 'file' ché",
+       "action-movefile": "spustêr cól file ché",
+       "action-upload": "carghêr cól file ché",
        "action-delete": "scanşlêr cla pàgina ché",
        "nchanges": "$1\n{{PLURAL:$1|mudéfica|mudéfichi}}",
        "recentchanges": "Ûltmi mudéfichi",
        "recentchangeslinked-summary": "Cla pàgina specêla ché la fà vèder al j ûltmi mudéfichi al pàgini coleghêdi da còla sgnêda (o dèinter int la categoréia sgnêda). Al pàgini dèint a la tó lésta 'd j [[Special:Watchlist|tgnû sòt ôc specêl]] în sgnêdi in '''grasèt'''.",
        "recentchangeslinked-page": "Nòm ' d la pàgina.",
        "recentchangeslinked-to": "Fà vèder sōl al mudéfichi fâti al pàgini coleghêdi a còla sgnêda.",
-       "upload": "Cârga un 'file'",
+       "upload": "Cârga un file",
        "uploadlogpage": "Fil carghê",
-       "filedesc": "Sûnt.",
+       "filedesc": "Particulêr.",
        "license": "Licèinsa:",
        "license-header": "Licèinsa",
        "nolicense": "Nisóna licèinsa sgnêda",
        "listfiles_date": "Dâta",
        "listfiles_name": "Nòm",
        "listfiles_user": "Utèint",
-       "file-anchor-link": "'File'",
+       "file-anchor-link": "File",
        "filehist": "Stòria 'd la pàgina",
        "filehist-help": "Fà cléch insém a 'n gróp dâta/ōra per vèder al file cm'é l'ēra int al mumèint e-sgnê",
        "filehist-revert": "armèt",
        "filehist-user": "Utèint",
        "filehist-dimensions": "Amzûri",
        "filehist-comment": "Cumèint",
-       "imagelinks": "Ûş dal 'file'",
+       "imagelinks": "Ûş dal file",
        "linkstoimage": "{{PLURAL:$1|Int la pàgina seguèint a gh'é|Int al seguèinti $1 pàgini a gh'é}} colegamèint al file:",
        "nolinkstoimage": "Nisóna pàgina la gh'à colegamèint al file",
        "sharedupload-desc-here": "Cól file ché al deşvîn da $1 e al pōl èser druvê da êter prugèt. Ed sègvit a vîn fât vèder la spiegasiòun che gh'é int la [$2 pàgina de spiegasiòun dal file].",
        "pager-older-n": "{{PLURAL:$1|1 al pió vèc|$1 i pió vèc}}",
        "booksources": "Tèst o documèint da léber.",
        "booksources-search-legend": "Sērca 'd documèint insém a di léber",
-       "booksources-go": "Và",
        "log": "Regéster",
        "allpages": "Tót al pàgini.",
        "allarticles": "Tót al pàgini.",
        "watchthispage": "Và adrē a cla pàgina ché",
        "unwatch": "Andêr mìa adrē",
        "watchlist-details": "La lésta 'd quî tgnû 'd ôc specêl la gh'à {{PLURAL:$1|'na pàgina (e la relatîva pàgina 'd discusiòun)|$1 pagine (e al relatîvi  pàgini 'd discusiòun)}}.",
-       "wlshowlast": "Fà vèder al j ûltmi $1 ōri $2 dé $3",
+       "wlshowlast": "Fà vèder al j ûltmi $1 ōri $2 dé",
        "watchlist-options": "Siēlti di tgnû sòt ôc specêl.",
        "created": "creät",
        "changed": "mudifegat",
        "nolinkshere": "Nisóna pàgina la gh'à dèinter colegamèint che pûnten a '''[[:$1]]'''.",
        "isredirect": "Pàgina redirect",
        "istemplate": "uniòun",
-       "isimage": "Colegamèint vêrs al 'file'",
+       "isimage": "Colegamèint vêrs al file",
        "whatlinkshere-prev": "{{PLURAL:$1|còl préma|quî préma $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|còl dôp|quî dôp $1}}",
        "whatlinkshere-links": "← colegamèint",
        "allmessages-filter-submit": "Và",
        "thumbnail-more": "Ingrandés",
        "thumbnail_error": "Erōr mèinter ét fêv la miniadûra:$1",
-       "import-upload-filename": "Nòm dal 'file':",
+       "import-upload-filename": "Nòm dal file:",
        "import-comment": "Argumèint:",
        "import-upload": "Cârga infurmasiòun XML",
        "tooltip-pt-userpage": "La tó pàgina utèint",
        "tooltip-feed-atom": "Feed Atom per cla pàgina ché.",
        "tooltip-t-contributions": "Lèsta di lavōr fât da cl'utèint ché.",
        "tooltip-t-emailuser": "Mânda un mesâg cun la pòsta eletrônica a cl'utèint ché",
-       "tooltip-t-upload": "Cârga un 'file'",
+       "tooltip-t-upload": "Cârga un file",
        "tooltip-t-specialpages": "Elèinch ed tót al pàgini specêli",
        "tooltip-t-print": "Per stampêr cla pàgina ché.",
        "tooltip-t-permalink": "Colegamèint fés a cla versiòun ché 'd  la pàgina.",
        "tooltip-ca-nstab-user": "Guêrda la pàgina utèint",
        "tooltip-ca-nstab-special": "Còsta ché l'é 'na pàgina specêlal l'an pōl mìa èser mudifichêda",
        "tooltip-ca-nstab-project": "Guêrda la pàgina dal prugèt",
-       "tooltip-ca-nstab-image": "Guêrda la pàgina dal 'file'",
-       "tooltip-ca-nstab-template": "Guêrda 'l template",
+       "tooltip-ca-nstab-image": "Guêrda la pàgina dal file",
+       "tooltip-ca-nstab-template": "Guêrda 'l mudèl",
        "tooltip-ca-nstab-help": "Guêrda la pàgina d'ajót",
        "tooltip-ca-nstab-category": "Guêrda la pàgina 'd la categoréia",
        "tooltip-minoredit": "Sègna cme 'na mudéfica céca",
        "tooltip-summary": "Mèt dèinter un sût cèch.",
        "others": "êter",
        "pageinfo-header-edits": "Stòria dal mudéfichi",
-       "pageinfo-views": "Nómer dal vîşiti",
        "pageinfo-watchers": "Nómer  'd utèint che gh'àn la pàgina sòt ôc.",
        "pageinfo-edits": "Nómer totêl dal mudéfichi",
        "pageinfo-authors": "Nómer totêl di divêrs avtôr",
        "ilsubmit": "Sērca",
        "bydate": "per dâta",
        "ago": "$1 fa",
-       "bad_image_list": "La manēra l'é còsta:\n\na vînen cunsidrê sōl j elèinch puntê (ríghi che cumîncen cun al carâter *). Al prém colegamèint só ògni rîga al dēv èser un colegamèint a un 'file' mìa vrû. I colegamèint che vînen dôp, int l'istèsa rîga, în cunsidrê cme un chêş (oséia, pàgini in dó al 'file' al pōl èser arciamê normalmèint).",
+       "bad_image_list": "La manēra l'é còsta:\n\na vînen cunsidrê sōl j elèinch puntê (ríghi che cumîncen cun al carâter *). Al prém colegamèint só ògni rîga al dēv èser un colegamèint a un file mìa vrû. I colegamèint che vînen dôp, int l'istèsa rîga, în cunsidrê cme un chêş (oséia, pàgini in dó al file al pōl èser arciamê normalmèint).",
        "metadata": "Metadati",
        "metadata-help": "In cól file ché agh'é dal j infurmasiòun zuntêdi, prubabilmèint zuntêdi da la mâchina fotogrâfica o dal scàner druvê per fotografêrel o per fêrel dvintêr digitêl. Se al file l'é stê mudfifichê, soquânt particulêr a prén cumbinêr mìa cun la realtê.",
        "metadata-fields": "I câmp relatîv a i metadati ed la figûra, in lésta in cól mesâg ché, a gnirân més int la pàgina ed la figûra quând la tabèla di metadati l'é mustrêda int la fōrma cûrta. Per impustasiòun pre-stabilîda, chiêter câmp a gnirân lughê. \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-languagecode": "Léngva",
        "exif-iimcategory": "Categoréia",
        "exif-identifier": "Identificatîv",
-       "watchlistall2": "tót",
        "namespacesall": "tót",
        "monthsall": "tót",
        "recreate": "Tōrna a fêr",
        "version-version": "($1)",
        "version-license": "Licèinsa Media Wiki",
        "version-poweredby-others": "êter",
-       "fileduplicatesearch-filename": "Nòm dal 'file':",
+       "fileduplicatesearch-filename": "Nòm dal file:",
        "fileduplicatesearch-submit": "Sērca",
        "specialpages": "Pàgini specêli",
        "external_image_whitelist": "#Lasêr cla pàgina ché acsé cme l'é<pre>\n#Mèter dèinter i pès dal j espresiòun regolêri (sōl la pêrta cla va fra //) ed sègvit\n#Còsti gnirân més a cunfrûnt cun j indirés URL dal figûri d'ed fōra (hotlinked) \n#Al cunbinasiòun asrân fât vèder cme figûri, se no a gnirà fât vèder sōl al colegamèint\n#Al rîghi che cumîncen cun # în cunsidrêdi di cumèint\n#La diferèinsa tr' al lètri grândi e al lètri céchi an gh'à mìa impurtânsa\n\n#Mèter sōver cla rîga ché tót i pès di regex. Lasêr cla rîga ché acsé cme l'é</pre>",
index a5ec592..8cd1a32 100644 (file)
        "viewsourcetext": "Μπορείτε να δείτε και να αντιγράψετε τον κώδικα αυτής της σελίδας:",
        "viewyourtext": "Μπορείτε να προβάλετε και να αντιγράψετε τον κώδικα των '''επεξεργασιών σας''' σε αυτήν τη σελίδα:",
        "protectedinterface": "Αυτή η σελίδα παρέχει κείμενο διεπαφής για το λογισμικό σε αυτό το wiki, και έχει κλειδωθεί για αποτροπή τυχόν βανδαλισμού.\n\nΓια να προσθέσετε ή να αλλάξετε τις μεταφράσεις για όλα τα wikis, παρακαλούμε χρησιμοποιήστε  [//translatewiki.net/ translatewiki.net], το εγχείρημα τοπικοποίησης του  MediaWiki.",
-       "editinginterface": "'''Προσοχή:''' Επεξεργάζεστε μια σελίδα η οποία χρησιμοποιείται για να παρέχει κείμενο διεπαφής για το λογισμικό. Αλλαγές σε αυτή τη σελίδα θα επηρεάσουν την εμφάνιση της διεπαφής χρήστη για τους άλλους χρήστες. Εάν θέλετε να διορθώσετε τη μετάφραση, μπορείτε να χρησιμοποιήσετε το [//translatewiki.net/ translatewiki.net], το εγχείρημα για με τις μεταφράσεις των μηνυμάτων MediaWiki.",
+       "editinginterface": "<strong>Προειδοποίηση:</strong> Επεξεργάζεστε μια σελίδα η οποία χρησιμοποιείται για να παρέχει κείμενο διεπαφής για το λογισμικό. Αλλαγές σε αυτήν τη σελίδα θα επηρεάσουν την εμφάνιση της διεπαφής χρήστη για τους άλλους χρήστες αυτού του wiki.",
        "cascadeprotected": "Αυτή η σελίδα έχει προστατευθεί από επεξεργασία, επειδή περιλαμβάνεται {{PLURAL:$1|στην ακόλουθη σελίδα, που είναι προστατευμένη|στις ακόλουθες σελίδες, που είναι προστατευμένες}} με ενεργοποιημένη τη «διαδοχική» προστασία στο:\n$2",
        "namespaceprotected": "Δεν έχετε άδεια να επεξεργάζεστε σελίδες στον τομέα '''$1'''.",
        "customcssprotected": "Δεν έχετε δικαιώματα για να επεξεργαστείτε αυτή τη σελίδα CSS, επειδή περιέχει προσωπικές ρυθμίσεις άλλου χρήστη.",
        "passwordreset-emailsent-capture": "Έχει αποσταλεί email επαναφοράς κωδικού, το οποίο φαίνεται πιο κάτω.",
        "passwordreset-emailerror-capture": "Ένα email επαναφοράς κωδικού έχει δημιουργηθεί, το οποίο φαίνεται πιο κάτω, αλλά απέτυχε η αποστολή του στο  {{GENDER:$2|χρήστη}}: $1",
        "changeemail": "Αλλαγή της διεύθυνσης ηλεκτρονικού ταχυδρομείου",
-       "changeemail-header": "Αλλαγή λογαριασμού ηλεκτρονικού ταχυδρομείου",
        "changeemail-text": "Συμπληρώστε αυτή τη φόρμα για να αλλάξετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου σας. Θα πρέπει να εισάγετε τον κωδικό σας για να επιβεβαιωθεί αυτή η αλλαγή.",
        "changeemail-no-info": "Πρέπει να έχετε συνδεθεί για άμεση πρόσβαση σε αυτήν τη σελίδα.",
        "changeemail-oldemail": "Τρέχουσα διεύθυνση ηλεκτρονικού ταχυδρομείου:",
        "changeemail-none": "(κανένα)",
        "changeemail-password": "Ο κωδικός πρόσβασής σας στο εγχείρημα {{SITENAME}}:",
        "changeemail-submit": "Αλλαγή διεύθυνσης ηλεκτρονικού ταχυδρομείου",
-       "changeemail-cancel": "Ακύρωση",
        "changeemail-throttled": "Κάνατε πάρα πολλές απόπειρες σύνδεσης.\nΠαρακαλούμε περιμένετε $1 προτού ξαναδοκιμάσετε.",
        "resettokens": "Επαναφορά των κλειδιών",
        "resettokens-text": "Μπορείτε να επαναφέρετε τα κλειδιά, τα οποία επιτρέπουν την πρόσβαση σε ορισμένα ιδιωτικά δεδομένα που συνδέονται με τον λογαριασμό σας εδώ.\n\nΠρέπει να το κάνετε εάν κατά λάθος τα μοιραστήκατε με κάποιον ή αν ο λογαριασμός σας έχει παραβιαστεί.",
        "showpreview": "Εμφάνιση προεπισκόπησης",
        "showdiff": "Εμφάνιση αλλαγών",
        "blankarticle": "<strong>Προειδοποίηση:</strong> Η σελίδα που δημιουργείτε είναι κενή.\nΕάν κάνετε κλικ στο κουμπί \"{{int:savearticle}}\" και πάλι, η σελίδα θα δημιουργηθεί χωρίς κανένα περιεχόμενο.",
-       "anoneditwarning": "'''Προειδοποίηση:''' Δεν έχετε συνδεθεί. Η διεύθυνση IP σας θα καταγραφεί στο ιστορικό επεξεργασίας αυτής της σελίδας.",
+       "anoneditwarning": "<strong>Προειδοποίηση:</strong> Δεν έχετε συνδεθεί. Η διεύθυνση IP σας θα είναι ορατή δημόσια αν κάνετε κάποια επεξεργασία. Αν <strong>[$1 συνδεθείτε]</strong> ή <strong>[$2 δημιουργήσετε λογαριασμό]</strong>, οι επεξεργασίες σας θα αποδοθούν στο όνομά χρήστη σας, μαζί με άλλα οφέλη.",
        "anonpreviewwarning": "''Δεν έχετε συνδεθεί. Η αποθήκευση θα καταγράψει την διεύθυνσή IP σας στο ιστορικό επεξεργασίας αυτής της σελίδας.''",
        "missingsummary": "'''Υπενθύμιση:''' Δεν έχετε συμπληρώσει τη σύνοψη επεξεργασίας. Αν κάνετε κλικ στο κουμπί Αποθήκευση πάλι, η επεξεργασία σας θα αποθηκευτεί χωρίς σύνοψη.",
        "missingcommenttext": "Παρακαλώ εισάγετε ένα σχόλιο παρακάτω.",
        "nonunicodebrowser": "'''ΠΡΟΣΟΧΗ! Ο περιηγητής σας δεν είναι συμβατός με κωδικοποίηση Unicode.'''\nΓια την ασφαλή επεξεργασία των σελίδων έχει βρεθεί ένας εναλλακτικός τρόπος: Όσοι χαρακτήρες δεν είναι ASCII θα φαίνονται στο πλαίσιο επεξεργασίας ως δεκαεξαδικοί κωδικοί.",
        "editingold": "'''Προειδοποίηση: Επεξεργάζεστε μια παλιότερη αναθεώρηση αυτής της σελίδας.'''\nΑν την αποθηκεύσετε, όσες αλλαγές έχουν γίνει μετά από αυτή την αναθεώρηση θα χαθούν.",
        "yourdiff": "Διαφορές",
-       "copyrightwarning": "Î\9fλεÏ\82 Î¿Î¹ Ï\83Ï\85νειÏ\83Ï\86οÏ\81έÏ\82 Ï\83Ï\84ο {{SITENAME}} Î¸ÎµÏ\89Ï\81οÏ\8dνÏ\84αι Ï\8cÏ\84ι Î´Î·Î¼Î¿Ï\83ιεÏ\8dονÏ\84αι Ï\83Ï\8dμÏ\86Ï\89να Î¼Îµ Ï\84ην $2 (Î\92λ. $1 Î³Î¹Î± Î»ÎµÏ\80Ï\84ομέÏ\81ειεÏ\82).\nÎ\91ν Î´ÎµÎ½ ÎµÏ\80ιθÏ\85μείÏ\84ε Ï\84α ÎºÎµÎ¯Î¼ÎµÎ½Î¬ Ï\83αÏ\82 Î½Î± Ï\84α ÎµÏ\80εξεÏ\81γαÏ\83Ï\84οÏ\8dν ÎºÎ±Ï\84ά Ï\84ην ÎºÏ\81ίÏ\83η Ï\84οÏ\85Ï\82 Î¬Î»Î»Î¿Î¹ Ï\87Ï\81ήÏ\83Ï\84εÏ\82 ÎºÎ±Î¹ Î½Î± Ï\84α Î´Î¹Î±Î´Ï\8eÏ\83οÏ\85ν ÎºÎ±Ï\84ά Î²Î¿Ï\8dληÏ\83η, Ï\80αÏ\81ακαλοÏ\8dμε Î½Î± Î¼Î·Î½ Ï\84α Î±Î½Î±Ï\81Ï\84ήÏ\83εÏ\84ε Ï\83ε Î±Ï\85Ï\84Ï\8c Ï\84ο Ï\87Ï\8eÏ\81ο. Î\8c\84ι Ï\83Ï\85νειÏ\83Ï\86έÏ\81εÏ\84ε Ï\83Ï\84ο Ï\87Ï\8eÏ\81ο Î±Ï\85Ï\84Ï\8c Ï\83ε ÎºÎµÎ¯Î¼ÎµÎ½Î±, Î´Î¹Î±Î³Ï\81άμμαÏ\84α, Ï\83Ï\84οιÏ\87εία Î® ÎµÎ¹ÎºÏ\8cνεÏ\82 Ï\80Ï\81έÏ\80ει Î½Î± ÎµÎ¯Î½Î±Î¹ Î´Î¹ÎºÎ¬ Ï\83αÏ\82 Î­Ï\81γα Î® Î½Î± Î±Î½Î®ÎºÎ¿Ï\85ν Ï\83Ï\84ο Î´Î·Î¼Ï\8cÏ\83ιο Ï\84ομέα (public domain) Î® Î½Î± Ï\80Ï\81οέÏ\81Ï\87ονÏ\84αι Î±Ï\80Ï\8c ÎµÎ»ÎµÏ\8dθεÏ\81εÏ\82 Î® Î±Î½Î¿Î¹Ï\87Ï\84έÏ\82 Ï\80ηγέÏ\82 Î¼Îµ Ï\81ηÏ\84ή Î¬Î´ÎµÎ¹Î± Î±Î½Î±Î´Î·Î¼Î¿Ï\83ίεÏ\85Ï\83ηÏ\82.<br />\nΤέλοÏ\82 Î²ÎµÎ²Î±Î¹Ï\8eνεÏ\84ε Ï\80Ï\89Ï\82 Ï\8c\84ι Î³Ï\81άÏ\86εÏ\84ε Ï\83ε Î±Ï\85Ï\84Ï\8c Ï\84ον Ï\87Ï\8eÏ\81ο ÎµÎ¯Î½Î±Î¹ Ï\80Ï\81Ï\89Ï\84Ï\8cÏ\84Ï\85Ï\80ο Î´Î¹ÎºÏ\8c Ï\83αÏ\82 Î­Ï\81γο ÎºÎ±Î¹, Î¬Ï\83Ï\87εÏ\84α Î¼Îµ Ï\84ην Î­ÎºÏ\84αÏ\83ή Ï\84οÏ\85, Î´ÎµÎ½ Î­Ï\87ει ÎµÎºÏ\87Ï\89Ï\81ηθεί Ï\83ε Ï\84Ï\81ίÏ\84οÏ\85Ï\82 Î· Î´Î·Î¼Î¿Ï\83ίεÏ\85Ï\83η ÎºÎ±Î¹ Î· ÎµÎºÎ¼ÎµÏ\84άλλεÏ\85Ï\83ή Ï\84οÏ\85.\n'''ΠÎ\91ΡÎ\91Î\9aÎ\91Î\9bÎ\9fÎ¥Î\9cÎ\95 Î\9dÎ\91 Î\9cÎ\97Î\9d Î\91Î\9dÎ\91ΡΤÎ\97ΣÎ\95ΤÎ\95 Î\9aÎ\95Î\99Î\9cÎ\95Î\9dÎ\91 Î¤Î¡Î\99ΤΩÎ\9d Î\95Î\91Î\9d Î\94Î\95Î\9d Î\95ΧÎ\95ΤÎ\95 Î¤Î\97Î\9d Î\91Î\94Î\95Î\99Î\91 Î¤Î\9fÎ¥ Î\99Î\94Î\99Î\9fÎ\9aΤÎ\97ΤÎ\97 Î¤Î\9fÎ¥ COPYRIGHT!'''",
+       "copyrightwarning": "ΠαÏ\81ακαλοÏ\8dμε Ï\83ημειÏ\8eÏ\83Ï\84ε Ï\8cÏ\84ι Ï\8cλεÏ\82 Î¿Î¹ Ï\83Ï\85νειÏ\83Ï\86οÏ\81έÏ\82 Ï\83Ï\84ον Î¹Ï\83Ï\84Ï\8cÏ\84οÏ\80ο {{SITENAME}} Î¸ÎµÏ\89Ï\81οÏ\8dνÏ\84αι Ï\8cÏ\84ι Î´Î·Î¼Î¿Ï\83ιεÏ\8dονÏ\84αι Ï\83Ï\8dμÏ\86Ï\89να Î¼Îµ Ï\84ην $2 (βλ. $1 Î³Î¹Î± Î»ÎµÏ\80Ï\84ομέÏ\81ειεÏ\82).\nÎ\91ν Î´ÎµÎ½ ÎµÏ\80ιθÏ\85μείÏ\84ε Ï\84α ÎºÎµÎ¯Î¼ÎµÎ½Î¬ Ï\83αÏ\82 Î½Î± Ï\84α ÎµÏ\80εξεÏ\81γάζονÏ\84αι Î±Î½Î·Î»ÎµÏ\8eÏ\82 Î¬Î»Î»Î¿Î¹ Ï\87Ï\81ήÏ\83Ï\84εÏ\82 ÎºÎ±Î¹ Î½Î± Ï\84α Î´Î¹Î±Î´Î¯Î´Î¿Ï\85ν ÎºÎ±Ï\84ά Î²Î¿Ï\8dληÏ\83η, Ï\84Ï\8cÏ\84ε Î½Î± Î¼Î·Î½ Ï\84α Ï\85Ï\80οβάλλεÏ\84ε ÎµÎ´Ï\8e.<br />Î\9cαÏ\82 Ï\85Ï\80Ï\8cÏ\83Ï\87εÏ\83Ï\84ε ÎµÏ\80ίÏ\83ηÏ\82 Ï\8cÏ\84ι Î±Ï\85Ï\84Ï\8c Ï\84ο Î³Ï\81άÏ\88αÏ\84ε Î¼Ï\8cνοι Ï\83αÏ\82 Î® Ï\84ο Î±Î½Ï\84ιγÏ\81άÏ\88αÏ\84ε Î±Ï\80Ï\8c ÎºÎ¬Ï\80οια ÎµÎ»ÎµÏ\8dθεÏ\81η Ï\80ηγή Ï\89Ï\82 ÎºÎ¿Î¹Î½Ï\8c ÎºÏ\84ήμα Î® ÎºÎ¬Ï\84ι Î±Î½Î¬Î»Î¿Î³Î¿.\n<strong>Î\9cην Ï\85Ï\80οβάλλεÏ\84ε Î´Î¿Ï\85λειά Ï\80οÏ\85 Ï\80Ï\81οÏ\83Ï\84αÏ\84εÏ\8dεÏ\84αι Î±Ï\80Ï\8c Ï\80νεÏ\85μαÏ\84ικά Î´Î¹ÎºÎ±Î¹Ï\8eμαÏ\84α Ï\87Ï\89Ï\81ίÏ\82 Î¬Î´ÎµÎ¹Î±!</strong>",
        "copyrightwarning2": "Σημειώστε ότι όλες οι συνεισφορές στον ιστότοπο {{SITENAME}} μπορούν να υποστούν επεξεργασία, να αλλαχθούν, ή να αφαιρεθούν από άλλους συνεισφέροντες. Αν δεν θέλετε τα γραπτά σας να υποστούν επεξεργασία κατά βούληση, τότε μην τα τοποθετήσετε σε αυτό το χώρο.<br />\nΕπίσης μας υπόσχεστε πως ό,τι γράφετε είναι δικό σας, ή αντιγραμμένο από μια πηγή που είναι κοινό κτήμα, ή μια παρόμοια ελεύθερη πηγή (δείτε $1 για λεπτομέρειες).\n'''ΠΑΡΑΚΑΛΟΥΜΕ ΝΑ ΜΗΝ ΤΟΠΟΘΕΤΕΙΤΕ ΠΝΕΥΜΑΤΙΚΑ ΚΑΤΟΧΥΡΩΜΕΝΟ ΕΡΓΟ ΧΩΡΙΣ ΑΔΕΙΑ!'''",
        "longpageerror": "'''Σφάλμα: Το κείμενο που καταχωρήσατε έχει μήκος {{PLURAL:$1|ένα kilobyte|$1 kilobytes}}, το οποίο είναι μεγαλύτερο από το μέγιστο {{PLURAL:$2|του ενός kilobyte|των $2 kilobytes}}.'''\nΔεν μπορεί να αποθηκευτεί.",
        "readonlywarning": "'''Προειδοποίηση: Η βάση δεδομένων έχει κλειδωθεί για συντήρηση, έτσι δεν θα μπορέσετε να αποθηκεύσετε τις επεξεργασίες σας αυτή τη στιγμή.'''\nΜπορείτε αν θέλετε να μεταφέρετε με αντιγραφή-επικόλληση το κείμενό σας σε αρχείο κειμένου και να το αποθηκεύσετε για αργότερα.\n\nΟ διαχειριστής που την κλείδωσε έδωσε την εξής εξήγηση: $1",
        "mergehistory-same-destination": "Οι σελίδες προέλευσης και προορισμού δεν μπορούν να είναι οι ίδιες",
        "mergehistory-reason": "Αιτία:",
        "mergelog": "Συγχώνευση λογαριασμού",
-       "pagemerge-logentry": "το [[$1]] συγχωνεύθηκε στο [[$2]] (εκδόσεις έως και τις $3)",
        "revertmerge": "Αναίρεση συγχώνευσης",
        "mergelogpagetext": "Παρακάτω είναι μια λίστα με τις πιο πρόσφατες συγχωνεύσεις ιστορικού μιας σελίδας σε άλλο.",
        "history-title": "Ιστορικό αναθεωρήσεων της σελίδας «$1»",
        "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": "Αδελφικά εγχειρήματα",
        "search-relatedarticle": "Σχετικά",
        "searchrelated": "σχετικά",
        "searchall": "όλα",
-       "showingresults": "Î\94είÏ\84ε Ï\80αÏ\81ακάÏ\84Ï\89 Î¼Î­Ï\87Ï\81ι Ï\84α {{PLURAL:$1|'''1'''αÏ\80οÏ\84έλεÏ\83μα|'''$1''' Î±Ï\80οÏ\84ελέÏ\83μαÏ\84α}} Î¾ÎµÎºÎ¹Î½Ï\8eνÏ\84αÏ\82 Î¼Îµ #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Αποτέλεσμα '''$1''' από '''$3'''|Αποτελέσματα '''$1 - $2''' από '''$3'''}} για '''$4'''",
+       "showingresults": "ΠαÏ\81ακάÏ\84Ï\89 {{PLURAL:$1|εμÏ\86ανίζεÏ\84αι Î¼Î­Ï\87Ï\81ι <strong>1</strong> Î±Ï\80οÏ\84έλεÏ\83μα|εμÏ\86ανίζονÏ\84αι Î¼Î­Ï\87Ï\81ι <strong>$1</strong> Î±Ï\80οÏ\84ελέÏ\83μαÏ\84α}} Î¾ÎµÎºÎ¹Î½Ï\8eνÏ\84αÏ\82 Î±Ï\80Ï\8c Ï\84ο Î\9dο <strong>$2</strong>.",
+       "showingresultsinrange": "Παρακάτω {{PLURAL:$1|εμφανίζεται μέχρι <strong>1</strong> αποτέλεσμα|εμφανίζονται μέχρι <strong>$1</strong> αποτελέσματα}} σε εύρος από το Νο <strong>$2</strong> μέχρι το Νο <strong>$3</strong>.",
        "search-nonefound": "Δεν υπάρχουν αποτελέσματα που να ικανοποιούν το ερώτημα.",
        "powersearch-legend": "Αναλυτική αναζήτηση",
        "powersearch-ns": "Αναζήτηση στις περιοχές ονομάτων:",
        "prefs-tokenwatchlist": "Κλειδί",
        "prefs-diffs": "Διαφορές",
        "prefs-help-prefershttps": "Αυτή η προτίμηση θα τεθεί σε ισχύ στην επόμενή σας σύνδεση.",
+       "prefswarning-warning": "Έχετε κάνει αλλαγές στις προτιμήσεις σας που δεν έχουν αποθηκευτεί ακόμα.\nΕάν αφήσετε αυτή τη σελίδα χωρίς να κάνετε κλικ στο \"$1\" οι προτιμήσεις σας δεν θα ενημερωθούν.",
        "prefs-tabs-navigation-hint": "Συμβουλή: Μπορείτε να χρησιμοποιήσετε τα πλήκτρα διευθύνσεων αριστερά και δεξιά για να πλοηγηθείτε μεταξύ των καρτελών στη λίστα καρτελών.",
        "email-address-validity-valid": "Η διεύθυνση ηλεκτρονικού ταχυδρομείου φαίνεται έγκυρη",
        "email-address-validity-invalid": "Εισάγετε  μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου",
        "right-browsearchive": "Αναζήτηση στις διαγραμμένες σελίδες",
        "right-undelete": "Ανάκληση διαγραφής μίας σελίδας",
        "right-suppressrevision": "Επιθεώρηση και αποκατάσταση αναθεωρήσεων κρυμμένων από τους διαχειριστές",
-       "right-viewsuppressed": "Προβολή αναθεωρήσεων κρυμμέτων από κάθε χρήστη",
+       "right-viewsuppressed": "Προβολή αναθεωρήσεων κρυμμένων από κάθε χρήστη",
        "right-suppressionlog": "Προβολή ιδιωτικών καταγραφών",
        "right-block": "Φραγή άλλων χρηστών από την επεξεργασία",
        "right-blockemail": "Φραγή ενός χρήστη από την αποστολή ηλεκτρονικών μηνυμάτων",
        "recentchanges-legend-heading": "'''Υπόμνημα:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (δείτε [[Special:NewPages|κατάλογος νέων σελίδων]])",
        "rcnotefrom": "Παρακάτω είναι οι αλλαγές από τις <strong>$2</strong>  (εμφανίζονται μέχρι <strong>$1</strong> ).",
-       "rclistfrom": "Εμφάνιση νέων αλλαγών αρχίζοντας από $3 $2",
+       "rclistfrom": "Εμφάνιση νέων αλλαγών αρχίζοντας από τις $3 στις $2",
        "rcshowhideminor": "$1 μικροεπεξεργασιών",
        "rcshowhideminor-show": "Εμφάνιση",
        "rcshowhideminor-hide": "Απόκρυψη",
        "windows-nonascii-filename": "Αυτό το wiki δεν υποστηρίζει ονόματα αρχείων με ειδικούς χαρακτήρες.",
        "fileexists": "Υπάρχει ήδη αρχείο με αυτό το όνομα, παρακαλούμε ελέγξτε το <strong>[[:$1]]</strong> εάν δεν είστε {{GENDER:|σίγουρος|σίγουρη}} αν θέλετε να το αλλάξετε.\n[[$1|thumb]]",
        "filepageexists": "Η σελίδα περιγραφής για αυτό το αρχείο δημιουργήθηκε ήδη στο <strong>[[:$1]]</strong>, αλλά κανένα αρχείο με αυτό το όνομα δεν υπάρχει αυτή τη στιγμή.\nΗ περιγραφἠ που θα εισάγετε δεν θα εμφανιστεί στη σελίδα περιγραφής.\nΓια να εμφανιστεί η περιγραφή σας εκεί, θα πρέπει να την επεξεργαστείτε χειροκίνητα.\n[[$1|thumb]]",
-       "fileexists-extension": "Î\88να Î±Ï\81Ï\87είο Î¼Îµ Ï\80αÏ\81Ï\8cμοιο Ï\8cνομα Ï\85Ï\80άÏ\81Ï\87ει: [[$2|thumb]]\n* Î\8cνομα Ï\84οÏ\85 Ï\80Ï\81οÏ\82 ÎµÏ\80ιÏ\86Ï\8cÏ\81Ï\84Ï\89Ï\83η Î±Ï\81Ï\87είοÏ\85: <strong>[[:$1]]</strong>\n* Î\8cνομα Ï\85Ï\80άÏ\81Ï\87ονÏ\84οÏ\82 Î±Ï\81Ï\87είοÏ\85: <strong>[[:$2]]</strong>\nΠαÏ\81ακαλÏ\8e Î´Î¹Î±Î»Î­Î¾Ï\84ε Î­Î½Î± Î´Î¹Î±Ï\86οÏ\81εÏ\84ικÏ\8c Ï\8cνομα.",
+       "fileexists-extension": "Î¥Ï\80άÏ\81Ï\87ει Î­Î½Î± Î±Ï\81Ï\87είο Î¼Îµ Ï\80αÏ\81Ï\8cμοιο Ï\8cνομα: [[$2|thumb]]\n* Î\8cνομα Ï\84οÏ\85 Ï\80Ï\81οÏ\82 Î±Î½Î­Î²Î±Ï\83μα Î±Ï\81Ï\87είοÏ\85: <strong>[[:$1]]</strong>\n* Î\8cνομα Ï\85Ï\80άÏ\81Ï\87ονÏ\84οÏ\82 Î±Ï\81Ï\87είοÏ\85: <strong>[[:$2]]</strong>\nÎ\9cήÏ\80Ï\89Ï\82 Î¸Î± Î¸Î­Î»Î±Ï\84ε Î½Î± Ï\87Ï\81ηÏ\83ιμοÏ\80οιήÏ\83εÏ\84ε ÎºÎ¬Ï\80οιο Ï\8cνομα Ï\80οÏ\85 Î½Î± Î¾ÎµÏ\87Ï\89Ï\81ίζει Ï\80εÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81ο;",
        "fileexists-thumbnail-yes": "Το αρχείο φαίνεται ότι είναι μια εικόνα μειωμένου μεγέθους ''(μικρογραφία)''. [[$1|thumb]]\nΠαρακαλώ ελέγξτε το αρχείο <strong>[[:$1]]</strong>.\nΑν το ελεγμένο αρχείο είναι η ίδια εικόνα στο αρχικό μέγεθος δεν είναι απαραίτητο να επιφορτώσετε μια επιπλέον μικρογραφία.",
        "file-thumbnail-no": "Το όνομα αρχείου αρχίζει με <strong>$1</strong>.\nΦαίνεται πως είναι μια εικόνα μειωμένου μεγέθους ''(μικρογραφία)''.\nΑν έχετε αυτή την εικόνα σε πλήρη ανάλυση, επιφορτώστε τη, αλλιώς αλλάξτε παρακαλώ το όνομα του αρχείου.",
        "fileexists-forbidden": "Ένα αρχείο με αυτό το όνομα υπάρχει ήδη˙ εάν ακόμη θέλετε να επιφορτώσωτε αυτό το αρχείο παρακαλώ πηγαίνετε πίσω και επιφορτώστε το υπό ένα νέο όνομα. [[File:$1|thumb|center|$1]]",
        "license-header": "Αδειοδότηση",
        "nolicense": "Καμία επιλεγμένη",
        "license-nopreview": "(Μη διαθέσιμη προεπισκόπηση)",
-       "upload_source_url": " (ένα έγκυρο, δημόσια προσβάσιμο URL)",
+       "upload_source_url": "(το επιλεγμένο σας αρχείο από μια έγκυρη, δημόσια προσβάσιμη διεύθυνση URL)",
        "upload_source_file": "(το επιλεγμένο αρχείο από τον υπολογιστή σας)",
        "listfiles-delete": "διαγραφή",
        "listfiles-summary": "Αυτή η ειδική σελίδα δείχνει όλα τα επιφορτωμένα αρχεία.",
        "unusedtemplates": "Αχρησιμοποίητα πρότυπα",
        "unusedtemplatestext": "Αυτή η σελίδα περιέχει όλες τις σελίδες στην περιοχή ονομάτος των {{ns:template}}, οι οποίες δεν περιλαμβάνονται σε άλλη σελίδα. Θυμηθείτε να ελέγξετε για άλλους συνδέσμους προς τα πρότυπα πριν τα διαγράψετε.",
        "unusedtemplateswlh": "άλλοι σύνδεσμοι",
-       "randompage": "ΤÏ\85Ï\87αίο Î»Î®Î¼Î¼α",
+       "randompage": "ΤÏ\85Ï\87αία Ï\83ελίδα",
        "randompage-nopages": "Δεν υπάρχουν σελίδες {{PLURAL:$2|στον ακόλουθο ονοματοχώρο|στους ακόλουθους ονοματοχώρους}}: $1.",
        "randomincategory": "Τυχαία σελίδα στην κατηγορία",
        "randomincategory-invalidcategory": "Το «$1» δεν είναι έγκυρο όνομα κατηγορίας.",
        "statistics": "Στατιστικά",
        "statistics-header-pages": "Στατιστικά σελίδων",
        "statistics-header-edits": "Στατιστικά επεξεργασιών",
-       "statistics-header-views": "Εμφάνιση στατιστικών",
        "statistics-header-users": "Στατιστικά χρηστών",
        "statistics-header-hooks": "Άλλα στατιστικά",
        "statistics-articles": "Σελίδες περιεχομένου",
        "statistics-files": "Αρχεία που έχουν επιφορτωθεί",
        "statistics-edits": "Επεξεργασίες σελίδων από τη δημιουργία του εγχειρήματος {{SITENAME}}",
        "statistics-edits-average": "Μέσος όρος επεξεργασιών ανά σελίδα",
-       "statistics-views-total": "Συνολικές εμφανίσεις",
-       "statistics-views-total-desc": "Επισκέψεις σε μη υπάρχουσες σελίδες και ειδικές σελίδες δεν συμπεριλαμβάνονται",
-       "statistics-views-peredit": "Εμφανίσεις ανά επεξεργασία",
        "statistics-users": "Εγγεγραμμένοι [[Special:ListUsers|χρήστες]]",
        "statistics-users-active": "Ενεργοί χρήστες",
        "statistics-users-active-desc": "Χρήστες που έχουν κάνει κάποια επεξεργασία μέσα σε {{PLURAL:$1|μέρα|$1 μέρες}}",
-       "statistics-mostpopular": "Οι πιο δημοφιλείς σελίδες",
        "pageswithprop": "Σελίδες με ιδιότητα σελίδας",
        "pageswithprop-legend": "Σελίδες με ιδιότητα σελίδας",
        "pageswithprop-text": "Αυτή η σελίδα ταξινομεί σελίδες που χρησιμοποιούν μια συγκεκριμένη ιδιότητα σελίδας.",
        "pageswithprop-submit": "Μετάβαση",
        "doubleredirects": "Διπλές ανακατευθύνσεις",
        "doubleredirectstext": "Αυτή η σελίδα συγκαταλέγει σελίδες οι οποίες ανακατευθύνουν σε άλλες σελίδες ανακατεύθυνσης. Κάθε σειρά περιέχει συνδέσμους προς την πρώτη και τη δεύτερη σελίδα ανακατεύθυνσης, όπως επίσης και την πρώτη αράδα του κειμένου στη δεύτερη σελίδα ανακατεύθυνσης η οποία και είναι, κανονικά, ο πραγματικός προορισμός της ανακατεύθυνσης -εκεί δηλαδή όπου θα έπρεπε να είχατε οδηγηθεί από την αρχή. Τα <del>διεγραμμένα</del> λήμματα έχουν επιλυθεί.",
-       "double-redirect-fixed-move": "Η [[$1]] έχει μετακινηθεί, τώρα είναι ανακατεύθυνση στην [[$2]]",
-       "double-redirect-fixed-maintenance": "Î\94ιÏ\8cÏ\81θÏ\89Ï\83η Î´Î¹Ï\80λήÏ\82 Î±Î½Î±ÎºÎ±Ï\84εÏ\8dθÏ\85νÏ\83ηÏ\82 Î±Ï\80Ï\8c Ï\84ο [[$1]] Ï\83Ï\84ο [[$2]].",
+       "double-redirect-fixed-move": "Η [[$1]] έχει μετακινηθεί.\nΕνημερώθηκε αυτόματα και τώρα είναι ανακατεύθυνση στην [[$2]].",
+       "double-redirect-fixed-maintenance": "Î\91Ï\85Ï\84Ï\8cμαÏ\84η Î´Î¹Ï\8cÏ\81θÏ\89Ï\83η Î´Î¹Ï\80λήÏ\82 Î±Î½Î±ÎºÎ±Ï\84εÏ\8dθÏ\85νÏ\83ηÏ\82 Î±Ï\80Ï\8c [[$1]] Ï\83ε [[$2]] Ï\83ε ÎµÏ\81γαÏ\83ία Ï\83Ï\85νÏ\84ήÏ\81ηÏ\83ηÏ\82.",
        "double-redirect-fixer": "Διορθωτής ανακατευθύνσεων",
        "brokenredirects": "Λανθασμένες ανακατευθύνσεις",
        "brokenredirectstext": "Οι παρακάτω ανακατευθύνσεις οδηγούν σε σελίδες που δεν υπάρχουν:",
        "uncategorizedtemplates": "Μη κατηγοριοποιημένα πρότυπα",
        "unusedcategories": "Κενές κατηγορίες",
        "unusedimages": "Αχρησιμοποίητες εικόνες",
-       "popularpages": "Δημοφιλείς σελίδες",
        "wantedcategories": "Επιθυμητές κατηγορίες",
        "wantedpages": "Ζητούμενες σελίδες",
        "wantedpages-badtitle": "Μη εγκυρός τίτλος στο σύνολο αποτελέσματος: $1",
        "wantedfiletext-cat": "Τα ακόλουθα αρχεία χρησιμοποιούνται αλλά δεν υπάρχουν. Αρχεία από εξωτερικά αποθετήρια ενδέχεται να παρατίθενται παρότι υπάρχουν. Κάθε τέτοιες λανθασμένες αναφορές θα <del>διαγραμμίζονται</del>. Επιπλέον, σελίδες που ενσωματώνουν αρχεία που δεν υπάρχουν παρατίθενται στο [[:$1]].",
        "wantedfiletext-nocat": "Τα ακόλουθα αρχεία χρησιμοποιούνται αλλά δεν υπάρχουν. Πέρα από τα υπάρχοντα ενδέχεται να έχουν καταχωριστεί και αρχεία από εξωτερικές πηγές λογισμικού. Τέτοιες ψευδο-υπαρκτές καταχωρίσεις θα εμφανίζονται <del>διαγραμμισμένες</del>.",
        "wantedtemplates": "Ζητούμενα πρότυπα",
-       "mostlinked": "Î\9fι Ï\83ελίδεÏ\82 Î¼Îµ Ï\84ιÏ\82 Ï\80εÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81εÏ\82 Î±Î½Î±Ï\86οÏ\81ές",
+       "mostlinked": "ΣελίδεÏ\82 Î¼Îµ Ï\84οÏ\85Ï\82 Ï\80εÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81οÏ\85Ï\82 Ï\83Ï\85νδέÏ\83μοÏ\85Ï\82 Ï\80Ï\81οÏ\82 Î±Ï\85Ï\84ές",
        "mostlinkedcategories": "Περισσότερο χρησιμοποιούμενες κατηγορίες",
        "mostlinkedtemplates": "Περισσότερο χρησιμοποιούμενα πρότυπα",
-       "mostcategories": "Î\86Ï\81θÏ\81α με τις περισσότερες κατηγορίες",
+       "mostcategories": "ΣελίδεÏ\82 με τις περισσότερες κατηγορίες",
        "mostimages": "Περισσότερο χρησιμοποιούμενα αρχεία",
        "mostinterwikis": "Σελίδες με τους περισσότερους διαγλωσσικούς συνδέσμους",
-       "mostrevisions": "Î\86Ï\81θÏ\81α με τις περισσότερες αναθεωρήσεις",
+       "mostrevisions": "ΣελίδεÏ\82 με τις περισσότερες αναθεωρήσεις",
        "prefixindex": "Όλες οι σελίδες με πρόθεμα",
        "prefixindex-namespace": "Όλες οι σελίδες με πρόθεμα (ονοματοχώρος $1)",
        "prefixindex-strip": "Αφαίρεση του προθέματος στη λίστα",
        "booksources": "Πηγές βιβλίων",
        "booksources-search-legend": "Αναζήτηση για πηγές βιβλίων",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Μετάβαση",
        "booksources-text": "Παρακάτω είναι μια λίστα συνδέσμων σε άλλους ιστοτόπους οι οποίοι πωλούν νέα και μεταχειρισμένα βιβλία, και μπορεί επίσης να έχουν περισσότερες πληροφορίες για βιβλία για τα οποία ψάχνετε:",
        "booksources-invalid-isbn": "Το δοσμένο ISBN δεν φαίνεται να είναι έγκυρο· ελέγξτε για λάθη κατά την αντιγραφή από την αρχική πηγή.",
        "specialloguserlabel": "",
        "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-name": "Όνομα μηνύματος",
        "trackingcategories-desc": "Κριτήρια συμπερίληψης κατηγορίας",
        "post-expand-template-inclusion-category-desc": "Το μέγεθος της σελίδας είναι μεγαλύτερο από <code>$wgMaxArticleSize</code> μετά την επέκταση όλων των προτύπων, έτσι ώστε ορισμένα πρότυπα δεν έχουν αναπτυχθεί.",
+       "hidden-category-category-desc": "Η κατηγορία περιέχει <code><nowiki>__HIDDENCAT__</nowiki></code> στο περιεχόμενο της σελίδας της, που την εμποδίζει εκ προεπιλογής να εμφανίζεται στο πλαίσιο συνδέσμων κατηγοριών των σελίδων.",
        "trackingcategories-nodesc": "Καμία διαθέσιμη περιγραφή.",
+       "trackingcategories-disabled": "Η κατηγορία είναι απενεργοποιημένη",
        "mailnologin": "Δεν υπάρχει διεύθυνση παραλήπτη.",
        "mailnologintext": "Πρέπει να έχετε [[Special:UserLogin|συνδεθεί]] και να έχετε δηλώσει\nμια έγκυρη ηλεκτρονική διεύθυνση στις [[Special:Preferences|Προτιμήσεις]]\nγια να στείλετε e-mail σε άλλους χρήστες.",
        "emailuser": "Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου σε αυτόν τον χρήστη",
        "emailccsubject": "Αντίγραφο του μηνυματός σας στο $1: $2",
        "emailsent": "Το μήνυμα έχει σταλεί",
        "emailsenttext": "Το μήνυμά σας έχει σταλεί.",
-       "emailuserfooter": "Î\91Ï\85Ï\84Ï\8c Ï\84ο Î·Î»ÎµÎºÏ\84Ï\81ονικÏ\8c Î¼Î®Î½Ï\85μα Ï\83Ï\84άλθηκε Î±Ï\80Ï\8c Ï\84ον/Ï\84ην \"$1\" Ï\83Ï\84ον Ï\84ον/Ï\84ην \"$2\" Î¼Î­Ï\83Ï\89 Ï\84ηÏ\82 Î»ÎµÎ¹Ï\84οÏ\85Ï\81γίαÏ\82 \"αÏ\80οÏ\83Ï\84ολήÏ\82 Î¼Î·Î½Ï\85μάÏ\84Ï\89ν\" στο {{SITENAME}}.",
+       "emailuserfooter": "Î\91Ï\85Ï\84Ï\8c Ï\84ο Î¼Î®Î½Ï\85μα Î·Î»ÎµÎºÏ\84Ï\81ονικοÏ\8d Ï\84αÏ\87Ï\85δÏ\81ομείοÏ\85 Ï\83Ï\84άλθηκε Î±Ï\80Ï\8c {{GENDER:$1|Ï\84ον Ï\87Ï\81ήÏ\83Ï\84η|Ï\84ην Ï\87Ï\81ήÏ\83Ï\84Ï\81ια}} $1 Ï\83{{GENDER:$2|Ï\84ον Ï\87Ï\81ήÏ\83Ï\84η|Ï\84ην Ï\87Ï\81ήÏ\83Ï\84Ï\81ια}} $2 Î¼Î­Ï\83Ï\89 Ï\84ηÏ\82 Î»ÎµÎ¹Ï\84οÏ\85Ï\81γίαÏ\82 Â«Î±Ï\80οÏ\83Ï\84ολήÏ\82 Î¼Î·Î½Ï\8dμαÏ\84οÏ\82 Î·Î»ÎµÎºÏ\84Ï\81ονικοÏ\8d Ï\84αÏ\87Ï\85δÏ\81ομείοÏ\85 Ï\83ε Ï\87Ï\81ήÏ\83Ï\84η» στο {{SITENAME}}.",
        "usermessage-summary": "Φεύγετε από τις ειδοποιήσεις συστήματος.",
        "usermessage-editor": "Μηνύματα συστήματος",
        "usermessage-template": "MediaWiki:UserMessage",
        "watchnologin": "Δεν έχετε συνδεθεί.",
        "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": "{{PLURAL:$1|$1 σελίδα|$1 σελίδες}} στη λίστα παρακολούθησης σας, χωρίς να προσμετρούνται οι σελίδες συζήτησης.",
+       "watchlist-details": "{{PLURAL:$1|$1 Ï\83ελίδα|$1 Ï\83ελίδεÏ\82}} Ï\83Ï\84η Î»Î¯Ï\83Ï\84α Ï\80αÏ\81ακολοÏ\8dθηÏ\83ηÏ\82 Ï\83αÏ\82, Ï\87Ï\89Ï\81ίÏ\82 Î½Î± Ï\80Ï\81οÏ\83μεÏ\84Ï\81οÏ\8dνÏ\84αι Î¾ÎµÏ\87Ï\89Ï\81ιÏ\83Ï\84ά Î¿Î¹ Ï\83ελίδεÏ\82 Ï\83Ï\85ζήÏ\84ηÏ\83ηÏ\82.",
        "wlheader-enotif": "Η ειδοποίηση ηλεκτρονικού ταχυδρομείου ενεργοποιήθηκε.",
        "wlheader-showupdated": "Σελίδες που έχουν υποστεί αλλαγές από την τελευταία φορά που τις επισκεφθήκατε εμφανίζονται με '''έντονους χαρακτήρες'''.",
-       "wlnote": "Παρακάτω είναι {{PLURAL:$1|η πιο πρόσφατη αλλαγή|οι '''$1''' πιο πρόσφατες αλλαγές}} κατά τη διάρκεια {{PLURAL:$2|της τελευταίας ώρας|των '''$2''' τελευταίων ωρών}} ως προς την $3, $4.",
-       "wlshowlast": "Εμφάνιση των τελευταίων $1 ωρών $2 ημερών $3",
+       "wlnote": "Παρακάτω είναι {{PLURAL:$1|η πιο πρόσφατη αλλαγή|οι <strong>$1</strong> πιο πρόσφατες αλλαγές}} κατά τη διάρκεια {{PLURAL:$2|της τελευταίας ώρας|των <strong>$2</strong> τελευταίων ωρών}} ως προς τις $3 στις $4.",
+       "wlshowlast": "Εμφάνιση των τελευταίων $1 ωρών $2 ημερών",
        "watchlist-options": "Επιλογές λίστας παρακολούθησης",
        "watching": "Παρακολούθηση...",
        "unwatching": "Μη παρακολούθηση...",
        "enotif_lastvisited": "Δείτε το $1 για όλες τις αλλαγές που έγιναν από την τελευταία σας επίσκεψη.",
        "enotif_lastdiff": "Δείτε το $1 για να εμφανίσετε αυτή την αλλαγή.",
        "enotif_anon_editor": "ανώνυμος χρήστης $1",
-       "enotif_body": "{{GENDER:$WATCHINGUSERNAME|Î\91γαÏ\80ηÏ\84έ|Î\91γαÏ\80ηÏ\84ή}} $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nΠεÏ\81ιγÏ\81αÏ\86ή ÎµÏ\80εξεÏ\81γαÏ\83ίαÏ\82: $PAGESUMMARY $PAGEMINOREDIT\n\nÎ\95Ï\80ικοινÏ\89νία Î¼Îµ Ï\84ο Ï\87Ï\81ήÏ\83Ï\84η Ï\80οÏ\85 Î­ÎºÎ±Î½Îµ Ï\84ην ÎµÏ\80εξεÏ\81γαÏ\83ία:\nηλεκÏ\84Ï\81ονική Î´Î¹ÎµÏ\8dθÏ\85νÏ\83η: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nÎ\94εν Î¸Î± Ï\85Ï\80άÏ\81ξοÏ\85ν Î¬Î»Î»ÎµÏ\82 ÎµÎ¹Î´Î¿Ï\80οιήÏ\83ειÏ\82 Ï\83ε Ï\80εÏ\81ίÏ\80Ï\84Ï\89Ï\83η Ï\80εÏ\81αιÏ\84έÏ\81Ï\89 Î´Ï\81αÏ\83Ï\84ηÏ\81ιÏ\8cÏ\84ηÏ\84αÏ\82 Î±Î½ Î´ÎµÎ½ ÎµÏ\80ιÏ\83κεÏ\86θείÏ\84ε Ï\84η Ï\83ελίδα. Î\9cÏ\80οÏ\81είÏ\84ε ÎµÏ\80ίÏ\83ηÏ\82 Î½Î± ÎµÏ\80αναÏ\86έÏ\81εÏ\84ε Ï\84ην ÎµÏ\80ιλογή ÎµÎ¹Î´Î¿Ï\80οίηÏ\83ηÏ\82 Î³Î¹Î± Ï\8cλεÏ\82 Ï\84ιÏ\82 Ï\80αÏ\81ακολοÏ\85θοÏ\8dμενεÏ\82 Ï\83ελίδεÏ\82 Ï\83Ï\84η Î»Î¯Ï\83Ï\84α Ï\80αÏ\81ακολοÏ\8dθηÏ\83ήÏ\82 Ï\83αÏ\82.\n\n                         Î¦Î¹Î»Î¹ÎºÎ¬,\n                         Tο σύστημα ειδοποίησης του ιστοχώρου {{SITENAME}}\n\n--\nΓια να αλλάξετε τις προτιμήσεις των ειδοποιήσεων ηλεκτρονικού ταχυδρομείου, επισκεφτείτε το\n{{canonicalurl:{{#special:Preferences}}}}\n\nΓια να αλλάξετε τις προτιμήσεις της λίστας παρακολούθησής σας, επισκεφτείτε το\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nΓια να διαγράψετε την σελίδα από την λίστα παρακολούθησής σας, επισκεφτείτε το\n$UNWATCHURL\n\nΠαρατηρήσεις και περισσότερη βοήθεια:\n$HELPPAGE",
+       "enotif_body": "{{GENDER:$WATCHINGUSERNAME|Î\91γαÏ\80ηÏ\84έ|Î\91γαÏ\80ηÏ\84ή}} $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nΠεÏ\81ιγÏ\81αÏ\86ή ÎµÏ\80εξεÏ\81γαÏ\83ίαÏ\82: $PAGESUMMARY $PAGEMINOREDIT\n\nÎ\95Ï\80ικοινÏ\89νία Î¼Îµ Ï\84ο Ï\87Ï\81ήÏ\83Ï\84η Ï\80οÏ\85 Î­ÎºÎ±Î½Îµ Ï\84ην ÎµÏ\80εξεÏ\81γαÏ\83ία:\nδιεÏ\8dθÏ\85νÏ\83η Î·Î»ÎµÎºÏ\84Ï\81ονικήÏ\82 Î±Î»Î»Î·Î»Î¿Î³Ï\81αÏ\86ίαÏ\82: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nÎ\94εν Î¸Î± Ï\85Ï\80άÏ\81ξοÏ\85ν Î¬Î»Î»ÎµÏ\82 ÎµÎ¹Î´Î¿Ï\80οιήÏ\83ειÏ\82 Ï\83ε Ï\80εÏ\81ίÏ\80Ï\84Ï\89Ï\83η Ï\80εÏ\81αιÏ\84έÏ\81Ï\89 Î´Ï\81αÏ\83Ï\84ηÏ\81ιÏ\8cÏ\84ηÏ\84αÏ\82 Î±Î½ Î´ÎµÎ½ ÎµÏ\80ιÏ\83κεÏ\86θείÏ\84ε Ï\84η Ï\83ελίδα Î­Ï\87ονÏ\84αÏ\82 ÎºÎ¬Î½ÎµÎ¹ Ï\83Ï\8dνδεÏ\83η. Î\9cÏ\80οÏ\81είÏ\84ε ÎµÏ\80ίÏ\83ηÏ\82 Î½Î± ÎµÏ\80αναÏ\86έÏ\81εÏ\84ε Ï\84ην ÎµÏ\80ιλογή ÎµÎ¹Î´Î¿Ï\80οίηÏ\83ηÏ\82 Î³Î¹Î± Ï\8cλεÏ\82 Ï\84ιÏ\82 Ï\80αÏ\81ακολοÏ\85θοÏ\8dμενεÏ\82 Ï\83ελίδεÏ\82 Ï\83Ï\84η Î»Î¯Ï\83Ï\84α Ï\80αÏ\81ακολοÏ\8dθηÏ\83ήÏ\82 Ï\83αÏ\82.\n\nΦιλικά, \nÏ\84ο σύστημα ειδοποίησης του ιστοχώρου {{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": "Διαγραφή σελίδας",
        "deletecomment": "Λόγος:",
        "deleteotherreason": "Άλλος/πρόσθετος λόγος:",
        "deletereasonotherlist": "Άλλος λόγος",
-       "deletereason-dropdown": "*Συνηθισμένοι λόγοι διαγραφής\n** Αίτηση του δημιουργού της\n** Παραβίαση των πνευματικών δικαιωμάτων\n** Βανδαλισμός",
+       "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}}. Συνιστούμε μεγάλη προσοχή.",
        "protect-locked-blocked": "Δεν μπορείτε να αλλάξετε επίπεδα προστασίας ενώ είστε σε φραγή.\nΕδώ είναι οι τρέχουσες ρυθμίσεις για τη σελίδα '''$1''':",
        "protect-locked-dblock": "Τα επίπεδα προστασίας δεν μπορούν να αλλαχθούν λόγω ενός ενεργού κλεδώματος της βάσης δεδομένων.\nΕδώ είναι οι τρέχουσες ρυθμίσεις για τη σελίδα '''$1''':",
        "protect-locked-access": "Ο λογαριασμός σας δεν έχει δικαίωμα να αλλάξει τα επίπεδα προστασίας σελίδας.\nΕδώ είναι οι τρέχουσες ρυθμίσεις για τη σελίδα '''$1''':",
-       "protect-cascadeon": "Î\91Ï\85Ï\84ή Î· Ï\83ελίδα ÎµÎ¯Î½Î±Î¹ Ï\80Ï\81οÏ\82 Ï\84ο Ï\80αÏ\81Ï\8cν Ï\80Ï\81οÏ\83Ï\84αÏ\84εÏ\85μένη ÎµÏ\80ειδή Ï\80εÏ\81ιλαμβάνεÏ\84αι {{PLURAL:$1|Ï\83Ï\84ην Î±ÎºÏ\8cλοÏ\85θη Ï\83ελίδα, Î· Î¿Ï\80οία Î­Ï\87ει|Ï\83Ï\84ιÏ\82 Î±ÎºÏ\8cλοÏ\85θεÏ\82 Ï\83ελίδεÏ\82, Î¿Î¹ Î¿Ï\80οίεÏ\82 Î­Ï\87οÏ\85ν}} Ï\84η Î´Î¹Î±Î´Î¿Ï\87ική Ï\80Ï\81οÏ\83Ï\84αÏ\83ία ÎµÎ½ÎµÏ\81γοÏ\80οιημένη. Î\9cÏ\80οÏ\81είÏ\84ε Î½Î± Î±Î»Î»Î¬Î¾ÎµÏ\84ε Ï\84ο ÎµÏ\80ίÏ\80εδο Ï\80Ï\81οÏ\83Ï\84αÏ\83ίαÏ\82 Î±Ï\85Ï\84ήÏ\82 Ï\84ηÏ\82 Ï\83ελίδαÏ\82, Î±Î»Î»Î¬ Î´ÎµÎ½ Î¸Î± ÎµÏ\80ηÏ\81εάÏ\83ει τη διαδοχική προστασία.",
+       "protect-cascadeon": "Î\91Ï\85Ï\84ή Î· Ï\83ελίδα ÎµÎ¯Î½Î±Î¹ Ï\80Ï\81οÏ\82 Ï\84ο Ï\80αÏ\81Ï\8cν Ï\80Ï\81οÏ\83Ï\84αÏ\84εÏ\85μένη ÎµÏ\80ειδή Ï\80εÏ\81ιλαμβάνεÏ\84αι {{PLURAL:$1|Ï\83Ï\84ην Î±ÎºÏ\8cλοÏ\85θη Ï\83ελίδα, Î· Î¿Ï\80οία Î­Ï\87ει|Ï\83Ï\84ιÏ\82 Î±ÎºÏ\8cλοÏ\85θεÏ\82 Ï\83ελίδεÏ\82, Î¿Î¹ Î¿Ï\80οίεÏ\82 Î­Ï\87οÏ\85ν}} Ï\84η Î´Î¹Î±Î´Î¿Ï\87ική Ï\80Ï\81οÏ\83Ï\84αÏ\83ία ÎµÎ½ÎµÏ\81γοÏ\80οιημένη. Î\91λλαγέÏ\82 Ï\83Ï\84ο ÎµÏ\80ίÏ\80εδο Ï\80Ï\81οÏ\83Ï\84αÏ\83ίαÏ\82 Î±Ï\85Ï\84ήÏ\82 Ï\84ηÏ\82 Ï\83ελίδαÏ\82 Î´ÎµÎ½ Î¸Î± ÎµÏ\80ηÏ\81εάÏ\83οÏ\85ν τη διαδοχική προστασία.",
        "protect-default": "Να επιτρέπονται όλοι οι χρήστες",
        "protect-fallback": "Να επιτρέπεται μόνο σε χρήστες με δικαιώματα «$1»",
        "protect-level-autoconfirmed": "Να επιτρέπονται μόνο αυτοεπιβεβαιωμένοι χρήστες",
        "protect-othertime": "Άλλο χρονικό διάστημα:",
        "protect-othertime-op": "άλλος χρόνος",
        "protect-existing-expiry": "Υπάρχουσα λήξη προθεσμίας: $3, $2",
+       "protect-existing-expiry-infinity": "Τρέχον χρόνος λήξης: αόριστος",
        "protect-otherreason": "Άλλος/πρόσθετος λόγος:",
        "protect-otherreason-op": "Άλλος λόγος",
        "protect-dropdown": "*Συνήθεις λόγοι προστασίας\n** Υπερβολικός βανδαλισμός\n** Υπερβολικό spamming\n** Αντιπαραγωγική μάχη επεξεργασιών\n** Σελίδα μεγάλης κίνησης",
        "contributions-title": "Συνεισφορές χρήστη για {{GENDER:$1|τον|την}} $1",
        "mycontris": "Συνεισφορές",
        "contribsub2": "Για {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Ο λογαριασμός χρήστη «$1» δεν είναι εγγεγραμμένος.",
        "nocontribs": "Δεν βρέθηκαν αλλαγές με αυτά τα κριτήρια.",
        "uctop": "(τρέχουσα)",
        "month": "Από το μήνα (και νωρίτερα):",
        "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»",
        "blockipsuccesstext": "{{GENDER:$1|Ο|Η}} [[Special:Contributions/$1|$1]] έχει υποστεί φραγή.<br />\nΔείτε τον [[Special:BlockList|κατάλογο φραγών]] για να εποπτεύσετε τις φραγές.",
        "ipb-blockingself": "Είστε έτοιμος να επιβάλετε φραγή στον ευατό σας! Είστε σίγουροι ότι θέλετε να το κάνετε αυτό;",
        "ipb-confirmhideuser": "Είστε {{GENDER:|έτοιμος|έτοιμη}} να μπλοκάρετε ένα χρήστη με ενεργοποιημένη την \"απόκρυψη χρήστη\" . Αυτό θα καταστείλει το όνομα του χρήστη σε όλες τις λίστες και τις καταχωρήσεις ημερολογίου. Είστε {{GENDER:|σίγουρος|σίγουρη}} ότι θέλετε να το κάνετε αυτό;",
+       "ipb-confirmaction": "Εάν είστε σίγουροι ότι θέλετε πραγματικά να το κάνετε αυτό, παρακαλούμε τσεκάρετε το πεδίο «{{int:ipb-confirm}}» στο κάτω μέρος.",
        "ipb-edit-dropdown": "Επεξεργασία λόγων φραγής",
        "ipb-unblock-addr": "Τερμάτισε τη φραγή του/της $1",
        "ipb-unblock": "Τερμάτισε τη φραγή για ένα όνομα χρήστη ή μια διεύθυνση IP",
        "movepagetalktext": "Η σελίδα συζήτησης που αντιστοιχεί, εάν υπάρχει, θα μετακινηθεί αυτόματα μαζί με αυτήν '''έκτός αν:'''\n*Μετακινείτε τη σελίδα σε διαφορετική περιοχή (namespace),\n*Υπάρχει κάτω από το νέο όνομα μια σελίδα συζήτησης που δεν είναι κενή, ή\n*Έχετε αφαιρέσει τη σημείωση (check) από το κουτάκι που υπάρχει παρακάτω.\n\nΣε αυτές τις περιπτώσεις, θα πρέπει να μετακινήσετε (ή να ενσωματώσετε αν το θέλετε) τη σελίδα με αντιγραφή-και-επικόλληση.",
        "movearticle": "Μετακίνηση σελίδας",
        "moveuserpage-warning": "'''Προσοχή:''' Ετοιμάζεστε να μετακινήσετε μια σελίδα χρήστη. Σημειώστε παρακαλώ ότι θα μετακινηθεί μόνο η σελίδα και ο χρήστης '''δεν''' θα μετονομαστεί.",
+       "movecategorypage-warning": "<strong>Προειδοποίηση:</strong>Πάτε να μετακινήσετε μια σελίδα κατηγορίας. Παρακαλούμε να σημειωθεί ότι μόνο η σελίδα θα μετακινηθεί και τυχόν σελίδες στην παλιά κατηγορία <em>δεν</em> θα επανακατηγοριοποιηθούν στη νέα κατηγορία.",
        "movenologintext": "Για να μετακινήσετε μια σελίδα πρέπει να είστε εγγεγραμένος χρήστης και [[Special:UserLogin|να έχετε συνδεθεί]] στο Wiκi.",
        "movenotallowed": "Δεν έχετε άδεια να μετακινείτε σελίδες.",
        "movenotallowedfile": "Δεν έχετε άδεια να μετακινείτε αρχεία.",
        "cant-move-user-page": "Δεν έχετε άδεια για να μετακινήσετε σελίδες χρηστών (παρά μόνο υποσελίδες).",
        "cant-move-to-user-page": "Δεν έχετε άδεια για να μετακινήσετε μια σελίδα σε σελίδα χρήστη (παρά μόνο σε υποσελίδα χρήστη).",
+       "cant-move-category-page": "Δεν έχετε άδεια να μετακινείτε σελίδες κατηγοριών.",
+       "cant-move-to-category-page": "Δεν έχετε άδεια να μετακινήσετε μια σελίδα σε σελίδα της κατηγορίας.",
        "newtitle": "νέος τίτλος",
        "move-watch": "Παρακολούθησε αυτή τη σελίδα",
        "movepagebtn": "Μετακίνηση σελίδας",
        "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": "Συμπερίληψη όλων των προτύπων",
        "import-interwiki-submit": "Εισαγωγή",
        "import-upload": "Επιφόρτωση δεδομένων XML",
        "import-token-mismatch": "Απώλεια των στοιχείων της συνόδου. Παρακαλούμε προσπαθήστε ξανά.",
        "import-invalid-interwiki": "Δεν είναι δυνατή η εισαγωγή από το καθορισμένο wiki.",
-       "import-error-edit": "Η σελίδα \"$1\" δεν εισήχθηκε επειδή δεν επιτρέπεται να το επεξεργαστείτε.",
-       "import-error-create": "Η σελίδα \"$1\" δεν εισήχθηκε επειδή δεν επιτρέπεται να τη δημιουργήσετε.",
-       "import-error-interwiki": "Η σελίδα \" $1 \" δεν έχει εισαχθεί, επειδή το όνομα της δεσμευμένο για εξωτερική σύνδεση (interwiki).",
-       "import-error-special": "Η σελίδα \"$1\" δεν εισήχθη επειδή ανήκει σε έναν ειδικό χώρο ονομάτων που δεν επιτρέπει σελίδες.",
-       "import-error-invalid": "Η σελίδα \"$1\" δεν εισήχθη επειδή το όνομά της δεν είναι έγκυρο.",
+       "import-error-edit": "Η σελίδα «$1» δεν εισήχθη επειδή δεν σας επιτρέπεται να την επεξεργαστείτε.",
+       "import-error-create": "Η σελίδα «$1» δεν εισήχθη επειδή δεν σας επιτρέπεται να την δημιουργήσετε.",
+       "import-error-interwiki": "Η σελίδα «$1» δεν εισήχθη επειδή το όνομα της είναι δεσμευμένο για εξωτερική σύνδεση (interwiki).",
+       "import-error-special": "Η σελίδα «$1» δεν εισήχθη επειδή ανήκει σε έναν ειδικό ονοματοχώρο που δεν επιτρέπει σελίδες.",
+       "import-error-invalid": "Η σελίδα «$1» δεν εισήχθη επειδή το όνομά με το οποίο επρόκειτο να εισαχθεί δεν είναι έγκυρο σε αυτό το wiki.",
        "import-options-wrong": "Λάθος {{PLURAL:$2|επιλογή|επιλογές}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Η δεδομένη ριζική σελίδα είναι μη έγκυρος τίτλος",
        "importlogpage": "Αρχείο καταγραφής εισαγωγών",
        "importlogpagetext": "Διαχειριστικές εισαγωγές σελίδων με ιστορικό επεξεργασίας από άλλα wiki.",
        "import-logentry-upload": "εισάχθηκε η σελίδα [[$1]] με επιφόρτωση αρχείου",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|αναθεώρηση|αναθεωρήσεις}}",
+       "import-logentry-upload-detail": "{{PLURAL:$1|Εισήχθη $1 αναθεώρηση|Εισήχθησαν $1 αναθεωρήσεις}}",
        "import-logentry-interwiki": "η σελίδα $1 εισάχθηκε μεταξύ wiki",
-       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|αναθεώρηση|αναθεωρήσεις}} από $2",
+       "import-logentry-interwiki-detail": "{{PLURAL:$1|Εισήχθη $1 αναθεώρηση|Εισήχθησαν $1 αναθεωρήσεις}} από $2",
        "javascripttest": "Δοκιμή JavaScript",
        "javascripttest-title": "Εκτελούνται  $1  δοκιμές",
        "javascripttest-pagetext-noframework": "Αυτή η σελίδα είναι δεσμευμένη για την εκτέλεση δοκιμών σε JavaScript.",
        "pageinfo-robot-policy": "Ευρετηρίαση από ρομπότ",
        "pageinfo-robot-index": "Επιτρεπτό",
        "pageinfo-robot-noindex": "Μη επιτρεπτό",
-       "pageinfo-views": "Αριθμός προβολών",
        "pageinfo-watchers": "Αριθμός παρατηρητών σελίδας",
        "pageinfo-few-watchers": "Λιγότεροι από $1 {{PLURAL:$1| ακόλουθος|ακόλουθοι}}",
        "pageinfo-redirects-name": "Αριθμός ανακατευθύνσεων σε αυτήν τη σελίδα",
        "newimages-summary": "Αυτή η ειδική σελίδα δείχνει τα πιο πρόσφατα φορτωμένα αρχεία.",
        "newimages-legend": "Φίλτρο",
        "newimages-label": "Όνομα αρχείου (ή μέρος αυτού):",
+       "newimages-showbots": "Εμφάνιση αρχείων ανεβασμένων από ρομπότ",
        "noimages": "Δεν υπάρχουν εικόνες.",
        "ilsubmit": "Αναζήτηση",
        "bydate": "ημερομηνίας",
        "exif-urgency-low": "Χαμηλή ($1)",
        "exif-urgency-high": "Υψηλή ($1)",
        "exif-urgency-other": "Προτεραιότητα που ορίστηκε από το χρήστη ($1)",
-       "watchlistall2": "όλες",
        "namespacesall": "όλοι",
        "monthsall": "όλα",
        "confirmemail": "Επιβεβαίωση διεύθυνσης e-mail",
        "confirm-watch-top": "Προσθήκη αυτής της σελίδας στη λίστα παρακολούθησης σας;",
        "confirm-unwatch-button": "Εντάξει",
        "confirm-unwatch-top": "Κατάργηση αυτής της σελίδας από τη λίστα παρακολούθησης σας;",
-       "quotation-marks": "\"$1\"",
+       "quotation-marks": "«$1»",
        "imgmultipageprev": "← προηγούμενη σελίδα",
        "imgmultipagenext": "επόμενη σελίδα →",
        "imgmultigo": "Πήγαινε!",
        "watchlistedit-raw-done": "Η λίστα παρακολούθησής σας ενημερώθηκε.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 σελίδα|$1 σελίδες}} προστέθηκαν:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 σελίδα|$1 σελίδες}} αφαιρέθηκαν:",
+       "watchlistedit-clear-explain": "Όλοι οι τίτλοι θα αφαιρεθούν από τη λίστα παρακολούθησής σας",
        "watchlistedit-clear-titles": "Τίτλοι:",
        "watchlistedit-clear-submit": "Καθαρίστε τη λίστα παρακολούθησης (αυτό είναι μόνιμο!)",
+       "watchlistedit-clear-done": "Η λίστα παρακολούθησής σας έχει καθαριστεί.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 τίτλος αφαιρέθηκε|$1 τίτλοι αφαιρέθηκαν}}:",
        "watchlistedit-too-many": "Υπάρχουν υπερβολικά πολλές σελίδες και δεν μπορούν να εμφανιστούν εδώ.",
        "watchlisttools-view": "Προβολή σχετικών αλλαγών",
        "watchlisttools-edit": "Προβολή και επεξεργασία λίστας παρακολούθησης",
        "specialpages-group-other": "Άλλες ειδικές σελίδες",
        "specialpages-group-login": "Σύνδεση / δημιουργία λογαριασμού",
        "specialpages-group-changes": "Πρόσφατες αλλαγές και καταγραφές γεγονότων",
-       "specialpages-group-media": "Î\91ναÏ\86οÏ\81έÏ\82 Ï\80ολÏ\85μέÏ\83Ï\89ν ÎºÎ±Î¹ ÎµÏ\80ιÏ\86Ï\8cÏ\81Ï\84Ï\89Ï\83η αρχείων",
+       "specialpages-group-media": "Î\91ναÏ\86οÏ\81έÏ\82 Ï\80ολÏ\85μέÏ\83Ï\89ν ÎºÎ±Î¹ Î±Î½Î­Î²Î±Ï\83μα αρχείων",
        "specialpages-group-users": "Χρήστες και δικαιώματα",
        "specialpages-group-highuse": "Πολυσύχναστες σελίδες",
        "specialpages-group-pages": "Κατάλογοι σελίδων",
        "logentry-rights-rights": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ιδιότητα μέλους ομάδας για {{GENDER:$3|τον|την}} $3 από $4 σε $5",
        "logentry-rights-rights-legacy": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ιδιότητα μέλους ομάδας {{GENDER:$1|του|της}} $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|προωθήθηκε}} αυτόματα από το $4 στο $5",
+       "logentry-upload-upload": "{{GENDER:$2|Ο|Η}} $1 ανέβασε το $3",
+       "logentry-upload-overwrite": "{{GENDER:$2|Ο|Η}} $1 ανέβασε μια νέα έκδοση του $3",
+       "logentry-upload-revert": "{{GENDER:$2|Ο|Η}} $1 ανέβασε το $3",
        "rightsnone": "(κανένα)",
+       "revdelete-summary": "επεξεργασία σύνοψης",
        "feedback-bugornote": "Εάν είστε έτοιμοι να περιγράψετε ένα τεχνικό πρόβλημα λεπτομερώς παρακαλούμε [$1  κάντε μια αναφορά σφάλματος].\nΔιαφορετικά, μπορείτε να χρησιμοποιήσετε την παρακάτω απλή φόρμα. Το σχόλιό σας θα προστεθεί στη σελίδα \"[$3  $2]\", μαζί με το όνομα χρήστη σας.",
        "feedback-subject": "Θέμα:",
        "feedback-message": "Μήνυμα:",
        "api-error-overwrite": "Αντικατάσταση ενός υπάρχοντος αρχείου δεν επιτρέπεται.",
        "api-error-stashfailed": "Εσωτερικό σφάλμα: ο διακομιστής απέτυχε να αποθηκεύσει το προσωρινό αρχείο.",
        "api-error-publishfailed": "Εσωτερικό σφάλμα: ο διακομιστής απέτυχε να αποθηκεύσει το προσωρινό αρχείο.",
+       "api-error-stasherror": "Παρουσιάστηκε ένα σφάλμα κατά το ανέβασμα του αρχείου στην κρύπτη.",
        "api-error-timeout": "Ο διακομιστής δεν αποκρίθηκε εντός του αναμενόμενου χρόνου.",
        "api-error-unclassified": "Προέκυψε ένα άγνωστο σφάλμα.",
        "api-error-unknown-code": "Άγνωστο σφάλμα: \"$1\"",
        "limitreport-ppvisitednodes": "Καταμέτρηση κόμβων επισκεφθέντων από τον προεπεξεργαστή",
        "limitreport-ppgeneratednodes": "Καταμέτρηση κόμβων παραχθέντων από τον προεπεξεργαστή",
        "limitreport-postexpandincludesize": "Μέγεθος συμπερίληψης πριν την ανάπτυξη",
+       "limitreport-postexpandincludesize-value": "$1 από $2 {{PLURAL:$2|byte|bytes}}",
        "limitreport-templateargumentsize": "Μέγεθος ορισμάτων προτύπων",
+       "limitreport-templateargumentsize-value": "$1 από $2 {{PLURAL:$2|byte|bytes}}",
        "limitreport-expansiondepth": "Μεγαλύτερο βάθος ανάπτυξης",
        "limitreport-expensivefunctioncount": "Πλήθος ακριβών συναρτήσεων συντακτικού αναλυτή",
        "expandtemplates": "Επέκτεινε τα πρότυπα",
        "expand_templates_generate_xml": "Εμφάνιση δέντρου συντακτικής ανάλυσης XML",
        "expand_templates_generate_rawhtml": "Εμφάνιση ανεπεξέργαστης HTML",
        "expand_templates_preview": "Προεπισκόπηση",
+       "pagelanguage": "Επιλογέας γλώσσας σελίδας",
        "pagelang-name": "Σελίδα",
        "pagelang-language": "Γλώσσα",
        "pagelang-use-default": "Χρήση προεπιλεγμένης γλώσσας",
        "pagelang-select-lang": "Επιλογή γλώσσας",
+       "right-pagelang": "Αλλαγή γλώσσας σελίδας",
+       "action-pagelang": "αλλαγή της γλώσσας σελίδας",
        "default-skin-not-found-row-enabled": "* <code>$1</code> /$2 (ενεργοποιημένο)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''απενεργοποιημένο''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''απενεργοποιημένο''')",
+       "mediastatistics": "Στατιστικά πολυμέσων",
+       "mediastatistics-table-mimetype": "Τύποι MIME",
+       "mediastatistics-table-count": "Αριθμός αρχείων",
+       "mediastatistics-header-bitmap": "Εικόνες bitmap",
+       "mediastatistics-header-drawing": "Σχέδια (διανυσματικές εικόνες)",
+       "mediastatistics-header-audio": "Ήχος",
+       "mediastatistics-header-office": "Γραφείο"
 }
index 646727b..d444e2c 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Lévi",
-            "Ottaviano II",
-            "Timichal",
-            "Tèstaquêdra"
-        ]
-    },
-    "sunday": "Dmànga",
-    "monday": "Lonedè",
-    "tuesday": "Martedè",
-    "wednesday": "Merculdè",
-    "thursday": "Giuvidè",
-    "friday": "Venerdè",
-    "saturday": "Sâbet",
-    "january": "Znêr",
-    "february": "Fervêr",
-    "march": "Mêrs",
-    "april": "Avrîl",
-    "june": "Zógn",
-    "july": "Lój",
-    "august": "Agòst",
-    "september": "Setèmber",
-    "october": "Utòber",
-    "november": "Nuvèmber",
-    "december": "Dicèmber",
-    "may": "Mâg",
-    "mytalk": "Al mē discusiòun",
-    "returnto": "Tōrna a $1.",
-    "help": "Per quî rivê da pôch",
-    "history_short": "Stôria",
-    "printableversion": "Versiòun ch'la 's pōl stampêr",
-    "permalink": "Colegamèint fés",
-    "edit": "Mudéfica",
-    "delete": "Scanşèla",
-    "protect": "Prutēz",
-    "specialpage": "Pàgina specêla",
-    "talk": "Discusiòun",
-    "jumptosearch": "Sèirca",
-    "currentevents": "Fât e prugèt ed tót",
-    "currentevents-url": "Project:Prugèt_ed_tót",
-    "portal": "Discóter e quistiunêr",
-    "portal-url": "Project:Bar",
-    "nstab-main": "Artécol",
-    "nstab-template": "Mudèl",
-    "logouttext": "''An té pió coleghê''\nÉt pō cuntinvêr a druvêr {{SITENAME}} sèina nòm, o ét pō coleghêret dôp cun l'istès nòm o cun 'n êter.\nGuêrda che soquânti pàgini a 's prén vèder incòra cme s'ét fós coleghê fîn a che an vîn mia pulî la 'cache' dal tó  'browser'.",
-    "userlogin": "Ingrès / regéstret",
-    "logout": "Và fōra",
-    "userlogout": "Và fōra",
-    "userexists": "Al nòm utèint ch'èt siēlt l'è bèle stê druvê.\nCâten un èter, per piaşèir.",
-    "loginsuccess": "'''Adèsa t'é coleghê in {{SITENAME}} cun al nòm utèint \"$1\".'''",
-    "wrongpassword": "La 'password' che t'é més l'è sbaliêda. Prōva incòra.",
-    "blocked-mailpassword": "Per anticipêr abûş, an n'é mía permès druvêr  'n' êtra 'password' da 'n indirés 'IP' bluchê.",
-    "accountcreated": "T'é fât un nōv 'account'.",
-    "summary": "Mutîv d'al cambiamèint:",
-    "minoredit": "Cól cambiamèint ché l'é un gnînt in tót",
-    "watchthis": "Tîn a drē a cla pàgina chè",
-    "savearticle": "Sêlva la pàgina",
-    "showpreview": "Guêrda préma 'd salvêr",
-    "showdiff": "Guêrda al diferèinsi",
-    "anoneditwarning": "'''Atensiòun''': l'ingrès an n'é mía stê fât. Al tó indirés 'IP' al gnirà scrét int la stòria di cambiamèint ed cla pàgina ché.",
-    "anontalkpagetext": "''Còsta  l'é la pàgina 'd discusiòun 'd un utèint sèinsa nòm  ch' an n'à mìa incòra fât un utèinsa o che in tót al manēri l' al drōva mìa.''\nPer arcgnòsrel l'é dòunca necesâri druvêr al nómer dal só indirés IP. J indirés IP a pōlen èser spartî da pió utèint. Se  t'é un utèint sèinsa nòm e 't pèins che i cumèint preşèint in cla pàgina ché an 't riguêrden mìa [[Special:UserLogin/signup|fà 'na nōva utèinsa]] o [[Special:UserLogin|vîn dèinter cun còla ch' ét gh' ê bèle]] per fêr in môd 'd an èser mìa cunfûş in futûr cun êter utèint sèinsa nòm.",
-    "editing": "Cambiamèint ed $1",
-    "yourdiff": "Diferèinsi",
-    "templatesused": "{{PLURAL:$1|Modèl druvê|Modē druvê}} in cla pàgina ché:",
-    "mypreferences": "preferèinzi",
-    "yourrealname": "Al tō nòm vèira:",
-    "yourlanguage": "Léngua:",
-    "newuserlogpage": "Regéster di nōv utèint",
-    "recentchanges": "Ûltem cambiamèint",
-    "diff": "diferèinsi",
-    "hist": "stôria",
-    "recentchangeslinked": "Mudéfichi coleghêdi",
-    "recentchangeslinked-feed": "Mudéfichi coleghêdi",
-    "recentchangeslinked-toolbox": "Mudéfichi coleghêdi",
-    "upload": "Carghèr un 'file'",
-    "filedesc": "Sûnt",
-    "fileuploadsummary": "Sûnt dal 'file':",
-    "listfiles_size": "Dimensiòun in 'bytes'",
-    "randompage": "'Na pàgina a chêş",
-    "move": "Spôsta",
-    "specialloguserlabel": "Asiòun fâta da:",
-    "allpages": "Tót al pàgini",
-    "watchlist": "I lavōr che guêrd",
-    "watch": "Tîn a drē",
-    "watchthispage": "Tîn a drē  a cla pàgina ché",
-    "excontent": "al contgnû l'ēra: '$1'",
-    "excontentauthor": "al cuntgnû l'ēra: '$1' (e l'ónich avtōr l'ēra '[[Special:Contributions/$2|$2]]')",
-    "confirmdeletetext": "T'é drē scanşlêr 'na pàgina o na figûra, insèm a tóta la só stòria dal 'database'. Per piaşèir cunfērma ch'ét vō scanşlêrla, ch'ét sê j efèt ed la tó decişiòun e ch' la cumbîna cun al léni guîda dal [[{{MediaWiki:Policy-url}}]].",
-    "deletedtext": "\"$1\" l'é stê scanşlê.\nGuèrda $2 per vèder la lésta d'al pàgini ch' în stèdi scanşlèdi da pôch tèimp.",
-    "dellogpage": "Regéster dal scanşladûri",
-    "deletionlog": "regéster dal scanşladûri",
-    "mycontris": "i mē lavōr",
-    "whatlinkshere": "A pûnten ché",
-    "blocklink": "blôca",
-    "contribslink": "còl ch'l'à scrét",
-    "movelogpage": "Regéster di muvimèint",
-    "ilsubmit": "Sērca",
-    "specialpages": "Pàgini specêli"
+       "@metadata": {
+               "authors": [
+                       "Lévi",
+                       "Ottaviano II",
+                       "Timichal",
+                       "Tèstaquêdra",
+                       "Gloria sah"
+               ]
+       },
+       "tog-underline": "Ligàm ipertestuêl:",
+       "tog-hideminor": "Nascònder i cambiamèint piò cìc in di ùltem cambiamèint",
+       "tog-hidepatrolled": "Nascònder i cambiamèint controlê in di ùltem cambiamèint",
+       "tog-newpageshidepatrolled": "Lōga al pàgini virifichêdi da la lésta dal pàgini pió nōvi",
+       "tog-extendwatchlist": "Fà vèder tóti 'l mudéfichi a i tgnû 'd ôc specêl, mìa sōl l'ûltma",
+       "tog-usenewrc": "Unés al mudéfichi per pògin int al j ûltmi mudéfichi e int i tgnû 'd ôc specêl",
+       "tog-numberheadings": "Numerasiòun avtomâtica di tétol ed sesiòun",
+       "tog-showtoolbar": "Fà vèder la bâra di strumèint ed mudéfica",
+       "tog-editondblclick": "Mudéfica dal pàgini cun un dòpi cléch",
+       "tog-editsectiononrightclick": "Mudéfica dal sesiòun cun un cléch a dréta in séma 'l tétol",
+       "tog-watchcreations": "Zûnta al pàgini fâti e i file carghê a i tgnû 'd ôc specêl",
+       "tog-watchdefault": "Zûnta 'l pàgini e i file mudifichê a i tgnû 'd ôc specêl",
+       "tog-watchmoves": "Zûnta 'l pàgini e i file spustê a i tgnû 'd ôc specêl",
+       "tog-watchdeletion": "Zûnta 'l pàgini e i file scanşlê a i tgnû 'd ôc specêl",
+       "tog-watchrollback": "Zûnta a i tgnû 'd ôc specêl al pàgini in dóv'  j ò fât un ritōren a la pàgina 'd préma",
+       "tog-minordefault": "Sègna ógni mudéfica cme céca (sōl fés)",
+       "tog-previewontop": "Fà vèder la pàgina cambiêda sōver la caşèla 'd mudéfica e mìa sòta",
+       "tog-previewonfirst": "Fà vèder la pàgina cambiêda int la préma nudéfica",
+       "tog-oldsig": "Firma ch' a gh' è bèle:",
+       "underline-always": "Sàimper",
+       "underline-never": "Mài",
+       "sunday": "Dmànga",
+       "monday": "Lonedè",
+       "tuesday": "Martedè",
+       "wednesday": "Merculdè",
+       "thursday": "Giuvidè",
+       "friday": "Venerdè",
+       "saturday": "Sâbet",
+       "sun": "Dme.",
+       "mon": "Lun.",
+       "tue": "Mar.",
+       "wed": "Mer.",
+       "thu": "Giu.",
+       "fri": "Ven.",
+       "sat": "Sab.",
+       "january": "Znêr",
+       "february": "Fervêr",
+       "march": "Mêrs",
+       "april": "Avrîl",
+       "june": "Zógn",
+       "july": "Lój",
+       "august": "Agòst",
+       "september": "Setèmber",
+       "october": "Utòber",
+       "november": "Nuvèmber",
+       "december": "Dicèmber",
+       "january-gen": "Znêr",
+       "february-gen": "Fervêr",
+       "march-gen": "Mêrs",
+       "april-gen": "Avrîl",
+       "june-gen": "Zógn",
+       "july-gen": "Lój",
+       "august-gen": "Agòst",
+       "september-gen": "Setèmber",
+       "october-gen": "Utòber",
+       "november-gen": "Novèmber",
+       "december-gen": "Dicèmber",
+       "apr": "Avr",
+       "may": "Mâg",
+       "jun": "Zógn",
+       "jul": "Lój",
+       "aug": "Ago",
+       "sep": "Set",
+       "oct": "Oto",
+       "nov": "Nov",
+       "dec": "Dec",
+       "mytalk": "Al mē discusiòun",
+       "returnto": "Tōrna a $1.",
+       "help": "Ajót",
+       "go": "Va",
+       "searcharticle": "Va",
+       "history": "Stòria dla pàgina",
+       "history_short": "Stôria",
+       "printableversion": "Versiòun ch'la 's pōl stampêr",
+       "permalink": "Colegamèint fés",
+       "print": "Stampèr",
+       "edit": "Mudéfica",
+       "delete": "Scanşèla",
+       "protect": "Prutēz",
+       "specialpage": "Pàgina specêla",
+       "talk": "Discusiòun",
+       "jumptosearch": "Sèirca",
+       "currentevents": "Fât e prugèt ed tót",
+       "currentevents-url": "Project:Prugèt_ed_tót",
+       "portal": "Discóter e quistiunêr",
+       "portal-url": "Project:Bar",
+       "nstab-main": "Artécol",
+       "nstab-template": "Mudèl",
+       "logouttext": "<strong>An té pió coleghê</strong>\n\nGuêrda che soquânti pàgini a 's prén vèder incòra cme s'ét fós coleghê, còst fîn a che an vîn mia pulî la memôria dal tó  navigadōr.",
+       "userlogin": "Ingrès / regéstret",
+       "logout": "Và fōra",
+       "userlogout": "Và fōra",
+       "userexists": "Al nòm utèint ch'èt siēlt l'è bèle stê druvê.\nCâten un èter, per piaşèir.",
+       "loginsuccess": "'''Adèsa t'é coleghê in {{SITENAME}} cun al nòm utèint \"$1\".'''",
+       "wrongpassword": "La password che t'é més l'è şbaliêda. Prōva incòra.",
+       "blocked-mailpassword": "Per anticipêr abûş, an n'é mía permès druvêr  'n' êtra 'password' da 'n indirés 'IP' bluchê.",
+       "accountcreated": "T'é fât un nōv 'account'.",
+       "summary": "Mutîv d'al cambiamèint:",
+       "minoredit": "Cól cambiamèint ché l'é un gnînt in tót",
+       "watchthis": "Tîn a drē a cla pàgina chè",
+       "savearticle": "Sêlva la pàgina",
+       "showpreview": "Guêrda préma 'd salvêr",
+       "showdiff": "Guêrda al diferèinsi",
+       "anoneditwarning": "<strong>Atèinti</strong>: l'ingrès an n'é mía stê fât. S'ét ferê dal mudéfichi al tó indirés IP al srà vést da tót. S'ét <strong>[$1 vîn dèinter]</strong> o <strong>[$2 ét fê 'n' utèinsa nōva]</strong>, al tō mudéfichi srân sgnê al tó nòm, insèm a êter benefési.",
+       "anontalkpagetext": "''Còsta  l'é la pàgina 'd discusiòun 'd un utèint sèinsa nòm  ch' an n'à mìa incòra fât un utèinsa o che in tót al manēri l' al drōva mìa.''\nPer arcgnòsrel l'é dòunca necesâri druvêr al nómer dal só indirés IP. J indirés IP a pōlen èser spartî da pió utèint. Se  t'é un utèint sèinsa nòm e 't pèins che i cumèint preşèint in cla pàgina ché an 't riguêrden mìa [[Special:UserLogin/signup|fà 'na nōva utèinsa]] o [[Special:UserLogin|vîn dèinter cun còla ch' ét gh' ê bèle]] per fêr in môd 'd an èser mìa cunfûş in futûr cun êter utèint sèinsa nòm.",
+       "editing": "Cambiamèint ed $1",
+       "yourdiff": "Diferèinsi",
+       "templatesused": "{{PLURAL:$1|Modèl druvê|Modē druvê}} in cla pàgina ché:",
+       "mypreferences": "preferèinzi",
+       "yourrealname": "Al tō nòm vèira:",
+       "yourlanguage": "Léngua:",
+       "newuserlogpage": "Regéster di nōv utèint",
+       "recentchanges": "Ûltem cambiamèint",
+       "diff": "diferèinsi",
+       "hist": "stôria",
+       "recentchangeslinked": "Mudéfichi coleghêdi",
+       "recentchangeslinked-feed": "Mudéfichi coleghêdi",
+       "recentchangeslinked-toolbox": "Mudéfichi coleghêdi",
+       "upload": "Carghèr un 'file'",
+       "filedesc": "Sûnt",
+       "fileuploadsummary": "Sûnt dal 'file':",
+       "listfiles_size": "Dimensiòun in 'bytes'",
+       "randompage": "'Na pàgina a chêş",
+       "move": "Spôsta",
+       "specialloguserlabel": "Asiòun fâta da:",
+       "allpages": "Tót al pàgini",
+       "watchlist": "I lavōr che guêrd",
+       "watch": "Tîn a drē",
+       "watchthispage": "Tîn a drē  a cla pàgina ché",
+       "excontent": "al contgnû l'ēra: '$1'",
+       "excontentauthor": "al cuntgnû l'ēra: '$1' (e l'ónich avtōr l'ēra '[[Special:Contributions/$2|$2]]')",
+       "confirmdeletetext": "T'é drē scanşlêr 'na pàgina o na figûra, insèm a tóta la só stòria dal 'database'. Per piaşèir cunfērma ch'ét vō scanşlêrla, ch'ét sê j efèt ed la tó decişiòun e ch' la cumbîna cun al léni guîda dal [[{{MediaWiki:Policy-url}}]].",
+       "deletedtext": "\"$1\" l'é stê scanşlê.\nGuèrda $2 per vèder la lésta d'al pàgini ch' în stèdi scanşlèdi da pôch tèimp.",
+       "dellogpage": "Regéster dal scanşladûri",
+       "deletionlog": "regéster dal scanşladûri",
+       "mycontris": "i mē lavōr",
+       "whatlinkshere": "A pûnten ché",
+       "blocklink": "blôca",
+       "contribslink": "còl ch'l'à scrét",
+       "movelogpage": "Regéster di muvimèint",
+       "ilsubmit": "Sērca",
+       "specialpages": "Pàgini specêli"
 }
index 3bd8444..d1569c1 100644 (file)
@@ -1,86 +1,86 @@
 {
-    "@metadata": {
-        "authors": [
-            "Amire80",
-            "Dantman",
-            "Fitoschido",
-            "Hazard-SJ",
-            "Jon Harald Søby",
-            "Lloffiwr",
-            "Reedy",
-            "Shirayuki",
-            "The Evil IP address"
-        ]
-    },
-    "tog-watchcreations": "Add pages I create and files I upload to my watchlist",
-    "tog-watchdefault": "Add pages and files I edit to my watchlist",
-    "tog-watchmoves": "Add pages and files I move to my watchlist",
-    "tog-watchdeletion": "Add pages and files I delete to my watchlist",
-    "category_header": "Pages in category ‘$1’",
-    "category-media-header": "Media in category ‘$1’",
-    "retrievedfrom": "Retrieved from ‘$1’",
-    "page-rss-feed": "‘$1’ RSS feed",
-    "page-atom-feed": "‘$1’ Atom feed",
-    "missing-article": "The database did not find the text of a page that it should have found, named ‘$1’ $2.\n\nThis is usually caused by following an outdated diff or history link to a page that has been deleted.\n\nIf this is not the case, you may have found a bug in the software.\nPlease report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.",
-    "fileappenderrorread": "Could not read ‘$1’ during append.",
-    "fileappenderror": "Could not append ‘$1’ to ‘$2’.",
-    "filecopyerror": "Could not copy file ‘$1’ to ‘$2’.",
-    "filerenameerror": "Could not rename file ‘$1’ to ‘$2.’",
-    "filedeleteerror": "Could not delete file ‘$1’.",
-    "directorycreateerror": "Could not create directory ‘$1’.",
-    "filenotfound": "Could not find file ‘$1’.",
-    "fileexistserror": "Unable to write to file ‘$1’: File exists.",
-    "unexpected": "Unexpected value: ‘$1’=‘$2’.",
-    "cannotdelete": "The page or file ‘$1’ could not be deleted.\nIt may have already been deleted by someone else.",
-    "protectedinterface": "This page provides interface text for the software on this wiki, and is protected to prevent abuse.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
-    "editinginterface": "'''Warning:''' You are editing a page which is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users on this wiki.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
-    "cascadeprotected": "This page has been protected from editing, because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the ‘cascading’ option turned on:\n$2",
-    "prefs-i18n": "Internationalisation",
-    "license": "Licencing:",
-    "license-header": "Licencing",
-    "uncategorizedpages": "Uncategorised pages",
-    "uncategorizedcategories": "Uncategorised categories",
-    "uncategorizedimages": "Uncategorised files",
-    "uncategorizedtemplates": "Uncategorised templates",
-    "sessionfailure": "There seems to be a problem with your login session;\nthis action has been cancelled as a precaution against session hijacking.\nGo back to the previous page, reload that page and then try again.",
-    "blockiptext": "Use the form below to block write access from a specific IP address or username.\nThis should be done only to prevent vandalism, and in accordance with [[{{MediaWiki:Policy-url}}|policy]].\nFill in a specific reason below (for example, citing particular pages that were vandalised).",
-    "ipbreason-dropdown": "*Common block reasons\n** Inserting false information\n** Removing content from pages\n** Spamming links to external sites\n** Inserting nonsense/gibberish into pages\n** Intimidating behaviour/harassment\n** Abusing multiple accounts\n** Unacceptable username",
-    "proxyblockreason": "Your IP address has been blocked because it is an open proxy.\nPlease contact your Internet service provider or technical support of your organisation and inform them of this serious security problem.",
-    "allmessagestext": "This is a list of system messages available in the MediaWiki namespace.\nPlease visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.",
-    "allmessages-filter": "Filter by customisation state:",
-    "import-error-unserialize": "Revision $2 of page \"$1\" could not be unserialised. The revision was reported to use content model $3 serialised as $4.",
-    "metadata-help": "This file contains additional information, probably added from the digital camera or scanner used to create or digitise it.\nIf the file has been modified from its original state, some details may not fully reflect the modified file.",
-    "exif-ycbcrcoefficients": "Colour space transformation matrix coefficients",
-    "exif-colorspace": "Colour space",
-    "exif-datetimedigitized": "Date and time of digitising",
-    "exif-subsectimedigitized": "DateTimeDigitised subseconds",
-    "exif-exposureprogram": "Exposure Programme",
-    "exif-licenseurl": "URL for copyright licence",
-    "exif-morepermissionsurl": "Alternative licencing information",
-    "exif-organisationinimage": "Organisation depicted",
-    "exif-exposureprogram-2": "Normal programme",
-    "exif-exposureprogram-5": "Creative programme (biased toward depth of field)",
-    "exif-exposureprogram-6": "Action programme (biased toward fast shutter speed)",
-    "exif-subjectdistance-value": "$1 metres",
-    "exif-meteringmode-2": "Centre weighted average",
-    "exif-sensingmethod-2": "One-chip colour area sensor",
-    "exif-sensingmethod-3": "Two-chip colour area sensor",
-    "exif-sensingmethod-4": "Three-chip colour area sensor",
-    "exif-sensingmethod-5": "Colour sequential area sensor",
-    "exif-sensingmethod-8": "Colour sequential linear sensor",
-    "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|metre|metres}} above sea level",
-    "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|metre|metres}} below sea level",
-    "exif-gpsspeed-k": "Kilometres per hour",
-    "exif-gpsdestdistance-k": "Kilometres",
-    "exif-ycbcrpositioning-1": "Centred",
-    "exif-iimcategory-lab": "Labour",
-    "confirmemail_invalidated": "Email address confirmation cancelled",
-    "version-license": "MediaWiki Licence",
-    "version-ext-license": "Licence",
-    "version-ext-colheader-license": "Licence",
-    "version-license-title": "Licence for $1",
-    "version-license-not-found": "No detailed licence information was found for this extension.",
-    "version-credits-summary": "We would like to recognise the following persons for their contribution to [[Special:Version|MediaWiki]].",
-    "version-license-info": "MediaWiki 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\nMediaWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details.\n\nYou should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public Licence] along with this programme; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA or [//www.gnu.org/licenses/old-licenses/gpl-2.0.html read it online].",
-    "feedback-error1": "Error: Unrecognised result from API"
+       "@metadata": {
+               "authors": [
+                       "Amire80",
+                       "Dantman",
+                       "Fitoschido",
+                       "Hazard-SJ",
+                       "Jon Harald Søby",
+                       "Lloffiwr",
+                       "Reedy",
+                       "Shirayuki",
+                       "The Evil IP address",
+                       "Vogone"
+               ]
+       },
+       "tog-watchcreations": "Add pages I create and files I upload to my watchlist",
+       "tog-watchdefault": "Add pages and files I edit to my watchlist",
+       "tog-watchmoves": "Add pages and files I move to my watchlist",
+       "tog-watchdeletion": "Add pages and files I delete to my watchlist",
+       "category_header": "Pages in category ‘$1’",
+       "category-media-header": "Media in category ‘$1’",
+       "retrievedfrom": "Retrieved from ‘$1’",
+       "page-rss-feed": "‘$1’ RSS feed",
+       "page-atom-feed": "‘$1’ Atom feed",
+       "missing-article": "The database did not find the text of a page that it should have found, named ‘$1’ $2.\n\nThis is usually caused by following an outdated diff or history link to a page that has been deleted.\n\nIf this is not the case, you may have found a bug in the software.\nPlease report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.",
+       "filecopyerror": "Could not copy file ‘$1’ to ‘$2’.",
+       "filerenameerror": "Could not rename file ‘$1’ to ‘$2.’",
+       "filedeleteerror": "Could not delete file ‘$1’.",
+       "directorycreateerror": "Could not create directory ‘$1’.",
+       "filenotfound": "Could not find file ‘$1’.",
+       "unexpected": "Unexpected value: ‘$1’=‘$2’.",
+       "cannotdelete": "The page or file ‘$1’ could not be deleted.\nIt may have already been deleted by someone else.",
+       "protectedinterface": "This page provides interface text for the software on this wiki, and is protected to prevent abuse.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
+       "editinginterface": "'''Warning:''' You are editing a page which is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users on this wiki.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
+       "cascadeprotected": "This page has been protected from editing, because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the ‘cascading’ option turned on:\n$2",
+       "prefs-i18n": "Internationalisation",
+       "license": "Licencing:",
+       "license-header": "Licencing",
+       "licenses-edit": "Edit licence options",
+       "uncategorizedpages": "Uncategorised pages",
+       "uncategorizedcategories": "Uncategorised categories",
+       "uncategorizedimages": "Uncategorised files",
+       "uncategorizedtemplates": "Uncategorised templates",
+       "sessionfailure": "There seems to be a problem with your login session;\nthis action has been cancelled as a precaution against session hijacking.\nGo back to the previous page, reload that page and then try again.",
+       "blockiptext": "Use the form below to block write access from a specific IP address or username.\nThis should be done only to prevent vandalism, and in accordance with [[{{MediaWiki:Policy-url}}|policy]].\nFill in a specific reason below (for example, citing particular pages that were vandalised).",
+       "ipbreason-dropdown": "*Common block reasons\n** Inserting false information\n** Removing content from pages\n** Spamming links to external sites\n** Inserting nonsense/gibberish into pages\n** Intimidating behaviour/harassment\n** Abusing multiple accounts\n** Unacceptable username",
+       "proxyblockreason": "Your IP address has been blocked because it is an open proxy.\nPlease contact your Internet service provider or technical support of your organisation and inform them of this serious security problem.",
+       "movecategorypage-warning": "<strong>Warning:</strong> You are about to move a category page. Please note that only the page will be moved and any pages in the old category will <em>not</em> be recategorised into the new one.",
+       "allmessagestext": "This is a list of system messages available in the MediaWiki namespace.\nPlease visit [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.",
+       "allmessages-filter": "Filter by customisation state:",
+       "import-error-unserialize": "Revision $2 of page \"$1\" could not be unserialised. The revision was reported to use content model $3 serialised as $4.",
+       "metadata-help": "This file contains additional information, probably added from the digital camera or scanner used to create or digitise it.\nIf the file has been modified from its original state, some details may not fully reflect the modified file.",
+       "exif-ycbcrcoefficients": "Colour space transformation matrix coefficients",
+       "exif-colorspace": "Colour space",
+       "exif-datetimedigitized": "Date and time of digitising",
+       "exif-subsectimedigitized": "DateTimeDigitised subseconds",
+       "exif-exposureprogram": "Exposure Programme",
+       "exif-licenseurl": "URL for copyright licence",
+       "exif-morepermissionsurl": "Alternative licencing information",
+       "exif-organisationinimage": "Organisation depicted",
+       "exif-exposureprogram-2": "Normal programme",
+       "exif-exposureprogram-5": "Creative programme (biased toward depth of field)",
+       "exif-exposureprogram-6": "Action programme (biased toward fast shutter speed)",
+       "exif-subjectdistance-value": "$1 metres",
+       "exif-meteringmode-2": "Centre weighted average",
+       "exif-sensingmethod-2": "One-chip colour area sensor",
+       "exif-sensingmethod-3": "Two-chip colour area sensor",
+       "exif-sensingmethod-4": "Three-chip colour area sensor",
+       "exif-sensingmethod-5": "Colour sequential area sensor",
+       "exif-sensingmethod-8": "Colour sequential linear sensor",
+       "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|metre|metres}} above sea level",
+       "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|metre|metres}} below sea level",
+       "exif-gpsspeed-k": "Kilometres per hour",
+       "exif-gpsdestdistance-k": "Kilometres",
+       "exif-ycbcrpositioning-1": "Centred",
+       "exif-iimcategory-lab": "Labour",
+       "confirmemail_invalidated": "Email address confirmation cancelled",
+       "version-license": "MediaWiki Licence",
+       "version-ext-license": "Licence",
+       "version-ext-colheader-license": "Licence",
+       "version-license-title": "Licence for $1",
+       "version-license-not-found": "No detailed licence information was found for this extension.",
+       "version-credits-summary": "We would like to recognise the following persons for their contribution to [[Special:Version|MediaWiki]].",
+       "version-license-info": "MediaWiki 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\nMediaWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more details.\n\nYou should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public Licence] along with this programme; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA or [//www.gnu.org/licenses/old-licenses/gpl-2.0.html read it online].",
+       "feedback-error1": "Error: Unrecognised result from API"
 }
index e160327..341f626 100644 (file)
@@ -4,8 +4,8 @@
        },
        "sidebar": "\n* navigation\n** mainpage|mainpage-description\n** recentchanges-url|recentchanges\n** randompage-url|randompage\n** helppage|help\n* SEARCH\n* TOOLBOX\n* LANGUAGES",
        "tog-underline": "Link underlining:",
-       "tog-hideminor": "Hide minor edits in recent changes",
-       "tog-hidepatrolled": "Hide patrolled edits in recent changes",
+       "tog-hideminor": "Hide minor edits from recent changes",
+       "tog-hidepatrolled": "Hide patrolled edits from recent changes",
        "tog-newpageshidepatrolled": "Hide patrolled pages from new page list",
        "tog-extendwatchlist": "Expand watchlist to show all changes, not just the most recent",
        "tog-usenewrc": "Group changes by page in recent changes and watchlist",
        "otherlanguages": "In other languages",
        "redirectedfrom": "(Redirected from $1)",
        "redirectpagesub": "Redirect page",
+       "redirectto": "Redirect to:",
        "talkpageheader": "-",
        "lastmodifiedat": "This page was last modified on $1, at $2.",
        "viewcount": "This page has been accessed {{PLURAL:$1|once|$1 times}}.",
        "viewsourcetext": "You can view and copy the source of this page:",
        "viewyourtext": "You can view and copy the source of <strong>your edits</strong> to this page:",
        "protectedinterface": "This page provides interface text for the software on this wiki, and is protected to prevent abuse.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
-       "editinginterface": "<strong>Warning:</strong> You are editing a page that is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users on this wiki.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
+       "editinginterface": "<strong>Warning:</strong> You are editing a page that is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users on this wiki.",
+       "translateinterface": "To add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
        "cascadeprotected": "This page has been protected from editing because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the \"cascading\" option turned on:\n$2",
        "namespaceprotected": "You do not have permission to edit pages in the <strong>$1</strong> namespace.",
        "customcssprotected": "You do not have permission to edit this CSS page because it contains another user's personal settings.",
        "blocked-mailpassword": "Your IP address is blocked from editing, and so is not allowed to use the password recovery function to prevent abuse.",
        "eauthentsent": "A confirmation email has been sent to the specified email address.\nBefore any other email is sent to the account, you will have to follow the instructions in the email, to confirm that the account is actually yours.",
        "throttled-mailpassword": "A password reset email has already been sent, within the last {{PLURAL:$1|hour|$1 hours}}.\nTo prevent abuse, only one password reset email will be sent per {{PLURAL:$1|hour|$1 hours}}.",
-       "loginstart": "",
-       "loginend": "",
-       "loginend-https": "",
-       "signupstart": "{{int:loginstart}}",
-       "signupend": "{{int:loginend}}",
+       "signupstart": "",
+       "signupend": "",
        "signupend-https": "",
        "mailerror": "Error sending mail: $1",
        "acct_creation_throttle_hit": "Visitors to this wiki using your IP address have created {{PLURAL:$1|1 account|$1 accounts}} in the last day, which is the maximum allowed in this time period.\nAs a result, visitors using this IP address cannot create any more accounts at the moment.",
        "createaccount-text": "Someone created an account for your email address on {{SITENAME}} ($4) named \"$2\", with password \"$3\".\nYou should log in and change your password now.\n\nYou may ignore this message, if this account was created in error.",
        "login-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
        "login-abort-generic": "Your login was unsuccessful - Aborted",
+       "login-migrated-generic": "Your account has been migrated, and your username no longer exist on this wiki.",
        "loginlanguagelabel": "Language: $1",
        "loginlanguagelinks": "* {{#language:de}}|de\n* {{#language:en}}|en\n* {{#language:eo}}|eo\n* {{#language:fr}}|fr\n* {{#language:es}}|es\n* {{#language:it}}|it\n* {{#language:nl}}|nl",
        "suspicious-userlogout": "Your request to log out was denied because it looks like it was sent by a broken browser or caching proxy.",
        "passwordreset-emailerror-capture": "A password reset email was generated, which is shown below, but sending it to the {{GENDER:$2|user}} failed: $1",
        "changeemail": "Change email address",
        "changeemail-summary": "",
-       "changeemail-header": "Change account email address",
        "changeemail-text": "Complete this form to change your email address. You will need to enter your password to confirm this change.",
        "changeemail-no-info": "You must be logged in to access this page directly.",
        "changeemail-oldemail": "Current email address:",
        "changeemail-none": "(none)",
        "changeemail-password": "Your {{SITENAME}} password:",
        "changeemail-submit": "Change email",
-       "changeemail-cancel": "Cancel",
        "changeemail-throttled": "You have made too many login attempts.\nPlease wait $1 before trying again.",
        "resettokens": "Reset tokens",
        "resettokens-summary": "",
        "showpreview": "Show preview",
        "showdiff": "Show changes",
        "blankarticle": "<strong>Warning:</strong> The page you are creating is blank.\nIf you click \"{{int:savearticle}}\" again, the page will be created without any content.",
-       "anoneditwarning": "<strong>Warning:</strong> You are not logged in.\nYour IP address will be recorded in this page's edit history.",
+       "anoneditwarning": "<strong>Warning:</strong> You are not logged in. Your IP address will be publicly visible if you make any edits. If you <strong>[$1 log in]</strong> or <strong>[$2 create an account]</strong>, your edits will be attributed to your username, along with other benefits.",
        "anonpreviewwarning": "<em>You are not logged in. Saving will record your IP address in this page's edit history.</em>",
        "missingsummary": "<strong>Reminder:</strong> You have not provided an edit summary.\nIf you click \"{{int:savearticle}}\" again, your edit will be saved without one.",
        "missingcommenttext": "Please enter a comment below.",
        "content-model-text": "plain text",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Pages using duplicate arguments in template calls",
+       "duplicate-args-category-desc": "The page contains template calls that use duplicates of arguments, such as <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "<strong>Warning:</strong> This page contains too many expensive parser function calls.\n\nIt should have less than $2 {{PLURAL:$2|call|calls}}, there {{PLURAL:$1|is now $1 call|are now $1 calls}}.",
        "expensive-parserfunction-category": "Pages with too many expensive parser function calls",
        "post-expand-template-inclusion-warning": "<strong>Warning:</strong> Template include size is too large.\nSome templates will not be included.",
        "search-result-category-size": "{{PLURAL:$1|1 member|$1 members}} ({{PLURAL:$2|1 subcategory|$2 subcategories}}, {{PLURAL:$3|1 file|$3 files}})",
        "search-redirect": "(redirect $1)",
        "search-section": "(section $1)",
+       "search-category": "(category $1)",
        "search-file-match": "(matches file content)",
        "search-suggest": "Did you mean: $1",
        "search-interwiki-caption": "Sister projects",
        "searchall": "all",
        "showingresults": "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} starting with #<strong>$2</strong>.",
        "showingresultsinrange": "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} in range #<strong>$2</strong> to #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 - $2</strong> of <strong>$3</strong>}} for <strong>$4</strong>",
+       "search-showingresults": "{{PLURAL:$4|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 - $2</strong> of <strong>$3</strong>}}",
        "search-nonefound": "There were no results matching the query.",
        "powersearch-legend": "Advanced search",
        "powersearch-ns": "Search in namespaces:",
        "preferences-summary": "",
        "mypreferences": "Preferences",
        "prefs-edits": "Number of edits:",
-       "prefsnologintext2": "Please login to change your preferences.",
+       "prefsnologintext2": "Please log in to change your preferences.",
        "prefs-skin": "Skin",
        "skin-preview": "Preview",
        "datedefault": "No preference",
        "gender-female": "She edits wiki pages",
        "prefs-help-gender": "Setting this preference is optional.\nThe software uses its value to address you and to mention you to others using the appropriate grammatical gender.\nThis information will be public.",
        "email": "Email",
-       "prefs-help-realname": "Real name is optional.\nIf you choose to provide it, this will be used for giving you attribution for your work.",
+       "prefs-help-realname": "Real name is optional.\nIf provided, it may be used to give you attribution for your work.",
        "prefs-help-email": "Email address is optional, but is needed for password resets, should you forget your password.",
        "prefs-help-email-others": "You can also choose to let others contact you by email through a link on your user or talk page.\nYour email address is not revealed when other users contact you.",
        "prefs-help-email-required": "Email address is required.",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Diffs",
        "prefs-help-prefershttps": "This preference will take effect on your next login.",
+       "prefswarning-warning": "You've made changes to your preferences that have not been saved yet.\nIf you leave this page without clicking \"$1\" your preferences will not be updated.",
        "prefs-tabs-navigation-hint": "Tip: You can use the left and right arrow keys to navigate between the tabs in the tabs list.",
        "email-address-validity-valid": "Email address appears valid",
        "email-address-validity-invalid": "Enter a valid email address",
        "statistics-summary": "",
        "statistics-header-pages": "Page statistics",
        "statistics-header-edits": "Edit statistics",
-       "statistics-header-views": "View statistics",
        "statistics-header-users": "User statistics",
        "statistics-header-hooks": "Other statistics",
        "statistics-articles": "Content pages",
        "statistics-files": "Uploaded files",
        "statistics-edits": "Page edits since {{SITENAME}} was set up",
        "statistics-edits-average": "Average edits per page",
-       "statistics-views-total": "Views total",
-       "statistics-views-total-desc": "Views to non-existing pages and special pages are not included",
-       "statistics-views-peredit": "Views per edit",
        "statistics-users": "Registered [[Special:ListUsers|users]]",
        "statistics-users-active": "Active users",
        "statistics-users-active-desc": "Users who have performed an action in the last {{PLURAL:$1|day|$1 days}}",
-       "statistics-mostpopular": "Most viewed pages",
        "statistics-footer": "",
        "pageswithprop": "Pages with a page property",
        "pageswithprop-summary": "",
        "unusedcategories-summary": "",
        "unusedimages": "Unused files",
        "unusedimages-summary": "",
-       "popularpages": "Popular pages",
-       "popularpages-summary": "",
        "wantedcategories": "Wanted categories",
        "wantedcategories-summary": "",
        "wantedpages": "Wanted pages",
        "pager-older-n": "{{PLURAL:$1|older 1|older $1}}",
        "suppress": "Oversight",
        "querypage-disabled": "This special page is disabled for performance reasons.",
+       "apihelp": "API help",
+       "apihelp-summary": "",
+       "apihelp-no-such-module": "Module \"$1\" not found.",
+       "apihelp-link": "[[Special:ApiHelp/$1|$2]]",
        "booksources": "Book sources",
        "booksources-summary": "",
        "booksources-search-legend": "Search for book sources",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Go",
+       "booksources-search": "Search",
        "booksources-text": "Below is a list of links to other sites that sell new and used books, and may also have further information about books you are looking for:",
        "booksources-invalid-isbn": "The given ISBN does not appear to be valid; check for errors copying from the original source.",
        "rfcurl": "//tools.ietf.org/html/rfc$1",
        "mywatchlist": "Watchlist",
        "watchlistfor2": "For $1 $2",
        "nowatchlist": "You have no items on your watchlist.",
-       "watchlistanontext": "Please login to view or edit items on your watchlist.",
+       "watchlistanontext": "Please log in to view or edit items on your watchlist.",
        "watchnologin": "Not logged in",
        "addwatch": "Add to watchlist",
        "addedwatchtext": "The page \"[[:$1]]\" has been added to your [[Special:Watchlist|watchlist]].\nFuture changes to this page and its associated talk page will be listed there.",
        "wlheader-enotif": "Email notification is enabled.",
        "wlheader-showupdated": "Pages that have been changed since you last visited them are shown in <strong>bold</strong>.",
        "wlnote": "Below {{PLURAL:$1|is the last change|are the last <strong>$1</strong> changes}} in the last {{PLURAL:$2|hour|<strong>$2</strong> hours}}, as of $3, $4.",
-       "wlshowlast": "Show last $1 hours $2 days $3",
+       "wlshowlast": "Show last $1 hours $2 days",
        "watchlist-options": "Watchlist options",
        "watching": "Watching...",
        "unwatching": "Unwatching...",
        "protect-othertime": "Other time:",
        "protect-othertime-op": "other time",
        "protect-existing-expiry": "Existing expiry time: $3, $2",
+       "protect-existing-expiry-infinity": "Existing expiry time: infinite",
        "protect-otherreason": "Other/additional reason:",
        "protect-otherreason-op": "Other reason",
        "protect-dropdown": "*Common protection reasons\n** Excessive vandalism\n** Excessive spamming\n** Counter-productive edit warring\n** High traffic page",
        "unblocked": "[[User:$1|$1]] has been unblocked.",
        "unblocked-range": "$1 has been unblocked.",
        "unblocked-id": "Block $1 has been removed.",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] has been unblocked.",
        "blocklist": "Blocked users",
        "ipblocklist": "Blocked users",
        "ipblocklist-legend": "Find a blocked user",
        "accesskey-pt-mycontris": "y",
        "accesskey-pt-login": "o",
        "accesskey-pt-logout": "",
+       "accesskey-pt-createaccount": "",
        "accesskey-ca-talk": "t",
        "accesskey-ca-edit": "e",
        "accesskey-ca-addsection": "+",
        "accesskey-feed-atom": "",
        "accesskey-t-contributions": "",
        "accesskey-t-emailuser": "",
+       "accesskey-t-info": "",
        "accesskey-t-permalink": "",
        "accesskey-t-print": "p",
        "accesskey-t-upload": "u",
        "tooltip-pt-mycontris": "A list of your contributions",
        "tooltip-pt-login": "You are encouraged to log in; however, it is not mandatory",
        "tooltip-pt-logout": "Log out",
+       "tooltip-pt-createaccount": "You are encouraged to create an account and log in; however, it is not mandatory",
        "tooltip-ca-talk": "Discussion about the content page",
        "tooltip-ca-edit": "You can edit this page. Please use the preview button before saving",
        "tooltip-ca-addsection": "Start a new section",
        "tooltip-feed-atom": "Atom feed for this page",
        "tooltip-t-contributions": "A list of contributions of this user",
        "tooltip-t-emailuser": "Send an email to this user",
+       "tooltip-t-info": "More information about this page",
        "tooltip-t-upload": "Upload files",
        "tooltip-t-specialpages": "A list of all special pages",
        "tooltip-t-print": "Printable version of this page",
        "pageinfo-robot-policy": "Indexing by robots",
        "pageinfo-robot-index": "Allowed",
        "pageinfo-robot-noindex": "Disallowed",
-       "pageinfo-views": "Number of views",
        "pageinfo-watchers": "Number of page watchers",
        "pageinfo-few-watchers": "Fewer than $1 {{PLURAL:$1|watcher|watchers}}",
        "pageinfo-redirects-name": "Number of redirects to this page",
        "exif-urgency-low": "Low ($1)",
        "exif-urgency-high": "High ($1)",
        "exif-urgency-other": "User-defined priority ($1)",
-       "watchlistall2": "all",
        "namespacesall": "all",
        "monthsall": "all",
        "confirmemail": "Confirm email address",
        "unknown_extension_tag": "Unknown extension tag \"$1\"",
        "duplicate-defaultsort": "<strong>Warning:</strong> Default sort key \"$2\" overrides earlier default sort key \"$1\".",
        "duplicate-displaytitle": "<strong>Warning:</strong> Display title \"$2\" overrides earlier display title \"$1\".",
+       "invalid-indicator-name": "<strong>Error:</strong> Page status indicators' <code>name</code> attribute must not be empty.",
        "version": "Version",
        "version-summary": "",
        "version-extensions": "Installed extensions",
        "revdelete-uname-unhid": "username unhidden",
        "revdelete-restricted": "applied restrictions to administrators",
        "revdelete-unrestricted": "removed restrictions for administrators",
+       "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",
        "logentry-move-move_redir": "$1 {{GENDER:$2|moved}} page $3 to $4 over redirect",
        "api-error-stashfailed": "Internal error: Server failed to store temporary file.",
        "api-error-publishfailed": "Internal error: Server failed to publish temporary file.",
        "api-error-stasherror": "There was an error while uploading the file to stash.",
+       "api-error-stashedfilenotfound": "The stashed file was not found when attempting to upload it from the stash.",
+       "api-error-stashpathinvalid": "The path at which the stashed file should have been found was invalid.",
+       "api-error-stashfilestorage": "There was an error while storing the file in the stash.",
+       "api-error-stashzerolength": "The server could not stash the file, because it had zero length.",
+       "api-error-stashnotloggedin": "You must be logged in to save files in the upload stash.",
+       "api-error-stashwrongowner": "The file you were attempting to access in the stash does not belong to you.",
+       "api-error-stashnosuchfilekey": "The file key you were attempting to access in the stash does not exist.",
        "api-error-timeout": "The server did not respond within the expected time.",
        "api-error-unclassified": "An unknown error occurred.",
        "api-error-unknown-code": "Unknown error: \"$1\".",
        "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 (<code>$wgDefaultSkin</code>), <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:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code>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>$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 (<code>$wgDefaultSkin</code>), <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:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code>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": "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:* 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-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:* 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''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabled''')",
+       "mediastatistics": "Media statistics",
+       "mediastatistics-summary": "Statistics about uploaded file types. This only includes the most recent version of a file. Old or deleted versions of files are excluded.",
+       "mediastatistics-nfiles": "$1 ($2%)",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME type",
+       "mediastatistics-table-extensions": "Possible extensions",
+       "mediastatistics-table-count": "Number of files",
+       "mediastatistics-table-totalbytes": "Combined size",
+       "mediastatistics-header-unknown": "Unknown",
+       "mediastatistics-header-bitmap": "Bitmap images",
+       "mediastatistics-header-drawing": "Drawings (vector images)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Videos",
+       "mediastatistics-header-multimedia": "Rich media",
+       "mediastatistics-header-office": "Office",
+       "mediastatistics-header-text": "Textual",
+       "mediastatistics-header-executable": "Executables",
+       "mediastatistics-header-archive": "Compressed formats",
+       "json-warn-trailing-comma": "$1 trailing {{PLURAL:$1|comma was|commas were}} removed from JSON",
+       "json-error-unknown": "There was a problem with the JSON. Error: $1",
+       "json-error-depth": "The maximum stack depth has been exceeded",
+       "json-error-state-mismatch": "Invalid or malformed JSON",
+       "json-error-ctrl-char": "Control character error, possibly incorrectly encoded",
+       "json-error-syntax": "Syntax error",
+       "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"
 }
index 303a4c6..458a3ea 100644 (file)
        "otherlanguages": "Aliaj lingvoj",
        "redirectedfrom": "(Alidirektita el $1)",
        "redirectpagesub": "Alidirektilo",
+       "redirectto": "Alidirektas al:",
        "lastmodifiedat": "Ĉi tiu paĝo estis lastafoje redaktita je $2, $1.",
        "viewcount": "Montrita {{PLURAL:$1|unufoje|$1 fojojn}}.",
        "protectedpage": "Protektita paĝo",
        "hidetoc": "kaŝi",
        "collapsible-collapse": "kaŝi",
        "collapsible-expand": "Montri",
+       "confirmable-confirm": "Ĉu {{GENDER:$1|vi}} certas?",
        "confirmable-yes": "Jes",
        "confirmable-no": "Ne",
        "thisisdeleted": "Vidi aŭ restarigi $1?",
        "viewsourcetext": "Vi povas rigardi kaj kopii la fonton de la paĝo:",
        "viewyourtext": "Vi povas vidi kaj kopii la fonton de '''viaj redaktoj''' al ĉi tiu paĝo:",
        "protectedinterface": "Ĉi tiu paĝo provizas interfacan tekston por la programaro, kaj estas ŝlosita por malebligi misuzon.\nPor aldoni aŭ ŝanĝi tradukojn por ĉiuj vikioj, bonvolu uzi [//translatewiki.net/ translatewiki.net], la projekton por provizi tradukojn por MediaWiki.",
-       "editinginterface": "'''Atentu:''' Vi redaktas paĝon, kiu provizas interfacan tekston por la programaro.\nŜanĝoj de ĉi tiu teksto ŝanĝos aspekton de la interfaco por aliaj uzantoj de ĉi tiu vikio.\nPor aldoni aŭ ŝanĝi tradukojn por ĉiuj vikioj, bonvolu uzi [//translatewiki.net/ translatewiki.net], la projekton por provizi tradukojn por MediaWiki.",
+       "editinginterface": "<strong>Atentu:</strong> Vi redaktas paĝon, kiu provizas interfacan tekston por la programaro.\nŜanĝoj de ĉi tiu teksto ŝanĝos aspekton de la interfaco por aliaj uzantoj de ĉi tiu vikio.\nPor aldoni aŭ ŝanĝi tradukojn por ĉiuj vikioj, bonvolu uzi [//translatewiki.net/ translatewiki.net], la projekton por provizi tradukojn por MediaWiki.",
        "cascadeprotected": "Ĉi tiu paĝo estas protektita kontraŭ redaktado, ĉar ĝi estas inkludita en la {{PLURAL:$1|sekvan paĝon, kiu|sekvajn paĝojn, kiuj}} estas {{PLURAL:$1|protektata|protektataj}} kun la \"kaskada\" opcio ŝaltita sur:\n$2",
        "namespaceprotected": "Vi ne rajtas redakti paĝojn en la '''$1''' nomspaco.",
        "customcssprotected": "Vi ne rajtas redakti ĉi tiun CSS-paĝon, ĉar ĝi enhavas personajn alĝustigojn de alia uzanto.",
        "invalidtitle-knownnamespace": "Nevalida titolo kun nomspaco \"$2\" kaj teksto \"$3\"",
        "invalidtitle-unknownnamespace": "Nevalida titolo kun nekonata nomspaca numero $1 kaj teksto \"$2\"",
        "exception-nologin": "Ne ensalutinta",
-       "exception-nologin-text": "Bonvolu [[Special:Userlogin|ensaluti]] por atingi ĉi tiun paĝon aŭ agon.",
+       "exception-nologin-text": "Bonvolu ensaluti por atingi ĉi tiun paĝon aŭ agon.",
        "exception-nologin-text-manual": "Vi devas $1, por povi aliri al ĉi tiu paĝo aŭ ago.",
        "virus-badscanner": "Malbona konfiguro: nekonata virusa skanilo: ''$1''",
        "virus-scanfailed": "skano malsukcesis (kun kodo $1)",
        "passwordreset-emailsent-capture": "Retpoŝto kun renovigita pasvorto estis sendita, kiu estas montrata malsupre.",
        "passwordreset-emailerror-capture": "Retpoŝto kun renovigita pasvorto estis generita, montrata sube, sed sendado al la {{GENDER:$2|uzanto}} malsukcesis: $1",
        "changeemail": "Ŝanĝi retpoŝtadreson",
-       "changeemail-header": "Ŝanĝi retpoŝtadreso por konto",
        "changeemail-text": "Plenumu ĉi tiu formularon por ŝanĝi vian retpoŝtadreson. Vi devas enigi vian pasvorton por konfirmi ĉi tiun ŝanĝon.",
        "changeemail-no-info": "Vi devas ensaluti por atingi ĉi tiun paĝon rekte.",
        "changeemail-oldemail": "Aktuala retpoŝtadreso:",
        "changeemail-none": "(nenio)",
        "changeemail-password": "Via {{SITENAME}}-ensalutado:",
        "changeemail-submit": "Ŝanĝi retpoŝtadreson",
-       "changeemail-cancel": "Nuligi",
        "changeemail-throttled": "Vi tro ofte provis alsaluti.\nBonvolu atendi $1, antaŭ ol vi provos denove.",
        "resettokens": "Renovigi ŝlosilojn",
        "resettokens-text": "Vi povas rekomencigi ĵetonojn, kiuj ebligas aliron al certaj privataj datumoj, kiuj estas ligataj kun via konto de uzanto ĉi tie.\n\nVi faru tion, se vi akcidente kunhavigis ilin kun iu aŭ se via konto estis malkonfidencigita.",
        "preview": "Antaŭrigardo",
        "showpreview": "Antaŭrigardo",
        "showdiff": "Montri ŝanĝojn",
-       "anoneditwarning": "'''Averto:''' Vi ne estas ensalutinta.\nVia IP-adreso enregistriĝos en la redakta historio de tiu ĉi paĝo.",
+       "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.",
        "missingcommenttext": "Bonvolu entajpi komenton malsupre.",
        "logdelete-selected": "{{PLURAL:$1|Selektata protokola evento|Selektataj protokolaj eventoj}}:",
        "revdelete-text-text": "Forigitaj versioj ankoraŭ restas en la versia historio, sed partoj de ilia enhavo ne estas alireblaj por la publiko.",
        "revdelete-text-file": "Forigitaj dosieraj versioj ankoraŭ restas en la dosiera historio, sed partoj de ilia enhavo ne estas alireblaj por la publiko.",
-       "revdelete-text-others": "Aliaj administrantoj sur {{SITENAME}} ankoraŭ havas aliron al la kaŝita enhavo kaj povas malforigi ĝin denove per ĉi tiu sama interfaco, tiel longe kiel aldonaj restriktoj ne estas difinitaj.",
+       "revdelete-text-others": "Aliaj administrantoj ankoraŭ havas aliron al la kaŝita enhavo kaj povas malforigi ĝin, tiel longe kiel aldonaj restriktoj ne estas difinitaj.",
        "revdelete-confirm": "Bonvolu konfirmi ke vi intencias fari ĉi tion, ke vi komprenas la konsekvencojn kaj ke vi faras ĉi tion laŭ [[{{MediaWiki:Policy-url}}|la regularo]].",
        "revdelete-suppress-text": "Subpremo '''nur''' estu uzata por la jenaj kazoj:\n* Ebla kalumnia informo\n* Netaŭga persona informo\n*: ''hejmaj adresoj kaj telefonnumeroj, ŝtataj identnumeroj, ktp.''",
        "revdelete-legend": "Fari videblecajn limigojn",
        "mergehistory-same-destination": "Fontaj kaj destinaj paĝoj ne povas esti la samon",
        "mergehistory-reason": "Kialo:",
        "mergelog": "Protokolo de kunigoj",
-       "pagemerge-logentry": "kunigis [[$1]] en [[$2]] (versioj ĝis $3)",
        "revertmerge": "Malkunigi",
        "mergelogpagetext": "Jen listo de la plej lastatempaj kunigoj de unu paĝhistorio en alian.",
        "history-title": "Revizio-historio de \"$1\"",
        "search-result-category-size": "{{PLURAL:$1|1 membro|$1 membroj}} ({{PLURAL:$2|1 subkategorio|$2 subkategorioj}}, {{PLURAL:$3|1 dosiero|$3 dosieroj}})",
        "search-redirect": "(alidirektilo $1)",
        "search-section": "(sekcio $1)",
+       "search-file-match": "(kongruas kun dosiera enhavo)",
        "search-suggest": "Ĉu vi intenciis: $1",
        "search-interwiki-caption": "Kunprojektoj",
        "search-interwiki-default": "Rezultoj de $1:",
        "searchall": "ĉiuj",
        "showingresults": "Montras {{PLURAL:$1|'''1''' trovitan|'''$1''' trovitajn}} ekde la #'''$2'''-a.",
        "showingresultsinrange": "Malsupre montriĝas {{PLURAL:$1|<strong>1</strong> rezulto|<strong>$1</strong> rezultoj}} en la intervalo #<strong>$2</strong> ĝis #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Rezulto '''$1''' el '''$3'''|Rezultoj '''$1 – $2''' el '''$3'''}} por '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Rezulto <strong>$1</strong> el <strong>$3</strong>|Rezultoj <strong>$1 - $2</strong> el <strong>$3</strong>}}",
        "search-nonefound": "La serĉomendo rezultis kun neniuj trafoj.",
        "powersearch-legend": "Progresa serĉo",
        "powersearch-ns": "Serĉi en nomspacoj:",
        "preferences": "Preferoj",
        "mypreferences": "Preferoj",
        "prefs-edits": "Nombro de redaktoj:",
-       "prefsnologintext2": "Bonvolu $1, por ŝanĝi viajn preferojn.",
+       "prefsnologintext2": "Bonvolu ensaluti, por ŝanĝi viajn preferojn.",
        "prefs-skin": "Etoso",
        "skin-preview": "Antaŭrigardo",
        "datedefault": "Nenia prefero",
        "recentchanges-label-plusminus": "La paĝa grandeco ŝanĝiĝis je ĉi tiu nombro de bajtoj",
        "recentchanges-legend-heading": "'''Klarigo:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vidu ankaŭ [[Special:NewPages|liston de novaj paĝoj]])",
-       "rcnotefrom": "Malsupre estas ŝanĝoj ekde <strong>$2</strong> ({{PLURAL:$1|lasta|lastaj}} <strong>$1</strong>).",
+       "rcnotefrom": "Malsupre estas la {{PLURAL:$5|ŝanĝo|ŝanĝoj}} ekde <strong>$3, $4</strong> (montrante ĝis <strong>$1</strong>).",
        "rclistfrom": "Montri novajn ŝanĝojn ekde \"$3 $2\"",
        "rcshowhideminor": "$1 redaktetojn",
        "rcshowhideminor-show": "Montri",
        "license": "Permesiloj:",
        "license-header": "Permesiloj:",
        "nolicense": "Neniu elektita",
+       "licenses-edit": "Modifi opciojn de permesilo",
        "license-nopreview": "(Antaŭvido ne montrebla)",
-       "upload_source_url": " (valida, publike atingebla URL-o)",
-       "upload_source_file": " (dosiero en via komputilo)",
+       "upload_source_url": " (via elektita dosiero de valida, publike atingebla URL-o)",
+       "upload_source_file": "(dosiero elektita de via komputilo)",
        "listfiles-delete": "forigi",
        "listfiles-summary": "Ĉi tiu speciala paĝo montras ĉiujn alŝutitajn dosierojn.\nKiam oni filtras ĝin laŭ uzanto, nur la aktuala versio de la dosiero estos montrita.",
        "listfiles_search_for": "Serĉi dosieran nomon:",
        "randomincategory": "Hazarda paĝo en kategorio",
        "randomincategory-invalidcategory": "\"$1\" ne estas valida kategoria nomo.",
        "randomincategory-nopages": "Ne estas paĝoj en la kategorio [[:Category:$1|$1]].",
+       "randomincategory-category": "Kategorio:",
+       "randomincategory-legend": "Hazarda paĝo en kategorio",
        "randomredirect": "Hazarda alidirekto",
        "randomredirect-nopages": "Estas neniuj alidirektiloj en la nomspaco \"$1\".",
        "statistics": "Statistiko",
        "statistics-header-pages": "Paĝaj statistikoj",
        "statistics-header-edits": "Redaktaj statistikoj",
-       "statistics-header-views": "Vidi statistikojn",
        "statistics-header-users": "Pri la uzantaro",
        "statistics-header-hooks": "Aliaj statistikoj",
        "statistics-articles": "Enhavaj paĝoj",
        "statistics-files": "Alŝutitaj dosieroj",
        "statistics-edits": "Paĝaj redaktoj ekde {{SITENAME}} estis starigita",
        "statistics-edits-average": "Averaĝa kvanto de redaktoj je paĝo",
-       "statistics-views-total": "Vidoj entutaj",
-       "statistics-views-total-desc": "Ne inkluzivante vidojn al ne-ekzistantaj paĝoj kaj specialaj paĝoj",
-       "statistics-views-peredit": "Po rigardoj por redakto",
        "statistics-users": "Registritaj [[Special:ListUsers|uzantoj]]",
        "statistics-users-active": "Aktivaj uzantoj",
        "statistics-users-active-desc": "Uzantoj kiuj faris agon en la {{PLURAL:$1|lasta tago|lastaj $1 tagoj}}",
-       "statistics-mostpopular": "Plej ofte montrataj paĝoj",
        "pageswithprop": "Paĝoj kun paĝa atributo",
        "pageswithprop-legend": "Paĝoj kun paĝa atributo",
        "pageswithprop-text": "Ĉi tiu paĝo listigas paĝoj kiu uzas iajn paĝajn ecojn.",
        "uncategorizedtemplates": "Neenkategoriigitaj ŝablonoj",
        "unusedcategories": "Neuzitaj kategorioj",
        "unusedimages": "Neuzataj bildoj",
-       "popularpages": "Plej vizitataj paĝoj",
        "wantedcategories": "Dezirataj kategorioj",
        "wantedpages": "Dezirataj paĝoj",
        "wantedpages-badtitle": "Malvalida titolo en rezulta aro: $1",
        "pager-older-n": "{{PLURAL:$1|pli malnova 1|pli malnovaj $1}}",
        "suppress": "Superrigardo",
        "querypage-disabled": "Tiu ĉi speciala paĝo estas malfunkciigita pro rendimentaj kialoj.",
+       "apihelp-no-such-module": "Modulo \"$1\" ne estis trovita.",
        "booksources": "Libroservoj",
        "booksources-search-legend": "Serĉi librofontojn",
-       "booksources-go": "Ek",
+       "booksources-search": "Serĉi",
        "booksources-text": "Jen ligilaro al aliaj TTT-ejoj, kiuj vendas librojn,\nkaj/aŭ informumos pri la libro ligita.\nLa {{SITENAME}} ne estas komerce ligita al tiuj vendejoj, kaj la listo ne estu\nkomprenata kiel rekomendo aŭ reklamo.",
        "booksources-invalid-isbn": "La donata ISBN verŝajne estas nevalida; kontrolu pri erara kopiado el la originala fonto.",
        "specialloguserlabel": "Faranto:",
        "wlheader-enotif": "Retpoŝta sciigo estas ŝalta.",
        "wlheader-showupdated": "Paĝoj montriĝis per '''dikaj literoj''' kiuj estis ŝanĝitaj ekde vi laste vizitis.",
        "wlnote": "Jen la {{PLURAL:$1|lasta redakto|lastaj <strong>$1</strong> redaktoj}} dum la {{PLURAL:$2|lasta horo|lastaj <strong>$2</strong> horoj}}, ekde $3, $4.",
-       "wlshowlast": "Montri el lastaj $1 horoj $2 tagoj $3",
+       "wlshowlast": "Montri el lastaj $1 horoj $2 tagoj",
        "watchlist-options": "Opcioj por atentaro",
        "watching": "Aldonante al la atentaro...",
        "unwatching": "Malatentante...",
        "exbeforeblank": "antaŭ malplenigo enhavis: '$1'",
        "delete-confirm": "Forigi \"$1\"",
        "delete-legend": "Forigi",
-       "historywarning": "'''Averto:''' La forigota paĝo havas historion kun pli-malpli $1 {{PLURAL:$1|revizio|revizioj}}:",
+       "historywarning": "<strong>Averto:</strong> La forigota paĝo havas historion kun $1 {{PLURAL:$1|revizio|revizioj}}:",
        "confirmdeletetext": "Vi forigos la artikolon aŭ dosieron kaj forviŝos ĝian tutan historion el la datumaro.<br /> Bonvolu konfirmi, ke vi vere intencas tion, kaj ke vi komprenas la sekvojn, kaj ke vi ja sekvas la [[{{MediaWiki:Policy-url}}|regulojn pri forigado]].",
        "actioncomplete": "Ago farita",
        "actionfailed": "Ago malsukcesis",
        "delete-edit-reasonlist": "Redakti kialojn de forigo",
        "delete-toobig": "Ĉi tiu paĝo havas grandan redakto-historion, pli ol $1 {{PLURAL:$1|version|versiojn}}. Forigo de ĉi tiaj paĝoj estis limigitaj por preventi akcidentan disrompigon de {{SITENAME}}.",
        "delete-warning-toobig": "Ĉi tiu paĝo havas grandan redakto-historion, pli ol $1 {{PLURAL:$1|version|versiojn}}. Forigo de ĝi povas disrompigi operacion de {{SITENAME}}; forigu singarde.",
+       "deleteprotected": "Vi ne povas forigi ĉi tiun paĝon ĉar ĝi estis protektita.",
        "deleting-backlinks-warning": "'''Atentigo:'''\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|Aliaj paĝoj]] ligas al aŭ transkludas tiun ĉi forigotan paĝon.",
        "rollback": "Restarigi antaŭan redakton",
        "rollback_short": "Malfari",
        "autoblockid": "Aŭtomata forbaro #$1",
        "block": "Forbari uzanton",
        "unblock": "Malforbari uzanton",
-       "blockip": "Forbari uzanton/IP-adreson",
+       "blockip": "Forbari {{GENDER:$1|uzanton}}",
        "blockip-legend": "Forbari uzanton",
        "blockiptext": "Per jena formularo vi povas forpreni de ajna nomo aŭ IP-adreso la rajton skribi en la vikio. Oni faru tion ''nur'' por eviti vandalismon, kaj sekvante la [[{{MediaWiki:Policy-url}}|regulojn pri forbarado]]. Klarigu la precizan kialon malsupre (ekzemple, citu paĝojn, kiuj estis vandaligitaj).",
        "ipaddressorusername": "IP-adreso aŭ salutnomo:",
        "ipb-change-block": "Reforbari la uzanton kun ĉi tiuj preferoj",
        "ipb-confirm": "Konfirmi forbaron",
        "badipaddress": "Neniu uzanto, aŭ la IP-adreso estas misformita.",
-       "blockipsuccesssub": "Oni sukcese forbaris la adreson/nomon.",
+       "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-unblock-addr": "Restarigi $1",
        "ipb-unblock": "Malforbari salutnomon aŭ IP-adreson",
        "ipb-blocklist": "Vidi ekzistantajn forbarojn",
-       "ipb-blocklist-contribs": "Kontribuoj de $1",
+       "ipb-blocklist-contribs": "Kontribuoj de {{GENDER:$1|$1}}",
        "unblockip": "Malforbari IP-adreson/nomon",
        "unblockiptext": "Per la jena formulo vi povas repovigi al iu\nforbarita IP-adreso/nomo la povon enskribi en la vikio.",
        "ipusubmit": "Forigi ĉi tiun forbaron",
        "unblocked": "[[User:$1|$1]] estas restarigita.",
        "unblocked-range": "$1 estis malforbarita",
        "unblocked-id": "Forbaro $1 estas forigita.",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] estis malforbarita.",
        "blocklist": "Forbaritaj uzantoj",
        "ipblocklist": "Forbaritaj uzantoj",
        "ipblocklist-legend": "Trovi forbaritan uzanton.",
        "movepagetalktext": "La movo aŭtomate kunportos la diskuto-paĝon, se tia ekzistas, '''krom se:'''\n*Vi movas la paĝon tra nomspacoj (ekz de ''Nomo'' je ''User:Nomo''),\n*Ne malplena diskuto-paĝo jam ekzistas je la nova nomo, aŭ\n*Vi malelektas la suban ŝaltilon.\n\nTiujokaze, vi nepre permane kunigu la diskuto-paĝojn se vi tion deziras.",
        "movearticle": "Alinomigi paĝon",
        "moveuserpage-warning": "'''Averto:''' Vi preskaŭ alinomigas paĝon de uzanto. Bonvolu noti ke nur la paĝo estos alinomigita kaj la uzanto mem ''ne'' estos alinomigita.",
+       "movecategorypage-warning": "<strong>Averto:</strong> Vi baldaŭ movos kategorian paĝon. Bonvolu noti ke, nur la paĝo estos movita, kaj la paĝoj en la malnova kategorio <em>ne</em> transiros en la novan kategorion.",
        "movenologintext": "Vi nepre estu registrita uzanto kaj [[Special:UserLogin|ensalutu]] por rajti movi paĝojn.",
        "movenotallowed": "Vi ne rajtas movi paĝojn.",
        "movenotallowedfile": "Vi ne havas rajton alinomigi dosierojn.",
        "cant-move-user-page": "Vi ne rajtas movi radikajn uzanto-paĝojn.",
        "cant-move-to-user-page": "Vi ne rajtas movi paĝon al uzantopaĝo (krom al uzantosubpaĝo).",
+       "cant-move-category-page": "Vi ne rajtas movi kategoriajn paĝojn.",
+       "cant-move-to-category-page": "Vi ne rajtas movi paĝon al kategoria paĝo.",
        "newtitle": "Al nova titolo",
        "move-watch": "Atenti ĉi tiun paĝon",
        "movepagebtn": "Alinomigi paĝon",
        "import": "Importi paĝojn",
        "importinterwiki": "Transvikia importo",
        "import-interwiki-text": "Elektu vikion kaj paĝan titolon por importi.\nDatoj de versioj kaj nomoj de redaktantoj estos preservitaj.\nĈiuj transvikaj importoj estas raportitaj ĉe la [[Special:Log/import|loglibro de importoj]].",
+       "import-interwiki-sourcewiki": "Fonta vikio:",
+       "import-interwiki-sourcepage": "Fonta paĝo:",
        "import-interwiki-history": "Kopiu ĉiujn historiajn versiojn por ĉi tiu pago.",
        "import-interwiki-templates": "Inkluzivi ĉiujn ŝablonojn",
        "import-interwiki-submit": "Importi",
        "import-upload": "Alŝuti XML-datenojn",
        "import-token-mismatch": "Seancaj datenoj perdiĝis. Bonvolu reprovi.",
        "import-invalid-interwiki": "Ne povas importi de la specifita vikio.",
-       "import-error-edit": "Paĝo \"$1\" ne estas importita ĉar vi ne rajtas radakti ĝin.",
-       "import-error-create": "Paĝo \"$1\" ne estas importita ĉar vi ne rajtas krei ĝin.",
+       "import-error-edit": "Paĝo \"$1\" ne estis importita ĉar vi ne rajtas radakti ĝin.",
+       "import-error-create": "Paĝo \"$1\" ne estis importita ĉar vi ne rajtas krei ĝin.",
        "import-error-interwiki": "Paĝo \"$1\" ne estis importita pro sia nomo estas deklarita por ekstera ligado (intervikia).",
-       "import-error-special": "Paĝo \"$1\" ne estas importata, ĉar ĝi apartenas al speciala nomspaco, kiu ne permesas paĝojn.",
-       "import-error-invalid": "Paĝo \"$1\" ne estas importata, ĉar ĝia nomo estas malvalida.",
+       "import-error-special": "Paĝo \"$1\" ne estis importata, ĉar ĝi apartenas al speciala nomspaco, kiu ne permesas paĝojn.",
+       "import-error-invalid": "Paĝo \"$1\" ne estis importata, ĉar ĝia nomo estas malvalida.",
        "import-error-unserialize": "La revizio n-ro $2 de la paĝo nomata \"$1\" ne povis senseriiĝi. La revizio raportiĝis uzi enhavmodelon n-ro $3, kiu seriiĝis kiel n-ro $4.",
        "import-options-wrong": "{{PLURAL:$2|Erara elekto|Eraraj elektoj}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "La provizita paĝo havas nevalidan titolon.",
        "import-logentry-upload": "importita [[$1]] de dosiera alŝuto",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|versio|versioj}}",
        "import-logentry-interwiki": "transvikiigita $1",
-       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versio|versioj}} de $2",
+       "import-logentry-interwiki-detail": "Importis $1 {{PLURAL:$1|revizion|reviziojn}} de $2",
        "javascripttest": "Ĝavoskripta testado",
        "javascripttest-title": "Irigante $1 testoj",
        "javascripttest-pagetext-noframework": "Ĉi tiu paĝo estas konservita por funkciigi testojn de JavaScript.",
        "tooltip-feed-atom": "Atom-fonto por ĉi tiu paĝo",
        "tooltip-t-contributions": "Rigardi la liston de kontribuoj de tiu ĉi uzanto",
        "tooltip-t-emailuser": "Sendi retmesaĝon al tiu ĉi uzanto",
+       "tooltip-t-info": "Pli da informo pri ĉi tiu paĝo",
        "tooltip-t-upload": "Alŝuti bildojn aŭ dosierojn",
        "tooltip-t-specialpages": "Listo de ĉiuj specialaj paĝoj",
        "tooltip-t-print": "Printebla versio de ĉi tiu paĝo",
        "pageinfo-robot-policy": "Indeksado per robotoj",
        "pageinfo-robot-index": "Permesata",
        "pageinfo-robot-noindex": "Malpermesata",
-       "pageinfo-views": "Nombro de rigardoj",
        "pageinfo-watchers": "Nombro de paĝatentantoj",
        "pageinfo-few-watchers": "Malpli ol $1 {{PLURAL:$1|atentanto|atentantoj}}",
        "pageinfo-redirects-name": "Nombro da alidirektiloj al ĉi tiu paĝo",
        "exif-urgency-low": "Malalta ($1)",
        "exif-urgency-high": "Alta ($1)",
        "exif-urgency-other": "Prioritato difinita de uzanto ($1)",
-       "watchlistall2": "ĉiuj",
        "namespacesall": "ĉiuj",
        "monthsall": "ĉiuj",
        "confirmemail": "Konfirmi retadreson",
        "autosumm-replace": "Anstataŭigis paĝon per '$1'",
        "autoredircomment": "Alidirektigis al [[$1]]",
        "autosumm-new": "Nova paĝo kun '$1'",
+       "autosumm-newblank": "Kreis nulan paĝon",
        "lag-warn-normal": "Ŝanĝoj pli novaj ol $1 {{PLURAL:$1|sekundo|sekundoj}} eble ne estos montrataj en ĉi tiu listo.",
        "lag-warn-high": "Pro malrapideco de la servila datumbazo, ŝanĝoj pli novaj ol $1 {{PLURAL:$1|sekundo|sekundoj}} eble ne montriĝos en ĉi tiu listo.",
        "watchlistedit-normal-title": "Redakti atentaron",
        "logentry-rights-rights": "$1 ŝanĝis grupan membrecon por $3 de $4 al $5",
        "logentry-rights-rights-legacy": "$1 ŝanĝis grupan membrecon por $3",
        "logentry-rights-autopromote": "$1 estis aŭtomate {{GENDER:$2|altrangigita}} de $4 al $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|alŝutis}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|alŝutis}} novan version de $3",
+       "logentry-upload-revert": "$1 {{GENDER:$2|alŝutis}} $3",
        "rightsnone": "(nenia)",
+       "revdelete-summary": "redaktoresumon",
        "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:",
        "action-pagelang": "ŝanĝi la lingvon de la paĝo",
        "log-name-pagelang": "Ŝanĝi la lingvan protokolon",
        "log-description-pagelang": "Jen protokolo pri ŝanĝoj de paĝaj lingvoj.",
-       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ŝanĝis}} la paĝan lingvon por $3 de $4 al $5."
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ŝanĝis}} la paĝan lingvon por $3 de $4 al $5.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ŝalta)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''malŝalta''')",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 bitoko|$1 bitokoj}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME-tipo",
+       "mediastatistics-table-count": "Nombro de dosieroj",
+       "mediastatistics-header-unknown": "Nekonata",
+       "mediastatistics-header-bitmap": "Rastrumaj bildoj",
+       "mediastatistics-header-drawing": "Desegnaĵoj (vektoraj bildoj)",
+       "mediastatistics-header-audio": "Sonaj",
+       "mediastatistics-header-video": "Videaj dosieroj",
+       "mediastatistics-header-multimedia": "Multmediaj",
+       "mediastatistics-header-office": "Oficejaj",
+       "mediastatistics-header-text": "Tekstaj",
+       "mediastatistics-header-executable": "Plenumeblaj dosieroj",
+       "json-error-syntax": "Sintaksa eraro"
 }
index 8b1587a..4ce5532 100644 (file)
                        "Themasterriot",
                        "AVIADOR",
                        "F3RaN",
-                       "Amitie 10g"
+                       "Amitie 10g",
+                       "Eurodyne",
+                       "Gleki",
+                       "Jonathan rrr",
+                       "Paynekiller92"
                ]
        },
        "tog-underline": "Subrayar los enlaces:",
        "viewhelppage": "Ver página de ayuda",
        "categorypage": "Ver página de categoría",
        "viewtalkpage": "Ver discusión",
-       "otherlanguages": "Otros idiomas",
+       "otherlanguages": "En otros idiomas",
        "redirectedfrom": "(Redirigido desde «$1»)",
        "redirectpagesub": "Página de redirección",
+       "redirectto": "Redirigir a:",
        "lastmodifiedat": "Esta página fue modificada por última vez el $1 a las $2.",
        "viewcount": "Esta página se ha visitado {{PLURAL:$1|una vez|$1 veces}}.",
        "protectedpage": "Página protegida",
        "viewsourcetext": "Puedes ver y copiar el código fuente de esta página:",
        "viewyourtext": "Puedes ver y copiar el código de <strong>tus ediciones</strong> a esta página:",
        "protectedinterface": "Esta página proporciona el texto de la interfaz del software en este wiki, y está protegida para prevenir el abuso.\nPara agregar o cambiar las traducciones para todos los wikis, por favor, usa [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
-       "editinginterface": "<strong>Advertencia:</strong> Estás editando una página usada para proporcionar el texto de la interfaz para el software. \nLos cambios en esta página afectarán la apariencia de la interfaz para los demás usuarios de este wiki. \nPara añadir o cambiar las traducciones de todos los wikis utiliza [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
+       "editinginterface": "<strong>Advertencia:</strong> Estás editando una página usada para proporcionar el texto de la interfaz para el software. \nLos cambios en esta página afectarán la apariencia de la interfaz para los demás usuarios de este wiki.",
+       "translateinterface": "Para añadir o cambiar traducciones para todos los wikis, usa [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
        "cascadeprotected": "Esta página ha sido protegida para su edición, porque está incluida en {{PLURAL:$1|la siguiente página|las siguientes páginas}}, que están protegidas con la opción de «cascada»:\n$2",
        "namespaceprotected": "No tienes permiso para editar las páginas del espacio de nombres <strong>$1</strong>.",
        "customcssprotected": "No tienes permiso para editar esta página CSS, porque contiene configuraciones personales de otro usuario.",
        "yourdomainname": "Tu dominio:",
        "password-change-forbidden": "No puedes cambiar las contraseñas en este wiki.",
        "externaldberror": "Hubo un error de autenticación de la base de datos o bien no tienes autorización para actualizar tu cuenta externa.",
-       "login": "Iniciar sesión",
+       "login": "Acceder",
        "nav-login-createaccount": "Acceder/crear cuenta",
        "userlogin": "Acceder/crear cuenta",
        "userloginnocreate": "Acceder",
        "nocookieslogin": "{{SITENAME}} utiliza <em>cookies</em> para la autenticación de usuarios. Las <em>cookies</em> están desactivadas en tu navegador. Por favor, actívalas e inténtalo de nuevo.",
        "nocookiesfornew": "No se pudo crear la cuenta de usuario, porque no pudimos confirmar su origen.\nAsegúrate de que tienes las cookies activadas, luego recarga esta página e inténtalo de nuevo.",
        "noname": "No se ha especificado un nombre de usuario válido.",
-       "loginsuccesstitle": "Ya iniciaste sesión",
+       "loginsuccesstitle": "Has accedido correctamente",
        "loginsuccess": "<strong>Has accedido a {{SITENAME}} como «$1».</strong>",
        "nosuchuser": "No existe ningún usuario llamado «$1».\nLos nombres de usuario son sensibles a las mayúsculas.\nRevisa la ortografía, o [[Special:UserLogin/signup|crea una cuenta nueva]].",
        "nosuchusershort": "No hay un usuario con el nombre «$1». Comprueba que lo has escrito correctamente.",
        "createaccount-text": "Alguien creó en {{SITENAME}} ($4) una cuenta asociada a este correo electrónico con el nombre «$2» y contraseña «$3». Por favor entra ahora y cambia tu contraseña.\n\nPuedes ignorar este mensaje si esta cuenta fue creada por error.",
        "login-throttled": "Has intentado demasiadas veces iniciar sesión recientemente. Por favor espera $1 antes de intentarlo nuevamente.",
        "login-abort-generic": "Tu inicio de sesión no fue exitoso - Cancelado",
+       "login-migrated-generic": "Tu cuenta se ha migrado y tu nombre de usuario ya no existen en este wiki.",
        "loginlanguagelabel": "Idioma: $1",
        "suspicious-userlogout": "Tu solicitud de desconexión ha sido denegada, pues parece haber sido enviada desde un navegador defectuoso o un proxy caché.",
        "createacct-another-realname-tip": "El nombre real es opcional.\nSi se proporciona, se usará para dar al usuario la atribución de su trabajo.",
        "passwordreset-emailsent-capture": "Se ha enviado un correo para el restablecimiento de la contraseña, el cual se muestra a continuación.",
        "passwordreset-emailerror-capture": "Se generó un correo electrónico de restablecimiento de contraseña, que se muestra a continuación, pero el envío {{GENDER:$2|al usuario|a la usuaria}} falló: $1",
        "changeemail": "Cambiar la dirección de correo electrónico",
-       "changeemail-header": "Cambiar la dirección de correo de la cuenta",
        "changeemail-text": "Rellena este formulario para cambiar tu dirección de correo electrónico. Debes introducir la contraseña para confirmar este cambio.",
        "changeemail-no-info": "Debes iniciar sesión para acceder directamente a esta página.",
        "changeemail-oldemail": "Dirección electrónica actual:",
        "changeemail-none": "(ninguna)",
        "changeemail-password": "Tu contraseña en {{SITENAME}}:",
        "changeemail-submit": "Cambiar correo electrónico",
-       "changeemail-cancel": "Cancelar",
        "changeemail-throttled": "Has intentado acceder demasiadas veces.\nEspera $1 antes de intentarlo de nuevo.",
        "resettokens": "Restablecer claves",
        "resettokens-text": "Aquí puedes restablecer las fichas que permiten el acceso a ciertos datos privados asociados con tu cuenta.\n\nDeberías hacerlo si accidentalmente los has compartido o si tu cuenta ha sido intervenida.",
        "showpreview": "Mostrar previsualización",
        "showdiff": "Mostrar los cambios",
        "blankarticle": "<strong>Aviso:</strong> estás a punto de crear una página vacía.\nSi pulsas en «{{int:savearticle}}» de nuevo, se creará la página sin ningún contenido.",
-       "anoneditwarning": "<strong>Advertencia:</strong> No has iniciado sesión.\nTu dirección IP se almacenará en el historial de edición de esta página.",
+       "anoneditwarning": "<strong>Advertencia:</strong> No has iniciado sesión. Tu dirección IP será visible públicamente si haces cualquier edición. Si <strong>[$1 inicias sesión]</strong> o <strong>[$2 creas una cuenta]</strong>, tus ediciones se atribuirán a tu nombre de usuario, junto con otros beneficios.",
        "anonpreviewwarning": "<em>No has iniciado sesión. Al guardar los cambios se almacenará tu dirección IP en el historial de edición de esta página.</em>",
        "missingsummary": "<strong>Recordatorio:</strong> No has escrito un resumen de edición.\nSi haces clic nuevamente en «{{int:savearticle}}» tu edición se grabará sin él.",
        "missingcommenttext": "Escribe un comentario a continuación.",
        "protectedpagewarning": "'''Aviso: Esta página ha sido protegida de manera que solo usuarios con permisos de administrador puedan editarla.'''\nA continuación se muestra la última entrada de registro para referencia:",
        "semiprotectedpagewarning": "'''Nota:''' Esta página ha sido protegida para que solo usuarios registrados puedan editarla.\nA continuación se provee la última entrada de registro para referencia:",
        "cascadeprotectedwarning": "'''Aviso:''' Esta página está protegida, solo los administradores pueden editarla porque está incluida en  {{PLURAL:$1|la siguiente página protegida|las siguientes páginas protegidas}} en cascada:",
-       "titleprotectedwarning": "'''Aviso: Esta página está protegida de modo que se necesitan [[Special:ListGroupRights|derechos especificos]] para crearla.'''\nA continuación se muestra la última entrada de registro para referencia:",
+       "titleprotectedwarning": "'''Aviso: Esta página está protegida de modo que se necesitan [[Special:ListGroupRights|permisos especificos]] para crearla.'''\nA continuación se muestra la última entrada de registro para referencia:",
        "templatesused": "{{PLURAL:$1|Plantilla usada|Plantillas usadas}} en esta página:",
        "templatesusedpreview": "{{PLURAL:$1|Plantilla usada|Plantillas usadas}} en esta previsualización:",
        "templatesusedsection": "{{PLURAL:$1|Plantilla usada|Plantillas usadas}} en esta sección:",
        "mergehistory-go": "Mostrar ediciones fusionables",
        "mergehistory-submit": "Fusionar revisiones",
        "mergehistory-empty": "No hay revisiones fusionables.",
-       "mergehistory-success": "$3 {{PLURAL:$3|revisión|revisiones}} de [[:$1]] fusionadas de forma exitosa en [[:$2]].",
+       "mergehistory-success": "Se {{PLURAL:$3|fusionó $3 revisión|fusionaron $3 revisiones}} de «[[:$1]]» en «[[:$2]]» correctamente.",
        "mergehistory-fail": "No se puede realizar la fusión de historiales, por favor revisa la página y los parámetros de tiempo.",
        "mergehistory-fail-toobig": "No se puede fusionar el historial ya que más del límite de $1 {{PLURAL:$1|revisión|revisiones}} se moverían.",
        "mergehistory-no-source": "La página origen $1 no existe.",
        "mergehistory-same-destination": "Las páginas de origen y destino no pueden ser la misma",
        "mergehistory-reason": "Motivo:",
        "mergelog": "Registro de fusiones",
-       "pagemerge-logentry": "fusionó [[$1]] en [[$2]] (revisiones hasta $3)",
        "revertmerge": "Deshacer fusión",
        "mergelogpagetext": "Debajo está una lista de las fusiones más recientes de historial de una página en otra.",
        "history-title": "Historial de revisiones de «$1»",
        "search-result-category-size": "{{PLURAL:$1|1 miembro|$1 miembros}} ({{PLURAL:$2|1 subcategoría|$2 subcategorías}}, {{PLURAL:$3|1 fichero|$3 ficheros}})",
        "search-redirect": "(redirige desde $1)",
        "search-section": "(sección $1)",
+       "search-category": "(categoría $1)",
        "search-file-match": "(coincide con el contenido del archivo)",
        "search-suggest": "Quizás quieres buscar: $1",
        "search-interwiki-caption": "Proyectos hermanos",
        "searchall": "todos",
        "showingresults": "Abajo se {{PLURAL:$1|muestra '''1''' resultado|muestran hasta '''$1''' resultados}} comenzando por el n.º '''$2'''.",
        "showingresultsinrange": "Abajo se muestran hasta {{PLURAL:$1|<strong>1</strong> resultado|<strong>$1</strong> resultados}} en el rango #<strong>$2</strong> hasta #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados '''$1-$2''' de '''$3'''}} para '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Resultado <strong>$1</strong> de <strong>$3</strong>|Resultados <strong>$1 - $2</strong> de <strong>$3</strong>}}",
        "search-nonefound": "No hay resultados que cumplan los criterios de búsqueda.",
        "powersearch-legend": "Búsqueda avanzada",
        "powersearch-ns": "Buscar en los espacios de nombres:",
        "gender-female": "Femenino",
        "prefs-help-gender": "Opcional: el software utiliza esta preferencia para dirigirse a ti con el género gramatical apropiado. Esta información es pública.",
        "email": "Correo electrónico",
-       "prefs-help-realname": "El nombre real es opcional. Si decides proporcionarlo, se usará para dar atribución a tu trabajo.",
+       "prefs-help-realname": "El nombre real es opcional. Si lo proporcionas, se usará para dar atribución a tu trabajo.",
        "prefs-help-email": "La dirección de correo electrónico es opcional, pero es necesaria para el restablecimiento de tu contraseña, en caso de que la olvides.",
        "prefs-help-email-others": "También puedes permitir que otros usuarios te contacten por correo a través de un enlace en tus páginas de usuario y de discusión.\nTu dirección de correo no se revela cuando otros usuarios te contactan.",
        "prefs-help-email-required": "Es necesario proporcionar una dirección de correo electrónico.",
        "prefs-tokenwatchlist": "Clave",
        "prefs-diffs": "Diferencias",
        "prefs-help-prefershttps": "Esta preferencia tendrá efecto en tu próximo inicio de sesión.",
+       "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",
        "statistics": "Estadísticas",
        "statistics-header-pages": "Estadísticas de páginas",
        "statistics-header-edits": "Estadísticas de ediciones",
-       "statistics-header-views": "Estadísticas de visitas",
        "statistics-header-users": "Estadísticas de usuario",
        "statistics-header-hooks": "Otras estadísticas",
        "statistics-articles": "Páginas de contenido",
        "statistics-files": "Archivos subidos",
        "statistics-edits": "Ediciones en páginas desde que {{SITENAME}} fue instalado",
        "statistics-edits-average": "Media de ediciones por página",
-       "statistics-views-total": "Visitas totales",
-       "statistics-views-total-desc": "No se incluyen accesos a páginas no existentes ni páginas especiales",
-       "statistics-views-peredit": "Visitas por edición",
        "statistics-users": "[[Special:ListUsers|Usuarios]] registrados",
        "statistics-users-active": "Usuarios activos",
        "statistics-users-active-desc": "Usuarios que han ejecutado una acción en {{PLURAL:$1|el último día|los últimos $1 días}}",
-       "statistics-mostpopular": "Páginas más vistas",
        "pageswithprop": "Páginas con una propiedad de página",
        "pageswithprop-legend": "Páginas con una propiedad de página",
        "pageswithprop-text": "Esta página muestra las páginas que usan la propiedad de una página en particular",
        "uncategorizedtemplates": "Plantillas sin categorizar",
        "unusedcategories": "Categorías sin uso",
        "unusedimages": "Imágenes sin uso",
-       "popularpages": "Páginas populares",
        "wantedcategories": "Categorías requeridas",
        "wantedpages": "Páginas requeridas",
        "wantedpages-badtitle": "Título inválido en conjunto de resultados: $1",
        "pager-older-n": "{{PLURAL:$1|1 anterior|$1 anteriores}}",
        "suppress": "Supresor de ediciones",
        "querypage-disabled": "Esta página especial está deshabilitada por motivos de rendimiento.",
+       "apihelp": "Ayuda de la API",
+       "apihelp-no-such-module": "No se encontró el módulo \"$1\".",
        "booksources": "Fuentes de libros",
        "booksources-search-legend": "Buscar fuentes de libros",
-       "booksources-go": "Ir",
+       "booksources-search": "Buscar",
        "booksources-text": "Abajo hay una lista de enlaces a otros sitios que venden libros nuevos y usados, puede que contengan más información sobre los libros que estás buscando.",
        "booksources-invalid-isbn": "El número de ISBN no parece ser válido; comprueba los errores copiándolo de la fuente original.",
        "specialloguserlabel": "Usuario:",
        "wlheader-enotif": "La notificación por correo está activada.",
        "wlheader-showupdated": "Las páginas modificadas desde su última visita aparecen en '''negrita'''.",
        "wlnote": "A continuación {{PLURAL:$1|se muestra el último cambio|se muestran los últimos '''$1''' cambios}} en {{PLURAL:$2|la última hora|las últimas '''$2''' horas}} a fecha de $4 $3.",
-       "wlshowlast": "Ver los cambios de las últimas $1 horas, $2 días  $3",
+       "wlshowlast": "Ver los cambios de las últimas $1 horas, $2 días",
        "watchlist-options": "Opciones de la lista de seguimiento",
        "watching": "Vigilando...",
        "unwatching": "Eliminando de la lista de seguimiento...",
        "protect-othertime": "Especificar caducidad:",
        "protect-othertime-op": "otra (especificar)",
        "protect-existing-expiry": "Fecha de caducidad actual: $2 a las $3",
+       "protect-existing-expiry-infinity": "Tiempo de caducidad existente: infinito",
        "protect-otherreason": "Otra razón:",
        "protect-otherreason-op": "Otra razón",
        "protect-dropdown": "*Razones de protección habituales\n**Vandalismo excesivo\n**Spam excesivo\n**Guerra de ediciones\n**Página muy visitada",
        "unblocked": "[[User:$1|$1]] ha sido {{GENDER:$1|desbloqueado|desbloqueada}}",
        "unblocked-range": "$1 ha sido desbloqueado",
        "unblocked-id": "Se ha eliminado el bloqueo $1",
+       "unblocked-ip": "Se ha desbloqueado a [[Special:Contributions/$1|$1]].",
        "blocklist": "Usuarios bloqueados",
        "ipblocklist": "Usuarios bloqueados",
        "ipblocklist-legend": "Encontrar a un usuario bloqueado",
        "tooltip-feed-atom": "Sindicación Atom de esta página",
        "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-specialpages": "Lista de todas las páginas especiales",
        "tooltip-t-print": "Versión imprimible de esta página",
        "pageinfo-robot-policy": "Indización por robots",
        "pageinfo-robot-index": "Permitido",
        "pageinfo-robot-noindex": "No permitido",
-       "pageinfo-views": "Número de vistas",
        "pageinfo-watchers": "Número de usuarios que vigilan la página",
        "pageinfo-few-watchers": "Menos de $1 {{PLURAL:$1|vigilante|vigilantes}}",
        "pageinfo-redirects-name": "Número de redirecciones a esta página",
        "exif-urgency-low": "Bajo ($1)",
        "exif-urgency-high": "Alto ($1)",
        "exif-urgency-other": "Prioridad definida por el usuario ($1)",
-       "watchlistall2": "todos",
        "namespacesall": "todos",
        "monthsall": "todos",
        "confirmemail": "Confirmar dirección de correo electrónico",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|subió}} una nueva versión de $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|subió}} $3",
        "rightsnone": "(ninguno)",
+       "revdelete-summary": "resumen de edición",
        "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:",
        "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": "¡Oops! La apariencia por defecto de la wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, no está disponible.\n\nLa instalación parece poseer las siguientes opciones de apariencia. Por favor revise [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] para mayor información sobre cómo configurarla y seleccionar la apariencia por defecto.\n\n$2\n\n; Si acaba de instalar MediaWiki:\n: Probablemente la haya instalado desde git, o directamente desde el código fuente usando algún otro método. Esto es lo esperado. Intente instalar algunos sets de apariencia desde [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory]:\n:* Descargando [https://www.mediawiki.org/wiki/Download el instalador tarball], el cual contiene varios sets de apariencia y extensiones. Puede copiar y pegar el directorio <code>skins/</code> desde ahi.\n:* Clonando uno de los repositorios en <code>mediawiki/skins/*</code> via git dentro del directorio <code>skins/</code> de su instaación de MediaWiki.\n: Haciendo esto no debería interferir con su repositorio git si usted es un desarrollador de MediaWiki.\n\n; Si acaba de actualizar MediaWiki:\n: MediaWiki 1.24 y versiones posteriores ya no tiene habilitada la actualización de apariencia (revise [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Puede pegar las siguientes lineas <code>LocalSettings.php</code> para habilitar todos los sets de apariencia que haya configurado:\n\n<pre>$3</pre>\n\n; Si acaba de modificar <code>LocalSettings.php</code>:\n: Compruebe detenidamente posibles errores tipográficos en los nombres de los sets de apariencias.",
+       "default-skin-not-found": "¡Oops! La apariencia predeterminada de la wiki, definida en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, no está disponible.\n\nLa instalación parece poseer las siguientes apariencias. Revisa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Configuración de apariencias] para mayor 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. Esto es lo esperado. 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:* 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: MediaWiki 1.24 y versiones posteriores ya no tiene habilitada la actualización de apariencia (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 es lo esperado. MediaWiki 1.24 y versiones posteriores no incluyen 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], siguiendo el siguiente procedimiento:\n:* Descarga 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:* 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''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactivado''')",
+       "mediastatistics": "Estadísticas de multimedia",
+       "mediastatistics-summary": "Estadísticas sobre los tipos de archivos cargados. Sólo se incluyen las versiones más recientes. Los archivos antiguos o eliminados están excluidos.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 ''byte''|$1 ''bytes''}} ($2; $3 %)",
+       "mediastatistics-table-mimetype": "Tipo MIME",
+       "mediastatistics-table-extensions": "Extensiones posibles",
+       "mediastatistics-table-count": "Número de archivos",
+       "mediastatistics-table-totalbytes": "Tamaño combinado",
+       "mediastatistics-header-unknown": "Desconocido",
+       "mediastatistics-header-bitmap": "Imágenes de mapa de bits",
+       "mediastatistics-header-drawing": "Dibujos (imágenes vectoriales)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Vídeos",
+       "mediastatistics-header-multimedia": "Multimedia enriquecida",
+       "mediastatistics-header-office": "Oficina",
+       "mediastatistics-header-text": "Textual",
+       "mediastatistics-header-executable": "Ejecutables",
+       "mediastatistics-header-archive": "Formatos comprimidos",
+       "json-error-unknown": "Ocurrió un problema con el código JSON. Error: $1",
+       "json-error-state-mismatch": "JSON no válido o con formato incorrecto",
+       "json-error-ctrl-char": "Error de carácter de control, posiblemente codificada incorrectamente",
+       "json-error-syntax": "Error de sintaxis",
+       "json-error-utf8": "Los caracteres UTF-8 tienen errores de formato; probablemente la codificación es incorrecta.",
+       "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"
 }
index 686cd52..e5804b1 100644 (file)
@@ -66,7 +66,7 @@
        "tog-prefershttps": "Kasuta sisselogimisel alati turvalist ühendust",
        "underline-always": "Alati",
        "underline-never": "Mitte kunagi",
-       "underline-default": "Kujunduse või võrgulehitseja vaikeväärtus",
+       "underline-default": "Kujunduse või brauseri vaikeväärtus",
        "editfont-style": "Redigeerimisala kirjatüüp:",
        "editfont-default": "Veebilehitseja vaikesäte",
        "editfont-monospace": "Püsisammuga font",
        "category-file-count": "{{PLURAL:$2|Selles kategoorias on ainult järgmine fail.|{{PLURAL:$1|Järgmine fail |Järgmised $1 faili}} on selles kategoorias (kokku $2).}}",
        "category-file-count-limited": "{{PLURAL:$1|Järgmine fail|Järgmised $1 faili}} on selles kategoorias.",
        "listingcontinuesabbrev": "jätk",
-       "index-category": "Indeksiga leheküljed",
+       "index-category": "Indekseeritud leheküljed",
        "noindex-category": "Indekseerimata leheküljed",
        "broken-file-category": "Katkiste pildilinkidega leheküljed",
        "about": "Tiitelandmed",
        "otherlanguages": "Teistes keeltes",
        "redirectedfrom": "(Ümber suunatud leheküljelt $1)",
        "redirectpagesub": "Ümbersuunamisleht",
+       "redirectto": "Ümber suunatud lehekülje:",
        "lastmodifiedat": "Viimane muutmine: $2, $1",
        "viewcount": "Seda lehekülge on külastatud {{PLURAL:$1|üks kord|$1 korda}}.",
        "protectedpage": "Kaitstud lehekülg",
        "viewsourcetext": "Saad vaadata ja kopeerida lehekülje lähteteksti:",
        "viewyourtext": "Saad vaadata ja kopeerida sellel leheküljel tehtud '''enda muudatuste '''lähteteksti:",
        "protectedinterface": "Sellel leheküljel on selle viki tarkvara kasutajaliidese tekst. Väärtarvituse vältimiseks on lehekülg kaitstud.\nEt lisada ja muuta tõlkeid kõigi vikide jaoks, kasuta palun MediaWiki lokaliseerimisprojekti [//translatewiki.net/ translatewiki.net].",
-       "editinginterface": "'''Hoiatus:''' Redigeerid tarkvara kasutajaliidese tekstiga lehekülge.\nMuudatused siin mõjutavad kõikide selle viki kasutajate kasutajaliidest.\nEt lisada ja muuta tõlkeid kõigi vikide jaoks, kasuta palun MediaWiki lokaliseerimisprojekti [//translatewiki.net/ translatewiki.net].",
+       "editinginterface": "<strong>Hoiatus:</strong> Redigeerid lehekülge, mille teksti kasutatakse tarkvaraliideses.\nMuudatused siin mõjutavad kõikide selle viki kasutajate kasutajaliidest.",
+       "translateinterface": "Et lisada või muuta tõlkeid kõigi vikide jaoks, kasuta palun MediaWiki lokaliseerimisprojekti [//translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "See lehekülg on muutmise eest kaitstud, sest see on osa {{PLURAL:$1|järgmisest leheküljest|järgmistest lehekülgedest}}, mis on kaskaadkaitse all:\n$2",
        "namespaceprotected": "Sul pole õigust redigeerida lehekülgi nimeruumis '''$1'''.",
        "customcssprotected": "Sul pole õigust seda CSS-lehekülge redigeerida, sest see sisaldab teise kasutaja isiklikke sätteid.",
        "createaccount-text": "Keegi on loonud {{GRAMMAR:illative|{{SITENAME}}}} ($4) sinu e-posti aadressile vastava kasutajatunnuse \"$2\". Parooliks seati \"$3\". Logi sisse ja muuda oma parool.\n\nKui kasutajakonto loomine on eksitus, võid käesolevat sõnumit lihtsalt eirata.",
        "login-throttled": "Oled lühikese aja jooksul proovinud liiga palju kordi sisse logida.\nPalun oota $1, enne kui uuesti proovid.",
        "login-abort-generic": "Sisselogimine ebaõnnestus – Katkestatud",
+       "login-migrated-generic": "Sinu konto on migreeritud ja sinu kasutajanime pole enam selles vikis.",
        "loginlanguagelabel": "Keel: $1",
        "suspicious-userlogout": "Sinu väljalogimiskatse nurjus, sest see näis olevat katkise veebilehitseja või puhverserveri saadetud.",
        "createacct-another-realname-tip": "Tegelik nimi on valikuline.\nKui otsustad selle sisestada, kasutatakse seda kasutaja töö temale omistamiseks.",
        "passwordreset-emailsent-capture": "E-kirjatsi on saadetud allpool näidatav parooli lähtestuskiri.",
        "passwordreset-emailerror-capture": "Koostati allpool näidatav parooli lähtestuskiri, aga selle e-kirjatsi {{GENDER:$2|kasutajale}} saatmine ebaõnnestus: $1",
        "changeemail": "E-posti aadressi muutmine",
-       "changeemail-header": "Konto e-posti aadressi muutmine",
        "changeemail-text": "Täida see vorm, et muuta oma e-posti aadress. Et seda muudatust kinnitada, pead sisestama oma parooli.",
        "changeemail-no-info": "Otselingi kaudu sellele lehele jõudmiseks pead olema sisse loginud.",
        "changeemail-oldemail": "Praegune e-posti aadress:",
        "changeemail-none": "(puudub)",
        "changeemail-password": "Sinu parool {{GRAMMAR:inessive|{{SITENAME}}}}:",
        "changeemail-submit": "Muuda e-posti aadress",
-       "changeemail-cancel": "Loobu",
        "changeemail-throttled": "Oled proovinud liiga palju kordi sisse logida.\nPalun oota $1, enne kui uuesti proovid.",
        "resettokens": "Lubade lähtestamine",
        "resettokens-text": "Saad lähtestada load, mida on vaja siin sinu kontoga seotud kindlatele eraandmetele ligipääsuks.\n\nPeaksid load lähtestama, kui jagasid neid kogemata või kui su konto on kellegi teise võimusesse sattunud.",
        "showpreview": "Näita eelvaadet",
        "showdiff": "Näita muudatusi",
        "blankarticle": "<strong>Hoiatus:</strong> Lehekülg, mida alustad, on tühi.\nKui klõpsad uuesti \"{{int:savearticle}}\", luuakse lehekülg ilma sisuta.",
-       "anoneditwarning": "'''Hoiatus:''' Sa pole sisse logitud.\nSelle lehe redigeerimislogisse salvestatakse su IP-aadress.",
+       "anoneditwarning": "<strong>Hoiatus:</strong> Sa pole sisse logitud. Sinu IP-aadress on kõigile nähtav, kui muudatusi teed. Kui <strong>[$1 logid sisse]</strong> või <strong>[$2 lood konto]</strong>, siis teiste eeliste seas omistatakse sinu muudatused sulle kasutajanime järgi.",
        "anonpreviewwarning": "''Sa pole sisse logitud. Selle lehe redigeerimislogisse salvestatakse su IP-aadress.''",
        "missingsummary": "'''Meeldetuletus:''' Sa ei ole lisanud muudatuse resümeed.\nKui vajutad uuesti salvestamise nupule, salvestatakse muudatus ilma resümeeta.",
        "missingcommenttext": "Palun sisesta siit allapoole kommentaar.",
        "session_fail_preview_html": "'''Vabandust! Meil ei õnnestunud seansiandmete kaotuse tõttu sinu muudatust töödelda.'''\n\n''Kuna {{GRAMMAR:inessive|{{SITENAME}}}} on toor-HTML lubatud, on eelvaade JavaScripti-rünnakute vastase ettevaatusabinõuna peidetud.''\n\n'''Kui see on õigustatud redigeerimiskatse, proovi palun uuesti.'''\nKui see ikka ei tööta, proovi [[Special:UserLogout|välja]] ja tagasi sisse logida.",
        "token_suffix_mismatch": "'''Muudatus lükati tagasi, kuna sinu klienttarkvara ei suuda õigesti kirjavahemärke kasutada.'''\nMuudatus lükati tagasi, et vältida lehekülje segiminekut.\nSee juhtub mõnikord siis, kui kasutatakse vigast veebipõhist anonüümsusserverit.",
        "edit_form_incomplete": "'''Redigeerimisvormi mõni osa ei jõudnud serverisse; kontrolli, kas sinu tehtud muudatused on alles, ja proovi uuesti.'''",
-       "editing": "Muutmisel on $1",
-       "creating": "Alustamisel on $1",
-       "editingsection": "Muutmisel on osa leheküljest $1",
+       "editing": "Muutmisel on \"$1\"",
+       "creating": "Alustamisel on \"$1\"",
+       "editingsection": "Muutmisel on osa leheküljest \"$1\"",
        "editingcomment": "Muutmisel on $1 (uus alaosa)",
        "editconflict": "Redigeerimiskonflikt: $1",
        "explainconflict": "Keegi teine on muutnud seda lehekülge pärast seda, kui sina seda redigeerima hakkasid.\nÜlemine toimetamiskast sisaldab teksti viimast versiooni.\nSinu muudatused on alumises kastis.\nSul tuleb need viimasesse versiooni üle viia.\nKui klõpsad nupule \"{{int:savearticle}}\", salvestub '''ainult''' ülemises toimetamiskastis olev tekst.",
        "content-model-text": "lihttekst",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Leheküljed, kus mallikutses on topeltargument",
+       "duplicate-args-category-desc": "Lehekülg sisaldab mallikutseid, kus mõnd argumenti on kasutatud mitu korda, näiteks <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> või <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Hoiatus:''' See lehekülg kasutab liialt palju aeglustavaid laiendusfunktsioone. Neid võiks kasutada vähem kui {{PLURAL:$2|ühel|$2}} korral, praegu on kasutatud {{PLURAL:$1|ühel|$1}} korral.",
        "expensive-parserfunction-category": "Leheküljed, kus on liiga palju kulukaid parserifunktsioone",
        "post-expand-template-inclusion-warning": "'''Hoiatus:''' Väljakutsutavate mallide hulk on liiga suur, mõningaid malle ei näidata.",
        "mergehistory-same-destination": "Allik- ja sihtlehekülg ei saa olla samad.",
        "mergehistory-reason": "Põhjus:",
        "mergelog": "Liitmislogi",
-       "pagemerge-logentry": "liitis lehekülje [[$1]] leheküljega [[$2]] (kuni redaktsioonini $3)",
        "revertmerge": "Tühista liitmine",
        "mergelogpagetext": "Allpool on hiljuti üksteisega liidetud leheküljeajalugude logi.",
        "history-title": "Lehekülje \"$1\" muudatuste ajalugu",
        "shown-title": "Näita lehekülje kohta $1 {{PLURAL:$1|tulemus|tulemust}}",
        "viewprevnext": "Näita ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Lehekülg pealkirjaga \"[[:$1]]\" on olemas.'''",
-       "searchmenu-new": "<strong>Loo lehekülg pealkirjaga \"[[:$1]]\".</strong> {{PLURAL:$2|0=|Vaata ka leitud lehekülge.|Vaata ka leitud otsitulemusi.}}",
+       "searchmenu-new": "<strong>Alusta lehekülge \"[[:$1]]\".</strong> {{PLURAL:$2|0=|Vaata ka leitud lehekülge.|Vaata ka leitud otsitulemusi.}}",
        "searchprofile-articles": "Sisuleheküljed",
        "searchprofile-images": "Multimeedia",
        "searchprofile-everything": "Kõik",
        "search-result-category-size": "{{PLURAL:$1|1 lehekülg|$1 lehekülge}} ({{PLURAL:$2|1 alamkategooria|$2 alamkategooriat}}, {{PLURAL:$3|1 fail|$3 faili}})",
        "search-redirect": "(ümbersuunamine $1)",
        "search-section": "(alaosa $1)",
+       "search-category": "(kategooria \"$1\")",
        "search-file-match": "(vastab faili sisule)",
        "search-suggest": "Kas mõtlesid: $1",
        "search-interwiki-caption": "Sõsarprojektid",
        "searchall": "kõik",
        "showingresults": "Allpool näidatakse '''{{PLURAL:$1|ühte|$1}}''' tulemust alates '''$2'''. tulemusest.",
        "showingresultsinrange": "Allpool näidatakse {{PLURAL:$1|<strong>üht</strong>|<strong>$1</strong>}} tulemust vahemikus <strong>$2</strong>–<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|'''$1''' '''$3'''-st vastest|Vasted '''$1–$2''' '''$3'''-st}} päringule '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|<strong>$1</strong>. tulemus <strong>$3</strong>-st|Tulemused <strong>$1–$2</strong> <strong>$3</strong>-st}}",
        "search-nonefound": "Päringule ei leitud vasteid.",
        "powersearch-legend": "Täpsem otsing",
        "powersearch-ns": "Otsing nimeruumidest:",
        "prefs-namespaces": "Nimeruumid",
        "default": "vaikeväärtus",
        "prefs-files": "Failid",
-       "prefs-custom-css": "kohandatud CSS",
-       "prefs-custom-js": "kohandatud JS",
-       "prefs-common-css-js": "Kõigi kujunduste ühine CSS/JS:",
+       "prefs-custom-css": "Kohandatud CSS",
+       "prefs-custom-js": "Kohandatud JavaScript",
+       "prefs-common-css-js": "Kõigi kujunduste ühine CSS/JavaScript:",
        "prefs-reset-intro": "Sellel leheküljel saad oma eelistused lähtestada võrgukoha vaike-eelistusteks.\nToimingut ei saa hiljem tühistada.",
        "prefs-emailconfirm-label": "E-posti kinnitus:",
        "youremail": "E-posti aadress:",
        "gender-female": "Naine",
        "prefs-help-gender": "Selle eelistuse määramine on valikuline.\nTarkvara kasutab valitud väärtust mõnes keeles, et pöörduda sinu poole ja mainida sind teistele, kasutades soole vastavat sõna või sõnavormi.\nSee teave on avalik.",
        "email": "E-post",
-       "prefs-help-realname": "Vabatahtlik. Kui otsustad päris nime avaldada, kasutatakse seda sinu kaastöö seostamiseks sinuga.",
+       "prefs-help-realname": "Tegelik nimi on valikuline.\nKui avaldatud, võidakse seda kasutada sinu kaastöö seostamiseks sinuga.",
        "prefs-help-email": "E-posti aadressi sisestamine pole kohustuslik, kuid võimaldab sul tellida parooli meeldetuletuse, kui peaksid oma parooli unustama.",
        "prefs-help-email-others": "Võid ka paluda teistel sinu kasutaja- või aruteluleheküljel sinuga ühendust võtta, selle asemel, et peaksid oma isikuandmeid avaldama.",
        "prefs-help-email-required": "E-posti aadress on vajalik.",
        "prefs-tokenwatchlist": "Luba",
        "prefs-diffs": "Erinevused",
        "prefs-help-prefershttps": "See eelistus jõustub pärast järgmist sisselogimist.",
+       "prefswarning-warning": "Oled teinud eelistustes muudatusi, mida pole veel salvestatud.\nKui lahkud sellelt leheküljelt ilma nupul \"$1\" klõpsamata, jäävad kehtima senised eelistused.",
        "prefs-tabs-navigation-hint": "Spikker: Kaardiloendis toodud kaartide vahel liikumiseks saad kasutada vasakut ja paremat nooleklahvi.",
        "email-address-validity-valid": "Sobiv e-posti aadress",
        "email-address-validity-invalid": "Sisesta sobiv e-posti aadress.",
        "statistics": "Arvandmestik",
        "statistics-header-pages": "Lehekülgede arvandmed",
        "statistics-header-edits": "Redigeerimise arvandmed",
-       "statistics-header-views": "Vaatamise statistika",
        "statistics-header-users": "Kasutajate arvandmed",
        "statistics-header-hooks": "Muud arvandmed",
        "statistics-articles": "Sisulehekülgi",
        "statistics-files": "Üleslaaditud faile",
        "statistics-edits": "Redigeerimisi alates {{GRAMMAR:genitive|{{SITENAME}}}} loomisest",
        "statistics-edits-average": "Keskmiselt redigeerimisi lehekülje kohta",
-       "statistics-views-total": "Lehekülje vaatamisi kokku",
-       "statistics-views-total-desc": "Olematute lehekülgede või erilehekülgede vaatamised on välja arvatud",
-       "statistics-views-peredit": "Vaatamisi redaktsiooni kohta",
        "statistics-users": "Registreeritud [[Special:ListUsers|kasutajaid]]",
        "statistics-users-active": "Aktiivseid kasutajaid",
        "statistics-users-active-desc": "Kasutajad, kes on viimase {{PLURAL:$1|päeva|$1 päeva}} jooksul tegutsenud",
-       "statistics-mostpopular": "Enim vaadatud leheküljed",
        "pageswithprop": "Leheatribuudiga leheküljed",
        "pageswithprop-legend": "Leheatribuudiga leheküljed",
        "pageswithprop-text": "Sellel leheküljel on loetletud mõnd leheatribuuti kasutavad leheküljed.",
        "uncategorizedtemplates": "Kategoriseerimata mallid",
        "unusedcategories": "Kasutamata kategooriad",
        "unusedimages": "Kasutamata failid",
-       "popularpages": "Loetumad leheküljed",
        "wantedcategories": "Kõige oodatumad kategooriad",
        "wantedpages": "Kõige oodatumad leheküljed",
        "wantedpages-badtitle": "Tulemuste seas on vigane pealkiri: $1",
        "pager-older-n": "{{PLURAL:$1|vanem 1|vanemad $1}}",
        "suppress": "Varjamine",
        "querypage-disabled": "See erilehekülg on keelatud, et jõudlust hoida.",
+       "apihelp": "API abi",
+       "apihelp-no-such-module": "Moodulit \"$1\" ei leitud.",
        "booksources": "Raamatuotsimine",
        "booksources-search-legend": "Raamatuotsimine",
-       "booksources-go": "Mine",
+       "booksources-search": "Otsi",
        "booksources-text": "Allpool on linke teistele lehekülgedele, kus müüakse uusi ja kasutatud raamatuid. Lehekülgedel võib olla ka lisainfot raamatute kohta:",
        "booksources-invalid-isbn": "Antud ISBN-number ei ole korrektne; kontrolli algallikast kopeerides vigu.",
        "specialloguserlabel": "Täitja:",
        "noindex-category-desc": "Robotid ei indekseeri lehekülge, sest sellel on võlusõna <code><nowiki>__NOINDEX__</nowiki></code> ja lehekülg on nimeruumis, kus see silt on lubatud.",
        "index-category-desc": "Leheküljel on <code><nowiki>__INDEX__</nowiki></code> ja lehekülg on nimeruumis, kus see silt on lubatud ning seetõttu indekseerivad robotid lehekülge seal, kus nad muidu seda ei teeks.",
        "post-expand-template-inclusion-category-desc": "Kõigi mallide hõrendamise järel on lehekülg suurem kui <code>$wgMaxArticleSize</code>, mistõttu jäid mõned mallid hõrendamata.",
-       "post-expand-template-argument-category-desc": "Malli argumendi (midagi kolmekordsete looksulgude vahel, näiteks <code>{{{Foo}}})</code> hõrendamise järel on lehekülg suurem kui <code>$wgMaxArticleSize</code>.",
+       "post-expand-template-argument-category-desc": "Malli argumendi (midagi kolmekordsete looksulgude vahel, näiteks <code>{{{Foo}}}</code>) hõrendamise järel on lehekülg suurem kui <code>$wgMaxArticleSize</code>.",
        "expensive-parserfunction-category-desc": "Lehekülg kasutab liiga palju kulukaid parserifunktsioone nagu <code>#ifexist</code>. Vaata [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit dokumentatsiooni].",
        "broken-file-category-desc": "Leheküljel on katkine pildilink, millega manustatakse fail, mida pole olemas.",
        "hidden-category-category-desc": "Selle kategooria leheküljel on <code><nowiki>__HIDDENCAT__</nowiki></code>, mis vaikimisi ei lase näidata seda kategooriat lehekülgedel kategoorialinkide kastis.",
        "wlheader-enotif": "E-posti teel teavitamine on lubatud.",
        "wlheader-showupdated": "Leheküljed, mida on muudetud peale sinu viimast külastust, on '''rasvases kirjas'''.",
        "wlnote": "Allpool on {{PLURAL:$1|viimane muudatus|viimased <strong>$1</strong> muudatust}} viimase {{PLURAL:$2|tunni|<strong>$2</strong> tunni}} jooksul seisuga $3, kell $4.",
-       "wlshowlast": "Näita viimast $1 tundi $2 päeva. $3",
+       "wlshowlast": "Näita viimast $1 tundi $2 päeva.",
        "watchlist-options": "Jälgimisloendi seaded",
        "watching": "Jälgimine...",
        "unwatching": "Jälgimise lõpetamine...",
        "protect-othertime": "Muu aeg:",
        "protect-othertime-op": "muu aeg",
        "protect-existing-expiry": "Kehtiv aegumisaeg: $2 kell $3",
+       "protect-existing-expiry-infinity": "Kehtiv aegumisaeg: igavene",
        "protect-otherreason": "Muu või täiendav põhjus:",
        "protect-otherreason-op": "Muu põhjus",
        "protect-dropdown": "*Tavalised kaitsmise põhjused\n** Liigne vandalism\n** Liigne rämpspostitamine\n** Redigeerimissõja pidamine\n** Suure liiklusega lehekülg",
        "unblocked": "Kasutaja [[User:$1|$1]] blokeering on eemaldatud",
        "unblocked-range": "Vahemiku $1 blokeering on eemaldatud",
        "unblocked-id": "Blokeerimine $1 on lõpetatud",
+       "unblocked-ip": "IP-aadressi [[Special:Contributions/$1|$1]] blokeering on eemaldatud.",
        "blocklist": "Blokeeritud kasutajad",
        "ipblocklist": "Blokeeritud kasutajad",
        "ipblocklist-legend": "Leia blokeeritud kasutaja",
        "lockfilenotwritable": "Andmebaasi lukufail ei ole kirjutatav.\nAndmebaasi lukustamiseks ja avamiseks peavad veebiserveril olema sellele kirjutusõigused.",
        "databasenotlocked": "Andmebaas ei ole lukustatud.",
        "lockedbyandtime": "(lukustas $1; $2, kell $3)",
-       "move-page": "Teisalda $1",
+       "move-page": "Lehekülje \"$1\" teisaldamine",
        "move-page-legend": "Lehekülje teisaldamine",
        "movepagetext": "Allolevat vormi kasutades saad lehekülje ümber nimetada. Lehekülje ajalugu tõstetakse uue pealkirja alla automaatselt.\nPraeguse pealkirjaga leheküljest saab ümbersuunamislehekülg uuele leheküljele.\nSaad senisele pealkirjale viitavad ümbersuunamised automaatselt parandada.\nKui sa seda ei tee, kontrolli, et teisaldamise tõttu ei jää maha [[Special:DoubleRedirects|kahekordseid]] ega [[Special:BrokenRedirects|katkiseid ümbersuunamisi]].\nSinu kohus on hoolitseda selle eest, et kõik jääks toimima, nagu ette nähtud.\n\nPane tähele, et lehekülge '''ei teisaldata''' juhul, kui uue pealkirjaga lehekülg on juba olemas. Erandiks on juhud, kui viimane on redigeerimisajaloota ümbersuunamislehekülg.\nSee tähendab, et kogemata ei saa üle kirjutada juba olemasolevat lehekülge, kuid saab ebaõnnestunud ümbernimetamise tagasi pöörata.\n\n'''Hoiatus!'''\nTegu võib olla väga loetava lehekülje jaoks tõsise ja ootamatu muudatusega;\nenne jätkamist teadvusta palun tagajärgi.",
        "movepagetext-noredirectfixer": "Allolevat vormi kasutades saad lehekülje ümber nimetada. Lehekülje ajalugu tõstetakse uue pealkirja alla automaatselt.\nPraeguse pealkirjaga leheküljest saab ümbersuunamislehekülg uuele leheküljele.\nKontrolli, et teisaldamise tõttu ei jää maha [[Special:DoubleRedirects|kahekordseid]] ega [[Special:BrokenRedirects|katkiseid ümbersuunamisi]].\nSinu kohus on hoolitseda selle eest, et kõik jääks toimima, nagu ette nähtud.\n\nPane tähele, et lehekülge '''ei teisaldata''' juhul, kui uue pealkirjaga lehekülg on juba olemas. Erandiks on juhud, kui olemasolev lehekülg on tühi või redigeerimisajaloota ümbersuunamislehekülg.\nSee tähendab, et kogemata ei saa üle kirjutada juba olemasolevat lehekülge, kuid saab ebaõnnestunud ümbernimetamise tagasi pöörata.\n\n'''Hoiatus!'''\nTegu võib olla väga loetava lehekülje jaoks tõsise ja ootamatu muudatusega;\nenne jätkamist teadvusta palun tagajärgi.",
        "tooltip-pt-preferences": "Sinu eelistused",
        "tooltip-pt-watchlist": "Loend lehekülgedest, mille muudatusi jälgid",
        "tooltip-pt-mycontris": "Sinu kaastööde loend",
-       "tooltip-pt-login": "Me julgustame teid sisse logima, kuid see pole kohustuslik.",
+       "tooltip-pt-login": "See pole küll kohustuslik, aga sul tasub sisse logida.",
        "tooltip-pt-logout": "Logi välja",
+       "tooltip-pt-createaccount": "See pole küll kohustuslik, aga sul tasub konto luua ja sisse logida.",
        "tooltip-ca-talk": "Selle artikli arutelu",
        "tooltip-ca-edit": "Sa saad seda lehekülge muuta. Palun kasuta enne salvestamist eelvaadet.",
        "tooltip-ca-addsection": "Lisa uus alaosa",
        "tooltip-feed-atom": "Selle lehekülje Atom-voog",
        "tooltip-t-contributions": "Kuva selle kasutaja kaastöö",
        "tooltip-t-emailuser": "Saada sellele kasutajale e-kiri",
+       "tooltip-t-info": "Lisateave selle lehekülje kohta",
        "tooltip-t-upload": "Laadi faile üles",
        "tooltip-t-specialpages": "Erilehekülgede loend",
        "tooltip-t-print": "Selle lehe trükiversioon",
        "pageinfo-robot-policy": "Robotindekseering",
        "pageinfo-robot-index": "Lubatud",
        "pageinfo-robot-noindex": "Keelatud",
-       "pageinfo-views": "Vaatamiste arv",
        "pageinfo-watchers": "Lehekülje jälgijate arv",
        "pageinfo-few-watchers": "Alla {{PLURAL:$1|ühe jälgija|$1 jälgija}}",
        "pageinfo-redirects-name": "Sellele leheküljele suunavate lehekülgede arv",
        "exif-urgency-low": "Madal ($1)",
        "exif-urgency-high": "Kõrge ($1)",
        "exif-urgency-other": "Kasutaja määratud tähtsus ($1)",
-       "watchlistall2": "Näita kõiki",
        "namespacesall": "kõik",
        "monthsall": "kõik",
        "confirmemail": "E-posti aadressi kinnitamine",
        "unknown_extension_tag": "Tundmatu lisa silt \"$1\".",
        "duplicate-defaultsort": "'''Hoiatus:''' Järjestamisvõti \"$2\" tühistab eespool oleva järjestamisvõtme \"$1\".",
        "duplicate-displaytitle": "<strong>Hoiatus:</strong> Kuvatava pealkirjaga \"$2\" kirjutatakse üle varasem kuvatav pealkiri \"$1\".",
+       "invalid-indicator-name": "<strong>Tõrge:</strong> Lehekülje olekunäidu juures ei tohi atribuudi <code>name</code> väärtus puududa.",
        "version": "Versioon",
        "version-extensions": "Paigaldatud lisad",
        "version-skins": "Paigaldatud kujundused",
        "version-ext-colheader-credits": "Autorid",
        "version-license-title": "Tarkvaralisa $1 litsents",
        "version-license-not-found": "Selle lisa kohta ei leitud üksikasjalikku litsentsiteavet.",
-       "version-credits-title": "Tarkvaralisa $1 tegijad",
+       "version-credits-title": "Tarkvarakomponendi $1 tegijad",
        "version-credits-not-found": "Selle lisa tegijate kohta ei leitud üksikasjalikku teavet.",
        "version-poweredby-credits": "See viki kasutab '''[https://www.mediawiki.org/ MediaWiki]''' tarkvara. Autoriõigus © 2001–$1 $2.",
        "version-poweredby-others": "teised",
        "revdelete-uname-unhid": "nähtavaks tehti kasutajanimi",
        "revdelete-restricted": "kehtestati piirangud administraatoritele",
        "revdelete-unrestricted": "eemaldati administraatoritelt piirangud",
+       "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-move-move_redir": "$1 {{GENDER:$2|teisaldas}} lehekülje $3 ümbersuunamise $4 asemele",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|laadis üles}} uue versiooni failist $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|laadis üles}} faili $3",
        "rightsnone": "(puudub)",
+       "revdelete-summary": "resümee",
        "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:",
        "api-error-stashfailed": "Sisetõrge: Serveril ei õnnestunud ajutist faili talletada.",
        "api-error-publishfailed": "Sisetõrge: Serveril ebaõnnestus ajutise faili avaldamine.",
        "api-error-stasherror": "Selle faili hoidlasse üleslaadimisel ilmnes tõrge.",
+       "api-error-stashedfilenotfound": "Algses hoidlas talletatud faili ei leitud, kui seda sealt üles püüti laadida.",
+       "api-error-stashpathinvalid": "Failitee, kus algse hoidla fail pidanuks leiduma, oli vigane.",
+       "api-error-stashfilestorage": "Faili algsesse hoidlasse talletamisel esines tõrge.",
+       "api-error-stashzerolength": "Server ei saanud faili algses hoidlas talletada, sest fail on tühi.",
+       "api-error-stashnotloggedin": "Pead olema sisse logitud, et salvestada faile üleslaadimise algsesse hoidlasse.",
+       "api-error-stashwrongowner": "Fail, mille juurde algses hoidlas üritasid pääseda, ei kuulu sulle.",
+       "api-error-stashnosuchfilekey": "Failivõtit, mille juurde algses hoidlas üritasid pääseda, pole olemas.",
        "api-error-timeout": "Server ei vastanud oodatud aja sees.",
        "api-error-unclassified": "Ilmnes teadmata tõrge.",
        "api-error-unknown-code": "Teadmata tõrge: \"$1\"",
        "log-name-pagelang": "Keele muutmise logi",
        "log-description-pagelang": "Siia on logitud lehekülgede keele muutmised.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|muutis}} lehekülje \"$3\" keelt: $4 → $5.",
-       "default-skin-not-found": "Oih! Sinu viki vaikekujundus (<code>$wgDefaultSkin</code>) <code>$1</code> pole saadaval.\n\nPaistab, et sinu install sisaldab järgmisi kujundusi. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas neid lubada ja kuidas valida vaikekujundus.\n\n$2\n\n; Kui oled MediaWiki just paigaldanud:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code>skins/</code>;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja.\n\n; Kui oled MediaWikit just täiendanud:\n: MediaWiki 1.24-s ja uuemates versioonides pole paigaldatud kujundused enam automaatselt lubatud (vaata juhendist [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery kujunduste automaatse leidmise] kohta). Saad kleepida järgmised read leheküljele <code>LocalSettings.php</code>, et lubada kõik praegu paigaldatud kujundused:\n\n<pre>$3</pre>\n\n; Kui oled lehekülge <code>LocalSettings.php</code> just muutnud:\n: Kontrolli üle, ega kujunduste nimedes pole trükivigu.",
-       "default-skin-not-found-no-skins": "Oih! Sinu viki vaikekujundus (<code>$wgDefaultSkin</code>) <code>$1</code> pole saadaval.\n\nÜhtegi kujundust pole paigaldatud.\n\n; Kui oled MediaWiki just paigaldanud või täiendasid seda:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. MediaWiki 1.24 ja uuemad versioonid ei sisalda peahoidlas ühtegi kujundust. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code>skins/</code>;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas kujundusi lubada ja kuidas valida vaikekujundus.",
+       "default-skin-not-found": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nPaistab, et sinu install sisaldab järgmisi kujundusi. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas neid lubada ja kuidas valida vaikekujundus.\n\n$2\n\n; Kui oled MediaWiki just paigaldanud:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja.\n\n; Kui oled MediaWikit just täiendanud:\n: MediaWiki 1.24-s ja uuemates versioonides pole paigaldatud kujundused enam automaatselt lubatud (vaata juhendist [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery kujunduste automaatse leidmise] kohta). Saad kleepida järgmised read leheküljele <code>LocalSettings.php</code>, et lubada kõik praegu paigaldatud kujundused:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Kui oled lehekülge <code>LocalSettings.php</code> just muutnud:\n: Kontrolli üle, ega kujunduste nimedes pole trükivigu.",
+       "default-skin-not-found-no-skins": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nÜhtegi kujundust pole paigaldatud.\n\n; Kui oled MediaWiki just paigaldanud või täiendasid seda:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. MediaWiki 1.24 ja uuemad versioonid ei sisalda peahoidlas ühtegi kujundust. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas kujundusi lubada ja kuidas valida vaikekujundus.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (lubatud)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''keelatud''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''keelatud''')",
+       "mediastatistics": "Meediafailide arvandmestik",
+       "mediastatistics-summary": "Arvandmed üles laaditud failitüüpide kohta. See käib ainult failide viimaste versioonide kohta. Vanu ja kustutatud versioone pole arvesse võetud.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 bait|$1 baiti}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME tüüp",
+       "mediastatistics-table-extensions": "Võimalikud laiendid",
+       "mediastatistics-table-count": "Failide arv",
+       "mediastatistics-table-totalbytes": "Suurus kokku",
+       "mediastatistics-header-unknown": "Teadmata",
+       "mediastatistics-header-bitmap": "Rasterpildid",
+       "mediastatistics-header-drawing": "Vektorjoonised",
+       "mediastatistics-header-audio": "Helifailid",
+       "mediastatistics-header-video": "Videofailid",
+       "mediastatistics-header-multimedia": "Rikasmeedia failid",
+       "mediastatistics-header-office": "Kontoritarkvara failid",
+       "mediastatistics-header-text": "Tekstifailid",
+       "mediastatistics-header-executable": "Täitmisfailid",
+       "mediastatistics-header-archive": "Tihendatud vormingud",
+       "json-warn-trailing-comma": "$1 lõpukoma eemaldati JSON-ist.",
+       "json-error-unknown": "JSON-iga oli probleem. Tõrge: $1",
+       "json-error-depth": "Suurim võimalik pinusügavus on ületatud.",
+       "json-error-state-mismatch": "Vigane või väärdunud JSON",
+       "json-error-ctrl-char": "Juhtmärgi tõrge; see võib olla valesti kodeeritud",
+       "json-error-syntax": "Süntaksitõrge",
+       "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"
 }
index af06a8c..294d230 100644 (file)
        "hidetoc": "ezkutatu",
        "collapsible-collapse": "Itxi",
        "collapsible-expand": "Zabaldu",
+       "confirmable-yes": "Bai",
+       "confirmable-no": "Ez",
        "thisisdeleted": "$1 ikusi edo leheneratu?",
        "viewdeleted": "$1 ikusi?",
        "restorelink": "{{PLURAL:$1|ezabatutako aldaketa bat|ezabatutako $1 aldaketa}}",
        "passwordreset-emailsent": "Pasahitza berrezartzeko e-posta bidali da.",
        "passwordreset-emailsent-capture": "Pasahitza berrezartzeko e-posta bat bidali dizugu, behean erakusten dena.",
        "changeemail": "Aldatu e-mail helbidea",
-       "changeemail-header": "Aldatu kontuko e-posta helbidea",
        "changeemail-text": "Bete ezazu formulario hau e-posta helbidea aldatzeko. Zure pasahitza sartu beharko duzu aldaketa hau baieztatzeko.",
        "changeemail-no-info": "Orrialde honetara zuzenean sartzeko izena eman behar duzu.",
        "changeemail-oldemail": "Egungo e-mail helbidea:",
        "changeemail-none": "(bat ere ez)",
        "changeemail-password": "Zure {{SITENAME}}ko pasahitza:",
        "changeemail-submit": "E-posta aldatu",
-       "changeemail-cancel": "Utzi",
        "resettokens": "Tokenak berrezarri",
        "resettokens-no-tokens": "Ez dago tokenik berrezartzeko.",
        "resettokens-legend": "Tokenak berrezarri",
        "edit-gone-missing": "Ezin da orria eguneratu. Ezabatu omen dute.",
        "edit-conflict": "Aldaketa gatazka.",
        "edit-no-change": "Zure edizioa baztertu da testua aldatu ez duzulako.",
+       "postedit-confirmation-created": "Orrialdea sortu da.",
+       "postedit-confirmation-restored": "Orrialdea leheneratua izan da.",
        "postedit-confirmation-saved": "Zure aldaketa gorde da.",
        "edit-already-exists": "Ezin izan da orri berria sortu.\nJada existitzen da.",
        "defaultmessagetext": "Testu lehenetsia",
        "mergehistory-same-destination": "Jatorri eta helmugako orriak ezin dira berdinak izan",
        "mergehistory-reason": "Arrazoia:",
        "mergelog": "Bateratze erregistroa",
-       "pagemerge-logentry": "[[$1]] [[$2]](r)ekin batu da ($3(e)raino berrikuspenak)",
        "revertmerge": "Bereiztu",
        "mergelogpagetext": "Jarraian dagoen zerrendak orrialde baten historiatik beste batera egindako azken bateratzeak erakusten ditu.",
        "history-title": "«$1» orriaren historia berrikuspena",
        "searchrelated": "erlazionatua",
        "searchall": "guztia",
        "showingresults": "Jarraian {{PLURAL:$1|emaitza '''1''' ikus daiteke|'''$1''' emaitza ikus daitezke}}, #'''$2'''.etik hasita.",
-       "showingresultsheader": "{{PLURAL:$5|'''$1'''(e)tik '''$3''' emaitza|'''$1 - $2'''(e)tik '''$3''' emaitza}} '''$4'''(r)entzat",
        "search-nonefound": "Ez dago eskaerarekin bat egiten duten emaitzarik.",
        "powersearch-legend": "Bilaketa aurreratua",
        "powersearch-ns": "Bilatu honako izen-tartetan:",
        "rcnotefrom": "Jarraian azaltzen diren aldaketak data honetatik aurrerakoak dira: <b>$2</b> (gehienez <b>$1</b> erakusten dira).",
        "rclistfrom": "Erakutsi $3 $2 ondorengo aldaketa berriak",
        "rcshowhideminor": "$1 aldaketa txikiak",
+       "rcshowhideminor-show": "Erakutsi",
+       "rcshowhideminor-hide": "Ezkutatu",
        "rcshowhidebots": "$1 bot-ak",
-       "rcshowhideliu": "$1 erabiltzaile erregistratuak",
+       "rcshowhidebots-show": "Erakutsi",
+       "rcshowhidebots-hide": "Ezkutatu",
+       "rcshowhideliu": "$1 erregistratutako erabiltzaileak",
+       "rcshowhideliu-show": "Erakutsi",
+       "rcshowhideliu-hide": "Ezkutatu",
        "rcshowhideanons": "$1 erabiltzaile anonimoak",
+       "rcshowhideanons-show": "Erakutsi",
+       "rcshowhideanons-hide": "Ezkutatu",
        "rcshowhidepatr": "$1 patruilatutako aldaketak",
+       "rcshowhidepatr-show": "Erakutsi",
+       "rcshowhidepatr-hide": "Ezkutatu",
        "rcshowhidemine": "$1 nire ekarpenak",
+       "rcshowhidemine-show": "Erakutsi",
+       "rcshowhidemine-hide": "Ezkutatu",
        "rclinks": "Erakutsi azken $2 egunetako $1 aldaketak<br />$3",
        "diff": "ezb",
        "hist": "hist",
        "license-nopreview": "(Aurreikuspenik ez)",
        "upload_source_url": " (baliozko URL publikoa)",
        "upload_source_file": " (zure ordenagailuko fitxategi bat)",
+       "listfiles-delete": "ezabatu",
        "listfiles-summary": "Orri berezi honek igotako fitxategi guztiak erakusten ditu.\nBerez, azken igotako fitxategiak zerrendaren goiko aldean azaltzen dira.",
        "listfiles_search_for": "Irudiaren izenagatik bilatu:",
        "imgfile": "fitxategia",
        "randomincategory": "Kategoriako ausazko orrialdea",
        "randomincategory-invalidcategory": "\"$1\" ez da kategoria izen baliagarri bat.",
        "randomincategory-nopages": "Ez dago orrialderik [[:Category:$1|$1]] kategorian.",
+       "randomincategory-category": "Kategoria:",
        "randomredirect": "Ausazko birbideratzea",
        "randomredirect-nopages": "Ez dago birzuzenketarik \"$1\" izen-tartean.",
        "statistics": "Estatistikak",
        "statistics-header-pages": "Orrialdeen estatistikak",
        "statistics-header-edits": "Aldaketen estatistikak",
-       "statistics-header-views": "Ikustaldien estatistikak",
        "statistics-header-users": "Erabiltzaile estatistikak",
        "statistics-header-hooks": "Beste estatistikak",
        "statistics-articles": "Edukiak dituzten orrialdeak",
        "statistics-files": "Igotako fitxategiak",
        "statistics-edits": "{{SITENAME}} sortu zenetik eginiko aldaketa kopurua",
        "statistics-edits-average": "Bataz-besteko aldaketak orrialdeko",
-       "statistics-views-total": "Ikusitako orrialdeak guztira",
-       "statistics-views-peredit": "Ikusitako orrialdeak aldaketa bakoitzeko",
        "statistics-users": "Izen-emandako [[Special:ListUsers|lankideak]]",
        "statistics-users-active": "Lankide aktiboak",
        "statistics-users-active-desc": "Aurreko {{PLURAL:$1|egunean|egunetan}} jardueraren bat gauzatu duten erabiltzaileak",
-       "statistics-mostpopular": "Orri bisitatuenak",
        "pageswithprop": "Orrialde propietatea duten orrialdeak",
        "pageswithprop-legend": "Orrialde propietatea duten orrialdeak",
        "pageswithprop-prop": "Ezaugarriaren izena:",
        "uncategorizedtemplates": "Sailkatu gabeko txantiloiak",
        "unusedcategories": "Erabili gabeko kategoriak",
        "unusedimages": "Erabili gabeko fitxategiak",
-       "popularpages": "Orrialde bisitatuenak",
        "wantedcategories": "Eskatutako kategoriak",
        "wantedpages": "Eskatutako orrialdeak",
        "wantedpages-badtitle": "Izenburu okerra hautatutako emaitzetan: $1",
        "querypage-disabled": "Orrialde berezi hau desgaituta dago funtzionamendu arrazoiengatik.",
        "booksources": "Iturri liburuak",
        "booksources-search-legend": "Liburuen bilaketa",
-       "booksources-go": "Joan",
        "booksources-text": "Jarraian liburu berri eta erabiliak saltzen dituzten guneetarako loturen zerrenda bat ikus dezakezu, bilatzen ari zaren liburu horientzako informazio gehigarria aurkitzeko lagungarria izan daitekeena:",
        "booksources-invalid-isbn": "Badirudi emandako ISBNa ez dela baliagarria; egiazta ezazu ea akatsik egin duzun jatorrizko iturritik kopiatzean.",
        "specialloguserlabel": "Egilea:",
        "wlheader-enotif": "Posta bidezko ohartarazpena gaituta dago.",
        "wlheader-showupdated": "Bisitatu zenituen azken alditik aldaketak izan dituzten orrialdeak '''beltzez''' nabarmenduta daude.",
        "wlnote": "Jarraian {{PLURAL:$2|ikus daiteke azken orduko|ikus daitezke azken '''$2''' orduetako}} azken {{PLURAL:$1|aldaketa|'''$1''' aldaketak}}, $3, $4 gisa.",
-       "wlshowlast": "Erakutsi azken $1 orduak $2 egunak $3",
+       "wlshowlast": "Erakutsi azken $1 orduak, azken $2 egunak",
        "watchlist-options": "Jarraitze-zerrendaren aukerak",
        "watching": "Zerrendan gehitzen...",
        "unwatching": "Zerrendatik kentzen...",
        "pageinfo-robot-policy": "Errobotak indexatzea egiten",
        "pageinfo-robot-index": "Baimendua",
        "pageinfo-robot-noindex": "Debekatua",
-       "pageinfo-views": "Bistaratze-kopurua",
        "pageinfo-watchers": "Orriaren jarraitzaileen kopurua",
        "pageinfo-few-watchers": "{{PLURAL:$1|Ikusle bat|$1 ikusle}} baino gutxiago",
        "pageinfo-redirects-name": "Orri honetara dakarten birzuzenketak",
        "exif-urgency-low": "Baxua ($1)",
        "exif-urgency-high": "Altua ($1)",
        "exif-urgency-other": "Definitutako lehentasuna ($1)",
-       "watchlistall2": "guztiak",
        "namespacesall": "guztiak",
        "monthsall": "guztiak",
        "confirmemail": "E-posta helbidea egiaztatu",
        "confirm-purge-bottom": "Orrialdea purgatzean katxea ezabatzen du eta orrialdearen bertsiorik eguneratuena erakustera behartzen du.",
        "confirm-watch-button": "Ados",
        "confirm-unwatch-button": "Ados",
-       "quotation-marks": "\"$1\"",
+       "quotation-marks": "«$1»",
        "imgmultipageprev": "&larr; aurreko orrialdea",
        "imgmultipagenext": "hurrengo orrialdea &rarr;",
        "imgmultigo": "Joan!",
        "version-hook-name": "Estentsioaren izena",
        "version-hook-subscribedby": "Hauen harpidetzarekin",
        "version-version": "(Bertsioa $1)",
+       "version-no-ext-name": "[izenik gabe]",
        "version-license": "MediaWiki Lizentzia",
        "version-ext-license": "Lizentzia",
        "version-ext-colheader-name": "Luzapena",
        "revdelete-restricted": "administratzaileentzako mugak ezarri dira",
        "revdelete-unrestricted": "administratzaileentzako mugak kendu dira",
        "logentry-move-move": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du",
-       "logentry-move-move-noredirect": "$1 {{GENDER:$2|wikilariak}} $3 orria $4 izenera aldatu du, birzuzenketarik utzi gabe",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du, birzuzenketarik utzi gabe",
        "logentry-move-move_redir": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du, birzuzenketaren gainetik",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:wikilariak}} «$3» orria «$4» izenera aldatu du, birbideratze bat gainidatzita, birbideratzerik utzi gabe",
        "logentry-patrol-patrol": "$1(e)k $3 orrialdearen $4 berrikuzpena patruilatutzat {{GENDER:$2|markatu}} du",
        "logentry-newusers-create": "$1 erabiltzaile kontua sortu da",
        "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",
        "expand_templates_remove_comments": "Iruzkinak kendu",
        "expand_templates_remove_nowiki": "Ezabatu <nowiki> etiketen emaitzak",
        "expand_templates_generate_xml": "Erakutsi XML parse zuhaitza",
-       "expand_templates_preview": "Aurreikusi"
+       "expand_templates_preview": "Aurreikusi",
+       "pagelang-language": "Hizkuntza",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 byte}} ($2; %$3)",
+       "mediastatistics-table-count": "Fitxategi kopurua",
+       "mediastatistics-header-video": "Bideoak",
+       "json-error-syntax": "Sintaxi-errorea"
 }
index b4eb8d5..414ad12 100644 (file)
@@ -6,7 +6,8 @@
                        "The Evil IP address",
                        "Urhixidur",
                        "Xuacu",
-                       "아라"
+                       "아라",
+                       "Babanwalia"
                ]
        },
        "tog-underline": "Surrayal atihus:",
        "qbedit": "Eital",
        "qbpageoptions": "Esta páhina",
        "qbmyoptions": "Las mis páhinas",
-       "faq": "FAQ",
+       "faq": "ਆਮ ਸੁਆਲ਼",
        "faqpage": "Project:FAQ",
        "actions": "Acionis",
        "namespaces": "Espáciu nombris",
        "mergehistory-comment": "Mesturau [[:$1]] en [[:$2]]: $3",
        "mergehistory-reason": "Razón:",
        "mergelog": "Rustrihu e fusionis",
-       "pagemerge-logentry": "S'á uñificau [[$1]] en [[$2]] (hata la revisión $3)",
        "revertmerge": "Desuñifical",
        "mergelogpagetext": "Embahu se muestra una lista colas úrtimas uñificacionis d'estorialis.",
        "history-title": "Estorial de revisionis de \"$1\"",
        "statistics": "Estaísticas",
        "statistics-header-pages": "Estaísticas de la página",
        "statistics-header-edits": "Estaísticas d'eición",
-       "statistics-header-views": "Guipal estaísticas",
        "statistics-header-users": "Estaísticas d´usuáriu",
        "statistics-pages": "Páginas",
        "statistics-pages-desc": "Tolas páginas nel wiki, encruyendu carabas, redirecionis...",
        "statistics-users": "[[Special:ListUsers|Usuárius rustrius]]",
        "statistics-users-active": "Ussuárius ativus",
        "statistics-users-active-desc": "Ussuárius que aigan hechu anguna ación {{PLURAL:$1|nel úrtimu dia|enus úrtimus $1 dias}}",
-       "statistics-mostpopular": "Páhinas mas visoreás",
        "doubleredirects": "Redirecionis dobris",
        "brokenredirects": "Redirecionis eschangás",
        "brokenredirectstext": "Las siguientis redirecionis atijan a páginas que nu dessistin:",
        "uncategorizedtemplates": "Prantillas sin categoria",
        "unusedcategories": "Categorias abaldonás",
        "unusedimages": "Archivus abaldonaus",
-       "popularpages": "Páhinas polularis",
        "wantedcategories": "Categorias deseás",
        "wantedpages": "Páhinas deseás",
        "wantedfiles": "Archivus nedessitaus",
        "pager-older-n": "{{PLURAL:$1|1 mas antigu|$1 mas antigus}}",
        "booksources": "Huentis de librus",
        "booksources-search-legend": "Landeal huentis de librus",
-       "booksources-go": "Dil",
        "booksources-text": "Embahu se muestra una lista d'atihus a páhinas que vendin librus usaus i nuevus, i ondi pueis alcuentral enhormación al tentu los librus qu'estás landeandu:",
        "specialloguserlabel": "Usuáriu:",
        "speciallogtitlelabel": "Entítulu:",
        "wlheader-enotif": "Se premitin notificacionis pol email.",
        "wlheader-showupdated": "Las páhinas que s'án emburacau dendi la úrtima vezi que las visoreasti son muestrás en '''negrina'''",
        "wlnote": "Embahu {{PLURAL:$1|es el úrtimu chambu|son los úrtimus '''$1''' chambus}} enas úrtimas {{PLURAL:$2|oras|'''$2''' oras}}.",
-       "wlshowlast": "Muestral úrtimus $1 oras $2 dias $3",
+       "wlshowlast": "Muestral úrtimus $1 oras $2 dias",
        "watchlist-options": "Ocionis de la mi lista e seguimientu",
        "watching": "Vehilandu...",
        "unwatching": "Abaldonandu la vehiláncia en...",
        "exif-gpsspeed-n": "Ñus",
        "exif-gpsdirection-t": "Direción verdaera",
        "exif-gpsdirection-m": "Direción manética",
-       "watchlistall2": "tó",
        "namespacesall": "tó",
        "monthsall": "tó",
        "confirmemail": "Confirmal email",
        "revdelete-restricted": "las restricionis a los çahorilis án siu apricás",
        "revdelete-unrestricted": "las restricionis a los çahorilis án siu esborrás",
        "rightsnone": "(dengunu)",
+       "revdelete-summary": "eital sumáriu",
        "expand_templates_preview": "Previsoreal"
 }
index 36465b2..f79f369 100644 (file)
                        "Mostafadaneshvar",
                        "Pouyana",
                        "Oldstoneage",
-                       "Omid.koli"
+                       "Omid.koli",
+                       "Alirezaaa",
+                       "Mogoeilor",
+                       "Hosseinblue"
                ]
        },
        "tog-underline": "خط کشیدن زیر پیوندها:",
        "tog-hideminor": "تغییرات جزئی از فهرست تغییرات اخیر پنهان شوند",
        "tog-hidepatrolled": "ویرایش‌های گشت‌خورده از فهرست تغییرات اخیر پنهان شوند",
        "tog-newpageshidepatrolled": "صفحه‌های گشت‌خورده از فهرست صفحه‌های تازه پنهان شوند",
-       "tog-extendwatchlist": "گسترش فهرست پیگیری‌ها برای نمایش همهٔ تغییرات، نه فقط آخرین‌ها",
-       "tog-usenewrc": "گروه‌بندی تغییرات بر پایهٔ صفحه‌های تغییرات اخیر و فهرست پیگیری‌ها (نیازمند جاوااسکریپت)",
+       "tog-extendwatchlist": "گسترش فهرست پیگیری‌ها برای نمایش همهٔ تغییرات، نه فقط آخرین‌ها",
+       "tog-usenewrc": "گروه‌بندی تغییرات بر پایهٔ صفحات تغییرات اخیر و فهرست پیگیری‌ها",
        "tog-numberheadings": "شماره‌گذاری خودکار عنوان‌ها",
-       "tog-showtoolbar": "نوار ابزار جعبهٔ ویرایش نمایش یابد",
-       "tog-editondblclick": "ویرایش صفحه‌ها با دوکلیک (نیازمند جاوااسکریپت)",
-       "tog-editsectiononrightclick": "امکان ویرایش بخش‌ها با کلیک راست روی عنوان‌های بخش (نیازمند جاوااسکریپت)",
-       "tog-watchcreations": "صفحه‌هایی که می‌سازم و پرونده‌هایی که بارگذاری می‌کنم به فهرست پیگیری‌هایم افزوده شود",
-       "tog-watchdefault": "صفحه‌ها و پرونده‌هایی که ویرایش می‌کنم به فهرست پیگیری‌هایم افزوده شود",
+       "tog-showtoolbar": "نوار ابزار ویرایش نمایش یابد",
+       "tog-editondblclick": "ویرایش صفحات با دو کلیک",
+       "tog-editsectiononrightclick": "فعال‌کردن ویرایش بخش‌ها با کلیک راست روی عنوان بخش‌ها",
+       "tog-watchcreations": "صفحه‌هایی که می‌سازم و پرونده‌هایی که بارگذاری می‌کنم به فهرست پیگیری‌هایم افزوده شود",
+       "tog-watchdefault": "صفحه‌ها و پرونده‌هایی که ویرایش می‌کنم به فهرست پیگیری‌هایم افزوده شود",
        "tog-watchmoves": "صفحه‌ها و پرونده‌هایی که منتقل می‌کنم به فهرست پی‌گیری‌هایم افزوده شود",
-       "tog-watchdeletion": "صفحه‌ها و پرونده‌هایی که حذف می‌کنم به فهرست پی‌گیری‌هایم افزوده شود",
+       "tog-watchdeletion": "صفحات و پرونده‌هایی که حذف می‌کنم به فهرست پی‌گیری‌هایم افزوده شود",
        "tog-watchrollback": "افزودن صفحاتی که واگردانی کردم برای فهرست پیگیری‌هایم",
        "tog-minordefault": "همهٔ ویرایش‌ها به طور پیش‌فرض به عنوان «جزئی» علامت بخورد",
        "tog-previewontop": "پیش‌نمایش قبل از جعبهٔ ویرایش نمایش یابد",
        "category_header": "صفحه‌های ردهٔ «$1»",
        "subcategories": "زیررده‌ها",
        "category-media-header": "پرونده‌های ردهٔ «$1»",
-       "category-empty": "''این رده در حال حاضر حاوی هیچ صفحه یا پرونده‌ای نیست.''",
+       "category-empty": "<em>این رده در حال حاضر حاوی هیچ صفحه یا پرونده‌ای نیست.</em>",
        "hidden-categories": "{{PLURAL:$1|ردهٔ پنهان|رده‌های پنهان}}",
        "hidden-category-category": "رده‌های پنهان",
        "category-subcat-count": "{{PLURAL:$2|این رده تنها حاوی زیرردهٔ زیر است.|{{PLURAL:$1|این زیررده|این $1 زیررده}} در این رده قرار {{PLURAL:$1|دارد|دارند}}؛ این رده در کل حاوی $2 زیررده است.}}",
        "category-file-count": "{{PLURAL:$2|این رده تنها حاوی پروندهٔ زیر است.|{{PLURAL:$1|این پرونده|این $1 پرونده}} در این رده قرار {{PLURAL:$1|دارد|دارند}}؛ این رده در کل حاوی $2 پرونده است.}}",
        "category-file-count-limited": "{{PLURAL:$1|پروندهٔ|$1 پروندهٔ}} زیر در ردهٔ فعلی قرار دارند.",
        "listingcontinuesabbrev": "(ادامه)",
-       "index-category": "صفحه‌های نمایه‌شده",
+       "index-category": "صفحات فهرست‌شده",
        "noindex-category": "صفحه‌های نمایه‌نشده",
-       "broken-file-category": "صفحه‌های دارای پیوند خراب به پرونده",
+       "broken-file-category": "صفحات دارای پیوند خراب به پرونده",
        "about": "درباره",
        "article": "صفحهٔ محتوایی",
-       "newwindow": "(در Ù¾Ù\86جرÙ\87Ù\94 Ø¬Ø¯Û\8cد باز می‌شود)",
+       "newwindow": "(در Ù¾Ù\86جرÙ\87Ù\94 ØªØ§Ø²Ù\87 باز می‌شود)",
        "cancel": "لغو",
        "moredotdotdot": "بیشتر...",
        "morenotlisted": "این فهرست کامل نیست.",
        "mypage": "صفحه",
        "mytalk": "بحث",
-       "anontalk": "بحث Ø¨Ø±Ø§Û\8c Ø§Û\8cÙ\86 آی‌پی",
-       "navigation": "گشتن",
+       "anontalk": "بحث Ø¯Ø±Ø¨Ø§Ø±Ù\87 Ø§Û\8cÙ\86 Ù\86شاÙ\86Û\8c آی‌پی",
+       "navigation": "ناوبری",
        "and": "&#32;و",
        "qbfind": "یافتن",
        "qbbrowse": "مرور",
        "qbedit": "ویرایش",
        "qbpageoptions": "این صفحه",
-       "qbmyoptions": "صفحه‌های من",
+       "qbmyoptions": "صفحات من",
        "faq": "پرسش‌های متداول",
        "faqpage": "Project:پرسش‌های متداول",
        "actions": "عملکردها",
        "create-this-page": "ایجاد این صفحه",
        "delete": "حذف",
        "deletethispage": "حذف این صفحه",
-       "undeletethispage": "احÛ\8cای این صفحه",
+       "undeletethispage": "بازگرداÙ\86ی این صفحه",
        "undelete_short": "احیای {{PLURAL:$1|یک ویرایش|$1 ویرایش}}",
        "viewdeleted_short": "نمایش {{PLURAL:$1|یک ویرایش حذف‌شده|$1 ویرایش حذف‌شده}}",
        "protect": "محافظت",
        "protect_change": "تغییر",
        "protectthispage": "محافظت از این صفحه",
-       "unprotect": "تغییر سطح محافظت",
-       "unprotectthispage": "تغییر سطح محافظت این صفحه",
-       "newpage": "صÙ\81Ø­Ù\87Ù\94 Ø¬Ø¯Û\8cد",
+       "unprotect": "تغییر محافظت",
+       "unprotectthispage": "تغییر محافظت این صفحه",
+       "newpage": "صÙ\81Ø­Ù\87Ù\94 ØªØ§Ø²Ù\87",
        "talkpage": "بحث دربارهٔ این صفحه",
        "talkpagelinktext": "بحث",
        "specialpage": "صفحهٔ ویژه",
        "otherlanguages": "به زبان‌های دیگر",
        "redirectedfrom": "(تغییرمسیر از $1)",
        "redirectpagesub": "صفحهٔ تغییرمسیر",
+       "redirectto": "تغییر مسیر به:",
        "lastmodifiedat": "این صفحه آخرین‌بار در $1 ساعت $2 تغییر یافته‌است.",
        "viewcount": "از این صفحه {{PLURAL:$1|یک‌بار|$1بار}} بازدید شده‌است.",
        "protectedpage": "صفحهٔ محافظت‌شده",
        "youhavenewmessages": "$1 دارید ($2).",
        "youhavenewmessagesfromusers": "شما از {{PLURAL:$3|یک کاربر دیگر|$3  کاربر}} $1 دارید ($2).",
        "youhavenewmessagesmanyusers": "شما از تعدادی کاربر $1 دارید ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|Ù¾Û\8cاÙ\85 Ø¬Ø¯Û\8cد|999=Ù¾Û\8cاÙ\85â\80\8cÙ\87اÛ\8c Ø¬Ø¯Û\8cد}}",
+       "newmessageslinkplural": "{{PLURAL:$1|Ù¾Û\8cاÙ\85 Ø¬Ø¯Û\8cد|999=Ù¾Û\8cاÙ\85â\80\8cÙ\87اÛ\8c ØªØ§Ø²Ù\87}}",
        "newmessagesdifflinkplural": "{{formatnum:$1}} {{PLURAL:$1|تغییر|999=تغییر}} اخیر",
        "youhavenewmessagesmulti": "پیام‌های جدیدی در $1 دارید.",
        "editsection": "ویرایش",
        "hidetoc": "نهفتن",
        "collapsible-collapse": "نهفتن",
        "collapsible-expand": "گسترش",
+       "confirmable-confirm": "{{GENDER:$1|شما}} مطمئن هستید؟",
        "confirmable-yes": "بله",
        "confirmable-no": "خیر",
        "thisisdeleted": "نمایش یا احیای $1؟",
        "laggedslavemode": "'''هشدار:''' صفحه ممکن است به‌روزرسانی‌های اخیر را شامل نشود.",
        "readonly": "پایگاه داده قفل شد",
        "enterlockreason": "دلیلی برای قفل کردن ذکر کنید، که حاوی تقریبی از زمانی باشد که قفل برداشته خواهد شد",
-       "readonlytext": "پایگاه داده در حال حاضر در برابر تغییرات و ایجاد صفحه‌ها قفل شده‌است؛ این وضعیت احتمالاً به خاطر بهینه‌سازی و رسیدگی‌های معمول است که پس از آن وضع به حالت عادی بازخواهد گشت.\n\nمدیری که آن را قفل کرده این توضیح را ارائه کرده‌است: $1",
+       "readonlytext": "پایگاه داده در حال حاضر در برابر تغییرات و ایجاد صفحات قفل شده‌است؛ این وضعیت احتمالاً به خاطر بهینه‌سازی و رسیدگی‌های معمول است که پس از آن وضع به حالت عادی بازخواهد گشت.\n\nمدیری که آن را قفل کرده این توضیح را ارائه کرده‌است: $1",
        "missing-article": "پایگاه داده متن صفحهٔ با نام «$1» $2 را که باید پیدا می‌کرد نیافت.\n\nاین مشکل معمولاً به علت دنبال‌کردن یک پیوند تفاوت تاریخ‌گذشته یا تاریخچهٔ صفحه‌ای که حذف شده‌است، رخ می‌دهد.\n\nدر غیر این صورت ممکن است اشکالی در نرم‌افزار پیدا کرده باشد.\nلطفاً این مشکل را با ذکر نشانی اینترنتی به یکی از [[Special:ListUsers/sysop|مدیران]] گزارش دهید.",
        "missingarticle-rev": "(شمارهٔ نسخه: $1)",
        "missingarticle-diff": "(تفاوت: $1، $2)",
        "viewsourcetext": "می‌توانید متن مبدأ این صفحه را مشاهده کنید یا از آن نسخه بردارید:",
        "viewyourtext": "می‌توانید کد مبدأ '''ویرایش‌هایتان''' در این صفحه را ببینید و کپی کنید:",
        "protectedinterface": "این صفحه ارائه‌دهندهٔ متنی برای واسط کاربر این نرم‌افزار در این ویکی است و به منظور پیشگیری از خرابکاری محافظت شده‌است.\nبرای افزودن یا تغییر دادن ترجمه برای همهٔ ویکی‌ها، لطفاً از [//translatewiki.net/ translatewiki.net]، پروژهٔ محلی‌سازی مدیاویکی، استفاده کنید.",
-       "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": "شما اجازهٔ ویرایش این صفحهٔ سی‌اس‌اس را ندارید، زیرا حاوی تنظیم‌های شخصی یک کاربر دیگر است.",
        "userlogin-noaccount": "حساب کاربری ندارید؟",
        "userlogin-joinproject": "در {{SITENAME}} نام‌نویسی کنید!",
        "nologin": "حساب کاربری ندارید؟ $1.",
-       "nologinlink": "Û\8cÚ© Ø­Ø³Ø§Ø¨ Ú©Ø§Ø±Ø¨Ø±Û\8c Ø¬Ø¯Û\8cد بسازید",
+       "nologinlink": "Û\8cÚ© Ø­Ø³Ø§Ø¨ Ú©Ø§Ø±Ø¨Ø±Û\8c ØªØ§Ø²Ù\87 بسازید",
        "createaccount": "ایجاد حساب کاربری",
        "gotaccount": "حساب کاربری دارید؟ $1.",
        "gotaccountlink": "به سامانه وارد شوید",
        "noname": "شما نام کاربری معتبری مشخص نکرده‌اید.",
        "loginsuccesstitle": "ورود موفقیت‌آمیز به سامانه",
        "loginsuccess": "'''شما اکنون با نام «$1» به {{SITENAME}} وارد شده‌اید.'''",
-       "nosuchuser": "کاربرÛ\8c Ø¨Ø§ Ù\86اÙ\85 Â«$1» Ù\88جÙ\88د Ù\86دارد.\nÙ\86اÙ\85 Ú©Ø§Ø±Ø¨Ø±Û\8c Ø¨Ù\87 Ø¨Ø²Ø±Ú¯Û\8c Ù\88 Ú©Ù\88Ú\86Ú©Û\8c Ø­Ø±Ù\88Ù\81 Ø­Ø³Ø§Ø³ Ø§Ø³Øª.\nاÙ\85Ù\84اÛ\8c Ù\86اÙ\85 Ø±Ø§ Ø¨Ø±Ø±Ø³Û\8c Ú©Ù\86Û\8cدØ\8c Û\8cا [[Special:UserLogin/signup|Û\8cÚ© Ø­Ø³Ø§Ø¨ Ú©Ø§Ø±Ø¨Ø±Û\8c Ø¬Ø¯Û\8cد بسازید]].",
+       "nosuchuser": "کاربرÛ\8c Ø¨Ø§ Ù\86اÙ\85 Â«$1» Ù\88جÙ\88د Ù\86دارد.\nÙ\86اÙ\85 Ú©Ø§Ø±Ø¨Ø±Û\8c Ø¨Ù\87 Ø¨Ø²Ø±Ú¯Û\8c Ù\88 Ú©Ù\88Ú\86Ú©Û\8c Ø­Ø±Ù\88Ù\81 Ø­Ø³Ø§Ø³ Ø§Ø³Øª.\nاÙ\85Ù\84اÛ\8c Ù\86اÙ\85 Ø±Ø§ Ø¨Ø±Ø±Ø³Û\8c Ú©Ù\86Û\8cدØ\8c Û\8cا [[Special:UserLogin/signup|Û\8cÚ© Ø­Ø³Ø§Ø¨ Ú©Ø§Ø±Ø¨Ø±Û\8c ØªØ§Ø²Ù\87 بسازید]].",
        "nosuchusershort": "هیچ کاربری با نام ''$1'' وجود ندارد.\nاملایتان را وارسی کنید.",
        "nouserspecified": "باید یک نام کاربری مشخص کنید.",
        "login-userblocked": "این کاربر بسته شده‌است. ورود به سامانه مجاز نیست.",
        "createaccount-text": "یک نفر برای رایانامه شما یک حساب کاربری در {{SITENAME}} با نام «$2» ایجاد کرده‌است ($4)، که گذرواژهٔ آن چنین است: $3\nشما باید به سامانه وارد شوید تا گذرواژهٔ خود را تغییر بدهید.\n\nاگر این حساب اشتباهی ساخته شده است، این پیغام را نادیده بگیرید.",
        "login-throttled": "شما به تازگی چندین‌بار برای ثبت ورود تلاش کرده‌اید.\nلطفاً پیش از آنکه دوباره تلاش کنید $1 صبر کنید.",
        "login-abort-generic": "ورود شما ناموفق بود - خاتمهٔ ناگهانی داده شد",
+       "login-migrated-generic": "حساب کاربری شما منتقل شده‌است، و نام کاربری‌تان دیگر در این ویکی وجود ندارد.",
        "loginlanguagelabel": "زبان: $1",
        "suspicious-userlogout": "درخواست شما برای خروج از سامانه رد شد زیرا به نظر می‌رسد که این درخواست توسط یک مرورگر معیوب یا پروکسی میانگیر ارسال شده باشد.",
        "createacct-another-realname-tip": "نام واقعی اختیاری است.\nاگر آن را وارد کنید هنگام ارجاع به آثارتان و انتساب آن‌ها به شما از نام واقعی‌تان استفاده خواهد شد.",
        "resetpass_text": "<!-- اینجا متن اضافه کنید -->",
        "resetpass_header": "تغییر گذرواژهٔ حساب کاربری",
        "oldpassword": "گذرواژهٔ پیشین:",
-       "newpassword": "گذرÙ\88اÚ\98Ù\87Ù\94 Ø¬Ø¯Û\8cد:",
-       "retypenew": "گذرÙ\88اÚ\98Ù\87Ù\94 Ø¬Ø¯Û\8cد را دوباره وارد کنید",
+       "newpassword": "گذرÙ\88اÚ\98Ù\87Ù\94 ØªØ§Ø²Ù\87:",
+       "retypenew": "گذرÙ\88اÚ\98Ù\87Ù\94 ØªØ§Ø²Ù\87 را دوباره وارد کنید",
        "resetpass_submit": "تنظیم گذرواژه و ورود به سامانه",
        "changepassword-success": "گذرواژهٔ شما با موفقیت تغییر داده شد!",
        "changepassword-throttled": "شما به تازگی چندین‌بار برای ثبت ورود تلاش کرده‌اید.\nلطفاً پیش از آنکه دوباره تلاش کنید $1 صبر کنید.",
        "resetpass-no-info": "برای دسترسی مستقیم به این صفحه شما باید به سامانه وارد شده باشید.",
        "resetpass-submit-loggedin": "تغییر گذرواژه",
        "resetpass-submit-cancel": "لغو",
-       "resetpass-wrong-oldpass": "گذرÙ\88اÚ\98Ù\87Ù\94 Ù\85Ù\88Ù\82ت Û\8cا Ø§Ø®Û\8cر Ù\86اÙ\85عتبر.\nÙ\85Ù\85Ú©Ù\86 Ø§Ø³Øª Ú©Ù\87 Ø´Ù\85ا Ù\87Ù\85Û\8cÙ\86Ú© Ú¯Ø°Ø±Ù\88اÚ\98Ù\87â\80\8cتاÙ\86 Ø±Ø§ Ø¨Ø§ Ù\85Ù\88Ù\81Ù\82Û\8cت ØªØºÛ\8cÛ\8cر Ø¯Ø§Ø¯Ù\87 Ø¨Ø§Ø´Û\8cد Û\8cا Ø¯Ø±Ø®Ù\88است Û\8cÚ© Ú¯Ø°Ø±Ù\88اÚ\98Ù\87Ù\94 Ù\85Ù\88Ù\82ت Ø¬Ø¯Û\8cد کرده باشید.",
+       "resetpass-wrong-oldpass": "گذرÙ\88اÚ\98Ù\87Ù\94 Ù\85Ù\88Ù\82ت Û\8cا Ø§Ø®Û\8cر Ù\86اÙ\85عتبر.\nÙ\85Ù\85Ú©Ù\86 Ø§Ø³Øª Ú©Ù\87 Ø´Ù\85ا Ù\87Ù\85Û\8cÙ\86Ú© Ú¯Ø°Ø±Ù\88اÚ\98Ù\87â\80\8cتاÙ\86 Ø±Ø§ Ø¨Ø§ Ù\85Ù\88Ù\81Ù\82Û\8cت ØªØºÛ\8cÛ\8cر Ø¯Ø§Ø¯Ù\87 Ø¨Ø§Ø´Û\8cد Û\8cا Ø¯Ø±Ø®Ù\88است Û\8cÚ© Ú¯Ø°Ø±Ù\88اÚ\98Ù\87Ù\94 Ù\85Ù\88Ù\82ت ØªØ§Ø²Ù\87 کرده باشید.",
        "resetpass-recycled": "لطفاً رمز عبور خود را به چیز دیگری غیر از رمز عبور فعلی تنظیم کنید.",
        "resetpass-temp-emailed": "شما با یک کد رایانامه شدهٔ موقت وارد شده‌اید.\nبرای پایان ورود، شما باید رمز عبور جدیدی اینجا وارد کنید:",
        "resetpass-temp-password": "گذرواژهٔ موقت:",
        "resetpass-abort-generic": "تغییر گذرواژه به دست یکی از افزونه‌ها لغو شده است.",
        "resetpass-expired": "رمز عبور شما منقضی شده‌است. لطفاً برای ورود رمز عبور جدیدی را تنظیم کنید.",
        "resetpass-expired-soft": "رمز عبور شما منقضی شده‌است، و نیاز به تنظیم مجدد دارد. لطفاً اکنون رمز عبور جدیدی را انتخاب کنید، یا برای تنظیم مجدد آن بعدآً، دکمه \"{{int:resetpass-submit-cancel}}\" را کلیک کنید.",
-       "resetpass-validity-soft": "گذرÙ\88اÙ\87Ù\94 Ø´Ù\85ا ØµØ­Û\8cØ­ Ù\86Û\8cست: $1\n\nÙ\84Ø·Ù\81اÙ\8b Û\8cÚ© Ú¯Ø°Ø±Ù\88اÚ\98Ù\87Ù\94 Ø¬Ø¯Û\8cد الآن انتخاب کنید یا بر «{{int:resetpass-submit-cancel}}» کلیک کنید که دوباره آن را بعداً انتخاب کنید.",
+       "resetpass-validity-soft": "گذرÙ\88اÙ\87Ù\94 Ø´Ù\85ا ØµØ­Û\8cØ­ Ù\86Û\8cست: $1\n\nÙ\84Ø·Ù\81اÙ\8b Û\8cÚ© Ú¯Ø°Ø±Ù\88اÚ\98Ù\87Ù\94 ØªØ§Ø²Ù\87 الآن انتخاب کنید یا بر «{{int:resetpass-submit-cancel}}» کلیک کنید که دوباره آن را بعداً انتخاب کنید.",
        "passwordreset": "بازنشانی گذرواژه",
        "passwordreset-text-one": "برای بازنشانی گذرواژه‌تان این فرم را کامل کنید.",
        "passwordreset-text-many": "{{PLURAL:$1|برای دریافت یک گذرواژهٔ موقت از راه رایانامه، یکی از زمینه‌ها را پر کنید.}}",
        "passwordreset-emailsent-capture": "یک رایانامهٔ بازنشانی که در پایین نمایش داده شده، فرستاده شده است.",
        "passwordreset-emailerror-capture": "رایانامهٔ بازنشانی، که در زیر نمایش داده شده، ایجاد شد، ولی ارسال آن به {{GENDER:$2|کاربر}} موفقیت‌آمیز نبود: $1",
        "changeemail": "تغییر نشانی رایانامه",
-       "changeemail-header": "تغییر نشانی رایانامهٔ حساب کاربری",
        "changeemail-text": "این فرم را تکمیل کنید تا آدرس رایانامه‌تان تغییر یابد. برای این که این تغییر را تأیید کنید لازم است گذرواژهٔ خود را وارد کنید.",
        "changeemail-no-info": "برای دسترسی مستقیم به این صفحه شما باید به سامانه وارد شده باشید.",
        "changeemail-oldemail": "نشانی رایانامهٔ کنونی:",
-       "changeemail-newemail": "Ù\86شاÙ\86Û\8c Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87Ù\94 Ø¬Ø¯Û\8cد:",
+       "changeemail-newemail": "Ù\86شاÙ\86Û\8c Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87Ù\94 ØªØ§Ø²Ù\87:",
        "changeemail-none": "(هیچ)",
-       "changeemail-password": " {{SITENAME}} رمز عبور شما:",
+       "changeemail-password": "گذرواژهٔ {{SITENAME}} شما:",
        "changeemail-submit": "تغییر رایانامه",
-       "changeemail-cancel": "انصراف",
        "changeemail-throttled": "شما به مراتب برای ورود تلاش کرده‌اید.\nلطفاً پیش از آنکه دوباره تلاش کنید $1 صبر کنید.",
        "resettokens": "بازنشانی شناساننده‌ها",
        "resettokens-text": "شما می توانید شناساننده‌ها که اجازهٔ دسترسی به برخی داده‌های خصوصی مرتبط با حسابتان را می‌دهد بازنشانی کنید.\nدر صورتی باید این کار را انجام دهید که تصادقاً آن‌ها را با کسی در میان گذاشته‌اید یا به حسابتان نفوذ شده است.",
        "showpreview": "پیش‌نمایش",
        "showdiff": "نمایش تغییرات",
        "blankarticle": "<strong>هشدار:</strong> شما در حال ایجاد صفحه خالی هستید.\nاگر \"{{int:savearticle}}\" را دوباره کلیک کنید، صفحه بدون محتوا ایجاد می‌شود.",
-       "anoneditwarning": "'''هشدار:''' شما به سامانه وارد نشده‌اید.\nنشانی آی‌پی شما در تاریخچهٔ ویرایش این صفحه ثبت خواهد شد.",
+       "anoneditwarning": "<strong>هشدار:</strong> شما وارد نشده‌اید. نشانی آی‌پی شما برای عموم قابل مشاهده خواهد بود اگر هر تغییری ایجاد کنید. اگر <strong>[$1 وارد شوید]</strong> یا <strong>[$2 یک حساب کاربری بسازید]</strong>، ویرایش‌هایتان به نام کاربری‌تان نسبت داده خواهد شد، همراه با مزایای دیگر.",
        "anonpreviewwarning": "''شما به سامانه وارد نشده‌اید. ذخیره کردن باعث می‌شود که نشانی آی‌پی شما در تاریخچهٔ این صفحه ثبت گردد.''",
        "missingsummary": "'''یادآوری:''' شما خلاصهٔ ویرایش ننوشته‌اید.\nاگر دوباره دکمهٔ «{{int:savearticle}}» را فشار دهید ویرایش شما بدون آن ذخیره خواهد شد.",
        "missingcommenttext": "لطفاً توضیحی در زیر بیفزایید.",
        "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": "ورود به سامانه لازم است",
        "loginreqpagetext": "برای دیدن صفحه‌های دیگر باید $1.",
        "accmailtitle": "گذرواژه فرستاده شد.",
        "accmailtext": "یک گذرواژهٔ تصادفی برای [[User talk:$1|$1]] به $2 فرستاده شد. می‌توان آن را از صفحهٔ ''[[Special:ChangePassword|تغییر گذرواژه]]'' که هنگام ثبت ورود نمایش می‌یابد تغییر داد.",
-       "newarticle": "(جدÛ\8cد)",
+       "newarticle": "(تازÙ\87)",
        "newarticletext": "شما پیوندی را دنبال کرده‌اید و به صفحه‌ای رسیده‌اید که هنوز وجود ندارد.\nبرای ایجاد صفحه، در مستطیل زیر شروع به نوشتن کنید (برای اطلاعات بیشتر به [$1 صفحهٔ راهنما] مراجعه کنید).\nاگر به اشتباه اینجا آمده‌اید، دکمهٔ «بازگشت» مرورگرتان را بزنید.",
        "anontalkpagetext": "----''این صفحهٔ بحث برای کاربر گمنامی است که هنوز حسابی درست نکرده است یا از آن استفاده نمی‌کند.\nبنا بر این برای شناسایی‌اش مجبوریم از نشانی آی‌پی عددی استفاده کنیم.\nچنین نشانی‌های آی‌پی ممکن است توسط چندین کاربر به شکل مشترک استفاده شود.\nاگر شما کاربر گمنامی هستید و تصور می‌کنید اظهار نظرات نامربوط به شما صورت گرفته است، لطفاً برای پیشگیری از اشتباه گرفته شدن با کاربران گمنام دیگر در آینده [[Special:UserLogin/signup|حسابی ایجاد کنید]] یا [[Special:UserLogin|به سامانه وارد شوید]].''",
        "noarticletext": "این صفحه هم‌اکنون دارای هیچ متنی نیست.\nشما می‌توانید در صفحه‌های دیگر [[Special:Search/{{PAGENAME}}|عنوان این صفحه را جستجو کنید]]،\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} سیاهه‌های مرتبط را جستجو کنید]،\nیا [{{fullurl:{{FULLPAGENAME}}|action=edit}} این صفحه را ویرایش کنید]</span>.",
-       "noarticletext-nopermission": "این صفحه هم‌اکنون متنی ندارد.\nشما می‌توانید در دیگر صفحه‌ها [[Special:Search/{{PAGENAME}}|این عنوان را جستجو کنید]]،\nیا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} سیاهه‌های مرتبط را بگردید]</span> ولی شما اجازه ایجاد این صفحه را ندارید.",
+       "noarticletext-nopermission": "این صفحه هم‌اکنون متنی ندارد.\nشما می‌توانید در دیگر صفحات [[Special:Search/{{PAGENAME}}|این عنوان را جستجو کنید]]،\nیا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} سیاهه‌های مرتبط را بگردید]</span> ولی شما اجازه ایجاد این صفحه را ندارید.",
        "missing-revision": "ویرایش #$1 از صفحهٔ «{{FULLPAGENAME}}» موجود نیست.\n\nمعمولاً در اثر پیوند به تاریخچهٔ به‌روز نشدهٔ صفحهٔ حذف شده است.\nمی‌توانید جزئیات بیشتر را در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] بیابید.",
        "userpage-userdoesnotexist": "حساب کاربر «<nowiki>$1</nowiki>» ثبت نشده‌است.\nلطفاً مطمئن شوید که می‌خواهید این صفحه را ایجاد یا ویرایش کنید.",
        "userpage-userdoesnotexist-view": "حساب کاربری «$1» ثبت نشده‌است.",
        "editing": "در حال ویرایش $1",
        "creating": "ایجاد $1",
        "editingsection": "در حال ویرایش $1 (بخش)",
-       "editingcomment": "در Ø­Ø§Ù\84 Ù\88Û\8cراÛ\8cØ´ $1 (بخش Ø¬Ø¯Û\8cد)",
+       "editingcomment": "در Ø­Ø§Ù\84 Ù\88Û\8cراÛ\8cØ´ $1 (بخش ØªØ§Ø²Ù\87)",
        "editconflict": "تعارض ویرایشی: $1",
        "explainconflict": "از وقتی ویرایش این صفحه را آغاز کرده‌اید شخص دیگری آن را تغییر داده‌است.\nناحیهٔ متنی بالایی شامل متن صفحه به شکل کنونی آن است.\nتغییرات شما در ناحیهٔ متنی پایینی نشان داده شده‌است.\nشما باید تغییراتتان را با متن کنونی ترکیب کنید.\nبا فشردن دکمهٔ «{{int:savearticle}}» '''فقط''' متن ناحیهٔ متنی بالایی ذخیره خواهد شد.",
        "yourtext": "متن شما",
        "storedversion": "نسخهٔ ذخیره شده",
-       "nonunicodebrowser": "'''هشدار: مرورگر شما با استانداردهای یونیکد سازگار نیست.'''\nراه حلی به کار گرفته شده تا شما بتوانید صفحه‌ها را با امنیت ویرایش کنید: کاراکترهای غیر ASCII به صورت کدهایی در مبنای شانزده به شما نشان داده می‌شوند.",
+       "nonunicodebrowser": "'''هشدار: مرورگر شما با استانداردهای یونیکد سازگار نیست.'''\nراه حلی به کار گرفته شده تا شما بتوانید صفحات را با امنیت ویرایش کنید: کاراکترهای غیر ASCII به صورت کدهایی در مبنای شانزده به شما نشان داده می‌شوند.",
        "editingold": "'''هشدار: شما در حال ویرایش نسخه‌ای قدیمی از این صفحه هستید.'''\nاگر ذخیره‌اش کنید، هر تغییری که پس از این نسخه انجام شده‌است از بین خواهد رفت.",
        "yourdiff": "تفاوت‌ها",
        "copyrightwarning": "لطفاً توجه داشته باشید که فرض می‌شود کلیهٔ مشارکت‌های شما با {{SITENAME}} تحت «$2» منتشر می‌شوند (برای جزئیات بیشتر به $1 مراجعه کنید).\nاگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش شده و به دلخواه توزیع شود، اینجا نفرستیدشان.<br />\nهمچنین شما دارید به ما قول می‌دهید که خودتان این را نوشته‌اید، یا آن را از یک منبع آزاد با مالکیت عمومی یا مشابه آن برداشته‌اید.\n'''کارهای دارای حق تکثیر (copyright) را بی‌اجازه نفرستید!'''",
        "template-semiprotected": "(نیمه‌حفاظت‌شده)",
        "hiddencategories": "این صفحه در {{PLURAL:$1|یک ردهٔ پنهان|$1 ردهٔ پنهان}} قرار دارد:",
        "edittools": "<!-- متن این قسمت زیر صفحه‌های ویرایش و بارگذاری نشان داده می‌شود -->",
-       "nocreatetext": "{{SITENAME}} Ù\82ابÙ\84Û\8cت Ø§Û\8cجاد ØµÙ\81Ø­Ù\87â\80\8cÙ\87اÛ\8c Ø¬Ø¯Û\8cد را محدود کرده‌است.\nمی‌توانید بازگردید و صفحه‌ای موجود را ویرایش کنید یا اینکه  [[Special:UserLogin|به سامانه وارد شوید یا حساب کاربری ایجاد کنید]].",
-       "nocreate-loggedin": "Ø´Ù\85ا Ø§Ø¬Ø§Ø²Ù\87Ù\94 Ø§Û\8cجاد ØµÙ\81Ø­Ù\87â\80\8cÙ\87اÛ\8c Ø¬Ø¯Û\8cد را ندارید.",
+       "nocreatetext": "{{SITENAME}} Ù\82ابÙ\84Û\8cت Ø§Û\8cجاد ØµÙ\81Ø­Ù\87â\80\8cÙ\87اÛ\8c ØªØ§Ø²Ù\87 را محدود کرده‌است.\nمی‌توانید بازگردید و صفحه‌ای موجود را ویرایش کنید یا اینکه  [[Special:UserLogin|به سامانه وارد شوید یا حساب کاربری ایجاد کنید]].",
+       "nocreate-loggedin": "Ø´Ù\85ا Ø§Ø¬Ø§Ø²Ù\87Ù\94 Ø§Û\8cجاد ØµÙ\81Ø­Ù\87â\80\8cÙ\87اÛ\8c ØªØ§Ø²Ù\87 را ندارید.",
        "sectioneditnotsupported-title": "ویرایش بخش‌ها پشتیبانی نمی‌شود",
        "sectioneditnotsupported-text": "این صفحه از ویرایش بخش‌ها پشتیبانی نمی‌کند.",
        "permissionserrors": "خطای سطح دسترسی",
        "postedit-confirmation-created": "صفحه ایجاد شده است.",
        "postedit-confirmation-restored": "صفحه بازیابی شده است.",
        "postedit-confirmation-saved": "ویرایش شما ذخیره شد.",
-       "edit-already-exists": "اÙ\85کاÙ\86 Ø³Ø§Ø®ØªÙ\86 ØµÙ\81Ø­Ù\87Ù\94 Ø¬Ø¯Û\8cد وجود ندارد.\nاین صفحه از قبل وجود داشته‌است.",
+       "edit-already-exists": "اÙ\85کاÙ\86 Ø³Ø§Ø®ØªÙ\86 ØµÙ\81Ø­Ù\87Ù\94 ØªØ§Ø²Ù\87 وجود ندارد.\nاین صفحه از قبل وجود داشته‌است.",
        "defaultmessagetext": "متن پیش‌فرض پیغام",
        "content-failed-to-parse": "عدم موفقیت در تجزیه محتوای $2 برای مدل $1: $3",
        "invalid-content-data": "داده محتوای نامعتبر",
        "content-model-text": "متنی ساده",
        "content-model-javascript": "جاوااسکریپت",
        "content-model-css": "سی‌اس‌اس",
+       "duplicate-args-category": "صفحه‌های دارای آرگومان تکراری در فراخوانی الگو",
+       "duplicate-args-category-desc": "صفحاتی که دارای آرگومان تکراری هستند مانند، <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> یا <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''هشدار:''' این صفحه حاوی تعدادی زیادی فراخوانی دستورهای تجزیه‌گر است.\n\nتعداد آن‌ها باید کمتر از $2 {{PLURAL:$2|فراخوانی|فراخوانی}} باشد، و اینک {{PLURAL:$1|$1 فراخوانی|$1 فراخوانی}} است.",
        "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": "ردÙ\87 Ø¨Ø±Ø§Û\8c ØµÙ\81حاتÛ\8c Ú©Ù\87 Ø¯Ø± Ø¢Ù\86Ù\87ا Ø´Ù\85ارÙ\86دÙ\87 فراتر رفته است.",
-       "node-count-exceeded-warning": "صفحه از حداکثر تعداد گره، فراتر است",
+       "node-count-exceeded-category-desc": "اÛ\8cÙ\86 ØµÙ\81Ø­Ù\87 Ø§Ø² ØªØ¹Ø¯Ø§Ø¯ Ø­Ø¯Ø§Ú©Ø«Ø± Ø§Ø´Ú©Ø§Ù\84 فراتر رفته است.",
+       "node-count-exceeded-warning": "صفحه از حداکثر تعداد گره فراتر رفته‌است",
        "expansion-depth-exceeded-category": "صفحه‌هایی که از حداکثر عمق بسط دادن تجاوز کرده‌اند",
-       "expansion-depth-exceeded-category-desc": "رده برای صفحاتی که در آنها عمق گسترش فراتر رفته است.",
+       "expansion-depth-exceeded-category-desc": "ردÙ\87 Ø¨Ø±Ø§Û\8c ØµÙ\81حاتÛ\8c Ú©Ù\87 Ø¯Ø± Ø¢Ù\86Ù\87ا Ø§Ø² Ø¹Ù\85Ù\82 Ú¯Ø³ØªØ±Ø´ Ù\81راتر Ø±Ù\81تÙ\87 Ø§Ø³Øª.",
        "expansion-depth-exceeded-warning": "صفحه حداکثر عمق بسط دادن تجاوز کرد",
        "parser-unstrip-loop-warning": "حلقه در دستور unstrip پیدا شد",
        "parser-unstrip-recursion-limit": "از حداکثر ارجاع در دستور unstrip تجاوز شد ($1)",
        "undo-success": "این ویرایش را می‌توان خنثی کرد.\nلطفاً تفاوت زیر را بررسی کنید تا تأیید کنید که این چیزی است که می‌خواهید انجام دهید، سپس تغییرات زیر را ذخیره کنید تا خنثی‌سازی ویرایش را به پایان ببرید.",
        "undo-failure": "به علت تعارض با ویرایش‌های میانی، این ویرایش را نمی‌توان خنثی کرد.",
        "undo-norev": "این ویرایش را نمی‌توان خنثی کرد چون وجود ندارد یا حذف شده‌است.",
-       "undo-nochange": "بÙ\87 Ù\86ظر Ù\85Û\8câ\80\8cرسد Ù\88Û\8cراÛ\8cØ´ Ø¯Ø± Ø­Ø§Ù\84 Ø­Ø§Ø¶Ø± Ø¨Ø§Ø·Ù\84 Ø¨Ù\88ده است.",
+       "undo-nochange": "بÙ\87 Ù\86ظر Ù\85Û\8câ\80\8cرسد Ù\88Û\8cراÛ\8cØ´ Ø§Ø² Ù¾Û\8cØ´ Ù\88اگرداÙ\86Û\8c Ø´ده است.",
        "undo-summary": "خنثی‌سازی ویرایش $1 توسط [[Special:Contributions/$2|$2]] ([[User talk:$2|بحث]])",
        "undo-summary-username-hidden": "خنثی‌سازی نسخهٔ $1 به دست یک کاربر پنهان‌شده",
        "cantcreateaccounttitle": "نمی‌توان حساب باز کرد",
        "history-feed-title": "تاریخچهٔ ویرایش‌ها",
        "history-feed-description": "تاریخچهٔ ویرایش‌های این صفحه در ویکی",
        "history-feed-item-nocomment": "$1 در $2",
-       "history-feed-empty": "صفحهٔ درخواست شده وجود ندارد.\nممکن است که از ویکی حذف یا اینکه نامش تغییر داده شده باشد.\nصفحه‌های جدید را برای موارد مرتبط در این ویکی [[Special:Search|جستجو کنید]].",
+       "history-feed-empty": "صفحهٔ درخواست شده وجود ندارد.\nممکن است که از ویکی حذف یا اینکه نامش تغییر داده شده باشد.\nصفحات تازه را برای موارد مرتبط در این ویکی [[Special:Search|جستجو کنید]].",
        "rev-deleted-comment": "(خلاصه ویرایش حذف شد)",
        "rev-deleted-user": "(نام کاربری حذف شد)",
        "rev-deleted-event": "(مورد از سیاهه پاک شده)",
        "revdelete-radio-set": "پنهان",
        "revdelete-radio-unset": "نمایان",
        "revdelete-suppress": "از دسترسی مدیران به داده نیز مانند سایر کاربران جلوگیری به عمل آید.",
-       "revdelete-unsuppress": "خاتÙ\85Ù\87Ù\94 Ù\85حدÙ\88دÛ\8cتâ\80\8cÙ\87ا Ø¯Ø± Ù\85Ù\88رد Ù\86سخÙ\87â\80\8cÙ\87اÛ\8c Ø§Ù\86تخاب‌شده",
+       "revdelete-unsuppress": "حذÙ\81 Ù\85حدÙ\88دÛ\8cتâ\80\8cÙ\87ا Ø¯Ø± Ø¨Ø§Ø²Ø¨Û\8cÙ\86Û\8câ\80\8cÙ\87اÛ\8c ØªØ±Ù\85Û\8cÙ\85‌شده",
        "revdelete-log": "دلیل:",
        "revdelete-submit": "اعمال بر {{PLURAL:$1|نسخهٔ|نسخه‌های}} انتخاب شده",
        "revdelete-success": "'''پیدایی نسخه با موفقیت به روز شد.'''",
        "revdelete-offender": "نویسنده نسخه:",
        "suppressionlog": "سیاههٔ فرونشانی",
        "suppressionlogtext": "در زیر فهرستی از آخرین حذف‌ها و قطع دسترسی‌هایی که حاوی محتوایی هستند که از مدیران پنهان شده‌اند را می‌بینید.\nبرای مشاهدهٔ فهرستی از قطع دسترسی‌های فعال [[Special:BlockList|فهرست بسته‌شده‌ها]] را ببینید.",
-       "mergehistory": "ادغام تاریخچه صفحه‌ها",
+       "mergehistory": "ادغام تاریخچه صفحات",
        "mergehistory-header": "این صفحه به شما این امکان را می‌دهد که نسخه‌های تاریخچهٔ یک مقاله را با یک مقاله دیگر ادغام کنید.\nاطمینان حاصل کنید که این تغییر به توالی زمانی ویرایش‌ها لطمه نخواهد زد.",
        "mergehistory-box": "ادغام نسخه‌های دو صفحه:",
        "mergehistory-from": "صفحهٔ مبدأ:",
        "mergehistory-go": "نمایش تاریخچه قابل ادغام",
        "mergehistory-submit": "ادغام نسخه‌ها",
        "mergehistory-empty": "هیچ‌یک از نسخه‌ها قابل ادغام نیستند.",
-       "mergehistory-success": "$3 نسخه از [[:$1]]  با موفقیت در [[:$2]] ادغام {{PLURAL:$3|شد|شدند}}.",
+       "mergehistory-success": "$3 نسخه از [[:$1]]  با موفقیت در [[:$2]] ادغام {{PLURAL:$3|شد}}.",
        "mergehistory-fail": "ادغام تاریخچه ممکن نیست، لطفاً گزینه‌های صفحه و زمان را بازبینی کنید.",
        "mergehistory-fail-toobig": "نمی‌توان ادغام تاریخچه را انجام داد که بیشتر از محدودیت $1 {{PLURAL:$1|نسخه}} انتقال داده خواهد شد.",
        "mergehistory-no-source": "صفحهٔ مبدأ $1 وجود ندارد.",
        "mergehistory-same-destination": "صفحهٔ مبدأ و مقصد نمی‌تواند یکی باشد",
        "mergehistory-reason": "دلیل:",
        "mergelog": "سیاههٔ ادغام",
-       "pagemerge-logentry": "[[$1]] در [[$2]] ادغام شد (نسخه‌های تا $3)",
        "revertmerge": "واگردانی ادغام",
        "mergelogpagetext": "در زیر سیاههٔ آخرین موارد ادغام تاریخچهٔ یک صفحه در صفحه‌ای دیگر را می‌بینید.",
        "history-title": "$1: تاریخچهٔ ویرایش‌ها",
        "difference-title": "$1: تفاوت بین نسخه‌ها",
-       "difference-title-multipage": "$1 و $2: تفاوت بین صفحه‌ها",
-       "difference-multipage": "(تفاوت بین صفحه‌ها)",
+       "difference-title-multipage": "$1 و $2: تفاوت بین صفحات",
+       "difference-multipage": "(تفاوت بین صفحات)",
        "lineno": "سطر $1:",
        "compareselectedversions": "مقایسهٔ نسخه‌های انتخاب‌شده",
-       "showhideselectedversions": "نمایش/نهفتن نسخه‌های انتخاب‌شده",
+       "showhideselectedversions": "تغییر پدیداری نسخه‌های انتخاب‌شده",
        "editundo": "خنثی‌سازی",
        "diff-empty": "(بدون تفاوت)",
-       "diff-multi-sameuser": "({{PLURAL:$1|یک نسخهٔ میانی|$1 نسخهٔ میانی}} توسط کاربر مشابهی که نشان داده نشده)",
+       "diff-multi-sameuser": "({{PLURAL:$1|یک نسخهٔ میانی|$1 نسخهٔ میانی}}ِ همین کاربر نمایش داده نشده است)",
        "diff-multi-otherusers": "({{PLURAL:$1|یک نسخهٔ متوسط|$1 نسخه‌های متوسط}} توسط {{PLURAL:$2|کاربر دیگری|$2 کاربران}} نشان داده نشده)",
        "diff-multi-manyusers": "({{PLURAL:$1|یک|$1}} ویرایش میانی توسط بیش از {{PLURAL:$2|یک|$2}} کاربر نشان داده نشده‌است)",
        "difference-missing-revision": "{{PLURAL:$2|یک ویرایش|$2 ویرایش}}  از تفاوت نسخه‌ها ($1) {{PLURAL:$2|یافت|یافت}}  نشد.\n\nمعمولاً در اثر پیوند به تاریخچهٔ به‌روز نشدهٔ صفحهٔ حذف شده است.\nمی‌توانید جزئیات بیشتر را در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] بیابید.",
        "search-result-category-size": "{{PLURAL:$1|یک عضو|$1 عضو}} ({{PLURAL:$2|یک زیررده|$2 زیررده}}، {{PLURAL:$3|یک پرونده|$3 پرونده}})",
        "search-redirect": "(تغییرمسیر $1)",
        "search-section": "(بخش $1)",
+       "search-category": "(رده  $1)",
        "search-file-match": "(تشابه محتوی پرونده)",
        "search-suggest": "آیا منظورتان این بود: $1",
        "search-interwiki-caption": "پروژه‌های خواهر",
        "searchrelated": "مرتبط",
        "searchall": "همه",
        "showingresults": "نمایش حداکثر {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} در پایین، آغاز از شماره '''$2'''.",
-       "showingresultsinrange": "نمایش در پائین تا {{PLURAL:$1|<strong>1</strong> نتیجه|<strong>$1</strong> نتیجه}} in range #<strong>$2</strong> تا #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|نتیجهٔ '''$1''' از '''$3'''|نتایج '''$1 تا $2''' از '''$3'''}} برای '''$4'''",
+       "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": "جستجوی پیشرفته",
        "powersearch-ns": "جستجو در فضاهای نام:",
        "preferences": "ترجیحات",
        "mypreferences": "ترجیحات",
        "prefs-edits": "تعداد ویرایش‌ها:",
-       "prefsnologintext2": "لطفاً  $1  برای تنظیم ترجیحات کاربر.",
+       "prefsnologintext2": "خواهشمند است برای تغییر تنظیمات‌تان وارد شوید.",
        "prefs-skin": "پوسته",
        "skin-preview": "پیش‌نمایش",
        "datedefault": "بدون ترجیح",
        "yourlanguage": "زبان:",
        "yourvariant": "گویش زبان محتوا:",
        "prefs-help-variant": "گویش انتخابی شما برای نمایش محتوای صفحه‌ها در این ویکی.",
-       "yournick": "اÙ\85ضاÛ\8c Ø¬Ø¯Û\8cد:",
+       "yournick": "اÙ\85ضاÛ\8c ØªØ§Ø²Ù\87:",
        "prefs-help-signature": "نظرهای نوشته‌شده در صفحهٔ بحث باید با «<nowiki>~~~~</nowiki>» امضا شوند؛ این علامت به‌صورت خودکار به امضای شما و مهر تاریخ تبدیل خواهد شد.",
        "badsig": "امضای خام نامجاز.\nلطفاً برچسب‌های اچ‌تی‌ام‌ال را بررسی کنید.",
        "badsiglength": "امضای شما بیش از اندازه طولانی است.\nامضا باید کمتر از $1 {{PLURAL:$1|نویسه}} طول داشته باشد.",
        "gender-female": "زن",
        "prefs-help-gender": "انجام این تنظیم اختیاری است.\nنرم‌افزار از این مقدار برای اشارهٔ صحیح به جنسیت و ذکر شما برای دیگران با استفاده از دستور زبان درست استفاده می‌کند.\nاین اطلاعات عمومی خواهند بود.",
        "email": "رایانامه",
-       "prefs-help-realname": "نام واقعی اختیاری است.\nاگر آن را وارد کنید هنگام ارجاع به آثارتان و انتساب آن‌ها به شما از نام واقعی‌تان استفاده خواهد شد.",
+       "prefs-help-realname": "نام واقعی اختیاری است.\nاگر وارد شده است هنگام ارجاع به آثارتان و انتساب آن‌ها به شما ممکن است از نام واقعی‌تان استفاده شود.",
        "prefs-help-email": "نشانی رایانامه اختیاری‌است، اما فرستادن گذرواژه‌ای جدید را اگر گذرواژهٔ خود را فراموش کنید ممکن می‌کند.",
        "prefs-help-email-others": "شما همچنین می‌توانید انتخاب کنید که کاربران بتوانند از طریق پیوندی در صفحهٔ کاربری یا صفحهٔ بحث کاربری‌تان به شما رایانامه بفرستند.\nنشانی رایانامه شما زمانی که دیگران با شما تماس بگیرند فاش نمی‌شود.",
        "prefs-help-email-required": "نشانی رایانامه الزامی‌است.",
        "prefs-tokenwatchlist": "نشانه",
        "prefs-diffs": "تفاوت‌ها",
        "prefs-help-prefershttps": "تأثیر این ترجیح بعد از ورود بعدی شما اعمال خواهد شد.",
+       "prefswarning-warning": "تغییراتتان به ترجیحات هنوز ذحیره نشده است.\nاگر این صفحه بدون کلیک بر «$1» ترک کنید ترجیحاتتان ذخیره نخواهد شد.",
        "prefs-tabs-navigation-hint": "نکته: شما می توانید از کلیدهای جهت‌نمای چپ و راست برای حرکت بین زبانه‌ها در فهرست زبانه‌ها استفاده کنید.",
        "email-address-validity-valid": "نشانی رایانامه معتبر به نظر می‌رسد",
        "email-address-validity-invalid": "نشانی رایانامهٔ معتبر وارد کنید",
        "group-autoconfirmed-member": "{{GENDER:$1|کاربر تأییدشده}}",
        "group-bot-member": "ربات",
        "group-sysop-member": "{{GENDER:$1|مدیر}}",
-       "group-bureaucrat-member": "{{GENDER:$1|دیوانسالار}}",
+       "group-bureaucrat-member": "{{GENDER:$1|دیوانسالار}}",
        "group-suppress-member": "{{GENDER:$1|نظارت}}",
        "grouppage-user": "{{ns:project}}:کاربران",
        "grouppage-autoconfirmed": "{{ns:project}}:کاربران تأییدشده",
        "right-createaccount": "ایجاد حساب‌های کاربری",
        "right-minoredit": "علامت‌زدن ویرایش‌ها به‌عنوان جزئی",
        "right-move": "انتقال صفحه",
-       "right-move-subpages": "انتقال صفحÙ\87â\80\8cÙ\87ا Ø¨Ù\87 Ù\87Ù\85راÙ\87 Ø²Û\8cرâ\80\8cصÙ\81Ø­Ù\87â\80\8cÙ\87اÛ\8cشاÙ\86",
+       "right-move-subpages": "انتقال صفحات Ø¨Ù\87 Ù\87Ù\85راÙ\87 Ø²Û\8cرâ\80\8cصÙ\81حاتâ\80\8cشاÙ\86",
        "right-move-rootuserpages": "انتقال صفحه‌های کاربری سرشاخه",
        "right-move-categorypages": "انتقال صفحهٔ رده",
        "right-movefile": "انتقال پرونده‌ها",
        "right-purge": "پاک‌کردن میانگیر صفحه بدون مشاهدهٔ صفحهٔ تأیید",
        "right-autoconfirmed": "از محدودیت‌های سرعت آی‌پی‌-محور تاثیر نمی‌گیرد",
        "right-bot": "تلقی‌شده به عنوان یک فرآیند خودکار",
-       "right-nominornewtalk": "Ù\88Û\8cراÛ\8cØ´ Ø¬Ø²Ø¦Û\8c ØµÙ\81Ø­Ù\87â\80\8cÙ\87اÛ\8c Ø¨Ø­Ø« Ø¨Ù\87 Ø´Ú©Ù\84Û\8c Ú©Ù\87 Ø¨Ø§Ø¹Ø« Ø§Ø¹Ù\84اÙ\86 Ù¾Û\8cغاÙ\85 Ø¬Ø¯Û\8cد نشود",
+       "right-nominornewtalk": "Ù\88Û\8cراÛ\8cØ´ Ø¬Ø²Ø¦Û\8c ØµÙ\81Ø­Ù\87â\80\8cÙ\87اÛ\8c Ø¨Ø­Ø« Ø¨Ù\87 Ø´Ú©Ù\84Û\8c Ú©Ù\87 Ø¨Ø§Ø¹Ø« Ø§Ø¹Ù\84اÙ\86 Ù¾Û\8cغاÙ\85 ØªØ§Ø²Ù\87 نشود",
        "right-apihighlimits": "سقف بالاتر استفاده از API",
        "right-writeapi": "استفاده از API مربوط به نوشتن",
-       "right-delete": "حذف صفحه‌ها",
+       "right-delete": "حذف صفحات",
        "right-bigdelete": "حذف صفحه‌های دارای تاریخچهٔ بزرگ",
        "right-deletelogentry": "حذف و احیای مدخل‌های خاصی از سیاهه",
        "right-deleterevision": "حذف و احیای نسخه‌های خاصی از صفحه",
        "right-deletedhistory": "مشاهدهٔ موارد حذف‌شده از تاریخچه، بدون دیدن متن آن‌ها",
        "right-deletedtext": "مشاهدهٔ متن حذف‌شده و تغییرات بین نسخه‌های حذف‌شده",
        "right-browsearchive": "جستجوی صفحه‌های حذف‌شده",
-       "right-undelete": "احیای صفحه‌ها",
+       "right-undelete": "احیای صفحات",
        "right-suppressrevision": "مشاهده  و احیای ویرایش‌هایی که از کاربران پنهان شده‌اند",
        "right-viewsuppressed": "مشاهده نسخه‌هایی که از کاربران مخفی شده‌اند",
        "right-suppressionlog": "مشاهدهٔ سیاهه‌های خصوصی",
        "right-ipblock-exempt": "تاثیر نپذیرفتن از قطع دسترسی‌های آی‌پی، خودکار یا فاصله‌ای",
        "right-proxyunbannable": "تاثیر نپذیرفتن از قطع دسترسی خودکار پروکسی‌ها",
        "right-unblockself": "بازکردن دسترسی خود",
-       "right-protect": "تغییر میزان محافظت صفحه‌ها و ویرایش صفحه‌های محافظت‌شده آبشاری",
-       "right-editprotected": "ویرایش صفحه‌های محافظت شده به عنوان \"{{int:protect-level-sysop}}\"",
+       "right-protect": "تغییر میزان محافظت صفحات و ویرایش صفحات محافظت‌شده آبشاری",
+       "right-editprotected": "ویرایش صفحه‌های محافظت‌شده به‌عنوان «{{int:protect-level-sysop}}»",
        "right-editsemiprotected": "ویرایش صفحه حفاظت‌شده به عنوان \"{{int:protect-level-autoconfirmed}}\"",
        "right-editinterface": "ویرایش واسط کاربری",
        "right-editusercssjs": "ویرایش صفحه‌های CSS و JS دیگر کاربرها",
        "right-editmyusercss": "پرونده‌های سی‌اس‌اس کاربری خود را ویرایش کنید",
        "right-editmyuserjs": "پرونده‌های جاوااسکریپت کاربری خود را ویرایش کنید",
        "right-viewmywatchlist": "فهرست پیگیری‌های خود را ببینید",
-       "right-editmywatchlist": "فهرست پیگیری‌های خود را ویرایش کنید. توجه داشته باشید برخی از اقدامات حتی بدون این دسترسی هم صفحه‌ها را اضافه می‌کنند.",
+       "right-editmywatchlist": "فهرست پیگیری‌های خود را ویرایش کنید. توجه داشته باشید برخی از اقدامات حتی بدون این دسترسی هم صفحات را اضافه می‌کنند.",
        "right-viewmyprivateinfo": "داده‌های خصوصی خود را ببینید (مانند رایانشانی و نام واقعی)",
        "right-editmyprivateinfo": "داده‌های خصوصی خود را ویرایش کنید (مانند رایانشانی و نام واقعی)",
        "right-editmyoptions": "ترجیحات خود را ویرایش",
        "right-autopatrol": "گشت زدن خودکار ویرایش‌های خودش",
        "right-patrolmarks": "مشاهدهٔ برچسب گشت تغییرات اخیر",
        "right-unwatchedpages": "مشاهدهٔ فهرست صفحه‌هایی که پی‌گیری نمی‌شوند",
-       "right-mergehistory": "ادغام تاریخچهٔ صفحه‌ها",
+       "right-mergehistory": "ادغام تاریخچهٔ صفحات",
        "right-userrights": "ویرایش تمام اختیارات کاربرها",
        "right-userrights-interwiki": "ویرایش اختیارات کاربرهای ویکی‌های دیگر",
        "right-siteadmin": "قفل‌کردن و بازکردن پایگاه داده‌ها",
        "recentchanges-summary": "آخرین تغییرات ویکی را در این صفحه پی‌گیری کنید.",
        "recentchanges-noresult": "هیچ تغییری در طول دورهٔ تعیین‌شده با این معیارها هم‌خوانی نداشت.",
        "recentchanges-feed-description": "آخرین تغییرات ویکی را در این خوراک پی‌گیری کنید.",
-       "recentchanges-label-newpage": "اÛ\8cÙ\86 Ù\88Û\8cراÛ\8cØ´ ØµÙ\81Ø­Ù\87â\80\8cاÛ\8c Ø¬Ø¯Û\8cد ایجاد کرد",
+       "recentchanges-label-newpage": "اÛ\8cÙ\86 Ù\88Û\8cراÛ\8cØ´ ØµÙ\81Ø­Ù\87â\80\8cاÛ\8c ØªØ§Ø²Ù\87 ایجاد کرد",
        "recentchanges-label-minor": "این یک ویرایش جزئی‌است",
        "recentchanges-label-bot": "این ویرایش را یک ربات انجام داده‌است",
        "recentchanges-label-unpatrolled": "این ویرایش هنوز گشت‌زنی نشده‌است",
        "recentchanges-label-plusminus": "حجم صفحه به اندازه این بایت‌ها تغییر یافته‌است",
        "recentchanges-legend-heading": "'''اختصارها:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Ù\87Ù\85Ú\86Ù\86Û\8cÙ\86 Ø¨Ù\87 [[Special:NewPages|Ù\81Ù\87رست ØµÙ\81حات Ø¬Ø¯Û\8cد]] نگاه کنید)",
-       "recentchanges-legend-plusminus": "('' ±۱۲۳'')",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Ù\87Ù\85Ú\86Ù\86Û\8cÙ\86 Ø¨Ù\87 [[Special:NewPages|Ù\81Ù\87رست ØµÙ\81حات ØªØ§Ø²Ù\87]] نگاه کنید)",
+       "recentchanges-legend-plusminus": "(<em>±۱۲۳</em>)",
        "rcnotefrom": "در زیر تغییرات از <strong>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|نشان داده شده‌است|نشان داده شده‌اند}}).",
-       "rclistfrom": "Ù\86Ù\85اÛ\8cØ´ ØªØºÛ\8cÛ\8cرات Ø¬Ø¯Û\8cد با شروع از $3 $2",
+       "rclistfrom": "Ù\86Ù\85اÛ\8cØ´ ØªØºÛ\8cÛ\8cرات ØªØ§Ø²Ù\87 با شروع از $3 $2",
        "rcshowhideminor": "$1 ویرایش‌های جزئی",
        "rcshowhideminor-show": "نمایش",
        "rcshowhideminor-hide": "پنهان‌کردن",
        "upload_directory_read_only": "شاخهٔ بارگذاری ($1) از طرف سرور وب قابل نوشتن نیست.",
        "uploaderror": "خطای بارگذاری",
        "upload-recreate-warning": "'''هشدار: پرونده‌ای با این نام حذف یا منتقل شده است.'''\n\nبرای راحتی، سیاههٔ حذف و انتقال برای این صفحه در زیر آمده است:",
-       "uploadtext": "از فرم زیر برای بارگذاری کردن پرونده‌های جدید استفاده کنید.\nبرای دیدن پرونده‌هایی که قبلاً بارگذاری شده‌اند به [[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>''' برای استفاده از یک نسخه ۲۰۰ پیکسلی از پرونده درون یک جعبه در سمت چپ متن که عبارت alt text در آن به عنوان توضیح استفاده شده\n*'''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' برای ایجاد یک پیونده مستقیم به پرونده بدون نمایش پرونده",
+       "uploadtext": "از فرم زیر برای بارگذاری کردن پرونده‌های جدید استفاده کنید.\nبرای دیدن پرونده‌هایی که قبلاً بارگذاری شده‌اند به [[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>''' برای استفاده از یک نسخه ۲۰۰ پیکسلی از پرونده درون یک جعبه در سمت چپ متن که عبارت alt text در آن به عنوان توضیح استفاده شده\n*'''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' برای ایجاد یک پیونده مستقیم به پرونده بدون نمایش پرونده",
        "upload-permitted": "انواع مجاز پرونده‌ها: $1.",
        "upload-preferred": "انواع ترجیح‌داده شده پرونده‌ها: $1.",
        "upload-prohibited": "انواع نامجاز پرونده‌ها: $1.",
        "ignorewarning": "چشم‌پوشی از هشدار و ذخیرهٔ پرونده.",
        "ignorewarnings": "چشم‌پوشی از همهٔ هشدارها",
        "minlength1": "نام پرونده دست کم باید یک حرف باشد.",
-       "illegalfilename": "نام پرونده «$1» نویسه‌هایی را شامل می‌شود که در نام صفحه‌ها مجاز نیستند.\nلطفاً نام پرونده را تغییر دهید و آن را دوباره بارگذاری کنید.",
+       "illegalfilename": "نام پرونده «$1» نویسه‌هایی را شامل می‌شود که در نام صفحات مجاز نیستند.\nلطفاً نام پرونده را تغییر دهید و آن را دوباره بارگذاری کنید.",
        "filename-toolong": "نام پرونده نباید از ۲۴۰ بایت طولانی‌تر باشد.",
        "badfilename": "نام پرونده به «$1» تغییر کرد.",
        "filetype-mime-mismatch": "پسوند پرونده «$1.‎» با نوع MIME آن ($2) مطابقت ندارد.",
        "filerevert-comment": "دلیل:",
        "filerevert-defaultcomment": "واگردانی به نسخهٔ $1 ساعت $2",
        "filerevert-submit": "برو",
-       "filerevert-success": "''[[Media:$1|$1]]''' به [$4 نسخهٔ مورخ $2 ساعت $3] واگردانده شد.",
+       "filerevert-success": "<strong>[[Media:$1|$1]]</strong> به [$4 نسخهٔ مورخ $2 ساعت $3] واگردانده شد.",
        "filerevert-badversion": "نسخهٔ قدیمی‌تری از این پرونده وجود نداشت.",
        "filedelete": "حذف $1",
        "filedelete-legend": "حذف پرونده",
        "listduplicatedfiles-summary": "این فهرست پرونده‌هایی با نسخه‌های اخیر این پرونده تکراری است که نسخه‌های اخبر سایر پرونده‌ها است. فقط پرونده‌های محلی در نظر گرفته شده‌اند.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]][[$3|{{PLURAL:$2|یک تکرار|$2 تکرار}}]] دارد.",
        "unusedtemplates": "الگوهای استفاده‌نشده",
-       "unusedtemplatestext": "این صفحه همهٔ صفحه‌هایی در فضای نام {{ns:template}} را که در هیچ صفحه‌ای به کار نرفته‌اند، فهرست می‌کند.\nبه یاد داشته باشید که پیش از پاک‌کردن این صفحه‌ها پیوندهای دیگر به آنها را هم وارسی کنید.",
+       "unusedtemplatestext": "این صفحه همهٔ صفحاتی در فضای نام {{ns:template}} را که در هیچ صفحه‌ای به کار نرفته‌اند، فهرست می‌کند.\nبه یاد داشته باشید که پیش از پاک‌کردن این صفحات پیوندهای دیگر به آنها را هم وارسی کنید.",
        "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-header-pages": "آمار صفحه‌ها",
+       "statistics-header-pages": "آمار صفحه",
        "statistics-header-edits": "آمار ویرایش‌ها",
-       "statistics-header-views": "آمار بازدیدها",
        "statistics-header-users": "آمار کاربران",
        "statistics-header-hooks": "آمارهای دیگر",
        "statistics-articles": "صفحه‌های محتوایی",
-       "statistics-pages": "صفحه‌ها",
+       "statistics-pages": "صفحات",
        "statistics-pages-desc": "تمام صفحه‌های این ویکی، از جمله صفحه‌های بحث، تغییرمسیر و غیره",
        "statistics-files": "پرونده‌های بارگذاری‌شده",
        "statistics-edits": "ویرایش صفحه‌ها از هنگامی که {{SITENAME}} راه‌اندازی شده",
        "statistics-edits-average": "متوسط ویرایش‌ها به ازای هر صفحه",
-       "statistics-views-total": "مجموع بازدیدها",
-       "statistics-views-total-desc": "بازدید صفحه‌های ناموجود و صفحه‌های ویژه شامل نشده‌است",
-       "statistics-views-peredit": "تعداد بازدید به ازای هر ویرایش",
        "statistics-users": "[[Special:ListUsers|کاربران]] ثبت‌نام کرده",
        "statistics-users-active": "کاربران فعال",
        "statistics-users-active-desc": "کاربرانی که در {{PLURAL:$1|روز|$1 روز}} قبل فعالیتی انجام داده‌اند",
-       "statistics-mostpopular": "صفحه‌هایی که بیشترین تعداد بازدیدکننده را داشته‌اند",
        "pageswithprop": "صفحه‌های دارای خاصیت صفحه",
        "pageswithprop-legend": "صفحه‌های دارای خاصیت صفحه",
        "pageswithprop-text": "این صفحه فهرستی است از صفحه‌هایی که از یک خاصیت صفحهٔ خاص استفاده می‌کنند.",
        "brokenredirects-edit": "ویرایش",
        "brokenredirects-delete": "حذف",
        "withoutinterwiki": "صفحه‌های بدون پیوند میان‌ویکی",
-       "withoutinterwiki-summary": "این صفحه‌ها پیوندی به صفحه‌ای به زبان دیگر نمی‌دارند:",
+       "withoutinterwiki-summary": "این صفحات پیوندی به صفحه‌ای به زبان دیگر نمی‌دارند:",
        "withoutinterwiki-legend": "پیشوند",
        "withoutinterwiki-submit": "نمایش",
        "fewestrevisions": "مقاله‌های دارای کمترین شمار ویرایش",
        "uncategorizedtemplates": "الگوهای رده‌بندی‌نشده",
        "unusedcategories": "رده‌های استفاده‌نشده",
        "unusedimages": "پرونده‌های استفاده‌نشده",
-       "popularpages": "صفحه‌های محبوب",
        "wantedcategories": "رده‌های مورد نیاز",
        "wantedpages": "صفحه‌های مورد نیاز",
        "wantedpages-badtitle": "عنوان نامجاز در مجموعهٔ نتایج: $1",
        "wantedtemplates": "الگوهای مورد نیاز",
        "mostlinked": "صفحه‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است",
        "mostlinkedcategories": "رده‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است",
-       "mostlinkedtemplates": "ببشترین صفحه‌های تراگنجانده‌شده",
+       "mostlinkedtemplates": "ببشترین صفحات تراگنجانده‌شده",
        "mostcategories": "صفحه‌های دارای بیشترین رده",
        "mostimages": "پرونده‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است",
        "mostinterwikis": "صفحه‌های دارای بیشترین میان‌ویکی",
        "mostrevisions": "صفحه‌های دارای بیشترین نسخه",
-       "prefixindex": "تمام صفحه‌ها با پیشوند",
+       "prefixindex": "تمام صفحات با پیشوند",
        "prefixindex-namespace": "همهٔ صفحه‌های دارای پیشوند (فضای‌نام $1)",
        "prefixindex-strip": "حذف پیشوند در فهرست",
        "shortpages": "صفحه‌های کوتاه",
        "protectedpages-timestamp": "برچسب زمان",
        "protectedpages-page": "صفحه",
        "protectedpages-expiry": "انقضا",
-       "protectedpages-performer": "در حال حفاظت از کاربر",
+       "protectedpages-performer": "کاربر حفاظت‌کننده",
        "protectedpages-params": "پارامترهای حفاظت",
        "protectedpages-reason": "دلیل",
        "protectedpages-unknown-timestamp": "ناشناس",
        "usercreated": "{{GENDER:$3|ایجادشده}} در تاریخ $1 در ساعت $2",
        "newpages": "صفحه‌های تازه",
        "newpages-username": "نام کاربری:",
-       "ancientpages": "قدیمی‌ترین صفحه‌ها",
+       "ancientpages": "قدیمی‌ترین صفحات",
        "move": "انتقال",
        "movethispage": "انتقال این صفحه",
        "unusedimagestext": "پرونده‌های زیر موجودند اما در هیچ صفحه‌ای به کار نرفته‌اند.\nلطفاً توجه داشته باشید که دیگر وبگاه‌ها ممکن است با یک نشانی اینترنتی مستقیم به یک پرونده پیوند دهند، و با وجود این که در استفادهٔ فعال هستند در این جا فهرست شوند.",
        "pager-older-n": "{{PLURAL:$1|یک مورد قدیمی‌تر|$1 مورد قدیمی‌تر}}",
        "suppress": "نظارت",
        "querypage-disabled": "این صفحه ویژه به دلایل عملکردی غیرفعال شده‌است.",
+       "apihelp": "راهنمای API",
+       "apihelp-no-such-module": "پودمان \" $1 \" یافت نشد.",
        "booksources": "منابع کتاب",
        "booksources-search-legend": "جستجوی منابع کتاب",
        "booksources-isbn": "شابک:",
-       "booksources-go": "برو",
+       "booksources-search": "جستجو",
        "booksources-text": "در زیر فهرستی از پیوندها به وبگاه‌های دیگر آمده‌است که کتاب‌های نو و دست دوم می‌فروشند، و همچنین ممکن است اطلاعات بیشتری راجع به کتاب مورد نظر شما داشته باشند:",
        "booksources-invalid-isbn": "شابک داده شده مجاز به نظر نمی‌رسد؛ از جهت اشکالات هنگام کپی کردن از منبع اصلی بررسی کنید.",
        "specialloguserlabel": "مجری:",
        "alllogstext": "نمایش یک‌جای تمام سیاهه‌های موجود در {{SITENAME}}.\nمی‌توانید با انتخاب نوع سیاهه، نام کاربری (حساس به کوچکی و بزرگی حروف) و صفحه‌های تغییریافته (حساس به بزرگی و کوچکی حروف)، نمایش را محدودتر سازید.",
        "logempty": "مورد منطبق با منظور شما در سیاهه یافت نشد.",
        "log-title-wildcard": "صفحه‌هایی را جستجو کن که عنوانشان با این عبارت آغاز می‌شود",
-       "showhideselectedlogentries": "تغÛ\8cÛ\8cر Ù¾Ø¯Û\8cدارÛ\8c Ù\85Ù\88ارد Ø§Ù\86تخابâ\80\8cشدÙ\87 Ø¯Ø± Ø³Û\8cاÙ\87Ù\87",
-       "allpages": "همهٔ صفحه‌ها",
+       "showhideselectedlogentries": "تغییر پدیداری موارد انتخاب‌شده سیاهه",
+       "allpages": "همهٔ صفحات",
        "nextpage": "صفحهٔ بعد ($1)",
        "prevpage": "صفحهٔ قبلی ($1)",
-       "allpagesfrom": "نمایش صفحه‌ها با شروع از:",
-       "allpagesto": "نمایش صفحه‌ها با پایان در:",
-       "allarticles": "همهٔ صفحه‌ها",
-       "allinnamespace": "همهٔ صفحه‌ها (فضای نام $1)",
+       "allpagesfrom": "نمایش صفحات با شروع از:",
+       "allpagesto": "نمایش صفحات با پایان در:",
+       "allarticles": "همهٔ صفحات",
+       "allinnamespace": "همهٔ صفحات (فضای نام $1)",
        "allpagessubmit": "برو",
        "allpagesprefix": "نمایش صفحه‌های دارای پیشوند:",
-       "allpagesbadtitle": "عنوان صفحهٔ داده‌شده نامعتبر است یا اینکه دارای پیشوندی بین‌زبانی یا بین‌ویکی‌ای است. ممکن است نویسه‌هایی بدارد که نمی‌توان از آنها در عنوان صفحه‌ها استفاده کرد.",
+       "allpagesbadtitle": "عنوان صفحهٔ داده‌شده نامعتبر است یا اینکه دارای پیشوندی بین‌زبانی یا بین‌ویکی‌ای است. ممکن است نویسه‌هایی بدارد که نمی‌توان از آنها در عنوان صفحات استفاده کرد.",
        "allpages-bad-ns": "{{SITENAME}} دارای فضای نام «$1» نیست.",
        "allpages-hide-redirects": "پنهان‌کردن تغییرمسیرها",
        "cachedspecial-viewing-cached-ttl": "شما در حال مشاهدهٔ نسخه‌ای از این صفحه که در میانگیر قرار دارد هستید که ممکن است برای $1 قبل باشد.",
        "cachedspecial-viewing-cached-ts": "شما در حال مشاهدهٔ نسخه‌ای از این صفحه که در میانگیر قرار دارد هستید، و این نسخه ممکن است کاملاً واقعی نباشد.",
        "cachedspecial-refresh-now": "مشاهده آخرین.",
        "categories": "رده‌ها",
-       "categoriespagetext": "{{PLURAL:$1|ردهٔ|رده‌های}} زیر دارای صفحه‌ها یا پرونده‌هایی {{PLURAL:$1|است|هستند}}.\n[[Special:UnusedCategories|رده‌های استفاده‌نشده]] در اینجا نمایش داده نشده‌اند.\nهمچنین [[Special:WantedCategories|رده‌های مورد نیاز]] را ببینید.",
+       "categoriespagetext": "{{PLURAL:$1|ردهٔ|رده‌های}} زیر دارای صفحات یا پرونده‌هایی {{PLURAL:$1|است|هستند}}.\n[[Special:UnusedCategories|رده‌های استفاده‌نشده]] در اینجا نمایش داده نشده‌اند.\nهمچنین [[Special:WantedCategories|رده‌های مورد نیاز]] را ببینید.",
        "categoriesfrom": "نمایش رده‌ها با شروع از:",
        "special-categories-sort-count": "مرتب کردن بر اساس تعداد",
        "special-categories-sort-abc": "مرتب کردن الفبایی",
        "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": "ردÙ\87 Ø§Ù\81زÙ\88د Ù\85Û\8câ\80\8cØ´Ù\88د Ø§Ú¯Ø± ØµÙ\81Ø­Ù\87 Ø´Ø§Ù\85Ù\84 Û\8cÚ© Ù¾Û\8cÙ\88Ù\86د Ø´Ú©Ø³ØªÙ\87 Ø¨Ø§Ø´Ø¯ (Û\8cا Û\8cÚ© Ù¾Ø¨Ù\88Ù\86د Ø¨Ù\87 Ù¾Ø±Ù\88Ù\86دÙ\87Ù\94 ØªÙ\88کارÛ\8c Ø§Ø³Øª Ú©Ù\87 Ù\88جÙ\88د Ù\86دارد)",
-       "hidden-category-category-desc": "اÛ\8cÙ\86 Û\8cÚ© Ø±Ø¯Ù\87Ù\94 <code><nowiki>__HIDDENCAT__</nowiki></code> Ø¯Ø±Ù\88Ù\86Ø´ Ø§Ø³Øª Ú©Ù\87 Ø§Ø² Ù\86Ù\85اÛ\8cشش Ø¯Ø± Ø¬Ø¹Ø¨Ù\87Ù\94 Ù¾Û\8cÙ\88Ù\86دÙ\87اÛ\8c Ø±Ø¯Ù\87 Ø¨Ù\87â\80\8cصÙ\88رت Ù¾Û\8cØ´â\80\8cÙ\81رض جلوگیری می‌کند.",
+       "broken-file-category-desc": "صÙ\81Ø­Ù\87 Ø´Ø§Ù\85Ù\84 Û\8cÚ© Ù¾Û\8cÙ\88Ù\86د Ù¾Ø±Ù\88Ù\86دÙ\87 Ø®Ø±Ø§Ø¨ Ø§Ø³Øª (Ù¾Û\8cÙ\88Ù\86دÛ\8c Ø¨Ø±Ø§Û\8c Ø¬Ø§Ø³Ø§Ø²Û\8câ\80\8cکردÙ\86 Û\8cÚ© Ù¾Ø±Ù\88Ù\86دÙ\87 Ù\87Ù\86گاÙ\85Û\8c Ú©Ù\87 Ø¢Ù\86 Ù¾Ø±Ù\88Ù\86دÙ\87 Ù\88جÙ\88د Ù\86دارد).",
+       "hidden-category-category-desc": "ردÙ\87 Ø¯Ø± Ù\85حتÙ\88اÛ\8c ØµÙ\81Ø­Ù\87â\80\8cاش Ø´Ø§Ù\85Ù\84 <code><nowiki>__HIDDENCAT__</nowiki></code> Ø§Ø³ØªØ\8c Ú©Ù\87 Ø§Ø² Ø¨Ù\87 Ø·Ù\88ر Ù¾Û\8cØ´â\80\8cÙ\81رض Ù\86شاÙ\86â\80\8cدادÙ\86 Ø¬Ø¹Ø¨Ù\87 Ù¾Û\8cÙ\88Ù\86دÙ\87اÛ\8c Ø±Ø¯Ù\87 Ø¯Ø± ØµÙ\81حات جلوگیری می‌کند.",
        "trackingcategories-nodesc": "توضیحی وجود ندارد.",
        "trackingcategories-disabled": "رده غیرفعال‌شده است",
        "mailnologin": "نشانی‌ای از فرستنده موجود نیست",
        "wlheader-enotif": "آگاه‌سازی رایانامه‌ای فعال است.",
        "wlheader-showupdated": "صفحه‌هایی که پس از آخرین بازدید شما تغییر کرده‌اند '''پررنگ''' نمایش داده شده‌اند.",
        "wlnote": "در زیر {{PLURAL:$1|تغییری|<strong>$1</strong> تغییری}} که در {{PLURAL:$2|ساعت|<strong>$2</strong> ساعت}} گذشته انجام شده موجود است، تاریخ آخرین بازیابی: $3، $4",
-       "wlshowlast": "نمایش آخرین $1 ساعت $2 روز $3",
+       "wlshowlast": "نمایش آخرین $1 ساعت $2 روز",
        "watchlist-options": "گزینه‌های پی‌گیری",
        "watching": "پی‌گیری...",
        "unwatching": "توقف پی‌گیری...",
        "watcherrortext": "ایرادی در هنگام عوض کردن تنظیمات فهرست پیگیرتان برای «$1» رخ داد.",
-       "enotif_reset": "نشان‌گذاری همهٔ صفحه‌ها به‌عنوان بازدیدشده",
+       "enotif_reset": "نشان‌گذاری همهٔ صفحات به‌عنوان بازدیدشده",
        "enotif_impersonal_salutation": "کاربر {{SITENAME}}",
        "enotif_subject_deleted": "{{SITENAME}} صفحهٔ $1 توسط {{gender:$2|$2}} حذف شد.",
        "enotif_subject_created": "{{SITENAME}} صفحهٔ $1 توسط {{gender:$2|$2}} ایجاد شده.",
        "exbeforeblank": "محتوای صفحه قبل از خالی‌کردن این بود: «$1»",
        "delete-confirm": "حذف «$1»",
        "delete-legend": "حذف",
-       "historywarning": "'''هشدار!''' صفحه‌ای که قصد دارید حذف کنید تاریخچه‌ای با حدود $1 {{PLURAL:$1|نسخه|نسخه}} دارد:",
+       "historywarning": "<strong>هشدار:</strong> صفحه‌ای که در حال پاک‌کردن آن هستید دارای یک تاریخچه همراه $1 {{PLURAL:$1|بازبینی|بازبینی‌ها}} است:",
        "confirmdeletetext": "شما در حال حذف کردن یک صفحه یا تصویر از پایگاه داده‌ها همراه با تمام تاریخچهٔ آن هستید.\nلطفاً این عمل را تأیید کنید و اطمینان حاصل کنید که عواقب این کار را می‌دانید و این عمل را مطابق با [[{{MediaWiki:Policy-url}}|سیاست‌ها]] انجام می‌دهید.",
        "actioncomplete": "عمل انجام شد",
        "actionfailed": "عمل ناموفق بود",
        "deletereasonotherlist": "دلیل دیگر",
        "deletereason-dropdown": "*دلایل متداول حذف\n** هرزنگار\n** خرابکاری\n** نقض حق تکثیر\n** درخواست کاربر\n** تغییرمسیر شکسته",
        "delete-edit-reasonlist": "ویرایش دلایل حذف",
-       "delete-toobig": "این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است.\nبه منظور جلوگیری از اختلال ناخواسته در {{SITENAME}} حذف این گونه صفحه‌ها محدود شده‌است.",
+       "delete-toobig": "این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است.\nبه منظور جلوگیری از اختلال ناخواسته در {{SITENAME}} حذف این گونه صفحات محدود شده‌است.",
        "delete-warning-toobig": "این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است.\nحذف آن ممکن است که عملکرد پایگاه دادهٔ {{SITENAME}} را مختل کند;\nبا احتیاط ادامه دهید.",
+       "deleteprotected": "شما نمی‌توانید این صفحه را پاک کنید چون که از آن محافظت شده‌است.",
        "deleting-backlinks-warning": "''' هشدار:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|صفحه‌های دیگری]] هستند که به صفحه‌ای که شما در حال حذف آن هستید پیوند دارند یا آن را تراگنجانیده‌اند.",
        "rollback": "واگردانی ویرایش‌ها",
        "rollback_short": "واگردانی",
        "protect_expiry_old": "زمان سرآمدن در گذشته‌است.",
        "protect-unchain-permissions": "باز کردن سایر گزینه‌های محافظت",
        "protect-text": "شما می‌توانید سطح محافظت صفحهٔ '''$1''' را ببینید و از اینجا آن را تغییر دهید.",
-       "protect-locked-blocked": "شما در مدتی که دسترسی‌تان قطع است نمی‌توانید سطح محافظت صفحه‌ها را تغییر دهید.\nتنظیمات فعلی صفحهٔ '''$1''' از این قرار است:",
+       "protect-locked-blocked": "شما در مدتی که دسترسی‌تان قطع است نمی‌توانید سطح محافظت صفحات را تغییر دهید.\nتنظیمات فعلی صفحهٔ '''$1''' از این قرار است:",
        "protect-locked-dblock": "به دلیل قفل شدن پایگاه داده، امکان تغییر سطح محافظت صفحه وجود ندارد.\nتنظیمات فعلی صفحهٔ '''$1''' به این قرار است:",
        "protect-locked-access": "حساب کاربری شما اجازهٔ تغییر سطح محافظت صفحه را ندارد.\nتنظیمات فعلی صفحهٔ '''$1''' به این قرار است:",
        "protect-cascadeon": "این صفحه  در حال حاضر محافظت شده‌است زیرا در {{PLURAL:$1|صفحهٔ|صفحه‌های}} زیر که گزینهٔ محافظت آبشاری {{PLURAL:$1|آن|آن‌ها}} فعال است، گنجانده شده است.\nتغییراتی به سطح محافظت این صفحه به محافظت ابشاری تأثیر نخواهد گذاشت.",
        "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** صفحهٔ پر بازدید",
        "undelete-header": "برای دیدن صفحه‌های حذف‌شدهٔ اخیر [[Special:Log/delete|سیاههٔ حذف]] را ببینید.",
        "undelete-search-title": "جستجوی صفحه‌های حذف‌شده",
        "undelete-search-box": "جستجوی صفحه‌های حذف‌شده.",
-       "undelete-search-prefix": "نمایش صفحه‌ها با شروع از:",
+       "undelete-search-prefix": "نمایش صفحات با شروع از:",
        "undelete-search-submit": "برو",
        "undelete-no-results": "هیچ صفحهٔ منطبقی در بایگانی حذف‌شده‌ها یافت نشد.",
        "undelete-filename-mismatch": "امکان احیای نسخهٔ $1 وجود ندارد: نام پرونده مطابقت نمی‌کند.",
        "contribsub2": "برای {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "حساب کاربری «$1» ثبت نشده‌است.",
        "nocontribs": "هیچ تغییری با این مشخصات یافت نشد.",
-       "uctop": "(نسخه کنونی)",
+       "uctop": "(نسخهٔ کنونی)",
        "month": "در این ماه (و پیش از آن):",
        "year": "در این سال (و پیش از آن):",
        "sp-contributions-newbies": "فقط مشارکت‌های تازه‌کاران نمایش داده شود",
        "autoblockid": "شناسه قطع دسترسی خودکار #$1",
        "block": "بستن کاربر",
        "unblock": "بازکردن کاربر",
-       "blockip": "بستن کاربر",
+       "blockip": "بستن {{GENDER:$1|کاربر}}",
        "blockip-legend": "بستن کاربر",
        "blockiptext": "از فرم زیر برای بستن دسترسی ویرایش یک نشانی آی‌پی یا نام کاربری مشخص استفاده کنید.\nاین کار فقط فقط باید برای جلوگیری از خرابکاری و بر اساس [[{{MediaWiki:Policy-url}}|سیاست قطع دسترسی]] انجام شود.\nدلیل مشخص این کار را در زیر ذکر کنید (مثلاً با ذکر صفحه‌های به‌خصوصی که مورد خرابکاری واقع شده‌اند).",
        "ipaddressorusername": "نشانی آی‌پی یا نام کاربری:",
        "ipbexpiry": "زمان سرآمدن:",
        "ipbreason": "دلیل:",
-       "ipbreason-dropdown": "*دلایل متداول قطع دسترسی\n**واردکردن اطلاعات نادرست\n**پاک‌کردن اطلاعات مفید از صفحه‌ها\n**هرزنگاری از طریق درج مکرر پیوند به وب‌گاه‌ها\n**درج چرندیات یا نوشته‌های بی‌معنا در صفحه‌ها\n**تهدید یا ارعاب دیگر کاربران\n**سوء استفاده از چند حساب کاربری\n**نام کاربری نامناسب",
+       "ipbreason-dropdown": "*دلایل متداول قطع دسترسی\n**واردکردن اطلاعات نادرست\n**پاک‌کردن اطلاعات مفید از صفحات\n**هرزنگاری از طریق درج مکرر پیوند به وب‌گاه‌ها\n**درج چرندیات یا نوشته‌های بی‌معنا در صفحات\n**تهدید یا ارعاب دیگر کاربران\n**سوء استفاده از چند حساب کاربری\n**نام کاربری نامناسب",
        "ipb-hardblock": "جلوگیری از ویرایش کردن کاربران ثبت نام کرده از طریق این نشانی آی‌پی",
        "ipbcreateaccount": "جلوگیری از ایجاد حساب",
        "ipbemailban": "جلوگیری از ارسال رایانامه",
        "unblocked": "دسترسی [[User:$1|$1]] دوباره برقرار شد",
        "unblocked-range": "$1 باز شد",
        "unblocked-id": "قطع دسترسی شماره $1 خاتمه یافت",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] رفع قطع دسترسی شد.",
        "blocklist": "کاربران بسته‌شده",
        "ipblocklist": "کاربران بسته‌شده",
        "ipblocklist-legend": "جستجوی کاربر بسته شده",
        "contribslink": "مشارکت‌ها",
        "emaillink": "ارسال رایانامه",
        "autoblocker": "به طور خودکار بسته شد چون آی‌پی شما به تازگی توسط کاربر «[[User:$1|$1]]» استفاده شده‌است.\nدلیل قطع دسترسی $1 چنین است \"$2\"",
-       "blocklogpage": "سÛ\8cاÙ\87Ù\87Ù\94 Ø¨Ø³ØªÙ\87â\80\8cشدÙ\86â\80\8cÙ\87ا",
+       "blocklogpage": "سÛ\8cاÙ\87Ù\87Ù\94 Ø¨Ø³ØªÙ\86",
        "blocklog-showlog": "دسترسی این کاربر در گذشته بسته شده‌است.\nسیاههٔ قطع دسترسی در زیر نمایش یافته است:",
        "blocklog-showsuppresslog": "دسترسی این کاربر قبلاً بسته شده و این کاربر پنهان شده‌است.\nسیاههٔ قطع دسترسی در زیر نمایش یافته است:",
        "blocklogentry": "«[[$1]]» را تا $2 بست $3",
        "ipbnounblockself": "شما مجاز به باز کردن دسترسی خود نیستید.",
        "lockdb": "قفل کردن پایگاه داده",
        "unlockdb": "از قفل در آوردن پایگاه داده",
-       "lockdbtext": "قفل کردن پایگاه داده امکان ویرایش صفحه‌ها، تغییر تنظیمات، ویرایش پی‌گیری‌ها، و سایر تغییراتی را که نیازمند تغییری در پایگاه داده است، از همهٔ کاربران سلب می‌کند.\nلطفاً تأیید کنید که همین کار را می‌خواهید انجام دهید، و در اولین فرصت پایگاه داده را از حالت قفل شده خارج خواهید کرد.",
-       "unlockdbtext": "از قفل در آوردن پایگاه داده به تمامی کاربران اجازه می‌دهد که توانایی ویرایش صفحه‌ها، تغییر تنظیمات، تغییر پی‌گیری‌ها و هر تغییر دیگری که نیازمند تغییر در پایگاه داده باشد را دوباره به دست بیاورند.\nلطفاً تأیید کنید که همین کار را می‌خواهید انجام دهید.",
+       "lockdbtext": "قفل کردن پایگاه داده امکان ویرایش صفحات، تغییر تنظیمات، ویرایش پی‌گیری‌ها، و سایر تغییراتی را که نیازمند تغییری در پایگاه داده است، از همهٔ کاربران سلب می‌کند.\nلطفاً تأیید کنید که همین کار را می‌خواهید انجام دهید، و در اولین فرصت پایگاه داده را از حالت قفل شده خارج خواهید کرد.",
+       "unlockdbtext": "از قفل در آوردن پایگاه داده به تمامی کاربران اجازه می‌دهد که توانایی ویرایش صفحات، تغییر تنظیمات، تغییر پی‌گیری‌ها و هر تغییر دیگری که نیازمند تغییر در پایگاه داده باشد را دوباره به دست بیاورند.\nلطفاً تأیید کنید که همین کار را می‌خواهید انجام دهید.",
        "lockconfirm": "بله، من جداً می‌خواهم پایگاه داده را قفل کنم.",
        "unlockconfirm": "بله، من جداً می‌خواهم پایگاه داده را از قفل در آورم.",
        "lockbtn": "قفل کردن پایگاه داده",
        "lockedbyandtime": "(به وسیلهٔ $1 در $2 ساعت $3)",
        "move-page": "انتقال $1",
        "move-page-legend": "انتقال صفحه",
-       "movepagetext": "با استفاده از فرم زیر نام صفحه تغییر خواهد کرد، و تمام تاریخچه‌اش به نام جدید منتقل خواهد شد.\nعنوان قدیمی تبدیل به یک صفحهٔ تغییرمسیر به عنوان جدید خواهد شد.\nشما می‌توانید تغییرمسیرهایی که به عنوان اصلی اشاره دارند را به صورت خودکار به‌روزرسانی کنید.\nپیوندهای که به عنوان صفحهٔ قدیمی وجود دارند، تغییر نخواهند کرد؛ حتماً تغییرمسیرهای [[Special:DoubleRedirects|دوتایی]] یا [[Special:BrokenRedirects|خراب]] را بررسی کنید.\n'''شما''' مسئول اطمینان از این هستید که پیوندها هنوز به همان‌جایی که قرار است بروند.\n\nتوجه کنید که اگر از قبل صفحه‌ای در عنوان جدید وجود داشته باشد صفحه منتقل '''نخواهد شد'''،\nمگر این آخرین ویرایش تغییرمسیر باشد و در  تاریخچهٔ ویرایشی نداشته باشد.\nاین یعنی اگر اشتباه کردید می‌توانید صفحه را به همان جایی که از آن منتقل شده بود برگردانید، و این که نمی‌توانید روی صفحه‌ها موجود بنویسید.\n\n'''هشدار!'''\nانتقال صفحه‌ها به نام جدید ممکن است تغییر اساسی و غیرمنتظره‌ای برای صفحه‌های محبوب باشد؛\nلطفاً مطمئن شوید که قبل از انتقال دادن صفحه، عواقب این کار را درک می‌کنید.",
+       "movepagetext": "با استفاده از فرم زیر نام صفحه تغییر خواهد کرد، و تمام تاریخچه‌اش به نام جدید منتقل خواهد شد.\nعنوان قدیمی تبدیل به یک صفحهٔ تغییرمسیر به عنوان جدید خواهد شد.\nشما می‌توانید تغییرمسیرهایی که به عنوان اصلی اشاره دارند را به صورت خودکار به‌روزرسانی کنید.\nپیوندهای که به عنوان صفحهٔ قدیمی وجود دارند، تغییر نخواهند کرد؛ حتماً تغییرمسیرهای [[Special:DoubleRedirects|دوتایی]] یا [[Special:BrokenRedirects|خراب]] را بررسی کنید.\n'''شما''' مسئول اطمینان از این هستید که پیوندها هنوز به همان‌جایی که قرار است بروند.\n\nتوجه کنید که اگر از قبل صفحه‌ای در عنوان جدید وجود داشته باشد صفحه منتقل '''نخواهد شد'''،\nمگر این آخرین ویرایش تغییرمسیر باشد و در  تاریخچهٔ ویرایشی نداشته باشد.\nاین یعنی اگر اشتباه کردید می‌توانید صفحه را به همان جایی که از آن منتقل شده بود برگردانید، و این که نمی‌توانید روی صفحات موجود بنویسید.\n\n'''هشدار!'''\nانتقال صفحات به نام جدید ممکن است تغییر اساسی و غیرمنتظره‌ای برای صفحات محبوب باشد؛\nلطفاً مطمئن شوید که قبل از انتقال دادن صفحه، عواقب این کار را درک می‌کنید.",
        "movepagetext-noredirectfixer": "استفاده از فرم زیر سبب تغییر نام یک صفحه و انتقال تمام تاریخچهٔ آن به نام جدید می‌شود.\nعنوان پیشین تغییرمسیری به عنوان جدید خواهد شد.\nبه خاطر داشته باشید که [[Special:DoubleRedirects|تغییرمسیرهای دوتایی]] یا [[Special:BrokenRedirects|تغییرمسیرهای خراب]] را بررسی کنید.\nشما مسئولید که مطمئن شوید پیوندها به جایی اشاره می‌کنند که قرار است بروند.\n\nتوجه کنید که اگر صفحه‌ای تحت عنوان جدید از قبل موجود باشد، انتقال انجام '''نخواهد شد'''، مگر اینکه صفحه خالی و یا تغییرمسیر باشد و تاریخچهٔ ویرایشی دیگری نداشته باشد.\nاین یعنی اگر صفحه را به نامی اشتباه منتقل کردید می‌توانید این تغییر را واگردانی کنید، اما نمی‌توانید به صفحه‌ای که از قبل موجود است انتقال دهید.\n\n'''هشدار!'''\nانتقال صفحه‌های پربیننده ممکن است عملی غیرمنتظره باشد؛\nلطفاً پیش از انتقال مطمئن شوید از نتیجهٔ کار آگاهید.",
        "movepagetalktext": "صفحهٔ بحث مربوط، اگر وجود داشته باشد، بطور خودکار همراه با مقالهٔ اصلی منتقل خواهد شد '''مگر اینکه''' :\n* در حال انتقال صفحه از این فضای نام به فضای نام دیگری باشید،\n* یک صفحهٔ بحث غیرخالی تحت این نام جدید وجود داشته باشد، یا\n* جعبهٔ زیر را تیک نزده باشید.\n\nدر این حالات، باید صفحه را بطور دستی انتقال داده و یا محتویات دو صفحه را با ویرایش ادغام کنید.",
        "movearticle": "انتقال صفحه:",
        "moveuserpage-warning": "'''هشدار:''' شما در حال انتقال دادن یک صفحهٔ کاربر هستید. توجه داشته باشید که تنها صفحه منتقل می‌شود و نام کاربر تغییر '''نمی‌یابد'''.",
        "movecategorypage-warning": "<strong>هشدار:</strong> شما در حال انتقال صفحه رده هستید. لطفاً توجه داشته باشید که فقط صفحه منتقل خواهد شد و  صفحات در رده قدیمی می‌مانند و به رده جدید <em>نمی‌روند</em>.",
-       "movenologintext": "برای انتقال صفحه‌ها باید کاربر ثبت‌شده بوده و [[Special:UserLogin|به سامانه وارد شوید]].",
-       "movenotallowed": "شما اجازهٔ انتقال دادن صفحه‌ها را ندارید.",
+       "movenologintext": "برای انتقال صفحات باید کاربر ثبت‌شده بوده و [[Special:UserLogin|به سامانه وارد شوید]].",
+       "movenotallowed": "شما اجازهٔ انتقال دادن صفحات را ندارید.",
        "movenotallowedfile": "شما اجازهٔ انتقال پرونده‌ها را ندارید.",
        "cant-move-user-page": "شما اجازه ندارید صفحه‌های کاربری سرشاخه را انتقال دهید.",
        "cant-move-to-user-page": "شما اجازه ندارید که یک صفحه را به یک صفحهٔ کاربر انتقال دهید (به استثنای زیر صفحه‌های کاربری).",
        "cant-move-category-page": "شما اجازهٔ انتقال دادن صفحهٔ رده‌ها را ندارید.",
        "cant-move-to-category-page": "شما مجوز برای انتقال صفحه به صفحه رده ندارید.",
-       "newtitle": "به‌عنوان جدید",
+       "newtitle": "به عنوان تازه:",
        "move-watch": "پی‌گیری صفحه‌های مبدأ و مقصد",
        "movepagebtn": "صفحه منتقل شود",
        "pagemovedsub": "انتقال با موفقیت انجام شد",
        "movepage-page-unmoved": "صفحهٔ $1 را نمی‌توان به $2 انتقال داد.",
        "movepage-max-pages": "حداکثر تعداد صفحه‌های ممکن ($1 {{PLURAL:$1|صفحه|صفحه}}) که می‌توان انتقال داد منتقل شدند و صفحه‌های دیگر را نمی‌توان به طور خودکار منتقل کرد.",
        "movelogpage": "سیاههٔ انتقال",
-       "movelogpagetext": "در زیر فهرستی از انتقال صفحه‌ها آمده است.",
+       "movelogpagetext": "در زیر فهرستی از انتقال صفحات آمده‌است.",
        "movesubpage": "{{PLURAL:$1|زیرصفحه|زیرصفحه‌ها}}",
        "movesubpagetext": "این صفحه $1 زیرصفحه دارد که در زیر نمایش {{PLURAL:$1|یافته‌است|یافته‌اند}}.",
        "movenosubpage": "این صفحه هیچ زیرصفحه‌ای ندارد.",
        "bad-target-model": "مقصد مورد نظر از مدل محتوایی متفاوتی استفاده می‌کند. تبدیل $1 به $2 ممکن نیست.",
        "imagenocrossnamespace": "امکان انتقال تصویر به فضای نام غیر پرونده وجود ندارد",
        "nonfile-cannot-move-to-file": "امکان انتقال محتوای غیر پرونده به فضای نام پرونده وجود ندارد",
-       "imagetypemismatch": "پسÙ\88Ù\86د Ù¾Ø±Ù\88Ù\86دÙ\87 Ø¬Ø¯Û\8cد با نوع آن سازگار نیست",
+       "imagetypemismatch": "پسÙ\88Ù\86د Ù¾Ø±Ù\88Ù\86دÙ\87 ØªØ§Ø²Ù\87 با نوع آن سازگار نیست",
        "imageinvalidfilename": "نام پروندهٔ هدف نامجاز است",
        "fix-double-redirects": "به روز کردن تمامی تغییرمسیرهایی که به مقالهٔ اصلی اشاره می‌کنند",
        "move-leave-redirect": "بر جا گذاشتن یک تغییرمسیر",
        "semiprotectedpagemovewarning": "'''تذکر:''' این صفحه قفل شده‌است به طوری که تنها کاربران ثبت نام کرده می‌توانند آن را انتقال دهند.\nآخرین موارد سیاهه در زیر آمده است:",
        "move-over-sharedrepo": "== پرونده موجود است ==\n[[:$1]] در یک مخزن مشترک وجود دارد. انتقال یک پرونده به این نام باعث باطل شدن پرونده مشترک خواهد شد.",
        "file-exists-sharedrepo": "نام پرونده انتخاب شده از قبل در یک مخزن مشترک استفاده شده‌است.\nلطفاً یک نام دیگر برگزینید.",
-       "export": "برون‌بری صفحه‌ها",
-       "exporttext": "شما می‌توانید متن و تاریخچهٔ ویرایش یک صفحهٔ مشخص یا مجموعه‌ای از صفحه‌ها را به شکل پوشیده در اکس‌ام‌ال برون‌بری کنید.\nاین اطلاعات را می‌توان در ویکی دیگری که نرم‌افزار «مدیاویکی» را اجرا می‌کند از طریق [[Special:Import|صفحهٔ درون‌ریزی]] وارد کرد.\n\nبرای برون‌بری صفحه‌ها، عنوان آن‌ها را در جعبهٔ زیر وارد کنید (در هر سطر فقط یک عنوان) و مشخص کنید که آیا نسخهٔ اخیر صفحه را به همراه نسخه‌های قدیمی‌تر و تاریخچهٔ صفحه می‌خواهید، یا تنها نسخهٔ اخیر صفحه و اطلاعات آخرین ویرایش را می‌خواهید.\n\nدر حالت دوم، شما می‌توانید از یک پیوند استفاده کنید، مثلاً [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] برای صفحهٔ «[[{{MediaWiki:Mainpage}}]]».",
-       "exportall": "برون‌بری همهٔ صفحه‌ها",
+       "export": "برون‌بری صفحات",
+       "exporttext": "شما می‌توانید متن و تاریخچهٔ ویرایش یک صفحهٔ مشخص یا مجموعه‌ای از صفحات را به شکل پوشیده در اکس‌ام‌ال برون‌بری کنید.\nاین اطلاعات را می‌توان در ویکی دیگری که نرم‌افزار «مدیاویکی» را اجرا می‌کند از طریق [[Special:Import|صفحهٔ درون‌ریزی]] وارد کرد.\n\nبرای برون‌بری صفحات، عنوان آن‌ها را در جعبهٔ زیر وارد کنید (در هر سطر فقط یک عنوان) و مشخص کنید که آیا نسخهٔ اخیر صفحه را به همراه نسخه‌های قدیمی‌تر و تاریخچهٔ صفحه می‌خواهید، یا تنها نسخهٔ اخیر صفحه و اطلاعات آخرین ویرایش را می‌خواهید.\n\nدر حالت دوم، شما می‌توانید از یک پیوند استفاده کنید، مثلاً [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] برای صفحهٔ «[[{{MediaWiki:Mainpage}}]]».",
+       "exportall": "برون‌بری همهٔ صفحات",
        "exportcuronly": "فقط نسخهٔ فعلی شامل شود، نه کل تاریخچه",
-       "exportnohistory": "----\n'''توجه:''' امکان برون‌بری تاریخچهٔ کامل صفحه‌ها از طریق این صفحه به دلایل اجرایی از کار انداخته شده‌است.",
+       "exportnohistory": "----\n'''توجه:''' امکان برون‌بری تاریخچهٔ کامل صفحات از طریق این صفحه به دلایل اجرایی از کار انداخته شده‌است.",
        "exportlistauthors": "شامل فهرست کامل مشارکت‌کنندگان هر صفحه",
        "export-submit": "برون‌بری",
-       "export-addcattext": "افزودن صفحه‌ها از رده:",
+       "export-addcattext": "افزودن صفحات از رده:",
        "export-addcat": "افزودن",
-       "export-addnstext": "افزودن صفحه‌ها از فضای نام:",
+       "export-addnstext": "افزودن صفحات از فضای نام:",
        "export-addns": "افزودن",
        "export-download": "ذخیره به صورت پرونده",
        "export-templates": "شامل شدن الگوها",
        "thumbnail_gd-library": "تنظیمات ناقص کتابخانهٔ GD: عملکرد $1 وجود ندارد",
        "thumbnail_image-missing": "پرونده به نظر گم شده‌است: $1",
        "thumbnail_image-failure-limit": "تلاش‌های ناموفق اخیر بسیاری ($1 یا بیشتر) برای ارائهٔ این تصویر کوچک وجود داشته‌ است. لطفأ بعداً دوباره تلاش کنید.",
-       "import": "درون‌ریزی صفحه‌ها",
+       "import": "درون‌ریزی صفحات",
        "importinterwiki": "درون‌ریزی تراویکی",
-       "import-interwiki-text": "یک ویکی و یک نام صفحه را انتخاب کنید تا اطلاعات از آن درون‌ریزی شود.\nتاریخ نسخه‌ها و نام ویرایش‌کنندگان ثابت خواهد ماند.\nاطلاعات مربوط به درون‌ریزی صفحه‌ها در [[Special:Log/import|سیاههٔ درون‌ریزی‌ها]] درج خواهد شد.",
+       "import-interwiki-text": "یک ویکی و یک نام صفحه را انتخاب کنید تا اطلاعات از آن درون‌ریزی شود.\nتاریخ نسخه‌ها و نام ویرایش‌کنندگان ثابت خواهد ماند.\nاطلاعات مربوط به درون‌ریزی صفحات در [[Special:Log/import|سیاههٔ درون‌ریزی‌ها]] درج خواهد شد.",
        "import-interwiki-sourcewiki": "ویکی منبع:",
+       "import-interwiki-sourcepage": "صفحهٔ مبدأ:",
        "import-interwiki-history": "تمام نسخه‌های تاریخچهٔ این صفحه انتقال داده شود",
        "import-interwiki-templates": "تمام الگوها را شامل شود",
        "import-interwiki-submit": "درون‌ریزی شود",
        "import-interwiki-namespace": "فضای نام مقصد:",
-       "import-interwiki-rootpage": "مقصد صفحه ٔ مبنا (اختیاری):",
+       "import-interwiki-rootpage": "ریشهٔ صفحهٔ مقصد (اختیاری):",
        "import-upload-filename": "نام پرونده:",
        "import-comment": "توضیح:",
        "importtext": "لطفاً پرونده را از ویکی منبع با کمک [[Special:Export|ابزار برون‌بری]] دریافت کنید.\nسپس آن را روی دستگاه‌تان ذخیره کنید و اینجا بارگذاری نمایید.",
-       "importstart": "در حال درون‌ریزی صفحه‌ها...",
+       "importstart": "در حال درون‌ریزی صفحات...",
        "import-revision-count": "$1 {{PLURAL:$1|ویرایش|ویرایش}}",
        "importnopages": "صفحه‌ای برای درون‌ریزی نیست.",
        "imported-log-entries": "$1 {{PLURAL:$1|مورد سیاهه|مورد سیاهه}} درون ریزی شد.",
-       "importfailed": "درون‌ریزی صفحه‌ها شکست خورد: <nowiki>$1</nowiki>",
+       "importfailed": "درون‌ریزی صفحات شکست خورد: <nowiki>$1</nowiki>",
        "importunknownsource": "نوع مأخذ درون‌ریزی معلوم نیست",
-       "importcantopen": "پروندهٔ درون‌ریزی صفحه‌ها باز نشد",
+       "importcantopen": "پروندهٔ درون‌ریزی صفحات باز نشد",
        "importbadinterwiki": "پیوند میان‌ویکی نادرست",
        "importsuccess": "درون‌ریزی با موفقیت انجام شد!",
        "importnosources": "هیچ منبعی برای درون‌ریزی اطلاعات از ویکی دیگر تعریف نشده‌است.",
        "importuploaderrortemp": "در بارگذاری پروندهٔ درون‌ریزی، اشکال رخ داد.\nپوشهٔ موقت پیدا نشد.",
        "import-parse-failure": "خطا در تجزیهٔ اکس‌ام‌ال بارگذاری‌شده",
        "import-noarticle": "صفحه‌ای برای بارگذاری وجود ندارد!",
-       "import-nonewrevisions": "Ù\87Û\8cÚ\86 Ø¨Ø§Ø²Ø¨Û\8cÙ\86Û\8c Ù\88ارد Ù\86شدÙ\87 (همه یا در حال حاضر وجود دارند، یا به دلیل خطا‌ها نادیده گرفته شده‌اند).",
+       "import-nonewrevisions": "Ù\86سخÙ\87â\80\8cاÛ\8c Ø¯Ø±Ù\88Ù\86â\80\8cرÛ\8cزÛ\8c Ù\86شد (همه یا در حال حاضر وجود دارند، یا به دلیل خطا‌ها نادیده گرفته شده‌اند).",
        "xml-error-string": "$1 در سطر $2، ستون $3 (بایت $4): $5",
        "import-upload": "بارگذاری داده اکس‌ام‌ال",
        "import-token-mismatch": "از دست رفتن اطلاعات نشست کاربری. لطفاً دوباره امتحان کنید.",
        "import-rootpage-invalid": "با توجه به ریشه صفحه عنوان نامعتبر است.",
        "import-rootpage-nosubpage": "فضای نام  \"$1\" صفحهٔ مبنا اجازهٔ زیرصفحه نمی‌دهد.",
        "importlogpage": "سیاههٔ درون‌ریزی‌ها",
-       "importlogpagetext": "درون‌ریزی صفحه‌ها به همراه تاریخچهٔ ویرایش آن‌ها از ویکی‌های دیگر.",
+       "importlogpagetext": "درون‌ریزی صفحات به همراه تاریخچهٔ ویرایش آن‌ها از ویکی‌های دیگر.",
        "import-logentry-upload": "[[$1]] را از طریق بارگذاری پرونده درون‌ریزی کرد",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|نسخه|نسخه}} واردشده",
        "import-logentry-interwiki": "$1 را تراویکی کرد",
        "tooltip-pt-mycontris": "فهرست مشارکت‌های شما",
        "tooltip-pt-login": "توصیه می‌شود که به سامانه وارد شوید، گرچه اجباری نیست",
        "tooltip-pt-logout": "خروج از سامانه",
+       "tooltip-pt-createaccount": "از شما دعوت می‌شود که حساب کاربری بسازید و به سامانه وارد شوید؛ هرچند که ساخت حساب کاربری اختیاری است.",
        "tooltip-ca-talk": "گفتگو پیرامون محتوای صفحه",
        "tooltip-ca-edit": "شما می‌توانید این صفحه را ویرایش کنید. لطفاً پیش از ذخیره از دکمهٔ پیش‌نمایش استفاده کنید.",
        "tooltip-ca-addsection": "بخشی جدید ایجاد کنید",
        "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": "مشاهدهٔ صفحهٔ اصلی",
        "tooltip-feed-atom": "خبرنامهٔ اتم برای این صفحه",
        "tooltip-t-contributions": "فهرست مشارکت‌های این کاربر",
        "tooltip-t-emailuser": "فرستادن رایانامه به این کاربر",
+       "tooltip-t-info": "اطلاعات بیشتر دربارهٔ این صفحه",
        "tooltip-t-upload": "بارگذاری تصاویر و پرونده‌های دیگر",
        "tooltip-t-specialpages": "فهرستی از همهٔ صفحه‌های ویژه",
        "tooltip-t-print": "نسخهٔ قابل چاپ این صفحه",
        "creditspage": "اعتبارات این صفحه",
        "nocredits": "اطلاعات سازندگان این صفحه موجود نیست.",
        "spamprotectiontitle": "پالایهٔ هرزنگاری‌ها",
-       "spamprotectiontext": "از Ø°Ø®Û\8cرÙ\87 Ú©Ø±Ø¯Ù\86 ØµÙ\81Ø­Ù\87 ØªÙ\88سط Ù¾Ø§Ù\84اÛ\8cÙ\87Ù\94 Ù\87رزÙ\86گارÛ\8câ\80\8cÙ\87ا Ø¬Ù\84Ù\88Ú¯Û\8cرÛ\8c Ø´Ø¯.\nÙ\85عÙ\85Ù\88Ù\84اÙ\8b Ø§Û\8cÙ\86 Ø§ØªÙ\81اÙ\82 Ø²Ù\85اÙ\86Û\8c Ù\85Û\8câ\80\8cاÙ\81تد Ú©Ù\87 Ù\85تÙ\86 Ø¬Ø¯Û\8cد صفحه، حاوی پیوندی به یک نشانی وب باشد که در فهرست سیاه قرار دارد.",
+       "spamprotectiontext": "از Ø°Ø®Û\8cرÙ\87 Ú©Ø±Ø¯Ù\86 ØµÙ\81Ø­Ù\87 ØªÙ\88سط Ù¾Ø§Ù\84اÛ\8cÙ\87Ù\94 Ù\87رزÙ\86گارÛ\8câ\80\8cÙ\87ا Ø¬Ù\84Ù\88Ú¯Û\8cرÛ\8c Ø´Ø¯.\nÙ\85عÙ\85Ù\88Ù\84اÙ\8b Ø§Û\8cÙ\86 Ø§ØªÙ\81اÙ\82 Ø²Ù\85اÙ\86Û\8c Ù\85Û\8câ\80\8cاÙ\81تد Ú©Ù\87 Ù\85تÙ\86 ØªØ§Ø²Ù\87 صفحه، حاوی پیوندی به یک نشانی وب باشد که در فهرست سیاه قرار دارد.",
        "spamprotectionmatch": "متن زیر چیزی‌است که پالایهٔ هرزه‌نگاری ما را به کارانداخت: $1",
        "spambot_username": "هرزه‌تمیزکارِ مدیاویکی",
        "spam_reverting": "واگردانی به آخرین نسخه‌ای که پیوندی به $1 ندارد.",
        "pageinfo-robot-policy": "‌فهرست‌کردن توسط ربات‌ها",
        "pageinfo-robot-index": "مجاز",
        "pageinfo-robot-noindex": "نامجاز",
-       "pageinfo-views": "شمار بازدیدها",
        "pageinfo-watchers": "شمار پی‌گیری‌کنندگان صفحه",
        "pageinfo-few-watchers": "کمتر از  $1 {{PLURAL:$1| پی‌گیر|پی‌گیر}}",
        "pageinfo-redirects-name": "تعداد تغییرمسیرها به این صفحه",
        "pageinfo-protect-cascading-yes": "بله",
        "pageinfo-protect-cascading-from": "محافظت آبشاری از",
        "pageinfo-category-info": "اطلاعات رده",
-       "pageinfo-category-pages": "تعداد صفحه‌ها",
+       "pageinfo-category-pages": "تعداد صفحات",
        "pageinfo-category-subcats": "تعداد زیررده‌ها",
        "pageinfo-category-files": "تعداد پرونده‌ها",
        "markaspatrolleddiff": "برچسب گشت بزن",
        "exif-urgency-low": "کم ($1)",
        "exif-urgency-high": "زیاد ($1)",
        "exif-urgency-other": "اولویت تعریف شده توسط کاربر ($1)",
-       "watchlistall2": "همه",
        "namespacesall": "همه",
        "monthsall": "همهٔ ماه‌ها",
        "confirmemail": "تأیید نشانی رایانامه",
        "autosumm-blank": "صفحه را خالی کرد",
        "autosumm-replace": "جایگزینی صفحه با '$1'",
        "autoredircomment": "تغییرمسیر به [[$1]]",
-       "autosumm-new": "صÙ\81Ø­Ù\87â\80\8cاÛ\8c Ø¬Ø¯Û\8cد حاوی «$1» ایجاد کرد",
+       "autosumm-new": "صÙ\81Ø­Ù\87â\80\8cاÛ\8c ØªØ§Ø²Ù\87 حاوی «$1» ایجاد کرد",
        "autosumm-newblank": "ایجاد صفحه خالی",
        "size-bytes": "$1 بایت",
        "size-kilobytes": "$1 کیلوبایت",
        "unknown_extension_tag": "برچسب ناشناختهٔ افزونه «$1»",
        "duplicate-defaultsort": "هشدار: ترتیب پیش‌فرض «$2» ترتیب پیش‌فرض قبلی «$1» را باطل می‌کند.",
        "duplicate-displaytitle": "<strong>هشدار:</strong> نمایش عنوان \" $2 \"باعث ابطال پیش نمایش عنوان\" $1 \" می‌شود.",
+       "invalid-indicator-name": "<strong>خطا:</strong>ویژگی های شاخص‌های وضعیت صفحهٔ <code>name</code> نباید خالی باشند.",
        "version": "نسخه",
        "version-extensions": "افزونه‌های نصب‌شده",
        "version-skins": "پوسته‌های نصب شده",
        "specialpages-group-media": "گزارش بارگذاری رسانه‌ها",
        "specialpages-group-users": "کاربرها و دسترسی‌ها",
        "specialpages-group-highuse": "صفحه‌های پربازدید",
-       "specialpages-group-pages": "فهرست‌های صفحه‌ها",
-       "specialpages-group-pagetools": "ابزارهای صفحه‌ها",
+       "specialpages-group-pages": "فهرست‌های صفحات",
+       "specialpages-group-pagetools": "ابزارهای صفحات",
        "specialpages-group-wiki": "داده و ابزارها",
        "specialpages-group-redirects": "صفحه‌های ویژهٔ تغییرمسیر دهنده",
        "specialpages-group-spam": "ابزارهای هرزنگاری",
        "tags": "برچسب‌های تغییر مجاز",
        "tag-filter": "پالایش [[Special:Tags|برچسب‌ها]]:",
        "tag-filter-submit": "پالایه",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|برچسب|برچسب}}]]: $2)",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|برچسب|برچسب‌ها}}]]: $2)",
        "tags-title": "برچسب‌ها",
        "tags-intro": "این صفحه فهرستی‌است از برچسب‌هایی که نرم‌افزار با آن‌ها ویرایش‌ها را علامت‌گذری می‌کند، به همراه معانی آن‌ها.",
        "tags-tag": "نام برچسب",
        "tags-active-no": "خیر",
        "tags-edit": "ویرایش",
        "tags-hitcount": "$1 {{PLURAL:$1|تغییر|تغییر}}",
-       "comparepages": "مقایسهٔ صفحه‌ها",
+       "comparepages": "مقایسهٔ صفحات",
        "compare-page1": "صفحهٔ ۱",
        "compare-page2": "صفحهٔ ۲",
        "compare-rev1": "نسخهٔ ۱",
        "revdelete-uname-unhid": "نام کاربری را آشکار کرد",
        "revdelete-restricted": "مدیران را محدود کرد",
        "revdelete-unrestricted": "محدودیت مدیران را لغو کرد",
+       "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-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",
-       "logentry-upload-overwrite": "$1 یک نسخهٔ جدید {{GENDER:$2|بارگذاری‌کرد}} $3",
+       "logentry-upload-upload": "$1 $3 را {{GENDER:$2|بارگذاری کرد}}",
+       "logentry-upload-overwrite": "$1 نسخهٔ تازه‌ای از $3 را {{GENDER:$2|بارگذاری کرد}}",
        "logentry-upload-revert": "$1 {{GENDER:$2|بارگذاری کرد}} $3",
        "rightsnone": "(هیچ)",
+       "revdelete-summary": "خلاصه ویرایش",
        "feedback-bugornote": "اگر آماده‌اید تا مشکلی فنی را با جزئیاتش شرح دهید لطفاً [$1 یک ایراد گزارش دهید]. در غیر این صورت می‌توانید از فرم سادهٔ زیر استفاده کنید. نظر شما به همراه نام کاربری و مرورگرتان به صفحهٔ «[$3 $2]» افزوده خواهد شد.",
        "feedback-subject": "موضوع:",
        "feedback-message": "پیغام:",
        "feedback-thanks": "سپاس! بازخورد شما در صفحهٔ «[$1 $2]» ثبت شد.",
        "feedback-close": "انجام شد",
        "feedback-bugcheck": "عالی‌است! فقط بررسی کنید که از [$1 ایرادهای شناخته‌شده] نباشد.",
-       "feedback-bugnew": "بررسÛ\8c Ú©Ø±Ø¯Ù\85. Ø§Û\8cرادÛ\8c Ø¬Ø¯Û\8cد را گزارش بده",
+       "feedback-bugnew": "بررسÛ\8c Ú©Ø±Ø¯Ù\85. Ø§Û\8cرادÛ\8c ØªØ§Ø²Ù\87 را گزارش بده",
        "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 \"",
        "duration-millennia": "{{PLURAL:$1|هزار سال |$1 هزار سال}}",
        "rotate-comment": "تصویر به دست $1 {{PLURAL:$1|درجهٔ|درجهٔ}} ساعت‌گرد چرخانده شد",
        "limitreport-title": "داده‌های رخ‌نمانگاری تجزیه‌کننده:",
-       "limitreport-cputime": "زمان مصرف سی‌پی‌یو",
+       "limitreport-cputime": "زمان مصرفی سی‌پی‌یو",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|ثانیه}}",
-       "limitreport-walltime": "استÙ\81ادÙ\87 Ø²Ù\85اÙ\86 واقعی",
+       "limitreport-walltime": "زÙ\85اÙ\86 Ù\85صرÙ\81Û\8c واقعی",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|ثانیه|ثانیه}}",
-       "limitreport-ppvisitednodes": "شمارش گرهٔ پیش‌پردازنده مشاهده‌شده",
-       "limitreport-ppgeneratednodes": "شمارش گره پیش‌پردازنده تولیدشده",
-       "limitreport-postexpandincludesize": "شاÙ\85Ù\84 Ø§Ù\86دازÙ\87 Ù¾Ø³ گسترش",
+       "limitreport-ppvisitednodes": "شمارندهٔ گره بازدیدشدهٔ پیش‌پردازنده",
+       "limitreport-ppgeneratednodes": "شمارندهٔ گره تولیدی پیش‌پردازنده",
+       "limitreport-postexpandincludesize": "اÙ\86دازÙ\87Ù\94 Ø¯Ø±Ø¨Ø±Ú¯Û\8cرÙ\86دÙ\87 Ù¾Ø³ Ø§Ø² گسترش",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|بایت|بایت}}",
-       "limitreport-templateargumentsize": "اÙ\86دازÙ\87 Ø¹Ù\85Ù\84گر الگو",
+       "limitreport-templateargumentsize": "اÙ\86دازÙ\87 Ø¢Ø±Ú¯Ù\88Ù\85اÙ\86 الگو",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|بایت|بایت}}",
        "limitreport-expansiondepth": "بیشترین عمق گسترش",
        "limitreport-expensivefunctioncount": "تعداد تابع تجزیه‌گر پرمصرف",
        "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-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 ('''غیر فعال''')",
+       "mediastatistics": "آمار رسانه‌ها",
+       "mediastatistics-summary": "آمارها دربارهٔ نوع‌های پرونده‌ای به روزشده. این فقط شامل آخرین نسخهٔ پرونده است. نسخه‌های قدیمی یا حذف‌شده مسثنی هستند.",
+       "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-drawing": "طراحی‌ها (تصاویر برداری)",
+       "mediastatistics-header-audio": "صدا",
+       "mediastatistics-header-video": "ویدیو‌ها",
+       "mediastatistics-header-multimedia": "رسانه‌های غنی",
+       "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-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": "یک مقداری نوعی که نمی‌تواند کدگذاری شود داده شده است"
 }
index c24788b..78fa818 100644 (file)
@@ -4,7 +4,8 @@
                        "Amire80",
                        "Amkoullel",
                        "Guaka (on ff.wikipedia.org)",
-                       "Ibrahima"
+                       "Ibrahima",
+                       "아라"
                ]
        },
        "tog-underline": "Diidtol jokke",
        "mytalk": "Yeewtere",
        "navigation": "Peeragol",
        "faq": "FAQ",
-       "vector-action-addsection": "Ɓeydi toɓɓere",
-       "vector-action-move": "Dirtin",
-       "vector-view-create": "Sos",
-       "vector-view-edit": "Taƴto",
-       "vector-view-history": "Yiyto aslol",
-       "vector-view-view": "Tar",
-       "vector-view-viewsource": "Yiyto ɗaɗol",
        "actions": "Baɗe",
        "namespaces": "Boowal inɗe",
        "variants": "Lomtooɗe",
        "talkpagelinktext": "Yeewtere",
        "specialpage": "Hello heeriingo",
        "personaltools": "Kuutorɗe maa keeriiɗe",
-       "postcomment": "Taƴre hesere",
        "articlepage": "Yiyto hello loowdi ngoo",
        "talk": "Kaldigal",
        "views": "Jiyte",
        "remembermypassword": "Siiftor ceŋagol am e ndee wanngorde (so heewii ko {{PLURAL:$1|ñalawma|balɗe}}$1)",
        "login": "Seŋo",
        "nav-login-createaccount": "Seŋo / uddit konte",
-       "loginprompt": "Alaa e sago kurminaa kukiije ngam seŋaade e {{SITENAME}}.",
        "userlogin": "Seŋo / uddit konte",
        "userlogout": "Seŋto",
        "nologin": "A alaa konte tawo? $1.",
        "searchmenu-exists": "'''Ena woodi hello ena wiyee \"[[:$1]]\" e oo wiki.'''",
        "searchmenu-new": "'''Sos hello \"[[:$1]]\" e oo wiki!'''",
        "searchprofile-articles": "Kello loowdi",
-       "searchprofile-project": "Hello ballal e Eɓɓoore",
        "searchprofile-images": "Sawmejaajo",
        "searchprofile-everything": "Fofof",
        "searchprofile-advanced": "Ceeɓtore",
        "searchprofile-articles-tooltip": "Yiylo e $1",
-       "searchprofile-project-tooltip": "Yiylo e $1",
        "searchprofile-images-tooltip": "Yiylo piille",
        "searchprofile-everything-tooltip": "Yiylo loowdi fof (waɗoe heen kelle jeewte)",
        "searchprofile-advanced-tooltip": "Yiylo e boowe inɗe peŋtore",
        "search-section": "(taƴre $1)",
        "search-suggest": "Maa taw njiɗ-ɗaa wiyde ko: $1",
        "searchall": "fof",
-       "showingresultsheader": "{{PLURAL:$5|Njaltudi'''$1''' of '''$3'''|Jaltuɗe'''$1 - $2''' of '''$3'''}} for '''$4'''",
        "search-nonefound": "Alaa njaltudi arti e ndee ɗaɓɓitannde.",
        "mypreferences": "Cuɓoraade",
        "recentchanges": "Wailitooji kesi",
        "recentchanges-label-newpage": "Ngoo taƴto sosii hello heso",
        "recentchanges-label-bot": "Ngoo taƴto waɗi ɗum ko botol",
        "recentchanges-label-unpatrolled": "Ngoo taƴto suwaa tawo ƴeewteede",
-       "rclistfrom": "Hollu bayle kese puɗɗiiɗe gila $1",
+       "rclistfrom": "Hollu bayle kese puɗɗiiɗe gila $3 $2",
        "rclinks": "Hollu bayle $1 cakkitiiɗe baɗaaɗe e balɗe $2 ɓannuɗe ɗee<br />$3",
        "diff": "ceer",
        "hist": "aslol",
        "pager-older-n": "{{PLURAL:$1|ɓennungol 1|ɓennuɗi $1}}",
        "booksources": "Sewnde defte",
        "log": "Loge",
-       "alphaindexline": "$1 haa $2",
        "allarticles": "Winndannde hesere",
        "allpagessubmit": "Yah",
        "linksearch-line": "$1 ko-ko jokkaa e $2",
index 107af20..6cccd40 100644 (file)
@@ -40,7 +40,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Syreeni",
-                       "MrTapsa"
+                       "MrTapsa",
+                       "SMAUG"
                ]
        },
        "tog-underline": "Linkkien alleviivaus:",
        "searchbutton": "Hae",
        "go": "Siirry",
        "searcharticle": "Siirry",
-       "history": "Historia",
+       "history": "Sivun historia",
        "history_short": "Historia",
        "updatedmarker": "päivitetty viimeisimmän käyntisi jälkeen",
        "printableversion": "Tulostettava versio",
        "otherlanguages": "Muilla kielillä",
        "redirectedfrom": "Ohjattu sivulta $1",
        "redirectpagesub": "Ohjaussivu",
+       "redirectto": "Ohjaus sivulle:",
        "lastmodifiedat": "Sivua on viimeksi muutettu $1 kello $2.",
        "viewcount": "Tämä sivu on näytetty {{PLURAL:$1|yhden kerran|$1 kertaa}}.",
        "protectedpage": "Suojattu sivu",
        "view-pool-error": "Valitettavasti palvelimet ovat ylikuormittuneet tällä hetkellä.\nLiian monta käyttäjää yrittää tarkastella tätä sivua.\nOdota hetki ennen kuin yrität uudelleen.\n\n$1",
        "generic-pool-error": "Valitettavasti palvelimet ovat ylikuormittuneet tällä hetkellä.\nLiian monta käyttäjää yrittää tarkastella tätä sivua.\nOdota hetki ennen kuin yrität uudelleen.",
        "pool-timeout": "Lukon aikakatkaisu.",
-       "pool-queuefull": "Lukkojono on täysi.",
+       "pool-queuefull": "Prosessijoukon jono on täynnä",
        "pool-errorunknown": "Tuntematon virhe.",
        "pool-servererror": "Pool counter -palvelu ei ole käytettävissä ($1).",
        "aboutsite": "Tietoja {{GRAMMAR:elative|{{SITENAME}}}}",
        "cannotdelete-title": "Sivua $1 ei voi poistaa",
        "delete-hook-aborted": "Laajennuskoodi esti poiston antamatta syytä.",
        "no-null-revision": "Nollamuokkausta sivulla \"$1\" ei voi tehdä",
-       "badtitle": "Virheellinen otsikko",
+       "badtitle": "Kelvoton sivun nimi",
        "badtitletext": "Pyytämäsi sivunimi oli virheellinen, tyhjä tai väärin linkitetty kieltenvälinen tai wikienvälinen nimi.\nSiinä saattaa olla yksi tai useampi sellainen merkki, jota ei voi käyttää sivujen nimissä.",
        "perfcached": "Nämä tiedot ovat välimuistista eivätkä välttämättä ole ajan tasalla. Välimuistissa on saatavilla enintään {{PLURAL:$1|yksi tulos|$1 tulosta}}.",
        "perfcachedts": "Nämä tiedot ovat välimuistista, ja ne on päivitetty viimeksi $1. Välimuistissa on saatavilla enintään {{PLURAL:$4|yksi tulos|$4 tulosta}}.",
        "viewsourcetext": "Voit katsoa ja kopioida tämän sivun lähdetekstiä:",
        "viewyourtext": "Voit tarkastella ja kopioida lähdekoodin '''tekemistäsi muutoksista''' tähän sivuun:",
        "protectedinterface": "Tämä sivu sisältää ohjelmiston käyttöliittymätekstiä ja on suojattu häiriköinnin estämiseksi.\nViestien kääntäminen tulisi tehdä [//translatewiki.net/ translatewiki.netissä] – MediaWikin kotoistusprojektissa.",
-       "editinginterface": "'''Varoitus:''' Muokkaat sivua, joka sisältää ohjelmiston käyttöliittymätekstiä.\nMuutokset tähän sivuun vaikuttavat muiden käyttäjien käyttöliittymän ulkoasuun tässä wikissä.\nViestien kääntäminen tulisi tehdä [//translatewiki.net/ translatewiki.netissä] – MediaWikin kotoistusprojektissa.",
+       "editinginterface": "<strong>Varoitus:</strong> Olet muokkaamassa sivua, joka sisältää ohjelmiston käyttöliittymän tekstiä.\nMuutokset tähän sivuun vaikuttavat muiden käyttäjien käyttöliittymän ulkoasuun tässä wikissä.",
+       "translateinterface": "Jos haluat lisätä tai muuttaa käännöksiä kaikissa wikeissä, käytä siihen MediaWikin kääntämistä varten rakennettua sivustoa [//translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "Tämä sivu on suojattu muokkauksilta, koska se on sisällytetty {{PLURAL:$1|seuraavaan tarttuvasti suojattuun sivuun|seuraaviin tarttuvasti suojattuihin sivuihin}}:\n$2",
        "namespaceprotected": "Et voi muokata sivuja nimiavaruudessa '''$1'''.",
        "customcssprotected": "Sinulla ei ole oikeutta muuttaa tätä CSS-sivua, koska se sisältää toisen käyttäjän henkilökohtaisia asetuksia.",
        "createaccount-text": "Joku on luonut tunnuksen $2 {{GRAMMAR:illative|{{SITENAME}}}} ($4).\nTunnus on \"$2\" ja sen salasana on \"$3\". Sinun on syytä kirjautua sisään ja vaihtaa salasanasi heti.\n\nSinun ei tarvitse välittää tästä viestistä, jos tämä tunnus on luotu virheellisesti.",
        "login-throttled": "Olet tehnyt liian monta kirjautumisyritystä.\nOdota $1 ennen kuin yrität uudelleen.",
        "login-abort-generic": "Kirjautuminen epäonnistui – keskeytetty",
+       "login-migrated-generic": "Tunnuksesi on siirretty, ja käyttäjänimeäsi ei löydy enää tästä wikistä.",
        "loginlanguagelabel": "Kieli: $1",
        "suspicious-userlogout": "Pyyntösi kirjautua ulos evättiin, koska se näytti rikkinäisen selaimen tai välimuistipalvelimen lähettämältä.",
        "createacct-another-realname-tip": "Vapaaehtoinen.\nNimesi näytetään käyttäjätunnuksesi sijasta sivun tekijäluettelossa.",
        "passwordreset-emailsent-capture": "Salasanan uudistamisesta kertova sähköpostiviesti on lähetetty, ja se näkyy myös alla.",
        "passwordreset-emailerror-capture": "Allaoleva sähköpostiviesti luotiin, mutta sen lähettäminen {{GENDER:$2|käyttäjälle}} epäonnistui: $1",
        "changeemail": "Muuta sähköpostiosoitetta",
-       "changeemail-header": "Muuta tunnuksen sähköpostiosoite",
        "changeemail-text": "Voit vaihtaa sähköpostiosoitteesi täyttämällä tämän lomakkeen. Muutoksen vahvistamiseen tarvitaan myös salasana.",
        "changeemail-no-info": "Tämän sivun käyttö edellyttää sisäänkirjautumista.",
        "changeemail-oldemail": "Nykyinen sähköpostiosoite:",
        "changeemail-none": "(ei asetettu)",
        "changeemail-password": "{{SITENAME}}-salasanasi:",
        "changeemail-submit": "Muuta sähköpostiosoite",
-       "changeemail-cancel": "Peruuta",
        "changeemail-throttled": "Olet tehnyt liian monta kirjautumisyritystä.\nOdota $1 ennen kuin yrität uudelleen.",
        "resettokens": "Uudista avaimet",
        "resettokens-text": "Tällä sivulla voit uudistaa avaimesi (''eng.'' reset tokens), jotka mahdollistavat pääsyn käyttäjätunnukseesi liittyviin tiettyihin yksityisiin tietoihin.\n\nSinun pitäisi tehdä tämä, jos olet vahingossa jakanut avaimet jonkun kanssa tai jos käyttäjätunnuksesi on vaarannettu.",
        "showpreview": "Esikatsele",
        "showdiff": "Näytä muutokset",
        "blankarticle": "<strong>Varoitus:</strong> Sivu, jota olet luomassa, on tyhjä.\nJos napsautat \"{{int:savearticle}}\" uudelleen, sivu luodaan ilman sisältöä.",
-       "anoneditwarning": "'''Varoitus:''' Et ole kirjautunut sisään.\nIP-osoitteesi kirjataan tämän sivun muutoshistoriaan.",
+       "anoneditwarning": "<strong>Varoitus:</strong> Et ole kirjautunut sisään. IP-osoitteesi näkyy julkisesti kaikille, jos muokkaat. Jos <strong>[$1 kirjaudut sisään]</strong> tai <strong>[$2 luot tunnuksen]</strong>, muokkauksesi kirjataan käyttäjätunnuksesi tekemiksi ja samalla saat käyttöösi hyödyllisiä välineitä.",
        "anonpreviewwarning": "''Et ole kirjautunut sisään. Tallentaminen kirjaa IP-osoitteesi tämän sivun muutoshistoriaan.''",
        "missingsummary": "Et ole antanut yhteenvetoa. Jos valitset Tallenna uudelleen, niin muokkauksesi tallennetaan ilman yhteenvetoa.",
        "missingcommenttext": "Kirjoita viesti alle.",
        "longpageerror": "'''Virhe: Lähettämäsi tekstin pituus on {{PLURAL:$1|kilotavu|$1 kilotavua}}. Tekstiä ei voida tallentaa, koska se on pitempi kuin sallittu enimmäispituus {{PLURAL:$2|yksi kilotavu|$2 kilotavua}}.'''",
        "readonlywarning": "'''Varoitus: Tietokanta on lukittu huoltoa varten, joten et pysty tallentamaan muokkauksiasi juuri nyt.'''\nSaattaa olla paras leikata ja liimata tekstisi omaan tekstitiedostoosi ja tallentaa se tänne myöhemmin.\n\nLukitsemisen syy: $1",
        "protectedpagewarning": "'''Varoitus: Tämä sivu on suojattu niin, että vain ylläpitäjät voivat muokata sitä.'''\nAlla on viimeisin lokitapahtuma:",
-       "semiprotectedpagewarning": "'''Huomautus:''' Tämä sivu on suojattu niin, että vain rekisteröityneet käyttäjät voivat muokata sitä.\nAlla on viimeisin lokitapahtuma:",
+       "semiprotectedpagewarning": "<strong>Huomaa:</strong> Tämä sivu on suojattu niin, että vain rekisteröityneet käyttäjät voivat muokata sitä.\nAlla on viimeisin lokitapahtuma:",
        "cascadeprotectedwarning": "<strong>Varoitus:</strong> Vain ylläpitäjät voivat muokata tätä sivua, koska se on sisällytetty {{PLURAL:$1|seuraavaan tarttuvasti suojattuun sivuun|seuraaviin tarttuvasti suojattuihin sivuihin}}:",
        "titleprotectedwarning": "'''Varoitus: Tämä sivunimi on suojattu niin, että sivun luomiseen tarvitaan [[Special:ListGroupRights|erityisiä oikeuksia]].'''\nAlla on viimeisin lokitapahtuma:",
        "templatesused": "Tällä sivulla {{PLURAL:$1|käytetty malline|käytetyt mallineet}}:",
        "content-model-text": "pelkkä teksti",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Sivut, jotka käyttävät kaksinkertaisia argumentteja mallinekutsuissa",
        "expensive-parserfunction-warning": "Tällä sivulla on liian monta hitaiden laajennusfunktioiden kutsua.\nKutsuja pitäisi olla alle $2 {{PLURAL:$2|kappale|kappaletta}}, mutta nyt niitä on $1 {{PLURAL:$1|kappale|kappaletta}}.",
        "expensive-parserfunction-category": "Sivut, joissa on liian monta vaativaa jäsenninfunktiota",
        "post-expand-template-inclusion-warning": "'''Varoitus:''' Sisällytettyjen mallineiden koko on liian suuri.\nJoitakin mallineita ei ole sisällytetty.",
        "mergehistory-same-destination": "Lähde- ja kohdesivut eivät voi olla samat",
        "mergehistory-reason": "Syy:",
        "mergelog": "Yhdistämisloki",
-       "pagemerge-logentry": "yhdisti kohteen [[$1]] kohteeseen [[$2]] (muokkaukseen $3 saakka)",
        "revertmerge": "Peru yhdistäminen",
        "mergelogpagetext": "Alla on loki viimeisimmistä muutoshistorioiden yhdistämisistä.",
        "history-title": "Sivun ”$1” muutoshistoria",
        "search-result-category-size": "{{PLURAL:$1|1 jäsen|$1 jäsentä}} ({{PLURAL:$2|1 alaluokka|$2 alaluokkaa}}, {{PLURAL:$3|1 tiedosto|$3 tiedostoa}})",
        "search-redirect": "(ohjaus $1)",
        "search-section": "(osio $1)",
+       "search-category": "(luokka $1)",
        "search-file-match": "(vastaa tiedoston sisältöä)",
        "search-suggest": "Tarkoititko: $1",
        "search-interwiki-caption": "Sisarprojektit",
        "searchall": "kaikki",
        "showingresults": "Alla on vain {{PLURAL:$1|<strong>1</strong> hakutulos|<strong>$1</strong> hakutulosta}} alkaen tuloksesta nro <strong>$2</strong>.",
        "showingresultsinrange": "Alla näytetään {{PLURAL:$1|<strong>1</strong> tulos|<strong>$1</strong> tulosta}} väliltä <strong>$2</strong> – <strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Tulokset '''$1'''–'''$3'''|Tulokset '''$1'''–'''$2''' kaikkiaan '''$3''' osuman joukosta}} haulle '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Tulos <strong>$1</strong> enimmäismäärästä <strong>$3</strong>|Tulokset <strong>$1 – $2</strong> enimmäismäärästä <strong>$3</strong>}}",
        "search-nonefound": "Hakusi ei tuottanut tulosta.",
        "powersearch-legend": "Laajennettu haku",
        "powersearch-ns": "Hae nimiavaruuksista:",
        "powersearch-remember": "Muista valinta tulevia hakuja varten",
        "search-external": "Ulkoinen haku",
        "searchdisabled": "Tekstihaku on poistettu toistaiseksi käytöstä suuren kuorman vuoksi. Voit käyttää alla olevaa Googlen hakukenttää sivujen etsimiseen, kunnes haku tulee taas käyttöön. <small>Huomaa, että ulkopuoliset kopiot {{GRAMMAR:genitive|{{SITENAME}}}} sisällöstä eivät välttämättä ole ajan tasalla.</small>",
-       "search-error": "Virhe ilmaantui haettaessa: $1",
+       "search-error": "Hakutoiminnossa on havaittu virhe: $1",
        "preferences": "Asetukset",
        "mypreferences": "Asetukset",
        "prefs-edits": "Muokkauksia",
        "gender-female": "Nainen",
        "prefs-help-gender": "Tämän asetuksen määrittäminen on vapaaehtoista.\nOhjelmisto käyttää annettua arvoa viitaten sinuun oikealla kieliopillisella suvulla.\nTämä tieto on julkinen.",
        "email": "Sähköpostitoiminnot",
-       "prefs-help-realname": "Vapaaehtoinen. Nimesi näytetään käyttäjätunnuksesi sijasta sivun tekijäluettelossa.",
+       "prefs-help-realname": "Oikean nimen ilmoittaminen on vapaaehtoista.\nJos ilmoitettu, sitä voidaan käyttää tekijän mainitsemiseen.",
        "prefs-help-email": "Vapaaehtoinen, mutta tarvitaan uuden salasanan pyytämiseen, jos unohdat salasanasi.",
        "prefs-help-email-others": "Voit myös antaa muiden käyttäjien ottaa yhteyttä sinuun sähköpostilla. Osoitteesi ei paljastu toisen käyttäjän ottaessa sinuun yhteyttä.",
        "prefs-help-email-required": "Sähköpostiosoite on pakollinen.",
        "prefs-tokenwatchlist": "Avain",
        "prefs-diffs": "Eroavaisuudet",
        "prefs-help-prefershttps": "Tämä asetus tulee voimaan seuraavan sisäänkirjautumisesi yhteydessä.",
+       "prefswarning-warning": "Olet tehnyt asetuksiisi muutoksia, joita ei ole vielä tallennettu.\nJos poistut sivulta klikkaamatta \"$1\", asetuksiasi ei päivitetä.",
        "prefs-tabs-navigation-hint": "Vihje: Voit käyttää vasenta ja oikeata nuolinäppäintä liikkumiseen välilehtien välillä.",
        "email-address-validity-valid": "Sähköpostiosoite vaikuttaa kelvolliselta",
        "email-address-validity-invalid": "Virheellinen sähköpostiosoite",
        "right-writeapi": "Käyttää kirjoitus-APIa",
        "right-delete": "Poistaa sivuja",
        "right-bigdelete": "Poistaa sivuja, joilla on pitkä historia",
-       "right-deletelogentry": "Poistaa ja palauttaa tiettyjä lokimerkintöjä",
-       "right-deleterevision": "Poistaa ja palauttaa sivujen versioita",
-       "right-deletedhistory": "Tarkastella poistettujen versioiden tietoja ilman niihin liittyvää tekstisisältöä",
-       "right-deletedtext": "Tarkastella poistettujen sivujen tekstiä ja muutoksia poistettujen versioiden välillä",
+       "right-deletelogentry": "Poistaa ja palauttaa näkyviin yksittäisiä lokimerkintöjä",
+       "right-deleterevision": "Poistaa ja palauttaa näkyviin sivujen yksittäisiä versioita",
+       "right-deletedhistory": "Nähdä poistetut merkinnät sivuhistoriassa ilman niihin liittyvää tekstisisältöä",
+       "right-deletedtext": "Nähdä poistettu teksti ja muutokset poistettujen versioiden välillä",
        "right-browsearchive": "Hakea poistettuja sivuja",
        "right-undelete": "Palauttaa poistettuja sivuja",
-       "right-suppressrevision": "Katsoa, piilottaa ja tuoda näkyviin tiettyjä sivujen versioita kaikilta käyttäjiltä",
+       "right-suppressrevision": "Nähdä, piilottaa ja tuoda näkyviin yksittäisiä sivujen versioita, jotka on piilotettu kaikilta käyttäjiltä",
        "right-viewsuppressed": "Katsoa versioita, jotka on piilotettu jokaiselta käyttäjältä",
-       "right-suppressionlog": "Tarkastella yksityisiä lokeja",
+       "right-suppressionlog": "Nähdä yksityiset lokit",
        "right-block": "Asettaa toiselle käyttäjälle muokkausesto",
        "right-blockemail": "Estää käyttäjää lähettämästä sähköpostia",
        "right-hideuser": "Estää käyttäjätunnus ja piilottaa se näkyvistä",
        "right-editmyusercss": "Muokata omia CSS-tiedostoja",
        "right-editmyuserjs": "Muokata omia JavaScript-tiedostoja",
        "right-viewmywatchlist": "Nähdä oma tarkkailulista",
-       "right-editmywatchlist": "Muokata tarkkailulistaasi. Huomaa, että jotkin toiminnot lisäävät yhä sivuja listallesi riippumatta tästä oikeudesta.",
+       "right-editmywatchlist": "Muokata omaa tarkkailulistaasi. (Jotkut toiminnot lisäävät edelleen sivuja listallesi ilmankin tätä oikeutta.)",
        "right-viewmyprivateinfo": "Nähdä omat yksityiset tietosi (esim. sähköpostiosoite, oikea nimi)",
        "right-editmyprivateinfo": "Muokata omia yksityisiä tietojasi (esim. sähköpostiosoite, oikea nimi)",
        "right-editmyoptions": "Muokata omia asetuksiasi",
        "right-patrol": "Merkitä muiden tekemät muokkaukset tarkastetuiksi",
        "right-autopatrol": "Omat muokkaukset on automaattisesti merkitty tarkastetuksi",
        "right-patrolmarks": "Nähdä tarkastusmerkit tuoreissa muutoksissa",
-       "right-unwatchedpages": "Nähdä luetteloa tarkkailemattomista sivuista",
+       "right-unwatchedpages": "Nähdä luettelon tarkkailemattomista sivuista",
        "right-mergehistory": "Yhdistää sivujen historioita",
        "right-userrights": "Muuttaa kaikkia käyttäjäoikeuksia",
        "right-userrights-interwiki": "Muokata käyttäjien oikeuksia muissa wikeissä",
        "action-userrights-interwiki": "muokata muiden wikien käyttäjien käyttöoikeuksia",
        "action-siteadmin": "lukita tai avata tietokantaa",
        "action-sendemail": "lähettää sähköpostia",
-       "action-editmywatchlist": "muokata tarkkailulistaasi",
+       "action-editmywatchlist": "muokata omaa tarkkailulistaasi",
        "action-viewmywatchlist": "tarkastella tarkkailulistaasi",
        "action-viewmyprivateinfo": "katsoa omia yksityisiä tietojasi",
        "action-editmyprivateinfo": "muokata omia yksityisiä tietojasi",
        "enhancedrc-history": "historia",
        "recentchanges": "Tuoreet muutokset",
        "recentchanges-legend": "Tuoreiden muutosten asetukset",
-       "recentchanges-summary": "Tällä sivulla voi seurata tuoreita {{GRAMMAR:illative|{{SITENAME}}}} tehtyjä muutoksia.",
+       "recentchanges-summary": "Tällä sivulla voi seurata tuoreita tähän wikiin tehtyjä muutoksia.",
        "recentchanges-noresult": "Ei muutoksia, jotka täyttävät nämä kriteerit valitun ajanjakson aikana.",
        "recentchanges-feed-description": "Tällä sivulla voi seurata tuoreita {{GRAMMAR:illative|{{SITENAME}}}} tehtyjä muutoksia.",
        "recentchanges-label-newpage": "Tämä muutos loi uuden sivun",
        "recentchangeslinked-toolbox": "Linkitettyjen sivujen muutokset",
        "recentchangeslinked-title": "Sivulta $1 linkitettyjen sivujen muutokset",
        "recentchangeslinked-summary": "Tämä on luettelo muutoksista, jotka on viimeksi tehty niihin sivuihin, joihin johtaa linkki tietystä sivusta (tai jonkun määrätyn luokan sisältämistä sivuista). Omalla [[Special:Watchlist|tarkkailulistallasi]] olevat sivut on <strong>lihavoitu</strong>.",
-       "recentchangeslinked-page": "Sivu",
+       "recentchangeslinked-page": "Sivun nimi:",
        "recentchangeslinked-to": "Näytä sen sijaan muutokset sivuihin, joista on linkki tähän sivuun",
        "upload": "Tallenna tiedosto",
        "uploadbtn": "Tallenna tiedosto",
        "upload-description": "Tiedoston kuvaus",
        "upload-options": "Tallennusasetukset",
        "watchthisupload": "Tarkkaile tätä tiedostoa",
-       "filewasdeleted": "Tämän niminen tiedosto on lisätty ja poistettu aikaisemmin. Tarkista $1 ennen jatkamista.",
+       "filewasdeleted": "Tiedosto tällä samalla nimellä on aikaisemmin tallennettu ja sittemmin poistettu.\nKatso $1 ennen kuin jatkat tiedoston tallentamista uudestaan.",
        "filename-bad-prefix": "Tallentamasi tiedoston nimi alkaa merkkijonolla '''$1''', joka on yleensä digitaalikameroiden automaattisesti antama nimi, joka ei kuvaa tiedoston sisältöä. Anna tiedostolle kuvaavampi nimi.",
        "filename-prefix-blacklist": " #<!-- älä muokkaa tätä riviä --> <pre>\n# Syntaksi on seuraava:\n#   * #-merkki aloittaa kommentin, joka jatkuu rivin loppuun\n#   * Jokainen epätyhjä rivi on tiedostonimien etuliite digitaalikameroiden yleisesti käyttämille tiedostonimille\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # jotkut matkapuhelimet\nIMG # yleinen\nJD # Jenoptik\nMGP # Pentax\nPICT # muut\n #</pre> <!-- älä muokkaa tätä riviä -->",
        "upload-success-subj": "Tallennus onnistui",
        "statistics": "Tilastot",
        "statistics-header-pages": "Sivutilastot",
        "statistics-header-edits": "Muokkaustilastot",
-       "statistics-header-views": "Katselutilastot",
        "statistics-header-users": "Käyttäjätilastot",
        "statistics-header-hooks": "Muut tilastot",
        "statistics-articles": "Sisältösivuja",
        "statistics-files": "Tallennettuja tiedostoja",
        "statistics-edits": "Muokkauksia {{GRAMMAR:genitive|{{SITENAME}}}} perustamisen jälkeen",
        "statistics-edits-average": "Keskimäärin yhtä sivua muokattu",
-       "statistics-views-total": "Sivuja katsottu yhteensä",
-       "statistics-views-total-desc": "Näyttökertoihin eivät sisälly toimintosivut eikä sivut, joita ei ole olemassa",
-       "statistics-views-peredit": "Sivuja katsottu muokkausta kohden",
        "statistics-users": "Rekisteröityneitä [[Special:ListUsers|käyttäjiä]]",
        "statistics-users-active": "Aktiivisia käyttäjiä",
        "statistics-users-active-desc": "Käyttäjät, jotka ovat suorittaneet jonkin toiminnon {{PLURAL:$1|edellisen päivän|edellisten $1 päivän}} aikana.",
-       "statistics-mostpopular": "Katsotuimmat sivut",
        "pageswithprop": "Sivut sivun ominaisuuden mukaan",
        "pageswithprop-legend": "Sivut sivun ominaisuuden mukaan",
        "pageswithprop-text": "Tällä sivulla on lueteltu sivut, jotka käyttävät erityistä sivun ominaisuutta.",
        "uncategorizedtemplates": "Luokittelemattomat mallineet",
        "unusedcategories": "Käyttämättömät luokat",
        "unusedimages": "Käyttämättömät tiedostot",
-       "popularpages": "Suositut sivut",
        "wantedcategories": "Halutut luokat",
        "wantedpages": "Halutut sivut",
        "wantedpages-badtitle": "Virheellinen otsikko tuloksissa: $1",
        "unusedimagestext": "Seuraavat tiedostot ovat olemassa, mutta niitä ei käytetä millään sivulla.\nHuomaa, että muut verkkosivut saattavat viitata tiedostoon suoran URL:n avulla, jolloin tiedosto saattaa olla tässä listassa, vaikka sitä käytetäänkin.",
        "unusedcategoriestext": "Nämä luokat ovat olemassa, mutta niitä ei käytetä.",
        "notargettitle": "Ei kohdetta",
-       "notargettext": "Et ole määritellyt kohdesivua tai -käyttäjää johon toiminto kohdistuu.",
+       "notargettext": "Et ole määritellyt kohteeksi sivua tai käyttäjää, johon toiminto suoritetaan.",
        "nopagetitle": "Kohdesivua ei ole olemassa.",
        "nopagetext": "Määritettyä kohdesivua ei ole olemassa.",
        "pager-newer-n": "← {{PLURAL:$1|1 uudempi|$1 uudempaa}}",
        "pager-older-n": "{{PLURAL:$1|1 vanhempi|$1 vanhempaa}} →",
        "suppress": "Häivytys",
        "querypage-disabled": "Tämä toimintosivu on poistettu käytöstä suorituskykysyistä.",
+       "apihelp": "API-apu",
+       "apihelp-no-such-module": "Moduulia ”$1” ei löydy.",
        "booksources": "Kirjalähteet",
        "booksources-search-legend": "Etsi kirjalähteitä",
        "booksources-isbn": "ISBN",
-       "booksources-go": "Siirry",
+       "booksources-search": "Hae",
        "booksources-text": "Alla linkkejä ulkopuolisiin sivustoihin, joilla myydään uusia ja käytettyjä kirjoja. Sivuilla voi myös olla lisätietoa kirjoista.",
        "booksources-invalid-isbn": "Annettu ISBN-numero ei ole kelvollinen. Tarkista alkuperäisestä lähteestä kirjoitusvirheiden varalta.",
        "specialloguserlabel": "Suorittaja:",
        "allarticles": "Kaikki sivut",
        "allinnamespace": "Kaikki sivut nimiavaruudessa $1",
        "allpagessubmit": "Hae",
-       "allpagesprefix": "Katkaisuhaku",
+       "allpagesprefix": "Sivut, jotka alkavat etuliitteellä:",
        "allpagesbadtitle": "Annettu otsikko oli kelvoton tai siinä oli wikien välinen etuliite.",
        "allpages-bad-ns": "{{GRAMMAR:inessive|{{SITENAME}}}} ei ole nimiavaruutta ”$1”.",
        "allpages-hide-redirects": "Piilota ohjaukset",
        "linksearch-text": "Jokerimerkkejä, kuten \"*.wikipedia.org\", voidaan käyttää.\nVaaditaan vähintään ylätason verkkotunnus, esimerkiksi \"*.org\".<br />\n{{PLURAL:$2|Tuettu protokolla|Tuetut protokollat}}: <code>$1</code> (oletuksena on <code>http://</code>, jos protokollaa ei määritetä).",
        "linksearch-line": "$1 on linkitetty sivulta $2",
        "linksearch-error": "Jokerimerkkiä voi käyttää ainoastaan osoitteen alussa.",
-       "listusersfrom": "Katkaisuhaku",
+       "listusersfrom": "Käyttäjien tunnukset alkavat kirjaimilla:",
        "listusers-submit": "Hae",
        "listusers-noresult": "Käyttäjiä ei löytynyt.",
        "listusers-blocked": "(estetty)",
        "mywatchlist": "Tarkkailulista",
        "watchlistfor2": "Käyttäjälle $1 $2",
        "nowatchlist": "Tarkkailulistallasi ei ole sivuja.",
-       "watchlistanontext": "Sinun täytyy kirjautua sisään, jos haluat muokata kohteita omalla tarkkailulistallasi.",
+       "watchlistanontext": "Sinun täytyy kirjautua sisään, jos haluat nähdä oman tarkkailulistasi.",
        "watchnologin": "Et ole kirjautunut sisään",
        "addwatch": "Lisää tarkkailulistalle",
        "addedwatchtext": "Sivu '''[[:$1]]''' on lisätty [[Special:Watchlist|tarkkailulistallesi]].\nTulevaisuudessa sivuun ja sen keskustelusivuun tehtävät muutokset listataan täällä.",
        "wlheader-enotif": "Sähköposti-ilmoitus on käytössä.",
        "wlheader-showupdated": "Sivut, joita on muokattu viimeisen käyntisi jälkeen, on '''lihavoitu'''.",
        "wlnote": "Alla {{PLURAL:$1|on viimeisin muutos|ovat viimeisimmät <strong>$1</strong> muutosta}} edellisen {{PLURAL:$2|tunnin|<strong>$2</strong> tunnin}} ajalta $3 kello $4 lukien.",
-       "wlshowlast": "Näytä edelliset $1 tuntia tai $2 päivää tai $3",
+       "wlshowlast": "Näytä edelliset $1 tuntia tai $2 päivää",
        "watchlist-options": "Tarkkailulistan asetukset",
        "watching": "Lisätään tarkkailulistalle...",
        "unwatching": "Poistetaan tarkkailulistalta...",
        "dellogpagetext": "Alla on loki viimeisimmistä poistoista.",
        "deletionlog": "poistoloki",
        "reverted": "Palautettu aikaisempaan versioon",
-       "deletecomment": "Syy",
-       "deleteotherreason": "Muu syy tai tarkennus",
+       "deletecomment": "Syy:",
+       "deleteotherreason": "Muu syy tai tarkennus:",
        "deletereasonotherlist": "Muu syy",
        "deletereason-dropdown": "* Yleiset poistosyyt\n** Spam tai mainossivu\n** Vandalismi\n** Tekijänoikeusrikkomus\n** Sivun tekijän pyyntö\n** Virheellinen ohjaus",
        "delete-edit-reasonlist": "Muokkaa poistosyitä",
-       "delete-toobig": "Tällä sivulla on pitkä muutoshistoria – yli $1 {{PLURAL:$1|versio|versiota}}. Näin suurien muutoshistorioiden poistamista on rajoitettu suorituskykysyistä.",
+       "delete-toobig": "Tällä sivulla on pitkä muokkaushistoria, yli $1 {{PLURAL:$1|versio|versiota}}. \nTämänkaltaisten sivujen poistamista on rajoitettu. Tällä ehkäistään sivuston {{SITENAME}} vaurioitumista tahattomasti.",
        "delete-warning-toobig": "Tällä sivulla on pitkä muutoshistoria – yli $1 {{PLURAL:$1|versio|versiota}}. Näin suurien muutoshistorioiden poistaminen voi haitata sivuston suorituskykyä.",
        "deleteprotected": "Et voi poistaa tätä sivua, koska se on suojattu.",
        "deleting-backlinks-warning": "'''Varoitus:''' Sivulle, jota olet poistamassa, johtaa [[Special:WhatLinksHere/{{FULLPAGENAME}}|linkkejä muilta sivuilta]], tai sivu on sisällytetty muuhun sivuun.",
        "protect-othertime": "Muu kesto:",
        "protect-othertime-op": "muu kesto",
        "protect-existing-expiry": "Nykyinen vanhentumisaika: $2 kello $3",
+       "protect-existing-expiry-infinity": "Nykyinen kesto: ikuinen",
        "protect-otherreason": "Muu syy tai tarkennus:",
        "protect-otherreason-op": "Muu syy",
        "protect-dropdown": "*Yleiset suojaussyyt\n** Jatkuva vandalismi\n** Jatkuva mainoslinkkien lisääminen\n** Muokkaussota\n** Suuri näkyvyys",
        "undelete": "Tarkastele poistettuja sivuja",
        "undeletepage": "Tarkastele ja palauta poistettuja sivuja",
        "undeletepagetitle": "'''Poistetut versiot sivusta [[:$1]]'''.",
-       "viewdeletedpage": "Poistettujen sivujen selaus",
+       "viewdeletedpage": "Tarkastele poistettuja sivuja",
        "undeletepagetext": "{{PLURAL:$1|Seuraava sivu|Seuraavat sivut}} on poistettu, mutta {{PLURAL:$1|se löytyy|ne löytyvät}} vielä arkistosta, joten {{PLURAL:$1|se|ne}} voidaan palauttaa takaisin. Arkisto saatetaan tyhjentää aika ajoin.",
        "undelete-fieldset-title": "Palauta versioita",
        "undeleteextrahelp": "Palauttaaksesi sivun koko muutoshistorian jätä kaikki valintalaatikot tyhjiksi ja napsauta '''''{{int:undeletebtn}}'''''.\nVoit palauttaa versioita valikoivasti valitsemalla vain niiden versioiden valintalaatikot, jotka haluat palauttaa.",
        "invert": "Käänteinen valinta",
        "tooltip-invert": "Valitse tämä kohta, jos haluat piilottaa muutokset sivuihin valitussa nimiavaruudessa (ja liittyviin nimiavaruuksiin, jos valittu)",
        "namespace_association": "Liittyvä nimiavaruus",
-       "tooltip-namespace_association": "Valitse tämä kohta, jos haluat sisällyttää ne keskustelu- tai aihe-nimiavaruudet, jotka liittyvät valittuun nimiavaruuteen",
+       "tooltip-namespace_association": "Valitse tämä kohta, jos haluat haun sisältävän myös sen keskustelu- tai aihe-nimiavaruuden, joka liittyy valittuun nimiavaruuteen",
        "blanknamespace": "(sivut)",
        "contributions": "{{GENDER:$1|Käyttäjän}} muokkaukset",
        "contributions-title": "Käyttäjän $1 muokkaukset",
        "sp-contributions-blocked-notice": "Tämä käyttäjä on tällä hetkellä estetty. Alla on viimeisin estolokin tapahtuma:",
        "sp-contributions-blocked-notice-anon": "Tämä IP-osoite on tällä hetkellä estetty.\nAlla on viimeisin estolokin tapahtuma:",
        "sp-contributions-search": "Etsi muokkauksia",
-       "sp-contributions-username": "IP-osoite tai käyttäjätunnus",
+       "sp-contributions-username": "IP-osoite tai käyttäjätunnus:",
        "sp-contributions-toponly": "Näytä vain muokkaukset, jotka ovat viimeisimpiä versioita",
        "sp-contributions-newonly": "Näytä vain muokkaukset, joilla on luotu sivu",
        "sp-contributions-submit": "Hae",
        "whatlinkshere": "Tänne viittaavat sivut",
        "whatlinkshere-title": "Sivut, jotka viittaavat sivulle $1",
-       "whatlinkshere-page": "Sivu",
+       "whatlinkshere-page": "Sivu:",
        "linkshere": "Seuraavilta sivuilta on linkki sivulle <strong>[[:$1]]</strong>:",
        "nolinkshere": "Sivulle <strong>[[:$1]]</strong> ei ole linkkejä.",
        "nolinkshere-ns": "Sivulle <strong>[[:$1]]</strong> ei ole linkkejä valitussa nimiavaruudessa.",
        "blockip": "Estä {{GENDER:$1|käyttäjä}}",
        "blockip-legend": "Estä käyttäjä",
        "blockiptext": "Tällä toiminnolla voit estää käyttäjätunnusta tai IP-osoitetta muokkaamasta.<br />\nTällainen muokkausesto pitäisi asettaa vain vandalismin torjumiseksi ja [[{{MediaWiki:Policy-url}}|käytännön]] mukaisesti.\nKirjoita eston syy alla olevaan kenttään.",
-       "ipaddressorusername": "IP-osoite tai käyttäjätunnus",
+       "ipaddressorusername": "IP-osoite tai käyttäjätunnus:",
        "ipbexpiry": "Vanhentuu:",
        "ipbreason": "Syy:",
        "ipbreason-dropdown": "*Yleiset estosyyt\n** Väärän tiedon lisääminen\n** Sisällön poistaminen\n** Mainoslinkkien lisääminen\n** Sotkeminen tai roskan lisääminen\n** Häiriköinti\n** Useamman käyttäjätunnuksen väärinkäyttö\n** Sopimaton käyttäjätunnus",
        "unblockiptext": "Tällä lomakkeella voit poistaa käyttäjän tai IP-osoitteen muokkauseston.",
        "ipusubmit": "Poista tämä esto",
        "unblocked": "Käyttäjän [[User:$1|$1]] esto on poistettu",
-       "unblocked-range": "$1 ei ole enää estettynä",
+       "unblocked-range": "Osoitealueen $1 muokkausesto on poistettu.",
        "unblocked-id": "Esto $1 on poistettu",
+       "unblocked-ip": "Käyttäjän [[Special:Contributions/$1|$1]] esto on poistettu.",
        "blocklist": "Estetyt käyttäjät",
        "ipblocklist": "Estetyt käyttäjät",
        "ipblocklist-legend": "Haku",
        "ipb-needreblock": "$1 on jo estetty. Haluatko muuttaa eston asetuksia?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Muu esto|Muut estot}}",
        "unblock-hideuser": "Et voi poistaa estoa tältä käyttäjältä, koska hänen käyttäjätunnuksensa on piilotettu.",
-       "ipb_cant_unblock": "Estoa ”$1” ei löytynyt. Se on saatettu poistaa.",
+       "ipb_cant_unblock": "Virhe: Estoa tunnuksella ”$1” ei löytynyt. Se on ehkä jo otettu pois.",
        "ipb_blocked_as_range": "IP-osoite $1 on estetty välillisesti ja sen estoa ei voi poistaa. Se on estetty osana verkkoaluetta $2, jonka eston voi poistaa",
        "ip_range_invalid": "Virheellinen IP-alue.",
        "ip_range_toolarge": "Suuremmat osoitealue-estot kuin /$1 eivät ole sallittuja.",
        "sorbsreason": "IP-osoitteesi on listattu avoimena välityspalvelimena DNSBL:n mustalla listalla sivustolla {{SITENAME}}.",
        "sorbs_create_account_reason": "IP-osoitteesi on listattu avoimena välityspalvelimena DNSBL:n mustalla listalla sivustolla {{SITENAME}}. \nEt voi luoda käyttäjätunnusta.",
        "xffblockreason": "Yhteydet IP-osoitteesta, joka löytyy sinun tai käyttämäsi välipalvelimen X-Forwarded-For-otsakkeesta, on estetty. Alkuperäinen estämisen syy oli: $1",
-       "cant-see-hidden-user": "Käyttäjä, jota yrität estää on jo estetty ja piilotettu. Koska sinulla ei ole hideuser-oikeutta, et voi nähdä tai muokata käyttäjän estoa.",
+       "cant-see-hidden-user": "Käyttäjä, jota yrität estää, on jo estetty ja käyttäjänimi on piilotettu. \nKoska sinulla ei ole hideuser-oikeutta, et voi nähdä tai muuttaa käyttäjän estoasetuksia.",
        "ipbblocked": "Et voi estää tai poistaa estoja muilta käyttäjiltä, koska itse olet estettynä",
        "ipbnounblockself": "Et ole oikeutettu poistamaan estoa itseltäsi",
        "lockdb": "Lukitse tietokanta",
        "tooltip-pt-mycontris": "Lista omista muokkauksista",
        "tooltip-pt-login": "Kirjaudu sisään tai luo tunnus",
        "tooltip-pt-logout": "Kirjaudu ulos",
+       "tooltip-pt-createaccount": "On suositeltavaa luoda käyttäjätunnus ja kirjautua sisään. Se ei kuitenkaan ole pakollista.",
        "tooltip-ca-talk": "Keskustele sisällöstä",
        "tooltip-ca-edit": "Muokkaa tätä sivua",
        "tooltip-ca-addsection": "Aloita keskustelu uudesta aiheesta",
        "tooltip-feed-atom": "Atom-syöte tälle sivulle",
        "tooltip-t-contributions": "Näytä lista tämän käyttäjän muokkauksista",
        "tooltip-t-emailuser": "Lähetä sähköpostia tälle käyttäjälle",
+       "tooltip-t-info": "Enemmän tietoa tästä sivusta",
        "tooltip-t-upload": "Tallenna tiedostoja",
        "tooltip-t-specialpages": "Näytä toimintosivut",
        "tooltip-t-print": "Tulostettava versio",
        "pageinfo-robot-policy": "Hakukonemerkinnät",
        "pageinfo-robot-index": "Indeksoitava",
        "pageinfo-robot-noindex": "Ei indeksoitava",
-       "pageinfo-views": "Katselukertojen määrä",
        "pageinfo-watchers": "Sivun tarkkailijoiden lukumäärä",
        "pageinfo-few-watchers": "Vähemmän kuin $1 {{PLURAL:$1|tarkkailija|tarkkailijaa}}",
        "pageinfo-redirects-name": "Sivulle johtavat ohjaukset",
        "exif-urgency-low": "Matala ($1)",
        "exif-urgency-high": "Korkea ($1)",
        "exif-urgency-other": "Käyttäjän määrittelemä prioriteetti ($1)",
-       "watchlistall2": "koko historia",
        "namespacesall": "kaikki",
        "monthsall": "kaikki",
        "confirmemail": "Varmenna sähköpostiosoite",
        "bitrate-zetabits": "$1 Zbit/s",
        "bitrate-yottabits": "$1 Ybit/s",
        "lag-warn-normal": "Muutokset, jotka ovat uudempia kuin $1 {{PLURAL:$1|sekunti|sekuntia}}, eivät välttämättä näy tällä sivulla.",
-       "lag-warn-high": "Tietokannoilla on työjonoa. Muutokset, jotka ovat uudempia kuin $1 {{PLURAL:$1|sekunti|sekuntia}}, eivät välttämättä näy tällä sivulla.",
+       "lag-warn-high": "Tietokantojen päivityksessä on huomattavaa viivettä. Muutokset, jotka ovat tuoreempia kuin $1 {{PLURAL:$1|sekunti|sekuntia}}, eivät välttämättä näy luettelossa.",
        "watchlistedit-normal-title": "Tarkkailulistan muokkaus",
        "watchlistedit-normal-legend": "Poista sivuja tarkkailulistalta",
        "watchlistedit-normal-explain": "Tarkkailulistasi sivut on lueteltu alla. Voit poistaa sivuja valitsemalla niitä vastaavat valintaruudut ja napsauttamalla ”{{int:Watchlistedit-normal-submit}}”. Voit myös muokata listaa [[Special:EditWatchlist/raw|tekstimuodossa]].",
        "unknown_extension_tag": "Tuntematon laajennuskoodi ”$1”.",
        "duplicate-defaultsort": "'''Varoitus:''' Oletuslajitteluavain ”$2” korvaa aiemman oletuslajitteluavaimen ”$1”.",
        "duplicate-displaytitle": "<strong>Varoitus:</strong> Näytettävä otsikko \"$2\" päällekirjoittaa edellisen otsikon \"$1\".",
+       "invalid-indicator-name": "<strong>Virhe:</strong> Sivun tilan osoittimien attribuutti <code>name</code> ei saa olla tyhjä.",
        "version": "Versio",
        "version-extensions": "Asennetut laajennukset",
        "version-skins": "Asennetut ulkoasut",
        "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-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",
        "logentry-move-move_redir": "$1 {{GENDER:$2|siirsi}} sivun $3 ohjauksen $4 päälle",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|tallensi}} uuden version tiedostosta $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|tallensi}} tiedoston $3",
        "rightsnone": "(ei oikeuksia)",
+       "revdelete-summary": "yhteenvedon",
        "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",
        "log-name-pagelang": "Kielenvaihtoloki",
        "log-description-pagelang": "Tämä on loki, johon merkitään muutokset sivujen kieliasetuksissa.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|muutti}} sivun kieltä sivulla $3 kielestä $4 kieleksi $5.",
-       "default-skin-not-found": "Hupsista! Oletuksena tuleva ulkoasu sinun wikillesi (<code>$wgDefaultSkin</code>), <code>$1</code>, ei ole saatavilla.\n\n\n<strong>Alla on ohjeita englanniksi:</strong>\n\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: :* 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:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code>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\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>$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": "Hupsista! Oletuksena tuleva ulkoasu sinun wikillesi, joka on määritelty koodissa <code dir=\"ltr\">$wgDefaultSkin</code> muotoon <code>$1</code>, ei ole saatavilla.\n\n\n<strong>Alla on ohjeita englanniksi:</strong>\n\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: :* 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:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code>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\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>$3</pre>\n\n; If you have just modified <code>LocalSettings.php</code>: \n: Double-check the skin names for typos.",
+       "default-skin-not-found-no-skins": "Hupsista! Oletusulkoasua sinun wikillesi ei ole saatavilla. Se on määritelty ulkoasuksi <code>$1</code> kohteessa <code>$wgDefaultSkin</code>.\n\nSinulla ei ole lainkaan asennettuja ulkoasuja. (You have no installed skins.)\n\nAlla on lisäohjeita englanniksi:\n\n\n; If you have just installed or upgraded MediaWiki: \n\n: You probably installed from git, or directly from the source code using some other method. This is expected. MediaWiki 1.24 and newer doesn't include any skins in the main repository. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by: \n\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it. \n\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code dir=\"ltr\">skins/</code> directory of your MediaWiki installation. \n\n: Doing this should not interfere with your git repository if you're a MediaWiki developer. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable skins and choose the default.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (käytössä)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ei käytössä''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ei käytössä''')",
+       "mediastatistics": "Median tilastotiedot",
+       "mediastatistics-summary": "Tietoja tallennettujen tiedostojen tyypeistä. Luettelossa ovat ainoastaan tiedostojen uusimmat versiot eikä lainkaan vanhoja tai poistettuja versioita.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 tavu|$1 tavua}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME-tyyppi",
+       "mediastatistics-table-extensions": "Tiedostopäätteet",
+       "mediastatistics-table-count": "Tiedostojen lukumäärä",
+       "mediastatistics-table-totalbytes": "Yhteenlaskettu koko",
+       "mediastatistics-header-unknown": "Tuntematon",
+       "mediastatistics-header-bitmap": "Bitmap-kuvat",
+       "mediastatistics-header-drawing": "Piirrokset (vektorikuvat)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Videot",
+       "mediastatistics-header-multimedia": "Rich media",
+       "mediastatistics-header-office": "Office-tiedostot",
+       "mediastatistics-header-text": "Tekstitiedostot",
+       "mediastatistics-header-executable": "Ohjelmatiedostot",
+       "mediastatistics-header-archive": "Pakatussa muodossa",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|jäljelle jäänyt pilkku|jäljelle jäänyttä pilkkua}} poistettiin JSON-tekstistä.",
+       "json-error-unknown": "Syntyi ongelma JSONin kanssa. Virhe: $1",
+       "json-error-depth": "Suurin mahdollinen pinosyvyys (stack depth) on ylitetty",
+       "json-error-state-mismatch": "Kelvoton tai vääränmuotoinen JSON",
+       "json-error-ctrl-char": "Kontrollimerkissä on virhe; se saattaa olla väärin koodattu",
+       "json-error-syntax": "Jäsennysvirhe (syntax error)",
+       "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"
 }
index 3bc686f..5006722 100644 (file)
        "search-suggest": "Tarkoititko: $1",
        "searchrelated": "relateerattu",
        "searchall": "kaikki",
-       "showingresultsheader": "{{PLURAL:$5|Resyltaatit'''$1'''–'''$3'''|Resyltaatit'''$1'''–'''$2''' kaiken joukosta '''$3''' }} haule '''$4'''",
        "search-nonefound": "Ei yhtään resyltaattia sinun kysymyksheen",
        "mypreferences": "Omat inställninkit",
        "youremail": "E-posti:",
        "pager-older-n": "{{PLURAL:$1|1 vanheempi|$1 vanheempaa}} →",
        "booksources": "Kirjalähteet",
        "booksources-search-legend": "Hae kirjalähtheitä",
-       "booksources-go": "Mene",
        "log": "Lokit",
        "allpages": "Kaikki sivut",
        "allarticles": "Kaikki sivut",
        "watch": "Valvo",
        "unwatch": "Lopeta valvonta",
        "watchlist-details": "Valvontalistala on {{PLURAL:$1|$1 sivu|$1 sivua}} (keskustelusivuja mukhaan laskematta)",
-       "wlshowlast": "Näytä viimiset $1 tiimat eli $2 päivät$3",
+       "wlshowlast": "Näytä viimiset $1 tiimat eli $2 päivät",
        "watchlist-options": "Valvontalistan altternatiivit",
        "actioncomplete": "Tehty",
        "actionfailed": "Tehty epäonnistui",
        "metadata": "Meettataatta",
        "metadata-help": "Tämä fiili sisältää lisätietoja esimerkiks kuvanlukijan, eli kuvakäsittelyprukrammin lisätietoja. Kaikki tiot ei en´nää välttämättä vastaa toelisuutheen, jos kuvvaa on mookattu sen alkuperäisen luomisen jälkhiin.",
        "metadata-fields": "Seuraavaa meettataatta kentät listattu tässä informasuunissa, sisälethään näkyvänä kuvasivussa, kun meettataatta taulukko kolapsaa. Muut piilotethaan stantartina.\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",
-       "watchlistall2": "kaikki",
        "namespacesall": "kaikki",
        "monthsall": "kaikki",
        "watchlisttools-view": "Näytä muutokset",
index 7c825a0..959e8ff 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Jose77 (on fj.wikipedia.org)"
-        ]
-    },
-    "sunday": "Sigatabu",
-    "monday": "Moniti",
-    "tuesday": "Tusiti",
-    "wednesday": "Vukelulu",
-    "thursday": "Lotulevu",
-    "friday": "Vakaraubuka",
-    "saturday": "Vakarauwai",
-    "sun": "Sigatabu",
-    "mon": "Moniti",
-    "tue": "Tusiti",
-    "wed": "Vukelulu",
-    "thu": "Lotulevu",
-    "fri": "Vakaraubuka",
-    "sat": "Vakarauwai",
-    "january": "Janueri",
-    "february": "Veverueri",
-    "march": "Maji",
-    "april": "Epereli",
-    "july": "Jiulai",
-    "august": "Okosita",
-    "september": "Seviteba",
-    "october": "Okotova",
-    "november": "Noveba",
-    "december": "Tiseba",
-    "january-gen": "Janueri",
-    "february-gen": "Veverueri",
-    "march-gen": "Maji",
-    "april-gen": "Evereli",
-    "may-gen": "Me",
-    "july-gen": "Jiulai",
-    "august-gen": "Okosita",
-    "september-gen": "Seviteba",
-    "october-gen": "Okotova",
-    "november-gen": "Noveba",
-    "december-gen": "Tiseba",
-    "jan": "Janueri",
-    "feb": "Veverueri",
-    "mar": "Maji",
-    "apr": "Epereli",
-    "may": "Me",
-    "jun": "June",
-    "jul": "Julai",
-    "aug": "Okosita",
-    "sep": "Seviteba",
-    "oct": "Okotova",
-    "nov": "Noveba",
-    "dec": "Tiseba",
-    "cancel": "Sasamaki",
-    "mytalk": "Noqu vosa",
-    "navigation": "Vakatasosoko",
-    "qbedit": "Veisautaki",
-    "help": "Veivuke",
-    "search": "Vaqaqara",
-    "searchbutton": "Vaqaqara",
-    "go": "Lako",
-    "searcharticle": "Lako",
-    "history_short": "Tukuni",
-    "printableversion": "Tikina e rawa ni tabaki",
-    "permalink": "Sema tudei",
-    "edit": "Veisautaki",
-    "delete": "Vakarusa",
-    "protect": "Taqomaki",
-    "unprotect": "Sega ni taqomaki",
-    "talk": "Veiwasei",
-    "toolbox": "Kato ni yaya",
-    "otherlanguages": "Veimataqali vosa",
-    "jumptonavigation": "Vakatasosoko",
-    "jumptosearch": "Vaqaqara",
-    "currentevents": "Tukutuku kuruvaki",
-    "currentevents-url": "Project:Tukutuku kuruvaki",
-    "edithelp": "Veivukei",
-    "mainpage": "Tabana levu",
-    "mainpage-description": "Tabana levu",
-    "portal": "Soqosoqo toso",
-    "editsection": "Veisautaki",
-    "editold": "Veisautaki",
-    "nstab-main": "Vola volai",
-    "yourname": "Yaca vakayagataki",
-    "yourpassword": "Yaca vuni",
-    "yourpasswordagain": "Vola tale na Yaca vuni",
-    "remembermypassword": "Nanuma na yacaqu ena komipiuta oqo (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "login": "Curu mai",
-    "userlogin": "Curu mai / Dolava nomu Akaude",
-    "logout": "Curu yani",
-    "userlogout": "Curu yani",
-    "nologinlink": "Dolava nomu Akaude",
-    "createaccount": "Dolava nomu Akaude",
-    "gotaccountlink": "Curu mai",
-    "summary": "Kena i Soqoni:",
-    "watchthis": "Vakaraica toka na tabana oqo",
-    "savearticle": "Vakabula na tabana oqo",
-    "showpreview": "Vakaraitaka na kenai yaloyalo",
-    "showdiff": "Vakaritaka na veisau",
-    "loginreqlink": "Curu mai",
-    "mypreferences": "Ulutaga taleitaki",
-    "searchresultshead": "Vaqaqara",
-    "youremail": "I vola livaliva *:",
-    "username": "Yaca vakayagataki:",
-    "email": "I vola livaliva",
-    "recentchanges": "Veisau vovou",
-    "recentchangeslinked": "Veisau e veiwekani",
-    "recentchangeslinked-feed": "Veisau e veiwekani",
-    "recentchangeslinked-toolbox": "Veisau e veiwekani",
-    "upload": "Vakasinaita",
-    "uploadbtn": "Vakasinaita",
-    "filedesc": "Kena i Soqoni",
-    "fileuploadsummary": "Kena i Soqoni:",
-    "watchthisupload": "Vakaraica toka na tabana oqo",
-    "randompage": "Vakawasoma",
-    "brokenredirects-edit": "Veisautaki",
-    "brokenredirects-delete": "Vakarusa",
-    "newpages-username": "Yaca vakayagataki:",
-    "move": "Toso",
-    "movethispage": "Toso na tabana oqo",
-    "allpagessubmit": "Lako",
-    "defemailsubject": "{{SITENAME}} I vola livaliva",
-    "watchlist": "Ulutaga yadravi",
-    "watch": "Vakaraica mada",
-    "watchthispage": "Vakaraica toka na tabana oqo",
-    "restriction-edit": "Veisautaki",
-    "restriction-move": "Toso",
-    "undelete-search-submit": "Vaqaqara",
-    "mycontris": "Noqu I takitaki",
-    "whatlinkshere": "Sema cava oqo",
-    "ipbreason": "Vuna",
-    "move-page-legend": "Toso kina yasana kadua",
-    "movearticle": "Toso kina yasana kadua",
-    "move-watch": "Vakaraica toka na tabana oqo",
-    "movepagebtn": "Toso kina yasana kadua",
-    "movereason": "Vuna",
-    "tooltip-pt-preferences": "Ulutaga taleitaki",
-    "tooltip-pt-logout": "Curu yani",
-    "tooltip-ca-move": "Toso na tabana oqo",
-    "tooltip-search": "Vaqaqara {{SITENAME}}",
-    "tooltip-p-logo": "Tabana levu",
-    "ilsubmit": "Vaqaqara",
-    "imgmultigo": "Lako!",
-    "table_pager_limit_submit": "Lako",
-    "specialpages": "Tabana vakamareqeti"
+       "@metadata": {
+               "authors": [
+                       "Jose77 (on fj.wikipedia.org)"
+               ]
+       },
+       "sunday": "Sigatabu",
+       "monday": "Moniti",
+       "tuesday": "Tusiti",
+       "wednesday": "Vukelulu",
+       "thursday": "Lotulevu",
+       "friday": "Vakaraubuka",
+       "saturday": "Vakarauwai",
+       "sun": "Sigatabu",
+       "mon": "Moniti",
+       "tue": "Tusiti",
+       "wed": "Vukelulu",
+       "thu": "Lotulevu",
+       "fri": "Vakaraubuka",
+       "sat": "Vakarauwai",
+       "january": "Janueri",
+       "february": "Veverueri",
+       "march": "Maji",
+       "april": "Epereli",
+       "july": "Jiulai",
+       "august": "Okosita",
+       "september": "Seviteba",
+       "october": "Okotova",
+       "november": "Noveba",
+       "december": "Tiseba",
+       "january-gen": "Janueri",
+       "february-gen": "Veverueri",
+       "march-gen": "Maji",
+       "april-gen": "Evereli",
+       "may-gen": "Me",
+       "july-gen": "Jiulai",
+       "august-gen": "Okosita",
+       "september-gen": "Seviteba",
+       "october-gen": "Okotova",
+       "november-gen": "Noveba",
+       "december-gen": "Tiseba",
+       "jan": "Janueri",
+       "feb": "Veverueri",
+       "mar": "Maji",
+       "apr": "Epereli",
+       "may": "Me",
+       "jun": "June",
+       "jul": "Julai",
+       "aug": "Okosita",
+       "sep": "Seviteba",
+       "oct": "Okotova",
+       "nov": "Noveba",
+       "dec": "Tiseba",
+       "cancel": "Sasamaki",
+       "mytalk": "Noqu vosa",
+       "navigation": "Vakatasosoko",
+       "qbedit": "Veisautaki",
+       "help": "Veivuke",
+       "search": "Vaqaqara",
+       "searchbutton": "Vaqaqara",
+       "go": "Lako",
+       "searcharticle": "Lako",
+       "history_short": "Tukuni",
+       "printableversion": "Tikina e rawa ni tabaki",
+       "permalink": "Sema tudei",
+       "edit": "Veisautaki",
+       "delete": "Vakarusa",
+       "protect": "Taqomaki",
+       "unprotect": "Sega ni taqomaki",
+       "talk": "Veiwasei",
+       "toolbox": "Kato ni yaya",
+       "otherlanguages": "Veimataqali vosa",
+       "jumptonavigation": "Vakatasosoko",
+       "jumptosearch": "Vaqaqara",
+       "currentevents": "Tukutuku kuruvaki",
+       "currentevents-url": "Project:Tukutuku kuruvaki",
+       "edithelp": "Veivukei",
+       "mainpage": "Tabana levu",
+       "mainpage-description": "Tabana levu",
+       "portal": "Soqosoqo toso",
+       "editsection": "Veisautaki",
+       "editold": "Veisautaki",
+       "nstab-main": "Vola volai",
+       "yourname": "Yaca vakayagataki",
+       "yourpassword": "Yaca vuni",
+       "yourpasswordagain": "Vola tale na Yaca vuni",
+       "remembermypassword": "Nanuma na yacaqu ena komipiuta oqo (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "login": "Curu mai",
+       "userlogin": "Curu mai / Dolava nomu Akaude",
+       "logout": "Curu yani",
+       "userlogout": "Curu yani",
+       "nologinlink": "Dolava nomu Akaude",
+       "createaccount": "Dolava nomu Akaude",
+       "gotaccountlink": "Curu mai",
+       "summary": "Kena i Soqoni:",
+       "watchthis": "Vakaraica toka na tabana oqo",
+       "savearticle": "Vakabula na tabana oqo",
+       "showpreview": "Vakaraitaka na kenai yaloyalo",
+       "showdiff": "Vakaritaka na veisau",
+       "loginreqlink": "Curu mai",
+       "mypreferences": "Ulutaga taleitaki",
+       "searchresultshead": "Vaqaqara",
+       "youremail": "I vola livaliva *:",
+       "username": "Yaca vakayagataki:",
+       "email": "I vola livaliva",
+       "recentchanges": "Veisau vovou",
+       "recentchangeslinked": "Veisau e veiwekani",
+       "recentchangeslinked-feed": "Veisau e veiwekani",
+       "recentchangeslinked-toolbox": "Veisau e veiwekani",
+       "upload": "Vakasinaita",
+       "uploadbtn": "Vakasinaita",
+       "filedesc": "Kena i Soqoni",
+       "fileuploadsummary": "Kena i Soqoni:",
+       "watchthisupload": "Vakaraica toka na tabana oqo",
+       "randompage": "Vakawasoma",
+       "brokenredirects-edit": "Veisautaki",
+       "brokenredirects-delete": "Vakarusa",
+       "newpages-username": "Yaca vakayagataki:",
+       "move": "Toso",
+       "movethispage": "Toso na tabana oqo",
+       "allpagessubmit": "Lako",
+       "defemailsubject": "{{SITENAME}} I vola livaliva",
+       "watchlist": "Ulutaga yadravi",
+       "watch": "Vakaraica mada",
+       "watchthispage": "Vakaraica toka na tabana oqo",
+       "restriction-edit": "Veisautaki",
+       "restriction-move": "Toso",
+       "undelete-search-submit": "Vaqaqara",
+       "mycontris": "Noqu I takitaki",
+       "whatlinkshere": "Sema cava oqo",
+       "ipbreason": "Vuna",
+       "move-page-legend": "Toso kina yasana kadua",
+       "movearticle": "Toso kina yasana kadua",
+       "move-watch": "Vakaraica toka na tabana oqo",
+       "movepagebtn": "Toso kina yasana kadua",
+       "movereason": "Vuna",
+       "tooltip-pt-preferences": "Ulutaga taleitaki",
+       "tooltip-pt-logout": "Curu yani",
+       "tooltip-ca-move": "Toso na tabana oqo",
+       "tooltip-search": "Vaqaqara {{SITENAME}}",
+       "tooltip-p-logo": "Tabana levu",
+       "ilsubmit": "Vaqaqara",
+       "imgmultigo": "Lako!",
+       "table_pager_limit_submit": "Lako",
+       "specialpages": "Tabana vakamareqeti"
 }
index 40620b4..6b1479e 100644 (file)
        "passwordreset-emailsent-capture": "Ein teldupostur, har ið tú kanst nullstilla loyniorðið, er blivin sendur, sum víst niðanfyri.",
        "passwordreset-emailerror-capture": "Ein teldupostur við nullstillaðum loyniorði var gjørdur, sum víst niðanfyri, men tað miseydnaðist at senda til {{GENDER:$2|brúkaran}}: $1",
        "changeemail": "Broyt teldupost adressu",
-       "changeemail-header": "Broyt t-post adressuna hjá kontuni",
        "changeemail-text": "Útfyll henda formularin fyri at broyta tína t-post adressu. Tú mást skriva títt loyniorð fyri at vátta hesa broyting.",
        "changeemail-no-info": "Tú mást vera innritað/ur fyri at fáa beinleiðis atgongd til hesa síðu.",
        "changeemail-oldemail": "Verandi t-post adressa:",
        "changeemail-none": "(ongin)",
        "changeemail-password": "Títt {{SITENAME}} loyniorð:",
        "changeemail-submit": "Broyt t-post",
-       "changeemail-cancel": "Ógilda",
        "changeemail-throttled": "Tú hevur roynt at rita inn ov nógvar ferðir.\nVinarliga bíða $1 áðrenn tú roynir aftur.",
        "resettokens": "Nullstilla lyklar",
        "resettokens-text": "Tú kanst nullstilla lyklar sum geva atgongd til ávís privat dáta sum eru knýtt at tínari konto her.\n\nTú eigur at gera tað um tú av óvart hevur deilt lyklarnar við onkran, ella um tín konta hevur verið útsett fyri vandastøðu.",
        "mergehistory-same-destination": "Keldu og málsíðan kunnu ikki vera tann sama",
        "mergehistory-reason": "Orsøk:",
        "mergelog": "Samanblandingar gerðalisti (loggur)",
-       "pagemerge-logentry": "flættaði [[$1]] inn í [[$2]] (versjónir fram til $3)",
        "revertmerge": "Angra samanflætting",
        "mergelogpagetext": "Niðanfyri er ein listi við teimum nýggjastu samanflættingunum av einari síðu søgu til eina aðra.",
        "history-title": "Eftirlitssøgan hjá \"$1\"",
        "searchall": "alt",
        "showingresults": "Niðanfyri standa upp til {{PLURAL:$1|'''$1''' úrslit, sum byrjar|'''$1''' úrslit, sum byrja}} við #<b>$2</b>.",
        "showingresultsinrange": "Niðanfyri verða víst upp til {{PLURAL:$1|<strong>1</strong> úrslit|<strong>$1</strong> úrslit}} í økinum #<strong>$2</strong> til #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Úrslit '''$1''' av '''$3'''|Úrslit '''$1 - $2''' av '''$3'''}} fyri '''$4'''",
        "search-nonefound": "Leitingin gav onki úrslit.",
        "powersearch-legend": "Víðkað leitan",
        "powersearch-ns": "Leita í navnaøkinum:",
        "randomincategory": "Tilvildarlig síða í bólkinum",
        "randomincategory-invalidcategory": "\"$1\" kann ikki brúkast sum bólkaheiti.",
        "randomincategory-nopages": "Tað eru ongar síður í [[:Category:$1]].",
-       "randomincategory-selectcategory": "Fá tilvildarliga síðu frá bólki: $1 $2.",
-       "randomincategory-selectcategory-submit": "Far",
        "randomredirect": "Tilvildarlig ávísingarsíða",
        "randomredirect-nopages": "Tað eru ongar víðaristillingar til navnarúmið \"$1\".",
        "statistics": "Hagtøl",
        "statistics-header-pages": "Síðu hagtøl",
        "statistics-header-edits": "Rætti hagtøl",
-       "statistics-header-views": "Vís hagtøl",
        "statistics-header-users": "Brúkarahagtøl",
        "statistics-header-hooks": "Onnur hagtøl",
        "statistics-articles": "Innihaldssíður",
        "statistics-files": "Fílur lagdar upp",
        "statistics-edits": "Síðurættingar síðan {{SITENAME}} varð stovnað",
        "statistics-edits-average": "Miðal rættingar pr. síðu",
-       "statistics-views-total": "Sýningar tilsamans",
-       "statistics-views-total-desc": "Sýningar á síðum ið ikki eru til longur og á serstakar síður eru ikki taldar við",
-       "statistics-views-peredit": "Sýningar fyri hvørja rætting",
        "statistics-users": "Skrásettir [[Special:ListUsers|brúkarir]]",
        "statistics-users-active": "Virknir brúkarir",
        "statistics-users-active-desc": "Brúkarar ið hava framt eina handling seinasta/u {{PLURAL:$1|døgnið|$1 dagarnar}}",
-       "statistics-mostpopular": "Mest sæddu síður",
        "pageswithprop": "Síður við síðueginleika",
        "pageswithprop-legend": "Síður við einum síðueginleika",
        "pageswithprop-text": "Henda síðan vísir síður ein lista yvir síður, sum hava ein serstakan síðueginleika.",
        "uncategorizedtemplates": "Óbólkaðar fyrimyndir",
        "unusedcategories": "Óbrúktir bólkar",
        "unusedimages": "Óbrúktar fílur",
-       "popularpages": "Umtóktar síður",
        "wantedcategories": "Ynsktir bólkar",
        "wantedpages": "Ynsktar síður",
        "wantedpages-badtitle": "Ógyldugt heiti í úrslitunum: $1",
        "suppress": "Yvirlit",
        "booksources": "Bókakeldur",
        "booksources-search-legend": "Leita eftir bókum",
-       "booksources-go": "Far",
        "specialloguserlabel": "Gjørt hevur:",
        "speciallogtitlelabel": "Mál (heiti ella brúkari):",
        "log": "Gerðabøkur",
        "wlheader-enotif": "Tað ber nú til at senda teldupost.",
        "wlheader-showupdated": "Síður sum eru broyttar síðan tú seinast vitjaði tær, eru vístar við '''feitum'''.",
        "wlnote": "Niðanfyri {{PLURAL:$1|stendur seinasta broytingin|standa seinastu '''$1''' broytingarnar}} seinasta/u {{PLURAL:$2| tíman|'''$2''' tímarnar}} hin $3 kl. $4",
-       "wlshowlast": "Vís seinastu $1 tímar $2 dagar $3",
+       "wlshowlast": "Vís seinastu $1 tímar $2 dagar",
        "watchlist-options": "Møguleikar í ansingarlistanum",
        "watching": "Eftirlitir...",
        "unwatching": "Strikar eftirlit...",
        "import": "Innflyt síður",
        "importinterwiki": "Innflyt frá aðrari wiki",
        "import-interwiki-text": "Vel eina wiki og síðuheiti at innflyta.\nDato og nøvnini á høvundunum í versjónini verða varveitt.\nAllar transwiki innflytingar handlingar verða goymdar í [[Special:Log/import|innflytingarlogginum]].",
-       "import-interwiki-source": "Kelduwiki/síða:",
        "import-interwiki-history": "Avrita alla versjónssøguna fyri hesa síðu",
        "import-interwiki-templates": "Tak allar fyrimyndir við",
        "import-interwiki-submit": "Innflyta",
        "pageinfo-robot-policy": "Indeksering av robottum",
        "pageinfo-robot-index": "Loyvt",
        "pageinfo-robot-noindex": "Ikki loyvt",
-       "pageinfo-views": "Tal av skoðanum",
        "pageinfo-watchers": "Tal av síðu eygleiðarum",
        "pageinfo-few-watchers": "Færri enn $1 {{PLURAL:$1|eftirlitsbrúkari|eftirlitsbrúkarar}}",
        "pageinfo-redirects-name": "Tal av víðaristillingum til hesa síðu",
        "exif-iimcategory-spo": "Ítróttur",
        "exif-iimcategory-wea": "Veðrið",
        "exif-urgency-normal": "Vanligt ($1)",
-       "watchlistall2": "alt",
        "namespacesall": "alt",
        "monthsall": "allir",
        "confirmemail": "Vátta t-post adressu",
        "compare-rev2": "Versjón 2",
        "compare-submit": "Samanber",
        "rightsnone": "(ongin)",
+       "revdelete-summary": "yvirlit yvir broytingar",
        "searchsuggest-search": "Leita",
        "api-error-empty-file": "Fílan sum tú sendi inn var tóm.",
        "api-error-file-too-large": "Fílan sum tú sendi inn var óv stór.",
index 363c4de..15eeca8 100644 (file)
                        "Yona b",
                        "SnowedEarth",
                        "Orikrin1998",
-                       "Automatik"
+                       "Automatik",
+                       "Elodark"
                ]
        },
        "tog-underline": "Souligner les liens :",
        "edit": "Modifier",
        "edit-local": "Modifier la description locale",
        "create": "Créer",
-       "create-local": "ajouter une description locale",
+       "create-local": "Ajouter une description locale",
        "editthispage": "Modifier cette page",
        "create-this-page": "Créer cette page",
        "delete": "Supprimer",
        "otherlanguages": "Autres langues",
        "redirectedfrom": "(Redirigé depuis $1)",
        "redirectpagesub": "Page de redirection",
+       "redirectto": "Rediriger vers :",
        "lastmodifiedat": "Dernière modification de cette page le $1 à $2.<br />",
        "viewcount": "Cette page a été consultée {{PLURAL:$1|une fois|$1 fois}}.",
        "protectedpage": "Page protégée",
        "viewsourcetext": "Vous pouvez voir et copier le contenu de la page :",
        "viewyourtext": "Vous pouvez voir et copier le contenu de '''vos modifications''' à cette page :",
        "protectedinterface": "Cette page fournit du texte d'interface pour le logiciel sur ce wiki, et est protégée pour éviter les abus.\nPour ajouter ou modifier des traductions sur tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MediaWiki.",
-       "editinginterface": "'''Attention''' : vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel. Les changements sur cette page se répercuteront sur l’apparence de l’interface utilisateur pour les autres utilisateurs de ce wiki.\nPour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet d’internationalisation de MediaWiki.",
+       "editinginterface": "<strong>Attention :</strong> vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel.\nLes changements sur cette page se répercuteront sur l’apparence de l’interface utilisateur pour les autres utilisateurs de ce wiki.",
+       "translateinterface": "Pour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MédiaWiki.",
        "cascadeprotected": "Cette page est protégée car elle est incluse par {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l’option « protection en cascade » activée :\n$2",
        "namespaceprotected": "Vous n'avez pas la permission de modifier les pages de l'espace de noms « '''$1''' ».",
        "customcssprotected": "Vous n'avez pas la permission de modifier cette page de CSS, car elle contient les paramètres personnels d'un autre utilisateur.",
        "createaccount-text": "Quelqu’un a créé un compte pour votre adresse de courriel sur {{SITENAME}} ($4) intitulé « $2 », avec le mot de passe « $3 ».\nVous devriez ouvrir une session et modifier dès à présent votre mot de passe.\n\nIgnorez ce message si ce compte a été créé par erreur.",
        "login-throttled": "Vous avez tenté un trop grand nombre de connexions dernièrement.\nVeuillez attendre $1 avant d'essayer à nouveau.",
        "login-abort-generic": "Votre tentative de connexion a échoué",
+       "login-migrated-generic": "Votre compte a été migré, et votre nom d’utilisateur n’existe plus sur ce wiki.",
        "loginlanguagelabel": "Langue : $1",
        "suspicious-userlogout": "Votre demande de déconnexion a été refusée car il semble qu'elle a été envoyée par un navigateur cassé ou la mise en cache d'un proxy.",
        "createacct-another-realname-tip": "Le vrai nom est optionnel.\nSi vous décidez de le fournir, il sera utilisé pour attribuer à l’utilisateur ses travaux.",
        "passwordreset-emailsent-capture": "Un courriel de réinitialisation de mot de passe a été envoyé, qui est affiché ci-dessous.",
        "passwordreset-emailerror-capture": "Un courriel de réinitialisation de mot de passe a été généré, qui est affiché ci-dessous, mais l'envoi à l'{{GENDER:$2|utilisateur|utilisatrice}} a échoué : $1",
        "changeemail": "Changer l’adresse de courriel",
-       "changeemail-header": "Changer l’adresse de courriel du compte",
        "changeemail-text": "Remplissez ce formulaire pour changer votre adresse de courriel. Vous devrez entrer votre mot de passe pour confirmer ce changement.",
        "changeemail-no-info": "Vous devez être connecté pour pouvoir accéder directement à cette page.",
        "changeemail-oldemail": "Adresse de courriel actuelle :",
        "changeemail-none": "(aucune)",
        "changeemail-password": "Votre mot de passe sur {{SITENAME}} :",
        "changeemail-submit": "Changer l’adresse de courriel",
-       "changeemail-cancel": "Annuler",
        "changeemail-throttled": "Vous avez fait trop de tentatives de connexion.\nVeuillez attendre $1 avant de réessayer.",
        "resettokens": "Réinitialiser les jetons",
        "resettokens-text": "Ici, vous pouvez réinitialiser les jetons qui permettent d’accéder à certaines données privées associées à votre compte.\n\nVous devriez le faire si vous les avez partagés accidentellement avec quelqu'un ou si votre compte a été compromis.",
        "showpreview": "Prévisualiser",
        "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 identifié(e). Votre adresse IP sera enregistrée dans l’historique de cette page.",
+       "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.''",
        "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.",
        "missingcommenttext": "Veuillez entrer un commentaire ci-dessous.",
        "content-model-text": "texte brut",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Pages utilisant des arguments dupliqués dans les appels de modèle",
+       "duplicate-args-category-desc": "La page contient des appels de modèle qui utilisent des arguments dupliqués, comme <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ou <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Attention : cette page contient de trop nombreux appels à des fonctions coûteuses de l'analyseur syntaxique.\n\nIl devrait y avoir moins de $2 appel{{PLURAL:$2||s}}, alors qu'il y en a maintenant $1.",
        "expensive-parserfunction-category": "Pages avec trop d'appels dispendieux de fonctions de l'analyseur syntaxique",
        "post-expand-template-inclusion-warning": "Attention : Cette page contient trop d'inclusions de modèles. Certaines inclusions ne seront pas effectuées.",
        "mergehistory-reason": "Motif :",
        "mergehistory-revisionrow": "$1 ($2) $3 — $4 $5 $6",
        "mergelog": "Journal des fusions",
-       "pagemerge-logentry": "[[$1]] fusionnée avec [[$2]] (versions jusqu'au $3)",
        "revertmerge": "Séparer",
        "mergelogpagetext": "Voici la liste des plus récentes fusions de l’historique d’une page dans celui d’une autre.",
        "history-title": "$1 : Historique des versions",
        "search-result-category-size": "$1 membre{{PLURAL:$1||s}} ($2 sous-catégorie{{PLURAL:$2||s}}, $3 fichier{{PLURAL:$3||s}})",
        "search-redirect": "(redirection depuis $1)",
        "search-section": "(section $1)",
+       "search-category": "(catégorie $1)",
        "search-file-match": "(correspond au contenu du fichier)",
        "search-suggest": "Essayez avec cette orthographe : $1",
        "search-interwiki-caption": "Projets frères",
        "searchall": "tout",
        "showingresults": "Affichage de <b>$1</b> résultat{{PLURAL:$1||s}} à partir du n°<b>$2</b>.",
        "showingresultsinrange": "Afficher ci-dessous jusqu’à {{PLURAL:$1|<strong>1</strong> résultat|<strong>$1</strong> résultats}} dans la série #<strong>$2</strong> à #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Résultat '''$1'''|Résultats '''$1–$2'''}} de '''$3''' pour '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Résultat <strong>$1</strong> parmi <strong>$3</strong>|Résultats <strong>$1 à $2</strong> parmi <strong>$3</strong>}}",
        "search-nonefound": "Il n'y a aucun résultat correspondant à la requête.",
        "powersearch-legend": "Recherche avancée",
        "powersearch-ns": "Rechercher dans les espaces de noms :",
        "gender-female": "Elle modifie des pages du wiki",
        "prefs-help-gender": "Définir cette préférence est facultatif.\nCe logiciel utilise sa valeur pour s’adresser à vous et vous mentionner aux autres en utilisant le bon genre grammatical.\nCette information sera publique.",
        "email": "Courriel",
-       "prefs-help-realname": "Facultatif : si vous le spécifiez, il sera utilisé pour vous attribuer vos contributions.",
+       "prefs-help-realname": "Le vrai nom est facultatif.\nS’il est fourni, il sera utilisé pour vous attribuer vos contributions.",
        "prefs-help-email": "L'adresse de courriel est facultative, mais elle est nécessaire pour réinitialiser votre mot de passe, si vous veniez à l'oublier.",
        "prefs-help-email-others": "Vous pourriez aussi choisir de laisser les autres vous contacter sur votre page de discussion utilisateur sans que soit nécessaire de révéler votre identité.",
        "prefs-help-email-required": "Une adresse de courriel est requise.",
        "prefs-tokenwatchlist": "Jeton",
        "prefs-diffs": "Différences",
        "prefs-help-prefershttps": "Cette préférence sera effective lors de votre prochaine connexion.",
+       "prefswarning-warning": "Vous avez effectué des modifications dans vos préférences qui n’ont pas encore été enregistrées.\nSi vous quittez cette page sans cliquer sur « $1 », vos préférences ne seront pas mises à jour.",
        "prefs-tabs-navigation-hint": "Astuce : Vous pouvez utiliser les flèches de gauche et de droite pour naviguer entre les onglets.",
        "email-address-validity-valid": "Semble valide",
        "email-address-validity-invalid": "Une adresse valide est nécessaire !",
        "statistics": "Statistiques",
        "statistics-header-pages": "Statistiques des pages",
        "statistics-header-edits": "Statistiques des modifications",
-       "statistics-header-views": "Statistiques des visites",
        "statistics-header-users": "Statistiques des utilisateurs",
        "statistics-header-hooks": "Autres statistiques",
        "statistics-articles": "Pages de contenu",
        "statistics-files": "Fichiers importés",
        "statistics-edits": "Modifications de pages depuis l'installation de {{SITENAME}}",
        "statistics-edits-average": "Nombre moyen de modifications par page",
-       "statistics-views-total": "Visites",
-       "statistics-views-total-desc": "Les vues des pages non existantes et des pages spéciales ne sont pas incluses",
-       "statistics-views-peredit": "Visites par modification",
        "statistics-users": "[[Special:ListUsers|Utilisateurs]] enregistrés",
        "statistics-users-active": "Utilisateurs actifs",
        "statistics-users-active-desc": "Utilisateurs ayant fait au moins une action durant {{PLURAL:$1|le dernier jours|les $1 derniers jours}}",
-       "statistics-mostpopular": "Pages les plus consultées",
        "pageswithprop": "Pages avec une propriété de page",
        "pageswithprop-legend": "Pages avec une propriété de page",
        "pageswithprop-text": "Cette page liste les pages qui utilisent une propriété de page particulière.",
        "uncategorizedtemplates": "Modèles sans catégories",
        "unusedcategories": "Catégories inutilisées",
        "unusedimages": "Fichiers orphelins",
-       "popularpages": "Pages les plus consultées",
        "wantedcategories": "Catégories les plus demandées",
        "wantedpages": "Pages les plus demandées",
        "wantedpages-badtitle": "Titre invalide dans les résultats : $1",
        "pager-older-n": "{{PLURAL:$1|plus ancienne|$1 plus anciennes}}",
        "suppress": "Superviser",
        "querypage-disabled": "Cette page spéciale est désactivée pour des raisons de performances.",
+       "apihelp": "Aide de l’API",
+       "apihelp-no-such-module": "Le module « $1 » est introuvable.",
        "booksources": "Ouvrages de référence",
        "booksources-search-legend": "Rechercher parmi des ouvrages de référence",
        "booksources-isbn": "ISBN :",
-       "booksources-go": "Lister",
+       "booksources-search": "Rechercher",
        "booksources-text": "Voici une liste indicative de liens vers d’autres sites vendant des livres neufs et d’occasion et sur lesquels vous trouverez peut-être des informations sur les ouvrages que vous cherchez :",
        "booksources-invalid-isbn": "L’ISBN donné ne semble pas être correct ; vérifiez si vous avez fait une erreur en copiant la source originale.",
        "specialloguserlabel": "Auteur :",
        "emailuser-title-notarget": "Envoyer un courriel à l'utilisateur",
        "emailpage": "Envoyer un courriel à l'utilisateur",
        "emailpagetext": "Vous pouvez utiliser le formulaire ci-dessous pour envoyer un courriel à {{GENDER:$1|cet utilisateur|cette utilisatrice}}.\nL'adresse électronique que vous avez indiquée dans [[Special:Preferences|vos préférences]] apparaîtra dans le champ « Expéditeur » de votre message ; ainsi, le destinataire pourra vous répondre directement.",
-       "defemailsubject": "{{SITENAME}} Courriel de l'utilisateur « $1 »",
+       "defemailsubject": "Courriel de {{SITENAME}} de l'utilisateur « $1 »",
        "usermaildisabled": "L'envoi de courriels entre utilisateurs est désactivé",
        "usermaildisabledtext": "Vous ne pouvez pas envoyer de courriels à d'autres utilisateurs sur ce wiki",
        "noemailtitle": "Aucune adresse de courriel",
        "wlheader-enotif": "La notification par courriel est activée.",
        "wlheader-showupdated": "Les pages qui ont été modifiées depuis votre dernière visite sont affichées en '''gras'''.",
        "wlnote": "Ci-dessous {{PLURAL:$1|figure la dernière modification effectuée|figurent les <strong>$1</strong> dernières modifications effectuées}} durant {{PLURAL:$2|la dernière heure|les <strong>$2</strong> dernières heures}}, depuis $3, $4.",
-       "wlshowlast": "Montrer les dernières $1 heures, les derniers $2 jours ou bien $3",
+       "wlshowlast": "Montrer les dernières $1 heures, les derniers $2 jours",
        "watchlist-options": "Options de la liste de suivi",
        "watching": "Suivi…",
        "unwatching": "Fin du suivi…",
        "protect-othertime": "Autre date d'expiration :",
        "protect-othertime-op": "autre date d'expiration",
        "protect-existing-expiry": "Date d'expiration existante : $2 à $3",
+       "protect-existing-expiry-infinity": "Délai d’expiration existant : infini",
        "protect-otherreason": "Motif autre ou supplémentaire :",
        "protect-otherreason-op": "Autre motif",
        "protect-dropdown": "* Motifs de protection courants\n** Vandalisme excessif\n** Pourriels\n** Conflits de modifications contre-productives\n** Page à fort trafic",
        "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 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|(e)} de vouloir visionner 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 :",
        "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.",
        "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 de vouloir le faire ?",
-       "ipb-confirmaction": "Si vous êtes sûr de vraiment vouloir le faire, veuillez cocher le champ « {{int:ipb-confirm}} » en bas.",
+       "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-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",
        "ipb-unblock": "Débloquer un compte utilisateur ou une adresse IP",
        "unblocked": "[[User:$1|$1]] a été débloqué{{GENDER:$1||e}}",
        "unblocked-range": "Le compte $1 a été débloqué",
        "unblocked-id": "Le blocage $1 a été enlevé",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] a été débloqué.",
        "blocklist": "Utilisateurs bloqués",
        "ipblocklist": "Utilisateurs bloqués",
        "ipblocklist-legend": "Chercher un utilisateur bloqué",
        "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é",
+       "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",
        "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-logout": "Se déconnecter",
+       "tooltip-pt-createaccount": "Il vous est conseillé de créer un compte et de vous connecter ; cependant, ce n’est pas obligatoire",
        "tooltip-ca-talk": "Discussion au sujet de cette page de contenu",
        "tooltip-ca-edit": "Vous pouvez modifier cette page.\nVeuillez utiliser le bouton de prévisualisation avant d'enregistrer.",
        "tooltip-ca-addsection": "Commencer une nouvelle section",
        "tooltip-feed-atom": "Flux Atom pour cette page",
        "tooltip-t-contributions": "Voir la liste des contributions de cet utilisateur",
        "tooltip-t-emailuser": "Envoyer un courriel à cet utilisateur",
+       "tooltip-t-info": "Plus d’information sur cette page",
        "tooltip-t-upload": "Envoyer une image ou fichier média sur le serveur",
        "tooltip-t-specialpages": "Liste de toutes les pages spéciales",
        "tooltip-t-print": "Version imprimable de cette page",
        "pageinfo-robot-policy": "Indexation par robots",
        "pageinfo-robot-index": "Autorisée",
        "pageinfo-robot-noindex": "Interdite",
-       "pageinfo-views": "Nombre de vues",
        "pageinfo-watchers": "Nombre de contributeurs ayant la page dans leur liste de suivi",
        "pageinfo-few-watchers": "Moins de $1 {{PLURAL:$1|observateur|observateurs}}",
        "pageinfo-redirects-name": "Nombre de redirections vers cette page",
        "exif-urgency-low": "Faible ($1)",
        "exif-urgency-high": "Haute ($1)",
        "exif-urgency-other": "Urgence définie par l'utilisateur ($1)",
-       "watchlistall2": "tout",
        "namespacesall": "Tous",
        "monthsall": "tous",
        "confirmemail": "Confirmer l’adresse de courriel",
        "unknown_extension_tag": "Balise d’extension « $1 » inconnue",
        "duplicate-defaultsort": "Attention : la clé de tri par défaut « $2 » écrase la précédente clé « $1 ».",
        "duplicate-displaytitle": "<strong>Attention :</strong> Le titre d'affichage «$2» remplace l'ancien titre d'affichage «$1».",
+       "invalid-indicator-name": "<strong>Erreur :</strong> L’attribut <code>name</code> des indicateurs d’état de la page ne doit pas être vide.",
        "version": "Version",
        "version-extensions": "Extensions installées",
        "version-skins": "Habillages installés",
        "revdelete-uname-unhid": "nom d'utilisateur affiché",
        "revdelete-restricted": "restrictions appliquées aux administrateurs",
        "revdelete-unrestricted": "restrictions retirées pour les administrateurs",
+       "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-move-move_redir": "$1 {{GENDER:$2|a déplacé}} la page $3 vers $4 par-dessus une redirection",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|a téléchargé}} une nouvelle version de $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|a téléchargé}} $3",
        "rightsnone": "(aucun)",
+       "revdelete-summary": "résumé de modification",
        "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 :",
        "api-error-stashfailed": "Erreur interne : le serveur n'a pas pu enregistrer le fichier temporaire.",
        "api-error-publishfailed": "Erreur interne: Le serveur n'a pas pu publier le fichier temporaire.",
        "api-error-stasherror": "Une erreur s'est produite lors du téléchargement du fichier pour le dissimuler.",
+       "api-error-stashedfilenotfound": "Le fichier caché n’a pas été trouvé lors de la tentative pour le télécharger depuis sa cachette.",
+       "api-error-stashpathinvalid": "Le chemin où aurait dû se trouver le fichier caché n’est pas valide.",
+       "api-error-stashfilestorage": "Une erreur s’est produite en stockant le fichier dans la cachette.",
+       "api-error-stashzerolength": "Le serveur n’a pas pu cacher le fichier, car il a une taille de zéro.",
+       "api-error-stashnotloggedin": "Vous devez être connecté pour enregistrer des fichiers dans la cachette de téléchargement.",
+       "api-error-stashwrongowner": "Le fichier auquel vous essayez d’accéder dans la cachette ne vous appartient pas.",
+       "api-error-stashnosuchfilekey": "La clé du fichier auquel vous essayez d’accéder dans la cachette n’existe pas.",
        "api-error-timeout": "Le serveur n'a pas répondu dans le délai imparti.",
        "api-error-unclassified": "Une erreur inconnue s'est produite",
        "api-error-unknown-code": "Erreur inconnue : « $1 »",
        "log-name-pagelang": "Tracer les changements de langue",
        "log-description-pagelang": "Ceci est un journal des changements dans les langues des pages.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a changé}} la langue de la page $3 de $4 à $5.",
-       "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, n’est pas disponible.\n\nVotre installation semble inclure les habillages suivants. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment les activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MédiaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code>skins/</code> de votre installation de MédiaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MédiaWiki.\n\n; Si vous venez juste de mettre à jour MédiaWiki :\n: MédiaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller les lignes suivantes dans <code>LocalSettings.php</code> pour activer tous les habillages actuellement installés :\n\n<pre>$3</pre>\n\n; Si vous venez de modifier <code>LocalSettings.php</code> :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.",
-       "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MédiaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MédiaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:*Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code>skins/</code> de votre installation de MédiaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MédiaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.",
+       "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki, défini par <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVotre installation semble inclure les habillages suivants. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment les activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MediaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MediaWiki.\n\n; Si vous venez juste de mettre à jour MediaWiki :\n: MediaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller les lignes suivantes dans <code>LocalSettings.php</code> pour activer tous les habillages actuellement installés :\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si vous venez de modifier <code>LocalSettings.php</code> :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.",
+       "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki , défini par <code>$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MediaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MediaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:*Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MediaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activé)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''désactivé''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''désactivé''')",
+       "mediastatistics": "Statistiques sur les médias",
+       "mediastatistics-summary": "Statistiques sur les types de fichier téléchargés. Elles ne prennent en compte que la version la plus récente d’un fichier. Les versions anciennes ou supprimées des fichiers sont exclues.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 octet|$1 octets}} ($2 ; $3%)",
+       "mediastatistics-table-mimetype": "Type MIME",
+       "mediastatistics-table-extensions": "Extensions possibles",
+       "mediastatistics-table-count": "Nombre de fichiers",
+       "mediastatistics-table-totalbytes": "Taille combinée",
+       "mediastatistics-header-unknown": "Inconnu",
+       "mediastatistics-header-bitmap": "Images raster",
+       "mediastatistics-header-drawing": "Dessins (images vectorielles)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Vidéos",
+       "mediastatistics-header-multimedia": "Média riche",
+       "mediastatistics-header-office": "Bureautique",
+       "mediastatistics-header-text": "Textuel",
+       "mediastatistics-header-executable": "Exécutables",
+       "mediastatistics-header-archive": "Formats compressés",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|virgule finale a été supprimée|virgules finales ont été supprimées}} du JSON",
+       "json-error-unknown": "Il y a eu un problème avec le JSON. Erreur : $1",
+       "json-error-depth": "La taille maximale de la pile a été dépassée",
+       "json-error-state-mismatch": "JSON non valide ou mal formé",
+       "json-error-ctrl-char": "Erreur de caractères de contrôle, peut-être mal encodé",
+       "json-error-syntax": "Erreur de syntaxe",
+       "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é"
 }
index 0b328e5..6bee7ed 100644 (file)
@@ -20,7 +20,6 @@
        "tog-showtoolbar": "Montrer la barre d'outils des changements (JavaScript)",
        "tog-editondblclick": "Faire un clic-double pour changer la page (JavaScript)",
        "tog-editsectiononrightclick": "Changer une section en faisant un clic droit sus son nom (JavaScript)",
-       "tog-rememberpassword": "Garder mon mot de passe (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "tog-watchcreations": "Additionner les pages que je crée à ma liste des pages guettées",
        "tog-watchdefault": "Additionner les pages que je change à ma liste des pages guettées",
        "tog-watchmoves": "Additionner les pages que je renomme à ma liste des pages guettées",
        "qbmyoptions": "Mes options",
        "faq": "Questions Communes",
        "faqpage": "Project:Questions Communes",
-       "vector-action-delete": "Supprimer",
-       "vector-action-protect": "Protéger",
        "errorpagetitle": "Erreur",
        "returnto": "Retourner back à la page $1.",
        "tagline": "Un article de {{SITENAME}}",
        "talkpagelinktext": "Discuter",
        "specialpage": "Page espéciale",
        "personaltools": "Outils personnels",
-       "postcomment": "Nouvelle section",
        "articlepage": "Voir l'article",
        "talk": "Discussion",
        "views": "Vues",
        "filedeleteerror": "Impossible d'ôter le dossier \"$1\".",
        "directorycreateerror": "Impossible de créer le directoire \"$1\".",
        "filenotfound": "Impossible de trouver le dossier \"$1\".",
-       "fileexistserror": "Impossible d'écrire dans le dossier \"$1\": le dossier est là",
        "unexpected": "Valeur pas prévue: \"$1\"=\"$2\".",
        "formerror": "Erreur: impossible d'envoyer l'application",
        "badarticleerror": "Cette action peut pas être faite sus cette page.",
        "externaldberror": "Soit y avait une erreur avec la base d'information de certification extérieur, soit vous avez pas la permission de renouveler votre compte extérieur.",
        "login": "Connecter",
        "nav-login-createaccount": "Connecter / créer un compte",
-       "loginprompt": "Il faut partir les cookies pour connecter à {{SITENAME}}.",
        "userlogin": "Connecter / créer un compte",
        "logout": "Déconnecter",
        "userlogout": "Déconnecter",
        "savearticle": "Sauver la page",
        "preview": "Vue d'avance",
        "showpreview": "Vue d'avance",
-       "showlivepreview": "Vue d'avance vite",
        "showdiff": "Montrer les changements",
        "anoneditwarning": "'''Attention:''' Vous êtes pas connecté.  Votre adresse IP vas être sauvée dans la liste des changements pour cette page.",
        "missingsummary": "'''Attention:'''  Vous avez pas mis de description.  Si vous cliquez le bouton \"Sauver\" encore, votre changement va être sauvé sans description.",
        "prefs-custom-js": "Custom JavaScript",
        "youremail": "E-mail:",
        "username": "Nom d'useur:",
-       "uid": "Numéro d'useur:",
        "yourrealname": "Vrai nom:",
        "yourlanguage": "Langue:",
        "yourvariant": "Différent:",
index 29c6d43..7adc6a3 100644 (file)
        "passwordreset-emailsent-capture": "Un mèssâjo de remês’a zérô de contresegno est étâ mandâ, qu’est montrâ ce-desot.",
        "passwordreset-emailerror-capture": "Un mèssâjo de remês’a zérô de contresegno est étâ fêt, qu’est montrâ ce-desot, mas l’èxpèdicion a l’utilisat{{GENDER:$2|or|rice}} at pas reussi : $1",
        "changeemail": "Changiér l’adrèce èlèctronica",
-       "changeemail-header": "Changiér l’adrèce èlèctronica du compto",
        "changeemail-text": "Rempléd ceti formulèro por changiér voutron adrèce èlèctronica. Vos devréd buchiér voutron contresegno por confirmar cél changement.",
        "changeemail-no-info": "Vos dête étre branchiê por arrevar tot drêt a cela pâge.",
        "changeemail-oldemail": "Adrèce èlèctronica d’ora :",
        "changeemail-none": "(pas yona)",
        "changeemail-password": "Voutron contresegno dessus {{SITENAME}} :",
        "changeemail-submit": "Changiér l’adrèce èlèctronica",
-       "changeemail-cancel": "Anular",
        "bold_sample": "Tèxto grâs",
        "bold_tip": "Tèxto grâs",
        "italic_sample": "Tèxto étalico",
        "mergehistory-same-destination": "Les pâges d’origina et de dèstinacion pôvont pas étre la méma",
        "mergehistory-reason": "Rêson :",
        "mergelog": "Jornal de les fusions",
-       "pagemerge-logentry": "[[$1]] fusionâye dedens [[$2]] (vèrsions tant qu’u $3)",
        "revertmerge": "Sèparar",
        "mergelogpagetext": "Vê-que na lista de les fusions les ples novèles de l’historico d’una pâge dedens celi d’un’ôtra.",
        "history-title": "Historico de les vèrsions de « $1 »",
        "searchrelated": "aparentâ",
        "searchall": "tot",
        "showingresults": "Vua de '''$1''' rèsultat{{PLURAL:$1||s}} dês lo numerô '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Rèsultat '''$1'''|Rèsultats '''$1 - $2'''}} de '''$3''' por '''$4'''",
        "search-nonefound": "Y at gins de rèsultat que corrèspond a la rechèrche.",
        "powersearch-legend": "Rechèrche avanciêe",
        "powersearch-ns": "Rechèrchiér dedens los èspâços de noms :",
        "statistics": "Statistiques",
        "statistics-header-pages": "Statistiques de les pâges",
        "statistics-header-edits": "Statistiques des changements",
-       "statistics-header-views": "Statistiques de les vues",
        "statistics-header-users": "Statistiques des utilisators",
        "statistics-header-hooks": "Ôtres statistiques",
        "statistics-articles": "Pâges de contegnu",
        "statistics-files": "Fichiérs tèlèchargiês",
        "statistics-edits": "Changements de pâges dês l’enstalacion de {{SITENAME}}",
        "statistics-edits-average": "Nombro moyen de changements per pâge",
-       "statistics-views-total": "Soma de les vues",
-       "statistics-views-total-desc": "Les vues de les pâges pas ègzistentes et de les pâges spèciâles sont pas avouéc",
-       "statistics-views-peredit": "Vues per changement",
        "statistics-users": "[[Special:ListUsers|Utilisators]] encartâs",
        "statistics-users-active": "Utilisators actifs",
        "statistics-users-active-desc": "Utilisators qu’ant fêt por lo muens un’accion pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}",
-       "statistics-mostpopular": "Pâges les ples vues",
        "pageswithprop": "Pâges avouéc na propriètât de pâge",
        "pageswithprop-legend": "Pâges avouéc na propriètât de pâge",
        "pageswithprop-text": "Ceta pâge liste les pâges qu’emplèyont na propriètât de pâge particuliére.",
        "uncategorizedtemplates": "Modèlos sen catègories",
        "unusedcategories": "Catègories pas empleyêes",
        "unusedimages": "Fichiérs pas empleyês",
-       "popularpages": "Pâges populères",
        "wantedcategories": "Catègories demandâyes",
        "wantedpages": "Pâges demandâyes",
        "wantedpages-badtitle": "Titro pas justo dedens l’ensemblo de rèsultats : $1",
        "booksources": "Ôvres de refèrence",
        "booksources-search-legend": "Rechèrchiér entre-mié les ôvres de refèrence",
        "booksources-isbn": "ISBN :",
-       "booksources-go": "Listar",
        "booksources-text": "Vê-que na lista de lims de vers d’ôtros setos que vendont des lévros nôfs et d’ocasion, et pués pôvont avêr des enformacions de ples sur les ôvres que vos chèrchiéd :",
        "booksources-invalid-isbn": "L’ISBN balyê semble pas étre justo ; controlâd se vos éd fêt na fôta en copiyent la sôrsa originâla.",
        "specialloguserlabel": "Ôtor :",
        "wlheader-enotif": "La notificacion per mèssageria èlèctronica est activâye.",
        "wlheader-showupdated": "Les pâges que sont étâyes changiêes dês voutra dèrriére visita sont montrâyes en '''grâs'''.",
        "wlnote": "Vê-que {{PLURAL:$1|lo dèrriér changement fêt|los '''$1''' dèrriérs changements fêts}} pendent {{PLURAL:$2|l’hora passâye|les '''$2''' hores passâyes}}, dês $3 a $4.",
-       "wlshowlast": "Montrar les $1 hores passâyes, los $2 jorns passâs ou ben $3",
+       "wlshowlast": "Montrar les $1 hores passâyes, los $2 jorns passâs ou ben",
        "watchlist-options": "Chouèx de la lista de siuvu",
        "watching": "Siuvu...",
        "unwatching": "Fin du siuvu...",
        "import": "Importar des pâges",
        "importinterwiki": "Importacion entèrvouiqui",
        "import-interwiki-text": "Chouèsésséd un vouiqui et un titro de pâge a importar.\nLes dâtes de les vèrsions et los noms ux contributors seront presèrvâs.\nTotes les accions d’importacion entèrvouiqui sont consignês dens lo [[Special:Log/import|jornal de les importacions]].",
-       "import-interwiki-source": "Vouiqui / pâge d’origina :",
        "import-interwiki-history": "Copiyér totes les vèrsions de l’historico de ceta pâge",
        "import-interwiki-templates": "Encllure tôs los modèlos",
        "import-interwiki-submit": "Importar",
        "pageinfo-robot-policy": "Statut de motor de rechèrche",
        "pageinfo-robot-index": "Endèxâblo",
        "pageinfo-robot-noindex": "Pas endèxâblo",
-       "pageinfo-views": "Nombro de visualisacions",
        "pageinfo-watchers": "Nombro de contributors qu’ont la pâge dedens lor lista de survelyence",
        "pageinfo-redirects-name": "Redirèccions de vers ceta pâge",
        "pageinfo-subpages-name": "Sot-pâges de ceta pâge",
        "exif-urgency-low": "Fêbla ($1)",
        "exif-urgency-high": "Hôta ($1)",
        "exif-urgency-other": "Prioritât dèfenia per l’usanciér ($1)",
-       "watchlistall2": "tot",
        "namespacesall": "tôs",
        "monthsall": "tôs",
        "confirmemail": "Confirmar l’adrèce èlèctronica",
        "logentry-rights-rights-legacy": "$1 at changiê l’apartegnence a la tropa por « $3 »",
        "logentry-rights-autopromote": "$1 est étâ nomâ ôtomaticament de $4 a $5",
        "rightsnone": "(nion)",
+       "revdelete-summary": "rèsumâ du changement",
        "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 :",
index 1bcd678..743f91f 100644 (file)
@@ -24,6 +24,7 @@
        "tog-watchdefault": "Salew feranert sidjen an datein leewen uun't uug behual",
        "tog-watchmoves": "Salew fersköwen sidjen an datein leewen uun't uug behual",
        "tog-watchdeletion": "Salew stregen sidjen an datein leewen uun't uug behual",
+       "tog-watchrollback": "Sidjen, diar ik turagsaat haa, uun't uug behual",
        "tog-minordefault": "Aanj feranrangen üs \"letjen\" kääntiakne",
        "tog-previewontop": "\"Iarst ans luke\" boowen faan't wönang tu bewerkin",
        "tog-previewonfirst": "Bi't iarst bewerkin \"iarst ans luke\" uunwise",
        "moredotdotdot": "Muar ...",
        "morenotlisted": "Detdiar list as ei komplet.",
        "mypage": "Sidj",
-       "mytalk": "Diskusjuun",
+       "mytalk": "Diskuschuun",
        "anontalk": "Diskusjuunssidj faan detdiar IP",
        "navigation": "Nawigatjuun",
        "and": "&#32;an",
        "unprotectthispage": "Sääkering aphääwe",
        "newpage": "Nei sidj",
        "talkpage": "Detdiar sidj diskutiare",
-       "talkpagelinktext": "Diskusjuun",
+       "talkpagelinktext": "Diskuschuun",
        "specialpage": "Spezial-sidj",
        "personaltools": "Min werktjüügen",
        "articlepage": "Artiikel wise",
-       "talk": "Diskusjuun",
+       "talk": "Diskuschuun",
        "views": "Uunsichten",
        "toolbox": "Werktjüügen",
        "userpage": "Brükersidj uunwise",
        "templatepage": "Föörlaagensidj uunwise",
        "viewhelppage": "Halepsidj uunwise",
        "categorypage": "Kategoriisidj uunwise",
-       "viewtalkpage": "Diskusjuun uunluke",
+       "viewtalkpage": "Diskuschuun uunluke",
        "otherlanguages": "Uun ööder spriaken",
        "redirectedfrom": "(Widjerfeerd faan $1)",
        "redirectpagesub": "Widjerfeerang",
+       "redirectto": "Widjerfeer tu:",
        "lastmodifiedat": "Detdiar sidj as tuleetst di $1, am a klook $2 anert wurden.",
        "viewcount": "Aw jüdeer sid as  {{PLURAL:$1|iinjsen|$1 tunge}} tugram wörden.",
        "protectedpage": "Sääkerd sid",
        "hidetoc": "Fersteeg",
        "collapsible-collapse": "Tuupdoble",
        "collapsible-expand": "Wise",
+       "confirmable-confirm": "Beest {{GENDER:$1|dü}} seeker?",
+       "confirmable-yes": "Ja",
+       "confirmable-no": "Naan",
        "thisisdeleted": "$1 uunluke of weder iinstel",
        "viewdeleted": "$1 uunluke?",
        "restorelink": "$1 {{PLURAL:$1|stregen werjuun|stregen werjuunen}}",
        "invalidtitle-knownnamespace": "Ferkiard auerskraft uun di nöömrüm „$2“ an tekst „$3“",
        "invalidtitle-unknownnamespace": "Ferkiard auerskraft uun di ünbekäänd nöömrüm „$1“ an tekst „$2“",
        "exception-nologin": "Ei uunmeldet",
-       "exception-nologin-text": "Wees so gud an [[Special:Userlogin|melde di uun]], am detdiar sidj of aktjuun ütjtufeeren.",
+       "exception-nologin-text": "Wees so gud an melde di uun, am detdiar sidj of aktjuun ütjtufeeren.",
        "exception-nologin-text-manual": "Wees so gud an $1 , am detdiar sidj of aktjuun ütjtufeeren.",
        "virus-badscanner": "Ferkiard iinstelang: Ünbekäänd wiirenscanner: ''$1''",
        "virus-scanfailed": "scan ging skiaf (code $1)",
        "createaccount-text": "Diar as mä din e-mail adres för di en brükerkonto \"$2\" üüb {{SITENAME}} ($4) maaget wurden. För \"$2\" as automaatisk det paaswurd \"$3\" iinracht wurden.\nDü skulst di nü uunmelde an det paaswurd anre.\n\nWan det brükerkonto ütj fersen uunlaanj wurden as, säärst dü niks widjer onernem.",
        "login-throttled": "Dü heest tufölsis fersoocht, di uuntumeldin.\nWees so gud an teew $1, iar dü det noch ans ferschükst.",
        "login-abort-generic": "Det uunmeldin hää ei loket - Ufbreegen",
+       "login-migrated-generic": "Din brükerkonto as feranert wurden. Dan brükernööm jaft det üüb detheer Wiki ei muar.",
        "loginlanguagelabel": "Spriak: $1",
        "suspicious-userlogout": "Din ufmeldang as ei föörnimen wurden, auer det uunfraag ferlicht faan en uunstakenen browser of faan en cache-proxy kaam.",
        "createacct-another-realname-tip": "Stäänt tu wool. Wan dü dan rochten nööm uundääst, koon hi mä din feranrangen ferbünjen wurd.",
        "passwordreset-emailsent-capture": "Detdiar E-Mail, wat oner uunwiset woort, as tu di onerwais.",
        "passwordreset-emailerror-capture": "Detdiar E-Mail, wat oner uunwiset woort, wiar tu di onerwais, oober küd ei tu di {{GENDER:$2|brüker}} ufsjüürd wurd: $1",
        "changeemail": "Feranre det E-Mail-adres",
-       "changeemail-header": "Feranre det E-Mail-adres",
        "changeemail-text": "Fal detdiar formulaar hialandaal ütj, am din E-Mail-adres tu feranrin. Diarför skel dü din paaswurd uundu.",
        "changeemail-no-info": "Dü möist önjmälded weese am ju sid diräkt tu tu gripen.",
        "changeemail-oldemail": "Aktuel e-mail adres",
        "changeemail-none": "(niin)",
        "changeemail-password": "Din {{SITENAME}} paaswurd:",
        "changeemail-submit": "E-mail adres feranre",
-       "changeemail-cancel": "Ufbreeg",
        "changeemail-throttled": "Dü heest tufölsis fersoocht, di uuntumeldin.\nWees so gud an teew $1, iar dü det noch ans ferschükst.",
        "resettokens": "Tokens turagsaat",
        "resettokens-text": "Dü könst 'tokens' turagsaat, am priwoot dooten tu bewerkin, diar mä din brükerkonto ferbünjen san.",
        "preview": "Iarst ans luke",
        "showpreview": "Iarst ans luke",
        "showdiff": "Feranrangen wise",
-       "anoneditwarning": "'''Paase üüb:''' Dü bewerkest detdiar sidj anonüüm. Wan dü det seekerst, woort din aktuel IP-adres uun a ferluup aptiakent, an as diarmä '''för arken''' iintusen.",
+       "blankarticle": "<strong>Paase üüb:</strong> Dü maagest en leesag sidj.\nWan dü üüb \"{{int:savearticle}}\" trakst, woort det sidj iinracht saner wat uun.",
+       "anoneditwarning": "'''Paase üüb:''' Dü beest ei uunmeldet. Din aktuel IP-adres komt tu sen, wan dü feranrangen föörnamst. Wan dü di <strong>[$1 uunmeldest]</strong> of <strong>[$2 en konto iinrachtst]</strong>, wurd din feranrangen mä dan brükernööm ferbünjen, tuup mä ööder föördialen.",
        "anonpreviewwarning": "\"Dü beest ei uunmeldet. Bi't seekrin woort din IP-adres uun a ferluup faan werjuunen aptiakent.\"",
        "missingsummary": "'''Paase üüb:''' Dü heest det ei tuupfaadet.\nWan dü det sidj seekerst, woort det saner en kurtfaadet beskriiwang auernimen.",
        "missingcommenttext": "Faade det oner tuup.",
        "parser-template-recursion-depth-warning": "Tuföl föörlaagen uun föörlaagen ($1)",
        "language-converter-depth-warning": "Spriakenkonwerter auerläästet ($1)",
        "node-count-exceeded-category": "Jodiar sidjen haa tuföl ferbinjangen (nodes)",
-       "node-count-exceeded-category-desc": "En kategorii för sidjen mä tuföl knooter (nodes).",
+       "node-count-exceeded-category-desc": "Detdiar sidj brükt tuföl knooter (nodes).",
        "node-count-exceeded-warning": "Detdiar sidj hää tuföl ferbinjangen (nodes)",
        "expansion-depth-exceeded-category": "Jodiar sidjen haa tuföl ütjwidjangen (expansion)",
-       "expansion-depth-exceeded-category-desc": "Det as en kategorii för sidjen mä tuföl ütjwidjangen.",
+       "expansion-depth-exceeded-category-desc": "Detdiar sidj hää tuföl ütjwidjangen.",
        "expansion-depth-exceeded-warning": "Detdiar sidj hää tuföl ütjwidjangen (expansion)",
        "parser-unstrip-loop-warning": "Diar as en jinsidjag ferwisang",
        "parser-unstrip-recursion-limit": "Tuföl jinsidjag ferwisangen bi $1",
        "undo-failure": "Det feranrang küd ei stregen wurd, auer di kirew uuntesken feranert wurden as.",
        "undo-norev": "Det feranrang küd ei turagsaat wurd, auer diar niks as of auer det sidj stregen wurden as.",
        "undo-nochange": "Detdiar feranrang as wel al ans turagsaat wurden.",
-       "undo-summary": "Feranrang $1 faan [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusjuun]]) turagsaat.",
+       "undo-summary": "Feranrang $1 faan [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskuschuun]]) turagsaat.",
        "undo-summary-username-hidden": "Feranrang $1 faan en ferbürgenen brüker turagsaat",
        "cantcreateaccounttitle": "Det brükerkonto koon ei iinracht wurd",
        "cantcreateaccount-text": "Det iinrachten faan en brükerkonto faan det IP-adres '''($1)''' as faan [[User:$3|$3]] speret wurden.\n\nGrünj för det sper: ''$2''",
        "rev-deleted-event": "(Logbuk-iindrach stregen)",
        "rev-deleted-user-contribs": "[Brükernööm of IP-adres wechnimen - Feranrangen uun bidracher ferbürgen]",
        "rev-deleted-text-permission": "Detdiar werjuun as '''stregen''' wurden.\nUun't [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} strik-logbuk] stäänt muar diartu.",
+       "rev-suppressed-text-permission": "Detdiar werjuun as '''ferbürgen''' wurden.\nDü könst det noch uunluke uun't [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} fersteeg-logbuk].",
        "rev-deleted-text-unhide": "Detdiar werjuun as '''stregen''' wurden.\nUun't [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} strik-logbuk] stäänt muar diartu.\nDü könst [$1 detdiar werjuun uunluke], wan dü wel.",
        "rev-suppressed-text-unhide": "Detdiar werjuun as '''ferbürgen''' wurden.\nUun't [{{fullurl:{{#special:Log}}/suppress|page={{FULLPAGENAMEE}}}} fersteeg-logbuk] stäänt muar diartu.\nDü könst [$1 detdiar werjuun uunluke], wan dü wel.",
        "rev-deleted-text-view": "Detdiar werjuun as '''stregen''' wurden.\nDü könst det noch uunluke. Uun't [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} strik-logbuk] stäänt muar diartu.",
        "revdelete-text-text": "Stregen werjuunen bliiw uun't werjuunshistoore, man dialen diarfaan san ei för arken tu sen.",
        "revdelete-text-file": "Stregen datei-werjuunen bliiw uun't werjuunshistoore, man dialen diarfaan san ei för arken tu sen.",
        "logdelete-text": "Stregen logbuk-iindracher bliiw uun a logbuken, man dialen diarfaan san ei för arken tu sen.",
-       "revdelete-text-others": "Ööder administratooren faan {{SITENAME}} kön widjerhen ales uunluke an kön det uk weder mä detheer spezial-sidj iinstel, wan diar niks ööders uun a wai as.",
+       "revdelete-text-others": "Ööder administratooren kön widjerhen ales uunluke an kön det uk weder iinstel, wan diar niks ööders uun a wai as.",
        "revdelete-confirm": "Ferseekre noch ans, dat dü det würelk du wel, dat dü witjst, wat dü dääst, an dat det mä a [[{{MediaWiki:Policy-url}}|bestemangen]] auerian stemet.",
        "revdelete-suppress-text": "Det skul '''bluas''' onertrakt wurd bi:\n* Persöönelk informatsjuunen, diar näämen wat uungung\n*: ''Adresen, tilefoonnumern, ferseekerangsnumern an sowat''",
        "revdelete-legend": "Iinstelangen, hüföl tu sen wees skal",
        "mergehistory-same-destination": "Det iarst an det ööder sidj mut ei detsalew wees",
        "mergehistory-reason": "Grünj:",
        "mergelog": "Ferianangs-logbuk",
-       "pagemerge-logentry": "[[$1]] efter [[$2]] tuupfeerd (werjuunen bit $3)",
        "revertmerge": "Det tuupfeeren turagsaat",
        "mergelogpagetext": "Diar as det logbuk faan a tuupfeerd sidjen.",
        "history-title": "$1: Ferluup faan a werjuunen",
        "searchall": "aaltumaal",
        "showingresults": "Heer {{PLURAL:$1|as '''1''' resultaat|san '''$1''' resultaaten}}, jo began mä numer '''$2.'''",
        "showingresultsinrange": "Oner {{PLURAL:$1|woort <strong>ian</strong> resultaat|wurd bit tu <strong>$1</strong> resultaaten}} tesken <strong>$2</strong> an <strong>$3</strong> uunwiset.",
-       "showingresultsheader": "{{PLURAL:$5|resultaat '''$1''' faan '''$3'''|resultaaten '''$1-$2''' faan '''$3'''}}, för '''$4.'''",
+       "search-showingresults": "{{PLURAL:$4|Resultaat <strong>$1</strong> faan <strong>$3</strong>|Resultaaten <strong>$1 - $2</strong> faan <strong>$3</strong>}}",
        "search-nonefound": "För din uunfraag san nian resultaaten fünjen wurden.",
        "powersearch-legend": "Ütjwidjet schüken",
        "powersearch-ns": "Schük uun nöömrümer:",
        "preferences": "Iinstelangen",
        "mypreferences": "Iinstelangen",
        "prefs-edits": "Taal faan feranrangen:",
-       "prefsnologintext2": "Wees so gud an $1 , am din brüker-iinstelangen fäästtuleien.",
+       "prefsnologintext2": "Wees so gud an meldi di uun, am din brüker-iinstelangen tu feranrin.",
        "prefs-skin": "Skak",
        "skin-preview": "Föörskau",
        "datedefault": "Föör-iinstelang",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Ferskeel",
        "prefs-help-prefershttps": "Detdiar iinstelang täält, wan dü di naist tooch uunmeldest.",
+       "prefswarning-warning": "A feranrangen bi din iinstelangen san noch ei seekert wurden.\nWan dü detheer sidj ferläätst, saner üüb \"$1\" tu traken, wurd din iinstelangen ei aktualisiaret.",
        "prefs-tabs-navigation-hint": "Halep: Dü könst a lachter of rochter wiiser-knoop brük, am tesken a ridjerkoorden boowen uun't menüü hen an weder tu springen.",
        "email-address-validity-valid": "Detdiar E-Mail-adres schocht gud ütj.",
        "email-address-validity-invalid": "Du en echt E-Mail-adres uun.",
        "right-deletedtext": "Stregen tekst an feranrangen tesken stregen werjuunen uunluke",
        "right-browsearchive": "Schük stregen sidjen",
        "right-undelete": "Stregen sidjen turaghaale",
-       "right-suppressrevision": "Werjuunen uunluke an turaghaale, diar uk för administratooren ei tu sen san",
+       "right-suppressrevision": "Werjuunen faan sidjen för arke brüker fersteeg, turaghaale an uunluke.",
+       "right-viewsuppressed": "För arke brüker ferbürgen werjuunen uunluke.",
        "right-suppressionlog": "Priwoot logbuken uunluke",
        "right-block": "Brükern spere (för't skriiwen)",
        "right-blockemail": "Brüker spere för't e-mail schüüren",
        "recentchanges-legend-heading": "'''Ferklaarang:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (luke uk bi't [[Special:NewPages|list mä nei sidjen]])",
        "recentchanges-legend-plusminus": "(''±123'')",
-       "rcnotefrom": "Diar wurd a feranrangen sant <strong>$2</strong>uunwiset (ei muar üs <strong>$1</strong> feranrangen).",
+       "rcnotefrom": "Diar {{PLURAL:$5|woort det feranrang|wurd a feranrangen}} sant <strong>$3,$4</strong>uunwiset (ei muar üs <strong>$1</strong> feranrangen).",
        "rclistfrom": "Bluas feranrangen sant $3 $2 wise",
        "rcshowhideminor": "$1 letj feranrangen",
        "rcshowhideminor-show": "Wise",
        "license": "Lisens:",
        "license-header": "Lisens",
        "nolicense": "Nian ütjwool",
+       "licenses-edit": "Lisensmögelkhaiden bewerke",
        "license-nopreview": "(Diar as noch niks tu sen)",
-       "upload_source_url": "(en tuläät URL)",
-       "upload_source_file": "(en datei üüb dan computer)",
+       "upload_source_url": "(din ütjsoocht datei faan en tuläät URL)",
+       "upload_source_file": "(din ütjsoocht datei faan dan computer)",
+       "listfiles-delete": "strik",
        "listfiles-summary": "Üüb detdiar spezialsidj wurd aal a huuchschüürd datein uunwiset.",
        "listfiles_search_for": "Schük efter det datei:",
        "imgfile": "datei",
        "randomincategory": "Tufelag sidj uun't kategorii",
        "randomincategory-invalidcategory": "\"$1\" as üs kategoriinööm ei tuläät.",
        "randomincategory-nopages": "Diar san nian sidjen uun [[:Category:$1]].",
-       "randomincategory-selectcategory": "Tufelag sidj uun't kategorii: $1 $2.",
-       "randomincategory-selectcategory-submit": "Widjer",
+       "randomincategory-category": "Kategorii:",
+       "randomincategory-legend": "Tufelag sidj uun't kategorii",
        "randomredirect": "Tufelag widjerfeerang",
        "randomredirect-nopages": "Uun di nöömrüm „$1“ san nian widjerfeerangen.",
        "statistics": "Statistik",
        "statistics-header-pages": "Sidjenstatistik",
        "statistics-header-edits": "Statistik faan feranrangen",
-       "statistics-header-views": "Statistik faan kliks üüb sidjen",
        "statistics-header-users": "Brükerstatistik",
        "statistics-header-hooks": "Ööder statistiken",
        "statistics-articles": "Artiikler",
        "statistics-files": "Huuchschüürd datein",
        "statistics-edits": "Feranrangen, sant {{SITENAME}} maaget wurden as",
        "statistics-edits-average": "Feranrangen per sidj uun't madel",
-       "statistics-views-total": "Kliks üüb det sidj",
-       "statistics-views-total-desc": "Kliks üüb sidjen, diar't goorei jaft of \"Spezial-\"sidjen wurd ei mätääld.",
-       "statistics-views-peredit": "Kliks per feranrang",
        "statistics-users": "Registriaret [[Special:ListUsers|brükern]]",
        "statistics-users-active": "Aktiif brükern",
        "statistics-users-active-desc": "Brükern, diar wat bewerket haa uun a leetst {{PLURAL:$1|dai|$1 daar}}",
-       "statistics-mostpopular": "Sidjen mä a miast kliks",
        "pageswithprop": "Sidjen mä en sidjeneegenoort",
        "pageswithprop-legend": "Sidjen mä en sidjeneegenoort",
        "pageswithprop-text": "Detheer Spezial-sidj feert sidjen mä was sidjeneegenoorten ap.",
        "uncategorizedtemplates": "Föörlaagen saner kategorii",
        "unusedcategories": "Kategoriin, diar ei brükt wurd",
        "unusedimages": "Datein, diar ei brükt wurd",
-       "popularpages": "Miats uunluket sidjen",
        "wantedcategories": "Kategoriin, diar brükt wurd",
        "wantedpages": "Sidjen, diar brükt wurd",
        "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]].",
+       "wantedfiletext-cat-noforeign": "Jodiar datein wurd brükt, man san ei diar. An do wurd diar üüb [[:$1]] sidjen apfeerd, diar datein brük, diar't ei jaft.",
        "wantedfiletext-nocat": "Jodiar datein wurd brükt, oober san ei diar. Datein faan ööder archiiwen wurd apfeerd, san oober <del>trochstregen</del>.",
+       "wantedfiletext-nocat-noforeign": "Jodiar datein wurd brükt, man san ei diar.",
        "wantedtemplates": "Föörlaagen, diar brükt wurd",
        "mostlinked": "Sidjen, huar a miast ööder sidjen üüb ferwise",
        "mostlinkedcategories": "Miast brükt kategoriin",
        "querypage-disabled": "Detdiar spezial-sidj as ei aktiif, am det süsteem ei tu auerläästin.",
        "booksources": "Schük efter ISBN-numer",
        "booksources-search-legend": "Schük efter bukloodens",
-       "booksources-go": "Widjer",
+       "booksources-search": "Schük",
        "booksources-text": "Detdiar list ferwiset üüb wääbsteeden, diar nei an brükt buken ferkuupe. Diar feist dü uk muar tu weden. {{SITENAME}} hää mo jodiar kuuplidj oober niks tu dun.",
        "booksources-invalid-isbn": "Detdiar ISBN as woorskiinelk ferkiard. Luke noch ans efter, of det rocht auerdraanj wurden as.",
        "specialloguserlabel": "Brüker:",
        "index-category-desc": "Üüb detdiar sidj stäänt det maagisk wurd <code><nowiki>__INDEX__</nowiki></code> an as uun en nöömrüm, huar det ei tuläät as. Sodenang woort det faan a bots likes indisiaret.",
        "post-expand-template-inclusion-category-desc": "Efter't ütjwidjin faan a föörlaagen as det sidj grater üs <code>$wgMaxArticleSize</code>, sodenang kön enkelt föörlaagen ei ütjwidjet wurd.",
        "post-expand-template-argument-category-desc": "Efter't ütjwidjin faan en föörlaagenargument (det stäänt uun trebelt kläämen so üs <code>{{{Foo}}})</code> as det sidj grater üs <code>$wgMaxArticleSize</code>.",
-       "expensive-parserfunction-category-desc": "Diar san tu föl parser-funktjuunen (so üs <code>#ifexist</code>) uun det sidj iinbünjen. Luke efter uun't [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit brüker-hoonbuk].",
-       "broken-file-category-desc": "Detdiar kategorii woort iinsaat, wan üüb det sidj en uunstaken ferwisang föörkomt. (Det as ferlicht en ferwisang üüb en datei, wat det goorei jaft.)",
+       "expensive-parserfunction-category-desc": "Det sidj brükt tuföl parser-funktjuunen (so üs <code>#ifexist</code>). Luke efter uun't [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit brüker-hoonbuk].",
+       "broken-file-category-desc": "Det sidj brükt en uunstaken ferwisang. (Det as ferlicht en ferwisang üüb en datei, wat det goorei jaft.)",
        "hidden-category-category-desc": "Det as en kategorii, huar <code><nowiki>__HIDDENCAT__</nowiki></code> üüb stäänt. Hat woort normoolerwiis ei bi a kategoriin uunwiset.",
        "trackingcategories-nodesc": "Diar as nian beskriiwang.",
        "trackingcategories-disabled": "Detdiar kategorii as ufsteld wurden",
        "mywatchlist": "Uun't uug behual",
        "watchlistfor2": "Foon $1 $2",
        "nowatchlist": "Diar as nään iindrach, diar dü uun't uug behual wel.",
-       "watchlistanontext": "Dü skel di $1, am iindracher tu leesen of tu bewerkin, diar dü uun't uug behual wel.",
+       "watchlistanontext": "Dü skel di uunmelde, am iindracher tu leesen of tu bewerkin, diar dü uun't uug behual wel.",
        "watchnologin": "Ei uunmeldet",
        "addwatch": "Uk uun't uug behual",
        "addedwatchtext": "Det sidj „[[:$1]]“ wel dü [[Special:Watchlist|uun't uug behual]].\nFeranrangen faan detdiar sidj wurd üüb detdiar list fäästhäälen.",
        "watchlist-details": "Dü behäälst {{PLURAL:$1|1 sidj|$1 sidjen}} uun't uug, diarbi wurd diskuschuunsidjen ei mätääld.",
        "wlheader-enotif": "Di e-mail siinst as aktiif.",
        "wlheader-showupdated": "Nei feranert sidjen wurd '''fäät''' uunwiset.",
-       "wlnote": "Diar {{PLURAL:$1|stäänt det leetst feranrang|stun a leetst '''$1''' feranrangen}} faan a leetst {{PLURAL:$2|stünj|'''$2''' stünjen}}. Stant: $3, klook $4.",
-       "wlshowlast": "Wise a feranrangen faan leetst $1 stünjen, $2 daar of $3.",
+       "wlnote": "Diar {{PLURAL:$1|stäänt det leetst feranrang|stun a leetst <strong>$1</strong> feranrangen}} faan a leetst {{PLURAL:$2|stünj|<strong>$2</strong> stünjen}}. Stant: $3, klook $4.",
+       "wlshowlast": "Wise a feranrangen faan leetst $1 stünjen, $2 daar of .",
        "watchlist-options": "Iinstelangen för't uunwisin",
        "watching": "Uun't uug behual ...",
        "unwatching": "Ei uun't uug behual ...",
        "exbeforeblank": "diar sted föör't leesag maagin: „$1“",
        "delete-confirm": "Strik \"$1\"",
        "delete-legend": "Strike",
-       "historywarning": "'''Paase üüb:''' Det sidj, wat dü strik wel, hää amanbi $1 {{PLURAL:$1|werjuun|werjuunen}}:",
+       "historywarning": "<strong>Paase üüb:</strong> Det sidj, wat dü strik wel, hää $1 {{PLURAL:$1|werjuun|werjuunen}}:",
        "confirmdeletetext": "Dü wel en sidj mä aal sin werjuunen strik. Dü skel gudkään, dat dü witjst, wat dü dääst an dat din dun mä a [[{{MediaWiki:Policy-url}}|brükerreegeln]] auerian stemet.",
        "actioncomplete": "Klaar",
        "actionfailed": "Diar ging wat skiaf",
        "delete-edit-reasonlist": "Grünjer för't striken bewerke",
        "delete-toobig": "Detdiar sidj hää muar üs $1 {{PLURAL:$1|werjuun|werjuunen}} . Sok sidjen kön ei so gau stregen wurd, ööders san a servers plaat.",
        "delete-warning-toobig": "Detdiar sidj hää muar üs $1 {{PLURAL:$1|werjuun|werjuunen}} . Det striken koon komer maage bi't dootenbeenk.",
+       "deleteprotected": "Dü könst detdiar sidj ei strik, auer det seekert wurden as.",
        "deleting-backlinks-warning": "'''Paase üüb:''' Diar ferwise noch [[Special:WhatLinksHere/{{FULLPAGENAME}}|ööder sidjen]] üüb det sidj, diar dü strik wel. Of det sidj as noch huarööders iinbünjen.",
        "rollback": "Feranrangen turagsaat",
        "rollback_short": "Turagsaat",
        "rollbacklinkcount-morethan": "Muar üs $1 {{PLURAL:$1|werjuun|werjuunen}} turagsaat",
        "rollbackfailed": "Bi't turagsaaten as wat skiaf gingen.",
        "cantrollback": "Det feranrang koon ei turagsaat wurd, diar san nian ööder skriiwern weesen.",
-       "alreadyrolled": "A anrangen faan [[User:$2|$2]] ([[User talk:$2|Diskusjuun]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) bi [[:$1]] kön ei turagsaat wurd. Diar hää uuntesken en öödern brüker det sidj feranert.\n\nDet leetst feranrang as faan [[User:$3|$3]] ([[User talk:$3|Diskusjuun]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "alreadyrolled": "A feranrangen faan [[User:$2|$2]] ([[User talk:$2|Diskuschuun]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) bi [[:$1]] kön ei turagsaat wurd. Diar hää uuntesken en öödern brüker det sidj feranert.\n\nDet leetst feranrang as faan [[User:$3|$3]] ([[User talk:$3|Diskuschuun]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Tuupfaadet feranrang: ''„$1“''.",
-       "revertpage": "Feranrangen faan [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusjuun]]) san üüb di leetst stant faan [[User:$1|$1]] turagsaat wurden.",
+       "revertpage": "Feranrangen faan [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskuschuun]]) san üüb di leetst stant faan [[User:$1|$1]] turagsaat wurden.",
        "revertpage-nouser": "Feranrangen faan en ferbürgenen brüker turagsaat an det leetst werjuun faan {{GENDER:$1|[[User:$1|$1]]}} weder iinsteld.",
        "rollback-success": "Feranrangen faan $1 turagsaat an det leetst werjuun faan $2 weder iinsteld.",
        "sessionfailure-title": "session feeler",
        "protect-othertime": "Ööder sperdüür:",
        "protect-othertime-op": "ööder sperdüür",
        "protect-existing-expiry": "Sidjenseekerang lääpt uf: $2, klook $3",
+       "protect-existing-expiry-infinity": "Sidjenseekrang lääpt uf: saner aanj",
        "protect-otherreason": "Ööder/noch en grünj:",
        "protect-otherreason-op": "Ööder grünj:",
        "protect-dropdown": "* Miast brükt grünjer\n** Edit-War\n** Wandaalen onerwais\n** Tuföl rekloome\n** Flooksis brükt föörlaag\n** Sidj mä föl beschük",
        "sp-contributions-deleted": "Stregen bidracher",
        "sp-contributions-uploads": "Huuchschüürd bilen",
        "sp-contributions-logs": "Logbuken",
-       "sp-contributions-talk": "Diskusjuun",
+       "sp-contributions-talk": "Diskuschuun",
        "sp-contributions-userrights": "Brükerrochten",
        "sp-contributions-blocked-notice": "Didiar brüker as speret. Det stäänt uun't sperlogbuk:",
        "sp-contributions-blocked-notice-anon": "Detdiar IP-adres as speret. Det stäänt uun't sperlogbuk:",
        "autoblockid": "Automaatisk sper #$1",
        "block": "Brüker spere",
        "unblock": "Brüker ei muar spere",
-       "blockip": "IP-adres/brüker spere",
+       "blockip": "IP-adres/{{GENDER:$1|brüker}} spere",
        "blockip-legend": "IP-adres/brüker spere",
        "blockiptext": "Mä detdiar formulaar sperest dü en IP-adres of en brükernööm, so dat faan diar nian feranrangen muar maaget wurd kön. \nDet skul bluas föörnimen wurd, am jin wandaalen föörtugungen an uun auerianstemang mä a [[{{MediaWiki:Policy-url}}|brükerreegeln]].\nSkriiw en guden grünj för det sper ap.",
        "ipaddressorusername": "IP-adres of brükernööm:",
        "ipb-unblock-addr": "„$1“ ei muar spere",
        "ipb-unblock": "IP-adres/brüker ei muar spere",
        "ipb-blocklist": "Speren uunwise",
-       "ipb-blocklist-contribs": "Bidracher faan „$1“",
+       "ipb-blocklist-contribs": "Bidracher faan „{{GENDER:$1|$1}}“",
        "unblockip": "Brüker ei muar spere",
        "unblockiptext": "Mä detdiar formulaar könst dü det sper faan en IP-adres of en brüker apheew.",
        "ipusubmit": "Ei muar spere",
        "unblocked": "[[User:$1|$1]] woort ei muar speret.",
        "unblocked-range": "Sper för $1 as apheewen wurden.",
        "unblocked-id": "Sperang $1 as apheewen",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] as freiden wurden.",
        "blocklist": "Speret brükern",
        "ipblocklist": "Speret brükern",
        "ipblocklist-legend": "Speret brüker finj",
        "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.",
-       "import-interwiki-source": "Faan hün Wiki/sidj:",
+       "import-interwiki-sourcewiki": "Faan hün Wiki:",
+       "import-interwiki-sourcepage": "Faan hün sidj:",
        "import-interwiki-history": "Aal a werjuunen faan det sidj importiare",
        "import-interwiki-templates": "Mä aal a föörlaagen",
        "import-interwiki-submit": "Import",
        "import-error-create": "Det sidj „$1“ as ei importiaret wurden, auer dü det ei maage mutst.",
        "import-error-interwiki": "Det sidj „$1“ as ei importiaret wurden, auer di nööm för ferwisangen (interwiki) föörsen as.",
        "import-error-special": "Det sidj „$1“ as ei importiaret wurden, auer hat tu en nöömrüm hiart, huar nian sidjen mögelk san.",
-       "import-error-invalid": "Det sidj „$1“ as ei importiaret wurden, auer di nööm ei stemet.",
+       "import-error-invalid": "Det sidj „$1“ as ei importiaret wurden, auer di nööm üüb detheer Wiki ei tuläät as.",
        "import-error-unserialize": "Det werjuun $2 faan det sidj „$1“ küd ei deserialisiaret wurd. Det werjuun woort mä det münster $3 brükt, an det as mä $4 serialisiaret.",
        "import-error-bad-location": "Det feranrang $2 mä model $3 koon ei üs \"$1\" üüb detheer wiki seekert wurd, auer detdiar model heer ei brükt wurd koon.",
        "import-options-wrong": "Ferkiard {{PLURAL:$2|iinstelang|iinstelangen}}: <nowiki>$1</nowiki>",
        "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}}",
+       "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",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|werjuun|werjuunen}} faan $2 importiaret",
        "javascripttest": "JavaScript-test",
        "javascripttest-title": "$1-tests wurd ütjfeerd.",
        "javascripttest-pagetext-noframework": "Detdiar sidj as för JavaScript-tests föörsen.",
        "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-anontalk": "Diskusjuun auer feranrangen faan detdiar IP-adres",
+       "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",
        "tooltip-pt-mycontris": "List mä aanj bidracher",
        "tooltip-pt-login": "Wan dü di uunmeldest, heest dü muar mögelkhaiden. Dü säärst det oober ei.",
        "tooltip-pt-logout": "Ufmelde",
-       "tooltip-ca-talk": "Diskusjuun auer di artiikel",
+       "tooltip-ca-talk": "Diskuschuun auer di artiikel",
        "tooltip-ca-edit": "Sidj bewerke. Luke di det iarst ans uun, iar dü det seekerst.",
        "tooltip-ca-addsection": "Nei kirew began",
        "tooltip-ca-viewsource": "Detdiar sidj as seekert wurden.\nDü könst di kweltekst uunluke.",
        "pageinfo-robot-policy": "Faan bots indisiaret",
        "pageinfo-robot-index": "Tuläät",
        "pageinfo-robot-noindex": "Ei tuläät",
-       "pageinfo-views": "Taal faan kliks üüb det sidj",
        "pageinfo-watchers": "Taal faan brükern, diar det sidj uun't uug haa",
        "pageinfo-few-watchers": "Maner üs {{PLURAL:$1|ään brüker|$1 brükern}}, diar det sidj uun't uug haa",
        "pageinfo-redirects-name": "Taal faan widjerfeerangen tu detdiar sidj",
        "exif-urgency-low": "Liach ($1)",
        "exif-urgency-high": "Huuch ($1)",
        "exif-urgency-other": "Faan a brüker fäästlaanj prioriteet ($1)",
-       "watchlistall2": "aaltumaal",
        "namespacesall": "aaltumaal",
        "monthsall": "aaltumaal",
        "confirmemail": "E-mail-adres gudkään",
        "scarytranscludefailed-httpstatus": "[Ufrepen faan föörlaagen för $1 as skiaf gingen: HTTP  $2]",
        "scarytranscludetoolong": "[URL as tu lung]",
        "deletedwhileediting": "'''Paase üüb:''' Det sidj as stregen wurden, üs dü diar jüst bi werket heest!\nUun't [{{fullurl:{{#special:Log}}|type=delete&page={{FULLPAGENAMEE}}}} Strik-logbuk] fanjst dü di grünj för't striken. Wan dü det sidj seekerst, woort det nei uunlaanj.",
-       "confirmrecreate": "Di brüker [[User:$1|$1]] ([[User talk:$1|Diskusjuun]]) hää det sidj stregen, üs dü diar jüst bi werket heest. Di grünj wiar:\n:''$2''\nFerseekre, dat dü det sidj würelk nei maage wel.",
-       "confirmrecreate-noreason": "Di brüker [[User:$1|$1 ]] ([[User talk:$1|Diskusjuun]]) hää det sidj stregen, huar dü jüst bi werket heest. Ferseekre, dat dü det sidj würelk nei maage wel.",
+       "confirmrecreate": "Di brüker [[User:$1|$1]] ([[User talk:$1|Diskuschuun]]) hää det sidj stregen, üs dü diar jüst bi werket heest. Di grünj wiar:\n:''$2''\nFerseekre, dat dü det sidj würelk nei maage wel.",
+       "confirmrecreate-noreason": "Di brüker [[User:$1|$1 ]] ([[User talk:$1|Diskuschuun]]) hää det sidj stregen, huar dü jüst bi werket heest. Ferseekre, dat dü det sidj würelk nei maage wel.",
        "recreate": "Nei maage",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Det sidj ütj a cache strik?",
        "autosumm-replace": "Di tekst as ütjbütjet wurden mä \"$1\"",
        "autoredircomment": "Sidj tu [[$1]] widjerfeerd",
        "autosumm-new": "Det sidj as nei uunlaanj wurden: \"$1\"",
+       "autosumm-newblank": "En leesag sidj maaget",
        "lag-warn-normal": "Feranrangen faan {{PLURAL:$1|at leetst sekund|a leetst $1 sekunden}} kön noch ei uunwiset wurd.",
        "lag-warn-high": "Auer det huuch dootenbeenklääst kön a feranrangen faan {{PLURAL:$1|at leetst sekund|a leetst $1 sekunden}} noch ei uunwiset wurd.",
        "watchlistedit-normal-title": "List mä sidjen, diar dü uun't uug behual wel, bewerke",
        "watchlisttools-view": "Uun't uug behual: Feranrangen",
        "watchlisttools-edit": "Normool bewerke",
        "watchlisttools-raw": "Uun't listenformoot bewerke",
-       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskusjuun]])",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskuschuun]])",
        "unknown_extension_tag": "Ünbekäänd ''tag'' „$1“",
        "duplicate-defaultsort": "'''Paase üüb:''' Di sortiarkai \"$2\" auerskraft di ual sortiarkai \"$1\"",
+       "duplicate-displaytitle": "<strong>Paase üüb:</strong> Di uunwiset tiitel \"$2\" auerskraft di ual tiitel \"$1\".",
        "version": "Werjuun",
        "version-extensions": "Instaliaret ütjwidjangen",
        "version-skins": "Instaliaret brükerskaker",
        "logentry-rights-rights": "$1 {{GENDER:$2|hää}} det brükerskööl för $3 faan $4 tu $5 feranert.",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|hää}} det brükerskööl för $3 feranert.",
        "logentry-rights-autopromote": "$1 as automaatisk faan $4 tu $5 {{GENDER:$2|tuwiset}} wurden.",
+       "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",
        "rightsnone": "(-)",
+       "revdelete-summary": "tuhuupefootings-komäntoor",
        "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:",
        "action-pagelang": "det sidjenspriak tu feranrin",
        "log-name-pagelang": "Logbuk för spriak-feranrangen",
        "log-description-pagelang": "Det as en logbuk för sidjenspriak-feranrangen",
-       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|hää}} det sidjenspriak för $3 faan $4 tu $5 feranert."
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|hää}} det sidjenspriak för $3 faan $4 tu $5 feranert.",
+       "default-skin-not-found": "Uuha! Uun <code dir=\"ltr\">$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDin instalatjuun hää wel jodiar skaker. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.\n\n$2\n\n; Wan dü MediaWiki jüst instaliaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest.\n\n; Wan dü jüst MediaWiki aktualisiaret heest:\n: MediaWiki 1.24 an neier werjuunen aktiwiare instaliaret skaker ei muar faan salew (luke uk iin uun det [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery brüker-hoonbuk]). Dü könst jodiar räen uun det datei <code>LocalSettings.php</code> iinsaat, am aal a instaliaret skaker tu aktiwiarin:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Wan dü jüst <code>LocalSettings.php</code> feranert heest:\n: Heest dü a skaker uk aaltumaal rocht skrewen?",
+       "default-skin-not-found-no-skins": "Uuha! Uun <code>$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDü heest goor nian skak instaliaret.\n\n; Wan dü MediaWiki jüst instaliaret of aktualisiaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. MediaWiki 1.24 an neier werjuunen haa nian skak uun't hood-fertiaknis. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiwiaret)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ufsteld''')",
+       "mediastatistics": "Statistik faan meedien",
+       "mediastatistics-summary": "Statistiken faan huuchschüürd dateitypen. Diar woort bluas det leetst werjuun uunwiset. Ual of stregen werjuunen san diar ei bi.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|Ian byte|$1 bytes}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME-Typ",
+       "mediastatistics-table-extensions": "Mögelk ütjwidjangen",
+       "mediastatistics-table-count": "Taal faan datein",
+       "mediastatistics-table-totalbytes": "Grate tuup",
+       "mediastatistics-header-unknown": "Ünbekäänd",
+       "mediastatistics-header-bitmap": "Bitmap-bilen",
+       "mediastatistics-header-drawing": "Tiaknangen (vektor-bilen)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Videos",
+       "mediastatistics-header-multimedia": "Rik meedien",
+       "mediastatistics-header-office": "Office",
+       "mediastatistics-header-text": "Tekst",
+       "mediastatistics-header-executable": "Datein tu ütjfeeren",
+       "mediastatistics-header-archive": "Komprimiaret formaaten",
+       "json-error-unknown": "Diar ging wat skiaf mä't JSON. Feeler: $1",
+       "json-error-depth": "Det staabeljipde as tu grat.",
+       "json-error-state-mismatch": "Ferkiard JSON",
+       "json-error-ctrl-char": "Schüürtiakenfeeler, ferlich ferkiard kodiaret",
+       "json-error-syntax": "Süntaksfeeler",
+       "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."
 }
index 18b5c72..9887e73 100644 (file)
        "searchrelated": "leâts",
        "searchall": "ducj",
        "showingresults": "Ca sot {{PLURAL:$1|al è fin a '''1''' risultât|a son fin a '''$1''' risultâts}} scomençant dal numar '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Risultât '''$1''' su '''$3'''|Risultâts '''$1 - $2''' su '''$3'''}} par '''$4'''",
        "search-nonefound": "Nissun risultât par cheste ricercje.",
        "powersearch-legend": "Ricercje avanzade",
        "powersearch-ns": "Cîr tai spazis dai nons:",
        "statistics": "Statistichis",
        "statistics-header-pages": "Statistichis su lis pagjinis",
        "statistics-header-edits": "Statistichis sui cambiaments",
-       "statistics-header-views": "Statistichis su lis viodudis",
        "statistics-header-users": "Statistichis dai utents",
        "statistics-header-hooks": "Altris statistichis",
        "statistics-articles": "Pagjinis di contignûts",
        "statistics-files": "Files cjamâts sù",
        "statistics-edits": "Cambiaments scomençant de instalazion di {{SITENAME}}",
        "statistics-edits-average": "Medie dai cambiaments par ogni pagjine",
-       "statistics-views-total": "Viodudis totâls",
-       "statistics-views-peredit": "Viodudis par cambiament",
        "statistics-users": "[[Special:ListUsers|Utents]] regjistrâts",
        "statistics-users-active": "Utents atîfs",
        "statistics-users-active-desc": "Utents che a àn fat une azion {{PLURAL:$1|intal ultin dì|intai ultins $1 dîs}}",
-       "statistics-mostpopular": "Pagjinis plui visitadis",
        "doubleredirects": "Re-indreçaments doplis",
        "brokenredirects": "Re-indreçaments che no funzionin",
        "brokenredirectstext": "I re-indreçaments ca sot a mandin a pagjinis che no esistin:",
        "uncategorizedtemplates": "Modei cence une categorie",
        "unusedcategories": "Categoriis no dopradis",
        "unusedimages": "Files no doprâts",
-       "popularpages": "Pagjinis popolârs",
        "wantedcategories": "Categoriis desideradis",
        "wantedpages": "Pagjinis desideradis",
        "wantedfiles": "Files desiderâts",
        "pager-older-n": "{{PLURAL:$1|1 plui vieri|$1 plui vieris}}",
        "booksources": "Fonts librariis",
        "booksources-search-legend": "Ricercje di fonts libraris",
-       "booksources-go": "Va",
        "specialloguserlabel": "Utent:",
        "speciallogtitlelabel": "Titul:",
        "log": "Regjistris",
        "wlheader-enotif": "Notifiche par pueste eletroniche ativade.",
        "wlheader-showupdated": "Lis pagjinis gambiadis de ultime volte che tu lis âs cjaladis a son mostradis in '''gruessut'''",
        "wlnote": "Ca sot {{PLURAL:$1|al è il cambiament plui recent|a son i '''$1''' cambiaments plui recents}} {{PLURAL:$2|inte ultime ore|intes '''$2''' oris passadis}}.",
-       "wlshowlast": "Mostre ultimis $1 oris $2 zornadis $3",
+       "wlshowlast": "Mostre ultimis $1 oris $2 zornadis",
        "watchlist-options": "Opzions pe liste dai tignûts di voli",
        "watching": "Daûr a zontâ aes pagjinis tignudis di voli...",
        "unwatching": "Daûr a gjavâ des pagjinis tignudis di voli...",
        "exif-compression-1": "Cence compression",
        "exif-unknowndate": "Date no cognossude",
        "exif-orientation-1": "Normâl",
-       "watchlistall2": "dutis",
        "namespacesall": "ducj",
        "monthsall": "ducj",
        "confirmemail": "Conferme direzione di pueste",
index 9c23ae8..74cb367 100644 (file)
@@ -11,7 +11,8 @@
                        "Snakesteuben",
                        "Urhixidur",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Robin0van0der0vliet"
                ]
        },
        "tog-underline": "Keppelings ûnderstreekje:",
        "listingcontinuesabbrev": "(ferfolch)",
        "index-category": "Yndeksearre siden",
        "noindex-category": "Net-yndeksearre siden",
-       "about": "Ynfo",
+       "about": "Oer",
        "article": "Ynhâld side",
        "newwindow": "(nij finster)",
-       "cancel": "Ofbrekke",
+       "cancel": "Annulearje",
        "moredotdotdot": "Mear...",
        "mypage": "Myn side",
        "mytalk": "Myn oerlis",
        "faqpage": "Project:Faak stelde fragen",
        "namespaces": "Nammeromten",
        "variants": "Farianten",
-       "errorpagetitle": "Fout",
+       "errorpagetitle": "Flater",
        "returnto": "Werom nei \"$1\".",
        "tagline": "Ut {{SITENAME}}",
        "help": "Help",
        "permalink": "Fêste keppeling",
        "print": "Ofdrukke",
        "view": "Lêze",
-       "edit": "Feroarje",
+       "edit": "Bewurkje",
        "create": "Oanmeitsje",
        "editthispage": "Side bewurkje",
        "create-this-page": "Dizze side oanmeitsje",
        "jumptonavigation": "navigaasje",
        "jumptosearch": "sykje",
        "view-pool-error": "Ekskuseare, de tsjinners hawwe it op it stuit te drok.\nTefolle meidoggers probearje dizze side te besjen.\nWachtsje efkes foardatsto op 'e nij tagong ta dizze side probearrest te krijen.\n\n$1",
-       "aboutsite": "Oer de {{SITENAME}}",
+       "aboutsite": "Oer {{SITENAME}}",
        "aboutpage": "Project:Ynfo",
        "copyright": "Ynhâld is beskikber ûnder de $1.",
        "copyrightpage": "{{ns:project}}:Auteursrjocht",
        "badaccess-groups": "De frege hanneling is foarbehâlden oan brûkers yn {{PLURAL:$2|'e groep|ien fan de groepen}}: $1.",
        "versionrequired": "Ferzje $1 fan MediaWiki is eask",
        "versionrequiredtext": "Ferzje $1 fan MediaWiki is eask om dizze side te brûken. Mear ynfo is beskikber op 'e side [[Special:Version|softwareferzje]].",
-       "ok": "Goed",
+       "ok": "OK",
        "retrievedfrom": "Untfongen fan \"$1\"",
        "youhavenewmessages": "Jo hawwe $1 ($2).",
        "youhavenewmessagesmulti": "Jo hawwe nije berjochten op $1",
        "toc": "Ynhâld",
        "showtoc": "sjen litte",
        "hidetoc": "net sjen litte",
+       "confirmable-yes": "Ja",
+       "confirmable-no": "Nee",
        "thisisdeleted": "\"$1\" lêze of werombringe?",
        "viewdeleted": "$1 sjen litte?",
        "restorelink": "$1 wiske {{PLURAL:$1|ferzje|ferzjes}}",
        "nosuchactiontext": "De opdracht yn de URL is ûnjildich.\nMooglik hasto in typefout makke yn de URL of in ferkearde keppeling folge.\nIt soe likegoed in programmatuerflater fan {{SITENAME}} wêze kinne.",
        "nosuchspecialpage": "Unbekende side",
        "nospecialpagetext": "Jo hawwe in Wiki-side opfrege dy't net bekend is by it Wiki-programma.",
-       "error": "Fout",
+       "error": "Flater",
        "databaseerror": "Databankfout",
+       "databaseerror-error": "Flater: $1",
        "laggedslavemode": "Warskôging: Mûglik binne resinte bewurkings noch net trochfierd.",
        "readonly": "Databank is 'Net-skriuwe'.",
        "enterlockreason": "Skriuw wêrom de databank 'net-skriuwe' makke is, en hoenear't men wêr nei alle gedachten wer skriuwe kin.",
        "virus-scanfailed": "scannen is mislearre (koade $1)",
        "virus-unknownscanner": "ûnbekend antivirus:",
        "logouttext": "'''Jo binne no ôfmeld.'''\n\nGuon siden kinne noch foar it ljocht komme, krekt as wiesto noch oanmeld. Asto de cache fan dyn webblêder leechhellest feroaret dat wer.",
-       "yourname": "Jo meidochnamme:",
-       "userlogin-yourname": "Meidoggersnamme",
+       "yourname": "Brûkersnamme:",
+       "userlogin-yourname": "Brûkersnamme",
        "userlogin-yourname-ph": "Jou dyn brûkersnamme",
        "createacct-another-username-ph": "Jou dyn brûkersnamme",
-       "yourpassword": "Jo wachtwurd",
+       "yourpassword": "Wachtwurd:",
        "userlogin-yourpassword": "Wachtwurd",
        "userlogin-yourpassword-ph": "Jou dyn wachtwurd",
        "createacct-yourpassword-ph": "Jou dyn wachtwurd",
        "resetpass_forbidden": "Wachtwurden kinne net feroare wurde",
        "resetpass-no-info": "Jo moatte oanmeld wêze foar't Jo dizze side brûke kinne.",
        "resetpass-submit-loggedin": "Wachtwurd feroarje",
-       "resetpass-submit-cancel": "Ofbrekke",
+       "resetpass-submit-cancel": "Annulearje",
        "resetpass-wrong-oldpass": "It momintele of tydlike wachtwurd is ûnjildich.\nMûglik hawwe Jo Jo wachtwurd al feroare of in nij tydlik wachtwurd oanfrege.",
        "resetpass-temp-password": "Tydlik wachtwurd:",
        "passwordreset-legend": "Wachtwurd weromsette",
-       "passwordreset-username": "Meidoggernamme",
+       "passwordreset-username": "Brûkersnamme:",
        "passwordreset-domain": "Domein:",
        "passwordreset-email": "E-mailadres:",
        "passwordreset-emailtitle": "Akkountdetails op {{SITENAME}}",
        "changeemail": "Feroarje e-mailadres",
-       "changeemail-header": "Feroarje akkount e-mailadres",
-       "changeemail-cancel": "Ofbrekke",
        "bold_sample": "Fette tekst",
        "bold_tip": "Fette tekst",
        "italic_sample": "Skeane tekst",
        "currentrevisionlink": "Rinnende ferzje",
        "cur": "no",
        "next": "dan",
-       "last": "doe",
+       "last": "foarige",
        "page_first": "earste",
        "page_last": "lêste",
        "histlegend": "Utlis: (no) = ferskil mei de side sa't dy no is,\n(doe) = ferskill mei de side sa't er doe wie, foar de feroaring, T = Tekstwiziging",
        "mergehistory-same-destination": "De boarneside en de doelside kinne net deselde wêze",
        "mergehistory-reason": "Reden:",
        "mergelog": "Gearfoegingslogboek",
-       "pagemerge-logentry": "[[$1]] kombinearre mei [[$2]] (maksimaal $3 ferzjes)",
        "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\"",
        "search-result-size": "$1 ({{PLURAL:$2|1 wurd|$2 wurden}})",
        "search-redirect": "(trochferwizing $1)",
        "search-section": "(seksje $1)",
+       "search-category": "(kategory $1)",
        "search-suggest": "Bedoele jo: $1",
        "search-interwiki-caption": "Susterprojekten",
        "search-interwiki-default": "$1 resultaten:",
        "timezoneregion-indian": "Yndyske Oseaan",
        "timezoneregion-pacific": "Stille Oseaan",
        "allowemail": "Lit my ek netpost fan oare meidoggers krije",
-       "prefs-searchoptions": "Sykynstellings",
+       "prefs-searchoptions": "Sykje",
        "prefs-namespaces": "Nammeromten",
        "default": "standert",
-       "prefs-files": "Triemen",
+       "prefs-files": "Triemmen",
        "prefs-custom-js": "Persoanlik JS",
        "prefs-emailconfirm-label": "Netpostbefêstiging:",
-       "youremail": "Jo netpostadres:",
-       "username": "Meidochnamme:",
+       "youremail": "E-mail:",
+       "username": "{{GENDER:$1|Brûkersnamme}}:",
        "prefs-memberingroups": "Lid fan {{PLURAL:$1|groep|groepen}}:",
        "yourrealname": "Jo wiere namme:",
        "yourlanguage": "Taal:",
        "gender-male": "Man",
        "gender-female": "Frou",
        "prefs-help-gender": "Kar: dit wurdt troch de programmatuer brûkt om de goeie oansprekfoarm te kiezen.\nDizze ynformaasje is foar oare meidoggers te sjen.",
-       "email": "E-post",
+       "email": "E-mail",
        "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-post 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.",
        "action-userrights": "alle brûkersrjochten bewurkje",
        "action-userrights-interwiki": "brûkersrjochten fan brûkers fan oare wiki's bewurkje",
        "action-siteadmin": "de database ôfslute of iepenstelle",
+       "action-sendemail": "e-mail stjoere:",
        "nchanges": "$1 {{PLURAL:$1|bewurking|bewurkings}}",
+       "enhancedrc-history": "skiednis",
        "recentchanges": "Koartlyn feroare",
        "recentchanges-legend": "Opsjes foar resinte feroarings",
        "recentchanges-summary": "De lêste feroarings fan de {{SITENAME}}.",
        "unusedtemplateswlh": "oare keppelings",
        "randompage": "Samar in side",
        "randompage-nopages": "Der binne gjin siden yn'e nammeromte \"$1\".",
+       "randomincategory-category": "Kategory:",
        "randomredirect": "Samar in trochferwizing",
        "randomredirect-nopages": "Der binne gjin trochferwizings yn'e nammerûmte \"$1\".",
        "statistics": "Statistyk",
        "statistics-header-pages": "Sidestatistiken",
        "statistics-header-edits": "Bewurkingsstatistiken",
-       "statistics-header-views": "Sidewerjefte-statistiken",
        "statistics-header-users": "Meidogger-statistyk",
        "statistics-articles": "Ynhâldlike siden",
        "statistics-pages": "Siden",
        "statistics-files": "Triemmen",
        "statistics-edits": "Sidebewurkings sûnt it begjin fan {{SITENAME}}",
        "statistics-edits-average": "Trochstrings tal bewurkings per side",
-       "statistics-views-total": "Totaal oantal werjûne siden",
-       "statistics-views-peredit": "Werjûne siden per bewurking",
        "statistics-users": "Registrearre [[Special:ListUsers|brûkers]]",
        "statistics-users-active": "Aktive brûkers",
        "statistics-users-active-desc": "Brûkers dy't yn 'e ôfrûne {{PLURAL:$1|dei|$1 dagen}} in hanneling útfierd hawwe",
-       "statistics-mostpopular": "Meast besjoene siden",
        "doubleredirects": "Dûbelde synonimen",
        "doubleredirectstext": "<b>Let op!</b> Der kinne missen yn dizze list stean! Dat komt dan ornaris troch oare keppelings ûnder de \"#REDIRECT\". Eltse rigel jout keppelings nei it earste synonym, it twadde synonym en dan it werklike doel.",
        "double-redirect-fixed-move": "[[$1]] is ferplakt en is no in trochferwizing nei [[$2]]",
        "uncategorizedtemplates": "Net-kategorisearre sjabloanen",
        "unusedcategories": "Lege kategoryen",
        "unusedimages": "Lossteande ôfbylden",
-       "popularpages": "Populêre siden",
        "wantedcategories": "Nedige kategoryen",
        "wantedpages": "Nedige siden",
        "wantedfiles": "Net-besteande triemmen mei ferwizings",
        "listusers-creationsort": "Oarderje op dei fan oanmeitsjen",
        "usereditcount": "$1 {{PLURAL:$1|bewurking|bewurkings}}",
        "newpages": "Nije siden",
-       "newpages-username": "Meidoggernamme:",
+       "newpages-username": "Brûkersnamme:",
        "ancientpages": "Alde siden",
        "move": "Werneam",
        "movethispage": "Werneam dizze side",
        "suppress": "Tafersjoch",
        "booksources": "Boekynformaasje",
        "booksources-search-legend": "Boarnen en ynformaasje oer in boek sykje",
-       "booksources-go": "Sykje",
        "booksources-text": "Hjirûnder is in list mei keppelings nei oare websites dy't nije of brûkte boeken ferkeapje en dy't faaks mear ynformaasje hawwe oer it boek dat jo sykje:",
        "booksources-invalid-isbn": "It ynjûne ISBN liket net jildich te wêzen.\nKontrolearje oft jo faaks in flater makke hawwe by de ynfier.",
        "specialloguserlabel": "Meidogger:",
        "noemailtitle": "Gjin e-postadres",
        "noemailtext": "Dizze meidogger hat gjin jildich e-postadres ynsteld, of hat oanjûn gjin post fan oare meidoggers krije te wollen.",
        "nowikiemailtext": "Dizze brûker wol gjin e-mail ûntfange fan oare brûkers.",
+       "emailusername": "Brûkersnamme:",
        "email-legend": "In e-mail ferstjoere nei in oare brûker fan {{SITENAME}}",
        "emailfrom": "Fan:",
        "emailto": "Oan:",
-       "emailsubject": "Oer",
+       "emailsubject": "Ûnderwerp:",
        "emailmessage": "Berjocht:",
        "emailsend": "Stjoer",
        "emailsent": "Berjocht stjoerd",
        "notanarticle": "Dit kin net folge wurde.",
        "watchlist-details": "Jo folchlist hat {{PLURAL:$1|$1 side|$1 siden}}, oerlissiden net meiteld.",
        "wlnote": "Dit {{PLURAL:$1|is de lêste feroaring|binne de lêste '''$1''' feroarings}} yn de lêste {{PLURAL:$2|oer|'''$2''' oeren}}.",
-       "wlshowlast": "Lit feroarings sjen fan de lêste $1 oeren $2 dagen $3",
+       "wlshowlast": "Lit feroarings sjen fan de lêste $1 oeren $2 dagen",
        "watching": "Dwaande mei op'e folchlist te setten ...",
        "unwatching": "Dwaande mei fan'e folchlist ôf te heljen ...",
        "enotif_impersonal_salutation": "meidogger fan {{SITENAME}}",
        "minimum-size": "Min. grutte",
        "maximum-size": "Max. grutte:",
        "pagesize": "(bytes)",
-       "restriction-edit": "Wizigje",
+       "restriction-edit": "Bewurkje",
        "restriction-move": "Werneam",
        "restriction-create": "Oanmeitsje",
        "restriction-upload": "Oanbiede",
        "undelete-search-prefix": "Lit siden sjen dy't begjinne mei:",
        "undelete-search-submit": "Sykje",
        "undelete-no-results": "Gjin oerienkommende siden fûn yn it wisk argyf.",
+       "undelete-show-file-submit": "Ja",
        "namespace": "Nammeromte:",
        "invert": "Seleksje útsein",
        "blanknamespace": "(Haadnammerûmte)",
        "unblocklink": "lit yn",
        "change-blocklink": "blokkade feroarje",
        "contribslink": "bydragen",
+       "emaillink": "e-mail stjoere:",
        "autoblocker": "Jo wiene útsletten om't jo ynternet-adres oerienkomt mei dat fan \"[[User:$1|$1]]\". Foar it útsluten fan dy meidogger waard dizze reden jûn: \"$2\".",
        "blocklogpage": "Utslútloch",
        "blocklogentry": "\"[[$1]]\" útsletten foar $2 $3",
        "allmessagesdefault": "Standerttekst",
        "allmessagescurrent": "Tekst yn de nijste ferzje",
        "allmessagestext": "Dit is in list fan alle systeemberjochten beskikber yn de MediaWiki-nammeromte.\nSjoch: [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation], [//translatewiki.net translatewiki.net].",
+       "allmessages-language": "Taal:",
        "thumbnail-more": "Fergrutsje",
        "filemissing": "Triem net fûn",
        "thumbnail_error": "Flater by it oanmeitsjen fan thumbnail: $1",
        "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-contentpage-yes": "Ja",
+       "pageinfo-protect-cascading-yes": "Ja",
        "markaspatrolleddiff": "Markearje as kontroleare",
        "markaspatrolledtext": "Markearje dizze side as kontrolearre",
        "markedaspatrolled": "Markearre as kontrolearre",
        "noimages": "Neat te sjen.",
        "ilsubmit": "Sykje",
        "bydate": "datum",
+       "seconds": "{{PLURAL:$1|$1 sekonde|$1 sekonden}}",
+       "minutes": "{{PLURAL:$1|$1 minút|$1 minuten}}",
+       "hours": "{{PLURAL:$1|$1 oere|$1 oeren}}",
+       "days": "{{PLURAL:$1|$1 dei|$1 dagen}}",
+       "weeks": "{{PLURAL:$1|$1 wike|$1 wiken}}",
+       "months": "{{PLURAL:$1|$1 moanne|$1 moannen}}",
+       "years": "{{PLURAL:$1|$1 jier|$1 jierren}}",
+       "ago": "$1 lyn",
        "bad_image_list": "De opmaak is as folget:\n\nAllinne rigels fan in list (rigels dy't begjinne mei *) wurde ferwurke. De earste link op in rigel moat in link wêze nei in net winske ôfbylding.\nAlle folgjende links dy't op deselde rigel steane, wurde behannele as útsûndering, lykas bygelyks siden dêr't de ôfbylding yn'e tekst opnommen is.",
        "metadata": "Metadata",
        "metadata-help": "Dizze triem befettet oanfoljende ynformaasje, dy't troch in fotokamera, scanner of fotobewurkingsprogramma tafoege wêze kin. As de triem oanpast is, komme de details mûglik net folslein oerien mei de feroare ôfbylding.",
        "exif-subjectdistancerange-2": "Tichtby",
        "exif-gpsdestdistance-m": "Milen",
        "exif-gpsdestdistance-n": "Seemilen",
-       "watchlistall2": "alles",
        "namespacesall": "alles",
        "monthsall": "alle",
        "confirmemail": "Befêstigjen netpostadres",
        "version-other": "Oare",
        "version-version": "(Ferzje $1)",
        "version-license": "Lisinsje",
+       "version-ext-colheader-version": "Ferzje",
        "version-software": "Ynsteld software",
        "version-software-product": "Produkt",
        "version-software-version": "Ferzje",
        "compare-rev2": "Revyzje 2",
        "compare-submit": "Ferlykje",
        "compare-invalid-title": "Unjildige titel.",
+       "htmlform-no": "Nee",
+       "htmlform-yes": "Ja",
        "revdelete-restricted": "hat beheinings oplein oan behearders",
        "revdelete-unrestricted": "hat beheinings foar behearders goedmakke",
        "rightsnone": "(gjin)",
+       "revdelete-summary": "gearfetting bewurkje",
        "feedback-subject": "Underwerp:",
        "feedback-message": "Berjocht:",
-       "feedback-cancel": "Ofbrekke",
+       "feedback-cancel": "Annulearje",
        "feedback-submit": "Feedback ferstjoere",
        "feedback-close": "Dien",
        "searchsuggest-search": "Sykje",
+       "duration-seconds": "$1 {{PLURAL:$1|sekonde|sekonden}}",
+       "duration-minutes": "$1 {{PLURAL:$1|minút|minuten}}",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|sekonde|sekonden}}",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|sekonde|sekonden}}",
        "expand_templates_ok": "Okee",
-       "expand_templates_remove_comments": "Berjochten fuorthelje"
+       "expand_templates_remove_comments": "Berjochten fuorthelje",
+       "pagelang-language": "Taal"
 }
index 42bf7e9..a269e4a 100644 (file)
        "passwordreset-email": "Seoladh ríomhphoist:",
        "changeemail-none": "(neamhní)",
        "changeemail-password": "D'fhocal faire {{SITENAME}}:",
-       "changeemail-cancel": "Cealaigh",
        "bold_sample": "Cló trom",
        "bold_tip": "Cló trom",
        "italic_sample": "Cló iodálach",
        "uncategorizedtemplates": "Teimpléid gan chatagóir",
        "unusedcategories": "Catagóirí nach n-úsáidtear",
        "unusedimages": "Íomhánna nach n-úsáidtear",
-       "popularpages": "Leathanaigh is mó cuairteanna orthu",
        "wantedcategories": "Catagóirí agus iarraidh ag gabháil leis",
        "wantedpages": "Leathanaigh de dhíth",
        "mostlinked": "Leathanaigh is mó naisc chucu",
        "pager-older-n": "{{PLURAL:$1|1 níos sine|$1 níos sine}}",
        "booksources": "Leabharfhoinsí",
        "booksources-search-legend": "Cuardaigh le foinsí leabhar",
-       "booksources-go": "Gabh",
        "specialloguserlabel": "Úsáideoir:",
        "speciallogtitlelabel": "Teideal:",
        "log": "Logaí",
        "wlheader-enotif": "Cumasaíodh fógraí riomhphoist.",
        "wlheader-showupdated": "Tá '''cló trom''' ar leathanaigh a athraíodh ón uair is deireanaí a d'fhéach tú orthu.",
        "wlnote": "Is {{PLURAL:$1|é seo thíos an t-athrú deireanach|iad seo thíos na '''$1''' athruithe deireanacha}} {{PLURAL:$2|san uair deireanach|sna '''$2''' uaire deireanacha}}.",
-       "wlshowlast": "Líon na n-uair is déanaí le taispeáint: $1. Líon na laethanta is déanaí le taispeáint: $2. Taispeáin $3.",
+       "wlshowlast": "Líon na n-uair is déanaí le taispeáint: $1. Líon na laethanta is déanaí le taispeáint: $2. Taispeáin .",
        "watchlist-options": "Roghanna don liosta faire",
        "watching": "Ag faire...",
        "unwatching": "Á bhaint de do liosta faire...",
        "exif-gpsspeed-n": "Muirmhílte",
        "exif-gpsdirection-t": "Fíorthreo",
        "exif-gpsdirection-m": "Treo maighnéadach",
-       "watchlistall2": "an t-iomlán",
        "namespacesall": "iad uile",
        "monthsall": "gach mí",
        "confirmemail": "Deimhnigh do ríomhsheoladh",
index eca10f7..87835e9 100644 (file)
        "statistics": "İstatistikalar",
        "statistics-header-pages": "Sayfa istatistikaları",
        "statistics-header-edits": "Diişmäkleri istatistikaları",
-       "statistics-header-views": "Resim istatikaları",
        "statistics-header-users": "Kullanıcı istatistikaları",
        "statistics-header-hooks": "Başka istatistakalar",
        "statistics-articles": "Yazılar",
        "statistics-files": "Üklenmiş dosyeler",
        "statistics-edits": "{{SITENAME}} kurulmaa beeri yapmaa sayfa diişmäkleri",
        "statistics-edits-average": "Her yapraktaki diişmäklerin sayısı",
-       "statistics-views-total": "Hepsi resimlär",
-       "statistics-views-total-desc": "Var nica olmadı hem maasus yapraklarından resim eklenmee",
-       "statistics-views-peredit": "Diişmäk başına resimlär",
        "statistics-users": "Registratlı [[Special:ListUsers|kullanıcılar]]",
        "statistics-users-active": "Aktivli kullanıcılar",
        "statistics-users-active-desc": "Bitki {{PLURAL:$1|gün|$1 günde}} çalışmaa yapmaa kullanıcılar",
-       "statistics-mostpopular": "En anılmış yazılar",
        "doubleredirects": "İki kerä yönnendirmeler",
        "brokenredirects": "Var olmayan yazıya yapılmış yönnendirmeler",
        "withoutinterwiki": "Başka dillerä baalantısı olmayan sayfalar",
        "pager-older-n": "{{PLURAL:$1|1 taa eski|$1 taa eski}}",
        "booksources": "Kaynak kiyatlar",
        "booksources-search-legend": "Kiyat kaynaklarını aara",
-       "booksources-go": "Git",
        "specialloguserlabel": "Kullanıcı:",
        "speciallogtitlelabel": "Yazı adı:",
        "log": "Jurnallar",
        "watchthispage": "Bak bu sayfaya",
        "unwatch": "Durgun sayfa izlemää",
        "watchlist-details": "Diil konuşmaa sayfaları {{PLURAL:$1|$1 sayfa|$1 sayfa}} bakmaa listanızda.",
-       "wlshowlast": "Bitki $1 saati $2 günü göster $3",
+       "wlshowlast": "Bitki $1 saati $2 günü göster",
        "watchlist-options": "İzlemäk listası opţiyaları",
        "watching": "Bakılêr...",
        "unwatching": "Durgundurulêr...",
        "metadata-expand": "Detalları göster",
        "metadata-collapse": "Detalları gösterme",
        "metadata-fields": "Bu listadaki meta bilgilerin eri, resim sayfasında sormadan gösterilecek, übürleri saklanacêk.\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",
-       "watchlistall2": "Hepsini göster",
        "namespacesall": "Hepsi",
        "monthsall": "hepsi",
        "watchlisttools-view": "İlgili diişmäkleri göster",
index 5c67aa4..8cfff81 100644 (file)
@@ -14,7 +14,8 @@
                        "아라",
                        "Mywood",
                        "Duolaimi",
-                       "Impersonator 1"
+                       "Impersonator 1",
+                       "Babanwalia"
                ]
        },
        "tog-underline": "下划链接",
        "qbedit": "编写",
        "qbpageoptions": "个页",
        "qbmyoptions": "偶𠮶选项",
-       "faq": "FAQ",
+       "faq": "ਆਮ ਸੁਆਲ਼",
        "faqpage": "Project:问得蛮多𠮶问题",
        "actions": "动作",
        "namespaces": "空间名",
        "searchrelated": "相关",
        "searchall": "所有",
        "showingresults": "底下从第<b>$2</b>条显示起先𠮶<b>$1</b>条结果:",
-       "showingresultsheader": "'''$4'''𠮶{{PLURAL:$5|第'''$1'''到第'''$3'''只结果|第'''$1 - $2'''只,拢共'''$3'''只结果}}",
        "search-nonefound": "冇合到𠮶查询结果。",
        "powersearch-legend": "高级搜寻",
        "powersearch-ns": "到名子空间里头寻:",
        "statistics": "数据",
        "statistics-header-pages": "页面数据",
        "statistics-header-edits": "编辑数据",
-       "statistics-header-views": "查看数据",
        "statistics-header-users": "用户数据",
        "statistics-header-hooks": "别𠮶数据",
        "statistics-articles": "内容页",
        "statistics-files": "上载正𠮶档案",
        "statistics-edits": "自从{{SITENAME}}设定𠮶页面编辑数",
        "statistics-edits-average": "每页𠮶平均编辑数",
-       "statistics-views-total": "查看𠮶统共数",
-       "statistics-views-peredit": "每到编辑查看数",
        "statistics-users": "注册过𠮶[[Special:ListUsers|用户]]",
        "statistics-users-active": "活跃用户",
        "statistics-users-active-desc": "头$1日操作过𠮶用户",
-       "statistics-mostpopular": "眵𠮶人最多𠮶页面",
        "doubleredirects": "双重重定向",
        "doubleredirectstext": "底下𠮶重定向链接到别只重定向页面:",
        "double-redirect-fixed-move": "[[$1]]拕移动正,佢个下拕重定向到[[$2]]。",
        "uncategorizedtemplates": "冇归类𠮶模版",
        "unusedcategories": "冇使用𠮶分类",
        "unusedimages": "冇使用𠮶图像",
-       "popularpages": "热门页面",
        "wantedcategories": "等撰𠮶分类",
        "wantedpages": "等撰𠮶页面",
        "mostlinked": "最多链接𠮶页面",
        "pager-older-n": "{{PLURAL:$1|更旧𠮶 1|更旧𠮶 $1}}",
        "booksources": "书籍来源",
        "booksources-search-legend": "寻吖书籍来源",
-       "booksources-go": "跳到",
        "booksources-text": "底下系一部分网络书店𠮶链接列表,可以提供到倷要找𠮶书籍𠮶更多资料:",
        "specialloguserlabel": "用户:",
        "speciallogtitlelabel": "标题:",
        "wlheader-enotif": "启动嘞email通知功能。",
        "wlheader-showupdated": "上回倷眵𠮶页面改动𠮶部分用'''粗体'''显到",
        "wlnote": "下底系最近'''$2'''钟头内𠮶最晏'''$1'''道修改:",
-       "wlshowlast": "显示近来$1钟头$2日$3𠮶改动",
+       "wlshowlast": "显示近来$1钟头$2日𠮶改动",
        "watchlist-options": "监视清单选项",
        "watching": "眏到...",
        "unwatching": "莫眏到...",
        "exif-gpsspeed-n": "海浬每小时(节)",
        "exif-gpsdirection-t": "真实方位",
        "exif-gpsdirection-m": "地磁方位",
-       "watchlistall2": "全部",
        "namespacesall": "全部",
        "monthsall": "全部",
        "confirmemail": "确认email地址",
index 8e2a350..6203e9d 100644 (file)
        "searchrelated": "相關",
        "searchall": "所有",
        "showingresults": "底下從第<b>$2</b>條顯示起先嗰<b>$1</b>條結果:",
-       "showingresultsheader": "'''$4'''嗰{{PLURAL:$5|第'''$1'''到第'''$3'''隻結果|第'''$1 - $2'''隻,攏共'''$3'''隻結果}}",
        "search-nonefound": "冇合到嗰查詢結果。",
        "powersearch-legend": "高級搜尋",
        "powersearch-ns": "到名子空間裡頭尋:",
        "statistics": "數據",
        "statistics-header-pages": "頁面數據",
        "statistics-header-edits": "編輯數據",
-       "statistics-header-views": "查看數據",
        "statistics-header-users": "用戶數據",
        "statistics-header-hooks": "別嗰數據",
        "statistics-articles": "內容頁",
        "statistics-files": "上載正嗰檔案",
        "statistics-edits": "自從{{SITENAME}}設定嗰頁面編輯數",
        "statistics-edits-average": "每頁嗰平均編輯數",
-       "statistics-views-total": "查看嗰統共數",
-       "statistics-views-peredit": "每到編輯查看數",
        "statistics-users": "註冊過嗰[[Special:ListUsers|用戶]]",
        "statistics-users-active": "活躍用戶",
        "statistics-users-active-desc": "頭$1日操作過嗰用戶",
-       "statistics-mostpopular": "眵嗰人頂多嗰頁面",
        "doubleredirects": "雙重重定向頁面",
        "doubleredirectstext": "底下嗰重定向連結到別隻重定向頁面:",
        "double-redirect-fixed-move": "[[$1]]拕移動正,佢箇下拕重定向到[[$2]]。",
        "uncategorizedtemplates": "冇歸類嗰模板",
        "unusedcategories": "冇使用嗰分類",
        "unusedimages": "冇使用嗰圖像",
-       "popularpages": "熱門頁面",
        "wantedcategories": "等撰嗰分類",
        "wantedpages": "等撰嗰頁面",
        "mostlinked": "頂多連結嗰頁面",
        "pager-older-n": "先$1次",
        "booksources": "書籍來源",
        "booksources-search-legend": "尋下書籍來源",
-       "booksources-go": "跳到",
        "booksources-text": "底下係一部分網絡書店嗰連結列表,可以提供到倷要找嗰書籍嗰更多資料:",
        "specialloguserlabel": "用戶:",
        "speciallogtitlelabel": "標題:",
        "wlheader-enotif": "啟動哩email通知功能。",
        "wlheader-showupdated": "上回倷眵嗰頁面改動嗰部分用'''粗體'''顯到",
        "wlnote": "下底係最近'''$2'''鐘頭內嗰最晏'''$1'''道修改:",
-       "wlshowlast": "顯示箇日子$1鐘頭$2日$3嗰改動",
+       "wlshowlast": "顯示箇日子$1鐘頭$2日嗰改動",
        "watchlist-options": "監視清單選項",
        "watching": "眏到...",
        "unwatching": "莫眏到...",
        "exif-gpsspeed-n": "海浬每小時(節)",
        "exif-gpsdirection-t": "真實方位",
        "exif-gpsdirection-m": "地磁方位",
-       "watchlistall2": "全部",
        "namespacesall": "全部",
        "monthsall": "全部",
        "confirmemail": "確認email地址",
index cd72433..503770b 100644 (file)
@@ -25,6 +25,7 @@
        "tog-watchdefault": "Cuir duilleagan a dheasaicheas mi air a' chlàr-fhaire agam",
        "tog-watchmoves": "Cuir duilleagan a ghluaiseas mi air a' chlàr-fhaire agam",
        "tog-watchdeletion": "Cuir duilleagan a sguabas mi às air a' chlàr-fhaire agam",
+       "tog-watchrollback": "Cuir duilleagan air an do rinn mi roladh air ais air a' chlàr-fhaire agam",
        "tog-minordefault": "Comharraich gach mùthadh mar mhùthadh beag a ghnàth",
        "tog-previewontop": "Nochd an ro-shealladh os cionn a' bhogsa deasachaidh",
        "tog-previewonfirst": "Nochd an ro-shealladh nuair a nithear a' chiad deasachadh",
        "otherlanguages": "Ann an cànain eile",
        "redirectedfrom": "(Air ath-sheòladh o $1)",
        "redirectpagesub": "Ath-sheòl an duilleag",
+       "redirectto": "Dèan ath-stiùireadh gu:",
        "lastmodifiedat": "Chaidh an duilleag seo a mhùthadh $1 aig $2 turas mu dheireadh.",
        "viewcount": "Chaidh inntrigeadh a dhèanamh dhan duilleag seo $1 {{PLURAL:$1|turas|thuras|tursan|turas}}.",
        "protectedpage": "Duilleag fo dhìon",
        "hidetoc": "falaich",
        "collapsible-collapse": "Co-theannaich",
        "collapsible-expand": "Leudaich",
+       "confirmable-confirm": "A bheil {{GENDER:$1|thu}} cinnteach?",
+       "confirmable-yes": "Tha",
+       "confirmable-no": "Chan eil",
        "thisisdeleted": "A bheil thu airson $1 a shealltainn no aiseag?",
        "viewdeleted": "A bheil thu airson $1 a shealltainn?",
        "restorelink": "$1 {{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}} a chaidh a sguabadh às",
        "invalidtitle-knownnamespace": "Tiotal mì-dhligheach leis an ainm-spàs \"$2\" agus an teacsa \"$3\"",
        "invalidtitle-unknownnamespace": "Tiotal mì-dhligheach leis an àireamh ainm-spàis $1 agus an teacsa \"$2\"",
        "exception-nologin": "Chan eil thu air logadh a-steach",
-       "exception-nologin-text": "Feumaidh tu [[Special:Userlogin|logadh a-steach]] mus fhaic thu an duilleag seo no mus urrainn dhut seo a dhèanamh.",
+       "exception-nologin-text": "Dèan logadh a-steach gus cothrom fhaighinn air an duilleag no air a' ghnìomh seo.",
        "exception-nologin-text-manual": "Ma tha thu ag iarraidh cothrom air an duilleag no air a' ghnìomh seo, $1.",
        "virus-badscanner": "Droch cho-dhealbhachd: sganair bhìorasan neo-aithnichte: <em>$1</em>",
        "virus-scanfailed": "dh'fhàillig an sganadh (còd $1)",
        "createaccount-text": "Chruthaich cuideigin cunntas airson a' phost-d agad air {{SITENAME}} ($4) air a bheil \"$2\", leis an fhacal-fhaire \"$3\".\nBu chòir dhut logadh a-steach agus am facal-faire agad atharrachadh gu h-ìosal an-dràsta.\n\n'S urrainn dhut an teachdaireachd seo a leigeil seachad ma chaidh an cunntas a chruthachadh air mhearachd.",
        "login-throttled": "Dh'fheuch thu ri logadh a-steach ro thric o chionn ghoirid.\nFuirich ort $1 mus feuch thu ris a-rithist.",
        "login-abort-generic": "Cha do shoirbhich leat leis an logadh a-steach - Chaidh sgur dheth",
+       "login-migrated-generic": "Chaidh an cunntas agad imrich 's chan eil an t-ainm cleachdaiche agad ann tuilleadh air an uicidh seo.",
        "loginlanguagelabel": "Cànan: $1",
        "suspicious-userlogout": "Chaidh d' iarrtas airson logadh a-mach a dhiùltadh a chionn 's gu bheil coltas gun deach a chur le brabhsair briste no le progsaidh tasglannaidh.",
        "createacct-another-realname-tip": "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 dha na h-ùghdaran airson an cuid obrach.",
        "passwordreset-emailsent-capture": "Chaidh post-d a chum ath-shuidheachadh an fhacail-fhaire a chur agus chì thu sin gu h-ìosal.",
        "passwordreset-emailerror-capture": "Chaidh post-d a chum ath-shuidheachadh an fhacail-fhaire a ghintinn agus chì thu sin gu h-ìosal ach cha b' urrainn dhuinn a chur dhan chleachdaiche: $1",
        "changeemail": "Atharraich am post-d",
-       "changeemail-header": "Atharraich cunntas a' phuist-d",
        "changeemail-text": "Lìon am foirm seo gus am post-d agad atharrachadh. Feumaidh tu am facal-faire agad a chur a-steach a-rithist gus a dhearbhadh.",
        "changeemail-no-info": "Feumaidh tu logadh a-steach mus dèan thu inntrigeadh dìreach dhan duilleag seo.",
        "changeemail-oldemail": "An seòladh puist-d làithreach:",
        "changeemail-none": "(chan eil gin)",
        "changeemail-password": "Am facal-faire agad air {{SITENAME}}:",
        "changeemail-submit": "Atharraich am post-d",
-       "changeemail-cancel": "Sguir dheth",
        "changeemail-throttled": "Dh'fheuch thu ri logadh a-steach ro thric.\nFuirich ort $1 mus feuch thu ris a-rithist.",
        "resettokens": "Ath-shuidhich na tòcanan",
        "resettokens-text": "'S urrainn dhut tòcanan ath-shuidheachadh a bheir cothrom dhut air cuid a dhàta prìobhaideach a tha co-cheangailte ris a' chunntas agad.\n\nBu chòir dhut seo a dhèanamh ma thug thu do chuideigin e air mhearachd no ma bhris cuideigin a-steach air a' chunntas agad.",
        "preview": "Ro-shealladh",
        "showpreview": "Seall an ro-shealladh",
        "showdiff": "Seall na mùthaidhean",
-       "anoneditwarning": "<strong>Rabhadh:</strong> Chan eil thu air logadh a-steach.\nThèid an seòladh IP agad a chlàradh ann an eachdraidh na duilleige seo.",
+       "blankarticle": "<strong>Rabhadh:</strong> Tha an duilleag a tha thu a' cruthachadh bàn.\nMa nì thu briogadh air \"{{int:savearticle}}\" a-rithist, thèid an duilleag a chruthachadh gun susbaint sam bith 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.",
        "missingcommenttext": "Cuir a-steach beachd gu h-ìosal.",
        "parser-template-recursion-depth-warning": "Chaidh thu thairis air crìoch doimhne nan ath-chùrsaidhean teamplaid ($1)",
        "language-converter-depth-warning": "Chaidh thu thairis air crìoch doimhne an iompachair chànain ($1)",
        "node-count-exceeded-category": "Duilleagan far an deachas thairis air cunntas nan nòdan",
-       "node-count-exceeded-category-desc": "Roinn-seòrsa airson duilleagan far a bheilear thairis air crìoch nan nòdan.",
-       "node-count-exceeded-warning": "Chaidh an duilleag thairis air cunntas nan nòdan",
+       "node-count-exceeded-category-desc": "Tha barrachd nòdan san duilleag na tha ceadaichte.",
+       "node-count-exceeded-warning": "Bha barrachd nòdan san duilleag na tha ceadaichte.",
        "expansion-depth-exceeded-category": "Duilleagan far an deachas thairis air a' chrìoch leudachaidh",
-       "expansion-depth-exceeded-category-desc": "Seo roinn-seòrsa airson duilleagan far a bheilear thairis air doimhne an leudachaidh.",
-       "expansion-depth-exceeded-warning": "Chaidh an duilleag thairis air an doimhne leudachaidh",
+       "expansion-depth-exceeded-category-desc": "Tha an leudachadh san duilleag nas doimhne na tha ceadaichte.",
+       "expansion-depth-exceeded-warning": "Bha an leudachadh san duilleag na bu dhoimhne na tha ceadaichte",
        "parser-unstrip-loop-warning": "Mhothaich sinn do lùb unstrip",
        "parser-unstrip-recursion-limit": "Chaidheas thairis air crìoch unstrip recursion ($1)",
        "converter-manual-rule-error": "Mhothaich sinn do mhearachd san riaghailt iompachadh làimhe airson cànan",
        "rev-deleted-event": "(chaidh gnìomh 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].",
        "rev-deleted-text-unhide": "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].\n'S urrainn dhut [$1 am mùthadh seo fhaicinn fhathast] ma tha thu airson leantainn air adhart.",
        "rev-suppressed-text-unhide": "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].\n'S urrainn dhut [$1 am mùthadh seo fhaicinn fhathast] ma tha thu airson leantainn air adhart.",
        "rev-deleted-text-view": "Chaidh mùthadh na duilleige seo <strong>a sguabadh às</strong>.\n'S urrainn dhut coimhead air, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
        "revdelete-text-text": "Nochdaidh mùthaidhean a chaidh a sguabadh às ann an eachdraidh na duilleige fhathast ach chan fhaic buill a' phobaill cuid dhen t-susbaint aca.",
        "revdelete-text-file": "Nochdaidh tionndaidhean dhen fhaidhle a chaidh a sguabadh às ann an eachdraidh na duilleige fhathast ach chan fhaic buill a' phobaill cuid dhen t-susbaint aca.",
        "logdelete-text": "Nochdaidh tachartasan san loga a chaidh a sguabadh às ann an eachdraidh na duilleige fhathast ach chan fhaic buill a' phobaill cuid dhen t-susbaint aca.",
-       "revdelete-text-others": "Gheibh rianairean eile air {{SITENAME}} cothrom air an t-susbaint fhalaichte fhathast agus is urrainn dhaibh an sguabadh às a neo-dhèanamh san dearbh eadar-aghaidh mur an deach cuingeachaidhean a bharrachd a chur orra.",
+       "revdelete-text-others": "Gheibh rianairean eile cothrom air an t-susbaint fhalaichte fhathast agus is urrainn dhaibh an sguabadh às a neo-dhèanamh mur an deach cuingeachaidhean a bharrachd a chur orra.",
        "revdelete-confirm": "Dearbhaich gu bheil thu airson seo a dhèanamh, gu bheil thu a' tuigsinn na thachras ri linn agus gu bheil thu a' dèanamh seo a-rèir [[{{MediaWiki:Policy-url}}|a' phoileasaidh]].",
        "revdelete-suppress-text": "Cha bu chòir dhut mùchadh a chleachdadh <strong>ach</strong> ann an suidheachaidhean mar seo:\n* Fiosrachadh a dh'fhaodadh a bhith dìteachail\n* Fiosrachadh pearsanta a tha cearr\n*: <em>seòladh taighe, àireamhan fòn, àireamhan NI is msaa.</em>",
        "revdelete-legend": "Suidhich cuingeachaidhean na faicsinneachd",
        "mergehistory-reason": "Adhbhar:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Loga a' cho-aonaidh",
-       "pagemerge-logentry": "chaidh [[$1]] a cho-aonadh dha [[$2]] (mùthaidhean suas ri $3)",
        "revertmerge": "Dì-aonaich",
        "mergelogpagetext": "Chì thu liosta nan co-aonaidhean as ùire eadar eachdraidh dhuilleagan gu h-ìosail.",
        "history-title": "Eachdraidh nam mùthaidhean aig \"$1\"",
        "searchall": "a h-uile",
        "showingresults": "A' sealltainn suas ri <strong>$1</strong> {{PLURAL:$1|toradh|thoradh|toraidhean|toradh}} gu h-ìosal a' tòiseachadh le àireamh <strong>$2</strong>.",
        "showingresultsinrange": "A' sealltainn suas ri <strong>$1</strong> {{PLURAL:$1|toradh|thoradh|toraidhean|toradh}} san rainse eadar àireamh <strong>$2</strong> is <strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Toradh <strong>$1</strong> à <strong>$3</strong>|Toraidhean <strong>$1 - $2</strong> à <strong>$3</strong>}} airson <strong>$4</strong>",
+       "search-showingresults": "{{PLURAL:$4|Toradh <strong>$1</strong> à <strong>$3</strong>|Toraidhean <strong>$1 - $2</strong> à <strong>$3</strong>|Toraidhean <strong>$1 - $2</strong> à <strong>$3</strong>|Toraidhean <strong>$1 - $2</strong> à <strong>$3</strong>}}",
        "search-nonefound": "Cha do fhreagair toradh sam bith ri d' iarrtas.",
        "powersearch-legend": "Rannsachadh adhartach",
        "powersearch-ns": "Lorg ann an ainm-spàsan:",
        "preferences": "Roghainnean",
        "mypreferences": "Na roghainnean agam",
        "prefs-edits": "Co mheud deasachadh:",
-       "prefsnologintext2": "Ma tha thu airson na roghainnean agad atharrachadh, $1.",
+       "prefsnologintext2": "Log a-steach gus na roghainnean agad atharrachadh.",
        "prefs-skin": "Bian",
        "skin-preview": "Ro-shealladh",
        "datedefault": "Gun roghainnean",
        "prefs-tokenwatchlist": "Tòcan",
        "prefs-diffs": "Diofaran",
        "prefs-help-prefershttps": "Thèid an roghainn seo a chur an sàs an ath thuras a nì thu logadh a-steach.",
+       "prefswarning-warning": "Rinn thu atharrachadh air na roghainnean agad nach deach a shàbhaladh fhathast.\nCha tèid na roghainnean agad ùrachadh ma dh'fhàgas tu an duilleag seo gun bhriogadh air \"$1\".",
        "prefs-tabs-navigation-hint": "Gliocas: 'S urrainn dhut na h-iuchraichean saighde chlì 's dheas a chleachdadh gus leum a ghearradh o thaba gu taba air liosta nan taba.",
        "email-address-validity-valid": "Tha coltas gu bheil am post-d dligheach",
        "email-address-validity-invalid": "Cuir a-steach post-d dligheach",
        "right-deletedtext": "Cead teacsa 's atharraichean eadar mùthaidhean air an sguabadh às a shealltainn",
        "right-browsearchive": "Cead lorg sna duilleagan air an sguabadh às",
        "right-undelete": "Cead duilleagan air an sguabadh às aiseag",
-       "right-suppressrevision": "Cead sùil a thoirt air mùthaidhean a chaidh a sguabadh às 's am falach o na rianairean 's an aiseag",
+       "right-suppressrevision": "Seall, falaich 's neo-fhalaich mùthaidhean sònraichte de dhuilleagan o chleachdaiche sam bith",
+       "right-viewsuppressed": "Seall na mùthaidhean a tha falaichte o chleachdaiche sam bith",
        "right-suppressionlog": "Cead logaichean prìobhaideach a shealltainn",
        "right-block": "Cead càch a bhacadh o dheasachadh",
        "right-blockemail": "Cead cleachdaiche a bhacadh o chur phost-d",
        "recentchanges-legend-heading": "'''Treòir:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (faic [[Special:NewPages|liosta nan duilleagan ùra]] cuideachd)",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
-       "rcnotefrom": "Gheibhear na mùthaidhean a-mach o <strong>$2</strong> (gu ruige <strong>$1</strong>) gu h-ìosal.",
+       "rcnotefrom": "Chì thu {{PLURAL:$5|am mùthadh|na mùthaidhean|na mùthaidhean|na mùthaidhean}} o <strong>$3 $4</strong> (gu ruige <strong>$1</strong> dhiubh) gu h-ìosal.",
        "rclistfrom": "Seall na mùthaidhean ùra a-mach o $3 $2",
        "rcshowhideminor": "$1 mùthaidhean beaga",
        "rcshowhideminor-show": "Seall",
        "license": "Ceadachadh:",
        "license-header": "Ceadachadh",
        "nolicense": "Cha deach gin a thaghadh",
+       "licenses-edit": "Deasaich roghainnean a' cheadachais",
        "license-nopreview": "(Chan eil ro-shealladh ri làimh)",
-       "upload_source_url": "(URL dligheach a ghabhas inntrigeadh gu poblach)",
-       "upload_source_file": "(faidhle air a' choimpiutair agad)",
+       "upload_source_url": "(am faidhle a thagh thu o URL dligheach a ghabhas inntrigeadh gu poblach)",
+       "upload_source_file": "(am faidhle a thagh thu air a' choimpiutair agad)",
+       "listfiles-delete": "sguab às",
        "listfiles-summary": "Seallaidh an duilleag shònraichte seo gach faidhle a chaidh a luchdadh suas.",
        "listfiles_search_for": "Lorg airson ainm a' mheadhain:",
        "imgfile": "faidhle",
        "randomincategory": "Duilleag air thuaiream san roinn-seòrsa",
        "randomincategory-invalidcategory": "Chan e \"$1\" 'na ainm roinn-seòrsa dligheach.",
        "randomincategory-nopages": "Chan eil duilleag san roinn-seòrsa [[:Category:$1|$1]].",
-       "randomincategory-selectcategory": "Faigh duilleag air thuaiream a tha san roinn-seòrsa: $1 $2.",
-       "randomincategory-selectcategory-submit": "Siuthad",
+       "randomincategory-category": "Roinn-seòrsa:",
+       "randomincategory-legend": "Duilleag air thuaiream san roinn-seòrsa",
        "randomredirect": "Ath-stiùireadh air thuaiream",
        "randomredirect-nopages": "Chan eil ath-stiùireadh san ainm-spàs \"$1\".",
        "statistics": "Stadastaireachd",
        "statistics-header-pages": "Stadastaireachd nan duilleagan",
        "statistics-header-edits": "Deasaich an stadastaireachd",
-       "statistics-header-views": "Seall an stadastaireachd",
        "statistics-header-users": "Stadastaireachd a' chleachdaiche",
        "statistics-header-hooks": "Stadastaireachd eile",
        "statistics-articles": "Duilleagan susbainte",
        "statistics-files": "Faidhlichean a chaidh a luchdadh suas",
        "statistics-edits": "Deasachaidhean air duilleagan on a chaidh {{SITENAME}} a stèidheachadh",
        "statistics-edits-average": "Deasachaidhean cuibheasach air duilleag",
-       "statistics-views-total": "Seallaidhean iomlan",
-       "statistics-views-total-desc": "Chan fhaic thu na seallaidhean air duilleagan nach eil ann no air duilleag shònraichte",
-       "statistics-views-peredit": "Seallaidhean air gach deasachadh",
        "statistics-users": "[[Special:ListUsers|Cleachdaichean]] clàraichte",
        "statistics-users-active": "Cleachdaichean gnìomhach",
        "statistics-users-active-desc": "Cleachdaichean a rinn gnìomh rè {{PLURAL:$1|an $1 latha|an $1 latha|nan $1 làithean|an $1 latha}} mu dheireadh",
-       "statistics-mostpopular": "Na duilleagan air an deach sealltainn as trice",
        "pageswithprop": "Duilleagan le buadh duilleige",
        "pageswithprop-legend": "Duilleagan le buadh duilleige",
        "pageswithprop-text": "Seallaidh an duilleag seo duilleagan dhut air a bheil buadh duilleige shònraichte.",
        "uncategorizedtemplates": "Teamplaidean gun roinn-seòrsa",
        "unusedcategories": "Roinnean-seòrsa gun chleachdadh",
        "unusedimages": "Faidhlichean gun chleachdadh",
-       "popularpages": "Duilleagan air a bheil fèill mhòr",
        "wantedcategories": "Roinnean-seòrsa a thathar 'gan iarraidh",
        "wantedpages": "Duilleagan a thathar 'gan iarraidh",
        "wantedpages-badtitle": "Tha tiotal mì-dhligheach am measg nan toraidhean: $1",
        "wantedfiles": "Faidhlichean a thathar 'gan iarraidh",
        "wantedfiletext-cat": "Tha na faidhlichean a leanas 'gan cleachdadh ach chan eil iad ann. Dh'fhaoidte gum bi faidhlichean o ionadan-tasgaidh cèine 'gan sealltainn an-seo ged a tha iad ann. Bidh <del>loidhne tro</del> na toraidhean a bharrachd seo. A bharrachd air sin, chì thu na duilleagan sa bhios faidhlichean nach eil ann leabaichte air [[:$1]].",
+       "wantedfiletext-cat-noforeign": "Tha na faidhlichean a leanas 'gan cleachdadh ach chan eil iad ann. A bharrachd air sin, chì thu na duilleagan le faidhlichean leabaichte nach eil ann air [[:$1]].",
        "wantedfiletext-nocat": "Tha na faidhlichean a leanas 'gan cleachdadh ach chan eil iad ann. Dh'fhaoidte gum bi faidhlichean o ionadan-tasgaidh cèine 'gan sealltainn an-seo ged a tha iad ann. Bidh <del>loidhne tro</del> na toraidhean a bharrachd seo.",
+       "wantedfiletext-nocat-noforeign": "Tha na faidhlichean a leanas 'gan cleachdadh ach chan eil iad ann.",
        "wantedtemplates": "Teamplaidean a thathar 'gan iarraidh",
        "mostlinked": "Na duilleagan ris a bheil an àireamh as motha de cheanglaichean",
        "mostlinkedcategories": "Na roinnean-seòrsa ris a bheil an àireamh as motha de cheanglaichean",
        "booksources": "Tùsan a tha 'nan leabhraichean",
        "booksources-search-legend": "Lorg tùsan a tha 'nan leabhraichean",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Siuthad",
        "booksources-text": "Chì thu liosta dhe cheanglaichean gu làraichean eile a reiceas leabhraichean ùra 's cleachdte gu h-ìosal 's ma dh'fhaoidte gum faigh thu barrachd fiosrachaidh orra mu leabhraichean a tha thu a' sireadh:",
        "booksources-invalid-isbn": "Tha coltas mì-dhligheach air an ISBN a chaidh a thoirt seachad; dearbhaich gun deach lethbhreac a dhèanamh dheth on tùs gun mhearachd.",
        "specialloguserlabel": "Cò rinn e:",
        "noindex-category-desc": "Cha dèid an duilleag seo a chur ris an inneacs luirg le botaichean on a tha am facal draoidheach <code><nowiki>__NOINDEX__</nowiki></code> air 's a tha i ann an ainm-spàs far a bheil a' bhratach seo ceadaichte.",
        "index-category-desc": "Tha <code><nowiki>__INDEX__</nowiki></code> air an duilleag seo ('s tha i ann an ainm-spàs far a bheil a' bhratach seo ceadaichte) 's mar sin thèid a chur ri inneacsan luirg le botaichean ged nach tachradh seo gu h-àbhaisteach.",
        "post-expand-template-inclusion-category-desc": "Bhiodh an duilleag nas motha na <code>$wgMaxArticleSize</code> às dèidh a h-uile teamplaid a leudachadh 's mar sin cha deach a h-uile teamplaid a leudachadh.",
-       "post-expand-template-argument-category-desc": "Bidh an duilleag nas motha na  <code>$wgMaxArticleSize</code> às dèidh argamaid teamplaid a leudachadh (rudeigin eadar camagan dualach trìoblaichte, can <code>{{{Foo}}}</code>).",
-       "expensive-parserfunction-category-desc": "Tha cus foincseanan cosgail a' pharsair (can <code>#ifexist</code>) am broinn duilleige. Faic [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
-       "broken-file-category-desc": "Thèid an roinn-seòrsa seo a chur ris nuair a bhios ceangal gu faidhle briste am broinn na duilleige (ceangal gus faidhle a leabachadh mur eil am faidhle ann).",
-       "hidden-category-category-desc": "Seo ronn-seòrsa le <code><nowiki>__HIDDENCAT__</nowiki></code> oirre ach nach nochd i ann am bogsa nan ceanglaichean gu roinnean-seòrsa air na duilleagan o thùs.",
+       "post-expand-template-argument-category-desc": "Bidh an duilleag nas motha na <code>$wgMaxArticleSize</code> às dèidh argamaid teamplaid a leudachadh (rudeigin eadar camagan dualach trìoblaichte, can <code>{{{Foo}}}</code>).",
+       "expensive-parserfunction-category-desc": "Tha cus foincseanan cosgail a' pharsair (can <code>#ifexist</code>) am broinn na duilleige. Faic [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Tha ceangal gu faidhle briste am broinn na duilleige (ceangal gus faidhle a leabachadh fad 's nach eil am faidhle ann).",
+       "hidden-category-category-desc": "Seo roinn-seòrsa le <code><nowiki>__HIDDENCAT__</nowiki></code> 'na susbaint ach nach nochd i ann am bogsa nan ceanglaichean gu roinnean-seòrsa air na duilleagan o thùs.",
        "trackingcategories-nodesc": "Chan eil tuairisgeul ri làimh.",
        "trackingcategories-disabled": "Tha an roinn-seòrsa à comas",
        "mailnologin": "Gun seòladh an t-seòladair",
        "mywatchlist": "An clàr-faire",
        "watchlistfor2": "aig $1 $2",
        "nowatchlist": "Chan eil rud sam bith air a' chlàr-fhaire agad.",
-       "watchlistanontext": "$1 gus nithean air a' chlàr-fhaire agad a shealltainn no a dheasachadh.",
+       "watchlistanontext": "Log a-steach gus nithean air a' chlàr-fhaire agad a shealltainn no a dheasachadh.",
        "watchnologin": "Chan eil thu air logadh a-steach",
        "addwatch": "Cuir air a' chlàr-fhaire",
        "addedwatchtext": "Chaidh an duilleag \"[[:$1]]\" a chur ris a' [[Special:Watchlist|chlàr-fhaire]] agad.\nNochdaidh mùthaidhean a nithear air an duilleag seo 's air an duilleag deasbaireachd a tha co-cheangailte ris an-seo san àm ri teachd.",
        "watchlist-details": "Tha {{PLURAL:$1|$1 duilleag|$1 dhuilleag|$1 duilleagan|$1 duilleag}} air a' chlàr-fhaire agad, gun luaidh air na duilleagan deasbaireachd.",
        "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": "Seo {{PLURAL:$1|an $1 mhùthadh|$1 mhùthadh|na $1 mùthaidhean|$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",
+       "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",
        "watchlist-options": "Roghainnean mo chlàir-faire",
        "watching": "'Ga chur air a' chlàr-fhaire...",
        "unwatching": "A' toirt far a' chlàir-fhaire...",
        "delete-edit-reasonlist": "Deasaich adhbharan sguabadh às",
        "delete-toobig": "Tha eachdraidh deasachaidh mòr aig an duilleag seo sa bheil barrachd air $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}.\nChaidh sguabadh às nan duilleagan dhen leithid a chuingeachadh ach na dèid cron a dhèanamh air {{SITENAME}} le mearachd.",
        "delete-warning-toobig": "Tha eachdraidh deasachaidh mòr aig an duilleag seo sa bheil barrachd air $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}.\nMa sguabas tu às dhi, dh'fhaoidte gun dèan thu cron air na gnìomhan stòr-dàta aig {{SITENAME}}; mar sin, thoir an aire.",
+       "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",
        "protect-othertime": "Àm eile:",
        "protect-othertime-op": "àm eile",
        "protect-existing-expiry": "Falbhaidh an ùine air mar-thà: $2 $3",
+       "protect-existing-expiry-infinity": "Chan fhalbh an ùine air gu buan mar-thà",
        "protect-otherreason": "Adhbhar eile/a bharrachd:",
        "protect-otherreason-op": "Adhbhar eile",
        "protect-dropdown": "*Na h-adhbharan dìona as cumanta\n** Cus bhandalachd\n** Cus spama\n** Còmhstrithean deasachaidh nach eil torrach\n** Duilleag air a bheil trafaig mhòr",
        "unblocked": "Chaidh [[User:$1|$1]] a neo-bhacadh.",
        "unblocked-range": "Chaidh $1 a neo-bhacadh.",
        "unblocked-id": "Chaidh am bacadh $1 a thoirt air falbh.",
+       "unblocked-ip": "Chaidh [[Special:Contributions/$1|$1]] a neo-bhacadh.",
        "blocklist": "Cleachdaichean a chaidh a bhacadh",
        "ipblocklist": "Cleachdaichean a chaidh a bhacadh",
        "ipblocklist-legend": "Lorg cleachdaiche a chaidh a bhacadh",
        "import": "Ion-phortaich duilleagan",
        "importinterwiki": "Ion-phortachadh tar-uicidh",
        "import-interwiki-text": "Tagh uicidh 's tiotal na duilleige airson ion-phortachadh.\nThèid cinn-là nam mùthaidhean 's ainmean nan deasaichean a ghlèidheadh.\nThèid gach gnìomh ion-phortachadh tar-uicidh a chur ris an [[Special:Log/import|loga ion-phortachaidh]].",
-       "import-interwiki-source": "An uicidh/duilleag thùsail:",
+       "import-interwiki-sourcewiki": "An uicidh thùsail:",
+       "import-interwiki-sourcepage": "An duilleag thùsail:",
        "import-interwiki-history": "Dèan lethbhreac de dh'eachdraidh nam mùthaidhean slàna airson na duilleige seo",
        "import-interwiki-templates": "Gabh a-steach na teamplaidean uile",
        "import-interwiki-submit": "Ion-phortaich",
        "import-error-create": "Cha deach an duilleag \"$1\" ion-phortachadh o nach fhaod thu a cruthachadh.",
        "import-error-interwiki": "Cha deach an duilleag \"$1\" ion-phortachadh on a chaidh ainm a ghlèidheadh airson ceangal a-mach (eadar-uicidh).",
        "import-error-special": "Cha deach an duilleag \"$1\" ion-phortadh on a bhuineas i ri ainm-spàs sònraichte nach ceadaich duilleagan.",
-       "import-error-invalid": "Cha deach an duilleag \"$1\" ion-phortachadh on a tha ainm mì-dhligheach.",
+       "import-error-invalid": "Cha deach an duilleag \"$1\" ion-phortachadh on a tha a h-ainm mì-dhligheach air an uicidh seo.",
        "import-error-unserialize": "Cha ghabh mùthadh $2 dhen duilleag \"$1\" a thogail on tionndadh serialized. Chaidh aithris gun cleachd am mùthadh modail susbaint $3 a tha serialized mar $4.",
        "import-error-bad-location": "Cha ghabh am mùthadh $2 a chleachdas modail susbainte $3 a stòradh air \"$1\" air an uicidh seo o nach cuir an duilleag ud taic ris a' mhodail seo.",
        "import-options-wrong": "{{PLURAL:$2|Roghainn cearr|Roghainnean cearra}}: <nowiki>$1</nowiki>",
        "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": "$1 {{PLURAL:$1|mhùthadh|mùthadh|mùthaidhean|mùthadh}}",
+       "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": "$1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} o $2",
+       "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.",
        "pageinfo-robot-policy": "Inneacsadh le robotairean",
        "pageinfo-robot-index": "Ceadaichte",
        "pageinfo-robot-noindex": "Neo-cheadaichte",
-       "pageinfo-views": "Air a sealltainn",
        "pageinfo-watchers": "A' cumail sùil air",
        "pageinfo-few-watchers": "Tha nas lugha na $1 a' cumail sùil air",
        "pageinfo-redirects-name": "Ath-stiùiridhean dhan duilleag seo",
        "exif-urgency-low": "Ìosal ($1)",
        "exif-urgency-high": "Àrd ($1)",
        "exif-urgency-other": "Prìomhachas gnàthaiche ($1)",
-       "watchlistall2": "na h-uile",
        "namespacesall": "na h-uile",
        "monthsall": "na h-uile",
        "confirmemail": "Dearbhaich an seòladh puist-dhealain",
        "autosumm-replace": "Chaidh \"$1\" a chur an àite na susbaint",
        "autoredircomment": "Chaidh an duilleag ath-stiùireadh gu [[$1]]",
        "autosumm-new": "Chaidh duilleag le \"$1\" a chruthachadh",
+       "autosumm-newblank": "Chaidh duilleag bhàn a chruthachadh",
        "size-bytes": "$1 B",
        "size-kilobytes": "$1 KB",
        "size-megabytes": "$1 MB",
        "timezone-utc": "UTC",
        "unknown_extension_tag": "Taga leudachain \"$1\" neo-aithnichte",
        "duplicate-defaultsort": "<strong>Rabhadh:</strong> Tha an iuchair seòrsachaidh bhunaiteach \"$2\" a' dol thairis air seann iuchair eile, \"$1\".",
+       "duplicate-displaytitle": "<strong>Rabhadh:</strong> Tha an tiotal taisbeanaidh \"$2\" a' dol thairis air seann tiotal taisbeanaidh eile, \"$1\".",
        "version": "Tionndadh",
        "version-extensions": "Leudachain air an stàladh",
        "version-skins": "Craicnean",
        "logentry-rights-rights": "Dh'atharraich $1 {{GENDER:$2|a bhallrachd|a ballrachd}} ann am buidheann airson $3 o $4 gu $5",
        "logentry-rights-rights-legacy": "Dh'atharraich $1 {{GENDER:$2|a bhallrachd|a ballrachd}} ann am buidheann airson $3",
        "logentry-rights-autopromote": "Chaidh $1 àrdachadh o $4 gu $5 gu fèin-obrachail",
+       "logentry-upload-upload": "Luchdaich $1 $3 suas",
+       "logentry-upload-overwrite": "Luchdaich $1 tionndadh ùr de $3 suas",
+       "logentry-upload-revert": "Luchdaich $1 $3 suas",
        "rightsnone": "(chan eil gin)",
+       "revdelete-summary": "gearr-chunntas an deasachaidh",
        "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:",
        "duration-centuries": "$1 {{PLURAL:$1|linn|linn|linntean|linn}}",
        "duration-millennia": "$1 {{PLURAL:$1|mhìle bliadhna|mhìle bliadhna|mìle bliadhna|mìle bliadhna}}",
        "rotate-comment": "Chaidh an dealbh a chuairteachadh le $1 {{PLURAL:$1|cheum|cheum|ceuman|ceum}} gu tuathal",
+       "limitreport-title": "Dàta pròifil a' pharsair",
+       "limitreport-cputime": "Cleachdadh ùine a' CPU",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|diog|dhiog|diogan|diog}}",
+       "limitreport-walltime": "Cleachdadh fìor-ùine",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|diog|dhiog|diogan|diog}}",
+       "limitreport-ppvisitednodes": "Àireamh nan nòdan ris an do thadhal an ro-phròiseasar",
        "limitreport-ppvisitednodes-value": "$1/$2",
+       "limitreport-ppgeneratednodes": "Àireamh nan nòdan a ghin an ro-phròiseasar",
        "limitreport-ppgeneratednodes-value": "$1/$2",
+       "limitreport-postexpandincludesize": "Meud na gabhail a-steach às dèidh an leudachaidh",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bhaidht|bhaidht|baidhtichean|baidht}}",
+       "limitreport-templateargumentsize": "Meud nan argamaidean air an teamplaid",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bhaidht|bhaidht|baidhtichean|baidht}}",
+       "limitreport-expansiondepth": "Doimhne as motha an leudachaidh",
        "limitreport-expansiondepth-value": "$1/$2",
+       "limitreport-expensivefunctioncount": "Cunntadh air foincseanan daora a' pharsair",
        "limitreport-expensivefunctioncount-value": "$1/$2",
        "expandtemplates": "Leudaich na templaidean",
        "expand_templates_intro": "Gabhaidh an duilleag shònraichte seo ri teacsa agus leudaichidh i a h-uile teamplaid na broinn gu ath-chùrsach.\nLeudaichidh i cuideachd foincseanan parsair ris a chuirear taic, can\n<code><nowiki>{{</nowiki>#language:…}}</code> agus caochladairean mar\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nAir deireadh na sgeòil, leudaichidh i cha mhòr gach rud eadar camagan dualach dùbailte.",
        "action-pagelang": "atharraich cànan nan duilleagan",
        "log-name-pagelang": "Loga air atharrachadh nan cànan",
        "log-description-pagelang": "Seo loga dhe na h-atharraichean air cànanan nan duilleagan.",
-       "logentry-pagelang-pagelang": "Dh'atharraich $1 cànan nan duilleagan airson $3 o $4 gu $5."
+       "logentry-pagelang-pagelang": "Dh'atharraich $1 cànan nan duilleagan airson $3 o $4 gu $5.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (an comas)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''à comas''')",
+       "mediastatistics": "Stadastaireachd nam meadhanan",
+       "mediastatistics-summary": "Stadastaireachd air na seòrsaichean faidhle a chaidh a luchdadh suas. Cha ghabh seo a-steach ach an tionndadh as ùire de gach faidhle. Tha seann-tionndaidhean 's faidhlichean air an sguabadh às 'gan leigeil seachad.",
+       "mediastatistics-nfiles": "$1 ($2%)",
+       "mediastatistics-nbytes": "%1 {{PLURAL:$1|bhaidht|bhaidht|baidhtichean|baidht}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "Seòrsa MIME",
+       "mediastatistics-table-extensions": "Leudachain comasach",
+       "mediastatistics-table-count": "Àireamh de dh'fhaidhlichean",
+       "mediastatistics-table-totalbytes": "Meud iomlan",
+       "mediastatistics-header-unknown": "Chan eil fhios",
+       "mediastatistics-header-bitmap": "Dealbhan bitmap",
+       "mediastatistics-header-drawing": "Tàirngean (dealbhan vector)",
+       "mediastatistics-header-audio": "Fuaim",
+       "mediastatistics-header-video": "Videothan",
+       "mediastatistics-header-multimedia": "Meadhanan beartach",
+       "mediastatistics-header-office": "Oifis",
+       "mediastatistics-header-text": "Teacsa",
+       "mediastatistics-header-executable": "Faidhlichean so-ghnìomhaichte",
+       "mediastatistics-header-archive": "Fòrmatan dùmhlaichte"
 }
index af10ca7..5ff1b41 100644 (file)
        "otherlanguages": "Outras linguas",
        "redirectedfrom": "(Redirixido desde \"$1\")",
        "redirectpagesub": "Páxina de redirección",
+       "redirectto": "Redirixir cara a:",
        "lastmodifiedat": "A última modificación desta páxina foi o $1 ás $2.",
        "viewcount": "Esta páxina foi visitada {{PLURAL:$1|unha vez|$1 veces}}.",
        "protectedpage": "Páxina protexida",
        "viewsourcetext": "Pode ver e copiar o código fonte desta páxina:",
        "viewyourtext": "Pode ver e copiar o código fonte '''das súas edicións''' nesta páxina:",
        "protectedinterface": "Esta páxina fornece o texto da interface do software e está protexida para evitar o seu abuso.\nPara engadir ou modificar as traducións en todos os wikis utilice [//translatewiki.net/wiki/Main_Page?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.",
-       "editinginterface": "'''Aviso:''' Está editando unha páxina usada para fornecer o texto da interface do software.\nOs cambios nesta páxina afectarán á aparencia da interface dos outros usuarios do wiki.\nPara engadir ou modificar as traducións en todos os wikis utilice [//translatewiki.net/wiki/Main_Page?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.",
+       "editinginterface": "<strong>Aviso:</strong> Está editando unha páxina usada para fornecer o texto da interface do software.\nOs cambios feitos nesta páxina afectarán á aparencia da interface dos outros usuarios do wiki.",
+       "translateinterface": "Para engadir ou modificar as traducións en todos os wikis utilice [//translatewiki.net/wiki/Special:MainPage?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.",
        "cascadeprotected": "Esta páxina foi protexida fronte á edición debido a que está incluída {{PLURAL:$1|na seguinte páxina protexida, que ten|nas seguintes páxinas protexidas, que teñen}} a \"protección en serie\" activada:\n$2",
        "namespaceprotected": "Non ten os permisos necesarios para modificar páxinas no espazo de nomes '''$1'''.",
        "customcssprotected": "Non ten os permisos necesarios para modificar esta páxina de CSS, dado que contén a configuración persoal doutro usuario.",
        "createaccount-text": "Alguén creou unha conta chamada \"$2\" para o seu enderezo de correo electrónico en {{SITENAME}} ($4), e con contrasinal \"$3\".\nDebe acceder ao sistema e mudar o contrasinal agora.\n\nPode facer caso omiso desta mensaxe se se creou esta conta por erro.",
        "login-throttled": "Fixo demasiados intentos de acceder ao sistema.\nPor favor, agarde $1 antes de probar outra vez.",
        "login-abort-generic": "Acceso ao sistema incorrecto; abortado",
+       "login-migrated-generic": "A súa conta foi migrada, e o seu nome de usuario xa non existe nesta wiki.",
        "loginlanguagelabel": "Lingua: $1",
        "suspicious-userlogout": "Rexeitouse a súa petición de saír do sistema porque semella que a enviou un navegador roto ou a caché dun proxy.",
        "createacct-another-realname-tip": "O nome real é opcional.\nSe escolle dalo utilizarase para atribuír ao usuario o seu traballo.",
        "passwordreset-emailsent-capture": "Enviouse un correo electrónico de restablecemento do contrasinal, mostrado a continuación.",
        "passwordreset-emailerror-capture": "Xerouse un correo electrónico de restablecemento do contrasinal, mostrado a continuación, pero o envío {{GENDER:$2|ao usuario|á usuaria}} fallou: $1",
        "changeemail": "Cambiar o enderezo de correo electrónico",
-       "changeemail-header": "Cambiar o enderezo de correo electrónico da conta",
        "changeemail-text": "Encha este formulario para cambiar o seu enderezo de correo electrónico. Terá que escribir o seu contrasinal para confirmar este cambio.",
        "changeemail-no-info": "Debe rexistrarse para acceder directamente a esta páxina.",
        "changeemail-oldemail": "Enderezo de correo electrónico actual:",
        "changeemail-none": "(ningún)",
        "changeemail-password": "O seu contrasinal en {{SITENAME}}:",
        "changeemail-submit": "Cambiar o correo electrónico",
-       "changeemail-cancel": "Cancelar",
        "changeemail-throttled": "Fixo demasiados intentos de acceder ao sistema.\nPor favor, agarde $1 antes de probar outra vez.",
        "resettokens": "Restablecer os pases",
        "resettokens-text": "Aquí pode restablecer os pases que permiten acceder a certos datos privados asociados á súa conta.\n\nDebería facelo se os compartiu accidentalmente con alguén ou se a súa conta foi comprometida.",
        "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": "'''Aviso:''' Non accedeu ao sistema.\nO seu enderezo IP quedará rexistrado no historial de revisións desta páxina.",
+       "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.",
        "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.",
        "missingcommenttext": "Por favor, escriba un comentario a continuación.",
        "content-model-text": "texto simple",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Páxinas con argumentos duplicados nas chamadas aos modelos",
+       "duplicate-args-category-desc": "Esta páxina contén as chamadas aos modelos que utilizan argumentos duplicados, como <code><nowiki>{{exemplo|bar=1|bar=2}}</nowiki></code> ou <code><nowiki>{{exemplo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Aviso:''' Esta páxina contén demasiadas chamadas a funcións analíticas custosas.\n\nDebe ter menos {{PLURAL:$2|dunha chamada|de $2 chamadas}}, e agora hai $1.",
        "expensive-parserfunction-category": "Páxinas con moitas chamadas a funcións analíticas custosas",
        "post-expand-template-inclusion-warning": "'''Aviso:''' O tamaño do modelo é moi grande.\nAlgúns modelos non se incluirán.",
        "mergehistory-same-destination": "A páxina de orixe e a páxina de destino non pode ser a mesma",
        "mergehistory-reason": "Motivo:",
        "mergelog": "Rexistro de fusións",
-       "pagemerge-logentry": "fusionou \"[[$1]]\" con \"[[$2]]\" (revisións ata o $3)",
        "revertmerge": "Desfacer a fusión",
        "mergelogpagetext": "A continuación hai unha lista coas fusións máis recentes do historial dunha páxina co doutra.",
        "history-title": "Historial de revisións de \"$1\"",
        "search-relatedarticle": "Relacionado",
        "searchrelated": "relacionado",
        "searchall": "todo",
-       "showingresults": "{{PLURAL:$1|Móstrase '''1''' resultado|Móstranse '''$1''' resultados}}, comezando polo número '''$2'''.",
+       "showingresults": "{{PLURAL:$1|Móstrase <strong>1</strong> resultado|Móstranse <strong>$1</strong> resultados}}, comezando polo número <strong>$2</strong>.",
        "showingresultsinrange": "{{PLURAL:$1|Móstrase <strong>1</strong> resultado|Móstranse <strong>$1</strong> resultados}}, comezando polo número <strong>$2</strong> e rematando polo número <strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados do '''$1''' ao '''$2''', dun total de '''$3''',}} para \"'''$4'''\"",
+       "search-showingresults": "{{PLURAL:$5|Resultado <strong>$1</strong> de <strong>$3</strong>|Resultados do <strong>$1</strong> ao <strong>$2</strong>, dun total de <strong>$3</strong>}}",
        "search-nonefound": "Non se atopou ningún resultado que coincidise coa procura.",
        "powersearch-legend": "Busca avanzada",
        "powersearch-ns": "Procurar nos espazos de nomes:",
        "gender-female": "Ela edita as páxinas do wiki",
        "prefs-help-gender": "Definir esta preferencia é opcional.\nO software usa este valor para dirixirse á súa persoa e para facerlle mencións mediante o xénero gramatical axeitado.\nEsta información será pública.",
        "email": "Correo electrónico",
-       "prefs-help-realname": "O nome real é opcional.\nSe escolle dalo utilizarase para atribuírlle o seu traballo.",
+       "prefs-help-realname": "O nome real é opcional.\nEn caso de revelalo, utilizarase para atribuírlle o seu traballo.",
        "prefs-help-email": "O enderezo de correo electrónico é opcional, pero permite que se lle envíe un contrasinal novo se se esquece del.",
        "prefs-help-email-others": "Tamén pode optar por deixar aos outros que se poidan poñer en contacto con vostede a través da súa páxina de usuario sen necesidade de revelar a súa identidade.",
        "prefs-help-email-required": "Cómpre o enderezo de correo electrónico.",
        "prefs-tokenwatchlist": "Pase",
        "prefs-diffs": "Diferenzas",
        "prefs-help-prefershttps": "Esta preferencia ha aplicarse no seu vindeiro acceso ao sistema.",
+       "prefswarning-warning": "Fixo cambios nas súas preferencias que aínda non se gardaron.\nSe deixa esta páxina sen premer en \"Gardar\", non se actualizarán as súas preferencias.",
        "prefs-tabs-navigation-hint": "Consello: Pode empregar as frechas esquerda e dereita para navegar polas lapelas da lista.",
        "email-address-validity-valid": "O enderezo de correo electrónico semella válido",
        "email-address-validity-invalid": "Escriba un enderezo de correo electrónico válido",
        "statistics": "Estatísticas",
        "statistics-header-pages": "Estatísticas das páxinas",
        "statistics-header-edits": "Estatísticas das edicións",
-       "statistics-header-views": "Estatísticas das visitas",
        "statistics-header-users": "Estatísticas dos usuarios",
        "statistics-header-hooks": "Outras estatísticas",
        "statistics-articles": "Páxinas de contido",
        "statistics-files": "Ficheiros cargados",
        "statistics-edits": "Edicións nas páxinas des que se creou {{SITENAME}}",
        "statistics-edits-average": "Media de edicións por páxina",
-       "statistics-views-total": "Visitas totais",
-       "statistics-views-total-desc": "Non se inclúen as visitas ás páxinas inexistentes e especiais",
-       "statistics-views-peredit": "Visitas por edición",
        "statistics-users": "[[Special:ListUsers|Usuarios]] rexistrados",
        "statistics-users-active": "Usuarios activos",
        "statistics-users-active-desc": "Usuarios que teñen levado a cabo unha acción {{PLURAL:$1|no último día|nos últimos $1 días}}",
-       "statistics-mostpopular": "Páxinas máis vistas",
        "pageswithprop": "Páxinas cunha propiedade de páxina",
        "pageswithprop-legend": "Páxinas cunha propiedade de páxina",
        "pageswithprop-text": "Esta páxina lista aquelas páxinas que utilizan unha propiedade de páxina determinada.",
        "uncategorizedtemplates": "Modelos sen categorías",
        "unusedcategories": "Categorías sen uso",
        "unusedimages": "Imaxes sen uso",
-       "popularpages": "Páxinas populares",
        "wantedcategories": "Categorías requiridas",
        "wantedpages": "Páxinas requiridas",
        "wantedpages-badtitle": "Título inválido fixado nos resultados: $1",
        "pager-older-n": "{{PLURAL:$1|unha anterior|$1 anteriores}}",
        "suppress": "Supervisor",
        "querypage-disabled": "Esta páxina especial está desactivada por razóns de rendemento.",
+       "apihelp": "Axuda coa API",
+       "apihelp-no-such-module": "Non se atopou o módulo \"$1\".",
        "booksources": "Fontes bibliográficas",
        "booksources-search-legend": "Procurar fontes bibliográficas",
-       "booksources-go": "Ir",
+       "booksources-search": "Procurar",
        "booksources-text": "A continuación aparece unha lista de ligazóns cara a outros sitios web que venden libros novos e usados, neles tamén pode obter máis información sobre as obras que está a buscar:",
        "booksources-invalid-isbn": "O ISBN inserido parece non ser válido; comprobe que non haxa erros ao copialo da fonte orixinal.",
        "specialloguserlabel": "Executante:",
        "wlheader-enotif": "A notificación por correo electrónico está activada.",
        "wlheader-showupdated": "As páxinas que cambiaron desde a súa última visita móstranse en '''negra'''.",
        "wlnote": "A continuación {{PLURAL:$1|está a última modificación|están as últimas <strong>$1</strong> modificacións}} {{PLURAL:$2|na última hora|nas últimas <strong>$2</strong> horas}} ata o $3 ás $4.",
-       "wlshowlast": "Mostrar as últimas $1 horas, os últimos $2 días ou $3",
+       "wlshowlast": "Mostrar as últimas $1 horas e os últimos $2 días",
        "watchlist-options": "Opcións de vixilancia",
        "watching": "Vixiando...",
        "unwatching": "Deixando de vixiar...",
        "protect-othertime": "Outra duración:",
        "protect-othertime-op": "outra duración",
        "protect-existing-expiry": "Período de caducidade actual: $2 ás $3",
+       "protect-existing-expiry-infinity": "Período de caducidade actual: infinito",
        "protect-otherreason": "Outro motivo:",
        "protect-otherreason-op": "Outro motivo",
        "protect-dropdown": "*Motivos frecuentes para a protección\n** Vandalismo excesivo\n** Publicidade excesiva\n** Guerra de edicións\n** Páxina moi visitada",
        "unblockip": "Desbloquear un usuario",
        "unblockiptext": "Use o seguinte formulario para dar de novo acceso de escritura a un enderezo IP ou usuario que estea bloqueado.",
        "ipusubmit": "Retirar o bloqueo",
-       "unblocked": "[[User:$1|$1]] foi {{GENDER:$1|desbloqueado|desbloqueada}}",
-       "unblocked-range": "$1 foi desbloqueado",
-       "unblocked-id": "O bloqueo $1 foi eliminado",
+       "unblocked": "[[User:$1|$1]] foi {{GENDER:$1|desbloqueado|desbloqueada}}.",
+       "unblocked-range": "$1 foi desbloqueado.",
+       "unblocked-id": "O bloqueo $1 foi eliminado.",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] foi desbloqueado.",
        "blocklist": "Usuarios bloqueados",
        "ipblocklist": "Usuarios bloqueados",
        "ipblocklist-legend": "Buscar un usuario bloqueado",
        "tooltip-pt-preferences": "As miñas preferencias",
        "tooltip-pt-watchlist": "A lista de páxinas cuxas modificacións está a seguir",
        "tooltip-pt-mycontris": "Lista das súas contribucións",
-       "tooltip-pt-login": "Recoméndaselle rexistrarse, se ben non é obrigatorio.",
+       "tooltip-pt-login": "Recoméndaselle rexistrarse, se ben non é obrigatorio",
        "tooltip-pt-logout": "Saír ao anonimato",
+       "tooltip-pt-createaccount": "Recoméndaselle crear unha conta e acceder ao sistema, se ben non é obrigatorio",
        "tooltip-ca-talk": "Conversa acerca do contido desta páxina",
        "tooltip-ca-edit": "Pode modificar esta páxina; antes de gardala, por favor, utilice o botón de vista previa",
        "tooltip-ca-addsection": "Comezar unha nova sección",
        "tooltip-feed-atom": "Fonte de novas Atom desta páxina",
        "tooltip-t-contributions": "Ver a lista de contribucións {{GENDER:{{BASEPAGENAME}}|deste usuario|desta usuaria}}",
        "tooltip-t-emailuser": "Enviarlle unha mensaxe a {{GENDER:{{BASEPAGENAME}}|este usuario|esta usuaria}} por correo electrónico",
+       "tooltip-t-info": "Máis información sobre esta páxina",
        "tooltip-t-upload": "Subir ficheiros",
        "tooltip-t-specialpages": "Lista de todas as páxinas especiais",
        "tooltip-t-print": "Versión para imprimir da páxina",
        "pageinfo-robot-policy": "Indexación por robots",
        "pageinfo-robot-index": "Permitida",
        "pageinfo-robot-noindex": "Non permitida",
-       "pageinfo-views": "Número de visitas",
        "pageinfo-watchers": "Número de vixiantes da páxina",
        "pageinfo-few-watchers": "Menos de $1 {{PLURAL:$1|vixiante|vixiantes}}",
        "pageinfo-redirects-name": "Número de redireccións cara a esta páxina",
        "exif-urgency-low": "Baixa ($1)",
        "exif-urgency-high": "Alta ($1)",
        "exif-urgency-other": "Prioridade definida polo usuario ($1)",
-       "watchlistall2": "todo",
        "namespacesall": "todos",
        "monthsall": "todos",
        "confirmemail": "Confirmar o enderezo de correo electrónico",
        "unknown_extension_tag": "Etiqueta de extensión descoñecida \"$1\"",
        "duplicate-defaultsort": "<strong>Aviso:</strong> A clave de ordenación por defecto \"$2\" anula a clave de ordenación anterior por defecto \"$1\".",
        "duplicate-displaytitle": "'''Aviso:''' O título mostrado \"$2\" anula o título anterior \"$1\".",
+       "invalid-indicator-name": "<strong>Erro:</strong> O atributo <code>name</code> dos indicadores do estado da páxina non pode estar baleiro.",
        "version": "Versión",
        "version-extensions": "Extensións instaladas",
        "version-skins": "Aparencias instaladas",
        "revdelete-uname-unhid": "descubriu o nome de usuario",
        "revdelete-restricted": "aplicou restricións aos administradores",
        "revdelete-unrestricted": "eliminou restricións aos administradores",
+       "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",
        "logentry-move-move_redir": "$1 {{GENDER:$2|moveu}} a páxina \"$3\" a \"$4\" sobre unha redirección",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|cargou}} unha nova versión de \"$3\"",
        "logentry-upload-revert": "$1 {{GENDER:$2|cargou}} \"$3\"",
        "rightsnone": "(ningún)",
+       "revdelete-summary": "o resumo de edición",
        "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:",
index 1a20c4d..4ba2bcc 100644 (file)
@@ -1,52 +1,52 @@
 {
-    "@metadata": {
-        "authors": [
-            "AminSanaei",
-            "Varg",
-            "محک"
-        ]
-    },
-    "moredotdotdot": "ویشتر...",
-    "mypage": "می هنه‌شر",
-    "mytalk": "می گب",
-    "anontalk": "اَ آی.پیˇ گب",
-    "qbfind": "یاتن",
-    "qbedit": "دچین واچین",
-    "returnto": "واگرد به $1.",
-    "search": "واموج",
-    "searchbutton": "واموج",
-    "go": "بوشو",
-    "searcharticle": "بوشو",
-    "history_short": "تارئخ",
-    "printableversion": "پرینتی نوسخه",
-    "permalink": "مؤنسنی پیوند",
-    "edit": "دچین واچین",
-    "editthispage": "اَ هنه‌شره (صفحه‌یه) دچین‌واچین بکون.",
-    "create-this-page": "اَ هنه‌شره (صفحه‌یه) چاکون.",
-    "deletethispage": "اَ هنه‌شره پاکأ کون.",
-    "newpage": "تازه هنه‌شر (تازه صفحه)",
-    "talkpagelinktext": "گب",
-    "talk": "گب",
-    "toolbox": "ابزار جیگا",
-    "jumpto": "واز بکون به:",
-    "jumptonavigation": "گردسن",
-    "jumptosearch": "واموج",
-    "currentevents": "تازه چیؤن",
-    "mainpage": "گت صفحه",
-    "mainpage-description": "گت صفحه",
-    "portal": "امه جیگا",
-    "privacy": "رازبداری",
-    "editsection": "دچین‌واچین",
-    "editold": "دچین‌واچین",
-    "nstab-main": "وانیویس (مقاله)",
-    "nstab-user": "کاربری هنه‌شر",
-    "nstab-category": "رج",
-    "searchresults": "واموج‌دموجˇ نتایج",
-    "searchresults-title": "واموج‌دموجˇ نتایج، «$1»ˇ واسی",
-    "allpagessubmit": "بشو",
-    "categories": "رجؤن",
-    "sp-contributions-talk": "گب",
-    "blocklink": "دَوَسته ببه",
-    "tooltip-ca-edit": "شمه تانید اَ هنه‌شره (صفحه) دچین‌واچین بکونید. بی‌زحمت قبل از ان‌کی ذخیره بکونید، پیش‌نمایشˇ دوکمه جا استفاده بکونید.",
-    "tooltip-ca-history": "اَ هنه‌شر (صفحه)ˇ قدیمی نسخه‌یان"
+       "@metadata": {
+               "authors": [
+                       "AminSanaei",
+                       "Varg",
+                       "محک"
+               ]
+       },
+       "moredotdotdot": "ویشتر...",
+       "mypage": "می هنه‌شر",
+       "mytalk": "می گب",
+       "anontalk": "اَ آی.پیˇ گب",
+       "qbfind": "یاتن",
+       "qbedit": "دچین واچین",
+       "returnto": "واگرد به $1.",
+       "search": "واموج",
+       "searchbutton": "واموج",
+       "go": "بوشو",
+       "searcharticle": "بوشو",
+       "history_short": "تارئخ",
+       "printableversion": "پرینتی نوسخه",
+       "permalink": "مؤنسنی پیوند",
+       "edit": "دچین واچین",
+       "editthispage": "اَ هنه‌شره (صفحه‌یه) دچین‌واچین بکون.",
+       "create-this-page": "اَ هنه‌شره (صفحه‌یه) چاکون.",
+       "deletethispage": "اَ هنه‌شره پاکأ کون.",
+       "newpage": "تازه هنه‌شر (تازه صفحه)",
+       "talkpagelinktext": "گب",
+       "talk": "گب",
+       "toolbox": "ابزار جیگا",
+       "jumpto": "واز بکون به:",
+       "jumptonavigation": "گردسن",
+       "jumptosearch": "واموج",
+       "currentevents": "تازه چیؤن",
+       "mainpage": "گت صفحه",
+       "mainpage-description": "گت صفحه",
+       "portal": "امه جیگا",
+       "privacy": "رازبداری",
+       "editsection": "دچین‌واچین",
+       "editold": "دچین‌واچین",
+       "nstab-main": "وانیویس (مقاله)",
+       "nstab-user": "کاربری هنه‌شر",
+       "nstab-category": "رج",
+       "searchresults": "واموج‌دموجˇ نتایج",
+       "searchresults-title": "واموج‌دموجˇ نتایج، «$1»ˇ واسی",
+       "allpagessubmit": "بشو",
+       "categories": "رجؤن",
+       "sp-contributions-talk": "گب",
+       "blocklink": "دَوَسته ببه",
+       "tooltip-ca-edit": "شمه تانید اَ هنه‌شره (صفحه) دچین‌واچین بکونید. بی‌زحمت قبل از ان‌کی ذخیره بکونید، پیش‌نمایشˇ دوکمه جا استفاده بکونید.",
+       "tooltip-ca-history": "اَ هنه‌شر (صفحه)ˇ قدیمی نسخه‌یان"
 }
index 02ef1b2..b9e8b50 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Hugo.arg",
-            "P. S. F. Freitas",
-            "Perla"
-        ]
-    },
-    "tog-underline": "Haiguy joajuha",
-    "tog-hideminor": "Eñomi ñemyatyrõ michĩva «ñemoambue pyahúpe»",
-    "tog-extendwatchlist": "Eipyso tembiapo rapykueho rysýi opaite ñemoambue ikatúvape",
-    "tog-usenewrc": "Ñemoambue ojejapo ramóva (ndoikói opaite 'navegador'-pe)",
-    "tog-numberheadings": "Mbopapapy ijehegui myakãha",
-    "tog-showtoolbar": "Ehechauka ñemyatyrõ renda",
-    "underline-always": "Akói",
-    "underline-never": "Araka'eve",
-    "sunday": "arateĩ",
-    "monday": "arakői",
-    "tuesday": "araapy",
-    "wednesday": "ararundy",
-    "thursday": "arapo",
-    "friday": "arapoteĩ",
-    "saturday": "arapokői",
-    "sun": "arateĩ",
-    "mon": "arakõi",
-    "tue": "araapy",
-    "wed": "ararundy",
-    "thu": "arapo",
-    "fri": "arapoteĩ",
-    "january": "jasyteĩ",
-    "february": "jasykői",
-    "march": "jasyapy",
-    "april": "jasyrundy",
-    "may_long": "jasypo",
-    "june": "jasypoteĩ",
-    "july": "jasypokői",
-    "august": "jasypoapy",
-    "september": "jasyporundy",
-    "october": "jasypa",
-    "november": "jasypateĩ",
-    "december": "jasypakői",
-    "january-gen": "jasyteĩ",
-    "february-gen": "jasykõi",
-    "march-gen": "jasyapy",
-    "april-gen": "jasyrundy",
-    "may-gen": "jasypo",
-    "june-gen": "jasypoteĩ",
-    "july-gen": "jasypokõi",
-    "august-gen": "jasypoapy",
-    "september-gen": "jasyporundy",
-    "october-gen": "jasypa",
-    "november-gen": "jasypateĩ",
-    "december-gen": "jasypakõi",
-    "jan": "jasyteĩ",
-    "feb": "jasykõi",
-    "mar": "jasyapy",
-    "apr": "jasyrundy",
-    "may": "jasypo",
-    "jun": "jasypoteĩ",
-    "jul": "jasypokõi",
-    "aug": "jasypoapy",
-    "sep": "jasyporundy",
-    "oct": "jasypa",
-    "nov": "jasypateĩ",
-    "dec": "jasypakõi",
-    "pagecategories": "{{PLURAL:$1|Ñemohenda|Ñemohendakuéra}}",
-    "about": "Rehegua",
-    "article": "Kuatiahai",
-    "newwindow": "(Ojepe'a peteĩ ovetã pyahu)",
-    "cancel": "Mbotove",
-    "mypage": "Che kuatiarogue",
-    "mytalk": "Che myangekõi",
-    "navigation": "Kundaharã",
-    "qbfind": "Heka",
-    "qbedit": "Jehaijey",
-    "tagline": "{{SITENAME}}megua",
-    "help": "Pytyvõhára",
-    "search": "Heka",
-    "searchbutton": "Heka",
-    "go": "Ha",
-    "searcharticle": "Ha",
-    "history": "Tembiasakue",
-    "history_short": "Tembiasakue",
-    "printableversion": "Osẽma haguãicha",
-    "edit": "Jehaijey",
-    "delete": "Mboje'o",
-    "undelete_short": "Restaurar $1 ediciones",
-    "newpage": "Pyahu kuatia",
-    "talkpagelinktext": "ñe'ẽ",
-    "specialpage": "Kuatiarogue mba'echĩchĩ",
-    "personaltools": "Tapicha rembipuru",
-    "postcomment": "Emoĩ ne remimo'ã",
-    "talk": "Myangekõi",
-    "views": "Techakuéra",
-    "toolbox": "Tembiporu",
-    "mediawikipage": "Hecha kuatiarogue marandu",
-    "viewtalkpage": "Hecha myangekõi",
-    "otherlanguages": "Ambue ñe'ẽ",
-    "redirectedfrom": "(Oñembohapejeýva $1)",
-    "lastmodifiedat": "Ko kuatiarogue oñemoambuejeýkuri: $2, $1.",
-    "viewcount": "Esta página ha sido visitada $1 veces.",
-    "jumpto": "Kundaharãme jeho",
-    "jumptonavigation": "kundaharã",
-    "jumptosearch": "Jeheka",
-    "aboutsite": "Ári {{SITENAME}}",
-    "aboutpage": "Project:Rehegua",
-    "copyright": "Tembikuaa'aty ikatu ojepuru <i>$1</i> rekópe",
-    "currentevents": "Ag̃agua",
-    "disclaimers": "Marandu leiguigua",
-    "edithelp": "Jehairã ñepytyvõ",
-    "mainpage": "Ape",
-    "mainpage-description": "Ape",
-    "portal": "Tekohapegua",
-    "privacy": "Polítika marandu ñeñangareko rehegua",
-    "privacypage": "Project:Polítika marandu ñeñangareko rehegua",
-    "youhavenewmessagesmulti": "Reguereko marandu pyahu $1",
-    "editsection": "jehaijey",
-    "editold": "jehaijey",
-    "editsectionhint": "Jehaijey vore: $1",
-    "toc": "Tembikuaa'aty rechaukaha",
-    "showtoc": "hechauka",
-    "hidetoc": "toñemi",
-    "restorelink": "$1 ediciones borradas",
-    "red-link-title": "$1 (ndaipóri ko togue)",
-    "nstab-main": "Kuatiahai",
-    "nstab-user": "Puruhára",
-    "nstab-media": "Media rogue",
-    "nstab-special": "Mba'echĩchĩ",
-    "nstab-project": "Mba'e apopyrã rogue",
-    "nstab-image": "Ñongatupy",
-    "nstab-mediawiki": "Marandu",
-    "nstab-template": "Tembiecharã",
-    "nstab-help": "Pytyvõ",
-    "nstab-category": "Ñemohenda",
-    "nosuchaction": "Upe tembiapo ndaipóri",
-    "ns-specialprotected": "Las páginas en el espacio de nombres Especial no se pueden editar.",
-    "yourname": "Hero",
-    "yourpassword": "Ne remiñemi",
-    "yourpasswordagain": "Repita ne remiñemi",
-    "remembermypassword": "Aipota chemomandu'ajepi amba'apo jave (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "login": "Terañemboguapy/Ke",
-    "nav-login-createaccount": "Terañemboguapy/Ke",
-    "userlogin": "Terañemboguapy/Ke",
-    "logout": "Sẽ",
-    "userlogout": "Sẽ",
-    "nologin": "¿Ne'ĩrãpa remohenda nde réra? '''$1'''.",
-    "nologinlink": "Téra ñemohenda",
-    "loginsuccesstitle": "Remoñepyrũ hekopete ne rembiapo",
-    "nosuchusershort": "No hay un usuario con el nombre \"$1\". Compruebe que lo ha escrito correctamente.",
-    "mailmypassword": "Embou chéve ñe'ẽveve rupive peteĩ temiñemĩ pyahu",
-    "loginlanguagelabel": "Ñe'ẽ: $1",
-    "bold_sample": "Haipyre oñemohũvéva",
-    "bold_tip": "Haipyre oñemohũvéva",
-    "italic_sample": "Haipyre ikarẽva",
-    "italic_tip": "Haipyre ikarẽva",
-    "link_tip": "Joaju hyepyguávandi",
-    "extlink_tip": "Joaju okapeguávandi (recuerde añadir el prefijo http://)",
-    "headline_tip": "Teraete mokõiha",
-    "nowiki_tip": "Viki jehaireko ñembo'yke",
-    "image_tip": "Ta'ãnga moĩngepyréva",
-    "media_tip": "Joaju jehai'aty multimediaguándi",
-    "sig_tip": "Teraguapy, arange, aravo",
-    "hr_tip": "Haipuku oñenóva (eipurúke tekotevẽ javénte)",
-    "summary": "Jehaimombyky:",
-    "subject": "Mba'ekuaarã/teraete:",
-    "minoredit": "Kóva ha'e peteĩ jehai mbyky",
-    "watchthis": "Toñeñangareko ko tembiapóre",
-    "savearticle": "Hai",
-    "showpreview": "Tojechauka jehai ñemboguapy mboyve",
-    "showdiff": "Tojechauka ñemoambue",
-    "missingsummary": "'''Atención:''' No has escrito un resumen de edición. Si haces clic nuevamente en «Hai» tu edición se grabará sin él.",
-    "subject-preview": "Previsualización del mba'ekuaarã/teraete:",
-    "newarticletext": "Rehapykuehókuri peteĩ joaju peteĩ kuatiarogue ndaipórivape.\nNde remoheñoisérõ ko kuatiarogue, eñepyrũkatu ehai.\nReikotevẽvérõ marandu, emoñe'ẽ kuatiarogue ñepytyvõ rehegua. Oiméramo reikereínte térã rejavyhaguére, upéicharõ terehojey [[{{MediaWiki:Helppage}}|kuatiarogue mboyveguápe]].",
-    "userinvalidcssjstitle": "'''Aviso:''' No existe la piel \"$1\". Recuerda que las páginas personalizadas .css y .js tienen un título en minúsculas, p.e. Usuario:Foo/vector.css en vez de  Usuario:Foo/Vector.css.",
-    "editing": "Ojehaihína $1",
-    "editingsection": "Ojehaihína $1 (vore)",
-    "editingcomment": "Ojehaihína $1 (comentario)",
-    "yourtext": "Mba'ehaipyre",
-    "cur": "ko'ag̃agua",
-    "last": "ipaha",
-    "historysize": "($1 bytes)",
-    "rev-delundel": "hechauka/toñemi",
-    "logdelete-selected": "'''Seleccionados $1 eventos de registro:'''",
-    "lineno": "Jehai $1:",
-    "editundo": "embyai",
-    "searchresults": "Ojejuhúva jeheka",
-    "prevn": "{{PLURAL:$1|$1}} mboyvegua",
-    "viewprevnext": "Hecha ($1 {{int:pipe-separator}} $2) ($3).",
-    "showingresults": "Abajo se muestran hasta '''$1''' resultados empezando por el nº '''$2'''.",
-    "showingresultsnum": "Abajo se muestran los '''$3''' resultados empezando por el nº '''$2'''.",
-    "preferences": "Mbohoryha",
-    "mypreferences": "Che mbohoryha",
-    "prefs-rc": "Oñemoambue pyahúva",
-    "searchresultshead": "Jeheka",
-    "youremail": "Ñe'ẽveve",
-    "yourlanguage": "Ñe'ẽ:",
-    "gender-male": "Ha'e ohaijey wiki kuatiarogue kuéra",
-    "gender-female": "Ha'e ohaijey wiki kuatiarogue kuéra",
-    "email": "Pareha eleytróniko",
-    "userrights-lookup-user": "Configurar grupos de usuarios",
-    "userrights-user-editname": "Ehaimi peteĩ téra puruháragua:",
-    "editusergroup": "Modificar grupos de usuarios",
-    "editinguser": "Ojehaihína '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
-    "userrights-editusergroup": "Modificar grupos de usuarios",
-    "saveusergroups": "Guardar grupos de usuarios",
-    "userrights-groupsmember": "Pehengue:",
-    "userrights-reason": "Motivo para el cambio:",
-    "group-all": "(opaite)",
-    "nchanges": "$1 ñemoambue",
-    "recentchanges": "Oñemoambue pyahúva",
-    "rclistfrom": "Tojehechauka oñemoambue pyahúva $1 guive",
-    "rcshowhideminor": "$1 jehaijey michĩva",
-    "rcshowhideliu": "$1 puruhára ohejáva teraguapy",
-    "rcshowhideanons": "$1 puruhára ojekuaa'ỹva",
-    "rcshowhidemine": "$1 che jehaijey",
-    "rclinks": "Ápe ojehechakuaa umi $1 oñemoambue pyahúva $2 ára ohasava'ekuépe.<br />$3",
-    "hide": "toñemi",
-    "show": "hechauka",
-    "newsectionsummary": "Pyahuvore: /* $1 */",
-    "recentchangeslinked-title": "Ñemoambue $1 rehegua",
-    "recentchangeslinked-summary": "Ko kuatiarogue hekochĩchĩvape oñembohysýi umi ñemoambue ipyahúva ko'ã kuatiarogue ojoajúvape. Kuatiarogue oĩva tapykueho rysýipe oĩ '''haipyre oñemohũvape'''.",
-    "upload": "Tojehupi jehai'aty",
-    "uploadtext": "Eipuru pe tembipuru oĩva iguýpe ehupi hag̃ua jehai'aty, rehecha térã reheka hag̃ua ta'ãnga ojehupipyrémava eike jehai'aty jehupipyre rysýipe, umi ihupipyréva ha oñemboguémava avei oñemboguapy [[Special:Log/upload|jehai'aty jehupipyrépe]].\nReomĩsérõ ta'ãnga peteĩ kuatiaroguépe, eipuru peteĩ joaju:\n'''<nowiki>[[</nowiki>Imagen<nowiki>:Archivo.jpg]]</nowiki>''', '''<nowiki>[[</nowiki>Imagen<nowiki>:Archivo.png|texto alternativo]]</nowiki>''' o\n'''<nowiki>[[</nowiki>Media<nowiki>:Archivo.ogg]]</nowiki>''' ojoaju hag̃ua hekopete pe jehai'atýre.",
-    "filename": "Téra jehai'aty",
-    "listfiles": "Ta'ãnga rysýi",
-    "listfiles_user": "Puruhára",
-    "file-anchor-link": "Ñongatupy",
-    "filehist-revert": "embojevy",
-    "filehist-current": "ko'ag̃agua",
-    "filehist-datetime": "Ára/Aravo",
-    "filehist-user": "Puruhára",
-    "filehist-comment": "Jehaimombyky",
-    "imagelinks": "Joajukuéra",
-    "filerevert": "Embojevy $1",
-    "filedelete-legend": "Mboje'o jehai'aty",
-    "filedelete-success": "'''$1''' oñembogue'akue",
-    "mimesearch": "Jeheka MIME",
-    "listredirects": "Ñembohapejey rysýi",
-    "unusedtemplates": "Tembiecharã ndojepurúiva",
-    "randompage": "Kuatiarogue oñembosako'íva",
-    "randomredirect": "Oimerãe ñembohapejeýpe jeho",
-    "statistics": "Papyrekokuaa",
-    "doubleredirects": "Ñembohapejey jo'apyre",
-    "brokenredirects": "Ñembohapejey hekopegua'ỹva",
-    "brokenredirects-edit": "jehaijey",
-    "brokenredirects-delete": "mboje'o",
-    "withoutinterwiki": "Kuatiarogue ndorekóiva interwiki",
-    "fewestrevisions": "Kuatiahai sa'ive ijehaijeýva",
-    "nbytes": "$1 bytes",
-    "ncategories": "$1 ñemohendakuéra",
-    "nlinks": "$1 joaju",
-    "nmembers": "$1 kuatiahai",
-    "nrevisions": "$1 revisiones",
-    "nviews": "$1 vistas",
-    "lonelypages": "Kuatiarogue ityre'ỹva",
-    "uncategorizedpages": "Kuatiarogue oñemohenda'ỹva",
-    "uncategorizedcategories": "Ñemohenda noñemohendáiva",
-    "uncategorizedimages": "Ta'ãnga ne'ĩrã oñemohendáva",
-    "uncategorizedtemplates": "Tembiecharã noñemohendáiva",
-    "unusedcategories": "Ñemohenda ojepuru'ỹva",
-    "unusedimages": "Ta'ãnga ndojepurúiva",
-    "wantedcategories": "Ñemohenda oñekotevẽva",
-    "wantedpages": "Kuatiarogue oñekotevẽva",
-    "mostlinked": "Kuatiahai ojoaju hetavéva",
-    "mostlinkedcategories": "Ñemohenda ojoaju hetavéva",
-    "mostlinkedtemplates": "Tembiecharã ojoaju hetavéva",
-    "mostcategories": "Kuatiarogue iñemohenda hetavéva",
-    "mostimages": "Ta'ãnga ojepuruvéva",
-    "mostrevisions": "Kuatiahai hetave ijehaijeýva",
-    "prefixindex": "Kuatiarogue henondepyguáva",
-    "shortpages": "Kuatiarogue mbykýva",
-    "longpages": "Kuatiarogue ipukúva",
-    "deadendpages": "Kuatiarogue ñesẽ'ỹva",
-    "protectedpages": "Kuatiarogue oñeñangarekóva",
-    "listusers": "Puruhára rysýi",
-    "newpages": "Kuatiarogue ipyahúva",
-    "newpages-username": "Hero",
-    "ancientpages": "Kuatiahai hi'arevéva",
-    "move": "Guerova",
-    "movethispage": "Guerova kuatiarogue",
-    "booksources": "Heñóiva kuatiañe'ẽme",
-    "log": "Ñemboguapypyre",
-    "allpages": "Opaite kuatiarogue",
-    "alphaindexline": "$1 $2 peve",
-    "nextpage": "Kuatia rogue upeigua($1)",
-    "prevpage": "Kuatia rogue mboyvegua ($1)",
-    "allpagesfrom": "Ehechauka kuatia rogue oñepyrũva:   -pe",
-    "allpagesto": "Ehechauka kuatia rogue opáva:  -pe",
-    "allarticles": "Opa kuatia rogue",
-    "allinnamespace": "Opa kuatia rogue (pa'ũ $1)",
-    "allpagessubmit": "Hechauka",
-    "categories": "Ñemohendakuéra",
-    "listusers-submit": "Hechauka",
-    "emailuser": "Tojeguerahauka ñe'ẽveve ko puruhárape",
-    "emailpage": "Pareha eleytrónico",
-    "emailmessage": "Marandu",
-    "watchlist": "Tapykueho rysýi",
-    "mywatchlist": "Tapykueho rysýi",
-    "watch": "Ñangareko",
-    "dellogpage": "Ñemboguepyre ñonagatupy",
-    "deletionlog": "ñemboguepyre ñonagatupy",
-    "rollback_short": "Embojevy",
-    "rollbacklink": "Embojevy",
-    "prot_1movedto2": "[[$1]] oñembohasa [[$2]]-pe",
-    "protect-text": "Puedes ver y modificar el nivel de protección de la página '''$1'''.",
-    "undeletedrevisions": "$1 ediciones restauradas",
-    "undeletedrevisions-files": "$1 ediciones y $2 archivos restaurados",
-    "undeletedfiles": "$1 archivos restaurados",
-    "undelete-search-submit": "Heka",
-    "namespace": "Téra rendagua:",
-    "invert": "Toñembo'ovývo mba'eporavopyre",
-    "blanknamespace": "(Tenondeguáva)",
-    "contributions": "Puruhára mba'emoĩmbyre",
-    "mycontris": "Che mba'emoĩmbyre",
-    "sp-contributions-search": "Heka mba'emoĩmbyre",
-    "sp-contributions-submit": "Heka",
-    "whatlinkshere": "Oñembojoajukuaáva ko'ápe",
-    "whatlinkshere-title": "Kuatiarogue ojoajúva \"$1\" rehe",
-    "whatlinkshere-page": "Kuatiarogue:",
-    "linkshere": "Ko'ã kuatiarogue ojoaju '''[[:$1]]''' rehe:",
-    "whatlinkshere-prev": "mboyvegua $1",
-    "whatlinkshere-next": "upeigua $1",
-    "whatlinkshere-links": "← joajukuéra",
-    "blockip": "Ejoko puruhára",
-    "ipblocklist": "IP mbohape rysýi imbotypyréva",
-    "ipblocklist-submit": "Heka",
-    "blocklink": "ejoko",
-    "contribslink": "mba'emoĩmbyre",
-    "blocklogtext": "Esto es un registro de bloqueos y desbloqueos de usuarios. Las direcciones bloqueadas automáticamente no aparecen aquí. Consulte la [[Special:BlockList|IP mbohape rysýi imbotypyréva]] para ver la lista de prohibiciones y bloqueos actualmente vigente.",
-    "movearticle": "Guerova kuatiarogue",
-    "move-watch": "Toñeñangareko ko tembiapóre",
-    "movepagebtn": "Guerova kuatiarogue",
-    "revertmove": "embojevy",
-    "delete_and_move": "Mboje'o ha guerova",
-    "export": "Kuatiarogue ñemondo",
-    "allmessages": "Opaite marandu MediaWikigua",
-    "import-revision-count": "$1 revisiones",
-    "import-logentry-upload-detail": "$1 revisiones",
-    "import-logentry-interwiki-detail": "$1 revisiones desde $2",
-    "tooltip-pt-userpage": "Che puruhárakuatia",
-    "tooltip-pt-mytalk": "Che kuatiarogue myangekõi",
-    "tooltip-pt-preferences": "Che mbohoryha",
-    "tooltip-pt-mycontris": "Tysỹi che mba'emoĩmbyre",
-    "tooltip-ca-move": "Guerova kuatiarogue",
-    "tooltip-p-logo": "Ape",
-    "tooltip-n-mainpage": "Eho ijapépe",
-    "spamprotectiontitle": "Filtro de protección contra spam",
-    "spamprotectiontext": "La página que intentas guardar ha sido bloqueada por el filtro de spam. Esto se debe probablemente a alguno de los un enlaces externos incluidos en ella.",
-    "spamprotectionmatch": "El siguiente texto es el que activó nuestro filtro ''anti-spam'' (contra la publicidad no solicitada): $1",
-    "spambot_username": "Limpieza de spam de MediaWiki",
-    "spam_reverting": "Revirtiendo a la última versión que no contenga enlaces a $1",
-    "spam_blanking": "Todas las revisiones contienen enlaces a $1, blanqueando",
-    "file-info": "tamaño de jehai'aty: $1; tipo MIME: $2",
-    "newimages": "Ta'ãnga pyahu renda",
-    "ilsubmit": "Jeheka",
-    "namespacesall": "opaite",
-    "monthsall": "opaite",
-    "autosumm-new": "Kuatiarogue ipyahúva: $1",
-    "watchlistedit-numitems": "Tu lista de seguimiento tiene $1 páginas, excluyendo las páginas de discusión.",
-    "watchlistedit-normal-title": "Moambue tapykueho rysýi",
-    "watchlistedit-normal-submit": "Mboje'o kuatiarogue",
-    "watchlistedit-normal-done": "$1 páginas han sido borradas de tu lista de seguimiento:",
-    "watchlistedit-raw-titles": "Kuatiarogue:",
-    "watchlistedit-raw-added": "Se han añadido $1 páginas:",
-    "watchlistedit-raw-removed": "$1 páginas han sido borradas:",
-    "version": "Mba'ereko",
-    "specialpages": "Kuatiarogue hekochĩchĩva"
+       "@metadata": {
+               "authors": [
+                       "Hugo.arg",
+                       "P. S. F. Freitas",
+                       "Perla",
+                       "아라"
+               ]
+       },
+       "tog-underline": "Haiguy joajuha",
+       "tog-hideminor": "Eñomi ñemyatyrõ michĩva «ñemoambue pyahúpe»",
+       "tog-extendwatchlist": "Eipyso tembiapo rapykueho rysýi opaite ñemoambue ikatúvape",
+       "tog-usenewrc": "Ñemoambue ojejapo ramóva (ndoikói opaite 'navegador'-pe)",
+       "tog-numberheadings": "Mbopapapy ijehegui myakãha",
+       "tog-showtoolbar": "Ehechauka ñemyatyrõ renda",
+       "underline-always": "Akói",
+       "underline-never": "Araka'eve",
+       "sunday": "arateĩ",
+       "monday": "arakői",
+       "tuesday": "araapy",
+       "wednesday": "ararundy",
+       "thursday": "arapo",
+       "friday": "arapoteĩ",
+       "saturday": "arapokői",
+       "sun": "arateĩ",
+       "mon": "arakõi",
+       "tue": "araapy",
+       "wed": "ararundy",
+       "thu": "arapo",
+       "fri": "arapoteĩ",
+       "january": "jasyteĩ",
+       "february": "jasykői",
+       "march": "jasyapy",
+       "april": "jasyrundy",
+       "may_long": "jasypo",
+       "june": "jasypoteĩ",
+       "july": "jasypokői",
+       "august": "jasypoapy",
+       "september": "jasyporundy",
+       "october": "jasypa",
+       "november": "jasypateĩ",
+       "december": "jasypakői",
+       "january-gen": "jasyteĩ",
+       "february-gen": "jasykõi",
+       "march-gen": "jasyapy",
+       "april-gen": "jasyrundy",
+       "may-gen": "jasypo",
+       "june-gen": "jasypoteĩ",
+       "july-gen": "jasypokõi",
+       "august-gen": "jasypoapy",
+       "september-gen": "jasyporundy",
+       "october-gen": "jasypa",
+       "november-gen": "jasypateĩ",
+       "december-gen": "jasypakõi",
+       "jan": "jasyteĩ",
+       "feb": "jasykõi",
+       "mar": "jasyapy",
+       "apr": "jasyrundy",
+       "may": "jasypo",
+       "jun": "jasypoteĩ",
+       "jul": "jasypokõi",
+       "aug": "jasypoapy",
+       "sep": "jasyporundy",
+       "oct": "jasypa",
+       "nov": "jasypateĩ",
+       "dec": "jasypakõi",
+       "pagecategories": "{{PLURAL:$1|Ñemohenda|Ñemohendakuéra}}",
+       "about": "Rehegua",
+       "article": "Kuatiahai",
+       "newwindow": "(Ojepe'a peteĩ ovetã pyahu)",
+       "cancel": "Mbotove",
+       "mypage": "Che kuatiarogue",
+       "mytalk": "Che myangekõi",
+       "navigation": "Kundaharã",
+       "qbfind": "Heka",
+       "qbedit": "Jehaijey",
+       "tagline": "{{SITENAME}}megua",
+       "help": "Pytyvõhára",
+       "search": "Heka",
+       "searchbutton": "Heka",
+       "go": "Ha",
+       "searcharticle": "Ha",
+       "history": "Tembiasakue",
+       "history_short": "Tembiasakue",
+       "printableversion": "Osẽma haguãicha",
+       "edit": "Jehaijey",
+       "delete": "Mboje'o",
+       "undelete_short": "Restaurar $1 ediciones",
+       "newpage": "Pyahu kuatia",
+       "talkpagelinktext": "ñe'ẽ",
+       "specialpage": "Kuatiarogue mba'echĩchĩ",
+       "personaltools": "Tapicha rembipuru",
+       "talk": "Myangekõi",
+       "views": "Techakuéra",
+       "toolbox": "Tembiporu",
+       "mediawikipage": "Hecha kuatiarogue marandu",
+       "viewtalkpage": "Hecha myangekõi",
+       "otherlanguages": "Ambue ñe'ẽ",
+       "redirectedfrom": "(Oñembohapejeýva $1)",
+       "lastmodifiedat": "Ko kuatiarogue oñemoambuejeýkuri: $2, $1.",
+       "viewcount": "Esta página ha sido visitada $1 veces.",
+       "jumpto": "Kundaharãme jeho",
+       "jumptonavigation": "kundaharã",
+       "jumptosearch": "Jeheka",
+       "aboutsite": "Ári {{SITENAME}}",
+       "aboutpage": "Project:Rehegua",
+       "copyright": "Tembikuaa'aty ikatu ojepuru <i>$1</i> rekópe",
+       "currentevents": "Ag̃agua",
+       "disclaimers": "Marandu leiguigua",
+       "edithelp": "Jehairã ñepytyvõ",
+       "mainpage": "Ape",
+       "mainpage-description": "Ape",
+       "portal": "Tekohapegua",
+       "privacy": "Polítika marandu ñeñangareko rehegua",
+       "privacypage": "Project:Polítika marandu ñeñangareko rehegua",
+       "youhavenewmessagesmulti": "Reguereko marandu pyahu $1",
+       "editsection": "jehaijey",
+       "editold": "jehaijey",
+       "editsectionhint": "Jehaijey vore: $1",
+       "toc": "Tembikuaa'aty rechaukaha",
+       "showtoc": "hechauka",
+       "hidetoc": "toñemi",
+       "restorelink": "$1 ediciones borradas",
+       "red-link-title": "$1 (ndaipóri ko togue)",
+       "nstab-main": "Kuatiahai",
+       "nstab-user": "Puruhára",
+       "nstab-media": "Media rogue",
+       "nstab-special": "Mba'echĩchĩ",
+       "nstab-project": "Mba'e apopyrã rogue",
+       "nstab-image": "Ñongatupy",
+       "nstab-mediawiki": "Marandu",
+       "nstab-template": "Tembiecharã",
+       "nstab-help": "Pytyvõ",
+       "nstab-category": "Ñemohenda",
+       "nosuchaction": "Upe tembiapo ndaipóri",
+       "ns-specialprotected": "Las páginas en el espacio de nombres Especial no se pueden editar.",
+       "yourname": "Hero",
+       "yourpassword": "Ne remiñemi",
+       "yourpasswordagain": "Repita ne remiñemi",
+       "remembermypassword": "Aipota chemomandu'ajepi amba'apo jave (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "login": "Terañemboguapy/Ke",
+       "nav-login-createaccount": "Terañemboguapy/Ke",
+       "userlogin": "Terañemboguapy/Ke",
+       "logout": "Sẽ",
+       "userlogout": "Sẽ",
+       "nologin": "¿Ne'ĩrãpa remohenda nde réra? '''$1'''.",
+       "nologinlink": "Téra ñemohenda",
+       "loginsuccesstitle": "Remoñepyrũ hekopete ne rembiapo",
+       "nosuchusershort": "No hay un usuario con el nombre \"$1\". Compruebe que lo ha escrito correctamente.",
+       "mailmypassword": "Embou chéve ñe'ẽveve rupive peteĩ temiñemĩ pyahu",
+       "loginlanguagelabel": "Ñe'ẽ: $1",
+       "bold_sample": "Haipyre oñemohũvéva",
+       "bold_tip": "Haipyre oñemohũvéva",
+       "italic_sample": "Haipyre ikarẽva",
+       "italic_tip": "Haipyre ikarẽva",
+       "link_tip": "Joaju hyepyguávandi",
+       "extlink_tip": "Joaju okapeguávandi (recuerde añadir el prefijo http://)",
+       "headline_tip": "Teraete mokõiha",
+       "nowiki_tip": "Viki jehaireko ñembo'yke",
+       "image_tip": "Ta'ãnga moĩngepyréva",
+       "media_tip": "Joaju jehai'aty multimediaguándi",
+       "sig_tip": "Teraguapy, arange, aravo",
+       "hr_tip": "Haipuku oñenóva (eipurúke tekotevẽ javénte)",
+       "summary": "Jehaimombyky:",
+       "subject": "Mba'ekuaarã/teraete:",
+       "minoredit": "Kóva ha'e peteĩ jehai mbyky",
+       "watchthis": "Toñeñangareko ko tembiapóre",
+       "savearticle": "Hai",
+       "showpreview": "Tojechauka jehai ñemboguapy mboyve",
+       "showdiff": "Tojechauka ñemoambue",
+       "missingsummary": "'''Atención:''' No has escrito un resumen de edición. Si haces clic nuevamente en «Hai» tu edición se grabará sin él.",
+       "subject-preview": "Previsualización del mba'ekuaarã/teraete:",
+       "newarticletext": "Rehapykuehókuri peteĩ joaju peteĩ kuatiarogue ndaipórivape.\nNde remoheñoisérõ ko kuatiarogue, eñepyrũkatu ehai.\nReikotevẽvérõ marandu, emoñe'ẽ kuatiarogue ñepytyvõ rehegua. Oiméramo reikereínte térã rejavyhaguére, upéicharõ terehojey [$1 kuatiarogue mboyveguápe].",
+       "userinvalidcssjstitle": "'''Aviso:''' No existe la piel \"$1\". Recuerda que las páginas personalizadas .css y .js tienen un título en minúsculas, p.e. Usuario:Foo/vector.css en vez de  Usuario:Foo/Vector.css.",
+       "editing": "Ojehaihína $1",
+       "editingsection": "Ojehaihína $1 (vore)",
+       "editingcomment": "Ojehaihína $1 (comentario)",
+       "yourtext": "Mba'ehaipyre",
+       "cur": "ko'ag̃agua",
+       "last": "ipaha",
+       "historysize": "($1 bytes)",
+       "rev-delundel": "hechauka/toñemi",
+       "logdelete-selected": "Seleccionados $1 eventos de registro:",
+       "lineno": "Jehai $1:",
+       "editundo": "embyai",
+       "searchresults": "Ojejuhúva jeheka",
+       "prevn": "{{PLURAL:$1|$1}} mboyvegua",
+       "viewprevnext": "Hecha ($1 {{int:pipe-separator}} $2) ($3).",
+       "showingresults": "Abajo se muestran hasta '''$1''' resultados empezando por el nº '''$2'''.",
+       "preferences": "Mbohoryha",
+       "mypreferences": "Che mbohoryha",
+       "prefs-rc": "Oñemoambue pyahúva",
+       "searchresultshead": "Jeheka",
+       "youremail": "Ñe'ẽveve",
+       "yourlanguage": "Ñe'ẽ:",
+       "gender-male": "Ha'e ohaijey wiki kuatiarogue kuéra",
+       "gender-female": "Ha'e ohaijey wiki kuatiarogue kuéra",
+       "email": "Pareha eleytróniko",
+       "userrights-lookup-user": "Configurar grupos de usuarios",
+       "userrights-user-editname": "Ehaimi peteĩ téra puruháragua:",
+       "editusergroup": "Modificar grupos de usuarios",
+       "editinguser": "Ojehaihína '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+       "userrights-editusergroup": "Modificar grupos de usuarios",
+       "saveusergroups": "Guardar grupos de usuarios",
+       "userrights-groupsmember": "Pehengue:",
+       "userrights-reason": "Motivo para el cambio:",
+       "group-all": "(opaite)",
+       "nchanges": "$1 ñemoambue",
+       "recentchanges": "Oñemoambue pyahúva",
+       "rclistfrom": "Tojehechauka oñemoambue pyahúva $3 $2 guive",
+       "rcshowhideminor": "$1 jehaijey michĩva",
+       "rcshowhideliu": "$1 puruhára ohejáva teraguapy",
+       "rcshowhideanons": "$1 puruhára ojekuaa'ỹva",
+       "rcshowhidemine": "$1 che jehaijey",
+       "rclinks": "Ápe ojehechakuaa umi $1 oñemoambue pyahúva $2 ára ohasava'ekuépe.<br />$3",
+       "hide": "toñemi",
+       "show": "hechauka",
+       "newsectionsummary": "Pyahuvore: /* $1 */",
+       "recentchangeslinked-title": "Ñemoambue $1 rehegua",
+       "recentchangeslinked-summary": "Ko kuatiarogue hekochĩchĩvape oñembohysýi umi ñemoambue ipyahúva ko'ã kuatiarogue ojoajúvape. Kuatiarogue oĩva tapykueho rysýipe oĩ '''haipyre oñemohũvape'''.",
+       "upload": "Tojehupi jehai'aty",
+       "uploadtext": "Eipuru pe tembipuru oĩva iguýpe ehupi hag̃ua jehai'aty, rehecha térã reheka hag̃ua ta'ãnga ojehupipyrémava eike jehai'aty jehupipyre rysýipe, umi ihupipyréva ha oñemboguémava avei oñemboguapy [[Special:Log/upload|jehai'aty jehupipyrépe]].\nReomĩsérõ ta'ãnga peteĩ kuatiaroguépe, eipuru peteĩ joaju:\n'''<nowiki>[[</nowiki>Imagen<nowiki>:Archivo.jpg]]</nowiki>''', '''<nowiki>[[</nowiki>Imagen<nowiki>:Archivo.png|texto alternativo]]</nowiki>''' o\n'''<nowiki>[[</nowiki>Media<nowiki>:Archivo.ogg]]</nowiki>''' ojoaju hag̃ua hekopete pe jehai'atýre.",
+       "filename": "Téra jehai'aty",
+       "listfiles": "Ta'ãnga rysýi",
+       "listfiles_user": "Puruhára",
+       "file-anchor-link": "Ñongatupy",
+       "filehist-revert": "embojevy",
+       "filehist-current": "ko'ag̃agua",
+       "filehist-datetime": "Ára/Aravo",
+       "filehist-user": "Puruhára",
+       "filehist-comment": "Jehaimombyky",
+       "imagelinks": "Joajukuéra",
+       "filerevert": "Embojevy $1",
+       "filedelete-legend": "Mboje'o jehai'aty",
+       "filedelete-success": "'''$1''' oñembogue'akue",
+       "mimesearch": "Jeheka MIME",
+       "listredirects": "Ñembohapejey rysýi",
+       "unusedtemplates": "Tembiecharã ndojepurúiva",
+       "randompage": "Kuatiarogue oñembosako'íva",
+       "randomredirect": "Oimerãe ñembohapejeýpe jeho",
+       "statistics": "Papyrekokuaa",
+       "doubleredirects": "Ñembohapejey jo'apyre",
+       "brokenredirects": "Ñembohapejey hekopegua'ỹva",
+       "brokenredirects-edit": "jehaijey",
+       "brokenredirects-delete": "mboje'o",
+       "withoutinterwiki": "Kuatiarogue ndorekóiva interwiki",
+       "fewestrevisions": "Kuatiahai sa'ive ijehaijeýva",
+       "nbytes": "$1 bytes",
+       "ncategories": "$1 ñemohendakuéra",
+       "nlinks": "$1 joaju",
+       "nmembers": "$1 kuatiahai",
+       "nrevisions": "$1 revisiones",
+       "nviews": "$1 vistas",
+       "lonelypages": "Kuatiarogue ityre'ỹva",
+       "uncategorizedpages": "Kuatiarogue oñemohenda'ỹva",
+       "uncategorizedcategories": "Ñemohenda noñemohendáiva",
+       "uncategorizedimages": "Ta'ãnga ne'ĩrã oñemohendáva",
+       "uncategorizedtemplates": "Tembiecharã noñemohendáiva",
+       "unusedcategories": "Ñemohenda ojepuru'ỹva",
+       "unusedimages": "Ta'ãnga ndojepurúiva",
+       "wantedcategories": "Ñemohenda oñekotevẽva",
+       "wantedpages": "Kuatiarogue oñekotevẽva",
+       "mostlinked": "Kuatiahai ojoaju hetavéva",
+       "mostlinkedcategories": "Ñemohenda ojoaju hetavéva",
+       "mostlinkedtemplates": "Tembiecharã ojoaju hetavéva",
+       "mostcategories": "Kuatiarogue iñemohenda hetavéva",
+       "mostimages": "Ta'ãnga ojepuruvéva",
+       "mostrevisions": "Kuatiahai hetave ijehaijeýva",
+       "prefixindex": "Kuatiarogue henondepyguáva",
+       "shortpages": "Kuatiarogue mbykýva",
+       "longpages": "Kuatiarogue ipukúva",
+       "deadendpages": "Kuatiarogue ñesẽ'ỹva",
+       "protectedpages": "Kuatiarogue oñeñangarekóva",
+       "listusers": "Puruhára rysýi",
+       "newpages": "Kuatiarogue ipyahúva",
+       "newpages-username": "Hero",
+       "ancientpages": "Kuatiahai hi'arevéva",
+       "move": "Guerova",
+       "movethispage": "Guerova kuatiarogue",
+       "booksources": "Heñóiva kuatiañe'ẽme",
+       "log": "Ñemboguapypyre",
+       "allpages": "Opaite kuatiarogue",
+       "nextpage": "Kuatia rogue upeigua($1)",
+       "prevpage": "Kuatia rogue mboyvegua ($1)",
+       "allpagesfrom": "Ehechauka kuatia rogue oñepyrũva:   -pe",
+       "allpagesto": "Ehechauka kuatia rogue opáva:  -pe",
+       "allarticles": "Opa kuatia rogue",
+       "allinnamespace": "Opa kuatia rogue (pa'ũ $1)",
+       "allpagessubmit": "Hechauka",
+       "categories": "Ñemohendakuéra",
+       "listusers-submit": "Hechauka",
+       "emailuser": "Tojeguerahauka ñe'ẽveve ko puruhárape",
+       "emailpage": "Pareha eleytrónico",
+       "emailmessage": "Marandu",
+       "watchlist": "Tapykueho rysýi",
+       "mywatchlist": "Tapykueho rysýi",
+       "watch": "Ñangareko",
+       "dellogpage": "Ñemboguepyre ñonagatupy",
+       "deletionlog": "ñemboguepyre ñonagatupy",
+       "rollback_short": "Embojevy",
+       "rollbacklink": "Embojevy",
+       "prot_1movedto2": "[[$1]] oñembohasa [[$2]]-pe",
+       "protect-text": "Puedes ver y modificar el nivel de protección de la página '''$1'''.",
+       "undeletedrevisions": "$1 ediciones restauradas",
+       "undeletedrevisions-files": "$1 ediciones y $2 archivos restaurados",
+       "undeletedfiles": "$1 archivos restaurados",
+       "undelete-search-submit": "Heka",
+       "namespace": "Téra rendagua:",
+       "invert": "Toñembo'ovývo mba'eporavopyre",
+       "blanknamespace": "(Tenondeguáva)",
+       "contributions": "Puruhára mba'emoĩmbyre",
+       "mycontris": "Che mba'emoĩmbyre",
+       "sp-contributions-search": "Heka mba'emoĩmbyre",
+       "sp-contributions-submit": "Heka",
+       "whatlinkshere": "Oñembojoajukuaáva ko'ápe",
+       "whatlinkshere-title": "Kuatiarogue ojoajúva \"$1\" rehe",
+       "whatlinkshere-page": "Kuatiarogue:",
+       "linkshere": "Ko'ã kuatiarogue ojoaju '''[[:$1]]''' rehe:",
+       "whatlinkshere-prev": "mboyvegua $1",
+       "whatlinkshere-next": "upeigua $1",
+       "whatlinkshere-links": "← joajukuéra",
+       "blockip": "Ejoko puruhára",
+       "ipblocklist": "IP mbohape rysýi imbotypyréva",
+       "ipblocklist-submit": "Heka",
+       "blocklink": "ejoko",
+       "contribslink": "mba'emoĩmbyre",
+       "blocklogtext": "Esto es un registro de bloqueos y desbloqueos de usuarios. Las direcciones bloqueadas automáticamente no aparecen aquí. Consulte la [[Special:BlockList|IP mbohape rysýi imbotypyréva]] para ver la lista de prohibiciones y bloqueos actualmente vigente.",
+       "movearticle": "Guerova kuatiarogue",
+       "move-watch": "Toñeñangareko ko tembiapóre",
+       "movepagebtn": "Guerova kuatiarogue",
+       "revertmove": "embojevy",
+       "delete_and_move": "Mboje'o ha guerova",
+       "export": "Kuatiarogue ñemondo",
+       "allmessages": "Opaite marandu MediaWikigua",
+       "import-revision-count": "$1 revisiones",
+       "import-logentry-upload-detail": "$1 revisiones",
+       "import-logentry-interwiki-detail": "$1 revisiones desde $2",
+       "tooltip-pt-userpage": "Che puruhárakuatia",
+       "tooltip-pt-mytalk": "Che kuatiarogue myangekõi",
+       "tooltip-pt-preferences": "Che mbohoryha",
+       "tooltip-pt-mycontris": "Tysỹi che mba'emoĩmbyre",
+       "tooltip-ca-move": "Guerova kuatiarogue",
+       "tooltip-p-logo": "Ape",
+       "tooltip-n-mainpage": "Eho ijapépe",
+       "spamprotectiontitle": "Filtro de protección contra spam",
+       "spamprotectiontext": "La página que intentas guardar ha sido bloqueada por el filtro de spam. Esto se debe probablemente a alguno de los un enlaces externos incluidos en ella.",
+       "spamprotectionmatch": "El siguiente texto es el que activó nuestro filtro ''anti-spam'' (contra la publicidad no solicitada): $1",
+       "spambot_username": "Limpieza de spam de MediaWiki",
+       "spam_reverting": "Revirtiendo a la última versión que no contenga enlaces a $1",
+       "spam_blanking": "Todas las revisiones contienen enlaces a $1, blanqueando",
+       "file-info": "tamaño de jehai'aty: $1; tipo MIME: $2",
+       "newimages": "Ta'ãnga pyahu renda",
+       "ilsubmit": "Jeheka",
+       "namespacesall": "opaite",
+       "monthsall": "opaite",
+       "autosumm-new": "Kuatiarogue ipyahúva: $1",
+       "watchlistedit-normal-title": "Moambue tapykueho rysýi",
+       "watchlistedit-normal-submit": "Mboje'o kuatiarogue",
+       "watchlistedit-normal-done": "$1 páginas han sido borradas de tu lista de seguimiento:",
+       "watchlistedit-raw-titles": "Kuatiarogue:",
+       "watchlistedit-raw-added": "Se han añadido $1 páginas:",
+       "watchlistedit-raw-removed": "$1 páginas han sido borradas:",
+       "version": "Mba'ereko",
+       "specialpages": "Kuatiarogue hekochĩchĩva"
 }
index 8d7786e..bdd92b3 100644 (file)
        "search-suggest": "mhonnunk sodi: $1",
        "searchrelated": "sombondit",
        "searchall": "soglle",
-       "showingresultsheader": "{{PLURAL:$5|'''$3''' hantlem '''$1''' porinam|'''$3''' hantlim '''$1 - $2''' porinam}}, '''$4''' haka",
        "search-nonefound": "Tujea sodak mell khata toslem kai porinam nan.",
        "preferences": "Posondeo",
        "mypreferences": "Posonti",
        "pager-older-n": "{{PLURAL:$1|adlem 1|adlim $1}}",
        "booksources": "Pustokachem mull",
        "booksources-search-legend": "Pustokachim mullam sod",
-       "booksources-go": "Fuddem voch",
        "speciallogtitlelabel": "Vishoi vo vapurpi:",
        "log": "Sotram",
        "allpages": "Sogllim panam",
        "unwatch": "Nodor kadd",
        "watchlist-details": "Tujea sadurvollerint {{PLURAL:$1|$1 pan asa|$1 panam asat}}, ulovpachim panam veglim mezonastanam.",
        "wlheader-showupdated": "Tujea fatle bhette san bodol'lean tim panam '''datt''' dakhoileant.",
-       "wlshowlast": "Xevottchim $1 voram $2 dis $3 dakhoi",
+       "wlshowlast": "Xevottchim $1 voram $2 dis  dakhoi",
        "watchlist-options": "Sadurvollericheo poryay",
        "watching": "Disht dovortanv...",
        "unwatching": "Disht kaddthanv...",
        "metadata": "Metadata",
        "metadata-help": "Hea failin anikui mahiti asa, hi fail korunk uzar kel'le digital camera vo scanner sun tem aila zait.\nZori tor hi failik bodol'lam zalear kai mahiti bodololem failik sarkem mell khaina zait.",
        "metadata-fields": "Metadata chovkott konsollttoch, hea sondexant metadata molleantlea murtipanachea dakhovnnent aspav astolo.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
-       "watchlistall2": "soglle",
        "namespacesall": "sogllem",
        "monthsall": "sogllem",
        "watchlisttools-view": "Sombondhi bodlopam polloi",
index f0c6be3..cc62704 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Bleakgh",
-            "Jocke Pirat",
-            "Michawiki",
-            "Node ue",
-            "Sajasazi (on got.wikipedia.org)",
-            "Zylbath"
-        ]
-    },
-    "underline-always": "Sinteino",
-    "underline-never": "Niu",
-    "sunday": "Sunnonsdags",
-    "monday": "Meninsdags",
-    "tuesday": "Tiwisdags",
-    "wednesday": "Midiwiko",
-    "thursday": "Þeiƕonsdags",
-    "friday": "Fraujonsdags",
-    "saturday": "𐌸𐍅𐌰𐌷𐌻𐌹𐍃𐌳𐌰𐌲𐍃",
-    "sun": "𐍃𐌿𐌽",
-    "mon": "𐌼𐌴𐌽",
-    "tue": "𐌰𐍂𐌴",
-    "wed": "𐍅𐍉𐌳",
-    "thu": "𐍀𐌰𐌹",
-    "fri": "𐍆𐍂𐌹",
-    "sat": "𐍃𐌰𐌼",
-    "january": "𐌰𐍆𐍄𐌿𐌼𐌰 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
-    "february": "𐍆𐌰𐌽𐌹𐌼𐌴𐌽𐍉𐌸𐍃",
-    "march": "𐌺𐌰𐌻𐌳𐌼𐌴𐌽𐍉𐌸𐍃",
-    "april": "𐌲𐍂𐌰𐍃𐌼𐌴𐌽𐍉𐌸𐍃",
-    "may_long": "𐌱𐌻𐍉𐌼𐌰𐌼𐌴𐌽𐍉𐌸𐍃",
-    "june": "𐍅𐌰𐍂𐌼𐌼𐌴𐌽𐍉𐌸𐍃",
-    "july": "𐌷𐌰𐍅𐌹𐌼𐌴𐌽𐍉𐌸𐍃",
-    "august": "𐌰𐍃𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐍃",
-    "september": "𐌰𐌺𐍂𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐍃",
-    "october": "𐍅𐌴𐌹𐌽𐌼𐌴𐌽𐍉𐌸𐍃",
-    "november": "𐍆𐍂𐌿𐌼𐌰 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
-    "december": "𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
-    "january-gen": "𐌰𐍆𐍄𐌿𐌼𐌹𐌽𐍃 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
-    "february-gen": "𐍆𐌰𐌽𐌹𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
-    "march-gen": "𐌺𐌰𐌻𐌳𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
-    "april-gen": "𐌲𐍂𐌰𐍃𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
-    "may-gen": "𐌱𐌻𐍉𐌼𐌰𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
-    "june-gen": "𐍅𐌰𐍂𐌼𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
-    "july-gen": "𐌷𐌰𐍅𐌹𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
-    "august-gen": "𐌰𐍃𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
-    "september-gen": "𐌰𐌺𐍂𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
-    "october-gen": "𐍅𐌴𐌹𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
-    "november-gen": "𐍆𐍂𐌿𐌼𐌹𐌽𐍃 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
-    "december-gen": "𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
-    "jan": "𐌰𐍆𐍄",
-    "feb": "𐍆𐌰𐌽",
-    "mar": "𐌺𐌰𐌻",
-    "apr": "𐌲𐍂𐌰",
-    "may": "𐌱𐌻𐍉",
-    "jun": "𐍅𐌰𐍂",
-    "jul": "𐌷𐌰𐍅",
-    "aug": "𐌰𐍃𐌰",
-    "sep": "𐌰𐌺𐍂",
-    "oct": "𐍅𐌴𐌹",
-    "nov": "𐍆𐍂𐌿",
-    "dec": "𐌾𐌹𐌿",
-    "pagecategories": "{{PLURAL:$1|𐌷𐌰𐌽𐍃𐌰|𐌷𐌰𐌽𐍃𐍉𐍃}}",
-    "category_header": "𐍃𐌴𐌹𐌳𐍉𐍃 𐌹𐌽𐌽 𐌺𐌿𐌽𐌾𐌰 \"$1\"",
-    "subcategories": "Dalaþkunjos",
-    "category-media-header": "𐌼𐌴𐌳𐌾𐌰 𐌹𐌽𐌽 𐌺𐌿𐌽𐌾𐌰 \"$1\"",
-    "hidden-categories": "{{PLURAL:$1|𐍆𐌿𐌻𐌲𐌹𐌽𐍃 𐌺𐌰𐍄𐌴𐌲𐍉𐍂𐌹|𐍆𐌿𐌻𐌲𐌹𐌽𐌰𐌹 𐌺𐌰𐍄𐌴𐌲𐍉𐍂𐌾𐍉𐍃}}",
-    "about": "𐌿𐍆𐌰𐍂",
-    "article": "𐍃𐌰𐌸𐍃𐍃𐌴𐌹𐌳𐍉",
-    "newwindow": "(𐌰𐌽𐌳𐌷𐌿𐌻𐌾𐌹𐌸 𐌹𐌽𐌽 𐌽𐌹𐌿𐌾𐌰 𐌰𐌿𐌲𐌰𐌳𐌰𐌿𐍂𐍉)",
-    "cancel": "𐌷𐌰𐌻𐍄𐍃",
-    "moredotdotdot": "𐌼𐌰𐌹𐍃...",
-    "mypage": "𐌼𐌴𐌹𐌽 𐍃𐌴𐌹𐌳𐍉",
-    "mytalk": "𐌼𐌴𐌹𐌽𐌰 𐌼𐌰𐌸𐌻𐌴𐌹",
-    "navigation": "𐍅𐌹𐌲𐌰𐍄𐌰𐌿𐌷𐍄𐍃",
-    "and": "𐌾𐌰𐌷",
-    "qbfind": "𐍃𐍉𐌺𐌴𐌹𐌸",
-    "qbedit": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
-    "qbmyoptions": "𐌼𐌴𐌹𐌽𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
-    "vector-action-delete": "𐍄𐌰𐌹𐍂𐌰𐌽",
-    "vector-view-create": "𐍃𐌺𐌰𐍀𐌾𐌰𐌽",
-    "vector-view-edit": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
-    "vector-view-history": "𐍃𐌰𐌹𐍈𐌰𐌽 𐍅𐌰𐌿𐍂𐌸𐌰𐌽𐌽𐌰",
-    "vector-view-view": "𐌰𐌽𐌰𐌺𐌿𐌽𐌽𐌰𐌹𐍃",
-    "vector-view-viewsource": "𐍃𐌰𐌹𐍈𐌹𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
-    "actions": "𐍅𐌰𐌿𐍂𐍃𐍄𐍅𐌴𐌹𐌽𐍃",
-    "namespaces": "𐍃𐌴𐌹𐌳𐍉𐍃𐍄𐌰𐌸𐌴𐌹𐍃",
-    "variants": "𐌼𐌹𐍃𐍃𐌰𐌻𐌴𐌹𐌽𐍃",
-    "errorpagetitle": "𐍆𐌰𐌹𐍂𐌹𐌽𐌰 𐌳𐍅𐌰𐌻𐌹𐍃",
-    "returnto": "𐌲𐌰𐍅𐌰𐌽𐌳𐌾𐌰𐌽 𐌰𐍄 $1.",
-    "tagline": "𐍆𐍂𐌰𐌼 {{SITENAME}}",
-    "help": "𐌷𐌹𐌻𐍀𐌰",
-    "search": "𐍃𐍉𐌺𐌾𐌰𐌽",
-    "searchbutton": "𐍃𐍉𐌺𐌾𐌰𐌽",
-    "go": "𐌲𐌰𐌲𐌲𐌰",
-    "searcharticle": "𐌰𐍆𐌲𐌰𐌲𐌲𐌰𐌽",
-    "history": "𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐍉",
-    "history_short": "𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
-    "printableversion": "𐍅𐍂𐌴𐌹𐍄𐌼𐌰𐌷𐍄𐌴𐌹𐌲 𐍃𐌴𐌹𐌳𐍉",
-    "permalink": "𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉 𐍃𐍄𐌰𐌽𐌳𐌰𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐌰",
-    "view": "Saíhvan",
-    "edit": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
-    "create": "𐍃𐌺𐌰𐍀𐌾𐌰𐌽",
-    "editthispage": "𐌼𐌰𐌹𐌳𐌾𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉",
-    "create-this-page": "Skapja þo seido",
-    "delete": "𐍄𐌰𐌹𐍂𐌰𐌽",
-    "deletethispage": "𐍄𐌰𐌹𐍂𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉",
-    "protect": "𐌱𐌰𐌹𐍂𐌲𐌰𐌽",
-    "protect_change": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
-    "protectthispage": "Baírga þo siedo",
-    "unprotect": "𐌽𐌹𐌱𐌰𐌹𐍂𐌲𐌰",
-    "unprotectthispage": "Nibaírga þo siedo",
-    "newpage": "𐌽𐌹𐌿𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
-    "talkpage": "𐌼𐌰𐌸𐌻𐌴𐌹𐍃𐌴𐌹𐌳𐍉",
-    "talkpagelinktext": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰",
-    "specialpage": "𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐍃",
-    "personaltools": "𐍅𐌰𐌹𐍂𐌻𐌴𐌹𐌺𐍃 𐌱𐍂𐌿𐌺𐍅𐌰𐌹𐌷𐍄𐍃",
-    "talk": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰",
-    "views": "𐌷𐌹𐍅𐌾𐍉𐍃",
-    "toolbox": "𐍄𐌰𐌿𐌹 𐌰𐍂𐌺𐌰",
-    "otherlanguages": "𐌰𐌽𐌸𐌰𐍂 𐍂𐌰𐌶𐌳𐍉𐍃",
-    "redirectedfrom": "(𐌽𐌰𐌿𐌸𐌾𐌰𐌽 𐍆𐍂𐌰𐌼𐌹𐍃 $1)",
-    "redirectpagesub": "𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉",
-    "lastmodifiedat": "𐌸𐌰𐍄𐌰 𐍃𐌴𐌹𐌳𐍉 𐍃𐌹𐌽𐌳 𐌼𐌰𐌽𐌰𐌲𐌹𐍃𐍄𐍃 𐌽𐌹𐌿𐌾𐌰 𐌼𐌰𐌹𐌳𐌾𐌹𐌸𐍃 ($2) ($1)",
-    "jumpto": "𐌲𐌰𐌲𐌲𐌰𐌽 𐌰𐍄:",
-    "jumptonavigation": "𐍃𐌴𐌹𐌳𐍉𐌲𐌰𐍅𐌹𐍃𐍃",
-    "jumptosearch": "𐍃𐍉𐌺𐌴𐌹𐌸",
-    "aboutsite": "𐍆𐍂𐌰𐌼 {{SITENAME}}",
-    "aboutpage": "Project:𐌿𐍆𐌰𐍂",
-    "copyrightpage": "{{ns:project}}:𐌼𐌰𐌽𐌻𐌴𐌹𐌺𐌰𐍅𐌹𐍄𐍉𐌸𐌰",
-    "currentevents": "𐌽𐌹𐌿𐌾𐌰 𐍅𐌰𐌹𐌷𐍄𐍃",
-    "currentevents-url": "Project:𐌽𐌹𐌿𐌾𐌰 𐍅𐌰𐌹𐌷𐍄𐍃",
-    "disclaimers": "𐍅𐌰𐌳𐌾𐍉𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
-    "disclaimerpage": "Project:𐍅𐌰𐌳𐌾𐌹𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
-    "edithelp": "𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌷𐌹𐌻𐍀𐌰",
-    "mainpage": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
-    "mainpage-description": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
-    "portal": "𐌱𐌰𐌿𐍂𐌲𐌹𐍃 𐌲𐌰𐍅𐌹",
-    "portal-url": "Project:𐌱𐌰𐌿𐍂𐌲𐌹𐍃 𐌲𐌰𐍅𐌹",
-    "privacy": "𐍃𐌿𐌽𐌳𐍂𐌰𐍅𐌿𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
-    "privacypage": "Project:𐍃𐌿𐌽𐌳𐍂𐌰𐍅𐌴𐌹𐌽𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
-    "retrievedfrom": "𐌲𐌰𐌽𐌰𐌼 𐍆𐍂𐌰𐌼 \"$1\"",
-    "youhavenewmessages": "𐌸𐌿 𐌷𐌰𐌱𐌹𐍃 $1 ($2).",
-    "editsection": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
-    "editold": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
-    "editlink": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
-    "viewsourcelink": "𐍃𐌰𐌹𐍈𐌹𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
-    "editsectionhint": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌳𐌰𐌹𐌻: $1",
-    "toc": "𐌹𐌽𐌽𐌰𐌽𐌰",
-    "showtoc": "𐌰𐌿𐌲𐌾𐌰",
-    "hidetoc": "𐍆𐌹𐌻𐌷𐌰𐌽",
-    "site-rss-feed": "$1 RSS Miþnatifodjan",
-    "site-atom-feed": "$1 𐌰𐍄𐍉𐌼 𐌼𐌹𐌸𐌽𐌰𐍄𐌹𐍆𐍉𐌳𐌾𐌰𐌽",
-    "page-atom-feed": "\"$1\" 𐌰𐍄𐍉𐌼 𐍂𐌹𐌽𐌽𐍉",
-    "red-link-title": "$1 (𐍃𐌴𐌹𐌳𐍉 𐍃𐌹𐌽𐌳 𐌽𐌹𐍃𐍄)",
-    "nstab-main": "𐍃𐌴𐌹𐌳𐍉",
-    "nstab-user": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉",
-    "nstab-special": "𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉",
-    "nstab-project": "𐍂𐌴𐌹𐌺𐌹𐍃𐌴𐌹𐌳𐍉",
-    "nstab-image": "𐍆𐌴𐌹𐌻𐌰",
-    "nstab-template": "𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃",
-    "nstab-help": "𐌷𐌹𐌻𐍀𐌰",
-    "nstab-category": "𐌷𐌰𐌽𐍃𐌰",
-    "missing-article": "𐍃𐌰 𐌳𐌰𐍄𐌰𐌱𐌿𐍃 𐌽𐌹 𐌲𐌰𐌽𐌰𐌼 𐌸𐌰𐌽𐌰 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌽 𐌴𐌹 𐌹𐍄𐌰 𐍃𐌺𐌰𐌻 𐌱𐌹𐌲𐌹𐍄𐌰𐌽: \"$1\" $2\n\n(The data base did not find the text of a page that it should have found, named \"$1\" $2.\n\nThis is usually caused by following an outdated diff or history link to a page that has been deleted.\n\nIf this is not the case, you may have found a bug in the software.\nPlease report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.)",
-    "viewsource": "𐍃𐌰𐌹𐍈𐌹𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
-    "yourname": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐌽𐌰𐌼𐍉:",
-    "yourpassword": "𐌰𐌽𐌰𐌻𐌰𐌿𐌲𐌽𐍃 𐍅𐌰𐌿𐍂𐌳𐌰:",
-    "login": "Atgaggan",
-    "nav-login-createaccount": "𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽 / 𐌲𐌰𐌻𐌰𐌽𐌲𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
-    "userlogin": "Atgaggan / gaskapjan niutandis",
-    "logout": "𐌻𐌴𐌹𐌸𐌰𐌽",
-    "userlogout": "𐌻𐌴𐌹𐌸𐌰𐌽",
-    "nologinlink": "Gaskapjan þein niutandis",
-    "createaccount": "𐌲𐌰𐌻𐌰𐌲𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
-    "gotaccount": "Habiþ þu niutandis? '''$1'''",
-    "gotaccountlink": "Atgaggan",
-    "loginlanguagelabel": "Razda: $1",
-    "bold_sample": "𐌰𐌱𐍂𐍃 𐌱𐍉𐌺𐌰",
-    "bold_tip": "𐌰𐌱𐍂 𐍅𐌰𐌿𐍂𐌳𐌰",
-    "italic_sample": "𐍅𐍂𐌰𐌹𐌵𐍃 𐍅𐌰𐌿𐍂𐌳𐌰",
-    "italic_tip": "𐌳𐍂𐌹𐌿𐍃𐍉 𐌱𐍉𐌺𐌰",
-    "link_sample": "𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐌱𐌰𐌽𐌳𐌹 𐌽𐌰𐌼𐍉",
-    "link_tip": "𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐌱𐌰𐌽𐌳𐌹 𐌹𐌽𐌽𐌰𐌽𐌰",
-    "extlink_sample": "http://www.example.com 𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐌳𐌰𐌽𐌳𐌹 𐌽𐌰𐌼𐍉",
-    "extlink_tip": "Uta táikjabandi (maúdjan http://)",
-    "headline_sample": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍅𐌰𐌿𐍂𐌳𐌰",
-    "headline_tip": "𐌷𐌰𐌿𐌷𐍃 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐌱𐍉𐌺𐌰 •𐌱•",
-    "nowiki_sample": "𐍃𐌰𐍄𐌾𐌴𐌹 𐌿𐌽𐍃𐌽𐌴𐌹𐌸𐌾𐌰𐌽𐌳𐍃 𐍄𐌴𐌺𐍃𐍄 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌼 𐌷𐌹𐍄",
-    "nowiki_tip": "𐌿𐌽𐍅𐌹𐍄𐌾𐌹𐍃 𐍅𐌹𐌺𐌹𐍃𐌽𐌴𐌹𐌸𐌾𐌰𐌽𐌳𐍃",
-    "image_tip": "𐌹𐌽𐌽𐌱𐍉𐌳𐌰𐌽𐍃 𐍆𐌴𐌹𐌻𐌰",
-    "media_tip": "𐍄𐌰𐌹𐌺𐌾𐌰𐌱𐌰𐌽𐌳𐌾𐌹𐍃 𐍆𐌴𐌹𐌻𐌰𐌽𐌹𐍃",
-    "sig_tip": "𐌿𐌽𐌳𐌰𐍂𐌼𐌴𐌻 𐌸𐌴𐌹𐌽𐌰 𐌼𐌹𐌸 𐍃𐍄𐌿𐌽𐌳𐌰𐌼𐌴𐌻𐌰",
-    "hr_tip": "𐍂𐌰𐌹𐌷𐍄𐍃𐌱𐌰𐌿𐍂𐌳 (𐌱𐍂𐌿𐌺𐌾𐌰𐌽 𐌼𐌹𐌸 𐌽𐌹𐌿𐍆𐌰𐍂𐌿𐍃𐍃𐌿𐍃)",
-    "summary": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽𐍃𐍀𐌹𐌻𐌻𐍉𐌽:",
-    "subject": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐌱𐍉𐌺𐌰:",
-    "minoredit": "𐍃𐌰 𐌹𐍃𐍄 𐌻𐌴𐌹𐍄𐌹𐌻𐌰 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
-    "watchthis": "𐍅𐌰𐍂𐌰𐌽 𐍃𐌴𐌹𐌳𐍉",
-    "savearticle": "𐌼𐌴𐌻𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
-    "preview": "𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰 𐍃𐌴𐌹𐌳𐍉",
-    "showpreview": "𐍅𐌹𐍄𐌰𐌽 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰",
-    "showdiff": "𐍅𐌹𐍄𐌰𐌽 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
-    "newarticle": "(Niu)",
-    "updated": "(Nuwisan)",
-    "previewnote": "'''𐍃𐌰𐌷 𐌹𐍃𐍄 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰. 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌲𐌰𐌼𐌴𐌻𐌾𐌹𐌸 𐌽𐌹 𐌰𐍆 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐍃!'''",
-    "editing": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1",
-    "editingsection": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1 (𐍆𐌴𐍂𐌰)",
-    "editingcomment": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1 (𐍂𐍉𐌳𐌾𐌰𐍆𐌴𐍂𐌰)",
-    "yourdiff": "Missalieks",
-    "template-protected": "(𐌲𐌰𐌱𐌰𐌹𐍂𐌲𐌾𐌰𐌽)",
-    "template-semiprotected": "(halb-gabaírgjan)",
-    "post-expand-template-inclusion-warning": "'''𐌷𐍅𐍉𐍄𐌾𐌰𐌽𐌳𐍃:''' 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃 𐍃𐌹𐌽𐌳 𐌿𐍆𐌰𐍂𐌼𐌹𐌺𐌹𐌻𐍃. 𐍃𐌿𐌼𐍃 𐍆𐌰𐌿𐍂𐌴𐌼𐌴𐌻𐌴𐌹𐌽𐍉𐍃 𐌽𐌹 𐌼𐌰𐌲 𐍅𐌹𐍃𐌰𐌽 𐌸𐌰𐍂",
-    "post-expand-template-inclusion-category": "𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌸𐌰𐍂 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃 𐍃𐌹𐌽𐌳 𐌿𐍆𐌰𐍂𐌼𐌹𐌺𐌹𐌻𐍃",
-    "currentrev": "𐌽𐌿 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
-    "currentrev-asof": "𐌰𐍆𐍄𐌿𐌼𐍃𐍄𐍃 𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐍆𐍂𐌰𐌼 $1",
-    "revisionasof": "𐌲𐌰𐌼𐌰𐌳𐌾𐌴𐌹 𐍆𐍂𐌰𐌼 $1",
-    "revision-info": "Máideins fram $1 bi $2",
-    "previousrevision": "←𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
-    "nextrevision": "Iftuma máideins→",
-    "currentrevisionlink": "𐌽𐌿𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
-    "cur": "𐌽𐌿",
-    "next": "𐌹𐍆𐍄𐌿𐌼𐌰",
-    "last": "𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍃",
-    "page_first": "frumists",
-    "page_last": "𐍃𐍀𐌴𐌳𐌿𐌼𐌹𐍃𐍄𐍃",
-    "histfirst": "𐍆𐌰𐌿𐍂𐌸𐌹𐍃",
-    "histlast": "𐍃𐍀𐌴𐌳𐌿𐌼𐌹𐍃𐍄𐍃",
-    "history-feed-item-nocomment": "$1 at $2",
-    "revdel-restore": "𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌹𐍃 𐌰𐌽𐌰𐍃𐌹𐌿𐌽𐌼𐌰𐌷𐍄𐌴𐌹𐌲𐍃",
-    "revertmerge": "𐌿𐌽𐌲𐌰𐍄𐌹𐌻𐍉𐍃",
-    "history-title": "𐌰𐍂𐌹𐍃𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌰𐍆 \"$1\"",
-    "lineno": "𐌱𐍉𐌺𐌰𐍂𐌹𐌲𐌹𐌻𐍉 $1:",
-    "editundo": "𐌽𐌹𐌿𐍃𐌺𐌰𐍀𐌾𐌰𐌽",
-    "searchresults": "𐍃𐍉𐌺𐌽𐌹𐍃 𐍄𐌰𐌿𐌾𐍉𐍃",
-    "searchresults-title": "𐍃𐍉𐌺𐌽𐌹𐍃 𐍄𐌰𐌿𐌾𐍉𐍃 𐍆𐌰𐌿𐍂 \"$1\"",
-    "prevn": "𐌰𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|$1}}",
-    "nextn": "𐌹𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|$1}}",
-    "prevn-title": "𐍆𐌰𐌹𐍂𐌽𐌰 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}}",
-    "nextn-title": "𐌰𐍆𐍄𐌿𐌼𐌰 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}}",
-    "shown-title": "𐌰𐌿𐌾𐌰𐌽𐌳 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}} 𐌸𐌰𐌹𐍂𐌷 𐍃𐌴𐌹𐌳𐍉",
-    "viewprevnext": "𐍃𐌹𐌿𐌽𐌴𐌹𐍃 ($1 {{int:pipe-separator}} $2) ($3)",
-    "searchmenu-new": "'''𐍃𐌺𐌰𐍀𐌾𐌹𐍃 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉𐌽 \"[[:$1]]\" 𐌸𐌹𐌶𐍉𐍃 𐍅𐌹𐌺𐌾𐍉𐍃!'''",
-    "searchprofile-articles": "𐌲𐌰𐌷𐌰𐌱𐌾𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
-    "searchprofile-project": "𐌷𐌹𐌻𐍀𐍉𐍃 𐌾𐌰𐌷 𐍀𐍂𐍉𐍃𐌾𐌴𐌺𐍄𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
-    "searchprofile-images": "𐌼𐌰𐌽𐌰𐌲𐍃𐌼𐌴𐌳𐌹𐌰",
-    "searchprofile-everything": "𐌰𐌻𐌻",
-    "searchprofile-advanced": "𐍆𐌰𐌹𐍂𐍂𐌰𐍆𐍂𐌰𐌼𐌰",
-    "searchprofile-articles-tooltip": "𐍃𐍉𐌺 𐌹𐌽𐌽𐌰 $1",
-    "searchprofile-project-tooltip": "𐍃𐍉𐌺𐌾𐌹𐍃 𐌹𐌽𐌽𐌰 $1",
-    "searchprofile-images-tooltip": "𐍃𐍉𐌺𐌾𐌹𐍃 𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
-    "searchprofile-everything-tooltip": "𐍃𐍉𐌺𐌾𐌹𐍃 𐌰𐌻𐌻 𐌲𐌰𐌷𐌰𐌱𐌾𐍉𐍃 (𐌸𐌹𐌶𐌴𐌴𐌹 𐌹𐍃𐍄 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌹𐍃)",
-    "searchprofile-advanced-tooltip": "𐍃𐌺𐍉𐌾𐌹𐍃 𐌹𐌽𐌽𐌰 𐍃𐌹𐌻𐌱𐌰𐍃𐌺𐌰𐍀𐌹𐌸𐍃 𐌽𐌰𐌼𐌰𐌽𐍃𐍄𐌰𐌸",
-    "search-result-size": "$1 ({{PLURAL:$2|•𐌰• 𐍅𐌰𐌿𐍂𐌳|•$2• 𐍅𐌰𐌿𐍂𐌳𐌰}})",
-    "search-redirect": "(𐌰𐍆𐍄𐍂𐌰𐍅𐌴𐌹𐍄𐍃 𐍆𐍂𐌰𐌼 𐌸𐌰𐌼𐌼𐌰 $1)",
-    "search-section": "(𐍆𐌴𐍂𐌰 $1)",
-    "search-suggest": "𐍄𐌰𐌹𐌺𐌽𐌹𐌳𐌰 𐌸𐌿: $1",
-    "searchall": "𐌰𐌻𐌻𐍃",
-    "showingresultsheader": "{{PLURAL:$5|𐍄𐌰𐌿𐌹 '''$1''' 𐌸𐌹𐍃 '''$3'''|𐍄𐌰𐌿𐌾𐍉𐍃 '''$1 - $2''' 𐌸𐌹𐍃 '''$3'''}} 𐌱𐌹 𐌸𐌰𐌼𐌼𐌰 '''$4'''",
-    "search-nonefound": "𐌽𐌹 𐌰𐌹𐌽𐌷𐌿𐌽 𐌲𐌰𐌲𐌹𐌱𐌾𐍉 𐍆𐌿𐌻𐌻𐌾𐌹𐌸 𐍃𐍉𐌺𐌴𐌹𐌽",
-    "powersearch-legend": "𐍃𐍉𐌺𐌴𐌹𐌸",
-    "powersearch-redir": "𐍄𐌰𐌻𐌰 𐌰𐍆 𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐍃𐌴𐌹𐌳𐍉𐍃",
-    "preferences": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃",
-    "mypreferences": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰",
-    "prefs-skin": "Seidofill",
-    "skin-preview": "Faúrsaiƕa",
-    "saveprefs": "Melja",
-    "searchresultshead": "Sokeiþ",
-    "grouppage-sysop": "{{ns:project}}:𐍃𐌴𐌹𐌳𐍉𐍆𐌰𐌸𐍃",
-    "rightslog": "Niutandis stutjanlog",
-    "nchanges": "$1 {{PLURAL:$1|máidein|máideins}}",
-    "recentchanges": "𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃",
-    "rcshowhideminor": "$1 lietila máideins",
-    "rcshowhidebots": "$1 bota",
-    "rcshowhideliu": "$1 niutandis",
-    "rcshowhideanons": "$1 gasteis",
-    "rcshowhidemine": "$1 mein máideins",
-    "diff": "𐌻𐌴𐌹𐌺𐍃",
-    "hist": "𐍆𐍂𐌼𐌵",
-    "hide": "𐍆𐌹𐌻𐌷𐌰𐌽",
-    "show": "𐌷𐌿𐌻𐌾𐌰𐌽",
-    "minoreditletter": "l",
-    "newpageletter": "N",
-    "boteditletter": "b",
-    "recentchangeslinked": "𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌻𐌹𐌴𐌺𐍃",
-    "recentchangeslinked-feed": "Máideinlieks",
-    "recentchangeslinked-toolbox": "𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌻𐌹𐌴𐌺𐍃",
-    "recentchangeslinked-summary": "𐍃𐍉 𐌹𐍃𐍄 𐌻𐌴𐌹𐍃𐍄𐌰 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍃 𐍃𐌺𐍉𐍀 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳 𐌿𐍃 𐌿𐍃𐍃𐌹𐌽𐌳𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽 (𐌰𐌹𐌸𐌸𐌰𐌿 𐌻𐌹𐌸𐌰𐌿𐍃 𐌿𐍃𐍃𐌹𐌽𐌳𐌰𐌹𐌶𐍉𐍃 𐌷𐌰𐌽𐍃𐍉𐍃). 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 [[Special:Watchlist|𐍅𐌹𐍄𐌰𐌽𐌳𐌻𐌴𐌹𐍃𐍄𐍉𐍃 𐌸𐌴𐌹𐌽𐍉𐍃]] 𐍃𐌹𐌽𐌳 '''𐌳𐌹𐌲𐍂𐍃𐍄𐌰𐍆𐍃'''.",
-    "upload": "𐌿𐍃𐌷𐌻𐌰𐌸𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
-    "uploadbtn": "Ushlaþaiþ Feilans",
-    "uploadlogpage": "Log af Ushlaþan",
-    "uploadedimage": "ushlaþiþ \"[[$1]]\"",
-    "watchthisupload": "Witan so seido",
-    "imgfile": "Feilans",
-    "listfiles": "Feilans tala",
-    "file-anchor-link": "𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
-    "filehist": "𐍆𐌴𐌹𐌻𐌰𐌽𐍃 𐌰𐌹𐍂𐌹𐍃",
-    "filehist-help": "𐌺𐌻𐌹𐌺𐍉𐍃 𐌰𐌽𐌰 𐌳𐌰𐍄𐌰𐌹/𐍈𐌴𐌹𐌻𐌰𐌹 𐍃𐌰𐌹𐍈𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽 𐍃𐍅𐌴 𐌰𐍄𐌰𐌿𐌲𐌾𐌹𐌳𐌰 𐍃𐌹𐌺 𐌸𐌰𐌽.",
-    "filehist-current": "𐌽𐌿",
-    "filehist-datetime": "𐍈𐌴𐌹𐌻𐌰",
-    "filehist-thumb": "𐍆𐍉𐍂𐍃𐌾𐌰𐌿",
-    "filehist-thumbtext": "𐍆𐍉𐍂𐍃𐌾𐌰𐌿 𐍆𐌰𐌿𐍂 𐌿𐍃𐌲𐌰𐌱𐌰 𐍆𐍂𐌰𐌼 $1",
-    "filehist-user": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
-    "filehist-dimensions": "𐍅𐌰𐌷𐍃𐍄𐌿𐍃",
-    "filehist-filesize": "Feilans wahstus",
-    "filehist-comment": "𐌻𐌴𐌹𐍄𐌻𐌰𐍃𐍀𐌹𐌻𐌻𐍉𐌽",
-    "imagelinks": "𐍆𐌴𐌹𐌻𐌹𐌽𐍃 𐌱𐍂𐌿𐌺𐌹𐍃",
-    "linkstoimage": "𐌰𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|𐍃𐍉 𐍃𐌴𐌹𐌳𐍉 𐌻𐌴𐌹𐌽𐌺𐍉𐌸|𐌸𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳}} 𐌸𐌹𐌶𐍉𐌶𐌿𐌷 𐍆𐌴𐌹𐌻𐍉𐍃",
-    "sharedupload-desc-here": "𐍃𐌰 𐍆𐌴𐌹𐌻𐌰 𐌹𐍃𐍄 𐍆𐍂𐌰𐌼 $1 𐌾𐌰𐌷 𐌼𐌰𐌲 𐍅𐌹𐍃𐌰𐌽 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐍃 𐍆𐍂𐌰𐌼 𐌰𐌻𐌾𐌰𐌹𐌼 𐍆𐌰𐌿𐍂𐌰𐍅𐌰𐌿𐍂𐍀𐍉𐌼.\n𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌾𐌰𐌽𐌳𐍃 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐌰𐌹 𐍆𐌴𐌹𐌻𐌰𐌽𐍃𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌾𐌰𐌽𐌳𐌹𐍃 𐌸𐌰𐍂 𐌹𐍃𐍄 𐌳𐌰𐌻𐌰𐌸𐌰 𐌿𐍃𐌲𐌹𐌱𐌰𐌽𐍃.",
-    "filedelete-submit": "Taíran",
-    "mimesearch": "MIME sokeiþ",
-    "listredirects": "𐍄𐌰𐌻𐌰 𐌰𐍆 𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐍃𐌴𐌹𐌳𐍉𐍃",
-    "randompage": "𐍃𐌻𐌿𐌼𐍀𐌼𐌰𐍃𐍃𐌹𐌲 𐍃𐌴𐌹𐌳𐍉",
-    "statistics": "𐍃𐌴𐌹𐌳𐍉𐍃𐍄𐌰𐍄𐌹𐍃𐍄𐌹𐌺",
-    "brokenredirects-edit": "(𐌼𐌰𐌹𐌳𐌾𐌰𐌽)",
-    "brokenredirects-delete": "(𐍄𐌰𐌹𐍂𐌰𐌽)",
-    "nbytes": "$1 {{PLURAL:$1|𐌱𐌰𐌹𐍄|𐌱𐌰𐌹𐍄𐌰}}",
-    "ncategories": "$1 {{PLURAL:$1|𐌺𐌿𐌽𐌾𐌰|𐌺𐌿𐌽𐌾𐍉𐍃}}",
-    "nlinks": "$1 {{PLURAL:$1|táikjanbandi|táikjanbandja}}",
-    "nmembers": "$1 {{PLURAL:$1|niutand|niutanda}}",
-    "wantedpages": "Gaírnedum seidam",
-    "shortpages": "𐌻𐌴𐌹𐍄𐌹𐌻𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
-    "longpages": "𐌻𐌰𐌲𐌲𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
-    "listusers": "𐍂𐌴𐌲𐌹𐍃𐍄𐍂𐌴𐍂𐌰𐌳𐌴 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌳𐍃",
-    "newpages": "𐌽𐌹𐌿𐌾𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
-    "move": "𐌽𐌰𐌼𐌾𐌰𐌽 𐌰𐍆𐍄𐍂𐌰",
-    "movethispage": "𐍃𐌺𐌹𐌿𐌱𐌰𐌽 𐍃𐌰 𐍃𐌴𐌹𐌳𐍉",
-    "specialloguserlabel": "Niutand:",
-    "speciallogtitlelabel": "Namo:",
-    "log": "𐌻𐍉𐌲𐌱𐍉𐌺𐍉𐍃",
-    "all-logs-page": "𐌰𐌻𐌻𐌰 𐌻𐍉𐌲𐍉𐍃",
-    "allpages": "𐌰𐌻𐌻𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐍃",
-    "alphaindexline": "$1 du $2",
-    "nextpage": "𐌹𐍆𐍄𐌿𐌼𐌰 𐍃𐌴𐌹𐌳𐍉 ($1)",
-    "prevpage": "𐌰𐍆𐍄𐌿𐌼𐌰 𐍃𐌴𐌹𐌳𐍉 ($1)",
-    "allarticles": "𐌰𐌻𐌾𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
-    "allpagessubmit": "𐌰𐍆𐌲𐌰𐌲𐌲𐌰𐌽",
-    "categories": "𐌺𐌿𐌽𐌾𐍉𐍃",
-    "linksearch-ns": "𐍃𐌴𐌹𐌳𐍉𐍆𐌴𐍂𐌰:",
-    "emailuser": "𐍃𐌰𐌽𐌳𐌾𐌰𐌽 𐌸𐍉 𐌽𐌹𐌿𐍄𐌰𐌽𐌳 𐌱𐍉𐌺𐍉𐌼",
-    "watchlist": "𐌼𐌴𐌹𐌽𐍉𐍃 𐍅𐌹𐍄𐌰𐌽𐌳𐍃𐌻𐌴𐌹𐍃𐍄𐌰",
-    "mywatchlist": "𐌼𐌴𐌹𐌽𐍉𐍃 𐍅𐌹𐍄𐌰𐌽𐌳𐍃𐌻𐌴𐌹𐍃𐍄𐌰",
-    "watch": "𐍅𐌰𐍂𐌰𐌽",
-    "watchthispage": "𐍅𐌰𐍂𐌰𐌽 𐍃𐌴𐌹𐌳𐍉",
-    "unwatch": "𐌽𐌹𐍅𐌰𐍂𐌰𐌽",
-    "watchlist-details": "{{PLURAL:$1|$1 seido|$1 seidona}} witáiþs inu maþleiseidam.",
-    "watching": "Wita...",
-    "unwatching": "Niwita...",
-    "created": "𐌲𐌰𐍃𐌺𐌰𐍀𐌾𐌰𐌽",
-    "deletepage": "𐍄𐌰𐌹𐍂𐌰 𐍃𐌴𐌹𐌳𐍉",
-    "delete-legend": "𐍄𐌰𐌹𐍂𐌰𐌽",
-    "actioncomplete": "𐍅𐌰𐍃𐌿𐌷 𐌹𐍄𐌰 𐌲𐌰𐌿𐍃𐍄𐌹𐌿𐌷𐌰𐌽",
-    "dellogpage": "𐍄𐌰𐌹𐍂𐌰 𐌰𐌹𐍂𐍅𐌱𐍉𐌺𐌰",
-    "deleteotherreason": "𐌰𐌽𐌸𐌰𐍂/𐌼𐌰𐌹𐍃 𐌼𐌹𐍄𐍉𐌽𐍃:",
-    "deletereasonotherlist": "𐌰𐌽𐌸𐌰𐍂 𐌼𐌹𐍄𐍉𐌽𐍃",
-    "rollbacklink": "𐌰𐍆𐍅𐌰𐌻𐍅𐌾𐌰𐌽",
-    "protectlogpage": "Log af Baírgjan",
-    "prot_1movedto2": "[[$1]] skiubiþ du [[$2]]",
-    "protect-level-sysop": "𐍃𐌴𐌹𐌳𐍉𐍆𐌰𐌸𐍃 𐌰𐌹𐌽𐌰𐌷𐌰",
-    "protect-expiring": "bláuþiþ $1 (UTC)",
-    "restriction-type": "Freihals:",
-    "restriction-edit": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
-    "restriction-move": "𐍃𐌺𐌹𐌿𐌱𐌰𐌽",
-    "undeletebtn": "𐌰𐍆𐍄𐍂𐌰 𐌲𐌰𐌱𐍉𐍄𐌾𐌰𐌽",
-    "undeletelink": "𐍃𐌰𐌹𐍈𐌰𐌽/𐌰𐍆𐍄𐍂𐌰𐌲𐌰𐍃𐌰𐍄𐌾𐌰𐌽",
-    "undeleteviewlink": "𐍃𐌰𐌹𐍈𐌹𐍃",
-    "undelete-search-submit": "Sokeiþ",
-    "namespace": "𐍃𐌴𐌹𐌳𐍉𐍆𐌴𐍂𐌰:",
-    "invert": "Afwandjan kustus",
-    "blanknamespace": "(𐍆𐍂𐌿𐌼𐌹𐍃𐍄𐍃)",
-    "contributions": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃 𐌰𐌹𐍅𐌻𐌰𐌲𐌹𐍉𐍃",
-    "mycontris": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌰𐌹𐍅𐌻𐌰𐌲𐌹𐍉𐍃",
-    "contribsub2": "𐍆𐌰𐌿𐍂 $1 ($2)",
-    "uctop": "(háubiþ)",
-    "month": "𐍆𐍂𐌰𐌼 𐌼𐌴𐌽𐍉𐌸𐍃 (𐌾𐌰𐌷 𐌰𐍆𐍄𐌿𐌼𐌰):",
-    "year": "𐍆𐍂𐌰𐌼 𐌾𐌴𐍂𐌰 (𐌾𐌰𐌷 𐌰𐍆𐍄𐌿𐌼𐌰):",
-    "sp-contributions-newbies-sub": "Faúr niujis niutandis",
-    "sp-contributions-blocklog": "Logboka af afdraúsjan",
-    "sp-contributions-talk": "Maþleiseido",
-    "whatlinkshere": "𐍈𐌰𐍂𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌷𐌻𐌰𐌲𐌺𐌾𐌰𐌽𐌳 𐌷𐌹𐌳𐍂𐌴",
-    "whatlinkshere-title": "Seidos hwarjis du $1 táiknjan",
-    "isredirect": "𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉",
-    "istemplate": "ináukan",
-    "whatlinkshere-prev": "{{PLURAL:$1|aftuma|aftumans $1}}",
-    "whatlinkshere-next": "{{PLURAL:$1|iftuma|iftumans $1}}",
-    "whatlinkshere-links": "← táikajanbandja",
-    "blockip": "𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
-    "ipbreason": "𐍆𐌰𐌹𐍂𐌹𐌽𐌰:",
-    "ipboptions": "𐌱 𐌰𐍅𐍂𐌰:2 hours, 𐌰 𐌳𐌰𐌲𐍃:1 day, 𐌲 𐌳𐌰𐌲𐍉𐍃:3 days, 𐌰 𐍅𐌹𐌺𐍉:1 week, 𐌱 𐍅𐌹𐌺𐍉𐌽𐍃:2 weeks, 𐌰 𐌼𐌴𐌽𐍉𐌸𐍃:1 month, 𐌲 𐌼𐌴𐌽𐍉𐌸𐍉𐍃:3 months, 𐌵 𐌼𐌴𐌽𐍉𐌸𐍉𐍃:6 months, 𐌰 𐌾𐌴𐍂:1 year, 𐌹𐌽𐌿𐍄𐍂𐌹𐌲𐌲𐌴𐌽𐌳𐌴𐌹𐍃:infinite",
-    "ipblocklist-submit": "Sokeiþ",
-    "infiniteblock": "ajukduþs",
-    "blocklink": "𐍅𐌰𐍂𐌲𐌾𐌰𐌽",
-    "unblocklink": "𐍅𐌰𐌽𐌳𐌾𐌰𐌽",
-    "change-blocklink": "𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐍅𐌰𐌿𐍂𐌾𐌰𐍅𐌰𐌳𐌳𐌾𐌿𐍃",
-    "contribslink": "𐌲𐌹𐌱𐍉𐍃",
-    "blocklogpage": "𐌻𐍉𐌲𐌱𐍉𐌺𐌰 𐌰𐍆 𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌾𐌰𐌽",
-    "blocklogentry": "𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌹𐌸 [[$1]] 𐍆𐌰𐌿𐍂 $2 $3",
-    "movearticle": "𐍃𐌺𐌹𐌿𐌱𐌰 𐍃𐌴𐌹𐌳𐍉:",
-    "newtitle": "𐌳𐌿 𐌽𐌹𐌿𐌾𐌹𐍃 𐌽𐌰𐌼𐍉𐍃:",
-    "move-watch": "𐍅𐌹𐍄𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉",
-    "movepagebtn": "𐍃𐌺𐌹𐌿𐌱𐌰 𐍃𐌴𐌹𐌳𐍉",
-    "movelogpage": "Log af skiubans",
-    "movereason": "𐍆𐌰𐌹𐍂𐌹𐌽𐌰:",
-    "revertmove": "𐍂𐌰𐌹𐌳𐌾𐌰𐌽",
-    "export": "𐌿𐍄𐌼𐌹𐌸𐍃𐌰𐍄𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
-    "thumbnail-more": "𐌱𐌹𐌰𐌿𐌺𐌰𐌽",
-    "tooltip-pt-userpage": "𐌸𐌴𐌹𐌽𐌰 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉",
-    "tooltip-pt-mytalk": "𐌸𐌴𐌹𐌽𐌰 𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰𐍃𐌴𐌹𐌳𐍉",
-    "tooltip-pt-preferences": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃",
-    "tooltip-pt-watchlist": "𐌻𐌴𐌹𐍃𐍄𐌰 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌴𐌹 𐌸𐌿 𐌰𐍄𐍅𐌹𐍄𐌰𐌹𐍃 𐍆𐌰𐌿𐍂 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌽𐍃",
-    "tooltip-pt-mycontris": "𐍄𐌰𐌻𐌰 𐌰𐍆 𐌸𐌴𐌹𐌽 𐌲𐌹𐌱𐍉𐌽𐍃",
-    "tooltip-pt-login": "𐌸𐌿 𐌹𐍃 𐌲𐌰𐍈𐌰𐍄𐌾𐌰𐌽𐌳𐍃 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽; 𐌰𐌸𐌸𐌰𐌽, 𐌽𐌹𐍃𐍄 𐌸𐌰𐌿𐍂𐌱𐌰𐌽𐍃",
-    "tooltip-pt-logout": "𐌻𐌴𐌹𐌸𐌰𐌽",
-    "tooltip-ca-talk": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌹 𐌱𐌹 𐌲𐌰𐌷𐌰𐌱𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
-    "tooltip-ca-edit": "𐌸𐌿 𐌼𐌰𐌲𐍄 𐌼𐌰𐌹𐌳𐌾𐌹𐍃 𐌸𐌰𐍄𐌰 𐍃𐌴𐌹𐌳𐍉. 𐌾𐌰𐌱𐌰𐌹 𐍅𐌹𐌻𐌴𐌹𐍃, 𐌱𐍂𐌿𐌺𐌾𐌹𐍃 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰𐌹𐍃 𐍆𐍂𐌿𐌼𐌰.",
-    "tooltip-ca-addsection": "𐌰𐌽𐌰𐍃𐍄𐍉𐌳𐌾𐌹𐍃 𐌽𐌹𐌿𐌾𐌰 𐌳𐌰𐌹𐌻",
-    "tooltip-ca-viewsource": "𐍃𐍉 𐍃𐌴𐌹𐌳𐍉 𐌹𐍃𐍄 𐌷𐌻𐌴𐌹𐌱𐌾𐌰𐌽𐌳𐍃\n𐌸𐌿 𐌼𐌰𐌲𐍄 𐍃𐌰𐌹𐍈𐌹𐍃 𐌹𐌶𐍉𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
-    "tooltip-ca-history": "𐍆𐌰𐌿𐍂𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐌸𐌹𐌶𐌿𐌷 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
-    "tooltip-ca-protect": "𐌱𐌰𐌹𐍂𐌲𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉",
-    "tooltip-ca-delete": "𐍄𐌰𐌹𐍂𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉",
-    "tooltip-ca-move": "𐍃𐌺𐌹𐌿𐌱𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉",
-    "tooltip-ca-watch": "𐌰𐌽𐌰𐌰𐌿𐌺𐌹𐍃 𐌸𐌹𐌶𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽 𐌰𐌽𐌰 𐌸𐌴𐌹𐌽𐌰 𐍅𐌹𐍄𐌰𐌽𐌳𐌻𐌴𐌹𐍃𐍄𐌰",
-    "tooltip-search": "𐍃𐍉𐌺𐌾𐌰𐌽 {{SITENAME}}",
-    "tooltip-search-go": "𐍆𐌰𐍂𐌹𐍃 𐌳𐌿 𐍃𐌴𐌹𐌳𐍉𐌽 𐌼𐌹𐌸 𐌲𐌻𐌰𐌲𐌲𐌿𐌾𐌰𐌼𐌰 𐌽𐌰𐌼𐌹𐌽 𐌾𐌰𐌱𐌰𐌹 𐌹𐍃𐍄",
-    "tooltip-search-fulltext": "𐍃𐍉𐌺𐌾𐌰𐌽 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐍆𐌰𐌿𐍂 𐌸𐌰𐌽𐌰 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌽",
-    "tooltip-p-logo": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
-    "tooltip-n-mainpage": "𐍃𐌰𐌹𐍈𐌰𐌽 𐍃𐌰 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
-    "tooltip-n-mainpage-description": "𐍃𐌰𐌹𐍈𐌰𐌹𐍃 𐍃𐌰 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
-    "tooltip-n-portal": "𐌱𐌹 𐌸𐌹𐌶𐌰𐌹 𐍆𐌰𐌿𐍂𐌰𐍅𐌰𐌿𐍂𐍀𐌰𐌹, 𐍈𐌰𐍃 𐌸𐌿 𐌼𐌰𐌲 𐍄𐌰𐌿𐌾𐌰, 𐍈𐌰𐍃 𐍃𐍄𐌰𐌸𐍃 𐌱𐌹𐌲𐌹𐍄𐌰𐌽 𐌹𐌽𐍃",
-    "tooltip-n-currentevents": "𐌱𐌹𐌲𐌹𐌸𐌹𐍃 𐌱𐌰𐌺𐌲𐌰𐌷𐌰𐌱𐌹 𐌱𐌹 𐌽𐌹𐌿𐌾𐌰𐌽𐍃 𐍅𐌰𐌹𐌷𐍄𐌰𐌽𐍃",
-    "tooltip-n-recentchanges": "𐌻𐌴𐌹𐍃𐍄𐌰 𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐌴 𐌽𐌿 𐌰𐌽𐌰 𐌸𐌰𐌼𐌼𐌰 𐍅𐌹𐌺𐌾𐌰",
-    "tooltip-n-randompage": "𐌿𐍃𐌻𐌰𐌸𐌰𐌹𐌸 𐍃𐌻𐌿𐌼𐍀𐌼𐌰𐍃𐍃𐌹𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉",
-    "tooltip-n-help": "𐍃𐌰 𐍃𐍄𐌰𐌸𐍃 𐍆𐌹𐌽𐌸𐌰𐌽",
-    "tooltip-t-whatlinkshere": "𐌻𐌴𐌹𐍃𐍄𐌰 𐌰𐌻𐌻𐌹𐍃 𐍅𐌹𐌺𐌾𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍉 𐌴𐌹 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳 𐌷𐌹𐌳𐍂𐌴",
-    "tooltip-t-recentchangeslinked": "𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐌽𐌿 𐍅𐌹𐌸𐍂𐌰 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌸𐌰𐍄𐌴𐌹 𐍃𐌹𐌽𐌳 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐍃 𐌿𐍃 𐌸𐌰𐌼𐌼𐌰 𐍃𐌴𐌹𐌳𐍉𐌽",
-    "tooltip-feed-atom": "𐌰𐍄𐍉𐌼 𐍂𐌹𐌽𐌽𐍉 𐌱𐌹 𐌸𐌹𐌶𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽",
-    "tooltip-t-upload": "𐌿𐍃𐌷𐌻𐌰𐌸𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
-    "tooltip-t-specialpages": "𐌻𐌴𐌹𐍃𐍄𐌰 𐌸𐌹𐌶𐍉 𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐌽𐍉",
-    "tooltip-t-print": "𐍅𐍂𐌴𐌹𐍄𐌼𐌰𐌷𐍄𐌴𐌹𐌲 𐌿𐍃𐌲𐌰𐌱𐍉𐍃 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
-    "tooltip-t-permalink": "𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉 𐍃𐍄𐌰𐌽𐌳𐌰𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐌰 𐍅𐌹𐌸𐍂𐌰 𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
-    "tooltip-ca-nstab-main": "𐍃𐌰𐌹𐍈𐌰𐌹𐍃 𐌸𐌰𐍄𐌰 𐌲𐌰𐌷𐌰𐌱𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
-    "tooltip-ca-nstab-user": "𐍃𐌰𐌹𐍈𐌰𐌽 𐍃𐌰 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉",
-    "tooltip-ca-nstab-image": "𐍃𐌰𐌹𐍈𐌰𐌽 𐌸𐍉 𐍆𐌴𐌹𐌻𐌰𐍃𐌴𐌹𐌳𐍉𐌽",
-    "tooltip-ca-nstab-template": "𐍃𐌰𐌹𐍈𐌹𐍃 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽",
-    "tooltip-ca-nstab-category": "𐍃𐌰𐌹𐍈𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽 𐌷𐌰𐌽𐍃𐍉",
-    "tooltip-save": "𐍃𐌺𐍂𐌴𐌹𐌱𐌰𐌹𐌽 𐌸𐌴𐌹𐌽 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
-    "tooltip-preview": "𐍆𐌰𐌿𐍂𐍃𐌰𐍈𐌹𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍉𐍃 𐌸𐌴𐌹𐌽𐌰, 𐌱𐌹𐌳𐌾𐌰 𐌸𐌿𐌺 𐌱𐍂𐌿𐌺𐌾𐌰𐌽 𐌸𐌰𐍄𐌰 𐍆𐌰𐌿𐍂𐌰 𐌼𐌴𐌻𐌾𐌹𐍃!",
-    "tooltip-diff": "𐍃𐌰𐌹𐍈𐌹𐌸 𐌸𐌰𐌽𐌶𐌴𐌹 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍉𐍃 𐌸𐌰𐍄𐌴𐌹 𐌱𐍂𐌿𐌺𐌾𐌹𐍃 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌹𐌽𐍃",
-    "tooltip-rollback": "\"𐌰𐍆𐍅𐌰𐌻𐍅𐌾𐌰𐌽\" 𐌱𐌰𐌺𐌼𐌰𐌹𐌳𐌾𐌹𐌸 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐌱𐌹 𐌸𐌹𐌶𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽 𐍅𐌹𐍃𐌰𐌽 𐍃𐍉 𐌲𐌰𐌼𐌰𐌳𐌾𐌴𐌹 𐌼𐌰𐌽𐌰𐌲𐌹𐍃𐍄𐍃 𐌽𐌹𐌿𐌾𐌰 𐌲𐌹𐌱𐌰𐌾𐌹𐌽𐍃 𐍆𐍂𐌰𐌼 𐌰𐌹𐌽𐍃 𐌺𐌻𐌹𐌺",
-    "tooltip-undo": "\"𐌽𐌹𐌿𐍃𐌺𐌰𐍀𐌾𐌰𐌽\" 𐌱𐌰𐌺𐌼𐌰𐌹𐌳𐌾𐌹𐌸 𐌹𐌽𐌼𐌰𐌹𐌳𐌲𐌴𐌹𐌽𐍃 𐌾𐌰𐌷 𐌿𐍃𐌻𐌿𐌺𐍉𐌸 𐌼𐌰𐌹𐌳𐌾𐌰𐍆𐍉𐍂𐌼𐍉𐌽 𐍃𐍅𐌴 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰 𐌷𐌹𐍅𐌾𐌰. 𐌸𐌰𐍄𐌰 𐌻𐌴𐍄 𐌰𐌽𐌰𐌿𐌺𐌰𐌽𐌰𐌽 𐍃𐌰𐌿𐌸𐌰 𐌹𐌽 𐌹𐌽𐌽𐌰𐌷𐌰𐌻𐌳𐌰𐌰𐌽𐌲𐌰𐌱𐌰.",
-    "tooltip-summary": "𐌰𐍄𐌲𐌰𐌲𐌲𐌹𐍃 𐌹𐌽𐌽𐌰𐌷𐌰𐌻𐌳𐌰𐌰𐌽𐌲𐌰𐌱𐌰 𐌼𐌰𐌿𐍂𐌲𐌾𐌰",
-    "previousdiff": "← 𐌰𐍆𐍄𐌿𐌼𐌰 𐌰𐌹𐍂𐌹𐍃",
-    "nextdiff": "Iftuma áiris →",
-    "file-info-size": "$1 × $2 𐍀𐌹𐌺𐍃𐌴𐌻𐌰, 𐍆𐌴𐌹𐌻𐍅𐌰𐌷𐍃𐍄𐌿𐍃: $3, 𐌼𐌹𐌼𐌴 𐌺𐌿𐌽𐌹: $4",
-    "show-big-image": "Fullis wahstus",
-    "ilsubmit": "Sokeiþ",
-    "metadata": "𐌿𐍆𐌰𐍂𐌳𐌰𐍄𐌰",
-    "watchlistall2": "allis",
-    "namespacesall": "𐌰𐌻𐌻𐌹𐍃",
-    "monthsall": "𐌰𐌻𐌻𐌹𐍃",
-    "imgmultigo": "Afgaggan!",
-    "table_pager_limit_submit": "Affgaggan",
-    "version-other": "Anþar",
-    "specialpages": "𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐍃",
-    "tag-filter": "[[Special:Tags|𐍄𐌰𐌹𐌺𐌽𐍉𐍃]] 𐍆𐌹𐌻𐌷𐌰",
-    "rightsnone": "(ni áinshun)"
+       "@metadata": {
+               "authors": [
+                       "Bleakgh",
+                       "Jocke Pirat",
+                       "Michawiki",
+                       "Node ue",
+                       "Sajasazi (on got.wikipedia.org)",
+                       "Zylbath"
+               ]
+       },
+       "underline-always": "Sinteino",
+       "underline-never": "Niu",
+       "sunday": "Sunnonsdags",
+       "monday": "Meninsdags",
+       "tuesday": "Tiwisdags",
+       "wednesday": "Midiwiko",
+       "thursday": "Þeiƕonsdags",
+       "friday": "Fraujonsdags",
+       "saturday": "𐌸𐍅𐌰𐌷𐌻𐌹𐍃𐌳𐌰𐌲𐍃",
+       "sun": "𐍃𐌿𐌽",
+       "mon": "𐌼𐌴𐌽",
+       "tue": "𐌰𐍂𐌴",
+       "wed": "𐍅𐍉𐌳",
+       "thu": "𐍀𐌰𐌹",
+       "fri": "𐍆𐍂𐌹",
+       "sat": "𐍃𐌰𐌼",
+       "january": "𐌰𐍆𐍄𐌿𐌼𐌰 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
+       "february": "𐍆𐌰𐌽𐌹𐌼𐌴𐌽𐍉𐌸𐍃",
+       "march": "𐌺𐌰𐌻𐌳𐌼𐌴𐌽𐍉𐌸𐍃",
+       "april": "𐌲𐍂𐌰𐍃𐌼𐌴𐌽𐍉𐌸𐍃",
+       "may_long": "𐌱𐌻𐍉𐌼𐌰𐌼𐌴𐌽𐍉𐌸𐍃",
+       "june": "𐍅𐌰𐍂𐌼𐌼𐌴𐌽𐍉𐌸𐍃",
+       "july": "𐌷𐌰𐍅𐌹𐌼𐌴𐌽𐍉𐌸𐍃",
+       "august": "𐌰𐍃𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐍃",
+       "september": "𐌰𐌺𐍂𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐍃",
+       "october": "𐍅𐌴𐌹𐌽𐌼𐌴𐌽𐍉𐌸𐍃",
+       "november": "𐍆𐍂𐌿𐌼𐌰 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
+       "december": "𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
+       "january-gen": "𐌰𐍆𐍄𐌿𐌼𐌹𐌽𐍃 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
+       "february-gen": "𐍆𐌰𐌽𐌹𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+       "march-gen": "𐌺𐌰𐌻𐌳𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+       "april-gen": "𐌲𐍂𐌰𐍃𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+       "may-gen": "𐌱𐌻𐍉𐌼𐌰𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+       "june-gen": "𐍅𐌰𐍂𐌼𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+       "july-gen": "𐌷𐌰𐍅𐌹𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+       "august-gen": "𐌰𐍃𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+       "september-gen": "𐌰𐌺𐍂𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+       "october-gen": "𐍅𐌴𐌹𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+       "november-gen": "𐍆𐍂𐌿𐌼𐌹𐌽𐍃 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
+       "december-gen": "𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
+       "jan": "𐌰𐍆𐍄",
+       "feb": "𐍆𐌰𐌽",
+       "mar": "𐌺𐌰𐌻",
+       "apr": "𐌲𐍂𐌰",
+       "may": "𐌱𐌻𐍉",
+       "jun": "𐍅𐌰𐍂",
+       "jul": "𐌷𐌰𐍅",
+       "aug": "𐌰𐍃𐌰",
+       "sep": "𐌰𐌺𐍂",
+       "oct": "𐍅𐌴𐌹",
+       "nov": "𐍆𐍂𐌿",
+       "dec": "𐌾𐌹𐌿",
+       "pagecategories": "{{PLURAL:$1|𐌷𐌰𐌽𐍃𐌰|𐌷𐌰𐌽𐍃𐍉𐍃}}",
+       "category_header": "𐍃𐌴𐌹𐌳𐍉𐍃 𐌹𐌽𐌽 𐌺𐌿𐌽𐌾𐌰 \"$1\"",
+       "subcategories": "Dalaþkunjos",
+       "category-media-header": "𐌼𐌴𐌳𐌾𐌰 𐌹𐌽𐌽 𐌺𐌿𐌽𐌾𐌰 \"$1\"",
+       "hidden-categories": "{{PLURAL:$1|𐍆𐌿𐌻𐌲𐌹𐌽𐍃 𐌺𐌰𐍄𐌴𐌲𐍉𐍂𐌹|𐍆𐌿𐌻𐌲𐌹𐌽𐌰𐌹 𐌺𐌰𐍄𐌴𐌲𐍉𐍂𐌾𐍉𐍃}}",
+       "about": "𐌿𐍆𐌰𐍂",
+       "article": "𐍃𐌰𐌸𐍃𐍃𐌴𐌹𐌳𐍉",
+       "newwindow": "(𐌰𐌽𐌳𐌷𐌿𐌻𐌾𐌹𐌸 𐌹𐌽𐌽 𐌽𐌹𐌿𐌾𐌰 𐌰𐌿𐌲𐌰𐌳𐌰𐌿𐍂𐍉)",
+       "cancel": "𐌷𐌰𐌻𐍄𐍃",
+       "moredotdotdot": "𐌼𐌰𐌹𐍃...",
+       "mypage": "𐌼𐌴𐌹𐌽 𐍃𐌴𐌹𐌳𐍉",
+       "mytalk": "𐌼𐌴𐌹𐌽𐌰 𐌼𐌰𐌸𐌻𐌴𐌹",
+       "navigation": "𐍅𐌹𐌲𐌰𐍄𐌰𐌿𐌷𐍄𐍃",
+       "and": "𐌾𐌰𐌷",
+       "qbfind": "𐍃𐍉𐌺𐌴𐌹𐌸",
+       "qbedit": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
+       "qbmyoptions": "𐌼𐌴𐌹𐌽𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
+       "actions": "𐍅𐌰𐌿𐍂𐍃𐍄𐍅𐌴𐌹𐌽𐍃",
+       "namespaces": "𐍃𐌴𐌹𐌳𐍉𐍃𐍄𐌰𐌸𐌴𐌹𐍃",
+       "variants": "𐌼𐌹𐍃𐍃𐌰𐌻𐌴𐌹𐌽𐍃",
+       "errorpagetitle": "𐍆𐌰𐌹𐍂𐌹𐌽𐌰 𐌳𐍅𐌰𐌻𐌹𐍃",
+       "returnto": "𐌲𐌰𐍅𐌰𐌽𐌳𐌾𐌰𐌽 𐌰𐍄 $1.",
+       "tagline": "𐍆𐍂𐌰𐌼 {{SITENAME}}",
+       "help": "𐌷𐌹𐌻𐍀𐌰",
+       "search": "𐍃𐍉𐌺𐌾𐌰𐌽",
+       "searchbutton": "𐍃𐍉𐌺𐌾𐌰𐌽",
+       "go": "𐌲𐌰𐌲𐌲𐌰",
+       "searcharticle": "𐌰𐍆𐌲𐌰𐌲𐌲𐌰𐌽",
+       "history": "𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐍉",
+       "history_short": "𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
+       "printableversion": "𐍅𐍂𐌴𐌹𐍄𐌼𐌰𐌷𐍄𐌴𐌹𐌲 𐍃𐌴𐌹𐌳𐍉",
+       "permalink": "𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉 𐍃𐍄𐌰𐌽𐌳𐌰𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐌰",
+       "view": "Saíhvan",
+       "edit": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
+       "create": "𐍃𐌺𐌰𐍀𐌾𐌰𐌽",
+       "editthispage": "𐌼𐌰𐌹𐌳𐌾𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉",
+       "create-this-page": "Skapja þo seido",
+       "delete": "𐍄𐌰𐌹𐍂𐌰𐌽",
+       "deletethispage": "𐍄𐌰𐌹𐍂𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉",
+       "protect": "𐌱𐌰𐌹𐍂𐌲𐌰𐌽",
+       "protect_change": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
+       "protectthispage": "Baírga þo siedo",
+       "unprotect": "𐌽𐌹𐌱𐌰𐌹𐍂𐌲𐌰",
+       "unprotectthispage": "Nibaírga þo siedo",
+       "newpage": "𐌽𐌹𐌿𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
+       "talkpage": "𐌼𐌰𐌸𐌻𐌴𐌹𐍃𐌴𐌹𐌳𐍉",
+       "talkpagelinktext": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰",
+       "specialpage": "𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐍃",
+       "personaltools": "𐍅𐌰𐌹𐍂𐌻𐌴𐌹𐌺𐍃 𐌱𐍂𐌿𐌺𐍅𐌰𐌹𐌷𐍄𐍃",
+       "talk": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰",
+       "views": "𐌷𐌹𐍅𐌾𐍉𐍃",
+       "toolbox": "𐍄𐌰𐌿𐌹 𐌰𐍂𐌺𐌰",
+       "otherlanguages": "𐌰𐌽𐌸𐌰𐍂 𐍂𐌰𐌶𐌳𐍉𐍃",
+       "redirectedfrom": "(𐌽𐌰𐌿𐌸𐌾𐌰𐌽 𐍆𐍂𐌰𐌼𐌹𐍃 $1)",
+       "redirectpagesub": "𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉",
+       "lastmodifiedat": "𐌸𐌰𐍄𐌰 𐍃𐌴𐌹𐌳𐍉 𐍃𐌹𐌽𐌳 𐌼𐌰𐌽𐌰𐌲𐌹𐍃𐍄𐍃 𐌽𐌹𐌿𐌾𐌰 𐌼𐌰𐌹𐌳𐌾𐌹𐌸𐍃 ($2) ($1)",
+       "jumpto": "𐌲𐌰𐌲𐌲𐌰𐌽 𐌰𐍄:",
+       "jumptonavigation": "𐍃𐌴𐌹𐌳𐍉𐌲𐌰𐍅𐌹𐍃𐍃",
+       "jumptosearch": "𐍃𐍉𐌺𐌴𐌹𐌸",
+       "aboutsite": "𐍆𐍂𐌰𐌼 {{SITENAME}}",
+       "aboutpage": "Project:𐌿𐍆𐌰𐍂",
+       "copyrightpage": "{{ns:project}}:𐌼𐌰𐌽𐌻𐌴𐌹𐌺𐌰𐍅𐌹𐍄𐍉𐌸𐌰",
+       "currentevents": "𐌽𐌹𐌿𐌾𐌰 𐍅𐌰𐌹𐌷𐍄𐍃",
+       "currentevents-url": "Project:𐌽𐌹𐌿𐌾𐌰 𐍅𐌰𐌹𐌷𐍄𐍃",
+       "disclaimers": "𐍅𐌰𐌳𐌾𐍉𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
+       "disclaimerpage": "Project:𐍅𐌰𐌳𐌾𐌹𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
+       "edithelp": "𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌷𐌹𐌻𐍀𐌰",
+       "mainpage": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
+       "mainpage-description": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
+       "portal": "𐌱𐌰𐌿𐍂𐌲𐌹𐍃 𐌲𐌰𐍅𐌹",
+       "portal-url": "Project:𐌱𐌰𐌿𐍂𐌲𐌹𐍃 𐌲𐌰𐍅𐌹",
+       "privacy": "𐍃𐌿𐌽𐌳𐍂𐌰𐍅𐌿𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
+       "privacypage": "Project:𐍃𐌿𐌽𐌳𐍂𐌰𐍅𐌴𐌹𐌽𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
+       "retrievedfrom": "𐌲𐌰𐌽𐌰𐌼 𐍆𐍂𐌰𐌼 \"$1\"",
+       "youhavenewmessages": "𐌸𐌿 𐌷𐌰𐌱𐌹𐍃 $1 ($2).",
+       "editsection": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
+       "editold": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
+       "editlink": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
+       "viewsourcelink": "𐍃𐌰𐌹𐍈𐌹𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
+       "editsectionhint": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌳𐌰𐌹𐌻: $1",
+       "toc": "𐌹𐌽𐌽𐌰𐌽𐌰",
+       "showtoc": "𐌰𐌿𐌲𐌾𐌰",
+       "hidetoc": "𐍆𐌹𐌻𐌷𐌰𐌽",
+       "site-rss-feed": "$1 RSS Miþnatifodjan",
+       "site-atom-feed": "$1 𐌰𐍄𐍉𐌼 𐌼𐌹𐌸𐌽𐌰𐍄𐌹𐍆𐍉𐌳𐌾𐌰𐌽",
+       "page-atom-feed": "\"$1\" 𐌰𐍄𐍉𐌼 𐍂𐌹𐌽𐌽𐍉",
+       "red-link-title": "$1 (𐍃𐌴𐌹𐌳𐍉 𐍃𐌹𐌽𐌳 𐌽𐌹𐍃𐍄)",
+       "nstab-main": "𐍃𐌴𐌹𐌳𐍉",
+       "nstab-user": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉",
+       "nstab-special": "𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉",
+       "nstab-project": "𐍂𐌴𐌹𐌺𐌹𐍃𐌴𐌹𐌳𐍉",
+       "nstab-image": "𐍆𐌴𐌹𐌻𐌰",
+       "nstab-template": "𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃",
+       "nstab-help": "𐌷𐌹𐌻𐍀𐌰",
+       "nstab-category": "𐌷𐌰𐌽𐍃𐌰",
+       "missing-article": "𐍃𐌰 𐌳𐌰𐍄𐌰𐌱𐌿𐍃 𐌽𐌹 𐌲𐌰𐌽𐌰𐌼 𐌸𐌰𐌽𐌰 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌽 𐌴𐌹 𐌹𐍄𐌰 𐍃𐌺𐌰𐌻 𐌱𐌹𐌲𐌹𐍄𐌰𐌽: \"$1\" $2\n\n(The data base did not find the text of a page that it should have found, named \"$1\" $2.\n\nThis is usually caused by following an outdated diff or history link to a page that has been deleted.\n\nIf this is not the case, you may have found a bug in the software.\nPlease report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.)",
+       "viewsource": "𐍃𐌰𐌹𐍈𐌹𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
+       "yourname": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐌽𐌰𐌼𐍉:",
+       "yourpassword": "𐌰𐌽𐌰𐌻𐌰𐌿𐌲𐌽𐍃 𐍅𐌰𐌿𐍂𐌳𐌰:",
+       "login": "Atgaggan",
+       "nav-login-createaccount": "𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽 / 𐌲𐌰𐌻𐌰𐌽𐌲𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
+       "userlogin": "Atgaggan / gaskapjan niutandis",
+       "logout": "𐌻𐌴𐌹𐌸𐌰𐌽",
+       "userlogout": "𐌻𐌴𐌹𐌸𐌰𐌽",
+       "nologinlink": "Gaskapjan þein niutandis",
+       "createaccount": "𐌲𐌰𐌻𐌰𐌲𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
+       "gotaccount": "Habiþ þu niutandis? '''$1'''",
+       "gotaccountlink": "Atgaggan",
+       "loginlanguagelabel": "Razda: $1",
+       "bold_sample": "𐌰𐌱𐍂𐍃 𐌱𐍉𐌺𐌰",
+       "bold_tip": "𐌰𐌱𐍂 𐍅𐌰𐌿𐍂𐌳𐌰",
+       "italic_sample": "𐍅𐍂𐌰𐌹𐌵𐍃 𐍅𐌰𐌿𐍂𐌳𐌰",
+       "italic_tip": "𐌳𐍂𐌹𐌿𐍃𐍉 𐌱𐍉𐌺𐌰",
+       "link_sample": "𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐌱𐌰𐌽𐌳𐌹 𐌽𐌰𐌼𐍉",
+       "link_tip": "𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐌱𐌰𐌽𐌳𐌹 𐌹𐌽𐌽𐌰𐌽𐌰",
+       "extlink_sample": "http://www.example.com 𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐌳𐌰𐌽𐌳𐌹 𐌽𐌰𐌼𐍉",
+       "extlink_tip": "Uta táikjabandi (maúdjan http://)",
+       "headline_sample": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍅𐌰𐌿𐍂𐌳𐌰",
+       "headline_tip": "𐌷𐌰𐌿𐌷𐍃 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐌱𐍉𐌺𐌰 •𐌱•",
+       "nowiki_sample": "𐍃𐌰𐍄𐌾𐌴𐌹 𐌿𐌽𐍃𐌽𐌴𐌹𐌸𐌾𐌰𐌽𐌳𐍃 𐍄𐌴𐌺𐍃𐍄 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌼 𐌷𐌹𐍄",
+       "nowiki_tip": "𐌿𐌽𐍅𐌹𐍄𐌾𐌹𐍃 𐍅𐌹𐌺𐌹𐍃𐌽𐌴𐌹𐌸𐌾𐌰𐌽𐌳𐍃",
+       "image_tip": "𐌹𐌽𐌽𐌱𐍉𐌳𐌰𐌽𐍃 𐍆𐌴𐌹𐌻𐌰",
+       "media_tip": "𐍄𐌰𐌹𐌺𐌾𐌰𐌱𐌰𐌽𐌳𐌾𐌹𐍃 𐍆𐌴𐌹𐌻𐌰𐌽𐌹𐍃",
+       "sig_tip": "𐌿𐌽𐌳𐌰𐍂𐌼𐌴𐌻 𐌸𐌴𐌹𐌽𐌰 𐌼𐌹𐌸 𐍃𐍄𐌿𐌽𐌳𐌰𐌼𐌴𐌻𐌰",
+       "hr_tip": "𐍂𐌰𐌹𐌷𐍄𐍃𐌱𐌰𐌿𐍂𐌳 (𐌱𐍂𐌿𐌺𐌾𐌰𐌽 𐌼𐌹𐌸 𐌽𐌹𐌿𐍆𐌰𐍂𐌿𐍃𐍃𐌿𐍃)",
+       "summary": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽𐍃𐍀𐌹𐌻𐌻𐍉𐌽:",
+       "subject": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐌱𐍉𐌺𐌰:",
+       "minoredit": "𐍃𐌰 𐌹𐍃𐍄 𐌻𐌴𐌹𐍄𐌹𐌻𐌰 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
+       "watchthis": "𐍅𐌰𐍂𐌰𐌽 𐍃𐌴𐌹𐌳𐍉",
+       "savearticle": "𐌼𐌴𐌻𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
+       "preview": "𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰 𐍃𐌴𐌹𐌳𐍉",
+       "showpreview": "𐍅𐌹𐍄𐌰𐌽 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰",
+       "showdiff": "𐍅𐌹𐍄𐌰𐌽 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
+       "newarticle": "(Niu)",
+       "updated": "(Nuwisan)",
+       "previewnote": "'''𐍃𐌰𐌷 𐌹𐍃𐍄 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰. 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌲𐌰𐌼𐌴𐌻𐌾𐌹𐌸 𐌽𐌹 𐌰𐍆 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐍃!'''",
+       "editing": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1",
+       "editingsection": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1 (𐍆𐌴𐍂𐌰)",
+       "editingcomment": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1 (𐍂𐍉𐌳𐌾𐌰𐍆𐌴𐍂𐌰)",
+       "yourdiff": "Missalieks",
+       "template-protected": "(𐌲𐌰𐌱𐌰𐌹𐍂𐌲𐌾𐌰𐌽)",
+       "template-semiprotected": "(halb-gabaírgjan)",
+       "post-expand-template-inclusion-warning": "'''𐌷𐍅𐍉𐍄𐌾𐌰𐌽𐌳𐍃:''' 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃 𐍃𐌹𐌽𐌳 𐌿𐍆𐌰𐍂𐌼𐌹𐌺𐌹𐌻𐍃. 𐍃𐌿𐌼𐍃 𐍆𐌰𐌿𐍂𐌴𐌼𐌴𐌻𐌴𐌹𐌽𐍉𐍃 𐌽𐌹 𐌼𐌰𐌲 𐍅𐌹𐍃𐌰𐌽 𐌸𐌰𐍂",
+       "post-expand-template-inclusion-category": "𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌸𐌰𐍂 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃 𐍃𐌹𐌽𐌳 𐌿𐍆𐌰𐍂𐌼𐌹𐌺𐌹𐌻𐍃",
+       "currentrev": "𐌽𐌿 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
+       "currentrev-asof": "𐌰𐍆𐍄𐌿𐌼𐍃𐍄𐍃 𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐍆𐍂𐌰𐌼 $1",
+       "revisionasof": "𐌲𐌰𐌼𐌰𐌳𐌾𐌴𐌹 𐍆𐍂𐌰𐌼 $1",
+       "revision-info": "Máideins fram $1 bi $2",
+       "previousrevision": "←𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
+       "nextrevision": "Iftuma máideins→",
+       "currentrevisionlink": "𐌽𐌿𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
+       "cur": "𐌽𐌿",
+       "next": "𐌹𐍆𐍄𐌿𐌼𐌰",
+       "last": "𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍃",
+       "page_first": "frumists",
+       "page_last": "𐍃𐍀𐌴𐌳𐌿𐌼𐌹𐍃𐍄𐍃",
+       "histfirst": "𐍆𐌰𐌿𐍂𐌸𐌹𐍃",
+       "histlast": "𐍃𐍀𐌴𐌳𐌿𐌼𐌹𐍃𐍄𐍃",
+       "history-feed-item-nocomment": "$1 at $2",
+       "revdel-restore": "𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌹𐍃 𐌰𐌽𐌰𐍃𐌹𐌿𐌽𐌼𐌰𐌷𐍄𐌴𐌹𐌲𐍃",
+       "revertmerge": "𐌿𐌽𐌲𐌰𐍄𐌹𐌻𐍉𐍃",
+       "history-title": "𐌰𐍂𐌹𐍃𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌰𐍆 \"$1\"",
+       "lineno": "𐌱𐍉𐌺𐌰𐍂𐌹𐌲𐌹𐌻𐍉 $1:",
+       "editundo": "𐌽𐌹𐌿𐍃𐌺𐌰𐍀𐌾𐌰𐌽",
+       "searchresults": "𐍃𐍉𐌺𐌽𐌹𐍃 𐍄𐌰𐌿𐌾𐍉𐍃",
+       "searchresults-title": "𐍃𐍉𐌺𐌽𐌹𐍃 𐍄𐌰𐌿𐌾𐍉𐍃 𐍆𐌰𐌿𐍂 \"$1\"",
+       "prevn": "𐌰𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|$1}}",
+       "nextn": "𐌹𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|$1}}",
+       "prevn-title": "𐍆𐌰𐌹𐍂𐌽𐌰 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}}",
+       "nextn-title": "𐌰𐍆𐍄𐌿𐌼𐌰 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}}",
+       "shown-title": "𐌰𐌿𐌾𐌰𐌽𐌳 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}} 𐌸𐌰𐌹𐍂𐌷 𐍃𐌴𐌹𐌳𐍉",
+       "viewprevnext": "𐍃𐌹𐌿𐌽𐌴𐌹𐍃 ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-new": "'''𐍃𐌺𐌰𐍀𐌾𐌹𐍃 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉𐌽 \"[[:$1]]\" 𐌸𐌹𐌶𐍉𐍃 𐍅𐌹𐌺𐌾𐍉𐍃!'''",
+       "searchprofile-articles": "𐌲𐌰𐌷𐌰𐌱𐌾𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
+       "searchprofile-images": "𐌼𐌰𐌽𐌰𐌲𐍃𐌼𐌴𐌳𐌹𐌰",
+       "searchprofile-everything": "𐌰𐌻𐌻",
+       "searchprofile-advanced": "𐍆𐌰𐌹𐍂𐍂𐌰𐍆𐍂𐌰𐌼𐌰",
+       "searchprofile-articles-tooltip": "𐍃𐍉𐌺 𐌹𐌽𐌽𐌰 $1",
+       "searchprofile-images-tooltip": "𐍃𐍉𐌺𐌾𐌹𐍃 𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
+       "searchprofile-everything-tooltip": "𐍃𐍉𐌺𐌾𐌹𐍃 𐌰𐌻𐌻 𐌲𐌰𐌷𐌰𐌱𐌾𐍉𐍃 (𐌸𐌹𐌶𐌴𐌴𐌹 𐌹𐍃𐍄 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌹𐍃)",
+       "searchprofile-advanced-tooltip": "𐍃𐌺𐍉𐌾𐌹𐍃 𐌹𐌽𐌽𐌰 𐍃𐌹𐌻𐌱𐌰𐍃𐌺𐌰𐍀𐌹𐌸𐍃 𐌽𐌰𐌼𐌰𐌽𐍃𐍄𐌰𐌸",
+       "search-result-size": "$1 ({{PLURAL:$2|•𐌰• 𐍅𐌰𐌿𐍂𐌳|•$2• 𐍅𐌰𐌿𐍂𐌳𐌰}})",
+       "search-redirect": "(𐌰𐍆𐍄𐍂𐌰𐍅𐌴𐌹𐍄𐍃 𐍆𐍂𐌰𐌼 𐌸𐌰𐌼𐌼𐌰 $1)",
+       "search-section": "(𐍆𐌴𐍂𐌰 $1)",
+       "search-suggest": "𐍄𐌰𐌹𐌺𐌽𐌹𐌳𐌰 𐌸𐌿: $1",
+       "searchall": "𐌰𐌻𐌻𐍃",
+       "search-nonefound": "𐌽𐌹 𐌰𐌹𐌽𐌷𐌿𐌽 𐌲𐌰𐌲𐌹𐌱𐌾𐍉 𐍆𐌿𐌻𐌻𐌾𐌹𐌸 𐍃𐍉𐌺𐌴𐌹𐌽",
+       "powersearch-legend": "𐍃𐍉𐌺𐌴𐌹𐌸",
+       "preferences": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃",
+       "mypreferences": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰",
+       "prefs-skin": "Seidofill",
+       "skin-preview": "Faúrsaiƕa",
+       "saveprefs": "Melja",
+       "searchresultshead": "Sokeiþ",
+       "grouppage-sysop": "{{ns:project}}:𐍃𐌴𐌹𐌳𐍉𐍆𐌰𐌸𐍃",
+       "rightslog": "Niutandis stutjanlog",
+       "nchanges": "$1 {{PLURAL:$1|máidein|máideins}}",
+       "recentchanges": "𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃",
+       "rcshowhideminor": "$1 lietila máideins",
+       "rcshowhidebots": "$1 bota",
+       "rcshowhideliu": "$1 niutandis",
+       "rcshowhideanons": "$1 gasteis",
+       "rcshowhidemine": "$1 mein máideins",
+       "diff": "𐌻𐌴𐌹𐌺𐍃",
+       "hist": "𐍆𐍂𐌼𐌵",
+       "hide": "𐍆𐌹𐌻𐌷𐌰𐌽",
+       "show": "𐌷𐌿𐌻𐌾𐌰𐌽",
+       "minoreditletter": "l",
+       "newpageletter": "N",
+       "boteditletter": "b",
+       "recentchangeslinked": "𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌻𐌹𐌴𐌺𐍃",
+       "recentchangeslinked-feed": "Máideinlieks",
+       "recentchangeslinked-toolbox": "𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌻𐌹𐌴𐌺𐍃",
+       "recentchangeslinked-summary": "𐍃𐍉 𐌹𐍃𐍄 𐌻𐌴𐌹𐍃𐍄𐌰 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍃 𐍃𐌺𐍉𐍀 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳 𐌿𐍃 𐌿𐍃𐍃𐌹𐌽𐌳𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽 (𐌰𐌹𐌸𐌸𐌰𐌿 𐌻𐌹𐌸𐌰𐌿𐍃 𐌿𐍃𐍃𐌹𐌽𐌳𐌰𐌹𐌶𐍉𐍃 𐌷𐌰𐌽𐍃𐍉𐍃). 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 [[Special:Watchlist|𐍅𐌹𐍄𐌰𐌽𐌳𐌻𐌴𐌹𐍃𐍄𐍉𐍃 𐌸𐌴𐌹𐌽𐍉𐍃]] 𐍃𐌹𐌽𐌳 '''𐌳𐌹𐌲𐍂𐍃𐍄𐌰𐍆𐍃'''.",
+       "upload": "𐌿𐍃𐌷𐌻𐌰𐌸𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
+       "uploadbtn": "Ushlaþaiþ Feilans",
+       "uploadlogpage": "Log af Ushlaþan",
+       "watchthisupload": "Witan so seido",
+       "imgfile": "Feilans",
+       "listfiles": "Feilans tala",
+       "file-anchor-link": "𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
+       "filehist": "𐍆𐌴𐌹𐌻𐌰𐌽𐍃 𐌰𐌹𐍂𐌹𐍃",
+       "filehist-help": "𐌺𐌻𐌹𐌺𐍉𐍃 𐌰𐌽𐌰 𐌳𐌰𐍄𐌰𐌹/𐍈𐌴𐌹𐌻𐌰𐌹 𐍃𐌰𐌹𐍈𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽 𐍃𐍅𐌴 𐌰𐍄𐌰𐌿𐌲𐌾𐌹𐌳𐌰 𐍃𐌹𐌺 𐌸𐌰𐌽.",
+       "filehist-current": "𐌽𐌿",
+       "filehist-datetime": "𐍈𐌴𐌹𐌻𐌰",
+       "filehist-thumb": "𐍆𐍉𐍂𐍃𐌾𐌰𐌿",
+       "filehist-thumbtext": "𐍆𐍉𐍂𐍃𐌾𐌰𐌿 𐍆𐌰𐌿𐍂 𐌿𐍃𐌲𐌰𐌱𐌰 𐍆𐍂𐌰𐌼 $1",
+       "filehist-user": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
+       "filehist-dimensions": "𐍅𐌰𐌷𐍃𐍄𐌿𐍃",
+       "filehist-filesize": "Feilans wahstus",
+       "filehist-comment": "𐌻𐌴𐌹𐍄𐌻𐌰𐍃𐍀𐌹𐌻𐌻𐍉𐌽",
+       "imagelinks": "𐍆𐌴𐌹𐌻𐌹𐌽𐍃 𐌱𐍂𐌿𐌺𐌹𐍃",
+       "linkstoimage": "𐌰𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|𐍃𐍉 𐍃𐌴𐌹𐌳𐍉 𐌻𐌴𐌹𐌽𐌺𐍉𐌸|𐌸𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳}} 𐌸𐌹𐌶𐍉𐌶𐌿𐌷 𐍆𐌴𐌹𐌻𐍉𐍃",
+       "sharedupload-desc-here": "𐍃𐌰 𐍆𐌴𐌹𐌻𐌰 𐌹𐍃𐍄 𐍆𐍂𐌰𐌼 $1 𐌾𐌰𐌷 𐌼𐌰𐌲 𐍅𐌹𐍃𐌰𐌽 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐍃 𐍆𐍂𐌰𐌼 𐌰𐌻𐌾𐌰𐌹𐌼 𐍆𐌰𐌿𐍂𐌰𐍅𐌰𐌿𐍂𐍀𐍉𐌼.\n𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌾𐌰𐌽𐌳𐍃 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐌰𐌹 𐍆𐌴𐌹𐌻𐌰𐌽𐍃𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌾𐌰𐌽𐌳𐌹𐍃 𐌸𐌰𐍂 𐌹𐍃𐍄 𐌳𐌰𐌻𐌰𐌸𐌰 𐌿𐍃𐌲𐌹𐌱𐌰𐌽𐍃.",
+       "filedelete-submit": "Taíran",
+       "mimesearch": "MIME sokeiþ",
+       "listredirects": "𐍄𐌰𐌻𐌰 𐌰𐍆 𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐍃𐌴𐌹𐌳𐍉𐍃",
+       "randompage": "𐍃𐌻𐌿𐌼𐍀𐌼𐌰𐍃𐍃𐌹𐌲 𐍃𐌴𐌹𐌳𐍉",
+       "statistics": "𐍃𐌴𐌹𐌳𐍉𐍃𐍄𐌰𐍄𐌹𐍃𐍄𐌹𐌺",
+       "brokenredirects-edit": "(𐌼𐌰𐌹𐌳𐌾𐌰𐌽)",
+       "brokenredirects-delete": "(𐍄𐌰𐌹𐍂𐌰𐌽)",
+       "nbytes": "$1 {{PLURAL:$1|𐌱𐌰𐌹𐍄|𐌱𐌰𐌹𐍄𐌰}}",
+       "ncategories": "$1 {{PLURAL:$1|𐌺𐌿𐌽𐌾𐌰|𐌺𐌿𐌽𐌾𐍉𐍃}}",
+       "nlinks": "$1 {{PLURAL:$1|táikjanbandi|táikjanbandja}}",
+       "nmembers": "$1 {{PLURAL:$1|niutand|niutanda}}",
+       "wantedpages": "Gaírnedum seidam",
+       "shortpages": "𐌻𐌴𐌹𐍄𐌹𐌻𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
+       "longpages": "𐌻𐌰𐌲𐌲𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
+       "listusers": "𐍂𐌴𐌲𐌹𐍃𐍄𐍂𐌴𐍂𐌰𐌳𐌴 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌳𐍃",
+       "newpages": "𐌽𐌹𐌿𐌾𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
+       "move": "𐌽𐌰𐌼𐌾𐌰𐌽 𐌰𐍆𐍄𐍂𐌰",
+       "movethispage": "𐍃𐌺𐌹𐌿𐌱𐌰𐌽 𐍃𐌰 𐍃𐌴𐌹𐌳𐍉",
+       "specialloguserlabel": "Niutand:",
+       "speciallogtitlelabel": "Namo:",
+       "log": "𐌻𐍉𐌲𐌱𐍉𐌺𐍉𐍃",
+       "all-logs-page": "𐌰𐌻𐌻𐌰 𐌻𐍉𐌲𐍉𐍃",
+       "allpages": "𐌰𐌻𐌻𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐍃",
+       "nextpage": "𐌹𐍆𐍄𐌿𐌼𐌰 𐍃𐌴𐌹𐌳𐍉 ($1)",
+       "prevpage": "𐌰𐍆𐍄𐌿𐌼𐌰 𐍃𐌴𐌹𐌳𐍉 ($1)",
+       "allarticles": "𐌰𐌻𐌾𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
+       "allpagessubmit": "𐌰𐍆𐌲𐌰𐌲𐌲𐌰𐌽",
+       "categories": "𐌺𐌿𐌽𐌾𐍉𐍃",
+       "linksearch-ns": "𐍃𐌴𐌹𐌳𐍉𐍆𐌴𐍂𐌰:",
+       "emailuser": "𐍃𐌰𐌽𐌳𐌾𐌰𐌽 𐌸𐍉 𐌽𐌹𐌿𐍄𐌰𐌽𐌳 𐌱𐍉𐌺𐍉𐌼",
+       "watchlist": "𐌼𐌴𐌹𐌽𐍉𐍃 𐍅𐌹𐍄𐌰𐌽𐌳𐍃𐌻𐌴𐌹𐍃𐍄𐌰",
+       "mywatchlist": "𐌼𐌴𐌹𐌽𐍉𐍃 𐍅𐌹𐍄𐌰𐌽𐌳𐍃𐌻𐌴𐌹𐍃𐍄𐌰",
+       "watch": "𐍅𐌰𐍂𐌰𐌽",
+       "watchthispage": "𐍅𐌰𐍂𐌰𐌽 𐍃𐌴𐌹𐌳𐍉",
+       "unwatch": "𐌽𐌹𐍅𐌰𐍂𐌰𐌽",
+       "watchlist-details": "{{PLURAL:$1|$1 seido|$1 seidona}} witáiþs inu maþleiseidam.",
+       "watching": "Wita...",
+       "unwatching": "Niwita...",
+       "created": "𐌲𐌰𐍃𐌺𐌰𐍀𐌾𐌰𐌽",
+       "deletepage": "𐍄𐌰𐌹𐍂𐌰 𐍃𐌴𐌹𐌳𐍉",
+       "delete-legend": "𐍄𐌰𐌹𐍂𐌰𐌽",
+       "actioncomplete": "𐍅𐌰𐍃𐌿𐌷 𐌹𐍄𐌰 𐌲𐌰𐌿𐍃𐍄𐌹𐌿𐌷𐌰𐌽",
+       "dellogpage": "𐍄𐌰𐌹𐍂𐌰 𐌰𐌹𐍂𐍅𐌱𐍉𐌺𐌰",
+       "deleteotherreason": "𐌰𐌽𐌸𐌰𐍂/𐌼𐌰𐌹𐍃 𐌼𐌹𐍄𐍉𐌽𐍃:",
+       "deletereasonotherlist": "𐌰𐌽𐌸𐌰𐍂 𐌼𐌹𐍄𐍉𐌽𐍃",
+       "rollbacklink": "𐌰𐍆𐍅𐌰𐌻𐍅𐌾𐌰𐌽",
+       "protectlogpage": "Log af Baírgjan",
+       "prot_1movedto2": "[[$1]] skiubiþ du [[$2]]",
+       "protect-level-sysop": "𐍃𐌴𐌹𐌳𐍉𐍆𐌰𐌸𐍃 𐌰𐌹𐌽𐌰𐌷𐌰",
+       "protect-expiring": "bláuþiþ $1 (UTC)",
+       "restriction-type": "Freihals:",
+       "restriction-edit": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
+       "restriction-move": "𐍃𐌺𐌹𐌿𐌱𐌰𐌽",
+       "undeletebtn": "𐌰𐍆𐍄𐍂𐌰 𐌲𐌰𐌱𐍉𐍄𐌾𐌰𐌽",
+       "undeletelink": "𐍃𐌰𐌹𐍈𐌰𐌽/𐌰𐍆𐍄𐍂𐌰𐌲𐌰𐍃𐌰𐍄𐌾𐌰𐌽",
+       "undeleteviewlink": "𐍃𐌰𐌹𐍈𐌹𐍃",
+       "undelete-search-submit": "Sokeiþ",
+       "namespace": "𐍃𐌴𐌹𐌳𐍉𐍆𐌴𐍂𐌰:",
+       "invert": "Afwandjan kustus",
+       "blanknamespace": "(𐍆𐍂𐌿𐌼𐌹𐍃𐍄𐍃)",
+       "contributions": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃 𐌰𐌹𐍅𐌻𐌰𐌲𐌹𐍉𐍃",
+       "mycontris": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌰𐌹𐍅𐌻𐌰𐌲𐌹𐍉𐍃",
+       "contribsub2": "𐍆𐌰𐌿𐍂 $1 ($2)",
+       "uctop": "(háubiþ)",
+       "month": "𐍆𐍂𐌰𐌼 𐌼𐌴𐌽𐍉𐌸𐍃 (𐌾𐌰𐌷 𐌰𐍆𐍄𐌿𐌼𐌰):",
+       "year": "𐍆𐍂𐌰𐌼 𐌾𐌴𐍂𐌰 (𐌾𐌰𐌷 𐌰𐍆𐍄𐌿𐌼𐌰):",
+       "sp-contributions-newbies-sub": "Faúr niujis niutandis",
+       "sp-contributions-blocklog": "Logboka af afdraúsjan",
+       "sp-contributions-talk": "Maþleiseido",
+       "whatlinkshere": "𐍈𐌰𐍂𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌷𐌻𐌰𐌲𐌺𐌾𐌰𐌽𐌳 𐌷𐌹𐌳𐍂𐌴",
+       "whatlinkshere-title": "Seidos hwarjis du $1 táiknjan",
+       "isredirect": "𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉",
+       "istemplate": "ináukan",
+       "whatlinkshere-prev": "{{PLURAL:$1|aftuma|aftumans $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|iftuma|iftumans $1}}",
+       "whatlinkshere-links": "← táikajanbandja",
+       "blockip": "𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
+       "ipbreason": "𐍆𐌰𐌹𐍂𐌹𐌽𐌰:",
+       "ipboptions": "𐌱 𐌰𐍅𐍂𐌰:2 hours, 𐌰 𐌳𐌰𐌲𐍃:1 day, 𐌲 𐌳𐌰𐌲𐍉𐍃:3 days, 𐌰 𐍅𐌹𐌺𐍉:1 week, 𐌱 𐍅𐌹𐌺𐍉𐌽𐍃:2 weeks, 𐌰 𐌼𐌴𐌽𐍉𐌸𐍃:1 month, 𐌲 𐌼𐌴𐌽𐍉𐌸𐍉𐍃:3 months, 𐌵 𐌼𐌴𐌽𐍉𐌸𐍉𐍃:6 months, 𐌰 𐌾𐌴𐍂:1 year, 𐌹𐌽𐌿𐍄𐍂𐌹𐌲𐌲𐌴𐌽𐌳𐌴𐌹𐍃:infinite",
+       "ipblocklist-submit": "Sokeiþ",
+       "infiniteblock": "ajukduþs",
+       "blocklink": "𐍅𐌰𐍂𐌲𐌾𐌰𐌽",
+       "unblocklink": "𐍅𐌰𐌽𐌳𐌾𐌰𐌽",
+       "change-blocklink": "𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐍅𐌰𐌿𐍂𐌾𐌰𐍅𐌰𐌳𐌳𐌾𐌿𐍃",
+       "contribslink": "𐌲𐌹𐌱𐍉𐍃",
+       "blocklogpage": "𐌻𐍉𐌲𐌱𐍉𐌺𐌰 𐌰𐍆 𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌾𐌰𐌽",
+       "blocklogentry": "𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌹𐌸 [[$1]] 𐍆𐌰𐌿𐍂 $2 $3",
+       "movearticle": "𐍃𐌺𐌹𐌿𐌱𐌰 𐍃𐌴𐌹𐌳𐍉:",
+       "newtitle": "𐌳𐌿 𐌽𐌹𐌿𐌾𐌹𐍃 𐌽𐌰𐌼𐍉𐍃:",
+       "move-watch": "𐍅𐌹𐍄𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉",
+       "movepagebtn": "𐍃𐌺𐌹𐌿𐌱𐌰 𐍃𐌴𐌹𐌳𐍉",
+       "movelogpage": "Log af skiubans",
+       "movereason": "𐍆𐌰𐌹𐍂𐌹𐌽𐌰:",
+       "revertmove": "𐍂𐌰𐌹𐌳𐌾𐌰𐌽",
+       "export": "𐌿𐍄𐌼𐌹𐌸𐍃𐌰𐍄𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
+       "thumbnail-more": "𐌱𐌹𐌰𐌿𐌺𐌰𐌽",
+       "tooltip-pt-userpage": "𐌸𐌴𐌹𐌽𐌰 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉",
+       "tooltip-pt-mytalk": "𐌸𐌴𐌹𐌽𐌰 𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰𐍃𐌴𐌹𐌳𐍉",
+       "tooltip-pt-preferences": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃",
+       "tooltip-pt-watchlist": "𐌻𐌴𐌹𐍃𐍄𐌰 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌴𐌹 𐌸𐌿 𐌰𐍄𐍅𐌹𐍄𐌰𐌹𐍃 𐍆𐌰𐌿𐍂 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌽𐍃",
+       "tooltip-pt-mycontris": "𐍄𐌰𐌻𐌰 𐌰𐍆 𐌸𐌴𐌹𐌽 𐌲𐌹𐌱𐍉𐌽𐍃",
+       "tooltip-pt-login": "𐌸𐌿 𐌹𐍃 𐌲𐌰𐍈𐌰𐍄𐌾𐌰𐌽𐌳𐍃 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽; 𐌰𐌸𐌸𐌰𐌽, 𐌽𐌹𐍃𐍄 𐌸𐌰𐌿𐍂𐌱𐌰𐌽𐍃",
+       "tooltip-pt-logout": "𐌻𐌴𐌹𐌸𐌰𐌽",
+       "tooltip-ca-talk": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌹 𐌱𐌹 𐌲𐌰𐌷𐌰𐌱𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
+       "tooltip-ca-edit": "𐌸𐌿 𐌼𐌰𐌲𐍄 𐌼𐌰𐌹𐌳𐌾𐌹𐍃 𐌸𐌰𐍄𐌰 𐍃𐌴𐌹𐌳𐍉. 𐌾𐌰𐌱𐌰𐌹 𐍅𐌹𐌻𐌴𐌹𐍃, 𐌱𐍂𐌿𐌺𐌾𐌹𐍃 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰𐌹𐍃 𐍆𐍂𐌿𐌼𐌰.",
+       "tooltip-ca-addsection": "𐌰𐌽𐌰𐍃𐍄𐍉𐌳𐌾𐌹𐍃 𐌽𐌹𐌿𐌾𐌰 𐌳𐌰𐌹𐌻",
+       "tooltip-ca-viewsource": "𐍃𐍉 𐍃𐌴𐌹𐌳𐍉 𐌹𐍃𐍄 𐌷𐌻𐌴𐌹𐌱𐌾𐌰𐌽𐌳𐍃\n𐌸𐌿 𐌼𐌰𐌲𐍄 𐍃𐌰𐌹𐍈𐌹𐍃 𐌹𐌶𐍉𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
+       "tooltip-ca-history": "𐍆𐌰𐌿𐍂𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐌸𐌹𐌶𐌿𐌷 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
+       "tooltip-ca-protect": "𐌱𐌰𐌹𐍂𐌲𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉",
+       "tooltip-ca-delete": "𐍄𐌰𐌹𐍂𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉",
+       "tooltip-ca-move": "𐍃𐌺𐌹𐌿𐌱𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉",
+       "tooltip-ca-watch": "𐌰𐌽𐌰𐌰𐌿𐌺𐌹𐍃 𐌸𐌹𐌶𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽 𐌰𐌽𐌰 𐌸𐌴𐌹𐌽𐌰 𐍅𐌹𐍄𐌰𐌽𐌳𐌻𐌴𐌹𐍃𐍄𐌰",
+       "tooltip-search": "𐍃𐍉𐌺𐌾𐌰𐌽 {{SITENAME}}",
+       "tooltip-search-go": "𐍆𐌰𐍂𐌹𐍃 𐌳𐌿 𐍃𐌴𐌹𐌳𐍉𐌽 𐌼𐌹𐌸 𐌲𐌻𐌰𐌲𐌲𐌿𐌾𐌰𐌼𐌰 𐌽𐌰𐌼𐌹𐌽 𐌾𐌰𐌱𐌰𐌹 𐌹𐍃𐍄",
+       "tooltip-search-fulltext": "𐍃𐍉𐌺𐌾𐌰𐌽 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐍆𐌰𐌿𐍂 𐌸𐌰𐌽𐌰 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌽",
+       "tooltip-p-logo": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
+       "tooltip-n-mainpage": "𐍃𐌰𐌹𐍈𐌰𐌽 𐍃𐌰 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
+       "tooltip-n-mainpage-description": "𐍃𐌰𐌹𐍈𐌰𐌹𐍃 𐍃𐌰 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
+       "tooltip-n-portal": "𐌱𐌹 𐌸𐌹𐌶𐌰𐌹 𐍆𐌰𐌿𐍂𐌰𐍅𐌰𐌿𐍂𐍀𐌰𐌹, 𐍈𐌰𐍃 𐌸𐌿 𐌼𐌰𐌲 𐍄𐌰𐌿𐌾𐌰, 𐍈𐌰𐍃 𐍃𐍄𐌰𐌸𐍃 𐌱𐌹𐌲𐌹𐍄𐌰𐌽 𐌹𐌽𐍃",
+       "tooltip-n-currentevents": "𐌱𐌹𐌲𐌹𐌸𐌹𐍃 𐌱𐌰𐌺𐌲𐌰𐌷𐌰𐌱𐌹 𐌱𐌹 𐌽𐌹𐌿𐌾𐌰𐌽𐍃 𐍅𐌰𐌹𐌷𐍄𐌰𐌽𐍃",
+       "tooltip-n-recentchanges": "𐌻𐌴𐌹𐍃𐍄𐌰 𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐌴 𐌽𐌿 𐌰𐌽𐌰 𐌸𐌰𐌼𐌼𐌰 𐍅𐌹𐌺𐌾𐌰",
+       "tooltip-n-randompage": "𐌿𐍃𐌻𐌰𐌸𐌰𐌹𐌸 𐍃𐌻𐌿𐌼𐍀𐌼𐌰𐍃𐍃𐌹𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉",
+       "tooltip-n-help": "𐍃𐌰 𐍃𐍄𐌰𐌸𐍃 𐍆𐌹𐌽𐌸𐌰𐌽",
+       "tooltip-t-whatlinkshere": "𐌻𐌴𐌹𐍃𐍄𐌰 𐌰𐌻𐌻𐌹𐍃 𐍅𐌹𐌺𐌾𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍉 𐌴𐌹 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳 𐌷𐌹𐌳𐍂𐌴",
+       "tooltip-t-recentchangeslinked": "𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐌽𐌿 𐍅𐌹𐌸𐍂𐌰 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌸𐌰𐍄𐌴𐌹 𐍃𐌹𐌽𐌳 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐍃 𐌿𐍃 𐌸𐌰𐌼𐌼𐌰 𐍃𐌴𐌹𐌳𐍉𐌽",
+       "tooltip-feed-atom": "𐌰𐍄𐍉𐌼 𐍂𐌹𐌽𐌽𐍉 𐌱𐌹 𐌸𐌹𐌶𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽",
+       "tooltip-t-upload": "𐌿𐍃𐌷𐌻𐌰𐌸𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
+       "tooltip-t-specialpages": "𐌻𐌴𐌹𐍃𐍄𐌰 𐌸𐌹𐌶𐍉 𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐌽𐍉",
+       "tooltip-t-print": "𐍅𐍂𐌴𐌹𐍄𐌼𐌰𐌷𐍄𐌴𐌹𐌲 𐌿𐍃𐌲𐌰𐌱𐍉𐍃 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
+       "tooltip-t-permalink": "𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉 𐍃𐍄𐌰𐌽𐌳𐌰𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐌰 𐍅𐌹𐌸𐍂𐌰 𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
+       "tooltip-ca-nstab-main": "𐍃𐌰𐌹𐍈𐌰𐌹𐍃 𐌸𐌰𐍄𐌰 𐌲𐌰𐌷𐌰𐌱𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
+       "tooltip-ca-nstab-user": "𐍃𐌰𐌹𐍈𐌰𐌽 𐍃𐌰 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉",
+       "tooltip-ca-nstab-image": "𐍃𐌰𐌹𐍈𐌰𐌽 𐌸𐍉 𐍆𐌴𐌹𐌻𐌰𐍃𐌴𐌹𐌳𐍉𐌽",
+       "tooltip-ca-nstab-template": "𐍃𐌰𐌹𐍈𐌹𐍃 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽",
+       "tooltip-ca-nstab-category": "𐍃𐌰𐌹𐍈𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽 𐌷𐌰𐌽𐍃𐍉",
+       "tooltip-save": "𐍃𐌺𐍂𐌴𐌹𐌱𐌰𐌹𐌽 𐌸𐌴𐌹𐌽 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
+       "tooltip-preview": "𐍆𐌰𐌿𐍂𐍃𐌰𐍈𐌹𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍉𐍃 𐌸𐌴𐌹𐌽𐌰, 𐌱𐌹𐌳𐌾𐌰 𐌸𐌿𐌺 𐌱𐍂𐌿𐌺𐌾𐌰𐌽 𐌸𐌰𐍄𐌰 𐍆𐌰𐌿𐍂𐌰 𐌼𐌴𐌻𐌾𐌹𐍃!",
+       "tooltip-diff": "𐍃𐌰𐌹𐍈𐌹𐌸 𐌸𐌰𐌽𐌶𐌴𐌹 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍉𐍃 𐌸𐌰𐍄𐌴𐌹 𐌱𐍂𐌿𐌺𐌾𐌹𐍃 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌹𐌽𐍃",
+       "tooltip-rollback": "\"𐌰𐍆𐍅𐌰𐌻𐍅𐌾𐌰𐌽\" 𐌱𐌰𐌺𐌼𐌰𐌹𐌳𐌾𐌹𐌸 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐌱𐌹 𐌸𐌹𐌶𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽 𐍅𐌹𐍃𐌰𐌽 𐍃𐍉 𐌲𐌰𐌼𐌰𐌳𐌾𐌴𐌹 𐌼𐌰𐌽𐌰𐌲𐌹𐍃𐍄𐍃 𐌽𐌹𐌿𐌾𐌰 𐌲𐌹𐌱𐌰𐌾𐌹𐌽𐍃 𐍆𐍂𐌰𐌼 𐌰𐌹𐌽𐍃 𐌺𐌻𐌹𐌺",
+       "tooltip-undo": "\"𐌽𐌹𐌿𐍃𐌺𐌰𐍀𐌾𐌰𐌽\" 𐌱𐌰𐌺𐌼𐌰𐌹𐌳𐌾𐌹𐌸 𐌹𐌽𐌼𐌰𐌹𐌳𐌲𐌴𐌹𐌽𐍃 𐌾𐌰𐌷 𐌿𐍃𐌻𐌿𐌺𐍉𐌸 𐌼𐌰𐌹𐌳𐌾𐌰𐍆𐍉𐍂𐌼𐍉𐌽 𐍃𐍅𐌴 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰 𐌷𐌹𐍅𐌾𐌰. 𐌸𐌰𐍄𐌰 𐌻𐌴𐍄 𐌰𐌽𐌰𐌿𐌺𐌰𐌽𐌰𐌽 𐍃𐌰𐌿𐌸𐌰 𐌹𐌽 𐌹𐌽𐌽𐌰𐌷𐌰𐌻𐌳𐌰𐌰𐌽𐌲𐌰𐌱𐌰.",
+       "tooltip-summary": "𐌰𐍄𐌲𐌰𐌲𐌲𐌹𐍃 𐌹𐌽𐌽𐌰𐌷𐌰𐌻𐌳𐌰𐌰𐌽𐌲𐌰𐌱𐌰 𐌼𐌰𐌿𐍂𐌲𐌾𐌰",
+       "previousdiff": "← 𐌰𐍆𐍄𐌿𐌼𐌰 𐌰𐌹𐍂𐌹𐍃",
+       "nextdiff": "Iftuma áiris →",
+       "file-info-size": "$1 × $2 𐍀𐌹𐌺𐍃𐌴𐌻𐌰, 𐍆𐌴𐌹𐌻𐍅𐌰𐌷𐍃𐍄𐌿𐍃: $3, 𐌼𐌹𐌼𐌴 𐌺𐌿𐌽𐌹: $4",
+       "show-big-image": "Fullis wahstus",
+       "ilsubmit": "Sokeiþ",
+       "metadata": "𐌿𐍆𐌰𐍂𐌳𐌰𐍄𐌰",
+       "namespacesall": "𐌰𐌻𐌻𐌹𐍃",
+       "monthsall": "𐌰𐌻𐌻𐌹𐍃",
+       "imgmultigo": "Afgaggan!",
+       "table_pager_limit_submit": "Affgaggan",
+       "version-other": "Anþar",
+       "specialpages": "𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐍃",
+       "tag-filter": "[[Special:Tags|𐍄𐌰𐌹𐌺𐌽𐍉𐍃]] 𐍆𐌹𐌻𐌷𐌰",
+       "rightsnone": "(ni áinshun)"
 }
index 01dc517..45ed4cd 100644 (file)
        "passwordreset-username": "Ὄνομα χρωμένου:",
        "changeemail-none": "(οὐδέν)",
        "changeemail-submit": "Ἀλλάττειν ἠλ.-ταχυδρομεῖον",
-       "changeemail-cancel": "Ἀκυροῦν",
        "bold_sample": "Γράμματα παχέα",
        "bold_tip": "Γράμματα παχέα",
        "italic_sample": "Γράμματα πλάγια",
        "mergehistory-same-destination": "Δέλτοι-πηγαὶ καὶ δέλτοι-προορισμοὶ οὐκ ἔξεστι εἶναι ὅμοιαι",
        "mergehistory-reason": "Αἰτία:",
        "mergelog": "Τῶν συγχωνεύσεων καταλόγος",
-       "pagemerge-logentry": "συγκεχωνευμένον ἐστὶν τὸ [[$1]] μετὰ τοῦ [[$2]] (ἀναθεωρήσεις μέχρι $3)",
        "revertmerge": "Ἀποσυγχωνεύειν",
        "mergelogpagetext": "Κατωτέρω ἐστὶ διαλογή τις τῶν πλείω προσφάτων συγχωνεύσεων τοῦ ἱστορικοῦ δέλτου τινὸς μετὰ αὐτοῦ ἑτέρας τινός.",
        "history-title": "Αἱ πρότεραι ἐκδόσεις τῆς δέλτου \"$1\"",
        "searchrelated": "σχετικά",
        "searchall": "ἅπασαι",
        "showingresults": "Δεικνύναι κατωτέρω μέχρι {{PLURAL:$1|'''1''' ἀποτέλεσμα|'''$1''' ἀποτελέσματα}}· ἐκκίνησις ἐκ τοῦ #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Ἀποτέλεσμα'''$1''' ἀπὸ '''$3'''|Ἀποτελέσματα '''$1 - $2''' ἀπὸ '''$3'''}} περὶ '''$4'''",
        "search-nonefound": "Οὐδὲν ἀποτέλεσμα ἀντίστοιχον τῆς πεύσεως.",
        "powersearch-legend": "Ἀνωτέρα ἀναζήτησις",
        "powersearch-ns": "Ζήτησις ἐν τοῖς ὀνοματείοις:",
        "statistics": "Τὰ περὶ τῶν δεδομένων",
        "statistics-header-pages": "Στατιστικὰ δέλτου",
        "statistics-header-edits": "Μεταγράφειν τὰ στατιστικά",
-       "statistics-header-views": "Ὁρᾶν τὰ στατιστικά",
        "statistics-header-users": "Χρωμένου στατιστικά",
        "statistics-header-hooks": "Ἀλλα στατιστικά",
        "statistics-articles": "Δέλτοι περιεχομένων",
        "statistics-files": "Ἀρχεῖα ἐπιπεφορτισμένα",
        "statistics-edits": "Αἱ μεταγραφαὶ τῆς δέλτου ἀφὄτου {{SITENAME}} ἐγκατεστάθησαν",
        "statistics-edits-average": "Μέσος ἀριθμὸς μεταγραφῶν ἀνὰ δέλτον",
-       "statistics-views-total": "Συνολικαὶ ἐπιθεωρήσεις",
-       "statistics-views-peredit": "Ἐπιθεωρήσεις ἀνὰ μεταγραφή",
        "statistics-users": "Ἐγγεγραμμένοι [[Special:ListUsers|χρώμενοι]]",
        "statistics-users-active": "Ἐνεργοὶ χρώμενοι <small>(χρώμενοι οἳ have edited or performed an action διάφορον τῆς ποιήσεως λογισμοῦ ἐν τῷ παρελθόντι μηνί)</small>",
        "statistics-users-active-desc": "Χρώμενοι δραστήριοι ἐν τῷ παρελθόντι μηνί {{PLURAL:$1|ἡμέρα|$1 ἡμέραι}}",
-       "statistics-mostpopular": "Αἱ πλέον θεωρουμέναι δέλτοι",
        "doubleredirects": "Ἀναδιευθύνσεις διπλότυπαι",
        "doubleredirectstext": "Ἥδε ἡ δέλτος συγκαταλέγει δέλτους αἵπερ ἀνακατευθύνουσι πρὸς ἑτέρας δέλτους ἀνακατευθύνσεως. Πᾶσα σειρά περιέχει συνδέσμους πρὸς τὴν τε πρώτην καὶ τὴν τε δευτέραν δέλτον ἀνακατευθύνσεως καὶ τὸν τε προορισμὸν τῆς δευτέρας δέλτου ἀνακατευθύνσεως ἥπερ ἐστὶ συνήθως ὁ πραγματικὸς προορισμὸς τῆς ἀνακατευθύνσεως ὅπου σὲ ἔδει δεδεγμένος εἶναι. Τὰ <del>διαγεγραμμένα</del> λήμματα ἐπιλέλυνται.",
        "double-redirect-fixed-move": "Ἡ [[$1]] κεκίνηται, τὸ νῦν ἀναδιευθύνεται πρὸς τὴν [[$2]]",
        "uncategorizedtemplates": "Ἀκατηγοριοποίητα πρότυπα",
        "unusedcategories": "Ἄχρησται κατηγορίαι",
        "unusedimages": "Ἄχρηστα ἀρχεῖα",
-       "popularpages": "Δημοφιλεῖς δέλτοι",
        "wantedcategories": "Αἰτούμεναι κατηγορίαι",
        "wantedpages": "Αἱ δέλτοι οἷας ἱμείρομεν",
        "wantedpages-badtitle": "Ἄκυρος ἐπιγραφὴ ἐν τῷ συνόλῳ ἀποτελεσμάτων: $1",
        "suppress": "Ἐπόπτης",
        "booksources": "Αἱ ἐν βίβλοις πηγαί",
        "booksources-search-legend": "Ζητεῖν πηγὰς βίβλων",
-       "booksources-go": "Ἰέναι",
        "booksources-invalid-isbn": "Τὸ δοθὲν ISBN προφανῶς ἄκυρον ἐστίν· διεξάγαγε ἔλεγχον περὶ πιθανῶν σφαλμάτων προερχομένων ἐκ τῆς πρωτοτύπου πηγῆς.",
        "specialloguserlabel": "Χρώμενος:",
        "speciallogtitlelabel": "Ἐπιγραφή:",
        "watchlist-details": "{{PLURAL:$1|$1 δέλτος|$1 δέλτοι}} ἐφορωμέναι, ἄνευ τῶν δέλτων διαλέξεως περιλαμβανομένων.",
        "wlheader-enotif": "Σύστημα εἰδήσεως μέσῳ ἠλ-ἐπιστολῶν ἐνεργόν.",
        "wlnote": "Κατωτέρω {{PLURAL:$1|ἐστὶν ἡ ὑστάτη μεταβολὴ|εἰσὶν αἱ ὑστάται  '''$1'''  μεταβολαὶ}} ἐν {{PLURAL:$2|τῇ ὑστάτῃ μίᾳ ὥρᾳ|ταῖς ὑστάταις '''$2''' ὥραις}}.",
-       "wlshowlast": "Ἐμφάνισις τῶν τελευταίων $1 ὡρῶν $2 ἡμερῶν $3",
+       "wlshowlast": "Ἐμφάνισις τῶν τελευταίων $1 ὡρῶν $2 ἡμερῶν",
        "watchlist-options": "Ἐπιλογαὶ ἐφοροδιαλογῆς",
        "watching": "Ἐφορῶν...",
        "unwatching": "Ἀνεφορῶν...",
        "thumbnail_image-missing": "Ἀρχεῖον καταφανῶς ἐκλιπόν: $1",
        "import": "Εἰσάγειν δέλτους",
        "importinterwiki": "Ὑπερδιαβικι-εἰσαγωγή",
-       "import-interwiki-source": "Βίκι/δέλτος πηγή:",
        "import-interwiki-history": "Ἀντιγράφειν ἁπάσας τὰς ἐκδόσεις τοῦ ἱστορικοῦ τῆσδε τῆς δέλτου",
        "import-interwiki-templates": "Συμπερίληψις ἁπάντων τῶν προτύπων",
        "import-interwiki-submit": "Εἰσάγειν",
        "spambot_username": "Κάθαρσις τῶν ἀνεπιθυμήτων ἀγγελιῶν τῆς MediaWiki",
        "pageinfo-title": "Πύστις περὶ \"$1\"",
        "pageinfo-header-edits": "Μεταγραφαί",
-       "pageinfo-views": "Ἀριθμὸς προβολῶν",
        "pageinfo-edits": "Ἀριθμὸς μεταγραφῶν",
        "markaspatrolleddiff": "Σεσημασμένη ὡς φρουρουμένη",
        "markaspatrolledtext": "Σημαίνειν τήνδε τὴν δέλτον ὡς φρουρούμενη",
        "exif-dc-publisher": "Ἐκδότης",
        "exif-iimcategory-pol": "Πολιτική",
        "exif-iimcategory-spo": "Άθλοπαιδιαί",
-       "watchlistall2": "ἅπασαι",
        "namespacesall": "ἅπασαι",
        "monthsall": "ἅπαντες",
        "confirmemail": "Ἐπιβεβαίωσον διεύθυνσιν ἠλ-ταχυδρομείου",
        "revdelete-restricted": "ἐφηρμοσμένοι περιορισμοὶ διὰ τοὺς ἐπιτρόπους",
        "revdelete-unrestricted": "αἱρεθέντες περιορισμοὶ διὰ τοὺς ἐπιτρόπους",
        "rightsnone": "(Οὐδέν)",
+       "revdelete-summary": "σύνοψις μεταγραφῶν",
        "feedback-cancel": "Ἀκυροῦν",
        "searchsuggest-search": "Ζητεῖν",
        "searchsuggest-containing": "περιέχον...",
index 97e5b09..57c018c 100644 (file)
@@ -35,6 +35,7 @@
        "tog-watchdefault": "Sälber gändereti Syte un Dateie automatisch beobachte",
        "tog-watchmoves": "Sälber verschobeni Sytene un Dateie automatisch beobachte",
        "tog-watchdeletion": "Sälber gleschti Sytene un Dateie automatisch beobachte",
+       "tog-watchrollback": "Syte, wun i zruckgsetzt haa, automatisch beobachte",
        "tog-minordefault": "Alli dyni Änderigen als «chlyni Änderige» markiere",
        "tog-previewontop": "Vorschou vor em Editierfänschter aazeige",
        "tog-previewonfirst": "Vorschou aazeige bim erschten Editiere",
        "otherlanguages": "Anderi Sproche",
        "redirectedfrom": "(Witergleitet vun $1)",
        "redirectpagesub": "Umgleiteti Syte",
+       "redirectto": "Wyterleitig uf:",
        "lastmodifiedat": "Letschti Änderig vo dere Syte: $2, $1<br />",
        "viewcount": "Die Syte isch {{PLURAL:$1|eimol|$1 Mol}} bsuecht wore.",
        "protectedpage": "Gschützti Syte",
        "hidetoc": "zueklappe",
        "collapsible-collapse": "zueklappe",
        "collapsible-expand": "ufklappe",
+       "confirmable-confirm": "{{GENDER:$1|Bisch}} sicher?",
+       "confirmable-yes": "Jo",
+       "confirmable-no": "Nei",
        "thisisdeleted": "Aaluege oder widerherstelle vu $1?",
        "viewdeleted": "$1 aaluege?",
        "restorelink": "{{PLURAL:$1|gleschti Änderig|$1 gleschti Ändrige}}",
        "viewsourcetext": "Quelltext vo dere Syte:",
        "viewyourtext": "Du chasch dr Quälltext vu '''Dyre Bearbeitig''' vu däre Syte aaluege un kopiere:",
        "protectedinterface": "In däre Syte het s Text fir s Sproch-Interface vu dr Software un si isch gsperrt, zum Missbruch z verhindre.",
-       "editinginterface": "'''Obacht:''' Du bisch e Syten am Verändere, wu zum User.Interface ghert. Wänn Du die Syte veränderesch, no änderet sich s User-Interface au fir di andere Benutzer vu däm Wiki. Fir Ibersetzige lueg bitte, eb Du doodefir s [//translatewiki.net/wiki/Main_Page?setlang=gsw Translatewiki] witt bruuche, s MediaWiki-Lokalisierigsprojäkt.",
+       "editinginterface": "<strong>Warnig:</strong> Uf däre Syte het s Täxt, wu vu dr MediaWiki-Software brucht wird. Änderigen uf däre Syte wirke si uf d Benutzeroberflechi vu däm Wiki uus.",
+       "translateinterface": "Go Ibersetzige fir alli Wiki zuefiege oder ändere, bruuch bitte [//translatewiki.net/ translatewiki.net], s MediaWiki-Lokalisierigsprojäkt.",
        "cascadeprotected": "Die Syte isch fir s Bearbeite gsperrt. Si isch yybunde in {{PLURAL:$1|die Syte, wu do chunnt|die Syte, wu do chemme}} , wu mit ere Kaskadesperroption gschitzt {{PLURAL:$1|isch|sin}}:\n$2",
        "namespaceprotected": "Du hesch kei Berächtigung, die Syte im '''$1'''-Namensruum z bearbeite.",
        "customcssprotected": "Du bisch nid berächtigt, die Syte mit CSS z bearbeite, wel si zue dr persenlige Yystellige vun eme andere Benutzer ghert.",
        "invalidtitle-knownnamespace": "Nit-gültige Titel mit Namensruum „$2“ un Text „$3“",
        "invalidtitle-unknownnamespace": "Ungültige Titel mit unbekannte Namensruumnummer $1 un Text „$2“",
        "exception-nologin": "Nit aagmäldet",
-       "exception-nologin-text": "Du muesch Di [[Special:Userlogin|aamälde]] go die Syte oder Aktion ufruefe chenne.",
+       "exception-nologin-text": "Du muesch Di aamälde go die Syte oder Aktion ufruefe chenne.",
        "exception-nologin-text-manual": "Du muesch Di $1 go die Syte oder Aktion ufruefe chenne.",
        "virus-badscanner": "Fählerhafti Konfiguration: Virescanner, wu nid bekannt isch: ''$1''",
        "virus-scanfailed": "Scan het nid funktioniert (code $1)",
        "createaccount-text": "Fir Dii isch e Benutzerkonto \"$2\" uf {{SITENAME}} ($4) aaglait wore. S Passwort fir \"$2\" , wu automatisch generiert woren isch, isch \"$3\". Du sottsch Di jetz aamälde un s Passwort ändere.\n\nWänn s Benutzerkonto us Versäh aaglait woren isch, chasch die Nochricht ignoriere.",
        "login-throttled": "Du hesch z vilmol umesuscht versuecht, Di aazmälde. Bitte wart $1, voreb Du s non emol versuechsch.",
        "login-abort-generic": "Dyy Aamäldig isch nit erfolgryych gsii – Abbroche",
+       "login-migrated-generic": "Dy Benutzerkonto isch migriert wore, Dy Benutzername git s nimi uf däm Wiki.",
        "loginlanguagelabel": "Sproch: $1",
        "suspicious-userlogout": "Dyy Versuech di abzmälde isch abbroche wore, wel s uusgsäh het, wie wänn s vun eme bschedigte Browser oder eme Cacheproxy uus gsändet woren isch.",
        "createacct-another-realname-tip": "Dr richtig Name isch optional.\nWänn Du ne aagiisch, wird er bruucht fir d Zueornig vu dr Byytreg.",
        "resetpass-temp-password": "Temporär Passwort:",
        "resetpass-abort-generic": "D Passwortänderig isch dur e Erwyterig abbroche wore.",
        "resetpass-expired": "Dy Passwort isch abglofe. Bitte leg e nej Passwort fir d Aamäldig fescht.",
+       "resetpass-expired-soft": "Dy Passwort isch abgloffe un mueß zruckgsetzt wäre. Bitte wehl jetz e nei Passwort uus oder klick uf „{{int:resetpass-submit-cancel}}“, go s speter zrucksetze.",
+       "resetpass-validity-soft": "Dy Passwort isch nit giltig: $1\n\nBitte wehl jetz e nei Passwort oder klick uf „{{int:resetpass-submit-cancel}}“, go s speter zrucksetze.",
        "passwordreset": "Passwort zruggsetze",
        "passwordreset-text-one": "Fill des Formular uus go Dy Passwort zrucksetze.",
        "passwordreset-text-many": "{{PLURAL:$1|Fill eis vu dr Fälder uus go Dy Passwort zrucksetze.}}",
        "passwordreset-emailsent-capture": "E Passwort-Zrucksetzigs-Mail isch vergschickt worde, un isch unte aazeigt.",
        "passwordreset-emailerror-capture": "Die unten angezeigte Passwortzrucksetzigsmail, wu unten aazeigt wird, isch generiert wore, aber dr Versand an {{GENDER:$2|dr Benutzer|d Benutzeri}} het nit funktioniert: $1",
        "changeemail": "E-Mail-Adräss ändre",
-       "changeemail-header": "D E-Mail-Adräss vo däm Chonto ändre",
        "changeemail-text": "Füll des Formular ganz uss, zume dyni E-Mail-Adräss ändre. Du muesch dyn Passwort aagee, zum die Änderig z bstätige.",
        "changeemail-no-info": "Du muesch aagmolde sy zum uff die Syte diräkt zuegryfe z chönne.",
        "changeemail-oldemail": "Aktuelli E-Mail-Adräss",
        "changeemail-none": "(nyt)",
        "changeemail-password": "Dy {{SITENAME}}-Passwort:",
        "changeemail-submit": "E-Mail Adräss ändre",
-       "changeemail-cancel": "Abbräche",
+       "changeemail-throttled": "Du hesch z vilmol versuecht Di aazmälde. Bitte wart $1, voreb Du s non emol versuechsch.",
        "resettokens": "Token zrucksetze",
        "resettokens-text": "Du chasch Token zrucksetze, wu Dir dr Zuegriff uf bstimmti privati Date megli mache, wu mit Dym Benutzerkonto do verchnipft sin.\n\nDes sottsch nume mache, wänn Du d Token us Versää mit eberem teilt hesch oder Dy Konto gfehrdet isch.",
        "resettokens-no-tokens": "S git kei Token zum Zrucksetze.",
        "preview": "Vorschou",
        "showpreview": "Vorschau aaluege",
        "showdiff": "Zeig Änderige",
-       "anoneditwarning": "'''Warnig:''' Si sin nit aagmäldet. Ihri IP-Adrässe wird in de Gschicht vo däm Artikel gspeicheret.",
+       "blankarticle": "<strong>Warnig:</strong> D Syte, wu Du aalaisch, isch läär.\nWänn Du nomol uf „{{int:savearticle}}“ klicksch, wird d Syte ohni Inhalt aaglait.",
+       "anoneditwarning": "<strong>Warnig:</strong> Du bisch nit aagmäldet. Dy IP-Adräss wird effetli sichtbar, wänn Du Bearbeitige machsch. Wänn di <strong>[$1 aamälde duesch]</strong> oder <strong>[$2 e Benutzerkonto aalaisch]</strong>, wäre Bearbeitige zämme mit andere Bytreg Dym Nenutzername zuegordnet.",
        "anonpreviewwarning": "''Du bisch nit aagmäldet. Bim Spychere wird Dyy IP-Adräss yydrait in d Versionsgschicht vu däre Syte.''",
        "missingsummary": "'''Obacht:''' Du hesch kei Zämefassig aagee. Wenn du nomol uf Spychere drucksch, wird d Änderung ohni gspychert.",
        "missingcommenttext": "Bitte gib Dyy Kommentar unte yy.",
        "edit-gone-missing": "D Syte het nid chenne aktalisiert wäre.\nSi isch schyns glescht wore.",
        "edit-conflict": "Bearbeitigskonflikt.",
        "edit-no-change": "Dyyni Bearbeitig isch ignoriert wore, wel kei Änderig am Täxt gmacht woren isch.",
+       "postedit-confirmation-created": "D Syte isch aaglait wore.",
+       "postedit-confirmation-restored": "D Syte isch widerhärgstellt wore.",
        "postedit-confirmation-saved": "Dyy Bearbeitig isch gspycheret wore.",
        "edit-already-exists": "Di nej Syte het nid chenne aaglait wäre, wel s si scho git.",
        "defaultmessagetext": "Standardtext",
        "content-failed-to-parse": "Parse vum Inhalt $2 fir Modell $1 fählgschlaa: $3",
        "invalid-content-data": "Uugiltigi Inhaltsdate",
        "content-not-allowed-here": "Dr Inhalt „$1“ isch uf dr Syte [[$2]] nit erlaubt",
-       "editwarning-warning": "Wänn Du die Syte verlosch, cha s syy, ass Du alli Bearbeitige verliersch, wu Du do dra gmacht hesch.\nWänn Du aagmäldet bisch, chasch s Anzeige vu däre Warnig im „Bearbeite“-Beryych vu Dyyne Yystelligen abstelle.",
+       "editwarning-warning": "Wänn Du die Syte verlosch, cha s syy, ass Du alli Bearbeitige verliersch, wu Du do dra gmacht hesch.\nWänn Du aagmäldet bisch, chasch s Anzeige vu däre Warnig im „{{int:prefs-editing}}“-Beryych vu Dyyne Yystelligen abstelle.",
+       "editpage-notsupportedcontentformat-title": "S Inhaltsformat wird nit unterstitzt",
+       "editpage-notsupportedcontentformat-text": "S Inhaltsformat $1 wird vum Inhaltsmodäll $2 nit unterstitzt.",
        "content-model-wikitext": "Wikitext",
        "content-model-text": "Klartext",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Syte, wu doppleti Argumänt in Vorlagenufruef verwände",
+       "duplicate-args-category-desc": "Uf dr Syte het s Vorlagenufruef, wu Duplikat vu Argumänt verwände, wie <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> oder <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Achtig: In däre Syte het s z vyyl Ufruef vu ufwändige Parserfunktione.\n\nS {{PLURAL:$2|derf nid meh wie ein Ufruef|derfe nid meh wie $1 Ufruef}} gee.",
        "expensive-parserfunction-category": "Syte, wu ufwändigi Parserfunktione z vyylmol ufruefe",
        "post-expand-template-inclusion-warning": "Warnig: D Gressi vu yybundene Vorlage isch z gross, e Teil Vorlage chenne nid yybunde wäre.",
        "parser-template-recursion-depth-warning": "Vorlagerekursionstiefegränz iberschritte ($1)",
        "language-converter-depth-warning": "Gränz vu dr Sprochkonvertertiefi iberschritte ($1)",
        "node-count-exceeded-category": "Syte, wo d Chnotezaal überschritte hen",
-       "node-count-exceeded-warning": "Die Syte het d Chnotepunktzaal überschritte.",
+       "node-count-exceeded-category-desc": "D Syte iberschrytet di maximal Chnotenaazahl.",
+       "node-count-exceeded-warning": "Die Syte het d Chnotepunktzaal iberschritte.",
        "expansion-depth-exceeded-category": "Syte, wo d Expansionsdiefi überschritte hen",
+       "expansion-depth-exceeded-category-desc": "D Syte iberschrytet di maximal Expandierigstiefi.",
        "expansion-depth-exceeded-warning": "Die Syte het d Expansionsdiefi überschritte.",
        "parser-unstrip-loop-warning": "Zirkelbezug festgstellt",
        "parser-unstrip-recursion-limit": "Rekursionsgränz bim Ufflöse überschritte ($1)",
        "undo-success": "Zum die Änderig ruckgängig z mache, kontrollier bitte d Bearbeitig in dr Verglichsaasicht un druck derno uf „Syte spichere“.",
        "undo-failure": "D Änderig het nid chenne ruckgängig gmacht wäre, wel dää Abschnitt mittlerwyli gänderet woren isch.",
        "undo-norev": "D Bearbeitig het nid chenne ruckgängig gmacht wäre, wel si nid vorhande oder glescht isch.",
+       "undo-nochange": "Schyns isch die Bearbeitig scho rugggängig gmacht wore.",
        "undo-summary": "D Änderig $1 vu [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) isch ruckgängig gmacht wore.",
        "undo-summary-username-hidden": "Änderig $1 vun eme versteckte Benutzer ruckgängig gmacht.",
        "cantcreateaccounttitle": "Benutzerkonto cha nid aagleit wäre.",
        "cantcreateaccount-text": "S Aalege vu me Benutzerkonto vu dr IP-Adräss '''($1)''' isch dur [[User:$3|$3]] gsperrt wore.\n\nGrund vu dr Sperri: ''$2''",
+       "cantcreateaccount-range-text": "S Aalege vu Benutzerkonte vu IP-Adrässen im Berych '''$1''', wu s Dyni IP-Adräss ('''$4''') din het, isch vu [[User:$3|$3]] gsperrt wore.\n\nDr Grund, wu vu $3 aagee woren isch: ''$2''",
        "viewpagelogs": "Logbüecher für die Syten azeige",
        "nohistory": "S git kei Versionsgschicht fir die Syte.",
        "currentrev": "Itzigi Version",
        "currentrev-asof": "Aktuälli Version vu $1",
        "revisionasof": "Version vo $1",
-       "revision-info": "Alti Bearbeitig vom $1 dür $2",
+       "revision-info": "Version vu $4, $5 Uhr vu {{GENDER:$6|$2}}$7",
        "previousrevision": "← Vorderi Version",
        "nextrevision": "Nächschti Version →",
        "currentrevisionlink": "Itzigi Version",
        "rev-deleted-event": "(Logbuechaktion uusegnuh)",
        "rev-deleted-user-contribs": "[Benutzername oder IP-Adräss uusegnuu - Bearbeitig in dr Byytragslischt versteckt]",
        "rev-deleted-text-permission": "Die Version isch '''glescht''' wore.\nInformation zue dr Leschig un e Begrindig het s im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lesch-Logbuech].",
+       "rev-suppressed-text-permission": "Die Version isch <strong>unterdruckt</strong> wore.\nEinzelheite het s im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Oversight-Logbuech].",
        "rev-deleted-text-unhide": "Die Version isch '''gelöscht''' worde.\nMee Angabe chasch im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuech] finde.\nDu chasch [$1 die Version allno aaluege], wänn de wottsch.",
        "rev-suppressed-text-unhide": "Die Version isch '''unterdrückt''' worde.\nMee Angabe chasch im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückigs-Logbuech] finde.\nDu chasch [$1 die Version allno aaluege], wänn de wottsch.",
        "rev-deleted-text-view": "Die Version isch '''glescht''' wore.\nDu chasch si allno aaluege. Details findsch im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuech].",
        "revdelete-no-file": "D Datei, wu Du aagee hesch, git s nit.",
        "revdelete-show-file-confirm": "Bisch sicher, ass Du di glescht Version vu dr Datei „<nowiki>$1</nowiki>“ vum $2 am $3 witt aaluege?",
        "revdelete-show-file-submit": "Jo",
+       "revdelete-selected-text": "Uusgwehlti {{PLURAL:$1|Version|Versione}} vu [[:$2]]:",
+       "revdelete-selected-file": "Uusgwehlti {{PLURAL:$1|Dateiversion|Dateiversione}} vu [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Usgwehlte Logbuechyytrag|Usgwehlti Logbuechyytreg}}:",
+       "revdelete-text-text": "Gleschti Versione blybe no dr Versionsgschicht, Teil vu ihrem Inhalt sin aber nimi effetli zuegängig.",
+       "revdelete-text-file": "Gleschti Dateiversione blybe no in dr Datei-Versionsgschicht, Teil vu ihrem Inhalt sin aber nimi effetli zuegängig.",
+       "logdelete-text": "Gleschti Logbuechyytreg blybe no dr Logbiecher, Teil vu ihrem Inhalt sin aber nimi effetli zuegängig.",
+       "revdelete-text-others": "Anderi Administratore hän no Zuegriff uf dr verdeckt Inhalt un chenne ne au widerhärstelle, solang keini zuesetzlige Bschränkige feschtgleit wäre.",
        "revdelete-confirm": "Bitte tue bstetige, ass Du vor hesch, des z mache, d Konsequänze drus verstohsch un s machsch in Inbereinstimmig mit dr [[{{MediaWiki:Policy-url}}|Richtlinie]].",
        "revdelete-suppress-text": "Unterdruckige sotte '''nume''' in däne Fäll bruucht wäre:\n* Nit aabrochti Informatione\n*: ''Adrässe, Telifonnummere, Sozialversicherigsnummere usw.'",
        "revdelete-legend": "Setze vu dr Sichtbarkeits-Yyschränkige",
        "mergehistory-same-destination": "Uusgangs- un Ziilsyte derfe nit di nämlige syy",
        "mergehistory-reason": "Grund:",
        "mergelog": "Zämefierigs-Logbuech",
-       "pagemerge-logentry": "het [[$1]] in [[$2]] zämegfierd (Versione bis $3)",
        "revertmerge": "Zämefierig ruckgängig mache",
        "mergelogpagetext": "Des isch e Lischt vu dr letschte Zämefierige vu Versionsgschichte.",
        "history-title": "$1: Versionsgschicht",
        "searchrelated": "verwandt",
        "searchall": "alli",
        "showingresults": "Do {{PLURAL:$1|isch '''1''' Ergebnis|sin '''$1''' Ergebniss}}, s fangt aa mit dr Nummerer '''$2.'''",
-       "showingresultsheader": "{{PLURAL:$5|Ergebnis '''$1''' vu '''$3'''|Ergebnis '''$1 - $2''' vu '''$3'''}} fir '''$4'''",
        "search-nonefound": "Fir Dyyni Suechaafrog sin keini Ergebniss gfunde wore.",
        "powersearch-legend": "Erwytereti Suech",
        "powersearch-ns": "Suech in Namensryym:",
        "statistics": "Statistik",
        "statistics-header-pages": "Sytestatischtik",
        "statistics-header-edits": "Bearbeitigsstatischtik",
-       "statistics-header-views": "Sytenufruefstatischtik",
        "statistics-header-users": "Benutzer-Statischtik",
        "statistics-header-hooks": "Anderi Statischtike",
        "statistics-articles": "Inhaltssyte",
        "statistics-files": "Uffegladeni Dateie",
        "statistics-edits": "Sytebearbeitige",
        "statistics-edits-average": "Bearbeitige pro Syte im Durchschnitt",
-       "statistics-views-total": "Sytenufruef insgsamt",
-       "statistics-views-total-desc": "Ufruef vu Syte un Spezialsyte, wu s nit git, wäre nit berucksichtigt",
-       "statistics-views-peredit": "Sytenufruef pro Bearbeitig",
        "statistics-users": "Regischtrierti [[Special:ListUsers|Benutzer]]",
        "statistics-users-active": "Aktivi Benutzer",
        "statistics-users-active-desc": "Benutzer mit Bearbeitige {{PLURAL:$1|in dr letschte 24 Stund|in dr letschte $1 Täg}}",
-       "statistics-mostpopular": "Am meischte aagluegti Syte",
        "pageswithprop": "Syte mit ere Syteneigeschaft",
        "pageswithprop-legend": "Syte mit ere Syteneigeschaft",
        "pageswithprop-text": "Die Spezialsyte lischet Syten auf, wu ne bstimmti Syteneigeschaft bruche.",
        "uncategorizedtemplates": "Nid kategorisierti Vorlage",
        "unusedcategories": "Nid bruuchti Kategorië",
        "unusedimages": "Verwaiste Bilder",
-       "popularpages": "Beliebti Artikel",
        "wantedcategories": "Bruuchti Kategorie, wo s no nid git",
        "wantedpages": "Artikel, wo fähle",
        "wantedpages-badtitle": "Nit giltige Titel im Ergebnis: $1",
        "querypage-disabled": "Die Spezialsyte isch deaktiviert wore us Leischtigserhaltigs-Grind.",
        "booksources": "ISBN-Suech",
        "booksources-search-legend": "Suech no Bezugsquälle fir Biecher",
-       "booksources-go": "Sueche",
        "booksources-text": "Des isch e Lischt mit Link zue Netzsyte, wu neiji un bruchti Biecher verchaufe. S cha syy, ass es dert au meh Informatione zue dr Biecher git. {{SITENAME}} isch mit keinem vu däne Aabieter gschäftli verbunde.",
        "booksources-invalid-isbn": "D ISBN isch schyyns falsch. Lueg no Fähler in dr Kopii.",
        "specialloguserlabel": "Benutzer, wu des gmacht het:",
        "wlheader-enotif": "Dr E-Mail-Benochrichtigungsdienscht isch aktiviert.",
        "wlheader-showupdated": "Syte mit Anderige, wu no nit aagluegt sin, sin '''fett''' dargstellt.",
        "wlnote": "Do {{PLURAL:$1|chunnt di letscht Änderig|chemme di letschte '''$1''' Änderige}} vu dr letschte {{PLURAL:$2|Stund|'''$2''' Stunde}}. Stand: $3, $4 Uhr.",
-       "wlshowlast": "Zeig di letschte $1 Stunde $2 Tage $3",
+       "wlshowlast": "Zeig di letschte $1 Stunde $2 Tage",
        "watchlist-options": "Aazeigoptione",
        "watching": "Am beobachte …",
        "unwatching": "Nümm am beobachten …",
        "import": "Sytene importiere",
        "importinterwiki": "Transwiki-Import",
        "import-interwiki-text": "Wääl e Wiki un e Syte zum Importiere us.\nS Datum vo dr Bearbeitig un dr Benutzername blybe erhalte.\nAlli Transwiki-Import-Aktione werde im [[Special:Log/import|Import-Logbuech]] protokolliert.",
-       "import-interwiki-source": "Quell-Wiki/-Syte:",
        "import-interwiki-history": "Alli früeneri Versione vo dere Syte importiere",
        "import-interwiki-templates": "Mit allene Vorlage",
        "import-interwiki-submit": "Import",
        "pageinfo-robot-policy": "Indexierig dur Suechmaschine",
        "pageinfo-robot-index": "Erlaubt",
        "pageinfo-robot-noindex": "Nit erlaubt",
-       "pageinfo-views": "Aazahl Sytenufruef",
        "pageinfo-watchers": "Aazahl vu Beobachter",
        "pageinfo-few-watchers": "Weniger wie {{PLURAL:$1|ei|$1}} Beobachter",
        "pageinfo-redirects-name": "Zahl vu dr Wyterleitige zue däre Syte",
        "exif-urgency-low": "Nider ($1)",
        "exif-urgency-high": "Hoch ($1)",
        "exif-urgency-other": "Benutzerdefinierti Prioritet ($1)",
-       "watchlistall2": "alli",
        "namespacesall": "alli",
        "monthsall": "alli",
        "confirmemail": "Bstätigung vo Ihre E-Poscht-Adräss",
        "logentry-rights-rights-legacy": "$1 het d Gruppezuegherigkeit fir $3 gänderet",
        "logentry-rights-autopromote": "$1 isch automatisch vu $4 zue $5 zuegordnet wore",
        "rightsnone": "(keini)",
+       "revdelete-summary": "Zämmefassig",
        "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:",
index 26fa4cb..5f1686b 100644 (file)
        "passwordreset-emailsent-capture": "પાસવર્ડ બદલવાનો ઇમેલ મોકલવામાં આવ્યો છે, જે નીચે પ્રમાણે છે.",
        "passwordreset-emailerror-capture": "પાસવર્ડ ફરી ગોઠવવા માટેનો ઇમેલ બનાવવામાં આવ્યો છે, જે નીચે પ્રમાણે છે, પરંતુ તે {{GENDER:$2|સભ્ય}}ને મોકલવામાં નિષ્ફળ થયો છે: $1",
        "changeemail": "ઇમેલ સરનામું બદલો",
-       "changeemail-header": "તમારા ખાતાનું ઇમેલ સરનામું બદલો",
        "changeemail-text": "તમારું ઈ-મેઈલ સરનામું બદલવા માટે આ ફોર્મ ભરો. આ ફેરફાર કાયમ કરવા માટે તમારે પાસવર્ડ ભરવાની જરૂર પડશે.",
        "changeemail-no-info": "બારોબાર આ પાનું જોવા માટે પ્રવેશ કરવો આવશ્યક છે.",
        "changeemail-oldemail": "હાલનું ઈમેલ સરનામું:",
        "changeemail-none": "(કંઈ નહી)",
        "changeemail-password": "તમારો {{SITENAME}} પાસવર્ડ:",
        "changeemail-submit": "ઈમેલ બદલો",
-       "changeemail-cancel": "રદ કરો",
        "resettokens": "નિશાનીઓ ફરી ગોઠવો",
        "resettokens-no-tokens": "અહીં ફરી ગોઠવવા માટેનાં કોઇ ટોકન નથી",
        "resettokens-legend": "નિશાનીઓ ફરી ગોઠવો",
        "mergehistory-same-destination": "સ્રોત અને લક્ષ્ય પાના એક સમાન ના હોઈ શકે",
        "mergehistory-reason": "કારણ:",
        "mergelog": "લોગ વિલિન કરો",
-       "pagemerge-logentry": "[[$1]] ને  [[$2]]માં વિલિન કરાયું ( $3 સુધી ના પુનરાવર્તનો)",
        "revertmerge": "છુટું પાડો",
        "mergelogpagetext": "તાજેતરમાં એક બીજા સાથે વિલિન થયેલ ઇતિહાસ પાનાની યાદી",
        "history-title": "\"$1\"ના ફેરફારોનો ઇતિહાસ",
        "searchrelated": "શોધ સંબંધિત",
        "searchall": "બધા",
        "showingresults": " {{PLURAL:$1|'''1''' પરિણામ|'''$1''' પરિણામો}} સુધી #'''$2''' થી શરૂ  કરી",
-       "showingresultsheader": "'''$4''' માટે {{PLURAL:$5|પરિણામ  '''$1''' of '''$3'''|પરિણામો '''$1 - $2''' of '''$3'''}}",
        "search-nonefound": "તમે આપેલી માહિતી ને મળતાં આવતાં કોઈ પરિણામો નથી",
        "powersearch-legend": "વધુ પર્યાયો સાથે શોધો",
        "powersearch-ns": "નામસ્થળોમાં શોધો:",
        "randomincategory": "શ્રેણીમાં ગમે તે પાનું",
        "randomincategory-invalidcategory": "\"$1\" એ યોગ્ય શ્રેણી નામ નથી.",
        "randomincategory-nopages": "[[:Category:$1|$1]] વર્ગમાં કોઇ પાનું નથી.",
-       "randomincategory-selectcategory": "વર્ગમાંથી ગમે તે પાનું મેળવો: $1 $2.",
-       "randomincategory-selectcategory-submit": "જાઓ",
        "randomredirect": "દિશાહીન  નિર્દેશન",
        "randomredirect-nopages": "નામ સ્થળ \"$1\" માં કોઇ દિશા નિર્દેશન નથી",
        "statistics": "આંકડાકીય માહિતી",
        "statistics-header-pages": "પાના સંબંધી આંકડાકીય માહિતી",
        "statistics-header-edits": "આંકડાકીય માહિતી બદલો",
-       "statistics-header-views": "આંકડાકીય માહિતી જુઓ",
        "statistics-header-users": "સભ્ય સંબંધી આંકડાકીય માહિતી",
        "statistics-header-hooks": "અન્ય આંકડાકીય માહિતી",
        "statistics-articles": "લેખનું પાનું",
        "statistics-files": "ચડાવેલ ફાઇલો",
        "statistics-edits": "{{SITENAME}} શરૂ થયા પછી ફેરફાર થયેલ પાના",
        "statistics-edits-average": "પાનાં દીઠ સરેરાશ ફેરફારો",
-       "statistics-views-total": "સરવાળો",
-       "statistics-views-total-desc": "અવિહરમાન પાના અને ખાસ પાના આમા શામિલ નથી.",
-       "statistics-views-peredit": "ફેરફાર દીઠ અવલોકનો",
        "statistics-users": "નોંધણી થયેલ  [[Special:ListUsers|users]]",
        "statistics-users-active": "સક્રીય સભ્યો",
        "statistics-users-active-desc": "સભ્ય કે જેમણે છેલ્લા {{PLURAL:$1|દિવસ|$1 દિવસો}}માં ફેરફારો કર્યાં છે",
-       "statistics-mostpopular": "સૌથી વધુ જોવાયેલા પાના",
        "pageswithprop": "પાનાં ગુણધર્મ સાથેનાં પાનાંઓ",
        "pageswithprop-legend": "પાનાં ગુણધર્મ સાથેનાં પાનાંઓ",
        "pageswithprop-prop": "ગુણધર્મ નામ:",
        "uncategorizedtemplates": "અવર્ગીકૃત ઢાંચાઓ",
        "unusedcategories": "વણ વપરાયેલી શ્રેણીઓ",
        "unusedimages": "વણ વપરાયેલાં દસ્તાવેજો",
-       "popularpages": "પ્રખ્યાત પાના",
        "wantedcategories": "ઇચ્છિત શ્રેણીઓ",
        "wantedpages": "ઇચ્છિત પાનાં",
        "wantedpages-badtitle": "પરિણામ ગણમાં અવૈધ શીર્ષક: $1",
        "booksources": "પુસ્તક સ્રોત",
        "booksources-search-legend": "પુસ્તક સ્રોત શોધો",
        "booksources-isbn": "આઇએસબીએન:",
-       "booksources-go": "જાઓ",
        "booksources-text": "નીચે દર્શાવેલ યાદી એ કડીઓ બતાવે છે જેઓ નવા અને જૂના પુસ્તકો  વેચે છે , અને તમે માંગેલ વસ્તુ સંબંધિ વધુ મહિતી પણ ધરાવી શકે છે.",
        "booksources-invalid-isbn": "આપેલ ISBN વૈધ નથી લાગતો; મૂળ સ્રોતને ચકાસી, ભૂલ શોધી, ખરી માહિતી આપો.",
        "specialloguserlabel": "અભિનય:",
        "wlheader-enotif": "ઈમેલ સૂચના પદ્ધતિ સક્રીય કરાઈ.",
        "wlheader-showupdated": "તમારી છેલ્લી મુલાકાત પછી બદલાયેલાં પાના  '''ઘાટા''' અક્ષરો વડે દર્શાવ્યાં છે.",
        "wlnote": "નીચે $3, $4 વાગ્યા સુધીના છેલ્લા {{PLURAL:$2|એક કલાક|'''$2''' કલાક}}માં થયેલા {{PLURAL:$1|ફેરફાર|'''$1''' ફેરફારો }} દર્શાવ્યા છે.",
-       "wlshowlast": "છેલ્લા $1 કલાક $2 દિવસ $3 બતાવો",
+       "wlshowlast": "છેલ્લા $1 કલાક $2 દિવસ  બતાવો",
        "watchlist-options": "ધ્યાનસૂચિના વિકલ્પો",
        "watching": "નજર રાખી રહ્યાં છો...",
        "unwatching": "નજર રાખવાની બંધ કરી છે...",
        "import": "પાના આયાત કરો",
        "importinterwiki": "ટ્રાંસ વિકિ આયાત",
        "import-interwiki-text": "આયાત કરવા માટેનાં પાનાનું શીર્ષક અને વિકિ પસંદ કરો.\nફેરફારની તારીખ અને લેખકો વિષેની માહિતી જેમની તેમ રાખવામાં આવશે.\nબધા જ આંતરવિકિ આયાતની નોંધ [[Special:Log/import|import log]]માં રખાય છે.",
-       "import-interwiki-source": "સ્રોત વિકિ/પાનું:",
        "import-interwiki-history": "આ પાનું બધા ફેરફારોના ઇતિહાસ સાથે આયાત કરો",
        "import-interwiki-templates": "બધા ઢાંચા શામિલ કરો",
        "import-interwiki-submit": "આયાત કરો",
        "pageinfo-robot-policy": "રોબોટ્સ દ્વારા અનુક્રમિત",
        "pageinfo-robot-index": "માન્ય",
        "pageinfo-robot-noindex": "અમાન્ય",
-       "pageinfo-views": "જોનારાની સંખ્યા",
        "pageinfo-watchers": "પાના નીરીક્ષકોની સંખ્યા",
        "pageinfo-redirects-name": "આ પાનાં પર દિશાનિર્દેશનોની સંખ્યા",
        "pageinfo-subpages-name": "આ પાનાંનું ઉપપાનું",
        "exif-urgency-low": "નિમ્ન ($1)",
        "exif-urgency-high": "ઉચ્ચ ($1)",
        "exif-urgency-other": "વપરાશકર્તા-વ્યાખ્યાયિત અગ્રતા ($1)",
-       "watchlistall2": "બધા",
        "namespacesall": "બધા",
        "monthsall": "બધાં",
        "confirmemail": "તમારા ઇ-મેઇલ સરનામાની પુષ્ટિ કરો",
        "logentry-newusers-create2": "સભ્ય ખાતું $3 $1 વડે {{GENDER:$2|બનાવવામાં આવ્યું હતું}}",
        "logentry-newusers-autocreate": "વપરાશકર્તા ખાતું $1 આપમેળે {{GENDER:$2|બનાવવામાં આવ્યું હતું}}",
        "rightsnone": "(કંઈ નહી)",
+       "revdelete-summary": "સંપાદનનો સંક્ષિપ્ત અહેવાલ",
        "feedback-bugornote": "જો તમે તકનીકી સમસ્યા વર્ણવવા માંગતા હોય તો  કૃપયા [$1 report a bug] એ બગ અહીં નોંધાવો.\nઅન્યથા, તમે નીચે આપેલ સરળ ફોર્મ વાપરી શકો છો. તમારા સભ્ય નામ અને કયું બ્રાઉઝર વાપરો છો તેની માહિતી સાથે, તમારી ટિપ્પણીનો \"[$3 $2]\" પાનામાં સમાવેશ કરાશે.",
        "feedback-subject": "વિષય:",
        "feedback-message": "સંદેશ",
index ebce018..8bfbdbd 100644 (file)
        "uncategorizedtemplates": "Clowanyn gyn ronney",
        "unusedcategories": "Ronnaghyn neuymmydit",
        "unusedimages": "Coadanyn neuymmydit",
-       "popularpages": "Duillagyn cadjin",
        "wantedcategories": "Ronnaghyn ry-laccal",
        "wantedpages": "Duillagyn ry-laccal",
        "wantedfiles": "Coadanyn ry-laccal",
        "suppress": "Oaseirys",
        "booksources": "Bun-gheillyn lioar",
        "booksources-search-legend": "Jean ronsaghey er bun-gheillyn lioar",
-       "booksources-go": "Gow",
        "specialloguserlabel": "Ymmydeyr:",
        "speciallogtitlelabel": "Ennym (duillag ny ymmydeyr):",
        "log": "Lioaryn cooishyn",
        "notanarticle": "Cha nel eh shoh ny ghuillag cummal",
        "notvisiblerev": "Va'n aavriwnys scryssit",
        "watchlist-details": "Ta {{PLURAL:$1|$1 duillag|$1 duillag|$1 ghuillag|$1 duillagyn}} er dty rolley arrey, faagail magh duillagyn resoonaght.",
-       "wlshowlast": "Taishbyn ny kied $1 ooryn $2 laaghyn $3 s'jerree",
+       "wlshowlast": "Taishbyn ny kied $1 ooryn $2 laaghyn  s'jerree",
        "watchlist-options": "Reihyn da'n rolley arrey",
        "watching": "Jannoo arrey...",
        "unwatching": "Stap y chur er arrey...",
        "exif-sharpness-2": "Creoi",
        "exif-gpsspeed-k": "Kilometeryn 'syn oor",
        "exif-gpsspeed-m": "Meeillaghyn 'syn oor",
-       "watchlistall2": "yn clane",
        "namespacesall": "yn clane",
        "monthsall": "yn clane",
        "recreate": "Aachroo",
        "specialpages-group-users": "Ymmydeyryn as kiartyn",
        "tags-edit": "reaghey",
        "rightsnone": "(veg)",
+       "revdelete-summary": "giare-choontey yn reaghey",
        "searchsuggest-search": "Ronsaghey",
        "searchsuggest-containing": "goaill stiagh...",
        "expand_templates_ok": "OK",
index 76e5945..7afcfaf 100644 (file)
        "pager-older-n": "{{PLURAL:$1|tsoho 1|tsoffi $1}}",
        "booksources": "Littattafai maƙiblata",
        "booksources-search-legend": "Nemo tushen littattafai",
-       "booksources-go": "Mu je",
        "log": "Rajistoci ayyuka",
        "allpages": "Duka shafuna",
        "prevpage": "Shafi na baya ($1)",
        "watchthispage": "Bin sawun wannan shafi",
        "unwatch": "Daina bin sawu",
        "watchlist-details": "{{PLURAL:$1|$1 shafi|$1 shafuna}} kan jerinku na bin sawu, banda shafunan mahawara.",
-       "wlshowlast": "Nuna awowi $1 kwanaki $2 na ƙarshe $3",
+       "wlshowlast": "Nuna awowi $1 kwanaki $2 na ƙarshe",
        "watchlist-options": "Saituttukan jerin bin sawu",
        "watching": "Bin sawun...",
        "unwatching": "Daina bin sawu...",
        "metadata-expand": "Nuna ƙananan bayannai",
        "metadata-collapse": "Ɓoye ƙananan bayannai",
        "metadata-fields": "Gurabun bayannan meta na EXIF da ke jere cikin wannan saƙo, za a saka su ne cikin shafin zayyana majigin, idan aka taƙaita jadawalin bayannan metan.\n Wasu gurabun za a ɓoye su bisa manufa.\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",
-       "watchlistall2": "duka",
        "namespacesall": "duka",
        "monthsall": "duka",
        "watchlisttools-view": "Duba sauye-sauyen da suka dace",
index cb43f56..36ec2d7 100644 (file)
        "passwordreset-emailtitle": "在{{SITENAME}}上嘅詳細信息",
        "passwordreset-emailsent": "密碼重置電子郵件已發送。",
        "changeemail": "更改電子郵件地址",
-       "changeemail-header": "更改電子郵件帳戶",
        "changeemail-no-info": "汝必須登入後直接進入邇隻頁面。",
        "changeemail-oldemail": "當前電郵地址:",
        "changeemail-newemail": "新嘅電郵地址:",
        "changeemail-none": "(無)",
        "changeemail-submit": "更改電郵地址",
-       "changeemail-cancel": "取消",
        "bold_sample": "粗體文字",
        "bold_tip": "粗體文字",
        "italic_sample": "斜體文字",
        "template-protected": "(保護)",
        "template-semiprotected": "(半保護)",
        "hiddencategories": "邇頁屬於$1隻隱藏分類嘅成員:",
-       "edittools": "<!-- 邇肚嘅文字將分展示在編寫撈上傳表單以下。 -->",
+       "edittools": "<!-- 邇肚嘅文字將分展示在編寫撈上傳表單以下。 -->\n<div id=\"editpage-specialchars\" class=\"plainlinks edittools-version-test003\" style=\"margin-top: 15px; border-width: 1px; border-style: solid; border-color: #aaaaaa; padding: 2px;\"> <span id=\"edittools_main\">'''Insert:''' <charinsert>– — … ‘ “ ’ ” ° ″ ′ ≈ ≠ ≤ ≥ ± − × ÷ ← → · § </charinsert></span><span id=\"edittools_name\">&nbsp;&nbsp;'''Sign your username:''' <charinsert>--~~&#126;~</charinsert> <small>(on [[Help:Talk pages|talk pages]])</small></span> ---- <small id=\"edittools_newsectionshere\"><span id=\"edittools_hide_for_script_test\"><span id=\"edittools_wikimarkup\">'''Wiki markup:''' <charinsert><nowiki>{{</nowiki>+<nowiki>}}</nowiki> </charinsert> &nbsp; <charinsert><nowiki>{{{</nowiki>+<nowiki>}}}</nowiki> </charinsert> &nbsp; <charinsert><nowiki>|</nowiki></charinsert> &nbsp; <charinsert>[+]</charinsert> &nbsp; <charinsert>[[+]]</charinsert> &nbsp; <charinsert>[[Category:+]]</charinsert> &nbsp; <charinsert>#REDIRECT&#32;[[+]]</charinsert> &nbsp; <charinsert>{{Subst:Fôn-ngiàng}}</charinsert> &nbsp; <charinsert>{{Subst:PAGENAME}}</charinsert> &nbsp; <charinsert>&nbsp;</charinsert> &nbsp; <charinsert><s>+</s></charinsert> &nbsp; <charinsert><sup>+</sup></charinsert> &nbsp; <charinsert><sub>+</sub></charinsert> &nbsp; <charinsert><code>+</code></charinsert> &nbsp; <charinsert><blockquote>+</blockquote></charinsert> &nbsp; <charinsert><ref>+</ref></charinsert> &nbsp; <charinsert><nowiki>{{</nowiki>Reflist<nowiki>}}</nowiki></charinsert> &nbsp; <charinsert><references/></charinsert> &nbsp; <charinsert><includeonly>+</includeonly></charinsert> &nbsp; <charinsert><noinclude>+</noinclude></charinsert> &nbsp; <charinsert><nowiki>{{</nowiki>DEFAULTSORT:+<nowiki>}}</nowiki></charinsert> &nbsp; <charinsert>&lt;nowiki>+</nowiki></charinsert> &nbsp; <charinsert><nowiki><!-- </nowiki>+<nowiki> --></nowiki></charinsert>&nbsp; <charinsert><nowiki><span class=\"plainlinks\"></nowiki>+<nowiki></span></nowiki></charinsert>&nbsp;&nbsp;&bull;&nbsp; ([[Wikipedia:Template messages|templates]])<br/></span> <span id=\"edittools_symbols\">'''Symbols:''' <charinsert> ~ | ¡ ¿ † ‡ ↔ ↑ ↓ • ¶</charinsert> &nbsp; <charinsert> # ½ ⅓ ⅔ ¼ ¾ ⅛ ⅜ ⅝ ⅞ ∞ </charinsert> &nbsp; <charinsert> ‘ “ ’ ” «+»</charinsert> &nbsp; <charinsert> ¤ ₳ ฿ ₵ ¢ ₡ ₢ $ ₫ ₯ € ₠ ₣ ƒ ₴ ₭ ₤ ℳ ₥ ₦ № ₧ ₰ £ ៛ ₨ ₪ ৳ ₮ ₩ ¥ </charinsert> &nbsp; <charinsert> ♠ ♣ ♥ ♦ </charinsert>&nbsp; <charinsert>m²</charinsert>&nbsp;<charinsert>m³</charinsert><br/></span> <span id=\"edittools_characters\">'''Characters:''' <span class=\"latinx\"> <charinsert> Á á Ć ć É é Í í Ĺ ĺ Ḿ ḿ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź </charinsert> &nbsp; <charinsert> À à È è Ì ì M̀ m̀  Ǹ ǹ Ò ò Ù ù </charinsert> &nbsp; <charinsert> Â â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û Ŵ ŵ Ŷ ŷ </charinsert> &nbsp; <charinsert> A̤ a̤ E̤ e̤ I̤ i̤ O̤ o̤ Ṳ ṳ </charinsert> &nbsp;\n<charinsert> A̍ a̍ E̍ e̍ I̍ i̍ O̍ o̍ U̍ u̍ </charinsert> &nbsp; <charinsert> À̤ à̤ È̤ è̤ Ì̤ ì̤ Ò̤ ò̤ Ṳ̀ ṳ̀ </charinsert> &nbsp;\n<charinsert> Á̤ á̤ É̤ é̤ Í̤ í̤ Ó̤ ó̤ Ṳ́ ṳ́ </charinsert> &nbsp; <charinsert> A̤̍ a̤̍ E̤̍ e̤̍ I̤̍ i̤̍ O̤̍ o̤̍ Ṳ̍ ṳ̍ </charinsert> &nbsp;\n<charinsert> Â̤ â̤ Ê̤ ê̤ Î̤ î̤ Ô̤ ô̤ Ṳ̂ ṳ̂ </charinsert> &nbsp; <charinsert> Â â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û Ŵ ŵ Ŷ ŷ </charinsert> &nbsp; <charinsert> Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ </charinsert> &nbsp; <charinsert> ß </charinsert> &nbsp; <charinsert> Ã ã Ẽ ẽ Ĩ ĩ Ñ ñ Õ õ Ũ ũ Ỹ ỹ</charinsert> &nbsp; <charinsert> Ç ç Ģ ģ Ķ ķ Ļ ļ Ņ ņ Ŗ ŗ Ş ş Ţ ţ </charinsert> &nbsp; <charinsert> Đ đ </charinsert> &nbsp; <charinsert> Ů ů </charinsert> &nbsp; <charinsert> Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž </charinsert> &nbsp; <charinsert> Ā ā Ē ē Ī ī Ō ō Ū ū Ȳ ȳ Ǣ ǣ </charinsert> &nbsp; <charinsert> ǖ ǘ ǚ ǜ </charinsert> &nbsp; <charinsert> Ă ă Ĕ ĕ Ğ ğ Ĭ ĭ Ŏ ŏ Ŭ ŭ </charinsert> &nbsp; <charinsert> Ċ ċ Ė ė Ġ ġ İ ı Ż ż </charinsert> &nbsp; <charinsert> Ą ą Ę ę Į į Ǫ ǫ Ų ų </charinsert> &nbsp; <charinsert> Ḍ ḍ Ḥ ḥ Ḷ ḷ Ḹ ḹ Ṃ ṃ Ṇ ṇ Ṛ ṛ Ṝ ṝ Ṣ ṣ Ṭ ṭ </charinsert> &nbsp; <charinsert> Ł ł </charinsert> &nbsp; <charinsert> Ő ő Ű ű </charinsert> &nbsp; <charinsert> Ŀ ŀ </charinsert> &nbsp; <charinsert> Ħ ħ </charinsert> &nbsp; <charinsert> Ð ð Þ þ </charinsert> &nbsp; <charinsert> Œ œ </charinsert> &nbsp; <charinsert> Æ æ Ø ø Å å </charinsert> &nbsp; <charinsert> Ə ə </charinsert></span>&nbsp;<span id=\"edittools_latinx_template\">&nbsp;&bull;&nbsp; <charinsert><nowiki>{{</nowiki><nowiki>Unicode|</nowiki>+<nowiki>}}</nowiki></charinsert></span><br/></span> <span id=\"edittools_greek\">'''Hî-lia̍p-vùn:''' <charinsert> Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ </charinsert> &nbsp; <charinsert> Α α Β β Γ γ Δ δ </charinsert> &nbsp; <charinsert> Ε ε Ζ ζ Η η Θ θ </charinsert> &nbsp; <charinsert> Ι ι Κ κ Λ λ Μ μ </charinsert> &nbsp; <charinsert> Ν ν Ξ ξ Ο ο Π π </charinsert> &nbsp; <charinsert> Ρ ρ Σ σ ς Τ τ Υ υ </charinsert> &nbsp; <charinsert> Φ φ Χ χ Ψ ψ Ω ω </charinsert> &nbsp;<span id=\"edittools_greek_template\">•&nbsp; <charinsert><nowiki>{{</nowiki><nowiki>Polytonic|</nowiki>+<nowiki>}}</nowiki></charinsert></span> &nbsp;<span id=\"edittools_greek_example\">•&nbsp; ([[Greek diacritics#Computer encoding|polytonic list]])</span><br/></span> <span id=\"edittools_cyrillic\">'''Cyrillic:''' <charinsert> А а Б б В в Г г </charinsert> &nbsp; <charinsert> Ґ ґ Ѓ ѓ Д д Ђ ђ </charinsert> &nbsp; <charinsert> Е е Ё ё Є є Ж ж </charinsert> &nbsp; <charinsert> З з Ѕ ѕ И и І і </charinsert> &nbsp; <charinsert> Ї ї Й й Ј ј К к </charinsert> &nbsp; <charinsert> Ќ ќ Л л Љ љ М м </charinsert> &nbsp; <charinsert> Н н Њ њ О о П п </charinsert> &nbsp; <charinsert> Р р С с Т т Ћ ћ </charinsert> &nbsp; <charinsert> У у Ў ў Ф ф Х х </charinsert> &nbsp; <charinsert> Ц ц Ч ч Џ џ Ш ш </charinsert> &nbsp; <charinsert> Щ щ Ъ ъ Ы ы Ь ь </charinsert> &nbsp; <charinsert> Э э Ю ю Я я </charinsert> &nbsp;<br/></span> <span id=\"edittools_ipa\">'''IPA:''' <span title=\"Pronunciation in IPA\" class=\"IPA\"><charinsert>t̪ d̪ ʈ ɖ ɟ ɡ ɢ ʡ ʔ </charinsert> &nbsp; <charinsert> ɸ ʃ ʒ ɕ ʑ ʂ ʐ ʝ ɣ ʁ ʕ ʜ ʢ ɦ </charinsert> &nbsp; <charinsert> ɱ ɳ ɲ ŋ ɴ </charinsert> &nbsp; <charinsert> ʋ ɹ ɻ ɰ </charinsert> &nbsp; <charinsert> ʙ ʀ ɾ ɽ </charinsert> &nbsp; <charinsert> ɫ ɬ ɮ ɺ ɭ ʎ ʟ </charinsert> &nbsp; <charinsert> ɥ ʍ ɧ </charinsert> &nbsp; <charinsert> ɓ ɗ ʄ ɠ ʛ </charinsert> &nbsp; <charinsert> ʘ ǀ ǃ ǂ ǁ </charinsert> &nbsp; <charinsert> ɨ ʉ ɯ </charinsert> &nbsp; <charinsert> ɪ ʏ ʊ </charinsert> &nbsp; <charinsert> ɘ ɵ ɤ </charinsert> &nbsp; <charinsert> ə ɚ </charinsert> &nbsp; <charinsert> ɛ ɜ ɝ ɞ ʌ ɔ </charinsert> &nbsp; <charinsert> ɐ ɶ ɑ ɒ </charinsert> &nbsp; <charinsert> ʰ ʷ ʲ ˠ ˤ ⁿ ˡ </charinsert> &nbsp; <charinsert> ˈ ˌ ː ˑ ̪ </charinsert>&nbsp;</span> &nbsp;&bull;&nbsp; <charinsert><nowiki>{{</nowiki><nowiki>IPA|</nowiki>+<nowiki>}}</charinsert></small>\n</div>",
        "nocreatetext": "Chhṳ́ mióng-chham han-chṳ chhóng-chho sîn hong-mien ke kûng-yung. ngì khó-yî fán-fì pin phiên-cho yí-kîn yû ke hong-mien, fe̍t-chá [[Special:UserLogin|tên-liu̍k fe̍t-he chhóng-kien sîn chong-fu]].",
        "nocreate-loggedin": "汝並無權限去創建新頁面。",
        "permissionserrors": "權限差錯",
        "searchrelated": "相關",
        "searchall": "全部",
        "showingresults": "Ha-mien hién-sṳ chhiùng thi-'''$2'''-thiàu khôi-sṳ́ ke '''$1'''-thiàu kiet-kó:",
-       "showingresultsheader": "對'''$4'''嘅{{PLURAL:$5|第'''$1'''到第'''$3'''隻結果|第'''$1 - $2'''隻,共'''$3'''隻結果}}",
        "search-nonefound": "在查詢肚無結果相符。",
        "powersearch-legend": "高級搜尋",
        "powersearch-ns": "在下背嘅名字空間肚搜尋:",
        "randomredirect-nopages": "Chhai liá-ke miàng-sṳ khûng-kiên mò-yû chhùng-thin hong-mien.",
        "statistics": "統計",
        "statistics-header-users": "用戶統計",
-       "statistics-mostpopular": "分查閱次數最多嘅頁面",
        "doubleredirects": "雙重重定向頁",
        "doubleredirectstext": "Mî yit-hàng pâu-hàm to thi-yit lâu thi-ngi-ke chhûng-thin hong-mien ke lièn-chiap, yî-khi̍p thi-ngi ke chhûng-thin hong-mien ke thi-yit-hàng vùn-sṳ, thûng-sòng hién-sṳ ke he \"chṳ̂n-chṳn\" ke muk-phêu vùn-chông, ye-he thi-yit-ke chhûng-thin hong-mien  yin-kôi chṳ́-hiong ke vùn-chông.",
        "brokenredirects": "損壞嘅重定向頁",
        "uncategorizedimages": "Thai fûn-lui thù-phién",
        "unusedcategories": "吂用分類",
        "unusedimages": "吂用圖片",
-       "popularpages": "熱點頁面",
        "wantedcategories": "想愛嘅分類",
        "wantedpages": "等寫頁面",
        "mostlinked": "最多鏈接頁面",
        "pager-older-n": "舊$1次",
        "booksources": "網絡書源",
        "booksources-search-legend": "尋找網絡書源",
-       "booksources-go": "送出",
        "booksources-text": "下背係一份銷售新書或二手書嘅列表,並可能有汝尋找緊嘅書嘅進一步信息:",
        "specialloguserlabel": "Yung-fu:",
        "speciallogtitlelabel": "Phêu-thì:",
        "wlheader-enotif": "Yí-kîn khí-thung email thûng-tî kûng-nèn.",
        "wlheader-showupdated": "Chhai ngì song-chhṳ kiám-sṳ heu yû pûn chhùng-siû ko ke vùn-chông chiông-voi hién-sṳ vi '''chhû-thí'''.",
        "wlnote": "Yî-ha he chui-khiûn <b>$2</b> séu-sṳ̀ nui-ke chui-heu $1-chhṳ chin-siû.",
-       "wlshowlast": "展示最近$1隻鐘頭,$2日或$3嘅更改。",
+       "wlshowlast": "展示最近$1隻鐘頭,$2日或嘅更改。",
        "watchlist-options": "監視列表選項",
        "watching": "監視中...",
        "unwatching": "停止監視中...",
        "metadata-expand": "Hién-sṳ siòng-se ke chṳ̂-liau",
        "metadata-collapse": "Yún-chhòng siòng-se ke chṳ̂-liau",
        "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",
-       "watchlistall2": "全部",
        "namespacesall": "全部",
        "monthsall": "全部",
        "confirmemail": "確認電郵地址",
        "tag-filter": "[[Special:Tags|標籤]]過濾器:",
        "revdelete-restricted": "yí-kîn yin-yung han-tsṳ tsṳ tshâu-tsok-yèn",
        "revdelete-unrestricted": "yí-kîn yì-tshù yû-kûan tshâu-tsok-yè ke han-tsṳ",
-       "rightsnone": "(無)"
+       "rightsnone": "(無)",
+       "revdelete-summary": "piên-sip tsak-yêu"
 }
index acb72ef..e8169dd 100644 (file)
        "passwordreset-username": "Inoa mea ho'ohana:",
        "passwordreset-email": "Wahinoho lekauila:",
        "changeemail": "Hoʻololi i ka wahinoho lekauila",
-       "changeemail-header": "Hoʻololi i ka wahinoho lekauila moʻokāki",
        "changeemail-oldemail": "Wahinoho lekauila hananei:",
        "changeemail-newemail": "Wahinoho lekauila hou:",
        "changeemail-none": "(ʻaʻohe)",
        "changeemail-password": "Kāu ʻōlelo hūnā {{SITENAME}}:",
        "changeemail-submit": "Loli i kāu lekauila",
-       "changeemail-cancel": "Hoʻōki",
        "resettokens-token-label": "$1 (helu okamanawa: $2)",
        "bold_sample": "Ho‘okā‘ele",
        "bold_tip": "Ho‘okā‘ele",
        "search-relatedarticle": "Nā Mea ʻālike",
        "searchrelated": "na mea ʻālike",
        "searchall": "nā mea apau",
-       "showingresultsheader": "{{PLURAL:$5|<strong>$1</strong> hualoaʻa o <strong>$3</strong> mau hualoaʻa|<strong$1-$2</strong> mau hualoaʻa o <strong>$3</strong> mau hualoaʻa}} no <strong>$4</strong>",
        "search-nonefound": "ʻAʻohe hualoaʻa no kēia huli.",
        "powersearch-legend": "Hulina kūlana kiʻekiʻe",
        "powersearch-ns": "Huli i loko o nā wahi inoa:",
        "statistics": "ʻIkepilihelu",
        "statistics-header-pages": "ʻIkepilihelu ʻaoʻao",
        "statistics-header-edits": "ʻIkepilihelu hoʻololi",
-       "statistics-header-views": "ʻIkepilihelu nānā",
        "statistics-header-users": "ʻIkepilihelu mea hoʻohana",
        "statistics-header-hooks": "ʻIkepilihelu ʻē aʻe",
        "statistics-articles": "ʻAoʻao mealoko",
        "pager-older-n": "{{PLURAL:$1|1 aku nei|$1 aku nei}}",
        "booksources": "Kumu puke",
        "booksources-search-legend": "Huli i nā kūmole  puke",
-       "booksources-go": "E huli",
        "log": "Nā Mo‘olelo",
        "all-logs-page": "Nā Moʻolelo lehulehu apau",
        "allpages": "Nā ‘Ao‘ao apau",
        "watchthispage": "E nānā pono i kēia mea",
        "unwatch": "Kiaʻi ʻole",
        "watchlist-details": "{{PLURAL:$1|$1 ʻaoʻao|$1 mau ʻaoʻao}} a kāu papakiaʻi, me ʻole ke koe ʻana o nā ʻaoʻao walaʻau.",
-       "wlshowlast": "Hōʻike $1 hola aku nei $2 lā aku nei $3",
+       "wlshowlast": "Hōʻike $1 hola aku nei $2 lā aku nei",
        "watchlist-options": "Nā Koho papakiaʻi",
        "watching": "Kia‘i nei...",
        "unwatching": "Ke wehe nei i ke kiaʻi...",
        "pageinfo-language": "ʻŌlelo mealoko ʻaoʻao",
        "pageinfo-robot-index": "ʻAe",
        "pageinfo-robot-noindex": "ʻAʻole",
-       "pageinfo-views": "Helu o nā nānā",
        "pageinfo-watchers": "Helu o nā mea nānā ʻaoʻao",
        "pageinfo-redirects-name": "Helu o nā kiahou i kēia ʻaoʻao",
        "pageinfo-subpages-name": "Helu o nā ʻaoʻao kūloko o kēia ʻaoʻao",
        "exif-iimcategory-evn": "ʻĀina",
        "exif-iimcategory-hth": "Olakino",
        "exif-iimcategory-wea": "Anianilā",
-       "watchlistall2": "nā mea apau",
        "namespacesall": "nā mea apau",
        "monthsall": "nā mea apau",
        "confirm_purge_button": "Hiki nō",
index 67fbb95..f2c38c2 100644 (file)
@@ -26,7 +26,8 @@
                        "פדיחה",
                        "שומבלע",
                        "תומר ט",
-                       "Matanya"
+                       "Matanya",
+                       "GilCahana"
                ]
        },
        "tog-underline": "סימון קישורים בקו תחתי:",
        "category-empty": "'''קטגוריה זו אינה כוללת דפים או קובצי מדיה.'''",
        "hidden-categories": "{{PLURAL:$1|קטגוריה מוסתרת|קטגוריות מוסתרות}}",
        "hidden-category-category": "קטגוריות מוסתרות",
-       "category-subcat-count": "{{PLURAL:$2|קטגוריה זו כוללת את קטגוריית המשנה הבאה בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|קטגוריית המשנה המוצגת להלן|$1 קטגוריות המשנה המוצגות להלן}}, וכוללת בסך הכול $2 קטגוריות משנה.}}",
+       "category-subcat-count": "{{PLURAL:$2|קטגוריה זו כוללת את קטגוריית המשנה הבאה בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|קטגוריית המשנה המוצגת להלן|$1 קטגוריות המשנה המוצגות להלן}}, וכוללת בסך־הכול $2 קטגוריות משנה.}}",
        "category-subcat-count-limited": "קטגוריה זו כוללת את {{PLURAL:$1|קטגוריית המשנה הבאה|$1 קטגוריות המשנה הבאות}}.",
-       "category-article-count": "{{PLURAL:$2|קטגוריה זו כוללת את הדף הבא בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|הדף המוצג להלן|$1 הדפים המוצגים להלן}}, וכוללת בסך הכול $2 דפים.}}",
+       "category-article-count": "{{PLURAL:$2|קטגוריה זו כוללת את הדף הבא בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|הדף המוצג להלן|$1 הדפים המוצגים להלן}}, וכוללת בסך־הכול $2 דפים.}}",
        "category-article-count-limited": "קטגוריה זו כוללת את {{PLURAL:$1|הדף הבא|$1 הדפים הבאים}}.",
-       "category-file-count": "{{PLURAL:$2|קטגוריה זו כוללת את הקובץ הבא בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|הקובץ המוצג להלן|$1 הקבצים המוצגים להלן}}, וכוללת בסך הכול $2 קבצים.}}",
+       "category-file-count": "{{PLURAL:$2|קטגוריה זו כוללת את הקובץ הבא בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|הקובץ המוצג להלן|$1 הקבצים המוצגים להלן}}, וכוללת בסך־הכול $2 קבצים.}}",
        "category-file-count-limited": "קטגוריה זו כוללת את {{PLURAL:$1|הקובץ הבא|$1 הקבצים הבאים}}.",
        "listingcontinuesabbrev": "(המשך)",
        "index-category": "דפים המופיעים במנועי חיפוש",
        "otherlanguages": "דף זה בשפות אחרות",
        "redirectedfrom": "(הופנה מהדף $1)",
        "redirectpagesub": "דף הפניה",
+       "redirectto": "הפניה ל:",
        "lastmodifiedat": "שונה לאחרונה ב־$2, $1.",
        "viewcount": "דף זה נצפה {{PLURAL:$1|פעם אחת|פעמיים|$1 פעמים}}.",
        "protectedpage": "דף מוגן",
        "privacy": "מדיניות הפרטיות",
        "privacypage": "Project:מדיניות הפרטיות",
        "badaccess": "שגיאה בהרשאות",
-       "badaccess-group0": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d ×\9c×\91צע ×\90ת ×\94פע×\95×\9c×\94 ×©×\91×\99קשת×\9d.",
-       "badaccess-groups": "הפעולה שביקשתם לבצע מוגבלת למשתמשים ב{{PLURAL:$2|קבוצה הבאה|אחת הקבוצות הבאות}}: $1.",
+       "badaccess-group0": "×\90×\99× ×\9a ×\9e×\95רש×\94 ×\9c×\91צע ×\90ת ×\94פע×\95×\9c×\94 ×©×\91×\99קשת.",
+       "badaccess-groups": "הפעולה שביקשת לבצע מוגבלת למשתמשים ב{{PLURAL:$2|קבוצה הבאה|אחת הקבוצות הבאות}}: $1.",
        "versionrequired": "נדרשת גרסה $1 של מדיה־ויקי",
        "versionrequiredtext": "גרסה $1 של מדיה־ויקי נדרשת לשימוש בדף זה. למידע נוסף, ראו את [[Special:Version|דף הגרסה]].",
        "ok": "אישור",
        "databaseerror-error": "שגיאה: $1",
        "laggedslavemode": "'''אזהרה:''' הדף עשוי שלא להכיל עדכונים אחרונים.",
        "readonly": "בסיס הנתונים נעול",
-       "enterlockreason": "×\94×\96×\99× ×\95 ×¡×\99×\91×\94 ×\9c× ×¢×\99×\9cת ×\91ס×\99ס ×\94נת×\95× ×\99×\9d, ×\9b×\95×\9c×\9c ×\94ער×\9b×\94 ×\9c×\92×\91×\99 ×\9e×\95×¢×\93 ×©×\97ר×\95ר ×\94× ×¢×\99×\9c×\94.",
+       "enterlockreason": "×\99ש ×\9c×\94×\96×\99×\9f ×¡×\99×\91×\94 ×\9c× ×¢×\99×\9c×\94, ×\9b×\95×\9c×\9c ×\94ער×\9b×\94 ×\9c×\9e×\95×¢×\93 ×©×\97ר×\95ר ×\94× ×¢×\99×\9c×\94",
        "readonlytext": "בסיס נתונים זה של האתר נעול ברגע זה לצורך הזנת נתונים ושינויים. ככל הנראה מדובר בתחזוקה שוטפת, שלאחריה יחזור האתר לפעולתו הרגילה.\n\nמנהל המערכת שנעל את בסיס הנתונים סיפק את ההסבר הבא: $1",
-       "missing-article": "בסיס הנתונים לא מצא את הטקסט של הדף שהוא היה אמור למצוא, בשם \"$1\" $2.\n\nהדבר נגרם בדרך כלל על ידי קישור ישן להשוואת גרסאות של דף שנמחק או לגרסה של דף כזה.\n\nאם זה אינו המקרה, זהו כנראה באג בתוכנה.\nאנא דווחו על כך ל[[Special:ListUsers/sysop|מפעיל מערכת]], תוך שמירת פרטי כתובת ה־URL.",
+       "missing-article": "בסיס הנתונים לא מצא את הטקסט של הדף שהוא היה אמור למצוא, בשם \"$1\" $2.\n\nהדבר נגרם בדרך כלל על־ידי קישור ישן להשוואת גרסאות של דף שנמחק או לגרסה של דף כזה.\n\nאם זה אינו המקרה, זהו כנראה באג בתוכנה.\nאנא דווחו על כך ל[[Special:ListUsers/sysop|מפעיל מערכת]], תוך שמירת פרטי כתובת ה־URL.",
        "missingarticle-rev": "(מספר גרסה: $1)",
        "missingarticle-diff": "(השוואת הגרסאות: $1, $2)",
        "readonly_lag": "בסיס הנתונים ננעל אוטומטית כדי לאפשר לבסיסי הנתונים המשניים להתעדכן מהבסיס הראשי.",
        "directorycreateerror": "יצירת התיקייה \"$1\" נכשלה.",
        "filenotfound": "הקובץ \"$1\" לא נמצא.",
        "unexpected": "ערך לא צפוי: \"$1\"=\"$2\"",
-       "formerror": "ש×\92×\99×\90×\94: ×\9c×\90 ×\99×\9b×\95×\9c ×\9cש×\9c×\95×\97 טופס.",
+       "formerror": "ש×\92×\99×\90×\94: ×\9c×\90 × ×\99ת×\9f ×\94×\99×\94 ×\9cש×\9c×\95×\97 ×\90ת ×\94טופס.",
        "badarticleerror": "לא ניתן לבצע פעולה זו בדף זה.",
-       "cannotdelete": "×\9c×\90 × ×\99ת×\9f ×\94×\99×\94 ×\9c×\9e×\97×\95ק ×\90ת ×\94×\93×£ ×\90×\95 ×\94ק×\95×\91×¥ \"$1\".\n×\99×\99ת×\9b×\9f ×©×\94×\95×\90 × ×\9e×\97ק ×\9b×\91ר ×¢×\9c ×\99×\93×\99 ×\9e×\99ש×\94×\95 אחר.",
+       "cannotdelete": "×\9c×\90 × ×\99ת×\9f ×\94×\99×\94 ×\9c×\9e×\97×\95ק ×\90ת ×\94×\93×£ ×\90×\95 ×\94ק×\95×\91×¥ \"$1\".\n×\99×\99ת×\9b×\9f ×©×\94×\95×\90 ×\9b×\91ר × ×\9e×\97ק ×¢×\9cÖ¾×\99×\93×\99 ×\9eשת×\9eש אחר.",
        "cannotdelete-title": "לא ניתן למחוק את הדף \"$1\"",
        "delete-hook-aborted": "המחיקה הופסקה על־ידי מבנה Hook.\nלא ניתן הסבר.",
        "no-null-revision": "לא ניתן היה ליצור גרסת־דמה בדף \"$1\"",
        "viewsource": "הצגת מקור",
        "viewsource-title": "הצגת המקור של $1",
        "actionthrottled": "הפעולה הוגבלה",
-       "actionthrottledtext": "×\9b×\90×\9eצע×\99 × ×\92×\93 ×¡×¤×\90×\9d, ×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d ×\9c×\91צע ×¤×¢×\95×\9c×\94 ×\96×\95 ×¤×¢×\9e×\99×\9d ×¨×\91×\95ת ×\9e×\93×\99 ×\91×\96×\9e×\9f ×§×¦×¨. ×\90× ×\90 × ×¡×\95 שוב בעוד מספר דקות.",
+       "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× ×\90 ×\9cנס×\95ת שוב בעוד מספר דקות.",
        "protectedpagetext": "דף זה מוגן כדי למנוע עריכה ופעולות אחרות.",
        "viewsourcetext": "באפשרותך לצפות בטקסט המקור של הדף ולהעתיקו:",
-       "viewyourtext": "×\91×\90פשר×\95ת×\9b×\9d ×\9cצפ×\95ת ×\91×\98קס×\98 ×\94×\9eק×\95ר ×©×\9c '''×\94ער×\99×\9b×\95ת ×©×\9c×\9b×\9d''' ×©×\9c ×\94×\93×£ ולהעתיקו:",
+       "viewyourtext": "×\91×\90פשר×\95ת×\9a ×\9cצפ×\95ת ×\91×\98קס×\98 ×\94×\9eק×\95ר ×©×\9c <strong>×\94ער×\99×\9b×\95ת ×©×\9c×\9a</strong> ×\91×\93×£ ×\94×\96×\94 ולהעתיקו:",
        "protectedinterface": "דף זה הוא אחד מסדרת דפים המספקים הודעות מערכת לתוכנה באתר ויקי זה, ומוגן כדי למנוע השחתות.\nכדי להוסיף או לשנות תרגומים בכל אתרי הוויקי, אנא השתמשו ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
-       "editinginterface": "'''אזהרה:''' הדף שאתם עורכים הוא אחד הדפים המספקים הודעות מערכת לתוכנה.\nשינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים באתר ויקי זה.\nכדי להוסיף או לשנות תרגומים בכל אתרי הוויקי, אנא השתמשו ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
+       "editinginterface": "<strong>אזהרה:</strong> הדף שאתם עורכים הוא אחד הדפים המספקים הודעות מערכת לתוכנה.\nשינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים באתר ויקי זה.",
+       "translateinterface": "כדי להוסיף או לשנות תרגומים עבור כל אתרי הוויקי, יש להשתמש ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
        "cascadeprotected": "דף זה מוגן מעריכה כי הוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:\n$2",
-       "namespaceprotected": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d ×\9cער×\95×\9a ×\93פ×\99×\9d ×\91×\9eר×\97×\91 ×\94ש×\9d '''$1'''.",
-       "customcssprotected": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d ×\9cער×\95×\9a ×\93×£ CSS ×\96×\94, ×\9b×\99×\95×\95×\9f ×©×\94×\95×\90 ×\9b×\95×\9c×\9c ×\90ת ×\94×\94×\92×\93ר×\95ת ×\94אישיות של משתמש אחר.",
-       "customjsprotected": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d ×\9cער×\95×\9a ×\93×£ JavaScript ×\96×\94, ×\9b×\99×\95×\95×\9f ×©×\94×\95×\90 ×\9b×\95×\9c×\9c ×\90ת ×\94×\94×\92×\93ר×\95ת ×\94אישיות של משתמש אחר.",
-       "mycustomcssprotected": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d לערוך דף CSS זה.",
-       "mycustomjsprotected": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d לערוך דף JavaScript זה.",
+       "namespaceprotected": "×\90×\99×\9f ×\9c×\9a ×\94רש×\90×\94 ×\9cער×\95×\9a ×\93פ×\99×\9d ×\91×\9eר×\97×\91 ×\94ש×\9d <strong>$1</strong>.",
+       "customcssprotected": "×\90×\99× ×\9a ×\9e×\95רש×\94 ×\9cער×\95×\9a ×\93×£ CSS ×\96×\94 ×\9b×\99×\95×\95×\9f ×©×\94×\95×\90 ×\9b×\95×\9c×\9c ×\94×\92×\93ר×\95ת אישיות של משתמש אחר.",
+       "customjsprotected": "×\90×\99× ×\9a ×\9e×\95רש×\94 ×\9cער×\95×\9a ×\93×£ JavaScript ×\96×\94 ×\9b×\99×\95×\95×\9f ×©×\94×\95×\90 ×\9b×\95×\9c×\9c ×\94×\92×\93ר×\95ת אישיות של משתמש אחר.",
+       "mycustomcssprotected": "×\90×\99×\9f ×\9c×\9a ×\94רש×\90×\94 לערוך דף CSS זה.",
+       "mycustomjsprotected": "×\90×\99×\9f ×\9c×\9a ×\94רש×\90×\94 לערוך דף JavaScript זה.",
        "myprivateinfoprotected": "אין לך הרשאה לערוך את המידע הפרטי שלך",
        "mypreferencesprotected": "אין לך הרשאה לערוך את ההעדפות שלך.",
        "ns-specialprotected": "לא ניתן לערוך דפים מיוחדים.",
-       "titleprotected": "לא ניתן ליצור דף זה, כיוון שהמשתמש [[User:$1|$1]] הגן עליו מפני יצירה.\nהסיבה שניתנה לכך היא \"$2\".",
+       "titleprotected": "[[User:$1|$1]] {{GENDER:$1|הפעיל|הפעילה}} הגנה על הדף הזה מפני יצירה.\nהסיבה שניתנה לכך היא \"<em>$2</em>\".",
        "filereadonlyerror": "לא ניתן לשנות את הקובץ \"$1\" כיוון שמאגר הקבצים \"$2\" במצב קריאה בלבד.\n\nמנהל המערכת שנעל את המאגר סיפק את ההסבר הבא: \"'''$3'''\".",
        "invalidtitle-knownnamespace": "כותרת בלתי־תקינה עם מרחב השם \"$2\" ושם דף \"$3\"",
        "invalidtitle-unknownnamespace": "כותרת בלתי־תקינה עם מרחב שם בלתי־ידוע מספר $1 ושם דף \"$2\"",
        "exception-nologin": "לא בחשבון",
        "exception-nologin-text": "אנא היכנסו לחשבון כדי לראות את הדף הזה או לבצע את הפעולה הזו.",
-       "exception-nologin-text-manual": "×\90× ×\90 $1 כדי לראות את הדף הזה או לבצע את הפעולה הזו.",
+       "exception-nologin-text-manual": "× ×\93רשת $1 כדי לראות את הדף הזה או לבצע את הפעולה הזו.",
        "virus-badscanner": "הגדרות שגויות: סורק הווירוסים אינו ידוע: ''$1''",
        "virus-scanfailed": "הסריקה נכשלה (קוד: $1)",
        "virus-unknownscanner": "אנטי־וירוס בלתי ידוע:",
        "userlogin-signwithsecure": "שימוש בחיבור מאובטח",
        "yourdomainname": "המתחם שלך:",
        "password-change-forbidden": "אין באפשרותך לשנות סיסמאות באתר זה.",
-       "externaldberror": "×\94×\99×\99ת×\94 ×©×\92×\99×\90×\94 ×\91×\91ס×\99ס ×\94נת×\95× ×\99×\9d ×©×\9c ×\94×\94×\96×\93×\94×\95ת, ×\90×\95 ×©×\90×\99× ×\9b×\9d ×¨×©×\90×\99×\9d ×\9c×¢×\93×\9b×\9f ×\90ת ×\97ש×\91×\95× ×\9b×\9d ×\94×\97×\99צ×\95× ×\99.",
+       "externaldberror": "×\90×\99רע×\94 ×©×\92×\99×\90ת ×\90×\99×\9e×\95ת ×\91×\91ס×\99ס ×\94נת×\95× ×\99×\9d, ×\90×\95 ×©×\90×\99× ×\9a ×\9e×\95רש×\94 ×\9c×¢×\93×\9b×\9f ×\90ת ×\94×\97ש×\91×\95×\9f ×\94×\97×\99צ×\95× ×\99 ×©×\9c×\9a.",
        "login": "כניסה לחשבון",
        "nav-login-createaccount": "כניסה לחשבון / הרשמה",
        "userlogin": "כניסה לחשבון / הרשמה",
        "nologin": "אין לך חשבון? $1.",
        "nologinlink": "הרשמה",
        "createaccount": "יצירת חשבון חדש",
-       "gotaccount": "×\9b×\91ר × ×¨×©×\9eת×\9d? $1.",
+       "gotaccount": "×\9b×\91ר ×\99ש ×\9c×\9a ×\97ש×\91×\95×\9f? $1.",
        "gotaccountlink": "כניסה לחשבון",
        "userlogin-resetlink": "שכחת את פרטי הכניסה?",
        "userlogin-resetpassword-link": "שכחת את הסיסמה?",
        "createacct-benefit-body1": "{{PLURAL:$1|עריכה|עריכות}}",
        "createacct-benefit-body2": "{{PLURAL:$1|דף|דפים}}",
        "createacct-benefit-body3": "{{PLURAL:$1|תורם|תורמים}} לאחרונה",
-       "badretype": "הסיסמאות שהזנתם אינן מתאימות.",
+       "badretype": "הסיסמאות שהזנת אינן מתאימות.",
        "userexists": "שם המשתמש שבחרתם כבר נמצא בשימוש.\nאנא בחרו שם אחר.",
        "loginerror": "שגיאה בכניסה לאתר",
        "createacct-error": "שגיאה ביצירת חשבון",
        "noemail": "לא רשומה כתובת דואר אלקטרוני עבור ה{{GENDER:$1|משתמש|משתמשת}} \"$1\".",
        "noemailcreate": "יש לספק כתובת דואר אלקטרוני תקינה.",
        "passwordsent": "סיסמה חדשה נשלחה לכתובת הדואר האלקטרוני הרשומה עבור \"$1\".\nאנא היכנסו חזרה לאתר אחרי שתקבלו אותה.",
-       "blocked-mailpassword": "×\9bת×\95×\91ת ×\94Ö¾IP ×©×\9c×\9b×\9d ×\97ס×\95×\9e×\94 ×\9eער×\99×\9b×\94, ×\95×\9cפ×\99×\9b×\9a ×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d ×\9c×\94שת×\9eש ×\91×\90פשר×\95ת ×©×\97×\96×\95ר ×\94ס×\99ס×\9e×\94 כדי למנוע ניצול לרעה של התכונה.",
+       "blocked-mailpassword": "×\9bת×\95×\91ת ×\94Ö¾IP ×©×\9c×\9a × ×\97ס×\9e×\94 ×\9eער×\99×\9b×\94, ×\95×\9cפ×\99×\9b×\9a ×\90×\99× ×\9a ×\9e×\95רש×\94 ×\9c×\94שת×\9eש ×\91×\90פשר×\95ת ×©×\97×\96×\95ר ×\94ס×\99ס×\9e×\94, ×\95×\96×\90ת כדי למנוע ניצול לרעה של התכונה.",
        "eauthentsent": "דוא\"ל אימות נשלח לכתובת הדוא\"ל שצוינה.\nלפני שדברי דוא\"ל אחרים יישלחו לחשבון הזה, יהיה עליכם לפעול לפי ההוראות בדוא\"ל, כדי לאשר שהחשבון אכן שייך לכם.",
        "throttled-mailpassword": "כבר נשלח דוא\"ל לאיפוס הסיסמה ב{{PLURAL:$1|שעה האחרונה|שעתיים האחרונות|־$1 השעות האחרונות}}.\nכדי למנוע ניצול לרעה, יכול להישלח רק דוא\"ל אחד כזה בכל {{PLURAL:$1|שעה|שעתיים|$1 שעות}}.",
        "mailerror": "שגיאה בשליחת דואר: $1",
        "emailnotauthenticated": "כתובת הדוא\"ל שלכם עדיין לא אומתה.\nלא יישלח אליכם דוא\"ל עבור אף אחת מהתכונות הבאות.",
        "noemailprefs": "יש לציין כתובת דוא\"ל בהעדפות שלך כדי שתכונות אלה יעבדו.",
        "emailconfirmlink": "אישור כתובת הדוא\"ל שלך",
-       "invalidemailaddress": "×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×\90×\99× ×\94 ×\9eתק×\91×\9cת ×\9b×\99×\95×\95×\9f ×©× ×¨×\90×\94 ×©×\94×\99×\90 ×\91פ×\95ר×\9e×\98 ×\9c×\90 × ×\9b×\95×\9f.\n×\90× ×\90 ×\94ק×\9c×\99×\93×\95 ×\9bת×\95×\91ת ×ª×§×\99× ×\94 ×\90×\95 ×\94ש×\90×\99ר×\95 את השדה ריק.",
+       "invalidemailaddress": "×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×\90×\99× ×\94 ×\9eתק×\91×\9cת ×\9b×\99×\95×\95×\9f ×©× ×¨×\90×\94 ×©×\94×\99×\90 ×\91פ×\95ר×\9e×\98 ×\9c×\90 ×\97×\95ק×\99.\n×\99ש ×\9c×\94×\96×\99×\9f ×\9bת×\95×\91ת ×ª×§×\99× ×\94 ×\90×\95 ×\9c×\94ש×\90×\99ר את השדה ריק.",
        "cannotchangeemail": "לא ניתן לשנות את כתובות הדוא\"ל של חשבונות באתר ויקי זה.",
        "emaildisabled": "אתר זה לא יכול לשלוח דואר אלקטרוני.",
        "accountcreated": "החשבון נוצר",
        "createaccount-text": "מישהו יצר חשבון בשם $2 ב{{grammar:תחילית|{{SITENAME}}}} ($4), והסיסמה הזמנית של החשבון היא \"$3\". עליכם להיכנס ולשנות עכשיו את הסיסמה.\n\nבאפשרותכם להתעלם מהודעה זו, אם החשבון נוצר בטעות.",
        "login-throttled": "ביצעתם לאחרונה ניסיונות רבים מדי להיכנס לחשבון זה.\nאנא המתינו $1 לפני שתנסו שוב.",
        "login-abort-generic": "הכניסה לחשבון לא הצליחה - היא הופסקה",
+       "login-migrated-generic": "חשבון המשתמש שלך הועבר, ושם המשתמש שלך כבר לא קיים באתר ויקי זה.",
        "loginlanguagelabel": "שפה: $1",
        "suspicious-userlogout": "בקשתך לצאת מהחשבון נדחתה כיוון שנראה שהיא נשלחה על־ידי דפדפן שבור או שרת פרוקסי עם זיכרון מטמון.",
        "createacct-another-realname-tip": "השם האמיתי הוא אופציונאלי.\nאם תבחרו לספקו, הוא ישמש לייחוס עבודת המשתמש אליו.",
        "newpassword": "סיסמה חדשה:",
        "retypenew": "חזרה על הסיסמה החדשה:",
        "resetpass_submit": "הגדרת הסיסמה וכניסה לחשבון",
-       "changepassword-success": "ס×\99ס×\9eת×\9b×\9d שונתה בהצלחה!",
+       "changepassword-success": "ס×\99ס×\9eת×\9a שונתה בהצלחה!",
        "changepassword-throttled": "ביצעתם לאחרונה ניסיונות רבים מדי להיכנס לחשבון זה.\nאנא המתינו $1 לפני שתנסו שוב.",
        "resetpass_forbidden": "לא ניתן לשנות סיסמאות.",
-       "resetpass-no-info": "×\99ש ×\9c×\94×\99×\9bנס לחשבון כדי לגשת לדף זה באופן ישיר.",
+       "resetpass-no-info": "× ×\93רשת ×\9b× ×\99ס×\94 לחשבון כדי לגשת לדף זה באופן ישיר.",
        "resetpass-submit-loggedin": "שינוי סיסמה",
        "resetpass-submit-cancel": "ביטול",
        "resetpass-wrong-oldpass": "הסיסמה הזמנית או הנוכחית אינה תקינה.\nייתכן שכבר שינית את סיסמתך או שכבר ביקשת סיסמה זמנית חדשה.",
        "passwordreset-emailsent-capture": "נשלח דואר אלקטרוני לאיפוס הסיסמה, והוא מוצג להלן.",
        "passwordreset-emailerror-capture": "נוצר דואר אלקטרוני לאיפוס הסיסמה, והוא מוצג להלן, אך שליחתו ל{{GENDER:$2|משתמש|משתמשת}} נכשלה: $1",
        "changeemail": "שינוי כתובת דוא\"ל",
-       "changeemail-header": "שינוי כתובת הדואר האלקטרוני בחשבון",
        "changeemail-text": "מלאו טופס זה כדי לשנות את כתובת הדואר האלקטרוני שלכם. יהיה עליכם למלא סיסמה כדי לאשר את השינוי.",
-       "changeemail-no-info": "×\99ש ×\9c×\94×\99×\9bנס לחשבון כדי לגשת לדף זה ישירות.",
+       "changeemail-no-info": "× ×\93רשת ×\9b× ×\99ס×\94 לחשבון כדי לגשת לדף זה ישירות.",
        "changeemail-oldemail": "כתובת דוא\"ל נוכחית:",
        "changeemail-newemail": "כתובת דוא\"ל חדשה:",
        "changeemail-none": "(אין)",
        "changeemail-password": "סיסמה ב{{grammar:תחילית|{{SITENAME}}}}:",
        "changeemail-submit": "שינוי כתובת הדוא\"ל",
-       "changeemail-cancel": "ביטול",
        "changeemail-throttled": "ביצעתם ניסיונות רבים מדי להיכנס לחשבון זה.\nאנא המתינו $1 לפני שתנסו שוב.",
        "resettokens": "איפוס אסימונים",
        "resettokens-text": "בעמוד זה ניתן לאפס אסימונים שמאפשרים גישה לנתונים פרטיים של החשבון שלך.\n\nרצוי לעשות זאת אם שיתפת אותם בטעות עם אחרים או אם חשבונך נפרץ.",
        "bold_sample": "טקסט מודגש",
        "bold_tip": "טקסט מודגש",
        "italic_sample": "טקסט נטוי",
-       "italic_tip": "טקסט נטוי (לא מומלץ בעברית)",
+       "italic_tip": "טקסט נטוי",
        "link_sample": "קישור",
        "link_tip": "קישור פנימי",
        "extlink_sample": "http://www.example.com כותרת הקישור לתצוגה",
        "showpreview": "תצוגה מקדימה",
        "showdiff": "הצגת שינויים",
        "blankarticle": "<strong>אזהרה:</strong> הדף שאתם יוצרים הוא ריק.\nאם תלחצו שוב על \"{{int:savearticle}}\", הדף ייווצר ללא תוכן.",
-       "anoneditwarning": "'''אזהרה:''' אינכם מחוברים לחשבון. כתובת ה־IP שלכם תירשם בהיסטוריית העריכות של הדף.",
+       "anoneditwarning": "<strong>אזהרה:</strong> אינכם מחוברים לחשבון. כתובת ה־IP שלכם תוצג בפומבי אם תבצעו עריכות כלשהן. אם <strong>[$1 תיכנסו לחשבון]</strong> או <strong>[$2 תיצרו חשבון]</strong>, העריכות שלכם תיוחסנה לשם המשתמש שלכם ותקבלו גם יתרונות אחרים.",
        "anonpreviewwarning": "''אינכם מחוברים לחשבון. שמירה תגרום לכתובת ה־IP שלכם להירשם בהיסטוריית העריכות של הדף.''",
-       "missingsummary": "'''תזכורת:''' לא הזנתם תקציר עריכה.\nאם תלחצו שוב על הכפתור \"{{int:savearticle}}\", עריכתכם תישמר בלעדיו.",
-       "missingcommenttext": "×\90× ×\90 ×\94ק×\9c×\99×\93×\95 את ההודעה למטה.",
-       "missingcommentheader": "'''תזכורת:''' לא הזנתם נושא/כותרת להודעה זו.\nאם תלחצו שוב על הכפתור \"{{int:savearticle}}\", עריכתכם תישמר בלעדיו.",
+       "missingsummary": "<strong>תזכורת:</strong> לא הזנת תקציר עריכה.\nלחיצה חוזרת על הכפתור \"{{int:savearticle}}\" תגרום לעריכה שלך להישמר בלעדיו.",
+       "missingcommenttext": "×\99ש ×\9c×\94ק×\9c×\99×\93 את ההודעה למטה.",
+       "missingcommentheader": "<strong>תזכורת:</strong> לא הזנת נושא/כותרת להודעה זו.\nלחיצה חוזרת על הכפתור \"{{int:savearticle}}\" תגרום לעריכה שלך להישמר ללא נושא/כותרת.",
        "summary-preview": "תצוגה מקדימה של התקציר:",
        "subject-preview": "תצוגה מקדימה של הנושא/הכותרת:",
        "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באפשרותכם להשתמש בתכונת \"{{int:emailuser}}\", אלא אם לא ציינתם כתובת דוא\"ל תקינה ב[[Special:Preferences|העדפות המשתמש שלכם]] או אם נחסמתם משליחת דוא\"ל.\n\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אנא ציינו את כל הפרטים הללו בכל פנייה למפעילי המערכת.",
        "blockednoreason": "לא ניתנה סיבה",
-       "whitelistedittext": "×¢×\9c×\99×\9b×\9d $1 כדי לערוך דפים.",
+       "whitelistedittext": "× ×\93רשת $1 כדי לערוך דפים.",
        "confirmedittext": "עליכם לאמת את כתובת הדוא\"ל שלכם לפני שתוכלו לערוך דפים. אנא הגדירו ואמתו את כתובת הדוא\"ל שלכם באמצעות [[Special:Preferences|העדפות המשתמש]] שלכם.",
        "nosuchsectiontitle": "הפסקה לא נמצאה",
        "nosuchsectiontext": "ניסית לערוך פסקה שאינה קיימת.\nייתכן שהיא הועברה או נמחקה בעת שצפית בדף.",
        "loginreqtitle": "נדרשת כניסה לחשבון",
-       "loginreqlink": "×\9c×\94×\99×\9bנס לחשבון",
-       "loginreqpagetext": "×¢×\9c×\99×\9b×\9d $1 כדי לצפות בדפים אחרים.",
+       "loginreqlink": "×\9b× ×\99ס×\94 לחשבון",
+       "loginreqpagetext": "× ×\93רשת $1 כדי לצפות בדפים אחרים.",
        "accmailtitle": "הסיסמה נשלחה",
        "accmailtext": "סיסמה אקראית עבור [[User talk:$1|$1]] נשלחה אל $2. ניתן לשנותה בדף '''[[Special:ChangePassword|שינוי הסיסמה]]''' לאחר הכניסה.",
        "newarticle": "(חדש)",
        "newarticletext": "הגעתם לדף שעדיין איננו קיים.\nכדי ליצור את הדף הזה, התחילו להקליד בתיבת הטקסט למטה (ראו את [$1 דף העזרה] למידע נוסף).\nאם הגעתם לכאן בטעות, לחצו על כפתור ה<strong>חזרה</strong> (Back) בדפדפן שלכם.",
-       "anontalkpagetext": "----\n'''זהו דף שיחה של משתמש אנונימי שעדיין לא יצר חשבון במערכת, או שהוא לא משתמש בו. כיוון שכך, אנו צריכים להשתמש בכתובת ה־IP כדי לזהותו. ייתכן שכתובת IP זו תייצג מספר משתמשים. אם אתם משתמשים אנונימיים ומרגישים שקיבלתם הודעות בלתי רלוונטיות, אנא [[Special:UserLogin|היכנסו לחשבון]] או [[Special:UserLogin/signup|הירשמו לאתר]] כדי להימנע מבלבול עתידי עם משתמשים אנונימיים נוספים.'''\n----",
+       "anontalkpagetext": "----\n<em>זהו דף שיחה של משתמש אנונימי שעדיין לא יצר חשבון במערכת, או שהוא לא משתמש בו.</em>\nלכן עלינו להשתמש בכתובת ה־IP המספרית כדי לזהותו.\nייתכן שכתובת IP זו תהיה משותפת למספר משתמשים.\nאם אתם משתמשים אנונימיים ומרגישים שקיבלתם הודעות בלתי רלוונטיות, אנא [[Special:UserLogin/signup|צרו חשבון]] או [[Special:UserLogin|היכנסו לחשבון]] כדי להימנע מבלבול עתידי עם משתמשים אנונימיים נוספים.",
        "noarticletext": "אין כרגע טקסט בדף זה.\nבאפשרותכם [[Special:Search/{{PAGENAME}}|לחפש את כותרת הדף]] בדפים אחרים,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} לחפש ביומנים הרלוונטיים],\nאו [{{fullurl:{{FULLPAGENAME}}|action=edit}} לערוך דף זה]</span>.",
        "noarticletext-nopermission": "אין כרגע טקסט בדף זה.\nבאפשרותכם [[Special:Search/{{PAGENAME}}|לחפש את כותרת הדף]] בדפים אחרים,\nאו <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} לחפש ביומנים הרלוונטיים]</span>,\nאך אינכם מורשים ליצור את הדף.",
        "missing-revision": "גרסה #$1 של הדף \"{{FULLPAGENAME}}\" אינה קיימת.\n\nזה נגרם בדרך כלל על־ידי לחיצה על קישור ישן לגרסה קודמת של דף שנמחק.\nאפשר למצוא פרטים ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
        "userpage-userdoesnotexist": "חשבון המשתמש \"$1\" אינו רשום.\nאנא בדקו אם ברצונכם ליצור/לערוך דף זה.",
        "userpage-userdoesnotexist-view": "חשבון המשתמש \"$1\" אינו רשום.",
        "blocked-notice-logextract": "{{GENDER:$1|המשתמש הזה חסום|המשתמשת הזו חסומה}} כרגע.\nהפעולה האחרונה ביומן החסימות מוצגת להלן:",
-       "clearyourcache": "'''הערה:''' לאחר השמירה, עליכם לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.\n* '''פיירפוקס / ספארי:''' לחצו על Shift בעת לחיצתכם על '''העלה מחדש''' (Reload), או הקישו על ''Ctrl-F5'' או על ''Ctrl-R'' (או על ''<span dir=\"ltr\">⌘-R</span>'' במחשב מק)\n* '''גוגל כרום:''' לחצו על ''Ctrl-Shift-R'' (או על ''<span dir=\"ltr\">⌘-Shift-R</span>'' במק)\n* '''אינטרנט אקספלורר:''' לחצו על Ctrl בעת לחיצתכם על '''רענן''' (Refresh), או הקישו על ''Ctrl-F5''\n* '''אופרה''': נקו את המטמון ב־''Tools‏ ← Preferences''",
+       "clearyourcache": "<strong>הערה:</strong> לאחר השמירה, ייתכן שתצטרכו לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.\n* <strong>פיירפוקס / ספארי:</strong> לחצו והחזיקו את המקש <em>Shift</em> בעת לחיצתכם על <strong>טעינה מחדש</strong> (Reload), או לחצו על צירוף המקשים <em>Ctrl-F5</em> או <em>Ctrl-R</em>&rlm; (<em><span dir=\"ltr\">⌘-R</span></em> במחשב מק)\n* <strong>גוגל כרום:</strong> לחצו על צירוף המקשים <em>Ctrl-Shift-R</em>&rlm; (<em><span dir=\"ltr\">⌘-Shift-R</span></em> במחשב מק)\n* <strong>אינטרנט אקספלורר:</strong> לחצו והחזיקו את המקש <em>Ctrl</em> בעת לחיצתכם על <strong>רענן</strong> (Refresh), או לחצו על צירוף המקשים <em>Ctrl-F5</em>\n* <strong>אופרה:</strong> נקו את המטמון ב־<em>Tools‏ ← Preferences</em>",
        "usercssyoucanpreview": "'''עצה:''' השתמשו בלחצן \"{{int:showpreview}}\" כדי לבחון את גיליון ה־CSS החדש שלכם לפני השמירה.",
        "userjsyoucanpreview": "'''עצה:''' השתמשו בלחצן \"{{int:showpreview}}\" כדי לבחון את סקריפט ה־JavaScript החדש שלכם לפני השמירה.",
        "usercsspreview": "'''זכרו שזו רק תצוגה מקדימה של גיליון ה־CSS שלכם.'''\n'''הוא טרם נשמר!'''",
        "yourdiff": "הבדלים",
        "copyrightwarning": "'''שימו לב:''' תרומתכם ל{{grammar:תחילית|{{SITENAME}}}} תפורסם תחת תנאי הרישיון $2 (ראו $1 לפרטים נוספים). אם אינכם רוצים שעבודתכם תהיה זמינה לעריכה על־ידי אחרים, שתופץ לעיני כול, ושאחרים יוכלו להעתיק ממנה בציון המקור – אל תפרסמו אותה פה. כמו־כן, אתם מבטיחים לנו כי כתבתם את הטקסט הזה בעצמכם, או העתקתם אותו ממקור שאינו מוגן בזכויות יוצרים. '''אל תעשו שימוש בחומר המוגן בזכויות יוצרים ללא רשות!'''",
        "copyrightwarning2": "'''שימו לב:''' תורמים אחרים עשויים לערוך או אף להסיר את תרומתכם ל{{grammar:תחילית|{{SITENAME}}}}. אם אינכם רוצים שעבודתכם תהיה זמינה לעריכה על־ידי אחרים, אל תפרסמו אותה פה. כמו־כן, אתם מבטיחים לנו כי כתבתם את הטקסט הזה בעצמכם, או העתקתם אותו ממקור שאינו מוגן בזכויות יוצרים (ראו $1 לפרטים נוספים). '''אל תעשו שימוש בחומר המוגן בזכויות יוצרים ללא רשות!'''",
-       "longpageerror": "'''שגיאה: אורך הטקסט ששלחתם הוא {{PLURAL:$1|קילובייט אחד|$1 קילובייטים}}, והוא ארוך יותר מהאורך המרבי של {{PLURAL:$2|קילובייט אחד|$2 קילובייטים}}.'''\nלא ניתן לשמור אותו.",
+       "longpageerror": "<strong>שגיאה: אורך הטקסט ששלחת הוא {{PLURAL:$1|קילובייט אחד|$1 קילובייטים}}, והוא ארוך יותר מהאורך המרבי של {{PLURAL:$2|קילובייט אחד|$2 קילובייטים}}.</strong>\nלא ניתן לשמור אותו.",
        "readonlywarning": "'''אזהרה: בסיס הנתונים ננעל לצורך תחזוקה. בזמן זה לא ניתן לשמור את הטקסט הערוך.'''\nבאפשרותך להעתיק ולהדביק את הטקסט לתוך קובץ טקסט ולשמור אותו למאוחר יותר.\n\nמפעיל המערכת שנעל את בסיס הנתונים סיפק את ההסבר הבא: $1",
        "protectedpagewarning": "'''אזהרה: דף זה מוגן כך שרק מפעילי מערכת יכולים לערוך אותו.'''\nפעולת היומן האחרונה מוצגת להלן:",
        "semiprotectedpagewarning": "'''הערה:''' דף זה מוגן כך שרק משתמשים רשומים יכולים לערוך אותו.\nפעולת היומן האחרונה מוצגת להלן:",
        "template-semiprotected": "(מוגנת חלקית)",
        "hiddencategories": "דף זה כלול ב{{PLURAL:$1|קטגוריה מוסתרת אחת|־$1 קטגוריות מוסתרות}}:",
        "edittools": "<!-- הטקסט הנכתב כאן יוצג מתחת לטופסי עריכת דפים והעלאת קבצים, ולפיכך ניתן לכתוב להציג בו תווים קשים לכתיבה, קטעים מוכנים של טקסט ועוד. -->",
-       "nocreatetext": "ב{{grammar:תחילית|{{SITENAME}}}} קיימת הגבלה על יצירת דפים חדשים.\nבאפשרותך לחזור אחורה ולערוך דף קיים, או [[Special:UserLogin|להיכנס לחשבון]].",
+       "nocreatetext": "ב{{grammar:תחילית|{{SITENAME}}}} קיימת הגבלה על יצירת דפים חדשים.\nבאפשרותך לחזור אחורה ולערוך דף קיים, או [[Special:UserLogin|להיכנס לחשבון או ליצור חשבון]].",
        "nocreate-loggedin": "אינך מורשה ליצור דפים חדשים.",
        "sectioneditnotsupported-title": "עריכת פסקאות אינה נתמכת",
        "sectioneditnotsupported-text": "עריכת פסקאות אינה נתמכת בדף זה.",
        "edit-hook-aborted": "העריכה בוטלה על־ידי Hook.\nלא ניתן הסבר לביטול.",
        "edit-gone-missing": "לא ניתן לעדכן את הדף.\nנראה שהוא נמחק.",
        "edit-conflict": "התנגשות עריכה.",
-       "edit-no-change": "×\94×\9eער×\9bת ×\94תע×\9c×\9e×\94 ×\9eער×\99×\9bת×\9b×\9d, כיוון שלא נעשה שינוי בטקסט.",
+       "edit-no-change": "×\94×\9eער×\9bת ×\94תע×\9c×\9e×\94 ×\9eער×\99×\9bת×\9a כיוון שלא נעשה שינוי בטקסט.",
        "postedit-confirmation-created": "הדף נוצר.",
        "postedit-confirmation-restored": "הדף שוחזר.",
        "postedit-confirmation-saved": "עריכתך נשמרה.",
        "content-model-text": "טקסט פשוט",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "דפים שמשתמשים בפרמטרים כפולים בקריאות לתבניות",
+       "duplicate-args-category-desc": "הדף מכיל קריאות לתבניות שמשתמשות בפרמטרים כפולים, כגון <code><nowiki>{{תאריך|יום=1|יום=2}}</nowiki></code> או <code><nowiki>{{שעה|חמש|1=שש}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''אזהרה:''' דף זה כולל יותר מדי קריאות לפונקציות מפענח שגוזלות משאבים.\n\nנדרש {{PLURAL:$2|שתהיה בו לכל היותר קריאה אחת|שתהיינה בו לכל היותר $2 קריאות}} לפונקציות כאלה, אך כרגע יש בו {{PLURAL:$1|קריאה אחת|$1 קריאות}}.",
        "expensive-parserfunction-category": "דפים עם יותר מדי קריאות למשתנים הגוזלים משאבים",
        "post-expand-template-inclusion-warning": "'''אזהרה:''' התבניות המוכללות בדף זה גדולות מדי.\nחלק מהתבניות לא יוכללו.",
        "history-feed-title": "היסטוריית גרסאות",
        "history-feed-description": "היסטוריית הגרסאות של הדף הזה בוויקי",
        "history-feed-item-nocomment": "$1 ב־$2",
-       "history-feed-empty": "×\94×\93×£ ×\94×\9e×\91×\95קש ×\9c×\90 × ×\9eצ×\90.\n×\99×\99ת×\9b×\9f ×©×\94×\95×\90 × ×\9e×\97ק, ×\90×\95 ×©×©×\9e×\95 ×©×\95× ×\94.\nנס×\95 [[Special:Search|×\9c×\97פש]] ×\90×\97ר דפים רלוונטיים חדשים.",
+       "history-feed-empty": "×\94×\93×£ ×\94×\9e×\91×\95קש ×\9c×\90 × ×\9eצ×\90.\n×\99×\99ת×\9b×\9f ×©×\94×\95×\90 × ×\9e×\97ק, ×\90×\95 ×©×©×\9e×\95 ×©×\95× ×\94.\n×\91×\90פשר×\95ת×\9a ×\9cנס×\95ת [[Special:Search|×\9c×\97פש]] דפים רלוונטיים חדשים.",
        "rev-deleted-comment": "(תקציר העריכה הוסר)",
        "rev-deleted-user": "(שם המשתמש הוסר)",
        "rev-deleted-event": "(פעולת היומן הוסרה)",
        "suppressionlog": "יומן העלמות",
        "suppressionlogtext": "להלן רשימת המחיקות והחסימות הכוללות תוכן המוסתר ממפעילי המערכת.\nראו את [[Special:BlockList|רשימת החסומים]] לרשימת החסימות הפעילות כעת.",
        "mergehistory": "מיזוג גרסאות של דפים",
-       "mergehistory-header": "×\93×£ ×\96×\94 ×\9e×\90פשר ×\9c×\9b×\9d ×\9c×\9e×\96×\92 ×\92רס×\90×\95ת ×\9e×\94×\99ס×\98×\95ר×\99×\99ת ×\94×\93×£ ×©×\9c ×\93×£ ×\9eק×\95ר ×\9cת×\95×\9a ×\93×£ ×\97×\93ש ×\99×\95תר.\n×\90× ×\90 ×\95×\93×\90×\95 ×©×©×\99× ×\95×\99 ×\96×\94 ×\9c×\90 ×\99פ×\92×¢ ×\91×\94×\9eש×\9b×\99×\95ת ×\94ש×\99× ×\95×\99×\99×\9d ×\91×\93×£ ×\94×\99ש×\9f.\n\n'''×\9cפ×\97×\95ת ×\92רס×\94 ×\90×\97ת ×©×\9c ×\93×£ ×\94×\9eק×\95ר ×\97×\99×\99×\91ת ×\9c×\94×\99ש×\90ר ×\91×\95.'''",
+       "mergehistory-header": "×\93×£ ×\96×\94 ×\9e×\90פשר ×\9c×\9a ×\9c×\9e×\96×\92 ×\92רס×\90×\95ת ×\9eת×\95×\9a ×\94×\99ס×\98×\95ר×\99×\99ת ×\92רס×\90×\95ת ×©×\9c ×\93×£ ×\90×\97×\93 (×\93×£ ×\94×\9eק×\95ר) ×\9cת×\95×\9a ×\93×£ ×\97×\93ש.\n×\99ש ×\9c×\95×\95×\93×\90 ×©×\94×\9e×\99×\96×\95×\92 ×\9c×\90 ×\99פ×\92×¢ ×\91×\94×\9eש×\9b×\99×\95ת ×\94ש×\99× ×\95×\99×\99×\9d ×\91×\93×£ ×\94×\99ש×\9f.",
        "mergehistory-box": "מיזוג גרסאות של שני דפים:",
        "mergehistory-from": "דף המקור:",
        "mergehistory-into": "דף היעד:",
        "mergehistory-list": "היסטוריית עריכות בת מיזוג",
-       "mergehistory-merge": "ניתן למזג את הגרסאות הבאות של [[:$1]] לתוך [[:$2]]. אנא השתמשו בלחצני האפשרות כדי לבחור זמן שרק גרסאות שנוצרו בו ולפניו ימוזגו. שימוש בקישורי הניווט יאפס עמודה זו.",
+       "mergehistory-merge": "ניתן למזג את הגרסאות הבאות של [[:$1]] לתוך [[:$2]].\nיש להשתמש בלחצני האפשרות כדי לבחור זמן שרק גרסאות שנוצרו בו ולפניו ימוזגו.\nשימוש בקישורי הניווט יאפס עמודה זו.",
        "mergehistory-go": "הצגת עריכות בנות מיזוג",
        "mergehistory-submit": "מיזוג",
        "mergehistory-empty": "אין גרסאות למיזוג.",
        "mergehistory-success": "{{PLURAL:$3|גרסה אחת|$3 גרסאות}} של [[:$1]] מוזגו בהצלחה לתוך [[:$2]].",
-       "mergehistory-fail": "×\9c×\90 × ×\99ת×\9f ×\9c×\91צע ×\90ת ×\9e×\99×\96×\95×\92 ×\94×\92רס×\90×\95ת, ×\90× ×\90 ×\91×\93ק×\95 שנית את הגדרות הדף והזמן.",
+       "mergehistory-fail": "×\9c×\90 × ×\99ת×\9f ×\9c×\91צע ×\90ת ×\9e×\99×\96×\95×\92 ×\94×\92רס×\90×\95ת, ×\99ש ×\9c×\91×\93×\95ק שנית את הגדרות הדף והזמן.",
        "mergehistory-fail-toobig": "לא ניתן לבצע את מיזוג הגרסאות כיוון שצריך להעביר יותר גרסאות מהמגבלה, שהיא {{PLURAL:$1|גרסה אחת|‏‏֫$1 גרסאות}}.",
        "mergehistory-no-source": "דף המקור $1 אינו קיים.",
        "mergehistory-no-destination": "דף היעד $1 אינו קיים.",
        "mergehistory-same-destination": "דפי המקור והיעד זהים",
        "mergehistory-reason": "סיבה:",
        "mergelog": "יומן מיזוגים",
-       "pagemerge-logentry": "מיזג את [[$1]] לתוך [[$2]] (גרסאות עד $3)",
        "revertmerge": "ביטול המיזוג",
        "mergelogpagetext": "זוהי רשימה של המיזוגים האחרונים של גרסאות מדף אחד לתוך דף שני.",
-       "history-title": "$1: היסטוריית גרסאות",
+       "history-title": "היסטוריית גרסאות של הדף \"$1\"",
        "difference-title": "הבדלים בין גרסאות בדף \"$1\"",
-       "difference-title-multipage": "$1 ו{{GRAMMAR:תחילית|$2}}: הבדלים בין דפים",
+       "difference-title-multipage": "הבדלים בין הדף \"$1\" לבין הדף \"$2\"",
        "difference-multipage": "(הבדלים בין דפים)",
        "lineno": "שורה $1:",
        "compareselectedversions": "השוואת הגרסאות שנבחרו",
        "nextn-title": "{{PLURAL:$1|התוצאה הבאה|$1 התוצאות הבאות}}",
        "shown-title": "הצגת {{PLURAL:$1|תוצאה אחת|$1 תוצאות}} בדף",
        "viewprevnext": "צפייה ב: ($1 {{int:pipe-separator}} $2) ($3)",
-       "searchmenu-exists": "'''קיים דף בשם \"[[:$1]]\" באתר זה.'''",
-       "searchmenu-new": "<strong>'''יצירת הדף \"[[:$1]]\" באתר זה.'''</strong> \n{{PLURAL:$2|0=|ראו גם את הדף שנמצא בחיפוש שלכם.|ראו גם את תוצאות החיפוש שלכם.}}",
+       "searchmenu-exists": "<strong>קיים דף בשם \"[[:$1]]\" באתר הוויקי הזה.</strong> {{PLURAL:$2|0=|ר' גם את הדפים האחרים שנמצאו בחיפוש.}}",
+       "searchmenu-new": "<strong>ליצירת הדף \"[[:$1]]\" באתר הוויקי הזה.</strong> {{PLURAL:$2|0=|ר' גם את הדף שנמצא בחיפוש.|ר' גם את הדפים שנמצאו בחיפוש.}}",
        "searchprofile-articles": "דפי תוכן",
        "searchprofile-images": "מולטימדיה",
        "searchprofile-everything": "הכול",
        "search-result-category-size": "{{PLURAL:$1|חבר אחד|$1 חברים}} ({{PLURAL:$2|קטגוריית משנה אחת|$2 קטגוריות משנה}}, {{PLURAL:$3|קובץ אחד|$3 קבצים}})",
        "search-redirect": "(הפניה $1)",
        "search-section": "(פסקה $1)",
+       "search-category": "(קטגוריה $1)",
        "search-file-match": "(התאמה בתוכן הקובץ)",
        "search-suggest": "האם התכוונת ל: $1",
        "search-interwiki-caption": "מיזמי אחות",
        "searchall": "הכול",
        "showingresults": "{{PLURAL:$1|מוצגת תוצאה <strong>אחת</strong>|מוצגות עד <strong>$1</strong> תוצאות}} החל ממספר <strong>$2</strong>:",
        "showingresultsinrange": "{{PLURAL:$1|מוצגת תוצאה <strong>אחת</strong>|מוצגות עד <strong>$1</strong> תוצאות}} בין המספרים <strong>$2</strong> ו‏‏־<strong>$3</strong>:",
-       "showingresultsheader": "{{PLURAL:$5|תוצאה '''$1''' מתוך '''$3'''|תוצאות '''$1 - $2''' מתוך '''$3'''}} עבור '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|תוצאה <strong>$1</strong> מתוך <strong>$3</strong>|תוצאות <strong>$1 - $2</strong> מתוך <strong>$3</strong>}}",
        "search-nonefound": "לא נמצאו תוצאות המתאימות לחיפוש.",
        "powersearch-legend": "חיפוש מתקדם",
        "powersearch-ns": "חיפוש על־פי מרחבי שם:",
        "preferences": "העדפות",
        "mypreferences": "העדפות",
        "prefs-edits": "מספר עריכות:",
-       "prefsnologintext2": "×\90× ×\90 ×\94×\99×\9bנס×\95 לחשבון כדי לשנות העדפות משתמש.",
+       "prefsnologintext2": "× ×\93רשת ×\9b× ×\99ס×\94 לחשבון כדי לשנות העדפות משתמש.",
        "prefs-skin": "עיצוב",
        "skin-preview": "תצוגה מקדימה",
        "datedefault": "ברירת המחדל",
        "timezoneregion-europe": "אירופה",
        "timezoneregion-indian": "האוקיינוס ההודי",
        "timezoneregion-pacific": "האוקיינוס השקט",
-       "allowemail": "קבלת דוא\"ל ממשתמשים אחרים",
+       "allowemail": "×\9c×\90פשר ×§×\91×\9cת ×\93×\95×\90\"×\9c ×\9e×\9eשת×\9eש×\99×\9d ×\90×\97ר×\99×\9d",
        "prefs-searchoptions": "חיפוש",
        "prefs-namespaces": "מרחבי שם",
        "default": "ברירת מחדל",
        "prefs-help-variant": "סוג הכתב המועדף להצגת דפי התוכן באתר ויקי זה.",
        "yournick": "חתימה:",
        "prefs-help-signature": "על הודעות בדפי שיחה יש לחתום באמצעות הטקסט \"<nowiki>~~~~</nowiki>\", שיומר לחתימה שלך ואחריה תאריך ושעה.",
-       "badsig": "×\97ת×\99×\9e×\94 ×\9eס×\95×\92ננת ×©×\92×\95×\99×\94.\n×\90× ×\90 ×\91×\93ק×\95 את תגיות ה־HTML.",
-       "badsiglength": "×\97ת×\99×\9eת×\9b×\9d ארוכה מדי.\nאורך החתימה המרבי הוא {{PLURAL:$1|תו אחד|$1 תווים}}.",
+       "badsig": "×\97ת×\99×\9e×\94 ×\9eס×\95×\92ננת ×©×\92×\95×\99×\94.\n× ×\90 ×\9c×\91×\93×\95ק את תגיות ה־HTML.",
+       "badsiglength": "×\97ת×\99×\9eת×\9a ארוכה מדי.\nאורך החתימה המרבי הוא {{PLURAL:$1|תו אחד|$1 תווים}}.",
        "yourgender": "איזה תיאור מתאים לך?",
        "gender-unknown": "איני רוצה לומר",
        "gender-male": "הוא עורך דפים בוויקי",
        "gender-female": "היא עורכת דפים בוויקי",
        "prefs-help-gender": "אין חובה למלא העדפה זו.\nהמערכת משתמשת במידע זה כדי לפנות אליך/אלייך ולציין את שם המשתמש שלך במין הדקדוקי הנכון.\nהמידע יהיה ציבורי.",
        "email": "דוא\"ל",
-       "prefs-help-realname": "×\94ש×\9d ×\94×\90×\9e×\99ת×\99 ×\94×\95×\90 ×\90×\95פצ×\99×\95× ×\90×\9c×\99.\n×\90×\9d ×ª×\91×\97ר×\95 ×\9cספק×\95, ×\94×\95×\90 ×\99ש×\9eש ×\9c×\99×\99×\97×\95ס ×¢×\91×\95×\93ת×\9b×\9d ×\90×\9c×\99×\9b×\9d.",
+       "prefs-help-realname": "×\90×\99×\9f ×\97×\95×\91×\94 ×\9c×\9e×\9c×\90 ×\90ת ×\94ש×\9d ×\94×\90×\9e×\99ת×\99.\n×\94ש×\9d ×\94×\90×\9e×\99ת×\99 ×¢×©×\95×\99 ×\9cש×\9eש ×\9b×\93×\99 ×\9c×\99×\99×\97ס ×\9c×\9a ×\90ת ×¢×\91×\95×\93ת×\9a.",
        "prefs-help-email": "כתובת דואר אלקטרוני היא אופציונאלית, אבל היא חיונית לאיפוס הסיסמה במקרה שתשכחו אותה.",
        "prefs-help-email-others": "באפשרותך גם לבחור לאפשר לאחרים ליצור איתך קשר באמצעות דוא\"ל דרך קישור בדף המשתמש או בדף השיחה שלך.\nכתובת הדוא\"ל שלך לא תיחשף כשמשתמשים אחרים ייצרו קשר איתך.",
        "prefs-help-email-required": "כתובת דואר אלקטרוני נדרשת לכתיבה באתר.",
        "prefs-tokenwatchlist": "אסימון",
        "prefs-diffs": "הבדלים בין גרסאות",
        "prefs-help-prefershttps": "העדפה זו תיכנס לתוקף בכניסה הבאה לחשבון.",
+       "prefswarning-warning": "ביצעת שינויים בהעדפות שלך, והם עדיין לא נשמרו.\nעזיבת דף זה ללא לחיצה על \"$1\" תגרום לכך שההעדפות שלך לא יעודכנו.",
        "prefs-tabs-navigation-hint": "טיפ: ניתן להשתמש במקשי החצים הימני והשמאלי כדי לנווט בין הלשוניות ברשימת הלשוניות.",
        "email-address-validity-valid": "כתובת הדוא\"ל נראית תקינה",
        "email-address-validity-invalid": "יש להקליד כתובת דוא\"ל תקינה",
        "userrights-groupsmember-auto": "{{GENDER:$2|חבר|חברה}} אוטומטית ב{{PLURAL:$1|קבוצה|קבוצות}}:",
        "userrights-groups-help": "באפשרותכם לשנות את הקבוצות שמשתמש זה חבר בהן:\n* תיבה מסומנת פירושה שהמשתמש חבר בקבוצה.\n* תיבה בלתי מסומנת פירושה שהמשתמש אינו חבר בקבוצה.\n* סימון * פירושו שלא תוכלו להסיר משתמש מהקבוצה מרגע שהוספתם אותו אליה, או להפך.",
        "userrights-reason": "סיבה:",
-       "userrights-no-interwiki": "×\90×\99×\9f ×\9c×\9b×\9d הרשאה לערוך הרשאות משתמש באתרים אחרים.",
+       "userrights-no-interwiki": "×\90×\99×\9f ×\9c×\9a הרשאה לערוך הרשאות משתמש באתרים אחרים.",
        "userrights-nodatabase": "בסיס הנתונים $1 אינו קיים או אינו מקומי.",
        "userrights-nologin": "עליכם [[Special:UserLogin|להיכנס לחשבון]] עם הרשאות מתאימות כדי לשנות הרשאות של משתמשים.",
        "userrights-notallowed": "אין לך הרשאה להוסיף או להסיר הרשאות של משתמשים.",
        "action-import": "לייבא דפים מאתר ויקי אחר",
        "action-importupload": "לייבא דפים באמצעות העלאת קובץ",
        "action-patrol": "לסמן עריכות של אחרים כבדוקות",
-       "action-autopatrol": "×\9cס×\9e×\9f ×\90ת ×¢×¨×\99×\9b×\95ת×\99ך כבדוקות",
+       "action-autopatrol": "×\9cס×\9e×\9f ×\90ת ×\94ער×\99×\9b×\95ת ×©×\9cך כבדוקות",
        "action-unwatchedpages": "לצפות ברשימת הדפים שאינם במעקב",
        "action-mergehistory": "למזג את ההיסטוריה של דף זה",
        "action-userrights": "לערוך את כל הרשאות המשתמש",
        "action-sendemail": "לשלוח דואר אלקטרוני",
        "action-editmywatchlist": "לערוך את רשימת המעקב שלך",
        "action-viewmywatchlist": "לצפות ברשימת המעקב שלך",
-       "action-viewmyprivateinfo": "×\9cצפ×\95ת ×\91×\9e×\99×\93×¢ ×\94פר×\98×\99 ×©×\9c×\9b×\9d",
-       "action-editmyprivateinfo": "×\9cער×\95×\9a ×\90ת ×\94×\9e×\99×\93×¢ ×\94פר×\98×\99 ×©×\9c×\9b×\9d",
+       "action-viewmyprivateinfo": "×\9cצפ×\95ת ×\91×\9e×\99×\93×¢ ×\94פר×\98×\99 ×©×\9c×\9a",
+       "action-editmyprivateinfo": "×\9cער×\95×\9a ×\90ת ×\94×\9e×\99×\93×¢ ×\94פר×\98×\99 ×©×\9c×\9a",
        "nchanges": "{{PLURAL:$1|שינוי אחד|$1 שינויים}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|מאז ביקורך האחרון}}",
        "enhancedrc-history": "היסטוריה",
        "uploadbtn": "העלאה",
        "reuploaddesc": "ביטול ההעלאה וחזרה לטופס העלאת קבצים לשרת",
        "upload-tryagain": "שליחת התיאור החדש של הקובץ",
-       "uploadnologin": "לא נכנסתם לחשבון",
-       "uploadnologintext": "×¢×\9c×\99×\9b×\9d $1 כדי להעלות קבצים.",
+       "uploadnologin": "לא נכנסת לחשבון",
+       "uploadnologintext": "× ×\93רשת $1 כדי להעלות קבצים.",
        "upload_directory_missing": "שרת האינטרנט אינו יכול ליצור את תיקיית ההעלאות ($1) החסרה.",
        "upload_directory_read_only": "שרת האינטרנט אינו יכול לכתוב בתיקיית ההעלאות ($1).",
        "uploaderror": "שגיאה בהעלאת הקובץ",
        "filename-tooshort": "שם הקובץ קצר מדי",
        "filetype-banned": "אסור להעלות קבצים מהסוג הזה.",
        "verification-error": "קובץ זה לא עבר את תהליך אימות הקבצים",
-       "hookaborted": "השינוי שניסית לבצע הופסק על ידי מבנה Hook של הרחבה",
+       "hookaborted": "השינוי שניסית לבצע הופסק על־ידי הרחבה.",
        "illegal-filename": "שם הקובץ אינו מותר להעלאה",
        "overwrite": "דריסת קובץ קיים אינה מותרת",
        "unknown-error": "אירעה שגיאה בלתי ידועה",
        "tmp-write-error": "שגיאה בכתיבה לקובץ הזמני",
        "large-file": "מומלץ שהקבצים לא יהיו גדולים יותר מ־$1 (גודל הקובץ שהעליתם הוא $2).",
        "largefileserver": "גודל הקובץ חורג ממגבלת השרת.",
-       "emptyfile": "נראה שהקובץ שהעליתם ריק. ייתכן שהסיבה לכך היא שגיאת הקלדה בשם הקובץ. אנא ודאו שזהו הקובץ שברצונכם להעלות.",
+       "emptyfile": "נראה שהקובץ שהעלית ריק.\nייתכן שהסיבה לכך היא שגיאת הקלדה בשם הקובץ.\nיש לוודא שזה הקובץ שברצונך להעלות.",
        "windows-nonascii-filename": "אתר ויקי זה אינו תומך בשמות קבצים עם תווים מיוחדים או תווים שאינם באנגלית.",
        "fileexists": "קובץ בשם הזה כבר קיים, אנא בדקו את <strong>[[:$1]]</strong> אם אינכם בטוחים שברצונכם להחליף אותו.\n[[$1|thumb]]",
        "filepageexists": "דף תיאור הקובץ עבור קובץ זה כבר נוצר ב<strong>[[:$1]]</strong>, אך לא קיים קובץ בשם זה.\nתיאור הקובץ שתכתבו לא יופיע בדף תיאור הקובץ.\nכדי לגרום לו להופיע שם, יהיה עליכם לערוך אותו ידנית. [[$1|thumb]]",
        "fileexists-extension": "קובץ עם שם דומה כבר קיים: [[$2|thumb]]\n* שם הקובץ המועלה: <strong>[[:$1]]</strong>\n* שם הקובץ הקיים: <strong>[[:$2]]</strong>\nאולי כדאי לתת לקובץ שם ספציפי יותר?",
-       "fileexists-thumbnail-yes": "×\94ק×\95×\91×¥ ×\94×\95×\90 ×\9bנר×\90×\94 ×ª×\9e×\95× ×\94 ×\9e×\95ק×\98נת (×\9e×\9e×\95×\96ערת). [[$1|thumb]]\n×\90× ×\90 ×\91×\93ק×\95 ×\90ת ×\94ק×\95×\91×¥ <strong>[[:$1]]</strong>.\n×\90×\9d ×\94ק×\95×\91×¥ ×©×\91×\93קת×\9d הוא אותה התמונה בגודל מקורי, אין זה הכרחי להעלות גם תמונה ממוזערת.",
-       "file-thumbnail-no": "ש×\9d ×\94ק×\95×\91×¥ ×\9eת×\97×\99×\9c ×¢×\9d <strong>$1</strong>. × ×¨×\90×\94 ×©×\96×\95×\94×\99 ×ª×\9e×\95× ×\94 ×\9e×\95ק×\98נת (×\9e×\9e×\95×\96ערת).\n×\90×\9d ×\94ת×\9e×\95× ×\94 ×\91×\92×\95×\93×\9c ×\9e×\9c×\90 ×\9eצ×\95×\99×\94 ×\91רש×\95ת×\9b×\9d, ×\90× ×\90 ×\94×¢×\9c×\95 ×\90×\95ת×\94 ×\95×\9c×\90 ×\90ת ×\94ת×\9e×\95× ×\94 ×\94×\9e×\9e×\95×\96ערת; ×\90×\97רת, ×\90× ×\90 ×©× ×\95 את שם הקובץ.",
+       "fileexists-thumbnail-yes": "נר×\90×\94 ×©×\94ק×\95×\91×¥ ×\94×\95×\90 ×ª×\9e×\95× ×\94 ×\9e×\95ק×\98נת (×\9e×\9e×\95×\96ערת).\n[[$1|thumb]]\n×\99ש ×\9c×\91×\93×\95ק ×\90ת ×\94ק×\95×\91×¥ <strong>[[:$1]]</strong>.\n×\90×\9d ×\94ק×\95×\91×¥ ×©×\91×\93קת הוא אותה התמונה בגודל מקורי, אין זה הכרחי להעלות גם תמונה ממוזערת.",
+       "file-thumbnail-no": "ש×\9d ×\94ק×\95×\91×¥ ×\9eת×\97×\99×\9c ×\91Ö¾<strong>$1</strong>.\nנר×\90×\94 ×©×\96×\95×\94×\99 ×ª×\9e×\95× ×\94 ×\9e×\95ק×\98נת (×\9e×\9e×\95×\96ערת).\n×\90×\9d ×\94ת×\9e×\95× ×\94 ×\91×\92×\95×\93×\9c ×\9e×\9c×\90 ×\9eצ×\95×\99×\94 ×\91רש×\95ת×\9a, ×\99ש ×\9c×\94×¢×\9c×\95ת ×\90×\95ת×\94 ×\95×\9c×\90 ×\90ת ×\94ת×\9e×\95× ×\94 ×\94×\9e×\9e×\95×\96ערת; ×\90×\97רת, ×\99ש ×\9cשנ×\95ת את שם הקובץ.",
        "fileexists-forbidden": "קובץ בשם זה כבר קיים, ואינכם יכולים להחליף אותו.\nאם אתם עדיין מעוניינים להעלות קובץ זה, אנא חזרו לדף הקודם והעלו את הקובץ תחת שם חדש.\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "קובץ בשם זה כבר קיים כקובץ משותף.\nאם אתם עדיין מעוניינים להעלות קובץ זה, אנא חזרו לדף הקודם והעלו את הקובץ תחת שם חדש.\n[[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "קובץ זה זהה {{PLURAL:$1|לקובץ הבא|לקבצים הבאים}}:",
-       "file-deleted-duplicate": "ק×\95×\91×¥ ×\96×\94×\94 ×\9cק×\95×\91×¥ ×\96×\94 ([[:$1]]) × ×\9e×\97ק ×\91×¢×\91ר.\n×\90× ×\90 ×\91×\93ק×\95 ×\90ת ×\94×\99ס×\98×\95ר×\99×\99ת ×\94×\9e×\97×\99ק×\94 ×©×\9c ×\94ק×\95×\91×¥ ×\9cפנ×\99 ×©×ª×¢×\9c×\95 ×\90×\95תו מחדש.",
-       "file-deleted-duplicate-notitle": "ק×\95×\91×¥ ×\96×\94×\94 ×\9cק×\95×\91×¥ ×\96×\94 × ×\9e×\97ק ×\91×¢×\91ר, ×\95×\94×\9b×\95תרת ×©×\9c×\95 ×\94×\95×¢×\9c×\9e×\94.\n×\90× ×\90 ×\91קש×\95 ×\9e×\9e×\99ש×\94×\95 ×©×\99×\9b×\95×\9c ×\9cר×\90×\95ת × ×ª×\95× ×\99×\9d ×¢×\9c ×§×\91צ×\99×\9d ×©×\94×\95×¢×\9c×\9e×\95 ×\9c×\91×\93×\95ק ×\90ת ×\94×\9eצ×\91 ×\9cפנ×\99 ×©×ª×¢×\9c×\95 ×\90×\95ת×\95 מחדש.",
+       "file-deleted-duplicate": "ק×\95×\91×¥ ×\96×\94×\94 ×\9cק×\95×\91×¥ ×\96×\94 ([[:$1]]) × ×\9e×\97ק ×\91×¢×\91ר.\n×\99ש ×\9c×\91×\93×\95ק ×\90ת ×\94×\99ס×\98×\95ר×\99×\99ת ×\94×\9e×\97×\99ק×\94 ×©×\9c ×\94ק×\95×\91×¥ ×\9cפנ×\99 ×\94×¢×\9c×\90תו מחדש.",
+       "file-deleted-duplicate-notitle": "ק×\95×\91×¥ ×\96×\94×\94 ×\9cק×\95×\91×¥ ×\96×\94 × ×\9e×\97ק ×\91×¢×\91ר, ×\95×\94×\9b×\95תרת ×©×\9c×\95 ×\94×\95×¢×\9c×\9e×\94.\n×\99ש ×\9c×\91קש ×\9e×\9eשת×\9eש ×©×\99×\9b×\95×\9c ×\9cר×\90×\95ת × ×ª×\95× ×\99×\9d ×¢×\9c ×§×\91צ×\99×\9d ×©×\94×\95×¢×\9c×\9e×\95 ×\9c×\91×\93×\95ק ×\90ת ×\94×\9eצ×\91 ×\9cפנ×\99 ×\94×¢×\9c×\90ת ×\94ק×\95×\91×¥ מחדש.",
        "uploadwarning": "אזהרת העלאת קבצים",
        "uploadwarning-text": "אנא שנו את תיאור הקובץ שלמטה ונסו שוב.",
        "savefile": "שמירת קובץ",
        "copyuploaddisabled": "העלאת קבצים מכתובת URL מבוטלת.",
        "uploaddisabledtext": "אפשרות העלאת הקבצים מבוטלת.",
        "php-uploaddisabledtext": "אפשרות העלאת הקבצים מבוטלת ברמת PHP. אנא בדקו את ההגדרה file_uploads.",
-       "uploadscripted": "הקובץ כולל קוד סקריפט או HTML שעשוי להתפרש או להתבצע בטעות על ידי הדפדפן.",
+       "uploadscripted": "הקובץ כולל קוד סקריפט או HTML שעשוי להתפרש או להתבצע בטעות על־ידי הדפדפן.",
        "uploadscriptednamespace": "קובץ ה‏‏֫־SVG הזה כולל מרחב שם בלתי חוקי: '$1'",
        "uploadinvalidxml": "לא ניתן לפרש את ה־XML בקובץ שהועלה.",
        "uploadvirus": "הקובץ מכיל וירוס!\nפרטים:\n<div dir=\"ltr\">$1</div>",
        "upload-source": "קובץ המקור",
        "sourcefilename": "שם הקובץ:",
        "sourceurl": "כתובת URL של המקור:",
-       "destfilename": "ש×\9e×\95ר קובץ בשם:",
+       "destfilename": "ש×\9e×\99רת ×\94קובץ בשם:",
        "upload-maxfilesize": "גודל הקובץ המרבי: $1",
        "upload-description": "תיאור הקובץ",
        "upload-options": "אפשרויות העלאה",
        "watchthisupload": "מעקב אחרי קובץ זה",
        "filewasdeleted": "קובץ בשם זה כבר הועלה בעבר, ולאחר מכן נמחק. אנא בדקו את הדף $1 לפני שתמשיכו להעלותו שנית.",
-       "filename-bad-prefix": "ש×\9d ×\94ק×\95×\91×¥ ×©×\90ת×\9d ×\9e×¢×\9c×\99×\9d ×\9eת×\97×\99×\9c ×¢×\9d '''\"$1\"''', ×©×\94×\95×\90 ×©×\9d ×©×\90×\99× ×\95 ×\9eת×\90ר ×\90ת ×\94ק×\95×\91×¥ ×\95×\91×\93ר×\9a ×\9b×\9c×\9c ×\9e×\95×\9bנס ×\90×\95×\98×\95×\9e×\98×\99ת ×¢×\9c ×\99×\93×\99 ×\9eצ×\9c×\9e×\95ת ×\93×\99×\92×\99×\98×\9c×\99×\95ת. ×\90× ×\90 ×\91×\97ר×\95 שם מתאים יותר לקובץ, שיתאר את תכניו.",
+       "filename-bad-prefix": "ש×\9d ×\94ק×\95×\91×¥ ×©×\90ת×\9d ×\9e×¢×\9c×\99×\9d ×\9eת×\97×\99×\9c ×\91Ö¾<strong>\"$1\"</strong>, ×©×\94×\95×\90 ×©×\9d ×©×\90×\99× ×\95 ×\9eת×\90ר ×\90ת ×\94ק×\95×\91×¥ ×\95×\91×\93ר×\9a ×\9b×\9c×\9c ×\9e×\95קצ×\94 ×\90×\95×\98×\95×\9e×\98×\99ת ×¢×\9cÖ¾×\99×\93×\99 ×\9eצ×\9c×\9e×\95ת ×\93×\99×\92×\99×\98×\9c×\99×\95ת.\n×\99ש ×\9c×\91×\97×\95ר שם מתאים יותר לקובץ, שיתאר את תכניו.",
        "filename-prefix-blacklist": " #<!-- נא להשאיר שורה זו בדיוק כפי שהיא --> <pre>\n# התחביר הוא כדלקמן:\n#   * כל דבר מתו \"#\" לסוף השורה הוא הערה\n#   * כל שורה לא ריקה היא קידומת לשמות קבצים טיפוסיים שמצלמות דיגיטליות נותנות אוטומטית\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # מספר טלפונים סלולריים\nIMG # כללי\nJD # Jenoptik\nMGP # Pentax\nPICT # שונות\n #</pre> <!-- נא להשאיר שורה זו בדיוק כפי שהיא -->",
        "upload-success-subj": "ההעלאה הושלמה בהצלחה",
        "upload-success-msg": "ההעלאה מהכתובת [$2] הושלמה בהצלחה. הקובץ שהעליתם זמין כאן: [[:{{ns:file}}:$1]]",
        "upload-failure-subj": "בעיה בהעלאה",
-       "upload-failure-msg": "הייתה בעיה עם הקובץ שהעליתם מהכתובת [$2]:\n\n$1",
+       "upload-failure-msg": "הייתה בעיה עם הקובץ שהעלית מהכתובת [$2]:\n\n$1",
        "upload-warning-subj": "אזהרה בהעלאה",
        "upload-warning-msg": "הייתה בעיה עם הקובץ שהעליתם מהכתובת [$2]. באפשרותכם לחזור ל[[Special:Upload/stash/$1|טופס ההעלאה]] כדי לתקן בעיה זו.",
        "upload-proto-error": "פרוטוקול שגוי",
        "sharedupload-desc-edit": "זהו קובץ מתוך $1 וניתן להשתמש בו גם במיזמים אחרים.\nניתן לערוך את התקציר שלו ב[$2 דף תיאור הקובץ] שם.",
        "sharedupload-desc-create": "זהו קובץ מתוך $1 וניתן להשתמש בו גם במיזמים אחרים.\nניתן לערוך את התקציר שלו ב[$2 דף תיאור הקובץ] שם.",
        "filepage-nofile": "לא קיים קובץ בשם זה.",
-       "filepage-nofile-link": "×\9c×\90 ×§×\99×\99×\9d ×§×\95×\91×¥ ×\91ש×\9d ×\96×\94, ×\90×\9a ×\91×\90פשר×\95ת×\9b×\9d [$1 להעלות אחד].",
+       "filepage-nofile-link": "×\9c×\90 ×§×\99×\99×\9d ×§×\95×\91×¥ ×\91ש×\9d ×\96×\94, ×\90×\9a ×\91×\90פשר×\95ת×\9a [$1 להעלות אחד].",
        "uploadnewversion-linktext": "העלאת גרסה חדשה של קובץ זה",
        "shared-repo-from": "מתוך $1",
        "shared-repo": "מקום איחסון משותף",
        "shared-repo-name-wikimediacommons": "ויקישיתוף",
        "filepage.css": "/* הסגנונות הנכתבים כאן יוכללו בדף תיאור הקובץ, כולל באתרי ויקי זרים */",
-       "upload-disallowed-here": "×\90×\99×\9f ×\91×\90פשר×\95ת×\9b×\9d לדרוס את הקובץ הזה.",
+       "upload-disallowed-here": "×\90×\99×\9f ×\91×\90פשר×\95ת×\9a לדרוס את הקובץ הזה.",
        "filerevert": "שחזור $1",
        "filerevert-legend": "שחזור קובץ",
        "filerevert-intro": "אתם עומדים לשחזר את הקובץ '''[[Media:$1|$1]]''' ל[$4 גרסה מ־$3, $2].",
        "filerevert-comment": "סיבה:",
        "filerevert-defaultcomment": "שוחזר לגרסה מ־$2, $1",
        "filerevert-submit": "שחזור",
-       "filerevert-success": "'''[[Media:$1|$1]]''' שוחזרה ל[$4 גרסה מ־$3, $2].",
+       "filerevert-success": "<strong>[[Media:$1|$1]]</strong> שוחזר ל[$4 גרסה מ־$3, $2].",
        "filerevert-badversion": "אין גרסה מקומית קודמת של הקובץ שהועלתה בתאריך המבוקש.",
        "filedelete": "מחיקת $1",
        "filedelete-legend": "מחיקת קובץ",
        "statistics": "סטטיסטיקות",
        "statistics-header-pages": "סטטיסטיקות דפים",
        "statistics-header-edits": "סטטיסטיקות עריכה",
-       "statistics-header-views": "סטטיסטיקות צפייה",
        "statistics-header-users": "סטטיסטיקות משתמשים",
        "statistics-header-hooks": "סטטיסטיקות אחרות",
        "statistics-articles": "דפי תוכן",
        "statistics-files": "קבצים שהועלו",
        "statistics-edits": "עריכות של דפים מאז התקנת {{SITENAME}}",
        "statistics-edits-average": "מספר העריכות הממוצע לדף",
-       "statistics-views-total": "מספר הצפיות הכולל",
-       "statistics-views-total-desc": "צפיות בדפים שאינם קיימים ובדפים מיוחדים אינן כלולות",
-       "statistics-views-peredit": "מספר הצפיות לעריכה",
        "statistics-users": "ה[[Special:ListUsers|משתמשים]] הרשומים",
        "statistics-users-active": "המשתמשים הפעילים",
        "statistics-users-active-desc": "משתמשים שביצעו פעולה כלשהי {{PLURAL:$1|ביום האחרון|ביומיים האחרונים|ב־$1 הימים האחרונים}}",
-       "statistics-mostpopular": "הדפים הנצפים ביותר",
        "pageswithprop": "דפים עם מאפיין דף",
        "pageswithprop-legend": "דפים עם מאפיין דף",
        "pageswithprop-text": "בדף זה מופיעה רשימת דפים שמשתמשים במאפיין דף מסוים.",
        "doubleredirects": "הפניות כפולות",
        "doubleredirectstext": "בדף הזה מופיעה רשימת דפי הפניה שמפנים לדפי הפניה אחרים.\nכל שורה מכילה קישור לשתי ההפניות הראשונות, וכן את היעד של ההפניה השנייה, שהיא לרוב היעד ה\"אמיתי\" של ההפניה, שההפניה הראשונה אמורה להצביע אליו.\nפריטים <del>מחוקים</del> כבר תוקנו.",
        "double-redirect-fixed-move": "הדף [[$1]] הועבר.\nהוא עודכן אוטומטית ועכשיו מפנה לדף [[$2]].",
-       "double-redirect-fixed-maintenance": "תיקון אוטומטי של הפניה כפולה מ[[$1]] ל[[$2]] במשימת תחזוקה.",
+       "double-redirect-fixed-maintenance": "תיקון אוטומטי של הפניה כפולה מהדף [[$1]] אל הדף [[$2]] במשימת תחזוקה.",
        "double-redirect-fixer": "מתקן הפניות",
        "brokenredirects": "הפניות לא תקינות",
        "brokenredirectstext": "ההפניות שלהלן מפנות לדפים שאינם קיימים:",
        "uncategorizedtemplates": "תבניות חסרות קטגוריה",
        "unusedcategories": "קטגוריות שאינן בשימוש",
        "unusedimages": "קבצים שאינם בשימוש",
-       "popularpages": "הדפים הנצפים ביותר",
        "wantedcategories": "קטגוריות מבוקשות",
        "wantedpages": "דפים מבוקשים",
        "wantedpages-badtitle": "כותרת בלתי תקינה ברשימת התוצאות: $1",
        "protectedpages-timestamp": "תאריך ושעה",
        "protectedpages-page": "דף",
        "protectedpages-expiry": "זמן פקיעה",
-       "protectedpages-performer": "הוגן על ידי",
+       "protectedpages-performer": "הוגן על־ידי",
        "protectedpages-params": "פרמטרים להגנה",
        "protectedpages-reason": "סיבה",
        "protectedpages-unknown-timestamp": "לא ידוע",
        "pager-older-n": "{{PLURAL:$1|הקודמת|$1 הקודמות}}",
        "suppress": "הסתרה",
        "querypage-disabled": "דף מיוחד זה מבוטל עקב בעיות ביצועים.",
+       "apihelp": "עזרה עבור ה־API",
+       "apihelp-no-such-module": "המודול \"$1\" לא נמצא.",
        "booksources": "משאבי ספרות חיצוניים",
        "booksources-search-legend": "חיפוש משאבי ספרות חיצוניים",
        "booksources-isbn": "מסת\"ב (ISBN):",
-       "booksources-go": "הצגה",
+       "booksources-search": "חיפוש",
        "booksources-text": "להלן רשימת קישורים לאתרים אחרים המוכרים ספרים חדשים ויד־שנייה, ושבהם עשוי להיות מידע נוסף לגבי ספרים שאתם מחפשים:",
        "booksources-invalid-isbn": "המסת\"ב שניתן כנראה אינו תקין; אנא בדקו אם ביצעתם טעויות בהעתקה מהמידע המקורי.",
        "specialloguserlabel": "בוצעו על־ידי המשתמש:",
        "speciallogtitlelabel": "יעד (כותרת או משתמש):",
        "log": "יומנים",
        "all-logs-page": "כל היומנים הציבוריים",
-       "alllogstext": "תצוגה משולבת של כל סוגי היומנים הזמינים ב{{grammar:תחילית|{{SITENAME}}}}.\nניתן לצמצם את התצוגה על ידי בחירת סוג היומן, שם המשתמש (תלוי רישיות) או הדף המושפע (גם כן תלוי רישיות).",
+       "alllogstext": "תצוגה משולבת של כל סוגי היומנים הזמינים ב{{grammar:תחילית|{{SITENAME}}}}.\nניתן לצמצם את התצוגה על־ידי בחירת סוג היומן, שם המשתמש (תלוי רישיות) או הדף המושפע (גם כן תלוי רישיות).",
        "logempty": "אין פריטים תואמים ביומן.",
        "log-title-wildcard": "חיפוש כותרות המתחילות באותיות אלה",
        "showhideselectedlogentries": "הצגת/הסתרת פעולות היומן שנבחרו",
        "allpagessubmit": "הצגה",
        "allpagesprefix": "הדפים ששמם מתחיל ב:",
        "allpagesbadtitle": "כותרת הדף שניתנה הייתה בלתי־תקינה או שהייתה בה קידומת של קישור לשפה אחרת או לוויקי אחר.\nייתכן שהיא מכילה תו אחד או יותר האסורים לשימוש בכותרות.",
-       "allpages-bad-ns": "×\90×\99×\9f ×\9eר×\97×\91 ×©×\9d ×\91ש×\9d \"$1\".",
+       "allpages-bad-ns": "×\9eר×\97×\91 ×\94ש×\9d \"$1\" ×\9c×\90 ×§×\99×\99×\9d ×\91{{grammar:ת×\97×\99×\9c×\99ת|{{SITENAME}}}}.",
        "allpages-hide-redirects": "הסתרת הפניות",
        "cachedspecial-viewing-cached-ttl": "זוהי גרסה שמורה בזיכרון המטמון של דף זה, שעשויה להיות בת $1.",
        "cachedspecial-viewing-cached-ts": "זוהי גרסה שמורה בזיכרון המטמון של דף זה, שעשויה שלא להיות מעודכנת.",
        "trackingcategories-nodesc": "התיאור אינו זמין.",
        "trackingcategories-disabled": "הקטגוריה מבוטלת",
        "mailnologin": "אין כתובת לשליחה",
-       "mailnologintext": "×¢×\9c×\99×\9b×\9d [[Special:UserLogin|×\9c×\94×\99×\9bנס ×\9c×\97ש×\91×\95×\9f]] ×\95×\9c×\94×\92×\93×\99ר ×\9cעצ×\9e×\9b×\9d ×\9bת×\95×\91ת ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×ª×§×\99× ×\94 ×\91[[Special:Preferences|×\94×¢×\93פ×\95ת ×\94×\9eשת×\9eש]] ×©×\9c×\9b×\9d ×\9b×\93×\99 ×\9cש×\9c×\95×\97 ×\93×\95×\90ר ×\9c×\9eשת×\9eש ×\90×\97ר.",
+       "mailnologintext": "×\99ש [[Special:UserLogin|×\9c×\94×\99×\9bנס ×\9c×\97ש×\91×\95×\9f]] ×\95×\9c×\94×\92×\93×\99ר ×\9bת×\95×\91ת ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×ª×§×\99× ×\94 ×\91[[Special:Preferences|×\94×¢×\93פ×\95ת ×\94×\9eשת×\9eש]] ×\9b×\93×\99 ×\9cש×\9c×\95×\97 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\9c×\9eשת×\9eש×\99×\9d ×\90×\97ר×\99×\9d.",
        "emailuser": "שליחת דואר אלקטרוני למשתמש זה",
        "emailuser-title-target": "שליחת דוא\"ל {{GENDER:$1|למשתמש זה|למשתמשת זו}}",
        "emailuser-title-notarget": "שליחת דוא\"ל למשתמש",
        "emailpage": "שליחת דואר למשתמש",
-       "emailpagetext": "ניתן להשתמש בטופס כדי לשלוח הודעת דואר אלקטרוני {{GENDER:$1|למשתמש זה|למשתמשת זו}}.\nכתובת הדואר האלקטרוני שכתבתם ב[[Special:Preferences|העדפות המשתמש שלכם]] תופיע ככתובת שההודעה נשלחה ממנה, כדי לאפשר תגובה ישירה.",
+       "emailpagetext": "ניתן להשתמש בטופס כדי לשלוח הודעת דואר אלקטרוני {{GENDER:$1|למשתמש זה|למשתמשת זו}}.\nכתובת הדואר האלקטרוני שכתבת ב[[Special:Preferences|העדפות המשתמש שלך]] תופיע ככתובת שההודעה נשלחה ממנה, כדי לאפשר תגובה ישירה.",
        "defemailsubject": "דוא\"ל מ{{grammar:תחילית|{{SITENAME}}}} מהמשתמש \"$1\"",
        "usermaildisabled": "שליחת דוא\"ל למשתמשים מבוטלת",
        "usermaildisabledtext": "אינכם רשאים לשלוח דואר אלקטרוני למשתמשים אחרים באתר זה",
        "noemailtext": "משתמש זה לא הזין כתובת דואר אלקטרוני תקינה.",
        "nowikiemailtext": "משתמש זה בחר שלא לקבל דואר אלקטרוני ממשתמשים אחרים.",
        "emailnotarget": "שם המשתמש של הנמען לא קיים או בלתי תקין.",
-       "emailtarget": "×\94ק×\9c×\99×\93×\95 את שם המשתמש של הנמען",
+       "emailtarget": "×\99ש ×\9c×\94×\96×\99×\9f את שם המשתמש של הנמען",
        "emailusername": "שם משתמש:",
        "emailusernamesubmit": "שליחה",
        "email-legend": "שליחת דואר אלקטרוני למשתמש אחר של {{SITENAME}}",
        "emailccsubject": "העתק של הודעתך למשתמש $1: $2",
        "emailsent": "הדואר נשלח",
        "emailsenttext": "הודעת הדואר האלקטרוני שלך נשלחה.",
-       "emailuserfooter": "דואר זה נשלח על ידי $1 למשתמש $2 באמצעות תכונת \"שליחת דואר אלקטרוני למשתמש זה\" ב{{grammar:תחילית|{{SITENAME}}}}.",
+       "emailuserfooter": "דואר זה נשלח על־ידי $1 ל{{GRAMMAR:תחילית|$2}} באמצעות פעולת \"שליחת דואר אלקטרוני למשתמש זה\" באתר {{SITENAME}}.",
        "usermessage-summary": "השארת הודעת מערכת.",
        "usermessage-editor": "שולח הודעות המערכת",
        "watchlist": "רשימת המעקב",
        "mywatchlist": "רשימת מעקב",
        "watchlistfor2": "עבור $1 $2",
        "nowatchlist": "אין דפים ברשימת המעקב.",
-       "watchlistanontext": "×\90× ×\90 ×\94×\99×\9bנס×\95 לחשבון כדי לצפות או לערוך פריטים ברשימת המעקב.",
+       "watchlistanontext": "× ×\93רשת ×\9b× ×\99ס×\94 לחשבון כדי לצפות או לערוך פריטים ברשימת המעקב.",
        "watchnologin": "לא נכנסת לחשבון",
        "addwatch": "הוספה לרשימת המעקב",
        "addedwatchtext": "הדף \"[[:$1]]\" נוסף ל[[Special:Watchlist|רשימת המעקב]].\nשינויים שייערכו בעתיד בדף זה ובדף השיחה שלו, יוצגו ברשימת המעקב.",
        "wlheader-enotif": "הודעות דוא\"ל מאופשרות.",
        "wlheader-showupdated": "דפים שהשתנו מאז ביקורך האחרון בהם מוצגים ב'''הדגשה'''.",
        "wlnote": "להלן {{PLURAL:$1|השינוי האחרון|<strong>$1</strong> השינויים האחרונים}} {{PLURAL:$2|בשעה האחרונה|בשעתיים האחרונות|ב־<strong>$2</strong> השעות האחרונות}}, עד $4, $3.",
-       "wlshowlast": "(הצגת $1 שעות אחרונות | $2 ימים אחרונים | $3)",
+       "wlshowlast": "הצגת $1 שעות אחרונות $2 ימים אחרונים",
        "watchlist-options": "אפשרויות ברשימת המעקב",
        "watching": "בהוספה לרשימת המעקב…",
        "unwatching": "בהסרה מרשימת המעקב…",
        "watcherrortext": "אירעה שגיאה בעת שינוי הגדרות רשימת המעקב של \"$1\".",
        "enotif_reset": "סימון כל הדפים כאילו נצפו",
-       "enotif_impersonal_salutation": "×\9eשת×\9eש ×©×\9c {{SITENAME}}",
-       "enotif_subject_deleted": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נמחק על ידי $2",
-       "enotif_subject_created": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נוצר על ידי $2",
-       "enotif_subject_moved": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} הועבר על ידי $2",
-       "enotif_subject_restored": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שוחזר על ידי $2",
-       "enotif_subject_changed": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שונה על ידי $2",
+       "enotif_impersonal_salutation": "×\9eשת×\9eש ×\91{{GRAMMAR:ת×\97×\99×\9c×\99ת|{{SITENAME}}}}",
+       "enotif_subject_deleted": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נמחק על־ידי $2",
+       "enotif_subject_created": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נוצר על־ידי $2",
+       "enotif_subject_moved": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} הועבר על־ידי $2",
+       "enotif_subject_restored": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שוחזר על־ידי $2",
+       "enotif_subject_changed": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שונה על־ידי $2",
        "enotif_body_intro_deleted": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נמחק ב־$PAGEEDITDATE על ידי $2, ראו $3.",
        "enotif_body_intro_created": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נוצר ב־$PAGEEDITDATE על ידי $2, ראו $3 לגרסה הנוכחית.",
        "enotif_body_intro_moved": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} הועבר ב־$PAGEEDITDATE על ידי $2, ראו $3 לגרסה הנוכחית.",
        "protect-expiring-local": "פוקעת $1",
        "protect-expiry-indefinite": "בלתי מוגבלת בזמן",
        "protect-cascade": "הגנה על כל הדפים המוכללים בדף זה (הגנה מדורגת)",
-       "protect-cantedit": "×\90×\99× ×\9b×\9d ×\99×\9b×\95×\9c×\99×\9d ×\9cשנ×\95ת ×\90ת ×¨×\9eת ×\94×\94×\92× ×\94 ×¢×\9c ×\93×£ ×\96×\94, ×\9b×\99×\95×\95×\9f ×©×\90×\99×\9f ×\9c×\9b×\9d הרשאה לערוך אותו.",
+       "protect-cantedit": "×\90×\99×\9f ×\91×\90פשר×\95ת×\9a ×\9cשנ×\95ת ×\90ת ×¨×\9eת ×\94×\94×\92× ×\94 ×¢×\9c ×\93×£ ×\96×\94 ×\9b×\99×\95×\95×\9f ×©×\90×\99×\9f ×\9c×\9a הרשאה לערוך אותו.",
        "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** דף בשימוש רב",
        "unblocked": "[[User:$1|$1]] {{GENDER:$1|שוחרר מחסימתו|שוחררה מחסימתה}}.",
        "unblocked-range": "$1 שוחרר מחסימתו.",
        "unblocked-id": "חסימה מספר $1 שוחררה.",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] שוחררה מחסימתה.",
        "blocklist": "משתמשים חסומים",
        "ipblocklist": "משתמשים חסומים",
        "ipblocklist-legend": "מציאת משתמש חסום",
        "ipb_expiry_temp": "חסימות הכוללות הסתרת שם משתמש חייבות להיות לזמן בלתי מוגבל.",
        "ipb_hide_invalid": "לא ניתן להעלים את החשבון הזה; {{PLURAL:$1|בוצעה ממנו יותר מעריכה אחת|בוצעו ממנו יותר מ‏‏֫־$1 עריכות}}.",
        "ipb_already_blocked": "המשתמש \"$1\" כבר נחסם.",
-       "ipb-needreblock": "$1 ×\9b×\91ר × ×\97ס×\9d. ×\94×\90×\9d ×\91רצ×\95× ×\9b×\9d לשנות את הגדרות החסימה?",
+       "ipb-needreblock": "$1 ×\9b×\91ר × ×\97ס×\9d. ×\94×\90×\9d ×\91רצ×\95× ×\9a לשנות את הגדרות החסימה?",
        "ipb-otherblocks-header": "{{PLURAL:$1|חסימה אחרת|חסימות אחרות}}",
        "unblock-hideuser": "לא ניתן לשחרר משתמש זה, כיוון ששם המשתמש שלו הוסתר.",
        "ipb_cant_unblock": "שגיאה: חסימה מספר $1 לא נמצאה. ייתכן שהיא כבר שוחררה.",
        "sorbsreason": "כתובת ה־IP שלך רשומה ככתובת פרוקסי פתוחה ב־DNSBL שאתר {{SITENAME}} משתמש בו.",
        "sorbs_create_account_reason": "כתובת ה־IP שלך רשומה ככתובת פרוקסי פתוחה ב־DNSBL שאתר {{SITENAME}} משתמש בו.\nאין באפשרותך ליצור חשבון.",
        "xffblockreason": "כתובת IP הנמצאת בכותרת X-Forwarded-For, בין אם שלכם או של שרת פרוקסי שאתם משתמשים בו, נחסמה. סיבת החסימה המקורית הייתה: $1",
-       "cant-see-hidden-user": "המשתמש שאתם מנסים לחסום כבר נחסם והוסתר. כיוון שאין לכם את ההרשאה לחסימת משתמש והסתרתו, אינכם רשאים לצפות בחסימת המשתמש או לערוך אותה.",
+       "cant-see-hidden-user": "המשתמש שאתם מנסים לחסום כבר נחסם והוסתר.\nכיוון שאין לכם הרשאה להסתרת משתמשים, אין באפשרותכם לצפות בחסימת המשתמש או לערוך אותה.",
        "ipbblocked": "אינכם יכולים לחסום או לשחרר את חסימתם של משתמשים אחרים, כיוון שאתם עצמכם חסומים.",
-       "ipbnounblockself": "×\90×\99× ×\9b×\9d ×¨×©×\90×\99×\9d ×\9cש×\97רר ×\90ת ×\97ס×\99×\9eת×\9b×\9d.",
+       "ipbnounblockself": "×\90×\99×\9f ×\91×\90פשר×\95ת×\9a ×\9c×\91×\98×\9c ×\90ת ×\94×\97ס×\99×\9e×\94 ×©×\9c ×¢×¦×\9e×\9a.",
        "lockdb": "נעילת בסיס נתונים",
        "unlockdb": "שחרור בסיס נתונים",
        "lockdbtext": "נעילת בסיס הנתונים תמנע ממשתמשים את האפשרות לערוך דפים, לשנות את העדפותיהם, לערוך את רשימות המעקב שלהם, ופעולות אחרות הדורשות ביצוע שינויים בבסיס הנתונים.\n\nאנא אשרו שזה מה שאתם מתכוונים לעשות, ושתשחררו את בסיס הנתונים מנעילה כאשר פעולת התחזוקה תסתיים.",
        "unlockconfirm": "כן, ברצוני לשחרר את בסיס הנתונים מנעילה.",
        "lockbtn": "נעילת בסיס הנתונים",
        "unlockbtn": "שחרור בסיס הנתונים מנעילה",
-       "locknoconfirm": "לא סימנתם את תיבת האישור.",
+       "locknoconfirm": "לא סימנת את תיבת האישור.",
        "lockdbsuccesssub": "נעילת בסיס הנתונים הושלמה בהצלחה",
        "unlockdbsuccesssub": "שוחררה הנעילה מבסיס הנתונים",
-       "lockdbsuccesstext": "בסיס הנתונים ננעל.\n\nזכרו [[Special:UnlockDB|לשחרר את הנעילה]] לאחר שפעולת התחזוקה הסתיימה.",
+       "lockdbsuccesstext": "בסיס הנתונים ננעל.<br />\nיש לזכור [[Special:UnlockDB|לשחרר את הנעילה]] לאחר שפעולת התחזוקה תסתיים.",
        "unlockdbsuccesstext": "שוחררה הנעילה של בסיס הנתונים",
        "lockfilenotwritable": "קובץ נעילת בסיס הנתונים אינו ניתן לכתיבה. כדי שאפשר יהיה לנעול את בסיס הנתונים או לבטל את נעילתו, שרת האינטרנט צריך לקבל הרשאות לכתוב אליו.",
        "databasenotlocked": "בסיס הנתונים אינו נעול.",
        "movearticle": "העברת דף:",
        "moveuserpage-warning": "'''אזהרה:''' אתם עומדים להעביר דף משתמש. שימו לב שרק הדף יועבר וששם המשתמש '''לא''' ישתנה.",
        "movecategorypage-warning": "<strong>אזהרה:</strong> אתם עומדים להעביר דף קטגוריה. שימו לב שרק הדף יועבר ושכל הדפים בקטגוריה הישנה <strong>לא</strong> יסווגו לקטגוריה החדשה.",
-       "movenologintext": "עליכם [[Special:UserLogin|להיכנס לחשבון]] כדי להעביר דפים.",
-       "movenotallowed": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d להעביר דפים.",
-       "movenotallowedfile": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d להעביר קבצים.",
-       "cant-move-user-page": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d להעביר דפי משתמש (למעט דפי משנה).",
-       "cant-move-to-user-page": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d להעביר דף לדף משתמש (למעט לדף משנה של דף משתמש).",
-       "cant-move-category-page": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d להעביר דפי קטגוריה.",
-       "cant-move-to-category-page": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d להעביר דף לדף קטגוריה.",
+       "movenologintext": "עליכם להיות רשומים ו[[Special:UserLogin|להיכנס לחשבון]] כדי להעביר דפים.",
+       "movenotallowed": "×\90×\99×\9f ×\9c×\9a ×\94רש×\90×\94 להעביר דפים.",
+       "movenotallowedfile": "×\90×\99×\9f ×\9c×\9a ×\94רש×\90×\94 להעביר קבצים.",
+       "cant-move-user-page": "×\90×\99×\9f ×\9c×\9a ×\94רש×\90×\94 להעביר דפי משתמש (למעט דפי משנה).",
+       "cant-move-to-user-page": "×\90×\99×\9f ×\9c×\9a ×\94רש×\90×\94 להעביר דף לדף משתמש (למעט לדף משנה של דף משתמש).",
+       "cant-move-category-page": "×\90×\99×\9f ×\9c×\9a ×\94רש×\90×\94 להעביר דפי קטגוריה.",
+       "cant-move-to-category-page": "×\90×\99×\9f ×\9c×\9a ×\94רש×\90×\94 להעביר דף לדף קטגוריה.",
        "newtitle": "לשם החדש:",
        "move-watch": "מעקב אחר דף המקור ואחר דף היעד",
        "movepagebtn": "העברה",
        "movereason": "סיבה:",
        "revertmove": "החזרה",
        "delete_and_move": "מחיקה והעברה",
-       "delete_and_move_text": "== בקשת מחיקה ==\nדף היעד, [[:$1]], כבר קיים. האם ברצונכם למחוק אותו כדי לאפשר את ההעברה?",
+       "delete_and_move_text": "== בקשת מחיקה ==\nדף היעד, \"[[:$1]]\", כבר קיים.\nהאם ברצונך למחוק אותו כדי לאפשר את ההעברה?",
        "delete_and_move_confirm": "אישור מחיקת הדף",
-       "delete_and_move_reason": "מחיקה כדי לאפשר העברה מ[[$1]]",
+       "delete_and_move_reason": "מחיקה כדי לאפשר העברה מהשם \"[[$1]]\"",
        "selfmove": "כותרות המקור והיעד זהות; לא ניתן להעביר דף לעצמו.",
        "immobile-source-namespace": "לא ניתן להעביר דפים במרחב השם \"$1\"",
        "immobile-target-namespace": "לא ניתן להעביר דפים למרחב השם \"$1\"",
        "protectedpagemovewarning": "'''אזהרה:''' דף זה מוגן כך שרק מפעילי מערכת יכולים להעביר אותו.\nפעולת היומן האחרונה מוצגת להלן:",
        "semiprotectedpagemovewarning": "'''הערה:''' דף זה מוגן כך שרק משתמשים רשומים יכולים להעביר אותו.\nפעולת היומן האחרונה מוצגת להלן:",
        "move-over-sharedrepo": "== הקובץ קיים ==\n[[:$1]] כבר קיים כקובץ משותף. העברת הקובץ לכותרת זו תדרוס את הקובץ המשותף.",
-       "file-exists-sharedrepo": "ק×\95×\91×¥ ×\91ש×\9d ×©× ×\91×\97ר ×\9b×\91ר ×§×\99×\99×\9d ×\9bק×\95×\91×¥ ×\9eש×\95תף.\n×\90× ×\90 ×\91×\97ר×\95 שם אחר.",
+       "file-exists-sharedrepo": "ק×\95×\91×¥ ×\91ש×\9d ×©× ×\91×\97ר ×\9b×\91ר ×§×\99×\99×\9d ×\9bק×\95×\91×¥ ×\9eש×\95תף.\n×\99ש ×\9c×\91×\97×\95ר שם אחר.",
        "export": "ייצוא דפים",
        "exporttext": "באפשרותכם לייצא את התוכן ואת היסטוריית העריכה של דף אחד או של מספר דפים, בתבנית של קובץ XML.\nניתן לייבא את הקובץ למיזם ויקי אחר המשתמש בתוכנת מדיה־ויקי באמצעות [[Special:Import|דף הייבוא]].\n\nכדי לייצא דפים, הקישו את שמותיהם בתיבת הטקסט שלהלן, כל שם בשורה נפרדת, ובחרו האם לייצא גם את הגרסה הנוכחית וגם את היסטוריית השינויים של הדפים, או רק את הגרסה הנוכחית עם מידע על העריכה האחרונה.\n\nבנוסף, ניתן להשתמש בקישור, כגון [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] לדף [[{{MediaWiki:Mainpage}}]] ללא היסטוריית השינויים שלו.",
        "exportall": "ייצוא כל הדפים",
        "import-invalid-interwiki": "לא ניתן לייבא מאתר הוויקי שצוין.",
        "import-error-edit": "לא ניתן לייבא את הדף \"$1\" כיוון שאין לך הרשאה לערוך אותו.",
        "import-error-create": "לא ניתן לייבא את הדף \"$1\" כיוון שאין לך הרשאה ליצור אותו.",
-       "import-error-interwiki": "×\9c×\90 × ×\99ת×\9f ×\9c×\99×\99×\91×\90 ×\90ת ×\94×\93×£ \"$1\" ×\9b×\99×\95×\95×\9f ×©×©×\9e×\95 ×©×\9e×\95ר ×\9cק×\99ש×\95ר ×\97×\99צ×\95× ×\99 (×\91×\99×\9fÖ¾ויקי).",
+       "import-error-interwiki": "×\9c×\90 × ×\99ת×\9f ×\9c×\99×\99×\91×\90 ×\90ת ×\94×\93×£ \"$1\" ×\9b×\99×\95×\95×\9f ×©×©×\9e×\95 ×©×\9e×\95ר ×\9cק×\99ש×\95ר ×\97×\99צ×\95× ×\99 (×\91×\99× ×\95ויקי).",
        "import-error-special": "לא ניתן לייבא את הדף \"$1\" כיוון שהוא שייך למרחב שם מיוחד שלא יכול להכיל דפים.",
        "import-error-invalid": "לא ניתן לייבא את הדף \"$1\" כיוון ששמו אינו תקין.",
        "import-error-unserialize": "לא ניתן היה לפענח את הגרסה $2 של הדף \"$1\". הגרסה מסומנת כאילו היא משתמשת במודל התוכן $3, אך קודדה כ{{GRAMMAR:תחילית|$4}}.",
        "tooltip-pt-mycontris": "רשימת התרומות שלך",
        "tooltip-pt-login": "מומלץ להירשם, אך אין חובה לעשות כן",
        "tooltip-pt-logout": "יציאה מהחשבון",
+       "tooltip-pt-createaccount": "מומלץ ליצור חשבון ולהיכנס אליו; עם זאת, זו אינה חובה",
        "tooltip-ca-talk": "שיחה על דף זה",
        "tooltip-ca-edit": "באפשרותכם לערוך דף זה. אנא השתמשו בלחצן \"תצוגה מקדימה\" לפני השמירה",
        "tooltip-ca-addsection": "הוספת פסקה חדשה",
        "tooltip-n-randompage": "צפייה בדף תוכן אקראי",
        "tooltip-n-help": "עזרה בשימוש באתר",
        "tooltip-t-whatlinkshere": "רשימת כל הדפים המקושרים לכאן",
-       "tooltip-t-recentchangeslinked": "×\94ש×\99× ×\95×\99×\99×\9d ×\94×\90×\97ר×\95× ×\99×\9d ×©×\91×\95צע×\95 ×\91×\93פ×\99×\9d ×\94×\9eק×\95שר×\99×\9d ×\9c×\9b×\90×\9f",
+       "tooltip-t-recentchangeslinked": "×\94ש×\99× ×\95×\99×\99×\9d ×\94×\90×\97ר×\95× ×\99×\9d ×©×\91×\95צע×\95 ×\91×\93פ×\99×\9d ×\94×\9eק×\95שר×\99×\9d ×\9e×\93×£ ×\96×\94",
        "tooltip-feed-rss": "הזנת RSS עבור דף זה",
        "tooltip-feed-atom": "הזנת Atom עבור דף זה",
        "tooltip-t-contributions": "תרומותיו של משתמש זה",
        "tooltip-t-emailuser": "שליחת דואר אלקטרוני למשתמש זה",
+       "tooltip-t-info": "מידע נוסף על דף זה",
        "tooltip-t-upload": "העלאת קבצים",
        "tooltip-t-specialpages": "רשימת כל הדפים המיוחדים",
        "tooltip-t-print": "גרסה להדפסה של דף זה",
        "anonymous": "{{PLURAL:$1|משתמש אנונימי|משתמשים אנונימיים}} של {{SITENAME}}",
        "siteuser": "משתמש {{SITENAME}} $1",
        "anonuser": "משתמש אנונימי של {{SITENAME}} $1",
-       "lastmodifiedatby": "דף זה שונה לאחרונה בתאריך $2, $1 על ידי $3.",
+       "lastmodifiedatby": "דף זה שונה לאחרונה ב־$2, $1 על־ידי $3.",
        "othercontribs": "מבוסס על העבודה של $1.",
        "others": "אחרים",
        "siteusers": "{{PLURAL:$2|משתמש|משתמשי}} {{SITENAME}} $1",
        "pageinfo-robot-policy": "איסוף על־ידי רובוטים של מנועי חיפוש",
        "pageinfo-robot-index": "מותר",
        "pageinfo-robot-noindex": "אסור",
-       "pageinfo-views": "מספר הצפיות",
        "pageinfo-watchers": "מספר העוקבים אחר הדף",
        "pageinfo-few-watchers": "פחות מ{{PLURAL:$1|עוקב אחד|־$1 עוקבים}}",
        "pageinfo-redirects-name": "מספר ההפניות לדף זה",
        "rcpatroldisabled": "אפשרות סימון השינויים כבדוקים מבוטלת",
        "rcpatroldisabledtext": "תכונת סימון שינויים כבדוקים בדף השינויים האחרונים בוטלה.",
        "markedaspatrollederror": "לא ניתן לסמן כבדוק",
-       "markedaspatrollederrortext": "×¢×\9c×\99×\9b×\9d ×\9cצ×\99×\99×\9f ×\92רס×\94 ×©×ª×¦×\99×\99× ×\95 כבדוקה.",
-       "markedaspatrollederror-noautopatrol": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d ×\9cס×\9e×\9f ×\90ת ×\94ש×\99× ×\95×\99×\99×\9d ×©×\9c ×¢×¦×\9e×\9b×\9d כבדוקים.",
+       "markedaspatrollederrortext": "×\99ש ×\9cצ×\99×\99×\9f ×\92רס×\94 ×©×\91רצ×\95× ×\9a ×\9cס×\9e×\9f כבדוקה.",
+       "markedaspatrollederror-noautopatrol": "×\90×\99× ×\9a ×\9e×\95רש×\94 ×\9cס×\9e×\9f ×©×\99× ×\95×\99×\99×\9d ×©×\9c ×¢×¦×\9e×\9a כבדוקים.",
        "markedaspatrollednotify": "שינוי זה ל\"$1\" סומן כבדוק.",
        "markedaspatrollederrornotify": "סימון השינוי כבדוק נכשל.",
        "patrol-log-page": "יומן שינויים בדוקים",
        "filedelete-archive-read-only": "השרת אינו יכול לכתוב לתיקיית הארכיון \"$1\".",
        "previousdiff": "→ מעבר להשוואת הגרסאות הקודמת",
        "nextdiff": "מעבר להשוואת הגרסאות הבאה ←",
-       "mediawarning": "'''אזהרה:''' סוג קובץ זה עלול להכיל קוד זדוני.\nהרצת הקוד עלולה לסכן את המערכת שלכם.",
+       "mediawarning": "<strong>אזהרה:</strong> סוג קובץ זה עלול להכיל קוד זדוני.\nהרצת הקוד עלולה לסכן את המחשב שלך.",
        "imagemaxsize": "גודל תמונה מרבי:<br />(לדפי תיאור קובץ)",
        "thumbsize": "הקטנה לגודל של:",
        "widthheightpage": "<span dir=\"ltr\">$1 × $2</span>, {{PLURAL:$3|דף אחד|$3 דפים}}",
        "sunday-at": "ביום ראשון בשעה $1",
        "yesterday-at": "אתמול בשעה $1",
        "bad_image_list": "דרך הכתיבה בהודעה היא כמתואר להלן:\n\nרק פריטי רשימה (שורות המתחילות עם *) נחשבים.\nהקישור הראשון בשורה חייב להיות קישור לקובץ בעייתי.\nכל הקישורים הבאים באותה השורה נחשבים לחריגים, כלומר לדפים שבהם ניתן להציג את הקובץ.",
-       "metadata": "×\9e×\99×\93×¢ × ×\95סף ×¢×\9c ×\94ק×\95×\91×¥",
+       "metadata": "×\9e×\98×\90־נת×\95× ×\99×\9d",
        "metadata-help": "קובץ זה מכיל מידע נוסף, שכנראה הגיע ממצלמה דיגיטלית או מסורק שבהם הקובץ נוצר או עבר דיגיטציה.\nאם הקובץ שונה ממצבו הראשוני, כמה מהנתונים להלן עלולים שלא לשקף באופן מלא את הקובץ הנוכחי.",
        "metadata-expand": "הצגת פרטים מורחבים",
        "metadata-collapse": "הסתרת פרטים מורחבים",
        "exif-originalimageheight": "גובה התמונה לפני קיטוע",
        "exif-originalimagewidth": "רוחב התמונה לפני קיטוע",
        "exif-compression-1": "לא דחוס",
-       "exif-compression-2": "ק×\99×\93×\95×\93 ×\94×\95פ×\9e×\9f ×\9e×\95×\90ת×\9d ×\97×\93-מימדי לאורך ריצה CCITT קבוצה 3",
+       "exif-compression-2": "ק×\99×\93×\95×\93 ×\94×\95פ×\9e×\9f ×\9e×\95ת×\90×\9d ×\97×\93Ö¾מימדי לאורך ריצה CCITT קבוצה 3",
        "exif-compression-3": "קידוד פקס CCITT קבוצה 3",
        "exif-compression-4": "קידוד פקס CCITT קבוצה 4",
        "exif-compression-6": "JPEG (ישן)",
        "exif-lightsource-2": "פלואורסצנטי",
        "exif-lightsource-3": "טונגסטן (אור מתלהט)",
        "exif-lightsource-4": "מַבזק",
-       "exif-lightsource-9": "מזג אוויר טוב",
-       "exif-lightsource-10": "מזג אוויר מעונן",
+       "exif-lightsource-9": "מזג־אוויר נאה",
+       "exif-lightsource-10": "מזג־אוויר מעונן",
        "exif-lightsource-11": "צל",
        "exif-lightsource-12": "אור יום פלואורסצנטי (D 5700 – 7100K)",
        "exif-lightsource-13": "אור יום לבן פלואורסצנטי (N 4600 – 5400K)",
        "exif-iimcategory-soi": "סוגיות חברתיות",
        "exif-iimcategory-spo": "ספורט",
        "exif-iimcategory-war": "מלחמה, סכסוך והפרת סדר",
-       "exif-iimcategory-wea": "מזג אוויר",
+       "exif-iimcategory-wea": "מזג־אוויר",
        "exif-urgency-normal": "רגילה ($1)",
        "exif-urgency-low": "נמוכה ($1)",
        "exif-urgency-high": "גבוהה ($1)",
        "exif-urgency-other": "מותאמת אישית ($1)",
-       "watchlistall2": "הכול",
        "namespacesall": "הכול",
        "monthsall": "הכול",
        "confirmemail": "אימות כתובת דוא\"ל",
        "confirmemail_oncreate": "קוד אימות דוא\"ל נשלח לכתובת הדוא\"ל שלכם. הקוד הזה אינו נדרש לכניסה, אך תצטרכו לספקו כדי להשתמש בכל תכונה מבוססת דוא\"ל באתר זה.",
        "confirmemail_sendfailed": "{{SITENAME}} לא הצליח לשלוח לכם הודעת דוא\"ל עם קוד האימות.\nאנא בדקו שאין תווים שגויים בכתובת הדוא\"ל.\n\nתוכנת שליחת הדוא\"ל החזירה את ההודעה הבאה: $1",
        "confirmemail_invalid": "קוד האימות שגוי. ייתכן שפג תוקפו.",
-       "confirmemail_needlogin": "×¢×\9c×\99×\9b×\9d $1 ×\9b×\93×\99 ×\9c×\90×\9eת ×\90ת ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×©×\9c×\9b×\9d.",
+       "confirmemail_needlogin": "× ×\93רשת $1 ×\9b×\93×\99 ×\9c×\90×\9eת ×\90ת ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×©×\9c×\9a.",
        "confirmemail_success": "כתובת הדוא\"ל שלך אושרה.\nכעת באפשרותך [[Special:UserLogin|להיכנס לחשבון שלך]] וליהנות מהאתר.",
        "confirmemail_loggedin": "כתובת הדוא\"ל שלך אושרה כעת.",
        "confirmemail_subject": "קוד אימות דוא\"ל מ{{grammar:תחילית|{{SITENAME}}}}",
        "scarytranscludefailed": "[אחזור התבנית נכשל עבור $1]",
        "scarytranscludefailed-httpstatus": "[אחזור התבנית נכשל עבור $1&rlm;: HTTP $2]",
        "scarytranscludetoolong": "[כתובת ה־URL ארוכה מדי]",
-       "deletedwhileediting": "'''אזהרה:''' דף זה נמחק לאחר שהתחלתם לערוך!",
-       "confirmrecreate": "הדף נמחק על ידי המשתמש [[User:$1|$1]] ([[User talk:$1|שיחה]]) לאחר שהתחלתם לערוך אותו, מסיבה זו:\n:'''$2'''\nאנא אשרו שאתם אכן רוצים ליצור מחדש את הדף.",
-       "confirmrecreate-noreason": "הדף נמחק על ידי המשתמש [[User:$1|$1]] ([[User talk:$1|שיחה]]) לאחר שהתחלתם לערוך אותו.\nאנא אשרו שאתם אכן רוצים ליצור מחדש את הדף.",
+       "deletedwhileediting": "<strong>אזהרה:</strong> דף זה נמחק לאחר שהתחלת לערוך!",
+       "confirmrecreate": "ה{{GENDER:$1|משתמש|משתמשת}} [[User:$1|$1]] ([[User talk:$1|שיחה]]) {{GENDER:$1|מחק|מחקה}} את הדף הזה לאחר שהתחלת לערוך אותו, מהסיבה הבאה:\n: <em>$2</em>\nיש לאשר שאכן ברצונך ליצור מחדש את הדף.",
+       "confirmrecreate-noreason": "ה{{GENDER:$1|משתמש|משתמשת}} [[User:$1|$1]] ([[User talk:$1|שיחה]]) {{GENDER:$1|מחק|מחקה}} את הדף הזה לאחר שהתחלת לערוך אותו. יש לאשר שאכן ברצונך ליצור מחדש את הדף.",
        "recreate": "יצירה מחדש",
        "confirm_purge_button": "אישור",
        "confirm-purge-top": "לנקות את המטמון של דף זה?",
        "lag-warn-high": "בגלל עיכוב בעדכון בסיס הנתונים, שינויים שבוצעו לפני פחות מ{{PLURAL:$1|שנייה אחת|־$1 שניות}} אינם מוצגים ברשימה זו.",
        "watchlistedit-normal-title": "עריכת רשימת המעקב",
        "watchlistedit-normal-legend": "הסרת דפים מרשימת המעקב",
-       "watchlistedit-normal-explain": "×\9b×\9c ×\94×\93פ×\99×\9d ×\91רש×\99×\9eת ×\94×\9eעק×\91 ×\9e×\95צ×\92×\99×\9d ×\9c×\94×\9c×\9f.\n×\9b×\93×\99 ×\9c×\94ס×\99ר ×\93×£, ×\99ש ×\9cס×\9e×\9f ×\90ת ×\94ת×\99×\91×\94 ×\9c×\99×\93×\95, ×\95×\9c×\9c×\97×\95×¥ ×¢×\9c \"{{int:Watchlistedit-normal-submit}}\".\n×\91×\90פשר×\95ת×\9b×\9d גם [[Special:EditWatchlist/raw|לערוך את הרשימה הגולמית]].",
+       "watchlistedit-normal-explain": "×\9b×\9c ×\94×\93פ×\99×\9d ×\91רש×\99×\9eת ×\94×\9eעק×\91 ×\9e×\95צ×\92×\99×\9d ×\9c×\94×\9c×\9f.\n×\9b×\93×\99 ×\9c×\94ס×\99ר ×\93×£, ×\99ש ×\9cס×\9e×\9f ×\90ת ×\94ת×\99×\91×\94 ×\9c×\99×\93×\95, ×\95×\9c×\9c×\97×\95×¥ ×¢×\9c \"{{int:Watchlistedit-normal-submit}}\".\n×\91×\90פשר×\95ת×\9a גם [[Special:EditWatchlist/raw|לערוך את הרשימה הגולמית]].",
        "watchlistedit-normal-submit": "הסרת הדפים",
        "watchlistedit-normal-done": "{{PLURAL:$1|כותרת אחת הוסרה|$1 כותרות הוסרו}} מרשימת המעקב:",
        "watchlistedit-raw-title": "עריכת הרשימה הגולמית",
        "watchlistedit-raw-added": "{{PLURAL:$1|כותרת אחת נוספה|$1 כותרות נוספו}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|כותרת אחת הוסרה|$1 כותרות הוסרו}}:",
        "watchlistedit-clear-title": "רשימת המעקב נמחקה",
-       "watchlistedit-clear-legend": "×\9e×\97×\99קת רשימת המעקב",
+       "watchlistedit-clear-legend": "× ×\99ק×\95×\99 רשימת המעקב",
        "watchlistedit-clear-explain": "כל הכותרות של הדפים שיוסרו מרשימת המעקב",
        "watchlistedit-clear-titles": "כותרות:",
-       "watchlistedit-clear-submit": "×\9e×\97×\99קת רשימת המעקב (לצמיתות!)",
-       "watchlistedit-clear-done": "רש×\99×\9eת ×\94×\9eעק×\91 ×©×\9c×\9a × ×\9e×\97קה.",
+       "watchlistedit-clear-submit": "× ×\99ק×\95×\99 רשימת המעקב (לצמיתות!)",
+       "watchlistedit-clear-done": "רש×\99×\9eת ×\94×\9eעק×\91 ×©×\9c×\9a × ×\95קתה.",
        "watchlistedit-clear-removed": "{{PLURAL:$1|כותרת אחת הוסרה|$1 כותרות הוסרו}}:",
        "watchlistedit-too-many": "יש יותר מדי דפים ולא ניתן להציגם כאן.",
-       "watchlisttools-clear": "×\9e×\97×\99קת רשימת המעקב",
+       "watchlisttools-clear": "× ×\99ק×\95×\99 רשימת המעקב",
        "watchlisttools-view": "הצגת השינויים הרלוונטיים",
        "watchlisttools-edit": "הצגה ועריכה של רשימת המעקב",
        "watchlisttools-raw": "עריכת הרשימה הגולמית",
        "unknown_extension_tag": "תגית בלתי ידועה: \"$1\"",
        "duplicate-defaultsort": "'''אזהרה:''' המיון הרגיל \"$2\" דורס את המיון הרגיל המוקדם ממנו \"$1\".",
        "duplicate-displaytitle": "<strong>אזהרה:</strong> כותרת התצוגה \"$2\" דורסת את כותרת התצוגה הקודמת \"$1\".",
+       "invalid-indicator-name": "<strong>שגיאה:</strong> התכונה <code>name</code> של מצייני מצב הדף אינה יכולה להיות ריקה.",
        "version": "גרסת התוכנה",
        "version-extensions": "הרחבות מותקנות",
        "version-skins": "עיצובים מותקנים",
        "dberr-again": "נסו להמתין מספר שניות ולהעלות מחדש את הדף.",
        "dberr-info": "(לא ניתן ליצור קשר עם שרת הנתונים: $1)",
        "dberr-info-hidden": "(לא ניתן ליצור קשר עם שרת הנתונים)",
-       "dberr-usegoogle": "×\91×\90פשר×\95ת×\9b×\9d ×\9cנס×\95ת ×\9c×\97פש ×\93ר×\9a גוגל בינתיים.",
+       "dberr-usegoogle": "×\91×\90פשר×\95ת×\9a ×\9cנס×\95ת ×\9c×\97פש ×\91×\90×\9eצע×\95ת גוגל בינתיים.",
        "dberr-outofdate": "שימו לב שהתוכן שלנו כפי שנשמר במאגר שם עשוי שלא להיות מעודכן.",
        "dberr-cachederror": "זהו עותק שמור של המידע, והוא עשוי שלא להיות מעודכן.",
        "htmlform-invalid-input": "יש בעיות עם חלק מהקלט שהכנסת",
        "revdelete-uname-unhid": "הסתרת שם המשתמש בוטלה",
        "revdelete-restricted": "נוספו הגבלות למפעילי מערכת",
        "revdelete-unrestricted": "הוסרו הגבלות ממפעילי מערכת",
+       "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-move-move_redir": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה",
        "logentry-newusers-create2": "חשבון המשתמש $3 נוצר על־ידי $1",
        "logentry-newusers-byemail": "חשבון המשתמש $3 נוצר על־ידי $1 והסיסמה נשלחה בדוא\"ל",
        "logentry-newusers-autocreate": "חשבון המשתמש $1 {{GENDER:$2|נוצר}} אוטומטית",
-       "logentry-rights-rights": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3 מ$4 ל$5&rlm;",
+       "logentry-rights-rights": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3 מ{{GRAMMAR:תחילית|$4}} ל{{GRAMMAR:תחילית|$5}}&rlm;",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3&rlm;",
-       "logentry-rights-autopromote": "$1 קודם אוטומטית מ$4 ל$5",
+       "logentry-rights-autopromote": "$1 קודם אוטומטית מ{{GRAMMAR:תחילית|$4}} ל{{GRAMMAR:תחילית|$5}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|העלה|העלתה}} את $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|העלה|העלתה}} גרסה חדשה של $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|העלה|העלתה}} את $3",
        "rightsnone": "(כלום)",
+       "revdelete-summary": "תקציר העריכה",
        "feedback-bugornote": "אם אתם מוכנים לתאר בעיה טכנית בפרטים, אנא [$1 דווחו באג].\nאחרת, תוכלו להשתמש בטופס הפשוט שלהלן. הערתכם תתווסף לדף \"[$3 $2]\", יחד עם שם המשתמש שלכם.",
        "feedback-subject": "נושא:",
        "feedback-message": "הודעה:",
        "feedback-error1": "שגיאה: תוצאה לא מזוהה מה־API",
        "feedback-error2": "שגיאה: העריכה נכשלה",
        "feedback-error3": "שגיאה: אין תשובה מה־API",
-       "feedback-thanks": "ת×\95×\93×\94! ×\94×\9eש×\95×\91 ×©×\9c×\9b×\9d פורסם בדף \"[$2 $1]\".",
+       "feedback-thanks": "ת×\95×\93×\94! ×\94×\9eש×\95×\91 ×©×\9c×\9a פורסם בדף \"[$2 $1]\".",
        "feedback-close": "סיום",
        "feedback-bugcheck": "מצוין! נא לבדוק שזה לא אחד מה[$1 באגים הידועים].",
        "feedback-bugnew": "בדקתי. נא לדווח כבאג חדש",
        "searchsuggest-search": "חיפוש",
        "searchsuggest-containing": "כולל...",
-       "api-error-badaccess-groups": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d להעלות קבצים לאתר הוויקי הזה.",
-       "api-error-badtoken": "ש×\92×\99×\90×\94 ×¤× ×\99×\9e×\99ת: ×\90ס×\99×\9e×\95×\9f ×¨×¢.",
+       "api-error-badaccess-groups": "×\90×\99× ×\9a ×\9e×\95רש×\94 להעלות קבצים לאתר הוויקי הזה.",
+       "api-error-badtoken": "ש×\92×\99×\90×\94 ×¤× ×\99×\9e×\99ת: ×\90ס×\99×\9e×\95×\9f ×©×\91×\95ר.",
        "api-error-copyuploaddisabled": "העלאה לפי כתובת כובתה בשרת זה.",
        "api-error-duplicate": "כבר יש באתר הוויקי {{PLURAL:$1|[$2 קובץ אחר] בעל|[$2 קבצים אחרים] בעלי}} אותו תוכן.",
        "api-error-duplicate-archive": "באתר כבר {{PLURAL:$1|היה [$2 קובץ אחר]|היו [$2 קבצים אחרים]}} עם אותו תוכן, אבל {{PLURAL:$1|הוא נמחק|הם נמחקו}}.",
        "api-error-duplicate-archive-popup-title": "{{PLURAL:$1|קובץ כפול שכבר נמחק|קבצים כפולים שכבר נמחקו}}",
        "api-error-duplicate-popup-title": "{{PLURAL:$1|קובץ כפול|קבצים כפולים}}",
-       "api-error-empty-file": "הקובץ ששלחתם היה ריק.",
+       "api-error-empty-file": "הקובץ ששלחת היה ריק.",
        "api-error-emptypage": "יצירת דפים חדשים ריקים אינה אפשרית.",
        "api-error-fetchfileerror": "שגיאה פנימית: משהו השתבש בזמן אחזור הקובץ.",
        "api-error-fileexists-forbidden": "קובץ בשם \"$1\" כבר קיים ואי־אפשר לדרוס אותו.",
        "api-error-fileexists-shared-forbidden": "קובץ בשם \"$1\" כבר קיים במאגר הקבצים המשותף ואי־אפשר לדרוס אותו.",
-       "api-error-file-too-large": "הקובץ ששלחתם היה גדול מדי.",
+       "api-error-file-too-large": "הקובץ ששלחת היה גדול מדי.",
        "api-error-filename-tooshort": "שם הקובץ קצר מדי.",
        "api-error-filetype-banned": "סוג קובץ זה חסום.",
        "api-error-filetype-banned-type": "$1 {{PLURAL:$4|הוא סוג קובץ אסור להעלאה|הם סוגי קבצים אסורים להעלאה}}. {{PLURAL:$3|סוג הקובץ המותר הוא|סוגי הקבצים המותרים הם}} $2.",
        "api-error-filetype-missing": "חסרה סיומת לשם הקובץ.",
-       "api-error-hookaborted": "השינוי שניסיתם לעשות נחסם על ידי הרחבה.",
+       "api-error-hookaborted": "השינוי שניסית לעשות נחסם על־ידי הרחבה.",
        "api-error-http": "שגיאה פנימית: לא ניתן להתחבר לשרת.",
        "api-error-illegal-filename": "שם הקובץ הזה אינו מורשה.",
-       "api-error-internal-error": "ש×\92×\99×\90×\94 ×¤× ×\99×\9e×\99ת: ×\9eש×\94×\95 ×\94שת×\91ש ×\91עת ×¢×\99×\91×\95×\93 ×\94×\94×¢×\9c×\90×\94 ×©×\9c×\9b×\9d באתר הוויקי.",
+       "api-error-internal-error": "ש×\92×\99×\90×\94 ×¤× ×\99×\9e×\99ת: ×\9eש×\94×\95 ×\94שת×\91ש ×\91עת ×¢×\99×\91×\95×\93 ×\94×\94×¢×\9c×\90×\94 ×©×\9c×\9a באתר הוויקי.",
        "api-error-invalid-file-key": "שגיאה פנימית: הקובץ לא נמצא במאגר הזמני.",
        "api-error-missingparam": "שגיאה פנימית: פרמטרים חסרים בבקשה שנשלחה.",
        "api-error-missingresult": "שגיאה פנימית: לא ניתן לקבוע אם ההעתקה הצליחה.",
        "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\".",
-       "api-error-unknown-error": "ש×\92×\99×\90×\94 ×¤× ×\99×\9e×\99ת: ×\9eש×\94×\95 ×\94שת×\91ש ×\91עת × ×\99ס×\99×\95×\9f ×\9c×\94×¢×\9c×\95ת ×\90ת ×\94ק×\95×\91×¥ ×©×\9c×\9b×\9d.",
+       "api-error-unknown-error": "ש×\92×\99×\90×\94 ×¤× ×\99×\9e×\99ת: ×\9eש×\94×\95 ×\94שת×\91ש ×\91עת × ×\99ס×\99×\95×\9f ×\9c×\94×¢×\9c×\95ת ×\90ת ×\94ק×\95×\91×¥ ×©×\9c×\9a.",
        "api-error-unknown-warning": "אזהרה בלתי ידועה: \"$1\".",
        "api-error-unknownerror": "שגיאה בלתי ידועה: \"$1\".",
        "api-error-uploaddisabled": "ההעלאה מבוטלת באתר הוויקי הזה.",
        "log-name-pagelang": "יומן שינוי שפה",
        "log-description-pagelang": "זהו יומן של שינויים בשפות של הדפים.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|שינה|שינתה}} את שפת הדף $3 מ$4 ל$5.",
-       "default-skin-not-found": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם  (<code>$wgDefaultSkin</code>),&rlm; <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:* שכפול אחת מה־git repostiroies ב־<code>mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code>skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏־git repository שלכם (אם אתם מפתחים של מדיה־ויקי).\n\n; אם כרגע שדרגתם את מדיה־ויקי:\n: מדיה־ויקי 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>),&rlm; <code>$1</code>, אינו זמין.\n\nאין לכם עיצובים מותקנים.\n\n$2\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:* שכפול אחת מה־git repostiroies ב־<code>mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code>skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏־git repository שלכם (אם אתם מפתחים של מדיה־ויקי). ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל עיצובים ולבחור את עיצוב ברירת המחדל.",
+       "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:* שכפול (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-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:* שכפול (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 ('''מבוטל''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''מבוטל''')",
+       "mediastatistics": "סטטיסטיקות קבצים",
+       "mediastatistics-summary": "סטטיסטיקה על סוגי קבצים שהועלו. הסטטיסטיקה כוללת רק את הגרסה החדשה ביותר של הקובץ: גרסאות ישנות או מחוקות של קבצים אינן כלולות.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|בית אחד|$1 בתים}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "סוג MIME",
+       "mediastatistics-table-extensions": "סיומות אפשריות",
+       "mediastatistics-table-count": "מספר הקבצים",
+       "mediastatistics-table-totalbytes": "גודל כולל",
+       "mediastatistics-header-unknown": "לא ידוע",
+       "mediastatistics-header-bitmap": "תמונות מפת סיביות",
+       "mediastatistics-header-drawing": "ציורים (תמונות וקטוריות)",
+       "mediastatistics-header-audio": "שמע",
+       "mediastatistics-header-video": "וידאו",
+       "mediastatistics-header-multimedia": "מדיה עשירה",
+       "mediastatistics-header-office": "מסמכים",
+       "mediastatistics-header-text": "טקסט",
+       "mediastatistics-header-executable": "בני־הרצה",
+       "mediastatistics-header-archive": "מכווצים",
+       "json-warn-trailing-comma": "{{PLURAL:$1|פסיק מסיים אחד הוסר|$1 פסיקים מסיימים הוסרו}} מטקסט ה־JSON",
+       "json-error-unknown": "הייתה בעיה עם טקסט ה־JSON. שגיאה: $1",
+       "json-error-depth": "הייתה חריגה מהעומק המקסימלי של המחסנית",
+       "json-error-state-mismatch": "נתוני JSON בלתי־תקינים או פגומים",
+       "json-error-ctrl-char": "שגיאה בתו בקרה, ייתכן שהקידוד שגוי",
+       "json-error-syntax": "שגיאת תחביר",
+       "json-error-utf8": "תווי UTF-8 פגומים, ייתכן שהקידוד שגוי",
+       "json-error-recursion": "הפניה רקורסיבית אחת או יותר בערך שנועד לקידוד",
+       "json-error-inf-or-nan": "ערך NAN או INF אחד או יותר בערך שנועד לקידוד",
+       "json-error-unsupported-type": "ניתן ערך מסוג שלא יכול להיות מקודד"
 }
index c1d4738..40a390d 100644 (file)
        "hidetoc": "छुपाएँ",
        "collapsible-collapse": "छोटा करें",
        "collapsible-expand": "विस्तार करें",
+       "confirmable-confirm": "क्या {{GENDER:$1|आप}} निश्चित हो?",
+       "confirmable-yes": "हाँ",
+       "confirmable-no": "नहीं",
        "thisisdeleted": "$1 देखें या वापिस लाएँ?",
        "viewdeleted": "$1 दिखायें?",
        "restorelink": "{{PLURAL:$1|एक हटाया हुआ|$1 हटाये हुए}} बदलाव",
        "passwordreset-emailsent-capture": "नीचे दिखाया गया कूटशब्द रीसेट ई-मेल भेज दिया गया है।",
        "passwordreset-emailerror-capture": "नीचे दृष्टित कूटशब्द रीसेट ई-मेल उत्पन्न किया गया था, परंतु उसे {{GENDER:$2|सदस्य}} को भेजना असफल रहा।\nत्रुटि: $1",
        "changeemail": "ई-मेल पता परिवर्तित करें",
-       "changeemail-header": "खाते का ई-मेल पता परिवर्तित करें",
        "changeemail-text": "अपना ई-मेल पता परिवर्तित करने के लिए इस फ़ॉर्म को पूरा करें। इस बदलाव की पुष्टि करने के लिये आपको अपना कूटशब्द पुनः लिखना पड़ेगा।",
        "changeemail-no-info": "इस पृष्ठ का सीधे प्रयोग करने के लिए आपको लॉग इन करना होगा।",
        "changeemail-oldemail": "वर्तमान ई-मेल पता:",
        "changeemail-none": "(कोई नहीं)",
        "changeemail-password": "आपका {{SITENAME}} पासवर्ड:",
        "changeemail-submit": "ई-मेल बदलें",
-       "changeemail-cancel": "रद्द करें",
        "changeemail-throttled": "आपने हाल ही में कई बार लॉग इन करने के प्रयास किये हैं।\nपुनः प्रयास करने से पहले कृपया $1 प्रतीक्षा करें।",
        "resettokens": "टोकन रीसेट करें",
        "resettokens-text": "जो टोकन आपके खाते से सम्बद्ध कुछ विशिष्ट व्यक्तिगत जानकारी प्रदान करते हैं, आप उन्हें यहाँ रीसेट कर सकते हैं।\n\nयदि आपने उन्हें गलती से किसी को दिखा दिया है या फिर आपका खाता हैक हो गया है तो आपको इन्हें रीसेट कर देना चाहिए।",
        "node-count-exceeded-category-desc": "यह उन पृष्ठों की श्रेणी है जिनमें नोड-संख्या सीमा पार की गयी है।",
        "node-count-exceeded-warning": "पृष्ठ ने नोड-संख्या पार की है",
        "expansion-depth-exceeded-category": "पृष्ठ जिनमें विस्तार गहराई पार की गई है",
-       "expansion-depth-exceeded-category-desc": "यह à¤\89न à¤ªà¥\83षà¥\8dठà¥\8bà¤\82 à¤\95à¥\80 à¤¶à¥\8dरà¥\87णà¥\80 à¤¹à¥\88 à¤\9cिनमà¥\87à¤\82 à¤µà¤¿à¤¸à¥\8dतार à¤\97हराà¤\88 à¤ªà¤¾à¤° à¤\95à¥\80 à¤\97यà¥\80 है।",
+       "expansion-depth-exceeded-category-desc": "यह à¤ªà¥\83षà¥\8dठ à¤µà¤¿à¤¸à¥\8dतार à¤\97हराà¤\88 à¤ªà¤¾à¤° à¤\95रता है।",
        "expansion-depth-exceeded-warning": "पृष्ठ में विस्तार गहराई पार की गई है",
        "parser-unstrip-loop-warning": "Unstrip लूप पाया गया",
        "parser-unstrip-recursion-limit": "Unstrip पुनरावर्तन सीमा पार की गई ($1)",
        "mergehistory-same-destination": "स्रोत और लक्ष्य पृष्ठ एक ही नहीं हो सकते हैं",
        "mergehistory-reason": "कारण:",
        "mergelog": "एकत्रीकरण लॉग",
-       "pagemerge-logentry": "[[$2]] में [[$1]] एकत्रित कर दिया ($3 तक के अवतरण)",
        "revertmerge": "अलग करें",
        "mergelogpagetext": "नीचे उन पृष्ठों की सूची है जिनका इतिहास हाल में ही दूसरे पृष्ठ में मिलाया गया था।",
        "history-title": "\"$1\" का अवतरण इतिहास",
        "searchrelated": "सम्बंधित",
        "searchall": "सभी",
        "showingresults": "नीचे क्रमांक '''$2''' से प्रारंभ कर के अधिकतम '''$1''' परिणाम {{PLURAL:$1|दिखाया गया है|दिखाए गए हैं}}।",
-       "showingresultsheader": "'''$4''' के खोज परिणाम {{PLURAL:$5|कुल '''$3''' में से #'''$1'''|कुल '''$3''' में से क्रं. '''$1 - $2'''}}",
        "search-nonefound": "आपकी खोज से मेल खाते कोई परिणाम नहीं मिले।",
        "powersearch-legend": "उन्नत खोज",
        "powersearch-ns": "नामस्थानों में खोजें:",
        "filedelete-maintenance": "रखरखाव चल रहा है और रखरखाव के दौरान फ़ाइलों को हटाना और पुनर्स्थापित करना अक्षम है।",
        "filedelete-maintenance-title": "फ़ाइल हटा नहीं सकते",
        "mimesearch": "MIME खोज",
-       "mimesearch-summary": "MIME-प्रकारों के अनुसार फ़ाइलें खोजने के लिये इस पृष्ठ का इस्तेमाल किया जा सकता है।\nइनपुट: फ़ाइल का प्रकार/उपप्रकार या प्रकार/*, उदा. <code>image/jpeg</code>।",
+       "mimesearch-summary": "MIME-प्रकारों के अनुसार फ़ाइलें खोजने के लिये इस पृष्ठ का इस्तेमाल किया जा सकता है।\nइनपुट: फ़ाइल का प्रकार/उपप्रकार या प्रकार/*, उदा <code>image/jpeg</code>।",
        "mimetype": "MIME प्रकार:",
        "download": "डाउनलोड",
        "unwatchedpages": "ध्यान न दिये हुए पृष्ठ",
        "statistics": "आँकड़े",
        "statistics-header-pages": "पृष्ठ के आँकड़े",
        "statistics-header-edits": "संपादन के आँकड़े",
-       "statistics-header-views": "आँकड़े देखें",
        "statistics-header-users": "सदस्य आँकड़े",
        "statistics-header-hooks": "अन्य आँकड़े",
        "statistics-articles": "सामग्री पृष्ठ",
        "statistics-files": "अपलोड की गई फ़ाइलें",
        "statistics-edits": "{{SITENAME}} बनने के बाद से पृष्ठ संपादन",
        "statistics-edits-average": "प्रति पृष्ठ औसत संपादन",
-       "statistics-views-total": "कुल दृष्य",
-       "statistics-views-total-desc": "अविद्यमान पृष्ठों और विशेष पृष्ठों के लिए दृश्य सम्मिलित नहीं हैं",
-       "statistics-views-peredit": "दृष्य प्रति संपादन",
        "statistics-users": "पंजीकृत [[Special:ListUsers|सदस्य]]",
        "statistics-users-active": "सक्रिय सदस्य",
        "statistics-users-active-desc": "पिछले {{PLURAL:$1|एक दिन|$1 दिनों}} में कुछ गतिविधि रखने वाले सदस्य",
-       "statistics-mostpopular": "सबसे अधिक देखे गए पृष्ठ",
        "pageswithprop": "पृष्ठ जिनमें पृष्ठ गुण हैं",
        "pageswithprop-legend": "पृष्ठ जिनमें पृष्ठ गुण हैं",
        "pageswithprop-text": "यह पृष्ठ पृष्ठ गुण का उपयोग कर रहे पन्नों को सूचीबद्ध करता है।",
        "uncategorizedtemplates": "अश्रेणीकृत साँचे",
        "unusedcategories": "अप्रयुक्त श्रेणियाँ",
        "unusedimages": "अप्रयुक्त फ़ाइलें",
-       "popularpages": "लोकप्रिय पृष्ठ",
        "wantedcategories": "वांछित श्रेणियाँ",
        "wantedpages": "जो पृष्ठ चाहिये",
        "wantedpages-badtitle": "परिणामों में अवैध शीर्षक: $1",
        "booksources": "पुस्तकों के स्रोत",
        "booksources-search-legend": "पुस्तकों के स्रोत खोजें",
        "booksources-isbn": "आइ॰एस॰बी॰एन:",
-       "booksources-go": "जायें",
        "booksources-text": "नीचे पुरानी और नई पुस्तकें बेचने वाली वेबसाइटों के एड्रेस हैं, जिसमें आपको आप द्वारा खोजी जाने वाली पुस्तक के बारे में अधिक जानकारी मिल सकती है:",
        "booksources-invalid-isbn": "यह आइ॰एस॰बी॰एन सही नहीं लग रहा है; मूल स्रोत से नकल करने में हुई त्रुटि के लिए जाँचें।",
        "specialloguserlabel": "कर्ता:",
        "wlheader-enotif": "ई-मेल नोटिफ़िकेशन सक्षम हैं।",
        "wlheader-showupdated": "पृष्ठ जो आपके द्वारा देखे जाने के बाद बदले गये हैं '''बोल्ड''' दिखेंगे।",
        "wlnote": "$3 को $4 बजे तक पिछले '''$2''' {{PLURAL:$2|घंटे|घंटों}} में {{PLURAL:$1|हुआ एक|हुए '''$1'''}} परिवर्तन निम्न {{PLURAL:$1|है|हैं}}।",
-       "wlshowlast": "पिछले $1 घंटे $2 दिन $3 देखें",
+       "wlshowlast": "पिछले $1 घंटे $2 दिन  देखें",
        "watchlist-options": "ध्यानसूची विकल्प",
        "watching": "ध्यान दे रहे हैं...",
        "unwatching": "ध्यान हटा रहे हैं...",
        "pageinfo-robot-policy": "सर्च इंजन बॉट द्वारा अनुक्रमण",
        "pageinfo-robot-index": "अनुमतित",
        "pageinfo-robot-noindex": "नहीं अनुमतित",
-       "pageinfo-views": "दर्शाव की संख्या",
        "pageinfo-watchers": "पृष्ठ पर नज़र रखने वालों की संख्या",
        "pageinfo-few-watchers": "$1 से कम ध्यान देने {{PLURAL:$1|वाला|वाले}}",
        "pageinfo-redirects-name": "इस पृष्ठ को पुनर्निर्देशों की संख्या",
        "exif-urgency-low": "न्यूनतम ($1)",
        "exif-urgency-high": "उच्चतम ($1)",
        "exif-urgency-other": "यूज़र-डिफ़ाइंड प्राथमिकता ( $1 )",
-       "watchlistall2": "सभी",
        "namespacesall": "सभी",
        "monthsall": "सभी",
        "confirmemail": "ई-मेल प्रमाणित करे",
        "logentry-rights-rights-legacy": "$1 ने $3 के सदस्य समूह {{GENDER:$2|बदले}}",
        "logentry-rights-autopromote": "$1 के सदस्य समूह स्वतः $4 से बदलकर $5 {{GENDER:$2|किये}} गए",
        "rightsnone": "(कोई नहीं)",
+       "revdelete-summary": "संपादन सारांश",
        "feedback-bugornote": "यदि आप किसी तकनीकी परेशानी को विस्तार से समझाने के लिये तैयार हैं तो कृपया [$1 बग फ़ाइल करें]।\nयदि नहीं, तो आप नीचे दिये सरल फ़ॉर्म का प्रयोग कर सकते हैं। आपकी टिप्पणी आपके सदस्य नाम और आपके ब्राउज़र के नाम के सहित \"[$3 $2]\" पृष्ठ में जोड़ दी जाएगी।",
        "feedback-subject": "विषय:",
        "feedback-message": "संदेश:",
index 0062c26..6b6bdd1 100644 (file)
        "passwordreset-emailsent-capture": "Ek password yaad karae waala e-mail, jiske niche dekhawa jaawe hae, ke bhej dewa gais hae.",
        "passwordreset-emailerror-capture": "Ek password yaad karae waala e-mail ke banawa gais hae, jiske niche dekhawa jaawe hae, lekin jiske {{GENDER:$2|user}} ke lage bheje nai jawa sake hae: $1",
        "changeemail": "E-mail address ke badlo",
-       "changeemail-header": "Account e-mail address ke badlo",
        "changeemail-text": "Aapan e-mail ke badle kae khaatir ii form ke fill karo. Ii badlao ke khatir aap ke aapan password ke de ke parri.",
        "changeemail-no-info": "Ii panna ke sidha dekhe ke khaatir, aap ke login kare ke parri.",
        "changeemail-oldemail": "Abhi ke E-mail address:",
        "changeemail-none": "(kuchh nai)",
        "changeemail-password": "Aap ke {{SITENAME}} password:",
        "changeemail-submit": "E-mail badlo",
-       "changeemail-cancel": "Kaat do",
        "resettokens": "Token ke reset karo",
        "resettokens-text": "Aap aapan private data pe access roke ke khatir token ke reset kare saktaa hae.\n\nAap ke ii kare ke chaahi agar aap galti se ii jaankari ke aur koi ke de diya hae nai to aap ke account ke bare me aur koi ke pataa hae.",
        "resettokens-no-tokens": "Reset kare ke jhatir koi token nai hae.",
        "mergehistory-same-destination": "Suruu aur khatam kare waala panna ek nai hoe sake hai.",
        "mergehistory-reason": "Kaaran:",
        "mergelog": "Log ke jorro",
-       "pagemerge-logentry": "[[$1]] [[$2]] me jorr dewa gais hai ($3 talak ke badlao)",
        "revertmerge": "Milawat ke pahile jaise karo",
        "mergelogpagetext": "Niche ke suchi me nawaa itihass ke jorr ke suchi hai",
        "history-title": "\"$1\" ke sansodhan ke itihaas",
        "searchrelated": "sambhand rakkhe hai",
        "searchall": "sab",
        "showingresults": "Niche dekhae hai {{PLURAL:$1|'''1''' result|'''$1''' results}} #'''$2''' se suruu hoe ke.",
-       "showingresultsheader": "{{PLURAL:$5|Natija '''$1''' of '''$3'''|Natija '''$1 - $2''' of '''$3'''}} '''$4''' khatir",
        "search-nonefound": "Ii sawaal ke koi jawab nai hae.",
        "powersearch-legend": "Gahira khoj",
        "powersearch-ns": "Namespaces me khojo:",
        "statistics": "Aankrra",
        "statistics-header-pages": "Panna ke ankrraa",
        "statistics-header-edits": "Statistics ke badlo",
-       "statistics-header-views": "Statistics ke dekho",
        "statistics-header-users": "Sadasya ke statistics",
        "statistics-header-hooks": "Duusra statistics",
        "statistics-articles": "Content panna",
        "statistics-files": "Upload karaa gais files",
        "statistics-edits": "{{SITENAME}} ke suruu hoe se panna ke badlao",
        "statistics-edits-average": "Average badlao per panna",
-       "statistics-views-total": "Views kul jorr",
-       "statistics-views-total-desc": "Jon pana abhi banawa nai gais hae aur khaas panna ke include nai karaa gais hae",
-       "statistics-views-peredit": "Views per badlao",
        "statistics-users": "Registered [[Special:ListUsers|sadasya]]",
        "statistics-users-active": "Active sadasya",
        "statistics-users-active-desc": "Sadasya jon ki pichhle {{PLURAL:$1|din|$1 din}} me kuchh karin hai.",
-       "statistics-mostpopular": "Sab se jaada dekha gae panna",
        "pageswithprop": "Panna, aapan property ke saathe",
        "pageswithprop-legend": "Panna, aapan poperty ke saathe",
        "pageswithprop-text": "Ii panaa, uu panna ke list kare hae jon ki koi khaas panna ke property ke use kare hae.",
        "uncategorizedtemplates": "Bina categorise karaa gais template",
        "unusedcategories": "Bina use bhae category",
        "unusedimages": "Bina use bhae files",
-       "popularpages": "Popular panna",
        "wantedcategories": "Maange waala vibhag",
        "wantedpages": "Jaruri panna",
        "wantedpages-badtitle": "Result set me kharaa title hai: $1",
        "querypage-disabled": "Ii khaas panna ke performance kaaran se disable kar drwa gais hae.",
        "booksources": "Pustak sources",
        "booksources-search-legend": "Book sources ke khojo",
-       "booksources-go": "Jao",
        "booksources-text": "Niche ke suchi me uu websites ke jorr hai jon ki nawaa aur use karaa gais book ke beche hai aur jon book ke aap khojtaa hai uske baare aur jaankari de sake hai:",
        "booksources-invalid-isbn": "Dewa gais ISBN thiik nai hai; iske purana jagha se copy kare ke time ke error ke check karo.",
        "specialloguserlabel": "Sadasya:",
        "wlheader-enotif": "E-mail notification ke enable kar dewa gais hai.",
        "wlheader-showupdated": "Panna jiske aap ke pichhla visit ke ke baad badal dewa gais hia ke '''bold''' me dekhawa jaawe hai.",
        "wlnote": "Niche ke {{PLURAL:$1|pahile waala badlao hai| pahile '''$1''' badlao hai}} pichhle {{PLURAL:$2|ghanta|'''$2''' ghanta}} me as of $3, $4..",
-       "wlshowlast": "Pichhla $1 ghanta $2 din $3 ke dekhao",
+       "wlshowlast": "Pichhla $1 ghanta $2 din  ke dekhao",
        "watchlist-options": "Dhyan suchi ke options",
        "watching": "Dekhtaa...",
        "unwatching": "Nai dekhtaa...",
        "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.",
-       "import-interwiki-source": "Suruu waala wiki/panna:",
        "import-interwiki-history": "Ii panna ke sab badlao ke itihaas ke copy karo",
        "import-interwiki-templates": "Sab template ke include karo",
        "import-interwiki-submit": "Import karo",
        "pageinfo-robot-policy": "Search engine ke status",
        "pageinfo-robot-index": "Indexable",
        "pageinfo-robot-noindex": "Indexable nai hae",
-       "pageinfo-views": "Ketna dafe dekha gais hae",
        "pageinfo-watchers": "Ketnaa jane panna ke dekhe hae",
        "pageinfo-few-watchers": "$1 {{PLURAL:$1|watcher|watchers}} se kamtii log hae",
        "pageinfo-redirects-name": "Ii panna pe redirect karo",
        "exif-urgency-low": "Kamti ($1)",
        "exif-urgency-high": "Jaada ($1)",
        "exif-urgency-other": "Sadasya-defined priority ($1)",
-       "watchlistall2": "sab",
        "namespacesall": "sab",
        "monthsall": "sab",
        "confirmemail": "E-mail address ke pakka karo",
        "logentry-rights-rights-legacy": "$1 $3 ke group membership ke badal dia hae",
        "logentry-rights-autopromote": "$1 ke apne se $2 se $3 ke promotion dewa gais",
        "rightsnone": "(koi nai hai)",
+       "revdelete-summary": "summary ke badlo",
        "searchsuggest-search": "Khojo"
 }
index 1600b9d..17fe491 100644 (file)
        "passwordreset-emailsent-capture": "May e-mail nga nagapahanumdum, nga ginapakita sa idalom.",
        "passwordreset-emailerror-capture": "May e-mail nga nagapahanumdom nga ginbuhat, nga ginapakita sa idalom, apang ang pagpadala sa manuggamit indi madinalag-on: $1",
        "changeemail": "Ilisan ang E-mail adres",
-       "changeemail-header": "Ilisan ang e-mail adres sang akawnt",
        "changeemail-text": "Tapusa ang ini nga formas agod nga ma-ilisan ang imo e-mail adres. Kinahanglan mo nga magbutang sang imo pasword sa pag-kumperma sang sini nga pag-ilis.",
        "changeemail-no-info": "Kinahanglan nga nakasulod ka agod nga makadtoan ang ini nga panid sing derecho.",
        "changeemail-oldemail": "E-mail adres sa subong:",
        "changeemail-none": "(wala)",
        "changeemail-password": "Ang imong {{SITENAME}} nga password:",
        "changeemail-submit": "Ilisan and E-mail",
-       "changeemail-cancel": "Kanselahon",
        "bold_sample": "Dukot nga teksto",
        "bold_tip": "Dukot nga teksto",
        "italic_sample": "Gahilay nga teksto",
        "mergehistory-same-destination": "Ang ginhalinan kag palakadtuan nga mga panid indi mahimo nga pareho",
        "mergehistory-reason": "Rason:",
        "mergelog": "Isugpon ang log",
-       "pagemerge-logentry": "ginsugpon ang [[$1]] sa [[$2]] (mga pagbag-o asta $3)",
        "revertmerge": "Di pag-upod",
        "mergelogpagetext": "Sa dalom isa ka lista sang mga pinaka-ulihe nga pagsugpon sang isa ka kasaysayan sang panid sa isa pa gid.",
        "history-title": "Rebisyon sang hisayranay sa \"$1\"",
        "searchrelated": "konektado",
        "searchall": "tanan",
        "showingresults": "Ginapakita sa dalom pakadto sa {{PLURAL:$1|'''1''' ka resulta|'''$1''' ka mga resulta}} umpisa ang #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Resulta nga '''$1''' sang '''$3'''|Mga resulta nga '''$1 - $2''' sang '''$3'''}} para sa '''$4'''",
        "search-nonefound": "Wala sang mga resulta nga nagsanto sa imo nga ginapangita.",
        "powersearch-legend": "Abanse nga pagpangita",
        "powersearch-ns": "Pangita sa mga ngalan-espasyo:",
        "brokenredirects-delete": "panason",
        "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
        "nmembers": "$1 {{PLURAL:$1|membro|mga membro}}",
-       "popularpages": "Ang panid nagakilala gid",
        "prefixindex": "Tanan nga mga pahina nga may-ara prefiks",
        "usercreated": "{{GENDER:$3|Ginhimo}} sa $1 kag $2",
        "newpages": "Mga Bag-o nga Pahina",
        "pager-older-n": "{{PLURAL:$1|mas daan 1|mas daan $1}}",
        "booksources": "Mga ginkuhaan sang Libro",
        "booksources-search-legend": "Pangita-on ang ginakuhaan sang libro",
-       "booksources-go": "Lakat",
        "log": "Logs",
        "allpages": "Tanan nga mga pahina",
        "prevpage": "Antes nga pahina ($1)",
        "watchthispage": "Bantayan ining panid",
        "unwatch": "Di maglantaw",
        "watchlist-details": "{{PLURAL:$1|$1 pahina|$1 mga pahina}} sa imo nga lista sang paglantaw, indi ang pag-isip sang imo ginahambal nga mga pahina.",
-       "wlshowlast": "Ipakita ang nagligad nga $1 oras $2 adlaw $3",
+       "wlshowlast": "Ipakita ang nagligad nga $1 oras $2 adlaw",
        "watchlist-options": "Pililian sa lista sang nagalantaw",
        "watching": "Nagalantaw...",
        "unwatching": "Di-paglantaw...",
        "exif-digitalzoomratio": "Antas sang digital zoom",
        "exif-focallengthin35mmfilm": "Laba sang pokus sang film nga 35 mm",
        "exif-scenecapturetype": "Tipo sang pag-kuha sang litrato",
-       "watchlistall2": "tanan",
        "namespacesall": "tanan",
        "monthsall": "tanan",
        "imgmultigo": "Lakat",
        "revdelete-restricted": "ginapatuman nga pagbawal sa mga administrador",
        "revdelete-unrestricted": "ginkakas nga pagbawal sa mga administrador",
        "rightsnone": "(wala)",
+       "revdelete-summary": "liwaton ang kabilogan",
        "expand_templates_preview": "Ipakita subong"
 }
index 0967733..0b3807d 100644 (file)
        "tog-showtoolbar": "Prikaži traku s alatima za uređivanje (zahtijeva JavaScript)",
        "tog-editondblclick": "Dvoklik otvara uređivanje stranice (JavaScript)",
        "tog-editsectiononrightclick": "Pritiskom na desnu tipku miša otvori uređivanje pojedinih odlomaka (JavaScript)",
-       "tog-watchcreations": "Dodaj članke koje kreiram na moj popis praćenja",
+       "tog-watchcreations": "Dodaj stranice koje sam stvorio na moj popis praćenja",
        "tog-watchdefault": "Dodaj svaku stranicu koju uredim na moj popis praćenja",
        "tog-watchmoves": "Dodaj stranice i datoteke koje premjestim na moj popis praćenja",
        "tog-watchdeletion": "Dodaj stranice i datoteke koje izbrišem na popis praćenja",
+       "tog-watchrollback": "Dodaj stranice na kojima sam vratio uređivanja na popis praćenja",
        "tog-minordefault": "Normalno označavaj sve moje izmjene kao manje",
        "tog-previewontop": "Prikaži kako će stranica izgledati iznad okvira za uređivanje",
        "tog-previewonfirst": "Prikaži kako će stranica izgledati čim otvorim uređivanje",
        "view": "Vidi",
        "view-foreign": "vidi na projektu $1",
        "edit": "uredi",
+       "edit-local": "Uredi lokalni opis",
        "create": "Započni",
        "create-local": "dodaj lokalni opis",
        "editthispage": "Uredi ovu stranicu",
        "hidetoc": "sakrij",
        "collapsible-collapse": "sklopi stablo",
        "collapsible-expand": "raširi stablo",
+       "confirmable-confirm": "Jeste li sigurni?",
+       "confirmable-yes": "Da",
+       "confirmable-no": "Ne",
        "thisisdeleted": "Vidi ili vrati $1?",
        "viewdeleted": "Vidi $1?",
        "restorelink": "{{PLURAL:$1|$1 pobrisanu izmjenu|$1 pobrisane izmjene|$1 pobrisanih izmjena}}",
        "createacct-benefit-heading": "{{SITENAME}} su stvorili ljudi poput Vas.",
        "createacct-benefit-body1": "{{PLURAL:$1|uređivanje|uređivanja}}",
        "createacct-benefit-body2": "{{PLURAL:$1|stranica|stranice|stranica}}",
-       "createacct-benefit-body3": "nedavnih {{PLURAL:$1|suradnik|suradnika}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|nedavni suradnik|nedavnih suradnika}}",
        "badretype": "Unesene lozinke nisu istovjetne.",
        "userexists": "Uneseno suradničko ime već je u upotrebi.\nUnesite neko drugo ime.",
        "loginerror": "Pogrješka u prijavi",
        "login-userblocked": "Ovaj je suradnik blokiran. Prijava nije dopuštena.",
        "wrongpassword": "Lozinka koju ste unijeli nije ispravna. Pokušajte ponovno.",
        "wrongpasswordempty": "Niste unijeli lozinku. Pokušajte ponovno.",
-       "passwordtooshort": "Lozinka mora sadržavati najmanje {{PLURAL:$1|1 znak|$1 znaka|$1 znakova}}.",
+       "passwordtooshort": "Zaporka mora sadržavati najmanje {{PLURAL:$1|1 znak|$1 znaka|$1 znakova}}.",
        "password-name-match": "Vaša lozinka mora biti različita od Vašeg suradničkog imena.",
        "password-login-forbidden": "Uporaba ovog suradničkog imena i lozinke nije dozvoljena.",
        "mailmypassword": "Pošalji mi novu lozinku",
        "passwordremindertext": "Netko je (vjerojatno Vi, s IP adrese $1) zatražio novu lozinku za projekt {{SITENAME}} ($4).\nPrivremena lozinka za suradnika \"$2\" je postavljena na \"$3\".\nUkoliko ste to Vi učinili, molimo Vas da se prijavite i promijenite lozinku.\nPrivremena lozinka vrijedi još {{PLURAL:$5|$5 dan|$5 dana}}.\n\nUkoliko niste zatražili novu lozinku, ili ste se sjetili stare lozinke i\nviše ju ne želite promijeniti, slobodno zanemarite ovu poruku i nastavite\nkoristiti staru lozinku.",
        "noemail": "Suradnik \"$1\" nema zapisanu e-mail adresu.",
        "noemailcreate": "Morate navesti važeću e-mail adresu",
-       "passwordsent": "Nova je lozinka poslana na e-mail adresu suradnika \"$1\"",
+       "passwordsent": "Nova je zaporka poslana na adresu elektroničke pošte suradnika \"$1\"",
        "blocked-mailpassword": "Vašoj IP adresi je blokirano uređivanje stranica, a da bi se spriječila nedopuštena radnja, mogućnost zahtijevanja nove lozinke je također onemogućena.",
        "eauthentsent": "Na navedenu adresu poslana je e-poruka s potvrdom.\nPrije nego što pošaljemo daljnje poruke, molimo Vas otvorite e-poruku i slijedite u njemu sadržana uputstva kako biste potvrdili da je adresa e-pošte zaista Vaša.",
        "throttled-mailpassword": "Već Vam je poslan e-mail za promjenu zaporke, u {{PLURAL:$1|posljednjih sat vremena|posljednja $1 sata|posljednjih $1 sati}}.\nDa bi spriječili zloupotrebu, moguće je poslati samo jedan e-mail za promjenu zaporke {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.",
        "php-mail-error-unknown": "Nepoznata pogrješka u funkciji PHP-poruke()",
        "user-mail-no-addy": "Pokušaj slanja e-maila bez e-mail adrese.",
        "user-mail-no-body": "Pokušali ste poslati e-mail bez sadržaja ili s prekratkim sadržajem.",
-       "changepassword": "Promjena lozinke",
+       "changepassword": "Promjena zaporke",
        "resetpass_announce": "Da biste završili proces mijenjanja lozinke, upišite \nnovu lozinku.",
        "resetpass_header": "Promijeni lozinku računa",
        "oldpassword": "Stara lozinka",
        "passwordreset": "Ponovno postavi lozinku",
        "passwordreset-text-one": "Ispunite ovaj obrazac ako želite ponovno postaviti Vašu zaporku.",
        "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja da biste dobili privremenu zaporku e-poštom.}}",
-       "passwordreset-legend": "Poništi lozinku",
+       "passwordreset-legend": "Poništi zaporku",
        "passwordreset-disabled": "Poništavanje lozinke je onemogućeno na ovom wikiju.",
        "passwordreset-emaildisabled": "Funkcija e-pošte je onemogućena na ovom wikiju.",
        "passwordreset-username": "Suradničko ime:",
        "passwordreset-emailsent-capture": "Poslan Vam je podsjetnik kao e-pošta (tekst je prikazan dolje).",
        "passwordreset-emailerror-capture": "Napravljena je e-poruka za ponovno postavljanje zaporke (prikazana ispod), ali njeno slanje suradniku nije uspjelo: $1",
        "changeemail": "Promijeni e-mail adresu",
-       "changeemail-header": "Promijeni e-mail adresu računa",
        "changeemail-text": "Za promjenu e-mail adrese popunite ovaj obrazac. Morat ćete unijeti svoju lozinku da potvrdite ovu promjenu.",
        "changeemail-no-info": "Morate biti prijavljeni da biste izravno pristupili ovoj stranici.",
-       "changeemail-oldemail": "Trenutna E-mail adresa:",
-       "changeemail-newemail": "Nova E-mail adresa:",
+       "changeemail-oldemail": "Trenutačna adresa e-pošte:",
+       "changeemail-newemail": "Nova adresa e-pošte:",
        "changeemail-none": "(ništa)",
        "changeemail-password": "Zaporka za {{SITENAME}}:",
        "changeemail-submit": "Promijeni E-mail",
-       "changeemail-cancel": "Odustani",
        "bold_sample": "Podebljani tekst",
        "bold_tip": "Podebljani tekst",
        "italic_sample": "Kurzivni tekst",
        "autoblockedtext": "Vaša IP adresa automatski je blokirana zbog toga što ju je koristio drugi suradnik, kojeg je blokirao $1.\nRazlog blokiranja je sljedeći:\n\n:''$2''\n\n* Početak blokade: $8\n* Blokada istječe: $6\n* Ime blokiranog suradnika: $7\n\nMožete kontaktirati $1 ili jednog od [[{{MediaWiki:Grouppage-sysop}}|administratora]] kako bi Vam pojasnili razlog blokiranja.\n\nPrimijetite da ne možete rabiti opciju \"Pošalji mu e-poruku\" ako niste upisali valjanu adresu e-pošte u Vašim [[Special:Preferences|suradničkim postavkama]] i ako niste u tome onemogućeni prilikom blokiranja.\n\nVaša trenutačna IP adresa je $3, a oznaka bloka #$5. Molimo navedite ovaj broj kod svakog upita vezano za razlog blokiranja.",
        "blockednoreason": "bez obrazloženja",
        "whitelistedittext": "Za uređivanje stranice morate se $1.",
-       "confirmedittext": "Morate potvrditi Vašu e-mail adresu prije nego što Vam bude omogućeno uređivanje. Molim unesite i ovjerite Vašu e-mail adresu u [[Special:Preferences|suradničkim postavkama]].",
+       "confirmedittext": "Morate potvrditi Vašu adresu e-pošte prije nego što Vam bude omogućeno uređivanje. Molim unesite i ovjerite Vašu adresu e-pošte u [[Special:Preferences|suradničkim postavkama]].",
        "nosuchsectiontitle": "Ne mogu pronaći odlomak",
        "nosuchsectiontext": "Pokušali ste uređivati odlomak koji ne postoji.\nMožda je premješten ili izbrisan dok ste pregledavali stranicu.",
        "loginreqtitle": "Nužna prijava",
        "edit-conflict": "Sukob uređivanja.",
        "edit-no-change": "Vaše uređivanje je zanemareno, jer nikakva promjena sadržaja nije napravljena.",
        "postedit-confirmation-created": "Stranica je stvorena.",
+       "postedit-confirmation-restored": "Stranica je vraćena.",
        "postedit-confirmation-saved": "Vaše je uređivanje sačuvano.",
        "edit-already-exists": "Neuspješno stvaranje nove stranice.\nStranica već postoji.",
        "defaultmessagetext": "Prvotni tekst poruke",
        "revdelete-selected-file": "{{PLURAL:$1|Označena inačica|Označene inačice}} datoteke [[:$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 zapisnicima, 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-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-failure": "'''Vidljivost inačice nije mogla biti ažurirana:'''\n$1",
        "logdelete-success": "'''Vidljivost uređivanja uspješno postavljena.'''",
        "logdelete-failure": "'''Vidljivost evidencije ne može biti postavljena:'''\n$1",
-       "revdel-restore": "Promijeni dostupnost",
+       "revdel-restore": "promijeni dostupnost",
        "pagehist": "stare izmjene",
        "deletedhist": "Obrisana povijest",
        "revdelete-hide-current": "Pogrješka u skrivanju stavke datirane $2, $1: ovo je trenutačna inačica. Ne može biti skrivena.",
        "mergehistory-same-destination": "Izvorna i ciljana stranica ne mogu biti iste",
        "mergehistory-reason": "Razlog:",
        "mergelog": "Evidencija spajanja povijesti stranica",
-       "pagemerge-logentry": "spojeno [[$1]] u [[$2]] (promjene do $3)",
        "revertmerge": "Razdvoji",
        "mergelogpagetext": "Slijedi popis posljednjih spajanja povijesti stranica.",
        "history-title": "Povijest izmjena stranice \"$1\"",
        "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'''.",
-       "showingresultsheader": "{{PLURAL:$5|Rezultat '''$1''' od '''$3'''|Rezultati '''$1 - $2''' od '''$3'''}} za '''$4'''",
        "search-nonefound": "Ne postoje rezultati koji se podudaraju s upitom.",
        "powersearch-legend": "Napredno pretraživanje",
        "powersearch-ns": "Traži u imenskom prostoru:",
        "prefs-watchlist-token": "Token popisa praćenja:",
        "prefs-misc": "Razno",
        "prefs-resetpass": "Promijeni lozinku",
-       "prefs-changeemail": "promijeni e-mail",
+       "prefs-changeemail": "promijeni adresu e-pošte",
        "prefs-setemail": "Postavite E-mail adresu",
        "prefs-email": "Mogućnosti e-maila",
        "prefs-rendering": "Izgled",
        "recentchanges-noresult": "U zadanom vremenu nema promjena za zadane kriterije.",
        "recentchanges-feed-description": "Na ovoj stranici možete pratiti nedavne promjene u wikiju.",
        "recentchanges-label-newpage": "Ova izmjena stvorila je novu stranicu",
-       "recentchanges-label-minor": "Ovo je manja izmjena",
-       "recentchanges-label-bot": "Ovu izmjenu napravio je bot",
-       "recentchanges-label-unpatrolled": "Ova izmjena još nije pregledana",
+       "recentchanges-label-minor": "Manja izmjena",
+       "recentchanges-label-bot": "Izmjenu napravio bot",
+       "recentchanges-label-unpatrolled": "Nepregledana izmjena",
        "recentchanges-label-plusminus": "Promjena veličine stranice (u bajtovima)",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "$1 - nova stranica",
+       "recentchanges-legend-newpage": "Nova stranica",
        "rcnotefrom": "Slijede promjene od <b>$2</b> (prikazano ih je do <b>$1</b>).",
        "rclistfrom": "Prikaži nove promjene počevši od $3 $2",
        "rcshowhideminor": "$1 manje promjene",
        "listfiles_description": "Opis",
        "listfiles_count": "Inačice",
        "listfiles-show-all": "Uključujući starije inačice slika",
+       "listfiles-latestversion": "Trenutačna inačica",
        "listfiles-latestversion-yes": "Da",
        "listfiles-latestversion-no": "Ne",
        "file-anchor-link": "Slika",
        "filerevert-legend": "Vrati datoteku",
        "filerevert-intro": "Vraćate '''[[Media:$1|$1]]''' na [$4 promjenu od $3, $2].",
        "filerevert-comment": "Razlog:",
-       "filerevert-defaultcomment": "Vraćeno na inačicu od $2, $1",
+       "filerevert-defaultcomment": "vraćeno na inačicu od $1 ($2)",
        "filerevert-submit": "Vrati",
        "filerevert-success": "'''[[Media:$1|$1]]''' je vraćena na [$4 promjenu od $3, $2].",
        "filerevert-badversion": "Nema prethodne lokalne inačice datoteke s zadanim datumom i vremenom.",
        "statistics": "Statistika",
        "statistics-header-pages": "Statistika stranica",
        "statistics-header-edits": "Statistika uređivanja",
-       "statistics-header-views": "Statistika posjećivanja",
        "statistics-header-users": "Statistika suradnika",
        "statistics-header-hooks": "Ostale statistike",
        "statistics-articles": "Stranice sa sadržajem",
        "statistics-files": "Postavljene datoteke",
        "statistics-edits": "Broj uređivanja od nastanka projekta {{SITENAME}}",
        "statistics-edits-average": "Prosječan broj uređivanja po stranici",
-       "statistics-views-total": "Posjeta ukupno",
-       "statistics-views-total-desc": "Posjeti nepostojećim i posebnim stranicama nisu uključeni",
-       "statistics-views-peredit": "Posjeta po uređivanju",
        "statistics-users": "Prijavljeni [[Special:ListUsers|suradnici]]",
        "statistics-users-active": "Aktivni suradnici",
        "statistics-users-active-desc": "Suradnici koji su napravili neku od radnji u posljednjih {{PLURAL:$1|dan|$1 dana}}",
-       "statistics-mostpopular": "Najposjećenije stranice",
+       "pageswithprop": "Stranice sa osobinom stranice",
+       "pageswithprop-legend": "Stranice sa osobinom stranice",
        "pageswithprop-prop": "Ime osobine:",
        "pageswithprop-submit": "Idi",
        "doubleredirects": "Dvostruka preusmjeravanja",
        "uncategorizedtemplates": "Nekategorizirani predlošci",
        "unusedcategories": "Nekorištene kategorije",
        "unusedimages": "Nekorištene slike",
-       "popularpages": "Popularne stranice",
        "wantedcategories": "Tražene kategorije",
        "wantedpages": "Tražene stranice",
        "wantedpages-badtitle": "Nevaljani naslov kao rezultat: $1",
        "querypage-disabled": "Ova posebna stranica onemogućena je jer bi usporila funkcioniranje projekta.",
        "booksources": "Pretraživanje po ISBN-u",
        "booksources-search-legend": "Traženje izvora za knjigu",
-       "booksources-go": "Kreni",
        "booksources-text": "Ovdje je popis vanjskih poveznica na internetskim stranicama koje prodaju nove i rabljene knjige, ali mogu sadržavati i ostale podatke o knjigama koje tražite:",
        "booksources-invalid-isbn": "Čini se da dani ISBN nije valjan; provjerite greške kopirajući iz izvornika.",
        "specialloguserlabel": "Suradnik:",
        "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.",
-       "wlshowlast": "Prikaži posljednjih $1 sati $2 dana $3",
+       "wlshowlast": "Prikaži posljednjih $1 sati $2 dana",
        "watchlist-options": "Izbornik popisa praćenja",
        "watching": "Pratim...",
        "unwatching": "Prestajem pratiti...",
        "blocklogpage": "Evidencija blokiranja",
        "blocklog-showlog": "Ovaj suradnik je ranije blokiran.\nEvidencija blokiranja je prikazan ispod kao napomena:",
        "blocklog-showsuppresslog": "Ovaj suradnik je ranije blokiran i skriven.\nZapisnik skrivanja je prikazan ispod kao napomena:",
-       "blocklogentry": "Blokiran je \"[[$1]]\" na rok $2 $3",
+       "blocklogentry": "Blokiran je \"[[$1]]\" na rok $2 $3.",
        "reblock-logentry": "promijenjene postavke blokiranja za [[$1]] na rok od $2 $3",
        "blocklogtext": "Ovo je evidencija blokiranja i deblokiranja.\nNa popisu nema automatski blokiranih IP adresa.\nZa popis trenutačnih zabrana i blokiranja vidi [[Special:BlockList|popis blokiranja]].",
-       "unblocklogentry": "Deblokiran \"$1\"",
+       "unblocklogentry": "Deblokiran je \"$1\".",
        "block-log-flags-anononly": "samo za neprijavljene suradnike",
        "block-log-flags-nocreate": "otvaranje novih suradničkih imena nije moguće",
        "block-log-flags-noautoblock": "autoblok je onemogućen",
        "movelogpage": "Evidencija premještanja",
        "movelogpagetext": "Ispod je popis premještenih stranica.",
        "movesubpage": "{{PLURAL:$1|Podstranica|Podstranice}}",
-       "movesubpagetext": "Ova stranica ima $1 {{PLURAL:$1|podstarnicu|podstranice}} koje su prikazane ispod.",
+       "movesubpagetext": "Ova stranica ima $1 {{PLURAL:$1|podstranicu|podstranice|podstranica}} koje su prikazane ispod.",
        "movenosubpage": "Ova stranica nema podstranica.",
        "movereason": "Razlog:",
        "revertmove": "vrati",
        "pageinfo-length": "Dužina stranice (u bajtovima)",
        "pageinfo-article-id": "ID stranice",
        "pageinfo-language": "Jezik stranice",
+       "pageinfo-content-model": "Tip podataka na stranici",
        "pageinfo-robot-policy": "Status tražilice",
        "pageinfo-robot-index": "Stranicu je moguće indeksirati",
        "pageinfo-robot-noindex": "Indeksiranje stranice onemogućeno",
-       "pageinfo-views": "Broj pregleda",
        "pageinfo-watchers": "Broj pratitelja stranice",
+       "pageinfo-few-watchers": "Manje od $1 {{PLURAL:$1|suradnika koji prate ovu stranicu|suradnika koji prate ovu stranicu}}",
        "pageinfo-redirects-name": "Broj preusmjeravanja na ovu stranicu",
        "pageinfo-subpages-name": "Podstranice",
        "pageinfo-subpages-value": "Ukupno $1 ($2 {{PLURAL:$2|preusmjeravanje|preusmjeravanja}}; $3 {{PLURAL:$3|obična podstranica|obične podstranice|običnih podstranica}})",
        "markedaspatrollednotify": "Uređivanje stranice $1 označeno je pregledanim.",
        "markedaspatrollederrornotify": "Označavanje stranice pregledanom nije uspjelo.",
        "patrol-log-page": "Evidencija pregledavanja promjena",
-       "patrol-log-header": "Ovo su evidencije patroliranih izmjena.",
+       "patrol-log-header": "Ovo su evidencije ophođenih izmjena.",
        "log-show-hide-patrol": "$1 evidenciju patroliranja",
        "deletedrevision": "Izbrisana stara inačica $1",
        "filedeleteerror-short": "Pogrješka u brisanju datoteke: $1",
        "minutes-ago": "prije $1 {{PLURAL:$1|minute|minuta}}",
        "seconds-ago": "prije $1 {{PLURAL:$1|sekunde|sekundi}}",
        "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": "ћирилица",
+       "variantname-sr-ec": "ćirilica",
        "variantname-sr-el": "latinica",
        "metadata": "Metapodaci",
        "metadata-help": "Ova datoteka sadržava dodatne podatke koje je vjerojatno dodala digitalna kamera ili skener u procesu snimanja odnosno digitalizacije. Ako je datoteka mijenjana, podatci možda nisu u skladu sa stvarnim stanjem.",
        "exif-urgency-low": "Nisko ( $1 )",
        "exif-urgency-high": "Visoko ($1)",
        "exif-urgency-other": "Suradnički definiran prioritet ($1)",
-       "watchlistall2": "sve",
        "namespacesall": "sve",
        "monthsall": "sve",
-       "confirmemail": "Potvrda e-mail adrese",
+       "confirmemail": "Potvrdite adresu e-pošte",
        "confirmemail_noemail": "Niste unijeli važeću e-mail adresu u Vaše [[Special:Preferences|suradničke postavke]].",
        "confirmemail_text": "U ovom wikiju morate prije korištenja e-mail naredbi potvrditi svoju e-mail adresu. Kliknite na gumb ispod kako biste poslali poruku s potvrdom na Vašu adresu. U poruci će biti poveznica koju morate otvoriti u svom web pregledniku i time potvrditi svoju e-mail adresu.",
        "confirmemail_pending": "Već Vam je e-mailom poslan potvrdni kôd;\nako ste upravo otvorili suradnički račun, molimo pričekajte još nekoliko minuta da e-mail stigne prije nego što zatražite novi kôd.",
        "confirmemail_invalid": "Pogrešna potvrda. Kôd je možda istekao.",
        "confirmemail_needlogin": "Molimo $1 kako biste potvrdili Vašu e-mail adresu.",
        "confirmemail_success": "Vaša je e-mail adresa potvrđena. Možete se prijaviti i uživati u wikiju.",
-       "confirmemail_loggedin": "Vaša je e-mail adresa potvrđena.",
+       "confirmemail_loggedin": "Vaša je adresa e-pošte potvrđena.",
        "confirmemail_subject": "{{SITENAME}}: potvrda e-mail adrese",
-       "confirmemail_body": "Netko, vjerojatno Vi, s IP adrese $1 je otvorio\nsuradnički račun pod imenom \"$2\" s ovom e-mail adresom na {{SITENAME}}.\n\nKako biste potvrdili da je ovaj suradnički račun uistinu Vaš i\nomogućili e-mail funkcije na {{SITENAME}}, otvorite u Vašem\npregledniku sljedeću poveznicu:\n\n$3\n\nAko to *niste* Vi, slijedite ovaj link za poništavanje potvrde:\n\n$5\n\nValjanost ovog potvrdnog koda istječe na $4.",
+       "confirmemail_body": "Netko, vjerojatno Vi, s IP adrese $1 otvorio je\nsuradnički račun pod imenom \"$2\" s ovom adresom e-pošte na {{SITENAME}}.\n\nKako biste potvrdili da je ovaj suradnički račun uistinu Vaš i\nomogućili funkcije e-pošte na {{SITENAME}}, otvorite u Vašem\npregledniku sljedeću poveznicu:\n\n$3\n\nAko to *niste* Vi, slijedite ovu poveznicu za poništavanje potvrde:\n\n$5\n\nValjanost ovog potvrdnog kȏda istječe na $4.",
        "confirmemail_body_changed": "Netko, vjerojatno Vi, s IP adrese $1,\npromijenio je adresu e-pošte suradničkog računa \"$2\" u ovu adresu na {{SITENAME}}.\n\nKako biste potvrdili da je ovaj suradnički račun uistinu Vaš te uključili\nmogućnosti e-pošte na {{SITENAME}}, otvorite u Vašem pregledniku sljedeću poveznicu:\n\n$3\n\nUkoliko suradnički račun *ne* pripada Vama, slijedite ovu poveznicu\nza poništavanje potvrde adrese e-pošte:\n\n$5\n\nValjanost ovog potvrdnog koda istječe $4.",
        "confirmemail_body_set": "Netko, najvjerojatnije vi, s IP adrese $1,\notvorio je suradnički račun pod imenom \"$2\" s ovom adresom e-pošte na {{SITENAME}}.\n\nKako biste potvrdili da je ovaj suradnički račun uistinu vaš i uključili \nmogućnosti e-poruka na {{SITENAME}}, otvorite u vašem pregledniku sljedeću poveznicu:\n\n$3\n\nAko ovaj suradnički račun *ne* pripada vama, slijedite ovaj link \nkako biste poništili potvrdu adrese elektroničke pošte:\n\n$5\n\nValjanost ovog potvrdnog kȏda istječe u $4",
        "confirmemail_invalidated": "Potvrda E-mail adrese je otkazana",
        "logentry-upload-overwrite": "$1 је {{GENDER:$2|postavio|postavila}} novu inačicu $3",
        "logentry-upload-revert": "$1 је {{GENDER:$2|postavio|postavila}} $3",
        "rightsnone": "(suradnik)",
+       "revdelete-summary": "sažetak",
        "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:",
index d51bf83..301fa9c 100644 (file)
        "passwordreset-emailsent-capture": "En Passwortzurücksetzung-E-Mail woard versandt, die unne oongezeicht weard.",
        "passwordreset-emailerror-capture": "Die unne oongezeichte Passwortzurücksetzungs-E-Mail woard generiert, awer der Versand an {{GENDER:$2|den Benutzer|die Benutzrin}} ist gescheitert: $1",
        "changeemail": "E-Mail-Adress ännre",
-       "changeemail-header": "E-Mail-Adress ännre",
        "changeemail-text": "Füll das Formular vollständig aus, um dein E-Mail-Adress zu ännre. Du musst dein Passwort oongewe, um die Ännrung zu bestätiche.",
        "changeemail-no-info": "Du musst dich oonmelde, um uff die Seit direkt zuzugreife.",
        "changeemail-oldemail": "Aktuell E-Mail-Adress:",
        "changeemail-none": "(ken)",
        "changeemail-password": "Dein {{SITENAME}}-Passwort:",
        "changeemail-submit": "E-Mail-Adress ännre",
-       "changeemail-cancel": "Abbreche",
        "changeemail-throttled": "Du host keerzlich zu viele Oonmeldversuche unnernomm.\nBittachön woort $1, bevoar du das erneit versuchst.",
        "resettokens": "Tokens zurücksetze",
        "resettokens-text": "Du kannst Tokens zurücksetze, wo dir den Zugriff uff bestimmte private Date ermöchliche, wo mit deinem Benutzerkonto hier verknüpft sind.\n\nDu sollst das nuar mache, wenn du verguckt die Tokens versiehntlich mit jemandem geteilt host orrer dein Konto gefährdet ist.",
        "mergehistory-same-destination": "Ausgangs- und Zielseit deerfe net identisch sin",
        "mergehistory-reason": "Grund:",
        "mergelog": "Vereinichungs-Logbuch",
-       "pagemerge-logentry": "vereinichte [[$1]] in [[$2]] (Versione bis $3)",
        "revertmerge": "Vereinichung rückgängich mache",
        "mergelogpagetext": "Das ist das Logbuch von der vereinichte Versionsgeschichte.",
        "history-title": "$1: Versionsgeschicht",
        "searchall": "alle",
        "showingresults": "Hier {{PLURAL:$1|ist '''1''' Ergebnis|sind '''$1''' Ergebnisse}}, beginnend mit Nummer '''$2.'''",
        "showingresultsinrange": "Unne {{PLURAL:$1|weard <strong>en</strong> Ergebnis|werre bis zu <strong>$1</strong> Ergebnisse}} im Bereich <strong>$2</strong> bis <strong>$3</strong> oongezeicht.",
-       "showingresultsheader": "{{PLURAL:$5|Ergebnis '''$1''' von '''$3'''|Ergebnisse '''$1–$2''' von '''$3'''}} für '''$4'''",
        "search-nonefound": "Zu deiner Suchoonfroch wore ken Ergebnisse gefund.",
        "powersearch-legend": "Erweiterte Such",
        "powersearch-ns": "Such in Noomeräume:",
        "randomincategory": "Zufälliche Seit von en Kategorie",
        "randomincategory-invalidcategory": "\"$1\" ist ken gülticher Kategorieenoome.",
        "randomincategory-nopages": "Es gebt kene Seite in [[:Category:$1]].",
-       "randomincategory-selectcategory": "Zufälliche Seit aus der Kategorie: $1 $2",
-       "randomincategory-selectcategory-submit": "Geh, los",
        "randomredirect": "Zufällich Weiterleitung",
        "randomredirect-nopages": "Im Noomeraum „$1“ sind ken Weiterleitunge voarhand.",
        "statistics": "Statistik",
        "statistics-header-pages": "Seitestatistik",
        "statistics-header-edits": "Bearbeitungsstatistik",
-       "statistics-header-views": "Seitenuffrufstatistik",
        "statistics-header-users": "Benutzerstatistik",
        "statistics-header-hooks": "Annre Statistike",
        "statistics-articles": "Inhaltsseite",
        "statistics-files": "Hochgeloodne Dateie",
        "statistics-edits": "Seitebeoorbeitunge",
        "statistics-edits-average": "Beoorbeitunge pro Seit im Doorrichschnitt",
-       "statistics-views-total": "Seitenuffrufe gesamt",
-       "statistics-views-total-desc": "Uffruf net voarhandner Seite und von Spezialseite werre net berücksichticht.",
-       "statistics-views-peredit": "Jede Beoorbeitung ehre Seiteuffrufe",
        "statistics-users": "Registrierte [[Special:ListUsers|Benutzer]]",
        "statistics-users-active": "Aktive Benutzer",
        "statistics-users-active-desc": "Benutzer mit Beoorbeitunge {{PLURAL:$1|während (im verloof von) der letzte 24 Stunde|während (im verloof von) der vergangne $1 Tooche}}",
-       "statistics-mostpopular": "Meistbesuchte Seite",
        "pageswithprop": "Seite mit en Seiteneichenschaft",
        "pageswithprop-legend": "Seite mit en Seiteeichenschaft",
        "pageswithprop-text": "Die Spezialseit tut Seite ufflistiere, wo en bestimmte Seiteeichenschaft verwenne.",
        "uncategorizedtemplates": "Net kategorisierte Vorlage",
        "unusedcategories": "Verwaiste Kategorie",
        "unusedimages": "Verwaiste Dateie",
-       "popularpages": "Beliebteste Seite",
        "wantedcategories": "Gewünschte Kategorie",
        "wantedpages": "Gewünschte Seite",
        "wantedpages-badtitle": "Ungülticher Titel im Ergebnis: $1",
        "querypage-disabled": "Die Spezialseit woard aus Gründe von der Leistungserhaltung deaktiviert.",
        "booksources": "ISBN-Suche",
        "booksources-search-legend": "Such noh Bezugsquelle für Bücher",
-       "booksources-go": "Suche",
        "booksources-text": "Dies ist en List mit Links zu Internetseite, wo neie und gebrauchte Bücher verkoofe. Dort kann das ooch weitre Informationen üwer die Bücher gebe. {{SITENAME}} ist mit kenem von der Oonbieter geschäftlich verbünd.",
        "booksources-invalid-isbn": "Vermutlich ist die ISBN ungültich.\nBittschön prüf, ob die korrekt von der Quell üwertroohr woard.",
        "specialloguserlabel": "Ausführender Benutzer:",
        "watchlist-details": "Du beobachtest {{PLURAL:$1|en Seit|$1 Seite}}, ohne dass Diskussionsseite getrennt gezählt werre.",
        "wlheader-enotif": "Der E-Mail-Benachrichtigungsdienst ist aktiviert.",
        "wlheader-showupdated": "Seite mit noch net gesiehne Ännrunge werre'''fett''' dorgestellt.",
-       "wlshowlast": "Zeich die Ännrunge von der letzte $1 Stunde, $2 Tooch orrer $3.",
+       "wlshowlast": "Zeich die Ännrunge von der letzte $1 Stunde, $2 Tooch orrer .",
        "watchlist-options": "Oonzeichoptione",
        "watching": "Beobachte …",
        "unwatching": "Netmehr beobachte …",
        "import": "Seite importiere",
        "importinterwiki": "Transwiki-Import",
        "import-interwiki-text": "Wähl en Wiki und en Seit für se importiere.\nDie Versionsdate und Benutzernoome bleibe dabei erhalt.\nAll Transwiki-Import-Aktione werre im [[Special:Log/import|Import-Logbuch]] protokolliert.",
-       "import-interwiki-source": "Quell-Wiki/-Seit:",
        "import-interwiki-history": "Alle Versione von der Seit importiere",
        "import-interwiki-templates": "Alle Vorlooche einschliesse",
        "import-interwiki-submit": "Importiere",
        "pageinfo-robot-policy": "Indizierung doorrich Suchmaschine",
        "pageinfo-robot-index": "Erlaubt",
        "pageinfo-robot-noindex": " Net erlaubt",
-       "pageinfo-views": "Oonzoohl von der Seiteuffrufe",
        "pageinfo-watchers": "Oonzoohl von der Seit ehr Beobachter",
        "pageinfo-few-watchers": "Wenicher wie {{PLURAL:$1|ein|$1}} Beobachter",
        "pageinfo-redirects-name": "Oonzoohl von der Weiterleitunge zu der Seit",
        "exif-urgency-low": "Niedrich ($1)",
        "exif-urgency-high": "Hoch ($1)",
        "exif-urgency-other": "Benutzerdefinierte Priorität ($1)",
-       "watchlistall2": "all",
        "namespacesall": "all",
        "monthsall": "all",
        "confirmemail": "E-Mail-Adress bestätiche (Authentifizierung)",
index 7f7e3ac..ee5c85e 100644 (file)
@@ -11,7 +11,8 @@
                        "Tchoř",
                        "Tlustulimu",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Mikławš"
                ]
        },
        "tog-underline": "Wotkazy podšmórnić:",
        "perfcached": "Slědowace daty pochadźeja z pufrowaka a njejsu snano cyle aktualne. Maksimalnje {{PLURAL:$1|jedyn wuslědk|$1 wuslědkaj|$1 wuslědki|$1 wuslědkow}} w pufrowaku k dispoziciji {{PLURAL:$1|steji|stejitej|steja|steji}}.",
        "perfcachedts": "Slědowace daty su z pufrowaka a buchu $1 posledni raz zaktualizowane. Maksimalnje {{PLURAL:$4|jedyn wuslědk|$4 wuslědkaj|$4 wuslědki|$4 wuslědkow}} w pufrowaku k dispoziciji {{PLURAL:$4|steji|stejitej|steja|steji}}.",
        "querypage-no-updates": "Aktualizacije za tutu stronu su tuchwilu znjemóžnjene. Daty so hač na dalše njewobnowja.",
-       "viewsource": "žórÅ\82o wobhladaÄ\87",
+       "viewsource": "ŽórÅ\82owy tekst",
        "viewsource-title": "Žórłowy tekst za $1 sej wobhladać",
        "actionthrottled": "Akcije wobmjezowane",
        "actionthrottledtext": "Jako připrawa přećiwo spamej, je častosć wuwjedźenja tuteje akcije w krótkej dobje wobmjezowana a ty sy tutón limit překročił. Prošu spytaj za něšto mjeńšiny hišće raz.",
        "passwordreset-emailsent-capture": "E-mejl za anulowanje hesła je so pósłała, kotraž so deleka pokazuje.",
        "passwordreset-emailerror-capture": "E-mejl za anulowanje hesła je so wutworiła, kotraž so deleka pokazuje, ale słanje {{GENDER:$2|wužiwarjej|wužiwarce}} je so njeporadźiło: $1",
        "changeemail": "E-mejlowu adresu změnić",
-       "changeemail-header": "Kontowu e-mejlowu adresu změnić",
        "changeemail-text": "Wupjelń tutón formular, zo by swoju e-mejlowu adresu změnił. Dyrbiš swoje hesło zapodać, zo by tutu změnu wobkrućił.",
        "changeemail-no-info": "Dyrbiš so přizjewić, zo by direktny přistup na tutu stronu měł.",
        "changeemail-oldemail": "Aktualna e-mejlowa adresa:",
        "changeemail-none": "(žana)",
        "changeemail-password": "Twoje hesło za {{GRAMMAR:akuzatiw|{{SITENAME}}}}",
        "changeemail-submit": "E-mejlowu adresu změnić",
-       "changeemail-cancel": "Přetorhnyć",
        "changeemail-throttled": "Sy přehusto spytał so přizjewić.\nPočakaj prošu $1, prjedy hač hišće raz spytaš.",
        "resettokens": "Tokeny wróćo stajić",
        "resettokens-text": "Móžeš tokeny wróćo stajić, kotrež přistup na wěste priwatne daty dowoleja, kotrež su z twojim kontom zwjazane.\n\nTy dyrbjał zo činić, jeli sy je zmylnje z někim dźělił abo jelic twoje konto je so napadało.",
        "mergehistory-same-destination": "Žórłowa a cilowa strona njesmějetej identiskej być",
        "mergehistory-reason": "Přičina:",
        "mergelog": "Protokol zjednoćenja",
-       "pagemerge-logentry": "[[$1]] z [[$2]] zjednoćeny (do $3 {{PLURAL:$3|wersije|wersijow|wersijow|wersijow}})",
        "revertmerge": "Zjednoćenje cofnyć",
        "mergelogpagetext": "Deleka je lisćina najaktualnišich zjednoćenjow stawiznow dweju stronow.",
        "history-title": "$1: Wersijowe stawizny",
        "searchall": "wšě",
        "showingresults": "Deleka so hač {{PLURAL:$1|'''1''' wuslědk pokazuje|'''$1''' wuslědkaj pokazujetej|'''$1''' wuslědki pokazuja|'''$1''' wuslědkow pokazuje}}, započinajo z #'''$2'''.",
        "showingresultsinrange": "Deleka so do {{PLURAL:$1|<strong>1</strong> wuslědka|<strong>$1</strong> wuslědkow}} we wobłuku <strong>$2</strong> hač do <strong>$3</strong> pokazuje.",
-       "showingresultsheader": "{{PLURAL:$5|Wuslědk '''$1''' z '''$3'''|Wuslědki '''$1 - $2''' z '''$3'''}} za '''$4'''",
        "search-nonefound": "Njebuchu wuslědki namakane, kotrež naprašowanju wotpowěduja.",
        "powersearch-legend": "Rozšěrjene pytanje",
        "powersearch-ns": "W mjenowych rumach pytać:",
        "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>).",
-       "rclistfrom": "Nowe změny pokazać, započinajo z $3 $2",
+       "rclistfrom": "Jenož změny wot $3, $2 pokazać.",
        "rcshowhideminor": "snadne změny $1",
-       "rcshowhideminor-show": "Pokazać",
-       "rcshowhideminor-hide": "Schować",
+       "rcshowhideminor-show": "pokazać",
+       "rcshowhideminor-hide": "schować",
        "rcshowhidebots": "Boćiki $1",
-       "rcshowhidebots-show": "Pokazać",
-       "rcshowhidebots-hide": "Schować",
+       "rcshowhidebots-show": "pokazać",
+       "rcshowhidebots-hide": "schować",
        "rcshowhideliu": "Zregistrowani wužiwarjo $1",
-       "rcshowhideliu-show": "Pokazać",
-       "rcshowhideliu-hide": "Schować",
+       "rcshowhideliu-show": "pokazać",
+       "rcshowhideliu-hide": "schować",
        "rcshowhideanons": "Anonymni wužiwarjo $1",
-       "rcshowhideanons-show": "Pokazać",
-       "rcshowhideanons-hide": "Schować",
+       "rcshowhideanons-show": "pokazać",
+       "rcshowhideanons-hide": "schować",
        "rcshowhidepatr": "Dohladowane změny $1",
        "rcshowhidepatr-show": "Pokazać",
        "rcshowhidepatr-hide": "Schować",
        "rcshowhidemine": "moje změny $1",
-       "rcshowhidemine-show": "Pokazać",
-       "rcshowhidemine-hide": "Schować",
-       "rclinks": "Poslednje $1 změnow poslednich $2 dnjow pokazać<br />$3",
+       "rcshowhidemine-show": "pokazać",
+       "rcshowhidemine-hide": "schować",
+       "rclinks": "Pokazuj poslednje $1 změny poslednich $2 dnjow.<br />$3",
        "diff": "rozdźěl",
        "hist": "wersije",
        "hide": "schować",
        "randomincategory": "Připadna strona w kategoriji",
        "randomincategory-invalidcategory": "\"$1\" płaćiwe kategorijowe mjeno njeje.",
        "randomincategory-nopages": "W kategoriji [[:Category:$1|$1]] žane strony njejsu.",
+       "randomincategory-category": "Kategorija:",
+       "randomincategory-legend": "Připadna strona w kategoriji",
        "randomredirect": "Připadne daleposrědkowanje",
        "randomredirect-nopages": "Žane daleposrědkowanja w mjenowym rumje \"$1\".",
        "statistics": "Statistika",
        "statistics-header-pages": "Statistika stronow",
        "statistics-header-edits": "Wobdźěłanska statistika",
-       "statistics-header-views": "Statistiku wobhladać",
        "statistics-header-users": "Statistika wužiwarjow",
        "statistics-header-hooks": "Druha statistika",
        "statistics-articles": "Wobsahowe strony",
        "statistics-files": "Nahrate dataje",
        "statistics-edits": "Změny stronow wot załoženja {{SITENAME}}",
        "statistics-edits-average": "Změny na stronu w přerězku",
-       "statistics-views-total": "Zwobraznjenja dohromady",
-       "statistics-views-total-desc": "Pohlady do njeeksistowacych stronow a specialnych stronow njejsu zapřijate",
-       "statistics-views-peredit": "Zwobraznjenja na změnu",
        "statistics-users": "Zregistrowani [[Special:ListUsers|wužiwarjo]]",
        "statistics-users-active": "Aktiwni wužiwarjo",
        "statistics-users-active-desc": "Wužiwarjo, kotřiž su {{PLURAL:$1|wčera|w zańdźenymaj $1 dnjomaj|w zańdźenych $1 dnjach|w zańdźenych $1 dnjach}} aktiwni byli",
-       "statistics-mostpopular": "Najhusćišo wopytowane strony",
        "pageswithprop": "Strony z kajkosću strony",
        "pageswithprop-legend": "Strony z kajkosću strony",
        "pageswithprop-text": "Tuta strona nalistuje strony, kotrež wěstu kajkosć strony wužiwaja.",
        "uncategorizedtemplates": "Njekategorizowane předłohi",
        "unusedcategories": "Njewužiwane kategorije",
        "unusedimages": "Njewužiwane dataje",
-       "popularpages": "Často wopytowane strony",
        "wantedcategories": "Požadane kategorije",
        "wantedpages": "Požadane strony",
        "wantedpages-badtitle": "Njepłaćiwy titul we wuslědku: $1",
        "querypage-disabled": "Tuta specialna strona je z wukonowych přičinow znjemóžnjena.",
        "booksources": "Pytanje po ISBN",
        "booksources-search-legend": "Žórła za knihi pytać",
-       "booksources-go": "Pytać",
        "booksources-text": "To je lisćina wotkazow k druhim sydłam, kotrež nowe a trjebane knihi předawaja. Tam móžeš tež dalše informacije wo knihach dóstać, kotrež pytaš:",
        "booksources-invalid-isbn": "Podate ISBN-čisło njezda so płaćiwe być; přepruwuj za zmylkami, z tym zo z orginialneho žórła kopěruješ.",
        "specialloguserlabel": "Wukonjer:",
        "wlheader-enotif": "E-mejlowa zdźělenska słužba je zmóžnjena.",
        "wlheader-showupdated": "Strony, kotrež su so po twojim poslednim wopyće změnili, so '''tučne''' pokazuja.",
        "wlnote": "Deleka {{PLURAL:$1|je poslednja změna|stej poslednjej '''$1''' změnje|su poslednje '''$1''' změny|je poslednich '''$1''' změnow}} za {{PLURAL:$2|poslednju hodźinu|poslednje '''$2''' hodźinje|poslednje '''$2''' hodźiny|poslednje '''$2''' hodźin}}, staw : $3, $4.",
-       "wlshowlast": "Poslednje $1 hodź. - $2 dnjow - $3 pokazać",
+       "wlshowlast": "Poslednje $1 hodź. - $2 dnjow -  pokazać",
        "watchlist-options": "Opcije wobkedźbowankow",
        "watching": "Wobkedźbuju…",
        "unwatching": "Njewobkedźbuju…",
        "pageinfo-robot-policy": "Indicěrowanje přez roboty",
        "pageinfo-robot-index": "Dowoleny",
        "pageinfo-robot-noindex": "Zakazany",
-       "pageinfo-views": "Ličba zwobraznjenjow",
        "pageinfo-watchers": "Ličba wobkedźbowarjow strony",
        "pageinfo-few-watchers": "Mjenje hač $1 {{PLURAL:$1|wobkedźbowar|wobkedźbowarjej|wobkedźbowarje|wobkedźbowarjow}}",
        "pageinfo-redirects-name": "Ličba dalesposrědkowanjow k tutej stronje",
        "exif-urgency-low": "Niska ($1)",
        "exif-urgency-high": "Wysoka ($1)",
        "exif-urgency-other": "Swójska priorita ($1)",
-       "watchlistall2": "wšě",
        "namespacesall": "wšě",
        "monthsall": "wšě",
        "confirmemail": "Emailowu adresu wobkrućić",
        "logentry-upload-overwrite": "$1 je nowu wersiju $3 {{GENDER:$2|nahrał|nahrała}}",
        "logentry-upload-revert": "$1 je $3 {{GENDER:$2|nahrał|nahrała}}",
        "rightsnone": "(ničo)",
+       "revdelete-summary": "zjeće wobdźěłać",
        "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ć:",
index f006760..cc114db 100644 (file)
        "pager-older-n": "{{PLURAL:$1|pi vye|$1 pi vye yo}}",
        "booksources": "Ouvraj referans yo",
        "booksources-search-legend": "Chache nan lis ouvraj ki sèvi pou referans",
-       "booksources-go": "Ale",
        "specialloguserlabel": "itilizatè :",
        "speciallogtitlelabel": "Tit :",
        "log": "Jounal yo",
        "watchthispage": "Swiv paj sa a",
        "unwatch": "Pa swiv ankò",
        "watchlist-details": "W ap swiv {{PLURAL:$1|paj|paj}}, san konte paj diskisyon yo.",
-       "wlshowlast": "Montre dènye $1 è yo, dènye $2 jou yo, oubyen $3.",
+       "wlshowlast": "Montre dènye $1 è yo, dènye $2 jou yo, oubyen .",
        "watchlist-options": "Opsyon pou lis swivi",
        "watching": "Swiv...",
        "unwatching": "Fini swiv paj sa a...",
        "metadata-expand": "Montre detay konplè yo",
        "metadata-collapse": "Kache enfòmasyon ak tout detay yo",
        "metadata-fields": "Chan metadone EXIF ki liste nan mesaj sa a ap parèt nan paj deskripsyon imaj la lè tab metadone a ap pi piti. Lòt chan yo ap kache pa defo.\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",
-       "watchlistall2": "tout",
        "namespacesall": "Tout",
        "monthsall": "tout",
        "watchlisttools-view": "Wè chanjman enpòtan yo",
        "version": "Vèsyon",
        "specialpages": "Paj espesyal yo",
        "htmlform-reset": "Revoke chanjman yo",
-       "revdelete-restricted": "aplike restriksyon sa yo pou administratè yo"
+       "revdelete-restricted": "aplike restriksyon sa yo pou administratè yo",
+       "revdelete-summary": "somè pou modifikasyon"
 }
index 8c2f8aa..3b924e1 100644 (file)
@@ -35,7 +35,9 @@
                        "Xbspiro",
                        "아라",
                        "Csega",
-                       "ViDam"
+                       "ViDam",
+                       "Adam78",
+                       "Grin"
                ]
        },
        "tog-underline": "Hivatkozások aláhúzása:",
        "otherlanguages": "Más nyelveken",
        "redirectedfrom": "($1 szócikkből átirányítva)",
        "redirectpagesub": "Átirányító lap",
+       "redirectto": "Átirányítás ide:",
        "lastmodifiedat": "A lap utolsó módosítása: $1, $2",
        "viewcount": "Ezt a lapot {{PLURAL:$1|egy|$1}} alkalommal keresték fel.",
        "protectedpage": "Védett lap",
        "jumptonavigation": "navigáció",
        "jumptosearch": "keresés",
        "view-pool-error": "A szerverek jelenleg túl vannak terhelve, mert túl sok felhasználó próbálta megtekinteni ezt az oldalt.\nKérjük, várj egy kicsit, mielőtt újra próbálkoznál a lap megtekintésével!\n\n$1",
-       "generic-pool-error": "Sajnálom, a szerverek jelenleg túl vannak terhelve.\nTúl sok felhasználó próbálja ezt az oldalt megtekinteni.\nKérjük, várj egy kicsit, mielőtt újra próbálkoznál az oldal megtekintésével!",
+       "generic-pool-error": "Sajnáljuk, a szerverek jelenleg túl vannak terhelve.\nTúl sok felhasználó próbálja ezt az erőforrást elérni.\nKérjük, várj egy kicsit, mielőtt újra próbálkoznál!",
        "pool-timeout": "Letelt a zárolás feloldására szánt várakozási idő",
        "pool-queuefull": "A pool sor megtelt",
        "pool-errorunknown": "Ismeretlen hiba",
        "versionrequired": "A MediaWiki $1 verziója szükséges",
        "versionrequiredtext": "A lap használatához a MediaWiki $1 verziójára van szükség.\nTovábbi információkat a [[Special:Version|verzióinformációs lapon]] találsz.",
        "ok": "OK",
+       "pagetitle": "$1 – {{SITENAME}}",
        "retrievedfrom": "A lap eredeti címe: „$1”",
        "youhavenewmessages": "$1 a vitalapodon! ($2 külön is megtekintheted.)",
        "youhavenewmessagesfromusers": "$2 kaptál {{PLURAL:$3|egy|$3}} szerkesztőtől $1!",
        "hidetoc": "elrejtés",
        "collapsible-collapse": "becsuk",
        "collapsible-expand": "kinyit",
+       "confirmable-confirm": "Biztos {{GENDER:$1|vagy}} benne?",
+       "confirmable-yes": "Igen",
+       "confirmable-no": "Nem",
        "thisisdeleted": "$1 megtekintése vagy helyreállítása?",
        "viewdeleted": "$1 megtekintése?",
        "restorelink": "{{PLURAL:$1|Egy|$1}} törölt szerkesztés",
        "badarticleerror": "Ez a tevékenység nem végezhető el ezen a lapon.",
        "cannotdelete": "A(z) $1 lapot vagy fájlt nem lehet törölni.\nTalán már valaki más törölte.",
        "cannotdelete-title": "Nem lehet törölni a(z) „$1” lapot",
-       "delete-hook-aborted": "A törlés meg lett szakítva egy hook által.\nNem lett magyarázat csatolva.",
+       "delete-hook-aborted": "A törlést egy hook (szűrő) megszakította.\nNincs csatolt magyarázat hozzá.",
        "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 a címekben nem használhatóak.",
+       "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.",
        "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.",
        "createaccount-text": "Valaki létrehozott számodra egy \"$2\" nevű {{SITENAME}}-azonosítót ($4).\nA hozzá tartozó jelszó \"$3\", melyet a bejelentkezés után minél előbb változtass meg.\n\nHa nem kértél új azonosítót, és tévedésből kaptad ezt a levelet, hagyd figyelmen kívül.",
        "login-throttled": "Túl sok hibás bejelentkezés.\nVárj $1, mielőtt újra próbálkozol.",
        "login-abort-generic": "A bejelentkezés sikertelen – megszakítva",
+       "login-migrated-generic": "A fiók áttelepítése megtörtént, felhasználóneved már nem létezik ezen a wikin.",
        "loginlanguagelabel": "Nyelv: $1",
        "suspicious-userlogout": "A kijelentkezési kérésed vissza lett utasítva, mert úgy tűnik, hogy egy hibás böngésző vagy gyorsítótárazó proxy küldte.",
        "createacct-another-realname-tip": "A valódi nevet nem kötelező megadni, de ha úgy döntesz, hogy megadod, azzal leszel feltüntetve a munkád szerzőjeként.",
        "resetpass-expired-soft": "A jelszavad lejárt, ezért újat kell beállítanod. Válassz most egy új jelszót, vagy kattints a {{int:resetpass-submit-cancel}} gombra, ha később akarod csak beállítani.",
        "resetpass-validity-soft": "Adj meg egy új jelszót most, vagy kattints a \"{{int:resetpass-submit-cancel}}\" gombra, ha később akarod megadni.",
        "passwordreset": "Jelszó törlése",
-       "passwordreset-text-one": "A jelszavad alaphelyzetbe állításához töltsd ki az űrlapot.",
+       "passwordreset-text-one": "A jelszó átmeneti beállításához töltsd ki az űrlapot.",
        "passwordreset-text-many": "{{PLURAL:$1|Az átmeneti jelszó elküldéséhez töltsd ki az alábbi mezők egyikét.}}",
        "passwordreset-legend": "Új jelszó kérése",
        "passwordreset-disabled": "Új jelszó kérése nem engedélyezett ezen a wikin.",
        "passwordreset-emailsent-capture": "Az alább látható jelszó-visszaállító e-mail lett elküldve.",
        "passwordreset-emailerror-capture": "A jelszó-visszaállító e-mail generálása megtörtént, mint az alább látszik, de elküldése a {{GENDER:$2|szerkesztőnek}} nem sikerült: $1",
        "changeemail": "E-mail cím megváltoztatása",
-       "changeemail-header": "A fiókhoz tartozó e-mail cím megváltoztatása",
        "changeemail-text": "Az e-mail címed megváltoztatásához ki kell töltened az alábbi űrlapot. Megerősítésképpen meg kell adnod a jelszavadat is.",
        "changeemail-no-info": "A lap közvetlen eléréséhez be kell jelentkezned.",
        "changeemail-oldemail": "Jelenlegi e-mail cím:",
        "changeemail-none": "(nincs)",
        "changeemail-password": "A {{SITENAME}} jelszavad:",
        "changeemail-submit": "E-mail cím megváltoztatása",
-       "changeemail-cancel": "Mégse",
        "changeemail-throttled": "Túl sok hibás bejelentkezés.\nVárj $1, mielőtt újra próbálkozol.",
        "resettokens": "Tokenek törlése",
        "resettokens-no-tokens": "Nincs újragenerálható token.",
        "showpreview": "Előnézet megtekintése",
        "showdiff": "Változtatások megtekintése",
        "blankarticle": "<strong>Figyelem:</strong> A létrehozandó szócikk üres.\nHa ismét a \"{{int:savearticle}}\" gombra kattintasz, a szócikket tartalom nélkül fogod létrehozni.",
-       "anoneditwarning": "'''Figyelem:''' Nem vagy bejelentkezve, ha szerkesztesz, az IP-címed látható lesz a laptörténetben.",
+       "anoneditwarning": "<strong>Figyelem:</strong> Nem vagy bejelentkezve. Ha szerkesztesz, az IP-címed nyilvánosan látható lesz a laptörténetben. Ha <strong>[$1 bejelentkezel]</strong> vagy <strong>[$2 regisztrálsz]</strong>, a szerkesztéseid a felhasználónevedhez lesznek társítva, egyéb hasznos dolgok mellett.",
        "anonpreviewwarning": "''Nem vagy bejelentkezve. A mentéskor az IP-címed rögzítve lesz a laptörténetben.''",
        "missingsummary": "'''Emlékeztető:''' Nem adtál meg szerkesztési összefoglalót. Ha összefoglaló nélkül akarod elküldeni a szöveget, kattints újra a mentésre.",
        "missingcommenttext": "Kérjük, írj összefoglalót a szerkesztésedhez.",
        "content-model-text": "egyszerű szöveg",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Dupla paramétermegadást tartalmazó lapok",
        "expensive-parserfunction-warning": "Figyelem: ezen a lapon túl sok erőforrásigényes elemzőfüggvény-hívás található.\n\nKevesebb, mint {{PLURAL:$2|egy|$2}} kellene, jelenleg {{PLURAL:$1|egy|$1}} van.",
        "expensive-parserfunction-category": "Túl sok költséges elemzőfüggvény-hívást tartalmazó lapok",
        "post-expand-template-inclusion-warning": "Figyelem: a beillesztett sablonok mérete túl nagy.\nNéhány sablon nem fog megjelenni.",
        "parser-template-loop-warning": "Végtelen ciklus a következő sablonban: [[$1]]",
        "parser-template-recursion-depth-warning": "A sablon rekurzív beillesztésének mélysége átlépte a határérékét ($1)",
        "language-converter-depth-warning": "A nyelvátalakító rekurzióinak száma túllépve ($1)",
-       "node-count-exceeded-category": "Lapok, ahogy a csomópont szám túl nagy",
-       "node-count-exceeded-category-desc": "Azon oldalaknak a kategóriája, ahol a csomópont szám túl nagy.",
-       "node-count-exceeded-warning": "Az oldal meghaladta a csomópont számot",
+       "node-count-exceeded-category": "Lapok, ahogy a csomópontszám túl nagy",
+       "node-count-exceeded-category-desc": "A lap túllépi a maximális csomópontszámot.",
+       "node-count-exceeded-warning": "Az oldal meghaladta a csomópontszámot",
        "expansion-depth-exceeded-category": "Lapok, melyeken a sablonok kibontása meghaladja a megengedett szintet",
        "expansion-depth-exceeded-warning": "A lap meghaladta az engedélyezett kiterjesztési mélységet",
        "parser-unstrip-loop-warning": "Unstrip hurok észlelve",
        "mergehistory-same-destination": "A forrás- és a céllap nem egyezhet meg",
        "mergehistory-reason": "Ok:",
        "mergelog": "Egyesítési napló",
-       "pagemerge-logentry": "[[$1]] és [[$2]] egyesítve ($3 változatig)",
        "revertmerge": "Szétválasztás",
        "mergelogpagetext": "A lapok egyesítéséről szóló napló. Szűkítheted a listát a műveletet végző szerkesztő, vagy az érintett oldal megadásával.",
        "history-title": "A(z) „$1” laptörténete",
        "search-result-category-size": "$1 oldal, $2 alkategória, $3 fájl",
        "search-redirect": "(átirányítva innen: $1)",
        "search-section": "($1 szakasz)",
+       "search-file-match": "(fájl tartalma egyezik)",
        "search-suggest": "Keresési javaslat: $1",
        "search-interwiki-caption": "Társlapok",
        "search-interwiki-default": "$1 találatok:",
        "searchrelated": "kapcsolódó",
        "searchall": "mind",
        "showingresults": "Lent '''{{PLURAL:$1|egy|$1}}''' találat látható, az eleje '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|'''$1'''|'''$1 - $2'''}}. találat a(z) '''$4''' kifejezésre (összesen: '''$3''')",
        "search-nonefound": "Nincs egyezés a megadott szöveggel.",
        "powersearch-legend": "Részletes keresés",
        "powersearch-ns": "Névterek:",
        "preferences": "Beállítások",
        "mypreferences": "Beállítások",
        "prefs-edits": "Szerkesztéseid száma:",
-       "prefsnologintext2": "Kérjük jelentkezzen be a beállítások módosításához.",
+       "prefsnologintext2": "Kérjük, jelentkezz be a beállítások módosításához.",
        "prefs-skin": "Felület",
        "skin-preview": "előnézet",
        "datedefault": "Nincs beállítás",
        "prefs-advancedwatchlist": "Haladó beállítások",
        "prefs-displayrc": "Megjelenítési beállítások",
        "prefs-displaywatchlist": "Megjelenítési beállítások",
+       "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Eltérések (diffek)",
        "prefs-help-prefershttps": "A beállítás a legközelebbi belépés után lép érvénybe.",
        "email-address-validity-valid": "Az e-mail cím érvényesnek tűnik",
        "right-move": "lapok átnevezése",
        "right-move-subpages": "lapok átnevezése az allapjukkal együtt",
        "right-move-rootuserpages": "szerkesztői lapok mozgatása",
+       "right-move-categorypages": "kategóriák átnevezése",
        "right-movefile": "fájlok átnevezése",
        "right-suppressredirect": "nem készít átirányítást a régi néven lapok átnevezésekor",
        "right-upload": "fájlok feltöltése",
        "right-proxyunbannable": "proxyk automatikus blokkjainak megkerülése",
        "right-unblockself": "saját felhasználói fiók blokkjának feloldása",
        "right-protect": "védelmi szintek megváltoztatása és kaszkádolt védelemmel rendelkező lapok szerkesztése",
-       "right-editprotected": "\"{{int:protect-level-sysop}}\" védelmi szintű lapok szerkesztése",
+       "right-editprotected": "„{{int:protect-level-sysop}}” védelmi szintű lapok szerkesztése",
+       "right-editsemiprotected": "„{{int:protect-level-autoconfirmed}}” védelmi szintű lapok szerkesztése",
        "right-editinterface": "felhasználói felület szerkesztése",
        "right-editusercssjs": "más felhasználók CSS és JS fájljainak szerkesztése",
        "right-editusercss": "más felhasználók CSS fájljainak szerkesztése",
        "right-edituserjs": "más felhasználók JS fájljainak szerkesztése",
        "right-editmyusercss": "A saját szerkesztői CSS-fájlok szerkesztése",
        "right-editmyuserjs": "Saját szerkesztői JavaScript-fájlok szerkesztése",
-       "right-viewmywatchlist": "Saját figyelőlista megtekintése",
-       "right-editmyoptions": "Saját beállítások szerkesztése",
+       "right-viewmywatchlist": "saját figyelőlista megtekintése",
+       "right-editmywatchlist": "saját figyelőlista szerkesztése; bizonyos műveletek képesek lapok figyelőlistához adására ezen jog nélkül is",
+       "right-viewmyprivateinfo": "saját személyes adatok megtekintése (pl. e-mail cím, valódi név)",
+       "right-editmyprivateinfo": "saját személyes adatok szerkesztése (pl. e-mail cím, valódi név)",
+       "right-editmyoptions": "saját beállítások szerkesztése",
        "right-rollback": "a lap utolsó szerkesztésének gyors visszaállítása",
        "right-markbotedits": "visszaállított szerkesztések botként való jelölése",
        "right-noratelimit": "sebességkorlát figyelmen kívül hagyása",
        "action-createpage": "új lap készítése",
        "action-createtalk": "vitalap készítése",
        "action-createaccount": "felhasználói fiók elkészítése",
+       "action-history": "laptörténet megtekintése",
        "action-minoredit": "szerkesztés aprónak jelölése",
        "action-move": "lap átnevezése",
        "action-move-subpages": "lap és allapjainak átnevezése",
        "action-move-rootuserpages": "szerkesztői lapok átnevezése",
+       "action-move-categorypages": "kategóriák átnevezése",
        "action-movefile": "fájlok átnevezése",
        "action-upload": "fájl feltöltése",
        "action-reupload": "már létező fájl felülírása",
        "action-siteadmin": "adatbázis lezárása vagy felnyitása",
        "action-sendemail": "e-mailek küldése",
        "action-editmywatchlist": "saját figyelőlista szerkesztése",
+       "action-viewmywatchlist": "saját figyelőlista megtekintése",
+       "action-viewmyprivateinfo": "személyes adatok megtekintése",
+       "action-editmyprivateinfo": "személyes adatok szerkesztése",
        "nchanges": "{{PLURAL:$1|egy|$1}} változtatás",
        "enhancedrc-since-last-visit": "$1 az utolsó látogatás óta",
        "enhancedrc-history": "történet",
        "license": "Licenc:",
        "license-header": "Licenc",
        "nolicense": "Válassz licencet!",
+       "licenses-edit": "Licenc-tulajdonságok szerkesztése",
        "license-nopreview": "(Előnézet nem elérhető)",
        "upload_source_url": "(a kiválasztott fájlod egy nyilvánosan elérhető URL-ről)",
        "upload_source_file": "(a számítógépeden kiválasztott fájl)",
        "download": "letöltés",
        "unwatchedpages": "Nem figyelt lapok",
        "listredirects": "Átirányítások listája",
+       "listduplicatedfiles": "Duplikált fájlok listája",
        "unusedtemplates": "Nem használt sablonok",
        "unusedtemplatestext": "Ez a lap azon {{ns:template}} névtérbe tartozó lapokat gyűjti össze, melyek nincsenek használva egyetlen lapon sem.\nEllenőrizd a meglévő hivatkozásokat, mielőtt törölnéd őket.",
        "unusedtemplateswlh": "más hivatkozások",
        "randompage-nopages": "A következő {{PLURAL:$2|névtérben|névterekben}} nincsenek lapok: $1.",
        "randomincategory": "Véletlen lap egy kategóriából",
        "randomincategory-invalidcategory": "\"$1\" nem egy érvényes kategória neve.",
+       "randomincategory-nopages": "Nincsenek lapok a [[:Category:$1|$1]] kategóriában.",
+       "randomincategory-category": "Kategória:",
+       "randomincategory-legend": "Véletlen lap a kategóriából",
        "randomredirect": "Átirányítás találomra",
        "randomredirect-nopages": "A(z) „$1” névtérben nincsenek átirányítások.",
        "statistics": "Statisztika",
        "statistics-header-pages": "Lapstatisztikák",
        "statistics-header-edits": "Szerkesztési statisztika",
-       "statistics-header-views": "Látogatási statisztika",
        "statistics-header-users": "Szerkesztői statisztika",
        "statistics-header-hooks": "További statisztikák",
        "statistics-articles": "Tartalommal rendelkező lapok",
        "statistics-files": "Feltöltött fájlok",
        "statistics-edits": "Szerkesztések száma a(z) {{SITENAME}} indulása óta",
        "statistics-edits-average": "Szerkesztések átlagos száma laponként",
-       "statistics-views-total": "Összes megtekintés",
-       "statistics-views-total-desc": "A nem létező és speciális lapok megtekintési adatai nincsenek beleszámolva.",
-       "statistics-views-peredit": "Megtekintések szerkesztésenként",
        "statistics-users": "Regisztrált [[Speciális:Szerkesztők listája|szerkesztők]]",
        "statistics-users-active": "Aktív szerkesztők",
        "statistics-users-active-desc": "Szerkesztők, akik csináltak valamit az elmúlt {{PLURAL:$1|egy|$1}} napban",
-       "statistics-mostpopular": "Legtöbbször megtekintett lapok",
+       "pageswithprop-prop": "Tulajdonságnév:",
+       "pageswithprop-submit": "Ugrás",
        "doubleredirects": "Dupla átirányítások",
        "doubleredirectstext": "Ez a lap azokat a lapokat listázza, melyek átirányító lapokra irányítanak át.\nMinden sor tartalmaz egy hivatkozást az első, valamint a második átirányításra, valamint a második átirányítás céljára, ami általában a valódi céllap, erre kellene az első átirányításnak mutatnia.\nAz <del>áthúzott</del> sorok a lista elkészülése óta javítva lettek.",
        "double-redirect-fixed-move": "[[$1]] áthelyezve.\nAutomatikusan frissült, és mostantól a(z) [[$2]] lapra irányít át.",
        "uncategorizedtemplates": "Kategorizálatlan sablonok",
        "unusedcategories": "Nem használt kategóriák",
        "unusedimages": "Nem használt fájlok",
-       "popularpages": "Népszerű lapok",
        "wantedcategories": "Keresett kategóriák",
        "wantedpages": "Keresett lapok",
        "wantedpages-badtitle": "Érvénytelen cím található az eredményhalmazban: $1",
        "mostlinked": "Legtöbbet hivatkozott lapok",
        "mostlinkedcategories": "Legtöbbet hivatkozott kategóriák",
        "mostlinkedtemplates": "Legtöbbet hivatkozott sablonok",
-       "mostcategories": "Legtöbb kategóriába tartozó lapok",
+       "mostcategories": "Legtöbb kategóriába tartozó szócikkek",
        "mostimages": "Legtöbbet hivatkozott fájlok",
-       "mostinterwikis": "Legtöbb interwikit tartalmazó lapok",
+       "mostinterwikis": "Legtöbb interwikit tartalmazó szócikkek",
        "mostrevisions": "Legtöbbet szerkesztett lapok",
        "prefixindex": "Keresés előtag szerint",
        "prefixindex-namespace": "Összes lap adott előtaggal ($1 névtér)",
        "deadendpagestext": "Az itt található lapok nem kapcsolódnak hivatkozásokkal ezen wiki más oldalaihoz.",
        "protectedpages": "Védett lapok",
        "protectedpages-indef": "Csak a meghatározatlan idejű védelmek",
+       "protectedpages-summary": "Az alábbi speciális lap listázza azokat a már létező lapokat, melyeket levédtek az adminisztrátorok, ellentétben azokkal a lapokkal, melyeket [[{{#special:ProtectedTitles}}|létrehozás ellen]] védtek le.",
        "protectedpages-cascade": "Csak a kaszkádvédelmek",
+       "protectedpages-noredirect": "Átirányítások elrejtése",
        "protectedpagesempty": "Jelenleg nincsenek ilyen paraméterekkel védett lapok.",
        "protectedpages-timestamp": "Időbélyeg",
+       "protectedpages-page": "Lap",
        "protectedpages-expiry": "Lejárat",
+       "protectedpages-performer": "A levédést végrehajtó szerkesztő",
+       "protectedpages-params": "A védelem paraméterei",
        "protectedpages-reason": "Indoklás",
        "protectedpages-unknown-timestamp": "Ismeretlen",
        "protectedpages-unknown-performer": "Ismeretlen felhasználó",
        "protectedtitles": "Létrehozás ellen védett lapok",
+       "protectedtitles-summary": "Az alábbi speciális lap listázza azokat a nem létező címeket, melyeket létrehozás ellen védtek le az adminisztrátorok, ellentétben azokkal a [[{{#special:ProtectedPages}}|létező lapokkal]], melyeket módosítás ellen védtek le.",
        "protectedtitlesempty": "Jelenleg nincsenek ilyen típusú védett lapok.",
        "listusers": "Szerkesztők",
        "listusers-editsonly": "Csak a szerkesztéssel rendelkező szerkesztők mutatása",
        "listusers-creationsort": "Rendezés létrehozási dátum szerint",
+       "listusers-desc": "Rendezés csökkenő sorrendben",
        "usereditcount": "{{PLURAL:$1|egy|$1}} szerkesztés",
        "usercreated": "{{GENDER:$3|Létrehozva}} $1, $2-kor",
        "newpages": "Új lapok",
        "pager-older-n": "{{PLURAL:$1|1 régebbi|$1 régebbi}}",
        "suppress": "adatvédelmi biztos",
        "querypage-disabled": "Ez a speciális lap a megfelelő teljesítmény fenntartása érdekében le van tiltva.",
+       "apihelp": "API segítség",
+       "apihelp-no-such-module": "A(z) „$1\" modul nem található.",
        "booksources": "Könyvforrások",
        "booksources-search-legend": "Könyvforrások keresése",
-       "booksources-go": "Keresés",
+       "booksources-search": "Keresés",
        "booksources-text": "Alább látható a másik webhelyekre mutató hivatkozások listája, ahol új és használt könyveket árulnak, és\ntovábbi információkat lelhetsz ott az általad keresett könyvekről:",
        "booksources-invalid-isbn": "A megadott ISBN hibásnak tűnik; ellenőrizd, hogy jól másoltad-e át az eredeti forrásból.",
        "specialloguserlabel": "Szerkesztő:",
        "listgrouprights-removegroup-self": "eltávolíthatja a következő {{PLURAL:$2|csoportból|csoportokból}} a saját fiókját: $1",
        "listgrouprights-addgroup-self-all": "az összes csoportot hozzáadhatja a saját fiókjához",
        "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",
+       "trackingcategories-name": "Üzenetnév",
        "trackingcategories-nodesc": "Nem található leírás.",
        "trackingcategories-disabled": "A kategória le van tiltva",
        "mailnologin": "Nincs feladó",
        "watchnologin": "Nem vagy bejelentkezve",
        "addwatch": "Hozzáadás a figyelőlistához",
        "addedwatchtext": "A(z) „[[:$1]]” lapot hozzáadtam a [[Special:Watchlist|figyelőlistádhoz]].\nEzután minden, a lapon vagy annak vitalapján történő változást ott fogsz látni.",
+       "addedwatchtext-short": "Az oldal: \"$1\" hozzá lett adva a figyelőlistádhoz.",
        "removewatch": "Eltávolítás a figyelőlistáról",
        "removedwatchtext": "A(z) „[[:$1]]” lapot eltávolítottam a [[Special:Watchlist|figyelőlistáról]].",
+       "removedwatchtext-short": "Az oldal: \"$1\" el lett távolítva a figyelőlistádról.",
        "watch": "Lap figyelése",
        "watchthispage": "Lap figyelése",
        "unwatch": "Lapfigyelés vége",
        "wlheader-enotif": "Az e-mailen keresztül történő értesítés engedélyezve.",
        "wlheader-showupdated": "Azok a lapok, amelyek megváltoztak, mióta utoljára megnézted őket, '''vastagítva''' láthatók.",
        "wlnote": "Alább {{PLURAL:$1|az utolsó változás|az utolsó <strong>$1</strong> változás}} látható az elmúlt {{PLURAL:$2|órában|<strong>$2</strong> órában}}, $3 $4-kor.",
-       "wlshowlast": "Az elmúlt $1 órában | $2 napon | $3 történt változtatások legyenek láthatóak",
+       "wlshowlast": "Az elmúlt $1 órában | $2 napon |  történt változtatások legyenek láthatóak",
        "watchlist-options": "A figyelőlista beállításai",
        "watching": "Figyelés...",
        "unwatching": "Figyelés befejezése...",
        "protect-locked-dblock": "A védelmi szinteket egy aktív adatbázis zárolás miatt nem változtathatod meg.\nItt vannak a(z) '''$1''' lap jelenlegi beállításai:",
        "protect-locked-access": "A fiókod számára nem engedélyezett a védelmi szintek megváltoztatása.\nItt vannak a(z) '''$1''' lap jelenlegi beállításai:",
        "protect-cascadeon": "A lap jelenleg le van védve, mert {{PLURAL:$1|tartalmazza az alábbi lap, amelyen|tartalmazzák az alábbi lapok, amelyeken}} be van kapcsolva a kaszkád védelem.\nEzen lap védelmi szintjének megváltoztatása nem lesz hatással a kaszkád védelemre.",
-       "protect-default": "Minden szerkesztő számára engedélyezett",
-       "protect-fallback": "\"$1\" engedély szükséges hozzá",
-       "protect-level-autoconfirmed": "Csak automatikusan ellenőrzött szerkesztőknek engedélyezett (nem vagy frissen regisztráltaknak nem)",
-       "protect-level-sysop": "Csak adminisztrátoroknak engedélyezett",
+       "protect-default": "minden szerkesztő számára engedélyezett",
+       "protect-fallback": "„$1”-i engedély szükséges hozzá",
+       "protect-level-autoconfirmed": "automatikusan megerősített szerkesztők számára",
+       "protect-level-sysop": "csak adminisztrátoroknak engedélyezett",
        "protect-summary-cascade": "kaszkád védelem",
        "protect-expiring": "lejár: $1 (UTC)",
        "protect-expiring-local": "lejárat: $1",
        "contributions-title": "$1 közreműködései",
        "mycontris": "Közreműködések",
        "contribsub2": "$1 ($2)",
+       "contributions-userdoesnotexist": "Nincs regisztrálva „$1” szerkesztői azonosító.",
        "nocontribs": "Nem található a feltételeknek megfelelő változtatás.",
        "uctop": "(aktuális)",
        "month": "E hónap végéig:",
        "movepagetalktext": "A laphoz tartozó vitalap automatikusan átneveződik, '''kivéve, ha:'''\n*már létezik egy nem üres vitalap az új helyen,\n*nem jelölöd be a lenti pipát.\n\nEzen esetekben a vitalapot külön, kézzel kell átnevezned a kívánságaid szerint.",
        "movearticle": "Lap átnevezése",
        "moveuserpage-warning": "'''Figyelem:''' Egy felhasználólapot készülsz átmozgatni. Csak a lap lesz átmozgatva, a szerkesztő ''nem'' lesz átnevezve.",
+       "movecategorypage-warning": "<string>Figyelmeztetés:</strong> Éppen egy kategórialapot készülsz átnevezni. Figyelj arra, hogy csak a lap lesz átnevezve, az idekategorizált lapok <em>nem</em> lesznek átkategorizálva.",
        "movenologintext": "Ahhoz, hogy átnevezhess egy lapot, [[Special:UserLogin|be kell lépned]].",
        "movenotallowed": "Nincs jogod a lapok átnevezéséhez.",
        "movenotallowedfile": "Nincs megfelelő jogosultságod a fájlok átnevezéséhez.",
        "cant-move-user-page": "Nem nevezhetsz át szerkesztői lapokat (az allapokon kívül).",
        "cant-move-to-user-page": "Nincs jogosultságod átnevezni egy lapot szerkesztői lapnak (kivéve annak allapjának).",
+       "cant-move-category-page": "Nincs jogosultságod kategórialapok átnevezéséhez.",
+       "cant-move-to-category-page": "Nincs jogosultságod átnevezni egy lapot kategórialapnak.",
        "newtitle": "Az új cím:",
        "move-watch": "Figyeld a lapot",
        "movepagebtn": "Lap átnevezése",
        "pageinfo-robot-policy": "Indexelés robottal",
        "pageinfo-robot-index": "Engedélyezett",
        "pageinfo-robot-noindex": "Nem engedélyezett",
-       "pageinfo-views": "Megtekintések száma",
        "pageinfo-watchers": "Figyelők száma",
        "pageinfo-few-watchers": "Kevesebb mint $1 szerkesztő figyeli",
        "pageinfo-redirects-name": "Átirányítások száma erre a lapra",
        "newimages-summary": "Ezen a speciális lapon láthatóak a legutóbb feltöltött fájlok.",
        "newimages-legend": "Fájlnév",
        "newimages-label": "Fájlnév (vagy annak részlete):",
+       "newimages-showbots": "Botos feltöltések mutatása",
        "noimages": "Nem tekinthető meg semmi.",
        "ilsubmit": "Keresés",
        "bydate": "dátum szerint",
        "exif-urgency-low": "Alacsony ($1)",
        "exif-urgency-high": "Magas ($1)",
        "exif-urgency-other": "Egyedi prioritás ($1)",
-       "watchlistall2": "bármikor",
        "namespacesall": "Összes",
        "monthsall": "mind",
        "confirmemail": "E-mail cím megerősítése",
        "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:",
+       "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",
        "watchlisttools-raw": "A nyers figyelőlista szerkesztése",
        "version-hook-name": "Hook neve",
        "version-hook-subscribedby": "Használja",
        "version-version": "(verzió: $1)",
+       "version-no-ext-name": "[nincs név]",
        "version-license": "MediaWiki licenc",
        "version-ext-license": "Licenc",
        "version-ext-colheader-name": "Kiterjesztés",
        "version-entrypoints": "Belépési pont URL-címek",
        "version-entrypoints-header-entrypoint": "Belépési pont",
        "version-entrypoints-header-url": "URL",
+       "redirect": "Átirányítás fájl, szerkesztő, oldal vagy oldalváltozat alapján",
+       "redirect-legend": "Átirányítás egy fájlra vagy lapra",
+       "redirect-submit": "Mehet",
        "redirect-lookup": "Keresés:",
        "redirect-value": "Érték:",
        "redirect-user": "Felhasználói azonosító",
        "logentry-rights-rights-legacy": "$1 megváltoztatta $3 csoporttagságát",
        "logentry-rights-autopromote": "$1 automatikusan előléptetve erről: $4 erre: $5",
        "rightsnone": "(semmi)",
+       "revdelete-summary": "a szerkesztési összefoglalóját",
        "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:",
        "right-pagelang": "Oldal nyelvének megváltoztatása",
        "action-pagelang": "oldal nyelvének módosítása",
        "log-name-pagelang": "Nyelvváltoztatások naplója",
-       "log-description-pagelang": "Ebben a naplóban a lap nyelvének változásait követheted nyomon."
+       "log-description-pagelang": "Ebben a naplóban a lap nyelvének változásait követheted nyomon.",
+       "mediastatistics": "Feltöltött fájlok statisztikája",
+       "mediastatistics-summary": "Az alábbi statisztika a feltöltött fájlok alapján készült, mely a fájlok legfrissebb változatát tartalmazza a régi, vagy törölt fájlok kivételével.",
+       "mediastatistics-table-mimetype": "MIME-típus",
+       "mediastatistics-table-extensions": "Lehetséges kiterjesztések",
+       "mediastatistics-table-count": "Fájlok száma",
+       "mediastatistics-table-totalbytes": "Kombinált méret",
+       "mediastatistics-header-unknown": "Ismeretlen",
+       "mediastatistics-header-bitmap": "Bittérképes képek",
+       "mediastatistics-header-drawing": "Rajzok (vektoros képek)",
+       "mediastatistics-header-audio": "Hang",
+       "mediastatistics-header-video": "Videók",
+       "mediastatistics-header-multimedia": "Interaktív média",
+       "mediastatistics-header-office": "Dokumentumok",
+       "mediastatistics-header-text": "Szöveges",
+       "mediastatistics-header-executable": "Futtatható",
+       "mediastatistics-header-archive": "Tömörített formátumok",
+       "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"
 }
index 1b775f0..d2b2948 100644 (file)
@@ -16,7 +16,8 @@
                        "Xelgen",
                        "Համլետ",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Lilitik22"
                ]
        },
        "tog-underline": "ընդգծել հղումները՝",
        "tog-hidepatrolled": "Թաքցնել պարեկված խմբագրումները վերջին փոփոխությունների ցանկից",
        "tog-newpageshidepatrolled": "Թաքցնել պարեկված էջերը նոր էջերի ցանկից",
        "tog-extendwatchlist": "Ընդարձակել հսկացանկը՝ ցույց տալով բոլոր փոփոխությունները, այլ ոչ միայն վերջինները",
-       "tog-usenewrc": "Ô½Õ´Õ¢Õ¡Õ¾Õ¸Ö\80Õ¥Õ¬ Ö\83Õ¸Ö\83Õ¸Õ­Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶Õ¶Õ¥Ö\80Õ¨ Õ\8eերջին փոփոխություններում և հսկացանկում (պահանջում է JavaScript)",
+       "tog-usenewrc": "Ô½Õ´Õ¢Õ¡Õ¾Õ¸Ö\80Õ¥Õ¬ Ö\83Õ¸Ö\83Õ¸Õ­Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶Õ¶Õ¥Ö\80Õ¨ Õ¾երջին փոփոխություններում և հսկացանկում (պահանջում է JavaScript)",
        "tog-numberheadings": "Ինքնաթվագրել վերնագրերը",
        "tog-showtoolbar": "Ցույց տալ խմբագրումների գործիքների վահանակը",
        "tog-editondblclick": "Խմբագրել էջերը կրկնակի մատնահարմամբ",
        "tog-editsectiononrightclick": "Խմբագրել բաժինները վերնագրի աջ մատնահարմամբ",
-       "tog-watchcreations": "Ô±Õ¾Õ¥Õ¬Õ¡Ö\81Õ¶Õ¥Õ¬ Õ«Õ´ Õ½Õ¿Õ¥Õ²Õ®Õ¡Õ® Õ§Õ»Õ¥Ö\80Õ¨ Ö\87 Õ¢Õ¥Õ¼Õ¶Õ¡Õ® Õ¶Õ«Õ·Ö\84Õ¥Ö\80Õ¨ Õ°Õ½Õ¯Õ¡Ö\81Õ¡Õ¶Õ¯Õ«Õ¶",
-       "tog-watchdefault": "Ô±Õ¾Õ¥Õ¬Õ¡Ö\81Õ¶Õ¥Õ¬ Õ«Õ´ Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ¡Õ® Õ§Õ»Õ¥Ö\80Õ¨ Ö\87 Õ¶Õ«Õ·Ö\84Õ¥Ö\80Õ¨ Õ°Õ½Õ¯Õ¡Ö\81Õ¡Õ¶Õ¯Õ«Õ¶",
-       "tog-watchmoves": "Ô±Õ¾Õ¥Õ¬Õ¡Ö\81Õ¶Õ¥Õ¬ Õ«Õ´ Õ¾Õ¥Ö\80Õ¶Õ¡Õ¾Õ¡Õ¶Õ¡Õ® Õ§Õ»Õ¥Ö\80Õ¨ Ö\87 Õ¶Õ«Õ·Ö\84Õ¥Ö\80Õ¨ Õ°Õ½Õ¯Õ¡Ö\81Õ¡Õ¶Õ¯Õ«Õ¶",
-       "tog-watchdeletion": "Ô±Õ¾Õ¥Õ¬Õ¡Ö\81Õ¶Õ¥Õ¬ Õ«Õ´ Õ»Õ¶Õ»Õ¡Õ® Õ§Õ»Õ¥Ö\80Õ¨ Ö\87 Õ¶Õ«Õ·Ö\84Õ¥Ö\80Õ¨ Õ«Õ´ Õ°Õ½Õ¯Õ¡Ö\81Õ¡Õ¶Õ¯Õ«Õ¶",
-       "tog-minordefault": "Նշել խմբագրումները որպես չնչին ըստ լռության",
+       "tog-watchcreations": "Ô±Õ¾Õ¥Õ¬Õ¡Ö\81Õ¶Õ¥Õ¬ Õ«Õ´ Õ½Õ¿Õ¥Õ²Õ®Õ¡Õ® Õ§Õ»Õ¥Ö\80Õ¨ Ö\87 Õ¢Õ¥Õ¼Õ¶Õ¡Õ® Õ¶Õ«Õ·Ö\84Õ¥Ö\80Õ¨ Õ°Õ½Õ¯Õ¡Ö\81Õ¡Õ¶Õ¯Õ¸Ö\82Õ´",
+       "tog-watchdefault": "Ô±Õ¾Õ¥Õ¬Õ¡Ö\81Õ¶Õ¥Õ¬ Õ«Õ´ Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ¡Õ® Õ§Õ»Õ¥Ö\80Õ¨ Ö\87 Õ¶Õ«Õ·Ö\84Õ¥Ö\80Õ¨ Õ°Õ½Õ¯Õ¡Ö\81Õ¡Õ¶Õ¯Õ¸Ö\82Õ´",
+       "tog-watchmoves": "Ô±Õ¾Õ¥Õ¬Õ¡Ö\81Õ¶Õ¥Õ¬ Õ«Õ´ Õ¾Õ¥Ö\80Õ¶Õ¡Õ¾Õ¡Õ¶Õ¡Õ® Õ§Õ»Õ¥Ö\80Õ¨ Ö\87 Õ¶Õ«Õ·Ö\84Õ¥Ö\80Õ¨ Õ°Õ½Õ¯Õ¡Ö\81Õ¡Õ¶Õ¯Õ¸Ö\82Õ´",
+       "tog-watchdeletion": "Ô±Õ¾Õ¥Õ¬Õ¡Ö\81Õ¶Õ¥Õ¬ Õ«Õ´ Õ»Õ¶Õ»Õ¡Õ® Õ§Õ»Õ¥Ö\80Õ¨ Ö\87 Õ¶Õ«Õ·Ö\84Õ¥Ö\80Õ¨ Õ°Õ½Õ¯Õ¡Ö\81Õ¡Õ¶Õ¯Õ¸Ö\82Õ´",
+       "tog-minordefault": "Խմբագրումները լռելյայն նշել որպես չնչին",
        "tog-previewontop": "Ցույց տալ նախադիտումը խմբագրման դաշտից առաջ",
        "tog-previewonfirst": "Նախադիտել մինչև առաջին խմբագրությունը",
        "tog-enotifwatchlistpages": "էլ-փոստով տեղեկացնել հսկվող էջերում փոփոխությունների մասին",
@@ -56,6 +57,7 @@
        "tog-showhiddencats": "Ցուցադրել թաքնված կատեգորիաները",
        "tog-norollbackdiff": "Չցուցադրել տարբերությունները հետ գլորելուց հետո",
        "tog-useeditwarning": "Զգուշացնել ինձ, երբ ես լքում եմ խմբագրման էջը առանց կատարած փոփոխությունները հիշելու։",
+       "tog-prefershttps": "Մուտք գործելուց հետո, միշտ գործածել անվնտանգ միացումից (HTTPS)",
        "underline-always": "Միշտ",
        "underline-never": "Երբեք",
        "underline-default": "Դիտարկչի կամ թեմայի լռելյայն ոճով",
        "permalink": "Մշտական հղում",
        "print": "Տպել",
        "view": "Դիտել",
+       "view-foreign": "Նայել $1-ում",
        "edit": "Խմբագրել",
+       "edit-local": "Խմբագրել տեղական նկարագրությունը",
        "create": "Ստեղծել",
        "editthispage": "Խմբագրել այս էջը",
        "create-this-page": "Ստեղծել այս էջը",
        "otherlanguages": "Այլ լեզուներով",
        "redirectedfrom": "(Վերահղված է $1ից)",
        "redirectpagesub": "Վերահղման էջ",
+       "redirectto": "Վերահղել դեպի՝",
        "lastmodifiedat": "Այս էջը վերջին անգամ փոփոխվել է ժամը $2-ին, $1 թվին։",
        "viewcount": "Այս էջին դիմել են {{PLURAL:$1|մեկ անգամ|$1 անգամ}}։",
        "protectedpage": "Պաշտպանված էջ",
        "jumptonavigation": "նավարկություն",
        "jumptosearch": "որոնում",
        "view-pool-error": "Ներեցեք՝ սերվերները գերբեռնված են այս պահին։\nՉափից շատ օգտվողներ փորձում են դիտել այս էջը։\nԽնդրում ենք սպասել որոշ ժամանակ էջը դիտելու կրկին հայցում անելուց առաջ։\n\n$1",
+       "generic-pool-error": "Ներեցեք՝ սերվերները գերբեռնված են այս պահին։\nՉափից շատ օգտվողներ փորձում են դիտել այս էջը։\nԽնդրում ենք սպասել որոշ ժամանակ էջը դիտելու կրկին հայցում անելուց առաջ։",
        "pool-errorunknown": "Անհայտ սխալ",
        "aboutsite": "{{grammar:genitive|{{SITENAME}}}} մասին",
        "aboutpage": "Project:Էությունը",
        "hidetoc": "թաքցնել",
        "collapsible-collapse": "Ծալել",
        "collapsible-expand": "Բացել",
+       "confirmable-confirm": "{{GENDER:$1|Դուք}} վստա՞հ եք։",
+       "confirmable-yes": "Այո",
+       "confirmable-no": "Ոչ",
        "thisisdeleted": "Դիտե՞լ կամ վերականգնե՞լ $1։",
        "viewdeleted": "Դիտե՞լ $1։",
        "restorelink": "{{PLURAL:$1|մեկ ջնջված խմբագրում|$1 ջնջված խմբագրում}}",
        "viewsource-title": "Դիտել $1 էջի աղբյուրը",
        "actionthrottled": "Գործողությունը արգելափակվեց",
        "actionthrottledtext": "Որպես հակա-սպամային միջոց, այս գործողության չափից շատ կատարումը կարճ ժամանակահատվածի ընթացքում սահմանափակված է։ Խնդրում ենք փորձել կրկին մի քանի րոպե անց։",
-       "protectedpagetext": "Ô±ÕµÕ½ Õ§Õ»Õ¨ Õ¯Õ¸Õ²ÕºÕ¾Õ¡Õ® Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ´Õ¡Õ¶ Õ°Õ¡Õ´Õ¡Ö\80։",
+       "protectedpagetext": "Ô±ÕµÕ½ Õ§Õ»Õ¨ ÕºÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¾Õ¡Õ® Õ§ Õ­Õ´Õ¢Õ¡Õ£Õ¸Ö\82Õ´Õ¶Õ¥Ö\80Õ«Ö\81։",
        "viewsourcetext": "Դուք կարող եք դիտել և պատճենել այս էջի ելատեքստը.",
        "viewyourtext": "Դուք կարող եք դիտել «ձեր ներդրումների» աղբյուրը և պատճենել այս էջ",
        "protectedinterface": "Այս էջը պարունակում է ծրագրային ապահովման միջերեսի տեքստ, և պաշտպանված է չարաշահումների կանխարգելման նպատակով։\nԲոլոր վիքիների թարգմանությունները փոփոխելու կամ ավելացնելու համար, խնդրում ենք այցելել ՄեդիաՎիքիի տեղայնացման նախագիծը՝ [//translatewiki.net/ translatewiki.net]։",
        "badretype": "Ձեր մուտքագրած գաղտնաբառերը չեն համընկնում։",
        "userexists": "Այս մասնակցի անունը արդեն զբաղված է։ Խնդրում ենք ընտրել մեկ այլ անուն։",
        "loginerror": "Մուտքի սխալ",
+       "createacct-error": "Հաշվի ստեղծման սխալ",
        "createaccounterror": "Չհաջողվեց ստեղծել մասնակցային հաշիվ. $1",
        "nocookiesnew": "Մասնակցային հաշիվը ստեղծված է, սակայն մուտքը համակարգ չհաջողվեց։ {{SITENAME}} կայքը օգտագործում է «քուքիներ» մասնակիցների վավերացման համար։ Ձեր մոտ «քուքիները» արգելված են։ Խնդրում ենք թույլատրել սրանք, ապա մտնել համակարգ ձեր նոր մասնակցի անունով և գաղտնաբառով։",
        "nocookieslogin": "{{SITENAME}} կայքը օգտագործում է «քուքիներ» մասնակիցների վավերացման համար։ Ձեր մոտ «քուքիները» արգելված են։ Խնդրում ենք թույլատրել սրանք և փորձել կրկին։",
        "passwordtooshort": "Գաղտնաբառը պետք է պարունակի առնվազն {{PLURAL:$1|1 սիմվոլ|$1 սիմվոլ}}։",
        "password-name-match": "Գաղտնաբառը պետք է տարբեր լինել ձեր մասնակցի անունից։",
        "password-login-forbidden": "Այս ծածկանվան և գաղտնաբառի օգտագործումն արգելված է",
-       "mailmypassword": "Õ\88Ö\82Õ²Õ¡Ö\80Õ¯Õ¥Õ¬ Õ¶Õ¸Ö\80 Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼ Õ§Õ¬â\80\93Ö\83Õ¸Õ½Õ¿Õ¸Õ¾",
+       "mailmypassword": "Õ\93Õ¸Õ­Õ¥Õ¬ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¨",
        "passwordremindertitle": "Նոր ժամանակավոր գաղտնաբառ {{grammar:genitive|{{SITENAME}}}} համար",
        "passwordremindertext": "Ինչ-որ մեկը (հավանաբար դուք՝ $1 IP-հասցեից) խնդրել է նոր գաղտնաբառ {{grammar:genitive|{{SITENAME}}}} ($4)։ «$2» մասնակցի ժամանակավոր գաղտնաբառն է՝ <code>$3</code>։ Եթե սա իսկապես ձեր մտադրություններ, ապա ձեզ հարկավոր է մտնել համակարգ և փոխել գաղտնաբառը։ Ձեր ժամանակավոր գաղտնաբառը գործելու է {{PLURAL:$5|օր|$5 օր}}։\n\nԵթե դուք չեք արել այսպիսի հայցում կամ արդեն հիշել եք ձեր գաղտնաբառը և մտադրություն չունեք այն փոխել, ապա կարող եք անտեսել այս ուղերձը և շարունակել օգտվել ձեր հին գաղտնաբառից։",
        "noemail": "«$1» մասնակցի համար էլ-փոստի հասցե չի նշվել։",
        "invalidemailaddress": "Նշված էլ-փոստի հասցեն անընդունելի է, քանի որ այն ունի անթույլատրելի ֆորմատ։ Խնդրում ենք նշել ճշմարիտ հասցե կամ այս դաշտը թողնել դատարկ։",
        "emaildisabled": "Այս կայքը չի կարող ուղարկել էլ․ նամակներ։",
        "accountcreated": "Հաշիվը ստեղծված է",
-       "accountcreatedtext": "$1 մասնակցի հաշիվը ստեղծված է։",
+       "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|քննարկում]]) մասնակցի հաշիվը ստեղծված է։",
        "createaccount-title": "{{SITENAME}}. մասնակցային հաշվի ստեղծում",
        "createaccount-text": "Ինչ-որ մեկը ստեղծել է «$2» անվանմամբ մասնակցային հաշիվ «$3» գաղտնաբառով {{SITENAME}} ($4) նախագծում՝ նշելով ձեր էլ-հասցեն։ Ձեզ անհրաժեշտ է մտնել համակարգ և փոխել գաղտնաբառը։\n\nԿարող եք անտեսել այս հաղորդագրությունը, եթե հաշիվը ստեղծվել է սխալմամբ։",
        "login-throttled": "Դուք կատարել եք չափից շատ մուտքի փորձ։\nԽնդրում ենք սպասել որոշ ժամանակ կրկին փորձելուց առաջ։",
        "loginlanguagelabel": "Լեզու՝ $1",
        "pt-login": "Մտնել",
+       "pt-login-button": "Մտնել",
        "pt-createaccount": "Ստեղծել մասնակցի հաշիվ",
        "pt-userlogout": "Դուրս գալ",
        "php-mail-error-unknown": "Անհայտ սխալ PHP-ի mail() ֆունկցիայում",
        "newpassword": "Նոր գաղտնաբառը.",
        "retypenew": "Հաստատեք նոր գաղտնաբառը.",
        "resetpass_submit": "Հաստատել գաղտնաբառը և մտնել համակարգ",
-       "changepassword-success": "Ձեր գաղտնաբառը փոխված է։ Մուտք համակարգ…",
+       "changepassword-success": "Ձեր գաղտնաբառը հաջողությամբ փոխված է։",
        "resetpass_forbidden": "Գաղտնաբառը չի կարող փոխվել",
        "resetpass-no-info": "Այս էջին ուղիղ դիմելու համար անհրաժեշտ է մտնել համակարգ։",
        "resetpass-submit-loggedin": "Փոխել գաղտնաբառը",
        "passwordreset-emailsent-capture": "Ուղարկվեց հիշեցնող էլ․ նամակ։ Այն ներկայացված է ստորև։",
        "passwordreset-emailerror-capture": "Ուղարկվեց հիշեցնող էլ․ նամակ։ Այն ներկայացված է ստորև։ Սակայն մասնակցին ուղարկելը չհաջողվեց․",
        "changeemail": "Փոխել էլ. հասցեն",
-       "changeemail-header": "Փոխել հաշվի էլ․ հասցեն",
        "changeemail-oldemail": "Ներկա էլ․ հասցե․",
        "changeemail-newemail": "Նոր էլ․ հասցե․",
        "changeemail-none": "(ոչ մի)",
        "changeemail-password": "Քո {{SITENAME}} գաղտնաբառը՝",
        "changeemail-submit": "Փոխել էլ․ հասցեն",
-       "changeemail-cancel": "Չեղարկել",
+       "resettokens-tokens": "Կտրոններ՝",
        "bold_sample": "Թավատառ տեքստ",
        "bold_tip": "Թավատառ տեքստ",
        "italic_sample": "Շեղատառ տեքստ",
        "showpreview": "Նախադիտել",
        "showdiff": "Կատարված փոփոխությունները",
        "anoneditwarning": "'''Ուշադրություն.''' Դուք չեք մտել համակարգ։\nՁեր IP հասցեն կգրանցվի այս էջի խմբագրումների պատմության մեջ։",
-       "anonpreviewwarning": "Դուք չեք մտել համակարգ։\n''Հիշելով ձեր կատարած խմբագրումը, այն կգրանցվի Ձեր IP հասցեի ներքո այս էջի խմբագրումների պատմության մեջ։''",
+       "anonpreviewwarning": "<em>Դուք չեք մտել համակարգ։\nՀիշելով Ձեր կատարած խմբագրումը, այն կպահանվի Ձեր IP հասցեի հետ միասին այս էջի խմբագրումների պատմության մեջ։</em>",
        "missingsummary": "'''Հիշեցում.''' Դուք չեք տվել խմբագրման ամփոփում։ «Հիշել» կոճակի կրկնակի մատնահարման դեպքում փոփոխությունները կհիշվեն առանց ամփոփման։",
        "missingcommenttext": "Խնդրում ենք մեկնաբանություն ավելացնել ստորև։",
        "missingcommentheader": "'''Հիշեցում.''' Դուք չեք նշել մեկնաբանության վերնագիրը։ «Հիշել» կոճակի կրկնակի մատնահարման դեպքում ձեր մեկնաբանությունը կհիշվի առանց վերնագրի։",
        "notextmatches": "Չկան համընկած տեքստերով էջեր",
        "prevn": "նախորդ {{PLURAL:$1|$1}}",
        "nextn": "հաջորդ {{PLURAL:$1|$1}}",
+       "prevn-title": "Նախկին $1 {{PLURAL:$1|արդյունքը|արդյունքները}}",
+       "nextn-title": "Հաջորդ $1 {{PLURAL:$1|արդյունքը|արդյունքները}}",
        "viewprevnext": "Դիտել ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Այս վիքիում, գոյություն ունի \"[[:$1]]\" անվանումով էջը։'''",
        "searchmenu-new": "'''Ստեղծե՛լ \"[[:$1]]\" էջը այս վիքիում'''",
        "searchrelated": "հարակից",
        "searchall": "բոլոր",
        "showingresults": "Ստորև բերված է մինչև {{PLURAL:$1|'''1''' արդյունք|'''$1''' արդյունք}}՝ սկսած №&nbsp;<strong>$2</strong>-ից։",
-       "showingresultsheader": "{{PLURAL:$5|'''$1''' արդյունք '''$3'''-ից|'''$1 - $2''' արդյունքներ '''$3'''-ից}}  '''$4'''-ի համար",
        "search-nonefound": "Որոնմանը համապատասխանող արդյունքներ չեն գտնվել։",
        "powersearch-legend": "Ընդլայնված որոնում",
        "powersearch-ns": "Որոնել անվանատարածքում.",
        "prefs-skin": "Տեսք",
        "skin-preview": "նախադիտել",
        "datedefault": "Առանց նախընտրության",
+       "prefs-user-pages": "Մասնակցային էջերը",
        "prefs-personal": "Անձնական",
        "prefs-rc": "Վերջին փոփոխություններ",
        "prefs-watchlist": "Հսկացանկ",
        "prefs-watchlist-days": "Հսկացանկում ցուցադրվող օրերի թիվը՝",
-       "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+       "prefs-watchlist-days-max": "Առավելագույնը $1 {{PLURAL:$1|օր}}",
        "prefs-watchlist-edits": "Ընդարձակված հսկացանկում ցուցադրվող օրերի թիվը՝",
-       "prefs-watchlist-edits-max": "(1000-ից ոչ ավել)",
+       "prefs-watchlist-edits-max": "1000-ից ոչ ավել",
        "prefs-watchlist-token": "Հսկացանկի կտրոն.",
        "prefs-misc": "Այլ",
        "prefs-resetpass": "Փոխել գաղտնաբառը",
        "prefs-email": "Էլ-հասցեի ընտրանքներ",
        "prefs-rendering": "Արտաքին տեսք",
        "saveprefs": "Հիշել",
-       "restoreprefs": "Զրոյացնել, բերելով իլռելայն նախընտրանքներին",
+       "restoreprefs": "Զրոյացնել, բերելով իլռելայն նախընտրանքներին (բոլոր բաժիններում)",
        "prefs-editing": "Խմբագրում",
        "rows": "Տողեր`",
        "columns": "Սյունակներ",
        "searchresultshead": "Որոնում",
        "stub-threshold": "<a href=\"#\" class=\"stub\">Պատառ հոդվածների հղումների</a> ձևավորման որոշման սահմանը.",
+       "stub-threshold-disabled": "Անջատված է",
        "recentchangesdays": "Վերջին փոփոխություններում ցուցադրվող օրերի թիվը՝",
        "recentchangesdays-max": "($1 {{PLURAL:$1|օրից|օրից}} ոչ ավել)",
        "recentchangescount": "Խմբագրումների թիվը ըստ լռության.",
        "prefs-help-recentchangescount": "Ներառում է վերջին փոփոխությունները, էջերի պատմությունը և տեղեկամատյանները։",
+       "prefs-help-watchlist-token2": "Սա գաղտնի բանալի է հսկականկի օգնույամբ նորություն ստանալու համար:\nՈվ որ գիտի այն կարող է կարդալ ձեր հսկացանկը, ուստի մի տարածեք այն:\nԵթե ձեզ պետք է զրոյացնել հսկացանկի կտրոնը, [[Special:ResetTokens| սեղմեք այստեղ]]:",
        "savedprefs": "Ձեր նախընտրությունները հիշված են։",
        "timezonelegend": "Ժամային գոտի.",
        "localtime": "Տեղական ժամանակ.",
-       "timezoneuseserverdefault": "Օգտագործել սերվերի ժամանակը",
+       "timezoneuseserverdefault": "Օգտագործել սերվերի ժամանակը ($1)",
        "timezoneuseoffset": "Այլ (նշեք տարբերությունը)",
        "servertime": "Սերվերի ժամանակ.",
        "guesstimezone": "Լրացնել բրաուզերից",
        "recentchanges-label-minor": "Սա չնչին խմբագրում է",
        "recentchanges-label-bot": "Այս խմբագրումը կատարվել է բոտի կողմից",
        "recentchanges-label-unpatrolled": "Այս խմբագրումը դեռ չի պարեկվել",
-       "recentchanges-label-plusminus": "Ô·Õ»Õ« Õ¹Õ¡Ö\83Õ½Õ¶ Ö\83Õ¸Õ­Õ¸Õ­Õ¾Õ¥Ö\81 Õ¡ÕµÕ½Ö\84Õ¡Õ¶ Õ¢Õ¡ÕµÕ©Õ¸Õ¾Ö\89",
+       "recentchanges-label-plusminus": "Ô·Õ»Õ« Õ¹Õ¡Ö\83Õ½Õ¨ Ö\83Õ¸Ö\83Õ¸Õ­Õ¾Õ¥Ö\81 Õ¡ÕµÕ½Ö\84Õ¡Õ¶ Õ¢Õ¡ÕµÕ©Õ¸Õ¾",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (տես նաև՝  [[Special:NewPages|նոր էջերի ցանկ]])",
        "rcnotefrom": "Ստորև բերված են փոփոխությունները սկսած՝ '''$2''' (մինչև՝ '''$1''')։",
        "rclistfrom": "Ցույց տալ նոր փոփոխությունները սկսած $3 $2",
        "statistics": "Վիճակագրություն",
        "statistics-header-pages": "Էջերի վիճակագրություն",
        "statistics-header-edits": "Խմբագրումների վիճակագրություն",
-       "statistics-header-views": "Դիտումների վիճակագրություն",
        "statistics-header-users": "Մասնակիցների վիճակագրություն",
        "statistics-header-hooks": "Այլ վիճակագրություն",
        "statistics-articles": "Հոդվածներ",
        "statistics-files": "Բեռնված նիշքեր",
        "statistics-edits": "Խմբագրումները {{SITENAME}} կայքի տեղադրումից ի վեր",
        "statistics-edits-average": "Էջի խմբագրումների միջին թիվը",
-       "statistics-views-total": "Ընդհանուր դիտումներ",
-       "statistics-views-peredit": "Դիտումներ ամեն մի խմբագրման համար",
        "statistics-users": "Գրանցված [[Special:ListUsers|մասնակիցներ]]",
        "statistics-users-active": "Ակտիվ մասնակիցներ",
        "statistics-users-active-desc": "Վերջին {{PLURAL:$1|օր|$1 օր}}ում որևէ գործողություն են կատարած մասնակիցներ",
-       "statistics-mostpopular": "Ամենահաճախ դիտվող էջեր",
        "pageswithprop-submit": "Անցնել",
        "doubleredirects": "Կրկնակի վերահղումներ",
        "doubleredirectstext": "Այս էջում բերված են վերահղման էջերին վերահղող էջերը։ Յուրաքանչյուր տող պարունակում է հղումներ դեպի առաջին և երկրորդ վերահղումները, ինչպես նաև երկրորդ վերահղման նպատակային էջի առաջին տողը, որում սովորաբար նշված է էջի անվանումը, որին պետք է հղի նաև առաջին վերահղումը։",
        "uncategorizedtemplates": "Չդասակարգված կաղապարներ",
        "unusedcategories": "Չօգտագործվող կատեգորիաներ",
        "unusedimages": "Չօգտագործվող նիշքեր",
-       "popularpages": "Հաճախ այցելվող էջեր",
        "wantedcategories": "Անհրաժեշտ կատեգորիաներ",
        "wantedpages": "Անհրաժեշտ էջեր",
        "wantedfiles": "Անհրաժեշտ նիշքեր",
        "pager-older-n": "{{PLURAL:$1|ավելի հին 1|ավելի հին $1}}",
        "booksources": "Գրքային աղբյուրներ",
        "booksources-search-legend": "Գրքի մասին տեղեկությունների որոնում",
-       "booksources-go": "Անցնել",
        "booksources-text": "Ստորև բերված են հղումներ դեպի արտաքին կայքեր, որտեղ կգտնեք հավելյալ տեղեկություններ գրքի մասին։ Սրանց մեջ ընդգրկված են ցանցային գրախանութներ և ընդհանուր գրադարանային կատալոգներ։",
        "booksources-invalid-isbn": "Նշված ISBN համարը ըստ երևույթի սխալ է պարունակում։ Համոզվեք որ համարը մուտքագրելիս, սխալ չի պատահել։",
        "specialloguserlabel": "Մասնակից.",
        "wlheader-enotif": "Էլ-փոստով տեղեկացումը միացված է։",
        "wlheader-showupdated": "Էջերը, որոնք փոփոխվել են ձեր դրանց վերջին այցից հետո բերված են '''թավատառ'''։",
        "wlnote": "Ստորև բերված {{PLURAL:$1|է վերջին փոփոխությունը|են վերջին '''$1''' փոփոխությունները}} վերջին <strong>$2</strong> ժամվա ընթացքում։",
-       "wlshowlast": "Ցուցադրել վերջին $1 ժամերը $2 օրերը $3",
+       "wlshowlast": "Ցուցադրել վերջին $1 ժամերը $2 օրերը",
        "watchlist-options": "Հսկացանկի նախընտրություններ",
        "watching": "Հսկվում է...",
        "unwatching": "Հանվում է հսկումից...",
        "pageinfo-robot-policy": "Կարգավիճակը որոնողական համակարգերում",
        "pageinfo-robot-index": "ինդեքսավորվող",
        "pageinfo-robot-noindex": "ինդեքսավորվող չէ",
-       "pageinfo-views": "Դիտումների քանակ",
        "pageinfo-watchers": "Դիտողների քանակ",
        "pageinfo-redirects-name": "վերահղումներ այս էջին",
        "pageinfo-subpages-name": "Ենթաէջեր",
        "exif-urgency-normal": "Նորմալ ($1)",
        "exif-urgency-low": "Թույլ ($1)",
        "exif-urgency-high": "Ուժեղ ($1)",
-       "watchlistall2": "բոլոր",
        "namespacesall": "բոլոր",
        "monthsall": "բոլոր",
        "confirmemail": "Էլ-հասցեի վավերացում",
        "confirm-watch-button": "ԼԱՎ",
        "confirm-watch-top": "Ավելացնե՞լ ձեր հսկացանկին",
        "confirm-unwatch-button": "ԼԱՎ",
-       "confirm-unwatch-top": "Õ\80Õ¥Õ¼Õ¡Ö\81Õ¶Õ¥Õ\9eÕ¬ Õ±եր հսկացանկից։",
+       "confirm-unwatch-top": "Õ\80Õ¥Õ¼Õ¡Ö\81Õ¶Õ¥Õ\9eÕ¬ Õ\81եր հսկացանկից։",
        "imgmultipageprev": "← նախորդ էջ",
        "imgmultipagenext": "հաջորդ էջ →",
        "imgmultigo": "Անցնե՛լ",
index 0991e5e..d853049 100644 (file)
        "otherlanguages": "In altere linguas",
        "redirectedfrom": "(Redirigite ab $1)",
        "redirectpagesub": "Pagina de redirection",
+       "redirectto": "Rediriger verso:",
        "lastmodifiedat": "Ultime modification de iste pagina: le $1 a $2.",
        "viewcount": "Iste pagina ha essite visitate {{PLURAL:$1|un vice|$1 vices}}.",
        "protectedpage": "Pagina protegite",
        "viewsourcetext": "Tu pote vider e copiar le codice-fonte de iste pagina:",
        "viewyourtext": "Tu pote vider e copiar le fonte de '''tu modificationes''' de iste pagina:",
        "protectedinterface": "Iste pagina contine texto pro le interfacie del software de iste wiki, e es protegite pro impedir le abuso. Pro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de traduction de MediaWiki.",
-       "editinginterface": "'''Attention:''' Le texto de iste pagina face parte del interfacie pro le software.\nOmne modification a iste pagina cambiara le apparentia del interfacie pro altere usatores de iste wiki.\nPro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de traduction de MediaWiki.",
+       "editinginterface": "<strong>Attention:</strong> Le texto de iste pagina face parte del interfacie pro le software.\nOmne modification apportate a iste pagina cambiara le apparentia del interfacie pro altere usatores de iste wiki.",
+       "translateinterface": "Pro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de localisation de MediaWiki.",
        "cascadeprotected": "Iste pagina ha essite protegite contra modificationes, proque illo es includite in le sequente {{PLURAL:$1|pagina, le qual|paginas, le quales}} es protegite usante le option \"cascada\":\n$2",
        "namespaceprotected": "Tu non ha le permission de modificar paginas in le spatio de nomines '''$1'''.",
        "customcssprotected": "Tu non ha le permission de modificar iste pagina de CSS perque illo contine le configuration personal de un altere usator.",
        "createaccount-text": "Un persona ha create un conto in tu adresse de e-mail a {{SITENAME}} ($4) denominate \"$2\", con le contrasigno \"$3\".\nTu deberea aperir un session e cambiar tu contrasigno ora.\n\nTu pote ignorar iste message si iste conto ha essite create in error.",
        "login-throttled": "Tu ha facite troppo de tentativas de aperir session.\nPer favor attende $1 ante de probar lo novemente.",
        "login-abort-generic": "Apertura de session non succedite - Abortate",
+       "login-migrated-generic": "Tu conto ha essite migrate, e tu nomine de usator non plus existe in iste wiki.",
        "loginlanguagelabel": "Lingua: $1",
        "suspicious-userlogout": "Le requesta de clauder le session ha essite refusate proque illo pare haber essite inviate per un navigator o proxy de cache defectuose.",
        "createacct-another-realname-tip": "Le nomine real es optional.\nSi tu opta pro dar lo, isto essera usate pro dar al usator attribution pro su contributiones.",
        "passwordreset-emailsent-capture": "Un message de e-mail pro le reinitialisation del contrasigno ha essite inviate; iste message es monstrate hic infra.",
        "passwordreset-emailerror-capture": "Un e-mail pro le reinitialisation del contrasigno ha essite generate; iste message es monstrate hic infra, ma le invio al {{GENDER:$2|usator}} ha fallite: $1",
        "changeemail": "Cambiar adresse de e-mail",
-       "changeemail-header": "Cambiar le adresse de e-mail del conto",
        "changeemail-text": "Completa iste formulario pro cambiar tu adresse de e-mail. Essera necessari entrar tu contrasigno pro confirmar iste cambio.",
        "changeemail-no-info": "Tu debe aperir un session pro poter acceder directemente a iste pagina.",
        "changeemail-oldemail": "Adresse de e-mail actual:",
        "changeemail-none": "(nulle)",
        "changeemail-password": "Contrasigno de {{SITENAME}}:",
        "changeemail-submit": "Cambiar e-mail",
-       "changeemail-cancel": "Cancellar",
        "changeemail-throttled": "Tu ha facite troppo de tentativas de aperir session.\nPer favor attende $1 ante de probar lo novemente.",
        "resettokens": "Reinitialisar indicios",
        "resettokens-text": "Hic tu pote reinitialisar le indicios que permitte le accesso a certe datos private associate a tu conto.\n\nTu deberea facer lo si tu los ha accidentalmente dividite con un altere persona o si tu conto ha essite compromittite.",
        "showpreview": "Monstrar previsualisation",
        "showdiff": "Detaliar modificationes",
        "blankarticle": "<strong>Advertimento:</strong> Le pagina que tu vole crear es vacue.\nSi tu clicca de novo sur \"{{int:savearticle}}\", le pagina essera create sin contento.",
-       "anoneditwarning": "'''Attention:''' Tu non ha aperite un session.\nTu adresse IP essera registrate in le historia de modificationes de iste pagina.",
+       "anoneditwarning": "<strong>Attention:</strong> Tu non ha aperite un session. Le adresse IP tue essera publicamente visibile si tu face modificationes. Si tu <strong>[$1 aperi un session]</strong> o <strong>[$2 crea un conto]</strong>, le modificationes essera attribuite al nomine de usator tue, inter altere avantages.",
        "anonpreviewwarning": "''Tu non ha aperite un session. Salveguardar registrara tu adresse IP in le historia de modificationes de iste pagina.''",
        "missingsummary": "'''Rememoration:''' Tu non ha specificate un summario del modification.\nSi tu clicca super \"{{int:savearticle}}\" de novo, le modification essera publicate sin summario.",
        "missingcommenttext": "Per favor entra un commento infra.",
        "content-model-text": "texto simple",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Paginas que usa parametros duplicate in appellos de patrono",
+       "duplicate-args-category-desc": "Le pagina contine appellos de patrono que usa duplicatos de parametros, como per exemplo <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Attention: Iste pagina contine troppo de appellos costose al functiones del analysator syntactic.\n\nIllo debe haber minus de $2 {{PLURAL:$2|appello|appellos}}, sed al momento ha $1 {{PLURAL:$1|appello|appellos}}.",
        "expensive-parserfunction-category": "Paginas con troppo de appellos costose al functiones del analysator syntactic",
        "post-expand-template-inclusion-warning": "'''Attention:''' Le grandor del patronos includite ha excedite le maximo.\nAlcun patronos non essera includite.",
        "node-count-exceeded-category-desc": "Le pagina excede le numero maxime de nodos.",
        "node-count-exceeded-warning": "Le numero de nodos in iste pagina excede le limite",
        "expansion-depth-exceeded-category": "Paginas in que le profunditate de expansion excede le limite",
-       "expansion-depth-exceeded-category-desc": "Isto es un categoria pro paginas in le quales le profunditate de expansion ha essite excedite.",
+       "expansion-depth-exceeded-category-desc": "Le pagina excede le profunditate de expansion maxime.",
        "expansion-depth-exceeded-warning": "Le profunditate de expansion in iste pagina excede le limite",
        "parser-unstrip-loop-warning": "Bucla de \"unstrip\" detegite",
        "parser-unstrip-recursion-limit": "Limite de recursion de \"unstrip\" excedite ($1)",
        "mergehistory-same-destination": "Le paginas de origine e de destination non pote esser le mesme",
        "mergehistory-reason": "Motivo:",
        "mergelog": "Registro de fusiones",
-       "pagemerge-logentry": "fusionava [[$1]] in [[$2]] (versiones usque a $3)",
        "revertmerge": "Disfusionar",
        "mergelogpagetext": "Infra es un lista del fusiones le plus recente de un historia de pagina in un altere.",
        "history-title": "$1: Historia de versiones",
        "search-result-category-size": "{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoria|$2 subcategorias}}, {{PLURAL:$3|1 file|$3 files}})",
        "search-redirect": "(redirection ab $1)",
        "search-section": "(section $1)",
+       "search-category": "(categoria $1)",
        "search-file-match": "(corresponde al contento del file)",
        "search-suggest": "Esque tu vole dicer: $1",
        "search-interwiki-caption": "Projectos fratres",
        "searchall": "totes",
        "showingresults": "Infra se monstra non plus de {{PLURAL:$1|'''1''' resultato|'''$1''' resultatos}} a partir del numero '''$2'''.",
        "showingresultsinrange": "In basso es monstrate usque a {{PLURAL:$1|<strong>1</strong> resultato|<strong>$1</strong> resultatos}} inter #<strong>$2</strong> e #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Resultato '''$1'''|Resultatos '''$1 - $2'''}} de '''$3''' pro '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Resultato <strong>$1</strong> de <strong>$3</strong>|Resultatos <strong>$1 - $2</strong> de <strong>$3</strong>}}",
        "search-nonefound": "Le recerca non ha producite resultatos.",
        "powersearch-legend": "Recerca avantiate",
        "powersearch-ns": "Cercar in spatios de nomines:",
        "preferences": "Preferentias",
        "mypreferences": "Preferentias",
        "prefs-edits": "Numero de modificationes:",
-       "prefsnologintext2": "Es necessari $1 pro definir le preferentias de usator.",
+       "prefsnologintext2": "Es necessari aperir session pro cambiar le preferentias.",
        "prefs-skin": "Apparentia",
        "skin-preview": "Previsualisation",
        "datedefault": "Nulle preferentia",
        "gender-female": "Illa modifica paginas wiki",
        "prefs-help-gender": "Definir iste preferentia es optional.\nLe software lo usa pro adressar e mentionar te correctemente con le genere appropriate.\nIste information es public.",
        "email": "E-mail",
-       "prefs-help-realname": "Le nomine real es optional.\nSi tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contributiones.",
+       "prefs-help-realname": "Le nomine real es optional.\nSi fornite, illo pote esser usate pro attribuer te tu travalio.",
        "prefs-help-email": "Le adresse de e-mail es optional, ma es necessari pro le reinitialisation de tu contrasigno, in caso que tu lo oblida.",
        "prefs-help-email-others": "Tu pote etiam optar pro permitter que altere personas te contacta via tu pagina de usator o de discussion, sin necessitate de revelar tu identitate.",
        "prefs-help-email-required": "Un adresse de e-mail es obligatori.",
        "prefs-tokenwatchlist": "Indicio",
        "prefs-diffs": "Differentias",
        "prefs-help-prefershttps": "Iste preferentia habera effecto a partir de tu proxime session.",
+       "prefswarning-warning": "To ha facite modificationes in tu preferentias que non ha ancora essite confirmate. Si tu quita iste pagina sin cliccar sur \"$1\", tu preferentias non essera cambiate.",
        "prefs-tabs-navigation-hint": "Consilio: Tu pote usar le claves de sagitta sinistre e dextre pro navigar inter le schedas in le lista.",
        "email-address-validity-valid": "Sembla valide",
        "email-address-validity-invalid": "Un adresse valide es obligatori!",
        "randomincategory": "Pagina aleatori in categoria",
        "randomincategory-invalidcategory": "\"$1\" non es un nomine de categoria valide.",
        "randomincategory-nopages": "Il non ha paginas in [[:Category:$1]].",
+       "randomincategory-category": "Categoria:",
+       "randomincategory-legend": "Pagina aleatori in categoria",
        "randomredirect": "Redirection aleatori",
        "randomredirect-nopages": "Il non ha redirectiones in le spatio de nomines \"$1\".",
        "statistics": "Statisticas",
        "statistics-header-pages": "Statisticas de paginas",
        "statistics-header-edits": "Statisticas de modificationes",
-       "statistics-header-views": "Statisticas de visitas",
        "statistics-header-users": "Statisticas de usatores",
        "statistics-header-hooks": "Altere statisticas",
        "statistics-articles": "Paginas de contento",
        "statistics-files": "Files incargate",
        "statistics-edits": "Modificationes de paginas depost le installation de {{SITENAME}}",
        "statistics-edits-average": "Media del modificationes per pagina",
-       "statistics-views-total": "Visitas total",
-       "statistics-views-total-desc": "Le visitas a paginas inexistente e special non es includite",
-       "statistics-views-peredit": "Visitas per modification",
        "statistics-users": "[[Special:ListUsers|Usatores]] registrate",
        "statistics-users-active": "Usatores active",
        "statistics-users-active-desc": "Usatores qui ha facite un action durante le {{PLURAL:$1|die|$1 dies}} passate",
-       "statistics-mostpopular": "Le paginas plus visitate",
        "pageswithprop": "Paginas con un proprietate de pagina",
        "pageswithprop-legend": "Paginas con un proprietate de pagina",
        "pageswithprop-text": "Iste pagina lista le paginas que usa un certe proprietate de pagina.",
        "uncategorizedtemplates": "Patronos sin categoria",
        "unusedcategories": "Categorias non usate",
        "unusedimages": "Imagines non usate",
-       "popularpages": "Paginas popular",
        "wantedcategories": "Categorias plus demandate",
        "wantedpages": "Paginas plus demandate",
        "wantedpages-badtitle": "Titulo invalide in le gruppo de resultatos: $1",
        "pager-older-n": "{{PLURAL:$1|1 minus recente|$1 minus recente}}",
        "suppress": "Supervisor",
        "querypage-disabled": "Iste pagina special es disactivate pro evitar de supercargar le systema.",
+       "apihelp": "Adjuta con le API",
+       "apihelp-no-such-module": "Modulo \"$1\" non trovate.",
        "booksources": "Fontes de libros",
        "booksources-search-legend": "Cercar fontes de libros",
-       "booksources-go": "Va",
+       "booksources-search": "Cercar",
        "booksources-text": "Infra es un lista de ligamines a altere sitos que vende libros nove e usate, e pote etiam haber altere informationes super libros que tu cerca:",
        "booksources-invalid-isbn": "Le ISBN date non pare esser valide; verifica que tu non ha facite errores copiante lo del fonte original.",
        "specialloguserlabel": "Executor:",
        "trackingcategories-desc": "Criterios pro inclusion in categoria",
        "noindex-category-desc": "Iste pagina es excludite del indice perque illo contine le marca <code><nowiki>__NOINDEX__</nowiki></code> e es in un spatio de nomines ubi le uso de iste marca es permittite.",
        "index-category-desc": "Iste pagina contine le marca <code><nowiki>__INDEX__</nowiki></code> (e es in un spatio de nomines ubi le uso de iste marca es permittite), e dunque es includite in le indice mesmo si illo normalmente non lo esserea.",
-       "post-expand-template-inclusion-category-desc": "Le expansion de tote le patronos facerea le dimension del pagina exceder le limite de <code>$wgMaxArticleSize</code>, dunque alcun patronos non ha essite expandite.",
-       "post-expand-template-argument-category-desc": "Post le expansion de un parametro de patrono (qualcosa inter accolladas triple, como <code>{{{Exemplo}}}</code>), le dimension del pagina excede le limite de <code>$wgMaxArticleSize</code>.",
-       "expensive-parserfunction-category-desc": "Troppo de functiones costose de analysator syntactic (como <code>#ifexist</code>) ha essite includite in un pagina. Vide [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
-       "broken-file-category-desc": "Iste categoria es addite si le pagina contine un ligamine de file rupte (un ligamine pro incorporar un file quando le file non existe).",
-       "hidden-category-category-desc": "Iste categoria contine le marca <code><nowiki>__HIDDENCAT__</nowiki></code>, impediente lo de apparer in le quadro de ligamines de categoria in paginas, si non configurate alteremente.",
+       "post-expand-template-inclusion-category-desc": "Le dimension del pagina es plus grande de <code>$wgMaxArticleSize</code> post le expansion de tote le patronos, dunque alcun patronos non ha essite expandite.",
+       "post-expand-template-argument-category-desc": "Le dimension del pagina es plus grande de <code>$wgMaxArticleSize</code> post le expansion de un parametro de patrono (qualcosa inter accolladas triple, como <code>{{{Exemplo}}}</code>).",
+       "expensive-parserfunction-category-desc": "Le pagina usa troppo de functiones costose de analysator syntactic (como <code>#ifexist</code>). Vide [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Le pagina contine un ligamine de file rupte (un ligamine pro incorporar un file quando le file non existe).",
+       "hidden-category-category-desc": "Le categoria contine <code><nowiki>__HIDDENCAT__</nowiki></code> in su contento de pagina, impediente que illo appare in le quadro de ligamines de categoria in paginas, si non configurate alteremente.",
        "trackingcategories-nodesc": "Nulle description disponibile.",
        "trackingcategories-disabled": "Le categoria es disactivate",
        "mailnologin": "Necun adresse de invio",
        "mywatchlist": "Observatorio",
        "watchlistfor2": "De $1 $2",
        "nowatchlist": "Tu non ha paginas sub observation.",
-       "watchlistanontext": "Tu debe $1 pro poter vider o modificar entratas in tu observatorio.",
+       "watchlistanontext": "Per favor, aperi session pro poter vider o modificar entratas in tu observatorio.",
        "watchnologin": "Tu non ha aperite un session",
        "addwatch": "Adder al observatorio",
        "addedwatchtext": "Le pagina \"[[:$1]]\" ha essite addite a tu [[Special:Watchlist|observatorio]].\nLe modificationes futur in iste pagina e in le pagina de discussion associate essera listate in illo.",
        "watchlist-details": "{{PLURAL:$1|$1 pagina|$1 paginas}} in tu observatorio. Le paginas de discussion non es contate separatemente.",
        "wlheader-enotif": "Le notification via e-mail es active.",
        "wlheader-showupdated": "Le paginas que ha essite modificate post tu ultime visita se monstra in litteras '''grasse'''.",
-       "wlnote": "Ecce le ultime {{PLURAL:$1|modification|'''$1''' modificationes}} durante le ultime {{PLURAL:$2|hora|'''$2''' horas}}, a partir del $3 a $4.",
-       "wlshowlast": "Revelar ultime $1 horas $2 dies $3",
+       "wlnote": "Ecce le ultime {{PLURAL:$1|modification|<strong>$1</strong> modificationes}} durante le ultime {{PLURAL:$2|hora|<strong>$2</strong> horas}}, a partir del $3 a $4.",
+       "wlshowlast": "Monstrar le ultime $1 horas $2 dies",
        "watchlist-options": "Optiones del observatorio",
        "watching": "Observation in curso...",
        "unwatching": "Disobservation in curso...",
        "exbeforeblank": "contento ante radimento esseva: '$1'",
        "delete-confirm": "Deler \"$1\"",
        "delete-legend": "Deler",
-       "historywarning": "'''Attention:''' Le pagina que tu vole deler ha un historia de circa $1 {{PLURAL:$1|version|versiones}}:",
+       "historywarning": "<strong>Attention:</strong> Le pagina que tu vole deler ha un historia de circa $1 {{PLURAL:$1|version|versiones}}:",
        "confirmdeletetext": "Tu va deler un pagina con tote su historia.\nPer favor confirma que tu ha le intention de facer isto, que tu comprende le consequentias, e que tu face isto in accordo con [[{{MediaWiki:Policy-url}}|le politicas]].",
        "actioncomplete": "Action complete",
        "actionfailed": "Action fallite",
        "delete-edit-reasonlist": "Modificar le motivos pro deletion",
        "delete-toobig": "Iste pagina ha un grande historia de modificationes con plus de $1 {{PLURAL:$1|version|versiones}}.\nLe deletion de tal paginas ha essite restringite pro impedir le disruption accidental de {{SITENAME}}.",
        "delete-warning-toobig": "Iste pagina ha un grande historia de modificationes con plus de $1 {{PLURAL:$1|version|versiones}}.\nLe deletion de illo pote disrumper le operationes del base de datos de {{SITENAME}};\nprocede con caution.",
+       "deleteprotected": "Tu non pote deler iste pagina perque illo ha essite protegite.",
        "deleting-backlinks-warning": "'''Attention:''' Il ha [[Special:WhatLinksHere/{{FULLPAGENAME}}|altere paginas]] que liga a o transclude le pagina que tu es sur le puncto de deler.",
        "rollback": "Revocar modificationes",
        "rollback_short": "Revocar",
        "protect-othertime": "Altere duration:",
        "protect-othertime-op": "altere duration",
        "protect-existing-expiry": "Expiration existente: le $2 a $3",
+       "protect-existing-expiry-infinity": "Termino de expiration existente: infinite",
        "protect-otherreason": "Motivo altere/additional:",
        "protect-otherreason-op": "Altere motivo",
        "protect-dropdown": "*Motivos commun de protection\n** Vandalismo excessive\n** Spam excessive\n** Guerra de modificationes contraproductive\n** Pagina frequentemente visitate",
        "autoblockid": "Auto-blocada №$1",
        "block": "Blocar usator",
        "unblock": "Disblocar usator",
-       "blockip": "Blocar usator",
+       "blockip": "Blocar {{GENDER:$1|usator}}",
        "blockip-legend": "Blocar usator",
        "blockiptext": "Usa le formulario infra pro blocar le accesso de scriptura\na partir de un adresse IP specific.\nIsto debe esser facite solmente pro impedir vandalismo, e de\naccordo con le [[{{MediaWiki:Policy-url}}|politica de {{SITENAME}}]].\nScribe un motivo specific infra (per exemplo, citante paginas\nspecific que ha essite vandalisate).",
        "ipaddressorusername": "Adresse IP o nomine de usator:",
        "ipb-unblock-addr": "Disblocar $1",
        "ipb-unblock": "Disblocar un nomine de usator o un adresse IP",
        "ipb-blocklist": "Vider blocadas existente",
-       "ipb-blocklist-contribs": "Contributiones de $1",
+       "ipb-blocklist-contribs": "Contributiones de {{GENDER:$1|$1}}",
        "unblockip": "Disblocar adresse IP",
        "unblockiptext": "Usa le formulario infra pro restaurar le accesso de scriptura\na un adresse IP blocate previemente.",
        "ipusubmit": "Cancellar iste blocada",
        "unblocked": "[[User:$1|$1]] ha essite disblocate",
        "unblocked-range": "$1 ha essite disblocate",
        "unblocked-id": "Le blocada $1 ha essite eliminate",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] ha essite disblocate.",
        "blocklist": "Usatores blocate",
        "ipblocklist": "Usatores blocate",
        "ipblocklist-legend": "Cercar un usator blocate",
        "import": "Importar paginas",
        "importinterwiki": "Importation transwiki",
        "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-interwiki-history": "Copiar tote le versiones del historia de iste pagina",
        "import-interwiki-templates": "Includer tote le patronos",
        "import-interwiki-submit": "Importar",
        "tooltip-pt-mycontris": "Lista de tu contributiones",
        "tooltip-pt-login": "Nos recommenda que tu te authentica, ma non es obligatori.",
        "tooltip-pt-logout": "Clauder session",
+       "tooltip-pt-createaccount": "Tu es incoragiate a crear un conto e aperir session; totevia, non es obligatori",
        "tooltip-ca-talk": "Discussiones a proposito del pagina de contento",
        "tooltip-ca-edit": "Tu pote modificar iste pagina.\nPer favor usa le previsualisation ante de publicar.",
        "tooltip-ca-addsection": "Initiar un nove section",
        "tooltip-feed-atom": "Syndication Atom pro iste pagina",
        "tooltip-t-contributions": "Vider le lista de contributiones de iste usator",
        "tooltip-t-emailuser": "Inviar un e-mail a iste usator",
+       "tooltip-t-info": "Plus information super iste pagina",
        "tooltip-t-upload": "Incargar files",
        "tooltip-t-specialpages": "Lista de tote le paginas special",
        "tooltip-t-print": "Version imprimibile de iste pagina",
        "pageinfo-robot-policy": "Indexation per robots",
        "pageinfo-robot-index": "Permittite",
        "pageinfo-robot-noindex": "Non permittite",
-       "pageinfo-views": "Numero de visitas",
        "pageinfo-watchers": "Numero de observatores del pagina",
        "pageinfo-few-watchers": "Minus de $1 {{PLURAL:$1|observator|observatores}}",
        "pageinfo-redirects-name": "Numero de redirectiones verso iste pagina",
        "exif-urgency-low": "Basse ($1)",
        "exif-urgency-high": "Alte ($1)",
        "exif-urgency-other": "Prioritate definite per usator ($1)",
-       "watchlistall2": "totes",
        "namespacesall": "totes",
        "monthsall": "totes",
        "confirmemail": "Confirmar adresse de e-mail",
        "unknown_extension_tag": "Etiquetta de extension incognite \"$1\"",
        "duplicate-defaultsort": "Attention: Le clave de ordination predefinite \"$2\" supplanta le anterior clave de ordination predefinite \"$1\".",
        "duplicate-displaytitle": "<strong>Attention:</strong> Le titulo a monstrar \"$2\" supplanta le ancian titulo a monstrar \"$1\".",
+       "invalid-indicator-name": "<strong>Error:</strong> Le attributo <code>name</code> del indicatores del stato del pagina non pote esser vacue.",
        "version": "Version",
        "version-extensions": "Extensiones installate",
        "version-skins": "Apparentias installate",
        "revdelete-uname-unhid": "nomine de usator non plus celate",
        "revdelete-restricted": "restrictiones applicate al administratores",
        "revdelete-unrestricted": "restrictiones eliminate pro administratores",
+       "logentry-merge-merge": "$1 {{GENDER:$2|fusionava}} $3 in $4 (versiones usque a $5)",
        "logentry-move-move": "$1 {{GENDER:$2|renominava}} le pagina $3 a $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|renominava}} le pagina $3 a $4 sin lassar un redirection",
        "logentry-move-move_redir": "$1 {{GENDER:$2|renominava}} le pagina $3 a $4, superscribente un redirection",
        "logentry-rights-rights": "$1 {{GENDER:$2|cambiava}} le appertinentia a gruppos pro $3 de $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|cambiava}} le appertinentia a gruppos pro $3",
        "logentry-rights-autopromote": "$1 ha essite automaticamente {{GENDER:$2|promovite}} de $4 a $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|ha incargate}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|ha incargate}} un nove version de $3",
+       "logentry-upload-revert": "$1 {{GENDER:$2|ha incargate}} $3",
        "rightsnone": "(nulle)",
+       "revdelete-summary": "summario del modification",
        "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:",
        "api-error-stashfailed": "Error interne: le servitor non poteva immagazinar le file temporari.",
        "api-error-publishfailed": "Error interne: le servitor non poteva publicar le file temporari.",
        "api-error-stasherror": "Un error ha occurrite durante le incargamento del file in \"stash\".",
+       "api-error-stashedfilenotfound": "Le file in reserva non ha essite trovate durante le tentativa de incargar lo ab le reserva.",
+       "api-error-stashpathinvalid": "Le cammino ubi le file in reserva deberea haber essite trovate non es valide.",
+       "api-error-stashfilestorage": "Un error ha occurrite durante le immagazinage del file in reserva.",
+       "api-error-stashzerolength": "Le servitor non ha potite mitter le file in reserva perque illo ha un longitude de zero.",
+       "api-error-stashnotloggedin": "Tu debe aperir session pro poter salveguardar files in le reserva de incargamento.",
+       "api-error-stashwrongowner": "Le file al qual tu tentava acceder in le reserva non pertine a te.",
+       "api-error-stashnosuchfilekey": "Le clave de file al qual tu tentava acceder in le reserva non existe.",
        "api-error-timeout": "Le servitor non ha respondite intra le tempore expectate.",
        "api-error-unclassified": "Un error incognite ha occurrite.",
        "api-error-unknown-code": "Error incognite: \"$1\"",
        "action-pagelang": "cambiar le lingua del pagina",
        "log-name-pagelang": "Registro de cambios de lingua",
        "log-description-pagelang": "Isto es un registro de cambios de lingua in paginas.",
-       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambiava}} le lingua del pagina $3 de $4 a $5."
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambiava}} le lingua del pagina $3 de $4 a $5.",
+       "default-skin-not-found": "Attention! Le apparentia predefinite de tu wiki, definite in <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non es disponibile.\n\nLe installation pare includer le sequente apparentias. Vide [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pro saper como activar los e seliger le predefinite.\n\n$2\n\n; Si tu ha justo installate MediaWiki:\n: Tu lo ha probabilemente installate a partir de git, o directemente del codice fonte con un altere methodo. Isto es normal. Essaya installar alcun apparentias desde [https://www.mediawiki.org/wiki/Category:All_skins le directorio de apparentias de mediawiki.org], per:\n:* Discargar le [https://www.mediawiki.org/wiki/Download archivo tar del installator], que include plure apparentias e extensiones. Tu pote copiar e collar le directorio <code>skins/</code> de illo.\n:* Clonar un del repositorios <code>mediawiki/skins/*</code> via git in le directorio <code dir=\"ltr\">skins/</code> de tu installation de MediaWiki.\n: Facer isto non deberea interferer con tu repositorio git si tu es un disveloppator de MediaWiki.\n\n; Si tu ha justo actualisate MediaWiki:\n: MediaWiki a partir del version 1.24 non plus activa automaticamente le apparentias installate (vide [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Tu pote collar le sequente lineas in <code>LocalSettings.php</code> pro activar tote le apparentias actualmente installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si tu ha justo modificate <code>LocalSettings.php</code>:\n: Verifica meticulosemente que le nomines del apparentias non ha errores.",
+       "default-skin-not-found-no-skins": "Attention! Le apparentia predefinite de tu wiki, definite in <code>$wgDefaultSkin</code> como <code>$1</code>, non es disponibile.\n\nTu non ha apparentias installate.\n\n; Si tu ha justo installate o actualisate MediaWiki:\n: Tu lo ha probabilemente installate a partir de git, o directemente del codice fonte con un altere methodo. Isto es normal. Essaya installar alcun apparentias desde [https://www.mediawiki.org/wiki/Category:All_skins le directorio de apparentias de mediawiki.org], per:\n:* Discargar le [https://www.mediawiki.org/wiki/Download archivo tar del installator], que include plure apparentias e extensiones. Tu pote copiar e collar le directorio <code>skins/</code> de illo.\n:* Clonar un del repositorios <code>mediawiki/skins/*</code> via git in le directorio <code dir=\"ltr\">skins/</code> de tu installation de MediaWiki.\n: Facer isto non deberea interferer con tu repositorio git si tu es un disveloppator de MediaWiki. Vide [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pro saper como activar skins e seliger le predefinite.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activate)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disactivate''')",
+       "mediastatistics": "Statisticas de multimedia",
+       "mediastatistics-summary": "Statisticas sur le typos de file incargate. Isto include solmente le version le plus recente de un file. Versiones ancian o delite de files es excludite.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "Typo MIME",
+       "mediastatistics-table-extensions": "Extensiones possibile",
+       "mediastatistics-table-count": "Numero de files",
+       "mediastatistics-table-totalbytes": "Dimension combinate",
+       "mediastatistics-header-unknown": "Incognite",
+       "mediastatistics-header-bitmap": "Imagines de mappa de bits",
+       "mediastatistics-header-drawing": "Designos (imagines vectorial)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Video",
+       "mediastatistics-header-multimedia": "Multimedia complexe",
+       "mediastatistics-header-office": "Officio",
+       "mediastatistics-header-text": "Textual",
+       "mediastatistics-header-executable": "Executabiles",
+       "mediastatistics-header-archive": "Formatos comprimite",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|comma|commas}} final ha essite removite de JSON",
+       "json-error-unknown": "Il habeva un problema con le JSON. Error: $1",
+       "json-error-depth": "Le profunditate maxime del pila ha essite excedite",
+       "json-error-state-mismatch": "JSON non valide o mal formate",
+       "json-error-ctrl-char": "Error de character de controlo, possibilemente codificate incorrectemente",
+       "json-error-syntax": "Error de syntaxe",
+       "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"
 }
index 431a3aa..ce7f8db 100644 (file)
@@ -35,7 +35,8 @@
                        "아라",
                        "C5st4wr6ch",
                        "Raynasution",
-                       "Arifin.wijaya"
+                       "Arifin.wijaya",
+                       "Ahdan"
                ]
        },
        "tog-underline": "Garis bawahi pranala:",
        "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 (opsional)",
+       "createacct-emailoptional": "Alamat surel/email (dianjurkan untuk 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",
        "passwordreset-emailsent-capture": "Surel setel ulang kata sandi telah dikirim, yang ditampilkan di bawah.",
        "passwordreset-emailerror-capture": "Surel setel ulang kata sandi telah dibuat, yang ditampilkan di bawah, namun pengiriman pada {{GENDER:$2|pengguna}} gagal: $1",
        "changeemail": "Ubah alamat surel",
-       "changeemail-header": "Ubah alamat surel akun",
        "changeemail-text": "Selesaikan formulir ini untuk mengubah alamat surel Anda. Anda perlu memasukkan sandi untuk mengkonfirmasi perubahan ini.",
        "changeemail-no-info": "Anda harus masuk log untuk mengakses halaman ini secara langsung.",
        "changeemail-oldemail": "Alamat surel saat ini:",
        "changeemail-none": "(tidak ada)",
        "changeemail-password": "Sandi {{SITENAME}} Anda:",
        "changeemail-submit": "Ubah surel",
-       "changeemail-cancel": "Batalkan",
        "changeemail-throttled": "Anda sudah terlalu banyak mencoba masuk log.\nSilakan menunggu $1 sebelum mencoba lagi.",
        "resettokens": "Reset token",
        "resettokens-text": "Anda dapat me-reset Token yang memungkinkan akses ke data pribadi tertentu yang terkait dengan akun Anda di sini.\n\nAnda harus melakukannya jika Anda secara tidak sengaja berbagi dengan seseorang atau jika akun Anda telah disusupi.",
        "mergehistory-reason": "Alasan:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Log penggabungan",
-       "pagemerge-logentry": "menggabungkan [[$1]] ke [[$2]] (revisi sampai dengan $3)",
        "revertmerge": "Batal penggabungan",
        "mergelogpagetext": "Di bawah ini adalah daftar penggabungan sejarah halaman ke halaman yang lain.",
        "history-title": "Riwayat revisi dari \"$1\"",
        "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>.",
-       "showingresultsheader": "{{PLURAL:$5|Hasil '''$1''' dari '''$3'''|Hasil '''$1 - $2''' dari '''$3'''}} untuk '''$4'''",
        "search-nonefound": "Tidak ada hasil yang sesuai dengan kriteria.",
        "powersearch-legend": "Pencarian lanjut",
        "powersearch-ns": "Mencari di ruang nama:",
        "powersearch-togglelabel": "Pilih:",
        "powersearch-toggleall": "Semua",
        "powersearch-togglenone": "Tidak ada",
-       "powersearch-remember": "Ingar pilihan untuk pencarian selanjutnya",
+       "powersearch-remember": "Ingat pilihan untuk pencarian selanjutnya",
        "search-external": "Pencarian eksternal",
        "searchdisabled": "Pencarian {{SITENAME}} sementara dimatikan.\nAnda dapat mencari melalui Google untuk sementara waktu.\nPerlu diingat bahwa indeks Google untuk konten {{SITENAME}} mungkin belum mencakup perubahan-perubahan terakhir.",
        "search-error": "Kesalahan terjadi saat mencari: $1",
        "prefs-tokenwatchlist": "Tanda",
        "prefs-diffs": "Beda",
        "prefs-help-prefershttps": "Preferensi ini akan diaktifkan kali berikutnya Anda masuk log.",
+       "prefswarning-warning": "Perubahan preferensi anda belum tersimpan. Apabila anda meninggalkan halaman ini tanpa men-klik \"$1\" preferensi anda tidak akan diperbarui.",
        "prefs-tabs-navigation-hint": "Tip: Anda dapat menggunakan tombol panah kiri dan kanan untuk bernavigasi antartab di dalam daftar tab.",
        "email-address-validity-valid": "Alamat surel tampaknya sah",
        "email-address-validity-invalid": "Masukkan alamat surel yang sah",
        "statistics": "Statistik",
        "statistics-header-pages": "Statistik halaman",
        "statistics-header-edits": "Statistik suntingan",
-       "statistics-header-views": "Statistik penampilan",
        "statistics-header-users": "Statistik pengguna",
        "statistics-header-hooks": "Statistik lainnya",
        "statistics-articles": "Halaman konten",
        "statistics-files": "Berkas yang dimuatkan",
        "statistics-edits": "Jumlah suntingan sejak {{SITENAME}} dimulai",
        "statistics-edits-average": "Rata-rata suntingan per halaman",
-       "statistics-views-total": "Jumlah penampilan halaman",
-       "statistics-views-total-desc": "Tampilan ke halaman yang tidak ada dan halaman khusus yang tidak dimasukkan",
-       "statistics-views-peredit": "Jumlah penampilan per suntingan",
        "statistics-users": "Jumlah [[Special:ListUsers|pengguna terdaftar]]",
        "statistics-users-active": "Jumlah pengguna aktif",
        "statistics-users-active-desc": "Pengguna yang telah melakukan suatu aktivitas dalam {{PLURAL:$1|sehari|$1 hari}} terakhir.",
-       "statistics-mostpopular": "Halaman yang paling banyak ditampilkan",
        "pageswithprop": "Halaman dengan halaman properti",
        "pageswithprop-legend": "Halaman dengan halaman properti",
        "pageswithprop-text": "Halaman ini berisi daftar halaman yang menggunakan properti halaman tertentu.",
        "uncategorizedtemplates": "Templat yang tak terkategori",
        "unusedcategories": "Kategori yang tak digunakan",
        "unusedimages": "Berkas yang tak digunakan",
-       "popularpages": "Halaman populer",
        "wantedcategories": "Kategori yang diinginkan",
        "wantedpages": "Halaman yang diinginkan",
        "wantedpages-badtitle": "Judul tak valid dalam himpunan hasil: $1",
        "booksources": "Sumber buku",
        "booksources-search-legend": "Cari di sumber buku",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Tuju ke",
+       "booksources-search": "Cari",
        "booksources-text": "Di bawah ini adalah daftar pranala ke situs lain yang menjual buku baru dan bekas, dan mungkin juga mempunyai informasi lebih lanjut mengenai buku yang sedang Anda cari:",
        "booksources-invalid-isbn": "ISBN yang diberikan tampaknya tidak valid; periksa kesalahan penyalinan dari sumber asli.",
        "specialloguserlabel": "Pengguna:",
        "wlheader-enotif": "Notifikasi surel diaktifkan.",
        "wlheader-showupdated": "Halaman-halaman yang telah berubah sejak kunjungan terakhir Anda ditampilkan dengan '''huruf tebal'''.",
        "wlnote": "Di bawah ini adalah {{PLURAL:$1|perubahan|'''$1''' perubahan}} terakhir dalam '''$2''' jam terakhir, per $3, $4.",
-       "wlshowlast": "Tampilkan $1 jam $2 hari terakhir $3",
+       "wlshowlast": "Tampilkan $1 jam $2 hari terakhir",
        "watchlist-options": "Opsi daftar pantauan",
        "watching": "Memantau...",
        "unwatching": "Menghilangkan pemantauan...",
        "pageinfo-robot-policy": "Pengindeksan oleh robot",
        "pageinfo-robot-index": "Diperbolehkan",
        "pageinfo-robot-noindex": "Tidak diperbolehkan",
-       "pageinfo-views": "Jumlah penampilan",
        "pageinfo-watchers": "Jumlah pemantau halaman",
        "pageinfo-few-watchers": "Kurang dari $1 {{PLURAL:$1|pengunjung}}",
        "pageinfo-redirects-name": "Jumah pengalihan ke halaman ini",
        "exif-urgency-low": "Rendah ($1)",
        "exif-urgency-high": "Tinggi ($1)",
        "exif-urgency-other": "Prioritas ubahsuaian ($1)",
-       "watchlistall2": "semua",
        "namespacesall": "semua",
        "monthsall": "semua",
        "confirmemail": "Konfirmasi alamat surel",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|mengubah}} keanggotaan grup $3",
        "logentry-rights-autopromote": "$1 secara otomatis {{GENDER:$2|dipromosikan}} dari $4 menjadi $5",
        "rightsnone": "(tidak ada)",
+       "revdelete-summary": "ringkasan",
        "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:",
        "action-pagelang": "mengubah bahasa halaman",
        "log-name-pagelang": "Ubah bahasa log",
        "log-description-pagelang": "Ini adalah log perubahan dalam bahasa halaman.",
-       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|mengubah}} bahasa halaman $3 dari $4 menjadi $5."
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|mengubah}} bahasa halaman $3 dari $4 menjadi $5.",
+       "mediastatistics-summary": "Statistik tentang jenis file yang terunggah. Ini hanya mencakup versi terbaru dari sebuah file. Terkecuali file lama dan file yang sudah dihapus",
+       "mediastatistics-table-count": "Jumlah file",
+       "mediastatistics-table-totalbytes": "Ukuran gabungan",
+       "mediastatistics-header-unknown": "Tidak diketahui",
+       "mediastatistics-header-bitmap": "Gambar bitmap",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Video",
+       "mediastatistics-header-office": "Office",
+       "mediastatistics-header-text": "Tekstual",
+       "mediastatistics-header-executable": "Executable",
+       "mediastatistics-header-archive": "Format terkompresi",
+       "json-error-depth": "Kedalaman tumpukan maksimal telah terlewati",
+       "json-error-syntax": "Kesalahan sintaks"
 }
index b1f5651..cd8748e 100644 (file)
        "search-suggest": "Esque tu ha intentet: «$1»?",
        "searchrelated": "relatet",
        "searchall": "omni",
-       "showingresultsheader": "{{PLURAL:$5|Resultate '''$1''' de '''$3'''|Resultates '''$1 – $2''' de '''$3'''}} por '''$4'''",
        "search-nonefound": "Tu sercha ne ha trovat un resultate.",
        "preferences": "Preferenties",
        "mypreferences": "Preferenties",
        "statistics": "Statistica",
        "statistics-header-pages": "Statistica del págine",
        "statistics-header-edits": "Redacter statistica",
-       "statistics-header-views": "Vider statistica",
        "statistics-header-users": "Statistica de usator",
        "statistics-header-hooks": "Altri statistica",
        "statistics-articles": "Págines de contenete",
        "statistics-files": "Files cargat",
        "statistics-edits": "Redactiones del págine desde que {{SITENAME}} esset etablisset",
        "statistics-edits-average": "Valore medial de redactiones per págine",
-       "statistics-views-total": "Total de vistas",
-       "statistics-views-peredit": "Vider por redaction",
        "statistics-users": "[[Special:ListUsers|Usatores]] registrat",
        "statistics-users-active": "Usatores activ",
        "statistics-users-active-desc": "Usatores qui have efectuat un action in li ultim {{PLURAL:$1|die|dies}}",
-       "statistics-mostpopular": "Págines max visitat",
        "brokenredirects-edit": "redacter",
        "brokenredirects-delete": "deleter",
        "withoutinterwiki": "Págines sin catenunes de lingue",
        "suppress": "Perspective comun",
        "booksources": "Librari fontes",
        "booksources-search-legend": "Serchar por fontes de libre",
-       "booksources-go": "Ear",
        "specialloguserlabel": "Executor:",
        "speciallogtitlelabel": "Cible (titul o usator):",
        "log": "Diariumes",
        "wlheader-enotif": "Li notification de e-mail es permisset.",
        "wlheader-showupdated": "Págines quel hat esset mutat desde tui ultim visitation es monstrat in '''nigri'''",
        "wlnote": "Infra {{PLURAL:$1|es li ultim change|es li ultim '''$1''' changes}} in li ultim {{PLURAL:$2|hor|'''$2''' hores}}.",
-       "wlshowlast": "Monstra ultim $1 hores $2 dies $3",
+       "wlshowlast": "Monstra ultim $1 hores $2 dies",
        "watchlist-options": "Optiones de liste de págines vigilat",
        "watching": "Vigilant...",
        "unwatching": "Desvigilant...",
        "metadata": "Metadata",
        "metadata-help": "Ti file contene information additional, probabilmen adjuntet de li cámera digitale o scandetor usat por crear o digitalizar it. Si li file ha esset redactet de tui statu original, alcun detallies posse ne reflecter completmen li file redactet.",
        "metadata-fields": "Campes metadata de figura listat in ti missage va esser includet in págine de figura monstra quande li tabelle metadata es crulat.\nAltri va esser ocultat per contumacie.\n* fabrication\n* modelle\n* origine de figura\n* témpor de exposition\n* númere\n* percentages de velocitá\n* longore focal\n* artist\n* jure editorial\n* descrition de figura\n* latitúdine\n* longitúdine\n* altitudine",
-       "watchlistall2": "omni",
        "namespacesall": "omni",
        "monthsall": "omni",
        "imgmultigo": "Ear!",
index e976fac..3aad06f 100644 (file)
        "passwordreset": "Nkuwaria okwúngáfè",
        "passwordreset-emailelement": "Áhà Ọ'banife: $1\nPasswod nke gi gbanwe: $2",
        "changeemail-none": "(efù)",
-       "changeemail-cancel": "Kàchá",
        "bold_sample": "Mkpúrù èdè íke",
        "bold_tip": "Mkpúrù èdè íke",
        "italic_sample": "Mkpurụ okwu sélénsé",
        "mergehistory-comment": "Tìkọtàrà [[:$1]] ga na ímé [[:$2]]: $3",
        "mergehistory-reason": "Mgbághapụtà:",
        "mergelog": "Tìkȯtá ndétu-nchèta",
-       "pagemerge-logentry": "tìkọtàrà [[$1]] ga na ímé [[$2]] (orübà rúrú $3)",
        "revertmerge": "Emẹkotala",
        "history-title": "Ákíkó mbu màkà orü nọr na élú \"$1\"",
        "lineno": "Ahiri $1:",
        "statistics": "Olìlé ọtụ ihe dị",
        "statistics-header-pages": "Ọmúmú-nà-ńlé ihü",
        "statistics-header-edits": "Rüwá ọmúmú-nà-ńlé",
-       "statistics-header-views": "Lé ọmúmú-nà-ńlé",
        "statistics-header-users": "Ọmúmú-nà-ńlé nke ọ'bànifé",
        "statistics-articles": "Ihü ihe dị",
        "statistics-pages": "Ihü",
        "statistics-files": "Usòrò hé tinyèrè",
-       "statistics-views-total": "Há hụrụ ya olé níle",
        "statistics-users-active": "Ọ'bànifé di galagala",
        "double-redirect-fixed-move": "[[$1]] a puziele.\nUbwa, o na ga [[$2]].",
        "brokenredirects": "Nkúfù gbàjịrị",
        "nrevisions": "{{PLURAL:$1|orübà|orübà}} $1",
        "nviews": "{{PLURAL:$1|he lèrè nke|he lèrè nke}} $1",
        "lonelypages": "Ihü nke ogbènyè",
-       "popularpages": "Ihü ne wú",
        "wantedpages": "Ihü há chọrọ",
        "prefixindex": "Ihü nílé jírí mkpụrụ édémédé nke mbu",
        "shortpages": "Ihü mkpümkpü",
        "suppress": "Aghọ",
        "booksources": "Ébé ákwúkwó shị",
        "booksources-search-legend": "Tuó íshí akwúkwó shì",
-       "booksources-go": "Gá",
        "specialloguserlabel": "Ọ'bànifé:",
        "speciallogtitlelabel": "Ishi:",
        "log": "Ndetu-nchétá",
        "unwatch": "A hükwàlà",
        "notanarticle": "Búghị ihü ihe nọr",
        "watchlist-details": "{{PLURAL:$1|ihü $1|ihü $1}} nọr na ndétu ihe Í ne lé, nke à gúgị ihü okwu.",
-       "wlshowlast": "Zi nke mbu àmànị $1 chi $2 $3",
+       "wlshowlast": "Zi nke mbu àmànị $1 chi $2",
        "watchlist-options": "Nrọta ndetu nlènlé",
        "watching": "O na hü...",
        "unwatching": "O mele ka o na á hü kwagi...",
        "filemissing": "Usòrò è fwuólé",
        "import": "Gọbàtá ihü",
        "importinterwiki": "Ngọbàtá Transwiki",
-       "import-interwiki-source": "Mkpòlógwù wiki/ihü:",
        "import-interwiki-templates": "Bàtụcha átụ́ nile",
        "import-interwiki-submit": "Dọwá bànyé",
        "import-upload-filename": "Áhà usòrò:",
        "exif-urgency-normal": "Nkịtị ($1)",
        "exif-urgency-low": "Nàlà ($1)",
        "exif-urgency-high": "Nélú ($1)",
-       "watchlistall2": "nke níle",
        "namespacesall": "nke níle",
        "monthsall": "nke níle",
        "recreate": "Ké ya ohúrù",
        "htmlform-selectorother-other": "Nke ozor",
        "revdelete-content-hid": "ihe zọ̀nàri",
        "rightsnone": "(efù)",
+       "revdelete-summary": "mmẹkotá orü",
        "feedback-message": "Ozi:",
        "feedback-close": "Ọméchá.",
        "searchsuggest-search": "Chọwa",
index ec43820..8383f2c 100644 (file)
 {
-    "@metadata": {
-        "authors": []
-    },
-    "tog-rememberpassword": "ᐃᖅᑑ ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ ᖃᑯᒍᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐅᕙᓗᒪᔪᖅ ᖃᕆᑕᐅᔭᖅ (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "sunday": "ᓴᓇᑦᑕᐃᓕ",
-    "monday": "ᓇᒡᒐᔭᖅ",
-    "wednesday": "ᐱᖓᔪᐊ",
-    "friday": "ᐸᒐᐃᑖᒃ",
-    "sun": "ᓴᓇ",
-    "mon": "ᓇᒡ",
-    "tue": "ᐱᖃ",
-    "wed": "ᐱᖓ",
-    "thu": "ᕿᑎ",
-    "fri": "ᐅᓪᓗ",
-    "sat": "ᓯᕙᑕ",
-    "january": "ᔭᓐᓄᐊᓕ",
-    "february": "ᕕᐳᐊᕆ",
-    "march": "ᒫᕐᓯ",
-    "april": "ᐊᐃᐳᕆᓪ",
-    "may_long": "ᒪᐃ",
-    "june": "ᔪᓂ",
-    "july": "ᔪᓚᐃ",
-    "august": "ᐊᐅᒍᔅ",
-    "september": "ᓯᑎᒻᐳᕆ",
-    "october": "ᐅᒃᑐᐳᕆ",
-    "november": "ᓄᕕᒻᐳᕆ",
-    "december": "ᑎᓯᒻᐳᕆ",
-    "january-gen": "ᔭᓐᓄᐊᓕ",
-    "february-gen": "ᕕᐳᐊᕆ",
-    "march-gen": "ᒫᕐᓯ",
-    "april-gen": "ᐊᐃᐳᕆᓪ",
-    "may-gen": "ᒪᐃ",
-    "june-gen": "ᔪᓂ",
-    "july-gen": "ᔪᓚᐃ",
-    "august-gen": "ᐊᐅᒍᔅ",
-    "september-gen": "ᓯᑎᒻᐳᕆ",
-    "october-gen": "ᐅᒃᑐᐳᕆ",
-    "november-gen": "ᓄᕕᒻᐳᕆ",
-    "december-gen": "ᑎᓯᒻᐳᕆ",
-    "jan": "ᔭᓐᓄ",
-    "feb": "ᕕᐳᐊ",
-    "mar": "ᓇᑦᓯ",
-    "apr": "ᐊᐃᐳ",
-    "may": "ᒪᐃ",
-    "jun": "ᔪᓂ",
-    "jul": "ᔪᓚᐃ",
-    "aug": "ᐊᐅᒍ",
-    "sep": "ᓯᑎᒻ",
-    "oct": "ᐅᒃᑐ",
-    "nov": "ᓄᕕ",
-    "dec": "ᑎᓯᒻ",
-    "about": "ᒥᒃᓵᓂ",
-    "article": "ᐃᓗᓕᒃ ᒪᑉᐱᑕᖅ",
-    "newwindow": "(ᐅᐃᑦᑐᖅ ᖃᕋᓴᐅᔭᖅ ᐃᑭᐊᖅ ᐱᒋᕗᖅ ᐃᒐᓛᖅ)",
-    "cancel": "ᐃᓂᖅᑎᐹ",
-    "moredotdotdot": "ᐱᓪᓗᐊᕆᕚ...",
-    "mypage": "ᐊᒥ ᒪᑉᐱᑕᖅ",
-    "mytalk": "ᐊᓪᓚᖁᑎᒃᑲ",
-    "navigation": "ᒥᐊᓂᕆᕚ",
-    "and": "&#32;ᐊᒻᒪ",
-    "qbedit": "ᓱᖁᓯᖅᐹ",
-    "errorpagetitle": "ᑕᒻᒪᓇᖅᑐᖅ",
-    "help": "ᖃᔭᓕᑉᐹ",
-    "search": "ᐃᕚᖅᐳᖅ",
-    "searchbutton": "ᐃᕚᖅᐳᖅ",
-    "go": "ᐊᐃᕗᖅ",
-    "searcharticle": "ᐊᐃᕗᖅ",
-    "history_short": "ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ",
-    "edit": "ᓱᖁᓯᖅᐹ",
-    "editthispage": "ᓱᖁᓯᖅᐹ ᒪᑉᐱᑕᖅ",
-    "delete": "ᓂᐸᖅᑎᐹ",
-    "protect": "ᓴᐳᒻᒥᕚ",
-    "unprotect": "ᐃᖅ ᓴᐳᒻᒥᕚ",
-    "unprotectthispage": "ᐃᖅ ᓴᐳᒻᒥᕚ ᒪᑉᐱᑕᖅ",
-    "newpage": "ᐱᒋᕗᖅ ᒪᑉᐱᑕᖅ",
-    "talkpagelinktext": "ᐅᖃᓕᒪᔪᖅ",
-    "specialpage": "ᐱᔨ ᒪᑉᐱᑕᖅ",
-    "articlepage": "ᐅᕝᕙ ᐃᓗᓕᒃ ᒪᑉᐱᑕᖅ",
-    "talk": "ᐅᖃᓕᒪᔪᖅ",
-    "toolbox": "ᓴᓇᕐᖁᑎᖃᐅᑎ",
-    "otherlanguages": "ᑭᓪᓗᒧᑦ ᐅᐃᑭ",
-    "redirectedfrom": "(ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ $1)",
-    "redirectpagesub": "ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ ᒪᑉᐱᑕᖅ",
-    "jumptonavigation": "ᒥᐊᓂᕆᕚ",
-    "jumptosearch": "ᐃᕚᖅᐳᖅ",
-    "aboutsite": "ᒥᒃᓵᓂ {{SITENAME}}",
-    "aboutpage": "Project:ᒥᒃᓵᓂ",
-    "currentevents": "ᐱᒋᕗᖅ ᐱᐅᓯᖅ",
-    "currentevents-url": "Project:ᐱᒋᕗᖅ ᐱᐅᓯᖅ",
-    "edithelp": "ᓱᖁᓯᖅᐹ ᐃᑯᕐᕆᐹ",
-    "mainpage": "ᐊᒥᖅ",
-    "mainpage-description": "ᐊᒥᖅ",
-    "portal": "ᖃᒡᒋᖅ",
-    "portal-url": "Project:ᖃᒡᒋᖅ",
-    "privacy": "ᓇᒻᒥᓂᖅ ᐱᓕᕆᕝᕕᖃᐅᖅᑐᓄᑦ ᐊᐅᓚᑕᐅᔪᑦ ᐊᑐᐊᒐᖅ, ᐱᓇᓱᐊᕐᓂᖅ",
-    "privacypage": "Project:ᓇᒻᒥᓂᖅ ᐱᓕᕆᕝᕕᖃᐅᖅᑐᓄᑦ ᐊᐅᓚᑕᐅᔪᑦ ᐊᑐᐊᒐᖅ, ᐱᓇᓱᐊᕐᓂᖅ",
-    "youhavenewmessages": "ᐃᓕᔅᓯ ᐱᒋᕚ $1 ($2).",
-    "editsection": "ᓱᖁᓯᖅᐹ ᐃᓚ",
-    "editold": "ᓱᖁᓯᖅᐹ",
-    "editsectionhint": "ᓱᖁᓯᖅᐹ ᐃᓚᖏᐅᑎᑎᑦᓯᒍᑎ: $1",
-    "showtoc": "ᐊᓚᒃᑲᑎᖅᐹ",
-    "hidetoc": "ᐃᔨᖅᐳᖅ",
-    "site-rss-feed": "$1 ᕐᔅᔅ ᒥᐊᓂᕆᕚ",
-    "site-atom-feed": "$1 ᐊᑐᒻ ᒥᐊᓂᕆᕚ",
-    "page-rss-feed": "\"$1\" ᕐᔅᔅ ᒥᐊᓂᕆᕚ",
-    "page-atom-feed": "\"$1\" ᐊᑐᒻ ᒥᐊᓂᕆᕚ",
-    "nstab-main": "ᒪᑉᐱᑕᖅ",
-    "nstab-user": "ᐃᓄᒃ ᒪᑉᐱᑕᖅ",
-    "nstab-special": "ᐱᔨ",
-    "nstab-project": "ᐱᓕᕆᐊᒃᓴᐃᑦ ᐱᕙᓪᓕᐊᔾᔪᑎᒃᓴᓄᑦ ᒪᑉᐱᑕᖅ",
-    "nstab-image": "ᐊᒋᐅᑦ",
-    "nstab-mediawiki": "ᑭᒡᒐᐹ",
-    "nstab-template": "ᒥᐊᓂᕆᕚ-ᕿᔪᖁᑦ",
-    "nstab-category": "ᓄᐊᑉᐳᑦ",
-    "badtitle": "ᐊᔪᖅᑐᖅ ᐊᑎᖅ",
-    "editinginterface": "'''ᐃᓂᖅᑎᕈᑎ—''' ᐋᕼᐊ ᓱᖁᓯᖅᐹ ᐃᑭᐊᖅ ᒪᑉᐱᑕᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐄᔭᑦᓴᖅ ᖃᕋᓴᐅᔭᖅ ᑕᖅᓴᓕᖅᐹ ᐃᑭᐊᖅ ᐊᕿᑦᑐᖅ ᖃᕆᑕᐅᔭᐅᑉ ᑎᑎᕋᕐᕕᖓ. ᐊᓯᐊᙳᑐᖅ ᐃᑭᐊᖅ ᒪᑉᐱᑕᖅ ᐃᓄᒃᑎᑐᑦ ᐅᐃᑭᐱᑎᐊ ᐊᓪᓚᖑᖅᑐᐊᖅ ᓇᑭᒪᖅᐳᖅ ᖃᑕᙳᑎ.",
-    "yourname": "ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ",
-    "yourpassword": "ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ",
-    "yourpasswordagain": "ᑕᒪᑐᒪᓃᖅᐹ ᐃᒃᓯᒐᖅᑐᖅ ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ",
-    "remembermypassword": "ᐃᖅᑑ ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ ᖃᑯᒍᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐅᕙᓗᒪᔪᖅ ᖃᕆᑕᐅᔭᖅ (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "login": "ᐊᑯᓐᓇᐳᖅ",
-    "loginprompt": "ᐱᒋᐊᓕᒃ ᐃᒪᑐᐊᖅ ᖃᕆᑕᐅᔭᖅ ᖂᑮᔅ(Cookies) ᐱᕐᖄᑎ ᐊᑯᓐᓇᐳᖅ ᐅᐃᑭᐱᑎᐊ.",
-    "userlogin": "ᐊᑯᓐᓇᐳᖅ / ᐱᕐᖄᐹ ᑮᓇᐅᔭᒃᑯᕕᖕᒥ ᑐᖅᑯᖅᓯᕕᒃ",
-    "logout": "ᐊᓂᕝᕕᒃ",
-    "userlogout": "ᐊᓂᕝᕕᒃ",
-    "nologin": "ᐊᔪᐃᓐᓈᖅ ᐃᓄᖁᑎ? '''$1'''.",
-    "nologinlink": "ᐱᕐᖄᐹ ᑮᓇᐅᔭᒃᑯᕕᖕᒥ ᑐᖅᑯᖅᓯᕕᒃ",
-    "gotaccountlink": "ᐊᑯᓐᓇᐳᖅ",
-    "mailmypassword": "ᕿᓪᓗᑐᖅ ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ",
-    "bold_sample": "ᐃᔾᔪᔪᒡ ᑕᖅᓴᓕᖅᐹ",
-    "bold_tip": "ᐃᔾᔪᔪᒡ ᑕᖅᓴᓕᖅᐹ",
-    "summary": "ᓱᕕᑦ:",
-    "minoredit": "ᐅᑭᐅᑭᓗᐊᖅᑐᖅ ᐊᓯᐊᙳᑐᖅ",
-    "watchthis": "ᐅᕝᕙ",
-    "savearticle": "ᐅᖃᐅᓯᓪᓚᕆᖏᑕ ᑎᑎᕋᖅᑕᐅᓂᖏᑦ",
-    "preview": "ᐅᕝᕙ ᖃᖓᓵᖑᓕᖅᑐᖅ",
-    "showpreview": "ᓱᖁᓯᖅᐹ ᐊᓚᒃᑲᐅᑎᕗᖅ ᓯᕗᓕᐅᖅᐹ ᐅᖃᐅᓯᓪᓚᕆᖏᑕ ᑎᑎᕋᖅᑕᐅᓂᖏᑦ",
-    "showdiff": "ᐊᓚᒃᑲᑎᑉᐹ ᐊᓯᐊᙳᑐᖅ",
-    "summary-preview": "ᓱᕕᑦ:",
-    "blockedtitle": "ᐋᖅᑭᒃᓱᐃᔨ ᐅᒥᙵᓯᓯᔪᖅ",
-    "loginreqlink": "ᐊᑯᓐᓇᐳᖅ",
-    "newarticle": "(ᐱᒋᕗᖅ)",
-    "editing": "ᐊᓯᐊᙳᑐᖅ $1",
-    "editingsection": "ᓱᖁᓯᖅᐹ ᐃᓚ $1 (ᖏᐅᑎᑎᑦᓯᒍᑎ)",
-    "editingcomment": "ᓱᖁᓯᖅᐹ $1 (ᐅᔾᔨᕆᔭᖅ)",
-    "editconflict": "ᓱᖁᓯᖅᐹ ᐊᑲᐅᙱᓕᐅᕈᑎᓂᖅ: $1",
-    "currentrev": "ᒫᓐᓇ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
-    "previousrevision": "←ᐅᑐᖃᖅ  ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
-    "nextrevision": "ᐱᓪᓗᐊᕆᕚ ᐱᒋᕗᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ→",
-    "currentrevisionlink": "ᒫᓐᓇ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
-    "next": "ᑕᒡᒐ",
-    "last": "ᐊᓐᓂᑐᔪᖅ",
-    "history-feed-title": "ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ",
-    "history-feed-description": "ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ ᐃᑭᐊᖅ ᐅᐃᑭ",
-    "history-title": "ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ \"$1\"",
-    "lineno": "ᑐᑭᖅᓯᖅ $1:",
-    "editundo": "ᐃᐱᐅᑦᔮᐹ",
-    "nextn": "ᑕᒡᒐ {{PLURAL:$1|$1}}",
-    "mypreferences": "ᐊᒥ ᐱᒃᑯᒪᓂᖅᐹᖅ",
-    "prefs-rc": "ᐱᒋᕗᖅ ᐊᓯᐊᙳᑐᖅ",
-    "searchresultshead": "ᐃᕚᖅᐳᖅ",
-    "youremail": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ:",
-    "username": "ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ:",
-    "yourrealname": "ᐃᓄᓪᓚᕆᒃ ᐊᑎᖅ:",
-    "email": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ",
-    "prefs-help-email": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ (ᐱᒃᑲᓪᓚᕗᖅ) — ᖃᑯᒍ ᓇᓗᓇᙱᓚᖅ ᐃᓕᔅᓯ ᐱᔪᖕᓇᖅᑐᖅ ᐱᒋᕚ ᑲᙳᓇᖅᑐᖅ ᐋᔩᖃᑎᒋᖏᖅ",
-    "editinguser": "ᓱᖁᓯᖅᐹ ᖃᑕᙳᑎ '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
-    "recentchanges": "ᐱᒋᕗᖅ ᐊᓯᐊᙳᑐᖅ",
-    "hide": "ᐃᔨᖅᐳᖅ",
-    "show": "ᐊᓚᒃᑲᑎᖅᐹ",
-    "minoreditletter": "ᐅ",
-    "newpageletter": "ᐱ",
-    "boteditletter": "ᑉ",
-    "recentchangeslinked": "ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ",
-    "recentchangeslinked-feed": "ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ",
-    "recentchangeslinked-toolbox": "ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ",
-    "upload": "ᒪᑉᐱᐹ ᓇᓗᓇᐃᔭᐅᑎᑦ",
-    "uploadbtn": "ᒪᑉᐱᐹ ᓇᓗᓇᐃᔭᐅᑎᑦ",
-    "filedesc": "ᐱᓕᕆᐊᒃᓴᑦ ᐱᕕᒡᔪᐊᖑᓂᖏᑦ",
-    "fileuploadsummary": "ᓱᕕᑦ:",
-    "watchthisupload": "ᐅᕝᕙ",
-    "file-anchor-link": "ᐊᒋᐅᑦ",
-    "listredirects": "ᓂᐱ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
-    "randompage": "ᓇᑭᑐᐃᓐᓇᖅ ᖃᐅᔨᓴᕐᓂᖅ ᒪᑉᐱᑕᖅ",
-    "randomredirect": "ᓇᑭᑐᐃᓐᓇᖅ ᖃᐅᔨᓴᕐᓂᖅ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
-    "statistics": "ᑭᓯᑦᓯᓯᖕᖑᕐᓗᒋᑦ ᐹᓯᔅᓱᑎᔅᓴᑦ",
-    "statistics-header-users": "ᖃᑕᙳᑎ ᑭᓯᑦᓯᓯᖕᖑᕐᓗᒋᑦ ᐹᓯᔅᓱᑎᔅᓴᑦ",
-    "doubleredirects": "ᑕᐱᕐᖃᓕᒃ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
-    "brokenredirects": "ᓇᐱᕚ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
-    "brokenredirects-edit": "ᓱᖁᓯᖅᐹ",
-    "brokenredirects-delete": "ᓂᐸᖅᑎᐹ",
-    "listusers": "ᖃᑕᙳᑎ ᓂᐱ",
-    "newpages-username": "ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ:",
-    "ancientpages": "ᒪᑉᐱᑕᖅ ᐃᑦᑐᓴᖅ ᐅᑐᖃᖅ",
-    "move": "ᐅᐊᔪᖅ",
-    "booksources-go": "ᐊᐃᕗᖅ",
-    "allpages": "ᓱᓇᒥᑦᑐᖅ ᒪᑉᐱᑕᖅ",
-    "nextpage": "ᑕᒡᒐ ᒪᑉᐱᑕᖅ ($1)",
-    "allpagessubmit": "ᐊᐃᕗᖅ",
-    "categories": "ᓄᐊᑉᐳᑦ",
-    "emailuser": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ ᐃᓄᒃ",
-    "emailfrom": "ᓇᑭᑦ",
-    "emailmessage": "ᑭᒡᒐᐹ",
-    "emailsend": "ᕿᐅᑦᓴᕕᒋᕚ",
-    "watchlist": "ᐅᕝᕙ ᒪᑉᐱᑕᖅ",
-    "mywatchlist": "ᓂᐱ ᐊᒥ",
-    "watch": "ᐅᕝᕙ",
-    "watchthispage": "ᐅᕝᕙ",
-    "unwatch": "ᐃᖅ ᐅᕝᕙ",
-    "enotif_impersonal_salutation": "{{SITENAME}} ᖃᑕᙳᑎ",
-    "created": "ᒪᑉᐱᑕᖅ ᐊᓂᕗᖅ",
-    "dellogpage": "ᓂᐸᖅ ᓂᐱ",
-    "deletionlog": "ᓂᐸᖅ ᓂᐱ",
-    "prot_1movedto2": "[[$1]] ᓱᕐᕋᒪᔪᖅ [[$2]]",
-    "protect-legend": "ᐸᑎᒻᒥᕚ ᓴᐳᒻᒥᕚ",
-    "protect-level-sysop": "ᓯᕐᓚᒃ ᑎᑎᕋᖅᓯᒪᔪᓂᒃ ᑐᖅᑯᖅᑎᕆᔨ",
-    "restriction-move": "ᐅᐊᔪᖅ",
-    "undelete-search-submit": "ᐃᕚᖅᐳᖅ",
-    "blanknamespace": "(ᐊᒥᖅ)",
-    "mycontris": "ᑕᓕᐊᖅ",
-    "sp-contributions-talk": "ᐅᖃᓕᒪᔪᖅ",
-    "sp-contributions-submit": "ᐃᕚᖅᐳᖅ",
-    "whatlinkshere": "ᐅᖅᓯᖅ ᒪᐅᖓ",
-    "isredirect": "ᑕᐱᑕᕇᒃ ᐅᖅᓯᖅ ᒪᑉᐱᑕᖅ",
-    "blockip": "ᐃᖅ ᐋᖅᑭᒃᓱᐃᔨ",
-    "badipaddress": "ᐃᓪᓕᑐᖅ ᖃᕆᓴᐅᔭᒃᑯᑦ ᑎᑎᕋᖅᓯᒪᔪᑦ ᒪᓕᒐᑎᒍᑦ ᐊᖏᕈᑕᐅᓯᒪᔪᖅ ᐅᓂᒃᑳᕆᔭᖃᕐᓂᖅ",
-    "blockipsuccesssub": "ᐅᒥᙵᓯᓯᔪᖅ ᓈᔪᖅ",
-    "ipblocklist-submit": "ᐃᕚᖅᐳᖅ",
-    "anononlyblock": "ᓯᕐᓚᒃ ᐃᓕᓴᕐᓇᙱᑎᑦᑐᖅ",
-    "blocklink": "ᐃᖅ",
-    "contribslink": "ᖃᑕᙳᑎ ᓱᖁᓯᖅᐹ",
-    "blocklogpage": "ᐅᒥᙵᓯᓯᔪᖅ/ᐃᖅ ᑎᑎᖅᑲᖁᑎᑦ ᑐᖅᑯᖅᓯᒪᔭᐃᑦ",
-    "block-log-flags-anononly": "ᐃᓕᓴᕐᓇᙱᑎᑦᑐᖅ ᐋᖅᑭᒃᓱᐃᔨ ᑭᓯᐊᓂ",
-    "block-log-flags-nocreate": "ᑮᓇᐅᔭᖃᕐᕕᒃ ᐃᓄᐃᕈᑎᕚ ᐃᓂᖅᑎᐹ ᐱᒋᕗᖅ",
-    "block-log-flags-noemail": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ",
-    "move-page-legend": "ᐅᐊᔪᖅ ᒪᑉᐱᑕᖅ",
-    "movearticle": "ᐅᐊᔪᖅ ᒪᑉᐱᑕᖅ",
-    "movelogpage": "ᐅᐊᔪᖅ ᓂᐱ",
-    "movereason": "ᐃᓱᒪᒃᓴᖅᓯᐅᕈᓐᓇᑦᑎᐊᕐᓂᖅ:",
-    "delete_and_move": "ᓂᐸᖅᑎᐹ  ᐊᒻᒪ ᐅᐊᔪᖅ",
-    "allmessagesname": "ᐊᑎᖅ",
-    "import-logentry-upload-detail": "$1 {{PLURAL:$1|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ}}",
-    "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ}} ᐃᑭᐊᖅ $2",
-    "tooltip-pt-mytalk": "ᐊᓪᓚᖁᑎᒃᑲ",
-    "tooltip-pt-preferences": "ᐊᒥ ᐱᒃᑯᒪᓂᖅᐹᖅ",
-    "tooltip-pt-logout": "ᐊᓂᕝᕕᒃ",
-    "tooltip-ca-protect": "ᓴᐳᒻᒥᕚ ᒪᑉᐱᑕᖅ",
-    "tooltip-search": "ᐃᕚᖅᐳᖅ {{SITENAME}}",
-    "tooltip-minoredit": "ᑐᐊᐸᖅ ᐊᓯᐊᙳᑐᖅ",
-    "tooltip-diff": "ᓱᕐᕋᐹ ᖃᑕᙳᑎ",
-    "tooltip-compareselectedversions": "ᐅᕝᕙ ᐊᓯᐊᙳᑐᖅ ᒪᑉᐱᑕᖅ ᐊᑯᓐᓂᖓᓐᓂ ᒪᕐᕉᒃ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
-    "anonymous": "ᐃᓕᓴᕐᓇᙱᑎᑦᑐᖅ ᖃᑕᙳᑎ ᓇᑭᑦ {{SITENAME}}",
-    "deletedrevision": "ᓂᐸᖅ ᐅᑐᖃᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ $1",
-    "previousdiff": "← ᑐᓄᓪᓕᐹᖅ ᐊᓯᐊᙳᑐᖅ",
-    "nextdiff": "ᑕᒡᒐ ᐊᓯᐊᙳᑐᖅ ᒪᑉᐱᑕᖅ →",
-    "ilsubmit": "ᐃᕚᖅᐳᖅ",
-    "bydate": "ᐱᑖᕈᑦᑐᖅ ᐃᓅᓕᕐᕕᒃ",
-    "variantname-ike-cans": "ᑎᑎᕋᐅᓯᖅ ᓄᑖᖅ",
-    "variantname-ike-latn": "ilisautik",
-    "variantname-iu": "disable",
-    "exif-imagelength": "ᖁᑦᓯᖕᓂᖅ",
-    "exif-imagedescription": "ᐃᓄᙳᐊᖅ ᐊᑎᖅ",
-    "exif-colorspace": "ᒥᖑᐊᕈᑎᒥᑎᖅᐹ",
-    "exif-datetimeoriginal": "ᖃᑦᓯᐹ ᐊᒪᒻ ᑎᑭᐅᑎ ᓴᕐᕿᐹ ᐃᓱᐃᓪᓕᖓᐃᑦᔭᐹ",
-    "exif-datetimedigitized": "ᖃᑦᓯᐹ ᐊᒪᒻ ᑎᑭᐅᑎ ᓴᕐᕿᐹ ᖃᕋᓴᐅᔭᖅ",
-    "exif-exposuretime-format": "$1 ᐊᐃᑉᐸᖅ ($2)",
-    "exif-brightnessvalue": "ᖃᐅᒻᒪᐹ ᐊᒃᑭᐅᑕᖅ",
-    "monthsall": "ᓱᓇᒥᑦᑐᖅ",
-    "confirm_purge_button": "ᐊᑲᐅᔪᖅ",
-    "imgmultipageprev": "← ᑐᓄᓪᓕᐹᖅ  ᒪᑉᐱᑕᖅ",
-    "imgmultipagenext": "ᑕᒡᒐ ᒪᑉᐱᑕᖅ →",
-    "imgmultigo": "ᐊᐃᕗᖅ!",
-    "table_pager_limit_submit": "ᐊᐃᕗᖅ",
-    "autoredircomment": "ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ [[$1]]",
-    "autosumm-new": "ᐱᒋᕗᖅ ᒪᑉᐱᑕᖅ: $1",
-    "specialpages": "ᐱᔨ ᒪᑉᐱᑕᖅ"
+       "@metadata": [],
+       "sunday": "ᓴᓇᑦᑕᐃᓕ",
+       "monday": "ᓇᒡᒐᔭᖅ",
+       "wednesday": "ᐱᖓᔪᐊ",
+       "friday": "ᐸᒐᐃᑖᒃ",
+       "sun": "ᓴᓇ",
+       "mon": "ᓇᒡ",
+       "tue": "ᐱᖃ",
+       "wed": "ᐱᖓ",
+       "thu": "ᕿᑎ",
+       "fri": "ᐅᓪᓗ",
+       "sat": "ᓯᕙᑕ",
+       "january": "ᔭᓐᓄᐊᓕ",
+       "february": "ᕕᐳᐊᕆ",
+       "march": "ᒫᕐᓯ",
+       "april": "ᐊᐃᐳᕆᓪ",
+       "may_long": "ᒪᐃ",
+       "june": "ᔪᓂ",
+       "july": "ᔪᓚᐃ",
+       "august": "ᐊᐅᒍᔅ",
+       "september": "ᓯᑎᒻᐳᕆ",
+       "october": "ᐅᒃᑐᐳᕆ",
+       "november": "ᓄᕕᒻᐳᕆ",
+       "december": "ᑎᓯᒻᐳᕆ",
+       "january-gen": "ᔭᓐᓄᐊᓕ",
+       "february-gen": "ᕕᐳᐊᕆ",
+       "march-gen": "ᒫᕐᓯ",
+       "april-gen": "ᐊᐃᐳᕆᓪ",
+       "may-gen": "ᒪᐃ",
+       "june-gen": "ᔪᓂ",
+       "july-gen": "ᔪᓚᐃ",
+       "august-gen": "ᐊᐅᒍᔅ",
+       "september-gen": "ᓯᑎᒻᐳᕆ",
+       "october-gen": "ᐅᒃᑐᐳᕆ",
+       "november-gen": "ᓄᕕᒻᐳᕆ",
+       "december-gen": "ᑎᓯᒻᐳᕆ",
+       "jan": "ᔭᓐᓄ",
+       "feb": "ᕕᐳᐊ",
+       "mar": "ᓇᑦᓯ",
+       "apr": "ᐊᐃᐳ",
+       "may": "ᒪᐃ",
+       "jun": "ᔪᓂ",
+       "jul": "ᔪᓚᐃ",
+       "aug": "ᐊᐅᒍ",
+       "sep": "ᓯᑎᒻ",
+       "oct": "ᐅᒃᑐ",
+       "nov": "ᓄᕕ",
+       "dec": "ᑎᓯᒻ",
+       "about": "ᒥᒃᓵᓂ",
+       "article": "ᐃᓗᓕᒃ ᒪᑉᐱᑕᖅ",
+       "newwindow": "(ᐅᐃᑦᑐᖅ ᖃᕋᓴᐅᔭᖅ ᐃᑭᐊᖅ ᐱᒋᕗᖅ ᐃᒐᓛᖅ)",
+       "cancel": "ᐃᓂᖅᑎᐹ",
+       "moredotdotdot": "ᐱᓪᓗᐊᕆᕚ...",
+       "mypage": "ᐊᒥ ᒪᑉᐱᑕᖅ",
+       "mytalk": "ᐊᓪᓚᖁᑎᒃᑲ",
+       "navigation": "ᒥᐊᓂᕆᕚ",
+       "and": "&#32;ᐊᒻᒪ",
+       "qbedit": "ᓱᖁᓯᖅᐹ",
+       "errorpagetitle": "ᑕᒻᒪᓇᖅᑐᖅ",
+       "help": "ᖃᔭᓕᑉᐹ",
+       "search": "ᐃᕚᖅᐳᖅ",
+       "searchbutton": "ᐃᕚᖅᐳᖅ",
+       "go": "ᐊᐃᕗᖅ",
+       "searcharticle": "ᐊᐃᕗᖅ",
+       "history_short": "ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ",
+       "edit": "ᓱᖁᓯᖅᐹ",
+       "editthispage": "ᓱᖁᓯᖅᐹ ᒪᑉᐱᑕᖅ",
+       "delete": "ᓂᐸᖅᑎᐹ",
+       "protect": "ᓴᐳᒻᒥᕚ",
+       "unprotect": "ᐃᖅ ᓴᐳᒻᒥᕚ",
+       "unprotectthispage": "ᐃᖅ ᓴᐳᒻᒥᕚ ᒪᑉᐱᑕᖅ",
+       "newpage": "ᐱᒋᕗᖅ ᒪᑉᐱᑕᖅ",
+       "talkpagelinktext": "ᐅᖃᓕᒪᔪᖅ",
+       "specialpage": "ᐱᔨ ᒪᑉᐱᑕᖅ",
+       "articlepage": "ᐅᕝᕙ ᐃᓗᓕᒃ ᒪᑉᐱᑕᖅ",
+       "talk": "ᐅᖃᓕᒪᔪᖅ",
+       "toolbox": "ᓴᓇᕐᖁᑎᖃᐅᑎ",
+       "otherlanguages": "ᑭᓪᓗᒧᑦ ᐅᐃᑭ",
+       "redirectedfrom": "(ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ $1)",
+       "redirectpagesub": "ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ ᒪᑉᐱᑕᖅ",
+       "jumptonavigation": "ᒥᐊᓂᕆᕚ",
+       "jumptosearch": "ᐃᕚᖅᐳᖅ",
+       "aboutsite": "ᒥᒃᓵᓂ {{SITENAME}}",
+       "aboutpage": "Project:ᒥᒃᓵᓂ",
+       "currentevents": "ᐱᒋᕗᖅ ᐱᐅᓯᖅ",
+       "currentevents-url": "Project:ᐱᒋᕗᖅ ᐱᐅᓯᖅ",
+       "edithelp": "ᓱᖁᓯᖅᐹ ᐃᑯᕐᕆᐹ",
+       "mainpage": "ᐊᒥᖅ",
+       "mainpage-description": "ᐊᒥᖅ",
+       "portal": "ᖃᒡᒋᖅ",
+       "portal-url": "Project:ᖃᒡᒋᖅ",
+       "privacy": "ᓇᒻᒥᓂᖅ ᐱᓕᕆᕝᕕᖃᐅᖅᑐᓄᑦ ᐊᐅᓚᑕᐅᔪᑦ ᐊᑐᐊᒐᖅ, ᐱᓇᓱᐊᕐᓂᖅ",
+       "privacypage": "Project:ᓇᒻᒥᓂᖅ ᐱᓕᕆᕝᕕᖃᐅᖅᑐᓄᑦ ᐊᐅᓚᑕᐅᔪᑦ ᐊᑐᐊᒐᖅ, ᐱᓇᓱᐊᕐᓂᖅ",
+       "youhavenewmessages": "ᐃᓕᔅᓯ ᐱᒋᕚ $1 ($2).",
+       "editsection": "ᓱᖁᓯᖅᐹ ᐃᓚ",
+       "editold": "ᓱᖁᓯᖅᐹ",
+       "editsectionhint": "ᓱᖁᓯᖅᐹ ᐃᓚᖏᐅᑎᑎᑦᓯᒍᑎ: $1",
+       "showtoc": "ᐊᓚᒃᑲᑎᖅᐹ",
+       "hidetoc": "ᐃᔨᖅᐳᖅ",
+       "site-rss-feed": "$1 ᕐᔅᔅ ᒥᐊᓂᕆᕚ",
+       "site-atom-feed": "$1 ᐊᑐᒻ ᒥᐊᓂᕆᕚ",
+       "page-rss-feed": "\"$1\" ᕐᔅᔅ ᒥᐊᓂᕆᕚ",
+       "page-atom-feed": "\"$1\" ᐊᑐᒻ ᒥᐊᓂᕆᕚ",
+       "nstab-main": "ᒪᑉᐱᑕᖅ",
+       "nstab-user": "ᐃᓄᒃ ᒪᑉᐱᑕᖅ",
+       "nstab-special": "ᐱᔨ",
+       "nstab-project": "ᐱᓕᕆᐊᒃᓴᐃᑦ ᐱᕙᓪᓕᐊᔾᔪᑎᒃᓴᓄᑦ ᒪᑉᐱᑕᖅ",
+       "nstab-image": "ᐊᒋᐅᑦ",
+       "nstab-mediawiki": "ᑭᒡᒐᐹ",
+       "nstab-template": "ᒥᐊᓂᕆᕚ-ᕿᔪᖁᑦ",
+       "nstab-category": "ᓄᐊᑉᐳᑦ",
+       "badtitle": "ᐊᔪᖅᑐᖅ ᐊᑎᖅ",
+       "editinginterface": "'''ᐃᓂᖅᑎᕈᑎ—''' ᐋᕼᐊ ᓱᖁᓯᖅᐹ ᐃᑭᐊᖅ ᒪᑉᐱᑕᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐄᔭᑦᓴᖅ ᖃᕋᓴᐅᔭᖅ ᑕᖅᓴᓕᖅᐹ ᐃᑭᐊᖅ ᐊᕿᑦᑐᖅ ᖃᕆᑕᐅᔭᐅᑉ ᑎᑎᕋᕐᕕᖓ. ᐊᓯᐊᙳᑐᖅ ᐃᑭᐊᖅ ᒪᑉᐱᑕᖅ ᐃᓄᒃᑎᑐᑦ ᐅᐃᑭᐱᑎᐊ ᐊᓪᓚᖑᖅᑐᐊᖅ ᓇᑭᒪᖅᐳᖅ ᖃᑕᙳᑎ.",
+       "yourname": "ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ",
+       "yourpassword": "ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ",
+       "yourpasswordagain": "ᑕᒪᑐᒪᓃᖅᐹ ᐃᒃᓯᒐᖅᑐᖅ ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ",
+       "remembermypassword": "ᐃᖅᑑ ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ ᖃᑯᒍᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐅᕙᓗᒪᔪᖅ ᖃᕆᑕᐅᔭᖅ (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "login": "ᐊᑯᓐᓇᐳᖅ",
+       "userlogin": "ᐊᑯᓐᓇᐳᖅ / ᐱᕐᖄᐹ ᑮᓇᐅᔭᒃᑯᕕᖕᒥ ᑐᖅᑯᖅᓯᕕᒃ",
+       "logout": "ᐊᓂᕝᕕᒃ",
+       "userlogout": "ᐊᓂᕝᕕᒃ",
+       "nologin": "ᐊᔪᐃᓐᓈᖅ ᐃᓄᖁᑎ? '''$1'''.",
+       "nologinlink": "ᐱᕐᖄᐹ ᑮᓇᐅᔭᒃᑯᕕᖕᒥ ᑐᖅᑯᖅᓯᕕᒃ",
+       "gotaccountlink": "ᐊᑯᓐᓇᐳᖅ",
+       "mailmypassword": "ᕿᓪᓗᑐᖅ ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ",
+       "bold_sample": "ᐃᔾᔪᔪᒡ ᑕᖅᓴᓕᖅᐹ",
+       "bold_tip": "ᐃᔾᔪᔪᒡ ᑕᖅᓴᓕᖅᐹ",
+       "summary": "ᓱᕕᑦ:",
+       "minoredit": "ᐅᑭᐅᑭᓗᐊᖅᑐᖅ ᐊᓯᐊᙳᑐᖅ",
+       "watchthis": "ᐅᕝᕙ",
+       "savearticle": "ᐅᖃᐅᓯᓪᓚᕆᖏᑕ ᑎᑎᕋᖅᑕᐅᓂᖏᑦ",
+       "preview": "ᐅᕝᕙ ᖃᖓᓵᖑᓕᖅᑐᖅ",
+       "showpreview": "ᓱᖁᓯᖅᐹ ᐊᓚᒃᑲᐅᑎᕗᖅ ᓯᕗᓕᐅᖅᐹ ᐅᖃᐅᓯᓪᓚᕆᖏᑕ ᑎᑎᕋᖅᑕᐅᓂᖏᑦ",
+       "showdiff": "ᐊᓚᒃᑲᑎᑉᐹ ᐊᓯᐊᙳᑐᖅ",
+       "summary-preview": "ᓱᕕᑦ:",
+       "blockedtitle": "ᐋᖅᑭᒃᓱᐃᔨ ᐅᒥᙵᓯᓯᔪᖅ",
+       "loginreqlink": "ᐊᑯᓐᓇᐳᖅ",
+       "newarticle": "(ᐱᒋᕗᖅ)",
+       "editing": "ᐊᓯᐊᙳᑐᖅ $1",
+       "editingsection": "ᓱᖁᓯᖅᐹ ᐃᓚ $1 (ᖏᐅᑎᑎᑦᓯᒍᑎ)",
+       "editingcomment": "ᓱᖁᓯᖅᐹ $1 (ᐅᔾᔨᕆᔭᖅ)",
+       "editconflict": "ᓱᖁᓯᖅᐹ ᐊᑲᐅᙱᓕᐅᕈᑎᓂᖅ: $1",
+       "currentrev": "ᒫᓐᓇ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
+       "previousrevision": "←ᐅᑐᖃᖅ  ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
+       "nextrevision": "ᐱᓪᓗᐊᕆᕚ ᐱᒋᕗᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ→",
+       "currentrevisionlink": "ᒫᓐᓇ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
+       "next": "ᑕᒡᒐ",
+       "last": "ᐊᓐᓂᑐᔪᖅ",
+       "history-feed-title": "ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ",
+       "history-feed-description": "ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ ᐃᑭᐊᖅ ᐅᐃᑭ",
+       "history-title": "ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ \"$1\"",
+       "lineno": "ᑐᑭᖅᓯᖅ $1:",
+       "editundo": "ᐃᐱᐅᑦᔮᐹ",
+       "nextn": "ᑕᒡᒐ {{PLURAL:$1|$1}}",
+       "mypreferences": "ᐊᒥ ᐱᒃᑯᒪᓂᖅᐹᖅ",
+       "prefs-rc": "ᐱᒋᕗᖅ ᐊᓯᐊᙳᑐᖅ",
+       "searchresultshead": "ᐃᕚᖅᐳᖅ",
+       "youremail": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ:",
+       "username": "ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ:",
+       "yourrealname": "ᐃᓄᓪᓚᕆᒃ ᐊᑎᖅ:",
+       "email": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ",
+       "prefs-help-email": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ (ᐱᒃᑲᓪᓚᕗᖅ) — ᖃᑯᒍ ᓇᓗᓇᙱᓚᖅ ᐃᓕᔅᓯ ᐱᔪᖕᓇᖅᑐᖅ ᐱᒋᕚ ᑲᙳᓇᖅᑐᖅ ᐋᔩᖃᑎᒋᖏᖅ",
+       "editinguser": "ᓱᖁᓯᖅᐹ ᖃᑕᙳᑎ '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+       "recentchanges": "ᐱᒋᕗᖅ ᐊᓯᐊᙳᑐᖅ",
+       "hide": "ᐃᔨᖅᐳᖅ",
+       "show": "ᐊᓚᒃᑲᑎᖅᐹ",
+       "minoreditletter": "ᐅ",
+       "newpageletter": "ᐱ",
+       "boteditletter": "ᑉ",
+       "recentchangeslinked": "ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ",
+       "recentchangeslinked-feed": "ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ",
+       "recentchangeslinked-toolbox": "ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ",
+       "upload": "ᒪᑉᐱᐹ ᓇᓗᓇᐃᔭᐅᑎᑦ",
+       "uploadbtn": "ᒪᑉᐱᐹ ᓇᓗᓇᐃᔭᐅᑎᑦ",
+       "filedesc": "ᐱᓕᕆᐊᒃᓴᑦ ᐱᕕᒡᔪᐊᖑᓂᖏᑦ",
+       "fileuploadsummary": "ᓱᕕᑦ:",
+       "watchthisupload": "ᐅᕝᕙ",
+       "file-anchor-link": "ᐊᒋᐅᑦ",
+       "listredirects": "ᓂᐱ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
+       "randompage": "ᓇᑭᑐᐃᓐᓇᖅ ᖃᐅᔨᓴᕐᓂᖅ ᒪᑉᐱᑕᖅ",
+       "randomredirect": "ᓇᑭᑐᐃᓐᓇᖅ ᖃᐅᔨᓴᕐᓂᖅ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
+       "statistics": "ᑭᓯᑦᓯᓯᖕᖑᕐᓗᒋᑦ ᐹᓯᔅᓱᑎᔅᓴᑦ",
+       "statistics-header-users": "ᖃᑕᙳᑎ ᑭᓯᑦᓯᓯᖕᖑᕐᓗᒋᑦ ᐹᓯᔅᓱᑎᔅᓴᑦ",
+       "doubleredirects": "ᑕᐱᕐᖃᓕᒃ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
+       "brokenredirects": "ᓇᐱᕚ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
+       "brokenredirects-edit": "ᓱᖁᓯᖅᐹ",
+       "brokenredirects-delete": "ᓂᐸᖅᑎᐹ",
+       "listusers": "ᖃᑕᙳᑎ ᓂᐱ",
+       "newpages-username": "ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ:",
+       "ancientpages": "ᒪᑉᐱᑕᖅ ᐃᑦᑐᓴᖅ ᐅᑐᖃᖅ",
+       "move": "ᐅᐊᔪᖅ",
+       "allpages": "ᓱᓇᒥᑦᑐᖅ ᒪᑉᐱᑕᖅ",
+       "nextpage": "ᑕᒡᒐ ᒪᑉᐱᑕᖅ ($1)",
+       "allpagessubmit": "ᐊᐃᕗᖅ",
+       "categories": "ᓄᐊᑉᐳᑦ",
+       "emailuser": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ ᐃᓄᒃ",
+       "emailfrom": "ᓇᑭᑦ",
+       "emailmessage": "ᑭᒡᒐᐹ",
+       "emailsend": "ᕿᐅᑦᓴᕕᒋᕚ",
+       "watchlist": "ᐅᕝᕙ ᒪᑉᐱᑕᖅ",
+       "mywatchlist": "ᓂᐱ ᐊᒥ",
+       "watch": "ᐅᕝᕙ",
+       "watchthispage": "ᐅᕝᕙ",
+       "unwatch": "ᐃᖅ ᐅᕝᕙ",
+       "enotif_impersonal_salutation": "{{SITENAME}} ᖃᑕᙳᑎ",
+       "created": "ᒪᑉᐱᑕᖅ ᐊᓂᕗᖅ",
+       "dellogpage": "ᓂᐸᖅ ᓂᐱ",
+       "deletionlog": "ᓂᐸᖅ ᓂᐱ",
+       "prot_1movedto2": "[[$1]] ᓱᕐᕋᒪᔪᖅ [[$2]]",
+       "protect-legend": "ᐸᑎᒻᒥᕚ ᓴᐳᒻᒥᕚ",
+       "protect-level-sysop": "ᓯᕐᓚᒃ ᑎᑎᕋᖅᓯᒪᔪᓂᒃ ᑐᖅᑯᖅᑎᕆᔨ",
+       "restriction-move": "ᐅᐊᔪᖅ",
+       "undelete-search-submit": "ᐃᕚᖅᐳᖅ",
+       "blanknamespace": "(ᐊᒥᖅ)",
+       "mycontris": "ᑕᓕᐊᖅ",
+       "sp-contributions-talk": "ᐅᖃᓕᒪᔪᖅ",
+       "sp-contributions-submit": "ᐃᕚᖅᐳᖅ",
+       "whatlinkshere": "ᐅᖅᓯᖅ ᒪᐅᖓ",
+       "isredirect": "ᑕᐱᑕᕇᒃ ᐅᖅᓯᖅ ᒪᑉᐱᑕᖅ",
+       "blockip": "ᐃᖅ ᐋᖅᑭᒃᓱᐃᔨ",
+       "badipaddress": "ᐃᓪᓕᑐᖅ ᖃᕆᓴᐅᔭᒃᑯᑦ ᑎᑎᕋᖅᓯᒪᔪᑦ ᒪᓕᒐᑎᒍᑦ ᐊᖏᕈᑕᐅᓯᒪᔪᖅ ᐅᓂᒃᑳᕆᔭᖃᕐᓂᖅ",
+       "blockipsuccesssub": "ᐅᒥᙵᓯᓯᔪᖅ ᓈᔪᖅ",
+       "ipblocklist-submit": "ᐃᕚᖅᐳᖅ",
+       "anononlyblock": "ᓯᕐᓚᒃ ᐃᓕᓴᕐᓇᙱᑎᑦᑐᖅ",
+       "blocklink": "ᐃᖅ",
+       "contribslink": "ᖃᑕᙳᑎ ᓱᖁᓯᖅᐹ",
+       "blocklogpage": "ᐅᒥᙵᓯᓯᔪᖅ/ᐃᖅ ᑎᑎᖅᑲᖁᑎᑦ ᑐᖅᑯᖅᓯᒪᔭᐃᑦ",
+       "block-log-flags-anononly": "ᐃᓕᓴᕐᓇᙱᑎᑦᑐᖅ ᐋᖅᑭᒃᓱᐃᔨ ᑭᓯᐊᓂ",
+       "block-log-flags-nocreate": "ᑮᓇᐅᔭᖃᕐᕕᒃ ᐃᓄᐃᕈᑎᕚ ᐃᓂᖅᑎᐹ ᐱᒋᕗᖅ",
+       "block-log-flags-noemail": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ",
+       "move-page-legend": "ᐅᐊᔪᖅ ᒪᑉᐱᑕᖅ",
+       "movearticle": "ᐅᐊᔪᖅ ᒪᑉᐱᑕᖅ",
+       "movelogpage": "ᐅᐊᔪᖅ ᓂᐱ",
+       "movereason": "ᐃᓱᒪᒃᓴᖅᓯᐅᕈᓐᓇᑦᑎᐊᕐᓂᖅ:",
+       "delete_and_move": "ᓂᐸᖅᑎᐹ  ᐊᒻᒪ ᐅᐊᔪᖅ",
+       "allmessagesname": "ᐊᑎᖅ",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ}}",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ}} ᐃᑭᐊᖅ $2",
+       "tooltip-pt-mytalk": "ᐊᓪᓚᖁᑎᒃᑲ",
+       "tooltip-pt-preferences": "ᐊᒥ ᐱᒃᑯᒪᓂᖅᐹᖅ",
+       "tooltip-pt-logout": "ᐊᓂᕝᕕᒃ",
+       "tooltip-ca-protect": "ᓴᐳᒻᒥᕚ ᒪᑉᐱᑕᖅ",
+       "tooltip-search": "ᐃᕚᖅᐳᖅ {{SITENAME}}",
+       "tooltip-minoredit": "ᑐᐊᐸᖅ ᐊᓯᐊᙳᑐᖅ",
+       "tooltip-diff": "ᓱᕐᕋᐹ ᖃᑕᙳᑎ",
+       "tooltip-compareselectedversions": "ᐅᕝᕙ ᐊᓯᐊᙳᑐᖅ ᒪᑉᐱᑕᖅ ᐊᑯᓐᓂᖓᓐᓂ ᒪᕐᕉᒃ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
+       "anonymous": "ᐃᓕᓴᕐᓇᙱᑎᑦᑐᖅ ᖃᑕᙳᑎ ᓇᑭᑦ {{SITENAME}}",
+       "deletedrevision": "ᓂᐸᖅ ᐅᑐᖃᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ $1",
+       "previousdiff": "← ᑐᓄᓪᓕᐹᖅ ᐊᓯᐊᙳᑐᖅ",
+       "nextdiff": "ᑕᒡᒐ ᐊᓯᐊᙳᑐᖅ ᒪᑉᐱᑕᖅ →",
+       "ilsubmit": "ᐃᕚᖅᐳᖅ",
+       "bydate": "ᐱᑖᕈᑦᑐᖅ ᐃᓅᓕᕐᕕᒃ",
+       "variantname-ike-cans": "ᑎᑎᕋᐅᓯᖅ ᓄᑖᖅ",
+       "variantname-ike-latn": "ilisautik",
+       "variantname-iu": "disable",
+       "exif-imagelength": "ᖁᑦᓯᖕᓂᖅ",
+       "exif-imagedescription": "ᐃᓄᙳᐊᖅ ᐊᑎᖅ",
+       "exif-colorspace": "ᒥᖑᐊᕈᑎᒥᑎᖅᐹ",
+       "exif-datetimeoriginal": "ᖃᑦᓯᐹ ᐊᒪᒻ ᑎᑭᐅᑎ ᓴᕐᕿᐹ ᐃᓱᐃᓪᓕᖓᐃᑦᔭᐹ",
+       "exif-datetimedigitized": "ᖃᑦᓯᐹ ᐊᒪᒻ ᑎᑭᐅᑎ ᓴᕐᕿᐹ ᖃᕋᓴᐅᔭᖅ",
+       "exif-exposuretime-format": "$1 ᐊᐃᑉᐸᖅ ($2)",
+       "exif-brightnessvalue": "ᖃᐅᒻᒪᐹ ᐊᒃᑭᐅᑕᖅ",
+       "monthsall": "ᓱᓇᒥᑦᑐᖅ",
+       "confirm_purge_button": "ᐊᑲᐅᔪᖅ",
+       "imgmultipageprev": "← ᑐᓄᓪᓕᐹᖅ  ᒪᑉᐱᑕᖅ",
+       "imgmultipagenext": "ᑕᒡᒐ ᒪᑉᐱᑕᖅ →",
+       "imgmultigo": "ᐊᐃᕗᖅ!",
+       "table_pager_limit_submit": "ᐊᐃᕗᖅ",
+       "autoredircomment": "ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ [[$1]]",
+       "autosumm-new": "ᐱᒋᕗᖅ ᒪᑉᐱᑕᖅ: $1",
+       "specialpages": "ᐱᔨ ᒪᑉᐱᑕᖅ"
 }
index 67bd863..5ab35e2 100644 (file)
 {
-    "@metadata": {
-        "authors": []
-    },
-    "tog-rememberpassword": "Iqtuu uikipitia atiq qakugiq atuinnasivuq uvalumaq qaritaujaq (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "sunday": "sanattaili",
-    "monday": "naggajaq",
-    "wednesday": "pingajua",
-    "friday": "pagaitaak",
-    "sun": "sana",
-    "mon": "nag",
-    "wed": "pinga",
-    "january": "januari",
-    "february": "vipuari",
-    "march": "maarsi",
-    "april": "aipuril",
-    "may_long": "mai",
-    "june": "juni",
-    "july": "julai",
-    "august": "augus",
-    "october": "uktupuri",
-    "november": "nuvimpuri",
-    "december": "tisimpuri",
-    "january-gen": "januari",
-    "february-gen": "vipuari",
-    "march-gen": "maarsi",
-    "april-gen": "aipuril",
-    "may-gen": "mai",
-    "june-gen": "juni",
-    "july-gen": "julai",
-    "august-gen": "augus",
-    "october-gen": "uktupuri",
-    "november-gen": "nuvimpuri",
-    "december-gen": "tisimpuri",
-    "apr": "aipu",
-    "may": "mai",
-    "aug": "augu",
-    "nov": "nuvi",
-    "about": "miksaani",
-    "article": "ilulik mappitaq",
-    "newwindow": "(uittuq qarasaujaq ikiaq pigivuq igalaaq)",
-    "cancel": "iniqtipaa",
-    "moredotdotdot": "pilluarivaa...",
-    "mypage": "ami mappitaq",
-    "mytalk": "atlarqutikka",
-    "navigation": "mianirivaa",
-    "and": "&#32;amma",
-    "vector-view-edit": "Suqusiqpaa",
-    "help": "qajalippaa",
-    "search": "ivaaqpuq",
-    "searchbutton": "ivaaqpuq",
-    "go": "aivuq",
-    "searcharticle": "aivuk",
-    "history_short": "mappitaq kingunittinni",
-    "edit": "Suqusiqpaa",
-    "editthispage": "suqusiqpaa mappitaq",
-    "delete": "nipaqtipaa",
-    "protect": "sapummivaa",
-    "unprotect": "iq sapummivaa",
-    "unprotectthispage": "iq sapummivaa mappitaq",
-    "newpage": "pigivuk mappitaq",
-    "specialpage": "piji mappitaq",
-    "articlepage": "ilulik mappitaq uvva",
-    "talk": "uqalimajuq",
-    "toolbox": "sanarqutiqauti",
-    "otherlanguages": "killumut uiki",
-    "redirectedfrom": "(qaningani kamagijaq aasit nakit $1)",
-    "redirectpagesub": "aningani kamagijaq aasit nakit mappitaq",
-    "jumptonavigation": "mianirivaa",
-    "jumptosearch": "ivaaqpuq",
-    "aboutsite": "miksaani {{SITENAME}}",
-    "aboutpage": "Project:miksaani",
-    "currentevents": "pigivuq piusiq",
-    "currentevents-url": "Project:pigivuq piusiq",
-    "edithelp": "ikurripaa suqusiqpaa",
-    "mainpage": "amiq",
-    "mainpage-description": "amiq",
-    "portal": "qaggiq",
-    "portal-url": "Project:qaggiq",
-    "privacy": "namminiq pilirivviqauqtunut aulataujut atuagaq, pinasuarniq",
-    "privacypage": "Project:namminiq pilirivviqauqtunut aulataujut atuagaq, pinasuarniq",
-    "youhavenewmessages": "ilissu pigivaa $1 ($2).",
-    "editsection": "suqusiqpaa",
-    "editold": "suqusiqpaa",
-    "editlink": "suqusiqpaa",
-    "editsectionhint": "suqusiqpaa ilangiutititsiguti: $1",
-    "site-rss-feed": "$1 rss mianirivaa",
-    "site-atom-feed": "$1 atum mianirivaa",
-    "page-rss-feed": "\"$1\" rss mianirivaa",
-    "page-atom-feed": "\"$1\" atum mianirivaa",
-    "nstab-main": "mappitaq",
-    "nstab-user": "inuk mappitaq",
-    "nstab-special": "piji",
-    "nstab-project": "piliriaksait pivalliajjutiksanut miqitaq",
-    "nstab-mediawiki": "kiggapaa",
-    "nstab-template": "mianirivaa-qijuqut",
-    "nstab-category": "nuapput",
-    "badtitle": "ajuqtuq atiq",
-    "editinginterface": "'''iniqtiruti—''' aaha suqusiqpaa iqiak mappitaq atuinnasivuq iijatsaq qarasaujaq taqsaliqpaa ikiaq aqittuq qaritaujaup titirarvinga. asiaNngutuq ikiaq mappitaq inuktitut uikipitia allanguqtuaq nakimaqpuq qatannguti.",
-    "yourname": "uikipitia atiq",
-    "yourpassword": "uikipitia palanngasauti",
-    "yourpasswordagain": "tamatumaniiqpaa iksigaqtuq uikipitia palanngasauti",
-    "remembermypassword": "iqtuu uikipitia atiq qakakuq atuinnasivuq uvalumajuq qaritaujaq (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "login": "akunnapuq",
-    "loginprompt": "pigialik imatuaq qaritaujaq quukiis (Cookies) pirqaati akunnapuq {{SITENAME}}.",
-    "userlogin": "akunnapuq / pirqaapaa kiinaijakkuvingmi tuqkuqsivik",
-    "logout": "anivvik",
-    "userlogout": "anivvik",
-    "nologin": "ajuinnaaq inuquti? '''$1'''.",
-    "nologinlink": "pirqaapaa kiinaujakkuvingmi tuqkuqsivik",
-    "mailmypassword": "qillutuq uikipitia palanngasauti kigutiup sitiniqpaanga",
-    "bold_sample": "ijjujug taqsaliqpaa",
-    "bold_tip": "ijjujug taqsaliqpaa",
-    "summary": "suvit:",
-    "minoredit": "ukiukiluaq asianngutuq",
-    "watchthis": "uvva",
-    "savearticle": "uqausillaringgita titiraqtauninggil",
-    "preview": "uvva qangasaanguliqtuq",
-    "showpreview": "surkuqpaa alakkautivuq sivuliqpaa uqaasillarigita titiraqtauningigit",
-    "showdiff": "alakkatippaa asianngutuq",
-    "summary-preview": "suvit preview:",
-    "blockedtitle": "aaqqiksuiji uminngasisijuq",
-    "loginreqlink": "akunnapuq",
-    "newarticle": "(pigivuk)",
-    "editingsection": "suqusiqpaa $1 (ilangiutititsiguti)",
-    "editingcomment": "suqusiqpaa $1 (ujjirijaq)",
-    "editconflict": "suqusiqpaa akaunngiliurutiniq: $1",
-    "currentrev": "maanna titiraqtaugiarngarut",
-    "previousrevision": "←utuqaq titiraqtaugiarngarut",
-    "nextrevision": "pilluarivaa pigivuk revision titiraqtaugiarngarut→",
-    "currentrevisionlink": "maanna titiraqtaugiarngarut",
-    "next": "tagga",
-    "history-feed-title": "titiraqtaugiarngarut mappitaq kingunittinni",
-    "history-feed-description": "titiraqtaugiarngarut mappitaq kingunittinni ikiaq uiki",
-    "history-title": "titiraqtaugiarngarut mappitaq kingunittinni \"$1\"",
-    "lineno": "tukiqsiq $1:",
-    "editundo": "ipiutjaapaa",
-    "nextn": "tagga {{PLURAL:$1|$1}}",
-    "mypreferences": "mi pikkumaniqpaaq",
-    "prefs-rc": "pigivuq asianngutuq",
-    "searchresultshead": "ivaaqpuq",
-    "youremail": "kigutiup sitiniqpaanga:",
-    "username": "uikipitia atiq:",
-    "yourrealname": "inullarik atiq:",
-    "email": "kigutiup sitiniqpaanga",
-    "prefs-help-email": "kigutiup sitiniqpaanga (pikkallavuq) — qakugu nalunanngilaq ilissi pijungnaqtuq pigivaa kanngunaqtuq aajiiqatiginggiq",
-    "editinguser": "suqusiqpaa qatannguti '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
-    "recentchanges": "pigivuq asianngutuq",
-    "recentchangeslinked": "asiaNngutuq mitsaasijuq",
-    "recentchangeslinked-feed": "asiaNngutuq mitsaasijuq",
-    "recentchangeslinked-toolbox": "asiaNngutuq mitsaasijuq",
-    "upload": "mappipaa nalinaijatit",
-    "uploadbtn": "mappipaa nalunaijautit",
-    "filedesc": "piliriaksat pivigjuanguningit",
-    "fileuploadsummary": "suvit:",
-    "watchthisupload": "uvva",
-    "listredirects": "nipi qaningani kamagijaq aasit nakit",
-    "randompage": "nakituinnaq qaujisarniq mappitaq",
-    "randomredirect": "nakituinnaq qaujisarniq qaningani kamagijaq aasit nakit",
-    "statistics": "kisitsisillgurlugitpasissitissat",
-    "statistics-header-users": "qatannguti kisitsisillgurlugitpasissitissat",
-    "doubleredirects": "tapirqilik qaningani kamagijaq aasit nakit",
-    "brokenredirects": "napivaa qaningani kamagijaq aasit nakit",
-    "brokenredirects-edit": "suqusiqpaa",
-    "brokenredirects-delete": "nipaqtipaa",
-    "listusers": "qatannguti nipi",
-    "newpages-username": "uikipitia atiq:",
-    "ancientpages": "utuqaq ittusaq mappitaq",
-    "move": "uajuq",
-    "booksources-go": "aivuq",
-    "allpages": "sunamittuq mappitaq",
-    "nextpage": "tagga mappitaq ($1)",
-    "allpagessubmit": "aivuk",
-    "categories": "nuapput",
-    "emailfrom": "nakit",
-    "emailmessage": "kiggapaa",
-    "emailsend": "qiutsavigivaa",
-    "watchlist": "uvva mappitaq",
-    "mywatchlist": "nipi ami",
-    "watch": "uvva",
-    "watchthispage": "uvva",
-    "unwatch": "iq uvva",
-    "enotif_impersonal_salutation": "{{SITENAME}} qatannguti",
-    "created": "mappitaq anivuq",
-    "dellogpage": "nipaq nipi",
-    "deletionlog": "nipaq nipi",
-    "prot_1movedto2": "[[$1]] surramajuq [[$2]]",
-    "protect-legend": "patimmivaa sapummivaa",
-    "protect-level-sysop": "sirlak titiraqsimajunik tuqquqtiriji",
-    "restriction-edit": "Suqusiqpaa",
-    "restriction-move": "uajuq",
-    "undelete-search-submit": "ivaaqpuq",
-    "blanknamespace": "(amiq)",
-    "mycontris": "taliaq",
-    "sp-contributions-submit": "ivaaqpuq",
-    "whatlinkshere": "uqsiq maungu",
-    "isredirect": "tapitariik uqsaq mappitaq",
-    "blockip": "iq aaqqiksuiji",
-    "badipaddress": "illituq qarisaujakkut titiraqsimajut maligatigut angirutausimajuq unikkaarijaqarniq",
-    "blockipsuccesssub": "uminngasisijuq naajuq",
-    "ipblocklist-submit": "ivaaqpuq",
-    "anononlyblock": "sirlak ilisarnanngitittuq",
-    "blocklink": "iq",
-    "contribslink": "qatannguti suqusiqpaa",
-    "blocklogpage": "uminngasisijuq/iq titiqqaqutit tuqquqsimajait",
-    "block-log-flags-anononly": "ilisarnanngitittuq aaqqiksuiji kisiani",
-    "block-log-flags-nocreate": "kiinaujaqarvik inuirutivaa iniqtipaa pigivuq",
-    "block-log-flags-noemail": "kigutiup sitiniqpaanga uminngasisijuq",
-    "move-page-legend": "uajuq mappitaq",
-    "movearticle": "uajuq mappitaq",
-    "movelogpage": "uajuq nipi",
-    "delete_and_move": "nipaqtipaa amma uajuq",
-    "allmessagesname": "atiq",
-    "import-logentry-upload-detail": "$1 {{PLURAL:$1|titiraqtaugiarngarut|titiraqtaugiarngarut}}",
-    "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|titiraqtaugiarngarut|titiraqtaugiarngarut}} ikiaq $2",
-    "tooltip-ca-protect": "sapummivaa mappitaq",
-    "tooltip-search": "ivaaqpuq {{SITENAME}}",
-    "tooltip-minoredit": "tuapaq asiaNngutuq",
-    "tooltip-diff": "surrapaa qatannguti",
-    "tooltip-compareselectedversions": "uvva asiaNngutuq mappitaq akunninganni marruuk titiraqtaugiarngarut",
-    "anonymous": "ilisarnanngitittuq qatannguti nakit {{SITENAME}}",
-    "deletedrevision": "nipaq utuqaq titiraqtaugiarngarut $1",
-    "previousdiff": "← tunullipaaq asiaNngutuq",
-    "nextdiff": "tagga asiaNngutuq mappitaq →",
-    "ilsubmit": "ivaaqpuq",
-    "bydate": "pitaaruttuq inuulirvik",
-    "variantname-ike-cans": "ᑎᑎᕋᐅᓯᖅ ᓄᑖᖅ",
-    "variantname-ike-latn": "ilisautik",
-    "variantname-iu": "disable",
-    "exif-imagelength": "qutsingniq",
-    "exif-imagedescription": "inunnguaq atiq",
-    "exif-colorspace": "minguarutimitiqpaa",
-    "exif-datetimeoriginal": "qatsipaa amma tikiuti sarqipaa isuillingaitjapaa",
-    "exif-datetimedigitized": "qatsipaa amma tikiuti sarqipaa qarasaujaq",
-    "exif-exposuretime-format": "$1 aippaq ($2)",
-    "exif-brightnessvalue": "qaummapaa akkiutaq",
-    "monthsall": "sunamittuq",
-    "confirm_purge_button": "akaujuq",
-    "imgmultipageprev": "← tunullipaaq mappitaq",
-    "imgmultipagenext": "tagga mappitaq →",
-    "imgmultigo": "aivuq!",
-    "table_pager_limit_submit": "aivuk",
-    "autoredircomment": "qaningani kamagijaq aasit nakit [[$1]]",
-    "autosumm-new": "pigivuq mappitaq: $1",
-    "specialpages": "piji mappitaq",
-    "tags-edit": "suqusiqpaa"
+       "@metadata": [],
+       "sunday": "sanattaili",
+       "monday": "naggajaq",
+       "wednesday": "pingajua",
+       "friday": "pagaitaak",
+       "sun": "sana",
+       "mon": "nag",
+       "wed": "pinga",
+       "january": "januari",
+       "february": "vipuari",
+       "march": "maarsi",
+       "april": "aipuril",
+       "may_long": "mai",
+       "june": "juni",
+       "july": "julai",
+       "august": "augus",
+       "october": "uktupuri",
+       "november": "nuvimpuri",
+       "december": "tisimpuri",
+       "january-gen": "januari",
+       "february-gen": "vipuari",
+       "march-gen": "maarsi",
+       "april-gen": "aipuril",
+       "may-gen": "mai",
+       "june-gen": "juni",
+       "july-gen": "julai",
+       "august-gen": "augus",
+       "october-gen": "uktupuri",
+       "november-gen": "nuvimpuri",
+       "december-gen": "tisimpuri",
+       "apr": "aipu",
+       "may": "mai",
+       "aug": "augu",
+       "nov": "nuvi",
+       "about": "miksaani",
+       "article": "ilulik mappitaq",
+       "newwindow": "(uittuq qarasaujaq ikiaq pigivuq igalaaq)",
+       "cancel": "iniqtipaa",
+       "moredotdotdot": "pilluarivaa...",
+       "mypage": "ami mappitaq",
+       "mytalk": "atlarqutikka",
+       "navigation": "mianirivaa",
+       "and": "&#32;amma",
+       "help": "qajalippaa",
+       "search": "ivaaqpuq",
+       "searchbutton": "ivaaqpuq",
+       "go": "aivuq",
+       "searcharticle": "aivuk",
+       "history_short": "mappitaq kingunittinni",
+       "edit": "Suqusiqpaa",
+       "editthispage": "suqusiqpaa mappitaq",
+       "delete": "nipaqtipaa",
+       "protect": "sapummivaa",
+       "unprotect": "iq sapummivaa",
+       "unprotectthispage": "iq sapummivaa mappitaq",
+       "newpage": "pigivuk mappitaq",
+       "specialpage": "piji mappitaq",
+       "articlepage": "ilulik mappitaq uvva",
+       "talk": "uqalimajuq",
+       "toolbox": "sanarqutiqauti",
+       "otherlanguages": "killumut uiki",
+       "redirectedfrom": "(qaningani kamagijaq aasit nakit $1)",
+       "redirectpagesub": "aningani kamagijaq aasit nakit mappitaq",
+       "jumptonavigation": "mianirivaa",
+       "jumptosearch": "ivaaqpuq",
+       "aboutsite": "miksaani {{SITENAME}}",
+       "aboutpage": "Project:miksaani",
+       "currentevents": "pigivuq piusiq",
+       "currentevents-url": "Project:pigivuq piusiq",
+       "edithelp": "ikurripaa suqusiqpaa",
+       "mainpage": "amiq",
+       "mainpage-description": "amiq",
+       "portal": "qaggiq",
+       "portal-url": "Project:qaggiq",
+       "privacy": "namminiq pilirivviqauqtunut aulataujut atuagaq, pinasuarniq",
+       "privacypage": "Project:namminiq pilirivviqauqtunut aulataujut atuagaq, pinasuarniq",
+       "youhavenewmessages": "ilissu pigivaa $1 ($2).",
+       "editsection": "suqusiqpaa",
+       "editold": "suqusiqpaa",
+       "editlink": "suqusiqpaa",
+       "editsectionhint": "suqusiqpaa ilangiutititsiguti: $1",
+       "site-rss-feed": "$1 rss mianirivaa",
+       "site-atom-feed": "$1 atum mianirivaa",
+       "page-rss-feed": "\"$1\" rss mianirivaa",
+       "page-atom-feed": "\"$1\" atum mianirivaa",
+       "nstab-main": "mappitaq",
+       "nstab-user": "inuk mappitaq",
+       "nstab-special": "piji",
+       "nstab-project": "piliriaksait pivalliajjutiksanut miqitaq",
+       "nstab-mediawiki": "kiggapaa",
+       "nstab-template": "mianirivaa-qijuqut",
+       "nstab-category": "nuapput",
+       "badtitle": "ajuqtuq atiq",
+       "editinginterface": "'''iniqtiruti—''' aaha suqusiqpaa iqiak mappitaq atuinnasivuq iijatsaq qarasaujaq taqsaliqpaa ikiaq aqittuq qaritaujaup titirarvinga. asiaNngutuq ikiaq mappitaq inuktitut uikipitia allanguqtuaq nakimaqpuq qatannguti.",
+       "yourname": "uikipitia atiq",
+       "yourpassword": "uikipitia palanngasauti",
+       "yourpasswordagain": "tamatumaniiqpaa iksigaqtuq uikipitia palanngasauti",
+       "remembermypassword": "iqtuu uikipitia atiq qakakuq atuinnasivuq uvalumajuq qaritaujaq (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "login": "akunnapuq",
+       "userlogin": "akunnapuq / pirqaapaa kiinaijakkuvingmi tuqkuqsivik",
+       "logout": "anivvik",
+       "userlogout": "anivvik",
+       "nologin": "ajuinnaaq inuquti? '''$1'''.",
+       "nologinlink": "pirqaapaa kiinaujakkuvingmi tuqkuqsivik",
+       "mailmypassword": "qillutuq uikipitia palanngasauti kigutiup sitiniqpaanga",
+       "bold_sample": "ijjujug taqsaliqpaa",
+       "bold_tip": "ijjujug taqsaliqpaa",
+       "summary": "suvit:",
+       "minoredit": "ukiukiluaq asianngutuq",
+       "watchthis": "uvva",
+       "savearticle": "uqausillaringgita titiraqtauninggil",
+       "preview": "uvva qangasaanguliqtuq",
+       "showpreview": "surkuqpaa alakkautivuq sivuliqpaa uqaasillarigita titiraqtauningigit",
+       "showdiff": "alakkatippaa asianngutuq",
+       "summary-preview": "suvit preview:",
+       "blockedtitle": "aaqqiksuiji uminngasisijuq",
+       "loginreqlink": "akunnapuq",
+       "newarticle": "(pigivuk)",
+       "editingsection": "suqusiqpaa $1 (ilangiutititsiguti)",
+       "editingcomment": "suqusiqpaa $1 (ujjirijaq)",
+       "editconflict": "suqusiqpaa akaunngiliurutiniq: $1",
+       "currentrev": "maanna titiraqtaugiarngarut",
+       "previousrevision": "←utuqaq titiraqtaugiarngarut",
+       "nextrevision": "pilluarivaa pigivuk revision titiraqtaugiarngarut→",
+       "currentrevisionlink": "maanna titiraqtaugiarngarut",
+       "next": "tagga",
+       "history-feed-title": "titiraqtaugiarngarut mappitaq kingunittinni",
+       "history-feed-description": "titiraqtaugiarngarut mappitaq kingunittinni ikiaq uiki",
+       "history-title": "titiraqtaugiarngarut mappitaq kingunittinni \"$1\"",
+       "lineno": "tukiqsiq $1:",
+       "editundo": "ipiutjaapaa",
+       "nextn": "tagga {{PLURAL:$1|$1}}",
+       "mypreferences": "mi pikkumaniqpaaq",
+       "prefs-rc": "pigivuq asianngutuq",
+       "searchresultshead": "ivaaqpuq",
+       "youremail": "kigutiup sitiniqpaanga:",
+       "username": "uikipitia atiq:",
+       "yourrealname": "inullarik atiq:",
+       "email": "kigutiup sitiniqpaanga",
+       "prefs-help-email": "kigutiup sitiniqpaanga (pikkallavuq) — qakugu nalunanngilaq ilissi pijungnaqtuq pigivaa kanngunaqtuq aajiiqatiginggiq",
+       "editinguser": "suqusiqpaa qatannguti '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+       "recentchanges": "pigivuq asianngutuq",
+       "recentchangeslinked": "asiaNngutuq mitsaasijuq",
+       "recentchangeslinked-feed": "asiaNngutuq mitsaasijuq",
+       "recentchangeslinked-toolbox": "asiaNngutuq mitsaasijuq",
+       "upload": "mappipaa nalinaijatit",
+       "uploadbtn": "mappipaa nalunaijautit",
+       "filedesc": "piliriaksat pivigjuanguningit",
+       "fileuploadsummary": "suvit:",
+       "watchthisupload": "uvva",
+       "listredirects": "nipi qaningani kamagijaq aasit nakit",
+       "randompage": "nakituinnaq qaujisarniq mappitaq",
+       "randomredirect": "nakituinnaq qaujisarniq qaningani kamagijaq aasit nakit",
+       "statistics": "kisitsisillgurlugitpasissitissat",
+       "statistics-header-users": "qatannguti kisitsisillgurlugitpasissitissat",
+       "doubleredirects": "tapirqilik qaningani kamagijaq aasit nakit",
+       "brokenredirects": "napivaa qaningani kamagijaq aasit nakit",
+       "brokenredirects-edit": "suqusiqpaa",
+       "brokenredirects-delete": "nipaqtipaa",
+       "listusers": "qatannguti nipi",
+       "newpages-username": "uikipitia atiq:",
+       "ancientpages": "utuqaq ittusaq mappitaq",
+       "move": "uajuq",
+       "allpages": "sunamittuq mappitaq",
+       "nextpage": "tagga mappitaq ($1)",
+       "allpagessubmit": "aivuk",
+       "categories": "nuapput",
+       "emailfrom": "nakit",
+       "emailmessage": "kiggapaa",
+       "emailsend": "qiutsavigivaa",
+       "watchlist": "uvva mappitaq",
+       "mywatchlist": "nipi ami",
+       "watch": "uvva",
+       "watchthispage": "uvva",
+       "unwatch": "iq uvva",
+       "enotif_impersonal_salutation": "{{SITENAME}} qatannguti",
+       "created": "mappitaq anivuq",
+       "dellogpage": "nipaq nipi",
+       "deletionlog": "nipaq nipi",
+       "prot_1movedto2": "[[$1]] surramajuq [[$2]]",
+       "protect-legend": "patimmivaa sapummivaa",
+       "protect-level-sysop": "sirlak titiraqsimajunik tuqquqtiriji",
+       "restriction-edit": "Suqusiqpaa",
+       "restriction-move": "uajuq",
+       "undelete-search-submit": "ivaaqpuq",
+       "blanknamespace": "(amiq)",
+       "mycontris": "taliaq",
+       "sp-contributions-submit": "ivaaqpuq",
+       "whatlinkshere": "uqsiq maungu",
+       "isredirect": "tapitariik uqsaq mappitaq",
+       "blockip": "iq aaqqiksuiji",
+       "badipaddress": "illituq qarisaujakkut titiraqsimajut maligatigut angirutausimajuq unikkaarijaqarniq",
+       "blockipsuccesssub": "uminngasisijuq naajuq",
+       "ipblocklist-submit": "ivaaqpuq",
+       "anononlyblock": "sirlak ilisarnanngitittuq",
+       "blocklink": "iq",
+       "contribslink": "qatannguti suqusiqpaa",
+       "blocklogpage": "uminngasisijuq/iq titiqqaqutit tuqquqsimajait",
+       "block-log-flags-anononly": "ilisarnanngitittuq aaqqiksuiji kisiani",
+       "block-log-flags-nocreate": "kiinaujaqarvik inuirutivaa iniqtipaa pigivuq",
+       "block-log-flags-noemail": "kigutiup sitiniqpaanga uminngasisijuq",
+       "move-page-legend": "uajuq mappitaq",
+       "movearticle": "uajuq mappitaq",
+       "movelogpage": "uajuq nipi",
+       "delete_and_move": "nipaqtipaa amma uajuq",
+       "allmessagesname": "atiq",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|titiraqtaugiarngarut|titiraqtaugiarngarut}}",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|titiraqtaugiarngarut|titiraqtaugiarngarut}} ikiaq $2",
+       "tooltip-ca-protect": "sapummivaa mappitaq",
+       "tooltip-search": "ivaaqpuq {{SITENAME}}",
+       "tooltip-minoredit": "tuapaq asiaNngutuq",
+       "tooltip-diff": "surrapaa qatannguti",
+       "tooltip-compareselectedversions": "uvva asiaNngutuq mappitaq akunninganni marruuk titiraqtaugiarngarut",
+       "anonymous": "ilisarnanngitittuq qatannguti nakit {{SITENAME}}",
+       "deletedrevision": "nipaq utuqaq titiraqtaugiarngarut $1",
+       "previousdiff": "← tunullipaaq asiaNngutuq",
+       "nextdiff": "tagga asiaNngutuq mappitaq →",
+       "ilsubmit": "ivaaqpuq",
+       "bydate": "pitaaruttuq inuulirvik",
+       "variantname-ike-cans": "ᑎᑎᕋᐅᓯᖅ ᓄᑖᖅ",
+       "variantname-ike-latn": "ilisautik",
+       "variantname-iu": "disable",
+       "exif-imagelength": "qutsingniq",
+       "exif-imagedescription": "inunnguaq atiq",
+       "exif-colorspace": "minguarutimitiqpaa",
+       "exif-datetimeoriginal": "qatsipaa amma tikiuti sarqipaa isuillingaitjapaa",
+       "exif-datetimedigitized": "qatsipaa amma tikiuti sarqipaa qarasaujaq",
+       "exif-exposuretime-format": "$1 aippaq ($2)",
+       "exif-brightnessvalue": "qaummapaa akkiutaq",
+       "monthsall": "sunamittuq",
+       "confirm_purge_button": "akaujuq",
+       "imgmultipageprev": "← tunullipaaq mappitaq",
+       "imgmultipagenext": "tagga mappitaq →",
+       "imgmultigo": "aivuq!",
+       "table_pager_limit_submit": "aivuk",
+       "autoredircomment": "qaningani kamagijaq aasit nakit [[$1]]",
+       "autosumm-new": "pigivuq mappitaq: $1",
+       "specialpages": "piji mappitaq",
+       "tags-edit": "suqusiqpaa"
 }
index 360cf5c..a83c628 100644 (file)
        "passwordreset-emailsent-capture": "Ti maysa nga esurat ti panangisaad manen ti kontrasenias ket naipatuloden, a naipakita dita baba.",
        "passwordreset-emailerror-capture": "Naaramid ti maysa nga esurat a panangisaad manen ti kontrasenias, a napaikita dita baba, ngem ti panangitulod kenni {{GENDER:$2|agar-aramat}} ket napaay: $1",
        "changeemail": "Sukatan ti esurat a pagtaengan",
-       "changeemail-header": "Sukatan ti esurat a pagtaengan ti pakabilangan",
        "changeemail-text": "Kompletuen daytoy a porma ti panagsukat ti esurat a pagtaengam. Nasken nga ikabilmo ti kontrasenias tapno mapasingkedan daytoy a panagsukat.",
        "changeemail-no-info": "Masapul a nakastrekka tapno dagus a makapan iti ditoy a panid.",
        "changeemail-oldemail": "Agdama nga esurat a pagtaengan:",
        "changeemail-none": "(awan)",
        "changeemail-password": "Ti bukodmo a kontrasenias ti {{SITENAME}}:",
        "changeemail-submit": "Sukatan ti esurat",
-       "changeemail-cancel": "Ukasen",
        "changeemail-throttled": "Adu unay ti panagpadasmo a sumrek.\nPangngaasi nga aguray ti $1 sakbay a padasen manen.",
        "resettokens": "Isaad manen dagiti tandaan",
        "resettokens-text": "Mabalinmo nga isaad manen dagiti tandaan a mangpalubos ti panagserrek ti naisangayan a pribado datos a mainaig ti pakabilangam ditoy.\n\nAramidem daytoy no aksidente nga inbingaymo dagitoy iti sabali wenno ti pakabilangam ket nakomprimiso.",
        "mergehistory-same-destination": "Ti nagtaudan ken ti pangipanan ti panid ket saan a mabalin nga agpada",
        "mergehistory-reason": "Rason:",
        "mergelog": "Listaan ti panagtipon",
-       "pagemerge-logentry": "itipon ti [[$1]] iti [[$2]] (dagiti rebision aginggana iti $3)",
        "revertmerge": "Pagsinaen",
        "mergelogpagetext": "Dita baba ket ti listaan dagiti kaudian a panagtipon ti maysa a pakasaritaan ti panid iti sabali.",
        "history-title": "Pakasaritaan a rebision iti \"$1\"",
        "searchall": "amin",
        "showingresults": "Maiparang dita baba agingga {{PLURAL:$1|iti <strong>1</strong> a nagbanagan|dagiti <strong>$1</strong> a nagbanagan}} a mangrugi ti #<strong>$2</strong>.",
        "showingresultsinrange": "Mangipakpakita aginggana {{PLURAL:$1|iti <strong>1</strong> a resulta|dagiti <strong>$1</strong> a resulta}} iti sakop ti #<strong>$2</strong> aginggana ti #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Nagbanagan a <strong>$1</strong> iti <strong>$3</strong>|Dagiti Nagbanagan a <strong>$1 - $2</strong> iti <strong>$3</strong>}} para iti <strong>$4</strong>",
        "search-nonefound": "Awan dagiti nagbanagan a maipada ti usisa.",
        "powersearch-legend": "Napasayat a panagbiruk",
        "powersearch-ns": "Agbiruk kadagiti nagan ti espasio:",
        "randomincategory": "Pugto a panid iti kategoria",
        "randomincategory-invalidcategory": "Ti \"$1\" ket saan nga umisu a nagan ti kategoria.",
        "randomincategory-nopages": "Awan ti pampanid iti kategoria ti [[:Category:$1]].",
-       "randomincategory-selectcategory": "Agala ti pugto a panid manipud ti kategoria: $1 $2.",
-       "randomincategory-selectcategory-submit": "Inkan",
        "randomredirect": "Pugto a baw-ing",
        "randomredirect-nopages": "Awan dagiti baw-ing iti daytoy a nagan ti espasio ti \"$1\".",
        "statistics": "Estadistika",
        "statistics-header-pages": "Estadistika ti panid",
        "statistics-header-edits": "Estadistika ti panag-urnos",
-       "statistics-header-views": "Estadistika ti panagkita",
        "statistics-header-users": "Estadistika ti agar-aramat",
        "statistics-header-hooks": "Sabali nga estadistika",
        "statistics-articles": "Dagiti naglaon a panid",
        "statistics-files": "Dagiti naikarga a papeles",
        "statistics-edits": "Dagiti naurnos a panid manipud idi nairugi ti {{SITENAME}}",
        "statistics-edits-average": "Dagiti pagtengngaan nga inurnos iti tunggal maysa a panid",
-       "statistics-views-total": "Dagiti dagup ti panagkita",
-       "statistics-views-total-desc": "Dagiti panagkita ti awan a pampanid ken saan a mairaman dagiti espesial a panid",
-       "statistics-views-peredit": "Panagkita iti tunggal maysa a panag-urnos",
        "statistics-users": "Dagiti nakarehistro nga [[Special:ListUsers|agar-aramat]]",
        "statistics-users-active": "Dagiti aktibo nga agar-aramat",
        "statistics-users-active-desc": "Dagiti agar-aramat a nagtungpal ti aramid iti napalabas nga {{PLURAL:$1|aldaw|$1 nga al-aldaw}}",
-       "statistics-mostpopular": "Kaaduan a nabuya a pampanid",
        "pageswithprop": "Pampanid nga adda tagikua ti panid",
        "pageswithprop-legend": "Pampanid nga adda tagikua ti panid",
        "pageswithprop-text": "Daytoy a panid ket ilistana ti pampanid nga agus-usar ti naisangayan a tagikua ti panid.",
        "uncategorizedtemplates": "Dagiti saan a nakategoria a plantilia",
        "unusedcategories": "Dagiti saan a nausar a kategoria",
        "unusedimages": "Dagiti saan a nausar a papeles",
-       "popularpages": "Dagiti nadayeg a panid",
        "wantedcategories": "Dagiti makiddaw a kategoria",
        "wantedpages": "Dagiti makiddaw a panid",
        "wantedpages-badtitle": "Imbalido a titulo iti agasmang ti nagbanagan: $1",
        "querypage-disabled": "Daytoy nga espesial a panid ket nabaldado gapu kadagiti rason ti kasayaat ti panagpataray.",
        "booksources": "Dagiti taudan ti libro",
        "booksources-search-legend": "Agbiruk para kadagiti taudan ti libro",
-       "booksources-go": "Inkan",
        "booksources-text": "Dita baba ket listaan dagiti silpo ti sabali a sitio nga aglaklako ti baro ken saan a nausar a liblibro, ken mabalin nga addaan pay iti adu a pakaammo a maipanggep kadagiti libro a birbirukem:",
        "booksources-invalid-isbn": "Ti naited nga ISBN ket kasla saan nga umisu; kitaen dagiti biddut ti panagtulad manipud ti kasisigud a taudan.",
        "specialloguserlabel": "Perpormer:",
        "wlheader-enotif": "Napakabaelan ti panangipakaammo ti esurat.",
        "wlheader-showupdated": "Dagiti panid a nasukatanen manipud ti kinaudi a panagsarungkarmo ket naipakita iti <strong>napuskol</strong>.",
        "wlnote": "Dita baba ket {{PLURAL:$1|naudi a sinukatan|dagiti naudi a <strong>$1</strong> a sinukatan}} iti napalabas {{PLURAL:$2|nga oras|a <strong>$2</strong> nga or-oras}}, manipud idi $3, $4.",
-       "wlshowlast": "Ipakita dagiti naudi a $1 nga or-oras $2 nga al-aldaw $3",
+       "wlshowlast": "Ipakita dagiti naudi a $1 nga or-oras $2 nga al-aldaw",
        "watchlist-options": "Dagiti pagpilian ti listaan a bambantayan",
        "watching": "Bambantayan...",
        "unwatching": "Saanen a bantayan...",
        "import": "Agala kadagiti panid",
        "importinterwiki": "Agala ti transwiki",
        "import-interwiki-text": "Agpilika ti wiki ken titulo ti panid nga alaem.\nDagiti rebision ti petsa ken dagiti nagan ti mannurat ket maipreserba.\nAmin a transwiki nga alaem ket mailista iti [[Special:Log/import|listaan ti panagala]].",
-       "import-interwiki-source": "Taudan ti wiki/panid:",
        "import-interwiki-history": "Kopiaen amin dagiti rebision ti pakasaritaan daytoy a panid",
        "import-interwiki-templates": "Iraman amin dagiti plantilia",
        "import-interwiki-submit": "Agala",
        "pageinfo-robot-policy": "Panagpasurot babaen dagiti robot",
        "pageinfo-robot-index": "Maipalubos",
        "pageinfo-robot-noindex": "Saan a maipalubos",
-       "pageinfo-views": "Bilang dagiti panagkita",
        "pageinfo-watchers": "Bilang dagiti agbuybuya ti panid",
        "pageinfo-few-watchers": "Basbassit ngem $1 {{PLURAL:$1|ti agbuybuya|dagiti agbuybuya}}",
        "pageinfo-redirects-name": "Bilang dagiti baw-ing iti daytoy a panid",
        "exif-urgency-low": "Nababa ($1)",
        "exif-urgency-high": "Nangato ($1)",
        "exif-urgency-other": "Inpalawag ti agar-aramat a prioridad ($1)",
-       "watchlistall2": "amin",
        "namespacesall": "amin",
        "monthsall": "amin",
        "confirmemail": "Pasingkedan ti esurat a pagtaengam",
        "logentry-rights-rights-legacy": "Ni $1 ket {{GENDER:$2|binaliwanna}} ti grupo a pannakaikameng para kenni $3",
        "logentry-rights-autopromote": "Ni $1 ket automatiko idi a {{GENDER:$2|naipangato}} manipud ti $4 iti $5",
        "rightsnone": "(awan)",
+       "revdelete-summary": "pakabuklan ti panagedit",
        "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:",
index d350f64..d1db2de 100644 (file)
@@ -7,7 +7,8 @@
                        "Sapral Mikail",
                        "Tagir",
                        "Умар",
-                       "아라"
+                       "아라",
+                       "Shirayuki"
                ]
        },
        "tog-underline": "Ӏинкаш белгалде:",
        "searchresults": "Тохкама гIулакхахилар",
        "searchresults-title": "\"$1\" тохка",
        "notextmatches": "ОагIувнаша яздамий вIашагIакхетараш дац",
-       "prevn": "{{PLURAL:$1|хьалхйоаг|ар $1|хьалхйоаг|араш $1|хьалхйоаг|араш $1}}",
+       "prevn": "{{PLURAL:$1|хьалхйоагlар $1|хьалхйоагlараш $1|хьалхйоагlараш $1}}",
        "nextn": "{{PLURAL:$1|тlехьайоагlар $1|тlехьайоагlараш $1|тlехьайоагlараш $1}}",
        "prevn-title": "{{PLURAL:$1|1=$1 хьалхара йоазув|$1 хьалхара йоазувнаш}}",
        "nextn-title": "{{PLURAL:$1|1=$1 тIехьара йоазув|$1 тIехьара йоазувнаш}}",
        "search-relatedarticle": "шоайл дола",
        "searchrelated": "гаргара",
        "searchall": "деррига",
-       "showingresultsheader": "{{PLURAL:$5|1='''$1''' толамче укх '''$3''' долачарах|'''$1 — $2''' толамчаш укх '''$3''' долачарах}} '''$4'''а",
        "search-nonefound": "ДIахаттама нийсамаш корадаьдац.",
        "powersearch-legend": " Доккха тахкар",
        "powersearch-ns": " ЦIерий аренашкахь лахар",
        "newpages": "Керда оагIувнаш",
        "move": "ЦIи хувца",
        "movethispage": "Укх оагIува цIи хувца",
-       "pager-newer-n": "{{PLURAL:$1|кеÑ\80дагIа Ð´Ð°Ñ\80а|кеÑ\80дагIа Ð´Ð¾Ð»Ð°Ñ\87аÑ\8cÑ\80аÑ\85Ñ\8c|кеÑ\80дагIа Ð´Ð°Ñ\80аÑ\88}} $1",
-       "pager-older-n": "{{PLURAL:$1|кÑ\8aаÑ\8cнаÑ\80а Ð´Ð°Ñ\80а|кÑ\8aаÑ\8cнаÑ\80а Ð´Ð¾Ð»aÑ\87аÑ\8cÑ\80аÑ\85Ñ\8c|кÑ\8aаÑ\8cнаÑ\80а Ð´Ð°Ñ\80аÑ\88}} $1",
+       "pager-newer-n": "{{PLURAL:$1|кеÑ\80дагIа Ð´Ð°Ñ\80а|кеÑ\80дагIа Ð´Ð°Ñ\80аÑ\88|кеÑ\80дагIа Ð´Ð¾Ð»Ð°Ñ\87аÑ\8cÑ\80аÑ\85Ñ\8c}} $1",
+       "pager-older-n": "{{PLURAL:$1|кÑ\8aаÑ\8cнаÑ\80а Ð´Ð°Ñ\80а|кÑ\8aаÑ\8cнаÑ\80а Ð´Ð°Ñ\80аÑ\88|кÑ\8aаÑ\8cнаÑ\80а Ð´Ð¾Ð»aÑ\87аÑ\8cÑ\80аÑ\85Ñ\8c}} $1",
        "booksources": "Китабий гIувам",
        "booksources-search-legend": "Китаба лоаца маIандара тохкам",
-       "booksources-go": "Лаха",
        "log": "Тептараш",
        "allpages": "Еррига оагIувнаш",
        "prevpage": "($1) хьалхара оагIув",
        "watchthispage": "Укх оагIува теркам бе",
        "unwatch": "Лора ма де",
        "watchlist-details": "Шун теркама дагарченгахь йола  $1 {{PLURAL:$1|1=оагIув|оагIувнаш}}, дувцама оагIувнаш ца лоархIаш.",
-       "wlshowlast": "Тlехьара $1 сахьаташ $2 денош $3 хьахьокха",
+       "wlshowlast": "Тlехьара $1 сахьаташ $2 денош  хьахьокха",
        "watchlist-options": "Зем баккха дагарена хувцамаш",
        "watching": "Тохкам беча оагIув тIа тIадаккха",
        "unwatching": "Тохкам беча оагIув тIера дIадаккха",
        "exif-iimcategory-spo": "Нидзоамал",
        "exif-iimcategory-war": "ТIемаш, кховсамаши латтараши",
        "exif-iimcategory-wea": "Хаоттам",
-       "watchlistall2": "деррига",
        "namespacesall": "деррига",
        "monthsall": "деррига",
        "confirm_purge_button": "ХIаа",
        "htmlform-submit": "ДIадахьийта",
        "htmlform-reset": "Хувцамаш юхадаккха",
        "htmlform-selectorother-other": "Кхыдола",
-       "rightsnone": "(а)"
+       "rightsnone": "(а)",
+       "revdelete-summary": "хувцамий лоацам"
 }
index a519039..ac3ccfe 100644 (file)
        "search-interwiki-more": "(plusa)",
        "searchall": "omna",
        "showingresults": "Montrante infre {{PLURAL:$1|'''1''' rezulto|'''$1''' rezulti}}, qui komencas kun numero #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Rezultajo '''$1''' ek '''$3'''|Rezultaji '''$1 - $2''' ek '''$3'''}} di '''$4'''",
        "powersearch-legend": "Avancita sercho",
        "powersearch-ns": "Serchez en nomari:",
        "powersearch-toggleall": "Omna",
        "statistics-header-users": "Statistiki di uzanto",
        "statistics-header-hooks": "Altra statistiki",
        "statistics-pages": "Pagini",
-       "statistics-mostpopular": "Maxim ofte vizitita pagini",
        "doubleredirects": "Duopla ridirektili",
        "brokenredirects": "Ridirektili nekorekta",
        "brokenredirectstext": "La sequanta ridirektili ligas a ne-existanta pagini:",
        "uncategorizedtemplates": "Nekategorizita shabloni",
        "unusedcategories": "Neuzata kategorii",
        "unusedimages": "Neuzata imaji",
-       "popularpages": "Populara pagini",
        "wantedcategories": "Dezirata kategorii",
        "wantedpages": "Dezirata pagini",
        "wantedfiles": "Dezirata arkivi",
        "pager-older-n": "{{PLURAL:$1|plu anciena 1|plu anciena $1}}",
        "booksources": "Fonti di libri",
        "booksources-search-legend": "Serchez librala fonti",
-       "booksources-go": "Irar",
        "specialloguserlabel": "Uzanto:",
        "speciallogtitlelabel": "Titulo:",
        "log": "Registrari",
        "unwatchthispage": "Ne plus surveyar",
        "notanarticle": "Ne esas artiklo",
        "wlnote": "Infre esas la lasta {{PLURAL:$1|chanjo|'''$1''' chanji}} dum la lasta {{PLURAL:$2|horo|'''$2''' hori}}.",
-       "wlshowlast": "Montrar la lasta $1 hori $2 dii $3",
+       "wlshowlast": "Montrar la lasta $1 hori $2 dii",
        "watchlist-options": "Surveryo-listo selekti",
        "watching": "Surveyanta…",
        "unwatching": "Cesanta surveyar…",
        "exif-sharpness-0": "Normala",
        "exif-gpsspeed-k": "Kilometri per horo",
        "exif-gpsspeed-m": "Milii per horo",
-       "watchlistall2": "omna",
        "namespacesall": "omna",
        "monthsall": "omna",
        "confirmemail_needlogin": "Vu mustas $1 pro konfirmar vua adreso di e-posto.",
        "htmlform-reset": "Desfacar chanji",
        "htmlform-selectorother-other": "Altra",
        "rightsnone": "(nula)",
+       "revdelete-summary": "redakto-rezumo",
        "searchsuggest-search": "Serchez",
        "searchsuggest-containing": "quan kontenas...",
        "expand_templates_output": "Rezulto",
index 448c2a9..3b5ceb2 100644 (file)
        "permalink": "Varanlegur tengill",
        "print": "Prenta",
        "view": "Skoða",
+       "view-foreign": "Skoða á $1",
        "edit": "Breyta",
        "create": "Skapa",
        "editthispage": "Breyta þessari síðu",
        "otherlanguages": "Á öðrum tungumálum",
        "redirectedfrom": "(Tilvísað frá $1)",
        "redirectpagesub": "Tilvísunarsíða",
+       "redirectto": "Tilvísun á",
        "lastmodifiedat": "Þessari síðu var síðast breytt $1 klukkan $2.",
        "viewcount": "Þessi síða hefur verið skoðuð $1 {{PLURAL:$1|sinni|sinnum}}.",
        "protectedpage": "Vernduð síða",
        "hidetoc": "fela",
        "collapsible-collapse": "Fela",
        "collapsible-expand": "Sýna",
+       "confirmable-confirm": "Ert {{GENDER:$1|þú}} viss?",
+       "confirmable-yes": "Já",
+       "confirmable-no": "Nei",
        "thisisdeleted": "Endurvekja eða skoða $1?",
        "viewdeleted": "Skoða $1?",
        "restorelink": "$1 {{PLURAL:$1|eydd breyting|eyddar breytingar}}",
        "invalidtitle-knownnamespace": "Ógildur titill í nafnrými \"$2\" og með textann \"$3\"",
        "invalidtitle-unknownnamespace": "Ógildur titill með óþekkt nafnrými númer $1 og texta \"$2\"",
        "exception-nologin": "Óinnskráð(ur)",
-       "exception-nologin-text": "Vinsamlegast [[Special:Userlogin|skráðu þig inn]] til þess að hafa aðgang að þessari síðu eða aðgerð.",
+       "exception-nologin-text": "Vinsamlegast skráðu þig inn til þess að hafa aðgang að þessari síðu eða aðgerð.",
        "virus-badscanner": "Slæm stilling: óþekktur veiruskannari: ''$1''",
        "virus-scanfailed": "skönnun mistókst (kóði $1)",
        "virus-unknownscanner": "óþekkt mótveira:",
        "gotaccountlink": "Skráðu þig inn",
        "userlogin-resetlink": "Gleymdir þú notendaupplýsingunum þínum?",
        "userlogin-resetpassword-link": "Gleymdiru lykilorðinu þínu?",
+       "userlogin-helplink2": "Hjálp við innskráningu",
        "userlogin-loggedin": "Þú ert búin(n) að skrá þig inn sem {{GENDER:$1|$1}}.\nNotaðu eyðablaðið fyrir neðan til að skrá þig inn sem annar notandi.",
        "userlogin-createanother": "Stofna annan aðgang",
        "createacct-emailrequired": "Netfang",
        "createaccount-text": "Einhver bjó til aðgang fyrir netfangið þitt á {{SITENAME}} ($4) undir nafninu „$2“, með lykilorðið „$3“.\nÞú ættir að skrá þig inn og breyta lykilorðinu núna.\n\nÞú getur hunsað þessi skilaboð, ef villa hefur átt sér stað.",
        "login-throttled": "Þér hefur mistekist að skrá þig inn undir þessu notendanafni of oft.\nVinsamlegast bíðið $1 áður en þú reynir aftur.",
        "login-abort-generic": "Innskráningin misheppnaðist - hætt var við hana.",
+       "login-migrated-generic": "Aðgangurinn þinn hefur verið sameinaður og notendanafnið þitt finnst ekki lengur á þessum wiki.",
        "loginlanguagelabel": "Tungumál: $1",
        "suspicious-userlogout": "Beiðni um útskráningu hafnað því hún var líklegast send frá biluðum vafra eða vefseli sem hefur vistað vefsíðuna í flýtiminni.",
        "createacct-another-realname-tip": "Alvöru nafn er valfrjálst. Ef þú kýst að gefa það upp, verður það notað til að gefa þér heiður af verkum þínum.",
+       "pt-login": "Innskrá",
+       "pt-login-button": "Innskrá",
        "pt-createaccount": "Stofna aðgang",
        "pt-userlogout": "Útskrá",
        "php-mail-error-unknown": "Óþekkt villa í PHP mail() aðgerð.",
        "retypenew": "Endurtaktu nýja lykilorðið:",
        "resetpass_submit": "Skrifaðu aðgangsorðið og skráðu þig inn",
        "changepassword-success": "Það tókst að breyta lykilorðinu þínu!",
+       "changepassword-throttled": "Þú hefur gert of margar tilraunir til innskráningar.\nVinsamlegast bíddu í $1 áður en þú reynir aftur.",
        "resetpass_forbidden": "Ekki er hægt að breyta lykilorðum",
        "resetpass-no-info": "Þú verður að vera skráð(ur) inn til að hafa aðgang að þessari síðu.",
        "resetpass-submit-loggedin": "Breyta lykilorði",
        "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.",
        "passwordreset-emailerror-capture": "Tölvupóstur til að endursetja lykilorðið var búinn til, sem er sýndur hér fyrir neðan, en ekki tókst að senda hana til {{GENDER:$2|notandans}}: $1",
        "changeemail": "Breyting netfangs",
-       "changeemail-header": "Breyta skráðu netfangi",
        "changeemail-text": "Fylltu út þetta eyðublað til að breyta netfanginu þínu. Þú þarft að slá inn lykilorðið þitt til að staðfesta breytinguna.",
        "changeemail-no-info": "Þú verður að vera skráð(ur) inn til að hafa aðgang að þessari síðu.",
        "changeemail-oldemail": "Núverandi netfang:",
        "changeemail-none": "(ekkert)",
        "changeemail-password": "{{SITENAME}} lykilorðið þitt:",
        "changeemail-submit": "Breyta netfangi",
-       "changeemail-cancel": "Hætta við",
        "resettokens": "Endurstilla lykla",
        "resettokens-text": "Hér getur þú endurstillt lykla sem veita þér aðgang að ákveðnum persónuupplýsingum um aðganginn þinn.\n\nÞú átt að gera það ef þú ert búin(n) að deila þeim með einhverjum öðrum óviljandi eða ef búið er að brjóta inn í aðganginn þinn.",
        "resettokens-no-tokens": "Það eru engir lyklar að endurstilla.",
        "preview": "Forskoða",
        "showpreview": "Forskoða",
        "showdiff": "Sýna breytingar",
-       "anoneditwarning": "'''Viðvörun:''' Þú ert ekki innskráð(ur). Vistfang þitt skráist í breytingaskrá síðunnar.",
+       "anoneditwarning": "<strong>Viðvörun:</strong> Þú ert ekki innskráð(ur). Vistfang þitt verður sýnt opinberlega ef þú gerir einhverjar breytingar. Ef þú <strong>[$1 skráir þig inn]</strong> eða <strong>[$2 stofnar aðgang]</strong> munu breytingarnar þínar vera tengdar við notendanafn þitt, ásamt öðrum kostum.",
        "anonpreviewwarning": "Þú ert ekki innskráð(ur). Vistfang þitt skráist í breytingaskrá síðunnar.",
        "missingsummary": "'''Áminning:''' Þú hefur ekki skrifað breytingarágrip.\nEf þú smellir á Vista aftur, verður breyting þín vistuð án þess.",
        "missingcommenttext": "Gerðu svo vel og skrifaðu athugasemd fyrir neðan.",
        "content-model-text": "hreinn texti",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Síður með eins gildi í ítengingu sniðs",
        "expensive-parserfunction-warning": "'''Viðvörun:''' Þessi síða inniheldur of mörg vinnslufrek aðgerðar þáttunar köll.\n\nHún ætti að innihalda minna en $2 {{PLURAL:$2|kall|köll}}, en {{PLURAL:$1|er nú $1 kall|eru nú $1 köll}}.",
        "expensive-parserfunction-category": "Síður með of mörg vinnslufrek aðgerðar þáttunar köll",
        "post-expand-template-inclusion-warning": "'''Viðvörun:''' Sniðið tekur of mikið pláss.\nHluti sniðsins verður ekki með.",
        "mergehistory-same-destination": "Upprunasíðan og marksíðan mega ekki vera sú sama",
        "mergehistory-reason": "Ástæða:",
        "mergelog": "Sameiningar skrá",
-       "pagemerge-logentry": "sameinaði [[$1]] við [[$2]] (útgáfur frá $3)",
        "revertmerge": "Taka aftur sameiningu",
        "mergelogpagetext": "Þetta er skrá yfir síðustu sameiningar einnar síðu við aðra.",
        "history-title": "$1: Breytingaskrá",
        "searchrelated": "tengt",
        "searchall": "öllum",
        "showingresults": "Sýni <strong>$1</strong> {{PLURAL:$1|niðurstöðu|niðurstöður}} frá og með #<strong>$2</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Niðurstaða '''$1''' af '''$3'''|Niðurstöður'''$1 - $2''' af '''$3'''}} fyrir '''$4'''",
+       "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-nonefound": "Engar niðurstöður pössuðu við fyrirspurnina.",
        "powersearch-legend": "Ítarlegri leit",
        "powersearch-ns": "Leita í nafnrýmum:",
        "powersearch-togglelabel": "Athuga:",
        "powersearch-toggleall": "Allt",
        "powersearch-togglenone": "Ekkert",
+       "powersearch-remember": "Muna val fyrir leitir í framtíðinni",
        "search-external": "Ytri leit",
        "searchdisabled": "{{SITENAME}}-leit er óvirk.\nÞú getur leitað í genum Google á meðan.\nAthugaðu að skrár þeirra yfir {{SITENAME}}-efni kunna að vera úreltar.",
        "search-error": "Villa kom upp við leit að: $1",
        "right-deletedtext": "Sjá eyddan texta og breytingar á milli eyddra útgáfna",
        "right-browsearchive": "Leita í eyddum síðum",
        "right-undelete": "Endurvekja eydda síðu",
-       "right-suppressrevision": "Skoða og endurvekja breytingar faldar fyrir stjórnendum",
+       "right-suppressrevision": "Skoða, fela og endurvekja ákveðnar breytingar síðna frá öllum notendum",
        "right-suppressionlog": "Skoða einrænar aðgerðaskrár",
        "right-block": "Banna öðrum notendum að gera breytingar",
        "right-blockemail": "Banna notanda að senda tölvupóst",
        "recentchanges-label-minor": "Þetta er minniháttar breyting",
        "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-newpage": "{{int:recentchanges-label-newpage}} (sjá einng [[Special:NewPages|lista yfir nýjar síður]])",
-       "rcnotefrom": "Að neðan eru breytingar síðan <strong>$2<strong> (allt að <strong>$1<strong> sýndar).",
+       "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",
        "rcshowhideminor": "$1 minniháttar breytingar",
        "rcshowhideminor-show": "Sýna",
        "fileexists-shared-forbidden": "Skrá með þessu nafni er þegar til í sameiginlega myndasafninu.\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]]",
        "file-exists-duplicate": "Þessi skrá er afrit eftirfarandi {{PLURAL:$1|skráar|skráa}}:",
        "file-deleted-duplicate": "Afriti þessarar skráar ([[:$1]]) hefur verið eytt.\nÞú ættir að fara yfir eyðingarsögu skráarinnar áður en þú velur að hlaða skránni aftur inn.",
+       "file-deleted-duplicate-notitle": "Skrá sem er eins og þessi skrá hefur verið hlaðið inn áður og titll hennar hefur verið falinn.\nÞú ættir að spurja einhvern með réttindi til að skoða földu skránna til að fara yfir málið áður en þú hleður skránni inn.",
        "uploadwarning": "Aðvörun",
        "uploadwarning-text": "Vinsamlegast breyttu myndalýsingunni hér fyrir neðan og reyndu aftur.",
        "savefile": "Vista",
        "license": "Leyfisupplýsingar:",
        "license-header": "Leyfisupplýsingar:",
        "nolicense": "Ekkert valið",
+       "licenses-edit": "Breyta leyfisvali",
        "license-nopreview": "(Forskoðun ekki fáanleg)",
-       "upload_source_url": "(gild, aðgengileg vefslóð)",
-       "upload_source_file": "(skrá á tölvunni þinni)",
+       "upload_source_url": "(þín valda skrá frá gildri, aðgengilegri vefslóð)",
+       "upload_source_file": "(þín valda skrá frá tölvunni þinni)",
        "listfiles-summary": "Þessi kerfissíða sýnir allar upphlaðnar skrár.",
        "listfiles_search_for": "Leita að miðilsnafni:",
        "imgfile": "skrá",
        "download": "Hlaða niður",
        "unwatchedpages": "Óvaktaðar síður",
        "listredirects": "Tilvísanir",
+       "listduplicatedfiles": "Listi yfir afritaðar skrár",
+       "listduplicatedfiles-summary": "Þetta er listi yfir skrár þar sem nýjasta útgáfa hennar er afrit af nýjustu útgáfu einhverrar annarar skrár. Aðeins staðbundnar skrár eru taldar með.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] hefur $2 [[$3|{{PLURAL:$2|afrit}}]].",
        "unusedtemplates": "Ónotuð snið",
        "unusedtemplatestext": "Þetta er listi yfir allar síður í {{ns:snið}} nafnrýminu sem ekki eru notaðar í neinum öðrum síðum. Munið að gá að öðrum tenglum í sniðin áður en þeim er eytt.",
        "unusedtemplateswlh": "aðrir tenglar",
        "statistics": "Tölfræði",
        "statistics-header-pages": "Síðutölfræði",
        "statistics-header-edits": "Breytingatölfræði",
-       "statistics-header-views": "Uppflettitölfræði",
        "statistics-header-users": "Notandatölfræði",
        "statistics-header-hooks": "Önnur tölfræði",
        "statistics-articles": "Greinar alls",
        "statistics-files": "Skráafjöldi",
        "statistics-edits": "Síðubreytingar frá því {{SITENAME}} byrjaði",
        "statistics-edits-average": "Meðal breytingafjöldi á síðu",
-       "statistics-views-total": "Uppflettingar alls",
-       "statistics-views-total-desc": "Flettingar á síður sem eru ekki til eða kerfisíður eru ekki innifaldar.",
-       "statistics-views-peredit": "Uppflettingar á hverja breytingu (meðaltal)",
        "statistics-users": "Skráðir  [[Special:ListUsers|notendur]]",
        "statistics-users-active": "Virkir notendur",
        "statistics-users-active-desc": "Notendur sem hafa framkvæmt aðgerð {{PLURAL:$1|síðusta $1 dag|síðustu $1 daga}}",
-       "statistics-mostpopular": "Mest skoðuðu síður",
        "pageswithprop": "Síður með eiginleika",
        "pageswithprop-legend": "Síður með síðueiginleika",
        "pageswithprop-text": "Á þessari síðu er listi yfir síður sem hafa ákveðna síðueiginleika.",
        "uncategorizedtemplates": "Óflokkuð snið",
        "unusedcategories": "Ónotaðir flokkar",
        "unusedimages": "Munaðarlausar skrár",
-       "popularpages": "Vinsælar síður",
        "wantedcategories": "Eftirsóttir flokkar",
        "wantedpages": "Eftirsóttar síður",
        "wantedpages-badtitle": "Ógildur titill í listanum: $1",
        "deadendpagestext": "Eftirfarandi síður tengjast ekki við aðrar síður á {{SITENAME}}.",
        "protectedpages": "Verndaðar síður",
        "protectedpages-indef": "Aðeins óendanlegar verndanir",
+       "protectedpages-summary": "Þessi skrá sýnir lista yfir síður sem eru til og eru verndaðar í auknablikinu. Til að sjá lista yfir titla sem eru verndaðir gegn stofnun þeirra, sjáðu [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Keðjuverndun eingöngu",
+       "protectedpages-noredirect": "Fela tilvísanir",
        "protectedpagesempty": "Engar síður eru verndaðar með þessum stikum.",
+       "protectedpages-timestamp": "Tímastimpill",
+       "protectedpages-page": "Síða",
+       "protectedpages-expiry": "Rennur út",
+       "protectedpages-performer": "Vernduð af",
+       "protectedpages-params": "Verndunar stikar",
+       "protectedpages-reason": "Ástæða",
+       "protectedpages-unknown-timestamp": "Óþekktur",
+       "protectedpages-unknown-performer": "Óþekktur notandi",
        "protectedtitles": "Verndaðir titlar",
        "protectedtitlesempty": "Engir titlar eru verndaðir með þessum stikum.",
        "listusers": "Notendalisti",
        "querypage-disabled": "Þessi kerfisíða er óvirk til að minnka ekki afköst vefþjónsins.",
        "booksources": "Bókaleit",
        "booksources-search-legend": "Leita að bókaverslunum",
-       "booksources-go": "Áfram",
+       "booksources-search": "Leita",
        "booksources-text": "Fyrir neðan er listi af tenglum í aðrar síður sem selja nýjar og notaðar bækur og gætu einnig haft nánari upplýsingar í sambandi við bókina sem þú varst að leita að:",
        "booksources-invalid-isbn": "ISBN gildið virðist ekki vera gilt; leitaðu eftir villum við innslátt eða afritun gildisins frá upsprettu þess.",
        "specialloguserlabel": "Gerandi:",
        "mywatchlist": "Vaktlisti",
        "watchlistfor2": "Eftir $1 $2",
        "nowatchlist": "Vaktlistinn er tómur.",
-       "watchlistanontext": "Vinsamlegast $1ðu þig til að skoða eða breyta vaktlistanum þínum.",
+       "watchlistanontext": "Vinsamlegast skráðu þig til að skoða eða breyta hlutum á vaktlistanum þínum.",
        "watchnologin": "Óinnskráð(ur)",
        "addwatch": "Bæta á vaktlistann",
        "addedwatchtext": "Síðunni „[[:$1]]“ hefur verið bætt á [[Special:Watchlist|vaktlistann]] þinn.\nFrekari breytingar á henni eða spjallsíðu hennar munu verða sýndar þar.",
        "wlheader-enotif": "Tilkynning með tölvupósti er virk.",
        "wlheader-showupdated": "Síðum sem hefur verið breytt síðan þú skoðaðir þær síðast eru '''feitletraðar'''.",
        "wlnote": "Hér fyrir neðan {{PLURAL:$1|er síðasta <strong>$1</strong> breyting|eru síðustu <strong>$1</strong> breytingar}} {{PLURAL:$2|síðustu <strong>$2</strong> klukkutímann|síðastliðna <strong>$2</strong> klukkutímana}}, frá $3, $4.",
-       "wlshowlast": "Sýna síðustu $1 klukkutíma, $2 daga, $3",
+       "wlshowlast": "Sýna síðustu $1 klukkutíma, $2 daga",
        "watchlist-options": "Vaktlistastillingar",
        "watching": "Vakta...",
        "unwatching": "Afvakta...",
        "exbeforeblank": "innihald fyrir tæmingu var: '$1'",
        "delete-confirm": "Eyða „$1“",
        "delete-legend": "Eyða",
-       "historywarning": "'''Viðvörun:''' Síðan sem þú ert um það bil að eyða hefur breytingarskrá með $1 {{PLURAL:$1|breytingu|breytingum}}:",
+       "historywarning": "<strong>Viðvörun:</strong> Síðan sem þú ert um það bil að eyða hefur breytingarskrá með $1 {{PLURAL:$1|breytingu|breytingum}}:",
        "confirmdeletetext": "Þú ert um það bil að eyða síðu ásamt breytingaskrá hennar.\nVinsamlegast staðfestu það að þú ætlir að gera svo, það að þú skiljir afleiðingarnar, og að þú sért að gera þetta í samræmi við [[{{MediaWiki:Policy-url}}]].",
        "actioncomplete": "Aðgerð lokið",
        "actionfailed": "Aðgerð mistókst",
        "protect-edit-reasonlist": "Breyta verndarástæðum",
        "protect-expiry-options": "1 tími:1 hour,1 dag:1 day,1 viku:1 week,2 vikur:2 weeks,1 mánuð:1 month,3 mánuði:3 months,6 mánuði:6 months,1 ár:1 year,aldrei:infinite",
        "restriction-type": "Réttindi:",
-       "restriction-level": "Takmarkaði við:",
+       "restriction-level": "Takmarkað við:",
        "minimum-size": "Lágmarksstærð",
        "maximum-size": "Hámarksstærð:",
-       "pagesize": "(bæt)",
+       "pagesize": "(bæti)",
        "restriction-edit": "Breyta",
        "restriction-move": "Færa",
        "restriction-create": "Skapa",
        "autoblockid": "Sjálfvirkt bann $1",
        "block": "Banna notanda",
        "unblock": "Afbanna notanda",
-       "blockip": "Banna notanda",
+       "blockip": "Banna {{GENDER:$1|notanda}}",
        "blockip-legend": "Banna notanda",
        "blockiptext": "Notaðu eyðublaðið hér að neðan til þess að banna ákveðið vistfang eða notandanafn.\nÞetta ætti einungis að gera til þess að koma í veg fyrir skemmdarverk, og í samræmi við [[{{MediaWiki:Policy-url}}|samþykktir]].\nGefðu nákvæma skýringu að neðan (til dæmis, með því að vísa í þær síður sem skemmdar voru).",
        "ipaddressorusername": "Vistfang eða notandanafn:",
        "ipb-unblock-addr": "Afbanna $1",
        "ipb-unblock": "Afbanna notanda eða vistfang",
        "ipb-blocklist": "Sjá núverandi bönn",
-       "ipb-blocklist-contribs": "Framlög fyrir $1",
+       "ipb-blocklist-contribs": "Framlög fyrir {{GENDER:$1|$1}}",
        "unblockip": "Afbanna notanda",
        "unblockiptext": "Endurvekja skrifréttindi bannaðra notenda eða vistfanga.",
        "ipusubmit": "Afbanna",
        "import-error-create": "Síðan \"$1\" var ekki flutt inn því þú hefur ekki réttindi til að stofna hana.",
        "import-error-interwiki": "Síðan \"$1\" var ekki flutt inn því nafn hennar er frátekið fyrir ytri tengla (tungumálatengla).",
        "import-error-special": "Síðan \"$1\" var ekki flutt inn því hún tilheyrir ákveðnu nafnrými sem leyfir ekki síður.",
-       "import-error-invalid": "Síðan \"$1\" var ekki flutt inn því nafn hennar er ógilt.",
+       "import-error-invalid": "Síðan \"$1\" var ekki flutt inn því nafnið sem hún yrði flutt á er ógilt á þessum wiki.",
        "import-error-unserialize": "Ekki unnt að afraða útgáfu $2 af síðunni „$1“. Útgáfan var sögð nota innihaldslíkan $3 raðað sem $4.",
        "import-options-wrong": "{{PLURAL:$2|Rangur möguleiki|Rangir möguleikar}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Uppgefin móðursíða hefur ógildan titil.",
        "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|breytingar}}",
+       "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|breytingar}} frá $2",
+       "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.",
        "pageinfo-robot-policy": "Attriðaskráning af vélmennum",
        "pageinfo-robot-index": "Heimilað",
        "pageinfo-robot-noindex": "Ekki heimilað",
-       "pageinfo-views": "Fjöldi innlita",
        "pageinfo-watchers": "Fjöldi notenda, sem vakta síðuna",
        "pageinfo-few-watchers": "Vöktuð af færri en $1 {{PLURAL:$1|notanda|notendum}}",
        "pageinfo-redirects-name": "Fjöldi tilvísana til þessarar síðu",
        "exif-urgency-low": "Lítið ($1)",
        "exif-urgency-high": "Hátt ($1)",
        "exif-urgency-other": "Mikilvægi ákveðið af notanda ($1)",
-       "watchlistall2": "allt",
        "namespacesall": "öll",
        "monthsall": "allir",
        "confirmemail": "Staðfesta netfang",
        "autosumm-replace": "Skipti út innihaldi með „$1“",
        "autoredircomment": "Tilvísun á [[$1]]",
        "autosumm-new": "Ný síða: $1",
+       "autosumm-newblank": "Bjó til tóma síðu",
        "lag-warn-normal": "Breytingar nýrri en $1 {{PLURAL:$1|sekúnda|sekúndur}} kunna að vera ekki á þessm lista.",
        "lag-warn-high": "Vegna mikils álags á vefþjónanna, kunna breytingar yngri en $1 {{PLURAL:$1|sekúnda|sekúndur}} ekki að vera á þessum lista.",
        "watchlistedit-normal-title": "Breyta vaktlistanum",
        "watchlistedit-raw-done": "Vaktlistinn þinn hefur verið uppfærður.",
        "watchlistedit-raw-added": "$1 {{PLURAL:$1|titli|titlum}} var bætt við:",
        "watchlistedit-raw-removed": "$1 {{PLURAL:$1|titill var fjarlægður|titlar voru fjarlægðir}}:",
+       "watchlistedit-clear-titles": "Titlar:",
        "watchlisttools-view": "Sýna viðeigandi breytingar",
        "watchlisttools-edit": "Skoða og breyta vaktlistanum",
        "watchlisttools-raw": "Breyta opnum vaktlistanum",
        "logentry-rights-rights": "$1 {{GENDER:$2|breytti}} réttindum $3 frá $4 í $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|breytti}} réttindum $3",
        "logentry-rights-autopromote": "$1 fékk sjálfvirkt {{GENDER:$2|aukin}} réttindi frá $4 til $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|hlóð inn}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|hlóð inn}} nýrri útgáfu af $3",
        "rightsnone": "(engum)",
+       "revdelete-summary": "breytingarágrip",
        "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ð:",
        "expand_templates_xml_output": "XML-úttak",
        "expand_templates_ok": "Í lagi",
        "expand_templates_remove_comments": "Fjarlægja athugasemdir",
-       "expand_templates_preview": "Forskoða"
+       "expand_templates_preview": "Forskoða",
+       "mediastatistics": "Margmiðlunar tölfræði",
+       "mediastatistics-summary": "Tölfræði um upphaldar skráar gerðir. Hún inniheldur eingöngu nýjustu útgáfu skráarinnar. Gamlar eða eyddar skrár eru ekki teknar með.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 bæti}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME tegund",
+       "mediastatistics-table-extensions": "Mögulegar skráargerðir",
+       "mediastatistics-table-count": "Fjöldi skráa",
+       "mediastatistics-table-totalbytes": "Heildarstærð",
+       "mediastatistics-header-unknown": "Óþekkt",
+       "mediastatistics-header-bitmap": "Bitmap myndir",
+       "mediastatistics-header-drawing": "Teikningar (vector-myndir)",
+       "mediastatistics-header-audio": "Hljóð",
+       "mediastatistics-header-video": "Myndbönd",
+       "mediastatistics-header-text": "Textar",
+       "mediastatistics-header-executable": "Uppsetninga skrár",
+       "mediastatistics-header-archive": "Þjappaðar skrár",
+       "json-warn-trailing-comma": "$1 eftirfylgjandi {{PLURAL:$1|komma var fjarlægð|kommur voru fjarlægðar}} úr JSON",
+       "json-error-unknown": "Það varð villa í JSON. Villa: $1",
+       "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."
 }
index 2bd15e6..ed1c57e 100644 (file)
                        "לערי ריינהארט",
                        "PeppeAeco",
                        "아라",
-                       "Lucas2"
+                       "Lucas2",
+                       "Taxandru",
+                       "C.R.",
+                       "Elitre"
                ]
        },
        "tog-underline": "Sottolinea i collegamenti:",
        "tog-watchdefault": "Aggiungi le pagine e i file modificati agli osservati speciali",
        "tog-watchmoves": "Aggiungi le pagine e i file spostati agli osservati speciali",
        "tog-watchdeletion": "Aggiungi le pagine e i file cancellati agli osservati speciali",
-       "tog-watchrollback": "Aggiungi le pagine dove ho effettuato un rollback agli osservati speciali",
+       "tog-watchrollback": "Aggiungi agli osservati speciali le pagine su cui ho effettuato un rollback",
        "tog-minordefault": "Indica ogni modifica come minore (solo come predefinito)",
        "tog-previewontop": "Mostra l'anteprima sopra la casella di modifica e non sotto",
-       "tog-previewonfirst": "Mostra l'anteprima almeno una volta prima di salvare",
+       "tog-previewonfirst": "Mostra l'anteprima sulla prima modifica",
        "tog-enotifwatchlistpages": "Inviami una email quando viene modificata una pagina o un file presente tra gli osservati speciali",
        "tog-enotifusertalkpages": "Inviami una email quando viene modificata la mia pagina di discussione",
        "tog-enotifminoredits": "Inviami una email anche per le modifiche minori di pagine e file",
        "tog-enotifrevealaddr": "Mostra il mio indirizzo nelle e-mail di notifica",
        "tog-shownumberswatching": "Mostra il numero di utenti che hanno la pagina in osservazione",
        "tog-oldsig": "Firma attuale:",
-       "tog-fancysig": "Tratta la firma come wikitesto (senza collegamento automatico)",
+       "tog-fancysig": "Gestisci la firma come wikitesto (senza collegamento automatico)",
        "tog-uselivepreview": "Abilita la funzione ''Live preview'' (anteprima in diretta - sperimentale)",
        "tog-forceeditsummary": "Chiedi conferma se il campo oggetto è vuoto",
        "tog-watchlisthideown": "Nascondi le mie modifiche negli osservati speciali",
        "tog-prefershttps": "Usa sempre una connessione sicura quando si effettua l'accesso",
        "underline-always": "Sempre",
        "underline-never": "Mai",
-       "underline-default": "Mantieni le impostazioni del browser o della skin",
+       "underline-default": "Impostazioni predefinite del browser o della skin",
        "editfont-style": "Stile del carattere nella casella di modifica:",
        "editfont-default": "Predefinito del browser",
        "editfont-monospace": "Carattere a larghezza fissa",
        "listingcontinuesabbrev": "cont.",
        "index-category": "Pagine indicizzate",
        "noindex-category": "Pagine non indicizzate",
-       "broken-file-category": "Pagine che includono file inesistenti",
+       "broken-file-category": "Pagine che richiamano file inesistenti",
        "about": "Informazioni",
        "article": "Voce",
        "newwindow": "(si apre in una nuova finestra)",
        "otherlanguages": "In altre lingue",
        "redirectedfrom": "(Reindirizzamento da '''$1''')",
        "redirectpagesub": "Pagina di reindirizzamento",
+       "redirectto": "Reindirizza a:",
        "lastmodifiedat": "Questa pagina è stata modificata per l'ultima volta il $1 alle $2.",
        "viewcount": "Questa pagina è stata letta {{PLURAL:$1|una volta|$1 volte}}.",
        "protectedpage": "Pagina protetta",
        "youhavenewmessagesmulti": "Hai nuovi messaggi su $1",
        "editsection": "modifica",
        "editold": "modifica",
-       "viewsourceold": "visualizza sorgente",
+       "viewsourceold": "visualizza wikitesto",
        "editlink": "modifica",
-       "viewsourcelink": "visualizza sorgente",
+       "viewsourcelink": "visualizza wikitesto",
        "editsectionhint": "Modifica la sezione $1",
        "toc": "Indice",
        "showtoc": "mostra",
        "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.",
        "perfcachedts": "I dati che seguono sono estratti da una copia ''cache'' del database, il cui ultimo aggiornamento risale al $1. Un massimo di {{PLURAL:$4|un risultato è disponibile|$4 risultati è disponibile}} in cache.",
        "querypage-no-updates": "Gli aggiornamenti della pagina sono temporaneamente sospesi. I dati in essa contenuti non verranno aggiornati.",
-       "viewsource": "Visualizza sorgente",
-       "viewsource-title": "Visualizza sorgente di $1",
+       "viewsource": "Visualizza wikitesto",
+       "viewsource-title": "Visualizza wikitesto di $1",
        "actionthrottled": "Azione ritardata",
        "actionthrottledtext": "Come misura di sicurezza contro lo spam, l'esecuzione di alcune azioni è limitata a un numero massimo di volte in un determinato periodo di tempo, limite che in questo caso è stato superato. Si prega di riprovare tra qualche minuto.",
        "protectedpagetext": "Questa pagina è stata protetta per impedirne la modifica o altre operazioni.",
        "viewsourcetext": "È possibile visualizzare e copiare il codice sorgente di questa pagina:",
        "viewyourtext": "È possibile visualizzare e copiare il codice sorgente delle '''tue modifiche''' a questa pagina:",
-       "protectedinterface": "Questa pagina contiene un elemento che fa parte dell'interfaccia utente del software di questo sito ed è protetta per evitare possibili abusi.\nPer aggiungere o modificare traduzioni per tutti i wiki usare [//translatewiki.net/ translatewiki.net], il progetto di localizzazione di MediaWiki.",
-       "editinginterface": "'''Attenzione:''' Il testo di questa pagina fa parte dell'interfaccia utente del sito. Tutte le modifiche apportate a questa pagina si riflettono sui messaggi visualizzati per tutti gli utenti su questo wiki.\nPer aggiungere o modificare le traduzioni valide su tutti i wiki, considera la possibilità di usare [//translatewiki.net/wiki/Main_Page?setlang=it translatewiki.net], il progetto MediaWiki per la localizzazione.",
+       "protectedinterface": "Questa pagina contiene un elemento che fa parte dell'interfaccia utente del software di questo sito ed è protetta per evitare possibili abusi.\nPer aggiungere o modificare le traduzioni valide su tutti i wiki, usa [//translatewiki.net/ translatewiki.net], il progetto di localizzazione di MediaWiki.",
+       "editinginterface": "<strong>Attenzione:</strong> il testo di questa pagina fa parte dell'interfaccia utente del software di questo sito. Tutte le modifiche apportate a questa pagina si riflettono sui messaggi visualizzati per tutti gli utenti su questo wiki.",
+       "translateinterface": "Per aggiungere o modificare le traduzioni valide su tutti i wiki, usa [//translatewiki.net/ translatewiki.net], il progetto MediaWiki per la localizzazione.",
        "cascadeprotected": "Su questa pagina non è possibile effettuare modifiche perché è stata inclusa {{PLURAL:$1|nella pagina indicata di seguito, che è stata protetta|nelle pagine indicate di seguito, che sono state protette}} selezionando la protezione \"ricorsiva\":\n$2",
        "namespaceprotected": "Non si dispone dei permessi necessari per modificare le pagine del namespace '''$1'''.",
        "customcssprotected": "Non si dispone dei permessi necessari alla modifica di questa pagina CSS, in quanto contiene le impostazioni personali di un altro utente.",
        "createacct-benefit-body2": "{{PLURAL:$1|pagina|pagine}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contributore recente|contributori recenti}}",
        "badretype": "Le password inserite non coincidono tra loro.",
-       "userexists": "Il nome utente inserito è già utilizzato.\nScegliere un nome utente diverso.",
+       "userexists": "Il nome utente inserito è già utilizzato.\nScegli un nome utente diverso.",
        "loginerror": "Errore durante l'accesso",
        "createacct-error": "Errore durante la creazione dell'utenza",
        "createaccounterror": "Impossibile creare l'account: $1",
        "createaccount-text": "Qualcuno ha creato un accesso a {{SITENAME}} ($4) a nome di $2, associato a questo indirizzo di posta elettronica. La password per l'utente \"$2\" è impostata a \"$3\".\nÈ opportuno eseguire un accesso quanto prima e cambiare la password immediatamente.\n\nSe l'accesso è stato creato per errore, si può ignorare questo messaggio.",
        "login-throttled": "Sono stati effettuati troppi tentativi di accesso in breve tempo.\nAttendi $1 e riprova in seguito.",
        "login-abort-generic": "Il tuo login non ha avuto successo - Annullato",
+       "login-migrated-generic": "La tua utenza è stata migrata, e il tuo nome utente non esiste più su questo wiki.",
        "loginlanguagelabel": "Lingua: $1",
        "suspicious-userlogout": "La tua richiesta di disconnessione è stata negata perché sembra inviata da un browser non funzionante o un proxy di caching.",
        "createacct-another-realname-tip": "L'indicazione del proprio nome vero è opzionale; se si sceglie di inserirlo, verrà utilizzato per attribuire la paternità dei contenuti inviati.",
        "passwordreset-domain": "Dominio:",
        "passwordreset-capture": "Visualizzare il contenuto del messaggio e-mail?",
        "passwordreset-capture-help": "Se si seleziona questa casella, l'indirizzo e-mail (con la password temporanea), verrà mostrato a voi, oltre ad essere inviato all'utente.",
-       "passwordreset-email": "Indirizzo e-mail:",
+       "passwordreset-email": "Indirizzo email:",
        "passwordreset-emailtitle": "Dettagli dell'utente su {{SITENAME}}",
        "passwordreset-emailtext-ip": "Qualcuno (probabilmente tu, con indirizzo IP $1) ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo email sono:\n\n$2\n\n{{PLURAL:$3|Questa password temporanea scadrà|Queste password temporanee scadranno}} dopo {{PLURAL:$5|un giorno|$5 giorni}}.\nDovresti accedere e scegliere una nuova password ora. \n\nSe non sei stato tu a fare la richiesta, o se ti sei ricordato la password originale e non vuoi più cambiarla, puoi ignorare questo messaggio e continuare al utilizzare la tua vecchia password.",
        "passwordreset-emailtext-user": "L'utente $1 di {{SITENAME}} ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo email sono:\n\n$2\n\n{{PLURAL:$3|Questa password temporanea scadrà|Queste password temporanee scadranno}} dopo {{PLURAL:$5|un giorno|$5 giorni}}.\nDovresti accedere e scegliere una nuova password ora. \n\nSe non sei stato tu a fare la richiesta, o se ti sei ricordato la password originale e non vuoi più cambiarla, puoi ignorare questo messaggio e continuare al utilizzare la tua vecchia password.",
        "passwordreset-emailsent-capture": "È stata inviata una email di reimpostazione della password, il contenuto è riportato di seguito.",
        "passwordreset-emailerror-capture": "È stata generata una email di reimpostazione della password, riportata di seguito. L'invio {{GENDER:$2|all'utente}} non è riuscito: $1",
        "changeemail": "Modifica indirizzo email",
-       "changeemail-header": "Modifica l'indirizzo email dell'account",
        "changeemail-text": "Completa questo modulo per cambiare il tuo indirizzo email. Sarà necessario inserire la password per confermare la modifica.",
        "changeemail-no-info": "Devi aver effettuato l'accesso per accedere a questa pagina direttamente.",
        "changeemail-oldemail": "Indirizzo email attuale:",
        "changeemail-none": "(nessuno)",
        "changeemail-password": "La password su {{SITENAME}}:",
        "changeemail-submit": "Modifica email",
-       "changeemail-cancel": "Annulla",
        "changeemail-throttled": "Sono stati effettuati troppi tentativi di accesso.\nAttendi $1 e riprova in seguito.",
        "resettokens": "Reimposta token",
        "resettokens-text": "Qui puoi reimpostare le chiavi che permettono l'accesso a determinati dati privati associati alla tua utenza.\n\nDovresti farlo se le hai accidentalmente condivise con qualcuno o se la tua utenza è stato compromessa.",
        "showpreview": "Visualizza anteprima",
        "showdiff": "Mostra modifiche",
        "blankarticle": "<strong>Attenzione:</strong> la pagina che stai creando è vuota.\nCliccando nuovamente su \"{{int:savearticle}}\", la pagina sarà creata senza alcun contenuto.",
-       "anoneditwarning": "'''Attenzione:''' Accesso non effettuato. Nella cronologia della pagina verrà registrato il tuo indirizzo IP.",
+       "anoneditwarning": "<strong>Attenzione:</strong> Accesso non effettuato. Se effettuerai delle modifiche il tuo indirizzo IP sarà visibile pubblicamente. Se <strong>[$1 accedi]</strong> o <strong>[$2 crei un'utenza]</strong>, le tue modifiche saranno attribuite al tuo nome utente, insieme ad altri benefici.",
        "anonpreviewwarning": "''Non è stato eseguito il login. Salvando la pagina, il proprio indirizzo IP sarà registrato nella cronologia.''",
        "missingsummary": "'''Attenzione:''' non è stato specificato l'oggetto di questa modifica. Premendo di nuovo \"{{int:savearticle}}\" la modifica verrà salvata con l'oggetto vuoto.",
        "missingcommenttext": "Inserire un commento qui sotto.",
        "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.",
        "missing-revision": "La versione #$1 della pagina \"{{FULLPAGENAME}}\" non esiste.\n\nQuesto si verifica solitamente seguendo un collegamento a una pagina cancellata, in una cronologia non aggiornata.\nI dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro delle cancellazioni].",
-       "userpage-userdoesnotexist": "L'account \"<nowiki>$1</nowiki>\" non corrisponde a un utente registrato. Verificare che si intenda davvero creare o modificare 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''",
        "yourtext": "Il tuo testo",
        "storedversion": "La versione memorizzata",
        "nonunicodebrowser": "'''Attenzione: si sta utilizzando un browser non compatibile con i caratteri Unicode. Per consentire la modifica delle pagine senza creare inconvenienti, i caratteri non ASCII vengono visualizzati nella casella di modifica sotto forma di codici esadecimali.'''",
-       "editingold": "'''ATTENZIONE: si sta modificando una versione non aggiornata della pagina. Salvandola così, tutti i cambiamenti apportati dopo questa versione saranno sovrascritti.'''",
+       "editingold": "<strong>Attenzione: si sta modificando una versione non aggiornata della pagina.</strong>\nSalvandola così, tutti i cambiamenti apportati dopo questa versione saranno sovrascritti.",
        "yourdiff": "Differenze",
        "copyrightwarning": "Per favore tieni presente che tutti i contributi a {{SITENAME}} si considerano pubblicati nei termini d'uso della licenza $2 (vedi $1 per maggiori dettagli).\nSe non desideri che i tuoi testi possano essere modificati e ridistribuiti da chiunque senza alcuna limitazione, non inviarli qui.<br />\nInviando il testo dichiari inoltre, sotto tua responsabilità, che è stato scritto da te personalmente oppure è stato copiato da una fonte di pubblico dominio o similarmente libera.\n'''Non inviare materiale protetto da copyright senza autorizzazione!'''",
        "copyrightwarning2": "Per favore tieni presente che tutti i contributi a {{SITENAME}} possono essere modificati, stravolti o cancellati da altri contributori.\nSe non vuoi che i tuoi testi possano essere alterati, allora non inserirli.<br />\nInviando il testo dichiari inoltre, sotto tua responsabilità, che è stato scritto da te personalmente oppure è stato copiato da una fonte di pubblico dominio o similarmente libera (vedi $1 per maggiori dettagli).\n'''Non inviare materiale protetto da copyright senza autorizzazione!'''",
        "permissionserrors": "Permessi non sufficienti",
        "permissionserrorstext": "Non si dispone dei permessi necessari ad eseguire l'azione richiesta, per {{PLURAL:$1|il seguente motivo|i seguenti motivi}}:",
        "permissionserrorstext-withaction": "Non si dispone dei permessi necessari per $2, per {{PLURAL:$1|il seguente motivo|i seguenti motivi}}:",
-       "recreate-moveddeleted-warn": "'''Attenzione: si sta per ricreare una pagina già cancellata in passato.'''\n\nAccertarsi che sia davvero opportuno continuare a modificare questa pagina.\nL'elenco delle relative cancellazioni e degli spostamenti viene riportato di seguito per comodità:",
+       "recreate-moveddeleted-warn": "<strong>Attenzione: si sta per ricreare una pagina già cancellata in passato.</strong>\n\nAccertarsi che sia davvero opportuno continuare a modificare questa pagina.\nL'elenco delle relative cancellazioni e degli spostamenti viene riportato di seguito per comodità:",
        "moveddeleted-notice": "Questa pagina è stata cancellata. L'elenco delle relative cancellazioni e degli spostamenti viene riportato di seguito per informazione.",
        "log-fulllog": "Visualizza log completo",
        "edit-hook-aborted": "La modifica è stata annullata dall'hook.\nNon è stata restituita alcuna spiegazione.",
        "defaultmessagetext": "Testo predefinito",
        "content-failed-to-parse": "Impossibile analizzare $2 per il modello $1: $3",
        "invalid-content-data": "Dati contenuti non validi",
-       "content-not-allowed-here": "Contenuto in \"$1\" non consentito nella pagine [[$2]]",
+       "content-not-allowed-here": "Contenuto in \"$1\" non consentito nella pagina [[$2]]",
        "editwarning-warning": "Lasciare questa pagina potrebbe causare la perdita di tutte le modifiche fatte.\nSe hai effettuato l'accesso, puoi disattivare questo avviso nella sezione \"{{int:prefs-editing}}\" delle tue preferenze.",
        "editpage-notsupportedcontentformat-title": "Formato contenuto non supportato",
        "editpage-notsupportedcontentformat-text": "Il formato del contenuto $1 non è supportato dal modello di contenuto $2.",
        "content-model-text": "testo normale",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Pagine contenenti chiamate a template con parametri duplicati",
+       "duplicate-args-category-desc": "La pagina contiene chiamate a template che utilizzano argomenti duplicati, come ad esempio <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Attenzione:''' Questa pagina contiene troppe chiamate alle parser functions.\n\nDovrebbe averne meno di $2, al momento ce {{PLURAL:$1|n'è $1|ne sono $1}}.",
        "expensive-parserfunction-category": "Pagine con troppe chiamate alle funzioni parser",
-       "post-expand-template-inclusion-warning": "'''Attenzione:''' la dimensione dei template inclusi è troppo grande.\nAlcuni template non verranno inclusi.",
+       "post-expand-template-inclusion-warning": "<strong>Attenzione:</strong> la dimensione dei template inclusi è troppo grande.\nAlcuni template non verranno inclusi.",
        "post-expand-template-inclusion-category": "Pagine per le quali la dimensione dei template inclusi supera il limite consentito",
        "post-expand-template-argument-warning": "'''Attenzione:''' questa pagina contiene uno o più argomenti di template troppo grandi per essere espansi. Tali argomenti verranno omessi.",
        "post-expand-template-argument-category": "Pagine contenenti template con argomenti mancanti",
        "rev-suppressed-text-view": "Questa versione della pagina è stata '''rimossa'''.\nGli amministratori possono ancora visualizzarla; consultare il [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log di rimozione] per ulteriori dettagli.",
        "rev-deleted-no-diff": "Non è possibile visualizzare questo confronto tra versioni perché una delle versioni è stata '''cancellata'''.\nConsultare il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.",
        "rev-suppressed-no-diff": "Non è possibile visualizzare questo confronto tra versioni perché una delle versioni è stata '''cancellata'''.",
-       "rev-deleted-unhide-diff": "Una delle versioni di questo confronto tra versioni è stata '''cancellata'''.\nConsultare il [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.\nAgli amministratori è ancora consentito [$1 visualizzare il confronto] se necessario.",
+       "rev-deleted-unhide-diff": "Una delle versioni di questo confronto tra versioni è stata <strong>cancellata</strong>.\nConsultare il [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.\nAgli amministratori è ancora consentito [$1 visualizzare il confronto] se necessario.",
        "rev-suppressed-unhide-diff": "Una delle versioni di questo confronto di versioni è stata '''rimossa'''.\nPotrebbero esserci dettagli nel [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log delle rimozioni].\nIn quanto amministratore puoi ancora [$1 visualizzare questo confronto di versioni], se vuoi procedere.",
        "rev-deleted-diff-view": "Una delle versioni di questo confronto di versioni è stata '''cancellata'''.\nIn quanto amministratore, puoi visualizzare questo confronto di versioni; potrebbero esserci dettagli nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log delle cancellazioni].",
        "rev-suppressed-diff-view": "Una delle versioni di questo confronto di versioni è stata '''rimossa'''.\nIn quanto amministratore puoi visualizzare questo confronto di versioni; potrebbero esserci dettagli nel [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log delle rimozioni].",
        "revdelete-show-file-confirm": "Si desidera visualizzare la versione cancellata del file \"<nowiki>$1</nowiki>\" del $2 alle $3?",
        "revdelete-show-file-submit": "Sì",
        "revdelete-selected-text": "{{PLURAL:$1|Versione selezionata|Versioni selezionate}} di [[:$2]]:",
-       "revdelete-selected-file": "{{PLURAL:$1|Versione selezionata|Versioni selezionate}} del file di [[:$2]]:",
-       "logdelete-selected": "{{PLURAL:$1|Evento del registro selezionato|Eventi del registro selezionati}}:",
+       "revdelete-selected-file": "{{PLURAL:$1|Versione selezionata|Versioni selezionate}} del file [[:$2]]:",
+       "logdelete-selected": "{{PLURAL:$1|Evento del registro selezionato|Eventi del registro selezionato}}:",
        "revdelete-text-text": "Le versioni cancellate appariranno ancora nella cronologia della pagina, ma parte del loro contenuto sarà inaccessibile al pubblico.",
        "revdelete-text-file": "Le versioni di file cancellati appariranno ancora nella cronologia del file, ma parti del loro contenuto sarà inaccessibile al pubblico.",
        "logdelete-text": "Gli eventi cancellati appariranno ancora nei registri, ma parti del loro contenuto sarà inaccessibile al pubblico.",
        "mergehistory-empty": "Nessuna versione da unire.",
        "mergehistory-success": "{{PLURAL:$3|Una versione di [[:$1]] è stata unita|$3 versioni di [[:$1]] sono state unite}} alla cronologia di [[:$2]].",
        "mergehistory-fail": "Impossibile unire le cronologie. Verificare la pagina e i parametri temporali.",
-       "mergehistory-fail-toobig": "Impossibile eseguire l'unione della cronologia con oltre $1 {{PLURAL:$1|revisione|revisioni}} da spostare.",
+       "mergehistory-fail-toobig": "Impossibile eseguire l'unione della cronologia essendoci oltre $1 {{PLURAL:$1|versione|versioni}} da spostare.",
        "mergehistory-no-source": "La pagina di origine $1 non esiste.",
        "mergehistory-no-destination": "La pagina di destinazione $1 non esiste.",
        "mergehistory-invalid-source": "La pagina di origine deve avere un titolo corretto.",
        "mergehistory-same-destination": "Le pagine di origine e di destinazione non possono coincidere",
        "mergehistory-reason": "Motivo:",
        "mergelog": "Unioni",
-       "pagemerge-logentry": "ha unito [[$1]] a [[$2]] (versioni fino a $3)",
        "revertmerge": "Annulla unioni",
        "mergelogpagetext": "Di seguito sono elencate le ultime operazioni di unione della cronologia di due pagine.",
        "history-title": "$1: cronologia delle modifiche",
        "search-result-category-size": "{{PLURAL:$1|1 utente|$1 utenti}} ({{PLURAL:$2|1 sottocategoria|$2 sottocategorie}}, {{PLURAL:$3|1 file|$3 files}})",
        "search-redirect": "(redirect $1)",
        "search-section": "(sezione $1)",
+       "search-category": "(categoria $1)",
        "search-file-match": "(corrispondenza nel contenuto del file)",
        "search-suggest": "Forse cercavi: $1",
        "search-interwiki-caption": "Progetti fratelli",
        "searchall": "tutti",
        "showingresults": "Di seguito {{PLURAL:$1|viene presentato al massimo '''1''' risultato|vengono presentati al massimo '''$1''' risultati}} a partire dal numero '''$2'''.",
        "showingresultsinrange": "{{PLURAL:$1|Viene mostrato|Vengono mostrati}} sotto {{PLURAL:$1|<strong>1</strong> risultato|<strong>$1</strong> risultati}} dal <strong>$2</strong> al <strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Risultato '''$1''' di '''$3'''|Risultati '''$1 - $2''' di '''$3'''}} per '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Risultato <strong>$1</strong> di <strong>$3</strong>|Risultati <strong>$1 - $2</strong> di <strong>$3</strong>}}",
        "search-nonefound": "La ricerca non ha prodotto risultati.",
        "powersearch-legend": "Ricerca avanzata",
        "powersearch-ns": "Cerca nei namespace:",
        "prefs-setemail": "Imposta un indirizzo email",
        "prefs-email": "Opzioni email",
        "prefs-rendering": "Aspetto",
-       "saveprefs": "Salva le preferenze",
+       "saveprefs": "Salva",
        "restoreprefs": "Ripristina le impostazioni predefinite (in tutte le sezioni)",
        "prefs-editing": "Casella di modifica",
        "rows": "Righe:",
        "gender-female": "È registrata su {{SITENAME}}",
        "prefs-help-gender": "L'impostazione di questa preferenza è opzionale.\nIl software utilizza questo valore per rivolgersi a te e menzionarti agli altri usando il genere grammaticale appropriato.\nQuesta informazione sarà pubblica.",
        "email": "Indirizzo email",
-       "prefs-help-realname": "L'indicazione del proprio nome vero è opzionale; se si sceglie di inserirlo, verrà utilizzato per attribuire la paternità dei contenuti inviati.",
+       "prefs-help-realname": "Il vero nome è facoltativo.\nSe fornito, può essere usato per attribuirvi la paternità del vostro lavoro.",
        "prefs-help-email": "L'inserimento del proprio indirizzo email è facoltativo, ma permette di ricevere la propria password qualora venisse dimenticata.",
        "prefs-help-email-others": "Puoi anche scegliere di lasciare che gli altri ti contattino via posta elettronica con un collegamento dalla tua pagina utente o di discussione.\nIl tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.",
        "prefs-help-email-required": "L'indirizzo email è obbligatorio.",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Differenze",
        "prefs-help-prefershttps": "Questa preferenza avrà effetto dal prossimo accesso.",
+       "prefswarning-warning": "Hai fatto modifiche alle tue preferenze che non sono state ancora salvate.\nSe esci da questa pagina senza cliccare \"$1\" le preferenze non verranno aggiornate.",
        "prefs-tabs-navigation-hint": "Suggerimento: è possibile utilizzare i tasti freccia sinistra e destra per spostarsi tra le schede nell'elenco delle schede.",
        "email-address-validity-valid": "L'indirizzo e-mail sembra valido",
        "email-address-validity-invalid": "Inserisci un indirizzo e-mail valido",
        "upload_directory_missing": "La directory di upload ($1) non esiste e non può essere creata dal server web.",
        "upload_directory_read_only": "Il server web non è in grado di scrivere nella directory di upload ($1).",
        "uploaderror": "Errore nel caricamento",
-       "upload-recreate-warning": "'Attenzione'': un file con questo nome è stato cancellato o spostato.'''\nIll log delle cancellazioni e degli spostamenti di questa pagina viene qui riportato per comodità:",
+       "upload-recreate-warning": "'Attenzione'': un file con questo nome è stato cancellato o spostato.'''\nIl log delle cancellazioni e degli spostamenti di questa pagina viene qui riportato per comodità:",
        "uploadtext": "Usare il modulo sottostante per caricare nuovi file. Per visualizzare o ricercare i file già caricati, consultare il [[Special:FileList|log dei file caricati]]. Caricamenti di file e di nuove versioni di file sono registrati nel [[Special:Log/upload|log degli upload]], le cancellazioni nell'[[Special:Log/delete|apposito]].\n\nPer inserire un file all'interno di una pagina, fare un collegamento di questo tipo:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' per usare la versione completa del file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|testo alternativo]]</nowiki></code>''' per usare una versione larga 200 pixel inserita in un box, allineata a sinistra e con 'testo alternativo' come didascalia\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' per generare un collegamento diretto al file senza visualizzarlo",
        "upload-permitted": "Tipi di file consentiti: $1.",
        "upload-preferred": "Tipi di file consigliati: $1.",
        "filesource": "Fonte:",
        "ignorewarning": "Ignora l'avviso e salva comunque il file",
        "ignorewarnings": "Ignora i messaggi di avvertimento del sistema",
-       "minlength1": "Il nome del file dev'essere composto da almeno un carattere.",
+       "minlength1": "Il nome del file dev'essere composto da almeno una lettera.",
        "illegalfilename": "Il nome \"$1\" contiene dei caratteri non ammessi nei titoli delle pagine. Dare al file un nome diverso e provare a caricarlo di nuovo.",
        "filename-toolong": "I nomi dei file non possono superare i 240 byte.",
        "badfilename": "Il nome del file è stato convertito in \"$1\".",
        "uploadscriptednamespace": "Questo file SVG contiene un namespace '$1' non consentito",
        "uploadinvalidxml": "Il codice XML nel file caricato non può essere elaborato.",
        "uploadvirus": "Questo file contiene un virus! Dettagli: $1",
-       "uploadjava": "Questo file è un file ZIP che contiene un file .class Java.\nCarica i file Java non è consentito, perché possono causare l'aggiramento delle restrizioni di sicurezza.",
+       "uploadjava": "Questo file è un file ZIP che contiene un file .class Java.\nCaricare i file Java non è consentito, perché possono causare l'aggiramento delle restrizioni di sicurezza.",
        "upload-source": "File di origine",
        "sourcefilename": "Nome del file di origine:",
        "sourceurl": "URL di origine:",
        "backend-fail-backup": "Impossibile eseguire il backup del file $1 .",
        "backend-fail-notexists": "Il file $1 non esiste.",
        "backend-fail-hashes": "Impossibile ottenere hash dei file per confronto.",
-       "backend-fail-notsame": "Esiste già un file non identico a  $1 .",
+       "backend-fail-notsame": "Esiste già un file non identico a \"$1\".",
        "backend-fail-invalidpath": "$1 non è un percorso di archiviazione valido.",
        "backend-fail-delete": "Impossibile cancellare il file $1.",
        "backend-fail-describe": "Impossibile modificare i metadati del file \"$1\".",
        "statistics": "Statistiche",
        "statistics-header-pages": "Statistiche relative alle pagine",
        "statistics-header-edits": "Statistiche relative alle modifiche",
-       "statistics-header-views": "Statistiche relative alle visualizzazioni",
        "statistics-header-users": "Statistiche relative agli utenti",
        "statistics-header-hooks": "Altre statistiche",
        "statistics-articles": "Pagine di contenuti",
        "statistics-files": "File caricati",
        "statistics-edits": "Modifiche a partire dall'installazione di {{SITENAME}}",
        "statistics-edits-average": "Media delle modifiche per pagina",
-       "statistics-views-total": "Visualizzazioni totali",
-       "statistics-views-total-desc": "Visualizzazioni di pagine inesistenti e pagine speciali non sono incluse",
-       "statistics-views-peredit": "Visualizzazioni per modifica",
        "statistics-users": "[[Special:ListUsers|Utenti]] registrati",
        "statistics-users-active": "Utenti attivi",
        "statistics-users-active-desc": "Utenti che hanno effettuato un'azione {{PLURAL:$1|nell'ultimo giorno|negli ultimi $1 giorni}}",
-       "statistics-mostpopular": "Pagine più visitate",
        "pageswithprop": "Pagine con una proprietà di pagina",
        "pageswithprop-legend": "Pagine con una proprietà di pagina",
        "pageswithprop-text": "Questa pagina elenca le pagine che utilizzano una particolare proprietà di pagina.",
        "uncategorizedtemplates": "Template privi di categorie",
        "unusedcategories": "Categorie vuote",
        "unusedimages": "File non utilizzati",
-       "popularpages": "Pagine più visitate",
        "wantedcategories": "Categorie richieste",
        "wantedpages": "Pagine più richieste",
        "wantedpages-badtitle": "Titolo non valido nel gruppo di risultati: $1",
        "pager-older-n": "{{PLURAL:$1|1 meno recente|$1 meno recenti}}",
        "suppress": "Oversight",
        "querypage-disabled": "Questa pagina speciale è disattivata per motivi di prestazioni.",
+       "apihelp": "Aiuto API",
+       "apihelp-no-such-module": "Modulo \"$1\" non trovato.",
        "booksources": "Fonti librarie",
        "booksources-search-legend": "Ricerca di fonti librarie",
        "booksources-isbn": "Codice ISBN:",
-       "booksources-go": "Vai",
+       "booksources-search": "Cerca",
        "booksources-text": "Di seguito sono elencati alcuni collegamenti verso siti esterni che vendono libri nuovi e usati, attraverso i quali è possibile ottenere maggiori informazioni sul testo cercato.",
        "booksources-invalid-isbn": "L'ISBN inserito sembra non essere valido; verificare che non siano stati commessi errori nel copiarlo dalla fonte originale.",
        "specialloguserlabel": "Azione effettuata da:",
        "wlheader-enotif": "La notifica via email è attiva.",
        "wlheader-showupdated": "Le pagine che sono state modificate dopo l'ultima visita sono evidenziate in '''grassetto'''.",
        "wlnote": "Di seguito {{PLURAL:$1|è elencata la modifica più recente apportata|sono elencate le <strong>$1</strong> modifiche più recenti apportate}} {{PLURAL:$2|nella scorsa ora|nelle scorse <strong>$2</strong> ore}}; i dati sono aggiornati alle $4 del $3.",
-       "wlshowlast": "Mostra le ultime $1 ore $2 giorni $3",
+       "wlshowlast": "Mostra le ultime $1 ore $2 giorni",
        "watchlist-options": "Opzioni osservati speciali",
        "watching": "Aggiunta agli osservati speciali...",
        "unwatching": "Eliminazione dagli osservati speciali...",
        "protect-othertime": "Durata non in elenco:",
        "protect-othertime-op": "durata non in elenco",
        "protect-existing-expiry": "Scadenza attuale: $2, $3",
+       "protect-existing-expiry-infinity": "Scadenza attuale: infinito",
        "protect-otherreason": "Altri motivi/dettagli:",
        "protect-otherreason-op": "Altra motivazione",
        "protect-dropdown": "*Motivi comuni di protezione\n** Reiterati vandalismi\n** Reiterati inserimenti di spam\n** Edit war\n** Pagina molto usata",
        "undelete-show-file-confirm": "Si desidera visualizzare la versione cancellata del file \"<nowiki>$1</nowiki>\" del $2 alle $3?",
        "undelete-show-file-submit": "Sì",
        "namespace": "Namespace:",
-       "invert": "inverti la selezione",
-       "tooltip-invert": "Seleziona questa casella per nascondere le modifiche alle pagine all'interno del namespace selezionato (ed il relativo namespace, se selezionato)",
+       "invert": "Inverti selezione",
+       "tooltip-invert": "Seleziona questa casella per nascondere le modifiche alle pagine all'interno del namespace selezionato (ed il namespace associato, se selezionato)",
        "namespace_association": "Namespace associato",
        "tooltip-namespace_association": "Seleziona questa casella per includere anche la pagina di discussione o l'oggetto del namespace associato con il namespace selezionato",
        "blanknamespace": "(Principale)",
        "unblocked": "L'utente [[User:$1|$1]] è stato sbloccato",
        "unblocked-range": "$1 è stato sbloccato",
        "unblocked-id": "Il blocco $1 è stato rimosso",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] è stato sbloccato.",
        "blocklist": "Utenti bloccati",
        "ipblocklist": "Utenti bloccati",
        "ipblocklist-legend": "Cerca un utente bloccato",
        "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]].",
+       "import-interwiki-sourcewiki": "Wiki di origine:",
+       "import-interwiki-sourcepage": "Pagina di origine:",
        "import-interwiki-history": "Copia l'intera cronologia di questa pagina",
        "import-interwiki-templates": "Includi tutti i template",
        "import-interwiki-submit": "Importa",
        "tooltip-pt-mycontris": "Elenco dei tuoi contributi",
        "tooltip-pt-login": "La registrazione è consigliata, anche se non obbligatoria",
        "tooltip-pt-logout": "Uscita (logout)",
+       "tooltip-pt-createaccount": "Siete incoraggiati a creare un'utenza ed accedere; tuttavia, 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-feed-atom": "Feed Atom per questa pagina",
        "tooltip-t-contributions": "Lista 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-print": "Versione stampabile di questa pagina",
        "pageinfo-robot-policy": "Indicizzazione per i robot",
        "pageinfo-robot-index": "Consentito",
        "pageinfo-robot-noindex": "Non consentito",
-       "pageinfo-views": "Numero di visualizzazioni",
        "pageinfo-watchers": "Numero di utenti che hanno la pagina nei loro osservati speciali",
        "pageinfo-few-watchers": "Meno di $1 {{PLURAL:$1|osservatore|osservatori}}",
        "pageinfo-redirects-name": "Numero di redirect a questa pagina",
        "exif-urgency-low": "Bassa ($1)",
        "exif-urgency-high": "Alta ($1)",
        "exif-urgency-other": "Priorità definite dal'utente ($1)",
-       "watchlistall2": "tutte",
        "namespacesall": "tutti",
        "monthsall": "tutti",
        "confirmemail": "Conferma indirizzo email",
        "unknown_extension_tag": "Tag estensione sconosciuto: \"$1\"",
        "duplicate-defaultsort": "Attenzione: la chiave di ordinamento predefinita \"$2\" sostituisce la precedente \"$1\".",
        "duplicate-displaytitle": "<strong>Attenzione:</strong> il titolo visualizzato \"$2\" sostituisce il precedente titolo \"$1\".",
+       "invalid-indicator-name": "<strong>Errore:</strong> attributo <code>name</code> degli indicatori dello stato della pagina non può essere vuoto.",
        "version": "Versione",
        "version-extensions": "Estensioni installate",
        "version-skins": "Skin installate",
        "revdelete-uname-unhid": "nome utente ripristinato",
        "revdelete-restricted": "limitazioni ai soli amministratori attivate",
        "revdelete-unrestricted": "limitazioni ai soli amministratori rimosse",
+       "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-move-move_redir": "$1 {{GENDER:$2|ha spostato}} la pagina $3 a $4 tramite redirect",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|ha caricato}} una nuova versione di $3.",
        "logentry-upload-revert": "$1 {{GENDER:$2|ha caricato}} $3",
        "rightsnone": "(nessuno)",
+       "revdelete-summary": "oggetto della modifica",
        "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:",
        "api-error-stashfailed": "Errore interno: il server non è riuscito a memorizzare il documento temporaneo.",
        "api-error-publishfailed": "Errore interno: il server non è riuscito a pubblicare il documento temporaneo.",
        "api-error-stasherror": "Si è verificato un errore durante il caricamento del file in stash.",
+       "api-error-stashedfilenotfound": "Il file in stash non è stato trovato durante il tentativo di caricamento dallo stash.",
+       "api-error-stashpathinvalid": "Il percorso in cui il file in stash dovrebbe trovarsi non è valido.",
+       "api-error-stashfilestorage": "Si è verificato un errore durante la memorizzazione del file in stash.",
+       "api-error-stashzerolength": "Il server non può inserire il file in stash, poiché ha lunghezza zero.",
+       "api-error-stashnotloggedin": "Devi aver effettuato l'accesso per poter salvare il file nel caricamento in stash.",
+       "api-error-stashwrongowner": "Il file a cui stai tentando di accedere nello stash non appartiene a te.",
+       "api-error-stashnosuchfilekey": "La chiave del file a cui stai tentando di accedere nello stash non esiste.",
        "api-error-timeout": "Il server non ha risposto entro il tempo previsto.",
        "api-error-unclassified": "Si è verificato un errore sconosciuto.",
        "api-error-unknown-code": "Errore sconosciuto: \"$1\"",
        "log-name-pagelang": "Modifiche lingua",
        "log-description-pagelang": "Questo è un registro delle modifiche alla lingua delle pagine.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha modificato}} la lingua della pagina $3 da $4 a $5.",
+       "default-skin-not-found": "Oops! La skin predefinita per il tuo wiki, definita in <code dir=\"ltr\">$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nLa tua installazione sembra includere le seguenti skin. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.\n\n$2\n\n; Se hai appena installato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code dir=\"ltr\">skins/</code> da lì.\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code>skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki.\n\n; Se hai appena aggiornato MediaWiki:\n: MediaWiki 1.24 e versioni successive non abilità più automaticamente le skin installate (vedi [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automatico skin]). Puoi copiare le seguenti linee nel <code>LocalSettings.php</code> per abilitare tutte le skin attualmente installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se hai appena modificato <code>LocalSettings.php</code>:\n: Ricontrolla i nomi delle skin per errori di battitura.",
+       "default-skin-not-found-no-skins": "Oops! La skin predefinita per il tuo wiki, definita in <code>$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nNon hai skin installate.\n\n; Se hai appena installato o aggiornato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. MediaWiki 1.24 e versioni successive non include alcuna skin nel repository principale. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code>skins/</code> da lì.\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code dir=\"ltr\">skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (abilitata)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilitata''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilitata''')",
+       "mediastatistics": "Statistiche relative ai file multimediali",
+       "mediastatistics-summary": "Statistiche sui tipi di file caricati. Sono incluse solo la versione più recente di un file. Versioni vecchie o cancellate dei file sono escluse.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "Tipo MIME",
+       "mediastatistics-table-extensions": "Possibili estensioni",
+       "mediastatistics-table-count": "Numero di file",
+       "mediastatistics-table-totalbytes": "Dimensione combinata",
+       "mediastatistics-header-unknown": "Sconosciuto",
+       "mediastatistics-header-bitmap": "Immagini bitmap",
+       "mediastatistics-header-drawing": "Disegni (immagini vettoriali)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Video",
+       "mediastatistics-header-multimedia": "Contenuti multimediali",
+       "mediastatistics-header-office": "Ufficio",
+       "mediastatistics-header-text": "Testuali",
+       "mediastatistics-header-executable": "File eseguibili",
+       "mediastatistics-header-archive": "Formati compressi",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|virgola finale è stata rimossa|virgole finali sono state rimosse}} dal JSON",
+       "json-error-unknown": "Si è verificato un problema con il JSON. Errore: $1",
+       "json-error-depth": "La profondità massima dello stack è stata superata",
+       "json-error-state-mismatch": "JSON non valido o malformato",
+       "json-error-ctrl-char": "Errore nel carattere di controllo, possibile codifica errata",
+       "json-error-syntax": "Errore di sintassi",
+       "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"
 }
index b576b2a..e95eeea 100644 (file)
@@ -60,7 +60,8 @@
                        "아라",
                        "Rxy",
                        "Mfuji",
-                       "Takot"
+                       "Takot",
+                       "SkyDaisy9"
                ]
        },
        "tog-underline": "リンクの下線:",
        "otherlanguages": "他言語版",
        "redirectedfrom": "($1から転送)",
        "redirectpagesub": "転送ページ",
+       "redirectto": "転送先:",
        "lastmodifiedat": "このページの最終更新日時は $1 $2 です。",
        "viewcount": "このページは {{PLURAL:$1|$1 回}}アクセスされました。",
        "protectedpage": "保護されたページ",
        "protectedpagetext": "このページは編集や他の操作ができないように保護されています。",
        "viewsourcetext": "このページのソースの閲覧やコピーができます:",
        "viewyourtext": "このページへの<strong>あなたの編集</strong>のソースの閲覧やコピーができます:",
-       "protectedinterface": "このページにはこのウィキのソフトウェアのインターフェイスに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。\nすべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/ translatewiki.net] を使用してください。",
-       "editinginterface": "<strong>警告:</strong> ソフトウェアのインターフェイスに使用されるテキストのページを編集しています。\nこのページを変更すると、このウィキの他の利用者のユーザーインターフェイスの外観に影響します。\nすべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] を使用してください。",
+       "protectedinterface": "このページにはこのウィキのソフトウェアのインターフェイスに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。\nすべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] を使用してください。",
+       "editinginterface": "<strong>警告:</strong> ソフトウェアのインターフェイスに使用されるテキストのページを編集しています。\nこのページを変更すると、このウィキの他の利用者のユーザーインターフェイスの外観に影響します。",
+       "translateinterface": "すべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] を使用してください。",
        "cascadeprotected": "このページは、「カスケード保護」が指定された状態で保護されている以下の{{PLURAL:$1|ページ|ページ群}}で読み込まれているため、編集できないように保護されています:\n$2",
        "namespaceprotected": "<strong>$1</strong>名前空間にあるページを編集する権限がありません。",
        "customcssprotected": "この CSS ページは他の利用者の個人設定を含んでいるため、あなたには編集する権限がありません。",
        "createacct-benefit-body2": "{{PLURAL:$1|ページ}}",
        "createacct-benefit-body3": "最近の{{PLURAL:$1|投稿者数}}",
        "badretype": "入力したパスワードが一致しません。",
-       "userexists": "å\85¥å\8a\9bã\81\95ã\82\8cã\81\9få\88©ç\94¨è\80\85å\90\8dã\81¯æ\97¢ã\81«ä½¿ç\94¨ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ã\80\82\nä»\96ã\81®å\90\8då\89\8dã\82\92é\81¸ã\82\93ã\81§ください。",
+       "userexists": "å\85¥å\8a\9bã\81\97ã\81\9få\88©ç\94¨è\80\85å\90\8dã\81¯æ\97¢ã\81«ä½¿ç\94¨ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ã\80\82\nå\88¥ã\81®å\88©ç\94¨è\80\85å\90\8dã\82\92æ\8c\87å®\9aã\81\97ã\81¦ください。",
        "loginerror": "ログインのエラー",
        "createacct-error": "アカウント作成エラー",
        "createaccounterror": "アカウントを作成できませんでした: $1",
        "createaccount-text": "誰か (おそらくあなた) が、{{SITENAME}} ($4) にあなたのメールアドレスのアカウントを作成しました。\nアカウント名「$2」、パスワード「$3」です。\n今すぐログインしてパスワードを変更してください。\n\nこのアカウントが何かの手違いで作成された場合は、このメッセージを無視してください。",
        "login-throttled": "ログインの失敗が制限回数を超えました。\n$1待ってから再度試してください。",
        "login-abort-generic": "ログインに失敗しました - 中止",
+       "login-migrated-generic": "あなたのアカウントは移行が完了しており、その利用者名はこのウィキにはもう存在しません。",
        "loginlanguagelabel": "言語: $1",
        "suspicious-userlogout": "壊れたブラウザーまたはキャッシュプロキシによって送信された可能性があるため、ログアウト要求は拒否されました。",
        "createacct-another-realname-tip": "本名は省略できます。\n入力すると、その利用者の著作物の帰属表示に使われます。",
        "passwordreset-emailsent-capture": "下記の内容の、パスワード再設定メールをお送りしました。",
        "passwordreset-emailerror-capture": "以下の内容のパスワード再設定メールを生成しましたが、{{GENDER:$2|利用者}}への送信に失敗しました: $1",
        "changeemail": "メールアドレスの変更",
-       "changeemail-header": "アカウントのメールアドレスの変更",
        "changeemail-text": "このフォームではメールアドレスを変更できます。この変更を確認するためにパスワードを入力する必要があります。",
        "changeemail-no-info": "このページに直接アクセスするためにはログインしている必要があります。",
        "changeemail-oldemail": "現在のメールアドレス:",
        "changeemail-none": "(なし)",
        "changeemail-password": "{{SITENAME}}のパスワード:",
        "changeemail-submit": "メールアドレスを変更",
-       "changeemail-cancel": "中止",
        "changeemail-throttled": "ログインの試行回数が多すぎます。\n$1待ってから再度試してください。",
        "resettokens": "トークンの再設定",
        "resettokens-text": "ここでは、アカウントに関連付けられた特定の非公開データにアクセスするためのトークンを再設定できます。\n\nトークンを誤って他人に教えてしまった場合やあなたのアカウントが侵害された場合は、必ず再設定してください。",
        "showpreview": "プレビューを表示",
        "showdiff": "差分を表示",
        "blankarticle": "<strong>警告:</strong>作成しようとしているページの内容がありません。{{Int:savearticle}}\"をもう一度クリックすると、中身の無いページが作成されます。",
-       "anoneditwarning": "<strong>警告:</strong> ログインしていません。\n編集すると、IPアドレスがこのページの編集履歴に記録されます。",
+       "anoneditwarning": "<strong>警告:</strong> ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。<strong>[$1 ログイン]</strong>または<strong>[$2 アカウントを作成]</strong>すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。",
        "anonpreviewwarning": "<em>ログインしていません。投稿を保存すると、ご使用中のIPアドレスがこのページの履歴に記録されます。</em>",
        "missingsummary": "<strong>注意:</strong> 編集内容の要約が空欄です。\n「{{int:savearticle}}」をもう一度クリックすると、編集内容は要約なしで保存されます。",
        "missingcommenttext": "以下にコメントを入力してください。",
        "content-model-text": "プレーンテキスト",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "テンプレート呼び出しで引数が重複しているページ",
+       "duplicate-args-category-desc": "引数が重複したテンプレート呼び出しを含むページ。例: <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code>、<code><nowiki>{{foo|bar|1=baz}}</nowiki></code>",
        "expensive-parserfunction-warning": "<strong>警告:</strong> このページでは、高負荷なパーサー関数の呼び出し回数が多過ぎます。\n\n{{PLURAL:$2|呼び出しを $2 回}}未満にしてください ({{PLURAL:$1|現在は $1 回}})。",
        "expensive-parserfunction-category": "高負荷な構文解析関数の呼び出しが多過ぎるページ",
        "post-expand-template-inclusion-warning": "<strong>警告:</strong> テンプレートの読み込みサイズが大き過ぎます。\nいくつかのテンプレートは読み込まれません。",
        "mergehistory-same-destination": "統合元と統合先のページを同じにはできません",
        "mergehistory-reason": "理由:",
        "mergelog": "統合記録",
-       "pagemerge-logentry": "[[$1]]を[[$2]]に統合 ($3 版まで)",
        "revertmerge": "統合解除",
        "mergelogpagetext": "以下は、最近行われたあるページから別のページへの統合の一覧です。",
        "history-title": "「$1」の変更履歴",
        "searchprofile-images-tooltip": "ファイルを検索",
        "searchprofile-everything-tooltip": "全本文ページ (トークページを含む) 内を検索",
        "searchprofile-advanced-tooltip": "特定の名前空間内を検索",
-       "search-result-size": "$1 ({{PLURAL:$2|$2 語}})",
+       "search-result-size": "$1 ({{PLURAL:$2|$2 語}})",
        "search-result-category-size": "{{PLURAL:$1|$1 件}} ({{PLURAL:$2|$2 下位カテゴリ}}、{{PLURAL:$3|$3 ファイル}})",
        "search-redirect": "($1からのリダイレクト)",
        "search-section": "($1の節)",
+       "search-category": "(カテゴリ $1)",
        "search-file-match": "(ファイルの内容との一致)",
        "search-suggest": "もしかして: $1",
        "search-interwiki-caption": "姉妹プロジェクト",
        "searchall": "すべて",
        "showingresults": "<strong>$2</strong> 件目以降の最大 {{PLURAL:$1|<strong>$1</strong> 件の結果}}を表示しています。",
        "showingresultsinrange": "<strong>$2</strong> 件目から<strong>$3</strong> 件目までの範囲内で最大 {{PLURAL:$1|<strong>$1</strong> 件の結果}}を表示しています。",
-       "showingresultsheader": "「<strong>$4</strong>」の検索結果 {{PLURAL:$5|<strong>$3</strong> 件中の <strong>$1</strong> 件目|<strong>$3</strong> 件中の <strong>$1</strong> 件目から <strong>$2</strong> 件目}}",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> 件中の <strong>$1</strong> 件目|<strong>$3</strong> 件中の <strong>$1</strong> 件目から <strong>$2</strong> 件目}}",
        "search-nonefound": "問い合わせに合致する検索結果はありませんでした。",
        "powersearch-legend": "高度な検索",
        "powersearch-ns": "名前空間を指定して検索:",
        "prefs-watchlist": "ウォッチリスト",
        "prefs-watchlist-days": "ウォッチリストの表示日数:",
        "prefs-watchlist-days-max": "最大 $1 {{PLURAL:$1|日間}}",
-       "prefs-watchlist-edits": "拡張ウォッチリストの表示件数:",
+       "prefs-watchlist-edits": "ウォッチリストの展開時の最大表示件数:",
        "prefs-watchlist-edits-max": "最大数: 1000",
        "prefs-watchlist-token": "ウォッチリストのトークン:",
        "prefs-misc": "その他",
        "gender-female": "女",
        "prefs-help-gender": "この項目の設定は省略できます。\nソフトウェアが利用者向けの画面表示であなたに言及する際に、適切な文法的性を選択するために使用されます。\nこの情報は公開されます。",
        "email": "メール",
-       "prefs-help-realname": "本名は省略できます。\n入力すると、あなたの著作物の帰属表示に使れます。",
+       "prefs-help-realname": "本名は省略できます。\n入力すると、あなたの著作物の帰属表示に使用されます。",
        "prefs-help-email": "メールアドレスは省略できますが、パスワードを忘れた際にパスワードをリセットするのに必要です。",
        "prefs-help-email-others": "利用者ページやトークページ上のリンクを通じて、他の利用者があなたにメールで連絡を取れるようにすることもできます。\n他の利用者が連絡を取る際にあなたのメールアドレスが開示されることはありません。",
        "prefs-help-email-required": "メールアドレスが必要です。",
        "prefs-tokenwatchlist": "トークン",
        "prefs-diffs": "差分",
        "prefs-help-prefershttps": "この設定は、次回ログインの際に反映されます。",
+       "prefswarning-warning": "個人設定にまだ保存されていない変更があります。\n「$1」をクリックせずに離れた場合、個人設定は更新されません。",
        "prefs-tabs-navigation-hint": "ヒント: ← キーと → キーで、タブ一覧内のタブ間を移動できます。",
        "email-address-validity-valid": "メールアドレスは有効のようです",
        "email-address-validity-invalid": "有効なメールアドレスを入力してください",
        "statistics": "統計",
        "statistics-header-pages": "ページに関する統計",
        "statistics-header-edits": "編集に関する統計",
-       "statistics-header-views": "閲覧に関する統計",
        "statistics-header-users": "利用者に関する統計",
        "statistics-header-hooks": "その他の統計",
        "statistics-articles": "記事数",
        "statistics-files": "アップロードされたファイル数",
        "statistics-edits": "{{SITENAME}}の開設以降の編集回数の総計",
        "statistics-edits-average": "1ページあたりの編集回数",
-       "statistics-views-total": "総閲覧回数",
-       "statistics-views-total-desc": "存在しないページと特別ページに対する閲覧は含まれていません",
-       "statistics-views-peredit": "1編集あたりの閲覧回数",
        "statistics-users": "[[Special:ListUsers|利用者]]",
        "statistics-users-active": "活動中の利用者",
        "statistics-users-active-desc": "過去 {{PLURAL:$1|$1 日間}}に何らかの操作をした利用者",
-       "statistics-mostpopular": "最も閲覧されているページ",
        "pageswithprop": "ページプロパティがあるページ",
        "pageswithprop-legend": "ページプロパティがあるページ",
        "pageswithprop-text": "このページでは、特定のページプロパティを持つページを列挙します。",
        "uncategorizedtemplates": "カテゴリ分類されていないテンプレート",
        "unusedcategories": "使われていないカテゴリ",
        "unusedimages": "使われていないファイル",
-       "popularpages": "人気のページ",
        "wantedcategories": "カテゴリページが存在しないカテゴリ",
        "wantedpages": "ページが存在しないリンク",
        "wantedpages-badtitle": "結果が、無効なページ名を含んでいます: $1",
        "pager-older-n": "{{PLURAL:$1|以前の$1件}}",
        "suppress": "秘匿する",
        "querypage-disabled": "パフォーマンスに悪影響を与えるおそれがあるため、この特別ページは無効になっています。",
+       "apihelp": "API のヘルプ",
+       "apihelp-no-such-module": "モジュール「$1」が見つかりません。",
        "booksources": "書籍情報源",
        "booksources-search-legend": "書籍情報源を検索",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "検索",
+       "booksources-search": "検索",
        "booksources-text": "お探しの書籍の新品/中古品を販売している外部サイトへのリンクを以下に列挙します。この書籍についてさらに詳しい情報があるかもしれません:",
        "booksources-invalid-isbn": "指定した ISBN は有効ではないようです。情報源から写し間違えていないか確認してください。",
        "specialloguserlabel": "実行者:",
        "wlheader-enotif": "メール通知が有効になっています。",
        "wlheader-showupdated": "最終訪問以降に変更されたページは、<strong>太字</strong>で表示されます。",
        "wlnote": "$3 $4 までの{{PLURAL:$2|<strong>$2</strong>時間}}になされた{{PLURAL:$1|<strong>$1</strong>件の変更}}は以下の通りです。",
-       "wlshowlast": "表示する期間: $1時間、$2日間、$3",
+       "wlshowlast": "表示する期間: $1時間、$2日間",
        "watchlist-options": "ウォッチリストのオプション",
        "watching": "ウォッチリストに追加中...",
        "unwatching": "ウォッチリストから除去中...",
        "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** 高負荷ページ",
        "unblocked": "[[User:$1|$1]]のブロックを解除しました。",
        "unblocked-range": "$1のブロックを解除しました。",
        "unblocked-id": "ブロック$1を除去しました。",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]]のブロックを解除しました。",
        "blocklist": "ブロックされている利用者",
        "ipblocklist": "ブロックされている利用者",
        "ipblocklist-legend": "ブロックされている利用者の検索",
        "tooltip-pt-mycontris": "自分の投稿の一覧",
        "tooltip-pt-login": "ログインすることを推奨します。ただし、必須ではありません。",
        "tooltip-pt-logout": "ログアウト",
+       "tooltip-pt-createaccount": "アカウントを作成してログインすることをお勧めしますが、必須ではありません",
        "tooltip-ca-talk": "本文ページについての議論",
        "tooltip-ca-edit": "このページを編集できます。保存前にプレビューボタンを使用してください。",
        "tooltip-ca-addsection": "新しい節を開始する",
        "tooltip-feed-atom": "このページのAtomフィード",
        "tooltip-t-contributions": "この利用者の投稿の一覧",
        "tooltip-t-emailuser": "この利用者にメールを送信する",
+       "tooltip-t-info": "このページについての詳細情報",
        "tooltip-t-upload": "ファイルをアップロードする",
        "tooltip-t-specialpages": "特別ページの一覧",
        "tooltip-t-print": "このページの印刷用ページ",
        "pageinfo-robot-policy": "ロボットによるインデックス作成",
        "pageinfo-robot-index": "許可",
        "pageinfo-robot-noindex": "不許可",
-       "pageinfo-views": "閲覧回数",
        "pageinfo-watchers": "ページをウォッチリストに入れている人数",
        "pageinfo-few-watchers": "ウォッチしている利用者 $1 {{PLURAL:$1|人未満}}",
        "pageinfo-redirects-name": "このページへのリダイレクトの数",
        "exif-urgency-low": "低 ($1)",
        "exif-urgency-high": "高 ($1)",
        "exif-urgency-other": "利用者定義の優先度 ($1)",
-       "watchlistall2": "すべて",
        "namespacesall": "すべて",
        "monthsall": "すべて",
        "confirmemail": "メールアドレスの確認",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|トーク]])",
        "unknown_extension_tag": "不明な拡張機能タグ「$1」です",
        "duplicate-defaultsort": "<strong>警告:</strong> 既定のソートキー「$2」が、その前に書かれている既定のソートキー「$1」を上書きしています。",
-       "duplicate-displaytitle": "<strong>警告:</strong> 既定のDISPLAYTITLE「$2」が、その前に書かれている既定のDISPLAYTITLE「$1」を上書きしています。",
+       "duplicate-displaytitle": "<strong>警告:</strong> DISPLAYTITLE「$2」が、その前に書かれているDISPLAYTITLE「$1」を上書きしています。",
        "version": "バージョン情報",
        "version-extensions": "インストール済み拡張機能",
        "version-skins": "インストール済み外装",
        "revdelete-uname-unhid": "利用者名の可視化",
        "revdelete-restricted": "管理者に対する制限の適用",
        "revdelete-unrestricted": "管理者に対する制限の除去",
+       "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-move-move_redir": "$1 がページ「$3」をリダイレクトの「$4」に{{GENDER:$2|移動しました}}",
        "logentry-upload-overwrite": "$1 が $3 の新しいバージョンを {{GENDER:$2|アップロードしました}}",
        "logentry-upload-revert": "$1 が $3 を {{GENDER:$2|アップロードしました}}",
        "rightsnone": "(なし)",
+       "revdelete-summary": "編集内容の要約",
        "feedback-bugornote": "技術的な問題の詳細を説明する準備ができている場合は、[$1 バグ報告]をお願いします。\n準備ができていない場合は、下の簡易フォームを使用してください。あなたのコメントと利用者名が、ページ「[$3 $2]」に追加されます。",
        "feedback-subject": "件名:",
        "feedback-message": "メッセージ:",
        "log-name-pagelang": "言語変更記録",
        "log-description-pagelang": "これはページ言語の変更の記録です。",
        "logentry-pagelang-pagelang": "$1 がページ $3 の言語を $4 から $5 に{{GENDER:$2|変更しました}}",
-       "default-skin-not-found": "おっと! あなたのウィキのデフォルト外装「<code>$1</code>」 (<code>$wgDefaultSkin</code>)は利用できません。\n\nあなたのインストールには以下の外装が含まれています。外装の有効化とデフォルトの選択については、[https://www.mediawiki.org/wiki/Manual:Skin_configuration マニュアル: 外装設定] をご覧ください。\n\n$2\n\n; MediaWikiをインストールしたばかりの場合:\n: gitからインストールしたか、その他の何らかの方法でソースコードから直接インストールした場合には、これは期待されたとおりの動作です。\n:* [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] から外装をインストールしてみてください。\n:* [https://www.mediawiki.org/wiki/Download tarball installer] をダウンロードしてみてください。これにはいくつかの外装と拡張機能が含まれています。 <code>skins/</code> ディレクトリからコピー&ペーストできます。\n: あなたがMediaWiki開発者の場合、これを行うことであなたのgitレポジトリに干渉することはありません。\n\n; MediaWiki をアップグレードした場合:\n: MediaWiki 1.24 以降のバージョンでは、インストール済みの外装は自動的には有効になりません。 ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery マニュアル: 外装の自動探索] をご覧ください。)。<code>LocalSettings.php</code> に以下の行をペーストして、現在インストールされている外装を有効にできます。\n\n<pre>$3</pre>\n\n; <code>LocalSettings.php</code>を編集したばかりの場合:\n: 外装名に打ち間違いがないか再度確認して下さい。",
-       "default-skin-not-found-no-skins": "おっと! あなたのWikiのデフォルト外装「<code>$1</code>」 (<code>$wgDefaultSkin</code>)は利用できません。\n\n外装をインストールしていません。\n\n; MediaWikiをインストールしたばかりの場合:\n: gitからインストールしたか、その他の何らかの方法でソースコードから直接インストールした場合には、これは期待されたとおりの動作です。\n:* [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] から外装をインストールしてみてください。\n:* [https://www.mediawiki.org/wiki/Download tarball installer] をダウンロードしてみてください。これには外装と拡張機能がいくつか含まれています。 <code>skins/</code> ディレクトリからコピー&ペーストできます。\n: あなたがMediaWiki開発者の場合、これを行うことであなたのgitレポジトリに干渉することはありません。外装の有効化とデフォルトの選択についての情報は、[https://www.mediawiki.org/wiki/Manual:Skin_configuration マニュアル: 外装設定] をご覧ください。",
+       "default-skin-not-found": "おっと! あなたのウィキの既定の外装「<code>$1</code>」 (<code>$wgDefaultSkin</code>)は利用できません。\n\nあなたのインストールには以下の外装が含まれています。外装の有効化と既定の選択については、[https://www.mediawiki.org/wiki/Manual:Skin_configuration マニュアル: 外装設定] をご覧ください。\n\n$2\n\n; MediaWikiをインストールしたばかりの場合:\n: gitからインストールしたか、その他の何らかの方法でソースコードから直接インストールした場合には、これは期待されたとおりの動作です。\n:* [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] から外装をインストールしてみてください。\n:* [https://www.mediawiki.org/wiki/Download tarball installer] をダウンロードしてみてください。これにはいくつかの外装と拡張機能が含まれています。 <code>skins/</code> ディレクトリからコピー&ペーストできます。\n: あなたがMediaWiki開発者の場合、これを行うことであなたのgitリポジトリに干渉することはありません。\n\n; MediaWiki をアップグレードした場合:\n: MediaWiki 1.24 以降のバージョンでは、インストール済みの外装は自動的には有効になりません。 ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery マニュアル:外装の自動探索] をご覧ください)。<code>LocalSettings.php</code> に以下の行をペーストして、現在インストールされている外装を有効にできます。\n\n<pre>$3</pre>\n\n; <code>LocalSettings.php</code>を編集したばかりの場合:\n: 外装名に打ち間違いがないか再度確認してください。",
+       "default-skin-not-found-no-skins": "おっと! あなたのウィキの既定の外装「<code>$1</code>」 (<code>$wgDefaultSkin</code>)は利用できません。\n\n外装をインストールしていません。\n\n; MediaWikiをインストールしたばかりの場合:\n: gitからインストールしたか、その他の何らかの方法でソースコードから直接インストールした場合には、これは期待されたとおりの動作です。\n:* [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] から外装をインストールしてみてください。\n:* [https://www.mediawiki.org/wiki/Download tarball installer] をダウンロードしてみてください。これには外装と拡張機能がいくつか含まれています。 <code>skins/</code> ディレクトリからコピー&ペーストできます。\n: あなたがMediaWiki開発者の場合、これを行うことであなたのgitリポジトリに干渉することはありません。外装の有効化と既定の選択についての情報は、[https://www.mediawiki.org/wiki/Manual:Skin_configuration マニュアル:外装設定] をご覧ください。",
        "default-skin-not-found-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 ('''無効''')",
+       "mediastatistics": "メディア統計",
+       "mediastatistics-summary": "アップロードされたファイルの種類に関する統計です。これはファイルの最新バージョンのみを含みます。以前のまたは削除されたバージョンについては除外されています。",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 バイト}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIMEタイプ",
+       "mediastatistics-table-extensions": "取りうる拡張子",
+       "mediastatistics-table-count": "ファイル数",
+       "mediastatistics-table-totalbytes": "合計サイズ",
+       "mediastatistics-header-unknown": "不明",
+       "mediastatistics-header-bitmap": "ビットマップ画像",
+       "mediastatistics-header-drawing": "線画 (ベクターイメージ)",
+       "mediastatistics-header-audio": "オーディオ",
+       "mediastatistics-header-video": "動画",
+       "mediastatistics-header-multimedia": "リッチメディア",
+       "mediastatistics-header-office": "オフィス",
+       "mediastatistics-header-text": "テキスト",
+       "mediastatistics-header-executable": "実行ファイル",
+       "mediastatistics-header-archive": "圧縮フォーマット",
+       "json-warn-trailing-comma": "JSON の末尾の{{PLURAL:$1|カンマ $1 個}}を除去しました",
+       "json-error-unknown": "JSON に問題点がありました。エラー: $1",
+       "json-error-depth": "スタックの深さが上限を超えました",
+       "json-error-state-mismatch": "JSON が無効か、または破損しています",
+       "json-error-ctrl-char": "制御文字のエラーです。おそらく正しく符号化されていません",
+       "json-error-syntax": "構文エラー",
+       "json-error-utf8": "UTF-8 の文字が破損しています。エンコーディングが誤っているおそれがあります",
+       "json-error-recursion": "エンコードされる値に1つ以上の循環参照が含まれます",
+       "json-error-inf-or-nan": "エンコードされる値に1つ以上の NAN または INF が含まれます",
+       "json-error-unsupported-type": "エンコードできない種類の値が入力されました"
 }
index 81bc7a8..ac1921e 100644 (file)
@@ -5,7 +5,8 @@
                        "Ukabia",
                        "Yocahuna",
                        "គីមស៊្រុន",
-                       "아라"
+                       "아라",
+                       "Chabi1"
                ]
        },
        "tog-underline": "Lingk andalainin",
        "powersearch-ns": "Saach ina niemspies:",
        "preferences": "Prefrens",
        "mypreferences": "Mi prefrans",
+       "prefs-help-realname": "Riil niem apshanal. Ef yu giit, imaita yuuz az achribyuushan fi yu wok.",
        "group-sysop": "Adminischrieta",
        "grouppage-sysop": "{{ns:project}}:Adminischrieta",
        "newuserlogpage": "Yuuza krieshan lag",
        "pager-older-n": "{{PLURAL:$1|uola 1|uola $1}}",
        "booksources": "Buk suos",
        "booksources-search-legend": "Saach fi buk suos",
-       "booksources-go": "Gwaan",
        "log": "Lagdem",
        "allpages": "Aal piej",
        "prevpage": "Priivos piej ($1)",
        "watchthispage": "Wach dis piej",
        "unwatch": "Anwach",
        "watchlist-details": "{{PLURAL:$1|$1 piej|$1 piej}} pahn yu wachlis, naa kount taak piej.",
-       "wlshowlast": "Shuo laas $1 howa $2 die $3",
+       "wlshowlast": "Shuo laas $1 howa $2 die",
        "watchlist-options": "Wachlis apshan",
        "watching": "De wach ...",
        "unwatching": "De anwach ...",
        "tooltip-feed-atom": "Atom fiid fi dis piej",
        "tooltip-t-contributions": "Vyuu di lis a kanchribyuushan a dis yuuza",
        "tooltip-t-emailuser": "Sen e-miel tu dis yuuza",
+       "tooltip-t-info": "Muo infamieshan bout da piej ya",
        "tooltip-t-upload": "Opluod fail",
        "tooltip-t-specialpages": "Lis a aal peshal piej",
        "tooltip-t-print": "Printobl voerjan a dis piej",
        "metadata-expand": "Shuo extendid ditiel",
        "metadata-collapse": "Aid extendid ditiel",
        "metadata-fields": "EXIF metadieta fiil wa lis ina dis mechiz wi inkluud pahn imij piej displie wen di metadieta tiebl get kalaps.\nAda wandem wi aid bai difaalt.\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",
-       "watchlistall2": "aal",
        "namespacesall": "aal",
        "monthsall": "aal",
        "watchlisttools-view": "Vyuu rilivant chienjdem",
index 3d72b45..c57d440 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "(vinny)",
-            "Gleki",
-            "Homo logos",
-            "Inego (on jbo.wikipedia.org)",
-            "Malafaya",
-            "OldakQuill",
-            "PierreAbbat",
-            "គីមស៊្រុន"
-        ]
-    },
-    "underline-always": "roroi",
-    "underline-never": "noroi",
-    "sunday": "la zedjed.",
-    "monday": "la padjed.",
-    "tuesday": "la redjed.",
-    "wednesday": "la cedjed.",
-    "thursday": "la vodjed.",
-    "friday": "la mudjed.",
-    "saturday": "la xadjed.",
-    "sun": "la zedjed",
-    "mon": "la padjed",
-    "tue": "la redjed",
-    "wed": "la cidjed",
-    "thu": "la vodjed",
-    "fri": "la mudjed",
-    "sat": "la xadjed",
-    "january": "ianvari",
-    "february": "februari",
-    "march": "martio",
-    "april": "prilio",
-    "may_long": "madjio",
-    "june": "djunio",
-    "july": "djulio",
-    "august": "avgusto",
-    "september": "septembero",
-    "october": "oktobero",
-    "november": "novmbero",
-    "december": "decmbero",
-    "january-gen": "la pamast.",
-    "february-gen": "la .remast.",
-    "march-gen": "la cimast.",
-    "april-gen": "la vomast.",
-    "may-gen": "la mumast.",
-    "june-gen": "la xamast.",
-    "july-gen": "la zemast.",
-    "august-gen": "la bimast.",
-    "september-gen": "la somast.",
-    "october-gen": "la daumast.",
-    "november-gen": "la feimast.",
-    "december-gen": "la gaimast.",
-    "jan": "ian",
-    "feb": "fre",
-    "mar": "mar",
-    "apr": "pri",
-    "may": "mad",
-    "jun": "jun",
-    "jul": "jul",
-    "aug": "avg",
-    "sep": "sep",
-    "oct": "okt",
-    "nov": "nov",
-    "dec": "dec",
-    "pagecategories": "{{PLURAL:$1|klesi|klesi}}",
-    "category_header": "fe le kibypapri cu klesi \"$1\"",
-    "subcategories": "le'a ti",
-    "category-subcat-count": "{{PLURAL:$2|lo dei klesi cu se klesi lo po'o di'e|lo dei klesi cu se klesi  {{PLURAL:$1|pa lo|$1 lo}} $2 da.}}",
-    "category-article-count": "{{PLURAL:$2|pa vi ckupau ku po'o cmima lo vi klesi.| {{PLURAL:$1|lo vi ckupau|$1 vi ckupau }} ku cmima lo vi klesi, out of $2 total.}}",
-    "listingcontinuesabbrev": "co'unai",
-    "about": "ve skicu",
-    "cancel": "naljetnygau",
-    "moredotdotdot": ".au zmadu",
-    "mytalk": "lo casnu be mi",
-    "navigation": "ckupau",
-    "qbfind": "facki",
-    "qbedit": "stika",
-    "qbpageoptions": "ti ckupau",
-    "qbmyoptions": "lo pe mi ckupau",
-    "faq": "lo cafne se reisku",
-    "faqpage": "lo proiekto zo'u: lo cafne se reisku",
-    "vector-action-addsection": "jmina la'e se casnu",
-    "vector-action-delete": "vimcu",
-    "vector-action-move": "stika lo cmene",
-    "vector-action-protect": "bandu",
-    "vector-view-create": "zbasu",
-    "vector-view-edit": "stika",
-    "vector-view-history": "lo ckupau citri",
-    "vector-view-view": "tcidu",
-    "vector-view-viewsource": "cpacu lo krasi",
-    "actions": "nu zukte",
-    "namespaces": "cmene canlu",
-    "variants": "loi jutsi",
-    "errorpagetitle": "fliba",
-    "returnto": "xrugau fi la'e zoi gy. $1 .gy",
-    "tagline": "ra'i {{SITENAME}}",
-    "help": "sidju ckupau",
-    "search": "sisku",
-    "searchbutton": "sisku",
-    "searcharticle": "jarco",
-    "history": "lo ckupau citri",
-    "history_short": "galfi plivei",
-    "printableversion": "lo prina bredi versio",
-    "permalink": "vitno terjo'e",
-    "view": "cpacu",
-    "edit": "stika",
-    "create": "ninzba",
-    "editthispage": "stika lo vi ckupau",
-    "create-this-page": "zbasu lo vi ckupau",
-    "delete": "daspo",
-    "deletethispage": "vimcu lo vi ckupau",
-    "protect": "bandu",
-    "protect_change": "binxo",
-    "protectthispage": "bandu lo dei ckupau",
-    "newpage": "lo cnino ckupau",
-    "talkpagelinktext": "casnu",
-    "specialpage": "steci ckupau",
-    "personaltools": "Sivni tyobuobulysy",
-    "talk": "casnu",
-    "views": "nu cpacu",
-    "toolbox": "loi tutci",
-    "otherlanguages": "lo se bangu be lo drata",
-    "lastmodifiedat": "le vi ckupau rore'u se galfi de'i li $2 $1",
-    "protectedpage": "lo se bandu ckupau",
-    "jumpto": "plipe tyobu:",
-    "jumptonavigation": "ckupau",
-    "jumptosearch": "sisku",
-    "aboutsite": "skicu la'e zoi gy.{{SITENAME}}.gy",
-    "aboutpage": "Project:sera'a",
-    "copyright": "lo selvau cu gubni ja'i la'o gy. $1 .gy.",
-    "copyrightpage": "{{ns:project}}:fukyzifpo'e",
-    "currentevents": "caca'a fasnu",
-    "currentevents-url": "Project:caca'a fasnu",
-    "disclaimers": "nunxusra lo za'i na fuzme",
-    "disclaimerpage": "Project:kampu nunxusra be lo za'i na fuzme",
-    "edithelp": "stika nunsidju",
-    "mainpage": "Ralju Ckupau",
-    "mainpage-description": "ralju ckupau",
-    "portal": "bende ckupau",
-    "portal-url": "Project:bende ckupau",
-    "privacy": "javni be sera'a lo sivni",
-    "privacypage": "Project:i'inai zukselpla",
-    "ok": "ie",
-    "retrievedfrom": "cpacu fi la'o .url. \"$1\" .url.",
-    "editsection": "stika ti",
-    "editold": "stika",
-    "viewsourceold": "catlu le mifra",
-    "editlink": "stika ti",
-    "viewsourcelink": "casnu le mifra",
-    "editsectionhint": "stika lo te fendi noi du la'oi $1",
-    "toc": "ckupau pagbu",
-    "showtoc": "jarco",
-    "hidetoc": "cancygau",
-    "thisisdeleted": "View or restore $1?",
-    "viewdeleted": "View $1?",
-    "restorelink": "{{PLURAL:$1|one deleted edit|$1 deleted edits}}",
-    "feedlinks": "Feed:",
-    "feed-invalid": "Invalid subscription feed type.",
-    "feed-unavailable": "Syndication feeds are not available",
-    "site-rss-feed": "$1 RSS cidja",
-    "site-atom-feed": "$1 Atom cidja",
-    "red-link-title": "$1 (le vi kibypapri cu na zasti)",
-    "nstab-main": "lo ckupau",
-    "nstab-user": "lo pilno kibypapri",
-    "nstab-media": "Media page",
-    "nstab-special": "steci ckupau",
-    "nstab-project": "gungunma ckupau",
-    "nstab-image": "vreji",
-    "nstab-mediawiki": "notci",
-    "nstab-template": "lo morna",
-    "nstab-category": "klesi",
-    "badtitle": "na'e mapti cmene",
-    "viewsource": "catlu le mifra",
-    "yourname": "to pilno cmene toi",
-    "login": "co'a se jaspu",
-    "nav-login-createaccount": "jaspu nerkla / vreji lo cnino pilno",
-    "userlogin": "co'a pilno lo jaspu / zbasu lo jaspu",
-    "logout": "co'u se jaspu",
-    "userlogout": "co'u se jaspu",
-    "nologin": "xu no da jaspu do i $1",
-    "nologinlink": "zbasu lo jaspu",
-    "createaccount": "zbasu lo jaspu",
-    "gotaccountlink": "co'a se jaspu",
-    "loginlanguagelabel": "to bangu toi $1",
-    "resetpass-submit-cancel": "naljetnygau",
-    "passwordreset-username": "to pilno cmene toi",
-    "changeemail-cancel": "naljetnygau",
-    "link_tip": "lo nenri judri",
-    "extlink_sample": "http://www.example.com link title",
-    "media_tip": "judri lo vreji",
-    "summary": "to ve skicu toi",
-    "minoredit": "ti nu na'evajni galfi",
-    "watchthis": "zgana ti",
-    "savearticle": "stogau lo ckupau",
-    "showpreview": "zganygau lo jai se troci",
-    "showdiff": "catlu lo jai te frica",
-    "loginreqlink": "co'a se jaspu",
-    "newarticle": "to cnino toi",
-    "previewnote": "'''do o'i morji lo du'u di'e jai se troci se zgana po'o'''\n.i lo do nu stika cu pu'o se stogau",
-    "editing": "ca'o stika la'o vric. $1 vric.",
-    "editingsection": "ca'o stika la'o vric. $1 vric. noi te fendi",
-    "editingcomment": "ca'o stika la'o vric. $1 vric. noi cnino te fendi",
-    "template-protected": "(to loi se bende toi)",
-    "revisionasof": "ve farvi soi se detri la'oi $1",
-    "previousrevision": "lo laldo zmadu versio",
-    "cur": "cab",
-    "last": "prula'i",
-    "page_first": "pamoi",
-    "page_last": "fanmo",
-    "history-show-deleted": "mo'u se vimcu po'o",
-    "histfirst": "clira traji",
-    "histlast": "lerci traji",
-    "rev-delundel": "jarco/mipri",
-    "lineno": "Linji $1",
-    "editundo": "fatstika",
-    "searchresults": "tu'a le se sisku",
-    "searchresults-title": "Sisku pruce for \"$1\"",
-    "prevn": "lo lidne {{PLURAL:$1|$1}}",
-    "nextn": "lo se lidne {{PLURAL:$1|$1}}",
-    "prevn-title": "lo lidne $1 {{PLURAL:$1|result|results}}",
-    "shown-title": "zganygau $1 lo {{PLURAL:$1|danfu}} fau ro papri",
-    "searchprofile-articles": "lo se vasru papri",
-    "searchprofile-images": "tarti vreji",
-    "searchprofile-everything": "ro co'e",
-    "searchprofile-advanced": "lo tcila",
-    "searchprofile-articles-tooltip": "sisku fi la'oi $1",
-    "searchprofile-project-tooltip": "sisku fi la'oi $1",
-    "searchprofile-images-tooltip": "sisku tu'a lo vreji",
-    "search-result-size": "$1 ({{PLURAL:$2|1 valsi|$2 valsi}})",
-    "search-section": "(to la'oi $1 noi te fendi toi)",
-    "search-suggest": "xu do sisydji lu $1 li'u",
-    "searchall": "ro co'e",
-    "preferences": "lo se nelci",
-    "mypreferences": "lo se nelci",
-    "prefs-rc": "lo nu puzi stika",
-    "prefs-editing": "ca'o stika",
-    "searchresultshead": "tu'a le se sisku",
-    "savedprefs": "le do zmaselnei pu vreji",
-    "yourrealname": "to fatci cmene toi",
-    "action-edit": "stika lo vi ckupau",
-    "recentchanges": "lo nu puzi stika",
-    "recentchanges-summary": "liste loi nu puzi galfi la .uikis.",
-    "rcshowhidebots": "$1 lo zmiku",
-    "rcshowhideliu": "$1 lo se jaspu pilno",
-    "diff": "te frica",
-    "hist": "galfi plivei",
-    "hide": "cancygau",
-    "show": "Jarco",
-    "minoreditletter": "m",
-    "newpageletter": "n",
-    "boteditletter": "z",
-    "rc-enhanced-expand": "zganygau lo tcila",
-    "recentchangeslinked": "lo srana nu gasnu",
-    "recentchangeslinked-toolbox": "lo srana nu gasnu",
-    "recentchangeslinked-page": "to ckupau cmene toi",
-    "upload": "benji lo pa vreji",
-    "uploadbtn": "benji lo pa vreji",
-    "filedesc": "to ve skicu toi",
-    "file-anchor-link": "vreji",
-    "filehist": "lo vreji citri",
-    "filehist-current": "cabna",
-    "filehist-datetime": "detytcika",
-    "filehist-user": "pilno",
-    "filehist-comment": "pinka",
-    "imagelinks": "vreji nu pilno",
-    "randompage": "cunso ckupau",
-    "nbytes": "$1 {{PLURAL:$1|bitsi}}",
-    "newpages": "lo cnino ckupau",
-    "move": "stika lo cmene",
-    "booksources-go": "sazri",
-    "allpages": "ro ckupau",
-    "allarticles": "ro notci",
-    "allpagessubmit": "jarco",
-    "categories": "klesi",
-    "watchlist": "loi se zgana ckupau",
-    "mywatchlist": "loi se zgana ckupau",
-    "watch": "jundi",
-    "watchthispage": "zgana ti",
-    "unwatch": "de'a zgana",
-    "watching": "co'a jundi",
-    "unwatching": "co'u jundi",
-    "actioncomplete": "mo'u pruce",
-    "actionfailed": "fliba lo nu pruce",
-    "dellogpage": "plivei fi loi nu daspo",
-    "deletionlog": "plivei fi loi nu daspo",
-    "rollbacklink": "lamxru",
-    "restriction-edit": "stika",
-    "undeleteviewlink": "cpacu",
-    "namespace": "to cmene canlu toi",
-    "blanknamespace": "(ralju)",
-    "contributions": "{{GENDER:$1|lo pilno}} mo'u stika la'e di'e",
-    "mycontris": "lo be mi pu se stika",
-    "sp-contributions-talk": "lo nu casnu",
-    "sp-contributions-submit": "sisku",
-    "whatlinkshere": "ma jorne ti",
-    "whatlinkshere-page": "to ckupau toi",
-    "isimage": "judri lo vreji",
-    "whatlinkshere-prev": "{{PLURAL:$1|lidne|se lidne la'o url $1 url}}",
-    "whatlinkshere-links": "to loi judri toi",
-    "whatlinkshere-hidelinks": "loi judri la'o .url $1 .url",
-    "blocklink": "zunti",
-    "change-blocklink": "stika bliku",
-    "contribslink": "selstika",
-    "block-log-flags-nocreate": "gau nu ka'enai zbasu lo jaspu",
-    "revertmove": "xruti",
-    "allmessagesname": "cmene",
-    "thumbnail-more": "bardygau",
-    "tooltip-pt-userpage": "ckupau pe do poi pilno",
-    "tooltip-pt-mytalk": "pe do nu casnu ckupau",
-    "tooltip-pt-preferences": "lo se nelci be do",
-    "tooltip-pt-watchlist": "le liste be lo kibypapri poi do zgana",
-    "tooltip-pt-mycontris": "le liste be le do selstika",
-    "tooltip-pt-login": "e'u do co'a pilno lo jaspu ije ku'i do na bilga",
-    "tooltip-pt-logout": "co'u se jaspu",
-    "tooltip-ca-talk": "lo nu casnu lo se vasru be lo dei ckupau",
-    "tooltip-ca-history": "lo purci versio be lo dei papri",
-    "tooltip-ca-protect": "bandu lo dei papri",
-    "tooltip-ca-delete": "vimcu lo vi ckupau",
-    "tooltip-ca-move": "ko galfi lo cmene be lo vi ckupau",
-    "tooltip-ca-watch": "jmive lo dei ckupau lo se zgana liste pe do",
-    "tooltip-search": "Sisku {{SITENAME}}",
-    "tooltip-search-go": "vitke lo ckupau poi se cmene da bi'unai fau lo nu ri zasti",
-    "tooltip-search-fulltext": "sisku do'i lei ckupau",
-    "tooltip-p-logo": "vitke lo ralju ckupau",
-    "tooltip-n-mainpage": "vitke lo ralju ckupau",
-    "tooltip-n-mainpage-description": "vitke lo ralju ckupau",
-    "tooltip-n-portal": "srana lo dei proiekto je zo'e noi ka'e se zukte do vau je lo stuzi be lo plixau info",
-    "tooltip-n-recentchanges": "liste lo vreji be lo nu puzi stika bu'u lo dei uitki",
-    "tooltip-n-randompage": "jarco lo cunso ckupau",
-    "tooltip-n-help": "sidju kibypapri",
-    "tooltip-t-whatlinkshere": "nu liste lo zifyga'ikibjudri poi ke'a kibjorne le vi ckupau",
-    "tooltip-t-recentchangeslinked": "lo puzi nunga'i pe lo kibypapri poi kibjorne le vi ckupau",
-    "tooltip-t-upload": "benji lo pa vreji",
-    "tooltip-t-specialpages": "liste ro steci ckupau",
-    "tooltip-t-print": "lo prina versio be lo dei ckupau",
-    "tooltip-t-permalink": "lo stodi judri be lo dei versio be lo dei papri",
-    "tooltip-ca-nstab-main": "catlu lo se vasru ckupau",
-    "tooltip-ca-nstab-project": "cpacu lo gungunma ckupau",
-    "tooltip-ca-nstab-image": "catlu lo ckupau pe lo vreji",
-    "tooltip-ca-nstab-template": "cpacu lo morna",
-    "tooltip-save": "lo nu stika ku ranji gau",
-    "tooltip-undo": "fatygau le nunstika gi'e jarco le stika tampapri tai lo nu troci jarco .i kakne jmina lo krinu le torvelski",
-    "pageinfo-toolboxlink": "lo info be lo ckupau",
-    "bad_image_list": "lo formate cu jai ve ciksi do'e di'e\n\ni lo po'o liste cmima (to lo linji poi zo'oi * cu pamoi lerfu ke'a) cu se pilno\ni lo pamoi ke linji judrysni cu ei judrysni lo jai se curmi nai fail\ni ro lo se lidne judrysni pe lo bi'unai linji cu nai jai se javni vau je va'i me lo papri poi lo fail sinxa ka'e zvati lo bi'unai linji",
-    "watchlistall2": "ro co'e",
-    "namespacesall": "ro co'e",
-    "monthsall": "ro co'e",
-    "specialpages": "steci ckupau",
-    "feedback-cancel": "naljetnygau"
+       "@metadata": {
+               "authors": [
+                       "(vinny)",
+                       "Gleki",
+                       "Homo logos",
+                       "Inego (on jbo.wikipedia.org)",
+                       "Malafaya",
+                       "OldakQuill",
+                       "PierreAbbat",
+                       "គីមស៊្រុន"
+               ]
+       },
+       "tog-underline": "lo nu cnita linji ke judri sinxa",
+       "tog-hideminor": "na zgana lo nalvajni nu cnegau poi me lo puzi nu stika",
+       "tog-showtoolbar": "zgana lo stika kajna",
+       "underline-always": "roroi",
+       "underline-never": "noroi",
+       "editfont-sansserif": "cfine claxu lerfu",
+       "editfont-serif": "cfine lerfu",
+       "sunday": "la zedjed.",
+       "monday": "la padjed.",
+       "tuesday": "la redjed.",
+       "wednesday": "la cedjed.",
+       "thursday": "la vodjed.",
+       "friday": "la mudjed.",
+       "saturday": "la xadjed.",
+       "sun": "la zedjed",
+       "mon": "la padjed",
+       "tue": "la redjed",
+       "wed": "la cidjed",
+       "thu": "la vodjed",
+       "fri": "la mudjed",
+       "sat": "la xadjed",
+       "january": "ianvari",
+       "february": "februari",
+       "march": "martio",
+       "april": "prilio",
+       "may_long": "madjio",
+       "june": "djunio",
+       "july": "djulio",
+       "august": "avgusto",
+       "september": "septembero",
+       "october": "oktobero",
+       "november": "novmbero",
+       "december": "decmbero",
+       "january-gen": "la pamast.",
+       "february-gen": "la .remast.",
+       "march-gen": "la cimast.",
+       "april-gen": "la vomast.",
+       "may-gen": "la mumast.",
+       "june-gen": "la xamast.",
+       "july-gen": "la zemast.",
+       "august-gen": "la bimast.",
+       "september-gen": "la somast.",
+       "october-gen": "la daumast.",
+       "november-gen": "la feimast.",
+       "december-gen": "la gaimast.",
+       "jan": "ian",
+       "feb": "fre",
+       "mar": "mar",
+       "apr": "pri",
+       "may": "mad",
+       "jun": "jun",
+       "jul": "jul",
+       "aug": "avg",
+       "sep": "sep",
+       "oct": "okt",
+       "nov": "nov",
+       "dec": "dec",
+       "january-date": "ianvari $1",
+       "february-date": "februari $1",
+       "march-date": "martio $1",
+       "april-date": "prilio $1",
+       "may-date": "madjio $1",
+       "june-date": "djunio $1",
+       "july-date": "djulio $1",
+       "august-date": "avgusto $1",
+       "september-date": "septembero $1",
+       "october-date": "oktobero $1",
+       "november-date": "novmbero $1",
+       "december-date": "decmbero $1",
+       "pagecategories": "{{PLURAL:$1|klesi|klesi}}",
+       "category_header": "fe le kibypapri cu klesi \"$1\"",
+       "subcategories": "le'a ti",
+       "category-subcat-count": "{{PLURAL:$2|lo dei klesi cu se klesi lo po'o di'e|lo dei klesi cu se klesi  {{PLURAL:$1|pa lo|$1 lo}} $2 da.}}",
+       "category-article-count": "{{PLURAL:$2|pa vi ckupau ku po'o cmima lo vi klesi.| {{PLURAL:$1|lo vi ckupau|$1 vi ckupau }} ku cmima lo vi klesi, out of $2 total.}}",
+       "listingcontinuesabbrev": "co'unai",
+       "about": "ve skicu",
+       "cancel": "naljetnygau",
+       "moredotdotdot": ".au zmadu",
+       "mytalk": "lo casnu be mi",
+       "navigation": "ckupau",
+       "qbfind": "facki",
+       "qbedit": "stika",
+       "qbpageoptions": "ti ckupau",
+       "qbmyoptions": "lo pe mi ckupau",
+       "faq": "lo cafne se retsku",
+       "faqpage": "lo proiekto zo'u: lo cafne se retsku",
+       "actions": "nu zukte",
+       "namespaces": "cmene canlu",
+       "variants": "loi jutsi",
+       "errorpagetitle": "fliba",
+       "returnto": "xrugau fi la'e zoi gy. $1 .gy",
+       "tagline": "ra'i {{SITENAME}}",
+       "help": "sidju ckupau",
+       "search": "sisku",
+       "searchbutton": "sisku",
+       "searcharticle": "jarco",
+       "history": "lo ckupau citri",
+       "history_short": "galfi plivei",
+       "printableversion": "lo prina bredi versio",
+       "permalink": "vitno terjo'e",
+       "view": "cpacu",
+       "edit": "stika",
+       "create": "ninzba",
+       "editthispage": "stika lo vi ckupau",
+       "create-this-page": "zbasu lo vi ckupau",
+       "delete": "daspo",
+       "deletethispage": "vimcu lo vi ckupau",
+       "protect": "bandu",
+       "protect_change": "binxo",
+       "protectthispage": "bandu lo dei ckupau",
+       "newpage": "lo cnino ckupau",
+       "talkpage": "casnu lo dei ckupau",
+       "talkpagelinktext": "casnu",
+       "specialpage": "steci ckupau",
+       "personaltools": "Sivni tyobuobulysy",
+       "talk": "casnu",
+       "views": "nu cpacu",
+       "toolbox": "loi tutci",
+       "viewtalkpage": "catlu lo nu casnu",
+       "otherlanguages": "bau lo drata",
+       "lastmodifiedat": "le vi ckupau rore'u se galfi de'i li $2 $1",
+       "protectedpage": "lo se bandu ckupau",
+       "jumpto": "lo se plipe",
+       "jumptonavigation": "ckupau",
+       "jumptosearch": "sisku",
+       "pool-errorunknown": "lo se srera poi na se djuno",
+       "aboutsite": "skicu la'e zoi gy.{{SITENAME}}.gy",
+       "aboutpage": "Project:sera'a",
+       "copyright": "lo selvau cu gubni ja'i la'o gy. $1 .gy.",
+       "copyrightpage": "{{ns:project}}:fukyzifpo'e",
+       "currentevents": "caca'a fasnu",
+       "currentevents-url": "Project:caca'a fasnu",
+       "disclaimers": "nunxusra lo za'i na fuzme",
+       "disclaimerpage": "Project:kampu nunxusra be lo za'i na fuzme",
+       "edithelp": "stika nunsidju",
+       "mainpage": "Ralju Ckupau",
+       "mainpage-description": "ralju ckupau",
+       "portal": "bende ckupau",
+       "portal-url": "Project:bende ckupau",
+       "privacy": "javni be sera'a lo sivni",
+       "privacypage": "Project:loi javni be lo nu sivni",
+       "ok": "ie",
+       "retrievedfrom": "cpacu fi la'o .url. \"$1\" .url.",
+       "editsection": "stika ti",
+       "editold": "stika",
+       "viewsourceold": "catlu le mifra",
+       "editlink": "stika ti",
+       "viewsourcelink": "casnu le mifra",
+       "editsectionhint": "stika lo te fendi noi du la'oi $1",
+       "toc": "ckupau pagbu",
+       "showtoc": "jarco",
+       "hidetoc": "cancygau",
+       "thisisdeleted": "View or restore $1?",
+       "viewdeleted": "View $1?",
+       "restorelink": "{{PLURAL:$1|one deleted edit|$1 deleted edits}}",
+       "feedlinks": "Feed:",
+       "feed-invalid": "Invalid subscription feed type.",
+       "feed-unavailable": "Syndication feeds are not available",
+       "site-rss-feed": "$1 RSS cidja",
+       "site-atom-feed": "$1 Atom cidja",
+       "red-link-title": "$1 (le vi kibypapri cu na zasti)",
+       "nstab-main": "lo ckupau",
+       "nstab-user": "lo pilno kibypapri",
+       "nstab-media": "Media page",
+       "nstab-special": "steci ckupau",
+       "nstab-project": "gungunma ckupau",
+       "nstab-image": "vreji",
+       "nstab-mediawiki": "notci",
+       "nstab-template": "lo morna",
+       "nstab-category": "klesi",
+       "badtitle": "na'e mapti cmene",
+       "viewsource": "catlu le mifra",
+       "yourname": "to pilno cmene toi",
+       "login": "co'a se jaspu",
+       "nav-login-createaccount": "jaspu nerkla / vreji lo cnino pilno",
+       "userlogin": "co'a pilno lo jaspu / zbasu lo jaspu",
+       "logout": "de'a se jaspu",
+       "userlogout": "de'a se jaspu",
+       "nologin": "xu no da jaspu do i $1",
+       "nologinlink": "zbasu lo jaspu",
+       "createaccount": "zbasu lo jaspu",
+       "gotaccountlink": "co'a se jaspu",
+       "loginlanguagelabel": "to bangu toi $1",
+       "pt-userlogout": "de'a se jaspu",
+       "resetpass-submit-cancel": "naljetnygau",
+       "passwordreset-username": "to pilno cmene toi",
+       "link_tip": "lo nenri judri",
+       "extlink_sample": "http://www.example.com link title",
+       "media_tip": "judri lo vreji",
+       "summary": "to ve skicu toi",
+       "minoredit": "ti nu na'evajni galfi",
+       "watchthis": "zgana ti",
+       "savearticle": "stogau lo ckupau",
+       "showpreview": "zgana lo jai se troci",
+       "showdiff": "catlu lo jai te frica",
+       "loginreqlink": "co'a se jaspu",
+       "newarticle": "to cnino toi",
+       "noarticletext": "no da .uenzi va'o lo dei papri .i .e'u do [[Special:Search/{{PAGENAME}}|sisku tu'a lo cmene be lo dei papri]] lo drata papri ja <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sisku fi lo srana citri vreji] ja [{{fullurl:{{FULLPAGENAME}}|action=edit}} cnegau lo dei papri]</span>.",
+       "previewnote": "'''do o'i morji lo du'u di'e jai se troci se zgana po'o'''\n.i lo do nu stika cu pu'o se stogau",
+       "editing": "ca'o stika la'o vric. $1 vric.",
+       "editingsection": "ca'o stika la'o vric. $1 vric. noi te fendi",
+       "editingcomment": "ca'o stika la'o vric. $1 vric. noi cnino te fendi",
+       "template-protected": "(to loi se bende toi)",
+       "revisionasof": "ve farvi soi se detri la'oi $1",
+       "previousrevision": "lo laldo zmadu versio",
+       "cur": "cab",
+       "last": "prula'i",
+       "page_first": "pamoi",
+       "page_last": "fanmo",
+       "history-show-deleted": "mo'u se vimcu po'o",
+       "histfirst": "clira traji",
+       "histlast": "lerci traji",
+       "rev-delundel": "jarco/mipri",
+       "lineno": "Linji $1",
+       "editundo": "fatstika",
+       "searchresults": "tu'a le se sisku",
+       "searchresults-title": "Sisku pruce for \"$1\"",
+       "prevn": "lo lidne {{PLURAL:$1|$1}}",
+       "nextn": "lo se lidne {{PLURAL:$1|$1}}",
+       "prevn-title": "lo lidne $1 {{PLURAL:$1|result|results}}",
+       "shown-title": "fau ro papri zgana $1 lo {{PLURAL:$1|danfu}}",
+       "searchprofile-articles": "lo se vasru papri",
+       "searchprofile-images": "tarti vreji",
+       "searchprofile-everything": "ro co'e",
+       "searchprofile-advanced": "lo tcila",
+       "searchprofile-articles-tooltip": "sisku fi la'oi $1",
+       "searchprofile-images-tooltip": "sisku tu'a lo vreji",
+       "search-result-size": "$1 ({{PLURAL:$2|1 valsi|$2 valsi}})",
+       "search-section": "(to la'oi $1 noi te fendi toi)",
+       "search-suggest": "xu do sisydji lu $1 li'u",
+       "searchall": "ro co'e",
+       "preferences": "lo se nelci",
+       "mypreferences": "lo se nelci",
+       "prefs-rc": "lo nu puzi stika",
+       "prefs-editing": "ca'o stika",
+       "searchresultshead": "tu'a le se sisku",
+       "savedprefs": "le do zmaselnei pu vreji",
+       "yourrealname": "to fatci cmene toi",
+       "yourlanguage": "to bangu toi",
+       "action-edit": "stika lo vi ckupau",
+       "recentchanges": "lo nu puzi stika",
+       "recentchanges-legend": "loi optio pe lo pu zi nu stika",
+       "recentchanges-summary": "liste loi nu puzi stika le uitki",
+       "rcshowhidebots": "$1 lo zmiku",
+       "rcshowhideliu": "$1 lo se jaspu pilno",
+       "rclinks": "zgana $1 lo romoi nu stika ca $2 lo romoi djedi<br />$3",
+       "diff": "te frica",
+       "hist": "galfi plivei",
+       "hide": "cancygau",
+       "show": "Jarco",
+       "minoreditletter": "m",
+       "newpageletter": "n",
+       "boteditletter": "z",
+       "rc-enhanced-expand": "zgana lo tcila",
+       "recentchangeslinked": "lo srana nu gasnu",
+       "recentchangeslinked-toolbox": "lo srana nu gasnu",
+       "recentchangeslinked-page": "to ckupau cmene toi",
+       "upload": "benji lo pa vreji",
+       "uploadbtn": "benji lo pa vreji",
+       "filedesc": "to ve skicu toi",
+       "file-anchor-link": "vreji",
+       "filehist": "lo vreji citri",
+       "filehist-current": "cabna",
+       "filehist-datetime": "detytcika",
+       "filehist-user": "pilno",
+       "filehist-comment": "pinka",
+       "imagelinks": "vreji nu pilno",
+       "randompage": "cunso ckupau",
+       "nbytes": "$1 {{PLURAL:$1|bitsi}}",
+       "newpages": "lo cnino ckupau",
+       "move": "stika lo cmene",
+       "allpages": "ro ckupau",
+       "allarticles": "ro notci",
+       "allpagessubmit": "jarco",
+       "categories": "klesi",
+       "watchlist": "loi se zgana ckupau",
+       "mywatchlist": "loi se zgana ckupau",
+       "watch": "jundi",
+       "watchthispage": "zgana ti",
+       "unwatch": "de'a zgana",
+       "watching": "co'a jundi",
+       "unwatching": "co'u jundi",
+       "actioncomplete": "mo'u pruce",
+       "actionfailed": "fliba lo nu pruce",
+       "dellogpage": "plivei fi loi nu daspo",
+       "deletionlog": "plivei fi loi nu daspo",
+       "rollbacklink": "lamxru",
+       "restriction-edit": "stika",
+       "undeleteviewlink": "cpacu",
+       "namespace": "to cmene canlu toi",
+       "blanknamespace": "(ralju)",
+       "contributions": "{{GENDER:$1|lo pilno}} mo'u stika la'e di'e",
+       "mycontris": "lo be mi pu se stika",
+       "sp-contributions-talk": "lo nu casnu",
+       "sp-contributions-submit": "sisku",
+       "whatlinkshere": "ma jorne ti",
+       "whatlinkshere-page": "to ckupau toi",
+       "isimage": "judri lo vreji",
+       "whatlinkshere-prev": "{{PLURAL:$1|lidne|se lidne la'o url $1 url}}",
+       "whatlinkshere-links": "to loi judri toi",
+       "whatlinkshere-hidelinks": "loi judri la'o .url $1 .url",
+       "blocklink": "zunti",
+       "change-blocklink": "stika bliku",
+       "contribslink": "selstika",
+       "block-log-flags-nocreate": "gau nu ka'enai zbasu lo jaspu",
+       "revertmove": "xruti",
+       "allmessagesname": "cmene",
+       "allmessages-language": "to bangu toi",
+       "thumbnail-more": "bardygau",
+       "tooltip-pt-userpage": "ckupau pe do poi pilno",
+       "tooltip-pt-mytalk": "pe do nu casnu ckupau",
+       "tooltip-pt-preferences": "lo se nelci be do",
+       "tooltip-pt-watchlist": "le liste be lo kibypapri poi do zgana",
+       "tooltip-pt-mycontris": "le liste be le do selstika",
+       "tooltip-pt-login": "e'u do co'a pilno lo jaspu ije ku'i do na bilga",
+       "tooltip-pt-logout": "de'a se jaspu",
+       "tooltip-ca-talk": "lo nu casnu lo se vasru be lo dei ckupau",
+       "tooltip-ca-history": "lo purci versio be lo dei papri",
+       "tooltip-ca-protect": "bandu lo dei papri",
+       "tooltip-ca-delete": "vimcu lo vi ckupau",
+       "tooltip-ca-move": "ko galfi lo cmene be lo vi ckupau",
+       "tooltip-ca-watch": "jmive lo dei ckupau lo se zgana liste pe do",
+       "tooltip-search": "Sisku {{SITENAME}}",
+       "tooltip-search-go": "vitke lo ckupau poi se cmene da bi'unai fau lo nu ri zasti",
+       "tooltip-search-fulltext": "sisku do'i lei ckupau",
+       "tooltip-p-logo": "vitke lo ralju ckupau",
+       "tooltip-n-mainpage": "vitke lo ralju ckupau",
+       "tooltip-n-mainpage-description": "vitke lo ralju ckupau",
+       "tooltip-n-portal": "srana lo dei proiekto je zo'e noi ka'e se zukte do vau je lo stuzi be lo plixau info",
+       "tooltip-n-recentchanges": "liste lo vreji be lo nu puzi stika bu'u lo dei uitki",
+       "tooltip-n-randompage": "jarco lo cunso ckupau",
+       "tooltip-n-help": "sidju kibypapri",
+       "tooltip-t-whatlinkshere": "nu liste lo zifyga'ikibjudri poi ke'a kibjorne le vi ckupau",
+       "tooltip-t-recentchangeslinked": "lo puzi nunga'i pe lo kibypapri poi kibjorne le vi ckupau",
+       "tooltip-t-upload": "benji lo pa vreji",
+       "tooltip-t-specialpages": "liste ro steci ckupau",
+       "tooltip-t-print": "lo prina versio be lo dei ckupau",
+       "tooltip-t-permalink": "lo stodi judri be lo dei versio be lo dei papri",
+       "tooltip-ca-nstab-main": "catlu lo se vasru ckupau",
+       "tooltip-ca-nstab-project": "cpacu lo gungunma ckupau",
+       "tooltip-ca-nstab-image": "catlu lo ckupau pe lo vreji",
+       "tooltip-ca-nstab-template": "cpacu lo morna",
+       "tooltip-save": "lo nu stika ku ranji gau",
+       "tooltip-undo": "fatygau le nunstika gi'e jarco le stika tampapri tai lo nu troci jarco .i kakne jmina lo krinu le torvelski",
+       "pageinfo-toolboxlink": "lo info be lo ckupau",
+       "bad_image_list": "lo formate cu jai ve ciksi do'e di'e\n\ni lo po'o liste cmima (to lo linji poi zo'oi * cu pamoi lerfu ke'a) cu se pilno\ni lo pamoi ke linji judrysni cu ei judrysni lo jai se curmi nai fail\ni ro lo se lidne judrysni pe lo bi'unai linji cu nai jai se javni vau je va'i me lo papri poi lo fail sinxa ka'e zvati lo bi'unai linji",
+       "namespacesall": "ro co'e",
+       "monthsall": "ro co'e",
+       "specialpages": "steci ckupau",
+       "feedback-cancel": "naljetnygau"
 }
index 1e4aa6b..9ebdaa0 100644 (file)
        "watchthispage": "Åvervåg side",
        "unwatch": "Fjern åvervågnenge",
        "watchlist-details": "Du har $1 {{PLURAL:$1|side|sider}} på din åvervågnengsliste (øn diskusjesider).",
-       "wlshowlast": "Ves de seneste $1 têmer $2 dåg $3",
+       "wlshowlast": "Ves de seneste $1 têmer $2 dåg",
        "watching": "Åvervåge …",
        "unwatching": "Ekke åvervåge …",
        "deletepage": "Slet side",
        "metadata-expand": "Ves udvedede data",
        "metadata-collapse": "Skjul udvedede data",
        "metadata-fields": "Æ følgende felter frå EXIF-metadata i denne MediaWiki-beskedskrevselenger veses på billetbeskrevelsessider; yderligere lileskrevselenger ken veses.\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",
-       "watchlistall2": "åle",
        "namespacesall": "åle",
        "monthsall": "åle",
        "watchlisttools-view": "Se ændrede sider i'n åvervågnengsliste",
index 0f1efd1..7665ee8 100644 (file)
        "passwordreset-emailsent-capture": "Layang èlèktronik kanggo mbalèkaké tembung sandhi wis dikirim, bisa didelok ngisor iki.",
        "passwordreset-emailerror-capture": "Layang èlèktronik pangèling tembung sandhi wis digawe, yaiku sing ditampilaké nèng ngisor iki, nanging ora kasil dikirim ing {{GENDER:$2|panganggo}}: $1",
        "changeemail": "Ganti alamat layang èlèktronik",
-       "changeemail-header": "Ganti alamat layang èlèktronik akun",
        "changeemail-text": "Rampungaké pormulir iki kanggo ngganti alamat layang èlèktronik Sampéyan. Sampéyan bakal butuh nglebokaké tembung sandhi Sampéyan kanggo pepesthèn owahan kuwi.",
        "changeemail-no-info": "Sampéyan kudu mlebu log kanggo ngaksès kaca iki langsung.",
        "changeemail-oldemail": "Alamat layang èlèktronik saiki:",
        "changeemail-none": "(ora ana)",
        "changeemail-password": "Sandi {{SITENAME}} panjenengan:",
        "changeemail-submit": "Ganti layang èlèktronik",
-       "changeemail-cancel": "Batal",
        "resettokens": "Reset token",
        "resettokens-text": "Anda dapat me-reset Token yang memungkinkan akses ke data pribadi tertentu yang terkait dengan akun Anda di sini.\n\nAnda harus melakukannya jika Anda secara tidak sengaja berbagi dengan seseorang atau jika akun Anda telah disusupi.",
        "resettokens-no-tokens": "Ora ana token sing bisa direset.",
        "mergehistory-same-destination": "Jeneng kaca sumber lan tujuan ora kena padha",
        "mergehistory-reason": "Alesan:",
        "mergelog": "Gabung log",
-       "pagemerge-logentry": "nggabungaké [[$1]] menyang [[$2]] (révisi nganti tekan $3)",
        "revertmerge": "Batalna panggabungan",
        "mergelogpagetext": "Ing ngisor iki kapacak daftar panggabungan sajarah kaca ing kaca liyané.",
        "history-title": "Riwayat rèvisi saka \"$1\"",
        "searchrelated": "kagandhèng",
        "searchall": "kabèh",
        "showingresults": "Ing ngisor iki dituduhaké {{PLURAL:$1|'''1''' kasil|'''$1''' kasil}}, wiwitané saking #<strong>$2</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Asil '''$1''' saka '''$3'''|Asil '''$1 - $2''' saka '''$3'''}} kanggo '''$4'''",
        "search-nonefound": "Ora ana kasil sing cocog karo pitakonan (''query'').",
        "powersearch-legend": "Panggolèkan sabanjuré (''advance search'')",
        "powersearch-ns": "Panggolèkan ing ruang jeneng:",
        "randomincategory": "Sembarang kaca ing kategori",
        "randomincategory-invalidcategory": "\"$1\" dudu jeneng kategori sing apik.",
        "randomincategory-nopages": "Ora ana kaca ing kategori [[:Category:$1|$1]].",
-       "randomincategory-selectcategory": "Dheleng kaca sembarang saking kategori: $1 $2.",
-       "randomincategory-selectcategory-submit": "Golèk",
        "randomredirect": "Pangalihan sembarang",
        "randomredirect-nopages": "Ora ana pangalihan ing bilik jeneng \"$1\".",
        "statistics": "Statistik",
        "statistics-header-pages": "Statistik kaca",
        "statistics-header-edits": "Statistik panyuntingan",
-       "statistics-header-views": "Statistik penampilan",
        "statistics-header-users": "Statistik panganggo",
        "statistics-header-hooks": "Statistik liya",
        "statistics-articles": "Kaca-kaca isi",
        "statistics-files": "Berkas sing diunggahaké",
        "statistics-edits": "Gunggung suntingan wiwit {{SITENAME}} diwiwiti",
        "statistics-edits-average": "Rata-rata suntingan saben kaca",
-       "statistics-views-total": "Gunggung panampilan kaca",
-       "statistics-views-total-desc": "Delokan nèng kaca sing ora ana lan kaca kusus ora kalebu",
-       "statistics-views-peredit": "Gunggung/cacahing panampilan saben suntingan",
        "statistics-users": "Gunggung [[Special:ListUsers|panganggo kadaftar]]",
        "statistics-users-active": "Para panganggo aktif",
        "statistics-users-active-desc": "Panganggo sing ngayahi aktivitas jroning {{PLURAL:$1|dia|$1 dina}} pungkasan",
-       "statistics-mostpopular": "Kaca sing paling akèh dideleng",
        "pageswithprop": "Kaca-kaca mawa ubarampé",
        "pageswithprop-legend": "Kaca-kaca mawa ubarampé",
        "pageswithprop-text": "Kaca iki njlèntèhaké kaca-kaca sing nganggo ubarampé astamiwa.",
        "uncategorizedtemplates": "Cithakan sing ora dikategorisasi",
        "unusedcategories": "Kategori sing ora dienggo",
        "unusedimages": "Berkas sing ora dienggo",
-       "popularpages": "Kaca populèr",
        "wantedcategories": "Kategori sing diperlokaké",
        "wantedpages": "Kaca sing dipèngini",
        "wantedpages-badtitle": "Judhul ora valid ing sèt asil: $1",
        "querypage-disabled": "Kaca kusus iki dipatèni kanggo alesan kinerja.",
        "booksources": "Sumber buku",
        "booksources-search-legend": "Golèk ing sumber buku",
-       "booksources-go": "Golèk",
        "booksources-text": "Ing ngisor iki kapacak daftar pranala menyang situs liyané sing ngadol buku anyar lan bekas, lan mbok-menawa uga ndarbèni informasi sabanjuré ngenani buku-buku sing lagi panjenengan golèki:",
        "booksources-invalid-isbn": "ISBN sing diwènèhaké katonané ora valid; priksa kasalahan penyalinan saka sumber asli.",
        "specialloguserlabel": "Panampil:",
        "wlheader-enotif": "Notifikasi layang elektronik diaktifaké.",
        "wlheader-showupdated": "Kaca-kaca sing wis owah wiwit ditiliki panjenengan kaping pungkasan, dituduhaké mawa '''aksara kandel'''",
        "wlnote": "Ngisor iki {{PLURAL:$1|owahan pungkasan|'''$1''' owahan pungkasan}} {{PLURAL:$2|jam|'''$2''' jam}} kapungkur, per $3, $4.",
-       "wlshowlast": "Tuduhna $1 jam $2 dina $3 pungkasan",
+       "wlshowlast": "Tuduhna $1 jam $2 dina  pungkasan",
        "watchlist-options": "Opsi daftar pangawasan",
        "watching": "Ngawasi...",
        "unwatching": "Ngilangi pangawasan...",
        "import": "Impor kaca",
        "importinterwiki": "Impor transwiki",
        "import-interwiki-text": "Pilih sawijining wiki lan irah-irahan kaca sing arep diimpor.\nTanggal révisi lan jeneng panyunting bakal dilestarèkaké.\nKabèh aktivitas impor transwiki bakal dilog ing [[Special:Log/import|log impor]].",
-       "import-interwiki-source": "Kaca/sumber wiki:",
        "import-interwiki-history": "Tuladen kabèh vèrsi lawas saka kaca iki",
        "import-interwiki-templates": "Katutna kabèh cithakan",
        "import-interwiki-submit": "Impor",
        "pageinfo-robot-policy": "Diindeks karo robot",
        "pageinfo-robot-index": "Entuk",
        "pageinfo-robot-noindex": "Ora entuk",
-       "pageinfo-views": "Cacahing delokan",
        "pageinfo-watchers": "Cacahé pangawas kaca",
        "pageinfo-few-watchers": "Kurang seka $1 {{PLURAL:$1|wong tilik|wong tilik}}",
        "pageinfo-redirects-name": "Jumlah pangalihan menyang kaca iki",
        "exif-urgency-low": "Cendhèk ($1)",
        "exif-urgency-high": "Dhuwur ($1)",
        "exif-urgency-other": "Prioritas sing ditetepaké panganggo ($1)",
-       "watchlistall2": "kabèh",
        "namespacesall": "kabèh",
        "monthsall": "kabèh",
        "confirmemail": "Konfirmasi alamat e-mail",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ngganti}} kanggotaan grup kanggo $3",
        "logentry-rights-autopromote": "$1 otomatis {{GENDER:$2|dipromosikne}} saka $4 nèng $5",
        "rightsnone": "(ora ana)",
+       "revdelete-summary": "ringkesan suntingan",
        "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:",
index d5e1877..9815cba 100644 (file)
        "passwordreset-emailsent-capture": "ქვემოთ ნაჩვენები პაროლის თავიდან დასაყენებელი წერილი გაიგზავნა.",
        "passwordreset-emailerror-capture": "ქვემოთ მოცემულია შექმნილი პაროლის დასაყენებელი წერილი, რომლის გაგზავნაც {{GENDER:$2|მომხმარებელთან}} ვერ მოხერხდა: $1 გამო",
        "changeemail": "ელ-ფოსტის მისამართის შეცვლა",
-       "changeemail-header": "ანგარიშის ელ-ფოსტის მისამართის შეცვლა",
        "changeemail-text": "შეავსეთ ეს ფორმა თქვენი ელ-ფოსტის მისამართის შესაცვლელად. თქვენი პაროლის შეყვანა დაგჭირდებათ ამ ცვლილების დასადასტურებლად.",
        "changeemail-no-info": "თქვენ ავტირიზებული უნდა იყოთ ამ გვერდთან უშუალო წვდომისთვის.",
        "changeemail-oldemail": "ელ-ფოსტის ამჟამინდელი მისამართი:",
        "changeemail-none": "(არაფერი)",
        "changeemail-password": "თქვენი პაროლი პროექტში {{SITENAME}}:",
        "changeemail-submit": "ელ-ფოსტის შეცვლა",
-       "changeemail-cancel": "გაუქმება",
        "resettokens-tokens": "ჟეტონები:",
        "resettokens-token-label": "$1 (მიმდინარე მნიშვნელობა: $2)",
        "bold_sample": "მუქი ტექსტი",
        "mergehistory-reason": "მიზეზი:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "გაერთიანებათა ჟურნალი",
-       "pagemerge-logentry": "გაერთიანდა [[$1]] და [[$2]] (ვერსიები $3-მდე)",
        "revertmerge": "შერწყმის გაუქმება",
        "mergelogpagetext": "ქვემოთ წარმოდგენილია ამ გვერდის ბოლო გაერთიანებათა სია",
        "history-title": "$1: ცვლილებათა ისტორია",
        "searchrelated": "მიბმული",
        "searchall": "ყველა",
        "showingresults": "ქვემოთ იხილეთ <b>$1</b>-მდე შედეგი დაწყებული #<b>$2</b>-იდან.",
-       "showingresultsheader": "{{PLURAL:$5|რეზულტატი '''$1'''  '''$3'''-დან|რეზულტატები '''$1 — $2''' -დან '''$3'''}}  '''$4'''-თვის",
        "search-nonefound": "მოთხოვნის შესაბამისობა არ არის ნაპოვნი.",
        "powersearch-legend": "გაფართოებული ძიება",
        "powersearch-ns": "ძიება სახელთა სივრცეებში:",
        "recentchanges": "ბოლო ცვლილებები",
        "recentchanges-legend": "ბოლო ცვლილებების პარამეტრები",
        "recentchanges-summary": "უთვალთვალეთ ვიკის ბოლო ცვლილებებს ამ გვერდზე.",
+       "recentchanges-noresult": "მითითებულ პერიოდსა და სახელთა სივრცეში ცვლილებები არ არის.",
        "recentchanges-feed-description": "ვიკის უახლესი ცვლილებების მეთვალყურეობა ამ არხში.",
        "recentchanges-label-newpage": "ამ რედაქტირებით შეიქმნა ახალი გვერდი",
        "recentchanges-label-minor": "ეს არის მცირე შესწორება",
        "statistics": "სტატისტიკა",
        "statistics-header-pages": "გვერდების სტატისტიკა",
        "statistics-header-edits": "რედაქციების სტატისტიკა",
-       "statistics-header-views": "გვერდის მონახულების სტატისტიკა",
        "statistics-header-users": "მომხმარებლის სტატისტიკა",
        "statistics-header-hooks": "სხვა სტატისტიკა",
        "statistics-articles": "სტატია",
        "statistics-files": "ატვირთული ფაილები",
        "statistics-edits": "გვერდის შესწორებები მას შემდეგ რაც შეიქმნა პროექტი {{SITENAME}}",
        "statistics-edits-average": "რედაქტირების საერთო რაოდენობა გვერდზე",
-       "statistics-views-total": "სულ ხილვა",
-       "statistics-views-total-desc": "სათვალავში არ მიიღება არარსებული და სამუშაო გვერდების გადახედვა",
-       "statistics-views-peredit": "შესწორებათა ხილვა",
        "statistics-users": "დარეგისტრირებული [[Special:ListUsers|მომხმარებლები]]",
        "statistics-users-active": "აქტიური მომხმარებლები",
        "statistics-users-active-desc": "მომხმარებლები, რომლებმაც განახორციელეს ქმედება {{PLURAL:$1|ბოლო $1 დღის|ბოლო $1 დღის}} განმავლობაში",
-       "statistics-mostpopular": "ყველზე ხშირად ხილვადი გვერდები",
        "pageswithprop": "გვერდები განსაზღვრული თვისებით",
        "pageswithprop-legend": "გვერდები განსაზღვრული თვისებით",
        "pageswithprop-text": "აქ მოცემულია გვერდები, რომელთაც ხელით განესაზღვრათ გარკვეული თვისებები.",
        "uncategorizedtemplates": "თარგები კატეგორიების გარეშე",
        "unusedcategories": "გამოუყენებელი კატეგორიები",
        "unusedimages": "გამოუყენებელი ფაილები",
-       "popularpages": "პოპულარული გვერდები",
        "wantedcategories": "მოთხოვნილი კატეგორიები",
        "wantedpages": "მოთხოვნილი გვერდები",
        "wantedpages-badtitle": "შეცდომითი სათაური მთხოვნაში  $1.",
        "listusers": "მომხმარებლების სია",
        "listusers-editsonly": "აჩვენთ მხოლოდ ის მომხმარებლები, რომლებსაც ერთი შესწორება აქვს გაკეთებული.",
        "listusers-creationsort": "დაალაგეთ შექმნის თარიღის მიხედვით.",
+       "listusers-desc": "კლების მიხედვით დალაგება",
        "usereditcount": "$1 რედაქტირება",
        "usercreated": "{{GENDER:$3|შექმნილია}} $2-ზე $1-ში",
        "newpages": "ახალი გვერდები",
        "booksources": "წიგნის წყაროები",
        "booksources-search-legend": "წიგნის წყაროს ძებნა",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "გადასვლა",
        "booksources-text": "ქვემოთ არის ვებ გვერდების ბმულების სია სადაც იყიდება ახალი და ნახმარი წიგნები, და შესაძლოა შეიცავდნენ დამატებით ინფორმაციას წიგნების შესახებ, რომლებსაც ეძებთ:",
        "booksources-invalid-isbn": "თქვენს მიერ მითითებული ISBN, შეცდომას შეიცავს.  შეამოწმეთ, თუ თავდაპირველი წყარო სწორადაა აკრეფილი.",
        "specialloguserlabel": "შემსრულებელი:",
        "wlheader-enotif": "ელ.ფოსტით შეტყობინება ჩართულია.",
        "wlheader-showupdated": "თქვენი ბოლო ვიზიტის შემდეგ შეცვლილი გვერდები, აღნიშნულია '''მუქად'''.",
        "wlnote": "ქვემოთ {{PLURAL:$1|ნაჩვენებია ბოლო ცვლილება|ნაჩვენებია ბოლო '''$1''' ცვლილება}} უკანასკნელი {{PLURAL:$2|საათის|'''$2''' საათის}} მანძილზე, $3, $4 მდგომარეობით.",
-       "wlshowlast": "აჩვენე ბოლო $1 საათის $2 დღის $3",
+       "wlshowlast": "აჩვენე ბოლო $1 საათის $2 დღის",
        "watchlist-options": "კონტროლის სიის პარამეტრები",
        "watching": "კონტროლებადი...",
        "unwatching": "არაკონტროლირებადი...",
        "pageinfo-robot-policy": "ინდექსაცია საძიებო რობოტებით",
        "pageinfo-robot-index": "დაშვებულია",
        "pageinfo-robot-noindex": "არ არის დაშვებული",
-       "pageinfo-views": "ხილვების რაოდენობა",
        "pageinfo-watchers": "გვერდის დამკვირვებელთა რაოდენობა",
        "pageinfo-few-watchers": "სულ მცირე $1 {{PLURAL:$1|დამკვირვებელი|დამკვირვებელი}}",
        "pageinfo-redirects-name": "გადამისამართებების რაოდენობა ამ გვერდზე",
        "exif-urgency-low": "დაბალი ($1)",
        "exif-urgency-high": "მაღალი ($1)",
        "exif-urgency-other": "მომხმარებლის მიერ განსაზღვრული პრიორიტეტი ($1)",
-       "watchlistall2": "ყველა",
        "namespacesall": "ყველა",
        "monthsall": "ყველა",
        "confirmemail": "ელ. ფოსტის მისამართის დადასტურება",
        "logentry-rights-rights-legacy": "მომხმარებელმა $1 {{GENDER:$2|შეცვალა}} ჯგუფის წევრობა $3-თვის",
        "logentry-rights-autopromote": "მომხმარებელი $1 ავტომატურად იქნა {{GENDER:$2|გადაყვანილი}} $4–დან $5–ში",
        "rightsnone": "(არცერთი)",
+       "revdelete-summary": "ცვლილებების აღწერა",
        "feedback-bugornote": "თუ თქვენ მზად ხართ დეტალურად აღწეროთ ტექნიკური პრობლემა, გთხოვთ, [$1 შეგვატყობინეთ შეცდომის შესახებ].\nწინააღმდეგ შემთხვევაში თქვენ შეგიძლიათ ისარგებლოთ ამ მარტივი ფორმით. თქვენი კომენტარი დაემატება  „[$3 $2]“ გვერდზე თქვენი მომხმარებლის სახელთან და გამოყენებულ ბრაუზერთან ერთად.",
        "feedback-subject": "თემა:",
        "feedback-message": "შეტყობინება:",
index f5237ee..805de26 100644 (file)
        "tog-underline": "Siltewdin' astın sız:",
        "tog-hideminor": "Aqırg'ı o'zgerislerden kishilerin jasır",
        "tog-extendwatchlist": "Baqlaw dizimin barlıq o'zgerislerdi ko'rsetetug'ın qılıp ken'eyt (tek aqırg'ıların emes)",
-       "tog-usenewrc": "Ken'eytilgen jaqındag'ı o'zgerislerdi qollan (JavaScript bolıwın talap etedi)",
+       "tog-usenewrc": "Jaqındag'ı o'zgerisler ha'm baqlaw dizimindegi o'zgerislerdi birlestiriw",
        "tog-numberheadings": "Atamalardı avtomat nomerle",
-       "tog-showtoolbar": "O'zgertiw a'sbapların ko'rset (JavaScript)",
-       "tog-editondblclick": "Eki ma'rte basıp o'zgertiw (JavaScript)",
-       "tog-editsectiononrightclick": "Bo'lim atamasın on' jaqqa basıp o'zgertiwdi qos (JavaScript)",
-       "tog-watchcreations": "Men jaratqan betlerdi baqlaw dizimime qos",
-       "tog-watchdefault": "Men o'zgeris kiritken betlerdi baqlaw dizimime qos",
-       "tog-watchmoves": "Men ko'shirgen betlerdi baqlaw dizimime qos",
-       "tog-watchdeletion": "Men o'shirgen betlerdi baqlaw dizimime qos",
+       "tog-showtoolbar": "O'zgertiw a'sbapların ko'rset",
+       "tog-editondblclick": "Betlerdi eki ma'rte basıp o'zgertiw",
+       "tog-editsectiononrightclick": "Bo'lim atamasın on' jaqqa basıp o'zgertiwdi qos",
+       "tog-watchcreations": "Men jaratqan betlerdi ha'm ju'klegen fayllardı baqlaw dizimime qos",
+       "tog-watchdefault": "Men o'zgeris kiritken betler ha'm fayllardı baqlaw dizimime qos",
+       "tog-watchmoves": "Men ko'shirgen betler ha'm fayllardı baqlaw dizimime qos",
+       "tog-watchdeletion": "Men o'shirgen betler ha'm fayllardı baqlaw dizimime qos",
        "tog-minordefault": "Defolt boyınsha barlıq o'zgerislerdi kishi dep esaplaw",
        "tog-previewontop": "O'zgertiw maydanınan aldın ko'rip shıg'ıw maydanın ko'rset",
        "tog-previewonfirst": "Birinshi o'zgertiwdi ko'rip shıq",
-       "tog-enotifwatchlistpages": "Baqlaw dizimimdegi bet o'zgertilgende mag'an xat jiber",
+       "tog-enotifwatchlistpages": "Baqlaw dizimimdegi bet yamasa fayl o'zgertilgende mag'an xat jiber",
        "tog-enotifusertalkpages": "Menin' sa'wbetim o'zgertilgende mag'an xat jiber",
-       "tog-enotifminoredits": "Kishi o'zgerisler haqqında da mag'an xat jiber",
+       "tog-enotifminoredits": "Bet ha'm fayllardag'ı kishi o'zgerisler haqqında da mag'an xat jiber",
        "tog-enotifrevealaddr": "Eskertiw xatlarında e-mail adresimdi ko'rset",
        "tog-shownumberswatching": "Baqlag'an paydalanıwshılar sanın ko'rset",
        "tog-fancysig": "İmzalardı wikitext dep qabıl etiw (avtomat siltewsiz)",
-       "tog-uselivepreview": "Janlı ko'rip shıg'ıwdı qollan (JavaScript) (Sınawda)",
+       "tog-uselivepreview": "Janlı ko'rip shıg'ıwdı qollan (Sınawda)",
        "tog-forceeditsummary": "O'zgertiw juwmag'ı bos qalg'anda mag'an eskert",
        "tog-watchlisthideown": "Baqlaw dizimindegi menin' o'zgertiwlerimdi jasır",
        "tog-watchlisthidebots": "Baqlaw dizimindegi bot o'zgertiwlerin jasır",
        "newwindow": "(jan'a aynada)",
        "cancel": "Biykar etiw",
        "moredotdotdot": "Ja'ne...",
-       "mypage": "Menin' betim",
-       "mytalk": "Menin' sa'wbetim",
+       "mypage": "Bet",
+       "mytalk": "Sa'wbet",
        "anontalk": "Usı IP sa'wbeti",
        "navigation": "Navigatsiya",
        "and": "&#32;ha'm",
        "jumptosearch": "izlew",
        "aboutsite": "{{SITENAME}} haqqında",
        "aboutpage": "Project:Haqqında",
-       "copyright": "Mag'lıwmat $1 boyınsha alıng'an.",
+       "copyright": "Mag'lıwmat $1 litsenziyası boyınsha alıng'an (eger basqa sha'rtler ko'rsetilmese).",
        "copyrightpage": "{{ns:project}}:Avtorlıq huquqları",
        "currentevents": "Ha'zirgi ha'diyseler",
        "currentevents-url": "Project:Ha'zirgi ha'diyseler",
        "viewsource": "Deregin ko'riw",
        "actionthrottled": "Ha'reket toqtatıldı",
        "actionthrottledtext": "Spamg'a qarsı gu'res esabında, bunday ha'reketti qısqa waqıtta dım ko'p ma'rte bejeriwin'iz sheklenedi, ha'mde siz usı limitten o'tip ketkensiz.\nBirneshe minuttan keyin qaytadan ha'reket qılıp ko'rin'.",
-       "protectedpagetext": "Bul bet o'zgertiwdin' aldın alıw ushın qulplang'an.",
+       "protectedpagetext": "Bul bet o'zgertiwdin' ha'm basqa ha'reketlerdin' aldın alıw ushın qulplang'an.",
        "viewsourcetext": "Bul bettin' deregin qarawın'ızg'a ha'mde ko'shirip alıwın'ızg'a boladı:",
-       "editinginterface": "'''Esletpe:''' Siz ishinde MediaWiki sistema xabarı bar bolg'an betti o'zgertip atırsız.\nBul bettin' o'zgeriwi basqa paydalanıwshılardın' sırtqı interfeisine ta'sir etedi.\nAudarıw ushın,  MediaWiki programmasın jersindiriw [//translatewiki.net/wiki/Main_Page?setlang=kaa translatewiki.net proyektisin] qarap shıg'ın'ız.",
+       "editinginterface": "'''Esletpe:''' Siz ishinde MediaWiki sistema xabarı bar bolg'an betti o'zgertip atırsız.\nBul bettin' o'zgeriwi basqa paydalanıwshılardın' sırtqı interfeysine ta'sir etedi.\nBul xabardın' awdarmasın qosıw yamasa o'zgertiw ushın,  MediaWiki programmasının' lokallastırıw [//translatewiki.net/wiki/Main_Page?setlang=kaa translatewiki.net proektinen] paydalanın'.",
        "namespaceprotected": "'''$1''' isimler ko'pligindegi betlerdi o'zgertiwge ruxsatın'ız joq.",
        "ns-specialprotected": "\"{{ns:special}}:\" isimler ko'pligindegi betler o'zgertilmeydi",
        "titleprotected": "Bul atamanı jaratıw [[User:$1|$1]] ta'repinen qorg'alg'an.\nKeltirilgen sebep: ''$2''.",
        "virus-unknownscanner": "belgisiz antivirus:",
-       "logouttext": "'''Siz endi sayttan shıqtın'ız.'''\n\nSiz {{SITENAME}} saytınan anonim halda paydalanıwın'ız mu'mkin.\nYamasa siz ja'ne ha'zirgi yaki basqa paydalanıwshı atı menen <span class='plainlinks'>[$1 qaytadan sistemag'a kiriwin'izge]</span> boladı.\nSonı este saqlan', ayrım betler sizin' brauzerin'izdin' keshi tazalanbag'anlıg'ı sebebli sistemada kirgenin'izdey ko'riniste dawam ettire beriwi mu'mkin.",
+       "logouttext": "'''Siz endi sayttan shıqtın'ız.'''\n\nSonı este saqlan', ayrım betler sizin' brauzerin'izdin' keshi tazalanbag'anlıg'ı sebebli sistemada kirgenin'izdey ko'riniste dawam ettire beriwi mu'mkin.",
        "yourname": "Paydalanıwshı atı:",
        "yourpassword": "Parol:",
        "yourpasswordagain": "Paroldi qayta kiritin':",
        "createaccount": "Akkaunt jarat",
        "gotaccount": "Akkauntın'ız barma? '''$1'''.",
        "gotaccountlink": "Kir",
-       "createaccountmail": "e-mail arqalı",
+       "createaccountmail": "Waqtınshalıq parol jaratıw ha'm onı ko'rsetilgen e-mail adresin jiber",
        "badretype": "Siz kiritken parol tuwra kelmedi.",
        "userexists": "Kiritken paydalanıwshı atı ba'nt. \nİltimas, basqa at saylan'.",
        "loginerror": "Kiriwde qatelik",
        "throttled-mailpassword": "Aqırg'ı {{PLURAL:$1|saat|$1 saat}} ishinde parol eskertiw xatı jiberildi.\nJaman jolda paydalanıwdın' aldın alıw ushın, ha'r {{PLURAL:$1|saat|$1 saat}} sayın tek g'ana bir parol eskertiw xatı jiberiledi.",
        "mailerror": "Xat jiberiwde qatelik juz berdi: $1",
        "acct_creation_throttle_hit": "Keshirersiz, siz aldın {{PLURAL:$1|1 akkaunt|$1 akkaunt}} jaratqansız.\nBunnan artıq jaratıw mu'mkinshiligin'iz joq.",
-       "emailauthenticated": "Sizin' e-mail adresin'iz tastıyqlang'an waqtı: $2, $3.",
+       "emailauthenticated": "Sizin' e-mail adresin'iz tastıyqlang'an waqtı: $3, $2.",
        "emailnotauthenticated": "E-mail adresin'iz ele tastıyıqlanbag'an.\nTo'mendegi mu'mkinshilikler ushın hesh xat jiberilmeydi.",
        "noemailprefs": "Usı mu'mkinshilikler islewi ushın e-mail adresin'izdi ko'rsetin'.",
        "emailconfirmlink": "E-mail adresin'izdi tastıyıqlan'",
        "invalidemailaddress": "E-mail adresin'iz nadurıs formatta bolg'anı ushın qabıl etile almaydı.\nDurıs formattag'ı adresin'izdi ko'rsetin', yamasa qatardı bos qaldırın'.",
        "accountcreated": "Akkaunt jaratıldı",
-       "accountcreatedtext": "$1 paydalanıwshısına akkaunt jaratıldı.",
+       "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) paydalanıwshısına akkaunt jaratıldı.",
        "createaccount-title": "{{SITENAME}} ushın akkaunt jaratıw",
        "createaccount-text": "Kimdir e-mail adresin'izdi paydalanıp {{SITENAME}} saytında ($4) \"$2\" atı menen, \"$3\" paroli menen akkaunt jaratqan.\nEndi saytqa kirip parolin'izdi o'zgertiwin'iz kerek.\n\nEger bul akkaunt nadurıs jaratılg'an bolsa, bul xabarg'a itibar bermesen'izde boladı.",
        "loginlanguagelabel": "Til: $1",
        "changepassword": "Paroldi o'zgertiw",
-       "resetpass_announce": "E-mailin'izge jiberilgen waqtınshalıq kod penen kirdin'iz.\nKiriw protsessin juwmaqlaw ushın jan'a parolin'izdi usı jerge kiritin':",
+       "resetpass_announce": "Kiriw protsessin juwmaqlaw ushın jan'a parol jaratıwın'ız kerek.",
        "resetpass_header": "Akkaunt parolin o'zgertiw",
        "oldpassword": "Aldıng'ı parol:",
        "newpassword": "Taza parol:",
        "retypenew": "Taza paroldi qayta kiritin':",
        "resetpass_submit": "Paroldi kirgizin'",
-       "changepassword-success": "Parolin'iz sa'tli o'zgertildi! Endi kirin'...",
+       "changepassword-success": "Parolin'iz sa'tli o'zgertildi!",
        "resetpass_forbidden": "Paroller o'zgertile almaydi",
        "resetpass-submit-loggedin": "Paroldi o'zgertiw",
        "resetpass-temp-password": "Waqtınshalıq parol:",
        "hiddencategories": "Bul bet {{PLURAL:$1|1 jasırın kategoriyasının'|$1 jasırın kategoriyalarının'}} ag'zası:",
        "nocreatetext": "{{SITENAME}} saytında taza betlerdi jaratıw sheklengen.\nArqag'a qaytıp bar betti o'zgertiwin'izge yamasa [[Special:UserLogin|kiriwin'izge / akkaunt jaratıwın'ızg'a]] boladı.",
        "nocreate-loggedin": "Taza betler jaratıwın'ızg'a ruxsatın'ız joq.",
-       "permissionserrors": "Ruxsatnamalar Qatelikleri",
+       "permissionserrors": "Ruxsatnama qateligi",
        "permissionserrorstext-withaction": "$2 ha'reketine ruxsatın'ız joq, to'mendegi {{PLURAL:$1|sebep|sebepler}} boyınsha:",
        "recreate-moveddeleted-warn": "'''Esletpe: Aldın o'shirilgen betti qayta jaratajaqsız.'''\n\nUsi betti qaytadan jaratıw tuwrılıg'ın oylap ko'rin'.\nQolaylıq ushın to'mende o'shiriw jurnalı keltirilgen:",
        "moveddeleted-notice": "Bul bet o'shirilgen.\nTo'mende mag'lıwmat ushın bettin' o'shiriw ha'm ko'shiriw jurnalı ko'rsetilgen.",
        "page_last": "aqırg'ı",
        "histlegend": "Tu'sindirme: salıstırajaq nusqaların'ızdı saylan' ha'mde Enter knopkasın yamasa to'mendegi knopkani basın'.<br />\nSha'rtli belgiler: (ha'z.) = ha'zirgi nusqasi menen parqı,\n(aqır.) = aldıng'ı nusqasi menen parqı, k = kishi o'zgeris",
        "history-fieldset-title": "Tariyxınan izlew",
-       "histfirst": "En' aldıng'ısı",
-       "histlast": "En' aqırg'ısı",
+       "histfirst": "en' aldıng'ısı",
+       "histlast": "en' aqırg'ısı",
        "historysize": "({{PLURAL:$1|1 bayt|$1 bayt}})",
        "historyempty": "(bos)",
        "history-feed-title": "Nusqa tariyxı",
        "rev-deleted-event": "(jurnal ha'reketi o'shirildi)",
        "rev-delundel": "ko'rsetiw/jasırıw",
        "revdelete-legend": "Ko'rinis sheklewlerin belgilew",
-       "revdelete-hide-text": "Nusqa tekstin jasır",
+       "revdelete-hide-text": "O'zgeris teksti",
        "revdelete-hide-image": "Fayl mag'lıwmatın jasır",
        "revdelete-hide-name": "Ha'reket ha'm onın' obyektin jasır",
-       "revdelete-hide-comment": "O'zgertiw kommentariyin jasır",
-       "revdelete-hide-user": "O'zgeriwshi atın/IP jasır",
+       "revdelete-hide-comment": "O'zgerisler ta'ripleri",
+       "revdelete-hide-user": "Paydalanıwshı atı/IP-adres",
        "revdelete-hide-restricted": "Mag'lıwmatlardı administratorlar menen basqalardan da jasırıw",
        "revdelete-suppress": "Mag'lıwmatlardı administratorlar menen basqalardan da jasırıw",
        "revdelete-unsuppress": "Qayta tiklengen nusqalardan sheklewlerdi alıp taslaw",
        "mergehistory-comment": "[[:$1]] degen [[:$2]] degenge biriktirildi: $3",
        "mergehistory-same-destination": "Derek ha'm aqırg'ı betler birdey bolmawı kerek",
        "mergelog": "Biriktiriw jurnalı",
-       "pagemerge-logentry": "[[$1]] degen [[$2]] degenge biriktirildi ($3 shekemgi nusqalar)",
        "revertmerge": "Ajırat",
        "mergelogpagetext": "To'mende bir bet tariyxının' basqa betke biriktiriliwinin' en' aqırg'ı dizimi keltirilgen.",
        "history-title": "\"$1\" betinin' nusqa tariyxı",
        "powersearch-ns": "Usı isimler ko'pliginen izlew:",
        "search-external": "Sırtqı izlewshi",
        "preferences": "Sazlawlar",
-       "mypreferences": "Menin' sazlawlarım",
+       "mypreferences": "Sazlawlar",
        "prefs-edits": "O'zgertiwler sanı:",
        "prefs-skin": "Sırtqı ko'rinis",
        "skin-preview": "Korip al",
        "servertime": "Server waqtı:",
        "guesstimezone": "Brauzerden alıp toltırıw",
        "allowemail": "Basqalardan xat qabıllawdı qos",
-       "prefs-searchoptions": "İzlew sazlawları",
+       "prefs-searchoptions": "İzlew",
        "prefs-namespaces": "İsimler ko'plikleri",
        "default": "defolt",
        "prefs-files": "Fayllar",
        "youremail": "E-mail:",
-       "username": "Paydalanıwshı atı:",
+       "username": "{{GENDER:$1|Paydalanıwshı atı}}:",
        "prefs-memberingroups": "Kirgen {{PLURAL:$1|toparın'ız|toparların'ız}}:",
        "yourrealname": "Haqıyqıy isimin'iz:",
        "yourlanguage": "Til:",
        "statistics": "Statistika",
        "statistics-header-pages": "Bet statistikası",
        "statistics-header-edits": "Statistikanı o'zgertiw",
-       "statistics-header-views": "Statistikanı ko'riw",
        "statistics-header-users": "Paydalanıwshı statistikası",
        "statistics-articles": "Maqalalar",
        "statistics-pages": "Betler",
        "statistics-files": "Aploud qılıng'an fayllar",
        "statistics-edits": "{{SITENAME}} ornatılg'anlı beri bettegi o'zgerisler sanı",
        "statistics-edits-average": "Ha'r bir betke ortasha kiritilgen o'zgerisler sanı",
-       "statistics-views-total": "Barlıq ko'riwler",
-       "statistics-views-peredit": "Ha'r bir o'zgeriske ko'riwler sanı",
        "statistics-users": "Registratsiyadan o'tken [[Special:ListUsers|paydalanıwshılar]]",
        "statistics-users-active": "Aktiv paydalanıwshılar",
-       "statistics-mostpopular": "En' ko'p ko'rilgen betler",
        "doubleredirects": "Qos burıwshılar",
        "double-redirect-fixer": "Qayta bag'ıtlawshılardı du'zetiwshi",
        "brokenredirects": "Hesh betke bag'ıtlamaytug'ın burıwshılar",
        "uncategorizedtemplates": "Kategoriyasız shablonlar",
        "unusedcategories": "Paydalanılmag'an kategoriyalar",
        "unusedimages": "Paydalanılmag'an fayllar",
-       "popularpages": "En' ko'p ko'rilgen betler",
        "wantedcategories": "Talap qılıng'an kategoriyalar",
        "wantedpages": "Talap qılıng'an betler",
        "wantedfiles": "Kerekli fayllar",
        "pager-older-n": "{{PLURAL:$1|eskilew 1|eskilew $1}}",
        "booksources": "Kitap derekleri",
        "booksources-search-legend": "Kitap haqqında informatsiya izlew",
-       "booksources-go": "O'tin'",
        "specialloguserlabel": "Paydalanıwshı:",
        "speciallogtitlelabel": "Atama:",
        "log": "Jurnallar",
        "watchlist-details": "Baqlaw dizimin'izde (sa'wbet betlerin esapqa almag'anda) {{PLURAL:$1|1 bet|$1 bet}} bar.",
        "wlheader-enotif": "E-mail arqalı eskertiw qosılg'an.",
        "wlnote": "To'mende aqırg'ı {{PLURAL:$2|saattag'ı|'''$2''' saattag'ı}} {{PLURAL:$1|aqırg'ı o'zgeris bar|aqırg'ı '''$1''' o'zgeris bar}}.",
-       "wlshowlast": "Aqırg'ı $1 saat, $2 ku'n, $3 ko'rset",
+       "wlshowlast": "Aqırg'ı $1 saat, $2 ku'n,  ko'rset",
        "watchlist-options": "Baqlaw diziminin' sazlawları",
        "watching": "Baqlaw...",
        "unwatching": "Baqlamaw...",
        "exif-imagelength": "Uzunlıg'ı",
        "exif-imagedescription": "Su'wret ataması",
        "exif-artist": "Avtor",
-       "watchlistall2": "ha'mmesin",
        "namespacesall": "ha'mmesi",
        "monthsall": "ha'mme",
        "confirmemail": "E-mail adresin tastıyıqlaw",
        "specialpages-group-users": "Paydalanıwshılar ha'm olardın' huqıqları",
        "revdelete-restricted": "administratorlarg'a qollanılg'an sheklewler",
        "revdelete-unrestricted": "administratorlardan alıp taslang'an sheklewler",
-       "rightsnone": "(hesh qanday)"
+       "rightsnone": "(hesh qanday)",
+       "revdelete-summary": "o'zgerislerdin' qısqasha mazmunı"
 }
index 256af44..48dbf78 100644 (file)
        "passwordreset-emailsent-capture": "Tirawt n uwennez n awal n uɛaddi tetwaceggaɛ, ẓeṛ-itt ddaw agi.",
        "passwordreset-emailerror-capture": "Tirawt n uwennez n awal n uɛaddi t-arewed, ẓeṛ-itt ddaw agi, lamaɛna aceggaɛ i {{GENDER:$2|umseqdac}} yefkad anezri : $1",
        "changeemail": "Beddel tansa n e-mail",
-       "changeemail-header": "Beddel tansa n e-mail n umiḍan",
        "changeemail-text": "Ččur tiferkit agi iwakken ad beddeleḍ tansa e-mail inek/inem. Ilaq ad sekcemeḍ awal ik/im n uɛaddi iwakken ad sergegeḍ abeddel agi.",
        "changeemail-no-info": "Ilaq ad qqeneḍ iwakken ad ẓṛeḍ asebter agi.",
        "changeemail-oldemail": "Tansa e-mail n tura :",
        "changeemail-none": "(ulac)",
        "changeemail-password": "Awal-ik/im n uɛaddi ɣef {{SITENAME}} :",
        "changeemail-submit": "Beddel tansa e-mail",
-       "changeemail-cancel": "Semmewet",
        "changeemail-throttled": "Tɛerdeḍ ad qqeneḍ aṭas tiqwal.\nIlaq ad rǧuḍ $1 uqbel ad ɛerdeḍ tikkelt nniḍen.",
        "resettokens": "Wennez tiddas",
        "resettokens-text": "D-agi tzemreḍ ad twennezeḍ tiddas i ɛemmeden ad kecmeḍ ar isefka usligen i qqenen ar amiḍan inek/inem.\n\nIlaq ad twennezeḍ tiddas ma tferqeḍ-ten s tuccḍa s umseqdac nniḍen neɣ ma amiḍan inek/inem yexṣer.",
        "mergehistory-same-destination": "Asebter n azar d usebter n userken ur zemren ara ad illin d yiwen",
        "mergehistory-reason": "Ayɣer",
        "mergelog": "Aɣmis n izdayen",
-       "pagemerge-logentry": "[[$1]] yezdukel s [[$2]] (lqem alama d $3)",
        "revertmerge": "Fru",
        "mergelogpagetext": "Attan tebdart n wesdukel umezruy usebtar deg win n usebtar nniḍen amaynut.",
        "history-title": "Tiẓṛi tiss sint umezruy n \"$1\"",
        "searchrelated": "ineqqes",
        "searchall": "akk",
        "showingresults": "Tamuli n {{PLURAL:$1|'''Yiwen''' wegmud|'''$1''' n yigmad}} seg  #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Agmud '''$1'''|Igmad '''$1–$2'''}} n '''$3''' i '''$4'''",
        "search-nonefound": "Ulac igmad i usuter agi.",
        "powersearch-legend": "Anadi amahlan",
        "powersearch-ns": "Nadi deg tallunin n isemawen",
        "randomincategory": "Asebtar s ugacur deg taggayt",
        "randomincategory-invalidcategory": "« $1 » mačči d-isem n taggayt yeɣblen.",
        "randomincategory-nopages": "Ulac asebtar deg [[:Category:$1]].",
-       "randomincategory-selectcategory": "Ddem asebtar s ugacur deg taggayt : $1 $2.",
-       "randomincategory-selectcategory-submit": "Ruḥ",
        "randomredirect": "Asemmimeḍ menwala",
        "randomredirect-nopages": "Ulac asebter n alsanamad deg tallunt n isemawen « $1 ».",
        "statistics": "Tisnaddanin",
        "statistics-header-pages": "Tisnaddanin n isebtar",
        "statistics-header-edits": "Tisnaddanin n ibeddilen",
-       "statistics-header-views": "Tisnaddanin n iskanen",
        "statistics-header-users": "Tisnaddanin n wemseqdac",
        "statistics-header-hooks": "Tisnaddanin nniḍen",
        "statistics-articles": "Isebtar n ugbur",
        "statistics-files": "Ifuyla yettwaznen",
        "statistics-edits": "Ibeddilen n isebtar seg aserkeb n {{SITENAME}}",
        "statistics-edits-average": "Amḍan allal n ibeddilen sɣur asebter",
-       "statistics-views-total": "Iskanen",
-       "statistics-views-total-desc": "Timuɣliwin n isebtar ur llan ara dɣa d isebtar usligen ur sseddant ara",
-       "statistics-views-peredit": "Tizra s ubeddel",
        "statistics-users": "[[Special:ListUsers|Iseqdacen]] i siggezen",
        "statistics-users-active": "Iseqdacen urmiden",
        "statistics-users-active-desc": "Iseqdacen yesɛan xersum yiwet tigawt seg {{PLURAL:$1|ass agi aneggaru|$1 ussan agi ineggura}}",
-       "statistics-mostpopular": "isebtar mmeẓren aṭṭas",
        "pageswithprop": "Isebtar s ayla n usebtar",
        "pageswithprop-legend": "Isebtar s ayla n usebtar",
        "pageswithprop-text": "Asebtar agi, yefked umuɣ n isebtar yeseqdacen ayla n usebtar amaẓlay",
        "uncategorizedtemplates": "Talɣiwin mebla taggayt",
        "unusedcategories": "Taggayin ur nettwaseqdac ara",
        "unusedimages": "Ifayluwin ur nettwaseqdac ara",
-       "popularpages": "Isebtar iɣerfanen",
        "wantedcategories": "Taggayin mmebɣant",
        "wantedpages": "Isebtar mmebɣan",
        "wantedpages-badtitle": "Azwel ur yeɣbel ara deg igmad : $1",
        "querypage-disabled": "Asebter uslig agi yensa , taɣzint : timellal is.",
        "booksources": "Iɣbula n yidlisen",
        "booksources-search-legend": "Nadi ɣef iɣbula n yidlisen",
-       "booksources-go": "Ruḥ",
        "booksources-text": "Deg ukessar, yella wumuɣ n yizdayen iberraniyen izzenzen idlisen (imaynuten akk d weqdimen), yernu ahat sɛan kter talɣut ɣef idlisen i tettnadiḍ fell-asen:",
        "booksources-invalid-isbn": "ISBN agi ur yeɣbel ara ; selken ma ulac anezri deg-es.",
        "specialloguserlabel": "Ameskar :",
        "wlheader-enotif": "Talɣut s email yessermed.",
        "wlheader-showupdated": "Isebtar ttubeddlen segwasmi tkecmeḍ tikelt taneggarut ttbanen-d s uḍris '''aberbuz'''.",
        "wlnote": "Ddaw agi  {{PLURAL:$1|yella abeddel aneggaru|llan '''$1''' ibeddilen ineggura}} n {{PLURAL:$2|usrag aneggaru|'''$2''' isragen ineggura}}, seg $3 af $4.",
-       "wlshowlast": "Ssken $1 n swayeɛ $2 n wussan neɣ $3 ineggura",
+       "wlshowlast": "Ssken $1 n swayeɛ $2 n wussan neɣ  ineggura",
        "watchlist-options": "Tifranin n umuɣ n uɛessi",
        "watching": "Ad iɛass...",
        "unwatching": "Ad ifukk aɛessi...",
        "import": "Ssekcem isebtar",
        "importinterwiki": "Assekcem n transwiki",
        "import-interwiki-text": "Fren yiwen wiki d yiwen azwel n usebtar ad ketreḍ.\nIzemzen n ileqman d isemawen n ittekkiyen ad qqimen.\nAkkw tigawin n taktert ager-wiki ad illint deg [[Special:Log/import|umezruy n tiketrin]].",
-       "import-interwiki-source": "Wiki d usebtar n taɣbalut",
        "import-interwiki-history": "Xdem alsaru n akk tisiwal umezruy n usebter-agi",
        "import-interwiki-templates": "Sekcem akkw talɣiwin",
        "import-interwiki-submit": "Ssekcem",
        "pageinfo-robot-policy": "Asbeddi sɣur iṛubuten",
        "pageinfo-robot-index": "Tessireg",
        "pageinfo-robot-noindex": "Tegdel",
-       "pageinfo-views": "Amḍan n timuɣliwin",
        "pageinfo-watchers": "Amḍan n imttekkiyen yesɛan asebter agi deg umuɣ nsen n uɛassi",
        "pageinfo-few-watchers": "Kkes-as $1 {{PLURAL:$1|amanay|imanayen}}",
        "pageinfo-redirects-name": "Amḍan n izdayen ɣer asebtar agi",
        "exif-urgency-low": "Anammum ($1)",
        "exif-urgency-high": "Afella ($1)",
        "exif-urgency-other": "Lḥir id yefka amseqdac ($1)",
-       "watchlistall2": "akk",
        "namespacesall": "akk",
        "monthsall": "akk",
        "confirmemail": "Sentem tansa n e-mail",
index 29f6f2e..e98a76e 100644 (file)
        "mergehistory-same-destination": "Япэрейуэ щыт напэкӀуэцӀымрэ напэкӀуэцӀ псоуэ щытымрэ зэщхьэщыкӀын хуейщ",
        "mergehistory-reason": "Зытеухуар:",
        "mergelog": "Зэхэгъэхьэгъуэхэм я тхылъ",
-       "pagemerge-logentry": "Зы щӀащ [[$1]]-рэ [[$2]]-рэ (версиэхэр $3 нэгъунэ)",
        "revertmerge": "Зыхэдзын",
        "mergelogpagetext": "ИщӀагъымкӀэ зэхэгъэхьэгъуэхэм я тхыдэм и тхылъыр напэкӀуэцӀым еуэ гъэлъэгъуащ",
        "history-title": "\"$1\" и зэхъуэкIыныгъэм и тхыдэр",
        "pager-older-n": "{{PLURAL:$1|нэхъ жьыуэ 1|нэхъ жьыху $1}}",
        "booksources": "Тхылъ къыздихар",
        "booksources-search-legend": "Тхылъым и хъыбар лъыхъуэн",
-       "booksources-go": "Къэгъуэтын",
        "log": "Тхылъхэр",
        "allpages": "НапэкIуэцIухъуар",
        "prevpage": "Япэреуэ кӀуа напэкӀуэцӀыр ($1)",
        "watchthispage": "НапэкӀуэцӀым кӀэлъыплъын",
        "unwatch": "КӀэлъымыплъын",
        "watchlist-details": "Уи щӀэлъыплъыгъуэ тхылъым $1 {{PLURAL:$1|напэкӀуэцӀ|напэкӀуэцӀу}}, напэкӀуэцӀ тепсэлъыхьыгъуэхэр хэмыту",
-       "wlshowlast": "Гъэлъэгъуэн кӀуа $1 сэхьэтым $2 махуэ $3",
+       "wlshowlast": "Гъэлъэгъуэн кӀуа $1 сэхьэтым $2 махуэ",
        "watchlist-options": "ЩӀэлъыплъыгъуэхэм я тхылъ зэгъэзэхуэгъуэ",
        "watching": "СызыкӀэлъыплъ тхылъым хэлъхьэн...",
        "unwatching": "СызыкӀэлъыплъ тхылъым хэхын",
        "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",
-       "watchlistall2": "псори",
        "namespacesall": "псори",
        "monthsall": "псори",
        "imgmultipageprev": "япэрыт напэкӀуэцӀыр",
        "version-specialpages": "Лэжыгъэ напэкӀуэцӀ",
        "specialpages": "СпецнапэкӀуэцӀхэр",
        "revdelete-restricted": "теубыдыгъуэхэр тхьэмадэхэм ятохуэ",
-       "revdelete-unrestricted": "теубыдыгъуэхэр тхьэмадэхэм ятеха"
+       "revdelete-unrestricted": "теубыдыгъуэхэр тхьэмадэхэм ятеха",
+       "revdelete-summary": "зэхъуэкӀыгъуэхэм я тепсэлъыхьыгъуэ"
 }
index 6e514a9..91d64ad 100644 (file)
        "qbmyoptions": "Mikânda ya munu",
        "faq": "Kyuvu ná mvutu",
        "faqpage": "Lukanu:Kyuvu ná mvutu",
-       "vector-action-delete": "Kufwa",
-       "vector-action-move": "Nata",
-       "vector-action-protect": "Keba",
-       "vector-view-create": "Tunga",
-       "vector-view-edit": "Soba",
-       "vector-view-history": "Tala bansoba",
-       "vector-view-view": "Tânga",
        "errorpagetitle": "Fôti",
        "returnto": "Vutuka na $1",
        "tagline": "Katuka {{SITENAME}}",
        "newpage": "Mukânda ya yimpa",
        "talkpage": "Zônzana mukânda yayi",
        "talkpagelinktext": "Disolo",
-       "postcomment": "Ndâmbu ya yimpa",
        "talk": "Disolo",
        "views": "Bantadilu",
        "toolbox": "Bisadilu",
        "internalerror": "Fôti na kati",
        "internalerror_info": "Fôti na kati: $1",
        "filenotfound": "Fisyé \"$1\" me kutama ve.",
-       "fileexistserror": "Yawu lênda kusonika ve fisyé \"$1\": Fisyé kele.",
        "cannotdelete": "Mukânda to fisyé \"$1\" me lênda kufwa ve. Muntu ya nkaka kufwaka yawu?",
        "cannotdelete-title": "Mukânda \"$1\" lênda kufwa ve",
        "badtitle": "Nkûmbu ya mbote ve",
        "resetpass-submit-cancel": "Sala ve",
        "changeemail-none": "(nkatu)",
        "changeemail-password": "Mpovo ya nge ya kukota {{SITENAME}}:",
-       "changeemail-cancel": "Sala ve",
        "bold_sample": "Kisono ya vimbu",
        "bold_tip": "Kisono ya vimbu",
        "italic_sample": "Kisono ya nswalu",
        "permissionserrors": "Fôti ya luve",
        "permissionserrorstext": "Nge kele na luve ya kusala yayi ve, samu na:",
        "permissionserrorstext-withaction": "Nge kele na luve ve ku $2, samu na:",
-       "postedit-confirmation": "Nsoba ya nge me lundama.",
+       "postedit-confirmation-saved": "Nsoba ya nge me lundama.",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "page_first": "ntete",
        "searchmenu-new": "'''Tunga mukânda \"[[:$1]]\" na wiki yayi!'''",
        "searchprofile-everything": "Nyonso",
        "searchprofile-articles-tooltip": "Sosa na $1",
-       "searchprofile-project-tooltip": "Sosa na $1",
        "search-result-size": "$1 ({{PLURAL:$2|mpovo 1|bampovo $2}})",
        "search-section": "(kibuku $1)",
        "search-interwiki-default": "Bandându $1:",
        "newpages": "Mikânda ya yimpa",
        "move": "Nata",
        "allpages": "Mikânda nyonso",
-       "alphaindexline": "$1 tî $2",
        "allarticles": "Mikânda nyonso",
        "categories": "Mitîndu",
        "watch": "Keba",
        "tooltip-ca-nstab-image": "Tala mukânda ya fisyé",
        "tooltip-save": "Lunda bansoba ya nge",
        "tooltip-undo": "\"Vutula\" ke vutula nsoba yayi mpe yawu ke monisa lumoni ya kusoba. Nge lênda sonika kikuma ya mvutula.",
-       "watchlistall2": "nyonso",
        "namespacesall": "nyonso",
        "monthsall": "nyonso",
        "table_pager_next": "Mukânda ya kulânda",
index f9976fa..00959b6 100644 (file)
        "passwordreset": "پاسورڈو ری سیٹ کورے",
        "passwordreset-username": "ممبارو نم",
        "changeemail-none": "(نو)",
-       "changeemail-cancel": "کھینسل",
        "bold_sample": "بوسک متن",
        "bold_tip": "بولڈ ٹیکسٹ",
        "italic_sample": "کولی/اٹالک نیویشیرو",
        "search-interwiki-more": "(مزید)",
        "searchrelated": "متعلقہ",
        "searchall": "کھل",
-       "showingresultsheader": "{{PLURAL:$5|نتیجہ'''$1''' of '''$3'''|نتیجہ'''$1 - $2''' of '''$3'''}} بچے'''$4'''",
        "search-nonefound": "استفسارو مطابقا نتائج ملاو نو ھونی.",
        "powersearch-legend": "ایڈوانس سرچ",
        "powersearch-ns": "جائے ناما تلاش:",
        "lonelypages": "څھوعو صفحات",
        "unusedcategories": "غیر استعمال شدہ زمرہ جات",
        "unusedimages": "غیر استعمال شدہ فائل",
-       "popularpages": "مقبول صفحات",
        "wantedcategories": "طلب شدہ زمرہ جات",
        "wantedpages": "درخواست شدہ مضامین",
        "wantedfiles": "درخواست شدہ مضامین",
        "pager-older-n": "{{PLURAL:$1|قدیم1|قدیم ترین $1}}",
        "booksources": "کتابی وسائل",
        "booksources-search-legend": "کتابی وسایلان تلاش",
-       "booksources-go": "Go/بوغے",
        "specialloguserlabel": "یوزر",
        "speciallogtitlelabel": "عنوان:",
        "log": "نوشتہ جات",
        "watchthispage": "ھیہ صفحو تان نظرا لاکھے",
        "unwatch": "زیرنظرمنسوخ",
        "watchlist-details": " تہ زیرِنظرفہرستا {{PLURAL:$1|$1 صفحہ شیر|$1 صفحات شینی}}، ھیارا تبادلۂ خیالو صفحاتن تعداد شامل نیکی.",
-       "wlshowlast": "پشاوے آخری $1 گھنٹو $2 آنوسو $3",
+       "wlshowlast": "پشاوے آخری $1 گھنٹو $2 آنوسو",
        "watchlist-options": "واچ لسٹ آپشن",
        "watching": "زیر نظر",
        "unwatching": "منسوخ",
        "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-dc-date": "تاریخ",
-       "watchlistall2": "سف",
        "namespacesall": "تھمامو",
        "monthsall": "سف",
        "confirm_purge_button": "OK/ٹھیک شیر",
index 4b2bf84..f422a47 100644 (file)
        "search-relatedarticle": "alaqedar",
        "searchrelated": "alaqedar",
        "searchall": "pêro",
-       "showingresultsheader": "'''$4''' rê {{PLURAL:$5|'''$3''' netice ra '''$1'''i|'''$1 - $2''' miyan de '''$3''' netice}}",
        "search-nonefound": "Neticeo ke ebe perşi zubini cêno çino.",
        "powersearch-legend": "Cıcêraiso hira",
        "powersearch-ns": "Caunê namun de cıcêre:",
        "statistics": "İstatistiki",
        "statistics-header-pages": "İstatistikê pele",
        "statistics-header-edits": "İstatistikê vurnaene",
-       "statistics-header-views": "İstatistikê asaene",
        "statistics-header-users": "İstatistikê karberi",
        "statistics-header-hooks": "İstatistikê bini",
        "statistics-articles": "Pelê tedeesteu",
        "pager-older-n": "{{PLURAL:$1|1 khanêr|$1 khanêri}}",
        "booksources": "Çımê kıtabun",
        "booksources-search-legend": "Serba çımeunê kıtabu cıfeteliye",
-       "booksources-go": "So",
        "specialloguserlabel": "Kerdoğ:",
        "speciallogtitlelabel": "Sernuste:",
        "log": "Qeydi",
        "watchthispage": "Na pele de şêr ke",
        "unwatch": "Şêr meke",
        "watchlist-details": "Pelunê hurênaişi ra qêri {{PLURAL:$1|$1 pele lista şêrkerdişi dera|$1 peli lista şêrkerdişi derê}}.",
-       "wlshowlast": "$1 saetunê $2 rozunê peyênu bıasne $3",
+       "wlshowlast": "$1 saetunê $2 rozunê peyênu bıasne",
        "watchlist-options": "Alternatifê lista şêrkerdene",
        "watching": "Şêr ke…",
        "unwatching": "Şêr meke…",
        "exif-imagewidth": "Verındêni",
        "exif-imagelength": "Berzêni",
        "exif-meteringmode-255": "Bin",
-       "watchlistall2": "pêro",
        "namespacesall": "pêro",
        "monthsall": "pêro",
        "confirm_purge_button": "Temam",
        "tag-filter": "Parzünê [[Special:Tags|etiket]]i:",
        "compare-page1": "Pele 1",
        "compare-page2": "Pele 2",
-       "rightsnone": "(qet jü)"
+       "rightsnone": "(qet jü)",
+       "revdelete-summary": "xulasa vurnaene"
 }
index e70e9c8..ac50fb7 100644 (file)
        "mergehistory-autocomment": "[[:$1]] دەگەن [[:$2]] دەگەنگە بىرىكتىرىلدى",
        "mergehistory-comment": "[[:$1]] دەگەن [[:$2]] دەگەنگە بىرىكتىرىلدى: $3",
        "mergelog": "بىرىكتىرۋ جۋرنالى",
-       "pagemerge-logentry": "[[$1]] دەگەن [[$2]] دەگەنگە بىرىكتىرىلدى ($3 دەيىنگى تۇزەتۋلەرى)",
        "revertmerge": "بىرىكتىرۋدى بولدىرماۋ",
        "mergelogpagetext": "تومەندە ٴبىر بەتتىڭ تارىيحى وزگە بەتكە بىرىكتىرۋ ەڭ سوڭعى ٴتىزىمى كەلتىرىلەدى.",
        "history-title": "«$1» — تۇزەتۋ تارىيحى",
        "randomredirect-nopages": "بۇل ەسىم اياسىندا ەش ايداعىش جوق.",
        "statistics": "ساناق",
        "statistics-header-users": "قاتىسۋشى ساناعى",
-       "statistics-mostpopular": "ەڭ كوپ قارالعان بەتتەر",
        "doubleredirects": "شىنجىرلى ايداعىشتار",
        "doubleredirectstext": "بۇل بەتتە باسقا ايداتۋ بەتتەرگە سىلتەيتىن بەتتەر تىزىمدەلىنەدى. ٴاربىر جولاقتا ٴبىرىنشى جانە ەكىنشى ايداعىشقا سىلتەمەلەر بار, سونىمەن بىرگە ەكىنشى ايداعىش نىساناسى بار, ادەتتە بۇل ٴبىرىنشى ايداعىش باعىتتايتىن «ناقتى» نىسانا بەت اتاۋى بولۋى كەرەك.",
        "brokenredirects": "ەش بەتكە كەلتىرمەيتىن ايداعىشتار",
        "uncategorizedtemplates": "ساناتسىز ۇلگىلەر",
        "unusedcategories": "پايدالانىلماعان ساناتتار",
        "unusedimages": "پايدالانىلماعان فايلدار",
-       "popularpages": "ەڭ كوپ قارالعان بەتتەر",
        "wantedcategories": "باستالماعان ساناتتار",
        "wantedpages": "باستالماعان بەتتەر",
        "mostlinked": "ەڭ كوپ سىلتەلگەن بەتتەر",
        "suppress": "شەتتەتۋ",
        "booksources": "كىتاپ قاينارلارى",
        "booksources-search-legend": "كىتاپ قاينارلارىن ىزدەۋ",
-       "booksources-go": "ٴوتۋ",
        "booksources-text": "تومەندە جاڭا جانە قولدانعان كىتاپتار ساتاتىن توراپتارىنىڭ سىلتەمەلەرى تىزىمدەلگەن. بۇل توراپتاردا ىزدەلگەن كىتاپتار تۋرالى بىلايعى اقپارات بولۋعا مۇمكىن.",
        "specialloguserlabel": "قاتىسۋشى:",
        "speciallogtitlelabel": "تاقىرىپ اتى:",
        "wlheader-enotif": "ەسكەرتۋ حات جىبەرۋى قوسىلعان.",
        "wlheader-showupdated": "سوڭعى كەلىپ-كەتۋىڭىزدەن بەرى وزگەرتىلگەن بەتتەردى '''جۋان''' قارىپىمەن كورسەت",
        "wlnote": "تومەندە سوڭعى {{PLURAL:$2|ساعاتتا|'''$2''' ساعاتتا}} بولعان, {{PLURAL:$1|جۋىقتاعى وزگەرىس|جۋىقتاعى '''$1''' وزگەرىس}} كورسەتىلەدى.",
-       "wlshowlast": "سوڭعى $1 ساعاتتاعى, $2 كۇندەگى, $3 بولعان وزگەرىستى كورسەتۋ",
+       "wlshowlast": "سوڭعى $1 ساعاتتاعى, $2 كۇندەگى,  بولعان وزگەرىستى كورسەتۋ",
        "watching": "باقىلاۋدا…",
        "unwatching": "باقىلاماۋدا…",
        "enotif_reset": "بارلىق بەت كەلىپ-كەتىلدى دەپ بەلگىلە",
        "exif-gpsspeed-n": "knot",
        "exif-gpsdirection-t": "شىن باعىت",
        "exif-gpsdirection-m": "ماگنىيتتى باعىت",
-       "watchlistall2": "بارلىق",
        "namespacesall": "بارلىعى",
        "monthsall": "بارلىعى",
        "confirmemail": "ە-پوشتا مەكەنجايىن قۇپتاۋ",
        "revdelete-restricted": "اكىمشىلەرگە تىيىمدار قولدادى",
        "revdelete-unrestricted": "اكىمشىلەردەن تىيىمداردى الاستادى",
        "rightsnone": "(ەشقانداي)",
+       "revdelete-summary": "وڭدەمەنىڭ قىسقاشا مازمۇنداماسى",
        "expandtemplates": "ۇلگىلەردى ۇلعايتۋ",
        "expand_templates_intro": "وسى قۇرال ارنايى بەتى الدەبىر ٴماتىندى الادى دا,\nبۇنىڭ ىشىندەگى بارلىق كىرىكتەلگەن ۇلگىلەردى مەيلىنشە ۇلعايتادى.\nمىنا <nowiki>{{#language:...}} سىيياقتى جوڭدەتۋ فۋنكتسىييالارىن دا, جانە {{CURRENTDAY}}\nسىيياقتى اينامالىلارىن دا ۇلعايتادى (ناقتى ايتقاندا, قوس قابات ساداق جاقشالار اراسىنداعى بارلىعىن).\nبۇنى ٴوز MediaWiki باعدارلاماسىنان قاتىستى جوڭدەتۋ ساتىن شاقىرىپ ىستەلىنەدى.",
        "expand_templates_title": "ٴماتىن ارالىق اتاۋى ({{FULLPAGENAME}} ت.ب. بەتتەر ٴۇشىن):",
index 34df836..b37caa4 100644 (file)
        "passwordreset-emailsent-capture": "Құпия сөзді өзгерту электронды пошта арқылы жөнелтілді, ол төменде көрсетілген.",
        "passwordreset-emailerror-capture": "Жазылған ескертпе-хат төменде көрсетілген, оның жөнелтілмеу себебі: $1",
        "changeemail": "Е-пошта мекен-жайын өзгерту",
-       "changeemail-header": "Е-пошта мекен-жайының өзгертілуі",
        "changeemail-text": "Е-поштаның мекен-жайын өзгерту үшін мына пішінді толтырыңыз. Өзгертулерді растау үшін құпия сөздіңізді енгізу керек.",
        "changeemail-no-info": "Бұл бетке тікелей ену үшін жүйеге кіруіңіз керек.",
        "changeemail-oldemail": "Е-поштаның қазіргі уақыттағы мекен-жайы:",
        "changeemail-none": "(ешкім)",
        "changeemail-password": "{{SITENAME}} жобасындағы құпия сөзіңіз:",
        "changeemail-submit": "Е-поштаны өзгерту",
-       "changeemail-cancel": "Болдырмау",
        "changeemail-throttled": "Сіз жақында кіруге тым көп әрекет жасадыңыз.\nҚайта байқап көру үшін $1 уақыт күте тұрыңыз.",
        "bold_sample": "Жуан мәтін",
        "bold_tip": "Жуан мәтін",
        "clearyourcache": "<strong>Ескерту:</strong> Сақтағаннан кейін өзгерістерді көру үшін броузеріңіздің бүркемесін (кэшін) тазарту керек болуы мүмкін. \n* <strong>Firefox / Safari:</strong> <em>Қайта жүктеуді</em> нұқығанда <em>Shift</em> басып тұрыңыз немесе <em>Ctrl-F5</em> не <em>Ctrl-Shift-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>Жаңарту</em> батырмасын нұқығанда <em>Ctrl</em> басып тұрыңыз немесе <em>Ctrl-F5</em> басыңыз;  не <em>F5</em> басыңыз \n* <strong>Opera:</strong> <em>Құралдар → Бапталымдар</em> дегеннен бүркемесін тазарту керек.",
        "usercssyoucanpreview": "<strong>Кеңес:</strong> Жаңа CSS файлыңызды сақтау алдында «{{int:showpreview}}» батырмасын қолданып сынақтаңыз.",
        "userjsyoucanpreview": "<strong>Кеңес:</strong> Жаңа JavaScript файлыңызды сақтау алдында «{{int:showpreview}}» батырмасын қолданып сынақтаңыз.",
-       "usercsspreview": "</strong>Бұл тек қатысушы CSS файлыңызды қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!</strong>",
+       "usercsspreview": "<strong>Бұл тек қатысушы CSS файлыңызды қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!</strong>",
        "userjspreview": "<strong>Мынау JavaScript қатысушы бағдарламасын тынау/қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!</strong>",
        "sitecsspreview": "<strong>Мынау тек бұл CSS файлын қарап шығуыңыз екенін ұмытпаңыз, ол әлі сақталған жоқ!</strong>",
        "sitejspreview": "<strong>Мынау тек бұл JavaScript кодын алдын-ала қарап алу екенін ұмытпаңыз, ол әлі сақталған жоқ!</strong>",
        "userinvalidcssjstitle": "</strong>Ескерту:</strong> Осы арада «$1» деген еш мәнер жоқ.\nҚалыпты .css және .js беттерінің атауына кіші әріп қолданыңыз, мысалы {{ns:user}}:Foo/vector.css дегенді {{ns:user}}:Foo/Vector.css дегенмен салыстырып қараңыз.",
        "updated": "(Жаңартылған)",
        "note": "'''Ескерту:'''",
-       "previewnote": "</strong>Бұл тек қарап шығу екенін ұмытпаңыз.</strong> \nӨзгертулеріңіз әлі сақталған жоқ!",
+       "previewnote": "<strong>Бұл тек қарап шығу екенін ұмытпаңыз.</strong> \nӨзгертулеріңіз әлі сақталған жоқ!",
        "continue-editing": "Өңдеу аумағына өту",
        "previewconflict": "Бұл қарап шығу беті жоғарғы кірістіру орнындағы мәтінді қамтиды да және сақталғандағы өңді көрсетпек.",
        "session_fail_preview": "<strong>Кешіріңіз! Сессия деректері жоғалуы салдарынан өңдемеңізді бітіре алмаймыз.</strong>\nҚайта байқап көріңіз. \nЕгер бұл әлі істелмесе [[Special:UserLogout|шығуды]] және қайта кіруді байқап көріңіз.",
        "mergehistory-same-destination": "Бастапқы және мақсатты беттер бірдей болмауы керек",
        "mergehistory-reason": "Себебі:",
        "mergelog": "Біріктіру журналы",
-       "pagemerge-logentry": "[[$1]] деген [[$2]] дегенге біріктірілді ($3 дейінгі түзетулері)",
        "revertmerge": "Біріктіруді болдырмау",
        "mergelogpagetext": "Төменде бір беттің тарихы өзге бетке біріктіру ең соңғы тізімі келтіріледі.",
        "history-title": "«$1» дегеннің өңделу тарихы",
        "searchrelated": "қатысты",
        "searchall": "барлық",
        "showingresults": "Төменде нөмір '''$2''' орнынан бастап барынша '''$1''' нәтиже көрсетіледі.",
-       "showingresultsheader": "«<strong>$4</strong>» сұранысына {{PLURAL:$5|тек <strong>$1</strong> нәтиже табылды|табылған <strong>$3</strong> нәтиженің <strong>$1 - $2</strong> аралығы көрсетілген}}",
        "search-nonefound": "Сұрауға сәйкес нәтижелер табылмады.",
        "powersearch-legend": "Кеңейтілген іздеу",
        "powersearch-ns": "Атау кеңістіктері бойынша іздеу:",
        "statistics": "Санақ",
        "statistics-header-pages": "Беттер статистикасы",
        "statistics-header-edits": "Өңдеулер статистикасы",
-       "statistics-header-views": "Қаралу статистикасы",
        "statistics-header-users": "Қатысушы статистикасы",
        "statistics-header-hooks": "Басқа статистикалар",
        "statistics-articles": "Мақалалар саны",
        "statistics-files": "Жүктелген файлдар",
        "statistics-edits": "{{SITENAME}} құрылғанан бергі бет өңдеулері",
        "statistics-edits-average": "Әр бетке шаққандағы өңдеулердің орташа саны",
-       "statistics-views-total": "Барлық қаралулар",
-       "statistics-views-total-desc": "Қаралуларға бар болмаған беттер және арнайы беттер кірмейді",
-       "statistics-views-peredit": "Өңдеуге шаққанда қаралулар",
        "statistics-users": "Тіркелген қатысушылар [[Special:ListUsers|(тізім)]]",
        "statistics-users-active": "Белсенді қатысушылар",
        "statistics-users-active-desc": "Соңғы {{PLURAL:$1|күнде|$1 күнде}} қандай да бір іс-әрекет жасаған қатысушылар",
-       "statistics-mostpopular": "Ең көп қаралған беттер",
        "pageswithprop": "Беттер бет сипатымен",
        "pageswithprop-legend": "Беттер бет сипатымен",
        "pageswithprop-prop": "Меншік атауы:",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|мүше|мүше}}",
        "nrevisions": "$1 {{PLURAL:$1|түзету|түзету}}",
        "nviews": "$1 {{PLURAL:$1|қаралу|қаралу}}",
-       "nimagelinks": "$1 {{PLURAL:$1|беÑ\82Ñ\96нде|беÑ\82Ñ\82еÑ\80Ñ\96нде}} қолданылады",
-       "ntransclusions": "$1 {{PLURAL:$1|беÑ\82Ñ\96нде|беÑ\82Ñ\82еÑ\80Ñ\96нде}} қолданылады",
+       "nimagelinks": "$1 {{PLURAL:$1|беÑ\82Ñ\82е|беÑ\82Ñ\82е}} қолданылады",
+       "ntransclusions": "$1 {{PLURAL:$1|беÑ\82Ñ\82е|беÑ\82Ñ\82е}} қолданылады",
        "specialpage-empty": "Бұл сұраныс бойынша нәтиже жоқ.",
        "lonelypages": "Еш беттен сілтелмеген беттер",
        "lonelypagestext": "Келесі беттерге {{SITENAME}} жобасындағы басқа беттерінің ішіндегі кірікбеттер сілтемейді.",
        "uncategorizedtemplates": "Санатсыз үлгілер",
        "unusedcategories": "Пайдаланылмаған санаттар",
        "unusedimages": "Пайдаланылмаған файлдар",
-       "popularpages": "Ең көп қаралған беттер",
        "wantedcategories": "Басталмаған санаттар",
        "wantedpages": "Басталмаған беттер",
        "wantedfiles": "Басталмаған файлдар",
        "querypage-disabled": "Бұл арнайы бет өнімділік себептері үшін өшірілген",
        "booksources": "Кітап қайнарлары",
        "booksources-search-legend": "Кітап қайнарларын іздеу",
-       "booksources-go": "Өту",
        "booksources-text": "Төменде жаңа және қолданған кітаптар сататын тораптарының сілтемелері тізімделген және ізделген кітаптар туралы қосымша ақпарат болуы мүмкін:",
        "specialloguserlabel": "Орындаушы:",
        "speciallogtitlelabel": "Нысана (атауы немесе қатысушы):",
        "wlheader-enotif": "Ескерту хат жіберуі қосылған.",
        "wlheader-showupdated": "Соңғы келіп-кетуіңізден бері өзгертілген беттер '''жуан''' қаріпімен көрсетіледі.",
        "wlnote": "Төменде $3, $4 кезіне дейінгі соңғы {{PLURAL:$2|сағатта|'''$2''' сағатта}} болған, {{PLURAL:$1|жуықтағы өзгеріс|жуықтағы '''$1''' өзгеріс}} көрсетіледі.",
-       "wlshowlast": "Соңғы $1 сағаттағы, $2 күндегі, $3 болған өзгерісті көрсету",
+       "wlshowlast": "Соңғы $1 сағаттағы, $2 күндегі,  болған өзгерісті көрсету",
        "watchlist-options": "Бақылау тізімінің баптаулары",
        "watching": "Бақылауда…",
        "unwatching": "Бақыламауда…",
        "rollbacklinkcount-morethan": "$1-нан аса {{PLURAL:$1|өңдемені|өңдемелерді}} шегіндіру",
        "rollbackfailed": "Шегіндіру орындалмады",
        "cantrollback": "Өңдеме қайтарылмады;\nсоңғы үлескері тек осы беттің бастаушысы болды.",
-       "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|талқылауы]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) істеген [[:$1]] соңғы өңдемесі шегіндірілмеді;\nбасқа біреу бұл бетті әлдеқашан өңдеген немесе шегіндірген.\n\nБетті [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) соңғы рет өңдеген.",
+       "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": "Жасырылған қатысушы өңдемелерінен {{GENDER:$1|[[User:$1|$1]]}} соңғы нұсқасына қайтарды",
        "pagemovedsub": "Бет жылжытылды",
        "movepage-moved": "<strong>«$1» беті «$2» бетіне жылжытылды</strong>",
        "movepage-moved-redirect": "Айдатқыш жасалды.",
+       "movepage-moved-noredirect": "Бағыттау беті басталуы жасырылды.",
        "articleexists": "Осылай аталған бет әлдақашан бар немесе таңдаған атауыңыз жарамды емес.\nБасқа атауды таңдаңыз.",
        "cantmove-titleprotected": "Бетті осы орынға жылжыта алмайсыз, себебі жаңа тақырып аты бастаудан қорғалған",
        "movetalk": "Қатысты талқылау бетін де жылжыту",
        "delete_and_move": "Жою және жылжыту",
        "delete_and_move_text": "== Жоюды қажет етеді ==\nТағайындалған «[[:$1]]» беті әлдеқашан бар.\nЖылжытуға жол беру үшін бұны жойғыңыз келе ме?",
        "delete_and_move_confirm": "Иә, бұл бетті жой",
-       "delete_and_move_reason": "\"[[$1]]\" дегеннен жылжытуға жол беру үшін жойылған",
+       "delete_and_move_reason": "«[[$1]]» дегеннен жылжытуға жол беру үшін жойылған",
        "selfmove": "Қайнар және нысана тақырып аттары бірдей;\nбет өзінің үстіне жылжытылмайды.",
        "immobile-source-namespace": "\"$1\" есім кеңістігіндегі беттер жылжытылмайды",
        "immobile-target-namespace": "\"$1\" есім кеңістігіне беттерді жылдытылмайды",
        "tooltip-recreate": "Бет жойылғанына қарамастан қайта бастау",
        "tooltip-upload": "Жүктеуді бастау",
        "tooltip-rollback": "\"Шегіндіру\" сілтемесін бір рет басу арқылы соңға редактордың барлық қатар өңдемелерін өшіру",
+       "tooltip-undo": "«Жоққа шығару» сілтемесін бассаңыз бұл өңдеме болдырылмайды және өңдеу пішіні қарап шығу режимінде ашылады. Ол өңдеу түйіндемесіне себебін қосуға мүмкіндік береді.",
        "tooltip-preferences-save": "Бапталымдарыңызды сақтау",
        "tooltip-summary": "Қысқаша түйіндемесін енгізіңіз",
        "interlanguage-link-title-nonlang": "$1 – $2",
        "pageinfo-robot-policy": "Индекстеуді робот жүргізуге",
        "pageinfo-robot-index": "рұқсат берілген",
        "pageinfo-robot-noindex": "рұқсат етілмеген",
-       "pageinfo-views": "Қараушылар саны",
        "pageinfo-watchers": "Бетті қараушылар саны",
        "pageinfo-few-watchers": "$1 азырақ {{PLURAL:$1|қараушы|қараушы}}",
        "pageinfo-redirects-name": "Бұл бетке бағытталғандар саны",
        "exif-urgency-normal": "Қалыпты ($1)",
        "exif-urgency-low": "Төмен ($1)",
        "exif-urgency-high": "Жоғары ($1)",
-       "watchlistall2": "барлық",
        "namespacesall": "барлығы",
        "monthsall": "барлығы",
        "confirmemail": "Е-пошта мекенжайын құптау",
        "logentry-rights-rights": "$1 $3 үшін топ мүшелігін $4 дегеннен $5 дегенге {{GENDER:$2|өзгерті}}",
        "logentry-rights-rights-legacy": "$1 $3 үшін топ мүшелігін {{GENDER:$2|өзгерті}}",
        "rightsnone": "(ешқандай)",
+       "revdelete-summary": "өңдеменің қысқаша мазмұндамасы",
        "feedback-subject": "Тақырып:",
        "feedback-message": "Хабарлама:",
        "feedback-cancel": "Болдырмау",
index a3a4cd8..449e9a8 100644 (file)
        "mergehistory-autocomment": "[[:$1]] degen [[:$2]] degenge biriktirildi",
        "mergehistory-comment": "[[:$1]] degen [[:$2]] degenge biriktirildi: $3",
        "mergelog": "Biriktirw jwrnalı",
-       "pagemerge-logentry": "[[$1]] degen [[$2]] degenge biriktirildi ($3 deýingi tüzetwleri)",
        "revertmerge": "Biriktirwdi boldırmaw",
        "mergelogpagetext": "Tömende bir bettiñ tarïxı özge betke biriktirw eñ soñğı tizimi keltiriledi.",
        "history-title": "«$1» — tüzetw tarïxı",
        "randomredirect-nopages": "Bul esim ayasında eş aýdağış joq.",
        "statistics": "Sanaq",
        "statistics-header-users": "Qatıswşı sanağı",
-       "statistics-mostpopular": "Eñ köp qaralğan better",
        "doubleredirects": "Şınjırlı aýdağıştar",
        "doubleredirectstext": "Bul bette basqa aýdatw betterge silteýtin better tizimdelinedi. Ärbir jolaqta birinşi jäne ekinşi aýdağışqa siltemeler bar, sonımen birge ekinşi aýdağış nısanası bar, ädette bul birinşi aýdağış bağıttaýtın «naqtı» nısana bet atawı bolwı kerek.",
        "brokenredirects": "Eş betke keltirmeýtin aýdağıştar",
        "uncategorizedtemplates": "Sanatsız ülgiler",
        "unusedcategories": "Paýdalanılmağan sanattar",
        "unusedimages": "Paýdalanılmağan faýldar",
-       "popularpages": "Eñ köp qaralğan better",
        "wantedcategories": "Bastalmağan sanattar",
        "wantedpages": "Bastalmağan better",
        "mostlinked": "Eñ köp siltengen better",
        "suppress": "Şettetw",
        "booksources": "Kitap qaýnarları",
        "booksources-search-legend": "Kitap qaýnarların izdew",
-       "booksources-go": "Ötw",
        "booksources-text": "Tömende jaña jäne qoldanğan kitaptar satatın toraptarınıñ siltemeleri tizimdelgen. Bul toraptarda izdelgen kitaptar twralı bılaýğı aqparat bolwğa mümkin.",
        "specialloguserlabel": "Qatıswşı:",
        "speciallogtitlelabel": "Taqırıp atı:",
        "wlheader-enotif": "Eskertw xat jiberwi qosılğan.",
        "wlheader-showupdated": "Soñğı kelip-ketwiñizden beri özgertilgen betterdi '''jwan''' qaripimen körset",
        "wlnote": "Tömende soñğı {{PLURAL:$2|sağatta|'''$2''' sağatta}} bolğan, {{PLURAL:$1|jwıqtağı özgeris|jwıqtağı '''$1''' özgeris}} körsetiledi.",
-       "wlshowlast": "Soñğı $1 sağattağı, $2 kündegi, $3 bolğan özgeristi körsetw",
+       "wlshowlast": "Soñğı $1 sağattağı, $2 kündegi,  bolğan özgeristi körsetw",
        "watching": "Baqılawda…",
        "unwatching": "Baqılamawda…",
        "enotif_reset": "Barlıq bet kelip-ketildi dep belgile",
        "exif-gpsspeed-n": "knot",
        "exif-gpsdirection-t": "Şın bağıt",
        "exif-gpsdirection-m": "Magnïttı bağıt",
-       "watchlistall2": "barlıq",
        "namespacesall": "barlığı",
        "monthsall": "barlığı",
        "confirmemail": "E-poşta mekenjaýın quptaw",
        "revdelete-restricted": "äkimşilerge tïımdar qoldadı",
        "revdelete-unrestricted": "äkimşilerden tïımdardı alastadı",
        "rightsnone": "(eşqandaý)",
+       "revdelete-summary": "öñdemeniñ qısqaşa mazmundaması",
        "expandtemplates": "Ülgilerdi ulğaýtw",
        "expand_templates_intro": "Osı qural arnaýı beti äldebir mätindi aladı da,\nbunıñ işindegi barlıq kiriktelgen ülgilerdi meýlinşe ulğaýtadı.\nMına <nowiki>{{</nowiki>#language:...}} sïyaqtı jöñdetw fwnkcïyaların da, jäne <nowiki>{{</nowiki>CURRENTDAY}}\nsïyaqtı aýnamalıların da ulğaýtadı (naqtı aýtqanda, qos qabat sadaq jaqşalar arasındağı barlığın).\nBunı öz MediaWiki bağdarlamasınan qatıstı jöñdetw satın şaqırıp istelinedi.",
        "expand_templates_title": "Mätin aralıq atawı ({{FULLPAGENAME}} t.b. better üşin):",
index b6d6856..dd10a35 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Aputtu",
-            "Iketsi",
-            "Kaare",
-            "Kaniina (on kl.wikipedia.org)",
-            "Qaqqalik",
-            "לערי ריינהארט"
-        ]
-    },
-    "sunday": "Sapaat",
-    "monday": "Ataasinngorneq",
-    "tuesday": "Marlunngorneq",
-    "wednesday": "Pingasunngorneq",
-    "thursday": "Sisamanngorneq",
-    "friday": "Tallimanngorneq",
-    "saturday": "Arfininngorneq",
-    "sun": "Sap",
-    "mon": "Ata",
-    "tue": "Mar",
-    "wed": "Pin",
-    "thu": "Sis",
-    "fri": "Tal",
-    "sat": "Arf",
-    "january": "Jannuaari",
-    "february": "Februaari",
-    "march": "Martsi",
-    "april": "Apriili",
-    "may_long": "Maaji",
-    "june": "Juuni",
-    "july": "Juuli",
-    "august": "Aggusti",
-    "september": "Septemberi",
-    "october": "Oktoberi",
-    "november": "Novemberi",
-    "december": "Decemberi",
-    "january-gen": "Januaari",
-    "february-gen": "Februaari",
-    "march-gen": "Marsi",
-    "april-gen": "Apriili",
-    "may-gen": "Maaji",
-    "june-gen": "Juuni",
-    "july-gen": "Juuli",
-    "august-gen": "Aggusti",
-    "september-gen": "Septembari",
-    "october-gen": "Oktobari",
-    "november-gen": "Novembari",
-    "december-gen": "Decembari",
-    "jan": "Jan",
-    "feb": "Feb",
-    "mar": "Mar",
-    "apr": "Apr",
-    "may": "Maaji",
-    "jun": "Jun",
-    "jul": "Jul",
-    "aug": "Aug",
-    "sep": "Sep",
-    "oct": "Okt",
-    "nov": "Nov",
-    "dec": "Dec",
-    "pagecategories": "{{PLURAL:$1|Sumut atassuseq|Sunut atassusit}}",
-    "category_header": "Quppernerit sumut atassusermi \"$1\"-miittut",
-    "subcategories": "Sunut atassuserni ataaniittut",
-    "category-subcat-count": "{{PLURAL:$2|Una sumut atassuseq ataatsimik ataani ilaqarpoq.|Una sumut atassuseq imarivai {{PLURAL:$1|sumut atassuseq ataaniittoq|$1 sunut atassusit ataaniittut}}, $2-suni.}}",
-    "category-article-count": "Una sumut atassuseq imarivaa {{PLURAL:$2|qupperneq ataaseq ataaniittoq|{{PLURAL:$1|qupperneq ataaseq ataaniittoq|quppernerit ataaniittut $1-it}} $2-suni.}}",
-    "about": "Pillugu",
-    "newwindow": "(nutaamut ammassaaq)",
-    "cancel": "Unitsiguk",
-    "moredotdotdot": "Suli...",
-    "mytalk": "Oqalliffikka",
-    "navigation": "Sumiissusersiuut",
-    "qbfind": "Naniuk",
-    "qbedit": "Aaqqissoruk",
-    "vector-action-addsection": "Imm. nutaaq",
-    "vector-action-move": "Nuuguk",
-    "vector-view-create": "Pilersiguk",
-    "vector-view-edit": "Aaqqissoruk",
-    "vector-view-history": "Oqalutt.",
-    "vector-view-view": "Takuuk",
-    "vector-view-viewsource": "Toqqavia takuuk",
-    "errorpagetitle": "Kukkuneq",
-    "returnto": "$1 -mut uterit",
-    "tagline": "{{SITENAME}}-meersoq",
-    "help": "Ikiuutit",
-    "search": "Ujarlerit",
-    "searchbutton": "Ujarlerit",
-    "go": "Ikunnarit",
-    "searcharticle": "Tassunngarit",
-    "history": "Oqaluttuassartaa",
-    "history_short": "Oqaluttuassartaa",
-    "printableversion": "Naqikkuminartoq",
-    "permalink": "Ataavartumik innersuut",
-    "edit": "Aaqqissoruk",
-    "create": "Pilersiguk",
-    "editthispage": "Qupperneq aaqqissuuguk",
-    "delete": "Peeruk",
-    "deletethispage": "Qupperneq piiaruk",
-    "protect": "Illersoruk",
-    "protect_change": "allannguutit",
-    "unprotect": "Illersorunnaaruk",
-    "newpage": "Qupperneq nutaaq",
-    "talkpagelinktext": "Oqallinneq",
-    "personaltools": "Namminermut sannatit",
-    "talk": "Oqallinneq",
-    "views": "Takutitat",
-    "toolbox": "Atortut",
-    "otherlanguages": "Oqaatsit allat",
-    "redirectedfrom": "($1-mit nuunneq)",
-    "lastmodifiedat": "Una qupperneq kingullermik allanngortinneqarsimavoq $1 $2",
-    "jumpto": "Uunngarit:",
-    "jumptonavigation": "sumiissusersiuut",
-    "jumptosearch": "ujarlerit",
-    "aboutsite": "{{SITENAME}} pillugu",
-    "aboutpage": "Project:Pillugu",
-    "currentevents": "Maannakkut pisut",
-    "disclaimers": "Aalajangersagaq",
-    "edithelp": "Ikiuutit",
-    "mainpage": "Saqqaa",
-    "mainpage-description": "Saqqaa",
-    "portal": "Allattartup saqqaa",
-    "privacy": "Namminermut paasissutissat",
-    "retrievedfrom": "Uannga aaneqartoq \"$1\"",
-    "youhavenewmessages": "<!-- This sentence shall be empty because of kl grammar. --> $1 ($2)",
-    "editsection": "aaqqissoruk",
-    "editold": "aaqqissoruk",
-    "viewsourceold": "toqqavia takuuk",
-    "editlink": "aaqqissoruk",
-    "editsectionhint": "Aaqqissuuguk immikkoortoq: $1",
-    "toc": "Imarisai",
-    "showtoc": "saqqummeruk",
-    "hidetoc": "toqqoruk",
-    "site-rss-feed": "$1 RSS Feed",
-    "site-atom-feed": "$1 Atom Feed",
-    "page-rss-feed": "\"$1\" RSS Feed",
-    "red-link-title": "$1 (Qupperneq suli allaffigineqanngilaq)",
-    "nstab-main": "Allaaserisaq",
-    "nstab-user": "Atuisup quppernera",
-    "nstab-special": "Immikkut",
-    "nstab-project": "Pillugu",
-    "nstab-image": "Assiliaq",
-    "nstab-template": "Ilisserut",
-    "nstab-help": "Ikiuutit",
-    "nstab-category": "Sumut atassuseq",
-    "viewsource": "Toqqavia takuuk",
-    "protectedpagetext": "Una qupperneq allaffigineqarnissamut illersugaavoq.",
-    "viewsourcetext": "Qupperneq takusinnaavat aamma sanarfia kopeersinnaavat:",
-    "logouttext": "'''Maanna anivutit.'''\n\n{{SITENAME}} atorlugu ingerlaqqissinnaavutit kinaanerit isertorlugu, iseqqissinnaavutilluunniit taamatut isissuteqarlutit imalt. allat iserfigisinnaanngorpaat.",
-    "yourname": "Atuisutut atit",
-    "yourpassword": "Isissutissaq:",
-    "yourpasswordagain": "Isissutissaq allaqqiguk",
-    "remembermypassword": "Iserfiga tullissaanut eqqaamalara (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "login": "Iserit",
-    "nav-login-createaccount": "Konto-mik pilersitsigit imalt. iserit",
-    "loginprompt": "Pisariaqassaaq cookies-itit atussallugit {{SITENAME}} -mut isissaguit.",
-    "userlogin": "Kontomik pilersitsigit / iserit",
-    "logout": "Anigit",
-    "userlogout": "Anigit",
-    "nologin": "Kontomik peqanngilatit? '''$1'''.",
-    "nologinlink": "Kontomik pilersitsigit",
-    "createaccount": "Kontomik nutaamik pilersitsigit",
-    "gotaccount": "Kontomik peqareerpit? '''$1'''.",
-    "gotaccountlink": "Iserit",
-    "createaccountmail": "e-mail-ikkut",
-    "badretype": "Isissutissat allanneqartut assigiinngillat.",
-    "userexists": "Atuisup atia atorneqareerpoq. Allamik qinersigit.",
-    "loginerror": "Iserniarnerlunneq",
-    "loginsuccesstitle": "Maanna isersimalerputit",
-    "loginsuccess": "Maanna {{SITENAME}} -mut isersimalerputit \"$1\" -itut taaguuserlutit.",
-    "wrongpassword": "Isissutissaq kukkusumik allanneqarsimavoq. Misileqqiuk.",
-    "mailmypassword": "E-mail-ikkut isissutissaq nutaaq nassiuguk",
-    "acct_creation_throttle_hit": "Konto-mik pilersitsereersimagavit pilersitseqqissinnaanngilatit, IP-adressit malillugu.\nTaamaattumik maannakkorpiaq kontomik pilersitsisinnaanngilatit.",
-    "oldpassword": "Isissutissatoqaq:",
-    "newpassword": "Isissutissaq nutaaq:",
-    "retypenew": "Isissutissaq nutaaq allaqqiuk",
-    "summary": "Allaaserinera:",
-    "subject": "Pineqartoq/qulequtaq:",
-    "minoredit": "Annikitsumik allannguutaavoq",
-    "watchthis": "Allaaserisaq ersersimatiguk",
-    "savearticle": "Toqqoruk",
-    "preview": "Isikkua",
-    "showpreview": "Isikkua takuuk",
-    "showdiff": "Allannguutit",
-    "anoneditwarning": "'''Mianersoqqussut:''' Isersimanak sulilerputit.\nIP adressit nuisassaaq massuma quppernerup oqaluttuassartaani.",
-    "accmailtitle": "Password-i nassiunneqarsimavoq.",
-    "accmailtext": "Password-i \"$1\" $2-mut nassiunneqarsimavoq.",
-    "newarticle": "(Nuutaq)",
-    "newarticletext": "Maanga innersuunneqarsimavutit quppernermut suli pilersinneqarsimanngitsumut.\nQupperneq pilersissagukku, boks-ip iluani allagit (takuuk [[{{MediaWiki:Helppage}}|ikiuutit]] paasissutissaanerusut).\nMaanngarsimaguit kukkusumik, toortaat '''utimut''' tooruk.",
-    "anontalkpagetext": "---- ''Manna tassaavoq oqalliffik atuisumit anonym-iusumeersumit, konto-mik pilersitsisimanngitsumik imalt. atorneq ajugaanik.\nTaamaattumik IP-adressia kinaanerattut atortariaqassavarput.\nIP-adressi pigineqarsinnaavoq atuisunit arlalinnit.\nAtuisuuguit anonym-iusoq, isumaqarlutillu soqutiginngisannik oqaaseqarfigineqarlutit, qinnuigivatsigit [[Special:UserLogin/signup|atuisutut pilersitsissallutit]] aamma [[Special:UserLogin|iserlutit]], taava siunissami paarlattoornernik atuisuni arlalinni pinaveersaartoqarniassammat.''",
-    "noarticletext": "Maannamut una qupperneq allaffigineqanngilaq.\nTaamatut oqaasilimmik quppernerni allani [[Special:Search/{{PAGENAME}}|ujaasisinnaavutit]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} log-ini ujaasisinnavutillu] imaluunniit [{{fullurl:{{FULLPAGENAME}}|action=edit}} qupperneq pilersissinnaavat]</span>.",
-    "previewnote": "Eqqaamallugu isikkua takutinneqaannarpoq, toqqorneqanngilaq suli!",
-    "editing": "Aaqqissorpaa $1",
-    "editingsection": "Aaqqissorpaa $1 (immikkoortoq)",
-    "editingcomment": "Aaqqissorpaa $1 (immikkoortoq nutaaq)",
-    "yourtext": "Allatat",
-    "editingold": "'''Mianersoqqussut: Qupperneq pisoqaanerusoq aaqqissuutilerpat.'''\nToqqorukku quppernerup taamaannera taarserneqassaaq.",
-    "protectedpagewarning": "'''Mianersoqqussut: Una qupperneq illersugaavoq, administratorit kisimik aaqqissorsinnaavaat.'''",
-    "semiprotectedpagewarning": "'''Malugiuk:''' Qupperneq parnaaqqavoq, atuisutut nalunaarsimasut kisimik allanngortitersinnaavaat.",
-    "templatesused": "{{PLURAL:$1|Ilisserut|Ilisserutit}} quppernermi atorneqartoq/tut:",
-    "permissionserrorstext-withaction": "Pisinnaatitaaffeqanngilatit $2 atussallugu, {{PLURAL:$1|peqqutigalugu|peqqutigalugit}}:",
-    "moveddeleted-notice": "Una qupperneq peerneqarsimavoq.\nPeersinermut nuutsinermullu nalunaarsuutit ataani takuneqarsinnaapput.",
-    "currentrev": "Maanna taamaannera",
-    "currentrev-asof": "Maanna taamaannera $1-meersoq",
-    "revisionasof": "Taamaannera $1-meersoq",
-    "previousrevision": "← Pisoqaaneq",
-    "nextrevision": "Nutaaneq →",
-    "currentrevisionlink": "Massakkuunera takuuk",
-    "cur": "maanna",
-    "last": "siulia",
-    "page_first": "siulliit",
-    "page_last": "kingulliit",
-    "histlegend": "Nassuiaat: (maanna) = assigiinngissut maanna inneranut, (siulia) = assigiinngissut siulianut, M = annikitsumik allannguut",
-    "history-fieldset-title": "Oqaluttuassartaani qupperaagit",
-    "histfirst": "Pisoqaaneq",
-    "histlast": "Nutaaneq",
-    "history-title": "\"$1\"-p oqaluttuassartaa",
-    "compareselectedversions": "Qinikkat nalilersukkit",
-    "editundo": "peeruk",
-    "searchresults": "Ujaasinermi inernerit",
-    "searchresults-title": "Uuma ujarnera \"$1\"",
-    "prevn": "siulii {{PLURAL:$1|$1}}",
-    "nextn": "tullii {{PLURAL:$1|$1}}",
-    "viewprevnext": "Takuuk ($1 {{int:pipe-separator}} $2) ($3)",
-    "searchmenu-exists": "'''Qupperneqarpoq \"[[:$1]]\" -mik atilimmik maani wikimi'''",
-    "searchmenu-new": "'''Qupperneq [[:$1]] pilersiguk maani wikimi'''",
-    "searchprofile-articles": "Imarisai",
-    "searchprofile-project": "Ikiuutit suliniutillu imaat",
-    "searchprofile-everything": "Tamarmik",
-    "searchprofile-advanced": "Ujaasiffik anneq",
-    "search-result-size": "$1 ({{PLURAL:$2|oqaaseq|$2 oqaatsit}})",
-    "search-redirect": "(nuunneq $1)",
-    "search-suggest": "Una piviuk: $1",
-    "showingresultsheader": "{{PLURAL:$5|Inernera '''$1''' '''$3'''|Inerneri '''$1 - $2''' '''$3'''}}-suni '''$4'''-mut",
-    "search-nonefound": "Ujaasineq inerneqanngilaq",
-    "mypreferences": "Inissiffissat",
-    "prefs-rc": "Allannguutit kingulliit",
-    "saveprefs": "Toqqukkit",
-    "yourlanguage": "Oqaatsit:",
-    "group-sysop": "Administratorit",
-    "recentchanges": "Allannguutit kingulliit",
-    "recentchanges-legend": "Inissisimaffiit allannguutini kingullerni",
-    "recentchanges-summary": "Uani quppernermi '''{{SITENAME}}'''-mi allannguutit kingulliit malinnaavigisinnaavatit.",
-    "recentchanges-label-newpage": "Tassaavoq qupperneq nutaaq",
-    "recentchanges-label-minor": "Tassaavoq allannguut annikitsoq",
-    "recentchanges-label-bot": "Bot-ip allannguutaa",
-    "recentchanges-legend-newpage": "$1 - qupperneq nutaaq",
-    "rclistfrom": "Allannguutit kingulliit takukkit $1 -nngaanniit",
-    "rcshowhideminor": "$1 allannguutit annikitsut",
-    "rcshowhidebots": "$1 robottit",
-    "rcshowhideliu": "$1 atuisut nalunaarsimasut",
-    "rcshowhideanons": "$1 atuisut anonymejusut",
-    "rcshowhidepatr": "$1 allannguutit misissorneqarsimasut",
-    "rcshowhidemine": "$1 nammineq tapit",
-    "rclinks": "Takutikkit $1 -it allannguutit kingulliit ulluni kingullerni $2 -ni<br />$3",
-    "diff": "assigiinng",
-    "hist": "oqalutt",
-    "hide": "Assequt",
-    "show": "Saqqummiuk",
-    "minoreditletter": "m",
-    "newpageletter": "N",
-    "boteditletter": "b",
-    "recentchangeslinked": "Allannguutit naleqqiussat",
-    "recentchangeslinked-feed": "Allannguutit naleqqiussat",
-    "recentchangeslinked-toolbox": "Allannguutit naleqqiussat",
-    "upload": "Fiilimik ilisigit",
-    "uploadedimage": "ilivaa \"[[$1]]\"",
-    "listfiles_user": "Atuisoq",
-    "file-anchor-link": "Assiliaq",
-    "filehist-datetime": "Ulloq/Piffissaq",
-    "filehist-user": "Atuisoq",
-    "imagelinks": "Innersuutit",
-    "mimesearch": "MIME ujaarlerit",
-    "randompage": "Nalaatsornermi qupperneq",
-    "statistics": "Kisitsisinngorlugit paasissutissat",
-    "newpages": "Quppernerit nutaat",
-    "move": "Nuuguk",
-    "pager-newer-n": "{{PLURAL:$1|nutaaneq 1|nutaanerit $1}}",
-    "pager-older-n": "{{PLURAL:$1|pisoqaaneq 1|pisoqaanerit $1}}",
-    "booksources-go": "Ujaruk",
-    "specialloguserlabel": "Atuisoq:",
-    "allarticles": "Quppernerit tamarmik",
-    "allpagessubmit": "Tassunngarit",
-    "categories": "Sunut atassusit",
-    "categoriespagetext": "Uku {{PLURAL:$1|sumut atassuseq|sunut atassusit}} imarivai quppernerit media-lluunniit.\n[[Special:UnusedCategories|Sunut atassusit]] atorneqanngitsut maani ilaanngillat.\nAamma takuuk [[Special:WantedCategories|sunut atassusinut kissaatigineqartut]].",
-    "categoriesfrom": "Takuuk qanoq aallartiffianeersumiit:",
-    "linksearch-ok": "Ujaruk",
-    "watchlist": "Ersersimasut",
-    "mywatchlist": "Nuisatiffikka",
-    "addedwatchtext": "Una qupperneq \"[[:$1]]\" ersersimatitannut ilanngunneqarpoq. Siunissami allannguutit ilinnut malugeqquneqartassapput aamma [[Special:RecentChanges|allannguutini kingullerni]] issusuumik allanneqartuusassallutik. Ersersimatikkusunngikkukku [[Special:Watchlist|piiginnassavat]] ersersimasuutitanni.",
-    "watch": "Ersilli",
-    "watchthispage": "Qupperneq ersersimatiguk",
-    "unwatch": "Ersitsinnagu",
-    "watching": "Saqqumitiguk",
-    "unwatching": "Saqquminera peeruk",
-    "excontent": "imarivaa: '$1'",
-    "excontentauthor": "imarivaa: '$1' (allattutuaavorlu '[[Special:Contributions/$2|$2]]')",
-    "delete-confirm": "Peeruk \"$1\"",
-    "actioncomplete": "Naammassivoq",
-    "deletedtext": "\"$1\" peerpoq. Takukkit $2 peerneqarsimasut kingulliit.",
-    "revertpage": "Inisseqqiineq [[User:$1|$1]]-meersoq, peerneqarpoq [[Special:Contributions/$2|$2]] ([[User talk:$2|diskussion]])-meersoq",
-    "prot_1movedto2": "[[$1]]-i nuunneqarsimavoq [[$2]]-mut",
-    "protect-expiry-options": "1 tiimi:1 hour,ulloq 1:1 day,sap akunn 1:1 week,sap akunn 2:2 weeks,qaammat 1:1 month,qaammatit 3:3 months,qaammatit 6:6 months,ukioq 1:1 year,killeqanngitsoq:infinite",
-    "undeletebtn": "Inisseqqiguk",
-    "undelete-search-submit": "Ujarlerit",
-    "namespace": "Quppernerup ilusia:",
-    "invert": "Quppernerup ilusia qinernagu",
-    "blanknamespace": "(Pingaarneq)",
-    "contributions": "Atuisup tapii",
-    "mycontris": "Tapikka",
-    "contribsub2": "$1-meersoq ($2)",
-    "uctop": "(kingulleq)",
-    "month": "Qaammat:",
-    "year": "Ukioq:",
-    "sp-contributions-newbies": "Atuisut nutaaginnaat takukkit",
-    "sp-contributions-talk": "oqallinneq",
-    "sp-contributions-search": "Tapiisunik ujaasineq",
-    "sp-contributions-username": "IP adresse imalt. atuisoq:",
-    "sp-contributions-submit": "Ujaruk",
-    "whatlinkshere": "Suna maangamut innersuussisoq",
-    "whatlinkshere-prev": "{{PLURAL:$1|siulia|siulii $1}}",
-    "whatlinkshere-next": "{{PLURAL:$1|tullia|tullii $1}}",
-    "blockip": "Atuisoq asseruk",
-    "blockip-legend": "Atuisoq asseruk",
-    "ipadressorusername": "IP adresse imalt. atuisoq:",
-    "ipboptions": "2 tiimit:2 hours,ulloq 1:1 day,ullut 3:3 days,sap akunn 1:1 week,sap akunn 2:2 weeks,qaammat 1:1 month,qaammatit 3:3 months,qaammatit 6:6 months,ukioq 1:1 year,killeqanngitsoq:infinite",
-    "ipblocklist-submit": "Ujarlerit",
-    "infiniteblock": "killeqanngitsoq",
-    "expiringblock": "atorunnaassaaq $1 $2-nngoruni",
-    "blocklink": "assersoruk",
-    "contribslink": "tapikkat",
-    "blocklogentry": "asserpaa [[$1]] $2-mik sivissusilimmik $3",
-    "movearticle": "Qupperneq nuuguk",
-    "move-watch": "Qupperneq ersersimatiguk",
-    "movepagebtn": "Qupperneq nuuguk",
-    "pagemovedsub": "Nuunnera iluatsippoq",
-    "movepage-moved": "Qupperneq '''\"$1\" uunga nuuppoq \"$2\"'''",
-    "allmessages-language": "Oqaatsit:",
-    "allmessages-filter-submit": "Takuuk",
-    "thumbnail-more": "Allisiguk",
-    "tooltip-pt-userpage": "Atuisutut quppernerit",
-    "tooltip-pt-mytalk": "Oqalliffiit",
-    "tooltip-pt-preferences": "Inissiinikka",
-    "tooltip-pt-mycontris": "Tapikkatit",
-    "tooltip-pt-login": "Iseqquneqaraluarputit, pitsaanerussagaluarpoq",
-    "tooltip-pt-logout": "Aniffik",
-    "tooltip-ca-talk": "Quppernerup imaanik oqallinneq",
-    "tooltip-ca-edit": "Allanngortiterisinnaavutit. Isikkua takulaariuk",
-    "tooltip-ca-history": "Quppernerup siulii",
-    "tooltip-ca-move": "Qupperneq nuuguk",
-    "tooltip-ca-watch": "Saqqumitiguk",
-    "tooltip-search": "Ujaarlerit {{SITENAME}}",
-    "tooltip-search-go": "Tassunngarit nassaassappat",
-    "tooltip-search-fulltext": "Taanna ujaruk",
-    "tooltip-n-mainpage": "Saqqaa iseruk",
-    "tooltip-n-mainpage-description": "Saqqaa iseruk",
-    "tooltip-n-portal": "Suliaq, ilitsersuut, nassaassaasinnaasullu",
-    "tooltip-n-currentevents": "Maannakkut pisut tunuliaqutai takukkit",
-    "tooltip-n-recentchanges": "Wikimi allannguutit kingulliit",
-    "tooltip-n-randompage": "Allaaserisamukarit",
-    "tooltip-n-help": "Qanoq iliussaanga ...",
-    "tooltip-t-whatlinkshere": "Innersuussami saqqummiussat",
-    "tooltip-t-recentchangeslinked": "Massuma quppernerani allannguutit kingulliit",
-    "tooltip-t-upload": "Assinik mediafiilinilluunniit ilisigit",
-    "tooltip-t-specialpages": "Quppernerit immikkut ittut nassaassaasinnaasut",
-    "tooltip-t-print": "Quppernerup naqikkuminarnera",
-    "tooltip-t-permalink": "Massuma quppernerup taamaaqqaarnera",
-    "tooltip-ca-nstab-main": "Imarisaa takuuk",
-    "tooltip-save": "Allannguutitit toqqukkit",
-    "tooltip-preview": "Isikkua takuuk, toqqortinnaguk atortaruk!",
-    "lastmodifiedatby": "Una qupperneq kingullermik allanngortinneqarsimavoq $2, $1 $3-mit.",
-    "previousdiff": "← Assigiinngissut siulia",
-    "nextdiff": "Assigiinngissut tullia →",
-    "ilsubmit": "Ujarlerit",
-    "namespacesall": "tamarmik",
-    "monthsall": "tamarmik",
-    "autosumm-new": "Qupperneq pilersippaa '$1'",
-    "specialpages": "Quppernerit immikkut ittut",
-    "searchsuggest-search": "Ujarlerit"
+       "@metadata": {
+               "authors": [
+                       "Aputtu",
+                       "Iketsi",
+                       "Kaare",
+                       "Kaniina (on kl.wikipedia.org)",
+                       "Qaqqalik",
+                       "לערי ריינהארט",
+                       "아라"
+               ]
+       },
+       "sunday": "Sapaat",
+       "monday": "Ataasinngorneq",
+       "tuesday": "Marlunngorneq",
+       "wednesday": "Pingasunngorneq",
+       "thursday": "Sisamanngorneq",
+       "friday": "Tallimanngorneq",
+       "saturday": "Arfininngorneq",
+       "sun": "Sap",
+       "mon": "Ata",
+       "tue": "Mar",
+       "wed": "Pin",
+       "thu": "Sis",
+       "fri": "Tal",
+       "sat": "Arf",
+       "january": "Jannuaari",
+       "february": "Februaari",
+       "march": "Martsi",
+       "april": "Apriili",
+       "may_long": "Maaji",
+       "june": "Juuni",
+       "july": "Juuli",
+       "august": "Aggusti",
+       "september": "Septemberi",
+       "october": "Oktoberi",
+       "november": "Novemberi",
+       "december": "Decemberi",
+       "january-gen": "Januaari",
+       "february-gen": "Februaari",
+       "march-gen": "Marsi",
+       "april-gen": "Apriili",
+       "may-gen": "Maaji",
+       "june-gen": "Juuni",
+       "july-gen": "Juuli",
+       "august-gen": "Aggusti",
+       "september-gen": "Septembari",
+       "october-gen": "Oktobari",
+       "november-gen": "Novembari",
+       "december-gen": "Decembari",
+       "jan": "Jan",
+       "feb": "Feb",
+       "mar": "Mar",
+       "apr": "Apr",
+       "may": "Maaji",
+       "jun": "Jun",
+       "jul": "Jul",
+       "aug": "Aug",
+       "sep": "Sep",
+       "oct": "Okt",
+       "nov": "Nov",
+       "dec": "Dec",
+       "pagecategories": "{{PLURAL:$1|Sumut atassuseq|Sunut atassusit}}",
+       "category_header": "Quppernerit sumut atassusermi \"$1\"-miittut",
+       "subcategories": "Sunut atassuserni ataaniittut",
+       "category-subcat-count": "{{PLURAL:$2|Una sumut atassuseq ataatsimik ataani ilaqarpoq.|Una sumut atassuseq imarivai {{PLURAL:$1|sumut atassuseq ataaniittoq|$1 sunut atassusit ataaniittut}}, $2-suni.}}",
+       "category-article-count": "Una sumut atassuseq imarivaa {{PLURAL:$2|qupperneq ataaseq ataaniittoq|{{PLURAL:$1|qupperneq ataaseq ataaniittoq|quppernerit ataaniittut $1-it}} $2-suni.}}",
+       "about": "Pillugu",
+       "newwindow": "(nutaamut ammassaaq)",
+       "cancel": "Unitsiguk",
+       "moredotdotdot": "Suli...",
+       "mytalk": "Oqalliffikka",
+       "navigation": "Sumiissusersiuut",
+       "qbfind": "Naniuk",
+       "qbedit": "Aaqqissoruk",
+       "errorpagetitle": "Kukkuneq",
+       "returnto": "$1 -mut uterit",
+       "tagline": "{{SITENAME}}-meersoq",
+       "help": "Ikiuutit",
+       "search": "Ujarlerit",
+       "searchbutton": "Ujarlerit",
+       "go": "Ikunnarit",
+       "searcharticle": "Tassunngarit",
+       "history": "Oqaluttuassartaa",
+       "history_short": "Oqaluttuassartaa",
+       "printableversion": "Naqikkuminartoq",
+       "permalink": "Ataavartumik innersuut",
+       "edit": "Aaqqissoruk",
+       "create": "Pilersiguk",
+       "editthispage": "Qupperneq aaqqissuuguk",
+       "delete": "Peeruk",
+       "deletethispage": "Qupperneq piiaruk",
+       "protect": "Illersoruk",
+       "protect_change": "allannguutit",
+       "unprotect": "Illersorunnaaruk",
+       "newpage": "Qupperneq nutaaq",
+       "talkpagelinktext": "Oqallinneq",
+       "personaltools": "Namminermut sannatit",
+       "talk": "Oqallinneq",
+       "views": "Takutitat",
+       "toolbox": "Atortut",
+       "otherlanguages": "Oqaatsit allat",
+       "redirectedfrom": "($1-mit nuunneq)",
+       "lastmodifiedat": "Una qupperneq kingullermik allanngortinneqarsimavoq $1 $2",
+       "jumpto": "Uunngarit:",
+       "jumptonavigation": "sumiissusersiuut",
+       "jumptosearch": "ujarlerit",
+       "aboutsite": "{{SITENAME}} pillugu",
+       "aboutpage": "Project:Pillugu",
+       "currentevents": "Maannakkut pisut",
+       "disclaimers": "Aalajangersagaq",
+       "edithelp": "Ikiuutit",
+       "mainpage": "Saqqaa",
+       "mainpage-description": "Saqqaa",
+       "portal": "Allattartup saqqaa",
+       "privacy": "Namminermut paasissutissat",
+       "retrievedfrom": "Uannga aaneqartoq \"$1\"",
+       "youhavenewmessages": "<!-- This sentence shall be empty because of kl grammar. --> $1 ($2)",
+       "editsection": "aaqqissoruk",
+       "editold": "aaqqissoruk",
+       "viewsourceold": "toqqavia takuuk",
+       "editlink": "aaqqissoruk",
+       "editsectionhint": "Aaqqissuuguk immikkoortoq: $1",
+       "toc": "Imarisai",
+       "showtoc": "saqqummeruk",
+       "hidetoc": "toqqoruk",
+       "site-rss-feed": "$1 RSS Feed",
+       "site-atom-feed": "$1 Atom Feed",
+       "page-rss-feed": "\"$1\" RSS Feed",
+       "red-link-title": "$1 (Qupperneq suli allaffigineqanngilaq)",
+       "nstab-main": "Allaaserisaq",
+       "nstab-user": "Atuisup quppernera",
+       "nstab-special": "Immikkut",
+       "nstab-project": "Pillugu",
+       "nstab-image": "Assiliaq",
+       "nstab-template": "Ilisserut",
+       "nstab-help": "Ikiuutit",
+       "nstab-category": "Sumut atassuseq",
+       "viewsource": "Toqqavia takuuk",
+       "protectedpagetext": "Una qupperneq allaffigineqarnissamut illersugaavoq.",
+       "viewsourcetext": "Qupperneq takusinnaavat aamma sanarfia kopeersinnaavat:",
+       "logouttext": "'''Maanna anivutit.'''\n\n{{SITENAME}} atorlugu ingerlaqqissinnaavutit kinaanerit isertorlugu, iseqqissinnaavutilluunniit taamatut isissuteqarlutit imalt. allat iserfigisinnaanngorpaat.",
+       "yourname": "Atuisutut atit",
+       "yourpassword": "Isissutissaq:",
+       "yourpasswordagain": "Isissutissaq allaqqiguk",
+       "remembermypassword": "Iserfiga tullissaanut eqqaamalara (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "login": "Iserit",
+       "nav-login-createaccount": "Konto-mik pilersitsigit imalt. iserit",
+       "userlogin": "Kontomik pilersitsigit / iserit",
+       "logout": "Anigit",
+       "userlogout": "Anigit",
+       "nologin": "Kontomik peqanngilatit? '''$1'''.",
+       "nologinlink": "Kontomik pilersitsigit",
+       "createaccount": "Kontomik nutaamik pilersitsigit",
+       "gotaccount": "Kontomik peqareerpit? '''$1'''.",
+       "gotaccountlink": "Iserit",
+       "createaccountmail": "e-mail-ikkut",
+       "badretype": "Isissutissat allanneqartut assigiinngillat.",
+       "userexists": "Atuisup atia atorneqareerpoq. Allamik qinersigit.",
+       "loginerror": "Iserniarnerlunneq",
+       "loginsuccesstitle": "Maanna isersimalerputit",
+       "loginsuccess": "Maanna {{SITENAME}} -mut isersimalerputit \"$1\" -itut taaguuserlutit.",
+       "wrongpassword": "Isissutissaq kukkusumik allanneqarsimavoq. Misileqqiuk.",
+       "mailmypassword": "E-mail-ikkut isissutissaq nutaaq nassiuguk",
+       "acct_creation_throttle_hit": "Konto-mik pilersitsereersimagavit pilersitseqqissinnaanngilatit, IP-adressit malillugu.\nTaamaattumik maannakkorpiaq kontomik pilersitsisinnaanngilatit.",
+       "oldpassword": "Isissutissatoqaq:",
+       "newpassword": "Isissutissaq nutaaq:",
+       "retypenew": "Isissutissaq nutaaq allaqqiuk",
+       "summary": "Allaaserinera:",
+       "subject": "Pineqartoq/qulequtaq:",
+       "minoredit": "Annikitsumik allannguutaavoq",
+       "watchthis": "Allaaserisaq ersersimatiguk",
+       "savearticle": "Toqqoruk",
+       "preview": "Isikkua",
+       "showpreview": "Isikkua takuuk",
+       "showdiff": "Allannguutit",
+       "anoneditwarning": "'''Mianersoqqussut:''' Isersimanak sulilerputit.\nIP adressit nuisassaaq massuma quppernerup oqaluttuassartaani.",
+       "accmailtitle": "Password-i nassiunneqarsimavoq.",
+       "accmailtext": "Password-i \"$1\" $2-mut nassiunneqarsimavoq.",
+       "newarticle": "(Nuutaq)",
+       "newarticletext": "Maanga innersuunneqarsimavutit quppernermut suli pilersinneqarsimanngitsumut.\nQupperneq pilersissagukku, boks-ip iluani allagit (takuuk [$1 ikiuutit] paasissutissaanerusut).\nMaanngarsimaguit kukkusumik, toortaat '''utimut''' tooruk.",
+       "anontalkpagetext": "---- ''Manna tassaavoq oqalliffik atuisumit anonym-iusumeersumit, konto-mik pilersitsisimanngitsumik imalt. atorneq ajugaanik.\nTaamaattumik IP-adressia kinaanerattut atortariaqassavarput.\nIP-adressi pigineqarsinnaavoq atuisunit arlalinnit.\nAtuisuuguit anonym-iusoq, isumaqarlutillu soqutiginngisannik oqaaseqarfigineqarlutit, qinnuigivatsigit [[Special:UserLogin/signup|atuisutut pilersitsissallutit]] aamma [[Special:UserLogin|iserlutit]], taava siunissami paarlattoornernik atuisuni arlalinni pinaveersaartoqarniassammat.''",
+       "noarticletext": "Maannamut una qupperneq allaffigineqanngilaq.\nTaamatut oqaasilimmik quppernerni allani [[Special:Search/{{PAGENAME}}|ujaasisinnaavutit]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} log-ini ujaasisinnavutillu] imaluunniit [{{fullurl:{{FULLPAGENAME}}|action=edit}} qupperneq pilersissinnaavat]</span>.",
+       "previewnote": "Eqqaamallugu isikkua takutinneqaannarpoq, toqqorneqanngilaq suli!",
+       "editing": "Aaqqissorpaa $1",
+       "editingsection": "Aaqqissorpaa $1 (immikkoortoq)",
+       "editingcomment": "Aaqqissorpaa $1 (immikkoortoq nutaaq)",
+       "yourtext": "Allatat",
+       "editingold": "'''Mianersoqqussut: Qupperneq pisoqaanerusoq aaqqissuutilerpat.'''\nToqqorukku quppernerup taamaannera taarserneqassaaq.",
+       "protectedpagewarning": "'''Mianersoqqussut: Una qupperneq illersugaavoq, administratorit kisimik aaqqissorsinnaavaat.'''",
+       "semiprotectedpagewarning": "'''Malugiuk:''' Qupperneq parnaaqqavoq, atuisutut nalunaarsimasut kisimik allanngortitersinnaavaat.",
+       "templatesused": "{{PLURAL:$1|Ilisserut|Ilisserutit}} quppernermi atorneqartoq/tut:",
+       "permissionserrorstext-withaction": "Pisinnaatitaaffeqanngilatit $2 atussallugu, {{PLURAL:$1|peqqutigalugu|peqqutigalugit}}:",
+       "moveddeleted-notice": "Una qupperneq peerneqarsimavoq.\nPeersinermut nuutsinermullu nalunaarsuutit ataani takuneqarsinnaapput.",
+       "currentrev": "Maanna taamaannera",
+       "currentrev-asof": "Maanna taamaannera $1-meersoq",
+       "revisionasof": "Taamaannera $1-meersoq",
+       "previousrevision": "← Pisoqaaneq",
+       "nextrevision": "Nutaaneq →",
+       "currentrevisionlink": "Massakkuunera takuuk",
+       "cur": "maanna",
+       "last": "siulia",
+       "page_first": "siulliit",
+       "page_last": "kingulliit",
+       "histlegend": "Nassuiaat: (maanna) = assigiinngissut maanna inneranut, (siulia) = assigiinngissut siulianut, M = annikitsumik allannguut",
+       "history-fieldset-title": "Oqaluttuassartaani qupperaagit",
+       "histfirst": "Pisoqaaneq",
+       "histlast": "Nutaaneq",
+       "history-title": "\"$1\"-p oqaluttuassartaa",
+       "compareselectedversions": "Qinikkat nalilersukkit",
+       "editundo": "peeruk",
+       "searchresults": "Ujaasinermi inernerit",
+       "searchresults-title": "Uuma ujarnera \"$1\"",
+       "prevn": "siulii {{PLURAL:$1|$1}}",
+       "nextn": "tullii {{PLURAL:$1|$1}}",
+       "viewprevnext": "Takuuk ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-exists": "'''Qupperneqarpoq \"[[:$1]]\" -mik atilimmik maani wikimi'''",
+       "searchmenu-new": "'''Qupperneq [[:$1]] pilersiguk maani wikimi'''",
+       "searchprofile-articles": "Imarisai",
+       "searchprofile-everything": "Tamarmik",
+       "searchprofile-advanced": "Ujaasiffik anneq",
+       "search-result-size": "$1 ({{PLURAL:$2|oqaaseq|$2 oqaatsit}})",
+       "search-redirect": "(nuunneq $1)",
+       "search-suggest": "Una piviuk: $1",
+       "search-nonefound": "Ujaasineq inerneqanngilaq",
+       "mypreferences": "Inissiffissat",
+       "prefs-rc": "Allannguutit kingulliit",
+       "saveprefs": "Toqqukkit",
+       "yourlanguage": "Oqaatsit:",
+       "group-sysop": "Administratorit",
+       "recentchanges": "Allannguutit kingulliit",
+       "recentchanges-legend": "Inissisimaffiit allannguutini kingullerni",
+       "recentchanges-summary": "Uani quppernermi '''{{SITENAME}}'''-mi allannguutit kingulliit malinnaavigisinnaavatit.",
+       "recentchanges-label-newpage": "Tassaavoq qupperneq nutaaq",
+       "recentchanges-label-minor": "Tassaavoq allannguut annikitsoq",
+       "recentchanges-label-bot": "Bot-ip allannguutaa",
+       "recentchanges-legend-newpage": "$1 - qupperneq nutaaq",
+       "rclistfrom": "Allannguutit kingulliit takukkit $3 $2 -nngaanniit",
+       "rcshowhideminor": "$1 allannguutit annikitsut",
+       "rcshowhidebots": "$1 robottit",
+       "rcshowhideliu": "$1 atuisut nalunaarsimasut",
+       "rcshowhideanons": "$1 atuisut anonymejusut",
+       "rcshowhidepatr": "$1 allannguutit misissorneqarsimasut",
+       "rcshowhidemine": "$1 nammineq tapit",
+       "rclinks": "Takutikkit $1 -it allannguutit kingulliit ulluni kingullerni $2 -ni<br />$3",
+       "diff": "assigiinng",
+       "hist": "oqalutt",
+       "hide": "Assequt",
+       "show": "Saqqummiuk",
+       "minoreditletter": "m",
+       "newpageletter": "N",
+       "boteditletter": "b",
+       "recentchangeslinked": "Allannguutit naleqqiussat",
+       "recentchangeslinked-feed": "Allannguutit naleqqiussat",
+       "recentchangeslinked-toolbox": "Allannguutit naleqqiussat",
+       "upload": "Fiilimik ilisigit",
+       "listfiles_user": "Atuisoq",
+       "file-anchor-link": "Assiliaq",
+       "filehist-datetime": "Ulloq/Piffissaq",
+       "filehist-user": "Atuisoq",
+       "imagelinks": "Innersuutit",
+       "mimesearch": "MIME ujaarlerit",
+       "randompage": "Nalaatsornermi qupperneq",
+       "statistics": "Kisitsisinngorlugit paasissutissat",
+       "newpages": "Quppernerit nutaat",
+       "move": "Nuuguk",
+       "pager-newer-n": "{{PLURAL:$1|nutaaneq 1|nutaanerit $1}}",
+       "pager-older-n": "{{PLURAL:$1|pisoqaaneq 1|pisoqaanerit $1}}",
+       "specialloguserlabel": "Atuisoq:",
+       "allarticles": "Quppernerit tamarmik",
+       "allpagessubmit": "Tassunngarit",
+       "categories": "Sunut atassusit",
+       "categoriespagetext": "Uku {{PLURAL:$1|sumut atassuseq|sunut atassusit}} imarivai quppernerit media-lluunniit.\n[[Special:UnusedCategories|Sunut atassusit]] atorneqanngitsut maani ilaanngillat.\nAamma takuuk [[Special:WantedCategories|sunut atassusinut kissaatigineqartut]].",
+       "categoriesfrom": "Takuuk qanoq aallartiffianeersumiit:",
+       "linksearch-ok": "Ujaruk",
+       "watchlist": "Ersersimasut",
+       "mywatchlist": "Nuisatiffikka",
+       "addedwatchtext": "Una qupperneq \"[[:$1]]\" ersersimatitannut ilanngunneqarpoq. Siunissami allannguutit ilinnut malugeqquneqartassapput aamma [[Special:RecentChanges|allannguutini kingullerni]] issusuumik allanneqartuusassallutik. Ersersimatikkusunngikkukku [[Special:Watchlist|piiginnassavat]] ersersimasuutitanni.",
+       "watch": "Ersilli",
+       "watchthispage": "Qupperneq ersersimatiguk",
+       "unwatch": "Ersitsinnagu",
+       "watching": "Saqqumitiguk",
+       "unwatching": "Saqquminera peeruk",
+       "excontent": "imarivaa: '$1'",
+       "excontentauthor": "imarivaa: '$1' (allattutuaavorlu '[[Special:Contributions/$2|$2]]')",
+       "delete-confirm": "Peeruk \"$1\"",
+       "actioncomplete": "Naammassivoq",
+       "deletedtext": "\"$1\" peerpoq. Takukkit $2 peerneqarsimasut kingulliit.",
+       "revertpage": "Inisseqqiineq [[User:$1|$1]]-meersoq, peerneqarpoq [[Special:Contributions/$2|$2]] ([[User talk:$2|diskussion]])-meersoq",
+       "prot_1movedto2": "[[$1]]-i nuunneqarsimavoq [[$2]]-mut",
+       "protect-expiry-options": "1 tiimi:1 hour,ulloq 1:1 day,sap akunn 1:1 week,sap akunn 2:2 weeks,qaammat 1:1 month,qaammatit 3:3 months,qaammatit 6:6 months,ukioq 1:1 year,killeqanngitsoq:infinite",
+       "undeletebtn": "Inisseqqiguk",
+       "undelete-search-submit": "Ujarlerit",
+       "namespace": "Quppernerup ilusia:",
+       "invert": "Quppernerup ilusia qinernagu",
+       "blanknamespace": "(Pingaarneq)",
+       "contributions": "Atuisup tapii",
+       "mycontris": "Tapikka",
+       "contribsub2": "$1-meersoq ($2)",
+       "uctop": "(kingulleq)",
+       "month": "Qaammat:",
+       "year": "Ukioq:",
+       "sp-contributions-newbies": "Atuisut nutaaginnaat takukkit",
+       "sp-contributions-talk": "oqallinneq",
+       "sp-contributions-search": "Tapiisunik ujaasineq",
+       "sp-contributions-username": "IP adresse imalt. atuisoq:",
+       "sp-contributions-submit": "Ujaruk",
+       "whatlinkshere": "Suna maangamut innersuussisoq",
+       "whatlinkshere-prev": "{{PLURAL:$1|siulia|siulii $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|tullia|tullii $1}}",
+       "blockip": "Atuisoq asseruk",
+       "blockip-legend": "Atuisoq asseruk",
+       "ipaddressorusername": "IP adresse imalt. atuisoq:",
+       "ipboptions": "2 tiimit:2 hours,ulloq 1:1 day,ullut 3:3 days,sap akunn 1:1 week,sap akunn 2:2 weeks,qaammat 1:1 month,qaammatit 3:3 months,qaammatit 6:6 months,ukioq 1:1 year,killeqanngitsoq:infinite",
+       "ipblocklist-submit": "Ujarlerit",
+       "infiniteblock": "killeqanngitsoq",
+       "expiringblock": "atorunnaassaaq $1 $2-nngoruni",
+       "blocklink": "assersoruk",
+       "contribslink": "tapikkat",
+       "blocklogentry": "asserpaa [[$1]] $2-mik sivissusilimmik $3",
+       "movearticle": "Qupperneq nuuguk",
+       "move-watch": "Qupperneq ersersimatiguk",
+       "movepagebtn": "Qupperneq nuuguk",
+       "pagemovedsub": "Nuunnera iluatsippoq",
+       "movepage-moved": "Qupperneq '''\"$1\" uunga nuuppoq \"$2\"'''",
+       "allmessages-language": "Oqaatsit:",
+       "allmessages-filter-submit": "Takuuk",
+       "thumbnail-more": "Allisiguk",
+       "tooltip-pt-userpage": "Atuisutut quppernerit",
+       "tooltip-pt-mytalk": "Oqalliffiit",
+       "tooltip-pt-preferences": "Inissiinikka",
+       "tooltip-pt-mycontris": "Tapikkatit",
+       "tooltip-pt-login": "Iseqquneqaraluarputit, pitsaanerussagaluarpoq",
+       "tooltip-pt-logout": "Aniffik",
+       "tooltip-ca-talk": "Quppernerup imaanik oqallinneq",
+       "tooltip-ca-edit": "Allanngortiterisinnaavutit. Isikkua takulaariuk",
+       "tooltip-ca-history": "Quppernerup siulii",
+       "tooltip-ca-move": "Qupperneq nuuguk",
+       "tooltip-ca-watch": "Saqqumitiguk",
+       "tooltip-search": "Ujaarlerit {{SITENAME}}",
+       "tooltip-search-go": "Tassunngarit nassaassappat",
+       "tooltip-search-fulltext": "Taanna ujaruk",
+       "tooltip-n-mainpage": "Saqqaa iseruk",
+       "tooltip-n-mainpage-description": "Saqqaa iseruk",
+       "tooltip-n-portal": "Suliaq, ilitsersuut, nassaassaasinnaasullu",
+       "tooltip-n-currentevents": "Maannakkut pisut tunuliaqutai takukkit",
+       "tooltip-n-recentchanges": "Wikimi allannguutit kingulliit",
+       "tooltip-n-randompage": "Allaaserisamukarit",
+       "tooltip-n-help": "Qanoq iliussaanga ...",
+       "tooltip-t-whatlinkshere": "Innersuussami saqqummiussat",
+       "tooltip-t-recentchangeslinked": "Massuma quppernerani allannguutit kingulliit",
+       "tooltip-t-upload": "Assinik mediafiilinilluunniit ilisigit",
+       "tooltip-t-specialpages": "Quppernerit immikkut ittut nassaassaasinnaasut",
+       "tooltip-t-print": "Quppernerup naqikkuminarnera",
+       "tooltip-t-permalink": "Massuma quppernerup taamaaqqaarnera",
+       "tooltip-ca-nstab-main": "Imarisaa takuuk",
+       "tooltip-save": "Allannguutitit toqqukkit",
+       "tooltip-preview": "Isikkua takuuk, toqqortinnaguk atortaruk!",
+       "lastmodifiedatby": "Una qupperneq kingullermik allanngortinneqarsimavoq $2, $1 $3-mit.",
+       "previousdiff": "← Assigiinngissut siulia",
+       "nextdiff": "Assigiinngissut tullia →",
+       "ilsubmit": "Ujarlerit",
+       "namespacesall": "tamarmik",
+       "monthsall": "tamarmik",
+       "autosumm-new": "Qupperneq pilersippaa '$1'",
+       "specialpages": "Quppernerit immikkut ittut",
+       "searchsuggest-search": "Ujarlerit"
 }
index 1c97771..0d10bec 100644 (file)
        "permalink": "តំណភ្ជាប់អចិន្ត្រៃយ៍",
        "print": "បោះពុម្ព",
        "view": "មើល",
+       "view-foreign": "មើលលើ $1",
        "edit": "កែប្រែ",
        "create": "បង្កើត",
        "editthispage": "កែប្រែទំព័រនេះ",
        "otherlanguages": "ជាភាសាដទៃទៀត",
        "redirectedfrom": "(ត្រូវបានបញ្ជូនបន្តពី $1)",
        "redirectpagesub": "ទំព័របញ្ជូនបន្ត",
+       "redirectto": "បញ្ជូនបន្តទៅ៖",
        "lastmodifiedat": "ទំព័រនេះត្រូវបានកែចុងក្រោយនៅ$2 $1",
        "viewcount": "ទំព័រនេះ​ត្រូវបានចូលមើល​ចំនួន'''{{PLURAL:$1|ម្ដង|$1ដង}}'''",
        "protectedpage": "ទំព័រដែលត្រូវបានការពារ",
        "hidetoc": "លាក់",
        "collapsible-collapse": "បង្រួម",
        "collapsible-expand": "ពន្លាត",
+       "confirmable-confirm": "តើ {{GENDER:$1|អ្នក}} ប្រាកដហើយ?",
+       "confirmable-yes": "បាទ/ចាស",
+       "confirmable-no": "ទេ",
        "thisisdeleted": "មើល ឬ​ ស្ដារ $1 ឡើងវិញ?",
        "viewdeleted": "មើល $1?",
        "restorelink": "{{PLURAL:$1|កំណែប្រែមួយត្រូវបានលុបចោល|កំណែប្រែចំនួន $1 ត្រូវបានលុបចោល}}",
        "viewsourcetext": "អ្នកអាចមើលនិងចម្លងកូដរបស់ទំព័រនេះ៖",
        "viewyourtext": "អ្នកអាចមើលនិងចម្លងកូដរបស់'''ការកែប្រែរបស់អ្នក'''មកកាន់ទំព័រនេះ៖",
        "protectedinterface": "ទំព័រនេះផ្ដល់នូវអត្ថបទអន្តរមុខសម្រាប់សូហ្វវែរនៅក្នុងវិគីនេះ និងត្រូវបានចាក់សោដើម្បីចៀសវាងការបំពាន។\nដើម្បីបន្ថែមឬផ្លាស់ប្ដូរការបកប្រែសំរាប់វិគីទាំងអស់ សូមប្រើប្រាស់ [//translatewiki.net/ translatewiki.net] ដែលជាគំរោងបកប្រែរបស់MediaWiki។",
-       "editinginterface": "'''ប្រយ័ត្ន៖''' អ្នកកំពុងតែកែប្រែទំព័រដែលបានប្រើប្រាស់​ដើម្បីផ្ដល់ជូនអន្តរមុខសម្រាប់សូហ្វវែរ។ បំលាស់ប្ដូរចំពោះទំព័រនេះ​នឹងប៉ះពាល់ដល់ទ្រង់ទ្រាយរបស់ទំព័រអន្តរមុខសំរាប់អ្នកប្រើប្រាស់​ជាច្រើន ដែលប្រើប្រាស់វិគីនេះ។ ដើម្បីបន្ថែមឬផ្លាស់ប្ដូរការបកប្រែ​សំរាប់វិគីទាំងអស់ សូបប្រើប្រាស់  [//translatewiki.net/wiki/Main_Page?setlang=km translatewiki.net] គម្រោង​បកប្រែរបស់មេឌាវិគី ។",
+       "editinginterface": "'''ប្រយ័ត្ន៖''' អ្នកកំពុងតែកែប្រែទំព័រដែលបានប្រើប្រាស់​ដើម្បីផ្ដល់ជូនអន្តរមុខសម្រាប់សូហ្វវែរ។ បំលាស់ប្ដូរចំពោះទំព័រនេះ​នឹងប៉ះពាល់ដល់ទ្រង់ទ្រាយរបស់ទំព័រអន្តរមុខសំរាប់អ្នកប្រើប្រាស់​ជាច្រើន ដែលប្រើប្រាស់វិគីនេះ។",
+       "translateinterface": "ដើម្បីបន្ថែមឬកែប្រែការបកប្រែសម្រាប់វិគីទាំងអស់ សូមប្រើប្រាស់ [//translatewiki.net/ translatewiki.net] ដែលជាគម្រោងបកប្រែវិគីមេឌា។",
        "cascadeprotected": "ទំព័រនេះត្រូវបានការពារពីការការប្រែដោយសារវាមាន{{PLURAL:$1|ទំព័រ, ដែលមាន}} ដែលត្រូវបានការពារជាមួយជំរើស\"ជាបណ្ដាក់\"៖\n$2",
        "namespaceprotected": "អ្នកមិនមានសិទ្ធិកែប្រែទំព័រក្នុងប្រភេទ'''$1'''ទេ។",
        "customcssprotected": "អ្នកមិនមាន​ការអនុញ្ញាត​ក្នុងការកែប្រែទំព័រ CSS នេះទេ ព្រោះវាផ្ទុកការកំណត់ផ្ទាល់ខ្លួនផ្សេងៗរបស់អ្នកប្រើប្រាស់ម្នាក់ផ្សេងទៀត។",
        "invalidtitle-knownnamespace": "ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះ \"$2\" និងអត្ថបទ \"$3\"",
        "invalidtitle-unknownnamespace": "ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះមិនស្គាល់លេខ $1 និងអត្ថបទ \"$2\"",
        "exception-nologin": "មិនទាន់កត់ឈ្មោះចូលទេ",
-       "exception-nologin-text": "សូម[[Special:Userlogin|lកត់ឈ្មោះចូល]]ដើម្បីចូលអានទំព័រឬធ្វើសកម្មភាពនេះ។",
+       "exception-nologin-text": "សូមកត់ឈ្មោះចូលដើម្បីចូលអានទំព័រឬធ្វើសកម្មភាពនេះ។",
        "exception-nologin-text-manual": "សូម $1 ដើម្បីអាចចូលមើលទំព័រនេះឬធ្វើសកម្មភាពអ្វីមួយ។",
        "virus-badscanner": "ការ​កំណត់​រចនា​សម្ព័ន្ធ​មិន​ល្អ​៖ កម្មវិធី​ស្កេន​មេរោគមិន​ស្គាល់​៖ ''$1''",
        "virus-scanfailed": "ស្កេនមិនបានសំរេច (កូដ $1)",
        "gotaccountlink": "កត់ឈ្មោះចូល",
        "userlogin-resetlink": "តើអ្នកភ្លេចព័ត៌មានលម្អិតសម្រាប់កត់ឈ្មោះចូលហើយ?",
        "userlogin-resetpassword-link": "អ្នកភ្លេចពាក្យសម្ងាត់ហើយ?",
+       "userlogin-helplink2": "ជំនួយលើការកត់ឈ្មោះចូល",
        "userlogin-loggedin": "អ្នកបានកត់ឈ្មោះចូលជា {{GENDER:$1|$1}} ហើយ។\nប្រើសំណុំបែបបទខាងក្រោមដើម្បីកត់ឈ្មោះចូលជាអ្នកប្រើប្រាស់ផ្សេងម្នាក់ទៀត។",
        "userlogin-createanother": "បង្កើតគណនីមួយទៀត",
        "createacct-emailrequired": "អាសយដ្ឋានអ៊ីមែល",
        "loginlanguagelabel": "ភាសា៖ $1",
        "createacct-another-realname-tip": "អ្នកអាចផ្ដល់ឈ្មោះពិតរបស់អ្នកក៏បានមិនផ្ដល់ក៏បាន។ បើអ្នកផ្ដល់ឱ្យ វានឹងត្រូវបានប្រើប្រាស់់ដើម្បីបញ្ជាក់ភាពជាម្ចាស់​លើការរួមចំណែក​នានា​របស់អ្នក។",
        "pt-login": "កត់ឈ្មោះចូល",
+       "pt-login-button": "កត់ឈ្មោះចូល",
        "pt-createaccount": "បង្កើតគណនី",
        "pt-userlogout": "កត់ឈ្មោះចេញ",
        "php-mail-error-unknown": "កំហុសមិនស្គាល់នៅក្នុងអនុគមន៍ mail() របស់ PHP",
        "resetpass-temp-emailed": "អ្នកបានកត់ឈ្មោះចូលដោយប្រើលេខកូដបណ្ដោះអាសន្នផ្ញើតាមអ៊ីមែល។\nដើម្បីបញ្ចប់ការកត់ឈ្មោះចូល អ្នកចាំបាច់ត្រូវតែកំណត់ពាក្យសម្ងាត់ថ្មីនៅទីនេះ៖",
        "resetpass-temp-password": "ពាក្យសម្ងាត់បណ្តោះអាសន្ន:",
        "resetpass-expired": "ពាក្យសម្ងាត់របស់អ្នកហួសសុពលភាពហើយ។ សូមកំណត់ពាក្យសម្ងាត់ថ្មីដើម្បីកត់ឈ្មោះចូល។",
-       "resetpass-expired-soft": "ពាក្យសម្ងាត់របស់អ្នកហួសសុពលភាពហើយ ហើយអ្នកត្រូវតែកំណត់វាឡើងវិញ។ សូមជ្រើសរើសពាក្យសម្ងាត់ថ្មីឥឡូវនេះ ឬចុចបោះបង់ដើម្បីកំណត់វានៅពេលក្រោយ។",
-       "passwordreset": "កំណត់​ពាក្យសម្ងាត់​សាឡើងវិញ",
+       "resetpass-expired-soft": "ពាក្យសម្ងាត់របស់អ្នកហួសសុពលភាពហើយ ហើយអ្នកត្រូវតែកំណត់វាឡើងវិញ។ សូមជ្រើសរើសពាក្យសម្ងាត់ថ្មីឥឡូវនេះ ឬចុច\"{{int:resetpass-submit-cancel}}\"ដើម្បីកំណត់វានៅពេលក្រោយ។",
+       "resetpass-validity-soft": "ពាក្យសម្ងាត់របស់អ្នកមិនត្រឹមត្រូវទេ៖ $1\n\nសូមជ្រើសរើសពាក្យសម្ងាត់ថ្មីមួយឥឡូវនេះ ឬក៏ចុច\"{{int:resetpass-submit-cancel}}\" ដើម្បីកំណត់វាឡើងវិញនៅពេលក្រោយ។",
+       "passwordreset": "កំណត់​ពាក្យសម្ងាត់​ឡើងវិញ",
        "passwordreset-text-one": "បំពេញសំណុំបែបបទនេះដើម្បីស្ដារពាក្យសម្ងាត់របស់អ្នក។",
        "passwordreset-text-many": "{{PLURAL:$1|សូមបំពេញក្នុងប្រអប់មួយក្នុងចំណោមប្រអប់ខាងក្រោមដើម្បីទទួលពាក្យសម្ងាត់បណ្ដោះអាសន្នមួយតាមរយៈអ៊ីមែល។}}",
-       "passwordreset-legend": "á\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8bâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\9fá\9e¶á\9e¡á\9e¾á\9e\84á\9e\9cá\9e·á\9e\89",
+       "passwordreset-legend": "កំណត់​ពាក្យសម្ងាត់​ឡើងវិញ",
        "passwordreset-disabled": "មុខងារប្ដូរទៅពាក្យសម្ងាត់ដើមត្រូវបានបិទមិនអោយប្រើនៅលើវិគីនេះ។",
        "passwordreset-emaildisabled": "មុខងារអ៊ីមែលត្រូវបានបិទមិនអោយប្រើនៅលើវិគីនេះ។",
        "passwordreset-username": "អត្តនាម៖",
        "passwordreset-emailsent-capture": "អ៊ីមែលស្ដារពាក្យសម្ងាត់មួយដូចបង្ហាញខាងក្រោមត្រូវបានផ្ញើទៅហើយ។",
        "passwordreset-emailerror-capture": "អ៊ីមែលស្ដារពាក្យសម្ងាត់មួយដូចបង្ហាញខាងក្រោមត្រូវបានបង្កើតហើយ ប៉ុន្តែការផ្ញើទៅកាន់ {{GENDER:$2|អ្នកប្រើប្រាស់}}មិនបានសំរេចទេ៖ $1",
        "changeemail": "ផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែល",
-       "changeemail-header": "ផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែលសំរាប់គណនីនេះ",
        "changeemail-text": "សូមបំពេញសំនុំបែបបទនេះដើម្បីផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែលរបស់អ្នក។ អ្នកនឹងត្រូវបញ្ចូលពាក្យសម្ងាត់ដើម្បីអះអាងលើការផ្លាស់ប្ដូរនេះ។",
        "changeemail-no-info": "អ្នក​ចាំបាច់​ត្រូវតែ​កត់ឈ្មោះចូល ដើម្បី​ចូលទៅកាន់​ទំព័រ​នេះ​ដោយផ្ទាល់​។",
        "changeemail-oldemail": "អាសយដ្ឋានអ៊ីមែលបច្ចុប្បន្ន៖",
        "changeemail-none": "(គ្មាន​)",
        "changeemail-password": "ពាក្យសំងាត់{{SITENAME}}របស់អ្នក:",
        "changeemail-submit": "ផ្លាស់ប្ដូរអ៊ីមែល",
-       "changeemail-cancel": "បោះបង់",
        "changeemail-throttled": "អ្នកបានព្យាយាមកត់ឈ្មោះចូលច្រើនដងពេកហើយ។​\nសូមរង់ចាំរយៈពេល$1 មុនពេលសាកល្បងម្ដងទៀត។",
        "bold_sample": "អក្សរដិត",
        "bold_tip": "អក្សរដិត",
        "preview": "មើលជាមុន",
        "showpreview": "បង្ហាញ​ការមើលជាមុន",
        "showdiff": "បង្ហាញ​បន្លាស់ប្ដូរ",
-       "anoneditwarning": "'''ប្រយ័ត្ន ៖''' អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ អាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។",
-       "anonpreviewwarning": "''អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ ប្រសិនបើអ្នកធ្វើការរក្សាទុក នោះអាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។''",
+       "anoneditwarning": "'''ប្រយ័ត្ន ៖''' អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ អាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។ បើសិនជាអ្នក <strong>[$1 កត់ឈ្មោះចូល]</strong> ឬ <strong>[$2 បង្កើតគណនី]</strong> នោះការកែប្រែរបស់អ្នកនឹងត្រូវភ្ចាប់ជាមួយអត្តនាមរបស់អ្នកផង នឹងមានផលប្រយោជន៍ផ្សេងទៀតផង។",
+       "anonpreviewwarning": "<em>អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ ប្រសិនបើអ្នកធ្វើការរក្សាទុក នោះអាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។</em>",
        "missingsummary": "'''រំលឹក៖''' អ្នកមិនទាន់បានផ្ដល់ចំណារពន្យល់អំពីកំណែប្រែនេះទេ។\n\nបើសិនជាអ្នកចុច '''រក្សាទុក''' ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានចំណារពន្យល់។",
        "missingcommenttext": "សូមវាយបញ្ចូលយោបល់មួយនៅខាងក្រោម។",
        "missingcommentheader": "'''រំលឹក៖''' អ្នកមិនទាន់បានផ្ដល់ឱ្យនូវ ប្រធានបទ/ចំណងជើង របស់មតិយោបល់នេះទេ។\nបើសិនជាអ្នកចុច \"{{int:savearticle}}\" ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានវា។",
        "edit-gone-missing": "មិនអាចបន្ទាន់សម័យទំព័រនេះទេ។\n\nទំព័រនេះហាក់ដូចជាត្រូវបានលុបចោលហើយ។",
        "edit-conflict": "កែប្រែ​ភាពឆ្គង​។",
        "edit-no-change": "ការកែប្រែរបស់អ្នកត្រូវបានមិនទុកជាការទេ ព្រោះគ្មានការផ្លាស់ប្ដូរណាមួយត្រូវបានធ្វើនៅលើអត្ថបទនេះទេ។",
+       "postedit-confirmation-created": "បានបង្កើតទំព័ររូចហើយ។",
+       "postedit-confirmation-restored": "បានស្ដារទំព័រឡើងវិញរួចហើយ។",
        "postedit-confirmation-saved": "កំណែប្រែរបស់អ្នកត្រូវបានរក្សាទុកហើយ។",
        "edit-already-exists": "មិនអាចបង្កើតទំព័រថ្មីមួយទេ។\n\nទំព័រនេះមានរួចហើយ។",
        "defaultmessagetext": "អត្ថបទសារតាមលំនាំដើម",
        "currentrev": "កំណែបច្ចុប្បន្ន",
        "currentrev-asof": "កំណែប្រែបច្ចុប្បន្ន $1",
        "revisionasof": "កំណែ​របស់ $1",
-       "revision-info": "á\9e\80á\9f\86á\9e\8eá\9f\82â\80\8bá\9e\9aá\9e\94á\9e\9fá\9f\8b $1 á\9e\8aá\9f\84á\9e\99 $2",
+       "revision-info": "á\9e\80á\9f\86á\9e\8eá\9f\82â\80\8bá\9e\93á\9f\85 $1 á\9e\8aá\9f\84á\9e\99 {{GENDER:$6|$2}}$7",
        "previousrevision": "← កំណែ​មុន",
        "nextrevision": "កំណែបន្ទាប់ →",
        "currentrevisionlink": "កំណែបច្ចុប្បន្ន",
        "mergehistory-same-destination": "ទំព័រប្រភពនិងទំព័រគោលដៅមិនអាចមានចំណងជើងដូចគ្នាបានទេ។",
        "mergehistory-reason": "មូលហេតុ៖",
        "mergelog": "កំណត់ហេតុនៃការច្របាច់បញ្ចូលគ្នា",
-       "pagemerge-logentry": "បានច្របាច់បញ្ចូល[[$1]]ទៅក្នុង[[$2]] (ចំនួនកំណែរហូតដល់$3)",
        "revertmerge": "បំបែកចេញ",
        "mergelogpagetext": "ខាងក្រោមគឺជាតារាងនៃការច្របាច់បញ្ចូលគ្នាថ្មីៗបំផុតរបស់ប្រវត្តិនៃទំព័រមួយទៅក្នុងប្រវត្តិនៃទំព័រមួយទៀត។",
        "history-title": "ប្រវត្តិកំណែប្រែរបស់ \"$1\"",
        "shown-title": "បង្ហាញ $1 {{PLURAL:$1|លទ្ធផល|លទ្ធផល}}ក្នុងមួយទំព័រ",
        "viewprevnext": "មើល ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "* ទំព័រ '''[[$1]]'''",
-       "searchmenu-new": "'''បង្កើតទំព័រ \"[[:$1]]\" នៅ​លើ​វិគី​នេះ!'''",
+       "searchmenu-new": "<strong>បង្កើតទំព័រ \"[[:$1]]\" នៅ​លើ​វិគី​នេះ!</strong> {{PLURAL:$2|0=|សូមមើលផងដែរទំព័រដែលរកឃើញជាមួយពាក្យដែលអ្នកស្វែងរក។|សូមមើលផងដែរលទ្ធផលដែលរកឃើញ។}}",
        "searchprofile-articles": "ទំព័រ​មាតិកា",
        "searchprofile-images": "ពហុ​ព័ត៌មាន",
        "searchprofile-everything": "ទាំងអស់",
        "search-result-category-size": "{{PLURAL:$1|សមាជិកម្នាក់|សមាជិក$1នាក់}} ({{PLURAL:$2|កូនចំណាត់ថ្នាក់ក្រុម១|$2 កូនចំណាត់ថ្នាក់ក្រុម}}, {{PLURAL:$3|1 ឯកសារ|$3 ឯកសារ}})",
        "search-redirect": "(បញ្ជូនបន្ត $1)",
        "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''' លទ្ឋផល}} ចាប់ផ្ដើមពីលេខ #'''$2'''។",
-       "showingresultsheader": "{{PLURAL:$5|លទ្ឋផល '''$1''' ក្នុងចំណោមលទ្ឋផលសរុប '''$3'''|លទ្ឋផល '''$1 - $2''' ក្នុងចំណោមលទ្ឋផលសរុប '''$3'''}} សម្រាប់ '''$4'''",
        "search-nonefound": "មិនមានលទ្ធផលណាមួយ​ត្រូវគ្នានឹងសំណើសុំនេះទេ",
        "powersearch-legend": "ស្វែងរកថ្នាក់ខ្ពស់",
        "powersearch-ns": "ស្វែងរកក្នុងលំហឈ្មោះ៖",
        "preferences": "ចំណង់ចំណូលចិត្ត",
        "mypreferences": "ចំណង់ចំណូលចិត្ត​",
        "prefs-edits": "ចំនួនកំណែប្រែ៖",
+       "prefsnologintext2": "សូមកត់ឈ្មោះចូលដើម្បីផ្លាស់ប្ដូរចំណង់ចំណូលចិត្តរបស់អ្នក។",
        "prefs-skin": "សំបក",
        "skin-preview": "មើលជាមុន",
        "datedefault": "គ្មានចំណូលចិត្ត",
        "gender-female": "ស្រី",
        "prefs-help-gender": "ចំណង់ចំណូលចិត្តនេះកំណត់ក៏បានមិនកំណត់ក៏បាន៖ ប្រើសំរាប់អោយសូហ្វវែរហៅតាមភេទអោយបាមត្រឹមត្រូវ។ ព័ត៌មាននេះនឹងត្រូវបង្ហាញជាសាធារណៈ។",
        "email": "អ៊ីមែល",
-       "prefs-help-realname": "á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\96á\9e·á\9e\8fá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\80á\9f\8fá\9e\94á\9e¶á\9e\93á\9e\98á\9e·á\9e\93á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\80á\9f\8fá\9e\94á\9e¶á\9e\93á\9f\94 á\9e\94á\9e¾á\9e¢á\9f\92á\9e\93á\9e\80á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e±á\9f\92á\9e\99 á\9e\9cá\9e¶á\9e\93á\9e¹á\9e\84á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9f\8bá\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\97á\9e¶á\9e\96á\9e\87á\9e¶á\9e\98á\9f\92á\9e\85á\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\9bá\9e¾á\9e\80á\9e¶á\9e\9aá\9e\9aá\9e½á\9e\98á\9e\85á\9f\86á\9e\8eá\9f\82á\9e\80â\80\8bá\9e\93á\9e¶á\9e\93á\9e​របស់អ្នក។",
+       "prefs-help-realname": "á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\96á\9e·á\9e\8fá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\80á\9f\8fá\9e\94á\9e¶á\9e\93á\9e\98á\9e·á\9e\93á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\80á\9f\8fá\9e\94á\9e¶á\9e\93á\9f\94 á\9e\94á\9e¾á\9e¢á\9f\92á\9e\93á\9e\80á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e±á\9f\92á\9e\99 á\9e\9cá\9e¶á\9e\93á\9e¹á\9e\84á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9f\8bá\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\97á\9e¶á\9e\96á\9e\87á\9e¶á\9e\98á\9f\92á\9e\85á\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\9bá\9e¾á\9e\9fá\9f\92á\9e\93á\9e¶á\9e\8aá\9f\83​របស់អ្នក។",
        "prefs-help-email": "អ្នកអាចផ្ដល់អាសយដ្ឋានអ៊ីមែលរបស់អ្នកក៏បានមិនផ្ដល់ក៏បាន។ ប៉ុន្ដែអាសយដ្ឋានអ៊ីមែលដែលផ្ដល់អោយនឹងមានប្រយោជន៍ក្នុងការប្ដូរពាក្យសម្ងាត់ ពេលដែលអ្នកភ្លេចវា។",
        "prefs-help-email-others": "អ្នកក៏អាចជ្រើសរើស​ការផ្ដល់លទ្ឋភាព​​ឱ្យអ្នកដទៃទាក់ទងអ្នក​តាមរយៈ​​ទំព័រអ្នកប្រើប្រាស់​​ឬទំព័រពិភាក្សារបស់អ្នក​​ដោយមិនចាំបាច់ឱ្យគេដឹងពីអត្តសញ្ញាណរបស់អ្នកផងដែរ។",
        "prefs-help-email-required": "អាសយដ្ឋានអ៊ីមែលត្រូវការជាចាំបាច់។",
        "right-move": "ប្ដូរទីតាំងទំព័រ",
        "right-move-subpages": "ប្ដូរទីតាំងទំព័ររួមជាមួយទំព័ររងរបស់វា",
        "right-move-rootuserpages": "ប្ដូរទីតាំងឫសទំព័រអ្នកប្រើប្រាស់",
+       "right-move-categorypages": "ប្ដូរទីតាំងទំព័រចំណាត់ថ្នាក់ក្រុម",
        "right-movefile": "ប្ដូរទីតាំងឯកសារ",
        "right-suppressredirect": "មិនបង្កើតការបញ្ជូនបន្តពីទំព័រប្រភពនៅពេលប្ដូរទីតាំងទំព័រ",
        "right-upload": "ផ្ទុកឡើងឯកសារ",
        "action-move": "ប្ដូរទីតាំងទំព័រនេះ",
        "action-move-subpages": "ប្ដូរទីតាំងទំព័រនេះព្រមទាំងអនុទំព័ររបស់វា",
        "action-move-rootuserpages": "ប្ដូរទីតាំងឫសទំព័រអ្នកប្រើប្រាស់",
+       "action-move-categorypages": "ប្ដូរទីតាំងទំព័រចំណាត់ថ្នាក់ក្រុម",
        "action-movefile": "ប្ដូរទីតាំងឯកសារនេះ",
        "action-upload": "ផ្ទុកឡើងឯកសារនេះ",
        "action-reupload": "ផ្ទុកជាន់ពីលើឯកសារដែលមានស្រាប់ហើយនេះ",
        "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-selectcategory": "បង្ហាញទំព័រចៃដន្យពីចំណាត់ថ្នាក់ក្រុម៖ $1 $2។",
-       "randomincategory-selectcategory-submit": "ទៅ",
        "randomredirect": "ទំព័របញ្ជូនបន្តចៃដន្យ",
        "randomredirect-nopages": "គ្មានទំព័របញ្ជូនបន្តណាមួយនៅក្នុងប្រភេទ \"$1\" ទេ។",
        "statistics": "ស្ថិតិ",
        "statistics-header-pages": "ស្ថិតិទំព័រ",
        "statistics-header-edits": "ស្ថិតិកំណែប្រែ",
-       "statistics-header-views": "មើលស្ថិតិ",
        "statistics-header-users": "ស្ថិតិអ្នកប្រើប្រាស់",
        "statistics-header-hooks": "ស្ថិតិ​ដទៃទៀត​",
        "statistics-articles": "ទំព័រខ្លឹមសារ",
        "statistics-files": "ឯកសារបានផ្ទុកឡើង",
        "statistics-edits": "ការកែប្រែទំព័រចាប់តាំងពី{{SITENAME}}ត្រូវបានដំឡើង",
        "statistics-edits-average": "កំណែប្រែជាមធ្យមក្នុងមួយទំព័រ",
-       "statistics-views-total": "ចំនួនការចូលមើលសរុប",
-       "statistics-views-total-desc": "មិនរាប់បញ្ចូលការចូលមើលទំព័រដែលគ្មានរូបរាងនិងទំព័រពិសេសៗទេ",
-       "statistics-views-peredit": "ចំនួនការចូលមើលក្នុងមួយកំណែប្រែ",
        "statistics-users": "[[Special:ListUsers|អ្នកប្រើប្រាស់]]ដែលបានចុះឈ្មោះ",
        "statistics-users-active": "អ្នកប្រើប្រាស់សកម្ម",
        "statistics-users-active-desc": "អ្នក​ប្រើប្រាស់​ដែល​បាន​អនុវត្ត​សកម្មភាព​ក្នុង​{{PLURAL:$1|ថ្ងៃ​}}ចុង​ក្រោយ​",
-       "statistics-mostpopular": "ទំព័រដែលត្រូវបានមើលច្រើនបំផុត",
        "doubleredirects": "ទំព័របញ្ជូនបន្តទ្វេដង",
        "doubleredirectstext": "ទំព័រនេះរាយឈ្មោះទំព័រដែលបញ្ជូនបន្តទៅទំព័របញ្ជូនបន្ដផ្សេងទៀត។\n\nជួរនីមួយៗមានតំនភ្ជាប់ទៅកាន់ទំព័របញ្ជូនបន្តទី១និងទី២ ព្រមជាមួយទំព័រគោលដៅរបស់ទំព័របញ្ជូនបន្តទី២(ដែលជាធម្មតានេះក៏ជាទំព័រគោលដៅ\"ពិត\"របស់ទំព័របញ្ជូនបន្តទី១ដែរ)។",
        "double-redirect-fixed-move": "[[$1]] ត្រូវបានដកចេញ។\n\nវាត្រូវបានបញ្ជូនបន្តទៅ [[$2]]",
        "uncategorizedtemplates": "ទំព័រគំរូគ្មានចំណាត់ថ្នាក់ក្រុម",
        "unusedcategories": "ចំណាត់ថ្នាក់ក្រុមដែលមិនត្រូវបានប្រើប្រាស់",
        "unusedimages": "ឯកសារ(មេឌា​ រូបភាព)ដែលមិនត្រូវបានប្រើប្រាស់",
-       "popularpages": "ទំព័រដែលមានប្រជាប្រិយ",
        "wantedcategories": "ចំណាត់ថ្នាក់ក្រុមដែលគ្រប់គ្នាចង់បាន",
        "wantedpages": "ទំព័រ​ដែល​គ្រប់គ្នា​ចង់បាន",
        "wantedpages-badtitle": "ចំណងជើង​មិន​ត្រឹមត្រូវ​នៅ​ក្នុង​សំនុំ​លទ្ធផល​៖ $1",
        "booksources": "ប្រភពសៀវភៅ",
        "booksources-search-legend": "ស្វែងរកប្រភពសៀវភៅ",
        "booksources-isbn": "លេខ​កូដ​សៀវ​ភៅ​ ISBN ៖",
-       "booksources-go": "ទៅ",
+       "booksources-search": "ស្វែងរក",
        "booksources-text": "ខាងក្រោមនេះជាបញ្ជីនៃតំណភ្ជាប់ទៅវិបសាយនានាដែលលក់​សៀវភៅថ្មីនិងជជុះ ហើយអាចផ្ដល់ព័ត៌មានបន្ថែមផ្សេងទៀតអំពីសៀវភៅដែលអ្នកកំពុងស្វែងរក៖",
        "booksources-invalid-isbn": "លេខISBNដែលអ្នកផ្ដល់អោយហាក់ដូចជាមិនត្រឹមត្រូវទេ។ សូមពិនិត្យក្រែងលោមានកំហុសក្នុងការចម្លងចេញពីប្រភពដើម។",
        "specialloguserlabel": "អ្នកប្រព្រឹត្តិ៖",
        "listgrouprights-removegroup-self": "យក​ចេញ​{{PLURAL:$2|ក្រុម}}ពី​​គណនី​ផ្ទាល់ខ្លួន​៖ $1",
        "listgrouprights-addgroup-self-all": "បន្ថែម​ក្រុម​ទាំងអស់​ទៅ​គណនី​ផ្ទាល់ខ្លួន​",
        "listgrouprights-removegroup-self-all": "យក​ចេញ​​ក្រុម​ទាំងអស់​ពី​​គណនី​ផ្ទាល់ខ្លួន​",
+       "trackingcategories-name": "ឈ្មោះសារ",
        "mailnologin": "គ្មានអាសយដ្ឋានផ្ញើទេ",
        "mailnologintext": "អ្នកត្រូវតែ [[Special:UserLogin|កត់ឈ្មោះចូល]] និង មានអាសយដ្ឋានអ៊ីមែលមានសុពលភាពមួយ ក្នុង[[Special:Preferences|ចំណង់ចំណូលចិត្ត]]របស់អ្នក ដើម្បីមានសិទ្ធិផ្ញើអ៊ីមែលទៅអ្នកប្រើប្រាស់ដទៃទៀត។",
        "emailuser": "ផ្ញើអ៊ីមែល​ទៅកាន់​អ្នក​ប្រើប្រាស់នេះ",
        "mywatchlist": "បញ្ជីតាមដាន​",
        "watchlistfor2": "សម្រាប់ $1 $2",
        "nowatchlist": "គ្មានអ្វីនៅក្នុងបញ្ជីតាមដានរបស់អ្នកទេ។",
-       "watchlistanontext": "សូម $1 ដើម្បី​មើល​ឬ​កែប្រែ​របស់​ក្នុង​បញ្ជីតាមដាន​របស់អ្នក។",
+       "watchlistanontext": "សូមកត់ឈ្មោះចូលដើម្បី​មើល​ឬ​កែប្រែ​របស់​ក្នុង​បញ្ជីតាមដាន​របស់អ្នក។",
        "watchnologin": "មិនទាន់កត់ឈ្មោះចូលទេ",
        "addwatch": "បន្ថែមទៅបញ្ជីតាមដាន",
        "addedwatchtext": "ទំព័រ \"[[:$1]]\" ត្រូវបានដាក់បញ្ចូលទៅក្នុង​[[Special:Watchlist|បញ្ជីតាមដាន]]របស់លោកអ្នកហើយ ។ រាល់ការផ្លាស់ប្ដូរនៃទំព័រនេះ រួមទាំងទំព័រពិភាក្សារបស់វាផងដែរ នឹងត្រូវបានដាក់បញ្ចូលក្នុងបញ្ជីនៅទីនោះ។",
+       "addedwatchtext-short": "ទំព័រ \"$1\" ត្រូវបានបន្ថែមទៅក្នុងបញ្ជីតាមដានរបស់អ្នកហើយ។",
        "removewatch": "ដកចេញពីបញ្ជីតាមដាន",
-       "removedwatchtext": "ទំព័រ \"[[:$1]]\" ត្រូវបានដកចេញពី[[Special:Watchlist|បញ្ជីតាមដាន]]របស់លោកអ្នកហើយ ។",
+       "removedwatchtext": "ទំព័រ \"[[:$1]]\" ត្រូវបានដកចេញពី[[Special:Watchlist|បញ្ជីតាមដានរបស់លោកអ្នក]]ហើយ ។",
+       "removedwatchtext-short": "ទំព័រ \"$1\" ត្រូវបានដកចេញបញ្ជីតាមដានរបស់អ្នកហើយ។",
        "watch": "តាមដាន",
        "watchthispage": "តាមដានទំព័រនេះ",
        "unwatch": "ឈប់​តាមដាន",
        "wlheader-enotif": "បើកប្រើការផ្ដល់ដំណឹងតាមរយៈអ៊ីមែល។",
        "wlheader-showupdated": "ទំព័រដែលត្រូវបានផ្លាស់ប្តូរតាំងពីពេលចូលមើលចុងក្រោយរបស់អ្នក ត្រូវបានបង្ហាញជា '''អក្សរដិត'''។",
        "wlnote": "ខាងក្រោមនេះជា {{PLURAL:$1|បំលាស់ប្តូរចុងក្រោយ|'''$1'''បំលាស់ប្តូរចុងក្រោយ}}ក្នុងរយះពេល{{PLURAL:$2|'''$2'''ម៉ោង}}ចុងក្រោយ គិតចាប់ពី $3, $4។",
-       "wlshowlast": "បង្ហាញ $1ម៉ោងចុងក្រោយ $2ថ្ងៃចុងក្រោយ ឬ$3",
+       "wlshowlast": "បង្ហាញ $1ម៉ោងចុងក្រោយ $2ថ្ងៃចុងក្រោយ",
        "watchlist-options": "ជម្រើសនានាក្នុងបញ្ជីតាមដាន",
        "watching": "កំពុង​តាមដាន...",
        "unwatching": "ឈប់​តាមដាន...",
        "delete-edit-reasonlist": "ពិនិត្យផ្ទៀងផ្ទាត់ហេតុផលនៃការលុប",
        "delete-toobig": "ទំព័រនេះមានប្រវត្តិកែប្រែធំលើសពី $1 {{PLURAL:$1|កំណែ|កំណែ}}។\n\nការលុបទំព័របែបនេះចោលត្រូវបានហាមឃាត់ ដើម្បីបង្ការកុំអោយមានការរអាក់រអួលក្នុង{{SITENAME}}។",
        "delete-warning-toobig": "ទំព័រនេះមានប្រវត្តិកែប្រែធំលើសពី $1 {{PLURAL:$1|កំណែ|កំណែ}}។\n\nការលុបទំព័របែបនេះចោលអាចធ្វើអោយមានការរអាក់រអួលប្រតិបត្តិការរបស់មូលដ្ឋានទិន្នន័យក្នុង{{SITENAME}}។\n\nសូមបន្តសកម្មភាពនេះដោយប្រុងប្រយ័ត្ន។",
+       "deleteprotected": "អ្នកមិនអាចលុបចោលទំព័រនេះបានទេព្រោះវាត្រូវបានការពារហើយ។",
        "rollback": "មូលត្រឡប់កំណែប្រែ",
        "rollback_short": "មូលត្រឡប់",
        "rollbacklink": "មូលត្រឡប់",
        "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** ទំព័រដែលមានចរាចរកម្រិតខ្ពស់",
        "contributions-title": "ការរួមចំណែករបស់អ្នកប្រើប្រាស់ $1",
        "mycontris": "ការរួមចំណែក",
        "contribsub2": "សម្រាប់{{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "គណនីអ្នកប្រើប្រាស់ដែលមានឈ្មោះ \"$1\"មិនទាន់បានចុះឈ្មោះទេ។",
        "nocontribs": "គ្មានការផ្លាស់ប្តូរត្រូវបានឃើញដូចនឹងលក្ខណៈវិនិច្ឆ័យទាំងនេះ។",
        "uctop": "(បច្ចុប្បន្ន)",
        "month": "ខែ៖",
        "autoblockid": "ដាក់ការហាមឃាត់ជាស្វ័យប្រវត្តិលើ #$1",
        "block": "ដាក់ការហាមឃាត់លើអ្នកប្រើប្រាស់",
        "unblock": "ដកការហាមឃាត់លើអ្នកប្រើប្រាស់",
-       "blockip": "á\9e\8aá\9e¶á\9e\80á\9f\8bá\9e\80á\9e¶á\9e\9aá\9e á\9e¶á\9e\98á\9e\83á\9e¶á\9e\8fá\9f\8bá\9e\9bá\9e¾á\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b",
+       "blockip": "á\9e á\9e¶á\9e\98á\9e\83á\9e¶á\9e\8fá\9f\8b{{GENDER:$1|á\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b}}",
        "blockip-legend": "ដាក់ការហាមឃាត់លើអ្នកប្រើប្រាស់",
        "blockiptext": "សូម​ប្រើប្រាស់​សំណុំ​បែបបទ​ខាងក្រោម​ដើម្បី​ហាមឃាត់ការសរសេរ​ពី​អាសយដ្ឋាន IP ឬ​ឈ្មោះ​អ្នកប្រើប្រាស់ណាមួយ​។\nការ​ធ្វើ​បែបនេះ​គួរតែ​ធ្វើឡើង​ក្នុង​គោលបំណង​បង្ការ​ការប៉ុនប៉ង​បំផ្លាញ(vandalism)ដូច​ដែល​មាន​ចែង​ក្នុង[[{{MediaWiki:Policy-url}}|គោលការណ៍]]។\nសូមបំពេញមូលហេតុច្បាស់លាស់មួយខាងក្រោម (ឧទាហរណ៍៖ រាយឈ្មោះទំព័រនានាដែលត្រូវបានគេបំផ្លាញ)។",
        "ipaddressorusername": "អាសយដ្ឋានIP ឬអត្តនាម៖",
        "ipb-unblock-addr": "ដកការហាមឃាត់លើ $1",
        "ipb-unblock": "ដកការហាមឃាត់លើអ្នកប្រើប្រាស់ ឬ អាសយដ្ឋាន IP",
        "ipb-blocklist": "មើលការហាមឃាត់ដែលមានហើយ",
-       "ipb-blocklist-contribs": "ការរួមចំណែកសម្រាប់ $1",
+       "ipb-blocklist-contribs": "ការរួមចំណែកសម្រាប់ {{GENDER:$1|$1}}",
        "unblockip": "ដកការហាមឃាត់លើអ្នកប្រើប្រាស់",
        "unblockiptext": "សូម​ប្រើប្រាស់​ទម្រង់​បែបបទ​ខាងក្រោម​នេះ ដើម្បី​បើក​សិទ្ឋិ​សរសេរ​ឡើងវិញ សម្រាប់​អាសយដ្ឋាន​IP​ឬ​អ្នកប្រើប្រាស់​ដែល​ត្រូវ​បាន​ហាមឃាត់ពីមុន​។",
        "ipusubmit": "ដក​ការហាមឃាត់នេះ​ចេញ",
        "thumbnail_image-missing": "ឯកសារហាក់ដូចជាកំពុងបាត់ខ្លួន៖$1",
        "import": "ការនាំចូលទំព័រ",
        "importinterwiki": "ការនាំចូលអន្តរវិគី",
-       "import-interwiki-source": "ប្រភព​ វិគី​/ទំព័រ​៖",
+       "import-interwiki-sourcewiki": "វិគីប្រភព៖",
+       "import-interwiki-sourcepage": "ទំព័រប្រភព៖",
        "import-interwiki-history": "ចម្លង គ្រប់កំណែចាស់ នៃទំព័រនេះ",
        "import-interwiki-templates": "រាប់​បញ្ចូល​ទំព័រគំរូ​ទាំងអស់​",
        "import-interwiki-submit": "នាំចូល",
        "tooltip-feed-atom": "បម្រែបម្រួល Atom ចំពោះទំព័រនេះ",
        "tooltip-t-contributions": "បង្ហាញបញ្ជីរួមចំណែករបស់អ្នកប្រើប្រាស់នេះ",
        "tooltip-t-emailuser": "ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើប្រាស់នេះ",
+       "tooltip-t-info": "ព័ត៌មានបន្ថែមអំពីទំព័រនេះ",
        "tooltip-t-upload": "ឯកសារផ្ទុកឡើង",
        "tooltip-t-specialpages": "បញ្ជីទំព័រពិសេសៗទាំងមូល",
        "tooltip-t-print": "ទម្រង់សម្រាប់បោះពុម្ភរបស់ទំព័រនេះ",
        "pageinfo-robot-policy": "ដាក់ក្នុងលិបិក្រមដោយរូបយន្ត",
        "pageinfo-robot-index": "អនុញ្ញាត",
        "pageinfo-robot-noindex": "មិនអនុញ្ញាត",
-       "pageinfo-views": "ចំនួនការបើកមើល",
        "pageinfo-watchers": "ចំនួនអ្នកតាមដានទំព័រ",
        "pageinfo-few-watchers": "អ្នកតាមដានតិចជាង $1 {{PLURAL:$1|នាក់|នាក់}}",
        "pageinfo-redirects-name": "ចំនួនការបញ្ជូនបន្តមកកាន់ទំព័រនេះ",
        "exif-urgency-low": "ទាប ($1)",
        "exif-urgency-high": "ខ្ពស់ ($1)",
        "exif-urgency-other": "តាមការកំណត់របស់អ្នកប្រើប្រាស់ ($1)",
-       "watchlistall2": "ទាំងអស់",
        "namespacesall": "ទាំងអស់",
        "monthsall": "ទាំងអស់",
        "confirmemail": "បញ្ជាក់ទទួលស្គាល់អាសយដ្ឋានអ៊ីមែល",
        "autosumm-replace": "ជំនួសខ្លឹមសារនៃទំព័រដោយ '$1'",
        "autoredircomment": "បញ្ជូនបន្តទៅ [[$1]]",
        "autosumm-new": "បានបង្កើតទំព័រដែលផ្ដើមដោយ $1",
+       "autosumm-newblank": "បានបង្កើតទំព័រទទេ",
        "size-bytes": "$1បៃ",
        "size-kilobytes": "$1គីឡូបៃ",
        "size-megabytes": "$1មេកាបៃ",
        "watchlistedit-raw-done": "បញ្ជីតាមដានរបស់អ្នកត្រូវបានធ្វើឱ្យទាន់សម័យហើយ។",
        "watchlistedit-raw-added": "{{PLURAL:$1| ចំណងជើង១បានត្រូវ|$1 ចំណងជើងបានត្រូវ}}ដាក់បន្ថែម៖",
        "watchlistedit-raw-removed": "{{PLURAL:$1|១ចំណងជើងបានត្រូវ|$1ចំណងជើងបានត្រូវ}}ដកចេញ៖",
+       "watchlistedit-clear-title": "បានសម្អាតបញ្ចីតាមដាន",
+       "watchlistedit-clear-legend": "សម្អាតបញ្ជីតាមដាន",
        "watchlisttools-view": "មើលបន្លាស់ប្ដូរពាក់ព័ន្ធ",
        "watchlisttools-edit": "មើលនិងកែប្រែបញ្ជីតាមដាន",
        "watchlisttools-raw": "កែប្រែបញ្ជីតាមដានឆៅ",
        "version-hook-name": "ឈ្មោះ​ Hook",
        "version-hook-subscribedby": "បានជាវ ជាប្រចាំ ដោយ",
        "version-version": "(កំណែ $1)",
+       "version-no-ext-name": "[គ្មានឈ្មោះ]",
        "version-license": "អាជ្ញាបណ្ណ​មេឌាវិគី",
        "version-ext-license": "អាជ្ញាបណ្ណ",
+       "version-skin-colheader-name": "សំបក",
        "version-ext-colheader-version": "កំណែ",
        "version-ext-colheader-license": "អាជ្ញាបណ្ណ",
        "version-ext-colheader-description": "ការពិពណ៌នា",
        "fileduplicatesearch-result-n": "មាន {{PLURAL:$2|1 ឯកសារដូចគ្នាបេះបិទ|$2 ឯកសារដូចគ្នាបេះបិទ}}ទៅនឹងឯកសារ \"$1\"។",
        "fileduplicatesearch-noresults": "រកមិនឃើញឯកសារដែលមានឈ្មោះ \"$1\" ទេ។",
        "specialpages": "ទំព័រ​ពិសេស​ៗ",
+       "specialpages-note-top": "កំណត់សម្គាល់",
        "specialpages-note": "* ទំព័រពិសេសៗធម្មតា។\n* <span class=\"mw-specialpagerestricted\">ទំព័រពិសេសៗដែលមានការដាក់កំហិត។</span>",
        "specialpages-group-maintenance": "របាយការណ៍នានាអំពីតំហែទាំ",
        "specialpages-group-other": "ទំព័រពិសេសៗផ្សេងៗទៀត",
        "htmlform-no": "ទេ",
        "htmlform-yes": "ព្រម",
        "htmlform-chosen-placeholder": "ជ្រើសយកជម្រើសមួយ",
+       "htmlform-cloner-create": "បន្ថែមទៀត",
+       "htmlform-cloner-delete": "ដកចេញ",
        "logentry-delete-delete": "$1 {{GENDER:$2|បានលុប}} ទំព័រ $3 ចោល",
        "logentry-delete-restore": "$1 {{GENDER:$2|បានស្ដារ}} ទំព័រ $3 ឡើងវិញ",
        "revdelete-content-hid": "ខ្លឹមសារត្រូវបានលាក់",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|បានផ្លាស់ប្ដូរ}}សមាជិកភាពរបស់ $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|ត្រូវបានតំឡើង}}សមាជិកភាពពី $4 ជា $5 ដោយស្វ័យប្រវត្តិ",
        "rightsnone": "(ទទេ)",
+       "revdelete-summary": "កែប្រែចំណារពន្យល់",
        "feedback-subject": "កម្មវត្ថុ ៖",
        "feedback-message": "សារ​៖",
        "feedback-cancel": "បោះបង់​",
index b24c1bb..cb9be3c 100644 (file)
        "changeemail-newemail": "ಹೊಸ  ಇ-ಅಂಚೆ ವಿಳಾಸ:",
        "changeemail-none": "(ಯಾವೂ ಇಲ್ಲ)",
        "changeemail-submit": "ಇಮೇಲ್ ಬದಲಾಯಿಸಿ",
-       "changeemail-cancel": "ರದ್ದುಗೊಳಿಸಿ",
        "bold_sample": "ದಪ್ಪಗಿನ ಅಚ್ಚು",
        "bold_tip": "ದಪ್ಪಗಿನ ಅಚ್ಚು",
        "italic_sample": "ಓರೆ ಅಕ್ಷರಗಳು",
        "mergehistory-comment": "[[:$1]] ಅನ್ನು [[:$2]] ಒಳಗೆ ಸೇರಿಸಲಾಗಿದೆ: $3",
        "mergehistory-reason": "ಕಾರಣ:",
        "mergelog": "ಸೇರ್ಪಡೆಯ ದಾಖಲೆ",
-       "pagemerge-logentry": "[[$1]] ಅನ್ನು [[$2]] ಒಳಗೆ ಸೇರಿಸಲಾಗಿದೆ ($3 ರವರೆಗಿನ ಬದಲಾವಣೆಗಳು)",
        "revertmerge": "ಸೇರ್ಪಡೆಯನ್ನು ತೊಡೆದುಹಾಕು",
        "mergelogpagetext": "ಒಂದು ಪುಟದ ಇತಿಹಾಸವನ್ನು ಇನ್ನೊಂದರೊಳಗೆ ಇತ್ತೀಚೆಗೆ ಸೇರ್ಪಡೆ ಮಾಡಲಾಗಿರುವ ಪಟ್ಟಿ ಕೆಳಗಿದೆ.",
        "history-title": "\"$1\" ಪುಟದ ಬದಲಾವಣೆಗಳ ಇತಿಹಾಸ",
        "searchrelated": "ಸಂಬಂಧಿತ",
        "searchall": "ಎಲ್ಲಾ",
        "showingresults": "ಕೆಳಗೆ #'''$2''' ಇಂದ ಶುರುವಾದ {{PLURAL:$1|'''೧''' ಫಲಿತಾಂಶದ|'''$1''' ಫಲಿತಾಂಶಗಳ}}ವರೆಗೂ ತೋರಿಸಲಾಗುತ್ತಿದೆ.",
-       "showingresultsheader": "'''$4''' ಗೆ {{PLURAL:$5|'''$3''' ರಲ್ಲಿ '''$1'''  ಫಲಿತಾಂಶ|'''$3''' ರಲ್ಲಿ '''$1 - $2'''  ಫಲಿತಾಂಶಗಳು}}",
        "search-nonefound": "ನಿಮ್ಮ ವಿಚಾರಣೆಗೆ ತಕ್ಕ ಫಲಿತಾಂಶಗಳಿಲ್ಲ.",
        "powersearch-legend": "ಮುಂದುವರೆದ ಹುಡುಕಾಟ",
        "powersearch-ns": "ಈ ಪುಟ ಪ್ರಬೇಧಗಳಲ್ಲಿ ಹುಡುಕು:",
        "statistics": "ಅಂಕಿ ಅಂಶಗಳು",
        "statistics-header-pages": "ಪುಟಗಳ ಅಂಕಿಅಂಶಗಳು",
        "statistics-header-edits": "ಸಂಪಾದನಾ ಅಂಕಿಅಂಶಗಳು",
-       "statistics-header-views": "ವೀಕ್ಷಣಾ ಅಂಕಿಅಂಶಗಳು",
        "statistics-header-users": "ಸದಸ್ಯರ ಅಂಕಿ ಅಂಶ",
        "statistics-header-hooks": "ಇತರ ಅಂಕಿಅಂಶಗಳು",
        "statistics-articles": "ಲೇಖನ ಪುಟ",
        "statistics-pages": "ಪುಟಗಳು",
        "statistics-files": "ಅಪ್ಲೋಡ್ ಆಗಿರುವ ಫೈಲುಗಳು",
        "statistics-edits-average": "ಪುಟದ ಸರಾಸರಿ ಮಾರ್ಪಡಿಕೆಗಳು",
-       "statistics-views-total": "ಒಟ್ಟು ವೀಕ್ಷಣೆಗಳು",
        "statistics-users-active": "ಸಕ್ರಿಯ ಬಳಕೆದಾರರು",
-       "statistics-mostpopular": "ಅತ್ಯಂತ ಹೆಚ್ಚು ವೀಕ್ಷಿತ ಪುಟಗಳು",
        "pageswithprop-submit": "ಹೋಗು",
        "doubleredirects": "ಮರುಕಳಿಸಿದ ಪುನರ್ನಿರ್ದೇಶನಗಳು",
        "brokenredirects": "ಮುರಿದ ರಿಡೈರೆಕ್ಟ್‌ಗಳು",
        "uncategorizedtemplates": "ಅವರ್ಗೀಕೃತ ಟೆಂಪ್ಲೇಟುಗಳು",
        "unusedcategories": "ಬಳಕೆಯಲ್ಲಿರದ ವರ್ಗಗಳು",
        "unusedimages": "ಉಪಯೋಗಿಸದ ಚಿತ್ರಗಳು",
-       "popularpages": "ಜನಪ್ರಿಯ ಪುಟಗಳು",
        "wantedcategories": "ಬೇಕಾಗಿರುವ ವರ್ಗಗಳು",
        "wantedpages": "ಬೇಕಾಗಿರುವ ಪುಟಗಳು",
        "wantedfiles": "ಬೇಕಾಗಿರುವ ಕಡತಗಳು",
        "suppress": "ನಿಗಾ ಇಡುವವ",
        "booksources": "ಪುಸ್ತಕಗಳ ಮೂಲ",
        "booksources-search-legend": "ಪುಸ್ತಕ ಮೂಲಗಳಿಗೆ ಹುಡುಕು",
-       "booksources-go": "ಹೋಗು",
        "specialloguserlabel": "ಸದಸ್ಯ:",
        "speciallogtitlelabel": "ಶೀರ್ಷಿಕೆ:",
        "log": "ದಾಖಲೆಗಳು",
        "watchlist-details": "ಚರ್ಚೆ ಪುಟಗಳನ್ನು ಹೊರತುಪಡಿಸಿ, ನಿಮ್ಮ ವೀಕ್ಷಣಾಪಟ್ಟಿಯಲ್ಲಿ {{PLURAL:$1|$1 ಪುಟ ಇದೆ|$1 ಪುಟಗಳು ಇವೆ}}.",
        "wlheader-enotif": "ಮಿಂಚಂಚೆ ಸೂಚನೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.",
        "wlheader-showupdated": "ನೀವು ಕೊನೆಯ ಬಾರಿ ಭೇಟಿ ನೀಡಿದ ನಂತರ ಬದಲಾವಣೆಗಳು ಆಗಿರುವ ಪುಟಗಳು '''ದಪ್ಪ ಅಕ್ಷರಗಳಲ್ಲಿ''' ತೋರಿಸಲಾಗಿದೆ",
-       "wlshowlast": "ಕೊನೆಯ $1 ಗಂಟೆ $2 ದಿನಗಳು $3 ಅನ್ನು ತೋರಿಸು",
+       "wlshowlast": "ಕೊನೆಯ $1 ಗಂಟೆ $2 ದಿನಗಳು  ಅನ್ನು ತೋರಿಸು",
        "watchlist-options": "ವೀಕ್ಷಣಾಪಟ್ಟಿ ಆಯ್ಕೆಗಳು",
        "watching": "ವೀಕ್ಷಣೆಗೆ ಸೇರಿಸಲಾಗುತ್ತಿದೆ...",
        "unwatching": "ವೀಕ್ಷಣೆಯಿಂದ ತೆಗೆಯಲಾಗುತ್ತಿದೆ...",
        "exif-gpsspeed-n": "ಕ್ನಾಟ್‍ಗಳು",
        "exif-gpsdirection-t": "ನಿಜ ದಿಕ್ಕು",
        "exif-gpsdirection-m": "ಆಯಸ್ಕಾಂತೀಯ ದಿಕ್ಕು",
-       "watchlistall2": "ಎಲ್ಲಾ",
        "namespacesall": "ಎಲ್ಲಾ",
        "monthsall": "ಎಲ್ಲಾ",
        "confirmemail": "ಇ-ಅಂಚೆ ವಿಳಾಸವನ್ನು ಖಾತ್ರಿ ಮಾಡಿ",
        "revdelete-restricted": "ನಿರ್ವಾಹಕರಿಗೆ ನಿಬಂಧನೆಗಳನ್ನು ಅನ್ವಯಿಸಲಾಯಿತು",
        "revdelete-unrestricted": "ನಿರ್ವಾಹಕರ ನಿಬಂಧನೆಗಳನ್ನು ತೆಗೆಯಲಾಯಿತು",
        "rightsnone": "(ಯಾವೂ ಇಲ್ಲ)",
+       "revdelete-summary": "ಸಂಪಾದನೆಯ ತಾತ್ಪರ್ಯ",
        "feedback-subject": "ವಿಷಯ:",
        "feedback-message": "ಸಂದೇಶ:",
        "duration-seconds": "$1 {{PLURAL:$1|ಕ್ಷಣ|ಕ್ಷಣಗಳು}}",
index e2e7489..0d2af85 100644 (file)
                        "관인생략",
                        "아라",
                        "Keysuck",
-                       "Infinity"
+                       "Infinity",
+                       "Bluemersen",
+                       "Revi",
+                       "Namoroka"
                ]
        },
        "tog-underline": "링크에 밑줄:",
@@ -55,6 +58,7 @@
        "tog-watchdefault": "내가 편집하는 문서와 파일을 주시문서 목록에 추가",
        "tog-watchmoves": "내가 이동하는 문서와 파일을 주시문서 목록에 추가",
        "tog-watchdeletion": "내가 삭제하는 문서와 파일을 주시문서 목록에 추가",
+       "tog-watchrollback": "내가 되돌리기 기능을 사용한 문서를 주시문서 목록에 추가",
        "tog-minordefault": "모든 편집에 기본적으로 사소한 편집을 표시",
        "tog-previewontop": "편집 상자 앞에 미리 보기 보이기",
        "tog-previewonfirst": "처음 편집할 때 미리 보기 보이기",
@@ -82,7 +86,7 @@
        "underline-always": "항상",
        "underline-never": "항상 치지 않기",
        "underline-default": "스킨 또는 브라우저 기본값",
-       "editfont-style": "í\8e¸ì§\91 ì°½의 글꼴:",
+       "editfont-style": "í\8e¸ì§\91 ì\98\81ì\97­의 글꼴:",
        "editfont-default": "브라우저 기본값",
        "editfont-monospace": "고정폭 글꼴",
        "editfont-sansserif": "산세리프 글꼴",
        "hidden-categories": "{{PLURAL:$1|숨은 분류}}",
        "hidden-category-category": "숨은 분류",
        "category-subcat-count": "{{PLURAL:$2|이 분류에는 하위 분류 1개만이 속해 있습니다.|다음은 이 분류에 속하는 {{PLURAL:$1|하위 분류}} $2개 가운데 $1개입니다.}}",
-       "category-subcat-count-limited": "이 분류에 {{PLURAL:$1|하위 분류}} $1개가 있습니다.",
+       "category-subcat-count-limited": "이 분류에 {{PLURAL:$1|하위 분류가|하위 분류 $1개가}} 있습니다.",
        "category-article-count": "{{PLURAL:$2|이 분류에는 문서 1개만이 속해 있습니다.|다음은 이 분류에 속하는 {{PLURAL:$1|문서}} $2개 가운데 $1개입니다.}}",
-       "category-article-count-limited": "이 분류에 {{PLURAL:$1|문서}} $1개가 있습니다.",
+       "category-article-count-limited": "이 분류에 {{PLURAL:$1|문서가|문서 $1개가}} 있습니다.",
        "category-file-count": "{{PLURAL:$2|이 분류에는 파일 1개만이 속해 있습니다.|다음은 이 분류에 속하는 {{PLURAL:$1|파일}} $2개 가운데 $1개입니다.}}",
-       "category-file-count-limited": "이 분류에 {{PLURAL:$1|파일}} $1개가 있습니다.",
+       "category-file-count-limited": "이 분류에 {{PLURAL:$1|파일이|파일 $1개가}} 있습니다.",
        "listingcontinuesabbrev": "(계속)",
        "index-category": "색인된 문서",
        "noindex-category": "색인에서 제외되는 문서",
        "morenotlisted": "이 목록은 완성되지 않았습니다.",
        "mypage": "문서",
        "mytalk": "토론",
-       "anontalk": "ì\9dµëª\85 사용자와 토론",
+       "anontalk": "ì\9d´ IP ì£¼ì\86\8cì\9d\98 사용자와 토론",
        "navigation": "둘러보기",
        "and": ",",
        "qbfind": "찾기",
        "delete": "삭제",
        "deletethispage": "이 문서 삭제하기",
        "undeletethispage": "이 문서를 되살리기",
-       "undelete_short": "{{PLURAL:$1|편집}} $1개 되살리기",
-       "viewdeleted_short": "{{PLURAL:$1|삭제된 편집}} $1개 보기",
+       "undelete_short": "{{PLURAL:$1|편집 한 개|편집 $1개}} 되살리기",
+       "viewdeleted_short": "{{PLURAL:$1|삭제된 편집 한 개|삭제된 편집 $1개}} 보기",
        "protect": "보호",
        "protect_change": "보호 수준 바꾸기",
        "protectthispage": "이 문서 보호하기",
        "otherlanguages": "다른 언어",
        "redirectedfrom": "($1에서 넘어옴)",
        "redirectpagesub": "넘겨주기 문서",
+       "redirectto": "넘겨줄 대상:",
        "lastmodifiedat": "이 문서는 $1 $2에 마지막으로 바뀌었습니다.",
        "viewcount": "이 문서는 {{PLURAL:$1|한 번|$1번}} 읽혔습니다.",
        "protectedpage": "보호된 문서",
        "privacypage": "Project:개인 정보 정책",
        "badaccess": "권한 오류",
        "badaccess-group0": "요청한 명령을 실행할 권한이 없습니다.",
-       "badaccess-groups": "요청한 명령은 {{PLURAL:$2|다음|다음 중 하나의}} 권한을 가진 사용자에게만 가능합니다: $1",
+       "badaccess-groups": "요청한 명령은 {{PLURAL:$2|다음|다음 중 하나의}} 권한을 가진 사용자에게 제한됩니다: $1.",
        "versionrequired": "미디어위키 $1 버전 필요",
        "versionrequiredtext": "이 문서를 사용하려면 $1 버전 미디어위키가 필요합니다.\n[[Special:Version|설치된 미디어위키 버전]]을 참고하세요.",
        "ok": "확인",
        "retrievedfrom": "원본 주소 \"$1\"",
-       "youhavenewmessages": "다른 사용자가 $1를 {{PLURAL:$3|남겼습니다}}. ($2)",
-       "youhavenewmessagesfromusers": "{{PLURAL:$3|다른 사용자가|사용자 $3명이}} $1를 {{PLURAL:$4|남겼습니다}}. ($2)",
-       "youhavenewmessagesmanyusers": "여러 사용자가 $1를 남겼습니다. ($2)",
+       "youhavenewmessages": "다른 사용자로부터의 $1가 {{PLURAL:$3|있습니다}}. ($2)",
+       "youhavenewmessagesfromusers": "{{PLURAL:$3|다른 사용자로|사용자 $3명으로}}부터의 $1가 {{PLURAL:$4|있습니다}}. ($2)",
+       "youhavenewmessagesmanyusers": "여러 사용자로부터의 $1가 있습니다. ($2)",
        "newmessageslinkplural": "{{PLURAL:$1|새 메시지}}",
        "newmessagesdifflinkplural": "마지막으로 {{PLURAL:$1|바뀐 내용}}",
        "youhavenewmessagesmulti": "다른 사용자가 $1에 남긴 새 메시지가 있습니다",
        "confirmable-no": "아니오",
        "thisisdeleted": "$1 문서를 보거나 되살리겠습니까?",
        "viewdeleted": "$1 문서를 보겠습니까?",
-       "restorelink": "{{PLURAL:$1|삭제된 편집}} $1개",
+       "restorelink": "{{PLURAL:$1|삭제된 편집 한 개|삭제된 편집 $1개}}",
        "feedlinks": "피드:",
        "feed-invalid": "잘못된 구독 피드 방식입니다.",
-       "feed-unavailable": "피드 서비스를 사용할 수 없습니다",
+       "feed-unavailable": "피드 배달을 사용할 수 없습니다",
        "site-rss-feed": "$1 RSS 피드",
        "site-atom-feed": "$1 Atom 피드",
        "page-rss-feed": "\"$1\" RSS 피드",
        "nstab-template": "틀",
        "nstab-help": "도움말",
        "nstab-category": "분류",
-       "nosuchaction": "해당하는 명령이 없습니다.",
-       "nosuchactiontext": "URLì\9d´ ì§\80ì \95í\95\9c ëª\85ë ¹ì\9d´ ì\9e\98못ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤.\nURLì\9d\84 ì\9e\98못 ì\9e\85ë ¥í\95\98ì\98\80ê±°ë\82\98, ì\9e\98못ë\90\9c ë§\81í\81¬ë¥¼ ë\94°ë\9d¼ê°\94ì\9d\84 ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤.\n{{SITENAME}}ì\9d\98 ë²\84ê·¸ì\9d¼ ì\88\98ë\8f\84 있습니다.",
+       "nosuchaction": "이러한 명령이 없습니다",
+       "nosuchactiontext": "URLì\97\90 ì§\80ì \95í\95\9c ëª\85ë ¹ì\9d´ ì\98¬ë°\94르ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤.\nURLì\9d\84 ì\9e\98못 ì\9e\85ë ¥í\96\88ê±°ë\82\98, ì\98¬ë°\94르ì§\80 ì\95\8aì\9d\80 ë§\81í\81¬ë¥¼ ë\94°ë\9d¼ê°\94ì\9d\84 ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤.\n{{SITENAME}}ì\97\90 ì\82¬ì\9a©í\95\98ë\8a\94 ì\86\8cí\94\84í\8a¸ì\9b¨ì\96´ì\9d\98 ë²\84ê·¸ê°\80 ì\9e\88ì\9d\84 ì\88\98 있습니다.",
        "nosuchspecialpage": "해당하는 특수 문서가 없습니다.",
        "nospecialpagetext": "<strong>요청한 특수 문서가 존재하지 않습니다.</strong>\n\n특수 문서의 목록은 [[Special:SpecialPages|여기]]에서 볼 수 있습니다.",
        "error": "오류",
        "databaseerror-query": "쿼리: $1",
        "databaseerror-function": "함수: $1",
        "databaseerror-error": "오류: $1",
-       "laggedslavemode": "'''경고:''' 문서가 최근에 바뀐 내용을 포함하지 않을 수도 있습니다.",
+       "laggedslavemode": "<strong>경고:</strong> 문서가 최근에 바뀐 내용을 포함하지 않을 수도 있습니다.",
        "readonly": "데이터베이스 잠김",
        "enterlockreason": "데이터베이스를 잠그는 이유와 예상되는 기간을 적어 주세요.",
        "readonlytext": "데이터베이스가 잠겨 있어서 문서를 편집할 수 없습니다. 데이터베이스 관리가 끝난 후에는 정상으로 돌아올 것입니다.\n\n관리자가 데이터베이스를 잠글 때 남긴 메시지는 다음과 같습니다: $1",
        "filedeleteerror": "\"$1\" 파일을 삭제할 수 없습니다.",
        "directorycreateerror": "\"$1\" 디렉터리를 만들 수 없습니다.",
        "filenotfound": "\"$1\" 파일을 찾을 수 없습니다.",
-       "unexpected": "예기치 못한 값: \"$1\"=\"$2\"",
+       "unexpected": "예기치 않은 값: \"$1\"=\"$2\".",
        "formerror": "오류: 양식을 제출할 수 없습니다.",
-       "badarticleerror": "해당 명령은 이 문서에서 실행할 수 없습니다.",
+       "badarticleerror": "이 명령은 이 문서에서 수행할 수 없습니다.",
        "cannotdelete": "\"$1\" 문서나 파일을 삭제할 수 없습니다.\n이미 삭제되었을 수도 있습니다.",
        "cannotdelete-title": "\"$1\" 문서를 삭제할 수 없습니다.",
        "delete-hook-aborted": "훅이 삭제를 중단했습니다.\n아무런 설명도 주어지지 않았습니다.",
        "no-null-revision": "\"$1\" 문서에 대한 새 빈 판을 만들 수 없습니다",
        "badtitle": "잘못된 제목",
        "badtitletext": "요청한 문서 제목이 잘못되었거나, 비어있거나, 잘못된 인터위키 제목으로 링크했습니다.\n문서 제목에 사용할 수 없는 문자를 사용했을 수 있습니다.",
-       "perfcached": "ë\8b¤ì\9d\8c ì\9e\90ë£\8cë\8a\94 ìº\90ì\8b\9cë\90\9c ê²\83ì\9d´ë¯\80ë¡\9c ì\83\88ë¡\9c ë°\94ë\80\90 ë\82´ì\9a©ì\9d\84 ë°\98ì\98\81í\95\98ì§\80 ëª»í\95  ì\88\98ë\8f\84 ì\9e\88ì\8aµë\8b\88ë\8b¤. ìº\90ì\8b\9cì\97\90 ìµ\9cë\8c\80 {{PLURAL:$1|$1ê°\9cì\9d\98 ê²°ê³¼}}가 있습니다.",
-       "perfcachedts": "ë\8b¤ì\9d\8c ì\9e\90ë£\8cë\8a\94 ìº\90ì\8b\9cë\90\9c ê²\83ì\9c¼ë¡\9c, $1ì\97\90 ë§\88ì§\80ë§\89ì\9c¼ë¡\9c ì\83\88ë¡\9c ê³ ì³\90ì¡\8cì\8aµë\8b\88ë\8b¤. ìº\90ì\8b\9cì\97\90 ìµ\9cë\8c\80 {{PLURAL:$4|결과 $4개}}가 있습니다.",
-       "querypage-no-updates": "ì\9d´ ë¬¸ì\84\9cì\9d\98 ì\83\88ë¡\9c ê³ ì¹¨ì\9d´ í\98\84ì\9e¬ ë¹\84í\99\9cì\84±í\99\94ë\90\98ì\96´ ì\9e\88ì\8aµë\8b\88ë\8b¤.\nì\9d´ ë¬¸ì\84\9cì\9d\98 ì\9e\90ë£\8c를 ì\9e ì\8b\9c ë\8f\99ì\95\88 새로 고치지 않을 것입니다.",
+       "perfcached": "ë\8b¤ì\9d\8c ì\9e\90ë£\8cë\8a\94 ìº\90ì\8b\9cë\90\9c ê²\83ì\9d´ë©° ìµ\9cì\8b ì\9d´ ì\95\84ë\8b\90 ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤. ìº\90ì\8b\9cì\97\90 ìµ\9cë\8c\80 {{PLURAL:$1|ê²°ê³¼ í\95\9c ê°\9c|ê²°ê³¼ $1ê°\9c}}가 있습니다.",
+       "perfcachedts": "ë\8b¤ì\9d\8c ì\9e\90ë£\8cë\8a\94 ìº\90ì\8b\9cë\90\9c ê²\83ì\9c¼ë¡\9c, $1ì\97\90 ë§\88ì§\80ë§\89ì\9c¼ë¡\9c ì\97\85ë\8d°ì\9d´í\8a¸ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤. ìº\90ì\8b\9cì\97\90 ìµ\9cë\8c\80 {{PLURAL:$4|ê²°ê³¼ í\95\9c ê°\9c|결과 $4개}}가 있습니다.",
+       "querypage-no-updates": "ì\9d´ ë¬¸ì\84\9cì\9d\98 ì\83\88ë¡\9c ê³ ì¹¨ì\9d´ í\98\84ì\9e¬ ë¹\84í\99\9cì\84±í\99\94ë\90\98ì\96´ ì\9e\88ì\8aµë\8b\88ë\8b¤.\nì\9e\90ë£\8cê°\80 ì\9e ì\8b\9c 새로 고치지 않을 것입니다.",
        "viewsource": "원본 보기",
        "viewsource-title": "$1 문서 원본 보기",
        "actionthrottled": "동작 중지",
        "viewsourcetext": "문서의 원본을 보거나 복사할 수 있습니다:",
        "viewyourtext": "이 문서에 남긴 '''내 편집''' 내용을 보거나 복사할 수 있습니다:",
        "protectedinterface": "이 문서는 이 위키의 소프트웨어 인터페이스에 쓰이는 문서로, 부정 행위를 막기 위해 보호되어 있습니다.\n모든 위키에 대한 번역을 추가하거나 바꾸려면 미디어위키 지역화 프로젝트인 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하시기 바랍니다.",
-       "editinginterface": "'''경고''': 소프트웨어 인터페이스에 쓰이는 문서를 고치고 있습니다.\n이 문서에 있는 내용을 바꾸면 이 위키에 있는 모든 사용자에게 영향을 끼칩니다.\n모든 위키에 대한 번역을 추가하거나 바꾸려면 미디어위키 지역화 프로젝트인 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하시기 바랍니다.",
+       "editinginterface": "<strong>경고</strong>: 소프트웨어 인터페이스에 쓰이는 문서를 고치고 있습니다.\n이 문서에 있는 내용을 바꾸면 이 위키에 있는 모든 사용자에게 영향을 끼칩니다.\n모든 위키에 대한 번역을 추가하거나 바꾸려면 미디어위키 지역화 프로젝트인 [//translatewiki.net/ translatewiki.net]에 참여하시기 바랍니다.",
        "cascadeprotected": "이 문서는 다음 \"연쇄적\" 보호가 걸린 {{PLURAL:$1|문서}}에 포함되어 있어 함께 보호됩니다:\n$2",
        "namespaceprotected": "'''$1''' 이름공간을 편집할 수 있는 권한이 없습니다.",
        "customcssprotected": "여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 이 CSS 문서를 편집할 수 없습니다.",
        "exception-nologin-text-manual": "이 문서에 접근하거나 이 명령을 수행하려면 $1하세요.",
        "virus-badscanner": "잘못된 설정: 알 수 없는 바이러스 검사기: '''$1'''",
        "virus-scanfailed": "검사 실패 (코드 $1)",
-       "virus-unknownscanner": "알 수 없는 백신 소프트웨어:",
-       "logouttext": "'''지금 로그아웃했습니다.'''\n\n브라우저 캐시를 지우지 않으면 일부 문서에서 로그인이 되어 있는 것처럼 보일 수 있습니다.",
+       "virus-unknownscanner": "알 수 없는 안티 바이러스:",
+       "logouttext": "<strong>지금 로그아웃했습니다.</strong>\n\n브라우저 캐시를 지우지 않으면 일부 문서에서 로그인이 되어 있는 것처럼 보일 수 있습니다.",
        "welcomeuser": "$1님, 환영합니다!",
        "welcomecreation-msg": "계정이 만들어졌습니다.\n[[Special:Preferences|{{SITENAME}} 사용자 환경 설정]]을 바꿀 수 있습니다.",
        "yourname": "사용자 이름:",
        "loginerror": "로그인 오류",
        "createacct-error": "계정 만들기 오류",
        "createaccounterror": "계정을 만들수 없습니다: $1",
-       "nocookiesnew": "사용자 계정을 만들었지만, 아직 로그인하지 않았습니다.\n{{SITENAME}}에서는 로그인 정보를 저장하기 위해 쿠키를 사용합니다.\n지금 사용하는 웹 브라우저는 쿠키를 사용하지 않도록 설정되어 있습니다.\n로그인하기 전에 웹 브라우저에서 쿠키를 사용하도록 설정해주세요.",
+       "nocookiesnew": "사용자 계정을 만들었지만, 아직 로그인하고 있지 않습니다.\n{{SITENAME}}에서는 로그인 정보를 저장하기 위해 쿠키를 사용합니다.\n지금 사용하는 웹 브라우저는 쿠키를 사용하지 않도록 설정되어 있습니다.\n로그인하기 전에 웹 브라우저에서 쿠키를 사용하도록 설정해주세요.",
        "nocookieslogin": "{{SITENAME}}에서는 로그인을 위해 쿠키를 사용합니다.\n쿠키가 비활성되어 있습니다.\n쿠키 사용을 활성화한 다음 다시 시도하세요.",
        "nocookiesfornew": "요청의 출처를 확인할 수 없기 때문에 사용자 계정이 만들어지지 않았습니다.\n쿠키를 허용한 것을 확인한 후에 이 문서를 새로 고치고 나서 다시 시도하세요.",
        "noname": "사용자 계정 이름이 올바르지 않습니다.",
        "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실명을 입력하면 문서 기여에 사용자의 이름이 들어가게 됩니다.",
        "passwordreset-emailsent-capture": "비밀번호 재설정 이메일이 발송되었으며, 아래에 나타나 있습니다.",
        "passwordreset-emailerror-capture": "비밀번호 재설정 이메일이 생성되어 아래에 보여져 있지만, {{GENDER:$2|사용자}}에게 발송하는 데에는 실패했습니다: $1",
        "changeemail": "이메일 주소 바꾸기",
-       "changeemail-header": "계정 이메일 주소 바꾸기",
        "changeemail-text": "이메일 주소를 바꾸려면 이 양식을 채우세요. 이 바뀜을 확인하기 위해 비밀번호를 입력해야 합니다.",
        "changeemail-no-info": "이 특수 문서에 직접 접근하려면 반드시 로그인해야 합니다.",
        "changeemail-oldemail": "현재 이메일 주소 :",
        "changeemail-none": "(없음)",
        "changeemail-password": "{{SITENAME}} 비밀번호:",
        "changeemail-submit": "이메일 주소 바꾸기",
-       "changeemail-cancel": "취소",
        "changeemail-throttled": "로그인에 연속으로 너무 많이 실패하였습니다.\n$1 기다렸다가 다시 시도하세요.",
        "resettokens": "토큰 재설정",
        "resettokens-text": "여기에 당신의 계정과 관련된 특정 개인 데이터에 접근을 허용하는 토큰을 재설정합니다.\n\n토큰이 다른 사람에게 알려졌거나 계정이 침해되었을 때는 재설정해야 합니다.",
        "showpreview": "미리 보기",
        "showdiff": "차이 보기",
        "blankarticle": "<strong>경고:</strong> 만들려는 문서가 비어 있습니다.\n\"{{int:savearticle}}\"을 다시 클릭하면, 문서에 내용이 없이 만들어집니다.",
-       "anoneditwarning": "'''경고''': 로그인하고 있지 않습니다.\nIP 주소가 문서 역사에 남게 됩니다.",
-       "anonpreviewwarning": "'''로그인하고 있지 않습니다. 문서를 저장하면 당신의 IP 주소가 문서 역사에 남게 됩니다.'''",
+       "anoneditwarning": "<strong>경고:</strong> 로그인하고 있지 않습니다. 편집하면 당신의 IP 주소가 공개적으로 보여집니다. <strong>[$1 로그인]</strong>하거나 <strong>[$2 계정을 만들면]</strong>, 당신의 편집에 다른 이익과 함께, 사용자 이름이 표시됩니다.",
+       "anonpreviewwarning": "<em>로그인하고 있지 않습니다. 문서를 저장하면 당신의 IP 주소가 문서의 편집 역사에 남게 됩니다.</em>",
        "missingsummary": "'''알림:''' 편집 요약을 적지 않았습니다.\n이대로 \"{{int:savearticle}}\"을 클릭하면 편집 요약 없이 저장됩니다.",
        "missingcommenttext": "아래에 내용을 채워 넣어 주세요.",
        "missingcommentheader": "'''알림:''' 글의 제목을 입력하지 않았습니다.\n다시 \"{{int:savearticle}}\" 버튼을 클릭하면 글이 제목 없이 저장됩니다.",
        "yourtext": "당신의 편집",
        "storedversion": "현재 문서",
        "nonunicodebrowser": "'''경고: 웹 브라우저가 유니코드를 완벽하게 지원하지 않습니다.'''\n아스키가 아닌 문자가 16진수 코드로 나타날 수 있습니다.",
-       "editingold": "'''경고: 지금 이전 버전의 문서를 고치고 있습니다.'''\n이것을 저장하면 최근에 편집된 부분이 사라질 수 있습니다.",
+       "editingold": "<strong>경고: 이 문서의 오래된 판을 편집하고 있습니다.</strong>\n이것을 저장하면, 이 판 이후로 바뀐 모든 편집이 사라집니다.",
        "yourdiff": "차이",
        "copyrightwarning": "{{SITENAME}}에서의 모든 기여는 $2 라이선스로 배포된다는 점을 유의해 주세요 (자세한 내용에 대해서는 $1 문서를 읽어주세요).\n만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.<br />\n또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.\n'''저작권이 있는 내용을 허가 없이 저장하지 마세요!'''",
        "copyrightwarning2": "{{SITENAME}}에서의 모든 기여는 다른 사용자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요.\n만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.<br />\n또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 내용에 대해서는 $1 문서를 읽어 주세요).\n'''저작권이 있는 내용을 허가 없이 저장하지 마세요!'''",
        "content-model-text": "일반 텍스트",
        "content-model-javascript": "자바스크립트",
        "content-model-css": "CSS",
+       "duplicate-args-category": "중복된 인수를 사용한 틀의 호출을 포함한 문서",
        "expensive-parserfunction-warning": "'''경고:''' 이 문서는 너무 많은 파서 함수를 포함하고 있습니다.\n\n$2개 보다 적게 {{PLURAL:$2|써야}} 하지만 {{PLURAL:$1|지금은 $1개를 쓰고 있습니다}}.",
        "expensive-parserfunction-category": "느린 파서 함수 호출을 너무 많이 하는 문서",
        "post-expand-template-inclusion-warning": "'''경고:''' 틀 포함 크기가 너무 큽니다.\n일부 틀은 포함되지 않을 수 있습니다.",
        "parser-template-loop-warning": "재귀적인 틀이 발견되었습니다: [[$1]]",
        "parser-template-recursion-depth-warning": "틀 반복 깊이 제한을 초과함 ($1)",
        "language-converter-depth-warning": "언어 변환기 실행 제한 초과($1)",
-       "node-count-exceeded-category": "문ì\84\9cê°\80 ë\85¸ë\93\9c í\9a\9fì\88\98를 ì´\88ê³¼í\95\98ì\98\80ì\8aµë\8b\88ë\8b¤.",
-       "node-count-exceeded-category-desc": "ë\85¸ë\93\9c í\9a\9fì\88\98를 ì´\88ê³¼í\95\98ë\8a\94 ë¬¸ì\84\9cì\9d\98 ë¶\84ë¥\98ì\9e\85니다.",
+       "node-count-exceeded-category": "ë\85¸ë\93\9c í\9a\9fì\88\98를 ì´\88ê³¼í\95\9c ë¬¸ì\84\9c",
+       "node-count-exceeded-category-desc": "문ì\84\9cê°\80 ìµ\9cë\8c\80 ë\85¸ë\93\9c ì\88\98를 ì´\88ê³¼í\95©니다.",
        "node-count-exceeded-warning": "문서가 노드 수를 초과하였습니다.",
-       "expansion-depth-exceeded-category": "문서가 확장 깊이를 초과하였습니다.",
+       "expansion-depth-exceeded-category": "확장 깊이를 초과한 문서",
        "expansion-depth-exceeded-category-desc": "최대 확장 깊이를 초과하는 문서입니다.",
        "expansion-depth-exceeded-warning": "문서가 확장 깊이를 초과하였습니다",
        "parser-unstrip-loop-warning": "Unstrip의 반복을 감지했습니다",
        "rev-deleted-user": "(사용자 이름 삭제됨)",
        "rev-deleted-event": "(기록 동작이 제거됨)",
        "rev-deleted-user-contribs": "[사용자 이름 또는 IP 주소 삭제됨 -  기여 목록에서 편집이 숨겨짐]",
-       "rev-deleted-text-permission": "해당 편집이 문서 역사에서 '''삭제'''되었습니다.\n자세한 사항은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 볼 수 있습니다.",
-       "rev-deleted-text-unhide": "해당 편집이 문서 역사에서 '''삭제'''되었습니다.\n자세한 사항은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 볼 수 있습니다.\n이 편집을 보기를 원하신다면 [$1 해당 편집]을 볼 수 있습니다.",
-       "rev-suppressed-text-unhide": "해당 편집이 문서 역사에서 '''숨겨져''' 있습니다.\n자세한 사항은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 볼 수 있습니다.\n이 편집을 보기를 원하신다면 [$1 해당 편집]을 볼 수 있습니다.",
-       "rev-deleted-text-view": "이 문서의 편집은 역사에서 '''삭제'''되었습니다.\n삭제된 편집을 볼 수 있으며 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 자세한 내용을 볼 수 있습니다.",
-       "rev-suppressed-text-view": "이 문서의 편집은 역사에서 '''숨겨져''' 있습니다.\n숨겨진 편집을 볼 수 있으며 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 자세한 내용을 볼 수 있습니다.",
+       "rev-deleted-text-permission": "이 문서의 판은 <strong>삭제되어</strong> 있습니다.\n자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 찾을 수 있습니다.",
+       "rev-suppressed-text-permission": "이 문서의 판은 <strong>숨겨져</strong> 있습니다.\n자세한 내용은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 찾을 수 있습니다.",
+       "rev-deleted-text-unhide": "이 문서의 판이 <strong>삭제되어</strong> 있습니다.\n자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 찾을 수 있습니다.\n이 판을 보기를 원한다면 여전히 [$1 해당 판]을 볼 수 있습니다.",
+       "rev-suppressed-text-unhide": "이 문서의 판이 <strong>숨겨져</strong> 있습니다.\n자세한 내용은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 찾을 수 있습니다.\n이 판을 보기를 원한다면 여전히 [$1 해당 판]을 볼 수 있습니다.",
+       "rev-deleted-text-view": "이 문서의 판은 <strong>삭제되어</strong> 있습니다.\n삭제된 판을 볼 수 있으며 자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 찾을 수 있습니다.",
+       "rev-suppressed-text-view": "이 문서의 판은 <strong>숨겨져</strong> 있습니다.\n숨겨진 판을 볼 수 있으며 자세한 내용은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 찾을 수 있습니다.",
        "rev-deleted-no-diff": "특정 판이 문서 역사에서 '''삭제'''되었기 때문에 비교할 수 없습니다.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 자세한 내용을 볼 수 있습니다.",
        "rev-suppressed-no-diff": "두 판 중 일부가 '''삭제'''되었기 때문에 문서 편집 내용을 비교할 수 없습니다.",
        "rev-deleted-unhide-diff": "이 비교에 사용된 판 가운데 하나가 '''삭제'''되었습니다.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에 자세한 내용을 찾아볼 수 있습니다.\n계속 작업하고 싶다면 여전히 [$1 비교 보기]를 계속할 수 있습니다.",
        "mergehistory-same-destination": "원본 문서 이름과 대상 문서 이름은 달라야 합니다",
        "mergehistory-reason": "이유:",
        "mergelog": "합치기 기록",
-       "pagemerge-logentry": "사용자가 [[$1]]을 [[$2]]에 합쳤습니다 ($3판이 위로 옮겨짐)",
        "revertmerge": "합치기 해제",
        "mergelogpagetext": "다음은 한 문서의 역사를 다른 문서의 역사와 합친 최근 기록입니다.",
        "history-title": "\"$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'''번 부터의 {{PLURAL:$1|결과 '''1'''개|결과 '''$1'''개}}입니다.",
        "showingresultsinrange": "#<strong>$2</strong>부터 #<strong>$3</strong>까지의 범위에서 <strong>$1</strong>개의 {{PLURAL:$1|결과}}가 아래에 보입니다.",
-       "showingresultsheader": "'''$4''' 검색어에 대한 {{PLURAL:$5|결과 '''$3'''개 중 '''$1'''개|결과 '''$3'''개 중 '''$1 - $2'''번째}}",
+       "search-showingresults": "{{PLURAL:$4|결과 <strong>$3</strong>개 중 <strong>$1</strong>개|결과 <strong>$3</strong>개 중 <strong>$1 - $2</strong>개}}",
        "search-nonefound": "검색어와 일치하는 결과가 없습니다.",
        "powersearch-legend": "고급 검색",
        "powersearch-ns": "다음 이름공간에서 검색:",
        "powersearch-toggleall": "모두",
        "powersearch-togglenone": "모두 제외",
        "powersearch-remember": "향후 검색에 선택 기억하기",
-       "search-external": "바깥에서 검색",
+       "search-external": "바깥 검색",
        "searchdisabled": "{{SITENAME}} 검색이 비활성화되어 있습니다.\n검색이 작동하지 않는 동안에는 Google(구글)을 통해 검색할 수 있습니다.\n검색 엔진의 내용은 최신이 아닐 수 있다는 점을 참고하세요.",
        "search-error": "검색하는 동안 오류가 발생했습니다: $1",
        "preferences": "사용자 환경 설정",
        "mypreferences": "환경 설정",
        "prefs-edits": "편집 수:",
-       "prefsnologintext2": "ì\82¬ì\9a©ì\9e\90 í\99\98ê²½ ì\84¤ì \95ì\9d\84 ë³\80ê²½í\95\98려면 ë¡\9cê·¸ì\9d¸í\95\98ì\8b­ì\8b\9cì\98¤.",
+       "prefsnologintext2": "ì\82¬ì\9a©ì\9e\90 í\99\98ê²½ ì\84¤ì \95ì\9d\84 ë°\94꾸려면 ë¡\9cê·¸ì\9d¸í\95\98ì\84¸ì\9a\94.",
        "prefs-skin": "스킨",
        "skin-preview": "미리 보기",
        "datedefault": "설정하지 않음",
        "prefs-files": "파일",
        "prefs-custom-css": "사용자 CSS",
        "prefs-custom-js": "사용자 자바스크립트",
-       "prefs-common-css-js": "모든 스킨에 대한 공통 CSS/자바스크립트:",
+       "prefs-common-css-js": "모든 스킨에 공유된 CSS/자바스크립트:",
        "prefs-reset-intro": "이 페이지를 사용해 사이트 기본값으로 환경 설정을 재설정할 수 있습니다.\n이는 되돌릴 수 없습니다.",
        "prefs-emailconfirm-label": "이메일 인증:",
        "youremail": "이메일:",
        "gender-female": "위키 문서를 편집하는 여자입니다",
        "prefs-help-gender": "이 환경 설정은 선택 사항입니다.\n소프트웨어는 적절한 성별 문법을 사용하여 다른 사용자에게 당신을 언급하는 것을 해결하기 위해 사용됩니다.\n이 정보는 공개됩니다.",
        "email": "이메일",
-       "prefs-help-realname": "ì\8b¤ëª\85ì\9d\80 ì\84 í\83\9d ì\82¬í\95­ì\9e\85ë\8b\88ë\8b¤.\nì\8b¤ëª\85ì\9d\84 ì\9e\85ë ¥í\95\98ë©´ ë¬¸ì\84\9c ê¸°ì\97¬ì\97\90 ì\9e\90ì\8b ì\9d\98 ì\9d´ë¦\84ì\9d´ ë\93¤ì\96´ê°\80ê²\8c ë\90©니다.",
+       "prefs-help-realname": "ì\8b¤ëª\85ì\9d\80 ì\84 í\83\9d ì\82¬í\95­ì\9e\85ë\8b\88ë\8b¤.\nì\8b¤ëª\85ì\9d\84 ì\9e\85ë ¥í\95\98ë©´ ë\8b¹ì\8b ì\9d\98 ê¸°ì\97¬ì\97\90 ë\8c\80í\95\9c ì \80ì\9e\91ì\9e\90í\91\9cì\8b\9cì\97\90 ì\93°ì\9d´ê²\8c ë\90  ì\88\98 ì\9e\88ì\8aµ니다.",
        "prefs-help-email": "이메일 주소 입력은 선택 사항입니다. 다만 비밀번호를 잊었을 때 비밀번호를 재설정하기 위해 필요합니다.",
        "prefs-help-email-others": "자신의 문서나 토론 문서에 있는 이메일 보내기 링크로 다른 사용자가 연락할 수 있게 할 수도 있습니다.\n이 경우에도 이메일 주소는 다른 사용자가 연락할 때 공개되지 않습니다.",
        "prefs-help-email-required": "이메일 주소가 필요합니다.",
        "prefs-tokenwatchlist": "토큰",
        "prefs-diffs": "차이",
        "prefs-help-prefershttps": "이 사용자 환경 설정은 다음 로그인부터 적용됩니다.",
+       "prefswarning-warning": "사용자 환경 설정에서 바뀐 것이 아직 저장되어 있지 않습니다.\n사용자 환경 설정에서 \"$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": "다른 사용자가 편집을 못하도록 차단",
        "recentchanges-feed-description": "이 피드에 위키의 최근 바뀜을 추적합니다.",
        "recentchanges-label-newpage": "새로 만든 문서",
        "recentchanges-label-minor": "사소한 편집",
-       "recentchanges-label-bot": "ë´\87ì\9d\98 편집",
-       "recentchanges-label-unpatrolled": "ì\95\84ì§\81 ì\88\9cì°°하지 않은 편집",
+       "recentchanges-label-bot": "ë´\87ì\9d´ ì\88\98í\96\89í\95\9c 편집",
+       "recentchanges-label-unpatrolled": "ì\95\84ì§\81 ì \90ê²\80하지 않은 편집",
        "recentchanges-label-plusminus": "바이트로 표기된 바뀐 문서 크기",
        "recentchanges-legend-heading": "'''범례:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|새 문서 목록]]도 보세요)",
        "nolicense": "선택하지 않음",
        "licenses-edit": "라이선스 옵션 편집",
        "license-nopreview": "(미리 보기 불가능)",
-       "upload_source_url": "(올바르고, 공개적으로 접근할 수 있는 URL)",
+       "upload_source_url": "(올바르고, 공개적으로 접근할 수 있는 URL에서 선택한 파일)",
        "upload_source_file": "(당신의 컴퓨터에서 선택한 파일)",
        "listfiles-delete": "삭제",
        "listfiles-summary": "이 특수 문서는 모든 올려진 파일을 보여줍니다.",
        "filerevert-legend": "파일 되돌리기",
        "filerevert-intro": "'''[[Media:$1|$1]]''' 파일을 [$4 $2 $3 버전]으로 되돌립니다.",
        "filerevert-comment": "이유:",
-       "filerevert-defaultcomment": "$1 $2 버전으로 되돌림",
+       "filerevert-defaultcomment": "$1 $2 으로 되돌림",
        "filerevert-submit": "되돌리기",
        "filerevert-success": "'''[[Media:$1|$1]]''' 파일을 [$4 $2 $3 버전]으로 되돌렸습니다.",
        "filerevert-badversion": "입력된 시간 기록을 가진 파일의 로컬 버전이 없습니다.",
        "filedelete-maintenance-title": "파일을 삭제할 수 없습니다",
        "mimesearch": "MIME 검색",
        "mimesearch-summary": "이 페이지는 MIME 유형에 해당하는 파일을 필터합니다.\n입력: 내용종류/하위종류나 내용종류/*, 예를 들어 <code>image/jpeg</code>",
-       "mimetype": "MIME 형식:",
+       "mimetype": "MIME 종류:",
        "download": "다운로드",
        "unwatchedpages": "주시되지 않는 문서 목록",
        "listredirects": "넘겨주기 문서 목록",
        "statistics": "통계",
        "statistics-header-pages": "문서 통계",
        "statistics-header-edits": "편집 통계",
-       "statistics-header-views": "방문 통계",
        "statistics-header-users": "사용자 통계",
        "statistics-header-hooks": "기타 통계",
        "statistics-articles": "본문",
        "statistics-files": "올려져 있는 파일",
        "statistics-edits": "{{SITENAME}} 설치 이후 문서의 전체 편집 수",
        "statistics-edits-average": "문서당 평균 편집 수",
-       "statistics-views-total": "총 방문 수",
-       "statistics-views-total-desc": "존재하지 않는 문서나 특수 문서에 대한 방문 수는 포함하지 않았습니다",
-       "statistics-views-peredit": "편집당 방문 횟수",
        "statistics-users": "등록된 [[Special:ListUsers|사용자]]",
        "statistics-users-active": "활동적인 사용자",
        "statistics-users-active-desc": "최근 {{PLURAL:$1|$1일}} 동안 활동한 사용자",
-       "statistics-mostpopular": "가장 많이 읽힌 문서",
        "pageswithprop": "문서 속성이 있는 문서",
        "pageswithprop-legend": "문서 속성이 있는 문서",
        "pageswithprop-text": "이 문서는 특정 문서 속성을 사용한 문서를 나타냅니다.",
        "uncategorizedtemplates": "분류되지 않은 틀 목록",
        "unusedcategories": "사용하지 않는 분류 목록",
        "unusedimages": "사용하지 않는 파일 목록",
-       "popularpages": "인기 있는 문서 목록",
        "wantedcategories": "필요한 분류 목록",
        "wantedpages": "필요한 문서 목록",
        "wantedpages-badtitle": "문서 제목이 잘못되었습니다: $1",
        "pager-older-n": "{{PLURAL:$1|이전 1개|이전 $1개}}",
        "suppress": "오버사이트",
        "querypage-disabled": "이 특수 문서는 성능상의 이유로 비활성화되었습니다.",
+       "apihelp": "API 도움말",
        "booksources": "책 찾기",
        "booksources-search-legend": "책 원본 검색",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "검색",
+       "booksources-search": "검색",
        "booksources-text": "아래의 목록은 새 책이나 중고 책을 판매하는 바깥 사이트로, 원하는 책의 정보를 얻을 수 있습니다.",
        "booksources-invalid-isbn": "입력한 ISBN이 잘못된 것으로 보입니다. 원본과 대조해 보세요.",
        "specialloguserlabel": "작업 수행자:",
        "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": "ë\84ë¥\98ê°\80 ê¹¨ì§\84 í\8c\8cì\9d¼ ë§\81í\81¬ (í\8c\8cì\9d¼ì\9d´ ì¡´ì\9e¬í\95\98ì§\80 ì\95\8aì\9d\84 ë\95\8c í\8f¬í\95¨ë\90\98ë\8a\94 ë§\81í\81¬)ê°\80 ì\9e\88ë\8a\94 ë¬¸ì\84\9cê°\80 ì\9e\88ë\8b¤ë©´ ì¶\94ê°\80ë\90©ë\8b\88ë\8b¤.",
-       "hidden-category-category-desc": "기본적으로 문서에 분류 링크 상자가 보여지는 것에서 막기 위한, <code><nowiki>__HIDDENCAT__</nowiki></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": "문ì\84\9cì\97\90 ê¹¨ì§\84 í\8c\8cì\9d¼ ë§\81í\81¬ (í\8c\8cì\9d¼ì\9d´ ì¡´ì\9e¬í\95\98ì§\80 ì\95\8aì\9d\84 ë\95\8c í\8f¬í\95¨ë\90\98ë\8a\94 ë§\81í\81¬)를 í\8f¬í\95¨í\95©ë\8b\88ë\8b¤.",
+       "hidden-category-category-desc": "기본적으로 문서에 분류 링크 상자가 보여지는 것에서 막기 위한, 분류의 문서 내용에 <code><nowiki>__HIDDENCAT__</nowiki></code>를 포함합니다.",
        "trackingcategories-nodesc": "사용할 수 있는 설명이 없습니다.",
        "trackingcategories-disabled": "분류가 비활성화되어 있습니다",
        "mailnologin": "보낼 이메일 주소가 없음",
        "mywatchlist": "주시문서 목록",
        "watchlistfor2": "사용자:$1 $2",
        "nowatchlist": "주시하는 문서가 아직 없습니다.",
-       "watchlistanontext": "주시문서 목록을 보거나 고치려면 $1 하세요.",
+       "watchlistanontext": "주시문서 목록을 보거나 고치려면 로그인하세요.",
        "watchnologin": "로그인하지 않음",
        "addwatch": "주시문서 목록에 추가",
        "addedwatchtext": "\"[[:$1]]\" 문서를 [[Special:Watchlist|주시문서 목록]]에 추가했습니다.\n앞으로 이 문서나 관련된 토론 문서가 바뀌면 보일 것입니다.",
        "watchlist-details": "별도의 토론 문서를 세지 않고, 주시문서 목록에 {{PLURAL:$1|문서 $1개}}가 있습니다.",
        "wlheader-enotif": "이메일 알림 기능이 활성화되었습니다.",
        "wlheader-showupdated": "마지막으로 방문한 이후에 바뀐 문서는 '''굵은 글씨'''로 보입니다.",
-       "wlnote": "다음은 최근 {{PLURAL:$2|'''$2'''시간}} 동안 {{PLURAL:$1|바뀐 문서 '''$1'''개 입니다}}. ($3 $4 기준)",
-       "wlshowlast": "ìµ\9cê·¼ $1ì\8b\9cê°\84 $2ì\9d¼ ë\98\90ë\8a\94 $3 ë\8f\99ì\95\88ì\97\90 ë°\94ë\80\90 ë¬¸ì\84\9c ë³´ê¸°",
+       "wlnote": "$3 $4 기준으로, 아래에 최근 {{PLURAL:$2|한 시간|<strong>$2</strong>시간}} 동안 {{PLURAL:$1|마지막 바뀜이|마지막 바뀜 <strong>$1</strong>개가}} 있습니다.",
+       "wlshowlast": "ìµ\9cê·¼ $1ì\8b\9cê°\84 $2ì\9d¼ ë\8f\99ì\95\88ì\9d\98 ë°\94ë\80\9c ë³´ê¸°",
        "watchlist-options": "주시문서 목록 설정",
        "watching": "주시 추가 중…",
        "unwatching": "주시 해제 중…",
        "exbeforeblank": "비우기 전의 내용: \"$1\"",
        "delete-confirm": "\"$1\" 삭제",
        "delete-legend": "삭제",
-       "historywarning": "'''경고:''' 삭제하려는 문서에 이전 {{PLURAL:$1|편집 역사}} 약 $1개가 있습니다:",
+       "historywarning": "<strong>경고:</strong> 삭제하려고 하는 문서에 {{PLURAL:$1|판}} $1개의 역사가 있습니다:",
        "confirmdeletetext": "문서와 문서 역사를 삭제하려고 합니다.\n삭제하려는 문서가 맞는지, 이 문서를 삭제하는 것이 [[{{MediaWiki:Policy-url}}|정책]]에 맞는 행동인지를 확인해 주세요.",
        "actioncomplete": "동작 완료",
        "actionfailed": "명령 실패",
        "dellogpage": "삭제 기록",
        "dellogpagetext": "아래의 목록은 최근에 삭제된 문서입니다.",
        "deletionlog": "삭제 기록",
-       "reverted": "이전 버전으로 되돌렸습니다.",
+       "reverted": "이전 판으로 되돌렸습니다",
        "deletecomment": "이유:",
        "deleteotherreason": "다른 이유/추가적인 이유:",
        "deletereasonotherlist": "다른 이유",
        "delete-edit-reasonlist": "삭제 이유 편집",
        "delete-toobig": "이 문서에는 {{PLURAL:$1|편집 역사}}가 $1개 있습니다.\n편집 역사가 긴 문서를 삭제하면 {{SITENAME}}에 큰 혼란을 줄 수 있기 때문에 삭제할 수 없습니다.",
        "delete-warning-toobig": "이 문서에는 {{PLURAL:$1|편집 역사}}가 $1개 있습니다.\n편집 역사가 긴 문서를 삭제하면 {{SITENAME}} 데이터베이스 동작에 큰 영향을 줄 수 있습니다.\n주의해 주세요.",
+       "deleteprotected": "이 문서가 잠겨 있기 때문에 삭제할 수 없습니다.",
        "deleting-backlinks-warning": "'''경고:''' 삭제하려는 문서가 [[Special:WhatLinksHere/{{FULLPAGENAME}}|다른 문서]]에 링크되어 있거나 끼워져 있습니다.",
        "rollback": "편집 되돌리기",
        "rollback_short": "되돌리기",
        "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": "[[Special:Contributions/$2|$2]]([[User talk:$2|토론]])의 편집을 [[User:$1|$1]]의 마지막 으로 되돌림",
        "revertpage-nouser": "숨긴 사용자의 편집을 {{GENDER:$1|[[User:$1|$1]]}}의 마지막 판으로 되돌림",
-       "rollback-success": "$1의 편집을 $2의 마지막 버전으로 되돌렸습니다.",
+       "rollback-success": "$1의 편집을 되돌렸습니다.\n$2의 마지막 판으로 바뀌었습니다.",
        "sessionfailure-title": "세션 실패",
        "sessionfailure": "로그인 세션에 문제가 발생한 것 같습니다.\n세션 하이재킹을 막기 위해 동작이 취소되었습니다.\n브라우저의 뒤로 버튼을 누르고 문서를 새로 고침한 후에 다시 시도해 주세요.",
        "protectlogpage": "문서 보호 기록",
        "protect-othertime": "다른 기간:",
        "protect-othertime-op": "다른 기간",
        "protect-existing-expiry": "현재 만료 기간: $2 $3",
+       "protect-existing-expiry-infinity": "기존 만료 시간: 무기한",
        "protect-otherreason": "다른 이유/추가적인 이유:",
        "protect-otherreason-op": "다른 이유",
-       "protect-dropdown": "*ì\9d¼ë°\98ì \81ì\9d¸ ë³´í\98¸ ì\9d´ì\9c \n** ë¹\88ë²\88í\95\9c í\9b¼ì\86\90 í\96\89ì\9c\84\n** ë¹\88ë²\88í\95\9c ê´\91ê³  í\96\89ì\9c\84\n** 비생산적인 편집 분쟁\n** 방문이 많은 문서",
+       "protect-dropdown": "*ì\9d¼ë°\98ì \81ì\9d¸ ë³´í\98¸ ì\9d´ì\9c \n** ë¹\88ë²\88í\95\9c í\9b¼ì\86\90 í\96\89ì\9c\84\n** ë¹\88ë²\88í\9e\88 ê´\91고를 ë\84£ì\9d\8c\n** 비생산적인 편집 분쟁\n** 방문이 많은 문서",
        "protect-edit-reasonlist": "보호 이유 편집하기",
        "protect-expiry-options": "1시간:1 hour,1일:1 day,1주일:1 week,2주일:2 weeks,1개월:1 month,3개월:3 months,6개월:6 months,1년:1 year,무기한:infinite",
        "restriction-type": "권한:",
        "unblocked": "[[User:$1|$1]] 사용자의 차단을 해제했습니다.",
        "unblocked-range": "$1 대역이 차단 해제되었습니다.",
        "unblocked-id": "$1 차단이 해제되었습니다.",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] 사용자가 차단 해제되었습니다.",
        "blocklist": "차단된 사용자 목록",
        "ipblocklist": "차단된 사용자",
        "ipblocklist-legend": "차단된 사용자 찾기",
        "import-upload": "XML 데이터 올리기",
        "import-token-mismatch": "세션 데이터가 손실되었습니다.\n다시 시도하세요.",
        "import-invalid-interwiki": "해당 위키에서 문서를 가져올 수 없습니다.",
-       "import-error-edit": "현재 문서를 편집할 권한이 없기 때문에 \"$1\" 문서를 불러올 수 없습니다.",
-       "import-error-create": "현재 문서를 만들 권한이 없기 때문에 \"$1\" 문서를 불러올 수 없습니다.",
-       "import-error-interwiki": "\"$1\" 문서는 제목이 바깥 링크(인터위키)용으로 할당되어 있기 때문에 가져오지 않습니다.",
-       "import-error-special": "\"$1\" 문서는 특수 문서에 속해 있기 때문에 가져오지 않습니다.",
-       "import-error-invalid": "\"$1\" ë¬¸ì\84\9cë\8a\94 ì \9c목ì\9d´ ì\9e\98못ë\90\98ì\97\88기 ë\95\8c문ì\97\90 ê°\80ì ¸ì\98¤ì§\80 ì\95\8a습니다.",
+       "import-error-edit": "문서를 편집할 수 없기 때문에 \"$1\" 문서를 가져올 수 없었습니다.",
+       "import-error-create": "문서를 만들 수 없기 때문에 \"$1\" 문서를 가져올 수 없었습니다.",
+       "import-error-interwiki": "\"$1\" ë¬¸ì\84\9cë\8a\94 ì \9c목ì\9d´ ë°\94ê¹¥ ë§\81í\81¬(ì\9d¸í\84°ì\9c\84í\82¤)ì\9a©ì\9c¼ë¡\9c í\95 ë\8b¹ë\90\98ì\96´ ì\9e\88기 ë\95\8c문ì\97\90 ê°\80ì ¸ì\98¤ì§\80 ì\95\8aì\95\98ì\8aµë\8b\88ë\8b¤.",
+       "import-error-special": "\"$1\" 문서는 문서가 허용하지 않는 특수 이름공간에 속해 있기 때문에 가져오지 않았습니다.",
+       "import-error-invalid": "\"$1\" ë¬¸ì\84\9cë\8a\94 ì\9d´ ì\9c\84í\82¤ì\97\90ì\84\9c ê°\80ì ¸ì\98¤ë ¤ê³  í\95\98ë\8a\94 ë¬¸ì\84\9cì\9d\98 ì\9d´ë¦\84ì\9d´ ì\98¬ë°\94르ì§\80 ì\95\8a기 ë\95\8c문ì\97\90 ê°\80ì ¸ì\98¤ì§\80 ì\95\8aì\95\98습니다.",
        "import-error-unserialize": "\"$1\" 문서의 $2 판이 일렬적이지 않습니다. $3 내용 모델을 사용하여 $4 형식으로 일렬화되도록 판을 보고했습니다.",
        "import-error-bad-location": "$3 내용 모델을 사용하는 $2 판을 이 위키의 \"$1\"에 저장할 수 없습니다. 모델을 문서에서 지원하지 않습니다.",
        "import-options-wrong": "잘못된 {{PLURAL:$2|선택 사항}}: <nowiki>$1</nowiki>",
        "print.css": "/* 이 CSS 설정은 인쇄 출력 화면에 적용됩니다 */",
        "noscript.css": "/* 이 CSS 설정은 자바스크립트를 비활성화한 사용자에 적용됩니다 */",
        "group-autoconfirmed.css": "/* 이 CSS 설정은 자동 인증된 사용자에만 적용됩니다 */",
+       "group-user.css": "/* 이 CSS 설정은 등록된 사용자에만 적용됩니다 */",
        "group-bot.css": "/* 이 CSS 설정은 봇에만 적용됩니다 */",
        "group-sysop.css": "/* 이 CSS 설정은 관리자에만 적용됩니다 */",
        "group-bureaucrat.css": "/* 이 CSS 설정은 사무관에만 적용됩니다 */",
        "common.js": "/* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. */",
        "group-autoconfirmed.js": "/* 이 자바스크립트 설정은 자동 인증된 사용자에만 적용됩니다 */",
+       "group-user.js": "/* 이 자바스크립트 설정은 등록된 사용자에만 적용됩니다 */",
        "group-bot.js": "/* 이 자바스크립트 설정은 봇에만 적용됩니다 */",
        "group-sysop.js": "/* 이 자바스크립트 설정은 관리자에만 적용됩니다 */",
        "group-bureaucrat.js": "/* 이 자바스크립트 설정은 사무관에만 적용됩니다 */",
        "pageinfo-robot-policy": "로봇에 의한 색인",
        "pageinfo-robot-index": "허용됨",
        "pageinfo-robot-noindex": "불허됨",
-       "pageinfo-views": "읽은 수",
        "pageinfo-watchers": "문서를 주시하는 사용자 수",
        "pageinfo-few-watchers": "{{PLURAL:$1|주시하는 사용자}} $1명 미만",
        "pageinfo-redirects-name": "이 문서의 넘겨주기 수",
        "exif-urgency-low": "낮음 ($1)",
        "exif-urgency-high": "높음 ($1)",
        "exif-urgency-other": "사용자 정의 ($1)",
-       "watchlistall2": "모두",
        "namespacesall": "모두",
        "monthsall": "모든 달",
        "confirmemail": "이메일 주소 확인",
        "logentry-upload-overwrite": "$1 사용자가 $3의 새 판을 {{GENDER:$2|올렸습니다}}",
        "logentry-upload-revert": "$1 사용자가 $3 파일을 {{GENDER:$2|올렸습니다}}",
        "rightsnone": "(없음)",
+       "revdelete-summary": "편집 요약",
        "feedback-bugornote": "기술적 문제를 구체적으로 설명할 준비가 되었다면 [$1 버그를 신고]해 주세요.\n아니면 아래에 쉬운 양식을 쓸 수 있습니다. 의견은 사용자 이름과 함께 \"[$3 $2]\"에 남겨질 것입니다.",
        "feedback-subject": "제목:",
        "feedback-message": "내용:",
        "log-name-pagelang": "언어 바꾸기 기록",
        "log-description-pagelang": "문서 언어를 바꾼 기록입니다.",
        "logentry-pagelang-pagelang": "$1 사용자가 $3의 문서 언어를 $4에서 $5로 {{GENDER:$2|바꾸었습니다}}.",
+       "default-skin-not-found": "이런! 당신의 위키에 <code dir=\"ltr\">$wgDefaultSkin</code>에 <code>$1</code>(으)로 지정한 기본 스킨은 사용할 수 없습니다.\n\n설치에는 다음 스킨이 포함된 것으로 보입니다. 스킨을 활성화하고 기본값으로 선택하는 방법에 대한 정보에 대해서는 [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: 스킨 설정]을 보세요.\n\n$2\n\n; 미디어위키를 설치했다면:\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 dir=\"ltr\">skins/</code> 디렉터리 안에 git를 통해 <code>mediawiki/skins/*</code> 저장소 중 하나를 복제하세요.\n: 당신이 미디어위키 개발자이면 당신의 git 저장소를 방해하면 안됩니다.\n\n; 미디어위키를 업그레이드했다면:\n: 미디어위키 1.24와 새 버전은 더 이상 설치된 스킨을 자동으로 활성화하지 않습니다 ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: 스킨 자동발견]을 보세요). 현재 설치된 스킨을 모두 활성화하려면 <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 dir=\"ltr\">$wgDefaultSkin</code>에 <code>$1</code>(으)로 지정한 기본 스킨은 사용할 수 없습니다.\n\n설치된 스킨은 없습니다.\n\n; 미디어위키를 설치했거나 업그레이드했다면:\n: 아마 git에서 설치했거나, 어떤 다른 방법을 사용하여 직접 설치했을 수 있을 것으로 봅니다. 미디어위키 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 dir=\"ltr\">skins/</code> 디렉터리 안에 git를 통해 <code>mediawiki/skins/*</code> 저장소 중 하나를 복제하세요.\n: 당신이 미디어위키 개발자이면 당신의 git 저장소를 방해하면 안됩니다. 스킨을 활성화하고 기본값으로 선택하는 방법에 대한 정보에 대해서는 [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 ('''비활성화''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''비활성화''')",
+       "mediastatistics": "미디어 통계",
+       "mediastatistics-summary": "올려진 파일 유형에 대한 통계입니다. 이 통계는 파일의 가장 최신 판만을 포함합니다. 오래되거나 삭제된 파일의 판은 제외됩니다.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 바이트}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME 종류",
+       "mediastatistics-table-extensions": "가능한 확장 기능",
+       "mediastatistics-table-count": "파일 수",
+       "mediastatistics-table-totalbytes": "압축된 크기",
+       "mediastatistics-header-unknown": "알 수 없음",
+       "mediastatistics-header-bitmap": "비트맵 그림",
+       "mediastatistics-header-drawing": "드로잉 (벡터 이미지)",
+       "mediastatistics-header-audio": "소리",
+       "mediastatistics-header-video": "동영상",
+       "mediastatistics-header-multimedia": "리치 미디어",
+       "mediastatistics-header-office": "오피스",
+       "mediastatistics-header-text": "텍스트",
+       "mediastatistics-header-executable": "실행 파일",
+       "mediastatistics-header-archive": "압축 파일",
+       "json-warn-trailing-comma": "뒤 {{PLURAL:$1|쉼표}} $1개가 JSON에서 제거되었습니다",
+       "json-error-unknown": "JSON에 문제가 있었습니다. 오류: $1",
+       "json-error-depth": "최대 스택 깊이를 초과했습니다",
+       "json-error-state-mismatch": "올바르지 않거나 잘못된 형식의 JSON",
+       "json-error-ctrl-char": "제어 문자 오류, 올바르지 않게 인코딩되어 있을 수 있습니다",
+       "json-error-syntax": "구문 오류",
+       "json-error-utf8": "잘못된 형식의 UTF-8 문자, 올바르지 않게 인코딩되어 있을 수 있습니다",
+       "json-error-recursion": "인코딩할 값에 하나 이상의 재귀 참조",
+       "json-error-inf-or-nan": "인코딩할 값에 하나 이상의 NAN이나 INF 값",
+       "json-error-unsupported-type": "인코딩할 수 없는 유형의 값을 받았습니다"
 }
index 4cded69..2cc313f 100644 (file)
        "pager-older-n": "{{PLURAL:$1|1=важжык 1|важжык $1}}",
        "booksources": "Небöггез-öшмöссэз",
        "booksources-search-legend": "Небöг йылiсь юöррез кошшан",
-       "booksources-go": "Кошшыны",
        "log": "Журналлэз",
        "allpages": "Быдöс листбоккез",
        "prevpage": "Одзжыкся листбок ($1)",
        "unwatch": "Оз ков синмавны",
        "unwatchthispage": "Дугдыны синмавны",
        "watchlist-details": "Синмалан нимлёдзат $1 {{PLURAL:$1|листбок|листбок|листбок}}, сёрнитан листбоккесö лыдö босьттöг.",
-       "wlshowlast": "Мыччавны медбöрья $1 час $2 лун $3 понда",
+       "wlshowlast": "Мыччавны медбöрья $1 час $2 лун  понда",
        "watchlist-options": "Синмалан нимлёз понда лöсьöтаннэз",
        "watching": "Синмавны …",
        "unwatching": "Дугдыны синмавны …",
        "metadata-fields": "EXIF метадатаэза ыббез, кöдна шуöмöсь нимлёдзын, лоасö сё ни мыччалöмöсь серпаса листбок вылын, мöдiккез лоасö, он кö шу мöднёж, сайöвтöмöсь:\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": "Вылына",
-       "watchlistall2": "быдöс",
        "namespacesall": "быдöс",
        "monthsall": "быдöс",
        "watchlisttools-view": "Видзöт лöсялана вильмöтöммез",
index d027276..141312d 100644 (file)
        "passwordreset-emailsent-capture": "Ийилген пароль эсгертиу e-mail тюбюрекде берилибди.",
        "passwordreset-emailerror-capture": "Пароль эсгертиу e-mail генерация этилди (тюбюрекде берилибди), аны {{GENDER:$2|къошулуучугъа}} ашырыу джетишимсиз болду, чурум: $1",
        "changeemail": "Электрон почтаны адресин ауушдур",
-       "changeemail-header": "Электрон почтаны адресин ауушдуруу",
        "changeemail-text": "Сизни e-mail адресигизни тюрлендирир ючюн бу форманы толтуругъуз. Тюрлениуню бегитир ючюн паролну джазаргъа керек боллукъду.",
        "changeemail-no-info": "Бу бетни кёрюр ючюн сиз системагъа тергеу джазыуугъуз (аккаунтугъуз) бла кирирге керексиз.",
        "changeemail-oldemail": "Почтаны бусагъатдагъы адреси:",
        "changeemail-none": "(джокъ)",
        "changeemail-password": "«{{SITENAME}}» проектде паролугъуз:",
        "changeemail-submit": "Адресни тюрлендир",
-       "changeemail-cancel": "Ызына алыу",
        "resettokens": "Токенлени джибер",
        "resettokens-legend": "Токенлени джибер",
        "resettokens-tokens": "Токенле:",
        "mergehistory-same-destination": "Тамал эмда нюзюрдеги бетле бирча болургъа болмайды",
        "mergehistory-reason": "Чурум:",
        "mergelog": "Бирлешиулени журналы",
-       "pagemerge-logentry": "[[$1]] бла [[$2]] бирлешдирилгенди ($3 дери версияла)",
        "revertmerge": "Бёлюрге",
        "mergelogpagetext": "Тюбюрек бетлени тарихлерини ахыр бирлешдириулери берилгенди.",
        "history-title": "$1 — тюрлениу тарихи",
        "searchrelated": "бейламлы",
        "searchall": "бютеу",
        "showingresults": "Тюбюрек №&nbsp;<strong>$2</strong> башлаб <strong>$1</strong> {{PLURAL:$1|1=эсеб|эсебле}} {{PLURAL:$1|1=кёргюзюлгенди|кёргюзюлгендиле}}.",
-       "showingresultsheader": "'''$4''' ючюн {{PLURAL:$5|1='''$3''' эсебден '''$1'''|'''$1 — $2''' арасы '''$3''' эсеб}}",
        "search-nonefound": "Соруу бла келишген эсеб джокъду",
        "powersearch-legend": "Кенг излеу",
        "powersearch-ns": "Атла аламда излеу:",
        "randomincategory": "Категориядагъы эсде болмагъан бет",
        "randomincategory-invalidcategory": "«$1» категория джокъду.",
        "randomincategory-nopages": "[[:Category:$1]] категорияда бетле джокъдула.",
-       "randomincategory-selectcategory-submit": "Кёч",
        "randomredirect": "Сакъланмагъан джибериу",
        "randomredirect-nopages": "«$1» ат аланда чырт бир джибериу джокъду.",
        "statistics": "Статистика",
        "statistics-header-pages": "Бетлени статистикалары",
        "statistics-header-edits": "Тюрлендириулени статистикасы",
-       "statistics-header-views": "Къарауланы статистикалары",
        "statistics-header-users": "Къошулуучуланы статистикалары",
        "statistics-header-hooks": "Башха статистика",
        "statistics-articles": "Статьяла",
        "statistics-files": "Джюкленнген файлла",
        "statistics-edits": "{{SITENAME}} къуралгъанындан бери этилген тюрлендириуле.",
        "statistics-edits-average": "Хар бетдеги тюрлендириулени орта саны",
-       "statistics-views-total": "Къараула бютеулей",
-       "statistics-views-total-desc": "Къуралмагъан бетле бла къуллукъ бетлеге къараула саналмайдыла.",
-       "statistics-views-peredit": "Тюрлендириуге къарауну саны",
        "statistics-users": "Регистрация этилген [[Special:ListUsers|къошулуучула]]",
        "statistics-users-active": "Актив къошулуучула",
        "statistics-users-active-desc": "Ахыр {{PLURAL:$1|кюнде|$1 кюнде}} ишлеме этген къошулуучула",
-       "statistics-mostpopular": "Эм кёб къаралгъан бетле",
        "pageswithprop-prop": "Амалны аты:",
        "pageswithprop-submit": "Таб",
        "doubleredirects": "Джибериу болгъан джибериуле",
        "uncategorizedtemplates": "Категория салынмагъан шаблонла",
        "unusedcategories": "Хайырланылынмагъан категорияла",
        "unusedimages": "Хайырланмагъан файлла",
-       "popularpages": "Популяр бетле",
        "wantedcategories": "Керекли категорияла",
        "wantedpages": "Керекли бетле",
        "wantedpages-badtitle": "Сорманы эсеблеринде халатлы башлыкъ: $1",
        "booksources": "Китабланы чыкъгъан джерлери",
        "booksources-search-legend": "Китабны юсюнден информация излеу",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Таб",
        "booksources-text": "Бу бетде джангы эмда эски китаб сатхан башха сайтлагъа джибериулени тизмеси барды, эм излеген китабларыгъызны юсюнден кёбюрек билги билирге боллукъсуз.",
        "booksources-invalid-isbn": "Берилген ISBN джараусуз кибик кёрюнеди; оригинал къайнакъдан кёчюрюлген заманда халатланы контроль этигиз.",
        "specialloguserlabel": "Толтуруучу:",
        "wlheader-enotif": "E-mail бла хапар бериу джандырылыбды.",
        "wlheader-showupdated": "Ахыр кириуюгюзден сора бетни тюрлениулери '''къалын''' джазыу бла кёргюзюлгенди.",
        "wlnote": "Тюбюндеди кёргюзюлгенди: ахыр '''$2''' сагъатха этилген ахыр '''$1''' тюрлениу, $3 $4 заманнга дери.",
-       "wlshowlast": "Арт $1 сагъат $2 кюннге $3 кёргюз",
+       "wlshowlast": "Арт $1 сагъат $2 кюннге  кёргюз",
        "watchlist-options": "Кёзде тургъан тизмени джарашдырыулары",
        "watching": "Кёзде тургъан тизмеге къошуу...",
        "unwatching": "Кёзде тургъан тизмеден кетериу...",
        "import": "Бетлени импорт эт",
        "importinterwiki": "Викиле арасы импорт",
        "import-interwiki-text": "Импорт этер ючюн викини эм импорт этилген бетни атын сайлагъыз.\nТюрлениулени тарихи бла джазыучуланы атлары сакъланныкъды.\nБютеу викиле арасы импорт операцияла [[Special:Log/import|импортну журналына]] кёчюрюллюкдю.",
-       "import-interwiki-source": "Къайнакъ вики/бет:",
        "import-interwiki-history": "Бу бетни бютеу тюрлениу тарихин копия эт",
        "import-interwiki-templates": "Бютеу шаблонланы ичине сал",
        "import-interwiki-submit": "Импорт",
        "pageinfo-robot-policy": "Излеу роботла бла индексация",
        "pageinfo-robot-index": "Эркинлик берилгенди",
        "pageinfo-robot-noindex": "Эркинлик берилмегенди",
-       "pageinfo-views": "Къарауланы саны",
        "pageinfo-watchers": "Бетни кёзде тутханланы саны",
        "pageinfo-redirects-name": "Бу бетге редиректлени саны",
        "pageinfo-firstuser": "Бетле къураучу",
        "exif-urgency-low": "Алаша ($1)",
        "exif-urgency-high": "Мийик ($1)",
        "exif-urgency-other": "Къошулуучу салгъан приоритет ($1)",
-       "watchlistall2": "бютеу",
        "namespacesall": "бютеу",
        "monthsall": "бютеу",
        "confirmemail": "Электорн адресни мюкюл эт",
        "logentry-rights-rights-legacy": "$1 къошулуучу, $3 къушулуучуну къауумлада членлигин {{GENDER:$2|тюрлендирди}}",
        "logentry-rights-autopromote": "$1 къошулуучу, $4 къауумдан автомат халда $5 къауумгъа {{GENDER:$2|кёчюрюлдю}}",
        "rightsnone": "(джокъ)",
+       "revdelete-summary": "тюрлениулени ачыкълау",
        "feedback-subject": "Тема:",
        "feedback-message": "Билдириу:",
        "feedback-cancel": "Ызына алыу",
index 5cb828e..aab1026 100644 (file)
        "movethispage": "Muf dhis pej hyar",
        "booksources": "Buk sòrsdèm",
        "booksources-search-legend": "Sarcg fòr buk sòrsdèm",
-       "booksources-go": "Go",
        "log": "Lògdèm",
        "allpages": "Òll pejdèm",
        "allarticles": "Òll pejdèm",
        "show-big-image": "Original fail",
        "ilsubmit": "Sarch",
        "metadata": "Mètadata",
-       "watchlistall2": "òll",
        "namespacesall": "òll",
        "monthsall": "òll",
        "confirmemail": "Kònfirm yu emel addrèss",
index d083aa1..dcc2e27 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Harvzsf",
-            "Joebertj",
-            "Jose77",
-            "Oxyzen",
-            "RonaldPanaligan"
-        ]
-    },
-    "tog-underline": "Koritan ang dalum kang manga ''link'':",
-    "tog-hideminor": "Tagoon ang gagmay nga ''edit'' sa mga bag-o nga ilis",
-    "tog-extendwatchlist": "Palapadun ang ''watchlist'' agud nga mapakita ang tanan nga ginasogtan nga pag-ilis",
-    "tog-numberheadings": "Automatiko nga togroan kang nomero ang manga ''heading''",
-    "tog-showtoolbar": "Ipakita ang pangbolig sa pag-ilis (JavaScript)",
-    "tog-rememberpassword": "Tandaan ang akun nga ''log-in'' sa dya nga ''computer'' (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "tog-watchcreations": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpanghimo ko",
-    "tog-watchdefault": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpang-''edit'' ko",
-    "tog-watchmoves": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpanghalin ko",
-    "tog-watchdeletion": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpamara ko",
-    "tog-previewonfirst": "Ipakita ang preview sa ona nga ilis",
-    "tog-enotifwatchlistpages": "Padarhan ako kang e-mail kon may nag-ilis kang pahina nga akun ginabantayan",
-    "tog-enotifminoredits": "Padarhan man ako kang ''e-mail'' tohay sa manga gagmay nga pag-ilis sa manga pahina",
-    "tog-shownumberswatching": "Ipakita ang karakuun kang manga ''user'' nga galantaw",
-    "tog-forceeditsummary": "Paman-an ako kon blanko nga ''edit summary'' ang akun ginapasulud",
-    "tog-watchlisthideown": "Indi pagpakita sa ''watchlist'' ang akun nga manga gin-islan",
-    "tog-watchlisthidebots": "Indi pagpakita sa ''watchlist'' ang manga gin-islan kang bot",
-    "tog-watchlisthideminor": "Indi pagpakita sa ''watchlist'' ang mga gagmay nga inislan",
-    "tog-ccmeonemails": "Padarhi man ako kang manga ''e-mail'' nga ginpadara ko sa iban nga manga ''user''",
-    "underline-always": "Pirme gid",
-    "underline-never": "Indi gid",
-    "underline-default": "Onay nga browser",
-    "sunday": "Domingo",
-    "monday": "Lones",
-    "tuesday": "Martes",
-    "wednesday": "Miyerkoles",
-    "thursday": "Webes",
-    "friday": "Biyernes",
-    "saturday": "Sabado",
-    "sun": "Dom",
-    "mon": "Lon",
-    "tue": "Mar",
-    "wed": "Miy",
-    "thu": "Web",
-    "fri": "Biy",
-    "sat": "Sab",
-    "january": "Enero",
-    "february": "Pebrero",
-    "march": "Marso",
-    "april": "Abril",
-    "may_long": "Mayo",
-    "june": "Honyo",
-    "july": "Holyo",
-    "august": "Agosto",
-    "september": "Setyembre",
-    "october": "Oktobre",
-    "november": "Nobyembre",
-    "december": "Disyembre",
-    "january-gen": "Enero",
-    "february-gen": "Pebrero",
-    "march-gen": "Marso",
-    "april-gen": "Abril",
-    "may-gen": "Abril",
-    "june-gen": "Honyo",
-    "july-gen": "Holyo",
-    "august-gen": "Agosto",
-    "september-gen": "Setyembre",
-    "october-gen": "Oktobre",
-    "november-gen": "Nobyembre",
-    "december-gen": "Disyembre",
-    "jan": "Ene",
-    "feb": "Peb",
-    "apr": "Abr",
-    "may": "May",
-    "jun": "Hon",
-    "jul": "Hol",
-    "aug": "Ago",
-    "sep": "Set",
-    "oct": "Okt",
-    "nov": "Nob",
-    "dec": "Dis",
-    "category_header": "Manga artikolo sa \"$1\"",
-    "subcategories": "Manga ''subcategory''",
-    "category-media-header": "Manga midya sa \"$1\"",
-    "category-empty": "''Wara it manga artikolo okon medya ang katergorya nga dya.''",
-    "about": "Angut sa Iwan",
-    "article": "Pahina kasudlan",
-    "newwindow": "(gabokas sa bag-o nga ''window'')",
-    "cancel": "Kanselar",
-    "moredotdotdot": "Raku pa...",
-    "mypage": "Akun nga pahina",
-    "anontalk": "Istoryahun ang dya nga ''IP''",
-    "qbfind": "Sagap",
-    "qbbrowse": "Bilid",
-    "qbedit": "Iislan",
-    "qbpageoptions": "Dya nga Pahina",
-    "faq": "FAQ",
-    "faqpage": "Project:FAQ",
-    "errorpagetitle": "Sayup",
-    "returnto": "Balik sa $1.",
-    "help": "Bolig",
-    "search": "Sagap",
-    "searchbutton": "Sagap",
-    "go": "Agto",
-    "searcharticle": "Agto",
-    "history": "Kasaysayan kang Pahina",
-    "history_short": "Kasaysayan",
-    "updatedmarker": "ginpabag-o halin kang orihi ko nga pagbisita",
-    "printableversion": "Bersyon nga sarang ma-''print''",
-    "permalink": "Permanyente nga ''link''",
-    "print": "Printa",
-    "edit": "Iislan",
-    "editthispage": "Islan ang dya nga pahina",
-    "delete": "Para",
-    "deletethispage": "Paraun ang dya nga Pahina",
-    "protect": "Amlig",
-    "protect_change": "iislan",
-    "protectthispage": "Amligan ang dya nga pahina",
-    "unprotect": "huksun ang proteksyon",
-    "unprotectthispage": "Huksun ang proteksyon sa dya nga pahina",
-    "newpage": "Bag-o nga pahina",
-    "talkpage": "Sogdanunun ang dya nga pahina",
-    "talkpagelinktext": "Wakal",
-    "specialpage": "Espesyal nga Pahina",
-    "postcomment": "Togro Komento",
-    "articlepage": "Turukun ang pahina kasudlan",
-    "talk": "Sugilanon",
-    "views": "Manga paglantaw",
-    "toolbox": "Pangbolig",
-    "otherlanguages": "Sa iban nga lingwahe",
-    "redirectpagesub": "Idaho ang pahina",
-    "protectedpage": "Protektado nga pahina",
-    "jumpto": "Lompat sa:",
-    "jumptosearch": "sagap",
-    "aboutsite": "Tunggəd sa {{SITENAME}}",
-    "aboutpage": "Project:Tunggəd",
-    "disclaimers": "Mga Panginwala",
-    "disclaimerpage": "Project:Panginwala nga Pangtanan",
-    "edithelp": "Panoytoy sa Pag-ilis",
-    "mainpage": "Pono nga Pahina",
-    "mainpage-description": "Pono nga Pahina",
-    "privacy": "Surundun sa Privacy",
-    "privacypage": "Project:Surundun sa Privacy",
-    "badaccess": "Sayup sa lisensya",
-    "badaccess-group0": "Indi kaw ginpasogtan nga himoon ang lihuk nga ginalaum mo.",
-    "badaccess-groups": "Ang imo ginpangayo nga lihuk ay para lang sa mga users sa {{PLURAL:$2|nga grupo|sara sa mga grupo}}: $1.",
-    "versionrequired": "Version $1 kang MediaWiki kinahanglan",
-    "versionrequiredtext": "Version $1 of MediaWiki kinahanglan para magamit ang page nga ja.\nLantawa sa [[Special:Version|version kang page]].",
-    "ok": "OK dun",
-    "youhavenewmessages": "May rudyan kaw nga $1 ($2).",
-    "youhavenewmessagesmulti": "May rudyan kaw nga manga bag-o nga mensahe sa $1",
-    "editsection": "iislan",
-    "editold": "iislan",
-    "toc": "Manga Sulud",
-    "showtoc": "ipakita",
-    "hidetoc": "itago",
-    "nstab-main": "Pahina",
-    "nstab-media": "Pahina kang Midya",
-    "nstab-special": "Espesyal nga pahina",
-    "nstab-project": "Pahina kang Proyekto",
-    "nstab-image": "Inayap",
-    "nstab-mediawiki": "Mensahe",
-    "nstab-template": "''Template''",
-    "nstab-help": "Pahina kang Panoytoy",
-    "nstab-category": "Kategorya",
-    "error": "Sayup",
-    "databaseerror": "Sayup sa database",
-    "readonly": "Napintalan ang ''database''",
-    "internalerror": "Sayup internal",
-    "internalerror_info": "Sayup internal: $1",
-    "filecopyerror": "Indi makopya ang ''file'' halin sa \"$1\" paagto sa \"$2\".",
-    "filerenameerror": "Indi maislan ang ngaran kang ''file'' halin sa \"$1\" paagto sa \"$2\".",
-    "filedeleteerror": "Indi mapara ang ''file'' nga \"$1\".",
-    "directorycreateerror": "Indi mahimo ang ''directory'' nga \"$1\".",
-    "filenotfound": "Indi makita ang ''file'' nga \"$1\".",
-    "fileexistserror": "Indi makasolat sa ''file'' nga \"$1\": may amo kadya run nga ''file''",
-    "viewsource": "Turukun ang ginhalinan",
-    "remembermypassword": "Tandaan ang akun nga ''log-in'' sa dya nga ''browser'' (kang maximum nga $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}})",
-    "nologinlink": "Himo ka sangka ''account''",
-    "createaccount": "Himo ka ''account''",
-    "preview": "Bilid",
-    "skin-preview": "Bilid",
-    "searchresultshead": "Sagap",
-    "youremail": "E-mail:",
-    "email": "E-mail",
-    "hide": "Itago",
-    "show": "Ipakita",
-    "upload-file-error": "Sayup internal",
-    "imgfile": "inayap",
-    "file-anchor-link": "Inayap",
-    "filedelete-submit": "Para",
-    "brokenredirects-edit": "Iislan",
-    "brokenredirects-delete": "para",
-    "withoutinterwiki-submit": "Ipakita",
-    "booksources-go": "Agto",
-    "categories": "Manga Kategorya",
-    "linksearch-ok": "Sagap",
-    "listusers-submit": "Ipakita",
-    "emailmessage": "Mensahe",
-    "delete-legend": "Para",
-    "restriction-edit": "Iislan",
-    "undelete-search-submit": "Sagap",
-    "sp-contributions-talk": "wakal",
-    "sp-contributions-submit": "Sagap",
-    "whatlinkshere-page": "Pahina:",
-    "isredirect": "idaho ang pahina",
-    "ipblocklist-submit": "Sagap",
-    "tooltip-ca-protect": "Amligan ang dya nga pahina",
-    "tooltip-ca-delete": "Paraun ang dya nga Pahina",
-    "tooltip-p-logo": "Pono nga Pahina",
-    "tooltip-n-mainpage": "Agtoni ang Main Page",
-    "tooltip-n-portal": "Tunggəd sa project, ano pwede mo mahimo, diin mo makita ang mga bagay bagay",
-    "tooltip-n-currentevents": "Pangita-a ang mga ginhalinan sa mga nagakaratabo sa tulad",
-    "tooltip-n-recentchanges": "Listahan kang mga bag-o lang na-ilis sa wiki.",
-    "tooltip-n-randompage": "Magkarga kang random nga page",
-    "tooltip-n-help": "Lugar kun diin mo masagap.",
-    "tooltip-t-whatlinkshere": "Listahan kang tanan nga mga wiki pages nga naga-link paagto ja",
-    "tooltip-t-recentchangeslinked": "Mga bag-o lng ilis nga mga page nga naka-link halin sa page nga ja",
-    "tooltip-feed-rss": "RSS feed para sa page nga ja",
-    "tooltip-feed-atom": "Atom feed para sa page nga ja",
-    "tooltip-t-contributions": "Lantawa ang listahan kang mga ginbulig kang user nga ja",
-    "tooltip-t-emailuser": "Padarhi kang e-mail ang user nga ja",
-    "ilsubmit": "Sagap",
-    "confirm_purge_button": "OK dun",
-    "imgmultigo": "Agto!",
-    "table_pager_limit_submit": "Agto",
-    "version-specialpages": "Manga espesyal nga pahina",
-    "fileduplicatesearch-submit": "Sagap",
-    "specialpages": "Manga espesyal nga pahina",
-    "expand_templates_ok": "OK dun",
-    "expand_templates_preview": "Bilid"
+       "@metadata": {
+               "authors": [
+                       "Harvzsf",
+                       "Joebertj",
+                       "Jose77",
+                       "Oxyzen",
+                       "RonaldPanaligan",
+                       "TMg"
+               ]
+       },
+       "tog-underline": "Koritan ang dalum kang manga ''link'':",
+       "tog-hideminor": "Tagoon ang gagmay nga ''edit'' sa mga bag-o nga ilis",
+       "tog-extendwatchlist": "Palapadun ang ''watchlist'' agud nga mapakita ang tanan nga ginasogtan nga pag-ilis",
+       "tog-numberheadings": "Automatiko nga togroan kang nomero ang manga ''heading''",
+       "tog-showtoolbar": "Ipakita ang pangbolig sa pag-ilis (JavaScript)",
+       "tog-watchcreations": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpanghimo ko",
+       "tog-watchdefault": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpang-''edit'' ko",
+       "tog-watchmoves": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpanghalin ko",
+       "tog-watchdeletion": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpamara ko",
+       "tog-previewonfirst": "Ipakita ang preview sa ona nga ilis",
+       "tog-enotifwatchlistpages": "Padarhan ako kang e-mail kon may nag-ilis kang pahina nga akun ginabantayan",
+       "tog-enotifminoredits": "Padarhan man ako kang ''e-mail'' tohay sa manga gagmay nga pag-ilis sa manga pahina",
+       "tog-shownumberswatching": "Ipakita ang karakuun kang manga ''user'' nga galantaw",
+       "tog-forceeditsummary": "Paman-an ako kon blanko nga ''edit summary'' ang akun ginapasulud",
+       "tog-watchlisthideown": "Indi pagpakita sa ''watchlist'' ang akun nga manga gin-islan",
+       "tog-watchlisthidebots": "Indi pagpakita sa ''watchlist'' ang manga gin-islan kang bot",
+       "tog-watchlisthideminor": "Indi pagpakita sa ''watchlist'' ang mga gagmay nga inislan",
+       "tog-ccmeonemails": "Padarhi man ako kang manga ''e-mail'' nga ginpadara ko sa iban nga manga ''user''",
+       "underline-always": "Pirme gid",
+       "underline-never": "Indi gid",
+       "underline-default": "Onay nga browser",
+       "sunday": "Domingo",
+       "monday": "Lones",
+       "tuesday": "Martes",
+       "wednesday": "Miyerkoles",
+       "thursday": "Webes",
+       "friday": "Biyernes",
+       "saturday": "Sabado",
+       "sun": "Dom",
+       "mon": "Lon",
+       "tue": "Mar",
+       "wed": "Miy",
+       "thu": "Web",
+       "fri": "Biy",
+       "sat": "Sab",
+       "january": "Enero",
+       "february": "Pebrero",
+       "march": "Marso",
+       "april": "Abril",
+       "may_long": "Mayo",
+       "june": "Honyo",
+       "july": "Holyo",
+       "august": "Agosto",
+       "september": "Setyembre",
+       "october": "Oktobre",
+       "november": "Nobyembre",
+       "december": "Disyembre",
+       "january-gen": "Enero",
+       "february-gen": "Pebrero",
+       "march-gen": "Marso",
+       "april-gen": "Abril",
+       "may-gen": "Mayo",
+       "june-gen": "Honyo",
+       "july-gen": "Holyo",
+       "august-gen": "Agosto",
+       "september-gen": "Setyembre",
+       "october-gen": "Oktobre",
+       "november-gen": "Nobyembre",
+       "december-gen": "Disyembre",
+       "jan": "Ene",
+       "feb": "Peb",
+       "apr": "Abr",
+       "may": "May",
+       "jun": "Hon",
+       "jul": "Hol",
+       "aug": "Ago",
+       "sep": "Set",
+       "oct": "Okt",
+       "nov": "Nob",
+       "dec": "Dis",
+       "category_header": "Manga artikolo sa \"$1\"",
+       "subcategories": "Manga ''subcategory''",
+       "category-media-header": "Manga midya sa \"$1\"",
+       "category-empty": "''Wara it manga artikolo okon medya ang katergorya nga dya.''",
+       "about": "Angut sa Iwan",
+       "article": "Pahina kasudlan",
+       "newwindow": "(gabokas sa bag-o nga ''window'')",
+       "cancel": "Kanselar",
+       "moredotdotdot": "Raku pa...",
+       "mypage": "Akun nga pahina",
+       "anontalk": "Istoryahun ang dya nga ''IP''",
+       "qbfind": "Sagap",
+       "qbbrowse": "Bilid",
+       "qbedit": "Iislan",
+       "qbpageoptions": "Dya nga Pahina",
+       "faq": "FAQ",
+       "faqpage": "Project:FAQ",
+       "errorpagetitle": "Sayup",
+       "returnto": "Balik sa $1.",
+       "help": "Bolig",
+       "search": "Sagap",
+       "searchbutton": "Sagap",
+       "go": "Agto",
+       "searcharticle": "Agto",
+       "history": "Kasaysayan kang Pahina",
+       "history_short": "Kasaysayan",
+       "updatedmarker": "ginpabag-o halin kang orihi ko nga pagbisita",
+       "printableversion": "Bersyon nga sarang ma-''print''",
+       "permalink": "Permanyente nga ''link''",
+       "print": "Printa",
+       "edit": "Iislan",
+       "editthispage": "Islan ang dya nga pahina",
+       "delete": "Para",
+       "deletethispage": "Paraun ang dya nga Pahina",
+       "protect": "Amlig",
+       "protect_change": "iislan",
+       "protectthispage": "Amligan ang dya nga pahina",
+       "unprotect": "huksun ang proteksyon",
+       "unprotectthispage": "Huksun ang proteksyon sa dya nga pahina",
+       "newpage": "Bag-o nga pahina",
+       "talkpage": "Sogdanunun ang dya nga pahina",
+       "talkpagelinktext": "Wakal",
+       "specialpage": "Espesyal nga Pahina",
+       "articlepage": "Turukun ang pahina kasudlan",
+       "talk": "Sugilanon",
+       "views": "Manga paglantaw",
+       "toolbox": "Pangbolig",
+       "otherlanguages": "Sa iban nga lingwahe",
+       "redirectpagesub": "Idaho ang pahina",
+       "protectedpage": "Protektado nga pahina",
+       "jumpto": "Lompat sa:",
+       "jumptosearch": "sagap",
+       "aboutsite": "Tunggəd sa {{SITENAME}}",
+       "aboutpage": "Project:Tunggəd",
+       "disclaimers": "Mga Panginwala",
+       "disclaimerpage": "Project:Panginwala nga Pangtanan",
+       "edithelp": "Panoytoy sa Pag-ilis",
+       "mainpage": "Pono nga Pahina",
+       "mainpage-description": "Pono nga Pahina",
+       "privacy": "Surundun sa Privacy",
+       "privacypage": "Project:Surundun sa Privacy",
+       "badaccess": "Sayup sa lisensya",
+       "badaccess-group0": "Indi kaw ginpasogtan nga himoon ang lihuk nga ginalaum mo.",
+       "badaccess-groups": "Ang imo ginpangayo nga lihuk ay para lang sa mga users sa {{PLURAL:$2|nga grupo|sara sa mga grupo}}: $1.",
+       "versionrequired": "Version $1 kang MediaWiki kinahanglan",
+       "versionrequiredtext": "Version $1 of MediaWiki kinahanglan para magamit ang page nga ja.\nLantawa sa [[Special:Version|version kang page]].",
+       "ok": "OK dun",
+       "youhavenewmessages": "May rudyan kaw nga $1 ($2).",
+       "youhavenewmessagesmulti": "May rudyan kaw nga manga bag-o nga mensahe sa $1",
+       "editsection": "iislan",
+       "editold": "iislan",
+       "toc": "Manga Sulud",
+       "showtoc": "ipakita",
+       "hidetoc": "itago",
+       "nstab-main": "Pahina",
+       "nstab-media": "Pahina kang Midya",
+       "nstab-special": "Espesyal nga pahina",
+       "nstab-project": "Pahina kang Proyekto",
+       "nstab-image": "Inayap",
+       "nstab-mediawiki": "Mensahe",
+       "nstab-template": "''Template''",
+       "nstab-help": "Pahina kang Panoytoy",
+       "nstab-category": "Kategorya",
+       "error": "Sayup",
+       "databaseerror": "Sayup sa database",
+       "readonly": "Napintalan ang ''database''",
+       "internalerror": "Sayup internal",
+       "internalerror_info": "Sayup internal: $1",
+       "filecopyerror": "Indi makopya ang ''file'' halin sa \"$1\" paagto sa \"$2\".",
+       "filerenameerror": "Indi maislan ang ngaran kang ''file'' halin sa \"$1\" paagto sa \"$2\".",
+       "filedeleteerror": "Indi mapara ang ''file'' nga \"$1\".",
+       "directorycreateerror": "Indi mahimo ang ''directory'' nga \"$1\".",
+       "filenotfound": "Indi makita ang ''file'' nga \"$1\".",
+       "viewsource": "Turukun ang ginhalinan",
+       "remembermypassword": "Tandaan ang akun nga ''log-in'' sa dya nga ''browser'' (kang maximum nga $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}})",
+       "nologinlink": "Himo ka sangka ''account''",
+       "createaccount": "Himo ka ''account''",
+       "preview": "Bilid",
+       "skin-preview": "Bilid",
+       "searchresultshead": "Sagap",
+       "youremail": "E-mail:",
+       "email": "E-mail",
+       "hide": "Itago",
+       "show": "Ipakita",
+       "upload-file-error": "Sayup internal",
+       "imgfile": "inayap",
+       "file-anchor-link": "Inayap",
+       "filedelete-submit": "Para",
+       "brokenredirects-edit": "Iislan",
+       "brokenredirects-delete": "para",
+       "withoutinterwiki-submit": "Ipakita",
+       "categories": "Manga Kategorya",
+       "linksearch-ok": "Sagap",
+       "listusers-submit": "Ipakita",
+       "emailmessage": "Mensahe",
+       "delete-legend": "Para",
+       "restriction-edit": "Iislan",
+       "undelete-search-submit": "Sagap",
+       "sp-contributions-talk": "wakal",
+       "sp-contributions-submit": "Sagap",
+       "whatlinkshere-page": "Pahina:",
+       "isredirect": "idaho ang pahina",
+       "ipblocklist-submit": "Sagap",
+       "tooltip-ca-protect": "Amligan ang dya nga pahina",
+       "tooltip-ca-delete": "Paraun ang dya nga Pahina",
+       "tooltip-p-logo": "Pono nga Pahina",
+       "tooltip-n-mainpage": "Agtoni ang Main Page",
+       "tooltip-n-portal": "Tunggəd sa project, ano pwede mo mahimo, diin mo makita ang mga bagay bagay",
+       "tooltip-n-currentevents": "Pangita-a ang mga ginhalinan sa mga nagakaratabo sa tulad",
+       "tooltip-n-recentchanges": "Listahan kang mga bag-o lang na-ilis sa wiki.",
+       "tooltip-n-randompage": "Magkarga kang random nga page",
+       "tooltip-n-help": "Lugar kun diin mo masagap.",
+       "tooltip-t-whatlinkshere": "Listahan kang tanan nga mga wiki pages nga naga-link paagto ja",
+       "tooltip-t-recentchangeslinked": "Mga bag-o lng ilis nga mga page nga naka-link halin sa page nga ja",
+       "tooltip-feed-rss": "RSS feed para sa page nga ja",
+       "tooltip-feed-atom": "Atom feed para sa page nga ja",
+       "tooltip-t-contributions": "Lantawa ang listahan kang mga ginbulig kang user nga ja",
+       "tooltip-t-emailuser": "Padarhi kang e-mail ang user nga ja",
+       "ilsubmit": "Sagap",
+       "confirm_purge_button": "OK dun",
+       "imgmultigo": "Agto!",
+       "table_pager_limit_submit": "Agto",
+       "version-specialpages": "Manga espesyal nga pahina",
+       "fileduplicatesearch-submit": "Sagap",
+       "specialpages": "Manga espesyal nga pahina",
+       "expand_templates_ok": "OK dun",
+       "expand_templates_preview": "Bilid"
 }
index 51c758d..3dcc18b 100644 (file)
@@ -1,46 +1,44 @@
 {
-    "@metadata": {
-        "authors": [
-            "Rachitrali",
-            "Rk_kaul (on ks.wikipedia.org)",
-            "VibhasKS"
-        ]
-    },
-    "monday": "ژِنٛدٕروار",
-    "january": "جنوری",
-    "february": "فرؤری",
-    "march": "مارچ",
-    "april": "اپریٖل",
-    "may_long": "مٔی",
-    "june": "جوٗن",
-    "july": "جولائی",
-    "august": "اَگست",
-    "september": "سیٚپٹَمبَر",
-    "october": "اکتوبر",
-    "november": "نَوَمبَر",
-    "december": "ڈیٚسَمبَر",
-    "jan": "جنوری",
-    "about": "مُتعلِق",
-    "vector-view-edit": "تَرتیٖب دِیُن",
-    "vector-view-view": "پَرُن",
-    "help": "مدد",
-    "search": "ژھارُن",
-    "searchbutton": "ژھارُن",
-    "history_short": "توٲریٖخ",
-    "talkpagelinktext": "بَحَژ",
-    "talk": "بَحَژ",
-    "toolbox": "اَوزار",
-    "otherlanguages": "باقیَن زَبانَن منٛز",
-    "jumptosearch": "ژھارُن",
-    "aboutsite": "مُتعلِق {{SITENAME}}",
-    "mainpage": "گَرٕ",
-    "mainpage-description": "اہم صَفہٕ",
-    "nstab-main": "صَفہٕ",
-    "nstab-category": "زٲژ",
-    "summary": "خُلاسہٕ:",
-    "recentchanges": "نَوِ تبدیلی",
-    "filedesc": "خُلاسہٕ",
-    "sp-contributions-talk": "بَحَژ",
-    "sp-contributions-submit": "ژھارُن",
-    "allmessagesname": "ناو"
+       "@metadata": {
+               "authors": [
+                       "Rachitrali",
+                       "Rk_kaul (on ks.wikipedia.org)",
+                       "VibhasKS"
+               ]
+       },
+       "monday": "ژِنٛدٕروار",
+       "january": "جنوری",
+       "february": "فرؤری",
+       "march": "مارچ",
+       "april": "اپریٖل",
+       "may_long": "مٔی",
+       "june": "جوٗن",
+       "july": "جولائی",
+       "august": "اَگست",
+       "september": "سیٚپٹَمبَر",
+       "october": "اکتوبر",
+       "november": "نَوَمبَر",
+       "december": "ڈیٚسَمبَر",
+       "jan": "جنوری",
+       "about": "مُتعلِق",
+       "help": "مدد",
+       "search": "ژھارُن",
+       "searchbutton": "ژھارُن",
+       "history_short": "توٲریٖخ",
+       "talkpagelinktext": "بَحَژ",
+       "talk": "بَحَژ",
+       "toolbox": "اَوزار",
+       "otherlanguages": "باقیَن زَبانَن منٛز",
+       "jumptosearch": "ژھارُن",
+       "aboutsite": "مُتعلِق {{SITENAME}}",
+       "mainpage": "گَرٕ",
+       "mainpage-description": "اہم صَفہٕ",
+       "nstab-main": "صَفہٕ",
+       "nstab-category": "زٲژ",
+       "summary": "خُلاسہٕ:",
+       "recentchanges": "نَوِ تبدیلی",
+       "filedesc": "خُلاسہٕ",
+       "sp-contributions-talk": "بَحَژ",
+       "sp-contributions-submit": "ژھارُن",
+       "allmessagesname": "ناو"
 }
index da11257..27d0d11 100644 (file)
        "otherlanguages": "En ander Schprooche",
        "redirectedfrom": "(Ömjeleit vun $1)",
        "redirectpagesub": "Ömleidongssigg",
+       "redirectto": "Ömleide op:",
        "lastmodifiedat": "Heh di Sigg es et letz aam $1 öm $2 Uhr jeändert woode.",
        "viewcount": "De Sigg es bes jetz {{PLURAL:$1|eimol|$1 Mol|keijmol}} avjerofe woode.",
        "protectedpage": "Jeschötzte Sigg",
        "hidetoc": "ußblände",
        "collapsible-collapse": "Zohklappe",
        "collapsible-expand": "Opklappe",
+       "confirmable-confirm": "{{GENDER:$1|Verhaftesch}}?",
+       "confirmable-yes": "Joh",
+       "confirmable-no": "Nää",
        "thisisdeleted": "$1 - aanluure oder widder zeröckholle?",
        "viewdeleted": "$1 aanzeije?",
        "restorelink": "{{PLURAL:$1|eijn fottjeschmesse Änderung|$1 fottjeschmesse Änderunge|keij fottjeschmesse Änderunge}}",
        "invalidtitle-knownnamespace": "„$3“ es ene onjöltijje Tittel för em Appachtemang „$2“",
        "invalidtitle-unknownnamespace": "„$2“ es ene onjöltijje Tittel för e Appachtemang met dä verkehte Nommer $1.",
        "exception-nologin": "Nit enjelogg",
-       "exception-nologin-text": "Heh di Sigg udder heh dä Opdraach jeiht blooß, wann De heh [[Special:Userlogin|em Wiki enjelogg]] bes.",
+       "exception-nologin-text": "Heh di Sigg udder heh dä Opdraach jeiht blooß, wann De heh enjelogg bes.",
        "exception-nologin-text-manual": "De mööds ald $1, öm heh di Sigg udder di Axjuhn zohjriife ze dörve.",
        "virus-badscanner": "Fääler en de Enstellunge: Dat Projramm ''$1'' fö noh Kompjuterwiere ze söke, dat kenne mer nit.",
        "virus-scanfailed": "Dat Söhke eß donevve jejange, dä Kood för dä Fähler es „$1“.",
        "passwordreset-emailsent-capture": "En <i lang=\"en\">e-mail</i> met Aanjaabe zom neue Paßwoot för der Zohjang heh es verscheck woode. Heh dronger kanns De se lässe.",
        "passwordreset-emailerror-capture": "En <i lang=\"en\">e-mail</i> met Aanjaabe zom neue Paßwoot för der Zohjang heh sullt verscheck wääde, ävver dat Verschecke aan {{GENDER:$2|dä|dat|dä Metmaacher|de|dat}} $2 hät nit jeflup: $1",
        "changeemail": "Donn Ding Address för de <i lang=\"en\">e-mail</i> ändere",
-       "changeemail-header": "Donn en Adräß för de <i lang=\"en\">e-mail</i> ändere",
        "changeemail-text": "Föll dat Fommulaa uß, öm Ding Adräß för de <i lang=\"en\">e-mail</i> ze ändere.\nDo moß Ding Paßwoot enjävve, öm Ding Änderong ze bschtäätejje.",
        "changeemail-no-info": "Do mööts ald enjelogg sin, öm tiräk op di Sigg jonn ze dörve",
        "changeemail-oldemail": "Ding Address för de <i lang=\"en\">e-mail</i> es jäz:",
        "changeemail-none": "(kein)",
        "changeemail-password": "Ding Passwoot {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}}:",
        "changeemail-submit": "Lohß jonn!",
-       "changeemail-cancel": "Ophüre",
        "changeemail-throttled": "Do häs zoh öff versöhk, enzelogge. Waat $1 Ih dat De es widder probeers.",
        "resettokens": "Neue Schlößel maache",
        "resettokens-text": "Do kanns neue Schlößel maache lohße för op beschtemmpte päsöhnlesche Daate uohjriife ze künne, di met Dingem Zohjang heh ze donn han.\n\nDonn dat op jeede Fall, wann se enem Andere bikannt jewoode sin, udder wann Dinge Zohjang jeknack woode es.",
        "mergehistory-same-destination": "De Quell-Sigg un de Ziel-Sigg dörve nit deselve Sigg sinn.",
        "mergehistory-reason": "Der Jrond:",
        "mergelog": "Logboch fum Sigge zesamme Läje",
-       "pagemerge-logentry": "Versione beß $3 fun „[[$1]]“ zosamme jelaat met „[[$2]]“",
        "revertmerge": "Dat Zosammelääje widder retuur maache",
        "mergelogpagetext": "Dat hee is dat Logboch fun de zesammejelaate Versione fun Sigge",
        "history-title": "Älder Versione vun dä Sigg „$1“",
        "searchall": "all",
        "showingresults": "Onge {{PLURAL:$1|weed <strong>eine</strong>|wääde bes <strong>$1</strong>|weed <strong>keine</strong>}} vun de jefonge Endrähsch jezeisch, vun de Nommer <strong>$2</strong> av.",
        "showingresultsinrange": "{{PLURAL:$1|<strong>Ein</strong> Saachjropp|<strong>$1</strong> Saachjroppe|Kein Saachjropp}}, vun Nommer <strong>$2</strong> bes Nommer <strong>$3</strong> {{PLURAL:$1|weed|wääde|weed}} heh opjeleß.",
-       "showingresultsheader": "Jefonge un aanjezeisch: {{PLURAL:$5|'''$1''' vun '''$3'''|'''$1''' beß '''$2''' vun '''$3'''|nix}} för '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Heh es dä <strong>$1</strong>-te vun <strong>$3</strong> Träffere.|Träffer Nommero <strong>$1 bes $2</strong> vun <strong>$3</strong> Träffer.|Jevonge woodt woodt nix.}}",
        "search-nonefound": "Mer han nix zopaß jefonge för Ding Aanfrohch.",
        "powersearch-legend": "Extra Söhke",
        "powersearch-ns": "Söök en de Apachtemangs:",
        "prefs-registration-date-time": "dem $2 öm $3 Uhr",
        "yourrealname": "Dinge richtije Name *",
        "yourlanguage": "Di Schprooch, di et Wiki kalle soll:",
-       "yourvariant": "Der Dijaläk, de Schriefwies, de Zoot Shprooch för der Enhald.",
-       "prefs-help-variant": "Der Dijaläk udder de Schriefwies udder de Zoot Shprooch, di De för der Enhald.vun Sigge am leevsde häs.",
+       "yourvariant": "Der Dijaläk, de Schriefwies, de Zoot Schprohch för der Enhald:",
+       "prefs-help-variant": "Der Dijalägg udder de Schriefwies udder de Zoot Schprohch, di De för der Enhald vun Sigge am leevsde häß.",
        "yournick": "Ding&nbsp;„Ongerschreff“&nbsp;*",
        "prefs-help-signature": "* Beidrääsch op Klaafsigge sullte met „<nowiki>~~~~</nowiki>“ ophüere, dat weed beim Afshpeishere en Ding „Ongerschreff“ met de Uhrzig un em Dattum ömjewandelt.",
        "badsig": "Di Ungeschreff jëijd_esu nit — luer noh dem HTML do_dren un maach et rėshtėsh.",
        "right-browsearchive": "Noh fottjeschmesse Sigge söke",
        "right-undelete": "Fottjeschmeße Sigge widder zeröck holle",
        "right-suppressrevision": "Versione vun Sigge beloore un zeröck holle, di sujaa för de Wiki-Köbesse verstoche sin",
+       "right-viewsuppressed": "Beloor de Väsjohne, di vun jeedem verschtoche sin.",
        "right-suppressionlog": "De private Logböcher aanloore",
        "right-block": "Medmaacher Sperre, un domet am Schrive hindere",
        "right-blockemail": "Metmaacher för et E-Mail Verschecke sperre",
        "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]]",
        "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ß:</td><td><strong>[[:$2]]</strong>\nBes esu joot, un söök Der ene ander Name fö di Datei us.",
+       "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.",
        "file-thumbnail-no": "Dä Name fö di Datei fängk met <strong>$1</strong> aan.\nDat süühd uß, wi wann dat en Minni-Beldsche em Breefmarrke-Fommaat\n(''<span lang=\"en\">thumbnail</span>'') wöhr. Don ens di Dattei\n<strong>$1</strong> prööfe, of de nit e besser opjelööß Beld\ndofun häß, un don dat met singe Orjinaaljrüß huhlade, wann möjjelesch.\nSöns donn besser ene andere Dateiname ußsöke.",
        "fileexists-forbidden": "Et jitt ald en Dattei met däm Name, un mer kann se nit övverschriive.\nWann de Ding Dattei trozdämm huhlaade wells, da jangk zeröck un lad se\nunger enem andere Name huh. [[File:$1|thumb|center|$1]]",
        "randomincategory": "En zohfälleje Sigg us ener Saachjropp",
        "randomincategory-invalidcategory": "„$1“ es keine jölteje Nahme för en Saachjropp.",
        "randomincategory-nopages": "et sinn er kein Sigge en dä Saachjropp [[:Category:$1|$1]] dren.",
-       "randomincategory-selectcategory": "Holl en zohfälleje Sigg us dä Saachjropp: $1 $2.",
-       "randomincategory-selectcategory-submit": "Lohß Jonn!",
+       "randomincategory-category": "Saachjropp:",
+       "randomincategory-legend": "En zohfälleje Sigg us dä Saachjropp",
        "randomredirect": "Zofällije Ömleitung",
        "randomredirect-nopages": "En däm Appachtemang „$1“ sin ja kein Ömleidonge dren.",
        "statistics": "Schtatistike",
        "statistics-header-pages": "Zahle övver Sigge",
        "statistics-header-edits": "Zahle övver Änderunge",
-       "statistics-header-views": "Zahle övver afjeroofe Sigge",
        "statistics-header-users": "Schtatistike övver de Metmaacher",
        "statistics-header-hooks": "Ander Schtatistike",
        "statistics-articles": "Atikele",
        "statistics-files": "Huhjelade Dateie",
        "statistics-edits": "Änderunge aan Sigge",
        "statistics-edits-average": "Aanzahl Änderunge pro Sigg em Dorschschnett",
-       "statistics-views-total": "Sigge affjeroofe, ėnßjesamp",
-       "statistics-views-total-desc": "Sigge, die et nit johv, un Extrasigge sin nit metjezallt",
-       "statistics-views-peredit": "Sigge affjeroofe, pro Änderung",
        "statistics-users": "[[Special:ListUsers|Metmaacher]] aajemelldt",
        "statistics-users-active": "Aktive Metmaacher",
        "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.",
-       "statistics-mostpopular": "De miets affjeroofe Sigge",
        "pageswithprop": "Sigge med en beschtemmpte Eijeschaff",
        "pageswithprop-legend": "Sigge med en Eijeschaff",
        "pageswithprop-text": "Heh di Sigg zeisch Sigge, di en beschtemmpte Eijeschaf han",
        "uncategorizedtemplates": "Schablone, die en kein Saachjruppe sen",
        "unusedcategories": "Saachjruppe met nix dren",
        "unusedimages": "Dateie, die nit en Sigge dren stäche",
-       "popularpages": "Sigge, die off avjerofe wääde",
        "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-badtitle": "Ene onjöltijje Tittel för en Sigg: $1",
        "booksources": "Böcher",
        "booksources-search-legend": "Söök noh Bezochsquelle för Bööcher",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Lohß Jonn!",
+       "booksources-search": "Söhke",
        "booksources-text": "Hee noh küdd_en Leßß met Websigge,\nwo mir {{GRAMMAR:Dative fun|{{SITENAME}}}} nix wigger med ze donn hänn,\nwo mer jät övver Böösher erfaare\nun zom Dëijl och Böösher koufe kann.\nDoför moßß De Desh mannshmool allodengs eetß ennß aanmällde,\nwat Koßte un Jefaare met sesh brenge künndt.\nWo_t jëijdt,\njonn di Lengkß hee tirrägg_op dat Booch,\nwadd_Er am Sööke sidt.",
        "booksources-invalid-isbn": "De ISBNummer schingk verkeeht ze sin. Loohr ens donoh, woh se häe kütt.",
        "specialloguserlabel": "Dä Metmaacher, dä et jedonn hät:",
        "listgrouprights-removegroup-self-all": "Kann sesch sällver uß alle Metmaacherjroppe eruß nämme",
        "listgrouprights-namespaceprotection-namespace": "Appachtemang",
        "trackingcategories-name": "Dä Nohreesch udder däm Täxschtöck singe Nahme",
+       "broken-file-category-desc": "En heh dä Sigg es ene Lengk obb en Dattei, di mer nit han.",
        "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.",
        "mywatchlist": "Oppaßleß",
        "watchlistfor2": "För dä $1 $2",
        "nowatchlist": "En Ding Oppassliss es nix dren.",
-       "watchlistanontext": "Do muss $1, domet de en Ding Oppassliss erenluure kanns, oder jet dran ändere.",
+       "watchlistanontext": "Do moß enlogge, domet de en Ding Oppassliss erenluure kanns, oder jet dran ändere.",
        "watchnologin": "Nit enjelogg",
        "addwatch": "En de Oppassliss don",
        "addedwatchtext": "Die Sigg „[[:$1]]“ es jetz en Dinge [[Special:Watchlist|Oppaßleß]].\nWann di Sigg udder ier Klaafsigg verändert weed, kütt dat af jäz heh en di Oppaßleß.",
        "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 letzte Änderung us|Hee sin de letzte <strong>$1</strong> Änderunge us|Mer han kein Äbderunge en}} de letzte {{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 | $3 | aan, dun",
+       "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",
        "watchlist-options": "Eijeschaffte fun de Oppassless",
        "watching": "Drop oppasse…",
        "unwatching": "Nimmieh drop oppasse",
        "exbeforeblank": "drop stundt vörher: „$1“",
        "delete-confirm": "„$1“ fottschmieße",
        "delete-legend": "Fottschmieße",
-       "historywarning": "<strong>Opjepass:</strong> Die Sigg, di De fott schmiiße wells, hät {{PLURAL:$1|ein ällder Version|ald Stöcker $1 ällder Versione|jaa kei ällder Versione}}.",
+       "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>",
        "actioncomplete": "Jedonn!",
        "actionfailed": "Dat es donevve jejange",
        "delete-edit-reasonlist": "De Jrönde för et Fottschmieße beärbeide",
        "delete-toobig": "Di Sigg hät {{PLURAL:$1|ein Version|$1 Versione|jaa kein Version}}. Dat sinn_er ärsch fill. Domet unsere ẞööver do nit draan en de Kneen jeit, dom_mer esu en Sigg nit fottschmieße.",
        "delete-warning-toobig": "Di Sigg hät {{PLURAL:$1|ein Version|$1 Versione|jakein Version}}. Dat sinn_er ärsch fill. Wann De die all fottschmieße wells, dat kann dem Wiki sing Datenbangk schwer ußbremse.",
-       "deleting-backlinks-warning": "<strong>Opjepaß:</strong> Es jitt Sigge met Lenks noh heh doh, udder Sigge, di heh di Sigg enbenge!",
+       "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",
        "protect-locked-blocked": "Do kanns nit der Siggeschotz ändere, esu lang wi Dinge Zojang zom Wiki jesperrt es. Hee es der aktuelle Stand fum Siggeschotz för di Sigg '''„$1“:'''",
        "protect-locked-dblock": "De Datebank es jesperrt. Dröm künne mer der Siggeschotz nit ändere.\nHee es der aktuelle Stand fum Siggeschotz för di Sigg '''„$1“:'''",
        "protect-locked-access": "Do häs nit dat Rääsch, heh em Wiki Sigge ze schötze udder dä Schotz widder opzehevve.\nDi Sigg '''„$1“:''' es jetz jrad:",
-       "protect-cascadeon": "Die Sigg es en enne Schotz-Kaskad. Se es enjebonge en {{PLURAL:$1|die Sigg|$1 Sigge|kein Sigg}}, die per Kaskade-Schotz jeschötz {{PLURAL:$1|es|sin|es}}. Do kanns dä Schotz för die Sigg heh ändere, ävver di Kaskad blief bestonn. Dat heh sin die Sigge en dä Kaskad:",
+       "protect-cascadeon": "Die Sigg es en enne Schotz-Kaskad. Se es enjebonge en {{PLURAL:$1|einSigg|$1 Sigge|kein Sigg}}, die per Kaskade-Schotz jeschötz {{PLURAL:$1|es|sin|es}}. Do kanns dä Schotz för die Sigg heh ändere, ävver di Kaskad blief bestonn.",
        "protect-default": "Jeede Metmaacher eraan lohße",
        "protect-fallback": "Do weet dat Rääsch „$1“ jebruch.",
        "protect-level-autoconfirmed": "Bloß de automattesch beschtääteschte Metmaacher dranlooße",
        "protect-othertime": "En ander Door:",
        "protect-othertime-op": "en ander Door",
        "protect-existing-expiry": "Beß am $2 öm $3 Uhr",
+       "protect-existing-expiry-infinity": "Dä schöz bliev em momang för iewisch beschtonn.",
        "protect-otherreason": "En andere udder zosätzlijje Jrund:",
        "protect-otherreason-op": "Ene andere udder zosätzlijje Jrond",
        "protect-dropdown": "* Jewöhnlijje Jrönd för dä Sigge-Schotz\n** ußerjewöhnlesch fill Kapottmaacherei\n** ußerjewöhnlesch fill SPAMlinks op ander Sigge wäde neu enjedraare\n** Hen- un her-Änderei, woh mer süht, dat nix mieh joods erus kumme weed\n** janz weschtejje Sigg, met ußerjewöhnlesch fill Afroofe",
        "autoblockid": "Automattesche Sperr Nommer $1",
        "block": "Metmaacher udder en <i lang=\"en\">IP</i>-Addräß sperre",
        "unblock": "Don en Sperr för ene Metmaacher udder en <i lang=\"en\">IP</i>-Addräß ophävve",
-       "blockip": "Metmaacher sperre",
+       "blockip": "{{GENDER:$1|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} schpärre",
        "blockip-legend": "Metmaacher ov IP-Adresse Sperre",
        "blockiptext": "Hee kanns De bestemmte Metmaacher oder IP-Adresse sperre, su dat se hee em Wiki nit mieh schrieve und Sigge ändere künne.\nDat sollt nor jedon wääde om sujenannte Vandaale ze bremse. Un mer müsse uns dobei natörlich aan uns [[{{MediaWiki:Policy-url}}|Rejelle]] för esu en Fäll halde.\nDrag bei „Aanlass“ ene möchlichs jenaue Jrund en, wöröm dat Sperre passeet. Nenn un Link op de Sigge wo Einer kapott jemaat hät, zem Beispill.",
        "ipaddressorusername": "<i lang=\"en\">IP</i>-Adress oder Metmaacher Name:",
        "ipb-unblock-addr": "„$1“ widder zohlohße",
        "ipb-unblock": "En IP-Addräß ov ene Metmaacher widder zohlohße",
        "ipb-blocklist": "All de Sperre för Metmaacher un IP-Adresse aanzeije, die jrad bestonn",
-       "ipb-blocklist-contribs": "De Metmaacher ier Bäjdrähsch för „$1“",
+       "ipb-blocklist-contribs": "{{GENDER:$1|Däm|Däm|Däm Metmaacher|Dä|Däm}} $1 {{GENDER:$1|sing|singe|sing|iere|sing}} Bäjdrähsch",
        "unblockip": "Dä Medmacher widder maache looße",
        "unblockiptext": "Heh kanns De vörher jesperrte IP_Adresse oder Metmaacher widder freijevve, un dänne esu dat Rääch för ze Schrieve heh em Wiki widder jevve.",
        "ipusubmit": "Sperr ophevve!",
        "unblocked": "[[User:$1|$1]] wood widder zojelooße",
        "unblocked-range": "Dä Berett $1 es nit mieh jesperrt.",
        "unblocked-id": "De Sperr met dä Nommer $1 es opjehovve",
+       "unblocked-ip": "{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dä}} [[Special:Contributions/$1|$1]] es jäz nit mieh jeschpächt.",
        "blocklist": "De Leß met jesperrte <i lang=\"en\">IP</i>-Adräße un Metmaacher",
        "ipblocklist": "Leß met jesperrte <i lang=\"en\">IP</i>-Adresse un Metmaacher",
        "ipblocklist-legend": "Ene jesperrte Metmaacher fenge",
        "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.",
-       "import-interwiki-source": "Quelle-Wiki un -Sigg:",
        "import-interwiki-history": "All de Versione vun dä Sigg heh kopeere",
        "import-interwiki-templates": "All Schablone metnämme",
        "import-interwiki-submit": "Huhlade!",
        "import-upload": "En XML-Datei impochteere",
        "import-token-mismatch": "Schadt. Et senn nit alle Date heh aanjekumme.\nBes esu joot, un versök et noch ens.",
        "import-invalid-interwiki": "Us dämm jenannte Wiki künne mer nix Importeere.",
-       "import-error-edit": "Di Sigg „$1“ es nit impoteet woode. Do häs nit et Rääsch, se ze ändre.",
-       "import-error-create": "Di Sigg „$1“ es nit impoteet woode. Do häs nit et Rääsch, se aanzlääje.",
-       "import-error-interwiki": "Di Sigg „$1“ weed nit empoteet, weil dä iehre Name för et Verlengke noh ußerhallef, pä Engerwiki-Lengk, jebruch weed.",
-       "import-error-special": "Di Sigg „$1“ weed nit empoteet, weil dä iehre Name en enem besöndere Appachtemang litt, woh kein Sigge dren zohjelohße sin.",
-       "import-error-invalid": "Di Sigg „$1“ weed nit empoteet, weil dä iehre Name nit jöltesch es.",
+       "import-error-edit": "Di Sigg „$1“ es nit impotehrt woode. Do häs nit et Rääsch, se ze ändere.",
+       "import-error-create": "Di Sigg „$1“ es nit impotehrt woode. Do häs nit et Rääsch, se aanzelähje.",
+       "import-error-interwiki": "Di Sigg „$1“ weed nit empotehrt, weil dä iehre Name för et Verlengke noh ußerhallef, pä Engerwikilengk, jebruch weed.",
+       "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-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.",
        "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 Version|$1 Versione|kein Version}} emporteet",
+       "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 Version|$1 Versione|kein Version}} vun „$2“",
+       "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.",
        "pageinfo-robot-policy": "Et opnämme es för Söhkmaschiine",
        "pageinfo-robot-index": "zohjelohße",
        "pageinfo-robot-noindex": "verbodde",
-       "pageinfo-views": "De Aanzahl Affroofe",
        "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",
        "exif-urgency-low": "Klein ($1)",
        "exif-urgency-high": "Huh ($1)",
        "exif-urgency-other": "Selfs faßjelaat ($1)",
-       "watchlistall2": "all",
        "namespacesall": "all",
        "monthsall": "all",
        "confirmemail": "E-Mail Adress bestätije",
        "timezone-utc": "<i lang=\"en\">UTC</i>",
        "unknown_extension_tag": "„<code>$1</code>“ es en zosäzlejje Kennzeichnung, die kenne mer nit.",
        "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.",
        "version": "Väsjohn vun de Wiki Soffwär zeije",
        "version-extensions": "Installeete Erjänzunge un Zohsätz",
-       "version-skins": "Ovverflääsche",
+       "version-skins": "De enschtallehrte Bedeenbovverflääsche",
        "version-specialpages": "{{int:nstab-special}}e",
        "version-parserhooks": "De Parser-Hooke",
        "version-variables": "Variable",
        "logentry-rights-rights-legacy": "{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 hät däm Metmaacher $3 sing Räääschte-Jroppe verändert.",
        "logentry-rights-autopromote": "{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 wood automattesch vum $4 zom $5 jemaat.",
        "rightsnone": "(nix)",
+       "revdelete-summary": "dä Täx en „{{int:summary}}“",
        "feedback-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:",
        "pagelang-name": "Sigg",
        "pagelang-language": "De Schprooch",
        "pagelang-use-default": "Nemm de Schtandatt_Schprohch",
-       "pagelang-select-lang": "Söhg_en Schprooch uß"
+       "pagelang-select-lang": "Söhg_en Schprooch uß",
+       "right-pagelang": "Ener Sigg ier Schprohch tuusche",
+       "action-pagelang": "Sigge ier Schprohch zu tuusche",
+       "log-name-pagelang": "Logbooch vum Tuusche vun Sige iehr Schprohche"
 }
index 07a1d75..643bc40 100644 (file)
        "userlogin-resetpassword-link": "Şîfreyê ji nû ve çêke",
        "userlogin-helplink2": "Alîkariya têketinê",
        "createacct-emailrequired": "E-name",
+       "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",
        "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.",
        "changeemail-newemail": "Navnîşana E-nameya nû:",
        "changeemail-none": "(nîne)",
        "changeemail-submit": "E-nameyê biguherîne",
-       "changeemail-cancel": "Betal bike",
        "bold_sample": "Nivîsa stûr",
        "bold_tip": "Nivîsa stûr",
        "italic_sample": "Nivîsa xwehr (îtalîk)",
        "searchrelated": "pêwendîdar",
        "searchall": "hemû",
        "showingresults": "{{PLURAL:$1|Encamek|'''$1''' encam}}, bi #'''$2''' dest pê dike.",
-       "showingresultsheader": "{{PLURAL:$5|Encam '''$1''' ên '''$3'''|Encam '''$1 - $2''' ên '''$3'''}} ji bo '''$4'''",
        "search-nonefound": "Ti rûpelên wek ya daxwazkirî nînin.",
        "powersearch-legend": "Lê bigere",
        "powersearch-ns": "Di valahiya navan de lêbigere:",
        "statistics": "Statîstîk",
        "statistics-header-pages": "Statîstîkên rûpelê",
        "statistics-header-edits": "Statîstîkan biguherîne",
-       "statistics-header-views": "Amaran bibîne",
        "statistics-header-users": "Statistîkên bikarhêner",
        "statistics-header-hooks": "Statîstîkên din",
        "statistics-articles": "Rûpelên naverokê",
        "statistics-pages": "Rûpel",
        "statistics-pages-desc": "Hemû rûpelên di vê wîkiyê de, bi hemû rûpelên gotûbêj, beralîkirin, hwd.",
        "statistics-files": "Wêneyên barkirî",
-       "statistics-views-total": "Hemû nîşandan",
        "statistics-users": "[[Special:ListUsers|Bikarhênerên tomarkirî]]",
        "statistics-users-active": "Bikarhênerên çalak",
-       "statistics-mostpopular": "Rûpelên herî lênerî",
        "doubleredirects": "Beralîkirinên ducarî",
        "double-redirect-fixed-move": "Cihê [[$1]] hatiye guhertin, ew niha beralîkirina [[$2]] ye.",
        "brokenredirects": "Beralîkirinên xerabûyî",
        "uncategorizedtemplates": "Şablonên bê kategorî",
        "unusedcategories": "Kategoriyên ku nayên bikaranîn",
        "unusedimages": "Wêneyên ku nayên bikaranîn",
-       "popularpages": "Rûpelên populer",
        "wantedcategories": "Kategoriyên ku tên xwestin",
        "wantedpages": "Rûpelên ku tên xwestin",
        "wantedfiles": "Wêneyên ku tên xwestin",
        "pager-older-n": "{{PLURAL:$1|kevintir 1|kevintir $1}}",
        "booksources": "Çavkaniyên pirtûkan",
        "booksources-search-legend": "Li pirtûkan bigere",
-       "booksources-go": "Here",
        "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:",
        "wlheader-enotif": "Agahdariya E-nameyê pêk tê.",
        "wlheader-showupdated": "Ev rûpela hatî guhertin dema te lê meyzand bi '''nivîsa stûr''' tê xuyakirin.",
        "wlnote": "Niha {{PLURAL:$1|xeyrandinê|'''$1''' xeyrandinên}} dawî yê {{PLURAL:$2|seetê|'''$2''' seetên}} dawî {{PLURAL:$1|tê|tên}} dîtin.",
-       "wlshowlast": "Guhertinên berî $1 saetan, $2 rojan, ya $3 nîşan bide",
+       "wlshowlast": "Guhertinên berî $1 saetan, $2 rojan, ya  nîşan bide",
        "watchlist-options": "Vebijarkên lîsteya şopandinê",
        "watching": "Bişopîne...",
        "unwatching": "Neşopîne…",
        "spamprotectionmatch": "Ev nivîsa parastinê spam vêxist: $1",
        "pageinfo-header-edits": "Guherandin",
        "pageinfo-header-restrictions": "Parastina rûpelê",
-       "pageinfo-views": "Hejmara dîtinê",
        "pageinfo-watchers": "Hejmara kesên dişopînin",
        "pageinfo-subpages-name": "Binrûpelên vê rûpelê",
        "pageinfo-edits": "Hejmara guherandinan",
        "exif-iimcategory-spo": "Werzîş",
        "exif-iimcategory-war": "Şer, pevçûn û alozî",
        "exif-iimcategory-wea": "Hewa",
-       "watchlistall2": "hemû",
        "namespacesall": "hemû",
        "monthsall": "hemû",
        "confirmemail": "Adrêsa e-nameyan nasbike",
        "logentry-newusers-newusers": "$1 hesabekî bikarhêneriyê çêkir",
        "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",
index e483c28..ab8596d 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Comp1089",
-            "Yufereff",
-            "ОйЛ"
-        ]
-    },
-    "sunday": "вежалун",
-    "monday": "выльлун",
-    "tuesday": "воторник",
-    "wednesday": "середа",
-    "thursday": "четверг",
-    "friday": "пекнича",
-    "saturday": "субöта",
-    "january": "тӧв шӧр тӧлысь",
-    "february": "урасьӧм тӧлысь",
-    "march": "рака тӧлысь",
-    "april": "кос му тӧлысь",
-    "may_long": "ода кора тӧлысь",
-    "june": "лӧддза-номъя тӧлысь",
-    "july": "сора тӧлысь",
-    "august": "моз тӧлысь",
-    "september": "кӧч тӧлысь",
-    "october": "йирым тӧлысь",
-    "november": "вӧльгым тӧлысь",
-    "december": "ӧшым тӧлысь",
-    "january-gen": "тӧв шӧр",
-    "february-gen": "урасьӧм",
-    "march-gen": "рака",
-    "april-gen": "кос му",
-    "may-gen": "ода кора",
-    "june-gen": "лӧддза-номъя",
-    "july-gen": "сора",
-    "august-gen": "моз",
-    "september-gen": "кӧч",
-    "october-gen": "йирым",
-    "november-gen": "вӧльгым",
-    "december-gen": "ӧшым",
-    "pagecategories": "{{PLURAL:$1|1=Категория|Категория}}",
-    "article": "Гижӧд",
-    "cancel": "Дугӧдны",
-    "mytalk": "Сёрнитан лист бокӧй",
-    "qbfind": "Корсьысьӧм",
-    "qbedit": "Веськӧдны",
-    "vector-action-move": "Ним вежны",
-    "vector-view-edit": "Вежны",
-    "vector-view-view": "Лыддьыны",
-    "namespaces": "Ним пространствояс",
-    "search": "Корсьысьӧм",
-    "searchbutton": "Аддзыны",
-    "searcharticle": "Вуджны",
-    "history_short": "Важвылӧм",
-    "printableversion": "Лэдзӧм версия",
-    "permalink": "Вежласьтӧм ыстӧд",
-    "edit": "Вежны",
-    "delete": "Бырӧдны",
-    "protect": "Дорйыны",
-    "newpage": "Выль лист бок",
-    "talkpagelinktext": "сёрнитанін",
-    "talk": "Сёрнитанін",
-    "toolbox": "Инструментъяс",
-    "otherlanguages": "Мӧд кывъясӧн",
-    "jumptosearch": "корсьысьӧм",
-    "aboutsite": "{{SITENAME}} йылысь",
-    "currentevents": "Быд лунся лоӧмтор",
-    "mainpage": "Медшӧр лист бок",
-    "mainpage-description": "Медшӧр лист бок",
-    "portal": "Йитчӧм",
-    "portal-url": "Project:Йитчӧм портал",
-    "editsection": "веськӧдны",
-    "editold": "веськӧдны",
-    "editlink": "вежны",
-    "editsectionhint": "«$1» секция веськӧдны",
-    "red-link-title": "$1 (гижӧд абу)",
-    "nstab-main": "Гижӧд",
-    "nstab-user": "Пырысь",
-    "nstab-project": "Проект йылысь",
-    "nstab-category": "Категория",
-    "yourname": "Пырысьлӧн ним:",
-    "login": "Висьтасьны",
-    "nav-login-createaccount": "Висьтасьны / гижсьыны",
-    "userlogin": "Висьтасьны али гижсьыны",
-    "logout": "Сеанс эштӧдӧм",
-    "userlogout": "Сеанс эштӧдӧм",
-    "gotaccountlink": "Висьтасьӧй",
-    "loginlanguagelabel": "Кыв: $1",
-    "savearticle": "Лист бокӧс гижны",
-    "newarticle": "(Выль)",
-    "currentrev": "Быд лунся версия",
-    "search-result-size": "$1 ({{PLURAL:$2|$2 кыв}})",
-    "timezonelegend": "Час кытш",
-    "recentchanges": "Выль веськӧдӧмъяс",
-    "hide": "Дзебны",
-    "newpageletter": "В",
-    "boteditletter": "б",
-    "recentchangeslinked-page": "Гижӧдлӧн ним:",
-    "upload": "Файл сӧвтны",
-    "uploadbtn": "Файл сӧвтны",
-    "filehist-datetime": "Кадпас/кад",
-    "filehist-user": "Пырысь",
-    "filehist-comment": "Пасйӧд",
-    "randompage": "Кӧсйытӧг гижӧд",
-    "newpages": "Выль лист бокъяс",
-    "move": "Ним вежны",
-    "specialloguserlabel": "Пырысь:",
-    "log": "Журналъяс",
-    "allarticles": "Став гижӧдъяс",
-    "mywatchlist": "Видзӧдӧм лыддьӧгӧй",
-    "deletepage": "Лист бокӧс бырӧдны",
-    "deletereason-dropdown": "* Типовые причины удаления\n** вандализм\n** по запросу автора\n** нарушение авторских прав\n* MediaWiki\n** Дубликат сообщения с translatewiki.net",
-    "protect-level-sysop": "Администраторъяс сӧмын",
-    "namespace": "Ним пространство:",
-    "contributions": "Вӧлысьлӧн чӧжӧс",
-    "mycontris": "Чӧжӧсӧй",
-    "whatlinkshere": "Ыстӧдъяс татчӧ",
-    "contribslink": "чӧжӧс",
-    "newtitle": "Выль ним",
-    "movepagebtn": "Лист бокӧс ним вежны",
-    "allmessages": "Система юӧртӧмъяс",
-    "tooltip-pt-userpage": "Пырысьлӧн лист бокӧй",
-    "tooltip-ca-talk": "Гижӧдлӧн сёрнитӧм лист бокӧй али Википедиялӧн дӧнъялӧм лист бокӧй",
-    "tooltip-ca-move": "Лист боклӧн ним вежны",
-    "specialpages": "Торъя лист бокъяс"
+       "@metadata": {
+               "authors": [
+                       "Comp1089",
+                       "Yufereff",
+                       "ОйЛ"
+               ]
+       },
+       "sunday": "вежалун",
+       "monday": "выльлун",
+       "tuesday": "воторник",
+       "wednesday": "середа",
+       "thursday": "четверг",
+       "friday": "пекнича",
+       "saturday": "субöта",
+       "january": "тӧв шӧр тӧлысь",
+       "february": "урасьӧм тӧлысь",
+       "march": "рака тӧлысь",
+       "april": "кос му тӧлысь",
+       "may_long": "ода кора тӧлысь",
+       "june": "лӧддза-номъя тӧлысь",
+       "july": "сора тӧлысь",
+       "august": "моз тӧлысь",
+       "september": "кӧч тӧлысь",
+       "october": "йирым тӧлысь",
+       "november": "вӧльгым тӧлысь",
+       "december": "ӧшым тӧлысь",
+       "january-gen": "тӧв шӧр",
+       "february-gen": "урасьӧм",
+       "march-gen": "рака",
+       "april-gen": "кос му",
+       "may-gen": "ода кора",
+       "june-gen": "лӧддза-номъя",
+       "july-gen": "сора",
+       "august-gen": "моз",
+       "september-gen": "кӧч",
+       "october-gen": "йирым",
+       "november-gen": "вӧльгым",
+       "december-gen": "ӧшым",
+       "pagecategories": "{{PLURAL:$1|1=Категория|Категория}}",
+       "article": "Гижӧд",
+       "cancel": "Дугӧдны",
+       "mytalk": "Сёрнитан лист бокӧй",
+       "qbfind": "Корсьысьӧм",
+       "qbedit": "Веськӧдны",
+       "namespaces": "Ним пространствояс",
+       "search": "Корсьысьӧм",
+       "searchbutton": "Аддзыны",
+       "searcharticle": "Вуджны",
+       "history_short": "Важвылӧм",
+       "printableversion": "Лэдзӧм версия",
+       "permalink": "Вежласьтӧм ыстӧд",
+       "edit": "Вежны",
+       "delete": "Бырӧдны",
+       "protect": "Дорйыны",
+       "newpage": "Выль лист бок",
+       "talkpagelinktext": "сёрнитанін",
+       "talk": "Сёрнитанін",
+       "toolbox": "Инструментъяс",
+       "otherlanguages": "Мӧд кывъясӧн",
+       "jumptosearch": "корсьысьӧм",
+       "aboutsite": "{{SITENAME}} йылысь",
+       "currentevents": "Быд лунся лоӧмтор",
+       "mainpage": "Медшӧр лист бок",
+       "mainpage-description": "Медшӧр лист бок",
+       "portal": "Йитчӧм",
+       "portal-url": "Project:Йитчӧм портал",
+       "editsection": "веськӧдны",
+       "editold": "веськӧдны",
+       "editlink": "вежны",
+       "editsectionhint": "«$1» секция веськӧдны",
+       "red-link-title": "$1 (гижӧд абу)",
+       "nstab-main": "Гижӧд",
+       "nstab-user": "Пырысь",
+       "nstab-project": "Проект йылысь",
+       "nstab-category": "Категория",
+       "yourname": "Пырысьлӧн ним:",
+       "login": "Висьтасьны",
+       "nav-login-createaccount": "Висьтасьны / гижсьыны",
+       "userlogin": "Висьтасьны али гижсьыны",
+       "logout": "Сеанс эштӧдӧм",
+       "userlogout": "Сеанс эштӧдӧм",
+       "gotaccountlink": "Висьтасьӧй",
+       "loginlanguagelabel": "Кыв: $1",
+       "savearticle": "Лист бокӧс гижны",
+       "newarticle": "(Выль)",
+       "currentrev": "Быд лунся версия",
+       "search-result-size": "$1 ({{PLURAL:$2|$2 кыв}})",
+       "timezonelegend": "Час кытш",
+       "recentchanges": "Выль веськӧдӧмъяс",
+       "hide": "Дзебны",
+       "newpageletter": "В",
+       "boteditletter": "б",
+       "recentchangeslinked-page": "Гижӧдлӧн ним:",
+       "upload": "Файл сӧвтны",
+       "uploadbtn": "Файл сӧвтны",
+       "filehist-datetime": "Кадпас/кад",
+       "filehist-user": "Пырысь",
+       "filehist-comment": "Пасйӧд",
+       "randompage": "Кӧсйытӧг гижӧд",
+       "newpages": "Выль лист бокъяс",
+       "move": "Ним вежны",
+       "specialloguserlabel": "Пырысь:",
+       "log": "Журналъяс",
+       "allarticles": "Став гижӧдъяс",
+       "mywatchlist": "Видзӧдӧм лыддьӧгӧй",
+       "deletepage": "Лист бокӧс бырӧдны",
+       "deletereason-dropdown": "* Типовые причины удаления\n** вандализм\n** по запросу автора\n** нарушение авторских прав\n* MediaWiki\n** Дубликат сообщения с translatewiki.net",
+       "protect-level-sysop": "Администраторъяс сӧмын",
+       "namespace": "Ним пространство:",
+       "contributions": "Вӧлысьлӧн чӧжӧс",
+       "mycontris": "Чӧжӧсӧй",
+       "whatlinkshere": "Ыстӧдъяс татчӧ",
+       "contribslink": "чӧжӧс",
+       "newtitle": "Выль ним",
+       "movepagebtn": "Лист бокӧс ним вежны",
+       "allmessages": "Система юӧртӧмъяс",
+       "tooltip-pt-userpage": "Пырысьлӧн лист бокӧй",
+       "tooltip-ca-talk": "Гижӧдлӧн сёрнитӧм лист бокӧй али Википедиялӧн дӧнъялӧм лист бокӧй",
+       "tooltip-ca-move": "Лист боклӧн ним вежны",
+       "specialpages": "Торъя лист бокъяс"
 }
index e8320d8..cfb0f45 100644 (file)
        "passwordreset-emailsent": "Ebost dassettya ger tremena re beu danvenys.",
        "passwordreset-emailsent-capture": "Ebost dassettya ger tremena re beu danvenys, hag y hyllir y weles a-woles.",
        "changeemail": "Chanjya trigva ebost",
-       "changeemail-header": "Chanjya trigva ebost an akont",
        "changeemail-text": "Lenwewgh an furvlen-ma rag chanjya agas trigva ebost. Y fydh res dhywgh entra agas ger tremena rag afydhya an chanj-ma.",
        "changeemail-oldemail": "Agas trigva ebost a-lemmyn:",
        "changeemail-newemail": "Agas trigva ebost nowyth:",
        "changeemail-none": "(nagonan)",
        "changeemail-password": "Agas ger tremena war {{SITENAME}}:",
        "changeemail-submit": "Chanjya an trigva ebost",
-       "changeemail-cancel": "Hedhi",
        "bold_sample": "Tekst tew",
        "bold_tip": "Tekst tew",
        "italic_sample": "Tekst italek",
        "search-relatedarticle": "Kelmys",
        "searchrelated": "kelmys",
        "searchall": "oll",
-       "showingresultsheader": "{{PLURAL:$5|Sewyans '''$1''' a '''$3'''|Sewyansow '''$1 - $2''' a '''$3'''}} rag '''$4'''",
        "search-nonefound": "Nyns esa sewyans vyth owth omdhesedha orth an govyn.",
        "powersearch-legend": "Hwilans avonsys",
        "powersearch-ns": "Hwilas yn spasys-hanow:",
        "pager-older-n": "{{PLURAL:$1|1 kottha|$1 kottha}}",
        "booksources": "Pennfentynyow lyver",
        "booksources-search-legend": "Hwilas pennfentynyow lyver",
-       "booksources-go": "Mos",
        "specialloguserlabel": "Awtour:",
        "speciallogtitlelabel": "Kosten (titel po devnydhyer):",
        "log": "Kovnotennow",
        "watchlist-details": "Yma {{PLURAL:$1|$1 folen}} war agas rol wolya, marnas folennow keskows.",
        "wlheader-showupdated": "Yn '''tew''' y tiskwedhir folennow re beu chanjyes a-dhia agas vysytyans diwettha.",
        "wlnote": "A-woles yma an {{PLURAL:$1|chanj diwettha|'''$1''' chanj diwettha}} y'n {{PLURAL:$2|our|'''$2''' our}} diwettha, a-dhia $3, $4.",
-       "wlshowlast": "Diskwedhes an $1 our diwettha, an $2 dydh diwettha, po $3",
+       "wlshowlast": "Diskwedhes an $1 our diwettha, an $2 dydh diwettha, po",
        "watchlist-options": "Etholyow an rol wolya",
        "watching": "Ow kolya...",
        "unwatching": "Ow tisgolya...",
        "exif-sharpness-1": "Medhes",
        "exif-sharpness-2": "Kales",
        "exif-subjectdistancerange-0": "Ankoth",
-       "watchlistall2": "puptra",
        "namespacesall": "oll",
        "monthsall": "oll",
        "confirmemail": "Afydhya an drigva ebost",
index f3fb4ec..2d3df3a 100644 (file)
@@ -12,7 +12,8 @@
                        "Tynchtyk Chorotegin",
                        "Ztimur",
                        "Викиней",
-                       "아라"
+                       "아라",
+                       "Askar Nazyrov"
                ]
        },
        "tog-underline": "Шилтемелердин алдын сызуу:",
        "passwordreset-emailsent-capture": "Төмөндө көрсөтүлгөн эмейлге сырсөздү алмаштыруучу кат жөнөтүлдү.",
        "passwordreset-emailerror-capture": "Төмөндө көрсөтүлгөн дарекке сырсөздү алмаштыруу кат түзүлдү,бирок аны  {{GENDER:$2|катышуучуга}} жөнөтүү оңунан чыккан жок: $1",
        "changeemail": "E-mail даректи өзгөртүү",
-       "changeemail-header": "Эл. почтанын дарегин өзгөртүү",
        "changeemail-text": "Эмейл дарегиңизди алмаштыруу үчүн ушул үлгүнү толтуруңуз. Өзгөрүүнү аныктоо үчүн сырсөздү киргизүү талап кылынат.",
        "changeemail-no-info": "Бул баракка түз кайрылыш үчүн, сиз системага киришиңиз керек.",
        "changeemail-oldemail": "Учурдагы e-mail дарек:",
        "changeemail-none": "(жок)",
        "changeemail-password": "«{{SITENAME}}» долбоору үчүн сиздин сырсөзүңүз:",
        "changeemail-submit": "E-mail'ди өзгөртүү",
-       "changeemail-cancel": "Жокко чыгаруу",
        "bold_sample": "Калың текст",
        "bold_tip": "Калың текст",
        "italic_sample": "жантык текст",
        "search-relatedarticle": "Байланыштуу",
        "searchrelated": "байланыштуу",
        "searchall": "баары",
-       "showingresultsheader": "'''$4''' үчүн {{PLURAL:$5|'''$3''' жыйынтыктан '''$1'''-и|'''$1 - $2''' -дан '''$3''' жыйынтык}}",
        "search-nonefound": "Талапка төп маалымат табылган жок.",
        "powersearch-legend": "Кеңейтилген издөө",
        "powersearch-ns": "Аталыш мейкиндиктеринен издөө:",
        "unusedtemplateswlh": "башка шилтемелер",
        "randompage": "Тушкелди макала",
        "statistics": "Статистика",
-       "statistics-header-views": "Көрүү статистикасы",
        "statistics-header-users": "Колдонуучулардын статистикасы",
        "statistics-header-hooks": "Башка статистика",
        "statistics-articles": "Макалалар",
        "uncategorizedtemplates": "Категорияланбаган калыптар",
        "unusedcategories": "Колдонулбаган категориялар",
        "unusedimages": "Колдонулбаган файлдар",
-       "popularpages": "Популярдуу барактар",
        "wantedcategories": "Керек болгон категориялар",
        "wantedpages": "Керек болгон барактар",
        "wantedfiles": "Керек болгон файлдар",
        "pager-older-n": "{{PLURAL:$1|эскирээк 1|эскирээк $1}}",
        "booksources": "Китеп тууралуу маалыматтар",
        "booksources-search-legend": "Китеп тууралуу маалыматтарды издөө",
-       "booksources-go": "Алга",
        "specialloguserlabel": "Аткаруучу:",
        "speciallogtitlelabel": "Максаты (аталышы же колдонуучу):",
        "log": "Журналдар",
        "watch": "Көзөмөлдөө",
        "unwatch": "Көзөмөлдөбөө",
        "watchlist-details": "Талкуу барактарын эсепке албаганда көзөмөл тизмеңизде {{PLURAL:$1|$1 барак|$1 барак}} бар.",
-       "wlshowlast": "Соңку $1 саат $2 күн $3 көрсөтүү.",
+       "wlshowlast": "Соңку $1 саат $2 күн  көрсөтүү.",
        "watchlist-options": "Көзөмөл тизменин ырастоолору",
        "created": "түзүлдү",
        "changed": "өзгөртүлдү",
        "thumbnail_image-type": "Сүрөт түрү колдолбойт",
        "import": "Барактарды импорттоо",
        "importinterwiki": "Уики аралык импорт",
-       "import-interwiki-source": "Уики-булак/барак:",
        "import-interwiki-history": "Бул барактын бүткүл өзгөртүү тарыхын көчүрүү",
        "import-interwiki-templates": "Бардык калыптарды камтуу",
        "import-interwiki-submit": "Импорттоо",
        "pageinfo-header-edits": "Оңдоо тарыхы",
        "pageinfo-display-title": "Көрүнүүчү башжазуу",
        "pageinfo-article-id": "Барактын идентификатору",
-       "pageinfo-views": "Кароолордун саны",
        "pageinfo-redirects-name": "Бул баракка багыттамалар",
        "pageinfo-firstuser": "Барактын түзүүчүсү",
        "pageinfo-lastuser": "Акыркы редактор",
        "exif-iimcategory-soi": "Социалдык маселелер",
        "exif-iimcategory-spo": "Спорт",
        "exif-iimcategory-wea": "Аба-ырайы",
-       "watchlistall2": "баары",
        "namespacesall": "баары",
        "monthsall": "баары",
        "confirmemail": "Электрондук даректи аныктоо",
        "duration-years": "$1 {{PLURAL:$1|жыл}}",
        "duration-decades": "$1 {{PLURAL:$1|оң жылдык мөөнөт}}",
        "duration-centuries": "$1 {{PLURAL:$1|кылым}}",
-       "duration-millennia": "$1 {{PLURAL:$1|миң жылдык мөөнөт}}"
+       "duration-millennia": "$1 {{PLURAL:$1|миң жылдык мөөнөт}}",
+       "mediastatistics-table-count": "Файлдар саны",
+       "mediastatistics-table-totalbytes": "Жалпы өлчөм",
+       "mediastatistics-header-unknown": "Белгисиз",
+       "mediastatistics-header-audio": "Аудио",
+       "mediastatistics-header-video": "Видеолор",
+       "mediastatistics-header-office": "Кеңсе",
+       "mediastatistics-header-text": "Тексттик"
 }
index 3024fe7..0c55c6c 100644 (file)
        "passwordreset-emailelement": "Nomen usoris: $1\nMomentarius Tessera: $2",
        "changeemail-none": "(nulla)",
        "changeemail-submit": "Inscriptionem electronicam mutare",
-       "changeemail-cancel": "Abrogare",
        "bold_sample": "Litterae pingues",
        "bold_tip": "Litterae pingues",
        "italic_sample": "Textus litteris Italicis scriptus",
        "editinguser": "Modificare potestates usoris '''[[User:$1|$1]]''' $2",
        "userrights-editusergroup": "Greges usorum recensere",
        "saveusergroups": "Greges usorum servare",
-       "userrights-groupsmember": "In grege aut in gregibus:",
+       "userrights-groupsmember": "{{PLURAL:$1|In grege|In gregibus}}:",
        "userrights-reason": "Causa:",
        "userrights-changeable-col": "Greges quos tibi oportet mutare",
        "userrights-unchangeable-col": "Greges quos tibi non oportet mutare",
        "statistics": "Census",
        "statistics-header-pages": "Census paginarum",
        "statistics-header-edits": "Census recensionum",
-       "statistics-header-views": "Census visuum",
        "statistics-header-users": "Census usorum",
        "statistics-header-hooks": "Alia statistica",
        "statistics-articles": "Paginae in spatio nominali principali",
        "statistics-files": "Fasciculi impositi",
        "statistics-edits": "Recensiones paginarum factae ab initio {{grammar:genitive|{{SITENAME}}}}",
        "statistics-edits-average": "Recensiones per paginam",
-       "statistics-views-total": "Visus",
-       "statistics-views-peredit": "Visus per recensionem",
        "statistics-users": "[[Special:ListUsers|Usores]] relati",
        "statistics-users-active": "Usores activi",
        "statistics-users-active-desc": "Usores qui {{PLURAL:$1|proxima die|proximis $1 diebus}} actionem perfecerunt",
-       "statistics-mostpopular": "Paginae plurimum visae",
        "pageswithprop-submit": "Pergere",
        "doubleredirects": "Redirectiones duplices",
        "double-redirect-fixed-move": "[[$1]] mota est et nunc redirigit ad [[$2]]",
        "uncategorizedtemplates": "Formulae sine categoriis",
        "unusedcategories": "Categoriae non in usu",
        "unusedimages": "Fasciculi non in usu",
-       "popularpages": "Paginae saepe monstratae",
        "wantedcategories": "Categoriae desideratae",
        "wantedpages": "Paginae desideratae",
        "wantedfiles": "Fasciculi desiderati",
        "suppress": "Censura",
        "booksources": "Librorum fontes",
        "booksources-search-legend": "Fontes impressas quaerere",
-       "booksources-go": "Ire",
        "specialloguserlabel": "Usor:",
        "speciallogtitlelabel": "Destinatum (titulus aut usor):",
        "log": "Acta",
        "notvisiblerev": "Emendatio deleta est",
        "watchlist-details": "{{PLURAL:$1|$1 pagina|$1 paginae}} in indice paginarum custoditarum 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 $3",
+       "wlshowlast": "Monstrare proximas $1 horas $2 dies",
        "watchlist-options": "Indicis paginarum custoditarum praeferentiae",
        "watching": "Custodiens...",
        "unwatching": "Decustodiens...",
        "exif-gpsdestdistance-n": "Milia nautica",
        "exif-gpsdirection-t": "Directio vera",
        "exif-gpsdirection-m": "Directio magnetica",
-       "watchlistall2": "omnes",
        "namespacesall": "omnia",
        "monthsall": "omnes",
        "confirmemail": "Inscriptionem electronicam adfirmare",
        "logentry-newusers-create2": "Ratio usoris $3 creata est ab usore $1",
        "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",
index db68ff1..a8ba550 100644 (file)
        "passwordreset-email": "Adresso de letral:",
        "passwordreset-emailelement": "Usuario: $1\nKontrasenya temporal: $2",
        "changeemail": "Kambiar adreso de korreo elektroniko",
-       "changeemail-header": "Kambiar adreso de korreo elektroniko de kuento",
        "changeemail-oldemail": "Adreso de korreo elektroniko aktual:",
        "changeemail-newemail": "Muevo adreso de korreo elektroniko:",
        "changeemail-none": "(dinguno)",
        "changeemail-password": "Tu kontrasenya en {{SITENAME}}:",
        "changeemail-submit": "Trocar letral",
-       "changeemail-cancel": "Anular",
        "resettokens-token-label": "$1(valor aktual: $2)",
        "bold_sample": "Teksto reforçado",
        "bold_tip": "Teksto reforçado",
        "search-interwiki-more": "(mas)",
        "searchrelated": "lisionado",
        "searchall": "todos",
-       "showingresultsheader": "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados '''$1-$2''' de '''$3'''}} parâ '''$4'''",
        "search-nonefound": "No ay resultados por esta búxquida.",
        "powersearch-legend": "Búsqueda adelantada",
        "powersearch-ns": "Busca en los espacios de nombres:",
        "download": "deskargar",
        "unusedtemplateswlh": "otros enlases",
        "randompage": "Hoja por azardo",
-       "randomincategory-selectcategory-submit": "Ir",
        "statistics": "Estatísticas",
        "statistics-articles": "Pajinas de kontenido",
        "statistics-pages": "Pajinas",
        "pager-older-n": "{{PLURAL:$1|1 de antes|$1 de antes}}",
        "booksources": "Fuentes de livros",
        "booksources-search-legend": "Buscar fuentes de libros",
-       "booksources-go": "Ir",
        "log": "Rejistros",
        "allpages": "Todas las hojas",
        "nextpage": "La sigiente pajina ($1)",
        "watchthispage": "Cudia esta hoja",
        "unwatch": "dexa de cudiar",
        "watchlist-details": "{{PLURAL:$1|$1 hoja|$1 hojas}} en tu lista de escogidas, sin contar las de la diskussión.",
-       "wlshowlast": "Ver los trocamientos de las últimas $1 oras, $2 días  $3",
+       "wlshowlast": "Ver los trocamientos de las últimas $1 oras, $2 días",
        "watchlist-options": "Opciones de la lista de escogidas",
        "watching": "Cudiando...",
        "unwatching": "Dexando de cudiar...",
        "exif-iimcategory-hth": "Salud",
        "exif-iimcategory-lab": "Lavoro",
        "exif-iimcategory-sci": "Sensiya i teknolojiya",
-       "watchlistall2": "todos",
        "namespacesall": "todos",
        "monthsall": "(todos)",
        "confirmemail": "Konfirmar adreso de korreo elektronika",
index 779c0eb..13a065e 100644 (file)
        "otherlanguages": "An anere Sproochen",
        "redirectedfrom": "(Virugeleet vu(n) $1)",
        "redirectpagesub": "Viruleedungssäit",
+       "redirectto": "Viruleeden op:",
        "lastmodifiedat": "Dës Säit gouf de(n) $1 ëm $2 Auer fir d'lescht geännert.",
        "viewcount": "Dës Säit gouf bis elo {{PLURAL:$1|emol|$1-mol}} ofgefrot.",
        "protectedpage": "Gespaart Säit",
        "viewsourcetext": "Dir kënnt de Quelltext vun dëser Säit kucken a kopéieren:",
        "viewyourtext": "Dir kënnt de Quelltext vun '''Ären Ännerungen''' op dëser Säit kucken a kopéieren:",
        "protectedinterface": "Op dëser Säit fannt Dir Text fir de Sprooch-Interface vun der Software op dëser Wiki an dofir ass si gespaart fir Mëssbrauch ze verhënneren.\n\nFir Iwwersetzungen fir all Wikien bäizesetzen oder z'änneren gitt w.e.g. op [//translatewiki.net/ translatewiki.net], de MediaWiki-Lokalisatiouns-Projet.",
-       "editinginterface": "'''Opgepasst:''' Dir sidd am Gaang, eng Säit z'änneren, déi do ass, fir Interface-Text fir d'Software ze liwweren. \nÄnnerungen op dëser Säit änneren den Interface-Text, jee no Kontext, op allen oder verschiddene Säiten, déi vun alle Benotzer op dëser Wiki gesi ginn. \nFir d'Iwwersetzunge fir all Wikien derbäizesetzen oder z'änneren gitt w.e.g. op [//translatewiki.net translatewiki.net], de MediaWiki-Lokalisatiouns-Projet.",
+       "editinginterface": "<strong>Opgepasst:</strong> Dir sidd am Gaang, eng Säit z'änneren, déi do ass, fir Interface-Text fir d'Software ze liwweren. \nÄnnerungen op dëser Säit änneren den Interface-Text, jee no Kontext, op allen oder verschiddene Säiten, déi vun alle Benotzer op dëser Wiki gesi ginn.",
        "cascadeprotected": "Dës Säit gouf fir Ännerunge gespaart, well se duerch Cascadeprotectioun vun {{PLURAL:$1|dëser Säit|dëse Säite}} gespaart ass mat der Cascadenoptioun:\n$2",
        "namespaceprotected": "Dir hutt net déi néideg Rechter fir d'Säiten am Nummraum '''$1''' ze änneren.",
        "customcssprotected": "Dir hutt net d'Recht dës CSS-Säit z'änneren, well dorop déi perséinlech Astellunge vun engem anere Benotzer gespäichert sinn.",
        "createaccount-text": "Et gouf e Benotzerkont \"$2\" fir Iech op {{SITENAME}} ($4) ugeluecht mat dem Passwuert \"$3\".\nDir sollt Iech aloggen an Äert Passwuert elo änneren.\n\nWann dëse Benotzerkont ongewollt ugeluecht gouf, kënnt Dir dës Noriicht einfach ignoréieren.",
        "login-throttled": "Dir hutt zevill dacks versicht Iech anzeloggen.\nWaart w.e.g. $1 ier Dir et nach eng Kéier probéiert.",
        "login-abort-generic": "Dir sidd net ageloggt - Aloggen ofgebrach",
+       "login-migrated-generic": "Äre Benotzerkont gouf migréiert an Äre Benotzernumm gëtt et net méi op dëser Wiki.",
        "loginlanguagelabel": "Sprooch: $1",
        "suspicious-userlogout": "Är Ufro fir Iech auszeloggen gouf refuséiert well et sou ausgesäit wéi wa se vun engem futtise Browser oder Proxy-Tëschespäicher kënnt.",
        "createacct-another-realname-tip": "De richtegen Numm ass fakultativ.\n\nWann Dir en ugitt, gëtt e benotzt fir d'Benotzerattributiounen fir Är Aarbecht zouzeuerdnen.",
        "passwordreset-emailsent-capture": "Eng Mail fir d'Passwuert zréckzesetze gouf geschéckt, Dir gesitt se hei drënner.",
        "passwordreset-emailerror-capture": "Eng Mail fir d'Passwuert zréckzesetze gouf geschéckt, Dir gesitt se hei drënner, awer de {{GENDER:$2|Benotzer}} konnt se net kréien: $1",
        "changeemail": "Mailadress änneren",
-       "changeemail-header": "Mailadress vum Benotzerkont änneren",
        "changeemail-text": "Fëllt dëse Formulaire aus fir Är Mailadress z'änneren. Dir musst Äert Passwuert aginn fir dës Ännerung ze confirméieren.",
        "changeemail-no-info": "Dir musst ageloggt sinn, fir direkt op dës Säit ze kommen.",
        "changeemail-oldemail": "Aktuell Mailadress:",
        "changeemail-none": "(keng)",
        "changeemail-password": "Äert {{SITENAME}}-Passwuert:",
        "changeemail-submit": "Mailadress änneren",
-       "changeemail-cancel": "Ofbriechen",
        "changeemail-throttled": "Dir hutt zevill dacks versicht Iech anzeloggen.\nWaart w.e.g. $1 ier Dir et nach eng Kéier probéiert.",
        "resettokens": "Token zrécksetzen",
        "resettokens-no-tokens": "Et gëtt keng Tokens fir zréck ze setzen.",
        "showpreview": "Kucken ouni ofzespäicheren",
        "showdiff": "Ännerunge weisen",
        "blankarticle": "<strong>Opgepasst:</strong> D'Säit déi Dir uleet ass eidel.\nWann Dir nach eng Kéier op \"{{int:savearticle}}\" klickt, da gëtt d'Säit ugeluecht.",
-       "anoneditwarning": "'''Opgepasst:''' Dir sidd net ageloggt. Dowéinst gëtt amplaz vun engem Benotzernumm Är IP Adress am Historique vun dëser Säit gespäichert.",
+       "anoneditwarning": "<strong>Opgepasst:</strong> Dir sidd net ageloggt. Dowéinst gëtt amplaz vun engem Benotzernumm Är IP Adress ëffentlech gewise wann Dir Ännerunge maacht. Wann Dir <strong>[$1 Iech aloggt]</strong> oder <strong>[$2 e Bnotzerkont opmaachen]</strong>, Är Ännerunge ginn dann Ärem Benotzerkont zougedeelt, genee wéi aner Avantagen.",
        "anonpreviewwarning": "''Dir sidd net ageloggt. Wann Dir ofspäichert gëtt Är IP-Adress an der Lëscht vun de Versioune vun dëser Säit enregistréiert.''",
        "missingsummary": "'''Erënnerung:''' Dir hutt kee Resumé aginn.\nWann Dir nacheemol op \"{{int:savearticle}}\" klickt, gëtt Är Ännerung ouni Resumé ofgespäichert.",
        "missingcommenttext": "Gitt w.e.g. eng Bemierkung an.",
        "page_last": "lescht",
        "histlegend": "Fir d'Ännerungen unzeweisen: Klickt déi zwou Versiounen un, déi solle verglach ginn.<br />\n*(aktuell) = Ënnerscheed mat der aktueller Versioun,\n*(lescht) = Ënnerscheed mat der aler Versioun,\n*k = Kleng Ännerung.",
        "history-fieldset-title": "An de Versioune sichen",
-       "history-show-deleted": "nëmmen déi geläschten",
+       "history-show-deleted": "nëmmen déi geläscht",
        "histfirst": "eelst",
        "histlast": "neist",
        "historysize": "({{PLURAL:$1|1 Byte|$1 Byten}})",
        "revdelete-selected-file": "{{PLURAL:$1|Erausgesicht Versioun|Erausgesicht Versioune}} vum Fichier vu(n) [[:$2]]:",
        "logdelete-selected": "Ausgewielten {{PLURAL:$1|Evenement|Evenementer}} aus dem Logbuch:",
        "revdelete-text-text": "Geläscht Versioune bleiwen am Historique vun der Säit, awer Deeler vun hirem Inhalt sinn net ëffentlech zougänglech.",
+       "revdelete-text-file": "Geläscht Versioune vu Fichiere bleiwen am Historique vum Fichier awer Deeler vun hirem Inhalt sinn net ëffentlech zougänglech.",
        "revdelete-text-others": "Aner Administrateure kënnen nach ëmmer de verstoppten Inhalt gesinn an en nees restauréieren, ausser wann zousätzlech Limitatiounen agestallt sinn.",
        "revdelete-confirm": "Confirméiert w.e.g. datt Dir dat maache wëllt, datt Dir d'Konsequenze verstitt an datt Dir dëst an Aklang mat de [[{{MediaWiki:Policy-url}}|Richtlinne]] maacht.",
        "revdelete-suppress-text": "Ënnerdréckung sollt '''nëmmen''' an dëse Fäll benotzt ginn:\n* Informatiounen déi beleidege kéinten\n* Net ubruechte perséinlechen Informatiounen\n*: ''Adressen, Telefonsnummeren, Sozialversécherungsnummeren asw.''",
        "mergehistory-same-destination": "Ausgangs- an Zilsäit däerfen net déi selwescht sinn",
        "mergehistory-reason": "Grond:",
        "mergelog": "Fusiouns-Logbuch",
-       "pagemerge-logentry": "[[$1]] zesummegeluecht an [[$2]] (Versioune bis $3)",
        "revertmerge": "Zesummeféieren ophiewen",
        "mergelogpagetext": "Lëscht vun de rezenten Zesummeféierunge vu Versiounsgeschichten.",
        "history-title": "$1: Historique vun de Versiounen",
        "search-result-category-size": "{{PLURAL:$1|1 Säit|$1 Säiten}} ({{PLURAL:$2|1 Ënnerkategorie|$2 Ënnerkategorien}}, {{PLURAL:$3|1 Fichier|$3 Fichieren}})",
        "search-redirect": "(Viruleedung $1)",
        "search-section": "(Abschnitt $1)",
+       "search-category": "(Kategorie $1)",
        "search-file-match": "(Inhalt vum Fichier passt)",
        "search-suggest": "Mengt Dir: $1",
        "search-interwiki-caption": "Schwësterprojeten",
        "searchrelated": "a Verbindng",
        "searchall": "all",
        "showingresults": "Hei gesitt der  {{PLURAL:$1| '''1''' Resultat|'''$1''' Resultater}}, ugefaange mat #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' vu(n) '''$3'''|Resultater '''$1 - $2''' vu(n) '''$3'''}} fir '''$4'''",
        "search-nonefound": "Fir Är Ufro gouf näischt fonnt.",
        "powersearch-legend": "Erweidert Sich",
        "powersearch-ns": "Sichen an den Nummraim:",
        "gender-female": "Si ännert Wikisäiten",
        "prefs-help-gender": "Fakultativ:\nD'Software benotzt seng Wäerter fir Iech unzeschwätzen a fir vun Iech vis-a-vis vun Aneren grammatesch ''Gender-korrekt'' ze schwätzen. \n\nDës Informatioun ass ëffentlech.",
        "email": "E-Mail",
-       "prefs-help-realname": "Äre richtegen Numm ass fakultativ. Wann Dir en ugitt, gëtt e benotzt fir Iech Är Kontributiounen zouzeuerdnen.",
+       "prefs-help-realname": "De richtegen Numm ass fakultativ.\nWann en ugi gouf, gëtt e benotzt fir Iech Är Kontributiounen zouzeuerdnen.",
        "prefs-help-email": "D'E-Mailadress ass fakultativ, awer si gëtt gebraucht fir Iech Äert Passwuert ze mailen, wann Dir et géift vergiessen.",
        "prefs-help-email-others": "Dir kënnt Iech och dofir decidéieren datt Anerer Iech iwwer Är Diskussiounssäit kontaktéieren ouni datt Dir derbäi Är Identitéit verrode musst.",
        "prefs-help-email-required": "Eng gëlteg E-Mail-Adress gëtt heifir gebraucht.",
        "statistics": "Statistik",
        "statistics-header-pages": "Säitestatistiken",
        "statistics-header-edits": "Statistik vun den Ännerungen",
-       "statistics-header-views": "Statistiken iwwer d'Visitten",
        "statistics-header-users": "Benotzerstatistik",
        "statistics-header-hooks": "Aner Statistiken",
        "statistics-articles": "Säite mat Inhalt",
        "statistics-files": "Eropgeluede Fichieren",
        "statistics-edits": "Säitenännerungen zanter datt et {{SITENAME}} gëtt",
        "statistics-edits-average": "Duerchschnëttlech Zuel vun Ännerunge pro Säit",
-       "statistics-views-total": "Total vun den Oprif",
-       "statistics-views-total-desc": "Kucke vu Säiten déi et net gëtt a vu Spezialsäite sinn net mat dran",
-       "statistics-views-peredit": "Affichage pro Ännerung",
        "statistics-users": "Registréiert [[Special:ListUsers|Benotzer]]",
        "statistics-users-active": "Aktiv Benotzer",
        "statistics-users-active-desc": "Benotzer déi während {{PLURAL:$1|dem leschten Dag|de leschten $1 Deeg}} eppes gemaach hunn",
-       "statistics-mostpopular": "Am meeschte gekuckte Säiten",
        "pageswithprop": "Säite mat enger Säiteneegeschaft",
        "pageswithprop-legend": "Säite mat enger Säiteneegeschaft",
        "pageswithprop-text": "Op dëser Säit sti Säiten déi eng speziell Säiteneegeschaft benotzen.",
        "uncategorizedtemplates": "Schablounen ouni Kategorie",
        "unusedcategories": "Net benotzt Kategorien",
        "unusedimages": "Net benotzt Fichieren",
-       "popularpages": "Populär Säiten",
        "wantedcategories": "Gewënscht Kategorien",
        "wantedpages": "Gewënscht Säiten",
        "wantedpages-badtitle": "Net valabelen Titel am Resultat: $1",
        "pager-older-n": "{{PLURAL:$1|vireg|vireg $1}}",
        "suppress": "Iwwersiicht",
        "querypage-disabled": "Dës Spezialsäit ass aus Performance-Grënn ausgeschalt.",
+       "apihelp": "API-Hëllef",
+       "apihelp-no-such-module": "Modul \"$1\" net fonnt.",
        "booksources": "Bicherreferenzen",
        "booksources-search-legend": "No Bicherreferenze sichen",
-       "booksources-go": "Sichen",
+       "booksources-search": "Sichen",
        "booksources-text": "Hei ass eng Lëscht mat Linken op Internetsäiten, déi nei a gebraucht Bicher verkafen. Do kann et sinn datt Dir méi Informatiounen iwwer déi Bicher fannt déi Dir sicht.",
        "booksources-invalid-isbn": "D'ISBN-Nummer déi Dir uginn hutt schéngt net gëlteg ze sinn. Kuckt w.e.g. no ob beim Kopéiere kee Feeler geschitt ass.",
        "specialloguserlabel": "Aktive Benotzer:",
        "trackingcategories-msg": "Tracking-Kategorie",
        "trackingcategories-name": "Numm vum Message",
        "noindex-category-desc": "D'Säit gëtt net vu Botten indexéiert, well dat magescht Wuert <code><nowiki>__NOINDEX__</nowiki></code> dran ass a well se an engem Nummraum ass, an deem déi Markéierung erlaabt ass.",
+       "index-category-desc": "D'Säit huet <code><nowiki>__INDEX__</nowiki></code> an ass an engem Nummraum, wou déi Markéierung erlaabt ass an dofir gëtt d'Säit vu Sichroboter indexéiert wou dat normalerweis net de Fall wier.",
        "post-expand-template-inclusion-category-desc": "D'Säit ass méi grouss wéi <code>$wgMaxArticleSize</code> nom expandéiere vun alle Schablounen, dofir goufen e puer Schablounen net expandéiert.",
        "broken-file-category-desc": "D'Säit huet e futtise Link op e Fichier (e Link op en agebonnene Fichier wann et de Fichier net gëtt).",
        "hidden-category-category-desc": "D'Kategorie huet <code><nowiki>__HIDDENCAT__</nowiki></code> an hirer Säit drastoen, dat verhënnert datt se standardméisseg an der Këscht mat de Kategorielinken op der Säit gewise gëtt.",
        "wlheader-enotif": "E-Mail-Notifikatioun ass ageschalt.",
        "wlheader-showupdated": "Säiten déi zanter Ärer leschter Visite geännert goufen, si '''fett''' geschriwwen",
        "wlnote": "Hei {{PLURAL:$1|ass déi lescht Ännerung|sinn déi lescht <strong>$1</strong> Ännerunge}} vun {{PLURAL:$2|der leschter Stonn|de leschte(n) <strong>$2</strong> Stonnen}}, Stand: $3 ëm $4 Auer.",
-       "wlshowlast": "D'Ännerunge vun de leschte(n) $1 Stonnen, $2 Deeg oder $3 (an de leschten 30 Deeg) weisen.",
+       "wlshowlast": "Déi lescht $1 Stonnen $2 Deeg weisen",
        "watchlist-options": "Optioune vun der Iwwerwaachungslëscht",
        "watching": "Iwwerwaachen …",
        "unwatching": "Net méi iwwerwaachen …",
        "unblocked": "D'Spär fir de [[User:$1|Benotzer $1]] gouf opgehuewen",
        "unblocked-range": "D'Spär vum $1 gouf opgehuewen",
        "unblocked-id": "D'Spär $1 gouf opgehuewen",
+       "unblocked-ip": "D'Spär vum [[Special:Contributions/$1|$1]] gouf opgehuewen.",
        "blocklist": "Gespaart Benotzer",
        "ipblocklist": "Gespaart Benotzer",
        "ipblocklist-legend": "No engem gespaarte Benotzer sichen",
        "tooltip-feed-atom": "Atom-Feed fir dës Säit",
        "tooltip-t-contributions": "Lëscht vun de Kontributioune vun dësem Benotzer",
        "tooltip-t-emailuser": "Dësem Benotzer eng E-Mail schécken",
+       "tooltip-t-info": "Méi Informatiounen iwwer dës Säit",
        "tooltip-t-upload": "Biller oder Mediefichieren eroplueden",
        "tooltip-t-specialpages": "Lëscht vun alle Spezialsäiten",
        "tooltip-t-print": "Versioun vun dëser Säit fir auszedrécken",
        "pageinfo-robot-policy": "Indexéierung duerch Botten",
        "pageinfo-robot-index": "Erlaabt",
        "pageinfo-robot-noindex": "Net erlaabt",
-       "pageinfo-views": "Zuel vun de Kéieren déi dës Säit gekuckt gouf",
        "pageinfo-watchers": "Zuel vun de Benotzer déi d'Säit iwwerwaachen",
        "pageinfo-few-watchers": "Manner wéi $1 {{PLURAL:$1|Benotzer deen iwwerwaacht|Benotzer déi iwwerwaachen}}",
        "pageinfo-redirects-name": "Zuel vun de Viruleedungen op dës Säit",
        "exif-urgency-low": "Niddreg ($1)",
        "exif-urgency-high": "Héich ($1)",
        "exif-urgency-other": "Benotzerdefinéiert Prioritéit ($1)",
-       "watchlistall2": "all",
        "namespacesall": "all",
        "monthsall": "all",
        "confirmemail": "E-Mailadress confirméieren",
        "logentry-upload-overwrite": "$1 huet eng nei Versioun vu(n) $3 {{GENDER:$2|eropgelueden}}",
        "logentry-upload-revert": "$1 huet $3 {{GENDER:$2|eropgelueden}}",
        "rightsnone": "(keen)",
+       "revdelete-summary": "Resumé änneren",
        "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:",
        "log-name-pagelang": "Log vum Ännere vun der Sprooch",
        "log-description-pagelang": "Dëst ass a Log mat den Ännerunge vun de Sprooche vun de Säiten.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktivéiert)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desaktivéiert''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desaktivéiert''')",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 Byte|$1 Byten}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME-Typ",
+       "mediastatistics-table-extensions": "Méiglech Erweiderungen",
+       "mediastatistics-table-count": "Zuel vun de Fichieren",
+       "mediastatistics-header-unknown": "Onbekannt",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Videoen",
+       "mediastatistics-header-office": "Office",
+       "mediastatistics-header-text": "Textuell",
+       "json-error-unknown": "Et gouf e Problem mam JSON. Feeler: $1",
+       "json-error-syntax": "Syntaxfeeler"
 }
index b05d164..63fa3b2 100644 (file)
@@ -1,48 +1,48 @@
 {
-    "@metadata": {
-        "authors": [
-            "Amire80"
-        ]
-    },
-    "article": "Тарих",
-    "mytalk": "На цӀухху-бусу байсса интернетрал лажин",
-    "qbedit": "Дакьин дуван",
-    "history": "Тарих",
-    "history_short": "Тарих",
-    "edit": "Дакьин дуван",
-    "talkpagelinktext": "Ихтилат",
-    "talk": "Ихтилат",
-    "currentevents": "Нанисса ишру",
-    "currentevents-url": "Project:Нанисса ишру",
-    "mainpage": "Агьаммур лажин",
-    "mainpage-description": "Агьаммур лажин",
-    "editsection": "дакьин дуван",
-    "editold": "дакьин дуван",
-    "nstab-main": "Тарих",
-    "nstab-user": "Гьуртту хьума",
-    "nstab-special": "Къуллугъирал лажин",
-    "nstab-image": "Сурат",
-    "nstab-template": "Шаблон",
-    "nstab-category": "Категория",
-    "userlogin": "Системалухь цу уссарав бусан",
-    "logout": "Уккаву",
-    "userlogout": "Уккаву",
-    "minoredit": "Мюрщсса дахханашиву",
-    "watchthis": "Ва лажин ябитаврил сияхӀравун ххи дан",
-    "savearticle": "Лажин ядан",
-    "preview": "Цалсса ххалбаву",
-    "showpreview": "Цалсса ххалбаву",
-    "recentchanges": "Махъсса дахханашивурту",
-    "file-anchor-link": "Сурат",
-    "filehist-user": "Гьурттучув",
-    "move": "ЦӀа даххана дан",
-    "specialloguserlabel": "Гьурттучув:",
-    "emailuser": "ГьурттучувначӀансса чагьар",
-    "watchlist": "Ябитаврил сияхӀ",
-    "watch": "Хъирив агьан",
-    "unwatch": "Хъирив къаагьан",
-    "contributions": "Гьурттучунал бутӀа",
-    "mycontris": "Ттул даву",
-    "sp-contributions-talk": "Ихтилат",
-    "move-watch": "Ва лажин ябитаврил сияхӀравун ххи дан"
+       "@metadata": {
+               "authors": [
+                       "Amire80"
+               ]
+       },
+       "article": "Тарих",
+       "mytalk": "На цӀухху-бусу байсса интернетрал лажин",
+       "qbedit": "Дакьин дуван",
+       "history": "Тарих",
+       "history_short": "Тарих",
+       "edit": "Дакьин дуван",
+       "talkpagelinktext": "Ихтилат",
+       "talk": "Ихтилат",
+       "currentevents": "Нанисса ишру",
+       "currentevents-url": "Project:Нанисса ишру",
+       "mainpage": "Агьаммур лажин",
+       "mainpage-description": "Агьаммур лажин",
+       "editsection": "дакьин дуван",
+       "editold": "дакьин дуван",
+       "nstab-main": "Тарих",
+       "nstab-user": "Гьуртту хьума",
+       "nstab-special": "Къуллугъирал лажин",
+       "nstab-image": "Сурат",
+       "nstab-template": "Шаблон",
+       "nstab-category": "Категория",
+       "userlogin": "Системалухь цу уссарав бусан",
+       "logout": "Уккаву",
+       "userlogout": "Уккаву",
+       "minoredit": "Мюрщсса дахханашиву",
+       "watchthis": "Ва лажин ябитаврил сияхӀравун ххи дан",
+       "savearticle": "Лажин ядан",
+       "preview": "Цалсса ххалбаву",
+       "showpreview": "Цалсса ххалбаву",
+       "recentchanges": "Махъсса дахханашивурту",
+       "file-anchor-link": "Сурат",
+       "filehist-user": "Гьурттучув",
+       "move": "ЦӀа даххана дан",
+       "specialloguserlabel": "Гьурттучув:",
+       "emailuser": "ГьурттучувначӀансса чагьар",
+       "watchlist": "Ябитаврил сияхӀ",
+       "watch": "Хъирив агьан",
+       "unwatch": "Хъирив къаагьан",
+       "contributions": "Гьурттучунал бутӀа",
+       "mycontris": "Ттул даву",
+       "sp-contributions-talk": "Ихтилат",
+       "move-watch": "Ва лажин ябитаврил сияхӀравун ххи дан"
 }
index 69b197c..438934a 100644 (file)
        "changeemail": "Э-почта дегишарун",
        "changeemail-none": "(садни)",
        "changeemail-submit": "E-адрес дегишун",
-       "changeemail-cancel": "Гьич авун",
        "bold_sample": "ЯцIу текст",
        "bold_tip": "Къалин текст",
        "italic_sample": "Курсивдин текст",
        "search-relatedarticle": "Галкlанавай",
        "searchrelated": "Галкlанавай",
        "searchall": "вири",
-       "showingresultsheader": "'''$4'''  патал {{PLURAL:$5|1='''$3''' - кай  '''$1''' нетижа|'''$3''' - кай  '''$1 - $2''' нетижаяр}}",
        "search-nonefound": "Тlалабдив кьадай са нетижани жагъанвач.",
        "powersearch-legend": "Гегьенш жугъурун",
        "powersearch-ns": "Жугъурун тlварарин генгвилера:",
        "statistics": "Статистика",
        "statistics-header-pages": "Ччинрин статистика",
        "statistics-header-edits": "Дуьзар хъувунрин статистика",
-       "statistics-header-views": "Статистикадиз килигун",
        "statistics-header-users": "Иштиракчидин статистика",
        "statistics-articles": "Макъалаяр",
        "statistics-pages": "Ччинар",
        "statistics-files": "Ппарнавай файлар",
-       "statistics-views-total": "Вири килигунар",
        "statistics-users-active": "Актив уртахар",
        "brokenredirects-edit": "дегишарун",
        "brokenredirects-delete": "алудун",
        "suppress": "Чуьнуьхун",
        "booksources": "Ктабрин чешмеяр",
        "booksources-search-legend": "Ктабдикай малумат жугъурун",
-       "booksources-go": "Фин",
        "log": "Журналар",
        "allpages": "Вири ччинар",
        "prevpage": "Алатай чар ($1)",
        "watchthispage": "Гелкъуьн и хъувун",
        "unwatch": "Вилив хуьмир",
        "watchlist-details": "Куь вилив хуьнин сиягьда {{PLURAL:$1|1=$1 ччин|$1 ччин}} авайди я, веревирдрин ччинар квачиз.",
-       "wlshowlast": "Эхиримжи $1 сят $2 югъ $3 къалура",
+       "wlshowlast": "Эхиримжи $1 сят $2 югъ  къалура",
        "watchlist-options": "Вилив хуьнин сиягьдин низамарунар",
        "watching": "Килигун...",
        "unwatching": "Амма клигнай",
        "tooltip-undo": "«Гьич авун»  авунвай дуьзар хъувун paxкурзава ва сифтедин килигунин режимда  дуьзар хъувундин форма ахъа йийзва. Им нетижадиз себеб алава йийз мумкинвал гузва",
        "tooltip-summary": "Куьруь нетижа гьадрун",
        "pageinfo-header-edits": "Дуьзар хъувун",
-       "pageinfo-views": "Килигунрин кьадар",
        "pageinfo-edits": "Дьузар хъувунрин кьадар",
        "previousdiff": "Вилик алатай дуьзар хъувун",
        "nextdiff": "ЦIийи масакIаяр",
        "exif-disclaimer": "Жавабдарвал хивяй акъудун",
        "exif-contrast-1": "Жими",
        "exif-sharpness-1": "Жими",
-       "watchlistall2": "вири",
        "namespacesall": "вири",
        "monthsall": "вири",
        "confirm_purge_button": "ЭХь",
index b7592f5..b9d66ee 100644 (file)
        "uncategorizedtemplates": "Modeles sin categoria",
        "unusedcategories": "Categorias nonusada",
        "unusedimages": "Images nonusada",
-       "popularpages": "Pajes poplal",
        "wantedcategories": "Categorias desireda",
        "wantedpages": "Pajes desirada",
        "mostlinked": "Pajes la plu liada",
        "pager-newer-n": "{{PLURAL:$1|1 plu resente|$1 plu resentes}}",
        "pager-older-n": "{{PLURAL:$1|1 plu vea|$1 plu veas}}",
        "booksources": "Orijines de libros",
-       "booksources-go": "Vade",
        "specialloguserlabel": "Usor:",
        "speciallogtitlelabel": "Titulo:",
        "log": "Lista de atas",
        "watchthispage": "Oserva esta paje",
        "unwatch": "Nonoserva",
        "watchlist-details": "{{PLURAL:$1|$1 paje|$1 pajes}} osservada, sin pajes de discutes.",
-       "wlshowlast": "Mostra la $1 oras e $2 dias presedente $3",
+       "wlshowlast": "Mostra la $1 oras e $2 dias presedente",
        "watching": "Oserva...",
        "unwatching": "No oserva...",
        "created": "Creada",
        "metadata-collapse": "Asconde detalias estendeda",
        "metadata-fields": "Campos de EXIF metadata listada en esta mesaje va es inclui cuando la table de metadata es minimida.\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-exposuretime-format": "$1 sec. ($2)",
-       "watchlistall2": "tota",
        "namespacesall": "tota",
        "monthsall": "tota",
        "confirm_purge_button": "Oce",
index ee0185a..192cba7 100644 (file)
        "pager-older-n": "{{PLURAL:$1|ekyasooka bino 1|ebyasooka bino $1}}",
        "booksources": "Ebitabo ebijulizidwa",
        "booksources-search-legend": "Noonya ebitabo eby'okujuliza",
-       "booksources-go": "Nona",
        "specialloguserlabel": "Memba:",
        "log": "Empapula ez'ebyafaayo eby'emirimu egitaligimu",
        "allpages": "Empapula zonna",
        "watchthispage": "Goberera olupapula luno",
        "unwatch": "Lekerawo okugoberera olupapula luno",
        "watchlist-details": "Olina {{PLURAL:$1|olupapula $1|empapula $1}} z'ogoberera, nga tobalideko n'eza yogera-nange.",
-       "wlshowlast": "Ndaga ez'omu ssaawa $1 n'ennaku $2 eziyise oba $3",
+       "wlshowlast": "Ndaga ez'omu ssaawa $1 n'ennaku $2 eziyise oba",
        "watchlist-options": "Enteetakeeka y'endaga ya mpapula zengoberera",
        "watching": "Kikolebwako...",
        "unwatching": "Kikolebwako...",
        "metadata-expand": "Laba ebisingawo",
        "metadata-collapse": "Kisako ebimu, wasigalewo ebisinga obukulu",
        "metadata-fields": "Ebiddako bye ebikwata ku fayiro eno ebyagiwandikibwamu ekyagitegekera kompyuta ebijakusigala nga biragibwa.<br />\nEbirala biyinza butalabika okujjako ng'okiragidde.\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",
-       "watchlistall2": "Zonna",
        "namespacesall": "Gonna",
        "monthsall": "gyonna",
        "confirm_purge_button": "Kale",
index e09c114..13620dd 100644 (file)
        "passwordreset-emailsent-capture": "d'r Is 'ne herinneringse-mail versjik. Deze weurt hieónger getuind.",
        "passwordreset-emailerror-capture": "d'r Is 'ne herinneringse-mail aangemaak. Deze weurt hieónger getuind. 't Verzènje nao de gebroeker is mislök óm de volgende raeje: $1",
        "changeemail": "Veranger dien e-mailadres",
-       "changeemail-header": "Veranger 't e-mailadres van miene gebroekersnaam",
        "changeemail-text": "Völ dit form in óm dien e-mailadres te verangere. Doe mós dien wachwaord inveuren óm dees veranger te bevestige.",
        "changeemail-no-info": "Doe moos aangemeld zien ierdets doe dees pagina gebroeke kens.",
        "changeemail-oldemail": "Hujig mailadres:",
        "changeemail-newemail": "Nuuj mailadres:",
        "changeemail-none": "(gein)",
        "changeemail-submit": "Veranger e-mail",
-       "changeemail-cancel": "Braek aaf",
        "bold_sample": "Vètten teks",
        "bold_tip": "Vetten teks",
        "italic_sample": "Sjuunsen tèks",
        "mergehistory-same-destination": "De brónpagina en bestömmingspagina kinne neet dezelfde zien",
        "mergehistory-reason": "Reeje:",
        "mergelog": "Samevoegingslogbook",
-       "pagemerge-logentry": "voegde [[$1]] nao [[$2]] same (versies tot en met $3)",
        "revertmerge": "Samevoging ongedaon make",
        "mergelogpagetext": "Hiejonger zuut geer 'ne lies van recente samevoeginge van 'ne paginagesjiedenis nao 'ne angere.",
        "history-title": "$1: bewèrkingseuverzich",
        "searchrelated": "gerelateerd",
        "searchall": "alle",
        "showingresults": "Hieonger staon de <b>$1</b> {{PLURAL:$1|resultaat|resultaat}}, vanaaf #<b>$2</b>.",
-       "showingresultsheader": "{{PLURAL:$5|Resultaat '''$1''' van '''$3'''|Resultate '''$1 - $2''' van '''$3'''}} veur '''$4'''",
        "search-nonefound": "D'r zien gein resultate veur diene zeukopdrach.",
        "powersearch-legend": "Oetgebreid zeuke",
        "powersearch-ns": "Zeuke in naamruumdes:",
        "statistics": "Sjtattestieke",
        "statistics-header-pages": "Paginastatistieke",
        "statistics-header-edits": "Bewerkingsstatistieke",
-       "statistics-header-views": "Paginaweergavestatistieke",
        "statistics-header-users": "Stattestieke euver gebroekers",
        "statistics-header-hooks": "Anger gegaeves",
        "statistics-articles": "Inhoudelijke pagina's",
        "statistics-files": "Bestenj",
        "statistics-edits": "Paginabewerkinge sins t begin van {{SITENAME}}",
        "statistics-edits-average": "Gemiddeld aantal bewerkinge per pagina",
-       "statistics-views-total": "Totaal aantal weergegeve pagina's",
-       "statistics-views-total-desc": "'t Bekieke van neet-bestaonde pagina's en speciaal pagina's is neet inbegrepe",
-       "statistics-views-peredit": "Weergegeve pagina's per bewerking",
        "statistics-users": "Geregistreerde [[Special:ListUsers|gebroekers]]",
        "statistics-users-active": "Actieve gebroekers",
        "statistics-users-active-desc": "Gebroekers die in de aafgeloupe {{PLURAL:$1|daag|$1 daag}} 'ne hanjeling höbbe oetgevoerd",
-       "statistics-mostpopular": "Meisbekeke pazjena's",
        "doubleredirects": "Dobbel redirects",
        "doubleredirectstext": "Dees lies haet paazjes mit redireks die nao anger redireks gaon.\nOp eder raegel vings te de ierste redirectpazjena, de twiede redirectpazjena en de iesjte raegel van de twiede redirectpazjena. Meistes bevat dees litste de pazjena woe de iesjte redirect naotoe zouw mótte verwieze.\n<del>Dórchstreipinge</del> zègke det 't al gedaon is.",
        "double-redirect-fixed-move": "[[$1]] is verplaats en is noe 'n doorverwiezing nao [[$2]]",
        "uncategorizedtemplates": "Óngecategorizeerde sjablone",
        "unusedcategories": "Óngebroekde kategorieë",
        "unusedimages": "Ongebroekde aafbeildinge",
-       "popularpages": "Populaire artikels",
        "wantedcategories": "Gewunsjde categorieë",
        "wantedpages": "Gewunsjde pazjena's",
        "wantedpages-badtitle": "Verkeerde titel in 't rizzeltaot gezatj: $1",
        "querypage-disabled": "Dees speciaal pagina steit oet veur performanceredene.",
        "booksources": "Bookwinkele",
        "booksources-search-legend": "Zeuk informatie euver 'n book",
-       "booksources-go": "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:",
        "wlheader-enotif": "Doe wörs per e-mail gewaarsjuwd",
        "wlheader-showupdated": "Pazjena's die verangerd zeen saers doe ze veur 't lètste bekeeks sjtaon '''vet'''",
        "wlnote": "Hieónger {{PLURAL:$1|steit de lètste verangering|staon de lètste $1 verangeringe}} van {{PLURAL:$2|'t lètste oer|de lètste <b>$2</b> oer}} óp $3 óm $4.",
-       "wlshowlast": "Tuin lètste $1 ore $2 daag $3",
+       "wlshowlast": "Tuin lètste $1 ore $2 daag",
        "watchlist-options": "Opties veur volglies",
        "watching": "Bezig mit plaatse op de volglies...",
        "unwatching": "Oet de volglies aan 't haole...",
        "import": "Pazjena's importere",
        "importinterwiki": "Transwiki-import",
        "import-interwiki-text": "Selecteer 'ne wiki en pazjenanaam om te importere.\nVersie- en auteursgegaeves blieve hiej bie bewaard.\nAlle transwiki-importhanjelinge waere opgeslage in 't [[Special:Log/import|importlogbook]].",
-       "import-interwiki-source": "Bronwiki/pagina:",
        "import-interwiki-history": "Volledige gesjiedenis van deze pazjena ouch kopiëre",
        "import-interwiki-templates": "Alle sjablone opnaeme",
        "import-interwiki-submit": "Importere",
        "simpleantispam-label": "Antispemcontrole.\nVol dit veld '''NEET''' in!",
        "pageinfo-title": "Informatie euver \"$1\"",
        "pageinfo-header-edits": "Bewirk",
-       "pageinfo-views": "Aantal waergave",
        "pageinfo-watchers": "Aantal volgers",
        "pageinfo-edits": "Aantal bewèrkinge",
        "pageinfo-authors": "Aantal versjillende sjrievers",
        "exif-urgency-low": "Lieg ($1)",
        "exif-urgency-high": "Hoeg ($1)",
        "exif-urgency-other": "Door gebroeker gedefinieerde prioriteit ($1)",
-       "watchlistall2": "al",
        "namespacesall": "alle",
        "monthsall": "al",
        "confirmemail": "Bevèstig e-mailadres",
        "htmlform-selectorother-other": "Anges",
        "sqlite-has-fts": "Zeuk versie $1 mit óngersteuning veur \"full-text\"",
        "sqlite-no-fts": "Zeuk versie $1 zónger óngersteuning veur \"fulltext\"",
-       "logentry-delete-delete": "$1 haef de pagina $3 gewösj",
+       "logentry-delete-delete": "$1 {{GENDER:$1|haet}} de pagina $3 gewösj",
        "logentry-delete-restore": "$1 haet de pagina $3 trögkgezat",
        "logentry-delete-event": "$1 haet de zichbaarheid van {{PLURAL:$5|'ne logbookregel|$5 logbookregels}} van $3 gewiezig: $4",
        "logentry-delete-revision": "$1 haet de zichbaarheid van {{PLURAL:$5|'n versie|$5 versies}} van $3 gewiezig: $4",
        "logentry-newusers-create2": "$1 haet 'ne gebroeker $3 aangemaak",
        "logentry-newusers-autocreate": "De gebroeker $1 is autematis aangemaak",
        "rightsnone": "(gein)",
+       "revdelete-summary": "samevatting bewerke",
        "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:",
index c475327..3a1d771 100644 (file)
        "passwordreset-emailtitle": "Dettaggi account sciu {{SITENAME}}",
        "passwordreset-emailelement": "Nomme utente: $1\nPoula segretta temporannia: $2",
        "changeemail": "Cangia l'adresso e-mail",
-       "changeemail-header": "Cangia l'adresso e-mail de questa utensa",
        "changeemail-newemail": "Noeuvo adresso e-mail",
        "changeemail-none": "(nisciun)",
        "changeemail-password": "A to password pe {{SITENAME}}:",
        "changeemail-submit": "Cangia e-mail",
-       "changeemail-cancel": "Annulla",
        "resettokens-token-label": "$1 (oua o l'è: $2)",
        "bold_sample": "Grascetto",
        "bold_tip": "Grascetto",
        "search-suggest": "Fòscia ti voéivi: $1",
        "searchrelated": "corelæ",
        "searchall": "tùtti",
-       "showingresultsheader": "{{PLURAL:$5|Rizoltato '''$1''' di '''$3'''|Rizoltati '''$1 - $2''' de '''$3'''}} pe '''$4'''",
        "search-nonefound": "Mi n'ho atrovòu ninte",
        "preferences": "Preferençe",
        "mypreferences": "Preferençe",
        "booksources": "Fonte libraie",
        "booksources-search-legend": "Çerca e fonti",
        "booksources-isbn": "Codice ISBN:",
-       "booksources-go": "Vànni",
        "booksources-text": "De sotta unn-a lista de ingançi a ätri sciti che vendan neuvi e vegi libbri, e che peuvre avei informaçioin in sci libbri che ti te çerchi",
        "specialloguserlabel": "Ûtente:",
        "speciallogtitlelabel": "Tittolo:",
        "watchthispage": "Vigilâ 'sta paggina",
        "unwatch": "Leva da sott'oservaçion",
        "watchlist-details": "A lista d'oservaçión speçiâle a contegne {{PLURAL:$1|ina pàgina (co-a seu pàgina de discusción)|$1 de pàgine (co-e so pàgine de discusción)}}.",
-       "wlshowlast": "Famme vedde e ûrtime $1 ôe $2 giorni $3",
+       "wlshowlast": "Famme vedde e ûrtime $1 ôe $2 giorni",
        "watchlist-options": "Inpostaçioìn di oservæ speciâli",
        "watching": "Inti osservæ speçiâli...",
        "unwatching": "Scassâ da-i osservæ speçiâli",
        "exif-copyright": "Diritti d'autô de",
        "exif-filesource": "Reixe do papê",
        "exif-languagecode": "Lengua",
-       "watchlistall2": "Tùtti",
        "namespacesall": "Tùtti",
        "monthsall": "tutti",
        "imgmultipageprev": "← Pagina de primma",
index 727743d..9feb651 100644 (file)
        "search-interwiki-more": " (vel)",
        "searchrelated": "sidtõd",
        "searchall": "tikkiž",
-       "showingresultsheader": "{{PLURAL:$5|'''$1''' '''$3'''-st rezultātõst|Rezultātõd '''$1–$2''' '''$3'''-st}} kizzimizõn '''$4'''",
        "search-nonefound": "Vȯtšimizõn vȯtšimi äb lieudtõd vastūkst.",
        "powersearch-legend": " Juo akurāt vȯtšimi",
        "powersearch-ns": "Vȯtšimi nim-rūimšti:",
        "pager-older-n": "{{PLURAL:$1|jo vaņīmi 1|jo vaņīmizt $1}}",
        "booksources": "Rōntõ vȯtšimi",
        "booksources-search-legend": "Rōntõ vȯtšimi",
-       "booksources-go": "Li",
        "log": "Logūd",
        "allpages": "Amād lēḑõd",
        "prevpage": "Jedmõli lēḑ ($1)",
        "watchthispage": "Vaņ iļ siedā līedpūoltõ",
        "unwatch": "Lopta iļ-vaņtlimi",
        "watchlist-details": " {{PLURAL:$1|$1 lēḑ|$1 līedtõ}} ātõ iļ-vaņtlimiz nimkēras,  bäz luggõmõt nõvpidāmiz-līedidi.",
-       "wlshowlast": "Nägţ perīzt $1 stuņdõ $2 päuvõ $3",
+       "wlshowlast": "Nägţ perīzt $1 stuņdõ $2 päuvõ",
        "watchlist-options": "Iļ-vaņtlimiz nimkēra pie-lēmizt",
        "watching": "Vaņtlimi iļ sīe...",
        "unwatching": "Iļ-vaņtlimiz loptimi...",
        "metadata-expand": "Nägţ mūḑi jo akurātidi ažḑi",
        "metadata-collapse": "Vaŗ jarā juo akurāt ažād",
        "metadata-fields": "Täs lugdõd fail meta-tīetõkst vellidi nägţõbõd bīlda seļţimiz līeds meta-tīetõkst vaņtlimiz āigal. Munt tīetõkst ātõ bäz kītõmõt jarā vaŗtõd. \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",
-       "watchlistall2": "tikkiž",
        "namespacesall": "tikkiž",
        "monthsall": "tikkiž",
        "watchlisttools-view": "Nägţ sīe mõitõkši",
index 80bfa6b..264bb81 100644 (file)
        "passwordreset-emailsent": "Gh'è stat mandàt vià 'na e-mail de redefinisiù de la password.",
        "passwordreset-emailsent-capture": "Gh'è stat mandàt vià chèsta e-mail de redefinisiù de la password:",
        "changeemail": "Càmbia l'indirìs e-mail",
-       "changeemail-header": "Càmbia l'indirìs e-mail de l'ütènsa",
        "changeemail-none": "(nisü)",
        "changeemail-password": "La password sö {{SITENAME}}:",
        "changeemail-submit": "Càmbia l'indirìs e-mail",
-       "changeemail-cancel": "Scancèla l'operasiù",
        "changeemail-throttled": "Te g'hét fat tròp tacc tentatìf de autenticàt, adès te g'hét de spetà $1 per püdì turnà a pröà.",
        "resettokens": "Redefenés i tokens",
        "resettokens-no-tokens": "Gh'è nisü token de redefenéser.",
        "revdelete-edit-reasonlist": "Mudifega i mutiv del scancelament",
        "mergehistory-submit": "Önés le versiù",
        "mergehistory-reason": "Mutìf:",
-       "pagemerge-logentry": "el g'ha ünìt [[$1]] a [[$2]] (reviziù 'nfìna al $3)",
        "revertmerge": "Scancela i ünión",
        "history-title": "Crunulugia di mudifegh de \"$1\"",
        "difference-title-multipage": "Diferènsa 'ntra le pàgine \"$1\" e \"$2\"",
        "unusedtemplates": "Templat mia druvaa",
        "unusedtemplateswlh": "alter culegament",
        "randompage": "Una pagina a cas",
-       "randomincategory-selectcategory-submit": "Và",
        "randomredirect": "Un redirect a cas",
        "statistics": "Statistich",
        "statistics-header-pages": "Statistegh di paginn",
        "statistics-header-edits": "Statistegh di mudifegh",
-       "statistics-header-views": "Statistegh di visüalizazión",
        "statistics-header-users": "Statistegh di druvadur",
        "statistics-header-hooks": "Alter statistegh",
        "statistics-articles": "Paginn de cuntegnüü",
        "uncategorizedtemplates": "Mudel ch'i gh'hann mía de categuria.",
        "unusedcategories": "Categurij mía druvaa",
        "unusedimages": "Imagin mia druvaa",
-       "popularpages": "Pàgine éste piö de spès",
        "wantedcategories": "Categurij ricercaa",
        "wantedpages": "Pagin ricercaa",
        "mostlinked": "Püssè ligaa a pagin",
        "pager-older-n": "{{PLURAL:$1|1|$1}} püssee vegg",
        "booksources": "Surgent per i lìber",
        "booksources-search-legend": "Cerca i fónt di liber",
-       "booksources-go": "Va",
        "specialloguserlabel": "Ütent:",
        "speciallogtitlelabel": "Asiù fàda sö:",
        "log": "Register",
        "unwatch": "Tegn pü d'ögg",
        "unwatchthispage": "Desmèt de tègner d'öcc",
        "watchlist-details": "{{PLURAL:$1|$1 pagina|$1 paginn}} tegnüü sot ögg, fö che i paginn de discüssión.",
-       "wlshowlast": "Fa vidé i ültim $1 ur $2 dì $3",
+       "wlshowlast": "Fa vidé i ültim $1 ur $2 dì",
        "watchlist-options": "Upzión lista d'ussevazión",
        "watching": "Giuntà ai pagin da ten d'ögg...",
        "unwatching": "Eliminà dai pagin da ten d'ögg...",
        "exif-stripoffsets": "Puzisiù dei dati de la foto",
        "exif-rowsperstrip": "Nömer de rìghe per fàsa",
        "exif-imagedescription": "Tìtol de la foto",
-       "watchlistall2": "tücc",
        "namespacesall": "tücc",
        "monthsall": "tücc",
        "confirmemail": "Cunferma l<nowiki>'</nowiki>''e-mail''",
index 5e8fda1..7c0baaa 100644 (file)
        "passwordreset-username": "Nkómbó ya mosáleli:",
        "passwordreset-email": "Adɛlɛ́sɛ-ímɛ́lɛ:",
        "changeemail-none": "(mɔ́kɔ́ tɛ́)",
-       "changeemail-cancel": "Kozóngela",
        "bold_sample": "Nkomá ya mbinga",
        "bold_tip": "Nkomá ya mbinga",
        "italic_sample": "Nkomá ya kotɛ́ngama",
        "newpages-username": "Nkómbó ya mosáleli:",
        "move": "Kobóngola nkómbó",
        "movethispage": "Kobóngola nkómbó ya lonkásá loye",
-       "booksources-go": "Kɛndɛ́",
        "log": "Bapasɔ́",
        "allpages": "Nkásá ínsɔ",
        "nextpage": "Lonkásá ya nsima ($1)",
        "unwatch": "Kolanda tɛ́",
        "watchlist-details": "{{PLURAL:$1|Lonkásá $1 elandámí|Nkásá $1 bilandámí}}, longola nkásá ya ntembe.",
        "wlnote": "Áwa o nsé {{PLURAL:$1|ezalí mbóngwana ya nsúka|izalí mbóngwana '''$1''' ya nsúka}} o {{PLURAL:$2|ngonga|ngonga '''$2'''}} ya nsúka.",
-       "wlshowlast": "Komɔ́nisa ngónga $1 ya nsúka, mikɔlɔ $2 mya nsúka tǒ $3",
+       "wlshowlast": "Komɔ́nisa ngónga $1 ya nsúka, mikɔlɔ $2 mya nsúka tǒ",
        "watching": "Kolanda...",
        "unwatching": "Kolanda tɛ́...",
        "created": "ekomákí",
        "ilsubmit": "Boluki",
        "exif-artist": "Mokeli",
        "exif-subjectdistancerange-2": "kokanga view",
-       "watchlistall2": "nyɔ́nsɔ",
        "namespacesall": "Nyɔ́nsɔ",
        "monthsall": "nyɔ́nsɔ",
        "confirm_purge_button": "Nandimi",
index dfffb14..b45d90c 100644 (file)
        "move": "ຍ້າຍ",
        "movethispage": "ຍ້າຍໜ້ານີ້",
        "booksources": "ປຶ້ມອ້າງອີງ",
-       "booksources-go": "ໄປ",
        "log": "ບັນທຶກ",
        "all-logs-page": "ທຸກໆຂໍ້ມູນບັນທຶກການນຳໃຊ້",
        "logempty": "ຍັງບໍ່ພົບເນື້ອໃນບັນທຶກ.",
        "watchthispage": "ຕິດຕາມໜ້ານີ້",
        "unwatch": "ເຊົາຕິດຕາມ",
        "wlheader-showupdated": "ບັນດາ ໜ້າ ທີ່ມີການປ່ຽນແປງ ຫຼັງຈາກທີ່ທ່ານ ເຂົ້າຊົມຫຼ້າສຸດ ຈະຖືກສະແດງເປັນ ໂຕໜັງສື  '''ເຂັ້ມ'''",
-       "wlshowlast": "ສະແດງ $1 ຊົ່ວໂມງຫຼ້າສຸດ $2 ມື້ຫຼ້າສຸດ $3",
+       "wlshowlast": "ສະແດງ $1 ຊົ່ວໂມງຫຼ້າສຸດ $2 ມື້ຫຼ້າສຸດ",
        "watching": "ພວມຕິດຕາມ...",
        "unwatching": "ພວມເຊົາຕິດຕາມ...",
        "enotif_lastvisited": "ເບິ່ງ $1 ເພື່ອ ທຸກໆການປ່ຽນແປງ ຕັ້ງແຕ່ເທື່ອສຸດທ້າຍ ທີ່ ທ່ານເຂົ້າຫາ.",
        "exif-imagedescription": "ຫົວຂໍ້ຮູບ",
        "exif-artist": "ຜູ້ຂຽນ",
        "exif-copyright": "ເຈົ້າຂອງລິຂະສິດ",
-       "watchlistall2": "ທັງໝົດ",
        "namespacesall": "ທັງໝົດ",
        "monthsall": "ທັງໝົດ",
        "confirmemail": "ຢືນຢັນ ທີ່ຢູ່ ອີເມລ",
index 7f03841..f511adc 100644 (file)
        "uncategorizedtemplates": "Yegani coni kattegori",
        "unusedcategories": "Kattegori kopu",
        "unusedimages": "Imegi kopu",
-       "popularpages": "Petulo populali",
        "wantedcategories": "Ni sa kattegorina con ling'ki",
        "wantedpages": "Ni sa petulo con ling'ki",
        "mostlinked": "Petulo con plus ling'ki di a",
        "move": "Nyanganyisize",
        "movethispage": "Nyanganyisize bye petulo",
        "booksources": "Desusorsi",
-       "booksources-go": "Afi",
        "specialloguserlabel": "Sebelu:",
        "speciallogtitlelabel": "Sebu:",
        "log": "Desuni",
        "unwatchthispage": "Ngambu kentezi",
        "notanarticle": "Ni di petulo infomelo",
        "watchlist-details": "{{PLURAL:$1|$1 petulo|$1 petulo}} sa kentezi e no bulelezi.",
-       "wlshowlast": "Kamukile lapu-lila $1 holani $2 dia $3",
+       "wlshowlast": "Kamukile lapu-lila $1 holani $2 dia",
        "watching": "Kentezi...",
        "unwatching": "Dikentezi...",
        "enotif_impersonal_salutation": "{{SITENAME}} sebelu",
        "metadata-collapse": "Cwankekile petulo tabu",
        "metadata-fields": "EXIF metadata fields mukoloko kwa mulumiwa sa ike kwa imegipetulo ka metadata tablu sa tibekile. Xetewi sa cwankekile auto.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagedescription": "Sebu di imegi",
-       "watchlistall2": "xeti",
        "namespacesall": "xeti",
        "monthsall": "xeti",
        "confirm_purge_button": "Afi",
index f665292..576fedb 100644 (file)
        "index-category": "بلگيا سيائه دار",
        "noindex-category": "بلگيا بی سيائه",
        "broken-file-category": "بلگیایی که هوم پیوند فایلیا اشکسه دارن",
+       "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "دباره",
        "article": "محتوا بلگه",
        "newwindow": "(نيمدری  تازه وا کو)",
        "otherlanguages": "د زونيا هنی",
        "redirectedfrom": "(ورگشتن د$1)",
        "redirectpagesub": "بلگه دوباره ورگشتن",
+       "redirectto": "واگردونی سی:",
        "lastmodifiedat": "ای بلگه تازه ايا وضع آلشت بيه د $1, د $2.",
        "viewcount": "ای بلگه قاول دسترسی بيه {{PLURAL:$1|once|$1 times}}.",
        "protectedpage": "بلگه حفاظت بيه",
        "versionrequired": "یه نسقه د نیازمنیا ویکی رسانه\n$1",
        "versionrequiredtext": "نسقه $1 ویکی مدیا سی وه کار بستن د ای بلگه لازم هئی .\nوه نه بوینیت [[ویجه:نسقه|نسقه بلگه]].",
        "ok": "خوئه",
+       "pagetitle": "$1 - {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
+       "backlinksubtitle": "← $1",
        "retrievedfrom": "بازيافته د\"$1\"",
        "youhavenewmessages": "شما داريت $1($2)",
        "youhavenewmessagesfromusers": "{{جمی:$4|شما }} $1 د {{جمی:$3|کارور هنی|$3 کاروریا}}داریتو($2).",
        "site-atom-feed": "خور حون Atom سی $1",
        "page-rss-feed": "خورحو RSS سی «$1»",
        "page-atom-feed": "خور حون Atom سی $1",
+       "feed-atom": "اتم",
+       "feed-rss": "آر اس اس",
        "red-link-title": "$1(بلگه وجود ناره)",
        "sort-descending": "كم بيئن منظم",
        "sort-ascending": "زياد بيئن منظم",
        "nocookiesnew": "حساو کاروری راس بی،اما شما وامئن نیامایئته.{{نوم مالگه}} د کوکیا سی اومائن د سیستم کاروریا استفاده می که.کوکیا شما د کار افتائه.لطفن وا کارشو بونیت، اوسه وا نوم کاروری تازه و پسورد هنی بیایت وا مئن.",
        "nocookieslogin": "{{نوم مالگه}} د کوکیا سی وامئن اومائن کاروریا استفاده می که. کوکیا شما د کار افتائه.\nلطف بکید د کارشو بونیت و دوواره تلاش بکید.",
        "nocookiesfornew": "حساو کاروری راس نبیه، سی یه ایما نتونیم سرچشمه ونه مئکم بکیم.\nمطمئن بوئیت که کوکیا فعال بینه، ای بلگه نه د نو سوار بکید و د نو تلاش بکید.",
+       "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "شما یه گل نوم کاروری خو ناریت",
        "loginsuccesstitle": "اومائن د سيستم موفق بی",
        "loginsuccess": "شما ایسه وارد بیته {{SITENAME}} د دعنوان \"$1\".'",
        "createaccount-text": "یه نفر وا تیرنشون انجونامه تو یه گل حساو راس کرده{{نوم دیارگه}} ($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ار شما وه نه نهااماییه بکیت، یه سی هوم نسبت دئن وه کاریار   سی کاریاش استفاده بوئه.",
        "user-mail-no-body": "سی کل کردن ایمیل وا مینونه حالی یا کؤچک بیئن سی دلیل غیر علقمنی تلاش بکید.",
        "changepassword": "پاسورد نه آلشت بكيت",
        "resetpass_announce": "سی تموم کردن وا مین اومائن، شما باید یه گل پاسورد هنی وارد بکیتو.",
+       "resetpass_text": "<!-- یه گل نیسسه ایچه اضاف بکیت -->",
        "resetpass_header": "پاسورد حساوتونه آلشت بکید",
        "oldpassword": "پاسورد قدیمی:",
        "newpassword": "پاسورد تازه:",
        "passwordreset-emailsent-capture": "پاسورد تازه تو د ایمیلتو که د هار نشو دئه بیه کل بیه",
        "passwordreset-emailerror-capture": "رازینه گواردن د انجومانامه د نو زنه کننه راس بیه، و وه د هار دیاری می که، اما کل بیین وه د{{جنس:$2|کاریار}} شکست حرده:$1",
        "changeemail": "ایمیل تو نه آلشت بکید",
-       "changeemail-header": "ایمیل حساوتونه آلشت بکید",
        "changeemail-text": "ای نوم بلگه نه سی آلشت دئن تیرنشون انجومانامه تو پر بکیت. شما سی پشت راس کردن ای آلشت واس رازینه گواردن خوتونه وارد بکیت.",
        "changeemail-no-info": "شما با بیایت د سیستم تا د ای بلگه دسرسی داشتویت",
        "changeemail-oldemail": "نشونی ایمیل تازه باو:",
        "changeemail-none": "(هيش كوم)",
        "changeemail-password": "شما {{SITENAME}} پاسورد:",
        "changeemail-submit": "آلشت کردن ایمیل",
-       "changeemail-cancel": "انجوم شیوسن",
        "changeemail-throttled": "شما ایسنی فره سی وامین اومائن تلاش کردیته.\n$1 لطفن سی تلاش هنی صبر بکید.",
        "resettokens": "تازه کردن نشونه یا",
        "resettokens-text": "شما سی صلا دئن دسرسی وه رسینه یا خصوصی که ها د حساو ایچنی تو می تونیت دیارگریا نه د نو زنه بکیت.\n\nشما اوسنی واس ای کار بکیت که رسینه یا شما سی یه کسی تر بئر بیه یا د حساو شما چل بیه.",
        "headline_tip": "قدم 2 خط سر ون",
        "nowiki_sample": "د ایچه یه گل متن بی شلک وارد بکید",
        "nowiki_tip": "شلک ویکی نه ندید بگر",
+       "image_sample": "Example.jpg",
        "image_tip": "جانیا محاط بيه",
+       "media_sample": "Example.ogg",
        "media_tip": "فایل هوم پیوند",
        "sig_tip": "امضا شما و برچسو وخت",
        "hr_tip": "خط افق ونه(سوا سوا دش استفاده کو)",
        "showpreview": "پيش نمائش نشون بيئه",
        "showdiff": "آلشتيانه نشون بيئه",
        "blankarticle": "<strong>زنئار:</strong> بلگه ای که شما دروس کردیته حالیه.\nار شما د نو ری \"{{int:savearticle}}\" بپورنیت, بلگه وه شکل که هیچ مینونه ای دش نبا دروس بوئه.",
-       "anoneditwarning": "زنهار شما وامین نیومایته.\nنشونی آی پی تو د ویرگار ویرایشت ای بلگه ضفط بوئه",
+       "anoneditwarning": "<strong>زئنار:</strong> شما هنی نیوماته وامین. تیرنشون آی پی شما هر گاتی که آلشتی راس بکیت سی کل خلک دیاره. ار <strong>[$1 روئیت وامین]</strong> یا <strong>[$2 یه گل حساو کاریاری راس بکیت]</strong>، ویرایشتیا شما وه نوم کاریاری خوتون دیاری می که، و وا چیا بیتر هنی.",
        "anonpreviewwarning": "<em>شما نیومائته وامین. تیرنشون آی پی شما د ویرگار ویرایشت ای بلگه اماییه بوئه.</em>",
        "missingsummary": "<strong>د ویر ونا:</strong> شما هنی یه گل چکسته ویرایشتی نها اماییه نکردیته.\nار شما د نو د ری\"{{int:savearticle}}\" بپورنیت, ویرایشت شما حالی اماییه بوئه.",
        "missingcommenttext": "لطفن د ایچه نظر بیئتو",
        "template-protected": "(حمايت بيه)",
        "template-semiprotected": "(نيم-حفاظت بيه)",
        "hiddencategories": "ای بلگه يه اندوم د{{PLURAL:$1|1 hidden category|$1 hidden categories}}: هئ",
+       "edittools-upload": "-",
        "nocreatetext": "{{نوم مالگه}} سی راس کردن بلگه یا تازه محدود بیه.\nشما تونید روئیت وادما و بلگه ای که هئیش ویرایشت بکید ، یا [[ویجه:وامین اومائن کاریار|بیایت وامین یا یه گل حساو بسازیت]].",
        "nocreate-loggedin": "شما حق ناریت  که بلگه یا تازه نه راس بکید.",
        "sectioneditnotsupported-title": "ویرایشت بخش حمایت نبوئه",
        "mergehistory-comment": " [[:$1]]وا[[:$2]] یکی بیه:$3",
        "mergehistory-same-destination": "سرچشمه و بلگه یا مقصد نبوئه یکی بوئن",
        "mergehistory-reason": "دليل:",
+       "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "سریک سازی پهرستنومه",
-       "pagemerge-logentry": " [[$1]] وا [[$2]] سریک سازی بی (وانیریا که د $3 فره تر هئن)",
        "revertmerge": "بی لوئه",
        "mergelogpagetext": "شما د هار نوم گه آخرین چیا وه یک شیوسن ویرگار یه بلگه نه د بلگه تر میئنیت.",
        "history-title": "دوواره دیئن ویرگار$1",
        "search-result-category-size": "{{جمی:$1|1 اندوم|$1 اندومیا}} ({{جمی:$2|1 زیردسه|$2 زیردسه یا}}, {{جمی:$3|1 جانیا|$3 جانیایا}}",
        "search-redirect": "(ورگشتن $1)",
        "search-section": "(بشق $1)",
+       "search-category": "(دسه $1)",
        "search-file-match": "(یکی کردن مینونه جانیا)",
        "search-suggest": "منظورت يه بی:$1",
        "search-interwiki-caption": "پروجه یا خوئر",
        "searchall": "همه",
        "showingresults": "نمائشت بیشترونه {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} د هار، شرو د شماره'''$2'''.",
        "showingresultsinrange": "نمائشت بیشترونه {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} د هار، شرو د شماره'''$2''' تا شماره '''$3'''.",
-       "showingresultsheader": "{{PLURAL:$5|نتيجه '''$1''' د'''$3'''|نتيجه يا '''$1 - $2''' د'''$3'''}} سيli'''$4'''",
+       "search-showingresults": "{{PLURAL:$4|نتیجه یا<strong>$1</strong> د <strong>$3</strong>|نتیجه یا<strong>$1 - $2</strong د <strong>$3</strong>}}",
        "search-nonefound": "هیژ نتیجه یی سی پی جست تو مطاوقت نکرده",
        "powersearch-legend": "پی جوری پیشبرده",
        "powersearch-ns": "نوم جايا نوم ديار بگرد:",
        "youremail": "ايميل:",
        "username": "{{جنس:$1|نوم کاروری}}:",
        "prefs-memberingroups": "{{جنس:$2|اندوم}}  {{جمی:$1|گرویا|گرویا}}:",
+       "prefs-memberingroups-type": "$1",
        "prefs-registration": "موقع ثوت نام:",
+       "prefs-registration-date-time": "$1",
        "yourrealname": "نوم راستكی:",
        "yourlanguage": "زون:",
        "yourvariant": "محتوا آلشتگر زون:",
        "yournick": "امضا تازه:",
        "prefs-help-signature": "ویر و باوریا نیسسه بیه د بلگه چک چنه باید وا«<nowiki>~~~~</nowiki>» امضا بان؛ ای نشون وه شکل خودانجومی وه امضا شما و مؤر ویرگار تبدیل بوئه.",
        "badsig": "امضا خؤم بی اعتوار.\nسردیسیا اچ تی ام ال نه وارسی بکیت.",
+       "badsiglength": "امضا شما فره گپه.\nطیل امضا باید کمتر  د $1 {{PLURAL:$1|نیسه}} بوئه.",
        "yourgender": "شما بیشتر میهایت که چه جوری گوته بوئه؟",
        "gender-unknown": "مه میهام چی یی نموئم",
        "gender-male": "وه(پیا) بلگه یا ویکی نه ویرایشت می که",
        "gender-female": "وه(زئنه)بلگه یا ویکی نه ویرایشت می که",
+       "prefs-help-gender": "انجوم دئن ای میزونکاری دل به هاییه.\nنرم افزار سی هشاره درست وه جنسیت و گوتن شما سی کسونا تر د شکل درست وه کار بسن یه گل دستور زون یه نه وه کار می بنه.\nای دونسمنیا سی کل خلک دیارن.",
        "email": "پیومک برقی",
+       "prefs-help-realname": "نوم راستکی دل به حائه.\nار شما ونه وارد بکیت د گات واگردونی وه آرنگیاتو و نسوت دئن ونو وه خوتو د نوم راستکی استفاده بوئه.",
        "prefs-help-email": "نشونی ایمیل اختیاری هئ.اما سی بازجست پاسورد دش نیاز بوئه.شما باید پاسوردتونه د ویر بوریت",
        "prefs-help-email-others": "شما می تونید سی پیوند گرتن تو وا نهایین ایمیل مئن یه هوم پیوند د بلگه کاروری یا بلگه چک چنه تو انتخاو بکید.\nنشونی ایمیلتو وختی که کاروریا هنی وا تو پیوند می گرن دیار نی.",
        "prefs-help-email-required": "نشونی ایمیل لازم هئ.",
        "prefs-displaywatchlist": "گزینه یا نه نشو بیه",
        "prefs-tokenwatchlist": "نشو",
        "prefs-diffs": "فرخیا",
+       "prefs-help-prefershttps": "کارگرایی ای ترجیح نها وامین اومائن نهایی شما وه کار گرته بوئه.",
+       "prefswarning-warning": "آلشتیا شما ری ترجیحاتتو هنی اماییه نبیه.\nار ای بلگه نه بی یه که ری \"$1\" بپورنیت ول بکیت ترجیحیا شما اماییه نبوئن.",
+       "prefs-tabs-navigation-hint": "نکته: شما می تونید د کلیتیا لادیار کن چپ و راست نه سی رئتن مین تبیا که هان د نوم گه تبیا وه کار بونیت.",
        "email-address-validity-valid": "نشونی ایمیل دیار بیه خوئه",
        "email-address-validity-invalid": "یه گل نشونی ایمیل خو وارد بکید",
        "userrights": "حقوق دیوونداری کاریار",
        "userrights-lookup-user": "دسه یا کاروری نه دیوون داری بکیت",
        "userrights-user-editname": "نوم كاروری ته وارد كو",
        "editusergroup": "ویرایشت گرویا کاروری",
+       "editinguser": "آلشت دئن حقوق کاریاری کاریار'''[[کاریار:$1|$1]]''' $2",
        "userrights-editusergroup": "ویرایشت گرویا کاروری",
        "saveusergroups": "اماییه کردن گرویا کاریاری",
        "userrights-groupsmember": "اندوم:",
+       "userrights-groupsmember-auto": "اندوم ضمنی:",
+       "userrights-groupsmember-type": "$1",
+       "userrights-groups-help": "شما می تونیت دسه یای که ای کاریار ها دشو آلشت بئیتو:\n* جعوه نشودار وه ای مئنیه که کاریار ها د او دسه.\n* جعوه بی نشون وه ای مئنیه که کاریار د او دسه نئ.\n* نشون* د ای مئنیه که ار شما او دسه نه اضاف بکیتو د نهاتر نموئه ؤردارینش یا برعسگش.",
        "userrights-reason": "دليل:",
        "userrights-no-interwiki": "شما سی ویرایشت حقوق کارور د ویکی یا هنی دسرسی ناریت.",
        "userrights-nodatabase": "پاگا دونسمنی $1 یا نیئش یا د ولاتنشین نئ.",
+       "userrights-nologin": "شما باید وا یه گل حساو کاریاری دیووندار [[Special:UserLogin|روئیت وامین ]] تا تونستوییت حقوق کاریاری کاریار نه گماشته کاری بکیت.",
        "userrights-notallowed": "شما سی اضاف کردن  حقوق کارور یا ورداشتنش دسرسی ناریت.",
        "userrights-changeable-col": "گرویایی که شما تونیت ویرایشت بکید",
        "userrights-unchangeable-col": "گرویایی که شما نتونیت ویرایشت بکید",
+       "userrights-irreversible-marker": "$1*",
+       "userrights-conflict": "تعارض دسرسیا کاریاری! لطف بکیت یه گل وارسی انجوم بئیت و آلشتانه پشت راس بکیت.",
        "userrights-removed-self": "شما د خوئی حقوق خوتونه ؤرداشتیته، چی یه که مثلا شما تر نمی تونیت وه ای بلگه دسرسی داشتویت.",
        "group": "گرو",
        "group-user": "کاروریا",
        "right-movefile": "فایلیا نه جا وه جا کو",
        "right-suppressredirect": "اوسه که بلگه یا د بین رئتنه هیچ واگردونی سی بلگه یا سرچشمه دروس نبیه",
        "right-upload": "سوار کردن فايلا",
+       "right-reupload": "سوارکرد هنی جانیایی که دماتر بئیشه",
+       "right-reupload-own": "سوارکرد هنی جانیایی که د دماتر وه دس همو کاریار سوارکرد بیه.",
+       "right-reupload-shared": "باطل‌کردن ولات نشینی جانیایا هومبئر بیه",
        "right-upload_by_url": "سوار کرد فایلیا د یو آر ال",
+       "right-purge": "پاک کردن مینجاگر بلگه بی یه که بلگه پشت راس کردن دیاری بکه",
+       "right-autoconfirmed": "د محدودیتیا سرعت آی پی-پایه کارگرایی ناره",
+       "right-bot": "باور بیه چی یه گل پردازشت خودانجوم",
+       "right-nominornewtalk": "حیرده ویرایشت بلگه یا چک چنه وه شکلی که باعث گوتن پیغوم تازه نبوئه.",
+       "right-apihighlimits": "سخم بالاتر د وه کار بسن API",
        "right-writeapi": "د نیسنن ای پی آی استفاده بکید",
        "right-delete": "بلگیا نه پاکسا کو",
        "right-bigdelete": "بلگه یایی که ویرگار گپی دارن پاکسا بکیت",
+       "right-deletelogentry": "پاکسا کردن و ناپاکسا کردن داده واریایی ویجه ای د پهرستنومه",
+       "right-deleterevision": "پاکساکردن و ناپاکساکردن وانئریا ویجه ای د بلگه یا",
+       "right-deletedhistory": "دیئن چیا پاکسا بیه د ویرگار، بی یه که نیسسه ونونه بؤنیت.",
+       "right-deletedtext": "دیئن نیسسه پاکسا بیه و آلشتیایی که هان مینجا وانئریا پاکسا بیه",
        "right-browsearchive": "بلگه یا پاک بیه نه پی جوری کو",
        "right-undelete": "ای بلگه نه حذف نكيد",
+       "right-suppressrevision": "دیئن و زنه کردن وانئریایی بلگه یایی که د دس کاریاریا نهو بینه",
        "right-viewsuppressed": "دیئن وانئریایی که د تیه هر کاریاری قام بیه",
        "right-suppressionlog": "دیئن پهرستنومه یا خصوصی",
        "right-block": "کاریاریا هنی د ویرایشت منع بوئن",
        "right-blockemail": "کاریار نه د کل کردن انجومانامه منع کو",
        "right-hideuser": "قلف کردن یه گل نوم کاریاری،قام کردن وه د ور تیه کل خلک",
+       "right-ipblock-exempt": "کارگرایی نگرتن د قطع دسرسیا آی پی، خودانجوم یا فاصله دار",
+       "right-proxyunbannable": "کارگرایی نگرتن د قطع دسرسی خودکار پروکسیا",
        "right-unblockself": "خوشه قلف نکید",
+       "right-protect": "آلشت دئن انازه پر و پیم کردن بلگه یا و ویرایشت بلگه یا پر و پیم بیه تافی",
+       "right-editprotected": "ویرایشت بلگه یا پر و پیم بیه چی «{{int:protect-level-sysop}}»",
+       "right-editsemiprotected": "ویرایشت بلگه یا پر و پیم بیه چی «{{int:protect-level-autoconfirmed}}»",
        "right-editinterface": "راوط کارور نه ویرایشت کو",
        "right-editusercssjs": "فایلیا جاوا اسکریپت و سی اس اس کاروریا هنی نه ویرایشت کو",
        "right-editusercss": "فایلیا سی اس اس کاروریا هنی نه ویرایشت کو",
        "right-editmyusercss": "فایلیا سی اس اس کارور خوتو نه ویرایشت کو",
        "right-editmyuserjs": "فایلیا جاوا اسکریپت کارور خوتو نه ویرایشت کو",
        "right-viewmywatchlist": "سیل برگ خوتونه بوینیت",
+       "right-editmywatchlist": "سیل برگ خوتونه ویرایشت بکیت. د ویرتو با که پاره ای د انجومکاریا بی دسرسی ئم می تونن ای بلگه یا نه اضافه بکن.",
        "right-viewmyprivateinfo": "دونسمنیا شصقی خوتونه بوینیت(چی نشونی ایمیل،نوم راستکی)",
        "right-editmyprivateinfo": "دونسمنیا شصقی خوتونه ویرایشت بکید(چی نشونی ایمیل،نوم راستکی)",
        "right-editmyoptions": "اولویتیا تونه ویرایشت بکیت",
+       "right-rollback": "چواشه کردن سریع ویرایشتیا آخری کاریاری که یه بلگه ویجه نه ویرایشت دئه",
+       "right-markbotedits": "نشودار کردن ویرایشتیا چواشه بیه چی ویرایشتیا یه گل بات",
+       "right-noratelimit": "کارگرا نبیئن د محدودیت سرعت",
        "right-import": "بلگه یا نه د ویکی هنی وارد بکید",
        "right-importupload": "دئن بلگه یا د یه گل جانیا سوار بیه",
+       "right-patrol": "سردیاری کردن د ویرایشتیا کسونا تر",
+       "right-autopatrol": "سردیاری کردن خودانجوم د ویرایشتیا خوش",
+       "right-patrolmarks": "دیئن سردیس سردیاری کردن د آلشتیا ایسنی",
        "right-unwatchedpages": "دیئن نوم گه بلگه یا دیئه نبیه",
+       "right-mergehistory": "وه یک شیوسن ویرگار ای بلگه",
        "right-userrights": "حقوق همه کاروریانه ویرایشت بکید",
        "right-userrights-interwiki": "حقوق همه کاروریانه د ویکی یا هنی ویرایشت بکید",
        "right-siteadmin": "پاگا دونسمنی نه قلف بکید یا نکید",
+       "right-override-export-depth": "وه در دئن بلگه یایی که بلگه یا هوم پیوند بیه تا پی یا 5 ها دشو",
        "right-sendemail": "سی کاروریا هنی ایمیل کل بکید",
        "right-passwordreset": "پاسورد ایمیلیا د نو دئه بیه نه بوینیت",
        "newuserlogpage": "راس بیه وا کارور",
        "action-move-categorypages": "جا وه جا کردن دسه بلگه یا",
        "action-movefile": "ای فایل جا وه جا بکید",
        "action-upload": "ای فایل سوار بکید",
+       "action-reupload": "نیسئین ری جانیا ایسنی",
+       "action-reupload-shared": "باطل کردن ای جانیا ری یه گل گنجینه هومبئر",
        "action-upload_by_url": "ای فایله نه د یو آر ال سوار بکید",
        "action-writeapi": "د نیسنن ای پی آی استفاده بکید",
        "action-delete": "ای بلگه نه پاکسا کو",
        "action-deletedhistory": "ویرگار پاکسا بیه ای بلگه نه بوینیت",
        "action-browsearchive": "بلگه یا پاک بیه نه پی جوری بکید",
        "action-undelete": "ای بلگه نه پاک نکو",
+       "action-suppressrevision": "وانئری و زنه کردن وانئریا پاک بیه",
        "action-suppressionlog": "ای پهرستنومه خصوصی نه بوینیت",
        "action-block": "ای کارور نه د ویرایشت کردن منع کو",
        "action-protect": "ریترازیا حفاظت د ای بلگه نه آلشت بکید",
+       "action-rollback": "چواشه کردن سریع ویرایشتیا آخری کاریاری که یه بلگه ویجه نه ویرایشت دئه",
        "action-import": "بلگه یا نه د ویکی هنی وارد بکید",
        "action-importupload": "بلگه یا نه د فایل سوار بیه وارد بکید",
+       "action-patrol": "سردیاری کردن د ویرایشتیا کسونا تر",
+       "action-autopatrol": "سردیاری کردن د ویرایشتیا خوتو",
        "action-unwatchedpages": "دیئن نوم گه بلگه یا دیئه نبیه",
        "action-mergehistory": "وه یک شیوسن ویرگار ای بلگه",
        "action-userrights": "حقوق همه کاروریانه ویرایشت بکید",
        "enhancedrc-history": "ويرگار",
        "recentchanges": "تغيريا تازه",
        "recentchanges-legend": "گزينه يا آلشتيا تازه",
+       "recentchanges-summary": "دو بیشتر آلشتیا تازباو نه د ویکی نه د ای بلگه پیگری کو.",
+       "recentchanges-noresult": "هیژ آلشتی د طیل دوره دیار بیه وا ای معیاریا یکی نبی.",
        "recentchanges-feed-description": "دو بیشتر آلشتیا تازباو نه د ویکی که ها د هوال حون پیگری کو.",
        "recentchanges-label-newpage": "ای ويرايشت يه بلگه تازه راس كرده",
        "recentchanges-label-minor": "يه ويرايشت كؤچكيه",
        "recentchanges-label-plusminus": "انازه بلگه وه شمار ای بایتیا آلشت کرده.",
        "recentchanges-legend-heading": "'''میراث:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (همچنو بوینیت [[ویجه:بلگیا تازه|نوم گه بلگیا تازه]])",
+       "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rcnotefrom": "د هار آلشتیا د $2 هیئن(د بال د $1 نشون دئه بیه)",
        "rclistfrom": "آلشتیا تازه ایی که وا $3 $2 شرو بیه نشونش بئه",
        "rcshowhideminor": "ويرايشتيا کؤچک $1",
        "minoreditletter": "م",
        "newpageletter": "ن",
        "boteditletter": "ب",
+       "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 دینه {{جمی:$1|کاریار|کاریاریا}}]",
        "rc_categories": "دسه یا نه محدود کو(وا \"|\" جگا بوئن",
        "rc_categories_any": "هرکوم",
+       "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{جمی:$1|بایت|بایتیا}} نها آلشت",
        "newsectionsummary": "/* $1 */ بخش تازه",
        "rc-enhanced-expand": "جزيات نشون بيئه",
        "upload": "بلم گير كردن فايلا",
        "uploadbtn": "سوار کردن فایل",
        "reuploaddesc": "سوار کردن نه انجوم شیو بکیت و د ورئردیت جابلگ سوارکرد",
+       "upload-tryagain": "کل کردن توضیحیا آلشت دئیه بیه جانیا",
        "uploadnologin": "وارد نبیه",
        "uploadnologintext": "لطفن $1 سی سوارکرد جانیایا.",
+       "upload_directory_missing": "نشونگه سوارکرد ($1) وجود ناره و نبوئه دروسش بکی.",
+       "upload_directory_read_only": "نشونگه سوارکرد($1) د لا سرور قاول نیسنن نئ.",
        "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-preferred": "جورا جانیا مجاز:$1.",
        "upload-prohibited": "جورا جانیا مجاز:$1.",
        "uploadlogpage": "سوارکرد",
+       "uploadlogpagetext": "نومگه هاری یه گل نومگه د آخری سوارکرد جانیایا هئ.\nسی د نو سیل کردن[[Special:NewFiles|عسگدونی جانیایا تازه نه]] به ونیت.",
        "filename": "نوم فایل",
        "filedesc": "چكسته",
        "fileuploadsummary": "چکسه",
        "filereuploadsummary": "آلشتیا فایل:",
        "filestatus": "حال و بال کپی رایت",
        "filesource": "سرچشمه:",
+       "ignorewarning": "تیه پوشی د زئنار و اماییه کردن جانیا",
        "ignorewarnings": "د هر زنهار تیه پوشی کو",
+       "minlength1": "نوم جانیا باید حداقل یه حرف داشتوئه.",
+       "illegalfilename": "نوم جانیا «$1» د وه گیرنه نیسه یایی که د نوم بلگه یا صاحاو اجاره نیئن.\nلطفن نوم جانیا نه آلشت بئیت و ونه د نو نوم بنیت.",
        "filename-toolong": "نوم جانیا شایت گپتر د 240 بایت نبا.",
        "badfilename": "نوم جانیا د \"$1\" آلشت بیه.",
+       "filetype-mime-mismatch": "دماون جانیا «$1.‎» وا نوع MIME وه($2) یکی نئ.",
+       "filetype-badmime": "جانیایی که نوع 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": "ای جانیا هیچ اضاف کردی ناره(چی \"جی پی جی\")",
        "empty-file": "فایلی که دئی ته حالی بیه.",
        "file-too-large": "فایلی که دئی ته فره گپ بی.",
        "filename-tooshort": "نوم فایل فره کؤچکه.",
        "filetype-banned": "چنی جانیا قدقه بیه.",
+       "verification-error": "جانیا د ازمایشت پشت راسگری نگوارد.",
+       "hookaborted": "آلشتی که میهاستیت دروس بکیت وا یه گل قلاو اضاف کرد انجوم نگرت.",
        "illegal-filename": "نوم فایل اجاره ندئه بیه.",
+       "overwrite": "نیسنن ری یه گل جانیایی که هیئش صلا ندئه بیه",
        "unknown-error": "یه گل خطا نادیار ری ون کرده.",
        "tmp-create-error": "نبوئه جانیا موقتی نه راس بکیتو.",
        "tmp-write-error": "خطا د نیسنن جانیا موقتی.",
+       "large-file": "د تو میهایم که جانیایا د $1 گپتر نبان؛\nانازه ای جانیا $2 ئه.",
+       "largefileserver": "ای جانیا د انازه ای که د وه سرور میزونکاری بیه تا ونه بیئره گپتره.",
+       "emptyfile": "جانیایی که سوار بیه د نظر میا حالی با.\nای مشگل شایت سی خطا انجومیار نویسی د نوم جانیا با.\nلطف بکید که یه نه وارسی بکیت که میهایت ونه وا ای شرایط سوار بکیت.",
+       "windows-nonascii-filename": "ای ویکی حامین دار نوم جانیایا که نیسه یا خاصی نه دارن نئ.",
+       "fileexists": "جانیایی وا ای نوم ایسه هیئش، ار دل مئکم {{GENDER:|نیئت}} که میهایت او جانیا نه آلشت بکیت، لطفن <strong>[[:$1]]</strong> نه وارسی بکیت.\n[[$1|thumb]]",
+       "filepageexists": "بلگه توضیح سی ای جانیا د دماتر د <strong>[[:$1]]</strong> دروس بیه، اما جانیایی وه ای نوم نیئش.\nچکسه ای که وارد می کیت د بلگه توضیح نشو دئه نبوئه.\nسی یه که چکسه شما نشو دئه بوئه، باید ونه وه شکل دسی ویرایشت بکیت.\n[[$1|thumb]]",
+       "fileexists-extension": "جانیایی وه نوم چی ای نوم هیئش: [[$2|thumb]]\n* نوم جانیایی که سوار می کردیت: <strong>[[:$1]]</strong>\n* نوم جانیایی که د دماتر بیئشه: <strong>[[:$2]]</strong>\nمیهایت د یه گل نوم دیارتر استفاده بکیت؟",
+       "fileexists-thumbnail-yes": "د ویر و باور میا که ای جانیا، یه گل عسگ کؤچک بیه (''بن کلیکی'' یا ''thumbnail'') بوئه.\n[[$1|thumb]]\nلطفن جانیا<strong>[[:$1]]</strong> نه وارسی بکیت.\nار جانیایی که وارسی کردیت، همی عسگ د انازه خوشه، نمیحا یه عسگ بن کلیکی اضاف بکیت.",
+       "file-thumbnail-no": "نوم جانیا وا <strong>$1</strong> شرو موئه.\nد ویر و باور میا که ای جانیا، یه گل عسگ ''بندانگشتی'' ''(thumbnail)'' د عسگ گپتر و اصلی با.\nار عسگ وا انازه اصلی نه داریت، ونه سوار بکیت؛ ونه ، نوم جانیا نه آلشت بئیت.",
+       "fileexists-forbidden": "د ایسنی، جانیایی وه همی نوم هیئش، و نبوئه ری نوشت با.\nار هنی میهایت که جانیا خوتونه سوار بکیت، لطفن ؤرئیردیت و یه گل نوم هنی نه بونیت وه کار.\n[[File:$1|thumb|center|$1]]",
+       "fileexists-shared-forbidden": "د ایسنی، جانیایی وا همی نوم د امماره هومبئری جانیایا هیئش.\nار هنی میهایت جانیاتونه سوار بکیت، لطفن ؤرئردیت و جانیا خوتونه وا نوم هنی سوار بکیت.\n[[File:$1|thumb|center|$1]]",
+       "file-exists-duplicate": "د ویر و باور میا که ای جانیا یه گل نسقه تکراری د  {{PLURAL:$1|جانیا|جانیایا}} هاری با:",
+       "file-deleted-duplicate": "یه گل جانیا چی ای جانیا([[:$1]]) د دماتر پاکسا بیه.\nشما واس ویرگارچه پاکسا بیین او جانیانه دما یه که میهایت سوارش بکیت به ونیت.",
+       "file-deleted-duplicate-notitle": "یه گل جانیا هومبراور وا ای جانیا د دماتر پاکسا بیه و عنوانش پاکساگری بیه.\nشما باس د کسی که د دیئن جانیا پاکساگری بیه دسرسی داره، بهایت که شرایط نه دما سوارکردن هنی وارسی بکه.",
        "uploadwarning": "هشدار سوارکرد",
+       "uploadwarning-text": "لطف بکیت توضیحات جانیا هاری نه آلشت بئیت و د نو تلاش بکیت.",
        "savefile": "جانیا نه اماییه کو",
        "uploaddisabled": "سوار کردن د کار نئ.",
        "copyuploaddisabled": "سوار کردن وا یو آر ال د کار نئ.",
        "uploaddisabledtext": "سوار کرد فایلیا د کار نئ.",
+       "php-uploaddisabledtext": "سوارکرد جانیایا د پی اچ پی ناکشتگر بیه.\nلطفن میزونکاری سوارکرد جانیا نه وارسی بکیت.",
+       "uploadscripted": "ای بلگه مینونه دار رازینه اچ تی امل یا نیسسه یه که شایت وه ناخوشی وا دوراته نیئر واشکافت با.",
+       "uploadscriptednamespace": "ای جانیا اس‌ وی‌ جی نوم جا غیرقانونی '$1' داره.",
        "uploadinvalidxml": "ایکس ام الی که سوار بیه نبوئه نوتیج با.",
        "uploadvirus": "د ای جانیا ویروس هئ!\nجزیات:$1",
+       "uploadjava": "ای جانیا یه گل جانیا زیپه که مینونه دار جانیایی د نوع کلاس جاوائه.\nسوارکردن جانیایا جاوا قدقن بیه، سی یه که شایت ونو صلا دور زئن محدودیتیا امنیتی نه بی ئن.",
        "upload-source": "سرچشمه فایل",
        "sourcefilename": "سرچشمه نوم جانیا:",
        "sourceurl": "سرچشمه يو آر ال:",
        "destfilename": "نوم فایل مقصد:",
        "upload-maxfilesize": "بیشترونه انازه جانیا:$1",
+       "upload-description": "شرح جانیا",
+       "upload-options": "گزینه یا سوارکرد",
        "watchthisupload": "ای جانیا نه بوینیت",
+       "filewasdeleted": "جانیایی وا همی نوم دماتر سوار بیه و نهاش پاکسا بیه\nشما واس $1 نه دما یه که میهایت سوار بکیت بینیتش.",
+       "filename-bad-prefix": "نوم جانیایی که سوار می کیت وا شرو '''$1''' موئه که دماون ویجه سی عسگیا ثوت بیه وا دیربین یا دیجیتاله.\nلطفن یه گل نوم بی تر سی جانیا انتخاو بکیت.",
        "upload-success-subj": "سوار کرد خوش سرانجوم",
        "upload-success-msg": "سوارکرد شما سی [$2] خوو بی.وه د ایچه هئش:[[:{{ns:file}}:$1]]",
        "upload-failure-subj": "مشگل د سوارکردن",
        "upload-failure-msg": "یه گل مشلگل د سوارکردتو سی [$2] بی:$1",
        "upload-warning-subj": "هشدار سوارکرد",
+       "upload-warning-msg": "د نوم بلگه سوارکرد مشگلی بی [$2]. شما می تونیت د[[Special:Upload/stash/$1|نوم بلگه سوارکرد]] ؤیرذیت تا ای مشگل نه برطرف بکیت.",
        "upload-proto-error": "پروتکل نادروس",
+       "upload-proto-error-text": "سوارکرد د د دیرادیر ائتیاج وه تیرنشونیایی داره که وا <code dir=ltr>http://</code> یا <code dir=ltr>ftp://</code> شرو بان.",
        "upload-file-error": "خطا مینونه",
+       "upload-file-error-text": "گات تلاش سی راس کردن یه گل جانیا موقتی د سرور یه گل خطا مینونه پیش اومائه.\nلطفن وا یه گل [[Special:ListUsers/sysop|دیووندار]] تماس بئریت.",
        "upload-misc-error": "خطا سوار کرد ناشناخته",
+       "upload-misc-error-text": "د گات سوارکرد خطایی نادیاری پیش اومائه.\nلطف بکیت یه دل بایت که تیرنشون اینترنتی خو و د دسرسه و هنی تلاش بکیت.\nار مشگل هنی بیئش وا یه گل [[Special:ListUsers/sysop|دیوونداریا]] تماس بئیریت.",
        "upload-too-many-redirects": "ای یو آر ال د ورگیرنه واگردونیا فرئی هئ",
        "upload-http-error": "یه گل خطا اچ تی تی پی پیش اومائه:$1",
        "upload-copy-upload-invalid-domain": "ورداشتن سوارکردیا د ای پوشگئر د دسرس نئ.",
+       "backend-fail-stream": "نبوئه جانیا\"$1\" کل بوئه.",
+       "backend-fail-backup": "نبوئه سی \"$1\" پشتجا گرت.",
        "backend-fail-notexists": "فایل $1 وجود ناره.",
+       "backend-fail-hashes": "گرتن هش یا جانیا سی ری به ری یک نیاین د خوئی انجوم نگرت.",
+       "backend-fail-notsame": "جانیا ناهمتایی ها د $1 .",
        "backend-fail-invalidpath": "\"$1\" ره خوئی سی امائیه کردن نئ.",
        "backend-fail-delete": "نبوئه جانیا $1 پاکسا بوئه",
        "backend-fail-describe": "نبوئه گپ دونسمنیا سی جانیا\"$1\" آلشت بوئه.",
        "backend-fail-closetemp": "نبوئه جانیا موقتی بسته با.",
        "backend-fail-read": "نبوئه جانیا\"$1\" حنه بوئه.",
        "backend-fail-create": "نبوئه د جانیا\"$1\" نوشته با.",
+       "backend-fail-maxsize": "نبوئه ری جانیا $1 دونسمنیایی نی سن سی یه که گپتر د{{PLURAL:$2|به بایت|$2 بایت}} ئه.",
+       "backend-fail-readonly": "حامین «$1» د ایسنی د حال و بار فقط حننیه.دلیل دئه بیه ینه: «$2»",
+       "backend-fail-synced": "جانیا «$1» ها د حامین داریا اماییه بیه مینونه دار که حال و بارش لیزنگرته یه.",
+       "backend-fail-connect": "وا حامین دار اماییه «$1» ارتواط جاگیری نبی.",
+       "backend-fail-internal": "خطا نادیاری د حامین دار اماییه «$1»  پیش اوما.",
+       "backend-fail-contenttype": "دیارکرد نوع مینونه جانیا سی اماییه «$1» د انجومشیو بی.",
+       "backend-fail-batchsize": "یه گل دسه مینونه دار $1 {{PLURAL:$1|انجومگری|انجومگری}} جانیا وه حامین اماییه دئه بیه؛ بیشترونه مجاز $2 {{PLURAL:$2|انجومگر|انجومگر}} ئه.",
+       "backend-fail-usable": "امکان حنن یا نیسنن جانیا $1 وجود ناشت سی یه که ری تراز دسرسی خو نئ یا لشک/اماییه دار حاستنی نیئش.",
+       "filejournal-fail-dbconnect": "امکان وصل بیئن د رسینه گا نوشتگه سی حامین داری د اماییه کاری «$1» وجود ناشت.",
+       "filejournal-fail-dbquery": "امکان وصل بیئن د رسینه گا نوشتگه سی حامین داری د اماییه کاری «$1» وجود ناشت.",
+       "lockmanager-notlocked": "نبوئه قلف $1 نه وا بکیت؛ سی یه که وه قلف نبیه.",
        "lockmanager-fail-closelock": "نبوئه قلف جانیا سی \"$1\" بسه بوئه.",
+       "lockmanager-fail-deletelock": "نبوئه قلف جانیا سی \"$1\" پاکسا بوئه.",
+       "lockmanager-fail-acquirelock": "نبوئه سی «$1» قلف وه دس اورد.",
        "lockmanager-fail-openlock": "نبوئه قلف جانیا سی \"$1\" وا بوئه.",
+       "lockmanager-fail-releaselock": "نبوئه قلف «$1» نه وا کرد .",
+       "lockmanager-fail-db-bucket": "امکان ارتواط خو وا رسینه گا قلفیا د اماییه دار $1 وجود ناشت.",
+       "lockmanager-fail-db-release": "نبوئه قلفیا سرور $1 نه وا بکیت.",
+       "lockmanager-fail-svr-acquire": "نبوئه سی «$1» قلف وه دس اورد.",
+       "lockmanager-fail-svr-release": "نبوئه قلفیا سرور $1 نه وا بکیت.",
+       "zip-file-open-error": "د گات واکردن جانیا زیپ سی وارسی مینونه ش یه گل خطا پیش اومائه.",
+       "zip-wrong-format": "جانیا تیار بیه جانیا زیپ نئ.",
+       "zip-bad": "جانیا زیپ خرؤ یا حننی نئ.\nنبوئه مینونه شه د لحاظ امنیتی وه خوئی وارسی کرد.",
+       "zip-unsupported": "جانیا زیپ چیایی نه وه کار بسه که ویکی وارسگر حامین دارشو نئ.\nنبوئه مینونه ونه د لحاظ امنیتی وه خوئی وارسی کرد.",
        "uploadstash": "اماییه جا سوارکرد",
+       "uploadstash-summary": "ای بلگه سی دسرسی وه جانیایایی یه  که سوار بینه(یا د حالت سوارکردن) ولی تا ایسه د ویکی درتیچ نبینه.ای جانیایا فقط وا کاریاریایی که ونونه سوارکردنه قاول دیئن هئن.",
        "uploadstash-clear": "پاک کردن جانیایا اماییه بیه",
        "uploadstash-nofiles": "شما هیژ جانیا اماییه بیه ای ناریت.",
+       "uploadstash-badtoken": "انجوم دئن ای کاریا د خوئی صورت نگرت، شایت سی یه با که اعتوار ویرایشت شما تموم بیه. هنی تلاش بکیت.",
+       "uploadstash-errclear": "پاک کردن جانیایا د خوئی شکل نگرت.",
        "uploadstash-refresh": "نومه گه جانیایا نه د نو تازه کو",
        "invalid-chunk-offset": "جا وه جایی نامعتور برشت",
        "img-auth-accessdenied": "دسرسی منع بی",
+       "img-auth-nopathinfo": "PATH_INFO نیئش.\nسرور شما سی گواردن ای انازه میزونکاری نبیه.\n شات د پایه سی جی آی با و حامین دار img_auth نبا.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization سیل بکیت.",
+       "img-auth-notindir": "مسیر حاسته بیه د لشک سوارکرد میزونکاری بیه نئ.",
+       "img-auth-badtitle": "امکان راس کردن یه سرون مجازی د «$1» وجود ناره.",
+       "img-auth-nologinnWL": "شما هنی نیومایته وامین و «$1» د نوم گه اسبئ نیئش.",
        "img-auth-nofile": "فایل $1 وجود ناره.",
+       "img-auth-isdir": "شما سی رسسن وه لشگ «$1» تلاش کردیته.\nتئنا می تونیت وه جانیا دسرسی داشتویت.",
+       "img-auth-streaming": "د حال کل کردن \"$1\".",
+       "img-auth-public": "آلشت ون img_auth.php درده ای د جانیایا یه گل ویکی خصوصیه.\nای ویکی وه عنوان یه گل ویکی خلک من میزونکاری بیه.\nسی امنیت خوتر، img_auth.php ناکنشتگر بیه.",
+       "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": "تموم بیئن مئلت سی سوار کرد",
+       "upload-curl-error28-text": "ای دیارگه فره دیر دتو واکنشت نشو دئه.\nلطف بکیت سی یه که دیارگه کنشگتر و ری خطه یه گل وارسی بکیت، اوسه یه گر واستید و هنی تلاش بکیت.\nشایت بیتر با که د گات خلوتری هنی تلاش بکیت.",
        "license": "ليانس دار بيئن",
        "license-header": "د شكل ليسانس دار بيئن",
        "nolicense": "هیچی انتخاو نبیه",
+       "licenses-edit": "گزینه یا مجوز ویرایشت",
        "license-nopreview": "(پیش سیل د دسرس نئ)",
+       "upload_source_url": "(شما یه گل جانیا د یه گل یو آر ال د دسرس خلک و معتور ورچئ کردیته)",
        "upload_source_file": "(یه گل جانیا د انجومیار تو انتخاو بکیت)",
        "listfiles-delete": "پاکسا کردن",
        "listfiles-summary": "ای بلگه یا ویجه همه جانیایا سوار بیه نه نشو می ئین.",
        "listfiles_name": "نوم",
        "listfiles_user": "کاریار",
        "listfiles_size": "انازه",
+       "listfiles_description": "شرح",
        "listfiles_count": "نسقیا",
        "listfiles-show-all": "شومل نسقه یا نهاتری عسگیا",
        "listfiles-latestversion": "نسقه تازه",
        "filehist-comment": "نظر",
        "imagelinks": "استفاده د فايل",
        "linkstoimage": "دمال بيه {{PLURAL:$1|ديس ونيا بلگه|$1 ديس ون بلگيا}} دای فایل:",
+       "linkstoimage-more": "بیشتر د $1 بلگه د ای جانیا هوم پیوند {{PLURAL:$1|بیه|بینه}}.\nنومگه هاری تئنا {{PLURAL:$1|اولین هوم پیوند|اولین $1 هوم پیوند}} د ای بلگه نه نشو می ئه.\n[[Special:WhatLinksHere/$2|نومگه کامل]] ئم هیئش.",
        "nolinkstoimage": "ایچه هیژ بلگه ای سی هوم پیوند بیئن وا ای فایل نی",
        "morelinkstoimage": " [[ویجه:چه هوم پیوندی ها ایچه/$1|هوم پیوندیا هنی]]سی ای جانیا نه بونیت.",
        "linkstoimage-redirect": "$1 (واگردونی جانیا) $2",
+       "duplicatesoffile": "{{PLURAL:$1|جانیا|جانیایا}} هاری نسقه تکراری ای جانیا {{PLURAL:$1|هئ|هئن}} ([[Special:FileDuplicateSearch/$2|دونسمنیا هنی]]):",
        "sharedupload": "ای جانیا که د $1 هئ شایت د پروجه یا هنی استفاده بیه.",
+       "sharedupload-desc-there": "ای جانیا ها د $1و شایت د پروجه یا هنی وه کار گرته بوئه.\nسی دونسمنیا هنی لطفن [$2 بلگه توضیحیا جانیا] نه سیل بکیت.",
        "sharedupload-desc-here": "فایلی که د $1 شایت د مئن پروجیا هنی استفاده بیه.\nتوضی دباره[$2 file description page] د هار نشو دئئه بیه",
+       "sharedupload-desc-edit": "ای جانیا د $1 ئه و می تونه د پروجه یا هنی وه کار گرت بوئه.\nار حاستیت می تونیت توضیحیا حانیا نه د [$2 بلگه توضیحیا خوش] د اوچه ویرایشت بکیت.",
+       "sharedupload-desc-create": "ای جانیا د $1 ئه و می تونه د پروجه یا هنی وه کار گرت بوئه.\nار حاستیت می تونیت توضیحیا حانیا نه د [$2 بلگه توضیحیا خوش] د اوچه ویرایشت بکیت.",
        "filepage-nofile": "چنو فایلی وا ای نوم نئ.",
+       "filepage-nofile-link": "جانیایی د ای نوم نیئش، اما شما تونیت ونه د [$1 سوار بکیت].",
        "uploadnewversion-linktext": "یه گل نسقه تازه د ای جانیا سوار بکید",
        "shared-repo-from": "د $1",
+       "shared-repo": "یه گنجینه هومبئر",
+       "upload-disallowed-here": "شما نمی تونیت ای جانیانه د نو سوار بکیت",
        "filerevert": "د سرگرتن سی $1",
        "filerevert-legend": "د سرگرتن جانیا",
+       "filerevert-intro": "شما د حال و بار لرسن'''[[Media:$1|$1]]''' وه [$4 نسقه ای که ها د ویرگار$2 ساعت $3] هیئت.",
        "filerevert-comment": "دليل:",
+       "filerevert-defaultcomment": "لرسن وه نسقه $1 ساعت $2",
        "filerevert-submit": "ورگنین",
+       "filerevert-success": "''[[Media:$1|$1]]''' وه[$4 نسقه ای که ها د ویرگار$2 ساعت $3] لرسه بی.",
+       "filerevert-badversion": "نسقه دماتری د ای نسقه وجود ناشت.",
        "filedelete": "$1 پاکسا کو",
        "filedelete-legend": "فایل نه پاک کو",
+       "filedelete-intro": "شما د حال و بار پاکسا کردن جانیا'''[[Media:$1|$1]]''' وا تموم ویرگارچه وه هیئت.",
+       "filedelete-intro-old": "شما د حال و بار پاکسا کردن نسقه'''[[Media:$1|$1]]''' که ها د ویرگار[$4 $2 ساعت $3] هیئت.",
        "filedelete-comment": "دليل:",
        "filedelete-submit": "پاكسا كردن",
        "filedelete-success": "$1 پاکسا بیه.",
+       "filedelete-success-old": "نسقه'''[[Media:$1|$1]]''' که ها د ویرگار $2 ساعت $3 پاکسا بیه.",
        "filedelete-nofile": "'''$1''' وجود ناره.",
+       "filedelete-nofile-old": "نسقه مال دیاری  بیه ای د '''$1''' وا چیا دئه بیه، وجود ناره.",
        "filedelete-otherreason": "دلیل هنی:",
        "filedelete-reason-otherlist": "دليل هنی",
+       "filedelete-reason-dropdown": "* دلیلیا جاافتائه سی پاکسا کردن\n** تیه پوشی د کپی رایت\n** جانیا تکراری",
        "filedelete-edit-reasonlist": "دلیلیا پاک کردنه نه ویرایشت بکید",
+       "filedelete-maintenance": "پاکسا کردن و د نو زنه کردن د گات واداشتن تقریبا ناکشتگر بیه.",
        "filedelete-maintenance-title": "نبوئه ای فایل پاکسا بوئه",
        "mimesearch": "پی جوری ام آی ام ای",
+       "mimesearch-summary": "وا هومیاری ای بلگه شما می تونیت جانیایایی که حال و بارMIME ویجه ای دارن نه بجوریت.\nدرینده: وه شکلcontenttype/subtype یا contenttype/*&lrm;، چی <code>image/jpeg</code>.",
        "mimetype": "نوع MIME:",
        "download": "گرتن",
        "unwatchedpages": "بلگه یا ندئیه بیه",
        "listredirects": "نوم گه واگردونیا",
+       "listduplicatedfiles": "نومگه همه جانیایا واگرد دواره اومائه یا",
+       "listduplicatedfiles-summary": "ای نومگه د جانیایا وا نسقه یا ایسنی ای جانیا تکراریه که نسقه یا ایسنی جانیایا هنیه. فقط جانیایا ولات نشین هان د ویر و باور ایما.",
+       "listduplicatedfiles-entry": "[[:جانیا:$1|$1]][[$3|{{PLURAL:$2|یه گل تکرار|$2 تکرار}}]] داره.",
        "unusedtemplates": "قالویا وه کار نبرده بیه.",
+       "unusedtemplatestext": "ای بلگه همه بلگه یایی که هان د نومجا {{ns:template}}و د هیچ بلگه ای وه کار گرته نبینه، نوم بنی می که.\nد ویرتو با که دما یه که بهایت بلگه یا هوم پیوند هنی نه پاکسا بکیت دشو وارسی ای انجوم بئیت.",
        "unusedtemplateswlh": "هوم پیوندیا هنی",
        "randompage": "بلگه بختكی",
+       "randompage-nopages": "هیچ بلگه ای د ای {{PLURAL:$2|نومجا|نومجایا}}  نئ:$1.",
        "randomincategory": "بلگه بختی د ای دسه",
        "randomincategory-invalidcategory": "\"$1\"  نوم دسه معتوری نئ.",
        "randomincategory-nopages": "هیچ بلگه ای د ای  [[:دسه نئ:$1|$1]] دسه.",
+       "randomincategory-category": "دسه:",
+       "randomincategory-legend": "بلگه بختی د ای دسه",
        "randomredirect": "واگردونی بختکی",
+       "randomredirect-nopages": "هیچ واگردونی د نومجا \"$1\" نئ.",
        "statistics": "آماريا",
        "statistics-header-pages": "بلگه آماریا",
        "statistics-header-edits": "آماریا نه ویرایشت بکید",
-       "statistics-header-views": "آماریا نه بوینیت",
        "statistics-header-users": "آماریا کاریار",
        "statistics-header-hooks": "آماریا هنی",
        "statistics-articles": "بلگه یا مینونه",
        "statistics-pages": "بلگیا",
        "statistics-pages-desc": "همه بلگه یا د ویکی،د ور گیرنه بلگه یا چک چنه،واگردونیا و چیا هنیه.",
        "statistics-files": "جانیا یا سوار بیه",
+       "statistics-edits": "ویرایشت بلگه یا د گاتی که  {{SITENAME}} دروس بیه",
        "statistics-edits-average": "میانگین ویرایشت یا سی هر بلگه",
-       "statistics-views-total": "همه نه بوینیت",
-       "statistics-views-peredit": "هر ویرایشت نه بوینیت",
        "statistics-users": "ثوت نام بیه [[ویجه:نوم گه کاریاریا|کاریاریا]]",
        "statistics-users-active": "کاروریا کارکو",
-       "statistics-mostpopular": "بلگه یایی که بیشتر دیئه بینه",
+       "statistics-users-active-desc": "کاریاریایی که د {{PLURAL:$1|رو|$1 رو}} دماتر کنشتگر بینه",
+       "pageswithprop": "بلگه یایی که خاصیت صفحه ها دشو",
+       "pageswithprop-legend": "بلگه یایی که خاصیت صفحه ها دشو",
+       "pageswithprop-text": "ای بلگه نومگه ای یه د بلگه یایی که یه گل ویجه گی د یه بلگه خاص نه وه کار می بنن.",
+       "pageswithprop-prop": "نوم خاصیت:",
        "pageswithprop-submit": "رو",
+       "pageswithprop-prophidden-long": "جزییات قام بیه یه گل نیسه دراز($1)",
+       "pageswithprop-prophidden-binary": "جزییات انازه قام بیه دوتا دوتایی ($1)",
        "doubleredirects": "واگردونیا دوتایی",
+       "doubleredirectstext": "ای بلگه نومگه ای د بلگه واگردونی نه نشو می یه که وه یه گل بلگه واگردونی هنی هشاره می کن.\nهر خط مینونه دار هوم پیوندیا واگردونی اول و دویم و همچنو مقصد واگردونی دویمه، که معمولند بلگه مقصد راستکی یه و اولین واگردونی واس د وه هشاره بکه.\nچیا <del>خط حرده</del> دروس بینه.",
        "double-redirect-fixed-move": "[[$1]]جا وه جا بیه .\nوه خودکارونه وه روز بیه و ایسه وه د[[$2]] واگردونی بیه.",
+       "double-redirect-fixed-maintenance": "برطرف بیین خودانجوم دوتای د [[$1]] وه [[$2]] د مسیر واداشت.",
        "double-redirect-fixer": "تعمیر کننه واگردونی",
        "brokenredirects": "واگردونیا بی سرانجوم",
        "brokenredirectstext": "واگردونیا نهاتر د بلگه یایی که وجود نارن هوم پیوند بینه.",
        "brokenredirects-edit": "ویرایشت",
        "brokenredirects-delete": "پاكسا كردن",
        "withoutinterwiki": "بلگه یایی که هوم پیوند زون نارن",
+       "withoutinterwiki-summary": "بلگه یا هاری وه زون نسقه یا زونا تر هوم پیوند نبیه.",
        "withoutinterwiki-legend": "پیشون",
        "withoutinterwiki-submit": "نشون دائن",
        "fewestrevisions": "بلگه یایی که کمتری وانئری نه دارن",
        "ntransclusions": "$1 {{جمی:$1|بلگه|بلگيا}} استفاده بیه",
        "specialpage-empty": "نتیجه ای د ای گزارشت نئ.",
        "lonelypages": "بلگه یا تک منه",
+       "lonelypagestext": "د بلگه یا هاری هیچ بلگه هنی د {{SITENAME}} هوم پیوند نبیه و د هیچ بلگه هنی مین چین نبیه.",
        "uncategorizedpages": "بلگه یا دسه بنی نبیه",
        "uncategorizedcategories": "دسه یا دسه بنی نبیه",
        "uncategorizedimages": "فایلیا دسه بنی نبیه",
        "uncategorizedtemplates": "قالویا دسه بنی نبیه",
        "unusedcategories": "دسه یا استفاده نبیه",
        "unusedimages": "فایلیا استفاده نبیه",
-       "popularpages": "بلگه یا حاستنی",
        "wantedcategories": "بلگه یا حاستنی",
        "wantedpages": "بلگه یا حاستنی",
+       "wantedpages-badtitle": "سرون نامعتور د کومله نتیجه یا:$1",
        "wantedfiles": "فایلیا حاستنی",
+       "wantedfiletext-cat": "جانیایا هاری وه کار گرته بوئن ولی وجود نارن. همچنو شایت جانیایا وه دری وا یه که ایچه هیئشون نومگه کاری بینه.هر گرینج مثبت دورویی  <del>خط مئوره.</del> به اضافه یه، بلگه یایی که که جانیایا بی وجودن نه د خوشو دارن د [[:$1]] نومگه کاری بینه.",
+       "wantedfiletext-cat-noforeign": "جانیایا هاری وه کار گرته بوئن ولی نیئشو. اضافه وه یه بلگه یایی که جانیایا نادیار د خوشو دارن هان د [[:$1]].",
+       "wantedfiletext-nocat": "جانیایا هاری که وه کار گرته بوئن نیئشو. همچنو شایت جانیا اماییه داریا خارجی وه شرطی که بان وه کار گرته بوئن. هر گرینج خو ولی الکی <del> خط مئوره. <del>",
+       "wantedfiletext-nocat-noforeign": "جانیایا هاری وه کار گرته بوئن ولی نیئشو.",
        "wantedtemplates": "قالویا حاستنی",
        "mostlinked": "بلگه یا که بیشتر هوم پیوند بینه",
        "mostlinkedcategories": "دسه یایی که بیشتر هوم پیوند بیه",
        "mostinterwikis": "بلگه یایی که بیشتری مینجا ویکی نه دارن",
        "mostrevisions": "بلگه یایی که بیشتری وانئری نه دارن",
        "prefixindex": "همه بلگيا وا پيشون",
+       "prefixindex-namespace": "تموم بلگه یا وا دماون(نومجا $1)",
+       "prefixindex-strip": "پاکسا کردن دماون د نومگه",
        "shortpages": "بلگه یا کؤچک",
        "longpages": "بلگه یا گپ",
        "deadendpages": "بلگه یا نابود بیئنی",
+       "deadendpagestext": "بلگه یا هاری وه هیچ بلگه هنی د {{SITENAME}} هوم پیوند نبینه.",
        "protectedpages": "بلگه یا حفاظت بيه",
+       "protectedpages-indef": "فقط پر و پیم بیین یا بی زمون",
+       "protectedpages-summary": "د ای بلگه نومگه بلگه یایی هیئن که د ایسنی پر و پیم بینه. سی نومگه سرونیا که نبوئه دروس بان، سیل[[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]  بکیت.",
+       "protectedpages-cascade": "فقط پر و پیم بیین تافنمایی",
        "protectedpages-noredirect": "واگردونیا قام بیه",
+       "protectedpagesempty": "د ایسنی هیچ بلگه ای پر و پیم نبیه.",
        "protectedpages-timestamp": "سردیس گات",
        "protectedpages-page": "بلگه",
        "protectedpages-expiry": "تموم بیه آ",
        "protectedpages-performer": "کارور حفاظت بیه",
+       "protectedpages-params": "پارامتریا پر و پیم کردن",
        "protectedpages-reason": "دلیل",
        "protectedpages-unknown-timestamp": "ناشناس",
        "protectedpages-unknown-performer": "کارور ناشناس",
+       "protectedtitles": "سرونیا پر و پیم بیه",
+       "protectedtitles-summary": "د ای بلگه نومگه بلگه یایی هیئن که د ایسنی پر و پیم بینه. سی نومگه سرونیا که نبوئه دروس بان، سیل[[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]  بکیت.",
+       "protectedtitlesempty": "د ایسنی هیچ سرونی وا ای پارامتریا پر و پیم نبیه",
        "listusers": "نوم گه کارور",
        "listusers-editsonly": "فقط کاروریایی که ویرایشت می کن نشو بیه",
        "listusers-creationsort": "سرجاخودگری د اساس گات دروس بیین",
        "ancientpages": "بلگه یا نهاتر",
        "move": "جاوه جا بوئيت",
        "movethispage": "ای بگله نه جا وه جا كو",
+       "unusedimagestext": "جانیایا هاری هئشو اما د هیچ بلگه ای وه کار گرته نبینه.\nلطفن د ویرتو با که دیارگه یا هنی شایت وا یه گل تیرنشون اینترنتی مستقیم وه یه گل جانیا هوم پیوند بان و وا یه که د وه کار گرتن کنشتگر هیئن د ایچه نومگه بان.",
+       "unusedcategoriestext": "ای دسه یا هیئشو ولی د ایسنی هیچ گوتار یا دسه ای ونونه وه کار نمی بنه.",
+       "notargettitle": "رسینه جایی نئ",
+       "notargettext": "شما بلگه یا کاریاری مقصدی سی انجوم دئن ای کنشت ریش انتخاو نکردیته.",
+       "nopagetitle": "چنی بلگه ای نیئش",
+       "nopagetext": "بلگه حاستنی که شما دیاری کردیته وجود ناره.",
        "pager-newer-n": "{{جمی:$1|وانها تر 1وانها تر $1}}",
        "pager-older-n": "{{جمی:$1|گپسالتر 1|گپسالتر $1}}",
        "suppress": "پائیئن",
+       "querypage-disabled": "ای بلگه ویجه سی دلیلیا انجومکاری ناکشتگر بیه.",
+       "apihelp": "هومیاری آی پی آی",
+       "apihelp-no-such-module": "ماجول \"$1\" پیدا نبی.",
        "booksources": "سرچشمه يل كتاو",
        "booksources-search-legend": "پی جوری سی سرچشمه یا کتاو",
-       "booksources-go": "رو",
+       "booksources-isbn": "آی اس بی ان:",
+       "booksources-search": "پی جوری",
+       "booksources-text": "د هار نومگه ای د هوم پیوندیا د دیارگه یا هنی اومائه که کتاویا نو و دس دوئم می فروشن، و همچنو شایت دونسمنیا بیشتری راجع وه کتاو حاستنی شما داشتوئن:",
+       "booksources-invalid-isbn": "شازک که دئه بیه معتور نئ؛ وارسی خطایا د گات ؤرداشتن د سرچشمه اولی وه کار گرته بوئه.",
        "specialloguserlabel": "انجومکار:",
+       "speciallogtitlelabel": "حاستنی(موضوع یا کاریار):",
        "log": "نیسنن رخ ونیا",
        "all-logs-page": "همه پهرستنومه یا عمومی",
+       "alllogstext": "نماشت یه جا همه پهرستنومه یا که هان د{{SITENAME}}.\nمی تونید وا انتخاو نوع پهرستنومه، نوم کاریاری(حساس وه کؤچکی و گپی حرفیا) و بلگه یا آلشت کرده(حساس و گپی و کؤچکی حرنیا) نمایشت نه دیر د ویرتر بکیت.\n\n{{SITENAME}}.",
+       "logempty": "او چی ای که شما میهایت د پهرستنومه نیئش.",
+       "log-title-wildcard": "بلگه یایی نه پی جوری کو که وا ای سرون شرو موئن",
+       "showhideselectedlogentries": "آلشت دئن ورتیه گر پهرستنومه یا انتخاو بیه",
        "allpages": "همه بلگيا",
        "nextpage": "بلگه نهایی($1)",
        "prevpage": "بلگه دمایی($1)",
        "allpagesbadtitle": "عنوان بلگه حاسته بیه معتور نی،یا  یه گل مئن زونی یا مئن ویکی عنوان غلطه.\nیه شایت شومل یکی با یا بیشتر کاراکتریا نبوئه که سی ای موضوعیا استفاده بوئن",
        "allpages-bad-ns": "{{نوم دیارگه}} د ای نوم جا نئ \"$1\".",
        "allpages-hide-redirects": "واگردونیا قام بیه",
+       "cachedspecial-viewing-cached-ttl": "شما د حال و بار دیئن یه گل نسقه ای د ای بلگه که ها د مینجاگیر هیئت که شایت سی $1 دماتر با.",
+       "cachedspecial-viewing-cached-ts": "شما داریت یه گل نسقه د ای بلگه نه که ها د مینجاگر سیل می کیت، و ای نسقه شایت کاملند راستکی نبا.",
        "cachedspecial-refresh-now": "دیئن آخری.",
        "categories": "دسه يا",
+       "categoriespagetext": "{{PLURAL:$1|دسه|دسه یا}} هاری دشو جانیایا یا بلگه {{PLURAL:$1|هئ|هیئن}}.\n[[Special:UnusedCategories|دسه یا وه کار نگرته بیه]] د ایچه نیئن.\nهمچنو[[Special:WantedCategories|دسه یا حاستنی نه]] بوینیت.",
+       "categoriesfrom": "دسه یایی که د شرو بینه نشو بیه:",
        "special-categories-sort-count": "سرجاخودگری د اساس شمارشت",
        "special-categories-sort-abc": "سرجاخودگری د اساس الفبا",
        "deletedcontributions": "هومیاریا پاکسا بیه کارور",
        "linksearch-pat": "سازه یار پی جوری:",
        "linksearch-ns": "نوم جا:",
        "linksearch-ok": "پی جوری",
+       "linksearch-text": "نشونه یا چی «‎*.wikipedia.org» نم بوئه وه کار گرت.\nد کمترونه یه گل پوشگر ریتراز وارو، .\"*.org\" میها.<br />\n{{PLURAL:$2|پروتکل|پروتکل یا}} بی حامین: <code>$1</code> (پیش حاست سی http:// د حال وباری که پروتکل میزوکاری نبیه با).",
        "linksearch-line": "$1 داره د $2 هوم پیوند بوئه",
+       "linksearch-error": "نشونه یا فقط د اول نوم مئموندار اینترنتی می تونن وه کار گرته بان.",
        "listusersfrom": "کاریاریایی که د شرو بینه نشو بیه:",
        "listusers-submit": "نشو دئن",
        "listusers-noresult": "هیچ کاروری پیدا نبی",
        "listusers-blocked": "(قلف بيه)",
        "activeusers": "نوم گه کاروریا کارکو",
+       "activeusers-intro": "شما د هار یه گل نومگه د کاریاریایی نه مینیت که د $1 {{PLURAL:$1|رو|رو}} دماتر کنشتگر بینه.",
+       "activeusers-count": "$1 {{PLURAL:$1|کنشت|کنشت}} در {{PLURAL:$3|رو|$3 رو}} دماتر",
        "activeusers-from": "کاریاریایی که د شرو بینه نشو بیه:",
        "activeusers-hidebots": "بوتیا قام کو",
        "activeusers-hidesysops": "دیوون داریا نه قام کو",
        "activeusers-noresult": "هیچ کاروری پیدا نبی",
        "listgrouprights": "حقوق گرو کاریاری",
+       "listgrouprights-summary": "نومگه های گرته د ور گرویا کاریاری تعریف بیه د ای ویکی و اختیارات دئه بیه د ونونه.\nدونسمنیا بیشتر دباره هرکوم د اختیارات نه د   [[{{MediaWiki:Listgrouprights-helppage}}]] پیدا بکیت.",
        "listgrouprights-key": "Legend:\n* <span class=\"listgrouprights-granted\">دئه بیه د سمت راست</span>\n* <span class=\"listgrouprights-revoked\">انجوم شیو بیه د سمت راست</span>",
        "listgrouprights-group": "دسه",
        "listgrouprights-rights": "حقوقیا",
        "listgrouprights-helppage": "هومیاری:حقوق گرو",
        "listgrouprights-members": "(نوم گه اندومیا)",
+       "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code>($2)</code></span>",
+       "listgrouprights-right-revoked": "<span class=\"listgrouprights-revoked\">$1 <code>($2)</code></span>",
        "listgrouprights-addgroup": "{{جمی:$2|گرویا|گرویا}} اضاف بکیتو: $1",
        "listgrouprights-removegroup": "{{جمی:$2|گرویا|گرویا}} ورداریت: $1",
        "listgrouprights-addgroup-all": "همه گرویا نه اضاف کو",
        "listgrouprights-removegroup-self": "{{جمی:$2|گرویا|گرویا}} نه د حساو ورداریت: $1",
        "listgrouprights-addgroup-self-all": "همه گرویا نه د حساو خوشو اضاف بکیت",
        "listgrouprights-removegroup-self-all": "همه گرویا نه د حساو خوشو ورداریت",
+       "listgrouprights-namespaceprotection-header": "محدودیت نومجا",
        "listgrouprights-namespaceprotection-namespace": "نوم جا",
+       "listgrouprights-namespaceprotection-restrictedto": "دسرسیا مجاز کاریار سی ویرایشت",
+       "trackingcategories": "دما گری دسه یا",
+       "trackingcategories-summary": "ای بلگه نومگه دسه یایی دماگری بیه ئه که وه شکل خودانجوم وه دس ویکی وارسگر پر بوئن . نومیا ونو نها آلشت کردن پیغومیا سامونه ای مرتوط د نومجا {{ns:8}} آلشت دئه با.",
+       "trackingcategories-msg": "دماگری دسه",
        "trackingcategories-name": "نوم پیغوم",
+       "trackingcategories-desc": "جادیارکنیا گنجایشت دسه",
+       "noindex-category-desc": "ای بلگه وا رباتیا نومگه کاری نبیه و سی یه کلیمه یا جادویی <code><nowiki>__NOINDEX__</nowiki></code> د وه یا د جاگه ای که بیرق مجازه دش هئ.",
+       "index-category-desc": "ای بلگه<code><nowiki>__INDEX__</nowiki></code> که ها دش(و د نومجایی یه که بیرق دش مجازه)،  سی یه وا رباط ما مشگلی ناره که وه شکل عادی نباید با.",
+       "broken-file-category-desc": "بلگه مینونه دار یه گل هوم پیوند جانیا خراوه(هوم پیوندی سی جاسازی کردن یه گل جانیا سی گاتی که او جانیا نئئش).",
+       "trackingcategories-nodesc": "هیچ شرحی د دسرس نئ.",
        "trackingcategories-disabled": "دسه ناکشتگر بیه",
        "mailnologin": "هیپچ نشونی یی کل نبیه",
        "emailuser": "ای كارور نه ايميل كو",
        "emailpage": "ایمیل کارور",
        "defemailsubject": "{{نوم سیل جا}} ایمیل د کارور \"$1\"",
        "usermaildisabled": "ایمیل کارور د کار افتائه",
+       "usermaildisabledtext": "شما نمی تونیت سی کاریار هنی د ای ویکی انجومانامه کل بکیت",
        "noemailtitle": "هیچ نشونی ایمیلی نئ",
+       "noemailtext": "ای کاریار تیرنشون انجومانامه خووی ناره.",
+       "nowikiemailtext": "ای کاریار میها که د کاریاریا هنی انجومانامه نگره.",
+       "emailnotarget": "نوم کاریاری که وجود ناره یا سی گیرنه نامعتوره",
        "emailtarget": "یه گل نوم کاریاری سی پذریشتگر وارد بکیت",
        "emailusername": "نوم كاروری:",
        "emailusernamesubmit": "دئن",
+       "email-legend": "کل کردن یه گل انجومانامه سی یه گل کاریار هنی د {{SITENAME}}",
        "emailfrom": "د:",
        "emailto": "سی:",
        "emailsubject": "سرون:",
        "emailccsubject": " پیغومتو سی $1:$2 ورداشته بی",
        "emailsent": "ایمیل کل بیه",
        "emailsenttext": "پیغوم ایمیلی تو کل بیه.",
+       "emailuserfooter": "ای انجومانامه وا به کار گرتن د خصوصیت \"کل کردن نومه د ای کاریار\"{{SITENAME}} وه دس $1 به $2 کل بی.",
        "usermessage-summary": "رئتن د سامونه پیغوم",
        "usermessage-editor": "پیغوم فرسن سیستم",
+       "usermessage-template": "ویکی وارسگر:پیغوم کاریار",
        "watchlist": "سیل برگ",
        "mywatchlist": "سیل برگ",
        "watchlistfor2": "سي $1 $2",
        "nowatchlist": "شما هیچی د سیل برگ خوتو ناریت",
+       "watchlistanontext": "لطفن بیایت وامین و ویرایشتیا نه د سیل برگتو سیل بکیت.",
        "watchnologin": "وارد نبیه",
        "addwatch": "اضاف کردن د سیل برگ",
+       "addedwatchtext-short": "بلگه \"$1\" وه سیل برگ شما اضاف بیه.",
        "removewatch": "جا وه جا کردن د سیل برگ",
        "removedwatchtext": "بلگه\"[[:$1]]\" د [[Special:سیل برگ|سیل برگ خوتو]] جا وه جا بیه.",
        "removedwatchtext-short": "بلگه \"$1\" د سیل برگ جا وه جا بیه.",
        "unwatchthispage": "واداشتن دیئن",
        "notanarticle": "مینونه هیچ بلگه ای نئ",
        "notvisiblerev": "آخری وانئری که د دس یه کاریار هنی انجوم بیه پاکسا بیه.",
-       "watchlist-details": "{{جمی:$1|$1 بلگه|$1 بلگیا}} د سیل برگتو هیش بلگه قسه کردن نی .",
+       "watchlist-details": "{{جمی:$1|$1 بلگه|$1 بلگیا}} د سیل برگتو هیش بلگه قسه کردن نی.",
        "wlheader-enotif": "وارسیاری ایمیل فعال بیه.",
        "wlheader-showupdated": "بلگه یایی که د آخرین کرتی که شما دشو دیئن کردیته آلشت بینه د <strong>توپر</strong>نشون دئه بینه",
-       "wlshowlast": "آخرین$1 ساعتیا $2و روزیا $3 نشو بیئه",
+       "wlnote": "د هار {{PLURAL:$1|آلشت|<strong>$1</strong> آلشتی}} که د {{PLURAL:$2|ساعت|<strong>$2</strong> ساعت}} دماتر انجوم بیه هیئش، ویرگار آخرین واجوری انجام شده موجود است، ویرگار آخری واجوری: $3، $4",
+       "wlshowlast": "آخرین$1 ساعتیا $2و روزیا  نشو بیئه",
        "watchlist-options": "گزینیا سیل برگ",
        "watching": "د حال دیئن...",
        "unwatching": "د حال ندیئن...",
+       "watcherrortext": "یه گل اشگال د گات آلشت کردن میزونکاری نومگه سیل برگتو سی «$1» پیش اوما.",
        "enotif_reset": "همه بلگه یا دیئه بینه نشودار بکید",
        "enotif_impersonal_salutation": "{{نوم سیلجا}} کارور",
+       "enotif_subject_deleted": "{{SITENAME}} بلگه$1 وه دس{{gender:$2|$2}} پاکسا بیه.",
+       "enotif_subject_created": "{{SITENAME}} بلگه$1 وه دس{{gender:$2|$2}} دروس بیه.",
+       "enotif_subject_moved": "{{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 بکیت.",
        "enotif_lastvisited": "همه آلشتیا$1 د اوسه که شما د آخرین بار دیئته بوینیت.",
+       "enotif_lastdiff": "سی دیئن ای آلشتیا $1 نه سیل بکیت.",
        "enotif_anon_editor": "کارو ناشناس$1",
+       "created": "دروس بیه",
+       "changed": "آلشت بیه",
        "deletepage": "پاک کردن بلگه",
        "confirm": "مئكم كردن",
        "excontent": "مینونه :\"$1\" بی",
+       "excontentauthor": "مینونه بلگه یه بی: «$1» (و تئنا هومیار«[[Special:Contributions/$2|$2]]» بی)",
        "exbeforeblank": "مینونه حالی دمایی:\"$1\" بی",
        "delete-confirm": "پاکسا کردن\"$1\"",
        "delete-legend": "پاك كردن",
        "actioncomplete": "عملكرد كامل بيه",
        "actionfailed": "عملكرد شكست حرده",
+       "deletedtext": "«$1» پاکسا بیه.\nسی نهاتری پاکساگریا ایسنی وه $2 سرکشی بکیت.",
        "dellogpage": "لاگ پاك كردن",
+       "dellogpagetext": "نومگه هاری یه گل نومگه د آخری چیا پاکسا بیه هئ.",
        "deletionlog": "پهرستنومه پاک بیئن",
+       "reverted": "لرسه د نزیکترین وانئری",
        "deletecomment": "دليل:",
        "deleteotherreason": "دليليا هنی:",
        "deletereasonotherlist": "دلیل هنی",
        "deletereason-dropdown": "* دلیلیا پاکسا کردن رسم بیه\n** اسپم\n** خراوکاری\n** رعایت نبین کپی رایت\n** درحاست نیسنه\n** نهاورگشت شکست حرده",
        "delete-edit-reasonlist": "دلیلیا پاکسا کردنه نه ویرایشت بکید",
+       "deleteprotected": "شما نمی تونیت ای بلگه نه پاکسا بکیت سی یه که وه پر و پیم بیه.",
+       "rollback": "چواشه کردن ویرایشتیا",
+       "rollback_short": "چواشه کردن",
        "rollbacklink": "ورگشتن",
+       "rollbacklinkcount": "چواشه کردن $1 {{PLURAL:$1|ویرایشت|ویرایشتیا}}",
+       "rollbacklinkcount-morethan": "چواشه کردن بیشتر د$1 {{PLURAL:$1|ویرایشت|ویرایشتیا}}",
+       "rollbackfailed": "چواشه کردن د خوئی انجوم نبی",
+       "cantrollback": "نبوئه ویرایشت نه پاکساگری بکیت:\nآخری هومیار تئنا نیسنه ای گوتاره.",
+       "editcomment": "ویرایشت چکشه وه: \"''$1''\" بی.",
+       "rollback-success": "ویرایشتیا $1 پاکساگری بی؛\nبلگه وه آخری ویرایشت $2 آلشت بیه.",
        "sessionfailure-title": "شکست حردن نشینگه",
        "protectlogpage": "حفاظت کردن",
        "protectedarticle": "حفاظت بيه [[$1]]",
        "modifiedarticleprotection": "ریتراز حفاظت د \"[[$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-text": "امکان پر و پیم کردن ای بلگه سی یه که نوع محدودیتی ناره، وجود ناره.",
+       "protect-norestrictiontypes-title": "بلگه بی حامین گر",
+       "protect-legend": "پشت راس کردن حامین گری",
        "protectcomment": "دلیل:",
+       "protectexpiry": "تموم بين:",
+       "protect_expiry_invalid": "گات تموم بیین نامعتوره.",
+       "protect_expiry_old": "گات تموم بیین مال دماتره.",
+       "protect-unchain-permissions": "وا کردن گزینه یا هنی پر و پیم کردن",
        "protect-default": "همه کاروریا اجازه دارن",
+       "protect-fallback": "فقط کاریاریایی که وه «$1» دسرسی دارن، صلادار ای کارن",
+       "protect-level-autoconfirmed": "فقط کاریاریا که خودپشت راس بینه صلادارن",
+       "protect-level-sysop": "فقط دیوونداریا",
+       "protect-summary-desc": "[$1=$2] ($3)",
+       "protect-summary-cascade": "د حال و بال تافنمایی",
+       "protect-expiring": "گات تموم بیین $1 (یو تی سی)",
+       "protect-expiring-local": "گات تموم بیین $1",
+       "protect-expiry-indefinite": "بی زمون",
+       "protect-cascade": "پر و پیم بیین تافنمایی- همه بلگه یایی که هان د ای بلگه پر و پیم بوئن.",
        "protect-othertime": "وخت هنی:",
        "protect-othertime-op": "گات هنی",
+       "protect-existing-expiry": "گات تموم بیین ایسنی: $2، $3",
+       "protect-existing-expiry-infinity": "گات تموم بیین: بی گاته",
+       "protect-otherreason": "دلیل اضافی/هنی:",
        "protect-otherreason-op": "دلیل هنی",
+       "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": "ریتراز محدودیت:",
        "minimum-size": "انازه کمترونه",
        "maximum-size": "انازه بیشترونه",
        "pagesize": "(بایتیا)",
        "restriction-move": "جاوه جا بوئيت",
        "restriction-create": "راس كردن",
        "restriction-upload": "سوار کرد",
+       "restriction-level-sysop": "کلا پر و پیم بیه",
+       "restriction-level-autoconfirmed": "نصم و نیمه پر و پیم بیه",
        "restriction-level-all": "هر ریترازی",
+       "undelete": "دیئن بلگه یا پاکسا بیه",
+       "undeletepage": "دیئن و  ؤرگشتن بلگه یا پاکسا بیه",
+       "viewdeletedpage": "دیئن بلگه یا پاکسا بیه",
+       "undelete-fieldset-title": "د نو زنه کردن وانئریا",
+       "undeleterevisions": "$1 نسقه مال دیاری{{PLURAL:$1|بیه|بینه}}",
+       "undelete-revision": "نسقه پاکسا بیه $1 (د ویرگار$4 ساعت $5) وه دس $3:",
+       "undelete-nodiff": "وانئری دماتری پیدا نبیه.",
+       "undeletebtn": "د نو زنه کردن",
        "undeletelink": "بوين/دوواره آماده با",
        "undeleteviewlink": "ديئن",
+       "undeleteinvert": "انتخاو برعسك بوئه",
        "undeletecomment": "دليل:",
+       "undeletedrevisions": "وانئری$1 د نو زنه{{PLURAL:$1|بی}}",
+       "undeletedrevisions-files": "{{PLURAL:$1|1 وانئری|$1 وانئریا}} و{{PLURAL:$2|1 جانیا|$2 جانیا}} د نو زئنه بینه.",
+       "undeletedfiles": "{{PLURAL:$1|1 جانیا|$1 جانیایا}} د نو زنه بیه",
        "cannotundelete": "زنه کردن انجوم نبی:$1",
+       "undelete-header": "سی دیئن بلگه یا پاکسا بیه ایسنی [[Special:Log/delete|پهرستونمه پاکسا بیین]] نه سیل بکیت.",
        "undelete-search-title": "بلگه یا پاکسا بیه نه پی جوری کو",
+       "undelete-search-box": "پی جوری بلگه یا پاکسا بیه",
+       "undelete-search-prefix": "بلگه یایی که وا شرو بیه نشو بیه:",
        "undelete-search-submit": "پی جوری",
+       "undelete-no-results": "هیچ بلگه یکی بیینی د مال دیارکن پاکسا بیه یا نئ.",
+       "undelete-cleanup-error": "خطا د پاکسا کردن ویرگارچه وه کار نگرته بیه د«$1».",
+       "undelete-error": "خطا بلگه ای که نبوئه پاکساش بکی",
        "undelete-error-short": "خطا پاک نبیئن جانیا:$1",
+       "undelete-error-long": "د گات زنه کردن جانیا یه گل خطا پیش اوما:\n\n\n$1",
        "undelete-show-file-submit": "هری",
+       "undelete-revision-row": "$1 $2 ($3) $4 . . $5 $6 $7 $8 $9",
        "namespace": "نوم جا:",
        "invert": "انتخاو برعسك بوئه",
+       "namespace_association": "نوم جایا یکاگرته",
        "blanknamespace": "اصلی",
        "contributions": "{{جنس:$1|کارور}} هومیاریا",
        "contributions-title": "هومياري كارور سي $1",
        "mycontris": "هومياری",
        "contribsub2": "سي {{جنسيت:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "کاریار \"$1\" ثوت نام نکرده.",
+       "nocontribs": "هیچ آلشتی وا ای مشقصات دیاری نکرد.",
        "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-talk": "چك چنه",
+       "sp-contributions-userrights": "دیوونداری حقوق کاریار",
        "sp-contributions-search": "سی هومیاریا پی جور با",
        "sp-contributions-username": "نوم نشون آی پی يا نوم كاروری:",
        "sp-contributions-toponly": "فقط ویرایشتیایی که جزئه آخرین دوواره دیئن هئین نشو بیه",
+       "sp-contributions-newonly": "فقط ویرایشتیایی که مال دروس کردن بلگه هیئن نشو بیه.",
        "sp-contributions-submit": "پی جوری",
        "whatlinkshere": "كؤم ديس ونيا هان ايچه",
        "whatlinkshere-title": "بلگه ای که د $1 هوم پیوند بیه",
        "whatlinkshere-page": "بلگه",
        "linkshere": "بلگیا نهایی د '''[[:$1]]''' هوم پیوند بیه",
        "nolinkshere": "هیژ بگله ای د  '''[[:$1]]''' هوم پیوند نبیه",
+       "nolinkshere-ns": "هیچ بلگه ای د نومجا انتخاو بیه وه'''[[:$1]]''' هوم پیوند ناره.",
        "isredirect": "بلگه دوباره ورگشتن",
        "istemplate": "نشونی دئن",
        "isimage": "فایل هوم پیوند",
        "whatlinkshere-hidelinks": "هوم پیوندیا $1",
        "whatlinkshere-hideimages": "فایل هوم پیوندیا $1",
        "whatlinkshere-filters": "فيلتريا",
+       "autoblockid": "خود نهاگری #$1",
        "block": "منع کارور",
-       "blockip": "منع کارور",
+       "unblock": "کاریار نهاگری نبیه",
+       "blockip": "نهاگری{{GENDER:$1|کاریار}}",
+       "blockip-legend": "نهاگری کاریار",
        "ipaddressorusername": "نوم نشون آی پی يا نوم كاروری:",
+       "ipbexpiry": "تموم بين:",
        "ipbreason": "دليل:",
+       "ipb-hardblock": "پیشگری د ویرایشت کردن کاریاریی که د طریق ای تیرنشون آی پی وامین اومانه.",
+       "ipbcreateaccount": "نهاگری دروس کردن حساو",
        "ipbemailban": "نهاگرتن کاریار د کل کردن انجومانامه",
+       "ipbenableautoblock": "بستن خودانجوم آخری تیرنشون آی پی وه کار گرته بیه وه دس کاریار و تیرنشونیا هنی که که د ونو سی ویرایشت وه سعی می کن.",
+       "ipbsubmit": "نهاگری ای کاریار",
        "ipbother": "وخت هنی:",
        "ipboptions": "2 ساعتیا:2 ساعت,1 رو:1 رو,3 روزا:3 رو,1 هفته:1 هفته,2 هفته یا:2 هفته,1 ما:1 ما,3 ما:3 میا,6 ما:6 مایا,1 سال:1سال,بی حساو:بی حساو",
        "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": "واز کردن نوم کاریاری یا تیرنشون آی پی",
+       "ipb-blocklist": "دیئن نهاگرتن یا ایسنی",
+       "ipb-blocklist-contribs": "هومیاریا $1",
        "unblockip": "کارور منع نبیه",
+       "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": "قام کردن تکی نهاگرتن آی پیا",
+       "blocklist-rangeblocks": "قام کردن پوشینه نهاگرتنیا",
        "blocklist-timestamp": "چسب ون وخت",
+       "blocklist-target": "مقصد",
+       "blocklist-expiry": "تموم بين",
+       "blocklist-by": "دیووندار نهاگیرنه",
+       "blocklist-params": "پارامتریا قلف کردن",
+       "blocklist-reason": "دلیل",
        "ipblocklist-submit": "پی جوری",
+       "ipblocklist-localblock": "نهاگری ولات نشینی",
+       "ipblocklist-otherblocks": "هنی{{PLURAL:$1|نهاگرتن|نهاگرتنیا}}",
+       "infiniteblock": "بی زمون",
+       "expiringblock": "د $1 ساعت $2 تموم موئه",
+       "anononlyblock": "فقط کاریاریا نادیار",
+       "noautoblockblock": "بستن خودانجوم ناکشتگر بیه",
+       "createaccountblock": "حساو راس کردن ناکشتگر بیه.",
+       "emailblock": "انجومانامه ناکشتگر بیه",
        "blocklist-nousertalk": "نبوئه بلگه چک چنه خوتونه ویرایشت بکید",
        "ipblocklist-empty": "جاگه نوم گه حالیه",
+       "ipblocklist-no-results": "دسرسی نوم کاریاری یا تیرنشون آی پی حاسته بیه نهاگری نبیه.",
        "blocklink": "بسته بوئه",
        "unblocklink": "بی قطی",
        "change-blocklink": "اجازه نديئن سی  آلشت",
        "emaillink": "انجومانامه نه کل کو",
        "blocklogpage": "قلف",
        "blocklogentry": " [[$1]] وا یه گل وخت تموم بیئن $2 و $3  قلف بیه",
+       "reblock-logentry": "میزوکاری سی نهاگری[[$1]] آلشت بیه سی آخر نهاگری د $2 $3",
+       "unblocklogentry": "وا کردن قلف $1",
+       "block-log-flags-anononly": "فقط کاریاریایی که نادیارن",
        "block-log-flags-nocreate": "حساو راس کردن عاجز بیه.",
+       "block-log-flags-noautoblock": "بستن خودانجوم ناکشتگر بیه",
+       "block-log-flags-noemail": "انجومانامه ناکشتگر بیه",
        "block-log-flags-nousertalk": "نبوئه بلگه چک چنه خوتونه ویرایشت بکید",
+       "block-log-flags-angry-autoblock": "نهاگری خودانجوم پئشکرده کنشتگر بیه",
+       "block-log-flags-hiddenname": "نوم کاروری قام بیه",
+       "range_block_disabled": "درس کردن بسن یه گل پوشگر وه دس دیوونداریا ناکنشتگر بیه.",
+       "ipb_expiry_invalid": "گات تموم بیین نامعتوره.",
+       "ipb_expiry_temp": "نهاگری نوم کاریاریا قام بیه واس همیشه یی با.",
+       "ipb_already_blocked": "\"$1\" ایسه نهاگری بیه.",
+       "ipb-needreblock": "$1 د دماتر نهاگری بیه. آیا میهایت میزوکاری ونه آلشت بیتو؟",
+       "ipb-otherblocks-header": "هنی{{PLURAL:$1|نهاگرتن|نهاگرتنیا}}",
+       "ip_range_invalid": "پوشگر نامعتور آی پی",
+       "ip_range_toolarge": "نهاگری پوشینه یا گپتر $1/ مجاز نئ.",
        "proxyblocker": "قلف کننه پروکسی",
+       "sorbs": "دی ان اس بی ال",
+       "ipbnounblockself": "شما صلادار وارکدن دسرسی خوتو نییت.",
        "lockdb": "قلف کردن رسینه گا",
+       "unlockdb": "رسینه گا قلف نبیه",
+       "lockconfirm": "هره، مه واقعند میهام که رسینه گا نهاگری با.",
        "unlockconfirm": "هره، مه واقعند میهام که رسینه گا وا بوئه.",
        "lockbtn": "قلف کردن رسینه گا",
        "unlockbtn": "رسینه گا قلف نبیه",
+       "locknoconfirm": "شما کلیت پشت راسکاری نه نشودار نکردیته.",
        "lockdbsuccesssub": "رسینه گا د خوئی قلف بیه",
+       "unlockdbsuccesssub": "قلف رسینه گا ؤرداشته بیه",
+       "unlockdbsuccesstext": "رسینه گا وا بیه.",
+       "databasenotlocked": "رسینه گا وازه.",
+       "lockedbyandtime": "(وا{{GENDER:$1|$1}} د $2 د$3)",
        "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": "<strong>\"$1\" جا وه جا بیه سی \"$2\"</strong>",
        "movepage-moved-redirect": "یه گل واگردونی دروس بیه.",
+       "movepage-moved-noredirect": "د دروس کردن واگردونی جلوگری بیه.",
+       "movetalk": "بلگه چک چنه ئم جا وه جا بوئه",
+       "move-subpages": "جا وه جایی بلگه یا(تا $1 بلگه)",
+       "move-talk-subpages": "جا وه جا کردن زیر بلگه یا بلگه چک چنه (تا $1 بلگه)",
+       "movepage-page-moved": "بلگه $1 د $2 جا وه جا بیه",
+       "movepage-page-unmoved": "نبوئه بلگه $1 د $2 جا وه جا بوئه",
        "movelogpage": "جاوه جا کردن",
        "movelogpagetext": "د هار یه گل نوم گه د جا وه جایی یا بلگه هئ",
+       "movesubpage": "{{جمی:$1|زیر بلگه|زیر بلگه یا}}",
+       "movenosubpage": "ای بلگه زیر بلگه نئ.",
        "movereason": "دلیل:",
        "revertmove": "لرستن",
        "delete_and_move": "پاکسا و جا وه جا بوئه",
+       "delete_and_move_confirm": "هری بلگه نه پاکسا کو",
+       "delete_and_move_reason": "پاکساکاری سی ممکن بیین جا وه جایی «[[$1]]»",
+       "immobile-source-namespace": "نبوئه بلگه یا نه وه نومجا \"$1\" جا وه جا با",
+       "immobile-target-namespace": "نبوئه بلگه یا نه وه نومجا \"$1\" جا وه جا با",
+       "immobile-target-namespace-iw": "هوم پیوند مینجاویکی حاستنی مجازی سی جا وه جا کردن بلگه نئ.",
+       "immobile-source-page": "ای بلگه جا وه جا کردنی نئ.",
+       "immobile-target-page": "نبوئه وه ای مقصد چنی سرونی جا وه جا بوئه.",
+       "imagenocrossnamespace": "نبوئه جانیانه وه یه گل نومجا غیرجانیایی جا وه جا بکیت",
+       "nonfile-cannot-move-to-file": "نبوئه جانیانه وه یه گل نومجا غیرجانیایی جا وه جا بکیت",
+       "imagetypemismatch": "دماون جانیا تازه وا نوع وه سازگاری ناره",
+       "imageinvalidfilename": "نوم جانیا هدف معتور نئ",
+       "fix-double-redirects": "وه هنگوم سازی همه واگردونیایی که وه گوتار اصلی هشاره میکن",
+       "move-leave-redirect": "وه جا نیائن یه گل واگردونی",
+       "protectedpagemovewarning": "<strong>زئنار:ای بلگه سی یه پر و پیم بیه که کاریاریایی که دسرسی دیوونداری دارن فقط بتونن دش ویرایشت بکن.</strong>\nآخرین سیائه سی سرچشمه یا د هار اماییه کاری بیه:",
+       "semiprotectedpagemovewarning": "<strong>د ویر داشتویت:</strong> ای بلگه سی یه که فقط کاریاریا ثوت نام کرده تونستون دش ویرایشت بکه ن پر و پیم بیه.\nآخرین پهرستنومه دئه بیه سی سرچشمه هار نها اماییه بیه:",
        "export": "وه صحرا ديئن بلگيا",
+       "exportall": "وه صحرا ديئن همه بلگيا",
+       "exportcuronly": "فقط مینونه دار وانئری ایسنی با،نه همه ویرگار نه",
+       "exportlistauthors": "مینونه دار نومگه کامل هومیاریا سی هر بلگه",
+       "export-submit": "وه در ديئن",
+       "export-addcattext": "اضاف کردن بلگه یا د یه گل دسه:",
        "export-addcat": "اضاف کو",
+       "export-addnstext": "اضاف کردن بلگه یا د یه نومجا:",
        "export-addns": "اضاف كو",
        "export-download": "ذخیره کردن جانیا",
        "export-templates": "شامل چوئه یا",
+       "export-pagelinks": "مینونه دار بیین بلگه یا هوم پیوند تا ای پی یا:",
        "allmessages": "سامونه پیغومیا",
        "allmessagesname": "نوم",
        "allmessagesdefault": "سفارشت متنی پيش فرض",
+       "allmessagescurrent": "نیسسه ایسنی پیغوم",
        "allmessages-filter-legend": "فیلتر",
+       "allmessages-filter": "فیلتر کردن د اساس شخصی کردن:",
+       "allmessages-filter-unmodified": "آلشت نبیه",
        "allmessages-filter-all": "همه",
        "allmessages-filter-modified": "آلشت بیه",
        "allmessages-prefix": "فیلتر بیه وا نهاون:",
        "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_invalid_params": "بن کلیکی وا پارامتریا نامعتور",
+       "thumbnail_dest_directory": "نبوئه دایرکتوری مقصد نه درست بکیت",
+       "thumbnail_image-type": "نوع عسگ حامیین داری نبوئه",
+       "thumbnail_image-missing": "وه ویر و باور میا که جانیا گم بیه:$1",
+       "import": "وامین اوردن بلگه یا",
+       "importinterwiki": "وامین اوردن ترانس ویکی",
+       "import-interwiki-sourcewiki": "سرچشمه ویکی:",
+       "import-interwiki-sourcepage": "بلگه سرچشمه:",
+       "import-interwiki-history": "ؤرداشتن ویرگار همه وانئریا سی ای بلگه",
+       "import-interwiki-templates": "همه چوئه یا",
+       "import-interwiki-submit": "وامین اوردن",
+       "import-interwiki-namespace": "نومجا مقصد:",
+       "import-interwiki-rootpage": "ریشه بلگه مقصد(دل به حایی):",
        "import-upload-filename": "نوم جانیا:",
        "import-comment": "ویر و باور:",
+       "importstart": "د حال و بار وامین اوردن",
+       "import-revision-count": "$1 {{جمی:$1|وانئری|وانئریا}}",
+       "importnopages": "هیچ بلگه ای وامین نیومائه.",
+       "imported-log-entries": "$1 {{PLURAL:$1|داده وار پهرستنومه|داده وار پهرستنومه یا}} وامین اومائه.",
+       "importfailed": "وامین اوردن شکست حرده: <nowiki>$1</nowiki>",
+       "importunknownsource": "نوع سرچشمه وامین اوردن نادیاره",
        "importcantopen": "نبوئه جانیا دئه بیه نه وا بکید",
+       "importbadinterwiki": "هوم پیوند مینجاویکی گن",
+       "importsuccess": "وامین اوردن تموم بی!",
        "importnofile": "هیچ جانیا دئه بیه ای سوار نبیه.",
+       "importuploaderrorpartial": "د سوارکرد وامین اوردن جانیا شکستی پیش اومائه.\nانازه جانیا د انازه بیشترونه مجاز گپتره.",
+       "importuploaderrortemp": "د سوارکرد جانیا وامین اوردن مشگلی پیش اومائه.\nتابنده موقت گم بیه.",
+       "import-parse-failure": "خطا د وااشکافت یه گل وامین اوردن ایکس ام ال",
+       "import-noarticle": "هیچ بلگه ای سی وامین اوردن نئ!",
+       "import-nonewrevisions": "وانئرییا وامین اورده نبیه(همه یا د ایسنی هئشو، یا سی پیش اومائن خطا ور نظر نبینه).",
+       "xml-error-string": "$1 د خط$2, ستین $3 (byte $4): $5",
        "import-upload": "سوار کرد دونسمنیا ایکس ام ال",
        "import-token-mismatch": "کمبود د دونسمنیا نشینگه.\nلطفن هنی کوششت بکید.",
+       "import-invalid-interwiki": "نبوئه د ویکی دیارکرده چی یی وامین اورد.",
+       "import-error-edit": "بلگه «$1» وامین نیومائه، سی یه که شما نمی تونیت ونه ویرایشت بکیت.",
+       "import-error-create": "بلگه «$1» وامین نیومائه، سی یه که شما نمی تونیت ونه راست بکیت.",
+       "import-error-interwiki": "بلگه «$1» وامین نیومائه، سی یه که نوم وه سی یه گل هوم پیوندگری خارجی اماییه کاری بیه(مینجا ویکی).",
+       "import-error-special": "بلگه «$1» وامین نیومائه، سی یه که وه مال وه یه گل نومجا خاصه که او بلگه یا صلادار نئین.",
+       "import-error-invalid": "بلگه \"$1\"  سی یه که نامعتور بیین نومش ممکن بی د ویکی وامین اورده نبیه.",
+       "import-error-unserialize": "نبوئه وه دراوردن بلگه $2 د بلگه «$1» د شکل رازینه کاری بیه نه انجوم بییت.چؤ اومائه که نسقه ای د مدل مینونه $3 وه کار گرته که وه د شکل $4 رازینه کاری بیه.",
+       "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 {{جمی:$1|وانئری|وانئریا}} وامین اومانه",
+       "import-logentry-interwiki": "$1 نه تراویکی کرد",
+       "import-logentry-interwiki-detail": "$1 {{جمی:$1|وانئری|وانئریا}} د $2 وامین اومائنه",
+       "javascripttest": "ازمایشت کردن جاوا اسکریپت",
+       "javascripttest-title": "د حال انجوم دئن ازمایشتیا $1",
+       "javascripttest-pagetext-noframework": "ای بلگه سی انجوم دئن ازمایشتیا جاوا اسکریپت اماییه کاری بیه.",
+       "javascripttest-pagetext-unknownframework": "چوئه کار نادیار ازمایشت \"$1\"",
+       "javascripttest-pagetext-frameworks": "لطفن یه گل د چوئه یا ازمایشت هاری نه انتخاو بکیت :$1",
+       "javascripttest-pagetext-skins": "یه گل پوسه نه سی انجوم دئن ازمایشتا انتخاو بکیت:",
+       "javascripttest-qunit-intro": "[$1 مستندیا ازمایشت] نه د mediawiki.org سیل بکیت.",
+       "javascripttest-qunit-heading": "کومله ازمایشت QUnit جاوااسکریپت سی ویکی وارسگر",
        "tooltip-pt-userpage": "بلگه كارورتو",
+       "tooltip-pt-anonuserpage": "بلگه کاریاری تیرنشون آی پی ای که دش ویرایشت می کید",
        "tooltip-pt-mytalk": "بلگه قسه كردن شما",
+       "tooltip-pt-anontalk": "چک چنه دباره ویرایشتیا ای تیرنشون آی پی",
        "tooltip-pt-preferences": "اولويتيا شما",
        "tooltip-pt-watchlist": "نوم نوشت د بلگه يايی كه شما آلشتاشونه پيگئری  ميكيد",
        "tooltip-pt-mycontris": "يه گل د هومياريا شما",
        "tooltip-ca-viewsource": "ای بلگه حفاظت بيه.\nشما تونيت سرچمه ش بئوينيت",
        "tooltip-ca-history": "دوواره ديئن ای بلگه",
        "tooltip-ca-protect": "ای بلگه نه حفاظت بكيد",
+       "tooltip-ca-unprotect": "پر و پیم گیری د ای بلگه نه آلشت بکیت",
        "tooltip-ca-delete": "ای بلگه نه پاکسا کو",
+       "tooltip-ca-undelete": "د نو زنه کردن ویرایشتیا ری ای بلگه دما یه که پاکساگری بان",
        "tooltip-ca-move": "ای بگله نه جا وه جا كو",
        "tooltip-ca-watch": "اضاف کردن ای بلگه وه نوم نوشت پیگئریاتو",
        "tooltip-ca-unwatch": "ورداشتن ای بلگه وه نوم نوشت پیگئریاتو",
        "tooltip-n-help": "جاگه سی فهمسن",
        "tooltip-t-whatlinkshere": "سيائه تمؤم بلگيایی كه ايچه چسب ون دارن",
        "tooltip-t-recentchangeslinked": "تغيريا تازه باو مئن بلگيايي كه د ای بلگه چسب وند بيئنه",
+       "tooltip-feed-rss": "هوال حون آر اس اس سی ای بلگه",
        "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-special": "اي بلگه ويجه يه، شما نتونيت خود اي بلگه نه ويرايشت بكيد",
        "tooltip-ca-nstab-project": "ديئن بلگه پروجه",
        "tooltip-ca-nstab-image": "ديئن بلگه فايل",
+       "tooltip-ca-nstab-mediawiki": "دیئن پیغوم سامونه",
        "tooltip-ca-nstab-template": "ديئن قالو",
+       "tooltip-ca-nstab-help": "ديئن بلگه هومیاری",
        "tooltip-ca-nstab-category": "ديئن بلگه دسه بنی",
        "tooltip-minoredit": "یه نه د عنوان حیرده ویرایشت ثوت کو",
        "tooltip-save": "آلشتياتونه اماییه بكيد",
        "tooltip-diff": "آلشتیا نه که شما د ای متن راس کردیته نشو بیئه",
        "tooltip-compareselectedversions": "فرخیا مینجا دو تا د دو بار دیئن ای بلگه نه بوینیت",
        "tooltip-watch": "ای بلگه نه د سیل برگتو اضاف بکید",
+       "tooltip-watchlistedit-normal-submit": "ؤرداشتن سرونیا",
+       "tooltip-watchlistedit-raw-submit": "وه هنگوم سازی سیل برگ",
+       "tooltip-recreate": "د نو راس کردن بلگه بی یه که و پاکساگری دماتر وه سیل بکیم",
        "tooltip-upload": "شرو د سوار کرد",
        "tooltip-rollback": "\"ورگشتن\" لرستن د حالت اول  سی ای بلگه  که سی  يه كه هومياری  نيايی اصلاح بيه وا يه پورنسن",
        "tooltip-undo": "انجوم نگرتن ای ویرایشت ورگن و همه فرمیا ویرایشت تانه که حالت پیش سیل واکو.یه اجازه میئه سی اضاف کردن یه دلیل د چکسته.",
+       "tooltip-preferences-save": "اولويتيا نه ذخيره بكيد",
        "tooltip-summary": "يه چكسته كؤچك وارد بكيد",
        "interlanguage-link-title": "$1-$2",
+       "interlanguage-link-title-nonlang": "$1 – $2",
        "anonymous": "ناشناس {{جمی:$1|کارور|کاروریا}}  {{سیل جا}}",
+       "siteuser": "{{نوم سیلجا}} کارور $1",
        "anonuser": "{{سیل جا}}  کارور ناشناس $1",
+       "lastmodifiedatby": "ای بلگه آخری بار د $1,$2 وه دس $2 آلشت دئه بیه.",
+       "othercontribs": "د اساس کار وا $1.",
+       "others": "دیه رون",
        "siteusers": "{{نوم سیل جا}} {{جمی:$2|کارور|کاروریا}} $1",
+       "anonusers": "{{نوم سیل جا}} نادیار {{جمی:$2|کاریار|کاریاریا}} $1",
+       "creditspage": "اعتوار بلگه",
+       "nocredits": "دونسمنیا راس کننه یا ای بلگه د دسرس نئ",
+       "spamprotectiontitle": "فیلتر پر و پیم گری د اسپم",
+       "spamprotectionmatch": "نیسسه هاری چی ای یه که فیلتر اسپم ایما نه ونه د کار: $1",
+       "spambot_username": "اسپم پاک کن ویکی وارسگر",
+       "spam_reverting": "واگردونی وه آخری نسقه ای که هوم پیوندی وه $1 ناره.",
+       "spam_blanking": "همه وانئریایی که مینونه دار هوم پیوند $1 هئن، دارن حالی بوئن",
+       "spam_deleting": "همه وانئریایی که مینونه دار هوم پیوند $1 هئن، دارن پاکساگری بوئن",
+       "simpleantispam-label": "وارسی ضد اسپم.\nای \"جاگه\" نه پر نکیت!",
+       "pageinfo-title": "دونسمنیا سی \"$1\"",
+       "pageinfo-not-current": "د بدبختی،نبوئه که ای دونسمنیا نه سی وانئریا دماتری نهااماییه بکیت.",
+       "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-redirects-value": "$1",
+       "pageinfo-subpages-name": "انازه زیربلگه یا ای بلگه",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|واگردونی|واگردونیا}}; $3 {{PLURAL:$3|بی واگردونی|بی واگردونیا}})",
+       "pageinfo-firstuser": "بلگه راس کن",
+       "pageinfo-firsttime": "گات دروس بیین بلگه",
+       "pageinfo-lastuser": "آخری ویرایشتگر",
+       "pageinfo-lasttime": "گات آخری ویرایشت",
+       "pageinfo-edits": "شماره همه ویرایشتیا",
+       "pageinfo-authors": "شماره کلی نویسنه یا یکونه",
+       "pageinfo-recent-edits": "شماره ویرایشتیا ایسنی (د $1 دماتر)",
+       "pageinfo-recent-authors": "شماره کلی نویسنه یا یکونه",
+       "pageinfo-magic-words": "جادویی{{PLURAL:$1|کلیمه|کلیمه یا}} ($1)",
+       "pageinfo-hidden-categories": "$1{{جمی:$1|دسه|دسه يا}} قام بیه",
+       "pageinfo-templates": "{{PLURAL:$1|چوئه|چوئه یا}} وه کار گرته بیه($1)",
+       "pageinfo-transclusions": "{{PLURAL:$1|بلگه|بلگه یا}} وه کار گرته بیه د ($1)",
+       "pageinfo-toolboxlink": "دونسمنیا بلگه",
        "pageinfo-redirectsto": "واگردونی سی",
+       "pageinfo-redirectsto-info": "دونسمنیا",
+       "pageinfo-contentpage": "اشمارده بیه وه عنوان مینونه بلگه",
+       "pageinfo-contentpage-yes": "هری",
+       "pageinfo-protect-cascading": "پر و پیم بیین تافنمایی د ایچه",
+       "pageinfo-protect-cascading-yes": "هری",
+       "pageinfo-protect-cascading-from": "پر و پیم بیین تافنمایی د",
+       "pageinfo-category-info": "دونسمنیا دسه ای",
+       "pageinfo-category-pages": "شماره بلگيا",
+       "pageinfo-category-subcats": "شماره زیر دسه یا",
        "pageinfo-category-files": "شماره جانیایا",
+       "markaspatrolleddiff": "نشو دار کردن چی سردیاری بیه",
+       "markaspatrolledtext": "ای بلگه نه چی بلگه ای که سردیاری کرده با نشودار کو",
+       "markedaspatrolled": "نشو دار کردن چی سردیاری بیه",
+       "rcpatroldisabled": "سردیاری کردن سی آلشتیا ایسنی ناکنشتگر بیه",
+       "rcpatroldisabledtext": "خصوصیت سردیاری کردن د ری آلشتیا ایسنی تازه ای یا ناکشتگر بیه.",
+       "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\n$1",
+       "filedelete-missing": "نبوئه جانیا \"$1\" نه پاکسا بکیت سی یه که وه وجود ناره.",
+       "filedelete-old-unregistered": "وانئری جانیا تیارکرده \"$1\" د رسینه جا وجود ناره.",
+       "filedelete-current-unregistered": "جانیا تیارکرده \"$1\" د رسینه جا نئیش.",
+       "filedelete-archive-read-only": "نشونگه مال دیارکردن ($1) د لا سرور قاول نیسنن نئ.",
        "previousdiff": "← ويرايشت كۈهنه تر",
        "nextdiff": "ويرايشت تازه تر",
+       "imagemaxsize": "انازه عسگ:<br /><em>(سی شرح جانیا بلگه یا)</em>",
+       "thumbsize": "انازه بن کلکی:",
+       "widthheight": "$1 × $2",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|بلگه|بلگه یا}}",
+       "file-info": "انازه جانیا: $1, MIME type: $2",
        "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-animated": "جانیا جمشدار اس وی جی .نومنا $1 × $2 پيكسل،انازه جانیا:$3",
+       "svg-long-error": "جانیا اس وی جی نامعتور:$1",
        "show-big-image": "فایل اصلی",
+       "show-big-image-preview": "انازه ای پیش سیل:$1.",
+       "show-big-image-other": "هنی{{PLURAL:$2|گپ نما کردن|گپ نما کردنیا}}: $1.",
+       "show-big-image-size": "$1 × $2 pixels",
+       "file-info-gif-looped": "حلقه دار",
+       "file-info-gif-frames": "$1 {{PLURAL:$1|فریم|فریمیا}}",
+       "file-info-png-looped": "حلقه دار",
        "file-info-png-repeat": "$1 بازی کرده{{جمی:$1|وخت|وختیا}}",
+       "file-info-png-frames": "$1 {{PLURAL:$1|فریم|فریمیا}}",
        "newimages": "عسگدونی جانیایا تازه",
+       "imagelisttext": "د هار نومگه <strong>$1</strong> {{PLURAL:$1|جانیا|جانیایا}} اماییه جا بیه$2.",
        "newimages-summary": "ای بلگه یا ویجه همه جانیایا سوار بیه نه نشو می ئین.",
+       "newimages-legend": "فیلتر",
        "newimages-label": "نوم جانیا(یا بشقی د وه):",
+       "newimages-showbots": "سوارکردیا نه وا بوتیا نشو بیه",
+       "noimages": "هیچی سی دیئن نئ",
        "ilsubmit": "پی جوری",
+       "bydate": "وا گات",
        "sp-newimages-showfrom": "جانیایا تازه نه که $2 ، $2 شرو بینه نشو بیه",
+       "video-dims": "$1, $2 × $3",
+       "seconds-abbrev": "$1 s",
+       "minutes-abbrev": "$1 دیقه",
+       "hours-abbrev": "$1 ساعت",
+       "days-abbrev": "$1 گات",
+       "seconds": "{{PLURAL:$1|$1 ثانیه|$1 ثانیه یا}}",
+       "minutes": "{{PLURAL:$1|$1 دیقه|$1 دیقه یا}}",
+       "hours": "{{PLURAL:$1|$1 ساعت|$1 ساعت یا}}",
        "days": "{{جمی:$1|1$ روز|$1 روز}}",
+       "weeks": "{{PLURAL:$1|$1 هفته|$1 هفته یا}}",
        "months": "{{جمی:$1|$1 ما|$1 مایا}}",
        "years": "{{جمی:$1|$1 سال|$1 سال}}",
+       "ago": "$1 دماتر",
+       "just-now": "فقط ایسه",
+       "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",
+       "yesterday-at": "دیرو د $1",
        "bad_image_list": "دونسمنديانه وه ای شلگ وارد بكيت:\n\nفقط سرخط يایی که وا * شرو بوئن د وير گرته بوئن. اولی چسب ون مئن هر سرخط، باید چسب ونی وه یک عسگ گن با.\nچسب ونيا نيایی د همو سرخط، وه عنوان چيا استثنادار د وير گرته بوئن",
        "metadata": "داديا  فره گپ",
        "metadata-help": "ای فایل شومل دونسمنیا هنی یه.شایت د دیربین رقم ون یا اسکنری که سی راس کردنشو استفاده بیه،وه ایچه اضاف بیه",
+       "metadata-expand": "نشو دئن جزییات دمادیسگری",
+       "metadata-collapse": "قام کردن جزییات دمادیسگری",
        "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-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-isospeedratings": "گرینج گری سرعت سی ایزو",
+       "exif-shutterspeedvalue": "سرعت اپکس شاتر",
+       "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-exposuremode": "شکل نیر دئن",
+       "exif-whitebalance": "موازنه نیر اسبئ",
+       "exif-digitalzoomratio": "نسوت گپ کردن دیجیتالی",
+       "exif-focallengthin35mmfilm": "انازه کانونی سی فیلم 35 میلیمتری",
+       "exif-scenecapturetype": "نوع ضفط کردن صئنه",
+       "exif-gaincontrol": "کنترل کردن صئنه",
+       "exif-contrast": "کنتراست",
+       "exif-saturation": "سیر بیین رئن",
+       "exif-sharpness": "گرینج برچ زئن",
+       "exif-devicesettingdescription": "شرح میزوکاری اوزار",
+       "exif-subjectdistancerange": "محدوده دیر د دس بیین سوجه",
+       "exif-imageuniqueid": "نوم دیار کن یکونه عسگ",
+       "exif-gpsversionid": "نسقه سردیس جی پی اس",
+       "exif-gpslatituderef": "پئنا ولاتشناسی شمالی و هارگه",
+       "exif-gpslatitude": "پئنا ولاتشناسی",
+       "exif-gpslongituderef": "درازا ولاتشناسی افتوزنون و افتونشین",
+       "exif-gpslongitude": "درازا ولاتشناسی",
+       "exif-gpsaltituderef": "جاگه سرچشمه بلنگی",
+       "exif-gpsaltitude": "جاگه بلنگی",
        "exif-gpstimestamp": "وخت جی پی اس (ساعت اتمی)",
+       "exif-gpssatellites": "ماواره یا وه کار گرته بیه سی انازه گری",
+       "exif-gpsstatus": "حال و بال گیرنه",
+       "exif-gpsmeasuremode": "شکل انازه گری",
+       "exif-gpsdop": "دقیق بیین انازه گری",
+       "exif-gpsspeedref": "واحد سرعت",
+       "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": "نوم روشت پردازشت جی پی اس",
+       "exif-gpsareainformation": "نوم راساگه جی پی اس",
+       "exif-gpsdatestamp": "گات جی پی اس",
+       "exif-gpsdifferential": "راس کردن کم د جی پی اس",
+       "exif-coordinate-format": "$1° $2′ $3″ $4",
        "exif-jpegfilecomment": "ویر و باور فایل پی ان جی",
+       "exif-keywords": "کلیمه یا کلیتی",
+       "exif-worldregioncreated": "راساگه ای د دنیا که عسگ د اوچه گرته بیه",
+       "exif-countrycreated": "ولاتی که عسگ دش گرته بیه",
+       "exif-countrycodecreated": "رازینه سی ولاتی که عسگ د وه گرته بیه",
+       "exif-provinceorstatecreated": "آستونی که عسگ دش گرته بیه",
        "exif-citycreated": "شهری که عسگ دش گرته بیه",
+       "exif-sublocationcreated": "جاگه ای د شهر که عسگ د وه گرته بیه",
+       "exif-worldregiondest": "راساگه نشو دئه بیه د دنیا",
+       "exif-countrydest": "ولات نشو دئه بیه",
+       "exif-countrycodedest": "رازینه سی ولات نمائشت دئه بیه",
+       "exif-provinceorstatedest": "آستون یا ولاتچه نشو دئه",
        "exif-citydest": "شهر دیار بیه",
+       "exif-sublocationdest": "جاگه ای د شهر که نشو دئه بیه",
+       "exif-objectname": "نوم کؤچک",
+       "exif-specialinstructions": "انجوم روشتیا ویجه",
+       "exif-headline": "سربلگه",
+       "exif-credit": "صاحاو/اماییه کار",
+       "exif-source": "سرچشمه",
+       "exif-urgency": "فوریت",
        "exif-fixtureidentifier": "نوم ثاوت",
+       "exif-writer": "نیسنه",
        "exif-languagecode": "زون",
+       "exif-iimversion": "نسقه آی آی ام",
+       "exif-iimcategory": "دسه",
        "exif-datetimeexpires": "وا نها دش استفاده نبوئه",
+       "exif-datetimereleased": "ول بیه د",
+       "exif-identifier": "نوم دیارکن",
+       "exif-lens": "لنز وه کار رتنی",
+       "exif-serialnumber": "نوم شماره دیربین",
+       "exif-cameraownername": "مالک دیربین",
+       "exif-label": "ری دیار",
+       "exif-nickname": "نوم نامرتوط سی عسگ",
+       "exif-rating": "امتیاز(د 5)",
+       "exif-copyrighted": "حال و بال کپی رایت",
+       "exif-copyrightowner": "مالک کپی رایت",
+       "exif-usageterms": "کلیمه یا وه کار گرتن",
        "exif-pngfilecomment": "ویر و باور فایل جی پی ان جی",
+       "exif-disclaimer": "کذو نومه",
        "exif-giffilecomment": "ویر و باور فایل جی آی اف",
+       "exif-intellectualgenre": "نوع مورد",
+       "exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
+       "exif-unknowndate": "گات نادیار",
+       "exif-orientation-1": "عادی",
        "exif-componentsconfiguration-0": "نی یش",
        "exif-exposureprogram-1": "دسی",
+       "exif-subjectdistance-value": "$1 متر",
+       "exif-meteringmode-0": "نادیار",
+       "exif-meteringmode-1": "میانگین",
+       "exif-meteringmode-3": "نقطه جا",
+       "exif-meteringmode-4": "چن جاگه ای",
+       "exif-meteringmode-5": "الگو",
+       "exif-meteringmode-6": "جزئی",
+       "exif-meteringmode-255": "هنی",
+       "exif-lightsource-0": "نادیار",
        "exif-lightsource-1": "روشنایی روز",
+       "exif-lightsource-2": "فلورسنت",
+       "exif-lightsource-4": "فلش",
+       "exif-lightsource-9": "هوا خو",
+       "exif-lightsource-10": "هوا اوری",
+       "exif-lightsource-11": "سایه",
+       "exif-flash-mode-3": "مد خودانجوم",
+       "exif-focalplaneresolutionunit-2": "ائنج",
+       "exif-sensingmethod-1": "نادیار",
+       "exif-customrendered-0": "پردازشت خو",
+       "exif-customrendered-1": "پردازشت همیشه ای",
+       "exif-scenecapturetype-0": "استاندارد",
+       "exif-scenecapturetype-2": "نیمری کشین",
        "exif-scenecapturetype-3": "چی شو",
+       "exif-gaincontrol-0": "هیش کوم",
+       "exif-contrast-0": "عادی",
+       "exif-contrast-1": "نرم",
+       "exif-contrast-2": "سفت",
+       "exif-saturation-0": "عادی",
+       "exif-sharpness-0": "عادی",
+       "exif-sharpness-1": "نرم",
+       "exif-sharpness-2": "سفت",
+       "exif-subjectdistancerange-0": "نادیار",
+       "exif-subjectdistancerange-1": "گپ",
+       "exif-subjectdistancerange-2": "نما بسته",
+       "exif-subjectdistancerange-3": "نما د دیر",
        "exif-gpsaltitude-above-sealevel": "$1 {{جمی:$1|متر|متریا}} وارؤ د ریتراز دریا",
        "exif-gpsaltitude-below-sealevel": "$1 {{جمی:$1|متر|متریا}} وارؤ د ریتراز دریا",
+       "exif-gpsspeed-k": "کلومتر سی هر ساعت",
+       "exif-gpsspeed-m": "مایل سی هر ساعت",
+       "exif-gpsdestdistance-k": "کلومتر",
+       "exif-gpsdestdistance-m": "مایل",
        "exif-gpsdop-good": "خو ($1)",
+       "exif-gpsdop-fair": "د ری انصاف ($1)",
+       "exif-dc-contributor": "هومیارا",
+       "exif-dc-publisher": "درتیجن",
+       "exif-dc-relation": "وارسگر مرتوط",
+       "exif-dc-rights": "حقوق",
+       "exif-dc-source": "سرچشمه وارسگر",
+       "exif-dc-type": "نوع وارسگر",
+       "exif-rating-rejected": "رد بیه",
+       "exif-isospeedratings-overflow": "گپتر د 65535",
        "exif-iimcategory-ace": "هنریا، رهزیشت و زیستگه",
-       "watchlistall2": "همه شو",
+       "exif-iimcategory-clj": "جرم و قانون",
+       "exif-iimcategory-fin": "اموری و کسم کار",
+       "exif-iimcategory-edu": "آموختاری",
+       "exif-iimcategory-evn": "زئشت گه",
+       "exif-iimcategory-hth": "تن آزایی",
+       "exif-iimcategory-hum": "حاستنی انسانی",
+       "exif-iimcategory-lab": "کار",
+       "exif-iimcategory-pol": "سیاستا",
+       "exif-iimcategory-rel": "دین و ائتقات",
+       "exif-iimcategory-sci": "دونسمنی و سازیاری",
+       "exif-iimcategory-soi": "جریانیا اشتمائی",
+       "exif-iimcategory-spo": "ورزشتا",
+       "exif-iimcategory-war": "جئن، تضاد و لیزشیوسن",
+       "exif-iimcategory-wea": "هوا",
+       "exif-urgency-normal": "خو($1)",
+       "exif-urgency-low": "هار ($1)",
+       "exif-urgency-high": "بلنگ ($1)",
        "namespacesall": "همه شو",
        "monthsall": "همه",
+       "confirmemail": "پشت راس کردن تیرنشون انجومانامه",
+       "confirmemail_send": "کل کردن رازینه پشت راس کاری",
+       "invalidateemail": "انجومشیو کردن پشت راس کردن انجومانامه",
+       "scarytranscludetoolong": "[یو آر ال فره گپه]",
+       "recreate": "د نو راس کردن",
+       "confirm_purge_button": "خوئه",
+       "confirm-watch-button": "خوئه",
+       "confirm-watch-top": "ای بلگه نه د سیل برگتو اضاف می کید؟",
+       "confirm-unwatch-button": "خوئه",
+       "confirm-unwatch-top": "ای بلگه نه د سیل برگتو ؤرمیداریت؟",
+       "semicolon-separator": ";&#32;",
+       "comma-separator": ",&#32;",
+       "colon-separator": ":&#32;",
+       "pipe-separator": "&#32;|&#32;",
+       "word-separator": "&#32;",
+       "ellipsis": "...",
+       "percent": "$1%",
+       "parentheses": "($1)",
+       "brackets": "[$1]",
+       "quotation-marks": "\"$1\"",
+       "imgmultipageprev": "بلگه دمايی",
+       "imgmultipagenext": "بلگه نهایی",
        "imgmultigo": "رؤ!",
+       "imgmultigoto": "رو د بلگه $1",
+       "img-lang-opt": "$2 ($1)",
        "img-lang-default": "(زون پیش زمینه)",
        "img-lang-go": "رو",
+       "ascending_abbrev": "ری وه وارو",
+       "descending_abbrev": "ری وه هاری",
+       "table_pager_next": "بلگه نهایی",
+       "table_pager_prev": "بلگه دمايی",
+       "table_pager_first": "سرآسونه",
+       "table_pager_last": "بلگه آخری",
+       "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-raw-title": "سیل برگ نه ردیفی ویرایشت کو",
+       "watchlistedit-raw-legend": "سیل برگ نه ردیفی ویرایشت کو",
+       "watchlistedit-raw-titles": "داسون:",
+       "watchlistedit-raw-submit": "وه هنگوم سازی سیل برگ",
+       "watchlistedit-raw-done": "سیل برگتون وه هنگوم سازی بیه.",
+       "watchlistedit-clear-title": "سیل برگ دروس بیه",
+       "watchlistedit-clear-legend": "پاک کردن سیل برگ",
+       "watchlistedit-clear-titles": "داسون:",
+       "watchlistedit-clear-done": "سیل برگتون وه پاک بیه.",
+       "watchlisttools-clear": "پاک کردن سیل برگ",
        "watchlisttools-view": "آلشتیا مرتوط نه بوینیت",
        "watchlisttools-edit": "سیل برگ بوینیتو و ویرایشت بکید",
        "watchlisttools-raw": "سیل برگ نه ردیفی ویرایشت کو",
+       "iranian-calendar-m1": "فروردین",
+       "iranian-calendar-m2": "اردیبهشت",
+       "iranian-calendar-m3": "خرداد",
+       "iranian-calendar-m4": "تیر",
+       "iranian-calendar-m5": "مرداد",
+       "iranian-calendar-m6": "شهریور",
+       "iranian-calendar-m7": "مئر",
+       "iranian-calendar-m8": "آبان",
+       "iranian-calendar-m9": "آذر",
+       "iranian-calendar-m10": "دی",
+       "iranian-calendar-m11": "بئمن",
+       "iranian-calendar-m12": "اسفند",
+       "hijri-calendar-m1": "محرم",
+       "hijri-calendar-m2": "صفر",
+       "hijri-calendar-m3": "ربیع الاول",
+       "hijri-calendar-m4": "رجو",
+       "timezone-utc": "UTC",
        "duplicate-defaultsort": "زنهار کلیت پیش فرض جور بیه $2 تازه ای یا کلید پیش فرض جوربیه $1 رد بیه.",
+       "version": "نسقه",
+       "version-specialpages": "بلگيا ويجه",
+       "version-variables": "آلشت ونا",
        "version-antispam": "نهاگرتن هرزنومه",
+       "version-other": "هنی",
+       "version-hook-name": "نوم قلاو",
+       "version-no-ext-name": "[بی نوم]",
        "version-ext-license": "ليسانس",
+       "version-skin-colheader-name": "پوسه",
        "version-ext-colheader-version": "نسقه",
        "version-ext-colheader-license": "ليسانس",
+       "version-ext-colheader-description": "شرح",
        "version-ext-colheader-credits": "نیسنه یا",
+       "version-license-title": "لیسانس سی $1",
+       "version-poweredby-others": "دیه رون",
+       "version-software-product": "نتجه",
+       "version-software-version": "نسقه",
+       "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]",
        "redirect": "واگردونی وا جانیا،بلگه یا وانیئری نوم دیارکو",
        "redirect-submit": "رو",
+       "redirect-lookup": "پی جوری:",
+       "redirect-value": "ارزایشت:",
+       "redirect-user": "نوم دياركن کاریار:",
+       "redirect-page": "نوم دیار کن بلگه",
+       "redirect-revision": "وانئری بلگه",
        "redirect-file": "نوم جانیا",
+       "redirect-not-exists": "انازه که پیدا نبی",
        "fileduplicatesearch-filename": "نوم جانیا:",
+       "fileduplicatesearch-submit": "پی جوری",
+       "fileduplicatesearch-info": "$1 × $2 pixel<br />انازه جانیا: $3<br />MIME type: $4",
        "specialpages": "بلگيا ويجه",
+       "specialpages-group-other": "بلگه یا ویجه هنی",
+       "specialpages-group-login": " اومائن د سيستم/راس كردن حساو",
        "specialpages-group-changes": "آلشتیا تازه و پهرستنومه یا",
        "specialpages-group-media": "گزارشتیا رسانه و سوارکردیا",
        "specialpages-group-users": "کاروریا و حقوق",
+       "specialpages-group-highuse": "بلگه یا فره وه کار گرته بیه",
        "specialpages-group-pages": "نوم گه بلگه یا",
+       "specialpages-group-pagetools": "اوزاریا بلگه",
+       "specialpages-group-wiki": "رسینه و اوزاریا",
        "specialpages-group-redirects": "بلگه ویجه واگردونی بیه",
+       "specialpages-group-spam": "اوزاریا اسپم",
+       "blankpage": "بلگه حالی",
        "external_image_whitelist": "یه خط نه ول بکید چی وه<pre>",
+       "tags": "سردیسیا آلشت دئن خو",
        "tag-filter": "فيلتر [[Special:Tags|Tag]]:",
+       "tag-filter-submit": "فيلتر",
+       "tags-title": "سردیسیا",
+       "tags-tag": "نوم سردیس",
        "tags-display-header": "دیاری کردن د نوم گه آلشتیا",
+       "tags-active-header": "کنشتگره؟",
+       "tags-hitcount-header": "آلشتیا سردیس دار",
+       "tags-active-yes": "هری",
+       "tags-active-no": "نه",
+       "tags-edit": "ویرایشت",
+       "tags-hitcount": "$1 {{جمی:$1|آلشت|آلشتیا}}",
+       "comparepages": "کنار یک نیاین بلگه یا",
+       "compare-page1": "بلگه 1",
+       "compare-page2": "بلگه 2",
+       "compare-rev1": "دوواره ديئن1",
+       "compare-submit": "کنار یک نیاین",
        "compare-title-not-exists": "سرون مشقص بیه وجود ناره.",
        "compare-revision-not-exists": "وانئری که شما تی دیار کردیته وجود ناره.",
+       "htmlform-required": "یه دئه واس بوئه.",
+       "htmlform-submit": "دئن",
+       "htmlform-reset": "انجومشیو کردن آلشتیا",
+       "htmlform-selectorother-other": "هنی",
+       "htmlform-no": "نه",
+       "htmlform-yes": "هری",
+       "htmlform-chosen-placeholder": "یه گل گزینه انتخاو بکیت",
+       "htmlform-cloner-create": "هنی اضاف بکیت",
+       "htmlform-cloner-delete": "ؤرداشتن",
        "revdelete-content-hid": "مینونه قام بیه",
        "revdelete-uname-hid": "نوم کاروری قام بیه",
        "revdelete-content-unhid": "مینونه قام نبیه",
        "revdelete-uname-unhid": "نوم کاروری قام نبیه",
+       "rightsnone": "(هيش كوم)",
+       "revdelete-summary": "چکسه ویرایشت",
+       "feedback-subject": "سرون:",
+       "feedback-message": "پيغوم:",
+       "feedback-cancel": "انجوم شیوسن",
+       "feedback-submit": "کل کردن نهاهوال حون",
        "feedback-close": "انجوم بی",
+       "feedback-bugnew": "مه وارسیش کردمه. یه گل سیسرک تازه گزارشت بی",
        "searchsuggest-search": "پی جوری",
+       "searchsuggest-containing": "د حال و بار مینونه دار...",
        "api-error-badaccess-groups": "شما سی سوار کرد جانیایا د ای ویکی اجازه ناریت.",
        "api-error-copyuploaddisabled": "سوار کردن وا یو آر ال دی ای سرور غیرفعال بیه.",
        "api-error-filename-tooshort": "نوم جانیا فره کؤچکه.",
        "api-error-illegal-filename": "نوم جانیا اجازه دئه نئ.",
        "api-error-mustbeloggedin": "شما سی سوارکردن فایلیا با بیایت وامین",
+       "duration-seconds": "$1 {{PLURAL:$1|ثانیه|ثانیه یا}}",
+       "duration-minutes": "$1 {{PLURAL:$1|دیقه|دیقه یا}}",
+       "duration-hours": "$1 {{PLURAL:$1|ساعت |ساعتیا}}",
        "duration-days": "$1{{جمی:$1|روز|روزیا}}",
+       "duration-weeks": "$1 {{جمی:$1|هفته|هفته یا}}",
        "duration-years": "$1{{جمی:$1| سال|سالیا}}",
-       "expand_templates_remove_comments": "جا وه جا بیئن ویر و باوریا"
+       "duration-decades": "$1 {{PLURAL:$1|دهه|دهه یا}}",
+       "duration-centuries": "$1 {{PLURAL:$1|سده|سده یا}}",
+       "limitreport-ppvisitednodes-value": "$1/$2",
+       "limitreport-ppgeneratednodes-value": "$1/$2",
+       "limitreport-expansiondepth-value": "$1/$2",
+       "limitreport-expensivefunctioncount-value": "$1/$2",
+       "expand_templates_output": "نتیجه",
+       "expand_templates_xml_output": "درده ایکس ام ال",
+       "expand_templates_ok": "خوئه",
+       "expand_templates_remove_comments": "جا وه جا بیئن ویر و باوریا",
+       "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": "* <رازینه>$1</رازینه> / $2 ('''ناکنشتگر بیه''')",
+       "default-skin-not-found-row-disabled": "* <رازینه>$1</رازینه> / $2 ('''ناکنشتگر بیه''')",
+       "mediastatistics-table-count": "شماره جانیایا",
+       "mediastatistics-header-unknown": "نادیار",
+       "mediastatistics-header-bitmap": "عسگیا بیت مپ",
+       "mediastatistics-header-audio": "دنگ",
+       "mediastatistics-header-video": "عسگ و فیلم",
+       "mediastatistics-header-office": "نوشتگه",
+       "mediastatistics-header-text": "نیسسه دار",
+       "json-error-syntax": "خطا دستوری"
 }
index d883947..d9758a0 100644 (file)
        "print": "Spausdinti",
        "view": "Žiūrėti",
        "view-foreign": "Rodyti $1",
-       "edit": "Redaguoti",
+       "edit": "Keisti",
        "edit-local": "Redaguoti vietos aprašymą",
        "create": "Sukurti",
        "create-local": "Pridėti vietos aprašymą",
        "otherlanguages": "Kitomis kalbomis",
        "redirectedfrom": "(Nukreipta iš $1)",
        "redirectpagesub": "Nukreipimo puslapis",
+       "redirectto": "Nukreipti į:",
        "lastmodifiedat": "Šis puslapis paskutinį kartą keistas $1 $2.",
        "viewcount": "Šis puslapis buvo atvertas $1 {{PLURAL:$1|kartą|kartus|kartų}}.",
        "protectedpage": "Užrakintas puslapis",
        "newmessageslinkplural": "{{PLURAL:$1|nauja žinutė|999=naujos žinutės}}",
        "newmessagesdifflinkplural": "paskutinis {{PLURAL:$1|pakeitimas|999=pakeitimai}}",
        "youhavenewmessagesmulti": "Turite naujų žinučių $1",
-       "editsection": "redaguoti",
+       "editsection": "keisti",
        "editold": "taisyti",
        "viewsourceold": "žiūrėti šaltinį",
        "editlink": "keisti",
        "nstab-media": "Media puslapis",
        "nstab-special": "Specialusis puslapis",
        "nstab-project": "Projekto puslapis",
-       "nstab-image": "Failas",
+       "nstab-image": "Rinkmena",
        "nstab-mediawiki": "Pranešimas",
        "nstab-template": "Šablonas",
        "nstab-help": "Pagalbos puslapis",
        "passwordreset-emailsent-capture": "Slaptažodžio priminimo laiškas bus išsiųstas, toks koks parodytas.",
        "passwordreset-emailerror-capture": "Priminimo e-mail laiškas buvo sugeneruotas, toks koks parodytas, bet pasiuntimas naudotojui buvo nesėkmingas: $1",
        "changeemail": "Pakeisti el. pašto adresą",
-       "changeemail-header": "Keisti paskyros el. pašto adresą",
        "changeemail-text": "Užpildykite šią formą, jei norite pakeisti savo el. pašto adresą. Jums reikės įvesti savo slaptažodį, siekiant patvirtinti šį pakeitimą.",
        "changeemail-no-info": "Jūs turite būti prisijungęs, kad pasiektumėte puslapį tiesiogiai.",
        "changeemail-oldemail": "Dabartinis el. pašto adresas:",
        "changeemail-none": "(nėra)",
        "changeemail-password": "Jūsų {{SITENAME}} slaptažodis:",
        "changeemail-submit": "Keisti el. pašto adresą",
-       "changeemail-cancel": "Atšaukti",
        "bold_sample": "Paryškintas tekstas",
        "bold_tip": "Paryškinti tekstą",
        "italic_sample": "Tekstas kursyvu",
        "nowiki_sample": "Čia įterpkite neformuotą tekstą",
        "nowiki_tip": "Ignoruoti wiki formatą",
        "image_sample": "Pavyzdys.jpg",
-       "image_tip": "Įdėti failą",
+       "image_tip": "Įterpta rinkmena",
        "media_sample": "Pavyzdys.ogg",
-       "media_tip": "Nuoroda į failą",
+       "media_tip": "Nuoroda į rinkmeną",
        "sig_tip": "Jūsų parašas bei laikas",
        "hr_tip": "Horizontali linija (naudokite taupiai)",
-       "summary": "Komentaras:",
+       "summary": "Paaiškinimas:",
        "subject": "Tema/antraštė:",
        "minoredit": "Tai smulkus pataisymas",
        "watchthis": "Stebėti šį puslapį",
        "editing": "Taisomas $1",
        "creating": "Kuriama $1",
        "editingsection": "Taisomas $1 (skyrelis)",
-       "editingcomment": "Taisomas $1 (komentaras)",
+       "editingcomment": "Taisomas $1 (naujas skyrius)",
        "editconflict": "Išpręskite konfliktą: $1",
        "explainconflict": "Kažkas kitas jau pakeitė puslapį nuo tada, kai jūs pradėjote jį redaguoti.\nViršutiniame tekstiniame lauke pateikta šiuo metu esanti puslapio versija.\nJūsų keitimai pateikti žemiau esančiame lauke.\nJums reikia sujungti jūsų pakeitimus su esančia versija.\nKai paspausite „{{int:savearticle}}“, bus įrašytas '''tik''' tekstas viršutiniame tekstiniame lauke.",
        "yourtext": "Jūsų tekstas",
        "edit-gone-missing": "Negalima atnaujinti puslapio.\nGreičiausiai jis yra ištrintas.",
        "edit-conflict": "Redagavimo konfliktas.",
        "edit-no-change": "Jūsų keitimas buvo ignoruotas kadangi nebuvo atlikta jokių teksto pakeitimų.",
+       "postedit-confirmation-created": "Puslapis sukurtas.",
        "postedit-confirmation-saved": "Jūsų pakeitimas išsaugotas.",
        "edit-already-exists": "Negalima sukurti naujo puslapio.\nJis jau egzistuoja.",
        "defaultmessagetext": "Numatytasis pranešimo tekstas",
        "mergehistory-same-destination": "Šaltinio ir tikslo puslapiai negali būti vienodi",
        "mergehistory-reason": "Priežastis:",
        "mergelog": "Sujungimų sąrašas",
-       "pagemerge-logentry": "sujungė [[$1]] su [[$2]] (versijos iki $3)",
        "revertmerge": "Atskirti",
        "mergelogpagetext": "Žemiau yra paskiausių vieno su kitu puslapių sujungimų sąrašas.",
        "history-title": "„$1“ versijų istorija",
        "searchrelated": "susiję",
        "searchall": "visi",
        "showingresults": "Žemiau rodoma iki '''$1''' {{PLURAL:$1|rezultato|rezultatų|rezultatų}} pradedant #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Rezultatas '''$1''' iš '''$3'''|Rezultatai '''$1 - $2''' iš '''$3'''}} pagal užklausą '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Davinys <strong>$1</strong> iš <strong>$3</strong>|Daviniai <strong>$1 - $2</strong> iš <strong>$3</strong>}}",
        "search-nonefound": "Nėra rezultatų, atitinkančių užklausą.",
        "powersearch-legend": "Išplėstinė paieška",
        "powersearch-ns": "Ieškoti vardų srityse:",
        "powersearch-togglelabel": "Pažymėti:",
        "powersearch-toggleall": "Viską",
        "powersearch-togglenone": "Nieko",
+       "powersearch-remember": "Atsiminti pasirinkimą būsimoms paieškoms",
        "search-external": "Išorinė paieška",
        "searchdisabled": "Projekto {{SITENAME}} paieška yra uždrausta. Galite pamėginti ieškoti Google paieškos sistemoje. Paieškos sistemoje projekto {{SITENAME}} duomenys gali būti pasenę.",
        "preferences": "Nustatymai",
        "prefs-displayrc": "Rodymo nustatymai",
        "prefs-displaywatchlist": "Rodymo nuostatos",
        "prefs-diffs": "Skirtumai",
+       "prefs-help-prefershttps": "Šis nustatymas suveiks kitą kartą prisijungiant.",
        "email-address-validity-valid": "Panašu, kad E-pašto adresas yra teisingas",
        "email-address-validity-invalid": "Įveskite korektišką e-pašto adresą",
        "userrights": "Naudotojų teisių valdymas",
        "right-unblockself": "Atblokuoti pačius",
        "right-protect": "Pakeisti apsaugos lygius ir redaguoti apsaugotus puslapius",
        "right-editprotected": "Redaguoti apsaugotus puslapius (be pakopinės apsaugos)",
-       "right-editinterface": "Redaguoti naudotojo aplinką",
+       "right-editinterface": "Keisti naudotojo aplinką",
        "right-editusercssjs": "Redaguoti kitų naudotojų CSS ir JS failus",
        "right-editusercss": "Redaguoti kitų naudotojų CSS failus",
        "right-edituserjs": "Redaguoti kitų naudotojų JS failus",
        "rightslog": "Naudotojų teisių pakeitimai",
        "rightslogtext": "Pateikiamas naudotojų teisių pakeitimų sąrašas.",
        "action-read": "skaityti šį puslapį",
-       "action-edit": "redaguoti šį puslapį",
+       "action-edit": "keisti šį puslapį",
        "action-createpage": "kurti puslapius",
        "action-createtalk": "kurti aptarimų puslapius",
        "action-createaccount": "kurti šią naudotojo paskyrą",
        "action-move-subpages": "pervadinti šį puslapį ir jo subpuslapius",
        "action-move-rootuserpages": "perkelti pagrindinius naudotojų puslapius",
        "action-movefile": "perkelti šį failą",
-       "action-upload": "įkelti šį failą",
+       "action-upload": "įkelti šią rinkmeną",
        "action-reupload": "perrašyti šį esamą failą",
        "action-reupload-shared": "perrašyti šį failą bendrojoje saugykloje",
-       "action-upload_by_url": "įkelti šį failą iš URL adreso",
+       "action-upload_by_url": "įkelti šią rinkmeną iš URL adreso",
        "action-writeapi": "naudotis rašymo API",
        "action-delete": "ištrinti šį puslapį",
        "action-deleterevision": "ištrinti šią reviziją",
        "recentchanges-label-bot": "Šį keitimą atliko automatinė programa",
        "recentchanges-label-unpatrolled": "Šis keitimas dar nebuvo patikrintas",
        "recentchanges-label-plusminus": "Šiuo baitų skaičiumi pakeista puslapio apimtis",
+       "recentchanges-legend-heading": "'''Paaiškinimai:'''",
        "recentchanges-legend-newpage": "$1 - naujas puslapis",
        "rcnotefrom": "Žemiau yra pakeitimai pradedant <strong>$2</strong> (rodoma iki <strong>$1</strong> pakeitimų).",
        "rclistfrom": "Rodyti naujus pakeitimus pradedant $3 $2",
        "recentchangeslinked-summary": "Tai paskutinių keitimų, atliktų puslapiuose, į kuriuos yra nuoroda iš nurodyto puslapio (arba į nurodytos kategorijos narius), sąrašas.\nPuslapiai iš jūsų [[Special:Watchlist|stebimųjų sąrašo]] yra '''paryškinti'''.",
        "recentchangeslinked-page": "Puslapio pavadinimas:",
        "recentchangeslinked-to": "Rodyti su duotuoju puslapiu susijusių puslapių pakeitimus",
-       "upload": "Įkelti failą",
-       "uploadbtn": "Įkelti failą",
+       "upload": "Įkelti rinkmeną",
+       "uploadbtn": "Įkelti rinkmeną",
        "reuploaddesc": "Atšaukti įkėlimą ir grįžti į įkėlimo formą.",
        "upload-tryagain": "Siųsti pakeistą failo aprašymą",
        "uploadnologin": "Neprisijungęs",
        "uploaderror": "Įkėlimo klaida",
        "upload-recreate-warning": "'''Dėmėsio: Failas šiuo pavadinimu buvo ištrintas arba pervadintas.'''\n\nJūsų patogumui pateiktas įrašas apie šio puslapio trynimą ar pervadinimą:",
        "uploadtext": "Kad įkeltumėte failą, naudokitės žemiau pateikta forma.\nNorėdami peržiūrėti ar ieškoti anksčiau įkeltų paveikslėlių, eikite į [[Special:FileList|įkeltų failų sąrašą]], įkėlimai yra registruojami [[Special:Log/upload|įkėlimų sąraše]], trynimai — [[Special:Log/delete|trynimų sąraše]].\n\nNorėdami panaudoti įkeltą failą puslapyje, naudokite tokias nuorodas:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Failas.jpg]]</nowiki></code>''' norėdami naudoti pilną failo versiją\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Failas.png|200px|thumb|left|alternatyvusis tekstas]]</nowiki></code>''' norėdami naudoti 200 pikselių pločio paveikslėlį rėmelyje puslapio kairėje; „alternatyvus tekstas“ bus naudojamas paveikslėlio aprašymui.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Failas.ogg]]</nowiki></code>''' tiesioginei nuorodai į failą.",
-       "upload-permitted": "Leidžiami failų tipai: $1.",
+       "upload-permitted": "Leidžiami rinkmenų tipai: $1.",
        "upload-preferred": "Pageidautini failų tipai: $1.",
        "upload-prohibited": "Uždrausti failų tipai: $1.",
        "uploadlogpage": "Įkėlimų sąrašas",
        "uploadlogpagetext": "Žemiau pateikiamas paskutinių failų įkėlimų sąrašas.\nTaip pat galite peržvelgti [[Special:NewFiles|naujausių failų galeriją]].",
        "filename": "Failo vardas",
        "filedesc": "Aprašymas",
-       "fileuploadsummary": "Komentaras:",
+       "fileuploadsummary": "Aprašymas:",
        "filereuploadsummary": "Failo pakeitimai:",
        "filestatus": "Autorystės teisės:",
        "filesource": "Šaltinis:",
        "largefileserver": "Šis failas yra didesnis nei serveris yra sukonfigūruotas leisti.",
        "emptyfile": "Panašu, kad failas, kurį įkėlėte yra tuščias. Tai gali būti dėl klaidos failo pavadinime. Pasitikrinkite ar tikrai norite įkelti šitą failą.",
        "windows-nonascii-filename": "Ši viki neleidžia naudoti failų vardų su specialiais simboliais.",
-       "fileexists": "Failas tuo pačiu vardu jau egzistuoja, prašome pažiūrėti <strong>[[:$1]]</strong>, jei nesate tikras, ar norite perrašyti šį failą.\n[[$1|thumb]]",
+       "fileexists": "Rinkmena tokiu pačiu pavadinimu jau esti, prašome pažiūrėti <strong>[[:$1]]</strong>, jei nesate tikras, ar norite perrašyti šią rinkmeną.\n[[$1|thumb]]",
        "filepageexists": "Šio failo aprašymo puslapis jau buvo sukurtas <strong>[[:$1]]</strong>, bet šiuo metu nėra jokio failo šiuo pavadinimu.\nJūsų įvestas komentaras neatsiras aprašymo puslapyje.\nJei norite, kad jūsų komentaras ten atsirastų, jums reikia jį pakeisti pačiam.\n[[$1|thumb]]",
        "fileexists-extension": "Failas su panašiu pavadinimu jau yra: [[$2|thumb]]\n* Įkeliamo failo pavadinimas: <strong>[[:$1]]</strong>\n* Jau esančio failo pavadinimas: <strong>[[:$2]]</strong>\nPrašome pasirinkti kitą vardą.",
-       "fileexists-thumbnail-yes": "Failas turbūt yra sumažinto dydžio failas ''(miniatiūra)''. [[$1|thumb]]\nPrašome peržiūrėti failą <strong>[[:$1]]</strong>.\nJeigu tai yra toks pats pradinio dydžio paveikslėlis, tai įkelti papildomos miniatūros nereikia.",
+       "fileexists-thumbnail-yes": "Rinkmena turbūt yra sumažinto dydžio ''(miniatiūra)''. [[$1|thumb]]\nPrašome peržiūrėti rinkmeną <strong>[[:$1]]</strong>.\nJeigu tai yra toks pats pradinio dydžio paveikslėlis, tai įkelti papildomos miniatūros nereikia.",
        "file-thumbnail-no": "Failo pavadinimas prasideda  <strong>$1</strong>.\nAtrodo, kad yra sumažinto dydžio paveikslėlis ''(miniatiūra)''.\nJei jūs turite šį paveisklėlį pilna raiška, įkelkite šitą, priešingu atveju prašome pakeisti failo pavadinimą.",
        "fileexists-forbidden": "Failas tokiu pačiu vardu jau egzistuoja ir negali būti perrašytas;\nprašome eiti atgal ir įkelti šį failą kitu vardu. [[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Failas tokiu vardu jau egzistuoja bendrojoje failų saugykloje;\nJei visvien norite įkelti savo failą, prašome eiti atgal ir įkelti šį failą kitu vardu. [[File:$1|thumb|center|$1]]",
        "file-deleted-duplicate": "Failas, identiškas šiam failui ([[:$1]]), seniau buvo ištrintas. Prieš įkeldami jį vėl patikrinkite šio failo ištrynimo istoriją.",
        "uploadwarning": "Dėmesio",
        "uploadwarning-text": "Prašome pakeisti failo aprašymą ir bandykite dar kartą.",
-       "savefile": "Išsaugoti failą",
+       "savefile": "Išsaugoti rinkmeną",
        "uploaddisabled": "Įkėlimai uždrausti",
        "copyuploaddisabled": "Įkėlimas pagal URL išjungtas.",
        "uploaddisabledtext": "Failų įkėlimai yra uždrausti.",
        "uploadscripted": "Šis failas turi HTML arba programinį kodą, kuris gali būti klaidingai suprastas interneto naršyklės.",
        "uploadscriptednamespace": "Šis SVG failas turi neteisėtą vietą vardui '$1'",
        "uploadvirus": "Šiame faile yra virusas! Smulkiau: $1",
-       "uploadjava": "Failas yra ZIP failas, kuriame yra Java .class failas.\nĮkelti Java failus neleidžiama, nes jie gali padėti apeiti saugumo apribojimus.",
-       "upload-source": "Failo šaltinis",
-       "sourcefilename": "Įkeliamas failas:",
+       "uploadjava": "Ši rinkmena tai ZIP rinkmena, kurioje yra Java .class rinkmena.\nĮkelti Java rinkmenų neleidžiama, nes jos gali padėti apeiti saugumo apribojimus.",
+       "upload-source": "Pradinė rinkmena",
+       "sourcefilename": "Įkeliama rinkmena:",
        "sourceurl": "Šaltinio adresas:",
        "destfilename": "Norimas failo vardas:",
-       "upload-maxfilesize": "Didžiausias failo dydis: $1",
-       "upload-description": "Failo aprašymas",
+       "upload-maxfilesize": "Didžiausias rinkmenos dydis: $1",
+       "upload-description": "Rinkmenos aprašymas",
        "upload-options": "Įkėlimo nustatymai",
-       "watchthisupload": "Stebėti šį failą",
+       "watchthisupload": "Stebėti šią rinkmeną",
        "filewasdeleted": "Failas šiuo vardu anksčiau buvo įkeltas, o paskui ištrintas. Jums reikėtų patikrinti $1 prieš bandant įkelti jį vėl.",
        "filename-bad-prefix": "Jūsų įkeliamas failas prasideda su '''„$1“''', bet tai yra neapibūdinantis pavadinimas, dažniausiai priskirtas skaitmeninių kamerų. Prašome suteikti labiau apibūdinantį pavadinimą savo failui.",
        "upload-success-subj": "Įkelta sėkmingai",
        "nolicense": "Nepasirinkta",
        "license-nopreview": "(Peržiūra negalima)",
        "upload_source_url": " (tikras, viešai prieinamas URL)",
-       "upload_source_file": " (failas jūsų kompiuteryje)",
+       "upload_source_file": "(pasirinkta rinkmena jūsų kompiuteryje)",
        "listfiles-summary": "Šiame specialiame puslapyje rodomi visi įkelti failai.\nKai sąrašas susiaurinamas pagal naudotoją, rodomi tik tie failai, kurių naujausią versiją jis yra įkėlęs.",
        "listfiles_search_for": "Ieškoti failo pavadinimo:",
        "imgfile": "failas",
        "listfiles-latestversion": "Dabartinė versija",
        "listfiles-latestversion-yes": "Taip",
        "listfiles-latestversion-no": "Ne",
-       "file-anchor-link": "Failas",
+       "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-deleteall": "trinti visus",
        "filehist-nothumb": "Nėra miniatiūros",
        "filehist-user": "Naudotojas",
        "filehist-dimensions": "Matmenys",
-       "filehist-filesize": "Failo dydis",
-       "filehist-comment": "Komentaras",
-       "imagelinks": "Failų panaudojimas",
+       "filehist-filesize": "Rinkmenos dydis",
+       "filehist-comment": "Paaiškinimas",
+       "imagelinks": "Rinkmenos naudojimas",
        "linkstoimage": "{{PLURAL:$1|Šis puslapis|Šie puslapiai}} nurodo į šį failą:",
        "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": "Į failą nenurodo joks puslapis.",
+       "nolinkstoimage": "Į rinkmeną nenurodo joks puslapis.",
        "morelinkstoimage": "Žiūrėti [[Special:WhatLinksHere/$1|daugiau nuorodų]] į šį failą.",
        "linkstoimage-redirect": "$1 (failo peradresavimas) $2",
        "duplicatesoffile": "Šis failas turi {{PLURAL:$1|$1 dublikatą|$1 dublikatus|$1 dublikatų}} ([[Special:FileDuplicateSearch/$2|daugiau informacijos]]):",
-       "sharedupload": "Šis failas yra iš $1 ir gali būti naudojamas kituose projektuose.",
+       "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.",
        "filepage-nofile": "Joks failas su duotu pavadinimu neegzistuoja.",
        "filepage-nofile-link": "Joks failas su duotu pavadinimu neegzistuoja, bet vis dar galite [$1 jį įkelti].",
-       "uploadnewversion-linktext": "Įkelti naują failo versiją",
+       "uploadnewversion-linktext": "Įkelti naują šios rinkmenos atmainą",
        "shared-repo-from": "iš $1",
        "shared-repo": "bendrosios failų saugyklos",
        "shared-repo-name-wikimediacommons": "Vikiteka",
        "filerevert-success": "<span class=\"plainlinks\">'''[[Media:$1|$1]]''' buvo sugrąžintas į versiją $4 ($2, $3).</span>",
        "filerevert-badversion": "Nėra jokių ankstesnių vietinių šio failo versijų su pateiktu laiku.",
        "filedelete": "Trinti $1",
-       "filedelete-legend": "Trinti failą",
+       "filedelete-legend": "Trinti rinkmeną",
        "filedelete-intro": "Jūs ketinate ištrinti failą '''[[Media:$1|$1]]''' su visa istorija.",
        "filedelete-intro-old": "<span class=\"plainlinks\">Jūs trinate '''[[Media:$1|$1]]''' [$4 $3, $2] versiją.</span>",
        "filedelete-comment": "Priežastis:",
        "statistics": "Statistika",
        "statistics-header-pages": "Puslapių statistika",
        "statistics-header-edits": "Redagavimų statistika",
-       "statistics-header-views": "Peržiūrų statistika",
        "statistics-header-users": "Naudotojų statistika",
        "statistics-header-hooks": "Kita statistika",
        "statistics-articles": "Turinio puslapiai",
        "statistics-files": "Įkelti failai",
        "statistics-edits": "Puslapių redagavimų skaičius nuo {{SITENAME}} sukūrimo",
        "statistics-edits-average": "Vidutinis puslapio keitimų skaičius",
-       "statistics-views-total": "Iš viso peržiūrų",
-       "statistics-views-total-desc": "Neegzistuojančių ir specialiųjų puslapių parodymai neįtraukti",
-       "statistics-views-peredit": "Peržiūrų skaičius puslapio versijai",
        "statistics-users": "Registruotų [[Special:ListUsers|naudotojų]]",
        "statistics-users-active": "Aktyvių naudotojų",
        "statistics-users-active-desc": "Naudotojai, kurie per {{PLURAL:$1|paskutinę dieną|paskutines $1 dienų}} padarė keitimų",
-       "statistics-mostpopular": "Daugiausiai rodyti puslapiai",
        "pageswithprop": "Puslapiai su puslapio atributais",
        "pageswithprop-legend": "Puslapiai su puslapio atributais",
        "pageswithprop-text": "Šiame puslapyje pateikiami puslapiai, kurie ypač naudoja puslapio atributus.",
        "uncategorizedtemplates": "Šablonai, nepriskirti jokiai kategorijai",
        "unusedcategories": "Nenaudojamos kategorijos",
        "unusedimages": "Nenaudojami failai",
-       "popularpages": "Populiarūs puslapiai",
        "wantedcategories": "Geidžiamiausios kategorijos",
        "wantedpages": "Geidžiamiausi puslapiai",
        "wantedpages-badtitle": "Neleistinas pavadinimas rezultatų rinkinyje: $1",
        "querypage-disabled": "Šiame specialiajame puslapyje yra išjungta dėl neefektyvumo.",
        "booksources": "Knygų šaltiniai",
        "booksources-search-legend": "Knygų šaltinių paieška",
-       "booksources-go": "Rodyti",
        "booksources-text": "Žemiau yra nuorodų sąrašas į kitas svetaines, kurios parduoda naujas ar naudotas knygas, bei galbūt turinčias daugiau informacijos apie knygas, kurių ieškote:",
        "booksources-invalid-isbn": "Duotas ISBN atrodo neteisingas; patikrinkite, ar nepadarėte kopijavimo klaidų.",
        "specialloguserlabel": "Naudotojas:",
        "wlheader-enotif": "El. pašto pranešimai yra įjungti.",
        "wlheader-showupdated": "Puslapiai pakeisti nuo tada, kai paskutinį kartą apsilankėte juose, yra pažymėti '''pastorintai'''",
        "wlnote": "{{PLURAL:$1|Rodomas '''$1''' paskutinis pakeitimas, atliktas|Rodomi '''$1''' paskutiniai pakeitimai, atlikti|Rodoma '''$1''' paskutinių pakeitimų, atliktų}} per '''$2''' {{PLURAL:$2|paskutinę valandą|paskutines valandas|paskutinių valandų}}, nuo $3 $4.",
-       "wlshowlast": "Rodyti paskutinių $1 valandų, $2 dienų ar $3 pakeitimus",
+       "wlshowlast": "Rodyti paskutinių $1 valandų, $2 dienų",
        "watchlist-options": "Stebimųjų sąrašo parinktys",
        "watching": "Įtraukiama į stebimųjų sąrašą...",
        "unwatching": "Šalinama iš stebimųjų sąrašo...",
        "rollbackfailed": "Atmetimas nepavyko",
        "cantrollback": "Negalima atmesti redagavimo; paskutinis keitęs naudotojas yra šio puslapio autorius.",
        "alreadyrolled": "Nepavyko atmesti paskutinio [[User:$2|$2]] ([[User talk:$2|Aptarimas]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) daryto puslapio [[:$1]] keitimo;\nkažkas jau pakeitė puslapį arba suspėjo pirmas atmesti keitimą.\n\nPaskutimas keitimas darytas naudotojo [[User:$3|$3]] ([[User talk:$3|Aptarimas]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Redagavimo komentaras: „''$1''“.",
+       "editcomment": "Pateiktas toks keitimo paaiškinimas: „''$1''“.",
        "revertpage": "Atmestas [[Special:Contributions/$2|$2]] ([[User talk:$2|Aptarimas]]) pakeitimas; sugrąžinta [[User:$1|$1]] versija",
        "revertpage-nouser": "Atversti pakeitimai paslėpto vartotojo, grąžino prieš tai buvusią versiją {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Atmesti $1 pakeitimai;\ngrąžinta prieš tai buvusi $2 versija.",
        "undelete-cleanup-error": "Klaida trinant nenaudotą archyvo failą „$1“.",
        "undelete-missing-filearchive": "Nepavyksta atkurti failo archyvo ID $1, nes jo nėra duomenų bazėje. Jis gali būti jau atkurtas.",
        "undelete-error": "Klaida panaikinant puslapį",
-       "undelete-error-short": "Klaida atkuriant failą: $1",
+       "undelete-error-short": "Klaida atkuriant rinkmeną: $1",
        "undelete-error-long": "Įvyko klaidų atkuriant failą:\n\n$1",
        "undelete-show-file-confirm": "Ar tikrai norite peržiūrėti ištrintą failo „<nowiki>$1</nowiki>“ $2 $3 versiją?",
        "undelete-show-file-submit": "Taip",
        "namespace_association": "Susijusi vardų sritis",
        "tooltip-namespace_association": "Įjunkite šią parinktį, kad taip pat įtrauktumėte aptarimų arba temos sritį, susijusią su pasirinkta sritimi",
        "blanknamespace": "(Pagrindinė)",
-       "contributions": "{{GENDER:$1|Naudotojo}} įndėlis",
+       "contributions": "{{GENDER:$1|Naudotojo}} indėlis",
        "contributions-title": "{{GENDER:$1|Naudotojo|Naudotojos}} $1 indėlis",
        "mycontris": "Įnašai",
        "contribsub2": "Dėl {{GENDER:$3|$1}} ($2)",
        "sp-contributions-search": "Ieškoti įnašo",
        "sp-contributions-username": "IP adresas arba naudotojo vardas:",
        "sp-contributions-toponly": "Rodyti tik paskutinius keitimus",
+       "sp-contributions-newonly": "Rodyti tik tuos keitimus, kuriais sukurti nauji straipsniai",
        "sp-contributions-submit": "Ieškoti",
        "whatlinkshere": "Susiję puslapiai",
        "whatlinkshere-title": "Puslapiai, kurie nurodo į „$1“",
        "move-leave-redirect": "Pervadinant palikti nukreipimą",
        "protectedpagemovewarning": "'''Dėmesio:''' Šis puslapis buvo užrakintas, kad tik naudotojai su administratoriaus teisėmis galėtų jį pervadinti.\nNaujausias įrašas žurnale yra pateiktas žemiau:",
        "semiprotectedpagemovewarning": "'''Pastaba''': Šis puslapis buvo užrakintas, kad tik registruoti naudotojai galėtų jį redaguoti.\nNaujausias įrašas žurnale yra pateiktas žemiau:",
-       "move-over-sharedrepo": "== Failas jau yra ==\n[[:$1]] egzistuoja bendrojoje saugykloje. Perkėlus failą į šį pavadinimą, jis pakeis bendrąjį failą.",
+       "move-over-sharedrepo": "== Rinkmena jau yra ==\n[[:$1]] esti bendrojoje saugykloje. Įkėlus rinkmeną šiuo pavadinimu, ji pakeis bendrąją rinkmeną.",
        "file-exists-sharedrepo": "Pasirinktas failo pavadinimas jau yra naudojamas bendrojoje saugykloje.\nPrašome pasirinkti kitą pavadinimą.",
        "export": "Eksportuoti puslapius",
        "exporttext": "Galite eksportuoti vieno puslapio tekstą ir istoriją ar kelių puslapių vienu metu tame pačiame XML atsakyme.\nŠie puslapiai galės būti importuojami į kitą projektą, veikiantį MediaWiki pagrindu, per [[Special:Import|importo puslapį]].\n\nNorėdami eksportuoti puslapius, įveskite pavadinimus žemiau esančiame tekstiniame lauke po vieną pavadinimą eilutėje, taip pat pasirinkite ar norite eksportuoti ir istoriją ar tik dabartinę versiją su paskutinio redagavimo informacija.\n\nPastaruoju atveju, jūs taip pat galite naudoti nuorodą, pvz. [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] puslapiui „[[{{MediaWiki:Mainpage}}]]“.",
        "allmessagestext": "Čia pateikiamas sisteminių pranešimų sąrašas, esančių MediaWiki vardų srityje.\nAplankykite [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation „MediaWiki“ lokaliziciją] ir [//translatewiki.net „translatewiki.net“], jei norite prisidėti prie bendrojo „MediaWiki“ lokalizavimo.",
        "allmessagesnotsupportedDB": "Šis puslapis nepalaikomas, nes nuostata '''$wgUseDatabaseMessages''' yra išjungtas.",
        "allmessages-filter-legend": "Filtras",
-       "allmessages-filter": "Filtruoti pagal būseną:",
+       "allmessages-filter": "Perkošti pagal būseną:",
        "allmessages-filter-unmodified": "Nepakeisti",
        "allmessages-filter-all": "Visi",
        "allmessages-filter-modified": "Pakeisti",
-       "allmessages-prefix": "Filtruoti pagal pradžią:",
+       "allmessages-prefix": "Perkošti pagal pradžią:",
        "allmessages-language": "Kalba:",
        "allmessages-filter-submit": "Rodyti",
        "thumbnail-more": "Padidinti",
        "import-interwiki-namespace": "Paskirties vardų sritis:",
        "import-interwiki-rootpage": "Paskirties namų puslapis (pasirinktinai):",
        "import-upload-filename": "Failo pavadinimas:",
-       "import-comment": "Komentaras:",
+       "import-comment": "Paaiškinimas:",
        "importtext": "Prašome eksportuoti iš projekto-šaltinio failo, naudojant [[Special:Export|eksportavimo pagalbininką.]]\nIšsaugokite jį savo kompiuteryje ir įkelkite jį čia.",
        "importstart": "Imporuojami puslapiai...",
        "import-revision-count": "$1 {{PLURAL:$1|versija|versijos|versijų}}",
        "pageinfo-robot-policy": "Paieškos variklio būsena",
        "pageinfo-robot-index": "Leidžiama",
        "pageinfo-robot-noindex": "Neleidžiama",
-       "pageinfo-views": "Peržiūrų skaičius",
        "pageinfo-watchers": "Puslapio stebėtojų skaičius",
        "pageinfo-redirects-name": "Nukreipimai į šį puslapį",
        "pageinfo-subpages-name": "Šio puslapio papuslapiai",
        "patrol-log-header": "Tai patvirtintų versijų sąrašas.",
        "log-show-hide-patrol": "$1 patvirtinimų sąrašą",
        "deletedrevision": "Ištrinta sena versija $1",
-       "filedeleteerror-short": "Klaida trinant failą: $1",
+       "filedeleteerror-short": "Klaida trinant rinkmeną: $1",
        "filedeleteerror-long": "Įvyko klaidų trinant failą:\n\n$1",
        "filedelete-missing": "Failas „$1“ negali būti ištrintas, nes jo nėra.",
        "filedelete-old-unregistered": "Nurodytos failo versijos „$1“ nėra duomenų bazėje.",
        "imagemaxsize": "Riboti paveikslėlių dydį:<br />''(failų aprašymo puslapiuose)''",
        "thumbsize": "Sumažintų paveikslėlių dydis:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|puslapis|puslapiai|puslapių}}",
-       "file-info": "failo dydis: $1, MIME tipas: $2",
+       "file-info": "rinkmenos dydis: $1, MIME tipas: $2",
        "file-info-size": "$1 × $2 taškų, failo dydis: $3, MIME tipas: $4",
-       "file-info-size-pages": "$1 × $2 taškų, failo dydis: $3, MIME tipas: $4, $5 {{PLURAL:$5|page|pages}}",
+       "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-animated": "Animuotas SVG failas, formaliai $1 × $2 pikselių, failo dydis: $3",
        "svg-long-error": "Neleistinas SVG failas: $1",
-       "show-big-image": "Originalus failas",
-       "show-big-image-preview": "Sumažintos iliustracijos dydis: $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-size": "$1 × $2 taškų",
        "file-info-gif-looped": "ciklinis",
        "exif-pngfilecomment": "JPEG failo komentaras",
        "exif-disclaimer": "Atsakomybės apribojimas",
        "exif-contentwarning": "Turinio įspėjimas",
-       "exif-giffilecomment": "GIF failo komentaras",
+       "exif-giffilecomment": "GIF rinkmenos paaiškinimas",
        "exif-intellectualgenre": "Elemento tipas",
        "exif-subjectnewscode": "Objektas kodas",
        "exif-scenecode": "IPTC scenos kodas",
        "exif-urgency-low": "Žemas ( $1 )",
        "exif-urgency-high": "Aukštas ( $1 )",
        "exif-urgency-other": "Vartotojo nustatyta pirmenybė ($1)",
-       "watchlistall2": "visus",
        "namespacesall": "visos",
        "monthsall": "visi",
        "confirmemail": "Patvirtinkite el. pašto adresą",
        "watchlistedit-raw-done": "Jūsų stebimųjų sąrašas buvo atnaujintas.",
        "watchlistedit-raw-added": "$1 {{PLURAL:$1|puslapis buvo pridėtas|puslapiai buvo pridėti|puslapių buvo pridėta}}:",
        "watchlistedit-raw-removed": "$1 {{PLURAL:$1|puslapis buvo pašalintas|puslapiai buvo pašalinti|puslapių buvo pašalinta}}:",
+       "watchlisttools-clear": "Išvalyti stebimųjų sąrašą",
        "watchlisttools-view": "Rodyti susijusius keitimus",
        "watchlisttools-edit": "Rodyti ir redaguoti stebimųjų sąrašą",
        "watchlisttools-raw": "Redaguoti grynąjį sąrašą",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|pakeista}} narystė grupėje $3",
        "logentry-rights-autopromote": "$1 buvo automatiškai {{GENDER:$2|pervestas}} iš $4 į $5",
        "rightsnone": "(jokių)",
+       "revdelete-summary": "keitimo paaiškinimas",
        "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:",
index 717c2be..b60e023 100644 (file)
        "resetpass-submit-cancel": "Atsaukt",
        "passwordreset-username": "Slāgvuords:",
        "passwordreset-email": "E-posta adress:",
-       "changeemail-cancel": "Atsaukt",
        "bold_sample": "Pamalnais roksts",
        "bold_tip": "Pamalnais roksts",
        "italic_sample": "Sleipais roksts",
        "pager-older-n": "{{PLURAL:$1|vacuoku 1|vacuokys $1}}",
        "booksources": "Gruomotu olūti",
        "booksources-search-legend": "Meklēt gruomotu olūtus",
-       "booksources-go": "Meklēt",
        "log": "Registri",
        "allpages": "Vysys puslopys",
        "prevpage": "Īprīškejuo lopa ($1)",
        "watchthispage": "Puorraudzeit itū lopu",
        "unwatch": "Vairs napuorraudzeit",
        "watchlist-details": "(Tu puorraug $1 {{PLURAL:$1|lopu|lopys}}, naskaitūt sarunu lopys.)",
-       "wlshowlast": "Paruodeit izmainis pādejūs $1 stuņžu laikā voi $2 dīnu laikā, voi ari $3",
+       "wlshowlast": "Paruodeit izmainis pādejūs $1 stuņžu laikā voi $2 dīnu laikā, voi ari",
        "watchlist-options": "Puorraugamū rokstu saroksta īspiejis",
        "watching": "Davīnoj puorraudzeišonai...",
        "unwatching": "Atslādz puorraudzeišonu...",
        "metadata-expand": "Paruodeit papyldu detalis",
        "metadata-collapse": "Nūglobuot papyldu detalis",
        "metadata-fields": "Itymā paziņuojumā asūši metadatu lauki byus radzami attāla lopā ari tod, kod metadatu tabula byus sateita.\nPuorejī lauki, piec nūklusiejuma, byus nūglobuoti.\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",
-       "watchlistall2": "vysys",
        "namespacesall": "vysys",
        "monthsall": "vysi",
        "watchlisttools-view": "Apsavērt atbylstūšuos izmainis",
index c4a82fa..88cae64 100644 (file)
        "passwordreset-emailsent-capture": "Hriat nawntirna e-lehkha thawn a ni, a hnuaia tarlan ang khuan.",
        "passwordreset-emailerror-capture": "Hriat nawntirna e-lehkha siam chhuah a ni a, a hnuaia tarlan ang khuan; mahsé thawn hlawhchham a ni: $1",
        "changeemail": "E-chenhmun thlâk rawh",
-       "changeemail-header": "Siangchan e-chenhmun thlâk rawh",
        "changeemail-text": "I e-chenhmun thlâk tùrin hei hi dahkhat vek rawh. I tihdanglam nemngheh nan i thurûk ziahluh i ngai ang.",
        "changeemail-no-info": "He phêk lut mai tùr chuan i inziahluh a ngai.",
        "changeemail-oldemail": "Tùna i e-chenhmun:",
        "changeemail-none": "(pakhat mah)",
        "changeemail-password": "I {{SITENAME}} thurûk:",
        "changeemail-submit": "E-chenhmun thlâk rawh",
-       "changeemail-cancel": "Sûtna",
        "bold_sample": "Hawrawp thau",
        "bold_tip": "Hawrawp thau",
        "italic_sample": "Hawrawp äwn",
        "search-relatedarticle": "Laichin",
        "searchrelated": "laichin",
        "searchall": "a vaiin",
-       "showingresultsheader": "'''$4'''  tana {{PLURAL:$5|chhuak   '''$3'''  zinga  '''$1'''|chhuak  '''$3'''  zinga   '''$1 - $2'''  }}",
        "search-nonefound": "I zawn mil a awm lo",
        "powersearch-legend": "Zawnna chi sang",
        "powersearch-ns": "Hemi hminghmun chhungah hian zawng rawh:",
        "statistics": "Lepsena",
        "statistics-header-pages": "Phêk lepsena",
        "statistics-header-edits": "Siamṭhatphung lepsena",
-       "statistics-header-views": "Tlawhna lepsèna",
        "statistics-header-users": "Hmangtute chanchin kimchang",
        "statistics-header-hooks": "Chanchin dang",
        "statistics-articles": "Thuziakna phêkte",
        "statistics-files": "Taksa hlankaite",
        "statistics-edits": "{{SITENAME}} din achina phêk khawih danglam zât",
        "statistics-edits-average": "Phêk khat zëla siamṭhat zât chawhrual",
-       "statistics-views-total": "Tlawh zât",
-       "statistics-views-total-desc": "Phêk awm lo leh phêk vohbîkte tlawhna chu chhiar tel a ni lo",
-       "statistics-views-peredit": "Siamṭhat pakhat zël tlawh zât",
        "statistics-users": "[[Special:ListUsers|Hmangtu]] inziaklût zât",
        "statistics-users-active": "Hmangtu aktif zât",
        "statistics-users-active-desc": "Ni {{PLURAL:$1|khat|$1}} kaltâ chhunga thiltih nei hmangtuho",
-       "statistics-mostpopular": "Phêk thlir zin deuh deuhte",
        "doubleredirects": "Hruailuhna phír",
        "double-redirect-fixed-move": "[[$1]] sawn a ni ta.\n[[$2]] lama hruailuhna siam nghâl a ni.",
        "double-redirect-fixed-maintenance": "[[$1]] aṭanga [[$2]] hruailuhna phír chinfel.",
        "uncategorizedtemplates": "Páwl nei lo siamsâte",
        "unusedcategories": "Páwl hman lohte",
        "unusedimages": "Taksa hman hlawh lote",
-       "popularpages": "Phêk lärte",
        "wantedcategories": "Páwl mamawhte",
        "wantedpages": "Phêk mamawhte",
        "wantedpages-badtitle": "Phêk hming dik lo: $1",
        "suppress": "Hmuh hmaih",
        "booksources": "Lehkhabu rawnte",
        "booksources-search-legend": "Lehkhabu hnar zingah zawng rawh",
-       "booksources-go": "Khai le",
        "specialloguserlabel": "Buatsaihtu:",
        "speciallogtitlelabel": "Tumhmun (hming emaw hmangtu):",
        "log": "Chanchin-ziak",
        "watchlist-details": "I ralvèn zing aţanga {{PLURAL:$1| phêk $1 |phêk $1}}, sawihona phêk chhiar lohvin.",
        "wlheader-enotif": "*E-lehkha inhriattirna tihnun a ni.",
        "wlheader-showupdated": "I tlawh hnuhnun ber hnua tihdanglam phêk te chu a '''thau'''va tihlan a ni.",
-       "wlshowlast": "Darkar $1 kalta-a tihdanglam tilang rawh , ni $2 kalta-a tihdanglam tilang rawh, $3 tilang rawh",
+       "wlshowlast": "Darkar $1 kalta-a tihdanglam tilang rawh , ni $2 kalta-a tihdanglam tilang rawh,  tilang rawh",
        "watchlist-options": "Ralvèn duhdàn",
        "enotif_reset": "Phêk zawng zawng tlawh tawh vek angin chhinchhiah rawh.",
        "enotif_impersonal_salutation": "{{SITENAME}} hmangtu",
        "spamprotectiontitle": "Thuthawn lawi lo danna",
        "pageinfo-title": "\"$1\" chungchanga hriattirna",
        "pageinfo-header-edits": "Siamţhatnate",
-       "pageinfo-views": "Thlir/en tawh zât",
        "pageinfo-watchers": "Thlirtu zât",
        "pageinfo-edits": "Siamţhat zât",
        "pageinfo-authors": "Ziaktu hrang zât",
        "exif-languagecode": "Ţawng",
        "exif-iimversion": "IIM chhuah",
        "exif-iimcategory": "Pawl",
-       "watchlistall2": "a vaiin",
        "namespacesall": "a vaiin",
        "monthsall": "a vaiin",
        "confirm-watch-top": "I ralvèn zingah i telh duh maw?",
index 540d275..c028e24 100644 (file)
        "tog-extendwatchlist": "Izvērst uzraugāmo lapu sarakstu, lai parādītu visas veiktās izmaiņas (ne tikai pašas svaigākās)",
        "tog-usenewrc": "Grupēt izmaiņas pēc lapas pēdējās izmaiņās un uzraugāmo lapu sarakstā  (izmanto ''JavaScript'')",
        "tog-numberheadings": "Automātiski numurēt virsrakstus",
-       "tog-showtoolbar": "Rādīt rediģēšanas rīkjoslu",
-       "tog-editondblclick": "Atvērt lapu rediģēšanai ar dubultklikšķi",
-       "tog-editsectiononrightclick": "Atvērt sadaļas rediģēšanas lapu, uzklikšķinot ar labo peles pogu uz sadaļas virsraksta (izmanto ''JavaScript'')",
+       "tog-showtoolbar": "Rādīt labošanas rīkjoslu",
+       "tog-editondblclick": "Atvērt lapu labošanai ar dubultklikšķi",
+       "tog-editsectiononrightclick": "Atvērt sadaļas labošanas lapu, uzklikšķinot ar labo peles pogu uz sadaļas virsraksta (izmanto ''JavaScript'')",
        "tog-watchcreations": "Pievienot manis radītās lapas un manis augšuplādētos failus uzraugāmo lapu sarakstam",
        "tog-watchdefault": "Pievienot manis izmainītās lapas un failus uzraugāmo lapu sarakstam",
        "tog-watchmoves": "Pievienot manis pārvietotās lapas un failus uzraugāmo lapu sarakstam",
        "tog-watchdeletion": "Pievienot manis izdzēstās lapas un failus uzraugāmo lapu sarakstam",
        "tog-minordefault": "Atzīmēt visus labojumus jau sākotnēji par maznozīmīgiem",
-       "tog-previewontop": "Parādīt priekšskatījumu virs rediģēšanas lauka, nevis zem",
+       "tog-previewontop": "Parādīt priekšskatījumu virs labošanas lauka, nevis zem",
        "tog-previewonfirst": "Parādīt priekšskatījumu jau uzsākot rediģēšanu",
        "tog-enotifwatchlistpages": "Paziņot pa e-pastu par izmaiņām uzraugāmo rakstu sarakstā esošos rakstos un failos",
        "tog-enotifusertalkpages": "Paziņot pa e-pastu par izmaiņām manā diskusiju lapā",
@@ -59,7 +59,7 @@
        "tog-diffonly": "Nerādīt lapu saturu zem izmaiņām",
        "tog-showhiddencats": "Rādīt slēptās kategorijas",
        "tog-norollbackdiff": "Neņemt vērā atšķirības, veicot atriti",
-       "tog-useeditwarning": "Brīdināt mani, kad es atstāju lapas rediģēšanu nesaglabājot izmaiņas",
+       "tog-useeditwarning": "Brīdināt mani, kad es atstāju lapas labošanu, nesaglabājot izmaiņas",
        "tog-prefershttps": "Vienmēr izmantot drošu savienojumu pēc pieslēgšanās",
        "underline-always": "vienmēr",
        "underline-never": "Nekad",
        "and": "&#32;un",
        "qbfind": "Meklēšana",
        "qbbrowse": "Navigācija",
-       "qbedit": "Izmainīšana",
+       "qbedit": "Labošana",
        "qbpageoptions": "Šī lapa",
        "qbmyoptions": "Manas lapas",
        "faq": "BUJ",
        "permalink": "Pastāvīgā saite",
        "print": "Drukāt",
        "view": "Skatīt",
-       "edit": "Izmainīt šo lapu",
+       "edit": "Labot šo lapu",
        "create": "Izveidot",
        "editthispage": "Izmainīt šo lapu",
        "create-this-page": "Izveidot šo lapu",
        "otherlanguages": "Citās valodās",
        "redirectedfrom": "(Pāradresēts no $1)",
        "redirectpagesub": "Pāradresācijas lapa",
+       "redirectto": "Pāradresēt uz:",
        "lastmodifiedat": "Šajā lapā pēdējās izmaiņas izdarītas $2, $1.",
        "viewcount": "Šī lapa ir tikusi apskatīta $1 {{PLURAL:$1|reizi|reizes}}.",
        "protectedpage": "Aizsargāta lapa",
        "currentevents-url": "Project:Aktualitātes",
        "disclaimers": "Saistību atrunas",
        "disclaimerpage": "Project:Saistību atrunas",
-       "edithelp": "Rediģēšanas palīdzība",
+       "edithelp": "Labošanas palīdzība",
        "mainpage": "Sākumlapa",
        "mainpage-description": "Sākumlapa",
        "policy-url": "Project:Politika",
        "newmessageslinkplural": "{{PLURAL:$1|jauns vēstījums|999=jauni vēstījumi}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|pēdējā izmaiņa|999=pēdējās izmaiņas}}",
        "youhavenewmessagesmulti": "Tev ir jauns ziņojums: $1",
-       "editsection": "labot",
+       "editsection": "labot šo sadaļu",
        "editold": "labot",
        "viewsourceold": "aplūkot kodu",
        "editlink": "labot",
        "viewsourcelink": "aplūkot kodu",
-       "editsectionhint": "Rediģēt sadaļu: $1",
+       "editsectionhint": "Labot sadaļu: $1",
        "toc": "Satura rādītājs",
        "showtoc": "parādīt",
        "hidetoc": "paslēpt",
        "collapsible-collapse": "paslēpt",
        "collapsible-expand": "rādīt",
+       "confirmable-confirm": "Vai esi {{GENDER:$1|pārliecināts|pārliecināta}}?",
+       "confirmable-yes": "Jā",
+       "confirmable-no": "Nē",
        "thisisdeleted": "Apskatīt vai atjaunot $1?",
        "viewdeleted": "Skatīt $1?",
        "restorelink": "$1 {{PLURAL:$1|dzēsto versiju|dzēstās versijas}}",
        "gotaccount": "Tev jau ir lietotājvārds? '''$1'''!",
        "gotaccountlink": "Pieslēgties",
        "userlogin-resetlink": "Esat aizmirsis savu pieslēgšanās informāciju?",
+       "userlogin-resetpassword-link": "Aizmirsi savu paroli?",
        "userlogin-helplink2": "Palīdzība ar pieslēgšanos",
        "userlogin-loggedin": "Tu esi pieslēdzies ar lietotājvārdu {{GENDER:$1|$1}}.\nLai pieslēgtos ar citu lietotājvārdu, aizpildi šo formu.",
        "userlogin-createanother": "Izveidot citu kontu",
        "passwordreset-emailsent-capture": "Atgādinājuma e-pasta ziņojums ir nosūtīts, tas parādīts zemāk.",
        "passwordreset-emailerror-capture": "Atgādinājuma e-pasta ziņojums tika izveidots, tas parādīts zemāk, bet nosūtīšana lietotājam neizdevās: $1",
        "changeemail": "Mainīt e-pasta adresi",
-       "changeemail-header": "Mainīt konta e-pasta adresi",
        "changeemail-oldemail": "Pašreizējā e-pasta adrese:",
        "changeemail-newemail": "Jaunā e-pasta adrese:",
        "changeemail-none": "(nav)",
        "changeemail-password": "Jūsu {{SITENAME}} parole:",
        "changeemail-submit": "Mainīt e-pastu",
-       "changeemail-cancel": "Atcelt",
        "resettokens-tokens": "Žetoni:",
        "resettokens-token-label": "$1 (šībrīža vērtība: $2)",
        "bold_sample": "Teksts treknrakstā",
        "hr_tip": "Horizontāla līnija (neizmanto lieki)",
        "summary": "Kopsavilkums:",
        "subject": "Tēma/virsraksts:",
-       "minoredit": "maznozīmīgs labojums",
+       "minoredit": "Maznozīmīgs labojums",
        "watchthis": "Uzraudzīt šo lapu",
        "savearticle": "Saglabāt lapu",
        "preview": "Pirmskats",
        "blockedtext": "'''Tavs lietotāja vārds vai IP adrese ir nobloķēta.'''\n\n$1 nobloķēja tavu lietotāja vārdu vai IP adresi.\nBloķējot norādītais iemesls bija: ''$2''.\n\n*Bloka sākums: $8\n*Bloka beigas: $6\n*Bija domāts nobloķēt: $7\n\nTu vari sazināties ar $1 vai kādu citu [[{{MediaWiki:Grouppage-sysop}}|administratoru]] lai apspriestu šo bloku.\n\nPievērs uzmanību, tam, ka ja tu neesi norādījis derīgu e-pasta adresi ''[[Special:Preferences|savās izvēlēs]]'', tev nedarbosies \"sūtīt e-pastu\" iespēja.\n\nTava IP adrese ir $3 un bloka identifikators ir #$5. Lūdzu iekļauj vienu no tiem, vai abus, visos turpmākajos pieprasījumos.",
        "autoblockedtext": "Tava IP adrese ir tikusi automātiski nobloķēta, tāpēc, ka to (nupat kā) ir lietojis cits lietotājs, kuru nobloķēja $1.\nNorādītais bloķēšanas iemesls bija:\n\n:''$2''\n\n* Bloka sākums: $8\n* Bloka beigas: $6\n* Bija domāts nobloķēt: $7\n\nTu vari sazināties ar $1 vai kādu citu [[{{MediaWiki:Grouppage-sysop}}|adminu]] lai apspriestu šo bloku.\n\nAtceries, ka tu nevari lietot \"sūtīt e-pastu šim lietotājam\" iespēju, ja tu neesi norādījis derīgu e-pasta adresi savās [[Special:Preferences|lietotāja izvelēs]] un bloķējot tev nav aizbloķēta iespēja sūtīt e-pastu.\n\nTava pašreizējā IP adrese ir $3 un  bloka ID ir $5.\nLūdzu iekļauj šos visos ziņojumos, kurus sūti adminiem, apspriežot šo bloku.",
        "blockednoreason": "iemesls nav norādīts",
-       "whitelistedittext": "Tev $1 lai varētu rediģēt lapas.",
+       "whitelistedittext": "Lūdzu $1, lai varētu labot lapas.",
        "confirmedittext": "Lai varētu izmainīt lapas, vispirms jāapstiprina savu e-pasta adresi.\nNorādi un apstiprini e-pasta adresi savos [[Special:Preferences|lietotāja uzstādījumos]].",
        "nosuchsectiontitle": "Nevaru atrast sadaļu",
        "nosuchsectiontext": "Jūs mēģinājāt rediģēt sadaļu, kas neeksistē.\nTā var būt pārvietota vai dzēsta, kamēr jūs apskatījāt lapu.",
        "continue-editing": "Pāriet uz labošanas lauku",
        "session_fail_preview": "'''Neizdevās apstrādāt tavas izmaiņas, jo tika pazaudēti sesijas dati.\nLūdzu mēģini vēlreiz.\nJa tas joprojām nedarbojas, mēģini [[Special:UserLogout|izlogoties ārā]] un ielogoties no jauna.'''",
        "session_fail_preview_html": "'''Neizdevās apstrādāt tavas izmaiņas, jo tika pazaudēti sesijas dati.'''\n\n''Tā, kā {{grammar:ģenitīvs|{{SITENAME}}}} darbojas neapstrādāts HTML, pirmskats ir paslēpts, lai aizsargātos no JavaScripta  uzbrukumiem.''\n\n'''Ja šis bija parasts rediģēšanas mēģinājums, mēģini vēlreiz.\nJa tas joprojām nedarbojas, mēģini [[Special:UserLogout|izlogoties ārā]] un ielogoties no jauna.'''",
-       "editing": "Izmainīt $1",
+       "editing": "Labot $1",
        "creating": "Izveido lapu $1",
-       "editingsection": "Izmainīt $1 (sadaļa)",
-       "editingcomment": "Izmainīt $1 (jauna sadaļa)",
+       "editingsection": "Labot lapas \"$1\" sadaļu",
+       "editingcomment": "Labot $1 (jauna sadaļa)",
        "editconflict": "Izmaiņu konflikts: $1",
        "explainconflict": "Kāds cits ir izmainījis šo lapu pēc tam, kad tu sāki to mainīt.\nAugšējā teksta logā ir lapas teksts tā pašreizējā versijā.\nTevis veiktās izmaiņas ir redzamas apakšējā teksta logā.\nLai saglabātu savas izmaiņas, tev ir jāapvieno savs teksts ar saglabāto pašreizējo variantu.\nKad spiedīsi pogu \"{{int:savearticle}}\", tiks saglabāts '''tikai''' teksts, kas ir augšējā teksta logā.",
        "yourtext": "Tavs teksts",
        "nonunicodebrowser": "'''Brīdinājums: Tavs pārlūks neatbalsta unikodu.\nIr pieejams risinājums, kas ļaus tev droši rediģēt lapas: zīmes, kas nav ASCII, parādīsies izmaiņu logā kā heksadecimāli kodi.'''",
        "editingold": "'''BRĪDINĀJUMS: Saglabājot šo lapu, tu izmainīsi šīs lapas novecojušu versiju, un ar to tiks dzēstas visas izmaiņas, kas izdarītas pēc šīs versijas.'''",
        "yourdiff": "Atšķirības",
-       "copyrightwarning": "Lūdzu, ņem vērā, ka viss ieguldījums, kas veikts {{grammar:lokatīvs|{{SITENAME}}}}, ir uzskatāms par publiskotu saskaņā ar $2 (vairāk info skat. $1).\nJa nevēlies, lai Tevis rakstīto kāds rediģē un izplata tālāk, tad, lūdzu, nepievieno to šeit!<br />\n\nIzvēloties \"Saglabāt lapu\", Tu apliecini, ka šo rakstu esi rakstījis vai papildinājis pats vai izmantojis informāciju no darba, ko neaizsargā autortiesības, vai tamlīdzīga brīvi pieejama resursa.\n'''BEZ ATĻAUJAS NEPIEVIENO DARBU, KO AIZSARGĀ AUTORTIESĪBAS!'''",
+       "copyrightwarning": "Lūdzu, ņem vērā, ka viss ieguldījums, kas veikts {{grammar:lokatīvs|{{SITENAME}}}}, ir uzskatāms par publiskotu saskaņā ar $2 (vairāk info skatīt $1).\nJa nevēlies, lai Tevis rakstīto kāds labo un izplata tālāk, tad, lūdzu, nepievieno to šeit!<br />\n\nIzvēloties \"Saglabāt lapu\", Tu apliecini, ka šo rakstu esi rakstījis vai papildinājis pats vai izmantojis informāciju no darba, ko neaizsargā autortiesības, vai tamlīdzīga brīvi pieejama resursa.\n'''BEZ ATĻAUJAS NEPIEVIENO DARBU, KO AIZSARGĀ AUTORTIESĪBAS!'''",
        "copyrightwarning2": "Lūdz ņem vērā, ka visu ieguldījumu {{grammar:lokatīvs|{{SITENAME}}}} var rediģēt, mainīt vai izdzēst citi lietotāji. Ja negribi lai ar tavu rakstīto tā izrīkojas, nepievieno to šeit.\n\nTu apliecini, ka šo rakstu esi rakstījis vai papildinājis pats vai izmantojis informāciju no darba, ko neaizsargā autortiesības, vai tamlīdzīga brīvi pieejama resursa (sīkāk skatīt $1).\n\n'''BEZ ATĻAUJAS NEPIEVIENO DARBU, KO AIZSARGĀ AUTORTIESĪBAS!'''",
        "longpageerror": "'''Kļūda: Teksts, kuru tu mēģināji saglabāt, ir $1 kilobaitus garš, kas ir vairāk nekā pieļaujamie $2 kilobaiti.\nTas nevar tikt saglabāts.'''",
        "readonlywarning": "'''Brīdinājums: Datubāze ir slēgta apkopei, tāpēc tu tagad nevarēsi saglabāt veiktās izmaiņas.\nTu vari nokopēt tekstu un saglabāt kā teksta failu vēlākam laikam.'''\n\nAdmins, kas slēdza datubāzi, norādīja šādu paskaidrojumu: $1",
        "template-protected": "(aizsargāta)",
        "template-semiprotected": "(daļēji aizsargāta)",
        "hiddencategories": "Šī lapa ietilpst {{PLURAL:$1|1 slēptajā kategorijā|$1 slēptajās kategorijās}}:",
-       "nocreatetext": "{{grammar:lokatīvs|{{SITENAME}}}} ir atslēgta iespēja izveidot jauinas lapas.\nTu vari atgriezties atpakaļ un izmainīt esošu lapu, vai arī [[Special:UserLogin|ielogoties, vai izveidot kontu]].",
+       "nocreatetext": "{{grammar:lokatīvs|{{SITENAME}}}} ir atslēgta iespēja izveidot jaunas lapas.\nTu vari atgriezties atpakaļ un izlabot esošu lapu, vai arī [[Special:UserLogin|ielogoties, vai izveidot kontu]].",
        "nocreate-loggedin": "Tev nav atļaujas veidot jaunas lapas.",
        "sectioneditnotsupported-title": "Sadaļa rediģēšana nav atbalstīta",
        "sectioneditnotsupported-text": "Sadaļu rediģēsana šajā lapā nav atļauta.",
        "mergehistory-same-destination": "Avota un mērķa lapas nevar būt tās pašas",
        "mergehistory-reason": "Iemesls:",
        "mergelog": "Apvienošanas reģistrs",
-       "pagemerge-logentry": "apvienots [[$1]] ar [[$2]] (versijas līdz $3)",
        "revertmerge": "Atsaukt apvienošanu",
        "history-title": "\"$1\" versiju hronoloģija",
        "difference-title": "Atšķirības starp \"$1\" versijām",
        "searchrelated": "saistītais",
        "searchall": "viss",
        "showingresults": "Šobrīd ir {{PLURAL:$1|redzama|redzamas}} '''$1''' {{PLURAL:$1|lapa|lapas}}, sākot ar #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Šobrīd ir redzama '''$1''' lapa no '''$3'''|Šobrīd ir redzamas '''$1 — $2''' lapas no '''$3'''}}, kas satur '''$4'''",
        "search-nonefound": "Nav atrasti pieprasījumam atbilstoši rezultāti.",
        "powersearch-legend": "Izvērstā meklēšana",
        "powersearch-ns": "Meklēt šajās lapu grupās:",
        "prefs-rendering": "Izskats",
        "saveprefs": "Saglabāt",
        "restoreprefs": "Atjaunot noklusētos uzstādījumus (visās sadaļās)",
-       "prefs-editing": "Rediģēšana",
+       "prefs-editing": "Labošana",
        "rows": "Rindiņu skaits:",
        "columns": "Simbolu skaits rindiņā:",
        "searchresultshead": "Meklēšana",
        "recentchanges-noresult": "Norādītajā periodā šiem kritērijiem neatbilst neviena izmaiņa.",
        "recentchanges-feed-description": "Sekojiet līdzi jaunākajām izmaiņām vikijā izmantojot šo barotni.",
        "recentchanges-label-newpage": "Šī ir jaunizveidota lapa",
-       "recentchanges-label-minor": "Šī ir maznozīmīga izmaiņa",
-       "recentchanges-label-bot": "Šī ir bota veikta izmaiņa",
+       "recentchanges-label-minor": "Šis ir maznozīmīgs labojums",
+       "recentchanges-label-bot": "Šis ir bota veikts labojums",
        "recentchanges-label-unpatrolled": "Šis labojums vēl nav pārbaudīts",
        "recentchanges-label-plusminus": "Par tik baitiem tika izmainīts lapas izmērs",
        "recentchanges-legend-heading": "'''Apzīmējumi:'''",
        "rcnotefrom": "Šobrīd redzamas izmaiņas kopš '''$2''' (parādītas ne vairāk par '''$1''').",
        "rclistfrom": "Parādīt jaunas izmaiņas kopš $3 $2",
        "rcshowhideminor": "$1 maznozīmīgos",
+       "rcshowhideminor-show": "Rādīt",
+       "rcshowhideminor-hide": "Slēpt",
        "rcshowhidebots": "$1 botus",
+       "rcshowhidebots-show": "Rādīt",
+       "rcshowhidebots-hide": "Slēpt",
        "rcshowhideliu": "$1 reģistrētos lietotājus",
+       "rcshowhideliu-show": "Rādīt",
+       "rcshowhideliu-hide": "Slēpt",
        "rcshowhideanons": "$1 anonīmos",
-       "rcshowhidepatr": "$1 pārbaudītie labojumi",
+       "rcshowhideanons-show": "Rādīt",
+       "rcshowhideanons-hide": "Slēpt",
+       "rcshowhidepatr": "$1 pārbaudītos labojumus",
+       "rcshowhidepatr-show": "Rādīt",
+       "rcshowhidepatr-hide": "Slēpt",
        "rcshowhidemine": "$1 manus",
+       "rcshowhidemine-show": "Rādīt",
+       "rcshowhidemine-hide": "Slēpt",
        "rclinks": "Parādīt pēdējās $1 izmaiņas pēdējās $2 dienās.<br />$3",
        "diff": "izmaiņas",
        "hist": "hronoloģija",
        "number_of_watching_users_pageview": "[šo lapu uzrauga $1 {{PLURAL:$1|lietotājs|lietotāji}}]",
        "rc_categories": "Ierobežot uz kategorijām (atdalīt ar \"|\")",
        "rc_categories_any": "Jebkas",
+       "rc-change-size-new": "$1 {{PLURAL:$1|baits|baiti}} pēc izmaiņām",
        "newsectionsummary": "/* $1 */ jauna sadaļa",
        "rc-enhanced-expand": "Skatīt detaļas",
        "rc-enhanced-hide": "Paslēpt detaļas",
        "reuploaddesc": "Atcelt augšupielādi un atgriezties pie augšupielādes veidnes.",
        "upload-tryagain": "Iesniegt izmainīto faila aprakstu",
        "uploadnologin": "Neesi iegājis",
-       "uploadnologintext": "Tev jābūt [[Special:UserLogin|iegājušam]], lai augšuplādētu failus.",
+       "uploadnologintext": "Lūdzu, $1, lai augšupielādētu failus.",
        "upload_directory_missing": "Augšupielādes direktorijs ($1) ir pazudis, un to tīmekļa serveris nevar izveidot.",
        "upload_directory_read_only": "Augšupielādes direktoriju ($1) tīmekļa serveris nevar labot.",
        "uploaderror": "Augšupielādes kļūda",
        "randompage": "Nejauša lapa",
        "randomincategory": "Nejauša lapa kategorijā",
        "randomincategory-invalidcategory": "\"$1\" nav derīgs kategorijas nosaukums.",
+       "randomincategory-category": "Kategorija:",
+       "randomincategory-legend": "Nejauša lapa kategorijā",
        "randomredirect": "Nejauša pāradresācijas lapa",
        "statistics": "Statistika",
        "statistics-header-pages": "Lapu statistika",
        "statistics-header-edits": "Izmaiņu statistika",
-       "statistics-header-views": "Apskatīt statistiku",
        "statistics-header-users": "Statistika par lietotājiem",
        "statistics-header-hooks": "Cita statistika",
        "statistics-articles": "Satura lapas",
        "statistics-files": "Augšuplādētie faili",
        "statistics-edits": "Lapu izmaiņas kopš {{grammar:ģenitīvs{{SITENAME}}}} izveidošanas",
        "statistics-edits-average": "Vidējais izmaiņu skaits uz lapu",
-       "statistics-views-total": "Skatījumi kopā",
-       "statistics-views-peredit": "Skatījumu skaits uz labojumu",
        "statistics-users": "Reģistrēti lietotāji",
        "statistics-users-active": "Aktīvi lietotāji",
        "statistics-users-active-desc": "Lietotāji, kas ir veikuši jebkādu darbību {{PLURAL:$1|iepriekšējā dienā|iepriekšējās $1 dienās}}",
-       "statistics-mostpopular": "Visvairāk skatītās lapas",
        "pageswithprop-prop": "Īpašības nosaukums:",
        "pageswithprop-submit": "Aiziet",
        "doubleredirects": "Divkāršas pāradresācijas lapas",
        "uncategorizedtemplates": "Nekategorizētās veidnes",
        "unusedcategories": "Neizmantotas kategorijas",
        "unusedimages": "Neizmantoti attēli",
-       "popularpages": "Populārākās lapas",
        "wantedcategories": "Sarkanas kategorijas",
        "wantedpages": "Pieprasītās lapas",
        "wantedfiles": "Vajadzīgie faili",
        "querypage-disabled": "Šī īpašā lapā ir atspējota veiktspējas iemeslu dēļ.",
        "booksources": "Grāmatu avoti",
        "booksources-search-legend": "Meklēt grāmatu avotus",
-       "booksources-go": "Meklēt",
        "specialloguserlabel": "Izpildītājs:",
        "speciallogtitlelabel": "Mērķis (nosaukums vai lietotājs):",
        "log": "Reģistri",
        "mywatchlist": "Uzraugāmie raksti",
        "watchlistfor2": "Priekš $1 ($2)",
        "nowatchlist": "Tavā uzraugāmo rakstu sarakstā nav neviena raksta.",
-       "watchlistanontext": "Lūdzu $1, lai apskatītu vai labotu savu uzraugāmo rakstu saraksta saturu.",
+       "watchlistanontext": "Lūdzu pieslēdzies, lai apskatītu vai labotu savu uzraugāmo rakstu saraksta saturu.",
        "watchnologin": "Neesi iegājis",
        "addwatch": "Pievienot uzraugāmo lapu sarakstam",
        "addedwatchtext": "Lapa \"[[:$1]]\" ir pievienota [[Special:Watchlist|tevis uzraudzītajām lapām]], kur tiks parādītas izmaiņas, kas izdarītas šajā lapā vai šīs lapas diskusiju lapā, kā arī šī lapa tiks iezīmēta '''pustrekna''' [[Special:RecentChanges|pēdējo izmaiņu lapā]], lai to būtu vieglāk pamanīt.\n\nJa vēlāk pārdomāsi un nevēlēsies vairs uzraudzīt šo lapu, klikšķini uz saites '''neuzraudzīt''' rīku joslā.",
        "watchlist-details": "(Tu uzraugi $1 {{PLURAL:$1|lapu|lapas}}, neieskaitot diskusiju lapas.)",
        "wlheader-enotif": "E-pasta paziņojumi ir ieslēgti.",
        "wlheader-showupdated": "Lapas, kuras ir tikušas izmainītas, kopš tu tās pēdējoreiz apskatījies, te rādās ar '''pustrekniem''' burtiem",
-       "wlshowlast": "Parādīt izmaiņas pēdējo $1 stundu laikā vai $2 dienu laikā, vai arī $3.",
+       "wlshowlast": "Parādīt izmaiņas pēdējo $1 stundu laikā vai $2 dienu laikā, vai arī .",
        "watchlist-options": "Uzraugāmo rakstu saraksta opcijas",
        "watching": "Uzrauga...",
        "unwatching": "Neuzrauga...",
        "rollbacklinkcount-morethan": "atcelt vairāk kā $1 {{PLURAL:$1|labojumu|labojumus}}",
        "rollbackfailed": "Novēršana neizdevās",
        "cantrollback": "Nav iespējams novērst labojumu; iepriekšējais labotājs ir vienīgais lapas autors.",
-       "alreadyrolled": "Nav iespējams novērst pēdējās izmaiņas, ko lapā [[:$1]] saglabāja [[User:$2|$2]] ([[User talk:$2|diskusija]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]). Kāds cits jau ir rediģējis šo lapu vai novērsis izmaiņas.\n\nPēdējās izmaiņas saglabāja [[User:$3|$3]] ([[User talk:$3|diskusija]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "alreadyrolled": "Nav iespējams novērst pēdējās izmaiņas, ko lapā [[:$1]] saglabāja [[User:$2|$2]] ([[User talk:$2|diskusija]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]). Kāds cits jau ir labojis šo lapu vai novērsis izmaiņas.\n\nPēdējās izmaiņas saglabāja [[User:$3|$3]] ([[User talk:$3|diskusija]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Attiecīgās izmaiņas kopsavilkums bija: \"''$1''\".",
        "revertpage": "Novērsu izmaiņas, ko izdarīja [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusija]]), atjaunoju versiju, ko saglabāja [[User:$1|$1]]",
        "revertpage-nouser": "Novērsu (lietotājvārds slēpts) izmaiņas, atjaunoju [[User:$1|$1]] versiju.",
        "minimum-size": "Mazākais izmērs",
        "maximum-size": "Lielākais izmērs:",
        "pagesize": "(baiti)",
-       "restriction-edit": "Izmainīt",
+       "restriction-edit": "Labot",
        "restriction-move": "Pārvietot",
        "restriction-create": "Izveidot",
        "restriction-upload": "Augšupielādēt",
        "tooltip-pt-login": "Aicinām tevi ieiet {{grammar:lokatīvs|{{SITENAME}}}}, tomēr tas nav obligāti.",
        "tooltip-pt-logout": "Iziet",
        "tooltip-ca-talk": "Diskusija par šī raksta lapu",
-       "tooltip-ca-edit": "Izmainīt šo lapu. Lūdzam izmantot pirmskatu pirms lapas saglabāšanas.",
+       "tooltip-ca-edit": "Labot šo lapu. Lūdzam izmantot pirmskatu pirms lapas saglabāšanas.",
        "tooltip-ca-addsection": "Sākt jaunu sadaļu",
        "tooltip-ca-viewsource": "Šī lapa ir aizsargāta. Tu vari apskatīties tās izejas kodu.",
        "tooltip-ca-history": "Šīs lapas iepriekšējās versijas.",
        "pageinfo-length": "Lapas garums (baitos)",
        "pageinfo-article-id": "Lapas ID",
        "pageinfo-language": "Lappuses satura valoda",
-       "pageinfo-views": "Skatījumu skaits",
        "pageinfo-watchers": "Lapas uzraudzītāju skaits",
        "pageinfo-redirects-name": "Pāradresāciju skaits uz šo lapu",
        "pageinfo-subpages-name": "Šīs lapas apakšlapas",
        "file-info-png-frames": "$1 {{PLURAL:$1|kadrs|kadri}}",
        "newimages": "Jauno attēlu galerija",
        "imagelisttext": "Šobrīd redzams $1 {{PLURAL:$1|attēla|attēlu}} uzskaitījums, kas sakārtots $2.",
-       "newimages-summary": "Šeit var apskatīties pēdējos šeit augšuplādētos failus.",
+       "newimages-summary": "Šeit var apskatīties pēdējos augšuplādētos failus šajā Vikipēdijā",
        "newimages-legend": "Filtrs",
        "newimages-label": "Faila nosaukums (vai tā daļa):",
+       "newimages-showbots": "Parādīt botu augšupielādētos failus",
        "noimages": "Nav nekā ko redzēt.",
        "ilsubmit": "Meklēt",
        "bydate": "<b>pēc datuma</b>",
        "exif-urgency-low": "Zema ($1)",
        "exif-urgency-high": "Augsta ($1)",
        "exif-urgency-other": "Lietotāja definēta prioritāte ($1)",
-       "watchlistall2": "visas",
        "namespacesall": "visas",
        "monthsall": "visi",
        "confirmemail": "Apstiprini e-pasta adresi",
        "logentry-newusers-create": "Lietotāja konts $1 tika {{GENDER:$2|izveidots}}",
        "logentry-newusers-create2": "$1 {{GENDER:$2|izveidoja}} lietotāja kontu $3",
        "logentry-newusers-autocreate": "Lietotaja konts $1 tika {{GENDER:$2|izveidots}} automātiski",
+       "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",
index 03355b6..589613f 100644 (file)
@@ -44,7 +44,7 @@
        "tog-forceeditsummary": "漏概醒之",
        "tog-watchlisthideown": "不哨己文",
        "tog-watchlisthidebots": "不哨僕文",
-       "tog-watchlisthideminor": "不哨纂",
+       "tog-watchlisthideminor": "不哨纂",
        "tog-watchlisthideliu": "不哨有簿",
        "tog-watchlisthideanons": "不哨無簿",
        "tog-watchlisthidepatrolled": "不哨已巡",
        "youhavenewmessages": "有$1書至子書房也。($2)",
        "youhavenewmessagesfromusers": "子有 $1 自 {{PLURAL:$3|一簿戶也|$3 簿戶也}} ($2)。",
        "youhavenewmessagesmanyusers": "子有 $1 自多簿戶 ( $2 )",
-       "newmessageslinkplural": "{{PLURAL:$1|一新訊息|新訊息}}",
-       "newmessagesdifflinkplural": "新{{PLURAL:$1|易|易}}",
+       "newmessageslinkplural": "{{PLURAL:$1|一新訊|999=新訊}}",
+       "newmessagesdifflinkplural": "新",
        "youhavenewmessagesmulti": "新訊於$1",
        "editsection": "纂",
        "editold": "纂",
        "hidetoc": "藏",
        "collapsible-collapse": "摺",
        "collapsible-expand": "展",
+       "confirmable-yes": "是",
+       "confirmable-no": "否",
        "thisisdeleted": "還$1或閱之?",
        "viewdeleted": "閱$1之?",
        "restorelink": "$1已刪",
        "nospecialpagetext": "<strong>無此特查。</strong>\n\n見[[Special:SpecialPages|{{int:specialpages}}]]。",
        "error": "有誤",
        "databaseerror": "庫藏誤然",
+       "databaseerror-query": "尋:$1",
+       "databaseerror-error": "錯:$1",
        "laggedslavemode": "警示,此頁不新",
        "readonly": "鎖庫藏",
        "enterlockreason": "何以鎖之?何日啟之?",
        "changeemail": "更郵址",
        "changeemail-none": "(無)",
        "changeemail-password": "汝 {{SITENAME}} 之符節",
-       "changeemail-cancel": "棄",
        "bold_sample": "粗體",
        "bold_tip": "粗體",
        "italic_sample": "斜體",
        "mergehistory-same-destination": "源頁和到頁無同也",
        "mergehistory-reason": "因:",
        "mergelog": "誌併",
-       "pagemerge-logentry": "併咗[[$1]]至[[$2]] (訂至$3)",
        "revertmerge": "悔併",
        "mergelogpagetext": "下乃近頁之誌併至二頁之表也。",
        "history-title": "$1之誌",
        "searchrelated": "關",
        "searchall": "全",
        "showingresults": "見'''$1'''尋,自'''$2'''始:",
-       "showingresultsheader": "見'''$4''',{{PLURAL:$5|'''$1''''''$3'''之尋|'''$1 - $2''',共'''$3'''之尋}}",
        "search-nonefound": "詢中無結。",
        "powersearch-legend": "尋",
        "powersearch-ns": "尋名集:",
        "preferences": "簿註",
        "mypreferences": "簿註",
        "prefs-edits": "數計:",
+       "prefsnologintext2": "登簿以更簿註",
        "prefs-skin": "面版",
        "skin-preview": "草覽",
        "datedefault": "原註",
        "recentchanges": "近易",
        "recentchanges-legend": "近易項",
        "recentchanges-summary": "共筆揮新,悉列於此。",
+       "recentchanges-noresult": "無易。",
        "recentchanges-feed-description": "跟wiki源之近易。",
        "recentchanges-label-newpage": "此纂開新頁",
        "recentchanges-label-minor": "此乃細纂",
        "filehist-thumb": "縮",
        "filehist-thumbtext": "於$1之縮",
        "filehist-nothumb": "無縮",
-       "filehist-user": "",
+       "filehist-user": "簿",
        "filehist-dimensions": "度",
        "filehist-filesize": "檔幅",
        "filehist-comment": "註",
        "statistics": "彙統",
        "statistics-header-pages": "頁彙統",
        "statistics-header-edits": "纂彙統",
-       "statistics-header-views": "閱彙統",
        "statistics-header-users": "有簿彙統",
        "statistics-header-hooks": "他彙統",
        "statistics-articles": "容頁",
        "statistics-files": "已貢",
        "statistics-edits": "自{{SITENAME}}設之頁纂數",
        "statistics-edits-average": "每頁均纂數",
-       "statistics-views-total": "閱總",
-       "statistics-views-total-desc": "不包無存之頁與奇頁之閱數",
-       "statistics-views-peredit": "每纂閱數",
        "statistics-users": "註[[Special:ListUsers|簿]]",
        "statistics-users-active": "活簿",
        "statistics-users-active-desc": "早$1日前更動之簿",
-       "statistics-mostpopular": "燴炙",
        "pageswithprop-submit": "往",
        "doubleredirects": "窮渡",
        "doubleredirectstext": "頁下窮渡,迭列以示。首尾宿合,宜正渡之。\n<del>劃</del>已解之。",
        "double-redirect-fixer": "修渡",
        "brokenredirects": "斷渡",
        "brokenredirectstext": "頁下斷渡。",
-       "brokenredirects-edit": "",
+       "brokenredirects-edit": "",
        "brokenredirects-delete": "刪",
        "withoutinterwiki": "孤語",
        "withoutinterwiki-summary": "頁下無鏈他語。",
        "uncategorizedtemplates": "待蘸",
        "unusedcategories": "樞鏽",
        "unusedimages": "色褪",
-       "popularpages": "膾炙",
        "wantedcategories": "求門",
        "wantedpages": "徵頁",
        "wantedpages-badtitle": "結組無題: $1",
        "querypage-disabled": "此奇頁基以效,故停之。",
        "booksources": "書海",
        "booksources-search-legend": "舀書海",
-       "booksources-go": "往",
+       "booksources-search": "尋",
        "booksources-text": "有賈售新舊書,或有助焉。茲列如下:",
        "booksources-invalid-isbn": "供之ISBN無確,查始複之誤。",
        "specialloguserlabel": "簿:",
        "wlheader-enotif": "*准報信。",
        "wlheader-showupdated": "*易者'''粗體'''。",
        "wlnote": "近<b>$2</b>時有$1者易。",
-       "wlshowlast": "見近$1時、$2天、$3時易",
+       "wlshowlast": "見近$1時、$2天易",
        "watchlist-options": "哨項",
        "watching": "出陣…",
        "unwatching": "收兵…",
        "exbeforeblank": "清文前乃為:「$1」",
        "delete-confirm": "刪\"$1\"",
        "delete-legend": "刪",
-       "historywarning": "警示,此頁有誌$1:",
+       "historywarning": "警示,此頁有誌$1:",
        "confirmdeletetext": "欲刪此物與誌,知後果、合[[{{MediaWiki:Policy-url}}]]後再為之。",
        "actioncomplete": "成矣",
        "actionfailed": "未竟",
        "allmessages-prefix": "以前綴濾:",
        "allmessages-language": "言:",
        "allmessages-filter-submit": "始",
+       "allmessages-filter-translate": "譯",
        "thumbnail-more": "展",
        "filemissing": "喪檔",
        "thumbnail_error": "縮圖$1有誤",
        "import": "圖入匯",
        "importinterwiki": "維基互匯",
        "import-interwiki-text": "欲入匯,擇維基、揀題文,審時、纂者隨記也。互匯錄於[[Special:Log/import|誌入]]。",
+       "import-interwiki-sourcepage": "源頁:",
        "import-interwiki-history": "審、誌同匯",
        "import-interwiki-submit": "入匯",
        "import-interwiki-namespace": "入名集:",
        "exif-gpsdestdistance-k": "千米",
        "exif-gpsdestdistance-m": "哩",
        "exif-gpsdestdistance-n": "浬",
-       "watchlistall2": "全",
        "namespacesall": "全",
        "monthsall": "全",
        "confirmemail": "核郵驛",
        "intentionallyblankpage": "此頁為白也,試速之用",
        "external_image_whitelist": " #同留<pre>\n#下(中之//)乃正表式\n#乃外(連)圖配之\n#配乃成像,非配則成連\n#有 # 之為注\n#無為大小之異也\n\n#入正表式。同留</pre>",
        "tag-filter": "[[Special:Tags|標]] 之濾:",
+       "tags-title": "標",
        "tags-tag": "標名",
+       "tags-active-yes": "是",
+       "tags-active-no": "否",
        "tags-edit": "纂",
        "comparepages": "較頁",
        "compare-page1": "頁一",
        "revdelete-restricted": "應限至有秩",
        "revdelete-unrestricted": "除限自有秩",
        "rightsnone": "(凡)",
-       "searchsuggest-search": "尋"
+       "revdelete-summary": "摘",
+       "searchsuggest-search": "尋",
+       "pagelang-language": "語",
+       "mediastatistics-header-unknown": "未知",
+       "mediastatistics-header-video": "映像",
+       "json-error-syntax": "語法有誤"
 }
index bbae542..e5ab3e2 100644 (file)
        "pager-older-n": "{{PLURAL:$1|çkva mcveşi 1|çkva mcveşi $1}}",
        "booksources": "Odude svarape",
        "booksources-search-legend": "Svaraş odudepe mgori",
-       "booksources-go": "İgzali",
        "log": "Kʼayitʼepe",
        "allpages": "Mteli butʼkʼape",
        "prevpage": "İptineri butʼkʼa ($1)",
        "watchthispage": "Butʼkʼa gatxozi",
        "unwatch": "Gotxozu naşkʼvi",
        "watchlist-details": "{{PLURAL:$1|$1 butʼkʼa|$1 butʼkʼa}}, skani gotxozu listʼes ren, ama oğarğaluşi butʼkʼapes va ren",
-       "wlshowlast": "Çodinaşi $1 saatʼi $2 ndğa ko3ʼiri $3",
+       "wlshowlast": "Çodinaşi $1 saatʼi $2 ndğa ko3ʼiri",
        "watchlist-options": "Gotxozu listʼeşi tercihepe",
        "watching": "i3ʼkʼedinen...",
        "unwatching": "var i3ʼkʼedinen...",
        "metadata-expand": "Detayepe ko3ʼiri",
        "metadata-collapse": "Detayepe doşinaxi",
        "metadata-fields": "Am butʼkʼas na ilistʼelinen EXIF metadataş burmepe, resimi ozʼiramuşi butʼkʼapes metadata tʼablo na ğuru oras ixmarinen. Majuranepeti maartani oqʼopinot işinaxasen.\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",
-       "watchlistall2": "mteli",
        "namespacesall": "mteli",
        "monthsall": "mteli",
        "watchlisttools-view": "Am tema kʼala alakʼali na renan oktirobape ko3ʼiri",
index e6169e6..2040d3e 100644 (file)
                        "Umeshberma",
                        "Vinitutpal",
                        "아라",
-                       "बिप्लब आनन्द"
+                       "बिप्लब आनन्द",
+                       "सरोज कुमार ढकाल"
                ]
        },
        "tog-underline": "लिंककेँ रेखांकित करू:",
        "tog-hideminor": "सन्निकट परिवर्त्तनमे छोट परिवर्त्तन नुकाऊ",
        "tog-hidepatrolled": "सन्निकट परिवर्त्तनमे छोट परिवर्त्तन नुकाऊ",
        "tog-newpageshidepatrolled": "नियंत्रित सम्पादनकेँ नव पन्ना सूचीसँ नुकाऊ",
-       "tog-extendwatchlist": "धà¥\8dयानसà¥\82à¤\9aà¥\80मà¥\87 à¤¸à¤­ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¦à¥\87à¤\96ाà¤\8a,à¤\96ालà¥\80 à¤¹à¤¾à¤²à¤\95 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¨à¥\88",
+       "tog-extendwatchlist": "सनà¥\8dनिà¤\95à¤\9f à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¨à¥\88,à¤\85à¤\96न à¤§à¥\8dयानसà¥\82à¤\9aà¥\80मà¥\87 à¤°à¤¹à¤² à¤¸à¤­ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¦à¥\87à¤\96ाà¤\8a",
        "tog-usenewrc": "नीक सन्निकट परिवर्तन प्रयोग करू (जावास्क्रिप्ट चाही)",
        "tog-numberheadings": "शीर्षक स्वयं-क्रमांकित करू",
        "tog-showtoolbar": "संपादन ओजारपेटी देखाऊ (जावास्क्रीप्ट)",
@@ -38,7 +39,7 @@
        "tog-watchrollback": "हमरा द्वारा जोडलगेल पृष्ठ हमार सांकक्ष सूचीमे राखू",
        "tog-minordefault": "हमर सभ सम्पादन पूर्वन्यस्त रूपेँ मामूली कहू",
        "tog-previewontop": "संपादन पेटीक ऊपर दृश्य देखाऊ",
-       "tog-previewonfirst": "पहिल à¤¸à¤®à¥\8dपादनक बाद पूर्वावलोकन देखाउ",
+       "tog-previewonfirst": "पहिल à¤¸à¤\82पादनक बाद पूर्वावलोकन देखाउ",
        "tog-enotifwatchlistpages": "जौं हमर ध्यानसूचीक कोनो पन्नामे परिवर्तन हुअए तँ हमरा ई-पत्र पठाउ",
        "tog-enotifusertalkpages": "हमर सदस्य वार्ता पृष्ठ पर भेल परिवर्त्तनक हेतु हमरा ई-मेल करथि",
        "tog-enotifminoredits": "छोट परिवर्त्तनक हेतु सेहो हमरा ई-मेल पठाऊ",
        "cancel": "समाप्त",
        "moredotdotdot": "आर...",
        "morenotlisted": "ई पुरा सूची नै अछी ।",
-       "mypage": "हमर à¤ªà¤¨à¥\8dना",
+       "mypage": "पन्ना",
        "mytalk": "वार्त्ता",
        "anontalk": "ऐ अनिकेत पता लेल विमर्श",
        "navigation": "संचार",
        "variants": "प्रकार सभ",
        "navigation-heading": "दिक्चालन सूची",
        "errorpagetitle": "गलती",
-       "returnto": "$1 à¤ªà¤° à¤\98à¥\81रà¥\81।",
+       "returnto": "$1 à¤ªà¤° à¤\86à¤\89।",
        "tagline": "कतयसँ {{SITENAME}}",
        "help": "मदति",
        "search": "ताकू",
        "searchbutton": "ताकू",
-       "go": "à¤\9cाà¤\89",
+       "go": "à¤\9cाà¤\8a",
        "searcharticle": "जाऊ",
        "history": "पन्नाक इतिहास",
        "history_short": "इतिहास",
        "otherlanguages": "दोसर भाषामे",
        "redirectedfrom": "(एतयसँ बहटारल $1)",
        "redirectpagesub": "पन्नाकेँ पठाउ",
+       "redirectto": "मे पुनर्निर्देश:",
        "lastmodifiedat": "ई पन्ना अंतिम बेर संवर्धित भेल $1, केँ  $2 बजे।",
        "viewcount": "ई पन्ना देखल गेल {{PLURAL:$1|एक बेर|$1 एतेक बेर}}",
        "protectedpage": "संरक्षित पन्ना",
        "restorelink": "{{PLURAL:$1|एकटा मेटाएल सम्पादन|$1 मेटाएल सम्पादन सभ}}",
        "feedlinks": "सूचक:",
        "feed-invalid": "अमान्य सूचक प्रकार मासुल",
-       "feed-unavailable": "ाधिकृत सूचक उपलब्ध नै अछि",
+       "feed-unavailable": "à¤\85धिकृत सूचक उपलब्ध नै अछि",
        "site-rss-feed": "$1 आरएसएस फीड",
        "site-atom-feed": "$1 अणु फीड",
        "page-rss-feed": "\"$1\" आर.एस.एस. सूचना",
        "page-atom-feed": "\"$1\" अणु सू़चना",
        "feed-atom": "अणु",
        "feed-rss": "आर.एस.एस.",
-       "red-link-title": "$1 (पà¥\83षà¥\8dठ à¤\89पलबà¥\8dध à¤¨à¥\88  अछि)",
+       "red-link-title": "$1 (पनà¥\8dना à¤\89पलबà¥\8dध à¤¨à¥\88 अछि)",
        "sort-descending": "घटैत क्रममे छाँटू",
        "sort-ascending": "बढ़ैत क्रममे छाँटू",
        "nstab-main": "पृष्ठ",
        "viewsourcetext": "अहाँ ऐ पन्नाक जड़िकेँ देख आ अनुकृत कऽ सकै छी:",
        "viewyourtext": "अहाँ '''अहाँक सम्पादन''' केँ देख आ एतए उतारि सकै छी:",
        "protectedinterface": "ई पन्ना तंत्रांश लेल मध्यस्थ पाठक व्यवस्था करैत अछि, आ अपशब्द रोकबाक ब्योंत करैत अछि।",
-       "editinginterface": "'''चेतौनी''' अहाँ एकटा एहेन पन्नाक सम्पादन कऽ रहल छी जे तंत्रांशक मध्यस्थ पन्नाकेँ पाठ देबा लेल प्रयोग भऽ रहल अछि।\nऐ पन्नामे परिवर्तन दोसर प्रयोक्ता लेल प्रयोक्ता मध्यस्थक रूपमे परिवर्तन करत।\nअनुवाद लेल [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] जाउ, मीडियाविकी स्थानीयकरण परियोजनापर।",
+       "editinginterface": "'''चेतौनी''' अहाँ एकटा एहेन पन्नाक सम्पादन कऽ रहल छी जे तंत्रांशक मध्यस्थ पन्नाकेँ पाठ देबा लेल प्रयोग भऽ रहल अछि।\nऐ पन्नामे परिवर्तन दोसर प्रयोक्ता लेल प्रयोक्ता मध्यस्थक रूपमे परिवर्तन करत।\nअनुवाद लेल [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] जाउ, मीडियाविकी स्थानीयकरण परियोजना पर।",
        "cascadeprotected": "ऐ पन्नाक सम्पादन सम्भव नै अछि, कारण ई ऐ मे सम्मिलित अछि, {{PLURAL:$1|पन्ना, जे अछि|पन्ना, से सभ अछि}} सुरक्षित अछि \"तराउपड़ी\" विकल्प खोललाक बाद:\n$2",
        "namespaceprotected": "अहाँकेँ '''$1''' नाम-पेटारमे सम्पादनक अनुमति नै अछि।",
        "customcssprotected": "अहांकें ऐ सी.एस.एस.पन्नाकें सम्पादित करबाक अधिकार नै अछि, कारण ऐमे दोसर प्रयोक्ताक व्यक्तिगत विकल्प छै।",
        "customjsprotected": "अहांकें ऐ जावास्क्रिप्ट पन्नाकें सम्पादित करबाक अधिकार नै अछि, कारण ऐमे दोसर प्रयोक्ताक व्यक्तिगत विकल्प छै।",
-       "mycustomcssprotected": "अहाके लेल ई CSS पन्नाके सम्पादित करवाक अधिकार नै अछि।",
+       "mycustomcssprotected": "अहाके लेल ई सीएसएस पन्नाके सम्पादित करवाक अधिकार नै अछि।",
        "mycustomjsprotected": "अहके लेल इ जावास्क्रिप्ट पन्नाके सम्पादित करवाक अधिकार नै अछि।",
        "myprivateinfoprotected": "अहाके अपन व्यक्तिगत जानकारी बदलैक अनुमति नै अछि।",
        "mypreferencesprotected": "अहाके अपन प्राथमिकता बदलैक अनुमति नै अछि।",
        "invalidtitle-knownnamespace": "\"$2\" नामस्थान आर \"$3\" नाम बला गलत शीर्षक",
        "invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 आर नाम \"$2\" वाला गलत शीर्षक",
        "exception-nologin": "सम्प्रवेशित नै",
+       "exception-nologin-text": "इ पन्ना वा काजके सक्षम करवाक लेल कृपया प्रवेश करु।",
        "exception-nologin-text-manual": "इ पन्ना वा काजके सक्षम करवाक लेल कृपया $1 करु।",
        "virus-badscanner": "खराप विन्यास: अज्ञात विषविधि बिम्बक: ''$1''",
        "virus-scanfailed": "बिम्ब विफल (विध्यादेश $1)",
        "password-change-forbidden": "अहा इ विकिमे कूटशब्द नै बदल सकैत छि ।",
        "externaldberror": "खाहे सत्यापन दतांश भ्रम छल वा अहाँ अपन बाह्य खाताकेँ अद्यतन करबामे असमर्थ छी।",
        "login": "सम्प्रवेश",
-       "nav-login-createaccount": "सदसà¥\8dय à¤²à¥\89à¤\97 à¤\87न",
-       "userlogin": "लà¥\89à¤\97 à¤\87न / खेसरा बनाऊ",
+       "nav-login-createaccount": "समà¥\8dपà¥\8dरवà¥\87श /à¤\96à¥\87सरा à¤¬à¤¨à¤¾à¤\8a",
+       "userlogin": "समà¥\8dपà¥\8dरवà¥\87श/ खेसरा बनाऊ",
        "userloginnocreate": "सम्प्रवेश",
        "logout": "निष्क्रमण",
        "userlogout": "फेर आयब",
        "userlogin-joinproject": "{{SITENAME}} से जोडु",
        "nologin": "खाता नै अछि? $1।",
        "nologinlink": "नव खाता खोलू",
-       "createaccount": "à¤\96ाता à¤\96à¥\8bलà¥\80",
+       "createaccount": "à¤\96ाता à¤\96à¥\8bलà¥\82",
        "gotaccount": "पहिनहियेसँ खाता अछि? $1",
        "gotaccountlink": "सम्प्रवेश",
        "userlogin-resetlink": "अपन सम्प्रवेश विवरण बिसरि गेलहुँ?",
        "createacct-another-realname-tip": "मूल नाम वैकल्पिक अछि।\nजँ अहाँ एकरा देबा लेल प्रयोग करै छी, ई अहाँकेँ काजक श्रेय देबा लेल एकर प्रयोग कएल जाएत।",
        "pt-login": "सम्प्रवेश",
        "pt-login-button": "सम्प्रवेश",
-       "pt-createaccount": "à¤\96ाता à¤\96à¥\8bलà¥\80",
+       "pt-createaccount": "à¤\96ाता à¤\96à¥\8bलà¥\82",
        "pt-userlogout": "निष्क्रमण",
        "php-mail-error-unknown": "पी.एच.पी.क संदेश कार्य() मे अज्ञात दोष",
        "user-mail-no-addy": "बिन ई-पत्र संकेतक ई-पत्र पठेबाक प्रयास",
        "resetpass-submit-loggedin": "कूटशब्द बदलू",
        "resetpass-submit-cancel": "खतम करू",
        "resetpass-wrong-oldpass": "अमान्य अस्थायी वा अखुनका कूटशब्द।\nअहाँ पहिनहिये सफलतासँ कूटशब्द बदलि लेने छी वा एकटा नव अस्थायी कूटशब्द लेल आग्रह केने छी।",
+       "resetpass-recycled": "रीसेट करएके लेल नयाँ कूटशब्दमे कृपया अपन वर्तमान कूटशब्द नै द के नयाँ देल जाउ।",
        "resetpass-temp-password": "तात्कालिक कूटशब्द",
+       "resetpass-abort-generic": "कूटशब्दमें बदलाव कोनो एक्सटेंशन द्वारा रोक देल गएल अछि ।",
+       "resetpass-expired": "अहाँके कूटशब्दक वैधता अवधि खत्तम भ गेल अछि । कृपया सम्प्रवेशित करवाक लेल नयाँ कूटशब्द राखु।",
        "passwordreset": "कूटशब्द फेरसँ बनाउ",
        "passwordreset-text-one": "अपन कूटशब्द रीसेट करवाक लेल इ फारम भरु ।",
        "passwordreset-text-many": "{{PLURAL:$1|ई-पत्रके माध्यमसऽ एकटा अस्थायी कूटशब्द पावैलेल कोनो एकटा डिब्बा भरु ।}}",
        "passwordreset-emailsent-capture": "एकटा स्मरण ई-पत्र पठाएल गेल अछि, जे नीचाँ देखाएल अछि।",
        "passwordreset-emailerror-capture": "एकटा स्मरण ई-पत्र बनाएल गेल अछि, जे नीचाँ देखाएल अछि, मुदा प्र्योक्ताकेँ एकरा पठेबाक प्रयास विफल भेल: $1",
        "changeemail": "ई-पत्र संकेत बदलू",
-       "changeemail-header": "ई-पत्र पता खाता बदलू",
        "changeemail-text": "अपन ई-पत्र संकेत बदलबा लेल ऐ आवेदनकेँ भरू। अहाँकेँ ऐ परिवर्तनक अनुमोदन लेल अपन कूटशब्द भरए पड़त।",
        "changeemail-no-info": "अहाँकेँ ऐ पन्नाकेँ सोझे देखबाले सम्प्रवेशित हुअए पड़त।",
        "changeemail-oldemail": "अखुनका ई-पत्र संकेत:",
        "changeemail-none": "(कोनो नै)",
        "changeemail-password": "अहाके {{SITENAME}} कूटशब्द:",
        "changeemail-submit": "ई-पत्र संकेत बदलू",
-       "changeemail-cancel": "खतम",
        "changeemail-throttled": "अहाँ ढ़ेर रास सम्प्रवेश प्रयास केलहुँ।\nफेर प्रयास करबासँ पहिने कने काल थम्हू।",
        "resettokens": "टोकन रीसेट करी",
        "resettokens-no-tokens": "रीसेट करवाक लेल कोनो टोकन नै अछि।",
        "loginreqtitle": "सम्प्रवेश आवश्यक",
        "loginreqlink": "सम्प्रवेश",
        "loginreqpagetext": "अहाँ निश्चयरूपेँ $1 दोसर पन्ना देखबाक लेल।",
-       "accmailtitle": "à¤\95à¥\8bटशब्द पठा देल गेल।",
+       "accmailtitle": "à¤\95à¥\82टशब्द पठा देल गेल।",
        "accmailtext": "एकटा बिना क्रमबला निर्माण पद्धतिसँ कूटशब्दक निर्माण [[User talk:$1|$1]] लेल $2 केँ पठाएल गेल अछि।\n\nऐ खाताक कूटशब्द बदलल जा सकैए ''[[Special:ChangePassword|कूटशब्द बदलू]]'' पन्नापर सम्प्रवेश केलाक बाद।",
        "newarticle": "(नव)",
        "newarticletext": "अहाँ एहेन पन्नाक लिंकक अनुसरण कऽ आएल छी जे पन्ना अखन बनले नै अछि।\nपन्ना बनेबाक लेल नीचाँक बक्शामे टाइप केनाइ शुरू करू (देखू [$1  सहायता पन्ना] विषेष जानकारी लेल)।",
        "templatesused": "{{PLURAL:$1|नमूना|नमूना सभ}} ऐ पन्नापर प्रयुक्त:",
        "templatesusedpreview": "{{PLURAL:$1|मास्टरफाइल|सभटा मास्टरफाइल}} used in this preview:ऐ पूर्वप्रदर्शनमे प्रयुक्त :",
        "templatesusedsection": "{{PLURAL:$1|नमूना|नमूना सभ}} ऐ संवर्गमे प्रयुक्त:",
-       "template-protected": "(सà¥\81रक्षित)",
-       "template-semiprotected": "(अर्ध-रक्षित)",
+       "template-protected": "(सà¤\82रक्षित)",
+       "template-semiprotected": "(à¤\85रà¥\8dध-सà¤\82रà¤\95à¥\8dषित)",
        "hiddencategories": "ई पन्ना सदस्य अछि {{PLURAL:$1|1 नुकाएल संवर्ग|$1 नुकाएल संवर्ग सभ}}:",
        "edittools-upload": "-",
        "nocreatetext": "{{अन्तर्जाल}} नव पन्ना निर्माणक क्षमताकेँ सीमित कऽ देने अछि।\nअहाँ आपस जा सकै छी आ कोनो पन्नाकेँ सम्पादित कऽ सकै छी, वा [[Special:UserLogin|log in or create an account]]",
        "revdelete-reasonotherlist": "दोसर कारण",
        "revdelete-edit-reasonlist": "मेटेबाक कारणक सम्पादन करू",
        "revdelete-offender": "संशोधन केनिहार:",
-       "suppressionlog": "दबाà¤\8fलबला वृत्तलेख",
+       "suppressionlog": "दबाà¤\8fलà¤\97à¥\87ल वृत्तलेख",
        "suppressionlogtext": "नीचाँ मेटाएल आ प्रतिबन्धक उल्लेख अछि जे संचालकसँ नुकाएल सामिग्री अछि।\nअखन स्थित प्रभावी प्रतिबन्ध आ अवरोध लेल देखू [[Special:BlockList|IP block list]] ।",
        "mergehistory": "मिज्झर भेल पन्ना सभक इतिहास",
        "mergehistory-header": "ई पन्ना अहाँकेँ एकटा स्रोत पन्नाक एकटा नव पन्नामे संशोधन इतिहासकेँ मिज्झर करबाक अनुमति दैत अछि।\nसुनिश्चित होउ जे ई परिवर्तन ऐतिहासिक पन्ना सांतत्य स्थापित करत।",
        "mergehistory-same-destination": "स्रोत आ लक्ष्य पन्ना सभ एक्के नै भऽ सकैए",
        "mergehistory-reason": "कारण:",
        "mergelog": "मिज्झरबला वृत्तलेख",
-       "pagemerge-logentry": "मिज्झर केलौं [[$1]]केँ [[$2]] मे (संशोधन $3 धरि)",
        "revertmerge": "नै मिज्झर",
        "mergelogpagetext": "नीचाँ एक पन्ना इतिहासक दोसरमे अद्यतन मिश्रणक सूची अछि।",
        "history-title": "\"$1\" क संशोधन इतिहास",
        "searchall": "सभटा",
        "showingresults": "नीचाँ एतऽ धरि {{PLURAL:$1|'''1''' परिणाम|'''$1''' परिणाम सभ}}  #'''$2''' सँ प्रारम्भ भऽ कऽ।",
        "showingresultsinrange": "नीचाँ एतऽ धरि {{PLURAL:$1|'''1''' परिणाम|'''$1''' परिणाम सभ}}  #'''$2''' सँ प्रारम्भ भऽ कऽ।",
-       "showingresultsheader": "{{PLURAL:$5|परिणाम '''$1''' एकर '''$3'''|परिणाम सभ '''$1 - $2''' एकर '''$3'''}} ऐ लेल '''$4'''",
        "search-nonefound": "अभ्यर्थनासँ मेल खाइत कोनो परिणाम नै भेटल।",
        "powersearch-legend": "विशेष खोज",
        "powersearch-ns": "निर्धारकमे खोज",
        "timezoneregion-arctic": "आर्कटिक",
        "timezoneregion-asia": "एशिया",
        "timezoneregion-atlantic": "अटलांटिक महासागर",
-       "timezoneregion-australia": "à¤\91स्ट्रेलिया",
+       "timezoneregion-australia": "à¤\85स्ट्रेलिया",
        "timezoneregion-europe": "यूरोप",
        "timezoneregion-indian": "हिंद महासागर",
        "timezoneregion-pacific": "प्रशांत महासागर",
        "yourgender": "पुरुख आकि स्त्री",
        "gender-unknown": "अज्ञात",
        "gender-male": "पुरुख",
-       "gender-female": "महिला",
+       "gender-female": "सà¥\8dतà¥\8dरà¥\80",
        "prefs-help-gender": "वैकल्पिक: तंत्रांश द्वारा लिंग निरपेक्ष सम्बोधन लेल प्रयुक्त।\nई सूचना सार्वजनिक हएत।",
        "email": "ई-पत्र",
        "prefs-help-realname": "मूल नाम वैकल्पिक अछि।\nजँ अहाँ एकरा देबा लेल प्रयोग करै छी, ई अहाँकेँ काजक श्रेय देबा लेल एकर प्रयोग कएल जाएत।",
        "right-reupload-own": "अपन उपारोपित पन्ना सभक पुनर्लेखन करू",
        "right-reupload-shared": "श्रव्य-दृश्य साझी बखारीक फाइलक पुनर्लेखन स्थानीय रूपेँ करू।",
        "right-upload_by_url": "सार्वत्रिक विभव संकेतसँ संचिका उपारोपित करू",
-       "right-purge": "जालक उपस्मृतिकेँ बिना स्वीकृतिक पन्नाक लेल खतम करू",
-       "right-autoconfirmed": "अर्द्ध-संरक्षित पन्ना सभक सम्पादन करू",
+       "right-purge": "जालक उपस्मृतिकेँ बिना स्वीकृतिक पन्नाक लेल खतम करू",
+       "right-autoconfirmed": "अर्द्ध-संरक्षित पन्ना सभक सम्पादन करू",
        "right-bot": "स्वचालित प्रक्रियाक रूपमे देखल जाए",
        "right-nominornewtalk": "वार्ता पन्नापर मामूली सम्पादन नव संदेश संसूचक नै आनैए",
        "right-apihighlimits": "ए.पी.आइ. अभ्यर्थनामे पैघ सीमाक प्रयोग करू",
        "rightslog": "प्रयोक्ता अधिकार वृत्तलेख",
        "rightslogtext": "ई प्रयोक्ता अधिकार परिवर्तन सभक वृतलेख छी।",
        "action-read": "ई पन्ना पढ़ू",
-       "action-edit": "à¤\90 पन्नाकेँ सम्पादित करू",
+       "action-edit": "à¤\88 पन्नाकेँ सम्पादित करू",
        "action-createpage": "पन्ना सभ बनाउ",
        "action-createtalk": "वार्ता पन्ना सभ बनाउ",
        "action-createaccount": "ई प्रयोक्ता खाता बनाउ",
        "action-move-subpages": "ऐ पन्ना आ एकर उपपन्नाकेँ घसकाउ",
        "action-move-rootuserpages": "मूल प्रयोक्ता पन्ना सभ घसकाउ",
        "action-move-categorypages": "श्रेणी पृष्ठ स्थानांतरित करू",
-       "action-movefile": "à¤\90 संचिकाकेँ घसकाउ",
-       "action-upload": "à¤\90 संचिकाकेँ उपारोपित करू",
-       "action-reupload": "à¤\90 संचिकाक पुनर्लेखन करू",
-       "action-reupload-shared": "à¤\90 संचिकाकेँ साझी बखारीमे नजरि नै दिअ",
-       "action-upload_by_url": "à¤\86à¤\87 संचिकाकेँ सार्वत्रिक विभव संकेतसँ उपारोपित करू",
+       "action-movefile": "à¤\88 संचिकाकेँ घसकाउ",
+       "action-upload": "à¤\88 संचिकाकेँ उपारोपित करू",
+       "action-reupload": "à¤\88 संचिकाक पुनर्लेखन करू",
+       "action-reupload-shared": "à¤\88 संचिकाकेँ साझी बखारीमे नजरि नै दिअ",
+       "action-upload_by_url": "à¤\88 संचिकाकेँ सार्वत्रिक विभव संकेतसँ उपारोपित करू",
        "action-writeapi": "लेख्य ए.पी.आइ.क प्रयोग करू",
        "action-delete": "ई पन्ना मेटाउ",
        "action-deleterevision": "ई संशोधन मेटाउ",
        "action-deletedhistory": "ऐ पन्नाक मेटाएलबला इतिहास देखू",
        "action-browsearchive": "मेटाएल पन्ना सभकेँ ताकू",
-       "action-undelete": "à¤\90 पन्नाकेँ फेरसँ आनू",
-       "action-suppressrevision": "à¤\90 नुकाएल संशोधनकेँ पुनरीक्षित आ पुनर्स्थापित करू",
-       "action-suppressionlog": "à¤\90 व्यक्तिगत वृत्तलेखकेँ देखू",
-       "action-block": "à¤\90 प्रयोक्ताकेँ सम्पादनसँ रोकू",
-       "action-protect": "à¤\90 पन्नाक सुरक्षा स्तर बदलू",
+       "action-undelete": "à¤\88 पन्नाकेँ फेरसँ आनू",
+       "action-suppressrevision": "à¤\88 नुकाएल संशोधनकेँ पुनरीक्षित आ पुनर्स्थापित करू",
+       "action-suppressionlog": "à¤\88 व्यक्तिगत वृत्तलेखकेँ देखू",
+       "action-block": "à¤\88 प्रयोक्ताकेँ सम्पादनसँ रोकू",
+       "action-protect": "à¤\88 पन्नाक सुरक्षा स्तर बदलू",
        "action-rollback": "कृपा कऽ अन्तिम प्रयोक्ताक सम्पादनकेँ प्रत्यावर्तित करू जे एक खास पन्नाकेँ सम्पादित केलन्हि",
        "action-import": "ऐ पन्नाकेँ दोसर विकीसँ आनू",
        "action-importupload": "ऐ पन्नाकेँ संचिका उपारोपणसँ आनू",
        "action-editmywatchlist": "काँच साकांक्षसूची संपादित करू",
        "action-viewmywatchlist": "अपन काँच साकांक्षसूची देखु",
        "action-viewmyprivateinfo": "अपन व्यक्तिगत जानकारी देखु",
-       "action-editmyprivateinfo": "à¤\85पन à¤µà¥\8dयà¤\95à¥\8dतिà¤\97त à¤\9cानà¤\95ारà¥\80 à¤¸à¤\82पादित करु",
+       "action-editmyprivateinfo": "à¤\85पन à¤µà¥\8dयà¤\95à¥\8dतिà¤\97त à¤\9cानà¤\95ारà¥\80 à¤¸à¤®à¥\8dपादित करु",
        "nchanges": "$1 {{PLURAL:$1|परिवर्त्तन|परिवर्त्तन}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|अंतिम बेर देखला के बाद स}}",
        "enhancedrc-history": "इतिहास",
        "recentchanges": "लगक परिवर्तन सभ",
        "recentchanges-legend": "नव परिवर्तन सभक विकल्प सभ",
-       "recentchanges-summary": "à¤\90 पन्नापर विकीमे भेल सभसँ अद्यतन परिवर्तनपर नजरि राखू।",
+       "recentchanges-summary": "à¤\88 पन्नापर विकीमे भेल सभसँ अद्यतन परिवर्तनपर नजरि राखू।",
        "recentchanges-noresult": "इ अवधिके दौरान इ मापदंडके पूर्ण करेत समय कोनो परिवर्तन नै केएल गेल अछि।",
        "recentchanges-feed-description": "ऐ सूचना-तंत्रांशमे विकीमे भेल सभसँ लगक परिवर्तन ताकू",
        "recentchanges-label-newpage": "ई सम्पादन एकटा नव पन्नाक निर्माण केलक।",
        "hookaborted": "संशोधन जे अहाँ करऽ चाहलौं से विस्तार नोकसी द्वारा खतम कऽ देल गेल।",
        "illegal-filename": "ऐ तरहक संचिका नाम अमान्य अछि।",
        "overwrite": "वर्तमान संचिकाकेँ अधिलेखित केनाइ मान्य नै अछि।",
-       "unknown-error": "एकटा अबूझ भ्रम आए।",
+       "unknown-error": "à¤\8fà¤\95à¤\9fा à¤\85बà¥\82à¤\9d à¤­à¥\8dरम à¤\86à¤\8fल।",
        "tmp-create-error": "अस्थायी संचिका नै बना सकल।",
        "tmp-write-error": "अस्थायी संचिका लिखबा काल भ्रम।",
        "large-file": "ई सुझाव अछि जे संचिका $1 सँ पैघ नै हुअए;\nई संचिका अछि $2 ।",
        "unusedtemplateswlh": "दोसर लागि सभ",
        "randompage": "अव्यवस्थित पृष्ठ",
        "randompage-nopages": "ऐमे दोसर पन्ना नै अछि {{PLURAL:$2|namespace|namespaces}}: $1 ।",
+       "randomincategory-category": "श्रेणी:",
        "randomredirect": "मिज्झर बदलेनबला लागि",
        "randomredirect-nopages": "नामस्थान \"$1\" मे कोनो बदलेनबला लागि नै अछि।",
        "statistics": "सांख्यिकी",
        "statistics-header-pages": "पन्नाक सांख्यिकी",
        "statistics-header-edits": "सांख्यिकीक सम्पादन करू",
-       "statistics-header-views": "सांख्यिकी देखू",
        "statistics-header-users": "प्रयोक्ता सांख्यिकी",
        "statistics-header-hooks": "दोसर सांख्यिकी",
        "statistics-articles": "अनुक्रम पन्ना सभ",
        "statistics-pages": "पन्ना सभ",
-       "statistics-pages-desc": "वार्ता पन्ना, बदलेनबला लागि सभ इत्यादि सहित सभटा पन्ना सभ।",
+       "statistics-pages-desc": "वार्ता पन्ना, बदलेन इत्यादि सहित सभटा विकि पन्ना सभ।",
        "statistics-files": "उपारोपित संचिका सभ",
        "statistics-edits": "{{अन्तर्जाल}} अएबासँ लऽ कऽ भेल पन्ना सम्पादन सभ।",
        "statistics-edits-average": "प्रति पन्ना औसत सम्पादन",
-       "statistics-views-total": "दृश्य आइ धरि",
-       "statistics-views-total-desc": "अस्तित्वहीन पन्ना आ विशेष पन्नाक दृश्य सम्मिलित नै अछि",
-       "statistics-views-peredit": "प्रति सम्पादन देखल गेल",
-       "statistics-users": "[[Special:ListUsers|users]] छथि",
+       "statistics-users": "पंजीकृत [[Special:ListUsers|प्रयोक्ता]]",
        "statistics-users-active": "सक्रिय प्रयोक्ता",
        "statistics-users-active-desc": "प्रयोक्ता जे अन्तिम {{PLURAL:$1|दिन|$1 दिन}} मे कोनो काज केने छथि",
-       "statistics-mostpopular": "सभसँ बेसी देखल गेल पन्ना",
-       "doubleredirects": "दà¥\8dवितà¥\80यà¤\95 à¤²à¤¾à¤\97िबला बदलेन",
+       "pageswithprop-submit": "जाऊ",
+       "doubleredirects": "दà¥\8dवितà¥\80यà¤\95 à¤²à¤¾à¤\97à¤\8fबला बदलेन",
        "doubleredirectstext": "ई पन्ना ओइ पन्ना सभक संकलन छी जे बदलेन करैए दोसर बदलेनबला पन्नासँ।\nप्रत्येक पाँती पहिल आ दोसर बदलेनक लागि रखने अछि आ संगे दोसर बदलेनक लक्ष्य सेहो, जे वास्तवमे \"वास्तव\" लक्ष्य पन्ना अछि, जकरापर पहिल बदलेनकेँ जेबाक चाही। \n <del>Crossed out</del> प्रविष्टिक हल भेटल अछि।",
        "double-redirect-fixed-move": "[[$1]] घसकाएल गेल।\nई आब [[$2]] दिस जा रहल अछि।",
        "double-redirect-fixed-maintenance": "द्वितीयक बदलेन [[$1]] सँ [[$2]] कएल गेल।",
        "uncategorizedtemplates": "अवर्गीकृत नमूना सभ",
        "unusedcategories": "नै प्रयोग कएल संवर्ग सभ",
        "unusedimages": "बिना प्रयोगक संचिका सभ",
-       "popularpages": "लोकप्रिय पन्ना सभ",
        "wantedcategories": "आवश्यक संवर्ग सभ",
        "wantedpages": "आवश्यक पन्ना सभ",
        "wantedpages-badtitle": "परिणाम सूचीमे अमान्य शीर्षक:$1",
        "protectedpages": "संरक्षित पन्ना सभ",
        "protectedpages-indef": "अनन्तकालिक सुरक्षा मात्र",
        "protectedpages-cascade": "तराउपड़ी सुरक्षा मात्र",
-       "protectedpages-noredirect": "पà¥\81नरà¥\8dनिरà¥\8dदà¥\87श नुकाऊँ",
+       "protectedpages-noredirect": "बदलà¥\87न नुकाऊँ",
        "protectedpagesempty": "कोनो पन्ना ऐ सभ परिमिति लेल सुरक्षित नै राखल गेल अछि।",
        "protectedpages-timestamp": "समएकाल",
        "protectedpages-page": "पृष्ठ",
        "pager-older-n": "{{PLURAL:$1|साबिक 1|साबिक $1}}",
        "suppress": "नजरिपर नै आएल",
        "querypage-disabled": "ई विशिष्ट पन्ना कार्य दक्षता लेल अशक्त कएल गेल अछि।",
+       "apihelp": "API मद्दत",
        "booksources": "किताबक सन्दर्भ सभ",
        "booksources-search-legend": "किताबक सन्दर्भक लेल ताकू",
        "booksources-isbn": "आइ.एस.बी.एन.:",
-       "booksources-go": "चलू",
+       "booksources-search": "ताकू",
        "booksources-text": "नीचाँ दोसर जालस्थलसँ लागि सभक सूची अछि जे नव आ प्रयोग कएल किताब बेचैए, आ ई पोथी सभक विषयमे ओहो सूचना दऽ सकैए जे अहाँ ताकि रहल छी:",
        "booksources-invalid-isbn": "देल आइ.एस.बी.एन. संख्या मान्य नै बुझाइत अछि; कृपा कऽ मूल स्रोतसँ द्वितीयक बनेबा काल भेल भ्रमकेँ जाँचू।",
        "specialloguserlabel": "कर्ता:",
        "speciallogtitlelabel": "लक्ष्य (शीर्षक वा प्रयोक्ता):",
        "log": "वृत्तलेख सभ",
-       "all-logs-page": "सभटा सार्वजनिक वृत्तलेख",
+       "all-logs-page": "सभ सार्वजनिक वृत्तलेख",
        "alllogstext": "{{अन्तर्जाल}} क सभटा उपलब्ध वृत्तलेखक संयुक्त दृश्य।\nअहाँ दृश्यकेँ संकीर्ण करबा लेल वृत्तलेखक एकटा प्रकार चुनि सकै छी, प्रयोक्तानाम (ब्रह्मक्षर-लघ्वक्षर विचारणीय), वा प्रभावित पन्ना (एतौ ब्रह्मक्षर-लघ्वक्षर विचारणीय)।",
        "logempty": "वृत्तलेखमे कोनो मेल खाइबला बौस्तु नै।",
        "log-title-wildcard": "खोज शीर्षक सभ ऐ पाठसँ प्रारम्भ",
+       "showhideselectedlogentries": "देखाउ/ नुकाउ चयनित लग सभ",
        "allpages": "सभ पन्ना",
        "nextpage": "अगिला पन्ना ($1)",
        "prevpage": "पहिलुका पन्ना ($1)",
        "allpagesprefix": "उपसर्गक संग दृश्य पन्ना सभ:",
        "allpagesbadtitle": "देल पन्नाक शीर्षक गलत, गलत सम्बन्धित अन्तर-भाषा अन्तर विकी शीर्षक छी। ई एक वा बेशी कलाकार युक्त भऽ सकैए जे शीर्षकमे प्रयुक्त नै कएल जा सकैए।",
        "allpages-bad-ns": "{{जालस्थल}} मे \"$1\" नामगाम नै अछि।",
+       "allpages-hide-redirects": "बदलेन नुकाऊँ",
        "cachedspecial-refresh-now": "लब्का देखु",
        "categories": "संवर्ग सभ",
        "categoriespagetext": "ई {{PLURAL:$1|संवर्गमे अछि|संवर्ग सभमे अछि}} पन्ना वा मीडिया।\n[[Special:UnusedCategories|Unused categories]] एतए देखाएल नै अछि।\nईहो देखू [[Special:WantedCategories|wanted categories]]।",
        "listgrouprights-group": "वर्ग",
        "listgrouprights-rights": "अधिकार",
        "listgrouprights-helppage": "Help: वर्ग अधिकार",
-       "listgrouprights-members": "(सदसà¥\8dयà¤\95 सूची)",
+       "listgrouprights-members": "(पà¥\8dरयà¥\8bà¤\95à¥\8dता सूची)",
        "listgrouprights-addgroup": "जोड़ू {{PLURAL:$2|वर्ग|वर्ग}}: $1",
        "listgrouprights-removegroup": "निकालू {{PLURAL:$2|वर्ग|वर्ग}}: $1",
        "listgrouprights-addgroup-all": "सभटा वर्ग जोड़ू",
        "listgrouprights-removegroup-all": "सभटा वर्ग निकालू",
        "listgrouprights-addgroup-self": "जोड़ू {{PLURAL:$2|वर्ग|वर्ग}} अपन खातामे: $1",
        "listgrouprights-removegroup-self": "निकालू {{PLURAL:$2|वर्ग|वर्ग}} अपन खातामे: $1",
-       "listgrouprights-addgroup-self-all": "सभटा वर्गकेँ अपन खातामे जोड़ू",
-       "listgrouprights-removegroup-self-all": "सभटा वर्गकेँ अपन खातासँ निकालू",
-       "listgrouprights-namespaceprotection-header": "नामसà¥\8dथान à¤µà¤°à¥\8dà¤\9cित",
-       "listgrouprights-namespaceprotection-namespace": "नामस्थान :",
+       "listgrouprights-addgroup-self-all": "सभ वर्गकेँ अपन खातामे जोड़ू",
+       "listgrouprights-removegroup-self-all": "सभ वर्गकेँ अपन खातासँ निकालू",
+       "listgrouprights-namespaceprotection-header": "नामसà¥\8dथान à¤ªà¥\8dरतिबनà¥\8dधित",
+       "listgrouprights-namespaceprotection-namespace": "नामस्थान",
        "listgrouprights-namespaceprotection-restrictedto": "सांच(सभ) के संपादन करए लेल",
        "trackingcategories": "श्रेणीके ट्रयाक करु",
+       "trackingcategories-msg": "श्रेणीके ट्रयाक करु",
+       "trackingcategories-name": "सन्देश नाम",
        "mailnologin": "कोनो पठेबाक पता नै",
        "mailnologintext": "अहाँ [[Special:UserLogin|सम्प्रवेशित]] हेबाक चाही आ अहाँक विकल्प [[Special:Preferences|preferences]]  मे एकटा मान्य ई-पत्र संकेत दोसर प्रयोक्ताकेँ पठेबा लेल हेबाक चाही।",
        "emailuser": "ऐ प्रयोक्ताकेँ ई-पत्र पठाउ",
        "emailpagetext": "अहाँक नीचाँक आवेदन-पत्र ऐ प्रयोक्ताकेँ ई-पत्र संदेश पठेबा लेल प्रयोग कऽ सकै छी।\nई-पत्र जे अहाँ [[Special:Preferences|your user preferences]] मे देलहुँ से ई-पत्र\"एतएसँ\" पतासँ देखाएत, से प्राप्तकर्ता सोझे अहाँकेँ उत्तर देबामे समर्थ हेताह।",
        "defemailsubject": "{{जालस्थल}} प्रयोक्ता \"$1\" सँ ई-पत्र",
        "usermaildisabled": "प्रयोक्ता ई-पत्र अशक्त",
-       "usermaildisabledtext": "à¤\85हाà¤\81 à¤¦à¥\8bसर à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dताà¤\95à¥\87à¤\81 à¤\90 à¤µà¤¿à¤\95à¥\80पर à¤\88-पतà¥\8dर à¤¨à¥\88 à¤ªà¤ à¤¾ à¤¸à¤\95à¥\88 à¤\9bिà¤\90।",
+       "usermaildisabledtext": "à¤\85हाà¤\81 à¤¦à¥\8bसर à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dताà¤\95à¥\87à¤\81 à¤\90 à¤µà¤¿à¤\95à¥\80पर à¤\88-पतà¥\8dर à¤¨à¥\88 à¤ªà¤ à¤¾ à¤¸à¤\95à¤\8f à¤\9bà¥\80",
        "noemailtitle": "कोनो ई-पत्र पता नै",
        "noemailtext": "ई पर्योक्ता अपन कोनो मान्य ई-पत्र संकेत नै देने अछि।",
        "nowikiemailtext": "ई प्रयोक्ता दोसर प्रयोक्तासँ ई-पत्र प्राप्त नै करबाक विकल्प चुनने अछि।",
        "watchlist": "साकांक्षसूची",
        "mywatchlist": "साकांक्ष-सूची",
        "watchlistfor2": "$1 $2 लेल",
-       "nowatchlist": "à¤\85हाà¤\81à¤\95 à¤¸à¤¾à¤\95ाà¤\82à¤\95à¥\8dष-सà¥\82à¤\9aà¥\80मà¥\87 à¤\95à¥\8bनà¥\8b à¤¬à¥\8cसà¥\8dतà¥\81 नै अछि।",
+       "nowatchlist": "à¤\85हाà¤\81à¤\95 à¤¸à¤¾à¤\95ाà¤\82à¤\95à¥\8dष-सà¥\82à¤\9aà¥\80मà¥\87 à¤\95à¥\8bनà¥\8b à¤ªà¤¨à¥\8dना नै अछि।",
        "watchlistanontext": "कृपा कऽ $1 अहाँक साकांक्ष-सूचीकेँ देखबा वा सम्पादित करबा लेल।",
        "watchnologin": "सम्प्रवेशित नै",
        "addwatch": "साकांक्ष सूचीमे जोड़ू",
        "addedwatchtext": "पन्ना \"[[:$1]]\" अहाँक [[Special:Watchlist|साकांक्ष सूची]] मे जोड़ल गेल।\nऐ पन्नामे भविष्यक परिवर्तन आ एकर सम्बन्धित चौबटिया पन्ना एतए सूचीबद्ध रहत, आ पन्ना [[Special:RecentChanges|हालक परिवर्तन]]मे '''गाढ़''' देखाएत , जइसँ आसानीसँ एकरा चिन्हल जा सकत।",
        "removewatch": "साकांक्ष सूचीसँ हटाउ",
        "removedwatchtext": "पन्ना \"[[:$1]]\" हटाएल गेल [[Special:Watchlist|अहाँक साकांक्षसूची]] सँ।",
-       "watch": "ताà¤\95िमà¥\87",
-       "watchthispage": "à¤\90 à¤ªà¥\83षà¥\8dठपर à¤¨à¤\9cरि राखू",
+       "watch": "धà¥\8dयान à¤°à¤¾à¤\96à¥\81",
+       "watchthispage": "à¤\90 à¤ªà¥\83षà¥\8dठपर à¤§à¥\8dयान राखू",
        "unwatch": "छोड़ू",
        "unwatchthispage": "देखनाइ छोड़ू",
        "notanarticle": "कोनो विषय सूची नै",
        "wlheader-enotif": "ई-पत्र सूचना लागू अछि।",
        "wlheader-showupdated": "पन्ना सभ जे अहाँक एतए अन्तिम बेर अएलाक बाद बदलल अछि तकर सूची देल अछि '''गाढ़''' मे",
        "wlnote": "नीचाँ {{PLURAL:$1|is the last change|are the last '''$1''' changes}} अन्तिम {{PLURAL:$2|hour|'''$2''' hours}} $3, $4 जेना।",
-       "wlshowlast": "देखाउ अन्तिम $1 घण्टा $2 दिन $3",
+       "wlshowlast": "देखाउ अन्तिम $1 घण्टा $2 दिन",
        "watchlist-options": "साकांक्षसूचीक विकल्प सभ",
        "watching": "ताकिमे...",
        "unwatching": "छोड़ल ...",
        "watcherrortext": "अहाँक साकांक्ष-सूची विकल्प \"$1\" लेल बदलबा काल एकटा भ्रम आएल।",
        "enotif_reset": "सभ पन्नाकेँ देखल चिन्हित करू",
        "enotif_impersonal_salutation": "{{अन्तर्जाल}} प्रयोक्ता",
+       "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",
        "actionfailed": "कार्य नै भेल",
        "deletedtext": "\"$1\" केँ मेटा देल गेल अछि।\nदेखू $2 हालक मेटाएल सामिग्रीक अभिलेख लेल।",
        "dellogpage": "मेटाएल सामिग्रीक वृत्तलेख",
-       "dellogpagetext": "नà¥\80à¤\9aाà¤\81 à¤\8fà¤\95दम à¤¹à¤¾à¤²à¤\95 à¤®à¥\87à¤\9fाà¤\8fलबला à¤¸à¥\82à¤\9aà¥\80 à¤\85à¤\9bि।",
+       "dellogpagetext": "नà¥\80à¤\9aाà¤\81 à¤\8fà¤\95दम à¤²à¤\97à¤\95 à¤®à¥\87à¤\9fाà¤\8fल à¤ªà¤¨à¥\8dनाà¤\95ऽ à¤¸à¥\82à¤\9aà¥\80 à¤\9bà¥\80।",
        "deletionlog": "मेटाएल सामिग्रीक वृत्तलेख",
        "reverted": "पुरान कोनो संशोधन धरि घुराउ",
        "deletecomment": "कारण:",
        "rollback-success": "$1 केर संपादन हटाऊ. \n$2 केर संपादित आखिरी अवतरण क पुनर्स्थापित करल गेल.",
        "sessionfailure-title": "सत्र विफल भ गेल",
        "sessionfailure": "एहन लागैत अछि जे अहां के लागिन सत्र में कोनो त्रुटि अछि. सत्र अपहरण से बचाबय  सं सावधानीक लेल अहां के अहि क्रियाकलाप क रद्द क देल गेल. अहां पाछां के पृष्ठ पर जौउ आ पृष्ठ के फेर सं लोड क दोबारा कोशिश करू.",
-       "protectlogpage": "सà¥\81रà¤\95à¥\8dषा à¤²à¥\89à¤\97",
-       "protectlogtext": "नà¥\80à¤\9aाà¤\81 à¤\95िà¤\9bà¥\81 à¤ªà¤¨à¥\8dना à¤¸à¥\81रà¤\95à¥\8dषा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¤\95 à¤¸à¥\82à¤\9aà¥\80 à¤\85à¤\9bि।\nदà¥\87à¤\96à¥\82 [[Special:ProtectedPages|protected pages list]] à¤¹à¤¾à¤²à¤\95 à¤\95ारà¥\8dयरत à¤ªà¤¨à¥\8dना à¤¸à¥\81रà¤\95à¥\8dषाà¤\95 सूची लेल।",
-       "protectedarticle": "रक्षित \"[[$1]]\"",
+       "protectlogpage": "सुरक्षा लग",
+       "protectlogtext": "नà¥\80à¤\9aाà¤\81 à¤\95िà¤\9bà¥\81 à¤ªà¤¨à¥\8dना à¤¸à¥\81रà¤\95à¥\8dषा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¤\95 à¤¸à¥\82à¤\9aà¥\80 à¤\85à¤\9bि।\nदà¥\87à¤\96à¥\82 [[Special:ProtectedPages|protected pages list]] à¤²à¤\97à¤\95 à¤\95ारà¥\8dयरत à¤ªà¤¨à¥\8dना à¤¸à¥\81रà¤\95à¥\8dषाà¤\95ऽ सूची लेल।",
+       "protectedarticle": "रक्षित \"[[$1]]\" कएल गेल",
        "modifiedarticleprotection": "\"[[$1]]\" लेल बदलैत रक्षा स्तर",
        "unprotectedarticle": "अरक्षित केलौं \"[[$1]]\"",
        "movedarticleprotection": "सुरक्षा स्तर \"[[$2]]\" से बदल क  \"[[$1]]\" क देल गेल.",
        "protect-locked-dblock": "सक्रिय दत्तनिधि प्रतिबन्धक कारण सुरक्षा स्तर नै बदलल जा सकैए।\nएतए '''$1''' लेल वर्तमान नियत विकल्प देल अछि:",
        "protect-locked-access": "अहाँक खाता अहाँकेँ रक्षा स्तरमे परिवर्तनक अधिकार नै दैत अछि।\nएतए '''$1'''पन्नाक वर्तमान परिस्थिति देल गेल अछि:",
        "protect-cascadeon": "ई पन्ना अखन रक्षित अछि कारण ई ऐ मे सम्मिलित अछि {{PLURAL:$1|पन्ना, जे अछि|पन्ना सभ, जे सभ अछि}} तराउपड़ी रक्षण लागू।\nअहाँ ऐ पन्नाक रक्षा स्तरकेँ बदलि सकै छी, मुदा ताइ सँ तराउपड़ी रक्षापर असर नै पड़त।",
-       "protect-default": "सभ à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dताà¤\95à¥\87à¤\81 à¤\85धिà¤\95ार à¤¦à¤¿à¤\85",
-       "protect-fallback": "\"$1\" à¤\85नà¥\81मति à¤\9aाहà¥\80",
-       "protect-level-autoconfirmed": "नव à¤\86 à¤\85पà¤\82à¤\9cà¥\80à¤\95à¥\83त à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dताà¤\95à¥\87à¤\81 à¤ªà¥\8dरतिबनà¥\8dधित à¤\95रà¥\82",
-       "protect-level-sysop": "माइनजन मात्र",
+       "protect-default": "सभ à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dताà¤\95à¥\87à¤\81 à¤\85धिà¤\95ार à¤¦à¤\8fल à¤\9cाà¤\8f",
+       "protect-fallback": "\"$1\" à¤\85धिà¤\95ार à¤­à¥\87ल à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dतासभà¤\95à¥\87 à¤\85नà¥\81मति à¤¦à¤\8fल à¤\9cाà¤\8f",
+       "protect-level-autoconfirmed": "मातà¥\8dर à¤¸à¥\8dवत: à¤¸à¥\8dथापित à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dताà¤\95à¥\87à¤\81 à¤\85नà¥\81मति à¤¦à¤\8fल à¤\9cाà¤\8f",
+       "protect-level-sysop": "माइनजन मात्रके अनुमति दएल जाए",
        "protect-summary-cascade": "तराउपड़ी",
        "protect-expiring": "खतम हएत $1 (UTC)",
        "protect-expiring-local": "खतम होइए $1",
        "namespace": "चेन्हासी समूह",
        "invert": "उनटा चयन",
        "tooltip-invert": "ऐ बक्साकेँ सही करू पन्ना परिवर्तनकेँ नुकेबा लेल चयनित नामस्थानक भीतर (आ संग लागल नामस्थान जँ सही कएल अछि तखन)",
-       "namespace_association": "समà¥\8dबदà¥\8dध à¤¨à¤¾à¤®à¤¸à¥\8dथान",
+       "namespace_association": "समà¥\8dबदà¥\8dध à¤\9aà¥\87नà¥\8dहासà¥\80",
        "tooltip-namespace_association": "ऐ बक्साकेँ सही करू जइसँ वार्ता आ विषय नामस्थान समाहित कएल जा सकए चुनल नामस्थानमे",
        "blanknamespace": "(मुख्य)",
        "contributions": "प्रयोक्ताक योगदान सभ",
        "month": "माससँ (आ पहिने)",
        "year": "ऐ साल (आ पहिने)",
        "sp-contributions-newbies": "नव खाताक अवदानकेँ देखाउ",
-       "sp-contributions-newbies-sub": "नब à¤¸à¤¦à¤¸à¥\8dयà¤\95 à¤²à¥\87ल.",
-       "sp-contributions-newbies-title": "नब à¤¸à¤¦à¤¸à¥\8dयà¤\95 योगदान",
-       "sp-contributions-blocklog": "पà¥\8dरतिबनà¥\8dधबला वृत्तलेख",
-       "sp-contributions-deleted": "प्रयोक्ताक मेटाएल योगदान सभ",
+       "sp-contributions-newbies-sub": "नब à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dताà¤\95ऽ à¤²à¥\87ल",
+       "sp-contributions-newbies-title": "नब à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dताà¤\95ऽ योगदान",
+       "sp-contributions-blocklog": "पà¥\8dरतिबनà¥\8dधित वृत्तलेख",
+       "sp-contributions-deleted": "प्रयोक्ताक मेटाएल योगदान सभ",
        "sp-contributions-uploads": "उपारोपण",
        "sp-contributions-logs": "वृत्तलेख सभ",
        "sp-contributions-talk": "वार्त्ता",
-       "sp-contributions-userrights": "प्रयोक्ता अधिकारक प्रबन्धन",
-       "sp-contributions-blocked-notice": "à¤\88 à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dता à¤\85à¤\96न à¤ªà¥\8dरतिबनà¥\8dधित à¤\85à¤\9bि।\nà¤\85दà¥\8dयतन à¤ªà¥\8dरतिबनà¥\8dधित  à¤µà¥\83तà¥\8dतलà¥\87à¤\96 à¤²à¥\87à¤\96ा सन्दर्भ नीचाँ देल अछि:",
+       "sp-contributions-userrights": "प्रयोक्ता अधिकारक प्रबन्धन",
+       "sp-contributions-blocked-notice": "à¤\88 à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dता à¤\85à¤\96न à¤ªà¥\8dरतिबनà¥\8dधित à¤\85à¤\9bि।\nनव à¤ªà¥\8dरतिबनà¥\8dधित à¤µà¥\83तà¥\8dतलà¥\87à¤\96 à¤²à¥\87à¤\96 सन्दर्भ नीचाँ देल अछि:",
        "sp-contributions-blocked-notice-anon": "ई अनिकेत अखन प्रतिबन्धित अछि।\nअद्यतन प्रतिबन्धित  वृत्तलेख लेखा सन्दर्भ नीचाँ देल अछि:",
        "sp-contributions-search": "अवदानक लेल ताकू",
        "sp-contributions-username": "अनिकेत संकेत वा प्रयोक्तानाम:",
        "block-log-flags-anononly": "गुप्त प्रयोक्ता मात्र",
        "block-log-flags-nocreate": "लेखा निर्माण अशक्त कएल",
        "block-log-flags-noautoblock": "स्वचालित प्रतिबन्ध अशक्त",
-       "block-log-flags-noemail": "à¤\88-मà¥\87ल à¤\85वरà¥\81दà¥\8dध",
+       "block-log-flags-noemail": "à¤\88-मà¥\87ल à¤\85शà¤\95à¥\8dत",
        "block-log-flags-nousertalk": "अपन वार्ता पन्ना सम्पादित नै कऽ सकब",
        "block-log-flags-angry-autoblock": "नीक स्वचालित प्रतिबन्ध देल गेल",
        "block-log-flags-hiddenname": "प्रयोक्तानाम नुकाएल",
        "movepage-page-unmoved": "पन्ना $1 केँ $2 लग नै घसकाएल जा सकैए।",
        "movepage-max-pages": "बेसी सें बेसी $1 पृष्ठ बदलि के {{PLURAL:$1| क देल गेल अछि|क देल गेल अछि}}, आब आर पृष्ठ अपने आप नहि बदलत.",
        "movelogpage": "वृत्तलेख हटाउ",
-       "movelogpagetext": "नाम बदलल गेल लेख क सूचि नीचां देल गेल अछि",
-       "movesubpage": "{{PLURAL:$1|à¤\89प à¤ªà¥\83षà¥\8dठ|à¤\89प à¤ªà¥\83षà¥\8dठ}}",
-       "movesubpagetext": "नà¥\80à¤\9aाà¤\82 $1 {{PLURAL:$1| à¤ªà¥\83षà¥\8dठ à¤¦à¥\87à¤\96ा à¤¦ à¤°à¤¹à¤² à¤\85à¤\9bि, à¤\9cà¥\87 à¤\85हि à¤ªà¥\83षà¥\8dठà¤\95 à¤\89प à¤ªà¤¨à¥\8dना à¤\85à¤\9bि|पà¥\83षà¥\8dठ à¤¦à¥\87à¤\96ा à¤¦ à¤°à¤¹à¤² à¤\85à¤\9bि, à¤\9cà¥\87 à¤\85हि à¤ªà¥\83षà¥\8dठà¤\95 उप पन्ना अछि}}।",
-       "movenosubpage": "à¤\85हि à¤ªà¥\83षà¥\8dठ à¤\95ा à¤\95à¥\8bनà¥\8b à¤\89प à¤ªà¤¨à¥\8dना à¤¨à¤¹à¤¿ à¤\85à¤\9bि.",
+       "movelogpagetext": "नाम बदलल गेल लेख क सूचि नीचां देल गेल अछि",
+       "movesubpage": "{{PLURAL:$1|à¤\89प à¤ªà¤¨à¥\8dना|à¤\89प à¤ªà¤¨à¥\8dना}}",
+       "movesubpagetext": "नà¥\80à¤\9aाà¤\82 $1 {{PLURAL:$1| à¤ªà¤¨à¥\8dना à¤¦à¥\87à¤\96ाà¤\93ल à¤\97à¤\8fल à¤\85à¤\9bि, à¤\9cà¥\87 à¤\85हि à¤ªà¤¨à¥\8dनाà¤\95ऽ à¤\89प à¤ªà¤¨à¥\8dना à¤\85à¤\9bि|पनà¥\8dना à¤¦à¥\87à¤\96ावà¥\8bल à¤\97à¤\8fल à¤\85à¤\9bि, à¤\9cà¥\87 à¤\85हि à¤ªà¤¨à¥\8dनाà¤\95ऽ उप पन्ना अछि}}।",
+       "movenosubpage": "à¤\85हि à¤ªà¤¨à¥\8dना à¤\95ऽ à¤\95à¥\8bनà¥\8b à¤\89प à¤ªà¤¨à¥\8dना à¤¨à¤¹à¤¿ à¤\85à¤\9bि।",
        "movereason": "कारण:",
        "revertmove": "फेरसँ वएह",
        "delete_and_move": "मेटाउ आ हटू",
        "imagetypemismatch": "नव संचिका विस्तारक अपन प्रकारसँ मेल नै खाइए।",
        "imageinvalidfilename": "लक्ष्यित संचिकाक नाम अवैध अछि",
        "fix-double-redirects": "मूल शीर्षक धरि जाहि बला सभटा पुनर्निर्देशनों के सेहो बदलु.",
-       "move-leave-redirect": "à¤\8fà¤\95à¤\9fा à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन à¤\95à¥\87 à¤ªà¤¾à¤\82à¤\9bा à¤\9bà¥\8bडि à¤\95à¥\87 à¤\9cाà¤\8a.",
-       "protectedpagemovewarning": "''' à¤\9aà¥\87तà¥\8cनà¥\80: à¤\88 à¤ªà¤¨à¥\8dना à¤¸à¤\82रà¤\95à¥\8dषित à¤\85à¤\9bि à¤¸à¥\87 à¤\96ालà¥\80 à¤¸à¤\82à¤\9aालन à¤\85धिà¤\95ारयà¥\81à¤\95à¥\8dत à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dता à¤\8fà¤\95रा à¤¹à¤\9fा à¤¸à¤\95à¥\88त à¤\9bथि।'''\nà¤\85दà¥\8dयतन वृतलेख उल्लेख नीचाँ सन्दर्भ लेल देल जा रहल अछि:",
-       "semiprotectedpagemovewarning": "'''नà¥\8bà¤\9f:''' à¤\88 à¤ªà¤¨à¥\8dना à¤¸à¤\82रà¤\95à¥\8dषित à¤\85à¤\9bि à¤¸à¥\87 à¤\96ालà¥\80 à¤ªà¤\82à¤\9cà¥\80à¤\95à¥\83त à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dता à¤\8fà¤\95रा à¤¹à¤\9fा à¤¸à¤\95à¥\88त à¤\9bथि।\nà¤\85दà¥\8dयतन वृतलेख उल्लेख नीचाँ सन्दर्भ लेल देल जा रहल अछि:",
+       "move-leave-redirect": "à¤\8fà¤\95à¤\9fा à¤¬à¤¦à¤²à¥\87न à¤\95à¥\87 à¤ªà¤¾à¤\82à¤\9bा à¤\9bà¥\8bडि à¤\95à¥\87 à¤\9cाà¤\8a",
+       "protectedpagemovewarning": "''' à¤\9aà¥\87तà¥\8cनà¥\80: à¤\88 à¤ªà¤¨à¥\8dना à¤¸à¤\82रà¤\95à¥\8dषित à¤\85à¤\9bि à¤¸à¥\87 à¤\96ालà¥\80 à¤¸à¤\82à¤\9aालन à¤\85धिà¤\95ारयà¥\81à¤\95à¥\8dत à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dता à¤\8fà¤\95रा à¤\98à¥\81सà¤\95ा à¤¸à¤\95à¥\88त à¤\9bथि।'''\nनव वृतलेख उल्लेख नीचाँ सन्दर्भ लेल देल जा रहल अछि:",
+       "semiprotectedpagemovewarning": "'''नà¥\8bà¤\9f:''' à¤\88 à¤ªà¤¨à¥\8dना à¤¸à¤\82रà¤\95à¥\8dषित à¤\85à¤\9bि à¤¸à¥\87 à¤\96ालà¥\80 à¤ªà¤\82à¤\9cà¥\80à¤\95à¥\83त à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dता à¤\8fà¤\95रा à¤\98à¥\81सà¤\95ा à¤¸à¤\95à¥\88त à¤\9bथि।\nनव वृतलेख उल्लेख नीचाँ सन्दर्भ लेल देल जा रहल अछि:",
        "move-over-sharedrepo": "[[:$1]] अछि एकटा साझी बखारीमे। कोनो संचिकाकेँ ऐ नामसँ अनलापर साझीबला एकटा संचिका मेटा जाएत।",
        "file-exists-sharedrepo": "साझी बखारीमे ऐ नामसँ पहिनहियेसँ एकटा संचिका अछि।\nकृपा कऽ दोसर नाम चुनू।",
        "export": "पन्ना सभकेँ पठाउ",
        "exporttext": "अहाँ पाठ आ कोनो पन्ना/ वा पन्ना-सभक सम्पादन इतिहासकेँ दोसर ठाम कोनो एक्स.एम.एल. संचिकामे लपेट कऽ पठा सकै छी।\nई कोनो दोसर विकीमे मीडियाविकीक प्रयोग कऽ [[Special:Import|import page]] द्वारा आयात कएल जा सकैए।\n\nपन्ना सभक निर्यात लेल, नीचाँक पाठ बक्शामे शीर्षक सभ भरू, प्रति पाँती एक शीर्षक, आ चुनू जे अहाँ अखुनका आ पहिलुका सभटा संशोधन राखऽ चाहै छी, पन्ना इतिहास पाँतीक संग, आकि अखुनका संशोधन पछिला सम्पादनक सूचनाक संग।\n\nबादबला स्थितिमे अहाँ एकटा लागिक प्रयोग कऽ सकै छी, जेना \"[[{{MediaWiki:Mainpage}}]]\" पन्ना लेल [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]।",
+       "exportall": "पन्ना सभकेँ निर्यात करू",
        "exportcuronly": "अखुनका संशोधन मात्र लिअ, पूरा इतिहास नै।",
        "exportnohistory": "----\n'''सूचना:''' परिणाम कुशलताकेँ देखैत पन्नाक सम्पूर्ण इतिहासक निर्यात अशक्त कएल गेल अछि।",
        "exportlistauthors": "सभ पन्नाक सम्पूर्ण योगदानकर्ताक सूची जोड़ू",
        "allmessages-prefix": "उपसर्गक आधारपर छाँटू:",
        "allmessages-language": "भाषा:",
        "allmessages-filter-submit": "चलू",
+       "allmessages-filter-translate": "अनुवाद करु",
        "thumbnail-more": "पैघ",
        "filemissing": "संचिका हेराएल",
        "thumbnail_error": "लघुचित्र निर्माण कालमे भ्रम:$1",
        "import": "पन्ना सभकेँ आनू",
        "importinterwiki": "ट्रान्सविकी आनू",
        "import-interwiki-text": "एकटा विकी आ पन्ना शीर्षक अनबाले चुनू।\nसंशोधन तिथि आ सम्पादकक नाम सुरक्षित रहत।\nसभटा ट्रान्सविकी आयात क्रिया सम्प्रवेशित अछि [[Special:Log/import|import log]] पर।",
-       "import-interwiki-source": "मूल विकी/ पन्ना:",
+       "import-interwiki-sourcewiki": "मूल विकि:",
+       "import-interwiki-sourcepage": "मूल पन्ना:",
        "import-interwiki-history": "अए पन्नाक सभटा इतिहास संशोधनक द्वितीयक बनाउ",
        "import-interwiki-templates": "सभटा नमूना शामिल करू",
        "import-interwiki-submit": "आनू",
        "importfailed": "आयात विफल: <nowiki>$1</nowiki>",
        "importunknownsource": "अज्ञात आयात स्रोत प्रकार",
        "importcantopen": "आयात संचिकाकेँ नै खोलि सकलौं",
-       "importbadinterwiki": "à¤\96राप à¤\85नà¥\8dतरविà¤\95à¥\80 à¤²à¤¾à¤\97ि",
+       "importbadinterwiki": "à¤\96राप à¤\85नà¥\8dतरविà¤\95à¥\80 à¤²à¤¿à¤\82à¤\95",
        "importsuccess": "आयात सफल!",
        "importnosources": "कोनो ट्रान्सविकी आयात स्रोत परिभाषित नै अछि आ सोझ इतिहास उपारोपण अशक्त कएल अछि।",
        "importnofile": "कोनो आयातित संचिका उपारोपित नै भेल।",
        "importlogpagetext": "पन्ना सभक प्रशासनिक आयात दोसर विकीक सम्पादन इतिहासक संग।",
        "import-logentry-upload": "[[$1]] आयात केलौं संचिका उपारोपण द्वारा",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|सुधार|सुधार सभ}}",
-       "import-logentry-interwiki": "$1 क विकीअन्तरण",
+       "import-logentry-interwiki": "विकीअन्तरण क देलौ $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|सुधार|सुधार सभ}} $2 सँ",
        "javascripttest": "जावास्क्रिप्ट परिक्षण",
        "tooltip-pt-userpage": "अहाँक खेसरा पन्ना",
        "tooltip-n-recentchanges": "विकीमे लगक परिवर्त्तनक सूची.",
        "tooltip-n-randompage": "कोनो अनिर्धारित पन्ना लोड करू",
        "tooltip-n-help": "प्राप्त करबाक स्थान.",
-       "tooltip-t-whatlinkshere": "सभटा विकी-पन्नाक सूची जकर एतय लिंक अछि",
+       "tooltip-t-whatlinkshere": "सभ विकी-पन्नाक सूची जकर एतय लिंक अछि",
        "tooltip-t-recentchangeslinked": "ऐ पृष्ठक लागिक पन्नामे भेल नव परिवर्तन",
        "tooltip-feed-rss": "ऐ पन्ना लेल आर.एस.एस. सूचना",
        "tooltip-feed-atom": "ऐ पन्ना लेल अणु समदिया",
        "tooltip-diff": "देखाऊ जे परिवर्त्तन अहाँ एहि लेखमे कएलहुँ।",
        "tooltip-compareselectedversions": "ऐ पन्नाक दू टा चयन कएल संशोधनक बीचक अन्तर देखू",
        "tooltip-watch": "ऐ पन्नाकेँ अपन साकांक्ष सूचीमे जोड़ू",
+       "tooltip-watchlistedit-normal-submit": "शीर्षक सभकेँ हटाउ",
+       "tooltip-watchlistedit-raw-submit": "साकांक्षसूची उद्दतन करू",
        "tooltip-recreate": "पन्ना फेरसँ बनाउ तखनो जँ ई मेटा देल गेल हुअए",
        "tooltip-upload": "उपारोपण करू",
        "tooltip-rollback": "\"प्रत्यावर्तन\" ऐ पन्नाक अन्तिम योगदा करैबलाक सम्पादन (सम्पादन सभ) केँ एक क्लिकमे पुरान जगहपर लऽ जाउ",
        "spam_reverting": "अन्तिम संशोधन लग घुरल जइमे $1 लागि नै अछि",
        "spam_blanking": "सभटा संशोधन $1 लागिसँ युक्त अि, खतम कऽ रहल छी",
        "pageinfo-title": "\"$1\"पृष्ठक लेल नब गप",
+       "pageinfo-header-basic": "न्यूनतम जानकारी",
        "pageinfo-header-edits": "संपादन",
        "pageinfo-header-restrictions": "पन्ना संरक्षण",
-       "pageinfo-views": "देखहि बला के संख्या",
+       "pageinfo-header-properties": "पन्ना जानकारी",
+       "pageinfo-display-title": "प्रदर्शन शिर्षक",
+       "pageinfo-robot-index": "मान्य",
+       "pageinfo-robot-noindex": "अमान्य",
        "pageinfo-watchers": "जानकारक संख्या",
+       "pageinfo-firstuser": "पन्ना सर्जक",
+       "pageinfo-lastuser": "अन्तिम सम्पादक",
        "pageinfo-edits": "सम्पादनक संख्या",
        "pageinfo-authors": "भिन्न लेखक संख्या",
+       "pageinfo-redirectsto": "मे पुनर्निर्देश:",
+       "pageinfo-redirectsto-info": "जानकारी",
+       "pageinfo-contentpage-yes": "हँ",
+       "pageinfo-protect-cascading-yes": "हँ",
        "markaspatrolleddiff": "देखि लेल गेल, एहन चिन्ह लगाऊ",
        "markaspatrolledtext": "देखि लेल गेल, एहन चिन्ह लगाऊ",
        "markedaspatrolled": "देखि लेल गेल, एहन चिन्ह लगाऊ",
        "hours": "{{PLURAL:$1|$1 घण्टा|$1 घण्टा}}",
        "days": "{{PLURAL:$1|$1 दिन|$1 दिन}}",
        "ago": "$1 पहिने",
+       "just-now": "अखन",
+       "hours-ago": "$1 {{PLURAL:$1|घंटा|घंटा}} पहिले",
+       "minutes-ago": "$1 {{PLURAL:$1|मिनट|मिनट}} पहिले",
+       "seconds-ago": "$1{{PLURAL:$1|सॅकेंड|सॅकेंड}} पहिले",
+       "monday-at": "सोमवार $1 बजे",
+       "tuesday-at": "मंगलबार $१",
+       "wednesday-at": "बुधवार $1 बजे",
+       "thursday-at": "बृहस्पतिबार $1 बजे",
+       "friday-at": "शुक्रवार $1 बजे",
+       "saturday-at": "शनिबार $1 बजे",
        "bad_image_list": "फॉर्मेट निम्न प्रकारेँ अछि:\n\nमात्र सूचीबद्ध सामग्री (* सँ प्रारम्भ होय बला पंक्त्ति) विचारनीय अछि। पंक्त्तिक प्रथम लिंक आवश्यक रूपसँ खराब चित्रक लिंक होयबाक चाही।\n\nओही पंक्त्तिक कोनो आर लिंक अपवाद स्वरूप अछि, उदाहरणस्वरूप पन्ना जतय चित्र पंक्त्तिअहि पर होय।",
        "variantname-zh-cn": "cn",
        "variantname-zh-tw": "tw",
        "exif-urgency-low": "कम ($1)",
        "exif-urgency-high": "बेशी ($1)",
        "exif-urgency-other": "प्रयोक्ता परिभाषित प्राथमिकता ($1)",
-       "watchlistall2": "सभ",
        "namespacesall": "सभटा",
        "monthsall": "सभ",
        "confirmemail": " ई-पत्र सत्यापित करू",
        "imgmultipagenext": "अगुलका पृष्ठ",
        "imgmultigo": "जाऊ",
        "imgmultigoto": "$1 पृष्ठ पर जाऊ",
+       "img-lang-go": "जाऊ",
        "ascending_abbrev": "asc",
        "descending_abbrev": "desc",
        "table_pager_next": "अगला पृष्ठ",
        "autosumm-replace": "\"$1\" सहित पाठ परिवर्तित भेल",
        "autoredircomment": "[[$1]] के अनुप्रेषित",
        "autosumm-new": "'$1'संग नब पृष्ठ बनाओल गेल",
+       "autosumm-newblank": "खालि पन्ना बनाओल गेल",
        "lag-warn-normal": "$1 सँ नव बदलल गेल {{PLURAL:$1|सेकेण्ड|सेकेण्ड}} ऐ सूचीमे नै देखाएल गेल।",
        "lag-warn-high": "उच्च दत्तनिधि वितरक देरीक कारण, $1 सँ नव परिवर्तन {{PLURAL:$1|सेकेण्ड|सेकेण्ड}} ऐ सूचीमे नै देखाएल जा सकल।",
        "watchlistedit-normal-title": "साकांक्षसूची बदलू",
        "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-submit": "साकांक्ष-सूची मेटाउ (ई स्थायी छि!)",
+       "watchlistedit-clear-done": "अहाँक साकांक्ष-सूची मेटाओल गेल।",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 शीर्षक छल|$1शीर्षक सभ रहए}} हटाएल गेल:",
+       "watchlistedit-too-many": "एतेक बहुत रास पन्ना सभ देखावोल जाएत।",
+       "watchlisttools-clear": "साकांक्ष-सूची मेटाउ",
        "watchlisttools-view": "सम्बन्धित परिवर्तन सभकेँ देखू",
        "watchlisttools-edit": "साकांक्षसूचीकेँ देखू आ सम्पादित करू",
        "watchlisttools-raw": "काँच साकांक्षसूची संपादित करू",
        "version-software-product": "उत्पाद",
        "version-software-version": "संस्करण",
        "version-entrypoints-header-url": "यू॰आर॰एल",
+       "redirect-submit": "जाऊ",
        "fileduplicatesearch": "द्वितीयक संचिका ताकू",
        "fileduplicatesearch-summary": "हैश मानक आधारपर द्वितीयक संचिका ताकू।",
        "fileduplicatesearch-legend": "द्वितीयक ताकू",
        "logentry-newusers-create2": "$1 {{लिंग:$2|बनाएल}} {{लिंग:$4|एकटा प्रयोक्ता खाता}} $3",
        "logentry-newusers-autocreate": "खाता $1 छल {{लिंग:$2|बनाएल}} स्वतः",
        "rightsnone": "(कोनो नै)",
+       "revdelete-summary": "सम्पादन सारांश",
        "feedback-subject": "विषय:",
        "feedback-message": "संदेश:",
        "feedback-cancel": "रद्द करु",
index 90ac544..f7cf1c6 100644 (file)
        "passwordreset-emailsent-capture": "Imel kanggo nyetel maning tembung sandhi uwis dikirim, kaya sing ditidokna nang ngisor kiye.",
        "passwordreset-emailerror-capture": "Imel nggo nyetel maning tembung sandhi uwis digawe, kaya sing ditidokna nang ngisor kiye, ningen gole ngirim maring {{GENDER:$2|panganggo}} ora teyeng: $1",
        "changeemail": "Ganti alamat imel",
-       "changeemail-header": "Ganti alamat imel-e akun",
        "changeemail-text": "Rampungna formulir kiye kanggo ngganti alamat imel Rika. Rika bakal perlu nglebokna tembung sandhi Rika nggo konfirmasi owahan kiye.",
        "changeemail-no-info": "Rika kudu mlebu log kanggo ngakses kaca kiye sacara langsung.",
        "changeemail-oldemail": "Alamat imel sekiye:",
        "changeemail-none": "(ora ana)",
        "changeemail-password": "Tembung sandhi {{SITENAME}} Rika:",
        "changeemail-submit": "Ganti imel",
-       "changeemail-cancel": "Ora sida",
        "resettokens-no-tokens": "Ora ana token sing arep disetel maning.",
        "resettokens-legend": "Nyetel maning token",
        "resettokens-token-label": "$1 (biji sekiye:$2)",
        "mergehistory-same-destination": "Jeneng kaca sumber lan tujuan ora kena padha",
        "mergehistory-reason": "Alesan:",
        "mergelog": "Gabung log",
-       "pagemerge-logentry": "nggabungna [[$1]] maring [[$2]] (révisi nganti tekan $3)",
        "revertmerge": "Batalna panggabungan",
        "mergelogpagetext": "Nang ngisor kiye isine daftar panggabungan sajarah kaca maring kaca liyane.",
        "history-title": "Riwayat revisi sekang \"$1\"",
        "searchrelated": "kagandhèng",
        "searchall": "kabèh",
        "showingresults": "Nang ngisor kiye ditidokna ana {{PLURAL:$1|'''1''' kasil|'''$1''' kasil}}, dimulai sekang #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Asil '''$1''' sekang '''$3'''|Asil '''$1 - $2''' sekang '''$3'''}} kanggo '''$4'''",
        "search-nonefound": "Ora ana kasil sing cocog karo pitakonan (''query'').",
        "powersearch-legend": "Panggoletan lanjut",
        "powersearch-ns": "Goleti nang bilik jeneng:",
        "statistics": "Statistik",
        "statistics-header-pages": "Statistik kaca",
        "statistics-header-edits": "Statistik panyuntingan",
-       "statistics-header-views": "Statistik tampilan",
        "statistics-header-users": "Statistik panganggo",
        "statistics-header-hooks": "Statistik liyane",
        "statistics-articles": "Kaca-kaca isi",
        "statistics-files": "Berkas sing diunggahna",
        "statistics-edits": "Jumlah suntingan wiwit {{SITENAME}} dimolai",
        "statistics-edits-average": "Rata-rata suntingan saben kaca",
-       "statistics-views-total": "Jumlah penampilan kaca",
-       "statistics-views-total-desc": "Tampilan maring kaca sing ora-ana lan kaca astamiwa ora dilebokna",
-       "statistics-views-peredit": "Jumlah tampilan saben suntingan",
        "statistics-users": "Jumlah [[Special:ListUsers|panganggo sing kedaftar]]",
        "statistics-users-active": "Jumlah panganggo aktif",
        "statistics-users-active-desc": "Panganggo sing nglakokna aktivitas nang {{PLURAL:$1|dina|$1 dina}} pungkasan",
-       "statistics-mostpopular": "Kaca sing paling akèh dideleng",
        "doubleredirects": "Pangalihan dobel",
        "doubleredirectstext": "Kaca kiye muat daftar kaca sing dialihna maring kaca pangalihan liyane.\nSaben barise nduwe pranala maring pangalihan pertama lan kepindho, lan tujuan sekang pengalihan kepindho sing biasane kuwe kaca tujuan sing \"sebenere\", sing kudune dadi tujuane kaca pangalihan pertama.\n Tembung sing <del>dicorèk</del> artine kuwe wis rampung didandani.",
        "double-redirect-fixed-move": "[[$1]] uwis dipindahna.\nKiye sekiye dialihna maring [[$2]].",
        "uncategorizedtemplates": "Cithakan sing ora dikategorisasi",
        "unusedcategories": "Kategori sing ora digunakna",
        "unusedimages": "Berkas sing ora digunakna",
-       "popularpages": "Kaca populèr",
        "wantedcategories": "Kategori sing diperlokna",
        "wantedpages": "Kaca sing dipèrlokna",
        "wantedpages-badtitle": "Judhul ora valid nang sèt asil: $1",
        "querypage-disabled": "Kaca astamiwa kiye dinonaktifna kanggo alesan kinerja.",
        "booksources": "Sumber buku",
        "booksources-search-legend": "Nggoleti sumbere buku",
-       "booksources-go": "Goleti",
        "booksources-text": "Nang ngisor kiye daftar pranala ming situs liyane sing ngadol buku anyarlan bekas,lan mbok menawa duwe informasi sebanjure ngenani buku-buku sing lagi Rika goleti:",
        "booksources-invalid-isbn": "ISBN sing diwenehna ketone anu ora valid; priksa mbok salah gole nyalin sekang sumber asline.",
        "specialloguserlabel": "Panganggo:",
        "watch": "Pantau",
        "unwatch": "Batalna pantauan",
        "watchlist-details": "Ana {{PLURAL:$1|$1 kaca|$1 kaca}} nang daftar pangawasané Rika, ora klebu kaca-kaca dhiskusiné.",
-       "wlshowlast": "Tidokna $1 jam $2 dina $3 pungkasan",
+       "wlshowlast": "Tidokna $1 jam $2 dina  pungkasan",
        "watchlist-options": "Opsi daftar pangawasan",
        "delete-confirm": "Busek \"$1\"",
        "delete-legend": "Busek",
        "exif-lightsource-17": "Cahya standar A",
        "exif-lightsource-18": "Cahya standar B",
        "exif-lightsource-19": "Cahya standar C",
-       "watchlistall2": "kabèh",
        "namespacesall": "kabèh",
        "monthsall": "kabèh",
        "watchlisttools-view": "Tidokna owahan sing ana gandhèngané",
index bdd4460..3307c93 100644 (file)
        "mergehistory-same-destination": "Сядынгольде ди од лопатненди аш кода улемс фкат",
        "mergehistory-reason": "Туфтал:",
        "mergelog": "Шоворематнень лувома",
-       "pagemerge-logentry": "[[$1]] шоворевсь [[$2]]-ть мархта ($3-ть верзиети самс)",
        "revertmerge": "Валхтомс шоворемать",
        "mergelogpagetext": "Ванк ала сяда мекольдень лопатнень фкя фкянь мархта шоворемаснон историясна.",
        "history-title": "\"$1\"нь полафнематнень историясна",
        "searchrelated": "мала",
        "searchall": "сембе",
        "showingresults": "Ала няфтеви {{PLURAL:$1|мувсь '''1'''|мувсть '''$1'''}} '''$2'''-ста ушедомс.",
-       "showingresultsheader": "{{PLURAL:$5|'''$1''' сафкс '''$3'''-ста|'''$1 - $2''' сафкст '''$3'''-ста}} '''$4'''нди",
        "search-nonefound": "Аш вешфксонди малады муфкст.",
        "powersearch-legend": "Анцяйняньбес вешендема",
        "powersearch-ns": "Вешендемс лемботмоса:",
        "statistics": "Статистик",
        "statistics-header-pages": "Лопань статистик",
        "statistics-header-edits": "Петнемс статистикть",
-       "statistics-header-views": "Няфтемс статистикть",
        "statistics-header-users": "Тиить статистиксь",
        "statistics-articles": "Потма мархта лопатне",
        "statistics-pages": "Лопатне",
        "statistics-files": "Тонкф файлхне",
        "statistics-edits": "Лопань петнемасна {{SITENAME}}ть ушедомста",
        "statistics-edits-average": "Петнемат фкя лопас ётксталувксста",
-       "statistics-views-total": "Ванондомада сембоц",
-       "statistics-views-peredit": "Фкя петнемас ванондомада",
        "statistics-users": "Сёрматфтф [[Special:ListUsers|тиихне]]",
        "statistics-users-active": "Покай тиихне",
        "statistics-users-active-desc": "Тиихне конатне тисть мезеге ётай {{PLURAL:$1|шиня|$1 шиста}}",
-       "statistics-mostpopular": "Сидеста сувсеви лопат",
        "doubleredirects": "Кафонзаф умборондафтфксне",
        "doubleredirectstext": "Тя лопань лувомаса няфтевихть умборондафтфксне сюлмафт иля умборондафтфкснень мархта. Эрь луфксса (строкаса) улихть васенце ди омбоце умборондафтфкснень сюлмафкссна, тяса тага ули омбоце умборондафтфксонь васенце киксонцты сюлмафкссь, тоса ули няфтемась лопань лемонц лангс конань мархта эряволь васенце умборондафтфксть сюлмафтомс.\n<del>Туркс кикс мархта</del> тяшксне латцефольхть.",
        "double-redirect-fixed-move": "[[$1]] шашфтфоль, сон тяни [[$2]]нь умборондафтфксоц",
        "uncategorizedtemplates": "Категориефтома кепотькст",
        "unusedcategories": "Тевс апак нолдак категориет",
        "unusedimages": "Тевс апак нолдак файлхт",
-       "popularpages": "Сидеста сувсеви лопат",
        "wantedcategories": "Вешф категориет",
        "wantedpages": "Вешф лопат",
        "wantedfiles": "Вешеви файлхт",
        "suppress": "Кяшема",
        "booksources": "Кинигань кучфтемат",
        "booksources-search-legend": "Вешендемс кинигань кучфтемат",
-       "booksources-go": "Аре",
        "booksources-text": "Сюлмафкст ала сотфт иля интернет лопатнень мархта, конат мишендихть од эди сире кинигат, ди тоса, улема, тон мусак поладомань информацие ся кинигатнень колга, конатнень тон вешендить:",
        "booksources-invalid-isbn": "Путф ISBN аф виде эли аф кондясти; ванк кодамкс сон ульсь лисемаса.",
        "specialloguserlabel": "Тиись:",
        "wlheader-enotif": "Электрононь сёрма вельде пачфнема нолдаф тевс.",
        "wlheader-showupdated": "Лопат конань полафтозь тонь мекольце сувсемадот меле няфтевсть '''эчке тяшкса'''.",
        "wlnote": "Ала {{PLURAL:$1|мекольце полафнема|'''$1''' мекольце полафнемат}} ётай {{PLURAL:$2| ойста (часста)|'''$2''' ойста (часста)}}.",
-       "wlshowlast": "Няфтемс мекольце $1 ойхть (част) $2 шит $3",
+       "wlshowlast": "Няфтемс мекольце $1 ойхть (част) $2 шит",
        "watchlist-options": "Мельгеваномать латцемасна",
        "watching": "Ванома...",
        "unwatching": "Аф ванома...",
        "import": "Таргамс лопат",
        "importinterwiki": "Трансвикинь таргама",
        "import-interwiki-text": "Кочкак Вики ди лопань коняксонц эрявихть таргаманди.\nВерзиень шисна ди петнихнень лемсна улихть ванфтфт.\nСембе ётковикинь таргама тефне тяшневихть [[Special:Log/import|таргамань лувомас]].",
-       "import-interwiki-source": "Вики лисьма/лопа:",
        "import-interwiki-history": "Копияфтомс тя лопать сембе историянь верзиенза",
        "import-interwiki-templates": "Сувафтомс сембе шаблотт",
        "import-interwiki-submit": "Таргамс",
        "exif-gpsspeed-n": "Сюлмот",
        "exif-gpsdirection-t": "Виде ён",
        "exif-gpsdirection-m": "Магнитонь ён",
-       "watchlistall2": "сембе",
        "namespacesall": "сембе",
        "monthsall": "сембе",
        "confirmemail": "Кемостамс электрононь адресть",
        "tag-filter": "[[Special:Tags|Tag]] педямась:",
        "revdelete-restricted": "нолдаф тевс кардафксне системонь вятиксненди",
        "revdelete-unrestricted": "системонь вятиксненди кардафксне валхтфт",
-       "rightsnone": "(аш)"
+       "rightsnone": "(аш)",
+       "revdelete-summary": "петнемс нюрьхкяня лихтемать"
 }
index b885a3f..35266cb 100644 (file)
@@ -24,6 +24,7 @@
        "tog-watchdefault": "Hanaraka ny pejy ary ny rakitra ovaiko",
        "tog-watchmoves": "Hanaraka ny pejy ary ny rakitra ovaiko anarana",
        "tog-watchdeletion": "Hanaraka ny pejy ary ny rakitra voafafako",
+       "tog-watchrollback": "Hanaraka pejy nanaovako famoana",
        "tog-minordefault": "Mariho ho madinika foana aloha ny fanovana rehetra",
        "tog-previewontop": "Asehoy alohan'ny boaty fanovana ny tsipalotra",
        "tog-previewonfirst": "Asehoy ny tsipalotra amin'ny fanovana voalohany",
        "otherlanguages": "Amin'ny tenim-pirenena hafa",
        "redirectedfrom": "(tonga teto avy amin'ny $1)",
        "redirectpagesub": "Pejy fihodinana",
+       "redirectto": "Mihodina mankany:",
        "lastmodifiedat": "Voaova farany tamin'ny $1 amin'ny $2 ity pejy ity<br />",
        "viewcount": "voastsidika in-$1 ity pejy ity.{{PLURAL:}}",
        "protectedpage": "Pejy voaaro",
        "hidetoc": "afeno",
        "collapsible-collapse": "Vonkinina",
        "collapsible-expand": "Itarina",
+       "confirmable-confirm": "Tena tapa-kevitra amin'izany ianao?",
+       "confirmable-yes": "Eny",
+       "confirmable-no": "Tsia",
        "thisisdeleted": "Hojerena sa haverina i $1?",
        "viewdeleted": "Hijery an'i $1?",
        "restorelink": "ny fanovàna voafafa $1{{PLURAL:}}",
        "invalidtitle-knownnamespace": "Lohateny tsy miady amin'ny fepetra miaraka amin'ny anaram-balam-pejy \"$2\" ary soratra \"$3\"",
        "invalidtitle-unknownnamespace": "Lohateny tsy ekena miaraka amin'ny laharana anaran-tsehatra $1 ary soratra \"$2\"",
        "exception-nologin": "Tsy tafiditra",
-       "exception-nologin-text": "[[Special:Userlogin|Midira]]  mba hahafahanao manao ilay asa na hahafahanao mijery ity pejy ity",
+       "exception-nologin-text": "Midira amin'ny kaontinao azafady mba hahafahana manao ilay asa na mitsidika ilay pejy",
        "exception-nologin-text-manual": "$1 ianao mba ho tonga eo amin'ilay pejy na hanatanteraka ilay asa.",
        "virus-badscanner": "Diso : Tsy fantatray ny mpitady virus ''$1''",
        "virus-scanfailed": "Tsy mety alefa ny fitadiavana (kaody $1)",
        "createaccount-text": "Nisy olona nanokatra kaonty ho an'ny adiresy imailakao eo amin'ny {{SITENAME}} ($4) mitondra anarana « $2 » miaraka amin'ny tenimiafina « $3 ».<br />\nTokony miditra na manokatra kaonty ianao, ary ovay ny tenimiafinao dien-izao.\n\nAza mijery ity hafatra ity ianao raha voaforona an-tsifetezana ilay kaonty io.",
        "login-throttled": "Betsaka loatra ny andram-pidirana nataonao.\n\nAndraso $1 alohan'ny mamerina.",
        "login-abort-generic": "Tsy nahomby ny fanandramanao niditra",
+       "login-migrated-generic": "Efa nafindra ny kaontinao, ary efa tsy misy eto amin'ity wiki ity intsony ny anaram-pikamnbanao",
        "loginlanguagelabel": "fiteny : $1",
        "suspicious-userlogout": "Ny fangataham-pialanao dia tsy nekena satria ohatry ny nalfan'ny mpizahan-tsehatra simba izy na kasy ny proxy.",
        "createacct-another-realname-tip": "Azo tsy atsofoka ny tena anarana.\nRaha misafidy ny hanome azy ianao, ho ampiasaina amin'ny fanehoana ny anjara asan'ilay mpikambana ilay izy.",
        "passwordreset-emailsent-capture": "Lasa ilay mailaka famerenana tenimiafina, izay aseho eo ambany.",
        "passwordreset-emailerror-capture": "Nosoratana ilay mailaka famerenana tenimiafina, izay aseho eo ambany, fa tsy tafalefa tany amin'ilay mpikambana ilay izy : $1{{GENDER:$2}}",
        "changeemail": "Hanova ny adiresy imailaka",
-       "changeemail-header": "Hanova ny adiresy imailak'ilay kaonty",
        "changeemail-text": "Fenoy ity pejy fenoina ity mba hanova ny adiresy imailakao. Ilainao atsofoka ny tenimiafinao mba hampihatra ilay fanovana.",
        "changeemail-no-info": "Mila tafiditra ianao vao avaka mijery ity pejy ity.",
        "changeemail-oldemail": "Adiresy imailaka ankehitriny :",
        "changeemail-none": "(tsy misy)",
        "changeemail-password": "Tenimiafinao eo amin'i {{SITENAME}}:",
        "changeemail-submit": "Hanova ny adiresy imailaka",
-       "changeemail-cancel": "Adinoy",
        "changeemail-throttled": "Betsaka loatra ny andrana nidiranao.\nMiandrasa $1 alohan'ny manandrana indray.",
        "resettokens": "Hamerina ny token",
        "resettokens-text": "Azonao averina eto ny token izay hahafahana mitsidika ny fampahalalana tsy sarababem-bahoaka ao amin'ny kaontinao. Tokony ataonao izany raha voazara tsy fanahy iniana na raha nisy nangalatra ny kaontinao.",
        "preview": "Topi-maso",
        "showpreview": "Asehoy aloha",
        "showdiff": "Asehoy ny fiovana",
-       "anoneditwarning": "'''Tandremo''' : Tsy nisoratra tato amin'ny sehtatra ianao. Ho voatahiry ao amin'ny tantaram-pejy ny adiresy IP anao.",
+       "blankarticle": "<strong>Tandremo:</strong> Fotsy ny pejy tianao hoforonina.\nRaha manindry an'i \"{{int:savearticle}}\" indray ianao dia hoforonina tsy hisy vontoatiny na inona na innona ilay pejy.",
+       "anoneditwarning": "<strong>Fampitandremana :</strong> Tsy niditra tamin'ny kaontinao ianao. Ho hitan'ny vahoaka ny adiresy IP-nao raha manova inona na inona ianao. Raha <strong>[$1 miditra amin'ny kaontinao]</strong> ianao dia ho anisan'ny tombontsoa anananao ny fanaovana ny fiovana amin'ny solonanaranao.",
        "anonpreviewwarning": "''Tsy niditra ianao. Hampitahiry ny adiresy IP anao ao amin'ny tantaram-panovan'ity pejy ity ny fitehirizana ny fanovana.''",
        "missingsummary": "'''Hafatra fampantsiahivana''' : tsy mbola nanome ny ambangovangom-panovanao ianao.\nRaha mbola tsindriano fanindroany eo amin'ny bokotra {{int:savearticle}}, ho voatahiry tsy fanambarana ny fanovanao.",
        "missingcommenttext": "Ampidiro ny ambangovangony azafady.",
        "permissionserrorstext-withaction": "{{PLURAL:$1|Tsy manana alalàna ianao|Tsy manana alalàna ianao}} $2. Io ny antony ($2):",
        "recreate-moveddeleted-warn": "'''Tandremo''' : Mamerina pejy efa voafafa ianareo.'''\n\nMarino raha tsara tohizana ny fanovana eto amin'ity pejy ity. Ny laogim-pamafana sy ny famindran-toerana dia eo ambany :",
        "moveddeleted-notice": "Voafafa ity pejy ity.\nEo ambany eo any laogin'ny famindran-toerana sy ny famafana ho an'ny antsipirihany.",
-       "log-fulllog": "Hijery ny tatitr’asa (log)",
+       "log-fulllog": "Hijery ny laogy manontolo",
        "edit-hook-aborted": "Tsy nety ny fanovàna\nTsy nanome antony",
        "edit-gone-missing": "Tsy afaka natao update ilay pejy.\nMety voafafa angamba izy.",
        "edit-conflict": "Adi-panovàna.",
        "parser-template-recursion-depth-warning": "Fetran'ny halalin'ny fiantsoana endrika voahoatra ($1).",
        "language-converter-depth-warning": "Mihoatra ny fetran-kalalin'ny mpamadika teny ($1)",
        "node-count-exceeded-category": "Pejy izay ahitana fihoatran'ny isam-patotra (node)",
-       "node-count-exceeded-category-desc": "Sokajy ho an'ny pejy ahitana isan'ny naody mihoatra.",
+       "node-count-exceeded-category-desc": "Mihoatra ny isam-patotra eto amin'ity pejy ity",
        "node-count-exceeded-warning": "Pejy manana isam-patotra mihoatra",
        "expansion-depth-exceeded-category": "Pejy manana halalim-panitarana mihoatra",
        "expansion-depth-exceeded-category-desc": "Sokajy ho an'ny pejy ahitana halalim-piitarana mihoatra.",
        "last": "farany",
        "page_first": "voalohany",
        "page_last": "farany",
-       "histlegend": "Fisafidianana ny votoatiny hohampitahaina: Mario ny bokotra radiôn'ny fiovana hampitahazay ary tsintrio ny bokotra fanekena amin'ny faram-pejy<br />\nMaribolana: '''(ank)''' = fampitahana amin'ny votoatin'ny pejy ankehitriny,\n'''(farany)''' = fampitahana amin'ny version talohan'ity, M = fanovana madinika",
+       "histlegend": "Safidim-pahasamihafana: Mariho ireo bokotra radiôn'ny versiona mba hampitahàna azy ireo  ary tsindrony ilay bokotra amin'ny faran'ny pejy: <strong>({{int:cur}})</strong> = fampitahana amin'ny versiona farany indrindra, <strong>({{int:last}})</strong> = fahasamihafana amin'ny versiona farany nialoha ity, <strong>{{int:minoreditletter}}</strong> = fiovana madinika.",
        "history-fieldset-title": "Karohy ny tantara",
        "history-show-deleted": "Voafafa ihany",
        "histfirst": "antitra indrindra",
        "rev-deleted-user": "(solonanarana nesorina)",
        "rev-deleted-event": "(nesorina ny fampidirana)",
        "rev-deleted-user-contribs": "[anaram-pikambana na adiresy IP voafafa - fanovana nasitria teo amin'ny fandraisan'anjara modification]",
-       "rev-deleted-text-permission": "'''Voafafa''' ny santiônan'ity pejy ity.\nMety misy ny antsipirihany angamba ny [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAME}}}} laogy momban'ny famafàna pejy].",
+       "rev-deleted-text-permission": "<strong>Voafafa</strong> ny santiônan'ity pejy ity.\nMety misy ny antsipirihany angamba ny [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAME}}}} laogim-pamafàna pejy].",
        "rev-deleted-text-unhide": "Ity versionan'ity pejy ity dia '''voafafa'''.\nHita ao amin'ny [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} laogim-pamafana] ny antsipirihany.\nAfaka [$1 mijery ilay versiona] ianao raha tianao.",
        "rev-suppressed-text-unhide": "'''Nofafana''' ity versiom-pejy ity.\nAzo jerena ao amin'ny [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} laogim-pamafana] ny antsipirihany.\nAzonao [$1 jerena foana ilay santiôna] raha tianao.",
        "rev-deleted-text-view": "'''Nofafana''' ity versiom-pejy ity.\nAzonao jerena ity santiôna voafafa ity ; misy antsipirihany ao amin'ny [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} laogim-pamafana].",
        "rev-suppressed-text-view": "'''Nofafana''' ity versiom-pejy ity.\nAzonao jerena ilay versiona voafafa ; ny antsipirihany dia ao amin'ny [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} laogim-pamafana].",
-       "rev-deleted-no-diff": "Tsy afaka mijery anio diff io ianao satria misy santôna '''voafafa''' ao aminy.\nMety any amin'ny [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAME}}}} laogy momban'ny famafàna pejy] ny antsipirihany.",
+       "rev-deleted-no-diff": "Tsy afaka mijery anio fampitahana (diff) io ianao satria misy versiona '''voafafa''' ao aminy.\nMety any amin'ny [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAME}}}} laogy momban'ny famafàna pejy] ny antsipirihany.",
        "rev-suppressed-no-diff": "Tsy azo jerenao io diff io satria '''voafafa''' ny iraika amin'ny reviziônany.",
        "rev-deleted-unhide-diff": "Nisy '''voafafa''' ny iraika amin'ny reviziôna an'ity diff ity.\nNy antsipirihany dia mety hita ao amin'ny [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} laogin'ny famafana].\n[$1 Azonao jerena foana ilay diff] raha tianao.",
        "rev-suppressed-unhide-diff": "Nisy '''voafafa''' ny iraika amin'ny versiona an'ity diff ity.\nNy antsipirihany dia mety hita ao amin'ny [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} laogin'ny famafana].\n[$1 Azonao jerena foana ilay diff] raha tianao.",
        "logdelete-selected": "{{PLURAL:$1||}}Laogy voafidy :",
        "revdelete-confirm": "Amafiso eto ny hevitrao raha hanao io ianao, raha azonao sary an-tsaina ny mety ho vokany, ary raha araka ny [[{{MediaWiki:Policy-url}}|fepetra mihatra]] ny zavatra ataonao.",
        "revdelete-suppress-text": "Ny famafàna pejy dia ampiasaina rehefa :\n* Fampahalalana mampiely lainga\n* Misy fampahalalana tsy sarababem-bahoaka tsy metimety\n*: ''Adiresy onenana, laharana antso an-tariby, sns.''",
-       "revdelete-legend": "Ampetraho ny fepetra momban'ny fahitana :",
+       "revdelete-legend": "Hametraka ny fe-pahitana",
        "revdelete-hide-text": "Tahirintsoratry ny versiona",
        "revdelete-hide-image": "asitriho ny votoatin'ilay rakitra",
        "revdelete-hide-name": "Asitriho ny asa sy ny tanjona",
        "revdelete-submit": "Hampiharina amin'ny versiona nofidiana {{PLURAL:$1}}",
        "revdelete-success": "'''Voaova soa aman-tsara ny fahitana ny versiona.'''",
        "revdelete-failure": "'''Ny fisehon'ity versiona ity dia tsy afaka natao update'''\n$1",
-       "logdelete-success": "'''Voaova soa aman-tsara ny fisehon'ny tatitr’asa.'''",
-       "logdelete-failure": "'''Tsy afaka novaina ny fisehon'ny tatitr’asa'''\n$1",
+       "logdelete-success": "<strong>Voaova soa aman-tsara ny fisehon'ny laogy.</strong>",
+       "logdelete-failure": "<strong>Tsy afaka novaina ny fisehon'ny laogy</strong>\n$1",
        "revdel-restore": "Ovay ny fahitàna",
        "pagehist": "Tantaran'ilay pejy",
        "deletedhist": "Tantara voafafa",
        "revdelete-concurrent-change": "Tsi-fetezana teo am-panovana ny zavatra voadaty tamin'ny $1 tamin'ny $2 : ny satany dia voaovan' olon-kafa tamin'ianao nanova azy.\nJereo ny laogy.",
        "revdelete-only-restricted": "Tsi-fetezana teo am-panitrihana ny zavatra voadaty tamin'ny $1 tamin'ny $2 : tsy azonao fafana ireo zavatra ireo amin'ny mpandrindra raha tsy misafidy famafana.",
        "revdelete-reason-dropdown": "* Antom-pamafana matetika :\n** Tsifanajakan ny zom-pamrona;\n** Famoahan-kevitra na fampahalalana ho ann'ny olon-tokana tsy tokony haseho;\n** Fampahalalana mety mifototra amin'ny lainga.",
-       "revdelete-otherreason": "Antony hafa / antony miampy :",
+       "revdelete-otherreason": "Antony hafa/miampy :",
        "revdelete-reasonotherlist": "Antony hafa",
        "revdelete-edit-reasonlist": "Hanova ny anton'ny famafàna",
        "revdelete-offender": "Mpanao ilay reviziôna :",
-       "suppressionlog": "tatitr’asa momban’ny famafana pejy",
+       "suppressionlog": "Laogim-pamafana",
        "suppressionlogtext": "Ity ny lisitry ny famafana ary ny sakana mikasika ny votoatiny asitrika amin'ny mpandrindra. Jereo ny [[Special:BlockList|lisitry ny sakana]] ho an'ny lisitry ny fandroahana ary ny sakana mbola mihatra amin'izao fotoana.",
        "mergehistory": "Atsonika ny tantara ny pejy",
        "mergehistory-header": "Amin'ity pejy ity, afaka manonika santiônan'ny tantara pejy iaviana makany amina pejy vaovao ianao.\nMarino raha manohy ny tantaram-pejy ity asa ity.",
        "mergehistory-comment": "natambatra miarak'amin'ny [[:$2]] ny/i [[:$1]] : $3",
        "mergehistory-same-destination": "Ny pejy iaviana sy ny pejy tanjona dia tsy mahazo mitovy",
        "mergehistory-reason": "Antony :",
-       "mergelog": "Tatitr’asa momban’ny fitambarana",
-       "pagemerge-logentry": "voatambatra tamin'ny [[$2]] [[$1]] (fanovàna hatramin'ny $3)",
+       "mergelog": "Laogim-fampitambarana",
        "revertmerge": "Saraho",
        "mergelogpagetext": "Ity ny lisitry ny fanambarana ny tantaram-pejy vao haingana",
        "history-title": "Tantaran'ny endrik'i « $1 »",
        "searchrelated": "voadinika",
        "searchall": "rehetra",
        "showingresults": "Omeo ny valiny{{PLURAL:$1||}} miisa hatramin'ny <b>$1</b> manomboka ny #<b>$2</b>.",
-       "showingresultsheader": "{{PLURAL:$5}}Valim-pikaronhana '''$1x–$2''' an'i '''$3''' ho an'i '''$4'''",
        "search-nonefound": "Tsy nahitana valiny ilay fanontaniana.",
        "powersearch-legend": "Fikarohana havanana",
        "powersearch-ns": "Hitady anatin'ny anaran-tsehatra :",
        "powersearch-togglelabel": "Marihana:",
        "powersearch-toggleall": "Rehetra",
        "powersearch-togglenone": "Tsy misy",
+       "powersearch-remember": "Tadidio ho an'ny karoka manaraka ity safidy ity",
        "search-external": "Hikaroka any ivelany",
        "searchdisabled": "Tsy nalefa ny karoka eto amin'i {{SITENAME}}. Afaka mampiasa an'i Google aloha ianao mandra-paha. Nefa fantaro fa mety ho efa lany daty ny valiny omeny.",
        "search-error": "Hadisoana nitranga tam-pikarohana: $1",
        "preferences": "Ny momba anao",
        "mypreferences": "Safidy",
        "prefs-edits": "isa ny fanovàna :",
-       "prefsnologintext2": "$1 ianao hahafahanao mamaritra ny safidim-pikambana",
+       "prefsnologintext2": "Midira amin'ny kaontinao azafady mba hahafahanao mamaritra ny safidim-pikambana",
        "prefs-skin": "Endrika",
        "skin-preview": "Tsipalotra",
        "datedefault": "Tsy misy safidy",
        "prefs-tokenwatchlist": "Token",
        "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.",
        "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-deletedtext": "Mijery ny lahatsoratra voafafa sy ny fampitahana anelanelan'ny versiona voafafa",
        "right-browsearchive": "Mitady pejy voafafa",
        "right-undelete": "Mamerina pejy voafafa",
-       "right-suppressrevision": "Mandinika sy mamerina ny version asitrika amin'ny mpandrindra",
+       "right-suppressrevision": "Mandinika sy mamerina ny version asitrika amin'ny mpikambana rehetra",
+       "right-viewsuppressed": "Fiovana natakona avy amin'ity mpikambana ity",
        "right-suppressionlog": "Mijery ny tao tsy sarababem-bahoaka",
        "right-block": "Manakana ny mpikambana mba tsy hanova",
        "right-blockemail": "Manakana ny mpikambana mba tsy handefa imailaka",
        "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",
-       "newuserlogpage": "Tatitr’asan’ny fanokafana kaontim-pikambana",
+       "newuserlogpage": "Laogim-panokafana kaontim-pikambana",
        "newuserlogpagetext": "Ity pejy ity dia maneho ny tantaran'asan'ny fampidirana mpikambana vaovao.",
-       "rightslog": "Tatitr’asa momban’ny fanovana satam-pikambana",
-       "rightslogtext": "Ity ny laogy momban'ny fanovana ny zom-pikambana.",
+       "rightslog": "Laogim-piovan'ny zom-pikambana",
+       "rightslogtext": "Ity ny laogim-piovan'ny zom-pikambana",
        "action-read": "mamaky ity pejy ity",
        "action-edit": "manova ity pejy ity",
        "action-createpage": "hanao pejy",
        "recentchanges-label-plusminus": "IO ny isan'ny oktety niova tamin'ilay pejy",
        "recentchanges-legend-heading": "'''Maribolana:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (jereo koa ny [[Special:NewPage|lisitry ny pejy vaovao]])",
-       "rcnotefrom": "Ity eto ambany ity ny lisitry ny vao niova manomboka ny <b>$2</b> (hatramin'ny <b>$1</b> no miseho).",
+       "rcnotefrom": "Eo ambany dia ahitana ireo fiovana{{PLURAL:$5}} hatry ny <strong>$3, $4</strong> (naseho hatramin'ny <strong>$1</strong>).",
        "rclistfrom": "Asehoy izay vao niova manomboka ny $3 $2",
        "rcshowhideminor": "$1 ny fanovàna kely",
        "rcshowhideminor-show": "Haneho",
        "http-invalid-url": "URL diso : $1",
        "http-invalid-scheme": "Tsy zaka ny URL miaraka amin'ny sema « $1 »",
        "http-request-error": "Tsi-fetezana tsy fantam-piaviana teo ampandefasana ilay hataka.",
-       "http-read-error": "Tsy fetezana momban'ny famakiana HTTP.",
+       "http-read-error": "Hadisoam-pamakiana HTTP.",
        "http-timed-out": "Ny fangatahana HTTP dia efa lany daty.",
        "http-curl-error": "Tsi-fetezana teo am-pangalana ny URL : $1",
        "http-bad-status": "Nisy tsi-fetezana teo ampandefasana ny hataka HTTP: $1 $2",
        "randomincategory": "Pejy kisendra ao amin'ny sokajy",
        "randomincategory-invalidcategory": "Tsy anaran-tsokajy azo raisina \"$1\"",
        "randomincategory-nopages": "Tsy misy pejy ao amin'i [[:Category:$1]]",
-       "randomincategory-selectcategory": "Haka pejy kisendra ao amin'ny sokajy: $1 $2",
-       "randomincategory-selectcategory-submit": "Alefa",
        "randomredirect": "Pejy fihodinana kisendra",
        "randomredirect-nopages": "Tsy misy pejy fihodinana eo amin'ny anaran-tsehatra «$1»",
        "statistics": "Statistika",
        "statistics-header-pages": "Statistikan'ny pejy",
        "statistics-header-edits": "Statistikan'ny fanovana",
-       "statistics-header-views": "Statistikan'ny tsidika",
        "statistics-header-users": "Statistikan'ny mpikambana",
        "statistics-header-hooks": "statistika hafa",
        "statistics-articles": "Lahatsoratra",
        "statistics-files": "Rakitra voaray",
        "statistics-edits": "Isan’ny fanovana hatry ny fisian’i {{SITENAME}}",
        "statistics-edits-average": "Isan'ny fanovana isaky ny pejy",
-       "statistics-views-total": "Tsidika",
-       "statistics-views-peredit": "Tsidika isaky ny fanovana",
        "statistics-users": "[[Special:ListUsers|Mpikambana]] nisoratra anarana",
        "statistics-users-active": "Mpikambana mavitrika",
        "statistics-users-active-desc": "Mpikambana nanao zavatra teto tanatin'ny $1 andro{{PLURAL:}}.",
-       "statistics-mostpopular": "Pejy voatsidika",
        "pageswithprop": "Pejy misy toe-pejy",
        "pageswithprop-legend": "Pejy misy toe-pejy",
        "pageswithprop-text": "Manalisitra ny pejy mampiasa toe-pejy manokana ity",
        "uncategorizedtemplates": "Endrika tsy voasokajy",
        "unusedcategories": "Sokajy tsy miasa",
        "unusedimages": "Rakitra tsy miasa",
-       "popularpages": "Pejy maresaka",
        "wantedcategories": "Vondrona tokony hoforonina",
        "wantedpages": "Pejy tokony hoforonina",
        "wantedpages-badtitle": "Lohateny tsy ekena amin'ny valiny : $1",
        "querypage-disabled": "Tsy ampiasaina ity pejy manokana ity mba hitsitsy ny solosaina",
        "booksources": "boky tsiahy",
        "booksources-search-legend": "hikaroka anatin'ny boky todika",
-       "booksources-go": "Ataovy lisitra",
-       "booksources-text": "Ity misy lisitra maneho ny rohy makany amin'ny sehatra mivarotra boky vaovao sy efa vaky ary mety ahitanao fampahalalàna momban'ny boky sy soratra notadiavinao :",
+       "booksources-search": "Fikarohana",
+       "booksources-text": "Ity misy lisitra maneho ny rohy makany amin'ny sehatra mivarotra boky vaovao sy efa vaky ary mety ahitanao fampahalalàna momba ny boky sy soratra notadiavinao :",
        "booksources-invalid-isbn": "Ny ISBN nomena dia mety diso ; marino raha diso ianao teo am-pandikanana ny loharano fotony.",
        "specialloguserlabel": "Mpikambana nanao :",
        "speciallogtitlelabel": "Tanjona (lohateny na mpikambana) :",
        "log": "Tatitr’asa",
-       "all-logs-page": "Ny tatitr’asa",
+       "all-logs-page": "Laogy rehetra",
        "alllogstext": "Seho nakambana ho an'ny laogy rehetra azo jerena eto amin'ny {{SITENAME}}.\nAzonao ferana ny fahitana ny tao amin'ny fisafidianana karazana laogy iray, anaram-pikambana iray na pejy iray (samihafa ny sorabaventy sy soramadinika).",
        "logempty": "Tsy nahitana.",
        "log-title-wildcard": "Hitady amin'ny lohateny manomboka amin'io soratra io",
        "allpagesbadtitle": "Tsy mety ny anaram-pejy : misy tovona iraisam-piteny na interwiki natokana, na misy soratra iray na maro tsy azo ampiasaina anaty anaram-pejy.",
        "allpages-bad-ns": "{{SITENAME}} dia tsy manana anaran-tsehatra mitondra anarana « $1 ».",
        "allpages-hide-redirects": "Haneho ny fihodinana",
+       "cachedspecial-viewing-cached-ttl": "Mijery pejy anaty takona ianao, izay namboarina $1 taona lasa.",
        "cachedspecial-refresh-now": "Hijery ny farany indrindra",
        "categories": "Sokajy",
        "categoriespagetext": "{{PLURAL:$1}}Ampiasain'ny rakitra na pejy ireo sokajy manaraka ireo.\nTsy hiseho eto ny [[Special:UnusedCategories|sokajy tsy miasa]].\nVangio koa ny [[Special:WantedCategories|sokajy ilaina]].",
        "wlheader-enotif": "Alefa ny fampilazana amin'ny mailaka.",
        "wlheader-showupdated": "Aseho '''sorabaventy''' ny pejy niova taorian'ny famangianao azy farany.",
        "wlnote": "Eo ambany dia ahitana ny {{PLURAL:$1|fiovana farany indrindra|ny fiovana ''$1'' farany}} natao tanatin'ny adin'ny {{PLURAL:$2|iray|'''$2'''}}, nanomboka ny $3, $4.",
-       "wlshowlast": "Haneho ny $1 ora farany, ny $2 andro farany na $3",
+       "wlshowlast": "Haneho ny $1 ora farany, ny $2 andro farany na",
        "watchlist-options": "Safidy ny lisitry ny pejy arahana",
        "watching": "Fanarahana...",
        "unwatching": "Fanalana ny fanarahana...",
        "rollback-success": "Fanesorana ny fiovana nataon'i $1 ;\nfiverenana amin'ny fiovana farany nataon'i $2.",
        "sessionfailure-title": "Tsi-fetezaka mikasika ny kaonty idirana",
        "sessionfailure": "Ohatry ny misy olana ny fidirana amin'ny kaontinao ; \nnofoanana ilay tao mba tsy hisy fanodinana fotaom-pidirana (session).\nTsindrio \"Mialoha\" ary vaozy ilay pejy niavianao ary andramo fanindroany.",
-       "protectlogpage": "Tatitr’asa momban’ny fiarovana",
+       "protectlogpage": "Laogim-piarovana",
        "protectlogtext": "Eto ambany ny lisitry ny fiarovana/fanalana hidy ny pejy. \nHo ann'y fanazavana fanampiny, jereo [[Special:ProtectedPages|ny lisitry ny pejy voaaro]] ho an'ny pejy fiarovana amin'izao fotoana izao.",
        "protectedarticle": "voaaro ny pejy \"[[$1]]\"",
        "modifiedarticleprotection": "nanova ny haabo ny fiarovana ho an'ny « [[$1]] »",
        "protect-othertime": "Daty hafa :",
        "protect-othertime-op": "daty hafa",
        "protect-existing-expiry": "Datin'ny fanalana ilay sazy : $2 amin'ny $3",
+       "protect-existing-expiry-infinity": "Daty fitsaharana efa misy: tsiefa",
        "protect-otherreason": "Antony hafa miampy :",
        "protect-otherreason-op": "Antony hafa",
        "protect-dropdown": "*Anton'ny fiarovana\n** Misy be mpanimba\n** Misy be mpametraka spam\n** Misy adim-panontana\n** Misy olona maro no mandalo eo",
        "sp-contributions-newbies-sub": "Ao amin'ny kaonty vaovao",
        "sp-contributions-newbies-title": "Fandraisan'anjara ao amin'ny kaonty vaovao",
        "sp-contributions-blocklog": "Laogim-panakanana",
+       "sp-contributions-suppresslog": "Fandraisan'anjara voafafa",
        "sp-contributions-deleted": "fandraisan'anjara voafafa",
        "sp-contributions-uploads": "fampidiram-pejy",
        "sp-contributions-logs": "laogy",
        "sp-contributions-search": "Hikaroka fandraisan'anjara",
        "sp-contributions-username": "Adiresy IP na anaram-pikambana :",
        "sp-contributions-toponly": "Fiovana izay farany ihany no aseho",
+       "sp-contributions-newonly": "Fiovana izay namorom-pejy ihany no aseho",
        "sp-contributions-submit": "Hikaroka",
        "whatlinkshere": "Pejy mirohy eto",
        "whatlinkshere-title": "Pejy mirohy any amin'i « $1 »",
        "autoblockid": "Fanakanana mandeha ho azy #$1",
        "block": "Hanakana ilay mpikambana",
        "unblock": "Hanala ny sakan'ilay mpikambana",
-       "blockip": "Sakano ny mpikambana",
+       "blockip": "Hanakana an'i {{GENDER:$1|mpikambana}}",
        "blockip-legend": "Sakano ny mpikambana",
        "blockiptext": "Ampiasao ity formulaire ity hisakanana ny fahazoan-dàlana hanoratra\nananan'ny adiresy IP iray na solonanarana iray.\nTokony ho antony fisorohana ny fisomparana ihany, ary mifanaraka amin'ny [[{{MediaWiki:Policy-url}}|fepetra]]\nihany no hanaovana ny fisakanana.\nFenoy etsy ambany ny antony manokana (ohatra, mitanisà pejy nosomparana).",
        "ipaddressorusername": "Adiresy IP na solonanarana",
        "blocklogentry": "voasakana i \"[[$1]]\" mandritra ny $2 ; antony : $3",
        "reblock-logentry": "nanova ny parametatry ny sakan'i [[$1]], ary tapitra amin'ny $2. Ny antony dia ''$3''",
        "blocklogtext": "Eto no ahitana ny tantaran'ny hetsika momba ny fisakanana sy ny famoanana ny fisakanana mpandray anjara.\nTsy aseho eto ny adiresy IP voasakana ho azy.\nJereo ao amin'ny [[Special:BlockList|lisitry ny sakana]] hahitana ny lisitry ny sakana mihatra amin'izao fotoana izao",
-       "unblocklogentry": "voaaisotra ny sakana an'i $1",
+       "unblocklogentry": "afa-tsakana i $1",
        "block-log-flags-anononly": "mpikambana tsy nisoratra anarana ihany",
        "block-log-flags-nocreate": "tsy mahazo manokatra kaonty",
        "block-log-flags-noautoblock": "fanakanana ny IP nesorina",
        "import": "Hampidi-pejy",
        "importinterwiki": "fampidirana interwiki",
        "import-interwiki-text": "Safidio wiki loharano iray ary ny lohatenin'ilay pejy ho ampidirina eto.\nHo voatazona ao amin'ny tantara ny datin'ny santiôna sy ny anaran'ny mpandray anjara.\nHo voasoratra ao amin'ny [[Special:Log/import|laogim-pampidirana]] ny tao rehetra mikasika ny fampidirana pejy interwiki",
-       "import-interwiki-source": "Wiki sy pejy fango :",
+       "import-interwiki-sourcewiki": "Wiki niaviana:",
+       "import-interwiki-sourcepage": "Pejy niavana :",
        "import-interwiki-history": "Handika ny santiônan'ny tantaran'ity pejy ity",
        "import-interwiki-templates": "Ataovy ao ny endrika rehetra",
        "import-interwiki-submit": "Hampiditra",
        "tooltip-search": "Karoka amin'ny {{SITENAME}}",
        "tooltip-search-go": "Mandana any amina pejy mitondra n'io anarana io ra misy.",
        "tooltip-search-fulltext": "Tadiavo ny pejy misy an'io lahatsoratra io.",
-       "tooltip-p-logo": "Renpejy",
+       "tooltip-p-logo": "Hitsidika renipejy",
        "tooltip-n-mainpage": "Jereo ny renipejy",
        "tooltip-n-mainpage-description": "hitsidika ny renipejy",
        "tooltip-n-portal": "Ny mombamomba ny tetikasa",
-       "tooltip-n-currentevents": "Hidady ny rohy momban'ny vaovao ankehitriny",
+       "tooltip-n-currentevents": "Hikaroka torohay fototra mikasika ny vaovao",
        "tooltip-n-recentchanges": "Lisitra ny fanovàna farany efa vita eto amin'ity wiki ity",
        "tooltip-n-randompage": "Hjery pejy aki-sendra",
        "tooltip-n-help": "fanoroana",
        "tooltip-ca-nstab-user": "Jereo ny pejin'ny mpikambana",
        "tooltip-ca-nstab-media": "Hijery ny pejin'ny Media",
        "tooltip-ca-nstab-special": "Pejy manokana ity pejy ity, ny rindrankajy wiki no mitantana ity pejy ity",
-       "tooltip-ca-nstab-project": "Jereo ny pejy momban'ny tetikasa",
+       "tooltip-ca-nstab-project": "Hijery ny pejin-tetikasa",
        "tooltip-ca-nstab-image": "jereo ny pejy an'io rakitra io",
        "tooltip-ca-nstab-mediawiki": "Hijery ny hafatra ampiasain'ny rindrankajy",
        "tooltip-ca-nstab-template": "Jereo ny endrika  (môdely)",
        "tooltip-ca-nstab-help": "Hijery ny pejy fanoroana",
-       "tooltip-ca-nstab-category": "Hijery ny pejy momban'ilay sokajy",
+       "tooltip-ca-nstab-category": "Hijery ny pejin'ilay sokajy",
        "tooltip-minoredit": "Mariho ho fanovana madinika ihany",
        "tooltip-save": "Tehirizo ny fanovana",
        "tooltip-preview": "Topazy maso ny fanovana nataonao, iangaviana ianao mba hijery tsipalotra mialoha ny fitahirizana ny fanovana!",
        "pageinfo-robot-policy": "Fanondroana ataon'ny rôbô",
        "pageinfo-robot-index": "Azo atao",
        "pageinfo-robot-noindex": "Tsy azo tondroina",
-       "pageinfo-views": "Isan'ny jery",
        "pageinfo-watchers": "Isan'ny mpandray anjara manaraka",
        "pageinfo-few-watchers": "Mpanaraka latsaky ny $1{{PLURAL:}}",
        "pageinfo-redirects-name": "Fihodinana manketo amin'ity pejy ity",
        "exif-urgency-normal": "Tsotra ($1)",
        "exif-urgency-low": "Ambany ($1)",
        "exif-urgency-high": "Ambony ($1)",
-       "watchlistall2": "rehetra",
        "namespacesall": "rehetra",
        "monthsall": "rehetra",
        "confirmemail": "Fanamarinana adiresy imailaka.",
        "logentry-rights-rights-legacy": "{{GENDER:$2}}$1 nanova ny vonodrom-pikambana isian'i $3",
        "logentry-rights-autopromote": "{{GENDER:$2}}Lasa $5 ho azy i $1 izay $4 taloha",
        "rightsnone": "(tsy misy)",
+       "revdelete-summary": "ambangovangon'ny fanovàna",
        "feedback-subject": "Lohahevitra:",
        "feedback-message": "Hafatra:",
        "feedback-cancel": "Foanana",
index c1e5e2a..3f38f59 100644 (file)
        "searchprofile-everything-tooltip": "Чыла лаштык-влакыште кычалаш (каҥашымаш лаштык-влакыштат)",
        "searchprofile-advanced-tooltip": "Искать в заданных пространствах имён",
        "search-result-size": "$1 ({{PLURAL:$2|1=$2 мут|$2 мут}})",
-       "search-result-category-size": "$1 {{PLURAL:$1|вхождение|вхождений|вхождения}} ($2 {{PLURAL:$2|подкатегория|подкатегорий|подкатегории}}, $3 {{PLURAL:$3|файл|файлов|файла}}).",
+       "search-result-category-size": "$1 {{PLURAL:$1|вхождение|вхождения|вхождений}} ($2 {{PLURAL:$2|подкатегория|подкатегории|подкатегорий}}, $3 {{PLURAL:$3|файл|файла|файлов}}).",
        "search-redirect": "($1 вес вере колтымаш)",
        "search-section": "(ужаш $1)",
        "search-suggest": "Але те $1 возынеда ыле",
        "search-interwiki-more": "(эше)",
        "searchrelated": "кылдалтше",
        "searchall": "чыла",
-       "showingresultsheader": "'''$4'''лан {{PLURAL:$5|1='''$3''' гыч '''$1''' результат|'''$3''' гыч '''$1 - $2''' результат}}",
        "search-nonefound": "Тыйын йодышет почеш нимо муалтын огыл",
        "powersearch-legend": "Сайынрак кычалаш",
        "powersearch-ns": "Кычалаш тиде лӱм-влакын кумдыкышт-влакыште:",
        "statistics": "Иктешлымаш",
        "statistics-header-pages": "Лаштык коклам иктешлымаш",
        "statistics-header-edits": "Тӧрлатымаш коклам иктешлымаш",
-       "statistics-header-views": "Ончымаш коклам иктешлымаш",
        "statistics-header-users": "Пайдаланыше коклам иктешлымаш",
        "statistics-header-hooks": "Тӱрлӧ коклам иктешлымаш",
        "statistics-articles": "Возымо лаштык-влак",
        "statistics-files": "Пуртымо файл-влак",
        "statistics-edits": "{{SITENAME}} лаштыкым чылажге мыняр гана тӧрлатыме",
        "statistics-edits-average": "Ик лаштыкым покшел тӧрлымӧ чот",
-       "statistics-views-total": "Чылажге ончымо",
-       "statistics-views-peredit": "Ик тӧрлатымашлан ончымо",
        "statistics-users": "Регистрацийым эртыше [[Special:ListUsers|пайдаланыше-влак]]",
        "statistics-users-active": "Чӱчкыдын пайдаланыше-влак",
        "statistics-users-active-desc": "Пытартыш {{PLURAL:$1|1=кечыште|$1 кечыште}} иктаж-мом ыштыше пайдаланыше-влак",
-       "statistics-mostpopular": "Эн чӱчкыдын ончымо лаштык-влак",
        "brokenredirects": "Пудыртымо вес вере колтымаш-влак",
        "brokenredirects-edit": "тӧрлаташ",
        "brokenredirects-delete": "шӧраш",
        "pager-older-n": "{{PLURAL:$1|1=ончычсо|ончычсо}}",
        "booksources": "Негызым пыштыше кнага-влак",
        "booksources-search-legend": "Негызым пыштыше книгам кычалаш",
-       "booksources-go": "Муаш",
        "specialloguserlabel": "Пайдаланыше:",
        "log": "Журнал-влак",
        "allpages": "Чыла лаштык-влак",
        "unwatch": "Эскерыман огыл",
        "unwatchthispage": "Эскерымым чарнаш",
        "watchlist-details": "Эскерымаш лӱмерыштет $1 {{PLURAL:$1|лаштык}}, каҥашымаш лаштык-влакым шотлыде",
-       "wlshowlast": "Пытартыш $1 шагат $2 кечылан $3 ончыкташ",
+       "wlshowlast": "Пытартыш $1 шагат $2 кечылан  ончыкташ",
        "watchlist-options": "Эскерыме лӱмерын келыштарымаш",
        "watching": "Эскерымаш лӱмерыш ешарымаш...",
        "unwatching": "Эскерымаш лӱмер гыч шӧрымаш...",
        "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",
-       "watchlistall2": "чыла",
        "namespacesall": "чыла",
        "monthsall": "чыла",
        "confirm_purge_button": "Йӧра",
        "specialpages-group-pagetools": "Лаштык ӱзгар-влак",
        "specialpages-group-redirects": "Вес вере колтышо спецлаштык-влак",
        "external_image_whitelist": " #Оставьте эту строчку такой, как она есть<pre>\n#Разместите здесь фрагменты регулярных выражений (ту часть, что находится между //)\n#они будут соотнесены с URL внешних изображений.\n#Подходящие будут показаны как изображения, остальные будут показаны как ссылки на изображения.\n#Строки, начинающиеся с # считаются комментариями.\n#Строки не чувствительны к регистру\n\n#Размещайте фрагменты регулярных выражений над этой строчкой. Оставьте эту строчку такой, как она есть.</pre>",
+       "revdelete-summary": "тӧрлатымаш-влакым возен ончыктымаш",
        "expand_templates_ok": "Йӧра",
        "expand_templates_preview": "Ончылгоч ончымаш"
 }
index 443cd4f..ceb12da 100644 (file)
@@ -1,85 +1,85 @@
 {
-    "@metadata": {
-        "authors": [
-            "Iketsi",
-            "Kiharoa",
-            "Sonia"
-        ]
-    },
-    "sunday": "Rātapu",
-    "monday": "Rāhina",
-    "tuesday": "Rātū",
-    "wednesday": "Rāapa",
-    "thursday": "Rāpare",
-    "friday": "Rāmere",
-    "saturday": "Rāhoroi",
-    "january": "Kohi-tātea",
-    "february": "Hui-tanguru",
-    "march": "Poutū-te-rangi",
-    "april": "Paenga-whāwhā",
-    "may_long": "Haratua",
-    "june": "Pipiri",
-    "july": "Hōngongoi",
-    "august": "Here-turi-kōkā",
-    "september": "Mahuru",
-    "october": "Whiringa-ā-nuku",
-    "november": "Whiringa-ā-rangi",
-    "december": "Hakihea",
-    "cancel": "Whakakore",
-    "mytalk": "Karere mōku",
-    "navigation": "Huarahi",
-    "vector-view-view": "Rīti",
-    "help": "Whakamārama",
-    "search": "Rapua",
-    "go": "Haere",
-    "history": "Kōrero Nehe",
-    "history_short": "Tuhinga/kaituhi",
-    "printableversion": "Tāia",
-    "permalink": "Hononga toitū",
-    "edit": "Whakatika",
-    "delete": "tangohia",
-    "protect": "Whakangungua",
-    "talkpagelinktext": "Kōrerohia",
-    "talk": "Kōrerorero",
-    "toolbox": "Pouaka utauta",
-    "aboutsite": "Mo {{SITENAME}}",
-    "currentevents": "Kōrero",
-    "currentevents-url": "Project:Kōrero",
-    "mainpage": "Hau Kāinga",
-    "mainpage-description": "Hau Kāinga",
-    "portal": "Tomokanga hapori",
-    "portal-url": "Project:Tomokanga hapori",
-    "privacy": "Tikanga tūmataiti",
-    "privacypage": "Project:Tikanga tūmataiti",
-    "toc": "Rārangi kōrero",
-    "showtoc": "whakakite",
-    "hidetoc": "hunaia",
-    "nstab-main": "tuhi pānui",
-    "nstab-template": "papa tauira",
-    "nstab-help": "Āwhina",
-    "nstab-category": "Wāhanga",
-    "userlogout": "Whakarere",
-    "savearticle": "Tiaki",
-    "showdiff": "Tiro rerekētanga",
-    "preferences": "Kōwhiringa",
-    "recentchanges": "Rerekētanga hōu",
-    "hide": "Hunaia",
-    "show": "Whakaaturia",
-    "recentchangeslinked": "Rerekētanga pū tahi",
-    "recentchangeslinked-feed": "Rerekētanga pū tahi",
-    "recentchangeslinked-toolbox": "Rerekētanga pū tahi",
-    "upload": "Tuku atu",
-    "randompage": "Tipihaere",
-    "move": "Nekehia",
-    "allpages": "Ngā whārangi katoa",
-    "allpagessubmit": "Haere",
-    "watchlist": "Rārangi mātaki",
-    "mywatchlist": "Rārangi mātaki",
-    "watch": "Mātaki",
-    "unwatch": "kāti te mātaki",
-    "contributions": "Ngā mahi a tēnei mema",
-    "mycontris": "āku mahi",
-    "whatlinkshere": "Ngā hononga mai",
-    "allmessages": "Pānui pūnaha",
-    "specialpages": "Whārangi motuhake"
+       "@metadata": {
+               "authors": [
+                       "Iketsi",
+                       "Kiharoa",
+                       "Sonia",
+                       "Piwaiwaka"
+               ]
+       },
+       "sunday": "Rātapu",
+       "monday": "Rāhina",
+       "tuesday": "Rātū",
+       "wednesday": "Rāapa",
+       "thursday": "Rāpare",
+       "friday": "Rāmere",
+       "saturday": "Rāhoroi",
+       "january": "Kohi-tātea",
+       "february": "Hui-tanguru",
+       "march": "Poutū-te-rangi",
+       "april": "Paenga-whāwhā",
+       "may_long": "Haratua",
+       "june": "Pipiri",
+       "july": "Hōngongoi",
+       "august": "Here-turi-kōkā",
+       "september": "Mahuru",
+       "october": "Whiringa-ā-nuku",
+       "november": "Whiringa-ā-rangi",
+       "december": "Hakihea",
+       "cancel": "Whakakore",
+       "mytalk": "Karere mōku",
+       "navigation": "Huarahi",
+       "help": "Whakamārama",
+       "search": "Rapua",
+       "go": "Haere",
+       "history": "Kōrero nehe",
+       "history_short": "Tuhinga/kaituhi",
+       "printableversion": "Tāia",
+       "permalink": "Hononga toitū",
+       "edit": "Whakatika",
+       "delete": "tangohia",
+       "protect": "Whakangungua",
+       "talkpagelinktext": "Kōrerohia",
+       "talk": "Kōrerorero",
+       "toolbox": "Pouaka utauta",
+       "aboutsite": "Mo {{SITENAME}}",
+       "currentevents": "Kawepūrongo",
+       "currentevents-url": "Project:Kōrero",
+       "mainpage": "Hau Kāinga",
+       "mainpage-description": "Hau Kāinga",
+       "portal": "Tomokanga hapori",
+       "portal-url": "Project:Tomokanga hapori",
+       "privacy": "Tikanga tūmataiti",
+       "privacypage": "Project:Tikanga tūmataiti",
+       "toc": "Rārangi kōrero",
+       "showtoc": "whakakite",
+       "hidetoc": "hunaia",
+       "nstab-main": "tuhi pānui",
+       "nstab-template": "papa tauira",
+       "nstab-help": "Āwhina",
+       "nstab-category": "Wāhanga",
+       "userlogout": "Whakarere",
+       "savearticle": "Tiaki",
+       "showdiff": "Tiro rerekētanga",
+       "preferences": "Kōwhiringa",
+       "recentchanges": "Huringa hou",
+       "hide": "Hunaia",
+       "show": "Whakaaturia",
+       "recentchangeslinked": "Huringa pūtahi",
+       "recentchangeslinked-feed": "Rerekētanga pū tahi",
+       "recentchangeslinked-toolbox": "Huringa pūtahi - pouaka utauta",
+       "upload": "Tuku atu",
+       "randompage": "Tipihaere",
+       "move": "Nekehia",
+       "allpages": "Ngā whārangi katoa",
+       "allpagessubmit": "Haere",
+       "watchlist": "Rārangi mātaki",
+       "mywatchlist": "Rārangi mātaki",
+       "watch": "Mātaki",
+       "unwatch": "kāti te mātaki",
+       "contributions": "Ngā mahi a tēnei mema",
+       "mycontris": "āku mahi",
+       "whatlinkshere": "Ngā hononga mai",
+       "allmessages": "Pānui pūnaha",
+       "specialpages": "Whārangi motuhake"
 }
index 2af3d81..5811a61 100644 (file)
        "passwordreset-emailsent-capture": "Surel parubahan kato sandi alah dikirim, nan nampak di bawah ko.",
        "passwordreset-emailerror-capture": "Surel parubahan kato sandi nan ditampilan di bawah, alah dibuek, tapi pangirimannyo ka {{GENDER:$2|pangguno}} gagal: $1",
        "changeemail": "Tuka alamaik surel.",
-       "changeemail-header": "Ganti alamaik surel.",
        "changeemail-text": "Isi formulir ko untuak mangganti alamaik surel. Sanak musti mamasuakan kato sandi untuak mayakinkan parubahan.",
        "changeemail-no-info": "Sanak harus masuak log untuak mangakses laman ko.",
        "changeemail-oldemail": "Alamat surel kini:",
        "changeemail-none": "(indak ado)",
        "changeemail-password": "Sandi {{SITENAME}} Sanak:",
        "changeemail-submit": "Ganti surel.",
-       "changeemail-cancel": "Batalkan",
        "bold_sample": "Teks taba",
        "bold_tip": "Teks taba",
        "italic_sample": "Teks miriang",
        "suppressionlog": "Log pambanaman",
        "mergehistory-reason": "Alasan:",
        "mergelog": "Log panggabuangan",
-       "pagemerge-logentry": "manggabuangan [[$1]] ka [[$2]] (revisi sampai $3)",
        "revertmerge": "Batal gabuang",
        "mergelogpagetext": "Di bawah ko daftar panggabuangan riwayaik laman ka laman nan lain.",
        "history-title": "Riwayaik revisi dari \"$1\"",
        "searchrelated": "bakaitan",
        "searchall": "sado",
        "showingresults": "Di bawah ko dikaluaan sampai {{PLURAL:$1|'''$1''' hasil}}, dimulai dari #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Hasil '''$1 - $2''' dari '''$3'''}} untuak '''$4'''",
        "search-nonefound": "Indak ado hasil nan cocok sasuai jo parmintaan",
        "powersearch-legend": "Pencarian lanjut",
        "powersearch-ns": "Mancari di ruangnamo:",
        "statistics": "Statistik",
        "statistics-header-pages": "Statistik laman",
        "statistics-header-edits": "Statistik suntiangan",
-       "statistics-header-views": "Statistik tampilan",
        "statistics-header-users": "Statistik pangguno",
        "statistics-header-hooks": "Statistik lainnyo",
        "statistics-articles": "Laman konten",
        "statistics-files": "Berkas nan lah dimuek",
        "statistics-edits": "Jumlah suntiangan sangkek {{SITENAME}} ko dimulai",
        "statistics-edits-average": "Rato-rato suntiangan per-laman",
-       "statistics-views-total": "Jumlah tampilan laman",
-       "statistics-views-total-desc": "Tampilan ka laman nan indak ado jo laman khusus nan indak ikuik",
-       "statistics-views-peredit": "Tampilan per-suntiangan",
        "statistics-users": "Jumlah [[Special:ListUsers|pangguno tadaftar]]",
        "statistics-users-active": "Pangguno aktip",
        "statistics-users-active-desc": "Pangguno nan aktip dalam {{PLURAL:$1|$1 ari}} tarakhia.",
-       "statistics-mostpopular": "Laman nan paliang banyak ditampilkan",
        "pageswithprop": "Laman jo laman properti",
        "pageswithprop-legend": "Laman jo laman properti",
        "pageswithprop-text": "Laman ko barisi daftar laman nan manggunoan properti laman tatantu.",
        "pager-older-n": "{{PLURAL:$1|$1 labiah lamo}}",
        "booksources": "Sumber buku",
        "booksources-search-legend": "Cari di sumber buku",
-       "booksources-go": "Tuju",
        "specialloguserlabel": "Pangguno:",
        "speciallogtitlelabel": "Target (judul atau pangguno):",
        "log": "Log",
        "watchlist-details": "{{PLURAL:$1|$1 laman}} dalam daftar pantau Sanak, indak tamasuak laman rundiangnyo.",
        "wlheader-showupdated": "Laman nan alah barubah sajak kunjuangan tarakhia Sanak ditunjuakan jo '''hurup taba'''",
        "wlnote": "Di bawah ko ado $1 {{PLURAL:$1|parubahan}} dalam {{PLURAL:$2|'''$2''' jam}} iko, sampai tanggal $3, pukua $4.",
-       "wlshowlast": "Tunjuakan $1 jam parubahan dalam $2 hari tarakhia $3",
+       "wlshowlast": "Tunjuakan $1 jam parubahan dalam $2 hari tarakhia",
        "watchlist-options": "Piliahan daftar pantau",
        "watching": "Mamantau...",
        "unwatching": "indak dipantau le...",
        "pageinfo-robot-policy": "Statuih masin pancari",
        "pageinfo-robot-index": "Dapek di indeks",
        "pageinfo-robot-noindex": "Indak dapek di indeks",
-       "pageinfo-views": "Bara kali dibaco",
        "pageinfo-watchers": "Bara urang nan mambaco",
        "pageinfo-few-watchers": "Kurang dari $1 {{PLURAL:$1|pambaco}}",
        "pageinfo-redirects-name": "Pangaliahan ka laman ko",
        "exif-pixelxdimension": "Tinggi gamba",
        "exif-usercomment": "Komen pangguno",
        "exif-relatedsoundfile": "Berkas audio nan bahubuangan",
-       "watchlistall2": "kasadonyo",
        "namespacesall": "sadonyo",
        "monthsall": "sadonyo",
        "table_pager_limit_label": "Item per laman:",
index dd92c70..a931417 100644 (file)
        "view": "Преглед",
        "view-foreign": "Погл. на $1",
        "edit": "Уреди",
-       "edit-local": "УÑ\80еди Ð»Ð¾ÐºÐ°Ð»ен опис",
+       "edit-local": "УÑ\80еди Ð¼ÐµÑ\81ен опис",
        "create": "Создај",
-       "create-local": "Ð\94одаÑ\98 Ð»Ð¾ÐºÐ°Ð»ен опис",
+       "create-local": "Ð\94одаÑ\98 Ð¼ÐµÑ\81ен опис",
        "editthispage": "Уреди ја страницава",
-       "create-this-page": "Создај ја оваа страница",
+       "create-this-page": "Создај ја страницава",
        "delete": "Избриши",
-       "deletethispage": "Избриши ја оваа страница",
-       "undeletethispage": "обнови ја оваа страница",
+       "deletethispage": "Избриши ја страницава",
+       "undeletethispage": "обнови ја страницава",
        "undelete_short": "Врати {{PLURAL:$1|едно уредување|$1 уредувања}}",
        "viewdeleted_short": "Преглед на {{PLURAL:$1|едно избришано уредување|$1 избришани уредувања}}",
        "protect": "Заштити",
        "protect_change": "промена",
-       "protectthispage": "Заштити ја оваа страница",
+       "protectthispage": "Заштити ја страницава",
        "unprotect": "Измени заштита",
        "unprotectthispage": "Измена на заштитата на страницава",
        "newpage": "Нова страница",
        "talkpage": "Разговор",
        "talkpagelinktext": "Разговор",
-       "specialpage": "СпеÑ\86иÑ\98ална страница",
+       "specialpage": "СлÑ\83жбена страница",
        "personaltools": "Лични алатки",
        "articlepage": "Преглед на содржината",
        "talk": "Разговор",
        "otherlanguages": "На други јазици",
        "redirectedfrom": "(Пренасочено од $1)",
        "redirectpagesub": "Пренасочувачка страница",
+       "redirectto": "Пренасочи кон:",
        "lastmodifiedat": "Последната промена на страницава е извршена на $1 г. во $2 ч.",
        "viewcount": "Оваа страница била посетена {{PLURAL:$1|еднаш|$1 пати}}.",
        "protectedpage": "Заштитена страница",
        "nstab-main": "Страница",
        "nstab-user": "Корисник",
        "nstab-media": "Мултимедијална податотека",
-       "nstab-special": "СпеÑ\86иÑ\98ална страница",
+       "nstab-special": "СлÑ\83жбена страница",
        "nstab-project": "Проектна страница",
        "nstab-image": "Податотека",
        "nstab-mediawiki": "Порака",
        "nstab-category": "Категорија",
        "nosuchaction": "Нема такво дејство",
        "nosuchactiontext": "Дејството укажано во URL-адресата е погрешно.\nМожеби имате грешка во пишувањето на адресата, или пак имате проследено погрешна врска.\nОва може да се должи и на грешка во програмската опрема на {{SITENAME}}.",
-       "nosuchspecialpage": "Ð\9dе Ð¿Ð¾Ñ\81Ñ\82ои Ñ\82аква Ñ\81пеÑ\86иÑ\98ална страница",
-       "nospecialpagetext": "<strong>Ð\9fобаÑ\80авÑ\82е Ð½ÐµÐ¿Ð¾Ñ\81Ñ\82оеÑ\87ка Ñ\81пеÑ\86иÑ\98ална Ñ\81Ñ\82Ñ\80аниÑ\86а.</strong>\n\nСпиÑ\81окоÑ\82 Ð½Ð° Ð¿Ð¾Ñ\81Ñ\82оеÑ\87ки Ñ\81пеÑ\86иÑ\98ални страници: [[Special:SpecialPages|{{int:specialpages}}]].",
+       "nosuchspecialpage": "Ð\9dе Ð¿Ð¾Ñ\81Ñ\82ои Ñ\82аква Ñ\81лÑ\83жбена страница",
+       "nospecialpagetext": "<strong>Ð\9fобаÑ\80авÑ\82е Ð½ÐµÐ¿Ð¾Ñ\81Ñ\82оеÑ\87ка Ñ\81лÑ\83жбена Ñ\81Ñ\82Ñ\80аниÑ\86а.</strong>\n\nСпиÑ\81окоÑ\82 Ð½Ð° Ð¿Ð¾Ñ\81Ñ\82оеÑ\87ки Ñ\81лÑ\83жбени страници: [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Грешка",
        "databaseerror": "Грешка во базата",
        "databaseerror-text": "Се појави грешка во барањето од базата.\nОва може да значи програмска грешка (бубачка).",
        "protectedpagetext": "Оваа страница е заклучена за уредувања и други дејства.",
        "viewsourcetext": "Можете да го погледнете и копирате кодот на оваа страница:",
        "viewyourtext": "Можете да го погледнете и копирате кодот на '''вашите уредувања''' на оваа страница:",
-       "protectedinterface": "Оваа страница содржи текст од посредникот на програмот на ова вики и е превентивно заштитена поради можна злоупотреба.\nЗа да додавате или менувате преводи на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?uselang=mk translatewiki.net] - проектот за локализација на МедијаВики.",
-       "editinginterface": "'''Предупредување:''' Уредувате страница која е дел од корисничкиот посредник на програмот МедијаВики.\nПромените на оваа страница ќе предизвикаат промени во корисничкиот посредник кај другите корисници на ова вики.\nЗа да додадете или измените превод на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?setlang=mk translatewiki.net] - проектот за локализација на МедијаВики.",
+       "protectedinterface": "Оваа страница содржи текст од посредникот на програмот на ова вики и е превентивно заштитена поради можна злоупотреба.\nЗа да додавате или менувате преводи на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?uselang=mk translatewiki.net] — проектот за преведување на МедијаВики.",
+       "editinginterface": "<strong>Предупредување:</strong> Уредувате страница која е дел од корисничкиот посредник на програмот МедијаВики.\nПромените на оваа страница ќе предизвикаат промени во корисничкиот посредник кај другите корисници на ова вики.",
+       "translateinterface": "За да додадете или измените превод на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?setlang=mk translatewiki.net] — проектот за преведување на МедијаВики.",
        "cascadeprotected": "Оваа страница е заштитена од уредувања бидејќи е вклучена во {{PLURAL:$1|следнава страница, којашто е заштитена|следниве страници, коишто се заштитени}} со можноста „каскадна заштита“:\n$2",
        "namespaceprotected": "Немате дозвола за уредување страници во именскиот простор '''$1'''.",
        "customcssprotected": "Немате дозвола да ја менувате оваа страница со CSS бидејќи содржи туѓи лични нагодувања.",
        "mycustomjsprotected": "Немате дозвола да ја уредувате оваа страница со JavaScript.",
        "myprivateinfoprotected": "Немате дозвола да ги уредувате вашите лични информации.",
        "mypreferencesprotected": "Немате дозвола да ги уредувате вашите нагодувања.",
-       "ns-specialprotected": "СпеÑ\86иÑ\98ални страници не може да се уредуваат.",
+       "ns-specialprotected": "СлÑ\83жбени страници не може да се уредуваат.",
        "titleprotected": "Овој наслов од страна на [[User:$1|$1]] е заштитен и не може да се создаде.\nПричината за тоа е: ''$2''.",
        "filereadonlyerror": "Не можам да ја изменам податотеката „$1“ бидејќи складиштето „$2“ е во незаписен режим.\n\t\nАдминистраторот што ја заклучи го понуди следново образложение: „''$3''“.",
        "invalidtitle-knownnamespace": "Неважечки наслов со именски простор „$2“ и текст „$3“",
        "password-change-forbidden": "Не можете да ја менувате лозинката на ова вики.",
        "externaldberror": "Настана грешка при надворешното најавување на базата или пак немате дозвола да ја подновите вашата надворешна сметка.",
        "login": "Најава",
-       "nav-login-createaccount": "Најава / регистрација",
-       "userlogin": "Најава / регистрација",
+       "nav-login-createaccount": "Најава / направи сметка",
+       "userlogin": "Најава / направи сметка",
        "userloginnocreate": "Најава",
        "logout": "Одјава",
        "userlogout": "Одјава",
        "createaccount-text": "Некој направил сметка со вашата е-поштенска адреса на {{SITENAME}} ($4) со име „$2“ и  лозинка „$3“.\nБи требало сега да се пријавите и да ја промените вашата лозинка.\n\nМожете да ја занемарите оваа порака ако сметката била направена по грешка.",
        "login-throttled": "Имате премногу обиди за најава за кратко време.\nПочекајте $1 пред да се обидете повторно.",
        "login-abort-generic": "Најавата е неуспешна - Прекинато",
+       "login-migrated-generic": "Вашата сметка е пренесена и корисничкото име веќе не постои на ова вики.",
        "loginlanguagelabel": "Јазик: $1",
        "suspicious-userlogout": "Вашето барање за одјава е одбиено бидејќи се чини дека е испратено од расипан прелистувач или кеширачки застапник (proxy).",
        "createacct-another-realname-tip": "Вистинското име е незадолжително.\nДоколку изберете да го внесете, тоа може да се искористи за оддавање на заслуги за Вашата работа.",
        "passwordreset-emailsent-capture": "Испратено е писмо за измена на лозинката (прикажано подолу).",
        "passwordreset-emailerror-capture": "Создадено е писмо за измена на лозинката (прикажано подолу), но не успеав да го испратам на {{GENDER:$2|корисникот}}: $1",
        "changeemail": "Смени е-пошта",
-       "changeemail-header": "Промена на е-пошта за сметката",
        "changeemail-text": "Пополнете го образецов за да ја смените е-поштата. За да ја потврдите промената, ќе треба да ја внесете лозинката.",
        "changeemail-no-info": "Мора да бидете најавени ако сакате да имате директен пристап до оваа страница.",
        "changeemail-oldemail": "Тековна е-пошта:",
        "changeemail-none": "(нема)",
        "changeemail-password": "Вашата лозинка на {{SITENAME}}:",
        "changeemail-submit": "Смени е-пошта",
-       "changeemail-cancel": "Откажи",
        "changeemail-throttled": "Имате премногу обиди за најава за кратко време.\nПочекајте $1 пред да се обидете повторно.",
        "resettokens": "Врати одново шифри",
        "resettokens-text": "Можете шифрите да ги вратите одново што овозможува пристап до извесни лични податоци што се однесуваат на вашата овдешна сметка.\n\nОва треба да се направи ако по грешка сте споделиле нешто со некого или ако сметката ви е изложена на опасност.",
        "showpreview": "Преглед",
        "showdiff": "Прикажи промени",
        "blankarticle": "<strong>Предупредување:</strong> Страницата што ја создавате е празна.\nАко повторно стиснете на „{{int:savearticle}}“, страницата ќе биде создадена без никаква содржина во неа.",
-       "anoneditwarning": "'''Предупредување:''' Не сте најавени.\nВашата IP-адреса ќе биде заведена во историјата на уредување на страницата.",
+       "anoneditwarning": "<strong>Предупредување:</strong> Не сте најавени. Вашата IP-адреса ќе биде јавно видлива ако уредувате. Ако <strong>[$1 се најавите]</strong> или <strong>[$2 направите сметка]</strong>, тогаш уредувањата ќе се припишуваат на вашето корисничко име, покрај другите погодности.",
        "anonpreviewwarning": "''Не сте најавени. Ако ја зачувате, Вашата IP-адреса ќе биде заведена во историјата на уредување на страницата.''",
        "missingsummary": "'''Потсетник:''' Не внесовте опис на измените. Ако притиснете Зачувај повторно, вашите измени ќе се зачуваат без опис.",
        "missingcommenttext": "Ве молиме внесете коментар подолу.",
        "content-model-text": "прост текст",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "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": "Предупредување: Оваа страница користи премногу повикувања на parser функции.\n\nТреба да има помалку од $2 {{PLURAL:$2|повикување|повикувања}} а сега има {{PLURAL:$1|$1 повикување|$1 повикувања}}.",
        "expensive-parserfunction-category": "Страници со премногу повикувања на парсер функции",
        "post-expand-template-inclusion-warning": "'''Предупредување:''' Големината на вклучените шаблони е преголема.\nНекои шаблони нема да бидат вклучени.",
        "mergehistory-same-destination": "Изворната и целната страница треба да се различни",
        "mergehistory-reason": "Причина:",
        "mergelog": "Дневник на спојувања на страници",
-       "pagemerge-logentry": "споено [[$1]] во [[$2]] (преработки до $3)",
        "revertmerge": "Одвојување",
        "mergelogpagetext": "Следи список на скорешни спојувања на истории на страници.",
        "history-title": "$1: Историја на измените",
        "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": "Подолу {{PLURAL:$1|е прикажан '''1''' резултат|се прикажани '''$1''' резултати}} почнувајќи од бр. '''$2'''.",
        "showingresultsinrange": "Долу {{PLURAL:$1|е прикажан до <strong>еден</strong> резултат|се прикажани до <strong>$1</strong> резултати}} во опсег од <strong>$2</strong> до <strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Резултат '''$1''' од '''$3'''|Резултати '''$1 - $2''' од '''$3'''}} за '''$4'''",
+       "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": "Запамти го изборот за идни пребарувања",
+       "powersearch-remember": "Запoмни го изборот за идни пребарувања",
        "search-external": "Надворешно пребарување",
        "searchdisabled": "{{SITENAME}} пребарувањето е оневозможено.\nВо меѓувреме, можете да пребарувате преку Google.\nДа напоменеме дека нивното индексирање на {{SITENAME}} содржините може да биде застарено.",
        "search-error": "Се појави грешка при пребарувањето: $1",
        "prefs-help-watchlist-token2": "Ова е тајна шифра за вашиот канализиран список на набљудувања.\nСекој што ја знае ќе може да ја чита, па затоа ви препорачуваме да не ја кажувате никому.\n[[Special:ResetTokens|Стиснете тука ако треба да зададете нова]].",
        "savedprefs": "Вашите нагодувања се зачувани.",
        "timezonelegend": "Часовен појас:",
-       "localtime": "Ð\9bокално време:",
+       "localtime": "Ð\9cеÑ\81но време:",
        "timezoneuseserverdefault": "Од викито ($1)",
        "timezoneuseoffset": "Друго (посочете отстапување)",
        "servertime": "Време на опслужувачот:",
        "gender-female": "Таа уредува викистраници",
        "prefs-help-gender": "Оваа поставка е незадолжителна.\nПрограмот го користи посочениот род за да ве опишува согласно вашиот пол.\nИнформацијата ќе биде јавна.",
        "email": "Е-пошта",
-       "prefs-help-realname": "'''Вистинското име''' е незадолжително.\nДоколку изберете да го внесете, тоа може да се искористи за оддавање на заслуги за Вашата работа.",
+       "prefs-help-realname": "Вистинското име е незадолжително.\nДоколку изберете да го внесете, тоа може да се искористи за оддавање на заслуги за Вашата работа.",
        "prefs-help-email": "Е-поштата е незадолжителна, но ќе ви треба за добивање на нова лозинка ако си ја заборавите постоечката.",
        "prefs-help-email-others": "Можете да изберете другите да ве контактираат преку вашата корисничка страница без да го откриете вашиот идентитет.",
        "prefs-help-email-required": "Е-поштенска адреса е задолжително да се наведе.",
        "prefs-info": "Основни информации",
-       "prefs-i18n": "Ð\98нÑ\82еÑ\80наÑ\86ионализаÑ\86иÑ\98а",
+       "prefs-i18n": "Ð\88азик",
        "prefs-signature": "Потпис",
        "prefs-dateformat": "Формат на датумот",
        "prefs-timeoffset": "Временско отстапување",
        "prefs-tokenwatchlist": "Шифра",
        "prefs-diffs": "Разлики",
        "prefs-help-prefershttps": "Поставката ќе се примени следниот пат кога ќе се најавите.",
+       "prefswarning-warning": "Направивте промени во нагодувањата, но не ги зачувавте.\nИзмената нема да се изврши ако ја напуштите страницава без да стиснете на „$1“.",
        "prefs-tabs-navigation-hint": "Совет: Можете да ги користите стрелките на тастатурата за да преоѓате од едно на друго јазиче во списокот на јазичиња.",
        "email-address-validity-valid": "Исправно",
        "email-address-validity-invalid": "Се бара исправна адреса!",
        "right-upload": "Подигни податотеки",
        "right-reupload": "Заменување на постоечки податотеки",
        "right-reupload-own": "Преснимување на постоечка податотека подигната од вас",
-       "right-reupload-shared": "Ð\9fÑ\80езапиÑ\81 Ð½Ð° ÐµÐ´Ð½Ð¸ Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки Ð²Ñ\80з Ð´Ñ\80Ñ\83ги Ð½Ð° Ð·Ð°ÐµÐ´Ð½Ð¸Ñ\87коÑ\82о Ð¼Ñ\83лÑ\82имедиÑ\98ално Ñ\81кладиÑ\88Ñ\82е Ð»Ð¾ÐºÐ°Ð»но",
+       "right-reupload-shared": "Ð\9fÑ\80езапиÑ\81 Ð½Ð° ÐµÐ´Ð½Ð¸ Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки Ð²Ñ\80з Ð´Ñ\80Ñ\83ги Ð½Ð° Ð·Ð°ÐµÐ´Ð½Ð¸Ñ\87коÑ\82о Ð¼Ñ\83лÑ\82имедиÑ\98ално Ñ\81кладиÑ\88Ñ\82е Ð¼ÐµÑ\81но",
        "right-upload_by_url": "Подигање на податотека од URL-адреса",
        "right-purge": "Бришење од опслужувачки меѓусклад на страницата без барање потврда за тоа",
        "right-autoconfirmed": "Без ограничувања на стапки за IP-адреса",
        "action-deleterevision": "избриши ја ревизијава",
        "action-deletedhistory": "прегледај ја историјата на бришења за оваа страница",
        "action-browsearchive": "барање на избришани страници",
-       "action-undelete": "обнови ја оваа страница",
+       "action-undelete": "обнови ја страницава",
        "action-suppressrevision": "прегледај ја и обнови ја оваа скриена преработка",
        "action-suppressionlog": "преглед на овој li;en дневник",
        "action-block": "оневозможи го овој корисник да уредува",
        "filedesc": "Опис",
        "fileuploadsummary": "Опис:",
        "filereuploadsummary": "Измени во податотеката:",
-       "filestatus": "Copyright статус:",
+       "filestatus": "Авторскоправен статус:",
        "filesource": "Извор:",
        "ignorewarning": "Занемари ги предупредувањата и зачувај ја податотеката",
        "ignorewarnings": "Занемари предупредувања",
        "large-file": "Се препорачува податотеките да не бидат поголеми од $1; оваа податотека е $2.",
        "largefileserver": "Големината на оваа податотека е поголема од максимално дозволената големина од серверот.",
        "emptyfile": "Податотеката што ја подигнавте е празна.\nОва може да се должи на грешка во нејзиното име.\nПроверете дали навистина сакате да ја подигнете ваквата податотека.",
-       "windows-nonascii-filename": "Опслужувачот не поддржува податотечни имиња со специјални знаци.",
+       "windows-nonascii-filename": "Опслужувачот не поддржува податотечни имиња со псоебни знаци.",
        "fileexists": "Податотека со ова име веќе постои. Проверете <strong>[[:$1]]</strong> ако не {{GENDER:|сте}} сигурни дали сакате да ја промените.\n[[$1|thumb]]",
        "filepageexists": "Описната страница на оваа податотека е веќе создадена на <strong>[[:$1]]</strong>, но не постои податотека со тоа име.\nОписот кој го внесовте нема да стои на описната страница.\nДоколку сакате описот да стои тука, ќе морате да го уредите рачно.\n[[$1|thumb]]",
        "fileexists-extension": "Податотека со слично име веќе постои: [[$2|thumb]]\n* Име на податотека која се подигнува: <strong>[[:$1]]</strong>\n* Име на постоечката податотека: <strong>[[:$2]]</strong>\nДали можеби би сакале да користите покарактеристично име.",
        "destfilename": "Целно име на податотеката:",
        "upload-maxfilesize": "Максимална големина на податотеката: $1",
        "upload-description": "Опис на податотека",
-       "upload-options": "Ð\9dагодÑ\83ваÑ\9aа Ð·Ð° Ð¿Ð¾Ð´Ð¸Ð³Ð°Ñ\9aе",
+       "upload-options": "Ð\9dагодÑ\83ваÑ\9aа Ð½Ð° Ð¿Ð¾Ð´Ð¸Ð³Ð°Ñ\9aеÑ\82о",
        "watchthisupload": "Набљудувај ја податотекава",
        "filewasdeleted": "Податотека со ова име претходно била подигната и потоа избришана.\nПроверете во $1 пред да продолжите со повтроно подигање.",
        "filename-bad-prefix": "Името на податотеката која ја подигате започнува со '''„$1“''', типично за неописните називи кои дигиталните фотоапарати автоматски ги создаваат, што впрочем е недоволно описно.\nВе молиме одберете подобро описно име за вашата податотека.",
        "license": "Лиценцирање:",
        "license-header": "Лиценцирање",
        "nolicense": "Нема",
-       "licenses-edit": "Ð\98змени Ð»Ð¸Ñ\86енÑ\86ни можности",
+       "licenses-edit": "Ð\98змени Ð³Ð¸ Ð»Ð¸Ñ\86енÑ\86ниÑ\82е можности",
        "license-nopreview": "(Прегледот не е достапен)",
-       "upload_source_url": "(податотеката што се ја одбрале од важечка, јавно достапна URL-адреса)",
-       "upload_source_file": "(подаÑ\82оÑ\82екаÑ\82а Ñ\88Ñ\82о Ñ\81е Ñ\98а Ð¾Ð´Ð±Ñ\80але Ð¾Ð´  вашиот сметач)",
+       "upload_source_url": "(податотеката што сте ја одбрале од важечка, јавно достапна URL-адреса)",
+       "upload_source_file": "(подаÑ\82оÑ\82екаÑ\82а Ñ\88Ñ\82о Ñ\98а Ð¾Ð´Ð±Ð¸Ñ\80аÑ\82е Ð¾Ð´ вашиот сметач)",
        "listfiles-delete": "избриши",
-       "listfiles-summary": "Ð\9eваа Ñ\81пеÑ\86иÑ\98ална страница ги прикажува сите подигнати податотеки.",
+       "listfiles-summary": "Ð\9eваа Ñ\81лÑ\83жбена страница ги прикажува сите подигнати податотеки.",
        "listfiles_search_for": "Побарај име на податотека:",
        "imgfile": "податотека",
        "listfiles": "Список на податотеки",
        "unwatchedpages": "Ненабљудувани страници",
        "listredirects": "Список на пренасочувања",
        "listduplicatedfiles": "Список на податотеки со дупликати",
-       "listduplicatedfiles-summary": "Ð\9eва Ðµ Ñ\81пиÑ\81ок Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки Ñ\87иÑ\98а Ð½Ð°Ñ\98нова Ð²ÐµÑ\80зиÑ\98а Ðµ Ð´Ñ\83пликаÑ\82 Ð½Ð° Ð½Ð°Ñ\98нова Ð²ÐµÑ\80зиÑ\98а Ð½Ð° Ð½ÐµÐºÐ¾Ñ\98а Ð´Ñ\80Ñ\83га Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека. Ð¡Ðµ Ð·ÐµÐ¼Ð°Ð°Ñ\82 Ð¿Ñ\80едвид Ñ\81амо Ð»Ð¾ÐºÐ°Ð»ни податотеки.",
+       "listduplicatedfiles-summary": "Ð\9eва Ðµ Ñ\81пиÑ\81ок Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки Ñ\87иÑ\98а Ð½Ð°Ñ\98нова Ð²ÐµÑ\80зиÑ\98а Ðµ Ð´Ñ\83пликаÑ\82 Ð½Ð° Ð½Ð°Ñ\98нова Ð²ÐµÑ\80зиÑ\98а Ð½Ð° Ð½ÐµÐºÐ¾Ñ\98а Ð´Ñ\80Ñ\83га Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека. Ð¡Ðµ Ð·ÐµÐ¼Ð°Ð°Ñ\82 Ð¿Ñ\80едвид Ñ\81амо Ð¼ÐµÑ\81ни податотеки.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] има [[$3|{{PLURAL:$2|дупликат|$2 дупликати}}]].",
        "unusedtemplates": "Неискористени шаблони",
        "unusedtemplatestext": "Оваа страница ги прикажува сите страници во именскиот простор {{ns:template}} кои не се вклучени во друга страница.\nНе заборавајте да ги проверите другите врски во шаблоните пред да ги избришете.",
        "statistics": "Статистики",
        "statistics-header-pages": "Статистики за страници",
        "statistics-header-edits": "Статистики на уредувања",
-       "statistics-header-views": "Статистики на посети",
        "statistics-header-users": "Статистики за корисници",
        "statistics-header-hooks": "Други статистики",
        "statistics-articles": "Статии",
        "statistics-files": "Подигнати податотеки",
        "statistics-edits": "Број на уредувања од започнувањето на {{SITENAME}}",
        "statistics-edits-average": "Просечен број на уредувања по страница",
-       "statistics-views-total": "Вкупно посети",
-       "statistics-views-total-desc": "Не се вклучени прегледувања на непостоечки и специјални страници",
-       "statistics-views-peredit": "Посети по уредување",
        "statistics-users": "Регистрирани [[Special:ListUsers|корисници]]",
        "statistics-users-active": "Активни корисници",
        "statistics-users-active-desc": "Корисници кои имаат извршено некое дејство {{PLURAL:$1|претходниот ден|во претходните $1 дена}}",
-       "statistics-mostpopular": "Најпосетувани страници",
        "pageswithprop": "Страници со својство",
        "pageswithprop-legend": "Страници со својство",
        "pageswithprop-text": "На страницава се наведени страници што користат дадено својство.",
        "uncategorizedtemplates": "Некатегоризирани преуредувања",
        "unusedcategories": "Неискористени категории",
        "unusedimages": "Неискористени слики",
-       "popularpages": "Популарни страници",
        "wantedcategories": "Потребни категории",
        "wantedpages": "Потребни страници",
        "wantedpages-badtitle": "Невалиден наслов во резултатите: $1",
        "prefixindex-strip": "Отстрани ја претставката во списокот",
        "shortpages": "Кратки страници",
        "longpages": "Долги страници",
-       "deadendpages": "Ð\8cоÑ\80Ñ\81окак страници",
+       "deadendpages": "Слепи страници",
        "deadendpagestext": "Следните страници немаат врски кон ниту една друга страница на ова вики.",
        "protectedpages": "Заштитени страници",
        "protectedpages-indef": "Само бесконечни заштити",
        "newpages-username": "Корисничко име:",
        "ancientpages": "Најстари статии",
        "move": "Премести",
-       "movethispage": "Премести ја оваа страница",
+       "movethispage": "Премести ја страницава",
        "unusedimagestext": "Следниве податотеки постојат, но не се вметнати во ниедна страница.\nИмајте предвид дека други мрежни места може да ставаат врски до неа со директна URL-адреса, и затоа може да е наведена овде и покрај тоа што е во активна употреба.",
        "unusedcategoriestext": "Следните категории постојат и покрај тоа што ниедна статија и категорија не ги користи.",
        "notargettitle": "Нема цел",
        "pager-newer-n": "{{PLURAL:$1|понова 1|понови $1}}",
        "pager-older-n": "{{PLURAL:$1|постара 1|постари $1}}",
        "suppress": "Скривање",
-       "querypage-disabled": "Оваа специјална страница е оневозможена за да не попречува на делотворноста.",
+       "querypage-disabled": "Оваа службена страница е оневозможена за да не попречува на делотворноста.",
+       "apihelp": "Помош со прилогот",
+       "apihelp-no-such-module": "Модулот „$1“ не е пронајден.",
        "booksources": "Печатени извори",
        "booksources-search-legend": "Пребарување на извори за книга",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Најди",
+       "booksources-search": "Пребарај",
        "booksources-text": "Ова е список на врски кон други мрежни места кои продаваат нови и користени книги, и тие може\nда имаат повеќе информации за книгите што ги баравте:",
        "booksources-invalid-isbn": "Наведениот ISBN се чини неправилен. Проверете да не настанала некоја грешка при копирањето од изворот.",
        "specialloguserlabel": "Изведувач:",
        "allpagesbadtitle": "Дадениот наслов е неважечки или има меѓујазичен или меѓувики-претставка. Може да содржи повеќе знаци кои не смеат да се користат во наслови.",
        "allpages-bad-ns": "Википедија не содржи именски простор „$1“.",
        "allpages-hide-redirects": "Скриј пренасочувања",
-       "cachedspecial-viewing-cached-ttl": "Ð\93ледаÑ\82е ÐºÐµÑ\88ирана верзија на оваа страница, која може да е стара $1.",
-       "cachedspecial-viewing-cached-ts": "Ð\93ледаÑ\82е ÐºÐµÑ\88ирана верзија на оваа страница, која може да се разликува од тековната.",
+       "cachedspecial-viewing-cached-ttl": "Ð\93ледаÑ\82е Ð¼ÐµÑ\93Ñ\83Ñ\81кладирана верзија на оваа страница, која може да е стара $1.",
+       "cachedspecial-viewing-cached-ts": "Ð\93ледаÑ\82е Ð¼ÐµÑ\93Ñ\83Ñ\81кладирана верзија на оваа страница, која може да се разликува од тековната.",
        "cachedspecial-refresh-now": "Погл. најновата.",
        "categories": "Категории",
        "categoriespagetext": "{{PLURAL:$1|Следната категорија содржи|Следните категории содржат}} страници или мултимедијални податотеки.\n[[Special:UnusedCategories|Неискористените категории]] не се прикажани овде.\nПогледајте ги и [[Special:WantedCategories|потребните категории]].",
        "listgrouprights-namespaceprotection-header": "Ограничувања за именски простори",
        "listgrouprights-namespaceprotection-namespace": "Именски простор",
        "listgrouprights-namespaceprotection-restrictedto": "Права што им овозможуваат на корисниците да уредуваат",
-       "trackingcategories": "Следачки категории",
-       "trackingcategories-summary": "Ð\9dа Ñ\81Ñ\82Ñ\80аниÑ\86ава Ñ\81е Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¸ Ñ\81ледачки категории што автоматски се пополнуваат од програмот на МедијаВики. Нивните називи можат да се сменат со измена на соодветните системски пораки во именскиот простор {{ns:8}}.",
-       "trackingcategories-msg": "Следачка категорија",
+       "trackingcategories": "Следечки категории",
+       "trackingcategories-summary": "Ð\9dа Ñ\81Ñ\82Ñ\80аниÑ\86ава Ñ\81е Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¸ Ñ\81ледечки категории што автоматски се пополнуваат од програмот на МедијаВики. Нивните називи можат да се сменат со измена на соодветните системски пораки во именскиот простор {{ns:8}}.",
+       "trackingcategories-msg": "Следечка категорија",
        "trackingcategories-name": "Назив на пораката",
        "trackingcategories-desc": "Критериуми за вклучување",
        "noindex-category-desc": "Роботите не ја индексираат страницава бидејќи го содржи волшебниот збор <code><nowiki>__NOINDEX__</nowiki></code> и се наоѓа во именски простор кајшто е дозволен.",
        "wlheader-enotif": "Известувањето по е-пошта е вклучено.",
        "wlheader-showupdated": "Страниците што се изменети од вашата последна посета се прикажани со '''задебелени''' букви",
        "wlnote": "Подолу {{PLURAL:$1|е прикажана последната промена|се прикажани последните <strong>$1</strong> промени}} во {{PLURAL:$2|последниов час|последниве <strong>$2</strong> часа}}, заклучно со $3, $4 ч.",
-       "wlshowlast": "Прикажи ги последните $1 часа, $2 дена, $3",
+       "wlshowlast": "Прикажи ги последните $1 часа, $2 дена,",
        "watchlist-options": "Поставки за список на набљудувања",
        "watching": "Набљудување...",
        "unwatching": "Отстранувам од набљудувани...",
        "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** Страница со зачестена посета\n** Сеприсутност на шаблонот/превметнувањето\n** Административна постапка",
        "unblocked": "[[User:$1|$1]] беше деблокиран",
        "unblocked-range": "корисникот $1 е одблокиран",
        "unblocked-id": "Блокирањето $1 беше отстрането",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] е одблокирана.",
        "blocklist": "Блокирани корисници",
        "ipblocklist": "Блокирани корисници",
        "ipblocklist-legend": "Најди блокиран корисник",
        "blocklist-params": "Параметри на блокот",
        "blocklist-reason": "Причина",
        "ipblocklist-submit": "Пребарај",
-       "ipblocklist-localblock": "Ð\9bокален блок",
+       "ipblocklist-localblock": "Ð\9cеÑ\81ен блок",
        "ipblocklist-otherblocks": "{{PLURAL:$1|друг блок|други блокови}}",
        "infiniteblock": "бесконечно",
        "expiringblock": "истекува на $1 во $2 ч.",
        "allmessagesname": "Име",
        "allmessagesdefault": "Текст по основно",
        "allmessagescurrent": "Сегашен текст",
-       "allmessagestext": "Ð\9eва Ðµ Ñ\81пиÑ\81ок Ð½Ð° Ñ\81иÑ\81Ñ\82емÑ\81киÑ\82е Ð¿Ð¾Ñ\80аки Ñ\80аÑ\81положиви Ð·Ð° Ð¸Ð¼ÐµÐ½Ñ\81киоÑ\82 Ð¿Ñ\80оÑ\81Ñ\82оÑ\80 â\80\9eÐ\9cедиÑ\98аÐ\92икиâ\80\9c.\nÐ\9eдеÑ\82е Ð½Ð° [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Ð\9bокализаÑ\86иÑ\98а Ð½Ð° Ð\9cедиÑ\98аÐ\92ики] Ð¸ [//translatewiki.net translatewiki.net] Ð°ÐºÐ¾ Ñ\81акаÑ\82е Ð´Ð° Ð¿Ñ\80идонеÑ\81еÑ\82е ÐºÐ¾Ð½ Ð¾Ð¿Ñ\88Ñ\82аÑ\82а Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ\86иÑ\98а на МедијаВики.",
+       "allmessagestext": "Ð\9eва Ðµ Ñ\81пиÑ\81ок Ð½Ð° Ñ\81иÑ\81Ñ\82емÑ\81киÑ\82е Ð¿Ð¾Ñ\80аки Ñ\80аÑ\81положиви Ð·Ð° Ð¸Ð¼ÐµÐ½Ñ\81киоÑ\82 Ð¿Ñ\80оÑ\81Ñ\82оÑ\80 â\80\9eÐ\9cедиÑ\98аÐ\92икиâ\80\9c.\nÐ\9eдеÑ\82е Ð½Ð° [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Ð\9fÑ\80евод Ð½Ð° Ð\9cедиÑ\98аÐ\92ики] Ð¸ [//translatewiki.net translatewiki.net] Ð°ÐºÐ¾ Ñ\81акаÑ\82е Ð´Ð° Ð¿Ñ\80идонеÑ\81еÑ\82е ÐºÐ¾Ð½ Ð¾Ð¿Ñ\88Ñ\82оÑ\82о Ð¿Ñ\80еведÑ\83ваÑ\9aе на МедијаВики.",
        "allmessagesnotsupportedDB": "Оваа страница не може да се користи бидејќи '''$wgUseDatabaseMessages''' е исклучено.",
        "allmessages-filter-legend": "Филтер",
        "allmessages-filter": "Филтрирај по состојба на прилагодувањето:",
        "tooltip-pt-watchlist": "Список на страници кои сте избрале да ги набљудувате.",
        "tooltip-pt-mycontris": "Список на ваши придонеси",
        "tooltip-pt-login": "Ви препорачуваме да се најавите, иако тоа не е задолжително.",
-       "tooltip-pt-logout": "Одјавете се",
+       "tooltip-pt-logout": "Одјавување",
+       "tooltip-pt-createaccount": "Ви препорачуваме да направите сметка и да се најавите, иако тоа не е задолжително",
        "tooltip-ca-talk": "Разговор за страницата",
        "tooltip-ca-edit": "Можете да ја уредите оваа страница. Ве молиме користете го копчето за преглед пред зачувување.",
        "tooltip-ca-addsection": "Започни нов пасус",
        "tooltip-ca-viewsource": "Оваа страница е заштитена. Можете да го видите изворниот код.",
        "tooltip-ca-history": "Претходни верзии на оваа страница.",
-       "tooltip-ca-protect": "Ð\97аÑ\88Ñ\82иÑ\82еÑ\82е Ñ\98а Ð¾Ð²Ð°Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а",
+       "tooltip-ca-protect": "Ð\97аÑ\88Ñ\82иÑ\82и Ñ\98а Ñ\81Ñ\82Ñ\80аниÑ\86ава",
        "tooltip-ca-unprotect": "Измени заштита страницава",
-       "tooltip-ca-delete": "Избриши ја оваа страница",
+       "tooltip-ca-delete": "Избриши ја страницава",
        "tooltip-ca-undelete": "Обнови ги уредувањата направени на оваа страница пред да биде избришана",
-       "tooltip-ca-move": "Премести ја оваа страница",
+       "tooltip-ca-move": "Премести ја страницава",
        "tooltip-ca-watch": "Додај ја страницава во списокот на набљудувања",
        "tooltip-ca-unwatch": "Отстрани ја страницава од списокот на набљудувања",
        "tooltip-search": "Пребарај низ {{SITENAME}}",
        "tooltip-feed-atom": "Atom емитување за оваа страница",
        "tooltip-t-contributions": "Список на придонеси на овој корисник",
        "tooltip-t-emailuser": "Испрати е-пошта на овој корисник",
+       "tooltip-t-info": "Повеќе информаици за страницава",
        "tooltip-t-upload": "Подигни податотеки",
-       "tooltip-t-specialpages": "СпиÑ\81ок Ð½Ð° Ñ\81иÑ\82е Ñ\81пеÑ\86иÑ\98ални страници",
-       "tooltip-t-print": "Ð\92еÑ\80зиÑ\98а Ð·Ð° Ð¿ÐµÑ\87аÑ\82еÑ\9aе Ð½Ð° Ð¾Ð²Ð°Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а",
+       "tooltip-t-specialpages": "СпиÑ\81ок Ð½Ð° Ñ\81иÑ\82е Ñ\81лÑ\83жбени страници",
+       "tooltip-t-print": "Ð\92еÑ\80зиÑ\98а Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86ава Ð½Ð°Ð¼ÐµÐ½ÐµÑ\82а Ð·Ð° Ð¿ÐµÑ\87аÑ\82еÑ\9aе",
        "tooltip-t-permalink": "Постојана врска до оваа верзија на страницата",
        "tooltip-ca-nstab-main": "Преглед на содржината",
        "tooltip-ca-nstab-user": "Преглед на корисничката страница",
        "tooltip-ca-nstab-media": "Преглед на мултимедијалната податотека",
-       "tooltip-ca-nstab-special": "Ð\9eва Ðµ Ñ\81пеÑ\86иÑ\98ална Ñ\81Ñ\82Ñ\80аниÑ\86а, не можете да ја уредувате",
+       "tooltip-ca-nstab-special": "Ð\9eва Ðµ Ñ\81лÑ\83жбена Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¸ Ð·Ð°Ñ\82оа не можете да ја уредувате",
        "tooltip-ca-nstab-project": "Преглед на проектната страница",
        "tooltip-ca-nstab-image": "Преглед на страницата на податотеката",
        "tooltip-ca-nstab-mediawiki": "Преглед на системската порака",
        "pageinfo-robot-policy": "Индексирање со роботи",
        "pageinfo-robot-index": "Дозволено",
        "pageinfo-robot-noindex": "Недозволено",
-       "pageinfo-views": "Број на посети",
        "pageinfo-watchers": "Број на набљудувачи",
        "pageinfo-few-watchers": "Помалку од $1 {{PLURAL:$1|набљудувач|набљудувачи}}",
        "pageinfo-redirects-name": "Пренасочувања кон страницата",
        "file-no-thumb-animation-gif": "'''Напомена: Поради технички ограничувања, минијатурите на GIF-слики со висока разложеност како оваа нема да се анимираат.'''",
        "newimages": "Галерија на нови податотеки",
        "imagelisttext": "Следи список на '''$1''' {{PLURAL:$1|податотека|податотеки}} подредени $2.",
-       "newimages-summary": "Ð\9eваа Ñ\81пеÑ\86иÑ\98ална страница ги покажува скоро подигнатите податотеки.",
+       "newimages-summary": "Ð\9eваа Ñ\81лÑ\83жбена страница ги покажува скоро подигнатите податотеки.",
        "newimages-legend": "Филтрирај",
        "newimages-label": "Име на податотека (или дел од името):",
        "newimages-showbots": "Прикажувај подигања од ботови",
        "exif-nickname": "Неформален назив на сликата",
        "exif-rating": "Оценка (од 5)",
        "exif-rightscertificate": "Уверение за раководство со права",
-       "exif-copyrighted": "Ð\90вÑ\82оÑ\80Ñ\81ки Ð¿Ñ\80авен Ñ\81Ñ\82аÑ\82Ñ\83Ñ\81",
+       "exif-copyrighted": "Ð\90вÑ\82оÑ\80Ñ\81копÑ\80авен Ñ\81Ñ\82аÑ\82Ñ\83Ñ\81:",
        "exif-copyrightowner": "Носител на авторските права",
        "exif-usageterms": "Услови на употреба",
        "exif-webstatement": "Изјава за авторското право",
        "exif-urgency-low": "Мала ($1)",
        "exif-urgency-high": "Голема ($1)",
        "exif-urgency-other": "Кориснички-зададен приоритет ($1)",
-       "watchlistall2": "сите",
        "namespacesall": "сите",
        "monthsall": "сите",
        "confirmemail": "Потврда на е-поштенска адреса",
        "unknown_extension_tag": "Непозната ознака на додатокот „$1“",
        "duplicate-defaultsort": "Предупредување: Основниот клуч за подредување „$2“ го поништува претходниот основен клуч за подредување „$1“.",
        "duplicate-displaytitle": "<strong>Предупредување:</strong> Приказниот наслов „$2“ го заменува претходнито приказен наслов „$1“.",
+       "invalid-indicator-name": "<strong>Грешка:</strong> Атрибутот <code>name</code> што го покажува статусот на страницата не може да биде празен.",
        "version": "Верзија",
        "version-extensions": "Воспоставени додатоци",
        "version-skins": "Воспоставени рува",
-       "version-specialpages": "СпеÑ\86иÑ\98ални страници",
+       "version-specialpages": "СлÑ\83жбени страници",
        "version-parserhooks": "Расчленувачки куки",
        "version-variables": "Променливи",
        "version-antispam": "Спречување на спам",
        "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath?uselang=mk Скрипта]",
        "redirect": "Пренасочување по податотеки, корисник или назнака на преработка",
        "redirect-legend": "Пренасочување кон податотека или страница",
-       "redirect-summary": "Ð\9eваа Ñ\81пеÑ\86иÑ\98ална страница пренасочува кон податотека (се задава името), страница (се задава назнаката на преработката или страницата) или корисничка странца (се задава бројчената назнака на корисникот). Употреба: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] или [[{{#Special:Redirect}}/user/101]].",
+       "redirect-summary": "Ð\9eваа Ñ\81лÑ\83жбена страница пренасочува кон податотека (се задава името), страница (се задава назнаката на преработката или страницата) или корисничка странца (се задава бројчената назнака на корисникот). Употреба: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] или [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "Оди",
        "redirect-lookup": "Пребарај:",
        "redirect-value": "Вредност:",
        "fileduplicatesearch-result-1": "Податотеката „$1“ нема истоветни дупликати.",
        "fileduplicatesearch-result-n": "Податотеката „$1“ има {{PLURAL:$2|еден истоветен дупликат|$2 истоветни дупликати}}.",
        "fileduplicatesearch-noresults": "Не пронајдов податотека со име „$1“.",
-       "specialpages": "СпеÑ\86иÑ\98ални страници",
+       "specialpages": "СлÑ\83жбени страници",
        "specialpages-note-top": "Легенда",
-       "specialpages-note": "* Ð\9dоÑ\80мални Ñ\81пеÑ\86иÑ\98ални Ñ\81Ñ\82Ñ\80аниÑ\86и.\n* <span class=\"mw-specialpagerestricted\">Ð\9eгÑ\80аниÑ\87ени Ñ\81пеÑ\86иÑ\98ални страници.</span>",
+       "specialpages-note": "* Ð\9dоÑ\80мални Ñ\81лÑ\83жбени Ñ\81Ñ\82Ñ\80аниÑ\86и.\n* <span class=\"mw-specialpagerestricted\">Ð\9eгÑ\80аниÑ\87ени Ñ\81лÑ\83жбени страници.</span>",
        "specialpages-group-maintenance": "Извештаи за одржување",
-       "specialpages-group-other": "Ð\94Ñ\80Ñ\83ги Ñ\81пеÑ\86иÑ\98ални страници",
-       "specialpages-group-login": "Најава / регистрација",
+       "specialpages-group-other": "Ð\94Ñ\80Ñ\83ги Ñ\81лÑ\83жбени страници",
+       "specialpages-group-login": "Најава / направи сметка",
        "specialpages-group-changes": "Скорешни промени и дневници",
        "specialpages-group-media": "Извештаи за мултимедијални содржини и подигања",
        "specialpages-group-users": "Корнисници и кориснички права",
        "specialpages-group-pages": "Списоци на страници",
        "specialpages-group-pagetools": "Алатки за страници",
        "specialpages-group-wiki": "Податоци и алатки",
-       "specialpages-group-redirects": "Ð\9fÑ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aе Ð½Ð° Ñ\81пеÑ\86иÑ\98ални страници",
+       "specialpages-group-redirects": "Ð\9fÑ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aе Ð½Ð° Ñ\81лÑ\83жбени страници",
        "specialpages-group-spam": "Алатки против спам",
        "blankpage": "Празна страница",
        "intentionallyblankpage": "Оваа страница намерно е оставена празна",
        "dberr-info-hidden": "(Не може да се добие опслужувачот на базата на податоци)",
        "dberr-usegoogle": "Во меѓувреме можете да се обидете да пребарувате со Google.",
        "dberr-outofdate": "Да напоменеме дека нивните индекси на нашата содржина можат да бидат застарени.",
-       "dberr-cachederror": "Следнава Ñ\81одÑ\80жина Ðµ ÐºÐµÑ\88иÑ\80ана ÐºÐ¾Ð¿Ð¸Ñ\98а Ð½Ð° Ð±Ð°Ñ\80анаÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а, ÐºÐ¾Ñ\98а Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ðµ Ð·Ð°Ñ\81Ñ\82аÑ\80ена.",
+       "dberr-cachederror": "Следнава Ñ\81одÑ\80жина Ðµ Ð¼ÐµÑ\93Ñ\83Ñ\81кладиÑ\80ан Ð¿Ñ\80имеÑ\80ок Ð½Ð° Ð±Ð°Ñ\80анаÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а, ÐºÐ¾Ñ\98 Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ðµ Ð·Ð°Ñ\81Ñ\82аÑ\80ен.",
        "htmlform-invalid-input": "Има проблеми со дел од вашиот внос",
        "htmlform-select-badoption": "Укажаната вредност е неважечка како можност.",
        "htmlform-int-invalid": "Вредноста која ја наведовте не е цел број.",
        "revdelete-uname-unhid": "корисничкото име е скриено",
        "revdelete-restricted": "применети ограничувања на администратори",
        "revdelete-unrestricted": "отстранети ограничувања за систем оператори",
+       "logentry-merge-merge": "$1 {{GENDER:$2|ја припои}} $3 кон $4 (преработки сè до $5)",
        "logentry-move-move": "$1 {{GENDER:$2|ја премести}} страницата $3 на $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|ја премести}} страницата $3 на $4 без да остави пренасочување",
        "logentry-move-move_redir": "$1 {{GENDER:$2|ја премести}} страницата $3 на $4 презапишувајќи врз пренасочување",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|подигна}} нова верзија на $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|ја подигна}} $3",
        "rightsnone": "(нема)",
+       "revdelete-summary": "опис на уредување",
        "feedback-bugornote": "Ако сте спремни подробно да го опишете техничкиот проблем, тогаш [$1 пријавете грешка]. \nВо спротивно, послужете се со едноставниот образец подолу. Вашиот коментар ќе стои на страницата „[$3 $2]“, заедно со корисничкото име и прелистувачот што го користите.",
        "feedback-subject": "Наслов:",
        "feedback-message": "Порака:",
        "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“",
        "limitreport-expansiondepth": "Најголема длабочина на проширувањето",
        "limitreport-expensivefunctioncount": "Бр. на сложени расчленувачки функции",
        "expandtemplates": "Прошири шаблони",
-       "expand_templates_intro": "Ð\9eваа Ñ\81пеÑ\86иÑ\98ална страница зема еден текст и рекурзивно ги проширува сите шаблони во него.\nИсто така проширува и расчленувачки функции како\n<code><nowiki>{{</nowiki>#language:…}}</code> и променливи како\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nВсушност, го проширува сето она што стои во двојни аглести загради.",
+       "expand_templates_intro": "Ð\9eваа Ñ\81лÑ\83жбена страница зема еден текст и рекурзивно ги проширува сите шаблони во него.\nИсто така проширува и расчленувачки функции како\n<code><nowiki>{{</nowiki>#language:…}}</code> и променливи како\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nВсушност, го проширува сето она што стои во двојни аглести загради.",
        "expand_templates_title": "Наслов на контекстот, за {{FULLPAGENAME}} и тн.:",
        "expand_templates_input": "Влезен текст:",
        "expand_templates_output": "Извод",
        "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 Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.\n\n$2\n\n; Ако штотуку го имате воспоставено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code>skins/</code> од него.\n* Клонирајќи едно од складиштата <code>mediawiki/skins/*</code> преку git во папката <code>skins/</code> на вашата воспоставка на МедијаВики.\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики.\n\n; Ако штотуку го имате надградено МедијаВики:\n: МедијаВики 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; Ако штотуку го имате воспоставено или надградено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. МедијаВики 1.24 и поновите верзии немаат рува во главното складиште. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n:* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code>skins/</code> од него.\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.",
+       "default-skin-not-found": "За жал, основното руво на вашето вики оопределено во <code dir=\"ltr\">$wgDefaultSkin</code> as <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's именикот на рува] вака:\n* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code>skins/</code> од него.\n* Клонирајќи едно од складиштата <code>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-no-skins": "За жал, основното руво на вашето вики, определено во <code>$wgDefaultSkin</code> како <code>$1</code>, не е достапно.\n\nНемате воспоставено ниедно руво.\n\n; Ако штотуку го имате воспоставено или надградено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. МедијаВики 1.24 и поновите верзии немаат рува во главното складиште. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n:* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <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 ('''исклучено''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''исклучено''')",
+       "mediastatistics": "Статистики за слики и снимки",
+       "mediastatistics-summary": "Статистики за подигнати типови податотеки. Се зема предвид само последната верзија на податотеката. Старите и избришаните верзии не се бројат.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|Еден бајт|$1 бајти}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME-тип",
+       "mediastatistics-table-extensions": "Можни додатоци",
+       "mediastatistics-table-count": "Број на податотеки",
+       "mediastatistics-table-totalbytes": "Вкупна големина",
+       "mediastatistics-header-unknown": "Непознато",
+       "mediastatistics-header-bitmap": "Bitmap-слика",
+       "mediastatistics-header-drawing": "Цртежи (векторски слики)",
+       "mediastatistics-header-audio": "Аудио",
+       "mediastatistics-header-video": "Видеа",
+       "mediastatistics-header-multimedia": "Збогатени снимки",
+       "mediastatistics-header-office": "Биротехнички",
+       "mediastatistics-header-text": "Текстуални",
+       "mediastatistics-header-executable": "Извршни",
+       "mediastatistics-header-archive": "Збиени формати",
+       "json-warn-trailing-comma": "{{PLURAL:$1|Отстранета е една завршна запирка|Отстранети се $1 завршни запирки}} од JSON",
+       "json-error-unknown": "Се јави проблем со JSON. Грешка: $1.",
+       "json-error-depth": "Надмината е максималната дозволена длабочина на пластот",
+       "json-error-state-mismatch": "Неважечки или погрешно срочен JSON",
+       "json-error-ctrl-char": "Грешка во контролниот знак. Можеби е неисправно кодиран",
+       "json-error-syntax": "Синтаксна грешка",
+       "json-error-utf8": "Неисправно срочени UTF-8-знаци. Може да се неисправно кодирани",
+       "json-error-recursion": "Има една или повеќе повторниви наводи во вредноста што треба да се кодираат",
+       "json-error-inf-or-nan": "Има една или повеќе NAN- или INF-вредности што треба да се кодираат",
+       "json-error-unsupported-type": "Зададена е вредност од тип што не може да се кодира"
 }
index 7b938c1..f3cea21 100644 (file)
        "otherlanguages": "ഇതരഭാഷകളിൽ",
        "redirectedfrom": "($1 എന്ന താളിൽ നിന്നും തിരിച്ചുവിട്ടതു പ്രകാരം)",
        "redirectpagesub": "തിരിച്ചുവിടൽ താൾ",
+       "redirectto": "തിരിച്ചുവിടുന്നു:",
        "lastmodifiedat": "ഈ താൾ അവസാനം തിരുത്തപ്പെട്ടത്: $2, $1.",
        "viewcount": "ഈ താൾ {{PLURAL:$1|ഒരു തവണ|$1 തവണ}} സന്ദർശിക്കപ്പെട്ടിട്ടുണ്ട്.",
        "protectedpage": "സംരക്ഷിത താൾ",
        "viewsourcetext": "താങ്കൾക്ക് ഈ താളിന്റെ മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും:",
        "viewyourtext": "താങ്കൾക്ക് ഈ താളിലെ '''താങ്കളുടെ തിരുത്തുകളുടെ''' മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും:",
        "protectedinterface": "ഈ താൾ ഈ വിക്കിയുടെ സോഫ്റ്റ്‌വെയറിന്റെ സമ്പർക്കമുഖ എഴുത്തുകൾ നൽകുന്നു, അതുകൊണ്ട് ദുരുപയോഗം തടയാൻ ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു. എല്ലാ വിക്കികൾക്കുമായി പരിഭാഷ കൂട്ടിച്ചേർക്കാനോ, പരിഭാഷയിൽ മാറ്റം വരുത്താനോ, ദയവായി മീഡിയവിക്കി പ്രാദേശീകരണ പദ്ധതിയായ [//translatewiki.net/ translatewiki.net] ഉപയോഗിക്കുക.",
-       "editinginterface": "'''മുന്നറിയിപ്പ്:''' സോഫ്റ്റ്‌വെയറിൽ സമ്പർക്കമുഖം നിലനിർത്തുന്ന താളാണു താങ്കൾ തിരുത്തുവാൻ പോകുന്നത്.\nഈ താളിൽ താങ്കൾ വരുത്തുന്ന മാറ്റങ്ങൾ ഉപയോക്താക്കൾ വിക്കി കാണുന്ന വിധത്തെ മാറ്റിമറിച്ചേക്കാം.\nമീഡിയവിക്കി സന്ദേശങ്ങളുടെ പരിഭാഷകൾ കൂട്ടിച്ചേർക്കാനും മാറ്റംവരുത്താനും മീഡിയവിക്കി സന്ദേശങ്ങളുടെ പ്രാദേശികവത്കരണ പദ്ധതിയായ [//translatewiki.net/ translatewiki.net] ഉപയോഗിക്കുവാൻ താല്പര്യപ്പെടുന്നു.",
+       "editinginterface": "<strong>മുന്നറിയിപ്പ്:<strong> സോഫ്റ്റ്‌വെയറിൽ സമ്പർക്കമുഖം നിലനിർത്തുന്ന താളാണു താങ്കൾ തിരുത്തുവാൻ പോകുന്നത്.\nഈ താളിൽ താങ്കൾ വരുത്തുന്ന മാറ്റങ്ങൾ ഉപയോക്താക്കൾ വിക്കി കാണുന്ന വിധത്തെ മാറ്റിമറിച്ചേക്കാം.",
+       "translateinterface": "എല്ലാ വിക്കികൾക്കും ഉപയോഗിക്കാനാവുംവിധം പരിഭാഷകൾ കൂട്ടിച്ചേർക്കാനും മാറ്റംവരുത്താനും മീഡിയവിക്കി സന്ദേശങ്ങളുടെ പ്രാദേശികവത്കരണ പദ്ധതിയായ [//translatewiki.net/ translatewiki.net] ഉപയോഗിക്കുവാൻ താല്പര്യപ്പെടുന്നു.",
        "cascadeprotected": "നിർഝരിത (cascading) സൗകര്യം ഉപയോഗിച്ച് തിരുത്തൽ നടത്തുന്നതിനു സം‌രക്ഷണം ഏർപ്പെടുത്തിയിട്ടുള്ള {{PLURAL:$1|താഴെ കൊടുത്തിട്ടുള്ള താളിന്റെ|താഴെ കൊടുത്തിട്ടുള്ള താളുകളുടെ}} ഭാഗമാണ്‌ ഈ താൾ. അതിനാൽ ഈ താൾ തിരുത്താൻ സാധിക്കില്ല:\n$2",
        "namespaceprotected": "'''$1''' നാമമേഖലയിലുള്ള താളുകൾ തിരുത്താൻ താങ്കൾക്ക് അനുവാദമില്ല.",
        "customcssprotected": "ഈ സി.എസ്.എസ്. താളിൽ മറ്റൊരു ഉപയോക്താവിന്റെ സ്വകാര്യസജ്ജീകരണങ്ങൾ ഉൾക്കൊള്ളുന്നു, അതിനാൽ താങ്കൾക്ക് ഈ താൾ തിരുത്താൻ അനുവാദമില്ല.",
        "createaccount-text": "{{SITENAME}} സംരംഭത്തിൽ ($4) താങ്കളുടെ ഇമെയിൽ വിലാസത്തിൽ ആരോ ഒരു അംഗത്വം \"$2\" എന്ന ഉപയോക്തൃനാമത്തിൽ ഉണ്ടാക്കിയിരിക്കുന്നു (രഹസ്യവാക്ക്: \"$3\").  താങ്കൾ ഇപ്പോൾ ലോഗിൻ ചെയ്തു രഹസ്യവാക്ക് മാറ്റേണ്ടതാകുന്നു.\n\nഅംഗത്വം അബദ്ധവശാൽ ഉണ്ടാക്കിയതാണെങ്കിൽ താങ്കൾക്ക് ഈ സന്ദേശം നിരാകരിക്കാവുന്നതാണ്‌.",
        "login-throttled": "താങ്കൾ നിരവധി പ്രാവശ്യം ലോഗിൻ ചെയ്യാൻ ശ്രമിച്ചിരിക്കുന്നു.\nപുതിയതായി ശ്രമിക്കുന്നതിനു മുമ്പ് $1 ദയവായി കാത്തിരിക്കുക.",
        "login-abort-generic": "താങ്കളുടെ പ്രവേശിക്കൽ പരാജയപ്പെട്ടു - റദ്ദാക്കപ്പെട്ടിരിക്കുന്നു",
+       "login-migrated-generic": "താങ്കളുടെ അംഗത്വം പ്രവാസത്തിലാണ്, ഉപയോക്തൃനാമം ഈ വിക്കിയിൽ നിലവിലില്ല.",
        "loginlanguagelabel": "ഭാഷ: $1",
        "suspicious-userlogout": "ലോഗൗട്ട് ചെയ്യാനുള്ള താങ്കളുടെ അഭ്യർത്ഥന നിരസിച്ചിരിക്കുന്നു, കാരണം അത് കേടായ ബ്രൗസറിൽ നിന്നോ കാഷിങ് പ്രോക്സിയിൽ നിന്നോ ഉണ്ടായതുപോലെ അനുഭവപ്പെടുന്നു.",
        "createacct-another-realname-tip": "താങ്കളുടെ യഥാർത്ഥ പേര്‌ നൽകണമെന്നു നിർബന്ധമില്ല.\n\nഎങ്കിലും അങ്ങനെ ചെയ്താൽ, ഉപയോക്താക്കൾക്ക് അവരരവരുടെ പേരിൽ തന്നെ തങ്ങളുടെ സൃഷ്ടിക്ക് കടപ്പാട് ലഭിക്കുന്നതാണ്.",
        "passwordreset-emailsent-capture": "രഹസ്യവാക്ക് പുനർസജ്ജീകരണ ഇമെയിൽ അയച്ചിട്ടുണ്ട്, അത് താഴെക്കൊടുക്കുന്നു.",
        "passwordreset-emailerror-capture": "താഴെക്കൊടുത്തിരിക്കുന്ന, രഹസ്യവാക്ക് പുനർസജ്ജീകരണ ഇമെയിൽ സൃഷ്ടിക്കാനായെങ്കിലും, അത് {{GENDER:$2|ഉപയോക്താവിന്}} അയയ്ക്കുന്നത് പരാജയപ്പെട്ടു: $1",
        "changeemail": "ഇമെയിൽ വിലാസത്തിൽ മാറ്റംവരുത്തുക",
-       "changeemail-header": "അംഗത്വത്തിന്റെ ഇമെയിൽ വിലാസത്തിൽ മാറ്റംവരുത്തുക",
        "changeemail-text": "താങ്കളുടെ ഇമെയിൽ വിലാസത്തിൽ മാറ്റംവരുത്താൻ ഈ ഫോം പൂരിപ്പിച്ചു നൽകുക. മാറ്റം സ്ഥിരീകരിക്കാനായി താങ്കളുടെ രഹസ്യവാക്ക് കൂടെ നൽകേണ്ടതാണ്.",
        "changeemail-no-info": "ഈ താൾ നേരിട്ടു കാണുന്നതിന് താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കണം.",
        "changeemail-oldemail": "ഇപ്പോഴത്തെ ഇമെയിൽ വിലാസം:",
        "changeemail-none": "(ഒന്നുമില്ല)",
        "changeemail-password": "താങ്കളുടെ {{SITENAME}} രഹസ്യവാക്ക്:",
        "changeemail-submit": "ഇമെയിലിൽ മാറ്റംവരുത്തുക",
-       "changeemail-cancel": "റദ്ദാക്കുക",
        "changeemail-throttled": "താങ്കൾ നിരവധി തവണ പ്രവേശിക്കാൻ ശ്രമിച്ചിരിക്കുന്നു.\nവീണ്ടും ശ്രമിക്കുന്നതിനു മുമ്പ് ദയവായി $1 കാത്തിരിക്കുക.",
        "resettokens": "ചീട്ടുകൾ പുനഃസജ്ജീകരിക്കുക",
        "resettokens-text": "താങ്കളുടെ അംഗത്വവുമായി ബന്ധപ്പെട്ടുള്ള ചില സ്വകാര്യവിവരങ്ങളിലേയ്ക്ക് ഇവിടെ ലഭ്യത സാദ്ധ്യമാക്കുന്ന ചീട്ടുകൾ താങ്കൾക്ക് പുനഃസജ്ജീകരിക്കാവുന്നതാണ്.\n\nതാങ്കളുടെ അംഗത്വവിവരങ്ങൾ മറ്റാർക്കെങ്കിലും അറിയാതെ കൈമാറിയിട്ടുണ്ടെങ്കിലോ താങ്കളുടെ അംഗത്വം അപഹരിക്കപ്പെട്ടുവെങ്കിലോ താങ്കളിത്  ചെയ്യേണ്ടതാണ്.",
        "showpreview": "എങ്ങനെയുണ്ടെന്നു കാണുക",
        "showdiff": "മാറ്റങ്ങൾ കാണിക്കുക",
        "blankarticle": "<strong>മുന്നറിയിപ്പ്:</strong> താങ്കൾ സൃഷ്ടിക്കുന്ന താൾ ശൂന്യമാണ്.\n\"{{int:savearticle}}\" ഒന്നുകൂടി അമർത്തിയാൽ, ഉള്ളടക്കമൊന്നുമില്ലാതെ താൾ സൃഷ്ടിക്കപ്പെടും.",
-       "anoneditwarning": "'''മുന്നറിയിപ്പ്:''' താങ്കൾ ലോഗിൻ ചെയ്തിട്ടില്ല. താങ്കളുടെ ഐ.പി. വിലാസം താളിന്റെ തിരുത്തൽ ചരിത്രത്തിൽ ചേർക്കുന്നതാണ്.",
+       "anoneditwarning": "<strong>മുന്നറിയിപ്പ്:</strong> താങ്കൾ ലോഗിൻ ചെയ്തിട്ടില്ല. താങ്കൾ തിരുത്തുകളെന്തെങ്കിലും ചെയ്യുകയാണെങ്കിൽ താങ്കളുടെ ഐ.പി. വിലാസം എല്ലാവർക്കും ലഭ്യമായിരിക്കും. താങ്കൾ <strong>[$1 ലോഗിൻ ചെയ്യുകയോ]</strong>  <strong>[$2 അംഗത്വമെടുക്കുകയോ]</strong> ചെയ്യുന്നതുവഴി മറ്റ് ഗുണങ്ങളോടൊപ്പം താങ്കളുടെ തിരുത്തുകൾ ഉപയോക്തൃനാമത്തിലാവും അറിയപ്പെടുക.",
        "anonpreviewwarning": "''താങ്കൾ ലോഗിൻ ചെയ്തിട്ടില്ല. സേവ് ചെയ്യുമ്പോൾ താളിന്റെ തിരുത്തൽ ചരിത്രത്തിൽ താങ്കളുടെ ഐ.പി. വിലാസം ചേർത്തു സൂക്ഷിക്കപ്പെടും.''",
        "missingsummary": "'''ഓർമ്മക്കുറിപ്പ്:''' താങ്കൾ തിരുത്തലിന്റെ ചുരുക്കരൂപം നൽകിയിട്ടില്ല. ''സേവ് ചെയ്യുക'' ബട്ടൺ ഒരുവട്ടം കൂടി അമർത്തിയാൽ താങ്കൾ വരുത്തിയ മാറ്റം കാത്തുസൂക്ഷിക്കുന്നതാണ്.",
        "missingcommenttext": "താങ്കളുടെ അഭിപ്രായം ദയവായി താഴെ രേഖപ്പെടുത്തുക.",
        "content-model-text": "വെറും എഴുത്ത്",
        "content-model-javascript": "ജാവാസ്ക്രിപ്റ്റ്",
        "content-model-css": "സി.എസ്.എസ്.",
+       "duplicate-args-category": "ഫലകങ്ങൾ വിളിക്കുമ്പോൾ ചരങ്ങൾ ആവർത്തിച്ചുപയോഗിക്കുന്ന താളുകൾ",
+       "duplicate-args-category-desc": "താളിൽ ഫലകങ്ങൾ വിളിക്കുമ്പോൾ ചരങ്ങൾ അതായത് <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> അല്ലെങ്കിൽ <code><nowiki>{{foo|bar|1=baz}}</nowiki></code> എന്ന രീതിയിൽ.",
        "expensive-parserfunction-warning": "'''മുന്നറിയിപ്പ്:''' ഈ താളിൽ വളരെക്കൂടുതൽ പാഴ്സർ ഫങ്ഷനുകൾ വിളിച്ചിരിക്കുന്നു.\n\n{{PLURAL:$2|ഒരു വിളി|$2 വിളികൾ}} മാത്രമുണ്ടാകേണ്ടയിടത്ത്, ഇപ്പോൾ {{PLURAL:$1|ഒരു വിളി|$1 വിളികൾ}} ഉണ്ട്.",
        "expensive-parserfunction-category": "വളരെയധികം ചിലവേറിയ പാഴ്സർ ഫങ്ഷൻ വിളികൾ ഉൾക്കൊള്ളുന്ന താളുകൾ",
        "post-expand-template-inclusion-warning": "'''അറിയിപ്പ്:''' ഫലകം ഉൾപ്പെടുത്താവുന്ന വലിപ്പത്തിലും വളരെ കൂടുതൽ ആയിരിക്കുന്നു.\nചില ഫലകങ്ങൾ ഉൾപ്പെടുത്തുകയില്ല.",
        "mergehistory-same-destination": "സ്രോതസ്സ് - ലക്ഷ്യ താളുകൾക്ക് ഒരേ പേര്‌ ഉണ്ടാകാൻ പാടില്ല",
        "mergehistory-reason": "കാരണം:",
        "mergelog": "താളുകൾ സം‌യോജിപ്പിച്ചതിന്റെ രേഖകൾ",
-       "pagemerge-logentry": "[[$1]] എന്ന താൾ [[$2]] എന്ന താളിലേയ്ക്ക് സംയോജിപ്പിച്ച് കൂട്ടിച്ചേർത്തു ($3 വരെയുള്ള പതിപ്പുകൾ)",
        "revertmerge": "വിയോജിപ്പിക്കുക",
        "mergelogpagetext": "രണ്ടു താളുകളുടെ നാൾവഴികൾ തമ്മിൽ സം‌യോജിപ്പിച്ചതിന്റെ പ്രവർത്തനരേഖകളുടെ ഏറ്റവും പുതിയ പട്ടിക താഴെ കാണാം.",
        "history-title": "\"$1\" എന്ന താളിന്റെ നാൾവഴി",
        "search-result-category-size": "{{PLURAL:$1|ഒരു അംഗം|$1 അംഗങ്ങൾ}} ({{PLURAL:$2|ഒരു ഉപവർഗ്ഗം|$2 ഉപവർഗ്ഗങ്ങൾ}}, {{PLURAL:$3|ഒരു പ്രമാണം|$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''' ഫലങ്ങൾ}} താഴെ പ്രദർശിപ്പിക്കുന്നു.",
        "showingresultsinrange": "#<strong>$2</strong> മുതൽ #<strong>$3</strong> വരെയുള്ള പരിധിയിലെ {{PLURAL:$1|<strong>ഒരു</strong> ഫലം|<strong>$1</strong> ഫലങ്ങൾ}} താഴെ പ്രദർശിപിക്കുന്നു.",
-       "showingresultsheader": "'''$4''' എന്ന പദത്തിനു ആകെ ലഭിച്ച {{PLURAL:$5| '''$3''' ഫലത്തിൽ '''$1''' എണ്ണം|'''$3''' ഫലത്തിൽ '''$1 മുതൽ $2''' വരെയുള്ളവ}}",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> ഫലത്തിൽ<strong>$1</strong>|<strong>$3</strong> ഫലത്തിൽ <strong>$1 മുതൽ $2</strong> വരെയുള്ളവ}}",
        "search-nonefound": "താങ്കൾ തിരഞ്ഞ പദത്തിനു യോജിച്ച ഫലങ്ങളൊന്നും ലഭിച്ചില്ല.",
        "powersearch-legend": "വിപുലീകൃത തിരച്ചിൽ",
        "powersearch-ns": "തിരയേണ്ട നാമമേഖലകൾ",
        "gender-female": "സ്ത്രീ",
        "prefs-help-gender": "ഈ സജ്ജീകരണം നിർബന്ധമല്ല.\nസോഫ്റ്റ്‌വെയർ ഉപയോഗിച്ച് സ്ത്രീകളേയും പുരുഷന്മാരേയും ശരിയായി സംബോധന ചെയ്യാൻ ഉപയോഗിക്കുന്നു.\nഈ വിവരം പരസ്യമായി ലഭ്യമായിരിക്കുന്നതാണ്‌.",
        "email": "ഇമെയിൽ",
-       "prefs-help-realname": "താങ്കളുടെ യഥാർത്ഥ പേര്‌ നൽകണമെന്നു നിർബന്ധമില്ല. എങ്കിലും അങ്ങനെ ചെയ്താൽ താങ്കളുടെ സംഭാവനകൾ ആ പേരിൽ അംഗീകരിക്കപ്പെടും.",
+       "prefs-help-realname": "താങ്കളുടെ യഥാർത്ഥ പേര്‌ നൽകണമെന്നു നിർബന്ധമില്ല.\nഎന്നാൽ അങ്ങനെ ചെയ്താൽ താങ്കളുടെ സംഭാവനകൾ ആ പേരിൽ അംഗീകരിക്കപ്പെടുന്നതാണ്.",
        "prefs-help-email": "ഇമെയിൽ വിലാസം നൽകണമെന്ന് നിർബന്ധമില്ല, പക്ഷേ താങ്കൾ രഹസ്യവാക്ക് മറന്നാൽ പുതിയത് അയച്ചു തരാൻ വിലാസം ആവശ്യമാണ്.",
        "prefs-help-email-others": "താങ്കൾക്കായുള്ള താളിൽ നിന്നോ, താങ്കൾക്കുള്ള സന്ദേശങ്ങളുടെ താളിൽ നിന്നോ മറ്റുപയോക്താക്കൾക്ക് താങ്കളുടെ വ്യക്തിത്വം മനസ്സിലാക്കാതെ തന്നെ താങ്കൾക്ക് സന്ദേശങ്ങളയയ്ക്കാനും ഈ സം‌വിധാനം അവസരം നൽകുന്നു.",
        "prefs-help-email-required": "ഇമെയിൽ വിലാസം ആവശ്യമാണ്‌.",
        "prefs-tokenwatchlist": "ചീട്ട്",
        "prefs-diffs": "വ്യത്യാസങ്ങൾ",
        "prefs-help-prefershttps": "താങ്കൾ അടുത്ത പ്രാവശ്യം പ്രവേശിക്കുമ്പോൾ ഇവ ഫലത്തിൽ വരുന്നതാണ്.",
+       "prefswarning-warning": "താങ്കളുടെ ക്രമീകരണങ്ങളിൽ താങ്കൾ വരുത്തിയ മാറ്റങ്ങൾ ഇതുവരെ സേവ് ചെയ്തിട്ടില്ല.\n\"$1\" ഞെക്കാതെയാണ് താങ്കൾ ഈ താളിൽ നിന്നും പോകുന്നതെങ്കിൽ താങ്കളുടെ ക്രമീകരണങ്ങൾ സേവ് ചെയ്യപ്പെടുന്നതല്ല.",
        "prefs-tabs-navigation-hint": "സൂചന: ടാബുകളുടെ പട്ടികയിലെ ടാബുകളിലൂടെ നീങ്ങാൻ ഇടത്തും വലത്തും ആരോ കീകൾ ഉപയോഗിക്കാവുന്നതാണ്.",
        "email-address-validity-valid": "സാധുതയുള്ളതെന്ന് തോന്നുന്നു",
        "email-address-validity-invalid": "സാധുതയുള്ള വിലാസം ആവശ്യമാണ്!",
        "listfiles_count": "പതിപ്പുകൾ",
        "listfiles-show-all": "ചിത്രത്തിന്റെ പഴയ പതിപ്പുകളും ഉൾപ്പെടുത്തുക",
        "listfiles-latestversion": "ഇപ്പോഴത്തെ പതിപ്പ്",
-       "listfiles-latestversion-yes": "ശരി",
-       "listfiles-latestversion-no": "à´µàµ\87à´£àµ\8dà´\9f",
+       "listfiles-latestversion-yes": "à´\85à´¤àµ\86",
+       "listfiles-latestversion-no": "à´\85à´²àµ\8dà´²",
        "file-anchor-link": "പ്രമാണം",
        "filehist": "പ്രമാണ നാൾവഴി",
        "filehist-help": "ഏതെങ്കിലും തീയതി/സമയ കണ്ണിയിൽ ഞെക്കിയാൽ പ്രസ്തുതസമയത്ത് ഈ പ്രമാണം എങ്ങനെയായിരുന്നു എന്നു കാണാം.",
        "randomincategory": "വർഗ്ഗത്തിൽ നിന്ന് ക്രമരഹിതമായി എടുക്കുന്ന താൾ",
        "randomincategory-invalidcategory": "\"$1\" സാധുതയുള്ള വർഗ്ഗത്തിന്റെ പേരല്ല.",
        "randomincategory-nopages": "[[:Category:$1|വർഗ്ഗം:$1]] എന്നതിൽ താളുകളൊന്നുമില്ല.",
+       "randomincategory-category": "വർഗ്ഗം:",
+       "randomincategory-legend": "വർഗ്ഗത്തിൽ നിന്ന് ക്രമരഹിതമായി എടുക്കുന്ന താൾ",
        "randomredirect": "ക്രമരഹിതമായ തിരിച്ചുവിടൽ",
        "randomredirect-nopages": "\"$1\" എന്ന നാമമേഖലയിൽ തിരിച്ചുവിടൽ താളുകളൊന്നുമില്ല.",
        "statistics": "സ്ഥിതിവിവരക്കണക്കുകൾ",
        "statistics-header-pages": "താൾ സ്ഥിതിവിവരക്കണക്കുകൾ",
        "statistics-header-edits": "തിരുത്തൽ സ്ഥിതിവിവരക്കണക്കുകൾ",
-       "statistics-header-views": "സന്ദർശനങ്ങളുടെ സ്ഥിതിവിവരക്കണക്കുകൾ",
        "statistics-header-users": "ഉപയോക്താക്കളുടെ സ്ഥിതിവിവരക്കണക്കുകൾ",
        "statistics-header-hooks": "മറ്റു സ്ഥിതിവിവരക്കണക്കുകൾ",
        "statistics-articles": "ലേഖനങ്ങൾ",
        "statistics-files": "അപ്‌ലോഡ് ചെയ്തിട്ടുള്ള പ്രമാണങ്ങൾ",
        "statistics-edits": "{{SITENAME}} സം‌രംഭത്തിന്റെ തുടക്കം മുതലുള്ള തിരുത്തുകൾ",
        "statistics-edits-average": "ഒരു താളിലെ ശരാശരി തിരുത്തുകൾ",
-       "statistics-views-total": "ആകെ സന്ദർശനങ്ങൾ",
-       "statistics-views-total-desc": "നിലവില്ലാത്ത താളുകളിലും പ്രത്യേക താളുകളിലും ഉള്ള എടുത്തുനോക്കലുകൾ ഉൾപ്പെടുത്തിയിട്ടില്ല",
-       "statistics-views-peredit": "ഓരോ തിരുത്തലിലും ഉള്ള എടുത്തുനോട്ടങ്ങൾ",
        "statistics-users": "അംഗത്വമെടുത്തിട്ടുള്ള [[Special:ListUsers|ഉപയോക്താക്കൾ]]",
        "statistics-users-active": "സജീവ ഉപയോക്താക്കൾ",
        "statistics-users-active-desc": "കഴിഞ്ഞ {{PLURAL:$1|ദിവസം|$1 ദിവസങ്ങൾക്കുള്ളിൽ}} പ്രവർത്തിച്ചിട്ടുള്ള ഉപയോക്താക്കൾ",
-       "statistics-mostpopular": "ഏറ്റവുമധികം സന്ദർശിക്കപ്പെട്ട താളുകൾ",
        "pageswithprop": "താളിന്റെ സവിശേഷതകളുള്ള താളുകൾ",
        "pageswithprop-legend": "ഒരു താൾ സവിശേഷതയുള്ള താളുകൾ",
        "pageswithprop-prop": "ഗുണം:",
        "uncategorizedtemplates": "വർഗ്ഗീകരിക്കാത്ത ഫലകങ്ങൾ",
        "unusedcategories": "ഉപയോഗത്തിലില്ലാത്ത വർഗ്ഗങ്ങൾ",
        "unusedimages": "ഉപയോഗിക്കപ്പെടാത്ത പ്രമാണങ്ങൾ",
-       "popularpages": "ജനപ്രിയ താളുകൾ",
        "wantedcategories": "അവശ്യ വർഗ്ഗങ്ങൾ",
        "wantedpages": "അവശ്യ താളുകൾ",
        "wantedpages-badtitle": "ഫലങ്ങളുടെ ഗണത്തിൽ അസാധുവായ തലക്കെട്ട്: $1",
        "pager-older-n": "{{PLURAL:$1|പഴയ 1|പഴയ $1}}",
        "suppress": "മേൽനോട്ടം",
        "querypage-disabled": "പ്രവർത്തനമികവിനെ ബാധിക്കുന്ന കാരണങ്ങളാൽ ഈ പ്രത്യേക താൾ പ്രവർത്തന രഹിതമാക്കിയിരിക്കുന്നു.",
+       "apihelp": "എ.പി.ഐ. സഹായം",
+       "apihelp-no-such-module": "ഘടകം \"$1\" കണ്ടെത്താനായില്ല.",
        "booksources": "പുസ്തക സ്രോതസ്സുകൾ",
        "booksources-search-legend": "പുസ്തകസ്രോതസ്സുകൾക്കായി തിരയുക",
        "booksources-isbn": "ഐ.എസ്.ബി.എൻ.:",
-       "booksources-go": "പോകൂ",
+       "booksources-search": "തിരയുക",
        "booksources-text": "പുതിയതും ഉപയോഗിച്ചതുമായ പുസ്തകങ്ങൾ വിൽക്കുന്ന സൈറ്റുകളിലേക്കുള്ള ലിങ്കുകളുടെ പട്ടിക ആണ്‌ താഴെ. താങ്കൾ തിരയുന്ന പുസ്തകത്തെ പറ്റിയുള്ള കൂടുതൽ വിവരങ്ങൾ ഈ പട്ടികയിൽ നിന്നു ലഭിച്ചേക്കാം:",
        "booksources-invalid-isbn": "തന്നിരിക്കുന്ന ഐ.എസ്.ബി.എൻ. സാധുവാണെന്നു തോന്നുന്നില്ല; യഥാർത്ഥ സ്രോതസ്സിൽ നിന്നും പകർത്തിയപ്പോൾ തെറ്റുപറ്റിയോ എന്നു പരിശോധിക്കുക",
        "specialloguserlabel": "നടപ്പിലാക്കിയയാൾ:",
        "wlheader-enotif": "ഇമെയിൽ അറിയിപ്പുകൾ സജ്ജമാക്കിയിരിക്കുന്നു.",
        "wlheader-showupdated": "താങ്കളുടെ അവസാന സന്ദർശനത്തിനു ശേഷം മാറ്റം വന്ന താളുകൾ  '''കടുപ്പിച്ച്''' കാണിച്ചിരിക്കുന്നു",
        "wlnote": "$3, $4-നു കഴിഞ്ഞ {{PLURAL:$2|മണിക്കൂറിൽ|<strong>$2</strong> മണിക്കൂറിൽ}} നടന്ന {{PLURAL:$1|ഒരു പുതിയ മാറ്റം|<strong>$1</strong> പുതിയ മാറ്റങ്ങൾ}} താഴെ പ്രദർശിപ്പിച്ചിരിക്കുന്നു.",
-       "wlshowlast": "ഒടുവിലത്തെ $1 മണിക്കൂറുകൾ $2 ദിനങ്ങൾ, $3 പ്രദർശിപ്പിക്കുക",
+       "wlshowlast": "ഒടുവിലത്തെ $1 മണിക്കൂറുകൾ $2 ദിനങ്ങൾ,  പ്രദർശിപ്പിക്കുക",
        "watchlist-options": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ സജ്ജീകരണങ്ങൾ",
        "watching": "ശ്രദ്ധിക്കുന്നു...",
        "unwatching": "അവഗണിക്കുന്നു...",
        "exbeforeblank": "ശൂന്യമാക്കപ്പെടുന്നതിനു മുമ്പുള്ള ഉള്ളടക്കം: '$1'",
        "delete-confirm": "\"$1\" മായ്ക്കുക",
        "delete-legend": "മായ്ക്കുക",
-       "historywarning": "'''മുന്നറിയിപ്പ്''': താങ്കൾ മായ്ക്കുവാൻ പോകുന്ന താളിനു ഏകദേശം {{PLURAL:$1|ഒരു നാൾപ്പതിപ്പ്|$1 നാൾപ്പതിപ്പുകൾ}} ഉള്ള നാൾവഴി ഉണ്ട്:",
+       "historywarning": "<strong>മുന്നറിയിപ്പ്</strong>: താങ്കൾ മായ്ക്കുവാൻ പോകുന്ന താളിനു {{PLURAL:$1|ഒരു നാൾപ്പതിപ്പ്|$1 നാൾപ്പതിപ്പുകൾ}} ഉള്ള നാൾവഴി ഉണ്ട്:",
        "confirmdeletetext": "താങ്കൾ ഒരു താൾ അതിന്റെ നാൾവഴിയടക്കം മായ്ക്കുവാൻ പോവുകയാണ്. ഈ ചെയ്തിയുടെ പരിണതഫലം താങ്കൾക്കറിയാമെന്നും, ഈ നടപടി [[{{MediaWiki:Policy-url}}|വിക്കിയുടെ നയം]] അനുസരിച്ചാണു ചെയ്യുന്നതെന്നും ഉറപ്പാക്കുക.",
        "actioncomplete": "പ്രവൃത്തി പൂർത്തിയായിരിക്കുന്നു",
        "actionfailed": "പ്രവൃത്തി പരാജയപ്പെട്ടിരിക്കുന്നു",
        "delete-edit-reasonlist": "മായ്ക്കലിന്റെ കാരണം തിരുത്തുക",
        "delete-toobig": "ഈ താളിനു വളരെ വിപുലമായ തിരുത്തൽ ചരിത്രമുണ്ട്. $1 മേൽ {{PLURAL:$1|പതിപ്പുണ്ട്|പതിപ്പുകളുണ്ട്}}. ഇത്തരം താളുകൾ മായ്ക്കുന്നതു {{SITENAME}} സം‌രംഭത്തിന്റെ നിലനില്പ്പിനെ തന്നെ ബാധിക്കുമെന്നതിനാൽ ഈ താൾ മായ്ക്കുന്നതിനുള്ള അവകാശം പരിമിതപ്പെടുത്തിയിരിക്കുന്നു.",
        "delete-warning-toobig": "ഈ താളിനു വളരെ വിപുലമായ തിരുത്തൽ ചരിത്രമുണ്ട്. അതായത്, ഇതിനു് $1 മേൽ {{PLURAL:$1|പതിപ്പുണ്ട്|പതിപ്പുകളുണ്ട്}}. ഇത്തരം താളുകൾ മായ്ക്കുന്നതു {{SITENAME}} സം‌രംഭത്തിന്റെ ഡാറ്റാബേസ് ഓപ്പറേഷനെ ബാധിച്ചേക്കാം. അതിനാൽ വളരെ ശ്രദ്ധാപൂർവ്വം തുടർനടപടികളിലേക്കു നീങ്ങുക.",
+       "deleteprotected": "ഈ താൾ സംരക്ഷിക്കപ്പെട്ടിരിക്കുന്നതിനാൽ താങ്കൾക്കിത് മായ്ക്കാനാവില്ല.",
        "deleting-backlinks-warning": "'''മുന്നറിയിപ്പ്:''' മറ്റു താളുകളിൽ നിന്നും [[Special:WhatLinksHere/{{FULLPAGENAME}}|താളിലേയ്ക്കുള്ള കണ്ണികൾ]] അല്ലെങ്കിൽ ഉൾപ്പെടുത്തിയിട്ടുള്ള താളുകൾ താങ്കൾ മായ്ക്കാൻ പോവുകയാണ്.",
        "rollback": "തിരുത്തുകൾ റോൾബാക്ക് ചെയ്യുക",
        "rollback_short": "റോൾബാക്ക്",
        "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** സന്ദർശകരുടെ എണ്ണം വളരെ കൂടുതലായ താൾ",
        "unblockiptext": "മുൻപ് തടയപ്പെട്ട ഐ.പി.യുടേയും ഉപയോക്താവിന്റേയും തിരുത്തൽ അവകാശം പുനഃസ്ഥാപിക്കാൻ താഴെയുള്ള ഫോം ഉപയോഗിക്കുക.",
        "ipusubmit": "ഈ വിലക്ക് ഒഴിവാക്കുക",
        "unblocked": "[[User:$1|$1]] എന്ന ഉപയോക്താവിനുണ്ടായിരുന്ന തടയൽ നീക്കിയിരിക്കുന്നു",
-       "unblocked-range": "$1 എന്ന പരിധിയുടെ തടയൽ നീക്കപ്പെട്ടിരിക്കുന്നു",
-       "unblocked-id": "$1 എന്ന തടയൽ നീക്കം ചെയ്തിരിക്കുന്നു",
+       "unblocked-range": "$1 എന്ന പരിധിയുടെ തടയൽ നീക്കിയിരിക്കുന്നു.",
+       "unblocked-id": "$1 എന്ന തടയൽ നീക്കിയിരിക്കുന്നു.",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] എന്ന വിലാസത്തിനുണ്ടായിരുന്ന തടയൽ നീക്കിയിരിക്കുന്നു.",
        "blocklist": "തടയപ്പെട്ട ഉപയോക്താക്കൾ",
        "ipblocklist": "തടയപ്പെട്ട ഉപയോക്താക്കൾ",
        "ipblocklist-legend": "തടഞ്ഞ ഒരു ഉപയോക്താവിനെ തിരയുക",
        "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-error-interwiki": "ബാഹ്യ കണ്ണിചേർക്കലിനു (അന്തർവിക്കി) കരുതിവെച്ചിരിക്കുന്ന പേര് ആയതിനാൽ, \"$1\" എന്ന താൾ ഇറക്കുമതി ചെയ്തില്ല.",
        "import-error-special": "താളുകൾ അനുവദിക്കാത്ത പ്രത്യേക നാമമേഖലയിൽ പെടുന്നതായതിനാൽ \"$1\" എന്ന താൾ ഇറക്കുമതി ചെയ്തില്ല.",
        "import-error-invalid": "ഇറക്കുമതി ചെയ്യപ്പെട്ടാൽ പേര് ഈ വിക്കിയിൽ അസാധുവാകുമെന്നതിനാൽ \"$1\" എന്ന താൾ ഇറക്കുമതി ചെയ്തില്ല.",
+       "import-error-bad-location": "ഉള്ളടക്ക മാതൃക $3 ഉപയോഗിക്കുന്ന $2 നാൾപ്പതിപ്പ്, ഈ വിക്കിയിലെ \"$1\" എന്ന താളിൽ ആ മാതൃക പിന്തുണയ്ക്കുന്നില്ലാത്തതിനാൽ ഉപയോഗിക്കാനാവില്ല.",
        "import-options-wrong": "തെറ്റായ {{PLURAL:$2|ഐച്ഛികം|ഐച്ഛികങ്ങൾ}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "നൽകിയ മൂലതാൾ അസാധുവാണ്.",
        "import-rootpage-nosubpage": "മൂലതാളിന്റെ നാമമേഖലയായ \"$1\" ഉപതാളുകൾ അനുവദിക്കുന്നില്ല.",
        "tooltip-pt-mycontris": "താങ്കളുടെ സേവനങ്ങളുടെ പട്ടിക",
        "tooltip-pt-login": "ലോഗിൻ ചെയ്യുവാൻ താല്പര്യപ്പെടുന്നു; പക്ഷേ നിർബന്ധമല്ല",
        "tooltip-pt-logout": "ലോഗൗട്ട് ചെയ്യാനുള്ള കണ്ണി",
+       "tooltip-pt-createaccount": "നിർബന്ധമില്ലെങ്കിലും, താങ്കൾ ഒരു അംഗത്വമെടുക്കണമെന്നും പ്രവേശിക്കണമെന്നും താത്പര്യപ്പെടുന്നു",
        "tooltip-ca-talk": "വിവരദായക താളിനെക്കുറിച്ചുള്ള ചർച്ച",
        "tooltip-ca-edit": "താങ്കൾക്ക് ഈ താൾ തിരുത്താവുന്നതാണ്. തിരുത്തിയ താൾ സേവ് ചെയ്യൂന്നതിനു മുൻപ് പ്രിവ്യൂ കാണുക.",
        "tooltip-ca-addsection": "പുതിയ വിഭാഗം തുടങ്ങുക",
        "tooltip-feed-atom": "ഈ താളിന്റെ ആറ്റം ഫീഡ്",
        "tooltip-t-contributions": "ഉപയോക്താവിന്റെ സംഭാവനകളുടെ പട്ടിക കാണുക",
        "tooltip-t-emailuser": "ഈ ഉപയോക്താവിനു ഇമെയിൽ അയക്കുക",
+       "tooltip-t-info": "ഈ താളിനെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾ",
        "tooltip-t-upload": "പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യുവാൻ",
        "tooltip-t-specialpages": "പ്രത്യേകതാളുകളുടെ പട്ടിക",
        "tooltip-t-print": "ഈ താളിന്റെ അച്ചടി രൂപം",
        "pageinfo-robot-policy": "റോബോട്ടുകളുടെ സൂചികാവത്കരണം",
        "pageinfo-robot-index": "അനുവദിച്ചിരിക്കുന്നു",
        "pageinfo-robot-noindex": "അനുവദിച്ചിട്ടില്ല",
-       "pageinfo-views": "എടുത്തുനോക്കലുകളുടെ എണ്ണം",
        "pageinfo-watchers": "താൾ ശ്രദ്ധിക്കുന്നവരുടെ എണ്ണം",
        "pageinfo-few-watchers": "{{PLURAL:$1|ശ്രദ്ധിക്കുന്നയാളുടെ|ശ്രദ്ധിക്കുന്നവരുടെ}} എണ്ണം $1 എണ്ണത്തിലും കുറവാണ്",
        "pageinfo-redirects-name": "ഈ താളിലേക്കുള്ള തിരിച്ചുവിടലുകളുടെ എണ്ണം",
        "exif-urgency-low": "താഴ്‌ന്നത് ($1)",
        "exif-urgency-high": "ഉന്നതം ($1)",
        "exif-urgency-other": "ഉപയോക്തൃ-നിർവചിത മുൻഗണന ($1)",
-       "watchlistall2": "എല്ലാം",
        "namespacesall": "എല്ലാം",
        "monthsall": "എല്ലാം",
        "confirmemail": "ഇമെയിൽ വിലാസം സ്ഥിരീകരിക്കൽ",
        "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-overwrite": "$1 ഒരു പുതിയ പതിപ്പ് $3 {{GENDER:$2|അപ്‌ലോഡ് ചെയ്തു}}",
        "logentry-upload-revert": "$1 $3 {{GENDER:$2|അപ്‌ലോഡ് ചെയ്തു}}",
        "rightsnone": "(ഒന്നുമില്ല)",
+       "revdelete-summary": "തിരുത്തലിന്റെ ചുരുക്കം",
        "feedback-bugornote": "സാങ്കേതിക പ്രശ്നം എന്താണെന്ന് വിവരിച്ചെഴുതാൻ താങ്കൾ തയ്യാറാണെങ്കിൽ [$1 ബഗ് അറിയിക്കുക].\nഅല്ലെങ്കിൽ താങ്കൾക്ക് താഴെ എളുപ്പത്തിനായി നൽകിയിരിക്കുന്ന ഫോം ഉപയോഗിക്കാം. താങ്കളുടെ കുറിപ്പ് \"[$3 $2]\" താളിൽ, താങ്കളുടെ ഉപയോക്തൃനാമത്തിന്റെയും ഉപയോഗിക്കുന്ന ബ്രൗസറിന്റെ പേരിന്റെയും ഒപ്പം ചേർക്കുന്നതായിരിക്കും.",
        "feedback-subject": "വിഷയം:",
        "feedback-message": "സന്ദേശം:",
        "log-name-pagelang": "ഭാഷ മാറ്റലിന്റെ രേഖ",
        "log-description-pagelang": "താളുകളുടെ ഭാഷകൾ മാറ്റിയതിന്റെ രേഖകൾ ഇവിടെക്കാണാം.",
        "logentry-pagelang-pagelang": "$3 എന്ന താളിന്റെ ഭാഷയായിരുന്ന $4, $1 $5 ആയി {{GENDER:$2|മാറ്റി}}.",
-       "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; താങ്കൾ മീഡിയവിക്കി ഇൻസ്റ്റോൾ ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: ഗിറ്റിൽ നിന്ന് അല്ലെങ്കിൽ മറ്റെങ്കിലും മാർഗ്ഗം ഉപയോഗിച്ച് സോഴ്സ് കോഡ് നേരിട്ട് ഉപയോഗിക്കുകയായിരിന്നെങ്കിൽ ഇത് സംഭവിച്ചേക്കാം. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's ദൃശ്യരൂപ ഡയറക്ടറിയിൽ നിന്ന്], ഇനിക്കൊടുക്കുന്ന മാർഗ്ഗങ്ങൾ ഉപയോഗിച്ച് ഏതാനം ദൃശ്യരൂപങ്ങൾ ഇൻസ്റ്റോൾ ചെയ്യാൻ നോക്കുക:\n:* [https://www.mediawiki.org/wiki/Download ടാർബോൾ ഇൻസ്റ്റോളർ] ഡൗൺലോഡ് ചെയ്യുക, അതിൽ നിരവധി ദൃശ്യരൂപങ്ങളും അനുബന്ധങ്ങളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു. അതിൽ നിന്നും താങ്കൾക്ക് <code>skins/</code> ഡയറക്ടറി പകർത്താവുന്നതാണ്.\n:* താങ്കളുടെ മീഡിയവിക്കി ഇൻസ്റ്റലേഷന്റെ <code>skins/</code> ഡയറക്ടറിയിലേക്ക് ഗിറ്റ് ഉപയോഗിച്ച് <code>mediawiki/skins/*</code> റെപ്പോസിറ്ററികളിലൊന്ന് ക്ലോൺ ചെയ്യുക.\n: താങ്കളൊരു മീഡിയവിക്കി ഡവലപ്പറാണെങ്കിൽ ഇത് താങ്കളുടെ ഗിറ്റ് ഡെപ്പോസിറ്ററിയെ ബാധിക്കുന്നതല്ല.\n\n; മീഡിയവിക്കി താങ്കൾ അപ്ഗ്രേഡ് ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: മീഡിയവിക്കി 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; താങ്കൾ മീഡിയവിക്കി ഇൻസ്റ്റോൾ ചെയ്തതേ അല്ലെങ്കിൽ അപ്‌ഗ്രേഡ് ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: ഗിറ്റിൽ നിന്ന് അല്ലെങ്കിൽ മറ്റെങ്കിലും മാർഗ്ഗം ഉപയോഗിച്ച് സോഴ്സ് കോഡ് നേരിട്ട് ഉപയോഗിക്കുകയായിരിന്നെങ്കിൽ ഇത് സംഭവിച്ചേക്കാം. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's ദൃശ്യരൂപ ഡയറക്ടറിയിൽ നിന്ന്], ഇനിക്കൊടുക്കുന്ന മാർഗ്ഗങ്ങൾ ഉപയോഗിച്ച് ഏതാനം ദൃശ്യരൂപങ്ങൾ ഇൻസ്റ്റോൾ ചെയ്യാൻ നോക്കുക:\n:* [https://www.mediawiki.org/wiki/Download ടാർബോൾ ഇൻസ്റ്റോളർ] ഡൗൺലോഡ് ചെയ്യുക, അതിൽ നിരവധി ദൃശ്യരൂപങ്ങളും അനുബന്ധങ്ങളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു. അതിൽ നിന്നും താങ്കൾക്ക് <code>skins/</code> ഡയറക്ടറി പകർത്താവുന്നതാണ്.\n:* താങ്കളുടെ മീഡിയവിക്കി ഇൻസ്റ്റലേഷന്റെ <code>skins/</code> ഡയറക്ടറിയിലേക്ക് ഗിറ്റ് ഉപയോഗിച്ച് <code>mediawiki/skins/*</code> റെപ്പോസിറ്ററികളിലൊന്ന് ക്ലോൺ ചെയ്യുക.\n: താങ്കളൊരു മീഡിയവിക്കി ഡവലപ്പറാണെങ്കിൽ ഇത് താങ്കളുടെ ഗിറ്റ് ഡെപ്പോസിറ്ററിയെ ബാധിക്കുന്നതല്ല. ദൃശ്യരൂപങ്ങൾ എങ്ങനെ ക്രമീകരിക്കാം എന്നും സ്വതേ വേണ്ടത് എങ്ങനെ സജ്ജമാക്കാം എന്നും [https://www.mediawiki.org/wiki/Manual:Skin_configuration ദൃശ്യരൂപം സജ്ജമാക്കൽ സഹായിയിൽ] കാണുക.",
+       "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's ദൃശ്യരൂപ ഡയറക്ടറിയിൽ നിന്ന്], ഇനിക്കൊടുക്കുന്ന മാർഗ്ഗങ്ങൾ ഉപയോഗിച്ച് ഏതാനം ദൃശ്യരൂപങ്ങൾ ഇൻസ്റ്റോൾ ചെയ്യാൻ നോക്കുക:\n:* [https://www.mediawiki.org/wiki/Download ടാർബോൾ ഇൻസ്റ്റോളർ] ഡൗൺലോഡ് ചെയ്യുക, അതിൽ നിരവധി ദൃശ്യരൂപങ്ങളും അനുബന്ധങ്ങളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു. അതിൽ നിന്നും താങ്കൾക്ക് <code>skins/</code> ഡയറക്ടറി പകർത്താവുന്നതാണ്.\n:* താങ്കളുടെ മീഡിയവിക്കി ഇൻസ്റ്റലേഷന്റെ <code dir=\"ltr\">skins/</code> ഡയറക്ടറിയിലേക്ക് ഗിറ്റ് ഉപയോഗിച്ച് <code>mediawiki/skins/*</code> റെപ്പോസിറ്ററികളിലൊന്ന് ക്ലോൺ ചെയ്യുക.\n: താങ്കളൊരു മീഡിയവിക്കി ഡവലപ്പറാണെങ്കിൽ ഇത് താങ്കളുടെ ഗിറ്റ് ഡെപ്പോസിറ്ററിയെ ബാധിക്കുന്നതല്ല.\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-no-skins": "അയ്യോ! <code dir=\"ltr\"> $wgDefaultSkin</code> നിർവചിക്കപ്പെട്ടതുപ്രകാരമുള്ള താങ്കളുടെ വിക്കിയുടെ സ്വതേയുള്ള ദൃശ്യരൂപമായ <code>$1</code>, ലഭ്യമല്ല.\n\nതാങ്കൾ ദൃശ്യരൂപങ്ങളൊന്നും ഇൻസ്റ്റോൾ ചെയ്തിട്ടില്ല.\n\n; താങ്കൾ മീഡിയവിക്കി ഇൻസ്റ്റോൾ ചെയ്തതേ അല്ലെങ്കിൽ അപ്‌ഗ്രേഡ് ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: ഗിറ്റിൽ നിന്ന് അല്ലെങ്കിൽ മറ്റെങ്കിലും മാർഗ്ഗം ഉപയോഗിച്ച് സോഴ്സ് കോഡ് നേരിട്ട് ഉപയോഗിക്കുകയായിരിന്നെങ്കിൽ ഇത് സംഭവിച്ചേക്കാം. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's ദൃശ്യരൂപ ഡയറക്ടറിയിൽ നിന്ന്], ഇനിക്കൊടുക്കുന്ന മാർഗ്ഗങ്ങൾ ഉപയോഗിച്ച് ഏതാനം ദൃശ്യരൂപങ്ങൾ ഇൻസ്റ്റോൾ ചെയ്യാൻ നോക്കുക:\n:* [https://www.mediawiki.org/wiki/Download ടാർബോൾ ഇൻസ്റ്റോളർ] ഡൗൺലോഡ് ചെയ്യുക, അതിൽ നിരവധി ദൃശ്യരൂപങ്ങളും അനുബന്ധങ്ങളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു. അതിൽ നിന്നും താങ്കൾക്ക് <code>skins/</code> ഡയറക്ടറി പകർത്താവുന്നതാണ്.\n:* താങ്കളുടെ മീഡിയവിക്കി ഇൻസ്റ്റലേഷന്റെ <code dir=\"ltr\">skins/</code> ഡയറക്ടറിയിലേക്ക് ഗിറ്റ് ഉപയോഗിച്ച് <code>mediawiki/skins/*</code> റെപ്പോസിറ്ററികളിലൊന്ന് ക്ലോൺ ചെയ്യുക.\n: താങ്കളൊരു മീഡിയവിക്കി ഡവലപ്പറാണെങ്കിൽ ഇത് താങ്കളുടെ ഗിറ്റ് ഡെപ്പോസിറ്ററിയെ ബാധിക്കുന്നതല്ല. ദൃശ്യരൂപങ്ങൾ എങ്ങനെ ക്രമീകരിക്കാം എന്നും സ്വതേ വേണ്ടത് എങ്ങനെ സജ്ജമാക്കാം എന്നും [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 ('''സജ്ജമല്ല''')",
+       "mediastatistics": "മീഡിയ സ്ഥിതിവിവരക്കണക്കുകൾ",
+       "mediastatistics-summary": "അപ്‌ലോഡ് ചെയ്തിട്ടുള്ള പ്രമാണ തരങ്ങളെക്കുറിച്ചുള്ള സ്ഥിതിവിവരക്കണക്കുകൾ. ഇത് പ്രമാണത്തിന്റെ ഏറ്റവും പുതിയ പതിപ്പ് മാത്രമേ ഉൾക്കൊള്ളുന്നുള്ളു. പഴയ അഥവാ മായ്ക്കപ്പെട്ട പ്രമാണപതിപ്പുകൾ ഉൾക്കൊള്ളുന്നില്ല.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|ഒരു ബൈറ്റ്|$1 ബൈറ്റ്}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "മൈം(MIME) തരം",
+       "mediastatistics-table-extensions": "സാദ്ധ്യതയുള്ള എക്സ്റ്റെൻഷനുകൾ",
+       "mediastatistics-table-count": "പ്രമാണങ്ങളുടെ എണ്ണം",
+       "mediastatistics-table-totalbytes": "ആകെ വലിപ്പം",
+       "mediastatistics-header-unknown": "അജ്ഞാതം",
+       "mediastatistics-header-bitmap": "ബിറ്റ്മാപ് ചിത്രങ്ങൾ",
+       "mediastatistics-header-drawing": "വരകൾ (വെക്റ്റർ ചിത്രങ്ങൾ)",
+       "mediastatistics-header-audio": "ശബ്ദം",
+       "mediastatistics-header-video": "ചലച്ചിത്രങ്ങൾ",
+       "mediastatistics-header-multimedia": "റിച്ച് മീഡിയ",
+       "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-depth": "സ്റ്റാക്കിന്റെ പരമാവധി ആഴം അധികരിച്ചിരിക്കുന്നു",
+       "json-error-state-mismatch": "അസാധുവായ അല്ലെങ്കിൽ തെറ്റായവിധത്തിലുള്ള ജെസൺ",
+       "json-error-ctrl-char": "കണ്ട്രോൾ കാരക്ടർ പിഴവ്, മിക്കവാറും തെറ്റായി എൻകോഡ് ചെയ്യപ്പെട്ടത്",
+       "json-error-syntax": "എഴുത്തുരീതിയിൽ പിഴവ്",
+       "json-error-utf8": "തെറ്റായരൂപത്തിലുള്ള UTF-8 അക്ഷരങ്ങൾ, മിക്കവാറും തെറ്റായി എൻകോഡ് ചെയ്യപ്പെട്ടവ",
+       "json-error-recursion": "എൻകോഡ് ചെയ്യേണ്ട വിലയിൽ ഒന്നോ അതിലധികമോ പുനരാവർത്തിത സൂചകങ്ങൾ",
+       "json-error-inf-or-nan": "എൻകോഡ് ചെയ്യേണ്ട വിലയിൽ ഒന്നോ അതിലധികമോ NAN അല്ലെങ്കിൽ INF വിലകൾ"
 }
index 195552a..dc2cd22 100644 (file)
        "hidetoc": "хумих",
        "collapsible-collapse": "хумих",
        "collapsible-expand": "дэлгэх",
+       "confirmable-confirm": "{{GENDER:$1|Та}} итгэлтэй байна уу?",
+       "confirmable-yes": "Тийм",
+       "confirmable-no": "Үгүй",
        "thisisdeleted": "$1-г харах эсвэл сэргээх үү?",
        "viewdeleted": "$1-г харах уу?",
        "restorelink": "{{PLURAL:$1|арилгасан засвар|арилгасан $1 засварууд}}",
        "passwordreset-emailsent-capture": "Доор харуулснаар цахим шуудангийн сануулгыг явууллаа.",
        "passwordreset-emailerror-capture": "Цахим шуудангийн сануулга доор харуулсны дагуу хийгдсан боловч $1 хэрэглэгчид хүрч чадсангүй, алдаа гарлаа.",
        "changeemail": "Цахим шуудангийн хаяг солих",
-       "changeemail-header": "Цахим шуудангийн бүртгэлийн хаяг солих",
        "changeemail-text": "Энэ маягтийг бөглөж цахим шуудангийн хаягаа солино уу. Өөрчлөлт хийхийн тулд нууц үгээ оруулна уу.",
        "changeemail-no-info": "Энэ хуудсыг үзэхэд хэрэглэгчийн нэрээр орсон байх шаардлагатай.",
        "changeemail-oldemail": "Одоогийн цахим шуудан:",
        "changeemail-none": "(байхгүй)",
        "changeemail-password": "{{SITENAME}} дахь таны нууц үг:",
        "changeemail-submit": "Цахим шуудан солих",
-       "changeemail-cancel": "Цуцал",
        "bold_sample": "Тодруулсан бичиг",
        "bold_tip": "Тодруулсан бичиг",
        "italic_sample": "Налуу бичиг",
        "mergehistory-same-destination": "Эх үүсвэр ба зорих хуудсууд ижил байж болохгүй",
        "mergehistory-reason": "Шалтгаан:",
        "mergelog": "Нэгтгэлийн лог",
-       "pagemerge-logentry": "[[$1]]-г [[$2]] руу нэгтгэлээ ($3 хүртэлх засварууд)",
        "revertmerge": "Нэгтгэлийг буцаах",
        "mergelogpagetext": "Доорх нь нэг хуудасны түүхийг өөр түүхтэй нэгтгэсэн хамгийн сүүлийн нэгтгэлүүд юм.",
        "history-title": "\"$1\"-н хянасан түүх",
        "searchrelated": "холбоотой",
        "searchall": "бүгдийг",
        "showingresults": "Доор #'''$2'''-с эхлэсэн '''$1''' илэрцийг үзүүлж байна.",
-       "showingresultsheader": "'''$4''' хайлтын {{PLURAL:$5|'''$3'''-н '''$1''' үр дүн|'''$3'''-н '''$1 - $2''' үр дүн}}",
        "search-nonefound": "Хайлтад таарсан үр дүн илэрсэнгүй.",
        "powersearch-legend": "Сонгосон хайлт",
        "powersearch-ns": "Дараах нэрний зайнуудад хайх:",
        "preferences": "Хэрэглэгчийн тохиргоо",
        "mypreferences": "Миний тохиргоо",
        "prefs-edits": "Засваруудын тоо:",
+       "prefsnologintext2": "Өөрийн тохиргоогоо өөрчлөхийн тулд логин хийнэ үү.",
        "prefs-skin": "Арьс",
        "skin-preview": "Урьдчилж харах",
        "datedefault": "Анхны байдал",
        "unusedtemplateswlh": "бусад холбоосууд",
        "randompage": "Санамсаргүй хуудас",
        "randompage-nopages": "Дараах {{PLURAL:$2|нэрний зайнд|нэрний зайнд}} хуудас байхгүй байна : $1. \\",
+       "randomincategory-category": "Ангилал:",
+       "randomincategory-legend": "Ангилалд багтсан дурын хуудас",
        "randomredirect": "Санамсаргүй чиглүүлэгч",
        "randomredirect-nopages": "\"$1\" нэрний зайд чиглүүлэгч байхгүй байна.",
        "statistics": "Статистик мэдээлэл",
        "statistics-header-pages": "Хуудасны статистик",
        "statistics-header-edits": "Засварын статистик",
-       "statistics-header-views": "Статистикийг үзэх",
        "statistics-header-users": "Хэрэглэгчийн статистик",
        "statistics-header-hooks": "Өөр статистик",
        "statistics-articles": "Агуулгын хуудас",
        "statistics-files": "Оруулсан файл",
        "statistics-edits": "{{SITENAME}} ашиглаланд орсоноос хойших хуудасны засварын тоо",
        "statistics-edits-average": "Хуудас тутмын дундаж засварын тоо",
-       "statistics-views-total": "Нийт үзсэн тоо",
-       "statistics-views-peredit": "Засвар тутмыг үзсэн тоо",
        "statistics-users": "Бүртгэгдсэн [[Special:ListUsers|хэрэглэгч]]",
        "statistics-users-active": "Байнгын оролцоотой хэрэглэгч",
        "statistics-users-active-desc": "Сүүлийн {{PLURAL:$1|өдөрт|$1 өдөрт}} үйлдэл хийсэн хэрэглэгчид",
-       "statistics-mostpopular": "Хамгийн олон удаа үзсэн хуудсууд",
        "doubleredirects": "Давхар чиглүүлэгчүүд",
        "doubleredirectstext": "Энэ хуудсанд өөр хуудсуудыг давхар заасан хуудсуудыг жагсаасан байна\nМөр тус бүр нь эхний заасан болон түүний дараах заасан хуудсуудыг жагсаан бичсэний сацуу уг хоёр хуудсын эцсийн чиглүүлсэн \"жинхэнэ\" хуудсыг үзүүлсэн байна.",
        "double-redirect-fixed-move": "[[$1]] зөөгдөж, [[$2]] руух чиглүүлэгч боллоо",
        "uncategorizedtemplates": "Ангилагдаагүй загварууд",
        "unusedcategories": "Хоосон анги",
        "unusedimages": "Ашиглагдаагүй файлууд",
-       "popularpages": "Эрэлттэй хуудсууд",
        "wantedcategories": "Хэрэгцээт ангиллууд",
        "wantedpages": "Хэрэгцээтэй хуудсууд",
        "wantedpages-badtitle": "Үр дүнд хүчингүй гарчиг байв: $1",
        "suppress": "Хянан зохицуулагч",
        "booksources": "Номон эх сурвалжууд",
        "booksources-search-legend": "Номын эх сурвалж хайх",
-       "booksources-go": "Үзэх",
        "booksources-text": "Доорх нь шинэ, хуучин ном зардаг өөр сайт руу очих холбоосуудын жагсаалт бөгөөд таны хайж буй номнуудын тухай дэлгэрэнгүй мэдээлэл байх магадлалтай:",
        "booksources-invalid-isbn": "Өгөгдсөн ISBN хүчингүй юм шиг байна; эх сурвалжаас зөв хуулсан эсэхээ шалгана уу.",
        "specialloguserlabel": "Гүйцэтгэсэн:",
        "wlheader-enotif": "И-мэйл мэдэгдэл хүчинтэй боллоо.",
        "wlheader-showupdated": "Таны хамгийн сүүлд айлчилснаас хойш өөрчлөгдсөн хуудсууд '''тодоор''' бичигдсэн байгаа",
        "wlnote": "Энд нь {{PLURAL:$2|цагийн|'''$2''' цагийн}} өмнө хамгийн сүүлд хийсэн {{PLURAL:$1|өөрчлөлт| '''$1''' өөрчлөлтүүд}} байна.",
-       "wlshowlast": "Сүүлийн $1 цагийн $2 өдрийн $3-г харуул",
+       "wlshowlast": "Сүүлийн $1 цагийн $2 өдрийн -г харуул",
        "watchlist-options": "Хянаж буй хуудсуудын жагсаалтны сонголтууд",
        "watching": "Хянаж байна...",
        "unwatching": "Хянахаа больж байна...",
        "delete-edit-reasonlist": "Устгах шалтгаануудыг засварлах",
        "delete-toobig": "Уг хуудасны засварын түүх маш их, $1 {{PLURAL:$1|засвар|гаруй засвартай}} байна.\n{{SITENAME}}-н аюулгүй байдлын үүднээс дээрх хуудсыг устгахыг хорьсон байна.",
        "delete-warning-toobig": "Энэ хуудасны засварын түүх маш том байгаа бөгөөд {{PLURAL:$1| гаруй засвар| гаруй засварууд}} байна.\nУстгавал {{SITENAME}}-н мэдээллийн сангийн үйл ажиллагаанд нөлөөлж магадгүй тул та анхаарна уу.",
+       "deleteprotected": "Энэ хуудас хамгаалалттай тул устгаж болохгүй.",
        "rollback": "Засваруудыг буцаах",
        "rollback_short": "Буцаах",
        "rollbacklink": "буцаах",
        "whatlinkshere-filters": "Шүүлтүүрүүд",
        "block": "Хэрэглэгчийг блок хийх",
        "unblock": "Хэрэглэгчийг блокоос гаргах",
-       "blockip": "Хэрэглэгчийг түгжих",
+       "blockip": "{{GENDER:$1|хэрэглэгчийн}} түгжих",
        "blockip-legend": "Хэрэглэгчийг түгжих",
        "blockiptext": "Доорх маягтыг ашиглан тодорхой IP хаяг эсвэл хэрэглэгчийн нэрийг засвар хийхээс түгжинэ үү.\nЭнэ нь зөвхөн вандализм үйлдэх явдлаас сэргийлэхийн тулд, [[{{MediaWiki:Policy-url}}|бодлого, баримтлалын]] дагуу хийгдэх ёстой.\nДоор тодорхой шалтгаанаа бичнэ үү.",
        "ipaddressorusername": "IP хаяг буюу хэрэглэгчийн нэр",
        "ipb-unblock-addr": "$1-н түгжээг тайлах",
        "ipb-unblock": "Хэрэглэгчийн нэр эсвэл IP хаягийн түгжээг тайлах",
        "ipb-blocklist": "Байгаа түгжээнүүдийг харах",
-       "ipb-blocklist-contribs": "$1-н хувь нэмэр",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}}-н хувь нэмэр",
        "unblockip": "Хэрэглэгчийг идэвхижүүлэх",
        "unblockiptext": "Өмнө нь хориг тавьсан интернет хаяг юм уу хэрэглэгчийн бичих эрхийг сэргээхийн тулд дорх маягтыг ашигла.",
        "ipusubmit": "Энэ түгжээг цуцлах",
        "import": "Хуудаснуудыг импортлох",
        "importinterwiki": "Транс-викигийн импорт",
        "import-interwiki-text": "Импортлох вики болон хуудасны нэрийг сонгоно уу.\nЗасварын огноонууд болон засварлагчдын нэрс хэвээр үлдэнэ.\n[[Special:Log/import|Импортын логоос]] бүх транс-викигийн үйлдлүүд жагсаагдсан байгаа.",
-       "import-interwiki-source": "Эх үүсвэр вики/хуудас:",
+       "import-interwiki-sourcewiki": "wiki -ын эх сурвалж:",
+       "import-interwiki-sourcepage": "Эх хуудас:",
        "import-interwiki-history": "Энэ хуудсын бүх хувилбаруудын түүхийг хуулах",
        "import-interwiki-templates": "Бүх загварыг оруулах",
        "import-interwiki-submit": "Импортлох",
        "pageinfo-default-sort": "Үндсэн ангилах түлхүүр",
        "pageinfo-length": "Хуудасны урт (байтаар)",
        "pageinfo-article-id": "Хуудасны ID",
-       "pageinfo-views": "Харагдацуудын тоо",
        "pageinfo-watchers": "Хуудас хянагчдын тоо",
        "pageinfo-subpages-name": "Үүний дэд хуудас",
        "pageinfo-firstuser": "Хуудас үүсгэсэн",
        "exif-iimcategory-spo": "Спорт",
        "exif-iimcategory-war": "Дайн, мөргөлдөөн ба үймээн самуун",
        "exif-iimcategory-wea": "Цаг агаар",
-       "watchlistall2": "бүгдийг",
        "namespacesall": "бүгдийг",
        "monthsall": "бүх сар",
        "confirmemail": "Мэйл хаягийг баталгаажуулах",
        "logentry-rights-rights-legacy": "$1 $3 дэхь грүпийн гишүүнчлэлээ сольсон",
        "logentry-rights-autopromote": "$1 $4 аас $5 руу автоматаар дэвшигдлээ",
        "rightsnone": "(байхгүй)",
+       "revdelete-summary": "засварын товч агуулга",
        "feedback-cancel": "Болих",
        "feedback-close": "Болсон",
        "searchsuggest-search": "Хайх",
index 2b258aa..64e73ff 100644 (file)
@@ -3,9 +3,12 @@
                "authors": [
                        "Comp1089",
                        "Node ue",
-                       "לערי ריינהארט"
+                       "לערי ריינהארט",
+                       "TheChampionMan1234",
+                       "아라"
                ]
        },
+       "tog-hideminor": "Аскунде модификэриле миноре ын щимбэре реченте",
        "sun": "Дум",
        "january": "януарие",
        "february": "фебруарие",
@@ -92,7 +95,7 @@
        "disclaimers": "Деклараций",
        "disclaimerpage": "Project:Декларацие ӂенералэ",
        "edithelp": "Ажутор пентру едитаре",
-       "mainpage": "Прима паӂина",
+       "mainpage": "Паӂина принчипалэ",
        "mainpage-description": "Прима паӂина",
        "privacy": "Политика де интимитате",
        "privacypage": "Project:Политика де интимитате",
        "editlink": "едитязэ",
        "viewsourcelink": "везь сурса",
        "editsectionhint": "Едитязэ секциуня: $1",
-       "toc": "ТаблÑ\8d Ð´Ðµ Ð¼Ð°Ñ\82еÑ\80ий",
+       "toc": "Ð\9aÑ\83пÑ\80инÑ\81",
        "showtoc": "аратэ",
        "hidetoc": "аскунде",
        "site-rss-feed": "$1 Агрегат RSS",
        "search-interwiki-more": "(май мулт)",
        "powersearch-legend": "Кэутаре авансатэ",
        "powersearch-ns": "Кэутаре ын спацииле де нуме:",
-       "powersearch-redir": "Афишазэ редиректэриле",
        "preferences": "Преферинце",
        "mypreferences": "Преферинцеле меле",
        "group-sysop": "Администраторь",
        "recentchanges": "Скимбэрь реченте",
        "recentchanges-legend": "Опциунь скимбэрь реченте",
        "recentchanges-feed-description": "Привеште челе май реченте скимбэрь фолосинд ачест агрегат.",
-       "rclistfrom": "Аратэ модификэриле ынчепынд де ла $1",
+       "rclistfrom": "Аратэ модификэриле ынчепынд де ла $3 $2",
        "rcshowhideminor": "$1 модификэриле миноре",
        "rcshowhidebots": "$1 ботурь",
        "rcshowhideliu": "$1 утилизаторь аутентификаць",
        "recentchangeslinked-page": "Нумеле паӂиний:",
        "recentchangeslinked-to": "Афишазэ скимбэриле ын паӂиниле каре се лягэ де паӂина датэ",
        "upload": "Тримите фишиер",
-       "uploadedimage": "а ынкэркат «[[$1]]»",
        "file-anchor-link": "Фишиер",
        "filehist": "Историкул фишиерулуй",
        "filehist-help": "Апасэ пе '''Дата ши ора''' пентру а ведя версиуня тримисэ атунчь.",
        "pager-newer-n": "{{PLURAL:$1|1 май ноу|$1 май ной}}",
        "pager-older-n": "{{PLURAL:$1|1|$1}} май векь",
        "booksources": "Сурсе де кэрць",
-       "booksources-go": "Ду-те",
        "log": "Журнале",
        "allpages": "Тоате паӂиниле",
-       "alphaindexline": "$1 пынэ ла $2",
        "prevpage": "Паӂина антериоарэ ($1)",
        "allpagesfrom": "Афишазэ паӂиниле порнинд де ла:",
        "allpagesto": "Афишазэ паӂиниле терминынд де ла:",
        "watch": "Привеште",
        "watchthispage": "Привеште ачастэ паӂинэ",
        "unwatch": "Ну май привеште",
-       "wlshowlast": "Аратэ ултимеле $1 оре $2 зиле $3",
+       "wlshowlast": "Аратэ ултимеле $1 оре $2 зиле",
        "watchlist-options": "Опциуниле листей де паӂинь привите",
        "watching": "Привинд...",
        "unwatching": "Ну май привинд...",
        "metadata-help": "Ачест фишиер концине информаций суплиментаре, интродусе пробабил де апаратул фотографик диӂитал сау сканерул каре л-а ӂенерат.\nДакэ фишиерул а фост модификат ынтре тимп, есте посибил ка унеле деталий сэ ну май фие валабиле.",
        "metadata-expand": "Афишазэ деталий суплиментаре",
        "metadata-collapse": "Аскунде деталий суплиментаре",
-       "watchlistall2": "тоате",
        "namespacesall": "тоате",
        "monthsall": "тоате",
        "watchlisttools-view": "Везь скимбэриле релеванте",
index 942ddb7..e584443 100644 (file)
        "passwordreset-emailsent-capture": "'परवलीचा शब्द' पुनर्स्थापनेबाबत एक विपत्र पाठवण्यात आले आहे जे खाली दर्शविण्यात आले आहे.",
        "passwordreset-emailerror-capture": "'परवलीचा शब्द' पुनर्स्थापनेबाबत एक विपत्र निर्माण करण्यात आले, जे खाली दर्शविण्यात आले आहे.परंतु,{{GENDER:$2|सदस्य}}ला पाठविणे असफल झाले: $1",
        "changeemail": "ई-मेल पत्ता बदला",
-       "changeemail-header": "आपल्या खात्याचा ईमेल पत्ता बदला.",
        "changeemail-text": "आपला ई-मेल पत्त बदलण्यासाठी हे आवेदनपत्र भरा. या बदलाची पुष्टी करण्यासाठी तुम्हाला तुमचा परवलीचा शब्द टाकावा लागेल.",
        "changeemail-no-info": "हे पान थेट बघण्यासठी तुम्हाला सनोंद-प्रवेशित असावे लागेल.",
        "changeemail-oldemail": "सध्याचा ईमेल पत्ता :",
        "changeemail-none": "(काहीही नाही)",
        "changeemail-password": "तुमचा {{SITENAME}} संकेतांक:",
        "changeemail-submit": "ईमेल बदला",
-       "changeemail-cancel": "रद्द करा",
        "changeemail-throttled": "तुम्ही नुकतेच सनोंद- प्रवेशासाठी अनेक प्रयत्न केले आहेत.\nकृपया, पुन्हा प्रयत्न करण्याआधी $1 थोडी उसंत घ्या.",
        "resettokens": "ओळखचिन्ह(टोकन) पुनर्स्थापित करा",
        "resettokens-text": "येथे आपल्या खात्यात असलेला व्यक्तिगत मजकूरापर्यंत पोचण्यासाठी आपण ओळखचिन्ह(टोकन) पुनर्स्थापित करू शकता.\nआपण जर तो अपघाताने कोणासमवेत सहभागीला असेल किंवा आपले खात्याची आपण तडजोड केली असल्यास, हे करावयास हवे.",
        "mergehistory-same-destination": "स्रोत व लक्ष्यपाने सारखीच असू शकत नाहीत",
        "mergehistory-reason": "कारण:",
        "mergelog": "नोंदी एकत्र करा",
-       "pagemerge-logentry": "[[$2]]मध्ये[[$1]] समाविष्ट केले ($3पर्यंतची आवर्तने)",
        "revertmerge": "अविलीन करा",
        "mergelogpagetext": "एका पानाचा इतिहास इतर पानात टाकून अगदी अलीकडे एकत्रित केलेली एकत्रिकरणे निम्न्दर्शीत सूचीमध्ये आहेत.",
        "history-title": "\"$1\" चा संपादन इतिहास",
        "searchall": "सर्व",
        "showingresults": "#'''$2'''पासून {{PLURAL:$1|'''1'''पर्यंतचा निकाल|'''$1'''पर्यंतचे निकाल}} खाली दाखवले आहे.",
        "showingresultsinrange": "खाली #<strong>$2</strong> ते #<strong>$3</strong> पर्यंतच्या कक्षेतील {{PLURAL:$1|<strong>१</strong> निकाल दाखविला आहे|<strong>$1</strong> निकाल दाखविले आहेत}}.",
-       "showingresultsheader": "'''$4''' साठी {{PLURAL:$5|'''$3'''पैकी '''$1''' निकाल|'''$3''' पैकी '''$1 - $2''' निकाल}}",
        "search-nonefound": "दिलेल्या पृच्छेशी जुळणारे निकाल नाहीत.",
        "powersearch-legend": "प्रगत शोध",
        "powersearch-ns": "नामविश्वांमध्ये शोधा:",
        "randomincategory": "वर्गातील अनियत पान",
        "randomincategory-invalidcategory": "\"$1\" हे अधिकृत वर्गाचे नाव नाही.",
        "randomincategory-nopages": "[[:Category:$1]] यात काहीच पाने नाहीत.",
-       "randomincategory-selectcategory": "वर्ग: $1 $2 मधून अनियत पान उपलब्ध करा.",
-       "randomincategory-selectcategory-submit": "जा",
        "randomredirect": "अविशिष्ट पुनर्निर्देशन",
        "randomredirect-nopages": "$1 या नामविश्वात कोणतीही पुर्ननिर्देशने नाहीत.",
        "statistics": "सांख्यिकी",
        "statistics-header-pages": "पृष्ठ सांख्यिकी",
        "statistics-header-edits": "संपादन सांख्यिकी",
-       "statistics-header-views": "सांख्यिकी पहा",
        "statistics-header-users": "सदस्य सांख्यिकी",
        "statistics-header-hooks": "इतर सांख्यिकी",
        "statistics-articles": "आशय पाने",
        "statistics-files": "अपभारीत संचिका",
        "statistics-edits": "{{SITENAME}} च्या सुरुवातीपासूनची पानांची संपादने",
        "statistics-edits-average": "प्रतिपान सरासरी संपादने",
-       "statistics-views-total": "सर्व दाखवते",
-       "statistics-views-total-desc": "अस्तित्वात नसलेली पाने व विशेष पाने यांची दृष्यता यात अंतर्भूत नाही",
-       "statistics-views-peredit": "प्रति संपादनामागे पाहणे",
        "statistics-users": "नोंदणीकृत [[Special:ListUsers|सदस्य]]",
        "statistics-users-active": "कार्यरत सदस्य",
        "statistics-users-active-desc": "{{PLURAL:$1|शेवटच्या दिवसात|शेवटच्या $1 दिवसांत}} एकतरी संपादन केलेले सदस्य",
-       "statistics-mostpopular": "सर्वाधिक बघितली जाणारी पाने",
        "pageswithprop": "'पृष्ठ गुणधर्म' असणारी पाने",
        "pageswithprop-legend": "पृष्ठ गुणधर्म असणारी पाने",
        "pageswithprop-text": "या पानावर अश्या पानांची यादी आहे जे एक विशिष्ट 'पृष्ठ गुणधर्म'  वापरतात.",
        "uncategorizedtemplates": "अवर्गीकृत साचे",
        "unusedcategories": "न वापरलेले वर्ग",
        "unusedimages": "न वापरलेल्या संचिका",
-       "popularpages": "प्रसिद्ध पाने",
        "wantedcategories": "पाहिजे असलेले वर्ग",
        "wantedpages": "पाहिजे असलेले लेख",
        "wantedpages-badtitle": "परिणामाच्या यादीत अवैध शीर्षक: $1",
        "querypage-disabled": "हे विषेश पान कार्यमापन (performance) करणांमुळे प्रतिबंधित करण्यात आले आहे.",
        "booksources": "पुस्तक स्रोत",
        "booksources-search-legend": "पुस्तक स्रोत शोधा",
-       "booksources-go": "चला",
        "booksources-text": "खालील यादीत नवी आणिजुनी पुस्तके विकणाऱ्या संकेतस्थळाचे दुवे आहेत,आणि त्यात कदाचित आपण शोधू पहात असलेल्या पुस्तकाची अधिक माहिती असेल:",
        "booksources-invalid-isbn": "दिलेला आयएसबीएन वैध नाही; मूळ स्रोतातून उतरवताना झालेल्या चुकांचे निरसन करा.",
        "specialloguserlabel": "कार्यकर्ता:",
        "wlheader-enotif": "विपत्र अधिसूचना सुविधा शक्य केली.",
        "wlheader-showupdated": "ती पाने, जी आपण दिलेल्या शेवटच्या भेटीनंतर बदललेली आहेत, '''ठळक''' दाखवली आहेत.",
        "wlnote": "खाली $3, $4 पर्यंतचे गेल्या {{PLURAL:$2| '''१''' तासातील|'''$2''' तासातील}} {{PLURAL:$1|शेवटचा बदल दिला आहे|शेवटाचे '''$1'''बदल दिले आहेत}}.",
-       "wlshowlast": "मागील $1 तास $2 दिवस $3 पहा",
+       "wlshowlast": "मागील $1 तास $2 दिवस  पहा",
        "watchlist-options": "पहाऱ्याच्या सूचीचे पर्याय",
        "watching": "पहारा देत आहे...",
        "unwatching": "पहारा काढत आहे...",
        "import": "पाने आयात करा",
        "importinterwiki": "आंतरविकि आयात",
        "import-interwiki-text": "आयात करण्याकरिता एक विकि आणि पानाचा मथळा निवडा.\nआवर्तनांच्या तारखा आणि संपादकांची नावे जतन केली जातील.\nसर्व आंतरविकि आयात क्रिया [[Special:Log/import|आयात नोंदीत]] दाखल केल्या आहेत.",
-       "import-interwiki-source": "स्रोत विकी / पान:",
        "import-interwiki-history": "या पानाकरिताची साऱ्या इतिहास आवर्तनांची नक्कल करा",
        "import-interwiki-templates": "साचे आंतरभूत करा",
        "import-interwiki-submit": "आयात",
        "pageinfo-robot-policy": "यंत्रमानवाद्वारे अनुक्रमन",
        "pageinfo-robot-index": "अनुमती दिली",
        "pageinfo-robot-noindex": "अनुमती दिल्या जात नाही",
-       "pageinfo-views": "अभिप्रायांची संख्या",
        "pageinfo-watchers": "पानावर पहारा देणाऱ्यांची संख्या",
        "pageinfo-few-watchers": "$1 पेक्षा कमी {{PLURAL:$1|पहारेदार}}",
        "pageinfo-redirects-name": "या पानास असलेली  पुनर्निर्देशनांची संख्या",
        "exif-aperturevalue": "रन्ध्र",
        "exif-brightnessvalue": "झळाळी",
        "exif-exposurebiasvalue": "प्रभावन अभिनत (एक्सपोजर बायस)",
-       "exif-maxaperturevalue": "महतà¥\8dतम à¤\9cमिनà¥\80 à¤°à¤¨à¥\8dधà¥\8dर(लà¥\85à¤\82ड ऍपर्चर)",
+       "exif-maxaperturevalue": "महतà¥\8dतम à¤\9cमिनà¥\80 à¤°à¤¨à¥\8dधà¥\8dर(लà¤\81ड ऍपर्चर)",
        "exif-subjectdistance": "गोष्टीपासूनचे अंतर",
        "exif-meteringmode": "मीटरींग मोड",
        "exif-lightsource": "प्रकाश स्रोत",
        "exif-exposureprogram-5": "क्रियेटीव्ह कार्यक्रम(विषयाच्या खोलीस बायस्ड)",
        "exif-exposureprogram-6": "कृती कार्यक्रम(द्रूत आवर्तद्वार(शटर) वेग कडे बायस्ड)",
        "exif-exposureprogram-7": "व्यक्तिचित्र स्थिती(क्लोजप छायाचित्रांकरिता आऊट ऑफ फोकस बॅकग्राऊंड सहीत)",
-       "exif-exposureprogram-8": "लà¥\85à¤\82डसà¥\8dà¤\95à¥\87प à¤¸à¥\8dथितà¥\80 (लà¥\85à¤\82डस्केप छायाचित्रांकरिता बॅकग्राऊंड इन फोकस सहीत)",
+       "exif-exposureprogram-8": "लà¤\81डसà¥\8dà¤\95à¥\87प à¤¸à¥\8dथितà¥\80 (लà¤\81डस्केप छायाचित्रांकरिता बॅकग्राऊंड इन फोकस सहीत)",
        "exif-subjectdistance-value": "$1 मीटर",
        "exif-meteringmode-0": "अज्ञात",
        "exif-meteringmode-1": "सरासरी",
        "exif-urgency-low": "नीचतम ($1)",
        "exif-urgency-high": "उच्चतम ($1)",
        "exif-urgency-other": "($1) उपयोगकर्ता-निश्चित  प्राधान्य",
-       "watchlistall2": "सर्व",
        "namespacesall": "सर्व",
        "monthsall": "सर्व",
        "confirmemail": "ई-मेल पत्ता पडताळून पहा",
        "version-variables": "चल",
        "version-antispam": "उत्पात प्रतिबंधन",
        "version-other": "इतर",
-       "version-mediahandlers": "मिडिया à¤¹à¥\85à¤\82डलर",
+       "version-mediahandlers": "मिडिया à¤¹à¤\81डलर",
        "version-hooks": "अंकुश",
        "version-parser-extensiontags": "पृथकक विस्तारीत खूणा",
        "version-parser-function-hooks": "पृथकक कार्य अंकुश",
        "logentry-rights-rights-legacy": "$1 ने $3 साठी गट सदस्यता {{GENDER:$2|बदलली}}",
        "logentry-rights-autopromote": "$1 ला स्वयंचलितरित्या $4 वरुन $5 ला {{GENDER:$2|बढती दिल्या गेली}}",
        "rightsnone": "(काहीही नाही)",
+       "revdelete-summary": "संपादन माहिती",
        "feedback-bugornote": "जर आपण तांत्रिक प्रश्न  विस्तृतपणे मांडण्यास तयार असाल तर कृपया [$1 गणकदोष वृतांत] पाठवा. नपेक्षा, खाली देण्यात आलेले सोपे आवेदनपत्र वापरा. आपली टिप्पणी \"[$3 $2]\" या पानास आपले सदस्यनाव व आपण कोणता ब्राउजर वापरता यासह जोडण्यात येईल.",
        "feedback-subject": "विषय:",
        "feedback-message": "संदेश:",
index d78e552..bf16968 100644 (file)
        "pager-older-n": "{{PLURAL:$1|тоштырак|тоштыраквлӓ гӹц|тоштыраквлӓ}} $1",
        "booksources": "Книгӓн кӹлвлӓжӹ (источник)",
        "booksources-search-legend": "Книгӓ гишӓн информацим кӹчӓлмӓш",
-       "booksources-go": "Моаш",
        "log": "Журналвлӓ",
        "allpages": "Цилӓ ӹлӹштӓш",
        "prevpage": "Анзыл ӹлӹштӓш ($1)",
        "watchthispage": "Ти ӹлӹштӓшӹм вӓнгӓш",
        "unwatch": "Вӓнгӓш агыл",
        "watchlist-details": "Тӓмдӓн вӓнгӹмӹ списокыштыда $1 {{PLURAL:$1|ӹлӹштӓш|ӹлӹштӓш|ӹлӹштӓшвлӓ}}, Кӓнгӓшӹмӓш ӹлыштӓшвлӓ гӹц пасна.",
-       "wlshowlast": "Анжыкташ эртӹш  $1 час $2 кечӹвлӓн $3",
+       "wlshowlast": "Анжыкташ эртӹш  $1 час $2 кечӹвлӓн",
        "watchlist-options": "Вӓнгӹмӹ списокын настройкыжы",
        "watching": "Вӓнгӹмӹ списокыш пырташ...",
        "unwatching": "Вӓнгӹмӹ список гӹц карангдаш...",
        "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",
-       "watchlistall2": "цилӓ",
        "namespacesall": "цилӓ",
        "monthsall": "цилӓ",
        "watchlisttools-view": "Список гӹц нӓлмӹ ӹлӹштӓшӹштӹш вашталтымашвлӓ",
index 3a21c39..e9504f5 100644 (file)
@@ -22,8 +22,8 @@
                ]
        },
        "tog-underline": "Garis bawah pautan:",
-       "tog-hideminor": "Sembunyikan suntingan kecil dalam perubahan terkini",
-       "tog-hidepatrolled": "Sorokkan suntingan yang telah dironda daripada perubahan terkini",
+       "tog-hideminor": "Sembunyikan suntingan kecil daripada perubahan terkini",
+       "tog-hidepatrolled": "Sembunyikan suntingan yang telah dironda daripada perubahan terkini",
        "tog-newpageshidepatrolled": "Sorokkan laman yang telah dironda daripada senarai laman baru",
        "tog-extendwatchlist": "Kembangkan senarai pantau untuk memaparkan semua perubahan, bukan hanya yang terkini",
        "tog-usenewrc": "Kumpulkan perubahan mengikut laman dalam perubahan terkini dan senarai pantau",
        "tog-showtoolbar": "Tunjukkan palang alat sunting",
        "tog-editondblclick": "Dwiklik untuk menyunting laman",
        "tog-editsectiononrightclick": "Bolehkan penyuntingan bahagian dengan mengklik kanan pada tajuk bahagian",
-       "tog-watchcreations": "Tambahkan laman-laman yang saya mencipta dan fail-fail yang saya memuat naik ke dalam senarai pantau saya",
-       "tog-watchdefault": "Tambahkan laman-laman dan fail-fail yang saya menyunting ke dalam senarai pantau saya",
-       "tog-watchmoves": "Tambahkan laman-laman dan fail-fail yang saya memindah ke dalam senarai pantau saya",
-       "tog-watchdeletion": "Tambahkan laman-laman dan fail-fail yang saya menghapus ke dalam senarai pantau saya",
-       "tog-watchrollback": "Tambahkan laman-laman di mana saya telah membuat unduran ke senarai pantau saya",
-       "tog-minordefault": "Tandakan semua suntingan sebagai kecil secara asli",
+       "tog-watchcreations": "Tambahkan laman-laman yang saya cipta dan fail-fail yang saya muat naik ke dalam senarai pantau saya",
+       "tog-watchdefault": "Tambahkan laman-laman dan fail-fail yang saya sunting ke dalam senarai pantau saya",
+       "tog-watchmoves": "Tambahkan laman-laman dan fail-fail yang saya pindah ke dalam senarai pantau saya",
+       "tog-watchdeletion": "Tambahkan laman-laman dan fail-fail yang saya hapuskan ke dalam senarai pantau saya",
+       "tog-watchrollback": "Tambahkan laman-laman yang saya undurkan ke dalam senarai pantau saya",
+       "tog-minordefault": "Tandakan semua suntingan sebagai kecil secara lalai",
        "tog-previewontop": "Tunjukkan pralihat di atas kotak sunting",
        "tog-previewonfirst": "Tunjukkan pralihat pada suntingan pertama",
-       "tog-enotifwatchlistpages": "E-melkan saya apabila sebuah laman atau fail dalam senarai pantau saya telah diubahkan",
-       "tog-enotifusertalkpages": "E-melkan saya apabila laman perbincangan saya telah diubahkan",
+       "tog-enotifwatchlistpages": "E-melkan saya apabila sebuah laman atau fail dalam senarai pantau saya diubah",
+       "tog-enotifusertalkpages": "E-melkan saya apabila laman perbincangan saya diubah",
        "tog-enotifminoredits": "Juga e-melkan saya untuk suntingan-suntingan laman dan fail yang kecil",
        "tog-enotifrevealaddr": "Serlahkan alamat e-mel saya dalam e-mel pemberitahuan",
        "tog-shownumberswatching": "Tunjukkan bilangan pemantau",
-       "tog-oldsig": "Tandatangan yang sedia ada:",
+       "tog-oldsig": "Tanda tangan yang sedia ada:",
        "tog-fancysig": "Anggap tandatangan sebagai teks wiki (tanpa pautan automatik)",
        "tog-uselivepreview": "Gunakan pralihat langsung (dalam percubaan)",
        "tog-forceeditsummary": "Tanya saya jika ringkasan suntingan kosong",
        "tog-watchlisthideown": "Sembunyikan suntingan saya daripada senarai pantau",
        "tog-watchlisthidebots": "Sembunyikan suntingan bot daripada senarai pantau",
        "tog-watchlisthideminor": "Sembunyikan suntingan kecil daripada senarai pantau",
-       "tog-watchlisthideliu": "Sembunyikan suntingan oleh pengguna yang dilog masuk daripada senarai pantau",
+       "tog-watchlisthideliu": "Sembunyikan suntingan oleh pengguna yang telah log masuk daripada senarai pantau",
        "tog-watchlisthideanons": "Sembunyikan suntingan oleh pengguna tanpa nama daripada senarai pantau",
        "tog-watchlisthidepatrolled": "Sembunyikan suntingan yang telah dironda daripada senarai pantau",
        "tog-ccmeonemails": "Kirimkan saya salinan e-mel yang saya hantar kepada pengguna lain",
        "tog-diffonly": "Jangan tunjukkan kandungan laman di bawah perbezaan",
        "tog-showhiddencats": "Tunjukkan kategori tersembunyi",
        "tog-norollbackdiff": "Abaikan perbezaan selepas melakukan pengunduran suntingan.",
-       "tog-useeditwarning": "Beri saya amaran apabila saya meninggalkan sesebuah laman penyuntingan tanpa menyimpan perubahan.",
+       "tog-useeditwarning": "Berikan saya amaran apabila saya meninggalkan sesebuah laman penyuntingan tanpa menyimpan perubahan",
        "tog-prefershttps": "Sentiasa gunakan sambungan terlindung apabila log masuk",
        "underline-always": "Sentiasa",
        "underline-never": "Jangan",
        "otherlanguages": "Dalam bahasa lain",
        "redirectedfrom": "(Dilencongkan dari $1)",
        "redirectpagesub": "Laman lencongan",
+       "redirectto": "Lencong ke:",
        "lastmodifiedat": "Laman ini diubah buat kali terakhir pada $2, $1.",
        "viewcount": "Laman ini telah dilihat {{PLURAL:$1|sekali|sebanyak $1 kali}}.",
        "protectedpage": "Laman dilindungi",
        "viewsourcetext": "Anda boleh melihat dan menyalin sumber bagi laman ini:",
        "viewyourtext": "Anda boleh melihat dan menyalin sumber '''suntingan anda''' kepada laman ini:",
        "protectedinterface": "Laman ini menyediakan teks antara muka bagi perisian ini, akan tetapi dikunci untuk menghalang penyalahgunaan.\nUntuk menambah atau menyunting terjemahan untuk semua wiki, sila gunakan projek penyetempatan MediaWiki, [//translatewiki.net/ translatewiki.net].",
-       "editinginterface": "'''Amaran:''' Anda sedang menyunting laman yang digunakan untuk menghasilkan teks antara muka bagi perisian ini. Sebarang perubahan terhadap laman ini akan menjejaskan rupa antara muka bagi pengguna-pengguna lain di wiki ini.\nUntuk menambah atau menyunting terjemahan untuk semua wiki, sila gunakan projek penyetempatan MediaWiki, [//translatewiki.net/ translatewiki.net].",
+       "editinginterface": "<strong>Amaran:</strong> Anda sedang menyunting halaman yang digunakan untuk menyediakan teks antaramuka untuk perisian berkenaan.\nSebarang suntingan ke atas halaman ini akan memberikan kesan kepada penampilan antaramuka pengguna bagi pengguna-pengguna lain wiki ini.",
+       "translateinterface": "Untuk menambah atau menyunting terjemahan untuk kesemua wiki, sila gunakan [//translatewiki.net/ translatewiki.net], iaitu projek penyetempatan MediaWiki.",
        "cascadeprotected": "Laman ini telah dilindungi daripada penyuntingan oleh pengguna selain penyelia, kerana ia termasuk dalam {{PLURAL:$1|laman|laman-laman}} berikut, yang dilindungi dengan secara \"melata\": $2",
        "namespaceprotected": "Anda tidak mempunyai keizinan untuk menyunting laman dalam ruang nama '''$1'''.",
        "customcssprotected": "Anda tidak dibenarkan menyunting laman JavaScript ini kerana ia mengandungi tetapan peribadi pengguna lain.",
        "createaccount-text": "Seseorang telah membuka akaun untuk\nalamat e-mel anda di {{SITENAME}} ($4) dengan nama \"$2\" dan kata laluan \"$3\".\nAnda boleh log masuk dan tukar kata laluan anda sekarang.\n\nSila abaikan mesej ini jika anda tidak meminta untuk membuka akaun tersebut.",
        "login-throttled": "Anda telah mencuba log masuk berulang kali.\nSila tunggu $1 dan cuba lagi.",
        "login-abort-generic": "Log masuk anda tidak berjaya, dan terpaksa dibatalkan",
+       "login-migrated-generic": "Akaun anda telah dipindahkan dan nama pengguna anda tidak lagi wujud di wiki ini.",
        "loginlanguagelabel": "Bahasa: $1",
        "suspicious-userlogout": "Permintaan anda untuk log keluar ditolak kerana ia kelihatan seperti dihantar oleh pelayar rosak atau proksi pengagregatan.",
        "createacct-another-realname-tip": "Nama sebenar adalah tidak wajib.\nJika anda memilih untuk menyatakannya, ini akan digunakan untuk memberikan atribusi kepada pengguna atas sumbangan mereka.",
        "passwordreset-emailsent-capture": "E-mel set semula kata laluan telah dihantar, seperti yang dipaparkan di bawah.",
        "passwordreset-emailerror-capture": "E-mel set semula kata laluan telah dihasilkan, seperti yang dipaparkan di bawah, tetapi tidak berjaya dihantar kepada {{GENDER:$2|pengguna}} berkenaan: $1",
        "changeemail": "Tukar alamat e-mel",
-       "changeemail-header": "Tukar alamat e-mel akaun",
        "changeemail-text": "Lengkapkan borang ini untuk menukar alamat e-mel anda. Anda akan perlu mengisikan kata laluan untuk mengesahkan perubahan ini.",
        "changeemail-no-info": "Anda hendaklah log masuk terlebih dahulu untuk mencapai laman ini secara terus.",
        "changeemail-oldemail": "Alamat e-mel sekarang:",
        "changeemail-none": "(tiada)",
        "changeemail-password": "Kata laluan anda di {{SITENAME}}:",
        "changeemail-submit": "Tukar E-mel",
-       "changeemail-cancel": "Batalkan",
        "changeemail-throttled": "Anda telah melakukan terlalu banyak cubaan log masuk.\nSila tunggu $1 dan cuba lagi.",
        "resettokens": "Set semula token",
        "resettokens-text": "Anda boleh mengeset semula token yang membolehkan akses kepada data peribadi tertentu yang berkaitan dengan akaun anda di sini.\n\nAnda harus melakukannya jika anda tanpa sengaja mengongsinya dengan sesiapa ataupun akaun anda telah dikompromi.",
        "showpreview": "Paparkan pralihat",
        "showdiff": "Lihat perubahan",
        "blankarticle": "<strong>Amaran:</strong> Laman yang anda sedang menciptakan adalah kosong.\nJika akan menklik \"{{int:savearticle}}\" sekali lagi, laman ini akan diciptakan tanpa sebarang kandungan.",
-       "anoneditwarning": "'''Amaran:''' Anda tidak log masuk. Alamat IP anda akan direkodkan dalam sejarah suntingan laman ini.",
+       "anoneditwarning": "<strong>Amaran:</strong> Anda tidak log masuk. Alamat IP anda akan disiarkan kepada umum jika anda membuat sebarang suntingan. Jika anda <strong>[$1 log masuk]</strong> atau <strong>[$2 membuka akaun]</strong>, suntingan anda akan diatribusikan kepada nama pengguna anda di samping manfaat-manfaat lain.",
        "anonpreviewwarning": "''Anda belum log masuk. Jika anda menyimpan laman ini, alamat IP anda akan direkodkan dalam sejarah penyuntingan laman ini.''",
        "missingsummary": "'''Peringatan:''' Anda tidak menyatakan ringkasan suntingan. Klik '''Simpan''' sekali lagi untuk menyimpan suntingan ini tanpa ringkasan.",
        "missingcommenttext": "Sila masukkan komen dalam ruangan di bawah.",
        "content-model-text": "teks biasa",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Laman yang menggunakan argumen pendua dalam panggilan templat",
+       "duplicate-args-category-desc": "Laman ini mengandungi panggilan templat yang menggunakan pendua argumen seperti <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> atau <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Amaran: Laman ini mengandungi terlalu banyak panggilan fungsi penghurai yang intensif.\n\nHad panggilan ialah $2, sekarang terdapat $1 panggilan.",
        "expensive-parserfunction-category": "Laman yang mengandungi terlalu banyak panggilan fungsi penghurai yang intensif",
        "post-expand-template-inclusion-warning": "Amaran: Saiz penyertaan templat terlalu besar.\nSesetengah templat tidak akan disertakan.",
        "mergehistory-same-destination": "Laman sasaran tidak boleh sama dengan laman sumber",
        "mergehistory-reason": "Sebab:",
        "mergelog": "Log penggabungan",
-       "pagemerge-logentry": "menggabungkan [[$1]] ke dalam [[$2]] (semakan sehingga $3)",
        "revertmerge": "Pisahkan",
        "mergelogpagetext": "Yang berikut ialah senarai terkini bagi penggabungan sejarah sesebuah laman ke dalam laman yang lain.",
        "history-title": "Sejarah semakan bagi \"$1\"",
        "search-result-category-size": "$1 {{PLURAL:$1|ahli|ahli}} ($2 {{PLURAL:$2|subkategori|subkategori}}, $3 {{PLURAL:$3|fail|fail}})",
        "search-redirect": "(pelencongan $1)",
        "search-section": "(bahagian $1)",
+       "search-category": "(kategori $1)",
        "search-file-match": "(sepadan dengan kandungan fail)",
        "search-suggest": "Maksud anda, $1?",
        "search-interwiki-caption": "Projek-projek lain",
        "searchall": "semua",
        "showingresults": "Yang berikut ialah '''$1''' hasil bermula daripada yang {{PLURAL:$2|pertama|ke-'''$2'''}}.",
        "showingresultsinrange": "Yang berikut adalah {{PLURAL:$1|<strong>satu</strong> hasil|sebanyak <strong>$1</strong> hasil}} dalam julat #<strong>$2</strong> hingga #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Keputusan '''$1''' daripada '''$3'''|Keputusan '''$1 - $2''' daripada '''$3'''}} untuk '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Hasil <strong>$1</strong> / <strong>$3</strong>|Hasil <strong>$1 - $2</strong> / <strong>$3</strong>}}",
        "search-nonefound": "Tiada hasil yang sepadan dengan pertanyaan.",
        "powersearch-legend": "Carian lanjutan",
        "powersearch-ns": "Cari dalam ruang nama:",
        "gender-female": "Perempuan",
        "prefs-help-gender": "Pilihan: Digunakan oleh perisian ini untuk merujuk jantina anda dengan betul. Maklumat ini akan didedahkan kepada awam.",
        "email": "E-mel",
-       "prefs-help-realname": "Nama sebenar adalah tidak wajib. Jika dinyatakan, ia akan digunakan untuk mengiktiraf karya anda.",
+       "prefs-help-realname": "Nama sebenar adalah tidak wajib.\n\nJika dinyatakan, ia akan digunakan untuk mengiktiraf karya anda.",
        "prefs-help-email": "Alamat e-mail adalah tidak wajib, tapi diperlukan untuk set semula kata laluan jika anda terlupa kata laluan anda.",
        "prefs-help-email-others": "Anda juga boleh memilih untuk membolehkan pengguna lain menghubungi anda melalui e-mel melalui sebuah pautan pada laman pengguna atau perbincangan anda.\nAlamat e-mel anda tidak didedahkan apabila pengguna lain menghubungi anda.",
        "prefs-help-email-required": "Alamat e-mel adalah wajib.",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Beza",
        "prefs-help-prefershttps": "Keutamaan inu akan berkuatkuasa pada lain kali anda log masuk.",
+       "prefswarning-warning": "Anda telah mengubah suai keutamaan anda yang belum disimpan.\nJika anda meninggalkan laman ini tanpa mengklik \"$1\", keutamaan anda tidak akan disimpan.",
        "prefs-tabs-navigation-hint": "Petua: Anda boleh menggunakan kekunci anak panah kiri atau kanan untuk beralihan dari tab ke tab pada senarai tab.",
        "email-address-validity-valid": "Alamat e-mel adalah sah",
        "email-address-validity-invalid": "Sila masukkan alamat e-mel yang sah",
        "statistics": "Statistik",
        "statistics-header-pages": "Statistik halaman",
        "statistics-header-edits": "Statistik suntingan",
-       "statistics-header-views": "Statistik pandangan",
        "statistics-header-users": "Statistik pengguna",
        "statistics-header-hooks": "Statistik lain",
        "statistics-articles": "Laman kandungan",
        "statistics-files": "Fail dimuat naik",
        "statistics-edits": "Suntingan laman sejak {{SITENAME}} dibuka",
        "statistics-edits-average": "Purata suntingan bagi setiap laman",
-       "statistics-views-total": "Jumlah pandangan",
-       "statistics-views-total-desc": "Paparan ke laman-laman yang tidak wujud dan laman-laman khas tidak disertakan",
-       "statistics-views-peredit": "Pandangan setiap suntingan",
        "statistics-users": "[[Special:ListUsers|Pengguna]] berdaftar",
        "statistics-users-active": "Pengguna aktif",
        "statistics-users-active-desc": "Pengguna yang aktif sejak {{PLURAL:$1|semalam|$1 hari lalu}}",
-       "statistics-mostpopular": "Laman dilihat terbanyak",
        "pageswithprop": "Laman dengan sifat laman",
        "pageswithprop-legend": "Laman dengan sifat laman",
        "pageswithprop-text": "Halaman ini menyenaraikan halaman-halaman yang menggunakan sifat halaman yang tertentu.",
        "uncategorizedtemplates": "Templat tanpa kategori",
        "unusedcategories": "Kategori tidak digunakan",
        "unusedimages": "Imej tidak digunakan",
-       "popularpages": "Laman popular",
        "wantedcategories": "Kategori dikehendaki",
        "wantedpages": "Laman dikehendaki",
        "wantedpages-badtitle": "Tajuk tidak sah dalam set keputusan: $1",
        "pager-older-n": "{{PLURAL:$1|$1 sebelumnya}}",
        "suppress": "Kawalan",
        "querypage-disabled": "Laman khas ini dilumpuhkan atas sebab-sebab prestasi.",
+       "apihelp": "Bantuan API",
+       "apihelp-no-such-module": "Modul \"$1\" tidak dijumpai.",
        "booksources": "Sumber buku",
        "booksources-search-legend": "Cari sumber buku",
-       "booksources-go": "Pergi",
+       "booksources-search": "Cari",
        "booksources-text": "Yang berikut ialah senarai pautan ke tapak web lain yang menjual buku baru dan terpakai,\nserta mungkin mempunyai maklumat lanjut mengenai buku yang anda cari:",
        "booksources-invalid-isbn": "ISBN yang dinyatakan tidak sah. Sila semak sekali lagi.",
        "specialloguserlabel": "Pelaku:",
        "watchlist-details": "$1 laman dipantau ,tidak termasuk laman perbincangan.",
        "wlheader-enotif": "Pemberitahuan melalui e-mel dibolehkan.",
        "wlheader-showupdated": "Laman-laman yang telah diubah sejak kunjungan terakhir anda dipaparkan dalam '''teks tebal'''.",
-       "wlnote": "Berikut adalah {{PLURAL:$1|perubahan|<strong>$1</strong> perubahan}} yang terkini dalam {{PLURAL:$2|sejam|<strong>$2</strong> jam}} yang lalu, tepat pada $3, $4.",
-       "wlshowlast": "Tunjukkan $1 jam / $2 hari yang lalu / $3.",
+       "wlnote": "Yang berikut ialah <strong>$1</strong> perubahan terakhir sejak $2 jam yang lalu, sehingga $3, $4.",
+       "wlshowlast": "Tunjukkan $2 hari $1 jam yang lalu",
        "watchlist-options": "Pilihan senarai pantau",
        "watching": "Memantau...",
        "unwatching": "Menyahpantau...",
        "protect-othertime": "Waktu lain:",
        "protect-othertime-op": "waktu lain",
        "protect-existing-expiry": "Waktu tamat yang telah ditetapkan: $2, $3",
+       "protect-existing-expiry-infinity": "Waktu tamat tempoh sedia ada: tidak terhingga",
        "protect-otherreason": "Sebab lain/tambahan:",
        "protect-otherreason-op": "Sebab lain",
        "protect-dropdown": "*Sebab lazim\n** Laku musnah berlebihan\n** Spam berlebihan\n** Perang sunting yang tidak membina\n** Laman yang terlalu ramai pelawat",
        "unblocked": "[[User:$1|$1]] telah dinyahsekat",
        "unblocked-range": "$1 telah dinyahsekat",
        "unblocked-id": "Sekatan $1 telah dibuang",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] telah dinyahsekat.",
        "blocklist": "Pengguna yang disekat",
        "ipblocklist": "Alamat IP dan nama pengguna yang disekat",
        "ipblocklist-legend": "Cari pengguna yang disekat",
        "tooltip-pt-mycontris": "Senarai sumbangan anda",
        "tooltip-pt-login": "Walaupun tidak wajib, anda digalakkan supaya log masuk.",
        "tooltip-pt-logout": "Log keluar",
+       "tooltip-pt-createaccount": "Anda digalakkan untuk membuka akaun dan log masuk; namun begitu ianya tidak diwajibkan",
        "tooltip-ca-talk": "Perbincangan mengenai laman kandungan",
        "tooltip-ca-edit": "Anda boleh menyunting laman ini. Sila tekan butang 'pralihat' terlebih dahulu sebelum menyimpan.",
        "tooltip-ca-addsection": "Buka bahagian baru",
        "tooltip-feed-atom": "Suapan Atom bagi laman ini",
        "tooltip-t-contributions": "Lihat senarai sumbangan pengguna ini",
        "tooltip-t-emailuser": "Kirim e-mel kepada pengguna ini",
+       "tooltip-t-info": "Maklumat lanjut mengenai laman ini",
        "tooltip-t-upload": "Muat naik imej atau fail media",
        "tooltip-t-specialpages": "Senarai laman khas",
        "tooltip-t-print": "Versi boleh cetak bagi laman ini",
        "pageinfo-robot-policy": "Indeks oleh robot",
        "pageinfo-robot-index": "Dibenarkan",
        "pageinfo-robot-noindex": "Tidak dibenarkan",
-       "pageinfo-views": "Bilangan kunjungan",
        "pageinfo-watchers": "Bilangan pemantau halaman",
        "pageinfo-few-watchers": "Kurang daripada $1 orang pemantau",
        "pageinfo-redirects-name": "Jumlah lencongan ke laman ini",
        "exif-urgency-low": "Rendah ($1)",
        "exif-urgency-high": "Tinggi ($1)",
        "exif-urgency-other": "Keutamaan tentuan pengguna ($1)",
-       "watchlistall2": "semua",
        "namespacesall": "semua",
        "monthsall": "semua",
        "confirmemail": "Sahkan alamat e-mel",
        "unknown_extension_tag": "Tag penyambung \"$1\" tidak dikenali",
        "duplicate-defaultsort": "'''Amaran''': Kunci susunan asali \"$2\" membatalkan kunci susunan asali \"$1\" yang sebelumnya.",
        "duplicate-displaytitle": "<strong>Amaran:</strong> Tajuk paparan \"$2\" mengatasi tajuk paparan awal \"$1\".",
+       "invalid-indicator-name": "<strong>Ramat:</strong> Atribut <code>name</code> penanda status halaman tidak boleh dibiarkan kosong.",
        "version": "Versi",
        "version-extensions": "Penyambung yang dipasang",
        "version-skins": "Rupa-rupa yang telah dipasangkan",
        "revdelete-uname-unhid": "nama pengguna terdedah",
        "revdelete-restricted": "mengenakan sekatan pada penyelia",
        "revdelete-unrestricted": "menarik sekatan daripada penyelia",
+       "logentry-merge-merge": "$1 telah {{GENDER:$2|menggabungkan}} $3 ke dalam $4 (pindaan sehingga $5)",
        "logentry-move-move": "$1 telah {{GENDER:$2|memindahkan}} laman $3 ke $4",
        "logentry-move-move-noredirect": "$1 telah {{GENDER:$2|memindahkan}} laman $3 ke $4 tanpa meninggalkan lencongan",
        "logentry-move-move_redir": "$1 telah {{GENDER:$2|memindahkan}} laman $3 ke $4 melalui lencongan",
        "logentry-upload-overwrite": "$1 telah {{GENDER:$2|muat naik}} versi baru $3",
        "logentry-upload-revert": "$1 telah {{GENDER:$2|muat naik}} $3",
        "rightsnone": "(tiada)",
+       "revdelete-summary": "ringkasan",
        "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:",
        "api-error-stashfailed": "Ralat dalaman: pelayan tidak dapat menyimpan fail sementara.",
        "api-error-publishfailed": "Ralat dalaman: Pelayan tidak dapat menerbitkan fail sementara.",
        "api-error-stasherror": "Terdapat ralat ketika menyimpan fail yang dimuat naik.",
+       "api-error-stashedfilenotfound": "Fail yang disimpan tidak dijumpai apabila cuba untuk memuat naik dari simpanan.",
+       "api-error-stashpathinvalid": "Laluan di mana fail disimpan sepatutnya didapati tidak sah.",
+       "api-error-stashfilestorage": "Terdapat ralat semasa menyimpan fail dalam simpanan.",
+       "api-error-stashzerolength": "Pelayan tidak dapat menyimpan fail, kerana ia mempunyai panjang sifar.",
        "api-error-timeout": "Pelayan tidak bergerak balas dalam tempoh yang diharapkan.",
        "api-error-unclassified": "Berlakunya ralat yang tidak diketahui",
        "api-error-unknown-code": "Ralat tidak diketahui: \"$1\"",
        "log-name-pagelang": "Log perubahan bahasa",
        "log-description-pagelang": "Ini adalah log untuk perubahan-perubahan bahasa laman.",
        "logentry-pagelang-pagelang": "$1 telah {{GENDER:$2|mengubahkan}} bahasa untuk laman $3 dari $4 ke $5.",
-       "default-skin-not-found": "Whoops! Rupa asli untuk wiki anda (<code>$wgDefaultSkin</code>), <code>$1</code>, tidak disediakan.\n\nPasangan anda kelihatan untuk mempunyai rupa-rupa berikut. Lihat [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] untuk maklumat cara membolehkan mereka dan memilih yang asli.\n\n$2\n\n; Jika anda baru sahaja memasang MediaWiki:\n: Anda kemungkinan memasang dari git, atau terus dari kod sumber melalui cara lain. Ini adalah dijangka. Cubalah memasang beberapa rupa dari [https://www.mediawiki.org/wiki/Category:All_skins panduan rupa mediawiki.org], dengan:\n:* Memuat turun [https://www.mediawiki.org/wiki/Download pemasang tarball] yang terlengkap dengan beberapa rupa dan sambungan. Anda boleh menyalin dan menampal direktori <code>skins/</code> terus darinya.\n:* Mengeklon salah satu repositori <code>mediawiki/skins/*</code> melalui git ke dalam direktori <code>skins/</code> pasangan MediaWiki anda.\n: Perbuatan ini tidak patut mengganggu repositori git anda jika anda seorang pembangun MediaWiki.\n\n; Jika anda baru sahaja menaik taraf MediaWiki:\n: MediaWiki 1.24 dan ke atas tidak lagi membolehkan rupa-rupa yang dipasang secara automatik (lihat [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual:Skin autodiscovery]). Anda boleh menampalkan baris-baris berikut ke dalam <code>LocalSettings.php</code> untuk membolehkan semua rupa yang semasa dipasang:\n\n<pre>$3</pre>\n\n; Jika anda baru sahaja mengubah <code>LocalSettings.php</code>:\n: Semakkan lagi nama-nama rupa untuk kesalahan ejaan.",
-       "default-skin-not-found-no-skins": "Whoops! Rupa asli untuk wiki anda (<code>$wgDefaultSkin</code>), <code>$1</code>, tidak disediakan.\n\nAnda tidak mempunyai rupa-rupa yang dipasang.\n\n; Jika anda baru sahaja memasang atau menaik taraf MediaWiki:\n: Anda kemungkinan memasang dari git, atau terus dari kod sumber melalui cara lain. Ini adalah dijangka. MediaWiki 1.24 dan ke atas tidak memasuki sebarang rupa dalam repositori utama. Cubalah memasang beberapa rupa dari [https://www.mediawiki.org/wiki/Category:All_skins panduan rupa mediawiki.org], dengan:\n:* Memuat turun [https://www.mediawiki.org/wiki/Download pemasang tarball] yang terlengkap dengan beberapa rupa dan sambungan. Anda boleh menyalin dan menampal direktori <code>skins/</code> terus darinya.\n:* Mengeklon salah satu repositori <code>mediawiki/skins/*</code> melalui git ke dalam direktori <code>skins/</code> pasangan MediaWiki anda.\n: Perbuatan ini tidak patut mengganggu repositori git anda jika anda seorang pembangun MediaWiki. Lihat [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] untuk maklumat cara membolehkan mereka dan memilih yang asli.",
+       "default-skin-not-found": "Whoops! Rupa asli untuk wiki anda yang tertakrif dalam <code dir=\"ltr\">$wgDefaultSkin</code> sebagai <code>$1</code>, tidak disediakan.\n\nPasangan anda kelihatan untuk mempunyai rupa-rupa berikut. Lihat [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] untuk maklumat cara membolehkan mereka dan memilih yang asli.\n\n$2\n\n; Jika anda baru sahaja memasang MediaWiki:\n: Anda kemungkinan memasang dari git, atau terus dari kod sumber melalui cara lain. Ini adalah dijangka. Cubalah memasang beberapa rupa dari [https://www.mediawiki.org/wiki/Category:All_skins panduan rupa mediawiki.org], dengan:\n:* Memuat turun [https://www.mediawiki.org/wiki/Download pemasang tarball] yang terlengkap dengan beberapa rupa dan sambungan. Anda boleh menyalin dan menampal direktori <code>skins/</code> terus darinya.\n:* Mengklonkan salah satu repositori <code>mediawiki/skins/*</code> melalui git ke dalam direktori <code dir=\"ltr\">skins/</code> pasangan MediaWiki anda.\n: Perbuatan ini tidak patut mengganggu repositori git anda jika anda seorang pembangun MediaWiki.\n\n; Jika anda baru sahaja menaik taraf MediaWiki:\n: MediaWiki 1.24 dan ke atas tidak lagi membolehkan rupa-rupa yang dipasang secara automatik (lihat [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual:Skin autodiscovery]). Anda boleh menampalkan baris-baris berikut ke dalam <code>LocalSettings.php</code> untuk membolehkan semua rupa yang semasa dipasang:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Jika anda baru sahaja mengubah <code>LocalSettings.php</code>:\n: Semakkan lagi nama-nama rupa untuk kesalahan ejaan.",
+       "default-skin-not-found-no-skins": "Whoops! Rupa asli untuk wiki anda yang tertakrif dalam <code dir=\"ltr\">$wgDefaultSkin</code> sebagai <code>$1</code>, tidak disediakan.\n\nAnda tidak mempunyai rupa-rupa yang dipasang.\n\n; Jika anda baru sahaja memasang atau menaik taraf MediaWiki:\n: Anda kemungkinan memasang dari git, atau terus dari kod sumber melalui cara lain. Ini adalah dijangka. MediaWiki 1.24 dan ke atas tidak memasuki sebarang rupa dalam repositori utama. Cubalah memasang beberapa rupa dari [https://www.mediawiki.org/wiki/Category:All_skins panduan rupa mediawiki.org], dengan:\n:* Memuat turun [https://www.mediawiki.org/wiki/Download pemasang tarball] yang terlengkap dengan beberapa rupa dan sambungan. Anda boleh menyalin dan menampal direktori <code>skins/</code> terus darinya.\n:* Mengeklon salah satu repositori <code>mediawiki/skins/*</code> melalui git ke dalam direktori <code dir=\"ltr\">skins/</code> pasangan MediaWiki anda.\n: Perbuatan ini tidak patut mengganggu repositori git anda jika anda seorang pembangun MediaWiki. Lihat [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] untuk maklumat cara membolehkan mereka dan memilih yang asli.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (dibolehkan)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''dimatikan''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''dimatikan''')",
+       "mediastatistics": "Statistik media",
+       "mediastatistics-summary": "Statistik mengenai jenis-jenis fail yang dimuat naik. Ini hanya mencakupi versi terbaru setiap fail. Versi-versi fail yang lama atau terpadam tidak disertakan.",
+       "mediastatistics-nbytes": "$1 bait ($2; $3%)",
+       "mediastatistics-table-mimetype": "Jenis MIME",
+       "mediastatistics-table-extensions": "Sambungan yang dibolehkan",
+       "mediastatistics-table-count": "Bilangan fail",
+       "mediastatistics-table-totalbytes": "Jumlah saiz",
+       "mediastatistics-header-unknown": "Tidak dikenali",
+       "mediastatistics-header-bitmap": "Gambar bitmap",
+       "mediastatistics-header-drawing": "Lukisan (gambar vektor)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Video",
+       "mediastatistics-header-multimedia": "Media kaya",
+       "mediastatistics-header-office": "Office",
+       "mediastatistics-header-text": "Tekstual",
+       "mediastatistics-header-executable": "Fail boleh laksana",
+       "mediastatistics-header-archive": "Format mampat",
+       "json-warn-trailing-comma": "$1 koma pengekor telah digugurkan dari JSON",
+       "json-error-unknown": "Terdapat masalah dengan JSON. Ralat: $1",
+       "json-error-depth": "Kedalaman tindakan maksimum telah dicecah",
+       "json-error-state-mismatch": "JSON tidak sah atau cacat",
+       "json-error-ctrl-char": "Ralat aksara kawalan, mungkin salah dikodkan",
+       "json-error-syntax": "Ralat sintaks",
+       "json-error-utf8": "Aksara UTF-8 cacat, mungkin salah dikodkan",
+       "json-error-recursion": "Sekurang-kurangnya satu rujukan rekursif untuk dikodkan di dalam nilai berkenaan",
+       "json-error-inf-or-nan": "Sekurang-kurangnya satu nilai NAN atau INF untuk dikodkan di dalam nilai berkenaan",
+       "json-error-unsupported-type": "Diberikannya nilai jenis yang tidak boleh dikodkan"
 }
index 3983159..6ac9530 100644 (file)
@@ -26,6 +26,7 @@
        "tog-watchdefault": "Żid il-paġni u l-fajls li nimmodifika fil-lista ta' osservazzjoni personali",
        "tog-watchmoves": "Żid il-paġni u fajls li mmexxi fil-lista ta' osservazzjoni tiegħi",
        "tog-watchdeletion": "Żid il-paġni u fajls li nħassar mal-lista ta' osservazzjoni tiegħi",
+       "tog-watchrollback": "Żid il-paġni fejn għamilt treġġigħ lura lejn il-paġna ta' segwimenti tiegħi",
        "tog-minordefault": "Immarka awtomatikament kull modifika bħala waħda minuri",
        "tog-previewontop": "Uri dehra proviżorja tal-paġna fuq il-kaxxa tal-immodifikar",
        "tog-previewonfirst": "Uri dehra proviżorja mal-ewwel modifika",
        "otherlanguages": "F'lingwi oħrajn",
        "redirectedfrom": "(Rindirizzat minn $1)",
        "redirectpagesub": "Paġna ta' rindirizz",
+       "redirectto": "Rindirizza lejn:",
        "lastmodifiedat": "L-aħħar modifika fuq il-paġna: $2, $1.",
        "viewcount": "Din il-paġna ġiet aċċessata {{PLURAL:$1|darba|$1 darba}}.",
        "protectedpage": "Paġna protetta",
        "hidetoc": "aħbi",
        "collapsible-collapse": "Aħbi",
        "collapsible-expand": "Espandi",
+       "confirmable-confirm": "Inti{{GENDER:$1|żgur|żgura}}?",
+       "confirmable-yes": "Iva",
+       "confirmable-no": "Le",
        "thisisdeleted": "Uri jew ġib lura $1?",
        "viewdeleted": "Ara $1?",
        "restorelink": "{{PLURAL:$1|waħda mill-modifiki mħassra|$1 modifiki mħassra}}",
        "no-null-revision": "Ma setghitx tinħoloq reviżjoni nulla ġdida għall-paġna \"$1\"",
        "badtitle": "Titlu ħażin",
        "badtitletext": "It-titlu tal-paġna rikjesta huwa invalidu, vojt, jew ġej minn żball fil-ħolqa bejn siti wiki differenti jew verżjonijiet ta' lingwi differenti tal-istess sit. Jista' wkoll ikollu wieħed jew aktar karattri li ma jistgħux jintużaw għat-titli.",
-       "perfcached": "L-informazzjoni li jmiss huwa kopja ''cache'' u jista' ma jkunx aġġornat. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
-       "perfcachedts": "Id-dati segwenti huma estratt ta' kopja cache tad-database. L-aħħar aġġornament: $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
+       "perfcached": "L-informazzjoni li jmiss ġejja minn kopja ''cache'' u tista' ma tkunx aġġornata. Massimu ta'  {{PLURAL:$1|riżultat wieħed hu|$1 riżultati huma}} disponibbli fil-\"cache\".",
+       "perfcachedts": "Id-dejta li jmiss ġejja minn kopja \"cache\" u l-aħħar aġġornament kien: $1. Mhux aktar minn {{PLURAL:$4|riżultat wieħed hu|$4 riżultati huma}} disponibbli fil-\"cache\".",
        "querypage-no-updates": "Aġġornamenti għal din il-paġna huma temporalment sospesi. L-Informazzjoni hawnhekk preżentament mhux qiegħed jiġi aġġornat.",
        "viewsource": "Ara s-sors",
        "viewsource-title": "Ara s-sors ta' $1",
        "actionthrottled": "Azzjoni miżmuma",
        "actionthrottledtext": "Bħala miżura għal kontra l-ispam, inti limitat li tagħmel din l-azzjoni għal ħafna drabi f'spazju ta' ħin żgħir, u inti qbiżt dan il-limitu.\nJekk jogħġbok erġa' prova fi ftit minuti oħra.",
-       "protectedpagetext": "Din il-paġna ġiet protetta sabiex twaqqaf kull tip ta' modifika.",
+       "protectedpagetext": "Din il-paġna ġiet protetta sabiex ma ssirx xi modifika jew xi azzjoni oħra.",
        "viewsourcetext": "Tista' tara u tikkopja s-sors ta' din il-paġna:",
        "viewyourtext": "Tista' tara u tikkopja s-sors tal-'''modifiki tiegħek''' fuq din il-paġna:",
-       "protectedinterface": "Din il-paġna għanda element li tagħmel parti mill-interfaċċa tal-utent tas-software, u għaldaqstant ġiet protetta sabiex ma jkunx hemm abbuż.",
-       "editinginterface": "'''Avviż:''' Qiegħed tagħmel modifiki lejn paġna li qiegħda tintuża biex tipprovdi interfaċċa għall-messaġġi tas-software. Kull modifika f'din il-paġna se taffetwa l-apparenza tal-faċċata tal-utenti kollha. Għat-traduzzjonijiet, ikkunsidra l-possibilità li tuża  [//translatewiki.net/wiki/Main_Page?setlang=mt translatewiki.net], il-proġett MediaWiki għal-lokalizzazzjoni.",
+       "protectedinterface": "Din il-paġna tipprovdi test ta' interfaċċa għas-softwer fuq dan il-wiki, u għaldaqstant ġiet protetta sabiex ma jkunx hemm abbuż.\nBiex iżżid jew tibdel traduzzjonijiet għall-wikijiet kollha uża [//translatewiki.net/ translatewiki.net], il-proġett ta' lokalizzazzjoni ta' MediaWiki.",
+       "editinginterface": "'''Avviż:''' Qiegħed timmodifika  paġna li qiegħda tintuża biex tipprovdi test ta' interfaċċa għas-software. Kull modifika f'din il-paġna se taffetwa l-apparenza tal-interfaċċata tal-utenti kollha ta' dan il-wiki.",
+       "translateinterface": "Biex iżżid jew tibdel it-traduzzjonijiet fuq il-wikijiet kollha, jekk jogħġbok uża [//translatewiki.net/ translatewiki.net], il-proġett ta' lokalizzazzjoni tal-MediaWiki.",
        "cascadeprotected": "Din il-paġna ġiet protetta mill-modifiki, minħabba li tinkludi {{PLURAL:$1|paġni, li huwa|paġni, li huma}} protetti bil-preferenza tal-\"kaskata\" mixewla:\n$2",
        "namespaceprotected": "Inti m'għandhekx il-permess li timodifika paġni fin-''namespace'' '''$1''.",
        "customcssprotected": "M'għandekx il-permessi neċessarji sabiex timmodifika din il-paġna tas-CSS, minħabba li għandha tqegħid personali ta' utent ieħor.",
        "customjsprotected": "M'għandekx il-permessi neċessarji sabiex timmodifika din il-paġna tal-JavaScript, minħabba li għandha tqegħid personali ta' utent ieħor.",
+       "mycustomcssprotected": "Ma għandekx permess biex timmodifika din il-paġna CSS.",
        "mycustomjsprotected": "Ma għandekx permess li teditja din il-paġna JavaScript.",
        "myprivateinfoprotected": "Ma għandekx permess li teditja l-informazzjoni privata tiegħek.",
        "mypreferencesprotected": "Ma għandekx permess li teditja l-preferenzi tiegħek.",
        "invalidtitle-knownnamespace": "Titolu validu bin-namespace \"$2\" u t-test\"$3\"",
        "invalidtitle-unknownnamespace": "Titolu validu b'numru tan-namespace mhux magħruf  $1 u t-test \"$2\"",
        "exception-nologin": "Mhux qiegħed fil-kont",
-       "exception-nologin-text": "Jekk jogħġbok [[Special:Userlogin|idħol fil-kont tiegħek]] biex tkun tista' taċċessa din il-paġna jew din l-azzjoni.",
+       "exception-nologin-text": "Jekk jogħġbok idħol fil-kont tiegħek biex tkun tista' taċċessa din il-paġna jew din l-azzjoni.",
        "exception-nologin-text-manual": "Jekk jogħġbok $1 sabiex tkuu tista' taċċessa din il-paġna jew din l-azzjoni.",
        "virus-badscanner": "Problema fil-konfigurazzjoni: antivirus mhux magħruf: ''$1''",
        "virus-scanfailed": "Tfittxija falliet (kodiċi $1)",
        "passwordreset-emailsent-capture": "Intbagħtet ittra-e għall-ssettjar mill-ġdid tal-password u l-kontenut jidher hawn taħt.",
        "passwordreset-emailerror-capture": "Ġiet ġenerata ittra-e ta' tfakkira, li l-kontenut tagħha jidher hawn taħt. Madanakollu, il-posta ma ntbagħtitx lill-utent: $1",
        "changeemail": "Biddel l-indirizz elettroniku",
-       "changeemail-header": "Biddel l-indirizz elettroniku tal-kont",
        "changeemail-text": "Kompli din il-formola sabiex tbiddel l-indirizz elettroniku. Trid iddaħħal il-password biex tikkonferma din il-bidla.",
        "changeemail-no-info": "Trid tkun dħalt fil-kont tiegħek sabiex taċċessa direttament din il-paġna.",
        "changeemail-oldemail": "Indirizz elettroniku attwali:",
        "changeemail-none": "(xejn)",
        "changeemail-password": "Il-password tiegħek fuq {{SITENAME}}:",
        "changeemail-submit": "Biddel l-indirizz elettroniku",
-       "changeemail-cancel": "Annulla",
        "changeemail-throttled": "Ippruvajt tidħol wisq drabi.\nJekk jogħġbok stenna $1 qabel ma terġa' tipprova.",
        "resettokens": "Irrisettja t-tokens",
        "bold_sample": "Tipa ħoxna",
        "preview": "Dehra proviżorja",
        "showpreview": "Dehra proviżorja",
        "showdiff": "Uri t-tibdiliet",
-       "anoneditwarning": "'''Twissija:''' Ma rnexxilekx tidħol.\nL-indirizz tal-IP tiegħek se jiġi reġistrat fil-kronoloġija tal-modifikar ta' din il-paġna.",
+       "anoneditwarning": "'''Attenzjoni:''' Ma dħaltx f'kontok.\nL-indirizz tal-IP tiegħek se jkun jidher pubblikament meta tagħmel xi modifika. Jekk <strong>[$1 tidħol f'kontok]</strong> jew <strong>[$2 toħloq kont]</strong>, il-modifiki li tagħmel jiġu attribwiti lill-ismek ta' utent, flimkien ma benefiċċji oħra.",
        "anonpreviewwarning": "''Bħalissa mintix fil-kont tiegħek. Jekk issalva xi modifiki tiegħek, fil-kronoloġija tal-paġna se jiġi reġistrat l-indirizz IP tiegħek.''",
        "missingsummary": "'''Twissija:''' Ma pprovdejt l-ebda taqsira dwar il-modifika.\nJekk terġa' tagħfas Modifika, l-modifika se tiġi salvata mingħajr waħda.",
        "missingcommenttext": "Jekk jogħġbok ħalli kumment hawn taħt.",
        "mergehistory-same-destination": "Il-paġni tas-sors u tad-destinazzjoni ma jistgħux ikunu l-istess",
        "mergehistory-reason": "Raġuni:",
        "mergelog": "Twaħħid",
-       "pagemerge-logentry": "waħħad [[$1]] ma' [[$2]] (reviżjonijiet sa $3)",
        "revertmerge": "Infired",
        "mergelogpagetext": "Hawn taħt hawn lista ta' l-aktar tgħaqqid riċenti ta' paġna waħda ta' storja f'oħra.",
        "history-title": "Kronoloġija tal-modifiki ta' \"$1\"",
        "searchrelated": "relatati",
        "searchall": "kollha",
        "showingresults": "Hawn taħt ġie inkluż massimu ta' {{PLURAL:$1|riżultat '''1''' li jibda|'''$1''' riżultat li jibdew}} bin-numru '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Riżultat '''$1''' minn '''$3'''|Riżultati '''$1 - $2''' minn '''$3'''}} għal '''$4'''",
        "search-nonefound": "It-tfittxija ma tat l-ebda riżultat.",
        "powersearch-legend": "Tfittxija avvanzata",
        "powersearch-ns": "Fittex fl-ispazju tal-isem:",
        "statistics": "Statistika",
        "statistics-header-pages": "Statistika tal-paġna",
        "statistics-header-edits": "Statistika tal-immodifikar",
-       "statistics-header-views": "Statistika tal-viżwalizzazzjoni",
        "statistics-header-users": "Statistika tal-utent",
        "statistics-header-hooks": "Statistika oħra",
        "statistics-articles": "Paġni ta' kontenut",
        "statistics-files": "Fajls imtellgħa",
        "statistics-edits": "Total ta' modifiki minn mindu {{SITENAME}} bdiet fil-funzjon",
        "statistics-edits-average": "Medja ta' modifiki għal kull paġna",
-       "statistics-views-total": "Total ta' viżti",
-       "statistics-views-total-desc": "Viżti lejn paġni li ma jeżistux u paġna speċjali mhumiex inklużi.",
-       "statistics-views-peredit": "Viżti għal kull modifika",
        "statistics-users": "[[Special:ListUsers|Utenti]] reġistrati",
        "statistics-users-active": "Utenti attivi",
        "statistics-users-active-desc": "Utenti li wettqu azzjoni fl-aħħar {{PLURAL:$1|ġurnata|$1 ġurnata}}",
-       "statistics-mostpopular": "Il-paġni l-aktar miżjura",
        "pageswithprop": "Paġni bi proprjetà ta' paġna",
        "pageswithprop-legend": "Paġni bi proprjetà ta' paġna",
        "pageswithprop-text": "Din il-paġna telenka paġni li jużaw proprjetà ta' paġna partikulari.",
        "uncategorizedtemplates": "Templates mhux ikkategorizzati",
        "unusedcategories": "Kategoriji mhux użati",
        "unusedimages": "Fajls mhux użati",
-       "popularpages": "L-iktar paġni popolari",
        "wantedcategories": "Kategoriji rikjesti",
        "wantedpages": "Paġni rikjesti",
        "wantedpages-badtitle": "Titlu invalidu fil-grupp ta' riżultati: $1",
        "booksources": "Sorsi tal-kotba",
        "booksources-search-legend": "Fittex għal sorsi tal-kotba",
        "booksources-isbn": "Kodiċi ISBN:",
-       "booksources-go": "Mur",
+       "booksources-search": "Fittex",
        "booksources-text": "Hawn taħt hawn lista ta' ħoloq għal siti oħrajn li jbiegħu kotba ġodda u wżati, u jistgħu jkollhom aktar informazzjoni dwar il-kotba li qiegħed tfittex:",
        "booksources-invalid-isbn": "L-ISBN li ngħata jidher li mhuwiex validu; iċċekkja għal xi żbalji mis-sors oriġinali.",
        "specialloguserlabel": "Azzjoni effettwata minn:",
        "sp-deletedcontributions-contribs": "kontribuzzjonijiet",
        "linksearch": "Fittex ħoloq esterni",
        "linksearch-pat": "Mudell ta' tfittxija:",
-       "linksearch-ns": "Spazju tal-isem:",
+       "linksearch-ns": "Spazju tal-ismijiet:",
        "linksearch-ok": "Fittex",
        "linksearch-text": "Tista' tagħmel użu minn metakarattri, per eżempju \"*.wikipedia.org\".<br />\nHuwa neċessarju minn tal-inqas dominju tal-ewwel livell, per eżempju \"*.org\".<br />\nProtokolli aċċettati: <code>$1</code> (jekk ma jiġi speċifikat l-ebda protokol, dan jiġi awtomatikament definit bħala http://).",
        "linksearch-line": "$1 hija marbuta mill-paġna $2",
        "wlheader-enotif": "In-notifikazzjoni bl-użu tal-posta elettronika hija attivata.",
        "wlheader-showupdated": "Il-paġni li ġew editjati wara l-aħħar żjara tiegħek qed jiġu murija b'tipa '''ħoxna'''",
        "wlnote": "Hawn taħt hawn {{PLURAL:$1|l-aħħar modifika|l-aħħar '''$1''' modifiki}} fl-aħħar {{PLURAL:$2|siegħa|'''$2''' siegħat}}, sal-$3, fil-$4.",
-       "wlshowlast": "Uri l-aħħar $1 siegħat $2 ġranet $3",
+       "wlshowlast": "Uri l-aħħar $1 siegħat $2 ġranet",
        "watchlist-options": "Opzjonijiet tal-lista ta' osservazzjoni",
        "watching": "Imsegwi...",
        "unwatching": "Mhux osservat aktar...",
        "protect-othertime": "Ħin ieħor:",
        "protect-othertime-op": "ħin ieħor",
        "protect-existing-expiry": "Skadenza attwali: $2, $3",
+       "protect-existing-expiry-infinity": "Ħin ta' skadenza eżistenti: infinit",
        "protect-otherreason": "Raġunijiet oħra/addizzjonali:",
        "protect-otherreason-op": "Raġuni oħra",
        "protect-dropdown": "*Raġunijiet komuni għall-protezzjoni\n** Vandaliżmu eċċessiv\n** Spamming eċċessiv\n** Gwerrer tal-editjar kontinwi\n** Paġna wżata ħafna",
        "undelete-error-long": "Kien hemm problemi waqt il-fajl kien qiegħed jiġi rkuprat:\n\n$1",
        "undelete-show-file-confirm": "Inti ċert li trid tara reviżjoni imħassra tal-fajl \"<nowiki>$1</nowiki>\" ta' nhar $2, fil-ħin ta' $3?",
        "undelete-show-file-submit": "Iva",
-       "namespace": "Spazju tal-isem:",
+       "namespace": "Spazju tal-ismijiet:",
        "invert": "Aqleb l-għażla",
        "tooltip-invert": "Agħżel din il-kaxxa biex taħbi l-modifiki lejn paġni li jinsabu fl-ispazji tal-isem magħżula (u l-ispazju tal-isem assoċjat jekk hu magħżul)",
-       "namespace_association": "Spazju tal-isem assoċjat",
+       "namespace_association": "Spazju tal-ismijiet assoċjat",
        "tooltip-namespace_association": "Agħżel din il-kaxxa sabiex tinkludi l-paġna ta' diskussjoni jew l-oġġett tal-ispazju tal-isem assoċjat mal-ispazju tal-isem magħżul",
        "blanknamespace": "(Prinċipali)",
        "contributions": "Kontributi tal-{{GENDER:$1|utent}}",
        "import": "Importa paġni",
        "importinterwiki": "Importazzjoni transwiki",
        "import-interwiki-text": "Agħżel wiki u titlu ta' paġna li se timporta.\nDati ta' reviżjonijiet u ismijiet tal-modifikaturi jiġu preservati.\nKull azzjonijiet ta' importazzjoni tal-transwiki jiġu reġistrati fil-[[Special:Log/import|log ta' importazzjoni]].",
-       "import-interwiki-source": "Sors tal-wiki/paġna:",
        "import-interwiki-history": "Kopja l-verżjonijiet tal-kronoloġija kollha għal din il-paġna",
        "import-interwiki-templates": "Inkludi l-mudelli kollha",
        "import-interwiki-submit": "Importa",
        "pageinfo-robot-policy": "Stat għall-muturi tat-tfittxija",
        "pageinfo-robot-index": "Indiċjabbli",
        "pageinfo-robot-noindex": "Mhux indiċjabbli",
-       "pageinfo-views": "Numru ta' viżti",
        "pageinfo-watchers": "Numru ta' osservaturi tal-paġna",
        "pageinfo-redirects-name": "Rindirizzi lejn din il-paġna",
        "pageinfo-subpages-name": "Sottopaġni ta' din il-paġna",
        "exif-copyright": "Informazzjoni dwar il-propjetá letterarja",
        "exif-exifversion": "Verżjoni tal-format Exif",
        "exif-flashpixversion": "Verżjoni sapportata ta' Flashpix",
-       "exif-colorspace": "Spazju tal-kulur",
+       "exif-colorspace": "Spazju tal-kuluri",
        "exif-componentsconfiguration": "Tfissira dwar kull komponent",
        "exif-compressedbitsperpixel": "Għamla tal-kompressjoni tal-istampa",
        "exif-pixelydimension": "Wisa' tal-istampa",
        "exif-lightsource": "Sorġent tad-dawl",
        "exif-flash": "Flash",
        "exif-focallength": "Distanza fokali objettiva",
-       "exif-subjectarea": "Spazju tas-suġġett",
+       "exif-subjectarea": "Spazju tas-suġġetti",
        "exif-flashenergy": "Saħħa tal-flash",
        "exif-focalplanexresolution": "Riżoluzzjoni X fuq il-witja fokali",
        "exif-focalplaneyresolution": "Riżoluzzjoni Y fuq il-witja fokali",
        "exif-urgency-low": "Baxx ($1)",
        "exif-urgency-high": "Għoli ($1)",
        "exif-urgency-other": "Prijorità definita mill-utent ($1)",
-       "watchlistall2": "kollha",
        "namespacesall": "kollha",
        "monthsall": "kollha",
        "confirmemail": "Ikkonferma l-indirizz tal-posta elettronika",
        "specialpages-group-other": "Paġni speċjali oħrajn",
        "specialpages-group-login": "Idħol / oħloq kont",
        "specialpages-group-changes": "L-Aħħar modifiki u reġistri",
-       "specialpages-group-media": "Fajls multimedjali - rapporti u tellgħar",
+       "specialpages-group-media": "Fajls multimedjali - tlugħ u rapporti",
        "specialpages-group-users": "Utenti u drittijiet",
        "specialpages-group-highuse": "Paġni użati ħafna",
-       "specialpages-group-pages": "Elenki ta' paġni",
+       "specialpages-group-pages": "Listi ta' paġni",
        "specialpages-group-pagetools": "Għodda tal-paġna",
        "specialpages-group-wiki": "Għodda u informazzjoni fuq il-proġett",
        "specialpages-group-redirects": "Paġni speċjali ta' rindirizz",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|biddel|biddlet}} is-sħubija fil-gruppi ta' $3",
        "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-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ġġ:",
        "expand_templates_remove_comments": "Neħħi l-kummenti",
        "expand_templates_remove_nowiki": "Ħassar it-''tags'' <nowiki> fir-riżultat",
        "expand_templates_generate_xml": "Uri siġra sintattika XML",
-       "expand_templates_preview": "Dehra proviżorja"
+       "expand_templates_preview": "Dehra proviżorja",
+       "mediastatistics": "Statistika tal-midja",
+       "mediastatistics-summary": "L-istatistika dwar it-tipi ta' fajls imtellgħin. Din tinkludi biss il-verżjoni l-aktar reċenti t' fajl. Il-verżjonijiet antiki jew imħassrin tal-fajls tħallew barra.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "Tip MIME",
+       "mediastatistics-table-extensions": "Estensjonijiet possibbli",
+       "mediastatistics-table-count": "Numru ta' fajls",
+       "mediastatistics-table-totalbytes": "Daqs totali",
+       "mediastatistics-header-unknown": "Mhux magħruf",
+       "mediastatistics-header-bitmap": "Stampi bil-Bitmap",
+       "mediastatistics-header-drawing": "Tpinġijiet (vector images)",
+       "mediastatistics-header-audio": "Awdjo",
+       "mediastatistics-header-video": "Vidjows",
+       "mediastatistics-header-multimedia": "Midja rikka",
+       "mediastatistics-header-office": "Uffiċċju",
+       "mediastatistics-header-text": "Fajls testwali",
+       "mediastatistics-header-executable": "Fajls eżegwitabbli",
+       "mediastatistics-header-archive": "Formats kompressati"
 }
index 3e81d22..c02ff03 100644 (file)
        "randomredirect": "Ancaminamiento al calhas",
        "statistics": "Statísticas",
        "statistics-pages": "Páiginas",
-       "statistics-views-total": "Total de bejitas",
        "statistics-users-active": "Outelizadores atibos",
        "doubleredirects": "Ancaminamientos duplos",
        "brokenredirects": "Ancaminamientos scachados",
        "uncategorizedtemplates": "Modelos sin catadorie",
        "unusedcategories": "Catadories nun outelizadas",
        "unusedimages": "Fexeiros nun outelizados",
-       "popularpages": "Páiginas populares",
        "wantedcategories": "Catadories pedidas",
        "wantedpages": "Páiginas pedidas",
        "mostlinked": "Páiginas mais lhigadas",
        "pager-older-n": "{{PLURAL:$1|1 atrasada|$1 atrasadas}}",
        "booksources": "Fuontes de lhibros",
        "booksources-search-legend": "Percurar por fuontes de libros",
-       "booksources-go": "Bota",
        "specialloguserlabel": "Outelizador:",
        "speciallogtitlelabel": "Títalo:",
        "log": "Registros",
        "watchthispage": "Begiar esta páigina",
        "unwatch": "Zantressar-se",
        "watchlist-details": "{{PLURAL:$1|$1 páigina begiada|$1 páiginas begiadas}}, fuora las páiginas de çcuçon.",
-       "wlshowlast": "Ber redadeiras $1 horas $2 dies $3",
+       "wlshowlast": "Ber redadeiras $1 horas $2 dies",
        "watchlist-options": "Oupçones de la lista de begiados",
        "watching": "A begiar...",
        "unwatching": "A deixar de begiar...",
        "exif-sharpness-1": "Suabe",
        "exif-sharpness-2": "Duro",
        "exif-subjectdistancerange-0": "Çcoincido",
-       "watchlistall2": "todas",
        "namespacesall": "todas",
        "monthsall": "todos",
        "confirm_purge_button": "Stá bien",
index 6620607..cfffb37 100644 (file)
        "mergehistory-same-destination": "ရင်းမြစ်နှင့် သတ်မှတ်ထားသော စာမျက်နှာတို့သည် အတူတူ မဖြစ်ရ",
        "mergehistory-reason": "​ကြောင်း​ပြ​ချက် -",
        "mergelog": "ပေါင်းလိုက်သော မှတ်တမ်း",
-       "pagemerge-logentry": "[[$1]] ကို [[$2]] သို့ ပေါင်းပြီး ($3 ရက်နေ့အထိ မူများ)",
        "revertmerge": "ပြန်ခွဲထုတ်ရန်",
        "history-title": "\"$1\" ၏ တည်းဖြတ်မူ ရာဇဝင်များ",
        "difference-multipage": "(စာမျက်နှာများကြားမှ ကွဲပြားချက်များ)",
        "searchrelated": "ဆက်နွယ်သော",
        "searchall": "အားလုံး",
        "showingresults": "'''$2''' နှင့်စသော ရလဒ် {{PLURAL:$1|'''1''' ခု|'''$1''' ခု}}ထိကို အောက်တွင် ပြထားသည်။",
-       "showingresultsheader": "'''$4''' အတွက် {{PLURAL:$5|ရလဒ် '''$3''' ခု အနက်မှ '''$1'''|ရလဒ် '''$3'''ခု အနက်မှ '''$1 - $2'''}}",
        "search-nonefound": "စုံစမ်းမှုနှင့်ကိုက်ညီသော ရလဒ်မရှိပါ။",
        "powersearch-legend": "အထူးပြု ရှာဖွေရန်",
        "powersearch-ns": "အမည်ညွှန်းတို့တွင် ရှာရန် -",
        "statistics": "စာရင်းအင်း",
        "statistics-header-pages": "စာမျက်နှာစာရင်းအင်း",
        "statistics-header-edits": "တည်းဖြတ်မှုစာရင်းအင်း",
-       "statistics-header-views": "စာရင်းအင်းတို့ကို ကြည့်ရန်",
        "statistics-header-users": "အသုံးပြုသူစာရင်းအင်း",
        "statistics-header-hooks": "အခြားစာရင်းအင်းများ",
        "statistics-articles": "မာတိကာစာမျက်နှာများ",
        "statistics-files": "တင်ထားသောဖိုင်များ",
        "statistics-edits": "{{SITENAME}} စတည်ထောင်ပြီးကတည်းက စာမျက်နှာတည်းဖြတ်မှုပေါင်း",
        "statistics-edits-average": "စာတစ်မျက်နှာလျှင် ပျမ်းမျှတည်းဖြတ်မှုနှုန်း",
-       "statistics-views-total": "စုစုပေါင်းကို ကြည့်ရန်",
-       "statistics-views-peredit": "တစ်မျက်နှာလျှင်တည်းဖြတ်မှုမည်မျှရှိသည်ကို ကြည့်ရန်",
        "statistics-users": "မှတ်ပုံတင်ထားသော [[Special:ListUsers|အသုံးပြုသူများ]]",
        "statistics-users-active": "လက်ရှိလုပ်ကိုင်နေသော အသုံးပြုသူများ",
-       "statistics-mostpopular": "အများဆုံးကြည့်သော စာမျက်နှာများ",
        "doubleredirects": "နှစ်ဆင့်ပြန် ပြန်ညွှန်းများ",
        "double-redirect-fixed-move": "[[$1]] ကို ရွှေ့ပြောင်းပြီးဖြစ်သည်။ ယခုအခါ [[$2]] သို့ ပြန်ညွှန်းထားသည်။",
        "brokenredirects": "ကျိုးပျက်နေသော ပြန်ညွှန်းများ",
        "uncategorizedtemplates": "အမျိုးအစား ခွဲမထားသော တမ်းပလိတ်များ",
        "unusedcategories": "အသုံးပြုမထားသော ကဏ္ဍများ",
        "unusedimages": "အသုံးပြုမထားသော ဖိုင်များ",
-       "popularpages": "လူကြိုက်များသော စာမျက်နှာများ",
        "wantedcategories": "အလိုရှိသော ကဏ္ဍများ",
        "wantedpages": "အလိုရှိသော စာမျက်နှာများ",
        "wantedfiles": "အလိုရှိသော ဖိုင်များ",
        "pager-older-n": "{{PLURAL:$1|ပိုဟောင်းသော တစ်ခု|ပိုဟောင်းသော $1 ခု}}",
        "booksources": "မှီငြမ်း စာအုပ်များ",
        "booksources-search-legend": "စာအုပ်ရင်းမြစ်များကို ရှာရန်",
-       "booksources-go": "သွား​ပါ​",
        "specialloguserlabel": "အသုံးပြုသူ -",
        "speciallogtitlelabel": "ခေါင်းစဉ် -",
        "log": "မှတ်​တမ်း​များ​",
        "unwatchthispage": "စောင့်ကြည့်ခြင်းကို ရပ်တန့်ရန်",
        "notanarticle": "မာတိကာစာမျက်နှာတစ်ခု မဟုတ်",
        "watchlist-details": "{{PLURAL:$1|စာမျက်နှာ $1 ခု|စာမျက်နှာ $1 ခု}} သည် သင့်စောင့်ကြည့်စာရင်းတွင် ရှိသည်။ ဆွေးနွေးချက်စာမျက်နှာများကို ထည့်တွက် မထားပါ။",
-       "wlshowlast": "နောက်ဆုံး $1 နာရီ $2 ရက် $3 ကိုပြရန်",
+       "wlshowlast": "နောက်ဆုံး $1 နာရီ $2 ရက်  ကိုပြရန်",
        "watchlist-options": "စောင့်ကြည့်စာရင်းအတွက် ရွေးချယ်စရာများ",
        "watching": "စောင့်ကြည့်လျက်ရှိ...",
        "unwatching": "စောင့်မကြည့်တော့...",
        "exif-subjectdistancerange-1": "မက်ကရို",
        "exif-gpslongitude-w": "အနောက်လောင်ဂျီကျု",
        "exif-gpsspeed-m": "တစ်နာရီလျှင် ရှိသည့် မိုင်နှုန်း",
-       "watchlistall2": "အားလုံး",
        "namespacesall": "အားလုံး",
        "monthsall": "အားလုံး",
        "confirmemail": "အီးမေးကိုအတည်ပြုပါ",
        "revdelete-restricted": "အက်ဒမင်များသို့ ကန့်သတ်ချက်များ သက်ရောက်ရန်",
        "revdelete-unrestricted": "အက်ဒမင်များအတွက် ကန့်သတ်ချက်များကို ဖယ်ရှားရန်",
        "rightsnone": "(ဘာမှမရှိ)",
+       "revdelete-summary": "အကျဉ်းချုပ်ကို တည်းဖြတ်ရန်",
        "api-error-filename-tooshort": "ဖိုင်အမည်သည် တိုလွန်းသည်။",
        "api-error-filetype-banned": "ဤဖိုင်အမျိုးအစားကို တားမြစ်ထားသည်။",
        "api-error-http": "အတွင်းပိုင်းအမှား - ဆာဗာကို မဆက်သွယ်နိုင်ပါ။",
index d1f4637..a570164 100644 (file)
        "returnto": "Велявтомс $1 лопантень.",
        "tagline": "{{SITENAME}} -нь пельде",
        "help": "Лезкс",
-       "search": "Вешнэмс",
-       "searchbutton": "Вешнэк",
+       "search": "Вешнемс",
+       "searchbutton": "Вешнек",
        "go": "Адя",
        "searcharticle": "Адя",
        "history": "Лопань полавтнемат - витнемат",
        "laggedslavemode": "Ванок: Кизды, лопасонть материалось таштомсь.",
        "readonly": "Датабазась панжома экшсэ",
        "enterlockreason": "Сёрмадт мейс сёлгамс эряви, ды ёвтак, зярдо таго арьсят панжови",
-       "missing-article": "Дата йуртсто а муеви эрявикс текстэсь, сонзэ лемезэ \"$1\" $2.\n\nСеде сеедьстэ истя лиси, зярдо таштомозь diff эли историянь сюлмавома песь вети нардань лопас.\n\nЛисиндерясь аволь истя, можок муить программа керьксстэнть (тапавкс тарка) сийне.\nПачтта сёрмине теде [[Special:ListUsers/sysop|системань ветийнень]] URL адресэнть тештязь.",
+       "missing-article": "Дата юртсто а муеви эрявикс текстэсь, сонзэ лемезэ \"$1\" $2.\n\nСеде сеедьстэ истя лиси, зярдо таштомозь diff эли историянь сюлмавома песь вети нардань лопас.\n\nЛисиндерясь аволь истя, можок муить программа керьксстэнть (тапавкс тарка) сийне.\nПачтта сёрмине теде [[Special:ListUsers/sysop|системань ветийнень]] URL адресэнть тештязь.",
        "missingarticle-rev": "(лиякстомтома#: $1)",
        "missingarticle-diff": "(Мейсэ явовить: $1, $2)",
        "internalerror": "Потмоильведькс",
        "createacct-submit": "Шкик совамотаркат",
        "createacct-another-submit": "Шкак од совамотарка",
        "createacct-benefit-heading": "«{{SITENAME}}» сайтэнть теизь тонь кондямо ломанть.",
-       "createacct-benefit-body2": "{{PLURAL:$1|1=лопа|лопат}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|лопа|лопат}}",
        "badretype": "Сёрмадыть салава валот кавксть: сынь аволь вейкеть.",
        "userexists": "Те лемесь уш саезь.\nАрсека эстеть лия, инеськеть.",
        "loginerror": "Совамсто ильведькс",
        "accountcreated": "Совамо таркась теезь",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|кортнема]]) совицянь таркась теевсь-шкавсь.",
        "loginlanguagelabel": "Кель: $1",
+       "pt-login": "Совамс",
+       "pt-userlogout": "Лисемс",
        "user-mail-no-addy": "Терявтыть кучомс е-сёрма е-сёрмапарговтомо.",
        "changepassword": "Салавань валонь полавтома",
        "resetpass_announce": "Совамот топавтомга эряви путомс од салававал.",
        "resetpass-submit-loggedin": "Полавтомс совамо валот",
        "resetpass-submit-cancel": "Саемс мекев",
        "resetpass-temp-password": "А куватень совамо валось:",
+       "resetpass-expired": "Салававалот таштомсь. Аравтт од салававал, мейле совават.",
        "passwordreset": "Совамо валонь лиялгавтома",
        "passwordreset-legend": "Полавтык совамо валонть",
        "passwordreset-username": "Теиця леметь:",
        "changeemail-none": "(арась мезе невтемс)",
        "changeemail-password": "«{{SITENAME}}» проектэнь салававалот:",
        "changeemail-submit": "Полавтомс е-сёрмапаргот",
-       "changeemail-cancel": "Саемс мекев",
        "bold_sample": "Эчке текст",
        "bold_tip": "Эчке текст",
        "italic_sample": "Комавтонь текст",
        "nocreatetext": "Те {{SITENAME}} лопасонть пирязь од лопань теемась. Тонь ули мелеть велявтомс удалов ды  питнемензе-витнемензе улиця лопанть, али [[Special:UserLogin|совамс али теемс од совама]].",
        "nocreate-loggedin": "Тонеть а мерить теемс-шкамс од лопат.",
        "permissionserrorstext": "Тонеть а мереви теемс тень, вана {{PLURAL:$1|тувталонть|тувталтнэнь}} кисэ:",
-       "permissionserrorstext-withaction": "Тонеть а мерить теемс $2, {{PLURAL:$1|1=тувталось|тувталтнэ}} вана:",
+       "permissionserrorstext-withaction": "Тонеть а мерить $2, {{PLURAL:$1|тувталось|тувталтнэ}} вана:",
        "recreate-moveddeleted-warn": "'''Ванок: Вельмевтят лопа, кона нардазель.'''\n\nВасня арьсек, эряви - а эряви полалемс ды витнемс-петнемс те лопанть.\nТе лопанть нардамодо ды печтевтемадо путовкстнэ одов максозь тесэ, улезт шожда ванстнемс:",
        "moveddeleted-notice": "Те лопась нардазь.\nЛопанть нардамодо сёрмадовксось максозь вана ало.",
        "log-fulllog": "Ванномс журналонть весемензэ",
        "revdelete-hide-image": "Кекшемс мезе файлатнесэ",
        "revdelete-hide-name": "Кекшемс тев тееманть ды норовамо тарканзо",
        "revdelete-hide-comment": "Витнемс-петнемс сёрмадовксонть зэмензэ.",
-       "revdelete-hide-user": "Ð\9aекÑ\88емÑ\81 Ð²Ð¸Ñ\82ниÑ\86Ñ\8fнÑ\82Ñ\8c-пеÑ\82ниÑ\86Ñ\8fнÑ\82Ñ\8c Ñ\82еиÑ\86Ñ\8f Ð»ÐµÐ¼ÐµÐ½Ð·Ñ\8d/IP-нзÑ\8d",
+       "revdelete-hide-user": "Ð\92иÑ\82ниÑ\86Ñ\8fнÑ\82Ñ\8c-пеÑ\82ниÑ\86Ñ\8fнÑ\82Ñ\8c Ñ\81овамолемезÑ\8d/IP Ñ\81Ñ\91Ñ\80мапаÑ\80гозо",
        "revdelete-radio-same": "(иляк лиякстомто)",
        "revdelete-log": "Тувталось:",
-       "revdelete-submit": "Аравтомс кочказь {{PLURAL:$1|1=лиякстомтомантень|лиякстомтоматненень}}",
+       "revdelete-submit": "Аравтомс кочказь {{PLURAL:$1|лиякстомтомантень|лиякстомтоматненень}}",
        "revdel-restore": "Полавтомс неявомачынзэ",
        "pagehist": "Лопанть икелькс умазо",
        "deletedhist": "Нардань икелькс умазо",
        "mergehistory-box": "Совавтомс кавто лопатнень лиякстомтомадо сёрмадовкстнэнь ве лувс:",
        "mergehistory-from": "Лисьмапря лопа:",
        "mergehistory-into": "Совавтома лопа:",
-       "mergehistory-list": "Ð\92ейÑ\82Ñ\8cÑ\81Ñ\8dндÑ\8fвиÑ\86Ñ\8f Ñ\8eÑ\80онзо-пÑ\83Ñ\82овкÑ\81онзо",
+       "mergehistory-list": "Вейсэндявиця юронзо-путовксонзо",
        "mergehistory-go": "Невтемс вейтьс совавтомкс витнемат-петнемат",
        "mergehistory-submit": "Совавтомс лиякстомтоматнень вейтьс",
        "mergehistory-empty": "Вейкеяк лиякстомтома а совавтови вейтьс лия марто.",
        "mergehistory-invalid-destination": "Совавтомкс лопанть улезэ маштовикс лем.",
        "mergehistory-autocomment": "Совавтомс [[:$1]] [[:$2]]-с",
        "mergehistory-reason": "Тувталось:",
-       "mergelog": "Ð\92ейÑ\82Ñ\8cÑ\81Ñ\8dндÑ\8fмÑ\81 Ð»Ð¾Ð³Ð¾Ð½Ñ\82Ñ\8c",
-       "revertmerge": "ЯвомÑ\81 Ð»Ð¾Ð³Ð¾Ð½Ñ\82Ñ\8c Ð¼ÐµÐºÐµÐ², ÐºÐ¾Ð´Ð° Ñ\83лÑ\8cнеÑ\81Ñ\8c Ð²ÐµÐ¹Ñ\82Ñ\8cÑ\81Ñ\8dндÑ\8fмодо Ð¸ÐºÐµÐ»Ðµ",
-       "history-title": "\"$1\"ь полавтнемань историязо",
+       "mergelog": "Вейсэндямс логонть",
+       "revertmerge": "Явомс логонть мекев, кода ульнесь вейсэндямодо икеле",
+       "history-title": "\"$1\" лопанть полавтнемань историязо",
        "difference-multipage": "(Мейсэ лопатне явовить)",
        "lineno": "Киксэсь $1:",
        "compareselectedversions": "Кочказь версиятнень аравтомс карадо-каршо",
        "searchprofile-everything-tooltip": "Вешнемс весе лопатнева (кортнема лопатневаяк)",
        "searchprofile-advanced-tooltip": "Вешнемс башка теезь лемпотмотнестэ",
        "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-result-category-size": "{{PLURAL:$1|1 совицязо|$1 совицянзо}} ({{PLURAL:$2|1 явкскатегориязо|$2 явкскатегориянзо}}, {{PLURAL:$3|1 файла|$3 файлат}})",
        "search-redirect": "(йутавтт $1-с)",
        "search-section": "(пелькс $1)",
        "search-suggest": "Истя мерикскелить: $1",
        "search-interwiki-caption": "Дугакс проектт",
-       "search-interwiki-default": "$1 савкс:",
+       "search-interwiki-default": "«$1» викинть эйстэ савкст:",
        "search-interwiki-more": "(седе ламо)",
        "search-relatedarticle": "Малавикс",
        "searchrelated": "малавикс",
        "searchall": "весе",
-       "showingresultsheader": "{{PLURAL:$5|муевсь <strong>$1</strong> вана <strong>$3</strong>-тнень эйстэ|муевсть <strong>$1 - $2</strong> <strong>$3</strong>-тнень эйстэ}} <strong>$4</strong> вешнеманть лангс",
        "search-nonefound": "Те вешнема лангс мезеяк эзь муеве.",
        "powersearch-legend": "Седе келейстэ вешнема",
        "powersearch-ns": "Вешнемс не лемпотмотнестэ:",
        "prefs-personal": "Теицядо",
        "prefs-rc": "Чиень полавтнемат-лиякстомтомат",
        "prefs-watchlist": "Ванома лемрисьме",
-       "prefs-watchlist-days-max": "Весемеде куватьс $1 {{PLURAL:$1|1=чис|чис}}",
+       "prefs-watchlist-days-max": "Весемеде куватьс $1 {{PLURAL:$1|чис|чис}}",
        "prefs-watchlist-edits-max": "Весемеде покш цётось: 1000",
        "prefs-misc": "Минеть-сюнот",
        "prefs-resetpass": "Салавань валонь полавтома",
        "prefs-email": "Е-сёрмат-мезть",
        "prefs-rendering": "Тюсозо-лангозо",
        "saveprefs": "Ванстомс",
-       "restoreprefs": "Велявтомс мекев весе ушодкс ладсематнень",
+       "restoreprefs": "Велявтомс мекев весе ушодкс ладсематнень (весе явкстнэва)",
        "prefs-editing": "Витнема-петнема",
        "rows": "Валчилькстнэ (строкатне):",
        "columns": "Палманть:",
        "searchresultshead": "Вешнема",
        "recentchangesdays": "Зяро чить невтемс чиень полавтнематнесэ-лиякстомтоматнесэ:",
-       "recentchangesdays-max": "Весемеде куватьс $1 {{PLURAL:$1|1=чис|чис}}",
+       "recentchangesdays-max": "Весемеде куватьс $1 {{PLURAL:$1|чис|чис}}",
        "recentchangescount": "Васень аравтоматнень коряс зяро витнемат-петнемат невтемс:",
        "prefs-help-recentchangescount": "Тезэнь совавтозь чиень полавтнемат-лиякстомтомат, лопань лувт-путовкст, журналт.",
        "timezonelegend": "Шкань зонась:",
        "timezoneregion-pacific": "Сэтьме иневедь",
        "prefs-searchoptions": "Вешнем",
        "prefs-namespaces": "Лем потмот",
-       "default": "зярдо лиякс апак йовта",
+       "default": "зярдо лиякс апак ёвта",
        "prefs-files": "Файлат",
        "youremail": "Е-сёрма:",
        "username": "Теицянь леметь:",
        "yourrealname": "Алкуксонь леметь:",
        "yourlanguage": "Келесь:",
        "yournick": "Кедень путома:",
-       "badsiglength": "Кедень путомат пек кувака.\nЭйсэнзэ иляст уле $1 -до ламо {{PLURAL:$1|1=тешкст|тешкст}}.",
-       "yourgender": "СÑ\8bмеÑ\82Ñ\8c (Ñ\86Ñ\91Ñ\80анÑ\8c\82ейÑ\82еÑ\80енÑ\8c):",
+       "badsiglength": "Кедень путомат пек кувака.\nЭйсэнзэ иляст уле $1 -до ламо {{PLURAL:$1|тешкст|тешкст}}.",
+       "yourgender": "ТонÑ\81Ñ\8c ÐºÐ¾Ð´Ð° Ð¼ÐµÑ\80евлиÑ\82Ñ\8c Ñ\8dÑ\81Ñ\8c Ð¿Ñ\80Ñ\8fдоÑ\82?",
        "gender-unknown": "А меревлинь",
        "gender-male": "Сон витни-петни викилопатнесэ",
        "gender-female": "Сон витни-петни викилопатнесэ",
        "right-undelete": "Вельмевтемс нардань лопа",
        "right-block": "Кардамс лия совийтнень-лисийтнень витнемадо-петнемадо",
        "right-blockemail": "Кардамс лия лисийтнень-совийтнень е-сёрмань кучомадо",
-       "right-editinterface": "Витнемс-петнемс теицянь интерчаманть (васодема йожонть)",
+       "right-editinterface": "Витнемс-петнемс теицянь интерчаманть (васодема ёжонть)",
        "right-editusercssjs": "Витнемс-петнемс лия теицятнень CSS ды JS файласт",
        "right-editusercss": "Витнемс-петнемс лия теицятнень CSS файласт",
        "right-edituserjs": "Витнемс-петнемс лия теицятнень JS файласт",
        "right-import": "Ёвкстамс лия Викистэ лопат",
        "right-patrol": "Тешкстамс лиянь витнематнень-петнематнень лувонь кирдиеньсекс",
-       "right-mergehistory": "Ð\92ейÑ\82Ñ\8cÑ\81Ñ\8dндÑ\8fмÑ\81 Ð»Ð¾Ð¿Ð°Ñ\82ненÑ\8c Ñ\8eÑ\80оÑ\81Ñ\82-пÑ\83Ñ\82овкÑ\81оÑ\81Ñ\82",
+       "right-mergehistory": "Вейсэндямс лопатнень юрост-путовксост",
        "right-userrights": "Витнемс-петнемс совицянь весе видечитнень",
        "right-siteadmin": "Датабазань сёлгомо ды панжомо",
        "right-passwordreset": "Ваномс теицянь салава валонь полавтома е-сёрмат",
        "action-move-subpages": "печтевтемс те лопанть, ды алонзо весе лопатнень",
        "action-move-rootuserpages": "печтевтемс теицянь юрт лопатнень",
        "action-movefile": "печтевтемс те файланть",
-       "action-upload": "йовкстамс те файланть",
+       "action-upload": "ёвкстамс те файланть",
        "action-reupload": "уликс файланть полавтомс одонть марто",
        "action-upload_by_url": "ёвкстамс те файланть URL адресстэ",
        "action-writeapi": "нолдамс тевс сёрмадома API-нть",
        "action-block": "кардамс те совицянть витнемадо-петнемадо",
        "action-import": "совавтомс тезэнь лопат лия Викистэ",
        "action-importupload": "совавтомс тезэнь лопат файлань путома юртсто",
-       "action-mergehistory": "вейÑ\82Ñ\8cÑ\81Ñ\8dндÑ\8fмÑ\81 Ñ\82е Ð»Ð¾Ð¿Ð°Ð½Ñ\82Ñ\8c Ñ\8eÑ\80онзо-пÑ\83Ñ\82овкÑ\81онзо",
+       "action-mergehistory": "вейсэндямс те лопанть юронзо-путовксонзо",
        "action-userrights": "витнемс-петнемс совицянь весе видечитнень",
        "action-userrights-interwiki": "витнемс-петнемс лия викитнесэ теицянь видечитнень",
        "action-sendemail": "кучомс е-сёрмат",
        "recentchanges-label-bot": "Те витнеманть-петнеманть теизе кона-кона бот",
        "recentchanges-label-unpatrolled": "",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (вантаять [[Special:NewPages|од лопань лемрисьме]])",
-       "rcnotefrom": "Ð\90ло Ð½ÐµÐ²Ñ\82езÑ\8c  '''$2''' Ð»Ð¸Ñ\8fкÑ\81Ñ\82омÑ\82омаÑ\81Ñ\82о Ñ\81аезÑ\8c ('''$1''' Ð²Ð¸Ð´Ñ\81).",
+       "rcnotefrom": "Ð\90ло Ð¼Ð°ÐºÑ\81озÑ\8c {{PLURAL:$5|лиÑ\8fкÑ\81Ñ\82омÑ\82омаÑ\81Ñ\8c, ÐºÐ¾Ð½Ð°Ñ\81Ñ\8c|лиÑ\8fкÑ\81Ñ\82омÑ\82омаÑ\82не, ÐºÐ¾Ð½Ð°Ñ\82не}} Ñ\82еезÑ\8c <strong>$3, $4</strong> Ñ\88каÑ\81Ñ\82о Ñ\81аезÑ\8c (веÑ\81емеде Ð»Ð°Ð¼Ð¾ Ð½ÐµÐ²Ñ\82езÑ\8c <strong>$1</strong>).",
        "rclistfrom": "Невтемс од витьнематнень $3 $2-нть эйстэ саезь.",
        "rcshowhideminor": "$1 апокшкэ витнемат-петнемат",
        "rcshowhidebots": "$1 ботт",
        "recentchangeslinked-page": "Лопанть лемезэ:",
        "recentchangeslinked-to": "Тень таркас невтить те лопанть марто сюлмазь лопатнесэ полавтнематнень",
        "upload": "Ёкстамс файла",
-       "uploadbtn": "Ð\99овкÑ\81амÑ\81 Ñ\84айланÑ\82Ñ\8c",
+       "uploadbtn": "Ð\81вкÑ\81Ñ\82амÑ\81 Ñ\84айла",
        "uploadnologin": "Эзить сова",
-       "uploaderror": "Ð\99овкстамсто манявома",
+       "uploaderror": "Ð\81вкстамсто манявома",
        "upload-permitted": "Файлань форматт, конат меревить: $1.",
        "upload-preferred": "Файлань типт, конатне паро мельсэ учовить: $1.",
        "upload-prohibited": "Файлань типт, конатне кардазь: $1.",
-       "uploadlogpage": "Файлань йовкстамодо журнал",
+       "uploadlogpage": "Файлань ёвкстамодо журнал",
        "filename": "Файлань лем",
        "filedesc": "Нурькинестэ",
        "fileuploadsummary": "Нурькинестэ:",
        "filename-tooshort": "Файлань лементь а саты кувалмозо.",
        "unknown-error": "А содавикс манявкс лиссь.",
        "file-thumbnail-no": "Файланть лемезэ ушодови  <strong>$1</strong>.\nСонсь маряви вишкалгавтозь фотокуво, покшолмазо ''(кенжешка)''.\nУлиндеряй файланть покш верзиязо, йовкстыка сонзэ  - арась, полавтыка тетень лемензэ.",
-       "file-exists-duplicate": "Те кавонзавкс файла вана {{PLURAL:$1|1=те файланть|неть файлатнень}} эйстэ:",
+       "file-exists-duplicate": "Те кавонзавкс файла вана {{PLURAL:$1|те файланть|неть файлатнень}} эйстэ:",
        "uploadwarning": "Совавтомадо кардамонь пачтямо",
        "savefile": "Ванстомс файланть",
        "uploaddisabled": "Совавтомась лоткавтозь",
        "license-header": "Лицензиянь теема:",
        "nolicense": "Лицензия арась",
        "license-nopreview": "(Васнянь невтевкс арась)",
-       "upload_source_file": " (арси машинасот файла)",
+       "upload_source_file": " (арсимашинастот файла, конань тонсь кочкик)",
        "listfiles_search_for": "Вешнемс медиа лементь:",
        "imgfile": "файл",
        "listfiles": "Файлат-мезть",
        "filepage-nofile": "Истямо лем марто файла арась.",
        "uploadnewversion-linktext": "Йовкстак од версия те файластонть",
        "shared-repo-from": "вана теньстэ $1",
-       "shared-repo": "вейÑ\82Ñ\8cÑ\81Ñ\8dнÑ\8c Ð²Ð°Ð½Ñ\81Ñ\82ома Ñ\82аÑ\80ка",
+       "shared-repo": "вейсэнь ванстома тарка",
        "filerevert": "Велявтомс $1 мекев",
        "filerevert-legend": "Велявтомс файланть",
        "filerevert-comment": "Тувталось:",
        "statistics": "Статистикат",
        "statistics-header-pages": "Лопань статистикат",
        "statistics-header-edits": "Статистикань витнеме-петнеме",
-       "statistics-header-views": "Статистикань ваномо",
        "statistics-header-users": "Теицянь статистика",
        "statistics-header-hooks": "Лия статистика",
        "statistics-articles": "Потмо марто лопат",
        "statistics-pages": "Лопат",
        "statistics-files": "Йовкстань файлат",
-       "statistics-views-total": "Ваннома потмотнеде весемезэ",
-       "statistics-views-peredit": "Зяроксть ванозь апак витне апак петне",
        "statistics-users-active": "Чистэ лисийть-совийть",
-       "statistics-mostpopular": "Весемеде сеедьстэ ванозь лопат",
        "doubleredirects": "Кавксть ютавтозь",
        "double-redirect-fixer": "Печтевтемс витнема-петнема пель",
        "brokenredirects": "Сезезь ёнксось",
        "uncategorizedtemplates": "Категориявтомо лопа парцунт",
        "unusedcategories": "Тевс апак нолда категорият",
        "unusedimages": "Тевс апак нолда файлат",
-       "popularpages": "Раське ютксо вечкевикс лопат",
        "wantedcategories": "Вешень категорият",
        "wantedpages": "Вешень лопат",
        "wantedfiles": "Вешезь файлат",
        "suppress": "А ванома",
        "booksources": "Кинигань лисьмапрят",
        "booksources-search-legend": "Вешнемс кинигань лисьмапрят",
-       "booksources-go": "Адя",
        "specialloguserlabel": "Топавтыцясь:",
        "speciallogtitlelabel": "Норавоматарка (коняксозо эли теицязо):",
        "log": "Совамо-лисема тевть (регистрациясь)",
        "linksearch": "Ушо ёндонь сюлмавомапенень вешнема",
        "linksearch-pat": "Вешнемкс парцун:",
        "linksearch-ns": "Лем потмозо:",
-       "linksearch-ok": "Вешнэмс",
+       "linksearch-ok": "Вешнемс",
        "linksearch-line": "$1-в сюлмавома песь моли вана тестэ $2",
        "listusers-submit": "Невтемс",
        "listusers-noresult": "Совицязо а муеви",
        "unwatchthispage": "Лоткамс ванстомадонзо",
        "notvisiblerev": "Лиякстомтомась нардазь",
        "watchlist-details": "Ванома лемрисьмесэть $1 {{PLURAL:$1|лопа|лопат}}, кортнема лопатнень лангс апак вано.",
-       "wlshowlast": "Невтемс мельсе $1 цяст $2 чить $3",
+       "wlshowlast": "Невтемс мельсе $1 цяст $2 чить",
        "watchlist-options": "Ванома потмонь аравтнемат",
        "watching": "Ванома...",
        "unwatching": "Аванома...",
        "protect-default": "Весе теицятненень маштови",
        "protect-fallback": "Вешеви ве мельс прамось «$1»-нть",
        "protect-level-autoconfirmed": "Саймас аравтомс од ды апак сёрмадстово теицятнень",
-       "protect-level-sysop": "Ансяк администраторт",
+       "protect-level-sysop": "Ансяк администратортнэнень мереви",
        "protect-summary-cascade": "каскадонь ладсо",
        "protect-expiring": "прядови $1 (UTC)",
        "protect-expiry-indefinite": "певтема",
        "undeleteviewlink": "ваномс",
        "undeleteinvert": "Кочказень таркас апаконь кочкамо",
        "undeletecomment": "Тувталось:",
-       "undeletedrevisions": "{{PLURAL:$1|1=1 лиякстомтома|$1 лиякстомтомат}} вельмевтезь",
+       "undeletedrevisions": "{{PLURAL:$1|1 лиякстомтома|$1 лиякстомтомат}} вельмевтезь",
        "undeletedrevisions-files": "{{PLURAL:$1|1=1 лиякстомтома|$1 лиякстомтомат}} ды {{PLURAL:$2|1=1 файла|$2 файлат}} вельмевтезь",
        "undeletedfiles": "{{PLURAL:$1|1=1 файла|$1 файлат}} вельмевтезь",
-       "undelete-search-box": "Ð\92еÑ\88немÑ\81 Ð½Ð°Ñ\80данÑ\8c Ð»Ð¾Ð¿Ð°Ñ\82ненÑ\8c Ð¹Ñ\83тксто",
+       "undelete-search-box": "Ð\92еÑ\88немÑ\81 Ð½Ð°Ñ\80дазÑ\8c Ð»Ð¾Ð¿Ð°Ñ\82ненÑ\8c Ñ\8eтксто",
        "undelete-search-prefix": "Невтемс лопат тестэ саезь:",
-       "undelete-search-submit": "Вешнэмс",
+       "undelete-search-submit": "Вешнемс",
        "undelete-error-short": "\"$1\" файлань вельмевтемстэ лиссь ильведевкс",
        "undelete-show-file-submit": "Истя",
        "namespace": "Лем потмозо:",
        "sp-contributions-search": "Путовксонь вешнеме",
        "sp-contributions-username": "IP адрес эли теицянь лем:",
        "sp-contributions-toponly": "Невтемс ансяк не витнематнень-петнематнень, конат совавтовить меельце верзиятнень юткс",
-       "sp-contributions-submit": "Вешнэмс",
+       "sp-contributions-submit": "Вешнемс",
        "whatlinkshere": "Мезе тезэнь сюлмави",
        "whatlinkshere-title": "$1 марто сюлмазь лопатне",
        "whatlinkshere-page": "Лопась:",
        "whatlinkshere-prev": "{{PLURAL:$1|1=икеле|седе икелень $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|1=сыця|сы $1}}",
        "whatlinkshere-links": "← сюлмавомапеть",
-       "whatlinkshere-hideredirs": "$1 {{PLURAL:$1|1=тарка йутавты|таркат йутавтыть}} тей",
+       "whatlinkshere-hideredirs": "$1 ютавты козонь-козонь",
        "whatlinkshere-hidetrans": "$1 сюлмавозь пелькстнэнь",
        "whatlinkshere-hidelinks": "$1 сюлмавома петь",
        "whatlinkshere-hideimages": "$1 файланть сюлмавомапензэ",
        "blocklist-target": "Норовамо тарка",
        "blocklist-expiry": "Прядови",
        "blocklist-reason": "Тувтал",
-       "ipblocklist-submit": "Вешнэме",
+       "ipblocklist-submit": "Вешнеме",
        "infiniteblock": "певтеме",
        "expiringblock": "саймас саемась прядови $1 $2 цяссто",
        "anononlyblock": "ансяк лемтеме",
        "tooltip-ca-edit": "Те лопаськак витневи-петневи. Ансяк, ванстомадо икеле яла васнянь невтевкс повнэнть лепштика.",
        "tooltip-ca-addsection": "Ушодомс од явкс.",
        "tooltip-ca-viewsource": "Те лопась ванстозь. Ули меленк ваномонзо сонзе лисмапрянть.",
-       "tooltip-ca-history": "Те лопанть йутазь версиянзо.",
+       "tooltip-ca-history": "Те лопанть ютазь версиянзо.",
        "tooltip-ca-protect": "Аравтомс те лопанть прянь ванстомас",
        "tooltip-ca-delete": "Нардамс те лопанть, илязо улеяк",
        "tooltip-ca-move": "Ютавтык те лопанть лияв",
        "pageinfo-header-edits": "Витнемс-петнемс юронзо-путовксонзо",
        "pageinfo-header-properties": "Лопанть уликсчинзэ",
        "pageinfo-display-title": "Коняксонть таргамс лангс",
-       "pageinfo-views": "Зяро ванома потмонзо",
        "pageinfo-subpages-name": "Те лопанть явкслопанзо",
        "pageinfo-edits": "Зяроксть витнезь-петнезь",
        "pageinfo-authors": "Весемезэ зяро авторонзо",
        "newimages-legend": "Сувтеме",
        "newimages-label": "Файлалем (эли пельксэзэ):",
        "noimages": "Арась мезе ваномс.",
-       "ilsubmit": "Вешнэмс",
+       "ilsubmit": "Вешнемс",
        "bydate": "чинь коряс",
        "ago": "$1-до икеле",
        "bad_image_list": "Лувось-форматось вана истямо:\n\nТесэ ансяк потмонть пакшкетне (рисьметне, конат ушодовить * тешкстсэ) лововить. Рисьмень васень сюлмавома пентень эряви невтемс амаштовикс файла лангс. Секе рисьминентень понгиндеряйть лия сюлмавома петь, сынь лововить башка, лиякс меремс сынь лопат, косо файлат маштовить невтемс.",
        "exif-urgency-normal": "Куншка видень ($1)",
        "exif-urgency-low": "Аламо ($1)",
        "exif-urgency-high": "Ламо ($1)",
-       "watchlistall2": "весе",
        "namespacesall": "весе",
        "monthsall": "весе",
        "confirmemail": "Кемекстамс е-почтань сёрмапаргот",
        "version-software": "Нолдань программат",
        "version-software-product": "Шкавкс-нолдавкс",
        "version-software-version": "Верзия",
-       "fileduplicatesearch": "Вешнэмс кавтаське файлат",
-       "fileduplicatesearch-legend": "Вешнэмс кавтаське",
+       "fileduplicatesearch": "Вешнемс кавтаське файлат",
+       "fileduplicatesearch-legend": "Вешнемс кавтаське",
        "fileduplicatesearch-filename": "Файла лем:",
-       "fileduplicatesearch-submit": "Вешнэмс",
+       "fileduplicatesearch-submit": "Вешнемс",
        "specialpages": "Башка тевень лопат",
        "specialpages-group-other": "Лия башка тевень лопат",
        "specialpages-group-login": "Совамс / шкамс совамотарка",
        "htmlform-reset": "Саемс мекев полавтоматнень",
        "htmlform-selectorother-other": "Лия",
        "rightsnone": "(арасть)",
+       "revdelete-summary": "витнемадо-петнемадо нурькине йовтавкс",
        "feedback-subject": "Мезде:",
        "feedback-message": "Пачтямнэсь:",
        "feedback-cancel": "А теемс",
index b22d111..3abe657 100644 (file)
@@ -9,7 +9,8 @@
                        "Parthava (on mzn.wikipedia.org)",
                        "Spacebirdy",
                        "محک",
-                       "아라"
+                       "아라",
+                       "Alirezaaa"
                ]
        },
        "tog-underline": "پیوندون زیر خط دکشی بواشه",
@@ -78,7 +79,7 @@
        "june": "ژوئن",
        "july": "ژوئیه",
        "august": "آگوست",
-       "september": "سÙ\80Ù\87â\80\8cÙ¾Ù\80تÙ\80Ù\87â\80\8cÙ\85Ù\80بÙ\80ر",
+       "september": "سپتاÙ\85بر",
        "october": "اکتبر",
        "november": "نـووه‌مـبـر",
        "december": "دسامبر",
@@ -90,7 +91,7 @@
        "june-gen": "جـون",
        "july-gen": "ژوئیه",
        "august-gen": "آگوست",
-       "september-gen": "سÙ\80Ù\87â\80\8cÙ¾Ù\80تÙ\80Ù\87â\80\8cÙ\85Ù\80بÙ\80ر",
+       "september-gen": "سپتاÙ\85بر",
        "october-gen": "اکتبر",
        "november-gen": "نـووه‌مـبـر",
        "december-gen": "دسامبر",
        "changeemail-newemail": "ترنه ایمیل آدرس:",
        "changeemail-none": "(هچّی)",
        "changeemail-submit": "ایمیل ره عوض هاکردن",
-       "changeemail-cancel": "ول هاکردن",
        "bold_sample": "ضخیم",
        "bold_tip": "ضخیم",
        "italic_sample": "کژ",
        "specialpage-empty": "این صفحه دله هچّی دَنی‌یه",
        "unusedcategories": "کـار نـأزو رج‌ئون",
        "unusedimages": "کـار نأزو فایل‌ئون",
-       "popularpages": "خاسگار هدار صفحه‌ئون",
        "wantedpages": "صفحه‌ئونی که خامبی",
        "prefixindex": "تموم صفحه‌ئون پیشوند دار",
        "shortpages": "پچیک صفحه‌ئون",
        "pager-newer-n": "{{PLURAL:$1|أتـا نـه‌ته‌ر|$1 تـا نـه‌ته‌ر}}",
        "pager-older-n": "{{PLURAL:$1|أتـا کـوهـنـه‌ته‌ر|$1 تـا کوهـنـه‌ته‌ر}}",
        "booksources-search-legend": "بگردستن منابع کتاب",
-       "booksources-go": "بـور",
        "booksources-text": "زیر فهرستی از لینکا به وبگاه‌ئون دیگه دره که کتاب‌ئون نو و دست دوم روشنّه و ممکنه اطلاعات ویشتری راجع به کتاب مورد نظر دارِن:",
        "specialloguserlabel": "کارور:",
        "allpages": "همه صفحه‌ئون",
        "revertmove": "واچـیـه‌ن",
        "delete_and_move_confirm": "أره، پاک هاکه‌ن وه ره",
        "export": "دأیابأبه‌رده‌ن ولـگ‌ئون",
-       "exporttext": "شما بتونّی متن و تاریخچهٔ دچی‌یه بیّن اتا صفحهٔ مشخص یا یتـّا مجموعه‌ از صفحه‌ها ره به شکل دپوشنی‌یه اکس‌ام‌ال دله بریم دربَورین.\n\nاین اطلاعات ره بنشنه اتا ویکی دیگه دله که نرم‌افزار «مدیاویکی» ره اجرا کانده از طریق [[Special:Import|صفحهٔ دله‌دشنی‌ین]] وارد هاکردن.\n\nبریم‌دربَوردن صفحه‌ها وسّه، وشون عنوان ره این جعبه دله دشنین (هر سطر فقط اتا عنوان) و معلوم هاکنین که تازه دگاردسته‌ئون صفحه ره همراه نسخه‌ئون قدیمی‌تر و تاریخچهٔ صفحه خوندنّی، یا تازه دگاردسته‌ئون صفحه و اطلاعات آخرین دچی‌یه ره، تیناری اشنّی.\n\nدومین حالت سَره، شما بتونّی اتا لینک جه استفاده هاکنین، مثلاً [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] صفحهٔ «[[{{MediaWiki:Mainpage}}]]» وسّه.",
+       "exporttext": "شما بتونّی متن و تاریخچهٔ دچی‌یه بیّن اتا صفحهٔ مشخص یا یتـّا مجموعه‌ از صفحات ره به شکل دپوشنی‌یه اکس‌ام‌ال دله بریم دربَورین.\n\nاین اطلاعات ره بنشنه اتا ویکی دیگه دله که نرم‌افزار «مدیاویکی» ره اجرا کانده از طریق [[Special:Import|صفحهٔ دله‌دشنی‌ین]] وارد هاکردن.\n\nبریم‌دربَوردن صفحات وسّه، وشون عنوان ره این جعبه دله دشنین (هر سطر فقط اتا عنوان) و معلوم هاکنین که تازه دگاردسته‌ئون صفحه ره همراه نسخه‌ئون قدیمی‌تر و تاریخچهٔ صفحه خوندنّی، یا تازه دگاردسته‌ئون صفحه و اطلاعات آخرین دچی‌یه ره، تیناری اشنّی.\n\nدومین حالت سَره، شما بتونّی اتا لینک جه استفاده هاکنین، مثلاً [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] صفحهٔ «[[{{MediaWiki:Mainpage}}]]» وسّه.",
        "allmessages-filter-all": "همه",
        "thumbnail-more": "گت بوو",
        "import-interwiki-submit": "بیاردن",
        "exif-orientation-1": "معمولی",
        "exif-orientation-3": "180 درجه چرخ بزوئن",
        "exif-orientation-4": "عمودی په‌شت ئو روبئی",
-       "watchlistall2": "همه",
        "namespacesall": "همه",
        "monthsall": "همه ماه‌ئون",
        "confirmemail_body_changed": "ات نفر، احتمالاً خاد شمِا، از نشونی آی‌پی $1 نشونی پوست ایلکتورونیک حیساب «$2» {{SITENAME}} ره تغییر هدائه.\n\nبرای تایید این که این حیساب واقعاً شمه شه و فعال هکردن دبارهٔ ویژگی پوست ایلکتورونیک {{SITENAME}}، پیوند زیر دله ره شه مرورگر دله وا هکنین:\n\n$3\n\nاگه این حساب شه مه نی‌یه، پیوند زیر ره دنبال هکنین تا تغییر پوست ایلیکتورونیک ره لغو هکنین:\n\n$5\n\nاین تایید یه در $4 منقضی وانه.",
index fedb292..9a0349a 100644 (file)
@@ -1,67 +1,67 @@
 {
-    "@metadata": {
-        "authors": [
-            "Belgian man",
-            "CdaMVvWgS",
-            "Node ue"
-        ]
-    },
-    "sunday": "Tondak",
-    "monday": "Mondak",
-    "tuesday": "Dintak",
-    "wednesday": "Mitwok",
-    "thursday": "Donertak",
-    "friday": "Preidak",
-    "saturday": "Tadurdei",
-    "moredotdotdot": "Iyuw...",
-    "and": "&#32;me",
-    "qbedit": "Kiwiwid",
-    "errorpagetitle": "Dairinaiya",
-    "help": "Ipuok",
-    "search": "Kanani",
-    "go": "Nuwa ko!",
-    "history_short": "Ekadaedaenigawae",
-    "edit": "Kiwiwid",
-    "delete": "Iyababa",
-    "unprotect": "Eab oberei",
-    "toolbox": "Dabadi n bwait makur",
-    "currentevents": "Imwin",
-    "currentevents-url": "Project:Imwin",
-    "edithelp": "Oomo/edar Ipuok",
-    "mainpage": "Bwiema peij",
-    "mainpage-description": "Bwiema peij",
-    "editsection": "Kiwiwid",
-    "showtoc": "oduwen",
-    "hidetoc": "ewewin",
-    "nstab-help": "Ipuok",
-    "error": "Dairinaiya",
-    "login": "Metu",
-    "logout": "Meta",
-    "userlogout": "Meta",
-    "bold_sample": "Eõ mangiyungiy",
-    "bold_tip": "Eõ mangiyungiy",
-    "image_sample": "Ekar.jpg",
-    "savearticle": "Otsimor",
-    "newarticle": "(Etsimeduw)",
-    "editing": "Oomo/edar $1",
-    "editingsection": "Oomo/edar $1 (itubwang)",
-    "prefs-skin": "Witsin",
-    "searchresultshead": "Anani ko",
-    "yourlanguage": "Edorer",
-    "recentchanges": "Iwiwidit tsimeduw",
-    "hist": "eka",
-    "hide": "witsit imin gogoro",
-    "show": "oduwen",
-    "randompage": "Tamo peij",
-    "move": "Memori",
-    "allpagessubmit": "nuwa ko",
-    "emailuser": "Emaileiy amune",
-    "emailfrom": "Atsiu",
-    "emailto": "Animwen",
-    "emailsend": "Oiyon",
-    "watch": "Aea",
-    "unwatch": "Eab krak",
-    "confirm": "Oebwigaga",
-    "contributions": "Mana engame totow inne",
-    "ilsubmit": "Anani ko"
+       "@metadata": {
+               "authors": [
+                       "Belgian man",
+                       "CdaMVvWgS",
+                       "Node ue"
+               ]
+       },
+       "sunday": "Tondak",
+       "monday": "Mondak",
+       "tuesday": "Dintak",
+       "wednesday": "Mitwok",
+       "thursday": "Donertak",
+       "friday": "Preidak",
+       "saturday": "Tadurdei",
+       "moredotdotdot": "Iyuw...",
+       "and": "&#32;me",
+       "qbedit": "Kiwiwid",
+       "errorpagetitle": "Dairinaiya",
+       "help": "Ipuok",
+       "search": "Kanani",
+       "go": "Nuwa ko!",
+       "history_short": "Ekadaedaenigawae",
+       "edit": "Kiwiwid",
+       "delete": "Iyababa",
+       "unprotect": "Eab oberei",
+       "toolbox": "Dabadi n bwait makur",
+       "currentevents": "Imwin",
+       "currentevents-url": "Project:Imwin",
+       "edithelp": "Oomo/edar Ipuok",
+       "mainpage": "Bwiema peij",
+       "mainpage-description": "Bwiema peij",
+       "editsection": "Kiwiwid",
+       "showtoc": "oduwen",
+       "hidetoc": "ewewin",
+       "nstab-help": "Ipuok",
+       "error": "Dairinaiya",
+       "login": "Metu",
+       "logout": "Meta",
+       "userlogout": "Meta",
+       "bold_sample": "Eõ mangiyungiy",
+       "bold_tip": "Eõ mangiyungiy",
+       "image_sample": "Ekar.jpg",
+       "savearticle": "Otsimor",
+       "newarticle": "(Etsimeduw)",
+       "editing": "Oomo/edar $1",
+       "editingsection": "Oomo/edar $1 (itubwang)",
+       "prefs-skin": "Witsin",
+       "searchresultshead": "Anani ko",
+       "yourlanguage": "Edorer",
+       "recentchanges": "Iwiwidit tsimeduw",
+       "hist": "eka",
+       "hide": "witsit imin gogoro",
+       "show": "oduwen",
+       "randompage": "Tamo peij",
+       "move": "Memori",
+       "allpagessubmit": "nuwa ko",
+       "emailuser": "Emaileiy amune",
+       "emailfrom": "Atsiu",
+       "emailto": "Animwen",
+       "emailsend": "Oiyon",
+       "watch": "Aea",
+       "unwatch": "Eab krak",
+       "confirm": "Oebwigaga",
+       "contributions": "Mana engame totow inne",
+       "ilsubmit": "Anani ko"
 }
index 6426b3a..cbe2198 100644 (file)
        "statistics": "Tlapōhualiztli",
        "statistics-header-pages": "Zāzaniltin tlapōhualli",
        "statistics-header-edits": "Tlapatlaliztli tlapōhualli",
-       "statistics-header-views": "Tlahpololiztli tlapōhualli",
        "statistics-header-users": "Tlatequitiltilīlli ītlapōhualiz",
        "statistics-articles": "Tlapiyaliztli zāzanilli",
        "statistics-pages": "Zāzaniltin",
        "statistics-pages-desc": "Mochīntīn zāzaniltin huiquipan, mopiyah tēixnāmiquiliztli, tlacuepaliztli, etz.",
        "statistics-files": "Tlahcuilōlli ōmoquetz",
-       "statistics-views-peredit": "Tlahpololiztli ic tlapatlaliztli",
        "doubleredirects": "Ōntetl tlacuepaliztli",
        "brokenredirects": "Tzomoc tlacuepaliztli",
        "brokenredirects-edit": "ticpatlāz",
        "uncategorizedtemplates": "Nemachiòmë âmò tlatlaìxmatkàtlàlìltìn",
        "unusedcategories": "Tlaìxmatkàtlàlilòmë tlèn âmò mokìntekìuhtia",
        "unusedimages": "Ìxiptìn tlèn âmò mokìntekìuhtia",
-       "popularpages": "Màsèwàltlaìxtlapaltìn",
        "wantedcategories": "Ìtech kineki tlaìxmatkàtlàlilòtl",
        "wantedpages": "Zāzaniltin moēlēhuiah",
        "wantedfiles": "Ìpan moneki èwaltìn",
        "pager-newer-n": "{{PLURAL:$1|1 yancuīc|$1 yancuīc}}",
        "pager-older-n": "{{PLURAL:$1|1 huēhuetl|$1 huēhueh}}",
        "booksources": "āmoxmēyalli",
-       "booksources-go": "Yāuh",
        "specialloguserlabel": "Tlatequitiltilīlli:",
        "speciallogtitlelabel": "Tōcāitl:",
        "log": "Tlahcuilōlloh",
        "watchthispage": "Tictlachiyāz inīn zāzanilli",
        "unwatch": "Ahtictlachiyāz",
        "watchlist-details": "{{PLURAL:$1|$1 zāzanilli|$1 zāzaniltin}} motlachiyaliz, ahmo mopōhua tēixnāmiquiliztli.",
-       "wlshowlast": "Tiquinttāz tlapatlaliztli īhuīcpa achto $1 yēmpohualminuhtli, $2 tōnaltin $3",
+       "wlshowlast": "Tiquinttāz tlapatlaliztli īhuīcpa achto $1 yēmpohualminuhtli, $2 tōnaltin",
        "watching": "Tlachiyacah...",
        "unwatching": "Ahtlachiyacah...",
        "enotif_impersonal_salutation": "tlatequitiltilīlli īpan {{SITENAME}}",
        "exif-gpslatitude-s": "Huiztlān",
        "exif-gpslongitude-e": "Tlāpcopa huehtlatzīncāyōtl",
        "exif-gpslongitude-w": "Cihuātlāmpa huehtlatzīncāyōtl",
-       "watchlistall2": "mochīntīn",
        "namespacesall": "mochīntīn",
        "monthsall": "(mochīntīn)",
        "confirmemail": "Ticchicāhuāz e-mail",
        "blankpage": "Iztāc zāzanilli",
        "htmlform-selectorother-other": "Occē",
        "rightsnone": "ahtlein",
+       "revdelete-summary": "ticpatlāz tlahcuilōltōn",
        "searchsuggest-search": "Tlatēmoliztli",
        "api-error-ok-but-empty": "Tlâtek îtlakawilistli: Âmò tènankilia in tlatèmakani.",
        "api-error-overwrite": "Awel motlâkuilnepanòltis sè èwalli tlèn yi katki.",
index 7a2d8f4..d5ea8f7 100644 (file)
        "moredotdotdot": "Iáu-ū",
        "morenotlisted": "這毋是完整的表",
        "mypage": "Ia̍h",
-       "mytalk": "Góa ê thó-lūn",
+       "mytalk": "Thó-lūn",
        "anontalk": "Chit ê IP ê thó-lūn-ia̍h",
        "navigation": "Se̍h chām",
        "and": "&#32;kap",
        "unprotectthispage": "kái chit ia̍h ê pó-hō͘",
        "newpage": "Sin ia̍h",
        "talkpage": "Thó-lūn chit ia̍h",
-       "talkpagelinktext": "thó-lūn",
+       "talkpagelinktext": "Thó-lūn",
        "specialpage": "Te̍k-sû-ia̍h",
        "personaltools": "Kò-jîn kang-khū",
        "articlepage": "Khoàⁿ loē-iông ia̍h",
        "otherlanguages": "Kî-thaⁿ ê gí-giân",
        "redirectedfrom": "(Tùi $1 choán--lâi)",
        "redirectpagesub": "Choán-ia̍h",
+       "redirectto": "跳去:",
        "lastmodifiedat": "Chit ia̍h tī $1,  $2 ū kái--koè",
        "viewcount": "Chit ia̍h kàu taⁿ, hō͘ lâng khoàⁿ $1 pái.",
        "protectedpage": "Siū pó-hō͘ ê ia̍h",
        "hidetoc": "siu",
        "collapsible-collapse": "Siu",
        "collapsible-expand": "Khui",
+       "confirmable-confirm": "{{GENDER:$1|你}}敢確定唅?",
+       "confirmable-yes": "著啦",
+       "confirmable-no": "無啦!毋是!",
        "thisisdeleted": "Khoàⁿ a̍h-sī kiù $1?",
        "viewdeleted": "Beh khoàⁿ $1?",
        "restorelink": "{{PLURAL:$1|chi̍t ê thâi-tiàu ê pian-chi̍p|$1 thâi-tiàu ê pian-chi̍p}}",
        "viewyourtext": "你會使看<strong>你改的</strong>原始碼,並且khop去這頁:",
        "protectedinterface": "Chit ia̍h thê-kiong nńg-thé kài-bīn ēng ê bûn-jī. Ūi beh ī-hông lâng chau-that, só͘-í ū siū tio̍h pó-hō͘. Nā beh kái hoan-e̍k, chhiaⁿ khì Ûi-ki Mûi-thé chāi-tē-hoà sū-kang [//translatewiki.net/ translatewiki.net] hiâ.",
        "editinginterface": "'''Sè-jī:''' Lí tng teh siu-kái 1 bīn thê-kiong nńg-thé kài-bīn bûn-jī ê ia̍h. Jīn-hô kái-piàn to ē éng-hióng tio̍h kî-thaⁿ iōng-chiá ê sú-iōng kài-bīn. Nā beh kái hoan-e̍k, chhiaⁿ khì Ûi-ki Mûi-thé chāi-tē-hoà sū-kang [//translatewiki.net/ translatewiki.net] hiâ.",
+       "translateinterface": "欲改抑是加維基的翻譯,請去維基媒體的在地化專案:[//translatewiki.net/ 翻譯維基網]。",
        "cascadeprotected": "Chit-ê ia̍h í-keng hông pó-hō͘ bē kái tit. In-ūi i tī ē-bīn {{PLURAL:$1|ê|ê}} liân-só pó-hō͘ lāi-té:\n$2",
        "namespaceprotected": "Lí bô khoân-lī kái '''$1'''  miâ-khong-kan ê ia̍h",
        "customcssprotected": "你無受權去改這个 CSS頁,因為這个頁有包括別个用者的個人設定。",
        "ns-specialprotected": "特殊頁袂得改。",
        "titleprotected": "這个標題已經予[[User:$1|$1]]保護起來,袂得提來用。\n原因是 \"<em>$2</em>。",
        "filereadonlyerror": "因為檔案庫這馬只會使看,所以袂得改 \"$1\"這个檔案。\n鎖檔案庫的管理員講是因為:\"$3\"。",
+       "invalidtitle-knownnamespace": "佇名空間 \"$2\"佮文字\"$3\"的標題袂使得。",
+       "invalidtitle-unknownnamespace": "名空間編號 $1(毋知名)的\"$2\"文字標題袂使用。",
        "exception-nologin": "Bô teng-ji̍p",
-       "exception-nologin-text": "請先[[Special:Userlogin|登入]]了才有法度看這頁抑對這頁做動作。",
+       "exception-nologin-text": "請先登入,才有法度看這頁抑對這頁做動作。",
        "exception-nologin-text-manual": "請先$1,才有法度看這頁抑對這頁做動作。",
        "virus-badscanner": "設定毋著:你的病毒掃描程式阮毋知:<em>$1</em>",
        "virus-scanfailed": "掃病毒無成功(代碼$1)",
        "createaccountmail": "Iōng chi̍t-ê lîm-sî loān-sò͘ sán-seng ê bi̍t-bé , kià khì goá chí-tēng ê tiān-chú-phoe tē-chí.",
        "createacct-realname": "真正的名",
        "createaccountreason": "Lí-iû:",
+       "createacct-reason": "理由:",
        "createacct-reason-ph": "為啥物你欲開一另外一个口座?",
        "createacct-captcha": "安全檢驗",
        "createacct-imgcaptcha-ph": "共下跤你看著的字拍入來",
        "createaccounterror": "Bô hoat-tō͘ khui kháu-chō: $1",
        "nocookiesnew": "你的用者口座已經開好矣,毋過你猶未登入,{{SITENAME}}有用Cookies做記錄登入的用者,你無允准用Cookies,請先共阻擋提掉,才閣用你的用者名稱佮密碼登入。",
        "nocookieslogin": "{{SITENAME}}有用cookies做記錄用者,毋過你無允準用cookies,等你改做會當了後,才閣試。",
+       "nocookiesfornew": "因為不明的原因,阮無法度建立用者的口座。\n請先確定你的cookie會使用,閣重進入這頁,閣試一擺。",
+       "noname": "你提供的用者名稱袂使用。",
        "loginsuccesstitle": "Teng-ji̍p sêng-kong",
        "loginsuccess": "Lí hiān-chhú-sî í-keng teng-ji̍p {{SITENAME}} chò \"$1\".",
        "nosuchuser": "Chia bô iōng-chiá hō-chò \"$1\".\nIiōng-chiá hō-chò ū hun toā-jī sè-jī.\nChhiáⁿ kiám-cha lí ê phèng-im, a̍h-sī  [[Special:UserLogin/signup|khui sin iōng-chiá ê kháu-chō.]]",
        "nosuchusershort": "Bô \"$1\" chit ê iōng-chiá miâ.\nTùi khoàⁿ-māi,  lí phah--ê.",
        "nouserspecified": "Lí ài chí-tēng chi̍t ê iōng-chiá miâ.",
+       "login-userblocked": "這個用者已經予人封鎖,袂使登入。",
        "wrongpassword": "Lí su-ji̍p ê bi̍t-bé ū têng-tâⁿ. Chhiáⁿ têng chhì.",
        "wrongpasswordempty": "Bi̍t-bé keh-á khang-khang. Chhiáⁿ têng chhì.",
+       "passwordtooshort": "密碼上少愛{{PLURAL:$1|1字|$1字}}",
+       "password-name-match": "你的密碼愛佮你的用者名稱無仝。",
+       "password-login-forbidden": "這个用者名稱佮密碼已經禁止用。",
        "mailmypassword": "Têng siat bi̍t-bé",
        "passwordremindertitle": "{{SITENAME}} the-chheN li e bit-be",
        "noemail": "Kì-lo̍k bô iōng-chiá \"$1\" ê e-mail chū-chí.",
        "changeemail": "Kái tiān-chú-phoe ê tē-chí",
        "changeemail-oldemail": "Chit-má ê E-mail tē-chí:",
        "changeemail-newemail": "Sin E-mail ê chū-chí:",
-       "changeemail-cancel": "Chhú-siau",
        "bold_sample": "Chho·-thé bûn-jī",
        "bold_tip": "Chho·-thé jī",
        "italic_sample": "Chhú-thé ê bûn-jī",
        "search-section": "(toān-lo̍h $1)",
        "searchall": "choân-pō·",
        "showingresults": "Ē-kha tùi #<b>$2</b> khai-sí hián-sī <b>$1</b> hāng kiat-kó.",
-       "showingresultsheader": "對'''$4'''的{{PLURAL:$5|第 '''$1''' 到第 '''$3''' 項結果|第 '''$1 - $2''' 項,總共 '''$3''' 項結果}}",
        "powersearch-legend": "Kiám-sek",
        "preferences": "Siat-tēng",
        "mypreferences": "Góa ê siat-tēng",
        "uncategorizedtemplates": "Bô lūi-pia̍t ê pang-bô͘",
        "unusedcategories": "Bô iōng ê lūi-pia̍t",
        "unusedimages": "Bô iōng ê iáⁿ-siōng",
-       "popularpages": "Sî-kiâⁿ ê ia̍h",
        "wantedcategories": "wantedcategories",
        "wantedpages": "Beh ti̍h ê ia̍h",
        "mostlinked": "Siōng chia̍p liân-kiat ê ia̍h",
        "unwatch": "Mài kàm-sī",
        "unwatchthispage": "Mài koh kàm-sī",
        "watchlist-details": "Kàm-sī-toaⁿ ū {{PLURAL:$1|$1 ia̍h|$1 ia̍h}}, thó-lūn-ia̍h bô sǹg chāi-lāi.",
-       "wlnote": "Ē-kha sī '''$2''' tiám-cheng í-lāi siōng sin ê $1 ê kái-piàn.",
-       "wlshowlast": "Hián-sī chêng $1 tiám-cheng $2 ji̍t $3",
+       "wlnote": "$3 $4: Ē-kha sī <strong>$2</strong> tiám-cheng í-lāi siōng sin ê <strong>$1</strong> ê kái-piàn.",
+       "wlshowlast": "Hián-sī chêng $1 tiám-cheng $2 ji̍t",
        "deletepage": "Thâi ia̍h",
        "confirm": "Khak-tēng",
        "excontent": "lōe-iông sī: '$1'",
        "bydate": "chiàu ji̍t-kî",
        "metadata-expand": "Hián-sī iù-chiat",
        "metadata-collapse": "Am iù-chiat",
-       "watchlistall2": "choân-pō͘",
        "namespacesall": "choân-pō·",
        "monthsall": "choân-pō͘",
        "confirmemail": "Khak-jīn e-mail chū-chí",
        "watchlistedit-normal-submit": "Mài kàm-sī",
        "watchlistedit-normal-done": "Í-keng ū $1 ia̍h ùi lí ê kám-sī-toaⁿ soá cháu:",
        "watchlisttools-edit": "Khoàⁿ koh kái kàm-sī-toaⁿ",
-       "watchlisttools-raw": "Kái tshing-chheng ê kàm-sī-toaⁿ",
+       "watchlisttools-raw": "Kái chhiⁿ ê kàm-sī-toaⁿ",
        "duplicate-defaultsort": "'''Thê-chhíⁿ lí:'''Siat-piān ê pâi-lia̍t hong-sek \"$2\" thè-oāⁿ chìn-chêng ê siat-piān ê pâi-lia̍t hong-sek \"$1\".",
        "version": "Pán-pún",
        "specialpages": "Te̍k-sû-ia̍h",
index 9a81555..7f81062 100644 (file)
@@ -9,7 +9,8 @@
                        "PiRSquared17",
                        "SabineCretella",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Candalua"
                ]
        },
        "tog-underline": "Sottolinia 'e jonte:",
        "tog-numberheadings": "Annúmmera automatecamente 'e títule",
        "tog-showtoolbar": "Aspone 'a barra d''e stromiente 'e cagno",
        "tog-editondblclick": "Cagna 'e pàggene cliccanno ddoje vote",
-       "tog-editsectiononrightclick": "Permette 'e cangne 'e sezzione cliccanno p''o tasto destro ncopp 'e titule 'e sezzione",
+       "tog-editsectiononrightclick": "Permette 'e cagnà 'e sezzione cliccanno p' 'o tasto dritto ncopp' 'e titule 'e sezzione",
        "tog-watchcreations": "Azzecca 'e ppaggene criate e li files carrecate ncopp'â l'elenco 'e cuntrollo",
        "tog-watchdefault": "Azzecca 'e paggene e li files cagnàte a l'elenco 'e cuntrollo",
        "tog-watchmoves": "Azzecca 'e paggene e li files spustate a l'elenco 'e cuntrollo",
        "tog-watchdeletion": "Azzecca 'e paggene e li files scancellate a l'elenco 'e cuntrollo",
        "tog-watchrollback": "Azzecca 'e paggene addò aggio fatto nu rollback a l'elenco 'e cuntrollo",
        "tog-minordefault": "Indica ogne cagnamento comme piccerillo (predefinito)",
-       "tog-previewontop": "Vide previsióne primma d&#39;'a casella 'e modifica",
+       "tog-previewontop": "Vide previsióne primma d'a casella 'e modifica",
        "tog-previewonfirst": "Vide previsióne 'a primma vota",
        "tog-enotifwatchlistpages": "Famme na mmasciata mail quanno na paggena o nu file dint'a l'elenco 'e cuntrollo se fosse cagnàta",
        "tog-enotifusertalkpages": "Famme na masciata mail quanno 'a paggena 'e cchiacchiera mmia se fosse cagnàta",
        "tog-fancysig": "Piglia 'a firma comme fosse nu wikitesto (senza fà link automatico)",
        "tog-uselivepreview": "Abilita 'o \"Live preview\" (sperimentale)",
        "tog-forceeditsummary": "Chiere a mme quanno se sta azzeccanno nu campo oggetto abbacante",
-       "tog-watchlisthideown": "Annascunne 'e cagnamiente d&#39;'a lista 'e cuntrollo mia",
-       "tog-watchlisthidebots": "Annasconne 'e cagnamiènte d&#39;'e bot ncopp'a l'elenco 'e cuntrollo",
-       "tog-watchlisthideminor": "Annascunne 'e cagnamiente piccerille d&#39;'a lista 'e cuntrollo mia",
+       "tog-watchlisthideown": "Annascunne 'e cagnamiente d'a lista 'e cuntrollo mia",
+       "tog-watchlisthidebots": "Annasconne 'e cagnamiènte d'e bot ncopp'a l'elenco 'e cuntrollo",
+       "tog-watchlisthideminor": "Annascunne 'e cagnamiente piccerille d'a lista 'e cuntrollo mia",
        "tog-watchlisthideliu": "Annascunne 'e cagnamiénte 'e l'utente riggistrate 'a l'elenco 'e cuntrollo",
        "tog-watchlisthideanons": "Annascunne 'e cagnamiente fatte d'anonime 'a l'elenco 'e cuntrollo",
        "tog-watchlisthidepatrolled": "Annascunne 'e modifiche cuntrullate 'a l'elenco 'e cuntrollo",
-       "tog-ccmeonemails": "Famme na masciata pùre c&#39;'a copia 'e le mail mannate a l'ati utente",
+       "tog-ccmeonemails": "Famme na masciata pùre c'a copia 'e le mail mannate a l'ati utente",
        "tog-diffonly": "Nun me fà vedé cuntenute aropp'o cunfronto nfra verziune",
        "tog-showhiddencats": "Fa' vedé 'e categurie annascunnute",
        "tog-norollbackdiff": "Nun fà vedé 'o cunfronto nfra verziune quanno se fà nu rollback",
        "create-this-page": "Cria sta paggena",
        "delete": "Scancèlla",
        "deletethispage": "Scancèlla chésta paggena",
-       "undeletethispage": "Ripristina chista paggena",
+       "undeletethispage": "Arrepiglia chista paggena",
        "undelete_short": "Arremedia {{PLURAL:$1|na verziona|$1 vverziune}}",
        "viewdeleted_short": "Vide {{PLURAL:$1|nu cagnamiénto scancellato|$1 cagnamiénte scancellate}}",
        "protect": "Prutegge",
        "otherlanguages": "Ate lengue",
        "redirectedfrom": "(Redirect 'a $1)",
        "redirectpagesub": "Paggena 'e redirect",
-       "lastmodifiedat": "Urdema cagnamiénto pe' a paggena: $2, $1.",
+       "redirectto": "Reindirizza a:",
+       "lastmodifiedat": "Urdemo cagnamiénto pe' a paggena: $2, $1.",
        "viewcount": "Chesta paggena è stata liggiùta {{PLURAL:$1|una vòta|$1 vòte}}.",
        "protectedpage": "Paggena prutetta",
        "jumpto": "Vaje a:",
        "jumptonavigation": "navigazione",
        "jumptosearch": "truova",
-       "view-pool-error": "Te cercammo scusa, 'e servers téneno troppo carico mo'.\nTroppe utente stanno cercanno 'e veré sta paggena.\nPe' piacere, aspetta nu poco primma 'e turnà a caricà sta paggena.\n\n$1",
-       "generic-pool-error": "Te cercammo scusa, 'e servers téneno troppo carico mo'.\nTroppe utente stanno cercanno 'e veré sta risorsa.\nPe' piacere, aspetta nu poco primma 'e turnà a caricà sta risorsa.",
+       "view-pool-error": "Ve cercammo scusa, 'e servers hanno troppo carico mo'.\nTroppe utente stanno cercanno 'e veré sta paggena.\nPe' piacere, aspettate nu poco primma 'e turnà a carrecà sta paggena.\n\n$1",
+       "generic-pool-error": "Ve cercammo scusa, 'e servers hanno troppo carico mo'.\nTroppe utente stanno cercanno 'e veré sta risorsa.\nPe' piacere, aspettate nu poco primma 'e turnà a carrecà sta risorsa.",
        "pool-timeout": "Tiempo pe' s'aspettà ô blocco",
        "pool-queuefull": "A córa 'e fatiche è chiena",
        "pool-errorunknown": "Errore scanusciuto",
        "aboutpage": "Project:'Nfrummazione",
        "copyright": "Cuntenute suggiette a licienza 'e auso $1 se nun fuje ritto atro.",
        "copyrightpage": "{{ns:project}}:Copyrights",
-       "currentevents": "Novità",
+       "currentevents": "Nuvità",
        "currentevents-url": "Project:Novità",
        "disclaimers": "Avvertimiènte",
        "disclaimerpage": "Project:Avvertimiènte generale",
        "privacy": "'Nformazzione ppe a privacy",
        "privacypage": "Project:'Nfrummazione ncopp'â privacy",
        "badaccess": "Nun haje 'e premmesse abbastante.",
-       "badaccess-group0": "Nun t'è permesso 'a ffà l'azione richiesta.",
+       "badaccess-group0": "Nun v'è permesso 'a ffà l'azione richiesta.",
        "badaccess-groups": "L'azione ch'ê richiesto è permessa sulamente all'utente ca ce stanno dint'a {{PLURAL:$2|'o gruppo|uno d' 'e gruppe}}: $1.",
        "versionrequired": "Ce vò 'a verziona $1 'e MediaWiki",
        "versionrequiredtext": "Pe' usà sta paggena ce vò 'a verziona $1 'e MediaWiki. Vide [[Special:Version|'a paggena 'e verzione]].",
        "ok": "OK",
        "retrievedfrom": "Estratto 'e \"$1\"",
-       "youhavenewmessages": "Haje $1 ($2).",
+       "youhavenewmessages": "{{PLURAL:$3|Tenite}} $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Tiene}} $1 'a {{PLURAL:$3|n'atu utente|$3 utente}} ($2).",
        "youhavenewmessagesmanyusers": "Tiene $1 'a tant'utente ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|na mmasciata nova|999=mmasciate nnove}}",
        "hidetoc": "annascunne",
        "collapsible-collapse": "Annascunne",
        "collapsible-expand": "faje vede",
-       "confirmable-confirm": "Sì {{GENDER:$1|sicuro|sicura}}?",
+       "confirmable-confirm": "Site {{GENDER:$1|sicuro|sicura}}?",
        "confirmable-yes": "Sì",
        "confirmable-no": "No",
-       "thisisdeleted": "Vere o ripristina $1?",
+       "thisisdeleted": "Vedè o arripiglià $1?",
        "viewdeleted": "Vire $1?",
        "restorelink": "{{PLURAL:$1|nu cagnamiénto scancellato|$1 cagnamiénte scancellate}}",
        "feedlinks": "Feed:",
        "databaseerror-query": "Richiesta: $1",
        "databaseerror-function": "Funzione: $1",
        "databaseerror-error": "Sbaglio: $1",
-       "laggedslavemode": "'''Attenziò:''' 'a paggena putesse nun fà vedé ll'aggiornamente cchiù ricente.",
+       "laggedslavemode": "'''Attenzione:''' 'a paggena putesse nun fà vedé ll'aggiornamente cchiù recente.",
        "readonly": "Database bloccato",
        "enterlockreason": "Miette 'o mutivo 'e blocco, nzieme a 'o mumento quanno se penza ca 'o blocco se sarrà fernuto",
        "readonlytext": "Mo' mo' 'o database è bloccato e nun se ponno azzeccà cagnamiente o pàggene. 'O blocco è normalmente azzeccato a n'operazione semprice 'e manutenzione, e quanno s'è fernuta allora 'a paggena addeventa nurmale.\n\nL'ammenistratore d' 'o sistema ch'a fatto 'o blocco ce dà sta spiegazione: $1",
        "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",
-       "filecopyerror": "Nun se può copiare 'o file \"$1\" into \"$2\".",
+       "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\"",
        "directorycreateerror": "Nun se può crià 'a cartella \"$1\".",
        "unexpected": "Valore imprevisto: \"$1\"=\"$2\".",
        "formerror": "Sbàglio: nun se può mannà 'o modulo",
        "badarticleerror": "Chest'azione nun se può fà int'a sta paggena.",
-       "cannotdelete": "Nun è possibbele scassà 'a paggena o 'a fiura $1 addamannata. Putria éssere stato già scancellato.",
+       "cannotdelete": "Nun è pussibbele scassà 'a paggena o 'a fiura $1 addamannata. Putria éssere stato già scancellato.",
        "cannotdelete-title": "Nun se può scancellà 'a paggena \"$1\"",
        "delete-hook-aborted": "'O scancellamiento è stato annullato 'a 'o «hook».\nNun dette spiegazione nisciuna.",
        "no-null-revision": "Nun se può crià na nnova revisione nulla p' 'a paggena \"$1\"",
        "viewsource": "Vere sorgente",
        "viewsource-title": "Vere surgente 'e $1",
        "actionthrottled": "Azione ritardata",
-       "actionthrottledtext": "Comme misura anti-spam, sì lemmetato 'a ffà st'azione troppe vote dint'a nu curto spazio 'e tiempo, e mò stu lèmmeto è stato superato.\nPe' piacere prova n'ata vota dint'a cocche minuto.",
+       "actionthrottledtext": "Comme misura anti-spam, site lemmetato 'a ffà st'azione troppe vote dint'a nu curto spazio 'e tiempo, e mò stu lèmmeto è stato superato.\nPe' piacere pruvate n'ata vota dint'a cocche minuto.",
        "protectedpagetext": "Sta paggena s'è prutetta pe' ne bloccà 'a mudifeca o n'ata azione.",
        "viewsourcetext": "Putisse vedé e copià 'o codece surgiva 'e sta paggena:",
        "viewyourtext": "Putisse vedé e copià 'o codice surgiva d' 'e <strong>cagnamiénte tuoje</strong> a sta paggena:",
-       "protectedinterface": "Sta paggena nce appruviggióna 'e n'interfaccia testo p' 'o software dint'a sta wiki, e s'è prutetta pe' nce scanzà 'e cocch'abbuso.\nSi se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere usa [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
-       "editinginterface": "'''Attenziò:''' 'O testo 'e sta paggena ffà parte 'e ll'interfaccia utente d' 'o sito.\nTutt' 'e cagnamiénte fatte a sta paggena cumpareno dint' 'e mmasciate 'e ll'interfaccia veduta 'a tutte ll'utente dint'a sta wiki.\nSi se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere usa [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
+       "protectedinterface": "Sta paggena nce appruviggióna 'e n'interfaccia testo p' 'o software dint'a sta wiki, e s'è prutetta pe' nce scanzà 'e cocch'abbuso.\nSi se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere ausate [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
+       "editinginterface": "<strong>Attenziò:</strong>  'O testo 'e sta paggena ffà parte 'e ll'interfaccia utente d' 'o sito.\nTutt' 'e cagnamiénte fatte a sta paggena cumpareno dint' 'e mmasciate 'e ll'interfaccia veduta 'a tutte ll'utente dint'a sta wiki.",
+       "translateinterface": "Si se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere ausate [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
        "cascadeprotected": "Sta paggena è stata prutetta 'a 'o cangamento pecché sta dint'a {{PLURAL:$1|sta paggena, che è prutetta|sti paggene, che songo prutette}} quann' 'a l'ozione \"ricurziva\" è attiva:\n$2",
-       "namespaceprotected": "Nun  permesso a cagnà 'e paggene dint'a stu namespace '''$1'''.",
-       "customcssprotected": "Nun t'è permesso 'a cagnà sta paggena CSS, pecché cuntene 'e mpustaziune perzunale 'e n'at'utente.",
-       "customjsprotected": "Nun t'è permesso 'a cagnà sta paggena JavaScript, pecché cuntene 'e mpustaziune perzunale 'e n'at'utente.",
-       "mycustomcssprotected": "Nun t'è permesso 'a cagnà sta paggena CSS.",
-       "mycustomjsprotected": "Nun t'è permesso 'a cagnà sta paggena JavaScript.",
-       "myprivateinfoprotected": "Nun t'è permesso a cagnà 'a nfurmaziona privata toja.",
-       "mypreferencesprotected": "Nun t'è permesso 'a cagnà 'e preferenze tuoje.",
+       "namespaceprotected": "Nun avite permesso a cagnà 'e paggene dint'a stu namespace '''$1'''.",
+       "customcssprotected": "Nun v'è permesso 'a cagnà sta paggena CSS, pecché cuntene 'e mpustaziune perzunale 'e n'at'utente.",
+       "customjsprotected": "Nun v'è permesso 'a cagnà sta paggena JavaScript, pecché cuntene 'e mpustaziune perzunale 'e n'at'utente.",
+       "mycustomcssprotected": "Nun v'è permesso 'a cagnà sta paggena CSS.",
+       "mycustomjsprotected": "Nun v'è permesso 'a cagnà sta paggena JavaScript.",
+       "myprivateinfoprotected": "Nun v'è permesso a cagnà 'a nfurmaziona privata vuosta.",
+       "mypreferencesprotected": "Nun v'è permesso 'a cagnà 'e preferenze tuoje.",
        "ns-specialprotected": "'E paggene spiciale nun se ponno cagnà.",
        "titleprotected": "'A criazione 'e stu titolo è stata bloccata 'a ll'utente [[User:$1|$1]].\n'A ragione è chesta: ''$2''.",
        "filereadonlyerror": "Nun se può cagnà 'o file \"$1\" pecché 'o repository 'e file \"$2\" sta 'n modo sulo-lettura.\n\nL'ammenistratore che l'ha bloccato ha dato sta ragione: \"$3\".",
        "invalidtitle-knownnamespace": "Titolo nun buono c' 'o namespace \"$2\" e testo \"$3\"",
        "invalidtitle-unknownnamespace": "Titolo nun buono c' 'o namespace scanusciuto \"$1\" e testo \"$2\"",
        "exception-nologin": "Acciesso nun affettuato",
-       "exception-nologin-text": "Pe' piacere fa ll'accieso pe putè accedere a sta paggena o azione.",
+       "exception-nologin-text": "Pe' piacere facite ll'accieso pe putè accedere a sta paggena o azione.",
        "exception-nologin-text-manual": "Pe' piacere $1 pe putè trasì dint'a sta paggena o azione.",
        "virus-badscanner": "Sbaglio 'e configurazione: antivirus scanusciuto: ''$1''",
        "virus-scanfailed": "scanziona fallita (codece $1)",
        "virus-unknownscanner": "antivirus scanusciuto:",
-       "logouttext": "'''Site asciùte.'''\n\nNota ca arcune paggene potrebbero cuntinuà ad apparire comme se 'o logout nun fosse avvenuto finché nun venne pulita 'a cache d\"o proprio browser.",
+       "logouttext": "'''Site asciùte.'''\n\nNota ca arcune paggene putessero cuntinuà ad cumparì comme se 'o logout nun fosse affettuato fin quanno nun sarrà pulezzata 'a cache d\"o proprio browser.",
        "welcomeuser": "Bemmenuto, $1!",
-       "welcomecreation-msg": "'O cunto tuo è stato criato.\nMo' può cagnà 'e [[Special:Preferences|preferenze 'e {{SITENAME}}]].",
+       "welcomecreation-msg": "'O cunto vuosto è stato criato.\nMo' putite cagnà 'e [[Special:Preferences|preferenze 'e {{SITENAME}}]].",
        "yourname": "Nomme utente",
        "userlogin-yourname": "Nomme utente",
        "userlogin-yourname-ph": "'Nserisce 'o tujo nomme utente",
        "userlogin-signwithsecure": "Usa na conessione sicura",
        "yourdomainname": "Spiecà 'o dumminio",
        "password-change-forbidden": "Nun se ponno cagnà 'e password ncopp'a sta wiki.",
-       "externaldberror": "Ce sta n'errore ch' 'e server d'autenticazione esterno, o pure nun t'è permesso accedere all'aghiurnamento d' 'o cunto sterno tujo.",
+       "externaldberror": "Ce sta n'errore ch' 'e server d'autenticazione esterno, o pure nun v'è permesso accedere all'aghiurnamento d' 'o cunto sterno vuosto.",
        "login": "Tràse",
        "nav-login-createaccount": "Tràse o cria n'acciesso novo",
        "userlogin": "Tràse o cria n'acciesso novo",
        "logout": "Jèsce",
        "userlogout": "Jèsce",
        "notloggedin": "Acciesso nun affettuato",
-       "userlogin-noaccount": "Nun haje ancora n'acciesso?",
+       "userlogin-noaccount": "Nun tenite ancora n'acciesso?",
        "userlogin-joinproject": "Fà 'o riggistro ncopp'a {{SITENAME}}",
-       "nologin": "Nun haje ancora n'acciesso? '''$1'''.",
+       "nologin": "Nun tenite ancora n'acciesso? '''$1'''.",
        "nologinlink": "Crialo mmo",
        "createaccount": "Cria nu cunto novo",
        "gotaccount": "Tiene già nu cunto? '''$1'''.",
        "gotaccountlink": "Tràse",
-       "userlogin-resetlink": "Haje dimenticato 'e toje date 'e acciesso?",
+       "userlogin-resetlink": "V'avite scurdato 'e dettaglie d'acciesso vuoste?",
        "userlogin-resetpassword-link": "Te sì scurdat' 'a password?",
        "userlogin-helplink2": "Aiuto cu l'accieso",
        "userlogin-loggedin": "Sì già connesso comme {{GENDER:$1|$1}}.\nUsa 'o modulo ccà abbascio pe trasì com'a n'atu utente.",
        "createacct-benefit-heading": "{{SITENAME}} è fatta 'e perzone comme te.",
        "createacct-benefit-body1": "{{PLURAL:$1|càgnamiento|càgnamiente}}",
        "createacct-benefit-body2": "{{PLURAL:$1|paggena|paggene}}",
-       "createacct-benefit-body3": "{{PLURAL:$1|contribbutòre ricente|contribbutture ricente}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|contribbutòre recente|contribbuttore recente}}",
        "badretype": "'E passwords ch'è mis nun songe eguale.",
-       "userexists": "'O nomme utente ch'è mis è già ausàto.\nPe' piacere scigliete n'atu nomme.",
+       "userexists": "'O nomme utente ch'avete miso è già ausàto.\nPe' piacere sciglite n'atu nomme.",
        "loginerror": "Probblema 'e accièsso",
        "createacct-error": "Errore 'e criazione 'e cunto",
        "createaccounterror": "Nun se può crià nu cunto: $1",
        "nocookiesnew": "'A riggistrazione è stata completata, ma nun se può accedere a {{SITENAME}} pecché 'e cookie songo disattivate. Prova n'ata vota c' 'o nomme e 'a password quanno 'e cookie sarrann'attivate dint'o navigatore stesso.",
-       "nocookieslogin": "{{SITENAME}} usa cookies pe' putè dà accies'a ll'utente.\n'E cookies tuoje songo stutate.\nPe' piacere appiccia 'e cookies dint'o navigatóre e prova n'ata vota.",
+       "nocookieslogin": "{{SITENAME}} usa cookies pe' putè dà accies'a ll'utente.\n'E cookies vuoste songo stutate.\nPe' piacere appicciate 'e cookies dint'o navigatóre e pruvate n'ata vota.",
        "nocookiesfornew": "'O cunto utente nu s'è criato, pecché nun s'è potuto confirmà d' 'a fonte suja.\nVide si 'e cookies song'appicciate, ricarreca 'a paggena e prova n'ata vota.",
-       "noname": "Nun  specificato nu nomme valido d'utente.",
+       "noname": "Nun avite specificato nu nomme valido d'utente.",
        "loginsuccesstitle": "Acciesso affettuato",
        "loginsuccess": "'''Si stato cunnesso ô server 'e {{SITENAME}} cu 'o nomme utente 'e \"$1\".'''",
        "nosuchuser": "Nun è riggistrato nisciuno utente c' 'o nomme \"$1\".\n'E nomme utente songo sensibbele a 'e maiuscole.\nCuntrolla 'o nomme nzertàto, o [[Special:UserLogin/signup|crìa n'utenza nova]].",
        "nosuchusershort": "Nun ce stanno utente cu o nòmme \"$1\". Cuntrolla si scrivìste buòno.",
        "nouserspecified": "Tiene 'a dìcere nu nomme pricìso.",
        "login-userblocked": "Chist'utente è bloccato. Nun se può effettuà 'o login.",
-       "wrongpassword": "'A password nzertàta nun è bbona.\nPe' piacere prova n'ata vota.",
-       "wrongpasswordempty": "'A passwort nzertàta è bbacante.\nPe' piacere prova n'ata vota.",
+       "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}}.",
        "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.",
        "passwordremindertext": "Cocche perzona (pussibbilmente tu, cu n'innerizzo IP $1) ha dimmannato l'invio 'e na password d'accieso nova pe' {{SITENAME}} ($4).\nNa password temporanea e' l'utente \"$2\" s'è abbiata comme \"$3\".\nSi chest'è stata l'intenzione toja, allora hè a trasì dint'o sito e cagnà 'a password mò. 'A password temporanea scade aropp'a {{PLURAL:$5|nu juorno|$5 ghiuorne}}.\n\nSi nun sì stato tu a dimannà 'a password, o pure hè truvat'a password e nun 'a bbuò cagnà cchiù, allora nun fà niente e continua a usare 'a password viecchia.",
        "noemail": "Nun ce sta indirizzo e-mail pe' l'utente \"$1\".",
        "noemailcreate": "S'add'appruviggiunà n'indirizzo e-mail buono.",
-       "passwordsent": "Na password nova è stata inviata a l'innerizzo e-mail riggistrato 'a ll'utente \"$1\".\nPe' piacere, tràse appena hè ricevuta sta password.",
+       "passwordsent": "Na password nova è stata inviata a l'innerizzo e-mail riggistrato 'a ll'utente \"$1\".\nPe' piacere, trasite appena avite ricevuta sta password.",
        "blocked-mailpassword": "Ll'IP tuoja è bloccata pe' scrivere, picciò nun se ponno usà 'e ffunzione pe te mannà na password nova.",
        "eauthentsent": "Na mmasciata 'e conferma t'è stata mannata a l'indirizzo e-mail nzignàto.\nApprimm' 'e te mannà n'atu mail, hè 'a stà 'a ffà 'e struzione dint'a l'e-mail, pe' cunfermà ca 'o cunto fosse d' 'o tujo overo.",
        "throttled-mailpassword": "S'è mannata na mail pe te' riabbià 'a password 'a meno 'e {{PLURAL:$1|n'ora|$1 ore}}.\nPe' ce sparagnà abbuse, 'a funzione 'e riabbiamento d' 'a password se può usa sulamente na vota ogne {{PLURAL:$1|ora|$1 ore}}.",
        "acct_creation_throttle_hit": "{{PLURAL:$1|1 registrazzione è già stata effettuata|$1 registrazzione song già state effettuate}} 'e qualcuno cu 'o tujo stisso innerezzo IP dint'ô urdemo juorno: è 'o massimo cunsentito 'n chisto periodo 'e tiempo.\nPerciò, 'e utente ca ausano chisto innerezzo IP nun possono registrarse ppe 'o mumiento.",
        "emailauthenticated": "'O ndirizzo email è stato cunfermato 'o $2 a 'e $3.",
        "emailnotauthenticated": "'O ndirizzo 'e posta elettronica nun è stat'ancora cunfermato.\nNun se mannarranno mmasciate e-mail p' ' funzione ccà abbascio.",
-       "noemailprefs": " 'a specificà nu ndirizzo e-mail pe ll'attivà sti funzione.",
+       "noemailprefs": "Avite 'a specificà nu ndirizzo e-mail pe ll'attivà sti funzione.",
        "emailconfirmlink": "Cunferma 'o nderizzo mail d' 'o tujo.",
        "invalidemailaddress": "'O nderizzo e-mail scritto nun se può accettà pecché nun tene nu furmatto buono.\nScrive n'ata vota nu nderizzo bbuono o abbacanta 'a casella.",
        "cannotchangeemail": "'E ccunte mail nun se ponno cagnà dint'a sta wiki.",
        "createaccount-text": "Coccherun ave fatto nu cunto ncoppa {{SITENAME}} ($4) a nomme 'e $2, associato a st'indirizzo 'e posta elettronica. 'A password pe l'utente \"$2\" è abbiàta a comme \"$3\".\nFosse buono 'e trasì ampressa e cagnà 'a password subbeto.\n\nSi 'a criazione d' 'o cunto è stata nu sbaglio, allora putite lassà perde sta mmasciata.",
        "login-throttled": "Songo state fatte troppe tentative 'a trasì dint'a nu periodo troppo curto.\nAspetta nu $1 e prova aròppo.",
        "login-abort-generic": "'O login tujo nun ha avuto succiesso - Annullato",
+       "login-migrated-generic": "'O cunto tuo nun sè mmigrato, e l'username d' 'o tuojo nun esiste cchiù dint'a sta wiki.",
        "loginlanguagelabel": "Lengua: $1",
        "suspicious-userlogout": "'A richiesta 'e disconnessione d' 'a toja è stata negate pecché pare ca fosse mannata 'a nu navigatóre rutto o nu proxy 'e \"caching\".",
-       "createacct-another-realname-tip": "'O nomme overo vuosto è ozzionale.\nSi scigliete 'e nzertà 'o nomme overo, chesto s'ausarrà pe' dà l'utente l'attribuzione d' 'a fatica fatta.",
+       "createacct-another-realname-tip": "'O nomme overo vuosto è ozzionale.\nSi sciglite 'e nzertà 'o nomme overo, chesto s'ausarrà pe' dà l'utente l'attribuzione d' 'a fatica fatta.",
        "pt-login": "Tràse",
        "pt-login-button": "Tràse",
        "pt-createaccount": "Cria nu cunto nuovo",
        "pt-userlogout": "Jèsce",
        "php-mail-error-unknown": "Errore scanusciuto dint'a funzione PHP mail()",
-       "user-mail-no-addy": " cercato 'e mannà na mmasciata e-mail senza indirizzo.",
-       "user-mail-no-body": " cercato 'e mannà na mmasciata e-mail c' 'o testo abbacante o troppo curto.",
+       "user-mail-no-addy": "Avite cercato 'e mannà na mmasciata e-mail senza indirizzo.",
+       "user-mail-no-body": "Avite cercato 'e mannà na mmasciata e-mail c' 'o testo abbacante o troppo curto.",
        "changepassword": "Cagna password",
-       "resetpass_announce": "Pe' trasì finalmente, hè 'a abbià na password nova.",
+       "resetpass_announce": "Pe' trasì finalmente, avite 'abbià na password nova.",
        "resetpass_header": "Cagna 'a password d' 'o cunto",
        "oldpassword": "Password viecchia:",
        "newpassword": "Password nova:",
        "changepassword-success": "'A password è stata cagnata currettamente!",
        "changepassword-throttled": "Songo state fatte troppe tentative 'a trasì.\nAspetta nu $1 apprimma 'e pruvà n'ata vota.",
        "resetpass_forbidden": "'E password nun se ponno cagnà",
-       "resetpass-no-info": " 'a trasì ('o login) pe ffà l'acciesso a sta paggena direttamente.",
+       "resetpass-no-info": "Avite 'a trasì ('o login) pe ffà l'acciesso a sta paggena direttamente.",
        "resetpass-submit-loggedin": "Cagna password",
        "resetpass-submit-cancel": "Canciella",
        "resetpass-wrong-oldpass": "'A password temporanea o attuale nun è bbona.\n'A password putesse avé cagnato, o pure s'è addimannata na password temporanea nova.",
-       "resetpass-recycled": "Pe piacere riabbìa 'a password e miette na password differénte a chella 'e mmò.",
-       "resetpass-temp-emailed": "Sì {{GENDER:$1|trasuto|trasuta}} cu nu codece temporaneo, mannato via e-mail. Pe' fà cumpleta 'a riggistraziona, avite 'e abbià na password nova ccà:",
+       "resetpass-recycled": "Pe piacere riabbiate 'a password e mettete na password differénte a chella 'e mmò.",
+       "resetpass-temp-emailed": "Sì trasuto cu nu codece temporaneo, mannato via e-mail. Pe' fà cumpleta 'a riggistraziona, avite 'e abbià na password nova ccà:",
        "resetpass-temp-password": "Password temporanea:",
        "resetpass-abort-generic": "'O cagnamiento d' 'a password s'è spezzato 'a na stensione.",
        "resetpass-expired": "'A pasword è ammaturata. Avite 'e ffà na password nova pe putè trasì.",
        "passwordreset-emailsent-capture": "Na mmasciata e-mail pe' riabbià 'a password è stata mannata, chista mmasciata 'a putite vedé ccà abbascio.",
        "passwordreset-emailerror-capture": "Na mmasciata e-mail pe' riabbià 'a password è stata mannata, 'a putite vedé ccà abbascio, ma aita sapé ca nun s'è mannata a {{GENDER:$2|l'utente}} pecché c'è stato cocch'errore: $1",
        "changeemail": "Cagna l'indirizzo e-mail",
-       "changeemail-header": "Cagna l'indirizzo e-mail d' 'o cunto",
-       "changeemail-text": "Ghienche stu modulo pe' cangà l'indirizzo mail d' 'o tuojo. Sarrà necessario nzertà 'a password tuja pe' puté cunfermà stu cagnamiento.",
-       "changeemail-no-info": "Hè 'a trasì ('o login) pe ffà l'acciesso a sta paggena direttamente.",
+       "changeemail-text": "Ghienchete stu modulo pe' cangà l'indirizzo mail d' 'o vuosto. Sarrà necessario nzertà 'a password vosta pe' puté cunfermà stu cagnamiento.",
+       "changeemail-no-info": "Avite 'a trasì ('o login) pe ffà l'acciesso a sta paggena direttamente.",
        "changeemail-oldemail": "Indirizzo email 'e mmò:",
        "changeemail-newemail": "Indirizzo e-mail nuovo:",
        "changeemail-none": "(nisciuno)",
-       "changeemail-password": "'A password tuja pe' {{SITENAME}}:",
+       "changeemail-password": "'A password vosta pe' {{SITENAME}}:",
        "changeemail-submit": "Cagna e-mail",
-       "changeemail-cancel": "Canciella",
-       "changeemail-throttled": "Hè fatto troppe tentative 'a trasì.\nAspetta nu $1 apprimma 'e pruvà n'ata vota.",
+       "changeemail-throttled": "Avite fatto troppe tentative 'a trasì.\nAspettate nu $1 apprimma 'e pruvà n'ata vota.",
        "resettokens": "Riabbìa 'e token",
-       "resettokens-text": "Ccà se ponno riabbià 'e chiave ca permetessero l'acciesso a determinate date private associate a 'o cunto tuojo.\n\nL'avisse 'e ffà quanno l'hè spartuto pe' sbaglio cu cocche perzona o pure quanno 'o cunto d' 'o tuojo è stato compromesso.",
+       "resettokens-text": "Ccà se ponno riabbià 'e chiave ca permetessero l'acciesso a determinate date private associate a 'o cunto vuosto.\n\nL'aviste 'e ffà quanno l'avete spartuto pe' sbaglio cu cocche perzona o pure quanno 'o cunto d' 'o vuosto è stato compromesso.",
        "resettokens-no-tokens": "Nun ce stanno token 'a riabbià.",
        "resettokens-legend": "Riabbìa 'e token",
        "resettokens-tokens": "Token:",
        "showpreview": "Vere anteprimma",
        "showdiff": "Fa veré 'e cagnamiente",
        "blankarticle": "<strong>Attenziò:</strong> 'a paggena ca staje crianno è abbacante.\nFà click ncopp'a \"{{int:savearticle}}\" n'ata vota, 'a paggena sarrà criata senza cuntenute.",
-       "anoneditwarning": "'''Attenziò:''' Nun hè fatto l'acciesso.\nDint'a cronologgia d' 'a paggena sarrà riggistrato l'indirizzo IP d' 'o tuojo.",
-       "anonpreviewwarning": "''Nun hè fatto 'o login. Sarvann' 'a paggena, l'indirizzo IP d' 'o tuojo sarrà riggistrato dint'a cronologgia.''",
+       "anoneditwarning": "'''Attenzione:''' Nun avite fatto l'acciesso. 'A cronologgia d' 'a vosta sarrà visibbele pubbrecamente si facite cocche cagnamiento. Si <strong>[$1 tràse]</strong> o <strong>[$2 crìe nu cunto]</strong>, 'e cagnamiente vuoste ve sarranno attribbuite a vvuje, nzieme a n'ati migliuramente.",
+       "anonpreviewwarning": "''Nun avite fatto 'o login. Sarvann' 'a paggena, l'indirizzo IP d' 'o vuosto sarrà riggistrato dint'a cronologgia.''",
        "missingsummary": "'''Attenziò:''' nun s'è specificato l'oggetto 'e stu cagnamiento. Clicann' 'a \"{{int:savearticle}}\" n'ata vota 'o cagnamiento sarrà sarvato cu l'oggetto abbacante.",
        "missingcommenttext": "Pe' piacere scrivete nu commento ccà abbascio.",
        "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:",
        "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.",
+       "blockednoreason": "nisciuna ragione è stata indicata",
+       "whitelistedittext": "Pe' cagnà 'e ppaggene è necessario $1.",
+       "confirmedittext": "Pe puté cagnà paggene avite 'a cunfermà l'indirizzo e-mail.\nPe' piacere abbiate e ffà 'a validazione d' 'o ndirizzo e-mail pe' bbìa d' 'e [[Special:Preferences|preferenze d'utente]].",
+       "nosuchsectiontitle": "Nun se può truvà 'a sezziona",
+       "nosuchsectiontext": "Hè pruvat' 'a cagnà na sezziona ca nun ce sta.\nPuò darse ch'è stata spustata o scancellata pe' tramente ca stive vedenno sta paggena.",
        "loginreqtitle": "Pe' cagnà chesta paggena abbesognate aseguì ll'acciesso ô sito.",
        "loginreqlink": "aseguì ll'acciesso",
        "loginreqpagetext": "Pe' veré ate ppaggene abbesognate $1.",
        "accmailtitle": "'O password è stato mannato.",
        "accmailtext": "'Na password gennerata casualmente ppe [[User talk:$1|$1]] è stata mannata a $2. Chista password può essere càgnata dint'â paggena ppe ''[[Special:ChangePassword|càgna 'a password]]'' subbeto doppo l'acciesso.",
        "newarticle": "(Novo)",
+       "newarticletext": "Site ghiuto/a addò nu link 'e na paggena ca nun esiste ancora.\nP' 'a crià sta paggena, accummenciate a scrivere dint'a cascia cà abbascio (vedite 'a [$1 paggena d'aiuto] pe liegge cchiù nfurmazziune).\nSi site venuto/a ccà pe' sbaglio, vedite 'e sprémmere 'o buttòne '''Arreto''' d' 'o navigatóre.",
+       "anontalkpagetext": "----\n''Chest'è 'a paggena 'e discussione 'e n'utente anonimo, ca nun ave criàt' 'ancora n'utenza o ca nun sta ausanno. Pe' l'identificà avite 'e truvà 'o nummero d' 'o ndirizzo IP d' 'o sujo. L'indirizze IP se ponno spartì però a cchiù 'e n'utente. Si sì n'utente anonimo e pienze ca 'e commente ccà dint'a sta paggena nun parlano 'e tte, allora [[Special:UserLogin/signup|crìa n'utenza nnova]] o [[Special:UserLogin|tràse cu chella ca tiene già]] pe' nun sta' mmescato mmiez'a l'ati utente anonime n futuro.''",
        "noarticletext": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate] o pure [{{fullurl:{{FULLPAGENAME}}|action=edit}} cagnà 'a paggena mo']</span>.",
-       "noarticletext-nopermission": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate]</span>, però nun tiene 'o permesso 'a crià sta paggena.",
+       "noarticletext-nopermission": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate]</span>, però nun tenite 'o permesso 'a crià sta paggena.",
+       "missing-revision": "'A verziona #$1 d' 'a paggena \"{{FULLPAGENAME}}\" nun esiste.\n\nChest'è causato quanno se và dint'a nu link a na paggena ch'è stata scancellata.\n'E dettaglie se ponno truvà dint'a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 'o riggistro 'e scancellamiente].",
+       "userpage-userdoesnotexist": "'O cunto utente \"<nowiki>$1</nowiki>\" nun è riggistrato. Cuntrolla ca si buò overo crià o cagnà sta paggena.",
+       "userpage-userdoesnotexist-view": "'O cunto utente \"$1\" nun è riggistrato.",
+       "blocked-notice-logextract": "St'utente è bloccato mò.\nL'urdemo elemento d' 'o riggistro 'e blocche è ripurtato ccà abbascio p'avé nu riferimento:",
+       "clearyourcache": "'''Nota:''' aropo sarvate putisse necessità 'e pulezzà 'a caché d' 'o navigatóre pe' vedé 'e cagnamiente. \n*'''Firefox / Safari''': sprémme 'o buttóne maiuscole e ffà clic ncopp'a ''Recarreca'', o pure spremme ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' ncopp'a Mac)\n*'''Google Chrome''': spremme ''Ctrl-Shift-R'' (''⌘-Shift-R'' ncopp'a nu Mac)\n*'''Internet Explorer''': spremme 'o buttóne ''Ctrl'' pe' tramente ca faie click ncopp'a ''Refresh'', o pure spremmere ''Ctrl-F5''\n*'''Opera''': abbacanta tutt' 'a cache addò menu ''Strumiente → Preferenze''",
+       "usercssyoucanpreview": "'''Cunziglio:''' spremme 'o buttone 'Vide anteprimma' pe' pruvà 'o CSS nuovo apprimma d' 'o sarvà.",
+       "userjsyoucanpreview": "'''Cunziglio:''' spremme 'o buttone 'Vide anteprimma' pe' pruvà 'o JavaScript nuovo apprimma d' 'o sarvà.",
+       "usercsspreview": "'''Arricuordate ca chest'è sulamente n'anteprimma p' 'o CSS perzunale. 'E cagnamiente nun so' state ancora sarvate!'''",
+       "userjspreview": "'''Arricuordate ca chest'è sulamente n'anteprimma p' 'o JavaScript perzunale. 'E cagnamiente nun so' state ancora sarvate!'''",
+       "sitecsspreview": "'''Arricuordate ca chest'è sulamente n'anteprimma p' 'o CSS. 'E cagnamiente nun so' state ancora sarvate!'''",
+       "sitejspreview": "'''Arricuordate ca chest'è sulamente n'anteprimma p' 'o codece JavaScript. 'E cagnamiente nun so' state ancora sarvate!'''",
+       "userinvalidcssjstitle": "'''Attenziò:''' Nun esiste nisciuna skin c' 'o nomme \"$1\". Vide ch' 'e paggene .css e .js personalezzate teneno nu titolo n minucola, p'esempio {{ns:user}}:Esempio/vector.css e nun {{ns:user}}:Esempio/Vector.css.",
+       "updated": "(Agghiurnato)",
+       "note": "'''Nota:'''",
        "previewnote": "'''Chesta è sola n'anteprimma; 'e cagnamiénte â paggena nun songo ancora sarvate!'''",
+       "continue-editing": "Tràse int'a l'area 'e modifica",
+       "previewconflict": "L'anteprimma currisponne a 'o testo presente dint'a cascia 'e modifica ccà ncoppa e rappresentasse 'a paggena comme cumpare si sciglite 'e Sarvà ind'a stu mumento.",
+       "session_fail_preview": "'''Nun è possibbile prucessà 'o cagnamiento pecché se so' sperdut' 'e date d' 'a sessione.\nProva n'ata vota.\nSi nun funziona ancora, può pruvà 'a te [[Special:UserLogout|n'ascì]] e a trasì n'ata vota.'''",
+       "session_fail_preview_html": "'''Nun è possibbile prucessà 'o cagnamiento pecché se so' sperdut' 'e date d' 'a sessione.\nProva n'ata vota.'''\n''Siccome dint' 'o {{SITENAME}} è abilitato l'uso 'e l'HTML cruro, 'o buttone d'anteprimma nun è abbiàto comme misura 'e sicurezza annanza cocch'attacco JavaScript''\n'''Si chest'era nu tentativo legittimo 'e cagnamiento, prova n'ata vota. Si nun funziona ancora, può pruvà 'a te [[Special:UserLogout|n'ascì]] e a trasì n'ata vota.'''",
+       "token_suffix_mismatch": "'''Stu cagnamiento nun è stato sarvato pecché 'o client ave mmustato nu sbaglio dint'o scrivere d' 'e carattere d' 'a punteggiatura token. Pe luvà na possibbile corruzione d' 'o testo dint'a paggena, s'è rifiutat' 'a modifeca.\n\nSta situazione se può truvà, quanno staje ausanno nu servizio 'e proxy anonime via web cu d' 'e bug.'''",
+       "edit_form_incomplete": "'''Cocche parte d' 'o modulo 'e cagnamiento nun ha arrivato a 'o server; cuntrolla ch' 'e cagnamiente songo intatte e prova n'ata vota.'''",
        "editing": "Cagnamiento 'e $1",
+       "creating": "Staje crianno $1",
        "editingsection": "Cagnamiénto 'e $1 (sezzione)",
+       "editingcomment": "Cagnamiénto 'e $1 (nova sezzione)",
+       "editconflict": "Conflitto d'edizzione: $1",
+       "explainconflict": "N'at'utente ave sarvato na nova verziona d' 'a paggena pe' tramente ca stevate a fà 'e cagnamiente.\n'A cascia 'e mudifeca ncoppa cuntene 'o testo d' 'a paggena ca mò sta online, accussì comme è stato agghiurnato a l'at'utente.\n'A verziona ch' 'e cagnamiente vuoste è stata mmece riportata dint'a cascia 'e mudifeca abbascio.\nSi 'e vulite cunfermà avite 'a ripurtà 'e cagnamiente d' 'e vuoste dint'o testo ca esiste (dint'a cascia ncoppa).\nSpremmendo 'o buttón '{{int:savearticle}}', sarrà sarvato '''sulamente''' 'o testo cuntenuto dint'a cascia 'e cagnamiento ncoppa.",
+       "yourtext": "'O testo vuosto",
+       "storedversion": "A verziona 'n memoria",
+       "nonunicodebrowser": "'''Attenziò: state ausanno nu navigatóre ca nun è compatibbele ch' 'e carattere Unicode. Pe' ve permettere 'o cagnamiento d' 'e paggene senza crià ncunveniente, 'e carattere nun ASCII veneno viste dint' 'a cascia 'e cagnamiento sotto forma 'e codece esadecimale.'''",
+       "editingold": "'''Attenziò: staje cagnanno na verziona nun agghiurnata d' 'a paggena. Si 'a sarve accussì, tutte 'e cagnamiente fatte aropp'a sta verziona sarranno sperdute.'''",
+       "yourdiff": "Differenze",
+       "copyrightwarning": "Pe' piacere tenite a mmente ca tutte 'e contribbute a {{SITENAME}} songo cunziderate pubbrecate dint'e térmene d'uso d' 'a licienza $2 (vedite $1 pe n'avé cchiù dettaglie).\nSi nun vulite ca 'e testi vuoste fossero cagnate e distribuite 'a uno qualunque senza lémmeto, nun 'e mannate ccà.<br />\nMannanno stu testo dichiarate pùre, sott'a responsabilità vuosta, ch'è stato scritto 'a vuje perzunalmente o pure ca è stato copiato 'a na fonte n pubblico dominio o similarmente libbera.\n'''Nun mannate materiale prutetto 'a copyright senz'avé autorizzaziona!'''",
+       "copyrightwarning2": "Pe' piacere tenite a mmente ca tutte 'e contribbute a {{SITENAME}} se ponno cagnà, alterà, o distribbuì pe l'ati cuntribbuttòre.\n\nSi nun vulite ca 'e teste vuoste fossero cagnàte spenzieratamente, nun 'e mannate ccà.<br />\nMannanno stu testo dichiarate pùre, sott'a responsabilità vosta, ch'è stato scritto 'a vuje perzunalmente o pure ca è stato copiato 'a na fonte n pubblico dominio o similarmente libbera (vedete $1 pe' n'avé dettaglie).\n'''Nun mannate materiale prutetto 'a copyright senza n'avé autorizzaziona!'''",
+       "longpageerror": "'''Errore: 'o testo mannato è luongo {{PLURAL:$1|1|$1}} kilobyte, ch'è cchiù grosso d' 'a diminziona massima cunzentita ({{PLURAL:$2|1|$2}} kilobyte).'''\n'O testo nun se pò sarvà.",
+       "readonlywarning": "<strong>Attenziò</strong>: 'o database è bloccato pe se ffà 'a manutenzione. P' 'o mumento nun se ponno sarvà 'e cagnamiente fatte.\nPe' nun 'e sperdere, copia sti cuntenute dint'a nu file 'e testo e sarvatillo pe' tramente c'aspiette 'o sblocco d' 'o database.\n\nL'ammenistratore ca mpustaje 'o blocco ave scritto sta spiegazione: $1.",
+       "protectedpagewarning": "'''Attenziò: sta paggena è stata bloccata 'n modo tale ca sulamente l'utente ch' 'e privilegge d'ammenistratore 'a ponno cagnà.'''\nL'urdemo elemento d' 'o riggistro è scritto ccà abbascio pe' n'avé riferimento:",
+       "semiprotectedpagewarning": "'''Nota:''' Sta paggena è stata bloccata 'n modo ca sulamente l'utente riggistrate 'a ponno cagnà.\nL'urdemo elemento d' 'o riggistro è scritto ccà abbascio pe n'avé nfurmazione:",
+       "cascadeprotectedwarning": "'''Attenziò:''' Sta paggena è stata bloccata 'n modo ca sulamente l'utente ch' 'e privilegge d'ammenistratore 'a ponno cagnà. Chesto succiere pecché 'a paggena è dint'a {{PLURAL:$1|la paggena innecata ccà abbascio, ch'è stata prutetta|'e paggene innecate ccà abbascio, che so' state prutette}} sciglienno 'a prutezione \"ricurziva\":",
+       "titleprotectedwarning": "'''Attenziò: sta paggena è stata bloccata 'n modo ca fossero necessarie [[Special:ListGroupRights|deritte specifici]] p' 'a crià.'''\nL'urdemo elemento d' 'o riggistro è riportato ccà abbascio pe nfurmazione:",
        "templatesused": "{{PLURAL:$1|Template|Templates}} ausate 'a chesta paggena:",
+       "templatesusedpreview": "{{PLURAL:$1|Template|Templates}} ausate dint'a st'anteprimma:",
+       "templatesusedsection": "{{PLURAL:$1|Template|Templates}} ausate dint'a sta sezziona:",
        "template-protected": "(prutetto)",
        "template-semiprotected": "(semi-prutetto)",
+       "hiddencategories": "Sta paggena attócca a {{PLURAL:$1|na categurìa annascunnuta|$1 categurìe annascunnute}}:",
+       "nocreatetext": "{{SITENAME}} ha limitato 'a possibilità 'e crià paggene nnove. Putite turnà e cagnà na paggena ch'esiste già, o pure [[Special:UserLogin|trasì o ve riggistrà]].",
+       "nocreate-loggedin": "Nun v'è permesso 'e crià paggene nnove.",
+       "sectioneditnotsupported-title": "Cagnamiento 'e sezziune nun suppurtato",
+       "sectioneditnotsupported-text": "'O cagnamiento d' 'e sezziune nun è suppurtato dint'a sta paggena.",
+       "permissionserrors": "Nun haje 'e premmesse abbastante.",
+       "permissionserrorstext": "Nun haje premmesse pe lle ffà st'azziune, {{PLURAL:$1|'o mutivo è chesto|'e mutive so' chiste}}:",
+       "permissionserrorstext-withaction": "Nun haje premmesse abbastante pe' $2, {{PLURAL:$1|'o mutivo è chesto|'e mutive so' chiste}}:",
+       "recreate-moveddeleted-warn": "'''Attenziò: staje a crià na paggena scancellata già.'''\n\nVire si è bbuono 'e cuntinuà a cagnà sta paggena. L'alenco ch' 'e relative scancellamiente e spustamente s'è scritto ccà abbascio pe' ffà comodo:",
+       "moveddeleted-notice": "Sta paggena è stata scancellata.\nL'alenco d' 'e relative scancellamiente e spustamente s'è scritto ccà abbascio pe' n'avé nfurmazione.",
+       "log-fulllog": "Vide log sano",
+       "edit-hook-aborted": "'O cagnamiento è stato annullato 'a 'o «hook».\nNun dette spiegazione nisciuna.",
+       "edit-gone-missing": "Nun se può agghiurnà 'a paggena.\nPare ch' 'è stata scancellata.",
+       "edit-conflict": "Conflitto d'edizziona.",
+       "edit-no-change": "'O cagnamiento è stato ignorato pecché nun s'è cagnato niente dint' 'o testo.",
+       "postedit-confirmation-created": "'A paggena è stata criata.",
+       "postedit-confirmation-restored": "'A paggena è stata arripigliata.",
+       "postedit-confirmation-saved": "'O cagnamiento è stato sarvato.",
+       "edit-already-exists": "Nun se può crià na paggena nova.\nEsiste già.",
+       "defaultmessagetext": "Mmasciata 'e testo predefinita",
+       "content-failed-to-parse": "Nun se può analizzare $2 p' 'o mudello $1: $3",
+       "invalid-content-data": "Date cuntenute nun buone",
+       "content-not-allowed-here": "'O cuntenuto \"$1\" nun è permesso dint'a paggena [[$2]]",
+       "editwarning-warning": "Ascenno 'e sta paggena putisse ffà sperdere 'e cagnamiente fatte.\nSi sì trasuto, allora può stutà st'avviso dint'a sezziona \"{{int:prefs-editing}}\" d' 'e preferenze.",
+       "editpage-notsupportedcontentformat-title": "Furmatto d' 'o cuntenuto nun suppurtato",
+       "editpage-notsupportedcontentformat-text": "'O furmatto d' 'o cuntenuto $1 nun è suppurtato d' 'o mudello 'e cuntenuto $2.",
+       "content-model-wikitext": "wikitesto",
+       "content-model-text": "testo nurmale",
+       "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Paggene c'ausano argomiente dupprecate dint' 'e chiammate a 'e mudelle",
+       "duplicate-args-category-desc": "'A paggena tene chiammate a mudelle c'ausassero argomiente dupprecate, comme p'esempio <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+       "expensive-parserfunction-warning": "'''Attenziò:''' Sta paggena cuntene troppe chiammate a 'e funzione parser.\n\nN'avesse 'a tené meno 'e $2, p' 'o mumento ce ne {{PLURAL:$1|stà $1|stanno $1}}.",
+       "expensive-parserfunction-category": "Paggene cu troppe chiammate a 'e funzione parser",
+       "post-expand-template-inclusion-warning": "'''Attenzione:''' 'a diminsiona d' 'e template ionte ccà è troppo grossa.\nCocche template se lassarrà fore.",
+       "post-expand-template-inclusion-category": "Paggene addò 'a diminsiona d' 'o template è fore 'o lémmeto",
+       "post-expand-template-argument-warning": "'''Attenziò:''' sta paggena cuntene uno o cchiù argumente 'e template troppo gruosse pe' 'a spannere. Sti argumente se lassarranno fore.",
+       "post-expand-template-argument-category": "Paggene ca cunteneno argumente nun cunziderate",
+       "parser-template-loop-warning": "È stato scummigliato n'aniello d' 'o template: [[$1]]",
+       "parser-template-recursion-depth-warning": "È arrivato 'o lemmeto 'e ricurzione d' 'o template ($1)",
+       "language-converter-depth-warning": "'O fùto d' 'o lemmeto d' 'o scagnatòre 'e lengua è appassato ($1)",
+       "node-count-exceeded-category": "Paggene addò 'o nummero 'e núrece è stato appassato",
+       "node-count-exceeded-category-desc": "'A paggena appassa 'o nummero massimo 'e núrece.",
+       "node-count-exceeded-warning": "Sta paggena ave appassato 'o lemmeto 'e cunto 'e núrece",
+       "expansion-depth-exceeded-category": "Paggene addò 'o fùto 'e spansiona è appassato",
+       "expansion-depth-exceeded-category-desc": "Sta paggena appassa 'o lemmeto d'espansione.",
+       "expansion-depth-exceeded-warning": "Sta paggena ha appassato 'o lemmeto 'e futo 'e spansione",
+       "parser-unstrip-loop-warning": "Scummigliato aniello Unstrip",
+       "parser-unstrip-recursion-limit": "Appassato 'o lémmeto 'e ricurzione d' Unstrip ($1)",
+       "converter-manual-rule-error": "È stato scummigliato n'errore dint'a regola manuale 'e converziona 'e lengua",
+       "undo-success": "'O cagnamiento se può annullà.\nPe' piacere vedete 'e differenze mmustate nfra 'e verziune pe' te ffà capace ca 'e cuntenute songo bbuone, e astipate 'e cagnamiente ccà abbascio pe' fernì e accussì turnà arreto.",
+       "undo-failure": "Nun se può fà turnà arreto 'o cagnamiento pecché ce sta nu conflitto ch' 'e cagnamiente intermedie.",
+       "undo-norev": "Nun se può fà turnà arreto 'o cagnamiento pecché nun esiste o s'è scancellato.",
+       "undo-nochange": "Pare c' 'o cagnamiento s'è già fatto turnà arreto.",
        "undo-summary": "Canciella 'o cagnamiento $1 'e [[Special:Contributions/$2|$2]] ([[User talk:$2|Chiàcchiera]])",
+       "undo-summary-username-hidden": "Annullato 'o cagnamiento $1 pe n'utente annascunnuto",
+       "cantcreateaccounttitle": "Nun se può crià cunto",
+       "cantcreateaccount-text": "'A riggistraziona è stata bloccata 'a l'utente [[User:$3|$3]] 'a st'innerizzo IP ('''$1''').\n\n'O mutivo dato 'a $3 è chistu ccà: ''$2''",
+       "cantcreateaccount-range-text": "'A criazione 'e cunte 'a ll'indirizze int'o ntervallo '''$1''', che cummiglia 'o vuosto ('''$4'''), è stata bloccata 'a l'utente [[User:$3|$3]].\n\n'O mutivo dato 'a $3 è chistu ccà: ''$2''",
+       "viewpagelogs": "Vide 'e log azzeccate a sta paggena",
+       "nohistory": "Nun esiste na cronologgia 'e verziune pe' sta paggena.",
        "currentrev": "Verzione 'e mmo",
        "currentrev-asof": "Vversione attuale dde $1",
        "revisionasof": "Vversione delle $1",
+       "revision-info": "Verziona d' 'o $1 fatta 'a {{GENDER:$6|$2}}$7",
        "previousrevision": "← Verzione 'e primma",
        "nextrevision": "Vversione cchiù recente →",
        "currentrevisionlink": "Verzione 'e mmo",
        "cur": "corr",
+       "next": "successiva",
        "last": "prec",
+       "page_first": "primma",
+       "page_last": "úrdema",
+       "histlegend": "Confronto nfra verziune: sciglite 'e casciulelle c'attoccassero a 'e verziune che vulite cunfruntà e spremmite Invio o pure 'o buttóne ccà abbascio.\n\nLiggenda: '''({{int:cur}})''' = differenze c' 'a verzione 'e mmò, '''({{int:last}})''' = differenze c' 'a verzione 'e primma, '''{{int:minoreditletter}}''' = cagnamiento minore",
+       "history-fieldset-title": "Naviga dint' 'a cronologgia",
        "history-show-deleted": "Solo chille canciellate",
        "histfirst": "primma",
        "histlast": "urdema",
+       "historysize": "({{PLURAL:$1|1 byte|$1 byte}})",
+       "historyempty": "(abbacante)",
+       "history-feed-title": "Cronologgia",
+       "history-feed-description": "Cronologgia d' 'a paggena ncopp'a stu sito",
        "history-feed-item-nocomment": "$1 'o $2",
+       "history-feed-empty": "'A paggena addimannata nun esiste.\nPuò darsi ca è stata scancellata d' 'a wiki, o s'è cagnato 'o nomme.\nProva a vedé [[Special:Search|dint' 'a wiki]] si ce stanno nnove paggene.",
+       "rev-deleted-comment": "(Oggetto d' 'o cagnamiento luvato)",
+       "rev-deleted-user": "(nomme utente luvato)",
+       "rev-deleted-event": "(azione d' 'o log luvata)",
+       "rev-deleted-user-contribs": "[nomme utente o indirizzo IP luvato - cagnamiento annascunnuto d' 'a cronologgia]",
+       "rev-deleted-text-permission": "Sta verziona d' 'a paggena è stata '''scancellata'''.\nAscìa dint' 'o [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} riggistro d' 'e scancellamiente] pe ne sapé 'e cchiù.",
+       "rev-suppressed-text-permission": "Sta verziona d' 'a paggena è stata '''luvata'''.\nVide 'o [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistro 'e paggene luvate] pe' ne sapé 'e cchiù.",
+       "rev-deleted-text-unhide": "Sta verziona d' 'a paggena è stata '''scancellata'''.\nVide 'o [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log d' 'e scancellamiente] pe' ne sapé 'e cchiù.\nA ll'ammenistrature è cunzentito ancora [$1 'e vedé sta paggena] si vonno.",
+       "rev-suppressed-text-unhide": "Sta verziona d' 'a paggena è stata '''luvata'''.\nVide 'o [{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} riggistro 'e paggene luvate] pe' ne sapé 'e cchiù.\nA ll'ammenistrature è cunzentito ancora [$1 'e vedé sta verziona] si vonno.",
+       "rev-deleted-text-view": "Sta verziona d' 'a paggena è stata '''scancellata'''.\nLl'ammenistratore 'a ponno veré ancora; e 'a ponno ascìa dint' 'o [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistro d' 'e scancellaziune] pe ne sapé 'e cchiù.",
+       "rev-suppressed-text-view": "Sta verziona d' 'a paggena è stata '''luvata'''.\nSta verziona 'a può veré ancora, 'e dettaglie 'e può cuntrullà dint' 'o [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistro 'e paggene luvate] pe' ne sapé 'e cchiù.",
+       "rev-deleted-no-diff": "Sta cunfronto d' 'a paggena nun 'o può veré pecché una d' 'e verziune è stata '''scancellata'''.\nAscìa dint' 'o [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistro d' 'e scancellamiente] pe ne sapé 'e cchiù.",
+       "rev-suppressed-no-diff": "Nun se può vedé stu cunfronto nfra verziune pecché una d' 'e verziune è stata '''scancellata'''.",
+       "rev-deleted-unhide-diff": "Una d' 'e verziune 'e sta paggena è stata '''scancellata'''.\nVide 'o [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistro d' 'e scancellamiente] pe' ne sapé 'e cchiù.\nPuò ancora [$1 vedé sta paggena] si bbuò.",
+       "rev-suppressed-unhide-diff": "Una d' 'e verziune 'e sta paggena è stata '''luvata'''.\nVide 'o [{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} riggistro 'e paggene luvate] pe' ne sapé 'e cchiù.\nPuò ancora [$1 vedé sta verziona] si bbuò.",
+       "rev-deleted-diff-view": "Una d' 'e verziune 'e sta paggena è stata '''scancellata'''.\nPuò vedé sta verziona ancora; 'e dettaglie 'e può vedé dint' 'o [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistro d' 'e scancellaziune] pe ne sapé 'e cchiù.",
+       "rev-suppressed-diff-view": "Una d' 'e verziune 'e sta paggena è stata '''luvata'''.\nSta verziona 'a può veré ancora; 'e dettaglie 'e può cuntrullà dint' 'o [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistro 'e paggene luvate] pe' ne sapé 'e cchiù.",
        "rev-delundel": "faje vedé/annascunne",
        "rev-showdeleted": "faje vedé",
+       "revisiondelete": "Scancella o ripiglia verziune",
+       "revdelete-nooldid-title": "Verziona nun specificata",
+       "revdelete-nooldid-text": "Nun è stata specificata nisciuna verziona d' 'a paggena p' 'a secutà sta funzione, 'a verziona specificata nun esiste o pure staje truvann' 'annascónnere 'a verziona 'e mò.",
+       "revdelete-no-file": "'O file specificato nun esiste.",
+       "revdelete-show-file-confirm": "Sì sicuro/a ca vulite veré 'a verziona scancellata d' 'o file \"<nowiki>$1</nowiki>\" d' 'o $2 a 'e $3?",
        "revdelete-show-file-submit": "Sì",
-       "revdelete-radio-set": "Nasconde",
+       "revdelete-selected-text": "{{PLURAL:$1|Verziona scigliuta|Verziune scigliute}} 'e [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Verzione scigliuta|Verziune scigliute}} d' 'o file 'e [[:$2]]:",
+       "logdelete-selected": "{{PLURAL:$1|Fatto scigliuto d' 'o riggistro|Fatte scigliute d' 'o riggistro}}:",
+       "revdelete-text-text": "'E verziune scancellate cumpareno ancora dint' 'a cronologgia d' 'a paggena, ma na parte d' 'o cuntenuto lloro nun sarrà a disposizione a 'o pubbreco.",
+       "revdelete-text-file": "'E verziune 'e file scancellate cumpareno ancora dint' 'a cronologgia d' 'o file, ma parte d' 'o cuntenuto lloro nun sarrà a disposizione a 'o pubbreco.",
+       "logdelete-text": "'E fatte 'e riggistro scancellate cumpareno ancora dint' 'a cronologgia 'e riggistro, ma na parte d' 'o cuntenuto lloro nun sarrà a disposizione a 'o pubbreco.",
+       "revdelete-text-others": "Ll'at'ammenistrature puterranno ancora trasì e arrepiglià 'e cuntenute annascunnute, si nun so' state mpustate cchiù restrizziune.",
+       "revdelete-confirm": "Pe' piacere cunfermate ca overo vulite ffà chesto, ca cunuscete 'e cunseguenze, e ca state facenno chesto rispettanno 'e [[{{MediaWiki:Policy-url}}|linee guida]].",
+       "revdelete-suppress-text": "Sti luvamiente hana essere fatte '''unicamente''' dint' 'e situaziune ccà abbascio:\n* nfurmaziune potenzialmente diffamatorie\n* date perzunale inopportune\n*: ''indirizze, nummeri 'e telefono, codece fiscale, ecc.''",
+       "revdelete-legend": "Miette 'e limmete 'e visibilità",
+       "revdelete-hide-text": "Testo d' 'a verziona",
+       "revdelete-hide-image": "Annascunne 'e cuntenute d' 'o file",
+       "revdelete-hide-name": "Annascunne aziona e l'oggetto 'e cchesta",
+       "revdelete-hide-comment": "Modifeca oggetto",
+       "revdelete-hide-user": "Nomme o indirizzo IP 'e ll'autore",
+       "revdelete-hide-restricted": "Annascunne 'e nfurmaziune 'nnecate pure a l'ammenistrature",
+       "revdelete-radio-same": "(nun cagnà)",
+       "revdelete-radio-set": "Annascunnuto",
        "revdelete-radio-unset": "Faje vedé",
+       "revdelete-suppress": "Annascunne 'e nfurmaziune pure a l'ammenistrature",
+       "revdelete-unsuppress": "Scancella 'e limmete ncopp' 'e verziune arripigliate",
+       "revdelete-log": "Mutivo:",
+       "revdelete-submit": "Applica {{PLURAL:$1|â virziona scigliuta|a 'e virziune scigliute}}",
+       "revdelete-success": "'''Visibbelità d' 'a verziona agghiurnata e apposto.'''",
+       "revdelete-failure": "'''Int'a sta virziona 'a visibbelità nun se può agghiurnà:'''\n$1",
+       "logdelete-success": "'''Int'a stu riggistro 'a visibbelità è stata scigliuta currettamente.'''",
+       "logdelete-failure": "'''Int'a stu riggistro 'a visibbelità nun se può scegliere:'''\n$1",
        "revdel-restore": "càgna visiblità",
+       "pagehist": "Verziune 'e primma",
+       "deletedhist": "Cronologgia scancellata",
+       "revdelete-hide-current": "Nun se ponno annasconnere ll'item  cu data 2, $1: pecché song'a la verziona 'e mmò.",
+       "revdelete-show-no-access": "Errore a mmustà ll'oggetto cu data $2, $1: St'oggetto è stato nzegnàto comme \"riservato\".\nNun tiene acciesso a chesto.",
+       "revdelete-modify-no-access": "Nun se può cagnà l'oggetto cu data $2, $1: pecché st'oggetto è stato nzegnàto comme \"riservato\".\nVuje nun avete acciesso.",
+       "revdelete-modify-missing": "Nun se può cagnà l'oggetto cu l'ID $1 pecché nun è prisente int' 'o database.",
+       "revdelete-no-change": "'''Attenziò:''' l'oggetto cu data $2, $1 teneva già 'e mpustaziune 'e visibbilità addimannate.",
+       "revdelete-concurrent-change": "Nun se può cagnà l'oggetto cu data $2, $1: 'O status 'e chisto pare ch'è stato cagnato pe cocch'utente pe' tramente ca 'o stavate a cagnà.\nPe' piacere cuntrullate 'o riggistro.",
+       "revdelete-only-restricted": "Errore pe' tramente ca s'annasconneva l'oggetto cu data $2, $1: Nun può luvà oggette d' 'a vista 'e ll'ammenistratore senza scegliere manco una 'e l'at'opziune 'e visibbelità.",
+       "revdelete-reason-dropdown": "* Mutive comune pe' ffà scancellamiento\n** Violazione d' 'o copyright\n** Cummente o nfurmaziune perzunale inappropriate\n** Nomme utente inappropriato\n** Nfurmazione potenzialmente diffamatoria",
+       "revdelete-otherreason": "Ati/cchiù ragiune:",
+       "revdelete-reasonotherlist": "Ati ragiune",
+       "revdelete-edit-reasonlist": "Càgna 'e mutive pe' fà 'o scancellamiento",
+       "revdelete-offender": "Autore d' 'a verziona:",
+       "suppressionlog": "Riggistro 'e luvamiente",
+       "suppressionlogtext": "Ccà abbascio ce sta n'alenco ch' 'e scancellamiente e blocche ca teneno cuntenute annascunnuto a l'ammenistrature.\nVide l'[[Special:BlockList|elenco d' 'e blocche]] pe' l'elenco e banne e blocche attive 'e mò.",
+       "mergehistory": "Aunisce 'e cronologgie",
+       "mergehistory-header": "Sta paggena te permette d'aunì 'e verziune d' 'a cronologgia 'e na paggena origgine a na paggena nova.\nVedite ca s'avesse 'a nchiantà stu cagnamiento senza scassà 'a continuità storeca d' 'a paggena.",
+       "mergehistory-box": "Aunisce 'a cronologgia 'e ddoje ppaggene:",
+       "mergehistory-from": "Paggena d'origgene:",
+       "mergehistory-into": "Paggena 'e destinazione:",
+       "mergehistory-list": "Cronologgia 'e paggena ca fosse applicabbele pe' se ffà l'unione",
+       "mergehistory-merge": "Se ponno aunì 'e verziune 'e [[:$1]] nzignata ccà int' 'a cronologgia 'e [[:$2]]. Ausàte 'a colonna ch' 'e buttóne d'opziune pe' ffà l'aunione 'e tutt' 'e verziune nfin' 'a data e ora nzignàte.\nVedite ca si s'ausassero 'e buttóne 'e navigazione, 'a culonna ch' 'e buttóne d' 'ozzione fosse rinnovata.",
+       "mergehistory-go": "Vide 'e cagnamiente ca se ponno aunì",
+       "mergehistory-submit": "Aunisce 'e verziune",
+       "mergehistory-empty": "Nun ce stanno virziune pe' putè ffà l'aunione.",
+       "mergehistory-success": "{{PLURAL:$3|Na virziona 'e [[:$1]] è stata aunita|$3 versiune 'e [[:$1]] so' state aunite}} â cronologgia 'e [[:$2]].",
+       "mergehistory-fail": "Nun se ponno aunì 'e cronologgie. Pe' piacere cuntrullate n'ata vota 'a paggena e li parametre tempurale.",
+       "mergehistory-fail-toobig": "Nun se può fà l'aunione d' 'a cronologgia cu nu lémmeto 'e n'ati $1 {{PLURAL:$1|revisione|rivisiune}} 'a cagnà posto.",
+       "mergehistory-no-source": "'A paggena d'origgine $1 nun esiste.",
+       "mergehistory-no-destination": "'A paggena 'e destinazione $1 nun esiste.",
+       "mergehistory-invalid-source": "'A paggena d'origgine add'avé nu titolo bbuono.",
+       "mergehistory-invalid-destination": "'A paggena 'e destinazione add'avé nu titolo bbuono.",
+       "mergehistory-autocomment": "Aunione 'e [[:$1]] int'a [[:$2]]",
+       "mergehistory-comment": "Aunione 'e [[:$1]] int'a [[:$2]]: $3",
+       "mergehistory-same-destination": "'E paggene d'origgine e destinazione nun ponno essere eguale",
+       "mergehistory-reason": "Mutivo:",
+       "mergelog": "Riggistro d'aunione",
+       "revertmerge": "Annulla aunione",
+       "mergelogpagetext": "Ccà abbascio ce sta na lista cu ll'urdeme aunione int'a cronologgia d' 'e ddoje paggene.",
+       "history-title": "$1: cronologgia d' 'e cagnamiente",
+       "difference-title": "Differenze nfra 'e verziune 'e \"$1\"",
+       "difference-title-multipage": "Differenze nfra 'e verziune \"$1\" e \"$2\"",
+       "difference-multipage": "(Differenze nfra 'e paggene)",
        "lineno": "Riga $1:",
+       "compareselectedversions": "Cunfronta 'e verziune scigliute",
+       "showhideselectedversions": "Cagna visibbelità d' 'e verziune scigliute",
        "editundo": "annulla",
+       "diff-empty": "(Nisciuna differenza)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Na verziona ntermedia|$1 verziune ntermedie}} 'e n'utente stisso nun {{PLURAL:$1|è mmustata|songo mmustate}})",
+       "diff-multi-otherusers": "({{PLURAL:$1|Na virzione ntermedia|$1 verziune ntermedie}} 'a {{PLURAL:$2|n'at'utente|$2 n'ati ddoj'utente}} nun è mmustata)",
+       "diff-multi-manyusers": "({{PLURAL:$1|Na virzione ntermedia|$1 verziune ntermedie}} 'a cchiù 'e $2 {{PLURAL:$2|utente|utente}} nun è mmustata)",
+       "difference-missing-revision": "{{PLURAL:$2|Na virziona|$2 verziune}} 'e sta differenza ($1) {{PLURAL:$2|nun è stata truvata|nun so' state truvate}}.\n\nChest'è succiesso quanno s'è secutato nu diff obsoleto a na paggena scancellata.\n'E dettaglie se ponno truvà dint'a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 'o riggistro 'e scancellamiente].",
        "searchresults": "Risultato d''a recerca",
        "searchresults-title": "Ascià risultate ppe \"$1\"",
+       "titlematches": "Currispunnenze d' 'o titolo d' 'e paggene",
+       "textmatches": "Currispunnenze d' 'o testo d' 'e paggene",
        "notextmatches": "Voce addemannata nun truvata dint' 'e teste 'e articulo",
        "prevn": "{{PLURAL:$1|precedente|precedente $1}}",
        "nextn": "{{PLURAL:$1|successivo|successive $1}}",
        "nextn-title": "{{PLURAL:$1|Risultato successivo|$1 risultate successive}}",
        "shown-title": "Fa vere {{PLURAL:$1|'nu risultato|$1 risultate}} ppe paggena",
        "viewprevnext": "Vere($1 {{int:pipe-separator}} $2) ($3).",
-       "searchmenu-new": "<strong>'''Cria a paggena \"[[:$1]]\" ncopp'â chisto wiki!'''</strong> {{PLURAL:$2|0=|Vede anche 'a paggena truovata cu 'a recerca tuja|Vede anche 'e risultate d\"a recerca}}",
+       "searchmenu-exists": "'''Ncopp' 'o sito esiste na paggena c' 'o nomme \"[[:$1]]\"'''\n{{PLURAL:$2|0=|Vedite pure dint'a l'ati risultate 'e cerca.}}",
+       "searchmenu-new": "<strong>'''Cria a paggena \"[[:$1]]\" ncopp'â chisto wiki!'''</strong> {{PLURAL:$2|0=|Vide anche 'a paggena truovata cu 'a recerca vuosta|Vede anche 'e risultate d\"a recerca}}",
        "searchprofile-articles": "Paggene 'e contenute",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tutto",
        "searchprofile-advanced": "Avanzate",
        "searchprofile-articles-tooltip": "Circa dint'ô $1",
        "searchprofile-images-tooltip": "Circa file",
+       "searchprofile-everything-tooltip": "Ascìa int'a tutte 'e cuntenute (pure dint' 'e chiacchiere)",
        "searchprofile-advanced-tooltip": "Circa dint'e namespace perzonalizzate",
        "search-result-size": "$1 ({{PLURAL:$2|'na parola|$2 parole}})",
+       "search-result-category-size": "{{PLURAL:$1|1 utente|$1 utente}} ({{PLURAL:$2|1 sottocategurìa|$2 sottocategurìe}}, {{PLURAL:$3|1 file|$3 files}})",
        "search-redirect": "(redirect $1)",
        "search-section": "(sezzione $1)",
+       "search-category": "(categurìa $1)",
+       "search-file-match": "(currispunnenza dint' 'e cuntenute d' 'o file)",
        "search-suggest": "Prova chisto: $1",
        "search-interwiki-caption": "Prugiette frate",
+       "search-interwiki-default": "Risultate 'a $1:",
+       "search-interwiki-more": "(cchiù)",
+       "search-relatedarticle": "Azzeccato",
+       "searchrelated": "azzeccato",
        "searchall": "Tutte",
+       "showingresults": "Ccà abbascio {{PLURAL:$1|s'apprisentano 'o massimo '''1''' risultato|veneno apprisentate massimo '''$1''' risultate}} aropp' 'o nummero '''$2'''.",
+       "showingresultsinrange": "{{PLURAL:$1|Vene mmustato|Veneno mmustate}} abbascio {{PLURAL:$1|<strong>1</strong> risultato|<strong>$1</strong> risultate}} d' 'o <strong>$2</strong> a 'o <strong>$3</strong>.",
+       "search-showingresults": "{{PLURAL:$4|Risultato <strong>$1</strong> 'e <strong>$3</strong>|Risultate <strong>$1 - $2</strong> 'e <strong>$3</strong>}}",
        "search-nonefound": "'A ricerca nun ha produtto risultate.",
+       "powersearch-legend": "Ricerca avanzata",
+       "powersearch-ns": "Ascìa dint' 'o namespace:",
+       "powersearch-togglelabel": "Cuntrolla:",
+       "powersearch-toggleall": "Tutto",
+       "powersearch-togglenone": "Nisciuno",
+       "powersearch-remember": "Arricuòrdate d' 'a selezziona quanno faje ricerche nfuturo",
+       "search-external": "Ricerca 'a fore",
+       "searchdisabled": "'A ricerca dint'a {{SITENAME}} nun è attiva; pe' tramente se putesse ausà nu mutore 'e cerca sterno comm'a Google. (Avite 'e sapé però, ca sti cuntenute d' 'o {{SITENAME}} dint' 'e mutore, può darse ca nun stanno agghiurnate.)",
+       "search-error": "È succiesso n'errore pe' tramente ca se faceva 'a ricerca: $1",
+       "preferences": "Preferenze d''e mmeje",
        "mypreferences": "Preferenze d''e mmeje",
+       "prefs-edits": "Cagnamiente affettuate:",
+       "prefsnologintext2": "Pe' piacere, trasite pe' cagnà 'e preferenze voste.",
+       "prefs-skin": "Aspetto grafeco (skin)",
+       "skin-preview": "Anteprimma",
+       "datedefault": "Nisciuna preferenza",
+       "prefs-labs": "Funzionalità sperimentale",
+       "prefs-user-pages": "Paggene utente",
+       "prefs-personal": "Profilo utente",
        "prefs-rc": "Urdeme nove",
        "prefs-watchlist": "Asservate speciale",
+       "prefs-watchlist-days": "Nummero 'e juorne 'a mmustà dint'a l'elenco 'e cuntrollo:",
+       "prefs-watchlist-days-max": "Massimo $1 {{PLURAL:$1|juorno|juorne}}",
+       "prefs-watchlist-edits": "Numero massimo 'e cagnamiente 'a mmustà ch' 'e funziune avanzate:",
+       "prefs-watchlist-edits-max": "Nummero massimo: 1000",
+       "prefs-watchlist-token": "Token 'e l'alenco 'e cuntrollo:",
+       "prefs-misc": "Varje",
+       "prefs-resetpass": "Cagna 'a password",
+       "prefs-changeemail": "Cagna l'indirizzo e-mail",
+       "prefs-setemail": "Mpizza nu ndirizzo e-mail",
+       "prefs-email": "Opziune e-mail",
+       "prefs-rendering": "Aspetto",
        "saveprefs": "Sarva",
+       "restoreprefs": "Arripiglia 'e mpustaziune predefinite (inta tutte 'e seziune)",
+       "prefs-editing": "Cascia 'e cagnamiento",
+       "rows": "Righe:",
        "columns": "Culonne:",
        "searchresultshead": "Truova",
+       "stub-threshold": "Valore minimo p' 'e <a href=\"#\" class=\"stub\">cullegamiente a 'e stub</a>, 'n byte:",
+       "stub-threshold-disabled": "Stutato",
+       "recentchangesdays": "Nummero 'e juorne a mmustà dint'a l'urdeme cagnamiente:",
+       "recentchangesdays-max": "Massimo $1 {{PLURAL:$1|juorno|juorne}}",
+       "recentchangescount": "Nummero predefinito 'e cagnamiente 'a mmustà:",
+       "prefs-help-recentchangescount": "Chesto ntenne ll'urdeme cagnamiente, 'e cronologgie 'e paggena, e riggistre.",
+       "prefs-help-watchlist-token2": "Chest'è 'a chiave segreta pe se ffà 'o feed web 'e l'alenco 'e cuntrolo d' 'o vuosto.\nSi coccheruno 'a cunoscesse, allora putesse vedé l'alenco 'e cuntrollo, picciò nun 'a spartite. [[Special:ResetTokens|Cliccate ccà se tenite necessità d' 'a rimpizzà]].",
+       "savedprefs": "'E preferenze songo state sarvate.",
+       "timezonelegend": "Fuso orario:",
+       "localtime": "Ora lucale:",
+       "timezoneuseserverdefault": "Aúsa ora predefinita d' 'o wiki ($1)",
+       "timezoneuseoffset": "Ato (specificà 'a differenza)",
+       "servertime": "Ora d' 'o server:",
+       "guesstimezone": "Aúsa l'ora d' 'o navigatóre",
        "timezoneregion-africa": "Afreca",
+       "timezoneregion-america": "Amereca",
+       "timezoneregion-antarctica": "Antartide",
+       "timezoneregion-arctic": "Arteco",
+       "timezoneregion-asia": "Asia",
+       "timezoneregion-atlantic": "Oceano Atlanteco",
+       "timezoneregion-australia": "Australia",
+       "timezoneregion-europe": "Europa",
+       "timezoneregion-indian": "Oceano Indiano",
+       "timezoneregion-pacific": "Oceano Pacifeco",
+       "allowemail": "Abbìa 'a ricezione 'e mmasciate mannate 'a l'ati utente",
+       "prefs-searchoptions": "Ascìa",
+       "prefs-namespaces": "Namespace",
+       "default": "predefinito",
+       "prefs-files": "File",
+       "prefs-custom-css": "CSS personalizzato",
+       "prefs-custom-js": "JavaScript personalizzato",
+       "prefs-common-css-js": "CSS/JavaScript spartuto pe' tutt' 'e skin:",
+       "prefs-reset-intro": "Putisse ausà sta paggena pe' rimpizzà 'e preferenze proprie comme chille predefinite d' 'o sito.\nL'operazione nun se può annullà.",
+       "prefs-emailconfirm-label": "Cunferma 'e ll'e-mail:",
        "youremail": "E-mail:",
        "username": "{{GENDER:$1|Nomme utente}}:",
+       "prefs-memberingroups": "{{GENDER:$2|Membro}} {{PLURAL:$1|d' 'o gruppo|d' 'e gruppe}}:",
+       "prefs-registration": "Data 'e riggistrazione:",
        "yourrealname": "Nomme vero",
        "yourlanguage": "Lengua:",
+       "yourvariant": "Variante d' 'a llengua:",
+       "prefs-help-variant": "'A variante o grafia ca preferite 'e vedé ncopp' 'e paggene 'e chesta wiki.",
+       "yournick": "Soprannomme (nickname):",
+       "prefs-help-signature": "'E cummente dint' 'e paggene 'e chiacchiera hanna essere firmate cu \"<nowiki>~~~~</nowiki>\" ca s'addeventarrà automatecamente 'a firma propria c' 'a data.",
+       "badsig": "Errore 'e firma nun standard, cuntrullate 'e tag HTML.",
+       "badsiglength": "'A firma c'avite scigliuto è troppo luonga, chesta nun avesse 'a superà $1 {{PLURAL:$1|carattere|carattere}}.",
+       "yourgender": "Comme nce referimmo a vvuje?",
+       "gender-unknown": "Preferisco 'e nun 'o ddicere",
+       "gender-male": "È riggistrato ncopp' 'a {{SITENAME}}",
+       "gender-female": "È riggistrata ncopp' 'a {{SITENAME}}",
+       "prefs-help-gender": "Mpizzà sta preferenza è ozzionale.\n'O software aúsa stu valore pe' se vutà a vuje e v'anummenà a l'ati utente ausanno 'o gennere grammatecale buono.\nCheste nfurmaziune sarranno pubbreche.",
+       "email": "E-mail",
+       "prefs-help-realname": "'O nomme overo vuosto è opzionale.\nSi 'o scrivete, se putesse ausà pe' ve dà l'attribuzione d' 'a fatica fatta.",
+       "prefs-help-email": "L'e-mail vuosto è ozzionale, ma permettesse 'e ricevere 'a password propria quanno v' 'a scurdate.",
+       "prefs-help-email-others": "Putite pure scegliere 'e lassà che l'at'utente ve mannassero mmasciate via e-mail cu nu cullegamiento â paggena d'utente o chiacchiera.\nLl'indirizzo e-mail vuosto nun è scummigliato quanno l'at'utente ve cuntattano.",
+       "prefs-help-email-required": "L'indirizzo e-mail è obbligatorio.",
+       "prefs-info": "Nfurmaziune bbase",
+       "prefs-i18n": "Nternaziunalizzazione",
+       "prefs-signature": "Firma",
+       "prefs-dateformat": "Furmato data",
+       "prefs-timeoffset": "Ore 'e differenza",
+       "prefs-advancedediting": "Opziune generale",
+       "prefs-editor": "Editore",
+       "prefs-preview": "Anteprimma",
+       "prefs-advancedrc": "Opziune avanzate",
+       "prefs-advancedrendering": "Opziune avanzate",
+       "prefs-advancedsearchoptions": "Opziune avanzate",
+       "prefs-advancedwatchlist": "Opziune avanzate",
+       "prefs-displayrc": "Opziune 'e visualizzazione",
+       "prefs-displaywatchlist": "Opziune 'e visualizzazione",
+       "prefs-tokenwatchlist": "Token",
+       "prefs-diffs": "Differenze",
+       "prefs-help-prefershttps": "Sta preferenza averrà affetto 'a 'o prossimo acciesso vuosto.",
+       "prefswarning-warning": "Avite fatto cagnamiente a 'e preferenze d' 'e vuoste ca nun so' stat'ancora sarvate.\nSi ascite 'a sta paggena senza clickà \"$1\" 'e preferenze d' 'e vuoste nun sarranno agghiurnate.",
+       "prefs-tabs-navigation-hint": "Suggerimento: se ponno ausà 'e buttòne 'e freccia a manca e a dritta pe' ve muovere nfra 'e schede dint'a l'alenco d' 'e schede.",
+       "email-address-validity-valid": "L'indirizzo e-mail pare valido",
+       "email-address-validity-invalid": "Nzerta n'indirizzo e-mail valido",
+       "userrights": "Gestione d' 'e permesse 'e l'utente",
+       "userrights-lookup-user": "Gestione 'e gruppe d'utenza",
+       "userrights-user-editname": "Nzertàte nu nomme utente:",
+       "editusergroup": "Cagnate 'e gruppe d'utenze",
+       "editinguser": "Cagnamiento d' 'e deritte d'utente '''[[User:$1|$1]]''' $2",
+       "userrights-editusergroup": "Cagnate 'e gruppe d'utenze",
+       "saveusergroups": "Sarvate 'e gruppe d'utenza",
+       "userrights-groupsmember": "Ffà parte {{PLURAL:$1|d' 'o gruppo|d' 'e gruppe}}:",
+       "userrights-groupsmember-auto": "Membro mplicito 'e:",
+       "userrights-groups-help": "Putite cagnà 'e gruppe assegnate a l'utente:\n* Na cascia 'e spunta scigliuta significasse ca appartenenza 'e l'utente a 'o gruppo\n* Na cascia 'e spunta nun scigliuta significasse 'a nun appartenenza a 'o gruppo.\n* 'O simmolo * significasse ca nun se può scancellà l'appartenenza a 'o gruppo aropp'a ll'avé miso (o viceversa).",
+       "userrights-reason": "Mutivo:",
+       "userrights-no-interwiki": "Nun tenite permesse pe' cagnà 'e deritte 'e l'utente ncopp'a l'ati wiki.",
+       "userrights-nodatabase": "'O database $1 nun esiste o nun è nu database lucale.",
+       "userrights-nologin": "Avite 'a [[Special:UserLogin|trasì]] comme ammenistratore si vulite assegnà 'e deritte 'e l'utente.",
+       "userrights-notallowed": "Nun tenite 'e permesse pe' jognere o luvà 'e permesse utente.",
+       "userrights-changeable-col": "Gruppe ca putite cagnà",
+       "userrights-unchangeable-col": "Gruppe ca nun putite cagnà",
+       "userrights-conflict": "Conflitto 'e cagnamiento 'e deritte utente! Cuntrullate e cunfermate 'e cagnamiente vuoste.",
+       "userrights-removed-self": "Avete rimosso buono 'e deritte vuoste. Picciò nun putite trasì cchiù dint'a sta paggena.",
+       "group": "Gruppo:",
+       "group-user": "Utente",
+       "group-autoconfirmed": "Utente autocunfermate",
+       "group-bot": "Bot",
+       "group-sysop": "Ammenistrature",
+       "group-bureaucrat": "Burocrate",
+       "group-suppress": "Oversight",
+       "group-all": "(tutte)",
+       "group-user-member": "{{GENDER:$1|utente}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|utente autocunfermato|utente autocunfermata|utente autocunfermato/a}}",
+       "group-bot-member": "{{GENDER:$1|bot}}",
+       "group-sysop-member": "{{GENDER:$1|ammenistratore|ammenistratrice|ammenistratore/trice}}",
+       "group-bureaucrat-member": "{{GENDER:$1|burocrate}}",
+       "group-suppress-member": "{{GENDER:$1|oversight}}",
+       "grouppage-user": "{{ns:project}}:Utente",
+       "grouppage-autoconfirmed": "{{ns:project}}:Utente autocunfermate",
+       "grouppage-bot": "{{ns:project}}:Bot",
+       "grouppage-sysop": "{{ns:project}}:Ammenistrature",
+       "grouppage-bureaucrat": "{{ns:project}}:Burocrate",
+       "grouppage-suppress": "{{ns:project}}:Oversight",
+       "right-read": "Liegge paggene",
+       "right-edit": "Cagna paggene",
+       "right-createpage": "Crìa paggene (ca nun songo paggene 'e chiacchiera)",
+       "right-createtalk": "Crìa chiacchiere 'e paggena",
+       "right-createaccount": "Crìa utenze nove",
+       "right-minoredit": "Nzigna 'e cagnamiente comme minure",
+       "right-move": "Muove 'e paggene",
+       "right-move-subpages": "Muove 'e paggene nzieme ê sottopaggene suje",
+       "right-move-rootuserpages": "Muove 'e paggene princepale d'utente",
+       "right-move-categorypages": "Muove 'e categurìe",
+       "right-movefile": "Muove 'e file",
+       "right-suppressredirect": "Nun crià 'e redirect automateco quanno se muoveno 'e paggene",
+       "right-upload": "Carreca file",
+       "right-reupload": "Sovrascrive nu file ch'esiste",
+       "right-reupload-own": "Sovrascrive nu file esistente carrecat'a l'utente stesso",
+       "right-reupload-shared": "Sovrascrive lucalmente file prisente dint'a l'archivio spartuto",
+       "right-upload_by_url": "Carreca nu file 'a n'indirizzo URL",
+       "right-purge": "Pulezza 'a cache d' 'o sito senza cunferma",
+       "right-autoconfirmed": "Nun suggetto a 'o lemmeto d'aziune 'a l'IP",
+       "right-bot": "S'avesse 'e trattà comm'a nu prucesso automateco",
+       "right-nominornewtalk": "Fa ch' 'e cagnamiente minore a 'e paggene 'e chiacchiera nun facciano scattà l'avviso 'e mmasciata nnova",
+       "right-apihighlimits": "Usa límmete cchiù aute pe l'interrogaziune a ll'API",
+       "right-writeapi": "Usa l'API 'n scrittura",
+       "right-delete": "Scancella paggene",
+       "right-bigdelete": "Scancella paggene ch' 'e cronologgie luonghe",
+       "right-deletelogentry": "Scancella e arripiglia vvoce 'e riggistro specifiche",
+       "right-deleterevision": "Annascunne verziune specifiche d' 'e paggene",
+       "right-deletedhistory": "Vide 'e verziune d' 'a cronologgia scancellate senza 'o testo suoccio a lloro",
+       "right-deletedtext": "Vide 'o testo scancellato e cagnamiente nfra virziune scancellate",
+       "right-browsearchive": "Ascìa dint' 'e paggene scancellate",
+       "right-undelete": "Arripiglia na paggena",
+       "right-suppressrevision": "Vide, annascunne e ripiglia 'e verziune specifiche d' 'e paggene a cocherun'utente",
+       "right-viewsuppressed": "Vide 'e verziune annascunnute a coccherun'utente",
+       "right-suppressionlog": "Vide 'e riggistre private",
+       "right-block": "Blocca 'e cagnamiente 'a parte 'e l'at'utente",
+       "right-blockemail": "Blocca n'utente a mannà e-mail",
+       "right-hideuser": "Blocca n'utente e fallo sparì 'a 'o pubbreco",
+       "right-ipblock-exempt": "Ignora 'e blocche 'e l'IP, 'e blocche automatece e li blocche 'e range 'e l'IP",
+       "right-proxyunbannable": "Passa 'e blocche automatiche d' 'e proxy",
+       "right-unblockself": "Sblocca se stesso",
+       "right-protect": "Cagna 'e livelle 'e prutezione 'e cagna paggene prutette ricurzivamente",
+       "right-editprotected": "Cagna 'e paggene prutette cu \"{{int:protect-level-sysop}}\"",
+       "right-editsemiprotected": "Cagna 'e paggene prutette cu \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editinterface": "Modifeca 'a nterfaccia utente",
+       "right-editusercssjs": "Cagna 'e file CSS e JS e l'at'utente",
+       "right-editusercss": "Cagna 'e file CSS 'e l'at'utente",
+       "right-edituserjs": "Cagna 'e file JS e l'at'utente",
+       "right-editmyusercss": "Cagna 'e proprie file CSS",
+       "right-editmyuserjs": "Cagna 'e proprie file JavaScript",
+       "right-viewmywatchlist": "Vide l'alenco 'e cuntrollo proprio",
+       "right-editmywatchlist": "Cagna l'alenco 'e cuntrollo proprio. Vedete ca cocch'azione putesse jògnere ancora paggene senza stu deritto.",
+       "right-viewmyprivateinfo": "Vide 'e proprie date private (e.g. e-mail, nomme overo)",
+       "right-editmyprivateinfo": "Cagna 'e date perzunale proprie (p'esempio: e-mail, nomme overo)",
+       "right-editmyoptions": "Cagna 'e preferenze proprie",
+       "right-rollback": "Annulla ampresso 'e cagnamiente 'e ll'urdem'utente c'avesse cagnato na paggena particolare",
+       "right-markbotedits": "Nzégna 'e cagnamiente suggette a rollback comme affettuate 'a nu bot",
+       "right-noratelimit": "Nun suggetto a lemmeto d'aziune",
+       "right-import": "Carreca paggene 'a n'ati wiki",
+       "right-importupload": "Carreca paggene 'a n'upload 'e file",
+       "right-patrol": "Nzegna 'e cagnamiente 'e l'ati utente comme cuntrullate",
+       "right-autopatrol": "Nzegna automatecamente 'e cagnamiente proprie comme cuntrullate",
+       "right-patrolmarks": "Vide ll'urdeme cagnamiente int' 'a funzione 'e cuntrollo",
+       "right-unwatchedpages": "Vide n'alenco 'e pagene nun cuntrullate",
+       "right-mergehistory": "Aunisce 'a cronologgia d' 'e paggene",
+       "right-userrights": "Cagna 'e deritte 'e ll'utente",
+       "right-userrights-interwiki": "Cagna 'e deritte 'e ll'utente int'a l'ati wiki",
+       "right-siteadmin": "Blocca e sblocca 'o database",
+       "right-override-export-depth": "Esporta 'e paggene azzeccanno 'e paggene cullegate nfin'a na profondità 'e 5",
+       "right-sendemail": "Manna na mail a ll'at'utente",
+       "right-passwordreset": "Vide 'e mmasciate 'e rimpustazione d' 'a password",
+       "newuserlogpage": "Riggistro 'e nuove utente",
+       "newuserlogpagetext": "Chest'è nu riggistro 'e criazione d'utenze.",
+       "rightslog": "Deritte 'e ll'utente",
+       "rightslogtext": "Ccà abbascio sta nu riggistro d' 'e cagnamiente a 'e deritte 'e ll'utente",
+       "action-read": "lieggere sta paggena",
        "action-edit": "càgna chesta paggena",
+       "action-createpage": "crìa paggene",
+       "action-createtalk": "crìa chiacchiere 'e paggena",
+       "action-createaccount": "crìa stu cunto utente",
+       "action-history": "vide 'a cronologgia 'e sta paggena",
+       "action-minoredit": "nzegnà stu cagnamiento comme minore",
+       "action-move": "Spusta chista paggena",
+       "action-move-subpages": "muovere sta paggena, e le sottopaggene relative",
+       "action-move-rootuserpages": "muove 'e paggene princepale d'utente",
+       "action-move-categorypages": "muove 'e categurìe",
+       "action-movefile": "muove stu file",
+       "action-upload": "carreca stu file",
+       "action-reupload": "sovrascrive stu file esistente",
+       "action-reupload-shared": "sovrascrive stu file prisente dint'a ll'archivio condiviso",
+       "action-upload_by_url": "carreca stu file 'a n'indirizzo URL",
+       "action-writeapi": "usa l'API 'n scrittura",
+       "action-delete": "scancèlla chista paggena",
+       "action-deleterevision": "scancellà sta verziona",
+       "action-deletedhistory": "vide 'a cronologgia scancellata 'e sta paggena",
+       "action-browsearchive": "ascìa dint' 'e paggene scancellate",
+       "action-undelete": "arripiglia chista paggena",
+       "action-suppressrevision": "rivedé e arripiglià 'e cagnamiente annascunnute",
+       "action-suppressionlog": "vide stu riggistro privato",
+       "action-block": "blocca 'e cagnamiente 'a parte 'e st'utente",
+       "action-protect": "cagna 'e livelle 'e prutezione pe' sta paggena",
+       "action-rollback": "annulla ampresso 'e cagnamiente 'e ll'urdem'utente c'avesse cagnato na paggena particolare",
+       "action-import": "carreca paggene 'a n'ata wiki",
+       "action-importupload": "carreca paggene 'a n'upload 'e file",
+       "action-patrol": "nzegna 'e cagnamiente 'e l'ati utente comme cuntrullate",
+       "action-autopatrol": "nzignà 'e proprie cagnamiente comme cuntrullate",
+       "action-unwatchedpages": "vide l'alenco 'e pagene nun cuntrullate",
+       "action-mergehistory": "aunisce 'a cronologgia 'e sta paggena",
+       "action-userrights": "cagna 'e deritte 'e ll'utente",
+       "action-userrights-interwiki": "cagna 'e deritte 'e ll'utente int'a l'ati wiki",
+       "action-siteadmin": "blocca o sblocca 'o database",
+       "action-sendemail": "manna e-mail",
+       "action-editmywatchlist": "cagna l'alenco 'e cuntrolo 'o tuojo",
+       "action-viewmywatchlist": "vide l'alenco 'e cuntrollo proprio",
+       "action-viewmyprivateinfo": "vide 'e date perzunale",
+       "action-editmyprivateinfo": "cagnà 'e proprie date perzunale",
+       "nchanges": "$1 {{PLURAL:$1|cagnamiento|cagnamiente}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|'a ll'urdema visita}}",
+       "enhancedrc-history": "cronologgia",
        "recentchanges": "Urdeme nove",
        "recentchanges-legend": "Opzione urdeme cagnamiénte",
-       "recentchanges-summary": "Ncoppa chesta paggena song' appresentate ll'urdeme cagnamiente fatto ê cuntenute d\"o sito.",
+       "recentchanges-summary": "Ncoppa chesta paggena song' appresentate ll'urdeme cagnamiente fatte ê cuntenute d\"o sito.",
+       "recentchanges-noresult": "Nisciuno cagnamiento dint'o periodo dato ca soddisfà sti criterie.",
+       "recentchanges-feed-description": "Ncoppa chistu feed song' appresentate ll'urdeme cagnamiente fatte ê cuntenute d\"o sito.",
        "recentchanges-label-newpage": "Chista modifica ha criato 'na nova paggena",
        "recentchanges-label-minor": "Chisto è nu cagnamiénto piccerillo",
+       "recentchanges-label-bot": "Cagnamiento affettuato 'a nu bot",
        "recentchanges-label-unpatrolled": "Chista modifica nun è stata 'ncora verificata",
+       "recentchanges-label-plusminus": "'A grannezza d' 'a paggena s'è cagnata pe' bbia 'e stu nummero 'e bytes",
+       "recentchanges-legend-heading": "'''Liggenda:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide [[Special:NewPages|'e paggene nove]])",
+       "rcnotefrom": "Ccà abbascio {{PLURAL:$5|è alencato 'o cagnamiento appurtato|song' alincate 'e cagnamiente appurtate}} 'a <strong>$3, $4</strong> (mmustate nfin'a <strong>$1</strong>).",
        "rclistfrom": "Faje vedé 'e cagnamiénte fatte a partì 'a $3 $2",
        "rcshowhideminor": "$1 'e cagnamiénte piccerille",
+       "rcshowhideminor-show": "Faje vedé",
+       "rcshowhideminor-hide": "Annascunne",
        "rcshowhidebots": "$1 'e bot",
+       "rcshowhidebots-show": "Faje vedé",
+       "rcshowhidebots-hide": "Annascunne",
        "rcshowhideliu": "$1 ll'utente reggìstrate",
+       "rcshowhideliu-show": "Faje vedé",
+       "rcshowhideliu-hide": "Annascunne",
        "rcshowhideanons": "$1 ll'utente anonime",
-       "rcshowhidemine": "$1 'e ffatiche mmee",
+       "rcshowhideanons-show": "Faje vedé",
+       "rcshowhideanons-hide": "Annascunne",
+       "rcshowhidepatr": "$1 cagnamiente cuntrullate",
+       "rcshowhidepatr-show": "Faje vedé",
+       "rcshowhidepatr-hide": "Annascunne",
+       "rcshowhidemine": "$1 'e ffatiche mieie",
+       "rcshowhidemine-show": "Faje vedé",
+       "rcshowhidemine-hide": "Annascunne",
        "rclinks": "Faje vedé ll'urdeme $1 cagnamiente dint' ll'urdeme $2 juorne<br />$3",
        "diff": "diff",
        "hist": "cron",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
+       "number_of_watching_users_pageview": "[osservata 'a {{PLURAL:$1|n'utente|$1 utente}}]",
+       "rc_categories": "Lemmeta a 'e categurìe (spartute 'a \"|\")",
        "rc_categories_any": "Qualònca",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} aropp'ô cagnamiento",
+       "newsectionsummary": "/* $1 */ sezziona nnova",
        "rc-enhanced-expand": "Fa vede dettaglie",
        "rc-enhanced-hide": "Annascunne dettaglie",
+       "rc-old-title": "origginariamente criata comme \"$1\"",
        "recentchangeslinked": "Cagnamiénte cullegate",
        "recentchangeslinked-feed": "Cagnamiénte cullegate",
        "recentchangeslinked-toolbox": "Cagnamiénte cullegate",
        "recentchangeslinked-title": "Cagnamiénte cullegate a \"$1\"",
+       "recentchangeslinked-summary": "Chest'è n'alenco d' 'e cagnamiente fatte mò a 'e paggene cullegate 'a chilla specificata (o pe' cuntenute dint'a na categurìa specificata). 'E paggene cuntenute dint' 'o proprio elenco 'e l'[[Special:Watchlist|Paggene cuntrullate]] songo mmustate 'n '''grassetto'''.",
        "recentchangeslinked-page": "Nomme dda paggena",
+       "recentchangeslinked-to": "Mmusta sulamente 'e cagnamiente a 'e paggene cullegate a chilla specificata",
        "upload": "Careca file",
+       "uploadbtn": "Carreca file",
+       "reuploaddesc": "Torna a 'o modulo pe ffà 'a carreca",
+       "upload-tryagain": "Manna 'a descrizione d' 'o file cagnato",
+       "uploadnologin": "Acciesso nun affettuato",
+       "uploadnologintext": "Pe' carrecà 'o file ce vulesse $1.",
+       "upload_directory_missing": "'A cartella 'e carreche ($1) nun esiste e nun se può crià 'a 'o server web.",
+       "upload_directory_read_only": "'O server web nun può scrivere dint' 'a cartella 'e carreca ($1).",
+       "uploaderror": "Errore a carrecà",
+       "upload-recreate-warning": "'Attenziò'': nu file cu stu nomme è stato scancellato o spustato.'''\n'O riggistro d' 'e scancellamiente e d' 'e spustamiente 'e sta paggena è stato scritto ccà abbascio pe' ffà comodo:",
+       "uploadtext": "Ausà 'o modulo ccà sotto pe' carrecà file nuove. Pe' vedé o ascià 'e file carrecate già, vide 'o [[Special:FileList|riggistro 'e file carrecate]]. Càrreche 'e file e virzione nove d' 'e file songo riggistrate dint' 'o [[Special:Log/upload|riggistro d'upload]], 'e scancellamiente dint' 'o [[Special:Log/delete|riggistro ccà]].\n\nPe' nzertà nu file dint'a na paggena, allora facite nu cullegamento 'e stu tipo:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' p'ausà a verziona cumpleta d' 'o file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|testo alternativo]]</nowiki></code>''' p'ausà na verziona luonga 200 pixel nzertata dint'a na cascia, allineata a manca e cu nu 'testo alternativo' comme didascalia\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' pe' crià nu cullegamento diretto a 'o file senza 'o fà vedé",
+       "upload-permitted": "Tipe 'e file permesse: $1.",
+       "upload-preferred": "Tipe 'e file cunzigliate: $1.",
+       "upload-prohibited": "Tipe 'e file nun permesse: $1.",
+       "uploadlogpage": "Riggistro 'e carreche",
+       "uploadlogpagetext": "Ccà abbascio song'alencate l'urdeme file carrecate.\nCuntrullate 'a [[Special:NewFiles|gallaria d' 'e file nuove]] pe' ve ffà na guardata cchiù visuale 'e tutto.",
+       "filename": "Nomme d' 'o file",
        "filedesc": "Énnece",
+       "fileuploadsummary": "Dettaglie:",
+       "filereuploadsummary": "Cagnamiente a 'o file:",
+       "filestatus": "Stato d' 'o copyright:",
+       "filesource": "Fonte:",
+       "ignorewarning": "Lassa perde l'avviso e sarva 'o file pure",
+       "ignorewarnings": "Lasa perde ogne mmasciata d'attenzione",
+       "minlength1": "'E nomme d' 'e file hann'avé minimo na lettera.",
+       "illegalfilename": "'O nomme \"$1\" cuntene carattere nun permesse dint' 'e titule 'e paggena.\nPe' piacere date n'atu nomme a 'o file e pruvate a 'o carrecà n'ata vota.",
+       "filename-toolong": "'E nomme d' 'e file nun ponno superà 'e 240 byte.",
+       "badfilename": "'O nomme d' 'o file è stato cagnato a \"$1\".",
+       "filetype-mime-mismatch": "'A stensione d' 'o file \".$1\" nun currisponne a 'o tipo MIME scummigliato a 'o file ($2).",
+       "filetype-badmime": "Nun è permesso carrecà file 'e tipo MIME \"$1\".",
+       "filetype-bad-ie-mime": "Nun se ponno carrecà 'e file pecché Internet Explorer 'o scummigliasse comme \"$1\", che è nu tipo 'e file nun permesso e potenzialmente pericoloso.",
+       "filetype-unwanted-type": "Carrecà file 'e tipo '''\".$1\"''' è scunzigliato. {{PLURAL:$3|'O tipo 'e file cunzigliato è|'E tipe 'e file cunzigliate songo}} $2.",
+       "filetype-banned-type": "'''\".$1\"''' {{PLURAL:$4|nun è nu tipo 'e file permesso|nun songo tipe 'e file permesse}}. {{PLURAL:$3|'O tipo 'e file permesso è|'E tipe 'e file permesse songo}} $2.",
+       "filetype-missing": "'O file nun ave stensione (p'esempio \".jpg\").",
+       "empty-file": "'O file ch'avite mannato è abbacante.",
+       "file-too-large": "'O file ch'avite mannato è troppo gruosso.",
+       "filename-tooshort": "'O nomme d' 'o file è troppo curto.",
+       "filetype-banned": "Stu tipo 'e file nun è permesso.",
+       "verification-error": "Stu file nun ha passat' 'o cuntrollo.",
+       "hookaborted": "'O cagnamiento c'avite pruvato 'e fà è stato spezzato 'a na stensione.",
+       "illegal-filename": "'O nomme d' 'o file nun è permesso.",
+       "overwrite": "Sovrascrivere nu file ch'esiste già nun è permesso.",
+       "unknown-error": "È capitato n'errore scanusciuto.",
+       "tmp-create-error": "Nun se può crià nu file temporaneo.",
+       "tmp-write-error": "Errore a scrivere nu file temporaneo.",
+       "large-file": "S'arraccumanna 'e nun appassà 'e diminsione 'e $1 p'ogne file; stu file è gruosso $2.",
+       "largefileserver": "Stu file appassa 'e dimensiune permesse 'a la configurazione d' 'o server",
+       "emptyfile": "'O file carrecato mò mò pare abbacante. Può darse ch'è stato n'errore int' 'o nomme d' 'o file. Cuntrullate ca vulite overamente carrecà stu file.",
+       "windows-nonascii-filename": "Chista wiki nun supporta nomme d' 'e file cu carattere spiciale",
+       "fileexists": "Nu file cu stu nomme esiste già.\nPe' piacere cuntrullate primma <strong>[[:$1]]</strong> si nun site sicure ca 'o vulite cagnà.\n[[$1|thumb]]",
+       "filepageexists": "'A paggena 'e descrizione 'e stu file è stata già criata a l'indirizzo <strong>[[:$1]]</strong>, pùre si nun esiste ancora nu file cu stu nomme. 'A descrizione 'e l'oggetto nzertàta 'n fase 'e carreca nun cumparerrà ncopp' 'a paggena 'e descrizione. Pe' ffà l'oggetto cumparì ncopp' 'a paggena 'e descrizione, l'avisseve 'a cagnà manualmente.\n[[$1|thumb]]",
+       "fileexists-extension": "Nu file esiste cu nu nomme suoccio a chesto: [[$2|thumb]]\n* Nomme d' 'o file carrecato: <strong>[[:$1]]</strong>\n* Nomme d' 'o file esistente: <strong>[[:$2]]</strong>\nPuò darse ca vulite scegliere nu nomme cchiù specifico?.",
+       "fileexists-thumbnail-yes": "Pare ch' 'o file carrecato fosse na miniatura ''(thumbnail)''. [[$1|thumb]]\nCuntrullate, pe' cunfronto, 'o file <strong>[[:$1]]</strong>.\nSi se trattasse d' 'a stessa immaggene, ch' 'e diminsiune origginale, nun è necessario carrecà ati miniature.",
+       "file-thumbnail-no": "Stu filename accummencia pe' <strong>$1</strong>.\nPare ca ce sta n'immaggene piccerilla <em>(thumbnail)</em>.\nSi tiene st'immaggene 'n risoluzione origginale, pe' piacere carrecatela. Si nò, vedite 'e cagnà 'o nomme d' 'o file.",
+       "fileexists-forbidden": "Nu file cu stu nomme esiste già, e nun se può sovrascrivere.<br/>\nPe' piacere turnat'arreto e cagnàte 'o nomme p' 'o turnà a carrecà.\n[[File:$1|thumb|center|$1]]",
+       "fileexists-shared-forbidden": "Nu file cu stu nomme esiste già dint'a l'archivio 'e risorse multimediale spartute. Si vulite carrecà 'o file ancora, turnat'arreto e cagnate 'o nomme p' 'o turnà a carrecà.\n[[File:$1|thumb|center|$1]]",
+       "file-exists-duplicate": "Stu file è nu duplicato {{PLURAL:$1|d' 'o|d' 'e}} file ccà abbascio:",
+       "file-deleted-duplicate": "Nu file identico a chesto ([[:$1]]) è stato scancellato prima. Cuntrullate 'a cronologgia d' 'e scancellamiente apprimma d' 'o carrecà n'ata vota.",
+       "file-deleted-duplicate-notitle": "Nu file eguale a stu file è stato previamente scancellato, e 'o titolo è stato sbaccantato. Chierete a coccheruno ca tenesse 'a posibbelità 'e vedé file luvate e sbaccantate pe' sapé nquale situazione ve truvate apprimma d' 'o ffà carrecà n'ata vota.",
+       "uploadwarning": "Avviso 'e carreca",
+       "uploadwarning-text": "Pe' piacere cagnate ccà abbascio 'a descrizione d' 'o file 'e pruvate n'ata vota.",
+       "savefile": "Sarva file",
+       "uploaddisabled": "'E càrreche so' state stutate.",
+       "copyuploaddisabled": "'E càrreche pe' bbia 'e l'URL so' state stutate.",
+       "uploaddisabledtext": "'E carreche 'e file so' state stutate.",
+       "php-uploaddisabledtext": "'E càrreche 'e file pe' bbia d' 'o PHP so' state stutate. Cuntrullate 'a configurazione d' 'o file_uploads.",
+       "uploadscripted": "Stu file cuntene codece HTML o script, ca se putesse nterpretà erroneamente 'a nu navigatóre web.",
+       "uploadscriptednamespace": "Stu file SVG cuntene nu namespace '$1' nun permesso.",
+       "uploadinvalidxml": "'O códece XML d' 'o file carrecato nun se può passà.",
+       "uploadvirus": "Stu file cuntene nu virus! Dettaglie: $1",
+       "uploadjava": "Stu file è nu file ZIP ca cuntene nu file .class Java.\nCarrecà 'e file Java nun è permesso, pecché ponno appassà 'e restriziune 'e sicurezza.",
+       "upload-source": "File d'origgine",
+       "sourcefilename": "Nomme d' 'o file d'origgine:",
+       "sourceurl": "URL d'origgine:",
+       "destfilename": "Nomme 'e file 'e destinazione:",
+       "upload-maxfilesize": "Diminsione massima d' 'o file: $1",
+       "upload-description": "Descrizione d' 'o file",
+       "upload-options": "Opziune 'e carreca",
+       "watchthisupload": "Tiene d'uocchio chistu file",
+       "filewasdeleted": "Nu file ca se chiamave cumm'a chillo c'avete primma carrecato e pò è stato scancellato.\nVedite 'e cuntrullà 'o $1 apprimma ca cuntinuate c' 'a carreca.",
+       "filename-bad-prefix": "'O nomme d' 'o file ca state a carrecà accummencia pe' ''\"$1\"''', ca nurmalmente è 'o nomme c'assegnasse na machina fotografeca automatecamente ed è nu nomme nun descrittivo.\nPe' piacere scigliete n'atu nomme ca fosse cchiù descrittivo.",
+       "upload-success-subj": "Carreca ngarrata",
+       "upload-success-msg": "'A carreca tuja d' 'o [$2] è asciuta bona. Mò è a disposizione ccà: [[:{{ns:file}}:$1]]",
+       "upload-failure-subj": "Probblema c' 'a carreca",
+       "upload-failure-msg": "Ce steva nu probblema c' 'a carreca 'a [$2]:\n\n$1",
+       "upload-warning-subj": "Avviso 'e carreca",
+       "upload-warning-msg": "Ce steva nu probblema c' 'a carreca 'a [$2]. Putite turnà arreto a 'o [[Special:Upload/stash/$1|module 'e carreche]] pe pruvà d'aggiustà stu prubblema.",
+       "upload-proto-error": "Prutucollo sbagliato",
+       "upload-proto-error-text": "'E carreche remote hann'abbesuogno 'e l'URL c'accummencieno c' 'a parola <code>http://</code> o <code>ftp://</code>.",
+       "upload-file-error": "Errore 'nterno",
+       "upload-file-error-text": "S'è verificato n'errore interno quanno avete pruvat'a crià nu file temporaneo ncopp' 'o server.\nPe' piacere cuntattate n'[[Special:ListUsers/sysop|ammenistratore]].",
+       "upload-misc-error": "Errore 'e carreche scanusciute",
+       "upload-misc-error-text": "N'errore scanusciuto s'è verificato quanno se steva facenno 'a carreca.\nPe' piacere cuntrullate ca l'URL è valida e accessibbele e pruvate n'ata vota.\nSi 'o probblema è presente ancòra, cuntattate n'[[Special:ListUsers/sysop|ammenistratore]].",
+       "upload-too-many-redirects": "L'URL teneva troppe redirect",
+       "upload-http-error": "N'errore HTTP è succiesso: $1",
+       "upload-copy-upload-invalid-domain": "Nun è permessa 'a carreca 'e copie 'a chistu dumminio.",
+       "backend-fail-stream": "Nun se può mannà 'o file \"$1\".",
+       "backend-fail-backup": "Nun se può ffà 'o backup d' 'o file \"$1\".",
+       "backend-fail-notexists": "'O file $1 nun esiste.",
+       "backend-fail-hashes": "Nun se ponno attené 'e hash d' 'o file pe' ne ffà 'o cunfronto.",
+       "backend-fail-notsame": "Esiste già nu file nun eguale a $1 .",
+       "backend-fail-invalidpath": "$1 nun è un nu posto d'archiviazione bbuono.",
+       "backend-fail-delete": "Nun se può scancellà 'o file \"$1\"",
+       "backend-fail-describe": "Nun se ponno cagnà 'e metadate d' 'o file \"$1\".",
+       "backend-fail-alreadyexists": "'O file $1 esiste già.",
+       "backend-fail-store": "Nun se può astipà 'o file \"$1\" dint'a \"$2\".",
+       "backend-fail-copy": "Nun se può copiare 'o file \"$1\" dint'a \"$2\".",
+       "backend-fail-move": "Nun se può spustà 'o file \"$1\" into \"$2\".",
+       "backend-fail-opentemp": "Nun se può arapì nu file temporaneo.",
+       "backend-fail-writetemp": "Nun se può scrivere nu file temporaneo.",
+       "backend-fail-closetemp": "Nun se può nchiure nu file temporaneo.",
+       "backend-fail-read": "Nun se può lieggere 'o file \"$1\".",
+       "backend-fail-create": "Nun se può scrivere 'o file \"$1\"",
+       "backend-fail-maxsize": "Nun se può scrivere 'o file \"$1\" pecché chist'è cchiù gruosso 'e {{PLURAL:$2|nu byte|$2 byte}}",
+       "backend-fail-readonly": "L'archivio 'e rezza \"$1\" è mò mò 'n sola-lettura. 'O mutivo è: \"$2\"",
+       "backend-fail-synced": "'O file \"$1\" è int' 'a nu stato ncunzistente dint'a l'archivie nterne.",
+       "backend-fail-connect": "Nun se può cunnettà â memoria 'e rezza \"$1\".",
+       "backend-fail-internal": "N'errore scanusciuto s'è verificato int'a l'archivie 'e rezza \"$1\".",
+       "backend-fail-contenttype": "Nun se ponno determinà 'e tipe 'e cuntenute d' 'o file 'a riggistrà dint'a \"$1\".",
+       "backend-fail-batchsize": "L'archivio 'e rezza prugrammaje na rezza 'e $1 {{PLURAL:$1|prucesso|prucesse}} ncopp' 'o file; 'o lémmeto è $2 {{PLURAL:$2|prucesso|prucesse}}.",
+       "backend-fail-usable": "Nun se può lieggere o scrivere 'o file \"$1\" pecché mancano 'e permesse sufficiente o nun esiste 'a cartella/cuntenitore.",
+       "filejournal-fail-dbconnect": "Nun se può fà connessione a l'archivio d' 'o database pe' puté astipà archivie 'n rezza \"$1\".",
+       "filejournal-fail-dbquery": "Nun se può agghiurnà l'archivio d' 'o database pe' puté astipà l'archivie 'n rezza \"$1\".",
+       "lockmanager-notlocked": "Nun se può sbloccà \"$1\"; nun è bluccato.",
+       "lockmanager-fail-closelock": "Nun se può nchiure 'o file 'e blocco pe' \"$1\".",
+       "lockmanager-fail-deletelock": "Nun se può scancellà 'o file 'e blocco pe' \"$1\".",
+       "lockmanager-fail-acquirelock": "Nun se può piglià 'o blocco pe' \"$1\".",
+       "lockmanager-fail-openlock": "Nun se può arapì 'o file 'e blocco pe' \"$1\".",
+       "lockmanager-fail-releaselock": "Nun se può lanzà 'o blocco pe' \"$1\".",
+       "lockmanager-fail-db-bucket": "Nun se ponno cuntattà 'e database 'e blocco necessarie int'a $1.",
+       "lockmanager-fail-db-release": "Nun se ponno lanzà 'e blocche ncopp' 'o database $1.",
+       "lockmanager-fail-svr-acquire": "Nun se ponno piglià 'e blocche ncopp' 'o server $1.",
+       "lockmanager-fail-svr-release": "Nun se ponno lanzà blocche ncopp' 'o server $1.",
+       "zip-file-open-error": "S'è truvato n'errore quanno se steva arapenno nu file pe' ne fà cuntrolle ZIP.",
+       "zip-wrong-format": "'O file specificato nun era nu file ZIP.",
+       "zip-bad": "'O file è corrotto o pure nun è nu file ZIP ca se putesse lieggere.\nNun se può cuntrullà opportunamente pe' sicurezza.",
+       "zip-unsupported": "'O file è nu file ZIP c'ausa servizie ZIP ca nun songo suppurtate 'a MediaWiki.\nNun se può cuntrullà pe' sicurezza.",
+       "uploadstash": "Carreca stash",
+       "uploadstash-summary": "Sta paggena dà l'accesso a 'e file ca songo carrecate o ca stanno pe' se carrecà, ma nun songo pubbrecat'ancora ncopp'a sta wiki. Sti file nun songo visibbele a nisciuno, sulamente a chill'utente ca l'ha carrecato.",
+       "uploadstash-clear": "Pulezza 'e file annascunnute",
+       "uploadstash-nofiles": "Nun tenite file annascunnute.",
+       "uploadstash-badtoken": "L'esecuzione 'e sta azione nun ha avuto successo, forse pecché 'e credenziale 'e cagnamiento so' mmaturate. Prova n'ata vota.",
+       "uploadstash-errclear": "'A pulezzia d' 'e file nun ha avuto successo.",
+       "uploadstash-refresh": "Agghiuorna l'alenco d' 'e file",
+       "invalid-chunk-offset": "Distanza d' 'a parte nun valida",
+       "img-auth-accessdenied": "Acciesso negato",
+       "img-auth-nopathinfo": "PATH_INFO mancante.\n'O server nun è mpustato pe' passà sta nfurmazione.\nPuò darse ca, essenno basato ncopp'a CGI, nun putesse suppurtà img_auth.\nVide https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
+       "img-auth-notindir": "'O percurzo addimannato nun se trova dint' 'e cartelle d'upload configurate.",
+       "img-auth-badtitle": "Nun se può fravecà nu titolo valido 'a \"$1\".",
+       "img-auth-nologinnWL": "Nun site trasuto e \"$1\" nun è dint'a lista janca.",
+       "img-auth-nofile": "File \"$1\" nun esiste.",
+       "img-auth-isdir": "State pruvanno a trasì int' 'a cartella \"$1\".\nSulamente se può trasì a 'e file.",
+       "img-auth-streaming": "\"$1\" 'n streaming.",
+       "img-auth-public": "'A funziona 'e img_auth.php è chella ddà 'e file d'output 'a na wiki privata.\nSta wiki è configurata comm'a na wiki pubbleca.\nPe na sicurezza ottima, img_auth.php è stutato.",
+       "img-auth-noread": "L'utente nun tene acciesso pe lieggere \"$1\".",
+       "http-invalid-url": "URL nun valido: $1",
+       "http-invalid-scheme": "L'URL c' 'o prefisso \"$1\" nun so' suppurtate.",
+       "http-request-error": "Richieste HTTP fallite pe' n'errore scanusciuto.",
+       "http-read-error": "Errore 'e lettura HTTP.",
+       "http-timed-out": "Richieste HTTP fore tiempo.",
+       "http-curl-error": "Errore analizzanno l'URL: $1",
+       "http-bad-status": "C'è stato nu probblema pe' tramente ca se faceva 'a richiesta HTTP: $1, $2",
+       "upload-curl-error6": "Nun se riesce 'arrevà a l'URL",
+       "upload-curl-error6-text": "A l'URL c'avete scritto nun se può arrevà.\nPe' piacere, cuntrullate ca l'URL è curretta e ca 'o sito è appicciato.",
+       "upload-curl-error28": "Fore tiempo p' 'a carreca",
+       "upload-curl-error28-text": "'O sito trica tiempo a risponnere.\nPe piacere, cuntrullate ca 'o sito è appicciato, aspettate nu poco 'e tiempo e pruvate n'ata vota.\nVuje forse vulite aspettà nu poco ca se spiccia 'o traffeco a 'o sito.",
        "license": "Licenze:",
        "license-header": "Licenza",
+       "nolicense": "Nisciuna licienza scigliuta",
        "licenses-edit": "Càgna opzziune 'e licenza",
+       "license-nopreview": "('Anteprimma nun se trova a disposizione)",
+       "upload_source_url": "(nu file 'a n'URL valido e accessibbele pubblecamente)",
+       "upload_source_file": "(nu file d' 'o computer 'o tuojo)",
+       "listfiles-delete": "scancèlla",
+       "listfiles-summary": "Sta paggena speciale fà vedé tuttequante file carrecate.",
+       "listfiles_search_for": "Ascìa 'e media pe' nomme:",
+       "imgfile": "file",
+       "listfiles": "Lista d' 'e file",
+       "listfiles_thumb": "Miniature",
+       "listfiles_date": "Data",
        "listfiles_name": "Nomme",
+       "listfiles_user": "Utente",
+       "listfiles_size": "Dimenzione",
+       "listfiles_description": "Descrizzione",
+       "listfiles_count": "Verziune",
+       "listfiles-show-all": "Nclude 'e verziune viecchie 'e ll'immaggene",
+       "listfiles-latestversion": "Verzione 'e mo",
+       "listfiles-latestversion-yes": "Sì",
+       "listfiles-latestversion-no": "No",
        "file-anchor-link": "Fiùra",
        "filehist": "Cronologgia d\"o file",
-       "filehist-revert": "ripristina",
+       "filehist-help": "Ffà click su nu gruppo data/ora pe' vedé 'o file comme s'apprisentava ind' 'a chillu mumento.",
+       "filehist-deleteall": "scancella tutto",
+       "filehist-deleteone": "scancèlla",
+       "filehist-revert": "arrepiglia",
        "filehist-current": "attuale",
        "filehist-datetime": "Data/Ora",
        "filehist-thumb": "Miniature",
+       "filehist-thumbtext": "Miniatura d' 'a verziona d' 'o $1",
+       "filehist-nothumb": "Nisciuna miniatura",
        "filehist-user": "Utente",
        "filehist-dimensions": "Dimenzione",
+       "filehist-filesize": "Dimenziune d\"o file",
+       "filehist-comment": "Commento",
        "imagelinks": "Jonte ê ffiure",
+       "linkstoimage": "{{PLURAL:$1|Sta paggena cullega|$1 'e sti paggene cullegano}} a stu file:",
+       "linkstoimage-more": "Cchiù 'e $1 {{PLURAL:$1|paggene cullegano|paggene cullegano}} a stu file.<br />\nL'alenco ccà abbascio fà vedé {{PLURAL:$1|'a primma paggena ca cullega|'e primme $1 paggene ca cullegano}} sulamente a stu file.<br />\nNa [[Special:WhatLinksHere/$2|lista completa]] è a disposizione.",
+       "nolinkstoimage": "Nisciuna paggena cullega a stu file.",
+       "morelinkstoimage": "Vide [[Special:WhatLinksHere/$1|cchiù cullegamiente]] a stu file.",
+       "linkstoimage-redirect": "$1 (redirezionamiente d' 'o file) $2",
+       "duplicatesoffile": "{{PLURAL:$1|'O file ccà abbascio è nu duplicato|'E $1 file ccà abbascio songo duplicate}} 'e stu file ([[Special:FileDuplicateSearch/$2|cchiù nfurmaziune]]):",
+       "sharedupload": "Stu file vène 'a $1 e pò essere ausato 'a n'ati pruggette.",
+       "sharedupload-desc-there": "Stu file vène 'a $1 e pò essere ausato pe n'ati pruggette.<br />\nPe' piacere vedite 'a [$2 pàggena 'e descrizione d' 'o file] pe' n'avé cchiù nfurmaziune.",
+       "sharedupload-desc-here": "Stu file vène 'a $1 e pò essere ausato pe n'ati pruggette.<br />\n'A descriziona ncopp' 'a [$2 pàggena 'e descrizione d' 'o file] se può vedé ccà abbascio.",
+       "sharedupload-desc-edit": "Stu file vène 'a $1 e pò essere ausato pe n'ati pruggette.<br />\nPuò darse ca vulite cagnà 'a descrizione d' 'a [$2 paggena 'e descrizione d' 'o file] ccà.",
+       "sharedupload-desc-create": "Stu file vène 'a $1 e pò essere ausato pe n'ati pruggette.<br />\nPuò darse ca vulite cagnà 'a descrizione dint' 'a [$2 paggena 'e descrizione d' 'o file] ccà.",
+       "filepage-nofile": "Nisciuno file cu stu nomme esiste.",
+       "filepage-nofile-link": "Nisciuno file cu stu nomme esiste, ma 'o putite [$1 carrecà].",
+       "uploadnewversion-linktext": "Càrreca na verziona nova 'e stu file",
+       "shared-repo-from": "'a $1",
+       "shared-repo": "n'archivio cundiviso",
+       "upload-disallowed-here": "Nun se può sovrascrivere stu file.",
+       "filerevert": "Arrepiglia $1",
+       "filerevert-legend": "Arrepiglia 'o file",
+       "filerevert-intro": "State arrepiglianno 'o file '''[[Media:$1|$1]]''' int' 'a [$4 verzione d' 'o $3, $2].",
+       "filerevert-comment": "Mutive:",
+       "filerevert-defaultcomment": "Arripigliata 'a verzione d' 'o $2, $1",
+       "filerevert-submit": "Arrepiglia",
+       "filerevert-success": "'''[[Media:$1|$1]]''' è stat'arripigliato â verziona [$4 d' 'e $3 d' 'o $2].",
+       "filerevert-badversion": "Nun ce sta na virziona lucale 'e stu file cu l'orario addimannato.",
+       "filedelete": "Scancella $1",
+       "filedelete-legend": "Scancella 'o file",
+       "filedelete-intro": "State pe' scancellà 'o file '''[[Media:$1|$1]]''' cu tutta 'a cronologgia 'e chisto.",
+       "filedelete-intro-old": "State a scancellà 'a verziona 'e '''[[Media:$1|$1]]''' d' 'o [$4 $3, $2].",
+       "filedelete-comment": "Mutivo:",
+       "filedelete-submit": "Scancèlla",
+       "filedelete-success": "'O file '''$1''' è stato scancellato.",
+       "filedelete-success-old": "'A verziona d' 'o file '''[[Media:$1|$1]]''' d' 'o  $3, $2  è stata scancellata.",
+       "filedelete-nofile": "Nun esiste nu file '''$1'''.",
+       "filedelete-nofile-old": "Nun ce sta na verziona archiviata 'e '''$1''' cu l'attrebbute specificate.",
+       "filedelete-otherreason": "Ati/cchiù ragiune:",
+       "filedelete-reason-otherlist": "Ati ragiune",
+       "filedelete-reason-dropdown": "*Mutive cchiù comune p' 'o scancellà\n** Violazione d' 'o copyright\n** File duplicato",
+       "filedelete-edit-reasonlist": "Càgna 'e mutive pe' fà 'o scancellamiento",
+       "filedelete-maintenance": "'O scancellamiento e arripiglio 'e file s'è stutato p' 'o mumento, pe' tramente ca se fà 'a manutenzione.",
+       "filedelete-maintenance-title": "Nun se può scancellà 'o file",
+       "mimesearch": "Ascià a sicondo 'o MIME",
+       "mimesearch-summary": "Sta paggena permette filtrà 'e file a sicondo 'o tipo 'e MIME.\nNzertate 'a stringa 'e ricerca comm'a nu tipo/sottotipo o tipo/*, p'esempio: <code>image/jpeg</code>.",
+       "mimetype": "Tipo 'e MIME:",
+       "download": "scarreca",
+       "unwatchedpages": "Paggene fore l'alenco 'e cuntrollo",
+       "listredirects": "Liste 'e ridirezionamiente",
+       "listduplicatedfiles": "Lista d' 'e file duplicate",
+       "listduplicatedfiles-summary": "Chist'è n'alenco 'e file, addò 'a verziona cchiù recente 'e nu file è nu duplicato d' 'a verziona cchiù ricente 'e n'atu file. Songhe cunziderate sulamente 'e file lucale.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] ave [[$3|{{PLURAL:$2|nu duplicato|$2 duplicate}}]].",
+       "unusedtemplates": "Template ca nun se song'ausate",
+       "unusedtemplatestext": "Sta paggena alenca tutt' 'e paggene int'a 'o namespace {{ns:template}} ca nun se songo nzertàte dint'a n'ata paggena.\nArricuòrdete 'e cuntrullà l'ati cullegamiente a 'e template apprimm' 'e scancellà.",
+       "unusedtemplateswlh": "ati cullegamiente",
        "randompage": "Na paggena qualsiase",
        "randompage-nopages": "Nun gè song paggene {{PLURAL:$2|dint'ô seguente namespace|dint'ê seguenti namespace}}: $1.",
+       "randomincategory": "Paggena a uocchio dint' 'a categurìa",
+       "randomincategory-invalidcategory": "\"$1\" nun è nu nomme 'e categurìa bbuono.",
+       "randomincategory-nopages": "Non ce stanno pàggene dint' 'a [[:Category:$1]].",
+       "randomincategory-category": "Categurìa:",
+       "randomincategory-legend": "Paggena a uocchio dint' 'a categurìa",
+       "randomredirect": "Redirezionamiento a uocchio",
+       "randomredirect-nopages": "Nun ce stanno redirezionamiente int' 'o namespace \"$1\".",
        "statistics": "Statistiche",
+       "statistics-header-pages": "Statistiche d' 'e paggene",
+       "statistics-header-edits": "Cagna 'e statistiche",
+       "statistics-header-users": "Statistiche 'e l'utente",
+       "statistics-header-hooks": "Ati statistiche",
+       "statistics-articles": "Paggene 'e cuntenute",
+       "statistics-pages": "Paggene",
+       "statistics-pages-desc": "Tutt' 'e paggene dint'a wiki, mettenno 'e chiacchieriate, redirezionamiente, ecc.",
+       "statistics-files": "File carrecate",
+       "statistics-edits": "Cagnamiente d' 'e paggene 'a che {{SITENAME}} s'è accumminciata",
+       "statistics-edits-average": "Cagnamiente medie pe' paggena",
+       "statistics-users": "[[Special:ListUsers|Utente riggistrate]]",
+       "statistics-users-active": "Utente attive",
+       "statistics-users-active-desc": "Utente c'hanno fatto coccosa dint' 'a {{PLURAL:$1|l'urdemo juorno|l'urdeme $1 juorne}}",
+       "pageswithprop": "Paggene cu na prupietà 'e paggena",
+       "pageswithprop-legend": "Paggene cu na prupietà 'e paggena",
+       "pageswithprop-text": "Sta paggena alenca 'e paggene c'ausano na prupietà particolare 'e paggena.",
+       "pageswithprop-prop": "Nomme d' 'a prupietà:",
+       "pageswithprop-submit": "Vàje",
+       "pageswithprop-prophidden-long": "valore d' 'a prupietà d' 'o testo luongo annascunnuto ($1)",
+       "pageswithprop-prophidden-binary": "valore 'e prupietà binaria annascunnuto ($1)",
        "doubleredirects": "Redirect duppie",
+       "doubleredirectstext": "Sta paggena alenca 'e paggene ca se ridirezionano a n'ati paggene.\nOgne riga cuntene nu cullegamente a 'o primmo e a 'o sicondo ridirezionamiento pe' ffà vedé addò arriva 'o sicondo ridirezionamiento, 'o quale è nurmalmente 'a paggena 'e destinaziona \"riale\", addò 'o primmo ridirezionaminento avess'a cullegà.\n'A situazione d' 'e <del>ridireziune scancellate</del> è stat'arricettata.",
+       "double-redirect-fixed-move": "[[$1]] è stato spustato.\nÈ stato automaticamente agghiurnato e ora è nu redirect a [[$2]].",
+       "double-redirect-fixed-maintenance": "Curreggenno automaticamente 'o doppio redirect 'a [[$1]] a [[$2]] pe' tramente ca se fà na fatica 'e manutenzione.",
+       "double-redirect-fixer": "Currettore 'e redirezionamiente",
+       "brokenredirects": "Redirezionamiente scassate",
+       "brokenredirectstext": "'E redirezionamiente ccà abbascio vanno a paggene ca nun esisteno:",
+       "brokenredirects-edit": "càgna",
+       "brokenredirects-delete": "scancèlla",
+       "withoutinterwiki": "Paggene senza cullegamiente interwiki",
+       "withoutinterwiki-summary": "'E paggene ccà abbascio nun songo cullegate a nisciun'ata verzione 'e lengua differente.",
+       "withoutinterwiki-legend": "Prefisse",
+       "withoutinterwiki-submit": "Faje vedé",
+       "fewestrevisions": "Paggene cu meno cagnamiente",
        "nbytes": "$1 {{PLURAL:$1|byte|byte}}",
        "ncategories": "$1 {{PLURAL:$1|categoria|categorie}}",
+       "ninterwikis": "$1 {{PLURAL:$1|interwiki}}",
        "nlinks": "$1 {{PLURAL:$1|cullegamiento|cullegamiente}}",
        "nmembers": "$1 {{PLURAL:$1|elemento|elemente}}",
-       "popularpages": "Paggene cchiù 'speziunate",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|membro|membre}}",
+       "nrevisions": "$1 {{PLURAL:$1|verzione|verziune}}",
+       "nviews": "$1 {{PLURAL:$1|visita|visite}}",
+       "nimagelinks": "Ausate ncopp'a {{PLURAL:$1|na paggena|$1 paggene}}",
+       "ntransclusions": "ausate ncopp'a {{PLURAL:$1|na paggena|$1 paggene}}",
+       "specialpage-empty": "Nun ce stanno risultate pe' stu report.",
+       "lonelypages": "Paggene orfane",
+       "lonelypagestext": "'E paggene ccà abbascio nun so state cullegate o appennute int' 'a n'ati paggene ncopp'a {{SITENAME}}.",
+       "uncategorizedpages": "Paggene senza categurìa",
+       "uncategorizedcategories": "Categurìe senza categurìa",
+       "uncategorizedimages": "File senza categurìa",
+       "uncategorizedtemplates": "Template senza categurìa",
+       "unusedcategories": "Categurìe ca nun s'ausano",
+       "unusedimages": "File ca nun s'ausano",
+       "wantedcategories": "Categurìe addimannate",
        "wantedpages": "Paggene cchiù addemannate",
+       "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]].",
+       "wantedfiletext-cat-noforeign": "Sti file ccà, song'ausate, ma nun esisteno. Anze, 'e paggene c'ausano sti file song'alencate dint'a [[:$1]].",
+       "wantedfiletext-nocat": "'E file ccà abbascio 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>.",
+       "wantedfiletext-nocat-noforeign": "'E file ccà abbascio s'ausano ma nun esisteno.",
+       "wantedtemplates": "Template addimannate",
+       "mostlinked": "Paggene cchiù addimannate",
+       "mostlinkedcategories": "Categurìe cchiù addimannate",
+       "mostlinkedtemplates": "Paggene cchiù appennute",
+       "mostcategories": "Paggene cu cchiù categurìe",
+       "mostimages": "File cchiù addimannate",
+       "mostinterwikis": "Paggene cu cchiù interwiki",
+       "mostrevisions": "Paggene cu cchiù cagnamiente",
+       "prefixindex": "Tutte 'e paggene cu prefisso",
+       "prefixindex-namespace": "Tutte 'e paggene cu prefisso d' 'o namespace $1",
+       "prefixindex-strip": "Annascunne 'o prefisso int' 'a lista",
        "shortpages": "Paggene curte",
        "longpages": "Paggene cchiú longhe",
+       "deadendpages": "Paggene ca nun spòntano",
+       "deadendpagestext": "'E paggene ccà abbascio nun spontano a n'ati paggene ncopp'a {{SITENAME}}.",
+       "protectedpages": "Paggene prutette",
+       "protectedpages-indef": "Sulamente prutezziune a tiempo nun definito",
+       "protectedpages-summary": "Sta paggena elenca 'e paggene ch'esisteno e ca songo prutette mò. Pe n'avé n'elenco 'e titule prutette â criazione, vedite [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
+       "protectedpages-cascade": "Sulamente prutezziune ricurzive",
+       "protectedpages-noredirect": "Annascunne redirect",
+       "protectedpagesempty": "Nisciuna paggena è prutetta pe mò cu sti parametre.",
+       "protectedpages-timestamp": "Data e ora",
+       "protectedpages-page": "Paggena",
+       "protectedpages-expiry": "Ammatura",
+       "protectedpages-performer": "Prutetta 'a ll'utente",
+       "protectedpages-params": "Parametre 'e prutezione",
+       "protectedpages-reason": "Mutivo",
+       "protectedpages-unknown-timestamp": "Scanusciuto",
+       "protectedpages-unknown-performer": "Utente scanusciuto",
+       "protectedtitles": "Paggene prutette",
+       "protectedtitles-summary": "Sta paggena elenca 'e titule ca song'attualmente prutette 'a criazione. Pe' n'avé n'elenco 'e paggene prutette ch'esisteno, vedite [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+       "protectedtitlesempty": "Nisciunu titolo è prutetto pe mò cu sti parametre.",
+       "listusers": "Lista 'e l'utente",
+       "listusers-editsonly": "Fà vedé sulamente l'utente cu cagnamiente fatte",
+       "listusers-creationsort": "Arrecetta pe' data 'e criazione",
+       "listusers-desc": "Arrecetta 'a l'auto a 'o vascio",
+       "usereditcount": "{{PLURAL:$1|nu càgnamiento|$1 càgnamiente}}",
        "usercreated": "{{GENDER:$3|Criato/a}} 'o $1 a $2",
        "newpages": "Paggene cchiù frische",
+       "newpages-username": "Nomme utente:",
+       "ancientpages": "Paggene cchiù viecchie",
        "move": "Spusta",
        "movethispage": "Spusta chesta paggena",
+       "unusedimagestext": "'E file ccà abbascio esisteno, ma nun songo appennute dint' 'a nisciuna paggena.\nPe' piacere vedite ca n'ati site ncopp' 'a ll'Internet putessero cullegà cu nu file direttamente cu l'URL, picciò vedite ca putessero stà dint'a sta lista ancora tenenno nu cullegamiento diretto.",
+       "unusedcategoriestext": "'E categurìe ccà abbascio esisteno, ancora ch' 'e categurìe o l'ati paggene nun l'aùsano.",
+       "notargettitle": "Nisciuna destinazione",
+       "notargettext": "Nun avete specificato na paggena o n'utente 'e destinazione pe' putè fa sta operazione.",
+       "nopagetitle": "Nisciuna paggena 'e destinazione",
+       "nopagetext": "'A paggena 'e destinazione c'avite specificato nun esiste.",
+       "pager-newer-n": "{{PLURAL:$1|1 cchiù viecchio|$1 cchiù viecchie}}",
        "pager-older-n": "{{PLURAL:$1|1 cchiù viecchio|$1 cchiù viecchie}}",
+       "suppress": "Supervisione",
+       "querypage-disabled": "Sta paggena speciale è stutata pe' mutive 'e prestaziune.",
+       "apihelp": "Ajuto cu l'API",
+       "apihelp-no-such-module": "'O modulo \"$1\" nun se trova.",
        "booksources": "Funte libbrarie",
-       "booksources-go": "Vàje",
+       "booksources-search-legend": "Ascìa 'e fonte ncopp' 'e libbre",
+       "booksources-search": "Ascìa",
+       "booksources-text": "Ccà abbascio ce sta na lista 'e cullegamiente a l'ati site ca venneno libbre nuove e viecchie, ca putessero pure avé cchiù nfurmaziune ncopp' 'e libbre ca jate ascianno:",
+       "booksources-invalid-isbn": "L'ISBN c'avete miso nun pare bbuono; cuntrolla si ce sta cocch'errore quanno stavate cupianno stu nummero d' 'a fonte origginale.",
+       "specialloguserlabel": "Mplementatore:",
+       "speciallogtitlelabel": "Destinazione (titolo o utente):",
        "log": "Logs",
+       "all-logs-page": "Tutte l'archivie pubbleche",
+       "alllogstext": "Visualizzazione mmescata 'e tutte 'e riggistre a disposizione ncopp'a {{SITENAME}}.\nPutite restringere 'a vista a sicondo 'o tipo 'e riggistro, 'o nomme utente (sensibbele a 'e maiuscole), o 'e paggene coinvolte (pure chiste songo sensibbele a 'e maiuscole).",
+       "logempty": "Nun ce sta n'elemento dint' 'o riggistro azzeccato â ricerca.",
+       "log-title-wildcard": "Ascìa titole c'accummencieno cu stu testo",
+       "showhideselectedlogentries": "Cagna visibbelità d' 'e riggistre scigliute",
        "allpages": "Tutte 'e ppaggene",
+       "nextpage": "Paggena appriesso ($1)",
+       "prevpage": "Paggena apprima ($1)",
+       "allpagesfrom": "Fà vedè 'e paggene partenno 'a:",
+       "allpagesto": "Fà vedè 'e paggene ca fernisceno 'o:",
        "allarticles": "Tutt' 'e vvoce",
        "allinnamespace": "Tutt' 'e ppaggene d''o namespace $1",
        "allpagessubmit": "Vàje",
+       "allpagesprefix": "Fà vedè 'e paggene cu 'o prefisso:",
+       "allpagesbadtitle": "'O titolo d' 'a paggena richiesta è invalido o pure nun è linkato buono a 'o titolo inter-lengua o inter-wiki.\nPutesse pure tené uno o cchiù carattere ca nun se ponno usà dint'e titule.",
+       "allpages-bad-ns": "{{SITENAME}} nun ce tene 'o namespace \"$1\".",
+       "allpages-hide-redirects": "Annascunne redirect",
+       "cachedspecial-viewing-cached-ttl": "State a vedé na verzione int' 'a cache 'e sta paggene, 'a quale pò essere agghiurnata 'a $1 fà.",
+       "cachedspecial-viewing-cached-ts": "State vedenno na verzione 'n cache, ca putesse nun essere agghiurnata.",
+       "cachedspecial-refresh-now": "Vide l'urdeme.",
        "categories": "Categurìe",
        "categoriespagetext": "{{PLURAL:$1|'A categurìa 'nnecata 'e seguito cuntiene|'E categurìe 'nnecate 'e seguito cuntengono}} paggene o file multimediale.\n'E [[Special:UnusedCategories|categurìe vuote]] nun song mostrate ccà.\nVere anche 'e [[Special:WantedCategories|categurìe richieste]].",
+       "categoriesfrom": "Fà vedè 'e categurìe partenno 'a:",
+       "special-categories-sort-count": "arricetta pe' cunteggio",
+       "special-categories-sort-abc": "arricetta arfabbeticamente",
+       "deletedcontributions": "Contribbute utente scancellate",
+       "deletedcontributions-title": "Contribbute utente scancellate",
+       "sp-deletedcontributions-contribs": "contribbute",
+       "linksearch": "Ascìa cullegamiente 'a fore",
+       "linksearch-pat": "Ascìa pe' mudello 'e ricerca:",
+       "linksearch-ns": "Namespace:",
        "linksearch-ok": "Truova",
+       "linksearch-text": "'E wildcard cumm'a \"*.wikipedia.org\" ponno essere ausate.<br />\nCe vulesse minimo nu dominio d'auto livello, p'esempio \"*.org\". <br />\n{{PLURAL:$2|Prutucolle}} suppurtate: <code>$1</code> ('o valore 'e bbase è http:// si 'o protocollo nun è stato specificato).",
        "linksearch-line": "$1 presente dint'â paggena $2",
+       "linksearch-error": "'E wildcard ponno essere ausate sulamente a l'inizio d' 'o hostname.",
+       "listusersfrom": "Fà vedè l'utente partenno 'a:",
+       "listusers-submit": "Faje vedé",
+       "listusers-noresult": "Nisciun'utente truvato.",
+       "listusers-blocked": "(bloccate)",
+       "activeusers": "Lista d'utente attive",
+       "activeusers-intro": "Chest'è n'elenco d'utente c'hanno fatto cierti tipe d'attività nfin'a $1 {{PLURAL:$1|juorno|ghiuorne}} fa.",
+       "activeusers-count": "$1 {{PLURAL:$1|cagnamiento|cagnamiente}} int'a l'urdeme {{PLURAL:$3|ghiuorne}}",
+       "activeusers-from": "Fà vedè l'utente partenno 'a:",
+       "activeusers-hidebots": "Annascunne 'e bot",
+       "activeusers-hidesysops": "Annascunne l'ammenistrature",
+       "activeusers-noresult": "Nisciun'utente truvato.",
+       "listgrouprights": "Deritte d' 'e gruppe utente",
+       "listgrouprights-summary": "'A lista ccà abbascio è na lista d' 'e gruppe utente criate int'a sta wiki, ch' 'e diritte associate.\nPonno esistere [[{{MediaWiki:Listgrouprights-helppage}}|nfurmaziune cchiù ndettaglie]] ncopp' 'e deritte ndividuale.",
+       "listgrouprights-key": "* <span class=\"listgrouprights-granted\">Deritto dato</span>\n* <span class=\"listgrouprights-revoked\">Deritto luvato</span>",
+       "listgrouprights-group": "Gruppo",
+       "listgrouprights-rights": "Deritte",
+       "listgrouprights-helppage": "Help:Deritte d' 'o gruppo",
+       "listgrouprights-members": "(lista d' 'e membre)",
+       "listgrouprights-addgroup": "Jogne {{PLURAL:$2|ô gruppo|ê gruppe}}: $1",
+       "listgrouprights-removegroup": "Leva {{PLURAL:$2|d' 'o gruppo|d' 'e gruppe}}: $1",
+       "listgrouprights-addgroup-all": "Jogne tutt' 'e gruppe",
+       "listgrouprights-removegroup-all": "Leva tutt' 'e gruppe",
+       "listgrouprights-addgroup-self": "Jogne {{PLURAL:$2|'o gruppo|'e gruppe}} a 'o cunto utente mio: $1",
+       "listgrouprights-removegroup-self": "Leva {{PLURAL:$2|'o gruppo|'e gruppe}} 'a 'o cunto utente d' 'o mio: $1",
+       "listgrouprights-addgroup-self-all": "Miette tutt' 'e gruppe ncopp' 'o cunto d' 'o mio",
+       "listgrouprights-removegroup-self-all": "Lèva tutt' 'e gruppe 'a 'o cunto utente d' 'o mio",
+       "listgrouprights-namespaceprotection-header": "Restriziune d' 'o namespace",
+       "listgrouprights-namespaceprotection-namespace": "Namespace",
+       "listgrouprights-namespaceprotection-restrictedto": "Diritto 'e cagnamiento 'e l'utente",
+       "trackingcategories": "Categurìe 'e cuntrollo",
+       "trackingcategories-summary": "Sta paggena elenca 'e categurìe ca stann'automaticamente popolate 'a 'o software Mediawiki. 'E nomme 'e lloro se ponno cagnà quanno se cagnano 'e relative mmasciate 'e sistema dint' 'o namespace {{ns:8}}.",
+       "trackingcategories-msg": "Categurìe 'e cuntrollo",
+       "trackingcategories-name": "Nomme d' 'a mmasciata",
+       "trackingcategories-desc": "Criterie p' 'o miettere dint' 'a categurìa",
+       "noindex-category-desc": "'A paggena nun è indicizzata 'a 'e robot pecché cuntene 'a parola maggica <code><nowiki>__NOINDEX__</nowiki></code> e se trova dint'a nu namespace addò chistu flag è permesso.",
+       "index-category-desc": "'A paggena téne 'o codece <code><nowiki>__INDEX__</nowiki></code> dinto (e se trova dint'a nu namespace addò chistu flag è permesso), e picciò è indicizzata 'a 'e robot, pure si normalmente nun fosse accussì.",
+       "post-expand-template-inclusion-category-desc": "'A dimensione d' 'a paggena è cchiù granne 'e <code>$wgMaxArticleSize</code> aropp'a spannere tutt' 'e template, e picciò cocche template nun se so' spannute.",
+       "post-expand-template-argument-category-desc": "'A paggena sarrà cchiù granne 'e <code>$wgMaxArticleSize</code> aropp' 'avé spannuto 'o parametro 'e nu template (coccosa mmiez'a tre parentesi graffe, cumm'a cchesto: <code>{{{Foo}}}</code>).",
+       "expensive-parserfunction-category-desc": "'A paggena aúsa troppe funziune parser (comme <code>#ifexist</code>). Vedite [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "'A paggena cuntene nu cullegamiento rutto a nu file (nu link ca spontasse a nu file ancora che chisto nun esiste).",
+       "hidden-category-category-desc": "Chista categurìa cuntene <code><nowiki>__HIDDENCAT__</nowiki></code> dint' 'a paggena suja, 'a quale nun permette ca s'ammustasse, predefinitamente, dint' 'o quadretto d' 'e cullegamiente a 'e categurìe d' 'e paggene.",
+       "trackingcategories-nodesc": "Nisciuna descrizione a disposizione.",
+       "trackingcategories-disabled": "'A categurìa è stutata",
+       "mailnologin": "Nisciuno indirizzo pe' mannà 'e mmasciate",
+       "mailnologintext": "Avite 'a [[Special:UserLogin|trasì]] e avè n'indirizzo e-mail valido int' 'e [[Special:Preferences|preferenze]] d' 'e vuoste pe' mannà na mmasciata e-mail a l'ati utente.",
        "emailuser": "Email chisto utente",
-       "mywatchlist": "osservate speciale",
+       "emailuser-title-target": "Manna n'email a chist'{{GENDER:$1|utente}}",
+       "emailuser-title-notarget": "E-mail 'e l'utente",
+       "emailpage": "E-mail 'e l'utente",
+       "emailpagetext": "Putite ausà 'o modulo ccà abbascio pe' mannà na mmasciata e-mail a st'{{GENDER:$1|utente}}.\nL'indirizzo e-mail ch'avite nzertàto dint' 'e [[Special:Preferences|preferenze vuoste]] accumpararrà dint' 'o campo \"'A\" dint' 'a mmasciata e-mail, accussì chillo ca ricevese 'a mail 'o sape ca v'avess'a risponnere direttamente a vuje.",
+       "defemailsubject": "e-mail 'e {{SITENAME}} 'a l'utente \"$1\"",
+       "usermaildisabled": "L'e-mail utente è stutato",
+       "usermaildisabledtext": "Nun se può mannà n'e-mail a l'at'utente ncopp' 'a sta wiki",
+       "noemailtitle": "Nisciuno indirizzo e-mail",
+       "noemailtext": "St'utente nun ha miso nisciuno indirizzo e-mail valido.",
+       "nowikiemailtext": "St'utente ha scigliuto 'e nun se cuògliere mmasciate e-mail 'a l'at'utente.",
+       "emailnotarget": "Nomme 'e l'utente ca nun esiste o nun è valido.",
+       "emailtarget": "Mettite 'o nomme utente d' 'o destinatario",
+       "emailusername": "Nomme utente:",
+       "emailusernamesubmit": "Manna",
+       "email-legend": "Manna sta mail a n'at'utente 'e {{SITENAME}}",
+       "emailfrom": "'A:",
+       "emailto": "A:",
+       "emailsubject": "Oggetto:",
+       "emailmessage": "Mmasciata:",
+       "emailsend": "Manna",
+       "emailccme": "Manname n'e-mail cu 'na copia d' 'a mmasciata.",
+       "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}}.",
+       "usermessage-summary": "Lassanno na mmasciata 'e sistema.",
+       "usermessage-editor": "Mmasciatore d' 'o sistema",
+       "watchlist": "Paggene cuntrullate",
+       "mywatchlist": "Paggene cuntrullate",
        "watchlistfor2": "Ppe $1 $2",
+       "nowatchlist": "Nun tenite paggene dint' 'a l'elenco 'e paggene cuntrullate.",
+       "watchlistanontext": "Pe' piacere, trasite pe' vedé o cagnà l'elenco 'e paggene cuntrullate.",
+       "watchnologin": "Acciesso nun affettuato",
+       "addwatch": "Miette dint' 'a l'elenco 'e paggene cuntrullate",
+       "addedwatchtext": "'A paggena \"[[:$1]]\" è stata azzeccata dint'a l'elenco 'e [[Special:Watchlist|paggene cuntrullate]].\n'E cagnamiente future a sta paggena e a tutt' 'e paggene 'e chiacchiera azzeccate sarranno elencate llà dinto.",
+       "addedwatchtext-short": "Chista paggena \"$1\" è stata azzeccata a l'elenco 'e paggene cuntrullate.",
+       "removewatch": "Leva 'a l'elenco 'e paggene cuntrullate",
+       "removedwatchtext": "'A paggena \"[[:$1]]\" è stata scancellata 'a l'elenco [[Special:Watchlist|'e paggene cuntrullate]] tuojo.",
+       "removedwatchtext-short": "Chista paggena \"$1\" è stata luvata a l'elenco 'e paggene cuntrullate.",
        "watch": "Secuta",
+       "watchthispage": "Tiene d'uocchio chesta paggena",
        "unwatch": "Nun segui",
+       "unwatchthispage": "Nun cuntrullà cchiù sta paggena",
        "notanarticle": "Chesta paggena nun è na voce",
+       "notvisiblerev": "'A verzione è stata scancellata",
+       "watchlist-details": "L'elenco 'e paggene cuntrullate cuntene {{PLURAL:$1|na paggena (e pure 'a paggena 'e chiacchiera)|$1 paggene (e pure 'e paggene 'e chiacchiera}}.",
+       "wlheader-enotif": "'A funzione 'e notifiche e-mail è appicciata.",
+       "wlheader-showupdated": "* 'E paggene cca so' state cagnate a l'urdema visita avevano so' nzignate ccà 'n '''grassetto'''.",
+       "wlnote": "Ccà abbascio {{PLURAL:$1|è elencato 'o cagnamiento cchiù ricente|songo elencate 'e <strong>$1</strong> cagnamiente cchiù recente}} {{PLURAL:$2|int'a ll'urdema ora|int' 'e ll'urdeme <strong>$2</strong> ore}}; 'e date songo agghiurnate 'o $3, $4.",
+       "wlshowlast": "Mmusta ll'urdeme $1 ore $2 ghiuorne",
+       "watchlist-options": "Opziune 'a l'elenco 'e paggene cuntrullate",
+       "watching": "Cuntrullanno...",
+       "unwatching": "Lassanno 'e cuntrullà...",
+       "watcherrortext": "N'errore s'è verificato quanno se faceva 'o cagnamiento 'e l'elenco 'e paggene cuntrullate pe' \"$1\".",
+       "enotif_reset": "Nzègna tutt' 'e paggene comme visitate",
+       "enotif_impersonal_salutation": "Utente 'e {{SITENAME}}",
+       "enotif_subject_deleted": "'A paggena $1 'e {{SITENAME}} è stata scancellata 'a {{gender:$2|$2}}",
+       "enotif_subject_created": "'A paggena $1 'e {{SITENAME}} è stata criata 'a {{gender:$2|$2}}",
+       "enotif_subject_moved": "'A paggena $1 'e {{SITENAME}} è stata cagnata 'e posto 'a {{gender:$2|$2}}",
+       "enotif_subject_restored": "'A paggena $1 'e {{SITENAME}} è stata arripigliata 'a {{gender:$2|$2}}",
+       "enotif_subject_changed": "'A paggena $1 'e {{SITENAME}} è stata cagnata 'a {{gender:$2|$2}}",
+       "enotif_body_intro_deleted": "'A paggene $1 'e {{SITENAME}} è stata scancellata 'a copp' 'e $PAGEEDITDATE 'a {{gender:$2|$2}}, vedite $3.",
+       "enotif_body_intro_created": "'A paggena $1 'e {{SITENAME}} è stata criata ncopp'a $PAGEEDITDATE 'a {{gender:$2|$2}}, vedite $3 p' 'a verzione 'e mo.",
+       "enotif_body_intro_moved": "'A paggena $1 'e {{SITENAME}} è stata cagnata 'e posto ncopp'a $PAGEEDITDATE 'a {{gender:$2|$2}}, vedite $3 p' 'a verzione 'e mo.",
+       "enotif_body_intro_restored": "'A paggena $1 'e {{SITENAME}} è stata arripigliata ncopp'a $PAGEEDITDATE 'a {{gender:$2|$2}}, vedite $3 p' 'a verzione 'e mo.",
+       "enotif_body_intro_changed": "'A paggena $1 'e {{SITENAME}} è stata cagnata ncopp'a $PAGEEDITDATE 'a {{gender:$2|$2}}, vedite $3 p' 'a verzione 'e mo.",
+       "enotif_lastvisited": "Vedite $1 pe' tutt' 'e cagnamiente 'a ll'urdema visita vuosta.",
+       "enotif_lastdiff": "Vedite $1 pe' vedè stu cagnamiento.",
+       "enotif_anon_editor": "Utente anonimo $1",
+       "enotif_body": "Caro $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nRiepilego 'e cagnamiente: $PAGESUMMARY $PAGEMINOREDIT\n\nCuntattate l'autore:\ne-mail: $PAGEEDITOR_EMAIL\nncopp' 'o sito: $PAGEEDITOR_WIKI\n\nNun se mannarranno ati notifiche si facite cocch'at'attività senza venì a sta paggena.\nPutite pure cagnà 'e mpustaziune 'e notifeca pe' tutt' 'e paggene cuntrullate dint' 'a l'elenco.\n\nStatteve Bbuon, 'o sistema 'e notifiche ncopp' 'a {{SITENAME}} vuosto\n\n--\nPe' cagnà 'e mpustaziune d' 'e notifiche 'e mmasciate elettroniche, jate ccà: {{canonicalurl:{{#special:Preferences}}}}\n\nPe' cagnà 'e mpustaziune 'e l'elenco 'e paggene cuntrullate vuoste jate ccà: {{canonicalurl:{{#special:EditWatchlist}}}}\n\nPe' scancellà l'elenco 'e paggene cuntrullate vedite $UNWATCHURL\n\nSegnalaziune e at'assistenze:\n$HELPPAGE",
        "changed": "cagnata",
        "deletepage": "Scancella paggena",
+       "confirm": "Cunferma",
        "excontent": "'o cuntenuto era: '$1'",
        "excontentauthor": "'o cuntenuto era: '$1' (e ll'unneco cuntribbutore era '[[Special:Contributions/$2|$2]]')",
        "exbeforeblank": "'O cuntenuto apprimm' 'a ll'arrevacamento era: '$1'",
+       "delete-confirm": "Scancella \"$1\"",
+       "delete-legend": "Scancella",
+       "historywarning": "'''Attenzione:''' 'A paggena ca state pe' scancellà tene na cronologgia cu $1 {{PLURAL:$1|verzione|verziune}}:",
+       "confirmdeletetext": "Vedite bbuono, vedite ca state a scancellà na paggena nziem' 'a tutt' 'a cronologgia.\nPe' piacere cunfermate si overo vulite fà cchesto, ca ve site fatto/a capace 'e l'effette 'e st'azione e ca chest'azione rispetta 'e [[{{MediaWiki:Policy-url}}|reole 'e scancellamiento]].",
        "actioncomplete": "Azzione fernuta",
+       "actionfailed": "Aziona sfalluta",
        "deletedtext": "Qauccheruno ha scancellata 'a paggena \"$1\".  Addumannà 'o $2 pe na lista d\"e ppaggene scancellate urdemamente.",
        "dellogpage": "Scancellazione",
+       "dellogpagetext": "Ccà abbascio sta na lista ch' 'e cchiù recente scancellamiente.",
        "deletionlog": "Log d\"e scancellazione",
+       "reverted": "Turnà a 'a verziona cchiù recente",
        "deletecomment": "Raggióne",
+       "deleteotherreason": "Ati/cchiù ragiune:",
+       "deletereasonotherlist": "Ati ragiune",
+       "deletereason-dropdown": "*Mutive comune de scancellamiento\n** Spam\n** Vandalisme\n** Violazione d' 'o Copyright\n** Richieste 'e l'autore\n** Redirezionamente scassate",
+       "delete-edit-reasonlist": "Càgna 'e mutive 'e scancellamiento",
+       "delete-toobig": "Sta paggena tene na storia 'e cagnamiente troppo longa, ncopp'a $1 {{PLURAL:$1|verzione|verziune}}.\n'O scancellamiento 'e chiste paggene è stato ristretto pe nce 'e putè astipà si ce sta cocche probblema dint' 'o database 'e {{SITENAME}}.",
+       "delete-warning-toobig": "Sta paggena tene na cronologgia troppo longa, ncopp'a $1 {{PLURAL:$1|verzione|verziune}}.\nScancellannole se putesse crià troppo burdello ncopp' 'e operaziune 'e database dint'a {{SITENAME}};\niate cuoncio cuoncio.",
+       "deleteprotected": "Nun putite scancellà sta paggena pecché è stata prutetta.",
+       "deleting-backlinks-warning": "'''Attenzione:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|ati paggene]] cunteneno cullegamiente o paggene appennute â n'ata paggena ca state pe' scancellà.",
        "rollback": "Ausa na revizione 'e primma",
+       "rollback_short": "Annulla",
        "rollbacklink": "a vascio",
+       "rollbacklinkcount": "annulla {{PLURAL:$1|nu cagnamiento|$1 cagnamiente}}",
+       "rollbacklinkcount-morethan": "annulla cchiù 'e {{PLURAL:$1|nu cagnamiento|$1 cagnamiente}}",
+       "rollbackfailed": "Annullamento fallito",
+       "cantrollback": "Nun se può annullà stu cagnamiento;\nsapite ca l'urdemo autore è stato pure sul'isso a faticà dint'a sta paggena (nun ce sta n'at'autore).",
+       "alreadyrolled": "Nun se può turna arreto a l'urdemo cagnamiento [[:$1]] 'a [[User:$2|$2]] ([[User talk:$2|Chiacchiera]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\ncocch'ato ha cagnato o annullato 'a paggena già.\n\nL'urdemo cangamiento d' 'a paggena fuje 'a [[User:$3|$3]] ([[User talk:$3|Chiacchiera]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "editcomment": "'O riepilego d' 'o cagnamiento era: \"''$1''\".",
        "revertpage": "Cangiaje 'e cagnamiénte 'e [[Special:Contributions/$2|$2]] ([[User talk:$2|discussione]]), cu â verzione 'e pprimma 'e  [[User:$1|$1]]",
+       "revertpage-nouser": "Annullate 'e cagnamiente 'e n'utente annascunnuto, è stata ripigliata ll'urdema verzione 'e {{GENDER:$1|[[User:$1|$1]]}}",
+       "rollback-success": "Cagnamiente annullate 'a $1;\ns'è turnat arreto a l'urdema verzione 'e $2.",
+       "sessionfailure-title": "Sessione fallita",
+       "sessionfailure": "Pare ca stanno probbleme cu 'a sessiona toja;\nst'azione è stata fermata pe' precauzione annanz' 'e cavall' 'e troia;\nPe' piacere turnate arreto, carrecate n'ata vota 'a paggena pe pruvate n'ata vota.",
+       "protectlogpage": "Riggistro 'e prutezzione",
+       "protectlogtext": "Ccà abbascio sta na lista 'e cagnamiente 'e pruteziune d' 'e paggene.\nVedite 'a [[Special:ProtectedPages|liste d' 'e paggene prutette]] pe n'avé na lista 'e l'operaziune 'e mo ncopp' 'a prutezzione d' 'e paggene.",
        "protectedarticle": "ha prutetto \"[[$1]]\"",
+       "modifiedarticleprotection": "'o livello 'e prutezione è stato cagnato pe' \"[[$1]]\"",
+       "unprotectedarticle": "sprutetto 'a \"[[$1]]\"",
+       "movedarticleprotection": "'mpustaziune 'e protezzione spustate 'a \"[[$2]]\" a \"[[$1]]\"",
+       "protect-title": "Cagna 'o livello 'e prutezione pe' \"[[$1]]\"",
+       "protect-title-notallowed": "Fà vedé 'o livello 'e prutezione pe' \"$1\"",
        "prot_1movedto2": "ha spustato [[$1]] a [[$2]]",
+       "protect-badnamespace-title": "Namespace nun pruteggibbele",
+       "protect-badnamespace-text": "'E paggene int'a stu namespace nun se ponno pruteggere.",
+       "protect-norestrictiontypes-text": "Sta paggena nun se può pruteggere pecché nun ce sta nisciunu tipo 'e restrizione.",
+       "protect-norestrictiontypes-title": "Namespace nun pruteggibbele",
+       "protect-legend": "Cunferma 'a prutezione",
+       "protectcomment": "Mutivo:",
+       "protectexpiry": "Ammatura:",
+       "protect_expiry_invalid": "'O tiempo d'ammaturamiento è invalido.",
+       "protect_expiry_old": "'O tiempo d'ammaturamiento è passato già.",
+       "protect-unchain-permissions": "Sblocca cchiù opziune 'e prutezione",
+       "protect-text": "Ccà putite vedé e cagnà 'o livello 'e prutezione p' 'a paggena <strong>$1</strong>.",
+       "protect-locked-blocked": "Nun può cagnà 'e livelle 'e prutezione pe' tramente ca staje bluccato.\nCcà abbascio stanno 'e mpustaziune 'e mo p' 'a paggena '''$1''':",
+       "protect-locked-dblock": "'E livelle 'e prutezzione nun se ponno cagnà pecché ce sta nu blocco attivo d' 'o database.\nCcà abbascio stanno 'e mpustaziune 'e mo p' 'a paggena '''$1''':",
+       "protect-locked-access": "C' 'o cunto vuosto nun avite permesso pe' putè cagnà 'e livelle 'e prutezioen d' 'e paggene.\nChiste songh' 'e mpustaziune 'e mo p' 'a paggena '''$1''':",
+       "protect-cascadeon": "P' 'o mumento sta paggena è bloccata pecché sta appennuta dint'a {{PLURAL:$1|paggena scritta ccà abbascio, p' 'a quale|'e paggene scritte ccà abbascio p' 'e quale}} è attiva 'a prutezione ricurziva.\n'E cagnamiente a livello 'e prutezione individuale a uno a uno d' 'a paggena, nun tenerranno effette ncopp' 'e mpustaziune pigliate d' 'o fatto 'e se fà na prutezione ricurziva.",
+       "protect-default": "Permette tutte l'utente",
+       "protect-fallback": "Permette sulamente a l'utente c' 'o permesso \"$1\"",
+       "protect-level-autoconfirmed": "Permette sulamente a l'utente autocunvalidate",
+       "protect-level-sysop": "Permette sulamente a l'ammenistrature",
+       "protect-summary-cascade": "ricurziva",
+       "protect-expiring": "ammatura 'o $1 (UTC)",
+       "protect-expiring-local": "ammatura 'o $1",
+       "protect-expiry-indefinite": "indefinite",
+       "protect-cascade": "Prutegge paggene appennute dint'a sta paggena (spanne 'a prutezione a tutt' 'e paggene appennute ccà).",
+       "protect-cantedit": "Nun è pussibbele cagnà 'e livelle e prutezione 'e sta paggena, pecchè nun tenite deritto o permesse pe' ne fà 'o cagnamiento.",
+       "protect-othertime": "N'ata durata:",
+       "protect-othertime-op": "ati durate",
+       "protect-existing-expiry": "'O tiempo d'ammaturamiento esistente: $3, $2",
+       "protect-existing-expiry-infinity": "Tiempo d'ammaturamiento: infinito",
+       "protect-otherreason": "Ati/cchiù ragiune:",
+       "protect-otherreason-op": "Ati ragiune",
+       "protect-dropdown": "*Mutive 'e prutezione comune\n** Vandalisme eccessive\n** Spam eccessivo\n** 'Uerre 'e cagnamiente controproducente\n** Paggena cu troppo traffeco",
+       "protect-edit-reasonlist": "Càgna 'e mutive 'e prutezione",
        "protect-expiry-options": "1 ore:1 hour,1 juorno:1 day,1 semmana:1 week,2 semmane:2 weeks,1 mese:1 month,3 mise:3 months,6 mise:6 months,1 anno:1 year,infinito:infinite",
+       "restriction-type": "Permesse:",
+       "restriction-level": "Livello 'e restrizione:",
+       "minimum-size": "Diminsiune minime:",
+       "maximum-size": "Diminsiune massime:",
+       "pagesize": "(byte)",
+       "restriction-edit": "Càgna",
+       "restriction-move": "Spusta",
+       "restriction-create": "Cria",
+       "restriction-upload": "Carreca",
+       "restriction-level-sysop": "prutetta",
+       "restriction-level-autoconfirmed": "semi-prutetta",
+       "restriction-level-all": "ogne livello",
+       "undelete": "Fà vedé 'e paggene scancellate",
+       "undeletepage": "Fà vedé e arrepiglia 'e paggene scancellate",
+       "undeletepagetitle": "'''Ccà abbascio ce stanno 'e verziune scancellate 'e [[:$1|$1]]'''.",
        "viewdeletedpage": "Vìre 'e ppàggine scancellate",
+       "undeletepagetext": "{{PLURAL:$1|'A paggena ccà abbascio è stata scancellata però|$1 paggene ccà abbascio so' state scancellate però}} stann'ancora dint' 'a l'archivio e se ponno arrepiglià.<br />\nL'archivie s'hanna pulezzà periodicamente.",
+       "undelete-fieldset-title": "Arrepiglia verziune",
+       "undeleteextrahelp": "P'arrepiglià 'a cronologgia completa d' 'a paggena, lassate 'e cascie abbacante e facite click ncopp'a '''''{{int:undeletebtn}}'''''.\nPe' putè arrepiglià selettivamente, miette nu zegno ncopp' 'e casciulele currispunnente a 'e verziune ca vulite arripiglià e po' facite click ncopp'a '''''{{int:undeletebtn}}'''''.",
+       "undeleterevisions": "$1 {{PLURAL:$1|verzione|verziune}} archiviate",
+       "undeletehistory": "Si arrepiglie 'a paggena, tutte 'e verziune sarrann'arrepigliate nziem'a chista.\nSi na paggena nova c' 'o stesso nomme è stata criata 'a che s'è fatto 'o scancellamiento, 'e verziune arripigliate cumparerranno comme cchiù viecchie dint' 'a cronologgia.",
+       "undeleterevdel": "L'arripiglio nun sarrà affettuato si determina 'o scancellamiento parziale d' 'a verzione 'e mo d' 'a paggena o file.\nInt'a sti case, avite 'e smarcà o annasconnere 'e verziune scancellate cchiù nove.",
+       "undeletehistorynoadmin": "Sta paggena è stata scancellata.\n'O mutivo d' 'o scancellamiento 'o truvate scritto dint' 'a 'o riepilego ccà abbascio, nzieme ch' 'e dettaglie 'e l'utente c'hanno cagnato sta paggena apprimma 'e se fà 'o scancellamiento.\n'O testo 'e mo 'e sti verziune è a disposizione sulamente a l'ammenistrature.",
+       "undelete-revision": "Verziune scancellata 'a $1 (comme 'e $4, a $5) 'a $3:",
+       "undeleterevision-missing": "Verziona invalida o mancante.\nPutisseve avé nu cullegamiento sbagliato o 'a verzione, può darse, ca fosse arrepigliata o scancellata 'e l'archivio.",
+       "undelete-nodiff": "Nun s'è truvata nisciuna verzione 'e primma.",
+       "undeletebtn": "Arrepiglia",
+       "undeletelink": "vide/arrepiglia",
        "undeleteviewlink": "vere",
+       "undeleteinvert": "Abbarruca 'a sceveta",
+       "undeletecomment": "Mutivo:",
+       "undeletedrevisions": "{{PLURAL:$1|1 verzione|$1 verziune}} arrepigliate",
+       "undeletedrevisions-files": "{{PLURAL:$1|1 verzione|$1 verziune}} e {{PLURAL:$2|1 file|$2 file}} arrepigliate",
+       "undeletedfiles": "{{PLURAL:$1|1 file arrepigliato|$1 file arrepigliate}}",
+       "cannotundelete": "Arrepiglio fallito:\n$1",
+       "undeletedpage": "'''$1 è stat'arrepigliato'''\n\nLiggiete 'o [[Special:Log/delete|riggistro 'e scancellamiente]] pe n'avé n'elenco 'e l'urdeme scancellamiente e arrepiglie.",
+       "undelete-header": "Vedite [[Special:Log/delete|'o riggistro 'e scancellamiente]] pe l'urdeme paggene scancellate",
+       "undelete-search-title": "Ascìa dint' 'e paggene scancellate",
+       "undelete-search-box": "Ascìa dint' 'e paggene scancellate",
+       "undelete-search-prefix": "Fà vedè 'e paggene c'accumencieno cu:",
+       "undelete-search-submit": "Truova",
+       "undelete-no-results": "Nun ce stanno paggene asciate ca se truvassero dint' 'o riggistro 'e scancellamiento.",
+       "undelete-filename-mismatch": "Nun se può arrepiglià 'a verzione d' 'o file cu l'orario $1: nomme d' 'o file errato",
+       "undelete-bad-store-key": "Nun se può arrepiglià 'a verzione d' 'o file cu orario $1: 'o file è stato sperduto apprimma d' 'o scancellamiento.",
+       "undelete-cleanup-error": "Errore scancellanno n'archivio 'e file nun ausate \"$1\".",
+       "undelete-missing-filearchive": "Non se può arrepiglià l'archivie cu l'ID $1 pecché nun ce stanno dint' 'o database.\nPò darse ca songo già state arrepigliate.",
+       "undelete-error": "Errore pe' tramente ca s'arrepigliava na paggena",
+       "undelete-error-short": "Errore pe' tramente ca s'arrepigliava na paggena: $1",
+       "undelete-error-long": "Errore pe' tramente ca s'arrepigliava na paggena:\n\n$1",
+       "undelete-show-file-confirm": "Site sicuro/a ca vulite veré 'a verziona scancellata d' 'o file \"<nowiki>$1</nowiki>\" d' 'o $2 a 'e $3?",
+       "undelete-show-file-submit": "Sì",
        "namespace": "Namespace:",
        "invert": "abbarruca 'a sceveta",
+       "tooltip-invert": "Nzegna sta casciulella p'annaconnere 'e cagnamiente a 'e paggene ca stanno dint' 'o namespace c'avite scigliuto (e 'o namespace stesso si l'avite scigliuto)",
+       "namespace_association": "Namespace associate",
+       "tooltip-namespace_association": "Nzegna sta casciulella pe ncludere 'e cchiacchiere o l'oggetto d' 'o namespace associato c' 'o namespace scigliuto",
        "blanknamespace": "(Prencepale)",
        "contributions": "Contribbute {{GENDER:$1|utente}}",
+       "contributions-title": "Cuntribbute 'a l'utente pe' $1",
        "mycontris": "'E ffatiche d''e mmeje",
        "contribsub2": "Ppe {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "'O cunto utente \"$1\" nun è riggistrato.",
+       "nocontribs": "Nisciunu cagnamiento è stato truvato cu sti criterie.",
        "uctop": "(attuale)",
        "month": "D\"o mese (e primma):",
        "year": "'E ll'anno (e primma):",
        "sp-contributions-newbies": "Mosta solo 'e contribbute dde nove utente",
+       "sp-contributions-newbies-sub": "Pe' l'utente nuove",
+       "sp-contributions-newbies-title": "Contribbute 'a l'utente nuove",
        "sp-contributions-blocklog": "blocche",
        "sp-contributions-suppresslog": "contribbute utente scancellate",
-       "sp-contributions-logs": "registre",
+       "sp-contributions-deleted": "contribbute d'utente scancellate",
+       "sp-contributions-uploads": "carreche",
+       "sp-contributions-logs": "riggistre",
        "sp-contributions-talk": "Chiàcchiera",
+       "sp-contributions-userrights": "gestione d' 'e permesse 'e l'utente",
+       "sp-contributions-blocked-notice": "St'utente è bloccato mò.\nL'urdemo elemento d' 'o riggistro 'e blocche è ripurtato ccà abbascio p'avé nu riferimento:",
+       "sp-contributions-blocked-notice-anon": "St'IP è bloccato mò.\nL'urdemo elemento d' 'o riggistro 'e blocche è ripurtato ccà abbascio p'avé nu riferimento:",
+       "sp-contributions-search": "Ascìa 'e contribbute",
        "sp-contributions-username": "Nnerizzo IP o nomme utente",
+       "sp-contributions-toponly": "Facenno vedé sulamente 'e contribbute 'e l'urdeme verziune",
+       "sp-contributions-newonly": "Facenno vedé sulamente 'e contribbute ca songo criazione 'e paggene",
        "sp-contributions-submit": "Truova",
        "whatlinkshere": "Paggene ca cullegano a chesta",
        "whatlinkshere-title": "Paggene ca cullegano a $1",
        "whatlinkshere-page": "Paggena:",
-       "nolinkshere": "Nisciuna paggena cuntene jonte ca mpuntano a '''[[:$1]]'''.",
+       "linkshere": "'E paggene ccà abbascio cunteneno jonte ca spuntano a '''[[:$1]]'''.",
+       "nolinkshere": "Nisciuna paggena cuntene jonte ca spuntasse a <strong>[[:$1]]</strong>.",
+       "nolinkshere-ns": "Nun ce stanno paggene ca spuntassero '''[[:$1]]''' dint' 'o namespace scigliuto.",
        "isredirect": "redirect a paggena",
        "istemplate": "'nclusione",
        "isimage": "Cullegamente a file multimediale",
+       "whatlinkshere-prev": "{{PLURAL:$1|apprima|apprime $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|appriesso|$1 appriesso}}",
        "whatlinkshere-links": "← jonte",
        "whatlinkshere-hideredirs": "$1 redirects",
        "whatlinkshere-hidetrans": "$1 'nclusione",
        "whatlinkshere-hidelinks": "$1 jonte",
        "whatlinkshere-hideimages": "$1 links ddo file",
        "whatlinkshere-filters": "Filtre",
-       "blockip": "Ferma utelizzatóre",
+       "autoblockid": "Autoblocco #$1",
+       "block": "Blocca l'utente",
+       "unblock": "Sblocca l'utente",
+       "blockip": "Blocca {{GENDER:$1|utente}}",
+       "blockip-legend": "Blocca l'utente",
+       "blockiptext": "Ausa 'o modulo ccà abbascio pe' bluccà l'acciesso 'e scrittura a n'indirizzo IP o utente.\nChisto s'avesse 'a ffà sulamente pe' se pruteggere d' 'o vandalismo, d'accordo ch' [[{{MediaWiki:Policy-url}}|'e reole]].\nMettite pure nu mutivo specifico ccà abbascio (p'esempio, facenno 'o nomme 'e paggene addò se so' fatte 'e vandalisme).",
        "ipaddressorusername": "Nnerizzo IP o nomme utente",
+       "ipbexpiry": "Ammatura:",
+       "ipbreason": "Mutivo:",
+       "ipbreason-dropdown": "* Mutive comune pe' ffà 'o blocco\n** Steva nzertanno nfurmaziune fauze\n** Steva a luvà cuntenute d' 'e paggene\n** Steva a fà spam 'e cullegamiente a 'e site 'e fore\n** Steva a nzertà robbe senza senso dint' 'e paggene\n** Minacce e ntimidaziune\n** Abbuso 'e cunte utente multiple\n** Nomme utente inaccettabbele",
+       "ipb-hardblock": "Nun permettere 'o cagnamiento a l'utente riggistrate ca veneno 'a st'indirizzo IP",
+       "ipbcreateaccount": "Nun fà crià 'o cunto",
+       "ipbemailban": "Blocca utente a mannà e-mail",
+       "ipbenableautoblock": "Automaticamende blocca l'urdeme indirizze IP ausate 'a st'utente, e pure tutte l'IP c'ausasse pe' pruvà 'e fà ati cagnamiente",
+       "ipbsubmit": "Blocca st'utente",
+       "ipbother": "N'ata durata:",
        "ipboptions": "2 ore:2 hours,1 juorno:1 day,3 juorne:3 days,1 semmana:1 week,2 semmane:2 weeks,1 mise:1 month,3 mese:3 months,6 mese:6 months,1 anno:1 year,infinito:infinite",
+       "ipbhidename": "Annascunne 'o nomme utente d' 'a lista 'e cagnamiente e l'ati liste",
+       "ipbwatchuser": "Fà vedé 'a paggena utente e le chiacchieriate 'e st'utente",
+       "ipb-disableusertalk": "Nun permettere a st'utente edità 'a paggena 'e chiacchiera d' 'a soja pe' tramente ch'e bloccato",
+       "ipb-change-block": "Blocca n'ata vota l'utente cu sti mpustaziune",
+       "ipb-confirm": "Cunferma 'o blocco",
+       "badipaddress": "Indirizzo IP nun valido",
        "blockipsuccesssub": "Blocco aseguito",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] è stato bloccato.<br />\nVedite [[Special:BlockList|'a lista 'e l'IP bloccate]] pe' fà vedé n'ata vota 'e blocche.",
+       "ipb-blockingself": "Vuje ve state a bluccà da solo! Site sicuro ca 'o vulite fà?",
+       "ipb-confirmhideuser": "State a bluccà n'utente cu l'opzione \"annascunne utente\" appicciata. St'operazione può luvà 'o nomme 'e l'utente a dint' 'a tutte l'elenche e riggistre. Site sicuro/a ca vulite fà chesto?",
+       "ipb-confirmaction": "Si site sicuro 'e fa chesto overo, cuntrullate 'o campo \"{{int:ipb-confirm}}\" ccà abbascio.",
+       "ipb-edit-dropdown": "Cagna 'e mutive d' 'o blocco",
+       "ipb-unblock-addr": "Sblocca $1",
+       "ipb-unblock": "Sblocca nomme utente o indirizzo IP",
+       "ipb-blocklist": "Fà vedé 'e blocche ch'esisteno",
+       "ipb-blocklist-contribs": "Contribbute 'e {{GENDER:$1|$1}}",
+       "unblockip": "Sblocca utente",
+       "unblockiptext": "Ausa 'o modulo ccà abbascio p'arrepiglià 'e deritte 'e scrittura a l'indirizze IP o cunte utente ca primma so state bluccate.",
+       "ipusubmit": "Lèva stu blocco",
+       "unblocked": "[[User:$1|$1]] è stato sbloccato.",
+       "unblocked-range": "$1 è stato sbloccato",
+       "unblocked-id": "'O blocco $1 è stato luvato.",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] è stato sbluccato.",
+       "blocklist": "Utente bloccate",
        "ipblocklist": "Utenti bloccate",
+       "ipblocklist-legend": "Ascìa n'utente bloccato",
+       "blocklist-userblocks": "Annascunne 'e blocche 'e l'utente riggistrate",
+       "blocklist-tempblocks": "Annascunne 'e blocche temporanee",
+       "blocklist-addressblocks": "Annascunne 'e blocche 'e n'IP sola",
+       "blocklist-rangeblocks": "Annascunne 'e ntervalle 'e blocche",
+       "blocklist-timestamp": "Data e ora",
+       "blocklist-target": "Destinazione",
+       "blocklist-expiry": "Ammatura",
+       "blocklist-by": "Ammenistratore ca 'o bluccaje",
+       "blocklist-params": "Parametre d' 'o blocco",
+       "blocklist-reason": "Mutivo",
+       "ipblocklist-submit": "Ascìa",
+       "ipblocklist-localblock": "Blocco lucale",
+       "ipblocklist-otherblocks": "Ati {{PLURAL:$1|blocche|blocche}}",
+       "infiniteblock": "indefinito",
+       "expiringblock": "ammatura 'o $1 a 'e $2",
+       "anononlyblock": "sulamente l'anonime",
+       "noautoblockblock": "autoblocco stutato",
+       "createaccountblock": "riggistrazione 'e cunte stutata",
+       "emailblock": "mmasciate e-mail stutate",
+       "blocklist-nousertalk": "nun può cagnà 'a paggena 'e chiacchiera d' 'a soja",
+       "ipblocklist-empty": "'A lista 'e blocche è abbacante.",
+       "ipblocklist-no-results": "L'indirizzo IP o nomme utente c'asciate nun songo bloccate.",
        "blocklink": "ferma",
        "unblocklink": "sblocca",
        "change-blocklink": "càgna blocco",
        "contribslink": "contribuzzione",
+       "emaillink": "manna e-mail",
+       "autoblocker": "Autobloccate pecché l'indirizze IP vuosto è stat'ausato urdemamente 'a \"[[User:$1|$1]]\".\n'O mutivo d' 'o blocco 'e $1 è \"$2\"",
        "blocklogpage": "Blocche",
+       "blocklog-showlog": "St'utente è stato bloccato primma.\n'O riggistro d' 'e blocche se può vedé ccà abbascio pe' riferimento:",
+       "blocklog-showsuppresslog": "St'utente è stato bloccato e annascunuto primma.\n'O riggistro d' 'e luvamiente se può vedé ccà abbascio pe' riferimento:",
        "blocklogentry": "ha fermato \"[[$1]]\" pe' nu mumento 'e $2 $3",
+       "reblock-logentry": "cagnate 'e mpustaziune 'e blocco pe' [[$1]] cu na data d'ammaturamiento 'e $2 $3",
        "blocklogtext": "Chesta è 'a lista d''e azzione 'e blocco e sblocco utente.  'E nnerizze IP bloccate automaticamente nun nce so'. Addumannà 'a [[Special:BlockList|lista bloccate]] pp' 'a lista d''e nnerizze e nomme utente 'o ca blocco nce sta.",
+       "unblocklogentry": "sbluccato $1",
+       "block-log-flags-anononly": "sulamente l'utente anonime",
+       "block-log-flags-nocreate": "riggistrazione 'e cunte stutata",
+       "block-log-flags-noautoblock": "autoblocco stutato",
+       "block-log-flags-noemail": "mmasciate e-mail stutate",
+       "block-log-flags-nousertalk": "nun può cagnà 'a paggena 'e chiacchiera d' 'a toja",
+       "block-log-flags-angry-autoblock": "auto blocco avanzato appicciato",
+       "block-log-flags-hiddenname": "nomme utente annascunnuto",
+       "range_block_disabled": "'A possibbilità 'e bluccà ntervalle 'e indirizze IP nun è appicciata.",
+       "ipb_expiry_invalid": "Tiempo d'ammaturamiento invalido.",
+       "ipb_expiry_temp": "'E blocche d' 'e nomme utente annascunnute hanna essere nfinite.",
+       "ipb_hide_invalid": "Nun se può scancellà stu cunto; tène cchiù 'e {{PLURAL:$1|nu cagnamiento|$1 cagnamiente}}.",
+       "ipb_already_blocked": "\"$1\" è già bloccato.",
+       "ipb-needreblock": "$1 è già bloccato. Vulite cagnà 'e mpustaziune?",
+       "ipb-otherblocks-header": "Ati {{PLURAL:$1|blocche|blocche}}",
+       "unblock-hideuser": "Vuje nun putite sbluccà st'utente, pecché 'o nomme utente 'e chisto è stato già annascunnuto.",
+       "ipb_cant_unblock": "Errore: L'ID $1 d' 'o blocco nun se trova.\nPò essere ca 'o blocco è stato luvato già.",
+       "ipb_blocked_as_range": "Errore: l'IP $1 nun è stato bloccato direttamente e nun se può sbluccà.\n'O blocco, è mmece attivo a livello 'e l'intervallo $2, ca pò essere sbloccato.",
+       "ip_range_invalid": "L'itervallo 'e l'IP nun è valido.",
+       "ip_range_toolarge": "L'intervalle 'e blocche cchiù luonghe 'e /$1 nun songo permesse.",
+       "proxyblocker": "Bloccatore 'e proxy",
+       "proxyblockreason": "L'indirizzo IP d' 'o vuosto è stato bloccato pecché è nu proxy araputo.\nPe' piacere, cuntattate 'o provider 'e l'Internet vuosto o lu suppuorto tecnico d' 'aggenzia vuosta pe' le dà nutizia 'e stu probblema gruosso assaje.",
+       "sorbsreason": "L'indirizzo IP vuosto è elencato comm'a nu proxy araputo dint' 'a lista DNSBL ausata 'a {{SITENAME}}.",
+       "sorbs_create_account_reason": "L'indirizzo IP d' 'o vuosto è elencato comm'a nu proxy araputo dint' 'a DNSBL ausata 'a {{SITENAME}}. Nun putite crià nu cunto.",
+       "xffblockreason": "N'indirizzo IP prisente dint' 'e cap'e paggena X-Forwarded-For, o chillu d' 'o vuosto o chillu 'e n'atu server proxy ca stat'ausann, è stato bloccato. 'O mutivo origgenale 'e blocco era: $1",
+       "cant-see-hidden-user": "L'utente ca state a bluccà è stato già bluccato e annascunnuto. Si nun tenite 'o deritto ''hideuser'', nun putite veré stu blocco d'utente.",
+       "ipbblocked": "Nun putite bloccà o sbluccà utente pecche vuje stesso site bluccato.",
+       "ipbnounblockself": "Nun avite permesso a ve bluccà vuje stesso.",
+       "lockdb": "Blocca 'o database",
+       "unlockdb": "Sblocca 'o database",
+       "lockdbtext": "Bluccanno 'o database se luvarranno l'abbilità 'e tutte l'utente 'e cagnà 'e paggene, cagnà 'e preferenze lloro, cagnà 'a lista 'e paggene cuntrullate e ati cose ca richiedessero cagnamiente ô database.\nPe' piacere cunfermate ca chisto e chello ca vulite fà, e ca luvarrate 'o blocco ô database quanno sta manutenziona sarrà fernuta.",
+       "unlockdbtext": "Sbluccanno 'o database se s'arrepigliarranno l'abbilità 'e tutte l'utente 'e cagnà 'e paggene, cagnà 'e preferenze lloro, cagnà 'a lista 'e paggene cuntrullate e ati cose ca richiedessero cagnamiente ô database.\nPe' piacere cunfermate ca chisto e chello ca vulite fà.",
+       "lockconfirm": "Sì, overo vulesse bluccà 'o database.",
+       "unlockconfirm": "Sì, overo vulesse sbluccà 'o database.",
+       "lockbtn": "Blocca 'o database",
+       "unlockbtn": "Sblocca 'o database",
+       "locknoconfirm": "Nun avite scigliuto 'a casciulella 'e cunferma.",
+       "lockdbsuccesssub": "Blocco d' 'o database secutato",
+       "unlockdbsuccesssub": "'O blocco d' 'o database è stato luvato",
+       "lockdbsuccesstext": "'O database è stato bloccato.<br />\nArricuordateve 'e [[Special:UnlockDB|luvà 'o blocco]] appriesso c' 'a manutenziona sarrà fernuta.",
+       "unlockdbsuccesstext": "'O database è stato sbluccato.",
+       "lockfilenotwritable": "Nun se può scrivere ncopp' 'o file 'e blocco d' 'o database.\nPe' bluccà o sbluccà 'o database abbesuogne 'e scrivere dint' 'o server web.",
+       "databasenotlocked": "'O database nun è bluccato.",
+       "lockedbyandtime": "(pe' {{GENDER:$1|$1}} 'o $2 a 'e $3)",
+       "move-page": "Mòve $1",
+       "move-page-legend": "Mòve paggena",
+       "movepagetext": "Ausanno stu modulo ccà abbascio s'anommenarrà 'a paggena n'ata vota, movenno tutt' 'a cronologgia suja a l'atu nomme.\n'O titolo viecchio s'addeventarrà nu redirect â paggena c' 'o titolo nuovo. Putite agghiurnà 'e redirect ca puntassero ô titolo origgenale automaticamente.\nSi chesto nun facite, state sicuro 'e cuntrullà [[Special:DoubleRedirects|doppie ridirezionamiente]] o [[Special:BrokenRedirects|ridirezionamiente scassate]]. Vuje site 'o responsabbile 'e chillo ca cumbinate, assicurateve ca 'o cullegamiento cuntinua a spuntà addò avess'a spuntà.\n\nVedite bbuono ca 'a paggena <strong>nun</strong> se muoverrà si esiste n'ata paggena c' 'o titolo nuovo, a meno ca è abbacante o ca ce sta na paggena 'e ridirezionamiento senza cronologgia. Chesto significasse ca putite fà turnà 'o nomme viecchio â paggena addò ce steva apprimma si avite cumbinato nu nguacchio p'errore, e nun può sovrascrivere 'a paggena ch'esiste già. <strong>Attenzione!</strong> Chisto può essere nu cagnamiento drastico e inaspettato 'e na paggena famosa assaje; pe' piacere, avite 'a essere sicure-sicure d' 'e conseguenze apprimm' 'e cuntinuà.",
+       "movepagetext-noredirectfixer": "Ausanno stu modulo ccà abbascio s'anommenarrà 'a paggena n'ata vota, movenno tutt' 'a cronologgia suja a l'atu nomme.\n'O titolo viecchio s'addeventarrà nu redirect â paggena c' 'o titolo nuovo. State sicuro 'e cuntrullà [[Special:DoubleRedirects|doppie ridirezionamiente]] o [[Special:BrokenRedirects|ridirezionamiente scassate]]. Vuje site 'o responsabbile 'e chillo ca cumbinate, assicurateve ca 'o cullegamiento cuntinua a spuntà addò avess'a spuntà.\n\nVedite bbuono ca 'a paggena <strong>nun</strong> se muoverrà si esiste n'ata paggena c' 'o titolo nuovo, a meno ca è abbacante o ca ce sta na paggena 'e ridirezionamiento senza cronologgia. Chesto significasse ca putite fà turnà 'o nomme viecchio â paggena addò ce steva apprimma si avite cumbinato nu nguacchio p'errore, e nun può sovrascrivere 'a paggena ch'esiste già. <strong>Attenzione!</strong> Chisto può essere nu cagnamiento drastico e inaspettato 'e na paggena famosa assaje; pe' piacere, avite 'a essere sicure-sicure d' 'e conseguenze apprimm' 'e cuntinuà.",
+       "movepagetalktext": "'A paggena 'e chiacchieria suoccia a chesta sarrà spustata automaticamente cu chesta <strong>a meno che:</strong>\n*Esiste na paggena 'e chiacchieria ca nun è abbacante c' 'o nomme nuovo, o\n*Vuje sciglite accussì abbacantanno 'a casciulella ccà abbascio.\n\nInd' 'a sti case, 'a paggena nun se muoverrà, ma 'a putite sempe scagnà manualmente si vulite.",
        "movearticle": "Spusta 'a paggena",
+       "moveuserpage-warning": "<strong>Attenziò:</strong> Vuje state a muovere na paggena utente. Vedite bbuono ca sulamente 'a paggena sarrà spustata e l'utente <em>nun</em> sarrà reanummenato.",
+       "movecategorypage-warning": "<strong>Attenziò:</strong> Vuje state a muovere na categurìa. Vedite bbuono ca sulamente 'a paggena sarrà spustata e 'a categurìa viecchia <em>nun</em> sarrà cagnata â nnova.",
+       "movenologintext": "Vuje avite 'a essere n'utente riggistrato e [[Special:UserLogin|cullegato]] pe' spustà na paggena.",
+       "movenotallowed": "Nun tenite 'o permesso pe' spustà paggene.",
+       "movenotallowedfile": "Nun tenite 'o permesso pe' spustà file.",
+       "cant-move-user-page": "Nun tenite 'o permesso pe' spustà 'e paggene utente (staccannole cumme sottopàggene).",
+       "cant-move-to-user-page": "Nun tenite 'o permesso pe' spustà na paggena 'a na paggena utente (sulamente p' 'e sottopaggene utente).",
+       "cant-move-category-page": "Nun tenite 'o permesso pe' muovere paggene 'e categurìa.",
+       "cant-move-to-category-page": "Nun tenite 'o permesso pe' muovere 'a paggena ncopp' 'a na categurìa",
        "newtitle": "Titulo nuovo:",
+       "move-watch": "Cuntrolla sta paggena",
        "movepagebtn": "Spusta 'a paggena",
+       "pagemovedsub": "Spustamento fatto",
+       "movepage-moved": "<strong>\"$1\" è stata spustata int' 'a \"$2\"</strong>",
+       "movepage-moved-redirect": "Nu redirezionamiento è stato criato.",
+       "movepage-moved-noredirect": "'A criazione o lu redirezionamiento è stato luvato.",
        "articleexists": "Na paggena cu chisto nomme asiste già, o pure 'o nomme scegliuto nun è buono.  Scegliere n'ato titulo.",
+       "cantmove-titleprotected": "Nun putite spustà 'a paggena a stu pizzo pecchè 'o titolo nuovo è stato prutetto 'a criazione",
+       "movetalk": "Muove 'a paggena 'e chiacchiera suoccia a chesta",
+       "move-subpages": "Mòve 'e sottopàggene (nfin' 'a $1)",
+       "move-talk-subpages": "Mòve 'e sottopaggene 'e chiacchiera (nfin' 'a $1)",
+       "movepage-page-exists": "'A paggena $1 esiste già e nun se può scrivere ncoppa.",
+       "movepage-page-moved": "'A paggena $1 s'è spustat' 'a $2.",
+       "movepage-page-unmoved": "'A paggena $1 nun se può spustà a $2.",
+       "movepage-max-pages": "'O massimo 'e $1 {{PLURAL:$1|paggena|paggene}} è stato spustato e nun se ne ponno spustà cchiù 'n automatico.",
        "movelogpage": "Spustamente",
+       "movelogpagetext": "Ccà abbascio sta na lista d' 'e paggene spustate.",
+       "movesubpage": "{{PLURAL:$1|Sottopaggena|Sottopaggene}}",
+       "movesubpagetext": "Sta paggena tene $1 {{PLURAL:$1|sottopaggena|sottopaggene}} ccà abbascio.",
+       "movenosubpage": "Sta paggena nun tene sottopaggene.",
        "movereason": "Raggióne",
-       "revertmove": "ripristina",
+       "revertmove": "arrepiglia",
        "delete_and_move": "Scancèlla e spusta",
+       "delete_and_move_text": "== Scancellamiento richiesto ==\n'A paggena 'e destinazione \"[[:$1]]\" esiste già.\n'A vulite scancellà pe' ne putè ffà 'o spazio abbacante necessario?",
        "delete_and_move_confirm": "Sì, suprascrivi 'a paggena asistente",
+       "delete_and_move_reason": "Scancellata pe ne fà spazio abbacante e putè spustà 'a \"[[$1]]\"",
+       "selfmove": "'O titolo 'e sorgente e destinazione songh' 'e stesse;\nnun se può muovere na paggena ncopp' 'a essa stessa.",
+       "immobile-source-namespace": "Nun se ponno muovere 'e paggene dint' 'o namespace \"$1\"",
+       "immobile-target-namespace": "Nun se ponno muovere 'e paggene dint' 'o namespace \"$1\"",
+       "immobile-target-namespace-iw": "'O cullegamiento interwiki nun è na destinazione bona pe spustà na paggena.",
+       "immobile-source-page": "Sta paggena nun se può spustà.",
+       "immobile-target-page": "Nun se può spustà a chillu titolo 'e destinazione.",
+       "bad-target-model": "'A destinazione scigliuta aùsa nu mudello 'e cuntenute differénte. Nun se può cagnà 'a $1 a $2.",
+       "imagenocrossnamespace": "Nun se può muovere stu file dint' 'a nu namespace nun-file",
+       "nonfile-cannot-move-to-file": "Nun se può muovere n'oggetto ca nun è nu file a dint'o namespace d' 'e file",
+       "imagetypemismatch": "L'estenziona nova d' 'o file nun s'accucchia c' 'o tipo suojo",
+       "imageinvalidfilename": "'O nomme d' 'o file 'e destinazione nun è buono",
+       "fix-double-redirects": "Agghiuorna ogne redirezionamiento ca spuntasse ô titolo origginale",
+       "move-leave-redirect": "Lassa nu ridirezionamiento arreto",
+       "protectedpagemovewarning": "<strong>Attenziò:</strong> sta paggena è stata prutetta 'n modo tale ca sulamente l'utente ch' 'e privilegge d'ammenistratore 'a ponno muovere.\nL'urdemo elemento d' 'o riggistro è scritto ccà abbascio pe' n'avé riferimento:",
+       "semiprotectedpagemovewarning": "'''Nota:''' Sta paggena è prutetta 'n modo ca sulamente l'utente riggistrate 'a ponno mòvere.\nL'urdemo elemento d' 'o riggistro è scritto ccà abbascio pe n'avé nfurmazione:",
+       "move-over-sharedrepo": "== 'O file esiste ==\n[[:$1]] esiste ncopp'a l'archivio spartuto. Spustanno 'o file ncopp'a stu titolo sovrascreverrà 'o file spartuto.",
+       "file-exists-sharedrepo": "'O nomme d' 'o file c'avite scigliuto se sta ausanno dint'a l'archivio spartuto.\nPe' piacere, scigliete n'atu nomme.",
        "export": "Spurta 'e ppaggene",
+       "exporttext": "Vuje putite espurtà 'e teste e cagnà 'a cronologgia 'e na paggena particolare o n'inzieme 'e paggena ca stessero dint' 'a cocche XML.\nChisto po' essere 'mpurtato int'a n'ata wiki ausanno [[Special:Import|mporta pàggene]] 'e MediaWiki.\n\nPe' spurtà paggene, mettite 'o titolo dint' 'e casciulelle ccà abbascio, nu titolo pe' linea e sciglite si vulite 'a verziona 'e mò cu tutt' 'e verziun' 'assieme, o pùre sulamente 'a verziona 'e mò c' 'a nfurmaziona ncopp' 'a ll'urdemo cagnamiento.\n\nComme urtema possibbiletà, putite pure ausà nu cullegamento, p'esempio [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] p' 'a pàggena \"[[{{MediaWiki:Mainpage}}]]\".",
+       "exportall": "Spurta tutt' 'e paggene",
+       "exportcuronly": "Appenne sulamente 'a verziona 'e mo, e nun tutt' 'a cronologgia",
+       "exportnohistory": "----\n'''Vedite bbuono:''' 'A funzione 'esportazione d' 'a storia sana d' 'e paggene, ausanno stu modulo, è stata stutata pe' mutive 'e prestaziune.",
+       "exportlistauthors": "Appenne 'a lista sana 'e cuntribbutore p'ogne paggena",
+       "export-submit": "Esporta",
+       "export-addcattext": "Azzecca paggene d' 'a categurìa:",
+       "export-addcat": "Azzecca",
+       "export-addnstext": "Azzecca paggene d' 'o namespace:",
+       "export-addns": "Azzecca",
+       "export-download": "Astipa comm'a nu file",
+       "export-templates": "Include 'e template",
+       "export-pagelinks": "Include 'e paggene cullegate ca spuntassero nfin' 'a na prufunnità 'e:",
        "allmessages": "'Mmasciate d''o sistema",
        "allmessagesname": "Nomme",
+       "allmessagesdefault": "Mmasciata 'e testo predefinita",
        "allmessagescurrent": "Testo 'e mo",
+       "allmessagestext": "Chest'è na lista 'e tutt' 'e mmasciate 'e sistema ca se ponno ascià dint' 'o namespace 'e Mediawiki.\nPe' piacere vedite [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Lucalizzazione 'e MediaWiki] e [//translatewiki.net translatewiki.net] si vulite cuntribbuì â lucalizzaziona generica 'e MediaWiki.",
+       "allmessagesnotsupportedDB": "Sta paggena nun se può ausà pecché 'a funziona <strong>$wgUseDatabaseMessages</strong> è stata stutata.",
+       "allmessages-filter-legend": "Filtro",
+       "allmessages-filter": "Filtra cu nu stato personalizzate:",
+       "allmessages-filter-unmodified": "Senza cagnamiente",
+       "allmessages-filter-all": "Tutto",
+       "allmessages-filter-modified": "Cagnate",
+       "allmessages-prefix": "Filtra pe' prefisso:",
+       "allmessages-language": "Lengua:",
+       "allmessages-filter-submit": "Vàje",
+       "allmessages-filter-translate": "Traduce",
        "thumbnail-more": "Ingrandisce",
+       "filemissing": "File perdute",
+       "thumbnail_error": "Errore crianno l'anteprimma 'e miniatura: $1",
+       "thumbnail_error_remote": "Mmasciata d'errore 'a $1:\n$2",
+       "djvu_page_error": "Pàggena DjVu fore 'e lemmeto",
+       "djvu_no_xml": "Nun se può piglià 'o XML p' 'o file DjVu",
+       "thumbnail-temp-create": "Nun se può crià na miniatura temporanea d' 'o file",
+       "thumbnail-dest-create": "Nun se può astipà 'a miniatura dint' 'a destinazione",
+       "thumbnail_invalid_params": "Parametre 'e miniatura invalide",
+       "thumbnail_dest_directory": "Nun se può crià 'a cartella 'e destinazione",
+       "thumbnail_image-type": "'O tipo d'immaggene nun è suppurtato",
+       "thumbnail_gd-library": "Configurazione d' 'a libbreria GD incompleta: funziona perza $1",
+       "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]].",
+       "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",
+       "import-interwiki-templates": "Include tutt' 'e template",
        "import-interwiki-submit": "Mpurta",
+       "import-interwiki-namespace": "Namespace 'e destinazione:",
+       "import-interwiki-rootpage": "Paggena princepale 'e destinazione (opzionale):",
+       "import-upload-filename": "Nomme d' 'o file",
+       "import-comment": "Commento:",
+       "importtext": "Pe' piacere spurtate 'o file d' 'a wiki surgente ausanno l'[[Special:Export|utilità 'e sportazione]].\nScarrecatevella dint' 'o computer d' 'o vuosto e carrecate n'ata vota ccà.",
+       "importstart": "Mpurtanno 'e paggene...",
+       "import-revision-count": "$1 {{PLURAL:$1|verzione|verziune}}",
+       "importnopages": "Nisciuna pàggene 'a mpurtà.",
+       "imported-log-entries": "Mpurtate $1 {{PLURAL:$1|evento d' 'o riggistro|evente d' 'o riggistro}}.",
+       "importfailed": "Mpurtaziona fallita: <nowiki>$1</nowiki>",
+       "importunknownsource": "Nun se sape 'o tipo 'e sorgente 'e mpurtaziona",
+       "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.",
+       "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.",
+       "importuploaderrortemp": "'A carreca d' 'o file mpurtato nun se facette.\nNa cartella temporanea nun se truova.",
+       "import-parse-failure": "mpurtaziune XML scassata pe' n'errore d'analiso",
+       "import-noarticle": "Nisciuna paggena 'a mpurtà!",
+       "import-nonewrevisions": "Nisciuna verziona mpurtata (Tutt' 'e verziune so' state già mpurtate o pure zumpajeno pe' bbia 'e cocch'errore).",
+       "xml-error-string": "$1 a 'a linea $2, culonne $3 (byte $4): $5",
+       "import-upload": "Carreca 'e date 'e XML",
+       "import-token-mismatch": "Se so' perdut' 'e date d' 'a sessione.\nProva n'ata vota.",
+       "import-invalid-interwiki": "Nun se può mpurtà d' 'a wiki specificata.",
+       "import-error-edit": "'A paggena \"$1\" nun è stata mpurtata pecché nun avite 'o permesso p' 'a putè cagnà.",
+       "import-error-create": "'A paggena \"$1\" nun è stata mpurtata pecché nun avite 'o permesso p' 'a putè crià.",
+       "import-error-interwiki": "'A paggena \"$1\" nun è stata mpurtata pecché 'o nomme suojo stà astipato pe ne ffà 'o cullegamiento a fore (interwiki).",
+       "import-error-special": "'A paggena \"$1\" nun è stata mpurtata pecché appartene a nu namespace specifico ca nun permette sti paggene.",
+       "import-error-invalid": "'A paggena \"$1\" nun è stata mpurtata pecché 'o nomme 'e mpurtazione nun è bbuono ncopp'a sta wiki.",
+       "import-error-unserialize": "'A verzione $2 d' 'a paggena \"$1\" nun se può deserializzà. 'A virziona è stata reportata p'ausà 'o mudello 'e cuntenute $3 serializzate cumme $4.",
+       "import-error-bad-location": "'A verzione $2 aúsa nu mudello 'e cuntenuto $3 ca nun se può memorizzà ncopp'a \"$1\" 'e stu wiki, pecché 'a paggena nun supporta stu mudello.",
+       "import-options-wrong": "{{PLURAL:$2|opzione sbagliata|opziune sbagliate}}: <nowiki>$1</nowiki>",
+       "import-rootpage-invalid": "'A paggena princepale c'avite dato tène nu titolo invalido.",
+       "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-title": "Secutanno test pe' $1",
+       "javascripttest-pagetext-noframework": "Sta paggena è riservata pe' l'esecuziune d' 'e test 'e Javascript.",
+       "javascripttest-pagetext-unknownframework": "Ambiente 'e test scanusciuto \"$1\".",
+       "javascripttest-pagetext-frameworks": "Pe' piacere sciglite uno 'e ll'ambiente 'e test ccà abbascio: $1",
+       "javascripttest-pagetext-skins": "Sciglite nu skin pe' ne fà 'e test:",
+       "javascripttest-qunit-intro": "Vedite 'a [$1 documentaziona d' 'o test] ncopp'a mediawiki.org.",
+       "javascripttest-qunit-heading": "Ambiente 'e test MediaWiki JavaScript QUnit",
        "tooltip-pt-userpage": "A toja paggena utente",
+       "tooltip-pt-anonuserpage": "'A paggena utente pe l'IP ca vuje state cagnanno cumme",
        "tooltip-pt-mytalk": "A toja paggena 'e discussione",
+       "tooltip-pt-anontalk": "Chiacchieria ncopp' 'e cagnamiente 'a st'indirizzo IP",
        "tooltip-pt-preferences": "Preferenze d''e mmeje",
+       "tooltip-pt-watchlist": "'A lista d' 'e paggene ca state a cuntrullà",
        "tooltip-pt-mycontris": "Elenco dde tuje contributte",
        "tooltip-pt-login": "A reggistrazione è cunsigliata",
        "tooltip-pt-logout": "Jésce (logout)",
+       "tooltip-pt-createaccount": "Pigliateve curaggio e criate n'utente e trasìte; ancora ca chisto nun s'avesse 'a ffà pe' fforza",
        "tooltip-ca-talk": "Vede e discussione rilative a chista paggena",
        "tooltip-ca-edit": "Puo modifica chista paggena. Ppe favore usa 'o pulsante 'e anteprimma primma 'e salva",
        "tooltip-ca-addsection": "Cummincia 'na nova sezzione",
        "tooltip-ca-viewsource": "Chista paggena è prutetta, ma puo vere 'o codice sorgente",
        "tooltip-ca-history": "Vversione precedente 'e chista paggena",
        "tooltip-ca-protect": "Prutegge chesta paggena",
+       "tooltip-ca-unprotect": "Càgna 'a prutezzione 'e chesta paggena",
        "tooltip-ca-delete": "Scancèlla chista paggena",
+       "tooltip-ca-undelete": "Arrepiglia 'e cagnamiente fatte 'a sta paggena apprimma ca fuieno scancellate",
        "tooltip-ca-move": "Spusta chista paggena",
+       "tooltip-ca-watch": "Azzecca sta paggena int' 'a lista 'e paggene cuntrullate vuosta",
+       "tooltip-ca-unwatch": "Lèva sta paggena d' 'a lista 'e paggene cuntrullate vuosta",
        "tooltip-search": "Truova dint'ô {{SITENAME}}",
+       "tooltip-search-go": "Vaje â paggena cu stu nomme si esiste",
        "tooltip-search-fulltext": "Ascià 'o testo indicato dint'e paggene",
        "tooltip-p-logo": "Visita a paggena prencepale",
        "tooltip-n-mainpage": "Visita a paggena prencepale",
        "tooltip-n-mainpage-description": "Visita a paggena prencepale",
-       "tooltip-n-portal": "Descrizione d&#39;'o prugietto, che po' ffa, addò truvà 'e ccose",
+       "tooltip-n-portal": "Descrizione d' 'o prugietto, che po' ffa, addò truvà 'e ccose",
+       "tooltip-n-currentevents": "Ascìa 'e nfurmaziune ncopp' 'e fatte succiesse mò mò",
        "tooltip-n-recentchanges": "Ennece dde urdeme cagnamiénte ddo sito",
        "tooltip-n-randompage": "Na paggena qualsiase",
        "tooltip-n-help": "Paggena 'e ajùto",
        "tooltip-t-whatlinkshere": "'Na lista 'e tutte e paggene ca song cullegate a chista",
        "tooltip-t-recentchangeslinked": "Urdeme cagnamiénte dde paggene ca cullegano a chesta",
+       "tooltip-feed-rss": "RSS feed pe sta pàggena",
+       "tooltip-feed-atom": "Atom feed pe sta pàggena",
        "tooltip-t-contributions": "Lista dde contributte 'e chisto utente",
        "tooltip-t-emailuser": "Manna 'nu email a chisto utente",
+       "tooltip-t-info": "Cchiù nfurmaziune ncopp'a sta paggena",
        "tooltip-t-upload": "Careca file",
        "tooltip-t-specialpages": "Lista 'e tutte e paggene speciale",
        "tooltip-t-print": "Vversione pe' stampa 'e chista paggena",
        "tooltip-t-permalink": "Jonta permanente a chista vversione dda paggena",
        "tooltip-ca-nstab-main": "Vere a paggena e contenuto",
        "tooltip-ca-nstab-user": "Vere a paggena utente",
+       "tooltip-ca-nstab-media": "Vide 'a pàggena d' 'e media",
        "tooltip-ca-nstab-special": "Chista è 'na paggena speciale, nun può essere càgnata",
        "tooltip-ca-nstab-project": "Vere a paggena 'e servizio",
        "tooltip-ca-nstab-image": "Vere a paggena ddo file",
+       "tooltip-ca-nstab-mediawiki": "Vide 'a mmasciata d' 'o sistema",
        "tooltip-ca-nstab-template": "Vere 'o modello",
+       "tooltip-ca-nstab-help": "Vide 'a paggena d'aiuto",
        "tooltip-ca-nstab-category": "Vere a paggena d\"a categurìa",
        "tooltip-minoredit": "Rénne chìsto cagnamiénto cchiù ppiccirìllo.",
        "tooltip-save": "Sàrva 'e cagnamiénte.",
        "tooltip-preview": "Primma 'e sarvà, vìre primma chille ca hê cagnàte!",
+       "tooltip-diff": "Fà vedé 'e cagnamiente c'avite fatto ô testo",
+       "tooltip-compareselectedversions": "Fà vedé 'e differenze nfra tutt' 'e dduje verziune scigliute 'e sta paggena",
+       "tooltip-watch": "Azzecca sta paggena int' 'a lista 'e paggene cuntrullate vuosta",
+       "tooltip-watchlistedit-normal-submit": "Lèva 'e titule",
+       "tooltip-watchlistedit-raw-submit": "Agghiurna l'elenco 'e paggene cuntrullate",
+       "tooltip-recreate": "Arricrèa 'e paggene pure si so state scancellate",
+       "tooltip-upload": "Accummencia 'a carreca",
        "tooltip-rollback": "\"A vascio\" annulla 'e modefeche 'e chista paggena ell'ultimo contributore cu n' uneco click",
+       "tooltip-undo": "\"Annulla\" annulla stu cagnamiento e arape 'u form 'e cagnamiento facenno vedé l'anteprimma.\nPermette azzeccà nu mutivo dint' 'o riepilego.",
+       "tooltip-preferences-save": "Riggistra 'e preferenze",
+       "tooltip-summary": "Miette nu riepilego piccerillo",
+       "anonymous": "{{PLURAL:$1|utente|utente}} anonime 'e {{SITENAME}}",
+       "siteuser": "Utente 'e {{SITENAME}} $1",
+       "anonuser": "Utente anonime 'e {{SITENAME}} $1",
+       "lastmodifiedatby": "Sta paggena è stata cagnata l'urdema vota 'e $2, d' 'o $1 da $3.",
+       "othercontribs": "Basata ncopp' 'a fatica 'e $1.",
        "others": "ate",
+       "siteusers": "{{PLURAL:$2|utente|utente}} 'e {{SITENAME}} $1",
+       "anonusers": "{{PLURAL:$2|utente|utente}} anonime 'e {{SITENAME}} $1",
+       "creditspage": "Auture d' 'a paggena",
+       "nocredits": "Nun ce stanno nfurmaziune ncopp'a l'auture 'e sta paggena.",
+       "spamprotectiontitle": "Filtro 'e prutezione anti-spam",
+       "spamprotectiontext": "'A paggena ca vulite astipà è stata bloccata p' 'o filtro anti-spam.\nChesto è succiesso pecché avite miso nu link 'e chille ca stanno dint' 'a lista nira 'e site 'e fore.",
+       "spamprotectionmatch": "'O testo ccà abbascio è stato nzignato p' 'o filtro anti-spam: $1",
+       "spambot_username": "Sistema MediaWiki 'e pulezzia anti-spam",
+       "spam_reverting": "Arrepiglianno l'urdema verziona ca nun cuntene 'e link a $1",
+       "spam_blanking": "Tutt' 'e verziune cuntenenno cullegamiente a $1, pulezzate e sbacantate",
+       "spam_deleting": "Tutt' 'e verziune cuntenenno cullegamiente a $1, scancellanno",
+       "simpleantispam-label": "Cuntrollo anti-spam.\n<strong>NUN</strong> ghienchere!",
+       "pageinfo-title": "Nfurmaziune pe' \"$1\"",
+       "pageinfo-not-current": "Scusate, nun se ponno piglià sti nfurmaziune p' 'e verziune viecchie.",
+       "pageinfo-header-basic": "Nfurmaziune bbase",
+       "pageinfo-header-edits": "Cronologgia d' 'e cagnamiente",
+       "pageinfo-header-restrictions": "Càgna prutezione",
+       "pageinfo-header-properties": "Proprietà d' 'a paggena",
+       "pageinfo-display-title": "Fà vedé 'o titolo",
+       "pageinfo-default-sort": "Chiave d'ordinamento 'e bbase",
+       "pageinfo-length": "Llonghezza d' 'a paggena ('n byte)",
+       "pageinfo-article-id": "ID d' 'a paggena",
+       "pageinfo-language": "Lengua d' 'a paggena 'e cuntenute",
+       "pageinfo-content-model": "Mudello 'e cuntenute d' 'a paggena",
+       "pageinfo-robot-policy": "Indicizzate 'a 'e robbot",
+       "pageinfo-robot-index": "Permesso",
+       "pageinfo-robot-noindex": "Nun permesso",
+       "pageinfo-watchers": "Nummero 'e visite â paggena",
+       "pageinfo-few-watchers": "Meno 'e $1 {{PLURAL:$1|visita|visite}}",
+       "pageinfo-redirects-name": "Nummero 'e redirect a sta paggena",
+       "pageinfo-subpages-name": "Nummero 'e sottopaggene 'e sta paggena",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirect}}; $3 {{PLURAL:$3|nun redirect}})",
+       "pageinfo-firstuser": "Criatore d' 'a paggena",
+       "pageinfo-firsttime": "Data 'e criazione d' 'a paggena",
+       "pageinfo-lastuser": "Urdemo cuntribbutore",
+       "pageinfo-lasttime": "Data 'e ll'urdemo cagnamiento",
+       "pageinfo-edits": "Nummero totale 'e cagnamiente",
+       "pageinfo-authors": "Nummero totale d'auture differénte",
+       "pageinfo-recent-edits": "Nummero 'e cagnamiente 'e poco tempo fà (ind'a ll'urdeme $1)",
+       "pageinfo-recent-authors": "Nummero d'auture differénte pe' cagnamiente fatte poco tempo fà",
+       "pageinfo-magic-words": "{{PLURAL:$1|Parola maggica|Parole maggiche}} ($1)",
+       "pageinfo-hidden-categories": "{{PLURAL:$1|Categurìa annascunnuta|Categurìe annascunnute}} ($1)",
+       "pageinfo-templates": "Template {{PLURAL:$1|appennuto|appennute}} ($1)",
+       "pageinfo-transclusions": "{{PLURAL:$1|Paggena appennuta|Paggene appennute}} ncopp'a ($1)",
+       "pageinfo-toolboxlink": "Nfurmaziune d' 'a paggena",
+       "pageinfo-redirectsto": "Reindirizza a",
+       "pageinfo-redirectsto-info": "nfurmaziune",
+       "pageinfo-contentpage": "Cuntata comme na paggena 'e cuntenute",
+       "pageinfo-contentpage-yes": "Sì",
+       "pageinfo-protect-cascading": "Prutezione 'n cascata 'a ccà",
+       "pageinfo-protect-cascading-yes": "Sì",
+       "pageinfo-protect-cascading-from": "'E pruteziune veneno 'n cascata 'a",
+       "pageinfo-category-info": "Nfurmaziune ncopp' 'a categurìa",
+       "pageinfo-category-pages": "Nummero 'e paggene",
+       "pageinfo-category-subcats": "Nummero 'e sottocategurìe",
+       "pageinfo-category-files": "Nummero 'e file",
+       "markaspatrolleddiff": "Nzègna comme cuntrullata",
+       "markaspatrolledtext": "Nzegna sta paggena comme cuntrullata",
+       "markedaspatrolled": "Nzegnata comme cuntrullata",
+       "markedaspatrolledtext": "'A verziona scigliuta 'e [[:$1]] è stata nzegnata comme cuntrullata.",
+       "rcpatroldisabled": "Funzione cuntrollo 'e ll'urdeme cagnamiente stutata",
+       "rcpatroldisabledtext": "'A funzione 'e cuntrolle 'e ll'urdeme cagnamiente è stutata mo.",
+       "markedaspatrollederror": "Nun se può nzignà comme cuntrullata",
+       "markedaspatrollederrortext": "Avite 'a specificà na verziona a nzegnà comme cuntrullata.",
+       "markedaspatrollederror-noautopatrol": "Nun avite permesso 'a nzegnà 'e cagnamiente vuoste comme cuntrullate.",
+       "markedaspatrollednotify": "Stu cagnamiento a $1 è stato nzegnato comme cuntrullato.",
+       "markedaspatrollederrornotify": "Errore pe' tramente ca se nzegnava comme cuntrullata.",
+       "patrol-log-page": "Riggistro 'e cuntrolle",
+       "patrol-log-header": "Chest'è nu riggistro ch' 'e verziune cuntrullate.",
+       "log-show-hide-patrol": "$1 riggistro 'e cuntrolle",
+       "deletedrevision": "Viecchia verziona scancellata $1",
+       "filedeleteerror-short": "Errore pe' tramente ca se scancellava nu file: $1",
+       "filedeleteerror-long": "N'errore s'è apprisentato pe' tramente ca se scancellava 'o file:\n\n$1",
+       "filedelete-missing": "'O file \"$1\" nun se può scancellà pecche nun esiste proprio.",
+       "filedelete-old-unregistered": "'A verziona d' 'o file specificato \"$1\" nun se trova dint' 'o database.",
+       "filedelete-current-unregistered": "'O file specificato \"$1\" nun ce sta dint' 'o database.",
+       "filedelete-archive-read-only": "'A cartella d'archiviazione \"$1\" nun se può scrivere dint' 'o server.",
        "previousdiff": "← Càgnamiento cchiù viecchio",
        "nextdiff": "Cagnamiénte successivo →",
+       "mediawarning": "<strong>Attenziò:</strong> Stu file putesse cuntenè codece malegno.\nSi 'o secutate, 'o sistema vuosto se putesse scassà.",
+       "imagemaxsize": "Lemmeto â dimenzione 'e l'immaggene:<br /><em>(p' 'e paggene 'e descrizione d' 'o file)</em>",
+       "thumbsize": "Dimenziona d' 'a miniatura:",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|paggena|paggene}}",
+       "file-info": "dimenziona d' 'o file: $1, tipo MIME: $2",
        "file-info-size": "$1 × $2 pixel, dimenzione ddo file: $3, tipo MIME: $4",
+       "file-info-size-pages": "$1 × $2 pixel, dimenzione d' 'o file: $3, tipe 'e MIME: $4, $5 {{PLURAL:$5|paggena|paggene}}",
+       "file-nohires": "Nun ce sta na risoluzione cchiù auta.",
+       "svg-long-desc": "File SVG, dimenziune nommenale $1 × $2 pixel, dimenzione d' 'o file: $3",
+       "svg-long-desc-animated": "File SVG animato, dimenziune nommenale $1 × $2 pixel, dimenzione d' 'o file: $3",
+       "svg-long-error": "File SVG invalido: $1",
        "show-big-image": "File 'e origgine",
+       "show-big-image-preview": "Dimenziune 'e sta anteprimma: $1.",
+       "show-big-image-other": "{{PLURAL:$2|N'ata resoluzione|Ati resoluziune}}: $1.",
+       "show-big-image-size": "$1 x $2 pixel",
+       "file-info-gif-looped": "ciclico",
+       "file-info-gif-frames": "$1 {{PLURAL:$1|frame|frame}}",
+       "file-info-png-looped": "ciclico",
+       "file-info-png-repeat": "curruto $1 {{PLURAL:$1|vota|vote}}",
+       "file-info-png-frames": "$1 {{PLURAL:$1|frame|frame}}",
+       "file-no-thumb-animation": "<strong>Vedite bbuono: Pe' bbia 'e lemmetaziune tecniche, 'e miniature 'e stu file nun sarrann'animate.</strong>",
+       "file-no-thumb-animation-gif": "<strong>Vedite bbuono: Pe' bbia 'e lemmetaziune tecniche, 'e miniature 'e auta resoluzione 'e nu file GIF comm'a chesta nun sarrann'animate.</strong>",
+       "newimages": "Galleria 'e file nuove",
+       "imagelisttext": "Ccà abbascio ce sta na lista 'e '''$1''' {{PLURAL:$1|file|file}} arrecetate $2.",
+       "newimages-summary": "Sta paggena speciale fà vedé tuttequante l'urdeme file carrecate.",
+       "newimages-legend": "Filtro",
+       "newimages-label": "Nomme d' 'o file (o nu piezz' 'e chesto):",
+       "newimages-showbots": "Mmusta cárreche 'e robbot",
        "noimages": "Nun nc'è nind' 'a veré.",
        "ilsubmit": "Truova",
+       "bydate": "pe' data",
+       "sp-newimages-showfrom": "Faje vedé 'e file nuove fatte a partì 'a $3 $2",
+       "seconds": "{{PLURAL:$1|secondo|seconde}}",
+       "minutes": "{{PLURAL:$1|$1 minuto|$1 minute}}",
+       "hours": "{{PLURAL:$1|n'ora|$1 ore}}",
+       "days": "{{PLURAL:$1|$1 juorno|$1 ghiuorne}}",
+       "weeks": "{{PLURAL:$1|$1 semmana|$1 semmane}}",
+       "months": "{{PLURAL:$1|$1 mese|$1 mese}}",
+       "years": "{{PLURAL:$1|$1 anno|$1 anne}}",
+       "ago": "$1 fà",
+       "just-now": "mò mò",
+       "hours-ago": "$1 {{PLURAL:$1|ora|ore}} fà",
+       "minutes-ago": "$1 {{PLURAL:$1|minuto|minute}} fà",
+       "seconds-ago": "$1 {{PLURAL:$1|secondo|seconde}} fà",
+       "monday-at": "Lunnerì a 'e $1",
+       "tuesday-at": "Marterì a 'e $1",
+       "wednesday-at": "Miercurì a 'e $1",
+       "thursday-at": "Gioverì a 'e $1",
+       "friday-at": "Viernarì a 'e $1",
+       "saturday-at": "Sàbbato a 'e $1",
+       "sunday-at": "Dummeneca a 'e $1",
+       "yesterday-at": "Aiere a 'e $1",
+       "bad_image_list": "'O formato è chesto:\n\nSulamente l'elemente d' 'a lista ('e righe c'accummenciano cu *) songhe cunziderate.\n'O primmo cullegamiento ncopp'a na linea qualunque adda essere nu cullegamiento a nu file ca nun è bbuono.\nTutte l'ati link ca spuntano â stessa riga songhe cunziderate eccezziune, p.e. 'e paggene addò 'o file se putesse richiamà normalmente.",
        "metadata": "Metadate",
+       "metadata-help": "Stu file cuntene nfurmaziune agghiunte, probabilmente 'a na fotocamera o nu scanner ausate pe' crià o digitalizà.\nSi 'o file è stato cagnato 'a 'o stato origginale suojo, certi dettaglie può darse ca nun se vedeno ncopp' 'o file già cagnato.",
+       "metadata-expand": "Fa vedè 'e dettaglie spannute",
+       "metadata-collapse": "Annascunne 'e dettaglie spannute",
+       "metadata-fields": "'E metadata 'e l'immaggene ccà mmustate sarranno azzeccate dint' 'a mmosta d' 'a paggena quanno 'a tabbella 'e metadata è collassata.\nL'ati sarranno normalmente annascunnute.\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": "Larghezza",
+       "exif-imagelength": "Autezza",
+       "exif-bitspersample": "Bit pe' componente",
+       "exif-compression": "Schema 'e compressione",
+       "exif-photometricinterpretation": "Composizione d' 'e pixel",
+       "exif-orientation": "Orientamento",
+       "exif-samplesperpixel": "Nummero 'e componente",
+       "exif-planarconfiguration": "Arricietto 'e date",
+       "exif-ycbcrsubsampling": "Rapporto 'e campiunamiento Y / C",
+       "exif-ycbcrpositioning": "Mpizzamento d' Y e C",
+       "exif-xresolution": "Resoluzione orizzontale",
+       "exif-yresolution": "Resoluzione verticale",
+       "exif-stripoffsets": "Pizzo addò sta l'immaggine",
+       "exif-rowsperstrip": "Nummero 'e righe pe' striscia",
+       "exif-stripbytecounts": "Byte pe' striscia compressa",
+       "exif-jpeginterchangeformat": "Distanza 'a SOI JPEG",
+       "exif-jpeginterchangeformatlength": "Byte 'e date JPEG",
+       "exif-whitepoint": "Cromaticetà d' 'o punto janco",
+       "exif-primarychromaticities": "Cromaticetà d' 'e culore primmarie",
+       "exif-ycbcrcoefficients": "Coefficiente d' 'a matrice 'e trasformazione d' 'o spazio 'e culore",
+       "exif-referenceblackwhite": "Paro 'e riferimento 'e valore janche e nire",
+       "exif-datetime": "Data e ora 'e cagnamiento d' 'o file",
+       "exif-imagedescription": "Titulo 'e l'immaggene",
+       "exif-make": "Frabbeca ca muntaje 'a camera",
+       "exif-model": "Mudello d' 'a camera",
+       "exif-software": "Software ausàto",
+       "exif-artist": "Autore",
+       "exif-copyright": "Titolare d' 'o Copyright",
+       "exif-exifversion": "Verzione d'Exif",
+       "exif-flashpixversion": "Verziona Flashpix suppurtata",
+       "exif-colorspace": "Spazio d' 'e culore",
+       "exif-componentsconfiguration": "Significato d'ogne componente",
+       "exif-compressedbitsperpixel": "Modo 'e compressione 'e l'immaggene",
+       "exif-pixelydimension": "Larghezza 'e l'immaggene",
+       "exif-pixelxdimension": "Autezza 'e l'immaggene",
+       "exif-usercomment": "Note 'e ll'utente",
+       "exif-relatedsoundfile": "File audio cullegato",
+       "exif-datetimeoriginal": "Data e ora d' 'a criazione d' 'e date",
+       "exif-datetimedigitized": "Data e ora 'e digitalizzazziona",
+       "exif-subsectime": "DateTime centeseme",
+       "exif-subsectimeoriginal": "DateTimeOriginal centeseme",
+       "exif-subsectimedigitized": "DateTimeDigitized centeseme",
+       "exif-exposuretime": "Tiempo d'esposizione",
+       "exif-exposuretime-format": "$1 sec ($2)",
+       "exif-fnumber": "Nummero p' 'o F",
+       "exif-exposureprogram": "Prugramma d'esposizione",
+       "exif-spectralsensitivity": "Senzitività spettrale",
+       "exif-isospeedratings": "Senzibbiletà ISO",
+       "exif-shutterspeedvalue": "Velocità d' 'o nchiuretore APEX",
+       "exif-aperturevalue": "Apertura APEX",
+       "exif-brightnessvalue": "Lumenosetà APEX",
+       "exif-exposurebiasvalue": "Correzzione d'esposizione APEX",
+       "exif-maxaperturevalue": "Apiertura massima",
+       "exif-subjectdistance": "Distanza d' 'o soggetto",
+       "exif-meteringmode": "Metodo 'e mmisura",
+       "exif-lightsource": "Sorgente 'e luce",
+       "exif-flash": "Flash",
+       "exif-focallength": "Distanza focale d' 'a lente",
+       "exif-subjectarea": "Area d' 'o soggetto",
+       "exif-flashenergy": "Putenza d' 'o flash",
+       "exif-focalplanexresolution": "Resoluzione X ncopp' 'o piano focale",
+       "exif-focalplaneyresolution": "Resoluzione Y ncopp' 'o piano focale",
+       "exif-focalplaneresolutionunit": "Unità 'e resoluzione d' 'o piano focale",
+       "exif-subjectlocation": "Pizzo addò stà 'o soggetto",
+       "exif-exposureindex": "Innece d'esposizione",
+       "exif-sensingmethod": "Sistema 'e rilevazione",
+       "exif-filesource": "Origgene d' 'o file",
+       "exif-scenetype": "Tipo 'e scena",
+       "exif-customrendered": "Prucesso d' 'a immaggene",
+       "exif-exposuremode": "Modo d'esposizione",
+       "exif-whitebalance": "Valanza 'e janco",
+       "exif-digitalzoomratio": "Rapporto zoom diggitale",
+       "exif-focallengthin35mmfilm": "Focale eguale a 35 mm",
+       "exif-scenecapturetype": "Tipo d'acquisizziona",
+       "exif-gaincontrol": "Cuntrollo d' 'a scena",
+       "exif-contrast": "Contrasto",
+       "exif-saturation": "Saturazione",
+       "exif-sharpness": "Nitidezza",
+       "exif-devicesettingdescription": "Descrizione d' 'e mpustaziune d' 'o dispositivo",
+       "exif-subjectdistancerange": "Scala distanza soggetto",
+       "exif-imageuniqueid": "ID 'e l'immaggine univoco",
+       "exif-gpsversionid": "Verzione d' 'e tag GPS",
+       "exif-gpslatituderef": "Latitudine nord o sud",
+       "exif-gpslatitude": "Latitudine",
+       "exif-gpslongituderef": "Longitudine est o ovest",
+       "exif-gpslongitude": "Longitudine",
+       "exif-gpsaltituderef": "Riferimento pe' l'autezza",
+       "exif-gpsaltitude": "Autezza",
+       "exif-gpstimestamp": "orario d' 'o GPS (rilorgio atomico)",
+       "exif-gpssatellites": "Satellite ausate p' 'e mmisure",
+       "exif-gpsstatus": "Stato d' 'o ricevitore",
+       "exif-gpsmeasuremode": "Modo 'e mmisura",
+       "exif-gpsdop": "Precisione d' 'a mmisura",
+       "exif-gpsspeedref": "Unità 'e mmisura",
+       "exif-gpsspeed": "Velocità d' 'o ricevitore GPS",
+       "exif-gpstrackref": "Riferimento p' 'a direzzione d' 'o movimento",
+       "exif-gpstrack": "Direzzione d' 'o movimento",
+       "exif-gpsimgdirectionref": "Riferimento p' 'a direzzione 'e ll'immaggene",
+       "exif-gpsimgdirection": "Direzzione 'e ll'immaggene",
+       "exif-gpsmapdatum": "Rilevamento geodetico ausato",
+       "exif-gpsdestlatituderef": "Riferimento p' 'a latitudine 'e destinazione",
+       "exif-gpsdestlatitude": "Latitudine 'e destinazione",
+       "exif-gpsdestlongituderef": "Riferimento p' 'a longitudine 'e destinazione",
+       "exif-gpsdestlongitude": "Longitudine 'e destinazione",
+       "exif-gpsdestbearingref": "Riferimento p' 'a direzzione 'e destinazione",
+       "exif-gpsdestbearing": "Direzione 'e destinazzione",
+       "exif-gpsdestdistanceref": "Riferimento p' 'a latitudine 'e destinazione",
+       "exif-gpsdestdistance": "Distanza d' 'a destinazione",
+       "exif-gpsprocessingmethod": "Nomme d' 'o metodo 'e prucesso GPS",
+       "exif-gpsareainformation": "Nomme 'e ll'area GPS",
+       "exif-gpsdatestamp": "Data d' 'o GPS",
+       "exif-gpsdifferential": "Currezzione differenziale d' 'o GPS",
+       "exif-jpegfilecomment": "Commento d' 'o file JPEG",
+       "exif-keywords": "Parole chiave",
+       "exif-worldregioncreated": "Reggione d' 'o munno addò è stata scattata sta foto",
+       "exif-countrycreated": "Paese d' 'o munno addò è stata scattata sta foto",
+       "exif-countrycodecreated": "Codece p' 'o paese addò è stata scattata sta foto",
+       "exif-provinceorstatecreated": "Pruvincia o Stato addò è stata scattata sta foto",
+       "exif-citycreated": "Città addò è stata scattata sta foto",
+       "exif-sublocationcreated": "Sottolocazione d' 'a cettà addò è stata scattata sta foto",
+       "exif-worldregiondest": "Reggiune d' 'o munno ca se sta mmustanno",
+       "exif-countrydest": "Paise ca se stanno mmustanno",
+       "exif-countrycodedest": "Codece p' 'e paise ca se stanno mmustanno",
+       "exif-provinceorstatedest": "Pruvince o state ca se stanno mustanno",
+       "exif-citydest": "Città ca se stà mustanno",
+       "exif-sublocationdest": "Sottolocazione d' 'a città ca se stà mmustanno",
+       "exif-objectname": "Titolo curto",
+       "exif-specialinstructions": "Struziune speciale",
+       "exif-headline": "Ntestazzione",
+       "exif-credit": "Credite/Fornitore",
+       "exif-source": "Funte",
+       "exif-editstatus": "Stato editoriale 'e ll'immaggene",
+       "exif-urgency": "Priorità",
+       "exif-fixtureidentifier": "Nomme d' 'accunciamiento",
+       "exif-locationdest": "Locazione raffigurata",
+       "exif-locationdestcode": "Codece 'e lloco raffigurato",
+       "exif-objectcycle": "Orario d' 'o juorno p' 'o quale è stato pruggettato stu media",
+       "exif-contact": "Nfurmaziune 'e cuntatto",
+       "exif-writer": "Scrittore",
+       "exif-languagecode": "Lengua",
+       "exif-iimversion": "Verziona IIM",
+       "exif-iimcategory": "Categurìa",
+       "exif-iimsupplementalcategory": "Categurìe supplementarie",
+       "exif-datetimeexpires": "Nun ausà aroppo",
+       "exif-datetimereleased": "Relassato 'o",
+       "exif-originaltransmissionref": "Codece d' 'a locazione d' 'a trasmissione origgenale",
+       "exif-identifier": "Identificatore",
+       "exif-lens": "Lunghezze ausate",
+       "exif-serialnumber": "Nummero seriale d' 'a fotocamera",
+       "exif-cameraownername": "Titolare d' 'a fotocamera",
+       "exif-label": "Etichetta",
+       "exif-datetimemetadata": "Data de l'urdemo cagnamiento a 'e metadata",
+       "exif-nickname": "Nomme nfurmale 'e ll'immaggene",
+       "exif-rating": "Punteggio ('e 5)",
+       "exif-rightscertificate": "Certificato 'e gestione d' 'e deritte",
+       "exif-copyrighted": "Stato d' 'o copyright",
+       "exif-copyrightowner": "Titolare d' 'o Copyright",
+       "exif-usageterms": "Termine d'auso",
+       "exif-webstatement": "Affermazione d' 'o copyright on line",
+       "exif-originaldocumentid": "ID unico d' 'o documento origgenale",
+       "exif-licenseurl": "URL p' 'a licienza d' 'o copyright",
+       "exif-morepermissionsurl": "Nfurmaziune 'e licienza alternative",
+       "exif-attributionurl": "Quanno s'ausasse n'ata vota sta fatica, pe' piaccere falla spunta cu nu link ccà a",
+       "exif-preferredattributionname": "Quanno s'ausasse n'ata vota sta fatica, pe' piacere dincette chi l'ha fatta",
+       "exif-pngfilecomment": "Commento d' 'o file PNG",
+       "exif-disclaimer": "Avvertimiènto",
+       "exif-contentwarning": "Avvertimiènto ncopp' 'e cuntenute",
+       "exif-giffilecomment": "Commento d' 'o file GIF",
+       "exif-intellectualgenre": "Tipo d'elemento",
+       "exif-subjectnewscode": "Codece d' 'o suggetto",
+       "exif-scenecode": "Codece 'e scena IPTC",
+       "exif-event": "Fatto raffigurato",
+       "exif-organisationinimage": "Organizzazione raffigurata",
+       "exif-personinimage": "Perzona raffigurata",
+       "exif-originalimageheight": "Autezza 'e ll'immaggene apprimma ca fosse rintagliata",
+       "exif-originalimagewidth": "Larghezza 'e ll'immaggene apprimma ca fosse rintagliata",
+       "exif-compression-1": "Senza cumprimì",
+       "exif-compression-2": "Gruppe CCITT 3 Decodifeche 'Esecuzione d' 'a lunghezza 1-Dimenzionale Cagnate 'a Huffman",
+       "exif-compression-3": "Gruppe CCITT 3 'e decodifeche d' 'o fax",
+       "exif-compression-4": "Codifeca fax CCITT gruppo 4",
+       "exif-copyrighted-true": "Prutetto 'a copyright",
+       "exif-copyrighted-false": "Status d' 'o copyright nun mpustato",
+       "exif-unknowndate": "Data scanusciuta",
+       "exif-orientation-1": "Nurmale",
+       "exif-orientation-2": "Revutato orizzontalmente",
+       "exif-orientation-3": "Votato a 180°",
+       "exif-orientation-4": "Revutato verticalmente",
+       "exif-orientation-5": "Votato a 90º 'n senzo cuntrario a l'aco d' 'o rilorgio e revutato verticalmente",
+       "exif-orientation-6": "Votato a 90° 'n senzo cuntrario a l'aco d' 'o rilorgio",
+       "exif-orientation-7": "Votato a 90º 'n senzo 'e l'aco d' 'o rilorgio e revutato verticalmente",
+       "exif-orientation-8": "Votato a 90° 'n senzo 'e l'aco d' 'o rilorgio",
+       "exif-planarconfiguration-1": "furmato 'e blocche",
+       "exif-planarconfiguration-2": "furmato lineare",
        "exif-xyresolution-i": "$1 punte pe pollice (dpi)",
+       "exif-colorspace-65535": "Nun calibbrato",
+       "exif-componentsconfiguration-0": "nun esiste",
+       "exif-exposureprogram-0": "Nun definito",
+       "exif-exposureprogram-1": "Manuale",
+       "exif-exposureprogram-2": "Programma nurmale",
+       "exif-exposureprogram-3": "Priorità d'apertura",
+       "exif-exposureprogram-4": "Priorità 'e sposizione",
+       "exif-exposureprogram-5": "Programma ccreativo (basato ncopp' 'o profunno d' 'o campo)",
+       "exif-exposureprogram-6": "Prugramma d'azione (basato ncopp' 'a velocità 'e riprese)",
+       "exif-exposureprogram-7": "Modo ritratto (soggette vicine c' 'o sfondo fore 'o foco)",
+       "exif-exposureprogram-8": "Panurama (soggette luntane c' 'o sfondo int' 'o foco)",
+       "exif-subjectdistance-value": "$1 metre",
        "exif-meteringmode-0": "Scanusciuto",
+       "exif-meteringmode-1": "Medio",
+       "exif-meteringmode-2": "Medie Pesate Centrate",
+       "exif-meteringmode-3": "Spot",
+       "exif-meteringmode-4": "Multi Spot",
+       "exif-meteringmode-5": "Pattern",
+       "exif-meteringmode-6": "Parziale",
        "exif-meteringmode-255": "Ato",
        "exif-lightsource-0": "Scanusciuta",
+       "exif-lightsource-1": "Luce d' 'o ghiuorno",
+       "exif-lightsource-2": "Fluorescente",
+       "exif-lightsource-3": "Tungsteno (luce cavera cavera)",
+       "exif-lightsource-4": "Flash",
+       "exif-lightsource-9": "Tiempi belle",
        "exif-lightsource-10": "'Ntruvulato",
        "exif-lightsource-11": "Aumbruso",
+       "exif-lightsource-12": "Florescenza a 'a luce d' 'o juorno (D 5700 - 7100K)",
+       "exif-lightsource-13": "Florescenza a 'o janco d' 'o juorno (N 4600 - 5400K)",
+       "exif-lightsource-14": "Florescenza a 'o janco friddo (W 3900 - 4500K)",
+       "exif-lightsource-15": "Florescenza janca (WW 3200 - 3700K)",
+       "exif-lightsource-17": "Luce standàrd A",
+       "exif-lightsource-18": "Luce standàrd B",
+       "exif-lightsource-19": "Luce standàrd C",
+       "exif-lightsource-24": "Luce 'e studio ISO ô tungsteno",
+       "exif-lightsource-255": "N'ata sorgente 'e luce",
+       "exif-flash-fired-0": "'O flash nun è scattato",
+       "exif-flash-fired-1": "Flash scattato",
+       "exif-flash-return-0": "nisciuna funzione ncopp' 'o ritorno d' 'a luce stroboscopeca",
+       "exif-flash-return-2": "luce stroboscopeca 'e ritorno nun scummigliata",
+       "exif-flash-return-3": "luce stroboscopeca 'e ritorno scummigliata",
+       "exif-flash-mode-1": "flash forzato apicciato",
+       "exif-flash-mode-2": "flash forzato stutato",
+       "exif-flash-mode-3": "modo automateco",
+       "exif-flash-function-1": "Nisciuna funzione flash",
+       "exif-flash-redeye-1": "modalità pe' luvà ll'uocchie russe",
+       "exif-focalplaneresolutionunit-2": "pollece",
+       "exif-sensingmethod-1": "Indefinite",
+       "exif-sensingmethod-2": "Sensore d'area 'e culore a unu-chip",
+       "exif-sensingmethod-3": "Sensore d'area 'e culore a ddoje-chip",
+       "exif-sensingmethod-4": "Sensore d'area 'e culore a tre-chip",
+       "exif-sensingmethod-5": "Sensore 'e culore sequenziale",
+       "exif-sensingmethod-7": "Sensore trilineare",
+       "exif-sensingmethod-8": "Sensore 'e culore sequenziale e lineare",
+       "exif-filesource-3": "Camera diggitale",
+       "exif-scenetype-1": "Fotografia diretta",
+       "exif-customrendered-0": "Prucesso normale",
+       "exif-customrendered-1": "Prucesso personalizzato",
+       "exif-exposuremode-0": "Auto esposizione",
+       "exif-exposuremode-1": "Esposizione a mmano",
+       "exif-exposuremode-2": "Bracketing automateco",
+       "exif-whitebalance-0": "Valanzamiento d' 'e janche automateco",
+       "exif-whitebalance-1": "Valanzamiento d' 'e janche manuale",
+       "exif-scenecapturetype-0": "Standard",
+       "exif-scenecapturetype-1": "Panorama",
+       "exif-scenecapturetype-2": "Ritratto",
+       "exif-scenecapturetype-3": "Scena 'e notte",
        "exif-gaincontrol-0": "Nisciuno",
+       "exif-gaincontrol-1": "Vascio aumento d' 'o guadagno",
+       "exif-gaincontrol-2": "Aveto aumento d' 'o guadagno",
+       "exif-gaincontrol-3": "Vascio acalamento d' 'o guadagno",
+       "exif-gaincontrol-4": "Aveto acalamento d' 'o guadagno",
+       "exif-contrast-0": "Nurmale",
+       "exif-contrast-1": "Muscio",
+       "exif-contrast-2": "Tuosto",
+       "exif-saturation-0": "Nurmale",
+       "exif-saturation-1": "Saturazione vascia",
+       "exif-saturation-2": "Saturazione aveta",
+       "exif-sharpness-0": "Nurmale",
+       "exif-sharpness-1": "Muscio",
+       "exif-sharpness-2": "Tuosto",
        "exif-subjectdistancerange-0": "Scanusciuta",
-       "watchlistall2": "tutte",
+       "exif-subjectdistancerange-1": "Macro",
+       "exif-subjectdistancerange-2": "Vista 'e vicino",
+       "exif-subjectdistancerange-3": "Vista 'e luntano",
+       "exif-gpslatitude-n": "Latitudine nord",
+       "exif-gpslatitude-s": "Latitudine sud",
+       "exif-gpslongitude-e": "Longitudine est",
+       "exif-gpslongitude-w": "Longitudine ovest",
+       "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|metro|metre}} 'a copp' 'o livello d' 'o mare",
+       "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|metro|metre}} abbascio 'o livello d' 'o mare",
+       "exif-gpsstatus-a": "Mmisure ncurzo",
+       "exif-gpsstatus-v": "Mmisure nteroperabbele",
+       "exif-gpsmeasuremode-2": "Mmisure a ddoje-dimenziune",
+       "exif-gpsmeasuremode-3": "Mmisure a tre-dimenziune",
+       "exif-gpsspeed-k": "Chilometre a l'ora",
+       "exif-gpsspeed-m": "Miglie pe' ora",
+       "exif-gpsspeed-n": "Nurece",
+       "exif-gpsdestdistance-k": "Chilometre",
+       "exif-gpsdestdistance-m": "Miglie",
+       "exif-gpsdestdistance-n": "Miglie nauteche",
+       "exif-gpsdop-excellent": "Eccellente ($1)",
+       "exif-gpsdop-good": "Bbuono ($1)",
+       "exif-gpsdop-moderate": "Apposto ($1)",
+       "exif-gpsdop-fair": "Discreto ($1)",
+       "exif-gpsdop-poor": "Puveriello ($1)",
+       "exif-objectcycle-a": "Sulamente 'a matina",
+       "exif-objectcycle-p": "Sulamente 'a sera",
+       "exif-objectcycle-b": "Tutt' 'e dduje matina e sera",
+       "exif-gpsdirection-t": "Direziona overa",
+       "exif-gpsdirection-m": "Direziona magnetica",
+       "exif-ycbcrpositioning-1": "Centrato",
+       "exif-ycbcrpositioning-2": "Co-mpizzato",
+       "exif-dc-contributor": "Contribbuture",
+       "exif-dc-coverage": "Scopo spaziale o temporale d' 'o media",
+       "exif-dc-date": "Data (e)",
+       "exif-dc-publisher": "Editore",
+       "exif-dc-relation": "Media cullegate",
+       "exif-dc-rights": "Deritte",
+       "exif-dc-source": "Media sorgente",
+       "exif-dc-type": "Tipe 'e media",
+       "exif-rating-rejected": "Scartate",
+       "exif-isospeedratings-overflow": "Cchiù granne 'e 65535",
+       "exif-iimcategory-ace": "Arte, cultura e spassatiempe",
+       "exif-iimcategory-clj": "Crimine e legge",
+       "exif-iimcategory-dis": "Guaie e brutte fatte",
+       "exif-iimcategory-fin": "Economia e affare",
+       "exif-iimcategory-edu": "Studie",
+       "exif-iimcategory-evn": "Ambiente",
+       "exif-iimcategory-hth": "Salute",
+       "exif-iimcategory-hum": "Nteresse umano",
+       "exif-iimcategory-lab": "Fatica",
+       "exif-iimcategory-lif": "Stile 'e vita e tiempo libbero",
+       "exif-iimcategory-pol": "Puliteca",
+       "exif-iimcategory-rel": "Religgione e crerenze",
+       "exif-iimcategory-sci": "Scienze e tecnologgie",
+       "exif-iimcategory-soi": "Teme suggiale",
+       "exif-iimcategory-spo": "Sport",
+       "exif-iimcategory-war": "Uerra, cunflitte e arrevuòte",
+       "exif-iimcategory-wea": "Meteo",
+       "exif-urgency-normal": "Normale ($1)",
+       "exif-urgency-low": "Vascia  ($1)",
+       "exif-urgency-high": "Aveta ($1)",
+       "exif-urgency-other": "Priorità definite 'a l'utente ($1)",
        "namespacesall": "Tutte",
        "monthsall": "tutte",
+       "confirmemail": "Cunfermate 'o nderizzo mail",
+       "confirmemail_noemail": "Nun tenite nu nderizzo e-mail bbuono pe' ve putè configurà ncopp' 'e [[Special:Preferences|preferenze vuoste]].",
+       "confirmemail_text": "{{SITENAME}} bbuò ca vuje validasseve 'o nderizzo e-mail vuosto apprimm' 'e putè ausà 'e ffunziune 'e-mail.\nSpremmete 'o buttone 'e sotto pe' mannà na mmasciata e-mail 'e cunferma a l'indirizzo vuosto.\n'A mmasciata e-mail ca v'arreverrà tenesse nu cullegamento cu nu codece; carrecate 'o cullegamiento dint' 'a nu navigatóre web pe' ve putè cunfermà cu stu ndirizzo e nce ffà assapé 'o sito ch' 'è bbuono.",
+       "confirmemail_pending": "Nu codece 'e cunferma è stato gia mannato a l'email vuosto;\nSi mò mò nu cunto utente avite criato, allora putite aspettà cocche minuto ca chist'arriva, apprimm' 'e pruvà n'ata vota 'addimannà nu codece nuovo.",
+       "confirmemail_send": "Manna nu codece 'e cunferma",
+       "confirmemail_sent": "Mmasciata e-mail 'e cunferma mannata.",
+       "confirmemail_oncreate": "'O codece 'e cunferma è stato mannato al'indirizzo e-mail d' 'o vuosto.\nStu codece nun è addimannato pe' ve putè fà trasì, ma vuje n'avite abbesuogno 'e l'avé apprimm' 'e putè ausà cocche funziune 'e chille ca facessero l'uso d' 'o cunto e-mail ncopp'a sta wiki.",
+       "confirmemail_sendfailed": "{{SITENAME}} nun può mannà 'a mmasciata e-mail d' 'a vuosta 'e cunferma.\nPe' piacere cuntrullate si 'o nderizzo e-mail c'avite scritto tenesse cocche carattere nvalido.\n\nMmasciata d'errore a 'o mailer: $1",
+       "confirmemail_invalid": "'O codece 'e cunferma nun è bbuono.\n'O codece fosse ammaturato.",
        "confirmemail_needlogin": "Abbesognate $1 pe cunfirmà 'o nnerizzo 'e e-mail d''o vuosto.",
+       "confirmemail_success": "'O ndirizzo e-mail d' 'o vuosto è stato cunfermato.\nVuje mò ne putite [[Special:UserLogin|trasì]] e ve putite spassà ncopp' 'a wiki.",
        "confirmemail_loggedin": "'O nnerizzo 'e e-mail è vàleto",
+       "confirmemail_subject": "Indirizzo e-mail 'e cunferma pe' {{SITENAME}}",
+       "confirmemail_body": "Coccheruno, può darse ca site vuje, 'a l'indirizzo IP $1,\nha riggistrato nu cunto utente \"$2\" cu st'indirizzo e-mail ncopp'a {{SITENAME}}.\n\nPe' putè cunfermà ca stu cunto è stato overo criato e vuje e ve putè apiccià 'a funziona e-mail 'e {{SITENAME}}, arapite stu cullegamento dint' 'o navigatóre web d' 'o vuosto:\n\n$3\n\nSi vuje *NUN* avite riggistrato 'o cunto utente, secutate stu cullegamento pe' ve scancellà st'indirizzo e-mail utente:\n\n$5\n\nStu codece 'e cunferma murarrà 'o $4.",
+       "confirmemail_body_changed": "Coccheruno, può darse ca site vuje, 'a l'indirizzo IP $1,\nha cagnato l'indirizzo e-mail d' 'o cunto utente \"$2\" cu st'indirizzo e-mail ncopp'a {{SITENAME}}.\n\nPe' putè cunfermà ca stu cunto è stato overo criato e vuje e ve putè apiccià n'ata vota 'a funziona e-mail 'e {{SITENAME}}, arapite stu cullegamento dint' 'o navigatóre web d' 'o vuosto:\n\n$3\n\nSi vuje *NUN* avite riggistrato 'o cunto utente, secutate stu cullegamento pe' ve scancellà st'indirizzo e-mail utente:\n\n$5\n\nStu codece 'e cunferma murarrà 'o $4.",
+       "confirmemail_body_set": "Coccheruno, può darse ca site vuje, 'a l'indirizzo IP $1,\nha mpustato nu cunto utente \"$2\" cu st'indirizzo e-mail ncopp'a {{SITENAME}}.\n\nPe' putè cunfermà ca stu cunto è stato overo criato e vuje e ve putè apiccià 'a funziona e-mail 'e {{SITENAME}}, arapite stu cullegamento dint' 'o navigatóre web d' 'o vuosto:\n\n$3\n\nSi vuje *NUN* avite riggistrato 'o cunto utente, secutate stu cullegamento pe' ve scancellà st'indirizzo e-mail utente:\n\n$5\n\nStu codece 'e cunferma murarrà 'o $4.",
+       "confirmemail_invalidated": "Cunferma 'e l'indirizze e-mail scangelleta",
+       "invalidateemail": "Scancella 'a cunferma 'e l'e-mail",
+       "scarytranscludedisabled": "['A funziona cullegamiento nfra site wiki è stata stutata]",
+       "scarytranscludefailed": "[L'analisi d' 'o template s'è scassato pe' $1]",
+       "scarytranscludefailed-httpstatus": "[L'analisi d' 'o template s'è scassato pe' $1: HTTP $2]",
+       "scarytranscludetoolong": "[URL è troppo luonga]",
        "deletedwhileediting": "Attenziòne: quaccherùno have scancellàto chesta pàggena doppo ca tu accuminciàste â scrìvere!",
+       "confirmrecreate": "L'utente [[User:$1|$1]] ([[User talk:$1|Chiacchiera]]) ha scancellato sta paggena aroppo ca l'avite accumminciato a cagnà, cu stu mutivo:\n: <em>$2</em>\nPe' piacere cunfermate ca vulite overamente crià sta paggena n'ata vota.",
+       "confirmrecreate-noreason": "L'utente [[User:$1|$1]] ([[User talk:$1|Chiacchiera]]) ha scancellato sta paggena aroppo ca l'avite accumminciato a cagnà. Pe' piacere cunfermate ca vulite overamente crià sta paggena n'ata vota.",
+       "recreate": "Crìa n'ata vota",
+       "confirm_purge_button": "OK",
+       "confirm-purge-top": "Pulezza 'a cache 'e sta paggena?",
+       "confirm-purge-bottom": "Pulezzanno 'a cache d' 'a paggena se può vedè 'a verziona cchiù agghiurnata d' 'a paggena.",
+       "confirm-watch-button": "OK",
+       "confirm-watch-top": "Vulite azzeccà sta paggena int' 'a lista 'e paggene cuntrullate vuosta?",
+       "confirm-unwatch-button": "OK",
+       "confirm-unwatch-top": "Vulite luvà sta paggena d' 'a lista 'e paggene cuntrullate vuosta?",
+       "quotation-marks": "\"$1\"",
+       "imgmultipageprev": "← paggena 'e primma",
+       "imgmultipagenext": "paggena successiva →",
+       "imgmultigo": "Vaje!",
+       "imgmultigoto": "Vaje ncopp' 'a paggena $1",
+       "img-lang-default": "(lengua predefinita)",
+       "img-lang-info": "Fà addeventà sta paggena comm'a $1. $2",
+       "img-lang-go": "Vaje",
+       "ascending_abbrev": "crisc",
+       "descending_abbrev": "dicrisc",
+       "table_pager_next": "Paggena successiva",
+       "table_pager_prev": "Paggena 'e primma",
+       "table_pager_first": "Primma paggena",
+       "table_pager_last": "Urdema paggena",
+       "table_pager_limit": "Mmusta $1 elemente pe' paggena",
+       "table_pager_limit_label": "Elemente pe' paggena:",
+       "table_pager_limit_submit": "Vaje",
+       "table_pager_empty": "Nisciuno resultato",
+       "autosumm-blank": "Pulezza 'a paggena",
+       "autosumm-replace": "Cuntenute scagnate cu '$1'",
        "autoredircomment": "Redirect â paggena [[$1]]",
        "autosumm-new": "Paggena criate ch''o: $1",
+       "autosumm-newblank": "Criata na paggena abbacante",
+       "lag-warn-normal": "'E cagnamiente cchiù nuove 'e $1 {{PLURAL:$1|secondo|seconde}} può darse ca nun se ponno vedé int'a sta lista.",
+       "lag-warn-high": "Pe' bbìa ca 'o server d' 'o database trica, 'e cagnamiente cchiù nuove 'e $1 {{PLURAL:$1|secondo|seconde}} può darse ca nun se ponno vedé dint'a sta lista.",
+       "watchlistedit-normal-title": "Cagna l'elenco 'e paggene cuntrullate",
+       "watchlistedit-normal-legend": "Lèva titule 'a l'elenco 'e paggene cuntrullate",
+       "watchlistedit-normal-explain": "'E titule ncopp'a l'elenco 'e paggene cuntrullate se mmustano ccà abbascio.\nPe' ne luvà nu titolo, ghienchite 'a casciulella ca se trova annanz' 'a cchesto, e fà click \"{{int:Watchlistedit-normal-submit}}\".\nPutite pure [[Special:EditWatchlist/raw|cagnà 'a lista a mmano]].",
+       "watchlistedit-normal-submit": "Lèva 'e titule",
+       "watchlistedit-normal-done": "{{PLURAL:$1|1 titolo è stato|$1 titule so' state}} luvate 'a l'elenco 'e paggene cuntrullate d' 'o vuosto:",
+       "watchlistedit-raw-title": "Cagna l'elenco 'e paggene cuntrullate ncruro",
+       "watchlistedit-raw-legend": "Cagna l'elenco 'e paggene cuntrullate ncruro",
+       "watchlistedit-raw-explain": "'E titule ncopp'a l'elenco 'e paggene cuntrullate se ponno cagnà si se lèvano 'a l'elenco;\nnu titolo ogne linea.\nQuanno è fernuto, clickate ncopp'a \"{{int:Watchlistedit-raw-submit}}\".<br />\nPutite pure [[Special:EditWatchlist|ausà 'o cagnatore standard]].",
+       "watchlistedit-raw-titles": "Titule:",
+       "watchlistedit-raw-submit": "Agghiurna l'elenco 'e paggene cuntrullate",
+       "watchlistedit-raw-done": "L'elenco 'e paggene cuntrullate è stato agghiurnato.",
+       "watchlistedit-raw-added": "{{PLURAL:$1|nu titolo è|$1 titule so'}} stat'azzeccate:",
+       "watchlistedit-raw-removed": "{{PLURAL:$1|nu titolo è stato luvato|$1 titule so' state luvate}}:",
+       "watchlistedit-clear-title": "Elenco 'e cuntrollo pulezzato",
+       "watchlistedit-clear-legend": "Pulezza l'elenco 'e paggene cuntrullate",
+       "watchlistedit-clear-explain": "Tutte sti titule se luvarranno 'a l'elenco 'e paggene cuntrullate vuosto",
+       "watchlistedit-clear-titles": "Titule:",
+       "watchlistedit-clear-submit": "Pulezza l'elenco 'e paggene cuntrullate (Chesto è pe' sempe!)",
+       "watchlistedit-clear-done": "L'elenco 'e paggene cuntrullate vuosto è stat'abbacantato.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|nu titolo è stato luvato|$1 titule so' state luvate}}:",
+       "watchlistedit-too-many": "Ce stanno troppe paggene 'a veré ccà.",
+       "watchlisttools-clear": "Abbacanta l'elenco 'e paggene cuntrullate",
+       "watchlisttools-view": "Vide 'e cagnamiente mpurtante",
+       "watchlisttools-edit": "Vide e cagna l'elenco 'e paggene cuntrullate",
+       "watchlisttools-raw": "Cagna l'elenco 'e paggene cuntrullate ncruro",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|chiacchiere]])",
+       "unknown_extension_tag": "Tag 'e stensione scanusciuto \"$1\"",
+       "duplicate-defaultsort": "<strong>Attenziò:</strong> A chiave d'arricetto \"$2\" se miette ncuollo a nu valore 'e primma \"$1\".",
+       "duplicate-displaytitle": "<strong>Attenziò:</strong> A chiave d'arricetto \"$2\" se scagna p' 'o valore 'e primma \"$1\".",
+       "invalid-indicator-name": "<strong>Errore:</strong> attribbuto <code>name</code> 'e ll'innecature d' 'o stato d' 'a paggena nu può rummanè abbacante.",
+       "version": "Verziona",
+       "version-extensions": "Estenziune installate",
+       "version-skins": "Skin installate",
+       "version-specialpages": "Paggene speciale",
+       "version-parserhooks": "Hook analizzature",
+       "version-variables": "Variabbele",
+       "version-antispam": "Funziune pe' se scanzà 'o spam",
+       "version-other": "Ato",
+       "version-mediahandlers": "Gestore d' 'e cuntenute multimediale",
+       "version-hooks": "Hook",
+       "version-parser-extensiontags": "Tag pe' l'estenziune 'e l'analizzatore",
+       "version-parser-function-hooks": "Funziune hook 'e l'analizzatore",
+       "version-hook-name": "Nomme d' 'o hook",
+       "version-hook-subscribedby": "Sottoscritto 'a",
+       "version-no-ext-name": "[nisciuno nomme]",
+       "version-license": "Licienza MediaWiki",
+       "version-ext-license": "Licienza",
+       "version-ext-colheader-name": "Stenzione",
+       "version-skin-colheader-name": "Aspetto grafeco (skin)",
+       "version-ext-colheader-version": "Verzione",
+       "version-ext-colheader-license": "Licienza",
+       "version-ext-colheader-description": "Descrizzione",
+       "version-ext-colheader-credits": "Auture",
+       "version-license-title": "Licienza pe' $1",
+       "version-license-not-found": "Pe' cheste stenziune nun ce sta nisciuna nfurmazione ndettaglio ncopp' 'a licienza.",
+       "version-credits-title": "Credite pe' $1",
+       "version-credits-not-found": "Pe' cheste stenziune nun ce sta nisciuna nfurmazione ndettaglio ncopp' 'e credite.",
+       "version-poweredby-credits": "Sta wiki funziona pe' bbìa 'e <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001-$1 $2.",
+       "version-poweredby-others": "ati",
+       "version-poweredby-translators": "tradutture 'e translatewiki.net",
+       "version-credits-summary": "Nuje vulessemo tené a mmente 'e perzune ccà abbascio pe' purtà rispetto a 'e cuntribbute 'e lloro ncopp'a [[Special:Version|MediaWiki]].",
+       "version-license-info": "MediaWiki è nu software libbero; vuje 'o putite redestribbuì e/o cagnà sott' 'e termine d' 'a licienza GNU GPL ('a Licienza Pubbreca Generale) comme pubbrecata d' 'a Free Software Foundation; o pure 'a verziona 2 d' 'a Licienza, o pure (comme vulite vuje) 'a n'ata verziona cchiù nnova.\n\nMediaWiki è destribbuita c' 'a speranza d'essere utile, ma SENZA NISCIUNA GARANZIA; senza manco 'a garanzia p' 'a CUMMERCIABBELETÀ O IDONIETÀ PE' NU SCOPO PARTICOLARE. Iate a vedé 'a GNU GPL pe' n'avé cchiù nfurmaziune.\n\nAvísseve 'a ricevere [{{SERVER}}{{SCRIPTPATH}}/COPYING na copia d' 'a Licienza GNU GPL] cu stu prugramma; si nò, scrivete â 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 liggite sta paggena ncopp' 'a l'Internet].",
+       "version-software": "Software installato",
+       "version-software-product": "Prodotto",
+       "version-software-version": "Verziona",
+       "version-entrypoints": "Punte 'e trasuta 'e l'URL",
+       "version-entrypoints-header-entrypoint": "Punto 'e trasuta",
+       "version-entrypoints-header-url": "URL",
+       "redirect": "Rediretto 'a nu file, n'utente, na paggena o n'ID 'e na verziona",
+       "redirect-legend": "Rediretto ca spuntasse a nu file o na paggena",
+       "redirect-summary": "Sta pàggena speciale redireziona a nu file (dato 'o nomme d' 'o file), na pàggene (dato n'ID 'e verziona), o 'na pàggene utente (dato n'ID nummereca 'e l'utende). Ause: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
+       "redirect-submit": "Vaje",
+       "redirect-lookup": "Ascìa:",
+       "redirect-value": "Valore:",
+       "redirect-user": "ID utenza",
+       "redirect-page": "ID d' 'a paggena",
+       "redirect-revision": "Sarva revisione",
+       "redirect-file": "Nomme d\"o file",
+       "redirect-not-exists": "Valore nun accucchiato",
+       "fileduplicatesearch": "Ascìa 'e file duprecate",
+       "fileduplicatesearch-summary": "Circa pe' file duprecate cu bbase 'o valore hash.",
+       "fileduplicatesearch-legend": "Circa pe' nu duprecato",
+       "fileduplicatesearch-filename": "Nomme d' 'o file",
+       "fileduplicatesearch-submit": "Truova",
+       "fileduplicatesearch-info": "$1 × $2 pixel, dimenzione d' 'o file: $3<br />tipo MIME: $4",
+       "fileduplicatesearch-result-1": "'O file \"$1\" non ce tene nu duprecato eguale eguale.",
+       "fileduplicatesearch-result-n": "'O file \"$1\" tène {{PLURAL:$2|1 dupricazione|$2 dupricaziune}} eguale eguale.",
+       "fileduplicatesearch-noresults": "Nisciuno file chiamato \"$1\" è stato accucchiato.",
        "specialpages": "Paggene speciale",
+       "specialpages-note-top": "Liggenda",
+       "specialpages-note": "* Paggene speciale normale.\n* <span class=\"mw-specialpagerestricted\">Paggene speciale ch' 'e restriziune.</span>",
+       "specialpages-group-maintenance": "Report 'e manutenzione",
+       "specialpages-group-other": "Ati paggene speciale",
+       "specialpages-group-login": "Tràse o cria n'acciesso novo",
+       "specialpages-group-changes": "Cagnamiente 'e mò mò e riggistre",
+       "specialpages-group-media": "Riepileghe 'e media e carreche",
+       "specialpages-group-users": "Utente e deritte",
+       "specialpages-group-highuse": "Pàggene ausate assaje proprio",
+       "specialpages-group-pages": "Lista d' 'e paggene",
+       "specialpages-group-pagetools": "Strumiente p' 'e paggene",
+       "specialpages-group-wiki": "Data e strumiente",
+       "specialpages-group-redirects": "Redirezionamiente d' 'e paggene speciale",
+       "specialpages-group-spam": "Strumiente p' 'o spam",
+       "blankpage": "Paggene abbacante",
+       "intentionallyblankpage": "Sta paggena s'è lassata abbacante apposta",
+       "external_image_whitelist": "  #Lassate sta linea accussì accussì comme sta<pre>\n#Mettete piezze 'espressione regolare (chilla parta nfra 'e //) sotto\n#Chille s'azzeccano ch' 'e ndirizze URL 'e l'immaggine 'e fore (collegamiente cavere)\n#Chille cu nu cunfronto positivo sarranno mmustate comme immaggene, o pure comme a nu link a l'immaggine ca mmustano\n#Linee c'accumenciano pe' # songo trattate comme commente\n#Chist'è insenzitivo p' 'e maiuscole e minuscole\n\n#Mettete tutt' 'e piezze regex ncopp' 'a stalinea. Lassate sta linea eguale eguale comme 'a verite</pre>",
+       "tags": "Tag 'e cagnamiento valide",
        "tag-filter": "Filtra ppe [[Special:Tags|etichetta]]:",
-       "rightsnone": "(nisciuno)"
+       "tag-filter-submit": "Filtra",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tags-title": "Etichette",
+       "tags-intro": "Sta paggena elenca l'etichette ca 'o software putesse ffà suoccie a nu cagnamiento e 'o significato lloro.",
+       "tags-tag": "Nomme 'e ll'etichetta",
+       "tags-display-header": "Comme cumpàreno ncopp' 'a lista 'e cagnamiente",
+       "tags-description-header": "Descrizione sana d' 'o significato",
+       "tags-active-header": "Attivo?",
+       "tags-hitcount-header": "Cagnamiente etichettate",
+       "tags-active-yes": "Sì",
+       "tags-active-no": "No",
+       "tags-edit": "càgna",
+       "tags-hitcount": "$1 {{PLURAL:$1|cagnamiento|cagnamiente}}",
+       "comparepages": "Miette a cunfronto 'e paggene",
+       "compare-page1": "Paggena 1",
+       "compare-page2": "Paggena 2",
+       "compare-rev1": "Vversione 1",
+       "compare-rev2": "Vversione 2",
+       "compare-submit": "Miette a cunfronto",
+       "compare-invalid-title": "'O titolo c'avite miso nun è bbuono.",
+       "compare-title-not-exists": "'O file c'avite specificato nun esiste.",
+       "compare-revision-not-exists": "'A verziona c'avite specificato nun esiste.",
+       "dberr-problems": "Scusatece! Stu sito sta passanno nu mumento tecnico malamente.",
+       "dberr-again": "Aspettate cocche minuto e po' recarrecate.",
+       "dberr-info": "(Nun se può cuntattà 'o server d' 'o database: $1)",
+       "dberr-info-hidden": "(Nun se può cuntattà 'o server d' 'o database)",
+       "dberr-usegoogle": "Pe' tramente putite pruvà 'ascianno ncoppa Google.",
+       "dberr-outofdate": "Vedite ca l'indice lloro d' 'e cuntenute nuoste ponno nun essere agghiurnate mò mò.",
+       "dberr-cachederror": "Chest'è na copia \"cache\" d' 'a paggena c'avite asciato, e putesse nun essere agghiurnata.",
+       "htmlform-invalid-input": "Ce sta cocche probblema cu l'input c'avite miso.",
+       "htmlform-select-badoption": "'O valore c'avite specificato nun è n'opziona bbuona.",
+       "htmlform-int-invalid": "'O valore c'avite specificato nun è nu nummero ntero.",
+       "htmlform-float-invalid": "'O valore c'avite specificato nun è nu nummero.",
+       "htmlform-int-toolow": "'O valore c'avite specificato sta pe' sott' 'o minimo 'e $1.",
+       "htmlform-int-toohigh": "'O valore c'avite specificato sta pe' copp' 'o massimo 'e $1.",
+       "htmlform-required": "Stu valore ce vuò.",
+       "htmlform-submit": "Manna",
+       "htmlform-reset": "Annulla 'e cagnamiente",
+       "htmlform-selectorother-other": "Ato",
+       "htmlform-no": "No",
+       "htmlform-yes": "Sì",
+       "htmlform-chosen-placeholder": "Scigliete n'opzione",
+       "htmlform-cloner-create": "Azzecca 'e cchiù",
+       "htmlform-cloner-delete": "Lèva",
+       "htmlform-cloner-required": "Servesse al minimo nu valore.",
+       "sqlite-has-fts": "$1 cu supporto 'e ricerche full-text",
+       "sqlite-no-fts": "$1 senza supporto 'e ricerche full-text",
+       "logentry-delete-delete": "$1 {{GENDER:$2|scancellaje}} 'a paggena $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|arrepigliaje}} 'a paggena $3",
+       "logentry-delete-event": "$1 {{GENDER:$2|cagnaie}} 'a vesibbiletà 'e {{PLURAL:$5|n'azione d' 'o riggistro|$5 aziune d' 'o riggistro}} ncopp' 'a 'a $3: $4",
+       "logentry-delete-revision": "$1 {{GENDER:$2|cagnaie}} 'a vesibbiletà 'e {{PLURAL:$5|na verziona|$5 verziune}} ncopp' 'a 'a $3: $4",
+       "logentry-delete-event-legacy": "$1 {{GENDER:$2|cagnaie}} 'a vesibbiletà 'e l'aziune dint' 'o riggistro ncopp' 'a $3: $4",
+       "logentry-delete-revision-legacy": "$1 {{GENDER:$2|cagnaie}} 'a vesibbiletà d' 'e verziune ncopp' 'a $3",
+       "logentry-suppress-delete": "$1 {{GENDER:$2|luvaje pe' sempe}} 'a paggena $3",
+       "logentry-suppress-event": "$1 {{GENDER:$2|annascunnuto cagnaie|annascunnuta cagnaie}} 'a vesibbiletà 'e {{PLURAL:$5|n'azione d' 'o riggistro|$5 aziune d' 'o riggistro}} ncopp' 'a 'a $3: $4",
+       "logentry-suppress-revision": "$1 {{GENDER:$2|annascunnuto cagnaie|annascunnuta cagnaie}} 'a vesibbiletà 'e {{PLURAL:$5|na verziona|$5 verziune}} ncopp' 'a 'a $3: $4",
+       "logentry-suppress-event-legacy": "$1 {{GENDER:$2|annascunnuto cagnaie|annascunnuta cagnaie}} 'a vesibbiletà 'e l'aziune 'e riggistro ncopp' 'a $3",
+       "logentry-suppress-revision-legacy": "$1 {{GENDER:$2|annascunnuto cagnaie|annascunnuta cagnaie}} 'a vesibbiletà d' 'e verziune ncopp' 'a $3",
+       "revdelete-content-hid": "cuntenute annascunnute",
+       "revdelete-summary-hid": "riepilego 'e cagnamiente annascunnute",
+       "revdelete-uname-hid": "nomme utente annascunnuto",
+       "revdelete-content-unhid": "cuntenute fatte avvedè",
+       "revdelete-summary-unhid": "riepilego 'e cagnamiente fatte avvedè",
+       "revdelete-uname-unhid": "nomme utente fatto avvedè",
+       "revdelete-restricted": "restriziune apprecate a ll'ammenistrature",
+       "revdelete-unrestricted": "restriziune luvate a ll'ammenistrature",
+       "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-move-move_redir": "$1 {{GENDER:$2|muvette}} paggena $3 a $4 pe' copp' 'a nu redirezionamiento",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|muvette}} paggena $3 a $4 pe' copp' 'a nu redirezionamiento senza lassà nu redirezionamiento",
+       "logentry-patrol-patrol": "$1 verziona {{GENDER:$2|signata}} $4 'e paggena cuntrullata $3",
+       "logentry-patrol-patrol-auto": "$1 verziona automatecamente {{GENDER:$2|signata}} $4 'e paggena cuntrullata $3",
+       "logentry-newusers-newusers": "'O cunto utente $1 fuje {{GENDER:$2|criato|criata}}",
+       "logentry-newusers-create": "'O cunto utente $1 fuje {{GENDER:$2|criato|criata}}",
+       "logentry-newusers-create2": "'O cunto utente $3 fuje {{GENDER:$2|criato|criata}} pe' $1",
+       "logentry-newusers-byemail": "'O cunto utente $3 fuje {{GENDER:$2|criato|criata}} pe' $1 e 'a passuor è stata mannata pe' bbìa 'e na mmasciata e-mail",
+       "logentry-newusers-autocreate": "'O cunto utente $1 fuje {{GENDER:$2|criato|criata}} automatecamente",
+       "logentry-rights-rights": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' $3 'a $4 a $5",
+       "logentry-rights-rights-legacy": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' $3",
+       "logentry-rights-autopromote": "$1 è {{GENDER:$2|stato promosso|stata promossa}} automatecamente 'a $4 a $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|ave carrecato}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|ave carrecato}} na verziona nnova 'e $3",
+       "logentry-upload-revert": "$1 {{GENDER:$2|ave carrecato}} $3",
+       "rightsnone": "(nisciuno)",
+       "revdelete-summary": "cagna 'o riepilego",
+       "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-error1": "Errore: Risultato nun aspettato 'a ll'API",
+       "feedback-error2": "Errore: Cagnamiento scassato",
+       "feedback-error3": "Errore: Ll'API nun risponne",
+       "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.",
+       "searchsuggest-search": "Truova",
+       "searchsuggest-containing": "tène...",
+       "api-error-badaccess-groups": "Tun putite carrecà file ncopp' 'a sta wiki.",
+       "api-error-badtoken": "Errore interno: 'O token nun è buono.",
+       "api-error-copyuploaddisabled": "'A funzione carrcà 'e n'URL nun è appicciata dint'a stu server.",
+       "api-error-duplicate": "Nce {{PLURAL:$1|stà [$2 n'atu file]|stanno [$2 ati file]}} ncopp' 'o sito ch' 'e stisse cuntenute.",
+       "api-error-duplicate-archive": "Nce {{PLURAL:$1|steva [$2 n'atu file]|stevano [$2 ati file]}} già ncopp' 'o sito ch' 'e stisse cuntenute, però {{PLURAL:$1|è stato|so' state}} scancellate.",
+       "api-error-duplicate-archive-popup-title": "File duprecat{{PLURAL:$1|o che è già stato scancellato|e che songo già state scancellati}}",
+       "api-error-duplicate-popup-title": "Dupreche {{PLURAL:$1|file|file}}",
+       "api-error-empty-file": "'O file ch'avite mannato è abbacante.",
+       "api-error-emptypage": "'A criazione 'e paggene nuove abbacante nun è permessa.",
+       "api-error-fetchfileerror": "Errore interno: Coccosa ascette stuorta quanno se steva 'analizzà stu file.",
+       "api-error-fileexists-forbidden": "Nu file c' 'o nomme \"$1\" esiste già, e chisto nun pò essere sovrascritto.",
+       "api-error-fileexists-shared-forbidden": "Nu file c' 'o nomme \"$1\" esiste già dint' 'a l'archivio 'e file, e chisto nun pò essere sovrascritto.",
+       "api-error-file-too-large": "'O file ch'avite mannato è troppo gruosso.",
+       "api-error-filename-tooshort": "'O nomme d' 'o file è troppo curto.",
+       "api-error-filetype-banned": "Stu tipo 'e file nun è permesso.",
+       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|nun è nu tipo 'e file permesso|nun songo tipe 'e file permesse}}. {{PLURAL:$3|'O tipo 'e file permesso è|'E tipe 'e file permesse songo}} $2.",
+       "api-error-filetype-missing": "Stu file nun tene estensione.",
+       "api-error-hookaborted": "'O cagnamiento c'avite pruvato 'e fà è stato spezzato 'a na stensione.",
+       "api-error-http": "Errore interno: Nun putimmo ngarrà a nce cullegà a 'o server.",
+       "api-error-illegal-filename": "'O nomme d' 'o file nun è permesso.",
+       "api-error-internal-error": "Errore interno: Coccosa ascette male pe' tramente ca se steva processanno 'a carreca dint'a stu wiki.",
+       "api-error-invalid-file-key": "Errore interno: 'O file nun se pò truvà dint' 'a memoria temporanea.",
+       "api-error-missingparam": "Errore interno: nun se trovano 'e parametre pe' ne putè fà 'a richiesta.",
+       "api-error-missingresult": "Errore interno: Nun se pò sapè si 'a copia ascette bbona.",
+       "api-error-mustbeloggedin": "Avite 'a trasì ô sito si vulite carrecà file.",
+       "api-error-mustbeposted": "Errore interno: 'A richiesta vole HTTP POST.",
+       "api-error-noimageinfo": "A carreca ngarraje, ma 'o server nun ce ha pututo dà nisciuna nformazione ncopp' 'o file.",
+       "api-error-nomodule": "Errore interno: Nisciuno modulo 'e carreca mpustato.",
+       "api-error-ok-but-empty": "Errore interno: Nisciuna resposta 'a 'o server.",
+       "api-error-overwrite": "Sovrascrivere nu file ch'esiste già nun è permesso.",
+       "api-error-stashfailed": "Errore interno: 'O server nun ngarraje a s'astipà 'o file temporaneo.",
+       "api-error-publishfailed": "Errore interno: 'O server nun ngarraje a pubbrecà 'o file temporaneo.",
+       "api-error-stasherror": "'A carreca d' 'o file 'n stash è asciuta male, ce sta n'errore.",
+       "api-error-stashedfilenotfound": "'O file 'n stash nun è stato truvato pe' tramente ca se faceva 'a prova 'e carreca d' 'o stash.",
+       "api-error-stashpathinvalid": "'O cullegamento a 'o pizzo addò avesse stà 'o file 'e stash nun è bbuono.",
+       "api-error-stashfilestorage": "L'astipamento d' 'o file 'n stash è asciuto male, ce sta n'errore.",
+       "api-error-stashzerolength": "'O server nun può nzertà 'o file dint'a 'o stash, pecché è luongo zero zero.",
+       "api-error-stashnotloggedin": "Avisseve 'a trasì pe' ne putè astipà 'e file din' 'o stash 'e càrreca.",
+       "api-error-stashwrongowner": "'O file addò stavate a trasì dint' 'o stash nun v'appartene.",
+       "api-error-stashnosuchfilekey": "'A chiave d' 'o file addò stavate a trasì dint' 'o stash nun esiste.",
+       "api-error-timeout": "'O server nun rispunnette dint'a 'o tiempo stabbelito.",
+       "api-error-unclassified": "È capitato n'errore scanusciuto.",
+       "api-error-unknown-code": "Errore scanusciuto: \"$1\"",
+       "api-error-unknown-error": "Errore interno: Coccosa jette a fernì malalamente quano facisteve 'a carreca d' 'o file vuosto.",
+       "api-error-unknown-warning": "Avvertimento scanusciute: $1",
+       "api-error-unknownerror": "Errore scanusciuto: \"$1\"",
+       "api-error-uploaddisabled": "'E carreche so' stutate dint'a sta siki.",
+       "api-error-verification-error": "Stu file putesse stà nguacchiato, o tene n'estensione sbagliata.",
+       "duration-seconds": "$1 {{PLURAL:$1|secondo|seconde}}",
+       "duration-minutes": "$1 {{PLURAL:$1|minuto|minute}}",
+       "duration-hours": "$1 {{PLURAL:$1|ora|ore}}",
+       "duration-days": "$1 {{PLURAL:$1|juorno|juorne}}",
+       "duration-weeks": "$1 {{PLURAL:$1|semmana|semmane}}",
+       "duration-years": "$1 {{PLURAL:$1|anno|anne}}",
+       "duration-decades": "$1 {{PLURAL:$1|decade|decade}}",
+       "duration-centuries": "$1 {{PLURAL:$1|seculo|secule}}",
+       "duration-millennia": "$1 {{PLURAL:$1|millennio|millennia}}",
+       "rotate-comment": "Immaggine rotata $1 {{PLURAL:$1|grade}} 'n senzo orario",
+       "limitreport-title": "Analizzatore d' 'e date d' 'a profilazione:",
+       "limitreport-cputime": "Tiempo d'uso d' 'o CPU",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|secondo|seconde}}",
+       "limitreport-walltime": "Tiempo riale d'uso",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|secondo|seconde}}",
+       "limitreport-ppvisitednodes": "Nummero e nurece 'e preprucessore visetate",
+       "limitreport-ppgeneratednodes": "Nummero 'e nurece generate d' 'o preprocessore",
+       "limitreport-postexpandincludesize": "Diminziona d'inclusiune Post-Espanzione",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|byte|byte}}",
+       "limitreport-templateargumentsize": "Dimenzione d' 'o parametro d' 'o template",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|byte}}",
+       "limitreport-expansiondepth": "Funno massimo 'e spanzione",
+       "limitreport-expensivefunctioncount": "Funzione analizzatore ca costasse assaje 'e prucessà",
+       "expandtemplates": "Template spannute",
+       "expand_templates_intro": "Sta pàggena speciale piglia cocche testo e spanne tutt' 'e template ca stann'a dinto recurzivamente.<br />\nChista spanne pure le funziune d'analise comme<br />\n<code><nowiki>{{</nowiki>#language:…}}</code>, e variabbele comme <br />\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.<br />\nIn pratica tutte chille ca stessero dint'a le doppie parentesi graffe.<br />",
+       "expand_templates_title": "Titole contestuale pe' {{FULLPAGENAME}}, ecc.:",
+       "expand_templates_input": "Testo d'input:",
+       "expand_templates_output": "Risultato",
+       "expand_templates_xml_output": "Output XML",
+       "expand_templates_html_output": "Risultato HTML cruro",
+       "expand_templates_ok": "OK",
+       "expand_templates_remove_comments": "Lèva 'e commente",
+       "expand_templates_remove_nowiki": "Lèva 'e tag <nowiki> 'a int' 'e resultate",
+       "expand_templates_generate_xml": "Fà vedè l'arvero 'e l'analisi XML",
+       "expand_templates_generate_rawhtml": "Fà verè 'o codece HTML 'n cruro",
+       "expand_templates_preview": "Anteprimma",
+       "pagelanguage": "Scigliete 'a lengua d' 'a paggena pe' bbìa e stu strumiento",
+       "pagelang-name": "Paggena",
+       "pagelang-language": "Lengua",
+       "pagelang-use-default": "Aùsa 'a lengua predefinita",
+       "pagelang-select-lang": "Selezziona lengua",
+       "right-pagelang": "Cagnate 'a lengua d' 'a paggena",
+       "action-pagelang": "càgna 'a lengua d' 'a paggena",
+       "log-name-pagelang": "Càgna 'o riggistro 'e llengue",
+       "log-description-pagelang": "Chest'è nu riggistro 'e cagnamiente 'e lengua d' 'e paggene.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ave cagnato}} 'a lengua d' 'a paggena $3 'a $4 a $5.",
+       "default-skin-not-found": "Oops! 'A skin predefinta ' 'o wii vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\n'A installazione pare ca tenesse 'e skin ccà abbascio. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] pe' n'avè cchiù nfurmaziune ncopp' 'a manera 'e ll'abbià o scegliere chilla predefinita.\n\n$2\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Clonanno uno 'e chiste repository <code>mediawiki/skins/*</code> pe' bbìa d' 'o git dint' 'a directory <code>skins/</code> d' 'a installazione MediaWiki vosta.\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki.\n\n; Si avite MediaWiki agghiurnato MediaWiki mò mò:\n: MediaWiki 1.24 e verziune appriesso nun abbìa automatecamente 'e skin installate (vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]). Putite copiare 'e linee ccà abbascio dint' 'o <code>LocalSettings.php</code> pe' putè appiccià tutt' 'e skin installate mò mò:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si avite cagnato mò mò <code>LocalSettings.php</code>:\n: Cuntrullate 'e nomme d' 'e skin n'ata vota pe' ve sparagnà cocch'errore 'e battitura.",
+       "default-skin-not-found-no-skins": "Oops! 'A skin predefinita p' 'o wiki vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\nNun avite installato nisciuno skin.\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Clonanno uno 'e chiste repository <code>mediawiki/skins/*</code> pe' bbìa d' 'o git dint' 'a directory <code>skins/</code> d' 'a installazione MediaWiki vosta.\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]) pe n'avè nfurmaziune ncopp' 'a maniera d'appiccià e scegliere chella predefinita.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (funzione appicciata)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''funzione stutata''')",
+       "mediastatistics": "Statistiche d' 'e media",
+       "mediastatistics-summary": "Statistiche ncopp' 'e tipe d' 'e file carrecate. Ce truvate azzeccata sulamente 'a verziona cchiù recente d' 'o file. Verziune viecchie o scancellate se so' luvate.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "Tipo 'e MIME",
+       "mediastatistics-table-extensions": "Estenziune pussibbele",
+       "mediastatistics-table-count": "Nummero 'e file",
+       "mediastatistics-table-totalbytes": "Dimenziona cumbinata",
+       "mediastatistics-header-unknown": "Scanusciuto",
+       "mediastatistics-header-bitmap": "Immaggene bitmap",
+       "mediastatistics-header-drawing": "Disegne (immaggene vetturiale)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Video",
+       "mediastatistics-header-multimedia": "Cuntenute ricche multimediale",
+       "mediastatistics-header-office": "Ufficio",
+       "mediastatistics-header-text": "Testuale",
+       "mediastatistics-header-executable": "File eseguetàbbele",
+       "mediastatistics-header-archive": "Furmate compresse",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|virgola finale è stata luvata|virgule finale so' state luvate}} 'a 'o JSON",
+       "json-error-unknown": "Ce sta nu probblema c' 'o JSON. Errore: $1",
+       "json-error-depth": "'O funno massimo 'e stack è stato appassàto",
+       "json-error-state-mismatch": "Valore malamente furmato o nun buono p' 'o JSON",
+       "json-error-ctrl-char": "Errore dint' 'o carattere 'e cuntrollo, può darse ca s'avesse codefecato male",
+       "json-error-syntax": "Errore 'e sintasse",
+       "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à"
 }
index a8f0769..2c29847 100644 (file)
        "otherlanguages": "På andre språk",
        "redirectedfrom": "(Omdirigert fra $1)",
        "redirectpagesub": "Omdirigeringsside",
+       "redirectto": "Omdirigering til:",
        "lastmodifiedat": "Denne siden ble sist endret $1 kl. $2.",
        "viewcount": "Denne siden er vist {{PLURAL:$1|én gang|$1 ganger}}.",
        "protectedpage": "Låst side",
        "invalidtitle-knownnamespace": "Ugyldig tittel med navnerommet «$2» og teksten «$3»",
        "invalidtitle-unknownnamespace": "Ugyldig tittel med ukjent navneromsnummer $1 og teksten «$2»",
        "exception-nologin": "Ikke innlogget",
-       "exception-nologin-text": "[[Special:Userlogin|Logg inn]] for å kunne se siden eller utføre denne handlingen.",
+       "exception-nologin-text": "Logg inn for å kunne se siden eller utføre denne handlingen.",
        "exception-nologin-text-manual": "Du må $1 for å få tilgang til denne siden eller handlingen.",
        "virus-badscanner": "Feilkonfigurasjon: Ukjent virusskanner: ''$1''",
        "virus-scanfailed": "skanning mislyktes (kode $1)",
        "createaccount-text": "Noen opprettet en konto for din e-postadresse på {{SITENAME}} ($4) med navnet «$2», med «$3» som passord. Du burde logge inn og endre passordet nå.\n\nDu kan ignorere denne beskjeden dersom kontoen ble opprettet ved en feil.",
        "login-throttled": "Du har prøvd å logge inn for mange ganger.\nVent $1 før du prøver på nytt.",
        "login-abort-generic": "Innleggingen ble avbrutt.",
+       "login-migrated-generic": "Kontoen din har blitt globalisert, og brukernavnet ditt finnes ikke lenger på denne wikien.",
        "loginlanguagelabel": "Språk: $1",
        "suspicious-userlogout": "Din forespørsel om å logge ut ble nektet fordi den så ut til å ha bli sendt av en ødelagt nettleser eller en mellomtjener.",
        "createacct-another-realname-tip": "Det er frivillig å oppgi ditt egentlige navn.\nHvis du velger å oppgi det, vil det blir anvendt for å gi deg som bruker anerkjennelse",
        "passwordreset-emailsent-capture": "Passordtilbakestillingseposten vist under har blitt sendt ut.",
        "passwordreset-emailerror-capture": "En passordtilbakestillingsepost ble laget, men det lyktes ikke å sende denne til {{GENDER:$2|brukeren}}: $1",
        "changeemail": "Endre e-postadresse",
-       "changeemail-header": "Endre kontoens e-postadresse",
        "changeemail-text": "Fyll ut dette skjemaet for å endre din e-postadresse. Du må oppgi ditt passord for å bekrefte endringen.",
        "changeemail-no-info": "Du må være innlogget for å få direkte tilgang til denne siden.",
        "changeemail-oldemail": "Nåværende e-postadresse:",
        "changeemail-none": "(ingen)",
        "changeemail-password": "Ditt passord på {{SITENAME}}:",
        "changeemail-submit": "Endre e-post",
-       "changeemail-cancel": "Avbryt",
        "changeemail-throttled": "Du har foretatt for mange innloggingsforsøk. Vær vennlig å vente $1 før du prøver igjen.",
        "resettokens": "Nullstill merker",
        "resettokens-text": "Du kan nullstille nøklene som gir adgang til visse private data knyttet til din konto.\n\nOg du burde gjøre det hvis du har avslørt nøklene for noen.",
        "showpreview": "Forhåndsvisning",
        "showdiff": "Vis endringer",
        "blankarticle": "<strong>Advarsel:</strong> Siden du er i ferd med å opprette er tom.\nHvis du trykker \"{{int:savearticle}}\" en gang til, vil siden opprettes uten innhold.",
-       "anoneditwarning": "'''Advarsel:''' Du er ikke logget inn.\nIP-adressen din blir bevart i sidens redigeringshistorikk.",
-       "anonpreviewwarning": "''Du er ikke logget inn. Lagring vil registrere din IP-adresse i sidens redigeringshistorikk.''",
+       "anoneditwarning": "<strong>Advarsel:</strong> Du er ikke innlogget. IP-adressen din vil bli vist offentlig om du redigerer. Hvis du <strong>[$1 logger inn]</strong> eller <strong>[$2 oppretter en konto]</strong> vil redigeringene dine tilskrives brukernavnet ditt, og du vil få flere andre fordeler.",
+       "anonpreviewwarning": "<em>Du er ikke logget inn. Ved lagring vil IP-adressen din lagres i sidens redigeringshistorikk.</em>",
        "missingsummary": "'''Påminnelse:''' Du har ikke lagt inn en redigeringsforklaring.\nVelger du ''Lagre siden'' en gang til blir endringene lagret uten forklaring.",
        "missingcommenttext": "Vennligst legg inn en kommentar under.",
        "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.",
        "content-model-text": "Ren tekst",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Sider med like argumenter i malkall",
        "expensive-parserfunction-warning": "Advarsel: Denne siden inneholder for mange prosesskrevende parserfunksjoner.\n\nDet burde være mindre enn {{PLURAL:$2|$2|$2}}, men er nå {{PLURAL:$1|$1|$1}}..",
        "expensive-parserfunction-category": "Sider med for mange prosesskrevende parserfunksjoner",
        "post-expand-template-inclusion-warning": "Advarsel: Størrelsen på inkluderte maler er for stor.\nNoen maler vil ikke bli inkludert.",
        "parser-template-recursion-depth-warning": "Mal er brukt for mange ganger ($1)",
        "language-converter-depth-warning": "Dybdegrense for språkkonvertering overskredet ($1)",
        "node-count-exceeded-category": "Sider hvor antallet noder er overskredet",
-       "node-count-exceeded-category-desc": "En kategori for sider der antallet noder er overskredet.",
-       "node-count-exceeded-warning": "Siden har overskredet antallet noder",
+       "node-count-exceeded-category-desc": "Siden overskriver maksimalt nodeantall.",
+       "node-count-exceeded-warning": "Siden overskred nodeantallet",
        "expansion-depth-exceeded-category": "Sider hvor ekspansjonsdybden er overskredet",
-       "expansion-depth-exceeded-category-desc": "Dette er en kategori for sider hvor ekspansjonsdybden er overskredet.",
+       "expansion-depth-exceeded-category-desc": "Siden overskrider maksimal utvidingsdybde.",
        "expansion-depth-exceeded-warning": "Sida har overskredet ekspansjonsdybden",
        "parser-unstrip-loop-warning": "«Unstrip»-loop påvist",
        "parser-unstrip-recursion-limit": "Rekursjonsgrense for taggfjerning overskredet ($1)",
        "mergehistory-same-destination": "Kilde- og målside kan ikke være den samme.",
        "mergehistory-reason": "Årsak:",
        "mergelog": "Flettingslogg",
-       "pagemerge-logentry": "flettet [[$1]] til [[$2]] (revisjoner fram til $3)",
        "revertmerge": "Omgjør fletting",
        "mergelogpagetext": "Nedenfor er en liste over de nyligste flettingene av sidehistorikker.",
        "history-title": "Revisjonshistorikk for «$1»",
        "searchrelated": "relatert",
        "searchall": "alle",
        "showingresults": "Nedenfor vises opptil {{PLURAL:$1|'''ett''' resultat|'''$1''' resultater}} fra og med nummer <b>$2</b>.",
-       "showingresultsinrange": "Nedenfor vises opptil {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resulter}} i området #<strong>$2</strong> til #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' av '''$3'''|Resultat '''$1 - $2''' av '''$3'''}} for '''$4'''",
+       "showingresultsinrange": "Nedenfor vises opptil {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resulter}} i mellom nummer <strong>$2</strong> og nummer <strong>$3</strong>.",
+       "search-showingresults": "Resultat <strong>{{PLURAL:$4|$1|$1–$2}}</strong> av <strong>$3</strong>",
        "search-nonefound": "Ingen resultater passet til søket.",
        "powersearch-legend": "Avansert søk",
        "powersearch-ns": "Søk i navnerom:",
        "preferences": "Innstillinger",
        "mypreferences": "Innstillinger",
        "prefs-edits": "Antall redigeringer:",
-       "prefsnologintext2": "Vennligst $1 å endre dine preferanser.",
+       "prefsnologintext2": "Logg inn for å endre innstillingene dine.",
        "prefs-skin": "Utseende",
        "skin-preview": "Forhåndsvisning",
        "datedefault": "Ingen foretrukket",
        "youremail": "E-post:",
        "username": "{{GENDER:$1|Brukernavn}}:",
        "prefs-memberingroups": "{{GENDER:$2|Medlem}} i følgende {{PLURAL:$1|gruppe|grupper}}:",
-       "prefs-registration": "Registreringstid:",
+       "prefs-registration": "Registreringstidspunkt:",
        "yourrealname": "Virkelig navn:",
        "yourlanguage": "Språk:",
        "yourvariant": "Språkvariant for innhold:",
        "reuploaddesc": "Avbryt opplasting og gå tilbake til opplastingsskjemaet",
        "upload-tryagain": "Send inn endret filbeskrivelse",
        "uploadnologin": "Ikke logget inn",
-       "uploadnologintext": "Du må $1 for å laste opp filer.",
+       "uploadnologintext": "Du må $1 for å kunne laste opp filer.",
        "upload_directory_missing": "Oppplastingsmappen ($1) mangler og kunne ikke opprettes av tjeneren.",
        "upload_directory_read_only": "Opplastingsmappa ($1) er ikke skrivbar for tjeneren.",
        "uploaderror": "Feil under opplasting av fil",
        "randomincategory": "Tilfeldig side innenfor kategorien",
        "randomincategory-invalidcategory": "«$1» er ikke et gyldig kategorinavn.",
        "randomincategory-nopages": "Det finnes ingen sider i [[:Category:$1|$1]]-kategorien.",
+       "randomincategory-category": "Kategori:",
+       "randomincategory-legend": "Tilfeldig side i kategori",
        "randomredirect": "Tilfeldig omdirigering",
        "randomredirect-nopages": "Det er ingen omdirigeringer i navnerommet $1.",
        "statistics": "Statistikk",
        "statistics-header-pages": "Sidestatistikk",
        "statistics-header-edits": "Redigeringsstatistikk",
-       "statistics-header-views": "Visningsstatistikk",
        "statistics-header-users": "Brukerstatistikk",
        "statistics-header-hooks": "Øvrig statistikk",
        "statistics-articles": "Innholdssider",
        "statistics-files": "Opplastede filer",
        "statistics-edits": "Redigeringer siden {{SITENAME}} ble opprettet",
        "statistics-edits-average": "Gjennomsnittlig antall redigeringer per side",
-       "statistics-views-total": "Totalt antall visninger",
-       "statistics-views-total-desc": "Visninger av ikke-eksisterende sider og spesielsider inkluderes ikke",
-       "statistics-views-peredit": "Visninger per redigering",
        "statistics-users": "Registrerte [[Special:ListUsers|brukere]]",
        "statistics-users-active": "Aktive brukere",
        "statistics-users-active-desc": "Brukere som har utført handlinger {{PLURAL:$1|det siste døgnet|de siste $1 dagene}}",
-       "statistics-mostpopular": "Mest viste sider",
        "pageswithprop": "Sider med sideverdi",
        "pageswithprop-legend": "Sider med en sideverdi",
        "pageswithprop-text": "Denne siden lister opp sider som bruker en viss sideverdi.",
        "uncategorizedtemplates": "Ukategoriserte maler",
        "unusedcategories": "Ubrukte kategorier",
        "unusedimages": "Ubrukte filer",
-       "popularpages": "Populære sider",
        "wantedcategories": "Ønskede kategorier",
        "wantedpages": "Etterspurte sider",
        "wantedpages-badtitle": "Ugyldig tittel i resultatene: $1",
        "pager-older-n": "{{PLURAL:$1|1 eldre|$1 eldre}}",
        "suppress": "Historikkrydding",
        "querypage-disabled": "Denne spesialsiden er deaktivert av ytelsesårsaker.",
+       "apihelp": "API hjelp",
        "booksources": "Bokkilder",
        "booksources-search-legend": "Søk etter bokkilder",
-       "booksources-go": "Søk",
+       "booksources-search": "Søk",
        "booksources-text": "Under er en liste over lenker til andre sider som selger nye og brukte bøker, og kan også ha videre informasjon om bøker du leter etter:",
        "booksources-invalid-isbn": "Det gitte ISBN-nummeret er ugyldig; sjekk om du har angitt det riktig.",
        "specialloguserlabel": "Utøver:",
        "trackingcategories-desc": "Kategori-inklusjonskriterium",
        "noindex-category-desc": "Denne siden indekseres ikke av roboter fordi den er merket med det magiske ordet <code><nowiki>__NOINDEX__</nowiki></code> og er i navnerom der dette flagget tillates.",
        "index-category-desc": "Denne siden er påført det magiske ordet <code><nowiki>__INDEX__</nowiki></code> (og er i et navnerom hvor flagget er tillatt), og vil derfor bli indeksert av roboter selv når det normalt ikke ville skjedd.",
-       "post-expand-template-inclusion-category-desc": "Etter ekspandering av alle malene ble siden større enn <code>$wgMaxArticleSize</code>, så noen maler kunne ikke ekspanderes.",
-       "post-expand-template-argument-category-desc": "Etter ekspandering av et malargument (noe i trippel krøllparentes, slik som <code>{{{Foo}}})</code>, så er siden større en <code>$wgMaxArticleSize</code>.",
-       "expensive-parserfunction-category-desc": "For mange kostbare parserfunksjoner (som <code>#ifexist</code>) er inkludert på en side. Se [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
-       "broken-file-category-desc": "Kategorien blir lagt til hvis siden inneholder en brutt fil-lenke (en lenke for å bygge inn en fil når filen selv ikke eksisterer).",
-       "hidden-category-category-desc": "Dette er en kategori merket med <code><nowiki>__HIDDENCAT__</nowiki></code>, som hindrer den fra å vises i siders kategorioversikt som standard.",
+       "post-expand-template-inclusion-category-desc": "Sidestørrelsen er større enn <code>$wgMaxArticleSize</code> etter at alle maler er utvidet, så noen maler ble ikke utvidet.",
+       "post-expand-template-argument-category-desc": "Siden er større enn <code>$wgMaxArticleSize</code> etter utvidelse av et malargument (noe i tre krøllparenteser, som <code>{{{foo}}}</code>).",
+       "expensive-parserfunction-category-desc": "Siden bruker for mange dyre parserfunksjoner (som <code>#ifexist</code>). Se [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Siden inneholder en ødelagt lenkefil (en lenke for å bygge inn en fil når filen ikke eksisterer).",
+       "hidden-category-category-desc": "Kategorien inneholder <code><nowiki>__HIDDENCAT__</code></nowiki> i sideinnholdet, hvilket gjør at den som standard ikke vises i kategorilisten på sider.",
        "trackingcategories-nodesc": "Ingen beskrivelse er tilgjengelig",
        "trackingcategories-disabled": "Kategorien er deaktivert",
        "mailnologin": "Ingen avsenderadresse",
        "mywatchlist": "Overvåkningsliste",
        "watchlistfor2": "For $1 $2",
        "nowatchlist": "Du har ingenting i overvåkningslisten.",
-       "watchlistanontext": "Vennligst $1 for å vise eller redigere sider på overvåkningslisten din.",
+       "watchlistanontext": "Logg inn for å vise eller redigere elementer på overvåkningslisten din.",
        "watchnologin": "Ikke logget inn",
        "addwatch": "Legg til i overvåkningslisten",
        "addedwatchtext": "Siden «[[:$1]]» er lagt til [[Special:Watchlist|overvåkningslisten]] din.\nFremtidige endringer til denne siden og den tilhørende diskusjonssiden blir listet opp der.",
        "unwatchthispage": "Fjerner overvåkning",
        "notanarticle": "Ikke en artikkel",
        "notvisiblerev": "Revisjonen er slettet",
-       "watchlist-details": "{{PLURAL:$1|Én side|$1 sider}} på din overvåkningsliste, teller ikke diskusjonssider.",
+       "watchlist-details": "Du har {{PLURAL:$1|én side|'''$1''' sider}} på [[Hjelp:Overvåke sider|overvåkningslisten]] din (pluss tilhørende [[Hjelp:Diskusjonsside|diskusjonssider]]).",
        "wlheader-enotif": "E-postvarsling er slått på.",
-       "wlheader-showupdated": "Sider som har blitt forandret siden du sist besøkte dem vises i '''fet tekst'''",
+       "wlheader-showupdated": "Sider som har blitt endret siden du besøkte dem sist vises med '''fet skrift'''.",
        "wlnote": "Nedenfor er {{PLURAL:$1|den siste endringen|de siste <strong>$1</strong> endringene}} {{PLURAL:$2|den siste timen|de siste <strong>$2</strong> timene}}, per $3 kl. $4",
-       "wlshowlast": "Vis siste $1 timer $2 dager $3",
+       "wlshowlast": "Vis siste $1 timer $2 dager",
        "watchlist-options": "Alternativ for overvåkningslisten",
        "watching": "Overvåker…",
        "unwatching": "Fjerner fra overvåkningsliste…",
        "exbeforeblank": "innholdet før siden ble tømt var: «$1»",
        "delete-confirm": "Slett «$1»",
        "delete-legend": "Slett",
-       "historywarning": "Advarsel: Siden du er i ferd med å slette har en historikk med omtrent {{PLURAL:$1|én revisjon|$1 revisjoner}}:",
+       "historywarning": "<strong>Advarsel:</strong> Siden du er i ferd med å slete har en historikk med $1 {{PLURAL:$1|revisjon|revisjoner}}:",
        "confirmdeletetext": "Du holder på å slette en side sammen med historikken.\nBekreft at du virkelig vil slette denne siden, at du forstår konsekvensene og at du gjør det i samsvar med [[{{MediaWiki:Policy-url}}|retningslinjene]].",
        "actioncomplete": "Gjennomført",
        "actionfailed": "Handling mislyktes",
        "delete-edit-reasonlist": "Rediger begrunnelser for sletting",
        "delete-toobig": "Denne siden har en stor redigeringshistorikk, med over {{PLURAL:$1|$1&nbsp;revisjon|$1&nbsp;revisjoner}}. Muligheten til å slette slike sider er begrenset for å unngå utilsiktet forstyrring av {{SITENAME}}.",
        "delete-warning-toobig": "Denne siden har en stor redigeringshistorikk, med over {{PLURAL:$1|$1&nbsp;revisjon|$1&nbsp;revisjoner}}. Sletting av denne siden kan forstyrre databasen til {{SITENAME}}; vær varsom.",
+       "deleteprotected": "Du kan ikke slette denne siden fordi den er beskyttet.",
        "deleting-backlinks-warning": "'''Advarsel:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Andre sider]] lenker til eller inkluderer siden du er i ferd med å slette.",
        "rollback": "Fjern redigeringer",
        "rollback_short": "Tilbakestill",
        "autoblockid": "Autoblokker #$1",
        "block": "Blokker bruker",
        "unblock": "Fjern blokkering av bruker",
-       "blockip": "Blokker bruker",
+       "blockip": "Blokker {{GENDER:$1|bruker}}",
        "blockip-legend": "Blokker bruker",
        "blockiptext": "Bruk skjemaet under for å blokkere en IP-adresses tilgang til å redigere artikler. Dette må kun gjøres for å forhindre hærverk, og i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjene]]. Fyll ut en spesiell begrunnelse under.",
        "ipaddressorusername": "IP-adresse eller brukernavn",
        "ipb-unblock-addr": "Avblokker $1",
        "ipb-unblock": "Avblokker et brukernavn eller en IP-adresse",
        "ipb-blocklist": "Vis gjeldende blokkeringer",
-       "ipb-blocklist-contribs": "Bidrag fra $1",
+       "ipb-blocklist-contribs": "Bidrag fra {{GENDER:$1|$1}}",
        "unblockip": "Opphev blokkering",
        "unblockiptext": "Bruk skjemaet under for å gjenopprette skriveadgangen for en tidligere blokkert adresse eller bruker.",
        "ipusubmit": "Opphev blokkering",
        "unblocked": "[[User:$1|$1]] ble avblokkert",
        "unblocked-range": "$1 har fått løftet blokkeringen",
        "unblocked-id": "Blokkering $1 ble fjernet",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] har blitt avblokkert.",
        "blocklist": "Blokkerte brukere",
        "ipblocklist": "Blokkerte IP-adresser og brukernavn",
        "ipblocklist-legend": "Finn en blokkert bruker",
        "change-blocklink": "endre blokkering",
        "contribslink": "bidrag",
        "emaillink": "send e-post",
-       "autoblocker": "Du ble automatisk blokkert fordi din IP-adresse nylig ble brukt av «[[User:$1|$1]]». Grunnen som ble gitt til at «$1» ble blokkert var: «$2».",
+       "autoblocker": "Du ble automatisk blokkert fordi IP-adressen din nylig ble brukt av «[[User:$1|$1]]». Grunnen som ble gitt til at «$1» ble blokkert var: «$2».",
        "blocklogpage": "Blokkeringslogg",
        "blocklog-showlog": "Denne brukeren har blitt blokkert før.\nBlokkeringsloggen vises nedenfor.",
        "blocklog-showsuppresslog": "Denne brukeren har tidligere blitt blokkert og skjult.\nSkjulingsloggen vises nedenfor.",
        "ip_range_toolarge": "Blokkering av IP-serier større enn /$1 er ikke tillatt.",
        "proxyblocker": "Proxyblokker",
        "proxyblockreason": "IP-adressen din ble blokkert fordi den er en åpen proxy. Kontakt internettleverandøren din eller teknisk støtte og informer dem om dette alvorlige sikkerhetsproblemet.",
-       "sorbsreason": "Din IP-adresse angis som en åpen proxy i DNSBL-en brukt av {{SITENAME}}.",
+       "sorbsreason": "IP-adressen din er listet som en åpen proxy i DNSBL-en brukt av {{SITENAME}}.",
        "sorbs_create_account_reason": "Din IP-adresse angis som en åpen proxy i DNSBL-en brukt av {{SITENAME}}. Du kan ikke opprette en konto",
        "xffblockreason": "En IP-adresse som er tilstede i X-Forwarded-For-headeren, enten din eller en som tilhører en proxyserver du bruker, har blitt blokkert. Den opprinnelige blokkeringsgrunnen var: $1",
        "cant-see-hidden-user": "Brukeren du prøver å blokkere har allerede blitt blokkert og skjult. Ettersom du ikke har rett til å skjule brukere (hideuser), kan du ikke se eller endre brukerens blokkering.",
        "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]].",
+       "import-interwiki-sourcewiki": "Kildewiki:",
+       "import-interwiki-sourcepage": "Kildeside:",
        "import-interwiki-history": "Kopier all historikk for denne siden",
        "import-interwiki-templates": "Inkluder alle maler",
        "import-interwiki-submit": "Importer",
        "pageinfo-robot-policy": "Bot-indeksering",
        "pageinfo-robot-index": "Tillatt",
        "pageinfo-robot-noindex": "Ikke tillatt",
-       "pageinfo-views": "Antall visninger",
        "pageinfo-watchers": "Antall overvåkere av siden",
        "pageinfo-few-watchers": "Færre enn $1 {{PLURAL:$1|overvåker|overvåkere}}",
        "pageinfo-redirects-name": "Antall omdirigeringer til denne siden",
        "exif-urgency-low": "Lav ($1)",
        "exif-urgency-high": "Høy ($1)",
        "exif-urgency-other": "Brukerdefinert prioritet ($1)",
-       "watchlistall2": "alle",
        "namespacesall": "alle",
        "monthsall": "alle",
        "confirmemail": "Bekreft e-postadresse",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|lastet opp}} en ny versjon av $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|lastet opp}} $3",
        "rightsnone": "(ingen)",
+       "revdelete-summary": "redigeringssammendrag",
        "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:",
        "log-name-pagelang": "Endre språklogg",
        "log-description-pagelang": "Dette er en logg som viser endringer i sidespråk",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|endret}} sidespråk for $3 fra $4 til $5.",
-       "default-skin-not-found": "Ops! Standarddrakten for wikien din (<code>$wgDefaultSkin</code>), <code>$1</code>, er ikke tilgjengelig.\n\nInstallasjonen din inkluderer følgende drakter. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for informasjon om hvordan du an slå det på og velge en standarddrakt.\n\n$2\n\n; Om du nettopp har installert MediaWiki:\n: Du har trolig installert fra git, eller direkte fra kildekoden med en annen metode. Dette er forventet.\n:* Prøv å installere flere drakter fra [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.orgs draktbase]\n:* Last ned [https://www.mediawiki.org/wiki/Download tarball-installereren], som kommer med flere drakter og utvidelser. Du kan kopiere og lime inn <code>skins/</code>-mappen fra denne.\n: Å gjøre dette skal ikke forstyrre git-mappen din om du er en MediaWiki-utvikler.\n\n; Om du nettopp har oppgradert MediaWiki:\n: MediaWiki 1.24 og nyere slår ikke lenger automatisk på installerte drakter (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). du kan lime inn følgende linjer i <code>LocalSettings.php</code> for å slå på alle installerte drakter:\n\n<pre>$3</pre>\n\n; Om du nettopp har endret <code>LocalSettings.php</code>:\n: Dobbeltsjekk draktnavnene for skrivefeil.",
+       "default-skin-not-found": "Ops! Standarddrakten for wikien din (<code>$wgDefaultSkin</code>), <code>$1</code>, er ikke tilgjengelig.\n\nInstallasjonen din ser ut til å inneholde følgende drakter. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for informasjon om hvordan du kan slå disse på eller heller velge en standarddrakt.\n\n$2\n\n; Om du nettopp har installert MediaWiki:\n: Du har trolig installert fra git, eller direkte fra kildekoden med en annen metode. Dette er forventet. Prøv å installere noen drakter fra [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org sin draktbase] ved å\n:* laste ned [https://www.mediawiki.org/wiki/Download tarball-installereren], som kommer med flere drakter og utvidelser. Du kan kopiere og lime inn <code>skins/</code>-mappen fra denne.\n:* klone en av <code>mediawiki/skins/*</code>-lagrene via git inn i <code>skins/</code> -mappen av din MediaWiki-installasjon.\n: Å gjøre dette skal ikke forstyrre git-mappen din om du er en MediaWiki-utvikler.\n\n; Om du nettopp har oppgradert MediaWiki:\n: MediaWiki 1.24 og nyere slår ikke lenger på automatisk installerte drakter (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Du kan lime inn følgende linjer i <code>LocalSettings.php</code> for å slå på alle installerte drakter:\n\n<pre>$3</pre>\n\n; Om du nettopp har endret <code>LocalSettings.php</code>:\n: Dobbelsjekk draktnavnene for skrivefeil.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (slått på)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''slått av''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''slått av''')",
+       "mediastatistics": "Mediestatistikk",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3 %)",
+       "mediastatistics-table-mimetype": "MIME-type",
+       "mediastatistics-table-extensions": "Mulige filtyper",
+       "mediastatistics-table-count": "Antall filer",
+       "mediastatistics-table-totalbytes": "Kombinert størrelse",
+       "mediastatistics-header-unknown": "Ukjent",
+       "mediastatistics-header-bitmap": "Bitmap-bilder",
+       "mediastatistics-header-drawing": "Tegninger (vektor-bilder)",
+       "mediastatistics-header-audio": "Lyd",
+       "mediastatistics-header-video": "Videoer",
+       "mediastatistics-header-multimedia": "Rikt media",
+       "mediastatistics-header-office": "Kontor",
+       "mediastatistics-header-text": "Tekstlig",
+       "mediastatistics-header-executable": "Kjørbare filer",
+       "mediastatistics-header-archive": "Komprimerte formater",
+       "json-warn-trailing-comma": "$1 etterfølgende {{PLURAL:$1|komma|kommaer}} ble fjernet fra JSON",
+       "json-error-state-mismatch": "Ugyldig JSON",
+       "json-error-syntax": "Syntaksfeil"
 }
index 63be861..3f9f991 100644 (file)
        "passwordreset-emailsent-capture": "Der is n bericht verstuurd um joew wachtwoord opniej in te stellen. Dit ku'j hieronder lezen.",
        "passwordreset-emailerror-capture": "Der is n bericht veur t opniej opstellen van joew wachwoord an-emaakt, dit ku'j hieronder lezen. t Versturen naor de {{GENDER:$2|gebruker}} is mislokt um de volgende reden: $1",
        "changeemail": "Wiezig netpostadres",
-       "changeemail-header": "Netpostadres wiezigen",
        "changeemail-text": "Vul dit formulier in um joew netpostadres te wiezigen. Um disse wieziging te bevestigen mu'j je wachtwoord invoeren.",
        "changeemail-no-info": "Je mutten an-emeld ween um drekt toegang te hebben tot disse zied.",
        "changeemail-oldemail": "t Ouwe netpostadres:",
        "changeemail-none": "(gien)",
        "changeemail-password": "Joew wachtwoord veur {{SITENAME}}:",
        "changeemail-submit": "Netpostadres wiezigen",
-       "changeemail-cancel": "Aofbreken",
        "resettokens": "Tokens ongedaonmaken",
        "resettokens-text": "Je kunnen hier tokens opniej instellen die toegang geven tot bepaolde persoonlike gegevens die ekoppeld bin an joew gebruker.\n\nDo dit a'j ze per ongelok mit ene edeeld hebben of as onbevoegden toegang ekregen hebben tot joew gebruker.",
        "resettokens-no-tokens": "Der bin gien tokens um ongedaon te maken.",
        "mergehistory-same-destination": "De bronzied en doelzied kunnen niet t zelfde ween",
        "mergehistory-reason": "Reden:",
        "mergelog": "Samenvoegingslogboek",
-       "pagemerge-logentry": "voegen [[$1]] naor [[$2]] samen (versies tot en mit $3)",
        "revertmerge": "Samenvoeging weerummedreien",
        "mergelogpagetext": "Hieronder zie'j n lieste van de leste samenvoegingen van n ziedgeschiedenisse naor n aandere.",
        "history-title": "Versiegeschiedenisse van \"$1\"",
        "searchrelated": "verwaant",
        "searchall": "alles",
        "showingresults": "Hieronder {{PLURAL:$1|steet '''1''' resultaot|staon '''$1''' resultaoten}}  <b>$1</b> vanaof nummer <b>$2</b>.",
-       "showingresultsheader": "{{PLURAL:$5|Resultaot '''$1''' van '''$3'''|Resultaoten '''$1 - $2''' van '''$3'''}} veur '''$4'''",
        "search-nonefound": "Der bin gien resultaoten veur de zeukopdrachte.",
        "powersearch-legend": "Uutebreid zeuken",
        "powersearch-ns": "Zeuken in naamruumten:",
        "randomincategory": "Netzelde welke zied in n kategorie",
        "randomincategory-invalidcategory": "\"$1\" is gien geldige kategorienaam.",
        "randomincategory-nopages": "Der bin gien ziejen in [[:Category:$1]].",
-       "randomincategory-selectcategory": "Netzelde welke zied uut de kategorie: $1 $2",
-       "randomincategory-selectcategory-submit": "Laot kulen",
        "randomredirect": "Netzelde welke deurverwiezing",
        "randomredirect-nopages": "Der staon gien deurverwiezingen in de naamruumte \"$1\".",
        "statistics": "Staotistieken",
        "statistics-header-pages": "Ziedstaotistieken",
        "statistics-header-edits": "Bewarkingsstaotistieken",
-       "statistics-header-views": "Staotistieken bekieken",
        "statistics-header-users": "Gebrukerstaotistieken",
        "statistics-header-hooks": "Overige staotistieken",
        "statistics-articles": "Inhouwelike ziejen",
        "statistics-files": "Bestaanden",
        "statistics-edits": "Ziedbewarkingen vanaof t begin van {{SITENAME}}",
        "statistics-edits-average": "Gemiddeld antal bewarkingen per zied",
-       "statistics-views-total": "Totaal antal weeregeven ziejen",
-       "statistics-views-total-desc": "t Bekieken van niet-bestaonde ziejen en spesiale ziejen zitten der niet bie in",
-       "statistics-views-peredit": "Weeregeven ziejen per bewarking",
        "statistics-users": "In-eschreven [[Special:ListUsers|gebrukers]]",
        "statistics-users-active": "Aktieve gebrukers",
        "statistics-users-active-desc": "Gebrukers die de veurbieje {{PLURAL:$1|dag|$1 dagen}} n haandeling uutevoerd hebben",
-       "statistics-mostpopular": "Meestbekeken ziejen",
        "pageswithprop": "Ziejen mit n ziedeigenschap",
        "pageswithprop-legend": "Ziejen mit n zied-eigenschap",
        "pageswithprop-text": "Op disse zied staon ziejen mit n bepaolde ziedeigenschap.",
        "uncategorizedtemplates": "Mallen zonder kategorie",
        "unusedcategories": "Ongebruukten kategorieën",
        "unusedimages": "Ongebruukten bestaanden",
-       "popularpages": "Populaere artikels",
        "wantedcategories": "Gewunste kategorieën",
        "wantedpages": "Gewunste ziejen",
        "wantedpages-badtitle": "Ongeldige ziednaam in resultaot: $1",
        "querypage-disabled": "Disse spesiale zied is uutezet um prestasieredens.",
        "booksources": "Boekinformasie",
        "booksources-search-legend": "Zeuk informasie over n boek",
-       "booksources-go": "Zeuk",
        "booksources-text": "Hieronder steet n lieste mit verwiezingen naor aandere websteeën die nieje of wat ouwere boeken verkopen, en daor hebben ze warschienlik meer informasie over t boek da'j zeuken:",
        "booksources-invalid-isbn": "De op-egeven ISBN klop niet; kiek effen nao o'j gien fout emaakt hebben bie de invoer.",
        "specialloguserlabel": "Uutvoerende gebruker:",
        "wlheader-enotif": "Je kriegen bericht per netpost",
        "wlheader-showupdated": "Ziejen die sinds joew leste bezeuk bie-ewörken bin, staon '''vet-edrokt'''.",
        "wlnote": "Hieronder {{PLURAL:$1|steet de leste wieziging|staon de leste $1 wiezigingen}} in {{PLURAL:$2|t aofgeleupen ure|de leste $2 uren}} vanaof $3 um $4.",
-       "wlshowlast": "Laot de veurbieje $1 uur $2 dagen $3 zien",
+       "wlshowlast": "Laot de veurbieje $1 uur $2 dagen  zien",
        "watchlist-options": "Opsies veur de volglieste",
        "watching": "Volg...",
        "unwatching": "Niet volgen...",
        "import": "Ziejen invoeren",
        "importinterwiki": "Transwiki-invoer",
        "import-interwiki-text": "Kies n wiki en ziednaam um in te voeren.\nVersie- en auteursgegevens blieven hierbie beweerd.\nAlle transwiki-invoerhaandelingen wörden op-esleugen in t [[Special:Log/import|invoerlogboek]].",
-       "import-interwiki-source": "Bronwiki/zied:",
        "import-interwiki-history": "Kopieer de hele geschiedenisse veur disse zied",
        "import-interwiki-templates": "Alle mallen opnemen",
        "import-interwiki-submit": "Invoeren",
        "pageinfo-robot-policy": "Indexering deur bots",
        "pageinfo-robot-index": "Toe-estaon",
        "pageinfo-robot-noindex": "Niet toe-estaon",
-       "pageinfo-views": "Antal keer bekeken",
        "pageinfo-watchers": "Antal ziedvolgers",
        "pageinfo-few-watchers": "Minder as {{PLURAL:$1|één volger|$1 volgers}}",
        "pageinfo-redirects-name": "t Antal deurverwiezingen naor disse zied",
        "exif-urgency-low": "Leeg ($1)",
        "exif-urgency-high": "Hoog ($1)",
        "exif-urgency-other": "Deur gebruker in-estelde prioriteit ($1)",
-       "watchlistall2": "alles",
        "namespacesall": "alles",
        "monthsall": "alles",
        "confirmemail": "Bevestig netpostadres",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|hef}} t groepslidmaotschap ewiezigd veur $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|is}} automaties bevorderd van $4 tot $5",
        "rightsnone": "(gien)",
+       "revdelete-summary": "samenvatting bewarken",
        "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:",
index 109f0ff..19edc9e 100644 (file)
        "passwordreset-email": "E-Mail-Adress:",
        "changeemail": "E-Mail-Adress ännern",
        "changeemail-newemail": "Nee E-Mail-Adress:",
-       "changeemail-cancel": "Afbreken",
        "bold_sample": "Fetten Text",
        "bold_tip": "Fetten Text",
        "italic_sample": "Kursiven Text",
        "mergehistory-same-destination": "De Sied, vun de schaven warrt un op de schaven warrt, dröfft nich desülve wesen",
        "mergehistory-reason": "Grund:",
        "mergelog": "Tohoopföhr-Logbook",
-       "pagemerge-logentry": "[[$1]] mit [[$2]] tohoopföhrt (Versionen bet $3)",
        "revertmerge": "Tohoopbringen trüchdreihn",
        "mergelogpagetext": "Dit is dat Logbook över de tohoopföhrten Versionshistorien.",
        "history-title": "Verschoonsgeschicht vun „$1“",
        "searchrelated": "verwandt",
        "searchall": "all",
        "showingresults": "Hier {{PLURAL:$1|is een Resultat|sünd '''$1''' Resultaten}}, anfungen mit #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Resultaat '''$1''' vun '''$3'''|Resultaten '''$1 - $2''' vun '''$3'''}} för '''$4'''",
        "search-nonefound": "För de Söökanfraag geev dat keen Resultaten.",
        "powersearch-legend": "Betere Söök",
        "powersearch-ns": "Söök in Naamrüüm:",
        "statistics": "Statistik",
        "statistics-header-pages": "Siedenstatistik",
        "statistics-header-edits": "Änner-Statistik",
-       "statistics-header-views": "Siedenweddergaav-Statistik",
        "statistics-header-users": "Brukerstatistik",
        "statistics-header-hooks": "Annere Statistiken",
        "statistics-articles": "Inholtssieden",
        "statistics-files": "Hoochlaadt Datein",
        "statistics-edits": "Ännern, siet dat {{SITENAME}} gifft",
        "statistics-edits-average": "Dörsnittlich Ännern je Sied",
-       "statistics-views-total": "Weddergeven Sieden alltohoop",
-       "statistics-views-peredit": "Weddergeven Sieden je Ännern",
        "statistics-users": "Anmellt [[Special:ListUsers|Brukers]]",
        "statistics-users-active": "Aktive Brukers",
        "statistics-users-active-desc": "Brukers, de {{PLURAL:$1|in de vergahn 24 Stünnen|in de vergahn $1 Daag}} wat daan hebbt",
-       "statistics-mostpopular": "opmehrst ankekene Sieden",
        "pageswithprop-submit": "Los",
        "doubleredirects": "Dubbelte Wiederleiden",
        "doubleredirectstext": "<b>Wohrscho:</b> Disse List kann „falsche Positive“ bargen.\nDat passeert denn, wenn en Wiederleiden blangen de Wiederleiden-Verwies noch mehr Text mit annere Verwiesen hett.\nDe schallen denn löscht warrn. Elk Reeg wiest de eerste un tweete Wiederleiden un de eerste Reeg Text ut de Siet,\nto den vun den tweeten Wiederleiden wiest warrt, un to den de eerste Wiederleiden mehrst wiesen schall.",
        "uncategorizedtemplates": "Vörlagen ahn Kategorie",
        "unusedcategories": "Kategorien ahn insorteerte Artikels oder Ünnerkategorien",
        "unusedimages": "Weetbiller",
-       "popularpages": "Faken opropene Sieden",
        "wantedcategories": "Kategorien, de veel bruukt warrt, aver noch keen Text hebbt (nich anleggt sünd)",
        "wantedpages": "Sieden, de noch fehlt",
        "wantedpages-badtitle": "Ungülligen Titel in Resultaat: $1",
        "suppress": "Oversight",
        "booksources": "Bookhannel",
        "booksources-search-legend": "Na Böker bi Bookhökers söken",
-       "booksources-go": "Los",
        "booksources-text": "Hier staht Lenken na Websteden, woneem dat Böker to köpen gifft, de mitünner ok mehr Informatschonen to dat Book anbeden doot:",
        "booksources-invalid-isbn": "Süht ut, as wenn de angeven ISBN ungüllig is. Villicht hett dat en Fehler bi’t Afschrieven oder Koperen geven.",
        "specialloguserlabel": "Bruker:",
        "wlheader-enotif": "Benarichtigen per E-Mail is anstellt.",
        "wlheader-showupdated": "Sieden, de siet dien letzten Besöök ännert worrn sünd, warrt '''fett''' wiest.",
        "wlnote": "Ünnen {{PLURAL:$1|steiht de letzte Ännern|staht de letzten $1 Ännern}} vun de {{PLURAL:$2|letzte Stünn|letzten '''$2''' Stünnen}}.",
-       "wlshowlast": "Wies de letzten $1 Stünnen $2 Daag $3",
+       "wlshowlast": "Wies de letzten $1 Stünnen $2 Daag",
        "watchlist-options": "Optionen för de Oppasslist",
        "watching": "warrt op de Oppasslist ropsett...",
        "unwatching": "warrt vun de Oppasslist rünnernahmen...",
        "import": "Import vun Sieden",
        "importinterwiki": "Transwiki-Import",
        "import-interwiki-text": "Wähl en Wiki un en Siet för dat Importeren ut.\nDe Versionsdaten un Brukernaams blievt dor bi vörhannen.\nAll Transwiki-Import-Akschonen staht later ok in dat [[Special:Log/import|Import-Logbook]].",
-       "import-interwiki-source": "Bornwiki/sied:",
        "import-interwiki-history": "Importeer all Versionen vun disse Siet",
        "import-interwiki-templates": "All Vörlagen inslaten",
        "import-interwiki-submit": "Rinhalen",
        "exif-iimcategory-sci": "Wetenschap un Technologie",
        "exif-iimcategory-spo": "Sport",
        "exif-iimcategory-wea": "Wedder",
-       "watchlistall2": "alle",
        "namespacesall": "alle",
        "monthsall": "alle",
        "confirmemail": "Nettbreefadress bestätigen",
        "revdelete-restricted": "Inschränkungen för Administraters instellt",
        "revdelete-unrestricted": "Inschränkungen för Administraters rutnahmen",
        "rightsnone": "(kene)",
+       "revdelete-summary": "Tosamenfaten",
        "expandtemplates": "Vörlagen oplösen",
        "expand_templates_intro": "Mit disse Spezialsied köönt Vörlagen in ingeven Text in Wikitext ümwannelt warrn.\nOk Parserfunkschonen so as\n<nowiki>{{</nowiki>#language:…}}, un Variabeln so as\n<nowiki>{{</nowiki>CURRENTDAY}} warrt ümwannelt. Also so temlich allens, wat twischen swiefte Klammern steit.\nDorto warrt de nödigen Parser-Phasen in MediaWiki direkt opropen.",
        "expand_templates_title": "Kontexttitel, för {{FULLPAGENAME}} etc.:",
index 80dca86..b5d6908 100644 (file)
        "passwordreset-emailsent": "पासवर्ड परिवर्तनको लागि इमेल पठाइएको छ।",
        "passwordreset-emailsent-capture": "पासवर्ड परिवर्तनको लागि इमेल पठाइयो, जुन तल देखाइएकोछ।",
        "changeemail": "इमेल ठेगाना परिवर्तन गर्नुहोस",
-       "changeemail-header": "खाताको इमेल ठेगाना परिवर्तन गर्नुहोस",
        "changeemail-text": "आफ्नो इमेल ठेगाना परिवर्तन गर्न यो फारम भर्नुहोस। यसलाई पुष्टि गर्न तपाईले आफ्नो पासवर्ड हाल्नु पर्नेछ।",
        "changeemail-no-info": "यस पृष्ठमा सिधै जानको लागि प्रवेश गर्नु पर्ने हुन्छ ।",
        "changeemail-oldemail": "हालको इमेल-ठेगाना:",
        "changeemail-newemail": "नयाँ इमेल-ठेगाना:",
        "changeemail-none": "(कुनै पनि हैन)",
        "changeemail-submit": "इमेल परिवर्तन गर्ने",
-       "changeemail-cancel": "रद्द गर्ने",
        "resettokens": "टोकन पूर्वरुपमा फर्काउने",
        "resettokens-no-tokens": "पूर्वरुपमा फर्काउन कुनै पनि टोकन छैन ।",
        "resettokens-legend": "टोकनहरू पूर्वरुपमा फर्काउने",
        "mergehistory-same-destination": "स्रोत र गन्तव्य पृष्ठ एउटै हुनसक्दैनन्",
        "mergehistory-reason": "कारण :",
        "mergelog": "जोडेको लग",
-       "pagemerge-logentry": "[[$1]] लाई [[$2]] मा जोडियो  ( $3 सम्म पुनरावलोकन)",
        "revertmerge": "नमिलाउने",
        "mergelogpagetext": "एउटा पृष्ठको इतिहास अर्कोमा भर्खरै मिलाइएको सूची तल दिइन्छ।",
        "history-title": "\"$1\" को पुनरावृत्ति इतिहास",
        "searchrelated": "सम्बन्धित",
        "searchall": "सबै",
        "showingresults": "देखाउँदै  {{PLURAL:$1|'''१''' नतिजा|'''$1''' नतिजाहरू }} , #'''$2''' बाट सुरुहुने ।",
-       "showingresultsheader": "{{PLURAL:$5|नतिजा '''$1''' को '''$3'''|नतिजाहरु '''$1 - $2''' को'''$3'''}}  ,'''$4''' को लागि",
        "search-nonefound": "तपाईँको क्वेरीसँग मेल खाने नतिजाहरू भेटिएनन्",
        "powersearch-legend": "उन्नत खोज",
        "powersearch-ns": "नेमस्पेसेजहरुमा खोज्ने :",
        "unusedtemplateswlh": "अन्य कड़ीहरु",
        "randompage": "कुनै एक लेख",
        "randompage-nopages": "{{PLURAL:$2| $1 नाम भएको कुनै पृष्ट छैन|$1 नाम भएका कुनै पृष्टहरु छैनन्}}",
-       "randomincategory-selectcategory-submit": "जाने",
        "randomredirect": "कुनै एउटा अनुप्रेषितमा जाने",
        "randomredirect-nopages": "\"$1\" नामस्थानमा अनुप्रेषित छैन।",
        "statistics": "तथ्यांक",
        "statistics-header-pages": "पृष्ठहरुको तथ्याङ्क",
        "statistics-header-edits": "सम्पादनहरुको तथ्याङ्क",
-       "statistics-header-views": "तथ्याङ्क देखाउनुहोस्",
        "statistics-header-users": "प्रयोगकर्ता तथ्याङ्कहरू",
        "statistics-header-hooks": "अन्य तथ्याङ्कहरु",
        "statistics-articles": "सामग्री पृष्ठहरू",
        "statistics-files": "उर्ध्वभरण गरिएका फाइलहरु",
        "statistics-edits": "{{SITENAME}} स्थापना भए देखिको पृष्ठ सम्पादन",
        "statistics-edits-average": "प्रतिपृष्ठ औसत सम्पादन",
-       "statistics-views-total": "जम्मा हेर्नुहोस्",
-       "statistics-views-peredit": "प्रति पृष्ठ सम्पादन",
        "statistics-users": "दर्तागरिएको [[Special:ListUsers|प्रयोगकर्ताहरु]]",
        "statistics-users-active": "सकृय प्रयोगकर्ताहरु",
        "statistics-users-active-desc": "प्रयोगकर्ताहरु जो{{PLURAL:$1|बितेको एक दिन|बितेका $1 दिनहरु}}देखि  जो सक्रिय छन्",
-       "statistics-mostpopular": "सबैभन्दा धेरै हेरिएको पृष्ठहरु",
        "pageswithprop-submit": "जाने",
        "doubleredirects": "दोहोरो अनुप्रेषण",
        "double-redirect-fixed-move": "[[$1]] सारिएको छ।\nयसले [[$2]] तिर अनुप्रेषित गर्दछ।",
        "uncategorizedtemplates": "श्रेणीकरण नभएका टेम्प्लेटहरु",
        "unusedcategories": "प्रयोग नभएका श्रेणीहरू",
        "unusedimages": "प्रयोग नभएका फाइलहरु",
-       "popularpages": "धेरै रूचाईएका पृष्ठहरू",
        "wantedcategories": "माग भएका श्रेणीहरू",
        "wantedpages": "खोजिएका पृष्ठहरू",
        "wantedpages-badtitle": "नतिजा सूचीमा अमान्य शीर्षक:$1",
        "suppress": "अतिदृष्टि",
        "booksources": "किताबका श्रोतहरु",
        "booksources-search-legend": "किताबका श्रोतहरु खोज्ने",
-       "booksources-go": "जाउ",
        "specialloguserlabel": "निष्पादक:",
        "speciallogtitlelabel": "लक्ष्य (शीर्षक वा प्रयोगकर्ता)",
        "log": "लगहरु",
        "wlheader-enotif": "ईमेल जानकारी सक्रिय गरियो ।",
        "wlheader-showupdated": "तपाईँले पछिल्लो पल्ट भ्रमण गरेपछि परिवर्तन भएका पृष्ठहरूलाई <strong>गाढा<strong> गरेर देखाइएको छ ।",
        "wlnote": "$3 र $4 अनुसार विगत {{PLURAL:$2|घण्टामा|'''$2''' घण्टाहरुमा}} {{PLURAL:$1|गरिएको अन्तिम परिवर्तन तल दिइएकोछ|गरिएका अन्तिम  '''$1''' परिवर्तनहरु तल दिइएका छन्}}।",
-       "wlshowlast": "पछिल्ला $2 दिनहरूका $3 $1 घण्टाहरूका देखाउनुहोस्",
+       "wlshowlast": "पछिल्ला $2 दिनहरूका  $1 घण्टाहरूका देखाउनुहोस्",
        "watchlist-options": "निगरानि सूची विकल्प",
        "watching": "निगरानी गर्दै...",
        "unwatching": "निगरानीबाट हटाउँदै...",
        "thumbnail_image-missing": "फाइल हराएको भान भइरहेछ: $1",
        "import": "पृष्ठहरू आयात गर्नुहोस्",
        "importinterwiki": "Transwiki आयात",
-       "import-interwiki-source": "स्रोत विकि/ पृष्ठ :",
        "import-interwiki-history": "यो पृष्ठकोलागि सबै इतिहास संशोधनहरु प्रतिलिपि गर्ने",
        "import-interwiki-templates": "सबै टेम्प्लेटहरु(नमुना) समेट्ने",
        "import-interwiki-submit": "आयात",
        "pageinfo-header-restrictions": "पृष्ठ सुरक्षा",
        "pageinfo-header-properties": "पृष्ठ गुणहरू",
        "pageinfo-display-title": "प्रदर्शन शिर्षक",
-       "pageinfo-views": "अवलोकन संख्या",
        "pageinfo-watchers": "पृष्ठ निगरानी कर्ताहरुको संख्या",
        "pageinfo-edits": "कुल सम्पादन संख्या",
        "pageinfo-authors": "कुल फरक सम्पादकरूको संख्या",
        "exif-urgency-low": "न्युन ($1)",
        "exif-urgency-high": "उच्च ($1)",
        "exif-urgency-other": "प्रयोगकर्ताले निर्धारण गरेको प्राथमिकता ($1)",
-       "watchlistall2": "सबै",
        "namespacesall": "सबै",
        "monthsall": "सबै",
        "confirmemail": "इमेल ठेगाना पक्का गर्नुहोस्",
        "revdelete-unrestricted": "प्रवन्धककोलागि निषेधहरु हटाइयो ।",
        "logentry-move-move": "$1 द्वारा $3 पृष्ठलाई $4 मा सारियो",
        "rightsnone": "(कुनैपनि होइन)",
+       "revdelete-summary": "सम्पादन सारांश",
        "feedback-subject": "विषय:",
        "feedback-message": "सन्देश:",
        "feedback-cancel": "रद्द गर्ने",
index 73314c6..95b66b2 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Eukesh",
-            "आलोक"
-        ]
-    },
-    "tog-underline": "लिङ्कतेत अन्दरलाइन यानादिसँ:",
-    "tog-hideminor": "न्हुगु हिलेज्याय् चिधंगु सम्पादन सुचुकादिसँ",
-    "tog-extendwatchlist": "वाचलिस्टयात परिमार्जित याना सकल स्वेज्युगु हिलेज्या क्यनादिसँ, दकले लिपाया जक्क मखु",
-    "tog-usenewrc": "एन्ह्यान्स्ड् न्हुगु हिलेज्या (जाभास्क्रिप्ट)",
-    "tog-numberheadings": "अटो-ल्याखँ हेडिङ",
-    "tog-showtoolbar": "सम्पादन टुलबार क्यनादिसँ (जाभास्क्रिप्ट)",
-    "tog-editondblclick": "दबल क्लिकय् पौ सम्पादन यानादिसँ (जाभास्क्रिप्ट)",
-    "tog-editsectiononrightclick": "सेक्सनया छ्यँआखले राइट क्लिक याना सेक्सन सम्पादन यायेज्युगु यानादिसँ (जाभास्क्रिप्ट)",
-    "tog-rememberpassword": "जिगु लग इन थ्व कम्प्युतरय् लुमंकादिसँ (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "tog-watchcreations": "जिं देकागु / न्ह्यथनागु पौयात जिगु दृष्टिधलः(watchlist)य् तयादिसँ",
-    "tog-watchdefault": "जिं सम्पादन यानागु पौयात जिगु वाचलिस्टय् तयादिसँ",
-    "tog-watchmoves": "जिं संकागु (move) पौयात जिगु वाचलिस्टय् तयादिसँ",
-    "tog-watchdeletion": "जिं हुयागु (delete) पौयात जिगु वाचलिस्टय् तयादिसँ",
-    "tog-minordefault": "सकल सम्पादनतेत डिफल्टं चीधंगु यानादिसँ",
-    "tog-previewontop": "सम्पादन सन्दुक स्वया न्ह्यः प्रिभ्यु क्यनादिसँ",
-    "tog-previewonfirst": "न्हापाँगु सम्पादन स्वया न्ह्यः प्रिभ्यु क्यनादिसँ",
-    "tog-enotifwatchlistpages": "जिगु वाचलिस्टया पौ सम्पादन जुइबिले जितः इ-मेल यानादिसँ",
-    "tog-enotifusertalkpages": "जिगु खँल्हाबल्हा पौ सम्पादन जुइबिले जितः इ-मेल यानादिसँ",
-    "tog-enotifminoredits": "पौया चीधंगु सम्पादनया निंतिं नं जितः इ-मेल यानादिसँ",
-    "tog-enotifrevealaddr": "जिगु इ-मेल थाय्‌बाय्‌ नोटिफिकेसन इ-मेलय् क्यनादिसँ",
-    "tog-shownumberswatching": "स्वयाच्वंपिं छ्यलामितेगु ल्याखँ क्यनादिसँ",
-    "tog-fancysig": "कच्चा हस्ताक्षर (अटोम्याटिक लिङ्क मदेःकः)",
-    "tog-uselivepreview": "लाइभ प्रिभ्यु (जाभास्क्रिप्ट) इनेबल यानादिसँ (परिक्षणकाल)",
-    "tog-forceeditsummary": "सम्पादन सार खालि त्वतिबिले जित सशंकित यानादिसँ",
-    "tog-watchlisthideown": "जिगु सम्पादन वाचलिस्टय् सुचुकादिसँ",
-    "tog-watchlisthidebots": "वाचलिस्टं बोत सम्पादन सुचुकादिसँ",
-    "tog-watchlisthideminor": "वाचलिस्टं चीधंगु सम्पादन सुचुकादिसँ",
-    "tog-watchlisthideliu": "वाचलिस्टं लग्ड इन छ्यलामितेगु सम्पादन सुचुकादिसँ",
-    "tog-watchlisthideanons": "वाचलिस्टं अज्ञात छ्यलामिया सम्पादन सुचुकादिसँ",
-    "tog-ccmeonemails": "जिं मेपिं छ्यलामितेगु छ्वइगु इ-मेलतेगु कपि जित नं छ्वयादिसँ",
-    "tog-diffonly": "पाःगु (diffs) स्वया क्वेया पौया कण्टेण्ट क्यनादिमते",
-    "tog-showhiddencats": "सुचुकातगु पुचःत क्यनादिसँ",
-    "tog-noconvertlink": "लिङ्क शिर्षक हिलेज्या डिजेबल यानादिसँ",
-    "underline-always": "न्ह्याबिलें",
-    "underline-never": "नेभर",
-    "underline-default": "डिफल्ट ब्राउज यानादिसँ",
-    "sunday": "आइतबाः",
-    "monday": "सोमबाः",
-    "tuesday": "मङ्गलबाः",
-    "wednesday": "बुधबाः",
-    "thursday": "बिहिबाः",
-    "friday": "शुक्रबाः",
-    "saturday": "शनिबाः",
-    "sun": "आइत",
-    "mon": "सोम",
-    "tue": "मङ्गल",
-    "wed": "बुध",
-    "thu": "बिहि",
-    "fri": "शुक्र",
-    "sat": "शनि",
-    "january": "ज्यानुवरी",
-    "february": "फेब्रुवरी",
-    "march": "मार्च",
-    "april": "अप्रिल",
-    "may_long": "मे",
-    "june": "जुन",
-    "july": "जुलाइ",
-    "august": "अगस्ट",
-    "september": "सेप्टेम्बर",
-    "october": "अक्टोबर",
-    "november": "नोभेम्बर",
-    "december": "डिसेम्बर",
-    "january-gen": "ज्यानुवरी",
-    "february-gen": "फ्रेब्रुवरी",
-    "march-gen": "मार्च",
-    "april-gen": "अप्रिल",
-    "may-gen": "मे",
-    "june-gen": "जुन",
-    "july-gen": "जुलाइ",
-    "august-gen": "अगस्ट",
-    "september-gen": "सेप्टेम्बर",
-    "october-gen": "अक्टोबर",
-    "november-gen": "नोभेम्बर",
-    "december-gen": "डिसेम्बर",
-    "jan": "ज्यानु",
-    "feb": "फेब्",
-    "mar": "मार्",
-    "apr": "अप्रि",
-    "may": "मे",
-    "jun": "जुन",
-    "jul": "जुल",
-    "aug": "अग",
-    "sep": "सेप्",
-    "oct": "अक्ट्",
-    "nov": "नोभ",
-    "dec": "डिस",
-    "pagecategories": "{{PLURAL:$1|पुचः|पुचःतः}}",
-    "category_header": "पुचः \"$1\"य् दुगु पौतः",
-    "subcategories": "उपपुचःतः",
-    "category-media-header": "पुचः \"$1\"य् दुगु मिडिया",
-    "category-empty": "''थ्व पुचले आःईले पौ वा मिदिया मदु।''",
-    "hidden-categories": "{{PLURAL:$1|गुप्त पुचः|गुप्त पुचःतः}}",
-    "hidden-category-category": "गुप्त पुचःतः",
-    "category-subcat-count": "{{PLURAL:$2|थ्व पुचले बियातःगु उपपुचः जक्क दु।|थ्व पुचले $2 सकलय् बियातःगु {{PLURAL:$1|उपपुचः|$1 उपपुचःतः}} दु।}}",
-    "category-subcat-count-limited": "थ्व पुचले बियातःगु {{PLURAL:$1|उपपुचः|$1 उपपुचःत}} दु।",
-    "category-article-count": "{{PLURAL:$2|थ्व पुचले क्वे बियातःगु पौ दु।|$2 सकलय् थ्व बियातःगु {{PLURAL:$1|पौ|$1 पौस}} थ्व पुचले दु।}}",
-    "category-article-count-limited": "थ्व बियातःगु {{PLURAL:$1|पौ|$1 पौस}} थ्व पुचले दु।",
-    "category-file-count": "{{PLURAL:$2|थ्व पुचले थ्व जक्क फाइल दु।|सकल $2य् क्वे बियातःगु {{PLURAL:$1|फाइल|$1 फाइलत}} थ्व पुचले दु।}}",
-    "about": "विषयक",
-    "article": "कण्टेण्ट पौ",
-    "moredotdotdot": "अप्व॰॰॰",
-    "mypage": "जिगु पौ",
-    "mytalk": "जिगु खं",
-    "anontalk": "थ्व IPया निंतिं खँल्हाबल्हा",
-    "navigation": "परिवहन",
-    "and": "&#32;व",
-    "qbfind": "मालादिसँ",
-    "qbedit": "सम्पादन",
-    "qbpageoptions": "थ्व पौ",
-    "qbmyoptions": "जिगु पौ",
-    "faq": "आपालं न्यनिगु न्ह्यसः (FAQ)",
-    "faqpage": "Project:आपालं न्यनिगु न्ह्यसःत (FAQ)",
-    "vector-action-move": "संकादिसँ",
-    "vector-view-create": "दयेकादिसँ",
-    "vector-view-edit": "सम्पादन",
-    "vector-view-history": "इतिहास स्वयादिसँ",
-    "vector-view-view": "ब्वनादिसँ",
-    "returnto": "$1य् लिहाँझासँ।",
-    "tagline": "{{SITENAME}}नं",
-    "help": "ग्वहालि",
-    "search": "मालादिसँ",
-    "searchbutton": "मालादिसँ",
-    "go": "झासँ",
-    "searcharticle": "झासँ",
-    "history": "पौया इतिहास",
-    "history_short": "इतिहास",
-    "updatedmarker": "जिं दक्ले लिपा पौ स्वे धुंकाया अपडेट",
-    "printableversion": "ध्वायेज्युगु संस्करण",
-    "permalink": "स्थायी लिङ्क",
-    "print": "ध्वानादिसँ",
-    "view": "क्यनादिसँ",
-    "edit": "सम्पादन",
-    "create": "दयेकादिसँ",
-    "editthispage": "थ्व पौ सम्पादन यानादिसं",
-    "create-this-page": "थ्व पौ दयेकादिसँ",
-    "delete": "हुयादिसँ (दिलित)",
-    "deletethispage": "थ्व पौ हुयादिसँ (दिलित)",
-    "newpage": "न्हुगु पौ",
-    "talkpagelinktext": "खँल्हाबँल्हा",
-    "specialpage": "विषेश पौ",
-    "personaltools": "निजी ज्याब्व",
-    "talk": "खँलाबँला",
-    "toolbox": "ज्याब्व सन्दुक",
-    "projectpage": "ज्याखँ पौ क्येनादिसँ",
-    "otherlanguages": "मेमेगु भाषाय्",
-    "jumpto": "थन झासँ:",
-    "jumptosearch": "मालादिसँ",
-    "pool-errorunknown": "मस्युगु इरर",
-    "aboutsite": "{{SITENAME}}या बारेय्",
-    "aboutpage": "Project:बारेय्",
-    "copyright": "कण्टेण्ट $1 कथं उपलब्ध दु।",
-    "copyrightpage": "{{ns:project}}:लेखाधिकार",
-    "currentevents": "जुयाच्वँगु घटना",
-    "currentevents-url": "Project:जुयाच्वँगु घटना",
-    "disclaimers": "डिस्क्लेमर्स",
-    "disclaimerpage": "Project:साधारण डिस्क्लेमर्स",
-    "edithelp": "सम्पादन ग्वहालि",
-    "mainpage": "मू पौ",
-    "mainpage-description": "मू पौ",
-    "policy-url": "Project:नीति",
-    "portal": "सामाजिक मूलुखा",
-    "portal-url": "Project:सामाजिक मूलुखा",
-    "privacy": "दुबिस्ता नियम",
-    "privacypage": "Project:गुप्तता नियम",
-    "badaccess": "पर्मिसन इरर",
-    "badaccess-group0": "छिं अनुरोध यानादिगु ज्या छिं याये मछिं।",
-    "badaccess-groups": "छिं अनुरोध यानादिगु ज्या {{PLURAL:$2|पुचः|पुचःतः}}: $1या छ्यलामिं जक्क याये दु।",
-    "versionrequired": "मिडियाविकिया $1 संस्करण माःगु",
-    "versionrequiredtext": "थ्व पौ छ्यले यात मिडियाविकिया $1 संस्करण माः।\nस्वयादिसँ [[विशेष:संस्करण|संस्करण पौ]]।",
-    "ok": "ज्यु",
-    "youhavenewmessagesmulti": "$1य् छित न्हुगु सन्देश वगु दु",
-    "editsection": "सम्पादन",
-    "editold": "सम्पादन",
-    "editlink": "सम्पादन",
-    "editsectionhint": "खण्ड सम्पादन: $1",
-    "showtoc": "क्यनादिसँ",
-    "hidetoc": "सुचुकादिसँ",
-    "collapsible-expand": "चायेकादिसँ",
-    "red-link-title": "$1 (पौ मदु)",
-    "nstab-main": "पौ",
-    "nstab-user": "छ्य्‌लामि पौ",
-    "nstab-media": "मिडिया पौ",
-    "nstab-special": "विशेष",
-    "nstab-project": "ज्याझ्वः पौ",
-    "nstab-image": "फाइल",
-    "nstab-mediawiki": "सन्देश",
-    "nstab-template": "टेम्प्लेट",
-    "nstab-help": "ग्वहालि पौ",
-    "nstab-category": "पुचः",
-    "nosuchaction": "थन्यागु ज्या मदु",
-    "nosuchactiontext": "URLनं या धाःगु ज्या विकिं मस्यु",
-    "nosuchspecialpage": "थन्यागु विशेष पौ मदु",
-    "nospecialpagetext": "<strong>छिं मदुगु विशेष पौया माग तयादिल।</strong>\n\nअस्थित्वय् दुगु विशेष पौया धलः [[विशेष:विशेषपौ|{{int:specialpages}}]]य् दु।",
-    "databaseerror": "डेटाबेस इरर",
-    "laggedslavemode": "चेतावनी: पतिइ न्हुगु अपदेत मदेफु ।",
-    "readonly": "देताबेस संरक्षित",
-    "enterlockreason": "पौ कुनातयेगुया निंतिं कारण बियादिसँ, नापं पौ गब्ले चायेकिगु जुइफु उकिया अनुमान नं बियादिसँ",
-    "readonlytext": "थ्व डेटाबेस आःया ईले, सम्भवतः नियमित डेटाबेस मेन्टेनेन्सया निंतिं, न्हूगु एन्ट्रि व मेमेगु हिलेज्याया यायेमछिंकः कुनातःगु दु। थ्व धुंका हानं डेटाबेस साधारण जुइ।\n\nथ्व डेटाबेस कुनाःतम्ह प्रबन्धकं थ्व वर्णन ब्यूगु दु: $1",
-    "internalerror": "इन्तरनल इरर",
-    "viewsource": "स्रोत स्वयादिसँ",
-    "welcomeuser": "लसकुस, $1जु!",
-    "yourname": "छ्य्‌लामि नां:",
-    "yourpassword": "दुथखँग्वः (पासवर्द):",
-    "yourpasswordagain": "दुथखँग्वः हानं तियादिसँ:",
-    "yourdomainname": "छिगु दोमेन:",
-    "login": "दुहां वनेगु",
-    "nav-login-createaccount": "दुहां वनेगु / खाता चायेकिगु",
-    "userlogin": "दुहां वनेगु / खाता चायेकिगु",
-    "logout": "पिने झासँ",
-    "userlogout": "पिने झासँ",
-    "nologinlink": "खाता न्ह्यथनादिसँ",
-    "createaccount": "खाता चायेकादिसँ",
-    "gotaccountlink": "दुहां झासँ",
-    "badretype": "छिं तियादिगु पासवर्द पाय्‌छि मजु।",
-    "loginsuccesstitle": "लग इन सफल जुल",
-    "emaildisabled": "थ्व फाइलं इमेल छ्वयेमफु।",
-    "accountcreated": "खाता न्ह्येथन",
-    "accountcreatedtext": "$1या निंतिं छ्य्‌लामि खाता चायेकूगु दु।",
-    "loginlanguagelabel": "भाषा: $1",
-    "changepassword": "पासवर्द हिलादिसँ",
-    "changeemail-submit": "इ-मेल हिलादिसँ",
-    "changeemail-cancel": "खारेज",
-    "bold_sample": "गाढा आखः",
-    "bold_tip": "गाढा आखः",
-    "italic_sample": "बेक्वःगु आखः",
-    "italic_tip": "बेक्वःगु आखः",
-    "link_tip": "आन्तरिक लिंक",
-    "summary": "सारांश:",
-    "minoredit": "थ्व चिधंगु सम्पादन ख",
-    "watchthis": "थ्व पौ स्वयादिसँ",
-    "savearticle": "पौ स्वथनादिसँ",
-    "preview": "न्हेकिपा",
-    "showpreview": "न्हेकिपा क्यनादिसँ",
-    "showlivepreview": "जुथें (लाइभ) न्हेकिपा",
-    "showdiff": "हिसुझ्वः क्यनादिसँ",
-    "anoneditwarning": "'''न्ह्यःखँ:''' छि लग्द इन मदु। \nछिगु IP address पौया सम्पादन इतिहासय् स्वथनिगु जुइ।",
-    "anonpreviewwarning": "''छि लग्द इन मदु। थ्व पौ स्वथनादिल धाःसा छिगु IP address थ्व पौया इतिहासय् स्वथनिगु जुइ।''",
-    "loginreqtitle": "लग इन माःगु",
-    "loginreqpagetext": "मेमेगु पौ स्वयेत छिं $1 यायेमा/जुइमा।",
-    "accmailtitle": "पासवर्द छ्वल।",
-    "newarticle": "(न्हु)",
-    "note": "'''होस यानादिसँ:'''",
-    "previewnote": "'''थ्व पूर्वालोकन जक्क ख। छिं यानादिगु सम्पादन स्वथंगु मदुनि!'''",
-    "editing": "$1 सम्पादन जुयाच्वँगु दु",
-    "editconflict": "सम्पादन द्वंगु दु: $1",
-    "yourtext": "छिगु आखः",
-    "storedversion": "स्वथनातगु संस्करण",
-    "content-model-text": "सादा आखः",
-    "revisionasof": "$1 तक्कया संस्करण",
-    "previousrevision": "←पुलांगु संस्करण",
-    "searchprofile-everything": "दक्वं",
-    "search-result-size": "$1 ({{PLURAL:$2|1 खँग्वः |$2 खँग्वःत}})",
-    "searchrelated": "स्वापू दुःगु",
-    "searchall": "सकल",
-    "mypreferences": "जिगु प्राथमिकता",
-    "prefs-skin": "भुँसा",
-    "prefs-datetime": "दिं व ई",
-    "prefs-personal": "छ्य्‌लामि प्रोफाइल",
-    "prefs-rc": "न्हुगु हिलेज्या",
-    "saveprefs": "स्वथनादिसँ",
-    "youremail": "इ-मेल:",
-    "username": "छ्य्‌लामि नां:",
-    "yourrealname": "वास्तविक नां:",
-    "yourlanguage": "भाषा:",
-    "gender-male": "मिजं",
-    "gender-female": "मिसा",
-    "email": "इ-मेल",
-    "userrights-user-editname": "छपू छ्य्‌लामि नां तयादिसँ:",
-    "group": "पुचः",
-    "group-user": "छ्य्‌लामित",
-    "group-bot": "बोत",
-    "recentchanges": "नकतिनिया हिसुझ्वः",
-    "show": "क्यनादिसँ",
-    "upload": "फाइल अपलोद यानादिसँ",
-    "file-anchor-link": "फाइल",
-    "filehist-user": "छ्य्‌लामि",
-    "randompage": "छगु च्वसुइ येंकादिसं",
-    "statistics": "तथ्याङ्क",
-    "withoutinterwiki-submit": "क्यनादिसँ",
-    "newpages-username": "छ्येलेमि नां:",
-    "allpages": "सकल पौत",
-    "nextpage": "मेगु पौ ($1)",
-    "allarticles": "सकल च्वसुत",
-    "allpagessubmit": "झासँ",
-    "categories": "पुचःत",
-    "emailusername": "छ्य्‌लामि नां (युजर नेम) :",
-    "restriction-edit": "सम्पादन",
-    "namespace": "नेमस्पेस:",
-    "blanknamespace": "(मू)",
-    "mycontris": "जिगु योगदान",
-    "sp-contributions-talk": "खँल्हाबँल्हा",
-    "whatlinkshere": "थन छु स्वाई",
-    "contribslink": "योगदान",
-    "movereason": "कारण:",
-    "tooltip-search": "{{SITENAME}} मालादिसं",
-    "tooltip-search-fulltext": "थ्व खँग्वःया निंतिं पौस मालादिसं",
-    "tooltip-p-logo": "मू पौय् झासँ",
-    "tooltip-n-mainpage": "मू पौ भ्रमण यानादिसँ",
-    "tooltip-n-portal": "ज्याझ्वःया बारेय्, छिं छु यायेछिं, गन खँ सीकिगु",
-    "tooltip-n-currentevents": "जुयाच्वँगु घटनाया लिधँसा तथ्य मालादिसँ",
-    "tooltip-n-recentchanges": "थ्व विकिया न्हुगु हिलेज्याया धलः।",
-    "tooltip-n-randompage": "न्ह्याःगु छगू पौ क्यनादिसँ",
-    "tooltip-n-help": "खँ सीकिगु थाय्।",
-    "tooltip-t-whatlinkshere": "थन स्वाइगु सकल विकिपौया धलः",
-    "tooltip-t-recentchangeslinked": "थ्व पौ नाप स्वाःगु पौतेगु न्हुगु हिलेज्या",
-    "tooltip-feed-rss": "थ्व पौया RSS फीड",
-    "tooltip-feed-atom": "थ्व पौया Atom फीड",
-    "tooltip-t-contributions": "थ्व छ्य्‌लामिया योगदानया धलः क्यनादिसँ",
-    "tooltip-t-emailuser": "थ्व छ्य्‌लामियात इ-मेल छ्वयादिसँ",
-    "tooltip-t-upload": "फाइल अपलोद यानादिसँ",
-    "tooltip-t-specialpages": "सकल विशेष पौस धलः",
-    "tooltip-t-print": "थ्व पौस ध्वायेज्युगु संस्करण",
-    "tooltip-t-permalink": "थ्व पौस थ्व संस्करणया पर्मानेन्ट लिङ्क",
-    "tooltip-ca-nstab-main": "कन्टेन्ट पौ स्वयादिसँ",
-    "tooltip-ca-nstab-user": "छ्य्‌लामिपौ स्वयादिसँ",
-    "tooltip-ca-nstab-media": "मिडिया पौ स्वयादिसँ",
-    "tooltip-ca-nstab-special": "थ्व छगू विशेष पौ ख ; थ्व पौयात छिं सम्पादन याये मछिं।",
-    "tooltip-ca-nstab-project": "ज्याझ्वः पौ स्वयादिसँ",
-    "tooltip-ca-nstab-image": "फाइल पौ स्वयादिसँ",
-    "tooltip-ca-nstab-mediawiki": "व्यवस्थापन सन्देश स्वयादिसँ",
-    "tooltip-ca-nstab-template": "टेम्प्लेट स्वयादिसँ",
-    "tooltip-ca-nstab-help": "ग्वहालि पौ स्वयादिसँ",
-    "tooltip-ca-nstab-category": "पुचः पौ स्वयादिसँ",
-    "tooltip-minoredit": "थ्व छगू चिधंगु सम्पादन ख",
-    "tooltip-save": "छिगु परिवर्तन स्वथनादिसँ",
-    "tooltip-preview": "छिगु परिवर्तन पुर्वालोकन यानादिसँ, कृपया स्वथने न्ह्यः थ्व छ्य्‌लादिसँ!",
-    "tooltip-diff": "छिं पतीइ यानादिगु हिलेज्या क्यनादिसँ।",
-    "tooltip-compareselectedversions": "निगु ल्ययातःगु संस्करणया दथुइ भिन्नता स्वयादिसँ।",
-    "tooltip-watch": "थ्व पौयात छिगु वाचलिस्टय् तनादिसँ",
-    "tooltip-recreate": "थ्व पौ हुयाछ्वेधुंकुगु जुसां पुनर्निर्माण यानादिसँ",
-    "tooltip-upload": "अपलोड न्ह्यथनादिसँ",
-    "tooltip-rollback": "\"रोलब्याकं\" छगू क्लिकय् थ्व पौयात न्हापाया छ्य्‌लामिं याःगु परिवर्तनय् हिलाछ्वइ।",
-    "tooltip-undo": "\"Undo\" नं थ्व सम्पादनयात खारेज याना सम्पादन फर्म यात प्रिभ्यु मोडय् चायेकी।\nथुकिलिं सारांशय् कारण तनेछिंकी।",
-    "common.css": "/* थन तःगु CSS सकल स्किनय् छ्य्‌लिगु जुइ */",
-    "cologneblue.css": "/* थन तःगु CSS नं कोलोन ब्लु स्किनया छ्य्‌लामितेत असर याइ */",
-    "monobook.css": "/* थन तःगु CSS नं मोनोबुक स्किनया छ्य्‌लामितेत असर याइ */",
-    "modern.css": "/* थन तःगु CSS नं मोडर्न स्किनया छ्य्‌लामितेत असर याइ */",
-    "print.css": "/* थन तःगु CSS नं प्रिन्ट आउटपुटयात असर याइ */",
-    "others": "मेमेगु",
-    "exif-imagewidth": "ब्याः",
-    "exif-imagelength": "जाः",
-    "exif-imagedescription": "किपाया नां",
-    "exif-make": "किपासाः दयेकामि",
-    "exif-model": "किपासाः मोदेल",
-    "exif-software": "छ्यलातःगु सफ्तवेयर",
-    "exif-artist": "च्वमि",
-    "exif-copyright": "लेखाधिकार थुवा",
-    "exif-pixelydimension": "किपा ब्याः",
-    "exif-pixelxdimension": "किपा जाः",
-    "exif-dc-date": "तिथि",
-    "namespacesall": "सकल",
-    "autosumm-new": "न्हुगु पौ: $1",
-    "specialpages": "विषेश पौत:"
+       "@metadata": {
+               "authors": [
+                       "Eukesh",
+                       "आलोक"
+               ]
+       },
+       "tog-underline": "लिङ्कतेत अन्दरलाइन यानादिसँ:",
+       "tog-hideminor": "न्हुगु हिलेज्याय् चिधंगु सम्पादन सुचुकादिसँ",
+       "tog-extendwatchlist": "वाचलिस्टयात परिमार्जित याना सकल स्वेज्युगु हिलेज्या क्यनादिसँ, दकले लिपाया जक्क मखु",
+       "tog-usenewrc": "एन्ह्यान्स्ड् न्हुगु हिलेज्या (जाभास्क्रिप्ट)",
+       "tog-numberheadings": "अटो-ल्याखँ हेडिङ",
+       "tog-showtoolbar": "सम्पादन टुलबार क्यनादिसँ (जाभास्क्रिप्ट)",
+       "tog-editondblclick": "दबल क्लिकय् पौ सम्पादन यानादिसँ (जाभास्क्रिप्ट)",
+       "tog-editsectiononrightclick": "सेक्सनया छ्यँआखले राइट क्लिक याना सेक्सन सम्पादन यायेज्युगु यानादिसँ (जाभास्क्रिप्ट)",
+       "tog-watchcreations": "जिं देकागु / न्ह्यथनागु पौयात जिगु दृष्टिधलः(watchlist)य् तयादिसँ",
+       "tog-watchdefault": "जिं सम्पादन यानागु पौयात जिगु वाचलिस्टय् तयादिसँ",
+       "tog-watchmoves": "जिं संकागु (move) पौयात जिगु वाचलिस्टय् तयादिसँ",
+       "tog-watchdeletion": "जिं हुयागु (delete) पौयात जिगु वाचलिस्टय् तयादिसँ",
+       "tog-minordefault": "सकल सम्पादनतेत डिफल्टं चीधंगु यानादिसँ",
+       "tog-previewontop": "सम्पादन सन्दुक स्वया न्ह्यः प्रिभ्यु क्यनादिसँ",
+       "tog-previewonfirst": "न्हापाँगु सम्पादन स्वया न्ह्यः प्रिभ्यु क्यनादिसँ",
+       "tog-enotifwatchlistpages": "जिगु वाचलिस्टया पौ सम्पादन जुइबिले जितः इ-मेल यानादिसँ",
+       "tog-enotifusertalkpages": "जिगु खँल्हाबल्हा पौ सम्पादन जुइबिले जितः इ-मेल यानादिसँ",
+       "tog-enotifminoredits": "पौया चीधंगु सम्पादनया निंतिं नं जितः इ-मेल यानादिसँ",
+       "tog-enotifrevealaddr": "जिगु इ-मेल थाय्‌बाय्‌ नोटिफिकेसन इ-मेलय् क्यनादिसँ",
+       "tog-shownumberswatching": "स्वयाच्वंपिं छ्यलामितेगु ल्याखँ क्यनादिसँ",
+       "tog-fancysig": "कच्चा हस्ताक्षर (अटोम्याटिक लिङ्क मदेःकः)",
+       "tog-uselivepreview": "लाइभ प्रिभ्यु (जाभास्क्रिप्ट) इनेबल यानादिसँ (परिक्षणकाल)",
+       "tog-forceeditsummary": "सम्पादन सार खालि त्वतिबिले जित सशंकित यानादिसँ",
+       "tog-watchlisthideown": "जिगु सम्पादन वाचलिस्टय् सुचुकादिसँ",
+       "tog-watchlisthidebots": "वाचलिस्टं बोत सम्पादन सुचुकादिसँ",
+       "tog-watchlisthideminor": "वाचलिस्टं चीधंगु सम्पादन सुचुकादिसँ",
+       "tog-watchlisthideliu": "वाचलिस्टं लग्ड इन छ्यलामितेगु सम्पादन सुचुकादिसँ",
+       "tog-watchlisthideanons": "वाचलिस्टं अज्ञात छ्यलामिया सम्पादन सुचुकादिसँ",
+       "tog-ccmeonemails": "जिं मेपिं छ्यलामितेगु छ्वइगु इ-मेलतेगु कपि जित नं छ्वयादिसँ",
+       "tog-diffonly": "पाःगु (diffs) स्वया क्वेया पौया कण्टेण्ट क्यनादिमते",
+       "tog-showhiddencats": "सुचुकातगु पुचःत क्यनादिसँ",
+       "underline-always": "न्ह्याबिलें",
+       "underline-never": "नेभर",
+       "underline-default": "डिफल्ट ब्राउज यानादिसँ",
+       "sunday": "आइतबाः",
+       "monday": "सोमबाः",
+       "tuesday": "मङ्गलबाः",
+       "wednesday": "बुधबाः",
+       "thursday": "बिहिबाः",
+       "friday": "शुक्रबाः",
+       "saturday": "शनिबाः",
+       "sun": "आइत",
+       "mon": "सोम",
+       "tue": "मङ्गल",
+       "wed": "बुध",
+       "thu": "बिहि",
+       "fri": "शुक्र",
+       "sat": "शनि",
+       "january": "ज्यानुवरी",
+       "february": "फेब्रुवरी",
+       "march": "मार्च",
+       "april": "अप्रिल",
+       "may_long": "मे",
+       "june": "जुन",
+       "july": "जुलाइ",
+       "august": "अगस्ट",
+       "september": "सेप्टेम्बर",
+       "october": "अक्टोबर",
+       "november": "नोभेम्बर",
+       "december": "डिसेम्बर",
+       "january-gen": "ज्यानुवरी",
+       "february-gen": "फ्रेब्रुवरी",
+       "march-gen": "मार्च",
+       "april-gen": "अप्रिल",
+       "may-gen": "मे",
+       "june-gen": "जुन",
+       "july-gen": "जुलाइ",
+       "august-gen": "अगस्ट",
+       "september-gen": "सेप्टेम्बर",
+       "october-gen": "अक्टोबर",
+       "november-gen": "नोभेम्बर",
+       "december-gen": "डिसेम्बर",
+       "jan": "ज्यानु",
+       "feb": "फेब्",
+       "mar": "मार्",
+       "apr": "अप्रि",
+       "may": "मे",
+       "jun": "जुन",
+       "jul": "जुल",
+       "aug": "अग",
+       "sep": "सेप्",
+       "oct": "अक्ट्",
+       "nov": "नोभ",
+       "dec": "डिस",
+       "pagecategories": "{{PLURAL:$1|पुचः|पुचःतः}}",
+       "category_header": "पुचः \"$1\"य् दुगु पौतः",
+       "subcategories": "उपपुचःतः",
+       "category-media-header": "पुचः \"$1\"य् दुगु मिडिया",
+       "category-empty": "''थ्व पुचले आःईले पौ वा मिदिया मदु।''",
+       "hidden-categories": "{{PLURAL:$1|गुप्त पुचः|गुप्त पुचःतः}}",
+       "hidden-category-category": "गुप्त पुचःतः",
+       "category-subcat-count": "{{PLURAL:$2|थ्व पुचले बियातःगु उपपुचः जक्क दु।|थ्व पुचले $2 सकलय् बियातःगु {{PLURAL:$1|उपपुचः|$1 उपपुचःतः}} दु।}}",
+       "category-subcat-count-limited": "थ्व पुचले बियातःगु {{PLURAL:$1|उपपुचः|$1 उपपुचःत}} दु।",
+       "category-article-count": "{{PLURAL:$2|थ्व पुचले क्वे बियातःगु पौ दु।|$2 सकलय् थ्व बियातःगु {{PLURAL:$1|पौ|$1 पौस}} थ्व पुचले दु।}}",
+       "category-article-count-limited": "थ्व बियातःगु {{PLURAL:$1|पौ|$1 पौस}} थ्व पुचले दु।",
+       "category-file-count": "{{PLURAL:$2|थ्व पुचले थ्व जक्क फाइल दु।|सकल $2य् क्वे बियातःगु {{PLURAL:$1|फाइल|$1 फाइलत}} थ्व पुचले दु।}}",
+       "about": "विषयक",
+       "article": "कण्टेण्ट पौ",
+       "moredotdotdot": "अप्व॰॰॰",
+       "mypage": "जिगु पौ",
+       "mytalk": "जिगु खं",
+       "anontalk": "थ्व IPया निंतिं खँल्हाबल्हा",
+       "navigation": "परिवहन",
+       "and": "&#32;व",
+       "qbfind": "मालादिसँ",
+       "qbedit": "सम्पादन",
+       "qbpageoptions": "थ्व पौ",
+       "qbmyoptions": "जिगु पौ",
+       "faq": "आपालं न्यनिगु न्ह्यसः (FAQ)",
+       "faqpage": "Project:आपालं न्यनिगु न्ह्यसःत (FAQ)",
+       "returnto": "$1य् लिहाँझासँ।",
+       "tagline": "{{SITENAME}}नं",
+       "help": "ग्वहालि",
+       "search": "मालादिसँ",
+       "searchbutton": "मालादिसँ",
+       "go": "झासँ",
+       "searcharticle": "झासँ",
+       "history": "पौया इतिहास",
+       "history_short": "इतिहास",
+       "updatedmarker": "जिं दक्ले लिपा पौ स्वे धुंकाया अपडेट",
+       "printableversion": "ध्वायेज्युगु संस्करण",
+       "permalink": "स्थायी लिङ्क",
+       "print": "ध्वानादिसँ",
+       "view": "क्यनादिसँ",
+       "edit": "सम्पादन",
+       "create": "दयेकादिसँ",
+       "editthispage": "थ्व पौ सम्पादन यानादिसं",
+       "create-this-page": "थ्व पौ दयेकादिसँ",
+       "delete": "हुयादिसँ (दिलित)",
+       "deletethispage": "थ्व पौ हुयादिसँ (दिलित)",
+       "newpage": "न्हुगु पौ",
+       "talkpagelinktext": "खँल्हाबँल्हा",
+       "specialpage": "विषेश पौ",
+       "personaltools": "निजी ज्याब्व",
+       "talk": "खँलाबँला",
+       "toolbox": "ज्याब्व सन्दुक",
+       "projectpage": "ज्याखँ पौ क्येनादिसँ",
+       "otherlanguages": "मेमेगु भाषाय्",
+       "jumpto": "थन झासँ:",
+       "jumptosearch": "मालादिसँ",
+       "pool-errorunknown": "मस्युगु इरर",
+       "aboutsite": "{{SITENAME}}या बारेय्",
+       "aboutpage": "Project:बारेय्",
+       "copyright": "कण्टेण्ट $1 कथं उपलब्ध दु।",
+       "copyrightpage": "{{ns:project}}:लेखाधिकार",
+       "currentevents": "जुयाच्वँगु घटना",
+       "currentevents-url": "Project:जुयाच्वँगु घटना",
+       "disclaimers": "डिस्क्लेमर्स",
+       "disclaimerpage": "Project:साधारण डिस्क्लेमर्स",
+       "edithelp": "सम्पादन ग्वहालि",
+       "mainpage": "मू पौ",
+       "mainpage-description": "मू पौ",
+       "policy-url": "Project:नीति",
+       "portal": "सामाजिक मूलुखा",
+       "portal-url": "Project:सामाजिक मूलुखा",
+       "privacy": "दुबिस्ता नियम",
+       "privacypage": "Project:गुप्तता नियम",
+       "badaccess": "पर्मिसन इरर",
+       "badaccess-group0": "छिं अनुरोध यानादिगु ज्या छिं याये मछिं।",
+       "badaccess-groups": "छिं अनुरोध यानादिगु ज्या {{PLURAL:$2|पुचः|पुचःतः}}: $1या छ्यलामिं जक्क याये दु।",
+       "versionrequired": "मिडियाविकिया $1 संस्करण माःगु",
+       "versionrequiredtext": "थ्व पौ छ्यले यात मिडियाविकिया $1 संस्करण माः।\nस्वयादिसँ [[विशेष:संस्करण|संस्करण पौ]]।",
+       "ok": "ज्यु",
+       "youhavenewmessagesmulti": "$1य् छित न्हुगु सन्देश वगु दु",
+       "editsection": "सम्पादन",
+       "editold": "सम्पादन",
+       "editlink": "सम्पादन",
+       "editsectionhint": "खण्ड सम्पादन: $1",
+       "showtoc": "क्यनादिसँ",
+       "hidetoc": "सुचुकादिसँ",
+       "collapsible-expand": "चायेकादिसँ",
+       "red-link-title": "$1 (पौ मदु)",
+       "nstab-main": "पौ",
+       "nstab-user": "छ्य्‌लामि पौ",
+       "nstab-media": "मिडिया पौ",
+       "nstab-special": "विशेष",
+       "nstab-project": "ज्याझ्वः पौ",
+       "nstab-image": "फाइल",
+       "nstab-mediawiki": "सन्देश",
+       "nstab-template": "टेम्प्लेट",
+       "nstab-help": "ग्वहालि पौ",
+       "nstab-category": "पुचः",
+       "nosuchaction": "थन्यागु ज्या मदु",
+       "nosuchactiontext": "URLनं या धाःगु ज्या विकिं मस्यु",
+       "nosuchspecialpage": "थन्यागु विशेष पौ मदु",
+       "nospecialpagetext": "<strong>छिं मदुगु विशेष पौया माग तयादिल।</strong>\n\nअस्थित्वय् दुगु विशेष पौया धलः [[विशेष:विशेषपौ|{{int:specialpages}}]]य् दु।",
+       "databaseerror": "डेटाबेस इरर",
+       "laggedslavemode": "चेतावनी: पतिइ न्हुगु अपदेत मदेफु ।",
+       "readonly": "देताबेस संरक्षित",
+       "enterlockreason": "पौ कुनातयेगुया निंतिं कारण बियादिसँ, नापं पौ गब्ले चायेकिगु जुइफु उकिया अनुमान नं बियादिसँ",
+       "readonlytext": "थ्व डेटाबेस आःया ईले, सम्भवतः नियमित डेटाबेस मेन्टेनेन्सया निंतिं, न्हूगु एन्ट्रि व मेमेगु हिलेज्याया यायेमछिंकः कुनातःगु दु। थ्व धुंका हानं डेटाबेस साधारण जुइ।\n\nथ्व डेटाबेस कुनाःतम्ह प्रबन्धकं थ्व वर्णन ब्यूगु दु: $1",
+       "internalerror": "इन्तरनल इरर",
+       "viewsource": "स्रोत स्वयादिसँ",
+       "welcomeuser": "लसकुस, $1जु!",
+       "yourname": "छ्य्‌लामि नां:",
+       "yourpassword": "दुथखँग्वः (पासवर्द):",
+       "yourpasswordagain": "दुथखँग्वः हानं तियादिसँ:",
+       "yourdomainname": "छिगु दोमेन:",
+       "login": "दुहां वनेगु",
+       "nav-login-createaccount": "दुहां वनेगु / खाता चायेकिगु",
+       "userlogin": "दुहां वनेगु / खाता चायेकिगु",
+       "logout": "पिने झासँ",
+       "userlogout": "पिने झासँ",
+       "nologinlink": "खाता न्ह्यथनादिसँ",
+       "createaccount": "खाता चायेकादिसँ",
+       "gotaccountlink": "दुहां झासँ",
+       "badretype": "छिं तियादिगु पासवर्द पाय्‌छि मजु।",
+       "loginsuccesstitle": "लग इन सफल जुल",
+       "emaildisabled": "थ्व फाइलं इमेल छ्वयेमफु।",
+       "accountcreated": "खाता न्ह्येथन",
+       "accountcreatedtext": "$1या निंतिं छ्य्‌लामि खाता चायेकूगु दु।",
+       "loginlanguagelabel": "भाषा: $1",
+       "changepassword": "पासवर्द हिलादिसँ",
+       "changeemail-submit": "इ-मेल हिलादिसँ",
+       "bold_sample": "गाढा आखः",
+       "bold_tip": "गाढा आखः",
+       "italic_sample": "बेक्वःगु आखः",
+       "italic_tip": "बेक्वःगु आखः",
+       "link_tip": "आन्तरिक लिंक",
+       "summary": "सारांश:",
+       "minoredit": "थ्व चिधंगु सम्पादन ख",
+       "watchthis": "थ्व पौ स्वयादिसँ",
+       "savearticle": "पौ स्वथनादिसँ",
+       "preview": "न्हेकिपा",
+       "showpreview": "न्हेकिपा क्यनादिसँ",
+       "showdiff": "हिसुझ्वः क्यनादिसँ",
+       "anoneditwarning": "'''न्ह्यःखँ:''' छि लग्द इन मदु। \nछिगु IP address पौया सम्पादन इतिहासय् स्वथनिगु जुइ।",
+       "anonpreviewwarning": "''छि लग्द इन मदु। थ्व पौ स्वथनादिल धाःसा छिगु IP address थ्व पौया इतिहासय् स्वथनिगु जुइ।''",
+       "loginreqtitle": "लग इन माःगु",
+       "loginreqpagetext": "मेमेगु पौ स्वयेत छिं $1 यायेमा/जुइमा।",
+       "accmailtitle": "पासवर्द छ्वल।",
+       "newarticle": "(न्हु)",
+       "note": "'''होस यानादिसँ:'''",
+       "previewnote": "'''थ्व पूर्वालोकन जक्क ख। छिं यानादिगु सम्पादन स्वथंगु मदुनि!'''",
+       "editing": "$1 सम्पादन जुयाच्वँगु दु",
+       "editconflict": "सम्पादन द्वंगु दु: $1",
+       "yourtext": "छिगु आखः",
+       "storedversion": "स्वथनातगु संस्करण",
+       "content-model-text": "सादा आखः",
+       "revisionasof": "$1 तक्कया संस्करण",
+       "previousrevision": "←पुलांगु संस्करण",
+       "searchprofile-everything": "दक्वं",
+       "search-result-size": "$1 ({{PLURAL:$2|1 खँग्वः |$2 खँग्वःत}})",
+       "searchrelated": "स्वापू दुःगु",
+       "searchall": "सकल",
+       "mypreferences": "जिगु प्राथमिकता",
+       "prefs-skin": "भुँसा",
+       "prefs-personal": "छ्य्‌लामि प्रोफाइल",
+       "prefs-rc": "न्हुगु हिलेज्या",
+       "saveprefs": "स्वथनादिसँ",
+       "youremail": "इ-मेल:",
+       "username": "छ्य्‌लामि नां:",
+       "yourrealname": "वास्तविक नां:",
+       "yourlanguage": "भाषा:",
+       "gender-male": "मिजं",
+       "gender-female": "मिसा",
+       "email": "इ-मेल",
+       "userrights-user-editname": "छपू छ्य्‌लामि नां तयादिसँ:",
+       "group": "पुचः",
+       "group-user": "छ्य्‌लामित",
+       "group-bot": "बोत",
+       "recentchanges": "नकतिनिया हिसुझ्वः",
+       "show": "क्यनादिसँ",
+       "upload": "फाइल अपलोद यानादिसँ",
+       "file-anchor-link": "फाइल",
+       "filehist-user": "छ्य्‌लामि",
+       "randompage": "छगु च्वसुइ येंकादिसं",
+       "statistics": "तथ्याङ्क",
+       "withoutinterwiki-submit": "क्यनादिसँ",
+       "newpages-username": "छ्येलेमि नां:",
+       "allpages": "सकल पौत",
+       "nextpage": "मेगु पौ ($1)",
+       "allarticles": "सकल च्वसुत",
+       "allpagessubmit": "झासँ",
+       "categories": "पुचःत",
+       "emailusername": "छ्य्‌लामि नां (युजर नेम) :",
+       "restriction-edit": "सम्पादन",
+       "namespace": "नेमस्पेस:",
+       "blanknamespace": "(मू)",
+       "mycontris": "जिगु योगदान",
+       "sp-contributions-talk": "खँल्हाबँल्हा",
+       "whatlinkshere": "थन छु स्वाई",
+       "contribslink": "योगदान",
+       "movereason": "कारण:",
+       "tooltip-search": "{{SITENAME}} मालादिसं",
+       "tooltip-search-fulltext": "थ्व खँग्वःया निंतिं पौस मालादिसं",
+       "tooltip-p-logo": "मू पौय् झासँ",
+       "tooltip-n-mainpage": "मू पौ भ्रमण यानादिसँ",
+       "tooltip-n-portal": "ज्याझ्वःया बारेय्, छिं छु यायेछिं, गन खँ सीकिगु",
+       "tooltip-n-currentevents": "जुयाच्वँगु घटनाया लिधँसा तथ्य मालादिसँ",
+       "tooltip-n-recentchanges": "थ्व विकिया न्हुगु हिलेज्याया धलः।",
+       "tooltip-n-randompage": "न्ह्याःगु छगू पौ क्यनादिसँ",
+       "tooltip-n-help": "खँ सीकिगु थाय्।",
+       "tooltip-t-whatlinkshere": "थन स्वाइगु सकल विकिपौया धलः",
+       "tooltip-t-recentchangeslinked": "थ्व पौ नाप स्वाःगु पौतेगु न्हुगु हिलेज्या",
+       "tooltip-feed-rss": "थ्व पौया RSS फीड",
+       "tooltip-feed-atom": "थ्व पौया Atom फीड",
+       "tooltip-t-contributions": "थ्व छ्य्‌लामिया योगदानया धलः क्यनादिसँ",
+       "tooltip-t-emailuser": "थ्व छ्य्‌लामियात इ-मेल छ्वयादिसँ",
+       "tooltip-t-upload": "फाइल अपलोद यानादिसँ",
+       "tooltip-t-specialpages": "सकल विशेष पौस धलः",
+       "tooltip-t-print": "थ्व पौस ध्वायेज्युगु संस्करण",
+       "tooltip-t-permalink": "थ्व पौस थ्व संस्करणया पर्मानेन्ट लिङ्क",
+       "tooltip-ca-nstab-main": "कन्टेन्ट पौ स्वयादिसँ",
+       "tooltip-ca-nstab-user": "छ्य्‌लामिपौ स्वयादिसँ",
+       "tooltip-ca-nstab-media": "मिडिया पौ स्वयादिसँ",
+       "tooltip-ca-nstab-special": "थ्व छगू विशेष पौ ख ; थ्व पौयात छिं सम्पादन याये मछिं।",
+       "tooltip-ca-nstab-project": "ज्याझ्वः पौ स्वयादिसँ",
+       "tooltip-ca-nstab-image": "फाइल पौ स्वयादिसँ",
+       "tooltip-ca-nstab-mediawiki": "व्यवस्थापन सन्देश स्वयादिसँ",
+       "tooltip-ca-nstab-template": "टेम्प्लेट स्वयादिसँ",
+       "tooltip-ca-nstab-help": "ग्वहालि पौ स्वयादिसँ",
+       "tooltip-ca-nstab-category": "पुचः पौ स्वयादिसँ",
+       "tooltip-minoredit": "थ्व छगू चिधंगु सम्पादन ख",
+       "tooltip-save": "छिगु परिवर्तन स्वथनादिसँ",
+       "tooltip-preview": "छिगु परिवर्तन पुर्वालोकन यानादिसँ, कृपया स्वथने न्ह्यः थ्व छ्य्‌लादिसँ!",
+       "tooltip-diff": "छिं पतीइ यानादिगु हिलेज्या क्यनादिसँ।",
+       "tooltip-compareselectedversions": "निगु ल्ययातःगु संस्करणया दथुइ भिन्नता स्वयादिसँ।",
+       "tooltip-watch": "थ्व पौयात छिगु वाचलिस्टय् तनादिसँ",
+       "tooltip-recreate": "थ्व पौ हुयाछ्वेधुंकुगु जुसां पुनर्निर्माण यानादिसँ",
+       "tooltip-upload": "अपलोड न्ह्यथनादिसँ",
+       "tooltip-rollback": "\"रोलब्याकं\" छगू क्लिकय् थ्व पौयात न्हापाया छ्य्‌लामिं याःगु परिवर्तनय् हिलाछ्वइ।",
+       "tooltip-undo": "\"Undo\" नं थ्व सम्पादनयात खारेज याना सम्पादन फर्म यात प्रिभ्यु मोडय् चायेकी।\nथुकिलिं सारांशय् कारण तनेछिंकी।",
+       "common.css": "/* थन तःगु CSS सकल स्किनय् छ्य्‌लिगु जुइ */",
+       "print.css": "/* थन तःगु CSS नं प्रिन्ट आउटपुटयात असर याइ */",
+       "others": "मेमेगु",
+       "exif-imagewidth": "ब्याः",
+       "exif-imagelength": "जाः",
+       "exif-imagedescription": "किपाया नां",
+       "exif-make": "किपासाः दयेकामि",
+       "exif-model": "किपासाः मोदेल",
+       "exif-software": "छ्यलातःगु सफ्तवेयर",
+       "exif-artist": "च्वमि",
+       "exif-copyright": "लेखाधिकार थुवा",
+       "exif-pixelydimension": "किपा ब्याः",
+       "exif-pixelxdimension": "किपा जाः",
+       "exif-dc-date": "तिथि",
+       "namespacesall": "सकल",
+       "autosumm-new": "न्हुगु पौ: $1",
+       "specialpages": "विषेश पौत:"
 }
index 7cbd573..2f99b4f 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Jose77",
-            "Rotemliss",
-            "Sioneholof"
-        ]
-    },
-    "sunday": "Aho Tapu",
-    "monday": "Aho Gofua",
-    "tuesday": "Aho Ua",
-    "wednesday": "Aho Lotu",
-    "thursday": "Aho Tuloto",
-    "friday": "Aho Falaile",
-    "saturday": "Aho Faiumu",
-    "january": "Ianuali",
-    "february": "Fepuali",
-    "march": "Masi",
-    "april": "Apelila",
-    "may_long": "Me",
-    "june": "Iuni",
-    "july": "Iulai",
-    "august": "Aokuso",
-    "september": "Sepetema",
-    "october": "Oketopa",
-    "november": "Novema",
-    "december": "Tesemo",
-    "january-gen": "Ianuali",
-    "february-gen": "Fepuali",
-    "march-gen": "Masi",
-    "april-gen": "Apelila",
-    "may-gen": "Me",
-    "june-gen": "Iuni",
-    "july-gen": "Iulai",
-    "august-gen": "Aokuso",
-    "september-gen": "Sepetema",
-    "october-gen": "Oketopa",
-    "november-gen": "Novema",
-    "december-gen": "Tesemo",
-    "may": "Me",
-    "article": "Tohi Tala",
-    "cancel": "Tiaki",
-    "mytalk": "Haaku tutala",
-    "navigation": "Navikati",
-    "qbedit": "Fakahakohako",
-    "help": "Lagomatai",
-    "search": "Kumi",
-    "searchbutton": "Kumi",
-    "go": "Fano",
-    "searcharticle": "Fano",
-    "history_short": "Liu onoono atu ki tua",
-    "printableversion": "Mitaki lolomi",
-    "permalink": "Matutakiaga mautumau",
-    "edit": "Fakahakohako",
-    "delete": "Tamate",
-    "protect": "Puipui",
-    "talkpagelinktext": "Tutala",
-    "talk": "Fakatutala",
-    "toolbox": "Puha Mena Gahua",
-    "otherlanguages": "Ke he falu vagahau",
-    "jumptonavigation": "navikati",
-    "jumptosearch": "kumi",
-    "aboutsite": "Hagaao ke he {{SITENAME}}",
-    "aboutpage": "Project: Hagaao",
-    "currentevents": "Tau Fakaholoaga Mogonei",
-    "edithelp": "Lagomatai ke he Fakahakohako",
-    "mainpage": "Matapatu Lau",
-    "mainpage-description": "Matapatu Lau",
-    "portal": "Maaga ke Matutaki",
-    "portal-url": "Project:Ko e lau auloa ma maaga",
-    "privacy": "Ko e puipuiaga ke he tau talahauaga mo e talahauaga fakatagata",
-    "youhavenewmessages": "Fai $1 ($2).",
-    "youhavenewmessagesmulti": "Fai tohi foou a koe he $1",
-    "editsection": "fakahakohako",
-    "editold": "fakahakohako",
-    "editsectionhint": "Hiki e vala e: $1",
-    "red-link-title": "$1 (nakai fai lau pihia i i loto e)",
-    "nstab-main": "Lau",
-    "nstab-user": "Lau he tagata",
-    "viewsource": "Kitekite ke mouaga",
-    "yourname": "Matahigoa he tagata:",
-    "yourpassword": "Kupu fufu:",
-    "yourpasswordagain": "Liu lolomi e kupu fufu:",
-    "remembermypassword": "Manatu e haaku loko ini (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "login": "Hu ki loto",
-    "nav-login-createaccount": "Hu ki loto / talaga e poko",
-    "userlogin": "Hu ki loto / talaga e poko",
-    "logout": "Hu mai ki tua",
-    "userlogout": "Hu mai ki tua",
-    "notloggedin": "Ai la hu ki loto",
-    "createaccount": "Talaga e poko",
-    "gotaccountlink": "Hu ki loto",
-    "passwordreset-username": "Matahigoa he tagata",
-    "summary": "Fakakatoakatoa:",
-    "minoredit": "Ko e fakahakohako fakatote",
-    "watchthis": "Onoono e lau e",
-    "savearticle": "Taofi e lau",
-    "showpreview": "Fakakite e foliga",
-    "showdiff": "Fakakite e tau hikihiki",
-    "loginreqlink": "hu ki loto",
-    "currentrev": "Kitekiteaga mogonei",
-    "currentrevisionlink": "Kitekiteaga mogonei",
-    "editundo": "Liuaki",
-    "mypreferences": "Haaku a tau manako",
-    "prefs-rc": "Hikihikiaga mogoia",
-    "searchresultshead": "Kumi",
-    "youremail": "Meli hila:",
-    "username": "Matahigoa he tagata:",
-    "email": "Meli hila",
-    "recentchanges": "Hikihikiaga mogoia",
-    "hist": "Liu onoono atu ki tua",
-    "recentchangeslinked": "Falu hikihiki",
-    "recentchangeslinked-feed": "Falu hikihiki",
-    "recentchangeslinked-toolbox": "Falu hikihiki",
-    "upload": "Fakafano e faila",
-    "uploadbtn": "Fakafano e faila",
-    "uploadnologin": "Ai la hu ki loto",
-    "filedesc": "Fakakatoakatoa",
-    "fileuploadsummary": "Fakakatoakatoa:",
-    "watchthisupload": "Onoono e lau e",
-    "filehist-deleteone": "tamate",
-    "filedelete-submit": "Tamate",
-    "randompage": "Lau fifili",
-    "brokenredirects-edit": "fakahakohako",
-    "brokenredirects-delete": "tamate",
-    "newpages-username": "Matahigoa he tagata:",
-    "move": "Une",
-    "movethispage": "Une e lau e",
-    "booksources-go": "Fano",
-    "linksearch-ok": "Kumi",
-    "watchlist": "Ko e haaku lau kitekite",
-    "mywatchlist": "Ko e haaku lau kitekite",
-    "watchnologin": "Ai la hu ki loto",
-    "watch": "Kitekite",
-    "watchthispage": "Onoono e lau e",
-    "delete-legend": "Tamate",
-    "prot_1movedto2": "[[$1]] kua une ke he [[$2]]",
-    "restriction-edit": "Fakahakohako",
-    "restriction-move": "Une",
-    "undelete-search-submit": "Kumi",
-    "contributions": "Tau lagomatai tagata",
-    "mycontris": "Haaku a tau lagomatai",
-    "sp-contributions-submit": "Kumi",
-    "whatlinkshere": "Ko e tau matutakiaga he mena e",
-    "ipbreason": "Kakano:",
-    "ipblocklist-submit": "Kumi",
-    "move-watch": "Onoono e lau e",
-    "movereason": "Kakano:",
-    "allmessages": "Tau fakailoaga",
-    "tooltip-pt-preferences": "Haaku a tau manako",
-    "tooltip-pt-login": "Kua lata ia koe ke loko ini, kae pule ni e a koe, ai pehe ko e masi a koe ke loko ini",
-    "tooltip-pt-logout": "Hu mai ki tua",
-    "tooltip-ca-talk": "Tutala ke he tau matapatu lau",
-    "tooltip-ca-edit": "Maeke ia koe ke hiki, uta kehe mo e lalafi atu falu mena ke he lau nei.  Fakamolemole ti fakaaoga e PREVIEW patani to taofi mau.",
-    "tooltip-search": "Kumi {{SITENAME}}",
-    "tooltip-search-fulltext": "Kumi ke he tau lau oti e kupu e",
-    "tooltip-p-logo": "Matapatu Lau",
-    "tooltip-n-mainpage-description": "Fano ke he matapatu lau",
-    "tooltip-n-portal": "Hagao ke he gahua lahi, ko e heigoa kua lata a koe ke taute, mo e moua mai i fe e tau mena",
-    "tooltip-n-currentevents": "Kumi e tau vala tala kehekehe hagao ke he tau mena tutupu",
-    "tooltip-n-recentchanges": "Hae e tau hikihiki foou he wiki",
-    "tooltip-n-randompage": "Tuku mai noa ni e ha lau",
-    "tooltip-n-help": "Ko e matakavi ke kumi ki ai",
-    "tooltip-t-whatlinkshere": "Ko e tau lau wiki oti ne fai matutaki mai ke he lau e",
-    "tooltip-t-upload": "Fakahu ki loto e tau faila",
-    "tooltip-t-specialpages": "Ko e tau lau oti kua kehekehe",
-    "ilsubmit": "Kumi",
-    "bad_image_list": "Ko e tau mena ni ne fakakite mai ka onoono ki ai (ko e tau laini ne kamata aki e *).\nKo e liniki fakamua he laini ko e liniki ke he faila kelea.\nKo e tau liniki foki i lalo he laini taha ko e tau laini fifili pauaki, i.e. ko e tau lau ne fai faila i loto he laini ia.",
-    "imgmultigo": "Fano!",
-    "table_pager_limit_submit": "Fano",
-    "version-specialpages": "Tau Lau Mahuiga",
-    "fileduplicatesearch-submit": "Kumi",
-    "specialpages": "Tau Lau Mahuiga"
+       "@metadata": {
+               "authors": [
+                       "Jose77",
+                       "Rotemliss",
+                       "Sioneholof"
+               ]
+       },
+       "sunday": "Aho Tapu",
+       "monday": "Aho Gofua",
+       "tuesday": "Aho Ua",
+       "wednesday": "Aho Lotu",
+       "thursday": "Aho Tuloto",
+       "friday": "Aho Falaile",
+       "saturday": "Aho Faiumu",
+       "january": "Ianuali",
+       "february": "Fepuali",
+       "march": "Masi",
+       "april": "Apelila",
+       "may_long": "Me",
+       "june": "Iuni",
+       "july": "Iulai",
+       "august": "Aokuso",
+       "september": "Sepetema",
+       "october": "Oketopa",
+       "november": "Novema",
+       "december": "Tesemo",
+       "january-gen": "Ianuali",
+       "february-gen": "Fepuali",
+       "march-gen": "Masi",
+       "april-gen": "Apelila",
+       "may-gen": "Me",
+       "june-gen": "Iuni",
+       "july-gen": "Iulai",
+       "august-gen": "Aokuso",
+       "september-gen": "Sepetema",
+       "october-gen": "Oketopa",
+       "november-gen": "Novema",
+       "december-gen": "Tesemo",
+       "may": "Me",
+       "article": "Tohi Tala",
+       "cancel": "Tiaki",
+       "mytalk": "Haaku tutala",
+       "navigation": "Navikati",
+       "qbedit": "Fakahakohako",
+       "help": "Lagomatai",
+       "search": "Kumi",
+       "searchbutton": "Kumi",
+       "go": "Fano",
+       "searcharticle": "Fano",
+       "history_short": "Liu onoono atu ki tua",
+       "printableversion": "Mitaki lolomi",
+       "permalink": "Matutakiaga mautumau",
+       "edit": "Fakahakohako",
+       "delete": "Tamate",
+       "protect": "Puipui",
+       "talkpagelinktext": "Tutala",
+       "talk": "Fakatutala",
+       "toolbox": "Puha Mena Gahua",
+       "otherlanguages": "Ke he falu vagahau",
+       "jumptonavigation": "navikati",
+       "jumptosearch": "kumi",
+       "aboutsite": "Hagaao ke he {{SITENAME}}",
+       "aboutpage": "Project: Hagaao",
+       "currentevents": "Tau Fakaholoaga Mogonei",
+       "edithelp": "Lagomatai ke he Fakahakohako",
+       "mainpage": "Matapatu Lau",
+       "mainpage-description": "Matapatu Lau",
+       "portal": "Maaga ke Matutaki",
+       "portal-url": "Project:Ko e lau auloa ma maaga",
+       "privacy": "Ko e puipuiaga ke he tau talahauaga mo e talahauaga fakatagata",
+       "youhavenewmessages": "Fai $1 ($2).",
+       "youhavenewmessagesmulti": "Fai tohi foou a koe he $1",
+       "editsection": "fakahakohako",
+       "editold": "fakahakohako",
+       "editsectionhint": "Hiki e vala e: $1",
+       "red-link-title": "$1 (nakai fai lau pihia i i loto e)",
+       "nstab-main": "Lau",
+       "nstab-user": "Lau he tagata",
+       "viewsource": "Kitekite ke mouaga",
+       "yourname": "Matahigoa he tagata:",
+       "yourpassword": "Kupu fufu:",
+       "yourpasswordagain": "Liu lolomi e kupu fufu:",
+       "remembermypassword": "Manatu e haaku loko ini (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "login": "Hu ki loto",
+       "nav-login-createaccount": "Hu ki loto / talaga e poko",
+       "userlogin": "Hu ki loto / talaga e poko",
+       "logout": "Hu mai ki tua",
+       "userlogout": "Hu mai ki tua",
+       "notloggedin": "Ai la hu ki loto",
+       "createaccount": "Talaga e poko",
+       "gotaccountlink": "Hu ki loto",
+       "passwordreset-username": "Matahigoa he tagata",
+       "summary": "Fakakatoakatoa:",
+       "minoredit": "Ko e fakahakohako fakatote",
+       "watchthis": "Onoono e lau e",
+       "savearticle": "Taofi e lau",
+       "showpreview": "Fakakite e foliga",
+       "showdiff": "Fakakite e tau hikihiki",
+       "loginreqlink": "hu ki loto",
+       "currentrev": "Kitekiteaga mogonei",
+       "currentrevisionlink": "Kitekiteaga mogonei",
+       "editundo": "Liuaki",
+       "mypreferences": "Haaku a tau manako",
+       "prefs-rc": "Hikihikiaga mogoia",
+       "searchresultshead": "Kumi",
+       "youremail": "Meli hila:",
+       "username": "Matahigoa he tagata:",
+       "email": "Meli hila",
+       "recentchanges": "Hikihikiaga mogoia",
+       "hist": "Liu onoono atu ki tua",
+       "recentchangeslinked": "Falu hikihiki",
+       "recentchangeslinked-feed": "Falu hikihiki",
+       "recentchangeslinked-toolbox": "Falu hikihiki",
+       "upload": "Fakafano e faila",
+       "uploadbtn": "Fakafano e faila",
+       "uploadnologin": "Ai la hu ki loto",
+       "filedesc": "Fakakatoakatoa",
+       "fileuploadsummary": "Fakakatoakatoa:",
+       "watchthisupload": "Onoono e lau e",
+       "filehist-deleteone": "tamate",
+       "filedelete-submit": "Tamate",
+       "randompage": "Lau fifili",
+       "brokenredirects-edit": "fakahakohako",
+       "brokenredirects-delete": "tamate",
+       "newpages-username": "Matahigoa he tagata:",
+       "move": "Une",
+       "movethispage": "Une e lau e",
+       "linksearch-ok": "Kumi",
+       "watchlist": "Ko e haaku lau kitekite",
+       "mywatchlist": "Ko e haaku lau kitekite",
+       "watchnologin": "Ai la hu ki loto",
+       "watch": "Kitekite",
+       "watchthispage": "Onoono e lau e",
+       "delete-legend": "Tamate",
+       "prot_1movedto2": "[[$1]] kua une ke he [[$2]]",
+       "restriction-edit": "Fakahakohako",
+       "restriction-move": "Une",
+       "undelete-search-submit": "Kumi",
+       "contributions": "Tau lagomatai tagata",
+       "mycontris": "Haaku a tau lagomatai",
+       "sp-contributions-submit": "Kumi",
+       "whatlinkshere": "Ko e tau matutakiaga he mena e",
+       "ipbreason": "Kakano:",
+       "ipblocklist-submit": "Kumi",
+       "move-watch": "Onoono e lau e",
+       "movereason": "Kakano:",
+       "allmessages": "Tau fakailoaga",
+       "tooltip-pt-preferences": "Haaku a tau manako",
+       "tooltip-pt-login": "Kua lata ia koe ke loko ini, kae pule ni e a koe, ai pehe ko e masi a koe ke loko ini",
+       "tooltip-pt-logout": "Hu mai ki tua",
+       "tooltip-ca-talk": "Tutala ke he tau matapatu lau",
+       "tooltip-ca-edit": "Maeke ia koe ke hiki, uta kehe mo e lalafi atu falu mena ke he lau nei.  Fakamolemole ti fakaaoga e PREVIEW patani to taofi mau.",
+       "tooltip-search": "Kumi {{SITENAME}}",
+       "tooltip-search-fulltext": "Kumi ke he tau lau oti e kupu e",
+       "tooltip-p-logo": "Matapatu Lau",
+       "tooltip-n-mainpage-description": "Fano ke he matapatu lau",
+       "tooltip-n-portal": "Hagao ke he gahua lahi, ko e heigoa kua lata a koe ke taute, mo e moua mai i fe e tau mena",
+       "tooltip-n-currentevents": "Kumi e tau vala tala kehekehe hagao ke he tau mena tutupu",
+       "tooltip-n-recentchanges": "Hae e tau hikihiki foou he wiki",
+       "tooltip-n-randompage": "Tuku mai noa ni e ha lau",
+       "tooltip-n-help": "Ko e matakavi ke kumi ki ai",
+       "tooltip-t-whatlinkshere": "Ko e tau lau wiki oti ne fai matutaki mai ke he lau e",
+       "tooltip-t-upload": "Fakahu ki loto e tau faila",
+       "tooltip-t-specialpages": "Ko e tau lau oti kua kehekehe",
+       "ilsubmit": "Kumi",
+       "bad_image_list": "Ko e tau mena ni ne fakakite mai ka onoono ki ai (ko e tau laini ne kamata aki e *).\nKo e liniki fakamua he laini ko e liniki ke he faila kelea.\nKo e tau liniki foki i lalo he laini taha ko e tau laini fifili pauaki, i.e. ko e tau lau ne fai faila i loto he laini ia.",
+       "imgmultigo": "Fano!",
+       "table_pager_limit_submit": "Fano",
+       "version-specialpages": "Tau Lau Mahuiga",
+       "fileduplicatesearch-submit": "Kumi",
+       "specialpages": "Tau Lau Mahuiga"
 }
index 7db6180..6458575 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "HanV",
-            "MarkvA",
-            "Siebrand",
-            "Tedjuh10"
-        ]
-    },
-    "view-pool-error": "De servers zijn op het moment helaas overbelast.\nTe veel gebruikers proberen deze pagina te bekijken.\nWacht even voordat je opnieuw toegang probeert te krijgen tot deze pagina.\n\n$1",
-    "badaccess-group0": "Je hebt geen rechten om de gevraagde handeling uit te voeren.",
-    "youhavenewmessages": "Je hebt $1 ($2).",
-    "youhavenewmessagesfromusers": "Je hebt $1 van {{PLURAL:$3|een andere gebruiker|$3 gebruikers}} ($2).",
-    "youhavenewmessagesmanyusers": "Je hebt $1 van een groot aantal gebruikers ($2).",
-    "youhavenewmessagesmulti": "Je hebt nieuwe berichten op $1",
-    "nosuchactiontext": "De opdracht in de URL is ongeldig.\nMogelijk heb je een typefout gemaakt in de URL of een onjuiste koppeling gevolgd.\nHet kan ook wijzen op een fout in de software van {{SITENAME}}.",
-    "nospecialpagetext": "<strong>Je hebt een onbestaande speciale pagina opgevraagd.</strong>\n\nEen lijst met bestaande speciale pagina’s staat op [[Special:SpecialPages|speciale pagina’s]].",
-    "missing-article": "In de database is geen inhoud aangetroffen voor de pagina \"$1\" die er wel zou moeten zijn ($2).\n\nDit kan voorkomen als je een verouderde koppeling naar het verschil tussen twee versies van een pagina volgt of een versie opvraagt die is verwijderd.\n\nAls dit niet het geval is, heb je wellicht een fout in de software gevonden.\nMaak hiervan melding bij een [[Special:ListUsers/sysop|beheerder]] van {{SITENAME}} en vermeld daarbij de URL van deze pagina.",
-    "actionthrottledtext": "Als maatregel tegen spam is het aantal keren per tijdseenheid dat je deze handeling kunt verrichten beperkt.\nDe limiet is overschreden.\nProbeer het over een aantal minuten opnieuw.",
-    "viewsourcetext": "Je kunt de brontekst van deze pagina bekijken en kopiëren:",
-    "viewyourtext": "Je kunt '''uw bewerkingen''' aan de brontekst van deze pagina bekijken en kopiëren:",
-    "editinginterface": "'''Waarschuwing:''' je bewerkt een pagina die interfacetekst voor de software bevat.\nBewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen op deze wiki.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen toe te voegen of te wijzigen voor alle wiki's.",
-    "namespaceprotected": "Je hebt geen rechten om pagina's in de naamruimte '''$1''' te bewerken.",
-    "customcssprotected": "Je kunt deze CSS-pagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.",
-    "customjsprotected": "Je kunt deze JavaScriptpagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.",
-    "exception-nologin-text": "Om deze pagina te bekijken of deze handeling uit te kunnen voeren moet je aangemeld zijn bij deze wiki.",
-    "logouttext": "'''Je bent nu afgemeld.'''\n\nJe kunt {{SITENAME}} nu anoniem gebruiken of weer <span class='plainlinks'>[$1 aanmelden]</span> als dezelfde of een andere gebruiker.\nMogelijk worden nog een aantal pagina's weergegeven alsof je aangemeld bent totdat je de cache van uw browser leegt.",
-    "welcomecreation-msg": "Je gebruiker is aangemaakt.\nVergeet niet je [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te passen.",
-    "yourpasswordagain": "Geef je wachtwoord opnieuw in:",
-    "yourdomainname": "Je domein:",
-    "password-change-forbidden": "Je kunt je wachtwoord niet wijzigen in deze wiki.",
-    "externaldberror": "Er is een fout opgetreden bij het aanmelden bij de database of je hebt geen toestemming je externe gebruiker bij te werken.",
-    "loginprompt": "Je moet cookies ingeschakeld hebben om je te kunnen aanmelden bij {{SITENAME}}.",
-    "gotaccount": "Heb je al een gebruikersnaam? '''$1'''.",
-    "userlogin-resetlink": "Ben je je aanmeldgegevens vergeten?",
-    "nocookiesnew": "De gebruiker is geregistreerd, maar jij bent niet aangemeld.\n{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.\nSchakel die in en meld daarna aan met je nieuwe gebruikersnaam en wachtwoord.",
-    "nocookieslogin": "{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.\nCookies zijn uitgeschakeld in je browser.\nSchakel deze optie aan en probeer het opnieuw.",
-    "nocookiesfornew": "De gebruiker is niet gemaakt omdat de bron niet bevestigd kon worden.\nZorg ervoor dat je cookies hebt ingeschakeld, herlaad deze pagina en probeer het opnieuw.",
-    "noname": "Je hebt geen geldige gebruikersnaam opgegeven.",
-    "loginsuccess": "'''Je bent nu aangemeld bij {{SITENAME}} als \"$1\".'''",
-    "nouserspecified": "Geef een gebruikersnaam op.",
-    "password-name-match": "Je wachtwoord en uw gebruikersnaam mogen niet overeenkomen.",
-    "passwordremindertext": "Iemand, waarschijnlijk jijzelf, heeft vanaf IP-adres $1 een verzoek\ngedaan tot het toezenden van een nieuw wachtwoord voor {{SITENAME}}\n($4). Er is een tijdelijk wachtwoord aangemaakt voor gebruiker \"$2\":\n\"$3\". Als dat je bedoeling was, meld je dan nu aan en kies een nieuw\nwachtwoord.\nJe tijdelijke wachtwoord vervalt over {{PLURAL:$5|$5 dag|$5 dagen}}.\n\nAls iemand anders dan jij dit verzoek heeft gedaan of als je zich inmiddels het\nwachtwoord herinnert en het niet langer wilt wijzigen, negeer dit bericht\ndan en blijf je bestaande wachtwoord gebruiken.",
-    "noemailcreate": "Je moet een geldig e-mailadres opgeven",
-    "passwordsent": "Het wachtwoord is verzonden naar het e-mailadres voor \"$1\".\nMeld je aan nadat je het hebt ontvangen.",
-    "blocked-mailpassword": "Je IP-adres is geblokkeerd voor het maken van wijzigingen.\nOm misbruik te voorkomen is het niet mogelijk om een nieuw wachtwoord aan te vragen.",
-    "eauthentsent": "Er is ter bevestiging een e-mail naar het opgegeven e-mailadres gezonden.\nVolg de aanwijzingen in de e-mail om aan te geven dat het jouw e-mailadres is.\nTot die tijd worden er geen e-mails naar het e-mailadres gezonden.",
-    "acct_creation_throttle_hit": "Bezoekers van deze wiki met hetzelfde IP-adres als jij hebben de afgelopen dag al $1 gebruiker{{PLURAL:$1||s}} geregistreerd, wat het maximale aantal in deze periode is.\nDaarom kan je vanaf je IP-adres op dit moment geen nieuwe gebruikers registreren.",
-    "emailauthenticated": "Je e-mailadres is bevestigd op $2 om $3.",
-    "emailnotauthenticated": "Je e-mailadres is niet bevestigd.\nJe ontvangt geen e-mail voor de onderstaande functies.",
-    "noemailprefs": "Geef een e-mailadres op in je voorkeuren om deze functies te gebruiken.",
-    "emailconfirmlink": "Bevestig je e-mailadres",
-    "createaccount-text": "Iemand heeft een gebruiker op {{SITENAME}} ($4) aangemaakt met de naam \"$2\" en jouw e-mailadres.\nHet wachtwoord voor \"$2\" is \"$3\".\nMeld je aan en wijzig je wachtwoord.\n\nNegeer dit bericht als deze gebruiker zonder jouw medeweten is aangemaakt.",
-    "login-throttled": "Je hebt recentelijk te vaak geprobeerd aan te melden met een onjuist wachtwoord.\nWacht even voordat je het opnieuw probeert.",
-    "login-abort-generic": "Je bent niet aangemeld. De procedure is afgebroken.",
-    "suspicious-userlogout": "Je verzoek om af te melden is genegeerd, omdat het lijkt alsof het verzoek is verzonden door een browser of cacheproxy die stuk is.",
-    "resetpass_announce": "Je bent aangemeld met een tijdelijke code die je per e-mail is toegezonden.\nVoer een nieuw wachtwoord in om het aanmelden te voltooien:",
-    "changepassword-success": "Je wachtwoord is gewijzigd.\nBezig met aanmelden…",
-    "resetpass-no-info": "Je moet aangemeld zijn voordat je deze pagina kunt gebruiken.",
-    "resetpass-wrong-oldpass": "Het huidige of tijdelijke wachtwoord is ongeldig.\nMogelijk heb je je wachtwoord al gewijzigd of een nieuw tijdelijk wachtwoord aangevraagd.",
-    "passwordreset-capture-help": "Als je dit vakje aanvinkt, wordt de e-mail (met het tijdelijke wachtwoord) naar de gebruiker verzonden en ook aan jou weergegeven.",
-    "passwordreset-emailtext-ip": "Iemand, waarschijnlijk jij, heeft vanaf het IP-adres $1 je gebruikersgegevens voor {{SITENAME}} ($4) opgevraagd.\nDe volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}.\nMeld je aan en wijzig het wachtwoord nu. Als je dit verzoek niet zelf hebt gedaan, of als je het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf je oude wachtwoord gebruiken.",
-    "passwordreset-emailtext-user": "Gebruiker $1 op de site {{SITENAME}} heeft je gebruikersgegevens voor {{SITENAME}} ($4) opgevraagd.\nDe volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}.\nMeld je aan en wijzig het wachtwoord nu. Als je dit verzoek niet zelf hebt gedaan, of als je het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf je oude wachtwoord gebruiken.",
-    "changeemail-text": "Vul dit formulier in om je e-mailadres te wijzigen. Je moet je wachtwoord invoeren om deze wijziging te bevestigen.",
-    "changeemail-no-info": "Je moet aangemeld zijn om rechtstreeks toegang te hebben tot deze pagina.",
-    "changeemail-password": "Jouw wachtwoord voor {{SITENAME}}:",
-    "sig_tip": "Je handtekening met datum en tijd",
-    "anoneditwarning": "'''Waarschuwing:''' je bent niet aangemeld.\nJe IP-adres wordt opgeslagen als je wijzigingen op deze pagina maakt.",
-    "anonpreviewwarning": "''Je bent niet aangemeld.''\n''Door je bewerking op te slaan wordt je IP-adres opgeslagen in de paginageschiedenis.''",
-    "missingsummary": "'''Let op:''' je hebt geen samenvatting opgegeven voor je bewerking.\nAls je nogmaals op ''Pagina opslaan'' klikt wordt de bewerking zonder samenvatting opgeslagen.",
-    "missingcommenttext": "Plaats je reactie hieronder.",
-    "missingcommentheader": "'''Let op:''' Je hebt geen onderwerp/kop voor deze reactie opgegeven.\nAls je opnieuw op \"{{int:savearticle}}\" klikt, wordt je wijziging zonder een onderwerp of koptekst opgeslagen.",
-    "blockedtext": "'''Je gebruiker of IP-adres is geblokkeerd.'''\n\nDe blokkade is uitgevoerd door $1.\nDe opgegeven reden is ''$2''.\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nJe kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] om de blokkade te bespreken.\nJe kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij je een geldig e-mailadres hebt opgegeven in je [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet geblokkeerd is.\nJe huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als je ergens op deze blokkade reageert.",
-    "autoblockedtext": "Je IP-adres is automatisch geblokkeerd, omdat het is gebruikt door een andere gebruiker, die is geblokkeerd door $1.\nDe opgegeven reden is:\n\n:''$2''\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nJe kunt deze blokkade bespreken met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]].\n\nJe kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij je een geldig e-mailadres hebt opgegeven in je [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet is geblokkeerd.\n\nJe huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als je ergens op deze blokkade reageert.",
-    "whitelistedittext": "Je moet $1 om pagina's te bewerken.",
-    "confirmedittext": "Je moet je e-mailadres bevestigen voor je kunt bewerken.\nVoer je e-mailadres in en bevestig het via je [[Special:Preferences|voorkeuren]].",
-    "nosuchsectiontext": "Je probeerde een subkopje te bewerken dat niet bestaat.\nWellicht is het verplaatst of verwijderd terwijl je de pagina aan het bekijken was.",
-    "loginreqpagetext": "Je moet je $1 om andere pagina's te kunnen bekijken.",
-    "newarticletext": "Deze pagina bestaat niet.\nTyp in het onderstaande veld om de pagina aan te maken (meer informatie staat op de [[{{MediaWiki:Helppage}}|hulppagina]]).\nGebruik de knop '''vorige''' in je browser als je hier per ongeluk terecht bent gekomen.",
-    "anontalkpagetext": "----''Deze overlegpagina hoort bij een anonieme gebruiker die geen gebruikersnaam heeft of deze niet gebruikt.\nDaarom wordt het IP-adres ter identificatie gebruikt.\nHet is mogelijk dat meerdere personen hetzelfde IP-adres gebruiken.\nMogelijk ontvang je hier berichten die niet voor je bedoeld zijn.\nAls je dat wilt voorkomen, [[Special:UserLogin/signup|registreer je]] of [[Special:UserLogin|meld je aan]] om verwarring met andere anonieme gebruikers te voorkomen.''",
-    "noarticletext": "Deze pagina bevat geen tekst.\nJe kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken] of [{{fullurl:{{FULLPAGENAME}}|action=edit}} deze pagina bewerken]</span>.",
-    "noarticletext-nopermission": "Deze pagina bevat geen tekst.\nJe kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's of\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken]</span>, maar je mag de pagina niet aanmaken.",
-    "userpage-userdoesnotexist": "Je bewerkt een gebruikerspagina van een gebruiker die niet bestaat (gebruiker \"$1\").\nControleer of je deze pagina wel wilt aanmaken/bewerken.",
-    "clearyourcache": "'''Let op!''' Nadat je de wijzigingen hebt opgeslagen is het wellicht nodig je browsercache te legen.\n* '''Firefox / Safari:''' houd ''Shift'' ingedrukt terwijl je op ''Vernieuwen'' klikt of druk op ''Ctrl-F5'' of ''Ctrl-R'' (''⌘-Shift-R'' op een Mac)\n* '''Google Chrome:''' druk op ''Ctrl-Shift-R'' (''⌘-Shift-R'' op een Mac)\n* '''Internet Explorer:''' houd ''Ctrl'' ingedrukt terwijl je op ''Vernieuwen'' klikt of druk op ''Ctrl-F5''\n* '''Opera:''' leeg je cache in ''Extra → Voorkeuren''",
-    "usercssyoucanpreview": "'''Tip:''' gebruik de knop \"{{int:showpreview}}\" om je nieuwe CSS te testen alvorens op te slaan.",
-    "userjsyoucanpreview": "'''Tip:''' gebruik de knop \"{{int:showpreview}}\" om je nieuwe JavaScript te testen alvorens op te slaan.",
-    "usercsspreview": "'''Dit is alleen een voorvertoning van je persoonlijke CSS.\nDeze is nog niet opgeslagen!'''",
-    "userjspreview": "'''Let op: je test nu je persoonlijke JavaScript.'''\n'''De pagina is niet opgeslagen!'''",
-    "userinvalidcssjstitle": "'''Waarschuwing:''' er is geen uiterlijk \"$1\".\nJe eigen .css- en .js-pagina's beginnen met een kleine letter, bijvoorbeeld {{ns:user}}:Naam/vector.css in plaats van {{ns:user}}:Naam/Vector.css.",
-    "previewnote": "'''Let op: dit is een controlepagina.'''\nJe tekst is niet opgeslagen!",
-    "previewconflict": "Deze voorvertoning geeft aan hoe de tekst in het bovenste veld eruit ziet als je deze opslaat.",
-    "session_fail_preview": "'''Je bewerking is niet verwerkt, omdat de sessiegegevens verloren zijn gegaan.\nProbeer het opnieuw.\nAls het dan nog niet lukt, [[Special:UserLogout|meld jezelf dan af]] en weer aan.'''",
-    "session_fail_preview_html": "'''Je bewerking is niet verwerkt, omdat sessiegegevens verloren zijn gegaan.'''\n\n''Omdat in {{SITENAME}} ruwe HTML is ingeschakeld, is een voorvertoning niet mogelijk als bescherming tegen aanvallen met JavaScript.''\n\n'''Als dit een legitieme bewerking is, probeer het dan opnieuw.\nAls het dan nog niet lukt, [[Special:UserLogout|meld jezelf dan af]] en weer aan.'''",
-    "token_suffix_mismatch": "'''Je bewerking is geweigerd, omdat je browser de leestekens in het bewerkingstoken onjuist heeft behandeld.'''\nDe bewerking is geweigerd om verminking van de paginatekst te voorkomen.\nDit gebeurt soms als er een webgebaseerde proxydienst wordt gebruikt die fouten bevat.",
-    "edit_form_incomplete": "'''Sommige onderdelen van het bewerkingsformulier hebben de server niet bereikt. Controleer of je bewerkingen intact zijn en probeer het opnieuw.'''",
-    "explainconflict": "Een andere gebruiker heeft deze pagina bewerkt sinds je met je bewerking bent begonnen.\nIn het bovenste deel van het venster staat de tekst van de huidige pagina.\nJe bewerking staat in het onderste gedeelte.\nJe dient je bewerkingen in te voegen in de bestaande tekst.\n'''Alleen''' de tekst in het bovenste gedeelte wordt opgeslagen als je op \"{{int:savearticle}}\" klikt.",
-    "yourtext": "Je tekst",
-    "nonunicodebrowser": "'''Waarschuwing: je browser kan niet goed overweg met Unicode.'''\nHiermee wordt door de MediaWiki-software rekening gehouden zodat je toch zonder problemen pagina's kunt bewerken: niet-ASCII tekens worden in het bewerkingsveld weergegeven als hexadecimale codes.",
-    "editingold": "'''Waarschuwing: je bewerkt een oude versie van deze pagina.'''\nAls je je bewerking opslaat, gaan alle wijzigingen verloren die na deze versie zijn gemaakt.",
-    "copyrightwarning": "Let op: alle bijdragen aan {{SITENAME}} worden geacht te zijn vrijgegeven onder de $2 (zie $1 voor details).\nAls je niet wilt dat je tekst door anderen naar believen bewerkt en verspreid kan worden, kies dan niet voor \"Pagina opslaan\".<br />\nHierbij beloof je ons tevens dat je deze tekst zelf hebt geschreven of overgenomen uit een vrije, openbare bron.<br />\n'''Gebruik geen materiaal dat beschermd wordt door auteursrecht, tenzij je daarvoor toestemming hebt!'''",
-    "copyrightwarning2": "Al je bijdragen aan {{SITENAME}} kunnen bewerkt, gewijzigd of verwijderd worden door andere gebruikers.\nAls je niet wilt dat je teksten rigoureus aangepast worden door anderen, plaats ze hier dan niet.<br />\nJe belooft ook dat je de oorspronkelijke auteur bent van dit materiaal of dat je het hebt gekopieerd uit een bron in het publieke domein of een soortgelijke vrije bron (zie $1 voor details).\n'''Gebruik geen materiaal dat beschermd wordt door auteursrecht, tenzij je daarvoor toestemming hebt!'''",
-    "longpageerror": "'''Fout: de tekst die je hebt toegevoegd is {{PLURAL:$1|één kilobyte|$1 kilobyte}} groot, wat groter is dan het maximum van {{PLURAL:$2|één kilobyte|$2 kilobyte}}.'''\nOpslaan is niet mogelijk.",
-    "readonlywarning": "'''Waarschuwing: je kunt deze bewerking nu niet opslaan omdat de database is geblokkeerd voor bewerkingen wegens onderhoudswerkzaamheden.'''\nHet is misschien verstandig om je tekst tijdelijk in een tekstbestand op te slaan om dit te bewaren voor wanneer de blokkering van de database opgeheven is.\n\nEen beheerder heeft de database geblokkeerd om de volgende reden: $1",
-    "nocreatetext": "{{SITENAME}} heeft de mogelijkheid om nieuwe pagina's te maken beperkt.\nJe kunt reeds bestaande pagina's wijzigen of je kunt [[Special:UserLogin|jezelf aanmelden of registreren]].",
-    "nocreate-loggedin": "Je hebt geen rechten om nieuwe pagina's te maken.",
-    "permissionserrorstext": "Je hebt geen rechten om dit te doen om de volgende {{PLURAL:$1|reden|redenen}}:",
-    "permissionserrorstext-withaction": "Je hebt geen rechten om $2 om de volgende {{PLURAL:$1|reden|redenen}}:",
-    "recreate-moveddeleted-warn": "'''Waarschuwing: je bent bezig met het aanmaken van een pagina die in het verleden verwijderd is.'''\n\nOverweeg of het terecht is dat je verder werkt aan deze pagina.\nVoor je gemak staan hieronder het verwijderingslogboek en het hernoemingslogboek voor deze pagina:",
-    "edit-no-change": "Je bewerking is genegeerd, omdat er geen wijziging aan de tekst is gemaakt.",
-    "editwarning-warning": "Als je deze pagina verlaat verlies je mogelijk wijzigingen die je hebt gemaakt.\nAls je bent aangemeld, kan je deze waarschuwing uitschakelen in het tabblad \"Bewerken\" in je voorkeuren.",
-    "rev-deleted-text-unhide": "Deze paginaversie is '''verwijderd'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].\nAls je wilt kan je [$1 deze versie bekijken].",
-    "rev-suppressed-text-unhide": "Deze paginaversie is '''onderdrukt'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek onderdrukte versies].\nAls je wilt kan je [$1 deze versie bekijken].",
-    "rev-deleted-text-view": "Deze paginaversie is '''verwijderd'''.\nJe kunt deze bekijken; er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
-    "rev-suppressed-text-view": "Deze paginaversie is '''onderdrukt'''.\nJe kunt deze bekijken; er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek onderdrukte versies].",
-    "rev-deleted-no-diff": "Je kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''.\nAchtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
-    "rev-suppressed-no-diff": "Je kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''.",
-    "rev-deleted-unhide-diff": "Een van de bewerkingen voor de verschillen die je hebt opgevraagd is '''verwijderd'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].\nAls je wilt kan je [$1 de verschillen bekijken].",
-    "rev-suppressed-unhide-diff": "Een van de versies in deze verschillen is '''onderdrukt'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek].\nAls je wilt kan je [$1 deze versie bekijken].",
-    "rev-deleted-diff-view": "Een van de versies van de verschillen die je hebt opgevraagd is verwijderd, \nJe kunt deze verschillen bekijken. Mogelijk zijn details zichtbaar in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
-    "rev-suppressed-diff-view": "Een van de bewerkingen voor de verschillen die u hebt opgevraagd, is '''onderdrukt'''.\nJe kunt deze verschillen bekijken. Er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek].",
-    "revdelete-nooldid-text": "Je hebt geen doelversie(s) voor deze handeling opgegeven, de opgegeven versie bestaat niet of je probeert de laatste versie te verbergen.",
-    "revdelete-show-file-confirm": "Weet je zeker dat je de verwijderde versie van het bestand \"<nowiki>$1</nowiki>\" van $2 om $3 wilt bekijken?",
-    "revdelete-confirm": "Bevestig dat je dit wilde doen, dat je de consequenties begrijpt en dat je dit doet in overeenstemming met het geldende [[{{MediaWiki:Policy-url}}|beleid]].",
-    "revdelete-show-no-access": "Er is een fout opgetreden tijdens het weergeven van het object van $1 om $2: dit object is gemarkeerd als \"beschermd\".\nJe hebt geen toegang tot dit object.",
-    "revdelete-modify-no-access": "Er is een fout opgetreden tijdens het wijzigen van het object van $1 om $2: dit object is gemarkeerd als \"beschermd\".\nJe hebt geen toegang tot dit object.",
-    "revdelete-only-restricted": "Er is een fout opgetreden tijdens het verbergen van het item van $1, $2: je kunt geen items onderdrukken uit het zicht van beheerders zonder ook een van de andere zichtbaarheidsopties te selecteren.",
-    "mergehistory-header": "Via deze pagina kan je versies van de geschiedenis van een bronpagina naar een nieuwere pagina samenvoegen.\nZorg dat deze wijziging de geschiedenis van de pagina behoudt.",
-    "search-suggest": "Bedoelde je: $1",
-    "searchdisabled": "Zoeken in {{SITENAME}} is niet mogelijk.\nJe kunt gebruik maken van Google.\nDe gegevens over {{SITENAME}} zijn mogelijk niet bijgewerkt.",
-    "savedprefs": "Je voorkeuren zijn opgeslagen.",
-    "prefs-reset-intro": "Gebruik deze functie om je voorkeuren te herstellen naar de standaardinstellingen.\nDeze handeling kan niet ongedaan gemaakt worden.",
-    "youremail": "E-mailadres:",
-    "prefs-help-variant": "Jouw voorkeursvariant of -spelling om de inhoudspagina's van deze wiki in weer te geven.",
-    "prefs-help-signature": "Reacties op de overlegpagina's worden meestal ondertekend met \"<nowiki>~~~~</nowiki>\".\nDe tildes worden omgezet in je ondertekening en een datum en tijd van de bewerking.",
-    "badsiglength": "Je ondertekening is te lang.\nDeze moet minder dan $1 {{PLURAL:$1|teken|tekens}} bevatten.",
-    "prefs-help-realname": "Echte naam is optioneel.\nAls je deze opgeeft, kan deze naam gebruikt worden om je erkenning te geven voor je werk.",
-    "prefs-help-email": "E-mailadres is optioneel, maar maakt het mogelijk om jou je wachtwoord te e-mailen als je het bent vergeten.",
-    "prefs-help-email-others": "Je kunt ook anderen in staat stellen per e-mail contact met je op te nemen via een koppeling op uw gebruikers- en overlegpagina zonder dat je je identiteit prijsgeeft.",
-    "userrights-groups-help": "Je kunt de groepen wijzigen waar deze gebruiker lid van is.\n* Een aangekruist vakje betekent dat de gebruiker lid is van de groep.\n* Een niet aangekruist vakje betekent dat de gebruiker geen lid is van de groep.\n* Een \"*\" betekent dat je een gebruiker niet uit een groep kunt verwijderen nadat je die hebt toegevoegd of vice versa.",
-    "userrights-no-interwiki": "Je hebt geen rechten om gebruikersrechten op andere wiki's te wijzigen.",
-    "userrights-nologin": "Je moet [[Special:UserLogin|aangemeld]] zijn met een gebruiker met de juiste rechten om gebruikersrechten toe te wijzen.",
-    "userrights-notallowed": "Je hebt geen rechten om gebruikersrechten toe te voegen of te verwijderen.",
-    "userrights-changeable-col": "Groepen die je kunt beheren",
-    "userrights-unchangeable-col": "Groepen die je niet kunt beheren",
-    "recentchangeslinked-summary": "Deze speciale pagina geeft de laatste bewerkingen weer op pagina's waarheen verwezen wordt vanaf een opgegeven pagina of op pagina's in een opgegeven categorie.\nPagina's die op [[Special:Watchlist|uw volglijst]] staan worden '''vet''' weergegeven.",
-    "uploadnologintext": "Je moet [[Special:UserLogin|aangemeld]] zijn om bestanden te uploaden.",
-    "empty-file": "Het bestand dat je probeerde te uploaden had geen inhoud.",
-    "file-too-large": "Het bestand dat je probeerde te uploaden was te groot.",
-    "hookaborted": "De wijziging die je probeerde te maken is afgebroken door een uitbreiding.",
-    "emptyfile": "Het bestand dat je hebt geüpload lijkt leeg te zijn.\nDit zou kunnen komen door een typefout in de bestandsnaam.\nGa na of je dit bestand werkelijk bedoelde te uploaden.",
-    "fileexists": "Er bestaat al een bestand met deze naam.\nControleer <strong>[[:$1]]</strong> als je niet zeker weet of je het huidige bestand wilt overschrijven.\n[[$1|thumb]]",
-    "filepageexists": "De beschrijvingspagina voor dit bestand bestaat al op <strong>[[:$1]]</strong>, maar er bestaat geen bestand met deze naam.\nDe samenvatting die je hebt opgegeven verschijnt niet op de beschrijvingspagina.\nBewerk de pagina handmatig om je beschrijving daar weer te geven.\n[[$1|miniatuur]]",
-    "file-thumbnail-no": "De bestandsnaam begint met <strong>$1</strong>.\nHet lijkt een verkleinde afbeelding te zijn ''(miniatuurafbeelding)''.\nAls je deze afbeelding in volledige resolutie hebt, upload die afbeelding dan.\nWijzig anders de bestandsnaam.",
-    "fileexists-forbidden": "Er bestaat al een bestand met deze naam, en dat kan niet overschreven worden.\nUpload je bestand onder een andere naam.\n[[File:$1|thumb|center|$1]]",
-    "fileexists-shared-forbidden": "Er bestaat al een bestand met deze naam bij de gedeelde bestanden.\nAls je het bestand alsnog wilt uploaden, ga dan terug en kies een andere naam.\n[[File:$1|thumb|center|$1]]",
-    "file-deleted-duplicate": "Een bestand dat identiek is aan dit bestand ([[:$1]]) is voorheen verwijderd.\nRaadpleeg het verwijderingslogboek voordat je verder gaat.",
-    "uploadfromurl-queued": "Je upload is in de wachtrij geplaatst.",
-    "filewasdeleted": "Er is eerder een bestand met deze naam verwijderd.\nRaadpleeg het $1 voordat je het opnieuw toevoegt.",
-    "filename-bad-prefix": "De naam van het bestand dat je aan het uploaden bent begint met '''\"$1\"''', wat een niet-beschrijvende naam is die meestal automatisch door een digitale camera wordt gegeven.\nKies een duidelijke naam voor je bestand.",
-    "upload-success-msg": "Je upload van [$2] is geslaagd en is beschikbaar: [[:{{ns:file}}:$1]]",
-    "upload-failure-msg": "Er was een probleem met je upload van [$2]:\n\n$1",
-    "upload-warning-msg": "Er was een probleem met je upload van [$2].\nGa terug naar het [[Special:Upload/stash/$1|uploadformulier]] om dit probleem te verhelpen.",
-    "uploadstash-badtoken": "Het uitvoeren van de handeling is mislukt. Dit komt mogelijk doordat je bewerkingsreferenties zijn verlopen. Probeer het opnieuw.",
-    "img-auth-nopathinfo": "PATH_INFO mist.\nJe server is niet ingesteld om deze gegevens door te geven.\nMisschien gebruikt deze CGI, en dan wordt img_auth niet ondersteund.\nZie https://www.mediawiki.org/wiki/Manual:Image_Authorization voor meer informatie.",
-    "img-auth-nologinnWL": "Je bent niet aangemeld en \"$1\" staat niet op de witte lijst.",
-    "img-auth-isdir": "Je probeert de map \"$1\" te benaderen.\nAlleen toegang tot bestanden is toegestaan.",
-    "upload-curl-error28-text": "Het duurde te lang voordat de website antwoordde.\nControleer of de website beschikbaar is, wacht even en probeer het dan opnieuw.\nJe kunt het misschien proberen als het minder druk is.",
-    "upload_source_file": "(een bestand op je computer)",
-    "sharedupload-desc-edit": "Dit bestand komt van $1 en kan ook in andere projecten gebruikt worden.\nJe kunt de [$2 pagina met de bestandsbeschrijving] daar bewerken.",
-    "sharedupload-desc-create": "Dit bestand komt van $1 en kan ook in andere projecten gebruikt worden.\nJe kunt de beschrijving bewerken op de [$2 pagina met de bestandsbeschrijving].",
-    "filepage-nofile-link": "Er bestaat geen bestand met deze naam, maar je kunt het [$1 uploaden].",
-    "upload-disallowed-here": "Je kunt dit bestand niet overschrijven.",
-    "filerevert-intro": "Je bent '''[[Media:$1|$1]]''' aan het terugdraaien tot de [$4 versie op $2, $3].",
-    "filedelete-intro": "Je staat op het punt om het bestand '''[[Media:$1|$1]]''' te verwijderen, inclusief alle eerdere versies.",
-    "filedelete-intro-old": "Je bent de versie van '''[[Media:$1|$1]]''' van [$4 $3, $2] aan het verwijderen.",
-    "notargettext": "Je hebt niet opgegeven voor welke pagina of gebruiker je deze handeling wilt uitvoeren.",
-    "nopagetext": "De pagina die je wilt hernoemen bestaat niet.",
-    "booksources-text": "Hieronder staat een lijst met koppelingen naar andere websites die nieuwe of gebruikte boeken verkopen, en die wellicht meer informatie over het boek dat je zoekt hebben:",
-    "alllogstext": "Dit is het gecombineerde logboek van {{SITENAME}}.\nJe kunt ook kiezen voor specifieke logboeken en filteren op gebruiker (hoofdlettergevoelig) en paginanaam (hoofdlettergevoelig).",
-    "cachedspecial-viewing-cached-ttl": "Je bekijkt een cacheversie van deze pagina, die maximaal $1 oud is.",
-    "cachedspecial-viewing-cached-ts": "Je bekijkt een cacheversie van deze pagina, die mogelijk niet volledig is bijgewerkt.",
-    "mailnologintext": "Je moet [[Special:UserLogin|aangemeld]] zijn en een geldig e-mailadres in je [[Special:Preferences|voorkeuren]] vermelden om andere gebruikers te kunnen e-mailen.",
-    "emailpagetext": "Via dit formulier kan je een e-mail aan {{GENDER:$1|deze gebruiker}} verzenden.\nHet e-mailadres dat je hebt opgegeven bij [[Special:Preferences|je voorkeuren]] wordt als afzender gebruikt.\nDe ontvanger kan dus direct naar je reageren.",
-    "usermaildisabledtext": "Je kunt geen e-mail verzenden naar andere gebruikers op deze wiki",
-    "emailccsubject": "Kopie van je bericht aan $1: $2",
-    "emailsenttext": "Je e-mail is verzonden.",
-    "nowatchlist": "Je volglijst is leeg.",
-    "watchlistanontext": "Om je volglijst te bekijken of te bewerken moet je je $1.",
-    "watchnologintext": "Je dient [[Special:UserLogin|aangemeld]] te zijn om je volglijst te bewerken.",
-    "addedwatchtext": "De pagina \"[[:$1]]\" is toegevoegd aan je [[Special:Watchlist|volglijst]].\nToekomstige bewerkingen van deze pagina en de bijbehorende overlegpagina worden op daar weergegeven.",
-    "removedwatchtext": "De pagina \"[[:$1]]\" is van [[Special:Watchlist|je volglijst]] verwijderd.",
-    "watchlist-details": "Er {{PLURAL:$1|staat één pagina|staan $1 pagina's}} op je volglijst, exclusief overlegpagina's.",
-    "wlheader-showupdated": "Pagina's die zijn bewerkt sinds je laatste bezoek worden '''vet''' weergegeven",
-    "watchlistcontains": "Er {{PLURAL:$1|staat één pagina|staan $1 pagina's}} op je volglijst.",
-    "watcherrortext": "Er is een fout opgetreden tijdens het wijzigen van je volglijstinstellingen voor \"$1\".",
-    "enotif_lastvisited": "Zie $1 voor alle wijzigingen sinds je laatste bezoek.",
-    "enotif_body": "Hoi $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nSamenvatting van de wijziging: $PAGESUMMARY $PAGEMINOREDIT\n\nContactgegevens van de auteur:\nE-mailadres: $PAGEEDITOR_EMAIL\nWiki: $PAGEEDITOR_WIKI\n\nTenzij je deze pagina bezoekt, komen er geen verdere berichten. Op je volglijst kan je voor alle gevolgde pagina's de waarschuwingsinstellingen opschonen.\n\nGroet van je {{SITENAME}}-waarschuwingssysteem.\n\n--\nJe kunt je e-mailinstellingen wijzigen op:\n{{canonicalurl:{{#special:Preferences}}}}\n\nJe kunt je volglijstinstellingen wijzigen op:\n{{canonicalurl:Special:Watchlist/edit}}\n\nJe kunt de pagina van je volglijst verwijderen via de volgende koppeling:\n$UNWATCHURL\n\nTerugkoppeling en verdere assistentie:\n{{canonicalurl:{{MediaWiki:Helppage}}}}",
-    "historywarning": "'''Waarschuwing:''' de pagina die je wilt verwijderen heeft ongeveer $1 {{PLURAL:$1|versie|versies}}:",
-    "confirmdeletetext": "Je staat op het punt een pagina te verwijderen, inclusief de geschiedenis.\nBevestig hieronder dat dit inderdaad je bedoeling is, dat je de gevolgen begrijpt en dat de verwijdering overeenstemt met het [[{{MediaWiki:Policy-url}}|beleid]].",
-    "sessionfailure": "Er lijkt een probleem te zijn met je aanmeldsessie.\nJe handeling is gestopt uit voorzorg tegen een beveiligingsrisico (dat bestaat uit mogelijke \"hijacking\" van deze sessie).\nGa een pagina terug, laad die pagina opnieuw en probeer het nog eens.",
-    "protect-text": "Hier kun je het beveiligingsniveau voor de pagina '''$1''' bekijken en wijzigen.",
-    "protect-locked-blocked": "Je kunt het beveiligingsniveau niet wijzigen terwijl je geblokkeerd bent.\nHier zijn de huidige instellingen voor de pagina '''$1''':",
-    "protect-locked-access": "Je hebt geen rechten om het beveiligingsniveau te wijzigen.\nDit zijn de huidige instellingen voor de pagina '''$1''':",
-    "protect-cantedit": "Je kunt het beveiligingsniveau van deze pagina niet wijzigen, omdat je geen rechten hebt om het te bewerken.",
-    "undeletehistory": "Als je een pagina terugplaatst, worden alle versies hersteld.\nAls er al een nieuwe pagina met dezelfde naam is aangemaakt sinds de pagina is verwijderd, worden de eerder verwijderde versies teruggeplaatst en blijft de huidige versie intact.",
-    "undeleterevision-missing": "Ongeldige of missende versie.\nMogelijk heb je een verkeerde koppeling of is de versie hersteld of verwijderd uit het archief.",
-    "undelete-show-file-confirm": "Weet je zeker dat je een verwijderde versie van het bestand \"<nowiki>$1</nowiki>\" van $2 om $3 wilt bekijken?",
-    "ipb-blockingself": "Je staat op het punt jezelf te blokkeren. Weet je zeker dat je dat wilt doen?",
-    "ipb-confirmhideuser": "Je staat op het punt een verborgen gebruiker te blokkeren. Hiervoor worden gebruikersnamen in alle lijsten en logboekregels verborgen. Weet je het zeker?",
-    "ipb-needreblock": "$1 is al geblokkeerd.\nWil je de instellingen wijzigen?",
-    "unblock-hideuser": "Je kunt deze gebruiker niet deblokkeren, omdat de gebruikersnaam verborgen is.",
-    "proxyblockreason": "Dit is een automatische preventieve blokkade, omdat je gebruik maakt van een open proxyserver.\nNeem contact op met je internetprovider of je helpdesk en stel die op de hoogte van dit ernstige beveiligingsprobleem.",
-    "sorbsreason": "Je IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.",
-    "sorbs_create_account_reason": "Je IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.\nJe kunt geen gebruiker registreren.",
-    "cant-see-hidden-user": "De gebruiker die je probeert te blokken is al geblokkeerd en verborgen.\nOmdat je het recht \"hideuser\" niet hebt, kun je de blokkade van de gebruiker niet bekijken of bewerken.",
-    "ipbblocked": "Je kunt geen andere gebruikers (de)blokkeren, omdat je zelf geblokkeerd bent",
-    "ipbnounblockself": "Je mag jezelf niet deblokkeren",
-    "lockdbtext": "Waarschuwing: de database blokkeren heeft tot gevolg dat geen enkele gebruiker meer in staat is pagina's te bewerken, voorkeuren te wijzigen of iets anders te doen waarvoor wijzigingen in de database nodig zijn.\nBevestig dat je deze handeling wilt uitvoeren en dat je de database vrijgeeft nadat het onderhoud is uitgevoerd.",
-    "unlockdbtext": "Na het vrijgeven van de database kunnen gebruikers weer pagina's bewerken, hun voorkeuren wijzigen of iets anders te doen waarvoor er wijzigingen in de database nodig zijn.\nBevestig dat je deze handeling wil uitvoeren.",
-    "locknoconfirm": "Je hebt je keuze niet bevestigd via het vinkvakje.",
-    "lockdbsuccesstext": "De database is afgesloten.<br />\nVergeet niet de [[Special:UnlockDB|database vrij te geven]] zodra je klaar bent met je onderhoud.",
-    "movepagetext": "Door middel van het onderstaande formulier kan je een pagina hernoemen.\nDe geschiedenis gaat mee naar de nieuwe pagina.\n* De oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\n* Koppelingen naar de oude pagina worden niet aangepast.\n* De pagina's die doorverwijzen naar de oorspronkelijke paginanaam worden automatisch bijgewerkt.\nAls je dit niet wilt, controleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\n\n'''Waarschuwing!'''\nVoor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat je die gevolgen overziet voordat je deze handeling uitvoert.",
-    "movepagetext-noredirectfixer": "Door middel van het onderstaande formulier kunt u een pagina en alle bijbehorende oude versies hernoemen.\nDe oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\nControleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\nJe kunt dus een pagina die per ongeluk is hernoemd terug hernoemen en je kunt een bestaande pagina niet overschrijven. \n\n'''Waarschuwing:''' voor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat je die gevolgen overziet voordat je deze handeling uitvoert.",
-    "movepagetalktext": "De bijbehorende overlegpagina krijgt automatisch een andere naam, '''tenzij''':\n* De overlegpagina onder de nieuwe naam al bestaat;\n* Je het onderstaande vinkje deselecteert.\n\nIn die gevallen moet je de pagina handmatig hernoemen of samenvoegen.",
-    "moveuserpage-warning": "'''Waarschuwing:''' Je gaat een gebruikerspagina hernoemen.\nHoud er rekening mee dat alleen de pagina wordt hernoemd, ''niet'' de gebruiker.",
-    "movenologintext": "Je moet [[Special:UserLogin|aangemeld]] zijn om een pagina te hernoemen.",
-    "movenotallowed": "Je hebt geen rechten om pagina's te hernoemen.",
-    "movenotallowedfile": "Je hebt geen rechten om bestanden te hernoemen.",
-    "cant-move-user-page": "Je hebt geen rechten om gebruikerspagina's te hernoemen (met uitzondering van subpagina's).",
-    "cant-move-to-user-page": "Je hebt geen rechten om een pagina naar een gebruikerspagina te hernoemen. Hernoemen naar een subpagina is wel mogelijk.",
-    "cantmove-titleprotected": "Je kunt geen pagina naar deze naam hernoemen, omdat deze naam beveiligd is tegen het aanmaken ervan.",
-    "delete_and_move_text": "==Verwijdering nodig==\nOnder de naam \"[[:$1]]\" bestaat al een pagina.\nWil je deze verwijderen om plaats te maken voor de te hernoemen pagina?",
-    "exporttext": "Je kunt de tekst en geschiedenis van een pagina of pagina's exporteren naar XML.\nDit exportbestand is daarna te importeren in een andere MediaWiki via de [[Special:Import|importpagina]].\n\nGeef in het onderstaande veld de namen van de te exporteren pagina's op, één pagina per regel, en geef aan of je alle versies met de bewerkingssamenvatting of alleen de huidige versies met de bewerkingssamenvatting wilt exporteren.\n\nIn het laatste geval kan je ook een koppeling gebruiken, bijvoorbeeld [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] voor de pagina \"[[{{MediaWiki:Mainpage}}]]\".",
-    "allmessagestext": "Hieronder staan de systeemberichten uit de MediaWiki-naamruimte.\nGa naar [https://www.mediawiki.org/wiki/Localisation MediaWiki-lokalisatie] en [//translatewiki.net translatewiki.net] als je wilt bijdragen aan de algemene vertaling voor MediaWiki.",
-    "importtext": "Gebruik de [[Special:Export|exportfunctie]] in de wiki waar de informatie vandaan komt.\nSla de uitvoer op je eigen computer op, en voeg die daarna hier toe.",
-    "import-error-edit": "De pagina \"$1\" is niet geïmporteerd omdat je niet de rechten hebt om die te bewerken.",
-    "import-error-create": "De pagina \"$1\" is niet geïmporteerd omdat je niet de rechten hebt om die aan te maken.",
-    "tooltip-pt-userpage": "Jouw gebruikerspagina",
-    "tooltip-pt-anonuserpage": "Gebruikerspagina voor je IP-adres",
-    "tooltip-pt-mytalk": "Jouw overlegpagina",
-    "tooltip-pt-watchlist": "Overzicht van pagina's die je volgt",
-    "tooltip-pt-mycontris": "Overzicht van je bijdragen",
-    "tooltip-pt-login": "Je wordt van harte uitgenodigd om je aan te melden als gebruiker, maar dit is niet verplicht",
-    "tooltip-ca-edit": "Je kunt deze pagina bewerken.\nGebruik de voorbeeldweergaveknop alvorens te bewaren.",
-    "tooltip-ca-viewsource": "Deze pagina is beveiligd.\nJe kunt wel de broncode bekijken.",
-    "tooltip-ca-nstab-special": "Dit is een speciale pagina, je kunt de pagina zelf niet bewerken",
-    "tooltip-save": "Je wijzigingen opslaan",
-    "tooltip-preview": "Een voorvertoning maken. Gebruik dit voordat je opslaat!",
-    "tooltip-watch": "Deze pagina aan je volglijst toevoegen",
-    "notacceptable": "De wikiserver kan de gegevens niet leveren in een vorm die je browser kan lezen.",
-    "spamprotectiontext": "De pagina die je wilde opslaan is geblokkeerd door het spamfilter.\nMeestal wordt dit door een externe koppeling op een zwarte lijst veroorzaakt.",
-    "markedaspatrollederror-noautopatrol": "Je kunt je eigen wijzigingen niet als gecontroleerd markeren.",
-    "mediawarning": "'''Waarschuwing''': dit bestandstype bevat mogelijk programmacode die je systeem schade kan berokkenen.",
-    "confirmemail_noemail": "Je hebt geen geldig e-mailadres opgegeven in je [[Special:Preferences|gebruikersvoorkeuren]].",
-    "confirmemail_text": "{{SITENAME}} eist bevestiging van je e-mailadres voordat je de e-mailmogelijkheden kunt gebruiken.\nKlik op de onderstaande knop om een bevestigingsbericht te ontvangen.\nDit bericht bevat een koppeling met een code.\nOpen die koppeling om je e-mailadres te bevestigen.",
-    "confirmemail_pending": "Er is al een bevestigingsbericht aan je verzonden.\nAls je recentelijk je gebruiker hebt aangemaakt, wacht dan een paar minuten totdat die aankomt voordat je opnieuw een e-mail laat sturen.",
-    "confirmemail_oncreate": "Er is een bevestigingscode naar je e-mailadres verzonden.\nDeze code is niet nodig om je aan te melden, maar je dient deze wel te bevestigen voordat je de e-mailmogelijkheden van deze wiki kunt gebruiken.",
-    "confirmemail_sendfailed": "{{SITENAME}} kon je bevestigingscode niet verzenden.\nControleer je e-mailadres op ongeldige tekens.\n\nHet e-mailprogramma meldde: $1",
-    "confirmemail_needlogin": "Je moet $1 om je e-mailadres te bevestigen.",
-    "confirmemail_success": "Je e-mailadres is bevestigd.\nJe kunt jezelf nu [[Special:UserLogin|aanmelden]] en {{SITENAME}} gebruiken.",
-    "confirmemail_loggedin": "Je e-mailadres is nu bevestigd.",
-    "confirmemail_body": "Iemand, waarschijnlijk jijzelf, met het IP-adres $1,\nheeft zich met dit e-mailadres geregistreerd als gebruiker \"$2\" op {{SITENAME}}.\n\nOpen de volgende koppeling in je webbrowser om te bevestigen dat je deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} te activeren:\n\n$3\n\nAls je jezelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van je e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
-    "confirmemail_body_changed": "Iemand, waarschijnlijk jijzelf, met het IP-adres $1,\nheeft het het e-mailadres geregistreerd voor gebruiker \"$2\" op {{SITENAME}} gewijzigd naar dit e-mailadres.\n\nOpen de volgende koppeling in je webbrowser om te bevestigen dat je deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls je jezelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van je e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
-    "confirmemail_body_set": "Iemand, waarschijnlijk jij, met het IP-adres $1,\nheeft het het e-mailadres voor gebruiker \"$2\" op {{SITENAME}} ingesteld op dit e-mailadres.\n\nOpen de volgende koppeling in je webbrowser om te bevestigen dat jij deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls jij deze wijziging *niet* hebt gemaakt, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
-    "deletedwhileediting": "'''Let op''': deze pagina is verwijderd terwijl je bezig was met je bewerking!",
-    "confirmrecreate": "Nadat je begonnen bent met je wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina verwijderd met opgave van de volgende reden:\n: ''$2''\nBevestig dat je de pagina opnieuw wilt aanmaken.",
-    "confirmrecreate-noreason": "Nadat je begonnen bent met je wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina verwijderd.\nBevestig dat je de pagina opnieuw wilt aanmaken.",
-    "confirm-watch-top": "Deze pagina toevoegen aan je volglijst?",
-    "confirm-unwatch-top": "Deze pagina verwijderen uit je volglijst?",
-    "watchlistedit-numitems": "Je volglijst bevat {{PLURAL:$1|1 pagina|$1 pagina’s}}, zonder overlegpagina’s.",
-    "watchlistedit-noitems": "Je volglijst bevat geen pagina’s.",
-    "watchlistedit-normal-explain": "Hieronder worden de pagina’s op je volglijst weergegeven.\nKlik op het vierkantje ernaast en daarna op \"{{int:Watchlistedit-normal-submit}}\" om een pagina te verwijderen.\nJe kunt ook de [[Special:EditWatchlist/raw|ruwe lijst bewerken]].",
-    "watchlistedit-normal-done": "Er {{PLURAL:$1|is één pagina|zijn $1 pagina’s}} verwijderd van je volglijst:",
-    "watchlistedit-raw-explain": "Hieronder staan pagina’s op je volglijst.\nJe kunt de lijst bewerken door pagina’s te verwijderen en toe te voegen.\nEén pagina per regel.\nAls je klaar bent, klik dan op \"{{int:Watchlistedit-raw-submit}}\".\nJe kunt ook [[Special:EditWatchlist|het standaard bewerkingsscherm gebruiken]].",
-    "watchlistedit-raw-done": "Je volglijst is bijgewerkt.",
-    "version-license-info": "MediaWiki is vrije software; je kunt MediaWiki verspreiden en/of aanpassen onder de voorwaarden van de GNU General Public License zoals gepubliceerd door de Free Software Foundation; ofwel versie 2 van de Licentie, of - zo je wilt - enige latere versie.\n\nMediaWiki wordt verspreid in de hoop dat het nuttig is, maar ZONDER ENIGE GARANTIE; zonder zelfs de implicitiete garantie van VERKOOPBAARHEID of GESCHIKHEID VOOR ENIG DOEL IN HET BIJZONDER. Zie de GNU General Public License voor meer informatie.\n\nSamen met dit programma hoor je een [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van de GNU General Public License] te hebben ontvangen; zo niet, schrijf dan naar de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA of [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lees de licentie online].",
-    "compare-title-not-exists": "De titel die je hebt opgegeven bestaat niet.",
-    "compare-revision-not-exists": "De versie die je hebt opgegeven bestaat niet.",
-    "dberr-usegoogle": "Wellicht kun je in de tussentijd zoeken via Google.",
-    "htmlform-float-invalid": "De waarde die je hebt opgegeven is geen getal.",
-    "feedback-bugornote": "Als je zover bent om een technisch probleem in detail te beschrijven, [$1 rapporteer dan een bug].\nAnders kan je ook het eenvoudige formulier hieronder gebruiken.\nJe reactie wordt dan toegevoegd aan de pagina \"[$3 $2]\", samen met je gebruikersnaam en de browser die je gebruikt.",
-    "feedback-thanks": "Bedankt! Je terugkoppeling is op de pagina \"[$2 $1]\" geplaatst.",
-    "api-error-badaccess-groups": "Je mag geen bestanden uploaden in deze wiki.",
-    "api-error-empty-file": "Het bestand dat je hebt geüpload is leeg.",
-    "api-error-file-too-large": "Het bestand dat je hebt geüpload is te groot.",
-    "api-error-hookaborted": "De wijziging die je probeert te maken is afgebroken door een uitbreiding.",
-    "api-error-internal-error": "Interne fout: er is iets misgegaan tijdens het verwerken van je upload door de wiki.",
-    "api-error-mustbeloggedin": "Je moet aangemeld zijn om bestanden te kunnen uploaden.",
-    "api-error-unknown-error": "Interne fout: er is iets misgegaan tijdens het uploaden van je bestand."
+       "@metadata": {
+               "authors": [
+                       "HanV",
+                       "MarkvA",
+                       "Siebrand",
+                       "Tedjuh10",
+                       "Southparkfan"
+               ]
+       },
+       "view-pool-error": "De servers zijn op het moment helaas overbelast.\nTe veel gebruikers proberen deze pagina te bekijken.\nWacht even voordat je opnieuw toegang probeert te krijgen tot deze pagina.\n\n$1",
+       "generic-pool-error": "De servers zijn op het moment helaas overbelast.\nTe veel gebruikers proberen deze pagina te bekijken.\nWacht even voordat je opnieuw toegang probeert te krijgen tot deze pagina.",
+       "badaccess-group0": "Je hebt geen rechten om de gevraagde handeling uit te voeren.",
+       "youhavenewmessages": "Je hebt $1 ($2).",
+       "youhavenewmessagesfromusers": "Je hebt $1 van {{PLURAL:$3|een andere gebruiker|$3 gebruikers}} ($2).",
+       "youhavenewmessagesmanyusers": "Je hebt $1 van een groot aantal gebruikers ($2).",
+       "youhavenewmessagesmulti": "Je hebt nieuwe berichten op $1",
+       "nosuchactiontext": "De opdracht in de URL is ongeldig.\nMogelijk heb je een typefout gemaakt in de URL of een onjuiste koppeling gevolgd.\nHet kan ook wijzen op een fout in de software van {{SITENAME}}.",
+       "nospecialpagetext": "<strong>Je hebt een onbestaande speciale pagina opgevraagd.</strong>\n\nEen lijst met bestaande speciale pagina’s staat op [[Special:SpecialPages|speciale pagina’s]].",
+       "missing-article": "In de database is geen inhoud aangetroffen voor de pagina \"$1\" die er wel zou moeten zijn ($2).\n\nDit kan voorkomen als je een verouderde koppeling naar het verschil tussen twee versies van een pagina volgt of een versie opvraagt die is verwijderd.\n\nAls dit niet het geval is, heb je wellicht een fout in de software gevonden.\nMaak hiervan melding bij een [[Special:ListUsers/sysop|beheerder]] van {{SITENAME}} en vermeld daarbij de URL van deze pagina.",
+       "actionthrottledtext": "Als maatregel tegen spam is het aantal keren per tijdseenheid dat je deze handeling kunt verrichten beperkt.\nDe limiet is overschreden.\nProbeer het over een aantal minuten opnieuw.",
+       "viewsourcetext": "Je kunt de brontekst van deze pagina bekijken en kopiëren:",
+       "viewyourtext": "Je kunt '''uw bewerkingen''' aan de brontekst van deze pagina bekijken en kopiëren:",
+       "editinginterface": "'''Waarschuwing:''' je bewerkt een pagina die interfacetekst voor de software bevat.\nBewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen op deze wiki.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen toe te voegen of te wijzigen voor alle wiki's.",
+       "namespaceprotected": "Je hebt geen rechten om pagina's in de naamruimte '''$1''' te bewerken.",
+       "customcssprotected": "Je kunt deze CSS-pagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.",
+       "customjsprotected": "Je kunt deze JavaScriptpagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.",
+       "exception-nologin-text": "Om deze pagina te bekijken of deze handeling uit te kunnen voeren moet je aangemeld zijn bij deze wiki.",
+       "logouttext": "<strong>Je bent nu afgemeld.</strong>\n\nMogelijk worden nog een aantal pagina's weergegeven alsof je aangemeld bent totdat je de cache van je browser leegt.",
+       "welcomecreation-msg": "Je gebruiker is aangemaakt.\nVergeet niet je [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te passen.",
+       "userlogin-yourname-ph": "Geef je gebruikersnaam op",
+       "userlogin-yourpassword-ph": "Geef je wachtwoord op",
+       "yourpasswordagain": "Geef je wachtwoord opnieuw in:",
+       "yourdomainname": "Je domein:",
+       "password-change-forbidden": "Je kunt je wachtwoord niet wijzigen in deze wiki.",
+       "externaldberror": "Er is een fout opgetreden bij het aanmelden bij de database of je hebt geen toestemming je externe gebruiker bij te werken.",
+       "gotaccount": "Heb je al een gebruikersnaam? '''$1'''.",
+       "userlogin-resetlink": "Ben je je aanmeldgegevens vergeten?",
+       "createacct-email-ph": "Geef je e-mailadres op",
+       "nocookiesnew": "De gebruiker is geregistreerd, maar jij bent niet aangemeld.\n{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.\nSchakel die in en meld daarna aan met je nieuwe gebruikersnaam en wachtwoord.",
+       "nocookieslogin": "{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.\nCookies zijn uitgeschakeld in je browser.\nSchakel deze optie aan en probeer het opnieuw.",
+       "nocookiesfornew": "De gebruiker is niet gemaakt omdat de bron niet bevestigd kon worden.\nZorg ervoor dat je cookies hebt ingeschakeld, herlaad deze pagina en probeer het opnieuw.",
+       "noname": "Je hebt geen geldige gebruikersnaam opgegeven.",
+       "loginsuccess": "'''Je bent nu aangemeld bij {{SITENAME}} als \"$1\".'''",
+       "nouserspecified": "Geef een gebruikersnaam op.",
+       "password-name-match": "Je wachtwoord en uw gebruikersnaam mogen niet overeenkomen.",
+       "passwordremindertext": "Iemand, waarschijnlijk jijzelf, heeft vanaf IP-adres $1 een verzoek\ngedaan tot het toezenden van een nieuw wachtwoord voor {{SITENAME}}\n($4). Er is een tijdelijk wachtwoord aangemaakt voor gebruiker \"$2\":\n\"$3\". Als dat je bedoeling was, meld je dan nu aan en kies een nieuw\nwachtwoord.\nJe tijdelijke wachtwoord vervalt over {{PLURAL:$5|$5 dag|$5 dagen}}.\n\nAls iemand anders dan jij dit verzoek heeft gedaan of als je zich inmiddels het\nwachtwoord herinnert en het niet langer wilt wijzigen, negeer dit bericht\ndan en blijf je bestaande wachtwoord gebruiken.",
+       "noemailcreate": "Je moet een geldig e-mailadres opgeven",
+       "passwordsent": "Het wachtwoord is verzonden naar het e-mailadres voor \"$1\".\nMeld je aan nadat je het hebt ontvangen.",
+       "blocked-mailpassword": "Je IP-adres is geblokkeerd voor het maken van wijzigingen.\nOm misbruik te voorkomen is het niet mogelijk om een nieuw wachtwoord aan te vragen.",
+       "eauthentsent": "Er is ter bevestiging een e-mail naar het opgegeven e-mailadres gezonden.\nVolg de aanwijzingen in de e-mail om aan te geven dat het jouw e-mailadres is.\nTot die tijd worden er geen e-mails naar het e-mailadres gezonden.",
+       "acct_creation_throttle_hit": "Bezoekers van deze wiki met hetzelfde IP-adres als jij hebben de afgelopen dag al $1 gebruiker{{PLURAL:$1||s}} geregistreerd, wat het maximale aantal in deze periode is.\nDaarom kan je vanaf je IP-adres op dit moment geen nieuwe gebruikers registreren.",
+       "emailauthenticated": "Je e-mailadres is bevestigd op $2 om $3.",
+       "emailnotauthenticated": "Je e-mailadres is niet bevestigd.\nJe ontvangt geen e-mail voor de onderstaande functies.",
+       "noemailprefs": "Geef een e-mailadres op in je voorkeuren om deze functies te gebruiken.",
+       "emailconfirmlink": "Bevestig je e-mailadres",
+       "createaccount-text": "Iemand heeft een gebruiker op {{SITENAME}} ($4) aangemaakt met de naam \"$2\" en jouw e-mailadres.\nHet wachtwoord voor \"$2\" is \"$3\".\nMeld je aan en wijzig je wachtwoord.\n\nNegeer dit bericht als deze gebruiker zonder jouw medeweten is aangemaakt.",
+       "login-throttled": "Je hebt recentelijk te vaak geprobeerd aan te melden met een onjuist wachtwoord.\nWacht even voordat je het opnieuw probeert.",
+       "login-abort-generic": "Je bent niet aangemeld. De procedure is afgebroken.",
+       "suspicious-userlogout": "Je verzoek om af te melden is genegeerd, omdat het lijkt alsof het verzoek is verzonden door een browser of cacheproxy die stuk is.",
+       "resetpass_announce": "Voer een nieuw wachtwoord in om het aanmelden te voltooien:",
+       "changepassword-success": "Je wachtwoord is gewijzigd.",
+       "resetpass-no-info": "Je moet aangemeld zijn voordat je deze pagina kunt gebruiken.",
+       "resetpass-wrong-oldpass": "Het huidige of tijdelijke wachtwoord is ongeldig.\nMogelijk heb je je wachtwoord al gewijzigd of een nieuw tijdelijk wachtwoord aangevraagd.",
+       "passwordreset-capture-help": "Als je dit vakje aanvinkt, wordt de e-mail (met het tijdelijke wachtwoord) naar de gebruiker verzonden en ook aan jou weergegeven.",
+       "passwordreset-emailtext-ip": "Iemand, waarschijnlijk jij, heeft vanaf het IP-adres $1 je gebruikersgegevens voor {{SITENAME}} ($4) opgevraagd.\nDe volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}.\nMeld je aan en wijzig het wachtwoord nu. Als je dit verzoek niet zelf hebt gedaan, of als je het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf je oude wachtwoord gebruiken.",
+       "passwordreset-emailtext-user": "Gebruiker $1 op de site {{SITENAME}} heeft je gebruikersgegevens voor {{SITENAME}} ($4) opgevraagd.\nDe volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}.\nMeld je aan en wijzig het wachtwoord nu. Als je dit verzoek niet zelf hebt gedaan, of als je het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf je oude wachtwoord gebruiken.",
+       "changeemail-text": "Vul dit formulier in om je e-mailadres te wijzigen. Je moet je wachtwoord invoeren om deze wijziging te bevestigen.",
+       "changeemail-no-info": "Je moet aangemeld zijn om rechtstreeks toegang te hebben tot deze pagina.",
+       "changeemail-password": "Jouw wachtwoord voor {{SITENAME}}:",
+       "sig_tip": "Je handtekening met datum en tijd",
+       "anoneditwarning": "'''Waarschuwing:''' je bent niet aangemeld.\nJe IP-adres wordt opgeslagen als je wijzigingen op deze pagina maakt.",
+       "anonpreviewwarning": "''Je bent niet aangemeld.''\n''Door je bewerking op te slaan wordt je IP-adres opgeslagen in de paginageschiedenis.''",
+       "missingsummary": "'''Let op:''' je hebt geen samenvatting opgegeven voor je bewerking.\nAls je nogmaals op ''Pagina opslaan'' klikt wordt de bewerking zonder samenvatting opgeslagen.",
+       "missingcommenttext": "Plaats je reactie hieronder.",
+       "missingcommentheader": "'''Let op:''' Je hebt geen onderwerp/kop voor deze reactie opgegeven.\nAls je opnieuw op \"{{int:savearticle}}\" klikt, wordt je wijziging zonder een onderwerp of koptekst opgeslagen.",
+       "blockedtext": "'''Je gebruiker of IP-adres is geblokkeerd.'''\n\nDe blokkade is uitgevoerd door $1.\nDe opgegeven reden is ''$2''.\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nJe kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] om de blokkade te bespreken.\nJe kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij je een geldig e-mailadres hebt opgegeven in je [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet geblokkeerd is.\nJe huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als je ergens op deze blokkade reageert.",
+       "autoblockedtext": "Je IP-adres is automatisch geblokkeerd, omdat het is gebruikt door een andere gebruiker, die is geblokkeerd door $1.\nDe opgegeven reden is:\n\n:''$2''\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nJe kunt deze blokkade bespreken met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]].\n\nJe kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij je een geldig e-mailadres hebt opgegeven in je [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet is geblokkeerd.\n\nJe huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als je ergens op deze blokkade reageert.",
+       "whitelistedittext": "Je moet $1 om pagina's te bewerken.",
+       "confirmedittext": "Je moet je e-mailadres bevestigen voor je kunt bewerken.\nVoer je e-mailadres in en bevestig het via je [[Special:Preferences|voorkeuren]].",
+       "nosuchsectiontext": "Je probeerde een subkopje te bewerken dat niet bestaat.\nWellicht is het verplaatst of verwijderd terwijl je de pagina aan het bekijken was.",
+       "loginreqpagetext": "Je moet je $1 om andere pagina's te kunnen bekijken.",
+       "newarticletext": "Deze pagina bestaat niet.\nTyp in het onderstaande veld om de pagina aan te maken (meer informatie staat op de [$1 hulppagina]).\nGebruik de knop '''vorige''' in je browser als je hier per ongeluk terecht bent gekomen.",
+       "anontalkpagetext": "----''Deze overlegpagina hoort bij een anonieme gebruiker die geen gebruikersnaam heeft of deze niet gebruikt.\nDaarom wordt het IP-adres ter identificatie gebruikt.\nHet is mogelijk dat meerdere personen hetzelfde IP-adres gebruiken.\nMogelijk ontvang je hier berichten die niet voor je bedoeld zijn.\nAls je dat wilt voorkomen, [[Special:UserLogin/signup|registreer je]] of [[Special:UserLogin|meld je aan]] om verwarring met andere anonieme gebruikers te voorkomen.''",
+       "noarticletext": "Deze pagina bevat geen tekst.\nJe kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken] of [{{fullurl:{{FULLPAGENAME}}|action=edit}} deze pagina bewerken]</span>.",
+       "noarticletext-nopermission": "Deze pagina bevat geen tekst.\nJe kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's of\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken]</span>, maar je mag de pagina niet aanmaken.",
+       "userpage-userdoesnotexist": "Je bewerkt een gebruikerspagina van een gebruiker die niet bestaat (gebruiker \"$1\").\nControleer of je deze pagina wel wilt aanmaken/bewerken.",
+       "clearyourcache": "'''Let op!''' Nadat je de wijzigingen hebt opgeslagen is het wellicht nodig je browsercache te legen.\n* '''Firefox / Safari:''' houd ''Shift'' ingedrukt terwijl je op ''Vernieuwen'' klikt of druk op ''Ctrl-F5'' of ''Ctrl-R'' (''⌘-Shift-R'' op een Mac)\n* '''Google Chrome:''' druk op ''Ctrl-Shift-R'' (''⌘-Shift-R'' op een Mac)\n* '''Internet Explorer:''' houd ''Ctrl'' ingedrukt terwijl je op ''Vernieuwen'' klikt of druk op ''Ctrl-F5''\n* '''Opera:''' leeg je cache in ''Extra → Voorkeuren''",
+       "usercssyoucanpreview": "'''Tip:''' gebruik de knop \"{{int:showpreview}}\" om je nieuwe CSS te testen alvorens op te slaan.",
+       "userjsyoucanpreview": "'''Tip:''' gebruik de knop \"{{int:showpreview}}\" om je nieuwe JavaScript te testen alvorens op te slaan.",
+       "usercsspreview": "'''Dit is alleen een voorvertoning van je persoonlijke CSS.\nDeze is nog niet opgeslagen!'''",
+       "userjspreview": "'''Let op: je test nu je persoonlijke JavaScript.'''\n'''De pagina is niet opgeslagen!'''",
+       "userinvalidcssjstitle": "'''Waarschuwing:''' er is geen uiterlijk \"$1\".\nJe eigen .css- en .js-pagina's beginnen met een kleine letter, bijvoorbeeld {{ns:user}}:Naam/vector.css in plaats van {{ns:user}}:Naam/Vector.css.",
+       "previewnote": "'''Let op: dit is een controlepagina.'''\nJe tekst is niet opgeslagen!",
+       "previewconflict": "Deze voorvertoning geeft aan hoe de tekst in het bovenste veld eruit ziet als je deze opslaat.",
+       "session_fail_preview": "'''Je bewerking is niet verwerkt, omdat de sessiegegevens verloren zijn gegaan.\nProbeer het opnieuw.\nAls het dan nog niet lukt, [[Special:UserLogout|meld jezelf dan af]] en weer aan.'''",
+       "session_fail_preview_html": "'''Je bewerking is niet verwerkt, omdat sessiegegevens verloren zijn gegaan.'''\n\n''Omdat in {{SITENAME}} ruwe HTML is ingeschakeld, is een voorvertoning niet mogelijk als bescherming tegen aanvallen met JavaScript.''\n\n'''Als dit een legitieme bewerking is, probeer het dan opnieuw.\nAls het dan nog niet lukt, [[Special:UserLogout|meld jezelf dan af]] en weer aan.'''",
+       "token_suffix_mismatch": "'''Je bewerking is geweigerd, omdat je browser de leestekens in het bewerkingstoken onjuist heeft behandeld.'''\nDe bewerking is geweigerd om verminking van de paginatekst te voorkomen.\nDit gebeurt soms als er een webgebaseerde proxydienst wordt gebruikt die fouten bevat.",
+       "edit_form_incomplete": "'''Sommige onderdelen van het bewerkingsformulier hebben de server niet bereikt. Controleer of je bewerkingen intact zijn en probeer het opnieuw.'''",
+       "explainconflict": "Een andere gebruiker heeft deze pagina bewerkt sinds je met je bewerking bent begonnen.\nIn het bovenste deel van het venster staat de tekst van de huidige pagina.\nJe bewerking staat in het onderste gedeelte.\nJe dient je bewerkingen in te voegen in de bestaande tekst.\n'''Alleen''' de tekst in het bovenste gedeelte wordt opgeslagen als je op \"{{int:savearticle}}\" klikt.",
+       "yourtext": "Je tekst",
+       "nonunicodebrowser": "'''Waarschuwing: je browser kan niet goed overweg met Unicode.'''\nHiermee wordt door de MediaWiki-software rekening gehouden zodat je toch zonder problemen pagina's kunt bewerken: niet-ASCII tekens worden in het bewerkingsveld weergegeven als hexadecimale codes.",
+       "editingold": "'''Waarschuwing: je bewerkt een oude versie van deze pagina.'''\nAls je je bewerking opslaat, gaan alle wijzigingen verloren die na deze versie zijn gemaakt.",
+       "copyrightwarning": "Let op: alle bijdragen aan {{SITENAME}} worden geacht te zijn vrijgegeven onder de $2 (zie $1 voor details).\nAls je niet wilt dat je tekst door anderen naar believen bewerkt en verspreid kan worden, kies dan niet voor \"Pagina opslaan\".<br />\nHierbij beloof je ons tevens dat je deze tekst zelf hebt geschreven of overgenomen uit een vrije, openbare bron.<br />\n'''Gebruik geen materiaal dat beschermd wordt door auteursrecht, tenzij je daarvoor toestemming hebt!'''",
+       "copyrightwarning2": "Al je bijdragen aan {{SITENAME}} kunnen bewerkt, gewijzigd of verwijderd worden door andere gebruikers.\nAls je niet wilt dat je teksten rigoureus aangepast worden door anderen, plaats ze hier dan niet.<br />\nJe belooft ook dat je de oorspronkelijke auteur bent van dit materiaal of dat je het hebt gekopieerd uit een bron in het publieke domein of een soortgelijke vrije bron (zie $1 voor details).\n'''Gebruik geen materiaal dat beschermd wordt door auteursrecht, tenzij je daarvoor toestemming hebt!'''",
+       "longpageerror": "'''Fout: de tekst die je hebt toegevoegd is {{PLURAL:$1|één kilobyte|$1 kilobyte}} groot, wat groter is dan het maximum van {{PLURAL:$2|één kilobyte|$2 kilobyte}}.'''\nOpslaan is niet mogelijk.",
+       "readonlywarning": "'''Waarschuwing: je kunt deze bewerking nu niet opslaan omdat de database is geblokkeerd voor bewerkingen wegens onderhoudswerkzaamheden.'''\nHet is misschien verstandig om je tekst tijdelijk in een tekstbestand op te slaan om dit te bewaren voor wanneer de blokkering van de database opgeheven is.\n\nEen beheerder heeft de database geblokkeerd om de volgende reden: $1",
+       "nocreatetext": "{{SITENAME}} heeft de mogelijkheid om nieuwe pagina's te maken beperkt.\nJe kunt reeds bestaande pagina's wijzigen of je kunt [[Special:UserLogin|jezelf aanmelden of registreren]].",
+       "nocreate-loggedin": "Je hebt geen rechten om nieuwe pagina's te maken.",
+       "permissionserrorstext": "Je hebt geen rechten om dit te doen om de volgende {{PLURAL:$1|reden|redenen}}:",
+       "permissionserrorstext-withaction": "Je hebt geen rechten om $2 om de volgende {{PLURAL:$1|reden|redenen}}:",
+       "recreate-moveddeleted-warn": "'''Waarschuwing: je bent bezig met het aanmaken van een pagina die in het verleden verwijderd is.'''\n\nOverweeg of het terecht is dat je verder werkt aan deze pagina.\nVoor je gemak staan hieronder het verwijderingslogboek en het hernoemingslogboek voor deze pagina:",
+       "edit-no-change": "Je bewerking is genegeerd, omdat er geen wijziging aan de tekst is gemaakt.",
+       "editwarning-warning": "Als je deze pagina verlaat verlies je mogelijk wijzigingen die je hebt gemaakt.\nAls je bent aangemeld, kan je deze waarschuwing uitschakelen in het tabblad \"Bewerken\" in je voorkeuren.",
+       "rev-deleted-text-unhide": "Deze paginaversie is '''verwijderd'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].\nAls je wilt kan je [$1 deze versie bekijken].",
+       "rev-suppressed-text-unhide": "Deze paginaversie is '''onderdrukt'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek onderdrukte versies].\nAls je wilt kan je [$1 deze versie bekijken].",
+       "rev-deleted-text-view": "Deze paginaversie is '''verwijderd'''.\nJe kunt deze bekijken; er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
+       "rev-suppressed-text-view": "Deze paginaversie is '''onderdrukt'''.\nJe kunt deze bekijken; er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek onderdrukte versies].",
+       "rev-deleted-no-diff": "Je kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''.\nAchtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
+       "rev-suppressed-no-diff": "Je kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''.",
+       "rev-deleted-unhide-diff": "Een van de bewerkingen voor de verschillen die je hebt opgevraagd is '''verwijderd'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].\nAls je wilt kan je [$1 de verschillen bekijken].",
+       "rev-suppressed-unhide-diff": "Een van de versies in deze verschillen is '''onderdrukt'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek].\nAls je wilt kan je [$1 deze versie bekijken].",
+       "rev-deleted-diff-view": "Een van de versies van de verschillen die je hebt opgevraagd is verwijderd, \nJe kunt deze verschillen bekijken. Mogelijk zijn details zichtbaar in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
+       "rev-suppressed-diff-view": "Een van de bewerkingen voor de verschillen die u hebt opgevraagd, is '''onderdrukt'''.\nJe kunt deze verschillen bekijken. Er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek].",
+       "revdelete-nooldid-text": "Je hebt geen doelversie(s) voor deze handeling opgegeven, de opgegeven versie bestaat niet of je probeert de laatste versie te verbergen.",
+       "revdelete-show-file-confirm": "Weet je zeker dat je de verwijderde versie van het bestand \"<nowiki>$1</nowiki>\" van $2 om $3 wilt bekijken?",
+       "revdelete-confirm": "Bevestig dat je dit wilde doen, dat je de consequenties begrijpt en dat je dit doet in overeenstemming met het geldende [[{{MediaWiki:Policy-url}}|beleid]].",
+       "revdelete-show-no-access": "Er is een fout opgetreden tijdens het weergeven van het object van $1 om $2: dit object is gemarkeerd als \"beschermd\".\nJe hebt geen toegang tot dit object.",
+       "revdelete-modify-no-access": "Er is een fout opgetreden tijdens het wijzigen van het object van $1 om $2: dit object is gemarkeerd als \"beschermd\".\nJe hebt geen toegang tot dit object.",
+       "revdelete-only-restricted": "Er is een fout opgetreden tijdens het verbergen van het item van $1, $2: je kunt geen items onderdrukken uit het zicht van beheerders zonder ook een van de andere zichtbaarheidsopties te selecteren.",
+       "mergehistory-header": "Via deze pagina kan je versies van de geschiedenis van een bronpagina naar een nieuwere pagina samenvoegen.\nZorg dat deze wijziging de geschiedenis van de pagina behoudt.",
+       "search-suggest": "Bedoelde je: $1",
+       "searchdisabled": "Zoeken in {{SITENAME}} is niet mogelijk.\nJe kunt gebruik maken van Google.\nDe gegevens over {{SITENAME}} zijn mogelijk niet bijgewerkt.",
+       "savedprefs": "Je voorkeuren zijn opgeslagen.",
+       "prefs-reset-intro": "Gebruik deze functie om je voorkeuren te herstellen naar de standaardinstellingen.\nDeze handeling kan niet ongedaan gemaakt worden.",
+       "youremail": "E-mailadres:",
+       "prefs-help-variant": "Jouw voorkeursvariant of -spelling om de inhoudspagina's van deze wiki in weer te geven.",
+       "prefs-help-signature": "Reacties op de overlegpagina's worden meestal ondertekend met \"<nowiki>~~~~</nowiki>\".\nDe tildes worden omgezet in je ondertekening en een datum en tijd van de bewerking.",
+       "badsiglength": "Je ondertekening is te lang.\nDeze moet minder dan $1 {{PLURAL:$1|teken|tekens}} bevatten.",
+       "prefs-help-realname": "Echte naam is optioneel.\nAls je deze opgeeft, kan deze naam gebruikt worden om je erkenning te geven voor je werk.",
+       "prefs-help-email": "E-mailadres is optioneel, maar maakt het mogelijk om jou je wachtwoord te e-mailen als je het bent vergeten.",
+       "prefs-help-email-others": "Je kunt ook anderen in staat stellen per e-mail contact met je op te nemen via een koppeling op uw gebruikers- en overlegpagina zonder dat je je identiteit prijsgeeft.",
+       "userrights-groups-help": "Je kunt de groepen wijzigen waar deze gebruiker lid van is.\n* Een aangekruist vakje betekent dat de gebruiker lid is van de groep.\n* Een niet aangekruist vakje betekent dat de gebruiker geen lid is van de groep.\n* Een \"*\" betekent dat je een gebruiker niet uit een groep kunt verwijderen nadat je die hebt toegevoegd of vice versa.",
+       "userrights-no-interwiki": "Je hebt geen rechten om gebruikersrechten op andere wiki's te wijzigen.",
+       "userrights-nologin": "Je moet [[Special:UserLogin|aangemeld]] zijn met een gebruiker met de juiste rechten om gebruikersrechten toe te wijzen.",
+       "userrights-notallowed": "Je hebt geen rechten om gebruikersrechten toe te voegen of te verwijderen.",
+       "userrights-changeable-col": "Groepen die je kunt beheren",
+       "userrights-unchangeable-col": "Groepen die je niet kunt beheren",
+       "recentchangeslinked-summary": "Deze speciale pagina geeft de laatste bewerkingen weer op pagina's waarheen verwezen wordt vanaf een opgegeven pagina of op pagina's in een opgegeven categorie.\nPagina's die op [[Special:Watchlist|uw volglijst]] staan worden '''vet''' weergegeven.",
+       "uploadnologintext": "Je moet [[Special:UserLogin|aangemeld]] zijn om bestanden te uploaden.",
+       "empty-file": "Het bestand dat je probeerde te uploaden had geen inhoud.",
+       "file-too-large": "Het bestand dat je probeerde te uploaden was te groot.",
+       "hookaborted": "De wijziging die je probeerde te maken is afgebroken door een uitbreiding.",
+       "emptyfile": "Het bestand dat je hebt geüpload lijkt leeg te zijn.\nDit zou kunnen komen door een typefout in de bestandsnaam.\nGa na of je dit bestand werkelijk bedoelde te uploaden.",
+       "fileexists": "Er bestaat al een bestand met deze naam.\nControleer <strong>[[:$1]]</strong> als je niet zeker weet of je het huidige bestand wilt overschrijven.\n[[$1|thumb]]",
+       "filepageexists": "De beschrijvingspagina voor dit bestand bestaat al op <strong>[[:$1]]</strong>, maar er bestaat geen bestand met deze naam.\nDe samenvatting die je hebt opgegeven verschijnt niet op de beschrijvingspagina.\nBewerk de pagina handmatig om je beschrijving daar weer te geven.\n[[$1|miniatuur]]",
+       "file-thumbnail-no": "De bestandsnaam begint met <strong>$1</strong>.\nHet lijkt een verkleinde afbeelding te zijn ''(miniatuurafbeelding)''.\nAls je deze afbeelding in volledige resolutie hebt, upload die afbeelding dan.\nWijzig anders de bestandsnaam.",
+       "fileexists-forbidden": "Er bestaat al een bestand met deze naam, en dat kan niet overschreven worden.\nUpload je bestand onder een andere naam.\n[[File:$1|thumb|center|$1]]",
+       "fileexists-shared-forbidden": "Er bestaat al een bestand met deze naam bij de gedeelde bestanden.\nAls je het bestand alsnog wilt uploaden, ga dan terug en kies een andere naam.\n[[File:$1|thumb|center|$1]]",
+       "file-deleted-duplicate": "Een bestand dat identiek is aan dit bestand ([[:$1]]) is voorheen verwijderd.\nRaadpleeg het verwijderingslogboek voordat je verder gaat.",
+       "filewasdeleted": "Er is eerder een bestand met deze naam verwijderd.\nRaadpleeg het $1 voordat je het opnieuw toevoegt.",
+       "filename-bad-prefix": "De naam van het bestand dat je aan het uploaden bent begint met '''\"$1\"''', wat een niet-beschrijvende naam is die meestal automatisch door een digitale camera wordt gegeven.\nKies een duidelijke naam voor je bestand.",
+       "upload-success-msg": "Je upload van [$2] is geslaagd en is beschikbaar: [[:{{ns:file}}:$1]]",
+       "upload-failure-msg": "Er was een probleem met je upload van [$2]:\n\n$1",
+       "upload-warning-msg": "Er was een probleem met je upload van [$2].\nGa terug naar het [[Special:Upload/stash/$1|uploadformulier]] om dit probleem te verhelpen.",
+       "uploadstash-badtoken": "Het uitvoeren van de handeling is mislukt. Dit komt mogelijk doordat je bewerkingsreferenties zijn verlopen. Probeer het opnieuw.",
+       "img-auth-nopathinfo": "PATH_INFO mist.\nJe server is niet ingesteld om deze gegevens door te geven.\nMisschien gebruikt deze CGI, en dan wordt img_auth niet ondersteund.\nZie https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization voor meer informatie.",
+       "img-auth-nologinnWL": "Je bent niet aangemeld en \"$1\" staat niet op de witte lijst.",
+       "img-auth-isdir": "Je probeert de map \"$1\" te benaderen.\nAlleen toegang tot bestanden is toegestaan.",
+       "upload-curl-error28-text": "Het duurde te lang voordat de website antwoordde.\nControleer of de website beschikbaar is, wacht even en probeer het dan opnieuw.\nJe kunt het misschien proberen als het minder druk is.",
+       "upload_source_file": "(een bestand op je computer)",
+       "sharedupload-desc-edit": "Dit bestand komt van $1 en kan ook in andere projecten gebruikt worden.\nJe kunt de [$2 pagina met de bestandsbeschrijving] daar bewerken.",
+       "sharedupload-desc-create": "Dit bestand komt van $1 en kan ook in andere projecten gebruikt worden.\nJe kunt de beschrijving bewerken op de [$2 pagina met de bestandsbeschrijving].",
+       "filepage-nofile-link": "Er bestaat geen bestand met deze naam, maar je kunt het [$1 uploaden].",
+       "upload-disallowed-here": "Je kunt dit bestand niet overschrijven.",
+       "filerevert-intro": "Je bent '''[[Media:$1|$1]]''' aan het terugdraaien tot de [$4 versie op $2, $3].",
+       "filedelete-intro": "Je staat op het punt om het bestand '''[[Media:$1|$1]]''' te verwijderen, inclusief alle eerdere versies.",
+       "filedelete-intro-old": "Je bent de versie van '''[[Media:$1|$1]]''' van [$4 $3, $2] aan het verwijderen.",
+       "notargettext": "Je hebt niet opgegeven voor welke pagina of gebruiker je deze handeling wilt uitvoeren.",
+       "nopagetext": "De pagina die je wilt hernoemen bestaat niet.",
+       "booksources-text": "Hieronder staat een lijst met koppelingen naar andere websites die nieuwe of gebruikte boeken verkopen, en die wellicht meer informatie over het boek dat je zoekt hebben:",
+       "alllogstext": "Dit is het gecombineerde logboek van {{SITENAME}}.\nJe kunt ook kiezen voor specifieke logboeken en filteren op gebruiker (hoofdlettergevoelig) en paginanaam (hoofdlettergevoelig).",
+       "cachedspecial-viewing-cached-ttl": "Je bekijkt een cacheversie van deze pagina, die maximaal $1 oud is.",
+       "cachedspecial-viewing-cached-ts": "Je bekijkt een cacheversie van deze pagina, die mogelijk niet volledig is bijgewerkt.",
+       "mailnologintext": "Je moet [[Special:UserLogin|aangemeld]] zijn en een geldig e-mailadres in je [[Special:Preferences|voorkeuren]] vermelden om andere gebruikers te kunnen e-mailen.",
+       "emailpagetext": "Via dit formulier kan je een e-mail aan {{GENDER:$1|deze gebruiker}} verzenden.\nHet e-mailadres dat je hebt opgegeven bij [[Special:Preferences|je voorkeuren]] wordt als afzender gebruikt.\nDe ontvanger kan dus direct naar je reageren.",
+       "usermaildisabledtext": "Je kunt geen e-mail verzenden naar andere gebruikers op deze wiki",
+       "emailccsubject": "Kopie van je bericht aan $1: $2",
+       "emailsenttext": "Je e-mail is verzonden.",
+       "nowatchlist": "Je volglijst is leeg.",
+       "watchlistanontext": "Om je volglijst te bekijken of te bewerken moet je je $1.",
+       "addedwatchtext": "De pagina \"[[:$1]]\" is toegevoegd aan je [[Special:Watchlist|volglijst]].\nToekomstige bewerkingen van deze pagina en de bijbehorende overlegpagina worden op daar weergegeven.",
+       "removedwatchtext": "De pagina \"[[:$1]]\" is van [[Special:Watchlist|je volglijst]] verwijderd.",
+       "watchlist-details": "Er {{PLURAL:$1|staat één pagina|staan $1 pagina's}} op je volglijst, exclusief overlegpagina's.",
+       "wlheader-showupdated": "Pagina's die zijn bewerkt sinds je laatste bezoek worden '''vet''' weergegeven",
+       "watcherrortext": "Er is een fout opgetreden tijdens het wijzigen van je volglijstinstellingen voor \"$1\".",
+       "enotif_lastvisited": "Zie $1 voor alle wijzigingen sinds je laatste bezoek.",
+       "enotif_body": "Hoi $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nSamenvatting van de wijziging: $PAGESUMMARY $PAGEMINOREDIT\n\nContactgegevens van de auteur:\nE-mailadres: $PAGEEDITOR_EMAIL\nWiki: $PAGEEDITOR_WIKI\n\nTenzij je deze pagina bezoekt, komen er geen verdere berichten. Op je volglijst kan je voor alle gevolgde pagina's de waarschuwingsinstellingen opschonen.\n\nGroet van je {{SITENAME}}-waarschuwingssysteem.\n\n--\nJe kunt je e-mailinstellingen wijzigen op:\n{{canonicalurl:{{#special:Preferences}}}}\n\nJe kunt je volglijstinstellingen wijzigen op:\n{{canonicalurl:Special:Watchlist/edit}}\n\nJe kunt de pagina van je volglijst verwijderen via de volgende koppeling:\n$UNWATCHURL\n\nTerugkoppeling en verdere assistentie:\n$HELPPAGE",
+       "historywarning": "'''Waarschuwing:''' de pagina die je wilt verwijderen heeft ongeveer $1 {{PLURAL:$1|versie|versies}}:",
+       "confirmdeletetext": "Je staat op het punt een pagina te verwijderen, inclusief de geschiedenis.\nBevestig hieronder dat dit inderdaad je bedoeling is, dat je de gevolgen begrijpt en dat de verwijdering overeenstemt met het [[{{MediaWiki:Policy-url}}|beleid]].",
+       "sessionfailure": "Er lijkt een probleem te zijn met je aanmeldsessie.\nJe handeling is gestopt uit voorzorg tegen een beveiligingsrisico (dat bestaat uit mogelijke \"hijacking\" van deze sessie).\nGa een pagina terug, laad die pagina opnieuw en probeer het nog eens.",
+       "protect-text": "Hier kun je het beveiligingsniveau voor de pagina '''$1''' bekijken en wijzigen.",
+       "protect-locked-blocked": "Je kunt het beveiligingsniveau niet wijzigen terwijl je geblokkeerd bent.\nHier zijn de huidige instellingen voor de pagina '''$1''':",
+       "protect-locked-access": "Je hebt geen rechten om het beveiligingsniveau te wijzigen.\nDit zijn de huidige instellingen voor de pagina '''$1''':",
+       "protect-cantedit": "Je kunt het beveiligingsniveau van deze pagina niet wijzigen, omdat je geen rechten hebt om het te bewerken.",
+       "undeletehistory": "Als je een pagina terugplaatst, worden alle versies hersteld.\nAls er al een nieuwe pagina met dezelfde naam is aangemaakt sinds de pagina is verwijderd, worden de eerder verwijderde versies teruggeplaatst en blijft de huidige versie intact.",
+       "undeleterevision-missing": "Ongeldige of missende versie.\nMogelijk heb je een verkeerde koppeling of is de versie hersteld of verwijderd uit het archief.",
+       "undelete-show-file-confirm": "Weet je zeker dat je een verwijderde versie van het bestand \"<nowiki>$1</nowiki>\" van $2 om $3 wilt bekijken?",
+       "ipb-blockingself": "Je staat op het punt jezelf te blokkeren. Weet je zeker dat je dat wilt doen?",
+       "ipb-confirmhideuser": "Je staat op het punt een verborgen gebruiker te blokkeren. Hiervoor worden gebruikersnamen in alle lijsten en logboekregels verborgen. Weet je het zeker?",
+       "ipb-needreblock": "$1 is al geblokkeerd.\nWil je de instellingen wijzigen?",
+       "unblock-hideuser": "Je kunt deze gebruiker niet deblokkeren, omdat de gebruikersnaam verborgen is.",
+       "proxyblockreason": "Dit is een automatische preventieve blokkade, omdat je gebruik maakt van een open proxyserver.\nNeem contact op met je internetprovider of je helpdesk en stel die op de hoogte van dit ernstige beveiligingsprobleem.",
+       "sorbsreason": "Je IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.",
+       "sorbs_create_account_reason": "Je IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.\nJe kunt geen gebruiker registreren.",
+       "cant-see-hidden-user": "De gebruiker die je probeert te blokken is al geblokkeerd en verborgen.\nOmdat je het recht \"hideuser\" niet hebt, kun je de blokkade van de gebruiker niet bekijken of bewerken.",
+       "ipbblocked": "Je kunt geen andere gebruikers (de)blokkeren, omdat je zelf geblokkeerd bent",
+       "ipbnounblockself": "Je mag jezelf niet deblokkeren",
+       "lockdbtext": "Waarschuwing: de database blokkeren heeft tot gevolg dat geen enkele gebruiker meer in staat is pagina's te bewerken, voorkeuren te wijzigen of iets anders te doen waarvoor wijzigingen in de database nodig zijn.\nBevestig dat je deze handeling wilt uitvoeren en dat je de database vrijgeeft nadat het onderhoud is uitgevoerd.",
+       "unlockdbtext": "Na het vrijgeven van de database kunnen gebruikers weer pagina's bewerken, hun voorkeuren wijzigen of iets anders te doen waarvoor er wijzigingen in de database nodig zijn.\nBevestig dat je deze handeling wil uitvoeren.",
+       "locknoconfirm": "Je hebt je keuze niet bevestigd via het vinkvakje.",
+       "lockdbsuccesstext": "De database is afgesloten.<br />\nVergeet niet de [[Special:UnlockDB|database vrij te geven]] zodra je klaar bent met je onderhoud.",
+       "movepagetext": "Door middel van het onderstaande formulier kan je een pagina hernoemen.\nDe geschiedenis gaat mee naar de nieuwe pagina.\n* De oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\n* Koppelingen naar de oude pagina worden niet aangepast.\n* De pagina's die doorverwijzen naar de oorspronkelijke paginanaam worden automatisch bijgewerkt.\nAls je dit niet wilt, controleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\n\n'''Waarschuwing!'''\nVoor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat je die gevolgen overziet voordat je deze handeling uitvoert.",
+       "movepagetext-noredirectfixer": "Door middel van het onderstaande formulier kunt u een pagina en alle bijbehorende oude versies hernoemen.\nDe oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\nControleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\nJe kunt dus een pagina die per ongeluk is hernoemd terug hernoemen en je kunt een bestaande pagina niet overschrijven. \n\n'''Waarschuwing:''' voor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat je die gevolgen overziet voordat je deze handeling uitvoert.",
+       "movepagetalktext": "De bijbehorende overlegpagina krijgt automatisch een andere naam, '''tenzij''':\n* De overlegpagina onder de nieuwe naam al bestaat;\n* Je het onderstaande vinkje deselecteert.\n\nIn die gevallen moet je de pagina handmatig hernoemen of samenvoegen.",
+       "moveuserpage-warning": "'''Waarschuwing:''' Je gaat een gebruikerspagina hernoemen.\nHoud er rekening mee dat alleen de pagina wordt hernoemd, ''niet'' de gebruiker.",
+       "movenologintext": "Je moet [[Special:UserLogin|aangemeld]] zijn om een pagina te hernoemen.",
+       "movenotallowed": "Je hebt geen rechten om pagina's te hernoemen.",
+       "movenotallowedfile": "Je hebt geen rechten om bestanden te hernoemen.",
+       "cant-move-user-page": "Je hebt geen rechten om gebruikerspagina's te hernoemen (met uitzondering van subpagina's).",
+       "cant-move-to-user-page": "Je hebt geen rechten om een pagina naar een gebruikerspagina te hernoemen. Hernoemen naar een subpagina is wel mogelijk.",
+       "cantmove-titleprotected": "Je kunt geen pagina naar deze naam hernoemen, omdat deze naam beveiligd is tegen het aanmaken ervan.",
+       "delete_and_move_text": "==Verwijdering nodig==\nOnder de naam \"[[:$1]]\" bestaat al een pagina.\nWil je deze verwijderen om plaats te maken voor de te hernoemen pagina?",
+       "exporttext": "Je kunt de tekst en geschiedenis van een pagina of pagina's exporteren naar XML.\nDit exportbestand is daarna te importeren in een andere MediaWiki via de [[Special:Import|importpagina]].\n\nGeef in het onderstaande veld de namen van de te exporteren pagina's op, één pagina per regel, en geef aan of je alle versies met de bewerkingssamenvatting of alleen de huidige versies met de bewerkingssamenvatting wilt exporteren.\n\nIn het laatste geval kan je ook een koppeling gebruiken, bijvoorbeeld [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] voor de pagina \"[[{{MediaWiki:Mainpage}}]]\".",
+       "allmessagestext": "Hieronder staan de systeemberichten uit de MediaWiki-naamruimte.\nGa naar [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki-lokalisatie] en [//translatewiki.net translatewiki.net] als je wilt bijdragen aan de algemene vertaling voor MediaWiki.",
+       "importtext": "Gebruik de [[Special:Export|exportfunctie]] in de wiki waar de informatie vandaan komt.\nSla de uitvoer op je eigen computer op, en voeg die daarna hier toe.",
+       "import-error-edit": "De pagina \"$1\" is niet geïmporteerd omdat je niet de rechten hebt om die te bewerken.",
+       "import-error-create": "De pagina \"$1\" is niet geïmporteerd omdat je niet de rechten hebt om die aan te maken.",
+       "tooltip-pt-userpage": "Jouw gebruikerspagina",
+       "tooltip-pt-anonuserpage": "Gebruikerspagina voor je IP-adres",
+       "tooltip-pt-mytalk": "Jouw overlegpagina",
+       "tooltip-pt-watchlist": "Overzicht van pagina's die je volgt",
+       "tooltip-pt-mycontris": "Overzicht van je bijdragen",
+       "tooltip-pt-login": "Je wordt van harte uitgenodigd om je aan te melden als gebruiker, maar dit is niet verplicht",
+       "tooltip-ca-edit": "Je kunt deze pagina bewerken.\nGebruik de voorbeeldweergaveknop alvorens te bewaren.",
+       "tooltip-ca-viewsource": "Deze pagina is beveiligd.\nJe kunt wel de broncode bekijken.",
+       "tooltip-ca-nstab-special": "Dit is een speciale pagina, je kunt de pagina zelf niet bewerken",
+       "tooltip-save": "Je wijzigingen opslaan",
+       "tooltip-preview": "Een voorvertoning maken. Gebruik dit voordat je opslaat!",
+       "tooltip-watch": "Deze pagina aan je volglijst toevoegen",
+       "spamprotectiontext": "De pagina die je wilde opslaan is geblokkeerd door het spamfilter.\nMeestal wordt dit door een externe koppeling op een zwarte lijst veroorzaakt.",
+       "markedaspatrollederror-noautopatrol": "Je kunt je eigen wijzigingen niet als gecontroleerd markeren.",
+       "mediawarning": "'''Waarschuwing''': dit bestandstype bevat mogelijk programmacode die je systeem schade kan berokkenen.",
+       "confirmemail_noemail": "Je hebt geen geldig e-mailadres opgegeven in je [[Special:Preferences|gebruikersvoorkeuren]].",
+       "confirmemail_text": "{{SITENAME}} eist bevestiging van je e-mailadres voordat je de e-mailmogelijkheden kunt gebruiken.\nKlik op de onderstaande knop om een bevestigingsbericht te ontvangen.\nDit bericht bevat een koppeling met een code.\nOpen die koppeling om je e-mailadres te bevestigen.",
+       "confirmemail_pending": "Er is al een bevestigingsbericht aan je verzonden.\nAls je recentelijk je gebruiker hebt aangemaakt, wacht dan een paar minuten totdat die aankomt voordat je opnieuw een e-mail laat sturen.",
+       "confirmemail_oncreate": "Er is een bevestigingscode naar je e-mailadres verzonden.\nDeze code is niet nodig om je aan te melden, maar je dient deze wel te bevestigen voordat je de e-mailmogelijkheden van deze wiki kunt gebruiken.",
+       "confirmemail_sendfailed": "{{SITENAME}} kon je bevestigingscode niet verzenden.\nControleer je e-mailadres op ongeldige tekens.\n\nHet e-mailprogramma meldde: $1",
+       "confirmemail_needlogin": "Je moet $1 om je e-mailadres te bevestigen.",
+       "confirmemail_success": "Je e-mailadres is bevestigd.\nJe kunt jezelf nu [[Special:UserLogin|aanmelden]] en {{SITENAME}} gebruiken.",
+       "confirmemail_loggedin": "Je e-mailadres is nu bevestigd.",
+       "confirmemail_body": "Iemand, waarschijnlijk jijzelf, met het IP-adres $1,\nheeft zich met dit e-mailadres geregistreerd als gebruiker \"$2\" op {{SITENAME}}.\n\nOpen de volgende koppeling in je webbrowser om te bevestigen dat je deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} te activeren:\n\n$3\n\nAls je jezelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van je e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
+       "confirmemail_body_changed": "Iemand, waarschijnlijk jijzelf, met het IP-adres $1,\nheeft het het e-mailadres geregistreerd voor gebruiker \"$2\" op {{SITENAME}} gewijzigd naar dit e-mailadres.\n\nOpen de volgende koppeling in je webbrowser om te bevestigen dat je deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls je jezelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van je e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
+       "confirmemail_body_set": "Iemand, waarschijnlijk jij, met het IP-adres $1,\nheeft het het e-mailadres voor gebruiker \"$2\" op {{SITENAME}} ingesteld op dit e-mailadres.\n\nOpen de volgende koppeling in je webbrowser om te bevestigen dat jij deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls jij deze wijziging *niet* hebt gemaakt, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
+       "deletedwhileediting": "'''Let op''': deze pagina is verwijderd terwijl je bezig was met je bewerking!",
+       "confirmrecreate": "Nadat je begonnen bent met je wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina verwijderd met opgave van de volgende reden:\n: ''$2''\nBevestig dat je de pagina opnieuw wilt aanmaken.",
+       "confirmrecreate-noreason": "Nadat je begonnen bent met je wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina verwijderd.\nBevestig dat je de pagina opnieuw wilt aanmaken.",
+       "confirm-watch-top": "Deze pagina toevoegen aan je volglijst?",
+       "confirm-unwatch-top": "Deze pagina verwijderen uit je volglijst?",
+       "watchlistedit-normal-explain": "Hieronder worden de pagina’s op je volglijst weergegeven.\nKlik op het vierkantje ernaast en daarna op \"{{int:Watchlistedit-normal-submit}}\" om een pagina te verwijderen.\nJe kunt ook de [[Special:EditWatchlist/raw|ruwe lijst bewerken]].",
+       "watchlistedit-normal-done": "Er {{PLURAL:$1|is één pagina|zijn $1 pagina’s}} verwijderd van je volglijst:",
+       "watchlistedit-raw-explain": "Hieronder staan pagina’s op je volglijst.\nJe kunt de lijst bewerken door pagina’s te verwijderen en toe te voegen.\nEén pagina per regel.\nAls je klaar bent, klik dan op \"{{int:Watchlistedit-raw-submit}}\".\nJe kunt ook [[Special:EditWatchlist|het standaard bewerkingsscherm gebruiken]].",
+       "watchlistedit-raw-done": "Je volglijst is bijgewerkt.",
+       "version-license-info": "MediaWiki is vrije software; je kunt MediaWiki verspreiden en/of aanpassen onder de voorwaarden van de GNU General Public License zoals gepubliceerd door de Free Software Foundation; ofwel versie 2 van de Licentie, of - zo je wilt - enige latere versie.\n\nMediaWiki wordt verspreid in de hoop dat het nuttig is, maar ZONDER ENIGE GARANTIE; zonder zelfs de implicitiete garantie van VERKOOPBAARHEID of GESCHIKHEID VOOR ENIG DOEL IN HET BIJZONDER. Zie de GNU General Public License voor meer informatie.\n\nSamen met dit programma hoor je een [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van de GNU General Public License] te hebben ontvangen; zo niet, schrijf dan naar de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA of [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lees de licentie online].",
+       "compare-title-not-exists": "De titel die je hebt opgegeven bestaat niet.",
+       "compare-revision-not-exists": "De versie die je hebt opgegeven bestaat niet.",
+       "dberr-usegoogle": "Wellicht kun je in de tussentijd zoeken via Google.",
+       "htmlform-float-invalid": "De waarde die je hebt opgegeven is geen getal.",
+       "feedback-bugornote": "Als je zover bent om een technisch probleem in detail te beschrijven, [$1 rapporteer dan een bug].\nAnders kan je ook het eenvoudige formulier hieronder gebruiken.\nJe reactie wordt dan toegevoegd aan de pagina \"[$3 $2]\", samen met je gebruikersnaam en de browser die je gebruikt.",
+       "feedback-thanks": "Bedankt! Je terugkoppeling is op de pagina \"[$2 $1]\" geplaatst.",
+       "api-error-badaccess-groups": "Je mag geen bestanden uploaden in deze wiki.",
+       "api-error-empty-file": "Het bestand dat je hebt geüpload is leeg.",
+       "api-error-file-too-large": "Het bestand dat je hebt geüpload is te groot.",
+       "api-error-hookaborted": "De wijziging die je probeert te maken is afgebroken door een uitbreiding.",
+       "api-error-internal-error": "Interne fout: er is iets misgegaan tijdens het verwerken van je upload door de wiki.",
+       "api-error-mustbeloggedin": "Je moet aangemeld zijn om bestanden te kunnen uploaden.",
+       "api-error-unknown-error": "Interne fout: er is iets misgegaan tijdens het uploaden van je bestand."
 }
index 5493a0a..ad62999 100644 (file)
@@ -59,7 +59,8 @@
                        "Mar(c)",
                        "Calak",
                        "Arg",
-                       "NCoppens"
+                       "NCoppens",
+                       "Josse.Cottenier"
                ]
        },
        "tog-underline": "Koppelingen onderstrepen:",
        "otherlanguages": "In andere talen",
        "redirectedfrom": "(Doorverwezen vanaf $1)",
        "redirectpagesub": "Doorverwijspagina",
+       "redirectto": "Doorverwijzen naar:",
        "lastmodifiedat": "Deze pagina is het laatst bewerkt op $1 om $2.",
        "viewcount": "Deze pagina is {{PLURAL:$1|één keer|$1 keer}} bekeken.",
        "protectedpage": "Beveiligde pagina",
        "viewsourcetext": "U kunt de brontekst van deze pagina bekijken en kopiëren:",
        "viewyourtext": "U kunt '''uw bewerkingen''' aan de brontekst van deze pagina bekijken en kopiëren:",
        "protectedinterface": "Deze pagina bevat tekst voor berichten van de software op deze wiki en is beveiligd om misbruik te voorkomen.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen voor alle wiki's toe te voegen of te wijzigen.",
-       "editinginterface": "'''Waarschuwing:''' u bewerkt een pagina die interfacetekst voor de software bevat.\nBewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen op deze wiki.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen toe te voegen of te wijzigen voor alle wiki's.",
+       "editinginterface": "<strong>Waarschuwing:</strong> u bewerkt een pagina die interfacetekst voor de software bevat.\nBewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen op deze wiki.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen toe te voegen of te wijzigen voor alle wiki's.",
+       "translateinterface": "Om vertalingen voor alle wiki's toe te voegen of te wijzigen kunt u gebruik maken van [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki.",
        "cascadeprotected": "Deze pagina kan niet bewerkt worden, omdat die is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:\n$2",
        "namespaceprotected": "U hebt geen rechten om pagina's in de naamruimte '''$1''' te bewerken.",
        "customcssprotected": "U kunt deze CSS-pagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.",
        "virus-unknownscanner": "onbekend antivirusprogramma:",
        "logouttext": "'''U bent nu afgemeld.'''\n\nSommige pagina's kunnen blijven weergegeven alsof u nog aangemeld bent, totdat u uw browsercache leegt.",
        "welcomeuser": "Welkom, $1!",
-       "welcomecreation-msg": "Uw account is aangemaakt.\nIndien gewenst kunt u uw [[Special:Preferences|voorkeuren]] voor {{SITENAME}} aanpassen.",
+       "welcomecreation-msg": "Uw gebruiker is aangemaakt.\nIndien gewenst kunt u uw [[Special:Preferences|voorkeuren]] voor {{SITENAME}} aanpassen.",
        "yourname": "Gebruikersnaam:",
        "userlogin-yourname": "Gebruikersnaam",
        "userlogin-yourname-ph": "Geef uw gebruikersnaam op",
        "userlogin-signwithsecure": "Beveiligde verbinding gebruiken",
        "yourdomainname": "Uw domein:",
        "password-change-forbidden": "U kunt uw wachtwoord niet wijzigen in deze wiki.",
-       "externaldberror": "Er is een fout opgetreden bij het aanmelden bij de database of u hebt geen toestemming uw externe account bij te werken.",
+       "externaldberror": "Er is een fout opgetreden bij het aanmelden bij de database of u hebt geen toestemming uw externe gebruiker bij te werken.",
        "login": "Aanmelden",
        "nav-login-createaccount": "Aanmelden / registreren",
        "userlogin": "Aanmelden / registreren",
        "logout": "Afmelden",
        "userlogout": "Afmelden",
        "notloggedin": "Niet aangemeld",
-       "userlogin-noaccount": "Hebt u geen account?",
+       "userlogin-noaccount": "Hebt u geen gebruiker?",
        "userlogin-joinproject": "Word lid van {{SITENAME}}",
-       "nologin": "Hebt u geen account? $1.",
+       "nologin": "Hebt u geen gebruiker? $1.",
        "nologinlink": "Registreren",
        "createaccount": "Registreren",
-       "gotaccount": "Hebt u al een account? $1.",
+       "gotaccount": "Hebt u al een gebruiker? $1.",
        "gotaccountlink": "Aanmelden",
        "userlogin-resetlink": "Bent u uw aanmeldgegevens vergeten?",
        "userlogin-resetpassword-link": "Wachtwoord vergeten?",
        "userlogin-helplink2": "Hulp bij aanmelden",
        "userlogin-loggedin": "U bent al aangemeld als {{GENDER:$1|$1}}.\nGebruik het onderstaande formulier om aan te melden als een andere gebruiker.",
-       "userlogin-createanother": "Een andere account aanmaken",
+       "userlogin-createanother": "Een andere gebruiker aanmaken",
        "createacct-emailrequired": "E-mailadres",
        "createacct-emailoptional": "E-mailadres (optioneel)",
        "createacct-email-ph": "Geef uw e-mailadres op",
        "noname": "U hebt geen geldige gebruikersnaam opgegeven.",
        "loginsuccesstitle": "Aanmelden geslaagd",
        "loginsuccess": "'''U bent nu aangemeld bij {{SITENAME}} als \"$1\".'''",
-       "nosuchuser": "De gebruiker \"$1\" bestaat niet.\nGebruikersnamen zijn hoofdlettergevoelig.\nControleer de schrijfwijze of [[Special:UserLogin/signup|maak een nieuw account aan]].",
+       "nosuchuser": "De gebruiker \"$1\" bestaat niet.\nGebruikersnamen zijn hoofdlettergevoelig.\nControleer de schrijfwijze of [[Special:UserLogin/signup|maak een nieuw gebruiker aan]].",
        "nosuchusershort": "De gebruiker \"$1\" bestaat niet.\nControleer de schrijfwijze.",
        "nouserspecified": "Geef een gebruikersnaam op.",
        "login-userblocked": "Deze gebruiker is geblokkeerd.\nAanmelden is niet mogelijk.",
        "invalidemailaddress": "Het e-mailadres is niet aanvaard, omdat het een ongeldige opmaak heeft.\nGeef een geldig e-mailadres op of laat het veld leeg.",
        "cannotchangeemail": "Het e-mailadres voor een gebruiker kan op deze wiki niet gewijzigd worden.",
        "emaildisabled": "Deze site kan geen e-mails verzenden.",
-       "accountcreated": "Account aangemaakt",
+       "accountcreated": "Gebruiker aangemaakt",
        "accountcreatedtext": "Het gebruikersaccount voor [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|overleg]]) is aangemaakt.",
        "createaccount-title": "Gebruikers registreren voor {{SITENAME}}",
        "createaccount-text": "Iemand heeft een gebruiker op {{SITENAME}} ($4) aangemaakt met de naam \"$2\" en uw e-mailadres.\nHet wachtwoord voor \"$2\" is \"$3\".\nMeld u aan en wijzig uw wachtwoord.\n\nNegeer dit bericht als deze gebruiker zonder uw medeweten is aangemaakt.",
        "login-throttled": "U heeft recentelijk te veel mislukte aanmeldpogingen gedaan.\nWacht alstublieft $1 voordat u het opnieuw probeert.",
        "login-abort-generic": "U bent niet aangemeld. De procedure is afgebroken.",
+       "login-migrated-generic": "Uw gebruikersnaam is hernoemd, en uw gebruikersnaam bestaat niet langer op deze wiki.",
        "loginlanguagelabel": "Taal: $1",
        "suspicious-userlogout": "Uw verzoek om af te melden is genegeerd, omdat het lijkt alsof het verzoek is verzonden door een browser of cacheproxy die stuk is.",
        "createacct-another-realname-tip": "Echte naam is optioneel.\nAls u deze opgeeft, wordt deze naam gebruikt worden om u erkenning te geven voor uw werk.",
        "passwordreset-emailsent-capture": "Er is een e-mail voor het opnieuw instellen van een wachtwoord verzonden. Deze wordt hieronder weergegeven.",
        "passwordreset-emailerror-capture": "Er is een e-mail voor het opnieuw instellen van een wachtwoord aangemaakt. Deze wordt hieronder weergegeven. Het verzenden naar de {{GENDER:$2|gebruiker}} is mislukt om de volgende reden: $1",
        "changeemail": "E-mailadres wijzigen",
-       "changeemail-header": "Het e-mailadres van mijn gebruiker wijzigen",
        "changeemail-text": "Vul dit formulier in om uw e-mailadres te wijzigen. U moet uw wachtwoord invoeren om deze wijziging te bevestigen.",
        "changeemail-no-info": "U moet aangemeld zijn om rechtstreeks toegang te hebben tot deze pagina.",
        "changeemail-oldemail": "Huidig e-mailadres:",
        "changeemail-none": "(geen)",
        "changeemail-password": "Uw wachtwoord voor {{SITENAME}}:",
        "changeemail-submit": "E-mailadres wijzigen",
-       "changeemail-cancel": "Annuleren",
        "changeemail-throttled": "U heeft recentelijk te veel mislukte aanmeldpogingen gedaan.\nWacht alstublieft $1 voordat u het opnieuw probeert.",
        "resettokens": "Tokens opnieuw instellen",
        "resettokens-text": "U kunt hier tokens opnieuw instellen die toegang tot bepaalde persoonlijke gegevens die zijn gekoppeld aan uw gebruiker.\n\nDoe dit als u ze per ongeluk met iemand hebt gedeeld of als uw onbevoegden toegang hebben gekregen tot uw gebruiker.",
        "showpreview": "Bewerking ter controle bekijken",
        "showdiff": "Wijzigingen bekijken",
        "blankarticle": "<strong>Waarschuwing:</strong> de pagina die u wilt aanmaken is leeg.\nAls u opnieuw op \"{{int:savearticle}}\" klikt, wordt de pagina aangemaakt zonder enige inhoud.",
-       "anoneditwarning": "'''Waarschuwing:''' u bent niet aangemeld.\nUw IP-adres wordt opgeslagen als u wijzigingen op deze pagina maakt.",
+       "anoneditwarning": "<strong>Waarschuwing:</strong> u bent niet aangemeld.\nUw IP-adres wordt opgeslagen als u wijzigingen op deze pagina maakt. Wanneer u <strong>[$1 aanmeldt]</strong> of <strong>[$2 een gebruiker aanmaakt]</strong verschijnen uw bewerkingen onder uw gebruikersnaam, naast andere voordelen.",
        "anonpreviewwarning": "''U bent niet aangemeld.''\n''Door uw bewerking op te slaan wordt uw IP-adres opgeslagen in de paginageschiedenis.''",
        "missingsummary": "'''Let op:''' u hebt geen bewerkingssamenvatting opgegeven.\nAls u nogmaals op \"{{int:savearticle}}\" klikt wordt de bewerking zonder samenvatting opgeslagen.",
        "missingcommenttext": "Plaats uw reactie hieronder.",
        "content-model-text": "tekst zonder opmaak",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Pagina's met dubbele sjabloonparameters",
+       "duplicate-args-category-desc": "De pagina bevat aanroepen van sjablonen waarin hetzelfde argument meerdere keren wordt gebruikt, bijvoorbeeld <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> of <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Waarschuwing:''' deze pagina gebruikt te veel kostbare parserfuncties.\n\nNu {{PLURAL:$1|is|zijn}} het er $1, terwijl het er minder dan $2 {{PLURAL:$2|moet|moeten}} zijn.",
        "expensive-parserfunction-category": "Pagina's die te veel kostbare parserfuncties gebruiken",
        "post-expand-template-inclusion-warning": "Waarschuwing: de maximale transclusiegrootte voor sjablonen is overschreden.\nSommige sjablonen worden niet getranscludeerd.",
        "rev-deleted-event": "(logboekregel verwijderd)",
        "rev-deleted-user-contribs": "[gebruikersnaam of IP-adres verwijderd - bewerking verborgen in bijdragen]",
        "rev-deleted-text-permission": "Deze bewerking is '''verwijderd'''.\nEr kunnen details aanwezig zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
+       "rev-suppressed-text-permission": "Deze paginaversie is <strong>verwijderd</strong>. Details kunnen gevonden worden in [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verwijderlogboek].",
        "rev-deleted-text-unhide": "Deze paginaversie is '''verwijderd'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].\nAls u wilt kunt u [$1 deze versie bekijken].",
        "rev-suppressed-text-unhide": "Deze paginaversie is '''onderdrukt'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek onderdrukte versies].\nAls u wilt kunt u [$1 deze versie bekijken].",
        "rev-deleted-text-view": "Deze paginaversie is '''verwijderd'''.\nU kunt deze bekijken; er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
        "mergehistory-same-destination": "De bronpagina en doelpagina kunnen niet hetzelfde zijn",
        "mergehistory-reason": "Reden:",
        "mergelog": "Samenvoegingslogboek",
-       "pagemerge-logentry": "heeft [[$1]] naar [[$2]] samengevoegd (versies tot en met $3)",
        "revertmerge": "Samenvoeging ongedaan maken",
        "mergelogpagetext": "Hieronder ziet u een lijst van recente samenvoegingen van een paginageschiedenis naar een andere.",
        "history-title": "$1: versiegeschiedenis",
        "search-result-category-size": "{{PLURAL:$1|1 categorielid|$1 categorieleden}} ({{PLURAL:$2|1 ondercategorie|$2 ondercategorieën}}, {{PLURAL:$3|1 bestand|$3 bestanden}})",
        "search-redirect": "(doorverwijzing $1)",
        "search-section": "(subkop $1)",
+       "search-category": "(categorie $1)",
        "search-file-match": "(komt overeen met de inhoud van het bestand)",
        "search-suggest": "Bedoelde u: $1",
        "search-interwiki-caption": "Zusterprojecten",
        "searchall": "alle",
        "showingresults": "Hieronder {{PLURAL:$1|staat '''1''' resultaat|staan '''$1''' resultaten}} vanaf #'''$2'''.",
        "showingresultsinrange": "Hieronder {{PLURAL:$1|wordt|worden}} maximaal {{PLURAL:$1|<strong>1</strong> resultaat|<strong>$1 </strong>resultaten}} weergegeven in het bereik #<strong>$2</strong> tot #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Resultaat '''$1''' van '''$3'''|Resultaten '''$1 - $2''' van '''$3'''}} voor '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Resultaat <strong>$1</strong> van <strong>$2</strong>|Resultaten <strong>$1 - $2</strong> van de <strong>$3</strong>}}",
        "search-nonefound": "Er zijn geen resultaten voor uw zoekopdracht.",
        "powersearch-legend": "Uitgebreid zoeken",
        "powersearch-ns": "Zoeken in naamruimten:",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Verschillen",
        "prefs-help-prefershttps": "Deze voorkeur wordt toegepast bij de volgende keer aanmelden.",
-       "prefs-tabs-navigation-hint": "Tip: U kunt de pijltjestoetsen naar links en naar rechts gebruiken om te navigeren tussen de tabbladen in de lijst.",
+       "prefswarning-warning": "U heeft deze wijzigingen gemaakt in uw voorkeuren die nog niet opgeslagen zijn. Wanneer u de pagina verlaat zonder op \"$1\" te klikken zullen uw voorkeuren niet geüpdated worden.",
+       "prefs-tabs-navigation-hint": "Tip: u kunt de pijltjestoetsen naar links en naar rechts gebruiken om te navigeren tussen de tabbladen in de lijst.",
        "email-address-validity-valid": "Het e-mailadres lijkt geldig",
        "email-address-validity-invalid": "Geef een geldig e-mailadres op",
        "userrights": "Gebruikersrechtenbeheer",
        "statistics": "Statistieken",
        "statistics-header-pages": "Paginastatistieken",
        "statistics-header-edits": "Bewerkingsstatistieken",
-       "statistics-header-views": "Paginaweergavestatistieken",
        "statistics-header-users": "Gebruikersstatistieken",
        "statistics-header-hooks": "Overige statistieken",
        "statistics-articles": "Inhoudelijke pagina's",
        "statistics-files": "Bestanden",
        "statistics-edits": "Paginabewerkingen sinds het begin van {{SITENAME}}",
        "statistics-edits-average": "Gemiddeld aantal bewerkingen per pagina",
-       "statistics-views-total": "Totaal aantal weergegeven pagina's",
-       "statistics-views-total-desc": "Het bekijken van niet-bestaande pagina's en speciale pagina's is niet inbegrepen",
-       "statistics-views-peredit": "Weergegeven pagina's per bewerking",
        "statistics-users": "Geregistreerde [[Special:ListUsers|gebruikers]]",
        "statistics-users-active": "Actieve gebruikers",
        "statistics-users-active-desc": "Gebruikers die in de afgelopen {{PLURAL:$1|dag|$1 dagen}} een handeling hebben uitgevoerd",
-       "statistics-mostpopular": "Meest bekeken pagina's",
        "pageswithprop": "Pagina's met een pagina-eigenschap",
        "pageswithprop-legend": "Pagina's met een pagina-eigenschap",
        "pageswithprop-text": "Op deze pagina worden pagina's weergegeven met een bepaalde pagina-eigenschap.",
        "uncategorizedtemplates": "Niet-gecategoriseerde sjablonen",
        "unusedcategories": "Ongebruikte categorieën",
        "unusedimages": "Ongebruikte bestanden",
-       "popularpages": "Veel bekeken pagina's",
        "wantedcategories": "Niet-bestaande categorieën met de meeste koppelingen",
        "wantedpages": "Niet-bestaande pagina's met koppelingen",
        "wantedpages-badtitle": "Ongeldige paginanaam in resultaat: $1",
        "pager-older-n": "{{PLURAL:$1|1 oudere|$1 oudere}}",
        "suppress": "Toezicht",
        "querypage-disabled": "Deze speciale pagina is uitgeschakeld om performanceredenen.",
+       "apihelp": "API-hulp",
+       "apihelp-no-such-module": "Module \"$1\" niet gevonden.",
        "booksources": "Boekinformatie",
        "booksources-search-legend": "Bronnen en gegevens over een boek zoeken",
-       "booksources-go": "OK",
+       "booksources-search": "Zoeken",
        "booksources-text": "Hieronder staat een lijst met koppelingen naar andere websites die nieuwe of gebruikte boeken verkopen, en die wellicht meer informatie over het boek dat u zoekt hebben:",
        "booksources-invalid-isbn": "Het opgegeven ISBN lijkt niet geldig te zijn.\nControleer of u wellicht een fout hebt gemaakt bij de invoer.",
        "specialloguserlabel": "Uitvoerende gebruiker:",
        "linksearch-pat": "Zoekpatroon:",
        "linksearch-ns": "Naamruimte:",
        "linksearch-ok": "Zoeken",
-       "linksearch-text": "Wildcards zoals \"*.wikipedia.org\" of \"*.org\" zijn toegestaan.\nHeeft tenminste een topleveldomein nodig, zoals bijvoorbeeld \"*.org\".<br />\n{{PLURAL:$2|Ondersteund protocol|Ondersteunde protocollen}}: <code>$1</code> (wordt \"http://\"als er geen protocol wordt opgegeven).",
+       "linksearch-text": "Wildcards zoals \"*.wikipedia.org\" of \"*.org\" zijn toegestaan.\nHeeft tenminste een topleveldomein nodig, zoals bijvoorbeeld \"*.org\".<br />\n{{PLURAL:$2|Ondersteund protocol|Ondersteunde protocollen}}: <code>$1</code> (wordt \"http://\" als er geen protocol wordt opgegeven).",
        "linksearch-line": "$1 heeft een koppeling in $2",
        "linksearch-error": "Wildcards zijn alleen toegestaan aan het begin van een hostnaam.",
        "listusersfrom": "Gebruikers bekijken vanaf:",
        "wlheader-enotif": "U wordt per e-mail gewaarschuwd.",
        "wlheader-showupdated": "Pagina's die zijn bewerkt sinds uw laatste bezoek worden '''vet''' weergegeven.",
        "wlnote": "Hieronder {{PLURAL:$1|staat de laaste wijziging|staan de laatste $1 wijzigingen}} in {{PLURAL:$2|het laatste uur|de laatste $2 uur}} per $3 om $4.",
-       "wlshowlast": "Laatste $1 uur, $2 dagen bekijken ($3)",
+       "wlshowlast": "Laatste $1 uur, $2 dagen bekijken",
        "watchlist-options": "Opties voor volglijst",
        "watching": "Bezig met plaatsen op volglijst…",
        "unwatching": "Bezig met verwijderen van volglijst…",
        "protect-othertime": "Andere duur:",
        "protect-othertime-op": "andere duur",
        "protect-existing-expiry": "Bestaande vervaldatum: $2 om $3",
+       "protect-existing-expiry-infinity": "Bestaande vervaldatum: oneindig",
        "protect-otherreason": "Overige/additionele reden:",
        "protect-otherreason-op": "andere reden",
        "protect-dropdown": "*Veel voorkomende redenen voor beveiliging\n** Vandalisme\n** Spam\n** Bewerkingsoorlog\n** Preventieve beveiliging veelbezochte pagina",
        "unblocked": "Blokkade van [[User:$1|$1]] is opgeheven",
        "unblocked-range": "$1 is gedeblokkeerd",
        "unblocked-id": "Blokkade $1 is opgeheven",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] is gedeblokkeerd.",
        "blocklist": "Geblokkeerde gebruikers",
        "ipblocklist": "Geblokkeerde gebruikers",
        "ipblocklist-legend": "Een geblokkeerde gebruiker zoeken",
        "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-logout": "Afmelden",
+       "tooltip-pt-createaccount": "Registreer u vooral en meld u aan. Dit is echter niet vereist.",
        "tooltip-ca-talk": "Overleg over deze pagina",
        "tooltip-ca-edit": "U kunt deze pagina bewerken. Gebruik de knop \"Bewerking ter controle bekijken\" voordat u de pagina opslaat",
        "tooltip-ca-addsection": "Nieuw kopje toevoegen",
        "tooltip-feed-atom": "Atom-feed voor deze pagina",
        "tooltip-t-contributions": "Een lijst met bijdragen van deze gebruiker",
        "tooltip-t-emailuser": "Een e-mail naar deze gebruiker verzenden",
+       "tooltip-t-info": "Meer informatie over deze pagina",
        "tooltip-t-upload": "Bestanden uploaden",
        "tooltip-t-specialpages": "Lijst met alle speciale pagina's",
        "tooltip-t-print": "Printvriendelijke versie van deze pagina",
        "pageinfo-robot-policy": "Indexering door robots",
        "pageinfo-robot-index": "Toegestaan",
        "pageinfo-robot-noindex": "Niet toegestaan",
-       "pageinfo-views": "Aantal weergaven",
        "pageinfo-watchers": "Aantal paginavolgers",
        "pageinfo-few-watchers": "Minder dan  {{PLURAL:$1|één volger|$1 volgers}}",
        "pageinfo-redirects-name": "Aantal doorverwijzingen naar deze pagina",
        "exif-urgency-low": "Laag ($1)",
        "exif-urgency-high": "Hoog ($1)",
        "exif-urgency-other": "Door gebruiker gedefinieerde prioriteit ($1)",
-       "watchlistall2": "alles",
        "namespacesall": "alle",
        "monthsall": "alle",
        "confirmemail": "E-mailadres bevestigen",
        "unknown_extension_tag": "Onbekende tag \"$1\"",
        "duplicate-defaultsort": "'''Waarschuwing:''' de standaardsortering \"$2\" krijgt voorrang voor de sortering \"$1\".",
        "duplicate-displaytitle": "<strong>Waarschuwing:</strong>Titelweergave \"$2\" overschrijft eerdere titelweergave \"$1\".",
+       "invalid-indicator-name": "<strong>Fout:</strong> de eigenschap <code>name</code> van de paginastatusindicators mag niet leeg zijn.",
        "version": "Versie",
        "version-extensions": "Geïnstalleerde uitbreidingen",
        "version-skins": "Geïnstalleerde vormgevingen",
        "revdelete-uname-unhid": "gebruikersnaam zichtbaar gemaakt",
        "revdelete-restricted": "heeft beperkingen aan beheerders opgelegd",
        "revdelete-unrestricted": "heeft beperkingen voor beheerders opgeheven",
+       "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-move-move_redir": "$1 {{GENDER:$2|heeft}} pagina $3 hernoemd naar $4 over een doorverwijzing",
        "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-overwrite": "$1 heeft een nieuwe versie van $3 {{GENDER:$2|geupload}}",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|heeft}} een nieuwe versie van $3 geüpload",
        "logentry-upload-revert": "$1 heeft $3 {{GENDER:$2|geupload}}",
        "rightsnone": "(geen)",
+       "revdelete-summary": "bewerkingssamenvatting",
        "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:",
        "log-name-pagelang": "Logboek van taalwijzigingen",
        "log-description-pagelang": "Dit is een logboek van wijzigingen van de taal van pagina's.",
        "logentry-pagelang-pagelang": "$1 wijzigde de taal van de pagina '$3' van $4 naar $5.",
+       "default-skin-not-found": "Het standaard uiterlijk voor de wiki, dat is ingesteld in <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code>, is niet beschikbaar.\n\nUw installatie heeft de volgende uiterlijken. Zie See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Handboek: uiterlijk instellen] voor meer informatie over hoe u het uiterlijk instelt en een standaard uiterlijk aangeeft.\n\n$2\n\n; Als u MediaWiki zojuist hebt geïnstalleerd:\n: U hebt waarschijnlijk geïnstalleerd via git, or direct vanuit de broncode via een andere methode. Deze melding is verwacht. Installeer één of meer van de [https://www.mediawiki.org/wiki/Category:All_skins beschikbare uiterlijken op mediawiki.org], door:\n:* De [https://www.mediawiki.org/wiki/Download tarball te downloaden], die meerdere uiterlijken en uitbreidingen bevat. U kunt de map <code>skins/</code> daar uit kopiëren;\n:* Een van de repositories <code>mediawiki/skins/*</code> te klonen via git in de map <code dir=\"ltr\">skins/</code> van uw installatie van MediaWiki.\n: Als u dit doet en u bent MediaWikiontwikkelaar, heeft dit geen invloed op uw gitrepository.\n\n; Als u MediaWiki net hebt bijgewerkt:\n: In MediaWiki 1.24 en nieuwere versies worden geïnstalleerde uiterlijken niet langer automatisch ingeschakeld (zie [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Handboek: uiterlijken automatisch vinden]). U kunt de volgende regels kopieren naar <code>LocalSettings.php</code> om alle op dit moment geïnstalleerde uiterlijken in te schakelen:\n\n<pre dir=\"ltr\">$3</pre>\n\n; In het geval u zojuist <code>LocalSettings.php</code> hebt aangepast:\n: Controleer de namen van de uiterlijken op spelfouten.",
+       "default-skin-not-found-no-skins": "Het standaard uiterlijk voor uw wiki, als aangegeven in <code>$wgDefaultSkin</code> als <code>$1</code>, is niet beschikbaar.\n\nU hebt geen geïnstalleerde uiterlijken.\n\n; Als u MediaWiki zojuist hebt geïnstalleerd:\n: U hebt waarschijnlijk geïnstalleerd via git, or direct vanuit de broncode via een andere methode. Deze melding is verwacht. Installeer één of meer van de [https://www.mediawiki.org/wiki/Category:All_skins beschikbare uiterlijken op mediawiki.org], door:\n:* De [https://www.mediawiki.org/wiki/Download tarball te downloaden], die meerdere uiterlijken en uitbreidingen bevat. U kunt de map <code>skins/</code> daar uit kopiëren;\n:* Een van de repositories <code>mediawiki/skins/*</code> te klonen via git in de map <code dir=\"ltr\">skins/</code> van uw installatie van MediaWiki.\n: Als u dit doet en u bent MediaWikiontwikkelaar, heeft dit geen invloed op uw gitrepository.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ingeschakeld)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>uitgeschakeld</strong>)"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>uitgeschakeld</strong>)",
+       "mediastatistics": "Mediastatistieken",
+       "mediastatistics-summary": "Statistieken over geüploade bestandstypen. Dit overzicht bevat alleen de meest recente versie van een bestand. Oude of verwijderde versies worden niet meegenomen.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME-type",
+       "mediastatistics-table-extensions": "Mogelijke extensies",
+       "mediastatistics-table-count": "Aantal bestanden",
+       "mediastatistics-table-totalbytes": "Gecombineerde grootte",
+       "mediastatistics-header-unknown": "Onbekend",
+       "mediastatistics-header-bitmap": "Bitmapafbeeldingen",
+       "mediastatistics-header-drawing": "Tekeningen (vectorbestanden)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Video's",
+       "mediastatistics-header-multimedia": "Interactieve media",
+       "mediastatistics-header-office": "Kantoorbestanden",
+       "mediastatistics-header-text": "Tekstbestanden",
+       "mediastatistics-header-executable": "Uitvoerbare bestanden",
+       "mediastatistics-header-archive": "Gecomprimeerde bestanden",
+       "json-warn-trailing-comma": "Er {{PLURAL:$1|is $1 komma|zijn $1 komma's}} aan het einde van de regel verwijderd uit de JSON",
+       "json-error-unknown": "Er is een fout opgetreden met de JSON. Foutmelding: $1",
+       "json-error-depth": "De maximale stackdiepte is overschreden",
+       "json-error-state-mismatch": "Ongeldige of onjuiste JSON",
+       "json-error-ctrl-char": "Fout in controlekarakter, mogelijk verkeerd gecodeerd",
+       "json-error-syntax": "Syntaxfoutmelding",
+       "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"
 }
index 91a323d..16ff0e2 100644 (file)
        "nospecialpagetext": "Du har bede om ei spesialside som ikkje finst. Lista over spesialsider finn du [[Special:SpecialPages|her]].",
        "error": "Feil",
        "databaseerror": "Databasefeil",
-       "databaseerror-text": "Ein spørjefeil mot databasa har oppstått.\nDette kan indikere ein feil i programvara.",
+       "databaseerror-text": "Ein spørjefeil mot databasen har oppstått.\nDette kan indikere ein feil i programvara.",
        "databaseerror-error": "Feil: $1",
        "laggedslavemode": "Åtvaring: Det er mogleg at sida ikkje er heilt oppdatert.",
        "readonly": "Databasen er skriveverna",
        "passwordreset-emailsent-capture": "Eposten under er sendt ut som ei påminning.",
        "passwordreset-emailerror-capture": "Ein påminnings-e-post vart oppretta, og er vist nedanfor; men det lukkast ikkje å senda han til brukaren: $1",
        "changeemail": "↓Endre e-postadresse",
-       "changeemail-header": "↓Endre kontoen si e-postadresse",
        "changeemail-text": "↓Fyll ut dette skjemaet for å endra di e-postadresse. Du må oppgje passordet ditt for å stadfesta endringa.",
        "changeemail-no-info": "↓Du må vera pålogga for å få tilgang direkte til denne sida.",
        "changeemail-oldemail": "↓Noverande e-postadresse:",
        "changeemail-none": "↓(ingen)",
        "changeemail-password": "{{SITENAME}}-passordet ditt:",
        "changeemail-submit": "↓Endre e-post",
-       "changeemail-cancel": "↓Avbryt",
        "bold_sample": "Halvfeit skrift",
        "bold_tip": "Halvfeit skrift",
        "italic_sample": "Kursivskrift",
        "mergehistory-same-destination": "Kjelde- og målside kan ikkje vere den same.",
        "mergehistory-reason": "Årsak:",
        "mergelog": "Flettelogg",
-       "pagemerge-logentry": "fletta [[$1]] til [[$2]] (versjonar fram til $3)",
        "revertmerge": "Fjern fletting",
        "mergelogpagetext": "Nedanfor finn du ei liste over dei siste flettingane av ein sidehistorikk til ein annan.",
        "history-title": "$1: Versjonshistorikk",
        "searchrelated": "relatert",
        "searchall": "alle",
        "showingresults": "Nedanfor er opp til {{PLURAL:$1|'''eitt'''|'''$1'''}} resultat som byrjar med nummer '''$2''' vist{{PLURAL:$1||e}}.",
-       "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' av '''$3'''|Resultat '''$1 - $2''' av '''$3'''}} for '''$4'''",
        "search-nonefound": "Ingen resultat svarte til førespurnaden.",
        "powersearch-legend": "Avansert søk",
        "powersearch-ns": "Søk i namnerom:",
        "randomincategory": "Tilfeldig side frå kategori",
        "randomincategory-invalidcategory": "«$1» er ikkje eit gildt kategorinamn.",
        "randomincategory-nopages": "Det er ingen sider i kategorien [[:Category:$1|$1]].",
-       "randomincategory-selectcategory": "Hent tilfeldig side frå kategori: $1 $2.",
-       "randomincategory-selectcategory-submit": "Hent",
        "randomredirect": "Tilfeldig omdirigering",
        "randomredirect-nopages": "Det finst ingen omdirigeringar i namnerommet «$1».",
        "statistics": "Statistikk",
        "statistics-header-pages": "Sidestatistikk",
        "statistics-header-edits": "Endringsstatistikk",
-       "statistics-header-views": "Visingsstatistikk",
        "statistics-header-users": "Brukarstatistikk",
        "statistics-header-hooks": "Anna statistikk",
        "statistics-articles": "Innhaldssider",
        "statistics-files": "Opplasta filer",
        "statistics-edits": "Endringar sidan {{SITENAME}} vart oppretta",
        "statistics-edits-average": "Gjennomsnittleg tal på endringar per side",
-       "statistics-views-total": "Totalt visningstal",
-       "statistics-views-total-desc": "Visingar av sider som ikkje finst og spesialsider er ikkje tekne med",
-       "statistics-views-peredit": "Visingar per endring",
        "statistics-users": "Registrerte [[Special:ListUsers|brukarar]]",
        "statistics-users-active": "Aktive brukarar",
        "statistics-users-active-desc": "Brukarar som har utført handlingar {{PLURAL:$1|i dag|dei siste $1 dagane}}",
-       "statistics-mostpopular": "Mest viste sider",
        "pageswithprop": "Sider med ein sideeigenskap",
        "pageswithprop-legend": "Sider med ein sideeigenskap",
        "pageswithprop-text": "Denne sida listar opp sider som nyttar ein viss sideeigenskap.",
        "uncategorizedtemplates": "Ukategoriserte malar",
        "unusedcategories": "Ubrukte kategoriar",
        "unusedimages": "Ubrukte filer",
-       "popularpages": "Populære sider",
        "wantedcategories": "Etterspurde kategoriar",
        "wantedpages": "Etterspurde sider",
        "wantedpages-badtitle": "Ugyldig tittel mellom resultata: $1",
        "querypage-disabled": "Spesialsida er slegen av for skuld yting.",
        "booksources": "Bokkjelder",
        "booksources-search-legend": "Søk etter bokkjelder",
-       "booksources-go": "Gå",
        "booksources-text": "Nedanfor finn du ei liste over lenkjer til andre nettstader som sel nye og brukte bøker, og desse kan ha meir informasjon om bøker du leitar etter:",
        "booksources-invalid-isbn": "Det oppgjevne ISBN-nummeret er ugyldig; sjekk med kjelda di om du har oppgjeve det rett.",
        "specialloguserlabel": "Utøvar:",
        "wlheader-enotif": "Funksjonen for endringsmeldingar per e-post er på.",
        "wlheader-showupdated": "Sider som har vorte endra sidan du sist såg på dei er '''utheva'''",
        "wlnote": "Nedanfor er {{PLURAL:$1|den siste endringa|dei siste '''$1''' endringane}} {{PLURAL:$2|den siste timen|dei siste '''$2''' timane}}, for $3, kl. $4.",
-       "wlshowlast": "Vis siste $1 timane $2 dagane $3",
+       "wlshowlast": "Vis siste $1 timane $2 dagane",
        "watchlist-options": "Alternativ for overvakingslista",
        "watching": "Overvakar...",
        "unwatching": "Fjernar frå overvakinglista...",
        "sp-contributions-search": "Søk etter bidrag",
        "sp-contributions-username": "IP-adresse eller brukarnamn:",
        "sp-contributions-toponly": "Vis berre endringar som er gjeldande versjonar",
+       "sp-contributions-newonly": "Berre vis endringar som oppretta ei side",
        "sp-contributions-submit": "Søk",
        "whatlinkshere": "Lenkjer hit",
        "whatlinkshere-title": "Sider som har lenkje til «$1»",
        "whatlinkshere-filters": "Filter",
        "autoblockid": "Autoblokker #$1",
        "block": "Blokker brukar",
-       "unblock": "Opphev blokkeringa av brukaren",
+       "unblock": "Opphev blokkering av brukar",
        "blockip": "Blokker brukar",
        "blockip-legend": "Blokker brukar",
        "blockiptext": "Bruk skjemaet nedanfor for å blokkere skrivetilgangen frå ei spesifikk IP-adresse eller brukarnamn. Dette bør berre gjerast for å hindre hærverk, og i samsvar med [[{{MediaWiki:Policy-url}}|retningslinene]].",
        "import": "Importer sider",
        "importinterwiki": "Transwikiimport",
        "import-interwiki-text": "Vel ei wiki og ei side å importere. Endringssdatoer og brukarar som har medverka vert bevart. Alle transwiki-importeringar vert vist i [[Special:Log/import|importloggen]].",
-       "import-interwiki-source": "Kjeldewiki/sida:",
        "import-interwiki-history": "Kopier all historikken for denne sida",
        "import-interwiki-templates": "Inkluder alle malar",
        "import-interwiki-submit": "Importer",
        "pageinfo-robot-policy": "Botindeksering",
        "pageinfo-robot-index": "Tillate",
        "pageinfo-robot-noindex": "Ikkje tillate",
-       "pageinfo-views": "Tal på visningar",
        "pageinfo-watchers": "Tal på overvakarar av sida",
        "pageinfo-few-watchers": "Færre enn $1 {{PLURAL:$1|som overvakar}}",
        "pageinfo-redirects-name": "Tal på omdirigeringar til sida",
        "exif-urgency-low": "Låg ($1)",
        "exif-urgency-high": "Høg ($1)",
        "exif-urgency-other": "Brukardefinert prioritet ($1)",
-       "watchlistall2": "alle",
        "namespacesall": "alle",
        "monthsall": "alle",
        "confirmemail": "Stadfest e-postadresse",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|endra}} gruppemedlemskap for $3",
        "logentry-rights-autopromote": "$1 vart automatisk {{GENDER:$2|forfremja}} frå $4 til $5",
        "rightsnone": "(ingen)",
+       "revdelete-summary": "Samandrag",
        "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:",
index c516f05..7b3241a 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "BRG (on nov.wikipedia.org)",
-            "Chrisportelli",
-            "MF-Warburg",
-            "Malafaya",
-            "Nov ialiste",
-            "Wayne (on nov.wikipedia.org)"
-        ]
-    },
-    "sunday": "sundie",
-    "monday": "lundie",
-    "tuesday": "mardie",
-    "wednesday": "merkurdie",
-    "thursday": "jodie",
-    "friday": "venerdie",
-    "saturday": "saturdie",
-    "sun": "sun",
-    "mon": "lun",
-    "tue": "mar",
-    "wed": "mer",
-    "thu": "jod",
-    "fri": "ven",
-    "sat": "sat",
-    "january": "januare",
-    "february": "februare",
-    "march": "marte",
-    "april": "aprile",
-    "may_long": "maye",
-    "june": "june",
-    "july": "julie",
-    "august": "auguste",
-    "september": "septembre",
-    "october": "oktobre",
-    "november": "novembre",
-    "december": "desembre",
-    "january-gen": "de januare",
-    "february-gen": "de februare",
-    "march-gen": "de marte",
-    "april-gen": "de aprile",
-    "may-gen": "de maye",
-    "june-gen": "de june",
-    "july-gen": "de julie",
-    "august-gen": "de auguste",
-    "september-gen": "de septembre",
-    "october-gen": "de oktobre",
-    "november-gen": "de novembre",
-    "december-gen": "de desembre",
-    "jan": "jan",
-    "feb": "feb",
-    "mar": "mar",
-    "apr": "apr",
-    "may": "maye",
-    "jun": "jun",
-    "jul": "jul",
-    "aug": "aug",
-    "sep": "sep",
-    "oct": "okt",
-    "nov": "nov",
-    "dec": "des",
-    "pagecategories": "{{PLURAL:$1|Kategorie|Kategories}}",
-    "category_header": "Artikles in kategorie \"$1\"",
-    "subcategories": "Subkategories",
-    "about": "Pri",
-    "article": "Pagine de kontenaje",
-    "newwindow": "(aperta in novi fenestre)",
-    "cancel": "Nihilisa",
-    "moredotdotdot": "Plu...",
-    "mypage": "Men pagine",
-    "mytalk": "Men parla-pagine",
-    "anontalk": "Parlo por disi IP",
-    "navigation": "Navigatione",
-    "and": "&#32;e",
-    "qbfind": "Trova",
-    "qbedit": "Modifika",
-    "qbpageoptions": "Disi pagine",
-    "qbmyoptions": "Men pagines",
-    "vector-action-delete": "Ekarta",
-    "vector-view-edit": "Modifika",
-    "vector-view-view": "Lekte",
-    "returnto": "Rivada a $1.",
-    "tagline": "Fro {{SITENAME}}",
-    "help": "Helpo",
-    "search": "Sercha",
-    "searchbutton": "Sercha",
-    "go": "Vada",
-    "searcharticle": "Vada",
-    "history": "Historie del pagine",
-    "history_short": "Historie",
-    "printableversion": "Printindi versione",
-    "permalink": "Permananti linke",
-    "print": "Printa",
-    "edit": "Immodifika",
-    "editthispage": "Modifika disi pagine",
-    "delete": "Ekarta",
-    "deletethispage": "Ekarta disi pagine",
-    "protect": "Protekte",
-    "protectthispage": "Protekte disi pagine",
-    "newpage": "Novi pagine",
-    "talkpage": "Diskuse disi pagine",
-    "talkpagelinktext": "Diskusione",
-    "specialpage": "Spesial Pagine",
-    "articlepage": "Regarda pagine de kontenaje",
-    "talk": "Diskusione",
-    "toolbox": "Utensiles",
-    "userpage": "Vida useren pagine",
-    "imagepage": "Regarda imajal pagine",
-    "mediawikipage": "Regarda mesajal pagine",
-    "templatepage": "Vida shablonal pagine",
-    "categorypage": "Regarda kategorial pagine",
-    "otherlanguages": "Altri lingues",
-    "lastmodifiedat": "Disi pagine blid lastim modifika: $2 ye $1.",
-    "jumptonavigation": "navigatione",
-    "jumptosearch": "sercha",
-    "aboutsite": "Pri {{SITENAME}}",
-    "aboutpage": "Project:Pri",
-    "currentevents": "Nuni eventes",
-    "currentevents-url": "Project:Nuni eventes",
-    "edithelp": "Helpo pri modifiko de pagines",
-    "mainpage": "Chefi pagine",
-    "mainpage-description": "Chefi pagine",
-    "portal": "Li komun chambre",
-    "portal-url": "Project:Li komun chambre",
-    "badaccess": "Permisione erore",
-    "youhavenewmessages": "Vu have $1 ($2).",
-    "youhavenewmessagesmulti": "Vu have novi mesajes pri $1",
-    "editsection": "modifika",
-    "editold": "modifika",
-    "editlink": "modifika",
-    "restorelink": "{{PLURAL:$1|unu ekartati modifiko|$1 ekartati modifikos}}",
-    "red-link-title": "$1 (pagine non exista)",
-    "nstab-main": "Artikle",
-    "nstab-user": "Useren pagine",
-    "nstab-special": "Spesial pagine",
-    "nstab-project": "Projetal pagine",
-    "nstab-mediawiki": "Mesaje",
-    "nstab-template": "Shablone",
-    "nstab-help": "Helpo-pagine",
-    "nstab-category": "Kategorie",
-    "error": "Erore",
-    "badtitle": "Mali title",
-    "badtitletext": "Li pregati pagine esed non-valid, vakui, o non-korektim linkat inter-lingue o inter-wiki title. Lu povud kontena un o plusi karakteres kel on non pove usa in titles.",
-    "logouttext": "'''Vu es nun eksignatat.'''\n\nVu pove kontinua usa {{SITENAME}} anonimim, o vu pove riensignata kom li sami o altri usere.",
-    "yourname": "Usere-nome:",
-    "yourpassword": "Pasa-vorde:",
-    "remembermypassword": "Memora men pasa-vorde (kun kuke) (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "login": "Ensignata",
-    "loginprompt": "Vu mus lasa cookies de ensignata en {{SITENAME}}.",
-    "userlogin": "Ensignata / krea usere-registre",
-    "logout": "Eksignata",
-    "userlogout": "Eksignata",
-    "notloggedin": "Non ensignatat",
-    "nologin": "Ob vu non have registre? '''$1'''.",
-    "nologinlink": "Krea usere-registre",
-    "gotaccountlink": "Ensignata",
-    "loginerror": "Erore de ensignato",
-    "loginsuccesstitle": "Ensignato suksesosi",
-    "loginsuccess": "'''Vu es nun ensignatat a {{SITENAME}} nomisat \"$1\".'''",
-    "mailmypassword": "E-posta men pasa-vorde",
-    "acct_creation_throttle_hit": "Visitors to this wiki using your IP address have created {{PLURAL:$1|1 account|$1 accounts}} in the last day, which is the maximum allowed in this time period.\nAs a result, visitors using this IP address cannot create any more accounts at the moment.",
-    "accountcreated": "Registre kreat",
-    "accountcreatedtext": "Li usere-registre por $1 ha bli krea.",
-    "bold_sample": "Diki texte",
-    "image_sample": "Exemple.jpg",
-    "summary": "Resume:",
-    "minoredit": "Dise es mikri modifiko",
-    "watchthis": "Observa disi pagine",
-    "savearticle": "Spara pagine",
-    "showpreview": "Montra previdatu",
-    "showdiff": "Montra chanjos",
-    "loginreqtitle": "Ensignato Postulat",
-    "loginreqlink": "ensignata",
-    "accmailtitle": "Pasa-vorde sendat.",
-    "accmailtext": "Li pasa-vorde por \"$1\" ha bli senda a $2.",
-    "yourtext": "Vun texte",
-    "currentrev": "Nuni revisione",
-    "currentrevisionlink": "Nuni revisione",
-    "histfirst": "Maxim frui",
-    "histlast": "Maxim resenti",
-    "history-feed-title": "Historie de revisiones",
-    "history-feed-description": "Historie de revisiones de disi pagine sur li wiki",
-    "history-feed-empty": "Li petit pagine non exista.\nForsan lu ha bli ekarta fro li wiki, o rinomat.\nProba [[Special:Search|sercho sur li wiki]] por relatet pagines.",
-    "lineno": "Linie $1:",
-    "compareselectedversions": "Kompara selektet versiones",
-    "searchresults": "Resultes de sercho",
-    "prevn": "lasti {{PLURAL:$1|$1}}",
-    "nextn": "sekuenti {{PLURAL:$1|$1}}",
-    "viewprevnext": "Vida ($1 {{int:pipe-separator}} $2) ($3).",
-    "search-result-size": "$1 ({{PLURAL:$2|1 vorde|$2 vordes}})",
-    "showingresults": "Montrant subu {{PLURAL:$1|'''1''' resulte|'''$1''' resultes}} amaxim komensant fro #'''$2'''.",
-    "showingresultsnum": "Montrant subu {{PLURAL:$3|'''1''' result|'''$3''' results}} komensant fro #'''$2'''.",
-    "preferences": "Preferos",
-    "mypreferences": "Men preferos",
-    "prefs-rc": "Resenti chanjos",
-    "searchresultshead": "Sercha",
-    "timezoneregion-africa": "Afrika",
-    "nchanges": "$1 {{PLURAL:$1|chanjo|chanjos}}",
-    "recentchanges": "Resenti chanjos",
-    "rcshowhideminor": "$1 minori modifikos",
-    "rcshowhideanons": "$1 anonimi useres",
-    "rcshowhidemine": "$1 men modifikos",
-    "rclinks": "Montra lasti $1 chanjes in lasti $2 dies<br />$3",
-    "hist": "hist",
-    "hide": "Kasha",
-    "show": "Montra",
-    "minoreditletter": "m",
-    "newpageletter": "N",
-    "recentchangeslinked": "Afini chanjos",
-    "recentchangeslinked-feed": "Afini chanjos",
-    "recentchangeslinked-toolbox": "Afini chanjos",
-    "upload": "Enporta",
-    "uploadnologin": "Non ensignatat",
-    "filedesc": "Resume",
-    "fileuploadsummary": "Resume:",
-    "watchthisupload": "Observa disi pagine",
-    "listfiles_search_for": "Sercha imaje nome:",
-    "listfiles_name": "Nome",
-    "listfiles_user": "Usere",
-    "listfiles_size": "Grandeso (bites)",
-    "listfiles_description": "Deskriptione",
-    "filehist-user": "Usere",
-    "imagelinks": "Linkes",
-    "randompage": "Arbitriari pagine",
-    "brokenredirects": "Rupteti ri-adresos",
-    "brokenredirectstext": "Li sekuenti ri-adresos linka a non-existanti pagines:",
-    "brokenredirects-edit": "editja",
-    "fewestrevisions": "Artikles kun minim multi revisiones",
-    "ncategories": "$1 {{PLURAL:$1|kategorie|kategories}}",
-    "lonelypages": "Pagines kel non bli kupla",
-    "lonelypagestext": "Disi pagines non es kuplat fro altri pagines in {{SITENAME}}.",
-    "uncategorizedpages": "Pagines sin kategorie",
-    "uncategorizedcategories": "Kategories sin kategorie",
-    "uncategorizedimages": "Imajes sin kategorie",
-    "popularpages": "Popular pagines",
-    "mostcategories": "Artikles kun maxim multi kategories",
-    "mostrevisions": "Artikles kun maxim multi revisiones",
-    "shortpages": "Kurti pagines",
-    "longpages": "Longi pagines",
-    "deadendpages": "Pagines sin kuplures",
-    "listusers": "Liste de useres",
-    "newpages": "Novi pagines",
-    "ancientpages": "Maxim ansieni pagines",
-    "move": "Mova",
-    "movethispage": "Mova (rinomisa) disi pagine",
-    "booksources": "Libral fontes",
-    "booksources-search-legend": "Sercha libral fontes",
-    "booksources-go": "Vada",
-    "specialloguserlabel": "Usere:",
-    "allpages": "Omni pagines",
-    "alphaindexline": "$1 a $2",
-    "allarticles": "Omni artikles",
-    "allinnamespace": "Omni pagines ($1 nome-spatie)",
-    "allpagessubmit": "Vada",
-    "categories": "Kategories",
-    "categoriespagetext": "Li sekuenti {{PLURAL:$1|kategorie|kategories}} exista in li wiki.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
-    "linksearch-ok": "Sercha",
-    "watchlist": "Men liste de observos",
-    "mywatchlist": "Men liste de observos",
-    "nowatchlist": "Vu have nuli koses in vun liste de observos.",
-    "watchnologin": "Non ensignatat",
-    "addedwatchtext": "Li pagine \"[[:$1]]\" ha bli adi a vun [[Special:Watchlist|observa-liste]].\nFuturi chanjos a disi pagine e lun asosiati Parla-pagine sal bli lista tilok, e li pagine sal apari '''diki''' in li [[Special:RecentChanges|liste de resenti chanjos]] por ke on trova lu plu fasilim.\n\nSi vu voli plu tardim ekarta li pagine fro vun observa-liste, klikta \"Desobserva\" in li lateral kolumne.",
-    "watch": "Observa",
-    "watchthispage": "Observa disi pagine",
-    "unwatch": "Desobserva",
-    "unwatchthispage": "Des-observa disi pagine",
-    "enotif_lastvisited": "Regarda $1 por vida omni chanjes depos vun lasti visite.",
-    "changed": "chanjati",
-    "confirm": "Konfirma",
-    "excontent": "kontenaje esed: '$1'",
-    "excontentauthor": "kontenaje esed: '$1' (e li soli kontribuere esed '[[Special:Contributions/$2|$2]]')",
-    "exblank": "pagine esed vakui",
-    "actioncomplete": "Akto kompleti",
-    "dellogpage": "Loge de ekartos",
-    "dellogpagetext": "Subu es liste del maxim resenti ekartos.",
-    "deletionlog": "registre de ekartos",
-    "deletecomment": "Resone:",
-    "revertpage": "Riverted modifikos da [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]); restaurad lasti versione da [[User:$1|$1]]",
-    "prot_1movedto2": "[[$1]] movat a [[$2]]",
-    "protect-legend": "Konfirma protektione",
-    "protect-level-sysop": "Sisopes nur",
-    "blanknamespace": "(Chefi)",
-    "contributions": "Useren kontributiones",
-    "mycontris": "Men kontributiones",
-    "sp-contributions-newbies": "Montra kontributiones nur de novi useres",
-    "sp-contributions-talk": "Diskusione",
-    "sp-contributions-search": "Sercha kontributiones",
-    "sp-contributions-submit": "Sercha",
-    "whatlinkshere": "Tum kel kupla hir",
-    "whatlinkshere-page": "Pagine:",
-    "whatlinkshere-links": "← linkes",
-    "ipbreason": "Resone:",
-    "badipaddress": "Non-valid IP adrese",
-    "contribslink": "Kontributiones",
-    "movearticle": "Mova pagine",
-    "move-watch": "Observa disi pagine",
-    "movereason": "Resone:",
-    "delete_and_move": "Ekarta e mova",
-    "delete_and_move_confirm": "Yes, ekarta li pagine",
-    "delete_and_move_reason": "Ekartat por fa spatie por movo \"[[$1]]\"",
-    "allmessages": "Sisteme mesajes",
-    "allmessagesname": "Nome",
-    "allmessagesdefault": "Non-spesifikati texte",
-    "allmessagescurrent": "Nuni texte",
-    "allmessagestext": "Dise es liste de sistemen mesajes obtenabli in li MediaWiki nomal spatie.",
-    "tooltip-pt-mytalk": "Vun parla-pagine",
-    "tooltip-pt-preferences": "Men preferos",
-    "tooltip-pt-logout": "Eksignata",
-    "tooltip-p-logo": "Chefi pagine",
-    "ilsubmit": "Sercha",
-    "bydate": "segun date",
-    "exif-imagewidth": "Larjeso",
-    "exif-imagelength": "Alteso",
-    "exif-imagedescription": "Title de imaje",
-    "exif-imageuniqueid": "Unik imaje ID",
-    "autosumm-replace": "Remplasant pagine kun '$1'",
-    "autoredircomment": "Ri-adresant a [[$1]]",
-    "autosumm-new": "Novi pagine: $1",
-    "version": "Versione",
-    "version-specialpages": "Spesial pagines",
-    "version-software-version": "Versione",
-    "specialpages": "Spesial pagines"
+       "@metadata": {
+               "authors": [
+                       "BRG (on nov.wikipedia.org)",
+                       "Chrisportelli",
+                       "MF-Warburg",
+                       "Malafaya",
+                       "Nov ialiste",
+                       "Wayne (on nov.wikipedia.org)"
+               ]
+       },
+       "sunday": "sundie",
+       "monday": "lundie",
+       "tuesday": "mardie",
+       "wednesday": "merkurdie",
+       "thursday": "jodie",
+       "friday": "venerdie",
+       "saturday": "saturdie",
+       "sun": "sun",
+       "mon": "lun",
+       "tue": "mar",
+       "wed": "mer",
+       "thu": "jod",
+       "fri": "ven",
+       "sat": "sat",
+       "january": "januare",
+       "february": "februare",
+       "march": "marte",
+       "april": "aprile",
+       "may_long": "maye",
+       "june": "june",
+       "july": "julie",
+       "august": "auguste",
+       "september": "septembre",
+       "october": "oktobre",
+       "november": "novembre",
+       "december": "desembre",
+       "january-gen": "de januare",
+       "february-gen": "de februare",
+       "march-gen": "de marte",
+       "april-gen": "de aprile",
+       "may-gen": "de maye",
+       "june-gen": "de june",
+       "july-gen": "de julie",
+       "august-gen": "de auguste",
+       "september-gen": "de septembre",
+       "october-gen": "de oktobre",
+       "november-gen": "de novembre",
+       "december-gen": "de desembre",
+       "jan": "jan",
+       "feb": "feb",
+       "mar": "mar",
+       "apr": "apr",
+       "may": "maye",
+       "jun": "jun",
+       "jul": "jul",
+       "aug": "aug",
+       "sep": "sep",
+       "oct": "okt",
+       "nov": "nov",
+       "dec": "des",
+       "pagecategories": "{{PLURAL:$1|Kategorie|Kategories}}",
+       "category_header": "Artikles in kategorie \"$1\"",
+       "subcategories": "Subkategories",
+       "about": "Pri",
+       "article": "Pagine de kontenaje",
+       "newwindow": "(aperta in novi fenestre)",
+       "cancel": "Nihilisa",
+       "moredotdotdot": "Plu...",
+       "mypage": "Men pagine",
+       "mytalk": "Men parla-pagine",
+       "anontalk": "Parlo por disi IP",
+       "navigation": "Navigatione",
+       "and": "&#32;e",
+       "qbfind": "Trova",
+       "qbedit": "Modifika",
+       "qbpageoptions": "Disi pagine",
+       "qbmyoptions": "Men pagines",
+       "returnto": "Rivada a $1.",
+       "tagline": "Fro {{SITENAME}}",
+       "help": "Helpo",
+       "search": "Sercha",
+       "searchbutton": "Sercha",
+       "go": "Vada",
+       "searcharticle": "Vada",
+       "history": "Historie del pagine",
+       "history_short": "Historie",
+       "printableversion": "Printindi versione",
+       "permalink": "Permananti linke",
+       "print": "Printa",
+       "edit": "Immodifika",
+       "editthispage": "Modifika disi pagine",
+       "delete": "Ekarta",
+       "deletethispage": "Ekarta disi pagine",
+       "protect": "Protekte",
+       "protectthispage": "Protekte disi pagine",
+       "newpage": "Novi pagine",
+       "talkpage": "Diskuse disi pagine",
+       "talkpagelinktext": "Diskusione",
+       "specialpage": "Spesial Pagine",
+       "articlepage": "Regarda pagine de kontenaje",
+       "talk": "Diskusione",
+       "toolbox": "Utensiles",
+       "userpage": "Vida useren pagine",
+       "imagepage": "Regarda imajal pagine",
+       "mediawikipage": "Regarda mesajal pagine",
+       "templatepage": "Vida shablonal pagine",
+       "categorypage": "Regarda kategorial pagine",
+       "otherlanguages": "Altri lingues",
+       "lastmodifiedat": "Disi pagine blid lastim modifika: $2 ye $1.",
+       "jumptonavigation": "navigatione",
+       "jumptosearch": "sercha",
+       "aboutsite": "Pri {{SITENAME}}",
+       "aboutpage": "Project:Pri",
+       "currentevents": "Nuni eventes",
+       "currentevents-url": "Project:Nuni eventes",
+       "edithelp": "Helpo pri modifiko de pagines",
+       "mainpage": "Chefi pagine",
+       "mainpage-description": "Chefi pagine",
+       "portal": "Li komun chambre",
+       "portal-url": "Project:Li komun chambre",
+       "badaccess": "Permisione erore",
+       "youhavenewmessages": "Vu have $1 ($2).",
+       "youhavenewmessagesmulti": "Vu have novi mesajes pri $1",
+       "editsection": "modifika",
+       "editold": "modifika",
+       "editlink": "modifika",
+       "restorelink": "{{PLURAL:$1|unu ekartati modifiko|$1 ekartati modifikos}}",
+       "red-link-title": "$1 (pagine non exista)",
+       "nstab-main": "Artikle",
+       "nstab-user": "Useren pagine",
+       "nstab-special": "Spesial pagine",
+       "nstab-project": "Projetal pagine",
+       "nstab-mediawiki": "Mesaje",
+       "nstab-template": "Shablone",
+       "nstab-help": "Helpo-pagine",
+       "nstab-category": "Kategorie",
+       "error": "Erore",
+       "badtitle": "Mali title",
+       "badtitletext": "Li pregati pagine esed non-valid, vakui, o non-korektim linkat inter-lingue o inter-wiki title. Lu povud kontena un o plusi karakteres kel on non pove usa in titles.",
+       "logouttext": "'''Vu es nun eksignatat.'''\n\nVu pove kontinua usa {{SITENAME}} anonimim, o vu pove riensignata kom li sami o altri usere.",
+       "yourname": "Usere-nome:",
+       "yourpassword": "Pasa-vorde:",
+       "remembermypassword": "Memora men pasa-vorde (kun kuke) (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "login": "Ensignata",
+       "userlogin": "Ensignata / krea usere-registre",
+       "logout": "Eksignata",
+       "userlogout": "Eksignata",
+       "notloggedin": "Non ensignatat",
+       "nologin": "Ob vu non have registre? '''$1'''.",
+       "nologinlink": "Krea usere-registre",
+       "gotaccountlink": "Ensignata",
+       "loginerror": "Erore de ensignato",
+       "loginsuccesstitle": "Ensignato suksesosi",
+       "loginsuccess": "'''Vu es nun ensignatat a {{SITENAME}} nomisat \"$1\".'''",
+       "mailmypassword": "E-posta men pasa-vorde",
+       "acct_creation_throttle_hit": "Visitors to this wiki using your IP address have created {{PLURAL:$1|1 account|$1 accounts}} in the last day, which is the maximum allowed in this time period.\nAs a result, visitors using this IP address cannot create any more accounts at the moment.",
+       "accountcreated": "Registre kreat",
+       "accountcreatedtext": "Li usere-registre por $1 ha bli krea.",
+       "bold_sample": "Diki texte",
+       "image_sample": "Exemple.jpg",
+       "summary": "Resume:",
+       "minoredit": "Dise es mikri modifiko",
+       "watchthis": "Observa disi pagine",
+       "savearticle": "Spara pagine",
+       "showpreview": "Montra previdatu",
+       "showdiff": "Montra chanjos",
+       "loginreqtitle": "Ensignato Postulat",
+       "loginreqlink": "ensignata",
+       "accmailtitle": "Pasa-vorde sendat.",
+       "accmailtext": "Li pasa-vorde por \"$1\" ha bli senda a $2.",
+       "yourtext": "Vun texte",
+       "currentrev": "Nuni revisione",
+       "currentrevisionlink": "Nuni revisione",
+       "histfirst": "Maxim frui",
+       "histlast": "Maxim resenti",
+       "history-feed-title": "Historie de revisiones",
+       "history-feed-description": "Historie de revisiones de disi pagine sur li wiki",
+       "history-feed-empty": "Li petit pagine non exista.\nForsan lu ha bli ekarta fro li wiki, o rinomat.\nProba [[Special:Search|sercho sur li wiki]] por relatet pagines.",
+       "lineno": "Linie $1:",
+       "compareselectedversions": "Kompara selektet versiones",
+       "searchresults": "Resultes de sercho",
+       "prevn": "lasti {{PLURAL:$1|$1}}",
+       "nextn": "sekuenti {{PLURAL:$1|$1}}",
+       "viewprevnext": "Vida ($1 {{int:pipe-separator}} $2) ($3).",
+       "search-result-size": "$1 ({{PLURAL:$2|1 vorde|$2 vordes}})",
+       "showingresults": "Montrant subu {{PLURAL:$1|'''1''' resulte|'''$1''' resultes}} amaxim komensant fro #'''$2'''.",
+       "preferences": "Preferos",
+       "mypreferences": "Men preferos",
+       "prefs-rc": "Resenti chanjos",
+       "searchresultshead": "Sercha",
+       "timezoneregion-africa": "Afrika",
+       "nchanges": "$1 {{PLURAL:$1|chanjo|chanjos}}",
+       "recentchanges": "Resenti chanjos",
+       "rcshowhideminor": "$1 minori modifikos",
+       "rcshowhideanons": "$1 anonimi useres",
+       "rcshowhidemine": "$1 men modifikos",
+       "rclinks": "Montra lasti $1 chanjes in lasti $2 dies<br />$3",
+       "hist": "hist",
+       "hide": "Kasha",
+       "show": "Montra",
+       "minoreditletter": "m",
+       "newpageletter": "N",
+       "recentchangeslinked": "Afini chanjos",
+       "recentchangeslinked-feed": "Afini chanjos",
+       "recentchangeslinked-toolbox": "Afini chanjos",
+       "upload": "Enporta",
+       "uploadnologin": "Non ensignatat",
+       "filedesc": "Resume",
+       "fileuploadsummary": "Resume:",
+       "watchthisupload": "Observa disi pagine",
+       "listfiles_search_for": "Sercha imaje nome:",
+       "listfiles_name": "Nome",
+       "listfiles_user": "Usere",
+       "listfiles_size": "Grandeso (bites)",
+       "listfiles_description": "Deskriptione",
+       "filehist-user": "Usere",
+       "imagelinks": "Linkes",
+       "randompage": "Arbitriari pagine",
+       "brokenredirects": "Rupteti ri-adresos",
+       "brokenredirectstext": "Li sekuenti ri-adresos linka a non-existanti pagines:",
+       "brokenredirects-edit": "editja",
+       "fewestrevisions": "Artikles kun minim multi revisiones",
+       "ncategories": "$1 {{PLURAL:$1|kategorie|kategories}}",
+       "lonelypages": "Pagines kel non bli kupla",
+       "lonelypagestext": "Disi pagines non es kuplat fro altri pagines in {{SITENAME}}.",
+       "uncategorizedpages": "Pagines sin kategorie",
+       "uncategorizedcategories": "Kategories sin kategorie",
+       "uncategorizedimages": "Imajes sin kategorie",
+       "mostcategories": "Artikles kun maxim multi kategories",
+       "mostrevisions": "Artikles kun maxim multi revisiones",
+       "shortpages": "Kurti pagines",
+       "longpages": "Longi pagines",
+       "deadendpages": "Pagines sin kuplures",
+       "listusers": "Liste de useres",
+       "newpages": "Novi pagines",
+       "ancientpages": "Maxim ansieni pagines",
+       "move": "Mova",
+       "movethispage": "Mova (rinomisa) disi pagine",
+       "booksources": "Libral fontes",
+       "booksources-search-legend": "Sercha libral fontes",
+       "specialloguserlabel": "Usere:",
+       "allpages": "Omni pagines",
+       "allarticles": "Omni artikles",
+       "allinnamespace": "Omni pagines ($1 nome-spatie)",
+       "allpagessubmit": "Vada",
+       "categories": "Kategories",
+       "categoriespagetext": "Li sekuenti {{PLURAL:$1|kategorie|kategories}} exista in li wiki.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
+       "linksearch-ok": "Sercha",
+       "watchlist": "Men liste de observos",
+       "mywatchlist": "Men liste de observos",
+       "nowatchlist": "Vu have nuli koses in vun liste de observos.",
+       "watchnologin": "Non ensignatat",
+       "addedwatchtext": "Li pagine \"[[:$1]]\" ha bli adi a vun [[Special:Watchlist|observa-liste]].\nFuturi chanjos a disi pagine e lun asosiati Parla-pagine sal bli lista tilok, e li pagine sal apari '''diki''' in li [[Special:RecentChanges|liste de resenti chanjos]] por ke on trova lu plu fasilim.\n\nSi vu voli plu tardim ekarta li pagine fro vun observa-liste, klikta \"Desobserva\" in li lateral kolumne.",
+       "watch": "Observa",
+       "watchthispage": "Observa disi pagine",
+       "unwatch": "Desobserva",
+       "unwatchthispage": "Des-observa disi pagine",
+       "enotif_lastvisited": "Regarda $1 por vida omni chanjes depos vun lasti visite.",
+       "changed": "chanjati",
+       "confirm": "Konfirma",
+       "excontent": "kontenaje esed: '$1'",
+       "excontentauthor": "kontenaje esed: '$1' (e li soli kontribuere esed '[[Special:Contributions/$2|$2]]')",
+       "actioncomplete": "Akto kompleti",
+       "dellogpage": "Loge de ekartos",
+       "dellogpagetext": "Subu es liste del maxim resenti ekartos.",
+       "deletionlog": "registre de ekartos",
+       "deletecomment": "Resone:",
+       "revertpage": "Riverted modifikos da [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]); restaurad lasti versione da [[User:$1|$1]]",
+       "prot_1movedto2": "[[$1]] movat a [[$2]]",
+       "protect-legend": "Konfirma protektione",
+       "protect-level-sysop": "Sisopes nur",
+       "blanknamespace": "(Chefi)",
+       "contributions": "Useren kontributiones",
+       "mycontris": "Men kontributiones",
+       "sp-contributions-newbies": "Montra kontributiones nur de novi useres",
+       "sp-contributions-talk": "Diskusione",
+       "sp-contributions-search": "Sercha kontributiones",
+       "sp-contributions-submit": "Sercha",
+       "whatlinkshere": "Tum kel kupla hir",
+       "whatlinkshere-page": "Pagine:",
+       "whatlinkshere-links": "← linkes",
+       "ipbreason": "Resone:",
+       "badipaddress": "Non-valid IP adrese",
+       "contribslink": "Kontributiones",
+       "movearticle": "Mova pagine",
+       "move-watch": "Observa disi pagine",
+       "movereason": "Resone:",
+       "delete_and_move": "Ekarta e mova",
+       "delete_and_move_confirm": "Yes, ekarta li pagine",
+       "delete_and_move_reason": "Ekartat por fa spatie por movo \"[[$1]]\"",
+       "allmessages": "Sisteme mesajes",
+       "allmessagesname": "Nome",
+       "allmessagesdefault": "Non-spesifikati texte",
+       "allmessagescurrent": "Nuni texte",
+       "allmessagestext": "Dise es liste de sistemen mesajes obtenabli in li MediaWiki nomal spatie.",
+       "tooltip-pt-mytalk": "Vun parla-pagine",
+       "tooltip-pt-preferences": "Men preferos",
+       "tooltip-pt-logout": "Eksignata",
+       "tooltip-p-logo": "Chefi pagine",
+       "ilsubmit": "Sercha",
+       "bydate": "segun date",
+       "exif-imagewidth": "Larjeso",
+       "exif-imagelength": "Alteso",
+       "exif-imagedescription": "Title de imaje",
+       "exif-imageuniqueid": "Unik imaje ID",
+       "autosumm-replace": "Remplasant pagine kun '$1'",
+       "autoredircomment": "Ri-adresant a [[$1]]",
+       "autosumm-new": "Novi pagine: $1",
+       "version": "Versione",
+       "version-specialpages": "Spesial pagines",
+       "version-software-version": "Versione",
+       "specialpages": "Spesial pagines"
 }
index fa563b2..46d12c0 100644 (file)
@@ -9,9 +9,9 @@
        },
        "tog-underline": "Tsenya mothalafase go dihlomaganyo:",
        "tog-hideminor": "Fihla diphetogo tše nnyenyane",
-       "tog-showtoolbar": "Bontšha ''toolbar'' yago fetola (JavaScript)",
-       "tog-editondblclick": "Fetola matlakala ka go thathapa gabedi (JavaScript)",
-       "tog-editsectiononrightclick": "Dumella go fetola sekgao ka thathapa ka lagoja thaetlele ya sekgao (JavaScript)",
+       "tog-showtoolbar": "Bontšha ''toolbar'' yago fetola",
+       "tog-editondblclick": "Fetola matlakala ka go thathapa gabedi",
+       "tog-editsectiononrightclick": "Dumella go fetola sekgao ka thathapa ka lagoja thaetlele ya sekgao",
        "tog-watchcreations": "Tsenya matlaka a mafsa ao ke a ngwalago go lenano laka la ditlhapetšo",
        "tog-watchdefault": "Tsenya matlaka ao ke a fetolago go lenano laka la ditlhapetšo",
        "tog-watchmoves": "Tsenya matlaka ao ke a hudušago go lenano laka la ditlhapetšo",
@@ -97,8 +97,8 @@
        "newwindow": "(e bula lefastere le lempsha)",
        "cancel": "Khansela",
        "moredotdotdot": "Tše dingwe...",
-       "mypage": "Letlakala la ka",
-       "mytalk": "Dipolelo tša ka",
+       "mypage": "Letlakala",
+       "mytalk": "Bolela",
        "anontalk": "Poledišano ya IP ye",
        "navigation": "Tšwelotšo",
        "and": "&#32;le",
        "articlepage": "Nyakoretša letlakala la mateng",
        "talk": "Poledišano",
        "views": "Dinyakorêtšo",
-       "toolbox": "Lepokisi la dithulusu",
+       "toolbox": "Dithulusu",
        "userpage": "Nyakorela letlakala la mošomiši",
        "projectpage": "Nyakoretša letlakala la tirotherwa",
        "imagepage": "Nyakoretša letlakala la ''file''",
        "versionrequiredtext": "Version $1 ya MediaWiki ea hlokega go šomiša letlakala le. Lebelela [[Special:Version|letlakala la version]].",
        "retrievedfrom": "Le tšwa go \"$1\"",
        "youhavenewmessages": "O na le $1 ($2).",
-       "newmessagesdifflinkplural": "l{{PLURAL:$1|Phetogo tša|Diphetogo ya}}go feta",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|Phetogo tša|Diphetogo ya}} go feta",
        "youhavenewmessagesmulti": "O nale melaetša ye mefsa go $1",
        "editsection": "lokiša",
        "editold": "fetola",
        "gotaccount": "O šetše o nale tšhupaleloko? '''$1'''.",
        "gotaccountlink": "Tsena",
        "userlogin-resetlink": "O lebetše dintlha tšago tsena?",
-       "createaccountmail": "ka e-mail",
+       "createaccountmail": "Re šomiše ditlhaka-tša-siphiri tša sebakanyana tšeo re di kgethilego re di romele ka e-mail",
        "createaccountreason": "Lebaka:",
        "badretype": "Ditlhaka-tša-siphiri tše o di šomišitšego ga di swane.",
        "noname": "Gawa fana ka leina la mošomiši la go loka.",
        "wrongpassword": "O loketše ditlhaka-tša-siphiri tšeo e sego tšona. Ka kgopelo, leka gape.",
        "wrongpasswordempty": "Ga wa lokela ditlhaka-tša-siphiri. Ka kgopelo, leka gape.",
        "passwordtooshort": "Ditlhaka-tša-siphiri tša gago ga tša dumelega goba di kopana.\nGo nyakega gore e be le {{PLURAL:$1|tlhaka ye tee|$1 ya ditlhaka}} gape  e seke ya swana le leina la gago (''username'').",
-       "mailmypassword": "Romela ditlhaka-tša-siphiri tše mpšha ka e-mail",
+       "mailmypassword": "Fetola ditlhaka-tša-siphiri",
        "passwordremindertitle": "''Password'' ye mphsa ya nakonyana go {{SITENAME}}",
-       "passwordremindertext": "Motho yo mongwe (goba wena, gotšwa IP atrese $1) o\nkgopetše gore re moromele Ditlhaka-tša-siphiri tše mfsa tša {{SITENAME}} ($4).\n\nDitlhaka-tša-siphiri tša  mošomiši \"$2\" go tloga bjale ke  \"$3\".\nEya go {{SITENAME}} o e fetole.\n\nGa eba motho yo mongwe esego wena o dirile kgopelo ye, goba o gopola Ditlhaka-tša-siphiri gomme ga o sa\nhloka gore e fetolwe, hlokomologa molaetša wo, o tšwele pele o šumiše Ditlhaka-tša-siphiri tša kgale.",
+       "passwordremindertext": "Motho yo mongwe (goba wena, gotšwa IP atrese $1) o\nkgopetše gore re moromele Ditlhaka-tša-siphiri tše mfsa tša {{SITENAME}} ($4).\n\nDitlhaka-tša-siphiri tša  mošomiši \"$2\" go tloga bjale ke  \"$3\".\n\nDitlhaka-tša-siphiri di tla šoma {{PLURAL:$5|letšatši|matšatši a $5}}.\n\nGa eba motho yo mongwe esego wena o dirile kgopelo ye, goba o gopola Ditlhaka-tša-siphiri gomme ga o sa\nhloka gore e fetolwe, hlokomologa molaetša wo, o tšwele pele o šumiše Ditlhaka-tša-siphiri tša kgale.",
        "noemail": "Ga gona e-mail atrese ya mošomiši \"$1\".",
        "passwordsent": "\nDihlaka tša siphiri (''password'') tše mphsa di rometšwe go e-mail atrese ya \"$1\".\nRe kgopela gore o tsene ge fetša go e hwetša.",
        "blocked-mailpassword": "IP atrese ya gago e thibetšwe go dira diphetogo, ka fao ga wa dumellwa\ngo šomiša thulusu ya go hwetša Ditlhaka-tša-siphiri go thibela go hlapanya.",
        "eauthentsent": "Molaetša wa go tiišetša o  rometšwe go e-mail atrese.\n\nPele re romela melaetša ye mengwe go atrese ye, o kgopelwa go latela ditaelo tšeo dilego molaetšeng go tiišetša gore atrese ke ya gago.",
-       "throttled-mailpassword": "Kgopotšo ya ditlhaka-tša-siphiri e rometšwe {{PLURAL:$1|iring|diiring tše $1}} tša gofeta.\nGo thibela go hlapanya/kgobošo, kgopotšo e tee ka {{PLURAL:$1|iri|diiri tše $1}} e tla romellwa.",
+       "throttled-mailpassword": "Kgopelo ya go fetola ditlhaka-tša-siphiri e rometšwe {{PLURAL:$1|iring|diiring tše $1}} tša gofeta.\nGo thibela go hlapanya/kgobošo, kgopotšo e tee ka {{PLURAL:$1|iri|diiri tše $1}} e tla romellwa.",
        "mailerror": "Gobile le phošo go romeleng molaetša  : $1",
-       "acct_creation_throttle_hit": "Ka maswabi, o tlhomile {{PLURAL:$1|tšhupaleloko|$1 tša ditšhupaleloko}}.\nGa wa dumelwa go tlhoma tše dingwe.",
-       "emailauthenticated": "E-mail atrese ya gago e kgonthišitšwe ka $2, $3.",
+       "acct_creation_throttle_hit": "Ka maswabi, IP Aterese ya gago e tlhomile {{PLURAL:$1|tšhupaleloko|$1 tša ditšhupaleloko}} e se kgale.\nGa wa dumelwa go tlhoma tše dingwe ka se sebaka.",
+       "emailauthenticated": "E-mail atrese ya gago e kgonthišitšwe ka $2  $3.",
        "accountcreated": "Tšhupaleloko (Account) e tlhodilwe",
-       "accountcreatedtext": "Tšhupaleloko (account) ya modiri $1 e tlhodilwe.",
+       "accountcreatedtext": "Tšhupaleloko (account) ya modiri [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) e tlhodilwe.",
        "loginlanguagelabel": "Polelo: $1",
        "changepassword": "Fetola ditlhaka-tša-siphiri",
        "resetpass_text": "<!-- Tsenya ditlhaka mo -->",
        "oldpassword": "Ditlhaka-tša-siphiri tša kgale:",
        "newpassword": "Ditlhaka-tša-siphiri tše mpsha:",
        "retypenew": "Tlanya ditlhaka tše mphsa tša siphiri gape:",
-       "changepassword-success": "Ditlhaka tša siphiri di fetotšwe ka katlego! Bjale o kgona go tsena...",
+       "changepassword-success": "Ditlhaka tša siphiri di fetotšwe ka katlego!",
        "bold_sample": "Mongwalo wa '''Bold'''",
        "bold_tip": "Ditlhaka tše Bold",
        "italic_sample": "Ditlhaka tše Italic",
        "preview": "Lebelela",
        "showpreview": "Laetša sebopego sa letlaka",
        "showdiff": "Laetša diphetogo",
-       "anoneditwarning": "'''Temošo''' Gawa ''tsena'', IP ya gago e tla šumišwa go histori ya diphetogo tša letlakala",
+       "anoneditwarning": "<strong>Temošo:</strong> Gawa ''tsena'', IP ya gago e tla šumišwa go histori ya diphetogo tša letlakala. Ge o ka <strong>[$1 tsena]</strong> goba wa  <strong>[$2 tlhoma tšhupaleloko</strong>,diphetogo tša gago di tla šumiša leina la gago.",
        "summary-preview": "Lebelela kakaretšo:",
        "blockedtitle": "Mošomiši o thibilwe",
        "blockedtext": "'''Leina la gago la mošomiši goba IP atrese e thibilwe.'''\n\nO thibilwe ke $1. Makaba a go thiba ke ''$2''.\n\n* Go thoma gago thiba: $8\n* Fetatšatši yago thiba: $6\n* Mothibiwa: $7\n\nO ka leka go boledišana le $1 goba [[{{MediaWiki:Grouppage-sysop}}|molaudi]] ka go thibiwa go.\nO ka se kgone go šumiša thulusu ya 'romela mošomiši molaetša' ka ntle gage o loketše e-mail ya gago go\n[[Special:Preferences|dikgatlhegelo]] gape ge o sa thibelwa go e šomiša.\nIP atrese ya gago ke $3, ge ID ya go thiba ele #$5. Ka kgopelo šumiša ID le IP go dipoledišano ka moka tšeo dilego mabapi le go go thiba.",
        "loginreqlink": "tsena",
        "loginreqpagetext": "O swanela ke go  $1 go nyakorela matlakala a mangwe.",
        "accmailtitle": "Ditlhaka tša siphiri di rometšwe.",
-       "accmailtext": "Ditlhaka-tša-siphiri tša \"$1\"  di rometšwe go $2.",
+       "accmailtext": "Ditlhaka-tša-siphiri tša  [[User talk:$1|$1]]  di rometšwe go $2. Di ka fetolwa go letlaka la <em>[[Special:ChangePassword|go fetola ditlhaka-tša-siphiri ]]</em> ge o tsena.",
        "newarticle": "(mpsha)",
        "newarticletext": "O latetše hlomaganyo go letlakala leo le sego gona ka se sebaka.\nGo tlhola letlakala, thoma go ngwalo lepokising le letelago\n(lebelela [$1 letlakala la thušo] go hwetša šedi).\nGa eba o le fa ka phošo, o ka boela morago ka go šumiša konopo ya '''back''' go ''browser'' ya gago.",
        "noarticletext": "Ga gona ditlhaka letlakaleng le, oka [[Special:Search/{{PAGENAME}}|fetleka leina la letlakala]] matlakaleng a mangwe, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} fetleka \"logs\"], goba [{{fullurl:{{FULLPAGENAME}}|action=edit}} wa fetola letlakala le]</span>.",
        "currentrev": "Poeletšo tša bjale",
        "currentrev-asof": "Thumeletšo tša seswa go tloga ka $1",
        "revisionasof": "Thumeletšo go tloga ka $1",
-       "revision-info": "Poeletšo go tloga $1 ka $2",
+       "revision-info": "Poeletšo go tloga $1 ka {{GENDER:$6|$2}}$7",
        "previousrevision": "←Poeletšo tša kgalenyana",
        "nextrevision": "Peletšo tše dimphsanyana→",
        "currentrevisionlink": "Poeletšo ya bjale",
        "histlegend": "Tlhaolo ya diphapano: swaya lepokisi la phetogo go bapetša ke moka o thwanye ''enter'' tlase-tlase<br />\nNane: (bjale) = phapang le diphetogo tša bjale,\n(mafelelo) = phapang le diphetogo tša pele, M = diphetogo tše nyenyane.",
        "history-fieldset-title": "Laotša histori",
        "history-show-deleted": "Tša go phumulwa fela",
-       "histfirst": "Pelepele",
+       "histfirst": "Pelepeleng",
        "histlast": "Ntshwantshwa",
        "historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
        "history-feed-title": "Histori ya poeletšo",
        "history-feed-item-nocomment": "$1 go $2",
        "history-feed-empty": "Letlakala lewe ga le gona.\nMohlomongwe le phumutšwe go wiki, goba le fetotšwe leina.\nLeka [[Special:Search|go fetleka wikii]] go humana matlakala a mapsha.",
        "rev-delundel": "Bontšha/Fihla",
-       "revdelete-hide-text": "Fihla dihlaka tša poeletšo",
+       "revdelete-hide-text": "Dihlaka tša poeletšo",
        "revdelete-log": "Lebaka:",
        "revdel-restore": "\nfetola tshenolo",
        "pagehist": "Histori ya letlakala",
        "shown-title": "Laetša $1 {{PLURAL:$1|sepheto| tša dipheto}} ka letlakala",
        "viewprevnext": "Lebelela ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Go ena le letlaka la leina la \"[[:$1]]\" go wiki ye.'''",
-       "searchmenu-new": "'''Hlola letlakala \"[[:$1]]\" go wiki ye!'''",
+       "searchmenu-new": "<strong>Hlola letlakala \"[[:$1]]\" go wiki ye!</strong>",
        "searchprofile-articles": "Matlakala a diteng",
        "searchprofile-images": "Diphatlalatši tša \"multi\"",
        "searchprofile-everything": "Ka moka",
        "search-section": "(sekga $1)",
        "search-suggest": "O be o nyaka gore: $1",
        "search-interwiki-caption": "Diprojeke tša moloko",
-       "search-interwiki-default": "$1 diphetho:",
+       "search-interwiki-default": "Dipheto gotšwa $1:",
        "search-interwiki-more": "(gape)",
        "searchrelated": "tswalana",
        "searchall": "tšohle",
-       "showingresultsheader": "{{PLURAL:$5|Sepheto '''$1''' tša '''$3'''|Dipheto '''$1 - $2''' tša '''$3'''}} tša '''$4'''",
        "search-nonefound": "Gago dipheto tšago sepelelana le \"query\".",
        "powersearch-legend": "Fetleka ya tšwetše",
        "powersearch-ns": "Fetleka go di \"namespace\"",
        "preferences": "Dikgatlhegelo",
-       "mypreferences": "Dikgatlhegelo tša ka",
+       "mypreferences": "Dikgatlhegelo",
        "prefs-edits": "Palo ya diphetogo:",
        "skin-preview": "Ponopele",
        "prefs-rc": "Diphetogo tša bjale",
        "allowemail": "Dumella melaetša ya e-mail go tšwa go bašomiši ba bangwe",
        "prefs-files": "Difaele",
        "youremail": "E-Poso",
-       "username": "Mošomiši:",
-       "prefs-memberingroups": "Leloko la {{PLURAL:$1|ya sehlopha|ya dihlopha}}:",
+       "username": "{{GENDER:$1|Mošomiši}}:",
+       "prefs-memberingroups": "{{GENDER:$2|Leloko}} la {{PLURAL:$1|ya sehlopha|ya dihlopha}}:",
        "yourrealname": "Leina la mmakgonthe:",
        "yourlanguage": "Polelo:",
        "yournick": "Tshaeno:",
        "recentchanges-label-minor": "Ye ke phetogo ye nnyenyane",
        "recentchanges-label-bot": "Phetogo ye e dirilwe ke \"bot\"",
        "recentchanges-label-unpatrolled": "Phetogo ye ga ese e \"patrollwe\"",
-       "rcnotefrom": "Tlase ke diphetogo go tloga ka '''$2''' (go  fihla ka '''$1''').",
+       "rcnotefrom": "Tlase ke diphetogo go tloga ka <strong>$3, $4</strong> (go  fihla ka <strong>$1</strong>).",
        "rclistfrom": "Laêtša dipheto tše mfsa go thoma go $3 $2",
        "rcshowhideminor": "$1 ya diphetogo tše nnyenyane",
        "rcshowhidebots": "$1 bots",
-       "rcshowhideliu": "$1 bašumiši bao batsenego",
+       "rcshowhideliu": "$1 bašumiši bao batsebjawago",
        "rcshowhideanons": "$1 bašumiši bago se tsebege",
        "rcshowhidepatr": "$1 diphetogo tše ''patrolled''",
        "rcshowhidemine": "$1 diphetogo tsa ka",
        "newpageletter": "N",
        "boteditletter": "b",
        "newsectionsummary": "/* $1 */ sekgao se sempsha",
-       "rc-enhanced-expand": "Laetša ka bophara (e nyaka \"JavaScript\")",
+       "rc-enhanced-expand": "Laetša ka bophara",
        "rc-enhanced-hide": "Fihla bophara bja sedi",
        "recentchangeslinked": "Diphetogo tša go tswalana",
        "recentchangeslinked-feed": "Diphetogo tša go tswalana",
        "license": "Laesense/Tumello:",
        "license-header": "Laesense",
        "license-nopreview": "(Ponopele ga e gona)",
-       "upload_source_file": "(faele go khomphuthara ya gago)",
+       "upload_source_file": "(faele yeo o kgethilego go khomphuthara ya gago)",
        "imgfile": "faele",
        "listfiles": "Lenano la difaele",
        "listfiles_date": "Letšatšikgwedi",
        "filerevert-defaultcomment": "Boela go poeletšo ya go tloga go $2, $1",
        "filedelete": "Phumula $1",
        "filedelete-legend": "Phumula faele",
-       "filedelete-intro": "O phumula '''[[Media:$1|$1]]'''.",
+       "filedelete-intro": "O phumula <strong>[[Media:$1|$1]]</strong> le histori ya yona.",
        "filedelete-comment": "Lebaka:",
        "filedelete-submit": "Phumula",
        "filedelete-success": "'''$1''' e phumutšwe.",
        "uncategorizedtemplates": "''Templates'' tšago sebe le magoro",
        "unusedcategories": "Dihlopha tša go se šomišwe",
        "unusedimages": "Difaele tša go se šomišwe",
-       "popularpages": "Matlakala a go tuma",
        "wantedcategories": "Dihlopha tšago nyakega",
        "wantedpages": "Matlakala ago nyakega",
        "mostlinked": "Matlakala a go hlomaganya go feta a mangwe",
        "mostlinkedcategories": "Dihlopha tša go hlomaganya go feta tše dingwe",
-       "mostlinkedtemplates": "''templates'' tša go hlomaganya go feta tše dingwe",
+       "mostlinkedtemplates": "Matlakala a go hlomaganya go feta a mangwe",
        "mostcategories": "Matlakala a goba le dihlopha tše dintšhi",
        "mostimages": "Faele tša go hlomaganya go feta tše dingwe",
        "mostrevisions": "Matlakala a goba le diphetogo tše dintšhi",
        "pager-older-n": "{{PLURAL:$1|1 ya kgale|$1 tša kgale}}",
        "booksources": "Dipuku tša mothopo",
        "booksources-search-legend": "Fetleka mothopo wa dipuku",
-       "booksources-go": "Sepela",
        "specialloguserlabel": "Modiri:",
        "speciallogtitlelabel": "Thaetlele (goba mošumiši):",
        "log": "Di-''log''",
        "emailccsubject": "Kopi ya molaetša wa gago goya go $1: $2",
        "emailsent": "E-mail e rometšwe",
        "emailsenttext": "Molaetša wa gago wa email gawa romelwa.",
-       "watchlist": "Lenano la ditlhapetšo tša ka",
-       "mywatchlist": "Lenano la ditlhapetšo tša ka",
+       "watchlist": "Lenano la ditlhapetšo",
+       "mywatchlist": "Lenano la ditlhapetšo",
        "watchlistfor2": "Ya $1 $2",
        "addedwatchtext": "Letlakala \"[[:$1]]\" le tsene go [[Special:Watchlist|watchlist]] ya gago.\nGo tloga bjale, diphetogo letlakaleng le, le letlakaleng la dipoledišano la gona, di tla bontšhwa ka mongalo wa '''bold''' gare ga [[Special:RecentChanges|list of recent changes]] gore go be bonolo gore oa bone.\n\nGa eba o nyaka go hloša letlaka le go lenano la ditlhapetšo tša gago, šomiša \"Tloša tlhapetšo\" go sidebar.",
        "removedwatchtext": "Letlakala \"[[:$1]]\" letlošitšwe go [[Special:Watchlist|lenano la gago la ditlhapetšo]].",
        "watchthispage": "Tlhapetša letlakala le",
        "unwatch": "Tloša tlhapešo",
        "watchlist-details": "{{PLURAL:$1|$1 ya letlakala|$1 ya matlakala}} a lenano la ditlhapetšo tša gago, re sa bale matlakala a dipoledišano (dipolelo).",
-       "wlshowlast": "Laetša  $1 diiri $2 matšatši $3 tša gofeta",
+       "wlshowlast": "Laetša  $1 diiri $2 matšatši  tša gofeta",
        "watchlist-options": "Dikgatlego tša lenano la ditlhapetšo",
        "watching": "Tlhapeditše...",
        "unwatching": "Tlhapetšo eya tlošwa ...",
        "deletepage": "Phumula letlakala",
        "excontent": "mateng ebe e le: '$1'",
        "delete-legend": "Phumula",
-       "historywarning": "'''Temošo:''' Letlakala leo o lekago go lephumula le nale histori le {{:$1|phetogo|diphetogo}}:",
+       "historywarning": "<strong>Temošo:</strong> Letlakala leo o lekago go lephumula le nale histori le {{PLURAL:$1|phetogo|diphetogo tše $1}}:",
        "confirmdeletetext": "O phumula letlakala le histori ka moka ya lona.\nKa kgopela sitlediša gore ke se o nyakago  go sedira, le gore o kwešiša ditla morago tša se, le gore seo o se dirago se latela melawana le ditaelo go ya ka [[{{MediaWiki:Policy-url}}|polisi]].",
        "actioncomplete": "Kgopelo e phetilwe ka katlego",
        "actionfailed": "Tiro e padile",
        "exif-componentsconfiguration-0": "Ga e gona",
        "exif-subjectdistance-value": "$1 metara",
        "exif-meteringmode-1": "Palogare",
-       "watchlistall2": "ka moka",
        "namespacesall": "ka moka",
        "monthsall": "ka moka",
        "imgmultipageprev": "← letlakala la go feta",
index 69410b4..6eedbb1 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Reedy",
-            "Seb az86556",
-            "לערי ריינהארט"
-        ]
-    },
-    "sunday": "Damóogo",
-    "monday": "Damóo biiskání",
-    "tuesday": "Damóodóó naakiską́o",
-    "wednesday": "Damóodóó tágí jį́",
-    "thursday": "Damóodóó dį́į́' yiską́o",
-    "friday": "Nda'iiníísh",
-    "saturday": "Yiską́ damóo",
-    "january": "Yas Niłtʼees",
-    "february": "Atsá Biyáázh",
-    "march": "Wóózhchʼį́į́d",
-    "april": "Tʼą́ą́chil",
-    "may_long": "Tʼą́ą́tsoh",
-    "june": "Yaʼiishjááshchilí",
-    "july": "Yaʼiishjáástsoh",
-    "august": "Biniʼantʼą́ą́tsʼózí",
-    "september": "Biniʼantʼą́ą́tsoh",
-    "october": "Ghąąjį",
-    "november": "Níłchʼitsʼósí",
-    "december": "Níłchʼitsoh",
-    "january-gen": "Yas Niłtʼees",
-    "february-gen": "Atsá Biyáázh",
-    "march-gen": "Wóózhchʼį́į́d",
-    "april-gen": "Tʼą́ą́chil",
-    "may-gen": "Tʼą́ą́tsoh",
-    "june-gen": "Yaʼiishjááshchilí",
-    "july-gen": "Yaʼiishjáástsoh",
-    "august-gen": "Biniʼantʼą́ą́tsʼózí",
-    "september-gen": "Biniʼantʼą́ą́tsoh",
-    "october-gen": "Ghąąjį",
-    "november-gen": "Níłchʼitsʼósí",
-    "december-gen": "Níłchʼitsoh",
-    "jan": "Ynts",
-    "feb": "Atsb",
-    "mar": "Wozh",
-    "apr": "Tchi",
-    "may": "Ttso",
-    "jun": "Yjsh",
-    "jul": "Yjts",
-    "aug": "Btsz",
-    "sep": "Btsx",
-    "oct": "Ghąj",
-    "nov": "Ntss",
-    "dec": "Ntsx",
-    "pagecategories": "{{PLURAL:$1|Naaltsoos biiʼ sinilí|Naaltsoos biiʼ sinilí}}",
-    "category_header": "Naaltsoos biiʼ sinilí \"$1\" biyiʼ dahólónígíí",
-    "subcategories": "Hanálzhoʼí",
-    "hidden-categories": "{{PLURAL:$1|Naaltsoos biiʼ sinilí (doo yitʼínii)|Naaltsoos biiʼ sinilí (doo yitʼínii)}}",
-    "category-subcat-count": "{{PLURAL:$2|1 Hanálzhoʼí.|{{PLURAL:$1|1 Hanálzhoʼí|$2 Hanálzhoʼí}} - ($1).}}",
-    "category-article-count": "{{PLURAL:$2|'''1 naaltsoos''' díí naaltsoos biiʼ sinilí biyiʼ hólǫ.|{{PLURAL:$2|'''1 naaltsoos''' díí naaltsoos biiʼ sinilí biyiʼ hólǫ|'''$2 naaltsoos''' díí naaltsoos biiʼ sinilí biyiʼ dahólǫ}} - ($1)}}",
-    "listingcontinuesabbrev": "nááná...",
-    "cancel": "tʼóó ánássįįh",
-    "mytalk": "haneʼ shichʼįʼ ályaaígíí",
-    "navigation": "naaltsoosígíí",
-    "errorpagetitle": "adziih",
-    "tagline": "''{{SITENAME}}'' bitsʼą́ą́dę́ę́ʼ",
-    "help": "Anáʼálwoʼ",
-    "search": "hanishtá nisin",
-    "searchbutton": "tʼáá yíní átʼéegi",
-    "searcharticle": "díí saad tʼéiyá",
-    "history": "łahgo ályaaígíí",
-    "history_short": "łahgo ályaaígíí",
-    "printableversion": "\"Print\" áshłééh nisin",
-    "permalink": "Díí naaltsoos bi-\"url\"",
-    "edit": "Łahgo áshłééh",
-    "create": "áshłééh nisin",
-    "editthispage": "díí naaltsoos łahgo áshłééh",
-    "delete": "sisxé (delete)",
-    "protect": "bich'ą́ą́h iishááh nisin (protect)",
-    "newpage": "Naaltsoos ániidí",
-    "talkpage": "díí kweʼé naaltsoos baa yáshtiʼ nisin",
-    "talkpagelinktext": "bichʼįʼ yáshtiʼ",
-    "specialpage": "Naaltsoos spéshelígíí",
-    "personaltools": "bee naashnishí",
-    "talk": "baa yáshtiʼ nisin",
-    "views": "naaltsoosígíí",
-    "toolbox": "bee naʼanishí",
-    "otherlanguages": "saad",
-    "redirectedfrom": "(\"$1\"dę́ę́ʼ)",
-    "redirectpagesub": "dah astsihígíí",
-    "lastmodifiedat": "Díí naaltsoos $1/$2 łahgo ályaa.",
-    "aboutsite": "{{SITENAME}} baa haneʼ",
-    "aboutpage": "Project: baa haneʼ",
-    "copyright": "Díí naaltsoos bikáaʼgi saad shijaaʼígíí \"$1\" beehazʼą́ąnii bikʼehgo choidííłįįł",
-    "edithelp": "anáʼálwoʼ",
-    "mainpage": "Íiyisíí Naaltsoos",
-    "mainpage-description": "Íiyisíí Naaltsoos",
-    "retrievedfrom": "\"$1\" bitsʼą́ą́dę́ę́ʼ",
-    "youhavenewmessages": "Háíshį́į́ $1 nichʼįʼ áyiilaa. <small>($2)</small>",
-    "editsection": "łahgo áshłééh",
-    "editold": "łahgo áshłééh",
-    "editlink": "łahgo áshłééh",
-    "viewsourcelink": "XML yishʼį́ nisin",
-    "toc": "bikáaʼgi hólónígíí",
-    "showtoc": "yishʼį́ nisin",
-    "hidetoc": "doo yishʼį́ nisin da",
-    "site-rss-feed": "$1 biRSS Feed",
-    "site-atom-feed": "$1 biAtom Feed",
-    "page-rss-feed": "\"$1\" biRSS Feed",
-    "page-atom-feed": "\"$1\" biAtom Feed",
-    "red-link-title": "$1 (ádin)",
-    "nstab-main": "naaltsoos",
-    "nstab-user": "choyoołʼįįhí binaaltsoos",
-    "nstab-special": "Naaltsoos spéshelígíí",
-    "nstab-project": "wikiibíídiiya binaaltsoos",
-    "nstab-image": "eʼelyaaígíí",
-    "nstab-mediawiki": "haneʼ",
-    "nstab-template": "bee álnééhí",
-    "nstab-help": "anáʼálwoʼ",
-    "nstab-category": "Naaltsoos biiʼ sinilí",
-    "missingarticle-rev": "(łahgo ályaaígíí #$1)",
-    "viewsource": "XML yishʼį́ nisin",
-    "yourname": "Choyoołʼįįhí bizhiʼ:",
-    "yourpassword": "Passwordígíí:",
-    "remembermypassword": "shipassword béédíínih (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "nav-login-createaccount": "Log in / accountígíí ádíílííł",
-    "nologinlink": "Accountígíí ádíílííł",
-    "mailmypassword": "passwordígíí ániidí shichʼįʼ ádíílííł (e-mail)",
-    "link_sample": "Linkígíí",
-    "extlink_sample": "http://www.example.com linkígíí",
-    "minoredit": "tʼáá áłtsʼíísígo tʼéiyá naaltsoos łahgo áshłaa",
-    "watchthis": "shinááł nisin",
-    "savearticle": "✔ bee lą́ ashłeeh",
-    "preview": "dooleełígíí",
-    "showpreview": "dooleełígíí yishʼį́ nisin",
-    "showdiff": "łahgo áshłaaígíí yishʼį́ nisin",
-    "anoneditwarning": "<div style=\"background:#aaddff; text-align:center;\">'''Doo \"login\" íinilaa da.''' Éí biniinaa nizhiʼ doo ééhozin da áádóó ni-''IP'' naaltsoos bikááʼ náázhdíyóosoh.<br /><small>('''You are not logged in.''' Your name is thus unknown, and your IP will be recorded.)</small></div>",
-    "newarticle": "(Naaltsoos ániidí)",
-    "previewnote": "'''Díí kweʼé éí \"dooleełígíí\" tʼéiyá átʼé!'''\n::<small>'''(This is only a preview.)'''</small>",
-    "editing": "\"$1\" łahgo áshłééh...",
-    "templatesused": "\"bee álnééhé\" naaltsoos bikáaʼgi hólǫ́:",
-    "templatesusedpreview": "\"bee álnééhé\" naaltsoos bikáaʼgi dooleełígíí:",
-    "template-protected": "(administratorsígíí tʼéiyá)",
-    "template-semiprotected": "(chodayoołʼįįhí doo ééhozinii díí naaltsoos doo łahgo ádayóleʼ átʼée da)",
-    "hiddencategories": "Díí kweʼé naaltsoos éí {{PLURAL:$1|1 Naaltsoos biiʼ sinilí (doo yitʼínii)|$1 Naaltsoos biiʼ sinilí (doo yitʼínii)}} yiiʼ siʼą́:",
-    "viewpagelogs": "logsígíí yishʼį́ nisin",
-    "nohistory": "\"łahgo ályaaígíí\" doo hólǫ́ǫ da/ádin.",
-    "currentrev-asof": "kʼadígíí ($1)",
-    "revisionasof": "$1 yę́ędą́ą́ʼ",
-    "currentrevisionlink": "kʼadígíí",
-    "cur": "kʼadígíí",
-    "histfirst": "bee hodeeshzhiizh",
-    "histlast": "bee nihoolʼá",
-    "rev-delundel": "yishʼį́ nisin/doo yishʼį́ nisin da",
-    "history-title": "łahgo ályaaígíí: \"$1\"",
-    "editundo": "ńdíídleeł!",
-    "viewprevnext": "($1) ($2) ($3) shinááł",
-    "search-result-size": "$1 ({{PLURAL:$2|1 saad bikáaʼgi hólǫ́|$2 saad bikáaʼgi dahólǫ́}})",
-    "search-redirect": "(\"$1\"dę́ę́ʼ)",
-    "search-suggest": "\"$1\" hainítáásh shį́į́?",
-    "search-interwiki-more": "(nááná...)",
-    "powersearch-redir": "dah astsihígíí yishʼį́ nisin.",
-    "mypreferences": "siłkidígíí",
-    "group-sysop": "Administratorsígíí",
-    "grouppage-sysop": "{{ns:project}}:Administratorsígíí",
-    "nchanges": "$1 {{PLURAL:$1|łahgo ályaaígíí|łahgo ályaaígíí}}",
-    "recentchanges": "Áníídí łahgo ályaaígíí",
-    "recentchanges-feed-description": "áníídí łahgo ályaaígíí",
-    "rcshowhideminor": "naaltsoos tʼáá áłtsʼíísígo łahgo ályaaígíí $1",
-    "rcshowhidebots": "''bots''ígíí $1",
-    "rcshowhideliu": "chodayoołʼįįhí ééhozinígíí $1",
-    "rcshowhideanons": "chodayoołʼįįhí doo ééhozinii (IP) $1",
-    "rcshowhidemine": "akʼeʼshełchínígíí $1",
-    "rclinks": "*($1) łahgo ályaaígíí\n*($2) yiskánídą́ą́ʼ kojįʼ <br />\n$3",
-    "hist": "łgá",
-    "hide": "doo yishʼį́ nisin da.",
-    "show": "yishʼį́ nisin.",
-    "minoreditletter": "tʼ",
-    "newpageletter": "NÁ",
-    "recentchangeslinked-page": "naaltsoos:",
-    "upload": "Eʼelyaaígíí biiʼ hééł áshłééh nisin",
-    "uploadedimage": "\"[[$1]]\" biiʼ hééł áyiilaa",
-    "filehist": "łahgo ályaaígíí",
-    "filehist-current": "kʼadígíí",
-    "filehist-thumb": "thumbnailígíí",
-    "filehist-thumbtext": "thumbnailígíí ($1)",
-    "filehist-user": "Choyoołʼįįhí",
-    "filehist-dimensions": "naaniigo/náásee",
-    "filehist-comment": "haneʼ",
-    "imagelinks": "naaltsoos díí kweʼé eʼelyaaígíí chodayoołʼįįhígíí",
-    "linkstoimage": "{{PLURAL:$1|1 naaltsoos díí eʼelyaaígíí choyoołʼįįh|$1 naaltsoos díí eʼelyaaígíí chodayoołʼįįh}}:",
-    "sharedupload": "Díí kweʼé eʼelyaaígíí $1 bitsʼą́ą́dę́ę́ʼ.",
-    "nbytes": "$1 {{PLURAL:$1|byte átʼé|bytes átʼé}}",
-    "newpages": "Naaltsoos ániidí",
-    "move": "hidishnááh nisin",
-    "movethispage": "díí naaltsoos hidishnááh nisin",
-    "allpages": "naaltsoosígíí tʼáá ałtso",
-    "allarticles": "naaltsoosígíí tʼáá ałtso",
-    "linksearch": "linksígíí tłʼóoʼdi siʼánígíí",
-    "emailuser": "E-mail bichʼįʼ áshłééh nisin",
-    "watchlist": "bikʼi déshʼį́į́ʼígíí",
-    "mywatchlist": "bikʼi déshʼį́į́ʼígíí",
-    "addedwatchtext": "[[Special:Watchlist|Naaltsoos bikʼi díníʼį́į́ʼígíí]] bíhiniidééh. \"[[:$1]]\" kʼad bikʼi díníʼį́į́ʼ.<br />Nááná [[Special:RecentChanges|\"áníídí łahgo ályaaígíí\"]] bikáaʼgi díí naaltsoos kʼad kodóó '''ditą́ą''' dooleeł.",
-    "removedwatchtext": "\"[[:$1]]\" kʼad doo [[Special:Watchlist|bikʼi díníʼį́į]] da.",
-    "watch": "bikʼi déshʼį́į́ʼ nisin",
-    "watchthispage": "díí naaltsoos bikʼi déshʼį́į́ʼ nisin",
-    "unwatch": "doo bikʼi déshʼį́įʼ nisin da",
-    "watchlist-details": "{{PLURAL:$1|$1 naaltsoos|$1 naaltsoos}} bikʼi díníʼį́į́ʼ",
-    "wlshowlast": "<small>\n* ( $1 ) ahééʼílkidę́ędą́ą́ʼ kojįʼ\n* ( $2 ) yiskánídą́ą́ʼ kojįʼ\n* ( $3 )</small>",
-    "watchlist-options": "✔",
-    "watching": "(...)",
-    "unwatching": "(...)",
-    "protectedarticle": "\"[[$1]]\" bichʼą́ą́h ííyá.",
-    "modifiedarticleprotection": "\"[[$1]]\" biprotection level łahgo ályaa",
-    "namespace": "Naaltsoos bizhiʼ:",
-    "invert": "binaashii",
-    "blanknamespace": "(Íiyisíí)",
-    "contributions": "akʼeʼeeshchínígíí",
-    "contributions-title": "$1 akʼeʼeeshchínígíí",
-    "mycontris": "akʼeʼshełchínígíí",
-    "contribsub2": "$1 akʼeʼeeshchínígíí ($2)",
-    "uctop": "(← bee nihoolʼá)",
-    "sp-contributions-newbies": "ádaaniidí akʼeʼeeshchínígíí tʼéiyá",
-    "sp-contributions-search": "akʼeʼeeshchínígíí hanishtá nisin",
-    "sp-contributions-username": "IP/Choyoołʼįįhí bizhiʼ:",
-    "sp-contributions-submit": "hanishtá",
-    "whatlinkshere": "linksígíí díí naaltsoos baa atiin",
-    "whatlinkshere-title": "linksígíí \"$1\" baa atiin",
-    "whatlinkshere-page": "Naaltsoos:",
-    "linkshere": "'''[[:$1]]''' baa atiinígíí:",
-    "nolinkshere": "'''\"[[:$1]]\"''' baa atiinígíí doo hólǫ́ǫ da.",
-    "nolinkshere-ns": "'''\"[[:$1]]\"''' baa atiinígíí doo hólǫ́ǫ da.",
-    "isredirect": "dah astsihígíí",
-    "istemplate": "bee álnééhí",
-    "isimage": "eʼelyaaígíí",
-    "whatlinkshere-prev": "{{PLURAL:$1|←|← $1}}",
-    "whatlinkshere-next": "{{PLURAL:$1|→|→ $1}}",
-    "whatlinkshere-links": "← linkígíí",
-    "whatlinkshere-hideredirs": "dah astsihígíí $1",
-    "whatlinkshere-hidetrans": "transclusions $1",
-    "whatlinkshere-hidelinks": "linksígíí $1",
-    "whatlinkshere-filters": "bee agháʼníldéhí",
-    "contribslink": "akʼeʼeeshchínígíí",
-    "blocklogentry": "[[$1]] bichʼą́ą́h niiníyá ($2 $3)",
-    "movearticle": "naaltsoos:",
-    "newtitle": "naaltsoos bizhiʼ ániidí:",
-    "move-watch": "shinááł",
-    "movepagebtn": "✔ bee lą́ ashłeeh",
-    "movepage-moved": "'''\"$1\" kʼad \"$2\" wolyé'''",
-    "revertmove": "ńdíídleeł!",
-    "skinname-monobook": "NaaltsoosŁáa'ígíí",
-    "metadata": "Metadataígíí",
-    "metadata-expand": "yishʼį́ nisin",
-    "metadata-collapse": "doo yishʼį́ nisin da",
-    "watchlistall2": "tʼáá ałtso",
-    "namespacesall": "tʼáá ałtso",
-    "monthsall": "tʼáá ałtso",
-    "watchlisttools-view": "łahgo ályaaígíí yishʼį́ nisin",
-    "watchlisttools-edit": "naaltsoos bikʼi déshʼį́į́ʼígíí bikáaʼgi hólónígíí yishʼį́ dóó łahgo áshłééh nisin",
-    "watchlisttools-raw": "XML yishʼį́ dóó łahgo áshłééh nisin",
-    "specialpages": "Naaltsoos spéshelígíí"
+       "@metadata": {
+               "authors": [
+                       "Reedy",
+                       "Seb az86556",
+                       "לערי ריינהארט"
+               ]
+       },
+       "sunday": "Damóogo",
+       "monday": "Damóo biiskání",
+       "tuesday": "Damóodóó naakiską́o",
+       "wednesday": "Damóodóó tágí jį́",
+       "thursday": "Damóodóó dį́į́' yiską́o",
+       "friday": "Nda'iiníísh",
+       "saturday": "Yiską́ damóo",
+       "january": "Yas Niłtʼees",
+       "february": "Atsá Biyáázh",
+       "march": "Wóózhchʼį́į́d",
+       "april": "Tʼą́ą́chil",
+       "may_long": "Tʼą́ą́tsoh",
+       "june": "Yaʼiishjááshchilí",
+       "july": "Yaʼiishjáástsoh",
+       "august": "Biniʼantʼą́ą́tsʼózí",
+       "september": "Biniʼantʼą́ą́tsoh",
+       "october": "Ghąąjį",
+       "november": "Níłchʼitsʼósí",
+       "december": "Níłchʼitsoh",
+       "january-gen": "Yas Niłtʼees",
+       "february-gen": "Atsá Biyáázh",
+       "march-gen": "Wóózhchʼį́į́d",
+       "april-gen": "Tʼą́ą́chil",
+       "may-gen": "Tʼą́ą́tsoh",
+       "june-gen": "Yaʼiishjááshchilí",
+       "july-gen": "Yaʼiishjáástsoh",
+       "august-gen": "Biniʼantʼą́ą́tsʼózí",
+       "september-gen": "Biniʼantʼą́ą́tsoh",
+       "october-gen": "Ghąąjį",
+       "november-gen": "Níłchʼitsʼósí",
+       "december-gen": "Níłchʼitsoh",
+       "jan": "Ynts",
+       "feb": "Atsb",
+       "mar": "Wozh",
+       "apr": "Tchi",
+       "may": "Ttso",
+       "jun": "Yjsh",
+       "jul": "Yjts",
+       "aug": "Btsz",
+       "sep": "Btsx",
+       "oct": "Ghąj",
+       "nov": "Ntss",
+       "dec": "Ntsx",
+       "pagecategories": "{{PLURAL:$1|Naaltsoos biiʼ sinilí|Naaltsoos biiʼ sinilí}}",
+       "category_header": "Naaltsoos biiʼ sinilí \"$1\" biyiʼ dahólónígíí",
+       "subcategories": "Hanálzhoʼí",
+       "hidden-categories": "{{PLURAL:$1|Naaltsoos biiʼ sinilí (doo yitʼínii)|Naaltsoos biiʼ sinilí (doo yitʼínii)}}",
+       "category-subcat-count": "{{PLURAL:$2|1 Hanálzhoʼí.|{{PLURAL:$1|1 Hanálzhoʼí|$2 Hanálzhoʼí}} - ($1).}}",
+       "category-article-count": "{{PLURAL:$2|'''1 naaltsoos''' díí naaltsoos biiʼ sinilí biyiʼ hólǫ.|{{PLURAL:$2|'''1 naaltsoos''' díí naaltsoos biiʼ sinilí biyiʼ hólǫ|'''$2 naaltsoos''' díí naaltsoos biiʼ sinilí biyiʼ dahólǫ}} - ($1)}}",
+       "listingcontinuesabbrev": "nááná...",
+       "cancel": "tʼóó ánássįįh",
+       "mytalk": "haneʼ shichʼįʼ ályaaígíí",
+       "navigation": "naaltsoosígíí",
+       "errorpagetitle": "adziih",
+       "tagline": "''{{SITENAME}}'' bitsʼą́ą́dę́ę́ʼ",
+       "help": "Anáʼálwoʼ",
+       "search": "hanishtá nisin",
+       "searchbutton": "tʼáá yíní átʼéegi",
+       "searcharticle": "díí saad tʼéiyá",
+       "history": "łahgo ályaaígíí",
+       "history_short": "łahgo ályaaígíí",
+       "printableversion": "\"Print\" áshłééh nisin",
+       "permalink": "Díí naaltsoos bi-\"url\"",
+       "edit": "Łahgo áshłééh",
+       "create": "áshłééh nisin",
+       "editthispage": "díí naaltsoos łahgo áshłééh",
+       "delete": "sisxé (delete)",
+       "protect": "bich'ą́ą́h iishááh nisin (protect)",
+       "newpage": "Naaltsoos ániidí",
+       "talkpage": "díí kweʼé naaltsoos baa yáshtiʼ nisin",
+       "talkpagelinktext": "bichʼįʼ yáshtiʼ",
+       "specialpage": "Naaltsoos spéshelígíí",
+       "personaltools": "bee naashnishí",
+       "talk": "baa yáshtiʼ nisin",
+       "views": "naaltsoosígíí",
+       "toolbox": "bee naʼanishí",
+       "otherlanguages": "saad",
+       "redirectedfrom": "(\"$1\"dę́ę́ʼ)",
+       "redirectpagesub": "dah astsihígíí",
+       "lastmodifiedat": "Díí naaltsoos $1/$2 łahgo ályaa.",
+       "aboutsite": "{{SITENAME}} baa haneʼ",
+       "aboutpage": "Project: baa haneʼ",
+       "copyright": "Díí naaltsoos bikáaʼgi saad shijaaʼígíí \"$1\" beehazʼą́ąnii bikʼehgo choidííłįįł",
+       "edithelp": "anáʼálwoʼ",
+       "mainpage": "Íiyisíí Naaltsoos",
+       "mainpage-description": "Íiyisíí Naaltsoos",
+       "retrievedfrom": "\"$1\" bitsʼą́ą́dę́ę́ʼ",
+       "youhavenewmessages": "Háíshį́į́ $1 nichʼįʼ áyiilaa. <small>($2)</small>",
+       "editsection": "łahgo áshłééh",
+       "editold": "łahgo áshłééh",
+       "editlink": "łahgo áshłééh",
+       "viewsourcelink": "XML yishʼį́ nisin",
+       "toc": "bikáaʼgi hólónígíí",
+       "showtoc": "yishʼį́ nisin",
+       "hidetoc": "doo yishʼį́ nisin da",
+       "site-rss-feed": "$1 biRSS Feed",
+       "site-atom-feed": "$1 biAtom Feed",
+       "page-rss-feed": "\"$1\" biRSS Feed",
+       "page-atom-feed": "\"$1\" biAtom Feed",
+       "red-link-title": "$1 (ádin)",
+       "nstab-main": "naaltsoos",
+       "nstab-user": "choyoołʼįįhí binaaltsoos",
+       "nstab-special": "Naaltsoos spéshelígíí",
+       "nstab-project": "wikiibíídiiya binaaltsoos",
+       "nstab-image": "eʼelyaaígíí",
+       "nstab-mediawiki": "haneʼ",
+       "nstab-template": "bee álnééhí",
+       "nstab-help": "anáʼálwoʼ",
+       "nstab-category": "Naaltsoos biiʼ sinilí",
+       "missingarticle-rev": "(łahgo ályaaígíí #$1)",
+       "viewsource": "XML yishʼį́ nisin",
+       "yourname": "Choyoołʼįįhí bizhiʼ:",
+       "yourpassword": "Passwordígíí:",
+       "remembermypassword": "shipassword béédíínih (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "nav-login-createaccount": "Log in / accountígíí ádíílííł",
+       "nologinlink": "Accountígíí ádíílííł",
+       "mailmypassword": "passwordígíí ániidí shichʼįʼ ádíílííł (e-mail)",
+       "link_sample": "Linkígíí",
+       "extlink_sample": "http://www.example.com linkígíí",
+       "minoredit": "tʼáá áłtsʼíísígo tʼéiyá naaltsoos łahgo áshłaa",
+       "watchthis": "shinááł nisin",
+       "savearticle": "✔ bee lą́ ashłeeh",
+       "preview": "dooleełígíí",
+       "showpreview": "dooleełígíí yishʼį́ nisin",
+       "showdiff": "łahgo áshłaaígíí yishʼį́ nisin",
+       "anoneditwarning": "<div style=\"background:#aaddff; text-align:center;\">'''Doo \"login\" íinilaa da.''' Éí biniinaa nizhiʼ doo ééhozin da áádóó ni-''IP'' naaltsoos bikááʼ náázhdíyóosoh.<br /><small>('''You are not logged in.''' Your name is thus unknown, and your IP will be recorded.)</small></div>",
+       "newarticle": "(Naaltsoos ániidí)",
+       "previewnote": "'''Díí kweʼé éí \"dooleełígíí\" tʼéiyá átʼé!'''\n::<small>'''(This is only a preview.)'''</small>",
+       "editing": "\"$1\" łahgo áshłééh...",
+       "templatesused": "\"bee álnééhé\" naaltsoos bikáaʼgi hólǫ́:",
+       "templatesusedpreview": "\"bee álnééhé\" naaltsoos bikáaʼgi dooleełígíí:",
+       "template-protected": "(administratorsígíí tʼéiyá)",
+       "template-semiprotected": "(chodayoołʼįįhí doo ééhozinii díí naaltsoos doo łahgo ádayóleʼ átʼée da)",
+       "hiddencategories": "Díí kweʼé naaltsoos éí {{PLURAL:$1|1 Naaltsoos biiʼ sinilí (doo yitʼínii)|$1 Naaltsoos biiʼ sinilí (doo yitʼínii)}} yiiʼ siʼą́:",
+       "viewpagelogs": "logsígíí yishʼį́ nisin",
+       "nohistory": "\"łahgo ályaaígíí\" doo hólǫ́ǫ da/ádin.",
+       "currentrev-asof": "kʼadígíí ($1)",
+       "revisionasof": "$1 yę́ędą́ą́ʼ",
+       "currentrevisionlink": "kʼadígíí",
+       "cur": "kʼadígíí",
+       "histfirst": "bee hodeeshzhiizh",
+       "histlast": "bee nihoolʼá",
+       "rev-delundel": "yishʼį́ nisin/doo yishʼį́ nisin da",
+       "history-title": "łahgo ályaaígíí: \"$1\"",
+       "editundo": "ńdíídleeł!",
+       "viewprevnext": "($1) ($2) ($3) shinááł",
+       "search-result-size": "$1 ({{PLURAL:$2|1 saad bikáaʼgi hólǫ́|$2 saad bikáaʼgi dahólǫ́}})",
+       "search-redirect": "(\"$1\"dę́ę́ʼ)",
+       "search-suggest": "\"$1\" hainítáásh shį́į́?",
+       "search-interwiki-more": "(nááná...)",
+       "mypreferences": "siłkidígíí",
+       "group-sysop": "Administratorsígíí",
+       "grouppage-sysop": "{{ns:project}}:Administratorsígíí",
+       "nchanges": "$1 {{PLURAL:$1|łahgo ályaaígíí|łahgo ályaaígíí}}",
+       "recentchanges": "Áníídí łahgo ályaaígíí",
+       "recentchanges-feed-description": "áníídí łahgo ályaaígíí",
+       "rcshowhideminor": "naaltsoos tʼáá áłtsʼíísígo łahgo ályaaígíí $1",
+       "rcshowhidebots": "''bots''ígíí $1",
+       "rcshowhideliu": "chodayoołʼįįhí ééhozinígíí $1",
+       "rcshowhideanons": "chodayoołʼįįhí doo ééhozinii (IP) $1",
+       "rcshowhidemine": "akʼeʼshełchínígíí $1",
+       "rclinks": "*($1) łahgo ályaaígíí\n*($2) yiskánídą́ą́ʼ kojįʼ <br />\n$3",
+       "hist": "łgá",
+       "hide": "doo yishʼį́ nisin da.",
+       "show": "yishʼį́ nisin.",
+       "minoreditletter": "tʼ",
+       "newpageletter": "NÁ",
+       "recentchangeslinked-page": "naaltsoos:",
+       "upload": "Eʼelyaaígíí biiʼ hééł áshłééh nisin",
+       "filehist": "łahgo ályaaígíí",
+       "filehist-current": "kʼadígíí",
+       "filehist-thumb": "thumbnailígíí",
+       "filehist-thumbtext": "thumbnailígíí ($1)",
+       "filehist-user": "Choyoołʼįįhí",
+       "filehist-dimensions": "naaniigo/náásee",
+       "filehist-comment": "haneʼ",
+       "imagelinks": "naaltsoos díí kweʼé eʼelyaaígíí chodayoołʼįįhígíí",
+       "linkstoimage": "{{PLURAL:$1|1 naaltsoos díí eʼelyaaígíí choyoołʼįįh|$1 naaltsoos díí eʼelyaaígíí chodayoołʼįįh}}:",
+       "sharedupload": "Díí kweʼé eʼelyaaígíí $1 bitsʼą́ą́dę́ę́ʼ.",
+       "nbytes": "$1 {{PLURAL:$1|byte átʼé|bytes átʼé}}",
+       "newpages": "Naaltsoos ániidí",
+       "move": "hidishnááh nisin",
+       "movethispage": "díí naaltsoos hidishnááh nisin",
+       "allpages": "naaltsoosígíí tʼáá ałtso",
+       "allarticles": "naaltsoosígíí tʼáá ałtso",
+       "linksearch": "linksígíí tłʼóoʼdi siʼánígíí",
+       "emailuser": "E-mail bichʼįʼ áshłééh nisin",
+       "watchlist": "bikʼi déshʼį́į́ʼígíí",
+       "mywatchlist": "bikʼi déshʼį́į́ʼígíí",
+       "addedwatchtext": "[[Special:Watchlist|Naaltsoos bikʼi díníʼį́į́ʼígíí]] bíhiniidééh. \"[[:$1]]\" kʼad bikʼi díníʼį́į́ʼ.<br />Nááná [[Special:RecentChanges|\"áníídí łahgo ályaaígíí\"]] bikáaʼgi díí naaltsoos kʼad kodóó '''ditą́ą''' dooleeł.",
+       "removedwatchtext": "\"[[:$1]]\" kʼad doo [[Special:Watchlist|bikʼi díníʼį́į]] da.",
+       "watch": "bikʼi déshʼį́į́ʼ nisin",
+       "watchthispage": "díí naaltsoos bikʼi déshʼį́į́ʼ nisin",
+       "unwatch": "doo bikʼi déshʼį́įʼ nisin da",
+       "watchlist-details": "{{PLURAL:$1|$1 naaltsoos|$1 naaltsoos}} bikʼi díníʼį́į́ʼ",
+       "wlshowlast": "( $1 ) ahééʼílkidę́ędą́ą́ʼ kojįʼ, ( $2 ) yiskánídą́ą́ʼ kojįʼ",
+       "watchlist-options": "✔",
+       "watching": "(...)",
+       "unwatching": "(...)",
+       "protectedarticle": "\"[[$1]]\" bichʼą́ą́h ííyá.",
+       "modifiedarticleprotection": "\"[[$1]]\" biprotection level łahgo ályaa",
+       "namespace": "Naaltsoos bizhiʼ:",
+       "invert": "binaashii",
+       "blanknamespace": "(Íiyisíí)",
+       "contributions": "akʼeʼeeshchínígíí",
+       "contributions-title": "$1 akʼeʼeeshchínígíí",
+       "mycontris": "akʼeʼshełchínígíí",
+       "contribsub2": "$1 akʼeʼeeshchínígíí ($2)",
+       "uctop": "(← bee nihoolʼá)",
+       "sp-contributions-newbies": "ádaaniidí akʼeʼeeshchínígíí tʼéiyá",
+       "sp-contributions-search": "akʼeʼeeshchínígíí hanishtá nisin",
+       "sp-contributions-username": "IP/Choyoołʼįįhí bizhiʼ:",
+       "sp-contributions-submit": "hanishtá",
+       "whatlinkshere": "linksígíí díí naaltsoos baa atiin",
+       "whatlinkshere-title": "linksígíí \"$1\" baa atiin",
+       "whatlinkshere-page": "Naaltsoos:",
+       "linkshere": "'''[[:$1]]''' baa atiinígíí:",
+       "nolinkshere": "'''\"[[:$1]]\"''' baa atiinígíí doo hólǫ́ǫ da.",
+       "nolinkshere-ns": "'''\"[[:$1]]\"''' baa atiinígíí doo hólǫ́ǫ da.",
+       "isredirect": "dah astsihígíí",
+       "istemplate": "bee álnééhí",
+       "isimage": "eʼelyaaígíí",
+       "whatlinkshere-prev": "{{PLURAL:$1|←|← $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|→|→ $1}}",
+       "whatlinkshere-links": "← linkígíí",
+       "whatlinkshere-hideredirs": "dah astsihígíí $1",
+       "whatlinkshere-hidetrans": "transclusions $1",
+       "whatlinkshere-hidelinks": "linksígíí $1",
+       "whatlinkshere-filters": "bee agháʼníldéhí",
+       "contribslink": "akʼeʼeeshchínígíí",
+       "blocklogentry": "[[$1]] bichʼą́ą́h niiníyá ($2 $3)",
+       "movearticle": "naaltsoos:",
+       "newtitle": "naaltsoos bizhiʼ ániidí:",
+       "move-watch": "shinááł",
+       "movepagebtn": "✔ bee lą́ ashłeeh",
+       "movepage-moved": "'''\"$1\" kʼad \"$2\" wolyé'''",
+       "revertmove": "ńdíídleeł!",
+       "metadata": "Metadataígíí",
+       "metadata-expand": "yishʼį́ nisin",
+       "metadata-collapse": "doo yishʼį́ nisin da",
+       "namespacesall": "tʼáá ałtso",
+       "monthsall": "tʼáá ałtso",
+       "watchlisttools-view": "łahgo ályaaígíí yishʼį́ nisin",
+       "watchlisttools-edit": "naaltsoos bikʼi déshʼį́į́ʼígíí bikáaʼgi hólónígíí yishʼį́ dóó łahgo áshłééh nisin",
+       "watchlisttools-raw": "XML yishʼį́ dóó łahgo áshłééh nisin",
+       "specialpages": "Naaltsoos spéshelígíí"
 }
index 0f26891..e44ec12 100644 (file)
@@ -29,6 +29,7 @@
        "tog-watchdefault": "Apondre las paginas que modifiqui e los fichièrs qu'impòrti a ma lista de seguiment",
        "tog-watchmoves": "Apondre las paginas e los fichièrs que tòrni nomenar a ma lista de seguiment",
        "tog-watchdeletion": "Apondre las paginas e los fichièrs que suprimissi de ma lista de seguiment",
+       "tog-watchrollback": "Apondre a ma lista de seguiment las paginas sus las qualas ai efectuat una revocacion",
        "tog-minordefault": "Considerar mas modificacions coma menoras per defaut",
        "tog-previewontop": "Far veire la previsualizacion al dessús de la zòna de modificacion",
        "tog-previewonfirst": "Far veire la previsualizacion al moment de la primièra edicion",
        "otherlanguages": "Autras lengas",
        "redirectedfrom": "(Redirigit dempuèi $1)",
        "redirectpagesub": "Pagina de redireccion",
+       "redirectto": "Redirigir cap a :",
        "lastmodifiedat": "Darrièr cambiament d'aquesta pagina lo $1, a $2.",
        "viewcount": "Aquesta pagina es estada consultada {{PLURAL:$1|un còp|$1 còps}}.",
        "protectedpage": "Pagina protegida",
        "jumptonavigation": "navigacion",
        "jumptosearch": "Recercar",
        "view-pool-error": "O planhèm, los servidors son subrecargats pel moment.\nTròp d’utilizaires cercan a accedir a aquesta pagina.\nEsperatz un moment abans d'ensajar d’accedir a aquesta pagina.\n\n$1",
+       "generic-pool-error": "O planhèm, los servidors son subrecargats pel moment.\nTròp d’utilizaires ensajan de consultar aquesta ressorsa.\nEsperatz un moment abans d'ensajar d’accedir a aquesta pagina.",
        "pool-timeout": "Relambi depassat pendent l'espèra del varrolh",
        "pool-queuefull": "La fila de trabalh es plena",
        "pool-errorunknown": "Error desconeguda",
+       "pool-servererror": "Lo servici de comptatge de la reserva es pas disponible ($1).",
        "aboutsite": "A prepaus de {{SITENAME}}",
        "aboutpage": "Project:A prepaus",
        "copyright": "Lo contengut es disponible jos licéncia $1 levat mencion contrària.",
        "hidetoc": "amagar",
        "collapsible-collapse": "Rebatre",
        "collapsible-expand": "Desplegar",
+       "confirmable-confirm": "Sètz segur{{GENDER:||a|(a)}} ?",
        "confirmable-yes": "Òc",
        "confirmable-no": "Non",
        "thisisdeleted": "Desiratz afichar o restablir $1?",
        "resetpass-submit-cancel": "Anullar",
        "resetpass-wrong-oldpass": "Senhal actual o temporari invalid.\nBenlèu ja avètz modificat vòstre senhal o demandat un senhal temporari novèl.",
        "resetpass-recycled": "Reïnicializatz vòstre senhal a quicòm mai que l’actual.",
+       "resetpass-temp-emailed": "Sètz connect{{GENDER:|at|ada}} amb un còde temporari provesit per corrièr electronic.\nPer acabar la connexion, vos cal provesir un senhal novèl aicí :",
        "resetpass-temp-password": "Senhal temporari :",
        "resetpass-abort-generic": "La modificacion del senhal es estada anulada per una extension.",
        "resetpass-expired": "Vòstre senhal a expirat. Provesissètz-ne un novèl per vos connectar.",
+       "resetpass-expired-soft": "Vòstre senhal a expirat, e deu èsser reïnicializat. Causissètz-ne un novèl ara, o clicatz sus « {{int:resetpass-submit-cancel}} » per o far mai tard.",
+       "resetpass-validity-soft": "Vòstre senhal es pas valid : $1\n\nCausissètz un senhal novèl ara, o clicatz sus « {{int:resetpass-submit-cancel}} » per lo reïnicializar mai tard.",
        "passwordreset": "Remesa a zèro del senhal",
        "passwordreset-text-one": "Emplenatz aqueste formulari per reïnicializar vòstre senhal.",
        "passwordreset-text-many": "{{PLURAL:$1|Completatz un d'aqueles camps per recebre un senhal temporari per corrièr electronic.}}",
        "passwordreset-emailsent-capture": "Un corrièr electronic de reïnicializacion senhal es estat mandat, qu'es afichat çaijós.",
        "passwordreset-emailerror-capture": "Un corrièr electronic de reïnicializacion de senhal es estat generat, qu'es afichat çaijós, mas lo mandadís a l'{{GENDER:$2|utilizaire}} a fracassat : $1",
        "changeemail": "Cambiar l'adreça electronica:",
-       "changeemail-header": "Cambiar l'adreça electronica del compte",
        "changeemail-text": "Emplenatz aqueste formulari per cambiar vòstra adreça de corrièr electronic. Vos cal entrar vòstre senhal per confirmar aqueste cambiament.",
        "changeemail-no-info": "Vos cal èsser connectat per aver accès a aquesta pagina.",
        "changeemail-oldemail": "Adreça electronica actuala:",
        "changeemail-none": "(pas cap)",
        "changeemail-password": "Vòstre senhal sus {{SITENAME}} :",
        "changeemail-submit": "Cambiar l'adreça electronica:",
-       "changeemail-cancel": "Anullar",
        "changeemail-throttled": "Avètz fach tròp de temptativas de connexion.\nEsperatz $1 abans d’ensajar tornarmai.",
        "resettokens": "Reïnicializar los getons",
        "resettokens-text": "Aici, podètz reïnicializar los getons que permeton d’accedir a d'unas donadas privadas associadas a vòstre compte.\n\nLo vos caldriá far se las avètz partejats accidentalament amb qualqu'un o se vòstre compte es estat compromés.",
        "preview": "Previsualizar",
        "showpreview": "Previsualizacion",
        "showdiff": "Veire los cambiaments",
+       "blankarticle": "<strong>Atencion :</strong> La pagina que creatz es voida.\nSe clicatz tornarmai sus « {{int:savearticle}} », la pagina serà creada sens cap de contengut.",
        "anoneditwarning": "'''Atencion :''' sètz pas identificat(ada).\nVòstra adreça IP serà enregistrada dins l’istoric d'aquesta pagina.",
        "anonpreviewwarning": "''Sètz pas identificat. Salvar enregistrarà vòstra adreça IP dins l’istoric de las modificacions de la pagina.''",
        "missingsummary": "'''Atencion :''' avètz pas modificat lo resumit de vòstra modificacion. Se clicatz tornarmai sul boton « Salvar », lo salvament serà fach sens avertiment mai.",
        "parser-template-recursion-depth-warning": "Limit de longor de la recursion del modèl depassat ($1)",
        "language-converter-depth-warning": "Limit de prigondor del convertissor de lenga depassada ($1)",
        "node-count-exceeded-category": "Paginas ont nombre de nosèls es depassat",
-       "node-count-exceeded-warning": "Pagina depassant lo nombre de nosèls",
+       "node-count-exceeded-category-desc": "Aquesta pagina depassa lo nombre maximal de nosèls.",
+       "node-count-exceeded-warning": "Pagina que depassa lo nombre de nosèls",
        "expansion-depth-exceeded-category": "Paginas ont la prigondor d'espandiment es depassada",
+       "expansion-depth-exceeded-category-desc": "La pagina depassa la prigondor d’espandiment maximala.",
        "expansion-depth-exceeded-warning": "Pagina depassant la prigondor d'espandiment",
        "parser-unstrip-loop-warning": "Bocla pas desmontabla detectada",
        "parser-unstrip-recursion-limit": "Limit de recursion pas desmontable depassat ($1)",
        "rev-deleted-event": "(entrada suprimida)",
        "rev-deleted-user-contribs": "[nom d'utilizaire o adreça IP suprimida - modificacion amagada sus las contribucions]",
        "rev-deleted-text-permission": "Aquesta version de la pagina es estada '''escafada'''.\nI pòt aver de detalhs dins lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal dels escafaments].",
+       "rev-suppressed-text-permission": "Aquesta version de la page es estada <strong>suprimida</strong>.\nLos detalhs se tròban dins lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de las supressions].",
        "rev-deleted-text-unhide": "Aquesta version de la pagina es estada '''escafada'''.\nI pòt aver mai de detalhs dins [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} lo jornal dels escafaments].\nComa administrator, podètz encara [$1 veire aquesta version] s'o volètz.",
        "rev-suppressed-text-unhide": "Aquesta version de la pagina es estada '''suprimida'''.\nI pòt aver mai de detalhs dins [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} lo jornal de las supressions].\nComa administrator, podètz encara [$1 veire aquesta version] s'o volètz.",
        "rev-deleted-text-view": "Aquesta version de la pagina es estada '''escafada'''.\nLa podètz visualizar ; de detalhs son disponibles dins lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal dels escafaments].",
        "revdelete-selected-text": "{{PLURAL:$1|Revision seleccionada|Revisions seleccionadas}} de [[:$2]] :",
        "revdelete-selected-file": "{{PLURAL:$1|Version de fichièr seleccionada|Versions de fichièr seleccionadas}} de [[:$2]] :",
        "logdelete-selected": "{{PLURAL:$1|Eveniment d'istoric seleccionat|Eveniments d'istoric seleccionats}} :",
+       "revdelete-text-text": "Las revisions suprimidas contunharàn d'aparéisser dins l’istoric de la pagina, mas una partida de lor contengut serà inaccessibla al public.",
+       "revdelete-text-file": "Las versions de fichièr suprimidas contunharàn d'aparéisser dins l’istoric dels fichièrs, mas una partida de lor contengut serà indisponibla al public.",
+       "logdelete-text": "Los eveniments del jornal suprimits contunharàn d'aparéisser dins los jornals, mas una partida de lor contengut serà indisponibla al public.",
+       "revdelete-text-others": "Los autres administrators seràn totjorn en mesura d'accedir al contengut amagat e de lo restablir, levat se de restriccions suplementàrias son fixadas.",
        "revdelete-confirm": "Confirmatz que volètz efectuar aquesta accion, que ne comprenètz las consequéncias, e qu'o fasètz en acòrd amb [[{{MediaWiki:Policy-url}}|las règlas]].",
        "revdelete-suppress-text": "La supression deu èsser utilizada '''sonque''' dins los cases seguents :\n* Informacions potencialament difamatòrias\n* Informacions personalas inapropriadas\n*: ''adreça, numèro de telefòn, numèro de seguretat sociala, ...''",
        "revdelete-legend": "Metre en plaça de restriccions de version :",
        "mergehistory-empty": "Cap de revision pòt pas èsser fusionada.",
        "mergehistory-success": "$3 {{PLURAL:$3|revision|revisions}} de [[:$1]] {{PLURAL:$3|fusionada|fusionadas}} amb succès amb [[:$2]].",
        "mergehistory-fail": "Impossible de procedir a la fusion dels istorics. Seleccionatz  tornamai la pagina e mai los paramètres de data.",
+       "mergehistory-fail-toobig": "Impossible d’efectuar la fusion de l’istoric perque un nombre de {{PLURAL:$1|revisions}} superior al limit de $1 deuriá èsser desplaçat.",
        "mergehistory-no-source": "La pagina d'origina $1 existís pas.",
        "mergehistory-no-destination": "La pagina de destinacion $1 existís pas.",
        "mergehistory-invalid-source": "La pagina d’origina deu aver un títol valid.",
        "mergehistory-same-destination": "Las paginas d'origina e de destinacion pòdon pas èsser la meteissa",
        "mergehistory-reason": "Motiu :",
        "mergelog": "Istoric de las fusions",
-       "pagemerge-logentry": "[[$1]] fusionada amb [[$2]] (revisions fins al $3)",
        "revertmerge": "Separar",
        "mergelogpagetext": "Vaquí, çaijós, la lista de las fusions las mai recentas de l'istoric d'una pagina amb una autra.",
        "history-title": "$1 : Istoric de las versions",
        "editundo": "desfar",
        "diff-empty": "(Pas cap de diferéncia)",
        "diff-multi-sameuser": "({{PLURAL:$1|Una revision intermediària pel meteis utilizaire pas afichada|$1 revisions intermediàrias pel meteis utilizaire pas afichadas}})",
+       "diff-multi-otherusers": "({{PLURAL:$1|Una revision intermediària|$1 revisions intermediàrias}} per {{PLURAL:$2|un autre utilizaire|$2 utilizaires}} pas {{PLURAL:$1|afichada|afichadas}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Una revision intermediària amagada|$1 revisions intermediàrias amagadas}}) per ({{PLURAL:$2|un utilizaire pas afichada|$2 utilizaires pas afichadas}})",
        "difference-missing-revision": "{{PLURAL:$2|Una revision|$2 revisions}} d'aquesta diferéncia ($1) {{PLURAL:$2|es pas estada trobada|son pas estadas trobadas}}.\n\nAquò se produtz en general en seguent un ligam de diferéncia obsolèta cap a una pagina qu'es estada suprimada.\nPodètz trobar de detalhs dins lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de las supressions].",
        "searchresults": "Resultats de la recèrca",
        "searchall": "Totes",
        "showingresults": "Afichatge de <b>$1</b> resultat{{PLURAL:$1||s}} a partir del n°<b>$2</b>.",
        "showingresultsinrange": "Afichar çaijós fins a {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resultats}} dins la seria #<strong>$2</strong> a #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Resultat '''$1'''|Resultats '''$1 - $2'''}} de '''$3''' per '''$4'''",
        "search-nonefound": "I a pas cap de resultat correspondent a la requèsta.",
        "powersearch-legend": "Recèrca avançada",
        "powersearch-ns": "Recercar dins los espacis de nom :",
        "powersearch-togglelabel": "Marcar :",
        "powersearch-toggleall": "Tot",
        "powersearch-togglenone": "Pas cap",
+       "powersearch-remember": "Se remembrar de la seleccion per las recèrcas venentas",
        "search-external": "Recèrca extèrna",
        "searchdisabled": "La recèrca sus {{SITENAME}} es desactivada.\nEn esperant la reactivacion, podètz efectuar una recèrca via Google.\nAtencion, lor indexacion de contengut {{SITENAME}} benlèu es pas a jorn.",
        "search-error": "Una error s'es producha en recercant : $1",
        "preferences": "Preferéncias",
        "mypreferences": "Preferéncias",
        "prefs-edits": "Nombre d’edicions :",
-       "prefsnologintext2": "$1 per definir las preferéncias d'utilizaire.",
+       "prefsnologintext2": "Connectatz-vos per modificar vòstras preferéncias.",
        "prefs-skin": "Aparéncia",
        "skin-preview": "Previsualizar",
        "datedefault": "Pas cap de preferéncia",
        "prefs-tokenwatchlist": "Geton",
        "prefs-diffs": "Diferéncias",
        "prefs-help-prefershttps": "Aquesta preferéncia serà efectiva al moment de vòstra connexion que ven.",
+       "prefs-tabs-navigation-hint": "Astúcia : Podètz utilizar las flèchas d'esquèrra e de drecha per navigar entre los onglets.",
        "email-address-validity-valid": "L'adreça electronica sembla bona",
        "email-address-validity-invalid": "entrar una adreça electronica valida",
        "userrights": "Gestion dels dreches d'utilizaire",
        "right-move": "Tornar nomenar de paginas",
        "right-move-subpages": "Desplaçar de paginas amb lor sospaginas",
        "right-move-rootuserpages": "Tornar nomenar las paginas de l’utilizaire de banca.",
+       "right-move-categorypages": "Renomenar de paginas de categoria",
        "right-movefile": "Desplaçar los fichièrs",
        "right-suppressredirect": "Crear pas de redireccion dempuèi la pagina anciana en renomenant la pagina",
        "right-upload": "Telecargar de fichièrs",
        "right-deletedtext": "Veire lo tèxte suprimit e las diferéncias entre las versions suprimidas",
        "right-browsearchive": "Recercar de paginas suprimidas",
        "right-undelete": "Restablir una pagina",
-       "right-suppressrevision": "Examinar e restablir las revisions amagadas als administrators",
+       "right-suppressrevision": "Afichar, amagar e desamagar de revisions especificas de paginas per quin utilizaire que siá.",
+       "right-viewsuppressed": "Afichar las revisions amagadas per quin utilizaire que siá",
        "right-suppressionlog": "Veire los jornals privats",
        "right-block": "Blocar d'autres utilizaires en escritura",
        "right-blockemail": "Empachar un utilizaire de mandar de corrièrs electronics",
        "action-createpage": "crear de paginas",
        "action-createtalk": "crear de paginas de discussion",
        "action-createaccount": "crear aqueste compte d'utilizaire",
+       "action-history": "afichar l’istoric d'aquesta pagina",
        "action-minoredit": "marcar aqueste cambiament coma menor",
        "action-move": "tornar nomenar aquesta pagina",
        "action-move-subpages": "tornar nomenar aquesta pagina e sas sospaginas",
        "action-move-rootuserpages": "tornar nomenar las paginas de l’utilizaire de banca.",
+       "action-move-categorypages": "Renomenar de paginas de categoria",
        "action-movefile": "tornar nomenar aqueste fichièr",
        "action-upload": "importar aqueste fichièr",
        "action-reupload": "espotir aqueste fichièr existent",
        "recentchanges-label-plusminus": "La talha de la pagina a cambiat d'aqueste nombre d’octets.",
        "recentchanges-legend-heading": "'''Legenda :'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (veire tanben la [[Special:NewPages|lista de las paginas novèlas]]).",
-       "rcnotefrom": "Çaijós las modificacions efectuadas dempuèi lo <strong>$2</strong> (fins a <strong>$1</strong> afichats).",
+       "rcnotefrom": "Çaijós {{PLURAL:$5|la modificacion efectuada|las modificacions efectuadas}} dempuèi lo <strong>$3, $4</strong> (afichadas fins a <strong>$1</strong>).",
        "rclistfrom": "Afichar las modificacions novèlas dempuèi lo $3 $2",
        "rcshowhideminor": "$1 los cambiaments menors",
        "rcshowhideminor-show": "Afichar",
        "fileexists-shared-forbidden": "Un fichièr amb lo meteis nom existís ja dins la banca de donadas comuna.\nS'o volètz importar tornamai, tornatz en rèire e importatz-lo jos un autre nom. [[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Aqueste fichièr es un doble {{PLURAL:$1|del fichièr seguent|dels fichièrs seguents}} :",
        "file-deleted-duplicate": "Un fichièr identic a aqueste ([[:$1]]) ja es estat suprimit. Vos caldriá verificar lo jornal de las supressions d'aqueste fichièr abans de la tornar telecargar.",
+       "file-deleted-duplicate-notitle": "Un fichièr identic a aqueste fichièr es ja estat suprimit amai lo títol. \nVos caldriá demandar a qualqu'un la possibilitat de verificar lo jornal d'aqueste fichièr suprimit per tal d'examinar la situacion  abans de l'importar tornarmai.",
        "uploadwarning": "Atencion !",
        "uploadwarning-text": "Modificatz la descripcion del fichièr e ensajatz tornarmai.",
        "savefile": "Salvar lo fichièr",
        "license": "Licéncia&nbsp;:",
        "license-header": "Publicat jos licéncia(s)",
        "nolicense": "Cap de licéncia seleccionada",
+       "licenses-edit": "Modificar las opcions de licéncia",
        "license-nopreview": "(Previsualizacion impossibla)",
-       "upload_source_url": " (una URL valida e accessibla publicament)",
-       "upload_source_file": " (un fichièr sus vòstre ordenador)",
+       "upload_source_url": "(lo fichièr qu'avètz causit dempuèi una URL valida e accessibla publicament)",
+       "upload_source_file": "(vòstre fichièr causit dempuèi vòstre ordenador)",
+       "listfiles-delete": "suprimir",
        "listfiles-summary": "Aquesta pagina especiala permet de far la lista de totes los fichièrs importats.",
        "listfiles_search_for": "Recèrca del mèdia nomenat :",
        "imgfile": "fichièr",
        "randomincategory": "Pagina a l'azard dins la categoria",
        "randomincategory-invalidcategory": "« $1 » es pas un nom de categoria valid.",
        "randomincategory-nopages": "I a pas cap de pagina dins [[:Category:$1]].",
+       "randomincategory-category": "Categoria :",
+       "randomincategory-legend": "Pagina a l'azard dins la categoria",
        "randomredirect": "Una pagina de redireccion a l'azard",
        "randomredirect-nopages": "I a pas cap de redireccion dins l'espaci de nom « $1 ».",
        "statistics": "Estatisticas",
        "statistics-header-pages": "Estatisticas de las paginas",
        "statistics-header-edits": "Estatisticas sus las edicions",
-       "statistics-header-views": "Estatisticas sus las visitas",
        "statistics-header-users": "Estatisticas d'utilizaire",
        "statistics-header-hooks": "Autras estatisticas",
        "statistics-articles": "Paginas de contengut",
        "statistics-files": "Fichièrs importats",
        "statistics-edits": "Modificacions de paginas dempuèi que {{SITENAME}} foguèt installat",
        "statistics-edits-average": "Modificacions mejanas per pagina",
-       "statistics-views-total": "Visitas totalas",
-       "statistics-views-total-desc": "Las vistas de las paginas non existentas e de las paginas especialas son pas inclusas",
-       "statistics-views-peredit": "Visitas per modificacions",
        "statistics-users": "[[Special:ListUsers|Utilizaires]] enregistrats",
        "statistics-users-active": "Utilizaires actius",
        "statistics-users-active-desc": "Utilizaires qu'an fach al mens una accion durant {{PLURAL:$1|lo darrièr jorn|los $1 darrièrs jorns}}",
-       "statistics-mostpopular": "Paginas mai consultadas",
        "pageswithprop": "Paginas amb una proprietat de pagina",
        "pageswithprop-legend": "Paginas amb una proprietat de pagina",
        "pageswithprop-text": "Aquesta pagina fa la lista de las paginas qu'utilizan una proprietat de pagina particulara.",
        "uncategorizedtemplates": "Modèls sens categoria",
        "unusedcategories": "Categorias inutilizadas",
        "unusedimages": "Imatges orfanèls",
-       "popularpages": "Paginas mai consultadas",
        "wantedcategories": "Categorias mai demandadas",
        "wantedpages": "Paginas mai demandadas",
        "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]].",
+       "wantedfiletext-cat-noforeign": "Los fichièrs seguents son utilizats mas existisson pas. Amai, las paginas qu'intègran los fichièrs qu'existisson pas son listats dins [[:$1]].",
        "wantedfiletext-nocat": "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>.",
+       "wantedfiletext-nocat-noforeign": "Los fichièrs seguents son utilizats mas existisson pas.",
        "wantedtemplates": "Modèls demandats",
        "mostlinked": "Paginas mai ligadas",
        "mostlinkedcategories": "Categorias mai utilizadas",
        "booksources": "Obratges de referéncia",
        "booksources-search-legend": "Recercar demest d'obratges de referéncia",
        "booksources-isbn": "ISBN :",
-       "booksources-go": "Validar",
+       "booksources-search": "Recercar",
        "booksources-text": "Vaquí una lista de ligams cap a d’autres sites que vendon de libres nòus e d’ocasion e suls quals trobaretz benlèu d'entresenhas suls obratges que cercatz. {{SITENAME}} es pas ligada a cap d'aquestas societats, a pas l’intencion de ne far la promocion.",
        "booksources-invalid-isbn": "Lo numèro ISBN balhat sembla pas èsser valid ; verificatz s'avètz fach una error al moment de la còpia dempuèi la font.",
        "specialloguserlabel": "Autor :",
        "emailpagetext": "Podètz utilizar lo formulari çaijós per mandar un corrièr electronic a {{GENDER:$1|aqueste utilizaire|aquesta utilizaira}}.\nL'adreça electronica qu'avètz indicada dins [[Special:Preferences|vòstras preferéncias]] apareisserà dins lo camp « Expeditor » de vòstre messatge. E mai, lo destinatari vos poirà respondre dirèctament.",
        "defemailsubject": "{{SITENAME}} Corrièl de l'utilizaire « $1 »",
        "usermaildisabled": "Lo mandadís de corrièrs electronics entre utilizairers es desactivat",
-       "usermaildisabledtext": "Podètz pas mandar de corrièrs electronics a d'autres utilizaires sur aquel wiki",
+       "usermaildisabledtext": "Podètz pas mandar de corrièrs electronics a d'autres utilizaires sus aquel wiki",
        "noemailtitle": "Pas d'adreça electronica",
        "noemailtext": "Aqueste utilizaire a pas especificat d'adreça electronica valida.",
        "nowikiemailtext": "Aqueste utilizaire a causit de recebre pas de corrièr electronic de la part d'autres utilizaires.",
        "mywatchlist": "Lista de seguiment",
        "watchlistfor2": "Per $1 ($2)",
        "nowatchlist": "Vòstra lista de seguiment conten pas cap d'article.",
-       "watchlistanontext": "Per poder afichar o editar los elements de vòstra lista de seguiment, vos cal vos $1.",
+       "watchlistanontext": "Connectatz-vos per visualizar o modificar los elements de vòstra lista de seguiment.",
        "watchnologin": "Vos sètz pas identificat(ada)",
        "addwatch": "Apondre a la lista de seguiment",
        "addedwatchtext": "La pagina « [[:$1]] » es estada aponduda a vòstra [[Special:Watchlist|lista de seguiment]]. Las modificacions venentas d'aquesta pagina e de la pagina de discussion associada i seràn repertoriadas.",
+       "addedwatchtext-short": "La pagina « $1 » es estada aponduda a vòstra lista de seguiment.",
        "removewatch": "Suprimir de la lista de seguiment",
        "removedwatchtext": "La pagina « [[:$1]] » es estada levada de vòstra [[Special:Watchlist|lista de seguiment]].",
+       "removedwatchtext-short": "La pagina « $1 » es estada suprimida de vòstra lista de seguiment.",
        "watch": "Seguir",
        "watchthispage": "Seguir aquesta pagina",
        "unwatch": "Arrestar de seguir",
        "watchlist-details": "I a {{PLURAL:$1|$1 pagina|$1 paginas}} dins vòstra lista de seguiment, sens comptar las paginas de discussion.",
        "wlheader-enotif": "La notificacion per corrièr electronic es activada.",
        "wlheader-showupdated": "Las paginas que son estadas modificadas dempuèi vòstra darrièra visita son afichadas en '''gras'''.",
-       "wlnote": "Çaijós {{PLURAL:$1|se tròba la darrièra modificacion efectuada|se tròban las $1 darrièras modificacions efectuadas}} pendent {{PLURAL:$2|la darrièra ora|las '''$2''' darrièras oras}} dempuèi $3, $4.",
-       "wlshowlast": "Far veire las darrièras $1 oras, los darrièrs $2 jorns, o $3.",
+       "wlnote": "Çaijós {{PLURAL:$1|figura la darrièra modificacion efectuada|figuran las <strong>$1</strong> darrièras modificacions efectuadas}} pendent {{PLURAL:$2|la darrièra ora|las <strong>$2</strong> darrièras oras}}, dempuèi $3, $4.",
+       "wlshowlast": "Far veire las darrièras $1 oras, los darrièrs $2 jorns, o .",
        "watchlist-options": "Opcions de la lista de seguiment",
        "watching": "Seguit...",
        "unwatching": "Fin del seguit...",
        "exbeforeblank": "lo contengut abans blanquiment èra :'$1'",
        "delete-confirm": "Escafar «$1»",
        "delete-legend": "Escafar",
-       "historywarning": "'''Atencion :''' La pagina que s�tz a mand de suprimir a un istoric que conten aproximadament $1 {{PLURAL:$1|revision|revisions}} :",
+       "historywarning": "<strong>Atencion :</strong> la pagina que sètz a mand de suprimir a un istoric amb $1 {{PLURAL:$1|version|versions}} :",
        "confirmdeletetext": "Sètz a mand de suprimir una pagina o un fichièr, e mai totas sas versions anterioras istorizadas.\nConfirmatz qu'es plan çò que volètz far, que ne comprenètz las consequéncias e que fasètz aquò en acòrdi amb las [[{{MediaWiki:Policy-url}}|règlas intèrnas]].",
        "actioncomplete": "Accion efectuada",
        "actionfailed": "L’accion a fracassat",
        "delete-edit-reasonlist": "Modifica los motius de la supression",
        "delete-toobig": "Aquesta pagina dispausa d'un istoric important, depassant {{PLURAL:$1|revision|revisions}}.\nLa supression de talas paginas es estada limitada per evitar de perturbacions accidentalas de {{SITENAME}}.",
        "delete-warning-toobig": "Aquesta pagina dispausa d'un istoric important, depassant {{PLURAL:$1|revision|revisions}}.\nLa suprimir pòt perturbar lo foncionament de la banca de donada de {{SITENAME}}.\nD'efectuar amb prudéncia.",
+       "deleteprotected": "Podètz pas suprimir aquesta pagina perque es estada protegida.",
        "rollback": "Anullar las modificacions",
        "rollback_short": "Anullar",
        "rollbacklink": "anullar",
        "protect-othertime": "Autra expiracion :",
        "protect-othertime-op": "Autra expiracion",
        "protect-existing-expiry": "Durada d’expiracion existenta : $2 a $3",
+       "protect-existing-expiry-infinity": "Relambi d’expiracion existent : infinit",
        "protect-otherreason": "Motiu suplementari o autre :",
        "protect-otherreason-op": "Autra rason",
        "protect-dropdown": "*Motius de proteccion mai corrents\n** Vandalisme excessiu\n** Spam excessiu\n** Guèrra d'edicion\n** Pagina de trafic fòrt",
        "autoblockid": "Blocatge automatic #$1",
        "block": "Blocar un utilizaire",
        "unblock": "Desblocar un utilizaire",
-       "blockip": "Blocar en escritura",
+       "blockip": "Blocar l’{{GENDER:$1|utilizaire|utilizaira}}",
        "blockip-legend": "Blocar en escritura",
        "blockiptext": "Utilizatz lo formulari çaijós per blocar l'accès a las modificacions a partir d'una adreça IP especifica o d'un nom d'utilizaire.\nUna tala mesura deu pas èsser presa pas que per empachar lo vandalisme e en acòrdi amb las [[{{MediaWiki:Policy-url}}|règlas intèrnas]].\nDonatz çaijós un motiu precís (per exemple en citant las paginas que son estadas vandalizadas).",
        "ipaddressorusername": "Adreça IP o nom d’utilizaire :",
        "ipb-unblock-addr": "Desblocar $1",
        "ipb-unblock": "Desblocar un compte d'utilizaire o una adreça IP",
        "ipb-blocklist": "Vejatz los blocatges existents",
-       "ipb-blocklist-contribs": "Contribucions per $1",
+       "ipb-blocklist-contribs": "Contribucions per {{GENDER:$1|$1}}",
        "unblockip": "Desblocar un utilizaire o una adreça IP",
        "unblockiptext": "Utilizatz lo formulari çaijós per restablir l'accès en escritura\na partir d'una adreça IP precedentament blocada.",
        "ipusubmit": "Suprimir aqueste blocatge",
        "movenotallowedfile": "Avètz pas la permission de desplaçar los fichièrs.",
        "cant-move-user-page": "Avètz pas la permission de tornar nomenar de paginas d'utilizaires raices sus aqueste wiki.",
        "cant-move-to-user-page": "Avètz pas la permission de tornar nomenar una pagina cap a una pagina d'utilizaire (a l'excepcion d'una sospagina).",
+       "cant-move-category-page": "Avètz pas la permission de renomenar las paginas de categorias.",
        "newtitle": "Títol novèl",
        "move-watch": "Seguir aquesta pagina",
        "movepagebtn": "Tornar nomenar l'article",
        "import": "Importar de paginas",
        "importinterwiki": "Impòrt interwiki",
        "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-interwiki-history": "Copiar totas las versions de l'istoric d'aquesta pagina",
        "import-interwiki-templates": "Enclure totes los modèls",
        "import-interwiki-submit": "Importar",
        "import-invalid-interwiki": "Impossible d'importar dempuèi lo wiki especificat.",
        "import-error-edit": "La pagina « $1 » es pas estada importada perque sètz pas autorizat a la modificar.",
        "import-error-create": "La pagina « $1 » es pas estada importada perque sètz pas autorizat a la crear.",
-       "import-error-invalid": "Pagina « $1 » es pas importada perque son nom es pas valid.",
+       "import-error-invalid": "Pagina « $1 » es pas importada perque lo nom amb lo qual seriá estada importada es pas valid sus aqueste wiki.",
        "import-options-wrong": "{{PLURAL:$2|Marrida opcion|Marridas opcions}} : <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "La pagina raiç provesida es un títol invalid.",
        "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 (telecargament) [[$1]]",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versions}}",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|revision importada|revisions importadas}}",
        "import-logentry-interwiki": "a importat (transwiki) $1",
-       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|version|versions}} dempuèi $2",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision importada|revisions importadas}} dempuèi $2",
        "javascripttest": "Tèst de JavaScript",
        "javascripttest-title": "Execucion dels tèsts $1",
        "javascripttest-pagetext-noframework": "Aquesta pagina es reservada per l'execucion dels tèsts JavaScript.",
        "pageinfo-robot-policy": "Indexacion per robòts",
        "pageinfo-robot-index": "Autorizada",
        "pageinfo-robot-noindex": "Interdicha",
-       "pageinfo-views": "Nombre de vistas",
        "pageinfo-watchers": "Nombre de contributors qu'an la pagina dins lor lista de seguiment",
        "pageinfo-few-watchers": "Mens de $1 {{PLURAL:$1|observator|observators}}",
        "pageinfo-redirects-name": "Nombre de redireccions cap a aquesta pagina",
        "newimages-summary": "Aquesta pagina especiala aficha los darrièrs fichièrs importats.",
        "newimages-legend": "Filtre",
        "newimages-label": "Nom del fichièr (o una partida d'aqueste) :",
+       "newimages-showbots": "Afichar los impòrts per de robòts",
        "noimages": "Cap d'imatge d'afichar pas.",
        "ilsubmit": "Cercar",
        "bydate": "per data",
        "exif-urgency-low": "Febla ($1)",
        "exif-urgency-high": "Nauta ($1)",
        "exif-urgency-other": "Urgéncia definida per l'utilizaire ($1)",
-       "watchlistall2": "tot",
        "namespacesall": "Totes",
        "monthsall": "totes",
        "confirmemail": "Confirmar l'adreça de corrièr electronic",
        "scarytranscludetoolong": "[L’URL es tròp longa]",
        "deletedwhileediting": "'''Atencion''' : aquesta pagina es estada suprimida aprèp qu'avètz començat de la modificar !",
        "confirmrecreate": "L'utilizaire [[User:$1|$1]] ([[User talk:$1|talk]]) a suprimit aquesta pagina, alara que l'aviatz començat d'editar, pel motiu seguent:\n: ''$2''\nConfirmatz que desiratz tornar crear aqueste article.",
+       "confirmrecreate-noreason": "L'utilizaire [[User:$1|$1]] ([[User talk:$1|Discussion]]) a suprimit aquesta pagina, mentre qu'aviatz començat de la modificar. Confirmatz que desiratz tornar crear aquesta pagina.",
        "recreate": "Tornar crear",
        "confirm_purge_button": "Confirmar",
        "confirm-purge-top": "Volètz refrescar aquesta pagina (purgar l'escondedor) ?",
        "autosumm-replace": "Resumit automatic : contengut remplaçat per « $1 ».",
        "autoredircomment": "Redireccion cap a [[$1]]",
        "autosumm-new": "Creacion de la pagina amb « $1 »",
+       "autosumm-newblank": "Pagina voida creada",
        "size-bytes": "$1 o",
        "size-kilobytes": "$1 Ko",
        "size-megabytes": "$1 Mo",
        "watchlistedit-raw-done": "Vòstra lista de seguiment es estada mesa a jorn.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Una pagina es estada aponduda|$1 paginas son estadas apondudas}} :",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Una pagina es estada levada|$1 paginas son estadas levadas}} :",
+       "watchlistedit-clear-title": "Lista de seguiment voidada",
+       "watchlistedit-clear-legend": "Escafar la lista de seguiment",
+       "watchlistedit-clear-explain": "Totes los títols seràn suprimits de vòstra lista de seguiment",
+       "watchlistedit-clear-titles": "Títols :",
+       "watchlistedit-clear-submit": "Escafar la lista de seguiment (aquò es permanent !)",
+       "watchlistedit-clear-done": "Vòstra lista de seguiment es estada escafada.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|Un títol es estat levat|$1 títols son estats levats}} :",
+       "watchlistedit-too-many": "I a tròp de paginas d'afichar aicí.",
+       "watchlisttools-clear": "Escafar la lista de seguiment",
        "watchlisttools-view": "Lista de seguiment",
        "watchlisttools-edit": "Veire e modificar la lista de seguiment",
        "watchlisttools-raw": "Modificar la lista (mòde brut)",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussion]])",
        "unknown_extension_tag": "Balisa d'extension « $1 » desconeguda",
        "duplicate-defaultsort": "Atencion : La clau de triada per defaut « $2 » espotís la mai recenta « $1 ».",
+       "duplicate-displaytitle": "<strong>Atencion :</strong> Lo títol d'afichatge «$2» remplaça l'ancian títol d'afichatge «$1».",
        "version": "Version",
        "version-extensions": "Extensions installadas",
        "version-skins": "Abilhatges installats",
        "version-hook-name": "Nom del croquet",
        "version-hook-subscribedby": "Definit per",
        "version-version": "(Version $1)",
+       "version-no-ext-name": "[sens nom]",
        "version-license": "Licéncia de MediaWiki",
        "version-ext-license": "Licéncia",
        "version-ext-colheader-name": "Extensions",
+       "version-skin-colheader-name": "Aparéncia",
+       "version-ext-colheader-version": "Version",
        "version-ext-colheader-license": "Licéncia",
        "version-ext-colheader-description": "Descripcion",
        "version-ext-colheader-credits": "Autors",
        "htmlform-no": "Non",
        "htmlform-yes": "Òc",
        "htmlform-chosen-placeholder": "Causir una opcion",
+       "htmlform-cloner-create": "Apondre encara",
+       "htmlform-cloner-delete": "Suprimir",
+       "htmlform-cloner-required": "Una valor al mens es obligatòria.",
        "sqlite-has-fts": "$1 amb recèrca en tèxte integral suportada",
        "sqlite-no-fts": "$1 sens recèrca en tèxte integral suportada",
        "logentry-delete-delete": "$1 {{GENDER:$2|a suprimit}} la pagina $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|a modificat}} l'apartenéncia al grop per $3 de $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|a modificat}} l'apartenéncia al grop per $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|es estat promolgut}} automaticament de $4 a $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|a mandat}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|a telecargat}} una novèla version de $3",
+       "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",
        "expand_templates_remove_nowiki": "Suprimís los marcadors <nowiki> dins lo resultat",
        "expand_templates_generate_xml": "Veire l'arborescéncia XML",
        "expand_templates_generate_rawhtml": "Afichar lo HTML brut",
-       "expand_templates_preview": "Previsualizacion"
+       "expand_templates_preview": "Previsualizacion",
+       "pagelanguage": "Selector de lenga de la pagina",
+       "pagelang-name": "Pagina",
+       "pagelang-language": "Lenga",
+       "pagelang-use-default": "Utilizar la lenga per defaut",
+       "pagelang-select-lang": "Seleccionar la lenga",
+       "right-pagelang": "Cambiar la lenga de la pagina",
+       "action-pagelang": "cambiar la lenga de la pagina",
+       "log-name-pagelang": "Traçar los cambiaments de lenga",
+       "log-description-pagelang": "Aquò es un jornal dels cambiaments dins las lengas de las paginas.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a cambiat}} la lenga de la pagina $3 de $4 a $5.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activat)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactivat''')",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 octet|$1 octets}} ($2 ; $3%)",
+       "mediastatistics-table-mimetype": "Tipe MIME",
+       "mediastatistics-table-extensions": "Extensions possiblas",
+       "mediastatistics-table-count": "Nombre de fichièrs",
+       "mediastatistics-table-totalbytes": "Talha combinada",
+       "mediastatistics-header-unknown": "Desconegut",
+       "mediastatistics-header-bitmap": "Imatges Bitmap",
+       "mediastatistics-header-drawing": "Dessenhs (imatges vectorials)",
+       "mediastatistics-header-audio": "Àudio",
+       "mediastatistics-header-video": "Vidèos",
+       "mediastatistics-header-multimedia": "Mèdia ric",
+       "mediastatistics-header-office": "Burotica",
+       "mediastatistics-header-text": "Textual",
+       "mediastatistics-header-executable": "Executables",
+       "mediastatistics-header-archive": "Formats compressats",
+       "json-error-syntax": "Error de sintaxi"
 }
index 572e4ed..aae5efd 100644 (file)
@@ -1,70 +1,72 @@
 {
-    "@metadata": {
-        "authors": [
-            "Diroma Elias (on om.wikipedia.org)",
-            "Johannes Rohr (on om.wikipedia.org)",
-            "Malafaya",
-            "Node ue"
-        ]
-    },
-    "sunday": "Dilbata",
-    "monday": "Wiixata",
-    "tuesday": "Qibxata",
-    "wednesday": "Roobii",
-    "thursday": "Kamiisa",
-    "friday": "Jimaata",
-    "saturday": "Sanbata",
-    "sun": "Dil",
-    "mon": "Wix",
-    "tue": "Qib",
-    "wed": "Rob",
-    "thu": "Kam",
-    "fri": "Jim",
-    "sat": "San",
-    "january": "Amajjii",
-    "february": "Guraandhala",
-    "march": "Bitooteessa",
-    "april": "Elba",
-    "may_long": "Caamsa",
-    "june": "Waxabajjii",
-    "july": "Adooleessa",
-    "august": "Hagayya",
-    "september": "Fuulbana",
-    "october": "Onkololeessa",
-    "november": "Sadaasa",
-    "december": "Muddee",
-    "about": "Wa'ee",
-    "article": "Kutaa",
-    "and": "&#32;fi",
-    "help": "Qarqarsa",
-    "go": "Fufi",
-    "history": "Seena",
-    "history_short": "Seena",
-    "edit": "Barressu",
-    "aboutsite": "Wa'ee {{SITENAME}}",
-    "aboutpage": "Project:Wa'ee",
-    "currentevents": "Gocha amma",
-    "edithelp": "Qarqarsa Barressu",
-    "mainpage": "Fuula Dura",
-    "mainpage-description": "Fuula Dura",
-    "yourname": "Maqaa-Tajajilamma:",
-    "yourdomainname": "Maqaa domain kankee:",
-    "gotaccountlink": "Seenu",
-    "accountcreated": "Accountiin banamerra",
-    "loginlanguagelabel": "Afaan: $1",
-    "yourtext": "Barrefama kee",
-    "yourdiff": "Garagarumma",
-    "yourrealname": "Maqaa Dhugaa:",
-    "yourlanguage": "Afaan:",
-    "yourvariant": "Jijjirama:",
-    "upload": "File Galchu",
-    "filerevert-comment": "Sababa:",
-    "filedelete-comment": "Sababa:",
-    "allarticles": "Kutta hunda",
-    "actioncomplete": "Gochaan dhumattera",
-    "deletecomment": "Sababa:",
-    "ipbreason": "Sababa:",
-    "movereason": "Sababa:",
-    "allmessagesname": "Maqaa",
-    "allmessages-language": "Afaan:"
+       "@metadata": {
+               "authors": [
+                       "Diroma Elias (on om.wikipedia.org)",
+                       "Johannes Rohr (on om.wikipedia.org)",
+                       "Malafaya",
+                       "Node ue",
+                       "Tumsaa"
+               ]
+       },
+       "sunday": "Dilbata",
+       "monday": "Wiixata",
+       "tuesday": "Qibxata",
+       "wednesday": "Roobii",
+       "thursday": "Kamiisa",
+       "friday": "Jimaata",
+       "saturday": "Sanbata",
+       "sun": "Dil",
+       "mon": "Wix",
+       "tue": "Qib",
+       "wed": "Rob",
+       "thu": "Kam",
+       "fri": "Jim",
+       "sat": "San",
+       "january": "Amajjii",
+       "february": "Guraandhala",
+       "march": "Bitooteessa",
+       "april": "Elba",
+       "may_long": "Caamsa",
+       "june": "Waxabajjii",
+       "july": "Adooleessa",
+       "august": "Hagayya",
+       "september": "Fuulbana",
+       "october": "Onkololeessa",
+       "november": "Sadaasa",
+       "december": "Muddee",
+       "about": "Wa'ee",
+       "article": "Kutaa",
+       "and": "&#32;fi",
+       "help": "Qarqarsa",
+       "go": "Fufi",
+       "history": "Seena",
+       "history_short": "Seena",
+       "edit": "Barressu",
+       "aboutsite": "Wa'ee {{SITENAME}}",
+       "aboutpage": "Project:Wa'ee",
+       "currentevents": "Gocha amma",
+       "edithelp": "Qarqarsa Barressu",
+       "mainpage": "Fuula Dura",
+       "mainpage-description": "Fuula Dura",
+       "yourname": "Maqaa-Tajajilamma:",
+       "yourdomainname": "Maqaa domain kankee:",
+       "gotaccountlink": "Seenu",
+       "accountcreated": "Accountiin banamerra",
+       "loginlanguagelabel": "Afaan: $1",
+       "yourtext": "Barrefama kee",
+       "yourdiff": "Garagarumma",
+       "yourrealname": "Maqaa Dhugaa:",
+       "yourlanguage": "Afaan:",
+       "yourvariant": "Jijjirama:",
+       "upload": "File Galchu",
+       "filerevert-comment": "Sababa:",
+       "filedelete-comment": "Sababa:",
+       "booksources-search": "Barbaadi",
+       "allarticles": "Kutta hunda",
+       "actioncomplete": "Gochaan dhumattera",
+       "deletecomment": "Sababa:",
+       "ipbreason": "Sababa:",
+       "movereason": "Sababa:",
+       "allmessagesname": "Maqaa",
+       "allmessages-language": "Afaan:"
 }
index 074b9c7..e88863f 100644 (file)
@@ -28,6 +28,7 @@
        "tog-watchdefault": "ମୁଁ ବଦଳେଇଥିବା ପୃଷ୍ଠା ଏବଂ ଫାଇଲଗୁଡ଼ିକୁ ମୋର ଦେଖଣାତାଲିକାରେ ଯୋଡ଼ନ୍ତୁ",
        "tog-watchmoves": "ମୁଁ ଘୁଞ୍ଚାଇଥିବା ପୃଷ୍ଠା ଏବଂ ଫାଇଲଗୁଡ଼ିକୁ ମୋର ଦେଖଣାତାଲିକାରେ ଯୋଡ଼ନ୍ତୁ",
        "tog-watchdeletion": "ମୁଁ ଲିଭାଇଥିବା ପୃଷ୍ଠା ଏବଂ ଫାଇଲଗୁଡ଼ିକୁ ମୋର ଦେଖଣାତାଲିକାରେ ଯୋଡ଼ନ୍ତୁ",
+       "tog-watchrollback": "ମୁଁ ପଛକୁ ଫେରାଇଦେଇଥିବା ମୋ ଦେଖଣାତାଲିକାର ପୃଷ୍ଠାସବୁକୁ ଯୋଡ଼ନ୍ତୁ",
        "tog-minordefault": "ସବୁଯାକ ସମ୍ପାଦନାକୁ ଛାଏଁ ଛୋଟ ବଦଳ ଭାବରେ ସୂଚିତ କରିବେ",
        "tog-previewontop": "ଏଡ଼ିଟ ବାକ୍ସ ଆଗରୁ ଦେଖଣା ଦେଖାଇବେ",
        "tog-previewonfirst": "ପ୍ରଥମ ବଦଳର ଦେଖଣା ଦେଖାଇବେ",
        "otherlanguages": "ଅଲଗା ଭାଷାରେ",
        "redirectedfrom": "($1 ରୁ ଲେଉଟି ଆସିଛି)",
        "redirectpagesub": "ଆଉଥରେ ଫେରିବା ପୃଷ୍ଠା",
+       "redirectto": "କେଉଁଠାକୁ ଲେଉଟାଣି:",
        "lastmodifiedat": "ଏହି ପୃଷ୍ଠାଟି $1 ତାରିଖ $2 ବେଳେ ବଦଳାଯାଇଥିଲା ।",
        "viewcount": "ଏହି ପୃଷ୍ଠାଟି {{PLURAL:$1|ଥରେ|$1 ଥର}} ଖୋଲାଯାଇଛି ।",
        "protectedpage": "କିଳାଯାଇଥିବା ପୃଷ୍ଠା",
        "jumptonavigation": "ଦିଗବାରେଣିକୁ",
        "jumptosearch": "ଖୋଜିବେ",
        "view-pool-error": "କ୍ଷମା କରିବେ, ସର୍ଭରସବୁ ଏବେ ମନ୍ଦ ହୋଇଯାଇଅଛନ୍ତି ।\nଅନେକ ସଭ୍ୟ ଏହି ଏକା ପୃଷ୍ଠାଟି ଦେଖିବାକୁ ଚେଷ୍ଟାକରୁଅଛନ୍ତି ।\nଏହି ପୃଷ୍ଠାକୁ ଆଉଥରେ ଖୋଲିବା ଆଗରୁ ଦୟାକରି କିଛି କ୍ଷଣ ଅପେକ୍ଷା କରନ୍ତୁ ।\n$1",
+       "generic-pool-error": "କ୍ଷମା କରିବେ, ସର୍ଭରସବୁ ଏବେ ଓଭରଲୋଡ଼ ଯାଇଛନ୍ତି ।\nଅନେକ ସଭ୍ୟ ଏହି ଏକା ପୃଷ୍ଠାଟି ଦେଖିବାକୁ ଚେଷ୍ଟା କରୁଛନ୍ତି ।\nଏହି ପୃଷ୍ଠାକୁ ଆଉଥରେ ଖୋଲିବା ଆଗରୁ ଦୟାକରି କିଛି କ୍ଷଣ ଅପେକ୍ଷା କରନ୍ତୁ ।",
        "pool-timeout": "ତାଲା ଖୋଲାଯିବା ପାଇଁ ଅପେକ୍ଷା କରୁକରୁ ସମୟ ସରିଗଲା",
        "pool-queuefull": "ପୁଲ ଧାଡ଼ିଟି ଭରିଯାଇଅଛି",
        "pool-errorunknown": "ଅଜଣା ଅସୁବିଧା",
+       "pool-servererror": "ଏହି ପୁଲ କାଉଣ୍ଟର ସର୍ଭିସ ଉପଲବ୍ଧ ($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ଟି ଲିଭାଯାଇଥିବା ବଦଳ}}",
        "site-atom-feed": "$1 ଆଟମ ଫିଡ଼",
        "page-rss-feed": "$1 ଟି ଆରେସେସ ଫିଡ଼",
        "page-atom-feed": "$1 ଟି ଆଟମ ଫିଡ଼",
-       "red-link-title": " $1 (ପୃଷ୍ଠାଟି ନାହିଁ)",
+       "red-link-title": "$1 (ପୃଷ୍ଠାଟି ନାହିଁ)",
        "sort-descending": "ବଡ଼ରୁ ସାନ କ୍ରମେ ସଜାନ୍ତୁ",
        "sort-ascending": "ସାନରୁ ବଡ଼ କ୍ରମେ ସଜାନ୍ତୁ",
        "nstab-main": "ପୃଷ୍ଠା",
        "cannotdelete": "\"$1\" ପୃଷ୍ଠା ବା ଫାଇଲଟି ଲିଭାଯାଇପାରିବ ନାହିଁ । ଏହା ଆଗରୁ କାହା ଦେଇ ବୋଧେ ଲିଭାଇ ଦିଆଯାଇଛି ।",
        "cannotdelete-title": "\"$1\" ପୃଷ୍ଠାଟି ଲିଭଯାଇପାରିବ ନାହିଁ",
        "delete-hook-aborted": "ସମ୍ପାଦନା ଏକ ହୁକ (hook) ଦେଇ ବାରଣ କରାଗଲା ।\nଏହା କିଛି ବି କାରଣ ଦେଇନାହିଁ ।",
+       "no-null-revision": "\"$1\" ପୃଷ୍ଠାଟି ପାଇଁ ଫାଙ୍କା ସଂସ୍କରଣଟିଏ ତିଆରି କରିପାରିଲୁ ନାହିଁ",
        "badtitle": "ଖରାପ ନାଆଁ",
        "badtitletext": "ଆପଣ ଅନୁରୋଧ କରିଥିବା ପୃଷ୍ଠାଟି ଭୁଲ, ଖାଲି ଅଛି ବା ବାକି ଭାଷା ସାଙ୍ଗରେ ଭୁଲରେ ଯୋଡ଼ା ଯାଇଛି ବା ଭୁଲ ଇଣ୍ଟର ଉଇକି ନାମ ଦିଆଯାଇଛି ।\nଏଥିରେ ଥିବା ଗୋଟିଏ ବା ଦୁଇଟି ଅକ୍ଷର ଶିରୋନାମା ଭାବରେ ବ୍ୟବହାର କରାଯାଇ ପାରିବ ନାହିଁ ।",
        "perfcached": "ତଳଲିଖିତ ତଥ୍ୟଗୁଡିକୁ ଅସ୍ଥାୟୀ ଭାବେ ରଖାଗଲା ଏବଂ ଏହା ଅପଡେଟ ନ ହୋଇପାରେ । ଅତିବେଶିରେ {{PLURAL:$1|ଫଳ|$1ଫଳଗୁଡିକ }} ଅସ୍ଥାୟୀ ରୂପେ ରହି ପାରିବ ।",
        "namespaceprotected": "ଆପଣଙ୍କୁ ଏହି '''$1''' ନେମସ୍ପେସ ଥିବା ପୃଷ୍ଠାରେ ସମ୍ପାଦନା କରିବା ନିମନ୍ତେ ଅନୁମତି ମିଳିନାହିଁ ।",
        "customcssprotected": "ଆପଣଙ୍କୁ ଏହି CSS ପୃଷ୍ଠାର ସମ୍ପାଦନା ନିମନ୍ତେ ଅନୁମତି ମିଳିନାହିଁ, କାରଣ ଏଥିରେ ଆଉଜଣେ ସଭ୍ୟଙ୍କର ବ୍ୟକ୍ତିଗତ ସଜାଣି ରହିଅଛି ।",
        "customjsprotected": "ଆପଣଙ୍କୁ ଏହି ଜାଭାସ୍କ୍ରିପ୍ଟ ପୃଷ୍ଠାର ସମ୍ପାଦନା ନିମନ୍ତେ ଅନୁମତି ମିଳିନାହିଁ, କାରଣ ଏଥିରେ ଆଉଜଣେ ସଭ୍ୟଙ୍କର ବ୍ୟକ୍ତିଗତ ସଜାଣି ରହିଅଛି ।",
+       "mycustomcssprotected": "ଏହି CSS ପୃଷ୍ଠାଟି ସମ୍ପାଦନା ପାଇଁ ଆପଣଙ୍କୁ ଅନୁମତି ମିଳିନାହିଁ ।",
+       "mycustomjsprotected": "ଏହି JavaScript ପୃଷ୍ଠାଟି ସମ୍ପାଦନା କରିବା ପାଇଁ ଆପଣଙ୍କୁ ଅନୁମତି ମିଳିନାହିଁ ।",
+       "myprivateinfoprotected": "ନିଜର ଗୋପନୀୟ ସୂଚନା ସମ୍ପାଦନା କରିବା ପାଇଁ ଆପଣଙ୍କୁ ଅନୁମତି ମିଳିନାହିଁ ।",
+       "mypreferencesprotected": "ନିଜର ପସନ୍ଦ ସମ୍ପାଦନା କରିବା ପାଇଁ ଆପଣଙ୍କୁ ଅନୁମତି ମିଳିନାହିଁ ।",
        "ns-specialprotected": "ବିଶେଷ ପୃଷ୍ଠାସବୁକୁ ବଦଳାଯାଇପାରିବ ନାହିଁ ।",
        "titleprotected": "ଏହି ନାମଟି [[User:$1|$1]]ଙ୍କ ଦେଇ ନୂଆ ତିଆରିହେବାରୁ କିଳାଯାଇଅଛି ।\nଏହାର କାରଣ ହେଲା \"''$2''\" ।",
        "filereadonlyerror": "ଫାଇଲ ଧାରକ \"$2\"ଟି ଖାଲି ପଢିବା ହେବାଭଳି ରହିଥିବା ହେତୁ ଏଥିରେ ଥିବା $1 ପାଇଲଟିକୁ ବଦଳା ଯାଇପାରିବ ନାହିଁ ।\n\nଯେଉଁ ପରିଚ୍ଛା ଏହାକୁ ବନ୍ଦ କରିଛନ୍ତି ସେ ଏହି ବିବରଣୀ ଦେଇଛନ୍ତି: \"$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": "ମନ୍ଦ ସଂରଚନା: ଅଜଣା ଭାଇରସ ସ୍କାନର: ''$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ଯଦି ଆପଣ ଏହା ଦିଅନ୍ତି, ତେବେ ଏହା ଆପଣଙ୍କ କାମ ପାଇଁ ଶ୍ରେୟ ଦେବାରେ ବ୍ୟବହାର କରାଯାଇପାରିବ ।",
        "resetpass-temp-password": "ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼:",
        "resetpass-abort-generic": "ଏକ ଏକ୍ସଟେନସନ ଦ୍ୱାରା ପାସୱାର୍ଡ଼ ବଦଳ କରିବା ରଦ୍ଦ କରାଯାଇଛି ।",
        "resetpass-expired": "ଆପଣଙ୍କ ପାସୱାର୍ଡ଼ ଅଚଳ ହୋଇଯାଇଛି । ଦୟାକରି ନୂଆ ପାସୱାର୍ଡ଼ଟିଏ ଦିଅନ୍ତୁ ।",
+       "resetpass-expired-soft": "ଆପଣଙ୍କ ପାସୱାର୍ଡ଼ର ଅବଧି ସରିଯାଇଛି ଓ ଆଉଥରେ ବଦଳାଇବାକୁ ପଡ଼ିବ । ଦୟାକରି ଏବେ ନୂଆ ପାସୱାର୍ଡ଼ଟିଏ ବାଛନ୍ତୁ କିମ୍ବା \"{{int:resetpass-submit-cancel}}\"ରେ କ୍ଲିକ କରି ପରେ ରିସେଟ କରନ୍ତୁ ।",
+       "resetpass-validity-soft": "ଆପଣଙ୍କ ପାସୱାର୍ଡ଼ ବୈଧ ନୁହେଁ: $1\n\nଦୟାକରି ନୂଆ ପାସୱାର୍ଡ଼ଟିଏ ତିଆରି କରନ୍ତୁ, କିମ୍ବା ପରେ ରିସେଟ କରିବା ପାଇଁ \"{{int:resetpass-submit-cancel}}\"ରେ କ୍ଲିକ କରନ୍ତୁ ।",
        "passwordreset": "ପାସୱାର୍ଡ଼ ପୁନସ୍ଥାପନ କରନ୍ତୁ",
        "passwordreset-text-one": "ଏକ ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ ପାଇବା ପାଇଁ ଏହି ଫର୍ମଟି ସମ୍ପୂର୍ଣ୍ଣ ଭାବେ ପୂରଣ କରନ୍ତୁ ।",
+       "passwordreset-text-many": "{{PLURAL:$1|ଇମେଲ ଯୋଗେ ଏକ ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ ପାଇବା ପାଇଁ ତଳ ଘର ମଧ୍ୟରୁ ଗୋଟେ ଭରନ୍ତୁ ।}}",
        "passwordreset-legend": "ପାସୱାର୍ଡ଼ ପୁନସ୍ଥାପନ କରନ୍ତୁ",
        "passwordreset-disabled": "ପାସୱାର୍ଡ଼କୁ ପୁରାପୁରି ମୂଳକୁ ଫେରାଇବା ଏହି ଉଇକିରେ ଅଚଳ କରାଯାଇଅଛି ।",
        "passwordreset-emaildisabled": "ଏହି ଉଇକିରେ ଇମେଲ ସୁବିଧା ଅଚଳ କରାଯାଇଅଛି ।",
        "passwordreset-emailsent-capture": "ତଳେ ଦେଖାଯାଉଥିବା ଭଳି, ପାସୱାର୍ଡ଼ ପୁନଃସ୍ଥାପନ ଇମେଲଟିଏ ପଠାଇଦିଆଯାଇଛି ।",
        "passwordreset-emailerror-capture": "ପାସୱାର୍ଡ଼ ବଦଳାଇବା ସୂଚନା ସହ ଇମେଲଟିଏ ତିଆରି ହୋଇଛି, ଯାହା ତଳେ ଦେଖିପାରିବେ । କିନ୍ତୁ ଏହାକୁ {{GENDER:$2|ସଭ୍ୟ}}ଙ୍କୁ ପଠାଇବାରେ ବିଫଳ ହେଲୁ, କାରଣ: $1",
        "changeemail": "ଇ-ମେଲ ଠିକଣା ବଦଳାଇବେ",
-       "changeemail-header": "ଖାତା ଇ-ମେଲ ଠିକଣା ବଦଳାଇବେ",
        "changeemail-text": "ଆପଣା ଇ-ମେଲ ଠିକଣା ବଦଳାଇବା ନିମନ୍ତେ ଏହି ଆବେଦନ ପତ୍ରଟି ପୂରଣ କରନ୍ତୁ । ଆପଣଙ୍କୁ ଏହି ବଦଳ ଥୟ କରିବା ପାଇଁ ନିଜର ପାସୱାର୍ଡ଼ ଦେବାକୁ ପଡ଼ିବ ।",
        "changeemail-no-info": "ଏହି ପୃଷ୍ଠାଟିକୁ ସିଧା ଖୋଲିବା ନିମନ୍ତେ ଆପଣଙ୍କୁ ଲଗ ଇନ କରିବାକୁ ପଡ଼ିବ ।",
        "changeemail-oldemail": "ଏବେକାର ଇ-ମେଲ ଠିକଣା:",
        "changeemail-none": "(କିଛି ନାହିଁ)",
        "changeemail-password": "ଆପଣଙ୍କ {{SITENAME}} ପାସୱାର୍ଡ",
        "changeemail-submit": "ଇ-ମେଲ ପରିର୍ବତ୍ତନ କରନ୍ତୁ",
-       "changeemail-cancel": "ନାକଚ",
        "changeemail-throttled": "ଆପଣ ଏକାଧିକ ଥର ଲଗ ଇନ କରିବାକୁ ଚେଷ୍ଟା କରିଥାଇପାରନ୍ତି ।\nଆଉଥରେ ଚେଷ୍ଟା କରିବା ଆଗରୁ ଦୟାକରି $1 ଅପେକ୍ଷା କରନ୍ତୁ ।",
        "resettokens": "ଟୋକନ ରିସେଟ କରନ୍ତୁ",
+       "resettokens-text": "ଏଠାରେ, ନିଜର ଖାତା ସହ ଯୋଡ଼ା କେତେକ ଗୋପନୀୟ ତଥ୍ୟ ଜାଣିବାକୁ ଲୋଡ଼ା ପଡ଼ୁଥିବା ଟୋକନ ରିସେଟ କରିପାରିବେ ।\n\nଆପଣ ଯଦି ଦୈବାତ କେବେ ନିଜର ଟୋକନ ଆଉ କାହାକୁ ଜଣାଇଥାନ୍ତି କିମ୍ବା ଆପଣଙ୍କ ଖାତା ଆଉ କାହା ଦେଇ ଖୋଲାଯାଇଥିଲେ ନିଶ୍ଚିତ ରିସେଟ କରନ୍ତୁ ।",
        "resettokens-no-tokens": "ରିସେଟ କରିବା ପାଇଁ ଆଉ ଟୋକନ ନାହିଁ ।",
        "resettokens-legend": "ଟୋକନ ରିସେଟ କରନ୍ତୁ",
        "resettokens-tokens": "ଟୋକନମାନ:",
        "resettokens-token-label": "$1 (ବର୍ତ୍ତମାନ: $2)",
+       "resettokens-watchlist-token": "[[Special:Watchlist|ନିଜର ଦେଖଣାତାଲିକରେ ହେଉଥିବା ବଦଳ}}ର ୱେବ ଫିଡ଼ ପାଇଁ ଟୋକନ (ଆଟମ/RSS)",
        "resettokens-done": "ଟୋକନ ରିସେଟ ହେଲା ।",
        "resettokens-resetbutton": "ବଛାଯାଇଥିବା ଟୋକନ ରିସେଟ କରନ୍ତୁ",
        "bold_sample": "ମୋଟା ଲେଖା",
        "preview": "ସାଇତିବା ଆଗରୁ ଦେଖନ୍ତୁ",
        "showpreview": "ଦେଖଣା [Preview]",
        "showdiff": "ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ",
-       "anoneditwarning": "'''ସାବଧାନ:''' ଆପଣ ଲଗ-ଇନ କରିନାହାନ୍ତି ।\nଏହି ପୃଷ୍ଠାର ଇତିହାସରେ ଆପଣଙ୍କ IP Address ଟି ସାଇତା ହୋଇଯିବ ।",
+       "blankarticle": "<strong>ଚେତାବନୀ:</strong> ଆପଣ ସମ୍ପାଦନା କରୁଥିବା ଏହି ପୃଷ୍ଠାଟି ଫାଙ୍କା ଅଛି ।\nଯଦି ଆପଣ \"{{int:savearticle}}\" ଉପରେ ଆଉଥରେ କ୍ଲିକ କରନ୍ତି, ପୃଷ୍ଠାଟି କୌଣସି ବିଷୟବସ୍ତୁ ନଥାଇ ତିଆରି ହୋଇଯିବ ।",
+       "anoneditwarning": "<strong>ସାବଧାନ:</strong> ଆପଣ ଲଗ-ଇନ କରିନାହାନ୍ତି । ଅଧିକ ସମ୍ପାଦନା କଲେ ଆପଣଙ୍କ IP Address ଟି ସମସ୍ତଙ୍କୁ ଦେଖାଯିବ । <strong>[$1ଲଗ ଇନ କଲେ]</strong> କିମ୍ବା <strong>[$2 ନୂଆ ଖାତାଟିଏ ତିଆରି କଲେ]</strong>, ଆପଣଙ୍କ ସମ୍ପାଦନାର ଶ୍ରେୟ ଅନ୍ୟାନ୍ୟ ସୁବିଧା ସହିତ ଆପଣଙ୍କ ଇଉଜର ନାମରେ ଦିଆହେବ ।",
        "anonpreviewwarning": "''ଆପଣ ଲଗ ଇନ କରି ନାହାନ୍ତି । ବଦଳକରି ସାଇତିଲେ ଆପଣଙ୍କର IP ଠିକଣା ଏହି ପୃଷ୍ଠାର ଇତିହାସରେ ସାଇତା ହୋଇଯିବ ।''",
        "missingsummary": "'''ଚେତାବନୀ:''' ଆପଣ ଏକ ସମ୍ପାଦନା ସାରକଥା ଦେଇନାହାନ୍ତି ।\nଯଦି ଆପଣ \"{{int:savearticle}}\"ରେ ଆଉଥରେ କ୍ଲିକ କରନ୍ତି, ତେବେ ଆପଣଙ୍କ ବଦଳ ସାରକଥା ବିନା ସାଇତା ହୋଇଯିବ ।",
        "missingcommenttext": "ଦୟାକରି ତଳେ ଏକ ମତାମତ ଦିଅନ୍ତୁ ।",
        "content-not-allowed-here": "\"$1\" ବିଷୟଗୁଡିକ [[$2]]ପୃଷ୍ଠାରେ ରହିପାରିବ ନାହିଁ",
        "editwarning-warning": "ଏହି ପୃଷ୍ଠାଟି ଛାଡ଼ି ଚାଲିଗଲେ ଆପଣ ଆଗରୁ କରିଥିବା ସମ୍ପାଦନା ହରାଇବେ । ଯଦି ଆପଣ ଲଗ ଇନ କରିଥାନ୍ତି ନିଜ ପସନ୍ଦ ପୃଷ୍ଠାର \"{{int:prefs-editing}}\" ବିଭାଗରେ ଏହି ଚେତାବନୀଟି ନିଷ୍କ୍ରିୟ କରିପାରିବେ ।",
        "editpage-notsupportedcontentformat-title": "କଣ୍ଟେଣ୍ଟର ସଂରଚନା ସମର୍ଥିତ ନୁହେଁ",
+       "editpage-notsupportedcontentformat-text": "$1ର ବିଷୟବସ୍ତୁର ସଜାଣି $2ର ବିଷୟବସ୍ତୁ ମଡ଼େଲ ସହିତ ମେଳ ଖାଉନାହିଁ ।",
        "content-model-wikitext": "ଉଇକିଟେକ୍ସଟ",
        "content-model-text": "ଖାଲି ଲେଖା",
        "content-model-javascript": "ଜାଭାସ୍କ୍ରିପ୍ଟ",
        "parser-template-recursion-depth-warning": "ଛାଞ୍ଚର ବାରମ୍ବାର ପ୍ରତୀତ ହେବା କ୍ଷମତା ପାର ହୋଇଅଛି ($1)",
        "language-converter-depth-warning": "ଭାଷା ରୂପାନ୍ତରଣ କ୍ଷମତା ସରିଯାଇଅଛି ($1)",
        "node-count-exceeded-category": "ପୃଷ୍ଠାଗୁଡିକ ଯେଉଁଠି ନୋଡ-ଗଣନା ଅତ୍ୟଧିକ ହୋଇଯାଇଛି",
+       "node-count-exceeded-category-desc": "ଏହି ପୃଷ୍ଠା ସର୍ବାଧିକ ନୋଡ଼ ଗଣନାରୁ ବଳିଗଲା ।",
        "node-count-exceeded-warning": "ପୃଷ୍ଠାଟି ନୋଡ-ଗଣନାରୁ ଅଧିକ ହୋଇଗଲା",
        "expansion-depth-exceeded-category": "ଯେଉଁ ପୃଷ୍ଠାଗୁଡିକରେ ବିସ୍ତ୍ରୁତ ଗଭୀରତା ଅତ୍ୟଧିକ ହୋଇଯାଇଛି",
+       "expansion-depth-exceeded-category-desc": "ଏହି ପୃଷ୍ଠାର ସର୍ବାଧିକ ଲମ୍ବା ହେବା ଠାରୁ ବଳିଗଲାଣି",
        "expansion-depth-exceeded-warning": "ପୃଷ୍ଠାଟି ବିସ୍ତ୍ରୁତ ଗଭୀରତାରୁ ଅଧିକ ହୋଇଗଲା",
        "parser-unstrip-loop-warning": "ଅଜଣା ଲୁପ ଜଣାପଡିଲା",
        "parser-unstrip-recursion-limit": "ଅଜଣା ଚକ୍ରର ସୀମା ଅତ୍ୟଧିକ ହୋଇଗଲା ($1)",
        "undo-summary-username-hidden": "ଜଣେ ଅଜଣା ସଭ୍ୟଙ୍କ ଦେଇ ହୋଇଥିବା $1 ସଂସ୍କରଣଟି ପଛକୁ ଫେରାନ୍ତୁ",
        "cantcreateaccounttitle": "ଖାତାଟିଏ ତିଆରି କରାଯାଇପାରିବ ନାହିଁ",
        "cantcreateaccount-text": "[[User:$3|$3]]ଙ୍କ ଦେଇ ('''$1''') IP ଠିକଣାରୁ ଖାତା ଖୋଲିବାକୁ ବାରଣ କରାଯାଇଅଛି ।\n\n$3ଙ୍କ ଦେଇ ଦିଆଯାଇଥିବା କାରଣ ହେଲା ''$2''",
+       "cantcreateaccount-range-text": "ଆପଣଙ୍କ IP Address ('''$4''') ସମେତ '''$1''' ସୀମା ଭିତରେ ଥିବା IP Address ରୁ [[User:$3|$3]]ଙ୍କ ଦ୍ୱାରା ନୂଆ ଖାତା ତିଆରିକୁ ଅଟକାଯାଇଛି ।\n\n$3ଙ୍କ ଦ୍ୱାରା ଏହାର କାରଣ ଦିଆଯାଇଛି: ''$2''",
        "viewpagelogs": "ଏହି ପୃଷ୍ଠା ପାଇଁ ଲଗଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ ।",
        "nohistory": "ଏହି ପୃଷ୍ଠା ନିମନ୍ତେ କିଛି ବି ସମ୍ପାଦନା ଇତିହାସ ନାହିଁ ।",
        "currentrev": "ନଗଦ ସଙ୍କଳନ",
        "currentrev-asof": "$1 ହୋଇଥିବା ରିଭିଜନ",
        "revisionasof": "$1 ଅନୁସାରେ କରାଯାଇଥିବା ବଦଳ",
-       "revision-info": "$2ଙ୍କ ଦେଇ $1 ସୁଦ୍ଧା ହୋଇଥିବା ସଙ୍କଳନ",
+       "revision-info": "$1 ବେଳେ {{GENDER:$6|$2}}$7 ଙ୍କ ଦେଇ ହୋଇଥିବା ସଂସ୍କରଣ",
        "previousrevision": "ପୁରୁଣା ସଙ୍କଳନ",
        "nextrevision": "ନୂଆ ସଙ୍କଳନ",
        "currentrevisionlink": "ନଗଦ ସଙ୍କଳନ",
        "rev-deleted-event": "(ଲଗ କାମ ବାହାର କରିଦିଆଗଲା)",
        "rev-deleted-user-contribs": "[ଇଉଜର ନାମ ବା IP ଠିକଣା ବାହାର କରିଦିଆଗଲା - ଅବଦାନସମୂହରୁ ଲୁଚାଯାଇଥିବା ସମ୍ପାଦନା]",
        "rev-deleted-text-permission": "ଏହି ପୃଷ୍ଠାର ସଂସ୍କରଣ '''ଲିଭାଇଦିଆଯାଇଛି'''।\nସବିଶେଷ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ଲିଭାଯିବା ଇତିହାସ]ରୁ ମିଳିପାରିବ ।",
+       "rev-suppressed-text-permission": "ଏହି ପୃଷ୍ଠାର ସଂସ୍କରଣକୁ <strong>ଦବାଇଦିଆଯାଇଛି</strong> ।\nଅଧିକ ବିବରଣୀ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ଦବାଯାଇଥିବା ଇତିହାସ]ରୁ ପଢ଼ିପାରିବେ ।",
        "rev-deleted-text-unhide": "ଏହି ପୃଷ୍ଠାର ସଂସ୍କରଣ '''ଲିଭାଇଦିଆଯାଇଛି''' ।\nସବିଶେଷ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ଲିଭାଇବା ଇତିହାସ]ରୁ ମିଳିପାରିବ ।\nତଥାପି ଆଗକୁ ବଢ଼ିବାକୁ ଚାହୁଁଥିଲେ ଆପଣ [$1 ଏହି ସଂସ୍କରଣଟି] ଦେଖିପାରିବେ ।",
        "rev-suppressed-text-unhide": "ଏହି ପୃଷ୍ଠାର ସଂସ୍କରଣ '''ଦବାଇଦିଆଯାଇଛି''' ।\nସବିଶେଷ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ଦବାଯାଇଥିବା ଇତିହାସ]ରୁ ମିଳିପାରିବ ।\nତଥାପି ଆଗକୁ ବଢ଼ିବାକୁ ଚାହୁଁଥିଲେ ଆପଣ [$1 ଏହି ସଂସ୍କରଣଟି] ଦେଖିପାରିବେ ।",
        "rev-deleted-text-view": "ଏହି ପୃଷ୍ଠାର ସଂସ୍କରଣ '''ଲିଭାଇଦିଆଯାଇଛି'''।\nଆପଣ ଏହାକୁ ଦେଖିପାରିବେ; ସବିଶେଷ [{{fullurl:{{#Special:Log}}/delete|page={{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|ବଛାଯାଇଥିବା ସଂସ୍କରଣ}}:",
+       "revdelete-selected-file": "[[:$2]]ର {{PLURAL:$1|Selected file version|ବଛାଯାଇଥିବା ଫାଇଲ ସଂସ୍କରଣ}}:",
        "logdelete-selected": "{{PLURAL:$1|ବଛା ଲଗ ଘଟଣା|ବଛା ଲଗ ଘଟଣାବଳୀ}}:",
+       "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": "ଫାଇଲ ଭିତର ପଦାର୍ଥସବୁ ଲୁଚାଇଦିଅନ୍ତୁ",
        "mergehistory-empty": "କୌଣସିଟି ବି ସଙ୍କଳାନ ମିଶାଯାଇପାରିବ ନାହିଁ ।",
        "mergehistory-success": "[[:$1]]ର $3 {{PLURAL:$3|ଟି ସଙ୍କଳନ|ଟି ସଙ୍କଳନ}} [[:$2]] ସାଙ୍ଗରେ ଠିକଭାବେ ମିଶାଇ ଦିଆଗଲା ।",
        "mergehistory-fail": "ଇତିହାସ ମିଶାଇବାରେ ବିଫଳ ହେଲୁ, ଦୟାକରି ପୃଷ୍ଠା ଓ  ସମୟ ନିର୍ଣ୍ଣାୟକ ଦେଖନ୍ତୁ ।",
+       "mergehistory-fail-toobig": "$1 ଗୋଟି {{PLURAL:$1|ସଂସ୍କରଣ|ସଂସ୍କରଣ}} ଘୁଞ୍ଚାଇଦିଆଯିବା ହେତୁ  ଅଧିକ ପୃଷ୍ଠାର ଇତିହାସ ମିଶାଇବାରେ ବିଫଳ ହେଲୁ ।",
        "mergehistory-no-source": "ମୂଳ ପୃଷ୍ଠା $1ଟି ନାହିଁ ।",
        "mergehistory-no-destination": "ଅନ୍ତ ପୃଷ୍ଠା $1 ଟି ନାହିଁ ।",
        "mergehistory-invalid-source": "ମୂଳ ପୃଷ୍ଠାଟି ଏକ ଠିକ ନାମ ହୋଇଥିବା ଉଚିତ ।",
        "mergehistory-same-destination": "ମୂଳାଧାର ଓ ଅନ୍ତ ପୃଷ୍ଠା ସମାନ ହୋଇପାରିବ ନାହିଁ",
        "mergehistory-reason": "କାରଣ:",
        "mergelog": "ମିଶ୍ରଣ ଲଗ୍",
-       "pagemerge-logentry": "[[$2]] ସହିତ [[$1]]କୁ ଯୋଡ଼ି ଦିଆଗଲା ($3 ଯାଏଁ ସଙ୍କଳନ)",
        "revertmerge": "ମିଶାଇବା ନାହିଁ",
        "mergelogpagetext": "ତଳେ ସବୁଠାରୁ ନଗଦ ଯୋଡ଼ାଯାଇଥିବା ପୃଷ୍ଠାର ଇତିହାସ ଆଉ ଗୋଟିଏ ସହ ଦିଆଯାଇଅଛି ।",
        "history-title": "\"$1\" ର ପୁନରାବୃତି ଇତିହାସ",
        "showhideselectedversions": "ବଛା ହୋଇଥିବା ସଙ୍କଳନ ଗୁଡ଼ିକୁ ଦେଖାଇବେ/ଲୁଚାଇବେ",
        "editundo": "ପଛକୁ ଫେରିବା",
        "diff-empty": "(କିଛି ବି ଫରକ ନାହିଁ)",
+       "diff-multi-sameuser": "ସେହି ସମାନ ବ୍ୟବହାରକାରୀଙ୍କ ({{PLURAL:$1|ମଝି ସଂସ୍କରଣ|$1ଟି ସଂସ୍କରଣ}} ଦେଖାଉ ନାହିଁ)",
+       "diff-multi-otherusers": "({{PLURAL:$2|ଆଉ ଜଣେ ବ୍ୟବହାରକାରୀଙ୍କ|$2 ଜଣ ବ୍ୟବହାରକାରୀଙ୍କ}} ଦ୍ୱାରା ହୋଇଥିବା {{PLURAL:$1|ମଝି ସଂସ୍କରଣଟିଏ|$1ଟି ମଝି ସଂସ୍କରଣ}} ଦେଖା ଯାଉନାହିଁ)",
        "diff-multi-manyusers": "($2 {{PLURAL:$2|ଜଣ|ଜଣ}} ସଭ୍ୟଙ୍କ ଦେଇ କରାଯାଇଥିବା {{PLURAL:$1|ଗୋଟିଏ ମଝି ସଂସ୍କରଣ|$1 ଗୋଟି ମଝି ସଂସ୍କରଣମାନ}} ଦେଖାଯାଉ ନାହିଁ)",
        "difference-missing-revision": "($1) {{PLURAL:$2|was|were}}ର ଭିନ୍ନତା {{PLURAL:$2|One revision|$2 revisions}} ମିଳିଲା ନାହିଁ ।\n\nପୁରୁଣା ହୋଇଯାଇଥିବା ଇତିହାସ ଲିଙ୍କ ଯାହା ଏକ ଲିଭାଯାଇଥିବା ପୃଷ୍ଠାକୁ ଦିଆଯାଇଥିବାରୁ ଏହା ସାଧାରଣତଃ ହୋଇଥାଏ ।\nଅଧିକ ବିବରଣୀ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]ରେ ମିଳିପାରିବ ।",
        "searchresults": "ଖୋଜା ଫଳାଫଳ",
        "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-images-tooltip": "ଫାଇଲ ସବୁ ପାଇଁ ଖୋଜିବେ",
        "searchprofile-everything-tooltip": "ପ୍ରସଙ୍ଗ ସବୁକୁ ଖୋଜିବେ (ଆଲୋଚନା ସହ)",
        "searchprofile-advanced-tooltip": "ନିଜେ ତିଆରିକରିହେବା ଭଳି ନେମସ୍ପେସରେ ଖୋଜିବେ",
-       "search-result-size": "$1 ({{PLURAL:$2|1 ଶବ୍ଦ|$2 ଶବ୍ଦ}})",
+       "search-result-size": "$1 ({{PLURAL:$2|ଗୋଟେ ଶବ୍ଦ|$2 ଟି ଶବ୍ଦ}})",
        "search-result-category-size": "{{PLURAL:$1|ଜଣେ ସଭ୍ୟ|$1 ଜଣ ସଭ୍ୟ}} ({{PLURAL:$2|ଗୋଟିଏ ଶ୍ରେଣୀy|$2ଟି ଶ୍ରେଣୀ ସମୂହ}}, {{PLURAL:$3|ଗୋଟିଏ ଫାଇଲ|$3ଟି ଫାଇଲ}})",
        "search-redirect": "($1 କୁ ଆଗକୁ ବଢେଇନିଅ )",
        "search-section": "(ଭାଗ $1)",
+       "search-file-match": "(ଫାଇଲରେ ଥିବା ବିଷୟବସ୍ତୁ ସାଙ୍ଗେ ମେଳ)",
        "search-suggest": "ଆପଣ $1 ଭାବି ଖୋଜିଥିଲେ କି?",
        "search-interwiki-caption": "ସାଙ୍ଗରେ ଚାଲିଥିବା ବାକି ପ୍ରକଳ୍ପସବୁ",
        "search-interwiki-default": "$1 ରୁ ଫଳାଫଳ:",
        "searchrelated": "ଯୋଡ଼ା",
        "searchall": "ସବୁ",
        "showingresults": "ତଳେ {{PLURAL:$1|'''ଗୋଟିଏ'''  ଫଳାଫଳ|'''$1'''ଟି ଫଳାଫଳ}} ଦେଖାଉଛୁ ଯାହା #'''$2'''ରେ ଆରମ୍ଭ ହୋଇଅଛି ।",
-       "showingresultsheader": "'''$4''' ପାଇଁ {{PLURAL:$5|'''$3'''ର '''$1''' ଫଳ |'''$3'''ର '''$1 - $2''' ଫଳ }}",
+       "showingresultsinrange": "#<strong>$2</strong> ରୁ #<strong>$3</strong> ଭିତରେ ଥିବା ପାଖାପାଖି {{PLURAL:$1|<strong>ଗୋଟେ</strong> ଫଳାଫଳ|<strong>$1</strong>ଟି ଫଳାଫଳ}} ତଳେ ଦେଖାଉଛୁ ।",
+       "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": "ନିଜର ପସନ୍ଦ ବଦଲାଇବା ପାଇଁ ଲଗ ଇନ କରନ୍ତୁ ।",
        "prefs-skin": "ବହିରାବରଣ",
        "skin-preview": "ସାଇତା ଆଗରୁ ଦେଖଣା",
        "datedefault": "କୌଣସି ପସନ୍ଦ ନାହିଁ",
        "recentchangesdays-max": "ସବୁଠାରୁ ଅଧିକ ହେଲେ $1 {{PLURAL:$1|ଦିନ|ଦିନ}}",
        "recentchangescount": "ଆପେଆପେ ଦେଖାଯାଉଥିବା ବଦଳର ସଂଖ୍ୟା:",
        "prefs-help-recentchangescount": "ଏଥିରେ ନଗଦ ବଦଳ, ପୃଷ୍ଠାର ଇତିହାସ ଓ ଲଗ ଇତିହାସ ରହିଅଛି ।",
+       "prefs-help-watchlist-token2": "ଆପଣଙ୍କ ଦେଖଣାତାଲିକାର ୱେବ ଫିଡ଼ ପାଇଁ ଏହା ଏକ ଗୋପନ ଚାବି ।\nଏହା ଜାଣିପାରିଲେ ଯେ କୌଣସି ବ୍ୟକ୍ତି ଆପଣଙ୍କ ଦେଖଣାତାଲିକା ପଢ଼ିପାରିବ, ତେଣୁ ଏହାକୁ କାହାକୁ ଜଣାନ୍ତୁ ନାହିଁ ।\nଚାହିଁଲେ ଏହାକୁ [[Special:ResetTokens|ରିସେଟ ମଧ୍ୟ କରିପାରିବେ]] ।",
        "savedprefs": "ଆପଣଙ୍କ ପସନ୍ଦସବୁ ସାଇତାଗଲା ।",
        "timezonelegend": "ସମୟ ମଣ୍ଡଳ:",
        "localtime": "ସ୍ଥାନୀୟ ସମୟ:",
        "prefs-help-signature": "ଆଲୋଚନା ପୃଷ୍ଠାରେ ଦିଆଯାଉଥିବା ମତାମତରେ \"<nowiki>~~~~</nowiki>\" ଦେଇଦେଲେ ତାହା ସେଠାରେ ଆପେ ଆପେ ଆପଣଙ୍କ ନାମ ଓ ସମୟକୁ ବଦଳିଯିବ ।",
        "badsig": "ମୂଳ ସନ୍ତକଟି ଅଚଳ ଅଟେ ।\nHTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।",
        "badsiglength": "ଆପଣଙ୍କ ସନ୍ତକଟି ଖୁବ ଲମ୍ବା ।\nଏହା ବୋଧ ହୁଏ $1 {{PLURAL:$1|ଗୋଟି ଅକ୍ଷର|ଗୋଟି ଅକ୍ଷର}}ରୁ ଅଧିକ ।",
-       "yourgender": "ଲିà¬\99à­\8dà¬\97:",
+       "yourgender": "à¬\86ପଣ à¬\95à­\87à¬\89à¬\81ଭଳି à¬¬à¬\96ଣାହà­\87ବାà¬\95à­\81 à¬\9aାହାà¬\81ନà­\8dତି?",
        "gender-unknown": "ଜଣାଇବାକୁ ଚାହେଁ ନାହିଁ",
        "gender-male": "ସେ (ପୁରୁଷ) ଉଇକିପୃଷ୍ଠା ସମ୍ପାଦନା କରନ୍ତି",
        "gender-female": "ସେ (ନାରୀ) ଉଇକିପୃଷ୍ଠା ସମ୍ପାଦନା କରନ୍ତି",
        "prefs-tokenwatchlist": "ଟୋକନ୍‌",
        "prefs-diffs": "ତଫାତସବୁ",
        "prefs-help-prefershttps": "ଏହି ପସନ୍ଦ ଆପଣଙ୍କ ଲଗ୍ଇନ୍ କରିବାପରେ କାର୍ଯ୍ୟକ୍ଷମ ହେବ ।",
+       "prefswarning-warning": "ଆପଣ ନିଜ \"ପସନ୍ଦ\"ରେ କରିଥିବା ବଦଳ ଏଯାଏ ସାଇତା ଯାଇନାହିଁ ।\nଯଦି ଆପଣ \"$1\"ରେ କ୍ଲିକ ନ କରି ଏହି ପୃଷ୍ଠା ଛାଡ଼ି ଚାଲିଗଲେ ଆପଣଙ୍କର ପସନ୍ଦ ଅପଡେଟ ହେବ ନାହିଁ ।",
+       "prefs-tabs-navigation-hint": "ସୂଚନା: ବାମ ଓ ଡାହାଣ ଆରୋ କି ବ୍ୟବହାର କରି ଆପଣ ଗୋଟେ ଟ୍ୟାବରୁ ଆଉ ଗୋଟେ ଟ୍ୟାବକୁ ଯାଇପାରିବ ।",
        "email-address-validity-valid": "ଇ-ମେଲ ଠିକଣା ବୈଧ ଭଳି ଲାଗୁଅଛି",
        "email-address-validity-invalid": "ଏକ ସଠିକ ଇ-ମେଲ ଠିକଣା ଦିଅନ୍ତୁ",
        "userrights": "ସଭ୍ୟ ଅଧିକାର ପରିଚାଳନା",
        "userrights-notallowed": "ଆପଣଙ୍କ ଖାତାରେ ସଭ୍ୟ ଅଧିକାର ଯୋଡ଼ିବା ବା କାଢ଼ିବାର ଅନୁମତି ନାହିଁ ।",
        "userrights-changeable-col": "ଆପଣ ବଦଳାଇପାରିବା ଗୋଠସମୂହ",
        "userrights-unchangeable-col": "ଯେଉଁ ଗୋଠସବୁ ଆପଣ ବଦଳାଇପାରିବେ ନାହିଁ",
+       "userrights-conflict": "ସଭ୍ୟଙ୍କ ଅଧିକାର ବଦଳାଇବାରେ ମତଭେଦ! କରିଥିବା ବଦଳକୁ ପରଖି ନିଶ୍ଚିତ କରନ୍ତୁ ।",
+       "userrights-removed-self": "ଆପଣ ସଫଳ ଭାବେ ନିଜର ଅଧିକାର କାଢ଼ିଦେଲେ । ଆଗକୁ ଆପଣ ଆଉ ଏହା ଦେଖିପାରିବେ ନାହିଁ ।",
        "group": "ଗୋଠ:",
        "group-user": "ବ୍ୟବହାରକାରୀଗଣ",
        "group-autoconfirmed": "ଆପେଆପେ ଥୟ କରା ସଭ୍ୟ",
        "right-deletedtext": "ଲିଭାଇ ଦିଆଯାଇଥିବା ଲେଖା ଓ ଲିଭାଇ ଦିଆଯାଇଥିବା ଲେଖା ଭିତରର ସଙ୍କଳନର ବଦଳ ଦେଖିବେ",
        "right-browsearchive": "ଲିଭାଯାଇଥିବା ପୃଷ୍ଠାସବୁକୁ ଖୋଜିବେ",
        "right-undelete": "ଲିଭାଇ ଦିଆଯାଇଥିବା ପୃଷ୍ଠାଟିଏକୁ ଫେରାଇ ଆଣିବେ",
-       "right-suppressrevision": "ପରିଚାଳକମାନଙ୍କଠାରୁ ଲୁଚାଯାଇଥିବା ସଙ୍କଳନ ପରଖିବେ ଓ ଲେଉଟାଇବେ",
+       "right-suppressrevision": "କୌଣସି ସଭ୍ୟଙ୍କୁ ନିର୍ଦ୍ଦିଷ୍ଟ ସଂସ୍କରଣ ଦେଖନ୍ତୁ, ଲୁଚାନ୍ତୁ ଓ ଲୁଚାଯାଇଥିବା ସଂସ୍କରଣ ଦେଖାନ୍ତୁ",
+       "right-viewsuppressed": "କୌଣସି ସଭ୍ୟଙ୍କଠାରୁ ଲୁଚାଯାଇଥିବା ସଂସ୍କରଣମାନ ଲୁଚାନ୍ତୁ",
        "right-suppressionlog": "ବ୍ୟକ୍ତିଗତ ଲଗ ଦେଖାଇବେ",
        "right-block": "ବାକି ସଭ୍ୟମାନଙ୍କୁ ସମ୍ପାଦନାରୁ ବାରଣ କରିବେ",
        "right-blockemail": "ଇ-ମେଲ ପଠାଇବାରୁ ଜଣେ ସଭ୍ୟଙ୍କୁ ବାରଣ କରିବେ",
        "right-unblockself": "ଜଣଙ୍କୁ ଅଟକରୁ ଚାଡ଼କରିବେ",
        "right-protect": "ନିରାପତ୍ତା ବଢ଼ାଇ କ୍ୟାସକେଡ଼-ନିରାପତ୍ତା ପୃଷ୍ଠାମାନଙ୍କୁ ବଦଳାନ୍ତୁ",
        "right-editprotected": "କିଳାଯାଇଥିବା ପୃଷ୍ଠାମାନଙ୍କର ସମ୍ପାଦନା କରିବେ (କ୍ୟାସକେଡ଼କରା କିଳଣା ବିନା)",
+       "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" ଭାବେ ଲୁଚାଯାଇଥିବା ପୃଷ୍ଠାସବୁ ସମ୍ପାଦନା କରନ୍ତୁ",
        "right-editinterface": "ସଭ୍ୟଙ୍କ ଇଣ୍ଟରଫେସ ବଦଳାଇବେ",
        "right-editusercssjs": "ବାକି ସଭ୍ୟମାନଙ୍କର CSS ଓ ଜାଭାସ୍କ୍ରିପ୍ଟ ଫାଇଲ ସବୁକୁ ବଦଳାଇବେ",
        "right-editusercss": "ବାକି ସଭ୍ୟମାନଙ୍କ CSS ଫାଇଲସବୁ ବଦଳାଇବେ",
        "right-edituserjs": "ବାକି ସଭ୍ୟମାନଙ୍କର ଜାଭାସ୍କ୍ରିପ୍ଟ ଫାଇଲ ସବୁକୁ ବଦଳାଇବେ",
+       "right-editmyusercss": "ନିଜ ସଭ୍ୟ CSS ଫାଇଲସବୁ ସମ୍ପାଦନା କରନ୍ତୁ",
+       "right-editmyuserjs": "ନିଜର ସଭ୍ୟ JavaScript ଫାଇଲ ସମ୍ପାଦନା କରନ୍ତୁ",
+       "right-viewmywatchlist": "ନିଜର ଦେଖଣାତାଲିକା ଦେଖନ୍ତୁ",
+       "right-editmywatchlist": "ନିଜ ଦେଖଣାତାଲିକା ଦେଖନ୍ତୁ । ଜାଣିରଖନ୍ତୁ ଯେ ଏହି ଅଧିକାର ବିନା ମଧ୍ୟ କିଛି କାମ ଅଧିକ ପୃଷ୍ଠା ଯୋଡ଼ୁଥିବ ।",
+       "right-viewmyprivateinfo": "ନିଜର ଗୋପନୀୟ ତଥ୍ୟ ଦେଖନ୍ତୁ (ଯଥା ଇମେଲ ଠିକଣା, ପ୍ରକୃତ ନାମ)",
+       "right-editmyprivateinfo": "ନିଜର ଗୋପନୀୟ ତଥ୍ୟ ସମ୍ପାଦନ କରନ୍ତୁ (ଯଥା ଇମେଲ ଠିକଣା, ପ୍ରକୃତ ନାମ)",
+       "right-editmyoptions": "ନିଜର ପସନ୍ଦ ସମ୍ପାଦନା କରନ୍ତୁ",
        "right-rollback": "ଏକ ନିର୍ଦ୍ଦିଷ୍ଟ ପୃଷ୍ଠାକୁ ବଦଳାଇଥିବା ଶେଷ ସଭ୍ୟଙ୍କ ସମ୍ପାଦନାକୁ ସଙ୍ଗେସଙ୍ଗେ ପୁରାପୁରି ପଛକୁ ଫେରାଇଦେବେ",
        "right-markbotedits": "ପୁରାପୁରି ପଛକୁ ଫେରାଇବା ବଦଳଗୁଡ଼ିକ ଆପେ ଆପେ କରା ବଦଳ ବୋଲି ଗଣିବେ",
        "right-noratelimit": "ବିରଳ ସୀମା ଦେଇ ପ୍ରଭାବିତ ହୋଇ ନଥିବା",
        "action-createpage": "ପୃଷ୍ଠାଟିଏ ତିଆରିବା",
        "action-createtalk": "ଆଲୋଚନା ପୃଷ୍ଠାସବୁ ଗଢ଼ିବେ",
        "action-createaccount": "ଏହି ନୂଆ ସଭ୍ୟ ଖାତାଟିଏ ଗଢ଼ିବେ",
+       "action-history": "ଏହି ପୃଷ୍ଠାର ଇତିହାସ ଦେଖାନ୍ତୁ",
        "action-minoredit": "ଏହି ବଦଳଟିକୁ ଟିକେ ବଦଳ ଭାବରେ ଚିହ୍ନିତ କରନ୍ତୁ",
        "action-move": "ଏହି ପୃଷ୍ଠାଟିକୁ ଘୁଞ୍ଚାଇବେ",
        "action-move-subpages": "ଏହି ପୃଷ୍ଠାଟିକୁ ତାହାର ଉପପୃଷ୍ଠା ସହିତ ଘୁଞ୍ଚାଇବେ ।",
        "action-move-rootuserpages": "ମୂଳ ସଭ୍ୟ ପୃଷ୍ଠାସବୁକୁ ଘୁଞ୍ଚାଇଦେବେ",
+       "action-move-categorypages": "ଶ୍ରେଣୀ ପୃଷ୍ଠାସବୁକୁ ଘୁଞ୍ଚାନ୍ତୁ",
        "action-movefile": "ଏହି ପୃଷ୍ଠାଟିକୁ ଘୁଞ୍ଚାଇବେ",
        "action-upload": "ଏହି ଫାଇଲଟି ଅପଲୋଡ଼ କରିବେ",
        "action-reupload": "ଆଗରୁ ଥିବା ଫାଇଲ ଉପରେ ମଡ଼ାଇ ଦେବେ",
        "action-userrights-interwiki": "ବାକି ଉଇକିର ସଭ୍ୟମାନଙ୍କ ସଭ୍ୟ ଅଧିକାର ବଦଳାଇବେ",
        "action-siteadmin": "ଡାଟାବେସକୁ କିଳିବେ ଓ ଖୋଲିବେ",
        "action-sendemail": "ଇ-ମେଲ ପଠାଇବେ",
+       "action-editmywatchlist": "ନିଜର ଦେଖଣାତାଲିକା ସମ୍ପାଦନା କରନ୍ତୁ",
+       "action-viewmywatchlist": "ନିଜ ଦେଖଣାତାଲିକା ଦେଖନ୍ତୁ",
+       "action-viewmyprivateinfo": "ନିଜର ଗୋପନୀୟ ତଥ୍ୟ ଦେଖନ୍ତୁ",
+       "action-editmyprivateinfo": "ନିଜର ଗୋପନୀୟ ତଥ୍ୟ ସମ୍ପାଦନ କରନ୍ତୁ",
        "nchanges": "$1 {{PLURAL:$1|ବଦଳ|ବଦଳସବୁ}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ଶେଷଥର ଦେଖିବା ପରଠାରୁ}}",
        "enhancedrc-history": "ଇତିହାସ",
        "recentchanges": "ନଗଦ ବଦଳ",
        "recentchanges-legend": "ଏବେ କରାଯାଇଥିବା ଅଦଳବଦଳ",
        "recentchanges-summary": "ଏହି ପୃଷ୍ଠାରେ ଏହି ଉଇକିରେ ନଗଦ ବଦଳର ନିଘା ରଖିବେ",
+       "recentchanges-noresult": "ଏହି ସମୟକାଳ ଭିତରେ ଏହି ମାନଦଣ୍ଡ ସହ ଖାପ ଖାଇବା ଭଳି କିଛି ବଦଳ ହୋଇନାହିଁ ।",
        "recentchanges-feed-description": "ଏହି ଉଇକିରେ ଏହି ଫିଡ଼ଟିର ନଗଦ ବଦଳ ଦେଖାଇବେ ।",
        "recentchanges-label-newpage": "ଏହି ସମ୍ପାଦନା ଯୋଗୁଁ ନୂଆ ପୃଷ୍ଠାଟିଏ ତିଆରି ହେଲା",
        "recentchanges-label-minor": "ଏହା ଏକ ସାମାନ୍ୟ ସମ୍ପାଦନା",
        "recentchanges-label-bot": "ଏହି ବଦଳଟି ଜଣେ '''ବଟ'''ଙ୍କ ଦେଇ କରାଯାଇଥିଲା",
        "recentchanges-label-unpatrolled": "ଏହି ବଦଳଟିକୁ ଏ ଯାଏଁ ପରଖା ଯାଇନାହିଁ",
-       "rcnotefrom": "<strong>$2</strong> ପର ଠାରୁ (<strong>$1</strong> ଯାଏଁ ଏଠାରେ ଅଛି) ସମସ୍ତ ବଦଳ ତଳେ ଦେଖିପାରିବେ:",
+       "recentchanges-label-plusminus": "ଏହି ବାଇଟ ତଥ୍ୟରୁ ଏଇ ପୃଷ୍ଠାର ଆକାର ବଦଳ",
+       "recentchanges-legend-heading": "'''ଆକଳନ:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}  (ଆହୁରି ଦେଖନ୍ତୁ: [[Special:NewPages|ନୂଆ ପୃଷ୍ଠାମାନଙ୍କ ତାଲିକା]])",
+       "rcnotefrom": "<strong>$3, $4</strong> ପରଠାରୁ {{PLURAL:$5|ବଦଳଟି|ବଦଳଗୁଡ଼ିକ}} ତଳେ ଦିଆଗଲା (<strong>$1</strong> ଯାଏ ଦିଆଗଲା) ।",
        "rclistfrom": "$3 $2ରୁ ଆରମ୍ଭ କରି ନୂଆ ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ",
        "rcshowhideminor": "ଛୋଟମୋଟ ବଦଳ $1",
        "rcshowhideminor-show": "ଦେଖାଇବେ",
        "largefileserver": "ଏହି ସର୍ଭରର ଅନୁମୋଦିତ ସଂରଚନା ଠାରୁ ଏହି ଫାଇଲଟି ବଡ଼ ।",
        "emptyfile": "ଆପଣ ଅପଲୋଡ଼ କରିଥିବା ଫାଇଲଟି ଫାଙ୍କା ବୋଲି ବୋଧ ହୁଏ ।\nଏହା ହୁଏତ ଫାଇଲ ନାମରେ କିଛି ଭୁଲ ଜନିତ ହୋଇଥାଇପାରେ ।\nସତରେ ଆପଣ ଏହି ଫାଇଲଟି ଅପଲୋଡ଼ କରିବାକୁ ଚାହାନ୍ତି କି ନାଁ ଠାରେ ପରଖି ନିଅନ୍ତୁ ।",
        "windows-nonascii-filename": "ଏହି ଉଇକି ବିଶେଷ ସଂକେତ ଥିବା ଫାଇଲ ନାମକୁ ଅନୁମତି ଦିଏ ନାହିଁ ।",
-       "fileexists": "à¬\8fହି à¬\8fà¬\95ା à¬¨à¬¾à¬\86à¬\81ରà­\87 à¬\86à¬\97ରà­\81 à¬«à¬¾à¬\87ଲà¬\9fିà¬\8f à¬\85à¬\9bି , à¬¸à¬¤à¬°à­\87 à¬\86ପଣ à¬\8fହାà¬\95à­\81 à¬\85ପଲà­\8bଡ଼ à¬\95ରିବାà¬\95à­\81 à¬\9aାହାନà­\8dତି à¬\95ି à¬¨à¬¾à¬\81 à¬¦à­\9fାà¬\95ରି <strong>[[:$1]]</strong> à¬ªà¬°à¬\96ି à¬¨à¬¿à¬\85ନà­\8dତà­\81 à¥¤\n[[$1|thumb]]",
+       "fileexists": "à¬\8fହି à¬\8fà¬\95ା à¬¨à¬¾à¬®à¬°à­\87 à¬\86à¬\97ରà­\81 à¬«à¬¾à¬\87ଲà¬\9fିà¬\8f à¬\85à¬\9bି, à¬¯à¬¦à¬¿ {{GENDER:|à¬\86ପଣ}} à¬¨à¬¿à¬¶à­\8dà¬\9aିତ à¬¨à­\81ହà¬\81ନà­\8dତି à¬¤à­\87ବà­\87 <strong>[[:$1]]</strong> à¬«à¬¾à¬\87ଲà¬\9fି à¬ªà¬°à¬\96ିନିà¬\85ନà­\8dତି à¥¤ [[$1|ଥମà­\8dବ]]",
        "filepageexists": "ଏହି ଫାଇଲର ବିବରଣୀ ପୃଷ୍ଠାଟି <strong>[[:$1]]</strong> ଠାରେ ତିଆରି କରାଯାଇଅଛି, କିନ୍ତୁ ଏହି ନାମରେ ଗୋଟିଏ ବି ଫାଇଲ ନାହିଁ ।\nବିବରଣୀ ପୃଷ୍ଠାରେ ଆପଣ ଦେଇଥିବା ସାରକଥା ଦେଖାଯିବ ନାହିଁ ।\nଆପଣଙ୍କ ବିବରଣୀ ସେଠାରେ ଦେଖାଇବା ନିମନ୍ତେ ଆପଣଙ୍କୁ ନିଜେ ଏହା ବଦଳାଇବାକୁ ପଡ଼ିବ ।\n[[$1|thumb]]",
-       "fileexists-extension": "à¬\8fà¬\95ାପରି à¬¨à¬¾à¬\86à¬\81 à¬¥à¬¿à¬¬à¬¾ à¬«à¬¾à¬\87ଲà¬\9fିà¬\8f à¬\86à¬\97ରà­\81 à¬\85à¬\9bି: [[$2|thumb]]\n* à¬\85ପଲà­\8bଡ଼ à¬\95ରାଯାà¬\89ଥିବା à¬«à¬¾à¬\87ଲର à¬¨à¬¾à¬®: <strong>[[:$1]]</strong>\n* à¬\86à¬\97ରà­\81 à¬¥à¬¿à¬¬à¬¾ à¬«à¬¾à¬\87ଲର à¬¨à¬¾à¬®: <strong>[[:$2]]</strong>\nଦà­\9fାà¬\95ରି à¬\85ଲà¬\97ା à¬¨à¬¾à¬®à¬\9fିà¬\8f à¬¬à¬¾à¬\9bନà­\8dତà­\81 à¥¤",
+       "fileexists-extension": "à¬\8fà¬\95ାପରି à¬¨à¬¾à¬® à¬¥à¬¿à¬¬à¬¾ à¬«à¬¾à¬\87ଲà¬\9fିà¬\8f à¬\86à¬\97ରà­\81 à¬\85à¬\9bି: [[$2|thumb]]\n* à¬\85ପଲà­\8bଡ଼ à¬\95ରାଯାà¬\89ଥିବା à¬«à¬¾à¬\87ଲର à¬¨à¬¾à¬®: <strong>[[:$1]]</strong>\n* à¬\86à¬\97ରà­\81 à¬¥à¬¿à¬¬à¬¾ à¬«à¬¾à¬\87ଲର à¬¨à¬¾à¬®: <strong>[[:$2]]</strong>\nà¬\86ପଣ à¬\86à¬\89 à¬\9fିà¬\95à­\87 à¬¨à¬¿à¬°à­\8dଦà­\8dଦିଷà­\8dà¬\9f à¬¨à¬¾à¬® à¬¬à¬¾à¬\9bିବà­\87 à¬\95ି?",
        "fileexists-thumbnail-yes": "ଫାଇଲଟି ଏକ ସାନ ଆକାରର ଛବି ବୋଲି ବୋଧ ହୁଏ ''(ନଖଦେଖଣା)''.\n[[$1|thumb]]\nଦୟାକରି <strong>[[:$1]]</strong> ଫାଇଲଟି ପରଖି ନିଅନ୍ତୁ ।\nଯଦି ବଛା ଫାଇଲଟି ମୂଳ ଫାଇଲ ଆକାରର ହୋଇଥାଏ ତେବେ ଆଉ ଗୋଟିଏ ନଖଦେଖଣା ସାନ ଛବି ଅପଲୋଡ଼ କରିବାକୁ ପଡ଼ିବ ।",
        "file-thumbnail-no": "ଫାଇଲ ନାମ <strong>$1</strong>ରେ ଆରମ୍ଭ ହୋଇଥାଏ ।\nଏହା ଏକ ଛୋଟ ଆକାରର ଛବି ଭଳି ବୋଧ ହୁଏ ''(ଛୋଟଦେଖଣା)'' ।\nଯଦି ଆପଣଙ୍କ ପାଖରେ ପୁରା ରେଜୋଲୁସନର ଛବିଟିଏ ଅଛି ତେବେ ତାହା ଅପଲୋଡ଼ କରନ୍ତୁ କିମ୍ବା ଫାଇଲ ନାମ ବଦଳାଇ ଦିଅନ୍ତୁ ।",
        "fileexists-forbidden": "ଏହି ନାମରେ ଫାଇଲଟିଏ ଆଗରୁ ଅଛି ଯାହା ଉପରେ ଆଉଥରେ ମଡ଼ାଯାଇପାରିବ ନାହିଁ ।\nତଥାପି ଯଦି ଆପଣ ଫାଇଲ ଅପଲୋଡ଼ କରିବାକୁ ଚାହୁଁଥାନ୍ତି ତେବେ ପଛକୁ ଯାଇ ନୂଆ ନାମଟିଏ ଦିଅନ୍ତୁ ।\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "ଏହି ନାମରେ ଫାଇଲଟିଏ ଆଗରୁ ବଣ୍ଟାଯାଇଥିବା ଫାଇଲ ଭଣ୍ଡାରରେ ଅଛି ।\nଯଦି ଆପଣ ନିଜର ଫାଇଲଟିଏ ଅପଲୋଡ କରିବାକୁ ଚାହୁଁଥିବେ ତାହାହେଲେ ପଛକୁ ଫେରି ନୂଆ ନାମଟିଏ ଦିଅନ୍ତୁ ।\n[[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "ଏହି ଫାଇଲଟି ଏହି {{PLURAL:$1|ଫାଇଲଟି|ଫାଇଲ ମାନଙ୍କ}}ର ଏକ ନକଲ ଅଟେ:",
        "file-deleted-duplicate": "([[:$1]]) ସଙ୍ଗେ ସମାନ ଫାଇଲଟି ଆଗରୁ ଲିଭାଇଦିଆଗଲା ।\nଆପଣ ଫାଇଲଟିକୁ ଆଉଥରେ ଅପଲୋଡ଼ କରିବା ଆଗରୁ ତାହାର ଲିଭାଇବା ଇତିହାସ ଦେଖିନିଅନ୍ତୁ ।",
+       "file-deleted-duplicate-notitle": "ଏହି ଫାଇଲ ଭଳି ଆଉ ଏକ ଫାଇଲ ଲିଭାଇ ଦିଆଯାଇଛି ଓ ନାମଟିକୁ ଦବାଇଦିଆଯାଇଛି । ଆଉଥରେ ଅପଲୋଡ଼ କରିବା ପାଇଁ ଆଗକୁ ବଢ଼ିବା ଆଗରୁ ଏ ପରିସ୍ଥିତର ସମୀକ୍ଷା କରିବା ପାଇଁ ଦବାଯାଇଥିବା ଫାଇଲ ନାମକୁ ଦେଖାଇବା କ୍ଷମତା ଥିବା ଆଉ କାହାକୁ ପଚାରନ୍ତୁ ।",
        "uploadwarning": "ଅପଲୋଡ଼ ଚେତାବନୀ",
        "uploadwarning-text": "ତଳେ ଥିବା ଫାଇଲର ବିବରଣୀ ବଦଳାଇ ଆଉ ଥରେ ଚେଷ୍ଟା କରନ୍ତୁ ।",
        "savefile": "ଫାଇଲ ସାଇତିବା",
        "uploaddisabledtext": "ଫାଇଲ ଅପଲୋଡ଼  ଅଚଳ କରାଯାଇଅଛି ।",
        "php-uploaddisabledtext": "PHPରେ ଫାଇଲ ଅପଲୋଡ଼କୁ ଅଚଳ କରାଯାଇଅଛି ।\nଦୟାକରି ଫାଇଲ_ଅପଲୋଡ଼ ସଜାଣିକୁ ପରଖି ନିଅନ୍ତୁ ।",
        "uploadscripted": "ଏହି ଫାଇଲଟିରେ HTML ବା ସ୍କ୍ରିପ୍ଟ କୋଡ଼ ଥିବାରୁ ଏକ ବେବ ବ୍ରାଉଜରରେ ଅଲଗା ରଖିବେ ।",
+       "uploadscriptednamespace": "ଏହି SVG ଫାଇଲରେ ଏକ ଅନୀତିକର ନେମସ୍ପେସ \"$1\" ରହିଛି ।",
+       "uploadinvalidxml": "ଅପଲୋଡ଼ ହୋଇଥିବା ଫାଇଲରେ XML ପାର୍ସ ହୋଇପାରିବ ନାହିଁ ।",
        "uploadvirus": "ଏହି ଫାଇଲଟିରେ ଏକ ଭାଇରସ ରହିଅଛି!\nସବିଶେଷ: $1",
        "uploadjava": "ଏହି ଫାଇଲଟି ଏକ ZIP ଫାଇଲ ଯେଉଁଥିରେ Java .class ଫାଇଲ ଅଛି ।\nJava ଫାଇଲ ଅପଲୋଡ଼ କରିବା ଅନୁମୋଦିତ ନୁହେଁ କାରଣ ସେସବୁ ସୁରକ୍ଷା ବଳୟକୁ ନଷ୍ଟ କରିଦିଅନ୍ତି ।",
        "upload-source": "ଉତ୍ସ ଫାଇଲ",
        "license": "ସତ୍ଵ:",
        "license-header": "ସତ୍ଵ",
        "nolicense": "ଗୋଟିଏ ବି ବଛାଯାଇନାହିଁ",
+       "licenses-edit": "ଲାଇସେନ୍ସ ଅପସନ ସମ୍ପାଦନା କରନ୍ତୁ",
        "license-nopreview": "(ସାଇତିବା ଆଗଦେଖଣା ମିଳୁନାହିଁ)",
-       "upload_source_url": "(ଏକ ବୈଧ ସାଧାରଣରେ ଖୋଲାଯାଇପାରୁଥିବା URL)",
-       "upload_source_file": "(ଆପଣଙ୍କ କମ୍ପୁଟରରେ ଥିବା ଏକ ଫାଇଲ)‌",
+       "upload_source_url": "(ଏକ ବୈଧ ସର୍ବସାଧାରଣରେ ଖୋଲାଯାଇ ପାରୁଥିବା ଆପଣଙ୍କ ବଛା URL)",
+       "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": "ନାଁ",
        "filedelete-maintenance": "ରକ୍ଷଣାବେକ୍ଷଣ ନିମନ୍ତେ ଫାଇଲ ଲିଭାଇବା ଓ ପୁନସ୍ଥାପନ କିଛି କାଳ ପାଇଁ ଅଚଳ କରିଦିଆଯାଇଛି ।",
        "filedelete-maintenance-title": "ଏହି ଫାଇଲକୁ ଲିଭାଯାଇପାରିବ ନାହି",
        "mimesearch": "MIME ଖୋଜା",
-       "mimesearch-summary": "ଏହି ପୃଷ୍ଠାଟି ଫାଇଲ ମାନଙ୍କର MIME ପ୍ରକାରକୁ ଛଣିବାରେ ସହଯୋଗ କରିଥାଏ ।\nଇନପୁଟ: ବିଷୟ ଶ୍ରେଣୀ/ଉପ ଶ୍ରେଣ, ଯଥା: <code>image/jpeg</code> ।",
+       "mimesearch-summary": "ଏହି ପୃଷ୍ଠାଟି ଫାଇଲମାନଙ୍କର MIME ଅନୁସାରେ ସେମାନଙ୍କୁ ବାଛିଥାଏ ।\nଇନପୁଟ: contenttype/subtype କିମ୍ବା contenttype/*, ଯଥା: <code>image/jpeg</code> ।",
        "mimetype": "MIME ପ୍ରକାର:",
        "download": "ଡାଉନଲୋଡ଼",
        "unwatchedpages": "ଦେଖାହୋଇନଥିବା ପୃଷ୍ଠା",
        "listredirects": "ପୁନପ୍ରେରଣ ପୃଷ୍ଠାସମୂହର ତାଲିକା",
+       "listduplicatedfiles": "ଦୁଇଟି ଲେଖାଏ ବା ଅଧିକ ପ୍ରତିରୂପ ଥିବା ଫାଇଲ ତାଲିକା",
+       "listduplicatedfiles-summary": "ଏକ ଫାଇଲର ନଗଦ ସଂସ୍କରଣ ଆଉ ଏକ ଫାଇଲର ନଗଦ ସଂସ୍କରଣ ସହ ପୂରା ସମାନଥିବା ଫାଇଲମାନଙ୍କର ଏହା ଏକ ତାଲିକା । କେବଳ ସ୍ଥାନୀୟ ଫାଇଲକୁ ଏଥିରେ ଅନ୍ତର୍ଭୁକ୍ତ କରାଯାଇଛି ।",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]]ର [[$3|{{PLURAL:$2|ଏକ ନକଲ|$2ଟି ନକଲ}} ଆଗରୁ ଅଛି]] ।",
        "unusedtemplates": "ବ୍ୟବହାର ହୋଇନଥିବା ଛାଞ୍ଚ",
        "unusedtemplatestext": "ଏହି ପୃଷ୍ଠାରେ {{ns:template}} ନେମସ୍ପେସରେ ଥିବା ସବୁ ପୃଷ୍ଠାର ତାଲିକା ତିଆରି କରିଥାଏ ଯାହା ଆଉ ଏକ ପୃଷ୍ଠା ଭିତରେ ନାହିଁ ।\nଲିଭାଇବା ଆଗରୁ ଛାଞ୍ଚ ପାଇଁ ଥିବା ବାକି ଲିଙ୍କ ସବୁ ପରଖି ନିଅନ୍ତୁ ।",
        "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-header-pages": "ପୃଷ୍ଠା ପରିସଙ୍ଖ୍ୟାନ",
        "statistics-header-edits": "ପରିସଙ୍ଖ୍ୟାନ ସମ୍ପାଦନା",
-       "statistics-header-views": "ପରିସଙ୍ଖ୍ୟାନ ଦେଖିବେ",
        "statistics-header-users": "ସଭ୍ୟ ପରିସଙ୍ଖ୍ୟାନ",
        "statistics-header-hooks": "ବାକି ପରିସଙ୍ଖ୍ୟାନ",
        "statistics-articles": "ସୂଚୀ ପୃଷ୍ଠାସମୂହ",
        "statistics-files": "ଫାଇଲସବୁ ଅପଲୋଡ଼ କରାଗଲା",
        "statistics-edits": "{{SITENAME}} ତିଆରିହେବା ବେଳରୁ ପୃଷ୍ଠାର ନାମ",
        "statistics-edits-average": "ପୃଷ୍ଠାପ୍ରତି ହାରାହାରି ସମ୍ପାଦନା",
-       "statistics-views-total": "ମୋଟ ଦେଖଣା",
-       "statistics-views-total-desc": "ଅଚଳ ପୃଷ୍ଠା ଓ ବିଶେଷ ପୃଷ୍ଠାର ଦେଖଣା ଏହା ଭିତରେ ଦିଆଯାଇନାହିଁ",
-       "statistics-views-peredit": "ସମ୍ପାଦନା ପ୍ରତି ଦେଖା",
        "statistics-users": "ପଞ୍ଜିକରଣ କରିଥିବା [[Special:ListUsers|ସଭ୍ୟଗଣ]]",
        "statistics-users-active": "ସଚଳ ସଭ୍ୟ",
        "statistics-users-active-desc": "ବିଗତ {{PLURAL:$1|ଦିନରେ|$1 ଦିନରେ}} କିଛି କାମ କରିଥିବା ସଭ୍ୟଗଣ",
-       "statistics-mostpopular": "ସବୁଠାରୁ ଅଧିକ ଦେଖାଯାଇଥିବା ପୃଷ୍ଠା",
+       "pageswithprop": "ପୃଷ୍ଠା ବିବରଣୀ ଥିବା ପୃଷ୍ଠାମାନ",
+       "pageswithprop-legend": "ପୃଷ୍ଠା ବିବରଣୀଟିଏ ଥିବା ପୃଷ୍ଠାମାନ",
+       "pageswithprop-text": "ଏହୁ ପୃଷ୍ଠାରେ ଏକ ନିର୍ଦ୍ଦିଷ୍ଟ ପୃଷ୍ଠାର ଗୁଣଥିବା ପୃଷ୍ଠାମାନଙ୍କର ତାଲିକା ରହିଛି ।",
+       "pageswithprop-prop": "ଗୁଣ ନାମ:",
        "pageswithprop-submit": "ଯିବା",
+       "pageswithprop-prophidden-long": "ଲମ୍ବା ଟେକ୍ସଟର ଗୁଣର ମୂଲ୍ୟ ଅଧିକ କାଳ ଧରି ଲୁଚିରହିଥିବା ($1)",
+       "pageswithprop-prophidden-binary": "ବାଇନାରି ଗୁଣ ମୂଲ୍ୟ ଲୁଚାଯାଇଛି ($1)",
        "doubleredirects": "ଯୋଡ଼ା ପୁନପ୍ରେରଣ",
        "doubleredirectstext": "ଏହି ପୃଷ୍ଠା ବାକି ବହୁବିକଳ୍ପ ପୃଷ୍ଠାମାନଙ୍କ ସହ ଯୋଡ଼ିଥାଏ ।\nପ୍ରତ୍ୟେକ ଧାଡ଼ିରେ ପ୍ରଥମ ଓ ଶେଷ ପୁନପ୍ରେରଣ ସହ ଯୋଡ଼ିବା ଲିଙ୍କ ରହିଥାଏ, ଆହୁରି ମଧ୍ୟ ଏଥିରେ ଦ୍ଵିତୀୟ ପୁନପ୍ରେରଣର ଲକ୍ଷ ସହ ଯୋଡ଼ିବାର ଲିଙ୍କ ଥାଏ , ଯାହାକି ସାଧାରଣତ \"ପ୍ରକୃତ\" ଲକ୍ଷ ପୃଷ୍ଠା ହୋଇଥାଏ, ଯାହାକୁ ପ୍ରଥମ ପୁନପ୍ରେରଣ ପୃଷ୍ଠା ଯୋଡ଼ିଥାଏ ।\n<del>କଟାହୋଇଥିବା</del> ନିବେଶସବୁ ସଜଡ଼ାଗଲା ।",
        "double-redirect-fixed-move": "[[$1]]କୁ ଘୁଞ୍ଚାଯାଇଅଛି ।\nଏବେ ଆପେ ଆପେ ଅପଡେଟ ହୋଇଥାଏ ଏବଂ ଏବେ [[$2]]କୁ ପୁନପ୍ରେରିତ ହୋଇଛି ।",
        "ninterwikis": "{{PLURAL:$1|interwiki|interwikis}} $1",
        "nlinks": "$1 ଟି {{PLURAL:$1|ଲିଙ୍କ|ଲିଙ୍କ}}",
        "nmembers": "$1 {{PLURAL:$1|member|ସଭ୍ୟ}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|ସଭ୍ୟ|ସଭ୍ୟଗଣ}}",
        "nrevisions": "$1 ଗୋଟି {{PLURAL:$1|ସଂସ୍କରଣ|ସଂସ୍କରଣ}}",
        "nviews": "$1 ଟି {{PLURAL:$1|ଦେଖଣା|ଦେଖଣା}}",
        "nimagelinks": "$1 ଟି {{PLURAL:$1|ପୃଷ୍ଠା|ପୃଷ୍ଠା}}ରେ ବ୍ୟବହାର କରାଯାଇଅଛି",
        "uncategorizedtemplates": "ଶ୍ରେଣୀହିନ ଛାଞ୍ଚସବୁ",
        "unusedcategories": "ବ୍ୟବହାର ହେଉନଥିବା ଶ୍ରେଣୀସମୂହ",
        "unusedimages": "ବ୍ୟବହାର ହେଉନଥିବା ଫାଇଲସମୂହ",
-       "popularpages": "ଜଣାଶୁଣା ପୃଷ୍ଠାସମୂହ",
        "wantedcategories": "ଦରକାରୀ ଶ୍ରେଣୀସମୂହ",
        "wantedpages": "ଦରକାରି ପୃଷ୍ଠା",
        "wantedpages-badtitle": "$1 ଉତ୍ତରସବୁରେ ଥିବା ଭୁଲ ଟାଇଟଲ",
        "wantedfiles": "ଦରକାରି ଫାଇଲ",
        "wantedfiletext-cat": "ନିମ୍ନଲିଖିତ ଫାଇଲଗୁଡିକ ବ୍ୟବହୃତ ହେଇଛି ହଲେ ନାହିଁ । ରହିଥିବା ଫାଇଲ ବଦଳରେ ବାହାରେ ଥିବା ଫାଇଲଗୁଡିକ ତାଲିକାଭୁକ୍ତ ହେଇଛି । ଏହିଭଳି ଭୁଲ ସତ୍ୟଗୁଡିକ <del>struck out</del> ହେଇଯିବ । ଅଧିକନ୍ତୁ, ପ୍ରକୃତରେ ନଥିବା ଫାଇଲଗୁଡିକର ପୃଷ୍ଠାଗୁଡିକ [[:$1]]ରେ ତାଲିକାଭୁକ୍ତ ହୋଇଛି ।",
+       "wantedfiletext-cat-noforeign": "ଏହି ଫାଇଲସବୁ ତିଆରି ନ କରାଯାଇ ବ୍ୟବହାର କରାଯାଇଛି । ଏଥି ସହିତ, ତିଆରି ହୋଇନଥିବା ଫାଇଲକୁ ଏମବେଡ଼ କରିଥିବା ପୃଷ୍ଠାସବୁର ତାଲିକା [[:$1]]ରେ ରହିଛି ।",
        "wantedfiletext-nocat": "ନିମ୍ନଲିଖିତ ଫାଇଲଗୁଡିକ ବ୍ୟବହୃତ ହେଇଛି ହଲେ ନାହିଁ । ରହିଥିବା ଫାଇଲ ବଦଳରେ ବାହାରେ ଥିବା ଫାଇଲଗୁଡିକ ତାଲିକାଭୁକ୍ତ ହେଇଛି । ଏହିଭଳି ଭୁଲ ସତ୍ୟଗୁଡିକ <del>struck out</del> ହେଇଯିବ ।",
+       "wantedfiletext-nocat-noforeign": "ଏହି ଫାଇଲସବୁ ବ୍ୟବହୃତ ହୋଇଥିଲେ ମଧ୍ୟ ତିଆରି କରାଯାଇନାହିଁ ।",
        "wantedtemplates": "ଦରକାରୀ ଛାଞ୍ଚ",
        "mostlinked": "ଅଧିକ ଯୋଡ଼ାଯାଇଥିବା ପୃଷ୍ଠା",
        "mostlinkedcategories": "ବେଶି ଯୋଡ଼ାଯାଇଥିବା ଶ୍ରେଣୀ",
-       "mostlinkedtemplates": "ବà­\87ଶà­\80 à¬¯à­\8bଡ଼ାଯାà¬\87ଥିବା à¬\9bାà¬\9eà­\8dà¬\9a",
+       "mostlinkedtemplates": "ବà­\87ଶି à¬¯à­\8bଡ଼ାଯାà¬\87ଥିବା à¬ªà­\83ଷà­\8dଠା",
        "mostcategories": "ଅଧିକ ଶ୍ରେଣୀ ଥିବା ପୃଷ୍ଠା",
        "mostimages": "ଫାଇଲରେ ବେଶି ଯୋଡ଼ାଯାଇଥିବା ଥିବା",
        "mostinterwikis": "ସବୁଠାରୁ ଅଧିକ ଉଇକିଥିବା ପୃଷ୍ଠାଗୁଡିକ",
        "mostrevisions": "ସବୁଠାରୁ ଅଧିକ ସଙ୍କଳନ ଥିବା ପୃଷ୍ଠାସମୂହ",
        "prefixindex": "ଆଗରୁ କିଛି ଯୋଡ଼ା ସହ ଥିବା ସବୁ ଫରଦସବୁ",
        "prefixindex-namespace": "ଉପସର୍ଗ ଲାଗିଥିବା ସବୁଯାକ ପୃଷ୍ଠା ($1 ଗୋଟି ନେମସ୍ପେସ)",
+       "prefixindex-strip": "ତାଲିକାରୁ ନାମ ଆଗରୁ ଲାଗୁଥିବା ଶବ୍ଦ ହଟାନ୍ତୁ",
        "shortpages": "ଛୋଟ ପୃଷ୍ଠାସମୂହ",
        "longpages": "ଲମ୍ବା ପୃଷ୍ଠା",
        "deadendpages": "ଆଗକୁ ଯାଇପାରୁନଥିବା ପୃଷ୍ଠା",
        "deadendpagestext": "ଏହି ପୃଷ୍ଠାସବୁ {{SITENAME}}ର ବାକି ପୃଷ୍ଠାମାନଙ୍କ ସଙ୍ଗେ ଯୋଡ଼ା ହୋଇ ନାହାନ୍ତି ।",
        "protectedpages": "କିଳାଯାଇଥିବା ପୃଷ୍ଠାମାନ",
        "protectedpages-indef": "କେବଳ ଆସିମୀତ କାଳ ପାଇଁ କିଳିବା",
+       "protectedpages-summary": "ଏହି ପୃଷ୍ଠାରେ କିଳା ହୋଇଥିବା ଆଗରୁ ତିଆରି ହୋଇ ରହିଥିବା ପୃଷ୍ଠାସବୁର ତାଲିକା ଅଛି । ତିଆରି ହେବାରୁ ରୋକାଯାଇଥିବା ନାମମାନଙ୍କର ତାଲିକା ପାଇଁ [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] ଦେଖନ୍ତୁ ।",
        "protectedpages-cascade": "କିଲାଯାଇଥିବା ପୃଷ୍ଠାସବୁକୁ ଏକାଠି ସଜାଇ ରଖୁଅଛୁଁ",
+       "protectedpages-noredirect": "ଲେଉଟାଣି ଲୁଚାନ୍ତୁ",
        "protectedpagesempty": "ଏହି ସବୁ ସଜାଣି ସହ ଗୋଟିଏ ବି ପୃଷ୍ଠା ଏବେ କିଳାଯାଇ ନାହିଁ ।",
        "protectedpages-timestamp": "ସମୟ",
        "protectedpages-page": "ପୃଷ୍ଠା",
        "protectedpages-expiry": "ଅଚଳ ହେବ",
+       "protectedpages-performer": "ସଭ୍ୟଙ୍କୁ କିଳିବେ",
+       "protectedpages-params": "ଅଟକ ଗୁଣାବଳୀ",
+       "protectedpages-reason": "କାରଣ",
+       "protectedpages-unknown-timestamp": "ଅଜଣା",
        "protectedpages-unknown-performer": "ଅଜଣା ସଭ୍ୟ",
        "protectedtitles": "କିଳାଯାଇଥିବା ଶିରୋନାମାମାନ",
+       "protectedtitles-summary": "ଏହି ପୃଷ୍ଠାରେ ତିଆରି କରିବାରୁ ଅଟକାଯାଇଥିବା ନାମସବୁର ତାଲିକା ରହିଛି । ଉପଲବ୍ଧ ଥିବା ଓ କିଳାଯାଇଥିବା ପୃଷ୍ଠାର ତାଲିକା ପାଇଁ [[{{#special:ProtectedPages}}|{{int:protectedpages}} ଦେଖନ୍ତୁ]] ।",
        "protectedtitlesempty": "ଏହି ସବୁ ସଜାଣି ସହ ଗୋଟିଏ ବି ପୃଷ୍ଠା ଏବେ କିଳାଯାଇ ନାହିଁ ।",
        "listusers": "ବ୍ୟବହାରକାରୀଙ୍କ ତାଲିକା",
        "listusers-editsonly": "କେବଳ କିଛି ସମ୍ପାଦନା କରିଥିବା ସଭ୍ୟମାନଙ୍କୁ ଦେଖାଇବେ",
        "listusers-creationsort": "ତିଆରି ତାରିଖ ଅନୁସାରେ ସଜାଇବେ",
+       "listusers-desc": "ଅବରୋହୀ କ୍ରମରେ ସଜାନ୍ତୁ",
        "usereditcount": "$1 ଗୋଟି {{PLURAL:$1|ସମ୍ପାଦନା|ସମ୍ପାଦନା}}",
        "usercreated": "$1 ତାରିଖ ଦିନ $2 ବେଳେ {{GENDER:$3|ତିଆରି କରାଗଲା}}",
        "newpages": "ନୂଆ ପୃଷ୍ଠା",
        "querypage-disabled": "ଏହି ବିଶେଷ ପୃଷ୍ଠାଟି ଦେଖଣା କାରଣରୁ ଅଚଳ କରାଯାଇଅଛି ।",
        "booksources": "ବହିର ମୁଳାଧାର",
        "booksources-search-legend": "ବହିର ସ୍ରୋତସବୁକୁ ଖୋଜିବେ",
-       "booksources-go": "ଯିବା",
+       "booksources-search": "ଖୋଜିବେ",
        "booksources-text": "ତଳଲିଖିତ ତାଲିକାଟିରେ ନୂଆ ଓ ପୁରୁଣା ବହି ବିକୁଥିବା ସାଇଟମାନଙ୍କର ତାଲିକା ରହିଅଛି, ଆଉ ଆପଣ ଖୋଜୁଥିବା ବହିର ତଥ୍ୟ ବି ଏଥିରେ ଥାଇପାରେ ।",
        "booksources-invalid-isbn": "ଏହି ISBN ଟି ବୈଧ ବୋଲି ବୋଧ ହେଉନାହିଁ; ନକଲ କରିଥିବା ମୂଳ ସ୍ଥାନରେ ଆଉଥରେ ପରଖିନିଅନ୍ତୁ ।",
        "specialloguserlabel": "ଯୋଗଦାନକାରୀ:",
        "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-summary": "MediaWiki ସଫ୍ଟଓଏର ଦ୍ୱାରା ଆପେ ଆପେ ତିଆରି ହେଉଥିବା ଶ୍ରେଣୀସବୁର ତାଲିକା ଏହି ପୃଷ୍ଠାରେ ରହିଛି । {{ns:8}} ନେମସ୍ପେସରେ ସିଷ୍ଟମ ମେସେଜସବୁ ବଦଳାଇ ସେମାନଙ୍କ ନାମ ବଦଳା ଯାଇପାରିବ ।",
+       "trackingcategories-msg": "ଶ୍ରେଣୀ ଉପରେ ନିଘା",
        "trackingcategories-name": "ନାମ ମେସେଜ କରନ୍ତୁ",
+       "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>$wgMaxArticleSize</code>ରୁ ବଡ଼ ହୋଇଗଲା (ବେଳେବେଳେ <code>{{{Foo}}}</code> ଭଳି ତିନୋଟି କୁଟିଳ ବନ୍ଧନୀରେ ଦେଖହିବାକୁ ମିଳେ) ।",
+       "expensive-parserfunction-category-desc": "ଏହି ପୃଷ୍ଠାଟି କିଛି ଜଟିଳ ପାର୍ସ ଫଙ୍କସନ ବ୍ୟବହାର କରେ (ଯଥା <code>#ifexist</code>) । [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] ଦେଖନ୍ତୁ ।",
+       "broken-file-category-desc": "ଏହି ପୃଷ୍ଠାରେ ଏକ ଅକାମୀ ଫାଇଲର ଲିଙ୍କ ରହିଛି (ଫାଇଲ ନଥାଇ ତାହାକୁ ଏମବେଡ଼ କରିବା ପାଇଁ ଲିଙ୍କ ଦିଆଯାଇଛି) ।",
+       "hidden-category-category-desc": "ବିଷୟବସ୍ତୁରେ ଶ୍ରେଣୀଟିରେ <code><nowiki>__HIDDENCAT__</nowiki></code> ରହିଛି, ଯାହା ତାହାକୁ  ଆପେଆପେ ଶ୍ରେଣୀ ଲିଙ୍କ ଘରେ ଦେଖାଇବାରୁ ରୋକେ ।",
        "trackingcategories-nodesc": "କୌଣସି ବିବରଣ ନାହିଁ ।",
        "trackingcategories-disabled": "ଶ୍ରେଣୀ ନିଷ୍କ୍ରିୟ କରାଯାଇଛି",
        "mailnologin": "ଗୋଟିଏ ବି ପଠାଇବା ଠିକଣା ନାହିଁ",
        "mywatchlist": "ଦେଖଣାତାଲିକା",
        "watchlistfor2": "$1 $2 ପାଇଁ",
        "nowatchlist": "ଆପଣଙ୍କ ଦେଖଣା ତାଲିକାରେ କିଛି ବି ଜିନିଷ ନାହିଁ ।",
-       "watchlistanontext": "à¬\86ପଣା à¬¦à­\87à¬\96ଣାତାଲିà¬\95ାରà­\87 à¬\95ିà¬\9bି à¬¸à¬®à­\8dପାଦନା à¬\95ରିବା à¬¨à¬¿à¬®à¬¨à­\8dତà­\87 à¬¦à­\9fାà¬\95ରି  $1 କରନ୍ତୁ ।",
+       "watchlistanontext": "ନିà¬\9c à¬¦à­\87à¬\96ଣାତାଲିà¬\95ାà¬\95à­\81 à¬¦à­\87à¬\96ିବା à¬\95ିମà­\8dବା à¬¸à¬®à­\8dପାଦନା à¬\95ରିବା à¬ªà¬¾à¬\87à¬\81  à¬²à¬\97 à¬\87ନ କରନ୍ତୁ ।",
        "watchnologin": "ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି",
        "addwatch": "ଦେଖଣାତାଲିକାରେ ଯୋଡ଼ିବେ",
        "addedwatchtext": "\"[[:$1]]\" ପୃଷ୍ଠାଟି ଆପଣଙ୍କ [[Special:Watchlist|ଦେଖଣାତାଲିକା]]ରେ ଯୋଡ଼ିଦିଆଗଲା ।\nଏହି ପୃଷ୍ଠାରେ ଭବିଷ୍ୟତର ଅଦଳ ବଦଳ ଓ ତାହା ସହ ଯୋଡ଼ା ଆଲୋଚନା ପୃଷ୍ଠା ସେଠାରେ ଦିଆଯିବ ।",
        "watchlist-details": "ଆପଣଙ୍କ ଦେଖଣା ତାଲିକାରେ {{PLURAL:$1|$1 ଟି ପୃଷ୍ଠା|$1 ଟି ପୃଷ୍ଠା}} ଅଛି, ଆଲୋଚନା ପୃଷ୍ଠାମାନଙ୍କୁ ଅଲଗା ଗଣାଯାଇନାହିଁ ।",
        "wlheader-enotif": "ଇମେଲ ସୂଚନା ସଚଳ କରାଗଲା ।",
        "wlheader-showupdated": "ଆପଣ ଶେଷଥର ଦେଖିଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକ '''ମୋଟା ଅକ୍ଷର'''ରେ ଦେଖାଯାଉଅଛି ।",
-       "wlnote": "$3, $4 à¬¸à­\81ଦà­\8dଧା à¬¬à¬¿à¬\97ତ {{PLURAL:$2|à¬\98ଣà­\8dà¬\9fà­\87 à¬­à¬¿à¬¤à¬°à­\87|'''$2''' à¬\98ଣà­\8dà¬\9fା à¬­à¬¿à¬¤à¬°à­\87}} à¬\98à¬\9fିଥିବା {{PLURAL:$1|ଶà­\87ଷ à¬¬à¬¦à¬³à¬\9fି à¬\85à¬\9bି|ଶà­\87ଷ '''$1''' à¬\9fି à¬¬à¬¦à¬³}} à¬¤à¬³à­\87 à¬¦à¬¿à¬\86ଯାà¬\87à¬\9bି ।",
-       "wlshowlast": "ଶà­\87ଷ $1 à¬\98ଣà­\8dà¬\9fା $2 à¬¦à¬¿à¬¨ $3 à¬¦à­\87à¬\96ାà¬\87ବà­\87",
+       "wlnote": "$3, $4 à¬\85ନà­\81ସାରà­\87 à¬¬à¬¿à¬\97ତ {{PLURAL:$2|à¬\98ଣà­\8dà¬\9fାà¬\95ରà­\87|<strong>$2</strong> à¬\98ଣà­\8dà¬\9fାରà­\87}}{{PLURAL:$1|ଶà­\87ଷ à¬¬à¬¦à¬³|ଶà­\87ଷ <strong>$1</strong> à¬¬à¬¦à¬³ à¬¤à¬³à­\87 à¬¦à¬¿à¬\86à¬\97ଲା}} ।",
+       "wlshowlast": "à¬\97ତ $1 à¬\98ଣà­\8dà¬\9fା $2 à¬¦à¬¿à¬¨ à¬¦à­\87à¬\96ାନà­\8dତà­\81",
        "watchlist-options": "ଦେଖଣା ବିକଳ୍ପସବୁ",
        "watching": "ଦେଖୁଛି...",
        "unwatching": "ଦେଖୁନାହିଁ...",
        "enotif_lastvisited": "ଆପଣଙ୍କ ଶେଷ ଦେଖଣା ପରେ ହୋଇଥିବା ବଦଳସବୁକୁ  ଦେଖିବା ନିମନ୍ତେ $1 ଦେଖନ୍ତୁ ।",
        "enotif_lastdiff": "ଏହି ବଦଳ ଦେଖିବା ପାଇଁ $1 ଦେଖନ୍ତୁ ।",
        "enotif_anon_editor": "ବେନାମି ସଭ୍ୟ $1",
-       "enotif_body": "ପ୍ରିୟ $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nଏହି {{SITENAME}} $PAGETITLE ପୃଷ୍ଠାଟି $PAGEEDITOR ଙ୍କ ଦେଇ $PAGEEDITDATE ବେଳେ $CHANGEDORCREATE, ନଗଦ ସଂସ୍କରଣ ପାଇଁ $PAGETITLE_URL  ଦେଖନ୍ତୁ ।\n\n$NEWPAGE\n\nସମ୍ପାଦକଙ୍କ ସାରକଥା: $PAGESUMMARY $PAGEMINOREDIT\n\nସମ୍ପାଦକଙ୍କ ସହିତ ଯୋଗାଯୋଗ:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nଭବିଷ୍ୟତରେ ଆପଣ ପୃଷ୍ଠାଟିକୁ ନ ଦେଖିବା ଯାଏ ଆଉ କିଛି ବି ସୂଚନା ରହିବ ନାହିଁ ।ଆପଣା ଦେଖଣାତାଲିକାରୁ ଆପଣ ସବୁଯାକ ସୂଚନା ଫଳକକୁ ମୂଳ ଅବସ୍ଥାକୁ ଫେରାଇ ଦେଇପାରିବେ ।\n\n\t\t\t ଆପଣଙ୍କର ହିତକାରୀ {{SITENAME}} ସୂଚନା ପ୍ରଣାଳୀ\n\n--\nଆପଣା ଇ-ମେଲ ସୂଚନା ସଜାଣି ଦେଖିବା ନିମନ୍ତେ\n{{canonicalurl:{{#special:Preferences}}}} ଦେଖନ୍ତୁ",
+       "enotif_body": "Dear $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nଉଇକିଆଳିଙ୍କ ସୂଚନା: $PAGESUMMARY $PAGEMINOREDIT\n\nଉଇକିଆଳିଙ୍କୁ ଜଣାନ୍ତୁ:\nmail: $PAGEEDITOR_EMAIL\nwiki: $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": "ପୃଷ୍ଠାଟି ଲିଭାଇଦେବେ",
        "exbeforeblank": "ଖାଲିକରିବା ଆଗରୁ ଭିତରେ \"$1\" ଥିଲା",
        "delete-confirm": "ଲିଭେଇବେ \"$1\"",
        "delete-legend": "ଲିଭାଇବେ",
-       "historywarning": "'''ଚେତାବନୀ:''' ଆପଣ ଲିଭାଇବାକୁ ଯାଉଥିବା ଏହି ପୃଷ୍ଠାଟିର ପାଖାପାଖି $1 {{PLURAL:$1|ଟି ସଙ୍କଳନ|ଗୋଟି ସଙ୍କଳନ}} ରହିଅଛି:",
+       "historywarning": "<strong>ଚେତାବନୀ:</strong> ଆପଣ ଲିଭାଇବାକୁ ଯାଉଥିବା ପୃଷ୍ଠାଟିରେ $1 {{PLURAL:$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  {{PLURAL:$1|ଟି ସଂସ୍କରଣ|ଗୋଟି ସଂସ୍କରଣ}} ରହିଛି ।\n{{SITENAME}}ରେ ଦୁର୍ଘଟଣାବଶତ ଅସୁବିଧାକୁ ଏଡ଼ାଇବା ପାଇଁ ଏହାକୁ ଲିଭାଇବାରୁ ବାରଣ କରାଯାଇଛି ।",
        "delete-warning-toobig": "ଏହି ପୃଷ୍ଠାର ଏକ ଲମ୍ବ ସମ୍ପାଦନ ଇତିହାସ ରହିଛି, ଯେଉଁଥିରେ $1 {{PLURAL:$1|ଗୋଟି ସଂସ୍କରଣ|ଗୋଟି ସଂସ୍କରଣ}} ରହିଛି ।\nଏହାକୁ ଲିଭାଇଲେ {{SITENAME}}ରେ ଅସୁବିଧା ହୋଇପାରେ ।\nସାବଧାନତାର ସହ ଆଗକୁ ବଢ଼ନ୍ତୁ ।",
+       "deleteprotected": "ଏହି ପୃଷ୍ଠାଟି କିଳାଯାଇଥିବାରୁ ଆପଣ ଏହାକୁ ଲିଭାଇପାରିବେ ନାହିଁ ।",
+       "deleting-backlinks-warning": "''' ଚେତାବନୀ:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|ବାକି ପୃଷ୍ଠା]] ଆପଣ ଲିଭାଇବାକୁ ଯାଉଥିବା ପୃଷ୍ଠାଟି ସହିତ ଲିଙ୍କ କରନ୍ତୁ କିମ୍ବା ତାହାକୁ କାଢ଼ନ୍ତୁ ।",
        "rollback": "ପୁରାପୁରି ପଛକୁ ଫେରିବା ବଦଳ",
        "rollback_short": "ପୂରାପୂରି ପଛକୁ ଫେରିଯିବେ",
        "rollbacklink": "ପୂରାପୂରି ପଛକୁ ଫେରିଯିବେ",
        "alreadyrolled": "[[User:$2|$2]]([[User talk:$2|talk]] {{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])ଙ୍କ ଦେଇ [[:$1]]ରେ ହୋଇଥିବା ଶେଷ ବଦଳକୁ ପଛକୁ ଫେରାଯାଇପାରିବ ନାହିଁ ;\nଏହାକୁ ଆଉ କେହି ସମ୍ପାଦନା କରିଛି ବା ପୁରାପୁରି ପଛକୁ ଫେରାଇଦେଇଛି ।\n\nଏହି ପୃଷ୍ଠାର ଶେଷ  ସମ୍ପାଦନା  [[User:$3|$3]] ([[User talk:$3|talk]]{{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": "{{GENDER:$1|[[User:$1|$1]]}}ଙ୍କ ଦେଇ ଜଣେ ଅଜଣା ସଭ୍ୟଙ୍କ ସମ୍ପାଦନାକୁ ପଛକୁ ଫେରଗଲା",
        "rollback-success": "$1ଙ୍କ ଦେଇ ହୋଇଥିବା ସମ୍ପାଦନାକୁ ପୁରାପୁରି ପଛକୁ ଲେଉଟାଇ ଦିଆଗଲା;\n$2ଙ୍କ ଦେଇ ଶେଷଥର ହୋଇଥିବା ସଂସ୍କରଣକୁ ବଦଳାଇ ଦିଆଗଲା ।",
        "sessionfailure-title": "ଅବଧି ବିଫଳ",
        "sessionfailure": "ଆପଣଙ୍କ ଲଗଇନ ଅବଧିରେ କିଛି ଅସୁବିଧା ହୋଇଛି;\nଅବଶ୍ୟ ଚୋରା ବିରୋଧରେ ଏହି କାମଟି ନାକଚ କରିଦିଆଗଲା ।\nଆଗ ପୃଷ୍ଠାକୁ ଲେଉଟିଯାଇ ପୃଷ୍ଠାଟି ଆଉଥରେ ଲୋଡ଼ କରନ୍ତୁ ।",
        "protect-locked-blocked": "ଆପଣଙ୍କୁ ଅଟକାଯାଇଥିବାରୁ ଆପଣ ପ୍ରତିରକ୍ଷା ସ୍ତରକୁ ବଦଳାଇ ପାରିବେ ନାହିଁ ।\n'''$1''' ପୃଷ୍ଠା ପାଇଁ ଏବେକାର ସଜାଣି ଦେଖନ୍ତୁ:",
        "protect-locked-dblock": "ଏକ ସଚଳ ଡାଟାବେସ କିଳାଯାଇଥିବା ହେତୁ ପ୍ରତିରକ୍ଷା ସ୍ତରକୁ ବଦଳଯାଇପାରିବ ନାହିଁ ।\n'''$1''' ପୃଷ୍ଠା ପାଇଁ ଏବେକାର ସଜାଣି ଏଠାରେ ଦିଆଗଲା:",
        "protect-locked-access": "ଆପଣଙ୍କ ଖାତାରେ ପ୍ରତିରକ୍ଷା ସ୍ତରକୁ ବଦଳାଇବା ନିମନ୍ତେ ଅନୁମତି ନାହିଁ ।\n'''$1''' ପୃଷ୍ଠା ପାଇଁ ଏବେକାର ସଜାଣି ଏଠାରେ ଦିଆଗଲା:",
-       "protect-cascadeon": "ଏହି ପୃଷ୍ଠାଟି ଏବେ ପାଇଁ କିଳାଯାଇଛି {{PLURAL:$1|ପୃଷ୍ଠା, ଯେଉଁଥିରେ|ପୃଷ୍ଠମାନ, ଯେଉଁସବୁରେ}} କାସକେଡ଼କରା ସୁରକ୍ଷା ସଚଳ ଥିଲା ।\nଆପଣ ପୃଷ୍ଠାଟିର ପ୍ରତିରକ୍ଷା ସ୍ତର ବଦଳାଇ ପାରିବେ, କିନ୍ତୁ ଏହା କାସକେଡ଼ ପ୍ରତିରକ୍ଷାକୁ ପ୍ରଭାବିତ କରିନଥାଏ ।",
+       "protect-cascadeon": "ଏହି {{PLURAL:$1|ପୃଷ୍ଠାଟିରେ|ପୃଷ୍ଠାମାନଙ୍କରେ}} କ୍ୟାସକେଡ଼ କିଳିବା ସକ୍ରିୟ ହୋଇଥିବାରୁ ଏହି ପୃଷ୍ଠାଟି ଏବେ କିଳାଯାଇଛି ।\nଏହି ପୃଷ୍ଠାର କିଳାଯିବା ଅବସ୍ଥା ବଦଳିଲେ ଏହାର କ୍ୟାସକେଡ଼ କିଳିବା ବଦଳିବ ନାହିଁ ।",
        "protect-default": "ସବୁ ଇଉଜରଙ୍କୁ ଅନୁମତି ଦିଅନ୍ତୁ",
        "protect-fallback": "କେବଳ \"$1\" ଅନୁମତି ଥିବା ବ୍ୟବହାରକାରୀ ମାନଙ୍କୁ ଛାଡିବେ",
        "protect-level-autoconfirmed": "କେବଳ ଆପେ ଆପେ ସହମତ ହୋଇଥିବା ବ୍ୟବହାରକାରୀ ମାନଙ୍କୁ ଛାଡିବେ",
        "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** ଅଧିକ ଦେଖାଯାଉଥିବା ପୃଷ୍ଠା",
        "contributions": "{{GENDER:$1|User}}ଙ୍କ ଅବଦାନ",
        "contributions-title": "$1 ପାଇଁ ବ୍ୟବହାରକାରୀଙ୍କ ଦାନ",
        "mycontris": "ଅବଦାନ",
-       "contribsub2": "$1 ($2) ପାଇଁ",
+       "contribsub2": "{{GENDER:$3|$1}} ପାଇଁ  ($2)",
        "contributions-userdoesnotexist": "ଇଉଜର ନାମ \"$1\" ତିଆରି କରାଯାଇ ନାହିଁ ।",
        "nocontribs": "ଏହି ନିର୍ଣ୍ଣାୟକବଳୀ ନିମନ୍ତେ କିଛି ବି ବଦଳ ମେଳ ଖାଇଲା ନାହିଁ ।",
        "uctop": "(ଏବେକାର)",
        "sp-contributions-search": "ଅବଦାନ ପାଇଁ ଖୋଜନ୍ତୁ",
        "sp-contributions-username": "ବ୍ୟବହାରକାରୀଙ୍କର IP ଠିକଣା ବା ଇଉଜର ନାମ:",
        "sp-contributions-toponly": "ନଗଦ ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ",
+       "sp-contributions-newonly": "କେବଳ ନୂଆ ପୃଷ୍ଠା ତିଆରିର ସମ୍ପାଦନା ଦେଖାନ୍ତୁ",
        "sp-contributions-submit": "ଖୋଜନ୍ତୁ",
        "whatlinkshere": "ଏଠାରେ ଥିବା ଲିଙ୍କ",
        "whatlinkshere-title": "\"$1\" କୁ ପୃଷ୍ଠା ଲିଙ୍କ",
        "autoblockid": "#$1ଙ୍କୁ ଆପେଆପେ ଅଟକାଇଦେବେ",
        "block": "ସଭ୍ୟଙ୍କୁ ଅଟକାଇବେ",
        "unblock": "ବାସନ୍ଦ ହୋଇଥିବା ସଭ୍ୟଙ୍କୁ ମୁକୁଳାଇବେ",
-       "blockip": "ସଭ୍ୟଙ୍କୁ ଅଟକାଇବେ",
+       "blockip": "{{GENDER:$1|ଜଣ ସଭ୍ୟଙ୍କୁ}} ଅଟକାନ୍ତୁ",
        "blockip-legend": "ସଭ୍ୟଙ୍କୁ ବାସନ୍ଦ କରିବେ",
        "blockiptext": "ଏକ ନିର୍ଦିଷ୍ଟ IP ଠିକଣା ବା ବ୍ୟବହାରକାରୀଙ୍କ ଲେଖିବା ସୁବିଧାକୁ ବାରାଁ କରିବା ନିମନ୍ତେ ଏହି ତଳ ଫର୍ମଟି ବ୍ୟବହାର କରନ୍ତୁ ।\nଏହା କେବଳ ଅପବ୍ୟବହାରକୁ ରୋକିବା ନିମନ୍ତେ କରାଯାଇଥାଏ, ଏହା [[{{MediaWiki:Policy-url}}|ନୀତି]] ଅନୁସାରେ କରାଯାଇଥାଏ ।\nଏହା ତଳେ ଏକ ନିର୍ଦିଷ୍ଟ କାରଣ ଦିଅନ୍ତୁ (ଯଥା, ଯେଉଁସବୁ ପୃଷ୍ଠାରେ କିଛି ପ୍ରକାରର ଅପବ୍ୟବହାର କରାଯାଇଛି) ।",
        "ipaddressorusername": "ବ୍ୟବହାରକାରୀଙ୍କର IP ଠିକଣା ବା ଇଉଜର ନାମ:",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] ଅଟକାଯାଯାଇଛି.<br />\nଅଟକ ବାବଦରେ ଟିପ୍ପଣୀ ଦେବା ନିମନ୍ତେ [[Special:BlockList|block list]] ଦେଖନ୍ତୁ ।",
        "ipb-blockingself": "ଆପଣ ନିଜକୁ ଅଟକାଇବାକୁ ଯାଉଛନ୍ତି ! ଆପଣ ପୁରାପୁରି ନିଶ୍ଚିତ ତ?",
        "ipb-confirmhideuser": "ଆପଣ \"ବ୍ୟବହାରକାରୀଙ୍କୁ ଲୁଚାନ୍ତୁ\" ସଚଳ କରି ଜଣେ ବ୍ୟବହାରକାରୀଙ୍କୁ ଅଟକାଇବାକୁ ଯାଉଛନ୍ତି । ଏହା ବ୍ୟବହାରକାରୀଙ୍କ ନାମକୁ ସବୁଯାକ ତାଲିକାୟ ଇତିହାସରେ ଲୁଚାଇଦେବ । ତଥାପି ବି ଆପଣ ଏହା କରିବାକୁ ଚାହୁଁଛନ୍ତି କି?",
+       "ipb-confirmaction": "ଯଦି ଆପଣ ଏହା କରିବା ବାବଦରେ ପୂରା ନିଶ୍ଚିତ ତେବେ ଦୟାକରି ତଳେ {{PLURAL:$1|page, which has|pages, which have}} ଦେଖିନିଅନ୍ତୁ ।",
        "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": "ଜଣେ ଅଟକାଯାଇଥିବା ସଭ୍ୟ ଖୋଜିବେ",
        "change-blocklink": "ଓଗଳାକୁ ବଦଳାଇବେ",
        "contribslink": "ଅବଦାନ",
        "emaillink": "ଇ-ମେଲ ପଠାଇବେ",
-       "autoblocker": "\"[[User:$1|$1]]\"à¬\99à­\8dà¬\95 à¬¦à­\87à¬\87 à¬\8fହି à¬®à¬¾à¬¤à­\8dର à¬\86ପଣà¬\99à­\8dà¬\95 IP à¬ à¬¿à¬\95ଣାà¬\9fି à¬\86ପà­\87à¬\86ପà­\87 à¬\85à¬\9fà¬\95ାଯାà¬\87à¬\85à¬\9bି à¥¤\n$1ର à¬\85à¬\9fà¬\95 à¬ªà¬¾à¬\87à¬\81 à¬¦à¬¿à¬\86ଯାà¬\87ଥିବା à¬\95ାରଣà¬\9fି à¬¹à­\87ଲା: \"$2\"",
+       "autoblocker": "\"[[User:$1|$1]]\"à¬\99à­\8dà¬\95 à¬¦à­\87à¬\87 à¬¬à­\8dà­\9fବହାର à¬¹à­\87à¬\89ଥିବାରà­\81 à¬\86ପଣà¬\99à­\8dà¬\95 IP à¬ à¬¿à¬\95ଣାà¬\9fି à¬\86ପà­\87à¬\86ପà­\87 à¬\85à¬\9fà¬\95ାଯାà¬\87à¬\85à¬\9bି à¥¤\n$1ର à¬\95ାରଣ à¬¹à­\87ଲା \"$2\"",
        "blocklogpage": "ଲଗଟିକୁ ଅଟକାଇଦେବେ",
        "blocklog-showlog": "ଏହି ସଭ୍ୟଜଣଙ୍କୁକ ଆଗରୁ ଅଟକାଯାଇଛି ।\nତଳେ ଅଟକ ଇତିହାସଟି ଅବଗତି ନିମନ୍ତେ ଦିଆଗଲା:",
        "blocklog-showsuppresslog": "ଏହି ସଭ୍ୟଜଣଙ୍କୁ ଆଗରୁ ଅଟକାଯାଇଛି ବା ଲୁଚାଯାଇଛି ।\nତଳେ ଲୁଚାଇବା ଇତିହାସ ଅବଗତି ନିମନ୍ତେ ଦିଆଗଲା:",
        "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|ଗୋଟି ଅଟକ|ଗୋଟି ଅଟକ}}",
        "proxyblockreason": "ଏକ ଖୋଲା ପ୍ରକ୍ସି ହୋଇଥିବାରୁ ଆପଣଙ୍କ IP ଠିକଣାଟିକୁ ଅଟକାଇଦିଆଗଲା ।\nଦୟାକରି ଆପଣଙ୍କ ଇଣ୍ଟରନେଟ ସେବାପ୍ରଦାନକାରୀ, କାରିଗରି ସହଯୋଗ କିମ୍ବା ସଙ୍ଗଠନ ସହିତ କଥା ହୋଇ ଏହି ବିରାଟ ଅସୁବିଧା ବାବଦରେ ବତାଇଦିଅନ୍ତୁ ।",
        "sorbsreason": "{{SITENAME}} ଦେଇ ଆପଣଙ୍କ IP ଠିକଣାଟି DNSBL ଭିତରେ ଏକ ଖୋଲା ପ୍ରକ୍ସି ଭାବରେ ନଥିଭୁକ୍ତ ହୋଇଅଛି ।",
        "sorbs_create_account_reason": "{{SITENAME}} ଦେଇ ଆପଣଙ୍କ IP ଠିକଣାଟି DNSBL ଭିତରେ ଏକ ଖୋଲା ପ୍ରକ୍ସି ଭାବରେ ନଥିଭୁକ୍ତ ହୋଇଅଛି ।\nଆପଣ ନୂଆ ଖାତାଟିଏ ଖୋଲି ପାରିବେ ନାହିଁ",
+       "xffblockreason": "ଆପଣଙ୍କର କିମ୍ବା ଆପଣ ବ୍ୟବହାର କରୁଥିବା ପ୍ରକ୍ସି ସର୍ଭରର X-Forwarded-For ହେଡ଼ରରେ ଥିବାଏକ IP ଠିକଣାକୁ ଅଟକାଯାଇଛି । ଅଟକାଇବାର କାରଣ ହେଲା: $1",
        "cant-see-hidden-user": "ଆପଣ ଅଟକାଇବାକୁ ଚାହୁଁଥିବା ସଭ୍ୟଜଣକ ଆଗରୁ ଅଟକାଯାଇଛନ୍ତି ଓ ଲୁଚାଯାଇଛନ୍ତି ।\nଯେହେତୁ ଆପଣଙ୍କ ପାଖରେ ସଭ୍ୟଙ୍କୁ ଲୁଚାଇବା ଅଧିକାର ନାହୀଁ, ଆପଣ ସଭ୍ୟଙ୍କର ଅଟକକୁ ଦେଖିପାରିବେ ବା ବଦଳାଇପାରିବେ ନାହିଁ ।",
        "ipbblocked": "ଯେହେତୁ ଆପଣଙ୍କୁ ଅଟକାଯାଇଛି ଆପଣ ବାକି ସଭ୍ୟମାନଙ୍କୁ ଅଟକାଇ ବା ଅଟକରୁ ଛାଡ଼ କରିପାରିବେ ନାହିଁ ।",
        "ipbnounblockself": "ଆପଣ ନିଜକୁ ଅଟକାଇପାରିବେ ନାହିଁ",
        "movepagetalktext": "ଯଦି:\n*ଗୋଟିଏ ଖାଲି ଆଲୋଚନା ପୃଷ୍ଠା ସେହି ନାଆଁରେ ଥାଏ\n*ଆପଣ ତଳ ବାକ୍ସକୁ ନ ବାଛନ୍ତି\nତେବେ ଏହି ପ୍ରୁଷ୍ଠା ସହ ଯୋଡାଯାଇଥିବା ଆଲୋଚନା ପ୍ରୁଷ୍ଠାକୁ ଆପେ ଆପେ ଘୁଞ୍ଚାଇଦିଆଯିବ ।\nସେହି ଯାଗାରେ, ଆପଣଙ୍କୁ ପ୍ରୁଷ୍ଠାଟିକୁ ଘୁଞ୍ଚାଇବାକୁ/ମିଶାଇବାକୁ ପଡ଼ିବ ।",
        "movearticle": "ପୃଷ୍ଠା ଘୁଞ୍ଚେଇବା:",
        "moveuserpage-warning": "'''ସୂଚନା:''' ଆପଣ ଏକ ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠାକୁ ଘୁଞ୍ଚାଇବାକୁ ଯାଉଛନ୍ତି । ଦୟାକରି ଜାଣିରଖନ୍ତୁ ଯେ ପୃଷ୍ଠାଟି କେବଳ ଘୁଞ୍ଚିଯିବ ଓ ବ୍ୟବହାରକାରୀ ''ଘୁଞ୍ଚିବେ ନାହିଁ'' ।",
+       "movecategorypage-warning": "<strong>ଚେତାବନୀ:</strong> ଆପଣ ଏକ ଶ୍ରେଣୀ ପୃଷ୍ଠାକୁ ଘୁଞ୍ଚାଇବାକୁ ଯାଉଛନ୍ତି । କେବଳ ପୃଷ୍ଠାଟି ଘୁଞ୍ଚିଯିବ ଏବଂ ପୁରୁଣା ଶ୍ରେଣୀର କୌଣସି ପୃଷ୍ଠା ନୂଆ ଶ୍ରେଣୀଭୁକ୍ତ ହେବନାହିଁ <em>ଜାଣିରଖନ୍ତୁ</em> ।",
        "movenologintext": "ଏହି ପୃଷ୍ଠାଟିକୁ ଘୁଞ୍ଚାଇବା ପାଇଁ ଆପଣ ନିହାତି ଜଣେ ପଞ୍ଜୀକୃତ ସଭ୍ୟ ହୋଇଥିବେ ଏବଂ [[Special:UserLogin|logged in]]",
        "movenotallowed": "ଆପଣଙ୍କର ପୃଷ୍ଠାଗୁଡିକୁ ଘୁଞ୍ଚାଇବା ଅଧିକାର ନହିଁ ।",
        "movenotallowedfile": "ଆପଣଙ୍କର ଫାଇଲ ଘୁଞ୍ଚାଇବାର ଅଧିକାର ନହିଁ ।",
        "cant-move-user-page": "ଆପଣଙ୍କୁ ଏହି ସଭ୍ୟ ପୃଷ୍ଠାଟିକୁ ଘୁଞ୍ଚାଇବା ଲାଗି ଅନୁମତି ମିଳିନାହିଁ, କିନ୍ତୁ ନିଜର ଉପପୃଷ୍ଠା ସବୁ ଘୁଞ୍ଚାଇ ପାରିବେ ।",
        "cant-move-to-user-page": "ଆପଣଙ୍କର ଗୋଟିଏ ପୃଷ୍ଠାକୁ ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠାକୁ ଘୁଞ୍ଚାଇବାର ଅଧିକାର ନହିଁ ।",
+       "cant-move-category-page": "ଆପଣଙ୍କୁ ଶ୍ରେଣୀ ପୃଷ୍ଠାଟିଏ ଘୁଞ୍ଚାଇବା ନିମନ୍ତେ ଅନୁମତି ମିଳିନାହିଁ ।",
+       "cant-move-to-category-page": "ପୃଷ୍ଠାଟିଏକୁ ଶ୍ରେଣୀ ପୃଷ୍ଠାକୁ ଘୁଞ୍ଚାଇବା ଲାଗି ଆପଣଙ୍କୁ ଅନୁମତି ମିଳିନାହିଁ ।",
        "newtitle": "ନୂଆ ନାଆଁକୁ:",
        "move-watch": "ମୂଳ ପୃଷ୍ଠା ଓ ବଦଳାଇବାକୁ ଚାହୁଁଥିବା ପୃଷ୍ଠା ଦେଖାଇବେ",
        "movepagebtn": "ପୃଷ୍ଠା ଘୁଞ୍ଚେଇବେ",
        "thumbnail-more": "ବିସ୍ତାର",
        "filemissing": "ଫାଇଲ ମିଳୁନାହିଁ",
        "thumbnail_error": "ନଖଦେଖଣା ତିଆରିବାରେ ଅସୁବିଧା: $1",
+       "thumbnail_error_remote": "$1ରୁ ତ୍ରୁଟି ମେସେଜ:\n$2",
        "djvu_page_error": "DjVu ପୃଷ୍ଠା ସୀମା ବାହାରେ ରହିଅଛି",
        "djvu_no_xml": "DjVu ଫାଇଲ ନିମନ୍ତେ XML ଆଣିବାରେ ବିଫଳ ହେଲୁଁ",
        "thumbnail-temp-create": "ଏକ ଅସ୍ଥାୟୀ ଛୋଟଦେଖଣା ଫାଇଲ ତିଆରି କରିବାରେ ବିଫଳ ହେଲୁ",
        "thumbnail_image-type": "ଛବିର ପ୍ରକାର ଅନୁମୋଦିତ ନୁହେଁ",
        "thumbnail_gd-library": "ଅଧାଗଢ଼ା GD ପାଠାଗାର ସଜାଣି: $1 ମିଳୁନାହିଁ",
        "thumbnail_image-missing": "ଫାଇଲଟି ନଥିଲା ଭଳି ଲାଗୁଛି : $1",
+       "thumbnail_image-failure-limit": "ଏହି ଥମ୍ବନେଲ ରେଣ୍ଡର କରିବା ପାଇଁ ନିକଟରେ ଅନେକ ($1 କିମ୍ବା ଅଧିକ) ବିଫଳ ଚେଷ୍ଟା କରାଯାଇଛି । ଆଉଥରେ ଚେଷ୍ଟା କରନ୍ତୁ ।",
        "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": "ଆମଦାନୀ",
        "importuploaderrortemp": "ଫାଇଲ ଆମଦାନି ବିଫଳ ହେଲା ।\nଅସ୍ଥାୟୀ ଫୋଲଡରଟିଏ ନାହିଁ ।",
        "import-parse-failure": "XML ଆମଦାନି ପାର୍ସ ବିଫଳ",
        "import-noarticle": "ଆମଦାନି କରିବା ନିମନ୍ତେ ପୃଷ୍ଠା ନାହିଁ !",
-       "import-nonewrevisions": "ସବà­\81ଯାà¬\95 à¬¸à¬\82ସà­\8dà¬\95ରଣ à¬\86à¬\97ରà­\81 à¬\86ମଦାନି à¬\95ରାସରିà¬\9bି à¥¤",
+       "import-nonewrevisions": "à¬\97à­\8bà¬\9fାà¬\8f à¬¬à¬¿ à¬¸à¬\82ସà­\8dà¬\95ରଣ à¬\86ମଦାନି à¬\95ରା à¬¹à­\8bà¬\87ନାହିà¬\81 à¥¤ (ସବà­\81ଯାà¬\95 à¬\86à¬\97ରà­\81 à¬\85à¬\9bି, à¬\95ିମà­\8dବା à¬­à­\81ଲà¬\95à­\81 à¬\8fଡ଼ାà¬\87ବା à¬ªà¬¾à¬\87à¬\81 à¬¨à¬¿à¬\86ଯାà¬\87ନାହିà¬\81 à¥¤)",
        "xml-error-string": "$1 $2 ଧାଡ଼ିରେ ଅଛି, $3 ସ୍ତମ୍ଭ ($4 ବାଇଟ): $5",
        "import-upload": "XML ତଥ୍ୟ ଅପଲୋଡ଼",
        "import-token-mismatch": "ଅବଧି ତଥ୍ୟ ଲୋପପାଇଗଲାଣି ।\nଦୟାକରି ଆଉଥରେ ଚେଷ୍ଟା କରନ୍ତୁ ।",
        "import-invalid-interwiki": "ଦିଆଯାଇଥିବା ଉଇକିରୁ ଆହରଣ କରାଯାଇପାରିବ ନାହିଁ ।",
-       "import-error-edit": "\"$1\" ପୃଷ୍ଠାଟି ଅଣାଯାଇନାହିଁ କାରଣ ଆପଣଙ୍କର ଏହାକୁ ବଦଳାଇବା ଅଧିକାର ନାହିଁ ।",
-       "import-error-create": "\"$1\" ପୃଷ୍ଠାଟି ଅଣାଯାଇନାହିଁ କାରଣ ଆପଣଙ୍କର ଏହାକୁ ତିଆରିକରିବା ଅଧିକାର ନାହିଁ ।",
-       "import-error-interwiki": "\"$1\"ପୃଷ୍ଠାକୁ ଆମଦାନୀ କରିହେଲାନି କାରଣ ଏହାର ନାମ ବାହାରଲିଙ୍କରେ ଆଗରୁ ଅଛି(ଉଇକିଗୁଡିକ ମଧ୍ୟରେ) ।",
-       "import-error-special": "\"$1\"ପୃଷ୍ଠାକୁ ଆମଦାନୀ କରିହେଲାନି କାରଣ ଏହା ଏକ ବିଶେଷ ନେମସ୍ପେସରେ ଅଛି ଯାହା ପୃଷ୍ଠାଗୁଡିକୁ ଅନୁମତି ଦିଏ ନାହିଁ ।",
-       "import-error-invalid": "\"$1\"ପୃଷ୍ଠାକୁ ଆମଦାନୀ କରିହେଲାନି କାରଣ ଏହାର ନାମଟି ଅବୈଧ ।",
+       "import-error-edit": "ଆପଣଙ୍କର ଏହାକୁ ବଦଳାଇବା ଅଧିକାର ନ ଥିବାରୁ \"$1\" ପୃଷ୍ଠାଟି ଆଣିହେଲା ନାହିଁ ।",
+       "import-error-create": "ଆପଣଙ୍କର ଏହାକୁ ଗଢ଼ିବା ଅଧିକାର ନ ଥିବାରୁ \"$1\" ପୃଷ୍ଠାଟି ଅଣାଯାଇନାହିଁ ।",
+       "import-error-interwiki": "ଏହାର ନାମ ବାହାର ଲିଙ୍କ ପାଇଁ ସାଇତାଯାଇ ଥିବାରୁ \"$1\"ପୃଷ୍ଠାଟିକୁ ଆଣିହେଲା ନାହିଁ (ଇଣ୍ଟର ଉଇକି)",
+       "import-error-special": "ଅନୁମତି ନ ଥିବା ଏକ ବିଶେଷ ନେମସ୍ପେସରେ ଥିବାରୁ \"$1\"ପୃଷ୍ଠାକୁ ଆଣି ହେଲାନାହିଁ ।",
+       "import-error-invalid": "ଏହି ଉଇକିରେ ଅଣାଯିବା ନୂଆ ନାମଟି ଅବୈଧ ଥିବାରୁ \"$1\" ପୃଷ୍ଠାଟିକୁ ଆଣିହେଲା ନାହିଁ ।",
        "import-error-unserialize": "\"$1\"ପୃଷ୍ଠାର $2 ପୁନରାବୃତିଟି ଅଣତାଲିକାଭୁକ୍ତ କରାଯାଇପାରିବ ନାହିଁ । ପୁନରାବୃତିଟି $3 ପ୍ରକାର ବ୍ୟବାହର କରିବା ପାଇଁ $4ରେ ତାଲିକାଭୁକ୍ତ ହୋଇଛି ।",
+       "import-error-bad-location": "ଏହି ମଡ଼େଲଟି ପୃଷ୍ଠାରେ $3 କଣ୍ଟେଣ୍ଟ ମଡ଼େଲ ବ୍ୟବହାର କରି $2 ସଂସ୍କରଣଟି ଏହି ଉଇକିରେ ସାଇତାଯାଇପାରିବ ନାହିଁ ।",
        "import-options-wrong": "ଭୁଲ {{PLURAL:$2|option|options}}: <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-upload-detail": "$1 {{PLURAL:$1|ଗୋଟି ସଂସ୍କରଣ|ଗୋଟି ସଂସ୍କରଣ}} ଅଣାଗଲା",
        "import-logentry-interwiki": "$1 କୁ ଟ୍ରାନ୍ସଉଇକି କରାଗଲା",
-       "import-logentry-interwiki-detail": "$2 ଭିତରୁ $1 ଗୋଟି {{PLURAL:$1|ସଂସ୍କରଣ|ସଂସ୍କରଣ}}",
+       "import-logentry-interwiki-detail": "$2ରୁ $1 {{PLURAL:$1|ଗୋଟି ସଂସ୍କରଣ|ଗୋଟି ସଂସ୍କରଣ}} ଅଣାଗଲା",
        "javascripttest": "ଜାଭାସ୍କ୍ରିପ୍ଟ ପରଖ",
        "javascripttest-title": "ଚାଲୁଥିବା $1 ପରଖଗୁଡିକ",
        "javascripttest-pagetext-noframework": "ଏହି ପୃଷ୍ଠାଟି ଜାଭାସ୍କ୍ରିପ୍ଟ ପରଖ ପାଇଁ ସଂରକ୍ଷଣ କରି ରଖାଯାଇଛି ।",
        "spam_reverting": "$1 ସହ ଯୋଡ଼ା ନଥିବା ଶେଷ ସଂସ୍କରଣକୁ ଲେଉଟାଇ ଦେଉଅଛୁଁ",
        "spam_blanking": "$1 ସହ ଯୋଡ଼ାଥିବା ସବୁଯାକ ସଂସ୍କରଣ ଖାଲି କରିଦିଆଗଲା",
        "spam_deleting": "$1 ସହ ଯୋଡ଼ାଥିବା ସବୁଯାକ ସଂସ୍କରଣ ଖାଲି କରିଦିଆଗଲା",
-       "simpleantispam-label": "ସà­\8dପାମ-ବିରà­\8bଧି à¬ªà¬°à¬\96 à¥¤\nà¬\8fହାà¬\95à­\81 à¬­à¬°à¬¨à­\8dତà­\81 '''ନାହିà¬\81''' !",
+       "simpleantispam-label": "à¬\86ଣà­\8dà¬\9fି-ସà­\8dପାମ à¬ªà¬°à¬\96 à¥¤\nà¬\8fହାà¬\95à­\81 à¬­à¬°à¬¨à­\8dତà­\81 <strong>ନାହିà¬\81</strong>!",
        "pageinfo-title": "\"$1\"ର ବିବରଣୀ",
        "pageinfo-not-current": "ଦୁଖିତଃ, ପୁରୁଣା ସଂସ୍କରଣଗୁଡିକର ଏହି ତଥ୍ୟ ଦେବା ସମ୍ଭବ ନୁହେଁ ।",
        "pageinfo-header-basic": "ସାଧାରଣ ଜାଣିବା କଥା",
        "pageinfo-length": "ପୃଷ୍ଠା ଲମ୍ବ(ବାଇଟରେ)",
        "pageinfo-article-id": "ପୃଷ୍ଠା ଆଇଡ଼ି",
        "pageinfo-language": "ପୃଷ୍ଠା ବିଷୟବସ୍ତୁର ଭାଷା",
+       "pageinfo-content-model": "ପୃଷ୍ଠା ବିଷୟବସ୍ତୁ ମଡ଼େଲ",
        "pageinfo-robot-policy": "ସ୍ୱୟଂଚାଳକ&nbsp;(Bot) ଦ୍ୱାରା ସୂଚୀ ନିର୍ମାଣ",
        "pageinfo-robot-index": "ଅନୁମୋଦିତ",
        "pageinfo-robot-noindex": "ଅନୁନମୋଦିତ",
-       "pageinfo-views": "ଦେଖଣା ସଂଖ୍ୟା",
        "pageinfo-watchers": "ପୃଷ୍ଠା ଦେଖଣାହାରି ସଂଖ୍ୟା",
        "pageinfo-few-watchers": "$1ରୁ କମ {{PLURAL:$1|ଦେଖଣାକାରୀ|ଦେଖଣାକାରୀଗଣ}}",
        "pageinfo-redirects-name": "ଏହି ପୃଷ୍ଠା ସହ ସମ୍ବନ୍ଧିତ ପୁନର୍ପ୍ରେରଣ",
        "newimages-summary": "ଏହି ବିଶେଷ ପୃଷ୍ଠାଟି ଶେଷ ଅପଲୋଡ଼ ହୋଇଥିବା ଫାଇଲମାନ ଦେଖାଇଥାଏ ।",
        "newimages-legend": "ଛାଣିବା",
        "newimages-label": "ଫାଇଲ ନାମ (କିମ୍ବା ତାହାର ଏକ ଭାଗ):",
+       "newimages-showbots": "ବଟ ଦ୍ୱାରା ଅପଡେଟ",
        "noimages": "ଦେଖିବାକୁ କିଛି ନାହିଁ ।",
        "ilsubmit": "ଖୋଜନ୍ତୁ",
        "bydate": "ତାରିଖ ଅନୁସାରେ",
        "minutes": "{{PLURAL:$1|$1 ମିନିଟ|$1 ମିନିଟ}}",
        "hours": "{{PLURAL:$1|$1 ଘଣ୍ଟା|$1 ଘଣ୍ଟା}}",
        "days": "{{PLURAL:$1|$1 ଦିନ|$1 ଦିନ}}",
+       "weeks": "{{PLURAL:$1|$1 ସପ୍ତାହ|$1 ସପ୍ତାହ}}",
        "months": "{{PLURAL:$1|$1 month|$1 months}}",
        "years": "{{PLURAL:$1|$1 year|$1 years}}",
        "ago": "$1 ଆଗରୁ",
        "exif-urgency-low": "ଉଣା ($1)",
        "exif-urgency-high": "ଅଧିକ ($1)",
        "exif-urgency-other": "ବ୍ୟବହାରକାରୀ ଦେଇ ଦିଆହୋଇଥିବା ଗୁରୁତ୍ଵ ($1)",
-       "watchlistall2": "ସବୁ",
        "namespacesall": "ସବୁ",
        "monthsall": "ସବୁ",
        "confirmemail": "ଆପଣଙ୍କ ଇମେଲ ଠିକଣା ଟି ଠିକ ବୋଲି ଥୟ କରନ୍ତୁ",
        "confirmemail_subject": "{{SITENAME}} ଇମେଲ ଠିକଣା ନିଶ୍ଚିତ କରିବା",
        "confirmemail_body": "କେହିଜଣେ, ବୋଧହୁଏ ଆପଣ ହିଁ $1 ଆଇ.ପି. ଠିକଣାରୁ,\nଏହି ଇ-ମେଲ ଆଇ.ଡି.ରେ \"$2\" ନାଆଁରେ {{SITENAME}} ଠାରେ ଖାତାଟିଏ ଖୋଲିଛନ୍ତି ।\n\nଏହି ଖାତାଟି ସତରେ ଆପଣଙ୍କର ବୋଲି ଥୟ କରିବା ପାଇଁ ଓ {{SITENAME}}ରେ ଇ-ମେଲ ସୁବିଧାସବୁ ସଚଳ କରିବାପାଇଁ, ଏହି ଲିଙ୍କ୍ଟିକୁ ଆପଣଙ୍କ ବ୍ରାଉଜରରେ ଖୋଲନ୍ତୁ:\n\n$3\n\nଯଦି ଆପଣ ଖାତାଟିଏ ଆଗରୁ ଖୋଲି *ନାହାନ୍ତି* ତେବେ ଏହି ଲିଙ୍କକୁ ଯାଇ ଇ-ମେଲ ଆ.ଡି. ଥୟ କରିବାକୁ ନାକଚ କରିଦିଅନ୍ତୁ:\n\n$5\n\nଏହି କନଫର୍ମେସନ କୋଡ଼ $4 ବେଳେ ଅଚଳ ହୋଇଯିବ ।",
        "confirmemail_body_changed": "କେହିଜଣେ, ବୋଧହୁଏ ଆପଣ ହିଁ $1 ଆଇ.ପି. ଠିକଣାରୁ,\nଏହି ଇ-ମେଲ ଆଇ.ଡି.ରେ \"$2\" ନାଆଁରେ {{SITENAME}} ଠାରେ ଖାତାଟିଏ ଖୋଲିଛନ୍ତି ।\n\nଏହି ଖାତାଟି ସତରେ ଆପଣଙ୍କର ବୋଲି ଥୟ କରିବା ପାଇଁ ଓ {{SITENAME}}ରେ ଇ-ମେଲ ସୁବିଧାସବୁ ସଚଳ କରିବାପାଇଁ, ଏହି ଲିଙ୍କ୍ଟିକୁ ଆପଣଙ୍କ ବ୍ରାଉଜରରେ ଖୋଲନ୍ତୁ:\n\n$3\n\nଯଦି ଆପଣ ଖାତାଟିଏ ଆଗରୁ ଖୋଲି *ନାହାନ୍ତି* ତେବେ ଏହି ଲିଙ୍କକୁ ଯାଇ ଇ-ମେଲ ଆ.ଡି. ଥୟ କରିବାକୁ ନାକଚ କରିଦିଅନ୍ତୁ:\n\n$5\n\nଏହି କନଫର୍ମେସନ କୋଡ଼ $4 ବେଳେ ଅଚଳ ହୋଇଯିବ ।",
-       "confirmemail_body_set": "କେହିଜଣେ, ବୋଧହୁଏ ଆପଣ ହିଁ $1 ଆଇ.ପି. ଠିକଣାରୁ,\nଏହି ଇ-ମେଲ ଆଇ.ଡି.ରେ \"$2\" ନାଆଁରେ {{SITENAME}} ଠାରେ ଖାତାଟିଏ ଖୋଲିଛନ୍ତି ।\n\nଏହି ଖାତାଟି ସତରେ ଆପଣଙ୍କର ବୋଲି ଥୟ କରିବା ପାଇଁ ଓ {{SITENAME}}ରେ ଇ-ମେଲ ସୁବିଧାସବୁ ସଚଳ କରିବାପାଇଁ, ଏହି ଲିଙ୍କ୍ଟିକୁ ଆପଣଙ୍କ ବ୍ରାଉଜରରେ ଖୋଲନ୍ତୁ:\n\n$3\n\nଯଦି ଆପଣ ଖାତାଟିଏ ଆଗରୁ ଖୋଲି *ନାହାନ୍ତି* ତେବେ ଏହି ଲିଙ୍କକୁ ଯାଇ ଇ-ମେଲ ଆ.ଡି. ଥୟ କରିବାକୁ ନାକଚ କରିଦିଅନ୍ତୁ:\n\n$5\n\nଏହି କନଫର୍ମେସନ କୋଡ଼ $4 ବେଳେ ଅଚଳ ହୋଇଯିବ ।",
+       "confirmemail_body_set": "କେହିଜଣେ, ବୋଧହୁଏ ଆପଣ ହିଁ $1 IP ଠିକଣାରୁ,\n\"$2\" ଖାତା ପାଇଁ {{SITENAME}}ରେ ଇମେଲ ଦେଇଛନ୍ତି ।\n\nଏହି ଖାତାଟି ଆପଣଙ୍କର ବୋଲି ଥୟ କରି {{SITENAME}}ରେ ଇମେଲ ସୁବିଧାସବୁ ସକ୍ରିୟ କରିବାପାଇଁ, ଏହି ଲିଙ୍କଟି ଆପଣଙ୍କ ବ୍ରାଉଜରରେ ଖୋଲନ୍ତୁ:\n\n$3\n\nଯଦି ଖାତାଟିଏ ଆପଣଙ୍କର ନୁହେଁ ତେବେ ଏହି ଲିଙ୍କକୁ ଯାଇ ଇମେଲ ଥୟ କରିବା ନାକଚ କରିଦିଅନ୍ତୁ:\n\n$5\n\nକନଫର୍ମେସନ କୋଡ଼ଟି $4ରେ ଅକାମୀ ହୋଇଯିବ ।",
        "confirmemail_invalidated": "ଇମେଲ ଠିକଣା ଥୟ କରିବା ନାକଚ କରିଦଗଲା",
        "invalidateemail": "ଇ-ମେଲ ଠିକଣା ଥୟ କରିବା",
        "scarytranscludedisabled": "[ଉଇକି-ଉଇକି ଭିତରେ ଟ୍ରାନ୍ସକ୍ଲୁଡ଼ିଙ୍ଗ ଅଚଳ କରାଯାଇଛି]",
        "confirm-watch-top": "ଏହି ପୃଷ୍ଠାଟିକୁ ଆପଣଙ୍କ ଦେଖିଥିବା ତାଲିକାରେ ଯୋଡନ୍ତୁ ?",
        "confirm-unwatch-button": "ଠିକ ଅଛି",
        "confirm-unwatch-top": "ନିଜ ଦେଖଣାତାଲିକାରୁ ଏହି ପୃଷ୍ଠାଟି ବାହାର କରିଦେବେ କି?",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "ଆଗ ପୃଷ୍ଠା",
        "imgmultipagenext": "ପର ପୃଷ୍ଠା →",
        "imgmultigo": "ଯିବା!",
        "imgmultigoto": "$1 ପୃଷ୍ଠାକୁ ଯିବେ",
        "img-lang-default": "(ଡିଫଲ୍ଟ ଭାଷା)",
+       "img-lang-info": "$1ରେ ଏହି ଛବିଟି ରେଣ୍ଡର କରନ୍ତୁ । $2",
+       "img-lang-go": "ଯାଆନ୍ତୁ",
        "ascending_abbrev": "ସାନରୁ ବଡ କ୍ରମରେ",
        "descending_abbrev": "ବଖାଣ",
        "table_pager_next": "ପର ପୃଷ୍ଠା",
        "autosumm-replace": "ବିଷୟବସ୍ତୁକୁ \"$1\" ଦେଇ ପ୍ରତିବଦଳ କଲେ",
        "autoredircomment": "[[$1]]କୁ ପୃଷ୍ଠାଟି ଘୁଞ୍ଚାଇଦିଆଗଲା",
        "autosumm-new": "\"$1\" ନାଆଁରେ ପୃଷ୍ଠାଟିଏ ତିଆରିକଲେ",
+       "autosumm-newblank": "ଫାଙ୍କା ପୃଷ୍ଠାଟିଏ ତିଆରି କରାଗଲା",
        "lag-warn-normal": "$1 {{PLURAL:$1|ସେକେଣ୍ଡ|ସେକେଣ୍ଡ}}ରୁ ନୂଆ ବଦଳ ଏହି ତାଲିକାରେ ଦେଖାଯାଉ ନାହିଁ ।",
        "lag-warn-high": "ଅଧିକ ଡାଟାବେସ ସର୍ଭର ପଛୁଆ ଅବସ୍ଥା ହେତୁ $1 {{PLURAL:$1|ସେକେଣ୍ଡ|ସେକେଣ୍ଡ}}ରୁ ନୂଆ ବଦଳସବୁ ଏହି ତାଲିକାରେ ଦେଖାଯିବ ନାହିଁ ।",
        "watchlistedit-normal-title": "ଦେଖଣାତାଲିକା ସମ୍ପାଦନା କରିବେ",
        "watchlistedit-raw-done": "ଆପଣଙ୍କ ଦେଖଣା ତାଲିକାଟି ଅପଡେଟ ହେଇଯାଇଛି ।",
        "watchlistedit-raw-added": "{{PLURAL:$1|ନାମଟିଏ|$1 ଗୋଟି ନାମ}} ଯୋଗ କରାଗଲା:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|ନାମଟିଏ|$1 ଗୋଟି ନାମ}} କାଢ଼ିଦିଆଗଲା:",
+       "watchlistedit-clear-title": "ଦେଖଣାତାଲିକାଟିଏ ତିଆରି କରାଗଲା",
+       "watchlistedit-clear-legend": "ଦେଖଣାତାଲିକା ସଫାକରନ୍ତୁ",
+       "watchlistedit-clear-explain": "ଆପଣଙ୍କ ଦେଖଣାତାଲିକାରୁ ସବୁ ନାମ ହଟାଇଦିଆଯିବ",
        "watchlistedit-clear-titles": "ନାମ:",
+       "watchlistedit-clear-submit": "ନିଜର ଦେଖଣାତାଲିକା ସଫାକରିବେ (ଏହା ଚିରସ୍ଥାୟୀ!)",
+       "watchlistedit-clear-done": "ଆପଣଙ୍କର ଦେଖଣାତାଲିକା ସଫାକରାଗଲା ।",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 ନାମଟି|$1 ନାମସବୁ}} ହଟାଇ ଦିଆଗଲା:",
+       "watchlistedit-too-many": "ଏଠାରେ ଦେଖାଇବା ପାଇଁ ଅନେକ ଗୁଡ଼ିଏ ପୃଷ୍ଠା ରହିଛି ।",
+       "watchlisttools-clear": "ଦେଖଣାତାଲିକା ସଫାକରନ୍ତୁ",
        "watchlisttools-view": "ଦରକାରୀ ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ",
        "watchlisttools-edit": "ଦେଖିବା ତାଲିକାଟିକୁ ଦେଖିବେ ଓ ବଦଳାଇବେ",
        "watchlisttools-raw": "ଫାଙ୍କା ଦେଖଣା ତାଲିକାଟିର ସମ୍ପାଦନା କରିବେ",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ମୋ ଆଲୋଚନା]])",
        "unknown_extension_tag": "ଅଜଣା ଏକ୍ସଟେନସନ ଚିହ୍ନ \"$1\"",
        "duplicate-defaultsort": "'''ସୂଚନା:''' ଆପେଆପେ କାମକରୁଥିବା \"$2\" ଆଗରୁ ଆପେ ଆପେ ସଜାଡୁଥିବା \"$1\"କୁ ବନ୍ଦ କରିଦେଇଛି ।",
+       "duplicate-displaytitle": "<strong>ଚେତାବନୀ:</strong> \"$2\" ନାମଟି \"$1\" ନାମ ଉପରେ ଚଢ଼ାଇ ଦେଖାନ୍ତୁ ।",
        "version": "ସଂସ୍କରଣ",
        "version-extensions": "ଇନଷ୍ଟଲ କରାହୋଇଥିବା ଏକ୍ସଟେନସନସବୁ",
-       "version-skins": "ବହିରାବରଣ",
+       "version-skins": "à¬\87ନଷà­\8dà¬\9fଲ à¬¹à­\8bà¬\87ଥିବା à¬¸à­\8dà¬\95ିନ",
        "version-specialpages": "ବିଶେଷ ପୃଷ୍ଠା",
        "version-parserhooks": "ପାର୍ସର ହୁକ",
        "version-variables": "ଚଳ",
        "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-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/ ମିଡ଼ିଆଉଇକି]''' ଦେଇ ପରିଚାଳିତ, ସତ୍ଵାଧିକାର © ୨୦୦୧-$1 $2 ।",
        "version-poweredby-others": "ବାକିସବୁ",
+       "version-poweredby-translators": "translatewiki.net ଅନୁବାଦକଗଣ",
        "version-credits-summary": "ଆମେ ଏହି ଲୋକମାନଙ୍କୁ [[Special:Version|MediaWiki]]ରେ ସେମାନକର ଅବଦାନ ପାଇଁ ଚିହ୍ନିବାକୁ ଚାହୁଁଛୁ ।",
        "version-license-info": "MediaWiki ଏକ ମାଗଣା ସଫ୍ଟୱାର; ଆପଣ ଏହାକୁ ପୁନବଣ୍ଟନ କରିପାରିବେ ବା GNU ଜେନେରାଲ ପବ୍ଲିକ ଲାଇସେନ୍ସ ଅଧିନରେ ବଦଳାଇପାରିବେ ଯାହା ଫ୍ରି ସଫ୍ଟୱାର ଫାଉଣ୍ଡେସନ ଦେଇ ପ୍ରକାଶିତ ହୋଇଥିବ।\n\nMediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯାଇଥାଏ, କିନ୍ତୁ ଏହା କୌଣସି ଲିଖିତ ପଟା ସହ ଆସିନଥାଏ; ଏହା ବିକ୍ରୟଯୋଗ୍ୟତା ବା ଏକ ନିର୍ଦିଷ୍ଟ କାମପାଇଁ ବାଧ୍ୟତାମୂଳକ ପଟା ସହ ଆସିନଥାଏ । ଅଧିକ ଜାଣିବା ନିମନ୍ତେ ଦୟାକରି GNU ଜେନେରାଲ ପବ୍ଲିକ ଲାଇସେନ୍ସ ଦେଖନ୍ତୁ ।\n\nଆପଣ [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU ଜେନେରାଲ ପବ୍ଲିକ ଲାଇସେନ୍ସର ନକଲଟିଏ] ଏହି ସଫ୍ଟୱାର ସହିତ ପାଇଥିବା ଜରୁରି; ଯଦି ପାଇନଥିବେ, ଫ୍ରି ସଫ୍ଟୱାର ଫାଉଣ୍ଡେସନ, Inc., ୫୧ ଫ୍ରାଙ୍କଲୀନ ଷ୍ଟ୍ରିଟ, ୫ମ ମହଲା, ବଷ୍ଟନ, ମାସାଚୁସେଟସ ୦୨୧୧୦-୧୩୦୧, ଯୁକ୍ତରାଷ୍ଟ୍ର ଆମେରିକା କିମ୍ବା [//www.gnu.org/licenses/old-licenses/gpl-2.0.html ଅନଲାଇନ] ପଢ଼ିନିଅନ୍ତୁ ।",
        "version-software": "ଇନଷ୍ଟଲ ହୋଇଥିବା ସଫ୍ଟୱାର",
        "version-entrypoints": "ନିବେଶ ହେଉଥିବା ସ୍ଥାନର URLଗୁଡିକ",
        "version-entrypoints-header-entrypoint": "ପ୍ରବେଶ ବିନ୍ଦୁ",
        "version-entrypoints-header-url": "ଇଉଆରଏଲ",
+       "redirect": "ଫାଇଲ, ସଭ୍ୟ, ପୃଷ୍ଠା କିମ୍ବା ସଂସ୍କରଣ ID ଅନୁସାରେ ପୁନପ୍ରେରଣ",
+       "redirect-legend": "ଏକ ଫାଇଲ କିମ୍ବା ପୃଷ୍ଠାକୁ ପୁନପ୍ରେରଣ କରନ୍ତୁ",
+       "redirect-summary": "(ଫାଇଲ ନାମ ଥିଲେ), (ଏକ ସଂସ୍କରଣ ID କିମ୍ବା ପୃଷ୍ଠା ID ଥିଲେ) କିମ୍ବା ଏକ ସଭ୍ୟ ଖାତା ଥିଲେ (ଏକ ସାଂଖିକ ସଭ୍ୟ ID)ଏହି ବିଶେଷ ପୃଷ୍ଠାଟି ଏକ ଫାଇଲକୁ ଲେଉଟାଇ ଦେଇଥାଏ । ବ୍ୟବହାର: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], କିମ୍ବା [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "ଯାଆନ୍ତୁ",
        "redirect-lookup": "ଖୋଜନ୍ତୁ:",
        "redirect-value": "ମୂଲ୍ୟ:",
        "tags": "ବୈଧ ସମ୍ପାଦନା ଚିହ୍ନ",
        "tag-filter": "[[Special:Tags|ଟାଗ]] ଛଣା:",
        "tag-filter-submit": "ଛାଣିବା",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ଗୋଟି ଟ୍ୟାଗ|ଗୋଟି ଟ୍ୟାଗ}}]]: $2)",
        "tags-title": "ସୂଚକ",
        "tags-intro": "ଏହି ପୃଷ୍ଠା ସଫ୍ଟୱାର ଏକ ବଦଳ ଭାବେ ଚିହ୍ନିତ କରୁଥିବା ଚିହ୍ନସବୁର ମାନେ ସହ ତାଲିକା ତିଆରି କରିଥାଏ ।",
        "tags-tag": "ଚିହ୍ନ ନାମ",
        "sqlite-no-fts": "ପୁରା ଟେକ୍ସ୍ଟ ଖୋଜା ସହଯୋଗ ବିନା $1",
        "logentry-delete-delete": "$1, $3 ପୃଷ୍ଠାଟି {{GENDER:$2|ଲିଭାଇଦେଲେ}}",
        "logentry-delete-restore": "$1, $3 ପୃଷ୍ଠାଟି {{GENDER:$2|ପୁନସ୍ଥାପନ କଲେ}}",
-       "logentry-delete-event": "$1 $3 ବେଳେ {{PLURAL:$5|ଏକ ଇତିହାସର ଘଟଣାର|$5 ଇତିହାସର ଘଟଣାମାନଙ୍କର}} ଦେଖଣା ବଦଳାଇ ଦେଲେ: $4",
-       "logentry-delete-revision": "$1 $3 ପୃଷ୍ଠାରେ {{PLURAL:$5|ସଙ୍କଳନଟିଏର|$5 ସଙ୍କଳନମାନଙ୍କର}} ଦେଖଣା ବଦଳାଇ ଦେଲେ: $4",
-       "logentry-delete-event-legacy": "$1 $3 à¬°à­\87 à¬\87ତିହାସର à¬\98à¬\9fଣାସବà­\81ର à¬¦à­\87à¬\96ଣା à¬¬à¬¦à¬³à¬¾à¬\87ଦà­\87ଲà­\87",
-       "logentry-delete-revision-legacy": "$1 $3 à¬ªà­\83ଷà­\8dଠାରà­\87 à¬\87ତିହାସର à¬\98à¬\9fଣାସବà­\81ର à¬¦à­\87à¬\96ଣା à¬¬à¬¦à¬³à¬¾à¬\87ଦà­\87ଲà­\87",
-       "logentry-suppress-delete": "$1 $3 ପୃଷ୍ଠାଟିକୁ ଚପାଇଦେଲେ",
-       "logentry-suppress-event": "$3 ବେଳେ $1 ଗୋପନ ଭାବରେ {{PLURAL:$5|ଇତିହାସର ଘଟଣାଟିଏର|$5 ଇତିହାସର ଘଟଣାବଳୀର}} ଦେଖଣା ବଦଳାଇଦେଲେ: $4",
-       "logentry-suppress-revision": "$1 à¬\97à­\8bପନ à¬­à¬¾à¬¬à¬°à­\87 $3 à¬ªà­\83ଷà­\8dଠାରà­\87 {{PLURAL:$5|à¬\87ତିହାସର à¬\98à¬\9fଣାà¬\9fିà¬\8fର|$5 à¬\87ତିହାସର à¬\98à¬\9fଣାବଳà­\80ର}} à¬¦à­\87à¬\96ଣା à¬¬à¬¦à¬³à¬¾à¬\87ଦà­\87ଲà­\87: $4",
-       "logentry-suppress-event-legacy": "$1 à¬\97à­\8bପନ à¬­à¬¾à¬¬à¬°à­\87 à¬¬à¬¦à¬³à¬¾à¬\87ଦà­\87ଲà­\87 $3ରà­\87 à¬¥à¬¿à¬¬à¬¾ à¬\87ତିହାସ à¬\98à¬\9fଣାମାନà¬\99à­\8dà¬\95ର à¬¦à­\87à¬\96ଣା à¬¬à¬¦à¬³à¬¾à¬\87ଦà­\87ଲà­\87",
-       "logentry-suppress-revision-legacy": "$1 à¬\97à­\8bପନ à¬­à¬¾à¬¬à¬°à­\87 à¬¬à¬¦à¬³à¬¾à¬\87ଦà­\87ଲà­\87 $3 à¬ªà­\83ଷà­\8dଠାରà­\87 à¬¥à¬¿à¬¬à¬¾ à¬\87ତିହାସ à¬\98à¬\9fଣାମାନà¬\99à­\8dà¬\95ର à¬¦à­\87à¬\96ଣା à¬¬à¬¦à¬³à¬¾à¬\87ଦà­\87ଲà­\87",
+       "logentry-delete-event": "$1 {{PLURAL:$5|ଲଗ ଘଟଣାଟିଏ|$5 ଗୋଟି ଲଗ ଘଟଣା}}ର ଦେଖଣା $3 ପୃଷ୍ଠାରେ {{GENDER:$2|ବଦଳାଇଲେ}}: $4",
+       "logentry-delete-revision": "$1 {{PLURAL:$5|ସଂସ୍କରଣଟିଏ|$5 ଗୋଟି ସଂସ୍କରଣ}}ର ଦେଖଣା $3 ପୃଷ୍ଠାରେ {{GENDER:$2|ବଦଲାଇଲେ}}: $4",
+       "logentry-delete-event-legacy": "$1 $3 à¬ªà­\83ଷà­\8dଠାର à¬²à¬\97 à¬\98à¬\9fଣାà¬\97à­\81ଡ଼ିà¬\95ର à¬¦à­\87à¬\96ଣା {{GENDER:$2|ବଦଳାà¬\87ଲà­\87}}",
+       "logentry-delete-revision-legacy": "$1 $3 à¬ªà­\83ଷà­\8dଠାରà­\87 à¬¥à¬¿à¬¬à¬¾ à¬²à¬\97 à¬\98à¬\9fଣାà¬\97à­\81ଡ଼ିà¬\95ର à¬¦à­\87à¬\96ଣା à¬¸à¬\82ସà­\8dà¬\95ରଣମାନ {{GENDER:$2|ବଦଳାà¬\87ଲà­\87}}",
+       "logentry-suppress-delete": "$1 $3 ପୃଷ୍ଠାଟିକୁ {{GENDER:$2|ଦବାଇଦେଲେ}}",
+       "logentry-suppress-event": "$1 $3 ପୃଷ୍ଠାରେ ଗୋପନୀୟ ଭାବରେ {{PLURAL:$5|ଲଗ ଇଭେଣ୍ଟଟିଏର|$5 ଗୋଟି ଲଗ ଇଭେଣ୍ଟର}} ଦେଖଣା {{GENDER:$2|ବଦଳାଇଦେଲେ}}: $4",
+       "logentry-suppress-revision": "$1 à¬\97à­\8bପନ à¬­à¬¾à¬¬à­\87 $3 à¬ªà­\83ଷà­\8dଠାରà­\87 {{PLURAL:$5|ସà¬\82ସà­\8dà¬\95ରଣà¬\9fିà¬\8fର|$5 à¬\97à­\8bà¬\9fି à¬¸à¬\82ସà­\8dà¬\95ରଣର}} à¬¦à­\87à¬\96ଣା {{GENDER:$2|ବଦଳାà¬\87ଦà­\87ଲà­\87}}: $4",
+       "logentry-suppress-event-legacy": "$1 à¬\97à­\8bପନ à¬­à¬¾à¬¬à­\87 $3ରà­\87 à¬¥à¬¿à¬¬à¬¾ à¬²à¬\97 à¬\87ଭà­\87ଣà­\8dà¬\9fମାନà¬\99à­\8dà¬\95ର à¬¦à­\87à¬\96ଣା  {{GENDER:$2|ବଦଳାà¬\87ଦà­\87ଲà­\87}}",
+       "logentry-suppress-revision-legacy": "$1 à¬\97à­\8bପନ à¬­à¬¾à¬¬à­\87 $3 à¬ªà­\83ଷà­\8dଠାରà­\87 à¬¥à¬¿à¬¬à¬¾ à¬¸à¬\82ସà­\8dà¬\95ରଣମାନà¬\99à­\8dà¬\95ର à¬¦à­\87à¬\96ଣା {{GENDER:$2|ବଦଳାà¬\87ଦà­\87ଲà­\87}}",
        "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-noredirect": "$1 $3 ପୃଷ୍ଠାଟି $4କୁ ପୁନପ୍ରେରଣ ବିନା ଘୁଞ୍ଚାଇଲେ",
-       "logentry-move-move_redir": "$1 $3 ପୃଷ୍ଠାଟି $4କୁ ପୁନପ୍ରେରଣ ଛାଡ଼ି ଘୁଞ୍ଚାଇଲେ",
-       "logentry-move-move_redir-noredirect": "$1 $3 ପୃଷ୍ଠାଟି $4କୁ ପୁନପ୍ରେରଣକୁ ଛାଡ଼ି ପୁନପ୍ରେରଣ ବିନା ଘୁଞ୍ଚାଇଲେ",
-       "logentry-patrol-patrol": "$1 $3 à¬ªà­\83ଷà­\8dଠାର $4 à¬¤à¬® à¬¸à¬\99à­\8dà¬\95ଳନà¬\95à­\81 à¬\9cà¬\97ାଯାà¬\87à¬\85à¬\9bି à¬¬à­\8bଲି à¬\9aିହà­\8dନିତ à¬\95ଲà­\87",
-       "logentry-patrol-patrol-auto": "$1 à¬\86ପà­\87à¬\86ପà­\87 $3 à¬ªà­\83ଷà­\8dଠାର $4 à¬¤à¬® à¬¸à¬\99à­\8dà¬\95ଳନà¬\95à­\81 à¬\9cà¬\97ାଯାà¬\87à¬\85à¬\9bି à¬¬à­\8bଲି à¬\9aିହà­\8dନିତ à¬\95ଲà­\87",
+       "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 $3 à¬ªà­\83ଷà­\8dଠାର $4 à¬¤à¬® à¬¸à¬\82ସà­\8dà¬\95ରଣ à¬\9cà¬\97ାଯାà¬\87à¬\85à¬\9bି à¬¬à­\8bଲି {{GENDER:$2|à¬\9aିହà­\8dନିତ à¬\95ଲà­\87}}",
+       "logentry-patrol-patrol-auto": "$1 à¬\86ପà­\87à¬\86ପà­\87 $3 à¬ªà­\83ଷà­\8dଠାର $4 à¬¤à¬® à¬¸à¬\82ସà­\8dà¬\95ରଣ à¬\9cà¬\97ାଯାà¬\87à¬\85à¬\9bି à¬¬à­\8bଲି {{GENDER:$2|à¬\9aିହà­\8dନିତ à¬\95ଲà­\87}}",
        "logentry-newusers-newusers": "ସଭ୍ୟ ଖାତା $1 {{GENDER:$2|ତିଆରି}} କରାଗଲା",
        "logentry-newusers-create": "ସଭ୍ୟ ଖାତା $1 {{GENDER:$2|ତିଆରି}} କରାଗଲା",
-       "logentry-newusers-create2": "ସଭ୍ୟ ଖାତା $3ଟି $1 ଦ୍ଵାରା ତିଆରି କରାଗଲା",
-       "logentry-newusers-byemail": "$1ଙ୍କ ଦ୍ଵାରା $3 ବ୍ୟବହାରକାରୀ ଖାତାଟି ଖୋଳାଗଲା ଏବଂ ପାସୱାର୍ଡଟି ଇ-ମେଲ ଦ୍ଵାରା ପଠାଗଲା",
+       "logentry-newusers-create2": "$3 ସଭ୍ୟ ଖାତାଟି $1ଙ୍କ ଦ୍ଵାରା {{GENDER:$2|ଗଢ଼ାଗଲା}}",
+       "logentry-newusers-byemail": "ସଭ୍ୟ ଖାତା $3, $1ଙ୍କ ଦ୍ଵାରା {{GENDER:$2|ଖୋଲାଗଲା}} ଏବଂ ପାସୱାର୍ଡଟି ଇମେଲ ଦ୍ଵାରା ପଠାଗଲା",
        "logentry-newusers-autocreate": "ବ୍ୟବହାରକାରୀ ଖାତା $1 ଆପେଆପେ {{GENDER:$2|ତିଆରିହେଲା}}",
-       "logentry-rights-rights": "$1, $3 à¬ªà¬¾à¬\87à¬\81 $4ରà­\81 $5à¬\95à­\81 à¬¸à¬­à­\8dà­\9fପଦ à¬¬à¬¦à¬³à¬¾à¬\87ଲà­\87",
+       "logentry-rights-rights": "$1, $3 à¬ªà¬¾à¬\87à¬\81 $4ରà­\81 $5à¬\95à­\81 à¬\95à­\8bଠ à¬¸à¬­à­\8dà­\9fପଦ {{GENDER:$2|ବଦଳାà¬\87ଲà­\87}}",
        "logentry-rights-rights-legacy": "$1 ଗୋଷ୍ଠୀ ସଭ୍ୟପଦ $3 ପାଇଁ {{GENDER:$2|ବଦଳିଗଲା}}",
-       "logentry-rights-autopromote": "$1 ଆପେ ଆପେ $4ରୁ $5କୁ ଗଲେ",
+       "logentry-rights-autopromote": "$1 ଆପେ ଆପେ $4ରୁ $5କୁ {{GENDER:$2|ପଦୋନ୍ନତ କରାଗଲା}}",
+       "logentry-upload-upload": "$1, $3 {{GENDER:$2|ଅପଲୋଡ଼ କଲେ}}",
+       "logentry-upload-overwrite": "$1, $3ର ଏକ ନୂଆ ସଂସ୍କରଣ {{GENDER:$2|ଅପଲୋଡ଼ କଲେ}}",
+       "logentry-upload-revert": "$1, $3 {{GENDER:$2|ଅପଲୋଡ଼ କଲେ}}",
        "rightsnone": "(କିଛି ନାହିଁ)",
+       "revdelete-summary": "ସାରକଥା ସମ୍ପାଦନା",
        "feedback-bugornote": "ଦୟାକରି ଆପଣ ଏକ କାରିଗରି ଅସୁବିଧାଟିଏ ଜଣାଇବା ପାଇଁ ଚାହୁଁଥିଲେ ଦୟାକରି [$1 ଏଠାରେ ଅସୁବିଧାଟି ଜଣାନ୍ତୁ] । \nଅଥବା, ଆପଣ ତଳେ ଠିଆ ସହଜ ଆବେଦନ ପତ୍ରଟି ପୁରଣ କରିପାରିବେ ।  ଆପଣଙ୍କ ବ୍ୟବହାରକାରୀ ନାମ ଓ ଆପଣ ବ୍ୟବହାର କରୁଥିବା ବ୍ରାଉଜର ଅନୁସାରେ ଆପଣଙ୍କ ମତାମତ \"[$3 $2]\"ରେ ଯୋଡ଼ାଯିବ ।",
        "feedback-subject": "ବିଷୟ:",
        "feedback-message": "ଖବର:",
        "api-error-overwrite": "ଆଗରୁଥିବା ଏକ ଫାଇଲ ଉପରେ ମଡ଼ାଇବା ଅନୁମୋଦିତ ନୁହେଁ ।",
        "api-error-stashfailed": "ଭିତର ଅସୁବିଧା: ସର୍ଭର ଅସ୍ଥାୟୀ ଫାଇଲକୁ ସାଇତି ପାରିଲା ନାହିଁ ।",
        "api-error-publishfailed": "ଭିତର ଅସୁବିଧା: ସର୍ଭର ଅସ୍ଥାୟୀ ଫାଇଲକୁ ପ୍ରକାଶ କରିପାରିଲା ନାହିଁ ।",
+       "api-error-stasherror": "ଫାଇଲଟିକୁ ଷ୍ଟାସରେ ଅପଲୋଡ଼ କଲାବେଳେ ତ୍ରୁଟିଟିଏ ପରିଲକ୍ଷିତ ହେଲା ।",
        "api-error-timeout": "ସର୍ଭର ଏକ ସୀମିତ କାଳ ଭିତରେ ଉତ୍ତର ଦେଲାନାହିଁ ।",
        "api-error-unclassified": "ଏକ ଅଜଣା ଅସୁବିଧା ଘଟିଲା ।",
        "api-error-unknown-code": "ଅଜଣା ତୃଟି: \"$1\"",
        "duration-decades": "$1 {{PLURAL:$1|decade|decades}}",
        "duration-centuries": "$1 {{PLURAL:$1|century|centuries}}",
        "duration-millennia": "$1 {{PLURAL:$1|millennium|millennia}}",
+       "rotate-comment": "$1ଙ୍କ ଦ୍ୱାରା ଛବିଟିକୁ ଘଣ୍ଟା କଣ୍ଟାର ସମାନ ଦିଗରେ {{PLURAL:$1|ଡିଗ୍ରି|ଡିଗ୍ରି}} ବୁଲାଇଦିଆଗଲା",
+       "limitreport-title": "ପାର୍ସର ପ୍ରୋଫାଇଲିଙ୍ଗ ଡାଟା:",
+       "limitreport-cputime": "CPU ସମୟ ବ୍ୟବହାର",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|ସେକେଣ୍ଡ|ସେକେଣ୍ଡ}}",
+       "limitreport-walltime": "ରିଏଲ ଟାଇମ ବ୍ୟବହାର",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|ସେକେଣ୍ଡ|ସେକେଣ୍ଡ}}",
+       "limitreport-ppvisitednodes": "ପ୍ରିପୋସେସର ନୋଡ଼ କାଉଣ୍ଟ ଦେଖିଲେ",
+       "limitreport-ppgeneratednodes": "ପ୍ରିପୋସେସର ନୋଡ଼ କାଉଣ୍ଟ ତିଆରି କଲେ",
+       "limitreport-postexpandincludesize": "ବଢ଼ାଇବା ପରେ ଆକାର ରଖନ୍ତୁ",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|ବାଇଟ|ବାଇଟ}}",
+       "limitreport-templateargumentsize": "ଛାଞ୍ଚ ଆର୍ଗୁମେଣ୍ଟ ଆକାର",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|ବାଇଟ|ବାଇଟ}}",
+       "limitreport-expansiondepth": "ସର୍ବୋଚ୍ଚ ବଢ଼ାଇବା ଗଭୀରତା",
+       "limitreport-expensivefunctioncount": "ଭାରୀ ପାର୍ସର ଫଙ୍କସନ ଆକଳନ",
+       "expandtemplates": "ଛାଞ୍ଚ ବଢ଼ାଇବା",
+       "expand_templates_intro": "ଏହି ବିଶେଷ ପୃଷ୍ଠାଟି ସବୁ ଲେଖା ନେଇ ଛାଞ୍ଚକୁ ବାରମ୍ବାର ବଢ଼ାଇଦିଏ ।\nଏହା <code><nowiki>{{</nowiki>#language:…}}</code> ଭଳି ପାର୍ସର ଫଙ୍କସନମାନଙ୍କୁ\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code> ଭଳି ଭେରିଏବଲମାନଙ୍କୁ ବଢ଼ାଏ ।\nଅଧିକନ୍ତୁ, ଏହା <code><nowiki>{{ }} }}</code>ରେ ଥିବା ସବୁ କିଛି ବଢ଼ାଇଥାଏ ।",
+       "expand_templates_title": "{{FULLPAGENAME}} ଆଦି ପାଇଁ ପ୍ରସଙ୍ଗ ନାମ:",
        "expand_templates_input": "ଇନପୁଟ ବିଷୟ:",
        "expand_templates_output": "ପରିଣାମ",
+       "expand_templates_xml_output": "XML ଫଳାଫଳ",
+       "expand_templates_html_output": "ଖାଲି HTML ଫଳାଫଳ",
        "expand_templates_ok": "ଠିକ ଅଛି",
        "expand_templates_remove_comments": "ମତାମତ ହଟାନ୍ତୁ",
-       "expand_templates_preview": "ଦେଖଣା"
+       "expand_templates_remove_nowiki": "ଫଳାଫଳରେ <nowiki> ଟ୍ୟାଗମାନଙ୍କୁ ଦବାଇଦିଅନ୍ତୁ",
+       "expand_templates_generate_xml": "XML ପାର୍ସ ସଂରଚନା ଦେଖାନ୍ତୁ",
+       "expand_templates_generate_rawhtml": "କେବଳ HTML କୋଡ଼ ଦେଖାନ୍ତୁ",
+       "expand_templates_preview": "ଦେଖଣା",
+       "pagelanguage": "ପୃଷ୍ଠା ଭାଷା ବଛା",
+       "pagelang-name": "ପୃଷ୍ଠା",
+       "pagelang-language": "ଭାଷା",
+       "pagelang-use-default": "ଡିଫଲ୍ଟ ଭାଷା ବ୍ୟବହାର କରନ୍ତୁ",
+       "pagelang-select-lang": "ଭାଷା ବାଛନ୍ତୁ",
+       "right-pagelang": "ପୃଷ୍ଠାର ଭାଷା ବାଛନ୍ତୁ",
+       "action-pagelang": "ପୃଷ୍ଠାର ଭାଷା ବଦଳାନ୍ତୁ",
+       "log-name-pagelang": "ଭାଷା ଇତିହାସ ବଦଳାନ୍ତୁ",
+       "log-description-pagelang": "ପୃଷ୍ଠା ଭାଷା ବଦଳର ଏ ଏକ ଇତିହାସ",
+       "logentry-pagelang-pagelang": "$1 $3 ପୃଷ୍ଠାର ଭାଷା $4 ରୁ $5କୁ {{GENDER:$2|ବଦଳାଇଦେଲେ}} ।",
+       "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; ଯଦି ଆପଣ ଏହି ଏବେ MediaWiki ଇନଷ୍ଟଲ କରିଥାନ୍ତି:\n: ଆପଣ ବୋଧେ git ରୁ ସିଧା, କିମ୍ବା ସୋର୍ସ କୋଡ଼ରୁ କିମ୍ବା ଆଉ କେଉଁଠାରୁ ଇନଷ୍ଟଲ କରିଛନ୍ତି । ଏହା ଆଶାନୁରୂପ । [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.orgର ]ରୁ ଆଉ କିଛି ସ୍କିନ ଇନଷ୍ଟଲ କରିପାରିବେ:\n:* ବିଭିନ୍ନ ସ୍କିନ ଓ ଏକ୍ସଟେନସନ ସହିତ ଆସୁଥିବା [https://www.mediawiki.org/wiki/Download ଟାରବଲ ଇନଷ୍ଟଲର] ଡାଉନଲୋଡ଼ କରାଯାଉଛି । ଆପଣ  <code>skins/</code> ଡାଇରେକ୍ଟରି ଏଠାରୁ କପି କରି ପେଷ୍ଟ କରିପାରିବେ । \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 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; ଯଦି ଆପଣ ଏହି ଏବେ MediaWiki ଇନଷ୍ଟଲ କରିଥାନ୍ତି:\n: ଆପଣ ବୋଧେ git ରୁ ସିଧା, କିମ୍ବା ସୋର୍ସ କୋଡ଼ରୁ କିମ୍ବା ଆଉ କେଉଁଠାରୁ ଇନଷ୍ଟଲ କରିଛନ୍ତି । ଏହା ଆଶାନୁରୂପ । MediaWiki 1.24 ଓ ତା'ପରର ସଂସ୍କରଣମାନଙ୍କ ମୂଳ ରେପୋଜିଟରିରେ କୌଣସି ସ୍କିନ ରହିନଥାଏ । [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.orgର ]ରୁ ଆଉ କିଛି ସ୍କିନ ଇନଷ୍ଟଲ କରିପାରିବେ । କିପରି:\n:* ବିଭିନ୍ନ ସ୍କିନ ଓ ଏକ୍ସଟେନସନ ସହିତ ଆସୁଥିବା [https://www.mediawiki.org/wiki/Download ଟାରବଲ ଇନଷ୍ଟଲର] ଡାଉନଲୋଡ଼ କରାଯାଉଛି । ଆପଣ  <code>skins/</code> ଡାଇରେକ୍ଟରି ଏଠାରୁ କପି କରି ପେଷ୍ଟ କରି । \n:* git ଦେଇ <code>mediawiki/skins/*</code> ରେପୋଜିଟରିରୁ ଗୋଟେ ସ୍କିନ ଆପଣଙ୍କର MediaWiki ଇନଷ୍ଟଲେସନର <code dir=\"ltr\">skins/</code> ଡାଇରେକ୍ଟରିକୁ କପି କରି ।\n: ଆପଣ ଯଦି ଜଣେ MediaWiki ଡେଭେଲପର ହୋଇଥାନ୍ତି ତାହେଲେ ଏହା କରିବା ଦ୍ୱାରା ଆପଣଙ୍କର git ରେପୋଜିଟୋରିରେ କିଛି ବାଧା ଉପୁଜିବା ଅନୁଚିତ । ସ୍କିନ ସକ୍ରିୟ କରିବା ଓ ଡିଫଲ୍ଟ ଭାବେ ବାଛିବା ବାବଦରେ ଅଧିକ ସୂଚନା ପାଇଁ [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] ଦେଖନ୍ତୁ ।",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ସକ୍ରିୟ କରାଗଲା)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $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-bitmap": "ବିଟମ୍ୟାପ ଛବି",
+       "mediastatistics-header-drawing": "ଅଙ୍କନ (ଭେକ୍ଟର ଛବି)",
+       "mediastatistics-header-audio": "ଅଡ଼ିଓ",
+       "mediastatistics-header-video": "ଭିଡ଼ିଓ",
+       "mediastatistics-header-multimedia": "ରିଚ ମିଡ଼ିଆ",
+       "mediastatistics-header-office": "ଅଫିସ",
+       "mediastatistics-header-text": "ଲେଖା",
+       "mediastatistics-header-executable": "ଏକ୍ସକିଉଟ କରିହେବା ଭଳି",
+       "mediastatistics-header-archive": "କମ୍ପ୍ରେସ ହୋଇଥିବା ଫର୍ମାଟ",
+       "json-warn-trailing-comma": "$1 ପରର {{PLURAL:$1|କମାଟି|କମା ସବୁ}} JSONରୁ ହଟାଇ ଦିଆଯାଇଛି",
+       "json-error-unknown": "JSONରେ କିଛି ତ୍ରୁଟି ଥିଲା । ତ୍ରୁଟି: $1",
+       "json-error-depth": "ସର୍ବାଧିକ ଷ୍ଟାକ ଗଭୀରତା ଟପିଯାଇଛି",
+       "json-error-state-mismatch": "ଅବୈଧ କିମ୍ବା ଅସୁବିଧାଜନକ JSON",
+       "json-error-ctrl-char": "କଣ୍ଟ୍ରୋଲ କ୍ୟାରେକ୍ଟର ତ୍ରୁଟି, ଭୁଲ ଭାବେ ଏନକୋଡ଼ କରାଯାଇଥିବା ହେତୁ ହୋଇପାରେ",
+       "json-error-syntax": "ସିଣ୍ଟାକ୍ସ ଭୁଲ",
+       "json-error-utf8": "UTF-8 କ୍ୟାରେକ୍ଟର ଅସଜଡ଼ା, ଭୁଲ ଭାବେ ଏନକୋଡ଼ କରାଯାଇଥିବା ହେତୁ ହୋଇପାରେ",
+       "json-error-recursion": "ଏନକୋଡ଼ ହେବାକୁ ଥିବା ଭାଲ୍ୟୁରେ ଏକରୁ ଅଧିକ ରିକର୍ସିଭ ଆଧାର",
+       "json-error-inf-or-nan": "ଭାଲ୍ୟୁରେ ଏକରୁ ଅଧିକ NAN କିମ୍ବା INF ମୂଲ୍ୟ ଏନକୋଡ଼ କରିବାକୁ ହେବ",
+       "json-error-unsupported-type": "ଏନକୋଡ଼ ହୋଇନପାରିବା ଭଳି ଏକ ପ୍ରକାରର ମୂଲ୍ୟ ଦିଆଗଲା"
 }
index 9ff15c2..392fee0 100644 (file)
        "passwordreset-emailsent-capture": "Ног пароль сæвæрыны фыстæг æрвыст æрцыд æмæ бындæр æвдыст у.",
        "passwordreset-emailerror-capture": "Ног пароль сæвæрыны фыстæг арæзт æрцыд æмæ бындæр æвдыст у. Фæлæ йæ {{grammar:allative|{{GENDER:$2|user}}}} арвитын нæ бантыстис: $1",
        "changeemail": "E-mail адрис фæивын",
-       "changeemail-header": "Аккаунты e-mail адрис фæивын",
        "changeemail-text": "Байдзаг кæн ацы формæ, цæмæй дæ e-mail адрис фæивай. Уый тыххæй дын хъæудзæн дæ пароль бафыссын.",
        "changeemail-no-info": "Ды хъуамæ системæмæ хызт уай, цæмæй ацы фарсмæ комкоммæ бавналай.",
        "changeemail-oldemail": "Нырыккон e-mail адрис:",
        "changeemail-none": "(нæй)",
        "changeemail-password": "Дæ {{grammar:genitive|{{SITENAME}}}} пароль:",
        "changeemail-submit": "E-mail фæивын",
-       "changeemail-cancel": "Ныууадзын",
        "bold_sample": "Бæзджын текст",
        "bold_tip": "Бæзджын текст",
        "italic_sample": "Курсив",
        "search-relatedarticle": "Хæстæг",
        "searchrelated": "хæстæг",
        "searchall": "иууылдæр",
-       "showingresultsheader": "{{PLURAL:$5|Фæстиуæг '''$1''' '''$3'''-йæ|Фæстиуджытæ '''$1 - $2''' '''$3'''-йæ}} '''{{grammar:dative|$4}}'''",
        "search-nonefound": "Ницы разындис домæнæн",
        "powersearch-legend": "Сæрмагонд агуырд",
        "powersearch-toggleall": "Иууылдæр",
        "statistics": "Статистикæ",
        "statistics-header-pages": "Фарсы статистикæ",
        "statistics-header-edits": "Ивдтыты статистикæ",
-       "statistics-header-views": "Бакастыты статистикæ",
        "statistics-header-users": "Архайджыты статистикæ",
        "statistics-header-hooks": "Æндæр статистикæтæ",
        "statistics-articles": "Мидисы фæрстæ",
        "uncategorizedpages": "Æнæкатегори фæрстæ",
        "uncategorizedimages": "Æнæкатегори файлтæ",
        "uncategorizedtemplates": "Æнæкатегори хуызæгтæ",
-       "popularpages": "Популярон фæрстæ",
        "wantedcategories": "Хъæугæ категоритæ",
        "wantedpages": "Хъæугæ фæрстæ",
        "wantedfiles": "Хъæугæ файлтæ",
        "pager-older-n": "{{PLURAL:$1|раздæр иу|раздæр $1}}",
        "booksources": "Чиныгисæнтæ",
        "booksources-search-legend": "Агурын чингуыты равзæрæнтæ",
-       "booksources-go": "Агурын",
        "specialloguserlabel": "Гæнæг:",
        "speciallogtitlelabel": "Мил (ном кæнæ архайæг):",
        "log": "Логтæ",
        "unwatch": "Нал дарын цæст",
        "watchlist-details": "{{PLURAL:$1|$1 фарсмæ|$1 фарсмæ}} дæ цæст дарыс, тæрхоны фæрстæ нæ нымайгæйæ.",
        "wlnote": "Дæлæ афæстаг '''$2 сахаты дæргъы''' цы $1 {{PLURAL:$1|ивддзинад|ивддзинады}} æрцыди.",
-       "wlshowlast": "Фæстæг $1 сахаты, $2 боны дæргъы; $3.",
+       "wlshowlast": "Фæстæг $1 сахаты, $2 боны дæргъы; .",
        "watchlist-options": "Цæстдард рæгъы фадæттæ",
        "watching": "Цæстдард фæрсты номхыгъдмæ афтауын...",
        "unwatching": "Цæстдард фæрсты номхыгъдæй аиуварс кæнын...",
        "exif-datetimereleased": "Рауагъды датæ",
        "exif-identifier": "Бæрæггæнæн",
        "exif-gaincontrol-0": "Нæй",
-       "watchlistall2": "иууылдæр",
        "namespacesall": "иууылдæр",
        "monthsall": "иууылдæр",
        "confirm_purge_button": "Афтæ уæд!",
        "logentry-delete-delete": "$1 схафта фарс $3",
        "logentry-delete-restore": "$1 рацарæзта фарс $3",
        "rightsnone": "(нæй)",
+       "revdelete-summary": "ивддзинады мидис",
        "feedback-subject": "Сæр:",
        "feedback-message": "Фыстæг:",
        "feedback-cancel": "Ныууадзын",
index 868b4e2..af62a95 100644 (file)
@@ -60,6 +60,7 @@
        "tog-showhiddencats": "ਲੁਕਵੀਆਂ ਸ਼੍ਰੇਣੀਆਂ ਵਖਾਓ",
        "tog-norollbackdiff": "\"ਵਾਪਸ ਮੋੜੋ\" ਅਮਲ ਵਿਚ ਲਿਆਣ ਮਗਰੋਂ ਫ਼ਰਕ ਨਾ ਵਖਾਓ",
        "tog-useeditwarning": "ਜਦੋਂ ਮੈਂ ਅਣ-ਸਾਂਭੀਆਂ ਸੋਧਾਂ ਵਾਲਾ ਸਫ਼ਾ ਛੱਡਾਂ ਤਾਂ ਮੈਨੂੰ ਖ਼ਬਰ ਦਿਉ",
+       "tog-prefershttps": "ਦਾਖ਼ਲ ਹੋਣ 'ਤੇ ਹਮੇਸ਼ਾਂ ਸੁਰੱਖਿਅਤ ਜੋੜ ਵਰਤੋ",
        "underline-always": "ਹਮੇਸ਼ਾਂ",
        "underline-never": "ਕਦੇ ਨਹੀਂ",
        "underline-default": "ਸਕਿਨ ਜਾਂ ਬਰਾਊਜ਼ਰ ਮੂਲ",
        "history": "ਸਫ਼ੇ ਦਾ ਅਤੀਤ",
        "history_short": "ਅਤੀਤ",
        "updatedmarker": "ਮੇਰੀ ਆਖਰੀ ਫੇਰੀ ਤੋਂ ਬਾਅਦ ਦੇ ਅੱਪਡੇਟ",
-       "printableversion": "à¨\9bਪਣਯà©\8bà¨\97 à¨µà¨°à¨\9cਨ",
+       "printableversion": "à¨\9bਪਣਯà©\8bà¨\97 à¨°à©\82ਪ",
        "permalink": "ਪੱਕੀ ਲਿੰਕ",
        "print": "ਛਾਪੋ",
        "view": "ਵੇਖੋ",
        "edit": "ਸੋਧੋ",
        "edit-local": "ਲੋਕਲ ਵੇਰਵਾ ਸੋਧੋ",
        "create": "ਬਣਾਓ",
+       "create-local": "ਕੋਈ ਸਥਾਨੀ ਵੇਰਵਾ ਜੋੜੋ",
        "editthispage": "ਇਹ ਸਫ਼ਾ ਸੋਧੋ",
        "create-this-page": "ਇਹ ਸਫ਼ਾ ਬਣਾਓ",
        "delete": "ਹਟਾਓ",
        "viewhelppage": "ਮਦਦ ਸਫ਼ਾ ਵੇਖੋ",
        "categorypage": "ਸ਼੍ਰੇਣੀ ਸਫ਼ਾ ਵੇਖੋ",
        "viewtalkpage": "ਚਰਚਾ ਵੇਖੋ",
-       "otherlanguages": "ਹà©\8bਰ à¨­à¨¾à¨¸à¨¼à¨¾à¨µà¨¾ਂ ਵਿਚ",
+       "otherlanguages": "ਹà©\8bਰ à¨¬à©\8bਲà©\80à¨\86ਂ ਵਿਚ",
        "redirectedfrom": "($1 ਤੋਂ ਰੀਡਿਰੈਕਟ)",
        "redirectpagesub": "ਰੀਡਿਰੈਕਟ ਸਫ਼ਾ",
+       "redirectto": "ਇਸ ਵੱਲ ਮੋੜੋ:",
        "lastmodifiedat": "ਇਸ ਸਫ਼ੇ ਵਿੱਚ ਆਖ਼ਰੀ ਸੋਧ $1 ਨੂੰ $2 ਵਜੇ ਹੋਈ।",
        "viewcount": "ਇਹ ਸਫ਼ਾ {{PLURAL:$1|ਇੱਕ ਵਾਰ|$1 ਵਾਰ}} ਵੇਖਿਆ ਗਿਆ।",
        "protectedpage": "ਸੁਰੱਖਿਅਤ ਸਫ਼ਾ",
        "pool-errorunknown": "ਅਣਜਾਣ ਗਲਤੀ",
        "aboutsite": "{{SITENAME}} ਬਾਰੇ",
        "aboutpage": "Project:ਬਾਰੇ",
-       "copyright": "ਸਮੱà¨\97ਰà©\80 $1 à¨¹à©\87ਠ à¨\89ਪਲੱਬਧ ਹੈ।",
+       "copyright": "à¨\95à©\81à¨\9d à¨¹à©\8bਰ à¨¨à¨¾ à¨²à¨¿à¨\96à©\87 à¨\9cਾਣ 'ਤà©\87 à¨¸à¨®à©±à¨\97ਰà©\80 $1 à¨¹à©\87ਠ à¨®à©\8cà¨\9cà©\82ਦ ਹੈ।",
        "copyrightpage": "{{ns:project}}:ਕਾਪੀਰਾਈਟ",
        "currentevents": "ਹਾਲ ਦੀਆਂ ਘਟਨਾਵਾਂ",
        "currentevents-url": "Project:ਹਾਲ ਦੀਆਂ ਘਟਨਾਵਾਂ",
        "policy-url": "Project:ਨੀਤੀ",
        "portal": "ਭਾਈਚਾਰਕ ਸੱਥ",
        "portal-url": "Project:ਸੱਥ",
-       "privacy": "ਪਰਾà¨\88ਵà©\87ਸà©\80 à¨ªà¨¾à¨²à¨¸ੀ",
-       "privacypage": "Project:ਪਰਾà¨\88ਵà©\87ਸà©\80 à¨ªà¨¾à¨²à¨¸ੀ",
+       "privacy": "ਪਰਦਾ à¨¨à©\80ਤੀ",
+       "privacypage": "Project:ਪਰਦਾ à¨¨à©\80ਤੀ",
        "badaccess": "ਮਨਜ਼ੂਰੀ ਗਲਤੀ",
        "badaccess-group0": "ਤੁਹਾਨੂੰ ਉਹ ਕਾਰਵਾਈ ਕਰਨ ਦੀ ਮਨਜ਼ੂਰੀ ਨਹੀਂ ਜਿਹਦੀ ਤੁਸੀਂ ਮੰਗ ਕੀਤੀ ਹੈ।",
        "badaccess-groups": "ਜੋ ਕਾਰਵਾਈ ਤੁਸੀਂ ਕਰਨੀ ਚਾਹੀ ਹੈ ਓਹ {{PLURAL:$2|ਇਸ ਸਮੂਹ|ਇਹਨਾਂ ਸਮੂਹਾਂ}} ਦੇ ਮੈਂਬਰ ਹੀ ਕਰ ਸਕਦੇ ਹਨ: $1",
        "youhavenewmessages": "ਤੁਹਾਡੇ ਲਈ $1। ($2)",
        "youhavenewmessagesfromusers": "{{PLURAL:$3|ਇੱਕ ਵਰਤੋਂਕਾਰ|$3 ਵਰਤੋਂਕਾਰਾਂ}} ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।",
        "youhavenewmessagesmanyusers": "ਕਈ ਯੂਜ਼ਰ ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।",
-       "newmessageslinkplural": "{{PLURAL:$1|ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ|ਨਵੇਂ ਸੁਨੇਹੇ}} {{PLURAL:$1|ਹੈ|ਹਨ}}",
-       "newmessagesdifflinkplural": "ਆਖ਼ਰੀ {{PLURAL:$1|ਤਬਦੀਲੀ|ਤਬਦੀਲੀਆਂ}}",
+       "newmessageslinkplural": "{{PLURAL:$1|ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ|999=ਨਵੇਂ ਸੁਨੇਹੇ}}",
+       "newmessagesdifflinkplural": "ਆਖ਼ਰੀ {{PLURAL:$1|ਤਬਦੀਲੀ|999=ਤਬਦੀਲੀਆਂ}}",
        "youhavenewmessagesmulti": "$1 ’ਤੇ ਤੁਹਾਡੇ ਲਈ ਨਵੇਂ ਸੁਨੇਹੇ ਹਨ",
        "editsection": "ਸੋਧੋ",
        "editold": "ਸੋਧ",
        "hidetoc": "ਓਹਲੇ",
        "collapsible-collapse": "ਸਮੇਟੋ",
        "collapsible-expand": "ਫੈਲਾਓ",
+       "confirmable-confirm": "ਕੀ {{GENDER:$1|ਤੁਹਾਨੂੰ}} ਪੂਰਾ ਵਿਸ਼ਵਾਸ ਹੈ?",
        "confirmable-yes": "ਹਾਂ",
        "confirmable-no": "ਨਹੀਂ",
        "thisisdeleted": "$1 ਵੇਖੋ ਜਾਂ ਮੁੜ ਸਟੋਰ ਕਰੋ",
        "sort-descending": "ਘਟਦਾ ਕ੍ਰਮ",
        "sort-ascending": "ਵਧਦਾ ਕ੍ਰਮ",
        "nstab-main": "ਸਫ਼ਾ",
-       "nstab-user": "ਯà©\82à¨\9c਼ਰ à¨¸à¨«à¨¼ਾ",
+       "nstab-user": "ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨µà¨°à¨\95ਾ",
        "nstab-media": "ਮੀਡੀਆ ਸਫ਼ਾ",
        "nstab-special": "ਖ਼ਾਸ ਸਫ਼ਾ",
        "nstab-project": "ਪਰੋਜੈਕਟ ਸਫ਼ਾ",
        "nospecialpagetext": "<strong>ਤੁਸੀਂ ਇੱਕ ਗ਼ਲਤ ਖ਼ਾਸ ਸਫ਼ੇ ਲਈ ਬੇਨਤੀ ਕੀਤੀ ਹੈ।</strong>\nਸਹੀ ਖ਼ਾਸ ਸਫ਼ਿਆਂ ਦੀ ਲਿਸਟ [[Special:SpecialPages|{{int:specialpages}}]] ’ਤੇ ਵੇਖੀ ਜਾ ਸਕਦੀ ਹੈ।",
        "error": "ਗ਼ਲਤੀ",
        "databaseerror": "ਡਾਟਾਬੇਸ ਗਲਤੀ",
+       "databaseerror-text": "ਡਾਟਾਬੇਸ ਦੀ ਪੁੱਛ ਸਬੰਧੀ ਕੋਈ ਦੋਸ਼ ਵਾਪਰਿਆ ਹੈ।\nਇਹ ਸਾਫ਼ਟਵੇਅਰ ਵਿਚਲੇ ਕਿਸੇ ਮਾਂਙਣੂ ਵੱਲ ਇਸ਼ਾਰਾ ਹੋ ਸਕਦਾ ਹੈ।",
+       "databaseerror-textcl": "ਡਾਟਾਬੇਸ ਦੀ ਪੁੱਛ ਸਬੰਧੀ ਕੋਈ ਦੋਸ਼ ਵਾਪਰਿਆ ਹੈ।",
        "databaseerror-query": "ਪੁੱਛ-ਗਿੱਛ: $1",
        "databaseerror-function": "ਕਰਤੱਵ: $1",
        "databaseerror-error": "ਦੋਸ਼: $1",
        "invalidtitle-knownnamespace": "ਥਾਂ-ਨਾਮ \"$2\" ਅਤੇ ਲਿਖਤ \"$3\" ਵਾਲ਼ਾ ਗ਼ਲਤ ਸਿਰਲੇਖ",
        "invalidtitle-unknownnamespace": "ਅਣਜਾਣ ਨਾਂ-ਸਥਾਨ ਗਿਣਤੀ $1 ਅਤੇ ਲਿਖਤ $2 ਵਾਲ਼ਾ ਗ਼ਲਤ ਸਿਰਲੇਖ",
        "exception-nologin": "ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ",
-       "exception-nologin-text": "à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨\9cਾà¨\82 à¨\95ਾਰਵਾà¨\88 à¨¤à©\81ਹਾਡਾ à¨\87ਸ à¨µà¨¿à¨\95à©\80 â\80\99ਤà©\87 à¨²à¨¾à¨\97à¨\87ਨ à¨\95à©\80ਤਾ à¨¹à©\8bਣਾ à¨²à©\8bà©\9cਦà©\80 à¨¹à©\88।",
+       "exception-nologin-text": "à¨\87ਸ à¨¸à¨«à¨¼à©\87 à¨\9cਾà¨\82 à¨\95ਾਰਵਾà¨\88 à¨¤à©\81ੱà¨\95 à¨ªà©\81ੱà¨\9cਣ à¨µà¨¾à¨¸à¨¤à©\87 à¨®à¨¿à¨¹à¨°à¨¬à¨¾à¨¨à©\80 à¨\95ਰà¨\95à©\87 à¨¦à¨¾à¨\96਼ਲ à¨¹à©\8bਵà©\8b।",
        "virus-badscanner": "ਮੰਦਾ ਪ੍ਰਬੰਧ: ਅਣਜਾਣ ਵਾਇਰਸ ਸਕੈਨਰ: ''$1''",
        "virus-scanfailed": "ਸਕੈਨ ਫੇਲ੍ਹ ਹੈ (ਕੋਡ $1)",
        "virus-unknownscanner": "ਅਣਪਛਾਤਾ ਐਂਟੀਵਾਇਰਸ:",
        "welcomeuser": "$1 ਜੀ ਆਇਆਂ ਨੂੰ!",
        "welcomecreation-msg": "ਤੁਹਾਡਾ ਖਾਤਾ ਬਣ ਚੁੱਕਾ ਹੈ। ਆਪਣੀਆਂ [[Special:Preferences|{{SITENAME}} ਪਸੰਦ]] ਬਦਲਣੀ ਨਾ ਭੁੱਲੋ।",
        "yourname": "ਵਰਤੋਂਕਾਰ-ਨਾਂ:",
-       "userlogin-yourname": "ਯà©\82à¨\9c਼ਰ-ਨਾਂ",
-       "userlogin-yourname-ph": "à¨\86ਪਣਾ à¨¯à©\82à¨\9c਼ਰ-ਨਾਂ ਭਰੋ",
-       "createacct-another-username-ph": "ਯà©\82à¨\9c਼ਰ à¨¨à¨¾à¨\82 à¨¦à¨¿à¨\93",
+       "userlogin-yourname": "ਵਰਤà©\8bà¨\82à¨\95ਾਰ ਨਾਂ",
+       "userlogin-yourname-ph": "à¨\86ਪਣਾ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ-ਨਾਂ ਭਰੋ",
+       "createacct-another-username-ph": "ਵਰਤà©\8bà¨\82à¨\95ਾਰ-ਨਾà¨\82 à¨­à¨°à©\8b",
        "yourpassword": "ਪਾਸਵਰਡ:",
        "userlogin-yourpassword": "ਪਾਸਵਰਡ",
        "userlogin-yourpassword-ph": "ਆਪਣਾ ਪਾਸਵਰਡ ਦਿਉ",
        "nav-login-createaccount": "ਲਾਗਇਨ/ਖਾਤਾ ਬਣਾਓ",
        "userlogin": "ਲਾਗਇਨ/ਖਾਤਾ ਬਣਾਓ",
        "userloginnocreate": "ਲਾਗਇਨ",
-       "logout": "ਲਾà¨\97 à¨\86à¨\89à¨\9f",
-       "userlogout": "ਲਾà¨\97 à¨\86à¨\89à¨\9f",
+       "logout": "ਵਿਦਾà¨\88 à¨²à¨\89",
+       "userlogout": "ਵਿਦਾà¨\88 à¨²à¨\89",
        "notloggedin": "ਲਾਗਇਨ ਨਹੀਂ ਹੋ",
        "userlogin-noaccount": "ਖਾਤਾ ਨਹੀਂ ਹੈ?",
        "userlogin-joinproject": "{{SITENAME}} ਦਾ ਹਿੱਸਾ ਬਣੋ",
        "gotaccountlink": "ਲਾਗਇਨ",
        "userlogin-resetlink": "ਆਪਣੀ ਲਾਗਇਨ ਜਾਣਕਾਰੀ ਭੁੱਲ ਗਏ ਹੋ?",
        "userlogin-resetpassword-link": "ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਗਏ ਹੋ?",
+       "userlogin-helplink2": "ਦਾਖ਼ਲ ਹੋਣ ਵਿਚ ਮਦਦ",
+       "userlogin-loggedin": "ਤੁਸੀਂ ਪਹਿਲੋਂ ਹੀ {{GENDER:$1|$1}} ਵਜੋਂ ਦਾਖ਼ਲ ਹੋ ਚੁੱਕੇ ਹੋਂ।\nਕਿਸੇ ਹੋਰ ਵਰਤੋਂਕਾਰ ਵਜੋਂ ਦਾਖ਼ਲ ਹੋਣ ਵਾਸਤੇ ਹੇਠ ਦਿੱਤਾ ਫਾਰਮ ਭਰੋ।",
        "userlogin-createanother": "ਹੋਰ ਖਾਤਾ ਬਣਾਓ",
        "createacct-emailrequired": "ਈਮੇਲ ਪਤਾ",
        "createacct-emailoptional": "ਈਮੇਲ ਪਤਾ (ਚੋਣਵਾਂ)",
        "createacct-benefit-body2": "{{PLURAL:$1|ਸਫ਼ਾ|ਸਫ਼ੇ}}",
        "createacct-benefit-body3": "ਹਾਲੀਆ {{PLURAL:$1|ਯੋਗਦਾਨੀ}}",
        "badretype": "ਤੁਹਾਡੇ ਵਲੋਂ ਦਿੱਤੇ ਪਾਸਵਰਡ ਮਿਲਦੇ ਨਹੀਂ ਹਨ।",
-       "userexists": "ਯà©\82à¨\9c਼ਰ-ਨਾਂ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ। ਵੱਖਰਾ ਨਾਂ ਚੁਣੋ ਜੀ।",
+       "userexists": "ਵਰਤà©\8bà¨\82à¨\95ਾਰ-ਨਾਂ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ। ਵੱਖਰਾ ਨਾਂ ਚੁਣੋ ਜੀ।",
        "loginerror": "ਲਾਗਇਨ ਗ਼ਲਤੀ",
        "createacct-error": "ਖਾਤਾ ਬਣਾਉਣ ਵਿਚ ਗਲਤੀ",
        "createaccounterror": "ਖਾਤਾ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: $1",
-       "nocookiesnew": "ਯà©\82à¨\9c਼ਰ à¨\85à¨\95ਾà¨\8aà¨\82à¨\9f à¨¬à¨£à¨¾à¨\87à¨\86 à¨\97ਿà¨\86 à¨¹à©\88, à¨ªà¨° à¨¤à©\81ਸà©\80à¨\82 à¨²à¨¾à¨\97à¨\87ਨ à¨¨à¨¹à©\80à¨\82 à¨\95à©\80ਤਾ à¨¹à©\88।{{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them, then log in with your new username and password.",
+       "nocookiesnew": "ਵਰਤà©\8bà¨\82Kà¨\86ਰ à¨\96ਾਤਾ à¨¬à¨£à¨¾à¨\87à¨\86 à¨\97ਿà¨\86 à¨¸à©\80 à¨ªà¨° à¨¤à©\81ਸà©\80à¨\82 à¨¦à¨¾à¨\96਼ਲ à¨¨à¨¹à©\80à¨\82 à¨¹à©\8bà¨\8f।{{SITENAME}} à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰਾà¨\82 à¨¨à©\82à©° à¨¦à¨¾à¨\96਼ਲ à¨\95ਰਨ à¨µà¨¾à¨¸à¨¤à©\87 à¨\95à©\81ੱà¨\95à©\80à¨\86à¨\82 à¨µà¨°à¨¤à¨¦à©\80 à¨¹à©\88। à¨¤à©\81ਸà©\80à¨\82 à¨\95à©\81ੱà¨\95à©\80à¨\86à¨\82 à¨¬à©°à¨¦ à¨\95à©\80ਤà©\80à¨\86à¨\82 à¨¹à©\8bà¨\88à¨\86à¨\82 à¨¹à¨¨à¥¤ à¨®à¨¿à¨¹à¨°à¨¬à¨¾à¨¨à©\80 à¨\95ਰà¨\95à©\87 à¨\87ਹਨਾà¨\82 à¨¨à©\82à©° à¨\9aਲਾà¨\89, à¨«à©\87ਰ à¨\86ਪਣà©\87 à¨¨à¨µà©\87à¨\82 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ-ਨਾà¨\82 à¨ªà¨\9bਾਣ-ਸ਼ਬਦ à¨¨à¨¾à¨²à¨¼ à¨¦à¨¾à¨\96਼ਲ à¨¹à©\8bਵà©\8b।",
        "nocookieslogin": "{{SITENAME}} ਯੂਜ਼ਰਾਂ ਨੂੰ ਲਾਗਇਨ ਕਰਨ ਲਈ ਕੂਕੀਜ਼ ਵਰਤਦੀ ਹੈ। ਤੁਹਾਡੇ ਕੂਕੀਜ਼ ਆਯੋਗ ਕੀਤੇ ਹੋਏ ਹਨ। ਉਨ੍ਹਾਂ ਨੂੰ ਯੋਗ ਕਰਕੇ ਮੁੜ ਟਰਾਈ ਕਰੋ।",
        "nocookiesfornew": "ਵਰਤੋਂਕਾਰ ਖਾਤਾ ਨਹੀਂ ਬਣਾਇਆ ਗਿਆ ਕਿਉਂਕਿ ਅਸੀਂ ਇਹਦੇ ਸਰੋਤ ਨੂੰ ਤਸਦੀਕ ਨਹੀਂ ਕਰ ਸਕੇ।\nਯਕੀਨੀ ਬਣਾਓ ਕਿ ਤੁਹਾਡੀਆਂ ਕੁਕੀਆਂ ਕੰਮ ਕਰ ਰਹੀਆਂ ਹਨ, ਸਫ਼ਾ ਫੇਰ ਲੋਡ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।",
        "noname": "ਤੁਸੀਂ ਇੱਕ ਸਹੀ ਯੂਜ਼ਰ-ਨਾਂ ਨਹੀਂ ਦਿੱਤਾ।",
        "wrongpassword": "ਗ਼ਲਤ ਪਾਸਵਰਡ ਦਿੱਤਾ ਹੈ। ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।",
        "wrongpasswordempty": "ਖ਼ਾਲੀ ਪਾਸਵਰਡ ਦਿੱਤਾ ਹੈ। ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।",
        "passwordtooshort": "ਪਾਸਵਰਡ {{PLURAL:$1|1 ਅੱਖਰ|$1 ਅੱਖਰਾਂ}} ਦਾ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ।",
-       "password-name-match": "ਤà©\81ਹਾਡਾ à¨ªà¨¾à¨¸à¨µà¨°à¨¡ à¨¤à©\81ਹਾਡà©\87 à¨¯à©\82à¨\9c਼ਰ ਨਾਂ ਤੋਂ ਵੱਖਰਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।",
+       "password-name-match": "ਤà©\81ਹਾਡਾ à¨ªà¨\9bਾਣ-ਸ਼ਬਦ à¨¤à©\81ਹਾਡà©\87 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਨਾਂ ਤੋਂ ਵੱਖਰਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।",
        "password-login-forbidden": "ਇਹ ਯੂਜ਼ਰ-ਨਾਂ ਅਤੇ ਪਾਸਵਰਡ ਵਰਤਣ ਦੀ ਮਨਾਹੀ ਹੈ।",
        "mailmypassword": "ਨਵਾਂ ਪਾਸਵਰਡ ਈ-ਮੇਲ ਕਰੋ",
        "passwordremindertitle": "{{SITENAME}} ਲਈ ਪਾਸਵਰਡ ਯਾਦ ਰੱਖੋ",
        "createaccount-text": "ਕਿਸੇ ਨੇ \"$2\" ਮੈਂਬਰ-ਨਾਮ ਅਤੇ \"$3\" ਪਾਸਵਰਡ ਨਾਲ਼ {{SITENAME}} ($4) ਤੇ, ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ ਵਰਤਦੇ ਹੋਏ, ਖਾਤਾ ਬਣਾਇਆ ਹੈ।\nਤੁਹਾਨੂੰ ਹੁਣੇ ਲਾਗਇਨ ਕਰਕੇ ਆਪਣਾ ਪਾਸਵਰਡ ਬਦਲਣਾ ਚਾਹੀਦਾ ਹੈ।\n\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": "ਖਾਤਾ ਬਣਾਓ",
-       "pt-userlogout": "ਲਾà¨\97 à¨\86à¨\89à¨\9f",
+       "pt-userlogout": "ਬਾਹਰ à¨\86à¨\89",
        "php-mail-error-unknown": "PHP ਦੇ ਮੇਲ() ਕਰਜ ਵਿੱਚ ਅਣਜਾਣ ਦੋਸ਼",
        "user-mail-no-addy": "ਬਿਨਾਂ ਈ-ਮੇਲ ਪਤਾ ਦਿੱਤੇ ਈ-ਮੇਲ ਭੇਜਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ।",
        "user-mail-no-body": "ਖ਼ਾਲੀ ਜਾਂ ਬਹੁਤੀ ਛੋਟੀ ਸਮੱਗਰੀ ਨਾਲ਼ ਈਮੇਲ ਭੇਜਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਗਈ",
-       "changepassword": "ਪਾਸਵਰਡ ਬਦਲੋ",
+       "changepassword": "ਪà¨\9bਾਣ-ਸ਼ਬਦ ਬਦਲੋ",
        "resetpass_announce": "ਲਾਗਇਨ ਪੂਰਾ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ ਨਵਾਂ ਪਾਸਵਰਡ ਬਣਾਉਣਾ ਪਵੇਗਾ।",
-       "resetpass_header": "à¨\85à¨\95ਾà¨\8aà¨\82à¨\9f à¨ªà¨¾à¨¸à¨µà¨°à¨¡ ਬਦਲੋ",
-       "oldpassword": "ਪà©\81ਰਾਣਾ à¨ªà¨¾à¨¸à¨µà¨°à¨¡:",
+       "resetpass_header": "à¨\96ਾਤà©\87 à¨¦à¨¾ à¨ªà¨\9bਾਣ-ਸ਼ਬਦ ਬਦਲੋ",
+       "oldpassword": "ਪà©\81ਰਾਣਾ à¨ªà¨\9bਾਣ-ਸ਼ਬਦ:",
        "newpassword": "ਨਵਾਂ ਪਾਸਵਰਡ:",
        "retypenew": "ਨਵਾਂ ਪਾਸਵਰਡ ਮੁੜ-ਲਿਖੋ:",
        "resetpass_submit": "ਪਾਸਵਰਡ ਸੈੱਟ ਕਰੋ ਅਤੇ ਲਾਗਇਨ ਕਰੋ",
        "changepassword-success": "ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਠੀਕ ਤਰ੍ਹਾਂ ਬਦਲਿਆ ਜਾ ਚੁੱਕਾ ਹੈ!",
+       "changepassword-throttled": "ਤੁਸੀਂ ਦਾਖ਼ਲ ਹੋਣ ਦੀਆਂ ਬਹੁਤ ਸਾਰੀਆਂ ਤਾਜ਼ਾ ਕੋਸ਼ਿਸ਼ਾਂ ਕੀਤੀਆਂ ਹਨ।\nਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ $1 ਉਡੀਕ ਕਰੋ ਜੀ।",
        "resetpass_forbidden": "ਪਾਸਵਰਡ ਬਦਲਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ",
        "resetpass-no-info": "ਇਸ ਸਫ਼ੇ ਨੂੰ ਸਿੱਧੇ ਹੀ ਵੇਖਣ ਲਈ ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਕਰਨਾ ਪਵੇਗਾ।",
-       "resetpass-submit-loggedin": "ਪਾਸਵਰਡ ਬਦਲੋ",
+       "resetpass-submit-loggedin": "ਪà¨\9bਾਣ-ਸ਼ਬਦ ਬਦਲੋ",
        "resetpass-submit-cancel": "ਰੱਦ ਕਰੋ",
        "resetpass-wrong-oldpass": "ਗ਼ਲਤ ਆਰਜ਼ੀ ਜਾਂ ਚਾਲੂ ਪਾਸਵਰਡ।\nਸ਼ਾਇਦ ਤੁਸੀਂ ਕਾਮਯਾਬੀ ਨਾਲ਼ ਆਪਣਾ ਪਾਸਵਰਡ ਬਦਲ ਚੁੱਕੇ ਹੋ ਜਾਂ ਆਰਜ਼ੀ ਪਾਸਵਰਡ ਲਈ ਬੇਨਤੀ ਕੀਤੀ ਸੀ।",
+       "resetpass-recycled": "ਆਪਣਾ ਨਵਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਮੌਜੂਦਾ ਪਛਾਣ-ਸ਼ਬਦ ਤੋਂ ਵੱਖਰਾ ਬਣਾਉ ਜੀ।",
+       "resetpass-temp-emailed": "ਤੁਸੀਂ ਈਮੇਲ ਕੀਤੇ ਇੱਕ ਆਰਜ਼ੀ ਕੋਡ ਨਾਲ਼ ਦਾਖ਼ਲ ਹੋਏ।\nਦਾਖ਼ਲਾ ਕਾਰਵਾਈ ਮੁਕਾਉਣ ਵਾਸਤੇ ਤੁਹਾਨੂੰ ਇੱਥੇ ਇੱਕ ਨਵਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਬਣਾਉਣਾ ਪਵੇਗਾ:",
        "resetpass-temp-password": "ਆਰਜ਼ੀ ਪਾਸਵਰਡ:",
        "resetpass-abort-generic": "ਇੱਕ ਐਕਸਟੈਂਸ਼ਨ ਵੱਲੋਂ ਪਾਸਵਰਡ ਦੀ ਤਬਦੀਲੀ ਰੱਦ ਕੀਤੀ ਗਈ",
+       "resetpass-expired": "ਤੁਹਾਡੇ ਪਛਾਣ-ਸ਼ਬਦ ਦੀ ਮਿਆਦ ਮੁੱਕ ਗਈ ਹੈ। ਦਾਖ਼ਲ ਹੋਣ ਲਈ ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਨਵਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਬਣਾਉ।",
+       "resetpass-expired-soft": "ਤੁਹਾਡੇ ਪਛਾਣ-ਸ਼ਬਦ ਦੀ ਮਿਆਦ ਮੁੱਕ ਗਈ ਹੈ ਅਤੇ ਨਵਾਂ ਬਣਾਉਣਾ ਪਵੇਗਾ। ਕੋਈ ਨਵਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਚੁਣੋ ਜੀ ਜਾਂ ਬਾਅਦ 'ਚ ਬਣਾਉਣ ਵਾਸਤੇ \"{{int:resetpass-submit-cancel}}\" ਦੱਬੋ।",
+       "resetpass-validity-soft": "ਤੁਹਾਡਾ ਪਛਾਣ-ਸ਼ਬਦ ਸਹੀ ਨਹੀਂ ਹੈ: $1\n\nਮਿਹਰਬਾਨੀ ਕਰਕੇ ਕੋਈ ਨਵਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਚੁਣੋ ਜਾਂ ਬਾਅਦ 'ਚ ਬਣਾਉਣ ਵਾਸਤੇ \"{{int:resetpass-submit-cancel}}\" ਦੱਬੋ।",
        "passwordreset": "ਪਾਸਵਰਡ ਮੁੜ-ਸੈੱਟ ਕਰੋ",
        "passwordreset-text-one": "ਪਾਸਵਰਡ ਦੁਬਾਰਾ ਬਣਾਉਣ ਲਈ ਇਹ ਫ਼ਾਰਮ ਭਰੋ।",
        "passwordreset-text-many": "{{PLURAL:$1|ਈ-ਮੇਲ ਜ਼ਰੀਏ ਆਪਣਾ ਆਰਜ਼ੀ ਪਾਸਵਰਡ ਹਾਸਲ ਕਰਨ ਲਈ ਕੋਈ ਇੱਕ ਥਾਂ ਭਰੋ।}}",
        "passwordreset-legend": "ਪਾਸਵਰਡ ਮੁੜ-ਸੈੱਟ ਕਰੋ",
        "passwordreset-disabled": "ਇਸ ਵਿਕੀ ਤੇ ਪਾਸਵਰਡ ਰੀਸੈੱਟ ਬੰਦ ਕੀਤੇ ਗਏ ਹਨ।",
        "passwordreset-emaildisabled": "ਇਹ ਵਿਕਿ ਉੱਤੇ ਈਮੇਲ ਫੀਚਰ ਬੰਦ ਕੀਤਾ ਹੋਇਆ ਹੈ।",
-       "passwordreset-username": "ਯà©\82à¨\9c਼ਰ-ਨਾਂ:",
+       "passwordreset-username": "ਵਰਤà©\8bà¨\82à¨\95ਾਰ ਨਾਂ:",
        "passwordreset-domain": "ਡੋਮੇਨ:",
        "passwordreset-capture": "ਨਤੀਜੇ ਵਜੋਂ ਬਣਦੀ ਈਮੇਲ ਵੇਖੋ?",
        "passwordreset-capture-help": "ਜੇਕਰ ਤੁਸੀਂ ਇਹ ਬਕਸਾ ਸਹੀ ਕਰਦੇ ਹੋ ਤਾਂ ਇਹ ਈਮੇਲ (ਅਸਥਾਈ ਪਾਸਵਰਡ ਸਮੇਤ) ਤੁਹਾਨੂੰ ਵਿਖਾਈ ਜਾਵੇਗੀ ਅਤੇ ਵਰਤੋਂਕਾਰ ਨੂੰ ਵੀ ਭੇਜੀ ਜਾਵੇਗੀ।",
        "passwordreset-email": "ਈਮੇਲ ਐਡਰੈੱਸ:",
        "passwordreset-emailtitle": "{{SITENAME}} ਤੇ ਖਾਤੇ ਦੀ ਜਾਣਕਾਰੀ",
        "passwordreset-emailtext-ip": "ਕਿਸੇ ਨੇ (ਸ਼ਾਇਦ ਤੁਸੀਂ, IP ਪਤਾ $1 ਤੋਂ) {{SITENAME}}\n($4) ਲਈ ਖਾਤਾ ਤਫ਼ਸੀਲ ਯਾਦ-ਦਹਾਨੀ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ। ਇਹ {{PLURAL:\n$3|ਖਾਤਾ ਇਸ ਈ-ਮੇਲ ਪਤੇ ਨਾਲ਼ ਜੁੜਿਆ ਹੈ|ਖਾਤੇ ਇਸ ਈ-ਮੇਲ ਪਤੇ ਨਾਲ਼ ਜੁੜੇ ਹਨ}}:\n$2\n\nਇਹ ਆਰਜ਼ੀ ਪਾਸਵਰਡ\n{{PLURAL:$5|ਇੱਕ ਦਿਨ|$5 ਦਿਨਾਂ}} ਵਿਚ ਖ਼ਤਮ ਹੋ {{PLURAL:$3|ਜਾਵੇਗਾ|ਜਾਣਗੇ}}।\nਤੁਹਾਨੂੰ ਹੁਣੇ ਲਾਗਇਨ ਕਰਕੇ ਨਵਾਂ ਪਾਸਵਰਡ ਬਣਾਉਣਾ ਚਾਹੀਦਾ ਹੈ। ਜੇ ਕਿਸੇ ਹੋਰ ਨੇ ਇਹ ਬੇਨਤੀ ਕੀਤੀ ਸੀ ਜਾਂ ਜੇ ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਾਸਵਰਡ ਯਾਦ ਹੈ ਅਤੇ ਤੁਸੀਂ ਇਸਨੂੰ ਬਦਲਣਾ ਨਹੀਂ ਚਾਹੁੰਦੇ ਤਾਂ ਤੁਸੀਂ ਇਸ ਸੁਨੇਹੇ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰ ਕੇ ਆਪਣਾ ਪੁਰਾਣਾ ਪਾਸਵਰਡ ਵਰਤਣਾ ਜਾਰੀ ਰੱਖ ਸਕਦੇ ਹੋ।",
+       "passwordreset-emailtext-user": "{{SITENAME}} 'ਤੇ User $1 ਨੇ ਤੁਹਾਡੇ {{SITENAME}} ($4) ਉਤਲੇ ਪਛਾਣ-ਸ਼ਬਦ ਨੂੰ ਮੁੜ-ਬਣਾਉਣ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ। ਇਸ ਈਮੇਲ ਪਤੇ ਨਾਲ਼ ਹੇਠ ਲਿਖੇ {{PLURAL:$3|ਖਾਤੇ|ਖਾਤਿਆਂ}} ਦਾ ਵਾਸਤਾ ਹੈ:\n\n$2\n\n{{PLURAL:$3|ਇਸ ਆਰਜ਼ੀ ਪਛਾਣ-ਸ਼ਬਦ|ਇਹਨਾਂ ਆਰਜ਼ੀ ਪਛਾਣ-ਸ਼ਬਦਾਂ}} ਦੀ ਮਿਆਦ {{PLURAL:$5|ਇੱਕ ਦਿਨ|$5 ਦਿਨਾਂ}} 'ਚ ਮੁੱਕ ਜਾਵੇਗੀ।\nਤੁਹਾਨੂੰ ਹੁਣੇ ਦਾਖ਼ਲ ਹੋ ਕੇ ਕੋਈ ਨਵਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਬਣਾ ਲੈਣਾ ਚਾਹੀਦਾ ਹੈ। ਜੇਕਰ ਕਿਸੇ ਹੋਰ ਨੇ ਇਹ ਬੇਨਤੀ ਕੀਤੀ ਹੈ ਜਾਂ ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਹਿਲਾ ਪਛਾਣ-ਸ਼ਬਦ ਯਾਦ ਆ ਗਿਆ ਹੈ ਅਤੇ ਹੁਣ ਤੁਸੀਂ ਉਹਨੂੰ ਬਦਲ਼ਨਾ ਨਹੀਂ ਲੋਚਦੇ ਤਾਂ ਤੁਸੀਂ ਇਸ ਸੁਨੇਹੇ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰ ਕੇ ਆਪਣਾ ਪੁਰਾਣਾ ਪਛਾਣ-ਸ਼ਬਦ ਵਰਤਦੇ ਰਹਿ ਸਕਦੇ ਹੋ।",
        "passwordreset-emailelement": "ਯੂਜ਼ਰ-ਨਾਂ: $1\nਆਰਜ਼ੀ ਪਾਸਵਰਡ: $2",
        "passwordreset-emailsent": "ਇੱਕ ਪਾਸਵਰਡ ਮੁੜ-ਸੈੱਟ ਈ-ਮੇਲ ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।",
        "passwordreset-emailsent-capture": "ਇੱਕ ਯਾਦ-ਦਹਾਨੀ ਈ-ਮੇਲ, ਜਿਹੜੀ ਕਿ ਹੇਠਾਂ ਦਿੱਸ ਰਹੀ ਹੈ, ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।",
+       "passwordreset-emailerror-capture": "ਪਛਾਣ-ਸ਼ਬਦ ਮੁੜ ਬਣਾਉਣ ਵਾਸਤੇ ਈਮੇਲ ਤਿਆਰ ਹੋ ਗਈ ਸੀ, ਜੋ ਹੇਠਾਂ ਵਿਖਾਈ ਗਈ ਹੈ, ਪਰ ਇਹਨੂੰ {{GENDER:$2|ਵਰਤੋਂਕਾਰ}} ਵੱਲ ਨਹੀਂ ਘੱਲਿਆ ਜਾ ਸਕਿਆ: $1",
        "changeemail": "ਈ-ਮੇਲ ਸਿਰਨਾਵਾਂ ਬਦਲੋ",
-       "changeemail-header": "ਖਾਤੇ ਵਾਲਾ ਈ-ਮੇਲ ਸਿਰਨਾਵਾਂ ਬਦਲੋ",
        "changeemail-text": "ਆਪਣਾ ਈ-ਮੇਲ ਪਤਾ ਬਦਲਣ ਲਈ ਇਹ ਫ਼ਾਰਮ ਮੁਕੰਮਲ ਕਰੋ। ਇਸ ਤਬਦੀਲੀ ਨੂੰ ਤਸਦੀਕ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖ਼ਲ ਕਰਨਾ ਪਵੇਗਾ।",
        "changeemail-no-info": "ਇਸ ਸਫ਼ੇ ਨੂੰ ਸਿੱਧੇ ਹੀ ਵੇਖਣ ਲਈ ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਕਰਨਾ ਪਵੇਗਾ।",
        "changeemail-oldemail": "ਮੌਜੂਦਾ ਈਮੇਲ ਸਿਰਨਾਵਾਂ:",
        "changeemail-none": "(ਕੋਈ ਨਹੀਂ)",
        "changeemail-password": "ਤੁਹਾਡਾ {{SITENAME}} ਪਾਸਵਰਡ:",
        "changeemail-submit": "ਈ-ਮੇਲ ਬਦਲੋ",
-       "changeemail-cancel": "ਰੱਦ ਕਰੋ",
+       "changeemail-throttled": "ਤੁਸੀਂ ਦਾਖ਼ਲ ਹੋਣ ਦੀਆਂ ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ ਕੀਤੀਆਂ ਹਨ।\nਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ $1 ਉਡੀਕ ਕਰੋ ਜੀ।",
        "resettokens": "ਟੋਕਨ ਮੁੜ-ਸੈੱਟ ਕਰੋ",
+       "resettokens-text": "ਤੁਸੀਂ ਆਪਣੀਆਂ ਨਿਸ਼ਾਨੀਆਂ, ਜੋ ਤੁਹਾਡੇ ਖਾਤੇ ਨਾਲ਼ ਜੁੜੇ ਖ਼ਾਸ ਨਿੱਜੀ ਅੰਕੜਿਆਂ ਤੱਕ ਪੁੱਜਣ ਵਾਸਤੇ ਇਜਾਜ਼ਤ ਦਿੰਦੀਆਂ ਹਨ, ਨੂੰ ਇੱਥੇ ਮੁੜ-ਬਣਾ ਸਕਦੇ ਹੋ।\n\nਤੁਹਾਨੂੰ ਇਹ ਤਾਂ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ ਜੇਕਰ ਤੁਸੀਂ ਇਹਨਾਂ ਨੂੰ ਰੱਬ-ਸਬੱਬੀ ਕਿਸੇ ਨਾਲ਼ ਸਾਂਝਾ ਕਰ ਦਿੱਤਾ ਜਾਂ ਤੁਹਾਡਾ ਖਾਤਾ ਖ਼ਤਰੇ ਵਿੱਚ ਆ ਗਿਆ ਹੈ।",
+       "resettokens-no-tokens": "ਨਵੀਆਂ ਬਣਾਉਣ ਵਾਸਤੇ ਕੋਈ ਨਿਸ਼ਾਨੀਆਂ ਨਹੀਂ ਹਨ।",
+       "resettokens-legend": "ਨਿਸ਼ਾਨੀਆਂ ਮੁੜ ਬਣਾਉ",
        "resettokens-tokens": "ਟੋਕਨ:",
        "resettokens-token-label": "$1 (ਚਾਲੂ ਮੁੱਲ: $2)",
+       "resettokens-done": "ਨਿਸ਼ਾਨੀਆਂ ਮੁੜ ਬਣਾਈਆਂ ਗਈਆਂ।",
        "resettokens-resetbutton": "ਚੁਣੇ ਹੋਏ ਟੋਕਨ ਮੁੜ ਸੈੱਟ ਕਰੋ",
        "bold_sample": "ਗੂੜੀ ਲਿਖਤ",
        "bold_tip": "ਗੂੜੇ ਅੱਖਰ",
        "subject": "ਵਿਸ਼ਾ/ਹੈੱਡਲਾਈਨ:",
        "minoredit": "ਇਹ ਇੱਕ ਛੋਟੀ ਸੋਧ ਹੈ",
        "watchthis": "ਇਸ ਸਫ਼ੇ ’ਤੇ ਨਜ਼ਰ ਰੱਖੋ",
-       "savearticle": "ਸਫ਼ਾ à¨¸à©°à¨­à¨¾à¨²ੋ",
+       "savearticle": "ਸਫ਼ਾ à¨¸à¨¾à¨\82ਭੋ",
        "preview": "ਝਲਕ",
        "showpreview": "ਝਲਕ ਵਿਖਾਓ",
-       "showdiff": "ਤਬਦà©\80ਲà©\80à¨\86à¨\82 à¨µà¨\96ਾà¨\93",
-       "anoneditwarning": "'''à¨\96਼ਬਰਦਾਰ:''' à¨¤à©\81ਸà©\80à¨\82 à¨²à¨¾à¨\97à¨\87ਨ à¨¨à¨¹à©\80à¨\82 à¨\95à©\80ਤਾ à¨¹à©\8bà¨\87à¨\86। à¨¤à©\81ਹਾਡਾ IP à¨ªà¨¤à¨¾ à¨\87ਸ à¨¸à¨«à¨¼à©\87 à¨¦à©\87 à¨\85ਤà©\80ਤ à¨µà¨¿à©±à¨\9a à¨°à¨¿à¨\95ਾਰਡ à¨\95à©\80ਤਾ ਜਾਵੇਗਾ।",
+       "showdiff": "ਤਬਦà©\80ਲà©\80à¨\86à¨\82 à¨µà¨¿à¨\96ਾà¨\89",
+       "anoneditwarning": "'''à¨\96਼ਬਰਦਾਰ:''' à¨¤à©\81ਸà©\80à¨\82 à¨¦à¨¾à¨\96਼ਲ à¨¨à¨¹à©\80à¨\82 à¨¹à©\8b। à¨\95à©\8bà¨\88 à¨µà©\80 à¨¸à©\8bਧ à¨\95ਰਨ 'ਤà©\87 à¨¤à©\81ਹਾਡਾ à¨\86à¨\88.ਪà©\80. à¨ªà¨¤à¨¾ à¨²à©\8bà¨\95ਾà¨\82 à¨¨à©\82à©° à¨µà¨¿à¨\96ਾà¨\88 à¨¦à©\87ਵà©\87à¨\97ਾ। à¨\9cà©\87à¨\95ਰ à¨¤à©\81ਸà©\80à¨\82 <strong>[$1 à¨¦à¨¾à¨\96਼ਲ à¨¹à©\81ੰਦà©\87 à¨¹à©\8b]</strong> à¨\9cਾà¨\82 <strong>[$2 à¨\96ਾਤਾ à¨¬à¨£à¨¾à¨\89à¨\82ਦà©\87 à¨¹à©\8b]</strong> à¨¤à¨¾à¨\82 à¨¤à©\81ਹਾਡà©\80à¨\86à¨\82 à¨¸à©\8bਧਾà¨\82 à¨¦à¨¾ à¨¸à¨¿à¨¹à¨°à¨¾, à¨¹à©\8bਰ à¨«à¨¼à¨¾à¨\87ਦਿà¨\86à¨\82 à¨¸à¨®à©\87ਤ, à¨¤à©\81ਹਾਡà©\87 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ-ਨਾà¨\82 à¨¸à¨¿à¨° à¨¦à¨¿à©±ਤਾ ਜਾਵੇਗਾ।",
        "anonpreviewwarning": "''ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ ਹੋਇਆ। ਤਬਦੀਲੀ ਸਾਂਭਣ ਨਾਲ਼ ਤੁਹਾਡਾ IP ਪਤਾ ਸਫ਼ੇ ਦੇ ਸੋਧ ਅਤੀਤ ਵਿਚ ਰਿਕਾਰਡ ਹੋ ਜਾਵੇਗਾ।''",
        "missingsummary": "'''ਯਾਦ-ਦਹਾਨੀ:''' ਤੁਸੀਂ ਸੋਧ ਸਾਰ ਮੁਹੱਈਆ ਨਹੀਂ ਕਰਵਾਇਆ। ਜੇ ਤੁਸੀਂ \"{{int:savearticle}}\" ਤੇ ਦੁਬਾਰਾ ਕਲਿੱਕ ਕੀਤਾ ਤਾਂ ਤੁਹਾਡਾ ਸਫ਼ਾ ਇਸਦੇ ਬਿਨਾਂ ਹੀ ਸਾਂਭਿਆ ਜਾਵੇਗਾ।",
        "missingcommenttext": "ਹੇਠਾਂ ਇੱਕ ਟਿੱਪਣੀ ਦਿਓ।",
        "semiprotectedpagewarning": "'''ਨੋਟ:''' ਇਹ ਸਫ਼ਾ ਸੁਰੱਖਿਅਤ ਹੈ ਤਾਂ ਕਿ ਸਿਰਫ਼ ਰਜਿਸਟਰ ਹੋਏ ਮੈਂਬਰ ਹੀ ਇਸ ਨੂੰ ਸੋਧ ਸਕਣ।\nਚਿੱਠੇ ਵਿਚਲਾ ਨਵਾਂ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:",
        "titleprotectedwarning": "'''ਖ਼ਬਰਦਾਰ: ਇਹ ਸਫ਼ਾ ਸੁਰੱਖਿਅਤ ਹੈ ਸੋ ਇਸਨੂੰ ਬਣਾਉਣ ਲਈ [[Special:ListGroupRights|ਖ਼ਾਸ ਹੱਕਾਂ]] ਦੀ ਲੋੜ ਹੈ।'''\nਚਿੱਠੇ ਦਾ ਨਵਾਂ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:",
        "templatesused": "ਇਸ ਪੰਨੇ ’ਤੇ {{PLURAL:$1|ਵਰਤਿਆ ਸਾਂਚਾ|ਵਰਤੇ ਸਾਂਚੇ}}:",
-       "templatesusedpreview": "{{PLURAL:$1|ਟੈਪਲੇਟ|ਟੈਪਲੇਟ}} ਇਹ ਝਲਕ 'ਚ ਵਰਤੇ ਜਾਂਦੇ ਹਨ:",
+       "templatesusedpreview": "ਏਸ ਝਾਤ 'ਚ {{PLURAL:$1|ਵਰਤਿਆ ਗਿਆ ਫਰਮਾ|ਵਰਤੇ ਗਏ ਫਰਮੇ}}:",
        "templatesusedsection": "ਇਹ ਭਾਗ ਵਿੱਚ {{PLURAL:$1|ਸਾਂਚਾ|ਸਾਂਚੇ}} ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ:",
        "template-protected": "(ਸੁਰੱਖਿਅਤ)",
        "template-semiprotected": "(ਨੀਮ-ਸੁਰੱਖਿਅਤ)",
        "postedit-confirmation-restored": "ਸਫ਼ੇ ਨੂੰ ਮੁੜ-ਸਟੋਰ ਕੀਤਾ ਗਿਆ।",
        "postedit-confirmation-saved": "ਤੁਹਾਡੀ ਸੋਧ ਸਾਂਭੀ ਗਈ ਹੈ।",
        "edit-already-exists": "ਨਵਾਂ ਸਫ਼ਾ ਨਹੀਂ ਬਣਾਇਆ ਜਾ ਸਕਿਆ।\nਇਹ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ।",
-       "defaultmessagetext": "ਮà©\82ਲ à¨¸à©°à¨¦à©\87ਸ਼ ਲਿਖਤ",
+       "defaultmessagetext": "ਮà©\82ਲ à¨¸à©\81ਨà©\87ਹਾ ਲਿਖਤ",
        "invalid-content-data": "ਗ਼ਲਤ ਸਮੱਗਰੀ",
        "content-not-allowed-here": "\"$1\" ਸਮੱਗਰੀ ਨੂੰ [[$2]] ਉੱਤੇ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ",
        "editwarning-warning": "ਇਹ ਸਫ਼ਾ ਛੱਡਣ ਕਰਕੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਕੀਤੀਆਂ ਸੋਧਾਂ ਗੁੰਮ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਜੇਕਰ ਤੁਸੀਂ ਦਾਖ਼ਲਾ ਲਿਆ ਹੋਇਆ ਹੈ ਤਾਂ ਤੁਸੀਂ ਇਸ ਚਿਤਾਵਨੀ ਨੂੰ ਆਪਣੀਆਂ ਪਸੰਦਾਂ ਦੇ \"ਸੰਪਾਦਨ\" ਭਾਗ ਵਿਚ ਜਾ ਕੇ ਬੰਦ ਕਰ ਸਕਦੇ ਹੋ।",
        "pagehist": "ਸਫ਼ਾ ਅਤੀਤ",
        "deletedhist": "ਹਟਾਇਆ ਗਿਆ ਅਤੀਤ",
        "revdelete-hide-current": "ਤਾਰੀਖ $2, $1 ਦੀ ਚੀਜ਼ ਲੁਕਾਉਣ ਵਿਚ ਗ਼ਲਤੀ: ਇਹ ਮੌਜੂਦਾ ਦੁਹਰਾਈ ਹੈ।\nਇਹ ਲੁਕਾਈ ਨਹੀਂ ਜਾ ਸਕਦੀ।",
+       "revdelete-modify-missing": "$1 ਸ਼ਨਾਖ਼ਤ ਵਾਲ਼ੀ ਚੀਜ਼ ਬਦਲਦਿਆਂ ਦੋਸ਼ ਆਇਆ: ਇਹ ਤੱਥ-ਅਧਾਰ 'ਚ ਹੈ ਹੀ ਨਹੀਂ!",
        "revdelete-otherreason": "ਹੋਰ/ਵਾਧੂ ਕਾਰਨ:",
        "revdelete-reasonotherlist": "ਹੋਰ ਕਾਰਨ",
        "revdelete-edit-reasonlist": "ਮਿਟਾਏ ਜਾਣ ਦੇ ਕਾਰਨ ਸੋਧੋ",
        "mergehistory-empty": "ਕੋਈ ਰੀਵਿਜ਼ਨ ਰਲ਼ਾਈ ਨਹੀ ਜਾ ਸਕਦੀ।",
        "mergehistory-success": "[[:$1]] {{PLURAL:|ਦੀ|ਦੀਆਂ}} $3 {{PLURAL:$3|ਰੀਵਿਜ਼ਨ|ਰੀਵਿਜ਼ਨਾਂ}} ਕਾਮਯਾਬੀ ਨਾਲ਼ [[:$2]] ਵਿਚ {{PLURAL:$3|ਰਲ਼ਾਈ|ਰਲ਼ਾਈਆਂ}}।",
        "mergehistory-no-source": "ਸਰੋਤ ਸਫ਼ਾ $1 ਮੌਜੂਦ ਨਹੀਂ ਹੈ।",
+       "mergehistory-no-destination": "ਨੀਯਤ ਸਫ਼ਾ $1 ਮੌਜੂਦ ਨਹੀਂ ਹੈ।",
        "mergehistory-invalid-source": "ਸਰੋਤ ਸਫ਼ਾ ਇੱਕ ਸਹੀ ਸਿਰਲੇਖ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।",
        "mergehistory-invalid-destination": "ਮੰਜ਼ਿਲ ਸਫ਼ਾ ਇੱਕ ਸਹੀ ਸਿਰਲੇਖ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।",
        "mergehistory-autocomment": "[[:$1]] ਨੂੰ [[:$2]] ਵਿੱਚ ਰਲ਼ਾਇਆ",
        "mergehistory-same-destination": "ਸਰੋਤ ਸਫ਼ਾ ਅਤੇ ਮੰਜ਼ਿਲ ਸਫ਼ਾ ਇੱਕੋ ਜਿਹੇ ਨਹੀਂ ਹੋ ਸਕਦੇ",
        "mergehistory-reason": "ਕਾਰਨ:",
        "mergelog": "ਰਲ਼ਾਉਣ ਦਾ ਚਿੱਠਾ",
-       "pagemerge-logentry": "[[$1]] ਨੂੰ [[$2]] ਵਿੱਚ ਰਲ਼ਾਇਆ ($3 ਤੱਕ ਦੀਆ ਰੀਵਿਜ਼ਨਾਂ)",
        "revertmerge": "ਅਨ-ਮਰਜ",
        "mergelogpagetext": "ਹੇਠਾਂ ਇੱਕ ਸਫ਼ੇ ਦੇ ਅਤੀਤ ਨੂੰ ਦੂਜੇ ਦੇ ਅਤੀਤ ਵਿਚ ਰਲ਼ਾਉਣ ਦੀ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਲਿਸਟ ਹੈ।",
        "history-title": "\"$1\" ਦੇ ਰੀਵਿਜਨ ਦਾ ਅਤੀਤ",
        "difference-multipage": "(ਦੋ ਸਫ਼ਿਆਂ ਵਿਚਕਾਰ ਫ਼ਰਕ)",
        "lineno": "ਲਾਈਨ $1:",
        "compareselectedversions": "ਚੁਣੇ ਵਰਜਨਾਂ ਦੀ ਤੁਲਨਾ",
-       "showhideselectedversions": "à¨\9aà©\81ਣà©\87 à¨°à©\80ਵਿà¨\9c਼ਨ à¨µà¨\96ਾà¨\93/ਲà©\81à¨\95ਾà¨\93",
+       "showhideselectedversions": "à¨\9aà©\81ਣà©\80à¨\86à¨\82 à¨¸à©\81ਧਾà¨\88à¨\86à¨\82 à¨¦à©\80 à¨¦à¨¿à¨¸à¨£à¨¯à©\8bà¨\97ਤਾ à¨¬à¨¦à¨²à©\8b",
        "editundo": "ਰੱਦ ਕਰੋ",
        "diff-empty": "(ਕੋਈ ਫ਼ਰਕ ਨਹੀਂ)",
        "searchresults": "ਖੋਜ ਨਤੀਜੇ",
        "search-result-category-size": "{{PLURAL:$1|1 ਮੈਂਬਰ|$1 ਮੈਂਬਰ}} ({{PLURAL:$2|1 ਉਪਸ਼੍ਰੇਣੀ|$2 ਉਪਸ਼੍ਰੇਣੀਆਂ}}, {{PLURAL:$3|1 ਫ਼ਾਈਲ|$3 ਫ਼ਾਈਲਾਂ}})",
        "search-redirect": "($1 ਰੀਡਿਰੈਕਟ)",
        "search-section": "(ਹਿੱਸਾ $1)",
+       "search-file-match": "(ਫ਼ਾਈਲ ਦੀ ਸਮੱਗਰੀ ਨਾਲ਼ ਰਲ਼ਦਾ-ਮਿਲ਼ਦਾ)",
        "search-suggest": "ਕੀ ਤੁਹਾਡਾ ਮਤਲਬ ਸੀ: $1",
        "search-interwiki-caption": "ਸਾਥੀ ਪ੍ਰੋਜੈਕਟ",
-       "search-interwiki-default": "$1 ਨਤੀਜੇ:",
+       "search-interwiki-default": "$1 à¨¤à©\8bà¨\82 à¨¨à¨¤à©\80à¨\9cà©\87:",
        "search-interwiki-more": "(ਹੋਰ)",
        "search-relatedarticle": "ਸਬੰਧਤ",
        "searchrelated": "ਸਬੰਧਤ",
        "searchall": "ਸਭ",
        "showingresults": "ਹੇਠਾਂ #'''$2''' ਨਾਲ਼ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੇ {{PLURAL:\n$1|'''1''' ਨਤੀਜਾ|'''$1''' ਤੱਕ ਨਤੀਜੇ}} ਵਖਾਓ।",
-       "showingresultsheader": "'''$4''' ਵਾਸਤੇ {{PLURAL:$5|'''$3''' ਵਿੱਚੋਂ '''$1''' ਨਤੀਜੇ|'''$3''' ਵਿੱਚੋਂ '''$1 - $2''' ਨਤੀਜੇ}}",
        "search-nonefound": "ਤੁਹਾਡੀ ਖੋਜ ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਕੋਈ ਨਤੀਜੇ ਨਹੀਂ ਮਿਲੇ।",
        "powersearch-legend": "ਤਕਨੀਕੀ ਖੋਜ",
        "powersearch-ns": "ਨੇਮ-ਸਪੇਸ ਵਿੱਚ ਖੋਜ:",
        "powersearch-togglelabel": "ਜਾਂਚੋ:",
        "powersearch-toggleall": "ਸਭ",
        "powersearch-togglenone": "ਕੋਈ ਨਹੀਂ",
+       "powersearch-remember": "ਇਸ ਚੋਣ ਨੂੰ ਅੱਗੋਂ ਦੀਆਂ ਭਾਲ਼ਾਂ ਵਾਸਤੇ ਯਾਦ ਰੱਖੋ",
        "search-external": "ਬਾਹਰੀ ਖੋਜ",
        "search-error": "ਖੋਜ ਕਰਦੇ ਵਕਤ ਇੱਕ ਦੋਸ਼ ਮਿਲਿਆ:$1",
-       "preferences": "ਪਸੰਦਾਂ",
-       "mypreferences": "ਪਸੰਦਾਂ",
+       "preferences": "ਤਰà¨\9cà©\80ਹਾਂ",
+       "mypreferences": "ਤਰà¨\9cà©\80ਹਾਂ",
        "prefs-edits": "ਸੋਧਾਂ ਦੀ ਗਿਣਤੀ:",
+       "prefsnologintext2": "ਆਪਣੀਆਂ ਤਰਜੀਹਾਂ ਬਦਲਣ ਵਾਸਤੇ ਦਾਖ਼ਲ ਹੋਵੋ।",
        "prefs-skin": "ਸਕਿਨ",
        "skin-preview": "ਝਲਕ",
        "datedefault": "ਕੋਈ ਪਸੰਦ ਨਹੀਂ",
        "prefs-labs": "ਲੈਬ ਫੀਚਰ",
        "prefs-user-pages": "ਵਰਤੋਂਕਾਰ ਸਫ਼ੇ",
-       "prefs-personal": "ਯà©\82à¨\9c਼ਰ à¨ªà¨°à©\8bਫਾà¨\87ਲ",
-       "prefs-rc": "ਤਾà¨\9c਼ਾ à¨¬à¨¦à¨²à¨¾à¨\85",
+       "prefs-personal": "ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨ªà©\8dਰà©\8bਫ਼ਾà¨\88ਲ",
+       "prefs-rc": "ਹਾਲà©\80à¨\86 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82",
        "prefs-watchlist": "ਨਿਗਰਾਨ-ਸੂਚੀ",
        "prefs-watchlist-days": "ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਦਿਖਾਉਣ ਲਈ ਦਿਨ:",
        "prefs-watchlist-days-max": "ਵੱਧ ਤੋਂ ਵੱਧ $1 {{PLURAL:$1|ਦਿਨ|ਦਿਨ}}",
        "prefs-watchlist-edits-max": "ਵੱਧ ਤੋਂ ਵੱਧ ਨੰਬਰ: ੧੦੦੦",
        "prefs-watchlist-token": "ਨਿਗਰਾਨੀ-ਲਿਸਟ ਟੋਕਨ:",
        "prefs-misc": "ਫੁਟਕਲ",
-       "prefs-resetpass": "ਪਾਸਵਰਡ ਬਦਲੋ",
+       "prefs-resetpass": "ਪà¨\9bਾਣ-ਸ਼ਬਦ ਬਦਲੋ",
        "prefs-changeemail": "ਈ-ਮੇਲ ਪਤਾ ਬਦਲੋ",
        "prefs-setemail": "ਈ-ਮੇਲ ਪਤਾ ਸੈੱਟ ਕਰੋ",
        "prefs-email": "ਈਮੇਲ ਚੋਣਾਂ",
        "prefs-rendering": "ਦਿੱਖ",
        "saveprefs": "ਸੰਭਾਲੋ",
-       "restoreprefs": "ਸਭ à¨®à©\82ਲ à¨¸à©\88à¨\9fਿੰà¨\97ਾà¨\82 à¨®à©\8bà©\9c à¨²à¨¿à¨\86à¨\93",
+       "restoreprefs": "ਸਾਰà©\80à¨\86à¨\82 à¨®à©\82ਲ à¨¸à©\88à¨\9fਿੰà¨\97ਾà¨\82 à¨¬à¨¹à¨¾à¨² à¨\95ਰà©\8b (ਸਾਰà©\87 à¨¹à¨¿à©±à¨¸à¨¿à¨\86à¨\82 à¨µà¨¿à©±à¨\9a)",
        "prefs-editing": "ਸੋਧ ਜਾਰੀ",
        "rows": "ਕਤਾਰਾਂ:",
        "columns": "ਕਾਲਮ:",
        "recentchangesdays-max": "ਵੱਧ ਤੋਂ ਵੱਧ $1 {{PLURAL:$1|ਦਿਨ|ਦਿਨ}}",
        "recentchangescount": "ਮੂਲ ਤੌਰ 'ਤੇ ਵਿਖਾਈਆਂ ਸੋਧਾਂ ਦੀ ਗਿਣਤੀ:",
        "prefs-help-recentchangescount": "ਇਸ ਵਿਚ ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ, ਸਫ਼ਿਆਂ ਦੇ ਅਤੀਤ ਅਤੇ ਚਿੱਠੇ ਸ਼ਾਮਲ ਹਨ।",
-       "savedprefs": "ਤà©\81ਹਾਡà©\80à¨\86à¨\82 à¨ªà¨¸à©°à¨¦ਾਂ ਸਾਂਭੀਆਂ ਗਈਆਂ ਹੈ।",
+       "savedprefs": "ਤà©\81ਹਾਡà©\80à¨\86à¨\82 à¨¤à¨°à¨\9cà©\80ਹਾਂ ਸਾਂਭੀਆਂ ਗਈਆਂ ਹੈ।",
        "timezonelegend": "ਸਮਾਂ ਜੋਨ:",
        "localtime": "ਸਥਾਨਕ ਸਮਾਂ:",
        "timezoneuseserverdefault": "ਵਿਕੀ ਮੂਲ ($1) ਵਰਤੋ",
        "prefs-common-css-js": "ਸਾਰੀਆਂ ਸਕਿਨਾਂ ਲਈ ਸਾਂਝਾ CSS/ਜਾਵਾਸਕਰਿਪਟ:",
        "prefs-emailconfirm-label": "ਈ-ਮੇਲ ਪੁਸ਼ਟੀ:",
        "youremail": "ਈ-ਮੇਲ:",
-       "username": "{{GENDER:$1|ਯà©\82à¨\9c਼ਰਨਾਂ}}:",
-       "prefs-memberingroups": "{{PLURAL:$1|à¨\97ਰà©\81ੱਪ|à¨\97ਰà©\81ੱਪਾà¨\82}} à¨¦à¨¾ à¨®à©\88à¨\82ਬਰ:",
+       "username": "{{GENDER:$1|ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨¦à¨¾ ਨਾਂ}}:",
+       "prefs-memberingroups": "{{PLURAL:$1|ਢਾਣà©\80|ਢਾਣà©\80à¨\86à¨\82}} à¨¦à¨¾ {{GENDER:$2|ਮà©\88à¨\82ਬਰ}}:",
        "prefs-registration": "ਰਜਿਸਟਰੇਸ਼ਨ ਸਮਾਂ:",
        "yourrealname": "ਅਸਲੀ ਨਾਂ:",
        "yourlanguage": "ਭਾਸ਼ਾ:",
        "prefs-help-email-others": "ਤੁਸੀਂ ਇਹ ਵੀ ਚੁਣ ਸਕਦੇ ਹੋ ਕਿ ਤੁਹਾਡੇ ਵਰਤੋਂਕਾਰ ਜਾਂ ਚਰਚਾ ਪੰਨੇ ਤੋਂ ਹੋਰ ਵਰਤੋਂਕਾਰ ਤੁਹਾਨੂੰ ਈ-ਮੇਲ ਭੇਜ ਸਕਣ?\nਜਦੋਂ ਹੋਰ ਵਰਤੋਂਕਾਰ ਤੁਹਾਨੂੰ ਈ-ਮੇਲ ਭੇਜਦੇ ਹਨ ਤਾਂ ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ ਜ਼ਾਹਰ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ।",
        "prefs-help-email-required": "ਈ-ਮੇਲ ਪਤਾ ਚਾਹੀਦਾ ਹੈ।",
        "prefs-info": "ਮੁਢਲੀ ਜਾਣਕਾਰੀ",
-       "prefs-i18n": "à¨\85ੰਤਰਰਾਸ਼à¨\9fਰੀਕਰਨ",
+       "prefs-i18n": "à¨\95à©\8cਮਾà¨\82ਤਰੀਕਰਨ",
        "prefs-signature": "ਦਸਤਖ਼ਤ",
        "prefs-dateformat": "ਮਿਤੀ ਦਾ ਅੰਦਾਜ਼",
        "prefs-timeoffset": "ਸਮੇਂ ਦਾ ਆਫ਼ਸੈੱਟ",
        "prefs-help-prefershttps": "ਇਹ ਪਸੰਦ ਤੁਹਾਡੇ ਅਗਲੇ ਦਾਖ਼ਲੇ ਤੋਂ ਚਾਲੂ ਹੋ ਜਾਵੇਗੀ।",
        "email-address-validity-valid": "ਈ-ਮੇਲ ਪਤਾ ਸਹੀ ਲਗਦਾ ਹੈ",
        "email-address-validity-invalid": "ਸਹੀ ਈ-ਮੇਲ ਪਤਾ ਦਾਖ਼ਲ ਕਰੋ",
-       "userrights": "ਵਰਤੋਂਕਾਰ ਦੇ ਅਧਿਕਾਰਾਂ ਦਾ ਰੱਖ-ਰਖਾਓ",
+       "userrights": "ਵਰਤੋਂਕਾਰੀ ਹੱਕਾਂ ਦਾ ਪ੍ਰਬੰਧ",
        "userrights-lookup-user": "ਵਰਤੋਂਕਾਰ ਸਮੂਹਾਂ ਦੀ ਦੇਖਭਾਲ",
        "userrights-user-editname": "ਇੱਕ ਵਰਤੋਂਕਾਰ ਨਾਂ ਭਰੋ:",
        "editusergroup": "ਵਰਤੋਂਕਾਰ ਸਮੂਹਾਂ ਦੀ ਸੋਧ",
        "userrights-reason": "ਕਾਰਨ:",
        "userrights-no-interwiki": "ਤੁਹਾਨੂੰ ਦੂਜੇ ਵਿਕੀਆਂ ਤੇ ਮੈਂਬਰਾਂ ਦੇ ਹੱਕਾਂ ਵਿਚ ਤਬਦੀਲੀ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
        "userrights-nodatabase": "ਡੈਟਾਬੇਸ $1 ਮੌਜੂਦ ਨਹੀਂ ਜਾਂ ਮਕਾਮੀ ਨਹੀਂ ਹੈ।",
-       "userrights-notallowed": "ਤà©\81ਹਾਨà©\82à©° à¨¨à©\82à©° à¨¯à©\82à¨\9c਼ਰ ਹੱਕ ਦੇਣ ਜਾਂ ਖੋਹਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
+       "userrights-notallowed": "ਤà©\81ਹਾਡà©\87 à¨\95à©\8bਲ਼ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਹੱਕ ਦੇਣ ਜਾਂ ਖੋਹਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
        "userrights-changeable-col": "ਉਹ ਸਮੂਹ ਜਿਨ੍ਹਾਂ ਨੂੰ ਤੁਸੀਂ ਬਦਲ ਸਕਦੇ ਹੋ",
        "userrights-unchangeable-col": "ਉਹ ਸਮੂਹ ਜਿਨ੍ਹਾਂ ਨੂੰ ਤੁਸੀਂ ਬਦਲ ਨਹੀਂ ਸਕਦੇ",
-       "group": "ਸਮà©\82ਹ:",
+       "group": "à¨\9fà©\8bਲà©\80:",
        "group-user": "ਵਰਤੋਂਕਾਰ",
        "group-autoconfirmed": "ਖ਼ੁਦ-ਤਸਦੀਕਸ਼ੁਦਾ ਮੈਂਬਰ",
        "group-bot": "ਬੌਟ",
        "group-all": "(ਸਭ)",
        "group-user-member": "{{GENDER:$1|ਵਰਤੋਂਕਾਰ}}",
        "group-bot-member": "ਬੌਟ",
+       "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}}:ਬੌਟ",
        "right-minoredit": "ਸੋਧਾਂ ਦੇ ਛੋਟਾ ਹੋਣ ਲਈ ਨਿਸ਼ਾਨ ਲਾਉਣਾ",
        "right-move": "ਸਫ਼ੇ ਭੇਜਣਾ",
        "right-move-subpages": "ਉਪ-ਸਫ਼ਿਆਂ ਸਮੇਤ ਸਫ਼ੇ ਭੇਜੋ",
+       "right-move-categorypages": "ਵਰਗਾਂ ਦੇ ਸਫ਼ੇ ਭੇਜੋ",
        "right-movefile": "ਫਾਇਲਾਂ ਭੇਜਣੀਆਂ",
        "right-upload": "ਫਾਇਲਾਂ ਅੱਪਲੋਡ",
+       "right-reupload": "ਮੌਜੂਦਾ ਫ਼ਾਈਲਾਂ ਉੱਤੇ ਲਿਖੋ",
+       "right-reupload-own": "ਆਪ ਚੜ੍ਹਾਈਆਂ ਮੌਜੂਦਾ ਫ਼ਾਈਲਾਂ ਉੱਤੇ ਲਿਖੋ",
        "right-upload_by_url": "URL ਤੋਂ ਫਾਇਲਾਂ ਅੱਪਲੋਡ ਕਰੋ",
        "right-autoconfirmed": "ਨੀਮ-ਸੁਰੱਖਿਅਤ ਸਫ਼ਿਆਂ ਨੂੰ ਸੋਧਣਾ",
+       "right-bot": "ਇੱਕ ਸਵੈ-ਚਾਲਤ ਅਮਲ ਵਜੋਂ ਗਿਣਿਆ ਜਾਣਾ",
        "right-delete": "ਸਫ਼ੇ ਹਟਾਓ",
        "right-bigdelete": "ਵੱਡੇ ਅਤੀਤ ਵਾਲੇ ਪੰਨੇ ਮਿਟਾਉਣੇ",
        "right-browsearchive": "ਮਿਟਾਏ ਹੋਏ ਸਫ਼ੇ ਖੋਜੋ",
        "right-editmyuserjs": "ਆਪਣੀਆਂ ਵਰਤੋਂਕਾਰ ਜਾਵਾਸਕਰਿਪਟ ਫ਼ਾਈਲਾਂ ਸੋਧੋ",
        "right-viewmywatchlist": "ਆਪਣੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵੇਖੋ",
        "right-editmywatchlist": "ਆਪਣੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਸੋਧੋ। ਧਿਆਨ ਦਿਓ ਕਿ ਕੁਝ ਸਫ਼ੇ ਇਸ ਹੱਕ ਤੋਂ ਬਿਨਾਂ ਵੀ ਜੁੜਨਗੇ।",
-       "right-editmyoptions": "à¨\86ਪਣà©\80à¨\86à¨\82 à¨ªà¨¸à©°à¨¦ਾਂ ਸੋਧੋ",
+       "right-editmyoptions": "à¨\86ਪਣà©\80à¨\86à¨\82 à¨¤à¨°à¨\9cà©\80ਹਾਂ ਸੋਧੋ",
        "right-unwatchedpages": "ਨਜ਼ਰ ਨਾ ਰੱਖੇ ਜਾ ਰਹੇ ਸਫ਼ਿਆਂ ਦੀ ਲਿਸਟ ਵੇਖਣੀ",
        "right-mergehistory": "ਸਫ਼ਿਆਂ ਦੇ ਅਤੀਤਾਂ ਨੂੰ ਰਲ਼ਾਉਣਾ",
        "right-userrights": "ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਦੇ ਹੱਕ ਬਦਲਣੇ",
        "action-createpage": "ਸਫ਼ੇ ਬਣਾਓ",
        "action-createtalk": "ਚਰਚਾ ਸਫ਼ੇ ਬਣਾਉਣ",
        "action-createaccount": "ਇਹ ਵਰਤੋਂਕਾਰ ਖਾਤਾ ਬਣਾਓ",
+       "action-history": "ਇਸ ਸਫ਼ੇ ਦਾ ਅਤੀਤ ਵੇਖੋ",
        "action-minoredit": "ਇਹ ਸੋਧ ਨੂੰ ਛੋਟੀ ਤੌਰ ਉੱਤੇ ਮੰਨੋ",
        "action-move": "ਇਹ ਸਫ਼ਾ ਭੇਜੋ",
        "action-move-subpages": "ਇਹ ਸਫ਼ਾ ਤੇ ਇਸ ਦੇ ਅਧੀਨ-ਸਫ਼ਿਆਂ ਨੂੰ ਭੇਜੋ",
+       "action-move-categorypages": "ਵਰਗਾਂ ਦੇ ਸਫ਼ੇ ਭੇਜੋ",
        "action-movefile": "ਇਹ ਫ਼ਾਈਲ ਭੇਜੋ",
-       "action-upload": "à¨\87ਹ à¨«à¨¼à¨¾à¨\88ਲ à¨\85ੱਪਲà©\8bਡ à¨\95ਰà©\8b",
+       "action-upload": "à¨\87ਹ à¨«à¨¼à¨¾à¨\88ਲ à¨\9aà©\9cà©\8dਹਾà¨\89",
        "action-reupload": "ਇਹ ਮੌਜੂਦਾ ਫ਼ਾਈਲ ਉੱਤੇ ਲਿਖੋ",
        "action-reupload-shared": "ਇਸ ਫ਼ਾਈਲ ਨੂੰ ਸਾਂਝੀ ਕੀਤੀ ਰਿਪੋਜ਼ਟਰੀ ਉੱਤੇ ਧਰੋ",
        "action-upload_by_url": "ਇਹ ਫ਼ਾਈਲ ਨੂੰ ਇੱਕ URL ਤੋਂ ਅੱਪਲੋਡ ਕਰੋ",
        "recentchanges-label-minor": "ਇਹ ਇੱਕ ਛੋਟੀ ਸੋਧ ਹੈ",
        "recentchanges-label-bot": "ਇਹ ਸੋਧ ਇੱਕ ਬੋਟ ਦੁਆਰਾ ਕੀਤੀ ਗਈ ਸੀ",
        "recentchanges-label-unpatrolled": "ਇਹ ਫੇਰ-ਬਦਲ ਹਾਲੇ ਵੇਖਿਆ ਨਹੀਂ ਗਿਆ",
-       "recentchanges-legend-newpage": "$1 - ਨਵਾਂ ਸਫ਼ਾ",
+       "recentchanges-legend-heading": "'''ਟੀਕਾ:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|ਨਵੇਂ ਸਫ਼ਿਆਂ ਦੀ ਸੂਚੀ]] ਵੀ ਵੇਖੋ)",
        "recentchanges-legend-plusminus": "(''±੧੨੩'')",
        "rcnotefrom": "'''$2''' ਤੱਕ ('''$1''' ਤੱਕ ਦਿੱਸਦੇ) ਬਦਲਾਵ ਹੇਠ ਦਿੱਤੀਆਂ ਹਨ।",
        "rclistfrom": "$3 $2 ਤੋਂ ਸ਼ੁਰੂ ਕਰਕੇ ਨਵੀਆਂ ਸੋਧਾਂ ਵਖਾਓ",
        "diff": "ਫ਼ਰਕ",
        "hist": "ਅਤੀਤ",
        "hide": "ਲੁਕਾਓ",
-       "show": "ਵà¨\96ਾà¨\93",
+       "show": "ਵਿà¨\96ਾà¨\89",
        "minoreditletter": "ਛੋ",
        "newpageletter": "ਨ",
        "boteditletter": "ਬੋਟ",
        "recentchangeslinked-summary": "ਇਹ ਕਿਸੇ ਖ਼ਾਸ ਸਫ਼ੇ ਤੋਂ ਲਿੰਕ ਕੀਤੇ ਸਫ਼ਿਆਂ (ਜਾਂ ਕਿਸੇ ਖ਼ਾਸ ਸ਼੍ਰੇਣੀ ਦੇ ਮੈਂਬਰਾਂ) ਵਿੱਚ ਹੋਈਆਂ ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ ਦੀ ਲਿਸਟ ਹੈ। [[Special:Watchlist|ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ]] ਵਿੱਚ ਮੌਜੂਦ ਸਫ਼ੇ ਮੋਟੇ ਅੱਖਰਾਂ ਵਿੱਚ ਵਖਾਈ ਦੇਣਗੇ।",
        "recentchangeslinked-page": "ਸਫ਼ੇ ਦਾ ਨਾਂ:",
        "recentchangeslinked-to": "ਇਹਦੇ ਬਦਲੇ ਇਸ ਸਫ਼ੇ ਨਾਲ ਜੁੜੇ ਸਫ਼ਿਆਂ ਵਿੱਚ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ ਵਿਖਾਓ",
-       "upload": "ਫ਼ਾà¨\88ਲ à¨\85ੱਪਲà©\8bਡ à¨\95ਰà©\8b",
-       "uploadbtn": "ਫ਼ਾà¨\88ਲ à¨\85ੱਪਲà©\8bਡ à¨\95ਰà©\8b",
+       "upload": "ਫ਼ਾà¨\88ਲ à¨\9aà©\9cà©\8dਹਾà¨\89",
+       "uploadbtn": "ਫ਼ਾà¨\88ਲ à¨\9aà©\9cà©\8dਹਾà¨\89",
        "reuploaddesc": "ਅੱਪਲੋਡ ਫਾਰਮ ਉੱਤੇ ਜਾਓ।",
        "upload-tryagain": "ਬਦਲਿਆ ਹੋਇਆ ਫ਼ਾਈਲ ਵੇਰਵਾ ਪੇਸ਼ ਕਰੋ",
        "uploadnologin": "ਦਾਖ਼ਲ ਨਹੀਂ ਹੋ",
        "uploadnologintext": "ਫ਼ਾਈਲਾਂ ਅੱਪਲੋਡ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ $1 ਕਰਨਾ ਪਵੇਗਾ।",
        "uploaderror": "ਅੱਪਲੋਡ ਗਲਤੀ",
        "upload-recreate-warning": "'''ਖ਼ਬਰਦਾਰ: ਇਸ ਨਾਮ ਦੀ ਫ਼ਾਈਲ ਮਿਟਾਈ ਜਾਂ ਹੋਰ ਨਾਮ ਤੇ ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।'''\nਮਿਟਾਉਣ ਅਤੇ ਭੇਜੇ ਜਾਣ ਦਾ ਚਿੱਠਾ ਸਹੂਲਤ ਲਈ ਇੱਥੇ ਦਿੱਤਾ ਗਿਆ ਹੈ:",
+       "upload-permitted": "ਫ਼ਾਈਲਾਂ ਦੀਆਂ ਮਨਜ਼ੂਰ ਕਿਸਮਾਂ: $1।",
+       "upload-preferred": "ਫ਼ਾਈਲਾਂ ਦੀਆਂ ਤਰਜੀਹੀ ਕਿਸਮਾਂ :$1।",
+       "upload-prohibited": "ਫ਼ਾਈਲਾਂ ਦੀਆਂ ਨਾ-ਮਨਜ਼ੂਰ ਕਿਸਮਾਂ: $1।",
        "uploadlogpage": "ਅਪਲੋਡਾਂ ਦਾ ਚਿੱਠਾ",
        "filename": "ਫ਼ਾਈਲ ਦਾ ਨਾਂ:",
        "filedesc": "ਸਾਰ",
        "filetype-banned": "ਇਸ ਕਿਸਮ ਦੀ ਫ਼ਾਈਲ ਦੀ ਮਨਾਹੀ ਹੈ।",
        "verification-error": "ਇਹ ਫ਼ਾਈਲ ਫ਼ਾਈਲ-ਜਾਂਚ 'ਤੇ ਖ਼ਰੀ ਨਾ ਉੱਤਰ ਸਕੀ।",
        "illegal-filename": "ਇਸ ਫ਼ਾਈਲ-ਨਾਂ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
+       "overwrite": "ਮੌਜੂਦਾ ਫ਼ਾਈਲ ਉੱਤੇ ਲਿਖਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
        "unknown-error": "ਅਣਜਾਣ ਗ਼ਲਤੀ ਆਈ ਹੈ।",
        "tmp-create-error": "ਆਰਜ਼ੀ ਫ਼ਾਈਲ ਬਣਾਈ ਨਾ ਜਾ ਸਕੀ।",
        "tmp-write-error": "ਆਰਜ਼ੀ ਫ਼ਾਈਲ ਲਿਖਣ ਲਈ ਗ਼ਲਤੀ ਆਈ।",
+       "large-file": "ਫ਼ਾਈਲਾਂ $1 ਤੋਂ ਵੱਡੀਆਂ ਨਾ ਹੋਣ ਦੀ ਸਲਾਹ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ;\nਇਹ ਫ਼ਾਈਲ $2 ਦੀ ਹੈ।",
        "windows-nonascii-filename": "ਵਿਕੀ ਖ਼ਾਸ ਚਿੰਨ੍ਹਾਂ ਵਾਲੇ ਫ਼ਾਈਲ ਨਾਮਾਂ ਨੂੰ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੰਦਾ।",
        "fileexists": "ਇਹ ਫ਼ਾਈਲ ਨਾਂ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ। ਜੇ ਤੁਸੀਂ ਇਹਨੂੰ ਬਦਲਣ ਬਾਰੇ ਦ੍ਰਿੜ ਨਹੀਂ ਹੋ ਤਾਂ  <strong>[[:$1]]</strong> ਵੇਖੋ ਜੀ। [[$1|thumb]]",
        "fileexists-extension": "ਇਸ ਨਾਂ ਨਾਲ਼ ਰਲਦੀ ਫ਼ਾਈਲ ਮੌਜੂਦ ਹੈ: [[$2|thumb]]\n* ਅੱਪਲੋਡ ਕੀਤੀ ਜਾਂਦੀ ਫ਼ਾਈਲ ਦਾ ਨਾਂ: <strong>[[:$1]]</strong>\n* ਮੌਜੂਦ ਫ਼ਾਈਲ ਦਾ ਨਾਂ: <strong>[[:$2]]</strong>\nਕੋਈ ਵੱਖਰਾ ਨਾਂ ਚੁਣੋ ਜੀ।",
        "uploaddisabled": "ਅੱਪਲੋਡ ਆਯੋਗ ਹੈ",
        "copyuploaddisabled": "URL ਰਾਹੀਂ ਅੱਪਲੋਡ ਰੋਕੇ ਹੋਏ ਹਨ।",
        "uploaddisabledtext": "ਫ਼ਾਈਲਾਂ ਦੇ ਅੱਪਲੋਡ ਰੋਕੇ ਹੋਏ ਹਨ।",
+       "uploadscriptednamespace": "ਇਸ ਐੱਸ.ਵੀ.ਜੀ. ਫ਼ਾਈਲ ਵਿੱਚ ਇੱਕ ਗ਼ੈਰ-ਕਨੂੰਨੀ ਨਾਂ-ਥਾਂ \"$1\" ਹੈ।",
        "uploadvirus": "ਇਹ ਫਾਇਲ ਵਿੱਚ ਵਾਇਰਸ ਹੈ! ਵੇਰਵੇ ਲਈ ਵੇਖੋ: $1",
        "upload-source": "ਸਰੋਤ ਫਾਇਲ",
        "sourcefilename": "ਸੋਰਸ ਫਾਇਲ ਨਾਂ:",
        "backend-fail-closetemp": "ਆਰਜ਼ੀ ਫ਼ਾਈਲ ਬੰਦ ਨਹੀਂ ਹੋਈ।",
        "backend-fail-read": "\"$1\" ਫ਼ਾਈਲ ਪੜ੍ਹੀ ਨਾ ਜਾ ਸਕੀ।",
        "backend-fail-create": "\"$1\" ਫ਼ਾਈਲ ਲਿਖੀ ਨਾ ਜਾ ਸਕੀ।",
+       "zip-wrong-format": "ਦੱਸੀ ਗਈ ਫ਼ਾਈਲ ਜ਼ਿੱਪ ਫ਼ਾਈਲ ਨਹੀਂ ਸੀ।",
        "uploadstash-refresh": "ਫ਼ਾਈਲਾਂ ਦੀ ਲਿਸਟ ਨੂੰ ਤਾਜ਼ਾ ਕਰੋ",
        "img-auth-accessdenied": "ਪਹੁੰਚ ਨਕਾਰੀ ਗਈ",
        "img-auth-nofile": "ਫ਼ਾਈਲ \"$1\" ਮੌਜੂਦ ਨਹੀਂ ਹੈ।",
        "license": "ਲਸੰਸ:",
        "license-header": "ਲਸੰਸ",
        "nolicense": "ਕੁਝ ਵੀ ਚੁਣਿਆ",
+       "licenses-edit": "ਲਸੰਸ ਦੀਆਂ ਚੋਣਾਂ ਸੋਧੋ",
        "license-nopreview": "(ਝਲਕ ਉਪਲੱਬਧ ਨਹੀਂ)",
        "upload_source_file": " (ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ ਉੱਤੇ ਇੱਕ ਫਾਇਲ)",
        "listfiles-delete": "ਹਟਾਓ",
        "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": "ਕੋਈ ਸਾਂਝਾ ਕੀਤਾ ਭੰਡਾਰ",
+       "upload-disallowed-here": "ਤੁਸੀਂ ਇਸ ਫ਼ਾਈਲ ਉੱਤੇ ਨਹੀਂ ਨਹੀਂ ਲਿਖ ਸਕਦੇ।",
        "filerevert": "$1 ਰੀਵਰਟ",
        "filerevert-legend": "ਫਾਇਲ ਰੀਵਰਟ",
        "filerevert-comment": "ਕਾਰਨ:",
        "download": "ਡਾਊਨਲੋਡ",
        "unwatchedpages": "ਨਜ਼ਰ ਹੇਠ ਨਾ ਰੱਖੇ ਗਏ ਸਫ਼ੇ",
        "listredirects": "ਰੀਡਾਇਰੈਕਟਾਂ ਦੀ ਲਿਸਟ",
+       "listduplicatedfiles": "ਨਕਲ ਵਾਲ਼ੀਆਂ ਫ਼ਾਈਲਾਂ ਦੀ ਸੂਚੀ",
        "unusedtemplates": "ਅਣ-ਵਰਤੇ ਫਰਮੇ",
        "unusedtemplateswlh": "ਹੋਰ ਕੜੀਆਂ",
        "randompage": "ਰਲ਼ਵਾਂ ਸਫ਼ਾ",
        "randomincategory": "ਸ਼੍ਰੇਣੀ ਵਿਚਲਾ ਰਲ਼ਵਾਂ ਸਫ਼ਾ",
        "randomincategory-invalidcategory": "\"$1\" ਕੋਈ ਸਹੀ ਸ਼੍ਰੇਣੀ ਦਾ ਨਾਂ ਨਹੀਂ ਹੈ।",
        "randomincategory-nopages": "[[:Category:$1|$1]] ਸ਼੍ਰੇਣੀ ਵਿਚ ਕੋਈ ਸਫ਼ਾ ਨਹੀਂ ਹੈ।",
+       "randomincategory-category": "ਵਰਗ:",
+       "randomincategory-legend": "ਵਰਗ ਵਿਚਲਾ ਰਲ਼ਵਾਂ ਸਫ਼ਾ",
        "randomredirect": "ਰਲ਼ਵਾਂ ਰੀਡਿਰੈਕਟ",
        "statistics": "ਅੰਕੜੇ",
        "statistics-header-pages": "ਸਫ਼ਾ ਅੰਕੜੇ",
        "statistics-header-edits": "ਸੋਧ ਅੰਕੜੇ",
-       "statistics-header-views": "ਅੰਕੜੇ ਵਿਖਾਓ",
        "statistics-header-users": "ਵਰਤੋਂਕਾਰ ਅੰਕੜੇ",
        "statistics-header-hooks": "ਹੋਰ ਅੰਕੜੇ",
        "statistics-articles": "ਸਮੱਗਰੀ ਸਫ਼ੇ",
        "statistics-pages-desc": "ਇਸ ਵਿਕੀ ਦੇ ਸਾਰੇ ਸਫ਼ੇ, ਗੱਲ-ਬਾਤ ਸਫ਼ਿਆਂ, ਰੀਡਾਇਰੈਕਟਾਂ ਇਤਿਆਦਿ ਨੂੰ ਸ਼ਾਮਲ ਕਰਦੇ ਹੋਏ",
        "statistics-files": "ਅਪਲੋਡ ਕੀਤੀਆਂ ਗਈਆਂ ਫਾਈਲਾਂ",
        "statistics-edits-average": "ਪ੍ਰਤੀ ਸਫ਼ਾ ਔਸਤ ਸੋਧਾਂ",
-       "statistics-views-total": "ਕੁੱਲ ਫੇਰੀਆਂ",
-       "statistics-views-peredit": "ਪ੍ਰਤੀ ਸੋਧ ਫੇਰੀਆਂ",
        "statistics-users": "ਰਜਿਸਟਰਡ [[Special:ListUsers|ਵਰਤੋਂਕਾਰ]]",
        "statistics-users-active": "ਸਰਗਰਮ ਵਰਤੋਂਕਾਰ",
        "statistics-users-active-desc": "ਮੈਂਬਰ, ਜਿੰਨ੍ਹਾ ਨੇ ਆਖ਼ਰੀ {{PLURAL:$1|ਦਿਨ|$1 ਦਿਨਾਂ}} ਵਿਚ ਕੋਈ ਕੰਮ ਕੀਤਾ ਹੈ।",
-       "statistics-mostpopular": "ਸਭ ਤੋਂ ਵੱਧ ਵੇਖੇ ਸਫ਼ੇ",
+       "pageswithprop-prop": "ਗੁਣ ਦਾ ਨਾਂ:",
        "pageswithprop-submit": "ਜਾਉ",
        "doubleredirects": "ਦੋਹਰੇ ਰੀਡਿਰੈਕਟ",
        "brokenredirects": "ਟੁੱਟੇ ਹੋਏ ਰੀਡਿਰੈਕਟ",
        "uncategorizedtemplates": "ਬਗ਼ੈਰ ਕੈਟੇਗਰੀਆਂ ਵਾਲ਼ੇ ਸਾਂਚੇ",
        "unusedcategories": "ਅਣਵਰਤੀਆਂ ਕੈਟਾਗਰੀਆਂ",
        "unusedimages": "ਅਣਵਰਤੀਆਂ ਫਾਇਲਾਂ",
-       "popularpages": "ਹਰਮਨਪਿਆਰੇ ਸਫ਼ੇ",
        "wantedcategories": "ਚਾਹੀਦੀਆਂ ਕੈਟੇਗਰੀਆਂ",
        "wantedpages": "ਚਾਹੀਦੇ ਸਫ਼ੇ",
        "wantedfiles": "ਚਾਹੀਦੀਆਂ ਫਾਇਲਾਂ",
        "prefixindex": "ਇਸ ਅਗੇਤਰ ਵਾਲੇ ਸਾਰੇ ਸਫ਼ੇ",
        "shortpages": "ਛੋਟੇ ਸਫ਼ੇ",
        "longpages": "ਲੰਮੇ ਸਫ਼ੇ",
+       "deadendpages": "ਬੰਦ ਗਲ਼ੀ ਵਾਲ਼ੇ ਸਫ਼ੇ",
        "protectedpages": "ਸੁਰੱਖਿਅਤ ਸਫ਼ੇ",
+       "protectedpages-noredirect": "ਮੋੜ ਲੁਕਾਉ",
+       "protectedpages-timestamp": "ਵਕਤ ਦੀ ਮੋਹਰ",
        "protectedpages-page": "ਸਫ਼ਾ",
        "protectedpages-expiry": "ਮਿਆਦ",
        "protectedpages-reason": "ਕਾਰਨ",
        "protectedpages-unknown-timestamp": "ਅਣਜਾਣ",
-       "protectedpages-unknown-performer": "à¨\85ਣà¨\9cਾਣ à¨¯à©\82à¨\9c਼ਰ",
+       "protectedpages-unknown-performer": "à¨\85ਣਪà¨\9bਾਤà©\87 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ",
        "protectedtitles": "ਸੁਰੱਖਿਅਤ ਸਿਰਲੇਖ",
-       "listusers": "ਯà©\82à¨\9c਼ਰ à¨²à¨¿à¨¸à¨\9f",
+       "listusers": "ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨¸à©\82à¨\9aà©\80",
        "listusers-editsonly": "ਸਿਰਫ਼ ਸੋਧਾਂ ਵਾਲੇ ਵਰਤੋਂਕਾਰ ਵਿਖਾਓ",
        "listusers-creationsort": "ਬਣਾਉਣ ਦੀ ਮਿਤੀ ਮੁਤਾਬਕ ਤਰਤੀਬ ਵਿਚ ਕਰੋ",
+       "listusers-desc": "ਲਹਿੰਦੀ ਤਰਤੀਬ 'ਚ ਰੱਖੋ",
+       "usereditcount": "$1 {{PLURAL:$1|ਸੋਧ|ਸੋਧਾਂ}}",
        "usercreated": "$1 ਨੂੰ $2 ’ਤੇ {{GENDER:$3|ਬਣਾਇਆ}}",
        "newpages": "ਨਵੇਂ ਸਫ਼ੇ",
        "newpages-username": "ਵਰਤੋਂਕਾਰ ਨਾਂ:",
        "nopagetitle": "ਕੋਈ ਅਜਿਹਾ ਨਿਸ਼ਾਨਾ ਸਫ਼ਾ ਨਹੀਂ ਹੈ",
        "pager-newer-n": "{{PLURAL:$1|1 ਨਵਾਂ|$1 ਨਵੇਂ}}",
        "pager-older-n": "{{PLURAL:$1|1 ਪੁਰਾਣਾ|$1 ਪੁਰਾਣੇ}}",
+       "suppress": "ਨਿਗਰਾਨ",
        "booksources": "ਪੁਸਤਕਾਂ ਦੇ ਸਰੋਤ",
        "booksources-search-legend": "ਕਿਤਾਬਾਂ ਦੇ ਸਰੋਤ ਖੋਜੋ",
-       "booksources-go": "ਜਾਓ",
+       "booksources-search": "ਭਾਲ਼",
        "booksources-invalid-isbn": "ਦਿੱਤਾ ਗਿਆ ISBN ਸਹੀ ਨਹੀਂ ਲਗਦਾ, ਅਸਲੀ ਸਰੋਤ ਤੋਂ ਨਕਲ ਕਰਦੇ ਵਕਤ ਹੋਈਆਂ ਗ਼ਲਤੀਆਂ ਜਾਂਚੋ।",
        "specialloguserlabel": "ਕਰਤਾ:",
        "speciallogtitlelabel": "ਸਿਰਲੇਖ:",
        "listgrouprights-removegroup-all": "ਸਾਰੇ ਸਮੂਹ ਹਟਾਓ",
        "listgrouprights-addgroup-self-all": "ਆਪਣੇ ਖਾਤੇ ਵਿਚ ਸਾਰੇ ਸਮੂਹ ਜੋੜੋ",
        "listgrouprights-removegroup-self-all": "ਆਪਣੇ ਖਾਤੇ ਤੋਂ ਸਾਰੇ ਸਮੂਹ ਹਟਾਓ",
+       "listgrouprights-namespaceprotection-header": "ਨਾਂ-ਥਾਂ ਦੀਆਂ ਬੰਧੇਜਾਂ",
+       "listgrouprights-namespaceprotection-namespace": "ਨਾਂ-ਥਾਂ",
+       "trackingcategories": "ਵਰਗਾਂ ਦੀ ਪੈੜ",
+       "trackingcategories-msg": "ਵਰਗ ਦੀ ਪੈੜ",
+       "trackingcategories-name": "ਸੁਨੇਹੇ ਦਾ ਨਾਂ",
+       "trackingcategories-desc": "ਵਰਗ ਮਿਲਾਉਣ ਦੇ ਮਾਪਦੰਡ",
        "trackingcategories-nodesc": "ਕੋਈ  ਵੇਰਵਾ ਉਪਲੱਬਧ ਨਹੀਂ।",
+       "trackingcategories-disabled": "ਵਰਗ ਬੰਦ ਹੈ",
        "mailnologin": "ਭੇਜਣ ਲਈ ਕੋਈ ਪਤਾ ਨਹੀਂ",
        "mailnologintext": "ਦੂਜੇ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਈ-ਮੇਲ ਭੇਜਣ ਲਈ ਤੁਹਾਨੂੰ [[Special:UserLogin|ਦਾਖ਼ਲ]] ਹੋਣਾ ਪਵੇਗਾ ਅਤੇ ਆਪਣੀਆਂ [[Special:Preferences|ਪਸੰਦਾਂ]] ਵਿਚ ਇੱਕ ਸਹੀ ਈ-ਮੇਲ ਪਤਾ ਦੇਣਾ ਪਵੇਗਾ।",
        "emailuser": "ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ",
        "emailuser-title-target": "ਇਹ {{GENDER:$1|ਯੂਜ਼ਰ}} ਨੂੰ ਈਮੇਲ ਭੇਜੋ",
-       "emailuser-title-notarget": "ਯà©\82à¨\9c਼ਰ à¨¨à©\82à©° à¨\88ਮà©\87ਲ",
-       "emailpage": "ਯà©\82à¨\9c਼ਰ ਨੂੰ ਈਮੇਲ ਕਰੋ",
+       "emailuser-title-notarget": "ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨¨à©\82à©° à¨\88ਮà©\87ਲ à¨\95ਰà©\8b",
+       "emailpage": "ਵਰਤà©\8bà¨\82à¨\95ਾਰ ਨੂੰ ਈਮੇਲ ਕਰੋ",
        "defemailsubject": "{{SITENAME}} ਈਮੇਲ",
        "usermaildisabled": "ਵਰਤੋਂਕਾਰ ਦੀ ਈ-ਮੇਲ ਬੰਦ ਹੈ",
        "usermaildisabledtext": "ਇਸ ਵਿਕੀ ’ਤੇ ਤੁਸੀਂ ਦੂਜੇ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਈ-ਮੇਲ ਨਹੀਂ ਭੇਜ ਸਕਦੇ",
        "mywatchlist": "ਨਿਗਰਾਨੀ-ਲਿਸਟ",
        "watchlistfor2": "$1 $2 ਲਈ",
        "nowatchlist": "ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਕੋਈ ਚੀਜ਼ ਨਹੀਂ ਹੈ।",
-       "watchlistanontext": "ਆਪਣੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚਲੀਆਂ ਚੀਜ਼ਾਂ ਵੇਖਣ ਜਾਂ ਸੋਧਣ ਲਈ ਮਿਹਰਬਾਨੀ ਕਰਕੇ $1।",
+       "watchlistanontext": "ਆਪਣੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚਲੀਆਂ ਚੀਜ਼ਾਂ ਵੇਖਣ ਜਾਂ ਸੋਧਣ ਲਈ ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਦਾਖ਼ਲ ਹੋਵੋ।",
        "watchnologin": "ਲਾਗਇਨ ਨਹੀਂ",
        "addwatch": "ਨਿਗਰਾਨੀ-ਲਿਸਟ ’ਚ ਜੋੜੋ",
        "addedwatchtext": "ਪੰਨਾ \"[[:$1]]\" ਤੁਹਾਡੀ [[Special:Watchlist|ਧਿਆਨਸੂਚੀ]] ’ਚ ਜੁੜ ਚੁੱਕਾ ਹੈ।\nਇਸ ਅਤੇ ਇਸਦੇ ਚਰਚਾ ਪੰਨੇ ’ਚ ਹੋਈਆਂ ਬਦਲੀਆਂ ਓਥੇ ਵਖਾਈ ਦੇਣਗੀਆਂ ਅਤੇ ਵੇਖਣ ਦੀ ਸੌਖ ਲਈ [[Special:RecentChanges|ਹਾਲ ਹੀ ’ਚ ਹੋਈਆਂ ਬਦਲੀਆਂ]] ਵਿੱਚ ਇਹ ਪੰਨਾ '''ਗੂੜ੍ਹਾ''' ਦਿਖਾਈ ਦੇਵੇਗਾ।",
        "notanarticle": "ਕੋਈ ਸਮੱਗਰੀ ਸਫ਼ਾ ਨਹੀਂ ਹੈ",
        "notvisiblerev": "ਇੱਕ ਵੱਖਰੇ ਮੈਂਬਰ ਦੀ ਬਣਾਈ ਆਖ਼ਰੀ ਰੀਵਿਜ਼ਨ ਮਿਟਾਈ ਜਾ ਚੁੱਕੀ ਹੈ",
        "watchlist-details": "ਗੱਲ-ਬਾਤ ਸਫ਼ੇ ਨਾ ਗਿਣਦੇ ਹੋਏ, ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ-ਸੂਚੀ ਵਿਚ{{PLURAL:$1|$1 ਸਫ਼ਾ ਹੈ|$1 ਸਫ਼ੇ ਹਨ}}।",
+       "wlheader-enotif": "ਈਮੇਲ ਸੂਚਨਾ ਚਾਲੂ ਹੈ।",
        "wlnote": "$3, $4 ਮੁਤਾਬਕ ਆਖ਼ਰੀ {{PLURAL:$2|ਘੰਟੇ|'''$2''' ਘੰਟਿਆਂ}} ਵਿਚ {{PLURAL:\n$1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆਂ}}, ਹੇਠਾਂ ਵੇਖੋ।",
-       "wlshowlast": "ਪਿਛਲੇ $1 ਘੰਟੇ $2 ਦਿਨ $3 ਵਖਾਓ",
+       "wlshowlast": "ਪਿਛਲੇ $1 ਘੰਟੇ $2 ਦਿਨ  ਵਖਾਓ",
        "watchlist-options": "ਨਿਗਰਾਨੀ-ਲਿਸਟ ਦੀਆਂ ਚੋਣਾਂ",
        "watching": "ਨਿਗ੍ਹਾ (ਵਾਚ) ਰੱਖੀ ਜਾ ਰਹੀ ਹੈ...",
        "unwatching": "ਨਿਗ੍ਹਾ ਰੱਖਣੀ (ਵਾਚ) ਬੰਦ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ..",
-       "enotif_impersonal_salutation": "{{SITENAME}} ਯੂਜ਼ਰ",
+       "enotif_reset": "ਫੇਰੀ ਪਾਏ ਸਾਰੇ ਸਫ਼ਿਆਂ ਨੂੰ ਨਿਸ਼ਾਨੀ ਲਾਉ",
+       "enotif_impersonal_salutation": "{{SITENAME}} ਵਰਤੋਂਕਾਰ",
        "enotif_lastvisited": "ਤੁਹਾਡੀ ਆਖ਼ਰੀ ਆਮਦ ਤੋਂ ਲੈ ਕੇ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ ਵੇਖਣ ਲਈ $1 ਵੇਖੋ।",
        "enotif_lastdiff": "ਇਸ ਤਬਦੀਲੀ ਨੂੰ ਵੇਖਣ ਲਈ $1 ਵੇਖੋ।",
        "enotif_anon_editor": "ਗੁਮਨਾਮ ਵਰਤੋਂਕਾਰ $1",
        "deletepage": "ਸਫ਼ਾ ਹਟਾਓ",
        "confirm": "ਪੁਸ਼ਟੀ",
        "excontent": "ਸਮੱਗਰੀ ਸੀ: '$1'",
+       "excontentauthor": "ਲਿਖਤ ਸੀ: \"$1\" (ਅਤੇ ਇੱਕੋ-ਇੱਕ ਯੋਗਦਾਨੀ \"[[Special:Contributions/$2|$2]]\" ਸੀ)",
        "exbeforeblank": "ਖ਼ਾਲੀ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਸਮੱਗਰੀ ਸੀ: \"$1\"",
        "delete-confirm": "\"$1\" ਹਟਾਓ",
        "delete-legend": "ਹਟਾਓ",
-       "historywarning": "'''ਖ਼ਬਰਦਾਰ:''' ਜੋ ਸਫ਼ਾ ਤੁਸੀਂ ਮਿਟਾਉਣ ਜਾ ਰਹੇ ਹੋ ਉਸਦਾ ਅਤੀਤ ਤਕਰੀਬਨ $1 {{PLURAL:$1|ਰੀਵਿਜ਼ਨ|ਰੀਵਿਜ਼ਨਾਂ}} ਦਾ ਹੈ:",
+       "historywarning": "<strong>ਖ਼ਬਰਦਾਰ:</strong> ਜੋ ਸਫ਼ਾ ਤੁਸੀਂ ਮਿਟਾਉਣ ਜਾ ਰਹੇ ਹੋ ਉਹਦਾ ਅਤੀਤ $1 {{PLURAL:$1|ਸੁਧਾਈ|ਸੁਧਾਈਆਂ}} ਦਾ ਹੈ:",
        "actioncomplete": "ਕਾਰਵਾਈ ਪੂਰੀ ਹੋਈ",
        "actionfailed": "ਕਾਰਵਾਈ ਨਾਕਾਮ",
        "deletedtext": "\"$1\" ਮਿਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।\nਤਾਜ਼ੀਆਂ ਮਿਟਾਉਣਾਂ ਦੇ ਰਿਕਾਰਡ ਲਈ $2 ਵੇਖੋ।",
        "prot_1movedto2": "[[$1]] ਨੂੰ [[$2]] ’ਤੇ ਭੇਜਿਆ",
        "protect-badnamespace-title": "ਗ਼ੈਰ-ਸੁਰੱਖਿਆਯੋਗ ਨਾਂ-ਥਾਂ",
        "protect-badnamespace-text": "ਇਸ ਥਾਂ-ਨਾਮ ਵਿਚਲੇ ਸਫ਼ੇ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕਦੇ।",
+       "protect-norestrictiontypes-title": "ਨਾ-ਬਚਾਉਣਯੋਗ ਸਫ਼ਾ",
        "protect-legend": "ਸੁਰੱਖਿਆ ਤਸਦੀਕੀ",
        "protectcomment": "ਕਾਰਨ:",
        "protectexpiry": "ਮਿਆਦ:",
        "sp-contributions-search": "ਯੋਗਦਾਨ ਖੋਜੋ",
        "sp-contributions-username": "IP ਪਤਾ ਜਾਂ ਵਰਤੋਂਕਾਰਨਾਮ:",
        "sp-contributions-toponly": "ਸਿਰਫ ਉਹ ਸੋਧਾਂ ਵਿਖਾਓ ਜੋ ਸਭ ਤੋਂ ਤਾਜ਼ੀਆਂ ਰਿਵੀਜਨਾਂ ਹਨ",
+       "sp-contributions-newonly": "ਸਿਰਫ਼ ਉਹ ਸੋਧਾਂ ਵਿਖਾਉ ਜਿਹਨਾਂ ਨਾਲ਼ ਨਵੇਂ ਸਫ਼ੇ ਬਣੇ ਹਨ",
        "sp-contributions-submit": "ਖੋਜ",
        "whatlinkshere": "ਇੱਥੇ ਕੀ ਆ ਕੇ ਜੁੜਦਾ ਹੈ",
        "whatlinkshere-title": "$1 ਨਾਲ ਜੋੜਨ ਵਾਲੇ ਸਫ਼ੇ",
        "whatlinkshere-filters": "ਫਿਲਟਰ",
        "block": "ਵਰਤੋਂਕਾਰ 'ਤੇ ਪਾਬੰਦੀ ਲਾਓ",
        "unblock": "ਵਰਤੋਂਕਾਰ 'ਤੇ ਲੱਗੀ ਪਾਬੰਦੀ ਹਟਾਓ",
-       "blockip": "ਵਰਤੋਂਕਾਰ ’ਤੇ ਪਾਬੰਦੀ ਲਾਓ",
+       "blockip": "{{GENDER:$1|ਵਰਤੋਂਕਾਰ}} 'ਤੇ ਰੋਕ ਲਾਉ",
        "blockip-legend": "ਵਰਤੋਂਕਾਰ 'ਤੇ ਪਾਬੰਦੀ ਲਾਓ",
        "ipaddressorusername": "IP ਐਡਰੈਸ ਜਾਂ ਯੂਜ਼ਰ ਨਾਂ:",
        "ipbexpiry": "ਮਿਆਦ:",
        "ipbreason": "ਕਾਰਨ:",
        "ipbcreateaccount": "ਖਾਤਾ ਬਣਾਉਣ 'ਤੇ ਰੋਕ ਲਾਓ",
        "ipbemailban": "ਵਰਤੋਂਕਾਰ ਉੱਤੇ ਈਮੇਲ ਭੇਜਣ ਦੀ ਰੋਕ ਲਾਓ",
-       "ipbsubmit": "à¨\87ਹ à¨¯à©\82à¨\9c਼ਰ à¨²à¨\88 à¨ªà¨¾à¨¬à©°à¨¦à©\80",
+       "ipbsubmit": "à¨\87ਸ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ 'ਤà©\87 à¨°à©\8bà¨\95 à¨²à¨¾à¨\89",
        "ipbother": "ਹੋਰ ਟਾਈਮ:",
        "ipboptions": "2 ਘੰਟੇ:2 hours, 1 ਦਿਨ:1 day, 3 ਦਿਨ:3 days, 1 ਹਫ਼ਤਾ:1 week, 2 ਹਫ਼ਤੇ:2 weeks, 2 ਮਹੀਨਾ:1 month, 3 ਮਹੀਨੇ:3 months, 6 ਮਹੀਨੇ:6 months, 1 ਸਾਲ:1 year, ਹਮੇਸ਼ਾਂ ਲਈ:infinite",
        "ipbhidename": "ਸੋਧਾਂ ਅਤੇ ਕੜੀਆਂ ਤੋਂ ਵਰਤੋਂਕਾਰ ਦਾ ਨਾਂ ਲੁਕਾਓ",
        "ipb-unblock": "ਇੱਕ ਯੂਜ਼ਰ ਨਾਂ ਜਾਂ IP ਐਡਰੈੱਸ ਅਣ-ਬਲਾਕ ਕਰੋ",
        "ipb-blocklist": "ਮੌਜੂਦਾ ਪਾਬੰਦੀਆਂ ਵੇਖੋ",
        "ipb-blocklist-contribs": "$1 ਦੇ ਯੋਗਦਾਨ",
-       "unblockip": "ਯà©\82à¨\9c਼ਰ à¨\85ਣ-ਬਲਾà¨\95 à¨\95ਰà©\8b",
+       "unblockip": "ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨¤à©\8bà¨\82 à¨°à©\8bà¨\95 à¨¹à¨\9fਾà¨\89",
        "ipusubmit": "ਇਹ ਪਾਬੰਦੀ ਹਟਾਓ",
        "unblocked": "[[User:$1|$1]] ਪਾਬੰਦੀ ਮੁਕਤ ਹੋ ਚੁੱਕਾ ਹੈ",
        "unblocked-range": "$1 ਪਾਬੰਦੀ ਮੁਕਤ ਹੋ ਚੁੱਕੀ ਹੈ",
        "unblocklogentry": "$1 ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਈ",
        "block-log-flags-anononly": "ਸਿਰਫ਼ ਗੁੰਮਨਾਮ ਮੈਂਬਰ",
        "block-log-flags-nocreate": "ਖਾਤਾ ਬਣਾਉਣ ’ਤੇ ਪਾਬੰਦੀ ਹੈ",
+       "block-log-flags-noemail": "ਈਮੇਲ ਬੰਦ ਹੈ",
        "block-log-flags-nousertalk": "ਆਪਣਾ ਗੱਲ-ਬਾਤ ਸਫ਼ਾ ਨਹੀਂ ਸੋਧ ਸਕਦਾ",
        "block-log-flags-hiddenname": "ਵਰਤੋਂਕਾਰ ਨਾਂ ਲੁਕਾਇਆ ਹੋਇਆ",
        "ipb_expiry_invalid": "ਖ਼ਤਮ ਹੋਣ ਦਾ ਸਮਾਂ ਗ਼ਲਤ।",
        "ipbblocked": "ਤੁਸੀਂ ਦੂਜੇ ਮੈਂਬਰਾਂ ਨੂੰ ਪਾਬੰਦੀਸ਼ੁਦਾ ਜਾਂ ਪਾਬੰਦੀ-ਮੁਕਤ ਨਹੀਂ ਕਰ ਸਕਦੇ ਕਿਉਂਕਿ ਤੁਸੀਂ ਖ਼ੁਦ ਪਾਬੰਦੀਸ਼ੁਦਾ ਹੋ",
        "ipbnounblockself": "ਤੁਹਾਨੂੰ ਖ਼ੁਦ ਨੂੰ ਪਾਬੰਦੀ-ਮੁਕਤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ",
        "lockdb": "ਡਾਟਾਬੇਸ ਲਾਕ",
+       "unlockdb": "ਤੱਥ-ਅਧਾਰ ਖੋਲ੍ਹੋ",
+       "unlockconfirm": "ਹਾਂ, ਮੈਂ ਸੱਚੀਂ ਤੱਥ-ਅਧਾਰ ਖੋਲ੍ਹਣਾ ਹੈ।",
        "move-page": "$1 ਭੇਜੋ",
        "move-page-legend": "ਸਫ਼ਾ ਭੇਜੋ",
        "movearticle": "ਸਫ਼ਾ ਭੇਜੋ:",
        "movenologintext": "ਇਕ ਸਫ਼ੇ ਦਾ ਸਿਰਲੇਖ ਬਦਲਣ ਲਈ ਤੁਸੀਂ ਰਜਿਸਟਰਡ ਮੈਂਬਰ ਹੋਣੇ ਚਾਹੀਦੇ ਹੋ ਅਤੇ [[Special:UserLogin|ਲਾਗਇਨ]] ਕੀਤਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।",
+       "movenotallowed": "ਤੁਹਾਡੇ ਕੋਲ਼ ਸਫ਼ੇ ਹਿਲਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
        "movenotallowedfile": "ਤੁਹਾਨੂੰ ਫ਼ਾਈਲਾਂ ਭੇਜਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
        "cant-move-user-page": "ਤੁਹਾਨੂੰ ਵਰਤੋਂਕਾਰ ਸਫ਼ਿਆਂ (ਉਪ-ਸਫ਼ਿਆਂ ਤੋਂ ਛੁੱਟ) ਨੂੰ ਭੇਜਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
        "newtitle": "ਨਵੇਂ ਟਾਈਟਲ ਲਈ:",
        "delete_and_move_confirm": "ਹਾਂ, ਸਫ਼ਾ ਮਿਟਾ ਦੇਵੋ",
        "immobile-source-page": "ਇਹ ਸਫ਼ਾ ਭੇਜਣ ਯੋਗ ਨਹੀਂ ਹੈ।",
        "move-leave-redirect": "ਪਿੱਛੇ ਇਕ ਰੀਡਿਰੈਕਟ ਛੱਡੋ",
-       "export": "ਸਫ਼à©\87 à¨¨à¨¿à¨°à¨¯à¨¾à¨¤ à¨\95ਰà©\8b",
-       "exportall": "ਸਾਰà©\87 à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨¦à¨¾ à¨¨à¨¿à¨°à¨¯à¨¾à¨¤ à¨\95ਰà©\8b",
+       "export": "à¨\9cà©\81à¨\97ਤਾà¨\82 à¨¦à©\80 à¨¬à¨°à¨¾à¨®à¨¦",
+       "exportall": "ਸਾਰà©\87 à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨¦à©\80 à¨¬à¨°à¨¾à¨®à¨¦",
        "exportcuronly": "ਸਿਰਫ਼ ਮੌਜੂਦਾ ਰੀਵਿਜ਼ਨ ਸ਼ਾਮਲ ਕਰੋ, ਸਾਰਾ ਅਤੀਤ ਨਹੀਂ",
        "export-submit": "ਐਕਸਪੋਰਟ",
        "export-addcattext": "ਇਸ ਸ਼੍ਰੇਣੀ ਤੋਂ ਸਫ਼ੇ ਜੋੜੋ",
        "allmessages-filter-all": "ਸਭ",
        "allmessages-filter-modified": "ਬਦਲਿਆ ਗਿਆ",
        "allmessages-prefix": "ਇਸ ਅਗੇਤਰ ਨਾਲ਼ ਛਾਣੋ:",
-       "allmessages-language": "ਭਾਸ਼ਾ:",
+       "allmessages-language": "ਬà©\8bਲà©\80:",
        "allmessages-filter-submit": "ਜਾਓ",
        "allmessages-filter-translate": "ਤਰਜਮਾ ਕਰੋ",
        "thumbnail-more": "ਵਧਾਓ",
        "thumbnail_error": "ਨਮੂਨਾ ਬਣਾਉਣ ਵਿੱਚ ਗਲਤੀ ਹੋਈ ਹੈ: $1",
        "import": "ਸਫ਼ੇ ਮੰਗਾਓ",
        "importinterwiki": "ਅੰਤਰ-ਵਿਕੀ ਮੰਗ",
+       "import-interwiki-sourcewiki": "ਮੁੱਢਲਾ ਵਿਕੀ:",
+       "import-interwiki-sourcepage": "ਮੁੱਢਲਾ ਸਫ਼ਾ:",
        "import-interwiki-templates": "ਸਾਰੇ ਫਰਮੇ ਸ਼ਾਮਲ ਕਰੋ",
        "import-interwiki-submit": "ਮੰਗਾਓ",
+       "import-interwiki-namespace": "ਨੀਯਤ ਨਾਂ-ਥਾਂ:",
        "import-upload-filename": "ਫ਼ਾਈਲ ਦਾ ਨਾਂ:",
        "import-comment": "ਟਿੱਪਣੀ:",
        "importstart": "ਪੇਜ ਇੰਪੋਰਟ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ...",
        "import-token-mismatch": "ਇਸ ਇਜਲਾਸ ਦਾ ਡਾਟਾ ਉੱਡ ਗਿਆ।\nਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।",
        "import-invalid-interwiki": "ਦੱਸੇ ਹੋਏ ਵਿਕੀ ਤੋਂ ਮੰਗਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ।",
        "importlogpage": "ਮੰਗਾਉਣ ਦਾ ਚਿੱਠਾ",
-       "import-logentry-upload-detail": "$1 ਰੀਵਿਜਨ",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|ਸੁਧਾਈ|ਸੁਧਾਈਆਂ}} ਦੀ ਦਰਾਮਦ ਹੋਈ",
+       "import-logentry-interwiki": "$1 ਦੀ ਵਿਕੀ-ਪਾਰ ਘੱਲਿਆ",
        "tooltip-pt-userpage": "ਤੁਹਾਡਾ ਵਰਤੋਂਕਾਰ ਸਫ਼ਾ",
        "tooltip-pt-mytalk": "ਤੁਹਾਡਾ ਗੱਲ-ਬਾਤ ਸਫ਼ਾ",
        "tooltip-pt-anontalk": "ਇਸ IP ਪਤੇ ਤੋਂ ਹੋਈਆਂ ਸੋਧਾਂ ਬਾਰੇ ਚਰਚਾ",
-       "tooltip-pt-preferences": "ਤà©\81ਹਾਡà©\80à¨\86à¨\82 à¨ªà¨¸à©°à¨¦ਾਂ",
+       "tooltip-pt-preferences": "ਤà©\81ਹਾਡà©\80à¨\86à¨\82 à¨¤à¨°à¨\9cà©\80ਹਾਂ",
        "tooltip-pt-watchlist": "ਉਹਨਾਂ ਸਫ਼ਿਆਂ ਦੀ ਸੂਚੀ ਜਿਹਨਾਂ ਦੀਆਂ ਤਬਦੀਲੀਆਂ 'ਤੇ ਤੁਸੀਂ ਅੱਖ ਰੱਖ ਰਹੇ ਹੋ",
        "tooltip-pt-mycontris": "ਤੁਹਾਡੇ ਯੋਗਦਾਨਾਂ ਦੀ ਸੂਚੀ",
        "tooltip-pt-login": "ਤੁਹਾਨੂੰ ਦਾਖ਼ਲ ਹੋਣ ਲਈ ਪ੍ਰੇਰਿਆ ਜਾਂਦਾ ਹੈ; ਪਰ ਇਹ ਕੋਈ ਲਾਜ਼ਮੀ ਨਹੀਂ",
-       "tooltip-pt-logout": "ਸਾà¨\88à¨\9f à¨¤à©\8bà¨\82 à¨µà¨¿à¨¦à¨¾à¨\88 à¨²à¨\93",
+       "tooltip-pt-logout": "ਸਾà¨\88à¨\9f à¨¤à©\8bà¨\82 à¨¬à¨¾à¨¹à¨° à¨\86à¨\89",
        "tooltip-ca-talk": "ਸਮਗੱਰੀ ਸਫ਼ੇ ਬਾਰੇ ਚਰਚਾ",
        "tooltip-ca-edit": "ਤੁਸੀਂ ਇਹ ਸਫ਼ਾ ਸੋਧ ਸਕਦੇ ਹੋ। ਕਿਰਪਾ ਕਰਕੇ ਤਬਦੀਲੀ ਸਾਂਭਣ ਤੋਂ ਪਹਿਲਾਂ ਝਲਕ ਵੇਖੋ।",
        "tooltip-ca-addsection": "ਨਵਾਂ ਭਾਗ ਸ਼ੁਰੂ ਕਰੋ",
        "tooltip-t-emailuser": "ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ",
        "tooltip-t-upload": "ਫ਼ਾਈਲਾਂ ਅਪਲੋਡ ਕਰੋ",
        "tooltip-t-specialpages": "ਸਾਰੇ ਖ਼ਾਸ ਸਫ਼ਿਆਂ ਦੀ ਲਿਸਟ",
-       "tooltip-t-print": "à¨\87ਸ à¨¸à¨«à¨¼à©\87 à¨¦à¨¾ à¨\9bਪਣਯà©\8bà¨\97 à¨µà¨°à¨\9cਨ",
+       "tooltip-t-print": "à¨\87ਸ à¨¸à¨«à¨¼à©\87 à¨¦à¨¾ à¨\9bਪਣਯà©\8bà¨\97 à¨°à©\82ਪ",
        "tooltip-t-permalink": "ਸਫ਼ੇ ਦੇ ਇਸ ਰੀਵਿਜਨ ਲਈ ਪੱਕੀ ਕੜੀ",
        "tooltip-ca-nstab-main": "ਸਮੱਗਰੀ ਸਫ਼ਾ ਵੇਖੋ",
        "tooltip-ca-nstab-user": "ਵਰਤੋਂਕਾਰ ਸਫ਼ਾ ਵੇਖੋ",
        "tooltip-undo": "\"ਉਧੇੜਨਾ\" ਇਸ ਤਬਦੀਲੀ ਨੂੰ ਰੱਦ ਕਰਕੇ ਸੋਧ ਫਾਰਮ ਨੂੰ ਝਲਕ ਦੇ ਅੰਦਾਜ਼ ਵਿੱਚ ਦਿਖਾਉਂਦਾ ਹੈ।\nਇੰਝ \"ਸਾਰ\" ਵਿੱਚ ਤਬਦੀਲੀ ਨਕਾਰਨ ਦਾ ਕਾਰਨ ਲਿਖਿਆ ਜਾ ਸਕਦਾ ਹੈ।",
        "tooltip-preferences-save": "ਪਸੰਦ ਸੰਭਾਲੋ",
        "tooltip-summary": "ਸੰਖੇਪ ਸਾਰ ਦਰਜ ਕਰੋ",
+       "siteuser": "{{SITENAME}} ਵਰਤੋਂਕਾਰ $1",
+       "anonuser": "{{SITENAME}} ਬੇਨਾਮ ਵਰਤੋਂਕਾਰ $1",
        "lastmodifiedatby": "ਇਹ ਸਫ਼ਾ ਆਖ਼ਰੀ ਵਾਰ $1 ਨੂੰ $2 ’ਤੇ $3 ਨੇ ਸੋਧਿਆ ਸੀ।",
+       "othercontribs": "$1 ਦੇ ਕਾਰਜ 'ਤੇ ਅਧਾਰਤ।",
        "others": "ਹੋਰ",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|ਵਰਤੋਂਕਾਰ|ਵਰਤੋਂਕਾਰਾਂ}} $1",
+       "anonusers": "{{SITENAME}} ਬੇਨਾਮ {{PLURAL:$2|ਵਰਤੋਂਕਾਰ|ਵਰਤੋਂਕਾਰ}} $1",
        "creditspage": "ਸਫ਼ੇ ਬਾਬਤ ਕਰਜ਼",
        "spamprotectiontitle": "Spam ਸੁਰੱਖਿਆ ਫਿਲਟਰ",
+       "pageinfo-title": "\"$1\" ਵਾਸਤੇ ਜਾਣਕਾਰੀ",
+       "pageinfo-not-current": "ਅਫ਼ਸੋਸ, ਪੁਰਾਣੀਆਂ ਸੁਧਾਈਆਂ ਵਾਸਤੇ ਇਹ ਜਾਣਕਾਰੀ ਦੇਣੀ ਅਸੰਭਵ ਹੈ।",
        "pageinfo-header-basic": "ਮੁੱਢਲੀ ਜਾਣਕਾਰੀ",
        "pageinfo-header-edits": "ਸੋਧਾਂ ਦਾ ਅਤੀਤ",
        "pageinfo-header-restrictions": "ਸਫ਼ੇ ਦੀ ਸੁਰੱਖਿਆ",
        "pageinfo-header-properties": "ਸਫ਼ਾ ਵਿਸ਼ੇਸ਼ਤਾ",
+       "pageinfo-display-title": "ਨੁਮਾਇਸ਼ੀ ਸਿਰਲੇਖ",
        "pageinfo-length": "ਸਫ਼ੇ ਦੀ ਲੰਬਾਈ (ਬਾਈਟਾਂ ਵਿਚ)",
        "pageinfo-article-id": "ਸਫ਼ੇ ਦੀ ਸ਼ਨਾਖ਼ਤ",
        "pageinfo-language": "ਸਫ਼ੇ ਦੀ ਸਮੱਗਰੀ ਦੀ ਭਾਸ਼ਾ",
        "pageinfo-robot-policy": "ਇੰਜਨ ਦੀ ਹਾਲਤ ਖੋਜੋ",
        "pageinfo-robot-index": "ਮਨਜ਼ੂਰ ਹੈ",
        "pageinfo-robot-noindex": "ਨਾ-ਮਨਜ਼ੂਰ",
-       "pageinfo-views": "ਵਖਾਵਿਆਂ ਦੀ ਗਿਣਤੀ",
        "pageinfo-watchers": "ਸਫ਼ੇ ’ਤੇ ਨਜ਼ਰ ਰੱਖਣ ਵਾਲਿਆਂ ਦੀ ਗਿਣਤੀ",
        "pageinfo-subpages-name": "ਇਸ ਸਫ਼ੇ ਦੇ ਉਪ-ਸਫ਼ੇ",
+       "pageinfo-firstuser": "ਸਫ਼ੇ ਦਾ ਉਸਰਈਆ",
+       "pageinfo-firsttime": "ਸਫ਼ਾ ਬਣਨ ਦੀ ਮਿਤੀ",
        "pageinfo-lastuser": "ਸਭ ਤੋਂ ਨਵਾਂ ਸੰਪਾਦਕ",
        "pageinfo-lasttime": "ਸਭ ਤੋਂ ਨਵੀਂ ਸੋਧ ਦੀ ਮਿਤੀ",
        "pageinfo-edits": "ਕੁੱਲ ਸੋਧਾਂ",
+       "pageinfo-authors": "ਨਿਵੇਕਲੇ ਲੇਖਕਾਂ ਦੀ ਕੁੱਲ ਗਿਣਤੀ",
+       "pageinfo-recent-edits": "ਸੋਧਾਂ ਦੀ ਹਾਲੀਆ ਗਿਣਤੀ (ਪਿਛਲੇ $1 ਵਿੱਚ)",
+       "pageinfo-recent-authors": "ਨਿਵੇਕਲੇ ਲੇਖਕਾਂ ਦੀ ਹਾਲੀਆ ਗਿਣਤੀ",
+       "pageinfo-magic-words": "ਜਾਦੂਈ {{PLURAL:$1|ਸ਼ਬਦ|ਸ਼ਬਦ}} ($1)",
+       "pageinfo-hidden-categories": "{{PLURAL:$1|ਲੁਕੀ ਸ਼੍ਰੇਣੀ|ਲੁਕੀਆਂ ਸ਼੍ਰੇਣੀਆਂ}} ($1)",
        "pageinfo-toolboxlink": "ਸਫ਼ੇ ਬਾਬਤ ਜਾਣਕਾਰੀ",
        "pageinfo-redirectsto-info": "ਜਾਣਕਾਰੀ",
        "pageinfo-contentpage": "ਸਮੱਗਰੀ ਸਫ਼ੇ ਵਜੋਂ ਗਿਣਿਆ ਗਿਆ",
        "pageinfo-category-pages": "ਸਫ਼ਿਆਂ ਦੀ ਗਿਣਤੀ",
        "pageinfo-category-subcats": "ਉਪ-ਸ਼੍ਰੇਣੀਆਂ ਦੀ ਗਿਣਤੀ",
        "pageinfo-category-files": "ਫ਼ਾਈਲਾਂ ਦੀ ਗਿਣਤੀ",
+       "markaspatrolleddiff": "ਗਸ਼ਤ ਕੀਤੇ ਵਜੋਂ ਨਿਸ਼ਾਨ ਲਾਉ",
+       "markaspatrolledtext": "ਇਸ ਸਫ਼ੇ ਉੱਤੇ ਗਸ਼ਤ ਕੀਤੇ ਵਜੋਂ ਨਿਸ਼ਾਨ ਲਾਉ",
+       "markedaspatrolled": "ਗਸ਼ਤ ਕੀਤੇ ਵਜੋਂ ਨਿਸ਼ਾਨ ਲਾਇਆ",
+       "markedaspatrollederror": "ਗਸ਼ਤ ਕੀਤੇ ਵਜੋਂ ਨਿਸ਼ਾਨ ਨਹੀਂ ਲਾਇਆ ਜਾ ਸਕਦਾ",
+       "patrol-log-page": "ਗਸ਼ਤ ਦਾ ਇੰਦਰਾਜ",
+       "patrol-log-header": "ਇਹ ਗਸ਼ਤ ਕੀਤੀਆਂ ਸੁਧਾਈਆਂ ਦਾ ਇੰਦਰਾਜ ਹੈ।",
+       "deletedrevision": "ਪੁਰਾਣੀ ਸੁਧਾਈ $1 ਮਿਟਾਈ ਗਈ",
+       "filedeleteerror-short": "ਇਹ ਫ਼ਾਈਲ ਮਿਟਾਉਣ 'ਚ ਦੋਸ਼: $1",
        "previousdiff": "← ਪੁਰਾਣੀ ਤਬਦੀਲੀ",
        "nextdiff": "ਨਵੀਂ ਤਬਦੀਲੀ →",
        "thumbsize": "ਥੰਮਨੇਲ ਆਕਾਰ:",
        "file-nohires": "ਇਸ ਤੋਂ ਵੱਡੀ ਤਸਵੀਰ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।",
        "svg-long-desc": "SVG ਫ਼ਾਈਲ, ਆਮ ਤੌਰ ’ਤੇ $1 × $2 ਪਿਕਸਲ, ਫ਼ਾਈਲ ਦਾ ਅਕਾਰ: $3",
        "show-big-image": "ਅਸਲ ਫਾਈਲ",
+       "show-big-image-preview": "ਇਸ ਝਾਤ ਦਾ ਅਕਾਰ: $1.",
        "show-big-image-size": "$1 × $2 ਪਿਕਸਲ",
        "newimages": "ਨਵੀਆਂ ਫ਼ਾਈਲਾਂ ਦੀ ਗੈਲਰੀ",
        "newimages-legend": "ਫਿਲਟਰ",
+       "newimages-label": "ਫ਼ਾਈਲ ਦਾ ਨਾਂ (ਜਾਂ ਉਹਦਾ ਕੋਈ ਹਿੱਸਾ):",
+       "newimages-showbots": "ਮਸ਼ੀਨਾਂ ਦੇ ਚੜ੍ਹਾਵੇ ਵਿਖਾਉ",
        "noimages": "ਵੇਖਣ ਲਈ ਕੁਝ ਨਹੀਂ",
        "ilsubmit": "ਖੋਜ",
        "bydate": "ਮਿਤੀ ਨਾਲ",
        "metadata-fields": "ਇਸ ਸੁਨੇਹੇ ਵਿੱਚ ਸੂਚੀਬੱਧ ਖੇਤਰ ਚਿੱਤਰ ਪੰਨੇ ’ਚ ਸ਼ਾਮਲ ਕੀਤੇ ਜਾਣਗੇ ਜੋ ਉਦੋਂ ਦਿੱਸਦੇ ਹਨ ਜਦੋ ਮੈਟਾਡੈਟਾ ਖਾਕਾ ਬੰਦ ਹੋਵੇ। ਬਾਕੀ ਉਂਞ ਹੀ ਲੁਕੇ ਹੋਣਗੇ।",
        "exif-imagewidth": "ਚੌੜਾਈ",
        "exif-imagelength": "ਉਚਾਈ",
+       "exif-compression": "ਨਪੀੜਨ ਦੀ ਜੁਗਤ",
+       "exif-photometricinterpretation": "ਪਿਕਸਲਾਂ ਦੀ ਬਣਤਰ",
+       "exif-orientation": "ਦਿਸ਼ਾਮਾਨ",
        "exif-samplesperpixel": "ਭਾਗਾਂ ਦੀ ਗਿਣਤੀ",
+       "exif-planarconfiguration": "ਅੰਕੜਿਆਂ ਦਾ ਇੰਤਜ਼ਾਮ",
+       "exif-ycbcrpositioning": "Y ਅਤੇ C ਦਾ ਟਿਕਾਣਾ",
+       "exif-xresolution": "ਲੇਟਵੀਂ ਨੁਕਤਾ-ਗਿਣਤੀ",
+       "exif-yresolution": "ਖੜ੍ਹਵੀਂ ਨੁਕਤਾ-ਗਿਣਤੀ",
+       "exif-stripoffsets": "ਤਸਵੀਰੀ ਅੰਕੜਿਆਂ ਦਾ ਟਿਕਾਣਾ",
        "exif-rowsperstrip": "ਪ੍ਰਤੀ ਪੱਟੀ ਕਤਾਰਾਂ ਦੀ ਗਿਣਤੀ",
+       "exif-stripbytecounts": "ਹਰੇਕ ਨਪੀੜੀ ਪੱਟੀ 'ਚ ਬਾਈਟ",
        "exif-jpeginterchangeformatlength": "JPEG ਸਮੱਗਰੀ ਦੇ ਬਾਈਟ",
+       "exif-whitepoint": "ਚਿੱਟੀ ਬਿੰਦੀ ਦੀ ਰੰਗਤ",
+       "exif-primarychromaticities": "ਮੁੱਢਲਿਆਂ ਦੀ ਰੰਗਤ",
+       "exif-datetime": "ਫ਼ਾਈਲ ਤਬਦੀਲੀ ਦੀ ਮਿਤੀ ਅਤੇ ਸਮਾਂ",
        "exif-imagedescription": "ਚਿੱਤਰ ਟਾਇਟਲ",
        "exif-make": "ਕੈਮਰਾ ਨਿਰਮਾਤਾ",
        "exif-model": "ਕੈਮਰਾ ਮਾਡਲ",
        "exif-software": "ਵਰਤਿਆ ਸਾਫਟਵੇਅਰ",
        "exif-artist": "ਲੇਖਕ",
        "exif-copyright": "ਕਾਪੀਰਾਈਟ ਟਾਇਟਲ",
+       "exif-exifversion": "ਐਗਜ਼ਿਫ਼ ਦਾ ਰੂਪ",
        "exif-pixelydimension": "ਤਸਵੀਰ ਦੀ ਚੌੜਾਈ",
        "exif-pixelxdimension": "ਤਸਵੀਰ ਦੀ ਲੰਬਾਈ",
        "exif-usercomment": "ਵਰਤੋਂਕਾਰ ਦੀਆਂ ਟਿੱਪਣੀਆਂ",
        "exif-relatedsoundfile": "ਮਿਲਦੀ-ਜੁਲਦੀ ਆਡੀਓ ਫ਼ਾਈਲ",
+       "exif-datetimedigitized": "ਅੰਕਰੂਪ ਕਰਨ ਦੀ ਮਿਤੀ ਅਤੇ ਸਮਾਂ",
        "exif-fnumber": "ਐੱਫ਼ ਨੰਬਰ",
        "exif-subjectdistance": "ਵਿਸ਼ੇ ਦੀ ਵਿੱਥ",
        "exif-lightsource": "ਚਾਨਣ ਦਾ ਸਰੋਤ",
        "exif-focallength": "ਲੈਨਜ਼ ਦੀ ਫੋਕਲ-ਲੰਬਾਈ",
        "exif-subjectarea": "ਵਿਸ਼ਾ ਖੇਤਰ",
        "exif-flashenergy": "ਫ਼ਲੈਸ਼ ਦੀ ਊਰਜਾ",
+       "exif-subjectlocation": "ਵਿਸ਼ੇ ਦਾ ਟਿਕਾਣਾ",
+       "exif-exposureindex": "ਉਘਾੜ ਸੂਚਕ",
        "exif-filesource": "ਫ਼ਾਈਲ ਦਾ ਸਰੋਤ",
        "exif-scenetype": "ਸੀਨ ਦੀ ਕਿਸਮ",
+       "exif-whitebalance": "ਚਿੱਟਾ ਸੰਤੁਲਨ",
+       "exif-contrast": "ਵਖਰੇਵਾਂ",
+       "exif-saturation": "ਰਜਾਓ",
+       "exif-sharpness": "ਤਿੱਖਾਪਣ",
+       "exif-devicesettingdescription": "ਜੰਤਰ ਦੀਆਂ ਸੈਟਿੰਗਾਂ ਦਾ ਵੇਰਵਾ",
        "exif-gpslatituderef": "ਉੱਤਰੀ ਜਾਂ ਦੱਖਣੀ ਅਕਸ਼ਾਂਸ਼",
        "exif-gpslatitude": "ਅਕਸ਼ਾਂਸ਼",
        "exif-gpslongituderef": "ਪੂਰਬੀ ਜਾਂ ਪੱਛਮੀ ਰੇਖਾਂਸ਼",
        "exif-gpsaltitude": "ਉਚਾਈ",
        "exif-gpstimestamp": "ਜੀ੦ਪੀ੦ਐੱਸ ਸਮਾਂ (ਪ੍ਰਮਾਣੂ ਘੜੀ)",
        "exif-gpssatellites": "ਮਿਣਨ ਲਈ ਵਰਤੇ ਗਏ ਉਪਗ੍ਰਹਿ",
+       "exif-gpsstatus": "ਵਸੂਲੀਏ ਦੀ ਹਾਲਤ",
+       "exif-gpsmeasuremode": "ਨਾਪ ਦਾ ਤਰੀਕਾ",
+       "exif-gpsdop": "ਨਾਪ ਦਾ ਸਹੀਪੁਣਾ",
        "exif-gpsspeedref": "ਗਤੀ ਦੀ ਇਕਾਈ",
+       "exif-gpsspeed": "ਜੀ.ਪੀ.ਐੱਸ. ਵਸੂਲੀਏ ਦੀ ਰਫ਼ਤਾਰ",
        "exif-gpstrack": "ਚਾਲ ਦੀ ਦਿਸ਼ਾ",
        "exif-gpsimgdirection": "ਤਸਵੀਰ ਦੀ ਦਿਸ਼ਾ",
+       "exif-gpsdestdistance": "ਮੰਜ਼ਲ ਤੱਕ ਦੂਰੀ",
+       "exif-gpsprocessingmethod": "ਜੀ.ਪੀ.ਐੱਸ. ਕਾਰਵਾਈ ਦੇ ਤਰੀਕੇ ਦਾ ਨਾਂ",
        "exif-gpsareainformation": "ਜੀਪੀਐੱਸ ਖੇਤਰ ਦਾ ਨਾਂ",
        "exif-gpsdatestamp": "GPS ਮਿਤੀ",
+       "exif-keywords": "ਖ਼ਾਸ ਲਫ਼ਜ਼",
+       "exif-worldregioncreated": "ਦੁਨੀਆਂ ਦਾ ਉਹ ਇਲਾਕਾ ਜਿੱਥੇ ਇਹ ਤਸਵੀਰ ਲਈ ਗਈ ਸੀ",
        "exif-countrycreated": "ਉਹ ਦੇਸ਼ ਜਿਸ ਵਿਚ ਇਹ ਤਸਵੀਰ ਲਈ ਗਈ ਸੀ",
        "exif-countrycodecreated": "ਉਸ ਦੇਸ਼ ਦਾ ਕੋਡ ਜਿਸ ਵਿਚ ਇਹ ਤਸਵੀਰ ਲਈ ਗਈ ਸੀ",
        "exif-provinceorstatecreated": "ਸੂਬਾ ਜਾਂ ਰਾਜ ਜਿਸ ਵਿਚ ਇਹ ਤਸਵੀਰ ਲਈ ਗਈ ਸੀ",
        "exif-citycreated": "ਸ਼ਹਿਰ ਜਿਸ ਵਿਚ ਇਹ ਤਸਵੀਰ ਲਈ ਗਈ ਸੀ",
+       "exif-sublocationcreated": "ਸ਼ਹਿਰ ਦਾ ਉਹ ਟਿਕਾਣਾ ਜਿੱਥੇ ਇਹ ਤਸਵੀਰ ਲਈ ਗਈ ਸੀ",
        "exif-worldregiondest": "ਦਰਸਾਇਆ ਗਿਆ ਦੁਨਿਆਵੀ ਖੇਤਰ",
        "exif-countrydest": "ਦਰਸਾਇਆ ਗਿਆ ਦੇਸ਼",
        "exif-countrycodedest": "ਦਰਸਾਏ ਗਏ ਦੇਸ਼ ਲਈ ਕੋਡ",
        "exif-provinceorstatedest": "ਦਰਸਾਇਆ ਗਿਆ ਸੂਬਾ ਜਾਂ ਰਾਜ",
        "exif-citydest": "ਦਰਸਾਇਆ ਗਿਆ ਸ਼ਹਿਰ",
+       "exif-sublocationdest": "ਵਿਖਾਏ ਗਏ ਸ਼ਹਿਰ ਦਾ ਟਿਕਾਣਾ",
        "exif-objectname": "ਛੋਟਾ ਸਿਰਲੇਖ",
        "exif-specialinstructions": "ਖ਼ਾਸ ਹਦਾਇਤਾਂ",
        "exif-headline": "ਸਿਰਨਾਵਾਂ",
        "exif-source": "ਸਰੋਤ",
        "exif-editstatus": "ਤਸਵੀਰ ਦਾ ਸੰਪਾਦਕੀ ਰੁਤਬਾ",
+       "exif-urgency": "ਲੋੜਵੰਦੀ",
+       "exif-fixtureidentifier": "ਜੜਤ ਦਾ ਨਾਂ",
        "exif-locationdest": "ਦਰਸਾਈ ਗਈ ਥਾਂ",
        "exif-locationdestcode": "ਦਰਸਾਈ ਥਾਂ ਦਾ ਕੋਡ",
        "exif-contact": "ਰਾਬਤੇ ਦੀ ਜਾਣਕਾਰੀ",
        "exif-writer": "ਲੇਖਕ",
-       "exif-languagecode": "ਭਾਸ਼ਾ",
+       "exif-languagecode": "ਬà©\8bਲà©\80",
        "exif-iimversion": "IIM ਵਰਜ਼ਨ",
        "exif-iimcategory": "ਸ਼੍ਰੇਣੀ",
+       "exif-iimsupplementalcategory": "ਪੂਰਕ ਸ਼੍ਰੇਣੀਆਂ",
+       "exif-datetimeexpires": "ਇਸ ਮਗਰੋਂ ਨ ਵਰਤੋ",
+       "exif-identifier": "ਸ਼ਨਾਖ਼ਤਕਾਰ",
        "exif-lens": "ਵਰਤਿਆ ਗਿਆ ਲੈਨਜ਼",
        "exif-serialnumber": "ਕੈਮਰੇ ਦਾ ਸੀਰੀਅਲ ਨੰਬਰ",
        "exif-cameraownername": "ਕੈਮਰੇ ਦਾ ਮਾਲਕ",
        "exif-label": "ਲੇਬਲ",
        "exif-datetimemetadata": "ਮੈਟਾਡਾਟਾ ਦੀ ਆਖ਼ਰੀ ਤਬਦੀਲੀ ਦੀ ਮਿਤੀ",
        "exif-nickname": "ਤਸਵੀਰ ਦਾ ਗ਼ੈਰ-ਰਸਮੀ ਨਾਂ",
+       "exif-rating": "ਦਰਜਾ (੫ ਵਿੱਚੋਂ)",
        "exif-rightscertificate": "ਹੱਕਾਂ ਦੇ ਪ੍ਰਬੰਧ ਦਾ ਪ੍ਰਮਾਣ-ਪੱਤਰ",
        "exif-copyrighted": "ਕਾਪੀਰਾਈਟ ਦਰਜਾ",
        "exif-copyrightowner": "ਕਾਪੀਰਾਈਟ ਦਾ ਮਾਲਕ",
        "exif-usageterms": "ਵਰਤੋਂ ਦੀਆਂ ਸ਼ਰਤਾਂ",
        "exif-webstatement": "ਕਾਪੀਰਾਈਟ ਦਾ ਆਨਲਾਈਨ ਬਿਆਨ",
+       "exif-originaldocumentid": "ਮੂਲ ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਲੱਖਣ ਸ਼ਨਾਖ਼ਤ",
+       "exif-licenseurl": "ਨਕਲ-ਹੱਕ ਲਸੰਸ ਵਾਸਤੇ ਯੂ.ਆਰ.ਐੱਲ.",
        "exif-pngfilecomment": "PNG ਫ਼ਾਈਲ ਦੀ ਟਿੱਪਣੀ",
        "exif-disclaimer": "ਦਾਅਵੇ",
        "exif-contentwarning": "ਸਮੱਗਰੀ ਸਬੰਧੀ ਚਿਤਾਵਨੀ",
        "exif-personinimage": "ਦਰਸਾਇਆ ਗਿਆ ਇਨਸਾਨ",
        "exif-originalimageheight": "ਕੱਟਣ ਤੋਂ ਪਹਿਲਾਂ ਤਸਵੀਰ ਦੀ ਉਚਾਈ",
        "exif-originalimagewidth": "ਕੱਟਣ ਤੋਂ ਪਹਿਲਾਂ ਤਸਵੀਰ ਦੀ ਚੌੜਾਈ",
+       "exif-compression-1": "ਬੇਨਪੀੜਿਆ",
+       "exif-copyrighted-true": "ਨਕਲ-ਹੱਕ ਹੇਠ",
        "exif-unknowndate": "ਅਣਪਛਾਤੀ ਮਿਤੀ",
        "exif-orientation-1": "ਸਧਾਰਨ",
+       "exif-orientation-2": "ਲੇਟਵੇਂ ਲੋਟ ਤੁਣਕਿਆ",
        "exif-orientation-3": "੧੮੦° ਘੁਮਾਇਆ ਗਿਆ",
+       "exif-orientation-4": "ਖੜ੍ਹੇ ਲੋਟ ਤੁਣਕਿਆ",
        "exif-orientation-6": "90° ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਇਆ",
        "exif-orientation-7": "90° ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਇਆ ਅਤੇ ਖੜ੍ਹਵੇਂ ਰੂਪ ਵਿੱਚ ਪਲਟਿਆ",
        "exif-orientation-8": "90° ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਇਆ",
        "exif-subjectdistance-value": "$1 ਮੀਟਰ",
        "exif-meteringmode-0": "ਅਣਪਛਾਤਾ",
        "exif-meteringmode-1": "ਔਸਤ",
+       "exif-meteringmode-3": "ਡੱਬ",
+       "exif-meteringmode-4": "ਬਹੁ-ਡੱਬ",
        "exif-meteringmode-5": "ਪੈਟਰਨ",
+       "exif-meteringmode-6": "ਅਧੂਰਾ",
        "exif-meteringmode-255": "ਹੋਰ",
        "exif-lightsource-0": "ਅਣਜਾਣ",
+       "exif-lightsource-1": "ਦਿਨ ਦਾ ਚਾਨਣ",
+       "exif-lightsource-2": "ਫ਼ਲੋਰਚਾਨਣ",
+       "exif-lightsource-3": "ਟੰਗਸਟੱਨ (ਭਖਦਾ ਚਾਨਣ)",
        "exif-lightsource-4": "ਫ਼ਲੈਸ਼",
        "exif-lightsource-9": "ਵਧੀਆ ਮੌਸਮ",
        "exif-lightsource-10": "ਬੱਦਲ ਵਾਲਾ ਮੌਸਮ",
+       "exif-lightsource-11": "ਛਾਂ",
        "exif-lightsource-17": "ਮਿਆਰੀ ਚਾਨਣ A",
        "exif-lightsource-18": "ਮਿਆਰੀ ਚਾਨਣ B",
        "exif-lightsource-19": "ਮਿਆਰੀ ਚਾਨਣ C",
        "exif-lightsource-255": "ਚਾਨਣ ਦਾ ਹੋਰ ਸਰੋਤ",
+       "exif-flash-fired-0": "ਲਿਸ਼ਕ ਨਹੀਂ ਵੱਜੀ",
+       "exif-flash-fired-1": "ਲਿਸ਼ਕ ਵੱਜੀ",
+       "exif-flash-mode-1": "ਲਿਸ਼ਕ ਦਾ ਲਾਜ਼ਮੀ ਵੱਜਣਾ",
+       "exif-flash-mode-2": "ਲਿਸ਼ਕ ਲਾਜ਼ਮੀ ਬੰਦ ਹੋਣੀ",
+       "exif-flash-mode-3": "ਆਪ-ਮੁਹਾਰਾ ਢੰਗ",
        "exif-focalplaneresolutionunit-2": "ਇੰਚ",
+       "exif-sensingmethod-1": "ਬੇਪਰਿਭਾਸ਼ਤ",
+       "exif-customrendered-0": "ਆਮ ਕਾਰਵਾਈ",
+       "exif-customrendered-1": "ਲੋੜ ਮੁਤਾਬਕ ਕਾਰਵਾਈ",
+       "exif-exposuremode-0": "ਸਵੈ-ਉਘਾੜ",
+       "exif-exposuremode-1": "ਹੱਥੀਂ ਉਘਾੜ",
        "exif-scenecapturetype-0": "ਸਟੈਂਡਰਡ",
        "exif-scenecapturetype-1": "ਲੈਂਡਸਕੇਪ",
        "exif-scenecapturetype-2": "ਪੋਰਟਰੇਟ",
        "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-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-urgency-normal": "ਸਧਾਰਨ ($1)",
        "exif-urgency-low": "ਨੀਵਾਂ ($1)",
        "exif-urgency-high": "ਉੱਚਾ ($1)",
-       "watchlistall2": "ਸਭ",
        "namespacesall": "ਸਭ",
        "monthsall": "ਸਭ",
        "confirmemail": "ਈ-ਮੇਲ ਪਤਾ ਤਸਦੀਕ ਕਰੋ",
        "confirmemail_send": "ਇੱਕ ਤਸਦੀਕੀ ਕੋਡ ਭੇਜੋ",
        "confirmemail_sent": "ਤਸਦੀਕੀ ਈਮੇਲ ਭੇਜੀ ਗਈ।",
        "confirmemail_invalid": "ਗਲਤ ਪੁਸ਼ਟੀ ਕੋਡ ਹੈ। ਕੋਡ ਦੀ ਮਿਆਦ ਪੁੱਗੀ ਹੋ ਸਕਦੀ ਹੈ।",
+       "confirmemail_needlogin": "ਆਪਣਾ ਈਮੇਲ ਪਤਾ ਤਸਦੀਕ ਕਰਾਉਣ ਵਾਸਤੇ $1 ਜੀ।",
        "confirmemail_success": "ਤੁਹਾਡਾ ਈਮੇਲ ਪਤਾ ਤਸਦੀਕ ਹੋ ਚੁੱਕਾ ਹੈ।\nਤੁਸੀਂ ਹੁਣ [[Special:UserLogin|ਲਾਗਇਨ]] ਕਰ ਕੇ ਵਿਕੀ ਦਾ ਮਜ਼ਾ ਸਕਦੇ ਹੋ।",
        "confirmemail_loggedin": "ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ ਹੁਣ ਤਸਦੀਕ ਹੋ ਚੁੱਕਾ ਹੈ।",
        "confirmemail_subject": "{{SITENAME}} ਈ-ਮੇਲ ਪਤਾ ਤਸਦੀਕ",
        "table_pager_empty": "ਕੋਈ ਨਤੀਜਾ ਨਹੀਂ",
        "autosumm-blank": "ਸਫ਼ੇ ਨੂੰ ਖ਼ਾਲੀ ਕੀਤਾ",
        "autosumm-new": "\"$1\" ਨਾਲ਼ ਸਫ਼ਾ ਬਣਾਇਆ",
+       "autosumm-newblank": "ਖ਼ਾਲੀ ਸਫ਼ਾ ਬਣਾਇਆ",
        "watchlistedit-normal-title": "ਨਿਗਰਾਨੀ-ਲਿਸਟ ਸੋਧੋ",
        "watchlistedit-normal-legend": "ਸਿਰਲੇਖਾਂ ਨੂੰ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿੱਚੋਂ ਹਟਾਓ",
        "watchlistedit-normal-submit": "ਸਿਰਲੇਖ ਹਟਾਓ",
        "watchlistedit-raw-done": "ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਅੱਪਡੇਟ ਹੋ ਗਈ ਹੈ।",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 ਸਿਰਲੇਖ ਸ਼ਾਮਲ ਕੀਤਾ|$1 ਸਿਰਲੇਖ ਸ਼ਾਮਲ ਕੀਤੇ}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 ਸਿਰਲੇਖ ਹਟਾਇਆ|$1 ਸਿਰਲੇਖ ਹਟਾਏ}}:",
+       "watchlistedit-clear-titles": "ਸਿਰਲੇਖ:",
+       "watchlistedit-clear-submit": "ਨਿਗਰਾਨ-ਸੂਚੀ ਸਾਫ਼ ਕਰੋ (ਇਹ ਪੱਕੇ ਤੌਰ 'ਤੇ ਹੈ!)",
+       "watchlistedit-clear-done": "ਤੁਹਾਡੀ ਨਿਗਰਾਨ-ਸੂਚੀ ਸਾਫ਼ ਕਰ ਦਿੱਤੀ ਗਈ ਹੈ।",
+       "watchlistedit-too-many": "ਇੱਥੇ ਵਿਖਾਉਣ ਵਾਸਤੇ ਬਾਹਲੇ ਸਫ਼ੇ ਹਨ।",
+       "watchlisttools-clear": "ਨਿਗਰਾਨ-ਸੂਚੀ ਸਾਫ਼ ਕਰੋ।",
        "watchlisttools-view": "ਸਬੰਧਤ ਤਬਦੀਲੀਆਂ ਵੇਖੋ",
        "watchlisttools-edit": "ਨਿਗਰਾਨੀ-ਸੂਚੀ ਵੇਖੋ ’ਤੇ ਸੋਧੋ",
        "watchlisttools-raw": "ਕੱਚੀ ਨਿਗਰਾਨ-ਸੂਚੀ ਸੋਧੋ",
        "duplicate-defaultsort": "ਪੁਰਾਣੀ ਮੂਲ ਕਰਮਾਂਕਨ ਕੁੰਜੀ $1 ਦੇ ਬਜਾਏ ਹੁਣ ਮੂਲ ਕਰਮਾਂਕਨ ਕੁੰਜੀ $2 ਹੋਵੇਗੀ।",
        "version": "ਵਰਜਨ",
-       "version-skins": "ਸà¨\95ਿਨਾਂ",
+       "version-skins": "ਥਾਪà©\80à¨\86à¨\82 à¨\96ੱਲਾਂ",
        "version-specialpages": "ਖ਼ਾਸ ਸਫ਼ੇ",
+       "version-variables": "ਬਦਲਣਹਾਰ",
+       "version-antispam": "ਫ਼ਜ਼ੂਲ ਮਨਾਹੀ",
        "version-other": "ਹੋਰ",
        "version-hooks": "ਹੁੱਕਾਂ",
        "version-hook-name": "ਹੁੱਕ ਦਾ ਨਾਂ",
-       "version-license": "ਲਸੰਸ",
+       "version-no-ext-name": "[ਕੋਈ ਨਾਂ ਨਹੀਂ]",
+       "version-license": "ਮੀਡੀਆਵਿਕੀ ਲਸੰਸ",
        "version-ext-license": "ਲਸੰਸ",
        "version-ext-colheader-name": "ਇਕਸਟੈਨਸ਼ਨ",
        "version-skin-colheader-name": "ਸਕਿਨ",
        "redirect-lookup": "ਲੱਭੋ:",
        "redirect-value": "ਮੁੱਲ:",
        "redirect-user": "ਵਰਤੋਂਕਾਰ ਦੀ ਆਈ.ਡੀ.",
+       "redirect-page": "ਸਫ਼ੇ ਦੀ ਸ਼ਨਾਖ਼ਤ",
        "redirect-revision": "ਸਫ਼ੇ ਦੀ ਦੁਹਰਾਈ",
        "redirect-file": "ਫ਼ਾਈਲ ਦਾ ਨਾਂ",
        "redirect-not-exists": "ਮੁੱਲ ਲੱਭਿਆ ਨਹੀਂ",
        "blankpage": "ਖ਼ਾਲੀ ਸਫ਼ਾ",
        "intentionallyblankpage": "ਇਹ ਸਫ਼ਾ ਜਾਣ-ਬੁੱਝ ਕੇ ਖ਼ਾਲੀ ਛੱਡਿਆ ਗਿਆ ਹੈ।",
        "external_image_whitelist": " #ਇਸ ਲਾਈਨ ਨੂੰ ਇੰਝ ਹੀ ਰਹਿਣ ਦਿਓ <pre>\n#ਹੇਠਾਂ ਓਹੀ ਐਕਸਪ੍ਰੈਸ਼ਨ ਪਾਓ (ਜਿਹੜਾ ਹਿੱਸਾ // ਦੇ ਵਿਚਾਲੇ ਹੈ)\n#ਇਹ ਬਾਹਰੀ ਤਸਵੀਰਾਂ ਦੇ URLs (ਹੌਟਲਿੰਕਡ) ਨਾਲ ਮਿਲਣਗੀਆਂ\n#ਜਿਹੜੀਆਂ ਮਿਲਣਗੀਆਂ ਓਹ ਬਤੌਰ ਤਸਵੀਰਾਂ ਦਿੱਸਣਗੀਆਂ ਨਹੀਂ ਤਾਂ ਤਸਵੀਰ ਦਾ ਸਿਰਫ਼ ਲਿੰਕ ਨਜ਼ਰ ਆਵੇਗਾ\n#'#' ਨਾਲ਼ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੀਆਂ ਲਾਈਨਾਂ ਟਿੱਪਣੀਆਂ ਵਾਂਗ ਲਈਆਂ ਜਾਂਦੀਆਂ ਹਨ\n#ਇਹ ਕੇਸ-ਇਨਸੈਂਸਟਿਵ ਹੈ\n\n#ਸਾਰੇ ਰੈਜੈਕਸ ਫ਼ਰੈਗਮੈਂਟ ਇਸ ਲਾਈਨ ਤੋਂ ਉੱਪਰ ਪਾਓ। ਇਸ ਲਾਈਨ ਨੂੰ ਇੰਝ ਹੀ ਰਹਿਣ ਦਿਓ </pre>",
-       "tag-filter": "[[Special:Tags|à¨\9fà©\88à¨\97]] à¨«à¨¿à¨²à¨\9fਰ:",
+       "tag-filter": "[[Special:Tags|ਨਿਸ਼ਾਨ]] à¨ªà©\8cਣà©\80:",
        "tag-filter-submit": "ਛਾਨਣੀ",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ਟੈਗ}}]]: $2)",
        "tags-title": "ਟੈਗ",
        "tags-tag": "ਟੈਗ ਦਾ ਨਾਮ",
        "tags-description-header": "ਅਰਥ ਦਾ ਪੂਰਾ ਬਿਓਰਾ",
        "tags-active-header": "ਸਰਗਰਮ?",
-       "tags-hitcount-header": "à¨\9fà©\88à¨\97 à¨\95à©\80ਤà©\80à¨\86à¨\82 ਤਬਦੀਲੀਆਂ",
+       "tags-hitcount-header": "ਨਿਸ਼ਾਨਦà©\87ਹ ਤਬਦੀਲੀਆਂ",
        "tags-active-yes": "ਹਾਂ",
        "tags-active-no": "ਨਹੀਂ",
        "tags-edit": "ਸੋਧੋ",
        "htmlform-chosen-placeholder": "ਕੋਈ ਚੋਣ ਚੁਣੋ",
        "htmlform-cloner-create": "ਹੋਰ ਜੋੜੋ",
        "htmlform-cloner-delete": "ਹਟਾਓ",
+       "htmlform-cloner-required": "ਘੱਟੋ-ਘੱਟ ਇੱਕ ਮੁੱਲ ਚਾਹੀਦਾ ਹੈ।",
        "logentry-delete-delete": "$1 ਨੇ ਸਫ਼ਾ $3 ਮਿਟਾਇਆ",
        "revdelete-content-hid": "ਸਮੱਗਰੀ ਲੁਕਾਈ ਹੋਈ",
        "revdelete-summary-hid": "ਸੋਧ ਸਾਰ ਲੁਕਾਈ ਹੋਈ",
        "logentry-newusers-create": "ਵਰਤੋਂਕਾਰ ਖਾਤਾ $1 ਬਣਾਇਆ ਗਿਆ",
        "logentry-newusers-create2": "ਵਰਤੋਂਕਾਰ ਖਾਤਾ $3, $1 ਦੁਆਰਾ ਬਣਾਇਆ ਗਿਆ ਸੀ",
        "rightsnone": "(ਕੋਈ ਨਹੀਂ)",
+       "revdelete-summary": "ਸੰਖੇਪ ਸੋਧ",
        "feedback-subject": "ਵਿਸ਼ਾ:",
        "feedback-message": "ਸੁਨੇਹਾ:",
        "feedback-cancel": "ਰੱਦ ਕਰੋ",
        "duration-centuries": "$1 {{PLURAL:$1|ਸਦੀ|ਸਦੀਆਂ}}",
        "duration-millennia": "$1 {{PLURAL:$1|ਸਾਹਸ਼ਤਾਬਦੀ|ਸਾਹਸ਼ਤਾਬਦੀਆਂ}}",
        "rotate-comment": "ਤਸਵੀਰ ਨੂੰ ਘੜੀ ਦੇ ਰੁਖ ਵਿਚ $1 {{PLURAL:$1|ਡਿਗਰੀ|ਡਿਗਰੀਆਂ}} ਨਾਲ਼ ਘੁਮਾਇਆ ਗਿਆ",
+       "limitreport-walltime": "ਹਕੀਕੀ ਸਮੇਂ ਦੀ ਵਰਤੋਂ",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|ਸਕਿੰਟ|ਸਕਿੰਟ}}",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|ਬਾਈਟ|ਬਾਈਟ}}",
+       "expand_templates_output": "ਨਤੀਜਾ",
        "expand_templates_ok": "ਠੀਕ ਹੈ",
        "expand_templates_remove_comments": "ਟਿੱਪਣੀਆਂ ਹਟਾਓ",
        "expand_templates_preview": "ਝਲਕ",
        "pagelang-name": "ਸਫ਼ਾ",
        "pagelang-language": "ਭਾਸ਼ਾ",
        "pagelang-use-default": "ਮੂਲ ਭਾਸ਼ਾ ਵਰਤੋਂ",
-       "pagelang-select-lang": "ਭਾਸ਼ਾ ਚੁਣੋ"
+       "pagelang-select-lang": "ਭਾਸ਼ਾ ਚੁਣੋ",
+       "right-pagelang": "ਸਫ਼ੇ ਦੀ ਭਾਸ਼ਾ ਬਦਲੋ",
+       "action-pagelang": "ਸਫ਼ੇ ਦੀ ਭਾਸ਼ਾ ਬਦਲੋ",
+       "mediastatistics-table-count": "ਫ਼ਾਈਲਾਂ ਦੀ ਗਿਣਤੀ",
+       "mediastatistics-table-totalbytes": "ਮਿਲ਼ਵਾਂ ਅਕਾਰ",
+       "mediastatistics-header-unknown": "ਅਣਪਛਾਤਾ",
+       "mediastatistics-header-audio": "ਆਡੀਓ",
+       "mediastatistics-header-video": "ਵੀਡੀਓਆਂ",
+       "mediastatistics-header-office": "ਦਫ਼ਤਰ",
+       "mediastatistics-header-text": "ਲਿਖਤੀ",
+       "json-error-syntax": "ਵਾਕ-ਵਿਉਂਤ 'ਚ ਦੋਸ਼"
 }
index 57e52a5..e7e7896 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Arikasikis",
-            "Spacebirdy"
-        ]
-    },
-    "tog-enotifwatchlistpages": "Manpa-awit na e-mail ed siak no abalo may sakey ya bolong ya babantayan ko",
-    "underline-always": "Naynay",
-    "underline-never": "Andin-balot",
-    "category_header": "Saray artikulo ed category ya \"$1\"",
-    "about": "Nipakar ed",
-    "article": "Bolong na laman",
-    "cancel": "I-tonda",
-    "mypage": "Say bolong ko",
-    "mytalk": "Say tongtongan ko",
-    "anontalk": "Tongtongan para ed sayan IP",
-    "and": "&#32;san",
-    "qbpageoptions": "Ayan bolong",
-    "returnto": "Impawel ed $1.",
-    "help": "Tolong",
-    "search": "Anapen",
-    "searchbutton": "Anapen",
-    "go": "Ula",
-    "searcharticle": "Ula",
-    "history": "Awaran na sayan bolong",
-    "history_short": "awaran na sayan bolong",
-    "printableversion": "Naigalot ya bersion",
-    "permalink": "Masiansian gawing",
-    "edit": "Baloen o dagdagan",
-    "delete": "Buralen",
-    "deletethispage": "Buralen so ayan page",
-    "protect": "Iyagel",
-    "protectthispage": "Iyagel yan bolong",
-    "unprotect": "aga la iyagel",
-    "unprotectthispage": "Aga la iyagel yan bolong",
-    "newpage": "Balon bolong",
-    "talkpage": "Pantongtongan yan bolong",
-    "specialpage": "Niduman Bolong",
-    "articlepage": "Nengnengen so content page",
-    "talk": "Tongtongan",
-    "userpage": "Basaen so bolong na manag-usar",
-    "mediawikipage": "Nengnengen so bolong na pakabat",
-    "viewhelppage": "Nengnengen so bolong na tolong",
-    "categorypage": "Nengnengen so bolong na saray category",
-    "viewtalkpage": "Nengnengen so tongtongan",
-    "otherlanguages": "Diad arom ran salita",
-    "lastmodifiedat": "Say ayan bolong: otet ya binalo nen $2, $1.",
-    "protectedpage": "Iyayagel yan bolong",
-    "jumptosearch": "anapen",
-    "aboutsite": "Nipakar ed {{SITENAME}}",
-    "aboutpage": "Project:Nipaakar",
-    "currentevents": "Saray nagagawa natan",
-    "currentevents-url": "Project:Saray nagagawa natan",
-    "edithelp": "Tolong nipakar ed panagbalo na artikulo",
-    "mainpage": "Arapan ya Bolong",
-    "mainpage-description": "Arapan ya Bolong",
-    "portal": "Pwerta na komyunidad",
-    "portal-url": "Project:Pwerta na Komyunidad",
-    "badaccess-group0": "Agmo sarag ya gaween so action ya kekerewen mo.",
-    "youhavenewmessages": "Walay $1 ($2).",
-    "youhavenewmessagesmulti": "Walay balo ran pakabat mo ed $1",
-    "viewdeleted": "Nengnengen so $1?",
-    "nstab-user": "Bolong na manag-usar",
-    "nstab-mediawiki": "Pakabat",
-    "badarticleerror": "Aga sarag ya gaween so ayan action ed sayan bolong.",
-    "cannotdelete": "Aga nabural so nibagan bolong o file. (Sarag ton abural la na arom.)",
-    "badtitle": "Aga sarag ya titulo",
-    "viewsource": "Nengnengen so pinanlapuan",
-    "viewsourcetext": "Sarag mon nengnengen san kopyaen so pinanlapuan na ayan bolong:",
-    "yourdomainname": "Say domain mo",
-    "login": "Onloob",
-    "logout": "Paway",
-    "userlogout": "Paway",
-    "createaccount": "Mangawa na account",
-    "gotaccountlink": "Onloob",
-    "badretype": "Aga parehas so en-type mo ran password.",
-    "acct_creation_throttle_hit": "Sorry, nangawala ka la na $1 account. Agka la makapangawa na account.",
-    "accountcreated": "Agawa so account",
-    "accountcreatedtext": "Agawa la so user account para $1.",
-    "changepassword": "Salatan so password",
-    "newpassword": "Balon password:",
-    "link_tip": "Gawing ed loob",
-    "minoredit": "Melag yan edit.",
-    "watchthis": "Bantayan yan bolong",
-    "preview": "Nengnengen",
-    "showdiff": "Ipanengneng so binalo",
-    "anoneditwarning": "'''Pasakbay:''' Agka ni limmoob. Aka-record so IP address mo ed agawgawa ed bolong.",
-    "blockedtitle": "Sebel ed sayan manag-usar",
-    "blockednoreason": "anggapon katunungan so inter",
-    "whitelistedittext": "Nakaukulan mo ya $1 umpian nabalo o nadagdagan ray bolobolong.",
-    "loginreqtitle": "Nakaukulan kan Onloob",
-    "loginreqlink": "onloob",
-    "loginreqpagetext": "Nakaukulan kan $1 umpian nanengneng so arom ran bolobolong.",
-    "accmailtitle": "Say Password impawet la.",
-    "accmailtext": "Empawet ed $2 so password para ed $1.",
-    "newarticle": "(Balo)",
-    "editing": "Babaloen so $1",
-    "yourdiff": "Saray niduma",
-    "copyrightwarning": "Tandaan komon ya amin ya contribution para ed {{SITENAME}} et nonoten ya pinaolian onong ed $2 (nengnengen so $1 para ed detalye).\nNo ag mo labay ya say inkorit mo ed sarag ya baloen odino ibonog ed anggan siopa, ag mo ipapalima dia.<br />\nSan ipropromisam met ya insulat mo yan dili o kinopyam ya manlapo ed sakey ya public domain odino parehas ya libren resource.\n'''AG MANPALIMA NA KIMEY YA WALAY COPYRIGHT TO YA ANGGAPOY ABOLOY!'''",
-    "cantcreateaccounttitle": "Aga makagawa na account",
-    "last": "sampot",
-    "histfirst": "Sankaunaan",
-    "histlast": "Sankautetan",
-    "mypreferences": "Saray preference ko",
-    "datedefault": "Anggapoy preference",
-    "prefs-datetime": "Bilang na agew san oras",
-    "prefs-rc": "Sampot ran binalo",
-    "prefs-watchlist": "Listaan na babantayan",
-    "prefs-editing": "Babaloen",
-    "searchresultshead": "Anapen",
-    "yourrealname": "Tuwan ngaran:",
-    "badsiglength": "Andukey ya maong so nickname. Say dukey to dapat mas daiset en say $1 ya character.",
-    "userrights-user-editname": "Isulat so username:",
-    "recentchanges": "Sampot ran binalo",
-    "hide": "Yamot",
-    "show": "Ipanengneng",
-    "recentchangeslinked": "Kabiangan ran binalo",
-    "recentchangeslinked-feed": "Kabiangan ran binalo",
-    "recentchangeslinked-toolbox": "Kabiangan ran binalo",
-    "upload": "Mangisigep na file",
-    "uploadlog": "Isigep so log",
-    "filesource": "Pinanlapuan:",
-    "uploadedfiles": "Insegep ran file",
-    "badfilename": "Binalo so ngaran na file, umpian \"$1\" so balon ngaran to.",
-    "sourcefilename": "Filename na pinanlapuan:",
-    "watchthisupload": "Bantayan yan bolong",
-    "listfiles_name": "Ngaran",
-    "imagelinks": "Saray Gawing",
-    "download": "mangileksab (download)",
-    "unusedtemplateswlh": "arom ran gawing",
-    "randompage": "Random ya bolong",
-    "randompage-nopages": "Anggapoy bolong ya wadya ed ayan namespace.",
-    "withoutinterwiki": "Saray bolobolong ya anggapoy gawing ya language",
-    "withoutinterwiki-summary": "Anggapoy gawin paulad version na arum ran salita so ontombok ran bolobolong:",
-    "shortpages": "Antikey ran bolong",
-    "longpages": "Andokoy ran bolong",
-    "protectedpages": "Iyayagel ran bolobolong",
-    "newpages": "Balo ran bolong",
-    "ancientpages": "Sankadaanan ran bolobolong",
-    "move": "Iyales",
-    "movethispage": "Iyales yan bolong",
-    "booksources": "Saray liblibron pinanlapuan",
-    "booksources-search-legend": "Mananap na saray libron pinanlapuan",
-    "booksources-go": "Ula",
-    "all-logs-page": "Amin ran log",
-    "allpages": "Amin ya bolobolong",
-    "alphaindexline": "$1 anggad $2",
-    "nextpage": "Ontombok ya page ($1)",
-    "allpagesfrom": "Ipanengneng ray bolobolong ya manlapod:",
-    "allarticles": "Amin ran bolobolong",
-    "allinnamespace": "Amin ya bolobolong ($1 namespace)",
-    "allpagessubmit": "Ula",
-    "allpagesprefix": "Ipanengneng so saray bolobolong ya walay prefix:",
-    "linksearch": "Anapen ramay gawing ed web",
-    "linksearch-pat": "Anapen so pattern:",
-    "linksearch-ok": "Anapen",
-    "emailuser": "E-mail so ayan user",
-    "emailfrom": "Manlapud",
-    "emailto": "Para ed",
-    "emailmessage": "Pakabat",
-    "emailsend": "Paawit",
-    "emailsent": "Say e-mail impawet la",
-    "emailsenttext": "Impawit la so e-mail message mo.",
-    "mywatchlist": "Listaan na babantayan ko",
-    "watchnologin": "Agka ni akaloob",
-    "addedwatchtext": "Impila so bolong ya \"[[:$1]]\" diad [[Special:Watchlist|listaan na babantayan]] mo. Isulat diman so saray ontombok ran idagdag o panagbalo ed sayan bolong san diad bolong na tongtongan. San akasulat ran '''mapatnag''' (bolded) ed [[Special:RecentChanges|listaan na saray sampot ran binalo]] umpian mas maganom ya nanengneng.\n\nNo labay mon ekalen may bolong diad listaan na babantayan, tapik mo labat so \"ekalen ed babantayan\" (unwatch) diad gilig ya bar.",
-    "watch": "bantayan",
-    "watchthispage": "Bantayan yan bolong",
-    "watching": "Babantayan...",
-    "created": "agawa",
-    "changed": "asalatan",
-    "deletepage": "Buralen so bolong",
-    "confirm": "Paletan",
-    "exblank": "Anggapoy laman na bolong",
-    "actioncomplete": "Asumpal lan agawa",
-    "deletedtext": "Abural lay \"$1\".\nPinengneng so $2 para ed listaan na saray abural ran balo.",
-    "deletecomment": "Katonongan",
-    "prot_1movedto2": "say [[$1]] enyales paula ed [[$2]]",
-    "protect-legend": "Palitaen so pangiyagel",
-    "protect-level-sysop": "Sysops labat",
-    "undelete": "Nengnengen so inekal ran bolobolong",
-    "viewdeletedpage": "Nengnengen so inekal ran bolong",
-    "undelete-search-box": "Anapen ramay binural ran bolobolong",
-    "undelete-search-prefix": "Ipanengneng ray bolobolong ya mangagapo ed:",
-    "undelete-search-submit": "Anapen",
-    "contributions": "Saray contribution na user",
-    "mycontris": "Saray entolong ko",
-    "year": "Taon:",
-    "sp-contributions-newbies-sub": "Para balo ran account",
-    "sp-contributions-submit": "Anapen",
-    "whatlinkshere": "Antoray akaturo dia",
-    "whatlinkshere-title": "Saray bolong ya aka-gawing ed $1",
-    "whatlinkshere-page": "Bolong:",
-    "blockip": "Isara ed para ayan manag-usar",
-    "ipbreason": "Katonongan",
-    "ipbsubmit": "Isebel ed sayan manag-usar",
-    "badipaddress": "Aga nayarin IP address",
-    "ipusubmit": "Aga la isebel so ayan address",
-    "ipblocklist": "Listaan na saray sebel ran IP address san username",
-    "ipblocklist-submit": "Anapen",
-    "expiringblock": "nabalang no $1 $2",
-    "blocklink": "isara",
-    "contribslink": "saray entolong to",
-    "move-page-legend": "Iyales so bolong",
-    "movearticle": "Iyales so bolong",
-    "movepagebtn": "Iyales so bolong",
-    "pagemovedsub": "Asumpal lan inyales",
-    "articleexists": "Wala lay bolong to may ngaran ya atan, odino aga valid so pinilim ya ngaran. Pili ka pa na arom ya ngaran.",
-    "movereason": "Katonongan",
-    "delete_and_move": "Buralen san iyales",
-    "delete_and_move_confirm": "On, buralen yan page",
-    "export-submit": "Ipaawit",
-    "export-addcat": "Iyarom",
-    "allmessages": "Saray pakabat na oksoy",
-    "allmessagesname": "Ngaran",
-    "allmessagestext": "Aya so listaan na amin ya pakabat na oksoy ya naanap ed MediaWiki namespace.",
-    "filemissing": "Nababalang so file",
-    "importnotext": "Andilugan odino anggapoy laman ton text",
-    "tooltip-pt-logout": "Paway",
-    "tooltip-ca-viewsource": "Iya-yagel yan bolong. Sarag mon nengnengen so pinanlapuan to.",
-    "tooltip-ca-protect": "Iyagel yan bolong",
-    "tooltip-ca-move": "Iyales so ayan bolong",
-    "tooltip-search": "Anapen {{SITENAME}}",
-    "tooltip-p-logo": "Arapan ya Bolong",
-    "tooltip-t-specialpages": "Listaan na amin ran niduman bolobolong",
-    "tooltip-ca-nstab-user": "Nengnengen so bolong na manag-usar",
-    "tooltip-ca-nstab-mediawiki": "Nengnengen so pakabat na oksoy",
-    "lastmodifiedatby": "Sampot ya binalo yan bolong nen agew ya $2, $1 nen $3.",
-    "ilsubmit": "Anapen",
-    "exif-filesource": "File na pinanlapuan",
-    "watchlistall2": "amin",
-    "namespacesall": "amin",
-    "monthsall": "amin",
-    "confirmemail": "Kumpirmaen so E-mail address",
-    "confirmemail_sent": "Empawet so confirmation e-mail.",
-    "confirmemail_needlogin": "Nakaukulan mo ya $1 umpian nakompirma so email address mo.",
-    "confirmemail_success": "Akompirma so e-mail address mo. Sarag mo lay man-log-in san panliketan so wiki.",
-    "confirmemail_loggedin": "Akompira la so e-mail address mo.",
-    "deletedwhileediting": "Pasakbay: Abural yan bolong nen ginapuan mon baloen!",
-    "confirm-purge-top": "Ekalen so cache na sayan bolong?",
-    "imgmultipagenext": "ontombok ya bolong →",
-    "imgmultigo": "Ula!",
-    "table_pager_next": "Ontombok ya bolong",
-    "table_pager_prev": "Embeneg ya bolong",
-    "table_pager_first": "Unaan ya bolong",
-    "table_pager_last": "Otet ya bolong",
-    "table_pager_limit_submit": "Ula",
-    "autosumm-blank": "Ekalen so amin ya laman na bolong",
-    "autosumm-replace": "Salatan yan bolong na '$1'",
-    "autoredircomment": "Ituturo paulad [[$1]]",
-    "autosumm-new": "Balon bolong: $1",
-    "livepreview-loading": "Ilulugan…",
-    "livepreview-ready": "Ilulugan… Akaparaan!",
-    "specialpages": "Niduma ran bolobolong"
+       "@metadata": {
+               "authors": [
+                       "Arikasikis",
+                       "Spacebirdy"
+               ]
+       },
+       "tog-enotifwatchlistpages": "Manpa-awit na e-mail ed siak no abalo may sakey ya bolong ya babantayan ko",
+       "underline-always": "Naynay",
+       "underline-never": "Andin-balot",
+       "category_header": "Saray artikulo ed category ya \"$1\"",
+       "about": "Nipakar ed",
+       "article": "Bolong na laman",
+       "cancel": "I-tonda",
+       "mypage": "Say bolong ko",
+       "mytalk": "Say tongtongan ko",
+       "anontalk": "Tongtongan para ed sayan IP",
+       "and": "&#32;san",
+       "qbpageoptions": "Ayan bolong",
+       "returnto": "Impawel ed $1.",
+       "help": "Tolong",
+       "search": "Anapen",
+       "searchbutton": "Anapen",
+       "go": "Ula",
+       "searcharticle": "Ula",
+       "history": "Awaran na sayan bolong",
+       "history_short": "awaran na sayan bolong",
+       "printableversion": "Naigalot ya bersion",
+       "permalink": "Masiansian gawing",
+       "edit": "Baloen o dagdagan",
+       "delete": "Buralen",
+       "deletethispage": "Buralen so ayan page",
+       "protect": "Iyagel",
+       "protectthispage": "Iyagel yan bolong",
+       "unprotect": "aga la iyagel",
+       "unprotectthispage": "Aga la iyagel yan bolong",
+       "newpage": "Balon bolong",
+       "talkpage": "Pantongtongan yan bolong",
+       "specialpage": "Niduman Bolong",
+       "articlepage": "Nengnengen so content page",
+       "talk": "Tongtongan",
+       "userpage": "Basaen so bolong na manag-usar",
+       "mediawikipage": "Nengnengen so bolong na pakabat",
+       "viewhelppage": "Nengnengen so bolong na tolong",
+       "categorypage": "Nengnengen so bolong na saray category",
+       "viewtalkpage": "Nengnengen so tongtongan",
+       "otherlanguages": "Diad arom ran salita",
+       "lastmodifiedat": "Say ayan bolong: otet ya binalo nen $2, $1.",
+       "protectedpage": "Iyayagel yan bolong",
+       "jumptosearch": "anapen",
+       "aboutsite": "Nipakar ed {{SITENAME}}",
+       "aboutpage": "Project:Nipaakar",
+       "currentevents": "Saray nagagawa natan",
+       "currentevents-url": "Project:Saray nagagawa natan",
+       "edithelp": "Tolong nipakar ed panagbalo na artikulo",
+       "mainpage": "Arapan ya Bolong",
+       "mainpage-description": "Arapan ya Bolong",
+       "portal": "Pwerta na komyunidad",
+       "portal-url": "Project:Pwerta na Komyunidad",
+       "badaccess-group0": "Agmo sarag ya gaween so action ya kekerewen mo.",
+       "youhavenewmessages": "Walay $1 ($2).",
+       "youhavenewmessagesmulti": "Walay balo ran pakabat mo ed $1",
+       "viewdeleted": "Nengnengen so $1?",
+       "nstab-user": "Bolong na manag-usar",
+       "nstab-mediawiki": "Pakabat",
+       "badarticleerror": "Aga sarag ya gaween so ayan action ed sayan bolong.",
+       "cannotdelete": "Aga nabural so nibagan bolong o file. (Sarag ton abural la na arom.)",
+       "badtitle": "Aga sarag ya titulo",
+       "viewsource": "Nengnengen so pinanlapuan",
+       "viewsourcetext": "Sarag mon nengnengen san kopyaen so pinanlapuan na ayan bolong:",
+       "yourdomainname": "Say domain mo",
+       "login": "Onloob",
+       "logout": "Paway",
+       "userlogout": "Paway",
+       "createaccount": "Mangawa na account",
+       "gotaccountlink": "Onloob",
+       "badretype": "Aga parehas so en-type mo ran password.",
+       "acct_creation_throttle_hit": "Sorry, nangawala ka la na $1 account. Agka la makapangawa na account.",
+       "accountcreated": "Agawa so account",
+       "accountcreatedtext": "Agawa la so user account para $1.",
+       "changepassword": "Salatan so password",
+       "newpassword": "Balon password:",
+       "link_tip": "Gawing ed loob",
+       "minoredit": "Melag yan edit.",
+       "watchthis": "Bantayan yan bolong",
+       "preview": "Nengnengen",
+       "showdiff": "Ipanengneng so binalo",
+       "anoneditwarning": "'''Pasakbay:''' Agka ni limmoob. Aka-record so IP address mo ed agawgawa ed bolong.",
+       "blockedtitle": "Sebel ed sayan manag-usar",
+       "blockednoreason": "anggapon katunungan so inter",
+       "whitelistedittext": "Nakaukulan mo ya $1 umpian nabalo o nadagdagan ray bolobolong.",
+       "loginreqtitle": "Nakaukulan kan Onloob",
+       "loginreqlink": "onloob",
+       "loginreqpagetext": "Nakaukulan kan $1 umpian nanengneng so arom ran bolobolong.",
+       "accmailtitle": "Say Password impawet la.",
+       "accmailtext": "Empawet ed $2 so password para ed $1.",
+       "newarticle": "(Balo)",
+       "editing": "Babaloen so $1",
+       "yourdiff": "Saray niduma",
+       "copyrightwarning": "Tandaan komon ya amin ya contribution para ed {{SITENAME}} et nonoten ya pinaolian onong ed $2 (nengnengen so $1 para ed detalye).\nNo ag mo labay ya say inkorit mo ed sarag ya baloen odino ibonog ed anggan siopa, ag mo ipapalima dia.<br />\nSan ipropromisam met ya insulat mo yan dili o kinopyam ya manlapo ed sakey ya public domain odino parehas ya libren resource.\n'''AG MANPALIMA NA KIMEY YA WALAY COPYRIGHT TO YA ANGGAPOY ABOLOY!'''",
+       "cantcreateaccounttitle": "Aga makagawa na account",
+       "last": "sampot",
+       "histfirst": "Sankaunaan",
+       "histlast": "Sankautetan",
+       "mypreferences": "Saray preference ko",
+       "datedefault": "Anggapoy preference",
+       "prefs-rc": "Sampot ran binalo",
+       "prefs-watchlist": "Listaan na babantayan",
+       "prefs-editing": "Babaloen",
+       "searchresultshead": "Anapen",
+       "yourrealname": "Tuwan ngaran:",
+       "badsiglength": "Andukey ya maong so nickname. Say dukey to dapat mas daiset en say $1 ya character.",
+       "userrights-user-editname": "Isulat so username:",
+       "recentchanges": "Sampot ran binalo",
+       "hide": "Yamot",
+       "show": "Ipanengneng",
+       "recentchangeslinked": "Kabiangan ran binalo",
+       "recentchangeslinked-feed": "Kabiangan ran binalo",
+       "recentchangeslinked-toolbox": "Kabiangan ran binalo",
+       "upload": "Mangisigep na file",
+       "filesource": "Pinanlapuan:",
+       "badfilename": "Binalo so ngaran na file, umpian \"$1\" so balon ngaran to.",
+       "sourcefilename": "Filename na pinanlapuan:",
+       "watchthisupload": "Bantayan yan bolong",
+       "listfiles_name": "Ngaran",
+       "imagelinks": "Saray Gawing",
+       "download": "mangileksab (download)",
+       "unusedtemplateswlh": "arom ran gawing",
+       "randompage": "Random ya bolong",
+       "randompage-nopages": "Anggapoy bolong ya wadya ed ayan namespace.",
+       "withoutinterwiki": "Saray bolobolong ya anggapoy gawing ya language",
+       "withoutinterwiki-summary": "Anggapoy gawin paulad version na arum ran salita so ontombok ran bolobolong:",
+       "shortpages": "Antikey ran bolong",
+       "longpages": "Andokoy ran bolong",
+       "protectedpages": "Iyayagel ran bolobolong",
+       "newpages": "Balo ran bolong",
+       "ancientpages": "Sankadaanan ran bolobolong",
+       "move": "Iyales",
+       "movethispage": "Iyales yan bolong",
+       "booksources": "Saray liblibron pinanlapuan",
+       "booksources-search-legend": "Mananap na saray libron pinanlapuan",
+       "all-logs-page": "Amin ran log",
+       "allpages": "Amin ya bolobolong",
+       "nextpage": "Ontombok ya page ($1)",
+       "allpagesfrom": "Ipanengneng ray bolobolong ya manlapod:",
+       "allarticles": "Amin ran bolobolong",
+       "allinnamespace": "Amin ya bolobolong ($1 namespace)",
+       "allpagessubmit": "Ula",
+       "allpagesprefix": "Ipanengneng so saray bolobolong ya walay prefix:",
+       "linksearch": "Anapen ramay gawing ed web",
+       "linksearch-pat": "Anapen so pattern:",
+       "linksearch-ok": "Anapen",
+       "emailuser": "E-mail so ayan user",
+       "emailfrom": "Manlapud",
+       "emailto": "Para ed",
+       "emailmessage": "Pakabat",
+       "emailsend": "Paawit",
+       "emailsent": "Say e-mail impawet la",
+       "emailsenttext": "Impawit la so e-mail message mo.",
+       "mywatchlist": "Listaan na babantayan ko",
+       "watchnologin": "Agka ni akaloob",
+       "addedwatchtext": "Impila so bolong ya \"[[:$1]]\" diad [[Special:Watchlist|listaan na babantayan]] mo. Isulat diman so saray ontombok ran idagdag o panagbalo ed sayan bolong san diad bolong na tongtongan. San akasulat ran '''mapatnag''' (bolded) ed [[Special:RecentChanges|listaan na saray sampot ran binalo]] umpian mas maganom ya nanengneng.\n\nNo labay mon ekalen may bolong diad listaan na babantayan, tapik mo labat so \"ekalen ed babantayan\" (unwatch) diad gilig ya bar.",
+       "watch": "bantayan",
+       "watchthispage": "Bantayan yan bolong",
+       "watching": "Babantayan...",
+       "created": "agawa",
+       "changed": "asalatan",
+       "deletepage": "Buralen so bolong",
+       "confirm": "Paletan",
+       "actioncomplete": "Asumpal lan agawa",
+       "deletedtext": "Abural lay \"$1\".\nPinengneng so $2 para ed listaan na saray abural ran balo.",
+       "deletecomment": "Katonongan",
+       "prot_1movedto2": "say [[$1]] enyales paula ed [[$2]]",
+       "protect-legend": "Palitaen so pangiyagel",
+       "protect-level-sysop": "Sysops labat",
+       "undelete": "Nengnengen so inekal ran bolobolong",
+       "viewdeletedpage": "Nengnengen so inekal ran bolong",
+       "undelete-search-box": "Anapen ramay binural ran bolobolong",
+       "undelete-search-prefix": "Ipanengneng ray bolobolong ya mangagapo ed:",
+       "undelete-search-submit": "Anapen",
+       "contributions": "Saray contribution na user",
+       "mycontris": "Saray entolong ko",
+       "year": "Taon:",
+       "sp-contributions-newbies-sub": "Para balo ran account",
+       "sp-contributions-submit": "Anapen",
+       "whatlinkshere": "Antoray akaturo dia",
+       "whatlinkshere-title": "Saray bolong ya aka-gawing ed $1",
+       "whatlinkshere-page": "Bolong:",
+       "blockip": "Isara ed para ayan manag-usar",
+       "ipbreason": "Katonongan",
+       "ipbsubmit": "Isebel ed sayan manag-usar",
+       "badipaddress": "Aga nayarin IP address",
+       "ipusubmit": "Aga la isebel so ayan address",
+       "ipblocklist": "Listaan na saray sebel ran IP address san username",
+       "ipblocklist-submit": "Anapen",
+       "expiringblock": "nabalang no $1 $2",
+       "blocklink": "isara",
+       "contribslink": "saray entolong to",
+       "move-page-legend": "Iyales so bolong",
+       "movearticle": "Iyales so bolong",
+       "movepagebtn": "Iyales so bolong",
+       "pagemovedsub": "Asumpal lan inyales",
+       "articleexists": "Wala lay bolong to may ngaran ya atan, odino aga valid so pinilim ya ngaran. Pili ka pa na arom ya ngaran.",
+       "movereason": "Katonongan",
+       "delete_and_move": "Buralen san iyales",
+       "delete_and_move_confirm": "On, buralen yan page",
+       "export-submit": "Ipaawit",
+       "export-addcat": "Iyarom",
+       "allmessages": "Saray pakabat na oksoy",
+       "allmessagesname": "Ngaran",
+       "allmessagestext": "Aya so listaan na amin ya pakabat na oksoy ya naanap ed MediaWiki namespace.",
+       "filemissing": "Nababalang so file",
+       "tooltip-pt-logout": "Paway",
+       "tooltip-ca-viewsource": "Iya-yagel yan bolong. Sarag mon nengnengen so pinanlapuan to.",
+       "tooltip-ca-protect": "Iyagel yan bolong",
+       "tooltip-ca-move": "Iyales so ayan bolong",
+       "tooltip-search": "Anapen {{SITENAME}}",
+       "tooltip-p-logo": "Arapan ya Bolong",
+       "tooltip-t-specialpages": "Listaan na amin ran niduman bolobolong",
+       "tooltip-ca-nstab-user": "Nengnengen so bolong na manag-usar",
+       "tooltip-ca-nstab-mediawiki": "Nengnengen so pakabat na oksoy",
+       "lastmodifiedatby": "Sampot ya binalo yan bolong nen agew ya $2, $1 nen $3.",
+       "ilsubmit": "Anapen",
+       "exif-filesource": "File na pinanlapuan",
+       "namespacesall": "amin",
+       "monthsall": "amin",
+       "confirmemail": "Kumpirmaen so E-mail address",
+       "confirmemail_sent": "Empawet so confirmation e-mail.",
+       "confirmemail_needlogin": "Nakaukulan mo ya $1 umpian nakompirma so email address mo.",
+       "confirmemail_success": "Akompirma so e-mail address mo. Sarag mo lay man-log-in san panliketan so wiki.",
+       "confirmemail_loggedin": "Akompira la so e-mail address mo.",
+       "deletedwhileediting": "Pasakbay: Abural yan bolong nen ginapuan mon baloen!",
+       "confirm-purge-top": "Ekalen so cache na sayan bolong?",
+       "imgmultipagenext": "ontombok ya bolong →",
+       "imgmultigo": "Ula!",
+       "table_pager_next": "Ontombok ya bolong",
+       "table_pager_prev": "Embeneg ya bolong",
+       "table_pager_first": "Unaan ya bolong",
+       "table_pager_last": "Otet ya bolong",
+       "table_pager_limit_submit": "Ula",
+       "autosumm-blank": "Ekalen so amin ya laman na bolong",
+       "autosumm-replace": "Salatan yan bolong na '$1'",
+       "autoredircomment": "Ituturo paulad [[$1]]",
+       "autosumm-new": "Balon bolong: $1",
+       "specialpages": "Niduma ran bolobolong"
 }
index 010179a..c96e2e7 100644 (file)
@@ -6,7 +6,8 @@
                        "Katimawan2005",
                        "Urhixidur",
                        "Val2397",
-                       "아라"
+                       "아라",
+                       "Leeheonjin"
                ]
        },
        "tog-underline": "Gulisan lang panglalam deng suglung:",
        "mergehistory-autocomment": "Pisamut ing [[:$1]] keng  [[:$2]]",
        "mergehistory-comment": "Misanib ya ing [[:$1]] king [[:$2]]: $3",
        "mergelog": "Piyabe ing log",
-       "pagemerge-logentry": "misanib ya ing [[$1]] king [[$2]] (deng pamagbayu angga king $3)",
        "revertmerge": "Episamut",
        "mergelogpagetext": "Makabili la king lalam deng pekabayung pamisanib da reng amlat bulung (page history).",
        "history-title": "↓Amlat ning pamagbayu king \"$1\"",
        "search-result-size": "$1 ({{PLURAL:$2|1 a kataya|$2 kataya}})",
        "search-redirect": "(pamanalis direksiun $1)",
        "search-section": "(seksion $1)",
+       "search-category": "(kategorya $1)",
        "search-suggest": "Ing buri mung sabian: $1",
        "search-interwiki-caption": "Kapatad a proyektu",
        "search-interwiki-default": "$1 linual/resulta:",
        "randomredirect-nopages": "Alang pamanalis direksiun (redirect) king pirinan lagyung (namespace) ini.",
        "statistics": "Deng datos (Statistics)",
        "statistics-header-users": "Talagamit statistics",
-       "statistics-mostpopular": "Bulung a pekamaralas dang linawe",
        "doubleredirects": "Dobling pamanaliling direksiun",
        "doubleredirectstext": "Pakalista la king bulung a ini deng bulung a makayalis direksiun (redirect) kareng aliwang bulung pamanalis direksiun. Atin yang suglung ing balang dane (row) king mumuna ampong kaduang pamanalis direksiun, ampo king tuturu (target) ning kaduang pamanalis direksiun, a keraklan ya ing \"tagana\" o \"tutung\" bulung a tuturu, nung nu ya dapat tambing makaturu ing mumunang pamanalis direksiun.",
        "brokenredirects": "Meputut a pamanaliling direksiun",
        "uncategorizedtemplates": "Modelung (template) alang kategoriya",
        "unusedcategories": "Kategoriyang e megamit",
        "unusedimages": "Simpan a e megamit",
-       "popularpages": "Sikat a bulung",
        "wantedcategories": "Kategoriyang paintunan (wanted)",
        "wantedpages": "Bulung a kailangan (wanted pages)",
        "mostlinked": "Dakal dili suglung kareng bulung",
        "suppress": "Alakton (oversight)",
        "booksources": "Aklat a pikuanan",
        "booksources-search-legend": "Panintunan la reng aklat penibatan",
-       "booksources-go": "Sige",
        "booksources-text": "Makabili la king lalam deng suglung kareng aliwang karinan o site a mamisaling librung bayu at megamit na, at mapalyaring atin la muring aliwang informaciun kareng librung paintunan mu.",
        "specialloguserlabel": "Talagamit:",
        "speciallogtitlelabel": "Bansag:",
        "wlheader-enotif": "Makasalangi (enabled) ing pamipabalu kapamilatan ning e-mail.",
        "wlheader-showupdated": "'''Makapal''' la pangasulat deng bulung a miyalilan manibat aniang tauli mu lang pintalan.",
        "wlnote": "{{PLURAL:$1|Ing makatuki ing tauling|Ding makatuki ring tauling '''$1''' miyalilan}} kilub {{PLURAL:$2|ning tauling metung a oras|ding tauling '''$2''' oras}}.",
-       "wlshowlast": "Pakit la reng tauling $1 oras $2 aldo $3",
+       "wlshowlast": "Pakit la reng tauling $1 oras $2 aldo",
        "watchlist-options": "Deng maliaring gawan kareng listaan da reng babanten (''watchlist'')",
        "watching": "Babanten...",
        "unwatching": "E ne babanten...",
        "exif-gpsspeed-k": "Kilometru balang oras",
        "exif-gpsspeed-m": "Milla balang oras",
        "exif-gpsdirection-t": "Tutung direksiun",
-       "watchlistall2": "eganagana",
        "namespacesall": "ila ngan",
        "monthsall": "eganagana",
        "confirmemail": "Patutwan mung keka ya itang e-mail address",
        "specialpages-group-highuse": "Deng bulung a magamitan",
        "revdelete-restricted": "ipairal la reng limitasiun kareng sysop",
        "revdelete-unrestricted": "ilako la reng makabawal kareng sysops",
-       "rightsnone": "(ala)"
+       "rightsnone": "(ala)",
+       "revdelete-summary": "sampulung da reng mibayu (edit summary)"
 }
index d690593..a82bf86 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Delaraha (on pap.wikipedia.org)",
-            "Kamizu",
-            "Sdm1985",
-            "לערי ריינהארט"
-        ]
-    },
-    "underline-always": "Semper",
-    "underline-never": "Niunka",
-    "sunday": "djadomingu",
-    "monday": "djaluna",
-    "tuesday": "djamars",
-    "wednesday": "djarason",
-    "thursday": "djaweps",
-    "friday": "djabièrne",
-    "saturday": "djasabra",
-    "january": "yanüari",
-    "february": "febrüari",
-    "march": "mart",
-    "april": "aprel",
-    "may_long": "mei",
-    "june": "yüni",
-    "july": "yüli",
-    "august": "ougùstùs",
-    "september": "sèptèmber",
-    "october": "òktober",
-    "november": "novèmber",
-    "december": "desèmber",
-    "jan": "yan",
-    "feb": "feb",
-    "mar": "mrt",
-    "apr": "apr",
-    "may": "mei",
-    "jun": "yün",
-    "jul": "yül",
-    "aug": "oug",
-    "sep": "sep",
-    "oct": "okt",
-    "nov": "nov",
-    "dec": "des",
-    "category_header": "Artíkulonan den kategoria \"$1\"",
-    "subcategories": "Supkategorianan",
-    "about": "Info",
-    "article": "Artíkulo",
-    "cancel": "Kanselá",
-    "moredotdotdot": "Mas...",
-    "mypage": "Mi página",
-    "mytalk": "Mi diskushon",
-    "anontalk": "Diskushon pa e IP aki",
-    "navigation": "Nabegashon",
-    "and": "&#32;i",
-    "faq": "Preguntanan mas Puntrá",
-    "faqpage": "Project:Preguntanan mas Puntrá",
-    "errorpagetitle": "Eror",
-    "returnto": "Bai bèk $1.",
-    "tagline": "Di {{SITENAME}}",
-    "help": "Ayudo",
-    "search": "Buska",
-    "history": "Historia di página",
-    "history_short": "Historia",
-    "edit": "Editá",
-    "editthispage": "Editá e página aki",
-    "delete": "Kita",
-    "protect": "Protehá",
-    "unprotect": "stop di protehá",
-    "unprotectthispage": "Stop di protehá e página aki",
-    "talkpagelinktext": "Papia",
-    "specialpage": "Página Spesial",
-    "personaltools": "Hèrmèntnan Personal",
-    "postcomment": "Sekshon Nobo",
-    "articlepage": "Wak página di kontenido",
-    "talk": "Diskushon",
-    "views": "Kantidat di biaha mirá",
-    "toolbox": "Kaha di Hèrmènt",
-    "userpage": "Wak página di uzadó",
-    "projectpage": "Wak página di e proyekto",
-    "imagepage": "Mira página di e dokumento",
-    "mediawikipage": "Mira paginanan di mensahe",
-    "templatepage": "Mira malchi di e página",
-    "viewhelppage": "Mira página di yudansa",
-    "categorypage": "Mira e página di kategoria",
-    "viewtalkpage": "Wak diskushon",
-    "otherlanguages": "Na otro idioma",
-    "redirectedfrom": "(Bo a yega akinan pa via di e página $1)",
-    "redirectpagesub": "Página ku ta sirbi komo portal",
-    "lastmodifiedat": "E páginá aki a wòrdu kambiá ultimo biaha riba $1, ora $2.",
-    "viewcount": "E paginá aki a wòrdu mirá {{PLURAL:$1|biaha|$1 biaha}}.",
-    "protectedpage": "Página Protehá",
-    "jumpto": "Bai na:",
-    "jumptonavigation": "Nabegashon",
-    "jumptosearch": "Buska",
-    "aboutsite": "Tokante {{SITENAME}}",
-    "aboutpage": "Project:Info",
-    "copyright": "E kontenido ta disponibel bou di $1.",
-    "copyrightpage": "{{ns:project}}:Derechinan di outor",
-    "currentevents": "Eventonan aktual",
-    "currentevents-url": "Project:Eventonan aktual",
-    "disclaimers": "Deklarashon di Liberashon for di Responsabilidatnan",
-    "disclaimerpage": "Project:Deklarashon di Liberashon for di Responsabilidat General",
-    "edithelp": "Ayudo ku editamentu",
-    "mainpage": "Página Prinsipal",
-    "mainpage-description": "Página Prinsipal",
-    "policy-url": "Project:Pólisa",
-    "portal": "Portal di komunidat",
-    "portal-url": "Project:Portal di komunidat",
-    "privacy": "Pólisa di Privasidat",
-    "privacypage": "Project:Pólisa di Privasidat",
-    "badaccess": "Eror di outorisashon",
-    "badaccess-group0": "Bo no tin outorisashon pa ehekutá e akshon ku bo a skohe.",
-    "youhavenewmessages": "Bo tin $1 ($2).",
-    "youhavenewmessagesmulti": "Bo tin mensahe nobo riba $1",
-    "editsection": "editá",
-    "toc": "Kontenido",
-    "showtoc": "mustra",
-    "hidetoc": "skonde",
-    "nstab-main": "Artíkulo",
-    "nstab-user": "Página personal",
-    "nstab-media": "Media",
-    "nstab-special": "Spesial",
-    "nstab-image": "Imagen",
-    "nstab-mediawiki": "Mensahe",
-    "nstab-template": "Predefinishon",
-    "nstab-help": "Ayudo",
-    "nstab-category": "Kategoria",
-    "nosuchspecialpage": "E página spesial no ta eksistí",
-    "nospecialpagetext": "<strong>Bo a pidi un página spesial inválido.</strong>\n\nBo por haña un lista di tur [[Special:SpecialPages|{{int:specialpages}}]].",
-    "error": "Eror",
-    "internalerror": "Eror interno",
-    "cannotdelete": "No por a kita e página òf imagen spesifiká. (Por ta e kaso ku un otro hende a kita e kaba.)",
-    "badtitle": "Título inválido",
-    "badtitletext": "E título di e página ku bo a pidi tabata inválido, bashí, òf un link pa un inter-idioma òf inter-wiki inkorekto.",
-    "viewsource": "Wak fuente",
-    "yourname": "Nòmber di uzadó",
-    "yourpassword": "Kontraseña",
-    "yourpasswordagain": "Hinka kontraseña atrobe",
-    "remembermypassword": "Kordá mi (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "userlogin": "Traha un kuenta nobo òf outentiká",
-    "userlogout": "Terminá sesion",
-    "badretype": "E kontraseñanan hinká no ta kuadra.",
-    "wrongpassword": "Kontraseña no ta korekto. Por fabor purba atrobe.",
-    "wrongpasswordempty": "Kontraseña tabata bashí. Por fabor purba atrobe.",
-    "acct_creation_throttle_hit": "Bishitantenan na uzando bo IP adrès a traha $1 kuenta den e último 24 ora, lokual ta e máksimo permití den e periodo aki. Esaki ta nifiká ku hendenan uzando e IP adrès aki no por traha mas kuenta na e momentu aki.",
-    "emailauthenticated": "Bo e-mail adrès tabata outentiká riba $1.",
-    "emailnotauthenticated": "Bo e-mail adrès no ta outentiká ahinda. Lo siguiente funkshonnan lo no ta disponibel.",
-    "emailconfirmlink": "Konfirmá bo e-mail adrès.",
-    "accountcreated": "Kuenta trahá",
-    "accountcreatedtext": "E kuenta di uzadó pa $1 tabata trahá.",
-    "changepassword": "Kambia kontraseña",
-    "watchthis": "Observá e página aki",
-    "anoneditwarning": "Bo no a outentiká bo mes.\nBo por kambia página libremente, pero tene kuenta ku lo nota bo IP adrès den e historia di kambionan hasí na e página aki.",
-    "blockedtitle": "Uzadó ta blokiá",
-    "confirmedittext": "Bo mester konfirmá bo e-mail adrès promé ku bo editá página. Por fabor duna i validá bo e-mail adrès via bo [[Special:Preferences|preferensianan]].",
-    "accmailtitle": "Kontraseña mandá.",
-    "accmailtext": "E kontraseña pa '$1' tabata mandá pa $2.",
-    "newarticle": "(Nobo)",
-    "anontalkpagetext": "----''Esaki ta e página di diskushon pa un uzadó anonimo ku no a traha un kuenta ahinda, òf no sa uza e. Ta pa e rason aki nos tin ku uza IP adrès pa identifiká e persona. Diferente uzadó por uza e IP adrès aki. Si bo ta un uzadó anonimo i ta sinti ku komentario irelevante tabata mandá pa bo, por fabor [[Special:UserLogin|registrá un kuenta nobo òf outentiká bo mes]] pa evitá konfushon den futuro.''",
-    "yourtext": "Bo teksto",
-    "yourdiff": "Diferensianan",
-    "currentrev": "Revishon aktual",
-    "currentrevisionlink": "wak revishon aktual",
-    "cur": "akt",
-    "next": "siguiente",
-    "last": "prev",
-    "histlegend": "Leyenda: (akt) = diferensia ku vershon aktual,\n(prev) = diferensia ku vershon previo, m = editashon menor",
-    "histfirst": "Promé",
-    "histlast": "Último",
-    "nextn": "siguiente {{PLURAL:$1|$1}}",
-    "preferences": "Preferensianan",
-    "mypreferences": "Mi preferensianan",
-    "timezonelegend": "Zona di tempu",
-    "allowemail": "Akseptá e-mail di otro uzadó",
-    "youremail": "E-mail:",
-    "username": "Nòmber di uzadó:",
-    "uid": "ID di uzadó:",
-    "yourrealname": "Nòmber berdadero:",
-    "yourlanguage": "Idioma:",
-    "yourvariant": "Variante:",
-    "yournick": "Nòmber di kariño:",
-    "badsig": "Firma inválido; kontrolá e HTML uzá.",
-    "recentchanges": "Kambionan resien",
-    "recentchanges-summary": "Sigui e kambionan mas resien na {{SITENAME}} riba e página aki.",
-    "rclistfrom": "Mustra kambionan nobo kuminsando for di $1",
-    "rcshowhideminor": "$1 kambionan menor",
-    "rcshowhidebots": "$1 botnan",
-    "rcshowhideanons": "$1 uzadónan anonimo",
-    "rclinks": "Mustra último $1 kambionan den último $2 dianan<br />$3",
-    "hide": "Skonde",
-    "show": "Mustra",
-    "file-anchor-link": "Imagen",
-    "unwatchedpages": "Páginanan no observá",
-    "statistics": "Estadístika",
-    "statistics-header-users": "Estadístika di uzadónan",
-    "ncategories": "$1 {{PLURAL:$1|kategoria|kategorianan}}",
-    "uncategorizedpages": "Páginanan no kategorisá",
-    "uncategorizedcategories": "Kategorianan no kategorisá",
-    "unusedcategories": "Kategorianan no uzá",
-    "wantedcategories": "Kategorianan deseá",
-    "wantedpages": "Páginanan deseá",
-    "ancientpages": "Páginanan mas bieu",
-    "unusedcategoriestext": "E siguiente kategorianan ta eksistí pero ningun artíkulo òf kategoria ta hasi uzo di nan.",
-    "alllogstext": "Esaki ta un bista kombiná di registronan.\nBo por skohe un tipo di registro tambe, òf filtrá e bista ku un nòmber di uzadó òf un título di un artíkulo.",
-    "allpages": "Tur página",
-    "alphaindexline": "$1 pa $2",
-    "allpagesfrom": "Mustra páginanan kuminsando na:",
-    "allarticles": "Tur artíkulo",
-    "allinnamespace": "Tur página (dominio $1)",
-    "allpagesprefix": "Mustra páginanan kuminsando ku e prefiho:",
-    "categories": "Kategorianan",
-    "categoriespagetext": "Esaki ta e kategorianan ku ta eksistí den {{SITENAME}}.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
-    "emailuser": "Manda e-mail pa e uzadó aki",
-    "emailpage": "Manda e-mail",
-    "emailpagetext": "E formulario aki lo manda un e-mail pa e uzadò aki.\nBo e-mail adrès (manera ta pará den bo preferensianan) lo aparesé den e e-mail pa e resipiente por respondé na bo direktamente.",
-    "defemailsubject": "E-mail di {{SITENAME}}",
-    "emailfrom": "Di:",
-    "emailto": "Pa:",
-    "emailsubject": "Tópiko:",
-    "emailmessage": "Mensahe:",
-    "emailsend": "Manda",
-    "emailsent": "E-mail mandá",
-    "emailsenttext": "Bo e-mail tabata mandá.",
-    "watchlist": "Mi lista di observashon",
-    "nowatchlist": "Bo lista di observashon ta bashí.",
-    "watchnologintext": "Bo mester [[Special:UserLogin|outentiká bo mes]] pa modifiká bo lista di observashon.",
-    "addedwatchtext": "E página \"[[:$1]]\" tabata añadí na bo [[Special:Watchlist|lista di observashon]].\nLo lista kambionan hasí na e página aki i su página di diskushon einan,\ni e página lo aparesé '''vet''' den e [[Special:RecentChanges|lista di kambionan resien]] pa\ne ta mas fásil pa bo mira.\n\nSi despues bo ke kita e página for di bo lista di observashon, primi \"Stop di observá\" den e menú ariba.",
-    "watch": "Observá",
-    "watchthispage": "Observá e página aki",
-    "unwatch": "Stop di observá",
-    "unwatchthispage": "Stop di observá",
-    "watchlistcontains": "Bo lista di observashon tin $1 {{PLURAL:$1|página|páginanan}}.",
-    "wlshowlast": "Mustra último $1 oranan $2 dianan $3",
-    "created": "trahá",
-    "changed": "kambiá",
-    "confirm": "Konfirmá",
-    "actioncomplete": "Akshon kompletá",
-    "prot_1movedto2": "[[$1]] mové pa [[$2]]",
-    "protect-legend": "Konfirmá protekshon",
-    "undelete": "Wak páginanan kitá",
-    "invert": "Invertí selekshon",
-    "blanknamespace": "(Prinsipal)",
-    "contributions": "Kontribushonnan di uzadó",
-    "mycontris": "Mi kontribushonnan",
-    "whatlinkshere": "Kiko ta link aki",
-    "blockip": "Blokia uzadó",
-    "badipaddress": "IP adrès ta inválido",
-    "blockipsuccesssub": "Blokeo eksitoso",
-    "blockipsuccesstext": "[[Special:Contributions/$1|$1]] tabata blokiá.<br />\nWak e [[Special:BlockList|lista di blokeonan]] pa wak tur blokeo aktivo.",
-    "unblockip": "Desblokia uzadó",
-    "blocklink": "blokia",
-    "unblocklink": "desblokia",
-    "contribslink": "kontrib'nan",
-    "autoblocker": "Bo tabata outomatikamente blokiá pasombra \"[[User:$1|$1]]\" a uza e IP adrès aki resientemente. E rason ku $1 tabata blokiá ta: \"'''$2'''\"",
-    "unblocklogentry": "a desblokia $1",
-    "articleexists": "Tin un página ku e título ei kaba, òf e\ntítulo ku bo a skohe no ta válido.\nPor fabor skohe un otro título.",
-    "allmessages": "Mensahenan di sistema",
-    "allmessagesname": "Nòmber",
-    "allmessagesdefault": "Teksto predeterminá",
-    "allmessagescurrent": "Teksto aktual",
-    "allmessagestext": "Esaki ta un lista di mensahe di sistema disponibel den e dominio di MediaWiki.",
-    "anonymous": "Uzadó(nan) anonimo di {{SITENAME}}",
-    "previousdiff": "← Diferensia anterior",
-    "nextdiff": "Siguiente diferensia →",
-    "watchlistall2": "tur",
-    "namespacesall": "tur",
-    "confirmemail": "Konfirmá e-mail adrès",
-    "confirmemail_text": "Bo mester validá bo e-mail adrès pa uza funkshonnan di e-mail.\nPrimi e boton abou pa manda un e-mail di konfirmashon pa bo e-mail adrès.\nOra bo haña e e-mail, bo ta sigui e instrukshonnan aden.\nPa kontrolá si bo ta konfirmá kaba, wak bo preferensianan.",
-    "confirmemail_send": "Manda un kódigo di konfirmashon via e-mail.",
-    "confirmemail_sent": "E-mail pa konfirmashon mandá.",
-    "confirmemail_invalid": "Kódigo di konfirmashon inválido. Ta posibel ku e kódigo a kaduká.",
-    "confirmemail_needlogin": "Bo mester $1 pa konfirmá bo e-mail adrès.",
-    "confirmemail_success": "Bo e-mail adrès tabata konfirmá. Bo por outentiká bo mes i gosa di {{SITENAME}}.",
-    "confirmemail_loggedin": "Bo e-mail adrès ta konfirmá.",
-    "confirmemail_subject": "{{SITENAME}}: Konfirmashon di e-mail adrès",
-    "confirmemail_body": "Un hende, probablemente abo, di IP adrès $1, a registrá e\nkuenta \"$2\" ku e e-mail adrès aki riba {{SITENAME}}.\n\nPa konfirmá ku e kuenta aki en berdat ta di bo i pa aktivá\nfunkshonnan di e-mail riba {{SITENAME}}, por fabor habri e link aki:\n\n$3\n\nSi esaki *no* ta abo, por fabor no habri e link.\nFollow this link to cancel the e-mail address confirmation:\n\n$5\n\nE kódigo di konfirmashon aki lo kaduká riba $4.",
-    "confirmrecreate": "[[User:$1|$1]] ([[User talk:$1|diskushon]]) a kita e artíkulo aki despues ku bo ta kuminsá editá. E rason ta:\n: ''$2''\nPor fabor konfirmá ku bo ke traha e artíkulo aki di nobo.",
-    "specialpages": "Páginanan Spesial"
+       "@metadata": {
+               "authors": [
+                       "Delaraha (on pap.wikipedia.org)",
+                       "Kamizu",
+                       "Sdm1985",
+                       "לערי ריינהארט",
+                       "아라"
+               ]
+       },
+       "underline-always": "Semper",
+       "underline-never": "Niunka",
+       "sunday": "djadomingu",
+       "monday": "djaluna",
+       "tuesday": "djamars",
+       "wednesday": "djarason",
+       "thursday": "djaweps",
+       "friday": "djabièrne",
+       "saturday": "djasabra",
+       "january": "yanüari",
+       "february": "febrüari",
+       "march": "mart",
+       "april": "aprel",
+       "may_long": "mei",
+       "june": "yüni",
+       "july": "yüli",
+       "august": "ougùstùs",
+       "september": "sèptèmber",
+       "october": "òktober",
+       "november": "novèmber",
+       "december": "desèmber",
+       "jan": "yan",
+       "feb": "feb",
+       "mar": "mrt",
+       "apr": "apr",
+       "may": "mei",
+       "jun": "yün",
+       "jul": "yül",
+       "aug": "oug",
+       "sep": "sep",
+       "oct": "okt",
+       "nov": "nov",
+       "dec": "des",
+       "category_header": "Artíkulonan den kategoria \"$1\"",
+       "subcategories": "Supkategorianan",
+       "about": "Info",
+       "article": "Artíkulo",
+       "cancel": "Kanselá",
+       "moredotdotdot": "Mas...",
+       "mypage": "Mi página",
+       "mytalk": "Mi diskushon",
+       "anontalk": "Diskushon pa e IP aki",
+       "navigation": "Nabegashon",
+       "and": "&#32;i",
+       "faq": "Preguntanan mas Puntrá",
+       "faqpage": "Project:Preguntanan mas Puntrá",
+       "errorpagetitle": "Eror",
+       "returnto": "Bai bèk $1.",
+       "tagline": "Di {{SITENAME}}",
+       "help": "Ayudo",
+       "search": "Buska",
+       "history": "Historia di página",
+       "history_short": "Historia",
+       "edit": "Editá",
+       "editthispage": "Editá e página aki",
+       "delete": "Kita",
+       "protect": "Protehá",
+       "unprotect": "stop di protehá",
+       "unprotectthispage": "Stop di protehá e página aki",
+       "talkpagelinktext": "Papia",
+       "specialpage": "Página Spesial",
+       "personaltools": "Hèrmèntnan Personal",
+       "articlepage": "Wak página di kontenido",
+       "talk": "Diskushon",
+       "views": "Kantidat di biaha mirá",
+       "toolbox": "Kaha di Hèrmènt",
+       "userpage": "Wak página di uzadó",
+       "projectpage": "Wak página di e proyekto",
+       "imagepage": "Mira página di e dokumento",
+       "mediawikipage": "Mira paginanan di mensahe",
+       "templatepage": "Mira malchi di e página",
+       "viewhelppage": "Mira página di yudansa",
+       "categorypage": "Mira e página di kategoria",
+       "viewtalkpage": "Wak diskushon",
+       "otherlanguages": "Na otro idioma",
+       "redirectedfrom": "(Bo a yega akinan pa via di e página $1)",
+       "redirectpagesub": "Página ku ta sirbi komo portal",
+       "lastmodifiedat": "E páginá aki a wòrdu kambiá ultimo biaha riba $1, ora $2.",
+       "viewcount": "E paginá aki a wòrdu mirá {{PLURAL:$1|biaha|$1 biaha}}.",
+       "protectedpage": "Página Protehá",
+       "jumpto": "Bai na:",
+       "jumptonavigation": "Nabegashon",
+       "jumptosearch": "Buska",
+       "aboutsite": "Tokante {{SITENAME}}",
+       "aboutpage": "Project:Info",
+       "copyright": "E kontenido ta disponibel bou di $1.",
+       "copyrightpage": "{{ns:project}}:Derechinan di outor",
+       "currentevents": "Eventonan aktual",
+       "currentevents-url": "Project:Eventonan aktual",
+       "disclaimers": "Deklarashon di Liberashon for di Responsabilidatnan",
+       "disclaimerpage": "Project:Deklarashon di Liberashon for di Responsabilidat General",
+       "edithelp": "Ayudo ku editamentu",
+       "mainpage": "Página Prinsipal",
+       "mainpage-description": "Página Prinsipal",
+       "policy-url": "Project:Pólisa",
+       "portal": "Portal di komunidat",
+       "portal-url": "Project:Portal di komunidat",
+       "privacy": "Pólisa di Privasidat",
+       "privacypage": "Project:Pólisa di Privasidat",
+       "badaccess": "Eror di outorisashon",
+       "badaccess-group0": "Bo no tin outorisashon pa ehekutá e akshon ku bo a skohe.",
+       "youhavenewmessages": "Bo tin $1 ($2).",
+       "youhavenewmessagesmulti": "Bo tin mensahe nobo riba $1",
+       "editsection": "editá",
+       "toc": "Kontenido",
+       "showtoc": "mustra",
+       "hidetoc": "skonde",
+       "nstab-main": "Artíkulo",
+       "nstab-user": "Página personal",
+       "nstab-media": "Media",
+       "nstab-special": "Spesial",
+       "nstab-image": "Imagen",
+       "nstab-mediawiki": "Mensahe",
+       "nstab-template": "Predefinishon",
+       "nstab-help": "Ayudo",
+       "nstab-category": "Kategoria",
+       "nosuchspecialpage": "E página spesial no ta eksistí",
+       "nospecialpagetext": "<strong>Bo a pidi un página spesial inválido.</strong>\n\nBo por haña un lista di tur [[Special:SpecialPages|{{int:specialpages}}]].",
+       "error": "Eror",
+       "internalerror": "Eror interno",
+       "cannotdelete": "No por a kita e página òf imagen spesifiká. (Por ta e kaso ku un otro hende a kita e kaba.)",
+       "badtitle": "Título inválido",
+       "badtitletext": "E título di e página ku bo a pidi tabata inválido, bashí, òf un link pa un inter-idioma òf inter-wiki inkorekto.",
+       "viewsource": "Wak fuente",
+       "yourname": "Nòmber di uzadó",
+       "yourpassword": "Kontraseña",
+       "yourpasswordagain": "Hinka kontraseña atrobe",
+       "remembermypassword": "Kordá mi (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "userlogin": "Traha un kuenta nobo òf outentiká",
+       "userlogout": "Terminá sesion",
+       "badretype": "E kontraseñanan hinká no ta kuadra.",
+       "wrongpassword": "Kontraseña no ta korekto. Por fabor purba atrobe.",
+       "wrongpasswordempty": "Kontraseña tabata bashí. Por fabor purba atrobe.",
+       "acct_creation_throttle_hit": "Bishitantenan na uzando bo IP adrès a traha $1 kuenta den e último 24 ora, lokual ta e máksimo permití den e periodo aki. Esaki ta nifiká ku hendenan uzando e IP adrès aki no por traha mas kuenta na e momentu aki.",
+       "emailauthenticated": "Bo e-mail adrès tabata outentiká riba $1.",
+       "emailnotauthenticated": "Bo e-mail adrès no ta outentiká ahinda. Lo siguiente funkshonnan lo no ta disponibel.",
+       "emailconfirmlink": "Konfirmá bo e-mail adrès.",
+       "accountcreated": "Kuenta trahá",
+       "accountcreatedtext": "E kuenta di uzadó pa $1 tabata trahá.",
+       "changepassword": "Kambia kontraseña",
+       "watchthis": "Observá e página aki",
+       "anoneditwarning": "Bo no a outentiká bo mes.\nBo por kambia página libremente, pero tene kuenta ku lo nota bo IP adrès den e historia di kambionan hasí na e página aki.",
+       "blockedtitle": "Uzadó ta blokiá",
+       "confirmedittext": "Bo mester konfirmá bo e-mail adrès promé ku bo editá página. Por fabor duna i validá bo e-mail adrès via bo [[Special:Preferences|preferensianan]].",
+       "accmailtitle": "Kontraseña mandá.",
+       "accmailtext": "E kontraseña pa '$1' tabata mandá pa $2.",
+       "newarticle": "(Nobo)",
+       "anontalkpagetext": "----''Esaki ta e página di diskushon pa un uzadó anonimo ku no a traha un kuenta ahinda, òf no sa uza e. Ta pa e rason aki nos tin ku uza IP adrès pa identifiká e persona. Diferente uzadó por uza e IP adrès aki. Si bo ta un uzadó anonimo i ta sinti ku komentario irelevante tabata mandá pa bo, por fabor [[Special:UserLogin|registrá un kuenta nobo òf outentiká bo mes]] pa evitá konfushon den futuro.''",
+       "yourtext": "Bo teksto",
+       "yourdiff": "Diferensianan",
+       "currentrev": "Revishon aktual",
+       "currentrevisionlink": "wak revishon aktual",
+       "cur": "akt",
+       "next": "siguiente",
+       "last": "prev",
+       "histlegend": "Leyenda: (akt) = diferensia ku vershon aktual,\n(prev) = diferensia ku vershon previo, m = editashon menor",
+       "histfirst": "Promé",
+       "histlast": "Último",
+       "nextn": "siguiente {{PLURAL:$1|$1}}",
+       "preferences": "Preferensianan",
+       "mypreferences": "Mi preferensianan",
+       "timezonelegend": "Zona di tempu",
+       "allowemail": "Akseptá e-mail di otro uzadó",
+       "youremail": "E-mail:",
+       "username": "Nòmber di uzadó:",
+       "yourrealname": "Nòmber berdadero:",
+       "yourlanguage": "Idioma:",
+       "yourvariant": "Variante:",
+       "yournick": "Nòmber di kariño:",
+       "badsig": "Firma inválido; kontrolá e HTML uzá.",
+       "recentchanges": "Kambionan resien",
+       "recentchanges-summary": "Sigui e kambionan mas resien na {{SITENAME}} riba e página aki.",
+       "rclistfrom": "Mustra kambionan nobo kuminsando for di $3 $2",
+       "rcshowhideminor": "$1 kambionan menor",
+       "rcshowhidebots": "$1 botnan",
+       "rcshowhideanons": "$1 uzadónan anonimo",
+       "rclinks": "Mustra último $1 kambionan den último $2 dianan<br />$3",
+       "hide": "Skonde",
+       "show": "Mustra",
+       "file-anchor-link": "Imagen",
+       "unwatchedpages": "Páginanan no observá",
+       "statistics": "Estadístika",
+       "statistics-header-users": "Estadístika di uzadónan",
+       "ncategories": "$1 {{PLURAL:$1|kategoria|kategorianan}}",
+       "uncategorizedpages": "Páginanan no kategorisá",
+       "uncategorizedcategories": "Kategorianan no kategorisá",
+       "unusedcategories": "Kategorianan no uzá",
+       "wantedcategories": "Kategorianan deseá",
+       "wantedpages": "Páginanan deseá",
+       "ancientpages": "Páginanan mas bieu",
+       "unusedcategoriestext": "E siguiente kategorianan ta eksistí pero ningun artíkulo òf kategoria ta hasi uzo di nan.",
+       "alllogstext": "Esaki ta un bista kombiná di registronan.\nBo por skohe un tipo di registro tambe, òf filtrá e bista ku un nòmber di uzadó òf un título di un artíkulo.",
+       "allpages": "Tur página",
+       "allpagesfrom": "Mustra páginanan kuminsando na:",
+       "allarticles": "Tur artíkulo",
+       "allinnamespace": "Tur página (dominio $1)",
+       "allpagesprefix": "Mustra páginanan kuminsando ku e prefiho:",
+       "categories": "Kategorianan",
+       "categoriespagetext": "Esaki ta e kategorianan ku ta eksistí den {{SITENAME}}.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
+       "emailuser": "Manda e-mail pa e uzadó aki",
+       "emailpage": "Manda e-mail",
+       "emailpagetext": "E formulario aki lo manda un e-mail pa e uzadò aki.\nBo e-mail adrès (manera ta pará den bo preferensianan) lo aparesé den e e-mail pa e resipiente por respondé na bo direktamente.",
+       "defemailsubject": "E-mail di {{SITENAME}}",
+       "emailfrom": "Di:",
+       "emailto": "Pa:",
+       "emailsubject": "Tópiko:",
+       "emailmessage": "Mensahe:",
+       "emailsend": "Manda",
+       "emailsent": "E-mail mandá",
+       "emailsenttext": "Bo e-mail tabata mandá.",
+       "watchlist": "Mi lista di observashon",
+       "nowatchlist": "Bo lista di observashon ta bashí.",
+       "addedwatchtext": "E página \"[[:$1]]\" tabata añadí na bo [[Special:Watchlist|lista di observashon]].\nLo lista kambionan hasí na e página aki i su página di diskushon einan,\ni e página lo aparesé '''vet''' den e [[Special:RecentChanges|lista di kambionan resien]] pa\ne ta mas fásil pa bo mira.\n\nSi despues bo ke kita e página for di bo lista di observashon, primi \"Stop di observá\" den e menú ariba.",
+       "watch": "Observá",
+       "watchthispage": "Observá e página aki",
+       "unwatch": "Stop di observá",
+       "unwatchthispage": "Stop di observá",
+       "wlshowlast": "Mustra último $1 oranan $2 dianan",
+       "created": "trahá",
+       "changed": "kambiá",
+       "confirm": "Konfirmá",
+       "actioncomplete": "Akshon kompletá",
+       "prot_1movedto2": "[[$1]] mové pa [[$2]]",
+       "protect-legend": "Konfirmá protekshon",
+       "undelete": "Wak páginanan kitá",
+       "invert": "Invertí selekshon",
+       "blanknamespace": "(Prinsipal)",
+       "contributions": "Kontribushonnan di uzadó",
+       "mycontris": "Mi kontribushonnan",
+       "whatlinkshere": "Kiko ta link aki",
+       "blockip": "Blokia uzadó",
+       "badipaddress": "IP adrès ta inválido",
+       "blockipsuccesssub": "Blokeo eksitoso",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] tabata blokiá.<br />\nWak e [[Special:BlockList|lista di blokeonan]] pa wak tur blokeo aktivo.",
+       "unblockip": "Desblokia uzadó",
+       "blocklink": "blokia",
+       "unblocklink": "desblokia",
+       "contribslink": "kontrib'nan",
+       "autoblocker": "Bo tabata outomatikamente blokiá pasombra \"[[User:$1|$1]]\" a uza e IP adrès aki resientemente. E rason ku $1 tabata blokiá ta: \"'''$2'''\"",
+       "unblocklogentry": "a desblokia $1",
+       "articleexists": "Tin un página ku e título ei kaba, òf e\ntítulo ku bo a skohe no ta válido.\nPor fabor skohe un otro título.",
+       "allmessages": "Mensahenan di sistema",
+       "allmessagesname": "Nòmber",
+       "allmessagesdefault": "Teksto predeterminá",
+       "allmessagescurrent": "Teksto aktual",
+       "allmessagestext": "Esaki ta un lista di mensahe di sistema disponibel den e dominio di MediaWiki.",
+       "anonymous": "Uzadó(nan) anonimo di {{SITENAME}}",
+       "previousdiff": "← Diferensia anterior",
+       "nextdiff": "Siguiente diferensia →",
+       "namespacesall": "tur",
+       "confirmemail": "Konfirmá e-mail adrès",
+       "confirmemail_text": "Bo mester validá bo e-mail adrès pa uza funkshonnan di e-mail.\nPrimi e boton abou pa manda un e-mail di konfirmashon pa bo e-mail adrès.\nOra bo haña e e-mail, bo ta sigui e instrukshonnan aden.\nPa kontrolá si bo ta konfirmá kaba, wak bo preferensianan.",
+       "confirmemail_send": "Manda un kódigo di konfirmashon via e-mail.",
+       "confirmemail_sent": "E-mail pa konfirmashon mandá.",
+       "confirmemail_invalid": "Kódigo di konfirmashon inválido. Ta posibel ku e kódigo a kaduká.",
+       "confirmemail_needlogin": "Bo mester $1 pa konfirmá bo e-mail adrès.",
+       "confirmemail_success": "Bo e-mail adrès tabata konfirmá. Bo por outentiká bo mes i gosa di {{SITENAME}}.",
+       "confirmemail_loggedin": "Bo e-mail adrès ta konfirmá.",
+       "confirmemail_subject": "{{SITENAME}}: Konfirmashon di e-mail adrès",
+       "confirmemail_body": "Un hende, probablemente abo, di IP adrès $1, a registrá e\nkuenta \"$2\" ku e e-mail adrès aki riba {{SITENAME}}.\n\nPa konfirmá ku e kuenta aki en berdat ta di bo i pa aktivá\nfunkshonnan di e-mail riba {{SITENAME}}, por fabor habri e link aki:\n\n$3\n\nSi esaki *no* ta abo, por fabor no habri e link.\nFollow this link to cancel the e-mail address confirmation:\n\n$5\n\nE kódigo di konfirmashon aki lo kaduká riba $4.",
+       "confirmrecreate": "[[User:$1|$1]] ([[User talk:$1|diskushon]]) a kita e artíkulo aki despues ku bo ta kuminsá editá. E rason ta:\n: ''$2''\nPor fabor konfirmá ku bo ke traha e artíkulo aki di nobo.",
+       "specialpages": "Páginanan Spesial"
 }
index 2c50096..a229310 100644 (file)
        "search-interwiki-more": "(pus)",
        "searchrelated": "relaté",
        "searchall": "tout",
-       "showingresultsheader": "{{PLURAL:$5|Résultat '''$1'''|Résultats '''$1–$2'''}} éd '''$3''' pour '''$4'''",
        "search-nonefound": "Y a autchun résultat pour chol dmanne.",
        "powersearch-legend": "Érvue avanchée",
        "powersearch-ns": "Tracher din chés éspaches éd chés noms:",
        "pager-older-n": "{{PLURAL:$1|pus viu 1|pus vius $1}}",
        "booksources": "Sources dech live",
        "booksources-search-legend": "Tracher chés référinches d'chés lives",
-       "booksources-go": "Aler",
        "log": "Gasètes",
        "allpages": "Tertous chés paches",
        "prevpage": "Pache édvant ($1)",
        "watchthispage": "Suire l'pache-lo",
        "unwatch": "N'poin suire",
        "watchlist-details": "{{PLURAL:$1|$1 pache|$1 paches}} din vote lisse à suire, chés paches éd disqhuchon n'sont poin conptées.",
-       "wlshowlast": "Montrer darin $1 eûres $2 jours $3",
+       "wlshowlast": "Montrer darin $1 eûres $2 jours",
        "watchlist-options": "Opchons del lisse à suire",
        "watching": "Suire…",
        "unwatching": "n'poin suire…",
        "metadata-expand": "Montrer chés métadatas del imache",
        "metadata-collapse": "Mucher chés métadatas del imache",
        "metadata-fields": "Chés cans d'chés métadonnées EXIF afiqués din ch'messache-lo is s'ront mis din l'pache d'édvisse éd l'image quant el tabe d'chés métadonnées ale s'ro rapetichée.<br />\nChés eutes cans is s'ront muchés pèr défeut.\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",
-       "watchlistall2": "tertous",
        "namespacesall": "tous",
        "monthsall": "tertous",
        "imgmultipageprev": "← pache édvant",
index caf85e5..5157220 100644 (file)
        "movethispage": "Blatt ziehe",
        "pager-newer-n": "{{PLURAL:$1|neegscht|neegscht $1}}",
        "pager-older-n": "{{PLURAL:$1|letscht|letscht $1}}",
-       "booksources-go": "Uffgucke",
        "specialloguserlabel": "Yuuser:",
        "speciallogtitlelabel": "Titel:",
        "log": "Logbicher",
        "unwatchthispage": "Nimmi watsche",
        "notanarticle": "Ken Blatt",
        "watchlist-details": "{{PLURAL:$1|$1 Blatt|$1 Bledder}} uff dei Watch-Lischt, ohne Gschwetz-Bledder",
-       "wlshowlast": "Zeig die Enneringe vun de letscht $1 Schtund, $2 Daag odder $3.",
+       "wlshowlast": "Zeig die Enneringe vun de letscht $1 Schtund, $2 Daag odder .",
        "watching": "Watsche…",
        "unwatching": "Nimmi watsche...",
        "enotif_impersonal_salutation": "{{SITENAME}}-Yuuser",
        "exif-meteringmode-255": "Naett bekannt",
        "exif-gaincontrol-0": "Ken",
        "exif-iimcategory-sci": "Wisseschaft unn Waerkzeichheet‎",
-       "watchlistall2": "all",
        "namespacesall": "all",
        "monthsall": "all",
        "scarytranscludetoolong": "[URL iss zu lang]",
index c8d1d7b..9ac3ca7 100644 (file)
@@ -17,7 +17,6 @@
        "tog-showtoolbar": "Instrumente-Leist wiese (JavaScript)",
        "tog-editondblclick": "Siede mett Dobbeltklick beoabeide (JavaScript)",
        "tog-editsectiononrightclick": "Eenzelne Aufschnette mett eenem Rajsch-Klick beoabeide (JavaScript)",
-       "tog-rememberpassword": "Login bewoare, dee Brucka blift aun disem Computer aunjemaldt",
        "tog-previewontop": "Wies Preview bowe em Beoabeide-Fensta",
        "tog-showhiddencats": "Wies fe'stoakne Kategorien",
        "underline-always": "Emma",
        "talkpagelinktext": "Beredsied",
        "specialpage": "Spezialsied",
        "personaltools": "Perseenliche Instrumente",
-       "postcomment": "Kommentar moake",
        "talk": "Beredsied",
        "views": "Aunsechte",
        "toolbox": "Instrumente",
        "yourname": "Bruckanome:",
        "yourpassword": "Pauswot:",
        "nav-login-createaccount": "Aunmalde",
-       "loginprompt": "Tom Aunmalde motte Cookies bie {{SITENAME}} aktiviet senne.",
        "userlogin": "Aunmalde",
        "logout": "Rut hia",
        "userlogout": "Rut hia",
        "savearticle": "Sied bewoare",
        "preview": "Preview",
        "showpreview": "Wies Preview",
-       "showlivepreview": "Live-Preview",
        "showdiff": "Endanisse wiese",
        "anoneditwarning": "'''Paus opp:''' Du best nich aunjemaldt. Diene IP-Adras woat enne Versioonsjeschicht oppbewoat en es emma to seene.",
        "missingsummary": "'''Dentj draun:''' Du hast tjeene Toopfotinj jemoakt. Wan du wada opp Bewoare klickst, woat diene Endanis ohne Toopfotinj ewanohme.",
        "mypreferences": "Miene Ennstalinje",
        "youremail": "Email:",
        "username": "Bruckanome:",
-       "uid": "Brucka-ID:",
        "prefs-memberingroups": "Mettjliet von {{PLURAL:$1|group|groups}}:",
        "yourrealname": "Ajchta Nome:",
        "yourlanguage": "Sproak:",
        "speciallogtitlelabel": "Tietel:",
        "all-logs-page": "Aule Berejchte",
        "allpages": "Aule Siede",
-       "alphaindexline": "$1 bott $2",
        "allpagesfrom": "Wies Siede fonn auf:",
        "allarticles": "Aule Siede",
        "mywatchlist": "Miene Oppaussied",
        "tooltip-rollback": "\"Rollback\" dreit dee Endarung(e) von dise Sied mett eenem Klick wada tridj bettem latsten Biedrach.",
        "tooltip-undo": "Moakt bloos dise eene Endarung tridj en wiest daut Resultaut en eenem Eschtmolseene-Fensta, doamett enne Toopfotinj een Grunt jenant woare kaun.",
        "common.css": "/* CSS opp dise Sted woat opp aula Skins wirtje */",
-       "cologneblue.css": "/* CSS opp dise Sted wirtjt opp daut Keloonsch-Blau-Skin */",
-       "monobook.css": "/* CSS opp dise Sted wirtjt opp daut Monobook-Skin */",
-       "modern.css": "/* CSS opp dise Sted wirtjt opp daut Modern-Skin */",
        "print.css": "/* CSS opp dise Sted woat daut Utkome vom Dretje aundasch moake */",
        "common.js": "/* Daut neachste JavaScript woat fe aula Brucka jelode. */",
-       "cologneblue.js": "/* Daut neachste JavaScript woat fe Brucka mett Keloonsch-Blau-Skin jelode */",
-       "monobook.js": "/* Daut neachste JavaScript woat fe Brucka mett Monobook-Skin jelode */",
-       "modern.js": "/* Daut neachste JavaScript woat fe Brucka mett Modern-Skin jelode. */",
-       "notacceptable": "Dee Wiki-Server kaun dee Dote nich soo reedmoake, daut dien Jereetschauft dee lese kaun.",
        "anonymous": "Onbekaunda Brucka {{PLURAL:$1|user|users}} von {{SITENAME}}",
        "siteuser": "{{SITENAME}}-Brucka $1",
        "lastmodifiedatby": "Dise Sied word daut latste Mol aum $1, Klock $2 von $3 je'endat.",
        "markedaspatrolledtext": "Dee utjewehlde Sied-Versioon es aus kontrolliet markiet.",
        "bad_image_list": "Format:\n\nBloos items, woone mett eenem * aunfange, woare jenome. Dee eschta Link no dem * mott een Link opp een schlajchtet Dokument (file) senne. Dee Links, woone dan kome, wiese opp Utnohme, aulsoo soone Siede, woo daut Dokument (file) jewese en jeseene woare kaun.",
        "metadata": "Meta-Dote",
-       "watchlistall2": "aule",
        "namespacesall": "aule",
        "monthsall": "aule",
        "specialpages": "Spezialsiede"
index f60e1dc..baf36fa 100644 (file)
        "passwordreset-username": "Middawaida:",
        "passwordreset-capture": "E-Mail õgugge?",
        "changeemail-none": "(käni)",
-       "changeemail-cancel": "Uffhere",
        "bold_sample": "Feddi Schrifd",
        "bold_tip": "Feddi Schrifd",
        "italic_sample": "Schebbi Schrifd",
        "search-relatedarticle": "Vawond",
        "searchrelated": "vawond",
        "searchall": "alle",
-       "showingresultsheader": "{{PLURAL:$5|Eagewnis '''$1''' vun '''$3'''|Eagewnis '''$1–$2''' vun '''$3'''}} fa '''$4'''",
        "search-nonefound": "Kä Eagewnis vunde Õfroch.",
        "powersearch-legend": "Erwaiterte Such",
        "powersearch-ns": "In de Namensraim suche:",
        "uncategorizedtemplates": "Vorlach ohne Sachgrubb",
        "unusedcategories": "Vawaisdi Sachgrubb",
        "unusedimages": "Vawaisde Dadaije",
-       "popularpages": "Bliewbde Saide",
        "wantedcategories": "Gwinschde Sachgrubbe",
        "wantedpages": "Gwinschde Saide",
        "mostlinkedcategories": "Nizlischi Sachgrubbe",
        "pager-older-n": "{{PLURAL:$1|vorisch 1|vorische $1}}",
        "booksources": "Buchgwelle",
        "booksources-search-legend": "Noch Buchgwelle gugge",
-       "booksources-go": "Geh",
        "log": "Logbischa",
        "allpages": "Alle Saide",
        "prevpage": "Voriche Said ($1)",
        "watchthispage": "Die Said beowachde",
        "unwatch": "Nemme beowachde",
        "watchlist-details": "S hodd {{PLURAL:$1|$1 Said|$1 Saide}} uff doina Beowachdungslischd, Dischbediersaide zeeln nedd gdrennd.",
-       "wlshowlast": "Die ledschde $1 Schdunnd $2 Daach $3 zaische",
+       "wlshowlast": "Die ledschde $1 Schdunnd $2 Daach  zaische",
        "watchlist-options": "Meschlischkaide vunde Beowachdungslischd",
        "watching": "Beowachde ...",
        "unwatching": "Nimmi beowachde ...",
        "exif-iimcategory": "Sachgrubb",
        "exif-iimsupplementalcategory": "Ergenzndi Sachgrubbe",
        "exif-gaincontrol-0": "Kään",
-       "watchlistall2": "alle",
        "namespacesall": "alle",
        "monthsall": "alle",
        "watchlisttools-view": "Die wischdische Ännarunge õgugge",
index 22ffb43..bfa517f 100644 (file)
@@ -1,71 +1,69 @@
 {
-    "@metadata": {
-        "authors": [
-            "Eukesh (on pi.wikipedia.org)",
-            "Hemant wikikosh1",
-            "Vibhijain"
-        ]
-    },
-    "january": "ज्यानुवरी",
-    "february": "फ़रवरी",
-    "march": "मार्च",
-    "april": "अप्रैल",
-    "may_long": "मई",
-    "june": "जून",
-    "july": "जुलाई",
-    "august": "अगस्त",
-    "september": "सेप्टेम्बर",
-    "october": "ओक्टोबर",
-    "november": "नवम्बर",
-    "december": "दिसम्बर",
-    "article": "लेख पत्त",
-    "vector-view-create": "रचेतु",
-    "help": "सहायता",
-    "search": "अन्वेसना",
-    "searchbutton": "खोज",
-    "searcharticle": "गच्छामि",
-    "create": "रचेतु",
-    "talkpagelinktext": "सम्भासनं",
-    "talk": "सम्भासनं",
-    "aboutsite": "{{SITENAME}} इच्चस्स विसये",
-    "disclaimers": "पच्चाक्खानं",
-    "mainpage": "पमुख पत्त",
-    "mainpage-description": "पमुख पत्त",
-    "portal": "समुदायद्वारं",
-    "portal-url": "Project:समुदायद्वारं",
-    "privacy": "गोपनीयता-नीति",
-    "editsection": "सम्पादेतु",
-    "editsectionhint": "एतं विभागं सम्पादेतु",
-    "red-link-title": "$1 (पिट्ठं न वत्तति)",
-    "nstab-main": "पिट्ठं",
-    "post-expand-template-inclusion-warning": "'''पबोधो:''' फलकानं योजनस्स आकारो अतिविसालो वत्तति।\nकानिचन फलकानि योजेतुं न सक्कन्ति ।",
-    "currentrev-asof": "वत्तमाना आवुत्ति  $1 इति समये",
-    "previousrevision": "↓← पुरातनं अवतरणं",
-    "searchmenu-new": "अस्मिं विकियं \"[[:$1]]\" इति पिट्ठं रचेतु।",
-    "search-result-size": "$1 ({{PLURAL:$2|1 सद्दो|$2 सद्दा}})",
-    "recentchanges": "सज्जोजातानि परिवत्तनानि",
-    "hide": "गोपेतु",
-    "show": "दस्सेतु",
-    "randompage": "यदिच्छकपिट्ठं",
-    "nbytes": "$1 {{PLURAL:$1|बाइटं|बाइटानि}}",
-    "booksources-go": "गच्छामि",
-    "allarticles": "सब्ब लेखा",
-    "allpagessubmit": "गच्छामि",
-    "contribslink": "योगदानानि",
-    "export": "पिट्ठानं निय्यातं करोतु",
-    "allmessagesname": "नाम",
-    "tooltip-ca-talk": "पिट्ठन्तग्गतविसये सम्भासनं",
-    "tooltip-ca-move": "इदं पिट्ठं चालेतु",
-    "tooltip-ca-watch": "इदं पिट्ठं भवतो अवेक्खणसूचियं योजेतु",
-    "tooltip-search": "{{SITENAME}} इच्चेत्थ अन्विस्सतु",
-    "tooltip-search-fulltext": "एतं वचनं पिट्ठेसु अन्विस्सतु",
-    "tooltip-p-logo": "मुखपिट्ठं गच्छतु",
-    "tooltip-n-recentchanges": "सज्जोजातानं परिवत्तनानं सूची",
-    "tooltip-n-randompage": "यदिच्छकं पिट्ठं गच्छतु",
-    "tooltip-n-help": "अन्वेसनठानं",
-    "tooltip-t-specialpages": "सब्बेसं पमुखानं पिट्ठानं सूची",
-    "tooltip-summary": "संखित्तं सारंसं योजेतु",
-    "exif-gpslatitude": "अक्षांश",
-    "exif-gpslongitude": "देशान्तर",
-    "exif-sensingmethod-1": "अपरिभाषित"
+       "@metadata": {
+               "authors": [
+                       "Eukesh (on pi.wikipedia.org)",
+                       "Hemant wikikosh1",
+                       "Vibhijain"
+               ]
+       },
+       "january": "ज्यानुवरी",
+       "february": "फ़रवरी",
+       "march": "मार्च",
+       "april": "अप्रैल",
+       "may_long": "मई",
+       "june": "जून",
+       "july": "जुलाई",
+       "august": "अगस्त",
+       "september": "सेप्टेम्बर",
+       "october": "ओक्टोबर",
+       "november": "नवम्बर",
+       "december": "दिसम्बर",
+       "article": "लेख पत्त",
+       "help": "सहायता",
+       "search": "अन्वेसना",
+       "searchbutton": "खोज",
+       "searcharticle": "गच्छामि",
+       "create": "रचेतु",
+       "talkpagelinktext": "सम्भासनं",
+       "talk": "सम्भासनं",
+       "aboutsite": "{{SITENAME}} इच्चस्स विसये",
+       "disclaimers": "पच्चाक्खानं",
+       "mainpage": "पमुख पत्त",
+       "mainpage-description": "पमुख पत्त",
+       "portal": "समुदायद्वारं",
+       "portal-url": "Project:समुदायद्वारं",
+       "privacy": "गोपनीयता-नीति",
+       "editsection": "सम्पादेतु",
+       "editsectionhint": "एतं विभागं सम्पादेतु",
+       "red-link-title": "$1 (पिट्ठं न वत्तति)",
+       "nstab-main": "पिट्ठं",
+       "post-expand-template-inclusion-warning": "'''पबोधो:''' फलकानं योजनस्स आकारो अतिविसालो वत्तति।\nकानिचन फलकानि योजेतुं न सक्कन्ति ।",
+       "currentrev-asof": "वत्तमाना आवुत्ति  $1 इति समये",
+       "previousrevision": "↓← पुरातनं अवतरणं",
+       "searchmenu-new": "अस्मिं विकियं \"[[:$1]]\" इति पिट्ठं रचेतु।",
+       "search-result-size": "$1 ({{PLURAL:$2|1 सद्दो|$2 सद्दा}})",
+       "recentchanges": "सज्जोजातानि परिवत्तनानि",
+       "hide": "गोपेतु",
+       "show": "दस्सेतु",
+       "randompage": "यदिच्छकपिट्ठं",
+       "nbytes": "$1 {{PLURAL:$1|बाइटं|बाइटानि}}",
+       "allarticles": "सब्ब लेखा",
+       "allpagessubmit": "गच्छामि",
+       "contribslink": "योगदानानि",
+       "export": "पिट्ठानं निय्यातं करोतु",
+       "allmessagesname": "नाम",
+       "tooltip-ca-talk": "पिट्ठन्तग्गतविसये सम्भासनं",
+       "tooltip-ca-move": "इदं पिट्ठं चालेतु",
+       "tooltip-ca-watch": "इदं पिट्ठं भवतो अवेक्खणसूचियं योजेतु",
+       "tooltip-search": "{{SITENAME}} इच्चेत्थ अन्विस्सतु",
+       "tooltip-search-fulltext": "एतं वचनं पिट्ठेसु अन्विस्सतु",
+       "tooltip-p-logo": "मुखपिट्ठं गच्छतु",
+       "tooltip-n-recentchanges": "सज्जोजातानं परिवत्तनानं सूची",
+       "tooltip-n-randompage": "यदिच्छकं पिट्ठं गच्छतु",
+       "tooltip-n-help": "अन्वेसनठानं",
+       "tooltip-t-specialpages": "सब्बेसं पमुखानं पिट्ठानं सूची",
+       "tooltip-summary": "संखित्तं सारंसं योजेतु",
+       "exif-gpslatitude": "अक्षांश",
+       "exif-gpslongitude": "देशान्तर",
+       "exif-sensingmethod-1": "अपरिभाषित"
 }
index 3aabf75..bfc1a12 100644 (file)
@@ -1,42 +1,42 @@
 {
-    "@metadata": {
-        "authors": [
-            "Pall Mall (on pih.wikipedia.org)"
-        ]
-    },
-    "january": "Jaenyuweri",
-    "february": "Febyuweri",
-    "march": "Maach",
-    "april": "Ieprel",
-    "may_long": "Mieh",
-    "june": "Juun",
-    "july": "Juulai",
-    "january-gen": "Jaenyuweri",
-    "february-gen": "Febyuweri",
-    "march-gen": "Maach",
-    "april-gen": "Ieprel",
-    "may-gen": "Mieh",
-    "june-gen": "Juun",
-    "july-gen": "Juulai",
-    "may": "Mieh",
-    "help": "Hiiwp",
-    "history_short": "Histrei",
-    "edit": "Edet",
-    "talk": "diskushun",
-    "currentevents": "Dem Kurent Iwent",
-    "currentevents-url": "Project:Dem Kurent Iwent",
-    "mainpage": "Mien Paij",
-    "mainpage-description": "Mien Paij",
-    "portal": "Trii'nohlij",
-    "editold": "edet",
-    "nstab-main": "Artikal",
-    "nstab-help": "Hiiwp Paij",
-    "prefs-rc": "Dem Riisent Chayng",
-    "recentchanges": "Dem Riisent Chayng",
-    "recentchangeslinked": "Dem Riilated Chayng",
-    "recentchangeslinked-feed": "Dem Riilated Chayng",
-    "recentchangeslinked-toolbox": "Dem Riilated Chayng",
-    "upload": "Upload Faail",
-    "randompage": "Raandum Paij",
-    "whatlinkshere": "Wata link hiia"
+       "@metadata": {
+               "authors": [
+                       "Pall Mall (on pih.wikipedia.org)"
+               ]
+       },
+       "january": "Jaenyuweri",
+       "february": "Febyuweri",
+       "march": "Maach",
+       "april": "Ieprel",
+       "may_long": "Mieh",
+       "june": "Juun",
+       "july": "Juulai",
+       "january-gen": "Jaenyuweri",
+       "february-gen": "Febyuweri",
+       "march-gen": "Maach",
+       "april-gen": "Ieprel",
+       "may-gen": "Mieh",
+       "june-gen": "Juun",
+       "july-gen": "Juulai",
+       "may": "Mieh",
+       "help": "Hiiwp",
+       "history_short": "Histrei",
+       "edit": "Edet",
+       "talk": "diskushun",
+       "currentevents": "Dem Kurent Iwent",
+       "currentevents-url": "Project:Dem Kurent Iwent",
+       "mainpage": "Mien Paij",
+       "mainpage-description": "Mien Paij",
+       "portal": "Trii'nohlij",
+       "editold": "edet",
+       "nstab-main": "Artikal",
+       "nstab-help": "Hiiwp Paij",
+       "prefs-rc": "Dem Riisent Chayng",
+       "recentchanges": "Dem Riisent Chayng",
+       "recentchangeslinked": "Dem Riilated Chayng",
+       "recentchangeslinked-feed": "Dem Riilated Chayng",
+       "recentchangeslinked-toolbox": "Dem Riilated Chayng",
+       "upload": "Upload Faail",
+       "randompage": "Raandum Paij",
+       "whatlinkshere": "Wata link hiia"
 }
index b655ba0..220b395 100644 (file)
                        "Wedkarski",
                        "아라",
                        "Matik7",
-                       "Vengir"
+                       "Vengir",
+                       "Darellur",
+                       "Michał Sobkowski",
+                       "Py64",
+                       "Nanaki"
                ]
        },
        "tog-underline": "Podkreślenie linków:",
-       "tog-hideminor": "Ukryj drobne edycje w ostatnich zmianach",
+       "tog-hideminor": "Ukryj drobne edycje z ostatnich zmian",
        "tog-hidepatrolled": "Ukryj sprawdzone edycje w ostatnich zmianach",
        "tog-newpageshidepatrolled": "Ukryj sprawdzone strony na liście nowych stron",
        "tog-extendwatchlist": "Pokaż na liście obserwowanych wszystkie zmiany, nie tylko ostatnie",
        "category_header": "Strony w kategorii „$1”",
        "subcategories": "Podkategorie",
        "category-media-header": "Pliki w kategorii „$1”",
-       "category-empty": "<em>Obecnie w tej kategorii brak stron oraz plików.</em>",
+       "category-empty": "<em>Obecnie w tej kategorii nie ma stron ani plików.</em>",
        "hidden-categories": "{{PLURAL:$1|Ukryta kategoria|Ukryte kategorie}}",
        "hidden-category-category": "Ukryte kategorie",
        "category-subcat-count": "{{PLURAL:$2|Ta kategoria ma tylko jedną podkategorię.|Poniżej wyświetlono $1 spośród wszystkich $2 podkategorii tej kategorii.}}",
        "personaltools": "Osobiste",
        "articlepage": "Artykuł",
        "talk": "Dyskusja",
-       "views": "Widok",
+       "views": "Wyświetleń",
        "toolbox": "Narzędzia",
        "userpage": "Strona użytkownika",
        "projectpage": "Strona projektu",
        "otherlanguages": "W innych językach",
        "redirectedfrom": "(Przekierowano z $1)",
        "redirectpagesub": "Strona przekierowująca",
+       "redirectto": "Przekierowanie do:",
        "lastmodifiedat": "Tę stronę ostatnio zmodyfikowano o $2, $1.",
        "viewcount": "Tę stronę obejrzano {{PLURAL:$1|tylko raz|$1 razy}}.",
        "protectedpage": "Strona zabezpieczona",
        "jumpto": "Skocz do:",
-       "jumptonavigation": "nawigacji",
-       "jumptosearch": "wyszukiwania",
+       "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.",
        "pool-timeout": "Zbyt długi czas oczekiwania na blokadę",
        "no-null-revision": "Nie można utworzyć zerowej wersji strony \"$1\"",
        "badtitle": "Niepoprawny tytuł",
        "badtitletext": "Podano niepoprawny tytuł strony. Prawdopodobnie jest pusty lub zawiera znaki, których użycie jest zabronione.",
-       "perfcached": "Poniższe dane są kopią z pamięci podręcznej i mogą być nieaktualne. Maksymalnie {{PLURAL:$1|jeden wynik jest|$1 wyniki są|$1 wyników jest}} w pamięci podręcznej.",
-       "perfcachedts": "Poniższe dane są kopią z pamięci podręcznej. Ostatnia aktualizacja odbyła się $1. Maksymalnie {{PLURAL:$4|jeden wynik jest|$4 wyniki są|$4 wyników jest}} w pamięci podręcznej.",
+       "perfcached": "Poniższe dane są kopią z pamięci podręcznej i mogą być nieaktualne. W pamięci podręcznej {{PLURAL:$1|znajduje|znajdują|znajduje}} się maksymalnie {{PLURAL:$1|jeden wynik|$1 wyniki|$1 wyników}}.",
+       "perfcachedts": "Poniższe dane są kopią z pamięci podręcznej. Ostatnia aktualizacja odbyła się $1. W pamięci podręcznej {{PLURAL:$4|znajduje|znajdują|znajduje}} się maksymalnie {{PLURAL:$4|jeden wynik|$4 wyniki|$4 wyników}}.",
        "querypage-no-updates": "Uaktualnienia dla tej strony są obecnie wyłączone. Znajdujące się tutaj dane nie zostaną odświeżone.",
        "viewsource": "Tekst źródłowy",
        "viewsource-title": "Tekst źródłowy strony $1",
        "viewsourcetext": "Tekst źródłowy strony można podejrzeć i skopiować.",
        "viewyourtext": "Tekst źródłowy '''zmodyfikowanej''' przez Ciebie strony możesz podejrzeć i skopiować",
        "protectedinterface": "Ta strona zawiera tekst interfejsu oprogramowania wiki i jest zabezpieczona przed nadużyciami.\nBy dodać lub zmienić tłumaczenia wszystkich serwisów wiki, użyj [//translatewiki.net/ translatewiki.net], projektu lokalizacji MediaWiki.",
-       "editinginterface": "'''Ostrzeżenie:''' Edytujesz stronę, która zawiera tekst interfejsu oprogramowania.\nZmiany na tej stronie zmienią wygląd interfejsu dla innych użytkowników tej wiki.\nBy dodać lub zmienić tłumaczenia wszystkich wiki, użyj [//translatewiki.net/wiki/Main_Page?setlang=pl translatewiki.net], specjalizowany projekt lokalizacji oprogramowania MediaWiki.",
+       "editinginterface": "<strong>Ostrzeżenie:</strong> Edytujesz stronę, która zawiera tekst interfejsu oprogramowania.\nZmiany na tej stronie zmienią wygląd interfejsu dla innych użytkowników tej wiki.",
+       "translateinterface": "Aby dodać lub zmienić tłumaczenia wszystkich wiki, użyj [//translatewiki.net/ translatewiki.net], projekt lokalizacji oprogramowania MediaWiki.",
        "cascadeprotected": "Ta strona została zabezpieczona przed edycją, ponieważ jest ona zawarta na {{PLURAL:$1|następującej stronie, która została zabezpieczona|następujących stronach, które zostały zabezpieczone}} z włączoną opcją dziedziczenia:\n$2",
        "namespaceprotected": "Nie masz uprawnień do edytowania stron w przestrzeni nazw '''$1'''.",
        "customcssprotected": "Nie jesteś uprawniony do edytowania tej strony CSS, ponieważ zawiera ona ustawienia osobiste innego użytkownika.",
        "createaccount-text": "Ktoś utworzył w {{GRAMMAR:MS.lp|{{SITENAME}}}} ($4), podając Twój adres e‐mail, konto „$2”. Aktualnym hasłem jest „$3”.\nZaloguj się teraz i je zmień.\n\nMożesz zignorować tę wiadomość, jeśli konto zostało utworzone przez pomyłkę.",
        "login-throttled": "Zbyt wiele razy próbowałeś zalogować się na to konto.\nOdczekaj $1 zanim ponowisz próbę.",
        "login-abort-generic": "Logowanie nieudane – przerwano",
+       "login-migrated-generic": "Twoje konto zostało poddane migracji i twoja nazwa użytkownika już nie istnieje na tej wiki.",
        "loginlanguagelabel": "Język: $1",
        "suspicious-userlogout": "Żądanie wylogowania zostało odrzucone ponieważ wygląda na to, że zostało wysłane przez uszkodzoną przeglądarkę lub buforujący serwer proxy.",
        "createacct-another-realname-tip": "Wpisanie imienia i nazwiska nie jest obowiązkowe.\nJeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje autorstwo.",
        "passwordreset-emailsent-capture": "Wyświetlony poniżej e‐mail pozwalający na zresetowanie hasła został wysłany.",
        "passwordreset-emailerror-capture": "Poniżej wyświetlony e‐mail pozwalający na zresetowanie hasła został wygenerowany, ale nie udało się wysłać go do {{GENDER:$2|użytkownika|użytkowniczki}}: $1",
        "changeemail": "Zmiana adresu e‐mail",
-       "changeemail-header": "Zmiana adresu e‐mail",
        "changeemail-text": "Wypełnij formularz, jeśli chcesz zmienić swój adres poczty elektronicznej. Będziesz musiał wprowadzić hasło, aby potwierdzić tę zmianę.",
        "changeemail-no-info": "Musisz być zalogowany, by uzyskać bezpośredni dostęp do tej strony.",
        "changeemail-oldemail": "Obecny adres e‐mail:",
        "changeemail-none": "(brak)",
        "changeemail-password": "Twoje hasło:",
        "changeemail-submit": "Zapisz nowy",
-       "changeemail-cancel": "Anuluj",
        "changeemail-throttled": "Zbyt wiele razy próbowałeś zalogować się na to konto.\nOdczekaj $1, zanim ponowisz próbę.",
        "resettokens": "Resetowanie tokenów",
        "resettokens-text": "Na tej stronie możesz zresetować tokeny, które umożliwiają dostęp do pewnych prywatnych danych związanych z Twoim kontem.\n\nNależy to zrobić, jeśli ktoś je poznał lub zdobył hasło do Twojego konta.",
        "showpreview": "Pokaż podgląd",
        "showdiff": "Podgląd zmian",
        "blankarticle": "<strong>Uwaga:</strong> Strona, którą masz zamiar utworzyć jest pusta.\nJeżeli klikniesz \"{{int:savearticle}}\" ponownie, strona zostanie utworzona bez jakiejkolwiek treści.",
-       "anoneditwarning": "'''Uwaga:''' Nie jesteś {{GENDER:|zalogowany|zalogowana}}.\nTwój adres IP zostanie zapisany w historii edycji strony.",
+       "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.",
        "missingcommenttext": "Wprowadź komentarz poniżej.",
        "content-model-text": "zwykły tekst",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Strony zawierające duplikaty parametrów w wywołaniach szablonów",
+       "duplicate-args-category-desc": "Strona zawiera szablony, które używają duplikatów argumentów, jak <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> lub <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Uwaga! Ta strona zawiera zbyt wiele wywołań złożonych obliczeniowo funkcji parsera.\n\nPowinno być mniej niż $2 {{PLURAL:$2|wywołanie|wywołania|wywołań}}, a obecnie {{PLURAL:$1|jest $1 wywołanie|są $1 wywołania|jest $1 wywołań}}.",
        "expensive-parserfunction-category": "Strony ze zbyt dużą liczbą wywołań kosztownych funkcji parsera",
        "post-expand-template-inclusion-warning": "Uwaga – zbyt duża wielkość wykorzystanych szablonów.\nNiektóre szablony nie zostaną użyte.",
        "mergehistory-same-destination": "Strona źródłowa i docelowa nie mogą być takie same",
        "mergehistory-reason": "Powód",
        "mergelog": "Scalone",
-       "pagemerge-logentry": "scala [[$1]] z [[$2]] (historia zmian aż do $3)",
        "revertmerge": "Rozdziel",
        "mergelogpagetext": "Poniżej znajduje się lista ostatnich scaleń historii zmian stron.",
        "history-title": "$1: Historia wersji",
        "search-result-category-size": "{{PLURAL:$1|1 element|$1 elementy|$1 elementów}} ({{PLURAL:$2|1 kategoria|$2 kategorie|$2 kategorii}}, {{PLURAL:$3|1 plik|$3 pliki|$3 plików}})",
        "search-redirect": "(przekierowanie $1)",
        "search-section": "(sekcja $1)",
+       "search-category": "(kategoria $1)",
        "search-file-match": "(odpowiada zawartości pliku)",
        "search-suggest": "Czy chodziło Ci o: $1",
        "search-interwiki-caption": "Projekty siostrzane",
        "searchall": "wszystkie",
        "showingresults": "Poniżej znajduje się lista {{PLURAL:$1|z '''1''' wynikiem|'''$1''' wyników}}, rozpoczynając od wyniku numer '''$2'''.",
        "showingresultsinrange": "Poniżej wyświetlono co najwyżej {{PLURAL:$1|<strong>1</strong> wynik|<strong>$1</strong> wyniki|<strong>$1</strong> wyników}} w zakresie od <strong>$2</strong> do <strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Wynik '''$1''' z '''$3'''|Wyniki '''$1 – $2''' z '''$3'''}} dla '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Wynik <strong>$1</strong> z <strong>$3</strong>|Wyniki <strong>$1 - $2</strong> z <strong>$3</strong>}}",
        "search-nonefound": "Brak wyników spełniających kryteria podane w zapytaniu.",
        "powersearch-legend": "Wyszukiwanie zaawansowane",
        "powersearch-ns": "Przeszukaj przestrzenie nazw:",
        "powersearch-remember": "Zapamiętaj wybór dla kolejnych wyszukiwań",
        "search-external": "Wyszukiwanie zewnętrzne",
        "searchdisabled": "Wyszukiwanie w {{GRAMMAR:MS.lp|{{SITENAME}}}} zostało wyłączone.\nW międzyczasie możesz skorzystać z wyszukiwania Google.\nJednak informacje o treści {{GRAMMAR:D.lp|{{SITENAME}}}} mogą być w Google nieaktualne.",
-       "search-error": "Wystąpił błąd podczas wyszukiwania:$1",
+       "search-error": "Wystąpił błąd podczas wyszukiwania: $1",
        "preferences": "Preferencje",
        "mypreferences": "Preferencje",
        "prefs-edits": "Liczba edycji:",
        "gender-female": "kobieta",
        "prefs-help-gender": "Podanie płci nie jest obowiązkowe. Jeśli zdecydujesz się ją określić, oprogramowanie dostosuje do niej interfejs. Informacja o Twojej płci będzie widoczna dla wszystkich.",
        "email": "E‐mail",
-       "prefs-help-realname": "Wpisanie imienia i nazwiska nie jest obowiązkowe.\nJeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje autorstwo.",
+       "prefs-help-realname": "Imię i nazwisko jest opcjonalne.\nJeśli je podasz, to może być stosowane w celu przypisania Twojej pracy.",
        "prefs-help-email": "Podanie adresu e‐mail nie jest obowiązkowe, lecz jest konieczne do zresetowania zapomnianego hasła.",
        "prefs-help-email-others": "Możesz również umożliwić innym użytkownikom wysłanie do Ciebie e‐maila poprzez Twoją stronę użytkownika lub stronę dyskusji (bez ujawniania Twojego adresu).",
        "prefs-help-email-required": "Wymagany jest adres e‐mail.",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Zmiany",
        "prefs-help-prefershttps": "Ta opcja zacznie działać przy twoim następnym zalogowaniu.",
+       "prefswarning-warning": "Niektóre z dokonanych zmian w preferencjach nie zostały jeszcze zapisane. Jeśli wyjdziesz bez wciśnięcia „$1”, Twoje zmiany zostaną utracone.",
        "prefs-tabs-navigation-hint": "Wskazówka: do poruszania się między zakładkami możesz użyć klawiszy strzałek w lewo i w prawo",
        "email-address-validity-valid": "Wygląda na prawidłowy",
        "email-address-validity-invalid": "Wymagany jest prawidłowy adres!",
-       "userrights": "Zarządzaj uprawnieniami użytkowników",
+       "userrights": "Zarządzanie uprawnieniami użytkowników",
        "userrights-lookup-user": "Zarządzaj grupami użytkownika",
        "userrights-user-editname": "Wprowadź nazwę użytkownika",
        "editusergroup": "Edytuj grupy użytkownika",
        "right-deletedtext": "Podgląd usuniętego tekstu i zmian pomiędzy usuniętymi wersjami",
        "right-browsearchive": "Przeszukiwanie usuniętych stron",
        "right-undelete": "Odtwarzanie usuniętych stron",
-       "right-suppressrevision": "Podgląd i odtwarzanie wersji ukrytych przed administratorami",
+       "right-suppressrevision": "Podgląd, ukrywanie i odkrywanie wersji ukrytych przed wszystkimi",
        "right-viewsuppressed": "Umożliwia zobaczenie wersji ukrytych przed każdym użytkownikiem",
        "right-suppressionlog": "Podgląd rejestru ukrywania",
        "right-block": "Blokowanie użytkownikom możliwości edycji",
        "recentchanges-legend-heading": "'''Legenda:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (zobacz też [[Special:NewPages|listę nowych stron]])",
        "recentchanges-legend-plusminus": "(''±123'')",
-       "rcnotefrom": "Poniżej {{PLURAL:$5|pokazano zmianę|pokazano zmiany}} wykonane po <strong>$3, $4</strong> (nie więcej niż '''$1''' pozycji).",
+       "rcnotefrom": "Poniżej {{PLURAL:$5|pokazano zmianę|pokazano zmiany}} {{PLURAL:$5|wykonaną|wykonane}} po <strong>$3, $4</strong> (nie więcej niż '''$1''' pozycji).",
        "rclistfrom": "Pokaż nowe zmiany od $3 $2",
        "rcshowhideminor": "$1 drobne zmiany",
        "rcshowhideminor-show": "Pokaż",
        "illegalfilename": "Nazwa pliku „$1” zawiera znaki niedozwolone w tytułach stron.\nZmień nazwę pliku i prześlij go ponownie.",
        "filename-toolong": "Nazwy plików nie mogą być dłuższe niż 240 bajtów.",
        "badfilename": "Nazwa pliku została zmieniona na „$1”.",
-       "filetype-mime-mismatch": "Rozszerzenie pliku â\80\9e.$1â\80\9c nie pasuje do wykrytego typu MIME $2.",
+       "filetype-mime-mismatch": "Rozszerzenie pliku â\80\9e.$1â\80\9d nie pasuje do wykrytego typu MIME $2.",
        "filetype-badmime": "Przesyłanie plików z typem MIME „$1” jest niedozwolone.",
        "filetype-bad-ie-mime": "Nie można załadować tego pliku, ponieważ Internet Explorer wykryje go jako „$1”, a taki typ pliku jest zabronioniony jako potencjalnie niebezpieczny.",
        "filetype-unwanted-type": "'''„.$1”''' nie jest zalecanym typem pliku. Pożądane są pliki w {{PLURAL:$3|formacie|formatach}} $2.",
        "statistics": "Statystyki",
        "statistics-header-pages": "Statystyka stron",
        "statistics-header-edits": "Statystyka edycji",
-       "statistics-header-views": "Statystyka odwiedzin",
        "statistics-header-users": "Statystyka użytkowników",
        "statistics-header-hooks": "Inne statystyki",
        "statistics-articles": "Strony",
        "statistics-files": "Przesłane pliki",
        "statistics-edits": "Edycje wykonane od powstania {{GRAMMAR:D.lp|{{SITENAME}}}}",
        "statistics-edits-average": "Średnia liczba edycji na stronę",
-       "statistics-views-total": "Całkowita liczba odwiedzin",
-       "statistics-views-total-desc": "Odsłony stron nieistniejących oraz specjalnych nie zostały uwzględnione.",
-       "statistics-views-peredit": "Liczba odwiedzin na edycję",
        "statistics-users": "Zarejestrowanych [[Special:ListUsers|użytkowników]]",
        "statistics-users-active": "Aktywnych użytkowników",
        "statistics-users-active-desc": "Użytkownicy, którzy byli aktywni w ciągu {{PLURAL:$1|ostatniego dnia|ostatnich $1 dni}}",
-       "statistics-mostpopular": "Najczęściej odwiedzane strony",
        "pageswithprop": "Strony z właściwościami",
        "pageswithprop-legend": "Strony z właściwościami",
        "pageswithprop-text": "Ta strona zawiera listę stron korzystających z właściwości.",
        "uncategorizedtemplates": "Nieskategoryzowane szablony",
        "unusedcategories": "Puste kategorie",
        "unusedimages": "Nieużywane pliki",
-       "popularpages": "Najpopularniejsze strony",
        "wantedcategories": "Brakujące kategorie",
        "wantedpages": "Najpotrzebniejsze strony",
        "wantedpages-badtitle": "Nieprawidłowy tytuł wśród wyników – $1",
        "pager-older-n": "{{PLURAL:$1|1 starszy|$1 starsze|$1 starszych}}",
        "suppress": "Rewizor",
        "querypage-disabled": "Ta strona specjalna została wyłączona ze względu na ograniczenia wydajności.",
+       "apihelp": "Pomoc API",
+       "apihelp-no-such-module": "Moduł \"$1\" nie znaleziony.",
        "booksources": "Książki",
        "booksources-search-legend": "Szukaj informacji o książkach",
-       "booksources-go": "Pokaż",
+       "booksources-search": "Szukaj",
        "booksources-text": "Poniżej znajduje się lista odnośników do innych witryn, które pośredniczą w sprzedaży nowych i używanych książek, a także mogą posiadać dalsze informacje na temat poszukiwanej przez Ciebie książki.",
        "booksources-invalid-isbn": "Podany numer ISBN został rozpoznany jako nieprawidłowy. Sprawdź czy podany numer zgadza się z numerem zaczerpniętym ze źródła.",
        "specialloguserlabel": "Kto",
        "wlheader-enotif": "Wysyłanie powiadomień na adres e‐mail jest włączone.",
        "wlheader-showupdated": "'''Wytłuszczone''' zostały strony, które zostały zmodyfikowane od Twojej ostatniej wizyty na nich.",
        "wlnote": "Poniżej pokazano {{PLURAL:$1|zmianę wykonaną|<strong>$1</strong> zmiany wykonane|<strong>$1</strong> zmian wykonanych}} w ciągu {{PLURAL:$2|ostatniej godziny|ostatnich <strong>$2</strong> godzin}}, licząc od $4 dnia $3.",
-       "wlshowlast": "Pokaż ostatnie $1 godzin, $2 dni ($3)",
+       "wlshowlast": "Pokaż ostatnie $1 godzin, $2 dni",
        "watchlist-options": "Opcje obserwowanych",
        "watching": "Dodaję do obserwowanych...",
        "unwatching": "Przestaję obserwować...",
        "protect-othertime": "Inny okres",
        "protect-othertime-op": "inny okres",
        "protect-existing-expiry": "Obecny czas wygaśnięcia: $2 o $3",
+       "protect-existing-expiry-infinity": "Obecny czas wygaśnięcia: nieskończony",
        "protect-otherreason": "Inny lub dodatkowy powód",
        "protect-otherreason-op": "Inny powód",
        "protect-dropdown": "*Najczęstsze powody zabezpieczenia\n** Częste wandalizmy\n** Częste spamowanie\n** Wojna edycyjna\n** Wygłupy",
        "unblocked": "[[User:$1|$1]] {{GENDER:$1|został odblokowany|została odblokowana|został odblokowany}}.",
        "unblocked-range": "$1 został odblokowany",
        "unblocked-id": "Blokada $1 została zdjęta",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] został odblokowany.",
        "blocklist": "Zablokowani użytkownicy",
        "ipblocklist": "Zablokowani użytkownicy",
        "ipblocklist-legend": "Znajdź zablokowanego użytkownika",
        "tooltip-pt-mycontris": "Lista moich edycji",
        "tooltip-pt-login": "Zachęcamy do zalogowania się, choć nie jest to obowiązkowe.",
        "tooltip-pt-logout": "Wyloguj",
+       "tooltip-pt-createaccount": "Zachęcamy do stworzenia konta i zalogowania, ale nie jest to konieczne.",
        "tooltip-ca-talk": "Dyskusja o zawartości tej strony",
        "tooltip-ca-edit": "Możesz edytować tę stronę. Przed zapisaniem zmian użyj przycisku podgląd.",
        "tooltip-ca-addsection": "Dodaj nowy wątek.",
        "tooltip-feed-atom": "Kanał Atom dla tej strony",
        "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-specialpages": "Lista wszystkich specjalnych stron",
        "tooltip-t-print": "Wersja do wydruku",
        "pageinfo-robot-policy": "Indeksowanie przez roboty",
        "pageinfo-robot-index": "Dozwolone",
        "pageinfo-robot-noindex": "Niedozwolone",
-       "pageinfo-views": "Odsłon",
        "pageinfo-watchers": "Liczba obserwujących",
        "pageinfo-few-watchers": "Mniej niż $1 {{PLURAL:$1|obserwujący|obserwujących}}",
        "pageinfo-redirects-name": "Liczba przekierowań do tej strony",
        "exif-urgency-low": "Niski ($1)",
        "exif-urgency-high": "Wysoki ($1)",
        "exif-urgency-other": "Priorytet zdefiniowany przez użytkownika ($1)",
-       "watchlistall2": "wszystkie",
        "namespacesall": "wszystkie",
        "monthsall": "wszystkie",
        "confirmemail": "Potwierdzanie adresu e‐mail",
        "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",
        "rightsnone": "brak",
+       "revdelete-summary": "opis zmian",
        "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ść:",
        "searchsuggest-search": "Szukaj",
        "searchsuggest-containing": "zawierające...",
        "api-error-badaccess-groups": "Nie masz uprawnień aby przesyłać pliki do tej wiki.",
-       "api-error-badtoken": "Błąd wewnętrzny – żeton wykorzystywany do identyfikacji użytkownika jest nieprawidłowy.",
+       "api-error-badtoken": "Błąd wewnętrzny – nieprawidłowy kod weryfikacyjny (token).",
        "api-error-copyuploaddisabled": "Przesyłanie poprzez podanie adresu URL zostało na tym serwerze wyłączone.",
        "api-error-duplicate": "{{PLURAL:$1|Jest już [$2 inny plik]|Są już [$2 inne pliki]}} o tej samej zawartości",
        "api-error-duplicate-archive": "{{PLURAL:$1|Był już [$2 inny plik]|Były już [$2 inne pliki]}} o takiej samej zawartości, ale {{PLURAL:$1|został usunięty|zostały usunięte}}.",
        "log-description-pagelang": "Rejestr zmian języków przypisanych do poszczególnych stron",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|zmienił|zmieniła}} język strony $3 z „$4” na „$5”.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (włączone)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''wyłączone''')"
+       "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-table-mimetype": "Typ MIME",
+       "mediastatistics-table-extensions": "Możliwe rozszerzenia",
+       "mediastatistics-table-count": "Liczba plików",
+       "mediastatistics-table-totalbytes": "Łączny rozmiar",
+       "mediastatistics-header-unknown": "Nieznane",
+       "mediastatistics-header-bitmap": "Obrazy bitmapowe",
+       "mediastatistics-header-drawing": "Rysunki (obrazy wektorowe)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Filmy",
+       "mediastatistics-header-multimedia": "Mieszane multimedia",
+       "mediastatistics-header-office": "Biuro",
+       "mediastatistics-header-text": "Tekstowe",
+       "mediastatistics-header-executable": "Pliki wykonywalne",
+       "mediastatistics-header-archive": "Formaty skompresowane",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|końcowy przecinek został usunięty|końcowe przecinki zostały usunięte}} z JSON",
+       "json-error-unknown": "Wystąpił problem z JSON. Błąd: $1",
+       "json-error-depth": "Została przekroczona maksymalna głębokość stosu",
+       "json-error-state-mismatch": "Niewłaściwy lub nieprawidłowo sformułowany JSON",
+       "json-error-ctrl-char": "Błąd znaku control, ewentualnie błędnie zakodowane.",
+       "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"
 }
index ffad648..47e8040 100644 (file)
        "otherlanguages": "Àutre lenghe",
        "redirectedfrom": "(Ridiression da $1)",
        "redirectpagesub": "Pàgina ëd ridiression",
+       "redirectto": "Ridiression a:",
        "lastmodifiedat": "Modificà l'ùltima vira ai $1 a $2.",
        "viewcount": "St'artìcol-sì a l'é stàit lesù {{PLURAL:$1|na vira|$1 vire}}.",
        "protectedpage": "Pàgina proteta",
        "viewsourcetext": "A peul vardé e copié la sorgiss dë sta pàgina:",
        "viewyourtext": "A peul vëdde e copié la sorgiss ëd '''soe modìfiche''' a costa pàgina-sì:",
        "protectedinterface": "Costa pàgina-sì a l'ha andrinta un cheicòs che a fa part dl'antërfacia dël programa che a deuvro tùit; donca a l'é proteta për evité che a-i rivo dle ròbe brute.\nPër gionté o modifiché dle tradussion për tute le wiki, për piasì ch'a deuvra [//translatewiki.net/ translatewiki.net], ël proget ëd localisassion ëd MediaWiki.",
-       "editinginterface": "'''Dossman!''' A l'é dapress ch'a modìfica na pàgina ch'as deuvra për generé ël test dl'antërfacia dël programa. \nLe modìfiche a sta pàgina a toco l'aparensa ëd l'antërfacia utent a tuti j'utent dzora a sta wiki. \nPër gionté o cangé dle tradussion për tute le wiki, për piasì ch'a deuvra [//translatewiki.net/translatewiki.net], ël proget ëd localisassion ëd MediaWiki.",
+       "editinginterface": "<strong>Dossman!</strong> A l'é dapress ch'a modìfica na pàgina ch'as deuvra për generé ël test dl'antërfacia dël programa. \nLe modìfiche a sta pàgina a toco l'aparensa ëd l'antërfacia utent a tuti j'utent dzora a sta wiki.",
+       "translateinterface": "Për gionté o modifiché le tradussion për tute le wiki, për piasì ch'a deuvra [//translatewiki.net/ translatewiki.net], ël proget ëd localisassion ëd MediaWiki.",
        "cascadeprotected": "Ant sta pàgina-sì as peulo pa fé ëd modìfiche, përché a-i intra ant {{PLURAL:$1|la pàgina|le pàgine}} butà sot a protession con la fonsion «a tombé» viscà ansima a: $2",
        "namespaceprotected": "A l'ha nen ël përmess dë feje dle modìfiche a le pàgine dlë spassi nominal '''$1'''.",
        "customcssprotected": "Ch'a varda ch'a l'ha pa ël përmess ëd modifiché sta pàgina ëd CSS, për via ch'a l'ha andrinta ij gust ëd n'àutr utent.",
        "createaccount-text": "Cheidun a l'ha duvertà un cont për soa adrëssa ëd pòsta eletrònica ansima a {{SITENAME}} ($4) butand da stranòm «$2» e da ciav «$3». A dovrìa rintré ant ël sistema e cambiesse soa ciav pì ampressa ch'a peul.\n\nSe sòn a l'é rivà për eror, a peul lassé perde e fé gnente sensa problema.",
        "login-throttled": "A l'ha fàit tròpi tentativ recent d'intré ant ël sistema.\nPër piasì, ch'a speta $1 prima ëd prové torna.",
        "login-abort-generic": "Sò tentitiv d'intré ant ël sistema a l'é falì - Abortì",
+       "login-migrated-generic": "Sò cont a l'ha emigrà, e sò stranòm a esist pi nen su costa wiki.",
        "loginlanguagelabel": "Lenga: $1",
        "suspicious-userlogout": "Soa arcesta ëd seurte dal sistema a l'é stàita arfudà përchè a smija com s'a fussa stàita mandà da 'n navigador rot o da l'archiviassion an local d'un prëstanòm.",
        "createacct-another-realname-tip": "Ël nòm ver a l'é opsional.\nS'a decid ëd butelo, a sarà dovrà për dé a l'utent ël mérit ëd sò travaj.",
        "passwordreset-emailsent-capture": "Un mëssagi ëd riampostassion ëd la ciav a l'é stàit mandà, e a l'é mostrà sì-sota.",
        "passwordreset-emailerror-capture": "Un mëssagi ëd riampostassion ëd la ciav a l'é stàit generà, e a l'é smonù sì-sota, ma la spedission a {{GENDER:$2|l'utent}} a l'é falìa: $1",
        "changeemail": "Cangé l'adrëssa ëd pòsta eletrònica",
-       "changeemail-header": "Cangé l'adrëssa ëd pòsta eletrònica dël cont",
        "changeemail-text": "Ch'a completa 's formolari për cangé soa adrëssa eletrònica. A dev anserì soa ciav për confirmé costa modìfica.",
        "changeemail-no-info": "A dev esse intrà ant ël sistema për andé diretament a costa pàgina.",
        "changeemail-oldemail": "Adrëssa ëd pòsta eletrònica atual:",
        "changeemail-none": "(gnun-a)",
        "changeemail-password": "Soa ciav su {{SITENAME}}:",
        "changeemail-submit": "Cangé l'adrëssa ëd pòsta eletrònica",
-       "changeemail-cancel": "Anulé",
        "changeemail-throttled": "A l'ha fàit tròpi tentativ ëd rintré ant ël sistema.\nPër piasì, ch'a speta $1 prima ëd prové torna.",
        "resettokens": "Riamposté ij geton",
        "resettokens-text": "Ambelessì a peul riamposté ij geton ch'a permëtto d'acede a chèich dàit privà associà a sò cont.\n\nA dovrìa felo si për asar chiel a l'ha partagiaje con cheidun o si sò cont a l'é stàit compromëttù.",
        "showpreview": "Mostré na preuva",
        "showdiff": "Smon-me le modìfiche",
        "blankarticle": "<strong>Atension:</strong> La pàgina ch'a l'ha creà a l'é veuida. S'a sgnaca torna «{{int:savearticle}}», la pàgina a sarà creà sensa contnù.",
-       "anoneditwarning": "'''Atension:''' A l'é nen rintrà ant ël sistema. Soa adrëssa IP a sarà registrà ant la stòria dle modìfiche ëd sa pàgina.",
+       "anoneditwarning": "<strong>Atension:<strong> A l'é nen rintrà ant ël sistema. Soa adrëssa IP a së sc-iairërà s'a fà dle modìfiche. Si chiel a <strong>[$1 rintra ant ël sistema]</strong> o <strong>[$2 a crea an cont]</strong>, soe modìfiche a saran atribuìe a sò stranòm, ansema a d'àutri vantagg.",
        "anonpreviewwarning": "''A l'é nen rintrà ant ël sistema. An salvand a sarà memorisà soa adrëssa IP ant la stòria dle modìfiche ëd sa pàgina.''",
        "missingsummary": "'''Nòta:''' a l'ha butà gnun resumé dla modìfica. Se a sgnaca «{{int:savearticle}}» n'àutra vira, soa modìfica a resterà salvà sensa resumé.",
        "missingcommenttext": "Për piasì, che a buta un coment sì-sota.",
        "content-model-text": "mach test",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Pàgine ch'a deuvro d'argoment dobi ant j'arceste dë stamp",
+       "duplicate-args-category-desc": "La pàgina a conten cj'arceste dë stamp che deuvro ëd duplicà d'argoment, tanme <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Atension:''' Costa pàgina a l'ha tròpe ciamà costose a le fonsions d'anàlisi sintàtica.\n\nA dovrìa essnie men che {{PLURAL:$2|$2}}, adess a-i na j'é {{PLURAL:$1|$1}}.",
        "expensive-parserfunction-category": "Pàgine con tròpe ciamà costose ëd fonsion ëd l'analisator sintàtich",
        "post-expand-template-inclusion-warning": "'''Atension:''' La dimension dj'anseriment dë stamp a l'é tròp gròssa.\nChèich stamp a saran nen anserì.",
        "mergehistory-same-destination": "La pagina ëd partensa e cola d'ariv a peulo nen esse le mideme",
        "mergehistory-reason": "Rason:",
        "mergelog": "Registr dj'union",
-       "pagemerge-logentry": "a l'ha butà [[$1]] ansema a [[$2]] (revision fin-a a la $3)",
        "revertmerge": "Gavé da ansema",
        "mergelogpagetext": "Ambelessì sota a-i é na lista dj'ùltime vire che la stòria ëd na pàgina a l'é stàita butà ansema a cola 'd n'àutra.",
        "history-title": "$1: Cronologìa dle modìfiche",
        "search-result-category-size": "{{PLURAL:$1|1 mèmber|$1 mèmber}} ({{PLURAL:$2|1 sot-categorìa|$2 sot-categorìe}}, {{PLURAL:$3|1 archivi|$3 archivi}})",
        "search-redirect": "(ridiression $1)",
        "search-section": "(session $1)",
+       "search-category": "(categorìa $1)",
        "search-file-match": "(a corëspond al contnù d'archivi)",
        "search-suggest": "Vorìi-lo pa dì: $1",
        "search-interwiki-caption": "Proget frej",
        "searchall": "tuti",
        "showingresults": "Ambelessì-sota a treuva fin a {{PLURAL:$1|'''1'''|'''$1'''}} arzultà, a parte dal nùmer #'''$2'''.",
        "showingresultsinrange": "Smon-e sì-sota fin-a a {{PLURAL:$1|<strong>1</strong>|<strong>$1</strong>}} arzultà ant la serie da #<strong>$2</strong> a #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Arzultà '''$1''' ëd '''$3'''|Arzultà '''$1 - $2''' ëd '''$3'''}} për '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Arzultà <strong>$1</strong> ëd <strong>$3</strong>|Arzultà <strong>da $1 a $2</strong> ëd <strong>$3</strong>}}",
        "search-nonefound": "A-i é gnun arzultà për l'arserca.",
        "powersearch-legend": "Arserca avansà",
        "powersearch-ns": "Sërché ant jë spassi nominaj:",
        "gender-female": "Chila a modìfica dle pàgine dla wiki",
        "prefs-help-gender": "Definì coste preferense a l'é opsional.\nËl programa a deuvra sò valor për adressesse a chiel e massionelo a j'àutri an dovrand ël géner gramatical giust.\nCosta anformassion a sarà pùblica.",
        "email": "Pòsta eletrònica",
-       "prefs-help-realname": "* Nòm vèir (opsional): se i sërne da butelo ambelessì a sarà dovrà për deve mérit ëd vòstr travaj.",
+       "prefs-help-realname": "Ël nòm ver a l'é opsional).\nSe a l'é butà, a podrà esse dovrà për deje mérit ëd sò travaj.",
        "prefs-help-email": "L'adrëssa ëd pòsta eletrònica a l'é opsional, ma a-i n'a j'é dabzògn për torna amposté la ciav, s'a dovèissa dësmentié soa ciav.",
        "prefs-help-email-others": "A peul ëdcò serne ëd lassé che j'àutri a lo contato a travers soa pàgina utent o ëd ciaciarada sensa ch'a-i sia da manca d'arvelé soa identità.",
        "prefs-help-email-required": "A-i va l'adrëssa ëd pòsta eletrònica.",
        "prefs-tokenwatchlist": "Geton",
        "prefs-diffs": "Diferense",
        "prefs-help-prefershttps": "Costa preferensa a ancaminrà a marcé a soa pròssima conession.",
+       "prefswarning-warning": "A l'ha fàit dle modìfiche ai sò gust ch'a son ancor nen ëstàire argistrà.\nS'a chita sa pàgina sensa sgnaché «$1» ij sò gust a saran pa agiorné.",
        "prefs-tabs-navigation-hint": "Astussia: A peul dovré le flece a snistra e a drita për navighé antra le schede ant la lista dle schede.",
        "email-address-validity-valid": "A smija bon",
        "email-address-validity-invalid": "A-i é da manca ëd n'adrëssa bon-a!",
        "filedelete-maintenance": "Lë scancelament e la restaurassion d'archivi a l'é al moment disabilità durant la manutension.",
        "filedelete-maintenance-title": "As peul pa scancelesse l'archivi",
        "mimesearch": "Arserca për sòrt MIME",
-       "mimesearch-summary": "Sta pàgina-sì a lassa filtré j'archivi për sòrt MIME. Buté: sòrt/sotasòrt, pr'es. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Sta pàgina-sì a lassa filtré j'archivi për sòrt MIME. Buté: sòrt/sotasòrt o sòrt/*, pr'es. <code>image/jpeg</code>.",
        "mimetype": "Sòrt MIME:",
        "download": "dëscarié",
        "unwatchedpages": "Pàgine che gnun a ten sot-euj",
        "randomincategory": "Pàgina a l'ancàpit ant la categorìa",
        "randomincategory-invalidcategory": "«$1» a l'é pa un nòm ëd categorìa bon.",
        "randomincategory-nopages": "A-i é gnun-e pàgine ant la categorìa [[:Category:$1|$1]].",
+       "randomincategory-category": "Categorìa:",
+       "randomincategory-legend": "Pàgina a l'ancàpit ant la categorìa",
        "randomredirect": "Na ridiression qualsëssìa",
        "randomredirect-nopages": "A-i é pa gnun-a ridiression ant lë spassi nominal \"$1\".",
        "statistics": "Statìstiche",
        "statistics-header-pages": "Statìstiche dla pàgina",
        "statistics-header-edits": "Statìstiche dle modìfiche",
-       "statistics-header-views": "Statìstiche dle visualisassion",
        "statistics-header-users": "Statìstiche ëd {{SITENAME}}",
        "statistics-header-hooks": "Àutre statìstiche",
        "statistics-articles": "Pàgine ëd contnù",
        "statistics-files": "Archivi carià",
        "statistics-edits": "Pàgine modificà da quand ël {{SITENAME}} a l'é stàit tirà su",
        "statistics-edits-average": "Media dle modìfiche për pàgina",
-       "statistics-views-total": "Total dle visualisassion",
-       "statistics-views-total-desc": "Le visualisassion ëd le pàgine pa esistente e ëd le pàgine speciaj a son nen comprèise",
-       "statistics-views-peredit": "Visualisassion për modìfica",
        "statistics-users": "[[Special:ListUsers|Utent]] argistrà",
        "statistics-users-active": "Utent ativ",
        "statistics-users-active-desc": "Utent che a l'han fàit n'assion ant {{PLURAL:$1|l'ùltim di|j'ùltim $1 di}}",
-       "statistics-mostpopular": "Pàgine ch'a 'ncontro dë pì",
        "pageswithprop": "Pàgine con na propietà ëd pàgina",
        "pageswithprop-legend": "Pàgine con na propietà ëd pàgina",
        "pageswithprop-text": "Costa pàgina a lista le pàgine ch'a deuvro na propietà 'd pàgina particolar.",
        "doubleredirects": "Ridiression dobie",
        "doubleredirectstext": "Sta pàgina-sì a a lista dle pàgine ch'a armando a d'àutre pàgine ëd ridiression.\nVira riga a l'ha andrinta j'anliure a la prima e a la sconda ridiression, ant sël pat ëd la prima riga ëd test dla seconda ridiression, che për sòlit a l'ha andrinta l'artìcol ëd destinassion vèir, col andoa che a dovrìa ëmné ëdcò la prima ridiression.\nLe ridiression <del>sganfà</del> a son stàite arzolvùe.",
        "double-redirect-fixed-move": "[[$1]] a l'é stàit spostà.\nA l'é stàit agiornà an automàtich e adess a l'é na ridiression a [[$2]].",
-       "double-redirect-fixed-maintenance": "Rangé le ridiression dobie da [[$1]] a [[$2]].",
+       "double-redirect-fixed-maintenance": "Coression automàtica dle ridiression dobie da [[$1]] a [[$2]] ant un travaj ëd manutension.",
        "double-redirect-fixer": "Coretor ëd ridiression",
        "brokenredirects": "Ridiression nen giuste",
        "brokenredirectstext": "Coste ridiression-sì a men-o a d'artìcoj ch'a-i son pa:",
        "uncategorizedtemplates": "Stamp sensa pa 'd categorìe",
        "unusedcategories": "Categorìe nen dovrà",
        "unusedimages": "Figure nen dovrà",
-       "popularpages": "Pàgine pì s-ciairà",
        "wantedcategories": "Categorìe dont a fa da manca",
        "wantedpages": "Artìcoj pì ciamà",
        "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]].",
+       "wantedfiletext-cat-noforeign": "J'archivi sì-dapress a son dovrà ma a esisto nen. An dzorpì, le pàgina ch'a conten-o d'archivi ch'a esisto nen a son listà an [[:$1]].",
        "wantedfiletext-nocat": "J'archivi sì-dapress a son dovrà ma a esisto pa. J'archivi da depòsit estern a peulo esse listà sensa considerene l'esistensa. Tùit costi fàuss positiv a saran <del>ësganfà</del>.",
+       "wantedfiletext-nocat-noforeign": "J'archivi sì-dapress a son dovrà ma a esisto pa.",
        "wantedtemplates": "Stamp ciamà",
        "mostlinked": "Pàgine che a l'han pì d'anliure che a-i men-o la gent ansima",
        "mostlinkedcategories": "Categorìe che a l'han pì d'anliure che a-i men-o la gent ansima",
-       "mostlinkedtemplates": "Stamp pì dovrà",
+       "mostlinkedtemplates": "Pàgine pi ancludùe",
        "mostcategories": "Artìcoj che a son marcà an pì categorìe",
        "mostimages": "Figure pì dovrà",
        "mostinterwikis": "Pàgine con pi 'd liure antërwiki",
        "pager-older-n": "{{PLURAL:$1|1|$1}} pì vej",
        "suppress": "Supervisor",
        "querypage-disabled": "Sta pàgina special a l'é disabilità për dle rason ëd prestassion.",
+       "apihelp": "Agiut ëd l'API",
+       "apihelp-no-such-module": "Ël mòdol «$1» as treuva nen.",
        "booksources": "Andoa trové dij lìber",
        "booksources-search-legend": "Sërché antra ij lìber d'arferiment",
-       "booksources-go": "Andé",
+       "booksources-search": "Arserché",
        "booksources-text": "Ambelessì sota a-i é na lista d'àotri sit che a vendo dij lìber neuv e dë sconda man, e che a peulo ëdcò smon-e dj'anformassion rësgoard ai test che a l'é antramentr che a sërca:",
        "booksources-invalid-isbn": "L'ISBN dàit a smija che a sia pa vàlid; ch'a contròla s'a-i é n'eror an copiand da la sorgiss original.",
        "specialloguserlabel": "Esecutor:",
        "trackingcategories-desc": "Criteri d'anclusion dla categorìa",
        "noindex-category-desc": "La pàgina a l'é pa trassà dai robò përchè a conten la paròla màgica <code><nowiki>__NOINDEX__</nowiki></code> andrinta e a l'é an në spassi nominal anté che cost marcagi a l'é autorisà.",
        "index-category-desc": "La pàgina a conten un <code><nowiki>__INDEX__</nowiki></code> (e a l'é an në spassi nominal anté che ëd marcagi a l'é autorisà); a l'é donca trassà dai robò antant che ëd sòlit a lo sarìa nen.",
-       "post-expand-template-inclusion-category-desc": "Apress avèj dësvlupà tuti jë stamp, la taja dla pàgina a sorpassa <code>$wgMaxArticleSize</code>, donca chèich ëstamp a son nen ëstàit dësvlupà.",
-       "post-expand-template-argument-category-desc": "Apress avèj dësvlupà l'argoment ëd në stamp (cheicòs antra tripl agraf, tanme <code>{{{Foo}}}</code>), la pàgina a l'é pi gròssa che <code>$wgMaxArticleSize</code>.",
-       "expensive-parserfunction-category-desc": "Tròpe fonsion care ëd l'analisator (parèj ëd <code>#ifexist</code>) contnùe an na pàgina. Ch'a vëdda [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "post-expand-template-inclusion-category-desc": "La taja dla pàgina a sorpassa <code>$wgMaxArticleSize</code> apress avèj dësvlupà tuti jë stamp, donca chèich ëstamp a son nen ëstàit dësvlupà.",
+       "post-expand-template-argument-category-desc": "La pàgina a l'é pi gròssa che <code>$wgMaxArticleSize</code>, apress avèj dësvlupà l'argoment ëd në stamp (cheicòs antra tripl agraf, tanme <code>{{{Foo}}}</code>).",
+       "expensive-parserfunction-category-desc": "Costa pàgina a deuvra tròpe fonsion care ëd l'analisator (parèj ëd <code>#ifexist</code>). Ch'a vëdda [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "La pàgina a conten na liura d'archivi cioca (na liura për anclude n'archivi cand l'archivi a esist nen).",
+       "hidden-category-category-desc": "La categorìa a conten <code><nowiki>__HIDDENCAT__</nowiki></code> an sò sontnù, lòn ch'a j'ampediss d'esse smonùa ant la casela dle liure ëd categorìa an sle pàgine, 'me stàndard.",
+       "trackingcategories-nodesc": "Gnun-a descrission disponìbil.",
+       "trackingcategories-disabled": "La categorìa a l'é disabilità",
        "mailnologin": "A-i é pa l'adrëssa për mandé ël mëssagi",
        "mailnologintext": "A dev [[Special:UserLogin|rintré ant ël sistema]]\ne avèj registrà n'adrëssa ëd pòsta eletrònica vàlida ant ij [[Special:Preferences|sò gust]] për podèj mandé dij mëssagi ëd pòsta eletrònica a j'àutri Utent.",
        "emailuser": "Mandeje un mëssagi eletrònich a st'utent-sì",
        "mywatchlist": "Ròba che as ten sot euj",
        "watchlistfor2": "Për $1 $2",
        "nowatchlist": "A l'ha ancó pa marcà dj'artìcoj coma ròba da tnì sot-euj.",
-       "watchlistanontext": "Për piasì, $1 për ës-ciairé ò pura modifiché j'element ëd soa lista dla ròba che as ten sot-euj.",
+       "watchlistanontext": "Për piasì, ch'a rintra ant ël sistema për ës-ciairé ò pura modifiché j'element ëd soa lista dla ròba che as ten sot-euj.",
        "watchnologin": "A l'é ancó nen rintrà ant ël sistema",
        "addwatch": "Gionté a la lista ëd lòn ch'as ten sot-euj",
        "addedwatchtext": "La pàgina «[[:$1]]» a l'é staita giontà a soa [[Special:Watchlist|lista dla ròba da tnì sot-euj]].\nLe modìfiche che a-i saran ant costa pàgina-sì e ant soa pàgina ëd discussion a saran listà ambelessì.",
+       "addedwatchtext-short": "La pàgina «$1» a l'é stàita giontà a la lista ëd lòn ch'as ten sot-euj.",
        "removewatch": "Gavé da la lista ëd lòn ch'as ten sot-euj",
        "removedwatchtext": "La pàgina «[[:$1]]» a l'è staita gavà via da [[Special:Watchlist|soa lista dla ròba da tnì sot-euj]].",
+       "removedwatchtext-short": "La paàgina «$1» a l'é stàita gavà da la lista ëd lòn ch'as ten sot-euj.",
        "watch": "ten-e sot-euj",
        "watchthispage": "Ten-e sot-euj cost artìcol-sì",
        "unwatch": "Chité-lì ëd ten-e sossì sot-euj",
        "unwatchthispage": "Chité-lì ëd ten-e sossì sot-euj",
        "notanarticle": "Sòn a l'é pa n'artìcol",
        "notvisiblerev": "La revision a l'é stàita scancelà",
-       "watchlist-details": "A l'é dëmentrè ch'as ten sot-euj {{PLURAL:$1|$1 pàgina|$1 pàgine}}, nen contand cole ëd discussion.",
+       "watchlist-details": "A l'é dëmentrè ch'as ten sot-euj {{PLURAL:$1|$1 pàgina|$1 pàgine}}, nen contand an manera separà cole ëd discussion.",
        "wlheader-enotif": "La notìfica për pòsta eletrònica a l'é abilità.",
        "wlheader-showupdated": "Le pàgine che a son ëstàite modificà da quand che a l'é passaje ansima l'ùltima vira a resto marcà an '''grassèt'''",
-       "wlnote": "Ambelessì sota a-i {{PLURAL:$1|é l'ùltima modìfica|son j'ùltime '''$1''' modìfiche}} ant {{PLURAL:$2|l'ùltima ora|j'ùltime '''$2''' ore}}, a parte da $3, $4.",
-       "wlshowlast": "Smon-e j'ùltime $1 ore $2 dì $3",
+       "wlnote": "Ambelessì sota a-i {{PLURAL:$1|é l'ùltima modìfica|son j'ùltime <strong>$1</strong> modìfiche}} ant {{PLURAL:$2|l'ùltima ora|j'ùltime <strong>$2</strong> ore}}, a parte da $3, $4.",
+       "wlshowlast": "Smon-e j'ùltime $1 ore $2 di",
        "watchlist-options": "Opsion ëd la lista dla ròba ch'as ten sot-euj",
        "watching": "Sot-euj...",
        "unwatching": "Ën gavand da lòn ch'as ten sot-euj...",
        "exbeforeblank": "anans d'esse dësvujdà ël contnù a l'era: «$1»",
        "delete-confirm": "Scancelé «$1»",
        "delete-legend": "Scancelé",
-       "historywarning": "'''Avis:''' La pàgina che a l'é antramentr che a scancela a l'ha na stòria con pi o men $1 {{PLURAL:$1|revision|revision}}:",
+       "historywarning": "<strong>Avis:</strong> La pàgina che a l'é antramentr che a scancela a l'ha na stòria con $1 {{PLURAL:$1|revision}}:",
        "confirmdeletetext": "A sta për scancelé d'autut da 'nt la base dat na pàgina ò pura na figura, ansema a tuta soa cronologìa.<p>\nPër piasì, che an conferma che sòn a l'é da bon sò but, che a as rend cont ëd le conseguense ëd lòn che a fa, e che sòn a resta an pien an régola con lòn che a l'é stabilì ant la [[{{MediaWiki:Policy-url}}]].",
        "actioncomplete": "Travaj fait e finì",
        "actionfailed": "Assion falìa",
        "delete-edit-reasonlist": "Modifiché la rason dlë scancelament",
        "delete-toobig": "Sta pàgina-sì a l'ha na stòria motobin longa, bele pì che $1 {{PLURAL:$1|revision|revision}}.\nLë scancelassion ëd pàgine parèj a l'é stàita limità për evité ch'as fasa darmagi për eror a {{SITENAME}}.",
        "delete-warning-toobig": "Sta pàgina-sì a l'ha na stòria motobin longa, bele pì che $1 {{PLURAL:$1|revision|revision}}.\nA scancelela as peul fesse darmagi a j'operassion dla base ëd dat ëd {{SITENAME}};\nch'a daga da ment a lòn ch'a fa.",
+       "deleteprotected": "A peul nen ëscancelé costa pàgina përchè a l'é proteta.",
        "deleting-backlinks-warning": "'''Avis:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|D'àutre pàgine]] a l'han na liura o a transcludo la pàgina che chiel a veul ëscancelé.",
        "rollback": "Gavé via le modìfiche",
        "rollback_short": "Ripristiné",
        "protect-othertime": "N'àutra durà:",
        "protect-othertime-op": "N'àutra durà",
        "protect-existing-expiry": "Scadensa esistenta:$3, $2",
+       "protect-existing-expiry-infinity": "Durà: infinìa",
        "protect-otherreason": "Rason àutra/adissional:",
        "protect-otherreason-op": "Àutra rason",
        "protect-dropdown": "*Rason comun-e ëd protession\n** Tròp vandalism\n** Tròpa rumenta\n** Guère ëd modìfiche danose\n** Pàgina con motobin ëd tràfich",
        "contributions-title": "Contribussion ëd $1",
        "mycontris": "Contribussion",
        "contribsub2": "Për {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Ël cont utent «$1» a l'é pa argistrà.",
        "nocontribs": "A l'é pa trovasse gnun-a modìfica che a fussa conforma a costi criteri-sì",
        "uctop": "(corenta)",
        "month": "Mèis:",
        "sp-contributions-newbies-sub": "Për j'utent neuv",
        "sp-contributions-newbies-title": "Contribussion ëd j'utent për ij neuv cont",
        "sp-contributions-blocklog": "argistr dij blocagi",
+       "sp-contributions-suppresslog": "contribussion eliminà",
        "sp-contributions-deleted": "Modìfiche d'utent scancelà",
        "sp-contributions-uploads": "cariagi",
        "sp-contributions-logs": "registr",
        "autoblockid": "Blocagi automàtich #$1",
        "block": "Bloché l'utent",
        "unblock": "Dësbloché l'utent",
-       "blockip": "Bloché l'utent",
+       "blockip": "Bloché l'{{GENDER:$1|utent}}",
        "blockip-legend": "Bloché l'utent",
        "blockiptext": "Che a deuvra ël mòdulo ëd domanda 'd blocagi ambelessì sota për bloché l'acess con drit dë scritura da chèich adrëssa IP o stranòm.<br />\nËs blocagi-sì as dev dovresse MACH për evité dij comportament vandàlich, ën strèita osservansa ëd tùit ij prinsipi dle [[{{MediaWiki:Policy-url}}|régole ëd {{SITENAME}}]].<br />\nËl blocagi a peul ën gnun-a manera esse dovrà për dle question d'ideologìa.\n\nChe a scriva codì che st'adrëssa IP o së stranòm a dev second chiel esse blocà (pr'esempi, che a buta ij tìtoj ëd pàgine che a l'abio già patì dj'at vandàlich da cost'adrëssa IP o së stranòm).",
        "ipaddressorusername": "Adrëssa IP ò stranòm",
        "ipb-unblock-addr": "Dësbloché $1",
        "ipb-unblock": "Dësbloché n'utent ò n'adrëssa IP",
        "ipb-blocklist": "Vardé ij blocagi ativ",
-       "ipb-blocklist-contribs": "Contribussion për $1",
+       "ipb-blocklist-contribs": "Contribussion për {{GENDER:$1|$1}}",
        "unblockip": "Dësbloché n'utent",
        "unblockiptext": "Che a deuvra ël formolari ambelessì-sota për deje andré ël drit dë scritura a n'adrëssa IP o në stranòm che a l'era stàit blocà.",
        "ipusubmit": "Gavé ës blocagi",
        "unblocked": "[[User:$1|$1]] a l'é stait dësblocà",
        "unblocked-range": "$1 a l'é stàit dësblocà",
        "unblocked-id": "Ël blocagi $1 a l'é stait gavà via",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] a l'é stàit dësblocà.",
        "blocklist": "Utent blocà",
        "ipblocklist": "Utent blocà",
        "ipblocklist-legend": "Trové n'utent blocà",
        "movepagetalktext": "La pàgina ëd discussion tacà a costa pàgina d'artìcol, se a-i é, a sarà tramudà n'automatich ansema a l'artìcol, '''gavà costi cas-sì''':\n*quand as tramuda la pàgina tra diferent spassi nominaj,\n*quand na pàgina ëd discussion nen veujda a-i é già për ël nòm neuv, ò pura\n*a l'ha desselessionà ël quadrèt ëd conferma ambelessì-sota.\n\nAnt costi cas-sì, se a chërd dë felo, a-j farà da manca dë tramudesse la pàgina ëd discussion daspërchiel, a man.",
        "movearticle": "Cangeje nòm a l'artìcol:",
        "moveuserpage-warning": "'''Atension:''' A sta për tramudé na pàgina d'utent. Për piasì ch'a nòta che a sarà tramudà mach la pàgina e che l'utent a sarà ''pa'' arbatjà.",
+       "movecategorypage-warning": "<strong>Atension:</strong> A l'é a brus ëd tramudé na pàgina ëd categorìa. Për piasì, ch'a ten-a da ment che mach la pàgina a sarà tramudà e che tute le pàgine ant la veja categorìa a saran <em>nen</em> tramudà an cola neuva.",
        "movenologintext": "A venta esse n'Utent registrà e esse [[Special:UserLogin|rintrà ant ël sistema]]\npër podèj tramudé na pàgina.",
        "movenotallowed": "A l'ha pa ij përmess dont a fa da manca për tramudé le pàgine.",
        "movenotallowedfile": "A l'ha pa ij përmess për tramudé j'archivi.",
        "cant-move-user-page": "A l'ha pa ij përmess për tramudé le pàgine d'utent (gavà le sot-pàgine).",
        "cant-move-to-user-page": "A l'ha pa ël përmess për tramudé na pàgina a na pàgina utent (gavà a na sot-pàgina utent).",
+       "cant-move-category-page": "A l'ha nen ël përmess ëd tramudé le pàgine ëd categorìa.",
+       "cant-move-to-category-page": "A l'ha nen ël përmess ëd tramudé na pàgina a na pàgina ëd categorìa.",
        "newtitle": "Neuv tìtol ëd",
        "move-watch": "Ten-e sot-euj la pàgina sorgiss e la pàgina selessionà",
        "movepagebtn": "Tramudé la pàgina",
        "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]].",
+       "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",
        "import-interwiki-templates": "Anserì tùit jë stamp",
        "import-interwiki-submit": "Amporté",
        "import-upload": "Cariament ëd dat XML",
        "import-token-mismatch": "Pèrdita dij dat ëd session.\nPër piasì, ch'a preuva torna.",
        "import-invalid-interwiki": "As peul pa amportesse da la wiki spessificà.",
-       "import-error-edit": "La pàgina «$1» a l'é pa stàita amportà përchè chiel a peul pa modifichela.",
-       "import-error-create": "La pàgina «$1» a l'é pa stàita amportà përchè chiel a peul pa creela.",
-       "import-error-interwiki": "La pàgina «$1» a l'é pa amportà përchè sò nòm a l'é arzervà për na liura esterna (antërwiki).",
-       "import-error-special": "La pàgina «$1» a l'é pa amportà përchè a ponta a në spassi nominal ch'a përmët pa dle pàgine.",
-       "import-error-invalid": "La pàgina «$1» a l'é pa amportà përchè sò nòm a l'é pa bon.",
+       "import-error-edit": "La pàgina «$1» a l'era pa stàita amportà përchè chiel a peul pa modifichela.",
+       "import-error-create": "La pàgina «$1» a l'era pa stàita amportà përchè chiel a peul pa creela.",
+       "import-error-interwiki": "La pàgina «$1» a l'era pa stàita amportà përchè sò nòm a l'é arzervà për na liura esterna (antërwiki).",
+       "import-error-special": "La pàgina «$1» a l'era pa amportà përchè a aparten a në spassi nominal ch'a përmët pa dle pàgine.",
+       "import-error-invalid": "La pàgina «$1» a l'é pa stàita amportà përchè ël nòm sota 'l qual a sarìa stàita amportà a va nen bin su costa wiki.",
        "import-error-unserialize": "La revision $2 dla pagina «$1» a peul pa esse desserialisà. La revision a l'era arportà përchè a deuvra ël model ëd contnù $3 serialisà com $4.",
        "import-error-bad-location": "La revision $2, ch'a deuvra ël model ëd contnù $3 a peul nen esse guernà su «$1» su costa wiki, dagià che col model a l'é nen mantnù su cola pàgina.",
        "import-options-wrong": "{{PLURAL:$2|Opsion|Opsion}} sbalià: <nowiki>$1</nowiki>",
        "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|revision}}",
+       "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|revision}} da $2",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision}} amportà da $2",
        "javascripttest": "Preuva ëd JavaScript",
        "javascripttest-title": "Fé dle preuve $1",
        "javascripttest-pagetext-noframework": "Costa pàgina a l'é arservà për fé dle preuve JavaScript.",
        "tooltip-pt-mycontris": "Lista ëd soe contribussion",
        "tooltip-pt-login": "Un a l'é nen obligà a rintré ant al sistema, ma se a lo fa a l'é mej",
        "tooltip-pt-logout": "Seurte da",
+       "tooltip-pt-createaccount": "I-j consejoma ëd creé un cont e ëd rintré ant ël sistema; però a l'é nen obligatòri",
        "tooltip-ca-talk": "Discussion ansima a sta pàgina ëd contnù.",
        "tooltip-ca-edit": "A peul modifiché sa pàgina-sì. Për piasì, che as fasa na preuva anans che salvé.",
        "tooltip-ca-addsection": "Ancaminé na neuva session",
        "tooltip-feed-atom": "Fluss Atom për costa pàgina.",
        "tooltip-t-contributions": "Vardé la lista dle contribussion ëd cost utent",
        "tooltip-t-emailuser": "Mandeje un mëssagi ëd pòsta a st'utent",
+       "tooltip-t-info": "Pi d'anformassio su costa pàgina",
        "tooltip-t-upload": "Carié n'archivi ëd figure ò son.",
        "tooltip-t-specialpages": "Lista ëd tute le pàgine speciaj.",
        "tooltip-t-print": "Version bon-a da stampé dë sta pàgina",
        "pageinfo-robot-policy": "Indicisassion con robò",
        "pageinfo-robot-index": "Autorisà",
        "pageinfo-robot-noindex": "Vietà",
-       "pageinfo-views": "Nùmer ëd vìsite",
        "pageinfo-watchers": "Vàire utent ch'a ten-o sot-euj la pàgina",
        "pageinfo-few-watchers": "Men ëd $1 {{PLURAL:$1|osservator}}",
        "pageinfo-redirects-name": "Nùmer ëd ridiression vers costa pàgina-sì",
        "newimages-summary": "Sta pàgina special-sì a la smon j'ùltim archivi carià.",
        "newimages-legend": "Filtror",
        "newimages-label": "Nòm ëd l'archivi (o na soa part):",
+       "newimages-showbots": "Smon-e j'amportassion dij trigomiro",
        "noimages": "Pa gnente da vëdde.",
        "ilsubmit": "Arserché",
        "bydate": "për data",
        "exif-urgency-low": "Bassa ($1)",
        "exif-urgency-high": "Àuta ($1)",
        "exif-urgency-other": "Priorità definìa da l'utent ($1)",
-       "watchlistall2": "tute",
        "namespacesall": "tùit",
        "monthsall": "tuti",
        "confirmemail": "Confermé l'adrëssa postal",
        "autosumm-replace": "Pàgina cambià con '$1'",
        "autoredircomment": "Ridiression anvers a [[$1]]",
        "autosumm-new": "Creà la pàgina con '$1'",
+       "autosumm-newblank": "Pàgina veuida creà",
        "size-bytes": "$1 Byte",
        "size-kilobytes": "$1 KByte",
        "size-megabytes": "$1 MByte",
        "watchlistedit-raw-done": "La lista ëd lòn ch'as ten sot-euj a l'é stàita agiornà.",
        "watchlistedit-raw-added": "{{PLURAL:$1|A l'é|As son}} giontasse {{PLURAL:$1|1 tìtol|$1 tìtoj}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|A l'é|As son}} gavasse via {{PLURAL:$1|1 tìtol|$1 tìtoj}}:",
+       "watchlistedit-clear-title": "Lista dla ròba ch'as ten sot-euj dësvujdà.",
+       "watchlistedit-clear-legend": "Scancelé la lista dla ròba ch'as ten sot-euj",
+       "watchlistedit-clear-explain": "Tuti ij tìtoj a saran ësganfà da la lista dla ròba che as ten sot-euj",
+       "watchlistedit-clear-titles": "Tìtoj:",
+       "watchlistedit-clear-submit": "Scancelé la lista dla ròba ch'as ten sot-euj (sossì a l'é definitiv!)",
+       "watchlistedit-clear-done": "La lista ëd lòn ch'as ten sot-euj a l'é stàita scancelà.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|A l'é|As son}} gavasse via {{PLURAL:$1|1 tìtol|$1 tìtoj}}:",
+       "watchlistedit-too-many": "A-i é tròpe pàgine da smon-e ambelessì.",
+       "watchlisttools-clear": "Scancelé la lista dla ròba ch'as ten sot-euj",
        "watchlisttools-view": "S-ciairé le modifiché amportante",
        "watchlisttools-edit": "Vardé e modifiché la lista ëd lòn ch'as ten sot-euj",
        "watchlisttools-raw": "Modifiché ampressa la lista ëd lòn ch'as ten sot-euj",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ciaciarade]])",
        "unknown_extension_tag": "Tichëtta d'estension «$1» pa conossùa",
        "duplicate-defaultsort": "'''Atension:''' La ciav d'ordinament ëstàndard «$2» a pija ël pòst ëd cola ëd prima «$1».",
+       "duplicate-displaytitle": "<strong>Warning:</strong> ël tìtol ëd visualisassion «$2» a rampiassa ëd vej tìtol ëd visualisassion «$1».",
+       "invalid-indicator-name": "<strong>Eror:</strong> l'atribù <code>name</code> dj'andicator dlë statù dla pàgina a peul nen esse veuid.",
        "version": "Version",
        "version-extensions": "Estension anstalà",
-       "version-skins": "Pej",
+       "version-skins": "Pel anstalà",
        "version-specialpages": "Pàgine speciaj",
        "version-parserhooks": "Gancio dël dëscompositor",
        "version-variables": "Variàbij",
        "version-hook-name": "Nòm dël gancio",
        "version-hook-subscribedby": "A son scrivusse",
        "version-version": "($1)",
+       "version-no-ext-name": "[gnun nòm]",
        "version-license": "Licensa MediaWiki",
        "version-ext-license": "Licensa",
        "version-ext-colheader-name": "Estension",
+       "version-skin-colheader-name": "Pel",
        "version-ext-colheader-version": "Version",
        "version-ext-colheader-license": "Licensa",
        "version-ext-colheader-description": "Descrission",
        "htmlform-no": "Nò",
        "htmlform-yes": "É",
        "htmlform-chosen-placeholder": "Serne n'opsion",
+       "htmlform-cloner-create": "Gionté 'd pi",
+       "htmlform-cloner-delete": "Gavé",
+       "htmlform-cloner-required": "A-i é damanca d'almanch un valor.",
        "sqlite-has-fts": "$1 con arserca an test pien mantnùa",
        "sqlite-no-fts": "$1 sensa arserca an test pien mantnùa",
        "logentry-delete-delete": "$1 a l'ha {{GENDER:$2|scancelà}} la pàgina $3",
        "revdelete-uname-unhid": "stranòm dëscoatà",
        "revdelete-restricted": "restrission aplicà a j'aministrator",
        "revdelete-unrestricted": "restrission për j'aministrator gavà",
+       "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-move-move_redir": "$1 {{GENDER:$2|a l'ha tramudà}} la pàgina $3 a $4 ansima a na ridiression",
        "logentry-rights-rights": "$1 {{GENDER:$2|a l'ha modificà}} l'apartenensa a la partìa për $3 da $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|a l'ha modificà}} l'apartenensa a la partìa për $3",
        "logentry-rights-autopromote": "$1 a l'é {{GENDER:$2|stàit promovù}} an automàtich da $4 a $5",
+       "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",
        "rightsnone": "(gnun)",
+       "revdelete-summary": "resumé dla modìfica",
        "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:",
        "api-error-stashfailed": "Eror antern: ël servent a l'ha pa podù memorisé l'archivi a temp.",
        "api-error-publishfailed": "Eror antern: Ël servent a l'ha pa podù publiché l'archivi provisòri.",
        "api-error-stasherror": "A-i é staje n'eror durant ël cariament dl'archivi da stërmé.",
+       "api-error-stashedfilenotfound": "L'archivi stërmà a l'é nen trovasse durant ël tentativ ëd carielo da sò strem.",
+       "api-error-stashpathinvalid": "Ël përcors anté ch'a l'avrìa dovù trovesse l'archivi stërmà a l'era nen bon.",
+       "api-error-stashfilestorage": "A-ié staje n'eror an rangiand l'archivi an sò strem.",
+       "api-error-stashzerolength": "Ël servent a l'ha nen podù stërmé l'archivi, përchè a l'era ëd taja nula.",
+       "api-error-stashnotloggedin": "A dev esse rintrà ant ël sistema për argistré dj'archivi ant lë strem ëd cariament.",
+       "api-error-stashwrongowner": "L'archivi al qual a sërcava d'acede ant lë strem a l'é nen sò.",
+       "api-error-stashnosuchfilekey": "La ciav dl'archivi al qual a sërcava d'acede ant lë strem a esist pa.",
        "api-error-timeout": "Ël servent a l'ha pa rëspondù ant ël temp ëspetà.",
        "api-error-unclassified": "A l'é capitaje n'eror nen conossù.",
        "api-error-unknown-code": "Eror sconossù: «$1».",
        "expand_templates_remove_nowiki": "Gava ij tag <nowiki> ant l'arzultà",
        "expand_templates_generate_xml": "Mosta l'erbo ëd parse XML",
        "expand_templates_generate_rawhtml": "Smon-e l'HTML sempi",
-       "expand_templates_preview": "Preuva"
+       "expand_templates_preview": "Preuva",
+       "pagelanguage": "Seletor ëd lenga dla pàgina",
+       "pagelang-name": "Pàgina",
+       "pagelang-language": "Lenga",
+       "pagelang-use-default": "Dovré la lenga predefinìa",
+       "pagelang-select-lang": "Serne la lenga",
+       "right-pagelang": "Cangé la lenga dla pàgina",
+       "action-pagelang": "cangé la lenga dla pàgina",
+       "log-name-pagelang": "Argistr dij cangiament ëd lenga",
+       "log-description-pagelang": "Cost-sì a l'é n'argistr dij cangiament ant le lenghe dle pàgine.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a l'ha cangià}} la lenga dla pàgina $3 da $4 a $5.",
+       "default-skin-not-found": "Tension! La pel predeterminà për soa wiki, definìa an <code dir=\"ltr\">$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nSoa anstalassion a smija anclude le pel sì-dapress. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration ël manual ëd configurassion dle pel] për d'anformassion su coma abiliteje e serne col apredefinìa.\n\n$2\n\n; S'a l'ha pen-a anstalà MediaWiki:\n: A l'é probàbil che a l'abia anstalalo da git, o diretaman dal còdes sorgiss an n'àutra manera. A l'é normal. Ch'a preuva a anstalé dle pej da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel Ëd mediawiki.org], parèj:\n:* Dëscariand l' [https://www.mediawiki.org/wiki/Download archivi tar ëd l'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista dle <code>pel/</code> d'ambelelà.\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Sòn a dovrìa nen antërferì con sò depòsit git si chiel a l'é un dësvlupador ëd MediaWiki.\n\n; S'a l'ha pen-a agiornà MediaWiki:\n: MediaWiki 1.24 e pi neuv a përmet pi nen an automàtich le pel anstalà (ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery manual an sla dëscuverta automàtica dle pel). A peul copié le linie sì-dapress an <code>LocalSettings.php</code> për abilité tute le pel ch'a son anstalà al moment:\n\n<pre dir=\"ltr\">$3</pre>\n\n; S'a l'ha pen-a modifivà <code>LocalSettings.php</code>:\n: Ch'a verìfica torna ël nòm ëd dle pej për evité ij boro.",
+       "default-skin-not-found-no-skins": "Darmagi! La pel dë stàndard për soa wiki, definìa da <code>$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nChiel a l'ha gnun-a pel anstalà.\n\n; S'a l'ha pen-a anstalà o agiornà MediaWiki:\n: A l'é probàbil ch'a l'abia falo da git, o diret dal còdes sorgiss an n'àutra manera. A l'é normal. MediaWiki 1.24 e pi recent doesn't a ancludo gnun-a pel ant ël depòsit prinsipal. Ch'a preuva a anstalé chèiche pel da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel ëd mediawiki.org]:\n:* Dëscariand [https://www.mediawiki.org/wiki/Download l'archivi tar dl'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista <code>skins/</code> da là.\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Fé sòn a dovrìa nen antërferì con sò depòsit git se chiel a l'é un dësvlupador ëd MediaWiki. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: ël manual dla configurassion dle pel] për d'anformassion su coma ativé le pel e serne cola predefinìa.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (abilità)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilità''')",
+       "mediastatistics": "Statìstiche an sij mojen",
+       "mediastatistics-summary": "Statìstiche an sle sòrt d'archivi carià. A ancludo mach la version pi recent ëd n'archivi. Le version veje o dëscancelà dj'archivi a son escludùe.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 otet}} ($2 ; $3%)",
+       "mediastatistics-table-mimetype": "Sòrt MIME",
+       "mediastatistics-table-extensions": "Estension possìbij",
+       "mediastatistics-table-count": "Nùmer d'archivi",
+       "mediastatistics-table-totalbytes": "Taja combinà",
+       "mediastatistics-header-unknown": "Nen conossù",
+       "mediastatistics-header-bitmap": "Plance bitmap",
+       "mediastatistics-header-drawing": "Dissegn (plance vetoriaj)",
+       "mediastatistics-header-audio": "Sonor",
+       "mediastatistics-header-video": "Filmà",
+       "mediastatistics-header-multimedia": "Mojen rich",
+       "mediastatistics-header-office": "Ufissi",
+       "mediastatistics-header-text": "Testual",
+       "mediastatistics-header-executable": "Eseguìbij",
+       "mediastatistics-header-archive": "Formà compress",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|coma final a l'é stàita|còme finaj a son ëstàite}} gavà dal JSON",
+       "json-error-unknown": "A-i é staje un problema con ël JSON. Eror: $1",
+       "json-error-depth": "La dimension màssima dël baron a l'é stàita sorpassà",
+       "json-error-state-mismatch": "JSON nen bon o mal formà",
+       "json-error-ctrl-char": "Eror ëd caràter ëd contròl, miraco mal codificà",
+       "json-error-syntax": "Eror ëd sintassi",
+       "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à"
 }
index edf2a8e..9a79230 100644 (file)
        "history": "پچھلے کم",
        "history_short": "ریکارڈ",
        "updatedmarker": "میرے پچھلی وار آن توں مگروں دیاں تبدیلیاں",
-       "printableversion": "Ú\86Ú¾Ù¾Ù\86 Ø¢Ù\84ا ØµÙ\81Ø­ہ",
-       "permalink": "پکا ØªØ¹Ù\84Ù\82",
+       "printableversion": "Ú\86Ú¾Ù¾Ù\86 Ø¬Ù\88گا ØµÙ\81ہ",
+       "permalink": "پکا Ø¬Ù\88Ú\91",
        "print": "چھاپو",
        "view": "وکھالہ",
        "edit": "لکھو",
        "lastmodifiedat": "This page was last modified on $1, at $2.\nاس صفحے نوں آخری آری $1 تریخ نوں $2 وجے بدلیا گیا۔",
        "viewcount": "اس صفحے نوں {{PLURAL:$1|اک واری|$1 واری}} کھولیا گیا اے۔",
        "protectedpage": "بجایا صفحہ",
-       "jumpto": "جاو:",
-       "jumptonavigation": "Ù\85دد",
+       "jumpto": "جاؤ:",
+       "jumptonavigation": "پاÙ\86دھ",
        "jumptosearch": "کھوج",
        "view-pool-error": "$1",
        "pool-timeout": "تالے لئی انتظار",
        "mainpage-description": "پہلا صفہ",
        "policy-url": "Project:پالیسی",
        "portal": "بیٹھک",
-       "portal-url": "Project:بیٹھک",
-       "privacy": "Ø­Ù\81اظتÛ\8c پالیسی",
-       "privacypage": "Project:Ø­Ù\81اظتÛ\8c پالیسی",
+       "portal-url": "ویونت:بیٹھک",
+       "privacy": "بÚ\86اؤ پالیسی",
+       "privacypage": "Project:بÚ\86اؤ پالیسی",
        "badaccess": "اجازت دے وچ غلطی اے",
        "badaccess-group0": "تھاونوں ایس کم دی اجازت نیں جیہڑا تسیں آکھیا اے۔",
        "badaccess-groups": "جیڑا کم تسی کرنا چا رۓ او اوہ صرف {{PLURAL:$2|اس گروپ|ایناں گروپاں}} دے ورتن آلے کر سکدے نیں: $1۔",
        "viewsourcelink": "لکھائی وکھاؤ",
        "editsectionhint": "حصہ لکھو: $1",
        "toc": "حصے",
-       "showtoc": "کھولو",
+       "showtoc": "وکھاؤ",
        "hidetoc": "چھپاؤ",
        "collapsible-collapse": "ڈگنا",
        "collapsible-expand": "ودھاؤ",
        "passwordreset-emailsent-capture": "اک یاد کران والی ای-میل پیج دتی گئی اے، جیہڑی تھلے دسی گئی اے۔",
        "passwordreset-emailerror-capture": "اک یادکراؤ ای-میل بنائی گئی اے، جیہڑی کہ تھلے دسی گئی اے، پر ورتن والے تک پیجنا نئیں ہوسکیا:$1",
        "changeemail": "ای-میل پتہ بدلو",
-       "changeemail-header": "کھاتے دا ای-میل پتہ بدلو",
        "changeemail-text": "اس فارم نوں پورا کر کے ای-میل پتہ بدلو۔ اس کم نوں پورا کرن واسطے توانوں اپنی کنجی لکھنی پۓ گی۔",
        "changeemail-no-info": "تسی لاگ ان ہوکے ای اس صفحے نوں ویکھ سکدے او۔",
        "changeemail-oldemail": "ہلے دا ای-میل پتہ:",
        "changeemail-newemail": "نواں ای-میل پتہ:",
        "changeemail-none": "(کوئی نئیں)",
        "changeemail-submit": "ای-میل بدلو",
-       "changeemail-cancel": "ختم",
        "bold_sample": "موٹی لکھائی",
        "bold_tip": "موٹی لکھائی",
        "italic_sample": "ترچھی لکھائی",
        "media_tip": "فائل دا جوڑ",
        "sig_tip": "تواڈے دستخط ویلے دے نال",
        "hr_tip": "سدھی لکیر",
-       "summary": "خلاصہ:",
+       "summary": "ویروا:",
        "subject": "موضوع/شہ سرخی:",
        "minoredit": "اے نکا جیا کم اے",
        "watchthis": "اس صفحے تے نظر رکھو",
        "previousrevision": "← اوس توں پچھلا کم",
        "nextrevision": "نویں تبدیلی →",
        "currentrevisionlink": "موجودہ حالت",
-       "cur": "موجودہ",
+       "cur": "ہنوالا",
        "next": "اگلا",
        "last": "آخری",
        "page_first": "پہلا",
        "mergehistory-same-destination": "سورس تے لبن والے صفے اک نئیں ہوسکدے۔",
        "mergehistory-reason": "وجہ:",
        "mergelog": "لاگ رلاؤ",
-       "pagemerge-logentry": "[[$1]] رلایا [[$2]] چ  (ریوین  $3)",
        "revertmerge": "وکھریاں کرو",
        "mergelogpagetext": "تھلے اک صفے والے کٹھے کیتے گۓ صفے دی لسٹ اے۔",
        "history-title": "\"$1\" دا ریکارڈ",
        "searchrelated": "جڑیا",
        "searchall": "سارے",
        "showingresults": "تھلیوں دسے گۓ  {{PLURAL:$1|'''1''' نتیجہ|'''$1''' نتیجے}}  شروع #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|نتیجہ '''$1''' دا '''$3'''|نتیجے '''$1 - $2''' دے '''$3'''}} لئی '''$4'''",
        "search-nonefound": "سوال نال رلدے کوئی نتارے نئیں سن۔",
        "powersearch-legend": "ہور کھوج",
        "powersearch-ns": "ناں الیاں جگہاں چ لبو:",
        "listfiles_description": "تفصیل",
        "listfiles_count": "ورژن",
        "file-anchor-link": "فائل",
-       "filehist": "Ù¾Ú\86Ú¾Ù\84Û\8c Ø­Ø§Ù\84ت",
+       "filehist": "Ù\81ائÙ\84 Ù\88رتÙ\86",
        "filehist-help": "فائل نو اس ویلے دی حالت وچ ویکھن واسطے تاریخ/ویلے تے کلک کرو۔",
        "filehist-deleteall": "سب نوں مٹاؤ",
        "filehist-deleteone": "مٹاؤ",
        "statistics": "آنکڑے",
        "statistics-header-pages": "صفے دے آنکڑے",
        "statistics-header-edits": "تبدیلیاں دا آنکڑہ",
-       "statistics-header-views": "ویکھن دا سعاب کتاب",
        "statistics-header-users": "ورتن آلیاں دا سعاب کتاب",
        "statistics-header-hooks": "دوجے سعاب کتاب",
        "statistics-articles": "لسٹ صفے",
        "statistics-files": "اتے چڑھائیاں گئیاں فائلاں",
        "statistics-edits": "صفہ تبدیلیاں {{سائٹناں}} تون بنائی گئی۔",
        "statistics-edits-average": "اوسط تبدیلی اک صفے تے۔",
-       "statistics-views-total": "کل وکھالے۔",
-       "statistics-views-total-desc": "ناں ہون والے صفیاں تے خاص صفیاں دے وکھالے نئیں ہیگے۔",
-       "statistics-views-peredit": "تبدیلی سعاب نال وکھالے",
        "statistics-users": "رجسٹر [[Special:ListUsers|ورتنوالا]]",
        "statistics-users-active": "اجکل دے کامے",
        "statistics-users-active-desc": "ورتنوالے جناں نیں پچھلے {{PLURAL:$1|دن|$1 دناں}}  چ کم کیتا اے۔",
-       "statistics-mostpopular": "سب توں بوتے ویکھے گۓ صفے",
        "doubleredirects": "دوہری ریڈیرکٹس",
        "doubleredirectstext": "ایس صفے تے اوناں صفیاں دی لسٹ اے جیہڑے ریڈائرکٹ کردے نیں دوجے ریڈائرکٹ صفیاں ول۔\nہر قطار چ جوڑ نیں  پہلے تے دوجے ریڈائرکٹ نال ، نال دوجے دیڑائرکٹ ول دا تارگٹ نیں جیہڑا کے ٹھیک تارگٹ صفہ ہوندا اے جیہڑا کہ پہلے ریڈائرکٹ نوں اشارہ کرنا چائیدا اے۔\n<del>کراسڈ</del> اینٹریاں حل ہوگیاں نیں۔",
        "double-redirect-fixed-move": "[[$1]] نوں بدل دتا گیا اے۔\nاے ہن [[$2]] نوں ریڈائرکٹ اے۔",
        "uncategorizedtemplates": "بغیر کیٹاگریاں آلے سچے",
        "unusedcategories": "نا استعمال ہوئیاں کیٹاگریاں",
        "unusedimages": "نا استعمال ہوئیاں فائلاں",
-       "popularpages": "مشہور صفے",
        "wantedcategories": "چاھیدیاں کیٹاگریاں",
        "wantedpages": "چائیدے صفحے",
        "wantedpages-badtitle": "ناں منیا جان والا سرناواں رزلٹ سیٹ چ:$1",
        "querypage-disabled": "اے صفہ ناکارہ کیتا گیا پرفارمنس وجہ توں۔",
        "booksources": "کتاب توں اتہ پتہ",
        "booksources-search-legend": "اس مضمون تے کتاباں لبو",
-       "booksources-go": "جاؤ",
        "booksources-text": "تھلے اوناں جوڑاں دی لسٹ اے جتھے نویاں تے پرانیاں کتاباں وکدیاں نیں، تے ہور وی جانکاری ہوسکدی اے  کتاباں بارے تسیں ویکھدے او:",
        "booksources-invalid-isbn": "دتی گئی آئی ایس بی این چلدی نئیں لکدی ؛ اصل سورس نوں چیک کرو کاپی کرن توں پہلے۔",
        "specialloguserlabel": "کرن والا:",
        "addedwatchtext": "اے صفحہ \"[[:$1]] تواڈیاں اکھاں تھلے آگیا اے۔<br />\nمستقبل وچ اس صفحہ تے ایدے بارے چ گل بات نویاں تبدیلیاں وچ موٹے نظر آن گے تا کہ آسانی نال کھوجیا جا سکے۔",
        "removewatch": "اکھ تھلیوں ہٹاؤ",
        "removedwatchtext": "ایہ صفہ \"[[:$1]]\" [[Special:Watchlist|تہاڈی اکھ ]]تھلوں ہٹا لیتا گیا اے۔",
-       "watch": "نظر رکھو",
+       "watch": "اکھ تھلے رکھو",
        "watchthispage": "اس صفے تے اکھ رکھو",
-       "unwatch": "نظر ھٹاؤ",
+       "unwatch": "اکھ تھلے توں ھٹاؤ",
        "unwatchthispage": "اکھ رکھنا چھڈو",
        "notanarticle": "لکھن صفہ نئیں۔",
        "notvisiblerev": "آخری ریوین کسے ہور ورتن والے دی مٹادتی گئی اے۔",
        "wlheader-enotif": "ای-میل نوٹیفیکیشن قابل",
        "wlheader-showupdated": " صفے جیہڑے بدلے کۓ تھواڈے آخری وار آن مکرون  اونان نوں موٹا کرکے دسیا گیا اے۔",
        "wlnote": "تھلے {{PLURAL:$1|آخری تبدیلی|آخری تبدیلیاں '''1$''' }} آخر تے {{PLURAL:$2|کینٹہ|'''2$''' کینٹے}} 3$، 4$.",
-       "wlshowlast": "آخری $1 گھنٹے $2 دن $3 وکھاؤ",
+       "wlshowlast": "آخری $1 گھنٹے $2 دن  وکھاؤ",
        "watchlist-options": "نظر تھلے رکھن دیاں راہواں",
-       "watching": "نظر تھلے۔۔۔۔",
-       "unwatching": "نظروں اولے",
+       "watching": "اکھ تھلے۔۔۔۔",
+       "unwatching": "اولے",
        "watcherrortext": "\"$1\" دی سیٹنگ بد دیاں اک غلطی ہوئی جے",
        "enotif_reset": "سارے ویکھے گۓ صفحیاں تے نشان لاؤ",
        "enotif_impersonal_salutation": "{{SITENAME}} ورتن والا",
        "blanknamespace": "(خاص)",
        "contributions": "ورتن آلے دا حصہ",
        "contributions-title": "$1 دے کم",
-       "mycontris": "میرا کم",
+       "mycontris": "میرے کم",
        "contribsub2": "$1 آستے ($2)",
        "nocontribs": "ایناں ناپاں نال رلدیاں کوئی تبدیلیاں نئیں لبیاں۔",
        "uctop": "(اتے)",
        "sp-contributions-username": "آئی پی پتہ یا ورتن آلا ناں:",
        "sp-contributions-toponly": "صرف اوہ تبدیلیاں وکھاؤ جیہڑیاں سب توں نیڑے ویلے ہویاں نیں۔",
        "sp-contributions-submit": "کھوجو",
-       "whatlinkshere": "اÛ\8cتھÛ\92 Ú©Û\8cدا ØªØ¹Ù\84Ù\82 اے",
+       "whatlinkshere": "اÛ\8cتھÛ\92 Ú©Û\8cدا Ø¬Ù\88Ú\91 اے",
        "whatlinkshere-title": "او صفحات جیڑے \"$1\" نال جڑے نے",
        "whatlinkshere-page": "صفہ:",
        "linkshere": "تھلے دتے گۓ صفے اس دے نال جڑدے نے '''[[:$1]]''':",
        "import": "صفحے لیاؤ",
        "importinterwiki": "ٹرانسوکی امپورٹ",
        "import-interwiki-text": "اک وکی تے صفہ سرناواں لیاں لئی چنو۔\nریوین تریخاں تے لکھاری ناں بچا لۓ جان گۓ۔\nسارے وکیاں وشکار لیان کم [[Special:Log/import|لیان لاگ]] تے لاگڈ نیں۔",
-       "import-interwiki-source": "سورس وکی/صفہ:",
        "import-interwiki-history": "ایس صفے لئی سارا ریرین ریکارڈ کاپی کرو۔",
        "import-interwiki-templates": "سارے سچے رلاؤ",
        "import-interwiki-submit": "لے آؤ",
        "tooltip-pt-preferences": "میریاں تانگاں",
        "tooltip-pt-watchlist": "او صفحے جنہاں وچ تبدیلیاں تسی ویکھ رہے او",
        "tooltip-pt-mycontris": "میرے کم",
-       "tooltip-pt-login": "اÛ\92 Ø¨Û\81تر Ø§Û\92 Ú©Û\81 Ù\84اگ Ø§Ù\86 Û\81Ù\88 Ø¬Ø§Ø¤Ø\8c Ù\84Û\8cÚ©Ù\86 Ù\81Û\8cر Ù\88Û\8c Ø§Û\92 لازمی نئیں۔",
+       "tooltip-pt-login": "اÛ\8cÛ\81 Ø¨Û\81تر Ø§Û\92 Ú©Û\81 Ù\84اگ Ø§Ù\86 Û\81Ù\88 Ø¬Ø§Ø¤Ø\8c Ù\81Û\8cر Ù\88Û\8c Ø§Û\8cÛ\81 لازمی نئیں۔",
        "tooltip-pt-logout": "باہر آؤ",
-       "tooltip-ca-talk": "اس صفحے دے بار وچ گل بات",
-       "tooltip-ca-edit": "تسیں اس صفے تے لکھ سکدے او۔\nمحفوظ کرن توں پہلاں کچے کم نوں ویکھ لو۔",
+       "tooltip-ca-talk": "اس صفے بارے گل بات",
+       "tooltip-ca-edit": "تسیں اس صفے تے لکھ سکدے او۔\nبچان توں پہلاں کچے کم نوں ویکھ لو۔",
        "tooltip-ca-addsection": "اس گل بات وچ حصہ لے لو۔",
        "tooltip-ca-viewsource": "اے صفحہ بچایا گیا اے۔\nتسی اینو صرف ویکھ سکدے او۔",
        "tooltip-ca-history": "اس صفحے دا پرانہ ورژن۔",
        "tooltip-search-go": "اس ناں دے صفحے تے چلو، اگر اے ہے گا اے",
        "tooltip-search-fulltext": "اس لفظ نوں صفحیاں چ لبو",
        "tooltip-p-logo": "پہلا صفہ",
-       "tooltip-n-mainpage": "پہلے صفحے دی سیر",
+       "tooltip-n-mainpage": "پہلے صفے نوں ویکھو",
        "tooltip-n-mainpage-description": "پہلے ورقے تے جاؤ",
-       "tooltip-n-portal": "Ù\85Ù\86صÙ\88بÛ\92 Ø¯Û\92 Ø¨Ø§Ø±Û\92 Ù\88Ú\86Ø\8c ØªÙ\88سÛ\8c کی کر سکدے او تے کنج کھوج سکدے او",
+       "tooltip-n-portal": "پربÙ\86دھ Ø¨Ø§Ø±Û\92 Ø\8c ØªØ³Û\8cÚº کی کر سکدے او تے کنج کھوج سکدے او",
        "tooltip-n-currentevents": "موجودہ حالات تے پچھلیاں معلومات دیکھو",
        "tooltip-n-recentchanges": "وکی تے نویاں تبدیلیاں۔",
-       "tooltip-n-randompage": "بیترتیب صفے کھولو۔",
+       "tooltip-n-randompage": "کوئی صفہ کھولو۔",
        "tooltip-n-help": "مدد لینے آلی جگہ۔",
-       "tooltip-t-whatlinkshere": "اس نال جڑے سارے وکی صفحے۔",
+       "tooltip-t-whatlinkshere": "اس نال جڑے سارے وکی صفے۔",
        "tooltip-t-recentchangeslinked": "اس صفحے توں جڑے صفحیاں چ نویاں تبدیلیاں",
        "tooltip-feed-rss": "RSS feed for this page",
        "tooltip-feed-atom": "Atom feed for this page",
        "tooltip-t-contributions": "اس ورتن والے دے کم ویکھو",
        "tooltip-t-emailuser": "اس ورتن والے نو ای میل کرو",
        "tooltip-t-upload": "فائل چڑھاؤ",
-       "tooltip-t-specialpages": "سارے خاص صفحے",
+       "tooltip-t-specialpages": "سارے خاص صفیاں دی اک لسٹ",
        "tooltip-t-print": "اس صفے دا چھپنے آلا ورژن ویکھو",
        "tooltip-t-permalink": "اس صفحے دے اس ورژن نال پرماننٹ لنک",
        "tooltip-ca-nstab-main": "مواد آلا صفحہ ویکھو",
        "simpleantispam-label": "سپام روک پھاٹک\nایدے تے ناں لکھو۔",
        "pageinfo-title": "\"$1\" لئی جانکاری",
        "pageinfo-header-edits": "تبدیلیاں",
-       "pageinfo-views": "را‎ ۓ گنتی",
        "pageinfo-watchers": "ویکھن والے",
        "pageinfo-edits": "تبدیلیاں گنتی",
        "pageinfo-authors": "وکھرے لکھاریاں دی گنتی",
        "exif-urgency-low": "تھلے کرکے ($1)",
        "exif-urgency-high": "اچا ($1)",
        "exif-urgency-other": "($1)  ورتن ڈیفائینڈ پراورٹی",
-       "watchlistall2": "سارے",
        "namespacesall": "سارے",
        "monthsall": "سارے",
        "confirmemail": "ای میل پتہ پکا کرو",
        "logentry-newusers-create2": "$1 {{جنس:$2|بنایا}} {{جنس:$4|اک ورتن کھاتہ}} $3",
        "logentry-newusers-autocreate": "کھاتہ $1 اپنے آپ ای {{جنس:$2|بنایا گیا}} بنایا گیا۔",
        "rightsnone": "(کوئی وی نئیں)",
+       "revdelete-summary": "لکھائی دا خلاصہ",
        "feedback-bugornote": "اگر تسیں اک تکنیکی مسلے نوں  پوری طراں دسن لئی تیار او تے فیر مہربانی کرکے [$1 بگ بارے دسو]۔  ںئیں تے تسیں تھلے دتا گیا فارم ورتو۔ تواڈی گل صفہ \"[$3 $2]\" تے جڑے گی،  تواڈے ورتن والے ناں تے براؤزر جیہڑا تسیں ورت رۓ او۔",
        "feedback-subject": "آرٹیکل",
        "feedback-message": "سنیعہ:",
index b51b871..bf6af7a 100644 (file)
        "suppress": "Επόπτες",
        "booksources": "Βιβλιογραφικά πηγάς",
        "booksources-search-legend": "Αράεμαν τη βιβλίων",
-       "booksources-go": "Δέβα",
        "specialloguserlabel": "Χρήστες:",
        "speciallogtitlelabel": "Τίτλος:",
        "log": "Αρχεία",
        "unwatch": "Τέλεμαν τ' ωριαγματί",
        "unwatchthispage": "Τέλεμαν ωριαγματί",
        "watchlist-details": "{{PLURAL:$1|$1 σελίδα|$1 σελίδας}} ωριάσκουνταν, θέγα τα σελίδας καλατσεματί.",
-       "wlshowlast": "Φανέρωμαν τ' υστερναίων $1 ωρίων $2 ημερίων $3",
+       "wlshowlast": "Φανέρωμαν τ' υστερναίων $1 ωρίων $2 ημερίων",
        "watchlist-options": "Επιλογάς ωριαγματί",
        "watching": "Ωριάζω...",
        "unwatching": "'κ ωριάζω...",
        "exif-gpsstatus-v": "Διαλειτουργικότητα μετρησίων",
        "exif-gpsspeed-m": "Μίλιαν την ώραν",
        "exif-gpsspeed-n": "Κορδίλαι",
-       "watchlistall2": "ούλαι",
        "namespacesall": "ούλαι",
        "monthsall": "ούλαι",
        "recreate": "Ποίσον αξάν",
        "htmlform-reset": "Κλώσον τ'αλλαγάς",
        "htmlform-selectorother-other": "Άλλον",
        "rightsnone": "(τιδέν)",
+       "revdelete-summary": "σύνοψην",
        "searchsuggest-search": "Αράεμαν"
 }
index f4f403e..229f422 100644 (file)
        "mergehistory-same-destination": "Kakīnslis be appus pāusan ni mazzi būtwei ainawīdan",
        "mergehistory-reason": "Brewīnsli:",
        "mergelog": "Senlaītan istōrija",
-       "pagemerge-logentry": "senlīja [[$1]] sen [[$2]] (kitawīdinsnan istōrija ērgi $3)",
        "revertmerge": "Etwārtai padelīs",
        "mergelogpagetext": "Zemmais ast listi stēisan panzdauman senlaīsenin stēisan kitawīdinsnan istōrijan.",
        "history-title": "Redigīsnas istōrija stesse \"$1\"",
        "statistics": "Statistiki",
        "statistics-header-pages": "Pāusan statistiki",
        "statistics-header-edits": "Redigīsenin statistiki",
-       "statistics-header-views": "Kāimalukisenin statistiki",
        "statistics-header-users": "Tērpautajan statistiki",
        "statistics-header-hooks": "Kitā statistiki",
        "statistics-articles": "Ēnturas pāusai",
        "statistics-files": "Enkraūtai zūrbrukei",
        "statistics-edits": "Pāusas redigīsnas ezze tikseņu stesse {{SITENAME}}",
        "statistics-edits-average": "Sirzds gīrbis stēisan redigīsenin per pāusan",
-       "statistics-views-total": "Gīrbis wisēisan kāimalukisenei:",
-       "statistics-views-peredit": "Gīrbis stēisan kāimalukisenin per redigīsenin",
        "statistics-users": "Registrītai [[Special:ListUsers|tērpautajai]]",
        "statistics-users-active": "Aktīwai tērpautajai",
        "statistics-users-active-desc": "Tērpautajai sēntei aktīwai en {{PLURAL:$1|panzdauman dēinan|panzdaumans dēinans}}",
-       "statistics-mostpopular": "Ukadeznimai kāimalukitai pāusai",
        "doubleredirects": "Dwigubbai prawessenei",
        "doubleredirectstext": "Zemmais ast listi wisēisan pāusan sen prawessenins en pāusans, kawīdai prawedda en kittan pāusan.\nErainā rindā turri ēn sen autengīnsenins en pirman be āntran prawessenin, tīt dīgi autengīnsenin kwēi wedda āntars prawessenis. Jāuku panzdaums autengīnsenin wedda en pāusan, en kawīdan prawerru prawestun pirmasmu pāusan.\n<del>Praglaubātai</del> prawessenei ast reparītan.",
        "double-redirect-fixed-move": "pāusan [[$1]] pastāi praskajjintan.\nTeinū tennan prawedda prei [[$2]].",
        "uncategorizedtemplates": "Nikategōrizitas šablōnis",
        "unusedcategories": "Nitērpautas kategōrijas",
        "unusedimages": "Nitērpautai zūrbrukei",
-       "popularpages": "Ukapōpularai pāusai",
        "wantedcategories": "Palaipsītas kategōrijas",
        "wantedpages": "Palaipsītai pāusai",
        "wantedpages-badtitle": "Nitikrōmiskas tītels sirzdau rezultātans: $1",
        "pager-older-n": "{{PLURAL:$1|wūraisis 1|wūraišai $1}}",
        "booksources": "Lāiskai",
        "booksources-search-legend": "Laukīs lāiskiskans appuns",
-       "booksources-go": "Waidinnais",
        "booksources-text": "Zemmais ast listi stēisan autengīnsenin prei kittans pāusans, kawīdai perdāst nāunans be tērpautans lāiskans be mazzi turītun talāisins infōrmaciōnins ezze lāiskan laukītan pra tin:",
        "booksources-invalid-isbn": "Padatā ISBN nummeri ast erzinātan kāigi nitikrōmiska. Izbandais, anga padatā nummeri preitāra prei nummerin īmtan iz appun.",
        "specialloguserlabel": "Tērpautajs:",
        "wlheader-enotif": "E-mail pawakīsenei ast enklaūtan.",
        "wlheader-showupdated": "Pastāi '''pastarīntan''' pāusai,  kawīdai bēi kitawīdintan ezze Twajjai panzdauman tenēisan kāimalukisnan..",
        "wlnote": "Zemmais pawaidinnā di {{PLURAL:$1|panzdauman kitawīdinsnan|panzdaumans '''$1''' kitawīdinsnans}} en {{PLURAL:$2|panzdauman stundin|'''$2''' panzdaumans stundins}}.",
-       "wlshowlast": "Waidinnais panzdaumans $1 stūndins, $2 dēinans ($3)",
+       "wlshowlast": "Waidinnais panzdaumans $1 stūndins, $2 dēinans ()",
        "watchlist-options": "Nadirītan listis mazīngiskwas",
        "watching": "As nadirēi...",
        "unwatching": "As wanginna nadirītwei...",
        "import": "Impōrtis pāusans",
        "importinterwiki": "Transwiki impōrts",
        "import-interwiki-text": "Etrīnkais wiki be pāusas tītelin per impōrtisnan.\nWeriōnin dātai be autōras pabilīsnas wīrst būwušas erlaikātan.\nWisāi transwikis impōrtas dīlasenei ast enpeisātan en [[Special:Log/import|impōrtas registeŗu]].",
-       "import-interwiki-source": "Aps šisses wiki/pāusan:",
        "import-interwiki-history": "Kōpis wissans šisse pāusas redigīsnas istōrijan",
        "import-interwiki-templates": "Ebimmais wissans šablōnins",
        "import-interwiki-submit": "Impōrtis",
        "exif-gpsspeed-n": "Winzalai",
        "exif-gpsdirection-t": "Arwis līnkis",
        "exif-gpsdirection-m": "Magnetiskas līnkis",
-       "watchlistall2": "wisāi",
        "namespacesall": "wisāi",
        "monthsall": "wisāi",
        "confirmemail": "Padrūktinais e-mail adressin",
        "htmlform-selectorother-other": "Kitā",
        "revdelete-restricted": "ensadinnais arāikinsenins per perwaldītajans",
        "revdelete-unrestricted": "āupausinais arāikinsenins per perwaldītajans",
-       "rightsnone": "(nisātausna)"
+       "rightsnone": "(nisātausna)",
+       "revdelete-summary": "kitawīdisnan ebpeisāsenis"
 }
index dc00401..e19a2b2 100644 (file)
        "hidetoc": "پټول",
        "collapsible-collapse": "پرځول",
        "collapsible-expand": "غځول",
+       "confirmable-yes": "هو",
+       "confirmable-no": "نه",
        "thisisdeleted": "$1 کتل او يا بيازېرمل؟",
        "viewdeleted": "$1 کتل؟",
        "restorelink": "{{PLURAL:$1|يو ړنگ شوی سمون|$1 ړنگ شوي سمونونه}}",
        "passwordreset-emailsent": "د پټنوم بيا پرځای کېدنې لپاره برېښليک درولېږل شو.",
        "passwordreset-emailsent-capture": "د پټنوم بياپرځای کېدنې لپار مو يو برېښليک درولېږه، برېښليک په لاندې توگه ښودل شوی.",
        "changeemail": "برېښليک پته بدلول",
-       "changeemail-header": "د گڼون برېښليک پته بدلول",
        "changeemail-text": "د برېښليک پتې بدلولو لپاره مو همدا فورمه ډکه کړۍ. د دې بدلون د تاييد لپاره بايد پټنوم مو ورکړۍ.",
        "changeemail-no-info": "دې مخ ته د لاسرسي لپاره بايد غونډال کې ورننوځۍ.",
        "changeemail-oldemail": "اوسنۍ برېښليک پته:",
        "changeemail-none": "(هېڅ)",
        "changeemail-password": "ستاسې د{{SITENAME}} پټنوم:",
        "changeemail-submit": "برېښليک بدلول",
-       "changeemail-cancel": "ناگارل",
+       "changeemail-throttled": "تاسې څو واره هڅه کړې چې غونډال ته ورننوځۍ.\nلطفاً د بيا هڅې نه مخکې $1 شېبې تم شۍ.",
        "bold_sample": "زغرد متن",
        "bold_tip": "زغرد متن",
        "italic_sample": "رېوند متن",
        "searchrelated": "اړونده",
        "searchall": "ټول",
        "showingresults": "دلته لاندې تر {{PLURAL:$1|'''1''' پايله|'''$1''' پايلې}} ښکاره شوي پيل له #'''$2''' شوی.",
-       "showingresultsheader": "د «'''$4'''» لپاره {{PLURAL:$5|له '''$1''' نه تر '''$3''' پايله|له '''$1 نه تر $2''' پايلې، ټولې پايلې '''$3''' }}",
        "search-nonefound": "ستاسې دغوښتنې اړونده پايلې و نه موندل شوې.",
        "powersearch-legend": "ژوره پلټنه",
        "powersearch-ns": "په نوم-تشيالونو کې پلټنه:",
        "randompage": "ناټاکلی مخ",
        "randompage-nopages": "په لانديني {{PLURAL:$2|نوم-تشيال|نوم-تشيالونو}} کې هېڅ کوم مخ نشته: $1.",
        "randomincategory": "په وېشنيزه کې ناټاکلی مخ",
-       "randomincategory-selectcategory": "يو ناټاکلی مخ له وېشنيزې موندل: $1 $2.",
-       "randomincategory-selectcategory-submit": "ورځه",
        "randomredirect": "ناټاکلی ورگرځېدنه",
        "statistics": "شمار",
        "statistics-header-pages": "د مخونو شمار",
        "statistics-header-edits": "د سمونو شمار",
-       "statistics-header-views": "د کتنو شمار",
        "statistics-header-users": "د کارنانو شمار",
        "statistics-header-hooks": "بل شمار",
        "statistics-articles": "مېنځپانگيز مخونه",
        "statistics-files": "پورته شوې دوتنې",
        "statistics-edits": "د {{SITENAME}} د جوړېدو راهيسې د مخونو سمون",
        "statistics-edits-average": "پر يوه مخ د سمون منځوۍ کچه",
-       "statistics-views-total": "ټولټال کتنې",
-       "statistics-views-peredit": "د هر سمون په سر کتنې",
        "statistics-users": "ثبت شوي [[Special:ListUsers|کارنان]]",
        "statistics-users-active": "فعاله کارنان",
        "statistics-users-active-desc": "هغه کارنان چې په {{PLURAL:$1|وروستۍ ورځ|وروستيو $1 ورځو}} کې فعاله ونډه لرلې",
-       "statistics-mostpopular": "ډېر کتل شوي مخونه",
        "pageswithprop": "د مخ ځانتياو څخه برخمن مخونه",
        "pageswithprop-legend": "د مخ ځانتياو څخه برخمن مخونه",
        "pageswithprop-prop": "د ځانتيا نوم:",
        "uncategorizedtemplates": "ناوېشلې کينډۍ",
        "unusedcategories": "ناکارېدلې وېشنيزې",
        "unusedimages": "ناکارېدلې دوتنې",
-       "popularpages": "نامتو مخونه",
        "wantedcategories": "غوښتلې وېشنيزې",
        "wantedpages": "غوښتلي مخونه",
        "wantedfiles": "غوښتلې دوتنې",
        "suppress": "څارن",
        "booksources": "د کتاب سرچينې",
        "booksources-search-legend": "د کتابي سرچينو پلټنه",
-       "booksources-go": "ورځه",
        "booksources-text": "دا لاندې د هغه وېبځايونو د تړنو لړليک دی چېرته چې نوي او زاړه کتابونه پلورل کېږي، او يا هم کېدای شي چې د هغه کتاب په هکله مالومات ولري کوم چې تاسو ورپسې لټېږۍ:",
        "specialloguserlabel": "ترسره کوونکی:",
        "speciallogtitlelabel": "موخه (سرليک يا کارن):",
        "wlheader-enotif": "برېښليک خبرونه چارنه شوې.",
        "wlheader-showupdated": "هغه مخونه چې ستاسې د کتلو نه وروسته بدلون موندلی په '''روڼ''' ليک په نښه شوي.",
        "wlnote": "دلته لاندې {{PLURAL:$1|وروستی بدلون دی|وروستي '''$1''' بدلونونه دي}} چې په {{PLURAL:$2|تېر ساعت|تېرو '''$2''' ساعتونو}} کې تر $3 نېټې او $4 بجو پېښ شوي.",
-       "wlshowlast": "وروستي $1 ساعتونه $2 ورځې $3 ښکاره کړه",
+       "wlshowlast": "وروستي $1 ساعتونه $2 ورځې  ښکاره کړه",
        "watchlist-options": "د کتنلړ خوښنې",
        "watching": "د کتلو په حال کې...",
        "unwatching": "د نه کتلو په حال کې...",
        "thumbnail-more": "لويول",
        "filemissing": "دوتنه ورکه ده",
        "thumbnail_error": "د  بټنوک د جوړېدنې ستونزه: $1",
-       "import-interwiki-source": "سرچينيز ويکي/مخ:",
        "import-interwiki-history": "د دې مخ د پېښليک ټولې بڼې لمېسل",
        "import-interwiki-templates": "ټولې کينډۍ نغاړل",
        "import-interwiki-namespace": "د موخې نوم-تشيال:",
        "pageinfo-robot-policy": "ليکلړ اوډنه د روباټونو لخوا",
        "pageinfo-robot-index": "پرېښل",
        "pageinfo-robot-noindex": "ناپرېښل",
-       "pageinfo-views": "د کتنو شمېر",
        "pageinfo-watchers": "د مخ د کتونکو شمېر",
        "pageinfo-redirects-name": "دې مخ ته د ورگرځونو شمېر",
        "pageinfo-subpages-name": "دې مخ ته څېرمه مخونه",
        "exif-urgency-normal": "نورمال ($1)",
        "exif-urgency-low": "لږ ($1)",
        "exif-urgency-high": "ډېر ($1)",
-       "watchlistall2": "ټول",
        "namespacesall": "ټول",
        "monthsall": "ټول",
        "confirmemail": "برېښليک پته تاييدول",
        "logentry-newusers-create": "د $1 کارن گڼون {{GENDER:$2|جوړ شو}}",
        "logentry-newusers-autocreate": "د $1 گڼون په اتوماتيک ډول {{GENDER:$2|جوړ شو}}",
        "rightsnone": "(هېڅ)",
+       "revdelete-summary": "لنډيز سمول",
        "feedback-subject": "سکالو:",
        "feedback-message": "پيغام:",
        "feedback-cancel": "ناگارل",
index 257333b..88545d5 100644 (file)
                        "לערי ריינהארט",
                        "555",
                        "Fabsouza1",
-                       "아라"
+                       "아라",
+                       "Jefersonmoraes",
+                       "Marcos dias de oliveira",
+                       "He7d3r"
                ]
        },
        "tog-underline": "Sublinhar links:",
@@ -88,6 +91,7 @@
        "tog-watchdefault": "Adicionar as páginas e arquivos que eu editar à minha lista de páginas vigiadas",
        "tog-watchmoves": "Adicionar as páginas e arquivos que eu mover à minha lista de páginas vigiadas",
        "tog-watchdeletion": "Adicionar as páginas e arquivos que eu eliminar à minha lista de páginas vigiadas",
+       "tog-watchrollback": "Adicionar páginas onde fiz uma reversão às minhas páginas vigiadas",
        "tog-minordefault": "Marcar todas as edições como menores por padrão",
        "tog-previewontop": "Mostrar previsão antes da caixa de edição",
        "tog-previewonfirst": "Mostrar previsão na primeira edição",
        "otherlanguages": "Em outros idiomas",
        "redirectedfrom": "(Redirecionado de $1)",
        "redirectpagesub": "Página de redirecionamento",
+       "redirectto": "Redirecionar para:",
        "lastmodifiedat": "Esta página foi modificada pela última vez à(s) $2 de $1.",
        "viewcount": "Esta página foi acessada {{PLURAL:$1|uma vez|$1 vezes}}.",
        "protectedpage": "Página protegida",
        "hidetoc": "ocultar",
        "collapsible-collapse": "Ocultar",
        "collapsible-expand": "Expandir",
+       "confirmable-confirm": "{{GENDER:$1|Tem}} a certeza?",
        "confirmable-yes": "Sim",
        "confirmable-no": "Não",
        "thisisdeleted": "Ver ou restaurar $1?",
        "createaccount-text": "Alguém criou uma conta de nome $2 para o seu endereço de email no wiki {{SITENAME}} ($4), tendo como senha \"$3\".\nVocê deve se autenticar e alterar sua senha.\n\nIgnore esta mensagem caso a conta tenha sido criada por engano.",
        "login-throttled": "Você recentemente tentou iniciar sessão muitas vezes.\nPor favor aguarde $1 antes de tentar novamente.",
        "login-abort-generic": "A sua autenticação não teve êxito - Abortada",
+       "login-migrated-generic": "A sua conta foi migrada e o seu nome de usuário já não existe nesta wiki.",
        "loginlanguagelabel": "Idioma: $1",
        "suspicious-userlogout": "Sua solicitação para sair foi negada porque aparentemente foi enviada por um navegador danificado ou por um servidor proxy com cache.",
        "createacct-another-realname-tip": "O nome verdadeiro é opcional.\nSe você optar por fornecê-lo, este nome será utilizado para dar ao usuário a atribuição de seu trabalho.",
        "passwordreset-emailsent-capture": "Foi enviado um e-mail de lembrete, que é mostrado abaixo.",
        "passwordreset-emailerror-capture": "Foi gerado um e-mail de recuperação da senha, conforme mostrado abaixo, mas o envio {{GENDER:$2|ao usuário|à usuária}} falhou. $1",
        "changeemail": "Alterar o endereço de e-mail",
-       "changeemail-header": "Alterar o endereço de e-mail da conta",
        "changeemail-text": "Preencha este formulário para alterar o endereço de e-mail. Para confirmar esta alteração terá de introduzir a sua senha.",
        "changeemail-no-info": "Para acessar diretamente esta página você tem de estar autenticado.",
        "changeemail-oldemail": "Endereço de e-mail atual:",
        "changeemail-none": "(nenhum)",
        "changeemail-password": "Sua senha para o wiki {{SITENAME}}:",
        "changeemail-submit": "Alterar e-mail",
-       "changeemail-cancel": "Cancelar",
        "changeemail-throttled": "Você realizou demasiadas tentativas de se registrar.\nPor favor, aguarde $1 antes de tentar novamente.",
        "resettokens": "Reiniciar os tokens",
        "resettokens-text": "Você pode reiniciar os tokens, que permitem o acesso a certos dados privados associados à sua conta, aqui.\n\nVocê só deve reiniciá-los se compartilhou-os com alguém ou se a sua conta foi comprometida.",
        "preview": "Pré-visualização",
        "showpreview": "Mostrar previsão",
        "showdiff": "Mostrar alterações",
+       "blankarticle": "<strong>Aviso:</strong> A página que está prestes a criar está em branco.  \nSe clicar \"{{int:savearticle}}\" outra vez, a página será criada sem qualquer conteúdo.",
        "anoneditwarning": "'''Atenção''': Você não se encontra autenticado.\nO seu endereço de IP será registrado no histórico de edições desta página.",
        "anonpreviewwarning": "''Você não está logado. Gravar registará o seu endereço IP no histórico de edições desta página.''",
        "missingsummary": "'''Lembrete:''' Você não introduziu um sumário de edição. Se clicar novamente em Salvar, a sua edição será salva sem um sumário.",
        "content-model-text": "texto simples",
        "content-model-javascript": "Javascript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Páginas que utilizam argumentos duplicados ao chamar predefinições",
        "expensive-parserfunction-warning": "Aviso: Esta página contém muitas chamadas a funções do analisador \"parser\".\n\nDeveria ter menos de $2 {{PLURAL:$2|chamada|chamadas}}. Neste momento {{PLURAL:$1|há $1 chamada|existem $1 chamadas}}.",
        "expensive-parserfunction-category": "Páginas com muitas chamadas a funções do analisador \"parser\"",
        "post-expand-template-inclusion-warning": "'''Aviso''': a soma do tamanho de inclusão de predefinições é muito grande.\nAlgumas predefinições não serão processadas.",
        "rev-deleted-event": "(entrada removida)",
        "rev-deleted-user-contribs": "[nome de usuário ou endereço de IP eliminado - edição ocultada das contribuições]",
        "rev-deleted-text-permission": "Esta revisão desta página foi '''eliminada'''.\nPodem existir mais detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de eliminações].",
+       "rev-suppressed-text-permission": "A revisão desta página foi '''eliminada'''.\nVocê pode visualizá-la; podem existir mais detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de eliminação].",
        "rev-deleted-text-unhide": "Esta revisão desta página foi '''removida'''.\nPoderá haver detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de eliminação].\nVocê ainda pode [$1 ver esta revisão] se deseja prosseguir.",
        "rev-suppressed-text-unhide": "Esta revisão desta página foi '''removida'''.\nPoderá haver detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de eliminação].\nVocê ainda pode [$1 ver esta revisão] se deseja prosseguir.",
        "rev-deleted-text-view": "A revisão desta página foi '''eliminada'''.\nVocê pode visualizá-la; pode haver detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de eliminação].",
        "mergehistory-same-destination": "As páginas de origem e de destino não podem ser as mesmas",
        "mergehistory-reason": "Motivo:",
        "mergelog": "Registro de fusão de históricos",
-       "pagemerge-logentry": "[[$1]] foi fundida em [[$2]] (até a edição $3)",
        "revertmerge": "Desfazer fusão",
        "mergelogpagetext": "Segue-se um registro das mais recentes fusões de históricos de páginas.",
        "history-title": "Histórico de edições de \"$1\"",
        "searchrelated": "relacionados",
        "searchall": "todos",
        "showingresults": "A seguir {{PLURAL:$1|é mostrado '''um''' resultado|são mostrados até '''$1''' resultados}}, iniciando no '''$2'''º.",
-       "showingresultsheader": "{{PLURAL:$5|Resulado '''$1''' de '''$3'''|Resultados '''$1 - $2''' de '''$3'''}} para '''$4'''",
        "search-nonefound": "Não há resultados que correspondam à consulta.",
        "powersearch-legend": "Pesquisa avançada",
        "powersearch-ns": "Pesquisar nos espaços nominais:",
        "prefs-tokenwatchlist": "Senha",
        "prefs-diffs": "Diferenças",
        "prefs-help-prefershttps": "Esta preferência terá efeito no seu próximo início de sessão.",
+       "prefswarning-warning": "Você fez alterações em suas preferências, que não foram salvas ainda. \nSe você sair desta página sem clicar em \"$1\" suas preferências não serão atualizado.",
        "prefs-tabs-navigation-hint": "Dica: Você pode usar as teclas de seta esquerda e direita para navegar entre as abas da lista de abas.",
        "email-address-validity-valid": "Parece válido",
        "email-address-validity-invalid": "Forneça um endereço de e-mail válido",
        "randomincategory": "Página aleatória na categoria",
        "randomincategory-invalidcategory": "\"$1\" não é um nome de categoria válido.",
        "randomincategory-nopages": "Não há paginas em [[:Category:$1]].",
+       "randomincategory-category": "Categoria:",
+       "randomincategory-legend": "Página aleatória na categoria",
        "randomredirect": "Redirecionamento aleatório",
        "randomredirect-nopages": "Não há redirecionamentos no espaço nominal \"$1\".",
        "statistics": "Estatísticas",
        "statistics-header-pages": "Estatísticas de páginas",
        "statistics-header-edits": "Estatísticas de edições",
-       "statistics-header-views": "Ver estatísticas",
        "statistics-header-users": "Estatísticas dos usuários",
        "statistics-header-hooks": "Outras estatísticas",
        "statistics-articles": "Páginas de conteúdo",
        "statistics-files": "Arquivos carregados",
        "statistics-edits": "Edições de página desde que {{SITENAME}} foi instalado",
        "statistics-edits-average": "Média de edições por página",
-       "statistics-views-total": "Total de visualizações",
-       "statistics-views-total-desc": "Visualizações de páginas não existentes e páginas especiais não estão incluídas",
-       "statistics-views-peredit": "Visualizações por edição",
        "statistics-users": "[[Special:ListUsers|Usuários]] registrados",
        "statistics-users-active": "Usuários ativos",
        "statistics-users-active-desc": "Usuários que efetuaram uma ação {{PLURAL:$1|no último dia|nos últimos $1 dias}}",
-       "statistics-mostpopular": "Páginas mais visitadas",
        "pageswithprop": "Páginas com uma propriedade de página",
        "pageswithprop-legend": "Páginas com uma propriedade de página",
        "pageswithprop-text": "Esta página lista as páginas que usam uma determinada propriedade de página.",
        "uncategorizedtemplates": "Predefinições não categorizadas",
        "unusedcategories": "Categorias não utilizadas",
        "unusedimages": "Arquivos não utilizados",
-       "popularpages": "Páginas populares",
        "wantedcategories": "Categorias pedidas",
        "wantedpages": "Páginas pedidas",
        "wantedpages-badtitle": "Título inválido no conjunto de resultados: $1",
        "querypage-disabled": "Esta página especial está desativada para não prejudicar o desempenho.",
        "booksources": "Fontes bibliográficas",
        "booksources-search-legend": "Pesquisar referências bibliográficas",
-       "booksources-go": "Ir",
+       "booksources-search": "Pesquisar",
        "booksources-text": "É exibida a seguir uma listagem de links para outros sites que vendem livros novos e usados e que possam possuir informações adicionais sobre os livros que você está pesquisando:",
        "booksources-invalid-isbn": "O número ISBN fornecido não parece ser válido; verifique se houve erros ao copiar da fonte original.",
        "specialloguserlabel": "Executor:",
        "trackingcategories-desc": "Critérios de inclusão de categoria",
        "noindex-category-desc": "A página não é indexada por robôs, porque possui a palavra mágica <code><nowiki>__NOINDEX__</nowiki></code> e está em um namespace onde a flag é permitida.",
        "post-expand-template-inclusion-category-desc": "O tamanho da página é superior a <code>$wgMaxArticleSize</code>, após a expansão de todas as predefinições, pelo que algumas predefinições não foram expandidas.",
+       "trackingcategories-nodesc": "Nenhuma descrição disponível.",
        "trackingcategories-disabled": "A categoria está desabilitada",
        "mailnologin": "Nenhum endereço de envio",
        "mailnologintext": "Necessita de estar [[Special:UserLogin|autenticado]] e de possuir um endereço de e-mail válido nas suas [[Special:Preferences|preferências]] para poder enviar um e-mail a outros usuários.",
        "mywatchlist": "Páginas vigiadas",
        "watchlistfor2": "Para $1 $2",
        "nowatchlist": "A sua lista de páginas vigiadas não possui títulos.",
-       "watchlistanontext": "Por favor $1 para ver ou editar os itens na sua lista de páginas vigiadas.",
+       "watchlistanontext": "Por favor, faça login para ver ou editar os itens na sua lista de páginas vigiadas.",
        "watchnologin": "Não está autenticado",
        "addwatch": "Adicionar às páginas vigiadas",
        "addedwatchtext": "A página \"[[:$1]]\" foi adicionada à sua [[Special:Watchlist|lista de páginas vigiadas]].\nFuturas modificações em tal página e páginas de discussão relacionadas serão listadas lá.",
        "wlheader-enotif": "A notificação por email encontra-se ativada.",
        "wlheader-showupdated": "Páginas modificadas desde a sua última visita são mostradas em '''negrito'''",
        "wlnote": "A seguir {{PLURAL:$1|está a última alteração ocorrida|estão as últimas '''$1''' alterações ocorridas}} {{PLURAL:$2|na última hora|nas últimas '''$2''' horas}} a partir de $3, $4.",
-       "wlshowlast": "Ver últimas $1 horas $2 dias $3",
+       "wlshowlast": "Ver últimas $1 horas $2 dias",
        "watchlist-options": "Opções da lista de páginas vigiadas",
        "watching": "Vigiando...",
        "unwatching": "Deixando de vigiar...",
        "import": "Importar páginas",
        "importinterwiki": "Importação transwiki",
        "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-interwiki-history": "Copiar todas as edições para esta página",
        "import-interwiki-templates": "Incluir todas as predefinições",
        "import-interwiki-submit": "Importar",
        "importfailed": "A importação falhou: $1",
        "importunknownsource": "Tipo de fonte de importação desconhecida",
        "importcantopen": "Não foi possível abrir o arquivo de importação",
-       "importbadinterwiki": "Ligação de interwiki incorreta",
+       "importbadinterwiki": "Link de interwiki incorreto",
        "importsuccess": "Importação completa!",
        "importnosources": "Não foram definidas fontes de importação transwiki e o carregamento direto de históricos encontra-se desativado.",
        "importnofile": "Nenhum arquivo de importação foi carregado.",
        "pageinfo-robot-policy": "Indexado por robôs",
        "pageinfo-robot-index": "Autorizado",
        "pageinfo-robot-noindex": "Desautorizado",
-       "pageinfo-views": "Número de visitas",
        "pageinfo-watchers": "Número de vigilantes da página",
        "pageinfo-few-watchers": "Menos de  $1  {{PLURAL:$1|vigilante|vigilantes}}",
        "pageinfo-redirects-name": "Número de redirecionamentos para esta página",
        "exif-urgency-low": "Baixa ($1)",
        "exif-urgency-high": "Alta ($1)",
        "exif-urgency-other": "Prioridade definida pelo usuário ($1)",
-       "watchlistall2": "todas",
        "namespacesall": "todos",
        "monthsall": "todos",
        "confirmemail": "Confirmar endereço de E-mail",
        "autosumm-replace": "Página substituída por '$1'",
        "autoredircomment": "Redirecionando para [[$1]]",
        "autosumm-new": "Criou página com '$1'",
+       "autosumm-newblank": "Criar página em branco",
        "lag-warn-normal": "É possível que as alterações que sejam mais recentes do que $1 {{PLURAL:$1|segundo|segundos}} não sejam exibidas nesta lista.",
        "lag-warn-high": "Devido a sérios problemas de latência no servidor do banco de dados, as alterações mais recentes que $1 {{PLURAL:$1|segundo|segundos}} poderão não ser exibidas nesta lista.",
        "watchlistedit-normal-title": "Editar lista de páginas vigiadas",
        "watchlistedit-raw-done": "Sua lista de páginas vigiadas foi atualizada.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Foi adicionado um título|Foram adicionados $1 títulos}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Foi removido um título|Foram removidos $1 títulos}}:",
+       "watchlistedit-clear-title": "Lista de páginas vigiadas limpa",
        "watchlistedit-clear-legend": "Limpar a lista de páginas vigiadas",
        "watchlistedit-clear-explain": "Todos os títulos serão removidos da sua lista de páginas vigiadas",
        "watchlistedit-clear-titles": "Títulos:",
        "logentry-rights-rights-legacy": "$1 alterou os grupos de $3",
        "logentry-rights-autopromote": "$1 foi promovido automaticamente de $4 para $5",
        "rightsnone": "(nenhum)",
+       "revdelete-summary": "sumário de edição",
        "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:",
        "pagelang-select-lang": "Selecionar idioma",
        "right-pagelang": "Mudar idioma da página",
        "action-pagelang": "mudar idioma da página",
-       "log-name-pagelang": "Mudar idioma do log"
+       "log-name-pagelang": "Mudar idioma do log",
+       "mediastatistics": "Estatísticas de mídia",
+       "mediastatistics-summary": "Estatísticas sobre os tipos de arquivos carregados. Inclui apenas a versão mais recente do arquivo. Versões antigas ou apagadas são excluídas.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "Tipo MIME",
+       "mediastatistics-table-extensions": "Possíveis extensões",
+       "mediastatistics-table-count": "Número de arquivos",
+       "mediastatistics-table-totalbytes": "Tamanho combinado",
+       "mediastatistics-header-unknown": "Desconhecido",
+       "mediastatistics-header-bitmap": "Imagens de bitmap",
+       "mediastatistics-header-drawing": "Desenhos (imagens vetoriais)",
+       "mediastatistics-header-audio": "Áudio",
+       "mediastatistics-header-video": "Vídeos",
+       "mediastatistics-header-multimedia": "Mídia enriquecida",
+       "mediastatistics-header-office": "Documento",
+       "mediastatistics-header-text": "Textuais",
+       "mediastatistics-header-executable": "Executáveis",
+       "mediastatistics-header-archive": "Formatos compactados",
+       "json-error-state-mismatch": "JSON inválido ou malformado",
+       "json-error-ctrl-char": "Erro de caractere de controle, possivelmente codificada incorretamente",
+       "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"
 }
index 4bce31a..4747ded 100644 (file)
@@ -62,7 +62,8 @@
                        "555",
                        "아라",
                        "Leon saudanha",
-                       "Macofe"
+                       "Macofe",
+                       "He7d3r"
                ]
        },
        "tog-underline": "Sublinhar ligações:",
        "otherlanguages": "Noutros idiomas",
        "redirectedfrom": "(Redireccionado de $1)",
        "redirectpagesub": "Página de redirecionamento",
+       "redirectto": "Redireciona para:",
        "lastmodifiedat": "Esta página foi modificada pela última vez à(s) $2 de $1.",
        "viewcount": "Esta página foi acedida {{PLURAL:$1|uma vez|$1 vezes}}.",
        "protectedpage": "Página protegida",
        "viewsourcetext": "Pode ver e copiar o conteúdo desta página:",
        "viewyourtext": "Pode ver e copiar o código-fonte das '''suas edições''' desta página:",
        "protectedinterface": "Esta página fornece o texto da interface ao software, e está protegida para prevenir abusos.",
-       "editinginterface": "'''Aviso:''' Está a editar uma página usada para fornecer texto de interface ao software. Alterações a esta página afetarão a aparência da interface de utilizador para os outros utilizadores. Para traduções, considere utilizar a [//translatewiki.net/wiki/Main_Page?setlang=pt translatewiki.net], um projeto destinado à tradução do MediaWiki.",
+       "editinginterface": "<strong>Aviso:</strong> Está a editar uma página usada para fornecer texto de interface ao software. Alterações a esta página afetarão a aparência da interface de utilizador para os outros utilizadores.",
+       "translateinterface": "Para traduções, considere utilizar a [//translatewiki.net/wiki/Main_Page?setlang=pt translatewiki.net], um projeto destinado à tradução do MediaWiki.",
        "cascadeprotected": "Esta página foi protegida contra edições por estar incluída {{PLURAL:$1|na página listada|nas páginas listadas}} a seguir, ({{PLURAL:$1|página essa que está protegida|páginas essas que estão protegidas}} com a opção de proteção \"em cascata\" ativada):\n$2",
        "namespaceprotected": "Não tem permissão para editar páginas no domínio '''$1'''.",
        "customcssprotected": "Não tem permissão para editar esta página de CSS porque esta contém as configurações pessoais de outro utilizador.",
        "userlogin-remembermypassword": "Manter-me autenticado",
        "userlogin-signwithsecure": "Usar uma ligação segura",
        "yourdomainname": "O seu domínio:",
-       "password-change-forbidden": "Não pode alterar palavras-chave nesta wiki.",
+       "password-change-forbidden": "Não pode alterar palavras-passe nesta wiki.",
        "externaldberror": "Ocorreu um erro externo à base de dados durante a autenticação ou não lhe é permitido atualizar a sua conta externa.",
        "login": "Entrar",
        "nav-login-createaccount": "Entrar / criar conta",
        "createaccount-text": "Alguém criou uma conta com o nome $2 para o seu endereço de correio eletrónico, na wiki {{SITENAME}} ($4), com a palavra-passe \"$3\".\nDeve agora iniciar sessão e alterar a sua palavra-passe.\n\nSe a conta foi criada por engano, pode ignorar esta mensagem.",
        "login-throttled": "Realizou demasiadas tentativas de início de sessão com esta conta.\nAguarde $1 antes de tentar novamente, por favor.",
        "login-abort-generic": "O início de sessão não teve êxito - Cancelado",
+       "login-migrated-generic": "A sua conta foi migrada e o seu nome de utilizador já não existe nesta wiki.",
        "loginlanguagelabel": "Língua: $1",
        "suspicious-userlogout": "O seu pedido para sair foi negado porque parece ter sido enviado por um navegador danificado ou por um proxy com cache.",
        "createacct-another-realname-tip": "O fornecimento do nome verdadeiro é opcional.\nSe optar por revelá-lo, ele será utilizado para atribuir-lhe crédito pelo seu trabalho.",
        "passwordreset-emailsent-capture": "Foi enviado um correio eletrónico para recuperação da palavra-passe, que é mostrado abaixo.",
        "passwordreset-emailerror-capture": "Foi gerado um correio eletrónico para redefinição da palavra-passe, mostrado abaixo, mas o seu envio para {{GENDER:$2|o utilizador|a utilizadora}} falhou: $1",
        "changeemail": "Alterar o endereço de correio eletrónico",
-       "changeemail-header": "Alterar o endereço de correio eletrónico da conta",
        "changeemail-text": "Preencha este formulário para alterar o endereço de correio eletrónico. Para confirmar esta alteração terá de introduzir a sua palavra-passe.",
        "changeemail-no-info": "Precisa de iniciar sessão para aceder diretamente a esta página.",
        "changeemail-oldemail": "Correio eletrónico atual:",
        "changeemail-none": "(nenhum)",
        "changeemail-password": "A sua palavra-passe em {{SITENAME}}:",
        "changeemail-submit": "Alterar correio eletrónico",
-       "changeemail-cancel": "Cancelar",
        "changeemail-throttled": "Realizou demasiadas tentativas de início de sessão.\nAguarde $1 antes de tentar novamente, por favor.",
        "resettokens": "Redefinir chaves",
        "resettokens-text": "Pode redefinir as chaves de acesso a certos dados privados associados à sua conta aqui.\n\nDeve fazê-lo se as divulgou acidentalmente a alguém ou se a sua conta tiver sido comprometida.",
        "showpreview": "Antever resultado",
        "showdiff": "Mostrar alterações",
        "blankarticle": "<strong>Aviso:</strong> A página que está prestes a criar está em branco.  \nSe clicar \"{{int:savearticle}}\" outra vez, a página será criada sem qualquer conteúdo.",
-       "anoneditwarning": "'''Aviso''': Não iniciou sessão.\nO seu endereço IP será registado no histórico de edições desta página.",
+       "anoneditwarning": "<strong>Aviso</strong>: Não iniciou sessão. O seu endereço IP será registado no histórico de edições desta página. Se <strong>[$1 iniciar sessão]</strong> ou <strong>[$2 criar uma conta]</strong>, as suas edições serão registadas com o seu nome de utilizador(a), bem como usufruir de outros benefícios.",
        "anonpreviewwarning": "''Não iniciou sessão. Ao gravar, registará o seu endereço IP no histórico de edições da página.''",
        "missingsummary": "'''Atenção:''' Não introduziu um resumo da edição.\nSe clicar novamente \"Gravar página\" a sua edição será gravada sem resumo.",
        "missingcommenttext": "Introduza um comentário abaixo, por favor.",
        "content-model-text": "texto simples",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Páginas que utilizam argumentos duplicados ao chamar predefinições",
        "expensive-parserfunction-warning": "'''Aviso:''' Esta página contém demasiadas chamadas de funções exigentes do analisador sintático.\n\nDevia ter menos de $2 {{PLURAL:$2|chamada|chamadas}}. Neste momento tem $1 {{PLURAL:$1|chamada|chamadas}}.",
        "expensive-parserfunction-category": "Páginas com demasiadas chamadas a funções exigentes",
        "post-expand-template-inclusion-warning": "Aviso: O tamanho de inclusão de predefinições é demasiado grande, algumas predefinições não serão incluídas.",
        "mergehistory-same-destination": "As páginas de origem e de destino não podem ser a mesma",
        "mergehistory-reason": "Motivo:",
        "mergelog": "Registo de fusão de históricos",
-       "pagemerge-logentry": "[[$1]] foi fundida em [[$2]] (até a edição $3)",
        "revertmerge": "Desfazer fusão",
        "mergelogpagetext": "Segue-se um registo das mais recentes fusões de históricos de páginas.",
        "history-title": "Histórico de edições de \"$1\"",
        "search-result-category-size": "{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoria|$2 subcategorias}}, {{PLURAL:$3|1 ficheiro|$3 ficheiros}})",
        "search-redirect": "(redirecionamento de $1)",
        "search-section": "(seção $1)",
+       "search-category": "(categoria $1)",
        "search-file-match": "(coincide com o conteúdo do ficheiro)",
        "search-suggest": "Será que quis dizer: $1",
        "search-interwiki-caption": "Projetos irmãos",
        "searchall": "todos",
        "showingresults": "{{PLURAL:$1|É apresentado '''um''' resultado|São apresentados até '''$1''' resultados}} abaixo{{PLURAL:$1||, começando pelo '''$2'''º}}.",
        "showingresultsinrange": "Apresenta-se abaixo {{PLURAL:$1|<strong>1</strong> resultado|até <strong>$1</strong> resultados}} no intervalo #<strong>$2</strong> a #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados '''$1–$2''' de '''$3'''}} para '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Resultado <strong>$1</strong> de <strong>$3</strong>|Resultados <strong>$1 - $2</strong> de <strong>$3</strong>}}",
        "search-nonefound": "A pesquisa não produziu resultados.",
        "powersearch-legend": "Pesquisa avançada",
        "powersearch-ns": "Pesquisar nos domínios:",
        "gender-female": "Ela edita páginas wiki",
        "prefs-help-gender": "Esta preferência é opcional.\nO software usa o seu valor para o endereçar e para o mencionar a outros usando o género gramatical apropriado.\nEsta informação será pública.",
        "email": "Correio eletrónico",
-       "prefs-help-realname": "O fornecimento do nome verdadeiro é opcional.\nSe optar por revelá-lo, ele será utilizado para atribuir-lhe crédito pelo seu trabalho.",
+       "prefs-help-realname": "O fornecimento do nome verdadeiro é opcional.\nSe optar por revelá-lo, será utilizado para atribuir-lhe crédito pelo seu trabalho.",
        "prefs-help-email": "Opcional: o endereço de correio eletrónico é opcional, mas será necessário para redefinir a palavra-passe caso esqueça a antiga.",
        "prefs-help-email-others": "Também pode optar por permitir que outros entrem em contacto consigo por correio eletrónico, através de uma ligação nas suas páginas de utilizador ou de discussão, sem revelar o seu endereço de correio eletrónico.",
        "prefs-help-email-required": "É necessário o endereço de correio eletrónico.",
        "prefs-tokenwatchlist": "Chave",
        "prefs-diffs": "Diferenças",
        "prefs-help-prefershttps": "Esta preferência terá efeito no seu próximo início de sessão.",
+       "prefswarning-warning": "Fez alterações às suas preferências que não foram gravadas ainda.\nSe abandonar esta página sem clicar em \"$1\", as suas preferências não serão atualizadas.",
        "prefs-tabs-navigation-hint": "Dica: Pode usar as setas direita e esquerda do teclado para navegar entre os separadores.",
        "email-address-validity-valid": "O endereço de correio eletrónico parece válido",
        "email-address-validity-invalid": "É necessário um endereço de correio eletrónico válido!",
        "statistics": "Estatísticas",
        "statistics-header-pages": "Estatísticas de páginas",
        "statistics-header-edits": "Estatísticas de edições",
-       "statistics-header-views": "Ver estatísticas",
        "statistics-header-users": "Estatísticas de utilizadores",
        "statistics-header-hooks": "Outras estatísticas",
        "statistics-articles": "Páginas de conteúdo",
        "statistics-files": "Ficheiros carregados",
        "statistics-edits": "Edições de páginas desde que a {{SITENAME}} foi instalada",
        "statistics-edits-average": "Média de edições por página",
-       "statistics-views-total": "Total de visionamentos",
-       "statistics-views-total-desc": "Não estão incluídos os visionamentos de páginas inexistentes e páginas especiais",
-       "statistics-views-peredit": "Visionamentos por edição",
        "statistics-users": "[[Special:ListUsers|Utilizadores]] registados",
        "statistics-users-active": "Utilizadores ativos",
        "statistics-users-active-desc": "Utilizadores que efectuaram uma operação {{PLURAL:$1|no último dia|nos últimos $1 dias}}",
-       "statistics-mostpopular": "Páginas mais vistas",
        "pageswithprop": "Páginas com uma propriedade",
        "pageswithprop-legend": "Páginas com uma propriedade",
        "pageswithprop-text": "Esta página lista páginas que usam uma propriedade em particular.",
        "uncategorizedtemplates": "Predefinições não categorizadas",
        "unusedcategories": "Categorias não utilizadas",
        "unusedimages": "Ficheiros não utilizados",
-       "popularpages": "Páginas populares",
        "wantedcategories": "Categorias desejadas",
        "wantedpages": "Páginas desejadas",
        "wantedpages-badtitle": "Título inválido no conjunto de resultados: $1",
        "pager-older-n": "{{PLURAL:$1|1 anterior|$1 anteriores}}",
        "suppress": "Supervisor",
        "querypage-disabled": "Esta página especial está desativada para não prejudicar o desempenho.",
+       "apihelp": "Ajuda API",
+       "apihelp-no-such-module": "Módulo \"$1\" não encontrado.",
        "booksources": "Fontes bibliográficas",
        "booksources-search-legend": "Pesquisar referências bibliográficas",
-       "booksources-go": "Ir",
+       "booksources-search": "Pesquisar",
        "booksources-text": "É apresentada abaixo uma lista de ligações para outros sítios na Internet que vendem livros novos e usados e talvez possuam informações adicionais sobre os livros que procura:",
        "booksources-invalid-isbn": "O número ISBN fornecido não parece ser válido; verifique a existência de erros ao copiar da fonte original.",
        "specialloguserlabel": "Executante:",
        "listgrouprights-namespaceprotection-header": "Restrições do domínio",
        "listgrouprights-namespaceprotection-namespace": "Domínio",
        "listgrouprights-namespaceprotection-restrictedto": "Direito(s) do utilizador para editar",
-       "trackingcategories": "Monitoramento de categorias",
+       "trackingcategories": "Categorias de monitoramento",
        "trackingcategories-summary": "Esta página lista as categorias monitoradas que foram geradas automaticamente pelo software MediaWiki. Os seus nomes podem ser alterados ao editar sua mensagem correspondente no domínio {{ns:8}}.",
        "trackingcategories-msg": "Categoria monitorada",
        "trackingcategories-name": "Nome da mensagem",
        "wlheader-enotif": "A notificação por correio eletrónico está ativa.",
        "wlheader-showupdated": "As páginas modificadas desde a última vez que as visitou aparecem destacadas a '''negrito'''.",
        "wlnote": "A seguir {{PLURAL:$1|está a última alteração ocorrida|estão as últimas <strong>$1</strong> alterações ocorridas}} {{PLURAL:$2|na última hora|nas últimas <strong>$2</strong> horas}} até $3, $4.",
-       "wlshowlast": "Ver últimas $1 horas $2 dias $3",
+       "wlshowlast": "Ver últimas $1 horas $2 dias",
        "watchlist-options": "Opções da lista de páginas vigiadas",
        "watching": "A vigiar...",
        "unwatching": "A deixar de vigiar...",
        "sp-contributions-blocked-notice-anon": "Este endereço IP está bloqueado neste momento.\nPara referência é apresentado abaixo o último registo de bloqueio:",
        "sp-contributions-search": "Pesquisar contribuições",
        "sp-contributions-username": "Endereço de IP ou utilizador(a):",
-       "sp-contributions-toponly": "Mostrar somente as revisões mais recentes",
+       "sp-contributions-toponly": "Mostrar apenas as edições mais recentes",
        "sp-contributions-newonly": "Mostrar só edições que são criações de páginas",
        "sp-contributions-submit": "Pesquisar",
        "whatlinkshere": "Páginas afluentes",
        "unblocked": "[[User:$1|$1]] foi desbloqueado",
        "unblocked-range": "A gama $1 foi desbloqueada",
        "unblocked-id": "O bloqueio de $1 foi removido com sucesso",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] foi desbloqueado.",
        "blocklist": "Utilizadores bloqueados",
        "ipblocklist": "Utilizadores bloqueados",
        "ipblocklist-legend": "Procurar um utilizador bloqueado",
        "tooltip-pt-mycontris": "Lista das suas contribuições",
        "tooltip-pt-login": "É encorajado que inicie sessão, apesar de não ser obrigatório.",
        "tooltip-pt-logout": "Sair da conta",
+       "tooltip-pt-createaccount": "É encorajado a criar uma conta e iniciar sessão; no entanto, não é obrigatório",
        "tooltip-ca-talk": "Discussão sobre o conteúdo da página",
        "tooltip-ca-edit": "Pode editar esta página.\nUtilize o botão de antevisão do resultado antes de gravar, por favor.",
        "tooltip-ca-addsection": "Iniciar uma nova seção",
        "tooltip-feed-atom": "''Feed'' Atom desta página",
        "tooltip-t-contributions": "Ver as contribuições deste utilizador",
        "tooltip-t-emailuser": "Enviar uma mensagem de correio a este utilizador",
+       "tooltip-t-info": "Mais informações sobre esta página",
        "tooltip-t-upload": "Carregar ficheiros",
        "tooltip-t-specialpages": "Lista de páginas especiais",
        "tooltip-t-print": "Versão para impressão desta página",
        "pageinfo-robot-policy": "Indexação por robôs",
        "pageinfo-robot-index": "Permitida",
        "pageinfo-robot-noindex": "Não permitida",
-       "pageinfo-views": "Número de visitas",
        "pageinfo-watchers": "Número de vigilantes da página",
        "pageinfo-few-watchers": "Menos do que $1 {{PLURAL:$1|vigilante|vigilantes}}",
        "pageinfo-redirects-name": "Número de redirecionamentos para esta página",
        "exif-urgency-low": "Baixa ($1)",
        "exif-urgency-high": "Alta ($1)",
        "exif-urgency-other": "Prioridade definida pelo utilizador ($1)",
-       "watchlistall2": "todas",
        "namespacesall": "todos",
        "monthsall": "todos",
        "confirmemail": "Confirmar endereço de correio eletrónico",
        "specialpages-group-pages": "Listas de páginas",
        "specialpages-group-pagetools": "Ferramentas de páginas",
        "specialpages-group-wiki": "Dados e ferramentas",
-       "specialpages-group-redirects": "Pesquisas e aleatoriedade",
+       "specialpages-group-redirects": "Redirecionar páginas especiais",
        "specialpages-group-spam": "Ferramentas anti-spam",
        "blankpage": "Página em branco",
        "intentionallyblankpage": "Esta página foi intencionalmente deixada em branco",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|carregou}} uma nova versão de $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|carregou}} $3",
        "rightsnone": "(nenhum)",
+       "revdelete-summary": "editar resumo",
        "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:",
        "log-description-pagelang": "Este é um registo de alterações aos idiomas das páginas.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|alterou}} o idioma da página $3 de $4 para $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ativado)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desativado''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desativado''')",
+       "mediastatistics": "Estatísticas multimédia",
+       "mediastatistics-summary": "Estatísticas sobre os tipos de ficheiros carregados. Inclui apenas a versão mais recente do ficheiro. Versões antigas ou eliminadas são excluídas.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "Tipo MIME",
+       "mediastatistics-table-extensions": "Extensões possíveis",
+       "mediastatistics-table-count": "Número de ficheiros",
+       "mediastatistics-table-totalbytes": "Tamanho combinado",
+       "mediastatistics-header-unknown": "Desconhecido",
+       "mediastatistics-header-bitmap": "Imagens de mapa de bits",
+       "mediastatistics-header-drawing": "Desenhos (imagens vetoriais)",
+       "mediastatistics-header-audio": "Áudio",
+       "mediastatistics-header-video": "Vídeo",
+       "mediastatistics-header-office": "Documentos",
+       "mediastatistics-header-text": "Textuais",
+       "mediastatistics-header-executable": "Executáveis",
+       "mediastatistics-header-archive": "Formatos compactados",
+       "json-error-unknown": "Houve um problema com o JSON. Erro: $1",
+       "json-error-depth": "A profundidade máxima da pilha foi excedida",
+       "json-error-state-mismatch": "Código JSON inválido ou mal formatado",
+       "json-error-syntax": "Erro de sintaxe",
+       "json-error-unsupported-type": "Foi dado um valor de um tipo que não pode ser codificado"
 }
index dae6810..b9d586c 100644 (file)
@@ -75,6 +75,7 @@
                        "MIKHEIL",
                        "Malafaya",
                        "MarkvA",
+                       "marktraceur",
                        "Matma Rex",
                        "MaxSem",
                        "McDutchie",
                        "פוילישער",
                        "គីមស៊្រុន",
                        "아라",
-                       "Jdforrester"
+                       "Jdforrester",
+                       "Mar(c)"
                ]
        },
        "sidebar": "{{notranslate}}",
        "otherlanguages": "This message is shown under the toolbox. It is used if there are interwiki links added to the page, like <code><nowiki>[[</nowiki>en:Interwiki article]]</code>.\n{{Identical|Otherlanguages}}",
        "redirectedfrom": "The text displayed when a certain page is redirected to another page. Parameters:\n* $1 - the name of the page user came from",
        "redirectpagesub": "Displayed under the page title of a page which is a redirect to another page, see [{{fullurl:Project:Translators|redirect=no}} Project:Translators] for example.\n\n{{Identical|Redirect page}}",
+       "redirectto": "Alt text of the arrow icon shown on redirect pages ([[commons:File:Sample redirect page.jpg]]).\n\n{{Identical|Redirect to}}",
        "talkpageheader": "{{notranslate}}",
        "lastmodifiedat": "This message is shown below each page, in the footer with the logos and links.\n\nParameters:\n* $1 - date\n* $2 - time\nSee also:\n* {{msg-mw|Lastmodifiedatby}}",
        "viewcount": "Used as page-view counter. Parameters:\n* $1 - number of pageviews",
        "viewyourtext": "Same as {{msg-mw|viewsourcetext}} but when showing the text submitted by the user, this happens e.g. when the user was blocked while he is editing the page",
        "protectedinterface": "Message shown if a user without the \"editinterface\" right tries to edit a page in the MediaWiki namespace.\n\nSee also {{msg-mw|editinginterface}}. Parameters:\n* $1 - (Unused) the action the user attempted to perform",
        "editinginterface": "A message shown when editing pages in the namespace MediaWiki:.\n\nSee also {{msg-mw|protectedinterface}}.",
+       "translateinterface": "A message shown when editing pages in the namespace MediaWiki:, which have a default message text.\n\nSee also:\n* {{msg-mw|Protectedinterface}}\n* {{msg-mw|Editinginterface}}",
        "cascadeprotected": "Parameters:\n* $1 - number of cascade-protected pages, used for PLURAL\n* $2 - list of cascade-protected pages\n* $3 - (Unused) the action the user attempted to perform",
        "namespaceprotected": "Parameters:\n* $1 - namespace name\n* $2 - (Unused) the action the user attempted to perform",
        "customcssprotected": "Used as error message. Parameters:\n* $1 - (Unused) the action the user attempted to perform",
        "userlogin-resetpassword-link": "Used as link text in the login form.\n\nThe link points to the local page [[Special:PasswordReset]].\n\nSee example: [[Special:UserLogin]]\n\nuserlogin-resetpassword-link may have to be shorter than the old {{msg-mw|userlogin-resetlink}}.\n{{Identical|Forgot your password}}",
        "helplogin-url": "{{doc-important|Do not translate the namespace name <code>Help</code>.}}\nUsed as name of the page that provides information about logging into the wiki.\n\nUsed as a link target in the message {{msg-mw|Userlogin-helplink}}.",
        "userlogin-helplink2": "Label for a link to login help.\n\nSee example: [[Special:UserLogin]]\n\nSee also:\n* {{msg-mw|Helplogin-url}}",
-       "userlogin-loggedin": "Used as warning on [[Special:UserLogin]] when the current user is already logged in.\n\nFollowed by the Login form.\n\nSee example: [[Special:UserLogin]].\n\nParameters:\n* $1 - user name (used for display and for gender support)",
+       "userlogin-loggedin": "Used as warning on [[Special:UserLogin]] when the current user is already logged in.\n\nFollowed by the Login form.\n\nSee example: [[Special:UserLogin]].\n\nParameters:\n* $1 - user name (used for display and for gender support)\nSee also:\n* {{msg-mw|Mobile-frontend-userlogin-loggedin-register}}",
        "userlogin-createanother": "Used as label for the button on [[Special:UserLogin]] shown when the current user is already logged in.\n{{Identical|Create another account}}",
        "createacct-emailrequired": "Label in create account form for email field when it is required.\n\nSee also:\n* {{msg-mw|Createacct-emailoptional}}\n{{Identical|E-mail address}}",
        "createacct-emailoptional": "Label in vertical-layout create account form for email field when it is optional.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nSee also:\n* {{msg-mw|Createacct-emailrequired}}",
        "createacct-submit": "Submit button on vertical-layout create account form.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
        "createacct-another-submit": "Submit button of  [[Special:UserLogin/signup]] ([[Special:CreateAccount]]) when accessed by a registered user.\n\nThe original means \"create an account in addition to the one you already have\"; sometimes, but not always, it means you are going to \"Create the account on behalf of somebody else\" or \"Create account for another\".\n{{Identical|Create another account}}",
        "createacct-benefit-heading": "In vertical-layout create account form, the heading for the section describing the benefits of creating an account. See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nIf in your language you need to know the gender of the name for the wiki (which is the subject of the English sentence), please adapt the sentence as much as you need for your translation to fit.",
-       "createacct-benefit-icon1": "In vertical-layout create account form, the CSS style for the div next to the first benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
-       "createacct-benefit-head1": "In vertical-layout create account form, the text in the heading for the first benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body1}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
+       "createacct-benefit-icon1": "In vertical-layout create account form, the CSS style for the div next to the first benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]",
+       "createacct-benefit-head1": "In vertical-layout create account form, the text in the heading for the first benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body1}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]",
        "createacct-benefit-body1": "In vertical-layout create account form, the text for the first benefit.\n\nPreceded by the message {{msg-mw|Createacct-benefit-head1}} (number of edits).\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nParameters:\n* $1 - number of edits\n{{Identical|Edit}}",
-       "createacct-benefit-icon2": "In vertical-layout create account form, the CSS style for the div next to the second benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
-       "createacct-benefit-head2": "In vertical-layout create account form, the text in the heading for the second benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body2}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
+       "createacct-benefit-icon2": "In vertical-layout create account form, the CSS style for the div next to the second benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]",
+       "createacct-benefit-head2": "In vertical-layout create account form, the text in the heading for the second benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body2}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]",
        "createacct-benefit-body2": "In vertical-layout create account form, the text for the second benefit.\n\nPreceded by the message {{msg-mw|Createacct-benefit-head2}} (number of pages).\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nParameters:\n* $1 - number of pages\n{{Identical|Page}}",
-       "createacct-benefit-icon3": "In vertical-layout create account form, the CSS style for the div next to the third benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
-       "createacct-benefit-head3": "In vertical-layout create account form, the text in the heading for the third benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body3}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
+       "createacct-benefit-icon3": "In vertical-layout create account form, the CSS style for the div next to the third benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]",
+       "createacct-benefit-head3": "In vertical-layout create account form, the text in the heading for the third benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body3}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]",
        "createacct-benefit-body3": "In vertical-layout create account form, the text for the third benefit.\n\nPreceded by the message {{msg-mw|Createacct-benefit-head3}} (number of contributors).\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nParameters:\n* $1 - number of contributors (users)",
        "badretype": "Used as error message when the new password and its retype do not match.",
        "userexists": "Used as error message in creating a user account.",
        "blocked-mailpassword": "Used as error message in password recovery.",
        "eauthentsent": "This message appears after entering an email address in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}, then clicking on \"{{int:saveprefs}}\".",
        "throttled-mailpassword": "Used in [[Special:PasswordReset]]. Parameters:\n* $1 - password reset email resend time (in hours)",
-       "loginstart": "{{notranslate}}",
-       "loginend": "{{notranslate}}",
-       "loginend-https": "{{notranslate}}",
-       "signupstart": "{{notranslate}}\nDefault:\n* {{msg-mw|Loginstart}}",
-       "signupend": "{{notranslate}}\nDefault:\n* {{msg-mw|Loginend}}",
+       "signupstart": "{{notranslate}}",
+       "signupend": "{{notranslate}}",
        "signupend-https": "{{notranslate}}",
        "mailerror": "Used as error message in sending confirmation mail to user. Parameters:\n* $1 - new mail address",
        "acct_creation_throttle_hit": "Error message at [[Special:CreateAccount]].\n\n\"in the last day\" precisely means: during the lasts 86400 seconds (24 hours) ending right now.\n\nParameters:\n* $1 - number of accounts",
        "createaccount-text": "Body of the email sent to the email address entered at [[Special:CreateAccount]] when one user creates an account for another and clicks the checkbox labelled:\n* {{msg-mw|Createaccountmail}}\n\nParameters:\n* $1 - (Unused) IP address\n* $2 - the name entered as username\n* $3 - a password (randomly generated)\n* $4 - a URL to the wiki ('<' + server name + script name + '>')\n* $5 - (Unused) number of days to password expiry date",
        "login-throttled": "Error message shown at [[Special:UserLogin]] after the user has tried to login with incorrect password too many times.\n\nThe user has to wait a certain time before trying to log in again.\n\nParameters:\n* $1 - the time to wait before the next login attempt. Automatically formatted using the following duration messages:\n** {{msg-mw|Duration-millennia}}\n** {{msg-mw|Duration-centuries}}\n** {{msg-mw|Duration-decades}}\n** {{msg-mw|Duration-years}}\n** {{msg-mw|Duration-weeks}}\n** {{msg-mw|Duration-days}}\n** {{msg-mw|Duration-hours}}\n** {{msg-mw|Duration-minutes}}\n** {{msg-mw|Duration-seconds}}\n\nThis is a protection against robots trying to find the password by trying lots of them.\nThe number of attempts and waiting time are configured via [[mw:Manual:$wgPasswordAttemptThrottle|$wgPasswordAttemptThrottle]].\nThis message is used in html.\n{{identical|Login throttled}}",
        "login-abort-generic": "The generic unsuccessful login message is used unless otherwise specified by hook writers",
+       "login-migrated-generic": "The generic unsuccessful login message when the user's account has been updated, and their username no longer exist",
        "loginlanguagelabel": "Used on [[Special:UserLogin]] if $wgLoginLanguageSelector is true. Parameters:\n* $1 - a pipe-separated list built from the names that appear in the message {{msg-mw|Loginlanguagelinks}}.\n{{Identical|Language}}",
        "loginlanguagelinks": "{{notranslate}}",
        "suspicious-userlogout": "Used when the logout request looks suspicious, in Special:UserLogout.",
        "passwordreset-emailerror-capture": "Error message displayed in [[Special:PasswordReset]] when sending an email fails. Parameters:\n* $1 - error message\n* $2 - username, used for GENDER\nSee also:\n* {{msg-mw|Passwordreset-emailsent}}\n* {{msg-mw|Passwordreset-emailsent-capture}}",
        "changeemail": "Title of [[Special:ChangeEmail|special page]].",
        "changeemail-summary": "{{ignored}}",
-       "changeemail-header": "Header on [[Special:ChangeEmail]].",
        "changeemail-text": "Text of [[Special:ChangeEmail]].",
        "changeemail-no-info": "Error message for [[Special:ChangeEmail]].\n\nParameters:\n* $1 (unused) - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description",
        "changeemail-oldemail": "Label for e-mail address field in [[Special:ChangeEmail]].",
        "changeemail-none": "Probably appears in 'Current E-mail address' field when no address held, in [[Special:ChangeEmail]].\n\n{{Identical|None}}",
        "changeemail-password": "Label for password field in [[Special:ChangeEmail]].",
        "changeemail-submit": "Submit button on [[Special:ChangeEmail]]",
-       "changeemail-cancel": "Cancel button on [[Special:ChangeEmail]]\n\n{{Identical|Cancel}}",
        "changeemail-throttled": "Error message shown at [[Special:ChangeEmail]] after the user has tried to login with incorrect password too many times.\n\nThe user has to wait a certain time before trying to log in again.\n\nParameters:\n* $1 - the time to wait before the next login attempt. Automatically formatted using the following duration messages:\n** {{msg-mw|Duration-millennia}}\n** {{msg-mw|Duration-centuries}}\n** {{msg-mw|Duration-decades}}\n** {{msg-mw|Duration-years}}\n** {{msg-mw|Duration-weeks}}\n** {{msg-mw|Duration-days}}\n** {{msg-mw|Duration-hours}}\n** {{msg-mw|Duration-minutes}}\n** {{msg-mw|Duration-seconds}}\n\nThis is a protection against robots trying to find the password by trying lots of them.\nThe number of attempts and waiting time are configured via [[mw:Manual:$wgPasswordAttemptThrottle|$wgPasswordAttemptThrottle]].\nThis message is used in html.\n\nSee also:\n* {{msg-mw|Changepassword-throttled}}",
        "resettokens": "{{doc-special|ResetTokens}}\nIn this case \"token\" may be translated as \"key\", or similar.\n{{Identical|Reset token}}",
        "resettokens-summary": "{{ignored}}",
        "showpreview": "The text of the button to preview the page you are editing. See also {{msg-mw|showdiff}} and {{msg-mw|savearticle}} for the other buttons.\n\nSee also:\n* {{msg-mw|Showpreview}}\n* {{msg-mw|Accesskey-preview}}\n* {{msg-mw|Tooltip-preview}}\n{{Identical|Show preview}}",
        "showdiff": "Button below the edit page. See also {{msg-mw|Showpreview}} and {{msg-mw|Savearticle}} for the other buttons.\n\nSee also:\n* {{msg-mw|Showdiff}}\n* {{msg-mw|Accesskey-diff}}\n* {{msg-mw|Tooltip-diff}}\n{{Identical|Show change}}",
        "blankarticle": "Notice displayed once after the user tries to save an empty page.",
-       "anoneditwarning": "Shown when editing a page anonymously.\nSee also:\n* {{msg-mw|Sf autoedit anoneditwarning}}\n* {{msg-mw|Wikibase-anonymouseditwarning-property}}\n* {{msg-mw|Wikibase-anonymouseditwarning-item}}\n* {{msg-mw|Anonpreviewwarning}}",
+       "anoneditwarning": "Shown when editing a page anonymously.\n\nParameters:\n* $1 – A link to log in, <nowiki>{{fullurl:Special:UserLogin|returnto={{FULLPAGENAMEE}}}}</nowiki>\n* $2 – A link to sign up, <nowiki>{{fullurl:Special:UserLogin/signup|returnto={{FULLPAGENAMEE}}}}</nowiki>\n\nSee also:\n* {{msg-mw|mobile-frontend-editor-anoneditwarning}}",
        "anonpreviewwarning": "See also:\n* {{msg-mw|Anoneditwarning}}",
        "missingsummary": "The text \"edit summary\" is in {{msg-mw|Summary}}.\n\nSee also:\n* {{msg-mw|Missingcommentheader}}\n* {{msg-mw|Savearticle}}",
        "missingcommenttext": "This message is shown, when the textbox by a new-section is empty.",
        "session_fail_preview_html": "Used as error message in Preview page.",
        "token_suffix_mismatch": "Error message in Preview page.\n\nSee also:\n* {{msg-mw|Token suffix mismatch}}\n* {{msg-mw|Session fail preview}}\n* {{msg-mw|Edit form incomplete}}",
        "edit_form_incomplete": "Error message in Preview page.\n\nSee also:\n* {{msg-mw|Token suffix mismatch}}\n* {{msg-mw|Session fail preview}}\n* {{msg-mw|Edit form incomplete}}",
-       "editing": "Shown as page title when editing a page. Parameters:\n* $1 - the name of the page that is being edited. e.g. \"Editing Main Page\"\n{{Related|Editing}}",
-       "creating": "Shown as page title when creating a page. Parameters:\n* $1 - the name of the page that is being created. Example: \"Creating Main Page\".\n{{Related|Editing}}",
+       "editing": "Shown as page title when editing a page. Parameters:\n* $1 - the name of the page that is being edited. e.g. \"Editing Main Page\"\n{{Related|Editing}}\n{{Identical|Editing}}",
+       "creating": "Shown as page title when creating a page. Parameters:\n* $1 - the name of the page that is being created. Example: \"Creating Main Page\".\n{{Related|Editing}}\n{{Identical|Creating}}",
        "editingsection": "This message displays at the top of the page when a user is editing a page section. Parameters:\n* $1 - page name\n{{Related|Editing}}",
        "editingcomment": "This message displays at the top of the page when a user is creating a new section. Parameters:\n* $1 - page name\n{{Related|Editing}}",
        "editconflict": "Used as title of error message. Parameters:\n* $1 - page title",
        "content-model-text": "Name for the plain text content model, used when decribing what type of content a page contains.\n\nThis message is substituted in:\n*{{msg-mw|Bad-target-model}}\n*{{msg-mw|Content-not-allowed-here}}\n{{Identical|Plain text}}",
        "content-model-javascript": "Name for the JavaScript content model, used when decribing what type of content a page contains.\n\nThis message is substituted in:\n*{{msg-mw|Bad-target-model}}\n*{{msg-mw|Content-not-allowed-here}}",
        "content-model-css": "Name for the CSS content model, used when decribing what type of content a page contains.\n\nThis message is substituted in:\n*{{msg-mw|Bad-target-model}}\n*{{msg-mw|Content-not-allowed-here}}",
+       "duplicate-args-category": "This message is used as a category name for a [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages are placed automatically if they contain template calls that use duplicates of arguments, such as <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+       "duplicate-args-category-desc": "Duplicate arguments category description. Shown on [[Special:TrackingCategories]].\n\nSee also:\n* {{msg-mw|Duplicate-args-category}}",
        "expensive-parserfunction-warning": "On some (expensive) [[MetaWikipedia:Help:ParserFunctions|parser functions]] (e.g. <code><nowiki>{{#ifexist:}}</nowiki></code>) there is a limit of how many times it may be used. This is an error message shown when the limit is exceeded.\n\nParameters:\n* $1 - the current number of parser function calls\n* $2 - the allowed number of parser function calls\nSee also [[:mw:Manual:$wgExpensiveParserFunctionLimit|$wgExpensiveParserFunctionLimit in the MediaWiki manual]].\n\nSee also:\n* {{msg-mw|Expensive-parserfunction-category}}",
        "expensive-parserfunction-category": "This message is used as a category name for a [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages are placed automatically if they contain too many calls to expensive parser functions.\n\nSee also:\n* {{msg-mw|Expensive-parserfunction-category-desc}}\n* {{msg-mw|Expensive-parserfunction-warning}}",
        "post-expand-template-inclusion-warning": "When templates are expanded, there is a size limit for the number of bytes yielded. Usually that occurs from excessively nested templates, recursive templates, or ones having x-zillion of #if #case or similar contructs in them. When the wikicode parser detects this, it outputs a red warning message to the page.\n\n\nSee also:\n* {{msg-mw|Post-expand-template-inclusion-category}}",
        "mergehistory-reason": "{{Identical|Reason}}",
        "mergehistory-revisionrow": "{{Optional}}\nA revision row in the merge history page. Parameters:\n* $1 - a radio button to indicate a merge point\n* $2 - a link to the last revision of a page ({{msg-mw|Last}})\n* $3 - a page link\n* $4 - a user link\n* $5 - a revision size\n* $6 - a revision comment",
        "mergelog": "{{doc-logpage}}\n\nThis is the name of a log of merge actions done on [[Special:MergeHistory]]. This special page and this log is not enabled by default.",
-       "pagemerge-logentry": "This log message is used in a merge log entry.\n\nParameters:\n* $1 - the page name of the source of the content to be merged\n* $2 - the page into which the content is merged\n* $3 - a timestamp of limit\n\nThe log and its associated special page 'MergeHistory' is not enabled by default.\n\nPlease note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.",
+       "pagemerge-logentry": "{{ignored}}This is ''logentry'' message only used on IRC.\n\nParameters:\n* $1 - the page name of the source of the content to be merged\n* $2 - the page into which the content is merged\n* $3 - a timestamp of limit\n\nThe log and its associated special page 'MergeHistory' is not enabled by default.\n\nPlease note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.",
        "revertmerge": "Used as link text",
        "mergelogpagetext": "Description of the [{{canonicalurl:Special:Log|type=merge&user=&page=&year=&month=-1}} merge log], on the log. The associated [[Special:MergeHistory|Merge]] special page is not enabled by default.",
        "history-title": "Displayed as page title when you click on the \"history\" tab. Parameters:\n* $1 - the normal page title",
        "search-result-category-size": "Parameters:\n* $1 - number of members in this category. $1 is equal to $2+$3.\n* $2 - number of subcategories\n* $3 - number of files",
        "search-redirect": "\"Redirect\" is a noun here, not a verb.\n\nParameters:\n* $1 - a link to the redirect to the page (so, $1 is the page that the search result is redirected '''from''')",
        "search-section": "This text will be shown on the search result listing after the page title of a result if the search algorithm thinks that section is more relevant than the rest of the page. $1 is a section title.\n{{Identical|Section}}",
+       "search-category": "This text will be shown on the search result listing after the page title of a result if the search algorithm thinks that the page being in a particular category is relevant.\n\nParameters:\n* $1 - the category's name with any matching portion highlighted\n{{Identical|Category}}",
        "search-file-match": "This text will be shown on the search result listing after the page title of a result if the search engine got search results from the contents of files, rather than the pages.",
        "search-suggest": "Used for \"Did you mean\" suggestions:\n* $1 - suggested link",
        "search-interwiki-caption": "Used in [[Special:Search]], when showing search results from other wikis.",
        "searchall": "{{Identical|All}}",
        "showingresults": "This message is used on some special pages such as [[Special:WantedCategories]]. Parameters:\n* $1 - the total number of results in the batch shown\n* $2 - the number of the first item listed\nSee also:\n* {{msg-mw|Showingresultsnum}}",
        "showingresultsinrange": "Used in pagination of [[Special:MostLinkedCategories]]. Parameters:\n* $1 - the total number of results in the batch shown\n* $2 - the number of the first item listed\n* $3 - the number of last item in the batch shown\n\nSee also {{msg-mw|Showingresults}}",
-       "showingresultsheader": "Used in search results of [[Special:Search]]. Parameters:\n* $1 - minimum offset\n* $2 - maximum offset\n* $3 - total number of results\n* $4 - the search term\n* $5 - number of results",
+       "search-showingresults": "Used in search results of [[Special:Search]]. Parameters:\n* $1 - minimum offset\n* $2 - maximum offset\n* $3 - total number of results\n* $4 - number of results",
        "search-nonefound": "Message shown when a search returned no results (when using the default MediaWiki search engine).",
        "powersearch-legend": "Advanced search\n\n{{Identical|Advanced search}}",
        "powersearch-ns": "Used in the extended search form at [[Special:Search]]",
        "prefs-displayrc": "\"Display\" is a noun that specifies the kind of \"options\". So translate as \"options about display\", not as \"display the options\".\n\nUsed in [[Special:Preferences]], tab \"Recent changes\". The display options refer to:\n* {{msg-mw|Recentchangesdays}}\n* {{msg-mw|Recentchangescount}}",
        "prefs-displaywatchlist": "\"Display\" is a noun that specifies the kind of \"options\". So translate as \"options about display\", not as \"display the options\".\n\nUsed in [[Special:Preferences]], tab \"Watchlist\". The display options refer to:\n* {{msg-mw|Prefs-watchlist-days}}\n* {{msg-mw|Prefs-watchlist-edits}}",
        "prefs-tokenwatchlist": "Section heading.\nUsed in [[Special:Preferences]], tab \"Watchlist\".\n{{Identical|Token}}",
-       "prefs-diffs": "Used in [[Special:Preferences]], tab \"Misc\".",
+       "prefs-diffs": "Used in [[Special:Preferences]], tab \"Misc\".\n{{Identical|Diff}}",
        "prefs-help-prefershttps": "Used as help text for the checkbox in [[Special:Preferences]].\n\nThe checkbox has the label {{msg-mw|Tog-prefershttps}}.\n\nSee example: [[mw:Special:Preferences]].",
+       "prefswarning-warning": "Warning shown (except in Firefox) when attempting to leave [[Special:Preferences]] with unsaved changes.\n\nParameters:\n* $1 - Text of {{msg-mw|saveprefs}}, as <nowiki>{{int:saveprefs}}</nowiki> cannot be used directly.",
        "prefs-tabs-navigation-hint": "Hint message that explains the arrow key navigation for the tabs on [[Special:Preferences]] to screenreader users.",
        "email-address-validity-valid": "Used as hint for {{msg-mw|changeemail-newemail}} field in [[Special:ChangeEmail]], when the provided E-mail address is valid.",
        "email-address-validity-invalid": "Used as warning for {{msg-mw|changeemail-newemail}} field in [[Special:ChangeEmail]], when the provided E-mail address is invalid.",
        "group-bureaucrat": "{{doc-group|bureaucrat}}",
        "group-suppress": "{{doc-group|suppress}}\nThis is an optional (disabled by default) user group, meant for the [[mw:RevisionDelete|RevisionDelete]] feature, to change the visibility of revisions through [[Special:RevisionDelete]].\n\n{{Identical|Oversight}}",
        "group-all": "The name of the user group that contains all users, including anonymous users\n\n{{Identical|All}}",
-       "group-user-member": "{{doc-group|user|member}}",
+       "group-user-member": "{{doc-group|user|member}}\n{{Identical|User}}",
        "group-autoconfirmed-member": "{{doc-group|autoconfirmed|member}}",
        "group-bot-member": "{{doc-group|bot|member}}",
-       "group-sysop-member": "{{doc-group|sysop|member}}",
+       "group-sysop-member": "{{doc-group|sysop|member}}\n{{Identical|Administrator}}",
        "group-bureaucrat-member": "{{doc-group|bureaucrat|member}}",
        "group-suppress-member": "{{doc-group|suppress|member}}\nThis is a member of the optional (disabled by default) user group, meant for the [[mw:RevisionDelete|RevisionDelete]] feature, to change the visibility of revisions through [[Special:RevisionDelete]].\n\n{{Identical|Oversight}}",
-       "grouppage-user": "{{doc-group|user|page}}",
+       "grouppage-user": "{{doc-group|user|page}}\n{{Identical|User}}",
        "grouppage-autoconfirmed": "{{doc-group|autoconfirmed|page}}",
        "grouppage-bot": "{{doc-group|bot|page}}\n{{Identical|Bot}}",
        "grouppage-sysop": "{{doc-group|sysop|page}}",
        "action-userrights": "{{Doc-action|userrights}}\n\nThis action allows editing of all of the \"user rights\", not just the rights of the group \"all users\".",
        "action-userrights-interwiki": "{{Doc-action|userrights-interwiki}}",
        "action-siteadmin": "{{Doc-action|siteadmin}}",
-       "action-sendemail": "{{doc-action|sendemail}}",
+       "action-sendemail": "{{doc-action|sendemail}}\n{{Identical|E-mail}}",
        "action-editmywatchlist": "{{doc-action|editmywatchlist}}\n{{Identical|Edit your watchlist}}",
        "action-viewmywatchlist": "{{doc-action|viewmywatchlist}}\n{{Identical|View your watchlist}}",
        "action-viewmyprivateinfo": "{{doc-action|viewmyprivateinfo}}",
        "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-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}}",
+       "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}}",
        "rcshowhideliu-hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideliu}}.\n\nSee also:\n* {{msg-mw|rcshowhideliu-show}}\n{{Identical|Hide}}",
        "rcshowhideanons": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - the \"show/hide\" command, with the text taken from either {{msg-mw|Rcshowhideanons-show}} or {{msg-mw|Rcshowhideanons-hide}}\n{{Identical|Anonymous user}}",
        "rcshowhidemine-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidemine}}.\n\nSee also:\n* {{msg-mw|rcshowhidemine-hide}}\n{{Identical|show}}",
        "rcshowhidemine-hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidemine}}.\n\nSee also:\n* {{msg-mw|rcshowhidemine-show}}\n{{Identical|hide}}",
        "rclinks": "Used on [[Special:RecentChanges]].\n* $1 - a list of different choices with number of pages to be shown.<br />&nbsp;Example: \"''50{{int:pipe-separator}}100{{int:pipe-separator}}250{{int:pipe-separator}}500\".\n* $2 - a list of clickable links with a number of days for which recent changes are to be displayed.<br />&nbsp;Example: \"''1{{int:pipe-separator}}3{{int:pipe-separator}}7{{int:pipe-separator}}14{{int:pipe-separator}}30''\".\n* $3 - a block of text that consists of other messages.<br />&nbsp;Example: \"''Hide minor edits{{int:pipe-separator}}Show bots{{int:pipe-separator}}Hide anonymous users{{int:pipe-separator}}Hide logged-in users{{int:pipe-separator}}Hide patrolled edits{{int:pipe-separator}}Hide my edits''\"\nList elements are separated by {{msg-mw|Pipe-separator}} each. Each list element is, or contains, a link.",
-       "diff": "Short form of \"differences\". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...",
+       "diff": "Short form of \"differences\". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...\n{{Identical|Diff}}",
        "hist": "Short form of \"history\". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...",
        "hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]], and in [[Special:WhatLinksHere]].\n\nSee also:\n* {{msg-mw|Show}}\n{{Identical|Hide}}",
        "show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]], and in [[Special:WhatLinksHere]].\n\nSee also:\n* {{msg-mw|Hide}}\n{{Identical|Show}}",
        "statistics-summary": "{{doc-specialpagesummary|statistics}}",
        "statistics-header-pages": "Used in [[Special:Statistics]]",
        "statistics-header-edits": "Used in [[Special:Statistics]]",
-       "statistics-header-views": "Used in [[Special:Statistics]]",
        "statistics-header-users": "Used in [[Special:Statistics]].\n{{Identical|User statistics}}",
        "statistics-header-hooks": "Header of a section on [[Special:Statistics]] containing data provided by MediaWiki extensions",
        "statistics-articles": "Used in [[Special:Statistics]].\n\nA 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For technical definition of 'content namespaces' see [[mw:Manual:Using_custom_namespaces#Content_namespaces|MediaWiki]].\n\nPossible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.\n\n{{Identical|Content page}}",
        "statistics-files": "Used in [[Special:Statistics]].\n{{Identical|Uploaded file}}",
        "statistics-edits": "Used in [[Special:Statistics]]",
        "statistics-edits-average": "Used in [[Special:Statistics]]",
-       "statistics-views-total": "Used in [[Special:Statistics]]",
-       "statistics-views-total-desc": "This message follows the message {{msg-mw|statistics-views-total}}, in [[Special:Statistics]].",
-       "statistics-views-peredit": "Used in [[Special:Statistics]]",
        "statistics-users": "{{doc-important|Do not translate \"Special:ListUsers\"}}\nUsed in [[Special:Statistics]].",
        "statistics-users-active": "Used in [[Special:Statistics]]",
        "statistics-users-active-desc": "Description shown beneath ''Active users'' in [[Special:Statistics]]. Parameters:\n* $1 - Value of <code>$wgRCMaxAge</code> in days",
-       "statistics-mostpopular": "Used in [[Special:Statistics]]",
        "statistics-footer": "{{notranslate}}",
        "pageswithprop": "{{doc-special|PagesWithProp}}\n{{Identical|Page with page property}}",
        "pageswithprop-summary": "{{doc-specialpagesummary|pageswithprop}}",
        "unusedcategories-summary": "{{doc-specialpagesummary|unusedcategories}}",
        "unusedimages": "{{doc-special|UnusedImages}}",
        "unusedimages-summary": "{{doc-specialpagesummary|unusedimages}}",
-       "popularpages": "{{doc-special|PopularPages}}",
-       "popularpages-summary": "{{doc-specialpagesummary|popularpages}}",
        "wantedcategories": "{{doc-special|WantedCategories}}",
        "wantedcategories-summary": "{{doc-specialpagesummary|wantedcategories}}",
        "wantedpages": "{{doc-special|WantedPages}}\n{{Identical|Wanted page}}",
        "pager-older-n": "This is part of the navigation message on the top and bottom of Special pages which are lists of things in date order, e.g. the User's contributions page. It is passed as the first argument of {{msg-mw|Viewprevnext}}. $1 is the number of items shown per page.",
        "suppress": "{{Identical|Oversight}}",
        "querypage-disabled": "On special pages that use expensive database queries but are not cacheable, this message is displayed when 'miser mode' is on (i.e. no expensive queries allowed).",
+       "apihelp": "{{doc-special|ApiHelp}}",
+       "apihelp-summary": "{{doc-specialpagesummary|ApiHelp}}",
+       "apihelp-no-such-module": "Used as an error message if the requested API module is not found.\n\nParameters:\n* $1 - Requested module name",
+       "apihelp-link": "{{notranslate}} Used to construct a link to [[Special:ApiHelp]]\n\nParameters:\n* $1 - module to link\n* $2 - link text",
        "booksources": "{{doc-special|BookSources}}\n\n'''This message shouldn't be changed unless it has serious mistakes.'''\n\nIt's used as the page name of the configuration page of [[Special:BookSources]]. Changing it breaks existing sites using the default version of this message.\n\nSee also:\n* {{msg-mw|Booksources|title}}\n* {{msg-mw|Booksources-text|text}}",
        "booksources-summary": "{{doc-specialpagesummary|booksources}}",
        "booksources-search-legend": "Box heading on [[Special:BookSources|book sources]] special page. The box is for searching for places where a particular book can be bought or viewed.",
        "booksources-isbn": "{{optional}}\nThis is a label that appears before a text input field on the Special:BookSources page.\n{{Identical|ISBN}}",
-       "booksources-go": "Name of button in [[Special:BookSources]]\n\n{{Identical|Go}}",
+       "booksources-search": "Search button in [[Special:BookSources]]\n\n{{Identical|Go}}",
        "booksources-text": "Used in [[Special:BookSources/1]].\n\nThis message is followed by a list of links to other sites.\n\nSee also:\n* {{msg-mw|Booksources|title}}\n* {{msg-mw|Booksources-text|text}}",
        "booksources-invalid-isbn": "This message is displayed after an invalid ISBN is entered on [[Special:Booksources]].",
        "rfcurl": "{{notranslate}}\nParameters:\n* $1 - RFC number\nSee also:\n* {{msg-mw|Pubmedurl}}",
        "pubmedurl": "{{notranslate}}\nParameters:\n* $1 - Pubmed number\nSee also:\n* {{msg-mw|Rfcurl}}",
        "specialloguserlabel": "Used in [[Special:Log]] as a label for an input field with which the log can be filtered for entries describing actions ''performed'' by the specified user.  \"Carried out\" and \"done\" are possible alternatives for \"performed\".",
        "speciallogtitlelabel": "Used in [[Special:Log]] as a label for an input field with which the log can be filtered.  This filter selects for pages or users on which a log action was performed.",
-       "log": "{{doc-special|Log}}",
+       "log": "{{doc-special|Log}}\n{{Identical|Log}}",
        "all-logs-page": "{{doc-logpage}}\nTitle of [[Special:Log]].",
        "alllogstext": "Header of [[Special:Log]]",
        "logempty": "Used as warning when there are no items to show.",
        "wlheader-enotif": "Message at the top of [[Special:Watchlist]], after {{msg-mw|watchlist-details}}. Has to be a full sentence.\n\nSee also:\n* {{msg-mw|Watchlist-options|fieldset}}\n* {{msg-mw|enotif reset|Submit button text}}",
        "wlheader-showupdated": "Message at the top of [[Special:Watchlist]], after {{msg-mw|watchlist-details}}. Has to be a full sentence.",
        "wlnote": "Used on [[Special:Watchlist]] when a maximum number of hours or days is specified.\n\nParameters:\n* $1 - the number of changes shown\n* $2 - the number of hours for which the changes are shown\n* $3 - a date alone\n* $4 - a time alone",
-       "wlshowlast": "Appears on [[Special:Watchlist]]. Parameters:\n* $1 - a choice of different numbers of hours (\"1 | 2 | 6 | 12\")\n* $2 - a choice of different numbers of days (\"1 | 3 | 7\")\n* $3 - {{msg-mw|watchlistall2}}\nClicking on your choice changes the list of changes you see (without changing the default in my preferences).",
+       "wlshowlast": "Appears on [[Special:Watchlist]]. Parameters:\n* $1 - a choice of different numbers of hours (\"1 | 2 | 6 | 12\")\n* $2 - a choice of different numbers of days (\"1 | 3 | 7\" and the maximum number of days available)\nClicking on your choice changes the list of changes you see (without changing the default in my preferences).",
        "watchlist-options": "Legend of the fieldset of [[Special:Watchlist]]\n\nSee also:\n* {{msg-mw|Watchlist-details|watchlist header}}\n* {{msg-mw|Wlheader-enotif|watchlist header}}\n* {{msg-mw|enotif reset|Submit button text}}",
        "watching": "Text displayed when clicked on the watch tab: {{msg-mw|Watch}}. It means the wiki is adding that page to your watchlist.",
        "unwatching": "Text displayed when clicked on the unwatch tab: {{msg-mw|Unwatch}}. It means the wiki is removing that page from your watchlist.",
        "protect-cantedit": "Used as error message when changing the protection levels of the page.",
        "protect-othertime": "Used on the page protection form as label for the following input field (text)\n{{Identical|Other time}}",
        "protect-othertime-op": "Used on the page protection form in the drop down menu\n{{Identical|Other time}}",
-       "protect-existing-expiry": "Shows the existing expiry time in the drop down menu of the protection form ([{{canonicalurl:User:Raymond/test|action=unprotect}} example])\n\nParameters:\n* $1 - (Unused) date and time of the existing expiry time (kept for backward compatibility purposes)\n* $2 - date of the existing expiry time\n* $3 - time of the existing expiry time",
+       "protect-existing-expiry": "Shows the existing expiry time in the drop down menu of the protection form ([{{canonicalurl:User:Raymond/test|action=unprotect}} example])\n\nParameters:\n* $1 - (Unused) date and time of the existing expiry time (kept for backward compatibility purposes)\n* $2 - date of the existing expiry time\n* $3 - time of the existing expiry time\n\nSee also:\n* {{msg-mw|protect-existing-expiry-infinity}}",
+       "protect-existing-expiry-infinity": "Shows the existing expiry time in the drop down menu of the protection form, in the special case that it is infinity\n\nSee also:\n* {{msg-mw|protect-existing-expiry}}",
        "protect-otherreason": "Shown on the page protection form as label for the following input field (text)\n{{Identical|Other/additional reason}}",
        "protect-otherreason-op": "Shown on the page protection form in the drop down menu\n{{Identical|Other reason}}",
        "protect-dropdown": "Shown on the page protection form as drop down menu for protection reasons.\n\n* <code><nowiki>* Groupname</nowiki></code> - defines a new group\n* <code><nowiki>** Reason</nowiki></code> - defines a reason in this group",
        "contribsub2": "Contributions for \"user\" (links). Parameters:\n* $1 is an IP address or a username, with a link which points to the user page (if registered user).\n* $2 is list of tool links. The list contains a link which has text {{msg-mw|Sp-contributions-talk}}.\n* $3 is a plain text username used for GENDER.\n{{Identical|For $1}}",
        "contributions-userdoesnotexist": "This message is used in [[Special:Contributions]]. It is used to tell the user that the name he searched for doesn't exists.\n\nParameters:\n* $1 - a username\n\n{{identical|userdoesnotexist}}",
        "nocontribs": "Used in [[Special:Contributions]] and [[Special:DeletedContributions]].\n\nSee examples: [[Special:Contributions/x]] and [[Special:DeletedContributions/x]].\n\nParameters:\n* $1 - (Unused) the user name",
-       "uctop": "This message is used in [[Special:Contributions]]. It is used to show that a particular edit was the last made to a page. Example: 09:57, 11 February 2008 (hist) (diff) Pagename‎ (edit summary) (current)\n{{Identical|Top}}",
+       "uctop": "This message is used in [[Special:Contributions]]. It is used to show that a particular edit was the last made to a page. Example: 09:57, 11 February 2008 (hist) (diff) Pagename‎ (edit summary) (current)\n{{Identical|Current}}",
        "month": "Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a dropdown box to select a specific month to view the edits made in that month, and the earlier months. See also {{msg-mw|year}}.",
        "year": "Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for an input box to select a specific year to view the edits made in that year, and the earlier years.\n\nSee also:\n* {{msg-mw|month}}",
        "sp-contributions-newbies": "Text of radio button on special page [[Special:Contributions]].",
        "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-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}}",
+       "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}}",
        "ipb-blocklist": "Used as link text in [[Special:Block]].\n\nThe link points to Specil:BlockList.",
        "ipb-blocklist-contribs": "Used in [[Special:Block]].\n* $1 - target username",
        "unblockip": "Used as legend for the form in [[Special:Unblock]].",
        "unblockiptext": "Used in the {{msg-mw|Unblockip}} form on [[Special:Unblock]].",
        "ipusubmit": "Used as button text on [{{canonicalurl:Special:BlockList|action=unblock}} Special:BlockList?action=unblock]. To see the message:\n* Go to [[Special:BlockList]]\n* Click \"unblock\" for any block (but you can only see \"unblock\" if you have administrator rights)\n* It is now the button below the form",
-       "unblocked": "{{doc-important|Do not translate the namespace \"User:\".}}\nParameters:\n* $1 - the IP address or username that was unblocked\nSee also:\n* {{msg-mw|Unblocked-range}}\n* {{msg-mw|Unblocked-id}}",
-       "unblocked-range": "Shown when successfully lifting a rangeblock, so do not link to contributions. Parameters:\n* $1 - the range that was unblocked\nSee also:\n* {{msg-mw|Unblocked}}\n* {{msg-mw|Unblocked-id}}",
+       "unblocked": "{{doc-important|Do not translate the namespace \"User:\".}}\nParameters:\n* $1 - the username that was unblocked\nSee also:\n* {{msg-mw|Unblocked-range}}\n* {{msg-mw|Unblocked-id}}\n*{{msg-mw|Unblocked-ip}}",
+       "unblocked-range": "Shown when successfully lifting a rangeblock, so do not link to contributions. Parameters:\n* $1 - the range that was unblocked\nSee also:\n* {{msg-mw|Unblocked}}\n* {{msg-mw|Unblocked-id}}\n*{{msg-mw|Unblocked-ip}}",
        "unblocked-id": "Used in [[Special:Unblock]]. Parameters:\n* $1 - autoblock ID\nSee also:\n* {{msg-mw|Unblocked}}\n* {{msg-mw|Unblocked-range}}",
+       "unblocked-ip": "{{doc-important|Do not translate the title \"Special:Contributions\".}}\nParameters:\n* $1 - the IP address that was unblocked\nSee also:\n* {{msg-mw|Unblocked-range}}\n* {{msg-mw|Unblocked-id}}\n*{{msg-mw|Unblocked}}",
        "blocklist": "{{doc-special|BlockList}}",
        "ipblocklist": "Title of [[Special:Ipblocklist]].",
        "ipblocklist-legend": "Used as legend of the form in [[Special:BlockList]].\n\nSee also:\n* {{msg-mw|Ipblocklist-legend}}\n* {{msg-mw|Ipblocklist-submit}}",
        "blocklist-addressblocks": "Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].\n{{Related|Blocklist-blocks}}",
        "blocklist-rangeblocks": "Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].\n\nFor an explanation of \"range blocks\", see [[mw:Help:Range_blocks]]\n{{Related|Blocklist-blocks}}",
        "blocklist-timestamp": "This is a column header for dates and times in the table on the page [[Special:BlockList]].\n{{Identical|Timestamp}}",
-       "blocklist-target": "The table header for the column containing the block targets, that is user names or IP-addresses linked to their respective user pages, in the table on the page [[Special:BlockList]].",
+       "blocklist-target": "The table header for the column containing the block targets, that is user names or IP-addresses linked to their respective user pages, in the table on the page [[Special:BlockList]].\n{{Identical|Target}}",
        "blocklist-expiry": "This is a column header in the table on the page [[Special:BlockList]].\n{{Identical|Expire}}",
        "blocklist-by": "This is a column header in the table on the page [[Special:BlockList]].",
        "blocklist-params": "This is a column header in the table on the page [[Special:BlockList]].",
        "lockfilenotwritable": "'No longer needed' on wikipedia.",
        "databasenotlocked": "Used as error message in [[Special:UnlockDB]].\nThe title of this error message is {{msg-mw|Lockdb}}.\n\nSee also:\n* {{msg-mw|Lockdb|title}}\n* {{msg-mw|Databasenotlocked|message}}",
        "lockedbyandtime": "Used as part of the message when a database is locked through [[Special:LockDB]]. Parameters:\n* $1 is the user that locked the database.\n* $2 is the date on which the lock was made\n* $3 is the time at which the lock was made",
-       "move-page": "Used as page title of [[Special:MovePage]] to move pages.\n\nSee example: [[Special:MovePage/Portal:En]].\n\nParameters:\n* $1 - the name of the page to be moved (without link)",
+       "move-page": "Used as page title of [[Special:MovePage]] to move pages.\n\nSee example: [[Special:MovePage/Portal:En]].\n\nParameters:\n* $1 - the name of the page to be moved (without link)\n{{Identical|Move}}",
        "movepage-summary": "{{doc-specialpagesummary|movepage}}",
        "move-page-legend": "Legend of the fieldset around the input form of [[Special:MovePage/testpage]].\n\nSee also:\n* {{msg-mw|movearticle|label for old title}}\n* {{msg-mw|newtitle|label for new title}}\n* {{msg-mw|movereason|label for textarea}}\n* {{msg-mw|movetalk|label for checkbox}}\n* {{msg-mw|move-leave-redirect|label for checkbox}}\n* {{msg-mw|fix-double-redirects|label for checkbox}}\n* {{msg-mw|move-subpages|label for checkbox}}\n* {{msg-mw|move-talk-subpages|label for checkbox}}\n* {{msg-mw|move-watch|label for checkbox}}\n{{Identical|Move page}}",
        "movepagetext": "Introduction shown when moving a page ([[Special:MovePage]]).\n\nSpecial pages mentioned: {{msg-mw|Doubleredirects}}, {{msg-mw|Brokenredirects}}\n\nSee also:\n* {{msg-mw|Movepagetext-noredirectfixer}}",
        "accesskey-pt-mycontris": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Mycontris}}\n* {{msg-mw|Accesskey-pt-mycontris}}\n* {{msg-mw|Tooltip-pt-mycontris}}",
        "accesskey-pt-login": "{{doc-accesskey}}",
        "accesskey-pt-logout": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Logout}}\n* {{msg-mw|Accesskey-pt-logout}}\n* {{msg-mw|Tooltip-pt-logout}}",
+       "accesskey-pt-createaccount": "{{doc-accesskey}}",
        "accesskey-ca-talk": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Talk}}\n* {{msg-mw|Accesskey-ca-talk}}\n* {{msg-mw|Tooltip-ca-talk}}",
        "accesskey-ca-edit": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Edit}}\n* {{msg-mw|Accesskey-ca-edit}}\n* {{msg-mw|Tooltip-ca-edit}}",
        "accesskey-ca-addsection": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Addsection}}\n* {{msg-mw|Accesskey-ca-addsection}}\n* {{msg-mw|Tooltip-ca-addsection}}",
        "accesskey-feed-atom": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Feed-atom}}\n* {{msg-mw|Accesskey-feed-atom}}\n* {{msg-mw|Tooltip-feed-atom}}",
        "accesskey-t-contributions": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Contributions}}\n* {{msg-mw|Accesskey-t-contributions}}\n* {{msg-mw|Tooltip-t-contributions}}",
        "accesskey-t-emailuser": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Emailuser}}\n* {{msg-mw|Accesskey-t-emailuser}}\n* {{msg-mw|Tooltip-t-emailuser}}",
+       "accesskey-t-info": "{{doc-accesskey}}",
        "accesskey-t-permalink": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Permalink}}\n* {{msg-mw|Accesskey-t-permalink}}\n* {{msg-mw|Tooltip-t-permalink}}",
        "accesskey-t-print": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Printableversion}}\n* {{msg-mw|Accesskey-t-print}}\n* {{msg-mw|Tooltip-t-print}}",
        "accesskey-t-upload": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Upload}}\n* {{msg-mw|Accesskey-t-upload}}\n* {{msg-mw|Tooltip-t-upload}}",
        "tooltip-pt-preferences": "Tooltip shown when hovering over the {{msg-mw|Mypreferences}} link in your personal toolbox (upper right side).\n\nSee also:\n* {{msg-mw|Mypreferences}}\n* {{msg-mw|Accesskey-pt-preferences}}\n* {{msg-mw|Tooltip-pt-preferences}}\n{{Identical|Preferences}}",
        "tooltip-pt-watchlist": "Tooltip shown when hovering over the {{msg-mw|Mywatchlist}} link in your personal toolbox (upper right side).\n\nSee also:\n* {{msg-mw|Mywatchlist}}\n* {{msg-mw|Accesskey-pt-watchlist}}\n* {{msg-mw|Tooltip-pt-watchlist}}",
        "tooltip-pt-mycontris": "Tooltip shown when hovering over the {{msg-mw|Mycontris}} link in your personal toolbox (upper right side).\n\nSee also:\n* {{msg-mw|Mycontris}}\n* {{msg-mw|Accesskey-pt-mycontris}}\n* {{msg-mw|Tooltip-pt-mycontris}}",
-       "tooltip-pt-login": "Tooltip shown when hovering over the link 'Log in / create account' in the upper right corner show on all pages while not logged in.",
+       "tooltip-pt-login": "Tooltip shown when hovering over the link 'Log in' in the upper right corner show on all pages while not logged in.",
        "tooltip-pt-logout": "Tooltip shown when hovering over the {{msg-mw|Logout}} link in your personal toolbox (upper right side).\n\nSee also:\n* {{msg-mw|Logout}}\n* {{msg-mw|Accesskey-pt-logout}}\n* {{msg-mw|Tooltip-pt-logout}}\n{{Identical|Log out}}",
+       "tooltip-pt-createaccount": "Tooltip shown when hovering over the link 'Create account' in the upper right corner show on all pages while not logged in.",
        "tooltip-ca-talk": "Tooltip shown when hovering over the {{msg-mw|Talk}} tab.\n\nA 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For a technical definition of 'content namespaces' see [[mw:Manual:Using_custom_namespaces#Content_namespaces|MediaWiki]].\n\nPossible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.\n\nSee also:\n* {{msg-mw|Talk}}\n* {{msg-mw|Accesskey-ca-talk}}\n* {{msg-mw|Tooltip-ca-talk}}\n{{Identical|Content page}}",
        "tooltip-ca-edit": "The tooltip when hovering over the {{msg-mw|Edit}} tab.\n\nSee also:\n* {{msg-mw|Edit}}\n* {{msg-mw|Accesskey-ca-edit}}\n* {{msg-mw|Tooltip-ca-edit}}",
        "tooltip-ca-addsection": "Tooltip shown when hovering over the \"addsection\" tab (shown on talk pages).\n\nSee also:\n* {{msg-mw|Addsection}}\n* {{msg-mw|Accesskey-ca-addsection}}\n* {{msg-mw|Tooltip-ca-addsection}}",
        "tooltip-ca-move": "See also:\n* {{msg-mw|Move}}\n* {{msg-mw|Accesskey-ca-move}}\n* {{msg-mw|Tooltip-ca-move}}\n{{Identical|Move this page}}",
        "tooltip-ca-watch": "See also:\n* {{msg-mw|Watch}}\n* {{msg-mw|Accesskey-ca-watch}}\n* {{msg-mw|Tooltip-ca-watch}}\n{{Identical|Add this page to your watchlist}}",
        "tooltip-ca-unwatch": "Tooltip shown when hovering over the {{msg-mw|Unwatch}} tab.\n\nSee also:\n* {{msg-mw|Unwatch}}\n* {{msg-mw|Accesskey-ca-unwatch}}\n* {{msg-mw|Tooltip-ca-unwatch}}",
-       "tooltip-search": "The tooltip when hovering over the search menu.\n\nSee also:\n* {{msg-mw|Search}}\n* {{msg-mw|Accesskey-search}}\n* {{msg-mw|Tooltip-search}}",
+       "tooltip-search": "The tooltip when hovering over the search menu.\n\nSee also:\n* {{msg-mw|Search}}\n* {{msg-mw|Accesskey-search}}\n* {{msg-mw|Tooltip-search}}\n{{Identical|Search}}",
        "tooltip-search-go": "This is the text of the tooltip displayed when hovering the mouse over the {{msg-mw|Go}} button next to the search box.\n\nSee also:\n* {{msg-mw|Go}}\n* {{msg-mw|Accesskey-search-go}}\n* {{msg-mw|Tooltip-search-go}}",
        "tooltip-search-fulltext": "This is the text of the tooltip displayed when hovering the mouse over the {{msg-mw|Search}} button under the search box.\n\nSee also:\n* {{msg-mw|Search}}\n* {{msg-mw|Accesskey-search-fulltext}}\n* {{msg-mw|Tooltip-search-fulltext}}",
        "tooltip-p-logo": "Tool tip shown when hovering the mouse over the logo that links to [[Main Page]].\n\nSee also:\n* {{msg-mw|Accesskey-p-logo}}\n* {{msg-mw|Tooltip-p-logo}}\n{{Identical|Visit the main page}}",
        "tooltip-feed-atom": "Used as tooltip for Atom feed link.\n\nSee also:\n* {{msg-mw|Feed-atom}}\n* {{msg-mw|Accesskey-feed-atom}}\n* {{msg-mw|Tooltip-feed-atom}}",
        "tooltip-t-contributions": "Tooltip shown when hovering over {{msg-mw|Contributions}} in the toolbox.\n\nSee also:\n* {{msg-mw|Contributions}}\n* {{msg-mw|Accesskey-t-contributions}}\n* {{msg-mw|Tooltip-t-contributions}}",
        "tooltip-t-emailuser": "Tooltip shown when hovering over the {{msg-mw|Emailuser}} link in the toolbox (sidebar, below).\n\nSee also:\n* {{msg-mw|Emailuser}}\n* {{msg-mw|Accesskey-t-emailuser}}\n* {{msg-mw|Tooltip-t-emailuser}}",
+       "tooltip-t-info": "Tooltip shown when hovering over the {{msg-mw|pageinfo-toolboxlink}} link in the toolbox (sidebar, below).",
        "tooltip-t-upload": "Tooltip shown when hovering over the link to upload files shown in the side bar menu on all pages.\n\nSee also:\n* {{msg-mw|Upload}}\n* {{msg-mw|Accesskey-t-upload}}\n* {{msg-mw|Tooltip-t-upload}}\n{{Identical|Upload file}}",
        "tooltip-t-specialpages": "The tooltip when hovering over the link {{msg-mw|Specialpages}} going to a list of all special pages available in the wiki.\n\nSee also:\n* {{msg-mw|Specialpages}}\n* {{msg-mw|Accesskey-t-specialpages}}\n* {{msg-mw|Tooltip-t-specialpages}}",
        "tooltip-t-print": "Tooltip shown when hovering over the link to printable version shown in the side bar menu on all pages.\n\nSee also:\n* {{msg-mw|Printableversion}}\n* {{msg-mw|Accesskey-t-print}}\n* {{msg-mw|Tooltip-t-print}}",
        "pageinfo-language": "Language in which the page content is written.",
        "pageinfo-content-model": "The model in which the page content is written.\n\nUsed as label at [{{fullurl:Main Page|action=info}} action=info]. Followed by one of the following messages:\n* {{msg-mw|Content-model-wikitext}}\n* {{msg-mw|Content-model-javascript}}\n* {{msg-mw|Content-model-css}}\n* {{msg-mw|Content-model-text}}",
        "pageinfo-robot-policy": "The search engine status of the page.\n\nUsed as label. Followed by any one of the following messages:\n*{{msg-mw|Pageinfo-robot-index}}\n*{{msg-mw|Pageinfo-robot-noindex}}",
-       "pageinfo-robot-index": "An indication that the page is indexable by search engines, that is listed in their search results.\n\nPreceded by the label {{msg-mw|Pageinfo-robot-policy}}.",
+       "pageinfo-robot-index": "An indication that the page is indexable by search engines, that is listed in their search results.\n\nPreceded by the label {{msg-mw|Pageinfo-robot-policy}}.\n{{Identical|Allowed}}",
        "pageinfo-robot-noindex": "An indication that the page is not indexable (that is, is not listed on the results page of a search engine).\n\nPreceded by the label {{msg-mw|Pageinfo-robot-policy}}.",
-       "pageinfo-views": "The number of times the page has been viewed.",
        "pageinfo-watchers": "Header of the row in the first table of the info action.",
        "pageinfo-few-watchers": "Message displayed when there are fewer than $wgUnwatchedPageThreshold watchers. $1 is the value of $wgUnwatchedPageThreshold.",
        "pageinfo-redirects-name": "Header of the row in the first table of the info action.\n\nFollowed by {{msg-mw|Pageinfo-redirects-value}}.\n\nUsed as link text. The link points to \"{{int:Whatlinkshere-title}}\" page ([[Special:WhatLinksHere]]).\n\nSee example: [{{canonicalurl:Main page|action=info}} Main page?action=info]",
        "show-big-image-preview": "Message shown under the image description page thumbnail.\n\nCan be followed by {{msg-mw|Show-big-image-other}}.\n\nParameters:\n* $1 - a link which points to the thumbnail. Its text is {{msg-mw|Show-big-image-size}}",
        "show-big-image-other": "Message shown under the image description page thumbnail.\n\nPreceded by {{msg-mw|Show-big-image-preview}}, if the image is in high resolution.\n\nParameters:\n* $1 - list of resolutions (pipe-separated)\n* $2 - number of resolutions",
        "show-big-image-size": "Parameters:\n* $1 - the width of the image(s) in pixels\n* $2 - the height of the image(s) in pixels",
-       "file-info-gif-looped": "Part of the information provided about a [[w:Gif|.gif file]] on its file description page. Looped means repeating in the context of an animated gif. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop. For example of message in use see [[:File:Mouse10.gif]].",
-       "file-info-gif-frames": "Part of the information provided about a [[w:Gif|.gif file]] on its file description page.\n\nParameters:\n* $1 - number of frames",
-       "file-info-png-looped": "Part of the information provided about a [[w:APNG|.apng file]] on its file description page. Looped means repeating indefinetly in the context of an animated png. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop.",
+       "file-info-gif-looped": "Part of the information provided about a [[w:Gif|.gif file]] on its file description page. Looped means repeating in the context of an animated gif. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop. For example of message in use see [[:File:Mouse10.gif]].\n{{Identical|Looped}}",
+       "file-info-gif-frames": "Part of the information provided about a [[w:Gif|.gif file]] on its file description page.\n\nParameters:\n* $1 - number of frames\n{{Identical|Frame}}",
+       "file-info-png-looped": "Part of the information provided about a [[w:APNG|.apng file]] on its file description page. Looped means repeating indefinetly in the context of an animated png. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop.\n{{Identical|Looped}}",
        "file-info-png-repeat": "Part of the information provided about a [[w:APNG|.apng file]] on its file description page. The sequence of images is repeating a limited amount of time. It is a sequence of images, each displayed after the other, and the first one displayed after the last, for $1 times.",
-       "file-info-png-frames": "Part of the information provided about a [[w:APNG|.apng file]] on its file description page.\n\nThe variable $1 is the number of individual frames in an animated gif file.\n\nFor example of message in use see [[:File:Mouse10.gif]].",
+       "file-info-png-frames": "Part of the information provided about a [[w:APNG|.apng file]] on its file description page.\n\nThe variable $1 is the number of individual frames in an animated gif file.\n\nFor example of message in use see [[:File:Mouse10.gif]].\n{{Identical|Frame}}",
        "file-no-thumb-animation": "We cannot animate thumbnails of this file.\n\nThis notice is shown on the image description page on animated svg files just below {{msg-mw|File-info-size}}.\n\nThis message may be overridden by a more specific message:\n* {{msg-mw|File-no-thumb-animation-gif}}.",
        "file-no-thumb-animation-gif": "Cannot animate thumbnails of this gif file, because it has too big a resolution. The cut off resolution can vary between wikis ([[mw:manual:$wgMaxAnimatedGifArea|$wgMaxAnimatedGifArea]]). Note that resolution is calculated as width times height times number of frames. See {{msg-mw|file-no-thumb-animation}}.",
        "newimages": "Page title of [[Special:NewImages]].",
        "exif-urgency-low": "Parameters:\n* $1 - numeric priority (6-8 for low)\n{{Related|Exif-urgency}}",
        "exif-urgency-high": "Parameters:\n* $1 - numeric priority (1-4 for high)\n{{Related|Exif-urgency}}",
        "exif-urgency-other": "Parameters:\n* $1 - numeric priority. Most specs define 0 and 9 to either be reserved or not allowed. However the exiftool documentation defines 0 to be reserved and 9 to be user-defined priority.\n{{Related|Exif-urgency}}",
-       "watchlistall2": "Appears on [[Special:Watchlist]].\n\nUsed as <code>$3</code> in the message {{msg-mw|Wlshowlast}}.\n{{Identical|All}}",
        "namespacesall": "In special page [[Special:WhatLinksHere]]. Drop-down box option for namespace.\n\n{{Identical|All}}",
        "monthsall": "Used in a drop-down box on [[Special:Contributions]] as an option for \"all months\". See also {{msg-mw|Month}}.\n{{Identical|All}}",
        "confirmemail": "Title of [[Special:ConfirmEmail]] page.",
        "unknown_extension_tag": "This is an error shown when you use an unknown extension tag name.\n\nThis feature allows tags like <code><nowiki><pre></nowiki></code> to be called with a parser like <code><nowiki>{{#tag:pre}}</nowiki></code>.\n\nParameters:\n* $1 - the unknown extension tag name",
        "duplicate-defaultsort": "See definition of [[w:Sorting|sort key]] on Wikipedia. Parameters:\n* $1 - old default sort key\n* $2 - new default sort key",
        "duplicate-displaytitle": "Warning shown when a page has its display title set multiple times. Parameters:\n* $1 - old display title\n* $2 - new display title",
+       "invalid-indicator-name": "Warning shown when the [https://www.mediawiki.org/wiki/Help:Page_status_indicators &lt;indicator name=\"''unique-identifier''\">''content''&lt;/indicator>] parser tag is used incorrectly.",
        "version": "{{doc-special|Version}}\n{{Identical|Version}}",
        "version-summary": "{{doc-specialpagesummary|version}}",
        "version-extensions": "Header on [[Special:Version]].",
        "version-credits-title": "Page title for an about/credits page for a MediaWiki extension.\n\nUsed as heading in credits page. e.g. [[Special:Version/Credits]] and [[Special:Version/Credits/UniversalLanguageSelector]]\n\nParameters:\n* $1 - the name of the extension",
        "version-credits-not-found": "Descriptive error used when detailed about/credits for an extension are not available.\n\nSee example: [[Special:Version/Credits/Foo]]",
        "version-poweredby-credits": "Message shown on [[Special:Version]]. Parameters:\n* $1 - the current year\n* $2 - a list of selected MediaWiki authors",
-       "version-poweredby-others": "Used at the end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]]. First, there's a long list of selected MediaWiki authors, then a comma and then this translation, which is supposed to credit the many other people than developer helping with MediaWiki.",
+       "version-poweredby-others": "Used at the end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]]. First, there's a long list of selected MediaWiki authors, then a comma and then this translation, which is supposed to credit the many other people than developer helping with MediaWiki.\n{{Identical|Other}}",
        "version-poweredby-translators": "Used as label for a link to [[Translating:MediaWiki/Credits]].\n\nPreceded by {{msg-mw|version-poweredby-others}} and {{msg-mw|and}}.\n\nUsed at the end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]].",
        "version-credits-summary": "Summary of the [[Special:Version/Credits]] sub page, which lists all developers etc. who contributed to MediaWiki. Shown at the top.",
        "version-license-info": "[[wikipedia:GNU GPL|GNU GPL]] notice shown at [[Special:Version]]. See //www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html for available translations.",
        "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-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.",
        "logentry-move-move_redir": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
        "revdelete-unhid": "This message is used as <code>$1</code>:\n* in {{msg-mw|Revdelete-log-message}} when unhiding revisions\n* in {{msg-mw|Logdelete-log-message}} when unhiding information in the log entry about unhiding revisions\nParameters:\n* $1 - any one of the following:\n** {{msg-mw|Revdelete-content}} (when unhiding the page content)\n** {{msg-mw|Revdelete-summary}} (when unhiding the edit summary)\n** {{msg-mw|Revdelete-uname}} (when unhiding the user name)\n** a combination of these three messages\nSee also:\n* {{msg-mw|Revdelete-hid}}",
        "revdelete-log-message": "This log message is used together with {{msg-mw|revdelete-logentry}} in the deletion or suppression logs when changing visibility restrictions for page revisions.\n\nParameters:\n* $1 - any one of the following\n** {{msg-mw|revdelete-hid}} (when hiding data)\n** {{msg-mw|revdelete-unhid}} (when unhiding data)\n** {{msg-mw|revdelete-restricted}} (when applying restrictions for sysops)\n** {{msg-mw|revdelete-unrestricted}} (when removing restrictions for sysops)\n** a combination of those messages\n* $2 - the number of revisions for which the restrictions are changed\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.\n\nSee also:\n* {{msg-mw|Logdelete-log-message}}",
        "logdelete-log-message": "This log message appears in brackets after the message {{msg-mw|logdelete-logentry}} in the deletion or suppression logs when changing the visibility of a log entry for events. For a brief description of the process of changing the visibility of events and their log entries see this [http://www.mediawiki.org/wiki/RevisionDelete mediawiki explanation].\n\nParameters:\n* $1 - any one of the following\n** {{msg-mw|revdelete-hid}} (when hiding data)\n** {{msg-mw|revdelete-unhid}} (when unhiding data)\n** {{msg-mw|revdelete-restricted}} (when applying restrictions for sysops)\n** {{msg-mw|revdelete-unrestricted}} (when removing restrictions for sysops)\n** a combination of those messages\n* $2 - the number of events for which the restrictions are changed\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.\n\nSee also:\n* {{msg-mw|Revdelete-log-message}}",
-       "deletedarticle": "This is a ''logentry'' message. Parameters:\n* $1 - deleted page name",
+       "deletedarticle": "This is a ''logentry'' message. Parameters:\n* $1 - deleted page name\n{{Identical|Deleted}}",
        "suppressedarticle": "Part of a [[mw:Manual:RevisionDelete|RevisionDelete]] log entry. Parameters:\n* $1 - suppressed page name\n{{Identical|Suppressed}}",
        "undeletedarticle": "This is a ''logentry'' message. Parameters:\n* $1 - restored (undeleted) page name",
        "patrol-log-line": "Text of notes on entries in the [http://translatewiki.net/w/i.php?title=Special%3ALog&type=patrol&user=&page=&year=&month=-1 patrol log].\nParameters:\n* $1 - the link whose text is {{msg-mw|patrol-log-diff}}\n* $2 - the name of the page\n* $3 - appears to be {{msg-mw|Patrol-log-auto}} (at least sometimes)\n\nThe message appears after the name of the patroller.",
        "api-error-stashfailed": "API error message that can be used for client side localisation of API errors.",
        "api-error-publishfailed": "API error message that can be used for client side localisation of API errors.",
        "api-error-stasherror": "API error message that can be used for client side localisation of API errors.",
+       "api-error-stashedfilenotfound": "API error message that can be used for client side localisation of API errors.",
+       "api-error-stashpathinvalid": "API error message that can be used for client side localisation of API errors.",
+       "api-error-stashfilestorage": "API error message that can be used for client side localisation of API errors.",
+       "api-error-stashzerolength": "API error message that can be used for client side localisation of API errors.",
+       "api-error-stashnotloggedin": "API error message that can be used for client side localisation of API errors.",
+       "api-error-stashwrongowner": "API error message that can be used for client side localisation of API errors.",
+       "api-error-stashnosuchfilekey": "API error message that can be used for client side localisation of API errors.",
        "api-error-timeout": "API error message that can be used for client side localisation of API errors.",
        "api-error-unclassified": "API error message that can be used for client side localisation of API errors.",
        "api-error-unknown-code": "API error message that can be used for client side localisation of API errors.\n\nParameters:\n* $1 - may contain more error details\n{{Identical|Unknown error}}",
        "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-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}}"
+       "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}}",
+       "mediastatistics": "{{doc-special|MediaStatistics}}",
+       "mediastatistics-summary": "Used to explain that this page only does statistics over current versions of files. \"Old\" versions of files and deleted files are not counted.",
+       "mediastatistics-nfiles": "{{optional}}\nEntry in table on [[Special:MediaStatistics]] that gives total number of files. $1 - number of files. $2 - percentage of total files that is this type (percent will be formatted to have about 3 interesting digits. e.g. 0.121 or 10.2)",
+       "mediastatistics-nbytes": "Combined space of this type of file. Bytes and \"human units\" are shown so that users can better get a sense of magnitude when making comparisons.\n*$1 - total space in bytes.\n*$2 - total space in \"human units\" (i.e. KB, MB, GB, etc)\n*$3 - What percentage of the space all uploads take up does this file take up.",
+       "mediastatistics-table-mimetype": "Header for table on Special:MediaStatistics. Column that lists MIME types (The values in this column will look like 'image/jpeg', and be linked to Special:MIMESearch).",
+       "mediastatistics-table-extensions": "Header for column in tables on [[Special:MediaStatistics]] that lists possible extensions for a given file type. (The values in this column will be a comma separated list of file extensions, such as '.webm' or '.png, .apng').",
+       "mediastatistics-table-count": "Column header on Special:MediaStatistics for the number of files column. The headers in this column use {{msg-mw|mediastatistics-nfiles}}.",
+       "mediastatistics-table-totalbytes": "Column header on Special:MediaStatistics for the number of bytes that this file type takes up. Values for this column use {{msg-mw|mediastatistics-nbytes}}",
+       "mediastatistics-header-unknown": "Header on Special:MediaStatistics for file types that are in the unknown category\n{{Identical|Unknown}}",
+       "mediastatistics-header-bitmap": "Header on [[Special:MediaStatistics]] for file types that are in the bitmap category. This includes raster graphics like PNG, JPEG, XCF, GIF etc. Vector graphics like SVG are considered \"drawings\" ({{msg-mw|mediastatistics-header-drawing}})",
+       "mediastatistics-header-drawing": "Header on [[Special:MediaStatistics]] for file types that are in the drawing category. This includes vector images like SVGs. Some chemical markup formats may also be included here.",
+       "mediastatistics-header-audio": "Header on [[Special:MediaStatistics]] for file types that are in the audio category\n{{Identical|Audio}}",
+       "mediastatistics-header-video": "Header on [[Special:MediaStatistics]] for file types that are in the video category\n{{Identical|Video}}",
+       "mediastatistics-header-multimedia": "Header on [[Special:MediaStatistics]] for file types that are in the multimedia category. This does not include plain audio or video files, but more complex multimedia such as flash or vrml. This especially includes scripted multimedia. Ogg files in which MediaWiki cannot determine if it is an audio or video file (or something else) are included here.",
+       "mediastatistics-header-office": "Header on [[Special:MediaStatistics]] for file types that are in the Office category. This includes PDFs, OpenDocument files, Microsoft Word files, etc.",
+       "mediastatistics-header-text": "Header on [[Special:MediaStatistics]] for file types that are in the text category. This includes simple text formats, including plain text formats, json, csv, and xml. Source code of compiled programming languages may be included here in the future, but isn't currently.",
+       "mediastatistics-header-executable": "Header on [[Special:MediaStatistics]] for file types that are in the executable category. This includes things like source files for interpreted programming language (Shell scripts, javascript, etc).",
+       "mediastatistics-header-archive": "Header on [[Special:MediaStatistics]] for file types that are in the archive category. Includes things like tar, zip, gzip etc.",
+       "json-warn-trailing-comma": "A warning message notifying that JSON text was automatically corrected by removing erroneous commas.\n\nParameters:\n* $1 - number of commas that were removed\n{{Related|Json-error}}",
+       "json-error-unknown": "User error message when there’s an unknown error.\n\nThis error is shown if we received an unexpected value from PHP. See http://php.net/manual/en/function.json-last-error.php\n\nParameters:\n* $1 - integer error code\n{{Related|Json-error}}",
+       "json-error-depth": "User error message when the maximum stack depth is exceeded.\nSee http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
+       "json-error-state-mismatch": "User error message when underflow or the modes mismatch.\n\n'''Underflow''': A data-processing error arising when the absolute value of a computed quantity is smaller than the limits of precision of the computing device, retaining at least one significant digit.\n\nSee http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
+       "json-error-ctrl-char": "User error message when an unexpected control character has been found.\nSee http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
+       "json-error-syntax": "User error message when there is a syntax error; a malformed JSON.\nSee http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}\n{{Identical|Syntax error}}",
+       "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}}"
 }
index b55a995..32a6b1c 100644 (file)
        "passwordreset-emailsent-capture": "Yaykuna rimata kutichina e-chaskiqa kachasqañam, kay qatiqpi rikunki.",
        "passwordreset-emailerror-capture": "{{GENDER:$2|}}Yaykuna rimata kutichina e-chaskiqa rurasqa karqan, imatachus kay qatiqpi rikunki, ichataq kachasqa kaptin pantasqam tukurqan: $1",
        "changeemail": "E-chaski imamaytata wakinchay",
-       "changeemail-header": "Rakiqunap e-chaski imamaytanta wakinchay",
        "changeemail-text": "Kay hunt'ana p'anqata hunt'ay e-chaski imamaytaykita hukchanaykipaq. Yaykuna rimaykita yaykuchinaykim tiyan kay hukchanata takyachinaykipaq.",
        "changeemail-no-info": "Yaykunaykim tiyan kay p'anqata chiqalla aypanaykipaq.",
        "changeemail-oldemail": "Kunan kachkaq e-chaski imamayta:",
        "changeemail-none": "(mana ima)",
        "changeemail-password": "{{SITENAME}} yaykuna rimayki:",
        "changeemail-submit": "E-chaskita wakinchay",
-       "changeemail-cancel": "Ama niy",
        "changeemail-throttled": "Nisyu kutiñam yaykuykacharqunki.\nAma hina kaspa, $1 suyay manaraq musuqmanta yaykuykachaspayki.",
        "resettokens": "Llawikunata kutichiy",
        "resettokens-no-tokens": "Manam kanchu kutichina llawikuna.",
        "mergehistory-same-destination": "Qallarinapas taripanapas p'anqakunaqa manam kaqlla kayta atinchu",
        "mergehistory-reason": "Kayrayku:",
        "mergelog": "Huñuy hallch'a",
-       "pagemerge-logentry": "[[$1]]-ta [[$2]]-man huñusqa (llamk'apusqakuna $3-kama)",
        "revertmerge": "Huñusqata kutichiy",
        "mergelogpagetext": "Kay qatiqpiqa aswan ñaqha huk p'anqa wiñay kawsaymanta huk p'anqa wiñay kawsayman huñusqakunatam rikunki.",
        "history-title": "«$1» p’anqata hukchasqakunap wiñay kawsaynin",
        "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.",
-       "showingresultsheader": "{{PLURAL:$5|Taripasqa: '''$1''', '''$3'''-manta|Taripasqa: '''$1 - $2''', '''$3'''-manta}}, '''$4'''-paq",
        "search-nonefound": "Maskaypaq kay hina kachun nisqakamaqa manam kanchu taripasqakuna.",
        "powersearch-legend": "Ñawparikusqa maskay",
        "powersearch-ns": "Kay suti k'itikunapi maskay:",
        "randomincategory": "Katiguriyapi kikinmanta p'anqa",
        "randomincategory-invalidcategory": "\"$1\" nisqaqa katiguriyapaq manam allin sutinchu.",
        "randomincategory-nopages": "[[:Category:$1|$1]] katiguriyapiqa manam p'anqakuna kanchu.",
-       "randomincategory-selectcategory": "Katiguriyamanta kikinmanta p'anqata chaskiy: $1 $2.",
-       "randomincategory-selectcategory-submit": "Riy",
        "randomredirect": "Mayninpi pusapuna p'anqa",
        "randomredirect-nopages": "Manam kanchu \"$1\" nisqa suti k'itipi pusapuna p'anqakuna.",
        "statistics": "Ranuy (kanchachani)",
        "statistics-header-pages": "P'anqakunamanta ranuy (kanchachani)",
        "statistics-header-edits": "Llamk'apuymanta ranuy (kanchachani)",
-       "statistics-header-views": "Qhawaymanta ranuy (kanchachani)",
        "statistics-header-users": "Ruraqmanta ranuy",
        "statistics-header-hooks": "Wakin ranuy (kanchachani)",
        "statistics-articles": "Samiq p'anqakuna",
        "statistics-files": "Churkusqa willañiqikuna",
        "statistics-edits": "P'anqa llamk'apusqakuna {{SITENAME}}-pa paqarisqanmanta",
        "statistics-edits-average": "Kuskanchaku llamk'apusqakuna p'anqaman",
-       "statistics-views-total": "Tukuy qhawasqakuna",
-       "statistics-views-total-desc": "Mana kaq p'anqakunataqa sapaq p'anqakunatapas kaypi manam rikunki",
-       "statistics-views-peredit": "Qhawasqakuna llamk'apusqaman",
        "statistics-users": "Rakiqunayuq [[Special:ListUsers|ruraqkuna]]",
        "statistics-users-active": "Llamk'achkaq ruraqkuna",
        "statistics-users-active-desc": "Ñaqha {{PLURAL:$1|p'unchawpi|$1 p'unchawkunapi}} llamk'apuq ruraqkuna",
-       "statistics-mostpopular": "Lliwmanta astawan rikusqa p'anqakuna",
        "pageswithprop": "Kaqninniyuq p'anqakuna",
        "pageswithprop-legend": "Kaqninniyuq p'anqakuna",
        "pageswithprop-text": "Kay p'anqapiqa sapaq kaqninniyuq p'anqakunatam sutisuyupi rikunki.",
        "uncategorizedtemplates": "Katiguriyannaq plantillakuna",
        "unusedcategories": "Mana llamk'achisqa katiguriyakuna",
        "unusedimages": "Mana llamk'achisqa rikchakuna",
-       "popularpages": "Munasqa p'anqakuna",
        "wantedcategories": "Muchusqa katiguriyakuna",
        "wantedpages": "Muchusqa p'anqakuna",
        "wantedpages-badtitle": "Mana allin p'anqa suti kay taripay tawqapi: $1",
        "querypage-disabled": "Kay sapaq p'anqamanqa ama nisqam allinta llamk'anapaq.",
        "booksources": "Liwrukunapi pukyukuna",
        "booksources-search-legend": "Liwrukunapi pukyukunata maskay",
-       "booksources-go": "Riy",
        "booksources-text": "Kay qatiqpiqa huk llika tiyaykunaman t'inkikunatam rikunki, musuq icha mawk'a liwrukunata qhatuq, maskasqayki liwrukunamantachá astawan willaq:",
        "booksources-invalid-isbn": "ISBN huchhaqa manachá allinchu; pantasqata llanchiriy qallariy qillqamanta iskaychamuspa.",
        "specialloguserlabel": "Rurapuq:",
        "wlheader-enotif": "E-chaskimanta musyachinaman arí nisqañam.",
        "wlheader-showupdated": "Qayna watukamusqaykimantapacha hukchasqa p'anqakunataqa '''yanasapa''' nisqapim rikunki.",
        "wlnote": "Kay qatiqpiqa {{PLURAL:$1|qhipaq hukchasqam|'''$1''' qhipaq hukchasqakunam}} qhipaq {{PLURAL:$2|urapim|'''$2''' urakunapim}}, musuqchasqa $3, $4.",
-       "wlshowlast": "$1 ura, $2 p'unchaw $3-mantapacha hukchasqakunata rikuchiy",
+       "wlshowlast": "$1 ura, $2 p'unchaw -mantapacha hukchasqakunata rikuchiy",
        "watchlist-options": "Watiqana sutisuyupaq allinkachinakuna",
        "watching": "Watiqasqakunaman yapaspa...",
        "unwatching": "Watiqasqakunamanta qulluspa...",
        "import": "P'anqakunata hawamanta chaskiy",
        "importinterwiki": "Huk wikimanta p'anqakunata chaskiy",
        "import-interwiki-text": "Huk wikita p'anqap sutintapas akllay hawamanta chaskinapaq.\nLlamk'apusqap pachankunaqa ruraqpa sutinkunapas kakuspa hallch'asqam kanqa.\nTukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hallch'api]] hallch'asqam kanqa.",
-       "import-interwiki-source": "Qallariy wiki icha p'anqa:",
        "import-interwiki-history": "Kay p'anqapaq tukuy wiñay kawsaynintinta iskaychay",
        "import-interwiki-templates": "Tukuy plantillakunapas",
        "import-interwiki-submit": "Hawamanta chaskiy",
        "pageinfo-robot-policy": "Maskana kuyuchinam yuyarinachan",
        "pageinfo-robot-index": "Saqillasqa",
        "pageinfo-robot-noindex": "Mana saqillasqa",
-       "pageinfo-views": "Hayk'a qhawaykuna",
        "pageinfo-watchers": "P'anqata hayk'a watiqaqkuna",
        "pageinfo-few-watchers": "$1-manta aswan pisi {{PLURAL:$1|qhawaq|qhawaqkuna}}",
        "pageinfo-redirects-name": "Kay p'anqaman hayk'a pusampuqkuna",
        "exif-urgency-low": "Aslla ($1)",
        "exif-urgency-high": "Hatun ($1)",
        "exif-urgency-other": "Ruraqpa churasqan ñawpaqchay ($1)",
-       "watchlistall2": "lliw",
        "namespacesall": "tukuy",
        "monthsall": "(tukuy)",
        "confirmemail": "E-chaski imamaytaykita takyachiy",
        "logentry-rights-rights-legacy": "{{GENDER:$2|}}$1 sutiyuq ruraqqa $3-pa huñuman kapuyninta hukchan",
        "logentry-rights-autopromote": "{{GENDER:$2|}}$1 sutiyuq ruraqqa kikinmantam ñawparikun $4-manta $5-man",
        "rightsnone": "(-)",
+       "revdelete-summary": "yuyarinata llamk'apuy",
        "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:",
index 6c78c09..2256026 100644 (file)
        "search-interwiki-more": "(ashtawan)",
        "searchrelated": "tinkishka",
        "searchall": "tukuy",
-       "showingresultsheader": "{{PLURAL:$5|Maskashka panka: '''$1''', '''$3'''-manta|Maskashka pankakuna: '''$1 - $2''', '''$3'''-manta}}, '''$4''' maskashpaka",
        "search-nonefound": "Kikinka maskashka rimaykunaka mana tiyanchu.",
        "powersearch-legend": "Ashtawan alli maskana",
        "powersearch-ns": "Chay shutipak kitikunapi maskana :",
        "pager-older-n": "{{PLURAL:$1|ashtawan ñawpak 1|ashtawan ñawpak $1}}",
        "booksources": "Kamukunapi pukyukuna",
        "booksources-search-legend": "Kamukunapi pukyukunata maskana",
-       "booksources-go": "Rina",
        "log": "Kamukuna",
        "allpages": "Tukuy pankakuna",
        "prevpage": "Ñawpak panka ($1)",
        "watchthispage": "Kay pankata rikukuna",
        "unwatch": "Ñamana rikuna",
        "watchlist-details": "{{PLURAL:$1|$1 pankata|$1 pankakunata}} rikukunki (rimanakuy pankakunata mana yupakpika).",
-       "wlshowlast": "$1 pachapi, $2 punchapi rurashka $3 mushuk killkaykunata rikuna",
+       "wlshowlast": "$1 pachapi, $2 punchapi rurashka  mushuk killkaykunata rikuna",
        "watchlist-options": "rikukushka pankakuna pankapa akllaykuna",
        "watching": "Ñami chay pankata rikukukripanki...",
        "unwatching": "Ñamana rikukuchishpa...",
        "metadata-expand": "Uchilla willaykunata rikuchiy",
        "metadata-collapse": "Uchilla willaykunata pakay",
        "metadata-fields": "Kaypi killkashka rikchamanta willaykunaka wiñay paypa rikchawan rikuchishkami kanka. Shuk willaykunata pakashkami kanka. Shinapash shuk rurakka munakpika paykunaya rikunata ushanka.\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",
-       "watchlistall2": "tukuy",
        "namespacesall": "tukuy",
        "monthsall": "tukuy",
        "watchlisttools-view": "Mushuk killkaykunata rikuna",
index 3e6c421..6d75ded 100644 (file)
        "pager-older-n": "{{PLURAL:$1|é piò vëc|i $1 piò vècc}}",
        "booksources": "Va a truvè dj libar",
        "booksources-search-legend": "A vut zarchè int j livar?",
-       "booksources-go": "Và pu",
        "log": "Regèstar",
        "allpages": "Tot al pàgin",
        "prevpage": "Pàgina prèma d'questa ($1)",
        "watchthispage": "Ten d'öcc sta pagina",
        "unwatch": "T'an stèga piò a t'nì d'öcc",
        "watchlist-details": "J è, int la lèsta dal pàgin da tnì d'öcc, {{PLURAL:$1|$1 pàgina|$1 pàgin}}, senza cuntê al pàgin d'cunversaziòn.",
-       "wlshowlast": "Fam avdé agl'ultum $1 ör $2 dè $3",
+       "wlshowlast": "Fam avdé agl'ultum $1 ör $2 dè",
        "watchlist-options": "Scielt int la lèsta d'pàgin da tnì d'öcc",
        "watching": "Mêt insèn al pàgin da t'nì d'öcc...",
        "unwatching": "Scanzèla dal pàgin da t'nì d'öcc...",
        "metadata-expand": "Fam avdé i particulèr",
        "metadata-collapse": "Nascond i particulèr",
        "metadata-fields": "I chêmp d'j metadata EXIF elenché in ste mesàg, j t' ven presenté int'la pàgina d'la figura, quènd la tabèla d'j metadata l'è ardòta znina. J ètar chèmp j srà nascost.\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",
-       "watchlistall2": "tòt",
        "namespacesall": "töt",
        "monthsall": "tòt",
        "watchlisttools-view": "Fam avdè al mudèfich impurtènti",
index 98f2951..8d629e5 100644 (file)
        "pager-newer-n": "{{PLURAL:$1|amynu 1|amynu $1}}",
        "pager-older-n": "{{PLURAL:$1|aqbur 1|aqbur $1}}",
        "booksources": "Ighbula n udlis",
-       "booksources-go": "Uyur",
        "specialloguserlabel": "Aseqdac:",
        "speciallogtitlelabel": "isem:",
        "log": "Aɣmis",
        "watchthispage": "Ḥḍa tasna ya",
        "unwatch": "Ur ḥṭṭa",
        "watchlist-details": "{{PLURAL:$1|$1 n Tasniwin|$1 n Tasniwin}} Twaẓrent bla Tasniwin n usiwl.",
-       "wlshowlast": "Sseml-ad $1 tisεεatin $2 ussan $3 inggura",
+       "wlshowlast": "Sseml-ad $1 tisεεatin $2 ussan  inggura",
        "watching": "Ḥṭṭigh...",
        "unwatching": "Ur ḥṭṭigh...",
        "deletepage": "Kks tasna",
        "metadata-expand": "Sicen-d tilɣa nnumɣarent",
        "metadata-collapse": "Snuffar tilgha innumgharn",
        "metadata-fields": "Igran n EXIF metadata i yllan di tbrat a ad adfn di tasna n twlaft xmnni d-gha twḍa  tflwit n metadata.\nInnḍni ad twaffrn dg umzwar.\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",
-       "watchlistall2": "marra",
        "namespacesall": "marra",
        "monthsall": "marra",
        "imgmultigo": "Raḥ ɣa!",
index 42deb69..753d0c0 100644 (file)
        "category-empty": "''Questa categoria cuntegna actualmain nagins artitgels e naginas datotecas.''",
        "hidden-categories": "{{PLURAL:$1|Categoria zuppentada|Categorias zuppentadas}}",
        "hidden-category-category": "Categorias zuppentadas",
-       "category-subcat-count": "{{PLURAL:$2|Questa categoria cuntegna be suandanta sutcategoria.|Questa categoria cuntegna {{PLURAL:$1|la suandanta sutcategoria|las $1 suandantas sutcategorias}} da totalmain $2 sutcategoria.}}",
+       "category-subcat-count": "{{PLURAL:$2|Questa categoria cuntegna be suandanta sutcategoria.|Questa categoria cuntegna {{PLURAL:$1|la suandanta sutcategoria|las $1 suandantas sutcategorias}} da totalmain $2 sutcategorias.}}",
        "category-subcat-count-limited": "Questa categoria cuntegna {{PLURAL:$1|suandanta subcategoria|suandantas $1 subcategorias}}:",
        "category-article-count": "{{PLURAL:$2|Questa categoria cuntegna be la suandanta pagina.|{{PLURAL:$1|La suandanta pagina è|Las $1 suandantas paginas èn}} en questa categoria che cuntegna totalmain $2 paginas.}}",
        "category-article-count-limited": "{{PLURAL:$1|La suandanta pagina è|Las suandantas $1 paginas èn}} actualmain en la categoria.",
        "passwordreset-emailsent-capture": "In e-mail (sco mussà sutvart) per redefinir il pled-clav è vegnì tramess.",
        "passwordreset-emailerror-capture": "In e-mail (sco mussà sutvart) per redefinir il pled-clav è vegnì generà ma n'ha betg pudì envià a l'{{GENDER:$2|utilisader|utilisadra}}: $1",
        "changeemail": "Midar l'adressa dad e-mail",
-       "changeemail-header": "Midar l'adressa dad e-mail dal conto",
        "changeemail-text": "Cumpletescha quest formular per midar tia adressa dad e-mail. Ti stos endatar tes pled-clav per confermar questa midada.",
        "changeemail-no-info": "Ti stos t'annunziar per acceder directamain questa pagina.",
        "changeemail-oldemail": "Adressa dad e-mail actuala:",
        "changeemail-none": "(nagina)",
        "changeemail-password": "Tes pled-clav da {{SITENAME}}:",
        "changeemail-submit": "Midar l'adressa dad e-mail",
-       "changeemail-cancel": "Interrumper",
        "bold_sample": "Text grass",
        "bold_tip": "Text grass",
        "italic_sample": "Text cursiv",
        "mergehistory-same-destination": "Las paginas d'origin e da destinaziun na dastgan betg esser las medemas",
        "mergehistory-reason": "Motiv:",
        "mergelog": "Protocol da fusiuns",
-       "pagemerge-logentry": "unì [[$1]] a [[$2]] (versiuns enfin $3)",
        "revertmerge": "Revocar la fusiun",
        "mergelogpagetext": "Sutvart è ina glista da las ultimas cronologias ch'èn vegnidas unidas cun autras.",
        "history-title": "$1: Cronologia da las versiuns",
        "searchrelated": "sumegliant",
        "searchall": "tuts",
        "showingresults": "Sutvart èn enfin {{PLURAL:$1|'''in''' resultat|'''$1''' resultats}} cumenzond cun il numer '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' da '''$3'''|Resultats '''$1-$2''' da '''$3'''}} per '''$4'''",
        "search-nonefound": "Per il term tschertgà èn nagins resultats vegnids chattads.",
        "powersearch-legend": "Tschertga extendida",
        "powersearch-ns": "Tschertgar en tips da pagina:",
        "statistics": "Statisticas",
        "statistics-header-pages": "Statistica da paginas",
        "statistics-header-edits": "Statistica da modificaziuns",
-       "statistics-header-views": "Statistica da las visitas",
        "statistics-header-users": "Statisticas davart ils utilisaders",
        "statistics-header-hooks": "Autras statisticas",
        "statistics-articles": "Paginas da cuntegn",
        "statistics-files": "Datotecas chargiadas si",
        "statistics-edits": "Modificaziuns da paginas dapi l'installaziun da {{SITENAME}}",
        "statistics-edits-average": "Media da modificaziuns per pagina",
-       "statistics-views-total": "Visitas totalmain",
-       "statistics-views-total-desc": "Visitas da paginas ch'existan betg u da paginas spezialas n'èn betg inclusas",
-       "statistics-views-peredit": "Visitas per modificaziun",
        "statistics-users": "[[Special:ListUsers|Utilisaders]] registrads",
        "statistics-users-active": "Utilisaders activs",
        "statistics-users-active-desc": "Utilisaders che han fatg almain ina acziun {{PLURAL:$1|l'ultim di|ils ultims $1 dis}}",
-       "statistics-mostpopular": "Paginas visitadas il pli savens",
        "doubleredirects": "Renviaments dubels",
        "doubleredirectstext": "Questa glista mussa renviaments che mainan puspè a renviaments.\nMintga colonna cuntegna colliaziuns a l'emprim ed al segund renviaments, sco era la pagina finala dal segund renviament che è probablamain la pagina a la quala duess vegnir renvià.\nElements <del>stritgads</del> èn gia eliminads.",
        "double-redirect-fixed-move": "[[$1]] è vegnì spustà.\nI renviescha uss a [[$2]].",
        "uncategorizedtemplates": "Models betg categorisads",
        "unusedcategories": "Categorias betg utilisadas",
        "unusedimages": "Maletgs betg utilisads",
-       "popularpages": "Paginas popularas",
        "wantedcategories": "Categorias giavischadas",
        "wantedpages": "Artitgels giavischads",
        "wantedpages-badtitle": "Titel nunvalid en il resultat: $1",
        "querypage-disabled": "Questa pagina speciala è deactivada ord motivs da prestaziun.",
        "booksources": "Tschertga da ISBN",
        "booksources-search-legend": "Tschertgar pussaivladad da cumpra per cudeschs",
-       "booksources-go": "Leger",
        "booksources-text": "Sutvart è ina glista da las colliaziuns ad autras paginas che vendan cudeschs novs ed utilisads e che pudessan avair dapli infurmaziuns davart ils cudeschs che ti tschertgas:",
        "booksources-invalid-isbn": "Il numer ISBN na para betg dad esser valid; controllescha che ti n'has betg fatg errurs cun la scriver.",
        "specialloguserlabel": "Acziun exequida da:",
        "wlheader-enotif": "Il servetsch d'infurmaziun per e-mail è activà.",
        "wlheader-showupdated": "Paginas ch'èn vegnidas modifitgadas suenter che ti has vis els la davosa giada èn mussads '''grass'''",
        "wlnote": "Sutvart {{PLURAL:$1|è l'ultima midada|èn las ultimas '''$1''' midadas}} entaifer {{PLURAL:$2|l'ultima ura|las ultimas '''$2''' uras}}. Actualisà ils $3 las $4.",
-       "wlshowlast": "Mussar: las ultimas $1 uras, ils ultims $2 dis u $3.",
+       "wlshowlast": "Mussar: las ultimas $1 uras, ils ultims $2 dis u .",
        "watchlist-options": "Opziuns per la glista d'observaziun",
        "watching": "observ...",
        "unwatching": "observ betg pli...",
        "import": "Impurtar paginas",
        "importinterwiki": "Import transwiki",
        "import-interwiki-text": "Tscherna in wiki ed in titel da pagina per importar.\nLas datas da las versiuns ed ils nums dals contribuents vegnan mantegnids.\nTut ils imports transwiki vegnan registrads en il [[Special:Log/import|protocol d'imports]].",
-       "import-interwiki-source": "Wiki/pagina da funtauna:",
        "import-interwiki-history": "Copiar l'entira cronologia da questa pagina",
        "import-interwiki-templates": "Includer tut ils models",
        "import-interwiki-submit": "Importar",
        "pageinfo-robot-policy": "Status per maschinas da tschertgar",
        "pageinfo-robot-index": "Lubì",
        "pageinfo-robot-noindex": "Betg lubì",
-       "pageinfo-views": "Dumber da visitas",
        "pageinfo-watchers": "Dumber dad observaturs da la pagina",
        "pageinfo-redirects-name": "Dumber da renviaments a questa pagina",
        "pageinfo-subpages-name": "Sutpaginas da questa pagina",
        "exif-urgency-low": "Bass ($1)",
        "exif-urgency-high": "Aut ($1)",
        "exif-urgency-other": "Prioritad definida da l'utilisader ($1)",
-       "watchlistall2": "tut",
        "namespacesall": "tuts",
        "monthsall": "tuts",
        "confirmemail": "Confermar l'adressa dad e-mail",
        "logentry-rights-rights-legacy": "$1 ha {{GENDER:$2|midà}} la commembranza da gruppas per $3",
        "logentry-rights-autopromote": "$1 è vegnì {{GENDER:$2|promovì|promovida}} automaticamain da $4 a $5",
        "rightsnone": "(nagins)",
+       "revdelete-summary": "resumaziun da la midada",
        "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:",
index 48873b6..fe972e0 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Desiphral",
-            "לערי ריינהארט"
-        ]
-    },
-    "underline-always": "Savaxt",
-    "underline-never": "Ni ekhvar",
-    "underline-default": "Browseresko standardo",
-    "sunday": "purano kurko",
-    "monday": "lui",
-    "tuesday": "marci",
-    "wednesday": "tetradī",
-    "thursday": "zhoi",
-    "friday": "parashtui",
-    "saturday": "savato",
-    "january": "pervonai",
-    "february": "duitonai",
-    "march": "tritonai",
-    "april": "shtartonai",
-    "may_long": "panjtonai",
-    "june": "shovtonai",
-    "july": "eftatonai",
-    "august": "oxtotonai",
-    "september": "enyatonai",
-    "october": "deshtonai",
-    "november": "deshuekhtonai",
-    "december": "deshuduitonai",
-    "jan": "perv",
-    "feb": "dui",
-    "mar": "tri",
-    "apr": "shta",
-    "may": "panj",
-    "jun": "shov",
-    "jul": "efta",
-    "aug": "oxt",
-    "sep": "enya",
-    "oct": "desh",
-    "nov": "dekh",
-    "dec": "ddui",
-    "subcategories": "Telekategoriye",
-    "about": "Andar",
-    "article": "Lekh",
-    "newwindow": "(inklel aver filiyastra)",
-    "cancel": "Mekh la",
-    "mypage": "Miri patrin",
-    "mytalk": "Mire vakyarimata",
-    "navigation": "Phiripen",
-    "and": "&#32;thai",
-    "qbedit": "Editisar",
-    "errorpagetitle": "Dosh",
-    "returnto": "Ja palpale kai $1.",
-    "help": "Zhutipen",
-    "search": "Rod",
-    "searchbutton": "Rod",
-    "go": "Ja",
-    "searcharticle": "Ja",
-    "history": "Puraneder versiye",
-    "history_short": "Puranipen",
-    "printableversion": "Printisaripnaski versiya",
-    "permalink": "Savaxtutno phandipen",
-    "print": "Printisaripen",
-    "edit": "Editisar i patrin",
-    "editthispage": "Editisar i patrin",
-    "delete": "Khosipen",
-    "deletethispage": "Khos i patrin",
-    "undelete_short": "Na mai khos le editisarimata $1",
-    "protect": "Brakhipen",
-    "unprotect": "Na mai brakh",
-    "newpage": "Nevi patrin",
-    "specialpage": "Uzalutni patrin",
-    "personaltools": "Mire labne",
-    "articlepage": "Dikh o lekh",
-    "talk": "Vakyarimata",
-    "toolbox": "Labnengo moxton",
-    "userpage": "Dikh i jeneski patrin",
-    "viewtalkpage": "Dikh i diskucia",
-    "otherlanguages": "Avre ćhibande",
-    "lastmodifiedat": "O palutno paruvipen $2, $1.",
-    "viewcount": "Kadaya patrin dikhlilyas {{PLURAL:$1|one time|$1var}}.",
-    "jumpto": "Ja kai:",
-    "jumptonavigation": "phiripen",
-    "jumptosearch": "rodipen",
-    "aboutsite": "Andar {{SITENAME}}",
-    "aboutpage": "Project:Andar",
-    "copyright": "Ander dino tar o $1.",
-    "copyrightpage": "{{ns:project}}:Autorenge xakaya (chachimata)",
-    "currentevents": "Nevimata",
-    "currentevents-url": "Project:Nevimata",
-    "disclaimers": "Termenurya",
-    "disclaimerpage": "Project:Termenurya",
-    "edithelp": "Editisaripnasko zhutipen",
-    "mainpage": "Sherutni patrin",
-    "mainpage-description": "Sherutni patrin",
-    "portal": "Maladipnasko than",
-    "portal-url": "Project:Maladipnasko than",
-    "privacy": "Pativyako forovipen",
-    "retrievedfrom": "Lino katar \"$1\"",
-    "editsection": "editisar",
-    "editsectionhint": "Editisar o kotor: $1",
-    "toc": "Ander",
-    "showtoc": "dikh",
-    "hidetoc": "garav",
-    "nstab-main": "Lekh",
-    "nstab-user": "Jeneski patrin",
-    "nstab-media": "Mediya patrin",
-    "nstab-special": "Uzalutno",
-    "nstab-project": "Projekto",
-    "nstab-image": "Chitro",
-    "nstab-mediawiki": "Duma",
-    "nstab-template": "Sikavno",
-    "nstab-help": "Zhutipen",
-    "nstab-category": "Shopni",
-    "nospecialpagetext": "Manglyas ekh [[Special:SpecialPages|uzalutni patrin]] so na arakhel pes kai {{SITENAME}}.",
-    "viewsource": "Dikh i sursa",
-    "logouttext": "'''Akana san avryal i {{SITENAME}}.'''\n\nShai te labyares {{SITENAME}} sar ekh bijanglo jeno vai shai te prinjares tut palem sar o jeno le kadale navesa vai le aver navesa.",
-    "yourname": "Tiro anav",
-    "yourpassword": "O nakhavipnasko lav",
-    "yourpasswordagain": "O nakhavipnasko lav de nevo",
-    "externaldberror": "Sas ekh dosh kai datengi baza le avrutne prinjaripnyange vai nai tuke drom te akanutnisares o avrutno akonto.",
-    "login": "Prinjaripen",
-    "loginprompt": "Trebul te das drom le phandimatenge ''cookie'' te das andre kai {{SITENAME}}.",
-    "userlogin": "Prinjaripen / Ker ek akount",
-    "logout": "De avri",
-    "userlogout": "De avri",
-    "nologinlink": "Ker ek akount",
-    "createaccount": "Ker ek nevo akount",
-    "gotaccount": "Si tuke akana ekh akonto? '''$1'''.",
-    "gotaccountlink": "De andre",
-    "createaccountmail": "palal o e-mail",
-    "badretype": "Le nakhavipnaske lava so lekhavdyan nai myazutne.",
-    "loginerror": "Prinjaripnaski dosh",
-    "nocookiesnew": "O tiro akont sas kerdo, pale tu nai prinjardo/i. {{SITENAME}} labyarel ''cookies'' te astarel le manusha prinjarde. O tiro browser na astarel le cookies. Si mishto te das les drom te astarel le ''cookies'' thai, palal kodya, te zumaves vi ekh var, labyarindoi o nav thai o nakhavipnaso lav.",
-    "nocookieslogin": "{{SITENAME}} labyarel ''cookies'' te prinjaren le manusha so aven kathe. O tiro browser chi astarel len. Si mishto te das les drom te astarel le ''cookies'' thai, palal kodya, te zumaves vi ekh var.",
-    "loginsuccesstitle": "Prinjaripen kerdo",
-    "loginsuccess": "Akana san prijardo kai {{SITENAME}} sar \"$1\".",
-    "wrongpassword": "O nakhavipnasko lav so thovdyan si doshalo. Mangas tuke te zumaves vi ekvar.",
-    "mailmypassword": "Bichhal ma o nakhavipnasko lav e-mail-estar!",
-    "passwordremindertitle": "Astaripen le tire nakhavipnaske lavesko kai {{SITENAME}}",
-    "passwordremindertext": "Varekon (shai te aves tu, katar i adresa $1)\nmanglyas ek nevo nakahvipnasko lav katar {{SITENAME}}.\nO nakhavipnasko lav le jenesko \"$2\" akana si \"$3\".\nMishto si te jas kai {{SITENAME}} thai te paruves tiro lav sigo.",
-    "noemail": "Nai ni ekh adresa e-mail prinjarde le jeneske \"$1\".",
-    "eauthentsent": "Ekh prinjaripnasko e-mail bichhaldo kai tiri e-maileski adresa. Kashte avel tuke e-mailuya le avre jenendar trebul te prinjares tiri adresa (dikh buteder ando bichhaldo e-mail).",
-    "mailerror": "Dosh kana sas bichhaldo o e-mail: $1",
-    "acct_creation_throttle_hit": "Fal ame nasul, akana si tut $1 akounturya. Nashti te keres aver.",
-    "emailauthenticated": "Tiro e-mail sas prinjardo kai $1.",
-    "emailnotauthenticated": "Tiri e-maileski adresa <strong>nas prinjardi ji akana</strong>. Ni ekh e-mail nashti te avel tuke ji kana prinjares la.",
-    "noemailprefs": "Thov ekh adresa e-mail te keren buti le kadale labne.",
-    "emailconfirmlink": "Prinjar o e-mail",
-    "invalidemailaddress": "Le e-maileski adresa nas lino anda kodoya ke nas lake ekh lachhi forma. Si mishto te thos ekh e-mail le lachhe formasa vai te khoses so lekhvdyas pe kodo than.",
-    "accountcreated": "Akount kerdo",
-    "accountcreatedtext": "Kerdo o akonto le jenesko ko $1.",
-    "changepassword": "Paruv o nakhavipnasko lav",
-    "oldpassword": "Purano nakahvipnasko lav",
-    "newpassword": "Nevo nakhavipnasko lav:",
-    "image_sample": "Misal.jpg",
-    "summary": "Xarno xalyaripen:",
-    "minoredit": "Kadava si ek tikno editisarimos",
-    "watchthis": "Dikh kadaya patrin",
-    "savearticle": "Uxtav i patrin",
-    "showpreview": "Dikh sar avelas i patrin",
-    "showlivepreview": "Jivutno angledikhipen",
-    "showdiff": "Dikh le paruvimata",
-    "whitelistedittext": "Trebul te [[Special:UserLogin|autentifikisares]] kashte editisares artikolurya.",
-    "accmailtitle": "O nakhavipnasko lav bićhaldo.",
-    "accmailtext": "O nakhavipnasko lav andar '$1' bićhaldo ko $2.",
-    "newarticle": "(Nevo)",
-    "newarticletext": "Avilyan kai ek patrin so na si.\nTe keres la, shai te shirdes (astares) te lekhaves ando telutno moxton (dikh [[{{MediaWiki:Helppage}}|zhutipnaski patrin]] te janes buteder).\nKana avilyan kathe doshatar, ja palpale.",
-    "noarticletext": "Andi '''{{SITENAME}}''' nai ji akana ek lekh kadale anavesa.\n* Te shirdes (astares) te keres o lekh, ker klik  '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} kathe]'''.",
-    "editing": "Editisaripen $1",
-    "yourtext": "Tiro teksto",
-    "storedversion": "Akanutni versiya",
-    "yourdiff": "Ververimata",
-    "previousrevision": "← Purano paruvipen",
-    "nextrevision": "Nevi paruvipen →",
-    "cur": "akanutni",
-    "last": "purani",
-    "histlegend": "Xalyaripen: (akanutni) = ververimata mamui i akanutni versiya,\n(purani) = ververimata mamui i puraneder versiya, T = tikno editisaripen",
-    "histfirst": "O mai purano",
-    "histlast": "O mai nevo",
-    "revdelete-submit": "Ker kadya le alosarde paruvimatenge",
-    "compareselectedversions": "Dikh ververimata mashkar alosarde versiye",
-    "prevn": "mai neve {{PLURAL:$1|$1}}",
-    "nextn": "mai purane {{PLURAL:$1|$1}}",
-    "viewprevnext": "Dikh ($1 {{int:pipe-separator}} $2) ($3).",
-    "showingresults": "Tele si <b>$1</b> rezultaturya shirdindoi le ginestar <b>$2</b>.",
-    "showingresultsnum": "Tele si <b>$3</b> rezultaturya shirdindoi le ginestar <b>$2</b>.",
-    "preferences": "Kamimata",
-    "prefs-skin": "Dikhimos",
-    "datedefault": "Ni ekh kamipen",
-    "prefs-datetime": "Dives thai chaso",
-    "prefs-rc": "Neve paruvimata",
-    "saveprefs": "Uxtav le kamimata",
-    "columns": "Uche vortorina:",
-    "localtime": "Thanutno vaxt",
-    "guesstimezone": "Le les katar o browser",
-    "allowemail": "De drom te aven e-mailurya katar aver jene",
-    "defaultns": "Rod savaxt vi kai kadale riga:",
-    "default": "acharuno",
-    "prefs-files": "Failurya",
-    "youremail": "Emailesko adress (kana kames)*",
-    "yourrealname": "Tiro chacho anav*",
-    "yourlanguage": "Ćhib:",
-    "yournick": "I xarni versyunya, le semnaturenge",
-    "badsig": "Bilachhi semnatura; dikh le tagurya HTML.",
-    "editinguser": "Editisaripen '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
-    "group": "Grupo:",
-    "group-bot": "Boturya",
-    "group-sysop": "Administratorurya",
-    "group-bureaucrat": "Birokraturya:",
-    "group-all": "(sa)",
-    "group-sysop-member": "Administratoro",
-    "group-bureaucrat-member": "Birokrato",
-    "grouppage-bot": "{{ns:project}}:Boturya",
-    "grouppage-sysop": "{{ns:project}}:Administratorurya",
-    "grouppage-bureaucrat": "{{ns:project}}:Birokraturya",
-    "recentchanges": "Neve paruvimata",
-    "recentchanges-summary": "Andi kadaya patrin shai te dikhes le neve paruvimata andi romani {{SITENAME}}.",
-    "rcnotefrom": "Tele si le averutnimata katar '''$2''' (inklen '''$1''' averutnimata, shai te paruves o gin alosarindoi aver tele).",
-    "rclistfrom": "Dikh le paruvimata ji kai $1",
-    "rcshowhideminor": "$1 tikne editisaripena",
-    "rcshowhidebots": "$1 (ro)boturya",
-    "rcshowhideliu": "$1 prinjarde jene",
-    "rcshowhideanons": "$1 bijangle jene",
-    "rcshowhidepatr": "$1 dikhle paruvimata",
-    "rcshowhidemine": "$1 mire editisaripena",
-    "rclinks": "Dikh le palutne $1 paruvimata andar le palutne $2 divesa.<br />$3",
-    "diff": "ververipen",
-    "hist": "puranipen",
-    "hide": "garav",
-    "show": "dikh",
-    "minoreditletter": "t",
-    "number_of_watching_users_pageview": "[$1 jeno/e kon len vurma e patrinyaki]",
-    "rc_categories": "Numa le shopnya (rigyarde katar \"|\")",
-    "rc_categories_any": "Savegodi",
-    "recentchangeslinked": "Pashvipnaske paruvimata",
-    "recentchangeslinked-feed": "Pashvipnaske paruvimata",
-    "recentchangeslinked-toolbox": "Pashvipnaske paruvimata",
-    "upload": "Bichhal file",
-    "uploadbtn": "Bichhal file",
-    "filedesc": "Xarno xalyaripen",
-    "badfilename": "O chitrosko anav sas paruvdo; o nevo anav si \"$1\".",
-    "savefile": "Uxtav file",
-    "listfiles": "Patrinipen le chitrengo",
-    "file-anchor-link": "Chitro",
-    "imagelinks": "Chitroske phandimata",
-    "unusedtemplates": "Bilabyarde sikavne",
-    "unusedtemplateswlh": "aver phandimata",
-    "randompage": "Ekh patrin savigodi",
-    "statistics": "Beshimata",
-    "wantedpages": "Kamle pajine",
-    "shortpages": "Xarne patrya",
-    "deadendpages": "Biphandimatenge patrya",
-    "listusers": "Jenengo patrinipen",
-    "newpages": "Neve patrya",
-    "ancientpages": "E puraneder lekha",
-    "move": "Ingerdipen",
-    "allpages": "Savore patrya",
-    "nextpage": "Anglutni patrin ($1)",
-    "allarticles": "Sa le artikolurya",
-    "allpagessubmit": "Ja",
-    "emailuser": "Bichhal les/la e-mail",
-    "emailfrom": "Katar",
-    "emailto": "Karing",
-    "emailsend": "Bichhal",
-    "watchlist": "Dikhipnaske lekha",
-    "mywatchlist": "Dikhipnaske lekha",
-    "addedwatchtext": "I patrin \"[[:$1]]\" sas thovdi andi tiri lista [[Special:Watchlist|le artikolengi so dikhes len]].\nLe neve paruvimata andar kadale patrya thai andar lenge vakyarimatenge patrya thona kathe, vi dikhena pen le <b>thule semnurenca</b> andi patrin le [[Special:RecentChanges|neve paruvimatenge]].\n\nKana kamesa te khoses kadaya patrin andar tiri lista le patryange so arakhes len ker click kai \"Na mai arakh\" (opre, kana i patrin dikhel pes).",
-    "removedwatchtext": "I patrin \"[[:$1]]\" sas khosli katar o patrinipen le dikhipnaske lekhenca (artikolurya).",
-    "watch": "Dikh la",
-    "unwatch": "Na mai dikh",
-    "unwatchthispage": "Na mai dikh",
-    "enotif_reset": "Thov semno kai patrya so dikhlem",
-    "deletepage": "Khos i patrin",
-    "confirm": "Ja",
-    "excontent": "o ander sas: '$1'",
-    "excontentauthor": "o ander sas: '$1' (thai o korkoro butyarno sas '$2')",
-    "exblank": "i patrin sas chuchi",
-    "historywarning": "Dikh! La patrya so kames to khoses la si la puranipen:",
-    "actioncomplete": "Agorisardi buti",
-    "deletedtext": "\"$1\" sas khosli.\nDikh ando $2 ek patrinipen le palutne butyange khosle.",
-    "rollback_short": "Palemavilipen",
-    "rollbacklink": "palemavilipen",
-    "rollbackfailed": "O palemavilipen nashtisardyas te kerel pes.",
-    "prot_1movedto2": "[[$1]] bichhaldo kai [[$2]]",
-    "undelete": "Dikh le khosle patrya",
-    "undeletebtn": "Le palpale",
-    "namespace": "Rig:",
-    "invert": "Bi rigyako:",
-    "contributions": "Jeneske butya",
-    "mycontris": "Mire butya",
-    "contribsub2": "Katar $1 ($2)",
-    "uctop": "(opre)",
-    "whatlinkshere": "So phandel pes kathe",
-    "nolinkshere": "Ni ek patrin phandel pes (avel) kathe.",
-    "blockip": "De avri jenes/IP",
-    "ipbsubmit": "De avri kadava jenes",
-    "ipusubmit": "Na mai brakh i adresa",
-    "contribslink": "butya",
-    "lockbtn": "Brakh i database",
-    "unlockbtn": "Na mai brakh i database",
-    "movearticle": "Inger i patrin",
-    "movepagebtn": "Inger i patrin",
-    "pagemovedsub": "I patrin sas bićhaldi.",
-    "delete_and_move": "Khos thai inger",
-    "export-submit": "Bichhal avri",
-    "allmessages": "Sistemoske duma",
-    "allmessagesname": "Anav",
-    "import-interwiki-submit": "Le andre",
-    "tooltip-pt-userpage": "Miri labyarneski pajina",
-    "tooltip-pt-anonuserpage": "Miri labyarneski pajina ki akanutni IP adress",
-    "tooltip-pt-mytalk": "Miri diskuciyaki pajina",
-    "tooltip-pt-anontalk": "Diskucie le editisarimatenge ki akanutni IP adress",
-    "tooltip-pt-preferences": "Sar kamav te dikhel pes miri pajina",
-    "tooltip-pt-watchlist": "I lista le pajinenge so dikhav lendar (monitorizav).",
-    "tooltip-pt-mycontris": "Le mire editisarimata",
-    "tooltip-pt-login": "Mishto si te identifikares tut, pale na si musai.",
-    "tooltip-pt-logout": "Kathe aćhaves i sesiyunya",
-    "tooltip-ca-talk": "Diskuciya le artikoleske",
-    "tooltip-ca-edit": "Shai te editisares kadaya pajina. Mangas te paledikhes o teksto anglal te uxtaves les.",
-    "tooltip-ca-addsection": "Kathe shai te thos ek komentaryo ki kadaya diskuciya.",
-    "tooltip-ca-viewsource": "Kadaya pajina si brakhli. Shai numa te dikhes o source-code.",
-    "tooltip-ca-history": "Purane versiune le dokumenteske.",
-    "tooltip-ca-protect": "Brakh kadava dokumento.",
-    "tooltip-ca-delete": "Khos kadava dokumento.",
-    "tooltip-ca-undelete": "Palemthav le editisarimata kerdine le kadale dokumenteske sar sas anglal lesko khosipen.",
-    "tooltip-ca-move": "Trade kadava dokumento.",
-    "tooltip-ca-watch": "Thav kadava dokumento andi monitorizaripnaski lista.",
-    "tooltip-ca-unwatch": "Khos kadava dokumento andar i monitorizaripnaski lista.",
-    "tooltip-search": "Rod andi kadaya Wiki",
-    "tooltip-p-logo": "I sherutni pajina",
-    "tooltip-n-mainpage": "Dikh i sherutni pajina",
-    "tooltip-n-portal": "O proyekto, so shai te keres, kai arakhes solucie.",
-    "tooltip-n-currentevents": "Arakh janglimata le akanutne evenimenturenge",
-    "tooltip-n-recentchanges": "I lista le neve paruvimatenge kerdini andi kadaya wiki.",
-    "tooltip-n-randompage": "Ja ki ek aleatori pajina",
-    "tooltip-n-help": "O than kai arakhes zhutipen.",
-    "tooltip-t-whatlinkshere": "I lista sa le wiki pajinenge so aven (si phande) vi kathe",
-    "tooltip-t-recentchangeslinked": "Neve paruvimata andi kadaya pajina",
-    "tooltip-feed-rss": "Kathe te pravares o RSS flukso le kadale pajinyako",
-    "tooltip-feed-atom": "Kathe te pravares o Atom flukso le kadale pajinyako",
-    "tooltip-t-contributions": "Dikh i lista le editisarimatenge le kadale labyaresko",
-    "tooltip-t-emailuser": "Bićhal ek emailo le kadale labyareske",
-    "tooltip-t-upload": "Bićhal imajine vai media files",
-    "tooltip-t-specialpages": "I lista sa le spechiale pajinengi",
-    "tooltip-ca-nstab-main": "Dikh o artikolo",
-    "tooltip-ca-nstab-user": "Dikh i labyarengi pajina",
-    "tooltip-ca-nstab-media": "Dikh i pajina media",
-    "tooltip-ca-nstab-special": "Kadaya si ek spechiali pajina, nashti te editisares la.",
-    "tooltip-ca-nstab-project": "Dikh i pajina le proyekteski",
-    "tooltip-ca-nstab-image": "Dikh i imajinyaki pajina",
-    "tooltip-ca-nstab-mediawiki": "Dikh o mesajo le sistemesko",
-    "tooltip-ca-nstab-template": "Dikh o formato",
-    "tooltip-ca-nstab-help": "Dikh i zhutipnaski pajina",
-    "tooltip-ca-nstab-category": "Dikh i kategoriya",
-    "anonymous": "Bijangle labyarne kai {{SITENAME}}",
-    "siteuser": "Jeno kai {{SITENAME}} $1",
-    "lastmodifiedatby": "Kadaya patrin sas paruvdi agoreste $2, $1 katar $3.",
-    "others": "aver",
-    "siteusers": "Jeno/e kai {{SITENAME}} $1",
-    "deletedrevision": "Khoslo o purano paruvipen $1",
-    "previousdiff": "← Purano ververipen",
-    "nextdiff": "Anglutno paruvipen →",
-    "showhidebots": "($1 boturya)",
-    "ilsubmit": "Rod",
-    "watchlistall2": "savore",
-    "namespacesall": "savore",
-    "deletedwhileediting": "Dikh: Kadaya patrin sas khosli de kana shirdyas (astardyas) te editisares la!",
-    "confirm_purge_button": "Va",
-    "version": "Versiya",
-    "specialpages": "Uzalutne patrya"
+       "@metadata": {
+               "authors": [
+                       "Desiphral",
+                       "לערי ריינהארט",
+                       "아라"
+               ]
+       },
+       "underline-always": "Savaxt",
+       "underline-never": "Ni ekhvar",
+       "underline-default": "Browseresko standardo",
+       "sunday": "purano kurko",
+       "monday": "lui",
+       "tuesday": "marci",
+       "wednesday": "tetradī",
+       "thursday": "zhoi",
+       "friday": "parashtui",
+       "saturday": "savato",
+       "january": "pervonai",
+       "february": "duitonai",
+       "march": "tritonai",
+       "april": "shtartonai",
+       "may_long": "panjtonai",
+       "june": "shovtonai",
+       "july": "eftatonai",
+       "august": "oxtotonai",
+       "september": "enyatonai",
+       "october": "deshtonai",
+       "november": "deshuekhtonai",
+       "december": "deshuduitonai",
+       "jan": "perv",
+       "feb": "dui",
+       "mar": "tri",
+       "apr": "shta",
+       "may": "panj",
+       "jun": "shov",
+       "jul": "efta",
+       "aug": "oxt",
+       "sep": "enya",
+       "oct": "desh",
+       "nov": "dekh",
+       "dec": "ddui",
+       "subcategories": "Telekategoriye",
+       "about": "Andar",
+       "article": "Lekh",
+       "newwindow": "(inklel aver filiyastra)",
+       "cancel": "Mekh la",
+       "mypage": "Miri patrin",
+       "mytalk": "Mire vakyarimata",
+       "navigation": "Phiripen",
+       "and": "&#32;thai",
+       "qbedit": "Editisar",
+       "errorpagetitle": "Dosh",
+       "returnto": "Ja palpale kai $1.",
+       "help": "Zhutipen",
+       "search": "Rod",
+       "searchbutton": "Rod",
+       "go": "Ja",
+       "searcharticle": "Ja",
+       "history": "Puraneder versiye",
+       "history_short": "Puranipen",
+       "printableversion": "Printisaripnaski versiya",
+       "permalink": "Savaxtutno phandipen",
+       "print": "Printisaripen",
+       "edit": "Editisar i patrin",
+       "editthispage": "Editisar i patrin",
+       "delete": "Khosipen",
+       "deletethispage": "Khos i patrin",
+       "undelete_short": "Na mai khos le editisarimata $1",
+       "protect": "Brakhipen",
+       "unprotect": "Na mai brakh",
+       "newpage": "Nevi patrin",
+       "specialpage": "Uzalutni patrin",
+       "personaltools": "Mire labne",
+       "articlepage": "Dikh o lekh",
+       "talk": "Vakyarimata",
+       "toolbox": "Labnengo moxton",
+       "userpage": "Dikh i jeneski patrin",
+       "viewtalkpage": "Dikh i diskucia",
+       "otherlanguages": "Avre ćhibande",
+       "lastmodifiedat": "O palutno paruvipen $2, $1.",
+       "viewcount": "Kadaya patrin dikhlilyas {{PLURAL:$1|one time|$1var}}.",
+       "jumpto": "Ja kai:",
+       "jumptonavigation": "phiripen",
+       "jumptosearch": "rodipen",
+       "aboutsite": "Andar {{SITENAME}}",
+       "aboutpage": "Project:Andar",
+       "copyright": "Ander dino tar o $1.",
+       "copyrightpage": "{{ns:project}}:Autorenge xakaya (chachimata)",
+       "currentevents": "Nevimata",
+       "currentevents-url": "Project:Nevimata",
+       "disclaimers": "Termenurya",
+       "disclaimerpage": "Project:Termenurya",
+       "edithelp": "Editisaripnasko zhutipen",
+       "mainpage": "Sherutni patrin",
+       "mainpage-description": "Sherutni patrin",
+       "portal": "Maladipnasko than",
+       "portal-url": "Project:Maladipnasko than",
+       "privacy": "Pativyako forovipen",
+       "retrievedfrom": "Lino katar \"$1\"",
+       "editsection": "editisar",
+       "editsectionhint": "Editisar o kotor: $1",
+       "toc": "Ander",
+       "showtoc": "dikh",
+       "hidetoc": "garav",
+       "nstab-main": "Lekh",
+       "nstab-user": "Jeneski patrin",
+       "nstab-media": "Mediya patrin",
+       "nstab-special": "Uzalutno",
+       "nstab-project": "Projekto",
+       "nstab-image": "Chitro",
+       "nstab-mediawiki": "Duma",
+       "nstab-template": "Sikavno",
+       "nstab-help": "Zhutipen",
+       "nstab-category": "Shopni",
+       "nospecialpagetext": "Manglyas ekh [[Special:SpecialPages|uzalutni patrin]] so na arakhel pes kai {{SITENAME}}.",
+       "viewsource": "Dikh i sursa",
+       "logouttext": "'''Akana san avryal i {{SITENAME}}.'''\n\nShai te labyares {{SITENAME}} sar ekh bijanglo jeno vai shai te prinjares tut palem sar o jeno le kadale navesa vai le aver navesa.",
+       "yourname": "Tiro anav",
+       "yourpassword": "O nakhavipnasko lav",
+       "yourpasswordagain": "O nakhavipnasko lav de nevo",
+       "externaldberror": "Sas ekh dosh kai datengi baza le avrutne prinjaripnyange vai nai tuke drom te akanutnisares o avrutno akonto.",
+       "login": "Prinjaripen",
+       "userlogin": "Prinjaripen / Ker ek akount",
+       "logout": "De avri",
+       "userlogout": "De avri",
+       "nologinlink": "Ker ek akount",
+       "createaccount": "Ker ek nevo akount",
+       "gotaccount": "Si tuke akana ekh akonto? '''$1'''.",
+       "gotaccountlink": "De andre",
+       "createaccountmail": "palal o e-mail",
+       "badretype": "Le nakhavipnaske lava so lekhavdyan nai myazutne.",
+       "loginerror": "Prinjaripnaski dosh",
+       "nocookiesnew": "O tiro akont sas kerdo, pale tu nai prinjardo/i. {{SITENAME}} labyarel ''cookies'' te astarel le manusha prinjarde. O tiro browser na astarel le cookies. Si mishto te das les drom te astarel le ''cookies'' thai, palal kodya, te zumaves vi ekh var, labyarindoi o nav thai o nakhavipnaso lav.",
+       "nocookieslogin": "{{SITENAME}} labyarel ''cookies'' te prinjaren le manusha so aven kathe. O tiro browser chi astarel len. Si mishto te das les drom te astarel le ''cookies'' thai, palal kodya, te zumaves vi ekh var.",
+       "loginsuccesstitle": "Prinjaripen kerdo",
+       "loginsuccess": "Akana san prijardo kai {{SITENAME}} sar \"$1\".",
+       "wrongpassword": "O nakhavipnasko lav so thovdyan si doshalo. Mangas tuke te zumaves vi ekvar.",
+       "mailmypassword": "Bichhal ma o nakhavipnasko lav e-mail-estar!",
+       "passwordremindertitle": "Astaripen le tire nakhavipnaske lavesko kai {{SITENAME}}",
+       "passwordremindertext": "Varekon (shai te aves tu, katar i adresa $1)\nmanglyas ek nevo nakahvipnasko lav katar {{SITENAME}}.\nO nakhavipnasko lav le jenesko \"$2\" akana si \"$3\".\nMishto si te jas kai {{SITENAME}} thai te paruves tiro lav sigo.",
+       "noemail": "Nai ni ekh adresa e-mail prinjarde le jeneske \"$1\".",
+       "eauthentsent": "Ekh prinjaripnasko e-mail bichhaldo kai tiri e-maileski adresa. Kashte avel tuke e-mailuya le avre jenendar trebul te prinjares tiri adresa (dikh buteder ando bichhaldo e-mail).",
+       "mailerror": "Dosh kana sas bichhaldo o e-mail: $1",
+       "acct_creation_throttle_hit": "Fal ame nasul, akana si tut $1 akounturya. Nashti te keres aver.",
+       "emailauthenticated": "Tiro e-mail sas prinjardo kai $1.",
+       "emailnotauthenticated": "Tiri e-maileski adresa <strong>nas prinjardi ji akana</strong>. Ni ekh e-mail nashti te avel tuke ji kana prinjares la.",
+       "noemailprefs": "Thov ekh adresa e-mail te keren buti le kadale labne.",
+       "emailconfirmlink": "Prinjar o e-mail",
+       "invalidemailaddress": "Le e-maileski adresa nas lino anda kodoya ke nas lake ekh lachhi forma. Si mishto te thos ekh e-mail le lachhe formasa vai te khoses so lekhvdyas pe kodo than.",
+       "accountcreated": "Akount kerdo",
+       "accountcreatedtext": "Kerdo o akonto le jenesko ko $1.",
+       "changepassword": "Paruv o nakhavipnasko lav",
+       "oldpassword": "Purano nakahvipnasko lav",
+       "newpassword": "Nevo nakhavipnasko lav:",
+       "image_sample": "Misal.jpg",
+       "summary": "Xarno xalyaripen:",
+       "minoredit": "Kadava si ek tikno editisarimos",
+       "watchthis": "Dikh kadaya patrin",
+       "savearticle": "Uxtav i patrin",
+       "showpreview": "Dikh sar avelas i patrin",
+       "showdiff": "Dikh le paruvimata",
+       "whitelistedittext": "Trebul te [[Special:UserLogin|autentifikisares]] kashte editisares artikolurya.",
+       "accmailtitle": "O nakhavipnasko lav bićhaldo.",
+       "accmailtext": "O nakhavipnasko lav andar '$1' bićhaldo ko $2.",
+       "newarticle": "(Nevo)",
+       "newarticletext": "Avilyan kai ek patrin so na si.\nTe keres la, shai te shirdes (astares) te lekhaves ando telutno moxton (dikh [$1 zhutipnaski patrin] te janes buteder).\nKana avilyan kathe doshatar, ja palpale.",
+       "noarticletext": "Andi '''{{SITENAME}}''' nai ji akana ek lekh kadale anavesa.\n* Te shirdes (astares) te keres o lekh, ker klik  '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} kathe]'''.",
+       "editing": "Editisaripen $1",
+       "yourtext": "Tiro teksto",
+       "storedversion": "Akanutni versiya",
+       "yourdiff": "Ververimata",
+       "previousrevision": "← Purano paruvipen",
+       "nextrevision": "Nevi paruvipen →",
+       "cur": "akanutni",
+       "last": "purani",
+       "histlegend": "Xalyaripen: (akanutni) = ververimata mamui i akanutni versiya,\n(purani) = ververimata mamui i puraneder versiya, T = tikno editisaripen",
+       "histfirst": "O mai purano",
+       "histlast": "O mai nevo",
+       "revdelete-submit": "Ker kadya le alosarde paruvimatenge",
+       "compareselectedversions": "Dikh ververimata mashkar alosarde versiye",
+       "prevn": "mai neve {{PLURAL:$1|$1}}",
+       "nextn": "mai purane {{PLURAL:$1|$1}}",
+       "viewprevnext": "Dikh ($1 {{int:pipe-separator}} $2) ($3).",
+       "showingresults": "Tele si <b>$1</b> rezultaturya shirdindoi le ginestar <b>$2</b>.",
+       "preferences": "Kamimata",
+       "prefs-skin": "Dikhimos",
+       "datedefault": "Ni ekh kamipen",
+       "prefs-rc": "Neve paruvimata",
+       "saveprefs": "Uxtav le kamimata",
+       "columns": "Uche vortorina:",
+       "localtime": "Thanutno vaxt",
+       "guesstimezone": "Le les katar o browser",
+       "allowemail": "De drom te aven e-mailurya katar aver jene",
+       "default": "acharuno",
+       "prefs-files": "Failurya",
+       "youremail": "Emailesko adress (kana kames)*",
+       "yourrealname": "Tiro chacho anav*",
+       "yourlanguage": "Ćhib:",
+       "yournick": "I xarni versyunya, le semnaturenge",
+       "badsig": "Bilachhi semnatura; dikh le tagurya HTML.",
+       "editinguser": "Editisaripen '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+       "group": "Grupo:",
+       "group-bot": "Boturya",
+       "group-sysop": "Administratorurya",
+       "group-bureaucrat": "Birokraturya:",
+       "group-all": "(sa)",
+       "group-sysop-member": "Administratoro",
+       "group-bureaucrat-member": "Birokrato",
+       "grouppage-bot": "{{ns:project}}:Boturya",
+       "grouppage-sysop": "{{ns:project}}:Administratorurya",
+       "grouppage-bureaucrat": "{{ns:project}}:Birokraturya",
+       "recentchanges": "Neve paruvimata",
+       "recentchanges-summary": "Andi kadaya patrin shai te dikhes le neve paruvimata andi romani {{SITENAME}}.",
+       "rcnotefrom": "Tele si le averutnimata katar '''$2''' (inklen '''$1''' averutnimata, shai te paruves o gin alosarindoi aver tele).",
+       "rclistfrom": "Dikh le paruvimata ji kai $3 $2",
+       "rcshowhideminor": "$1 tikne editisaripena",
+       "rcshowhidebots": "$1 (ro)boturya",
+       "rcshowhideliu": "$1 prinjarde jene",
+       "rcshowhideanons": "$1 bijangle jene",
+       "rcshowhidepatr": "$1 dikhle paruvimata",
+       "rcshowhidemine": "$1 mire editisaripena",
+       "rclinks": "Dikh le palutne $1 paruvimata andar le palutne $2 divesa.<br />$3",
+       "diff": "ververipen",
+       "hist": "puranipen",
+       "hide": "garav",
+       "show": "dikh",
+       "minoreditletter": "t",
+       "number_of_watching_users_pageview": "[$1 jeno/e kon len vurma e patrinyaki]",
+       "rc_categories": "Numa le shopnya (rigyarde katar \"|\")",
+       "rc_categories_any": "Savegodi",
+       "recentchangeslinked": "Pashvipnaske paruvimata",
+       "recentchangeslinked-feed": "Pashvipnaske paruvimata",
+       "recentchangeslinked-toolbox": "Pashvipnaske paruvimata",
+       "upload": "Bichhal file",
+       "uploadbtn": "Bichhal file",
+       "filedesc": "Xarno xalyaripen",
+       "badfilename": "O chitrosko anav sas paruvdo; o nevo anav si \"$1\".",
+       "savefile": "Uxtav file",
+       "listfiles": "Patrinipen le chitrengo",
+       "file-anchor-link": "Chitro",
+       "imagelinks": "Chitroske phandimata",
+       "unusedtemplates": "Bilabyarde sikavne",
+       "unusedtemplateswlh": "aver phandimata",
+       "randompage": "Ekh patrin savigodi",
+       "statistics": "Beshimata",
+       "wantedpages": "Kamle pajine",
+       "shortpages": "Xarne patrya",
+       "deadendpages": "Biphandimatenge patrya",
+       "listusers": "Jenengo patrinipen",
+       "newpages": "Neve patrya",
+       "ancientpages": "E puraneder lekha",
+       "move": "Ingerdipen",
+       "allpages": "Savore patrya",
+       "nextpage": "Anglutni patrin ($1)",
+       "allarticles": "Sa le artikolurya",
+       "allpagessubmit": "Ja",
+       "emailuser": "Bichhal les/la e-mail",
+       "emailfrom": "Katar",
+       "emailto": "Karing",
+       "emailsend": "Bichhal",
+       "watchlist": "Dikhipnaske lekha",
+       "mywatchlist": "Dikhipnaske lekha",
+       "addedwatchtext": "I patrin \"[[:$1]]\" sas thovdi andi tiri lista [[Special:Watchlist|le artikolengi so dikhes len]].\nLe neve paruvimata andar kadale patrya thai andar lenge vakyarimatenge patrya thona kathe, vi dikhena pen le <b>thule semnurenca</b> andi patrin le [[Special:RecentChanges|neve paruvimatenge]].\n\nKana kamesa te khoses kadaya patrin andar tiri lista le patryange so arakhes len ker click kai \"Na mai arakh\" (opre, kana i patrin dikhel pes).",
+       "removedwatchtext": "I patrin \"[[:$1]]\" sas khosli katar o patrinipen le dikhipnaske lekhenca (artikolurya).",
+       "watch": "Dikh la",
+       "unwatch": "Na mai dikh",
+       "unwatchthispage": "Na mai dikh",
+       "wlnote": "Tele si le palutne $1 paruvimata ande palutne <b>$2</b> ore.",
+       "enotif_reset": "Thov semno kai patrya so dikhlem",
+       "deletepage": "Khos i patrin",
+       "confirm": "Ja",
+       "excontent": "o ander sas: '$1'",
+       "excontentauthor": "o ander sas: '$1' (thai o korkoro butyarno sas '$2')",
+       "historywarning": "Dikh! La patrya so kames to khoses la si la puranipen:",
+       "actioncomplete": "Agorisardi buti",
+       "deletedtext": "\"$1\" sas khosli.\nDikh ando $2 ek patrinipen le palutne butyange khosle.",
+       "rollback_short": "Palemavilipen",
+       "rollbacklink": "palemavilipen",
+       "rollbackfailed": "O palemavilipen nashtisardyas te kerel pes.",
+       "prot_1movedto2": "[[$1]] bichhaldo kai [[$2]]",
+       "undelete": "Dikh le khosle patrya",
+       "undeletebtn": "Le palpale",
+       "namespace": "Rig:",
+       "invert": "Bi rigyako:",
+       "contributions": "Jeneske butya",
+       "mycontris": "Mire butya",
+       "contribsub2": "Katar $1 ($2)",
+       "uctop": "(opre)",
+       "whatlinkshere": "So phandel pes kathe",
+       "nolinkshere": "Ni ek patrin phandel pes (avel) kathe.",
+       "blockip": "De avri jenes/IP",
+       "ipbsubmit": "De avri kadava jenes",
+       "ipusubmit": "Na mai brakh i adresa",
+       "contribslink": "butya",
+       "lockbtn": "Brakh i database",
+       "unlockbtn": "Na mai brakh i database",
+       "movearticle": "Inger i patrin",
+       "movepagebtn": "Inger i patrin",
+       "pagemovedsub": "I patrin sas bićhaldi.",
+       "delete_and_move": "Khos thai inger",
+       "export-submit": "Bichhal avri",
+       "allmessages": "Sistemoske duma",
+       "allmessagesname": "Anav",
+       "import-interwiki-submit": "Le andre",
+       "tooltip-pt-userpage": "Miri labyarneski pajina",
+       "tooltip-pt-anonuserpage": "Miri labyarneski pajina ki akanutni IP adress",
+       "tooltip-pt-mytalk": "Miri diskuciyaki pajina",
+       "tooltip-pt-anontalk": "Diskucie le editisarimatenge ki akanutni IP adress",
+       "tooltip-pt-preferences": "Sar kamav te dikhel pes miri pajina",
+       "tooltip-pt-watchlist": "I lista le pajinenge so dikhav lendar (monitorizav).",
+       "tooltip-pt-mycontris": "Le mire editisarimata",
+       "tooltip-pt-login": "Mishto si te identifikares tut, pale na si musai.",
+       "tooltip-pt-logout": "Kathe aćhaves i sesiyunya",
+       "tooltip-ca-talk": "Diskuciya le artikoleske",
+       "tooltip-ca-edit": "Shai te editisares kadaya pajina. Mangas te paledikhes o teksto anglal te uxtaves les.",
+       "tooltip-ca-addsection": "Kathe shai te thos ek komentaryo ki kadaya diskuciya.",
+       "tooltip-ca-viewsource": "Kadaya pajina si brakhli. Shai numa te dikhes o source-code.",
+       "tooltip-ca-history": "Purane versiune le dokumenteske.",
+       "tooltip-ca-protect": "Brakh kadava dokumento.",
+       "tooltip-ca-delete": "Khos kadava dokumento.",
+       "tooltip-ca-undelete": "Palemthav le editisarimata kerdine le kadale dokumenteske sar sas anglal lesko khosipen.",
+       "tooltip-ca-move": "Trade kadava dokumento.",
+       "tooltip-ca-watch": "Thav kadava dokumento andi monitorizaripnaski lista.",
+       "tooltip-ca-unwatch": "Khos kadava dokumento andar i monitorizaripnaski lista.",
+       "tooltip-search": "Rod andi kadaya Wiki",
+       "tooltip-p-logo": "I sherutni pajina",
+       "tooltip-n-mainpage": "Dikh i sherutni pajina",
+       "tooltip-n-portal": "O proyekto, so shai te keres, kai arakhes solucie.",
+       "tooltip-n-currentevents": "Arakh janglimata le akanutne evenimenturenge",
+       "tooltip-n-recentchanges": "I lista le neve paruvimatenge kerdini andi kadaya wiki.",
+       "tooltip-n-randompage": "Ja ki ek aleatori pajina",
+       "tooltip-n-help": "O than kai arakhes zhutipen.",
+       "tooltip-t-whatlinkshere": "I lista sa le wiki pajinenge so aven (si phande) vi kathe",
+       "tooltip-t-recentchangeslinked": "Neve paruvimata andi kadaya pajina",
+       "tooltip-feed-rss": "Kathe te pravares o RSS flukso le kadale pajinyako",
+       "tooltip-feed-atom": "Kathe te pravares o Atom flukso le kadale pajinyako",
+       "tooltip-t-contributions": "Dikh i lista le editisarimatenge le kadale labyaresko",
+       "tooltip-t-emailuser": "Bićhal ek emailo le kadale labyareske",
+       "tooltip-t-upload": "Bićhal imajine vai media files",
+       "tooltip-t-specialpages": "I lista sa le spechiale pajinengi",
+       "tooltip-ca-nstab-main": "Dikh o artikolo",
+       "tooltip-ca-nstab-user": "Dikh i labyarengi pajina",
+       "tooltip-ca-nstab-media": "Dikh i pajina media",
+       "tooltip-ca-nstab-special": "Kadaya si ek spechiali pajina, nashti te editisares la.",
+       "tooltip-ca-nstab-project": "Dikh i pajina le proyekteski",
+       "tooltip-ca-nstab-image": "Dikh i imajinyaki pajina",
+       "tooltip-ca-nstab-mediawiki": "Dikh o mesajo le sistemesko",
+       "tooltip-ca-nstab-template": "Dikh o formato",
+       "tooltip-ca-nstab-help": "Dikh i zhutipnaski pajina",
+       "tooltip-ca-nstab-category": "Dikh i kategoriya",
+       "anonymous": "Bijangle labyarne kai {{SITENAME}}",
+       "siteuser": "Jeno kai {{SITENAME}} $1",
+       "lastmodifiedatby": "Kadaya patrin sas paruvdi agoreste $2, $1 katar $3.",
+       "others": "aver",
+       "siteusers": "Jeno/e kai {{SITENAME}} $1",
+       "deletedrevision": "Khoslo o purano paruvipen $1",
+       "previousdiff": "← Purano ververipen",
+       "nextdiff": "Anglutno paruvipen →",
+       "ilsubmit": "Rod",
+       "namespacesall": "savore",
+       "deletedwhileediting": "Dikh: Kadaya patrin sas khosli de kana shirdyas (astardyas) te editisares la!",
+       "confirm_purge_button": "Va",
+       "version": "Versiya",
+       "specialpages": "Uzalutne patrya"
 }
index ec60308..b8e413b 100644 (file)
        "category_header": "Pagini din categoria „$1”",
        "subcategories": "Subcategorii",
        "category-media-header": "Fișiere media din categoria „$1”",
-       "category-empty": "''Această categorie nu conține în acest moment niciun articol sau fișier media.''",
+       "category-empty": "''Această categorie nu conține momentan nici o pagină sau fișier media.''",
        "hidden-categories": "{{PLURAL:$1|Categorie ascunsă|Categorii ascunse}}",
        "hidden-category-category": "Categorii ascunse",
        "category-subcat-count": "{{PLURAL:$2|Această categorie conține doar următoarea subcategorie.|Această categorie conține {{PLURAL:$1|următoarea subcategorie|următoarele $1 subcategorii|următoarele $1 de subcategorii}}, dintr-un total de $2.}}",
        "otherlanguages": "În alte limbi",
        "redirectedfrom": "(Redirecționat de la $1)",
        "redirectpagesub": "Pagină de redirecționare",
+       "redirectto": "Redirecționare către:",
        "lastmodifiedat": "Ultima modificare efectuată la $2, $1.",
        "viewcount": "Pagina a fost vizitată {{PLURAL:$1|o dată|de $1 ori|de $1 de ori}}.",
        "protectedpage": "Pagină protejată",
        "viewsourcetext": "Se poate vizualiza și copia conținutul acestei pagini:",
        "viewyourtext": "Se poate vizualiza și copia conținutul '''modificărilor dumneavoastră''' efectuate asupra acestei pagini:",
        "protectedinterface": "Această pagină asigură textul interfeței pentru software și este protejată pentru a preveni abuzurile.\nPentru a adăuga sau modifica traduceri corespunzătoare tuturor wikiurilor, utilizați [//translatewiki.net/ translatewiki.net], proiectul MediaWiki de localizare.",
-       "editinginterface": "'''Avertizare''': Modificați o pagină care este folosită pentru a furniza textul interfeței software.\nModificările aduse acestei pagini vor afecta aspectul interfeței pentru alți utilizatori ai acestui wiki.\nPentru a adăuga sau modifica traduceri corespunzătoare tuturor wikiurilor, utilizați [//translatewiki.net/ translatewiki.net], proiectul MediaWiki de localizare.",
+       "editinginterface": "<strong>Avertizare</strong>: Modificați o pagină care este folosită pentru a furniza textul interfeței software.\nModificările aduse acestei pagini vor afecta aspectul interfeței pentru alți utilizatori ai acestui wiki.",
+       "translateinterface": "Pentru a adăuga sau modifica traduceri corespunzătoare tuturor wikiurilor, utilizați [//translatewiki.net/ translatewiki.net], proiectul MediaWiki pentru localizare.",
        "cascadeprotected": "Această pagină a fost protejată la scriere deoarece este inclusă în {{PLURAL:$1|următoarea pagină|următoarele pagini}}, care {{PLURAL:$1|este protejată|sunt protejate}} în cascadă:\n$2",
        "namespaceprotected": "Nu aveți permisiunea de a modifica pagini din spațiul de nume '''$1'''.",
        "customcssprotected": "Nu aveți permisiunea de a modifica această pagină CSS, deoarece conține setările personale ale altui utilizator.",
        "createaccount-text": "Cineva a creat un cont asociat adresei dumneavoastră de e-mail pe {{SITENAME}} ($4) numit „$2” și având parola „$3”.\nEste de dorit să vă autentificați și să schimbați parola cât mai repede.\n\nIgnorați acest mesaj dacă crearea contului s-a produs în urma unei greșeli.",
        "login-throttled": "Ați avut prea multe încercări recente de a vă autentifica.\nVă rugăm să așteptați $1 până să reîncercați.",
        "login-abort-generic": "Procesul de autentificare a eșuat și a fost abandonat",
+       "login-migrated-generic": "Contul dumneavoastră a fost migrat, iar numele de utilizator nu mai există pe acest wiki.",
        "loginlanguagelabel": "Limba: $1",
        "suspicious-userlogout": "Cererea dumneavoastră de a închide sesiunea a fost refuzată întrucât pare că a fost trimisă printr-o eroare a navigatorului sau de un proxy memorat în cache.",
        "createacct-another-realname-tip": "Numele real este opțional.\nDacă decideți furnizarea sa, acesta va fi folosit pentru a atribui utilizatorului munca sa.",
        "passwordreset-emailsent-capture": "Un mesaj de resetare a parolei a fost trimis, fiind afișat mai jos.",
        "passwordreset-emailerror-capture": "Un mesaj de resetare a parolei a fost generat (fiind afișat mai jos), dar trimiterea sa către {{GENDER:$2|utilizator}} a eșuat: $1",
        "changeemail": "Modificare adresă de e-mail",
-       "changeemail-header": "Modificare adresă de e-mail asociată contului",
        "changeemail-text": "Completați acest formular pentru a vă modifica adresa de e-mail. Va trebui să introduceți și parola pentru a confirma această modificare.",
        "changeemail-no-info": "Trebuie să fiți autentificat pentru a accesa această pagină direct.",
        "changeemail-oldemail": "Adresa de e-mail actuală:",
        "changeemail-none": "(niciuna)",
        "changeemail-password": "Parola dumneavoastră la {{SITENAME}}:",
        "changeemail-submit": "Modifică adresa de e-mail",
-       "changeemail-cancel": "Revocare",
        "changeemail-throttled": "Ați avut prea multe încercări de a vă autentifica.\nVă rugăm să așteptați $1 până să reîncercați.",
        "resettokens": "Resetare jetoane",
        "resettokens-text": "Puteți reseta, aici, jetoanele care permit accesul la anumite date asociate contului dumneavoastră.\n\nAr trebui să faceți acest lucru numai dacă le-ați partajat accidental cu altcineva ori contul dumneavoastră a fost compromis.",
        "showpreview": "Previzualizare",
        "showdiff": "Afișare diferențe",
        "blankarticle": "<strong>Atenție:</strong> Pagina pe care o creați este goală.\nDacă faceți din nou clic pe „{{int:savearticle}}”, pagina va fi creată fără niciun conținut.",
-       "anoneditwarning": "'''Atenție:''' Nu v-ați autentificat. Adresa IP vă va fi înregistrată în istoricul acestei pagini.",
+       "anoneditwarning": "<strong>Atenție:</strong> Nu v-ați autentificat. Adresa dumneavoastră IP va fi vizibilă în mod public dacă efectuați modificări. Dacă vă <strong>[$1 autentificați]</strong> sau vă <strong>[$2 creați un cont]</strong>, modificările dumneavoastră vor fi asociate numelui de utilizator, pe lângă alte beneficii.",
        "anonpreviewwarning": "''Nu v-ați autentificat. Dacă salvați pagina adresa dumneavoastră IP va fi înregistrată în istoric.''",
        "missingsummary": "'''Atenție:''' Nu ați completat caseta „descriere modificări”. Dacă apăsați din nou butonul „salvează pagina” modificările vor fi salvate fără descriere.",
        "missingcommenttext": "Vă rugăm să introduceți un comentariu.",
        "editingsection": "modificare $1 (secțiune)",
        "editingcomment": "Modificare $1 (secțiune nouă)",
        "editconflict": "Conflict de modificare: $1",
-       "explainconflict": "Altcineva a modificat această pagină de când ați început editarea.\nCaseta de text de sus conține pagina așa cum este ea acum (după editarea celeilalte persoane).\nPagina cu modificările dumneavoastră (așa cum ați încercat să o salvați) se află în caseta de jos.\nVa trebui să editați manual caseta de sus pentru a reflecta modificările pe care tocmai le-ați făcut în cea de jos.\n'''Numai''' textul din caseta de sus va fi salvat atunci când veți apăsa pe „{{int:savearticle}}”.",
+       "explainconflict": "Altcineva a modificat această pagină de când ați început editarea.\nZona de text din partea de sus conține pagina așa cum este ea acum (după editarea celeilalte persoane).\nModificările dumneavoastră sunt afișate în zona de text inferioară.\nVa trebui să vă uniți modificările cu textul deja existent.\n<strong>Doar</strong> textul din zona de text superioară va fi salvat atunci când veți apăsa „{{int:savearticle}}”.",
        "yourtext": "Textul dumneavoastră",
        "storedversion": "Versiunea curentă",
        "nonunicodebrowser": "'''Atenție: Navigatorul dumneavoastră nu este compatibil cu Unicode.'''\nÎn schimb, există o soluție care vă permite să modificați paginile în siguranță: caracterele non-ASCII vor fi afișate în caseta de editare drept coduri hexazecimale.",
        "content-model-text": "text simplu",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Pagini care folosesc argumente duplicate în apelarea formatelor",
+       "duplicate-args-category-desc": "Pagina conține apelări ale formatelor care folosesc argumente duplicate, cum ar fi <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> sau <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Atenție: Această pagină conține prea multe apelări costisitoare ale funcțiilor parser.\n\nAr trebui să existe mai puțin de $2 {{PLURAL:$2|apelare|apelări}}, acolo există {{PLURAL:$1|$1 apelare|$1 apelări}}.",
        "expensive-parserfunction-category": "Pagini cu prea multe apelări costisitoare de funcții parser",
        "post-expand-template-inclusion-warning": "Atenție: Formatele incluse sunt prea mari.\nUnele formate nu vor fi incluse.",
        "mergehistory-box": "Combină reviziile a două pagini:",
        "mergehistory-from": "Pagina sursă:",
        "mergehistory-into": "Pagina destinație:",
-       "mergehistory-list": "Istoricul la care se aplică combinarea",
-       "mergehistory-merge": "Următoarele versiuni ale [[:$1]] pot fi combinate în [[:$2]].\nFolosiți coloana butonului radio pentru a combina doar versiunile create la și înainte de momentul specificat.\nFolosirea linkurilor de navigare va reseta această coloană.",
+       "mergehistory-list": "Istoricul la care se aplică unificarea",
+       "mergehistory-merge": "Următoarele versiuni ale paginii [[:$1]] pot fi unite în [[:$2]].\nFolosiți coloana butonului radio pentru a uni doar versiunile create la și înainte de momentul specificat.\nFolosirea legăturilor de navigare va reseta această coloană.",
        "mergehistory-go": "Vezi modificările care pot fi combinate",
-       "mergehistory-submit": "Unește reviziile",
-       "mergehistory-empty": "Reviziile nu pot fi combinate.",
+       "mergehistory-submit": "Unește versiunile",
+       "mergehistory-empty": "Nicio versiune nu poate fi unită.",
        "mergehistory-success": "$3 {{PLURAL:$3|versiune|versiuni|de versiuni}} ale [[:$1]] {{PLURAL:$3|a fost unită|au fost unite|au fost unite}} cu succes în [[:$2]].",
        "mergehistory-fail": "Nu se poate executa combinarea istoricului, te rog verifică parametrii pagină și timp.",
        "mergehistory-fail-toobig": "Nu s-a putut efectua unirea istoricelor întrucât s-ar fi depășit limita de $1 {{PLURAL:$1|versiune|versiuni|de versiuni}} mutat{{PLURAL:$1|ă|e}}.",
        "mergehistory-no-destination": "Pagina de destinație $1 nu există.",
        "mergehistory-invalid-source": "Pagina sursă trebuie să aibă un titlu valid.",
        "mergehistory-invalid-destination": "Pagina de destinație trebuie să aibă un titlu valid.",
-       "mergehistory-autocomment": "Combinat [[:$1]] în [[:$2]]",
+       "mergehistory-autocomment": "Unit [[:$1]] în [[:$2]]",
        "mergehistory-comment": "Combinat [[:$1]] în [[:$2]]: $3",
        "mergehistory-same-destination": "Paginile sursă și destinație nu pot fi identice",
        "mergehistory-reason": "Motiv:",
        "mergelog": "Jurnal unificări",
-       "pagemerge-logentry": "combină [[$1]] cu [[$2]] (versiuni până la $3)",
        "revertmerge": "Anulează îmbinarea",
        "mergelogpagetext": "Mai jos este o listă a celor mai recente combinări ale istoricului unei pagini cu al alteia.",
        "history-title": "Istoricul versiunilor pentru „$1”",
        "search-result-category-size": "$1 {{PLURAL:$1|element|elemente}} ($2 {{PLURAL:$2|categorie|categorii}}, $3 {{PLURAL:$3|fișier|fișiere}})",
        "search-redirect": "(redirecționare de la $1)",
        "search-section": "(secțiunea $1)",
+       "search-category": "(categoria $1)",
        "search-file-match": "(se regăsește în conținutul fișierului)",
        "search-suggest": "V-ați referit la: $1",
        "search-interwiki-caption": "Proiecte înrudite",
        "searchall": "toate",
        "showingresults": "Mai jos {{PLURAL:$1|apare '''1''' rezultat|apar '''$1''' rezultate|apar '''$1''' de rezultate}} începând cu nr. <b>$2</b>.",
        "showingresultsinrange": "Mai jos se afișează un număr de până la {{PLURAL:$1|<strong>1</strong> rezultat|<strong>$1</strong> rezultate|<strong>$1</strong> de rezultate}} din intervalul #<strong>$2</strong> la #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Rezultatul '''$1''' din '''$3'''|Rezultatele '''$1 - $2''' din '''$3'''}} pentru '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Rezultatul <strong>$1</strong> din <strong>$3</strong>|Rezultatele <strong>$1 - $2</strong> din <strong>$3</strong>}}",
        "search-nonefound": "Nu sunt rezultate conforme interogării.",
        "powersearch-legend": "Căutare avansată",
        "powersearch-ns": "Căutare în spațiile de nume:",
        "gender-female": "Ea modifică pagini wiki",
        "prefs-help-gender": "Stabilirea acestei preferințe este opțională.\nAcest software folosește datele pentru a vi se adresa și pentru a face referire la dumneavoastră utilizând genul gramatical corespunzător.\nAceastă informație va fi publică.",
        "email": "E-mail",
-       "prefs-help-realname": "Numele real este opțional.\nDacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.",
+       "prefs-help-realname": "Numele real este opțional.\nDacă este furnizat, ar putea fi folosit pentru a vă atribui munca.",
        "prefs-help-email": "Adresa de e-mail este opțională, dar este necesară pentru recuperarea parolei în cazul în care o uitați.",
        "prefs-help-email-others": "Puteți de asemenea permite altora să vă contacteze prin intermediul paginii dumneavoastră de utilizator fără a vă divulga identitatea.",
        "prefs-help-email-required": "Adresa de e-mail este necesară.",
        "prefs-tokenwatchlist": "Jeton",
        "prefs-diffs": "Diferențe",
        "prefs-help-prefershttps": "Această preferință va avea efect la următoarea autentificare.",
+       "prefswarning-warning": "Ați efectuat modificări asupra preferințelor dumneavoastră, care nu au fost încă salvate.\nDacă părăsiți această pagină fără a apăsa butonul „$1”, preferințele dumnevoastră nu se vor actualiza.",
        "prefs-tabs-navigation-hint": "Sfat: Puteți folosi tastele săgeată stânga și dreapta pentru a naviga între filele din cadrul listei de file.",
        "email-address-validity-valid": "Adresa de e-mail pare validă",
        "email-address-validity-invalid": "Introduceți o adresă de e-mail validă",
        "statistics": "Statistici",
        "statistics-header-pages": "Statistici pagini",
        "statistics-header-edits": "Statistici modificări",
-       "statistics-header-views": "Vizualizează statisticile",
        "statistics-header-users": "Statistici utilizatori",
        "statistics-header-hooks": "Alte statistici",
        "statistics-articles": "Articole",
        "statistics-files": "Fișiere încărcate",
        "statistics-edits": "Modificări de la instalarea proiectului {{SITENAME}}",
        "statistics-edits-average": "Media editărilor pe pagină",
-       "statistics-views-total": "Număr de vizualizări",
-       "statistics-views-total-desc": "Vizualizările paginilor inexistente și a paginilor speciale nu sunt incluse",
-       "statistics-views-peredit": "Vizualizări pe editare",
        "statistics-users": "[[Special:ListUsers|Utilizatori]] înregistrați",
        "statistics-users-active": "Utilizatori activi",
        "statistics-users-active-desc": "Utilizatori care au efectuat o acțiune în {{PLURAL:$1|ultima zi|ultimele $1 zile}}",
-       "statistics-mostpopular": "Paginile cele mai vizualizate",
        "pageswithprop": "Pagini cu o proprietate de pagină",
        "pageswithprop-legend": "Pagini cu o proprietate de pagină",
        "pageswithprop-text": "Această pagină listează paginile care utilizează o anumită proprietate de pagină.",
        "uncategorizedtemplates": "Formate necategorizate",
        "unusedcategories": "Categorii neutilizate",
        "unusedimages": "Pagini neutilizate",
-       "popularpages": "Pagini populare",
        "wantedcategories": "Categorii dorite",
        "wantedpages": "Pagini dorite",
        "wantedpages-badtitle": "Titlu invalid în rezultatele : $1",
        "pager-older-n": "{{PLURAL:$1|1|$1}} mai vechi",
        "suppress": "Oversight",
        "querypage-disabled": "Această pagină specială este dezactivată din motive de performanță.",
+       "apihelp": "Ajutor API",
+       "apihelp-no-such-module": "Modulul „$1” nu a fost găsit.",
        "booksources": "Surse de cărți",
        "booksources-search-legend": "Căutare surse pentru cărți",
-       "booksources-go": "Salt",
+       "booksources-search": "Caută",
        "booksources-text": "Mai jos se află o listă de legături înspre alte situri care vând cărți noi sau vechi și care pot oferi informații suplimentare despre cărțile pe care le căutați:",
        "booksources-invalid-isbn": "Codul ISBN oferit nu este valid; verificați dacă a fost copiat corect de la sursa originală.",
        "specialloguserlabel": "Executant:",
        "mywatchlist": "Pagini urmărite",
        "watchlistfor2": "Pentru $1 $2",
        "nowatchlist": "Lista dumneavoastră de pagini urmărite nu conține nici o pagină.",
-       "watchlistanontext": "Vă rugăm să vă autentificați pentru a vizualiza sau modifica elementele din lista dumneavoastră de pagini urmărite.",
+       "watchlistanontext": "Vă rugăm să vă autentificați pentru a consulta și modifica lista de pagini urmărite.",
        "watchnologin": "Nu sunteți autentificat",
        "addwatch": "Adăugă la lista de pagini urmărite",
        "addedwatchtext": "Pagina „[[:$1]]” a fost adăugată în lista dumneavoastră de [[Special:Watchlist|pagini urmărite]].\nModificările viitoare efectuate asupra acestei pagini dar și asupra paginii de discuție asociată vor fi listate acolo.",
        "wlheader-enotif": "Notificarea prin e-mail este activată.",
        "wlheader-showupdated": "Paginile care au fost modificate după ultima dumneavoastră vizită sunt afișate '''îngroșat'''.",
        "wlnote": "Mai jos se află {{PLURAL:$1|ultima schimbare|ultimele <strong>$1</strong> schimbări|ultimele <strong>$1</strong> de schimbări}} din {{PLURAL:$2|ultima oră|ultimele <strong>$2</strong> ore|ultimele <strong>$2</strong> de ore}}, așa cum era situația la $3, $4.",
-       "wlshowlast": "Arată ultimele $1 ore $2 zile $3",
+       "wlshowlast": "Arată ultimele $1 ore $2 zile",
        "watchlist-options": "Opțiuni listă de pagini urmărite",
        "watching": "Se urmărește...",
        "unwatching": "Așteptați...",
        "protect-othertime": "Alt termen:",
        "protect-othertime-op": "alt termen",
        "protect-existing-expiry": "Data expirării: $3, $2",
+       "protect-existing-expiry-infinity": "Data expirării: nelimitat",
        "protect-otherreason": "Motiv diferit/adițional:",
        "protect-otherreason-op": "Alt motiv",
        "protect-dropdown": "*Motive uzuale de protejare\n** Vandalism excesiv\n** SPAM excesiv\n** Modificări neproductive\n** Pagină cu trafic mare",
        "unblocked": "[[User:$1|$1]] a fost deblocat",
        "unblocked-range": "$1 a fost deblocat",
        "unblocked-id": "Blocarea $1 a fost eliminată",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] a fost deblocat.",
        "blocklist": "Utilizatori blocați",
        "ipblocklist": "Utilizatori blocați",
        "ipblocklist-legend": "Găsire utilizator blocat",
        "tooltip-pt-mycontris": "Listă de contribuții",
        "tooltip-pt-login": "Sunteți încurajat să vă autentificați, deși acest lucru nu este obligatoriu.",
        "tooltip-pt-logout": "Închide sesiunea de lucru",
+       "tooltip-pt-createaccount": "Vă încurajăm să vă creați un cont și să vă autentificați; totuși, nu este obligatoriu",
        "tooltip-ca-talk": "Discuții despre această pagină",
        "tooltip-ca-edit": "Puteți modifica această pagină. Înainte de a o salva vă rugăm s-o previzualizați.",
        "tooltip-ca-addsection": "Adaugă o nouă secțiune.",
        "tooltip-feed-atom": "Alimentează fluxul Atom pentru această pagină",
        "tooltip-t-contributions": "Vezi lista de contribuții ale acestui utilizator",
        "tooltip-t-emailuser": "Trimite un e-mail acestui utilizator",
+       "tooltip-t-info": "Mai multe informații despre această pagină",
        "tooltip-t-upload": "Încărcare de fișiere",
        "tooltip-t-specialpages": "Lista tuturor paginilor speciale",
        "tooltip-t-print": "Versiunea de tipărit a acestei pagini",
        "pageinfo-robot-policy": "Indexare de către roboți",
        "pageinfo-robot-index": "Permisă",
        "pageinfo-robot-noindex": "Nepermisă",
-       "pageinfo-views": "Număr de vizualizări",
        "pageinfo-watchers": "Număr de utilizatori care urmăresc pagina",
        "pageinfo-few-watchers": "Mai puțin de {{PLURAL:$1|un urmăritor|$1 urmăritori|$1 de urmăritori}}",
        "pageinfo-redirects-name": "Număr de redirecționări către această pagină",
        "exif-urgency-low": "Scăzut ($1)",
        "exif-urgency-high": "Ridicat ($1)",
        "exif-urgency-other": "Prioritate definită de utilizator ($1)",
-       "watchlistall2": "toate",
        "namespacesall": "toate",
        "monthsall": "toate",
        "confirmemail": "Confirmare adresă e-mail",
        "unknown_extension_tag": "Extensie etichetă necunoscută „$1”",
        "duplicate-defaultsort": "'''Atenție:''' Cheia de sortare implicită („$2”) o înlocuiește pe precedenta („$1”).",
        "duplicate-displaytitle": "<strong>Atenție:</strong> Titlul afișat „$2” înlocuieşte titlul afișat anterior, „$1”.",
+       "invalid-indicator-name": "<strong>Eroare:</strong> Parametrul <code>nume</code> al indicatorilor de stare a paginii nu trebuie să fie gol.",
        "version": "Versiune",
        "version-extensions": "Extensii instalate",
        "version-skins": "Aspecte instalate",
        "revdelete-uname-unhid": "numele de utilizator afișat",
        "revdelete-restricted": "restricții aplicate administratorilor",
        "revdelete-unrestricted": "restricții eliminate pentru administratori",
+       "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-move-move_redir": "$1 {{GENDER:$2|a redenumit}} pagina $3 în $4 înlocuind redirecționarea",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|a încărcat}} o nouă versiune pentru $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|a încărcat}} $3",
        "rightsnone": "(niciunul)",
+       "revdelete-summary": "descrierea modificărilor",
        "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:",
        "log-description-pagelang": "Acesta este un jurnal cu modificări ale limbii paginilor.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a modificat}} limba paginii pentru $3 din $4 în $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activat)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''dezactivat''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''dezactivat''')",
+       "mediastatistics": "Statistici multimedia",
+       "mediastatistics-summary": "Statistici despre tipurile fișierelor încărcate. Sunt incluse doar cele mai recente versiuni ale fișierelor. Versiunile mai vechi sau șterse ale fișierelor sunt excluse.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 octet|$1 octeți|$1 de octeți}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "Tip MIME",
+       "mediastatistics-table-extensions": "Extensii posibile",
+       "mediastatistics-table-count": "Număr de fișiere",
+       "mediastatistics-table-totalbytes": "Dimensiune combinată",
+       "mediastatistics-header-unknown": "Necunoscut",
+       "mediastatistics-header-bitmap": "Imagini bitmap",
+       "mediastatistics-header-drawing": "Desene (imagini vectoriale)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Videoclipuri",
+       "mediastatistics-header-multimedia": "Multimedia complexe",
+       "mediastatistics-header-office": "Documente",
+       "mediastatistics-header-text": "Text",
+       "mediastatistics-header-executable": "Executabile",
+       "mediastatistics-header-archive": "Formate comprimate",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|virgulă|virgule|de virgule}} în exces înlăturat{{PLURAL:$1|ă|e}} din JSON",
+       "json-error-unknown": "A apărut o problemă cu JSON. Eroare: $1",
+       "json-error-depth": "S-a depășit adâncimea maximă a stivei",
+       "json-error-state-mismatch": "JSON deformat sau incorect",
+       "json-error-ctrl-char": "Eroare în caracterul de control, posibil incorect codificat",
+       "json-error-syntax": "Eroare de sintaxă",
+       "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"
 }
index 6bdaff5..3e851b8 100644 (file)
@@ -5,7 +5,8 @@
                        "Kaganer",
                        "McDutchie",
                        "Reder",
-                       "아라"
+                       "아라",
+                       "C.R."
                ]
        },
        "tog-underline": "Collegaminde sottolinèate:",
        "passwordreset-emailsent-capture": "'Na e-mail pe azzeramende d'a passuord ha state mannate, ca jè fatte vedè aqquà sotte.",
        "passwordreset-emailerror-capture": "'Na e-mail de azzeramende d'a passuord ha state generate, ca jè fatte vedè aqquà sotte, ma 'u 'nvie a {{GENDER:$2|l'utende}} ha fallite: $1",
        "changeemail": "Cange 'u 'ndirizze e-mail",
-       "changeemail-header": "Cange 'u 'ndirizze e-mail d'u cunde",
        "changeemail-text": "Comblete stu module pe cangià 'u 'ndirizze mail tune. Tu è abbesogne de sckaffà 'a passuord toje pe confermà 'u cangiamende.",
        "changeemail-no-info": "Tu a essere collegate pe accedere a sta pàgene direttamende.",
        "changeemail-oldemail": "Indirizze e-mail de mò:",
        "changeemail-none": "(ninde)",
        "changeemail-password": "'A passuord tue de {{SITENAME}}:",
        "changeemail-submit": "Cange e-mail",
-       "changeemail-cancel": "Annulle",
        "resettokens": "Azzere le gettone",
        "resettokens-text": "Tu puè azzerà le gettone le quale te donne l'accesse a certe date private collegate cu 'u cunde tune aqquà.\n\nTu avissa farle ce pe sbaglie l'è condivise cu otre o ce 'u cunde tune ha state combromesse.",
        "resettokens-no-tokens": "Non ge stonne gettone de azzerà.",
        "mergehistory-reason": "Mutive:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Archivije de le scuagghiaminde",
-       "pagemerge-logentry": "scuagghiate [[$1]] jndr'à [[$2]] (revisiune fine a $3)",
        "revertmerge": "Squascie",
        "mergelogpagetext": "Stte stè 'na liste de le cchiù recende scuagghiaminde de le cunde de le vosce jndr'à 'n'otre.",
        "history-title": "$1: Cunde de le revisiune",
        "searchrelated": "colleghete",
        "searchall": "tutte",
        "showingresults": "Stoche a fazze vedè aqquà sotte {{PLURAL:$1|'''1''' resultete|'''$1''' resultete}} ca accumenzene cu #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Resultate '''$1''' de '''$3'''|Resultate '''$1 - $2''' de '''$3'''}} pe '''$4'''",
        "search-nonefound": "Non ge stonne resultete ca soddisfecene l'inderrogazione.",
        "powersearch-legend": "Ricerche avanzete",
        "powersearch-ns": "Cirche jndr'à le namespace:",
        "randomincategory": "Pàggene a uecchije jndr'à categorije",
        "randomincategory-invalidcategory": "\"$1\" non g'è 'nu nome d'a categorije valide.",
        "randomincategory-nopages": "Non ge stonne pàggene jndr'à [[:Category:$1]].",
-       "randomincategory-selectcategory": "Pigghie pàggene a uecchije da 'a categorije: $1 $2.",
-       "randomincategory-selectcategory-submit": "Véje",
        "randomredirect": "Redirezionamende a uecchie",
        "randomredirect-nopages": "Non ge stonne redirezionaminde jndr'à 'u namespace \"$1\".",
        "statistics": "Statisteche",
        "statistics-header-pages": "Pàgene de le statisteche",
        "statistics-header-edits": "Cange le statisteche",
-       "statistics-header-views": "Vide le statisteche",
        "statistics-header-users": "Statisteche de l'utende",
        "statistics-header-hooks": "Otre statisteche",
        "statistics-articles": "Pàggene de le condenute",
        "statistics-files": "File carechete",
        "statistics-edits": "Cangiaminde de le pàggene da quanne sta {{SITENAME}} ha state ccrejete",
        "statistics-edits-average": "Cangiaminde medie pe pàgene",
-       "statistics-views-total": "Visite totele",
-       "statistics-views-total-desc": "Le viste cu le pàggene inesistende e le pàggene speciale non ge sonde ingluse",
-       "statistics-views-peredit": "Visite pe cangiaminde",
        "statistics-users": "[[Special:ListUsers|Utinde reggistrete]]",
        "statistics-users-active": "Utinde attive",
        "statistics-users-active-desc": "Sonde l'utinde ca onne fatte quacchecose jndr'à l'urteme {{PLURAL:$1|giurne|$1 giurne}}",
-       "statistics-mostpopular": "Pàggene cchiù visitete",
        "pageswithprop": "Pàggene cu 'na probbietà d'a pàgene",
        "pageswithprop-legend": "Pàggene cu 'na probbietà d'a pàgene",
        "pageswithprop-text": "Sta pàgene elenghe le pàggene ca ausane 'na particolare probbietà d'a pàgene.",
        "uncategorizedtemplates": "Template senza categorije",
        "unusedcategories": "Categorije ca non ge sonde ausete",
        "unusedimages": "Fail ca non g'avènene ausete",
-       "popularpages": "Pàggene cchiù canusciute",
        "wantedcategories": "Categorije cerchete",
        "wantedpages": "Pàggene cchiù cerchete",
        "wantedpages-badtitle": "Titele invalide in mmienze a l'inzieme de le resultate: $1",
        "booksources": "Sorgende de le libbre",
        "booksources-search-legend": "Cirche pe le fonde de le libbre",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Veje",
+       "booksources-search": "Cirche",
        "booksources-text": "Sotte stè 'na liste de collegaminde a otre site ca vennene libbre nuève e ausete e puà pure acchià cchiù 'mbormaziune sus a le libbre ca tu ste cirche:",
        "booksources-invalid-isbn": "L'ISBN ca è mise non ge pare ca ète corrette; verifiche ce è commesse quacche errore quanne ste cupiave quidde origginale.",
        "specialloguserlabel": "'Mblemendatore:",
        "mywatchlist": "Pàggene condrollate",
        "watchlistfor2": "Pe $1 $2",
        "nowatchlist": "Non ge tine pàggene jndr'à liste de le pàggene condrollete.",
-       "watchlistanontext": "Pe piacere $1 pe vedè o cangià le vosce sus a liste de le pàggene condrollete.",
+       "watchlistanontext": "Pe piacere tràse pe 'ndrucà o cangià le vosce sus l'elenghe de le pàggene condrollate.",
        "watchnologin": "Non ge sinde colleghete",
        "addwatch": "Mitte jndr'à le pàggene condrollate",
        "addedwatchtext": "'A pàgene \"[[:$1]]\" ha state aggiunde jndr'à le [[Special:Watchlist|pàggene condrollate]].\nLe cangiaminde future a sta pàgene e 'a pàgene de le 'ngazzaminde associete le puè acchià aqquà.",
        "wlheader-enotif": "* Notifiche pe email abbilitate.",
        "wlheader-showupdated": "* Le pàggene ca onne state cangiate da l'urtema visite avènene fatte vedè in '''grascette'''",
        "wlnote": "Aqquà sotte {{PLURAL:$1|ste l'urteme cangiamende|stonne l'urteme '''$1''' cangiaminde}} jndr'à {{PLURAL:$2|l'urtema ore|l'urteme '''$2''' ore}}, jndr'à $3, $4.",
-       "wlshowlast": "Vide l'urteme $1 ore $2 sciurne $3",
+       "wlshowlast": "Vide l'urteme $1 ore $2 sciurne",
        "watchlist-options": "Opzione d'a liste de le pàggene condrollete",
        "watching": "Fà vedè...",
        "unwatching": "No fà vedè...",
        "undelete-search-submit": "Cirche",
        "undelete-no-results": "Non ge stonne pàggene acchiate jndr'à l'archivije de le scangellaminde.",
        "undelete-filename-mismatch": "Non ge pozze repristinà 'a revisione d'u file cu orarie $1: nome d'u file errate",
-       "undelete-bad-store-key": "Cannot undelete file revision with timestamp $1: file was missing before deletion.\nNon ge pozze repristinà 'a revisione d'u file cu orarie $1: 'u file ha state perdute apprime da scangellazione.",
+       "undelete-bad-store-key": "Non ge pozze repristinà 'a revisione d'u file cu orarie $1: 'u file ha state perdute apprime da scangellazione.",
        "undelete-cleanup-error": "Errore scangellanne 'n'archivije de file non ausate \"$1\".",
-       "undelete-missing-filearchive": "Non ge pozze repristinà 'u file archiviate cu ID $1 purcè non ge stè jndr'à 'u database.\nPò essere ca già ha state scangellate.",
+       "undelete-missing-filearchive": "Non ge pozze repristinà 'u file archiviate cu ID $1 purcè non ge stè jndr'à 'u database.\nPò essere ca già ha state repristinate.",
        "undelete-error": "Errore pàgene none scangellate",
        "undelete-error-short": "Errore file non recuperate: $1",
        "undelete-error-long": "Errore ca s'onne acchiate quanne amme pruvate a reprisitinà 'u file:\n\n$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]].",
-       "import-interwiki-source": "Sorgende Uicchi/vosce:",
        "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",
        "pageinfo-robot-policy": "Indicizzate da le robbot",
        "pageinfo-robot-index": "Permesse",
        "pageinfo-robot-noindex": "Non permesse",
-       "pageinfo-views": "Numere de visite",
        "pageinfo-watchers": "Numere de visitature d'a pàgene",
        "pageinfo-few-watchers": "Mene de $1 {{PLURAL:$1|visitatore|visitature}}",
        "pageinfo-redirects-name": "Numere de redirezionaminde a sta pàgene",
        "exif-urgency-low": "Vasce  ($1)",
        "exif-urgency-high": "Ierte ($1)",
        "exif-urgency-other": "Priorità definite da l'utende ($1)",
-       "watchlistall2": "tutte",
        "namespacesall": "tutte",
        "monthsall": "tutte",
        "confirmemail": "Conferme l'indirizze e-mail",
        "confirmemail_success": "L'indirizze e-mail tue ha state confermate.\nTu, mò te puè [[Special:UserLogin|collegà]] e te puè devertì sus 'a Uicchipèdie.",
        "confirmemail_loggedin": "L'indirizze e-mail tue ha state confermate.",
        "confirmemail_subject": "Indirizze email de conferme pe {{SITENAME}}",
-       "confirmemail_body": "Quacchedune, pò essere tu, fa l'indirizze IP $1,\nha reggistrate 'nu cunde utende \"$2\" cu st'indirizze email sus a {{SITENAME}}.\n\nPe confermà ca stu cunde ète avveramende 'u tue e pe attivà 'a funzione email de {{SITENAME}}, iapre stu collegamende jndr'à 'u borwser tue:\n\n$3\n\nCe tu *NON* g'è reggistrate 'u cunde utende, segue stu collegamende pe scangellà l'indirizze email de conferme:\n\n$5\n\nStu codece de conferme more 'u $4.",
-       "confirmemail_body_changed": "Quacchedune, pò essere tu, da l'indirizze IP $1,\nha cangiate l'indirizze e-mail d'u cunde utende \"$2\" cu st'indirizze e-mail sus a {{SITENAME}}.\n\nPe confermà ca stu cunde ète avveramende 'u tune e pe reattivà 'a funzione email de {{SITENAME}}, iapre stu collegamende jndr'à 'u borwser tune:\n\n$3\n\nCe tu *NON* g'è reggistrate 'u cunde utende, segue stu collegamende pe scangellà l'indirizze email de conferme:\n\n$5\n\nStu codece de conferme scade 'u $4.",
+       "confirmemail_body": "Quacchedune, pò essere tu, fa l'indirizze IP $1,\nha reggistrate 'nu cunde utende \"$2\" cu st'indirizze email sus a {{SITENAME}}.\n\nPe confermà ca stu cunde ète avveramende 'u tue e pe attivà 'a funzione email de {{SITENAME}}, iapre stu collegamende jndr'à 'u browser tue:\n\n$3\n\nCe tu *NON* g'è reggistrate 'u cunde utende, segue stu collegamende pe scangellà l'indirizze email de conferme:\n\n$5\n\nStu codece de conferme more 'u $4.",
+       "confirmemail_body_changed": "Quacchedune, pò essere tu, da l'indirizze IP $1,\nha cangiate l'indirizze e-mail d'u cunde utende \"$2\" cu st'indirizze e-mail sus a {{SITENAME}}.\n\nPe confermà ca stu cunde ète avveramende 'u tune e pe reattivà 'a funzione email de {{SITENAME}}, iapre stu collegamende jndr'à 'u browser tune:\n\n$3\n\nCe tu *NON* g'è reggistrate 'u cunde utende, segue stu collegamende pe scangellà l'indirizze email de conferme:\n\n$5\n\nStu codece de conferme scade 'u $4.",
        "confirmemail_body_set": "Quacchedune, pò essere tu, da l'indirizze IP $1,\nha cangiate l'indirizze e-mail d'u cunde utende \"$2\" cu st'indirizze e-mail sus a {{SITENAME}}.\n\nPe confermà ca stu cunde ète avveramende 'u tune e pe attivà 'a funzione email de {{SITENAME}}, iapre stu collegamende jndr'à 'u browser tune:\n\n$3\n\nCe tu *NON* g'è reggistrate 'u cunde utende, segue stu collegamende pe scangellà l'indirizze email de conferme:\n\n$5\n\nStu codece de conferme scade 'u $4.",
        "confirmemail_invalidated": "Conferme de l'indirizze e-mail scangellete",
        "invalidateemail": "Scangille 'a conferme de l'e-mail",
        "compare-invalid-title": "'U titele ca è specificate jè invalide.",
        "compare-title-not-exists": "'U titele ca è specificate non g'esiste.",
        "compare-revision-not-exists": "'A revisione ca è specificate non g'esiste.",
-       "dberr-problems": "Simw spiacende! Stu site stè 'ngondre de le diffcoltà tecniche.",
+       "dberr-problems": "Sime spiacende! Stu site stè 'ngondre de le difficoltà tecniche.",
        "dberr-again": "Aspitte quacche minute e pò recareche.",
        "dberr-info": "(Non ge riuscime a condattà 'u server d'u database: $1)",
        "dberr-info-hidden": "(Non ge pozze condattà 'u server d'u database)",
        "logentry-rights-rights-legacy": "$1 ave {{GENDER:$2|cangiate}} 'u membre d'u gruppe pe $3",
        "logentry-rights-autopromote": "$1 ha state {{GENDER:$2|promosse}} automaticamende da $4 a $5",
        "rightsnone": "(ninde)",
+       "revdelete-summary": "cange 'u riepileghe",
        "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:",
index 40b9db1..1708443 100644 (file)
@@ -69,7 +69,9 @@
                        "Niklem",
                        "Agilight",
                        "Oleg3280",
-                       "Nirovulf"
+                       "Nirovulf",
+                       "Striking Blue",
+                       "Fitoschido"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "hidden-categories": "{{PLURAL:$1|1=Скрытая категория|Скрытые категории}}",
        "hidden-category-category": "Скрытые категории",
        "category-subcat-count": "{{PLURAL:$2|1=Эта категория содержит только следующую подкатегорию.|В этой категории отображается $1 {{PLURAL:$1|подкатегория|подкатегорий|подкатегории}} из имеющихся $2.}}",
-       "category-subcat-count-limited": "Ð\92 Ñ\8dÑ\82ой ÐºÐ°Ñ\82егоÑ\80ии {{PLURAL:$1|$1 Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80иÑ\8f|$1 Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80ий|$1 Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80ии}}.",
+       "category-subcat-count-limited": "Ð\92 Ñ\8dÑ\82ой ÐºÐ°Ñ\82егоÑ\80ии {{PLURAL:$1|$1 Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80иÑ\8f|$1 Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80ии|$1 Ð¿Ð¾Ð´ÐºÐ°Ñ\82егоÑ\80ий}}.",
        "category-article-count": "{{PLURAL:$2|1=Эта категория содержит единственную страницу.|{{PLURAL:$1|Показана $1 страница|Показано $1 страниц|Показаны $1 страницы}} из $2, {{PLURAL:$2|находящейся|находящихся}} в данной категории.}}",
-       "category-article-count-limited": "В этой категории {{PLURAL:$1|$1 страница|$1 страниц|$1 страницы|1=только одна страница}}.",
+       "category-article-count-limited": "В этой категории {{PLURAL:$1|$1 страница|$1 страницы|$1 страниц|1=только одна страница}}.",
        "category-file-count": "{{PLURAL:$2|1=Эта категория содержит единственный файл.|{{PLURAL:$1|Показан $1 файл|Показано $1 файлов|Показаны $1 файла}} из $2, {{PLURAL:$2|находящегося|находящихся}} в данной категории.}}",
-       "category-file-count-limited": "Ð\92 Ñ\8dÑ\82ой ÐºÐ°Ñ\82егоÑ\80ии {{PLURAL:$1|$1 Ñ\84айл|$1 Ñ\84айлов|$1 Ñ\84айла|1=только один файл}}.",
+       "category-file-count-limited": "Ð\92 Ñ\8dÑ\82ой ÐºÐ°Ñ\82егоÑ\80ии {{PLURAL:$1|$1 Ñ\84айл|$1 Ñ\84айла|$1 Ñ\84айлов|1=только один файл}}.",
        "listingcontinuesabbrev": "(продолжение)",
        "index-category": "Индексируемые страницы",
        "noindex-category": "Неиндексируемые страницы",
        "broken-file-category": "Страницы с неработающими файловыми ссылками",
        "about": "Описание",
        "article": "Статья",
-       "newwindow": "(в новом окне)",
+       "newwindow": "&nbsp;(в новом окне)",
        "cancel": "Отменить",
        "moredotdotdot": "Далее…",
        "morenotlisted": "Этот список не является полным.",
        "delete": "Удалить",
        "deletethispage": "Удалить эту страницу",
        "undeletethispage": "Восстановить эту страницу",
-       "undelete_short": "Ð\92оÑ\81Ñ\81Ñ\82ановиÑ\82Ñ\8c {{PLURAL:$1|$1 Ð¿Ñ\80авкÑ\83|$1 Ð¿Ñ\80авок|$1 Ð¿Ñ\80авки|1=правку}}",
-       "viewdeleted_short": "Просмотр {{PLURAL:$1|$1 удалённой правки|$1 удалённых правок|удалённой правки}}",
+       "undelete_short": "Ð\92оÑ\81Ñ\81Ñ\82ановиÑ\82Ñ\8c {{PLURAL:$1|$1 Ð¿Ñ\80авкÑ\83|$1 Ð¿Ñ\80авки|$1 Ð¿Ñ\80авок|1=правку}}",
+       "viewdeleted_short": "Просмотр {{PLURAL:$1|$1 удалённой правки|удалённой правки|$1 удалённых правок}}",
        "protect": "Защитить",
        "protect_change": "изменить",
        "protectthispage": "Защитить эту страницу",
        "otherlanguages": "На других языках",
        "redirectedfrom": "(перенаправлено с «$1»)",
        "redirectpagesub": "Страница-перенаправление",
+       "redirectto": "Перенаправление на:",
        "lastmodifiedat": "Последнее изменение этой страницы: $2, $1.",
-       "viewcount": "К этой странице обращались $1 {{PLURAL:$1|раз|раз|раза}}.",
+       "viewcount": "К этой странице обращались $1 {{PLURAL:$1|раз|раза|раз}}.",
        "protectedpage": "Защищённая страница",
        "jumpto": "Перейти к:",
        "jumptonavigation": "навигация",
        "confirmable-no": "Нет",
        "thisisdeleted": "Просмотреть или восстановить $1?",
        "viewdeleted": "Просмотреть $1?",
-       "restorelink": "{{PLURAL:$1|$1 удалённую правку|$1 удалённых правок|$1 удалённые правки|1=удалённую правку}}",
+       "restorelink": "{{PLURAL:$1|$1 удалённую правку|$1 удалённые правки|$1 удалённых правок|1=удалённую правку}}",
        "feedlinks": "В виде:",
        "feed-invalid": "Неправильный тип канала для подписки.",
        "feed-unavailable": "Ленты синдикации недоступны",
        "viewsourcetext": "Вы можете просмотреть и скопировать исходный текст этой страницы:",
        "viewyourtext": "Вы можете просмотреть и скопировать исходный текст '''ваших правок''' на этой странице:",
        "protectedinterface": "Эта страница содержит интерфейсное сообщение программного обеспечения. Во избежание вандализма её изменение запрещено.\nЧтобы добавить или изменить перевод этого сообщения во всех вики, пожалуйста, используйте сайт локализации MediaWiki [//translatewiki.net/ translatewiki.net]",
-       "editinginterface": "'''Внимание:''' Вы редактируете страницу, содержащую текст интерфейса программного обеспечения.\nЕё изменение повлияет на внешний вид интерфейса для других пользователей этой вики.\nЧтобы добавить или изменить перевод этого сообщения, пожалуйста, используйте сайт локализации MediaWiki [//translatewiki.net/ translatewiki.net].",
+       "editinginterface": "<strong>Внимание:</strong> Вы редактируете страницу, содержащую текст интерфейса программного обеспечения.\nЕё изменение повлияет на внешний вид интерфейса для других пользователей этой вики.",
+       "translateinterface": "Чтобы добавить или изменить перевод этого сообщения, пожалуйста, используйте сайт локализации MediaWiki [//translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "Страница защищена от изменений, поскольку она включена в {{PLURAL:$1|1=следующую страницу, для которой|следующие страницы, для которых}} включена каскадная защита:\n$2",
        "namespaceprotected": "У вас нет разрешения редактировать страницы в пространстве имён «$1».",
        "customcssprotected": "У вас нет разрешения редактировать эту CSS-страницу, так как она содержит личные настройки другого участника.",
        "createacct-submit": "Создать учётную запись",
        "createacct-another-submit": "Создать ещё одну запись",
        "createacct-benefit-heading": "{{SITENAME}} — совместный труд таких же людей, как вы.",
-       "createacct-benefit-body1": "{{PLURAL:$1|пÑ\80авка|пÑ\80авок|пÑ\80авки}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|статья|статей|статьи}}",
-       "createacct-benefit-body3": "{{PLURAL:$1|Ñ\83Ñ\87аÑ\81Ñ\82ник|Ñ\83Ñ\87аÑ\81Ñ\82ников|Ñ\83Ñ\87аÑ\81Ñ\82ника}} за последнее время",
+       "createacct-benefit-body1": "{{PLURAL:$1|пÑ\80авка|пÑ\80авки|пÑ\80авок}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|статья|статьи|статей}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|Ñ\83Ñ\87аÑ\81Ñ\82ник|Ñ\83Ñ\87аÑ\81Ñ\82ника|Ñ\83Ñ\87аÑ\81Ñ\82ников}} за последнее время",
        "badretype": "Введённые вами пароли не совпадают.",
        "userexists": "Введённое имя участника уже используется.\nПожалуйста, выберите другое имя.",
        "loginerror": "Ошибка опознавания участника",
        "noemailcreate": "Вам необходимо указать корректный адрес электронной почты",
        "passwordsent": "Новый пароль был выслан на адрес электронной почты, указанный для участника $1.\n\nПожалуйста, представьтесь системе заново после получения пароля.",
        "blocked-mailpassword": "Редактирование с вашего IP-адреса запрещено, поэтому заблокирована и функция восстановления пароля.",
-       "eauthentsent": "На указанный адрес электронной почты отправлено письмо. \nЧтоб получать письма в дальнейшем, следуйте изложенным там инструкциям для подтверждения того, что этот адрес действительно принадлежит вам.",
+       "eauthentsent": "На указанный адрес электронной почты отправлено письмо. \nЧтобы получать письма в дальнейшем, следуйте изложенным там инструкциям для подтверждения, что этот адрес действительно принадлежит вам.",
        "throttled-mailpassword": "Функция напоминания пароля уже использовалась в течение {{PLURAL:$1|1=последнего часа|последних $1 часов}}.\nДля предотвращения злоупотреблений, разрешено запрашивать не более одного напоминания {{PLURAL:$1|за $1 час|за $1 часов|за $1 часа|1=в час}}.",
        "mailerror": "Ошибка при отправке почты: $1",
        "acct_creation_throttle_hit": "За сутки с вашего IP-адреса {{PLURAL:$1|была создана $1 учётная запись участника|было создано $1 учётных записей участников|1=уже была создана учётная запись участника}}, что является пределом для данного отрезка времени.\nТаким образом, пользователи, обладающие данным IP-адресом, в данный момент больше не могут создавать новых учётных записей.",
        "createaccount-text": "Кто-то создал учётную запись «$2» на сервере проекта {{SITENAME}} ($4), указав ваш адрес электронной почты. \n\nПароль учётной записи — «$3». Вам следует авторизоваться на сайте и изменить пароль.\n\nПроигнорируйте данное сообщение, если учётная запись была создана по ошибке.",
        "login-throttled": "Вы сделали слишком много попыток представиться системе.\nПожалуйста, подождите $1 перед тем, как попробовать снова.",
        "login-abort-generic": "Неудачная попытка представиться системе",
+       "login-migrated-generic": "Ваша учётная запись была перенесена, и ваше имя участника больше не существует в этой вики.",
        "loginlanguagelabel": "Язык: $1",
        "suspicious-userlogout": "Ваш запрос на завершение сеанса отклонён, так как он похож на запрос, отправленный некорректным браузером или кэширующим прокси.",
        "createacct-another-realname-tip": "Настоящее имя (необязательное поле).\nЕсли вы укажете его, то оно будет использовано для того, чтобы показать, кем была внесена правка страницы.",
        "passwordreset-emailsent-capture": "Отправлено электронное письмо с информацией о сбросе пароля, текст которого можно увидеть ниже.",
        "passwordreset-emailerror-capture": "Было создано электронное письмо с информацией о сбросе пароля, текст которого можно увидеть ниже, однако его не удалось отправить {{GENDER:$2|участнику|участнице}} по следующей причине: $1",
        "changeemail": "Изменить адрес электронной почты",
-       "changeemail-header": "Изменение адреса электронной почты",
        "changeemail-text": "Заполните эту форму, чтобы изменить свой адрес электронной почты. Вам нужно будет ввести пароль, чтобы подтвердить изменение.",
        "changeemail-no-info": "Чтобы обращаться непосредственно к этой странице, вам следует представиться системе.",
        "changeemail-oldemail": "Текущий адрес электронной почты:",
        "changeemail-none": "(нет)",
        "changeemail-password": "Ваш пароль для проекта «{{SITENAME}}»:",
        "changeemail-submit": "Изменить адрес",
-       "changeemail-cancel": "Отмена",
        "changeemail-throttled": "Вы сделали слишком много попыток представиться системе.\nПожалуйста, подождите $1 перед тем, как попробовать снова.",
        "resettokens": "Сбросить токены",
        "resettokens-text": "Вы можете сбросить токены, позволяющие получить доступ к некоторым личным данным, связанным с вашей учётной записью на этом сайте.\n\nВам необходимо сделать это, если вы случайно поделились ими с кем-то, или если ваша учётная запись была взломана.",
        "showpreview": "Предварительный просмотр",
        "showdiff": "Внесённые изменения",
        "blankarticle": "<strong>Предупреждение:</strong> Страница, которую вы создаёте, пуста.\nЕсли снова нажмёте кнопку «{{int:savearticle}}», страница будет создана без какого-либо содержания.",
-       "anoneditwarning": "'''Внимание!''' Вы не авторизовались на сайте.\nВ истории изменений этой страницы будет записан ваш IP-адрес.",
+       "anoneditwarning": "<strong>Внимание!</strong> Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы <strong>[$1 войдёте]</strong> или <strong>[$2 создадите учётную запись]</strong>, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.",
        "anonpreviewwarning": "''Вы не представились системе. Сохранение приведёт к записи вашего IP-адреса в историю изменений страницы.''",
        "missingsummary": "'''Напоминание.''' Вы не дали краткого описания изменений. При повторном нажатии на кнопку «{{int:savearticle}}», ваши изменения будут сохранены без комментария.",
        "missingcommenttext": "Пожалуйста, введите ниже ваше сообщение.",
        "yourdiff": "Различия",
        "copyrightwarning": "Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии $2 (см. $1).\nЕсли вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.<br />\nВы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из\nисточника, допускающего свободное распространение и изменение своего содержимого.<br />\n'''НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!'''",
        "copyrightwarning2": "Пожалуйста, учтите, что любой ваш вклад в проект «{{SITENAME}}» может быть отредактирован или удалён другими участниками.\nЕсли вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.<br />\nВы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. $1).\n'''НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!'''",
-       "longpageerror": "'''ОШИБКА: записываемый вами текст имеет размер $1 {{PLURAL:$1|килобайт|килобайт|килобайта}}, что больше, чем установленный предел в $2 {{PLURAL:$2|килобайт|килобайт|килобайта}}. Страница не может быть сохранена.'''",
+       "longpageerror": "'''ОШИБКА: записываемый вами текст имеет размер $1 {{PLURAL:$1|килобайт|килобайта|килобайт}}, что больше, чем установленный предел в $2 {{PLURAL:$2|килобайт|килобайта|килобайт}}. Страница не может быть сохранена.'''",
        "readonlywarning": "'''Предупреждение. База данных заблокирована в связи с процедурами обслуживания, поэтому вы не можете записать ваши изменения прямо сейчас.'''\nВозможно, вам следует скопировать этот текст в текстовый файл, чтобы сохранить его на будущее.\n\nАдминистратор, заблокировавший базу данных, оставил следующее объяснение: $1",
        "protectedpagewarning": "'''Предупреждение. Эта страница защищена от изменений, её могут редактировать только участники с полномочиями администраторов.'''\nНиже для справки приведена последняя запись журнала:",
        "semiprotectedpagewarning": "'''Замечание.''' Эта страница была защищена; редактировать её могут только зарегистрированные участники.\nНиже для справки приведена последняя запись журнала:",
        "content-model-text": "обычный текст",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Страницы, использующие повторяющиеся аргументы в вызовах шаблонов",
+       "duplicate-args-category-desc": "Страницы, содержащие вызовы шаблонов, использующие повторяющиеся аргументы, такие как <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> или <code><nowiki>{{foo|bar|1=bar}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Внимание!''' Эта страница содержит слишком много вызовов ресурсоёмких функций.\n\nДолжно быть не более {{PLURAL:$2|$2 вызова|$2 вызовов|1=одного вызова}}, в то время как сейчас здесь $1 {{PLURAL:$1|вызов|вызовов|вызова}}.",
        "expensive-parserfunction-category": "Страницы со слишком большим количеством вызовов ресурсоёмких функций",
        "post-expand-template-inclusion-warning": "Предупреждение: суммарный размер включаемых шаблонов слишком велик.\nНекоторые шаблоны не будут включены.",
        "history-show-deleted": "Только удалённые",
        "histfirst": "старейшие",
        "histlast": "новейшие",
-       "historysize": "($1 {{PLURAL:$1|байт|байт|байта}})",
+       "historysize": "($1 {{PLURAL:$1|байт|байта|байт}})",
        "historyempty": "(пусто)",
        "history-feed-title": "История изменений",
        "history-feed-description": "История изменений этой страницы в вики",
        "mergehistory-empty": "Не найдены правки для объединения.",
        "mergehistory-success": "$3 {{PLURAL:$3|правка|правок|правки}} из [[:$1]] успешно {{PLURAL:$3|перенесена|перенесены}} в [[:$2]].",
        "mergehistory-fail": "Не удалось произвести объединение историй страниц, пожалуйста, проверьте параметры страницы и времени.",
-       "mergehistory-fail-toobig": "Ð\9dе Ñ\83даÑ\91Ñ\82Ñ\81Ñ\8f Ð²Ñ\8bполниÑ\82Ñ\8c Ñ\81лиÑ\8fние Ð¸Ñ\81Ñ\82оÑ\80ии, Ñ\82ак ÐºÐ°Ðº Ð½ÐµÐ¾Ð±Ñ\85одимо Ð¿ÐµÑ\80енеÑ\81Ñ\82и Ð±Ð¾Ð»Ñ\8cÑ\88е Ð´Ð¾Ð¿Ñ\83Ñ\81Ñ\82имого Ð»Ð¸Ð¼Ð¸Ñ\82а Ð² $1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8e|веÑ\80Ñ\81ий|веÑ\80Ñ\81ии}}.",
+       "mergehistory-fail-toobig": "Ð\9dе Ñ\83даÑ\91Ñ\82Ñ\81Ñ\8f Ð²Ñ\8bполниÑ\82Ñ\8c Ñ\81лиÑ\8fние Ð¸Ñ\81Ñ\82оÑ\80ии, Ñ\82ак ÐºÐ°Ðº Ð½ÐµÐ¾Ð±Ñ\85одимо Ð¿ÐµÑ\80енеÑ\81Ñ\82и Ð±Ð¾Ð»Ñ\8cÑ\88е Ð´Ð¾Ð¿Ñ\83Ñ\81Ñ\82имого Ð»Ð¸Ð¼Ð¸Ñ\82а Ð² $1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8e|веÑ\80Ñ\81ии|веÑ\80Ñ\81ий}}.",
        "mergehistory-no-source": "Исходная страница «$1» не существует.",
        "mergehistory-no-destination": "Целевая страница «$1» не существует.",
        "mergehistory-invalid-source": "Источник должен иметь правильный заголовок.",
        "mergehistory-same-destination": "Исходная и целевая страницы должны различаться",
        "mergehistory-reason": "Причина:",
        "mergelog": "Журнал объединений",
-       "pagemerge-logentry": "объединена [[$1]] и [[$2]] (версии вплоть до $3)",
        "revertmerge": "Разделить",
        "mergelogpagetext": "Ниже приведён список последних объединений историй страниц.",
        "history-title": "$1 — история изменений",
        "showhideselectedversions": "Показать/скрыть выбранные версии",
        "editundo": "отменить",
        "diff-empty": "(нет различий)",
-       "diff-multi-sameuser": "(не {{PLURAL:$1|показана одна промежуточная версия|показано $1 промежуточных версии|показаны $1 промежуточные версии}} этого же участника)",
+       "diff-multi-sameuser": "(не {{PLURAL:$1|показана одна промежуточная версия|показаны $1 промежуточные версии|показано $1 промежуточных версии}} этого же участника)",
        "diff-multi-otherusers": "(не {{PLURAL:$1|показана одна промежуточная версия|показано $1 промежуточных версии|показаны $1 промежуточные версии}} {{PLURAL:$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}}}} журнале удалений].",
        "notextmatches": "Нет совпадений в текстах страниц",
        "prevn": "{{PLURAL:$1|1=предыдущая|предыдущие}} $1",
        "nextn": "{{PLURAL:$1|1=следующая|следующие}} $1",
-       "prevn-title": "{{PLURAL:$1|Ð\9fÑ\80едÑ\8bдÑ\83Ñ\89аÑ\8f $1 Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c\9fÑ\80едÑ\8bдÑ\83Ñ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81ей|Ð\9fÑ\80едÑ\8bдÑ\83Ñ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81и}}",
-       "nextn-title": "{{PLURAL:$1|СледÑ\83Ñ\8eÑ\89аÑ\8f $1 Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c|СледÑ\83Ñ\8eÑ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81ей|СледÑ\83Ñ\8eÑ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81и}}",
-       "shown-title": "Ð\9fоказÑ\8bваÑ\82Ñ\8c $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81и|запиÑ\81ей}} на странице",
+       "prevn-title": "{{PLURAL:$1|Ð\9fÑ\80едÑ\8bдÑ\83Ñ\89аÑ\8f $1 Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c\9fÑ\80едÑ\8bдÑ\83Ñ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81и|Ð\9fÑ\80едÑ\8bдÑ\83Ñ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81ей}}",
+       "nextn-title": "{{PLURAL:$1|СледÑ\83Ñ\8eÑ\89аÑ\8f $1 Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c|СледÑ\83Ñ\8eÑ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81и|СледÑ\83Ñ\8eÑ\89ие $1 Ð·Ð°Ð¿Ð¸Ñ\81ей}}",
+       "shown-title": "Ð\9fоказÑ\8bваÑ\82Ñ\8c $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81ей|запиÑ\81и}} на странице",
        "viewprevnext": "Просмотреть ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''В этой вики есть страница «[[:$1]]»'''",
        "searchmenu-new": "<strong>Создать страницу «[[:$1]]» в этом вики-проекте!</strong>\n{{PLURAL:$2|0=|См. также страницу, найденную по результатами вашего поиска.|См. также найденные результаты поиска.}}",
        "searchprofile-images-tooltip": "Поиск файлов",
        "searchprofile-everything-tooltip": "Поиск на всех страницах (включая страницы обсуждений)",
        "searchprofile-advanced-tooltip": "Искать в заданных пространствах имён",
-       "search-result-size": "$1 ({{PLURAL:$2|$2 слово|$2 слов|$2 слова}})",
-       "search-result-category-size": "$1 {{PLURAL:$1|вхождение|вхождений|вхождения}} ($2 {{PLURAL:$2|подкатегория|подкатегорий|подкатегории}}, $3 {{PLURAL:$3|файл|файлов|файла}})",
+       "search-result-size": "$1 ({{PLURAL:$2|$2 слово|$2 слова|$2 слов}})",
+       "search-result-category-size": "$1 {{PLURAL:$1|вхождение|вхождения|вхождений}} ($2 {{PLURAL:$2|подкатегория|подкатегории|подкатегорий}}, $3 {{PLURAL:$3|файл|файла|файлов}})",
        "search-redirect": "(перенаправление с $1)",
        "search-section": "(раздел «$1»)",
+       "search-category": "(категория $1)",
        "search-file-match": "(совпадает с содержимым файла)",
        "search-suggest": "Возможно, вы имели в виду «$1».",
        "search-interwiki-caption": "Родственные проекты",
        "searchrelated": "связанный",
        "searchall": "все",
        "showingresults": "Ниже {{PLURAL:$1|1=показан результат|показаны  результаты}} с № '''$2''' и вплоть до № '''$1'''.",
-       "showingresultsinrange": "Ð\9dиже Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð¾ Ð´Ð¾ {{PLURAL:$1|<strong>1</strong> Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82а|<strong>$1</strong> Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82ов|<strong>$1</strong> Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82а}} в диапазоне от <strong>$2</strong> до <strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|1=Результат '''$1''' из '''$3'''|Результаты '''$1—$2''' из '''$3'''}} для «'''$4'''»",
+       "showingresultsinrange": "Ð\9dиже Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð¾ Ð´Ð¾ {{PLURAL:$1|<strong>1</strong> Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82а|<strong>$1</strong> Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82а|<strong>$1</strong> Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82ов}} в диапазоне от <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": "Расширенный поиск",
        "powersearch-ns": "Поиск в пространствах имён:",
        "yournick": "Новая подпись:",
        "prefs-help-signature": "Комментарии на страницах обсуждений должны быть подписаны посредством добавления символов «<nowiki>~~~~</nowiki>», которые будут преобразованы в вашу подпись и время.",
        "badsig": "Неверная подпись. Проверьте корректность HTML-тегов.",
-       "badsiglength": "СлиÑ\88ком Ð´Ð»Ð¸Ð½Ð½Ð°Ñ\8f Ð¿Ð¾Ð´Ð¿Ð¸Ñ\81Ñ\8c.\nÐ\9fодпиÑ\81Ñ\8c Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð° Ð¿Ñ\80евÑ\8bÑ\88аÑ\82Ñ\8c $1 {{PLURAL:$1|Ñ\81имвола|Ñ\81имволов|Ñ\81имвола}}.",
+       "badsiglength": "СлиÑ\88ком Ð´Ð»Ð¸Ð½Ð½Ð°Ñ\8f Ð¿Ð¾Ð´Ð¿Ð¸Ñ\81Ñ\8c.\nÐ\9fодпиÑ\81Ñ\8c Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð° Ð¿Ñ\80евÑ\8bÑ\88аÑ\82Ñ\8c $1 {{PLURAL:$1|Ñ\81имвола|Ñ\81имвола|Ñ\81имволов}}.",
        "yourgender": "Какое описание вам более подходит?",
        "gender-unknown": "Я предпочитаю не указывать",
        "gender-male": "Он редактирует страницы вики",
        "gender-female": "Онa редактирует страницы вики",
-       "prefs-help-gender": "Установка этой настройки необязательна.\nПрограммное обеспечение использует эту информацию чтобы обращаться к вам и упоминать вас в правильном грамматическом роде.\nЭта информация будет общедоступной.",
+       "prefs-help-gender": "Установка этой настройки необязательна.\nПО использует это значение, чтобы обращаться к вам и упоминать вас в правильном грамматическом роде.\nЭта информация будет общедоступной.",
        "email": "Электронная почта",
-       "prefs-help-realname": "Ð\9dаÑ\81Ñ\82оÑ\8fÑ\89ее Ð¸Ð¼Ñ\8f (необÑ\8fзаÑ\82елÑ\8cное Ð¿Ð¾Ð»Ðµ).\nÐ\95Ñ\81ли Ð²Ñ\8b Ñ\83кажеÑ\82е ÐµÐ³Ð¾, Ñ\82о Ð¾Ð½Ð¾ Ð±Ñ\83деÑ\82 Ð¸Ñ\81полÑ\8cзовано Ð´Ð»Ñ\8f Ñ\82ого, Ñ\87Ñ\82обÑ\8b Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ\82Ñ\8c, ÐºÐµÐ¼ Ð±Ñ\8bла Ð²Ð½ÐµÑ\81ена Ð¿Ñ\80авка Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b.",
+       "prefs-help-realname": "Ð\92водиÑ\82Ñ\8c Ð½Ð°Ñ\81Ñ\82оÑ\8fÑ\89ее Ð¸Ð¼Ñ\8f Ð½ÐµÐ¾Ð±Ñ\8fзаÑ\82елÑ\8cно.\nÐ\95Ñ\81ли Ð²Ñ\8b Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ\82е ÐµÐ³Ð¾, Ð¾Ð½Ð¾ Ð¼Ð¾Ð¶ÐµÑ\82 Ð±Ñ\8bÑ\82Ñ\8c Ð¸Ñ\81полÑ\8cзовано Ð´Ð»Ñ\8f Ñ\83казаниÑ\8f Ð°Ð²Ñ\82оÑ\80Ñ\81Ñ\82ва Ð²Ð°Ñ\88иÑ\85 Ñ\80абоÑ\82.",
        "prefs-help-email": "Адрес электронной почты указывать необязательно, но он будет необходим в том случае, если вы забудете пароль.",
        "prefs-help-email-others": "Он также позволит другим участникам связаться с вами по электронной почте с помощью ссылки на вашей персональной странице или на вашей странице обсуждения. При этом ваш адрес электронной почты не будет никому раскрыт.",
        "prefs-help-email-required": "Необходимо указать адрес электронной почты.",
        "prefs-tokenwatchlist": "Токен",
        "prefs-diffs": "Разница версий",
        "prefs-help-prefershttps": "Эта настройка будет применена после следующего представления системе.",
+       "prefswarning-warning": "Вы внесли в свои настройки изменения, которые ещё не были сохранены.\nЕсли вы покинете эту страницу, не нажав «$1», настройки не будут обновлены.",
        "prefs-tabs-navigation-hint": "Совет: Вы можете использовать клавиши стрелок влево и вправо для перехода между вкладками в списке вкладок.",
        "email-address-validity-valid": "Выглядит корректно",
        "email-address-validity-invalid": "Введите корректный адрес электронной почты!",
        "right-deletedtext": "просмотр удалённого текста и изменений между удалёнными версиями страниц",
        "right-browsearchive": "поиск удалённых страниц",
        "right-undelete": "восстановление страниц",
-       "right-suppressrevision": "Ð\9fÑ\80оÑ\81моÑ\82Ñ\80, Ñ\81крытие и восстановление скрытых версий страниц",
+       "right-suppressrevision": "пÑ\80оÑ\81моÑ\82Ñ\80, Ñ\81окрытие и восстановление скрытых версий страниц",
        "right-viewsuppressed": "Просмотр версий, скрытых от всех участников",
        "right-suppressionlog": "просмотр частных журналов",
        "right-block": "установка ограничений на редактирование для других участников",
        "action-viewmywatchlist": "просмотр вашего списка наблюдения",
        "action-viewmyprivateinfo": "просмотр вашей частной информации",
        "action-editmyprivateinfo": "редактирование вашей частной информации",
-       "nchanges": "$1 {{PLURAL:$1|изменение|изменений|изменения}}",
+       "nchanges": "$1 {{PLURAL:$1|изменение|изменения|изменений}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|с последнего посещения}}",
        "enhancedrc-history": "история",
        "recentchanges": "Свежие правки",
        "newpageletter": "Н",
        "boteditletter": "б",
        "unpatrolledletter": "!",
-       "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|наблÑ\8eдаÑ\8eÑ\89ий Ñ\83Ñ\87аÑ\81Ñ\82ник|наблÑ\8eдаÑ\8eÑ\89иÑ\85 Ñ\83Ñ\87аÑ\81Ñ\82ников|наблÑ\8eдаÑ\8eÑ\89иÑ\85 Ñ\83Ñ\87аÑ\81Ñ\82ника}}]",
+       "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|наблÑ\8eдаÑ\8eÑ\89ий Ñ\83Ñ\87аÑ\81Ñ\82ник|наблÑ\8eдаÑ\8eÑ\89иÑ\85 Ñ\83Ñ\87аÑ\81Ñ\82ника|наблÑ\8eдаÑ\8eÑ\89иÑ\85 Ñ\83Ñ\87аÑ\81Ñ\82ников}}]",
        "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": "Скрыть подробности",
        "backend-fail-closetemp": "Не удаётся закрыть временный файл.",
        "backend-fail-read": "Не удалось прочитать файл $1.",
        "backend-fail-create": "Не удалось записать файл $1.",
-       "backend-fail-maxsize": "Не удалось записать файл $1, так как его размер превышает $2 {{PLURAL:$2|байт|байт|байта}}.",
+       "backend-fail-maxsize": "Не удалось записать файл $1, так как его размер превышает $2 {{PLURAL:$2|байт|байта|байт}}.",
        "backend-fail-readonly": "Хранилище «$1» сейчас находится в режиме «только чтение». Причина: «$2»",
        "backend-fail-synced": "Файл «$1» находится в несогласованном состоянии во внутреннем хранилище",
        "backend-fail-connect": "Не удалось подключиться к хранилищу «$1».",
        "filehist-filesize": "Размер файла",
        "filehist-comment": "Примечание",
        "imagelinks": "Использование файла",
-       "linkstoimage": "{{PLURAL:$1|Следующая $1 страница ссылается|Следующие $1 страниц ссылаются|Следующие $1 страницы ссылаются}} на данный файл:",
+       "linkstoimage": "{{PLURAL:$1|Следующая $1 страница ссылается|Следующие $1 страницы ссылаются|Следующие $1 страниц ссылаются}} на данный файл:",
        "linkstoimage-more": "Более $1 {{PLURAL:$1|страницы|страниц}} ссылаются на этот файл.\nВ данном списке {{PLURAL:$1|представлена только $1 ссылка|представлены только $1 ссылок|представлены только $1 ссылки}} на этот файл.\nДоступен также [[Special:WhatLinksHere/$2|полный список]].",
        "nolinkstoimage": "Нет страниц, ссылающихся на данный файл.",
        "morelinkstoimage": "Просмотреть [[Special:WhatLinksHere/$1|остальные ссылки]] на этот файл.",
        "linkstoimage-redirect": "$1 (файловое перенаправление) $2",
-       "duplicatesoffile": "{{PLURAL:$1|СледÑ\83Ñ\8eÑ\89ий Ñ\84айл Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f Ð´Ñ\83бликаÑ\82ом|СледÑ\83Ñ\8eÑ\89ие $1 Ñ\84айлов Ñ\8fвлÑ\8fÑ\8eÑ\82Ñ\81Ñ\8f Ð´Ñ\83бликаÑ\82ами|СледÑ\83Ñ\8eÑ\89ие $1 Ñ\84айла являются дубликатами}} этого файла ([[Special:FileDuplicateSearch/$2|подробности]]):",
+       "duplicatesoffile": "{{PLURAL:$1|СледÑ\83Ñ\8eÑ\89ий Ñ\84айл Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f Ð´Ñ\83бликаÑ\82ом|СледÑ\83Ñ\8eÑ\89ие $1 Ñ\84айла Ñ\8fвлÑ\8fÑ\8eÑ\82Ñ\81Ñ\8f Ð´Ñ\83бликаÑ\82ами|СледÑ\83Ñ\8eÑ\89ие $1 Ñ\84айлов являются дубликатами}} этого файла ([[Special:FileDuplicateSearch/$2|подробности]]):",
        "sharedupload": "Этот файл из $1 и может использоваться в других проектах.",
        "sharedupload-desc-there": "Этот файл из $1 и может использоваться в других проектах.\nДополнительную информацию можно найти на [$2 странице описания файла].",
        "sharedupload-desc-here": "Этот файл из $1 и может использоваться в других проектах.\nИнформация с его [$2 страницы описания] приведена ниже.",
        "listredirects": "Список перенаправлений",
        "listduplicatedfiles": "Список файлов с дубликатами",
        "listduplicatedfiles-summary": "Это список файлов, где самая последняя версия файла считается дубликатом последней версии некоторых других файлов. Учитываются только локальные файлы.",
-       "listduplicatedfiles-entry": "У Ñ\84айла [[:File:$1|$1]] â\80\94 [[$3|{{PLURAL:$2|один Ð´Ñ\83бликаÑ\82|$2 Ð´Ñ\83бликаÑ\82ов|$2 Ð´Ñ\83бликаÑ\82а}}]].",
+       "listduplicatedfiles-entry": "У Ñ\84айла [[:File:$1|$1]] â\80\94 [[$3|{{PLURAL:$2|один Ð´Ñ\83бликаÑ\82|$2 Ð´Ñ\83бликаÑ\82а|$2 Ð´Ñ\83бликаÑ\82ов}}]].",
        "unusedtemplates": "Неиспользуемые шаблоны",
        "unusedtemplatestext": "Здесь перечислены все страницы пространства имён «{{ns:template}}», не включённые ни в какие другие страницы.\nНе забывайте проверять отсутствие ссылок на шаблон перед его удалением.",
        "unusedtemplateswlh": "другие ссылки",
        "statistics": "Статистика",
        "statistics-header-pages": "Статистика по страницам",
        "statistics-header-edits": "Статистика правок",
-       "statistics-header-views": "Статистика просмотров",
        "statistics-header-users": "Статистика по участникам",
        "statistics-header-hooks": "Другая статистика",
        "statistics-articles": "Статей",
        "statistics-files": "Загружено файлов",
        "statistics-edits": "Число правок с момента установки {{grammar:genitive|{{SITENAME}}}}",
        "statistics-edits-average": "Среднее число правок на страницу",
-       "statistics-views-total": "Всего просмотров",
-       "statistics-views-total-desc": "Не учитываются просмотры несуществующих и служебных страниц.",
-       "statistics-views-peredit": "Просмотров на правку",
        "statistics-users": "Зарегистрированные [[Special:ListUsers|участники]]",
        "statistics-users-active": "Активные участники",
-       "statistics-users-active-desc": "Участники, совершившие какое-либо действие за {{PLURAL:$1|последний $1 день|последние $1 дней|последние $1 дня}}",
-       "statistics-mostpopular": "Наиболее часто просматриваемые страницы",
+       "statistics-users-active-desc": "Участники, совершившие какое-либо действие за {{PLURAL:$1|последний $1 день|последние $1 дня|последние $1 дней}}",
        "pageswithprop": "Страницы с переопределёнными свойствами",
        "pageswithprop-legend": "Страницы с переопределёнными свойствами",
        "pageswithprop-text": "Здесь перечислены страницы, у которых были вручную переопределены отдельные свойства.",
        "withoutinterwiki-legend": "Префикс",
        "withoutinterwiki-submit": "Показать",
        "fewestrevisions": "Страницы с наименьшим количеством версий",
-       "nbytes": "$1 {{PLURAL:$1|байÑ\82|байÑ\82ов|байÑ\82а}}",
-       "ncategories": "$1 {{PLURAL:$1|каÑ\82егоÑ\80иÑ\8f|каÑ\82егоÑ\80ий|каÑ\82егоÑ\80ии}}",
-       "ninterwikis": "$1 {{PLURAL:$1|инÑ\82еÑ\80вики-Ñ\81Ñ\81Ñ\8bлка|инÑ\82еÑ\80вики-Ñ\81Ñ\81Ñ\8bлок|инÑ\82еÑ\80вики-Ñ\81Ñ\81Ñ\8bлки}}",
-       "nlinks": "$1 {{PLURAL:$1|Ñ\81Ñ\81Ñ\8bлка|Ñ\81Ñ\81Ñ\8bлок|Ñ\81Ñ\81Ñ\8bлки}}",
-       "nmembers": "$1 {{PLURAL:$1|обÑ\8aекÑ\82|обÑ\8aекÑ\82ов|обÑ\8aекÑ\82а}}",
-       "nmemberschanged": "$1 â\86\92 $2 {{PLURAL:$2|обÑ\8aекÑ\82|обÑ\8aекÑ\82ов|обÑ\8aекÑ\82а}}",
-       "nrevisions": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f|веÑ\80Ñ\81ий|веÑ\80Ñ\81ии}}",
-       "nviews": "$1 {{PLURAL:$1|пÑ\80оÑ\81моÑ\82Ñ\80|пÑ\80оÑ\81моÑ\82Ñ\80ов|пÑ\80оÑ\81моÑ\82Ñ\80а}}",
+       "nbytes": "$1 {{PLURAL:$1|байÑ\82|байÑ\82а|байÑ\82ов}}",
+       "ncategories": "$1 {{PLURAL:$1|каÑ\82егоÑ\80иÑ\8f|каÑ\82егоÑ\80ии|каÑ\82егоÑ\80ий}}",
+       "ninterwikis": "$1 {{PLURAL:$1|инÑ\82еÑ\80вики-Ñ\81Ñ\81Ñ\8bлка|инÑ\82еÑ\80вики-Ñ\81Ñ\81Ñ\8bлки|инÑ\82еÑ\80вики-Ñ\81Ñ\81Ñ\8bлок}}",
+       "nlinks": "$1 {{PLURAL:$1|Ñ\81Ñ\81Ñ\8bлка|Ñ\81Ñ\81Ñ\8bлки|Ñ\81Ñ\81Ñ\8bлок}}",
+       "nmembers": "$1 {{PLURAL:$1|обÑ\8aекÑ\82|обÑ\8aекÑ\82а|обÑ\8aекÑ\82ов}}",
+       "nmemberschanged": "$1 â\86\92 $2 {{PLURAL:$2|обÑ\8aекÑ\82|обÑ\8aекÑ\82а|обÑ\8aекÑ\82ов}}",
+       "nrevisions": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f|веÑ\80Ñ\81ии|веÑ\80Ñ\81ий}}",
+       "nviews": "$1 {{PLURAL:$1|пÑ\80оÑ\81моÑ\82Ñ\80|пÑ\80оÑ\81моÑ\82Ñ\80а|пÑ\80оÑ\81моÑ\82Ñ\80ов}}",
        "nimagelinks": "Используется на $1 {{PLURAL:$1|странице|страницах}}",
        "ntransclusions": "используется на $1 {{PLURAL:$1|странице|страницах}}",
        "specialpage-empty": "Запрос не дал результатов.",
        "uncategorizedtemplates": "Некатегоризованные шаблоны",
        "unusedcategories": "Неиспользуемые категории",
        "unusedimages": "Неиспользуемые файлы",
-       "popularpages": "Популярные страницы",
        "wantedcategories": "Требуемые категории",
        "wantedpages": "Требуемые страницы",
        "wantedpages-badtitle": "Ошибочный заголовок в результатах запроса: $1",
        "listusers-editsonly": "Показать только тех участников, кто сделал хотя бы одну правку",
        "listusers-creationsort": "Упорядочить по дате создания",
        "listusers-desc": "Сортировать по убыванию",
-       "usereditcount": "$1 {{PLURAL:$1|пÑ\80авка|пÑ\80авок|пÑ\80авки}}",
+       "usereditcount": "$1 {{PLURAL:$1|пÑ\80авка|пÑ\80авки|пÑ\80авок}}",
        "usercreated": "{{GENDER:$3|зарегистрировался|зарегистрировалась}} $1 в $2",
        "newpages": "Новые страницы",
        "newpages-username": "Участник:",
        "notargettext": "Вы не указали целевую страницу или участника для этого действия.",
        "nopagetitle": "Нет такой целевой страницы",
        "nopagetext": "Указанной целевой страницы не существует.",
-       "pager-newer-n": "$1 более {{PLURAL:$1|новая|новых|новые}}",
-       "pager-older-n": "$1 более {{PLURAL:$1|старая|старых|старые}}",
+       "pager-newer-n": "$1 более {{PLURAL:$1|новая|новые|новых}}",
+       "pager-older-n": "$1 более {{PLURAL:$1|старая|старые|старых}}",
        "suppress": "Сокрытие",
        "querypage-disabled": "Эта спецстраница отключена для повышения производительности.",
+       "apihelp": "Справка по API",
+       "apihelp-no-such-module": "Модуль «$1» не найден.",
        "booksources": "Источники книг",
        "booksources-search-legend": "Поиск информации о книге",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Найти",
+       "booksources-search": "Найти",
        "booksources-text": "На этой странице приведён список ссылок на сайты, где вы, возможно, найдёте дополнительную информацию о книге. Это интернет-магазины и системы поиска в библиотечных каталогах.",
        "booksources-invalid-isbn": "Указанный номер ISBN, судя по всему, содержит ошибку. Пожалуйста, проверьте, что при переносе номера из первоисточника не возникло искажений.",
        "specialloguserlabel": "Исполнитель:",
        "listusers-noresult": "Не найдено участников.",
        "listusers-blocked": "(заблокирован{{GENDER:$1||а}})",
        "activeusers": "Список активных участников",
-       "activeusers-intro": "Это список участников, совершавших какие-либо действия за {{PLURAL:$1|последний $1 день|последние $1 дней|последние $1 дня|1=последний день}}.",
-       "activeusers-count": "$1 {{PLURAL:$1|пÑ\80авка|пÑ\80авок|пÑ\80авки}} Ð·Ð° {{PLURAL:$3|$3 Ð¿Ð¾Ñ\81ледний Ð´ÐµÐ½Ñ\8c|поÑ\81ледние $3 Ð´Ð½ÐµÐ¹|поÑ\81ледние $3 Ð´Ð½Ñ\8f|1=последний день}}",
+       "activeusers-intro": "Это список участников, совершавших какие-либо действия за {{PLURAL:$1|последний $1 день|последние $1 дня|последние $1 дней|1=последний день}}.",
+       "activeusers-count": "$1 {{PLURAL:$1|пÑ\80авка|пÑ\80авки|пÑ\80авок}} Ð·Ð° {{PLURAL:$3|$3 Ð¿Ð¾Ñ\81ледний Ð´ÐµÐ½Ñ\8c|поÑ\81ледние $3 Ð´Ð½Ñ\8f|поÑ\81ледние $3 Ð´Ð½ÐµÐ¹|1=последний день}}",
        "activeusers-from": "Показать участников, начиная с:",
        "activeusers-hidebots": "Скрыть ботов",
        "activeusers-hidesysops": "Скрыть администраторов",
        "mywatchlist": "Список наблюдения",
        "watchlistfor2": "Для $1 $2",
        "nowatchlist": "Ваш список наблюдения пуст.",
-       "watchlistanontext": "Ð\92Ñ\8b Ð´Ð¾Ð»Ð¶Ð½Ñ\8b Ð²Ð¾Ð¹Ñ\82и, чтобы просмотреть или отредактировать элементы в списке наблюдения.",
+       "watchlistanontext": "Ð\9fожалÑ\83йÑ\81Ñ\82а, Ð²Ð¾Ð¹Ð´Ð¸Ñ\82е, чтобы просмотреть или отредактировать элементы в списке наблюдения.",
        "watchnologin": "Нужно представиться системе",
        "addwatch": "Добавить в список наблюдения",
        "addedwatchtext": "Страница «[[:$1]]» была добавлена в ваш [[Special:Watchlist|список наблюдения]].\nТам будут отмечаться последующие изменения этой страницы, а также связанной с ней страницы обсуждения.",
        "unwatchthispage": "Прекратить наблюдение",
        "notanarticle": "Не статья",
        "notvisiblerev": "Версия была удалена",
-       "watchlist-details": "В вашем списке наблюдения $1 {{PLURAL:$1|страница|страниц|страницы}}, не считая страниц обсуждений.",
+       "watchlist-details": "В вашем списке наблюдения $1 {{PLURAL:$1|страница|страницы|страниц}}, не считая страниц обсуждений.",
        "wlheader-enotif": "Уведомления по эл. почте включены.",
        "wlheader-showupdated": "Страницы, изменившиеся с вашего последнего их посещения, выделены '''жирным''' шрифтом.",
-       "wlnote": "Ниже {{PLURAL:$1|показано последнее изменение|показаны <strong>$1</strong> последних изменений|показаны <strong>$1</strong> последние изменения}} за {{PLURAL:$2|последний час|последние <strong>$2</strong> часов|последние <strong>$2</strong> часа}}, по состоянию на $3 $4.",
-       "wlshowlast": "Показать за последние $1 часов $2 дней $3",
+       "wlnote": "Ниже {{PLURAL:$1|показано последнее изменение|показаны <strong>$1</strong> последние изменения|показаны <strong>$1</strong> последних изменений}} за {{PLURAL:$2|последний час|последние <strong>$2</strong> часа|последние <strong>$2</strong> часов}}, по состоянию на $3 $4.",
+       "wlshowlast": "Показать за последние $1 часов $2 дней",
        "watchlist-options": "Настройки списка наблюдения",
        "watching": "Добавление в список наблюдения…",
        "unwatching": "Удаление из списка наблюдения…",
        "rollback": "Откатить изменения",
        "rollback_short": "Откат",
        "rollbacklink": "откатить",
-       "rollbacklinkcount": "оÑ\82каÑ\82иÑ\82Ñ\8c $1 {{PLURAL:$1|пÑ\80авкÑ\83|пÑ\80авок|пÑ\80авки}}",
-       "rollbacklinkcount-morethan": "оÑ\82каÑ\82иÑ\82Ñ\8c Ð±Ð¾Ð»Ñ\8cÑ\88е, Ñ\87ем $1 {{PLURAL:$1|пÑ\80авкÑ\83|пÑ\80авок|пÑ\80авки}}",
+       "rollbacklinkcount": "оÑ\82каÑ\82иÑ\82Ñ\8c $1 {{PLURAL:$1|пÑ\80авкÑ\83|пÑ\80авки|пÑ\80авок}}",
+       "rollbacklinkcount-morethan": "оÑ\82каÑ\82иÑ\82Ñ\8c Ð±Ð¾Ð»Ñ\8cÑ\88е, Ñ\87ем $1 {{PLURAL:$1|пÑ\80авкÑ\83|пÑ\80авки|пÑ\80авок}}",
        "rollbackfailed": "Ошибка при совершении отката",
        "cantrollback": "Невозможно откатить изменения. Последний, кто вносил изменения, является единственным автором этой страницы.",
        "alreadyrolled": "Невозможно откатить последние изменения страницы «[[:$1]]», совершённые [[User:$2|$2]] ([[User talk:$2|обсуждение]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]),\nпоскольку кто-то другой уже успел откатить эти правки или отредактировать страницу.\n\nПоследние изменения {{GENDER:$3|внёс|внесла}} [[User:$3|$3]] ([[User talk:$3|обсуждение]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "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** популярная страница",
        "undeleteinvert": "Обратить выделение",
        "undeletecomment": "Причина:",
        "undeletedrevisions": "{{PLURAL:$1|восстановлено|восстановлены}} $1 {{PLURAL:$1|изменение|изменений|изменения}}",
-       "undeletedrevisions-files": "воÑ\81Ñ\81Ñ\82ановленÑ\8b $1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f|веÑ\80Ñ\81ий|веÑ\80Ñ\81ии}} Ð¸ $2 {{PLURAL:$2|Ñ\84айл|Ñ\84айлов|Ñ\84айла}}",
+       "undeletedrevisions-files": "воÑ\81Ñ\81Ñ\82ановленÑ\8b $1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f|веÑ\80Ñ\81ии|веÑ\80Ñ\81ий}} Ð¸ $2 {{PLURAL:$2|Ñ\84айл|Ñ\84айла|Ñ\84айлов}}",
        "undeletedfiles": "{{PLURAL:$1|восстановлен|восстановлены}} $1 {{PLURAL:$1|файл|файлов|файла}}",
        "cannotundelete": "Ошибка восстановления:\n$1",
        "undeletedpage": "'''Страница «$1» была восстановлена.'''\n\nДля просмотра списка последних удалений и восстановлений см. [[Special:Log/delete|журнал удалений]].",
        "unblocked": "[[User:$1|$1]] {{GENDER:$1|разблокирован|разблокирована}}",
        "unblocked-range": "$1 был разблокирован",
        "unblocked-id": "Блокировка $1 была снята",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] был разблокирован.",
        "blocklist": "Заблокированные участники",
        "ipblocklist": "Заблокированные участники",
        "ipblocklist-legend": "Поиск заблокированного участника",
        "change-blocklink": "изменить блокировку",
        "contribslink": "вклад",
        "emaillink": "отправить письмо",
-       "autoblocker": "Автоблокировка из-за того, что ваш IP-адрес недавно использовал «[[User:$1|$1]]».\nПричина блокировки $1ː «$2»",
+       "autoblocker": "Автоблокировка из-за того, что ваш IP-адрес недавно использовал «[[User:$1|$1]]».\nПричина блокировки $1: «$2»",
        "blocklogpage": "Журнал блокировок",
        "blocklog-showlog": "{{GENDER:$1|Этот участник уже блокировался|Эта участница уже блокировалась}} ранее.\nНиже приведён журнал блокировок:",
        "blocklog-showsuppresslog": "{{GENDER:$1|Этот участник уже заблокирован и скрыт|Эта участница уже заблокирована и скрыта}}. Журнал сокрытий приведён ниже:",
        "movepage-page-exists": "Страница $1 уже существует и не может быть автоматически перезаписана.",
        "movepage-page-moved": "Страница $1 была переименована в $2.",
        "movepage-page-unmoved": "Страница $1 не может быть переименована в $2.",
-       "movepage-max-pages": "{{PLURAL:$1|Ð\91Ñ\8bла Ð¿ÐµÑ\80еименована|Ð\91Ñ\8bли Ð¿ÐµÑ\80еименованÑ\8b\91Ñ\8bло Ð¿ÐµÑ\80еименовано}} $1 {{PLURAL:$1|Ñ\81Ñ\82Ñ\80аниÑ\86а|Ñ\81Ñ\82Ñ\80аниÑ\86\81Ñ\82Ñ\80аниÑ\86Ñ\8b}} — это максимум; большее число страниц автоматически переименовать нельзя.",
+       "movepage-max-pages": "{{PLURAL:$1|Ð\91Ñ\8bла Ð¿ÐµÑ\80еименована|Ð\91Ñ\8bло Ð¿ÐµÑ\80еименовано|Ð\91Ñ\8bли Ð¿ÐµÑ\80еименованÑ\8b}} $1 {{PLURAL:$1|Ñ\81Ñ\82Ñ\80аниÑ\86а|Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b\81Ñ\82Ñ\80аниÑ\86}} — это максимум; большее число страниц автоматически переименовать нельзя.",
        "movelogpage": "Журнал переименований",
        "movelogpagetext": "Ниже представлен список переименованных страниц.",
        "movesubpage": "{{PLURAL:$1|1=Подстраница|Подстраницы}}",
-       "movesubpagetext": "У этой страницы $1 {{PLURAL:$1|подстраница|подстраниц|подстраницы}}.",
+       "movesubpagetext": "У этой страницы $1 {{PLURAL:$1|подстраница|подстраницы|подстраниц}}.",
        "movenosubpage": "У этой страницы нет подстраниц.",
        "movereason": "Причина:",
        "revertmove": "возврат",
        "import-comment": "Примечание:",
        "importtext": "Пожалуйста, экспортируйте страницу из исходной вики, используя [[Special:Export|соответствующий инструмент]]. Сохраните файл на диск, а затем загрузите его сюда.",
        "importstart": "Импортирование страниц…",
-       "import-revision-count": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f|веÑ\80Ñ\81ий|веÑ\80Ñ\81ии}}",
+       "import-revision-count": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f|веÑ\80Ñ\81ии|веÑ\80Ñ\81ий}}",
        "importnopages": "Нет страниц для импортирования.",
-       "imported-log-entries": "{{PLURAL:$1|Импортирована $1 запись|Импортировано $1 записей|Импортированы $1 записи}} журнала.",
+       "imported-log-entries": "{{PLURAL:$1|Импортирована $1 запись|Импортированы $1 записи|Импортировано $1 записей}} журнала.",
        "importfailed": "Не удалось импортировать: $1",
        "importunknownsource": "Неизвестный тип импортируемой страницы",
        "importcantopen": "Невозможно открыть импортируемый файл",
        "importlogpage": "Журнал импорта",
        "importlogpagetext": "Импортирование администраторами страниц с историей изменений из других вики.",
        "import-logentry-upload": "«[[$1]]» — импорт из файла",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80ована|веÑ\80Ñ\81ий Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80овано|веÑ\80Ñ\81ии импортировано}}",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80ована|веÑ\80Ñ\81ии Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80овано|веÑ\80Ñ\81ий импортировано}}",
        "import-logentry-interwiki": "«$1» — межвики импорт",
-       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80ована|веÑ\80Ñ\81ий  Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80овано|веÑ\80Ñ\81ии импортировано}} из $2",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|веÑ\80Ñ\81иÑ\8f Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80ована|веÑ\80Ñ\81ии Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80овано|веÑ\80Ñ\81ий  импортировано}} из $2",
        "javascripttest": "Проверка JavaScript",
        "javascripttest-title": "Проводится проверка $1",
        "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": "Создать новый раздел",
        "tooltip-feed-atom": "Трансляция в Atom для этой страницы",
        "tooltip-t-contributions": "Список страниц, которые изменял этот участник",
        "tooltip-t-emailuser": "Отправить письмо этому участнику",
+       "tooltip-t-info": "Подробнее об этой странице",
        "tooltip-t-upload": "Загрузить файлы",
        "tooltip-t-specialpages": "Список служебных страниц",
        "tooltip-t-print": "Версия этой страницы для печати",
        "pageinfo-robot-policy": "Индексация поисковыми роботами",
        "pageinfo-robot-index": "Разрешено",
        "pageinfo-robot-noindex": "Не разрешено",
-       "pageinfo-views": "Количество просмотров",
        "pageinfo-watchers": "Число наблюдающих",
        "pageinfo-few-watchers": "Менее $1 {{PLURAL:$1|следящего|следящих}}",
        "pageinfo-redirects-name": "Количество перенаправлений на эту страницу",
        "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "Подстраницы данной страницы",
-       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|перенаправление|перенаправлений|перенаправления}}; $3 {{PLURAL:$3|обычная|обычных|обычные}})",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|перенаправление|перенаправления|перенаправлений}}; $3 {{PLURAL:$3|обычная|обычные|обычных}})",
        "pageinfo-firstuser": "Создатель страницы",
        "pageinfo-firsttime": "Дата создания страницы",
        "pageinfo-lastuser": "Последний редактор",
        "pageinfo-hidden-categories": "{{PLURAL:$1|1=Скрытая категория|Скрытых категорий}} ($1)",
        "pageinfo-templates": "{{PLURAL:$1|1=Шаблон|Шаблонов}} ($1)",
        "pageinfo-transclusions": "{{PLURAL:$1|1=Включаемая страница|Включаемых страниц}} ($1)",
-       "pageinfo-toolboxlink": "Сведения о странице",
+       "pageinfo-toolboxlink": "Сведения о странице",
        "pageinfo-redirectsto": "Перенаправление",
        "pageinfo-redirectsto-info": "сведения",
        "pageinfo-contentpage": "Учитывается счётчиком как содержательная страница",
        "imagemaxsize": "Ограничение на размер изображения:<br />''(для страницы описания файла)''",
        "thumbsize": "Размер уменьшенной версии изображения:",
        "widthheight": "$1 × $2",
-       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|страница|страниц|страницы}}",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|страница|страницы|страниц}}",
        "file-info": "размер файла: $1, MIME-тип: $2",
-       "file-info-size": "$1 × $2 {{PLURAL:$2|пиксель|пикселей|пикселя}}, размер файла: $3, MIME-тип: $4",
-       "file-info-size-pages": "$1 × $2 пикселей, размер файла: $3, MIME-тип: $4, $5 {{PLURAL:$5|страница|страниц|страницы}}",
+       "file-info-size": "$1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3, MIME-тип: $4",
+       "file-info-size-pages": "$1 × $2 пикселей, размер файла: $3, MIME-тип: $4, $5 {{PLURAL:$5|страница|страницы|страниц}}",
        "file-nohires": "Нет версии с бо́льшим разрешением.",
-       "svg-long-desc": "SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселей|пикселя}}, размер файла: $3",
-       "svg-long-desc-animated": "Анимированный SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселей|пикселя}}, размер файла: $3",
+       "svg-long-desc": "SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3",
+       "svg-long-desc-animated": "Анимированный SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3",
        "svg-long-error": "неправильный SVG-файл: $1",
        "show-big-image": "Исходный файл",
        "show-big-image-preview": "Размер при предпросмотре: $1.",
        "show-big-image-other": "{{PLURAL:$2|1=Другое разрешение|Другие разрешения}}: $1.",
        "show-big-image-size": "$1 × $2 пикселей",
        "file-info-gif-looped": "закольцованный",
-       "file-info-gif-frames": "$1 {{PLURAL:$1|Ñ\84Ñ\80ейм|Ñ\84Ñ\80еймов|Ñ\84Ñ\80ейма}}",
+       "file-info-gif-frames": "$1 {{PLURAL:$1|Ñ\84Ñ\80ейм|Ñ\84Ñ\80ейма|Ñ\84Ñ\80еймов}}",
        "file-info-png-looped": "закольцованный",
-       "file-info-png-repeat": "проигрывается $1 {{PLURAL:$1|раз|раз|раза}}",
-       "file-info-png-frames": "$1 {{PLURAL:$1|кадÑ\80|кадÑ\80ов|кадÑ\80а}}",
+       "file-info-png-repeat": "проигрывается $1 {{PLURAL:$1|раз|раза|раз}}",
+       "file-info-png-frames": "$1 {{PLURAL:$1|кадÑ\80|кадÑ\80а|кадÑ\80ов}}",
        "file-no-thumb-animation": "'''Примечание. По техническим причинам миниатюры этого файла не будет анимироваться.'''",
        "file-no-thumb-animation-gif": "'''Примечание. По техническим причинам миниатюры подобных GIF-изображений высокого разрешения не анимируются.'''",
        "newimages": "Галерея новых файлов",
        "minutes-abbrev": "$1 м",
        "hours-abbrev": "$1 ч",
        "days-abbrev": "$1 д",
-       "seconds": "{{PLURAL:$1|$1 секунда|$1 секунд|$1 секунды}}",
-       "minutes": "{{PLURAL:$1|$1 минута|$1 минут|$1 минуты}}",
-       "hours": "{{PLURAL:$1|$1 Ñ\87аÑ\81|$1 Ñ\87аÑ\81ов|$1 Ñ\87аÑ\81а}}",
-       "days": "{{PLURAL:$1|$1 день|$1 дней|$1 дня}}",
-       "weeks": "{{PLURAL:$1|$1 неделя|$1 недель|$1 недели}}",
-       "months": "{{PLURAL:$1|$1 Ð¼ÐµÑ\81Ñ\8fÑ\86|$1 Ð¼ÐµÑ\81Ñ\8fÑ\86ев|$1 Ð¼ÐµÑ\81Ñ\8fÑ\86а}}",
-       "years": "{{PLURAL:$1|$1 Ð³Ð¾Ð´|$1 Ð»ÐµÑ\82|$1 Ð³Ð¾Ð´Ð°}}",
+       "seconds": "{{PLURAL:$1|$1 секунда|$1 секунды|$1 секунд}}",
+       "minutes": "{{PLURAL:$1|$1 минута|$1 минуты|$1 минут}}",
+       "hours": "{{PLURAL:$1|$1 Ñ\87аÑ\81|$1 Ñ\87аÑ\81а|$1 Ñ\87аÑ\81ов}}",
+       "days": "{{PLURAL:$1|$1 день|$1 дня|$1 дней}}",
+       "weeks": "{{PLURAL:$1|$1 неделя|$1 недели|$1 недель}}",
+       "months": "{{PLURAL:$1|$1 Ð¼ÐµÑ\81Ñ\8fÑ\86|$1 Ð¼ÐµÑ\81Ñ\8fÑ\86а|$1 Ð¼ÐµÑ\81Ñ\8fÑ\86ев}}",
+       "years": "{{PLURAL:$1|$1 Ð³Ð¾Ð´|$1 Ð³Ð¾Ð´Ð°|$1 Ð»ÐµÑ\82}}",
        "ago": "$1 назад",
        "just-now": "только что",
-       "hours-ago": "$1 {{PLURAL:$1|Ñ\87аÑ\81\87аÑ\81ов|Ñ\87аÑ\81а}} назад",
-       "minutes-ago": "$1 {{PLURAL:$1|минуту|минут|минуты}} назад",
-       "seconds-ago": "$1 {{PLURAL:$1|секунду|секунд|секунды}} назад",
+       "hours-ago": "$1 {{PLURAL:$1|Ñ\87аÑ\81\87аÑ\81а|Ñ\87аÑ\81ов}} назад",
+       "minutes-ago": "$1 {{PLURAL:$1|минуту|минуты|минут}} назад",
+       "seconds-ago": "$1 {{PLURAL:$1|секунду|секунды|секунд}} назад",
        "monday-at": "в понедельник в $1",
        "tuesday-at": "во вторник в $1",
        "wednesday-at": "в среду в $1",
        "exif-exposureprogram-6": "Спортивный режим (с минимальной выдержкой)",
        "exif-exposureprogram-7": "Портретный режим (для снимков на близком расстоянии, с фоном не в фокусе)",
        "exif-exposureprogram-8": "Пейзажный режим (для пейзажных снимков, с фоном в фокусе)",
-       "exif-subjectdistance-value": "$1 {{PLURAL:$1|меÑ\82Ñ\80|меÑ\82Ñ\80ов|меÑ\82Ñ\80а}}",
+       "exif-subjectdistance-value": "$1 {{PLURAL:$1|меÑ\82Ñ\80|меÑ\82Ñ\80а|меÑ\82Ñ\80ов}}",
        "exif-meteringmode-0": "Неизвестно",
        "exif-meteringmode-1": "Средний",
        "exif-meteringmode-2": "Центровзвешенный",
        "exif-gpslatitude-s": "южной широты",
        "exif-gpslongitude-e": "восточной долготы",
        "exif-gpslongitude-w": "западной долготы",
-       "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|меÑ\82Ñ\80|меÑ\82Ñ\80ов|меÑ\82Ñ\80а}} над уровнем моря",
-       "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|меÑ\82Ñ\80|меÑ\82Ñ\80ов|меÑ\82Ñ\80а}} ниже уровня моря",
+       "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|меÑ\82Ñ\80|меÑ\82Ñ\80а|меÑ\82Ñ\80ов}} над уровнем моря",
+       "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|меÑ\82Ñ\80|меÑ\82Ñ\80а|меÑ\82Ñ\80ов}} ниже уровня моря",
        "exif-gpsstatus-a": "Измерение не закончено",
        "exif-gpsstatus-v": "Готов к передаче данных",
        "exif-gpsmeasuremode-2": "Измерение 2-х координат",
        "exif-urgency-low": "Низкая ($1)",
        "exif-urgency-high": "Высокая ($1)",
        "exif-urgency-other": "Определённый пользователем приоритет ($1)",
-       "watchlistall2": "все",
        "namespacesall": "все",
        "monthsall": "все",
        "confirmemail": "Подтверждение адреса электронной почты",
        "watchlistedit-normal-legend": "Удаление записей из списка наблюдения",
        "watchlistedit-normal-explain": "Ниже перечислены страницы, находящиеся в вашем списке наблюдения.\nДля удаления записей отметьте соответствующие позиции и нажмите кнопку «{{int:Watchlistedit-normal-submit}}».\nВы также можете [[Special:EditWatchlist/raw|править список как текст]].",
        "watchlistedit-normal-submit": "Удалить записи",
-       "watchlistedit-normal-done": "Ð\98з Ð²Ð°Ñ\88его Ñ\81пиÑ\81ка Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f {{PLURAL:$1|бÑ\8bла Ñ\83далена|бÑ\8bло Ñ\83далено|бÑ\8bли Ñ\83даленÑ\8b}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81ей|запиÑ\81и}}:",
+       "watchlistedit-normal-done": "Ð\98з Ð²Ð°Ñ\88его Ñ\81пиÑ\81ка Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f {{PLURAL:$1|бÑ\8bла Ñ\83далена|бÑ\8bли Ñ\83даленÑ\8b|бÑ\8bло Ñ\83далено}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81и|запиÑ\81ей}}:",
        "watchlistedit-raw-title": "Редактирование списка наблюдения как текста",
        "watchlistedit-raw-legend": "Редактирование списка наблюдения",
        "watchlistedit-raw-explain": "Ниже перечислены страницы, находящиеся в вашем списке наблюдения. Вы можете изменять этот список, добавляя и удаляя из него строки с названиями, по одному названию на строке.\nПосле завершения правок нажмите кнопку «{{int:Watchlistedit-raw-submit}}».\nВы также можете [[Special:EditWatchlist|использовать стандартный редактор]].",
        "watchlistedit-raw-titles": "Записи:",
        "watchlistedit-raw-submit": "Сохранить список",
        "watchlistedit-raw-done": "Ваш список наблюдения сохранён.",
-       "watchlistedit-raw-added": "{{PLURAL:$1|Ð\91Ñ\8bла Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð°|Ð\91Ñ\8bло Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾|Ð\91Ñ\8bли Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ\8b}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81ей|запиÑ\81и}}:",
-       "watchlistedit-raw-removed": "{{PLURAL:$1|Ð\91Ñ\8bла Ñ\83далена|Ð\91Ñ\8bло Ñ\83далено|Ð\91Ñ\8bли Ñ\83даленÑ\8b}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81ей|запиÑ\81и}}:",
+       "watchlistedit-raw-added": "{{PLURAL:$1|Ð\91Ñ\8bла Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð°|Ð\91Ñ\8bли Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ\8b\91Ñ\8bло Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81и|запиÑ\81ей}}:",
+       "watchlistedit-raw-removed": "{{PLURAL:$1|Ð\91Ñ\8bла Ñ\83далена|Ð\91Ñ\8bли Ñ\83даленÑ\8b\91Ñ\8bло Ñ\83далено}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81и|запиÑ\81ей}}:",
        "watchlistedit-clear-title": "Очищение списка наблюдения",
        "watchlistedit-clear-legend": "Очистить список наблюдения",
        "watchlistedit-clear-explain": "Все записи будут удалены из вашего списка наблюдения",
        "watchlistedit-clear-titles": "Заголовки:",
        "watchlistedit-clear-submit": "Очистить список наблюдения (это необратимо!)",
        "watchlistedit-clear-done": "Ваш список наблюдения очищен.",
-       "watchlistedit-clear-removed": "{{PLURAL:$1|Ð\91Ñ\8bла Ñ\83далена|Ð\91Ñ\8bло Ñ\83далено|Ð\91Ñ\8bли Ñ\83даленÑ\8b}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81ей|запиÑ\81и}}:",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|Ð\91Ñ\8bла Ñ\83далена|Ð\91Ñ\8bли Ñ\83даленÑ\8b\91Ñ\8bло Ñ\83далено}} $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81и|запиÑ\81ей}}:",
        "watchlistedit-too-many": "Слишком много страниц для того, чтобы показать их здесь.",
        "watchlisttools-clear": "Очистить список наблюдения",
        "watchlisttools-view": "Изменения на страницах из списка",
        "unknown_extension_tag": "Неизвестный тег расширения «$1»",
        "duplicate-defaultsort": "Внимание. Ключ сортировки по умолчанию «$2» переопределяет прежний ключ сортировки по умолчанию «$1».",
        "duplicate-displaytitle": "<strong>Внимание:</strong> Отображаемое название «$2» переопределяет ранее заданное отображаемое название «$1».",
+       "invalid-indicator-name": "<strong>Ошибка:</strong> Атрибут <code>name</code> индикаторов состояния страницы не должен быть пустым.",
        "version": "Версия",
        "version-extensions": "Установленные расширения",
        "version-skins": "Установленные темы оформления",
        "fileduplicatesearch-legend": "Поиск дубликатов",
        "fileduplicatesearch-filename": "Имя файла:",
        "fileduplicatesearch-submit": "Найти",
-       "fileduplicatesearch-info": "$1 × $2 {{PLURAL:$2|пиксель|пикселей|пикселя}}<br />Размер файла: $3<br />MIME-тип: $4",
+       "fileduplicatesearch-info": "$1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}<br />Размер файла: $3<br />MIME-тип: $4",
        "fileduplicatesearch-result-1": "Файл «$1» не имеет идентичных дубликатов.",
-       "fileduplicatesearch-result-n": "Файл Â«$1» Ð¸Ð¼ÐµÐµÑ\82 $2 {{PLURAL:$2|иденÑ\82иÑ\87нÑ\8bй Ð´Ñ\83бликаÑ\82|иденÑ\82иÑ\87нÑ\8bÑ\85 Ð´Ñ\83бликаÑ\82ов|иденÑ\82иÑ\87нÑ\8bÑ\85 Ð´Ñ\83бликаÑ\82а}}.",
+       "fileduplicatesearch-result-n": "Файл Â«$1» Ð¸Ð¼ÐµÐµÑ\82 $2 {{PLURAL:$2|иденÑ\82иÑ\87нÑ\8bй Ð´Ñ\83бликаÑ\82|иденÑ\82иÑ\87нÑ\8bÑ\85 Ð´Ñ\83бликаÑ\82а|иденÑ\82иÑ\87нÑ\8bÑ\85 Ð´Ñ\83бликаÑ\82ов}}.",
        "fileduplicatesearch-noresults": "Не найден файл с именем «$1».",
        "specialpages": "Спецстраницы",
        "specialpages-note-top": "Легенда",
        "tags-active-yes": "Да",
        "tags-active-no": "Нет",
        "tags-edit": "править",
-       "tags-hitcount": "$1 {{PLURAL:$1|изменение|изменений|изменения}}",
+       "tags-hitcount": "$1 {{PLURAL:$1|изменение|изменения|изменений}}",
        "comparepages": "Сравнение страниц",
        "compare-page1": "Первая страница",
        "compare-page2": "Вторая страница",
        "revdelete-uname-unhid": "имя участника раскрыто",
        "revdelete-restricted": "ограничения применяются к администраторам",
        "revdelete-unrestricted": "ограничения сняты для администраторов",
+       "logentry-merge-merge": "$1 объедининил{{GENDER:$2||а}} $3 в $4 (версии до $5)",
        "logentry-move-move": "$1 {{GENDER:$2|переименовал|переименовала}} страницу $3 в $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|переименовал|переименовала}} страницу $3 в $4 без оставления перенаправления",
        "logentry-move-move_redir": "$1 {{GENDER:$2|переименовал|переименовала}} страницу $3 в $4 поверх перенаправления",
        "logentry-upload-overwrite": "$1 загрузил{{GENDER:$2||а}} новую версию $3",
        "logentry-upload-revert": "$1 загрузил{{GENDER:$2||а}} $3",
        "rightsnone": "(нет)",
+       "revdelete-summary": "описание изменений",
        "feedback-bugornote": "Если вы готовы подробно описать техническую проблему, пожалуйста, [$1 сообщите об ошибке].\nВ противном случае вы можете использовать данную простую форму. Ваш комментарий будет добавлен на страницу «[$3 $2]» вместе с вашим именем участника и используемым браузером.",
        "feedback-subject": "Тема:",
        "feedback-message": "Сообщение:",
        "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|Ñ\87аÑ\81\87аÑ\81ов|Ñ\87аÑ\81а}}",
-       "duration-days": "$1 {{PLURAL:$1|день|дней|дня}}",
-       "duration-weeks": "$1 {{PLURAL:$1|неделя|недель|недели}}",
-       "duration-years": "$1 {{PLURAL:$1|год|леÑ\82|года}}",
-       "duration-decades": "$1 {{PLURAL:$1|десятилетие|десятилетий|десятилетия}}",
-       "duration-centuries": "$1 {{PLURAL:$1|век|веков|века}}",
-       "duration-millennia": "$1 {{PLURAL:$1|тысячелетие|тысячелетий|тысячелетия}}",
-       "rotate-comment": "Ð\98зобÑ\80ажение Ð¿Ð¾Ð²Ñ\91Ñ\80нÑ\83Ñ\82о Ð½Ð° $1 Ð³Ñ\80адÑ\83Ñ\81{{PLURAL:$1||ов|а}} по часовой стрелке",
+       "duration-seconds": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
+       "duration-minutes": "$1 {{PLURAL:$1|минута|минуты|минут}}",
+       "duration-hours": "$1 {{PLURAL:$1|Ñ\87аÑ\81\87аÑ\81а|Ñ\87аÑ\81ов}}",
+       "duration-days": "$1 {{PLURAL:$1|день|дня|дней}}",
+       "duration-weeks": "$1 {{PLURAL:$1|неделя|недели|недель}}",
+       "duration-years": "$1 {{PLURAL:$1|год|года|леÑ\82}}",
+       "duration-decades": "$1 {{PLURAL:$1|десятилетие|десятилетия|десятилетий}}",
+       "duration-centuries": "$1 {{PLURAL:$1|век|века|веков}}",
+       "duration-millennia": "$1 {{PLURAL:$1|тысячелетие|тысячелетия|тысячелетий}}",
+       "rotate-comment": "Ð\98зобÑ\80ажение Ð¿Ð¾Ð²Ñ\91Ñ\80нÑ\83Ñ\82о Ð½Ð° $1 Ð³Ñ\80адÑ\83Ñ\81{{PLURAL:$1||а|ов}} по часовой стрелке",
        "limitreport-title": "Данные анализатора:",
        "limitreport-cputime": "Использование времени процессора",
-       "limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунд|секунды}}",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
        "limitreport-walltime": "Использование в режиме реального времени",
-       "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунд|секунды}}",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
        "limitreport-ppvisitednodes": "Количество узлов, посещённых препроцессором",
        "limitreport-ppgeneratednodes": "Количество сгенерированных препроцессором узлов",
        "limitreport-postexpandincludesize": "Размер раскрытых включений",
-       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|байÑ\82|байÑ\82ов|байÑ\82а}}",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|байÑ\82|байÑ\82а|байÑ\82ов}}",
        "limitreport-templateargumentsize": "Размер аргумента шаблона",
-       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|байÑ\82|байÑ\82ов|байÑ\82а}}",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|байÑ\82|байÑ\82а|байÑ\82ов}}",
        "limitreport-expansiondepth": "Наибольшая глубина расширения",
        "limitreport-expensivefunctioncount": "Количество «дорогих» функций анализатора",
        "expandtemplates": "Развёртка шаблонов",
        "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:* Склонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code>skins/</code> папки, куда установлена MediaWiki.\n: Это не должно навредить вашему репозиторию, если вы MediaWiki-разработчик. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.\n; Если вы только что обновили MediaWiki:\n: MediaWiki версии 1.24 и более новых больше не включает автоматически установленные темы (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\nВы можете вставить следующие строчки в <code>LocalSettings.php</code>, чтобы включить все установленные темы оформления: \n\n\n<pre>$3</pre>\n\n\n; Если вы только что изменили <code>LocalSettings.php</code>:\n: Перепроверьте названия тем на наличие опечаток.",
-       "default-skin-not-found-no-skins": "Упс! Тема оформления по умолчанию для вашей вики (<code>$wgDefaultSkin</code>), <code>$1</code> недоступна.\n\n\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 архив установочных файлов], который содержит несколько тем оформления и расширений. Вы можете скопировать папку <code>skins/</code> из него.\n:* Склонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code>skins/</code> папки, куда установлена MediaWiki.\n: Это не должно навредить вашему репозиторию, если вы MediaWiki-разработчик. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.",
+       "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$ 2\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:* Клонировав один из репозиториев <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; Если вы только что обновили 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": "Упс! Тема оформления по умолчанию для вашей вики <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 архив установочных файлов], который содержит несколько тем оформления и расширений. Вы можете скопировать папку <code>skins/</code> из него.\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] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.",
        "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 ('''отключено''')",
+       "mediastatistics": "Медиа-статистика",
+       "mediastatistics-summary": "Статистические данные о типах загруженных файлов. Она включает информацию только о последних версиях файлов. Более старые или удалённые версии файлов не учитываются.",
+       "mediastatistics-nbytes": "$1 байт{{PLURAL:$1||а|ов}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME-тип",
+       "mediastatistics-table-extensions": "Возможные расширения",
+       "mediastatistics-table-count": "Количество файлов",
+       "mediastatistics-table-totalbytes": "Общий размер",
+       "mediastatistics-header-unknown": "Неизвестные",
+       "mediastatistics-header-bitmap": "Растровые изображения",
+       "mediastatistics-header-drawing": "Рисунки (векторные изображения)",
+       "mediastatistics-header-audio": "Аудио",
+       "mediastatistics-header-video": "Видео",
+       "mediastatistics-header-multimedia": "Мультимедиа",
+       "mediastatistics-header-office": "Офисные",
+       "mediastatistics-header-text": "Текстовые",
+       "mediastatistics-header-executable": "Исполняемые",
+       "mediastatistics-header-archive": "Сжатые форматы",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|лишняя запятая в конце была удалена|лишние запятые в конце были удалены|лишних запятых в конце были удалены}} из JSON",
+       "json-error-unknown": "Имеется проблема с JSON. Ошибка: $1",
+       "json-error-depth": "Превышена максимальная глубина стека",
+       "json-error-state-mismatch": "Недопустимый или неправильно составленный JSON",
+       "json-error-ctrl-char": "Ошибка управляющего символа, возможно, неверная кодировка",
+       "json-error-syntax": "Синтаксическая ошибка",
+       "json-error-utf8": "Некорректные символы UTF-8, возможно, неверная кодировка",
+       "json-error-recursion": "Должны быть закодированы одна или несколько рекурсивных ссылок в значении",
+       "json-error-inf-or-nan": "Должны быть закодированы одно или несколько NAN- или INF-значений",
+       "json-error-unsupported-type": "Было указано значение типа, который не может быть закодирован"
 }
index 84d0b22..c723ae6 100644 (file)
        "passwordreset-capture-help": "Кідь означіте тото поличко, буде імейл (з дочасным геслом) оркем посланя хоснователёви указаный і вам.",
        "passwordreset-email": "Адреса електронічной пошты:",
        "passwordreset-emailtitle": "Детайлы конта на {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Дахто (може Вы, з IP адресы $1) попросив о наставлїня нового гесла до вашого конта на {{grammar:6sg|{{SITENAME}}}} ($4). З тов адресов {{PLURAL:$3|є повязане наступне конто|суть повазяны слїдуючі конта}}:\n\n$2\n\n{{PLURAL:$3|Тото дочасне гесло|Тоты дочасны гесла}} стануть неплатныма {{PLURAL:$5|за день|за $5 днї|за $5 днїв}}.\nТеперь бы хотїло, бы сьте ся приголосили та зволлил нове гесло. Кідь тоту просьбу післав хтось другый або сьте ся на старе гесло роспамнятали і не хочете го змінити, можете тото повідомлїня іґноровати та дале хосновати старе гесло.",
-       "passwordreset-emailtext-user": "{{gender:$1|ХоÑ\81новаÑ\82елÑ\8c|ХоÑ\81новаÑ\82елÑ\8cка|ХоÑ\81новаÑ\82елÑ\8c}} $1 {{grammar:2sg|{{SITENAME}}}} {{gender:$1|попÑ\80оÑ\81ив|попÑ\80оÑ\81ила|попÑ\80оÑ\81ив}} Ð¾ Ð½Ð°Ñ\81Ñ\82авлÑ\97нÑ\8f Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ð³ÐµÑ\81ла Ðº Ð²Ð°Ñ\88омÑ\83\nконÑ\82Ñ\83 Ð½Ð° {{grammar:6sg|{{SITENAME}}}} ($4). Ð\9a Ñ\82Ñ\96й Ð°Ð´Ñ\80еÑ\81Ñ\97 {{PLURAL:$3|Ñ\94 Ñ\81пÑ\80Ñ\8fжене Ð½Ð°Ñ\81Ñ\82Ñ\83пне ÐºÐ¾Ð½Ñ\82о|Ñ\81Ñ\83Ñ\82Ñ\8c Ñ\81пÑ\80Ñ\8fженÑ\8b Ð½Ð°Ñ\81Ñ\82Ñ\83пнÑ\83 ÐºÐ¾Ð½Ñ\82а}}:\n\n$2\n\n{{PLURAL:$3|ТоÑ\82о Ð´Ð¾Ñ\87аÑ\81не Ð³ÐµÑ\81ло|ТоÑ\82Ñ\8b Ð´Ð¾Ñ\87аÑ\81нÑ\8b Ð³ÐµÑ\81ла}} ÐºÑ\96нÑ\87аÑ\82Ñ\8c {{PLURAL:$5|о Ñ\94ден Ð´ÐµÐ½Ñ\8c|о $5 Ð´Ð½Ñ\97|о $5 Ð´Ð½Ñ\97в}}.\nÐ\9dÑ\8bнÑ\97 Ð±Ñ\8b Ñ\81Ñ\8cÑ\82е Ñ\81Ñ\8f Ð¼Ð°Ð²(а) Ð¿Ñ\80иголоÑ\81иÑ\82и Ñ\83 Ð·Ð²Ð¾Ð»Ð¸Ñ\82и Ñ\81обÑ\96 Ð½Ð¾Ð²Ðµ Ð³ÐµÑ\81ло. Ð\9aÑ\96дÑ\8c Ñ\82оÑ\82Ñ\83 Ð¿Ð¾Ð¶Ð°Ð´Ð°Ð²ÐºÑ\83\nпоÑ\81лав Ð´Ð°Ñ\85Ñ\82о Ð´Ñ\80Ñ\83гÑ\8bй Ð°Ð±Ð¾ Ñ\81Ñ\8cÑ\82е Ñ\81обÑ\96 Ð½Ð° Ñ\81воÑ\94 Ñ\81Ñ\82аÑ\80е Ð³ÐµÑ\81ло Ñ\81помÑ\8fнÑ\83в(а),і не хочете го\nзмінити, можете тото повідомлїня іґноровати і надале хосновати старе гесло.",
+       "passwordreset-emailtext-ip": "Дахто (може Вы, з IP адресы $1) попросив о наставлїня нового гесла до вашого конта на {{grammar:6sg|{{SITENAME}}}} ($4). З тов адресов {{PLURAL:$3|є повязане слїдуюче конто|суть повязаны слїдуючі конта}}:\n\n$2\n\n{{PLURAL:$3|Тото дочасне гесло стане неплатным|Тоты дочасны гесла стануть неплатныма}} {{PLURAL:$5|за день|за $5 днї|за $5 днїв}}.\nТеперь бы сьте ся мали приголосити і зволити собі нове гесло. Кідь тоту просьбу послав хтось другый або сьте собі на своє старе гесло спомянули і не хочете го змінити, можете тото повідомлїня іґноровати і дале хосновати старе гесло.",
+       "passwordreset-emailtext-user": "{{gender:$1|ХоÑ\81новаÑ\82елÑ\8c|ХоÑ\81новаÑ\82елÑ\8cка|ХоÑ\81новаÑ\82елÑ\8c}} $1 {{grammar:2sg|{{SITENAME}}}} {{gender:$1|попÑ\80оÑ\81ив|попÑ\80оÑ\81ила|попÑ\80оÑ\81ив}} Ð¾ Ð½Ð°Ñ\81Ñ\82авлÑ\97нÑ\8f Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ð³ÐµÑ\81ла Ð´Ð¾ Ð²Ð°Ñ\88ого\nконÑ\82а Ð½Ð° {{grammar:6sg|{{SITENAME}}}} ($4). Ð\97 Ñ\82ов Ð°Ð´Ñ\80еÑ\81ов {{PLURAL:$3|Ñ\94 Ð¿Ð¾Ð²Ñ\8fзане Ð½Ð°Ñ\81Ñ\82Ñ\83пне ÐºÐ¾Ð½Ñ\82о|Ñ\81Ñ\83Ñ\82Ñ\8c Ð¿Ð¾Ð²Ñ\8fзанÑ\8b Ð½Ð°Ñ\81Ñ\82Ñ\83пнÑ\8b ÐºÐ¾Ð½Ñ\82а}}:\n\n$2\n\n{{PLURAL:$3|ТоÑ\82о Ð´Ð¾Ñ\87аÑ\81не Ð³ÐµÑ\81ло ÐºÑ\96нÑ\87иÑ\82Ñ\8c|ТоÑ\82Ñ\8b Ð´Ð¾Ñ\87аÑ\81нÑ\8b Ð³ÐµÑ\81ла ÐºÑ\96нÑ\87аÑ\82Ñ\8c}} {{PLURAL:$5|о Ñ\94ден Ð´ÐµÐ½Ñ\8c|о $5 Ð´Ð½Ñ\97|о $5 Ð´Ð½Ñ\97в}}.\nТепеÑ\80Ñ\8c Ð±Ñ\8b Ñ\81Ñ\8cÑ\82е Ñ\81Ñ\8f Ð¼Ð°Ð»Ð¸ Ð¿Ñ\80иголоÑ\81иÑ\82и Ñ\96 Ð·Ð²Ð¾Ð»Ð¸Ñ\82и Ñ\81обÑ\96 Ð½Ð¾Ð²Ðµ Ð³ÐµÑ\81ло. Ð\9aÑ\96дÑ\8c Ñ\82оÑ\82Ñ\83 Ð¿Ð¾Ð¶Ð°Ð´Ð°Ð²ÐºÑ\83 \nпоÑ\81лав Ð´Ð°Ñ\85Ñ\82о Ð´Ñ\80Ñ\83гÑ\8bй Ð°Ð±Ð¾ Ñ\81Ñ\8cÑ\82е Ñ\81обÑ\96 Ð½Ð° Ñ\81воÑ\94 Ñ\81Ñ\82аÑ\80е Ð³ÐµÑ\81ло Ñ\81помÑ\8fнÑ\83ли і не хочете го\nзмінити, можете тото повідомлїня іґноровати і надале хосновати старе гесло.",
        "passwordreset-emailelement": "Імя хоснователя: $1\nДочасне гесло: $2",
        "passwordreset-emailsent": "Імейл з геслом быв посланый.",
        "passwordreset-emailsent-capture": "Быв выґенерованый імейл з геслом, што є вказаный ниже.",
        "passwordreset-emailerror-capture": "Быв выґенерованый імейл з геслом, котрый є указаный ниже, але ся го не вдало загнати {{GENDER:$2|хоснователёви|хосновательцї}}: $1",
        "changeemail": "Зміна імейловой адресы",
-       "changeemail-header": "Зміна імейловой адресу ку конту",
        "changeemail-text": "Выповнїнём того формуларя собі зміните імейлову адресу. Про потверджіня зміны будете мусити знову задати своє гесло.",
        "changeemail-no-info": "Ку тій сторінцї мають прямый приступ лем приголошены хоснователї.",
        "changeemail-oldemail": "Теперїшня імейлова адреса:",
        "changeemail-none": "(жадне)",
        "changeemail-password": "Ваше гесло на портал {{SITENAME}}:",
        "changeemail-submit": "Змінити імейл",
-       "changeemail-cancel": "Сторно",
        "changeemail-throttled": "Зробили сьте дуже много спроб о приголошіня.\nПросиме Вас, почекайте $1 перед далшов спробов.",
        "resettokens": "Реініціалізація клічів",
        "resettokens-text": "На тій сторінцї можете реініціалізовати клічі, якы уможнюють приступ к даякым пріватным даным звязаным з вашым контом.\n\n{{GENDER:|Мав|Мала|Мали}} бы сьте то учінити тогды, колы сьте помылково дакому {{GENDER:|прозрадив|прозрадила|прозрадили}}, або ваше конто было зрушене.",
        "mergehistory-same-destination": "Жрідлова і цілёва сторінка не можуть быти такы самы",
        "mergehistory-reason": "Причіна:",
        "mergelog": "Книга злучованя",
-       "pagemerge-logentry": "злучує сторінку [[$1]] зо сторінков [[$2]] (верзії до $3)",
        "revertmerge": "Роздїлити",
        "mergelogpagetext": "Ниже є список найновшых злучінь історії єдной сторінкы з другов.",
        "history-title": "$1: Історія змін",
        "searchrelated": "звязаный",
        "searchall": "вшыткы",
        "showingresults": "Ниже {{PLURAL:$1|вказане|вказаны|вказаных}} '''$1''' {{PLURAL:$1|резултат|резултаты|резултатів}}, почінаючіх з №&nbsp;'''$2'''",
-       "showingresultsheader": "{{PLURAL:$5|Резултат '''$1''' з '''$3'''|Резултаты '''$1 — $2''' з '''$3'''}}  про '''$4'''",
        "search-nonefound": "На вашу пожадавку не были найджены жадны резултаты.",
        "powersearch-legend": "Росшырене гляданя",
        "powersearch-ns": "Глядати у просторах назв:",
        "powersearch-togglelabel": "Позначіти:",
        "powersearch-toggleall": "Вшыткы",
        "powersearch-togglenone": "Жадный",
+       "powersearch-remember": "Запамятати выбір про будучі гляданя",
        "search-external": "Екстерне гляданя",
        "searchdisabled": "<p>Перебачте. Повнотекстове гляданя є дочасно недоступне. Затля можете спробовати гляданя Google; є але можне, же ёго резултаты не мусять быти актуалны.</p>",
        "search-error": "Як ся глядало трафіла ся хыба: $1",
        "mimetype": "MIME-тіп:",
        "download": "скачати",
        "unwatchedpages": "Неслїдованы сторінкы",
-       "listredirects": "Список напрямлинь",
+       "listredirects": "Список напрямлїнь",
        "unusedtemplates": "Нехоснованы шаблоны",
        "unusedtemplatestext": "Тота сторінка обсягує список вшыткых сторінок в простору назв {{ns:template}}, котры не суть вложены до жадной іншой сторінкы. Перед їх змазанём не забудьте перевірити іншы одказы.",
        "unusedtemplateswlh": "іншы одказы",
        "randomincategory": "Трафункова сторінка в катеґорії",
        "randomincategory-invalidcategory": "\" $1 \" не є платна назва катеґорії.",
        "randomincategory-nopages": "В [[:Category:$1|катеґорії $1]] не суть ниякы сторінкы.",
-       "randomincategory-selectcategory": "Дістати трафункову сторінку з катеґорії: $1 $2.",
        "randomredirect": "Трафункове напрямлїня",
        "randomredirect-nopages": "Простор назв „$1“ не обсягує жадны напрямлїня.",
        "statistics": "Штатістіка",
        "statistics-header-pages": "Штатістіка сторінок",
        "statistics-header-edits": "Штатістіка едітовань",
-       "statistics-header-views": "Штатістіка зображіня",
        "statistics-header-users": "Штатістіка хоснователїв",
        "statistics-header-hooks": "Інша штатістіка",
        "statistics-articles": "Обсяговы сторінкы",
        "statistics-files": "Наладованы файлы",
        "statistics-edits": "Чісло едітованя од основаня вікі {{SITENAME}}",
        "statistics-edits-average": "Середнє чісло едітовань на сторінку",
-       "statistics-views-total": "Вшыткых переглядів",
-       "statistics-views-total-desc": "Зображіня неєствуючіх і шпеціалных сторінок ся не рахують",
-       "statistics-views-peredit": "Чісло зображінь на едітованя",
        "statistics-users": "Реґістрованы [[Special:ListUsers|хоснователї]]",
        "statistics-users-active": "Актівны хоснователї",
        "statistics-users-active-desc": "Хоснователї, котры в {{PLURAL:$1|минулого дня|минулых  $1 днїв}} провели даяку операцію",
-       "statistics-mostpopular": "Найчітанїшы сторінкы",
        "pageswithprop": "Сторінкы з властностями",
        "pageswithprop-legend": "Сторінкы з властностёв",
        "pageswithprop-text": "Тота сторінка обсягує список сторінкы, што хоснують вызначену властность сторінкы.",
        "uncategorizedtemplates": "Некатеґоризованы шаблоны",
        "unusedcategories": "Нехоснованы катеґорії",
        "unusedimages": "Нехоснованы файлы",
-       "popularpages": "Популарны статї",
        "wantedcategories": "Жаданы катеґорії",
        "wantedpages": "Пожадованы статї",
        "wantedpages-badtitle": "Резултаты обсягують неправилну назву: $1",
        "querypage-disabled": "Тота шпеціална сторінка є  заблокована про проблемы з выконом.",
        "booksources": "Жрідла книг",
        "booksources-search-legend": "Гляданя інформації про книгы",
-       "booksources-go": "Выконати",
        "booksources-text": "Ниже є список одказів на серверы продаваючі книгы, або котры можуть мати далшы інформації о книгах, котры глядате.",
        "booksources-invalid-isbn": "Дане ISBN ся здасть быти неплатне. Перевірте го з оріґіналным жрідлом.",
        "specialloguserlabel": "Супроводник:",
        "wlheader-enotif": "Упозорнїня  ел. поштов є запнуте.",
        "wlheader-showupdated": "Сторінкы, котры ся змінили од вашой послїднёй навщівы суть вказаны '''грубо'''",
        "wlnote": "Ниже є {{PLURAL:$1|остатня зміна|остатнї $1 зміны|остатнїх $1 змін}} за {{PLURAL:$2|остатнїй|остатнї|остатнїх}} <b>$2</b> {{PLURAL:$2|годину|годины|годин}} до do $4, $3.",
-       "wlshowlast": "Вказати зміны за послїднїх $1 годин $2 днїв $3",
+       "wlshowlast": "Вказати зміны за послїднїх $1 годин $2 днїв",
        "watchlist-options": "Наставлїна списку слїдованых",
        "watching": "Придаваня до списку слїдованя...",
        "unwatching": "Одобратя зо списку слїдованя...",
        "delete-edit-reasonlist": "Едітовати причіны вымазаня",
        "delete-toobig": "Тота сторінка має велику історію едітованя, через $1 {{PLURAL:$1|верзії|верзій|верзій}}. Мазаня такых сторінок є обмеджено, жебы ся заборонило нехоченому нарушіню {{grammar:2sg|{{SITENAME}}}}.",
        "delete-warning-toobig": "Тота сторінка має велику історію едітацій, через $1 {{PLURAL:$1|верзії|верзій|верзій}}. Мазаня такых сторінок може нарушыти датабазовы операцім {{grammar:2sg|{{SITENAME}}}}; мерькуйте.",
+       "deleting-backlinks-warning": "'''Позірь:'''  Сторінка, котру ся рыхтуєте вымазати, є одказована на [[Special:WhatLinksHere/{{FULLPAGENAME}}|іншых сторінках]] ці вложена до них.",
        "rollback": "Вернути назад едітованя",
        "rollback_short": "Вернути назад",
        "rollbacklink": "вернути назад",
        "import": "Імпорт сторінок",
        "importinterwiki": "Імпорт міджі вікі",
        "import-interwiki-text": "Про імпорт звольте жрідлову вікі і назву сторінкы. Дата ревізій і мена авторів будуть захованы. Вшыткы імпорты ся зазначують до [[Special:Log/import|книгы імпортів]].",
-       "import-interwiki-source": "Вікі/сторінка-жрідло",
        "import-interwiki-history": "Копіровати вшыткы історічны верзії той сторінкы",
        "import-interwiki-templates": "Загорнути вшыткы шаблоны",
        "import-interwiki-submit": "Імпортовати",
        "pageinfo-robot-policy": "Індексованя роботами",
        "pageinfo-robot-index": "Дозволено",
        "pageinfo-robot-noindex": "Заказане",
-       "pageinfo-views": "Чісло переглядів",
        "pageinfo-watchers": "Кількость слїдуючіх сторінку",
        "pageinfo-few-watchers": "Менше як $1 {{PLURAL:$1|слїдуючій|слїдуючі|слїдуючіх}}",
        "pageinfo-redirects-name": "Чісло напрямлїнь на гевсю сторінку",
        "exif-urgency-low": "Низка ($1)",
        "exif-urgency-high": "Высока ($1)",
        "exif-urgency-other": "Хоснователём дефінована пріоріта ($1)",
-       "watchlistall2": "вшыткы",
        "namespacesall": "вшыткы",
        "monthsall": "вшыткы",
        "confirmemail": "Потверджіня адресы ел. пошты",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$1|змінив|змінила}} членство в ґрупах про $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|быв автоматічно переведеный|была автоматічно переведана}} з $4 на $5",
        "rightsnone": "(жадне)",
+       "revdelete-summary": "коментарь едітованя",
        "feedback-bugornote": "Кідь сьте прирыхтованый подробно описати технічный проблем, можете [$1 наголосити хыбу].\nІнакше можете схносновати простый формулать ниже. Ваш коментарь буде приданый на сторінку „[$3 $2]“ разом з вашым іменом хоснователя тай інформаціов о тім, якый бровсер хоснуєте.",
        "feedback-subject": "Предмет:",
        "feedback-message": "Повідомлїня:",
index daff7f8..3969358 100644 (file)
        "view-foreign": "Vedz la $1",
        "edit": "Alâxire",
        "edit-local": "Alâxeaști descrierea localâ",
+       "create": "Prindiri",
+       "create-local": "Adavgâ descrierea localâ",
+       "editthispage": "Alâxeaști aestâ frândzâ",
+       "create-this-page": "Adari aestâ frândzâ",
        "delete": "Așcirḑire",
        "deletethispage": "Așteardzi frândza",
        "undeletethispage": "Aflâ frundza aștearsâ",
        "otherlanguages": "Pi alanti limbi",
        "redirectedfrom": "(yinitâ di la $1)",
        "redirectpagesub": "Frândzâ di redirecționari",
+       "redirectto": "Purtari la:",
        "lastmodifiedat": "Aestâ frândzâ fu alâxitâ di-tu soni pi $1, la $2.",
        "viewcount": "Aestâ frândzâ fu mutritâ di {{PLURAL:$1|mași unâ oarâ|$1 ori}}.",
        "protectedpage": "Frândzâ protejatâ",
        "thisisdeleted": "Vedz icâ adu napoea $1?",
        "viewdeleted": "Vedz $1?",
        "restorelink": "Vedz {{PLURAL:$1|unâ alâxiri aștearsâ|$1 (di) alâxiri aștearsi}}",
+       "feedlinks": "Feed:",
+       "feed-invalid": "Turlii di feed invalidâ",
+       "feed-unavailable": "Nu suntu disponibili fluxuri web.",
        "site-rss-feed": "$1 Abonari RSS",
        "site-atom-feed": "$1 Abonari Atomu",
        "page-rss-feed": "„$1” Abonari RSS",
        "nstab-help": "Agiutoru",
        "nstab-category": "Categorie",
        "nosuchaction": "Aeastâ acțiuni nu easti",
+       "nosuchspecialpage": "Aestâ frândzâ maxusâ (specialâ) nu ari aoați",
+       "error": "Eroari (alatus)",
+       "databaseerror": "Alatus la baza di dati",
+       "databaseerror-text": "Apâru unu alatusu la interogarea bazâľei di dati. Aestâ poati s-hibâ trâ ațea câ ari unâ problemâ di software.",
+       "databaseerror-textcl": "Apâru unu alatusu la interogarea bazâľei di dati.",
+       "databaseerror-query": "Interogari: $1",
+       "databaseerror-function": "Funcție: $1",
        "databaseerror-error": "Eroari (alutusu): $1",
+       "laggedslavemode": "<strong>Sacănu!</strong>: S-poati ca frândza s-nu aibâ actualizărili di-tu soni.",
        "readonly": "Baza di dati easti blocatâ (ncľisâ) la nyrâpseari",
+       "missingarticle-rev": "(versiuniľea#: $1)",
+       "missingarticle-diff": "(Dif: $1, $2)",
+       "badtitle": "Titlu alatusu",
        "viewsource": "Vez-u textu",
+       "viewsource-title": "Vedz ivurlu trâ $1",
+       "ns-specialprotected": "Frâdzâli maxusi (speciali) nu potu s-hibâ alâxiti.",
+       "exception-nologin": "Nu hii ligatu",
+       "exception-nologin-text": "Leagâ-ti ca sâ poț sâ u vedz aestâ frândzâ i acțiuni.",
+       "exception-nologin-text-manual": "Vâ pâlâcârsimu sâ $1 ca s-puteț s-u videț frândza i acțiunea aestâ.",
+       "virus-badscanner": "Configurațiľe alatusitâ: scaneru di virus nicunuscutu: \"$1\"",
+       "welcomeuser": "Ghini viniș, $1!",
+       "welcomecreation-msg": "Contulu (isape) a tău fu adratu.\nPoț s-lu alâxești [[Special:Preferences|Prutimisirli]] a tali ma câ vrei.",
        "yourname": "Numa di utilizatoru:",
        "userlogin-yourname": "Numa di utilizatoru:",
        "userlogin-yourname-ph": "Bagâ-u numa a ta di utilizatoru",
        "createacct-another-username-ph": "Bagâ-u numa di utilizatoru",
        "yourpassword": "Zboru cľeae:",
+       "userlogin-yourpassword": "Zboarâ acrifo (parolâ)",
+       "userlogin-yourpassword-ph": "Bagâ-u parola (zboru acrifo)",
+       "createacct-yourpassword-ph": "Bagâ-u parola (zboru acrifo)",
        "yourpasswordagain": "Bagâ-u cľeae diznou:",
+       "createacct-yourpasswordagain": "Apuchiruseaști zborlu mistico",
+       "createacct-yourpasswordagain-ph": "Bagâ-u parola diz-nou",
        "remembermypassword": "Țâni minti ligâtura a mea pi browserlu aestu (cheari dupu $1 {{PLURAL:$1|dzuuâ|dzâli}})",
+       "userlogin-remembermypassword": "Pâstreadzâ ligarea",
+       "userlogin-signwithsecure": "Ufiliseaști unâ conexiuni sigurâ",
+       "yourdomainname": "Domeniulu a tău:",
+       "password-change-forbidden": "Nu poț s-li alâxești zboarâli mistico pi aestu wiki.",
        "login": "Leagâ-ti",
        "nav-login-createaccount": "Leagâ-ti / Fă contu (isape)",
        "userlogin": "Leagâ-ti / Fă contu (isape)",
        "userlogout": "Dizleagâ-ti",
        "notloggedin": "Nu hii ligatu",
        "userlogin-noaccount": "N-ai nicâ contu (isape)?",
+       "userlogin-joinproject": "Bagâ-ti la {{SITENAME}}",
        "nologin": "N-ai nicâ contu (isape)? $1.",
        "nologinlink": "Fă unu utilizatoru a tău tora",
        "createaccount": "Fă contu (isape)",
+       "gotaccount": "Ai nicâ contu (isape)? $1.",
        "gotaccountlink": "Leagâ-ti",
+       "userlogin-resetlink": "U agârșii parola i numa di utilizatoru?",
+       "userlogin-resetpassword-link": "U agârșii parola?",
        "createacct-emailrequired": "Adresâ di carti electronicâ",
        "createacct-emailoptional": "Adresâ di carti electronicâ (opționalu)",
        "createacct-email-ph": "Bagâ-u adresa a ta di carti electronicâ",
        "newpages-username": "Numa di utilizatoru:",
        "move": "Mutari",
        "movethispage": "Mutâ frândza aestâ",
-       "booksources-go": "Du-ti",
        "allpagessubmit": "Du-ti",
        "watchlist": "Frândzâ avinati",
        "mywatchlist": "Frândzâ avinati",
index 4972df2..2262b83 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Andrijko Z.",
-            "Кумулај Маркус",
-            "Макѕе",
-            "Приетен тев"
-        ]
-    },
-    "tog-underline": "Сублиниаере легајтулс:",
-    "sun": "Дум",
-    "mon": "Лун",
-    "tue": "Мар",
-    "wed": "Мие",
-    "thu": "Јои",
-    "fri": "Вин",
-    "sat": "Сам",
-    "january": "јануари",
-    "february": "февруари",
-    "march": "марти",
-    "april": "априли",
-    "may_long": "мај",
-    "june": "јуни",
-    "july": "јули",
-    "august": "аугуст",
-    "september": "септември",
-    "october": "октомври",
-    "november": "нојември",
-    "december": "децембри",
-    "january-gen": "јануари",
-    "february-gen": "февруари",
-    "march-gen": "марти",
-    "april-gen": "априли",
-    "may-gen": "мај",
-    "june-gen": "јуни",
-    "july-gen": "јули",
-    "august-gen": "аугуст",
-    "september-gen": "септември",
-    "october-gen": "октомври",
-    "november-gen": "нојември",
-    "december-gen": "децември",
-    "jan": "јан",
-    "feb": "фев",
-    "mar": "мар",
-    "apr": "апр",
-    "may": "мај",
-    "jun": "јун",
-    "jul": "јул",
-    "aug": "ауг",
-    "sep": "сеп",
-    "oct": "окт",
-    "nov": "нов",
-    "dec": "дец",
-    "category_header": "Пажус ен категориа \"$1\"",
-    "subcategories": "Субкатегории",
-    "listingcontinuesabbrev": "контину",
-    "about": "Дајпул",
-    "cancel": "ренунтаје",
-    "mytalk": "Мај дискућу",
-    "errorpagetitle": "Еру",
-    "tagline": "Де {{SITENAME}}",
-    "help": "ајутор",
-    "search": "каутај",
-    "searchbutton": "каутај",
-    "searcharticle": "Лие",
-    "history": "Хисториа пажус",
-    "printableversion": "верцион принтаблу",
-    "permalink": "Легајтул перманентул",
-    "edit": "Едита",
-    "editthispage": "Едита це пажу",
-    "delete": "Делајре",
-    "protect": "Ажатме",
-    "newpage": "Пажи нови",
-    "talkpagelinktext": "дискућу",
-    "personaltools": "Алатки персоналу",
-    "talk": "дискућу",
-    "views": "Ви",
-    "toolbox": "алатуникул",
-    "redirectedfrom": "(Редирецћионат де ла $1)",
-    "jumpto": "Лиа а:",
-    "jumptonavigation": "навигацион",
-    "jumptosearch": "каутај",
-    "aboutsite": "дајпул {{SITENAME}}",
-    "aboutpage": "Project:дајпул {{SITENAME}}",
-    "copyrightpage": "{{ns:project}}:Права даутору",
-    "currentevents": "Тебикору",
-    "currentevents-url": "Project:Тебикору",
-    "disclaimers": "Тајменулс",
-    "disclaimerpage": "Project:тајменул",
-    "edithelp": "Ајутор пентре едитаере",
-    "mainpage": "Пажу принципу",
-    "mainpage-description": "Пажу принципу",
-    "privacy": "Политикмус де лижитул",
-    "privacypage": "Project:политикмус де лижитул",
-    "retrievedfrom": "адусе де \"$1\"",
-    "youhavenewmessages": "Весес $1 ($2).",
-    "editsection": "едитаере",
-    "editold": "едита",
-    "editsectionhint": "Едитаере ћисецион: $1",
-    "toc": "Купринс",
-    "showtoc": "аратај",
-    "hidetoc": "аскунде",
-    "site-rss-feed": "$1 RSS фитул",
-    "site-atom-feed": "$1 Atom фитул",
-    "page-rss-feed": "\"$1\" RSS Фитул",
-    "page-atom-feed": "\"$1\" Atom Фитул",
-    "nstab-user": "Пажу дутилизатору",
-    "nstab-project": "Пројекту",
-    "nstab-image": "фиширул",
-    "nstab-category": "категориа",
-    "viewsource": "баганаере",
-    "yourname": "Ном дутилизатору:",
-    "login": "Приласнаере",
-    "nav-login-createaccount": "Приласнаере / Нажбе",
-    "userlogin": "Приласнаере / креаре нутилизатору",
-    "userlogout": "отластаере",
-    "bold_sample": "Ескрире алдин",
-    "bold_tip": "Ескрире алдин",
-    "italic_sample": "Ескрире курсиве",
-    "italic_tip": "Ескрире курсиве",
-    "link_sample": "Ном с-легајтулс",
-    "link_tip": "Легајтул интернул",
-    "extlink_sample": "http://www.example.com ном с-легајтулс",
-    "extlink_tip": "Легајтул ќстернул (вец префикс http://)",
-    "headline_sample": "Ескрире с-титлус",
-    "headline_tip": "Титлу де нивел 2",
-    "nowiki_sample": "Интродуца но-Вики иси",
-    "nowiki_tip": "Но-Бики клашу",
-    "image_tip": "Сантигул инсерат",
-    "media_tip": "Легајтул фиширул де медиа",
-    "sig_tip": "Утилизаторуном ет дата ет темп",
-    "hr_tip": "Линеа оризонтала (еснидивале)",
-    "summary": "Сумар:",
-    "subject": "Субјект / титлур:",
-    "minoredit": "Ацеаста есте о едитаре минорај",
-    "watchthis": "Клајаере це пажу",
-    "showpreview": "Ратај превизуализаре",
-    "showdiff": "Аратај шумбајрае",
-    "newarticle": "(Нова)",
-    "editing": "о $1 едитаере",
-    "editingsection": "Едитаере $1 (секцион)",
-    "copyrightwarning": "<!-- Гол деоцамдатај. Вертисментул се флај ен MediaWiki:Summary -->\nТе рог нотари ла дин контрибући ал {{SITENAME}} сунт консидераере релесават супра $2 (суах $1 дин детајс). Аџтеу несав те се тексти сунт едитаере деномерци дет редистрибутаере дин вент, хатае ици.<br /> Ту есте ностре промисаере бонти ус ту скрирсте це се, нега копиаере дин публик домен нега симилари ресорсуе. '''НЕ СУБМИТЕ КОПИЛЕГРУ СКРИЕ САС ПЕРМИћИОН!'''",
-    "template-protected": "(ажатмат)",
-    "template-semiprotected": "(семи-ажатмат)",
-    "currentrev": "Верцион куренту",
-    "revisionasof": "Верцион де дата $1",
-    "previousrevision": "←Версиунеа нтериоарај",
-    "cur": "актуалу",
-    "last": "прецеденте",
-    "history-title": "Едитаерехисториа пентру \"$1\"",
-    "lineno": "линиа $1:",
-    "compareselectedversions": "Компара верционс селектус",
-    "editundo": "анулизаје",
-    "viewprevnext": "Ву ($1 {{int:pipe-separator}} $2) ($3)",
-    "mypreferences": "Мај префиренћу",
-    "recentchanges": "шумбајрае рецентае",
-    "rcshowhideminor": "$1 модификајриле миноре",
-    "rcshowhidebots": "$1 роботи",
-    "rcshowhideliu": "$1 утилизатори приласнаери",
-    "rcshowhideanons": "$1 утилизатори аноними",
-    "rcshowhidemine": "$1 мес модификационс",
-    "rclinks": "Ратај ултимеле $1 модификајри дин ултимеле $2 зиле.<br />\n$3",
-    "diff": "диференћу",
-    "hist": "хисториа",
-    "hide": "аскунде",
-    "show": "Аратај",
-    "minoreditletter": "м",
-    "newpageletter": "Н",
-    "boteditletter": "б",
-    "recentchangeslinked": "Модификајри корелате",
-    "recentchangeslinked-feed": "Модификајри корелате",
-    "recentchangeslinked-toolbox": "Модификајри корелате",
-    "upload": "тримиће фиширул",
-    "file-anchor-link": "фиширул",
-    "filehist": "Хисториа фиширулу",
-    "filehist-current": "куренту",
-    "filehist-datetime": "Дата/Темп",
-    "filehist-user": "Утилизатору",
-    "filehist-dimensions": "Дименционс",
-    "filehist-comment": "коментарул",
-    "imagelinks": "Легајтул фиширул де медиа",
-    "linkstoimage": "Цес {{PLURAL:$1|page links||пажи легајтент}} а це фиширул:",
-    "randompage": "алаећу",
-    "nbytes": "$1 {{PLURAL:$1|бајтул|бајтулс}}",
-    "nmembers": "$1 {{PLURAL:$1|мембру|мембри}}",
-    "newpages": "Пажи нови",
-    "booksources": "Сурсе де цајрћи",
-    "allpages": "Тоатс пажи",
-    "alphaindexline": "$1 во $2",
-    "allarticles": "Тоат пажи",
-    "allpagessubmit": "Треме",
-    "watchlist": "Мај клајаеру",
-    "mywatchlist": "Мај клајаере",
-    "watch": "клајаере",
-    "unwatch": "Деклајаера",
-    "watching": "О клајаере...",
-    "unwatching": "О деклајаере...",
-    "rollbacklink": "ревенире",
-    "namespace": "лСпаћи:",
-    "invert": "Ќсклуда спаћул",
-    "blanknamespace": "(Принципу)",
-    "contributions": "Контрибући дутилизатори",
-    "mycontris": "Мес контрибући",
-    "contribsub2": "пентру $1 ($2)",
-    "uctop": "(сусверф)",
-    "sp-contributions-talk": "дискућу",
-    "whatlinkshere": "Легајтул а це пажу",
-    "whatlinkshere-title": "Пажус легајтулент а $1",
-    "nolinkshere": "Пажи не легајтент а '''[[:$1]]'''.",
-    "istemplate": "викулабе",
-    "whatlinkshere-links": "← легајтулс",
-    "blocklink": "блокуапаје",
-    "contribslink": "контрибући",
-    "revertmove": "ревенире",
-    "export": "Ќспорта пажи",
-    "thumbnail-more": "ќсинде",
-    "thumbnail_error": "Еру вец лкреаре де тумбнел: $1",
-    "tooltip-pt-userpage": "Мој пажу дутилизатору",
-    "tooltip-pt-mytalk": "Мај пажу дискућус",
-    "tooltip-pt-preferences": "Мај префиренћу",
-    "tooltip-pt-watchlist": "Листа пажинилор пе царе ле мониторизез.",
-    "tooltip-pt-mycontris": "Листа де мес контрибуционс",
-    "tooltip-pt-login": "Путе приласнаере, не лест доист.",
-    "tooltip-pt-logout": "отластаере",
-    "tooltip-ca-talk": "Дискућие деспре артикол",
-    "tooltip-ca-edit": "Поћи едита ацеатај пажинај. Те ругајм се превизуализези конћинутул енаинте де салваре.",
-    "tooltip-ca-protect": "Ажатме це пажу",
-    "tooltip-ca-delete": "Делајре це пажу",
-    "tooltip-search": "Каутај ен {{SITENAME}}",
-    "tooltip-n-mainpage": "Вижита лпажу принципу",
-    "tooltip-n-portal": "Дајпул лпројецту, љуелљуес путе фараере, о трувес саби.",
-    "tooltip-n-currentevents": "Гајсеште информаћии деспре евениментиќ куренте",
-    "tooltip-n-recentchanges": "Листа дес шумбајрае рецентае ен лБики.",
-    "tooltip-n-randompage": "Донаре нпажу алаетоаре",
-    "tooltip-n-help": "Ајутор трувес иси.",
-    "tooltip-t-whatlinkshere": "Листа тутурор пажинилор вики царе кондуц спре ацестај пажинај",
-    "tooltip-t-contributions": "Ву листа де контрибући де цутилизатору",
-    "tooltip-t-upload": "Тремер фиширул",
-    "tooltip-t-specialpages": "Листа де тоат пажи специалус",
-    "tooltip-ca-nstab-user": "Ву лпажу дутилизатору",
-    "tooltip-ca-nstab-project": "Ву лпажу де пројекту",
-    "tooltip-ca-nstab-category": "Ву лпажу де категориа",
-    "tooltip-minoredit": "Це-ест нмодификацион минару",
-    "tooltip-save": "Салваере тес модификационс",
-    "tooltip-diff": "Ратај це модификајри аи фајцут текстулуи.",
-    "file-nohires": "Це-н-ест нресолуцион маи мари.",
-    "show-big-image": "Мареште ресолуцион",
-    "bad_image_list": "Форматул есте урмајторул:\n\nНумај елементијле унеи листе сунт луате ен цонсидераере. (Аџестеа сунт линии це енцеп цу *)\n\nПрима легајтурај де пе линие требуие се фие спре ун фишиер дефецтуос.\n\nОрице легајтури це урмеазај пе аценаши линие сунт цонсидераете еџцепћии, дицај пажи унде фишиерул поате пајреа инцлус дирецт.",
-    "metadata": "Метадата",
-    "watchlistall2": "тоат",
-    "namespacesall": "тоат",
-    "monthsall": "тоат",
-    "specialpages": "Пажи спецалус"
+       "@metadata": {
+               "authors": [
+                       "Andrijko Z.",
+                       "Кумулај Маркус",
+                       "Макѕе",
+                       "Приетен тев"
+               ]
+       },
+       "tog-underline": "Сублиниаере легајтулс:",
+       "sun": "Дум",
+       "mon": "Лун",
+       "tue": "Мар",
+       "wed": "Мие",
+       "thu": "Јои",
+       "fri": "Вин",
+       "sat": "Сам",
+       "january": "јануари",
+       "february": "февруари",
+       "march": "марти",
+       "april": "априли",
+       "may_long": "мај",
+       "june": "јуни",
+       "july": "јули",
+       "august": "аугуст",
+       "september": "септември",
+       "october": "октомври",
+       "november": "нојември",
+       "december": "децембри",
+       "january-gen": "јануари",
+       "february-gen": "февруари",
+       "march-gen": "марти",
+       "april-gen": "априли",
+       "may-gen": "мај",
+       "june-gen": "јуни",
+       "july-gen": "јули",
+       "august-gen": "аугуст",
+       "september-gen": "септември",
+       "october-gen": "октомври",
+       "november-gen": "нојември",
+       "december-gen": "децември",
+       "jan": "јан",
+       "feb": "фев",
+       "mar": "мар",
+       "apr": "апр",
+       "may": "мај",
+       "jun": "јун",
+       "jul": "јул",
+       "aug": "ауг",
+       "sep": "сеп",
+       "oct": "окт",
+       "nov": "нов",
+       "dec": "дец",
+       "category_header": "Пажус ен категориа \"$1\"",
+       "subcategories": "Субкатегории",
+       "listingcontinuesabbrev": "контину",
+       "about": "Дајпул",
+       "cancel": "ренунтаје",
+       "mytalk": "Мај дискућу",
+       "errorpagetitle": "Еру",
+       "tagline": "Де {{SITENAME}}",
+       "help": "ајутор",
+       "search": "каутај",
+       "searchbutton": "каутај",
+       "searcharticle": "Лие",
+       "history": "Хисториа пажус",
+       "printableversion": "верцион принтаблу",
+       "permalink": "Легајтул перманентул",
+       "edit": "Едита",
+       "editthispage": "Едита це пажу",
+       "delete": "Делајре",
+       "protect": "Ажатме",
+       "newpage": "Пажи нови",
+       "talkpagelinktext": "дискућу",
+       "personaltools": "Алатки персоналу",
+       "talk": "дискућу",
+       "views": "Ви",
+       "toolbox": "алатуникул",
+       "redirectedfrom": "(Редирецћионат де ла $1)",
+       "jumpto": "Лиа а:",
+       "jumptonavigation": "навигацион",
+       "jumptosearch": "каутај",
+       "aboutsite": "дајпул {{SITENAME}}",
+       "aboutpage": "Project:дајпул {{SITENAME}}",
+       "copyrightpage": "{{ns:project}}:Права даутору",
+       "currentevents": "Тебикору",
+       "currentevents-url": "Project:Тебикору",
+       "disclaimers": "Тајменулс",
+       "disclaimerpage": "Project:тајменул",
+       "edithelp": "Ајутор пентре едитаере",
+       "mainpage": "Пажу принципу",
+       "mainpage-description": "Пажу принципу",
+       "privacy": "Политикмус де лижитул",
+       "privacypage": "Project:политикмус де лижитул",
+       "retrievedfrom": "адусе де \"$1\"",
+       "youhavenewmessages": "Весес $1 ($2).",
+       "editsection": "едитаере",
+       "editold": "едита",
+       "editsectionhint": "Едитаере ћисецион: $1",
+       "toc": "Купринс",
+       "showtoc": "аратај",
+       "hidetoc": "аскунде",
+       "site-rss-feed": "$1 RSS фитул",
+       "site-atom-feed": "$1 Atom фитул",
+       "page-rss-feed": "\"$1\" RSS Фитул",
+       "page-atom-feed": "\"$1\" Atom Фитул",
+       "nstab-user": "Пажу дутилизатору",
+       "nstab-project": "Пројекту",
+       "nstab-image": "фиширул",
+       "nstab-category": "категориа",
+       "viewsource": "баганаере",
+       "yourname": "Ном дутилизатору:",
+       "login": "Приласнаере",
+       "nav-login-createaccount": "Приласнаере / Нажбе",
+       "userlogin": "Приласнаере / креаре нутилизатору",
+       "userlogout": "отластаере",
+       "bold_sample": "Ескрире алдин",
+       "bold_tip": "Ескрире алдин",
+       "italic_sample": "Ескрире курсиве",
+       "italic_tip": "Ескрире курсиве",
+       "link_sample": "Ном с-легајтулс",
+       "link_tip": "Легајтул интернул",
+       "extlink_sample": "http://www.example.com ном с-легајтулс",
+       "extlink_tip": "Легајтул ќстернул (вец префикс http://)",
+       "headline_sample": "Ескрире с-титлус",
+       "headline_tip": "Титлу де нивел 2",
+       "nowiki_sample": "Интродуца но-Вики иси",
+       "nowiki_tip": "Но-Бики клашу",
+       "image_tip": "Сантигул инсерат",
+       "media_tip": "Легајтул фиширул де медиа",
+       "sig_tip": "Утилизаторуном ет дата ет темп",
+       "hr_tip": "Линеа оризонтала (еснидивале)",
+       "summary": "Сумар:",
+       "subject": "Субјект / титлур:",
+       "minoredit": "Ацеаста есте о едитаре минорај",
+       "watchthis": "Клајаере це пажу",
+       "showpreview": "Ратај превизуализаре",
+       "showdiff": "Аратај шумбајрае",
+       "newarticle": "(Нова)",
+       "editing": "о $1 едитаере",
+       "editingsection": "Едитаере $1 (секцион)",
+       "copyrightwarning": "<!-- Гол деоцамдатај. Вертисментул се флај ен MediaWiki:Summary -->\nТе рог нотари ла дин контрибући ал {{SITENAME}} сунт консидераере релесават супра $2 (суах $1 дин детајс). Аџтеу несав те се тексти сунт едитаере деномерци дет редистрибутаере дин вент, хатае ици.<br /> Ту есте ностре промисаере бонти ус ту скрирсте це се, нега копиаере дин публик домен нега симилари ресорсуе. '''НЕ СУБМИТЕ КОПИЛЕГРУ СКРИЕ САС ПЕРМИћИОН!'''",
+       "template-protected": "(ажатмат)",
+       "template-semiprotected": "(семи-ажатмат)",
+       "currentrev": "Верцион куренту",
+       "revisionasof": "Верцион де дата $1",
+       "previousrevision": "←Версиунеа нтериоарај",
+       "cur": "актуалу",
+       "last": "прецеденте",
+       "history-title": "Едитаерехисториа пентру \"$1\"",
+       "lineno": "линиа $1:",
+       "compareselectedversions": "Компара верционс селектус",
+       "editundo": "анулизаје",
+       "viewprevnext": "Ву ($1 {{int:pipe-separator}} $2) ($3)",
+       "mypreferences": "Мај префиренћу",
+       "recentchanges": "шумбајрае рецентае",
+       "rcshowhideminor": "$1 модификајриле миноре",
+       "rcshowhidebots": "$1 роботи",
+       "rcshowhideliu": "$1 утилизатори приласнаери",
+       "rcshowhideanons": "$1 утилизатори аноними",
+       "rcshowhidemine": "$1 мес модификационс",
+       "rclinks": "Ратај ултимеле $1 модификајри дин ултимеле $2 зиле.<br />\n$3",
+       "diff": "диференћу",
+       "hist": "хисториа",
+       "hide": "аскунде",
+       "show": "Аратај",
+       "minoreditletter": "м",
+       "newpageletter": "Н",
+       "boteditletter": "б",
+       "recentchangeslinked": "Модификајри корелате",
+       "recentchangeslinked-feed": "Модификајри корелате",
+       "recentchangeslinked-toolbox": "Модификајри корелате",
+       "upload": "тримиће фиширул",
+       "file-anchor-link": "фиширул",
+       "filehist": "Хисториа фиширулу",
+       "filehist-current": "куренту",
+       "filehist-datetime": "Дата/Темп",
+       "filehist-user": "Утилизатору",
+       "filehist-dimensions": "Дименционс",
+       "filehist-comment": "коментарул",
+       "imagelinks": "Легајтул фиширул де медиа",
+       "linkstoimage": "Цес {{PLURAL:$1|page links||пажи легајтент}} а це фиширул:",
+       "randompage": "алаећу",
+       "nbytes": "$1 {{PLURAL:$1|бајтул|бајтулс}}",
+       "nmembers": "$1 {{PLURAL:$1|мембру|мембри}}",
+       "newpages": "Пажи нови",
+       "booksources": "Сурсе де цајрћи",
+       "allpages": "Тоатс пажи",
+       "allarticles": "Тоат пажи",
+       "allpagessubmit": "Треме",
+       "watchlist": "Мај клајаеру",
+       "mywatchlist": "Мај клајаере",
+       "watch": "клајаере",
+       "unwatch": "Деклајаера",
+       "watching": "О клајаере...",
+       "unwatching": "О деклајаере...",
+       "rollbacklink": "ревенире",
+       "namespace": "лСпаћи:",
+       "invert": "Ќсклуда спаћул",
+       "blanknamespace": "(Принципу)",
+       "contributions": "Контрибући дутилизатори",
+       "mycontris": "Мес контрибући",
+       "contribsub2": "пентру $1 ($2)",
+       "uctop": "(сусверф)",
+       "sp-contributions-talk": "дискућу",
+       "whatlinkshere": "Легајтул а це пажу",
+       "whatlinkshere-title": "Пажус легајтулент а $1",
+       "nolinkshere": "Пажи не легајтент а '''[[:$1]]'''.",
+       "istemplate": "викулабе",
+       "whatlinkshere-links": "← легајтулс",
+       "blocklink": "блокуапаје",
+       "contribslink": "контрибући",
+       "revertmove": "ревенире",
+       "export": "Ќспорта пажи",
+       "thumbnail-more": "ќсинде",
+       "thumbnail_error": "Еру вец лкреаре де тумбнел: $1",
+       "tooltip-pt-userpage": "Мој пажу дутилизатору",
+       "tooltip-pt-mytalk": "Мај пажу дискућус",
+       "tooltip-pt-preferences": "Мај префиренћу",
+       "tooltip-pt-watchlist": "Листа пажинилор пе царе ле мониторизез.",
+       "tooltip-pt-mycontris": "Листа де мес контрибуционс",
+       "tooltip-pt-login": "Путе приласнаере, не лест доист.",
+       "tooltip-pt-logout": "отластаере",
+       "tooltip-ca-talk": "Дискућие деспре артикол",
+       "tooltip-ca-edit": "Поћи едита ацеатај пажинај. Те ругајм се превизуализези конћинутул енаинте де салваре.",
+       "tooltip-ca-protect": "Ажатме це пажу",
+       "tooltip-ca-delete": "Делајре це пажу",
+       "tooltip-search": "Каутај ен {{SITENAME}}",
+       "tooltip-n-mainpage": "Вижита лпажу принципу",
+       "tooltip-n-portal": "Дајпул лпројецту, љуелљуес путе фараере, о трувес саби.",
+       "tooltip-n-currentevents": "Гајсеште информаћии деспре евениментиќ куренте",
+       "tooltip-n-recentchanges": "Листа дес шумбајрае рецентае ен лБики.",
+       "tooltip-n-randompage": "Донаре нпажу алаетоаре",
+       "tooltip-n-help": "Ајутор трувес иси.",
+       "tooltip-t-whatlinkshere": "Листа тутурор пажинилор вики царе кондуц спре ацестај пажинај",
+       "tooltip-t-contributions": "Ву листа де контрибући де цутилизатору",
+       "tooltip-t-upload": "Тремер фиширул",
+       "tooltip-t-specialpages": "Листа де тоат пажи специалус",
+       "tooltip-ca-nstab-user": "Ву лпажу дутилизатору",
+       "tooltip-ca-nstab-project": "Ву лпажу де пројекту",
+       "tooltip-ca-nstab-category": "Ву лпажу де категориа",
+       "tooltip-minoredit": "Це-ест нмодификацион минару",
+       "tooltip-save": "Салваере тес модификационс",
+       "tooltip-diff": "Ратај це модификајри аи фајцут текстулуи.",
+       "file-nohires": "Це-н-ест нресолуцион маи мари.",
+       "show-big-image": "Мареште ресолуцион",
+       "bad_image_list": "Форматул есте урмајторул:\n\nНумај елементијле унеи листе сунт луате ен цонсидераере. (Аџестеа сунт линии це енцеп цу *)\n\nПрима легајтурај де пе линие требуие се фие спре ун фишиер дефецтуос.\n\nОрице легајтури це урмеазај пе аценаши линие сунт цонсидераете еџцепћии, дицај пажи унде фишиерул поате пајреа инцлус дирецт.",
+       "metadata": "Метадата",
+       "namespacesall": "тоат",
+       "monthsall": "тоат",
+       "specialpages": "Пажи спецалус"
 }
index d3275f3..722e587 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Andrijko Z.",
-            "Кумулај Маркус",
-            "Макѕе",
-            "Приетен тев"
-        ]
-    },
-    "tog-underline": "Subliniaere legătuls:",
-    "sun": "Dum",
-    "mon": "Lun",
-    "tue": "Mar",
-    "wed": "Mie",
-    "thu": "Joi",
-    "fri": "Vin",
-    "sat": "Sam",
-    "january": "januari",
-    "february": "februari",
-    "march": "marti",
-    "april": "aprili",
-    "may_long": "mă",
-    "june": "juni",
-    "july": "juli",
-    "august": "august",
-    "september": "septembri",
-    "october": "oktombri",
-    "november": "nojembri",
-    "december": "decembri",
-    "january-gen": "januari",
-    "february-gen": "februari",
-    "march-gen": "marti",
-    "april-gen": "aprili",
-    "may-gen": "mai",
-    "june-gen": "juni",
-    "july-gen": "juli",
-    "august-gen": "august",
-    "september-gen": "septembri",
-    "october-gen": "oktombri",
-    "november-gen": "nojembri",
-    "december-gen": "decembri",
-    "jan": "jan",
-    "feb": "feb",
-    "mar": "mar",
-    "apr": "apr",
-    "may": "mai",
-    "jun": "jun",
-    "jul": "jul",
-    "aug": "aug",
-    "sep": "sep",
-    "oct": "okt",
-    "nov": "nov",
-    "dec": "dec",
-    "category_header": "Pažus en kategoria \"$1\"",
-    "subcategories": "Subkategorii",
-    "listingcontinuesabbrev": "kontinu",
-    "about": "Dajpul",
-    "cancel": "renuntǎe",
-    "mytalk": "Maj diskuţu",
-    "errorpagetitle": "Eru",
-    "tagline": "De {{SITENAME}}",
-    "help": "ajutor",
-    "search": "kaută",
-    "searchbutton": "kaută",
-    "searcharticle": "Lie",
-    "history": "Historia pažus",
-    "printableversion": "vercion printablu",
-    "permalink": "Legătul permanentul",
-    "edit": "Edita",
-    "editthispage": "Edita ce pažu",
-    "delete": "Delăre",
-    "protect": "Ažatme",
-    "newpage": "Paži novi",
-    "talkpagelinktext": "Diskuţu",
-    "personaltools": "Alatki personalu",
-    "talk": "Diskuţu",
-    "views": "Vi",
-    "toolbox": "alatunikul",
-    "redirectedfrom": "(Redirecţionat de la $1)",
-    "jumpto": "Lia a:",
-    "jumptonavigation": "navigacion",
-    "jumptosearch": "kaută",
-    "aboutsite": "Dajpul {{SITENAME}}",
-    "aboutpage": "Project:Dajpul {{SITENAME}}",
-    "copyrightpage": "{{ns:project}}:Prava d'autoru",
-    "currentevents": "Tebikoru",
-    "currentevents-url": "Project:Tebikoru",
-    "disclaimers": "tǎmenuls",
-    "disclaimerpage": "Project:tǎmenul",
-    "edithelp": "Ajutor pentru editaere",
-    "mainpage": "Pažu principu",
-    "mainpage-description": "Pažu principu",
-    "privacy": "Politikmus de ližitul",
-    "privacypage": "Project:Politikmus de ližitul",
-    "retrievedfrom": "Aduse de \"$1\"",
-    "youhavenewmessages": "Veses $1 ($2).",
-    "editsection": "Editaere",
-    "editold": "edita",
-    "editsectionhint": "Editaere ţisecion: $1",
-    "toc": "Kuprins",
-    "showtoc": "arată",
-    "hidetoc": "askunde",
-    "site-rss-feed": "$1 RSS fitul",
-    "site-atom-feed": "$1 Atom fitul",
-    "page-rss-feed": "\"$1\" RSS Fitul",
-    "page-atom-feed": "\"$1\" Atom Fitul",
-    "nstab-user": "Pažu d'utilizatoru",
-    "nstab-project": "Projektu",
-    "nstab-image": "fişirul",
-    "nstab-category": "kategoria",
-    "viewsource": "Baganaere",
-    "yourname": "Nom d'utilizatoru:",
-    "login": "Prilasnaere",
-    "nav-login-createaccount": "Prilasnaere / Nažbe",
-    "userlogin": "Prilasnaere / kreare nutilizatoru",
-    "userlogout": "otlastaere",
-    "bold_sample": "Eskrire aldin",
-    "bold_tip": "Eskrire aldin",
-    "italic_sample": "Eskrire kursive",
-    "italic_tip": "Eskrire kursive",
-    "link_sample": "Nom s'legătuls",
-    "link_tip": "Legătul internul",
-    "extlink_sample": "http://www.example.com nom s'legătuls",
-    "extlink_tip": "Legătul ķsternul (vec prefiks http://)",
-    "headline_sample": "Eskrire s'titlus",
-    "headline_tip": "Titlu de nivel 2",
-    "nowiki_sample": "Intorduca no-Wiki isi",
-    "nowiki_tip": "No-Wiki klaşu",
-    "image_tip": "Santigul inserat",
-    "media_tip": "Legătul fişirul de media",
-    "sig_tip": "Utilizatorunom et data et temp",
-    "hr_tip": "Linia orizontala (esnidivale)",
-    "summary": "Sumar:",
-    "subject": "Subjekt / titlur:",
-    "minoredit": "Aceasta este o editare minoră",
-    "watchthis": "klăaere ce pažu",
-    "showpreview": "Rată previzualizare",
-    "showdiff": "Arată şumbărae",
-    "newarticle": "(Nova)",
-    "editing": "o $1 editaere",
-    "editingsection": "Editaere $1 (sekcion)",
-    "copyrightwarning": "<!-- Gol deocamdată. Vertismentul se flă en MediaWiki:Summary -->\nTe rog notari la din kontribuţi al {{SITENAME}} sunt konsideraere relesavat supra $2 (suah $1 din detăs). Açteu nesav te se teksti sunt editaere denomerci det redistributaere din vent, hatae ici.<br /> Tu este nostre promisaere bonti us tu skrirste ce se, nega kopiaere din publik domen nega similari resorsua. '''NE SUBMITE KOPILEGRU SKRIE SAS PERMIŢION!'''",
-    "template-protected": "(ažatmat)",
-    "template-semiprotected": "(semi-ažatmat)",
-    "currentrev": "Vercion kurentu",
-    "revisionasof": "Vercion de data $1",
-    "previousrevision": "←Versiunea nterioară",
-    "cur": "aktualu",
-    "last": "precedente",
-    "history-title": "Editaerehistoria pentru \"$1\"",
-    "lineno": "Linia $1:",
-    "compareselectedversions": "Kompara vercion selektus",
-    "editundo": "anulizăe",
-    "viewprevnext": "Vu ($1 {{int:pipe-separator}} $2) ($3)",
-    "mypreferences": "Maj prefirenţu",
-    "recentchanges": "şumbărae recentae",
-    "rcshowhideminor": "$1 modifikările minore",
-    "rcshowhidebots": "$1 roboti",
-    "rcshowhideliu": "$1 utilizatori prilasnaeri",
-    "rcshowhideanons": "$1 utilizatori anonimi",
-    "rcshowhidemine": "$1 mes modifikacions",
-    "rclinks": "Rată ultimele $1 modifikări din ultimele $2 zile.<br />\n$3",
-    "diff": "diferenţu",
-    "hist": "historia",
-    "hide": "askunde",
-    "show": "Arată",
-    "minoreditletter": "m",
-    "newpageletter": "N",
-    "boteditletter": "b",
-    "recentchangeslinked": "Modifikări korelate",
-    "recentchangeslinked-feed": "Modifikări korelate",
-    "recentchangeslinked-toolbox": "Modifikări korelate",
-    "upload": "trimiţe fişirul",
-    "file-anchor-link": "Fişirul",
-    "filehist": "Historia fişirulu",
-    "filehist-current": "kurentu",
-    "filehist-datetime": "Data/Temp",
-    "filehist-user": "Utilizatoru",
-    "filehist-dimensions": "Dimencions",
-    "filehist-comment": "komentarul",
-    "imagelinks": "Legătul fişirul de media",
-    "linkstoimage": "Ces {{PLURAL:$1|paži legǎt|paži legǎtent}} a ce fişirul:",
-    "randompage": "alaeţu",
-    "nbytes": "$1 {{PLURAL:$1|bătul|bătuls}}",
-    "nmembers": "$1 {{PLURAL:$1|membru|membri}}",
-    "newpages": "Paži novi",
-    "booksources": "Surse de cărţi",
-    "allpages": "Toats paži",
-    "alphaindexline": "$1 vo $2",
-    "allarticles": "Toats paži",
-    "allpagessubmit": "Treme",
-    "watchlist": "Maj klăaeru",
-    "mywatchlist": "Maj klăaere",
-    "watch": "klăaere",
-    "unwatch": "Deklăaera",
-    "watching": "O klăaere...",
-    "unwatching": "O deklăaere...",
-    "rollbacklink": "revenire",
-    "namespace": "lSpaţi:",
-    "invert": "Ķskluda spaţul",
-    "blanknamespace": "(Principu)",
-    "contributions": "Kontribuţi d'utilizatori",
-    "mycontris": "Mes kontribuţi",
-    "contribsub2": "Pentru $1 ($2)",
-    "uctop": "(susverf)",
-    "sp-contributions-talk": "Diskuţu",
-    "whatlinkshere": "Legǎtul a ce pažu",
-    "whatlinkshere-title": "Paži legǎtulent a $1",
-    "nolinkshere": "Paži ne legǎtent a '''[[:$1]]'''.",
-    "istemplate": "vikulabe",
-    "whatlinkshere-links": "← legătuls",
-    "blocklink": "blokuapǎe",
-    "contribslink": "kontribuţi",
-    "revertmove": "revenire",
-    "export": "Ķsporta paži",
-    "thumbnail-more": "ķsinde",
-    "thumbnail_error": "Eru vec kreare de thumbnail: $1",
-    "tooltip-pt-userpage": "Moj pažu d'utilizatoru",
-    "tooltip-pt-mytalk": "Maj pažu diskuţus",
-    "tooltip-pt-preferences": "Maj prefirenţu",
-    "tooltip-pt-watchlist": "Lista pažinilor pe care le monitorizez.",
-    "tooltip-pt-mycontris": "Lista de mes kontribucions",
-    "tooltip-pt-login": "Pute prilasnaere, ne l'est doist.",
-    "tooltip-pt-logout": "otlastaere",
-    "tooltip-ca-talk": "Diskuţie despre artikol",
-    "tooltip-ca-edit": "Poţi edita această pažină. Te rugăm se previzualizezi konţinutul enainte de salvare.",
-    "tooltip-ca-protect": "Ažatme ce pažu",
-    "tooltip-ca-delete": "Delăre ce pažu",
-    "tooltip-search": "Kaută en {{SITENAME}}",
-    "tooltip-n-mainpage": "Visita l'pažu principu",
-    "tooltip-n-portal": "Dajpul l'projectu, quelques pote faraere, o truves sabi.",
-    "tooltip-n-currentevents": "Găseşte informaţii despre evenimentiķ kurente",
-    "tooltip-n-recentchanges": "Lista des şumbǎrae recentae en l'wiki.",
-    "tooltip-n-randompage": "Donare npažu alaetoare",
-    "tooltip-n-help": "Ajutor truves isi.",
-    "tooltip-t-whatlinkshere": "Lista tuturor pažinilor wiki care konduc spre această pažină",
-    "tooltip-t-contributions": "Vu lista de kontribuţi de c'utilizatoru",
-    "tooltip-t-upload": "Tremer fişirul",
-    "tooltip-t-specialpages": "Lista de toat paži specialus",
-    "tooltip-ca-nstab-user": "Vu l'pažu d'utilizatoru",
-    "tooltip-ca-nstab-project": "Vu l'pažu de projektu",
-    "tooltip-ca-nstab-category": "Vu l'pažu de kategoria",
-    "tooltip-minoredit": "ce-est n'modifikacion minoru",
-    "tooltip-save": "Salvaere tes modifikacions",
-    "tooltip-diff": "Rată ce modifikări ai făcut tekstului.",
-    "file-nohires": "Ce-n-est n'resolucion mai mari.",
-    "show-big-image": "Mareşte resolucion",
-    "bad_image_list": "Formatul este următorul:\n\nNumai elementîle unei liste sunt luate en consideraere. (Açestea sunt linii ce encep cu *)\n\nPrima legătură de pe linie trebuie se fie spre un fişier defectuos.\n\nOrice legături ce urmează pe acenaşi linie sunt consideraete excepţii, dică paži unde fişierul poate părea inclus direct.",
-    "metadata": "Metadata",
-    "watchlistall2": "toat",
-    "namespacesall": "toat",
-    "monthsall": "toat",
-    "specialpages": "Paži specalus"
+       "@metadata": {
+               "authors": [
+                       "Andrijko Z.",
+                       "Кумулај Маркус",
+                       "Макѕе",
+                       "Приетен тев"
+               ]
+       },
+       "tog-underline": "Subliniaere legătuls:",
+       "sun": "Dum",
+       "mon": "Lun",
+       "tue": "Mar",
+       "wed": "Mie",
+       "thu": "Joi",
+       "fri": "Vin",
+       "sat": "Sam",
+       "january": "januari",
+       "february": "februari",
+       "march": "marti",
+       "april": "aprili",
+       "may_long": "mă",
+       "june": "juni",
+       "july": "juli",
+       "august": "august",
+       "september": "septembri",
+       "october": "oktombri",
+       "november": "nojembri",
+       "december": "decembri",
+       "january-gen": "januari",
+       "february-gen": "februari",
+       "march-gen": "marti",
+       "april-gen": "aprili",
+       "may-gen": "mai",
+       "june-gen": "juni",
+       "july-gen": "juli",
+       "august-gen": "august",
+       "september-gen": "septembri",
+       "october-gen": "oktombri",
+       "november-gen": "nojembri",
+       "december-gen": "decembri",
+       "jan": "jan",
+       "feb": "feb",
+       "mar": "mar",
+       "apr": "apr",
+       "may": "mai",
+       "jun": "jun",
+       "jul": "jul",
+       "aug": "aug",
+       "sep": "sep",
+       "oct": "okt",
+       "nov": "nov",
+       "dec": "dec",
+       "category_header": "Pažus en kategoria \"$1\"",
+       "subcategories": "Subkategorii",
+       "listingcontinuesabbrev": "kontinu",
+       "about": "Dajpul",
+       "cancel": "renuntǎe",
+       "mytalk": "Maj diskuţu",
+       "errorpagetitle": "Eru",
+       "tagline": "De {{SITENAME}}",
+       "help": "ajutor",
+       "search": "kaută",
+       "searchbutton": "kaută",
+       "searcharticle": "Lie",
+       "history": "Historia pažus",
+       "printableversion": "vercion printablu",
+       "permalink": "Legătul permanentul",
+       "edit": "Edita",
+       "editthispage": "Edita ce pažu",
+       "delete": "Delăre",
+       "protect": "Ažatme",
+       "newpage": "Paži novi",
+       "talkpagelinktext": "Diskuţu",
+       "personaltools": "Alatki personalu",
+       "talk": "Diskuţu",
+       "views": "Vi",
+       "toolbox": "alatunikul",
+       "redirectedfrom": "(Redirecţionat de la $1)",
+       "jumpto": "Lia a:",
+       "jumptonavigation": "navigacion",
+       "jumptosearch": "kaută",
+       "aboutsite": "Dajpul {{SITENAME}}",
+       "aboutpage": "Project:Dajpul {{SITENAME}}",
+       "copyrightpage": "{{ns:project}}:Prava d'autoru",
+       "currentevents": "Tebikoru",
+       "currentevents-url": "Project:Tebikoru",
+       "disclaimers": "tǎmenuls",
+       "disclaimerpage": "Project:tǎmenul",
+       "edithelp": "Ajutor pentru editaere",
+       "mainpage": "Pažu principu",
+       "mainpage-description": "Pažu principu",
+       "privacy": "Politikmus de ližitul",
+       "privacypage": "Project:Politikmus de ližitul",
+       "retrievedfrom": "Aduse de \"$1\"",
+       "youhavenewmessages": "Veses $1 ($2).",
+       "editsection": "Editaere",
+       "editold": "edita",
+       "editsectionhint": "Editaere ţisecion: $1",
+       "toc": "Kuprins",
+       "showtoc": "arată",
+       "hidetoc": "askunde",
+       "site-rss-feed": "$1 RSS fitul",
+       "site-atom-feed": "$1 Atom fitul",
+       "page-rss-feed": "\"$1\" RSS Fitul",
+       "page-atom-feed": "\"$1\" Atom Fitul",
+       "nstab-user": "Pažu d'utilizatoru",
+       "nstab-project": "Projektu",
+       "nstab-image": "fişirul",
+       "nstab-category": "kategoria",
+       "viewsource": "Baganaere",
+       "yourname": "Nom d'utilizatoru:",
+       "login": "Prilasnaere",
+       "nav-login-createaccount": "Prilasnaere / Nažbe",
+       "userlogin": "Prilasnaere / kreare nutilizatoru",
+       "userlogout": "otlastaere",
+       "bold_sample": "Eskrire aldin",
+       "bold_tip": "Eskrire aldin",
+       "italic_sample": "Eskrire kursive",
+       "italic_tip": "Eskrire kursive",
+       "link_sample": "Nom s'legătuls",
+       "link_tip": "Legătul internul",
+       "extlink_sample": "http://www.example.com nom s'legătuls",
+       "extlink_tip": "Legătul ķsternul (vec prefiks http://)",
+       "headline_sample": "Eskrire s'titlus",
+       "headline_tip": "Titlu de nivel 2",
+       "nowiki_sample": "Intorduca no-Wiki isi",
+       "nowiki_tip": "No-Wiki klaşu",
+       "image_tip": "Santigul inserat",
+       "media_tip": "Legătul fişirul de media",
+       "sig_tip": "Utilizatorunom et data et temp",
+       "hr_tip": "Linia orizontala (esnidivale)",
+       "summary": "Sumar:",
+       "subject": "Subjekt / titlur:",
+       "minoredit": "Aceasta este o editare minoră",
+       "watchthis": "klăaere ce pažu",
+       "showpreview": "Rată previzualizare",
+       "showdiff": "Arată şumbărae",
+       "newarticle": "(Nova)",
+       "editing": "o $1 editaere",
+       "editingsection": "Editaere $1 (sekcion)",
+       "copyrightwarning": "<!-- Gol deocamdată. Vertismentul se flă en MediaWiki:Summary -->\nTe rog notari la din kontribuţi al {{SITENAME}} sunt konsideraere relesavat supra $2 (suah $1 din detăs). Açteu nesav te se teksti sunt editaere denomerci det redistributaere din vent, hatae ici.<br /> Tu este nostre promisaere bonti us tu skrirste ce se, nega kopiaere din publik domen nega similari resorsua. '''NE SUBMITE KOPILEGRU SKRIE SAS PERMIŢION!'''",
+       "template-protected": "(ažatmat)",
+       "template-semiprotected": "(semi-ažatmat)",
+       "currentrev": "Vercion kurentu",
+       "revisionasof": "Vercion de data $1",
+       "previousrevision": "←Versiunea nterioară",
+       "cur": "aktualu",
+       "last": "precedente",
+       "history-title": "Editaerehistoria pentru \"$1\"",
+       "lineno": "Linia $1:",
+       "compareselectedversions": "Kompara vercion selektus",
+       "editundo": "anulizăe",
+       "viewprevnext": "Vu ($1 {{int:pipe-separator}} $2) ($3)",
+       "mypreferences": "Maj prefirenţu",
+       "recentchanges": "şumbărae recentae",
+       "rcshowhideminor": "$1 modifikările minore",
+       "rcshowhidebots": "$1 roboti",
+       "rcshowhideliu": "$1 utilizatori prilasnaeri",
+       "rcshowhideanons": "$1 utilizatori anonimi",
+       "rcshowhidemine": "$1 mes modifikacions",
+       "rclinks": "Rată ultimele $1 modifikări din ultimele $2 zile.<br />\n$3",
+       "diff": "diferenţu",
+       "hist": "historia",
+       "hide": "askunde",
+       "show": "Arată",
+       "minoreditletter": "m",
+       "newpageletter": "N",
+       "boteditletter": "b",
+       "recentchangeslinked": "Modifikări korelate",
+       "recentchangeslinked-feed": "Modifikări korelate",
+       "recentchangeslinked-toolbox": "Modifikări korelate",
+       "upload": "trimiţe fişirul",
+       "file-anchor-link": "Fişirul",
+       "filehist": "Historia fişirulu",
+       "filehist-current": "kurentu",
+       "filehist-datetime": "Data/Temp",
+       "filehist-user": "Utilizatoru",
+       "filehist-dimensions": "Dimencions",
+       "filehist-comment": "komentarul",
+       "imagelinks": "Legătul fişirul de media",
+       "linkstoimage": "Ces {{PLURAL:$1|paži legǎt|paži legǎtent}} a ce fişirul:",
+       "randompage": "alaeţu",
+       "nbytes": "$1 {{PLURAL:$1|bătul|bătuls}}",
+       "nmembers": "$1 {{PLURAL:$1|membru|membri}}",
+       "newpages": "Paži novi",
+       "booksources": "Surse de cărţi",
+       "allpages": "Toats paži",
+       "allarticles": "Toats paži",
+       "allpagessubmit": "Treme",
+       "watchlist": "Maj klăaeru",
+       "mywatchlist": "Maj klăaere",
+       "watch": "klăaere",
+       "unwatch": "Deklăaera",
+       "watching": "O klăaere...",
+       "unwatching": "O deklăaere...",
+       "rollbacklink": "revenire",
+       "namespace": "lSpaţi:",
+       "invert": "Ķskluda spaţul",
+       "blanknamespace": "(Principu)",
+       "contributions": "Kontribuţi d'utilizatori",
+       "mycontris": "Mes kontribuţi",
+       "contribsub2": "Pentru $1 ($2)",
+       "uctop": "(susverf)",
+       "sp-contributions-talk": "Diskuţu",
+       "whatlinkshere": "Legǎtul a ce pažu",
+       "whatlinkshere-title": "Paži legǎtulent a $1",
+       "nolinkshere": "Paži ne legǎtent a '''[[:$1]]'''.",
+       "istemplate": "vikulabe",
+       "whatlinkshere-links": "← legătuls",
+       "blocklink": "blokuapǎe",
+       "contribslink": "kontribuţi",
+       "revertmove": "revenire",
+       "export": "Ķsporta paži",
+       "thumbnail-more": "ķsinde",
+       "thumbnail_error": "Eru vec kreare de thumbnail: $1",
+       "tooltip-pt-userpage": "Moj pažu d'utilizatoru",
+       "tooltip-pt-mytalk": "Maj pažu diskuţus",
+       "tooltip-pt-preferences": "Maj prefirenţu",
+       "tooltip-pt-watchlist": "Lista pažinilor pe care le monitorizez.",
+       "tooltip-pt-mycontris": "Lista de mes kontribucions",
+       "tooltip-pt-login": "Pute prilasnaere, ne l'est doist.",
+       "tooltip-pt-logout": "otlastaere",
+       "tooltip-ca-talk": "Diskuţie despre artikol",
+       "tooltip-ca-edit": "Poţi edita această pažină. Te rugăm se previzualizezi konţinutul enainte de salvare.",
+       "tooltip-ca-protect": "Ažatme ce pažu",
+       "tooltip-ca-delete": "Delăre ce pažu",
+       "tooltip-search": "Kaută en {{SITENAME}}",
+       "tooltip-n-mainpage": "Visita l'pažu principu",
+       "tooltip-n-portal": "Dajpul l'projectu, quelques pote faraere, o truves sabi.",
+       "tooltip-n-currentevents": "Găseşte informaţii despre evenimentiķ kurente",
+       "tooltip-n-recentchanges": "Lista des şumbǎrae recentae en l'wiki.",
+       "tooltip-n-randompage": "Donare npažu alaetoare",
+       "tooltip-n-help": "Ajutor truves isi.",
+       "tooltip-t-whatlinkshere": "Lista tuturor pažinilor wiki care konduc spre această pažină",
+       "tooltip-t-contributions": "Vu lista de kontribuţi de c'utilizatoru",
+       "tooltip-t-upload": "Tremer fişirul",
+       "tooltip-t-specialpages": "Lista de toat paži specialus",
+       "tooltip-ca-nstab-user": "Vu l'pažu d'utilizatoru",
+       "tooltip-ca-nstab-project": "Vu l'pažu de projektu",
+       "tooltip-ca-nstab-category": "Vu l'pažu de kategoria",
+       "tooltip-minoredit": "ce-est n'modifikacion minoru",
+       "tooltip-save": "Salvaere tes modifikacions",
+       "tooltip-diff": "Rată ce modifikări ai făcut tekstului.",
+       "file-nohires": "Ce-n-est n'resolucion mai mari.",
+       "show-big-image": "Mareşte resolucion",
+       "bad_image_list": "Formatul este următorul:\n\nNumai elementîle unei liste sunt luate en consideraere. (Açestea sunt linii ce encep cu *)\n\nPrima legătură de pe linie trebuie se fie spre un fişier defectuos.\n\nOrice legături ce urmează pe acenaşi linie sunt consideraete excepţii, dică paži unde fişierul poate părea inclus direct.",
+       "metadata": "Metadata",
+       "namespacesall": "toat",
+       "monthsall": "toat",
+       "specialpages": "Paži specalus"
 }
index 3fb3add..783665a 100644 (file)
        "passwordreset-emailsent-capture": "परिवर्तितकूटशब्दस्य ई-पत्रं प्रेषितम् अस्ति । तत् अधः द्रष्टुं शक्यते ।",
        "passwordreset-emailerror-capture": "परिवर्तितकूटशब्दस्य ई-पत्रं निर्मितम् अस्ति । तत् अधः द्रष्टुं शक्यते । परन्तु {{GENDER:$2|योजकाय}} प्रेषणकाले तत् निरस्तम् अभवत् : $1",
        "changeemail": "ई-पत्रसङ्केतः परिवर्त्यताम्",
-       "changeemail-header": "प्रयोक्तृनाम्नः ई-पत्रसङ्केतः परिवर्त्यताम्",
        "changeemail-text": "स्वस्य ई-पत्रसङ्केतं परिवर्तयितुम् अधः दत्तं प्रपत्रं पूरयतु । एतस्यै प्रक्रियायै कूटशब्दः आवश्यकः ।",
        "changeemail-no-info": "एतत् पृष्ठं सम्पादयितुं प्रवेशः अनिवार्यः ।",
        "changeemail-oldemail": "वर्तमानः ई-पत्रसङ्केतः",
        "changeemail-none": "(न कोऽपि)",
        "changeemail-password": "भवतः/भवत्याः {{SITENAME}} कूटशब्दः:",
        "changeemail-submit": "ई-पत्रं परिवर्त्यताम्",
-       "changeemail-cancel": "निरस्यताम्",
        "changeemail-throttled": "भवता/भवत्या अत्यधिकाः प्रवेशप्रयासाः कृताः । \nकृपया $1 कालं यावत् प्रतिक्षां करोतु ।",
        "resettokens": "चिह्नानि (tokens) परिवर्त्यताम्",
        "resettokens-text": "भवतः/भवत्याः सदस्यतया सह सल्लग्नानि चिह्नानि () उपयोक्तुं शक्यन्ते । येन अनया सदस्यतया सह सल्लग्नाः काश्चन गुप्तसूचनाः ज्ञातुं शक्यन्ते ।",
        "mergehistory-same-destination": "मूलपृष्ठ-लक्षितपृष्ठे समाने न भवेताम् ।",
        "mergehistory-reason": "कारणम् :",
        "mergelog": "संस्करणं विलीयताम्",
-       "pagemerge-logentry": "[[:$1]] इत्येनं [[:$2]] इत्यस्मिन् विलीनं कृतम् ($3 परिवर्तनानि)",
        "revertmerge": "पृथक्क्रियताम्",
        "mergelogpagetext": "येषां पृष्ठानाम् इतिहासः अधुना एव विलीनीकृतः, तेषां पृष्ठानाम् आवलिः अधः प्रदत्ता ।",
        "history-title": "\"$1\" इत्यस्य आवर्तनेतिहासः",
        "searchall": "सर्वाणि",
        "showingresults": "#'''$2''' क्रमाङ्कात् आरभ्य {{PLURAL:$1|'''$1''' परिणामः अधः प्रदर्शितः|'''$1''' परिणामाः अधः प्रदर्शिताः}}।",
        "showingresultsinrange": "#'''$2''' क्रमाङ्कात् आरभ्य #'''$3''' क्रमाङ्कपर्यन्तं {{PLURAL:$1|'''$1''' परिणामः अधः प्रदर्शितः|'''$1''' परिणामाः अधः प्रदर्शिताः}}।",
-       "showingresultsheader": "'''$4''' इत्येतस्मै {{PLURAL:$5|'''$1''' परिणामः '''$3''' इत्येषु|'''$1 - $2''' परिणामाः '''$3''' इत्येषु}}",
        "search-nonefound": "भवतः/भवत्याः अपेक्षानुगुणं परिणामः न विद्यते ।",
        "powersearch-legend": "प्रगतम् अन्वेषणम्",
        "powersearch-ns": "नामाकाशेषु अन्विष्यताम् :",
        "statistics": "साङ्ख्यिकी",
        "statistics-header-pages": "पुटसाङ्ख्यिकाः ।",
        "statistics-header-edits": "सङ्ख्यिकाः सम्पादयतु ।",
-       "statistics-header-views": "साङ्ख्यिकाः अवलोकयतु ।",
        "statistics-header-users": "योजकसाङ्ख्यिकाः ।",
        "statistics-header-hooks": "अन्यसाङ्ख्यिकाः ।",
        "statistics-articles": "आधेयपुटानि ।",
        "statistics-files": "उद्भारितसञ्चिकाः",
        "statistics-edits": "{{SITENAME}} व्यवस्थापनपर्यन्तं पुटसम्पादनानि ।",
        "statistics-edits-average": "प्रतिपुटं माध्यसम्पादनानि ।",
-       "statistics-views-total": "अवलोकनयोगः ।",
-       "statistics-views-total-desc": "असंवृत्तपुटानाम् अवलोकनानि । अपि च विशेषपुटानि नान्तर्गतानि ।",
-       "statistics-views-peredit": "प्रतिसम्पादनम् अवलोकनम् ।",
        "statistics-users": "पञ्जीकृतः [[Special:ListUsers|योजकः]]",
        "statistics-users-active": "सक्रियाः सदस्याः",
        "statistics-users-active-desc": "गतेषु {{PLURAL:$1|day|$1 दिनेषु}} सक्रियाः योजकाः  ।",
-       "statistics-mostpopular": "अत्यवलोकितपुटानि ।",
        "pageswithprop": "प्रगुणविशेषयुतानि पृष्ठानि",
        "pageswithprop-legend": "प्रगुणविशेषयुतानि पृष्ठानि",
        "doubleredirects": "दुगुनी-अनुप्रेषिते",
        "uncategorizedtemplates": "अवर्गीकृताः प्रकृतयः ।",
        "unusedcategories": "अनुपयुक्ताः वर्गाः ।",
        "unusedimages": "अनुपयुक्तानि पुटाणी ।",
-       "popularpages": "प्रसिद्धानि पुटानि ।",
        "wantedcategories": "आवश्यकाः वर्गाः ।",
        "wantedpages": "आवश्यकपुटानि ।",
        "wantedpages-badtitle": "$1 परिणामनिरूपणे अमान्यशीर्षकम् ।",
        "querypage-disabled": "समाचरणकारणेन एतद्विशेषपुटं निष्क्रियम् ।",
        "booksources": "ग्रन्थस्रोतः",
        "booksources-search-legend": "ग्रन्थस्रोतः अन्विष्यताम्",
-       "booksources-go": "गम्यताम्",
        "booksources-text": "अधस्था आवली नूतनप्राचीनपुस्तकानां विक्रयकेन्द्रस्य अनुबन्धान् सूचयति । यत्र ते  आवश्यकाः अन्यविषयाः अपि उपलभ्याः ।",
        "booksources-invalid-isbn": "दत्तं ISBN मान्यम् इति  न भाति । मूलस्रोततः प्रतिकृतीः कर्तुं परिशीलयतु ।",
        "specialloguserlabel": "आचारी :",
        "wlheader-enotif": "विद्युन्मानपत्रस्य सूचनाः सक्रियाः ।",
        "wlheader-showupdated": "भवतः सन्दर्शनस्य पश्चात् परिवर्तितानि पुटानि स्थूलाक्षरैः निर्दिष्टानि ।",
        "wlnote": "अधस्तात् {{PLURAL:$1|'''1''' परिवर्तनमस्ति|अन्तिमानि '''$1''' परिवर्तनानि सन्ति}},{{PLURAL:$2|गते दिवसे|'''$2''' गतेषु दिवसेषु}}, , $3, $4. इति",
-       "wlshowlast": "अन्तिमाः $1 होराः, अन्तिमानि $2 दिनानि $3 दृश्यन्ताम्",
+       "wlshowlast": "अन्तिमाः $1 होराः, अन्तिमानि $2 दिनानि  दृश्यन्ताम्",
        "watchlist-options": "अवेक्षणाऽऽवलेः विकल्पाः",
        "watching": "निरीक्षते...",
        "unwatching": "निरीक्षाम् अपाकरोति...",
        "pageinfo-robot-policy": "चालकयन्त्रस्थितिः अन्विष्यताम्",
        "pageinfo-robot-index": "अङ्कनयोग्यम्",
        "pageinfo-robot-noindex": "अङ्कनायोग्यम्",
-       "pageinfo-views": "अवलोकनानां सङ्ख्या ।",
        "pageinfo-watchers": "पृष्ठावलोककानां सङ्ख्या ।",
        "pageinfo-redirects-name": "एतत् पृष्ठं प्रति पुनर्निर्दिश्यते",
        "pageinfo-subpages-name": "अस्य पृष्ठस्य उपपृष्ठानि",
        "exif-urgency-low": "मन्दम् ।$1",
        "exif-urgency-high": "उन्नतम् ($1)",
        "exif-urgency-other": "योजकनिरूपिता आद्यता : $1",
-       "watchlistall2": "सर्वाणि",
        "namespacesall": "सर्वाणि",
        "monthsall": "सर्वाणि",
        "confirmemail": "ईपत्रसङ्केतः प्रमाणीक्रियताम्",
        "logentry-rights-rights-legacy": "$1, $3 इत्यस्मै समूहसदस्यतां पर्यवर्तयत्",
        "logentry-rights-autopromote": "$1 इत्ययं स्वचालितरूपेण $4 इत्यतः $5 इति यावत् पदोन्नतः",
        "rightsnone": "(कतम)",
+       "revdelete-summary": "सम्पादनसांक्षेपिक",
        "feedback-bugornote": "यदि भवान् कस्याश्चित् तान्त्रिकसमस्यायाः विषये विशदीकर्तुम् इच्छति तर्हि [$1 मत्कुणसञ्चिकां करोतु ।]\nअन्यथा चेत् भवान् सरलप्रपत्रम् उपयोक्तुं शक्नोति । भवतः टीका योजकनाम्ना सह भवतः जालगवाक्षेन सह  \"[$3 $2]\" इत्यस्मिन् पुटे योज्यते ।",
        "feedback-subject": "विषय:",
        "feedback-message": "संदेश:",
index 415c1c6..cd7d6aa 100644 (file)
@@ -26,6 +26,7 @@
        "tog-watchdefault": "Уларыппыт сирэйдэрбин уонна билэлэрбин кэтээн көрүү тиһигэр киллэрэн ис",
        "tog-watchmoves": "Аатын уларыппыт сирэйдэрбин уонна билэлэрбин кэтээн көрүү тиһигэр киллэрэн ис",
        "tog-watchdeletion": "Соппут сирэйдэрбин уонна билэлэрбин кэтээн көрүү тиһигэр киллэрэн ис",
+       "tog-watchrollback": "Төннөрбүт сирэйдэрбин кэтэбилим тиһигэр киллэрэн ис",
        "tog-minordefault": "Уларытыылары атын этиллибэтэҕинэ кыра уларытыы курдук бэлиэтээ",
        "tog-previewontop": "Хайдах буоларын уларытар түннүк үрдүнэн (иннигэр) көрдөр",
        "tog-previewonfirst": "Хайдах буоларын тута көрдөр",
        "otherlanguages": "Атын омук тылынан",
        "redirectedfrom": "(Мантан: $1  көстө)",
        "redirectpagesub": "Утаарар сирэй",
+       "redirectto": "Манна утаарыы:",
        "lastmodifiedat": "Бу сирэй бүтэһигин $2, $1 уларыйбыта.",
        "viewcount": "Бу сирэй {{PLURAL:$1|биирдэ|$1 төгүл}} көрүллүбүт.",
        "protectedpage": "Уларытыллыбат сирэй",
        "hidetoc": "көрдөрүмэ",
        "collapsible-collapse": "Сабыы",
        "collapsible-expand": "Тэнитии",
+       "confirmable-confirm": "{{GENDER:$1|Бигэргэтэҕин}} дуо?",
+       "confirmable-yes": "Сөп",
+       "confirmable-no": "Суох",
        "thisisdeleted": "$1 көрдөрөбүн эбэтэр хостуубун дуу?",
        "viewdeleted": "$1 көрдөрөбүн?",
        "restorelink": "{{PLURAL:$1|биир сотторуллубут көннөрүү|$1 сотторуллубут көннөрүүлэр}}",
        "databaseerror-text": "Билии олоҕор алҕас таҕыста.\nБырагыраамма алҕаһа буолуон сөп.",
        "databaseerror-textcl": "Билии олоҕор алҕас таҕыста.",
        "databaseerror-query": "Ыйытык: $1",
+       "databaseerror-function": "Функция: $1",
        "databaseerror-error": "Алҕас: $1",
        "laggedslavemode": "Болҕой: Бу сирэй бүтэһик уларытыылара суох буолуон сөп",
        "readonly": "Билии олоҕун уларытар бобуллубут",
        "viewsourcetext": "Эн бу сирэй төрдүн көрүөххүн уонна төгүллүөххүн сөп:",
        "viewyourtext": "'''Бэйэҥ көннөрүүлэриҥ''' исходнигын бу сирэйгэ көрүөххүн уонна хатылаан ылыаххын сөп:",
        "protectedinterface": "Бу сирэй бырагыраамма интерфейсын биллэриитин көрдөрөр, онон моһуогурууттан халытан хатанан турар.\nТылбааһын уларытыаххын баҕарар буоллаххына онно аналлаах тылбаас ситим-сирин туһан: MediaWiki [//translatewiki.net/ translatewiki.net]",
-       "editinginterface": "'''Болҕой:''' Быраҕыраамма тас көстүүтүн (интерфейсын) хааччыйар тиэкиһи уларытаары гынан эрэҕин.\nБу сирэйи уларыттаххына атын кыттааччылар көрөллөрүгэр бырагыраамма көстүүтэ уларыйыа. \nТылбааһын уларытыаххын эбэтэр эбиэххин баҕарар буоллаххына Медиавики бырайыактарын тылбаастыыр сиргэ киир [//translatewiki.net/ translatewiki.net].",
+       "editinginterface": "<strong>Болҕой:</strong> Быраҕыраамма тас көстүүтүн (интерфейсын) хааччыйар тиэкиһи уларытаары гынан эрэҕин.\nБу сирэйи уларыттаххына атын кыттааччылар көрөллөрүгэр быраҕыраамма көстүүтэ уларыйыа.",
+       "translateinterface": "Бу биллэриини тылбаастыырга эбэтэр уларытарга, бука диэн, MediaWiki диэн анал тылбаастыыр сиргэ киир [//translatewiki.net/ translatewiki.net].",
        "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)",
        "createaccount-text": "Ким эрэ {{SITENAME}} бырайыакка ($4) саҥа $2 ааты бэлиэтээбит. \"$2\" киирии тыла \"$3\". Билигин киирэн киирии тылгын уларытыаххын наада.\n\nСаҥа аат сыыһа оҥоһуллубут буоллаҕына тугу да гыныа суоххун сөп.",
        "login-throttled": "Ааккын аһара элбэхтик билиһиннэрэ сатаатыҥ.\nБука диэн $1 буолан баран өссө киирэн көрөөр.",
        "login-abort-generic": "Бу аатынан сатаан киирбэтиҥ - быстан хаалла",
+       "login-migrated-generic": "Эн бэлиэ-аатыҥ көһөрүллүбүт, онон урукку аатыҥ бу биикигэ суох буолбут эбит.",
        "loginlanguagelabel": "Омугун тыла: $1",
        "suspicious-userlogout": "Сеансы түмүктүүр ыйытыгыҥ ылыныллыбата, тоҕо диэтэххэ браузер эбэтэр кээштыыр прокси алҕас ыыппыт ыйытыктарыгар майгынныыр.",
        "createacct-another-realname-tip": "Дьиҥнээх аатыҥ булгуччута суох.\nЫйдаххына уларыппыт сирэйиҥ устуоруйатыгар көстөр буолуоҕа.",
        "passwordreset-emailsent-capture": "Киирии тылы уларытар туһунан сурук аллара эмиэ көрдөрүлүннэ.",
        "passwordreset-emailerror-capture": "Манна киирии тылы уларытар туһунан сурук көрдөрүлүннэ. Ол эрэн сурук бу төрүөттэн $2 кыттааччыга сатаан барбата: $1",
        "changeemail": "Ааадырыһын уларыт",
-       "changeemail-header": "Аадырыһын уларытыы",
        "changeemail-text": "Бу форманы толорон аадырыскын уларыт. Уларытыыны бигэргэтэргэ киирии тылгын киллэриэхтээххин.",
        "changeemail-no-info": "Бу сирэйгэ чопчу тиийэргэ, тиһиликкэ бэлиэтэммит ааккын этиэхтиэххин.",
        "changeemail-oldemail": "Билиҥҥи аадырыс:",
        "changeemail-none": "(суох)",
        "changeemail-password": "{{SITENAME}} ситим-сиргэ киирэр тылыҥ:",
        "changeemail-submit": "Аадырыһы уларыт",
-       "changeemail-cancel": "Тохтот",
        "changeemail-throttled": "Ааккын аһара элбэхтик билиһиннэрэ сатаатыҥ.\nБука диэн $1 буолан баран өссө киирэн көрөөр.",
        "resettokens": "Токеннары бырах",
        "resettokens-text": "Бу ситим-сиргэ бэлиэтэммит ааккын кытта ситимнээх токеннары сотуоххун сөп.\n\nАлҕас кимиэхэ эрэ биэрэн кэбиспит буоллаххына эбэтэр ким эрэ эн ааккынан алдьатан киирбит буоллаҕына маны туһаныахха сөп.",
        "preview": "Холоон көрүү",
        "showpreview": "Уларытыах иннинэ көрүү",
        "showdiff": "Уларытыылар",
-       "anoneditwarning": "'''Болҕой:''' Системаҕа киирбэтэххин. Онон аатыҥ оннугар IP аадаырыһыҥ бу сирэй историятыгар киириэ.",
+       "blankarticle": "<strong>Сэрэтии:</strong> Оҥорор сирэйиҥ кураанах.\nБу тимэҕи «{{int:savearticle}}» хос баттаатаххына кураанах сирэй оҥоһуллуо.",
+       "anoneditwarning": "<strong>Болҕой:</strong> Киирбэтэххин. Онон тугу эрэ уларытар түгэҥҥэр аатыҥ оннугар IP аадырыһыҥ барыларыгар көстүө. бу сирэй историятыгар киириэ. Өскөтө <strong>[$1 киирдэххинэ]</strong> эбэтэр <strong>[$2 бэлиэтэннэххинэ]</strong> уларытыыларыҥ Эн ааккын кытта ситимнэниэхтэрэ, ону таһынан ол атын да көдьүүстэрдээх буолуоҕа.",
        "anonpreviewwarning": "''Эн тиһиккэ ааккын эппэттэххин. Уларытыыгын бигэргэттэххинэ IP-аадырыһыҥ сирэй устуоруйатыгар суруллуо.''",
        "missingsummary": "'''Санатыы:''' Уларыппытыҥ кылгас быһаарыытын суруйбатаххын. Уларытыыны бигэргэттэххинэ улартытыыҥ хос быһаарыыта суох барыа.",
        "missingcommenttext": "Манна хос быһаарыыны суруй.",
        "content-model-text": "көннөрү тиэкис",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Халыыптары ыҥырарга хатыланар аргуменнардаах сирэйдэр",
+       "duplicate-args-category-desc": "Халыыптары ыҥырарга хатыланар аргуменнардаах сирэйдэр, холобур маннык <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Болҕой. Бу сирэй наһаа элбэх көмпүүтэри ноҕуруускалыыр ресурсаларга сигэнэр.\n\n{{PLURAL:$2|Сигэнии ахсаана|Сигэниилэр ахсааннара}} мантан тахсыа суохтаах - $2, билигин {{PLURAL:$1|$1 сигэниилээх|$1 сигэниилэрдээх}}.",
        "expensive-parserfunction-category": "Көмпүүтэри ноҕуруускалыыр ресурсаларга наһаа элбэхтик сигэнэр сирэйдэр",
        "post-expand-template-inclusion-warning": "Болҕой: Киллэрэр халыыптарыҥ ыйааһыннара наһаа улахан.\nОнон сорох халыыптар киллэриллиэхтэрэ суоҕа.",
        "parser-template-recursion-depth-warning": "($1) халыып рекурсиятын муҥура бүппүт (Превышен предел глубины рекурсии)",
        "language-converter-depth-warning": "Тыл конвертерын дириҥин хааччаҕа куоһарыллыбыт ($1)",
        "node-count-exceeded-category": "Түмүктэрин ахсаана аһара барбыт сирэйдэр",
+       "node-count-exceeded-category-desc": "Сирэй түмүгүн ахсаана сиэри таһынан барбыт.",
        "node-count-exceeded-warning": "Сирэй түмүгүн ахсаана таһынан барбыт",
        "expansion-depth-exceeded-category": "Аһыллыытын дириҥэ куоһарыллыбыт сирэйдэр",
+       "expansion-depth-exceeded-category-desc": "Сирэй аһыллыытын дириҥэ куоһарыллыбыт.",
        "expansion-depth-exceeded-warning": "Сирэйгэ угуллубут билэлэр аһара элбээбиттэр",
        "parser-unstrip-loop-warning": "Сабыллыбатах pre көһүннэ",
        "parser-unstrip-recursion-limit": "Рекурсия ахсаана таһынан барбыт ($1)",
        "cantcreateaccounttitle": "Саҥа ааты киллэрэр сатаммат",
        "cantcreateaccount-text": "[[User:$3|$3]] кыттааччы бу IP-ттан ('''$1''') саҥа бэлиэтэниини бопто.\n\nБыһаарыыта: $3 - ''$2''",
        "cantcreateaccount-range-text": "Бу IP-диапазонтан '''$1''' ааты бэлиэтиири [[User:$3|$3]] боппут. Эн IP-аадырыһыҥ ('''$4''') онно киирсэр эбит. \n\nЫйыллыбыт төрүөтэ: $2.",
-       "viewpagelogs": "Бу сирэй историятын көрдөр",
+       "viewpagelogs": "Бу сирэй сурунаалларын көрүү",
        "nohistory": "Бу сирэй историята суох эбит.",
        "currentrev": "Билиҥҥи барыл",
        "currentrev-asof": "Билиҥҥи торум манна: $1",
        "revisionasof": "$1 барыл",
-       "revision-info": "Ð\92еÑ\80Ñ\81иÑ\8f Ð¾Ñ\82 $1; $2",
+       "revision-info": "Ð\91аÑ\80Ñ\8bл $1; {{GENDER:$6|$2}}$7",
        "previousrevision": "←Инники барыл",
        "nextrevision": "Аныгыскы барыл→",
        "currentrevisionlink": "Билиҥҥи барыл",
        "rev-deleted-event": "(бэлиэтээһин дьайыыта сотулунна)",
        "rev-deleted-user-contribs": "[кыттааччы аата эбэтэр IP-аадырыһа сотуллубуттар — уларытыы көстүбэт оҥоһуллубут]",
        "rev-deleted-text-permission": "Сирэй бу барыла '''сотуллубут'''.\nБыһаарыыта  [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} манна] баар буолуон сөп.",
+       "rev-suppressed-text-permission": "Сирэй бу барыла <strong>кистэммит</strong>.\nБыһаарыы [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} кистээһин сурунаалыгар] баар.",
        "rev-deleted-text-unhide": "Сирэй ити барыла '''сотуллубут'''.\nБаҕар ол туһунан [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} сотуу сурунаалыгар] баара буолуо.\nОл да буоллар эн дьаһабыл буоларыҥ быһыытынан [$1 барылы көрүөххүн сөп].",
        "rev-suppressed-text-unhide": "Сирэй бу барыла '''кистэммит'''.\nБыһаарыы баҕара [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} кистээһин сурунаалыгар] баара буолуо.\nЭн дьаһабыл буоларыҥ быһыытынан [ол барылы көрүөххүн $1] сөп.",
        "rev-deleted-text-view": "Ыстатыйа бу барыла '''сотуллубут'''.\nОл эрэн ону көрүөххүн сөп.\nТоҕо сотуллубутун быһаарыыта [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} манна] баар буолуон сөп.",
        "revdelete-text-text": "Сотуллубут барыллар уруккутун курдук сирэй устуоруйатыгар көстүөхтэрэ, ол эрэн иһинээҕитэ сорҕото киэҥ эйгэҕэ көрдөрүллүө суоҕа.",
        "revdelete-text-file": "Билэ сотуллубут барыллара уруккутун курдук сирэй устуоруйатыгар көстүөхтэрэ, ол эрэн иһинээҕитэ сорҕото киэҥ эйгэҕэ көрдөрүллүө суоҕа.",
        "logdelete-text": "Сурунаалтан сотуллубут уруккутун курдук сурунаал устуоруйатыгар көстүөҕэ, ол эрэн иһинээҕитин сорҕото киэҥ эйгэҕэ көрдөрүллүө суоҕа.",
-       "revdelete-text-others": "Өскөтүн эбии хааччах турбатах буоллаҕына, {{grammar:genitive|{{SITENAME}}}} атын дьаһабыллара урукку курдук кистэммити көрөр уонна чөлүгэр түһэрэр кыахтаахтар.",
+       "revdelete-text-others": "Өскөтүн эбии хааччах турбатах буоллаҕына, атын дьаһабыллар урукку курдук кистэммити көрөр уонна чөлүгэр түһэрэр кыахтаахтар.",
        "revdelete-confirm": "Бука диэн кырдьык бу дьайыыны онороргун, содула туох буоларын өйдүүргүн уонна [[{{MediaWiki:Policy-url}}|сиэри]] тутуһаргын бигэргэт.",
        "revdelete-suppress-text": "Кистээһин маннык түбэлтэлэргэ '''эрэ''' оҥоһуллар:\n* Баһааҕырдар буолуон сөптөөҕү суруйуу\n* Киһи бэйэтин туһунан тоҕооһо суохтук суруллубут буоллаҕына\n*: <em>дьиэтин аадырыһа, төлөппүөннэрин нүөмэрэ, пааспарын нүөмэрэ уо.д.а.</em>",
        "revdelete-legend": "Хааччахтары туруоруу:",
        "mergehistory-empty": "Биир да барыл силлиһэр кыаҕа суох.",
        "mergehistory-success": "$3 {{PLURAL:$3|барыл|барыллар}} [[:$1]] биир [[:$2]] барылга силлистилэр.",
        "mergehistory-fail": "Сирэй устуоруйалара кыайан холбоспотулар, өссө биирдэ торумнар бириэмэлэрин уонна сирэй параметрдарын бэрэбиэркэлээ.",
+       "mergehistory-fail-toobig": "Устуоруйаны холбуур табыллыбата, тоҕо диэтэххэ $1  барылга көҥүллэнэр лимииттэн элбэҕи көһөрөр наада эбит.",
        "mergehistory-no-source": "Бастакы $1 сирэй суох.",
        "mergehistory-no-destination": "Баар буолуохтаах $1 сирэй суох.",
        "mergehistory-invalid-source": "Источнигыҥ сөптөөх ааттаах буолуохтаах.",
        "mergehistory-same-destination": "Саҕалыыр уонна түмүктүүр сирэйдэриҥ атын (уратылаах) буолуохтаахтар.",
        "mergehistory-reason": "Төрүөтэ:",
        "mergelog": "Силбэһиилэр сурунааллара",
-       "pagemerge-logentry": "силбэстилэр [[$1]] уонна [[$2]] ($3 диэри торумнар)",
        "revertmerge": "Араарыы",
        "mergelogpagetext": "Манна сирэйдэр устуоруйаларын бүтэһик силлэһиилэрин тиһигэ бэриллэр.",
        "history-title": "Көннөрүү сурунаала \"$1\"",
        "search-result-category-size": "{{PLURAL:$1|$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": "Уруулуу бырайыактар",
        "searchall": "бары",
        "showingresults": "Манна {{PLURAL:$1|түмүк|түмүктэр}} {{PLURAL:$1|көрдөрүлүннэ|көрдөрүлүннүлэр}} <strong>$1</strong> , мантан саҕалаан №&nbsp;<strong>$2</strong>.",
        "showingresultsinrange": "Манна {{PLURAL:$1|<strong>1</strong> түмүк|<strong>$1</strong> түмүк}} мантан саҕалаан <strong>$2</strong> маныаха дылы <strong>$3</strong> көрдөрүлүннэ.",
-       "showingresultsheader": "'''$4''' анаммыт {{PLURAL:$5|мантан '''$3''' түмүгэ - '''$1'''|мантан '''$3''' түмүктэрэ '''$1 - $2'''}}",
        "search-nonefound": "Көрдөбүлгэ эппиэттиир билэлэр көстүбэтилэр.",
        "powersearch-legend": "Дириҥэтэн көрдөөһүн",
        "powersearch-ns": "Аат далыгар көрдөө:",
        "license": "Лицензиялааһын:",
        "license-header": "Лицензиялааһын",
        "nolicense": "Талыллыбатах",
+       "licenses-edit": "Лиссиэнсийэ ымпыгын-чымпыгын уларыт",
        "license-nopreview": "(Уларытыыны бигэргэтиэх иннинэ көрүү сатаммат)",
-       "upload_source_url": " (сөптөөх URL, ким баҕарбыт киирэр сирэ)",
-       "upload_source_file": " (билэ көмпүүтэргэр баар)",
+       "upload_source_url": "(сөптөөх URL, ким баҕарбыт киирэр сирин талбыккын)",
+       "upload_source_file": "(көмпүүтэргэр баар билэни талбыккын)",
+       "listfiles-delete": "сотуу",
        "listfiles-summary": "Бу анал сирэй киллэриллибит билэлэри барытын көрдөрөр.",
        "listfiles_search_for": "Миэдьийэни (ойууну) аатынан көрдөтүү:",
        "imgfile": "билэ",
        "randomincategory": "Категория түбэспиччэ ыстатыйата",
        "randomincategory-invalidcategory": "\"$1\" диэн категория суох эбит.",
        "randomincategory-nopages": "Бу категорияҕа [[:Category:$1]] киирэр ыстатыйалар суохтар.",
-       "randomincategory-selectcategory": "Категория түбэспиччэ сирэйигэр көс: $1 $2.",
-       "randomincategory-selectcategory-submit": "Көс",
+       "randomincategory-category": "Категория:",
        "randomredirect": "Түбэспиччэ утаарыы",
        "randomredirect-nopages": "Бу аат далыгар($1) көһөрөр ыйынньыктар суохтар.",
        "statistics": "Статистика",
        "statistics-header-pages": "Сирэй статиистиката",
        "statistics-header-edits": "Көннөрүү статиистиката",
-       "statistics-header-views": "Көрөөһүн статистиката",
        "statistics-header-users": "Кыттааччылар статиистикалара",
        "statistics-header-hooks": "Атын статистика",
        "statistics-articles": "Ыстатыйалар ахсааннара",
        "statistics-files": "Киллэриллибит билэлэр (ойуулар иҥин) ахсааннара",
        "statistics-edits": "{{SITENAME}} оҥоһуллуоҕуттан көннөрүү ахсаана",
        "statistics-edits-average": "Биир сирэйгэ ортотунан хас көннөрүү тиксэрэ",
-       "statistics-views-total": "Көрүү ахсаана",
-       "statistics-views-total-desc": "Суох уонна аналлаах сирэйдэри көрүү ааҕыллыбат",
-       "statistics-views-peredit": "Биир улартыыга тиксэр көрүү ахсаана",
        "statistics-users": "Бэлиэтэммит [[Special:ListUsers|кыттааччы]] ахсаана",
        "statistics-users-active": "Көхтөөх кыттааччылар ахсааннара",
        "statistics-users-active-desc": "Ааспыт {{PLURAL:$1|биир хонук иһигэр|$1 хонукка}} тугу эмэ оҥорбут кыттааччылар",
-       "statistics-mostpopular": "Саамай элбэхтик көрүллэр ыстатыйалар",
        "pageswithprop": "Эрдэттэн туруоруулаах сирэйдэр",
        "pageswithprop-legend": "Уларытыллыбыт туруоруулаах сирэйдэр",
        "pageswithprop-text": "Манна сорох туруоруулара уларытыллыбыт сирэйдэр көстүбүттэр.",
        "uncategorizedtemplates": "Ханнык да категорияҕа киирбэтэх халыыптар",
        "unusedcategories": "Туттуллубатах категориялар",
        "unusedimages": "Туттулубатах билэлэр",
-       "popularpages": "Элбэх киһи көрөр сирэйдэрэ",
        "wantedcategories": "Көрдөнүллэр категориялар",
        "wantedpages": "Көрдөнүллэр сирэйдэр",
        "wantedpages-badtitle": "Көрдөбүл түмүгэр сыыһалаах аат баар: $1",
        "querypage-disabled": "Бу анал сирэй тиһилик үлэтин түргэтэтээри араарыллыбыт.",
        "booksources": "Кинигэлэр источниктара",
        "booksources-search-legend": "Кинигэ туһунан көрдөө",
-       "booksources-go": "Бул",
+       "booksources-search": "Бул",
        "booksources-text": "Манна кинигэ туһунан атын саайтарга ыйынньыктар хомулуннулар, онно баҕар эбии информация көстүөҕэ.",
        "booksources-invalid-isbn": "ISBN, арааһа, сыыһалаах. Нүөмэр көһөрөргө алҕас тахсыбатаҕын хат көр эрэ.",
        "specialloguserlabel": "Толорооччу:",
        "wlheader-enotif": "Эл. почтанан биллэрии холбоммут.",
        "wlheader-showupdated": "Бүтэһик киирииҥ кэннэ уларыйбыт сирэйдэр '''модьу''' бичигинэн бэлиэтэннилэр.",
        "wlnote": "Манна кэлиҥҥи {{PLURAL:$2|чаас|'''$2''' чаас}} иһигэр оҥоһуллубут бүтэһик $1 уларытыы көрдөрүлүннэ, бу кэмҥэ туругунан $3 $4.",
-       "wlshowlast": "бүтэһик $1 чааска $2 күҥҥэ $3 көрдөр",
+       "wlshowlast": "бүтэһик $1 чааска $2 күҥҥэ  көрдөр",
        "watchlist-options": "Кэтээн көрүү туруоруутун уларытыы",
        "watching": "Кэтээ...",
        "unwatching": "Кэтээмэ...",
        "import": "Сирэйдэри импортааһын",
        "importinterwiki": "Биики ыккардынааҕы импорт",
        "import-interwiki-text": "Биикини уонна импортанар сирэй аатын киллэр.\nУларытыылар күннэрэ-ыйдара уонна аапптардар ааттара оннуларынан хаалыахтара.\nБиики ыккардынааҕы импорт дьайыылара [[Special:Log/import|аналлаах сурунаалга]] суруллаллар.",
-       "import-interwiki-source": "Ылыллыбыт биикитэ/сирэйэ:",
        "import-interwiki-history": "Сирэй туох баар историятын көһөрөргө",
        "import-interwiki-templates": "Бары халыыптары киллэр",
        "import-interwiki-submit": "Импортаа",
        "pageinfo-robot-policy": "Роботтар көрдөөһүннэрин туруга",
        "pageinfo-robot-index": "Көҥүллэммит",
        "pageinfo-robot-noindex": "Араарыллыбыт",
-       "pageinfo-views": "Көрүү ахсаана",
        "pageinfo-watchers": "Кэтээнэр сирэйдэр ахсааннара",
        "pageinfo-few-watchers": "$1 кыттааччыттан аҕыйах кэтээччи",
        "pageinfo-redirects-name": "Бу сирэйгэ утаарыы ахсаана",
        "exif-urgency-low": "Намыһах ($1)",
        "exif-urgency-high": "Үрдүк ($1)",
        "exif-urgency-other": "Кыттааччы эппит приоритета ($1)",
-       "watchlistall2": "бары",
        "namespacesall": "бары",
        "monthsall": "бары",
        "confirmemail": "Электроннай аадырыһы бигэргэтии",
        "logentry-rights-rights-legacy": "$3 бөлөхтөргө киириитин $1 уларыппыт",
        "logentry-rights-autopromote": "$1 мантан $4 манна $5 көһөрүллүбүт",
        "rightsnone": "(суох)",
+       "revdelete-summary": "уларытыылар туһунан",
        "feedback-bugornote": "Туох кыһалҕаны көрсүбүккүн сиһилии суруйар кыахтаах буоллаххына, бука диэн [$1 алҕас туһунан биллэр].\nОл сатаммат буоллаҕына бу судургу форманы толор. Эн этииҥ ааккын уонна туһанар браузерыҥ аатын кытта манна «[$3 $2]» бэчээттэниэ.",
        "feedback-subject": "Тиэмэ:",
        "feedback-message": "Сурук:",
        "expand_templates_remove_nowiki": "Түмүккэ <nowiki> бэлиэни аахсыма",
        "expand_templates_generate_xml": "XML-ы мас курдук көрдөр",
        "expand_templates_generate_rawhtml": "HTML-ы көрдөр",
-       "expand_templates_preview": "Холоон көрүү"
+       "expand_templates_preview": "Холоон көрүү",
+       "pagelang-name": "Сирэй",
+       "pagelang-language": "Омугун тыла",
+       "pagelang-use-default": "Сүрүн тылы тутун",
+       "pagelang-select-lang": "Тылы талыы",
+       "right-pagelang": "Сирэй тылын уларыт",
+       "action-pagelang": "сирэй тылын уларытар буол",
+       "log-name-pagelang": "Тылы уларытыы сурунаала",
+       "mediastatistics-nbytes": "$1 баайт ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME көрүҥэ",
+       "mediastatistics-table-count": "Билэ ахсаана",
+       "mediastatistics-table-totalbytes": "Барытын кээмэйэ",
+       "mediastatistics-header-unknown": "Биллибэт",
+       "mediastatistics-header-bitmap": "Растр ойуулар",
+       "mediastatistics-header-drawing": "Уруһуйдар (вектор ойуулар)",
+       "mediastatistics-header-audio": "Аудио",
+       "mediastatistics-header-video": "Видео",
+       "mediastatistics-header-office": "Офис",
+       "mediastatistics-header-text": "Тиэкис",
+       "mediastatistics-header-executable": "Толоруллар",
+       "mediastatistics-header-archive": "Ыгыллыбыт формааттар",
+       "json-warn-trailing-comma": "JSON иһиттэн $1 ордук соппутуой сотуллубут"
 }
index 0811190..f3d1606 100644 (file)
        "passwordreset-emailsent-capture": "Mit́ṭen disạ ruaṛaḱ e-mail dokulena, oka do latarre ńeloḱ kana.",
        "passwordreset-emailerror-capture": "Disạ ruạṛ oco lạgit́te mit́ṭen e-mail tear hoelena, oka do latarre udugoḱkana, menkhan $1 beoharić ṭhen  ṭhen baṅ kul hoe akana.",
        "changeemail": "E-mail ṭhikạna do bodolme",
-       "changeemail-header": "Ekaunṭ e-mail ṭhikạna do bodolme",
        "changeemail-text": "Amaḱ e-mail ṭhikạna bodol lạgit́te noa forom purao me. Am do noa sariyaḱ lạgit́te amaḱ oku nambar em jạruṛtama.",
        "changeemail-no-info": "Noa sakam sojhete laṛcaṛ lạgit́te am do bhitri boloḱ hoyoḱtama.",
        "changeemail-oldemail": "Nitaḱ e-mail ṭhikạna:",
        "changeemail-newemail": "Nãwã e-mail ṭhikạna:",
        "changeemail-none": "(Okaṭaḱ hõ baṅ)",
        "changeemail-submit": "E-mail bodolme",
-       "changeemail-cancel": "Badme",
        "bold_sample": "Moṭa onol",
        "bold_tip": "Moṭa onol",
        "italic_sample": "Beka onol",
        "search-interwiki-more": "(Arhõ)",
        "searchrelated": "songenko",
        "searchall": "Sanam",
-       "showingresultsheader": "'''$4'''  lạgit́ {{PLURAL:$5|Pho̠l ńamoḱ́akan - '''$1''' of '''$3'''|Pho̠l ńamoḱ́akan '''$1 - $2''' of '''$3'''}}",
        "search-nonefound": "Kupuli leka roṛruạṛ bạnuḱa",
        "powersearch-togglelabel": "Sendra",
        "powersearch-toggleall": "Sanamaḱ",
        "pager-older-n": "{{PLURAL:$1 arhõ mare 1ṭen arhõ mare $1ṭen}}",
        "booksources": "Puthi ńamoḱ ṭhại/jayga",
        "booksources-search-legend": "Puthi reak ṭhai sendrayme",
-       "booksources-go": "Calaḱme",
        "log": "Cạbiko",
        "allpages": "joto sakam",
        "allarticles": "Sanam sakam",
        "watch": "Ńelme",
        "unwatch": "bang nelok' a",
        "watchlist-details": "Baṅ purạo tạlikare {{PLURAL:$1ṭen sakam $1 ṭen sakam}} menaḱa (roṛ sakamko lekhare baṅ sapkate)",
-       "wlshowlast": "Mucạtet́ udukmẽ $1 baje $2 maha $3",
+       "wlshowlast": "Mucạtet́ udukmẽ $1 baje $2 maha",
        "watchlist-options": "Ńelok tạlika reak sonketko",
        "watching": "Ńeloḱ kana...",
        "changed": "Bodolena",
        "exif-imagelength": "Usul",
        "exif-datetime": "Rẽt bodol reaḱ tạrikh ar okte",
        "exif-artist": "Onoliạ",
-       "watchlistall2": "Sanam, sanamak, sanamko",
        "namespacesall": "sanam",
        "monthsall": "Sanamak",
        "watchlisttools-view": "Jońgṛao bodolaḱko ńel",
index e3608ff..3c5c6fe 100644 (file)
        },
        "tog-underline": "Sutalìnia sos ligòngios",
        "tog-hideminor": "Cua is acontzos minores in sa pàgina de is ùrtimas mudàntzias",
-       "tog-hidepatrolled": "Cua sas mudas verificadas in sas ùrtimos càmbios",
+       "tog-hidepatrolled": "Cua is mudas verificadas in is ùrtimos càmbios",
        "tog-newpageshidepatrolled": "Cua sas pàginas verificadas dae sa lista de sas pàginas noas",
-       "tog-extendwatchlist": "Ammània sa watchlist pro ammustrare totu sos càmbios, non sos prus reghentes ebbia",
+       "tog-extendwatchlist": "Ammània sa watchlist pro ammustrare totus sos càmbios, non sos prus reghentes ebbia",
        "tog-usenewrc": "Pone in pare sos càmbios de cada pàgina in sos ùrtimos càmbios e in sa watchlist",
        "tog-numberheadings": "Auto-numeratzione de sos tìtulos",
        "tog-showtoolbar": "Ammustra sa mustra de sa barra de sas ainas",
        "tog-editondblclick": "Càmbia pàginas cun duos click",
        "tog-editsectiononrightclick": "Abìlita su càmbiu de sas setziones cun click de dereta in sos tìtulos de sas setziones",
-       "tog-watchcreations": "Agiunghe sas pàginas chi apo creadu e sos documentos chi apo carrigadu in sa watchlist mea",
-       "tog-watchdefault": "Agiunghe pàginas e documentos chi apo cambiadu in sa watchlist mea",
-       "tog-watchmoves": "Agiunghe pàginas e documentos chi apo mòvidu in sa watchlist mea",
-       "tog-watchdeletion": "Agiunghe pàginas e documentos chi apo fuliadu in sa watchlist mea",
-       "tog-minordefault": "Marca comente minores pro difetu totu sos càmbios",
+       "tog-watchcreations": "Annanghe is pàginas chi apo creadu e is documentos chi apo carrigadu in sa lista de pàginas annotadas mea",
+       "tog-watchdefault": "Annanghe pàginas e documentos chi apo cambiadu in sa lista de pàginas annotadas mea",
+       "tog-watchmoves": "Annanghe pàginas e documentos chi apo mòvidu in sa lista de pàginas annotadas mea",
+       "tog-watchdeletion": "Annanghe pàginas e documentos chi apo burradu in sa lista de pàginas annotadas mea",
+       "tog-watchrollback": "Pone is pàginas innue apo fatu su rollback in is pàginas annotadas",
+       "tog-minordefault": "Marca comente minores pro difetu totus sos càmbios",
        "tog-previewontop": "Ammustra s'anteprima in subra de sa casella de càmbiu e no in suta",
        "tog-previewonfirst": "Ammustra s'anteprima pro sa prima muda",
        "tog-enotifwatchlistpages": "Imbia·mi una post.el. cando b'at àpidu unu càmbiu in una pàgina o in unu documentu de sa watchlist mea",
        "tog-enotifusertalkpages": "Imbia·mi una post.el. cando sa pàgina de sas cuntierras meas est cambiada",
        "tog-enotifminoredits": "Imbia·mi una post.el. fintzas pro sos càmbios minores de sas pàginas e documentos",
        "tog-enotifrevealaddr": "Faghe ischire s'indiritzu de sa post.el. mea in sas notìficas de sa post.els",
-       "tog-shownumberswatching": "Ammustra su nùmeru de sos utentes chi sunt castiende sa pàgina",
+       "tog-shownumberswatching": "Ammustra su nùmeru de is impitadores chi ant annotadu sa pàgina",
        "tog-oldsig": "Firma atuale:",
-       "tog-fancysig": "Trata sa firma comente unu testu wiki (sena ligàmenes automàticos)",
+       "tog-fancysig": "Trata sa firma comente unu testu wiki (sena ligòngios automàticos)",
        "tog-uselivepreview": "Imprea sa funtzione \"anteprima bia\" (isperimentale)",
        "tog-forceeditsummary": "Averte·mi si su campu ogetu est bòidu",
        "tog-watchlisthideown": "Cua sas mudas meas dae sa watclist",
        "tog-watchlisthidebots": "Cua sas mudas de sos bots dae sa watchlist",
        "tog-watchlisthideminor": "Cua sos càmbios minores dae sa watchlist",
-       "tog-watchlisthideliu": "Cua sos càmbios de sos utentes intrados dae sa watchlist",
-       "tog-watchlisthideanons": "Cua sos càmbios de sos utentes anònimos dae sa watchlist",
+       "tog-watchlisthideliu": "Cua is càmbios de is impitadores identificados dae sa lista de pàginas annotadas",
+       "tog-watchlisthideanons": "Cua is càmbios de is impitadores anònimos dae sa lista de pàginas annotadas",
        "tog-watchlisthidepatrolled": "Cua mudas verificadas dae sa watchlist",
-       "tog-ccmeonemails": "Imbia·mi sas còpias de sas post.els chi imbio a sos àteros utentes",
+       "tog-ccmeonemails": "Imbia·mi sas còpias de is emails chi imbio a is àteros impitadores",
+       "tog-diffonly": "No ammustras su cuntènnidu de sa pàgina a pustis de sa bisura de is diferèntzias",
        "tog-showhiddencats": "Ammustra sas categorias cuadas",
-       "tog-useeditwarning": "Amonestamì si lassu una pagina cun mudantzias chena de sarvai.",
+       "tog-norollbackdiff": "Cua sa bisura de is diferèntzias a pustis de su rollback",
+       "tog-useeditwarning": "Averte·mi si lassu una pàgina cun càmbios sena de sarbare",
        "tog-prefershttps": "Imprea semper una lìnia segura candu fatzo s'intrada.",
        "underline-always": "Semper",
        "underline-never": "Mai",
        "december-date": "Nadale $1",
        "pagecategories": "{{PLURAL:$1|Categoria|Categorias}}",
        "category_header": "Pàginas in sa categoria \"$1\"",
-       "subcategories": "Subcategorias",
+       "subcategories": "Sutacategorias",
        "category-media-header": "Mèdios in sa categoria \"$1\"",
-       "category-empty": "''In custa categoria non b't peruna pàgina o mèdiu.''",
+       "category-empty": "''In custa categoria non ddu at peruna pàgina o documentu multimediale.''",
        "hidden-categories": "{{PLURAL:$1|Categoria cuada|Categorias cuadas}}",
        "hidden-category-category": "Categorias cuadas",
-       "category-subcat-count": "{{PLURAL:$2|Custa categoria cuntenet un'ùnica subcategoria ammustrada in suta.|Custa categoria cuntenet {{PLURAL:$1|sa subcategoria inditada|$1 subcategorias inditadas}} in suta, de $2 totales.}}",
-       "category-subcat-count-limited": "Custa categoria tenet {{PLURAL:$1|una subcategoria, ammustrada|$1 subcategorias, ammustradas}} in suta.",
-       "category-article-count": "{{PLURAL:$2|Custa categoria cuntenet feti sa pàgina chi sighit.|Custa categoria cuntenet {{PLURAL:$1|sa pàgina inditada|is $1 pàginas inditadas}} in suta, dae unu totale de $2.}}",
+       "category-subcat-count": "{{PLURAL:$2|Custa categoria cuntennet un'ùnica sutacategoria ammustrada in suta.|Custa categoria cuntenet {{PLURAL:$1|sa sutacategoria indicada|$1 sutacategorias indicadas}} in suta, dae $2 in totu.}}",
+       "category-subcat-count-limited": "Custa categoria tenet {{PLURAL:$1|una sutacategoria, ammustrada|$1 sutacategorias, ammustradas}} in suta.",
+       "category-article-count": "{{PLURAL:$2|Custa categoria cuntenet feti sa pàgina chi sighit.|Custa categoria cuntenet {{PLURAL:$1|sa pàgina indicada|is $1 pàginas indicadas}} in suta, dae unu totale de $2.}}",
        "category-article-count-limited": "{{PLURAL:$1|Sa pàgina chi sighit est|Is $1 pàginas chi sighint sunt}} in custa categoria.",
        "category-file-count": "{{PLURAL:$2|Custa categoria cuntenet feti su documentu chi sighit.|{{PLURAL:$1|Su documentu chi sighit est|Is $1 documentos chi sighint sunt}} in custa categoria, dae $2 totales.}}",
        "category-file-count-limited": "{{PLURAL:$1|Su documentu chi sighit est|Is $1 documentos chi sighint sunt}} in sa categoria currente.",
        "listingcontinuesabbrev": "sighit",
        "index-category": "Pàginas inditzizadas",
        "noindex-category": "Pàginas no inditzitzadas",
-       "broken-file-category": "Pàginas cun ligàmenes a sos documentos non funtzionantes",
+       "broken-file-category": "Pàginas chi ligant a documentos chi no esistint",
        "about": "A propòsitu de",
        "article": "Artìculu",
-       "newwindow": "(aberit in una ventana noa)",
+       "newwindow": "(aberret in una bentana noa)",
        "cancel": "Burra",
        "moredotdotdot": "Àteru…",
        "morenotlisted": "Sa lista no est cumpreta",
        "mypage": "Pàgina",
-       "mytalk": "Cuntierras meas",
+       "mytalk": "Cuntierras mias",
        "anontalk": "Cuntierras pro custu indiritzu IP",
        "navigation": "Navigatzione",
        "and": "&#32;e",
        "qbedit": "Càmbia",
        "qbpageoptions": "Possibilidades de sa pàgina",
        "qbmyoptions": "Sas preferèntzias meas",
-       "faq": "Pregontas/Rispostas (FAQ)",
+       "faq": "Pregontas fitianas",
        "faqpage": "Project:FAQ",
        "actions": "Atziones",
        "namespaces": "Nùmene-logos",
        "history_short": "Istòria",
        "updatedmarker": "atualizada dae s'ùrtima vìsita mea",
        "printableversion": "Versione de imprenta",
-       "permalink": "Ligàmene permanente",
+       "permalink": "Ligòngiu permanente",
        "print": "Imprenta",
        "view": "Ammustra",
        "view-foreign": "Ammustra in $1",
        "edit": "Càmbia",
        "edit-local": "Càmbia sa descritzione locale",
        "create": "Crea",
-       "create-local": "Agiunghe descritzione locale",
+       "create-local": "Annanghe descritzione locale",
        "editthispage": "Càmbia custa pàgina",
        "create-this-page": "Crea custa pàgina",
        "delete": "Burra",
        "undeletethispage": "Non burres custa pàgina",
        "undelete_short": "Non burres {{PLURAL:$1|unu càmbiu|$1 càmbios}}",
        "viewdeleted_short": "Ammustra {{PLURAL:$1|unu càmbiu burradu|$1 càmbios burrados}}",
-       "protect": "Ampara",
-       "protect_change": "càmbiu",
+       "protect": "Barda",
+       "protect_change": "càmbia",
        "protectthispage": "Ampara custa pàgina",
        "unprotect": "Muda amparu",
        "unprotectthispage": "Muda amparu de custa pàgina",
        "personaltools": "Ainas personales",
        "articlepage": "Càstia s'artìculu",
        "talk": "Cuntierras",
-       "views": "Vistas",
+       "views": "Bìsitas",
        "toolbox": "Ainas",
-       "userpage": "Càstia sa pàgina utente",
+       "userpage": "Càstia sa pàgina impitadore",
        "projectpage": "Càstia sa pàgina meta",
        "imagepage": "Càstia sa pàgina de su documentu",
        "mediawikipage": "Càstia su messàgiu",
        "otherlanguages": "Àteras limbas",
        "redirectedfrom": "(Reindiritzadu dae $1)",
        "redirectpagesub": "Pàgina de reindiritzamentu",
+       "redirectto": "Reindiritzat a:",
        "lastmodifiedat": "Ùrtimu càmbiu su $1, a is $2.",
        "viewcount": "Custu artìculu l'ant lèghidu {{PLURAL:$1|borta|$1 bortas}}.",
        "protectedpage": "Pàgina amparada",
        "jumpto": "Bae a:",
        "jumptonavigation": "navigatzione",
        "jumptosearch": "chirca",
-       "view-pool-error": "Tene passèntzia, sos servidores sunt càrrigos de traballu.\nIn medas chircant de castiare custa pàgina.\nPro praghere, torra a provare luego.\n\n$1",
+       "view-pool-error": "Tene passèntzia, sos servidores sunt càrrigos de traballu.\nIn medas chircant de castiare custa pàgina.\nPro praghere, torra a tenteare posca.\n\n$1",
        "generic-pool-error": "Tene passèntzia, sos servidores sunt càrrigos de traballu.\nIn medas chircant de castiare custa risorsa.\nPro praghere, torra a provare luego.",
+       "pool-timeout": "Timeout abetende pro s'arreu",
+       "pool-queuefull": "Sa coa pro su traballu de su protzessu est prena",
        "pool-errorunknown": "Faddina disconnota",
+       "pool-servererror": "Su servìtziu de contadore de su protzessu no est disponìbile ($1).",
        "aboutsite": "A propòsitu de {{SITENAME}}",
        "aboutpage": "Project:Informatziones",
        "copyright": "Cuntenutu suta de lissèntzia $1.",
        "mainpage-description": "Pàgina Base",
        "policy-url": "Project:Polìticas",
        "portal": "Portale comunidade",
-       "portal-url": "Project:Portale Comunidade",
-       "privacy": "Polìtica pro sos datos privados",
-       "privacypage": "Project:Polìtica pro sos datos privados",
+       "portal-url": "Project:Portale comunidade",
+       "privacy": "Polìtica pro is datos privados",
+       "privacypage": "Project:Polìtica pro is datos privados",
        "badaccess": "Permissu non bastante",
        "badaccess-group0": "Non ses autorizadu a fàghere s'atzione chi boles",
-       "badaccess-groups": "S'atzione chi boles est limitada a utentes in {{PLURAL:$2|su grupu|unu de sos grupos}}: $1.",
+       "badaccess-groups": "S'atzione chi as rechestu est limitada a impitadores in {{PLURAL:$2|su grupu|unu de is grupos}}: $1.",
        "versionrequired": "Bi bolet sa version $1 de MediaWiki",
        "versionrequiredtext": "Bi bolet sa versione $1 de MediaWiki pro impreare custa pàgina.\nCàstia [[Special:Version|version page]].",
        "ok": "Andat bene",
        "pagetitle-view-mainpage": "{{SITENAME}}",
        "retrievedfrom": "Bogadu dae  \"$1\"",
        "youhavenewmessages": "Tenes $1 ($2).",
-       "youhavenewmessagesmanyusers": "Tenes $1 dae utentes ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Tenes}} $1 dae {{PLURAL:$3|un'àteru impitadore|$3 impitadores}} ($2).",
+       "youhavenewmessagesmanyusers": "Tenes $1 dae unos cantos impitadores ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|unu messàggiu nou|999=messàggios noos}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|ùrtima muda|999=ùrtimas mudàntzias}}",
        "youhavenewmessagesmulti": "Tenes messàgios noos in $1",
        "editsection": "càmbia",
        "editold": "càmbia",
        "editlink": "càmbia",
        "viewsourcelink": "càstia testu codificadu",
        "editsectionhint": "Càmbia sa setzione: $1",
-       "toc": "Cuntenutu",
+       "toc": "Cuntènnidu",
        "showtoc": "ammustra",
        "hidetoc": "cua",
        "collapsible-collapse": "Serra e istringhe",
        "collapsible-expand": "Aberi",
+       "confirmable-confirm": "Ses {{GENDER:$1|seguru|segura}}?",
        "confirmable-yes": "Eja",
        "confirmable-no": "No",
        "thisisdeleted": "Càstiare o recuperare $1?",
        "viewdeleted": "Vista $1?",
        "restorelink": "{{PLURAL:$1|unu càmbiu burradu|$1 càmbios burrados}}",
        "feedlinks": "Alimentatzione:",
+       "feed-invalid": "Tipu de canale de sutiscritzione invàlida.",
+       "feed-unavailable": "Non sunt disponìbiles feeds",
        "site-rss-feed": "Feed Atom de $1",
        "site-atom-feed": "Feed Atom de $1",
        "page-rss-feed": "Feed RSS pro \"$1\"",
        "sort-descending": "Òrdine in falada",
        "sort-ascending": "Òrdine in artziada",
        "nstab-main": "Pàgina",
-       "nstab-user": "Pàgina utente",
+       "nstab-user": "Pàgina impitadore",
        "nstab-media": "Documentu multimediale",
        "nstab-special": "Pàgina ispetziale",
        "nstab-project": "Pàgina de servìtziu",
        "nstab-help": "Agiudu",
        "nstab-category": "Categoria",
        "nosuchaction": "No esistit custa atzione",
-       "nosuchactiontext": "S'atzione ispetzificada in sa URL no est vàlida.\nEst possìbile chi sa URL siat istada carcada male, o si siat sighidu unu ligàmene non vàlidu.\nCustu diat pòdere èssere unu \"bug\" de {{SITENAME}}.",
+       "nosuchactiontext": "S'atzione ispetzificada in sa URL no est vàlida.\nEst possìbile chi sa URL siat istada carcada male, o si siat sighidu unu ligòngiu non vàlidu.\nCustu diat pòdere èssere unu \"bug\" de {{SITENAME}}.",
        "nosuchspecialpage": "Custa pàgina ispetziale no esistit",
        "nospecialpagetext": "<strong>As pedidu una pàgina ispetziale non vàlida.</strong>\n\nUna lista de pàginas ispetziales vàlidas dd'agatas in [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Faddina",
        "databaseerror": "Faddina de su database",
+       "databaseerror-text": "B'est istadu un'errore cun una rechesta a sa base de sos datos.\nCustu podet indicare unu problema in su programma.",
+       "databaseerror-textcl": "B'est istadu un'errore cun una rechesta a sa base de sos datos.",
+       "databaseerror-query": "Rechesta: $1",
        "databaseerror-function": "Funtzione: $1",
        "databaseerror-error": "Faddina: $1",
+       "laggedslavemode": "<strong>Atentzione:</strong> Sa pàgina podet non cuntènnere sos agiornamentos prus novos.",
        "readonly": "Database bloccadu",
        "enterlockreason": "Inserta su motivu de su blocu, ispetzifichende su momentu probàbile chi su blocu at a acabbare",
-       "readonlytext": "In custu momentu su database est bloccadu dae aciunturas e àteras modificas, probabilmente pro ordinaria manutentzione a su database, a pustis de custas at a èssere normale torra.\n\nS'aministradore chi dd'at bloccadu at donadu custa ispiegatzione: $1",
-       "missing-article": "Su database no at agatadu su testu de una pàgina ki diat àer agatadu a suta de su nùmene \"$1\" $2.\n\nCustu a su sòlitu si verìficat cando bi est unu ligàmine in sa stòria o in unu cunfrontu intre revisiones de una pàgina ki est stada fuliada.\n\nSi no est custu su casu, s'est agatada una faddina de su software.\nPro praxere signa s'acuntèssidu a unu [[Special:ListUsers/sysop|amministradore]] spetzifichende su URL de sa faddina.",
+       "readonlytext": "In custu momentu su database est bloccadu dae aciunturas e àteras modificas, probabilmente pro ordinaria manutentzione a su database, a pustis de custas at a èssere normale torra.\n\nS'amministradore chi dd'at bloccadu at donadu custa ispiegatzione: $1",
+       "missing-article": "Su database no at agatadu su testu de una pàgina chi diat àere agatadu a suta de su nùmene \"$1\" $2.\n\nCustu a su sòlitu si verìficat cando bi est unu ligòngiu in s'istòria o in unu cunfrontu intre revisiones de una pàgina chi est istada fuliada.\n\nSi no est custu su casu, s'est agatada una faddina de su software.\nPro praghere signa s'acontèssidu a unu [[Special:ListUsers/sysop|amministradore]] ispetzifichende su URL de sa faddina.",
        "missingarticle-rev": "(revisione nùmeru: $1)",
        "missingarticle-diff": "(Dif: $1, $2)",
+       "readonly_lag": "Sa base de sos datos (database) est istada arreada automaticamente in su mentres chi sos servidores iscraos si sincronizzana cun su printzipale.",
        "internalerror": "Faddina interna",
        "internalerror_info": "Faddina interna: $1",
        "filecopyerror": "No est stadu possìbile copiare su file \"$1\" comente \"$2\".",
        "filerenameerror": "No est stadu possìbile re-numenare su file \"$1\" in \"$2\".",
        "filedeleteerror": "No est stadu possìbile cantzellare su file \"$1\".",
+       "directorycreateerror": "Non si podet creare sa directory \"$1\".",
        "filenotfound": "No est stadu possìbile agatare \"$1\".",
        "unexpected": "Valore non previstu: \"$1\"=\"$2\".",
        "formerror": "Errore: impossìbile imbiare su modellu",
        "badarticleerror": "Operatzione non cunsentida pro custa pàgina.",
        "cannotdelete": "No est stadu possìbile burrare sa pàgina o su file \"$1\".\nPodet èsser stadu burradu dae calicunu àteru.",
+       "cannotdelete-title": "Impossìbile burrare sa pàgina \"$1\"",
+       "delete-hook-aborted": "Sa burradura est istada annuddada dae su hook de s'estensione.\nNo est istadu datu acrarimentu.",
+       "no-null-revision": "Non si podet creare una versione lulla pro sa pàgina \"$1\"",
        "badtitle": "Tìtulu malu",
-       "badtitletext": "Su tìtulu de sa pàgina ch'as pediu est bùidu, isballiau, o iscritu in is cullegamentus inter-wiki in manera non currègia o cun caràteres no amìtius.",
+       "badtitletext": "Su tìtulu de sa pàgina chi as pregontadu est bùidu, isballiadu, o iscritu in is cullegamentus inter-wiki a manera non currègia.\nPodet cuntènnere uno o unos cantos caràteres no ammìtidos pro is tìtulos.",
+       "perfcached": "Is datos chi sighint sunt in sa memòria \"cache\" e podent èessere no agiornados. Unu màssimu de {{PLURAL:$1|unu resurtu est disponìbile|$1 resurtos sunt disponìbiles}} in sa memòria",
+       "perfcachedts": "Is datos chi sighint sunt in sa memòria \"cache\", s'ùrtimu agiornamentu est de su $2 a is $3. Unu màssimu de {{PLURAL:$4|unu resurtu est disponìbile|$4 resurtos sunt disponìbiles}} in sa memòria",
+       "querypage-no-updates": "Sos agiornamentos pro custa pàgina sunt temporaneamente sessadas.\nSos datos suos no ant a èssere agiornados.",
        "viewsource": "Càstia mitza",
        "viewsource-title": "Càstia sa mitza de $1",
        "actionthrottled": "Atzione rimandada",
+       "actionthrottledtext": "Comente mesura de seguràntzia contra a s'ispam, non podes torrare a fàghere custa atzione tropu ispissu in unu tempus tropu curtzu, e tue as cabuladu custu lìmide.\nPro piaghere torra a proare a pustis de carchi minutos.",
+       "protectedpagetext": "Custa pàgina est istada amparada pro nde prevenner su càmbiu o àteras fatas.",
+       "viewsourcetext": "Podes bìere o copiare su còdighe mitza de custa pàgina:",
+       "viewyourtext": "Càstia e còpia su còdighe mitza de is <strong>mudàntzias tuas</strong> in custa pàgina:",
+       "protectedinterface": "Custa pàgina frunit testu pro s'interfàtzie de su programma de custa wiki, ed est amparada pro prevènnere abusos.\nPro annànghere o cambiare tradutziones pro totus sas wikis, pro piaghere imprea [//translatewiki.net/ translatewiki.net], su progetu MediaWiki de localizatzione.",
+       "editinginterface": "<strong>Atentzione:</strong> Ses modificande una pàgina chi est impreada pro frunire testu de s'interfàtzie pro su programma.\nCàmbios a custa pàgina ant a influentzare sa bisura de s'interfàtzie impitadore pro àteros impitadores in custa wiki.\nPro annànghere o cambiare tradutziones pro totus sas wikis, pro piaghere imprea [//translatewiki.net/ translatewiki.net], su progetu MediaWiki de localizatzione.",
+       "cascadeprotected": "Custa pàgina est istada amparada dae sas modìficas proite est incluida in {{PLURAL:$1|custa pàgina, chi est amparada|custas pàginas, chi sunt amparadas}} cun s'optzione \"a tzurru\" ativada:\n$2",
        "namespaceprotected": "Non tenes su permissu de cambiare is pàginas in su nùmene-lugu '''$1'''.",
+       "customcssprotected": "Non tenes sos permissos pro cambiare custa pàgina CSS proite cuntènnidi sas impostaduras pessonales de un'àteru impitadore.",
+       "customjsprotected": "Non tenes sos permissos pro cambiare custa pàgina JavaScript proite cuntènnidi sas impostaduras pessonales de un'àteru impitadore.",
+       "mycustomcssprotected": "Non tenes sos permissos pro cambiare custa pàgina CSS.",
+       "mycustomjsprotected": "Non tenes sos permissos pro cambiare custa pàgina JavaScript.",
+       "myprivateinfoprotected": "Non tenes su permissu de cambiare is informatziones privadas tuas.",
+       "mypreferencesprotected": "Non tenes su permissu de cambiare is preferèntzias tuas.",
        "ns-specialprotected": "Is pàginas ispetziales non podent èssere acontzadas.",
+       "titleprotected": "Sa creatzione de una pàgina cun custu tìtulu est istada arreada dae [[User:$1|$1]].\nSa motivatzione est \"<em>$2</em>\".",
+       "invalidtitle-knownnamespace": "Su tìtulu cun nùmene-logu \"$2\" e testu \"$3\" no est bàlidu",
+       "invalidtitle-unknownnamespace": "Su tìtulu cun nùmene-logu disconnotu de nùmeru $1 e testu \"$2\" no est bàlidu",
        "exception-nologin": "Non ses intrau",
+       "exception-nologin-text": "Pro atzèdere a custa pàgina o atzione est netzessàriu a ti identificare.",
+       "exception-nologin-text-manual": "Pro piaghere $1 pro pòder'atzèdere a custa pàgina o atzione.",
+       "virus-badscanner": "Faddina de configuratzione: antivirus disconnotu: <em>$1</em>",
        "virus-scanfailed": "scansione faddida (còdixe $1)",
        "virus-unknownscanner": "antivirus disconnotu:",
        "logouttext": "<strong>As acabadu sa sessione.</strong>\n\nTene contu ca is pàginas ki sunt giai abertas in àteras bentanas podent sighire a pàrrer comente cando fias identificadu, fintzas a cando non ddas renfriscas dae su browser tuo.",
+       "welcomeuser": "Benénnidu, $1!",
        "welcomecreation-msg": "Su contu tuo est istadu creadu.\nSi boles podes cambiare is [[Special:Preferences|prefèntzias tuas]] pro {{SITENAME}}",
-       "yourname": "Nùmene usuàriu",
-       "userlogin-yourname": "Nùmene usuàriu",
-       "userlogin-yourname-ph": "Inserta su nùmene usuàriu tuo",
-       "createacct-another-username-ph": "Inserta su nùmene usuàriu:",
+       "yourname": "Nùmene impitadore:",
+       "userlogin-yourname": "Nùmene impitadore",
+       "userlogin-yourname-ph": "Inserta su nùmene impitadore tuo",
+       "createacct-another-username-ph": "Inserta su nùmene impitadore:",
        "yourpassword": "Password:",
        "userlogin-yourpassword": "Password",
        "userlogin-yourpassword-ph": "Inserta sa password tua",
        "createacct-yourpassword-ph": "Inserta una password",
-       "yourpasswordagain": "Repiti sa password:",
+       "yourpasswordagain": "Repite sa password:",
        "createacct-yourpasswordagain": "Cunfirma sa password",
        "createacct-yourpasswordagain-ph": "Inserta sa password torra",
-       "remembermypassword": "Ammenta sa paràula de òrdine in custu carculadore (pro unu màssimu de $1 {{PLURAL:$1|die|dies}})",
+       "remembermypassword": "Ammenta sa password in custu navigadore (pro unu màssimu de $1 {{PLURAL:$1|die|dies}})",
+       "userlogin-remembermypassword": "Mantènnemi cullegadu",
+       "userlogin-signwithsecure": "Imprea una cunnessione segura",
        "yourdomainname": "Ispetzìfica su domìniu",
+       "password-change-forbidden": "Non podes cambiare sa password in custa wiki.",
        "login": "Intra",
        "nav-login-createaccount": "Intra / crea contu",
        "userlogin": "Intra / crea contu",
        "createaccount": "Crea contu",
        "gotaccount": "Tenes giai unu contu? $1.",
        "gotaccountlink": "Identìfica·ti",
+       "userlogin-resetlink": "As ismentigadu is datos pro s'atzessu?",
+       "userlogin-resetpassword-link": "As ismentigadu sa password?",
+       "userlogin-helplink2": "Agiudu pro s'atzessu",
        "userlogin-createanother": "Crea un àteru contu",
        "createacct-emailrequired": "Indirutzu Email",
+       "createacct-emailoptional": "Indiritzu email (optzionale)",
+       "createacct-email-ph": "Inserta s'indiritzu email tuo",
+       "createacct-another-email-ph": "Inserta s'indiritzu email",
        "createaccountmail": "Imprea una password a sorte e ispedidda a su indiritzu email ispetzificadu",
+       "createacct-realname": "Nùmene beru (optzionale)",
        "createaccountreason": "Motivu:",
        "createacct-reason": "Motivu",
        "createacct-reason-ph": "Proite ses creande un àteru contu",
+       "createacct-captcha": "Còmpudu de siguresa",
+       "createacct-imgcaptcha-ph": "Inserta su testu chi bides aissusu",
        "createacct-submit": "Crea su contu tuo",
        "createacct-another-submit": "Crea un àteru contu",
+       "createacct-benefit-heading": "{{SITENAME}} est òpera de gente che tue.",
        "createacct-benefit-body1": "{{PLURAL:$1|acontzu|acontzos}}",
        "createacct-benefit-body2": "{{PLURAL:$1|pàgina|pàginas}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|contribudore retzente|contribudores retzentes}}",
        "badretype": "Is passwords chi as insertadu non currispondent.",
-       "userexists": "Su nùmene usuàriu insertadu est giai impreadu.\nSèbera unu nùmene diferente.",
+       "userexists": "Su nùmene impitadore insertadu est giai impreadu.\nSèbera unu nùmene diferente.",
        "loginerror": "Faddina de identificatzione",
        "createacct-error": "Faddina in sa creatzione de su contu",
-       "noname": "Su nùmene usuàriu insertadu no est vàlidu.",
+       "createaccounterror": "Impossìbile creare su contu: $1",
+       "nocookiesnew": "Su contu de s'impitadore est istadu creadu, ma no est istadu possìbile fàghere s'atzessu a {{SITENAME}} proite sos \"cookies\" sunt deativados.\nTorra a proare a pustis de los àere ativados.",
+       "nocookieslogin": "{{SITENAME}} imprea is cookies pro identificare is impitadores.\nTue tenes is cookies disativados.\nAtivaddos e prova torra.",
+       "noname": "Su nùmene impitadore insertadu no est vàlidu.",
        "loginsuccesstitle": "Ti ses identificadu",
-       "loginsuccess": "'''Immoe ses intradu in {{SITENAME}} cun su nùmene usuàriu \"$1\".'''",
-       "nosuchuser": "Non b'at usuàriu cun su nùmene \"$1\".\nIs nùmenes usuàriu sunt sensìbiles a is lìteras mannas.\nVerìfica su nùmene insertadu o [[Special:UserLogin/signup|crea unu contu nou]].",
-       "nouserspecified": "Deves ispetzificare unu nùmene usuàriu.",
+       "loginsuccess": "'''Immoe ses intradu in {{SITENAME}} cun su nùmene impitadore \"$1\".'''",
+       "nosuchuser": "Non b'at impitadore cun su nùmene \"$1\".\nIs nùmenes impitadore sunt sensìbiles a is lìteras mannas.\nVerìfica su nùmene insertadu o [[Special:UserLogin/signup|crea unu contu nou]].",
+       "nosuchusershort": "Non b'est perunu impitadore chi tenet \"$1\" comente nùmene.\nCòmpida su nùmene insertadu.",
+       "nouserspecified": "Depes ispetzificare unu nùmene impitadore.",
+       "login-userblocked": "{{GENDER:$1|Custu impitadore est arreadu|Custa impidadora est arreada}}. Atzessu no adduidu.",
        "wrongpassword": "Sa paràula de òrdine insertada no est bona. Prova torra.",
        "wrongpasswordempty": "No as iscritu sa paràula de òrdine.\nProva torra.",
        "passwordtooshort": "Is passwords depent tènner a su mancu {{PLURAL:$1|1 caràtere|$1 caràteres}}.",
-       "password-name-match": "Sa password tua depet èsser diferente dae su nùmene usuàriu tuo.",
-       "mailmypassword": "Resetta sa password",
+       "password-name-match": "Sa password tua depet èsser diferente dae su nùmene impitadore tuo.",
+       "password-login-forbidden": "S'impreau de custu nùmene impitadore e de custa password est istadu proibidu.",
+       "mailmypassword": "Reseta sa password",
        "passwordremindertitle": "Servìtziu Password Reminder de {{SITENAME}}",
-       "passwordremindertext": "Calicunu (probabilmenti tue, cun s'indiritzu IP $1) at pediu de arritziri una password noa pro intrare a {{SITENAME}} ($4).\nUna password temporanea pro s'usuàriu \"$2\" est istada impostada a \"$3\".\nChi custu fiat ne is intentziones tuas, depis intrare (log in) e scioberari una password noa.\nSa password temporanea tua at a iscadiri in {{PLURAL:$5|una die|$5 dies}}.\n\nChi non ses istadu a pediri sa password, o chi as torrau a agatare sa password torra e non da depis cambiari prus, non cunsideras custu messagiu e sighi a impreare sa password beccia.",
-       "noemail": "Peruna e-mail resurtat registrada pro s'usuàriu \"$1\".",
-       "passwordsent": "Una password noa est stada mandada a s'indiritzu e-mail de s'usuàriu \"$1\".\nPro praxere, cando dda retzis identìfica·ti torra.",
+       "passwordremindertext": "Calicunu (probabilmenti tue, cun s'indiritzu IP $1) at pediu de arritziri una password noa pro intrare a {{SITENAME}} ($4).\nUna password temporanea pro s'impitadore \"$2\" est istada impostada a \"$3\".\nChi custu fiat ne is intentziones tuas, depis intrare (log in) e scioberari una password noa.\nSa password temporanea tua at a iscadiri in {{PLURAL:$5|una die|$5 dies}}.\n\nChi non ses istadu a pediri sa password, o chi as torrau a agatare sa password torra e non da depis cambiari prus, non cunsideras custu messagiu e sighi a impreare sa password beccia.",
+       "noemail": "Peruna email resurtat registrada pro s'impitadore \"$1\".",
+       "noemailcreate": "Bisòngiat a frunire un'indiritzu email vàlidu.",
+       "passwordsent": "Una password noa est stada mandada a s'indiritzu email de s'impitadore \"$1\".\nPro praxere, cando dda retzis identìfica·ti torra.",
+       "blocked-mailpassword": "Sos càmbios dae s'indiritzu IP tuo sunt arreados, e no est adduidu impreare sa funtzionalidade \"imbia password noa\".",
        "mailerror": "Faddina imbiende su messàgiu: $1",
        "emailauthenticated": "S'indiritzu e-mail tuo est istadu autenticau su $2 a is $3.",
        "emailconfirmlink": "Cunfirma s'indiritzu e-mail tuo",
+       "emaildisabled": "Custu giassu non podet imbiare emails.",
        "accountcreated": "Contu creadu",
-       "accountcreatedtext": "Su contu de s'usuàriu [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) est stadu creadu.",
+       "accountcreatedtext": "Su contu de s'impitadore [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) est stadu creadu.",
        "createaccount-title": "Creatzione de unu contu pro {{SITENAME}}",
+       "login-abort-generic": "S'identificatzione tua est andada male - Iscontzada",
        "loginlanguagelabel": "Limba: $1",
        "createacct-another-realname-tip": "Su nomini beru pois fai de mancu de ddu ponni.\nSi sceberas de du ponni, at a essi imperau po arreconnosci a tui su traballu tuu.",
        "pt-login": "Intra",
        "pt-login-button": "Intra",
        "pt-createaccount": "Registra·ti",
        "pt-userlogout": "Essida",
+       "php-mail-error-unknown": "Errore disconnottu in sa funtzione mail() de PHP.",
+       "user-mail-no-addy": "As provadu a imbiare una email sena un indiritzu.",
        "changepassword": "Càmbia password",
+       "resetpass_announce": "Pro cumprire s'intrada, depes insertare una password noa.",
        "resetpass_header": "Càmbia sa password de su contu",
        "oldpassword": "Password betza:",
        "newpassword": "Password noa:",
        "retypenew": "Torra a iscrìere sa password noa:",
        "resetpass_submit": "Càmbia sa password e identifica·ti",
+       "changepassword-success": "Sa password tua est istada cambiada in manera currègida!",
        "resetpass_forbidden": "Non faghet a cambiare sa password",
        "resetpass-no-info": "Depes èsser identificadu pro abèrrer custa pàgina deretu.",
        "resetpass-submit-loggedin": "Càmbia password",
        "resetpass-submit-cancel": "Burra",
+       "resetpass-recycled": "Pro piaghere inserta una password noa chi siat diferente dae sa password tua de como.",
        "resetpass-temp-password": "Password temporànea:",
+       "resetpass-abort-generic": "Su càmbiu de sa password est istadu arreadu dae un'estensione.",
+       "resetpass-expired": "Sa password tua est iscadida. Pro piaghere inserta una password noa pro intrare.",
+       "resetpass-validity-soft": "Sa password password tua no est bàlida: $1\n\nPro piaghere issèbera una password noa como, o carca \"{{int:resetpass-submit-cancel}}\" pro lu fàghere prus a tardu.",
        "passwordreset": "Reseta sa password",
        "passwordreset-legend": "Reseta sa password",
-       "passwordreset-username": "Nùmene usuàriu",
+       "passwordreset-disabled": "Non si podent cambiare sas passwords in custa wiki.",
+       "passwordreset-emaildisabled": "Is funtzionalidades de email sunt istadas disabilitadas in custa wiki.",
+       "passwordreset-username": "Nùmene impitadore:",
+       "passwordreset-domain": "Domìniu:",
+       "passwordreset-capture": "Ammustrare su cuntènnidu de sa email?",
        "passwordreset-email": "Indiritzu email:",
-       "passwordreset-emailtitle": "Particulares de s'usuàriu in {{SITENAME}}",
+       "passwordreset-emailtitle": "Particulares de s'impitadore in {{SITENAME}}",
+       "passwordreset-emailelement": "Nùmene impitadore: $1\nPassword temporànea: $2",
        "changeemail": "Càmbia indiritzu email",
-       "changeemail-header": "Càmbia s'indirìtzu email de su contu",
        "changeemail-oldemail": "Indiritzu email atuale:",
        "changeemail-newemail": "Indiritzu email nou:",
        "changeemail-none": "(nudda)",
        "changeemail-password": "Sa password tua pro {{SITENAME}}:",
        "changeemail-submit": "Càmbia email",
-       "changeemail-cancel": "Annudda",
        "resettokens": "Reseta tokens",
-       "bold_sample": "Testu Grassu",
-       "bold_tip": "Testu Grassu",
-       "italic_sample": "Testu Cursivu",
-       "italic_tip": "Testu Cursivu",
-       "link_sample": "Tìtulu ligàmene",
-       "link_tip": "Ligàmene internu",
-       "extlink_sample": "http://www.example.com tìtulu de su ligàmene",
-       "extlink_tip": "Ligàmene a foras (amenta su prefissu http://)",
+       "resettokens-token-label": "$1 (valore atuale: $2)",
+       "bold_sample": "Testu grassu",
+       "bold_tip": "Testu grassu",
+       "italic_sample": "Testu cursivu",
+       "italic_tip": "Testu cursivu",
+       "link_sample": "Tìtulu ligòngiu",
+       "link_tip": "Ligòngiu internu",
+       "extlink_sample": "http://www.example.com tìtulu de su ligòngiu",
+       "extlink_tip": "Ligòngiu a foras (regorda su prefissu http://)",
        "headline_sample": "Testu de su tìtulu",
-       "headline_tip": "Tìtulu de su segundu livellu",
+       "headline_tip": "Tìtulu de su de duos livellu",
        "nowiki_sample": "Inserta su testu non-formatadu inoghe",
        "nowiki_tip": "Ignora sa formatatzione wiki",
        "image_sample": "Esèmpiu.jpg",
        "image_tip": "Incòrpora una pintura",
        "media_sample": "Esèmpiu.ogg",
-       "media_tip": "Ligàmene a unu file multimediale",
-       "sig_tip": "Firma cun data e ora",
+       "media_tip": "Ligòngiu a unu file multimediale",
+       "sig_tip": "Firma·ti cun data e ora",
        "hr_tip": "Lìnia orizontale (de impreare cun critèriu)",
        "summary": "Ogetu:",
        "subject": "Tema/tìtulu:",
        "minoredit": "Custu est unu càmbiu minore",
-       "watchthis": "Pone custa pàgina in sa watchlist mea",
-       "savearticle": "Sarva sa pàgina",
+       "watchthis": "Annota custa pàgina",
+       "savearticle": "Sarba sa pàgina",
        "preview": "Antiprima",
-       "showpreview": "Amosta s'antiprima",
-       "showdiff": "Amosta is càmbios",
-       "anoneditwarning": "'''Dae cara:''' Non ses identificadu (log in).\nS'indiritzu IP tuo at a èssere registradu in s'istòria de custa pàgina.",
+       "showpreview": "Ammustra s'antiprima",
+       "showdiff": "Ammustra is càmbios",
+       "anoneditwarning": "<strong>Atentzione:</strong> Non ses identificadu.\nS'indiritzu IP tuo at a èssere annòtidu si faghes unos cantos càmbios. Si <strong>idendificas</strong> tibe o <strong>[$2 creas unu contu]</strong>, is càmbios tuos ant a esser marcados cun su nùmene impitadore tuo, paris a àteros giuamentos.",
        "anonpreviewwarning": "''Non ses identificadu. Sarvende s'indiritzu IP tuo at a èssere registradu in s'istòria de sa pàgina.''",
        "missingcommenttext": "Inserta unu cummentu inoghe suta.",
        "summary-preview": "Antiprima ogetu:",
        "subject-preview": "Antiprima tema/tìtulu:",
-       "blockedtitle": "S'usuàriu est istadu bloccadu",
-       "blockedtext": "'''Custu nùmene usuàriu o indiritzu IP est stadu bloccadu.'''\n\nSu bloccu est stadu postu dae $1. Su motivu de su bloccu est: ''$2''\n\n* Su bloccu incumentzat: $8\n* Su bloccu scadit: $6\n* Intervallu de bloccu: $7\n\nSi boles, podes tzerriare $1 o un'àteru [[{{MediaWiki:Grouppage-sysop}}|amministradore]] pro faeddare de su bloccu.\n\nNota ca sa funtzione 'Ispedi un'e-mail a custu usuàriu' no est ativa ki no est stadu registradu un'indiritzu e-mail vàlidu in is [[Special:Preferences|preferèntzias]] tuas o ki s'usu de custa funtzione est stadu bloccadu.\n\nS'indiritzu IP atuale est $3, su nùmeru ID de su bloccu est #$5.\nPro praxere spetzìfica totu is particulares in antis in carche siat pregunta de acrarimentu.",
+       "blockedtitle": "S'impitadore est istadu bloccadu",
+       "blockedtext": "<strong>Custu nùmene impitadore o indiritzu IP est stadu bloccadu.</strong>\n\nSu bloccu est stadu postu dae $1.\nSu motivu de su bloccu est: <em>$2</em>.\n\n* Su bloccu incumentzat: $8\n* Su bloccu scadit: $6\n* Intervallu de bloccu: $7\n\nSi boles, podes tzerriare $1 o un'àteru [[{{MediaWiki:Grouppage-sysop}}|amministradore]] pro faeddare de su bloccu.\nNota ca sa funtzione 'Ispedi un'email a custu impitadore' no est ativa si no est istadu registradu un'indiritzu email vàlidu in is [[Special:Preferences|preferèntzias]] tuas o si s'impreu de custa funtzione est istadu arreadu.\nS'indiritzu IP atuale est $3, su nùmeru ID de su bloccu est #$5.\nPro praghere ispetzìfica totus is particulares in antis in cale siat pregonta de acrarimentu.",
        "blockednoreason": "perunu motivu inditadu",
+       "whitelistedittext": "Pro cambiare is pàginas $1.",
+       "nosuchsectiontitle": "Impossìbile agatare sa setzione",
+       "nosuchsectiontext": "Ses proande a modificare una setzione chi non esistit.\nDiat poder'èssere istada iscostiada o burrada cando che fias bidende sa pàgina.",
        "loginreqtitle": "Identificatzione rechesta",
        "loginreqlink": "identìfica·ti",
        "loginreqpagetext": "Depes èsser $1 pro bìer àteras pàginas.",
        "accmailtitle": "Password ispedida.",
+       "accmailtext": "Una password ingendrada a manera casuale pro [[User talk:$1|$1]] est istada imbiada a $2. Podet èssere cambiada in sa pàgina de <em>[[Special:ChangePassword|càmbiu password]]</em> a pustis de èssere intradu in su contu tuo.",
        "newarticle": "(Nou)",
-       "newarticletext": "Custa pàgina no esistit galu.\nPro creare sa pàgina, scrie in su box inoghe in bàsciu (abbàida sa [$1 pàgina de agiudu] pro àteras informatziones).\nSi ses intradu inoghe pro sbàlliu, carca in su browser tuo su butone '''back/indietro'''.",
-       "anontalkpagetext": "----''Custa est sa pàgina de cuntierra de unu usuàriu anònimu ki no at creadu unu account galu, o ki non dd'usat. Pro custu impreamus su nùmeru de indiritzos IP pro ddu identificare. Is indiritzos IP podent però èsser cundivìdidos dae unos cantos usuàrios. Si ses unu usuàriu anònimu e ritenes ki custos cummentos non sunt diretos a tue, pro praxere [[Special:UserLogin/signup|crea unu contu]] o [[Special:UserLogin|identifica·ti (log in)]] pro evitare cunfusione cun àteros usuàrios anònimos.''",
-       "noarticletext": "In custu momentu sa pàgina est bùida.\nPodes [[Special:Search/{{PAGENAME}}|chircare custu tìtulu]] in àteras pàginas, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chircare in is registros ligados] oppuru [{{fullurl:{{FULLPAGENAME}}|action=edit}} cambiare sa pàgina como]</span>.",
-       "userpage-userdoesnotexist": "Su contu de s'usuàriu \"<nowiki>$1</nowiki>\" no est stadu registradu.\nPro praxere abbàida si boles a sèriu creare/cambiare custa pàgina.",
-       "userpage-userdoesnotexist-view": "Su contu de s'usuàriu \"$1\" no est stadu registradu.",
+       "newarticletext": "Custa pàgina no esistit galu.\nPro creare sa pàgina, iscrie in sa casella a suta (càstia sa [$1 pàgina de agiudu] pro àteras informatziones).\nSi ses intradu inoghe pro isbàlliu, carca su butone <strong>back/indietro</strong> in su navigadore tuo.",
+       "anontalkpagetext": "----\n<em>Custa est sa pàgina de cuntierra de unu impitadore anònimu ki no at creadu unu contu galu, o ki non dd'usat.</em>\nPro custu impreamus su nùmeru de indiritzos IP pro ddu identificare. Is indiritzos IP podent perou èsser cundivìdidos dae unos cantos impitadores. Si ses unu impitadore anònimu e ritenes ki custos cummentos non sunt diretos a tue, pro praxere [[Special:UserLogin/signup|crea unu contu]] o [[Special:UserLogin|identifica·ti (log in)]] pro evitare cunfusione cun àteros impitadore anònimos.''",
+       "noarticletext": "In custu momentu sa pàgina est bùida.\nPodes [[Special:Search/{{PAGENAME}}|chircare custu tìtulu]] in àteras pàginas, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chircare in is registros ligados] o puru [{{fullurl:{{FULLPAGENAME}}|action=edit}} modificare sa pàgina]</span>.",
+       "noarticletext-nopermission": "In custu tempu sa pàgina rechesta est bùida.\nPodes [[Special:Search/{{PAGENAME}}|chircare custu tìtulu]] in is àteras pàginas, o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chircare in is regìstros ligados]</span>, ma non tenes su permissu de creare custa pàgina.",
+       "userpage-userdoesnotexist": "Su contu de s'impitadore \"<nowiki>$1</nowiki>\" no est stadu registradu.\nPro praxere abbàida si boles a sèriu creare/cambiare custa pàgina.",
+       "userpage-userdoesnotexist-view": "Su contu de s'impitadore \"$1\" no est stadu registradu.",
+       "blocked-notice-logextract": "{{GENDER:.|Custu impitadore|Custa impitadora}} est {{GENDER:.|arreadu|arreada}}.\nS'ùrtimu elementu de su registru de sos arreamentos est marcadu inoghe in suta pro referèntzia:",
+       "usercssyoucanpreview": "<strong>Consìgiu:</strong> Imprea su butone \"{{int:showpreview}}\" pro testare su CSS nou in antis de sarvare.",
+       "userjsyoucanpreview": "<strong>Consìgiu:</strong> Imprea su butone \"{{int:showpreview}}\" pro testare su tuo JavaScript nou in antis de sarvare.",
+       "usercsspreview": "<strong>Ammentadi chi ses petzi bidende s'antiprima de su CSS impitadore tuo.\nNo est istadu galu sarbadu!</strong>",
+       "userjspreview": "<strong>Ammentadi chi ses petzi collaudande/bidende s'antiprima de su CSS impitadore tuo.\nNo est istadu galu sarbadu!</strong>",
+       "sitecsspreview": "<strong>Ammentadi chi ses petzi bidende s'antiprima de custu CSS.\nNo est istadu galu sarbadu!</strong>",
+       "sitejspreview": "<strong>Ammentadi chi ses petzi bidende s'antiprima de custu còdighe JavaScript.\nNo est istadu galu sarbadu!</strong>",
        "updated": "(Atualizadu)",
        "note": "'''Nota:'''",
        "previewnote": "<strong>Regorda·ti ca custa est feti una ANTIPRIMA.</strong>\nIs mudàntzias tuas non sunt galu sarbadas!",
-       "continue-editing": "Bae a s'àrea de acontzu",
+       "continue-editing": "Bae a s'àrea de modìfica",
        "previewconflict": "Custa antiprima rapresentat su testu in s'àrea acontzu testu de susu comente at a pàrrer si dda sarbas.",
        "editing": "Cambiende $1",
        "creating": "Creande $1",
        "editingsection": "Cambiende $1 (setzione)",
-       "editingcomment": "Acontzu de $1 (setzione noa)",
+       "editingcomment": "Modìfica de $1 (setzione noa)",
        "editconflict": "Cunflitu de editzione: $1",
-       "explainconflict": "Calicunu àteru at acontzadu custa pàgina in su tempus ki dda fias acontzende tue.\nS'àrea de testu de susu cuntènnet su testu de sa pàgina in sa forma atuale.\nIs mudàntzias tuas sunt ammustradas in s'àrea de testu de bàsciu.\nAs a dèper insertare is mudàntzias tuas in su testu atuale, e pro custu a ddas scrìer in s'àrea de susu.\n'''Solu''' su testu in s'àrea de susu at a èsser sarbadu si carcas su butone \"{{int:savearticle}}\".",
+       "explainconflict": "Calicunu àteru at cambiadu custa pàgina in su tempus chi dda fias cambiende tue.\nS'àrea de testu de susu cuntènnet su testu de sa pàgina in sa forma atuale.\nIs mudàntzias tuas sunt ammustradas in s'àrea de testu in suta.\nAs a dèper insertare is mudàntzias tuas in su testu atuale, e pro custu a ddas iscrìer in s'àrea de susu.\n<strong>Solu</strong> su testu in s'àrea de susu at a èsser sarbadu si carcas su butone \"{{int:savearticle}}\".",
        "yourtext": "Su testu tuo",
        "storedversion": "Revisione in archìviu",
-       "editingold": "'''ATENTZIONE: Ses acontzende una revisione non-agiornada de sa pàgina.'''\nSi dda sarbas de aici, totu is acontzos fatos a pustis de custa revisione ant a bènner pèrdidos pro semper.",
+       "editingold": "<strong>Atentzione: Ses cambiende una versione non-agiornada de sa pàgina.</strong>\nSi dda sarbas de aici, totus is càmbios fatos a pustis de custa versione ant a bènnere pèrdidos pro semper.",
        "yourdiff": "Diferèntzias",
-       "copyrightwarning": "Abbàida, pro praxere, ki totu is contributziones a {{SITENAME}} sunt cunsideradas lassadas a suta permissu de tipu $2 (càstia $1 pro nde schire de prus). Si non keris ki su scritu tuo potzat èsser acontzadu e re-distribuidu dae kie si siat sena piedade e sena àteros lìmites, non ddu imbies a {{SITENAME}}.<br />\nCun s'imbiu de custu scritu ses garantende, a responsabilidade tua, si su scritu ddu as cumpostu tue de persona e in originale, o puru si est stadu copiadu dae una fonte de domìniu pùblicu, o una fonte de gasi, o puru si as otentu permissu craru de impreare custu scritu e si ddu podes dimustrare. '''NO IMPREARE MATERIALE COBERTU DAE DERETU DE AUTORE SENA PERMISSU CRARU!'''",
+       "copyrightwarning": "Abbàida, pro praghere, chi totus is contributos a {{SITENAME}} sunt cunsideradas lassadas a suta permissu de tipu $2 (càstia $1 pro nde ischire de prus). Si non boles chi s'iscritu tuo potzat èssere cambiadu e re-distribuidu dae chie si siat sena piedade e sena àteros lìmites, non ddu insartas inoghe.<br />\nCun s'imbiu de custu iscritu ses garantende, a responsabilidade tua, si su iscritu ddu as cumpostu tue de persone e in originale, o puru si est istadu copiadu dae una fonte de domìniu pùblicu, o una fonte de gasi, o puru si as otentu permissu craru de impreare custu iscritu e si ddu podes dimustrare. <strong>No impreare materiale cobertu dae deretu de autore sena permissu craru!</strong>",
+       "titleprotectedwarning": "<strong>Atentzione: Custa pàgina est istada amparada pro fàghere in modu chi ant a serbire [[Special:ListGroupRights|deretos dislindados]] pro la creare.</strong>\nS'ùrtimu elementu de su registru est marcadu inoghe in suta pro referèntzia:",
        "templatesused": "{{PLURAL:$1|Template impreadu|Templates impreados}} in custa pàgina:",
        "templatesusedpreview": "{{PLURAL:$1|Template impreadu|Templates impreados}} in custa antiprima:",
        "templatesusedsection": "{{PLURAL:$1|Template impreadu|Templates impreados}} in custa setzione:",
-       "template-protected": "(amparadu)",
-       "template-semiprotected": "(mesu-amparadu)",
+       "template-protected": "(bardadu)",
+       "template-semiprotected": "(mesu-bardadu)",
        "hiddencategories": "Custa pàgina faghet parte de {{PLURAL:$1|1 categoria cuada|$1 categorias cuadas}}:",
+       "nocreatetext": "{{SITENAME}} at limitadu sa possibilidade de creare pàginas noas a sos impitadores registrados.\nPodes torrare in segus e modificare una pàgina esistente, o puru [[Special:UserLogin|intrare in su contu tuo o creare unu contu nou]].",
        "nocreate-loggedin": "Non tenes su permissu de creare pàginas noas.",
+       "sectioneditnotsupported-title": "Modìfica de sas setziones non suportada",
+       "sectioneditnotsupported-text": "Modìfica de sas setziones non suportada in custa pàgina.",
        "permissionserrors": "Faddina de permissos",
-       "permissionserrorstext-withaction": "Non tenes su permissu de $2, pro {{PLURAL:$1|custu motivu|custus motivus}}:",
-       "moveddeleted-notice": "Custa pàgina est istada fuliada.\nSu registru de is fuliaduras e moviduras de sa pàgina est ammustradu pro informatzione.",
+       "permissionserrorstext": "Non tenes su permissu pro lu fàghere, pro {{PLURAL:$1|custa resone|custas resones}}:",
+       "permissionserrorstext-withaction": "Non tenes su permissu de $2, pro {{PLURAL:$1|custu motivu|custos motivos}}:",
+       "recreate-moveddeleted-warn": "<strong>Atentzione: Ses torrende a creare una pàgina chi est istada giai burrada.</strong>\n\nSinchera·ti chi siat pretzisu a sighire cambiende custa pàgina.\nSu registru de is burraduras e moviduras pro custa pàgina benit giùghedu inoghe:",
+       "moveddeleted-notice": "Custa pàgina est istada burrada.\nSu registru de is burraduras e moviduras de sa pàgina est ammustradu pro informatzione.",
        "log-fulllog": "Abbista su registru intreu",
+       "edit-hook-aborted": "Sa modìfica est istada annuddada dae su hook de s'estensione.\nNo est istadu datu acrarimentu.",
+       "edit-gone-missing": "Impossìbile agiornare sa pàgina.\nParet chi siat istada burrada.",
        "edit-conflict": "Cunflitu de editzione.",
+       "edit-no-change": "Su càmbiu tuo est istadu innoradu proite non b'est istada modìfica peruna a su testu.",
        "postedit-confirmation-created": "Sa pàgina est stada creada",
        "postedit-confirmation-restored": "Sa pàgina est stada restaurada",
-       "postedit-confirmation-saved": "S'acontzu tuo est stadu sarbadu",
+       "postedit-confirmation-saved": "Su càmbiu tuo est istadu sarbadu.",
+       "edit-already-exists": "No est possìbile creare una pàgina noa.\nEsistit giai.",
+       "defaultmessagetext": "Testu de su messàgiu predeterminadu",
+       "invalid-content-data": "Datos de cuntènnidu invàlidos",
+       "content-not-allowed-here": "Cuntènnidu a manera \"$1\" no adduidu in sa pàgina [[$2]]",
+       "editwarning-warning": "S'essida dae custa pàgina diat pòdere cajonare sa pèrdida de totus sos càmbios chi as fatu.\nSi ses autentificadu, podes disabilitare custu avisu in sa setzione \"{{int:prefs-editing}}\" de sas preferèntzias tuas.",
+       "editpage-notsupportedcontentformat-title": "Formadu de càbidu non suportadu",
        "content-model-wikitext": "wikitestu",
+       "content-model-text": "testu normale",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "viewpagelogs": "Càstia sos registros de custa pàgina",
+       "post-expand-template-inclusion-category": "Pàginas in is cale sa dimensione templates inclùdidos propassat su lìmite cunsentidu",
+       "post-expand-template-argument-category": "Pàginas cuntenentes templates cun argumentos fartados",
+       "cantcreateaccounttitle": "Non si podet creare unu contu",
+       "viewpagelogs": "Càstia is registros de custa pàgina",
        "nohistory": "Non b'est sa stòria de is acontzos pro custa pàgina.",
        "currentrev": "Revisione currente",
        "currentrev-asof": "Versione currente de is $1",
        "revisionasof": "Revisione de is $1",
        "revision-info": "Revisione de su $4 a is $5 de {{GENDER:$6|$2}}$7",
-       "previousrevision": "← Acontzu in antis",
-       "nextrevision": "Acontzu in fatu →",
-       "currentrevisionlink": "Revisione currente",
+       "previousrevision": "← Versione in segus",
+       "nextrevision": "Versione in antis →",
+       "currentrevisionlink": "Revisione atuale",
        "cur": "curr",
        "next": "in fatu",
-       "last": "ant",
+       "last": "pre",
        "page_first": "prima",
        "page_last": "ùrtima",
-       "histlegend": "Cunfrontu intre versiones: sebera sa casella de sa versione ki boles e carca \"Invio\" o su butone in bàsciu.<br />\nCosas de ammentare: '''({{int:cur}})''' = diferèntzias cun sa versione currente,\n'''({{int:last}})''' = diferèntzias cun sa versione in antis, '''{{int:minoreditletter}}''' = acontzu minore.",
-       "history-fieldset-title": "Sfògia sa stòria",
-       "history-show-deleted": "Petzi borrados",
+       "histlegend": "Cunfrontu intre versiones: Marca sa casella de sa versione chi boles e carca \"Invio\" o su butone in bàsciu.<br />\nCosas de ammentare: <strong>({{int:cur}})</strong> = diferèntzias cun sa versione atuale,\n<strong>({{int:last}})</strong> = diferèntzias cun sa versione pretzedente, <strong>{{int:minoreditletter}}</strong> = càmbiu minore.",
+       "history-fieldset-title": "Isfògia s'istòria",
+       "history-show-deleted": "Feti is burrados",
        "histfirst": "prima",
        "histlast": "ùrtima",
        "historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
        "historyempty": "(bùida)",
+       "history-feed-title": "Istòria de is revisiones",
+       "history-feed-description": "Istòria de is revisiones de sa pàgina in custa wiki",
        "history-feed-item-nocomment": "$1 su $2",
+       "rev-deleted-user": "(nùmene impitadore bogadu)",
+       "rev-deleted-unhide-diff": "Una de is versiones de custa cumparàntzia tra versiones est istada <strong>burrada</strong>.\nConsulta su [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} registru de is burraduras] pro àteros particulares.\nIs amministradores podent galu [$1 bìdere sa cumparàntzia] si est netzessàriu.",
        "rev-delundel": "ammustra/cua",
        "rev-showdeleted": "ammustra",
+       "revisiondelete": "Burra o reimprea versiones",
+       "revdelete-no-file": "Su documentu ispetzuficadu no esistit",
        "revdelete-show-file-submit": "Eja",
+       "revdelete-selected-text": "{{PLURAL:$1|Versione seletzionada|Versiones seletzionadas}} de [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Versione seletzionada|Versiones seletzionadas}} de su documentu [[:$2]]:",
+       "logdelete-selected": "{{PLURAL:$1|Acadessimentu de su registru seletzionadu|Acadessimentos de su registru seletzionadu}}:",
+       "revdelete-hide-text": "Testu de sa versione",
+       "revdelete-hide-image": "Cua su cuntènnidu de su documentu",
+       "revdelete-hide-comment": "Modìfica s'ogetu",
+       "revdelete-radio-same": "(non cambiare)",
        "revdelete-radio-set": "Cua",
+       "revdelete-radio-unset": "Ammustra",
        "revdelete-log": "Motivu:",
-       "revdel-restore": "Muda sa visibilidade",
+       "revdelete-submit": "Àplica a {{PLURAL:$1|sa versione seletzionada|is versiones seletzionadas}}",
+       "revdel-restore": "càmbia sa visibilidade",
        "pagehist": "Istòria de sa pàgina",
        "deletedhist": "Istòria fuliada",
+       "revdelete-otherreason": "Motivu diversu o agiuntivu:",
        "revdelete-reasonotherlist": "Àteru motivu",
+       "revdelete-edit-reasonlist": "Càmbia su motivu de sa burradura",
+       "revdelete-offender": "Autore de sa versione:",
        "mergehistory-from": "Pàgina de orìgine:",
        "mergehistory-into": "Pàgina de destinatzione:",
        "mergehistory-no-source": "Sa pàgina de orìgine $1 no esistit.",
        "mergehistory-reason": "Motivu:",
        "revertmerge": "Iscontza s'unione",
        "history-title": "$1: Istòria de is revisiones",
+       "difference-title": "$1: diferèntzias tra is versiones",
+       "difference-title-multipage": "\"$1\" e \"$2\": diferèntzias tra is pàginas",
+       "difference-multipage": "(Diferèntzias intre pàginas)",
        "lineno": "Lìnia $1:",
        "compareselectedversions": "Cumpara versiones scioberadas",
-       "editundo": "annulla",
+       "editundo": "annudda",
+       "diff-empty": "(Diferèntzia peruna)",
        "searchresults": "Resurtados de sa chirca",
        "searchresults-title": "Resurtados pro sa chirca de \"$1\"",
        "titlematches": "Currispondèntzias in su tìtulu de s'artìculu",
        "textmatches": "Currispondèntzias in su testu de s'artìculu",
        "notextmatches": "Peruna currispondèntzia in su testu de s'artìculu",
-       "prevn": "{{PLURAL:$1|cabudianu|cabudianos $1}}",
+       "prevn": "{{PLURAL:$1|pretzedente|pretzedentes $1}}",
        "nextn": "{{PLURAL:$1|imbeniente|imbenientes $1}}",
+       "prevn-title": "{{PLURAL:$1|Resurtadu pretzedente|$1 resurtados pretzedentes}}",
+       "nextn-title": "{{PLURAL:$1|Resurtadu imbeniente|$1 resurtados imbenientes}}",
        "shown-title": "Ammustra $1 {{PLURAL:$1|resurtadu|resurtados}} pro pàgina",
        "viewprevnext": "Càstia ($1 {{int:pipe-separator}} $2) ($3).",
-       "searchprofile-articles": "Pàginas de càbidu",
+       "searchmenu-exists": "<strong>Ddu est una pàgina tzerriada \"[[:$1]]\" in custa wiki.</strong> {{PLURAL:$2|0=|Càstia puru is àteros resurtados de sa chirca.}}",
+       "searchmenu-new": "<strong>Crea sa pàgina \"[[:$1]]\" in custa wiki!</strong> {{PLURAL:$2|0=|Càstia fintzas sa pàgina agatada cun sa chirca tua|Càstia fintzas is resurtados de sa chirca}}",
+       "searchprofile-articles": "Pàginas de càbidos",
        "searchprofile-images": "Multimèdia",
-       "searchprofile-everything": "Totu",
+       "searchprofile-everything": "Totue",
        "searchprofile-advanced": "Avantzada",
        "searchprofile-articles-tooltip": "Chirca in $1",
        "searchprofile-images-tooltip": "Chirca files",
-       "search-result-size": "$1 ({{PLURAL:$2|1 faeddu|$2 faeddos}})",
-       "search-redirect": "(redirect $1)",
+       "searchprofile-everything-tooltip": "Chirca in totue (inclùdidas is pàginas de cuntierra)",
+       "searchprofile-advanced-tooltip": "Chirca in nùmene-logos personalizados",
+       "search-result-size": "$1 ({{PLURAL:$2|1 paràula|$2 paràulas}})",
+       "search-result-category-size": "{{PLURAL:$1|1 membru|$1 membros}} ({{PLURAL:$2|1 sutacategoria|$2 sutacategorias}}, {{PLURAL:$3|1 documentu|$3 documentos}})",
+       "search-redirect": "(reindiritzadu $1)",
        "search-section": "(setzione $1)",
        "search-suggest": "Fortzis fias chirchende: $1",
        "search-interwiki-caption": "Progetos frades",
        "search-interwiki-more": "(àteru)",
        "searchall": "totu",
        "showingresults": "Inoghe sighende {{PLURAL:$1|benit ammustradu '''1''' resurtadu|benint ammustrados '''$1''' resurtados}} incumentzende dae su nùmeru '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Resultadu '''$1''' de '''$3'''|Resultadus '''$1 - $2''' de '''$3'''}} pro '''$4'''",
+       "search-nonefound": "Sa chirca no at prodùidu resurtados.",
        "powersearch-legend": "Chirca delantada",
        "powersearch-ns": "Chirca in su nùmene-logu:",
        "powersearch-togglelabel": "Seletziona:",
        "powersearch-toggleall": "Totu",
        "powersearch-togglenone": "Nudda",
        "preferences": "Preferèntzias",
-       "mypreferences": "Preferèntzias meas",
+       "mypreferences": "Preferèntzias mias",
        "prefs-edits": "Nùmeru de acontzos:",
        "prefs-skin": "Bisura",
        "skin-preview": "Antiprima",
+       "datedefault": "Peruna preferèntzia",
+       "prefs-user-pages": "Paginas impitadore",
        "prefs-personal": "Datos personales",
        "prefs-rc": "Ùrtimas mudàntzias",
        "prefs-watchlist": "Watchlist",
+       "prefs-watchlist-days-max": "Màssimu $1 {{PLURAL:$1|die|dies}}",
+       "prefs-watchlist-edits-max": "Cantidade màssima: 1000",
        "prefs-misc": "Àteras preferèntzias",
        "prefs-resetpass": "Càmbia password",
-       "saveprefs": "Sarva preferèntzias",
-       "prefs-editing": "Box de acontzadura",
+       "prefs-changeemail": "Càmbia indiritzu email",
+       "prefs-setemail": "Imposta un'indiritzu email",
+       "prefs-email": "Sèberos pro sa email",
+       "prefs-rendering": "Aparèntzia",
+       "saveprefs": "Sarba",
+       "restoreprefs": "Restàura totus is sèberos predefinidos (in totus is setziones)",
+       "prefs-editing": "Casella de modìfica",
        "rows": "Lìnias:",
        "columns": "Colunnas:",
        "searchresultshead": "Chirca",
+       "stub-threshold": "Valore mìnimu pro is <a href=\"#\" class=\"stub\">ligòngios a is abotzos</a>, in bytes:",
        "stub-threshold-disabled": "Disativadu",
+       "recentchangesdays": "Dies de ammustrare in ùrtimas mudàntzias:",
+       "recentchangesdays-max": "Màssimu $1 {{PLURAL:$1|die|dies}}",
        "recentchangescount": "Nùmeru de acontzos de amostare pro definidura:",
        "savedprefs": "Is preferèntzias tuas sunt stadas sarbadas.",
        "timezonelegend": "Zona de oràriu:",
        "timezoneregion-antarctica": "Antàrtide",
        "timezoneregion-arctic": "Àrtide",
        "timezoneregion-asia": "Àsia",
+       "timezoneregion-atlantic": "Otzèanu Atlànticu",
        "timezoneregion-australia": "Austràlia",
        "timezoneregion-europe": "Europa",
+       "timezoneregion-indian": "Otzèanu Indianu",
+       "timezoneregion-pacific": "Otzèanu Patzìficu",
        "prefs-searchoptions": "Chirca",
        "prefs-namespaces": "Nùmene-logos",
+       "default": "predefinidu",
        "prefs-files": "Files",
-       "youremail": "E-mail:",
-       "username": "{{GENDER:$1|Nùmene usuàriu}}:Nùmene usuàriu",
+       "prefs-emailconfirm-label": "Cunfirma de sa email:",
+       "youremail": "Email:",
+       "username": "{{GENDER:$1|Nùmene impitadore}}:",
        "prefs-registration": "Ora de registratzione:",
        "yourrealname": "Nùmene beru:",
        "yourlanguage": "Limba:",
        "yournick": "Sa firma tua:",
-       "yourgender": "Natura:",
-       "gender-unknown": "Non spetzificadu",
-       "gender-male": "Mascu",
-       "gender-female": "Fèmina",
+       "yourgender": "Comente preferes a ti descrir?",
+       "gender-unknown": "Preferu a no ddu narrer",
+       "gender-male": "Issu càmbiat pàginas wiki",
+       "gender-female": "Issa càmbiat pàginas wiki",
        "email": "E-mail",
-       "prefs-info": "Informatzione bàsica",
+       "prefs-info": "Informatziones de base",
        "prefs-signature": "Firma",
        "prefs-dateformat": "Formadu data",
        "prefs-advancedediting": "Sèberos generales",
        "prefs-advancedwatchlist": "Sèberos avantzados",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Diferèntzias",
-       "userrights-user-editname": "Inserta unu nùmene usuàriu:",
-       "editinguser": "Cambiamentu de is deretos usuàriu de s'usuàriu <strong>[[User:$1|$1]]</strong> $2",
+       "userrights-user-editname": "Inserta unu nùmene impitadore:",
+       "editinguser": "Cambiamentu de is deretos impitadore de s'impitadore <strong>[[User:$1|$1]]</strong> $2",
+       "userrights-editusergroup": "Cambiare is grupos de impitadores",
+       "userrights-groupsmember": "Membru de:",
        "userrights-reason": "Motivu:",
        "userrights-irreversible-marker": "$1*",
        "group": "Grupu:",
-       "group-user": "Usuàrios",
-       "group-autoconfirmed": "Usuàrios autocunfirmadus",
+       "group-user": "Impitadores",
+       "group-autoconfirmed": "Impitadores autocunfirmadus",
        "group-bot": "Bots",
        "group-sysop": "Amministradores",
        "group-bureaucrat": "Buròcrates",
+       "group-suppress": "Tzensores",
        "group-all": "(totus)",
-       "group-user-member": "{{GENDER:$1|usuàriu}}",
-       "group-autoconfirmed-member": "{{GENDER:$1|usuàrios autocunfirmados}}",
+       "group-user-member": "{{GENDER:$1|impitadore}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|impitadores autocunfirmados}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
-       "group-sysop-member": "{{GENDER:$1|aministradore}}",
+       "group-sysop-member": "{{GENDER:$1|amministradore}}",
        "group-bureaucrat-member": "{{GENDER:$1|buròcrate}}",
+       "group-suppress-member": "{{GENDER:$1|tzensore}}",
        "grouppage-user": "{{ns:project}}:Usuàrios",
        "grouppage-autoconfirmed": "{{ns:project}}:Usuàrios autocunfirmadus",
        "grouppage-bot": "{{ns:project}}:Bots",
        "grouppage-sysop": "{{ns:project}}:Amministradores",
        "grouppage-bureaucrat": "{{ns:project}}:Burocrates",
+       "grouppage-suppress": "{{ns:project}}:Tzensore",
        "right-read": "Lègere pàginas",
        "right-edit": "Cambiare pàginas",
+       "right-createpage": "Creare pàginas (chi non siant pàgina de cuntierra)",
+       "right-createtalk": "Creare pàginas de cuntierra",
+       "right-createaccount": "Creare contos de impitadores noos",
+       "right-minoredit": "Marcare su càmbiu che minore",
        "right-move": "Mòver pàginas",
        "right-move-subpages": "Mòvere pàginas cun is suta-pàginas issoru",
-       "right-move-rootuserpages": "Mòvere is pàginas base de is usuàrios",
+       "right-move-rootuserpages": "Mòvere is pàginas base de is impitadores",
+       "right-move-categorypages": "Mòvere pàginas de categorias",
        "right-movefile": "Mòvere files",
        "right-upload": "Carrigare files",
        "right-reupload": "Subra-iscrìere files esistentes",
        "right-delete": "Fuliare pàginas",
        "right-browsearchive": "Chircare pàginas fuliadas",
        "right-undelete": "Restaurare una pàgina",
+       "right-suppressionlog": "Càstia is registros privados",
        "right-siteadmin": "Bloccare e sbloccare su database",
-       "newuserlogpage": "Usuàrios nous",
-       "rightslog": "Deretos de is usuàrios",
+       "newuserlogpage": "Impitadores nous",
+       "rightslog": "Deretos de is impitadores",
        "action-read": "lègher custa pàgina",
        "action-edit": "cambiare custa pàgina",
        "action-createpage": "creare pàginas",
        "action-move": "mòvere custa pàgina",
        "action-movefile": "mòvere custu file",
+       "action-upload": "carriga custu archìviu",
        "action-delete": "burrare custa pàgina",
        "action-browsearchive": "chircare pàginas fuliadas",
+       "action-sendemail": "imbiare emails",
+       "action-editmywatchlist": "cambiare sa lista de is pàginas annotadas tua",
+       "action-viewmywatchlist": "castiare sa lista de pàginas annotadas tua",
+       "action-viewmyprivateinfo": "castiare is informatzione privadas tuas",
+       "action-editmyprivateinfo": "cambiare is informatziones privadas tuas",
        "nchanges": "$1 {{PLURAL:$1|mudàntzia|mudàntzias}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|dae s'ùrtima bisita}}",
+       "enhancedrc-history": "istòria",
        "recentchanges": "Ùrtimas mudàntzias",
-       "recentchanges-legend": "Possibilidades subra ùrtimas mudàntzias",
-       "recentchanges-feed-description": "Custu feed riportada is ùrtimas mudàntzias a is cuntènnidos de su giassu.",
-       "recentchanges-label-newpage": "Custu acontzu at creadu una pàgina noa",
-       "recentchanges-label-minor": "Custu est unu acontzu minore",
-       "recentchanges-label-bot": "Custu acontzu est stadu fatu dae unu bot",
+       "recentchanges-legend": "Optziones subra ùrtimas mudàntzias",
+       "recentchanges-summary": "Sighi is ùrtimas mudàntzias a sa wiki in custa pàgina.",
+       "recentchanges-feed-description": "Sighi is ùrtimas mudàntzias a sa wiki cun custu feed.",
+       "recentchanges-label-newpage": "Custu càmbiu at creadu una pàgina noa",
+       "recentchanges-label-minor": "Custu est unu càmbiu minore",
+       "recentchanges-label-bot": "Custu càmbiu est istadu fatu dae unu bot",
+       "recentchanges-label-unpatrolled": "Custu càmbiu no est istadu cumprobadu",
+       "recentchanges-label-plusminus": "Sa muda de sa mannesa de sa pàgina dae su nùmeru de bytes",
+       "recentchanges-legend-heading": "'''Legenda:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (càstia [[Special:NewPages|is pàginas noas]])",
-       "rcnotefrom": "{{PLURAL:$5|Sa chi sighit est sa mudàntzia|Sas chi sighint sunt sas mudàntzias}} dae <strong>$3, $4</strong> (amostadas fintzas a <strong>$1</strong>).",
+       "rcnotefrom": "{{PLURAL:$5|Sa chi sighit est sa mudàntzia|Is chi sighint sunt is mudàntzias}} dae <strong>$3, $4</strong> (ammustradas fintzas a <strong>$1</strong>).",
        "rclistfrom": "Ammustra mudàntzias dae $3 $2",
-       "rcshowhideminor": "$1 acontzos minores",
-       "rcshowhideminor-show": "Amosta",
+       "rcshowhideminor": "$1 is càmbios minores",
+       "rcshowhideminor-show": "Ammustra",
        "rcshowhideminor-hide": "Cua",
-       "rcshowhidebots": "$1 bots",
-       "rcshowhidebots-show": "Amosta",
+       "rcshowhidebots": "$1 is bots",
+       "rcshowhidebots-show": "Ammustra",
        "rcshowhidebots-hide": "Cua",
-       "rcshowhideliu": "$1 usuàrios registrados",
-       "rcshowhideliu-show": "Amosta",
+       "rcshowhideliu": "$1 is impitadores identificados",
+       "rcshowhideliu-show": "Ammustra",
        "rcshowhideliu-hide": "Cua",
-       "rcshowhideanons": "$1 usuàrios anònimos",
-       "rcshowhideanons-show": "Amosta",
+       "rcshowhideanons": "$1 is impitadores anònimos",
+       "rcshowhideanons-show": "Ammustra",
        "rcshowhideanons-hide": "Cua",
-       "rcshowhidepatr-show": "Amosta",
+       "rcshowhidepatr": "$1 càmbios cumprobados",
+       "rcshowhidepatr-show": "Ammustra",
        "rcshowhidepatr-hide": "Cua",
-       "rcshowhidemine": "$1 acontzos meos",
-       "rcshowhidemine-show": "Amosta",
+       "rcshowhidemine": "$1 is càmbios mios",
+       "rcshowhidemine-show": "Ammustra",
        "rcshowhidemine-hide": "Cua",
        "rclinks": "Ammustra is ùrtimas $1 mudàntzias fatas in is ùrtimas $2 dies<br />$3",
        "diff": "dif",
        "rc_categories_any": "Calesisiat",
        "rc-change-size": "$1",
        "newsectionsummary": "/* $1 */ setzione noa",
-       "rc-enhanced-expand": "Amosta particulares",
+       "rc-enhanced-expand": "Ammustra particulares",
        "rc-enhanced-hide": "Cua particulares",
        "recentchangeslinked": "Mudàntzias ligadas",
        "recentchangeslinked-feed": "Mudàntzias ligadas",
        "recentchangeslinked-toolbox": "Mudàntzias ligadas",
        "recentchangeslinked-title": "Mudàntzias ligadas a \"$1\"",
-       "recentchangeslinked-summary": "Custa est una lista de is mudàntzias fatas dae pagu a is pàginas ligadas a cussa spetzificada.\nIs pàginas de sa [[Special:Watchlist|watchlist tua]] sunt in '''grassu'''.",
+       "recentchangeslinked-summary": "Custa est una lista de is mudàntzias fatas dae pagu a is pàginas ligadas a cussa spetzificada.\nIs pàginas [[Special:Watchlist|annotadas dae tue]] sunt in <strong>grassu</strong>.",
        "recentchangeslinked-page": "Nùmene pàgina:",
        "recentchangeslinked-to": "Ammustra feti mudàntzias a pàginas ligadas a cussa spetzificada",
-       "upload": "Càrriga file",
-       "uploadbtn": "Càrriga file",
+       "upload": "Càrriga documentu",
+       "uploadbtn": "Càrriga documentu",
        "reuploaddesc": "Torra a su mòdulu pro su carrigamentu.",
        "uploadnologin": "Non ses intrau",
        "uploadnologintext": "Depes èsser $1 pro carrigare files.",
        "filereuploadsummary": "Mudàntzias a su file:",
        "filesource": "Orìgine:",
        "badfilename": "Su nùmene de su file est stadu cunvertidu in \"$1\".",
+       "illegal-filename": "Su nùmene de su documentu no est adduidu.",
+       "overwrite": "Remplasare unu documentu esistente no est adduidu.",
        "uploadwarning": "Avvisu de carrigamentu",
-       "savefile": "Sarva file",
+       "savefile": "Sarba documentu",
        "upload-source": "File de orìgine",
        "sourcefilename": "Nùmene de su file de orìgine:",
        "sourceurl": "Diretzione originària:",
        "destfilename": "Nùmene de su file de destinatzione:",
        "upload-description": "Descritzione de su file",
+       "upload-options": "Optziones de carrigamentu",
+       "watchthisupload": "Annota custu documentu",
        "upload-success-subj": "Carrigamentu acabau",
+       "upload-failure-subj": "Problema de carrimentu",
+       "upload-warning-subj": "Avisu de carrigamentu",
        "upload-file-error": "Faddina a intru",
-       "license": "Licèntzia:",
-       "license-header": "Licèntzia",
+       "backend-fail-notexists": "Su documentu $1 no esistit.",
+       "backend-fail-alreadyexists": "Su documentu \"$1\" esistit giai.",
+       "uploadstash": "Càrriga stash",
+       "img-auth-nofile": "Su File \"$1\" no esistit.",
+       "img-auth-streaming": "Letura currente de \"$1\".",
+       "license": "Litzèntzia:",
+       "license-header": "Litzèntzia",
+       "nolicense": "Nisciuna litzèntzia indicada",
+       "licenses-edit": "Càmbia su sèberu de sa licèntzia",
        "upload_source_file": "(su file seberadu in su computer tuo)",
+       "listfiles-delete": "Cantzella",
+       "listfiles_search_for": "Chirca figuras pro nùmene:",
        "imgfile": "file",
        "listfiles": "Lista de is files",
+       "listfiles_thumb": "Miniatura",
        "listfiles_date": "Data",
        "listfiles_name": "Nùmene",
-       "listfiles_user": "Usuàriu",
+       "listfiles_user": "Impitadore",
        "listfiles_size": "Mannesa in byte",
        "listfiles_description": "Descritzione",
        "listfiles_count": "Versiones",
+       "listfiles-latestversion": "Versione atuale",
+       "listfiles-latestversion-yes": "Eja",
+       "listfiles-latestversion-no": "No",
        "file-anchor-link": "File",
        "filehist": "Stòria de su file",
        "filehist-help": "Carca unu grupu data/ora pro castiare su file comente si presentada in su tempus indicadu.",
        "filehist-deleteall": "fùlia totu",
        "filehist-deleteone": "cantzella",
        "filehist-revert": "fùrria",
-       "filehist-current": "currente",
+       "filehist-current": "atuale",
        "filehist-datetime": "Data/Ora",
        "filehist-thumb": "Miniatura",
        "filehist-thumbtext": "Miniatura de sa versione de is $1",
        "filehist-nothumb": "Peruna miniatura",
-       "filehist-user": "Usuàriu",
+       "filehist-user": "Impitadore",
        "filehist-dimensions": "Dimensiones",
        "filehist-filesize": "Mannesa de su file",
        "filehist-comment": "Cummentu",
        "imagelinks": "Ligant a custu file",
-       "linkstoimage": "{{PLURAL:$1|Sa pàgina ki sighit ligat|Is $1 pàginas ki sighint ligant}} a custu file:",
+       "linkstoimage": "{{PLURAL:$1|Sa pàgina chi sighit ligat|Is $1 pàginas chi sighint ligant}} a custu file:",
        "nolinkstoimage": "Peruna pàgina ligat a custu file.",
-       "sharedupload": "Custu file benit dae $1 e podet èssere impreau in àteros progetos.",
+       "linkstoimage-redirect": "$1 (reindiritzamentu file) $2",
+       "sharedupload": "Custu file benit dae $1 e podet èssere impreadu in àteros progetos.",
+       "sharedupload-desc-here": "Custu documentu benit dae $1 e podet èssere impreadu in àteros progetos.\nA sighire est ammustrada sa descritzione in sa sua [$2 pàgina de descritzione de su documentu].",
        "uploadnewversion-linktext": "Carriga una versione noa de custu file",
        "shared-repo-from": "dae $1",
        "filerevert-comment": "Motivu:",
        "filedelete": "Cantzella $1",
        "filedelete-legend": "Cantzella su file",
+       "filedelete-comment": "Motivu:",
        "filedelete-submit": "Cantzella",
        "filedelete-success": "Su file '''$1''' est istadu fuliau.",
+       "filedelete-otherreason": "Motivu diversu o agiuntivu:",
        "filedelete-reason-otherlist": "Àteru motivu",
+       "filedelete-edit-reasonlist": "Càmbia is motivos de sa burradura",
+       "mimesearch": "Chirca MIME",
+       "mimetype": "Genia MIME:",
        "download": "scàrriga",
-       "listredirects": "Lista de totu is redirects",
+       "unwatchedpages": "Pàginas no annotadas",
+       "listredirects": "Lista de totus is reindiritzamentos",
+       "listduplicatedfiles": "Lista de documentos dopios",
+       "unusedtemplates": "Templates no impreados",
+       "unusedtemplateswlh": "àteros ligòngios",
        "randompage": "Pàgina a sa tzurpa",
+       "randomincategory-category": "Categoria:",
        "statistics": "Statìsticas",
-       "statistics-header-users": "Statìsticas subra is usuàrios",
+       "statistics-header-pages": "Statìsticas subra is pàginas",
+       "statistics-header-edits": "Càmbia is statìsticas",
+       "statistics-header-users": "Statìsticas subra is impitadores",
+       "statistics-header-hooks": "Àteras statìsticas",
+       "statistics-articles": "Pàginas de càbidos",
        "statistics-pages": "Pàginas",
+       "statistics-files": "Documentos carrigados",
+       "pageswithprop-submit": "Bae",
        "doubleredirects": "Redirects dòpios",
        "doubleredirectstext": "Custa pàgina cuntenet una lista de pàginas ki re-indiritzant a àteras pàginas de re-indiritzamentu.\nOgni lìnia cuntenet ligàmines a su primu e a su de duos re-indiritzamentu, aici comente sa prima lìnia de sa de duos re-indiritzamentos, chi de sòlitu adòbiat s'artìculu \"beru\", a sa cale fintzas su primu re-indiritzamentu dia depet puntare.\nIs re-indiritzamentos <del>cantzellados</del> sunt stados curretos.",
        "brokenredirects": "Redirects isballiaus",
-       "brokenredirectstext": "Custus redirects ligant cun pàginas chi no esistint.",
+       "brokenredirectstext": "Custos redirects ligant cun pàginas chi no esistint.",
        "brokenredirects-edit": "càmbia",
        "brokenredirects-delete": "cantzella",
        "withoutinterwiki-legend": "Prefissu",
        "withoutinterwiki-submit": "Ammustra",
        "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
        "ncategories": "$1 {{PLURAL:$1|categoria|categorias}}",
-       "nlinks": "$1 {{PLURAL:$1|ligàmene|ligàmenes}}",
+       "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
+       "nlinks": "$1 {{PLURAL:$1|ligòngiu|ligòngios}}",
        "nmembers": "$1 {{PLURAL:$1|cumponente|cumponentes}}",
        "nrevisions": "$1 {{PLURAL:$1|revisione|revisiones}}",
        "nviews": "$1 {{PLURAL:$1|bisura|bisuras}}",
        "lonelypages": "Pàginas burdas",
+       "uncategorizedpages": "Pàginas chentza categoria",
+       "uncategorizedcategories": "Categorias chentza categoria",
+       "uncategorizedimages": "Documentos chentza categoria",
+       "uncategorizedtemplates": "Templates chentza categoria",
+       "unusedcategories": "Categorias no impreadas",
        "unusedimages": "Files no impreaus",
-       "popularpages": "Pàginas populares",
+       "wantedcategories": "Categorias chircadas",
        "wantedpages": "Artìculos prus chircados",
+       "wantedfiles": "Documentos chircados",
+       "wantedtemplates": "Templates chircados",
+       "mostlinked": "Pàginas su prus ligadas",
+       "mostlinkedcategories": "Categorias su prus ligadas",
+       "mostimages": "Documentos su prus ligados",
        "mostrevisions": "Pàginas cun prus revisiones",
        "prefixindex": "Ìndighe de is pàginas pro initziales",
        "shortpages": "Pàginas crutzas",
        "longpages": "Pàginas longas",
        "deadendpages": "Pàginas chentza bessida",
        "protectedpages": "Pàginas amparadas",
+       "protectedpages-page": "Pàgina",
+       "protectedpages-expiry": "Iscadit",
+       "protectedpages-reason": "Motivu",
+       "protectedpages-unknown-timestamp": "Isconnottu",
        "protectedtitles": "Tìtulus amparadus",
-       "listusers": "Lista usuàrios",
+       "listusers": "Lista impitadores",
        "usereditcount": "$1 {{PLURAL:$1|acontzu|acontzos}}",
        "usercreated": "{{GENDER:$3|Creadu}} su $1 a is $2",
        "newpages": "Pàginas noas",
-       "newpages-username": "Nùmene usuàriu:",
-       "move": "Movi",
+       "newpages-username": "Nùmene impitadore:",
+       "move": "Move",
        "movethispage": "Move custa pàgina (càmbia su tìtulu)",
-       "unusedimagestext": "Is files ki sighint sunt stados carrigados ma non sunt impreados.\nDia podent essere immàgines impreadas dae àteros giassos cun unu ligàmine diretu, e tando podent essere listados inoghe comente usu ativu.",
+       "unusedimagestext": "Is documentos chi sighint sunt istados carrigados ma non sunt impreados.\nDia podent èssere immàgines impreadas dae àteros giassos cun unu ligòngiu diretu, e tando podent èssere listados inoghe comente usu ativu.",
        "notargettitle": "Perunu obietivu",
-       "notargettext": "Non hai specificato una pagina o un Utente in relazione al quale eseguire l'operazione richiesta.",
+       "notargettext": "Non as ispetzificadu una pàgina o unu impitadore pro issucutare custa funtzione.",
        "pager-newer-n": "{{PLURAL:$1|1 prus nou|$1 prus nous}}",
        "pager-older-n": "{{PLURAL:$1|1 prus betzu|$1 prus betzos}}",
        "booksources": "Fontes libràrias",
        "booksources-search-legend": "Chirca fontes libràrias",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Bae",
        "specialloguserlabel": "Atzione fata dae:",
        "speciallogtitlelabel": "Atzione fata subra:",
        "log": "Registros",
-       "allpages": "Totu is pàginas",
+       "allpages": "Totus is pàginas",
        "prevpage": "Pàgina in antis ($1)",
        "allpagesfrom": "Ammustra pàginas a partire dae:",
        "allpagesto": "Ammustra pàginas fintzas a:",
-       "allarticles": "Totu is pàginas",
-       "allinnamespace": "Totu is pàginas (nùmene-logu $1)",
+       "allarticles": "Totus is pàginas",
+       "allinnamespace": "Totus is pàginas (nùmene-logu $1)",
        "allpagessubmit": "Bae",
        "allpages-bad-ns": "Su nùmene-logu \"$1\" non esistit in {{SITENAME}}.",
        "categories": "Categorias",
        "linksearch": "Chirca acàpios de foras",
        "linksearch-ns": "Nùmene-logu:",
        "linksearch-ok": "Chirca",
+       "linksearch-line": "$1 est ligadu in sa pàgina $2",
        "listusers-submit": "Ammustra",
+       "listusers-blocked": "(blocadu)",
        "activeusers-hidebots": "Cua bots",
        "activeusers-hidesysops": "Cua amministradores",
        "listgrouprights-group": "Grupu",
+       "listgrouprights-rights": "Deretos",
        "listgrouprights-members": "(lista de is cumponentes)",
-       "mailnologintext": "Depes èsser [[Special:UserLogin|identificadu (login)]] e àer registradu un'indiritzu e-mail vàlidu in is [[Special:Preferences|preferèntzias tuas]] pro imbiare e-mail a àteros usuàrios.",
-       "emailuser": "E-mail a custu usuàriu",
-       "emailpage": "Ispedi una missada a s'usuàriu",
-       "emailpagetext": "Imprea su mòdulu a suta pro ispedire una missada eletrònica a custu usuàriu.\nS'indiritzu chi as insertadu in is [[Special:Preferences|preferèntzias usuàriu tuas]] at a pàrrere comente su chi at ispedidu sa e-mail, pro fàghere sa manera chi su destinatàriu ti respundat deretu.",
-       "defemailsubject": "Missada dae s'usuàriu \"$1\" de {{SITENAME}}",
+       "listgrouprights-namespaceprotection-namespace": "Nùmene-logu",
+       "mailnologintext": "Depes èsser [[Special:UserLogin|identificadu (login)]] e àere registradu un'indiritzu email vàlidu in is [[Special:Preferences|preferèntzias tuas]] pro imbiare email a àteros impitadores.",
+       "emailuser": "Imbia una email a custu impitadore",
+       "emailuser-title-notarget": "Ispedi una email a s'impitadore",
+       "emailpage": "Ispedi una email a s'impitadore",
+       "emailpagetext": "Imprea su mòdulu a suta pro ispedire una email a custu impitadore.\nS'indiritzu chi as insertadu in is [[Special:Preferences|preferèntzias impitadore tuas]] at a pàrrere comente su chi at ispedidu sa e-mail, pro fàghere sa manera chi su destinatàriu ti respundat deretu.",
+       "defemailsubject": "Missada dae \"$1\", impitadore de {{SITENAME}}",
        "noemailtitle": "Perunu indiritzu e-mail",
-       "noemailtext": "Custu usuàriu no at ispetzificadu un indiritzu e-mail vàlidu.",
-       "email-legend": "Imbia una missada e-mail a un àteru usuàriu de {{SITENAME}}",
+       "noemailtext": "Custu impitadore no at ispetzificadu unu indiritzu email vàlidu.",
+       "emailusername": "Nùmene impitadore:",
+       "email-legend": "Imbia una missada e-mail a un àteru impitadore de {{SITENAME}}",
        "emailfrom": "Dae:",
        "emailto": "A:",
        "emailsubject": "Ogetu:",
        "emailsent": "E-mail ispedia",
        "emailsenttext": "Sa e-mail tua est istada imbiada.",
        "usermessage-editor": "Missu de su sistema",
-       "watchlist": "Sa watchlist mea",
+       "watchlist": "Pàginas annotadas",
        "mywatchlist": "Pàginas annotadas",
+       "watchlistfor2": "Pro $1 $2",
        "nowatchlist": "No as indicadu pàginas in sa watchlist tua.",
        "watchnologin": "No intrau (log in)",
        "addedwatchtext": "Sa pàgina \"[[:$1]]\" est istada aciunta a sa [[Special:Watchlist|watchlist]] tua.\nIs mudàntzias de custa pàgina e de sa pàgina de cuntierras sua ant a benner elencadas inoe.",
        "removedwatchtext": "Sa pàgina  \"[[:$1]]\" est istada tirada dae sa [[Special:Watchlist|watchlist tua]].",
-       "watch": "Pone in sa watchlist",
+       "watch": "Annota",
        "watchthispage": "Pone ogru a custu artìculu",
-       "unwatch": "Tira dae sa watchlist",
+       "unwatch": "Tira dae is pàginas annotadas",
        "unwatchthispage": "Boga custa pàgina dae sa watchlist tua",
        "notanarticle": "Custa pàgina no est unu artìculu",
-       "watchlist-details": "Sa watchlist tua cuntènnit {{PLURAL:$1|$1 pàgina|$1 pàginas}}, chentza contare is pàginas de cuntierras.",
-       "wlshowlast": "Ammustra is ùrtimas $1 oras $2 dies $3",
-       "watchlist-options": "Possibilidades subra sa watchlist",
+       "watchlist-details": "Tenes {{PLURAL:$1|$1 pàgina annotada paris a sa pagina de cuntierra sua|$1 pàginas annotadas paris a is pàginas de cuntierra issoro}}.",
+       "wlshowlast": "Ammustra is ùrtimas $1 oras, $2 dies",
+       "watchlist-options": "Optziones subra sa lista de pàginas annotadas",
        "watching": "Giunghende a sa watchlist...",
        "unwatching": "Boghende dae sa watchlist...",
-       "enotif_impersonal_salutation": "Usuàriu de {{SITENAME}}",
+       "enotif_impersonal_salutation": "Impitadore de {{SITENAME}}",
+       "enotif_anon_editor": "impitadore anònimu $1",
        "created": "creada",
        "deletepage": "Fùlia pàgina",
        "confirm": "Cunfima",
        "excontent": "su cuntènnidu fiat: '$1'",
-       "excontentauthor": "su cuntènnidu fiat: '$1' (e s'ùnicu contribudori fiat '[[Special:Contributions/$2|$2]]')",
+       "excontentauthor": "su cuntènnidu fiat: '$1' (e s'ùnicu contribudore fiat '[[Special:Contributions/$2|$2]]')",
        "delete-confirm": "Fùlia \"$1\"",
        "delete-legend": "Fuliare",
        "confirmdeletetext": "Ses acanta de burrare una pàgina cun totu su stòria sua.\nPro praxere, cunfirma ca est intentzione tua fàgher custu, ca connosches is cosseguèntzias de s'atzione tua, a ca custa est cunforma a is [[{{MediaWiki:Policy-url}}|lìnias polìticas]].",
        "rollback": "Annudda is acontzos",
        "rollbacklink": "rollback",
        "rollbackfailed": "Rollback faddidu",
-       "cantrollback": "Non si podet furriare s'acontzu;\ns'ùrtimu contribuidore est s'ùnicu autore de custa pàgina.",
+       "cantrollback": "Non si podet furriare sa modìfica;\ns'ùrtimu contribuidore est s'ùnicu autore de custa pàgina.",
        "revertpage": "Burradas is mudàntzias de [[Special:Contributions/$2|$2]] ([[User talk:$2|cuntierras]]), torrada a sa versione cabudiana de [[User:$1|$1]]",
-       "protectlogpage": "Amparaduras",
-       "protectedarticle": "at amparau \"[[$1]]\"",
+       "protectlogpage": "Bardaduras",
+       "protectedarticle": "at bardadu \"[[$1]]\"",
        "modifiedarticleprotection": "at cambiau su livellu de amparadura pro \"[[$1]]\"",
+       "prot_1movedto2": "[[$1]] est istada mòvida a [[$2]]",
+       "protect-legend": "Cunfirma amparadura",
        "protectcomment": "Motivu:",
        "protectexpiry": "Iscadèntzia:",
        "protect_expiry_invalid": "S'iscadèntzia est imbàlida.",
        "protect_expiry_old": "Iscadentzia giai passada.",
        "protect-text": "Custu modulu serbit pro castiari e cambiari su livellu de amparadura de sa pàgina '''$1'''.",
        "protect-locked-access": "Non tenes su permissu pro cambiare is livellus de amparadura de sa pàgina.\nIs impostatziones atuales pro sa pàgina '''$1''':",
-       "protect-cascadeon": "A su momentu custa pàgina est bloccada pro ite est inclùdia {{PLURAL:$1|in sa pàgina indicada a suta, pro sa cali|in is pàginas indicadas a suta, pro is calis}} est ativa s'amparadura ricorsiva. Est possìbile cambiare su livellu de amparadura de custa pàgina, ma is impostatziones derivadas dae s'amparadura ricorsiva non ant a èssere mudadas.",
-       "protect-default": "Autoritza totu is usuàrios",
-       "protect-fallback": "Esigit su permissu \"$1\"",
-       "protect-level-autoconfirmed": "Blocca is usuàrios nobos o non registrados",
-       "protect-level-sysop": "Isceti aministradores",
+       "protect-cascadeon": "A su momentu custa pàgina est bardada pro ite est inclùdida {{PLURAL:$1|in sa pàgina indicada a suta, pro sa cale|in is pàginas indicadas a suta, pro is cales}} est ativa sa bardadura ricorsiva.\nEst possìbile cambiare su livellu de bardadura de custa pàgina, ma is efetos derivados dae sa bardadura ricorsiva non ant a èssere mudados.",
+       "protect-default": "Autoriza totus is impitadores",
+       "protect-fallback": "Permìtidu feti a is impitadores cun su permissu \"$1\"",
+       "protect-level-autoconfirmed": "Permìtidu feti a is impitadores autocunfimados",
+       "protect-level-sysop": "Permìtidu feti a is amministradores",
        "protect-summary-cascade": "ricorsiva",
        "protect-expiring": "iscadèntzia: $1 (UTC)",
+       "protect-expiring-local": "iscadit su $1",
        "protect-cascade": "Ampara totu is pàginas inclùdias in custa (amparadura ricorsiva)",
        "protect-cantedit": "Non podes cambiare is livellus de amparadura pro sa pàgina, pro ite non tenes su permissu de cambiare sa pàgina etotu.",
        "protect-othertime": "Àteru perìodu:",
+       "protect-othertime-op": "àteru perìodu",
+       "protect-otherreason": "Motivu diversu o agiuntivu:",
+       "protect-otherreason-op": "Àteru motivu",
        "protect-expiry-options": "1 ora:1 hour,1 die:1 day,1 chida:1 week,2 chidas:2 weeks,1 mese:1 month,3 meses:3 months,6 meses:6 months,1 annu:1 year,infinidu:infinite",
        "restriction-type": "Permissu:",
        "restriction-level": "Livellu de restritzioni:",
        "pagesize": "(bytes)",
-       "restriction-edit": "Acontzadura",
+       "restriction-edit": "Modìfica",
        "restriction-move": "Movimentu",
        "restriction-create": "Creatzione",
        "restriction-upload": "Carrigadroxiu",
        "undeleterevisions": "$1 {{PLURAL:$1|revisione|revisiones}} in archìviu",
        "undeletehistory": "Restaurende custa pàgina, totu is revisiones ant a torrare in sa istòria sua.\nChi est istada creada una pàgina cun su matessi tìtulu, is revisiones recuperadas ant a insertare in sa istoria in antis.",
        "undeletebtn": "Ripristina",
-       "undeletelink": "càstia/riprìstina",
-       "undeleteviewlink": "abbista",
+       "undeletelink": "càstia/torra che prima",
+       "undeleteviewlink": "ammustra",
        "undeleteinvert": "Fùrria sa seletzione",
        "undeletecomment": "Motivu:",
        "undeletedrevisions": "{{PLURAL:$1|1 revisione restaurada|$1 revisiones restauradas}}",
        "undeletedrevisions-files": "{{PLURAL:$1|1 revisione|$1 revisiones}} e {{PLURAL:$2|1 file|$2 files}} restaurados",
        "undeletedfiles": "{{PLURAL:$1|1 file restauradu|$1 files restaurados}}",
+       "undelete-search-title": "Chirca pàginas burradas",
        "undelete-search-box": "Chirca pàginas fuliadas",
        "undelete-search-prefix": "Ammustra is pàginas ca su tìtulu cumentzat cun:",
        "undelete-search-submit": "Chirca",
        "undelete-show-file-submit": "Eja",
        "namespace": "Nùmene-logu:",
        "invert": "Fùrria sa seletzione",
+       "namespace_association": "Nùmene-logu assotziadu",
        "blanknamespace": "(Printzipale)",
-       "contributions": "Contributziones {{GENDER:$1|usuàriu}}",
+       "contributions": "Contributos {{GENDER:$1|impitadore}}",
        "contributions-title": "Contributziones de $1",
-       "mycontris": "Contributziones meas",
+       "mycontris": "Contributos mios",
        "contribsub2": "Pro {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Nessuna modifica trovata conformemente a questi criteri.",
        "uctop": "(atuale)",
-       "month": "Dae su mese (e in antis):",
-       "year": "Dae s'annu (e in antis):",
+       "month": "Dae su mese (e in segus):",
+       "year": "Dae s'annu (e in segus):",
        "sp-contributions-newbies": "Ammustra feti is contributziones de is contos noos",
+       "sp-contributions-newbies-sub": "Pro is contos noos",
        "sp-contributions-blocklog": "registru de is bloccos",
+       "sp-contributions-uploads": "carrigamentos",
+       "sp-contributions-logs": "registros",
        "sp-contributions-talk": "cuntierra",
-       "sp-contributions-search": "Chirca contributziones",
-       "sp-contributions-username": "Indiritzu IP o nùmene usuàriu:",
+       "sp-contributions-search": "Chirca contributos",
+       "sp-contributions-username": "Indiritzu IP o nùmene impitadore:",
+       "sp-contributions-toponly": "Ammustra feti is contributos chi sunt is ùrtimas versiones pro sa pàgina",
+       "sp-contributions-newonly": "Ammustra feti is càmbios chi ant creadu pàginas noas",
        "sp-contributions-submit": "Chirca",
        "whatlinkshere": "Pàginas chi ligant a custa",
        "whatlinkshere-title": "Pàginas chi ligant a \"$1\"",
        "whatlinkshere-page": "Pàgina:",
-       "linkshere": "Sas pàginas chi sighint ligant a '''[[:$1]]''':",
+       "linkshere": "Is pàginas chi sighint ligant a '''[[:$1]]''':",
        "nolinkshere": "Peruna pàgina ligat a '''[[:$1]]'''.",
        "nolinkshere-ns": "Peruna pàgina ligat a '''[[:$1]]''' in su nùmene-logu seberadu.",
-       "isredirect": "redirect",
+       "isredirect": "pàgina de reindiritzamentu",
        "istemplate": "inclusione",
-       "isimage": "acàpiu a file",
-       "whatlinkshere-prev": "{{PLURAL:$1|cabudianu|cabudianos $1}}",
+       "isimage": "ligòngiu a documentu",
+       "whatlinkshere-prev": "{{PLURAL:$1|pretzedente|pretzedentes $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|imbeniente|imbenientes $1}}",
-       "whatlinkshere-links": "← acàpius",
-       "whatlinkshere-hideredirs": "$1 redirects",
-       "whatlinkshere-hidetrans": "$1 inclusionis",
-       "whatlinkshere-hidelinks": "$1 acàpius",
+       "whatlinkshere-links": "← ligòngios",
+       "whatlinkshere-hideredirs": "$1 is reindiritzamentos",
+       "whatlinkshere-hidetrans": "$1 inclusiones",
+       "whatlinkshere-hidelinks": "$1 ligòngios",
+       "whatlinkshere-hideimages": "$1 is ligòngios a documentu",
        "whatlinkshere-filters": "Filtros",
-       "blockip": "Blocca {{GENDER:$1|usuàriu}}",
-       "blockip-legend": "Blocca usuàriu",
+       "blockip": "Blocca {{GENDER:$1|impitadore}}",
+       "blockip-legend": "Blocca impitadore",
        "blockiptext": "Usa il modulo sottostante per bloccare l'accesso con diritto di scrittura da uno specifico indirizzo IP. Questo blocco deve essere operato SOLO per prevenire atti di vandalismo, ed in stretta osservanza dei principi tutti della [[{{MediaWiki:Policy-url}}|policy di {{SITENAME}}]]. Il blocco non può in nessun caso essere applicato per motivi ideologici.\nScrivi un motivo specifico per il quale questo indirizzo IP dovrebbe a tuo avviso essere bloccato (per esempio, cita i titoli di pagine eventualmente già oggetto di vandalismo editoriale).",
-       "ipaddressorusername": "Indiritzu IP o nùmene usuàriu:",
+       "ipaddressorusername": "Indiritzu IP o nùmene impitadore:",
        "ipbexpiry": "Scadèntzia:",
        "ipbreason": "Motivu:",
-       "ipbsubmit": "Blocca custu usuàriu",
+       "ipbsubmit": "Blocca custu impitadore",
        "ipbother": "Àteru perìodu:",
        "ipboptions": "2 oras:2 hours,1 die:1 day,3 dies:3 days,1 chida:1 week,2 chidas:2 weeks,1 mese:1 month,3 meses:3 months,6 meses:6 months,1 annu:1 year,infinidu:infinite",
        "badipaddress": "S'indiritzu IP indicadu non est currègidu.",
        "ipb-edit-dropdown": "Càmbia su motivu de su bloccu",
        "ipb-unblock-addr": "Sblocca $1",
        "ipb-blocklist-contribs": "Contributziones de {{GENDER:$1|$1}}",
-       "unblockip": "Sblocca s'usuàriu",
+       "unblockip": "Sblocca s'impitadore",
        "unblockiptext": "Usa il modulo sottostante per restituire il diritto di scrittura ad un indirizzo IP precedentemente bloccato.",
        "ipusubmit": "Boga custu bloccu",
-       "ipblocklist": "Usuàrios bloccados",
+       "ipblocklist": "Impitadores bloccados",
+       "blocklist-expiry": "Iscadit",
+       "blocklist-reason": "Motivu",
        "ipblocklist-submit": "Chirca",
        "infiniteblock": "infinitu",
        "expiringblock": "scadit su $1 a is $2",
-       "blocklink": "blocca",
+       "blocklink": "arrea",
        "unblocklink": "sblocca",
-       "change-blocklink": "tramuda su bloccu",
-       "contribslink": "contributziones",
-       "blocklogpage": "Bloccos de usuàrios",
+       "change-blocklink": "tramuda s'arreu",
+       "contribslink": "contributos",
+       "emaillink": "imbia email",
+       "blocklogpage": "Bloccos de impitadores",
        "blocklogentry": "bloccau [[$1]] pro unu tempu de $2 $3",
        "unblocklogentry": "at sbloccau $1",
-       "block-log-flags-nocreate": "creatzione de contu bloccada est",
+       "block-log-flags-nocreate": "registrazione bloccada",
        "sorbs": "DNSBL",
        "lockdb": "Blocca su database",
        "unlockdb": "Sblocca su database",
        "movepagetext": "Cun custu mòdellu podes renumenare una pàgina, movende totu sa stòria sua a sa pàgina noa.\nSu tìtulu bèciu at a diventare una pàgina de reindiritzamentu a su tìtulu nou.\nPodes agiornare automaticamente is redirects ca ligant a su tìtulu originàriu.\nSi sèberas de no, assicura·ti de controllare pro [[Special:DoubleRedirects| reindiritzaduras dòpias]] o [[Special:BrokenRedirects|sballiadas]].\nSes responsàbile de t'assigurare ca is cullegamentos sighint a puntare  a ue depent puntare.\n\nAnnota ca sa pàgina <strong>non</strong> s'at a mòver si nde esistit giai un'àtera a su tìtulu nou, si no est ki siat bùida o cun sceti unu reindiritzamentu a sa bècia e siat chentza acontzos in antis. In casu de movimentu sballiadu, duncas, si podet torrare a su tìtulu bèciu, ma non podes subrascrìer una pàgina chi giai esistit.\n\n<strong>ATENTZIONE!</strong>\nUnu cambiamentu dràsticu podet creare problemas, mescamente a is pàginas prus populares;\npro praxere depes èsser seguru de àer cumpresu is cunsighèntzias prima de sighire a in antis.",
        "movepagetalktext": "Sa pàgina cuntierras asotziada, chi esistit, at a èssere movida automaticamenti impare a sa pàgina base, '''a parte in custos casos''':\n* su movimentu de sa pàgina est intre namespaces diversos;\n* in currispondèntzia de su tìtulu nou esistit giai una pàgina de cuntierras (non bùida);\n* sa casella inoe in bàsciu no est istata sceberada.\n\nIn custos casos, si cheres, depes mòvere a manu su cuntènnidu de sa pàgina.",
        "movearticle": "Move sa pàgina",
-       "movenologintext": "Depes èsser unu usuàriu registradu e [[Special:UserLogin|identificadu]] pro pòder mòver una pàgina",
+       "movenologintext": "Depes èsser unu impitadore registradu e [[Special:UserLogin|identificadu]] pro pòder mòver una pàgina",
        "newtitle": "Tìtulu nou:",
        "move-watch": "Pone ogru a custa pàgina",
        "movepagebtn": "Move sa pàgina",
        "pagemovedsub": "Movimentu andadu bene",
        "movepage-moved": "'''\"$1\" est istada mòvida a \"$2\"'''",
+       "movepage-moved-redirect": "Unu reindiritzamentu est istadu creadu.",
        "articleexists": "Una pàgina cun custu nùmene esistit giai, o su nùmene ki as seberadu no est bàlidu.\nPro praxere sèbera un'àteru nùmene.",
        "movetalk": "Move sa pàgina de cuntierra galu",
        "movelogpage": "Moviduras",
        "immobile-source-page": "Non si podet mòver custa pàgina.",
        "move-leave-redirect": "Lassa unu reindiritzamentu a palas",
        "export": "Esporta pàginas",
+       "export-submit": "Esporta",
+       "export-addcat": "Annanghe",
+       "export-addns": "Annanghe",
        "export-download": "Sarba comente file",
        "allmessagesname": "Nùmene",
+       "allmessagesdefault": "Testu predefinidu",
        "allmessages-filter-legend": "Filtru",
        "allmessages-filter-all": "Totu",
        "allmessages-language": "Limba:",
        "allmessages-filter-submit": "Bae",
        "allmessages-filter-translate": "Tradui",
        "thumbnail-more": "Amannia",
+       "thumbnail_error": "Faddina creande sa miniatura: $1",
+       "import-interwiki-sourcewiki": "Wiki de orìgine:",
+       "import-interwiki-sourcepage": "Pàgina de orìgine:",
+       "import-interwiki-submit": "Importa",
        "import-interwiki-namespace": "Nùmene-logu de destinatzione:",
        "import-upload-filename": "Nùmene file:",
        "import-comment": "Cummentu:",
-       "tooltip-pt-userpage": "Sa pàgina usuàriu tua",
+       "importstart": "Importande is pàginas...",
+       "import-revision-count": "$1 {{PLURAL:$1|revisione|revisiones}}",
+       "importlogpage": "Importatziones",
+       "tooltip-pt-userpage": "Sa pàgina impitadore tua",
        "tooltip-pt-mytalk": "Sa pàgina de is cuntierras tuas",
-       "tooltip-pt-preferences": "Is preferèntzias chi podes scioberai",
-       "tooltip-pt-watchlist": "Sa lista de is pàginas chi tue ses ponende ogru",
-       "tooltip-pt-mycontris": "Sa lista de is contributziones meas",
-       "tooltip-pt-login": "Si cunsìgiat sa registratzione; mancari non siat obligatoria",
+       "tooltip-pt-preferences": "Is preferèntzias chi podes seberare",
+       "tooltip-pt-watchlist": "Lista de is pàginas annotadas dae tue pro is mudàntzias",
+       "tooltip-pt-mycontris": "Sa lista de is contributos mios",
+       "tooltip-pt-login": "Sa registratzione est cussigiada; mancari chi non siat obligatoria",
        "tooltip-pt-logout": "Essida (log out)",
-       "tooltip-ca-talk": "Cuntierras a propositu de su cuntestu de sa pàgina",
-       "tooltip-ca-edit": "Podes cambiare custa pàgina.\nPro praxere, prima de sarbare càstia s'antiprima",
-       "tooltip-ca-addsection": "Incumintza una setzione noa",
-       "tooltip-ca-viewsource": "Sa pàgina est amparada.\nPodes castiare sa mitza sua",
+       "tooltip-ca-talk": "Cuntierras a propòsitu de su cuntestu de sa pàgina",
+       "tooltip-ca-edit": "Podes modificare custa pàgina.\nPro praghere, prima de sarbare càstia s'antiprima",
+       "tooltip-ca-addsection": "Incumentza una setzione noa",
+       "tooltip-ca-viewsource": "Sa pàgina est bardada.\nPodes castiare sa mitza sua",
        "tooltip-ca-history": "Versiones coladas de custa pàgina",
-       "tooltip-ca-protect": "Ampara custa pàgina",
-       "tooltip-ca-delete": "Fùlia custa pàgina",
+       "tooltip-ca-protect": "Barda custa pàgina",
+       "tooltip-ca-delete": "Burra custa pàgina",
        "tooltip-ca-move": "Move custa pàgina (càmbia su tìtulu)",
-       "tooltip-ca-watch": "Giunghe custa pàgina a sa ''watchlist'' tua",
-       "tooltip-ca-unwatch": "Tira custa pàgina da sa watchlist tua",
-       "tooltip-search": "Chirca a intru de {{SITENAME}}",
-       "tooltip-search-go": "Anda a una pàgina cun custu nùmene, si esistit",
-       "tooltip-search-fulltext": "Chirca custu testu in sas pàginas",
+       "tooltip-ca-watch": "Annota custa pàgina pro is mudàntzias",
+       "tooltip-ca-unwatch": "Rimove custa pàgina dae sa lista de pàginas annotadas tua",
+       "tooltip-search": "Chirca in intru de {{SITENAME}}",
+       "tooltip-search-go": "Bae a una pàgina cun su nùmene indicadu, si esistit",
+       "tooltip-search-fulltext": "Chirca custu testu in is pàginas",
        "tooltip-p-logo": "Bìsita sa pàgina base",
        "tooltip-n-mainpage": "Bìsita sa pàgina base",
        "tooltip-n-mainpage-description": "Bìsita sa pàgina base",
        "tooltip-n-portal": "Descritzione de su progetu, ite podes fàgher, a innue agatas is cosas",
-       "tooltip-n-currentevents": "Informatziones subra acuntèssias atuales",
-       "tooltip-n-recentchanges": "Sa lista de is ùrtimas mudàntzias de su giassu",
+       "tooltip-n-currentevents": "Informatziones subra acadessimentos atuales",
+       "tooltip-n-recentchanges": "Lista de is ùrtimas mudàntzias in su giassu",
        "tooltip-n-randompage": "Càrriga una pàgina a sorte",
        "tooltip-n-help": "Pàginas de agiudu",
        "tooltip-t-whatlinkshere": "Lista de totu is pàginas chi ligant a custa",
        "tooltip-t-recentchangeslinked": "Lista de is ùrtimas mudàntzias de is pàginas ki ligant a custa",
        "tooltip-feed-rss": "RSS feed pro custa pàgina",
        "tooltip-feed-atom": "Atom feed pro custa pàgina",
-       "tooltip-t-contributions": "Càstia sa lista de is contributziones de custu usuàriu",
-       "tooltip-t-emailuser": "Ispedi una missada eletronica a custu usuàriu",
-       "tooltip-t-upload": "Càrriga file multimediale",
+       "tooltip-t-contributions": "Càstia sa lista de is contributos de custu impitadore",
+       "tooltip-t-emailuser": "Ispedi una email a custu impitadore",
+       "tooltip-t-upload": "Càrriga documentu multimediale",
        "tooltip-t-specialpages": "Lista de is pàginas ispetziales",
        "tooltip-t-print": "Versione de custa pàgina pro s'imprenta",
-       "tooltip-t-permalink": "Cullegamentu permanente a custa versione de sa pàgina",
+       "tooltip-t-permalink": "Ligòngiu permanente a custa versione de sa pàgina",
        "tooltip-ca-nstab-main": "Càstia su cuntènnidu de sa pàgina",
-       "tooltip-ca-nstab-user": "Càstia sa pàgina usuàriu",
-       "tooltip-ca-nstab-special": "Custa est una pàgina ispetziale, non dda podes cambiare",
+       "tooltip-ca-nstab-user": "Càstia sa pàgina impitadore",
+       "tooltip-ca-nstab-special": "Custa est una pàgina ispetziale, non si podet modificare",
        "tooltip-ca-nstab-project": "Càstia sa pàgina de servìtziu",
        "tooltip-ca-nstab-image": "Càstia sa pàgina de su file",
        "tooltip-ca-nstab-template": "Càstia su template",
        "tooltip-ca-nstab-category": "Càstia sa pàgina de sa categoria",
-       "tooltip-minoredit": "Signa comente acontzu minore",
-       "tooltip-save": "Sarva is mudàntzias tuas",
-       "tooltip-preview": "Antiprima de is mudàntzias, pro pregeri usa custu prima de sarvari!",
-       "tooltip-diff": "Ammustra is mudàntzias ki as fatu a su testu",
+       "tooltip-minoredit": "Marca custa muda comente càmbiu minore",
+       "tooltip-save": "Sarba is càmbios tuos",
+       "tooltip-preview": "Antiprima de is mudas fatas, pro praghere usa custu prima de sarvare!",
+       "tooltip-diff": "Ammustra is mudàntzias chi as fatu a su testu",
        "tooltip-compareselectedversions": "Càstia is diferèntzias de is duas versiones seberadas de custa pàgina",
-       "tooltip-watch": "Aciungi custa pàgina a sa watchlist tua",
+       "tooltip-watch": "Annota custa pàgina pro is mudàntzias",
        "tooltip-recreate": "Torra a creare sa pàgina mancari siat stada fuliada",
        "tooltip-upload": "Cumentza a carrigare",
-       "tooltip-rollback": "\"Rollback\" annudda is mudàntzias de custa pàgina fatas dae s'ùrtimu contribudori",
-       "tooltip-undo": "\"Annudda\" fùrriat custu acontzu e aberit su mòdulu de acontzu comente antiprima.\nPodes agiùnger unu motivu in s'ogetu de s'acontzu.",
-       "siteuser": "$1, {{GENDER:$1|usuàriu|usuària}} de {{SITENAME}}",
-       "anonuser": " $1, usuàriu anònimu de {{SITENAME}}",
+       "tooltip-rollback": "\"Rollback\" annudda is mudàntzias de custa pàgina fatas dae s'ùrtimu contribudore",
+       "tooltip-undo": "\"Annudda\" fùrriat custu càmbiu e aberit su mòdulu de càmbiu comente antiprima.\nPodes annànghere unu motivu in s'ogetu.",
+       "tooltip-preferences-save": "Sarba preferèntzias",
+       "tooltip-summary": "Inserta unu resumu curtzu",
+       "siteuser": "$1, impitadore de {{SITENAME}}",
+       "anonuser": "$1, impitadore anònimu de {{SITENAME}}",
        "others": "àteros",
-       "siteusers": "$1, {{PLURAL:$2|usuàriu|usuàrios}} de {{SITENAME}}",
-       "anonusers": "$1, {{PLURAL:$2|usuàriu anònimu|usuàrios anònimos}} de {{SITENAME}}",
+       "siteusers": "$1, {{PLURAL:$2|impitadore|impitadores}} de {{SITENAME}}",
+       "anonusers": "$1, {{PLURAL:$2|impitadore anònimu|impitadores anònimos}} de {{SITENAME}}",
        "creditspage": "Autores de sa pàgina",
-       "previousdiff": "← Acontzu in antis",
-       "nextdiff": "Acontzu in fatu →",
+       "pageinfo-title": "Informatziones pro \"$1\"",
+       "pageinfo-header-basic": "Informatziones de base",
+       "pageinfo-header-edits": "Istòria de is mudàntzias",
+       "pageinfo-header-restrictions": "Protetzione de sa pàgina",
+       "pageinfo-display-title": "Tìtulu visadu",
+       "pageinfo-default-sort": "Critèriu de ordinamentu predefinidu",
+       "pageinfo-length": "Longària de sa pàgina (in bytes)",
+       "pageinfo-article-id": "ID pàgina",
+       "pageinfo-language": "Limba de su cuntènnidu de sa pàgina",
+       "pageinfo-content-model": "Modellu de su cuntènnidu de sa pàgina",
+       "pageinfo-robot-policy": "Inditzizatzione pro is robots",
+       "pageinfo-robot-index": "Adduida",
+       "pageinfo-firstuser": "Creadore de sa pàgina",
+       "pageinfo-firsttime": "Data de creatzione de sa pàgina",
+       "pageinfo-lastuser": "Ùrtimu contribudore",
+       "pageinfo-lasttime": "Data de s'ùrtimu càmbiu",
+       "pageinfo-edits": "Nùmeru totale de càmbios",
+       "pageinfo-authors": "Nùmeru totale de autores dislindados",
+       "pageinfo-toolboxlink": "Informatziones pro sa pàgina",
+       "pageinfo-redirectsto-info": "info",
+       "pageinfo-contentpage-yes": "Eja",
+       "pageinfo-protect-cascading-yes": "Eja",
+       "pageinfo-category-pages": "Nùmeru de pàginas",
+       "pageinfo-category-subcats": "Nùmeru de sutacategorias",
+       "pageinfo-category-files": "Nùmeru de documentos",
+       "markaspatrolleddiff": "Marca comente cumprobadu",
+       "markaspatrolledtext": "Marca custa pàgina comente cumprobada",
+       "markedaspatrolled": "Marcada comente cumprobada",
+       "previousdiff": "← Càmbiu in segus",
+       "nextdiff": "Càmbiu in antis →",
+       "thumbsize": "Mannesa de is miniaturas:",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|pàgina|pàginas}}",
+       "file-info": "mannesa de su documentu: $1, casta de MIME: $2",
        "file-info-size": "$1 × $2 pixels, mannesa de su file: $3, tipu de MIME: $4",
        "file-nohires": "Non si tenent risolutziones prus artas.",
        "svg-long-desc": "file in formadu SVG, mannesa nominale $1 × $2 pixel, mannesa de su file: $3",
        "show-big-image": "Versione a risolutzione arta",
        "imagelisttext": "Innoe sighendi du est una lista de '''$1''' {{PLURAL:$1|file|files}} ordinada $2.",
+       "newimages-legend": "Filtru",
        "ilsubmit": "Chirca",
        "bydate": "data",
        "video-dims": "$1, $2×$3",
        "seconds-abbrev": "$1s",
        "minutes-abbrev": "$1m",
        "hours-abbrev": "$1h",
-       "bad_image_list": "Su formau est su chi sighit:\n\nBenint consideraus isceti is listas putadas (lìnias chi incumentzant cun *).\nSu primu cullegamentu depit èssere unu acàpiu a unu file malu (o indesiderau).\nIs acàpius chi sighint in sa matessi lìnia sunt cunsideraus comente eccetziones (ossiat, pàginas innui si podet usare su file).",
+       "seconds": "{{PLURAL:$1|$1 segundu|$1 segundos}}",
+       "minutes": "{{PLURAL:$1|$1 minutu|$1 minutos}}",
+       "hours": "{{PLURAL:$1|$1 ora|$1 oras}}",
+       "days": "{{PLURAL:$1|$1 die|$1 dies}}",
+       "weeks": "{{PLURAL:$1|$1 chida|$1 chidas}}",
+       "months": "{{PLURAL:$1|$1 mese|$1 meses}}",
+       "years": "{{PLURAL:$1|$1 annu|$1 annos}}",
+       "ago": "como $1",
+       "just-now": "immoe-immoe",
+       "hours-ago": "como $1 {{PLURAL:$1|ora|oras}}",
+       "minutes-ago": "$1 {{PLURAL:$1|minutu|minutos}} a como",
+       "seconds-ago": "como $1 {{PLURAL:$1|segundu|segundos}}",
+       "monday-at": "Lunis a is $1",
+       "tuesday-at": "Martis a is $1",
+       "wednesday-at": "Mèrcuris a is $1",
+       "thursday-at": "Gioja a is $1",
+       "friday-at": "Chenàbura a is $1",
+       "saturday-at": "Sàbadu a is $1",
+       "sunday-at": "Domìnigu a is $1",
+       "yesterday-at": "Eris a is $1",
+       "bad_image_list": "Su formadu est su chi sighit:\n\nBenint consideradas isceti is listas punnadas (lìnias chi incumentzant cun *).\nSu primu ligòngiu in cada una lìnia depet èssere unu ligòngiu a unu documentu malu (o indesideradu).\nIs ligòngios chi sighint in sa matessi lìnia sunt cunsiderados comente etzetziones (est a nàrrere, pàginas in ue si podet usare su documentu).",
        "metadata": "Metadatos",
-       "metadata-help": "Custu file cuntènnit informatziones aciuntivas, probabilmente aciuntas dae sa fotocamera o dae su scannerizadori impreaus pro ddu creare o ddu digitalizare. Si su file est istadu acontzau, unos particolares podent non currispundere a sa realtade.",
+       "metadata-help": "Custu file cuntènnit informatziones annuntiles, probabilmente annúnghedas dae sa fotocamera o dae su scannerizadore impreadu pro ddu creare o ddu digitalizare. Si su file est istadu mudadu, unos cantos particulares podent non currispòndere a sa realidade.",
        "metadata-expand": "Ammustra particulares",
        "metadata-collapse": "Cua particulares",
-       "metadata-fields": "Is campus de is metadatos de imàgine listadus in custu messàgiu ant a èssere amostadus in sa pàgina de s'immàgine candu sa tabella de is metadatos est presentada in forma breve. Pro impostatzione predefinia, is àteros campus ant a èssere cuaus.\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": "Is campus de is metadatos de imàgine listados in custu messàgiu ant a èssere ammustrados in sa pàgina de s'immàgine candu sa tabella de is metadatos est presentada in forma breve. Pro impostatzione predefinida, is àteros campos ant a èssere cuaos.\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-artist": "Autore",
        "exif-exposuretime-format": "$1 s ($2)",
        "exif-fnumber-format": "f/$1",
        "exif-flash": "Flash",
        "exif-focallength-format": "$1 mm",
+       "exif-contrast": "Cuntrastu",
+       "exif-saturation": "Saturassione",
+       "exif-gpslatituderef": "Latitùdine nord o sud",
+       "exif-gpslatitude": "Latitùdine",
+       "exif-gpslongituderef": "Longitùdine est o ovest",
+       "exif-gpslongitude": "Longitùdine",
+       "exif-source": "Orìgine",
+       "exif-languagecode": "Limba",
+       "exif-iimcategory": "Categoria",
        "exif-compression-6": "JPEG",
        "exif-photometricinterpretation-2": "RGB",
        "exif-photometricinterpretation-6": "YCbCr",
        "exif-componentsconfiguration-1": "Y",
        "exif-componentsconfiguration-2": "Cb",
        "exif-componentsconfiguration-3": "Cr",
+       "exif-exposureprogram-1": "Ghia",
        "exif-subjectdistance-value": "$1 metros",
+       "exif-meteringmode-255": "Àteru",
+       "exif-lightsource-0": "Isconnottu",
        "exif-lightsource-4": "Lampu",
        "exif-gaincontrol-0": "Nudda",
        "exif-contrast-0": "Normale",
+       "exif-saturation-0": "Normale",
        "exif-sharpness-0": "Normale",
-       "watchlistall2": "totu",
-       "namespacesall": "totu",
-       "monthsall": "totu",
+       "namespacesall": "totus",
+       "monthsall": "totus",
        "confirmemail": "Cunfirma s'indiritzu e-mail",
        "confirm_purge_button": "OK",
+       "confirm-watch-button": "OK",
+       "confirm-unwatch-button": "OK",
        "semicolon-separator": ";&#32;",
        "comma-separator": ",&#32;",
        "colon-separator": ":&#32;",
        "word-separator": "&#32;",
        "ellipsis": "…",
        "percent": "$1%",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← pàgina in antis",
        "imgmultipagenext": "pàgina in fatu →",
        "imgmultigo": "Bae!",
        "imgmultigoto": "Bae a sa pàgina $1",
+       "img-lang-go": "Bae",
        "table_pager_first": "Primu pàgina",
        "table_pager_last": "Ùrtima pàgina",
        "table_pager_limit_submit": "Bae",
        "size-gigabytes": "$1 GB",
        "watchlistedit-normal-title": "Càmbia sa lista de annotadas",
        "watchlistedit-raw-titles": "Tìtulos:",
+       "watchlistedit-clear-titles": "Tìtulos:",
        "watchlisttools-view": "Càstia mudàntzias de importu",
-       "watchlisttools-edit": "Càstia e acontza sa watchlist",
+       "watchlisttools-edit": "Càstia e càmbia sa lista de pàginas annotadas",
        "watchlisttools-raw": "Acontza sa watchlist dae su testu",
        "timezone-utc": "UTC",
+       "duplicate-displaytitle": "<strong>Atentzione:</strong> Su tìtulu visadu \"$2\" remplasat su tìtulu antepostu \"$1\".",
        "version": "Versione",
        "version-specialpages": "Pàginas ispetziales",
        "version-other": "Àteru",
        "version-version": "(Versione $1)",
        "version-license": "Licèntzia MediaWiki",
+       "version-ext-license": "Licèntzia",
+       "version-ext-colheader-version": "Versione",
+       "version-ext-colheader-license": "Licèntzia",
+       "version-ext-colheader-description": "Descritzione",
+       "version-ext-colheader-credits": "Autores",
+       "version-license-title": "Litzèntzia pro $1",
+       "version-poweredby-others": "àteros",
        "version-software-version": "Versione",
+       "version-entrypoints-header-url": "URL",
+       "redirect-submit": "Bae",
+       "redirect-user": "ID impitadore",
+       "redirect-page": "ID pàgina",
        "fileduplicatesearch-submit": "Chirca",
        "specialpages": "Pàginas ispetziales",
+       "specialpages-note-top": "Legenda",
        "specialpages-group-login": "Intra / crea contu",
        "specialpages-group-pages": "Listas de is pàginas",
+       "tag-filter": "Filtra pro [[Special:Tags|etichetta]]:",
+       "tag-filter-submit": "Filtru",
+       "tags-active-yes": "Eja",
+       "tags-active-no": "No",
        "tags-edit": "càmbia",
+       "tags-hitcount": "$1 {{PLURAL:$1|càmbiu|càmbios}}",
+       "compare-page1": "Pàgina 1",
+       "compare-page2": "Pàgina 2",
+       "compare-rev1": "Revisione 1",
+       "compare-rev2": "Revisione 2",
        "htmlform-selectorother-other": "Àteru",
+       "htmlform-no": "No",
+       "htmlform-yes": "Eja",
+       "logentry-upload-upload": "$1 {{GENDER:$2|carrigadu}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|carrigadu}} una versione noa de $3",
+       "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",
        "searchsuggest-search": "Chirca",
-       "expand_templates_preview": "Antiprima"
+       "expand_templates_ok": "OK",
+       "expand_templates_preview": "Antiprima",
+       "pagelang-name": "Pàgina",
+       "pagelang-language": "Limba",
+       "pagelang-select-lang": "Sèbera limba"
 }
index 052335e..662f189 100644 (file)
        "edit-conflict": "Cunflittu di edizzioni.",
        "edit-no-change": "La mudifica fu ignurata pirchì nu foru appurtati canci ntô testu.",
        "postedit-confirmation-saved": "Lu canciamentu fu sarbatu.",
-       "edit-already-exists": "Mpussìbbili criari na nova pàggina.\nEsisti ggià.",
+       "edit-already-exists": "Mpussìbbili criari na pàggina nova.\nEsisti ggià.",
        "expensive-parserfunction-warning": "Accura: Sta pàggina cunteni troppi chiamati ê parser functions.\n\nAvissi a èssiri menu di $2, ô mumentu ci {{PLURAL:$1|nn'è $1|nni sunnu $1}}.",
        "expensive-parserfunction-category": "Pàggini cu troppi chiamati ê parser functions",
        "post-expand-template-inclusion-warning": "Accura: la diminzioni di li template nziriti è troppu granni.\nArcuni template non vènunu nziriti.",
        "mergehistory-same-destination": "Li pàggini d'urìggini e di distinazioni non ponnu èssiri la stissa",
        "mergehistory-reason": "Mutivu:",
        "mergelog": "Log d'unioni",
-       "pagemerge-logentry": "havi iunciutu [[$1]] a [[$2]] (rivisioni finu a $3)",
        "revertmerge": "Annulla unioni",
        "mergelogpagetext": "Appressu veni ammustrata na lista dî operazioni cchiù ricenti di unioni dâ storia di na pàggina ni n'autra.",
        "history-title": "$1: crunoluggìa dî canciamenti",
        "searchrelated": "currilati",
        "searchall": "tutti",
        "showingresults": "Ammustra nzinu a {{PLURAL:$1|'''1''' risurtatu|'''$1''' risurtati}} a pàrtiri dô nùmmuru '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Risultatu '''$1''' di '''$3'''|Risultati '''$1 - $2''' di '''$3'''}} pi '''$4'''",
        "search-nonefound": "La circata nun desi nuddu risurtatu.",
        "powersearch-legend": "Ricerca avanzata",
        "powersearch-ns": "Cerca ntê namespace:",
        "recentchanges-label-bot": "Stu canciamentu fu fattu dû bot",
        "recentchanges-label-unpatrolled": "Stu canciamentu nun havi ancora statu virificatu",
        "recentchanges-label-plusminus": "La diminsioni dâ pàggina canciau di stu nùmmuru di bytes",
-       "recentchanges-legend-newpage": "$1 - pàggina nova",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (talìa [[Special:NewPages|li pàggini novi]])",
        "rcnotefrom": "Ccà sutta cci sunnu li canciamenti a pàrtiri dû <b>$2</b> (ammustrati nzinu ô <b>$1</b>).",
        "rclistfrom": "Ammustra li canciamenti novi a pàrtiri di $3 $2",
        "rcshowhideminor": "$1 li canciamenti nichi",
        "statistics": "Statìstichi",
        "statistics-header-pages": "Statistichi pî pàggini",
        "statistics-header-edits": "Statistichi pî canci",
-       "statistics-header-views": "Statistichî pî taliàti",
        "statistics-header-users": "Li statìstichi di l'utilizzatura",
        "statistics-header-hooks": "Autri statistichi",
        "statistics-articles": "Pàggini di cuntinutu",
        "statistics-files": "File carricati",
        "statistics-edits": "Canci a pàrtiri di la nstallazzioni di {{SITENAME}}",
        "statistics-edits-average": "Media dî canci pi pàggina",
-       "statistics-views-total": "Visualizzazioni totali",
-       "statistics-views-peredit": "Visualizzazioni pî canci",
        "statistics-users": "[[Special:ListUsers|Utilizzatura]] riggistrati",
        "statistics-users-active": "Utilizzatura attivi",
        "statistics-users-active-desc": "Utilizzatura chi fìciru n'azzioni {{PLURAL:$1|ni l'ultimu ionnu|nî l'ultimi $1 ionna}}",
-       "statistics-mostpopular": "Pàggini cchiù visitati",
        "doubleredirects": "Rinnirizzamenti duppi",
        "doubleredirectstext": "Chista pàggina alenca li pàggini chi rinnirìzzanu a àutri pàggini di rinnirizzamentu.\nOgnuna riga cunteni li culligamenti a lu primu e a lu secunnu redirect, oltri â prima riga di testu dû secunnu redirect ca di sòlitu cunteni la pàggina di distinazzioni \"curretta\" â quali avissi a puntari macari lu primu redirect.\nLi redirect <del>cancillati</del> furunu curretti.",
        "double-redirect-fixed-move": "[[$1]] fu spustata 'n modu automàticu, ora è nu redirect a [[$2]]",
        "uncategorizedtemplates": "Template senza catigurìi",
        "unusedcategories": "Catigurìi vacanti",
        "unusedimages": "File nun utilizzati",
-       "popularpages": "Pàggini cchiù visitati",
        "wantedcategories": "Catigurìi addumannati",
        "wantedpages": "Artìculi cchiù addumannati",
        "wantedpages-badtitle": "Tìtulu nun validu nô gruppu di risultati: $1",
        "booksources": "Libbra secunnu lu còdici ISBN",
        "booksources-search-legend": "Ricerca di fonti libbrari",
        "booksources-isbn": "Còdici ISBN:",
-       "booksources-go": "Vai",
        "booksources-text": "Di sèquitu veni prisintatu n'alencu di culligamenti versu siti sterni ca vìnninu libbra novi e usati, attraversu li quali è pussìbbili ottèniri maiuri nfurmazzioni supra lu testu circatu:",
        "booksources-invalid-isbn": "L'ISBN datu pari ca nun è vàlidu; cuntrolla l'erruri di ricupiatura dâ surgenti urigginali.",
        "specialloguserlabel": "Utenti:",
        "wlheader-enotif": "La nutìfica via e-mail è attivata.",
        "wlheader-showupdated": "Li pàggini ca hannu statu canciati dâ tò ùrtima vìsita sunnu evidinziati 'n '''grassettu'''",
        "wlnote": "Sutta attrovi l'ùrtim{{PLURAL:$1|u canciamentu|i $1 canciamenti}}, nta l'ùrtim{{PLURAL:$1|a ura|i '''$2''' uri}}.",
-       "wlshowlast": "Ammustra l'ùrtimi $1 uri $2 jorna $3",
+       "wlshowlast": "Ammustra l'ùrtimi $1 uri $2 jorna",
        "watchlist-options": "Opzioni ussirvati spiciali",
        "watching": "Junta a l'ussirvati spiciali...",
        "unwatching": "Scancillazzioni di l'ussirvati spiciali...",
        "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]].",
-       "import-interwiki-source": "Surgenti wiki/pàggina:",
        "import-interwiki-history": "Copia la ntera cronoluggìa di sta pàggina",
        "import-interwiki-templates": "Includi tutti li template",
        "import-interwiki-submit": "Mporta",
        "exif-gpsspeed-n": "Gruppa",
        "exif-gpsdirection-t": "Direzzioni riali",
        "exif-gpsdirection-m": "Direzzioni magnètica",
-       "watchlistall2": "tutti",
        "namespacesall": "Tutti",
        "monthsall": "tutti",
        "confirmemail": "Cunferma ndirizzu e-mail",
        "logentry-delete-delete": "$1 cancillau la pàggina $3",
        "revdelete-restricted": "ristrizzioni ai suli amministratura attivate",
        "revdelete-unrestricted": "ristrizzioni pi suli amministraturi rimossi",
-       "logentry-move-move": "$1 spustau la pàggina $3 a $4",
+       "logentry-move-move": "$1 {{GENDER:$2|spustau}} la pàggina $3 nti $4",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|spustau}} la pàggina $3 nti $4 cu nu rinnirizzamentu",
        "logentry-newusers-create": "$1 criau na utenza",
        "rightsnone": "(nuddu)",
+       "revdelete-summary": "riassuntu dô canciamentu",
        "searchsuggest-search": "Risciduta",
        "api-error-nomodule": "Erruri nternu: nun fu mpustatu lu mòdulu di carricamentu",
        "api-error-ok-but-empty": "Erruri ntenru: nudda risposta dû server",
index caf7d13..3bd9d93 100644 (file)
        "invalidtitle-knownnamespace": "Onvalit title wi namespace \"$2\" n tex \"$3\"",
        "invalidtitle-unknownnamespace": "Onvalit title wi onkent namespace nummer $1 n tex \"$2\"",
        "exception-nologin": "No loggit in",
-       "exception-nologin-text": "Please [[Special:Userlogin|log in]] tae be able tae access this page or action.",
+       "exception-nologin-text": "Please log in tae be able tae access this page or action.",
        "exception-nologin-text-manual": "Please $1 tae be able tae access this page or action.",
        "virus-badscanner": "Bad confeeguration: Onken't virus scanner: <em>$1</em>",
        "virus-scanfailed": "the scan failed (code $1)",
        "passwordreset-emailsent-capture": "Ae passwaird reset wab-mail haas been sent, this is shawn ablow.",
        "passwordreset-emailerror-capture": "Ae passwaird reset wab-mail wis generated, (this is shawn ablow), but sendin it til the {{GENDER:$2|uiser}} failed: $1",
        "changeemail": "Chynge wab-mail address",
-       "changeemail-header": "Chynge accoont wab-mail address",
        "changeemail-text": "Compleate this form tae chynge yer wab-mail address. Ye will need tae enter yer passwaird tae confirm this chynge.",
        "changeemail-no-info": "Ye maun be loggit in tae access this page directly.",
        "changeemail-oldemail": "Current wab-mail address:",
        "changeemail-none": "(nane)",
        "changeemail-password": "Yer {{SITENAME}} passwaird:",
        "changeemail-submit": "Chynge wab-mail",
-       "changeemail-cancel": "Cancel.",
        "changeemail-throttled": "Ye'v makit ower monie recynt login attempts.\nPlease wait $1 afore giein it anither gae.",
        "resettokens": "Reset tokens.",
        "resettokens-text": "Ye can reset tokens that permit ye access til certain private data associated wi yer accoont here.\n\nYe shid dae it gif ye accidentally shaired theim wi somebodie or gif yer accoont haes been compromised.",
        "preview": "Luikower",
        "showpreview": "Shaw luikower",
        "showdiff": "Shaw chynges",
-       "anoneditwarning": "<strong>Warnishment:</strong>Ye'r naw loggit in. Yer IP address will be recordit in this page's eedit histerie.",
+       "anoneditwarning": "<strong>Warnishment:</strong> Ye'r no loggit in. Yer IP address will be publeeclie veesible gif ye mak onie eedits. Gif ye <strong>[$1 log in]</strong> or <strong>[$2 creaute aen accoont]</strong>, yer eedits will be attreebutit tae yer uisername, aes weel aes ither benefits.",
        "anonpreviewwarning": "<em>Ye'r no loggit in. Hainin will record yer IP address in this page's eedit histerie.</em>",
        "missingsummary": "<strong>Mynd:</strong> Ye'v naw gien aen eedit owerview. Gif ye clap oan \"{{int:savearticle}}\" again, yer eedit will be haint wioot ane.",
        "missingcommenttext": "Please enter ae comment ablo.",
        "parser-template-recursion-depth-warning": "Template recursion depth limit owershote ($1)",
        "language-converter-depth-warning": "Leid converter depth limit owershote ($1)",
        "node-count-exceeded-category": "Pages whaur node-coont is owershote",
-       "node-count-exceeded-warning": "Page owershote the node-coont",
+       "node-count-exceeded-warning": "Page owershot the node coont",
        "expansion-depth-exceeded-category": "Pages whaur expansion depth is owershote",
        "expansion-depth-exceeded-warning": "Page owershote the expansion depth",
        "parser-unstrip-loop-warning": "Unstrip luip detected",
        "mergehistory-same-destination": "Soorce n destination pages canna be the same",
        "mergehistory-reason": "Raison:",
        "mergelog": "Merge log.",
-       "pagemerge-logentry": "merged [[$1]] intil [[$2]] (reveesions up til $3)",
        "revertmerge": "Onmerge",
        "mergelogpagetext": "Ablow is ae leet o the maist recent merges o yin page histerie intil anither.",
        "history-title": "Reveesion histerie o \"$1\"",
        "searchall": "aw",
        "showingresults": "Shawin ablo up tae {{PLURAL:$1|'''1''' ootcome|'''$1''' ootcomes}} stertin wi #'''$2'''.",
        "showingresultsinrange": "Shawin ablo up til {{PLURAL:$1|<strong>1</strong> ootcome|<strong>$1</strong> ootcome}} in range #<strong>$2</strong> til #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Ootcome <strong>$1</strong> o <strong>$3</strong>|Ootcomes <strong>$1 - $2</strong> o <strong>$3</strong>}} fer <strong>$4</strong>",
        "search-nonefound": "Thaur were naw ootcomes matchin the speiring.",
        "powersearch-legend": "Advanced rake",
        "powersearch-ns": "Rake in namespaces:",
        "preferences": "Ma preferences",
        "mypreferences": "Ma preferences",
        "prefs-edits": "Nummer o eidits:",
-       "prefsnologintext2": "Please $1 tae chynge yer preferences.",
+       "prefsnologintext2": "Please log in tae chynge yer preferences.",
        "prefs-skin": "Skin",
        "skin-preview": "First Leuk",
        "datedefault": "Nae preferance",
        "nolicense": "Nane selectit",
        "licenses-edit": "Eedit license options",
        "license-nopreview": "(Luikower naw available)",
-       "upload_source_url": "(ae valid, publeeclie accessible URL)",
-       "upload_source_file": "(ae file oan yer computer)",
+       "upload_source_url": "(yer chosen file fae ae valid, publeeclie accessible URL)",
+       "upload_source_file": "(yer chosen file fae yer computer)",
        "listfiles-summary": "This speecial page shaws aw uplaided files.",
        "listfiles_search_for": "Rake fer media name:",
        "imgfile": "file",
        "randomincategory": "Random page in categerie",
        "randomincategory-invalidcategory": "\"$1\" isna ae valid categerie name.",
        "randomincategory-nopages": "Thaur's naw pages in the [[:Category:$1|$1]] categerie.",
-       "randomincategory-selectcategory": "Get random page fae categerie: $1 $2.",
-       "randomincategory-selectcategory-submit": "Gae",
        "randomredirect": "Random reguidal",
        "randomredirect-nopages": "Thaur's naw reguidals in the namespace \"$1\".",
        "statistics": "Stateestics",
        "statistics-header-pages": "Page stateestics",
        "statistics-header-edits": "Eidit stateestics",
-       "statistics-header-views": "See stateesteecs",
        "statistics-header-users": "Uiser stateestics",
        "statistics-header-hooks": "Ither stateestics",
        "statistics-pages": "Pages",
        "statistics-files": "Uplaided files",
        "statistics-edits": "Page eedits sin {{SITENAME}} wis set up",
        "statistics-edits-average": "Average eedits per page",
-       "statistics-views-total": "Seeins total",
-       "statistics-views-total-desc": "Seeins til non-exeestant pages n speecial pages'r naw incluidit",
-       "statistics-views-peredit": "Seeins per eedit",
        "statistics-users": "Registered [[Special:ListUsers|uisers]]",
        "statistics-users-active": "Acteeve uisers",
        "statistics-users-active-desc": "Uisers that hae performed aen action in the laist {{PLURAL:$1|day|$1 days}}",
-       "statistics-mostpopular": "Maist seen pages",
        "pageswithprop": "Pages wi ae page propertie",
        "pageswithprop-legend": "Pages wi ae page propertie",
        "pageswithprop-text": "This page leets pages that uise ae particular page propertie.",
        "querypage-disabled": "This speecial page is disablit fer performance raisons.",
        "booksources": "Buik soorces",
        "booksources-search-legend": "Rake fer buik soorces",
-       "booksources-go": "Gang",
        "booksources-text": "Ablo is ae leet o airtins til ither steids that sell new n uised buiks, n micht hae further information aneat buiks that ye'r seekin ava:",
        "booksources-invalid-isbn": "The gien ISBN disna seem tae be valid; check fer mistaks copiein fae the oreeginal soorce.",
        "specialloguserlabel": "Performer:",
        "trackingcategories-desc": "Categerie inclusion criteria",
        "noindex-category-desc": "The page haes ae <code><nowiki>__NOINDEX__</nowiki></code> mageec waird oan it (n is in ae namespace whaur that flag is alloud), n sae it's no indext bi the robots.",
        "index-category-desc": "The page haes ae <code><nowiki>__INDEX__</nowiki></code> oan it (n is in ae namespace whaur that flag is alloud), n sae it's indext bi the robots whaur it widna normallie be.",
-       "post-expand-template-inclusion-category-desc": "Efter makin aw o the templates muckler, the page size is muckler than <code>$wgMaxArticleSize</code>, sae some templates were no makit muckler.",
-       "post-expand-template-argument-category-desc": "Efter makin ae template argument muckler (sommit in triple braces, lik <code>{{{Foo}}})</code>, the page is muckler than <code>$wgMaxArticleSize</code>.",
-       "expensive-parserfunction-category-desc": "Ower monie expenseeve parser functions (lik <code>#ifexist</code>) incluidit oan ae page. See [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
-       "broken-file-category-desc": "Categerie eikit gif the page contains ae broken file airtin (aen airtin tae embed ae file whan the file disna exeest).",
-       "hidden-category-category-desc": "This is ae categerie wi <code><nowiki>__HIDDENCAT__</nowiki></code> oan it, This prevents it fae shawin up in the categerie airtins kist oan pages, bi defaut.",
+       "post-expand-template-inclusion-category-desc": "The page size is muckler than <code>$wgMaxArticleSize</code>, efter makin aw o the templates muckler, sae some templates were no makit muckler.",
+       "post-expand-template-argument-category-desc": "The page is muckler than <code>$wgMaxArticleSize</code> efter makin ae template argument muckler (sommit in triple braces, lik <code>{{{Foo}}})</code>.",
+       "expensive-parserfunction-category-desc": "The page uises ower monie expenseeve parser functions (lik <code>#ifexist</code>). See [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "The page contains ae broken file airtin (aen airtin tae embed ae file whan the file disna exeest).",
+       "hidden-category-category-desc": "The categerie contains <code><nowiki>__HIDDENCAT__</nowiki></code> in its page content, this hinders it fae shawin up in the categerie airtins kist oan pages, bi defaut.",
        "trackingcategories-nodesc": "Nae descreeption is available.",
        "trackingcategories-disabled": "The categerie is disabled",
        "mailnologin": "Nae send address",
        "mywatchlist": "Ma watchleet",
        "watchlistfor2": "Fer $1 $2",
        "nowatchlist": "Ye'v nae eitems oan yer watchleet.",
-       "watchlistanontext": "Please $1 tae see or eedit eetems oan yer watchlet.",
+       "watchlistanontext": "Please login tae see or eedit eetems oan yer watchlet.",
        "watchnologin": "Nae loggit in",
        "addwatch": "Eik til watchleet",
        "addedwatchtext": "The page \"[[:$1]]\" haes been added til yer [[Special:Watchlist|watchleet]].\nFutur chynges til this page n its associated tauk page will be leeted thaur.",
        "watchlist-details": "{{PLURAL:$1|$1 page|$1 pages}} oan yer watchleet, no coontin tauk pages seperatlie.",
        "wlheader-enotif": "Wab-mail annooncemant is enabled.",
        "wlheader-showupdated": "Pages that hae been chynged sin ye last veesitit thaim ar shawn in '''baud'''.",
-       "wlnote": "Ablo {{PLURAL:$1|is the laist chynge|ae the laist '''$1''' chynges}} in the laist {{PLURAL:$2|hoor|'''$2''' hoors}}, aes o $3, $4.",
-       "wlshowlast": "Shaw hainmaist $1 hoors $2 days $3",
+       "wlnote": "Ablo {{PLURAL:$1|is the laist chynge|ae the laist <strong>$1</strong> chynges}} in the laist {{PLURAL:$2|hoor|<strong>$2</strong> hoors}}, aes o $3, $4.",
+       "wlshowlast": "Shaw hainmaist $1 hoors $2 days",
        "watchlist-options": "Watchleet opties",
        "watching": "Watchin...",
        "unwatching": "Onwatchin...",
        "exbeforeblank": "content afore blankin wis: '$1'",
        "delete-confirm": "Delyte \"$1\"",
        "delete-legend": "Delyte",
-       "historywarning": "<strong>Warnishment:</strong> The page that ye'r aboot tae delyte haes ae histerie wi approximatelie $1 {{PLURAL:$1|reveesion|reveesions}}:",
+       "historywarning": "<strong>Warnishment:</strong> The page that ye'r aboot tae delyte haes ae histerie wi $1 {{PLURAL:$1|reveesion|reveesions}}:",
        "confirmdeletetext": "Ye'r aboot tae delyte ae page or eemage alang wi aw its histerie fae the database.\nPlease confirm that ye intend tae dae this, that ye unnerstaun the consequences,\nn that ye'r daein this in accord wi [[{{MediaWiki:Policy-url}}]].",
        "actioncomplete": "Action duin",
        "actionfailed": "Action failed",
        "autoblockid": "Autæblock #$1",
        "block": "Block uiser",
        "unblock": "Onblock uiser",
-       "blockip": "Block uiser",
+       "blockip": "Block {{GENDER:$1|uiser}}",
        "blockip-legend": "Block uiser",
        "blockiptext": "Uise the form ablo tae block write access fae ae speceefic IP address or uisername. This shid be dun juist tae hinder vandaleesm, n in accord wi [[{{MediaWiki:Policy-url}}|policie]]. Fil in ae speceefic raison ablo (fer exemplar, citin parteecular pages that were vandalised).",
        "ipaddressorusername": "IP address or uisername:",
        "ipb-unblock-addr": "Onblock $1",
        "ipb-unblock": "Onblock ae uisername or IP address",
        "ipb-blocklist": "See exeestin blocks",
-       "ipb-blocklist-contribs": "Contreebutions fer $1",
+       "ipb-blocklist-contribs": "Contreebutions fer {{GENDER:$1|$1}}",
        "unblockip": "Onblock uiser",
        "unblockiptext": "Uise the form ablo tae restore screevin richts\ntil aen afore-blockit IP address or uisername.",
        "ipusubmit": "Remuive this block",
        "thumbnail_image-missing": "File seems tae be missin: $1",
        "thumbnail_image-failure-limit": "Thaur hae been ower monie recynt failed attempts ($1 or mair) tae render this thummnail. Please ettle again later.",
        "import-interwiki-text": "Select ae wiki n page title tae import.\nReveesion dates n eediters' names will be preserved.\nAw transwiki import actions ar loggit at the [[Special:Log/import|import log]].",
-       "import-interwiki-source": "Soorce wiki/page:",
        "import-interwiki-history": "Copie aw histerie reveesions fer this page",
        "import-interwiki-templates": "Incluid aw templates",
        "import-interwiki-namespace": "Desteenation namespace:",
        "tooltip-recreate": "Recræft the page even thoogh it's been delytit",
        "tooltip-upload": "Stairt uplaid",
        "tooltip-rollback": "\"Rowback\" reverts eedit(s) til this page o the laist contreebuter in yin clap",
-       "tooltip-undo": "\"Ondae\" reverts this eedit n apens the eedit form in luikower mode. It permits addin ae raison in the owerview.",
+       "tooltip-undo": "\"Ondae\" reverts this eedit n apens the eedit form in luikower mode. It allous eikin ae raison in the owerview.",
        "tooltip-preferences-save": "Hain preeferances",
        "tooltip-summary": "Enter ae short owerview",
        "anonymous": "Nameless {{PLURAL:$1|uiser|uisers}} o {{SITENAME}}",
        "pageinfo-robot-policy": "Indexin bi robots",
        "pageinfo-robot-index": "Permitit",
        "pageinfo-robot-noindex": "Na permitit",
-       "pageinfo-views": "Nummer o luiks",
        "pageinfo-watchers": "Nummer o page watchers",
        "pageinfo-few-watchers": "Less than $1 {{PLURAL:$1|watcher|watchers}}",
        "pageinfo-redirects-name": "Nummer o reguidals til this page",
        "exif-urgency-low": "Law ($1)",
        "exif-urgency-high": "Hei ($1)",
        "exif-urgency-other": "Uiser-defined prioritie ($1)",
-       "watchlistall2": "aw",
        "namespacesall": "aw",
        "monthsall": "aw",
        "confirmemail": "Confirm wab-mail address",
        "watchlistedit-normal-done": "{{PLURAL:$1|1 title wis|$1 titles were}} remuived fae yer watchleet:",
        "watchlistedit-raw-title": "Eedit raw watchleet",
        "watchlistedit-raw-legend": "Eedit raw watchleet",
-       "watchlistedit-raw-explain": "Titles oan yer watchleet ar shawn ablo, n can be eeditit bi addin til n remuivin fae the leet;\nyin title per line.\nWhan dun, clap \"{{int:Watchlistedit-raw-submit}}\".\nYe can [[Special:EditWatchlist|uise the staundairt eediter]] ava.",
+       "watchlistedit-raw-explain": "Titles oan yer watchleet ar shawn ablo, n can be eeditit bi eikin til n remuivin fae the leet;\nyin title per line.\nWhan dun, clap \"{{int:Watchlistedit-raw-submit}}\".\nYe can [[Special:EditWatchlist|uise the staundairt eediter]] n aw.",
        "watchlistedit-raw-submit": "Update watchleet",
        "watchlistedit-raw-done": "Yer watchleet haes been updated.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 title wis|$1 titles were}} added:",
        "logentry-rights-autopromote": "$1 wis autæmateeclie {{GENDER:$2|promoted}} fae $4 til $5",
        "rightsnone": "(nane)",
        "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-adding": "Addin feedback til page...",
+       "feedback-adding": "Eikin feedback til page...",
        "feedback-error1": "Mistak: Onrecognised ootcome fae API",
        "feedback-error2": "Mistak: Eedit failed",
        "feedback-error3": "Mistak: Naw response fae API",
index c6d69e9..8bb2d3f 100644 (file)
@@ -2,18 +2,28 @@
        "@metadata": {
                "authors": [
                        "Aursani",
-                       "아라"
+                       "아라",
+                       "Fayazburiro"
                ]
        },
-       "tog-showtoolbar": "سنوارپ اوزار دٻي ڏيکاريو (جاوا اسڪرپٽ)",
-       "tog-watchcreations": "منهنجا سرجيل صفحا منهنجي ٽيٽ فهرست ۾ رکو",
-       "tog-watchdefault": "منهنجا ترميميل صفحا منهنجي ٽيٽ فهرست تي رکو",
+       "tog-underline": "هيٺان ڏنل لڪير واري لنڪ",
+       "tog-hideminor": "تازيون ننڍيون تبدليون لڪايو",
+       "tog-hidepatrolled": "تازيون گھميل تبديليون لڪايو",
+       "tog-newpageshidepatrolled": "نئين صفحن تان تازي گھميل صفحي جي لسٽ لڪايو",
+       "tog-numberheadings": "خودڪار نمبرن واري هيڊنگ",
+       "tog-showtoolbar": "ايڊٽ بار ڏيکاريو",
+       "tog-editondblclick": "ٻٽي ڪلڪ تي صفحا ايڊت ڪيو",
+       "tog-watchcreations": "منهنجا سرجيل صفحا منهنجي نهار فهرست ۾ رکو",
+       "tog-watchdefault": "منهنجا ترميميل صفحا منهنجي نهار فهرست تي رکو",
        "tog-watchdeletion": "آئون جيڪي صفحا ڊاهيان، سي منهنجي ٽيٽ فهرست تي رکو",
+       "tog-watchrollback": "انهن صفحن کي منهنجي ٽيٽ فهرست تي رکو، جن ۾ تبديلين کي مون واپس ورايو آهي.",
        "tog-previewontop": "ترميمي باڪس مٿان پيش نگاهه ڏيکاريو",
        "tog-previewonfirst": "پهرين ترميم تي پيش نگاهه ڏيکاريو",
        "tog-enotifusertalkpages": "منهنجي مباحثي صفحي ۾ تبديليءَ جي صورت ۾ مون کي برق ٽپال اماڻيو",
-       "tog-enotifminoredits": "صفحن ۾ معمولي ترميمن جي صورت ۾ به مون کي برق ٽپال ڪريو",
+       "tog-enotifminoredits": "صفحن ۾ معمولي ترميمن جي صورت ۾ بہ مون کي برق ٽپال ڪريو",
        "tog-shownumberswatching": "ٽيٽيندڙ يوزرس جو تعداد ڏيکاريو",
+       "tog-oldsig": "موجوده دستخط",
+       "tog-watchlisthideliu": "لاگ اِن ٿيل يوزرس جون ڪيل ترميمون ٽيٽ فهرست ۾ نہ ڏيکاريو",
        "tog-ccmeonemails": "ٻين يوزرس ڏانهن منهنجي موڪليل برق ٽپال جو پرت مون کي اماڻيو",
        "tog-diffonly": "تفاوت هيٺان صفحي جو مواد نه ڏيکاريو",
        "tog-showhiddencats": "لڪل زمرا ڏيکاريو",
        "oct": "آڪٽوبر",
        "nov": "نومبر",
        "dec": "ڊسمبر",
+       "january-date": "جنوري $1",
+       "february-date": "فيبروري $1",
+       "march-date": "مارچ $1",
+       "april-date": "اپريل $1",
+       "may-date": "مَي $1",
+       "june-date": "جُون $1",
+       "july-date": "جُولاءِ $1",
+       "august-date": "آگسٽ $1",
+       "september-date": "سيپٽمبر $1",
+       "october-date": "آڪٽوبر $1",
+       "november-date": "نَوِمبر $1",
+       "december-date": "ڊسمبر $1",
        "category_header": "\"$1\" زمري جا صفحا",
        "subcategories": "ذيلي زمرا",
        "category-media-header": " \"$1\" زمري اندر ذريعات",
        "cancel": "رد",
        "moredotdotdot": "اڃا...",
        "mypage": "منهنجو صفحو",
-       "mytalk": "مون سان ڳالهه",
+       "mytalk": "ڳاله ٻوله",
        "and": "&#32;۽",
        "qbfind": "ڳوليو",
        "qbbrowse": "جھانگيو",
        "printableversion": "ڇپائتو پرت",
        "permalink": "مسقتل ڳنڍڻو",
        "print": "ڇاپيو",
+       "view": "نگاهہ",
        "edit": "سنواريو",
+       "edit-local": "مقامي وضاحت کي ترميميو",
        "create": "سرجيو",
        "editthispage": "هيءُ صفحو سنواريو",
        "create-this-page": "اهو صفحو نئين سر جوڙيو",
        "delete": "ڊاھيو",
        "deletethispage": "هيءُ صفحو ڊاهيو",
+       "undeletethispage": "هيءُ صفحو اڻ ڊاهيو",
        "undelete_short": "اڻڊاهيو {{PLURAL:$1|هڪ ترميم|$1 ترميمون}}",
        "protect": "تحفظيو",
+       "protect_change": "تبديل ڪريو",
        "protectthispage": "هيءُ صفحو تحفظيو",
-       "unprotect": "اڻتحÙ\81ظيو",
-       "unprotectthispage": "Ù\87Ù\8aØ¡Ù\8f ØµÙ\81Ø­Ù\88 Ø§Ú»ØªØ­Ù\81ظيو",
+       "unprotect": "Ø­Ù\81اظت Ù\85Ù½يو",
+       "unprotectthispage": "Ù\87Ù\86 ØµÙ\81Ø­Ù\8a Ø¬Ù\8a Ø­Ù\81اظت Ù\85Ù½يو",
        "newpage": "نئون صفحو",
        "talkpage": "هن صفحي تي بحث ڪريو",
        "talkpagelinktext": "بحث",
        "articlepage": "مسودو ڏسو",
        "talk": "بحث",
        "views": "ڏيٺون",
-       "toolbox": "اوزاردٻي",
+       "toolbox": "ٽولَ",
        "userpage": "يوزر صفحو ڏسو",
        "projectpage": "رٿائي صفحو ڏسو",
        "imagepage": "ذريعاتي صفحو ڏسو",
        "otherlanguages": "ٻين ٻولين ۾",
        "redirectedfrom": "($1 کان چوريل)",
        "redirectpagesub": "چوريل صفحو",
+       "redirectto": "منتقل ڪيو",
        "lastmodifiedat": "هيءُ صفحو آخري ڀيرو $2، $1ع تي ترميميو ويو هو.",
        "viewcount": "هيءُ صفحو {{PLURAL:$1|دفعو|$1 دفعا}} ڏسجي چڪو آهي.",
        "protectedpage": "تحفظيل صفحو",
+       "jumpto": "ڏانهن ٽپ ڏيو",
+       "jumptonavigation": "رهنمائي",
        "jumptosearch": "ڳولا",
+       "generic-pool-error": "معذرت سان سرور هاڻي تمام گھڻو سُڪ آهي.\nتمام گھڻا يوزر هتي موجود آهن.\nمهرباني ڪري ٿورو ترسي پوءِ ڪوشش ڪريو.",
+       "pool-errorunknown": "اڻ ڄاتل چُڪَ",
        "aboutsite": "{{SITENAME}} بابت",
        "aboutpage": "Project:بابت",
        "copyright": "سمورو مواد $1 تحت ميسر ڪجي ٿو",
        "portal-url": "Project:نياتي باب",
        "privacy": "ذاتيات پاليسي",
        "privacypage": "Project:ذاتيات پاليسي",
+       "badaccess": "اجازتنامہ چُڪَ",
        "ok": "ٺيڪ",
        "retrievedfrom": "\"$1\" تان ورتل",
        "youhavenewmessages": "توهان لاءِ $1 ($2) آهن.",
+       "youhavenewmessagesmulti": "$1 تي توهان لاءِ نوان نياپا آهن",
        "editsection": "سنواريو",
        "editold": "سنواريو",
        "viewsourceold": "ڪوڊ ڏسو",
        "toc": "فهرست",
        "showtoc": "ڏيکاريو",
        "hidetoc": "لڪايو",
+       "confirmable-yes": "ها",
+       "confirmable-no": "نه",
        "viewdeleted": "$1 ڏسندا؟",
        "feedlinks": "روان رسد:",
        "site-rss-feed": "$1 آر ايس ايس روان رسد",
        "unwatch": "اڻ ٽيٽيو",
        "unwatchthispage": "ٽيٽڻ ڇڏيو",
        "watchlist-details": "مباحثي صفحن کان سواءِ {{PLURAL:$1|$1 صفحو|$1 صفحا}} ٽيٽيل.",
-       "wlshowlast": "پوين $1 ڪلاڪن $2 ڏينهن جا $3 ڏيکاريو",
+       "wlshowlast": "پوين $1 ڪلاڪن $2 ڏينهن جا  ڏيکاريو",
        "watching": "ٽيٽيندي...",
        "unwatching": "اڻ ٽيٽيندي...",
        "created": "ٺهي چڪو",
        "exif-gpsspeed-k": "ڪلوميٽر في ڪلاڪ",
        "exif-gpsspeed-m": "ميل في ڪلاڪ",
        "exif-gpsspeed-n": "ڳنڍيون",
-       "watchlistall2": "سڀ",
        "namespacesall": "سڀ",
        "monthsall": "سڀ",
        "confirmemail_success": "توھان جي برق ٽپال جي پڪ ڪئي وئي آھي. ھاڻِ توھان لاگ ان ٿي وڪيءَ جو مزو وٺي سگھو ٿا",
index 57e7818..f97f953 100644 (file)
        "mergehistory-invalid-destination": "La pàgina di disthinazioni débi abé un tìturu currettu.",
        "mergehistory-reason": "Mutibu:",
        "mergelog": "Rigisthru di l'unioni",
-       "pagemerge-logentry": "ha uniddu [[$1]] a [[$2]] (ribisioni finz'a $3)",
        "revertmerge": "Anulla unioni",
        "mergelogpagetext": "Inogghi v'è una listha di l'ulthimi operazioni d'unioni di la cronologia d'una pàgina in un'althra.",
        "history-title": "Cronologia di li mudìfigghi di \"$1\"",
        "searchrelated": "curriraddi",
        "searchall": "tutti",
        "showingresults": "Accó {{PLURAL:$1|màssimu '''1''' risulthaddu|màssimu li '''$1''' risulthaddi}} à partì da lu nùmaru #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Risulthaddu '''$1''' of '''$3'''|Risulthaddi '''$1 - $2''' di '''$3'''}} pa '''$4'''",
        "search-nonefound": "Nisciuni risulthaddi pa la to' zercha",
        "powersearch-legend": "Zercha abanzadda",
        "powersearch-ns": "Zercha i' li tipi di pàgina:",
        "statistics": "Sthatisthigghi",
        "statistics-header-users": "Sthatisthigghi reratibi a l'utenti",
        "statistics-pages": "Pagini",
-       "statistics-mostpopular": "Pàgini più visitaddi",
        "doubleredirects": "Rinvii doppi",
        "doubleredirectstext": "Inogghi v'è una listha di li pàgini chi puntani a pàgini di rinviu. Ogna riga cunteni i cullegamenti a lu primmu e sigundu rinviu, cumenti a la disthinazioni di lu sigundu rinviu, che noimmaimmenti è la pàgina \"curretta\" a la quari dubia puntà puru lu primmu rinviu.",
        "brokenredirects": "Rinvii ibbagliaddi",
        "uncategorizedtemplates": "Mudelli chena categuri",
        "unusedcategories": "Categuri inutirizaddi",
        "unusedimages": "File inutirizaddi",
-       "popularpages": "Pàgini più visitaddi",
        "wantedcategories": "Categuri dumandaddi",
        "wantedpages": "Pàgini più dumandaddi",
        "mostlinked": "Pàgini più riciamaddi",
        "pager-older-n": "{{PLURAL:$1|1 mancu rizzenti|$1 mancu rizzenti}}",
        "booksources": "Rifirimenti di libri",
        "booksources-search-legend": "Zercha rifirimenti di libri",
-       "booksources-go": "Vai",
        "booksources-text": "Inogghi v'è una listha di cullegamenti bessu siti estherni chi vindani libri nobi e usaddi, attrabessu li quari è pussìbiri uttinì maggiori infuimmazioni i' lu testhu zirchaddu.",
        "specialloguserlabel": "Utenti:",
        "speciallogtitlelabel": "Tìturu:",
        "wlheader-enotif": "La nutìfica via postha erettrònica è attiba.",
        "wlheader-showupdated": "Li pàgini chi so isthaddi mudìfiggaddi daboi l'ulthima vìsita so evidenziaddi in '''grasseddu'''",
        "wlnote": "Inogghi {{PLURAL:$1|è erencadda la mudìfigga più rizzenti arriggadda|so erencaddi li '''$1''' mudìfigghi più rizzenti arriggaddi}} {{PLURAL:$2|i' la ulthima ora|i' li ulthimi '''$2''' ori}}.",
-       "wlshowlast": "Musthra li ulthimi $1 ori $2 dì $3",
+       "wlshowlast": "Musthra li ulthimi $1 ori $2 dì",
        "watchlist-options": "Opzioni abbaidaddi ippiziari",
        "watching": "Aggiunta a l'abbaidaddi ippiziari...",
        "unwatching": "Eliminazioni da l'abbaidaddi ippiziari...",
        "exif-sharpness-2": "Maggiori nitiddèzia",
        "exif-subjectdistancerange-0": "Ischuniscidda",
        "exif-gpsspeed-n": "Nodi",
-       "watchlistall2": "tutti",
        "namespacesall": "tutti",
        "monthsall": "tutti",
        "confirmemail": "Cunfèimma indirizzu di postha erettrònica",
index 85bf781..22bb621 100644 (file)
        "statistics-users": "Registrerejuvvon [[Special:ListUsers|geavaheaddjit]]",
        "statistics-users-active": "Aktiivvalaš geavaheaddjit",
        "statistics-users-active-desc": "Geavaheaddjit, geat leat bargan juoidá maŋimus {{PLURAL:$1|beaivvi|$1 beaivvi}} áigge.",
-       "statistics-mostpopular": "Eanemusta gehčojuvvon siiddut",
        "doubleredirects": "Guovttegeardán ođđasitstivremat",
        "brokenredirects": "Bieđganan ođđasitstivremat",
        "brokenredirectstext": "Čuovvovaš ođđasitstivremat leat artihkkaliidda, mat eai dihtto.",
        "uncategorizedtemplates": "Mállevuođut mat eai gula ovttage luohkkái",
        "unusedcategories": "Geavatkeahtes luohkát",
        "unusedimages": "Geavatkeahtes fiillat",
-       "popularpages": "Bivnnuhis siiddut",
        "wantedcategories": "Luohkkásávaldagat",
        "wantedpages": "Siidusávaldagat",
        "mostlinked": "Siiddut maidda čujuhuvvo dávjjimustá",
        "notargettext": "It leat meroštallan mearresiiddu dahje -geavaheaddji, masa dahku laktása.",
        "booksources": "Girjegáldut",
        "booksources-search-legend": "Oza girjegálduid",
-       "booksources-go": "Oza",
        "booksources-text": "Vuolábealde leat liŋkkat olggobeal siidduide, main vuvdojuvvot ođđa ja boares girjjid. Siiddui sáhttá maid leat lassedieđut girjjiin.",
        "specialloguserlabel": "Geavaheaddji:",
        "speciallogtitlelabel": "Mearri",
        "wlheader-enotif": "E-poastaalmmuhusat leat anus.",
        "wlheader-showupdated": "Siiddut, mat leat rievdaduvvon du maŋimus geavahangearddi maŋŋá leat merkojuvvon '''buoiddes teavsttain'''",
        "wlnote": "Vuolábealde lea '''$1''' {{PLURAL:$1|rievdadus|rievdadusa}} maŋimus {{PLURAL:$2||'''$2'''}} diimma siste.",
-       "wlshowlast": "Čájet maŋimus $1 diimmu dahje $2 beaivvi $3",
+       "wlshowlast": "Čájet maŋimus $1 diimmu dahje $2 beaivvi",
        "watching": "Lasihuvvo čuovvunlistui...",
        "unwatching": "Sihkojuvvo čuovvunlisttus...",
        "enotif_reset": "Merke buot siidduid gehččojuvvon",
        "exif-gpsspeed-k": "km/h",
        "exif-gpsspeed-m": "miilla diimmus",
        "exif-gpsspeed-n": "čuolmma",
-       "watchlistall2": ", olles historjjá",
        "namespacesall": "buot",
        "monthsall": "buot",
        "confirmemail": "Sihkaraste e-poastačujuhusa",
index 813f64b..d3a576f 100644 (file)
        "ancientpages": "Xeperesistant páhinám",
        "move": "Yacom",
        "movethispage": "Yacom jan páhina",
-       "booksources-go": "Caátemöx",
        "specialloguserlabel": "Caitom:",
        "speciallogtitlelabel": "Titlenam:",
        "log": "Logám",
        "watchthispage": "Cáminot jan páhina",
        "unwatch": "Diicáminot",
        "unwatchthispage": "Diicáminot jan páhina",
-       "wlshowlast": "Cohuatlöx hun $1 ixáap quij iitax $2 ixáap $3",
+       "wlshowlast": "Cohuatlöx hun $1 ixáap quij iitax $2 ixáap",
        "watching": "Cáminot...",
        "unwatching": "Necáminot...",
        "enotif_impersonal_salutation": "{{SITENAME}} caitom",
        "exif-gpsaltitude": "Altitudam",
        "exif-subjectdistance-value": "$1 miitrenám",
        "exif-focalplaneresolutionunit-2": "inchám",
-       "watchlistall2": "jöxdem",
        "namespacesall": "jöxdem",
        "monthsall": "jöxdem",
        "confirm_purge_button": "ton",
diff --git a/languages/i18n/ses.json b/languages/i18n/ses.json
new file mode 100644 (file)
index 0000000..d79e3c4
--- /dev/null
@@ -0,0 +1,1773 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Songhay"
+               ]
+       },
+       "tog-underline": "Dobu ganda-žeeriyan:",
+       "tog-hideminor": "Fasal kayney kaŋ hun barmayyaŋ korawey ra tugu",
+       "tog-hidepatrolled": "Fasalyan kurantey tugu barmay korawey ra",
+       "tog-newpageshidepatrolled": "Moo kurantey tugu moo taaga maašeedaa ra",
+       "tog-extendwatchlist": "Hawgay maašeedaa hayandi ka barmawey kul cebe, manti ikokorantaa hinne",
+       "tog-usenewrc": "Barmawey marga moo bande barmay korawey nda hawgayhayey ra",
+       "tog-numberheadings": "Boŋdekerey boŋkabuyan",
+       "tog-showtoolbar": "Goyjinay žeeri fasalyan cebe",
+       "tog-editondblclick": "Naagu cee hinka ka moɲey fasal",
+       "tog-editsectiononrightclick": "Kanbe guma dunbu maaɲey naagu ka dunbu fasalyan tunandi",
+       "tog-watchcreations": "Moɲey kaŋ ay k'i tee nda tukey kaŋ ay g'i zumandi tonton ay hawgayhayey ga",
+       "tog-watchdefault": "Moɲey nda tukey kaŋ ay g'i fasal tonton ay hawgayhayey ga",
+       "tog-watchmoves": "Moɲey nda tukey kaŋ ay g'i ganandi tonton ay hawgayhayey ga",
+       "tog-watchdeletion": "Moɲey nda tukey kaŋ ay g'i tuusu tonton ay hawgayhayey ga",
+       "tog-watchrollback": "Moɲey kaŋ ay n'i taagandi tonton ay hawgayhayey ga",
+       "tog-minordefault": "Fasalyaney kul šilbay sanda ikaynayaŋ nda tilasu",
+       "tog-previewontop": "Moofuryan cebe jina fasal bataa ra",
+       "tog-previewonfirst": "Moofuryan cebe fasalyan jinaa ra",
+       "tog-enotifwatchlistpages": "Bataga sanba yane waati kaŋ moo wala tuku kaŋ goo ay hawgayhayey ra barmay",
+       "tog-enotifusertalkpages": "Bataga sanba yane waati kaŋ ay goykaw šenni moɲoo barmay",
+       "tog-enotifminoredits": "Bataga sanba yane da nda moɲey nda tukey barmay kayna",
+       "tog-enotifrevealaddr": "Ay bataga aderesoo cebe bayrandi batagawey ra",
+       "tog-shownumberswatching": "Goykey kaŋ ga moɲoo hawgay hinnaa cebe",
+       "tog-oldsig": "Kanbežeeri barantaa:",
+       "tog-fancysig": "Kanbežeero tee sanda wikihantum (bila nda nga boŋdobu)",
+       "tog-uselivepreview": "Moofuryan goywaati ra (šiiyan)",
+       "tog-forceeditsummary": "Ay šaawar nda ya na fasal durandiyan dam",
+       "tog-watchlisthideown": "Ay boŋ fasalyaney tugu hawgayhayey ra",
+       "tog-watchlisthidebots": "Maršin fasalyaney tugu hawgayhayey ra",
+       "tog-watchlisthideminor": "Fasalyan kayney tugu hawgayhayey ra",
+       "tog-watchlisthideliu": "Goykaw hurantey fasalyaney tugu hawgayhayey ra",
+       "tog-watchlisthideanons": "Goykaw tugantey fasalyaney tugu hawgayhayey ra",
+       "tog-watchlisthidepatrolled": "Faslayan kurantey tugu hawgayhayey ra",
+       "tog-ccmeonemails": "Batagawey kaŋ ay g'i sanba goykaw taney se gaabu yane",
+       "tog-diffonly": "Ma ši moo gundekuna cebe fayarey cire",
+       "tog-showhiddencats": "Duni tugantey cebe",
+       "tog-norollbackdiff": "Ma ši fayari cebe taagandiyan waate",
+       "tog-useeditwarning": "Ay šaawar waati kaŋ ay ga fasal moo naŋ bila nda barmawey ma gaabundi",
+       "tog-prefershttps": "Ciyari saajante tee waati kul ka huru",
+       "underline-always": "Waati kul",
+       "underline-never": "Abada",
+       "underline-default": "Kuusu wala ceecikaw tilasu",
+       "editfont-style": "Ganda šigira alhaali fasal:",
+       "editfont-default": "Ceecikaw tilasu",
+       "editfont-monospace": "Šigira kankamante",
+       "editfont-sansserif": "Šigira mulla",
+       "editfont-serif": "Šigiri yutta",
+       "sunday": "Alhadi",
+       "monday": "Atinni",
+       "tuesday": "Atalaata",
+       "wednesday": "Alarba",
+       "thursday": "Alhamiisa",
+       "friday": "Alzuma",
+       "saturday": "Asibti",
+       "sun": "Ahd",
+       "mon": "Atn",
+       "tue": "Atl",
+       "wed": "Alb",
+       "thu": "Alh",
+       "fri": "Alz",
+       "sat": "Asb",
+       "january": "Žanwiye",
+       "february": "Feewiriye",
+       "march": "Marsi",
+       "april": "Awiril",
+       "may_long": "Me",
+       "june": "Žuweŋ",
+       "july": "Žuyye",
+       "august": "Ut",
+       "september": "Sektanbur",
+       "october": "Oktoobur",
+       "november": "Noowanbur",
+       "december": "Deesanbur",
+       "january-gen": "Žanwiye",
+       "february-gen": "Feewiriye",
+       "march-gen": "Marsi",
+       "april-gen": "Awiril",
+       "may-gen": "Me",
+       "june-gen": "Žuweŋ",
+       "july-gen": "Žuyye",
+       "august-gen": "Ut",
+       "september-gen": "Sektanbur",
+       "october-gen": "Oktoobur",
+       "november-gen": "Noowanbur",
+       "december-gen": "Deesanbur",
+       "jan": "Žan",
+       "feb": "Few",
+       "mar": "Mar",
+       "apr": "Awl",
+       "may": "Me",
+       "jun": "Žuw",
+       "jul": "Žuy",
+       "aug": "Ut",
+       "sep": "Sekt",
+       "oct": "Okt",
+       "nov": "Now",
+       "dec": "Des",
+       "january-date": "Žanwiye $1",
+       "february-date": "Feewiriye $1",
+       "march-date": "Marsi $1",
+       "april-date": "Awiril $1",
+       "may-date": "Me $1",
+       "june-date": "Žuweŋ $1",
+       "july-date": "Žuyye $1",
+       "august-date": "Ut $1",
+       "september-date": "Sektanbur $1",
+       "october-date": "Oktoobur $1",
+       "november-date": "Noowanbur $1",
+       "december-date": "Deesanbur $1",
+       "pagecategories": "{{PLURAL:$1|Dumi|Dumey}}",
+       "category_header": "Moɲey dumi \"$1\" ra",
+       "subcategories": "Dumi-izey",
+       "category-media-header": "Hẽenandihaya dumi \"$1\" ra",
+       "category-empty": "<em>Sohõda dumoo woo šii nda moo wala hẽenandihaya kul.</em>",
+       "hidden-categories": "{PLURAL:$1|Dumi tugante|Dumi tugantey}}",
+       "hidden-category-category": "Dumi tugantey",
+       "category-subcat-count": "{{PLURAL:$2|Dumoo woo goo nda dumi-izoo woo hinne.|Dumoo woo goo nda dumi-izey wey hinne {{PLURAL:$1|dumi-ize|$1 dumi-ize}}, ka hun $2 ra.}}",
+       "category-subcat-count-limited": "Dumoo woo goo nda {{PLURAL:$1|dumi-izoo|$1 dumi-izey}}.",
+       "category-article-count": "{{PLURAL:$2|Moɲoo woo hinne bara dumoo woo ra.|Ne {{PLURAL:$1|moɲoo|$1 moɲey}} dumoo woo ra, ka hun $2 ra.}}",
+       "category-article-count-limited": "Ne {{PLURAL:$1|moɲoo goo|$1 moɲey goo}} sohõda dumoo ra.",
+       "category-file-count": "{{PLURAL:$2|Tukoo woo hinne bara dumoo woo ra.|Ne {{PLURAL:$1|tukoo goo|$1 tukey goo}} dumoo, ka hun $2 ra.}}",
+       "category-file-count-limited": "Ne {{PLURAL:$1|tukoo goo|$1 tukey goo}} sohõda dumoo ra.",
+       "listingcontinuesabbrev": "(bisa)",
+       "index-category": "Moo šilbantey",
+       "noindex-category": "Moɲey kaŋ mana šilbandi",
+       "broken-file-category": "Mooyaŋ nda tuku dobu kayrayaŋ",
+       "categoryviewer-pagedlinks": "($1) ($2)",
+       "about": "Bay woo ga",
+       "article": "Gundekuna moo",
+       "newwindow": "(ga feera zanfun taaga ra)",
+       "cancel": "Naŋ",
+       "moredotdotdot": "Ka tonton…",
+       "morenotlisted": "Maašeedaa woo mana timme.",
+       "mypage": "Moo",
+       "mytalk": "Šelaŋ",
+       "anontalk": "Šelaŋ IP aderesoo woo se",
+       "navigation": "Naaruyan",
+       "and": "&#32;nda",
+       "qbfind": "Guna",
+       "qbbrowse": "Ceeci",
+       "qbedit": "Fasal",
+       "qbpageoptions": "Moɲoo woo",
+       "qbmyoptions": "Ay moɲey",
+       "faq": "Hãa ka faham",
+       "faqpage": "Project:Hãa ka faham",
+       "actions": "Teerey",
+       "namespaces": "Maafarrey",
+       "variants": "Dumi-dumey",
+       "navigation-heading": "Naaruyan šilbayboŋ",
+       "errorpagetitle": "Firka",
+       "returnto": "Willi $1 ga.",
+       "tagline": "Hun {{SITENAME}} ga",
+       "help": "Faaba",
+       "search": "Ceeci",
+       "searchbutton": "Ceeci",
+       "go": "Koy",
+       "searcharticle": "Koy",
+       "history": "Moo taariki",
+       "history_short": "Taariki",
+       "updatedmarker": "kaŋ taagandi z'ay naarumi koraa",
+       "printableversion": "Karyan dumi",
+       "permalink": "Dobu duumante",
+       "print": "Kar",
+       "view": "Guna",
+       "view-foreign": "Guna $1 ga",
+       "edit": "Fasal",
+       "edit-local": "Gorodoo šilbay fasal",
+       "create": "Tee",
+       "create-local": "Gorodoo šilbay tonton",
+       "editthispage": "Moɲoo woo fasal",
+       "create-this-page": "Moɲoo woo tee",
+       "delete": "Tuusu",
+       "deletethispage": "Moɲoo woo tuusu",
+       "undeletethispage": "Moo tuusantaa woo yeeti",
+       "undelete_short": "Yeeti {{PLURAL:$1|barmay foo|$1 barmay fooyaŋ}}",
+       "viewdeleted_short": "Guna {{PLURAL:$1|barmay tuusante foo|$1 barmay tuusante fooyaŋ}}",
+       "protect": "Jejebu",
+       "protect_change": "barmay",
+       "protectthispage": "Moɲoo woo jejebu",
+       "unprotect": "Jejebu barmay",
+       "unprotectthispage": "Moɲoo woo jejeboo barmay",
+       "newpage": "Moo taaga",
+       "talkpage": "Deede moo woo ga",
+       "talkpagelinktext": "Šelaŋ",
+       "specialpage": "Cerecere moo",
+       "personaltools": "Boro-boŋ goyjinawey",
+       "articlepage": "Gundekuna moɲoo guna",
+       "talk": "Deedeyan",
+       "views": "Gunarey",
+       "toolbox": "Goyjinawey",
+       "userpage": "Goykaw moo guna",
+       "projectpage": "Porože moo guna",
+       "imagepage": "Tuku moo guna",
+       "mediawikipage": "Bataga moo guna",
+       "templatepage": "Leeti moo guna",
+       "viewhelppage": "Faaba moo guna",
+       "categorypage": "Dumi moo guna",
+       "viewtalkpage": "Deedaa guna",
+       "otherlanguages": "Šenni tanayaŋ ra",
+       "redirectedfrom": "(Kaŋ $1 n'a bisandi)",
+       "redirectpagesub": "Bisandi moo",
+       "redirectto": "Bisandi ne:",
+       "lastmodifiedat": "Moɲoo barmay cee koraa $1 hane, $2 waate.",
+       "viewcount": "Moɲoo woo duwandi {{PLURAL:$1|cee foo|$1 cee booboyaŋ}}.",
+       "protectedpage": "Moo jejebante",
+       "jumpto": "Sar ne:",
+       "jumptonavigation": "naaruyan",
+       "jumptosearch": "ceeciyan",
+       "view-pool-error": "Alhaa naŋ, feršikey goo goy šenda ra sohõda.\nGoykaw booboyaŋ ga ceeci ka dii moɲoo woo.\nTaare batu kayna jina de ma ceeci ka dii moɲoo koyne.",
+       "generic-pool-error": "Alhaa naŋ, feršikey goo goy šenda ra sohõda.\nGoykaw booboyan ga ceeci ka dii goy misoo woo.\nTaare batu kayna jina de ma ceeci ka dii y'a koyne.",
+       "pool-timeout": "Goywaati batuyan ben",
+       "pool-queuefull": "Batuyan šillo too",
+       "pool-errorunknown": "Firka šibayante",
+       "pool-servererror": "Batuyan goy kabukaw ši duwandi ($1).",
+       "aboutsite": "{{SITENAME}} ga",
+       "aboutpage": "Porože:Bayray",
+       "copyright": "Gundekuna ga bara $1 cire nda manti kakaw ra.",
+       "copyrightpage": "{{ns:project}}:Alhakey",
+       "currentevents": "Sohõda teerey",
+       "currentevents-url": "Project:Sohõda teerey",
+       "disclaimers": "Yaamarey",
+       "disclaimerpage": "Project: Hankul yaamar",
+       "edithelp": "Fasalyan faaba",
+       "mainpage": "Šintin moo",
+       "mainpage-description": "Šintin moo",
+       "policy-url": "Project:Laada",
+       "portal": "Jamaa batoo",
+       "portal-url": "Project:Jamaa batoo",
+       "privacy": "Sutura laada",
+       "privacypage": "Project:Sutura laada",
+       "badaccess": "Duɲeyaney firka",
+       "badaccess-group0": "N' šii nda fondo ka goyoo woo tee ne.",
+       "badaccess-groups": "Goyoo kaŋ war n'a wiri ga feeri goykey wey de se {PLURAL:$2|margaa|margawey affaa}}: $1.",
+       "versionrequired": "MediaWiki dumi $1 ga waažibandi",
+       "versionrequiredtext": "MediaWiki dumi $1 ga waažibandi ka goy nda moɲoo woo. Dii [Special:Dumi|moo dumi]].",
+       "ok": "Ayyo",
+       "pagetitle": "$1 - {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
+       "backlinksubtitle": "← $1",
+       "retrievedfrom": "Soolomandi ka hun \"$1\" ra",
+       "youhavenewmessages": "{{PLURAL:$3|N' goo nda}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|N' goo nda }} $1 ka hun {{PLURAL:$3|goykaw tana|$3 goykaw taney}} ra ($2).",
+       "youhavenewmessagesmanyusers": "N' goo nda $1 goykaw booboyaŋ ra ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|alhabar foo|999=alhabar taagayaŋ}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|barmay|999=barmay}} kokorante",
+       "youhavenewmessagesmulti": "War goo nda alhabar taaga $1 ga",
+       "editsection": "fasal",
+       "editold": "fasal",
+       "viewsourceold": "aššil guna",
+       "editlink": "fasal",
+       "viewsourcelink": "aššil guna",
+       "editsectionhint": "Dumbu fasal:$1",
+       "toc": "Gundekuna",
+       "showtoc": "cebe",
+       "hidetoc": "tugu",
+       "collapsible-collapse": "Daabirji",
+       "collapsible-expand": "Hayandi",
+       "confirmable-confirm": "Woy wal'aru no?",
+       "confirmable-yes": "Ayyo",
+       "confirmable-no": "Kalaa",
+       "thisisdeleted": "Guna wala yeeti $1?",
+       "viewdeleted": "$1 guna?",
+       "restorelink": "{{PLURAL:$1|barmay tuusante foo|$1 barmay tuusante fooyaŋ}}",
+       "feedlinks": "Toonandiyan:",
+       "feed-invalid": "Maahantumyan toonandiyan dumi laala.",
+       "feed-unavailable": "Goykondayyan toonandiyaney ši duwandi",
+       "site-rss-feed": "$1 RSS toonandiyan",
+       "site-atom-feed": "$1 Atom toonandiyan",
+       "page-rss-feed": "\"$1\" RSS toonandiyan",
+       "page-atom-feed": "\"$1\" Atom toonandiyan",
+       "feed-atom": "Atom",
+       "feed-rss": "RSS",
+       "red-link-title": "$1 (moɲoo šii bara)",
+       "sort-descending": "Kabu ka zunbu fayyan",
+       "sort-ascending": "Kabu ka ziji fayyan",
+       "nstab-main": "Moo",
+       "nstab-user": "Goykaw moo",
+       "nstab-media": "Hẽenandi moo",
+       "nstab-special": "Cerecere moo",
+       "nstab-project": "Porožewoo ga",
+       "nstab-image": "Tuku",
+       "nstab-mediawiki": "Alhabar",
+       "nstab-template": "Leeti",
+       "nstab-help": "Faaba moo",
+       "nstab-category": "Dumi",
+       "nosuchaction": "Teera tanaa woo šii",
+       "nosuchactiontext": "Goyoo kaŋ tabatandi URL ra ši tee.\nMane firka bara URL hantumoo ra, wala dobu laala ma hanga.\nWoo ga hin ka tee da hasaraw {{SITENAME}} goy porogaramoo ra.",
+       "nosuchspecialpage": "Cerecere moɲoo woo ši bara",
+       "nospecialpagetext": "Maašeede goo moo cerecerante henney se kaŋ ga duwandi [[Special:SpecialPages|{{int:specialpages}}]] ga.",
+       "error": "Firka",
+       "databaseerror": "Bayrayhugu firka",
+       "databaseerror-text": "Bayrayhugu hãayan firka bangay.\nWoo ga hin ka ti porogaram hasaraw tammaasa.",
+       "databaseerror-textcl": "Bayrayhugu hãayan firka bangay.",
+       "databaseerror-query": "Hãayan: $1",
+       "databaseerror-function": "Goymee: $1",
+       "databaseerror-error": "Firka: $1",
+       "laggedslavemode": "<strong>Yaamar:</strong> A ga hin ka tee taagandiri korawey šii moɲoo ra.",
+       "readonly": "Bayrayhugu kufalante",
+       "enterlockreason": "Dalin dam kaŋ kufaloo se, sanda ka žimam waati kaŋ kufaloo ka feera",
+       "readonlytext": "Juwalkaa kaŋ n'a kufal na daliloo woo noo: $1",
+       "missing-article": "Bayrayhugoo mana dii moo foo hantumoo kaŋ a hima ka duu w'a, kaŋ maaɲoo ti \"$1\" $2.",
+       "missingarticle-rev": "(barmayyan#: $1)",
+       "missingarticle-diff": "(Barmay: $1, $2)",
+       "readonly_lag": "Bayrayhugoo n' ka kufalandi nga boŋše waati kaŋ alhaadimi bayrayhugu feršikey ga feršikaw jinehuno gaarandi",
+       "internalerror": "Kunahere firka",
+       "internalerror_info": "Kunahere firka: $1",
+       "filecopyerror": "Mana hin ka tuku \"$1\" bere \"$2\" ga.",
+       "filerenameerror": "Mana hin ka tuku \"$1\" maa barmay \"$2\" ga.",
+       "filedeleteerror": "Mana hin ka tuku \"$1\" tuusu.",
+       "directorycreateerror": "Mana hin ka fooloɲaa \"$1\" tee.",
+       "filenotfound": "Mana hin ka duu tuku \"$1\" barmay.",
+       "unexpected": "Hinna kaŋ mana naanandi: \"$1\"=\"$2\".",
+       "formerror": "Firka: Mana hin ka takari sanba.",
+       "badarticleerror": "Goyoo woo ši hin ka tee moɲoo woo ga.",
+       "cannotdelete": "\"$1\" moo wala tuku mana hin ka tuusandi.",
+       "cannotdelete-title": "Ši hi ka \"$1\" moɲoo tuusu",
+       "delete-hook-aborted": "Dobu foo na tuusuroo ganji.\nA mana dalil kul noo.",
+       "no-null-revision": "Mana hin ka yaada-barmay taaga tee \"$1\" moo se",
+       "badtitle": "Maa laala",
+       "badtitletext": "Moo maaɲoo kaŋ hãandi ga laala, koonu wal'a dobu laybante no šenney wala wiki maaɲey game.",
+       "perfcached": "Bayhayey wey ga tugandi nd'a ga tee kaŋ i ši teji koyne. {{PLURAL:$1|hunyan foo|$1 hunyaŋ}} ga bara tugu dogoo ra..",
+       "perfcachedts": "Bayhayey wey ga tugandi nd'i taagandi cee koraa $1 hane. Fella ra {PLURAL:$4|hunyan foo|$4 hunyaŋ}} ga bara tugudogoo ra.",
+       "querypage-no-updates": "Moɲoo woo taagandirey n' ka kay sohõda.\nNe bayhayey ši kaa ka taagandi sohõda.",
+       "viewsource": "Aššil guna",
+       "viewsource-title": "Aššil guna $1 se",
+       "actionthrottled": "Goy nakasante",
+       "actionthrottledtext": "Ka žiibi bataga ganji, war ga hin ka goyoo woo tee de cee fooyaŋ waati dunba ra, nda war na adadoo din hoo.\nTaare wa ceeci koyne minitiyaŋ ra.",
+       "protectedpagetext": "Moɲoo woo n' ka jejebandi ka barmayyan wala goy tanayaŋ ganji.",
+       "viewsourcetext": "War ga hin ka dii moɲoo ašsiloo nda k'a bere:",
+       "viewyourtext": "War ga hin ka dii <strong>war fasalyaney</strong> aššilo nda k'i bere:",
+       "protectedinterface": "Moɲoo woo ka hantumoo cebe wikiyoo woo porogaramoo se nd'a ga jejebu hasaraw teekey ga. Goy nda [//translatewiki.net/ translatewiki.net], MediaWiki berandiyan porožewoo ka berandiyaŋ tonton wala k'i barmay.",
+       "editinginterface": "<strong>Yaamar:</strong> War goo ma moo fasal kaŋ nd'i ga goy ka goyjinaa porogaram hantumoo cebe. \nBarmay kaŋ ga tee moɲoo ka hantumey kaŋ goykaw ga dii y'ey bere wikiyoo woo ga. Goy nda [//translatewiki.net/ translatewiki.net], MediaWiki berandiyan porožewoo ka barmay wala berandiyaŋ tonton.",
+       "cascadeprotected": "Moɲoo woo ga jejebu barmayyan ga zam'a goo ne {PLURAL:$1|moo kaŋ ti|moɲey kaŋ ti}} jejebante nda \"kaŋandiyan\" suubari kaŋ ga dira: \n$2",
+       "namespaceprotected": "War šii nda fondo ka moɲey barmay <strong>$1</strong> maadogoo ra.",
+       "customcssprotected": "War šii nda fondo ka CSS moɲoo woo barmay zama goykaw tana foo boŋkayandiyaney g'a ra.",
+       "customjsprotected": "War šii nda fondo ka JavaScript barmay zama a goo nda goykaw tana foo boŋkayandiyaney.",
+       "mycustomcssprotected": "War šii nda fondo ka CSS moɲoo woo barmay.",
+       "mycustomjsprotected": "War šii nda fondo ka JavaScript moɲoo woo barmay.",
+       "myprivateinfoprotected": "War šii nda fondo ka war sutura alhabaroo moɲoo woo barmay.",
+       "mypreferencesprotected": "War šii nda fondo ka war ibaayey barmay.",
+       "ns-specialprotected": "Moo cerecerantey ši hin ka barmandi.",
+       "titleprotected": "[[User:$1|$1]] na maaɲoo woo jejebu za teeyanoo ga.\nI na daliloo noo \"<em>$2</em>\" ra.",
+       "filereadonlyerror": "Mana hin ka \"$1\" tukoo barmay zama tuku \"$2\" jišidogoo goo cawyan-hinne alhaali ra.\n\nJuwalkaa kaŋ n'a kufal na daliloo woo noo: \"$3\"",
+       "invalidtitle-knownnamespace": "Maa laala \"$2\" maadogoo nda \"$3\" hantumoo bande",
+       "invalidtitle-unknownnamespace": "Maa laala maadoo hinna \"$1\" šibayante nda \"$2\" hantumoo bande",
+       "exception-nologin": "Mana huru",
+       "exception-nologin-text": "Taare huru ka hin ka duu moɲoo wala teeraa woo.",
+       "exception-nologin-text-manual": "Taare $1 ka hin ka duu moɲoo wala teeraa woo.",
+       "virus-badscanner": "Hanseyan laala: wirisi gunakaw šibayante: <em>$1</em>",
+       "virus-scanfailed": "gunari kaŋ (ašariya $1)",
+       "virus-unknownscanner": "wirisi safari šibayante:",
+       "logouttext": "Bay kaŋ moɲey jerey ga hin ka gaabandi ka cebe sanda war n' ka cindi ka huru, hala war ma ceecikaw tugudogoo tuusu.",
+       "welcomeuser": "Kubayni, $1!",
+       "welcomecreation-msg": "War kontoo tee ka ben.\nWar ga hin ka war {{SITENAME}} [[Special:Preferences|ibaayey]] barmay nda war ga baa.",
+       "yourname": "Goykaw maa:",
+       "userlogin-yourname": "Goykaw ma",
+       "userlogin-yourname-ph": "Ni goykaw maaɲoo dam",
+       "createacct-another-username-ph": "Goykaw maa dam",
+       "yourpassword": "Šennikufal:",
+       "userlogin-yourpassword": "Šennikufal",
+       "userlogin-yourpassword-ph": "ni šennikufaloo dam",
+       "createacct-yourpassword-ph": "Šennikufal dam",
+       "yourpasswordagain": "Šennikufal hantum taaga:",
+       "createacct-yourpasswordagain": "Šennikufal tabatandi",
+       "createacct-yourpasswordagain-ph": "Šennikufal dam taaga",
+       "remembermypassword": "Hong'ay huruyan tammaasa ceecikaa woo ga (a ma ši bisa {PLURAL:$1|jirbi|jirbi}}) $1",
+       "userlogin-remembermypassword": "Ay goywaatoo ma gaabandi ka feera",
+       "userlogin-signwithsecure": "Ciya nda saajaw",
+       "yourdomainname": "Ni zunbu dogoo:",
+       "password-change-forbidden": "Ni ši hin ka šennikufaley barmay wikiyoo woo ga.",
+       "externaldberror": "Huru",
+       "login": "Huru",
+       "nav-login-createaccount": "Huru / kontu tee",
+       "userlogin": "Huru / kontu tee",
+       "userloginnocreate": "Huru",
+       "logout": "Fatta",
+       "userlogout": "Fatta",
+       "notloggedin": "Mana huru",
+       "userlogin-noaccount": "Šii nda kontu wala?",
+       "userlogin-joinproject": "Dii {{SITENAME}}",
+       "nologin": "Šii nda kontu wala? $1.",
+       "nologinlink": "Kontu tee",
+       "createaccount": "Kontu tee",
+       "gotaccount": "Huru",
+       "gotaccountlink": "Huru",
+       "userlogin-resetlink": "Dirŋa ni kontu šilbawey?",
+       "userlogin-resetpassword-link": "Dirŋa ni šennikufaloo?",
+       "userlogin-helplink2": "Ay gaa ka huru",
+       "userlogin-loggedin": "N' huru ka ben sanda {{GENDER:$1|$1}}.\nGanda takaddaa zaa ka huru goykaw tana.",
+       "userlogin-createanother": "Kontu tee",
+       "createacct-emailrequired": "Bataga aderesu",
+       "createacct-emailoptional": "Bataga aderesu (suubari)",
+       "createacct-email-ph": "Ni bataga aderesoo dam",
+       "createacct-another-email-ph": "Bataga aderesu dam",
+       "createaccountmail": "Šiiyan šennikufal dam saaye bande nd'a sanba bataga aderesu tabatantaa do",
+       "createacct-realname": "Maa cimi (suubari)",
+       "createaccountreason": "Dalil:",
+       "createacct-reason": "Dalil",
+       "createacct-reason-ph": "Hayaa kaŋ se war goo ma kontu waana tee",
+       "createacct-captcha": "Saajaw korošiyan",
+       "createacct-imgcaptcha-ph": "Hantumoo kaŋ war ga dii y'a beene dam",
+       "createacct-submit": "War kontoo tee",
+       "createacct-another-submit": "Kontu waana foo tee",
+       "createacct-benefit-heading": "Boro kaŋ ga hima war ka {{SITENAME}} tee.",
+       "createacct-benefit-body1": "{{PLURAL:$1|barmay $1}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|moo $1}}",
+       "createacct-benefit-body3": "Cee koraa {{PLURAL:$1|kanbuzaakaw $1}}",
+       "badretype": "Kufalšenney kaŋ war n'i dam ši tenji.",
+       "userexists": "Maa waanante suuba taare.",
+       "loginerror": "Huruyan firka",
+       "createacct-error": "Kontu feeriyan firka",
+       "createaccounterror": "Mana hin ka kontu tee: $1",
+       "nocookiesnew": "War aleewawey n' ka kay.\nW'i tunandi, de war ma huru nda war goykawmaa nda šennikufal taagey.",
+       "nocookieslogin": "War aleewawey n' ka kay.\nW'i tunandi, de war ma ceeci koyne.",
+       "nocookiesfornew": "Goykaw kontoo mana mana teendi zam'ir mana hin ka ng'aššiloo tabatandi.\nWar m'alhakiika kaŋ aleewawey tunandi, moɲoo zumandi taaga nda ceeci koyne.",
+       "nocookiesforlogin": "{{int:nocookieslogin}}",
+       "noname": "War mana goykaw maa henna kayandi.",
+       "loginsuccesstitle": "Huryanoo boori",
+       "loginsuccess": "<strong>War huru {{SITENAME}} ra sohõ sanda \"$1\".</strong>",
+       "nosuchuser": "Goykaw kul šii kaŋ ti \"$1\".  \nGoykawmaaɲey ga kula nda harfu azzaati.\nWar hantumoo koroši, wala [[Special:UserLogin/signup|kontu taaga tee]].",
+       "nosuchusershort": "Goykaw kul šii kaŋ ti \"$1\".\nHantum-tenjiyan koroši.",
+       "nouserspecified": "War ga hima ka goykawmaa kayandi.",
+       "login-userblocked": "Goykaw gagayandi. Huruyan šii nda fondo.",
+       "wrongpassword": "Ceeci koyne taare.",
+       "wrongpasswordempty": "Šennikufaloo kaŋ huru ga koonu. \nTee koyne taare.",
+       "passwordtooshort": "Šennikufaley ka hima ka bara nda {{harfu 1$|PLURAL:$1}.",
+       "password-name-match": "War šennikufaloo ma ši hima war goykaw maaɲoo.",
+       "password-login-forbidden": "Goykaw maa nda šennikufaley wey ši hin ka koy.",
+       "mailmypassword": "Šennikufaloo yeeti",
+       "passwordremindertitle": "Šiiyan šennikufal taaga {{SITENAME}} se",
+       "passwordremindertext": "Boro foo (sanda ni, nda IP aderesu $1) na šennikufal taaga wiri {{SITENAME}} ($4) se nd'a kayandi \"$3\" ga. Nda war mana boona woo, war mma hima ka huru nda šennikufal taaga suuba sohõ. War šiiyan šennikufaloo waato ga ben {{PLURAL:$5|jirbi foo|jirbi $5}} ra. \n\nNda boro waani foo no k'a wiri, wala war n' ka honga war šennikufaloo nda war ši boona k'a barmay koyne, war ga hin ka yaamaroo woo muray, nda ka gaabu ka goy nda šennikufal žeenaa.",
+       "noemail": "Bataga aderesu kul mana jisandi \"$1\" goykaa se.",
+       "noemailcreate": "War ga hima ka bataga aderesu henna noo.",
+       "passwordsent": "Šennikufal taaga n' ka sanbandi bataga aderesu jisantaa ga  \"$1\" se. Ceeci ka huru koyne nda n' duu w'a.",
+       "blocked-mailpassword": "I na war IP aderesoo ganji a ma hantum, adiši a ši duu fondo ka goy nda šennikufal yeetiyan dabaroo ka zanbayan gagay.",
+       "eauthentsent": "Cimandiyan bataga n' ka sanbandi bataga aderesu tabatantaa ga. \nWar ga hima ka šilbawey kaŋ goo bataga laasaabu jina, hala war ga hin ka war ga hin ka bataga tana kul sanba ka cimandi kaŋ alhakiika ra kontoo ti war wane.",
+       "throttled-mailpassword": "Šennikufal yeetiyan bataga n' ka sanbandi war se a ga too {{PLURAL:$1|guuru $1}}.\nKa zanbayan ganji, šennikufal yeetiyan bataga foo de ma sanbandi {{PLURAL:$1|guuru $1}} ra.",
+       "mailerror": "Bataga sanbayan firka: $1",
+       "acct_creation_throttle_hit": "Boro kaŋ ga ciya nda war IP aderesoo na {{PLURAL:$1|kontu $1}} jirbi koraa ra, woo ti alkadaroo beero kaŋ ga hin ka tee waatoo woo ra. \nWoo sabboo se, borey kaŋ ga goy nda IP aderesoo woo ši hin ka kontu kul tee koyne sohõda.",
+       "emailauthenticated": "War bataga aderesoo n' ka tabatandi $2 boŋ $3 ga.",
+       "emailnotauthenticated": "War bataga aderesoo mana tabatandi.\nBataga kul ši sanbandi alhaaley wey affoo ku še.",
+       "noemailprefs": "Bataga aderesu tabatandi war ibaayey ra alhaaley wey ma hin ka goy.",
+       "emailconfirmlink": "War bataga aderesoo tabatandi",
+       "invalidemailaddress": "Bataga aderesoo ši hin ka zaandi z'a mma hima takari laybante.   \nSoobay k'aderesu takari henna dam wala farru koonu naŋ.",
+       "cannotchangeemail": "Kontu bataga aderesey ši hin ka barmay wikiyoo woo ga.",
+       "emaildisabled": "Nungoo woo ši hin ka bataga sanba.",
+       "accountcreated": "Kontoo tee ka ben",
+       "accountcreatedtext": "Kontoo goykaa no ka tee [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|batu]]) se.",
+       "createaccount-title": "Kontu tee {{SITENAME}} se",
+       "createaccount-text": "Boro foo na kontu tee war bataga aderesoo se {{SITENAME}} ($4) kaŋ maa ti \"$2\" ga, nda \"$3\" šennikufaloo.\nWa maa hantum ka hima ka huru nda šennikufal barmay sohõ.\n\nWar ga hin ka batagaa woo muray nda kontoo woo n' ka dere ka tee.",
+       "login-throttled": "War ceeci cee booboyaŋ ka huru.\nTaare batu $1 jina ka ciya koyne.",
+       "login-abort-generic": "War mana hin ka huru - Laybu",
+       "login-migrated-generic": "War kontoo n' ka ganandi nda war goykaw maaɲoo ši ye ka bara wikiyoo woo ga.",
+       "loginlanguagelabel": "Šenni:$1",
+       "suspicious-userlogout": "War ceeciroo ka fatta mongu zam'a ga hima kaŋ ceecikaw kayraa wala tugudoo tokore k'a sanba.",
+       "createacct-another-realname-tip": "Maa cimi noo nda n' ga baa.\nNda war soobay k'a noondi, boro ga goy nd'a ka goykaw alhaali noo ngi goyoo se.",
+       "pt-login": "Huru",
+       "pt-login-button": "Huru",
+       "pt-createaccount": "Kontu tee",
+       "pt-userlogout": "Fatta",
+       "php-mail-error-unknown": "Firka šibayante PHP mail() goymee se",
+       "user-mail-no-addy": "A ceeci ka bataga sanda bila nda bataga aderesu",
+       "user-mail-no-body": "A ceeci ka bataga koonu wala kaŋ ga hansa ka duurya sanba.",
+       "changepassword": "Šennikufal barmay",
+       "resetpass_announce": "Ka huru ka ben, war ga hima ka šennikufala taaga dam.",
+       "resetpass_text": "<!-- Hantun tonton ne -->",
+       "resetpass_header": "Kontoo šennikufaloo barmay",
+       "oldpassword": "Šennikufal žeena:",
+       "newpassword": "Šennikufal taaga:",
+       "retypenew": "Šennikufal taagaa hantum koyne:",
+       "resetpass_submit": "Šennikufal barmay ka huru",
+       "changepassword-success": "War šennikufaloo barmay ka boori!",
+       "changepassword-throttled": "War ceeci cee booboyaŋ ka huru.\nTaare batu $1 jina ka ceeci koyne.",
+       "resetpass_forbidden": "Šennikufaley ši hin ka barmay",
+       "resetpass-no-info": "War ga hima ka huru jina ka duu moɲoo woo.",
+       "resetpass-submit-loggedin": "Šennikufal barmay",
+       "resetpass-submit-cancel": "Naŋ",
+       "resetpass-wrong-oldpass": "Sohõda wala batuyan šennikufal laala.\nA ga hin ka tee war bay na šennikufaloo barmay wala batuyan wane taaga wiri.",
+       "resetpass-recycled": "Taare war šennikufaloo yeeti k'a tee affoo kaŋ nanti war sohõda šennikufaloo.",
+       "resetpass-temp-emailed": "War n' ka huruyan nda šiiyan ašariya kaŋ sanbandi bataga ra.\nKa huru ka timme, war ga hima ka šennikufal taaga dam ne:",
+       "resetpass-temp-password": "Šiiyan šennikufal:",
+       "resetpass-abort-generic": "Dobu foo no ka šennikufal barmayyanoo ganji.",
+       "resetpass-expired": "War šennikulaloo waatoo ben. Wa šennikufal taaga dam ka huru.",
+       "resetpass-expired-soft": "War šennikufaloo waatoo ben nd'a ga hima ka yeeti. War šennikufal taaga suuba sohõda, wala \"{{int:resetpass-submit-cancel}}\" naagu k'a yeeti waati foo.",
+       "resetpass-validity-soft": "War šennikufaloi ši boori: $1\n\nTaare šennikufal taaga suuba sohõ, wala \"{{int:resetpass-submit-cancel}}\" naagu k'a yeeti waati foo.",
+       "passwordreset": "Šennikufal yeeti",
+       "passwordreset-text-one": "Takaddaa woo timmandi ka duu šiiyan šennikufal bataga ra.",
+       "passwordreset-text-many": "{{PLURAL:$1|Faari foo toonandi ka duu šiiyan šennikufal foo bataga ra.}}",
+       "passwordreset-legend": "Šennikufal yeeti",
+       "passwordreset-disabled": "Šennikufal yeetiyan n' ka kaŋ wikiyoo woo se.",
+       "passwordreset-emaildisabled": "Bataga alhaaley n' ka kaŋ wikiyoo ga.",
+       "passwordreset-username": "Goykaw maa:",
+       "passwordreset-domain": "Zunbudoo:",
+       "passwordreset-capture": "Cebe batagaa kaŋ hun woo ra?",
+       "passwordreset-capture-help": "Nda war na bataa woo šilbay, batagaa (nda šiiyan šennikufal) ga cebe war se nd'a ga sanbandi goykaa do.",
+       "passwordreset-email": "Bataga aderesu:",
+       "passwordreset-emailtitle": "Kontu šilbawey {{SITENAME}} ga",
+       "passwordreset-emailtext-ip": "Boro foo (sanda war da, nda IP aderesu $1) ceeci ka war\n šenniufaloo barmay {{SITENAME}} ($4) se. Goykaa woo {{PLURAL:$3|kontoo ti}\n kaŋ ga hanga bataga aderesoo woo:\n\n $2\n\n{{PLURAL:$3|Šiiyan šennikufaloo woo|Šiiyan šennikufaley wey}}  ga buu {{PLURAL:$5|zaari foo|zaari}} ra.\nWar ga hima ka huru nda šennifulal taaga dam sohõ. Nda boro waani ka ceeci ka woo tee\n nda war honga war šennikufal žeenaa, nda war ši boona koyne\n ka šennikufal barmay,\n war ga hin ka šaawaroo woo murayy nda soobay ka goy nda war\n šennikufal žeenaa.",
+       "passwordreset-emailtext-user": "Goykaw $1 {{SITENAME}} wiri ka war sennikufaloo yeeti {{SITENAME}} se\n($4). Goykaa woo {{PLURAL:$3|kontoo ga|kontey ga}} marga nda nda bataga aderesoo woo:\n\n$2\n\n {{PLURAL:$3|Šiiyan šennikufaloo woo|Šiiyan šennikufaley wey}} ga buu {{PLURAL:$5|jirbi foo|jirbi $5}} ra.\nWar ga hima ka huru  nda šennikufal taaga suuba sohõ. Nda boro waani ka ceeci\n ka woo tee wala war ga honga wara šennikufal žeenaa nda war ši boona koyne\n k'a barma, war ga hin ka šaawaroo woo muray nda gaabandi ka goy nda war\n šennikufal žeenaa.",
+       "passwordreset-emailelement": "Goykaw maa: $1\nŠiiyan šennikufal: $2",
+       "passwordreset-emailsent": "Šennikufal yeetiyan bataga n' ka sanbandi war se.",
+       "passwordreset-emailsent-capture": "Šennikulal yeetiyan bataga n' ka sanbandi war se, kaŋ ga cebandi ne ganda.",
+       "passwordreset-emailerror-capture": "Šennikufal yeetiyan bataga n' ka teendi, kaŋ ga cebandi ne ganda, amm'a mana hin ka sanbandi {{GENDER:$2|goykaw}} do: $1",
+       "changeemail": "Bataga aderesu barmay",
+       "changeemail-text": "Takaddaa woo toonandi ka war bataga aderesoo barmay. War ka hima ka war šennikufaloo dam ka barmayyanoo tabatandi.",
+       "changeemail-no-info": "War ga hima ka huru ka hin duu moɲoo woo.",
+       "changeemail-oldemail": "Sohõda bataga aderesu",
+       "changeemail-newemail": "Bataga aderesu taaga:",
+       "changeemail-none": "(baffoo)",
+       "changeemail-password": "War {{SITENAME}} šennikufaloo:",
+       "changeemail-submit": "Bataga barmay",
+       "changeemail-throttled": "War wiri ka huru cee booboyaŋ.\nTaare wa batu  $1 jina ka ceeci koyne.",
+       "resettokens": "Tammaasawey yeeti",
+       "resettokens-text": "War ga hin ka tammaasawey yeeti kaŋ ga too war ma hin ka dii sutura bayhaya tanayaŋ nda war kontoo ne.\n|nWar ga hima k'a tte nda war dere k'i noo boro waani se wala nda war ga šikka kaŋ boro waani n' ka huru kontoo ra.",
+       "resettokens-no-tokens": "Tammaasa kul šii yeetiyan se.",
+       "resettokens-legend": "Tammaasawey yeeti",
+       "resettokens-tokens": "Tammaasawey:",
+       "resettokens-token-label": "$1 (sohõda hinna: $2)",
+       "resettokens-watchlist-token": "Tammaasa interneti toonandiyanoo se (Atom/RSS) [[Special:Hawgayhayey|barmawey war hawgayhayey maašeedaa ga]]",
+       "resettokens-done": "Tammaasawey yeeti:",
+       "resettokens-resetbutton": "Tammaasa suubantey yeeti",
+       "bold_sample": "Hantum warga",
+       "bold_tip": "Hantum warga",
+       "italic_sample": "Hantum šiirante",
+       "italic_tip": "Hantum šiirante",
+       "link_sample": "Dobu maa",
+       "link_tip": "Kunahere dobu",
+       "extlink_sample": "http://www.example.com dobu maa",
+       "extlink_tip": "Tarayhere dobu (honga http:// jinekanji)",
+       "headline_sample": "Boŋžeeri hantum",
+       "headline_tip": "Adadu 2 boŋžeeri",
+       "nowiki_sample": "Hantum bila nda fasal-takari dam ne",
+       "nowiki_tip": "Wiki fasal-takaroo muray",
+       "image_sample": "Example.jpg",
+       "image_tip": "Tuku damgamante",
+       "media_sample": "Example.ogg",
+       "media_tip": "Tuku dobu",
+       "sig_tip": "War kanbežeeroo nda waati šilbay",
+       "hr_tip": "Žeeri kanante (w'a tee cee fooyaŋ de)",
+       "summary": "Duurandi:",
+       "subject": "Teekaw/boŋžeeri:",
+       "minoredit": "Barmay kayna ti woo:",
+       "watchthis": "Moɲoo woo hawgay",
+       "savearticle": "Moɲoo gaabu",
+       "preview": "Moofur",
+       "showpreview": "Moofuryan cebe",
+       "showdiff": "Barmawey cebe",
+       "blankarticle": "<strong>Yaamar:</strong> Moɲoo kaŋ war goo m'a tee t'ikoonu.\nNda war na \"{{int:savearticle}}\" naagu, moɲoo ga kaa ta tee bila nda gundekuna.",
+       "anoneditwarning": "<strong>Yaamar:</strong> War mana huru. Borey kul hin ka dii war IP aderesoo nda war na barmay kul tee. Nda war <strong>[$1 huru]</strong> wala <strong>[$2 kontu tee]</strong>, war barmawey ga hanga war goykaw maaɲoo bande, nda nafaw taney kul.",
+       "anonpreviewwarning": "<em>War mana huru. Gaabuyan ga too war IP aderesoo ma jisandi moɲoo woo fasalyan taarikoo ra.</em>",
+       "missingsummary": "<strong>Hongu:</strong> War mana barmay duurandi noo.\nWa \"{{int:savearticle}}\" naagu koyne, kul war barmaa ga gaabundi bila nd'affoo.",
+       "missingcommenttext": "Wa feeriyan foo hantum ganda.",
+       "missingcommentheader": "<strong>Hongu:</strong> War mana teekaw/boŋžeeri noo feeriyanoo woo se.\nWa \"{{int:savearticle}}\" naagu koyne, kul war barmaa ga gaabundi bila nd'affoo.",
+       "summary-preview": "Duurandi moofuryan:",
+       "subject-preview": "Teekaw|boŋžeeri moofuryan:",
+       "blockedtitle": "Goykaa n' ka gagayandi",
+       "blockedtext": "<strong>War goykaw maa wala IP aderesoo n' ka hode.</strong>\n\n$1 no k'a hode.\nDaliloo kaŋ a n'a noo ti <em>$2</em>.\n\n* Hode šintinoo: $8\n* Hode benantaa: $6\n* Boraa kaŋ š'a na hoderoo miile: $7\n\nWar ga hin ka hantum $1 wala [[{{MediaWiki:Grouppage-sysop}}|juwalkaa]] se ka hoderoo šennoo tee.\nWar ši hin ka bataga sanba nda \"email this user\" fondaa nda manti war bataga aderesu henna ka tabatandi war [[Special:Ibaayey|kontu ibaayey]] ra nd'i mana war gagay a ga. \nWar sohõda IP aderesoo to $3 nda hode šilbaa ti #$5.\nWa beene šilbawey kul dam hãayan bataga kaŋ war g'a tee ra.",
+       "autoblockedtext": "Haya na war IP aderesoo nga boŋše zama goykaw waani foo k'a ka goy, boro kaŋ $1 n'a hode.Daliloo kaŋ nondi ti:\n\n:<em>$2</em>\n\n* Hode šintinoo: $8\n* Hode benantaa: $6\n* Boraa kaŋ i n'a miile hodeyan se: $7\n\nLaasaabu kaŋ war ši hima ka goy nda \"email this user\" alhaaloo nda manti war mma bara nda bataga aderesu jisante war [[Special:Preferences|goykaw ibaayey]] ra nd'i mana war gagay ka goy nd'a.\n\nWar sohõda IP aderesoo ti $3 nda hodeyan šilbaa ti #$5.\nTaare wa šilbawey wey kul dam hãayan kul kaŋ war g'a sanba ra.",
+       "blockednoreason": "dalil kul šii",
+       "whitelistedittext": "Taare $1 ka moɲey fasal.",
+       "confirmedittext": "War ga hima ka war bataga aderesoo tabatandi jina ka moɲey fasal.\nWar bataga aderesoo tabatandi [[Special:Preferences|goykaw ibaayey]] ra.",
+       "nosuchsectiontitle": "Ši hin ka dii dunboo",
+       "nosuchsectiontext": "War ceeci ka dunbu foo kan ši bara fasal.\nA hin ka tee a ganandi wal'a tuusandi waatoo kaŋ war goo ma moɲoo guna.",
+       "loginreqtitle": "Huruyan ga waažibi",
+       "loginreqlink": "huru",
+       "loginreqpagetext": "Taare $1 ka moɲey jerey.",
+       "accmailtitle": "Šennikufaloo sanbandi",
+       "accmailtext": "Ɲaami-ra šennikufal kaŋ tee  [[User talk:$1|$1]] sanbandi $2 do. A ga hin ka barmay  <em>[[Special:ChangePassword|šennikufal barmay]] moɲoo ga </em> nda war ga huru.",
+       "newarticle": "(Itaaga)",
+       "newarticletext": "War hanga dobu kaŋ ka fatta moo foo kaŋ ši bara jina ga.\nKa moɲoo tee, soobay ka hantum ganda bataa ra ([$1 faaba moɲoo] guna ka bay ka tonton.\nNda war n' ka dere ka kaa ne, war ceecikaa <strong>banda</strong>butoŋoo naagu.",
+       "anontalkpagetext": "----\n<em>Kakaw moɲoo woo goo goykaw kaŋ maaɲoo ši bangay se, boro kaɲ mana kontu tee jina, wal'a ši a ka goy.</em>\nAdiši kal'ir ma goy nda hinna IP aderesu ka boraa alhaaloo tabatandi.\nIP aderesu dumoo woo ga hin ka žemnandi goykaw booboyaŋ game.\nNda war ti goykaw kaŋ maaɲoo ši bangay nda war ga tammahã kaŋ war ši kula nda šenney wey, [[Special:UserLogin/signup|kontu tee]] wala [[Special:UserLogin|huru]] ka ganji hiino war nda goykaw taney kaŋ šii nda maa ma birji cere ra.",
+       "noarticletext": "Hantum kul šii moɲoo woo ga sohõda.\nWar ga hin ka [Special:Search/{{PAGENAME}}|moɲoo woo maaɲoo ceeci]] moɲe jerey ra,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|moo={{FULLPAGENAMEE}}}} hantum himantey guna],\nwala [{{fullurl:{{FULLPAGENAME}}|teera=fasal}} moɲoo woo fasal]</span>.",
+       "noarticletext-nopermission": "Hantum kul šii moɲoo woo ra sohõda.\nWar ga hin ka [[Special:Search/{{PAGENAME}}|moɲoo woo maaɲoo ceeci]] moɲey jerey ra wala <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|moo={{FULLPAGENAMEE}}}} cceci hantum himantey ra]</span>, amma war ši nda fondo ka moɲoo woo tee.",
+       "missing-revision": "Filla #$1 moɲoo kaŋ maaɲoo ti \"{{FULLPAGENAME}}\" se ši bara.\n\nWoo ga doona ka tee nda boro hanga taariki dobu žeena banda kaŋ ga fatta moo tuusante ga.\nŠilbaywey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusuyan taariki] ra.",
+       "userpage-userdoesnotexist": "Goykaw kontu \"$1\" mana jisandi.\nTaare guna wala war ga boona ka moɲoo woo tee/fasal.",
+       "userpage-userdoesnotexist-view": "Goykaw kontu \"$1\"  mana jisandi.",
+       "blocked-notice-logextract": "Goykaw n' ka hode sohõda.\nHodeyan kokorantaa šilbay ceebandoo ga duwandi ganda feeriyanoo ra:",
+       "clearyourcache": "<strong>Laasaabu:</strong> Nd war gaabundi ka ben, war ga hin ka war ceecika tugudogoo koli ka dii barmawey.\n* <strong>Firefox / Safari:</strong> Gaabu <em>Shift</em> nda war ga <em>Zumandi taaga</em> naagu, wala naagu <em>Ctrl-F5</em> wala <em>Ctrl-R</em> (<em>⌘-R</em> Mac ga)\n* <strong>Google Chrome:</strong> <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> naagu Mac ga)\n* <strong>Internet Explorer:</strong> Gaabu <em>Ctrl</em> nda war ga <em>Taagandi</em> naagu, wala <em>Ctrl-F5</em> naagu\n * <strong>Opera:</strong> Tugudogoo tuusu <em>Goyjinawey → Ibaayey</em> ra",
+       "usercssyoucanpreview": "<strong>Alhiila:</strong> Goy nda \"{{int:showpreview}}\" butoŋoo ka war CSS taagaa šii jina k'a gaabu. before saving.",
+       "userjsyoucanpreview": "<strong>Alhiila:</strong>Goy nda \"{{int:showpreview}}\" butoŋoo ka  war JavaScript taagaa šii jina k'a gaabu.",
+       "usercsspreview": "<strong>Honga kaŋ war na mma moofur de war CSS goykaa ga.\nA mana gaabundi jina!</strong>",
+       "userjspreview": "<strong>Honga kaŋ war goo ma šii/moofur de war JavaScript goykaa ga.\nA mana gaabundi jina!</strong>",
+       "sitecsspreview": "<strong>Honga kaŋ war mma moofur de CSS woo ga.\n A mana gaabundi jina!</strong>",
+       "sitejspreview": "<strong>Honga kaŋ war mma moofur de JavaScript ašariyaa woo ga.\nA mana gaabundi jina!</strong>",
+       "userinvalidcssjstitle": "<strong>Yaamar:</strong> \"$1\" kuuru kul šii.\nLaada .css nda .js moɲey ga goy nda karfu kayna maa, sanda {{ns:user}}:Foo/vector.css manti {{ns:user}}:Foo/Vector.css.",
+       "updated": "(Taagante)",
+       "note": "<strong>Laasaabu:</strong>",
+       "previewnote": "<strong>Honga kaŋ war moofuryan de ti wo.</strong>\nWar barmawey mana gaabundi jina!",
+       "continue-editing": "Koy fasal nungu here",
+       "previewconflict": "Moofuryanoo woo ga tenji nda beene hantum fasalyan doo, z'a ga bangay nda war soobay k'a gaabu.",
+       "session_fail_preview": "<strong>Alhaa naŋ! Ir mana hin ka war barmaa ka koy nda jine za goywaatoo bayhayey dere.</strong>\nTaare ceeci k'a tee koyne.\nNd'a ši koy hala sohõ, ceeci ka [[Special:UserLogout|fatta]] nda huru taaga.",
+       "session_fail_preview_html": "<strong>Alhaa naŋ! Ir mana hin ka war barmaa ka koy nda jine za goywaatoo bayhayey dere.</strong>\n\n<em>Zama {{SITENAME}} goo nda HTML gani ka dira, moofuryan mma tugu ka ganji i ma kaŋ JavaScript ga.</em>",
+       "token_suffix_mismatch": "<strong>I wanji war barmaa ga zama war daykaa na tonbi harfey birji fasalyan tammaasaa ra.</strong>\nI wanji barmaa ga ka ganji moo hantumoo ma hasara.\nWoo ka tee waati kaŋ war ga goy nda maršin interneti-bande tokore goymee kaŋ ši nda maa.",
+       "edit_form_incomplete": "<strong>Barmay takari jerey mana too feršikaa do; naagu ceeci hinka ka dii kaŋ war barmawey ga timme de war ma ceeci koyne.</strong>",
+       "editing": "Goo ma $1 fasal",
+       "creating": "Goo ma $1 tee",
+       "editingsection": "Goo ma $1 fasal (dunbu)",
+       "editingcomment": "Goo ma $1 fasal (dunbu taaga)",
+       "editconflict": "Fasal cerehooyan: $1",
+       "explainconflict": "Boro foo na moɲoo woo barmay za war šintin k'a fasal.\nBeene hantum nungoo goo nda moo hantumoo takaa kaŋ nd'a bara sohõda.\nWar barmawey ga cebandi gandehere hantum nungoo ra.\nWar ga hima ka barmawey marga hantum barantaa ra.\nMoɲoo kan goo beene hantum nungoo ra <strong>hinne</strong> ma gaabundi nda war na \"{{int:savearticle}}\" naagu.",
+       "yourtext": "War hantumoo",
+       "storedversion": "Barmayyan jisante",
+       "nonunicodebrowser": "<strong>Yaamar: War ceecikaw ši Unicode kanbe.</strong>\nA workaround is in place to allow you to safely edit pages: Non-ASCII characters will appear in the edit box as hexadecimal codes.War ga hin ka šendaa woo koli nungu foo ra kaŋ naŋ war moɲey ma fasal nda saajaw. Harfey kaŋ manti ASCII ga bangay fasal bataa ra sanda ferši-iddu ašariyayaŋ.",
+       "editingold": "<strong>Yaamar: War goo ma goy nda filla dumi žeena moɲoo woo se.</strong>\nNda war war n'a gaabu, barmawey kul kaŋ tee fillaa woo bandaa ga dere.",
+       "yourdiff": "Zilayyaney",
+       "copyrightwarning": "Taare laasaabu kaŋ kanbuzaamey kul kaŋ tee {{SITENAME}} se ga tee sanda i n' ka fattandi $2 cire (dii $1 ka bay ka tonton).\nNda war ši baa war hantumoo ma barmay laala nd'a ma žemnandi forba, kul ma ši  a sanba ne.<br />\nWar ga allaahidu noo kaŋ war n'a hantum war boŋše, kaŋ war man'a bere ka kaa baytal doo for ga wala forba aššil tana.\n<strong>War ši goy-waani kul sanba bila nda alhaku koyey duɲeyanoo!</strong>",
+       "copyrightwarning2": "Laasaabu kaŋ kanbuzaamawey kul kaŋ tee {{SITENAME}} se, hantumkaw fooyaŋ ga hin ki fasal, barmay wal'i k'i tuusu.\nNda war ši boona war hantumoo ma barmay laala, kul war ma ši a sanba ne. <br />\nWar ga allaahidu no kaŋ war n'a hantum war boŋše, wala k'a bere ka hun baytal nungu ga wala forba aššil tana (dii $1 ka bay ka tonton).\n<strong>War ma ši goy kul sanba bila nda hantumkey alhaku duɲeyanoo!</strong>",
+       "longpageerror": "<strong>Firka: Hantumoo kaŋ sanbandi kuuroo ka sawa nda  {{PLURAL:$1|cebsi-ize $1}} long, kaŋ ga bisa {{PLURAL:$2|cebsi-ize $2}}.</strong>\nA ši hin ka gaabundi.",
+       "readonlywarning": "<strong>Yaamar: Bayhayahugoo",
+       "log-fulllog": "Ceebandu hantum kul guna",
+       "edit-hook-aborted": "Delbu na fasalyanoo say.\nA mana fahamandiyan kul noo.",
+       "edit-gone-missing": "Mana hin ka moɲoo taagandi.\nA ga hima an' ka tuusandi.",
+       "edit-conflict": "Fasal cerehooyan",
+       "edit-no-change": "War fasalyan mana zaandi zama hantumoo mana barmay kul.",
+       "postedit-confirmation-created": "Moɲoo n' ka tee.",
+       "postedit-confirmation-restored": "Moɲoo n' ka willi.",
+       "postedit-confirmation-saved": "War fasalyanoo n' ka gaabundi",
+       "edit-already-exists": "Mana hin ka moo taaga tee.Affoo no kaŋ ga bara.",
+       "defaultmessagetext": "Tilasu alhabar hantum",
+       "content-failed-to-parse": "Mana hin ka $2 gundekuna fesu-fesu $1 takari se: $3",
+       "invalid-content-data": "Gundekuna bayhaya laala",
+       "content-not-allowed-here": "\"$1\" gundekuna ši koy moɲoo woo ga [[$2]]",
+       "editwarning-warning": "Nda war na moɲoo naŋ, a ga hin ka tee barmawey kaŋ war n'i tee kul ga dere.\nNda war huru ka ben, war ga hin ka yaamaroo wii war ibaayey \"{{int:prefs-editing}}\" dunboo ra.",
+       "editpage-notsupportedcontentformat-title": "Gundekuna takari ši koy ne",
+       "editpage-notsupportedcontentformat-text": "Gundekuna takari $1 ši koy ne gundekuna takari $2 bande.",
+       "content-model-wikitext": "wikihantum",
+       "content-model-text": "hantum kaaray",
+       "content-model-javascript": "JavaScript",
+       "content-model-css": "CSS",
+       "expensive-parserfunction-warning": "<strong>Yaamar:</strong> Moɲoo woo goo nda fesu-fesu goyjinay alhaali booboyaŋ.\n\nA ga hima ka bara nda {{PLURAL:$2|ciyari}} $2, {{PLURAL:$1| ciyari $1 bara sohõ}}.",
+       "expensive-parserfunction-category": "Moɲey kaŋ goo nda fesu-fesu goyjinay alhaali booboyaŋ",
+       "post-expand-template-inclusion-warning": "<strong>Yaamar:</strong> Leeti azzaatoo ga hansa ka beeri.\nLeeti fooyaŋ mana tonton ne.",
+       "post-expand-template-inclusion-category": "Moɲey kaŋyaŋ ra leeti ga ng'azzaatoo hoo.",
+       "post-expand-template-argument-warning": "<strong>Yaamar:</strong> Moɲoo woo goo nda, nd'a kacca, leeti hujja foo kaŋ  azzaatoo hayandiroo ga bebbeeri.\nHujjaa woo n' ka naŋandi.",
+       "post-expand-template-argument-category": "Moɲey kaŋyaŋ goo nda leeti hujja naŋanteyaŋ",
+       "parser-template-loop-warning": "Leeti zollo maatante: [[$1]]",
+       "parser-template-recursion-depth-warning": "Leeti fillari guusuyan dimaa n' ka hoo ($1)",
+       "language-converter-depth-warning": "Šenni berekaw guusuyan dimmaa n' ka hoo ($1)",
+       "node-count-exceeded-category": "Moɲey kaŋyaŋ ra guli hinnaa n' ka hoo",
+       "node-count-exceeded-category-desc": "Moɲoo ga guli hinna alkadaroo hoo.",
+       "node-count-exceeded-warning": "Moɲoo na guli hinnaa hoo",
+       "expansion-depth-exceeded-category": "Moɲey kaŋyaŋ ra hayandiri guusuyanoo hoo",
+       "expansion-depth-exceeded-category-desc": "Moɲoo ga hayandiri guusuyan kul ibeeroo hoo.",
+       "expansion-depth-exceeded-warning": "Moɲoo ga hayandiri guusuyanoo hoo",
+       "parser-unstrip-loop-warning": "Feferiyan-naŋ zollo maatandi",
+       "parser-unstrip-recursion-limit": "Feferiyan-filla dimmaa hoo ($1)",
+       "converter-manual-rule-error": "Firka bangay kanbe šenni bereyan ašariyaa ra",
+       "undo-success": "Fasalyan ga hin ka borrandi.\nGuna ganda deedandiyanoo ka tabatandi kaŋ woo no war ga boona k'a tee, nda waati din wa ganda barmawey gaabu ka fasalyan borroyanoo benandi.",
+       "undo-failure": "Barmaa ši hin ka taafeeri zama game barmay fooyaŋ ga cere hoo.",
+       "undo-norev": "Barmaa mana hin ka taafeeri zam'a ši bara wal'a n' ka tuusandi.",
+       "undo-nochange": "A ga hima kaŋ barmaa n' ka taafeeri ka ben.",
+       "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|deede]]) na $1 fillaa taafeeri",
+       "undo-summary-username-hidden": "Goykaw tugante na $1 fillaa taafeeri",
+       "cantcreateaccounttitle": "Ši hin ha kontu tee",
+       "cantcreateaccount-text": "[User:$3|$3]] ganji kontu ma tee IP aderesu (<strong>$1</strong>) ga.\n\nDaliloo kaŋ $3 n'a noo ti <em>$2</em>",
+       "cantcreateaccount-range-text": "[[User:$3|$3]] ganji kaŋ kontu ma tee IP aderesey kaŋyaŋ goo '''$1''' laamaa ra ga, sanda war IP aderesoo ('''$4''').\n\nDaliloo kaŋ $3 n'a noo ti ''$2''",
+       "viewpagelogs": "Hantum taarikey guna moɲoo woo se",
+       "nohistory": "Barmay taariki kul šii moɲoo woo se.",
+       "currentrev": "Filla kokorantaa",
+       "currentrev-asof": "Filla kokorante za $1",
+       "revisionasof": "Filla za $1",
+       "revision-info": "{{GENDER:$6|$2}}$7 fillaa za $1",
+       "previousrevision": "← Filla žeena",
+       "nextrevision": "Filla kul itaagaa →",
+       "currentrevisionlink": "Filla kokorante",
+       "cur": "cur",
+       "next": "jine",
+       "last": "bisante",
+       "page_first": "jina",
+       "page_last": "kora",
+       "histlegend": "Zilayyan suubari: Arajo batawey šilbay fillawey se k'i deedandi, de ma dam butoŋ wala ganda butoŋ naagu.<br />\nŠilbayɲaa: <strong>({{int:cur}})</strong> = zilayyan nda filla kokorantaa, <strong>({{int:last}})</strong> = zilayyan nda filla bisantaa, <strong>{{int:minoreditletter}}</strong> = barmay kayna.",
+       "history-fieldset-title": "Ceeci taariki",
+       "history-show-deleted": "Tuusu hinne",
+       "histfirst": "ikul ižeenaa",
+       "histlast": "ikul itaagaa",
+       "historysize": "({{PLURAL:$1|cebsi $1}})",
+       "historyempty": "(koonu)",
+       "history-feed-title": "Filla taariki",
+       "history-feed-description": "Filla taariki moɲoo woo se wikiyoo ga",
+       "history-feed-item-nocomment": "$1 $2 hane/waate",
+       "history-feed-empty": "Moɲoo kaŋ war n'a wiri ši bara.\nA ga hin ka tee a tuusandi ka hun wikiyoo ga, wal'a duu maa taaga.Šii nda [[Special:Search|ceeciyan wiki ga]] moo taaga himantey se.",
+       "rev-deleted-comment": "(fasal duurandi n' ka hun)",
+       "rev-deleted-user": "(goykaw hun)",
+       "rev-deleted-event": "(hantum ceebandu teera hun)",
+       "rev-deleted-user-contribs": "[goykaw wala IP aderesu hun - barmaa tugandi sanbarey se]",
+       "rev-deleted-text-permission": "Moo fillaa woo n' ka <strong>tuusandi</strong>.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki] ra.",
+       "rev-suppressed-text-permission": "Moo fillaa woo n' ka <strong>tuusandi</strong>.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusuyan taariki].",
+       "rev-deleted-text-unhide": "Moo fillaa woo n' ka <strong>tuusandi</strong>.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki] ra.\nWar ga hin ka [dii $1 fillaa woo] nda war ga boona ka koy jine.",
+       "rev-suppressed-text-unhide": "Moo fillaa woo n' ka <strong>tuusandi</strong>.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki] ra.\nWar ga hin ka [dii $1 fillaa woo] nda war ga boona ka koy jine.",
+       "rev-deleted-text-view": "Moo fillaa woo n' ka <strong>tuusandi</strong>.\nWar ga hin ka dii y'a; šilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki] ra.",
+       "rev-suppressed-text-view": "Moo flllaa woo n' ka <strong>tuusandi</strong>.\nWar ga hin ka dii y'a; šilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki].",
+       "rev-deleted-no-diff": "War ši hin ka dii zilayyanoo woo zama fillawey affoo n' ka <strong>tuusandi</strong>.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki] ra.",
+       "rev-suppressed-no-diff": "War ši hin ka dii zilayyanoo woo zama fillawey affaa n' ka <strong>tuusandi</strong>.",
+       "rev-deleted-unhide-diff": "Fillawey affaa zilayyanoo woo se n' ka <strong>tuusandi</strong>.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki log] ra.\nWar ga hin ka [dii $1 zilayyanoo] nda war ga boona ka koy jine.",
+       "rev-suppressed-unhide-diff": "Fillawey affaa zilayyanoo woo n' ka <strong>tuusandi</strong>.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki log] ra.\nWar ga hin ka [dii $1 zilayyanoo woo] nda war ga boona ka koy jine.",
+       "rev-deleted-diff-view": "Fillawey affaa zilayyanoo woo se n' ka <strong>tuusandi</strong>.\nWar ga hin ka dii zilayyanoo woo; šilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki] ra.",
+       "rev-suppressed-diff-view": "Fillawey affaa zilayyanoo n' ka <strong>tuusandi</strong>.\nWar ga hin ka dii zilayyanoo woo; šilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki] ra.",
+       "rev-delundel": "diiyan alkadar barmay",
+       "rev-showdeleted": "cebe",
+       "revisiondelete": "Fillawey tuusu/yeeti",
+       "revdelete-nooldid-title": "Toodoo filla laala",
+       "revdelete-nooldid-text": "War mana toodoo fillawey tabatandi ka goyoo woo tee\n filla tabatante ši bara, wala war mma ceeci ka sohõda fillaa tugu.",
+       "revdelete-no-file": "Tukoo tabatantaa ši bara.",
+       "revdelete-show-file-confirm": "Alhakiika kaŋ war ga boona ka dii tukoo filla tuusante foo guna \"<nowiki>$1</nowiki>\" kaŋ tee $2 hane $3 waate?",
+       "revdelete-show-file-submit": "Ayyo",
+       "revdelete-selected-text": "{{PLURAL:$1|Filla suubante|Filla suubantey}} [[:$2]] se:",
+       "revdelete-selected-file": "{{PLURAL:$1|Tuku dumi suubante| Tuku dumi suubantey}} [[:$2]] se:",
+       "logdelete-selected": "{{PLURAL:$1|Hantum ceebandu teera suubante| Hantum ceebandu teera suubantey}}:",
+       "revdelete-text-text": "Filla tuusantey ga bangay moo taarikoo ra, amma gundekunaa jereyaŋ šii duwandi jamaa kul se.",
+       "revdelete-text-file": "Tuku dumi tuusantey ga bangay moo taarikoo ra, amma gundekunaa jereyaŋ šii duwandi jamaa kul se.",
+       "logdelete-text": "Hantum ceebandu teera tuusantey ga bangay hantum taarikoo ra, amma gundekunaa jereyaŋ šii duwandi jamaa kul se.",
+       "revdelete-text-others": "Juwalkaw tanayaŋ ga hin ka duu gundekuna tugantaa wal'i m'a tuusu, nda jejebu tontoniyaŋ mana huru a se.",
+       "revdelete-confirm": "Tabatandi kaŋ war g'anniya ka woo tee, kaŋ war faham nd'allamaana kaŋ g'a ra, nda kaŋ war goo ma woo tee [[{{MediaWiki:Policy-url}}|laada]] bande.",
+       "revdelete-suppress-text": "Tuusuyan ga hima ka tee misey wey cine <strong>hinne</strong> ra:\n* alhabar kaŋ ga hima nda miimanda nda maa hasaraw\n* alhabar kaŋ ga sutura laada hoo\n*: <em>hugu aderesu nda talfon lanba, ganda kartidanti lanba, nda šilbay taney</em>",
+       "revdelete-legend": "Kayandi hayey kaŋ borey ga dii y'ey",
+       "revdelete-hide-text": "Filla hantum",
+       "revdelete-hide-image": "Tuku gundekuna tugu",
+       "revdelete-hide-name": "Teera nda toodoo tugu",
+       "revdelete-hide-comment": "Duurandi fasal",
+       "revdelete-hide-user": "Fasalkaa goykaw maaɲoo/IP aderesu",
+       "revdelete-hide-restricted": "Bayhayey tuusu k'i kaa juwalkey nda goykaw taney jine",
+       "revdelete-radio-same": "(ma ši barmay)",
+       "revdelete-radio-set": "Tugante",
+       "revdelete-radio-unset": "Boro ga dii y'a",
+       "revdelete-suppress": "Bayhayey tuusu k'i kaa juwalkey nda goykaw taney jine",
+       "revdelete-unsuppress": "Kankamandey kaa  filla willantey ga",
+       "revdelete-log": "Dalil:",
+       "revdelete-submit": "Kanandi {PLURAL:$1|filla}} kanante ga",
+       "revdelete-success": "<strong>Filla diiyan alkadar taagandi ka boori.</strong>",
+       "revdelete-failure": "<strong> Filla diiyan alkdar mana hin ka taagandi:</strong>\n$1",
+       "logdelete-success": "<strong>Hantum ceebandu diiyan alkadar kayandi ka boori.</strong>",
+       "logdelete-failure": "<strong>Hantum ceebandu diiyan alkdar mana kayandi:</strong>\n$1",
+       "revdel-restore": "diiyan alkadar barmay",
+       "pagehist": "Moo taariki",
+       "deletedhist": "Taariku tuusante",
+       "revdelete-hide-current": "Firka bangay kaŋ haya-izoo kaŋ tee $2 waate, $1 hane ga tugandi: Sohõda fillaa ti woo.\nA ši hin ka tugandi.",
+       "revdelete-show-no-access": "Firka bangay kaŋ haya-izoo kaŋ tee $2 waate, $1 hane ga cebandi: Haya-izoo n' ka šilbay nda \"restricted\".\nWar ši nda fondo ka duu w'a.",
+       "revdelete-modify-no-access": "Firka bangay kaŋ haya-izoo kaŋ tee $2 waate, $1 hane ga barmay: Haya-izoo ga šilbay nda \"restricted\".\nWar ši nda fondo ka duu w'a.",
+       "revdelete-modify-missing": "Firka bangay kaŋ haya-ize nda tammaasa $1: A šii bayhayhugoo ra!",
+       "revdelete-no-change": "<strong>Yaamar:</strong> Haya-izoo kaŋ tee $2 waate, $1 hane duu diiyan alkadar kayandiyan waažibantey ka ben.",
+       "revdelete-concurrent-change": "Firka kaŋ haya-izoo kaŋ tee $2 waate, $1 hane ga barmay: Nga assariyaa ga bangay sanda boro tana foo k'a barmay waatoo kaŋ war ceeci k'a barmay.\nHantum ceebandu taarikey koroši.",
+       "revdelete-only-restricted": "Firka bangay kaŋ haya-izoo kaŋ tee $2 waate, $1 hane ga tugandi: War ga hin k'a tuusu k'a kaa juwalkey jine bila nda war ma diiyan alkadar suubarey affoo kayandi.",
+       "revdelete-reason-dropdown": "*Yamma tuusu dalile\n** Hantumkaw alhaku hooyan\n** Gundekuna laala wala sutura-hooyan alhabar\n** Goykaw maa laala\n** Miimanda wala maahasaraw allamaana",
+       "revdelete-otherreason": "Dalil tana/tontoni:",
+       "revdelete-reasonotherlist": "Dalil tana",
+       "revdelete-edit-reasonlist": "Tuusu daliley fasal",
+       "revdelete-offender": "Filla hantumkaw:",
+       "suppressionlog": "Tuusu ceebandu taariki",
+       "suppressionlogtext": "Ganda maašeeda goo nda tuusarey nda hodeyaney kaŋ sabboo ti gundekuna kaŋ tugandi juwalkey se.\n Dii [[Special:BlockList|hode maašeeda]] maašeedaa se kaŋ tee sohõda goy barrantey nda hodantey se.",
+       "mergehistory": "Moo taarikey marga",
+       "mergehistory-header": "Moɲoo woo ga naŋ war ma taarikoo fillawey marga aššil moo faa se k'a tee moo taaga.\nWar m'alhakiika kaŋ barmaa woo ga moo taarikoo faaba a ma cindi cere bande.",
+       "mergehistory-box": "Moo hinka fillawey marga:",
+       "mergehistory-from": "Aššil moo",
+       "mergehistory-into": "Toodoo moo:",
+       "mergehistory-list": "Fasal taariki kaŋ ga hin ka marga",
+       "mergehistory-merge": "Fillawey wey kaŋ tee [[:$1]] se ga hin ka marga ka tee [[:$2]].\nArajo butoŋ soofu naagu k'a marga nda fillawey hinne kaŋyaŋ tee waati tabatantaa ga wal'a se jine.\nLaasaabu kaŋ nda boro too naaruyan dobey ga, i ga soofoo woo yeeti alhaali žeenaa ga.",
+       "mergehistory-go": "Fasalyaney kaŋ ga hin ka marga cebe",
+       "mergehistory-submit": "Fillawey marga",
+       "mergehistory-empty": "Filla kulyaŋ mana margandi.",
+       "mergehistory-success": "[[:$1]] {{PLURAL:$3|filla}} $3 margandi ka boori ka tee [[:$2]].",
+       "mergehistory-fail": "Ši hin taariki margaroo tee, taare moo nda waati kayandiyaney guna ka boori.",
+       "mergehistory-fail-toobig": "Ši hin ka taariki margaroo tee zam'a ga bisa {{PLURAL:$1|filla}} $1 kaŋ ga ganandi waati din.",
+       "mergehistory-no-source": "$1 aššil moo ši bara.",
+       "mergehistory-no-destination": "$1 toodoo moo ši bara.",
+       "mergehistory-invalid-source": "Ašsil moɲoo ga hima ka bara nda maa henna.",
+       "mergehistory-invalid-destination": "Toodoo moɲoo ga hima ka bara nda maa henna.",
+       "mergehistory-autocomment": "Na [[:$1]]  marga k'a tee [[:$2]]",
+       "mergehistory-comment": "Na [[:$1]] k'a tee [[:$2]]: $3",
+       "mergehistory-same-destination": "Aššil nda toodoo moɲey ši hin ka tee affollokaa da",
+       "mergehistory-reason": "Dalil:",
+       "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
+       "mergelog": "Margari hantum ceebandu",
+       "revertmerge": "Margari say",
+       "mergelogpagetext": "Ganda margari kokorantey maašeedaa, taka kaŋ nda moo taariki foo ga huru affaa ra.",
+       "history-title": "Filla taariki \"$1\" se",
+       "difference-title": "Zilayyan \"$1\" fillawey game",
+       "difference-title-multipage": "Zilayyan \"$1\" nda \"$2\" game",
+       "difference-multipage": "(Zilayyan moɲey game)",
+       "lineno": "Žeeri $1:",
+       "compareselectedversions": "Filla suubantey deedandi",
+       "showhideselectedversions": "Diiyan dimma barmay filla suubantey se",
+       "editundo": "borro",
+       "diff-empty": "(Ši zilay)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Gam filla $1}} goykaw follokaa se ši cebandi)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Gam filla $1}} {{PLURAL:$2|goykaw $1}} se ši cebandi)",
+       "diff-multi-manyusers": "({{PLURAL:$1|Gam filla $1}} a ga bisa {{PLURAL:$2|goykaw}} $2 se ši cebandi)",
+       "difference-missing-revision": "{{PLURAL:$2|Gam filla $1}} zilayyanoo woo se ($1) {{PLURAL:$2|mana}} duwandi.\n\nZilayyan dobu žeena moo tuusante ga no ma doona ka woo te.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}}  tuusu taarikoo ra.]",
+       "searchresults": "Ceeci hunyaney",
+       "searchresults-title": "Ceeci hunyaney \"$1\" se",
+       "titlematches": "Moo maa tenjandey",
+       "textmatches": "Moo hantum tenjandey",
+       "notextmatches": "Moo hantum tenjandiyaŋ kul šii",
+       "prevn": "{{PLURAL:$1|$1}} bisante",
+       "nextn": "jine {{PLURAL:$1|$1}}",
+       "prevn-title": "{{PLURAL:$1|hunyan}} $1 bisante",
+       "nextn-title": "jine {{PLURAL:$1|hunyan}} $1",
+       "shown-title": "Cebe {{PLURAL:$1|hunyan}} $1 moo ra",
+       "viewprevnext": "Guna ($1 {{hoobu-fayakaw}} $2) ($3)",
+       "searchmenu-exists": "<strong>Moo goo kaŋ maaɲoo ti \"[[:$1]]\" wikiyoo woo ga.</strong> {{PLURAL:$2|0=|Guna da ceeci hunyan taney kaŋ fatta.}}",
+       "searchmenu-new": "<strong>Moɲoo tee \"[[:$1]]\" wikiyoo woo ga!</strong> {{PLURAL:$2|0=|Guna da moɲoo kaŋ duwandi nda war ceeciroo.|Guna da ceeci hunyan kaŋ fatta.}}",
+       "searchprofile-articles": "Gundekuna moɲey",
+       "searchprofile-images": "Hẽenandi jinawey",
+       "searchprofile-everything": "Hayakul",
+       "searchprofile-advanced": "Koyjinante",
+       "searchprofile-articles-tooltip": "Ceeci $1 ra",
+       "searchprofile-images-tooltip": "Tukey ceeci",
+       "searchprofile-everything-tooltip": "Gundekuna kul ceeci (nda deede moɲey da)",
+       "searchprofile-advanced-tooltip": "Guna laada maafarrey ra",
+       "search-result-size": "$1 ({{PLURAL:$1|kalima $1}})",
+       "search-result-category-size": "{{PLURAL:$1|koydayze $1}} ({{PLURAL:$2|1 dumi-ize $2}}, {{PLURAL:$3|tuku $3}})",
+       "search-redirect": "($1 bisandi)",
+       "search-section": "($1 dunbu)",
+       "search-file-match": "(ga tenji nda tuku gundekuna)",
+       "search-suggest": "War n' ka tammahãa: $1",
+       "search-interwiki-caption": "Porože ɲayzey",
+       "search-interwiki-default": "Hunyaney $1 ga:",
+       "search-interwiki-more": "(tontoni)",
+       "search-relatedarticle": "Himante",
+       "searchrelated": "himante",
+       "searchall": "kul",
+       "showingresults": "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} starting with #<strong>$2</strong>.",
+       "showingresultsinrange": "Goo ma cebe {{PLURAL:$1|<strong>1</strong> hunyan|<strong>$1}} gamoo ra #<strong>$2</strong> hala #<strong>$3</strong>.",
+       "search-showingresults": "{{PLURAL:$4|Hunyan <strong>$1</strong> - <strong>$3</strong>}}",
+       "search-nonefound": "Hunyan kul ši tenji nda hãayanoo.",
+       "powersearch-legend": "Ceeciyan koyjinante",
+       "powersearch-ns": "Ceeci maafarrey:",
+       "powersearch-togglelabel": "Koroši:",
+       "powersearch-toggleall": "Kul",
+       "powersearch-togglenone": "Baffoo",
+       "powersearch-remember": "Honga suubaroo hiino ceeciyaney se",
+       "search-external": "Tarayhere ceeciyan",
+       "searchdisabled": "{{SITENAME}} ceeciyan n' ka kayandi.\nWar ga hin ka ceeci nda Google waatoo woo ra.\nLaasaabu kaŋ ngi šilbawey {{SITENAME}} gundenaa se ga hima ižeenayaŋ.",
+       "search-error": "Firka bangay ceeciyan waate: $1",
+       "preferences": "Ibaayey",
+       "mypreferences": "Ibaayey",
+       "prefs-edits": "Barmawey hinnaa:",
+       "prefsnologintext2": "Huru taare ka war ibaayey barmay.",
+       "prefs-skin": "Kuuru",
+       "skin-preview": "Moofur",
+       "datedefault": "Ibaayey kul šii",
+       "prefs-labs": "Šiidoo alhaaley",
+       "prefs-user-pages": "Goykaw moɲey",
+       "prefs-personal": "Goykaw alhaali",
+       "prefs-rc": "Barmay korawey",
+       "prefs-watchlist": "Hawgayhayey",
+       "prefs-watchlist-days": "Zaarey ka fatta hawgayhayey ra:",
+       "prefs-watchlist-days-max": "{{PLURAL:$1|Zaari}} $1 ibeeri",
+       "prefs-watchlist-edits": "Barmay hinna kul ibeeroo ka cebe hawgawhayey hayantey ra:",
+       "prefs-watchlist-edits-max": "Hinna kul ibeeroo: 1000",
+       "prefs-watchlist-token": "Hawgayhayey tammaasa:",
+       "prefs-misc": "Haya birjantey",
+       "prefs-resetpass": "Šennikufal barmay",
+       "prefs-changeemail": "Bataga aderesu barmay",
+       "prefs-setemail": "Bataga aderesu kayandi",
+       "prefs-email": "Bataga suubarey",
+       "prefs-rendering": "Bangayyan alhaali",
+       "saveprefs": "Gaabu",
+       "restoreprefs": "Tilasu kayandiyaney kul yeeti (dunbey kul ra)",
+       "prefs-editing": "Goo ma fasal",
+       "rows": "Sorrawey:",
+       "columns": "Soofey:",
+       "searchresultshead": "Ceeci",
+       "stub-threshold": "Šiifa <a href=\"#\" class=\"stub\">zaa dobu</a> takari kayandiyan (cebsi hinna) se:",
+       "stub-threshold-disabled": "Ga kay",
+       "recentchangesdays": "Zaarey kaŋ ga cebe barmay korawey ra:",
+       "recentchangesdays-max": "$1 ibeeri {{PLURAL:$1|zaari $1}}",
+       "recentchangescount": "Barmay hinnawey kaŋ ga cebe tilasu ra:",
+       "prefs-help-recentchangescount": "Sanda barmay korawey, moo taarikey nda hantum ceebandu tiirawey.",
+       "prefs-help-watchlist-token2": "Woo ti kufal tugante war hawgayhayey interneti toonandiyanoo se.\nBoro kul kaŋ g'a bay ga hin ka war hawgayhayey caw, adiši ma ši žemna.\nNd'a waažibi, [[Special:ResetTokens|war ga hin k'a yeeti]] da.",
+       "savedprefs": "War ibaayey n' ka gaabundi.",
+       "timezonelegend": "Waati ganda:",
+       "localtime": "Gorodoo waati:",
+       "timezoneuseserverdefault": "Goy nda wiki tilasu ($1)",
+       "timezoneuseoffset": "Itana (han/waati tabatandi)",
+       "servertime": "Feršikaw waati:",
+       "guesstimezone": "Toonandi ceecikaa ga",
+       "timezoneregion-africa": "Afiriki",
+       "timezoneregion-america": "Ameriki",
+       "timezoneregion-antarctica": "Antarkitika",
+       "timezoneregion-arctic": "Arkutiki",
+       "timezoneregion-asia": "Aazi",
+       "timezoneregion-atlantic": "Atalantiki teeko",
+       "timezoneregion-australia": "Osutarali",
+       "timezoneregion-europe": "Erop",
+       "timezoneregion-indian": "Endu teeko",
+       "timezoneregion-pacific": "Baani teeko",
+       "allowemail": "Goykaw taney bataga tunandi",
+       "prefs-searchoptions": "Ceeci",
+       "prefs-namespaces": "Maafarrey",
+       "default": "tilasu",
+       "prefs-files": "Tukey",
+       "prefs-custom-css": "Laada CSS",
+       "prefs-custom-js": "Laada JavaScript",
+       "prefs-common-css-js": "CSS/JavaScript kaŋ kuurey k'a may:",
+       "prefs-reset-intro": "War ga hin ka goy nda moɲoo woo ka war ibaayey yeeti nungoo tilasu alhaaley ga.\nWoo ši hin ka taafeeri.",
+       "prefs-emailconfirm-label": "Bataga tabatandiyan:",
+       "youremail": "Bataga:",
+       "username": "{{GENDER:$1|Goykaw maa}}:",
+       "prefs-memberingroups": "{{GENDER:$2|Kondayze}} {{PLURAL:$1|batu|batey}} ra:",
+       "prefs-memberingroups-type": "$1",
+       "prefs-registration": "Maahantumayan waati:",
+       "prefs-registration-date-time": "$1",
+       "yourrealname": "Maa cimi:",
+       "yourlanguage": "Šenni:",
+       "yourvariant": "Gundekuna šenni fayante:",
+       "prefs-help-variant": "War šenni fayane wala hantum tenjandiyan ga gundekuna moɲey cebe wikiyoo woo ga.",
+       "yournick": "Kanbežeeri taaga:",
+       "prefs-help-signature": "Deedawey kaŋ goo",
+       "badsig": "Kanbežeeri gani laala.\nHTML kanjarey koroši.",
+       "badsiglength": "War kanbežeeroo ga hansa ka kuu.\nA ši hima ka kuu ka bisa {{PLURAL:$1|harfu}} $1.",
+       "yourgender": "Taka foo nda war ga baa ir ma war cee?",
+       "gender-unknown": "Ay ši baa y'a har",
+       "gender-male": "Aru kaŋ ga wiki moɲey fasal",
+       "gender-female": "Woy kaŋ ga wiki moɲey fasal",
+       "prefs-help-gender": "Ibaayoo woo kanayandiyanoo ti suuba-haya.\nGoyjinay ga nda hinna ka goy ka šelaŋ war se nda ka war bayrandi boro tanayaŋ se nda woy-aru tammaasa henna.\nBoro kul ga hin ka dii alhabaroo woo.",
+       "email": "Bataga",
+       "prefs-help-realname": "Maa cimi ti suuba-haya.\nNda war soobay ka woo noo, i g'a ka goy ka war goymiɲoo kayandi.",
+       "prefs-help-email": "Bataga aderesu ti suuba-haya, amm'a ga waažibi šennikufal yeetiyan se, nda war dirŋa war šennikufaloo.",
+       "prefs-help-email-others": "War ga hin ka soobay da ka boro tanayaŋ naŋ i ma bataga sanba war se dobu foo ga war goyksaw wala deede moɲoo ga.\nWar bataga aderesoo ši fatta nda waati kaŋ goykaw tanayaŋ hantum war se.",
+       "prefs-help-email-required": "Bataga aderesu ga waažibi.",
+       "prefs-info": "Šintin alhabar",
+       "prefs-i18n": "Adduɲɲaa-me teera",
+       "prefs-signature": "Kanbežeeri",
+       "prefs-dateformat": "Han takari",
+       "prefs-timeoffset": "Waati zilayyan",
+       "prefs-advancedediting": "Yamma suubarey",
+       "prefs-editor": "Fasalkaw",
+       "prefs-preview": "Moofur",
+       "prefs-advancedrc": "Suubari jinekoyantey",
+       "prefs-advancedrendering": "Suubari jinekoyantey",
+       "prefs-advancedsearchoptions": "Suubari jinekoyantey",
+       "prefs-advancedwatchlist": "Suubari jinekoyantey",
+       "prefs-displayrc": "Suubarey cebe",
+       "prefs-displaywatchlist": "Suubarey cebe",
+       "prefs-tokenwatchlist": "Tammaasa",
+       "prefs-diffs": "Zilayyaney",
+       "prefs-help-prefershttps": "Ibaayoo woo ga kanandi war hiino huruyanoo ga.",
+       "prefswarning-warning": "War na hayayaŋ barmay war ibaayey ra, amm'i mana gaabundi jina.\nNda war na moɲoo woo naŋ bila nda war ma \"$1\" naagu war ibaayey ši taagandi.",
+       "prefs-tabs-navigation-hint": "Alhiila: War ga hin ka goy nda biraw wowa wal'iguma kufal ka dira nor lokey game nor loku maašeedaa ra.",
+       "email-address-validity-valid": "Bataga aderesoo ga hima ihenna",
+       "email-address-validity-invalid": "Bataga aderesu henna dam",
+       "userrights": "Goykaw alhakey juwalyan",
+       "userrights-lookup-user": "Goykaw kondawey juwal",
+       "userrights-user-editname": "Goykaw maa dam:",
+       "editusergroup": "Goykaw kondawey fasal:",
+       "editinguser": "Goo ma goykaw alhakey barmay goykaw <strong>[[User:$1|$1]]</strong> $2 se",
+       "userrights-editusergroup": "Goykaw kondawey fasal",
+       "saveusergroups": "Goykaw kondawey gaabu",
+       "userrights-groupsmember": "Kondayze:",
+       "userrights-groupsmember-auto": "Kondayze tugante:",
+       "userrights-groupsmember-type": "$1",
+       "userrights-groups-help": "War ga hin ka kondawey barmay goykey wey se ne:\n* Bata maasante maanaa ti goykaa goo kondaa din ra.\n* Bata bila nda maasa maanaa ti goykaa šii kondaa din ra.\n* Handaray * ga tammaasa kaŋ war ši hin ka kondaa kaa nda war ben k'a tonton, wal'a kaa.",
+       "userrights-reason": "Dalil:",
+       "userrights-no-interwiki": "War ši nda fonda ka goykaw alhakey fasal wiki tanayaŋ ga.",
+       "userrights-nodatabase": "Bayhayhugu $1 ši bara wal'a šii gandaa ra.",
+       "userrights-nologin": "War ga hima ka [[Special:UserLogin|huru]] nda juwalkaw kontu ka goykaw alhakey noo.",
+       "userrights-notallowed": "War ši nda fondo ka goykey alhakey dam wala k'i kaa.",
+       "userrights-changeable-col": "Kondawey kaŋ war ga hin k'i barmay",
+       "userrights-unchangeable-col": "Kondawey kaŋ war ga hin k'i barmay",
+       "userrights-irreversible-marker": "$1*",
+       "userrights-conflict": "Cerehooyan goykaw alhadey barmawey ra! Taare war barmawey guna boryo nd'a tabatandi.",
+       "userrights-removed-self": "War na war alhakey kaa ka timme. Adiši, war ši hin ka duu moɲoo woo koyne.",
+       "group": "Konday:",
+       "group-user": "Goykey",
+       "group-autoconfirmed": "Goykaw boŋtabatantey",
+       "group-bot": "Maršin berandikey",
+       "group-sysop": "Juwalkey",
+       "group-bureaucrat": "Birogoykey",
+       "group-suppress": "Lawreyaney",
+       "group-all": "(ku)",
+       "group-user-member": "{{GENDER:$1|goykaw}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|goykaw boŋtabatante}}",
+       "group-bot-member": "{{GENDER:$1|maršin berandiyan}}",
+       "group-sysop-member": "{{GENDER:$1|juwalkaw}}",
+       "group-bureaucrat-member": "{{GENDER:$1|birogoykaw}}",
+       "group-suppress-member": "{{GENDER:$1|lawreyan}}",
+       "grouppage-user": "{{ns:project}}:Goykey",
+       "grouppage-autoconfirmed": "{{ns:project}}:Goykaw boŋtabatantey",
+       "grouppage-bot": "{{ns:project}}:Maršin berandiyaney",
+       "grouppage-sysop": "{{ns:project}}:Juwalkey",
+       "grouppage-bureaucrat": "{{ns:project}}:Birgoykey",
+       "grouppage-suppress": "{{ns:project}}:Lawreyan",
+       "right-read": "Caw moɲey",
+       "right-edit": "Fasal moɲey",
+       "right-createpage": "Moɲey tee (kaŋ manti kakaw mooyaŋ)",
+       "right-createtalk": "Kakaw moɲey tee",
+       "right-createaccount": "Goykaw kontu taagayaŋ tee",
+       "right-minoredit": "Šilbay sanda barmay kaccuyaŋ",
+       "right-move": "Moɲey ganandi",
+       "right-move-subpages": "Moɲey ganandi nda ngi moɲiizey",
+       "right-move-rootuserpages": "Linji goykaw moɲey ganandi",
+       "right-move-categorypages": "Dumi moɲey ganandi",
+       "right-movefile": "Tukey ganandi",
+       "right-suppressredirect": "Ma ši bisandi ka hun aššil moɲey ga moo ganandiyan waate",
+       "right-upload": "Tukey zijandi",
+       "right-reupload": "Hantum tuku barantey boŋ",
+       "right-reupload-own": "Hantum tuku barantey boŋ kaŋ boro hunday n'i zijandi",
+       "right-reupload-shared": "Hantum tukey boŋ kaŋ ga jiši gorodoo ra hẽenandi jinay žemnante ga",
+       "right-upload_by_url": "Tukey zijandi ka hun URL ga",
+       "right-purge": "Internti nungoo tugu dogoo leele moo bila nda tabatandiyan se",
+       "right-autoconfirmed": "Ši kula nda IP-bande albaha dimma alkadarey",
+       "right-bot": "Kaŋ ga tee sand'a ga goy nga boŋše",
+       "right-nominornewtalk": "Kaŋ ši nda barmay kaccuyaŋ kakaw moɲey ga ka too yaamar taagayaŋ ma bangay",
+       "right-apihighlimits": "Alkadar beeriyan dam API hãayaney ra",
+       "right-writeapi": "Goy nda hantum API",
+       "right-delete": "Moɲey tuusu",
+       "right-bigdelete": "Moɲey kaŋ goo nda taariki kukuyaŋ tuusu",
+       "right-deletelogentry": "Ceebantu damhaya tabatanteyaŋ tuusu nd'i yeeri",
+       "right-deleterevision": "Moo filla tabatanteyaŋ tuusu nd'i yeeri",
+       "right-deletedhistory": "Taariki damhaya tuusantey guna bila nda hantum hangantey",
+       "right-deletedtext": "Hantum tuusantey guna nda barmawey filla tuusantey game",
+       "right-browsearchive": "Moo tuusantey ceeci",
+       "right-undelete": "Moo foo yeeri",
+       "right-suppressrevision": "Moo filla tabatanteyaŋ guna, tugu nda bangandi goykaw kul se",
+       "right-viewsuppressed": "Guna fillawey kaŋ tugandi goykaw kul se",
+       "right-suppressionlog": "Sutura hantum ceebandey guna",
+       "right-block": "Ma ganji goykaw tanayaŋ m'a fasal",
+       "right-blockemail": "Ganji goykaw kul ma bataga sanba",
+       "right-hideuser": "Goykaw maa foo hode, k'a tugu jamaa se",
+       "right-ipblock-exempt": "IP hodeyaney, boŋ-hodeyaney nda ganda hodeyaney koli",
+       "right-proxyunbannable": "Tokore boŋ-hodeyaney koli",
+       "right-unblockself": "Boŋ-hodeyan kaa",
+       "right-protect": "Jejebuyan alkadarey nda kaŋandi-fasal moo jejebantey barmay",
+       "right-editprotected": "Moɲey kaŋ jejebandi sanda \"{{int:protect-level-sysop}}\" fasal",
+       "right-editsemiprotected": "Moɲey kaŋ jejebandi sanda \"{{int:protect-level-autoconfirmed}}\" fasal",
+       "right-editinterface": "Goykaw diidogoo fasal",
+       "right-editusercssjs": "Goykaw taney CSS nda JavaScript tukey fasal",
+       "right-editusercss": "Goykaw taney CSS tukey fasal",
+       "right-edituserjs": "Goykaw taney JavaScript tuke fasal",
+       "right-editmyusercss": "War boŋ goykaw CSS tukey fasal",
+       "right-editmyuserjs": "War boŋ JavaScript tukey fasal",
+       "right-viewmywatchlist": "War boŋ hawgayhayey guna",
+       "right-editmywatchlist": "War boŋ hawgayhayey fasal. Laasaabu kaŋ teera fooyaŋ ga mooyaŋ tonton bila nda woo fondaa.",
+       "right-viewmyprivateinfo": "War boŋ sutura hayhayey guna (sanda bataga aderesu, maa cimi)",
+       "right-editmyprivateinfo": "War boŋ sutura bayhayey fasal (sanda bataga aderesu, maa cimi)",
+       "right-editmyoptions": "War boŋ ibaayey fasal",
+       "right-rollback": "Cahã ka barmawey yeeti goykaw koraa kaŋ na moo naadirante foo fasal se",
+       "right-markbotedits": "Barmawey kaŋ yeeti kul cebe sanda maršin berandiyaŋ",
+       "right-noratelimit": "Ši kula nda albaha dimma alkadarey",
+       "right-import": "Moɲey zaa wiki tanayaŋ ga",
+       "right-importupload": "Moɲey zaa tuku zijante foo ga",
+       "right-patrol": "Šilbay kaŋ boro taney barmawey ga kurandi",
+       "right-autopatrol": "Ka boro boŋ barmawey šilbay nd'i ma kurandi",
+       "right-patrolmarks": "Barmay kokorantey kuray šilbawey guna",
+       "right-unwatchedpages": "Moɲey kaŋ ši hawgandi guna ne",
+       "right-mergehistory": "Moɲey taarikoo marga",
+       "right-userrights": "Goykey alhakey kul fasal",
+       "right-userrights-interwiki": "Goykaw alhakey fasal wiki tanawey ga",
+       "right-siteadmin": "Bayrahugoo kufal nd'a feeri",
+       "right-override-export-depth": "Moɲey kaataray kaŋ ra moo dobantey hala guusu 5 alkadar ga",
+       "right-sendemail": "Bataga sanba goykaw taney do",
+       "right-passwordreset": "Šennikufal yeetiyan batagawey guna",
+       "newuserlogpage": "Goykaw teeyan ceebandu tiira",
+       "newuserlogpagetext": "Goykaw teeyaney ceebandu tiira ti woo.",
+       "rightslog": "Goykaw alhakey ceebandu tiira",
+       "rightslogtext": "Ceebandu tiiraa woo tee goykaw alhakey barmawey.",
+       "action-read": "moɲoo woo caw",
+       "action-edit": "moɲoo woo fasal",
+       "action-createpage": "moɲey tee",
+       "action-createtalk": "kakaw",
+       "action-createaccount": "goykaw kontoo woo tee",
+       "action-history": "moɲoo woo taarikoo guna",
+       "action-minoredit": "woo šilbay sanda barmay kaccu",
+       "action-move": "moɲoo woo ganandi",
+       "action-move-subpages": "moɲoo woo ganandi, nga moɲiizey da",
+       "action-move-rootuserpages": "linji goykaw moɲey ganandi",
+       "action-move-categorypages": "dumi moɲey ganandi",
+       "action-movefile": "tukoo woo ganandi",
+       "action-upload": "tukoo woo zijandi",
+       "action-reupload": "hantum tuku barantaa woo boŋ",
+       "action-reupload-shared": "hantum tukoo woo boŋ jišidoo žemnante ga",
+       "action-upload_by_url": "tukoo woo zijandi ka hun URL foo ga",
+       "action-writeapi": "goy nda hantum API",
+       "action-delete": "moɲoo woo tuusu",
+       "action-deleterevision": "fillaa woo tuusu",
+       "action-deletedhistory": "moɲoo woo taariki tuusantaa guna",
+       "action-browsearchive": "moo tuusantey ceeci",
+       "action-undelete": "moɲoo woo yeeri",
+       "action-suppressrevision": "filla tugantaa woo filla nd'a yeeti",
+       "action-suppressionlog": "suturu cebandu tiira guna",
+       "action-block": "goykaa woo ganji a m'a barmay",
+       "action-protect": "jejebu alkadarey barmay moɲoo woo se",
+       "action-rollback": "cahã ka barmawey yeeri goykaw kokorantaa kaŋ na moo naadirantaa barmay se",
+       "action-import": "moɲey zaa wiki tana foo ga",
+       "action-importupload": "moɲey zaa tuku zijante foo ga",
+       "action-patrol": "šilbay kaŋ boro taney barmawey ga kurandi",
+       "action-autopatrol": "war boŋ barmaa šilbay kaŋ a ga kurandi",
+       "action-unwatchedpages": "moɲey kaŋ si hawgayandi maašeedaa guna",
+       "action-mergehistory": "moɲoo woo taarikoo marga",
+       "action-userrights": "goykaw alhakey kul fasal",
+       "action-userrights-interwiki": "goykaw alhakey fasal goykey kul se wiki taney ga",
+       "action-siteadmin": "bayrayhugoo kufal wal'a feeri",
+       "action-sendemail": "batagawey sanba",
+       "action-editmywatchlist": "war hawgayhayey fasal",
+       "action-viewmywatchlist": "war hawgayhayey guna",
+       "action-viewmyprivateinfo": "war sutura alhabaroo guna",
+       "action-editmyprivateinfo": "war sutura alhabarpp fasal",
+       "nchanges": "{{PLURAL:$1|barmay}} $1",
+       "enhancedrc-since-last-visit": " $1 {{PLURAL:$1|za gunayan koraa}}",
+       "enhancedrc-history": "taariki",
+       "recentchanges": "Barmay kokorantey",
+       "recentchanges-legend": "Barmay kokorantey suubarey",
+       "recentchanges-summary": "Hanga barmay kokorantey kaŋ tee wikiyoo ga moɲoo woo ra.",
+       "recentchanges-noresult": "Barmay kul mana tee waatoo ra kaŋ ga hima šilbawey kaŋ noondi.",
+       "recentchanges-feed-description": "Hanga barmay kokorantey kaŋ tee wikiyoo ga toonandiyanoo woo ra.",
+       "recentchanges-label-newpage": "Barmaa woo na moo taaga tee",
+       "recentchanges-label-minor": "Woo ti barmay kaccu",
+       "recentchanges-label-bot": "Maršin no ka barmaa woo tee",
+       "recentchanges-label-unpatrolled": "Barmaa woo mana kurandi jina",
+       "recentchanges-label-plusminus": "Moɲoo azzaatoo barmay nda cebsi hinnaa woo",
+       "recentchanges-legend-heading": "'''Maana:'''",
+       "recentchanges-legend-newpage": "{{int:barmay kokorantey-šilbay-moo taaga}} (guna da [[Special:NewPages|moo taagey maašeede]])",
+       "recentchanges-legend-plusminus": "(<em>±123</em>)",
+       "rcnotefrom": "Ne ganda {{PLURAL:$5|ti barmay|barmawey}} za <strong>$3, $4</strong> (hala <strong>$1</strong> kaŋ ga cebandi).",
+       "rclistfrom": "Cebe barmay taagey kaŋ ga šintin $2, $3 ga",
+       "rcshowhideminor": "Barmay kaccu $1",
+       "rcshowhideminor-show": "Cebe",
+       "rcshowhideminor-hide": "Tugu",
+       "rcshowhidebots": "Maršin berekay $1",
+       "rcshowhidebots-show": "Cebe",
+       "rcshowhidebots-hide": "Tugu",
+       "rcshowhideliu": "Goykaw hantumante $1",
+       "rcshowhideliu-show": "Cebe",
+       "rcshowhideliu-hide": "Tugu",
+       "rcshowhideanons": "Goykaw kaŋ ši nda maa $1",
+       "rcshowhideanons-show": "Cebe",
+       "rcshowhideanons-hide": "Tugu",
+       "rcshowhidepatr": "Barmay kurante $1",
+       "rcshowhidepatr-show": "Cebe",
+       "rcshowhidepatr-hide": "Tugu",
+       "rcshowhidemine": "Ay barmay $1",
+       "rcshowhidemine-show": "Cebe",
+       "rcshowhidemine-hide": "Tugu",
+       "rclinks": "Cebe barmay koraw $1 jirbi $2 korawey ra<br />$3",
+       "diff": "zilayyan",
+       "hist": "taariki",
+       "hide": "Tugu",
+       "show": "Cebe",
+       "minoreditletter": "m",
+       "newpageletter": "N",
+       "boteditletter": "b",
+       "rc_categories": "Kayandi dumey ga (i fay nda \"|\")",
+       "rc_categories_any": "Affoo kul",
+       "rc-change-size": "$1",
+       "rc-change-size-new": "{{PLURAL:$1|cebsi}} $1 barmaa banda ga",
+       "newsectionsummary": "/* $1 */ dunbu taaga",
+       "rc-enhanced-expand": "Šilbayhayey cebe",
+       "rc-enhanced-hide": "Šilbayhayey tugu",
+       "rc-old-title": "aššil teeyanoo sanda \"$1\"",
+       "recentchangeslinked": "Barmay kondantey",
+       "recentchangeslinked-feed": "Barmay kondantey",
+       "recentchangeslinked-toolbox": "Barmay kondantey",
+       "recentchangeslinked-title": "Barmay kondantey \"$1\" ga",
+       "license": "Duɲeyan:",
+       "license-header": "Duɲeyan",
+       "nolicense": "Haya kul mana suubandi",
+       "licenses-edit": "Duɲeyan suubarey fasal",
+       "license-nopreview": "(Moofuryan ši bara)",
+       "upload_source_url": "(war tuku suubantaa ka hun URL henna nda forba-duura ga)",
+       "upload_source_file": "(war tuku suubantaa ka hun war ordinateroo ga)",
+       "listfiles-delete": "tuusu",
+       "listfiles-summary": "Cerecere moɲoo woo ga tuku zumantey kul cebe.",
+       "listfiles_search_for": "Hẽenandihaya maa ceeci:",
+       "imgfile": "tuku",
+       "listfiles": "Tuku maašeeda",
+       "listfiles_thumb": "Kanbeboy",
+       "listfiles_date": "Han",
+       "listfiles_name": "Maa",
+       "listfiles_user": "Goykaw",
+       "listfiles_size": "Azzaati",
+       "listfiles_description": "Šilbayyan",
+       "listfiles_count": "Dumey",
+       "listfiles-show-all": "Biyey dumi žeeney goo no",
+       "listfiles-latestversion": "Sohõda dumoo",
+       "listfiles-latestversion-yes": "Ayyo",
+       "listfiles-latestversion-no": "Kalaa",
+       "file-anchor-link": "Tuku",
+       "filehist": "Tuku taariki",
+       "filehist-help": "Han/waati naagu ka dii tukoo taka kaŋ nd'a ga bangay waati din.",
+       "filehist-deleteall": "ikul tuusu",
+       "filehist-deleteone": "tuusu",
+       "filehist-revert": "willi",
+       "filehist-current": "sohõda",
+       "filehist-datetime": "Han/waati",
+       "filehist-thumb": "Kanbeboy",
+       "filehist-thumbtext": "Kanbeboy dumoo se sanda $1 ga",
+       "filehist-nothumb": "Kanbeboy kul šii",
+       "filehist-user": "Goykaw",
+       "filehist-dimensions": "Adadey",
+       "filehist-filesize": "Tuku azzaati",
+       "filehist-comment": "Deede",
+       "imagelinks": "Tuku goyyan",
+       "linkstoimage": "Ne {{PLURAL:$1|moo $1 ga dobu}} tukoo woo ga:",
+       "linkstoimage-more": "A ga bisa {{PLURAL:$1|moo $1 kaŋ ga dobu}} tukoo woo ga.\nMaašeedaa woo ga {{PLURAL:$1|moo jina dobu |moo jina $1 dobey}} cebe tukoo woo hinne ga.\n[[Special:WhatLinksHere/$2|maašeeda timmante]] ga bara.",
+       "nolinkstoimage": "Moo kulyaŋ šii kaŋ ga dobu tukoo woo ga.",
+       "morelinkstoimage": "[[Special:WhatLinksHere/$1|dobu tontoni]] guna tukoo woo ka.",
+       "linkstoimage-redirect": "$1 (tuku gumari) $2",
+       "duplicatesoffile": " {{PLURAL:$1|tukoo ti fillante|tuku $1 ti fillanteyaŋ}} tukoo woo se ([[Special:FileDuplicateSearch/$2|bay ka tonton]]):",
+       "sharedupload": "Tukoo woo hun $1 ga nda porože tanayaŋ ga hin ka goy nd'a.",
+       "sharedupload-desc-there": "Tukoo woo hun $1 ga nda porože tanayaŋ ga hin ka goy nd'a.",
+       "sharedupload-desc-here": "Tukoo woo hun $1 ga nda porože tanayaŋ ga hin ka goy nd'a.\nŠilbayyan nga [$2 tuku šilbayyan moo] noodin ga cebe ne ganda.",
+       "sharedupload-desc-edit": "Tukoo woo hun $1 ga nda porože tanayaŋ ga hin ka goy nd'a.\nA ga hin ka tee war ga boona ka šilbayyanoo fasal nga noodin [$2 tuku šilbayyan moo] ga.",
+       "sharedupload-desc-create": "Tukoo woo hun $1 ga nda porože tanayaŋ ga hin ka goy nd'a.\nA ga hin ka tee war ga boona ka šilbaa fasal noodin nda [$2 tuku šilbayyan moɲoo] ga.",
+       "filepage-nofile": "Tukoo woo maakoyni kul ši bara.",
+       "filepage-nofile-link": "Tukoo woo maakoyni kul ši bara, amma war ga hin ka nga [$1 zumandi].",
+       "uploadnewversion-linktext": "Tukoo woo dumi taaga zijandi",
+       "shared-repo-from": "ka hum $1 do",
+       "shared-repo": "jišidoo žemnante",
+       "shared-repo-name-wikimediacommons": "Wikimedia Commons",
+       "filepage.css": "/* CSS kaŋ jisandi ne ga bara tuku šilbayyan moɲoo ga, a goo daykaw ceewaani wikitiirawey da ga */",
+       "upload-disallowed-here": "War ši hin ka hantum tukoo woo boŋ.",
+       "filerevert": "$1 willi",
+       "filerevert-legend": "Tuku willi",
+       "filerevert-intro": "War ga kaa ka tukoo willi <strong>[[Media:$1|$1]]</strong> nga [$4 dumi ga $3 waate, $2 hane].",
+       "filerevert-comment": "Dalil:",
+       "filerevert-defaultcomment": "Willi dumoo ga kaŋ tee $2 waate, $1 hane.",
+       "filerevert-submit": "Willi",
+       "filerevert-success": "<strong>[[Media:$1|$1]]</strong> n' ka willi [$4 dumi ga $3 waate, $2 hane].",
+       "filerevert-badversion": "Nungu dumi bisante kul ši bara tukoo woo se nda waatišilbaa kaŋ noondi.",
+       "filedelete": "$1 tuusu",
+       "filedelete-legend": "Tuku tuusu",
+       "filedelete-intro": "War ga kaa ka tuku <strong>[[Media:$1|$1]]</strong>nda nga taarikoo kul tuusu.",
+       "filedelete-intro-old": "War goo ma dumi <strong>[[Media:$1|$1]]</strong> tuusu za [$4 $3 waate, $2 hane].",
+       "filedelete-comment": "Dalil:",
+       "filedelete-submit": "Tuusu",
+       "filedelete-success": "<strong>$1</strong> n' ka tuusandi.",
+       "filedelete-success-old": "Dumi <strong>[[Media:$1|$1]]</strong> za $3 waate, $2 hane n' ka tuusandi.",
+       "filedelete-nofile": "<strong>$1</strong> ši bara.",
+       "filedelete-nofile-old": "Dumi jisante kul ši <strong>$1</strong> se nda alhaaley wey kaŋ tabatandi.",
+       "filedelete-otherreason": "Dalil tana/tontoni:",
+       "filedelete-reason-otherlist": "Dalil waani",
+       "filedelete-reason-dropdown": "*Yamma tuusuyan daliley\n**Hantummayray alhaku hooyan\n**Tuku fillante",
+       "filedelete-edit-reasonlist": "Fasal tuusuyan daliley",
+       "filedelete-maintenance": "Tuku tuusuyan nda yeekateyan ši goy waati foo hawgayyan-goy sabbu ra.",
+       "filedelete-maintenance-title": "Ši hin ka tuku tuusu",
+       "mimesearch": "MIME ceeci",
+       "mimesearch-summary": "Moɲoo woo ka naŋ tukey ma faya ngi MIME dumoo bande.\nDamhaya: contenttype/subtype wala contenttype/*, sanda <code>image/jpeg</code>",
+       "mimetype": "MIME dumi:",
+       "download": "zumandi",
+       "unwatchedpages": "Moɲey kaŋ ši gunandi",
+       "listredirects": "Bisandiyan maašeede",
+       "listduplicatedfiles": "Tuku fillantey maašeede",
+       "listduplicatedfiles-summary": "Woo ti tuku maašeede kaŋ ra tukoo dumi kokorantaa ga tee celle tuku tana foo dumi kokorantaa se. Nungu-bande tukey de no woo g'i guna.",
+       "listduplicatedfiles-entry": "[:File:$1|$1]] goo nda [[$3|{{PLURAL:$2|celle foo|celle $2}}]].",
+       "unusedtemplates": "Leetey kaŋ ši goyandi",
+       "unusedtemplatestext": "Moɲoo woo ga moɲey kul cebe {{ns:template}} maafarroo ra, kaŋyaŋ ši bara moo tana foo ra.\nHonga ka dobu taney tenjandi leetey ga jina nda war ga baa k'i tuusu.",
+       "unusedtemplateswlh": "doby taney",
+       "randompage": "Kaašim moo",
+       "randompage-nopages": "Moo kul ši ne {{PLURAL:$2|maafarroo|maafarrey}} ra: $1.",
+       "randomincategory": "Kaašim moo dumi ra",
+       "randomincategory-invalidcategory": "\"$1\" manti dumi maa henna.",
+       "randomincategory-nopages": "Moo kul ši bara [[:Category:$1|$1]] dumoo ra.",
+       "randomincategory-category": "Dumi:",
+       "randomincategory-legend": "Kaašim moo dumi ra",
+       "randomredirect": "Kaašim bisandiyan",
+       "randomredirect-nopages": "Bisandiyan kul ši \"$1\" maafarroo ra.",
+       "statistics": "Kabu-izey",
+       "statistics-header-pages": "Moo kabu-izey",
+       "statistics-header-edits": "Fasalyan kabu-izey",
+       "statistics-header-users": "Goykaw kabu-izey",
+       "statistics-header-hooks": "Kabu-ize taney",
+       "statistics-articles": "Gundekuna moɲey",
+       "statistics-pages": "Moɲes",
+       "statistics-pages-desc": "Moɲey kul kaŋ goo wikiyoo ra, sanda deede moɲey, bisandiyaney nda taney.",
+       "statistics-files": "Tuku zijantey",
+       "statistics-edits": "Moo barmawey za {{SITENAME}}  n' ka gorandi",
+       "statistics-edits-average": "Sasawandi barmaney moo foo kul se",
+       "statistics-users": "Maa-hantumante [[Special:ListUsers|goykey]]",
+       "statistics-users-active": "Goykaw kaŋ goo mee ra",
+       "statistics-users-active-desc": "Goykey kaŋ na teera foo timmandi {{PLURAL:$1|zaari $1}} koraw ra",
+       "pageswithprop": "Moɲoo kaŋ goo nda moo mayray",
+       "pageswithprop-legend": "Moɲey kaŋ goo nda moo mayray",
+       "pageswithprop-text": "Moɲoo woo ga mooyaŋ cebe kaŋ ga goy nda moo mayray naadira.",
+       "pageswithprop-prop": "Mayray maa:",
+       "pageswithprop-submit": "Koy",
+       "pageswithprop-prophidden-long": "hantum mayray hinna tugande kuku $1)",
+       "pageswithprop-prophidden-binary": "fondo-hinka mayray hinna tugante ($1)",
+       "doubleredirects": "Bisandiyan fillantey",
+       "doubleredirectstext": "Moɲoo woo ga mooyaŋ cebe kaŋ ga bisandi bisandiyan moo tanayaŋ ga./nSorro foo kul goo nda dobuyaŋ ijinaa ga nda bisandiyaŋ ihinkantoo ga, kaŋ ga doona ka tee \"real\" toodoo moɲoo kaŋ do bisandiyan jinaa ga hima ka sinja.\n Hantumey <del>gamžeerantey</del> kul aššiloo duwandi.",
+       "emailsend": "sanba",
+       "emailccme": "Ay batagaa sanba ya ne da",
+       "emailccsubject": "War batagaa ga bere $1 ga: $2",
+       "emailsent": "Bataga sanbandi",
+       "emailsenttext": "War batagaa n' ka sanbandi.",
+       "emailuserfooter": "$1 na batagaa woo sanba $2 do nda \"Email user\" goyfondo {{SITENAME}} ga.",
+       "usermessage-summary": "Goo ma dabariɲaa alhabar sanba.",
+       "usermessage-editor": "Dabariɲaa bayrandikaw",
+       "usermessage-template": "MediaWiki:UserMessage",
+       "watchlist": "Hawgayhayey",
+       "mywatchlist": "Hawgayhayey",
+       "watchlistfor2": "$1 $2 se",
+       "nowatchlist": "Haya-izeyaŋ kul šii war hawgayhayey ra.",
+       "watchlistanontext": "Wa huru taare ka dii haya-izey war hawgayhayey ra. wala k'i fasal.",
+       "watchnologin": "Mana huru",
+       "addwatch": "Tonton hawgayhayey ga",
+       "addedwatchtext": "\"[[:$1]]\" moɲoo n' ka tontonandi war [[Special:Watchlist|watchlist]] ga.\nHiino barmawey kaŋ tee moɲoo woo nda deede moo kondantaa ga cebandi noodin.",
+       "addedwatchtext-short": " \"$1\" moɲoo n' ka tontonandi war hawgayhayey ga.",
+       "removewatch": "Kaa hawgayhayey ra",
+       "removedwatchtext": " \"[[:$1]]\"  moɲoo  n' ka hun [[Special:Watchlist|war hawgayhayey]] ra.",
+       "removedwatchtext-short": "\"$1\" moɲoo n' ka hun war hawgayhayey ra.",
+       "watch": "Hawgay",
+       "watchthispage": "Moɲoo woo hawgay",
+       "unwatch": "Ma ši hawgay",
+       "unwatchthispage": "Feenda hawgayhayyan",
+       "notanarticle": "Manti gundekuna moo",
+       "notvisiblerev": "Filla koraa kaŋ goykaw waani n'a tee n' ka tuusandi",
+       "watchlist-details": "{{PLURAL:$1|moo $1}} bara war hawgayhayey ra, deede moɲey ši kabu jere ga.",
+       "wlheader-enotif": "Bataga bayrandiyan n' ka tunandi.",
+       "wlheader-showupdated": "Moɲey kaŋ barmay za cee koraa kaŋ war n'i guna ga cebandi harfu <strong>warga</strong> ra.",
+       "wlnote": "Ne ganda {{PLURAL:$1|ti barmay kokorante <strong>$1</strong>}} za {{PLURAL:$2|guuru kokorante <strong>$2</strong> ra}}, $3 hane, $4 waate.",
+       "wlshowlast": "Guuru $1 zaari $2 kokorante cebe",
+       "watchlist-options": "Hawgayhaya suubarey",
+       "watching": "Goo ma hawgay…",
+       "unwatching": "Ši ma guna…",
+       "watcherrortext": "Firka bangay waatoo kaŋ war hawgayhayey kayandiyaney ga barmay \"$1\" se.",
+       "enotif_reset": "Moo gunantey kul šilbay",
+       "enotif_impersonal_salutation": "{{SITENAME}} goykaw",
+       "ilsubmit": "ceeci",
+       "bydate": "han bande",
+       "sp-newimages-showfrom": "Tuku taagey kaŋ ga šintin $2 waate, $1 hane",
+       "video-dims": "$1, $2 × $3",
+       "seconds-abbrev": "s $1",
+       "minutes-abbrev": "min $1",
+       "hours-abbrev": "g $1",
+       "days-abbrev": "z $1",
+       "seconds": "{{PLURAL:$1|segondu $1}}",
+       "minutes": "{{PLURAL:$1|miniti $1}}",
+       "hours": "{{PLURAL:$1|guura $1}}",
+       "days": "{{PLURAL:$1|zaari $1}}",
+       "weeks": "{{PLURAL:$1|jirbiyye $1}}",
+       "months": "{{PLURAL:$1|handu $1}}",
+       "years": "{{PLURAL:$1|jiiri $1}}",
+       "ago": "za $1",
+       "just-now": "sohõda tilliyo",
+       "hours-ago": "za {{PLURAL:$1|guuru}} $1",
+       "minutes-ago": "za {{PLURAL:$1|miniti}} $1",
+       "seconds-ago": "za {{PLURAL:$1|segondu}} $1",
+       "monday-at": "Atinni $1",
+       "tuesday-at": "Atalaata $1",
+       "wednesday-at": "Alarba $1",
+       "thursday-at": "Alhamiisa $1",
+       "friday-at": "Alzuma $1",
+       "saturday-at": "Asibti $1",
+       "sunday-at": "Alhadi $1",
+       "yesterday-at": "Bi $1",
+       "bad_image_list": "Takaroo ti takaa woo:\n\nHaya-izey hantumantey (žeerey kaŋ ga šintiin nda *) de ma kulandi.\nDobu jinaa kaŋ goo žeeroo ga ga hima ka dobu tuku laala ga.\nDobu tontoni žeeri follokaa ga kul ga hima hasarawyaŋ, sanda moɲey kaŋ ra tukoo ga bangay hantum-game ra.",
+       "variantname-zh-hans": "hans",
+       "variantname-zh-hant": "hant",
+       "variantname-zh-cn": "cn",
+       "variantname-zh-tw": "tw",
+       "variantname-zh-hk": "hk",
+       "variantname-zh-mo": "mo",
+       "variantname-zh-sg": "sg",
+       "variantname-zh-my": "my",
+       "variantname-zh": "zh",
+       "variantname-gan-hans": "hans",
+       "variantname-gan-hant": "hant",
+       "variantname-gan": "gan",
+       "variantname-sr-ec": "sr-ec",
+       "variantname-sr-el": "sr-el",
+       "variantname-sr": "sr",
+       "variantname-kk-kz": "kk-kz",
+       "variantname-kk-tr": "kk-tr",
+       "variantname-kk-cn": "kk-cn",
+       "variantname-kk-cyrl": "kk-cyrl",
+       "variantname-kk-latn": "kk-latn",
+       "variantname-kk-arab": "kk-arab",
+       "variantname-kk": "kk",
+       "variantname-ku-arab": "ku-Arab",
+       "variantname-ku-latn": "ku-Latn",
+       "variantname-ku": "ku",
+       "variantname-tg-cyrl": "tg-Cyrl",
+       "variantname-tg-latn": "tg-Latn",
+       "variantname-tg": "tg",
+       "variantname-ike-cans": "ike-Cans",
+       "variantname-ike-latn": "ike-Latn",
+       "variantname-iu": "iu",
+       "variantname-shi-tfng": "shi-Tfng",
+       "variantname-shi-latn": "shi-Latn",
+       "variantname-shi": "shi",
+       "variantname-uz": "uz",
+       "variantname-uz-latn": "uz-Latn",
+       "variantname-uz-cyrl": "uz-Cyrl",
+       "metadata": "Bayahaya beeri",
+       "metadata-help": "Tukoo woo ga bara nda alhabar tontonante, a ga hin ka tee hinna biizaakaw wala biiberekaw nd'a tee wal'a bere hinna ra.\nNda tukoo n' ka barmay ka hun nga aššil alhaaloo ga, mane šilbayhaya fooyaŋ ši ye ka sawa nd'alhaali barmantaa koyne.",
+       "metadata-expand": "Šilbayhaya kukantey cebe",
+       "metadata-collapse": "Šilbayhaya kukantey tugu",
+       "metadata-fields": "Bii bayhaya beeri faarey kaŋ hantumandi alhabaroo ra ga kaa ka bara nda moo bii ceberi nda bayhaya beeri daaroo ga yee cere ga.\nJerey ga tugandi tilasu ra.\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": "<strong>$2:</strong> $1",
+       "metadata-langitem-default": "$1",
+       "exif-imagewidth": "Hayri",
+       "exif-imagelength": "Kayyan",
+       "exif-bitspersample": "Cebsey jere-ize ra",
+       "exif-compression": "Kankamandiyan dabari",
+       "exif-photometricinterpretation": "Biitonbi margayan",
+       "exif-orientation": "Honnandiyan",
+       "exif-samplesperpixel": "Jere-izey hinna",
+       "exif-planarconfiguration": "Bayhaya kanandiyan",
+       "exif-ycbcrsubsampling": "Y hala C ganda-birjiyan dimma",
+       "exif-ycbcrpositioning": "Y hala C kaydoo",
+       "exif-xresolution": "Kaniyan biisahã",
+       "exif-yresolution": "Zunbuyan biisahã",
+       "exif-stripoffsets": "Bii bayhaya gorodoo",
+       "exif-rowsperstrip": "Sorro hinna zuu foo ra",
+       "exif-stripbytecounts": "Cebsu hinna zuu kankamante ra",
+       "exif-jpeginterchangeformat": "Kay JPEG SOI ga",
+       "exif-jpeginterchangeformatlength": "JPEG bayhaya cebsu hinna",
+       "exif-whitepoint": "Tonbi kaaray noone alhaaley",
+       "exif-primarychromaticities": "Noone alhaaley atabiyawey se",
+       "exif-ycbcrcoefficients": "Noone faari barmayyan hinnaɲaa alkadarey",
+       "exif-referenceblackwhite": "Celle bibi nd'ikaaray fella hinnawey",
+       "exif-datetime": "Tuku barmayyan han nda waati",
+       "exif-imagedescription": "Bii maa",
+       "exif-make": "Biizaahaya teekaw",
+       "exif-model": "Biizaahaya tee-dumi",
+       "exif-software": "Goyjinay kaŋ goyandi",
+       "exif-artist": "Hantumkaw",
+       "exif-copyright": "Alhaku mayraykoyni",
+       "exif-exifversion": "Exif dumi",
+       "exif-flashpixversion": "Flashpix dumi kaŋ goo nda kanbari",
+       "exif-colorspace": "Noone farru",
+       "exif-componentsconfiguration": "Jere-ize foo kul maana",
+       "exif-compressedbitsperpixel": "Bii kankamandiyan yaayi",
+       "exif-pixelydimension": "Bii hayri",
+       "exif-pixelxdimension": "Bii kayyan",
+       "exif-usercomment": "Goykaw daarawey",
+       "exif-relatedsoundfile": "Jinde tuku hangante",
+       "exif-datetimeoriginal": "Han nda waati bayhaya teeyan se",
+       "exif-datetimedigitized": "Han nda waati hinna-bereyan se",
+       "exif-subsectime": "DateTime subseconds",
+       "exif-subsectimeoriginal": "DateTimeOriginal subseconds",
+       "exif-subsectimedigitized": "DateTimeDigitized subseconds",
+       "exif-exposuretime": "Biizaayan waati",
+       "exif-exposuretime-format": "seg $1 ($2)",
+       "exif-fnumber": "F Hinna",
+       "exif-fnumber-format": "f/$1",
+       "exif-exposureprogram": "Biizaayan porogaram",
+       "exif-spectralsensitivity": "Gaayay maateyan",
+       "exif-isospeedratings": "ISO cahãri zimamyan",
+       "exif-shutterspeedvalue": "APEX daabirji cahãri",
+       "exif-aperturevalue": "APEX daabirji",
+       "exif-brightnessvalue": "APEX gaay",
+       "exif-exposurebiasvalue": "APEX daabirji mee",
+       "exif-maxaperturevalue": "Labu daabirji beeri",
+       "exif-subjectdistance": "Teekaw hiyaari",
+       "exif-meteringmode": "Neešiyan yaayi",
+       "exif-lightsource": "Fawra aššil",
+       "exif-flash": "Denji",
+       "exif-focallength": "Diji gunayan sahã",
+       "exif-focallength-format": "mm $1",
+       "exif-subjectarea": "Teekaw ganda",
+       "exif-flashenergy": "Denji sahã",
+       "exif-focalplanexresolution": "Moodiiyan X biisahã",
+       "exif-focalplaneyresolution": "Moodiiyan Y biisahã",
+       "exif-focalplaneresolutionunit": "Moodiiyan biisahã ize",
+       "exif-subjectlocation": "Teekaw gorodoo",
+       "exif-exposureindex": "Biizaayan šilbay",
+       "exif-sensingmethod": "Maateyan dabari",
+       "exif-filesource": "Tuku aššil",
+       "exif-scenetype": "Ganda dumi",
+       "exif-customrendered": "Laada bii hanseyan",
+       "exif-exposuremode": "Biizaayan yaayi",
+       "exif-whitebalance": "Kaaray almizan",
+       "exif-digitalzoomratio": "Hinna bii azzaati",
+       "exif-focallengthin35mmfilm": "Moodii kukuyan mm 35 filim ra",
+       "exif-scenecapturetype": "Ganda zaayan dumi",
+       "exif-gaincontrol": "Ganda korošiyan",
+       "exif-contrast": "Bii zilayyan",
+       "exif-saturation": "Bii tiŋay",
+       "exif-sharpness": "Bii henanyan",
+       "exif-devicesettingdescription": "Jinay kayandiyaney šilbayyan",
+       "exif-subjectdistancerange": "Teekaw mooruyan alkadar",
+       "exif-imageuniqueid": "Bii folloku tammaasa",
+       "exif-gpsversionid": "GPS kanjari dumi",
+       "exif-gpslatituderef": "Hawsa wala gurma hayyanzuu",
+       "exif-gpslatitude": "Hayyanzuu",
+       "exif-gpslongituderef": "Dandi wala dangay kayyanzuu",
+       "exif-gpslongitude": "Kayyanzuu",
+       "exif-gpsaltituderef": "Beene fella",
+       "exif-gpsaltitude": "Beene",
+       "exif-gpstimestamp": "GPS waati (atom montor)",
+       "exif-gpssatellites": "Satelitey kaŋ nda neesširoo tee",
+       "exif-gpsstatus": "Duukaw assariya",
+       "exif-gpsmeasuremode": "Neeširi alhaali",
+       "exif-gpsdop": "Neeširi alhakiikataray",
+       "exif-gpsspeedref": "Cahãri ize",
+       "exif-gpsspeed": "GPS duukaw cahãri",
+       "exif-gpstrackref": "Fella nootiyan tenje se",
+       "exif-gpstrack": "Ɲootiyan tenje",
+       "exif-gpsimgdirectionref": "Fella bii tenje se",
+       "exif-gpsimgdirection": "Bii tenje",
+       "exif-gpsmapdatum": "Labu neešiyan bayhaya damante",
+       "exif-gpsdestlatituderef": "Fella toodoo hayyanzuu se",
+       "exif-gpsdestlatitude": "Toodoo hayyanzuu",
+       "exif-gpsdestlongituderef": "Fella toodoo kayyanzuu se",
+       "exif-gpsdestlongitude": "Toodoo kayyanzuu",
+       "exif-gpsdestbearingref": "Fella toodoo jineteeyan se",
+       "exif-gpsdestbearing": "Toodoo jineteeyan",
+       "exif-gpsdestdistanceref": "Fella toodoo mooray se",
+       "exif-gpsdestdistance": "Toodoo mooray",
+       "exif-gpsprocessingmethod": "Maa GPS kabuyan dabari se",
+       "exif-gpsareainformation": "Maa GPS ganda se",
+       "exif-gpsdatestamp": "GPS han",
+       "exif-gpsdifferential": "GPS zilayyan serrandi",
+       "exif-coordinate-format": "$1° $2′ $3″ $4",
+       "exif-jpegfilecomment": "JPEG tuku daara",
+       "exif-keywords": "Kufalkalimawey",
+       "exif-worldregioncreated": "Adduɲɲa gandaa kaŋ ra biyoo zaandi",
+       "exif-countrycreated": "Laamaa kaŋ ra biyoo zaandi",
+       "exif-countrycodecreated": "Laamaa kaŋ ra biyoo zaandi lanbaa",
+       "exif-provinceorstatecreated": "Laama žemnaroo wala hinoo kaŋ ra biyoo zaandi",
+       "exif-citycreated": "Gaaloo kaŋ ra biyoo zaandi",
+       "exif-sublocationcreated": "Gallu fargandoo kaŋ ra biyoo zaandi",
+       "exif-worldregiondest": "Adduɲɲa gandaa kaŋ ra biyoo zaandi",
+       "exif-countrydest": "Laamaa kaŋ cebandi",
+       "exif-countrycodedest": "Laamaa kaŋ cebandi lanbaa",
+       "exif-provinceorstatedest": "Laama žemnaroo wala hinoo kaŋ cebandi",
+       "exif-citydest": "Galloo kaŋ cebandi",
+       "exif-sublocationdest": "Gallu fragandoo kaŋ cebandi",
+       "exif-objectname": "Maa duura",
+       "exif-specialinstructions": "Cerecere fahamandiyan",
+       "exif-headline": "Maabon",
+       "exif-credit": "Alhaku/Nookaw",
+       "exif-source": "Aššil",
+       "exif-editstatus": "Bii wallafiyan assariya",
+       "exif-urgency": "Tilasu",
+       "exif-fixtureidentifier": "Hawari maa",
+       "exif-locationdest": "Gorodoo šilbante",
+       "exif-locationdestcode": "Lanba gorodoo šilbante se",
+       "exif-objectcycle": "Zaari waatoo kaŋ se hẽenandi jinaa miile",
+       "exif-contact": "Hantumyan alhabar",
+       "exif-writer": "Hantumkaw",
+       "exif-languagecode": "Šenni",
+       "exif-iimversion": "IIM dumi",
+       "exif-iimcategory": "Dumi",
+       "exif-iimsupplementalcategory": "Dumi tontonantey",
+       "exif-datetimeexpires": "A ma ši goyandi nd'a bisa",
+       "exif-datetimereleased": "Fattayan han",
+       "exif-originaltransmissionref": "Sanbayan jinaa gorodoo lanbaa",
+       "exif-identifier": "Tammaasakaw",
+       "exif-lens": "Zaayan moodiji",
+       "exif-serialnumber": "Biizaahayaa fannu lanbaa",
+       "exif-cameraownername": "Biizaahayaa koyoo",
+       "exif-label": "Šilbay",
+       "exif-datetimemetadata": "Han bayhaya beeri barmay cee koraa",
+       "exif-nickname": "Bii maa kanbari",
+       "exif-rating": "Alkadar damyan (5 ra)",
+       "exif-rightscertificate": "Alhaku juwalyan tabatandi tiira",
+       "exif-copyrighted": "Teekaw alhaku assariya",
+       "exif-copyrightowner": "Teekaw alhaku mayraykoyni",
+       "exif-usageterms": "Goymee waafakay",
+       "exif-webstatement": "Interneti-ra alhaku koy kalima",
+       "exif-originaldocumentid": "Aššil takaddaa tammaasa follokaa",
+       "exif-licenseurl": "URL alhaku duɲeyan tiira",
+       "exif-morepermissionsurl": "Barmay-se duɲeyan tiira alhabar",
+       "exif-attributionurl": "Nda war ga goy nda woo koyne, dobu ne",
+       "exif-preferredattributionname": "Nda war ga goy nda woo koyne, saabu har",
+       "exif-pngfilecomment": "PNG tuku daara",
+       "exif-disclaimer": "Šikka yaamar",
+       "exif-contentwarning": "Gundekuna yaamar",
+       "exif-giffilecomment": "GIF tuku gundekuna",
+       "exif-intellectualgenre": "Haya-ize duni",
+       "exif-subjectnewscode": "Teekaw lanba",
+       "exif-scenecode": "IPTC ganda lanba",
+       "exif-event": "Teera šilbante",
+       "exif-organisationinimage": "Konday šilbante",
+       "exif-personinimage": "Boro šilbante",
+       "exif-originalimageheight": "Biyoo kayyanoo nd'a mana kosu",
+       "exif-originalimagewidth": "Biyoo hayroo nd'a mana kosu",
+       "exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
+       "exif-subjectnewscode-value": "$2 ($1)",
+       "exif-compression-1": "Mana kankamandi",
+       "exif-compression-2": "CCITT Kuray 3 1-Zimamari Huffman barmante diray kuuyan harfu-hawyan",
+       "exif-compression-3": "CCITT Kuray 3 faksu harfu-hawyan",
+       "exif-compression-4": "CCITT Kuray 4 faksu harfu-hawyan",
+       "exif-compression-5": "LZW",
+       "exif-compression-6": "JPEG (ižeena)",
+       "exif-compression-7": "JPEG",
+       "exif-compression-8": "Motti (Adobe)",
+       "exif-compression-32773": "PackBits (Macintosh RLE)",
+       "exif-compression-32946": "Motti (PKZIP)",
+       "exif-compression-34712": "JPEG2000",
+       "exif-copyrighted-true": "Teekaw alhaku saajante",
+       "exif-copyrighted-false": "Teekaw alkaku assariya mana kayandi",
+       "exif-photometricinterpretation-2": "RGB",
+       "exif-photometricinterpretation-6": "YCbCr",
+       "exif-unknowndate": "Han ši bayante",
+       "exif-orientation-1": "Hankul",
+       "exif-orientation-2": "Bere ka kanandi",
+       "exif-orientation-3": "Kuubi 180°",
+       "exif-orientation-4": "Bere ka sukandi",
+       "exif-orientation-5": "Kuubi 90° CCW nda bere ka sukandi",
+       "exif-orientation-6": "Kuubi 90° CCW",
+       "exif-orientation-7": "Kuubi 90° CW nda bere ka kanandi",
+       "exif-orientation-8": "Bere 90° CW",
+       "exif-planarconfiguration-1": "gunguti takari",
+       "exif-planarconfiguration-2": "planar takari",
+       "exif-xyresolution-i": "dpi $1",
+       "exif-xyresolution-c": "dpc $1",
+       "exif-colorspace-1": "sRGB",
+       "exif-colorspace-65535": "Mana faara",
+       "exif-componentsconfiguration-0": "ši bara",
+       "exif-componentsconfiguration-1": "Y",
+       "exif-componentsconfiguration-2": "Cb",
+       "exif-componentsconfiguration-3": "Cr",
+       "exif-componentsconfiguration-4": "R",
+       "exif-componentsconfiguration-5": "G",
+       "exif-componentsconfiguration-6": "B",
+       "exif-exposureprogram-0": "Manti bayrante",
+       "exif-exposureprogram-1": "Boŋteeyan",
+       "exif-exposureprogram-2": "Hankul porogaram",
+       "exif-exposureprogram-3": "Feeriyan jindoo",
+       "exif-exposureprogram-4": "Daabuyan jindoo",
+       "exif-exposureprogram-5": "Kanbeteeri porogaram (ga faari guusuyan dam jine)",
+       "exif-exposureprogram-6": "Teeyan porogaram (daabuyan cahãnte dam jine)",
+       "exif-exposureprogram-7": "Kayyanbii alhaali (ndum bii manante zaayan se nda bandafaari kokoorante)",
+       "exif-exposureprogram-8": "Hayyanbii alhaali (ganda bii moorante zaayan se nda bandafaari manante)",
+       "exif-subjectdistance-value": "meetar $1",
+       "exif-meteringmode-0": "Šibayante",
+       "exif-meteringmode-1": "Sasawandi",
+       "exif-meteringmode-2": "Gam tiŋay sasawante",
+       "exif-meteringmode-3": "Doo",
+       "exif-meteringmode-4": "Doo-boobo",
+       "exif-meteringmode-5": "Noone",
+       "exif-meteringmode-6": "Jere",
+       "exif-meteringmode-255": "Tana",
+       "exif-lightsource-0": "Šibayante",
+       "exif-lightsource-1": "Zaarigaaya",
+       "exif-lightsource-2": "Fawrante",
+       "exif-lightsource-3": "Tungsten (nunetaa denji)",
+       "exif-lightsource-4": "Meli",
+       "exif-lightsource-9": "Waati henna",
+       "exif-lightsource-10": "Duula (bur)",
+       "exif-lightsource-11": "Bii",
+       "exif-lightsource-12": "Zaarigaaya fawrante ((D 5700 – 7100K)",
+       "exif-lightsource-13": "Zaari kaaray fawrante ((N 4600 – 5400K)",
+       "exif-lightsource-14": "Fawra kaaray yayna ((W 3900 – 4500K)",
+       "exif-lightsource-15": "Kaaray fawrante (WW 3200 – 3700K)",
+       "exif-lightsource-17": "Gaaya tabatante A",
+       "exif-lightsource-18": "Gaaya tabatante B",
+       "exif-lightsource-19": "Gaaya tabatante C",
+       "exif-lightsource-20": "D55",
+       "exif-lightsource-21": "D65",
+       "exif-lightsource-22": "D75",
+       "exif-lightsource-23": "D50",
+       "exif-lightsource-24": "ISO goytenda tungsten",
+       "exif-lightsource-255": "Gaaya aššil tana",
+       "exif-flash-fired-0": "Meloo mana dii",
+       "exif-flash-fired-1": "Meloo dii",
+       "exif-flash-return-0": "bila nda denji willante maateyan goy",
+       "exif-flash-return-2": "denji willante gaaya mana maatandi",
+       "exif-flash-return-3": "denji willante gaaya maatandi",
+       "exif-flash-mode-1": "gaabi meli diinandiyan",
+       "exif-flash-mode-2": "gaabi meli wiiyan",
+       "exif-flash-mode-3": "Boŋše alhaali",
+       "exif-flash-function-1": "Mei goy kul šii no",
+       "exif-flash-redeye-1": "moo-ciray kaayan alhaali",
+       "exif-focalplaneresolutionunit-2": "kabaaru",
+       "exif-sensingmethod-1": "Manti bayrante",
+       "exif-sensingmethod-2": "Canbu-foo noone ganda maateji",
+       "exif-sensingmethod-3": "Canbu-hinka noone ganda maateji",
+       "exif-sensingmethod-4": "Canbu-hinza noone ganda maateji",
+       "exif-sensingmethod-5": "Noone hangante ganda maateji",
+       "exif-sensingmethod-7": "Žeeri-hinza maateji",
+       "exif-sensingmethod-8": "Noone hangante žeeri maateji",
+       "exif-filesource-3": "Hinna biizaahay dejjante",
+       "exif-scenetype-1": "Bii kaŋ zaandi dogoo ra",
+       "exif-customrendered-0": "Hankul teeyan",
+       "exif-customrendered-1": "Kaŋ tee boro foo se",
+       "exif-exposuremode-0": "Bii zaa nga boŋše",
+       "exif-exposuremode-1": "Kanbe biizaayan",
+       "exif-exposuremode-2": "Boŋše holgu",
+       "exif-whitebalance-0": "Boŋše kaaray sawante",
+       "exif-whitebalance-1": "Kanbe kaaray sawante",
+       "exif-scenecapturetype-0": "Tabatante",
+       "exif-scenecapturetype-1": "Hayyanbii",
+       "exif-scenecapturetype-2": "Kayyanbii",
+       "exif-scenecapturetype-3": "Cijinhere bii alhaali",
+       "exif-gaincontrol-0": "Baffoo",
+       "exif-gaincontrol-1": "Duura buuna ka ziji",
+       "exif-gaincontrol-2": "Duura beeri ka ziji",
+       "exif-gaincontrol-3": "Duura buuna ka zunbu",
+       "exif-gaincontrol-4": "Duura beeri ka zunbu",
+       "exif-contrast-0": "Hankul",
+       "exif-contrast-1": "Baana",
+       "exif-contrast-2": "Šenda",
+       "exif-saturation-0": "Hankul",
+       "exif-saturation-1": "Bii sahã buuna",
+       "exif-saturation-2": "Bii sahã beeri",
+       "exif-sharpness-0": "Hankul",
+       "exif-sharpness-1": "Baana",
+       "exif-sharpness-2": "Šenda",
+       "exif-subjectdistancerange-0": "Šibayante",
+       "exif-subjectdistancerange-1": "Bebbeeri",
+       "exif-subjectdistancerange-2": "Moo daabu",
+       "exif-subjectdistancerange-3": "Diiyan moora",
+       "exif-gpslatitude-n": "Hawsa hayyanzuu",
+       "exif-gpslatitude-s": "Gurma hayyanzuu",
+       "exif-gpslongitude-e": "Dandi kayyanzuu",
+       "exif-gpslongitude-w": "Dangay kayyanzuu",
+       "exif-gpsaltitude-above-sealevel": "{{PLURAL:$1|meetar}} $1 teeko se beene",
+       "exif-gpsaltitude-below-sealevel": "{{PLURAL:$1|meetar}} $1 teeko se ganda",
+       "exif-gpsstatus-a": "Neešiyan goo ma tee",
+       "exif-gpsstatus-v": "Neešiyan cerekubayyan",
+       "exif-gpsmeasuremode-2": "Azzaati-2 neešiyan",
+       "exif-gpsmeasuremode-3": "Azzaati-3 neešiyan",
+       "exif-gpsspeed-k": "Kilomeetarey guuru ra",
+       "exif-gpsspeed-m": "Miley guuru ra",
+       "exif-gpsspeed-n": "Guley",
+       "exif-gpsdestdistance-k": "Kilomeetarey",
+       "exif-gpsdestdistance-m": "Miley",
+       "exif-gpsdestdistance-n": "Teeko gande miley",
+       "exif-gpsdop-excellent": "Bešere ($1)",
+       "exif-gpsdop-good": "Boryo ($1)",
+       "exif-gpsdop-moderate": "Sawante ($1)",
+       "exif-gpsdop-fair": "Cimante ($1)",
+       "exif-gpsdop-poor": "Talka ($1)",
+       "exif-objectcycle-a": "Subbaahi hinne",
+       "exif-objectcycle-p": "Almaari hinne",
+       "exif-objectcycle-b": "Subbaahi nd'almaari kaa",
+       "exif-gpsdirection-t": "Tenjeyan cimi",
+       "exif-gpsdirection-m": "Alhindi tenjeyan",
+       "exif-ycbcrpositioning-1": "Gamhaya",
+       "exif-ycbcrpositioning-2": "Cere-hinka",
+       "exif-dc-contributor": "Kanbuzaakey",
+       "exif-dc-coverage": "Ganda nda waati alkadar hẽenandihayey se",
+       "exif-dc-date": "Han(ey)",
+       "exif-dc-publisher": "Wallafikaw",
+       "exif-dc-relation": "Hẽenandihaya kondante",
+       "exif-dc-rights": "Alhakey",
+       "exif-dc-source": "Aššil hẽenandihaya",
+       "exif-dc-type": "Hẽenandihaya dumi",
+       "exif-rating-rejected": "Jindawante",
+       "exif-isospeedratings-overflow": "Ka bisa 65535",
+       "exif-maxaperturevalue-value": "APEX $1 (f/$2)",
+       "exif-iimcategory-ace": "Goy suubante, alaada nda hooray",
+       "exif-iimcategory-clj": "Bone nd' alhukum",
+       "exif-iimcategory-dis": "Albalaawu nd' alwaadu",
+       "exif-iimcategory-fin": "Ganda duura nda maamalayan",
+       "exif-iimcategory-edu": "Caw",
+       "exif-iimcategory-evn": "Windila",
+       "exif-iimcategory-hth": "Gaahambaani",
+       "exif-iimcategory-hum": "Addamayze nafaw",
+       "exif-iimcategory-lab": "Goyyan",
+       "exif-iimcategory-lif": "Hunayan fondo nda hunanzamay teera",
+       "exif-iimcategory-pol": "Politiki",
+       "exif-iimcategory-rel": "Addiina nda ganari",
+       "exif-iimcategory-sci": "Bayray nda dabari",
+       "exif-iimcategory-soi": "Jama misey",
+       "exif-iimcategory-spo": "Gaahamfeeriyan",
+       "exif-iimcategory-war": "Wangu, alfitina nda kosuri",
+       "exif-iimcategory-wea": "Waati",
+       "exif-urgency-normal": "Hankul ($1)",
+       "exif-urgency-low": "Ganda ($1)",
+       "exif-urgency-high": "Beene ($1)",
+       "exif-urgency-other": "Goykaw-bayrante jine-ka-tee haya ($1)",
+       "namespacesall": "kul",
+       "monthsall": "kul",
+       "confirmemail": "Bataga aderesu tabatandi",
+       "confirmemail_noemail": "War ši nda bataga aderesu henna war [[Special:Preferences|goykaw ibaayey]] ra.",
+       "searchsuggest-search": "Ceeci",
+       "json-error-syntax": "Nahaw firka",
+       "json-error-utf8": " UTF-8 harfu laybanteyaŋ, sanda ašariya hantum laala bande",
+       "json-error-recursion": "Feeriyan foo wala hinna tana ga filla kaŋ asariyaa ga hantumandi ra",
+       "json-error-inf-or-nan": "NAN wala INF hinna foo wal'ibooboyaŋ goo hinna kaŋ ašariyaa ga hantumandi ra",
+       "json-error-unsupported-type": "Hinna noondi kaŋ dumoo ašariya ši hin ka hantumandi"
+}
index f44eb45..b51f3d5 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Ice201 (on sg.wikipedia.org)",
-            "Mdkidiri"
-        ]
-    },
-    "tog-underline": "Gbënëngö-gbê",
-    "tog-hideminor": "Hônde âkêtê lönzïngö-sû sô asï fadê na yâ tî gbâsû",
-    "tog-hidepatrolled": "Hônde âlönzïngö-sû sô asï  na hönngö na yâ tî gbâsû",
-    "tog-newpageshidepatrolled": "Na pöpö tî âlêmbëtï nî, hônde âla sô a yeke bâa ndo daä.",
-    "tog-extendwatchlist": "Gbara molongö tî bängö-pekô sï atanda gï âfinî âsänzëmä pëpe me âsänzëmä kûê kûê.",
-    "tog-usenewrc": "Sâra kua na âfinî sänzëmä sô alônzi ângbêre nî (ahûnda Javascript)",
-    "tog-numberheadings": "Sû nömörö bîakü bîakü na terê tî âlisurä",
-    "tog-showtoolbar": "Fa motarâka tî sepesû (ahûnda Javascript)",
-    "tog-editondblclick": "Pîka kpêkê ûse tî sepe lêmbëtï (ahûnda Javascript)",
-    "tog-editsectiononrightclick": "Pîka kötï kpêkê na ndö tî lisurä sï mo sepe nî (ahûnda Javascript)",
-    "tog-rememberpassword": "Da bê na sênyîmbâ tî mbï (asï {{PLURAL:$1|längö|längö}}) $1",
-    "tog-watchcreations": "Âlêmbëtï sô mbï sâra, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
-    "tog-watchdefault": "Âlêmbëtï sô mbï sepe, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
-    "tog-watchmoves": "Âlêmbëtï sô mbï sanzêe ïrï nî, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
-    "tog-watchdeletion": "Âlêmbëtï sô mbï woza nî, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
-    "tog-minordefault": "Tî sêtîa nî, sûngi âsepesû kûê töngana kêtê sepesû",
-    "tog-previewontop": "Tanda piabängö-nî na ndöbê tî zuka tî sepesû",
-    "tog-previewonfirst": "Fa piabängö kôzo sepesû",
-    "tog-enotifwatchlistpages": "¨To na mbï mbëtïsînga töngana mbênî lêmbetï asanzêe na yâ tî molongö tî mbï tî bängö-pekô.",
-    "tog-enotifusertalkpages": "To na mbï mbëtïsînga töngana mbênî lêmbëtë asanzêe na yâ tî dalisoro tî mbï",
-    "tog-enotifminoredits": "To na mbï mbëtïsînga lâkûê sô mbênî kêtê sänzëmä asï na yâ tî âlêmbëtï tî mbï.",
-    "tog-enotifrevealaddr": "Fa lindosînga tî mbï na yâ tî âmbëtïsînga tî zënngö-zo",
-    "tog-shownumberswatching": "Fa wüngö tî ânyîmbâ sô ayeke bâa lêmbëtï sô",
-    "tog-oldsig": "Këkërë sô ayeke daä awe:",
-    "tog-fancysig": "Mû kekere nî töngana sêngê gbâsû tî Wïkï (sân taâ gbê)",
-    "underline-always": "Lâkûê",
-    "underline-never": "Lâ ôko pëpe",
-    "underline-default": "Ketîa ngbondö tî kpëlisimbä",
-    "editfont-style": "Fasöon tî gbâgerêsû tî sepesû nî",
-    "editfont-default": "Ketîa tî kpëlitondo",
-    "editfont-monospace": "Gbâgerêsû tî kpengü fündä",
-    "editfont-sansserif": "Gbâgerêsû tî kûyû garê",
-    "editfont-serif": "Gbâgerêsû na kîndâ",
-    "sunday": "lâyenga",
-    "monday": "bïkuako",
-    "tuesday": "bïkuase",
-    "wednesday": "bïkuatâ",
-    "thursday": "bïkuasïö",
-    "friday": "bïkuakü",
-    "saturday": "lâpôsö",
-    "sun": "lây",
-    "mon": "bk1",
-    "tue": "bk2",
-    "wed": "bk3",
-    "thu": "bk4",
-    "fri": "bk5",
-    "sat": "lâp",
-    "january": "Nyenye",
-    "february": "Fulundïgi",
-    "march": "Mbängü",
-    "april": "Ngubë",
-    "may_long": "Bêläwü",
-    "june": "Föndo",
-    "july": "Lengua",
-    "august": "Kükürü",
-    "september": "Mvuka",
-    "october": "Ngberere",
-    "november": "Nabändüru",
-    "december": "Kakawuka",
-    "january-gen": "Nyenye",
-    "february-gen": "Fulundïgi",
-    "march-gen": "Mbängü",
-    "april-gen": "Ngubä",
-    "may-gen": "Bâläwü",
-    "june-gen": "Föndo",
-    "july-gen": "Lengua",
-    "august-gen": "Kükürü",
-    "september-gen": "Mvuka",
-    "october-gen": "Ngberere",
-    "november-gen": "Nabändüru",
-    "december-gen": "Kakawuka",
-    "jan": "Nye",
-    "feb": "Ful",
-    "mar": "Mba",
-    "apr": "Ngu",
-    "may": "Bêl",
-    "jun": "Fön",
-    "jul": "Len",
-    "aug": "Kük",
-    "sep": "Mvu",
-    "oct": "Ngb",
-    "nov": "Nab",
-    "dec": "Kak",
-    "pagecategories": "{{PLURAL:$1|Fündä|Âfundä}}",
-    "category_header": "Âlâmbëtï na yâ tî fündä « $1 »",
-    "subcategories": "gbefündä",
-    "category-media-header": "Kuru tî kôtevungä na yâ tî fündä \"$1\"",
-    "category-empty": "\"Fündä sô ayeke na lêmbëtï, wala gbefündä, wala kuru tî kôtevungä, ôko pëpe.\"",
-    "hidden-categories": "Höndëngö {{PLURAL:$1|fündä|âfündä}}",
-    "hidden-category-category": "Âhöndëngö âf¨¨undä",
-    "listingcontinuesabbrev": "(pekô nî)",
-    "index-category": "Âlêmbëtï sô akpo nî",
-    "noindex-category": "Âlêmbëtï sô a kpö nî pëpe",
-    "broken-file-category": "Âlêmbëtï sô ayeke na âfängö gbê tî kuru",
-    "about": "Na ndö tî...",
-    "article": "Lêmbëtï tî münä",
-    "newwindow": "(avula finî döpulä)",
-    "cancel": "Woza",
-    "moredotdotdot": "Mbênî...",
-    "mypage": "Lêmbëtï tî mbï",
-    "mytalk": "Lisoro tî mbï",
-    "anontalk": "Lisoro na lindo IP sô",
-    "navigation": "Simba",
-    "and": "&#32;na",
-    "qbfind": "Gi",
-    "qbbrowse": "Hasa",
-    "qbedit": "Sepe",
-    "qbpageoptions": "Lêmbëtï sô",
-    "qbmyoptions": "Âlêmbëtï tî mbï",
-    "faq": "Âhûnda",
-    "faqpage": "Project:Âhûnda",
-    "vector-action-addsection": "Zîa mbênî lilö daä",
-    "vector-action-delete": "Lungûla",
-    "vector-action-move": "Sanzêe ïrï",
-    "vector-action-protect": "Funga",
-    "vector-action-undelete": "Kîri na nî",
-    "vector-action-unprotect": "Sanzêe fungä",
-    "vector-view-create": "Seka",
-    "vector-view-edit": "Sepe",
-    "vector-view-history": "Tanda mbai nî",
-    "vector-view-view": "Dîko",
-    "vector-view-viewsource": "Fa ligbî nî",
-    "actions": "Kua",
-    "namespaces": "Pöpö tî âïrï",
-    "variants": "Âmbênî marä nî",
-    "errorpagetitle": "Yûndo",
-    "returnto": "Kîri na ndö tî lêmbëtï $1.",
-    "tagline": "Alöndö na  {{SITENAME}}",
-    "help": "Za mbï",
-    "search": "Gi",
-    "searchbutton": "Gi",
-    "go": "Bâa",
-    "searcharticle": "Dîko",
-    "history": "Mbai tî lêmbëtï nî",
-    "history_short": "mbai",
-    "updatedmarker": "afinima ngbêreyê sô mbï sï daä sô",
-    "printableversion": "Mbâlê tî pete na sasango",
-    "permalink": "Kpengü gbê tî lêmbëtï nî",
-    "print": "Pete na sasango",
-    "view": "Tändä",
-    "edit": "Sepe",
-    "create": "Seka",
-    "editthispage": "Sepe lêmbëtï sô",
-    "create-this-page": "Seka lêmbëtï sô",
-    "delete": "Lungûla",
-    "deletethispage": "Lungûla lêmbëtï sô",
-    "undelete_short": "Kîri na {{PLURAL:$1|sepesû ôko|âsepesû $1}}",
-    "viewdeleted_short": "Bâa {{PLURAL:$1|sepsesû| âsepesû $1}} sô awoza nî awe sô.",
-    "talkpagelinktext": "tene tënë",
-    "personaltools": "Âyêkua tî wanî",
-    "talk": "Lisoro",
-    "views": "Tändä",
-    "toolbox": "Gbâyêkua",
-    "otherlanguages": "Na mbênî âyângâ",
-    "jumpto": "Gue na:",
-    "jumptonavigation": "Simba",
-    "jumptosearch": "Gi",
-    "aboutsite": "Na ndö tî {{SITENAME}}",
-    "aboutpage": "Project:Na ndö tî...",
-    "currentevents": "Âsango",
-    "currentevents-url": "Project:Âsango",
-    "disclaimers": "Zïngö-lê",
-    "disclaimerpage": "Project:Zïngö-lê",
-    "mainpage": "Gä nzönî",
-    "mainpage-description": "Gä nzönî",
-    "portal": "Âsëwä",
-    "portal-url": "Project:Gä nzönî",
-    "privacy": "Ndarä tî bätängö vivîi tënë",
-    "privacypage": "Project:Vivîi tënë",
-    "ok": "Nî laâ!",
-    "retrievedfrom": "Awara na yâ tî \"$1\"",
-    "editsection": "Sepe",
-    "editold": "sepe",
-    "editsectionhint": "Sepe surä nî $1",
-    "site-atom-feed": "süängö Atom tî $1",
-    "red-link-title": "$1 (lêmbëtï sô ayeke daä äpe)",
-    "nstab-main": "Lêmbëtï",
-    "nstab-user": "Lêmbëtï tî Nyîmbâ",
-    "nstab-special": "Lêmbëtï ndê",
-    "yourpassword": "Pafungûla",
-    "nav-login-createaccount": "Linda wala Zî kônde",
-    "userlogin": "Linda wala  Zî kônde",
-    "logout": "Sïgî",
-    "userlogout": "Sigî",
-    "watchthis": "Bâa pekô tî lêmbëtï sô",
-    "anoneditwarning": "'''Ânge:''' Mô de mo linda äpëe. Fade a sû lindosînga IP tî mo na mbai tî lêmbëtï sô.",
-    "editing": "Sëpëngö $1",
-    "editingsection": "Sëpëngö $1 (surä)",
-    "editundo": "woza",
-    "searchresults": "Pendâkua tî gïngö-ndo nî",
-    "searchresults-title": "Pendâkua tî gïngö-ndo tëtî \"$1\"",
-    "shown-title": "Fa $1 {{PLURAL:$1|pendâkua |âpendâkua}} nî alîngbi na lêmbëtï ôko ôko.",
-    "search-result-size": "$1 ({{PLURAL:$2|1 mbupa|$2 âmbupa}})",
-    "mypreferences": "tandä tî mbï",
-    "prefs-rc": "Tanga ti yé so a gbion ya ni",
-    "yournick": "Nyîmbâ:",
-    "editinguser": "Mo fa na mbi nyîmbâ '''[[User:$1|$1]]''' $2",
-    "recentchanges": "Ndângbâ sänzëmä",
-    "recentchangeslinked-toolbox": "Bängö pekô tî âgbegbêe lêmbëtï",
-    "upload": "Yâlamû mbênî kuru",
-    "watchthisupload": "bâa lo ânde sô lêmbëtï",
-    "randompage": "Lêmbëtï waâwa",
-    "brokenredirects-edit": "fa na mbi",
-    "nbytes": "$1 {{PLURAL:$1|limbe|âlimbe}}",
-    "watchlist": "Molongö tî bängö pekô",
-    "watch": "bâa pekô nî",
-    "watchthispage": "bâa lo ânde sô lêmbëtï",
-    "blanknamespace": "(Tö)",
-    "mycontris": "Kua tî mbï",
-    "whatlinkshere": "Gbegbêe lêmbëtï",
-    "contribslink": "âkua tî ânyîmbâ",
-    "move-watch": "bâa lo ânde sô lêmbëtï",
-    "tooltip-pt-login": "Ayeke nzönî mo linda, atâa sô a kambaga mo äpe.",
-    "tooltip-pt-logout": "sïgî",
-    "tooltip-ca-talk": "Lisoro na ndö tî münä tî lêmbëtï sô",
-    "tooltip-ca-edit": "Mo lîngbi tî sepe lêmbëtï sô. Nzönî mo pete kûtu piabâa tîtene mo pia mo bâa nî awe sï mo sûnga nî.",
-    "tooltip-ca-history": "Ângbêre mbâlê tî lêmbëtï sô (na ïrï tî âwasüngö-nî)",
-    "tooltip-search": "Gi {{SITENAME}}",
-    "tooltip-search-fulltext": "Gi âlêmbëtï sô ayeke na gbâsû sô",
-    "tooltip-p-logo": "Gue na Tölêmbëtï",
-    "tooltip-n-mainpage": "Gue na tölêmbëtï Gä nzönî.",
-    "tooltip-n-mainpage-description": "Gue na tölêmbëtï Gä nzönî.",
-    "tooltip-n-portal": "Tënë tî pialö nî",
-    "tooltip-n-currentevents": "Wara sango tî âpäsëmä tî fafadësô na gündâ nî.",
-    "tooltip-n-recentchanges": "Molongö tî ândângbâ sänzëma tî yâ tî Wïkï nî",
-    "tooltip-n-randompage": "Tanda mbênî lêmbëtï waâa",
-    "tooltip-n-help": "Za mbï",
-    "tooltip-t-whatlinkshere": "Molongö tî âlêmbëtï sô kûê agbë gbê na lo sô.",
-    "tooltip-t-recentchangeslinked": "Molongö tî ândângbâ sänzëmä tî âlêmbëtï sô agbë gbê na lo-sô.",
-    "tooltip-t-upload": "To kuru na wavungä",
-    "tooltip-t-specialpages": "Molongö tî âlêmbëtï sô kûê ayeke ndê",
-    "tooltip-t-print": "Mbâlê tî lêmbëtï sô tî pete na sasango",
-    "tooltip-t-permalink": "Kpengü gbê na mbâlê tî lêmbëtï nî sô",
-    "tooltip-ca-nstab-main": "Bâa lêmbëtï tî münä nî",
-    "others": "mbênî",
-    "bad_image_list": "Funda nî ayeke töngasô:\nGï âkâmba tî molongö (sô atö ndâ nî na *) laâ a yeke bâa lêgë nî. Kôzo gbê tî yâ tî kâmba ôko ôko adu tî gbùe na mbênî kpäkë kuru. Âtanga tî âgbê sô na yâ tî ôko kâmba nî sô, a bâa nî töngana yê ndê, sô ^tî tene, töngana âlêmbëtï sô kuru nî alîngbi tî tua daä na gbegbê nî.",
-    "specialpages": "Âlêmbëtï sô ayeke ndê"
+       "@metadata": {
+               "authors": [
+                       "Ice201 (on sg.wikipedia.org)",
+                       "Mdkidiri"
+               ]
+       },
+       "tog-underline": "Gbënëngö-gbê",
+       "tog-hideminor": "Hônde âkêtê lönzïngö-sû sô asï fadê na yâ tî gbâsû",
+       "tog-hidepatrolled": "Hônde âlönzïngö-sû sô asï  na hönngö na yâ tî gbâsû",
+       "tog-newpageshidepatrolled": "Na pöpö tî âlêmbëtï nî, hônde âla sô a yeke bâa ndo daä.",
+       "tog-extendwatchlist": "Gbara molongö tî bängö-pekô sï atanda gï âfinî âsänzëmä pëpe me âsänzëmä kûê kûê.",
+       "tog-usenewrc": "Sâra kua na âfinî sänzëmä sô alônzi ângbêre nî (ahûnda Javascript)",
+       "tog-numberheadings": "Sû nömörö bîakü bîakü na terê tî âlisurä",
+       "tog-showtoolbar": "Fa motarâka tî sepesû (ahûnda Javascript)",
+       "tog-editondblclick": "Pîka kpêkê ûse tî sepe lêmbëtï (ahûnda Javascript)",
+       "tog-editsectiononrightclick": "Pîka kötï kpêkê na ndö tî lisurä sï mo sepe nî (ahûnda Javascript)",
+       "tog-watchcreations": "Âlêmbëtï sô mbï sâra, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
+       "tog-watchdefault": "Âlêmbëtï sô mbï sepe, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
+       "tog-watchmoves": "Âlêmbëtï sô mbï sanzêe ïrï nî, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
+       "tog-watchdeletion": "Âlêmbëtï sô mbï woza nî, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
+       "tog-minordefault": "Tî sêtîa nî, sûngi âsepesû kûê töngana kêtê sepesû",
+       "tog-previewontop": "Tanda piabängö-nî na ndöbê tî zuka tî sepesû",
+       "tog-previewonfirst": "Fa piabängö kôzo sepesû",
+       "tog-enotifwatchlistpages": "¨To na mbï mbëtïsînga töngana mbênî lêmbetï asanzêe na yâ tî molongö tî mbï tî bängö-pekô.",
+       "tog-enotifusertalkpages": "To na mbï mbëtïsînga töngana mbênî lêmbëtë asanzêe na yâ tî dalisoro tî mbï",
+       "tog-enotifminoredits": "To na mbï mbëtïsînga lâkûê sô mbênî kêtê sänzëmä asï na yâ tî âlêmbëtï tî mbï.",
+       "tog-enotifrevealaddr": "Fa lindosînga tî mbï na yâ tî âmbëtïsînga tî zënngö-zo",
+       "tog-shownumberswatching": "Fa wüngö tî ânyîmbâ sô ayeke bâa lêmbëtï sô",
+       "tog-oldsig": "Këkërë sô ayeke daä awe:",
+       "tog-fancysig": "Mû kekere nî töngana sêngê gbâsû tî Wïkï (sân taâ gbê)",
+       "underline-always": "Lâkûê",
+       "underline-never": "Lâ ôko pëpe",
+       "underline-default": "Ketîa ngbondö tî kpëlisimbä",
+       "editfont-style": "Fasöon tî gbâgerêsû tî sepesû nî",
+       "editfont-default": "Ketîa tî kpëlitondo",
+       "editfont-monospace": "Gbâgerêsû tî kpengü fündä",
+       "editfont-sansserif": "Gbâgerêsû tî kûyû garê",
+       "editfont-serif": "Gbâgerêsû na kîndâ",
+       "sunday": "lâyenga",
+       "monday": "bïkuako",
+       "tuesday": "bïkuase",
+       "wednesday": "bïkuatâ",
+       "thursday": "bïkuasïö",
+       "friday": "bïkuakü",
+       "saturday": "lâpôsö",
+       "sun": "lây",
+       "mon": "bk1",
+       "tue": "bk2",
+       "wed": "bk3",
+       "thu": "bk4",
+       "fri": "bk5",
+       "sat": "lâp",
+       "january": "Nyenye",
+       "february": "Fulundïgi",
+       "march": "Mbängü",
+       "april": "Ngubë",
+       "may_long": "Bêläwü",
+       "june": "Föndo",
+       "july": "Lengua",
+       "august": "Kükürü",
+       "september": "Mvuka",
+       "october": "Ngberere",
+       "november": "Nabändüru",
+       "december": "Kakawuka",
+       "january-gen": "Nyenye",
+       "february-gen": "Fulundïgi",
+       "march-gen": "Mbängü",
+       "april-gen": "Ngubä",
+       "may-gen": "Bâläwü",
+       "june-gen": "Föndo",
+       "july-gen": "Lengua",
+       "august-gen": "Kükürü",
+       "september-gen": "Mvuka",
+       "october-gen": "Ngberere",
+       "november-gen": "Nabändüru",
+       "december-gen": "Kakawuka",
+       "jan": "Nye",
+       "feb": "Ful",
+       "mar": "Mba",
+       "apr": "Ngu",
+       "may": "Bêl",
+       "jun": "Fön",
+       "jul": "Len",
+       "aug": "Kük",
+       "sep": "Mvu",
+       "oct": "Ngb",
+       "nov": "Nab",
+       "dec": "Kak",
+       "pagecategories": "{{PLURAL:$1|Fündä|Âfundä}}",
+       "category_header": "Âlâmbëtï na yâ tî fündä « $1 »",
+       "subcategories": "gbefündä",
+       "category-media-header": "Kuru tî kôtevungä na yâ tî fündä \"$1\"",
+       "category-empty": "\"Fündä sô ayeke na lêmbëtï, wala gbefündä, wala kuru tî kôtevungä, ôko pëpe.\"",
+       "hidden-categories": "Höndëngö {{PLURAL:$1|fündä|âfündä}}",
+       "hidden-category-category": "Âhöndëngö âf¨¨undä",
+       "listingcontinuesabbrev": "(pekô nî)",
+       "index-category": "Âlêmbëtï sô akpo nî",
+       "noindex-category": "Âlêmbëtï sô a kpö nî pëpe",
+       "broken-file-category": "Âlêmbëtï sô ayeke na âfängö gbê tî kuru",
+       "about": "Na ndö tî...",
+       "article": "Lêmbëtï tî münä",
+       "newwindow": "(avula finî döpulä)",
+       "cancel": "Woza",
+       "moredotdotdot": "Mbênî...",
+       "mypage": "Lêmbëtï tî mbï",
+       "mytalk": "Lisoro tî mbï",
+       "anontalk": "Lisoro na lindo IP sô",
+       "navigation": "Simba",
+       "and": "&#32;na",
+       "qbfind": "Gi",
+       "qbbrowse": "Hasa",
+       "qbedit": "Sepe",
+       "qbpageoptions": "Lêmbëtï sô",
+       "qbmyoptions": "Âlêmbëtï tî mbï",
+       "faq": "Âhûnda",
+       "faqpage": "Project:Âhûnda",
+       "actions": "Kua",
+       "namespaces": "Pöpö tî âïrï",
+       "variants": "Âmbênî marä nî",
+       "errorpagetitle": "Yûndo",
+       "returnto": "Kîri na ndö tî lêmbëtï $1.",
+       "tagline": "Alöndö na  {{SITENAME}}",
+       "help": "Za mbï",
+       "search": "Gi",
+       "searchbutton": "Gi",
+       "go": "Bâa",
+       "searcharticle": "Dîko",
+       "history": "Mbai tî lêmbëtï nî",
+       "history_short": "mbai",
+       "updatedmarker": "afinima ngbêreyê sô mbï sï daä sô",
+       "printableversion": "Mbâlê tî pete na sasango",
+       "permalink": "Kpengü gbê tî lêmbëtï nî",
+       "print": "Pete na sasango",
+       "view": "Tändä",
+       "edit": "Sepe",
+       "create": "Seka",
+       "editthispage": "Sepe lêmbëtï sô",
+       "create-this-page": "Seka lêmbëtï sô",
+       "delete": "Lungûla",
+       "deletethispage": "Lungûla lêmbëtï sô",
+       "undelete_short": "Kîri na {{PLURAL:$1|sepesû ôko|âsepesû $1}}",
+       "viewdeleted_short": "Bâa {{PLURAL:$1|sepsesû| âsepesû $1}} sô awoza nî awe sô.",
+       "talkpagelinktext": "tene tënë",
+       "personaltools": "Âyêkua tî wanî",
+       "talk": "Lisoro",
+       "views": "Tändä",
+       "toolbox": "Gbâyêkua",
+       "otherlanguages": "Na mbênî âyângâ",
+       "jumpto": "Gue na:",
+       "jumptonavigation": "Simba",
+       "jumptosearch": "Gi",
+       "aboutsite": "Na ndö tî {{SITENAME}}",
+       "aboutpage": "Project:Na ndö tî...",
+       "currentevents": "Âsango",
+       "currentevents-url": "Project:Âsango",
+       "disclaimers": "Zïngö-lê",
+       "disclaimerpage": "Project:Zïngö-lê",
+       "mainpage": "Gä nzönî",
+       "mainpage-description": "Gä nzönî",
+       "portal": "Âsëwä",
+       "portal-url": "Project:Gä nzönî",
+       "privacy": "Ndarä tî bätängö vivîi tënë",
+       "privacypage": "Project:Vivîi tënë",
+       "ok": "Nî laâ!",
+       "retrievedfrom": "Awara na yâ tî \"$1\"",
+       "editsection": "Sepe",
+       "editold": "sepe",
+       "editsectionhint": "Sepe surä nî $1",
+       "site-atom-feed": "süängö Atom tî $1",
+       "red-link-title": "$1 (lêmbëtï sô ayeke daä äpe)",
+       "nstab-main": "Lêmbëtï",
+       "nstab-user": "Lêmbëtï tî Nyîmbâ",
+       "nstab-special": "Lêmbëtï ndê",
+       "yourpassword": "Pafungûla",
+       "nav-login-createaccount": "Linda wala Zî kônde",
+       "userlogin": "Linda wala  Zî kônde",
+       "logout": "Sïgî",
+       "userlogout": "Sigî",
+       "watchthis": "Bâa pekô tî lêmbëtï sô",
+       "anoneditwarning": "'''Ânge:''' Mô de mo linda äpëe. Fade a sû lindosînga IP tî mo na mbai tî lêmbëtï sô.",
+       "editing": "Sëpëngö $1",
+       "editingsection": "Sëpëngö $1 (surä)",
+       "editundo": "woza",
+       "searchresults": "Pendâkua tî gïngö-ndo nî",
+       "searchresults-title": "Pendâkua tî gïngö-ndo tëtî \"$1\"",
+       "shown-title": "Fa $1 {{PLURAL:$1|pendâkua |âpendâkua}} nî alîngbi na lêmbëtï ôko ôko.",
+       "search-result-size": "$1 ({{PLURAL:$2|1 mbupa|$2 âmbupa}})",
+       "mypreferences": "tandä tî mbï",
+       "prefs-rc": "Tanga ti yé so a gbion ya ni",
+       "yournick": "Nyîmbâ:",
+       "editinguser": "Mo fa na mbi nyîmbâ '''[[User:$1|$1]]''' $2",
+       "recentchanges": "Ndângbâ sänzëmä",
+       "recentchangeslinked-toolbox": "Bängö pekô tî âgbegbêe lêmbëtï",
+       "upload": "Yâlamû mbênî kuru",
+       "watchthisupload": "bâa lo ânde sô lêmbëtï",
+       "randompage": "Lêmbëtï waâwa",
+       "brokenredirects-edit": "fa na mbi",
+       "nbytes": "$1 {{PLURAL:$1|limbe|âlimbe}}",
+       "watchlist": "Molongö tî bängö pekô",
+       "watch": "bâa pekô nî",
+       "watchthispage": "bâa lo ânde sô lêmbëtï",
+       "blanknamespace": "(Tö)",
+       "mycontris": "Kua tî mbï",
+       "whatlinkshere": "Gbegbêe lêmbëtï",
+       "contribslink": "âkua tî ânyîmbâ",
+       "move-watch": "bâa lo ânde sô lêmbëtï",
+       "tooltip-pt-login": "Ayeke nzönî mo linda, atâa sô a kambaga mo äpe.",
+       "tooltip-pt-logout": "sïgî",
+       "tooltip-ca-talk": "Lisoro na ndö tî münä tî lêmbëtï sô",
+       "tooltip-ca-edit": "Mo lîngbi tî sepe lêmbëtï sô. Nzönî mo pete kûtu piabâa tîtene mo pia mo bâa nî awe sï mo sûnga nî.",
+       "tooltip-ca-history": "Ângbêre mbâlê tî lêmbëtï sô (na ïrï tî âwasüngö-nî)",
+       "tooltip-search": "Gi {{SITENAME}}",
+       "tooltip-search-fulltext": "Gi âlêmbëtï sô ayeke na gbâsû sô",
+       "tooltip-p-logo": "Gue na Tölêmbëtï",
+       "tooltip-n-mainpage": "Gue na tölêmbëtï Gä nzönî.",
+       "tooltip-n-mainpage-description": "Gue na tölêmbëtï Gä nzönî.",
+       "tooltip-n-portal": "Tënë tî pialö nî",
+       "tooltip-n-currentevents": "Wara sango tî âpäsëmä tî fafadësô na gündâ nî.",
+       "tooltip-n-recentchanges": "Molongö tî ândângbâ sänzëma tî yâ tî Wïkï nî",
+       "tooltip-n-randompage": "Tanda mbênî lêmbëtï waâa",
+       "tooltip-n-help": "Za mbï",
+       "tooltip-t-whatlinkshere": "Molongö tî âlêmbëtï sô kûê agbë gbê na lo sô.",
+       "tooltip-t-recentchangeslinked": "Molongö tî ândângbâ sänzëmä tî âlêmbëtï sô agbë gbê na lo-sô.",
+       "tooltip-t-upload": "To kuru na wavungä",
+       "tooltip-t-specialpages": "Molongö tî âlêmbëtï sô kûê ayeke ndê",
+       "tooltip-t-print": "Mbâlê tî lêmbëtï sô tî pete na sasango",
+       "tooltip-t-permalink": "Kpengü gbê na mbâlê tî lêmbëtï nî sô",
+       "tooltip-ca-nstab-main": "Bâa lêmbëtï tî münä nî",
+       "others": "mbênî",
+       "bad_image_list": "Funda nî ayeke töngasô:\nGï âkâmba tî molongö (sô atö ndâ nî na *) laâ a yeke bâa lêgë nî. Kôzo gbê tî yâ tî kâmba ôko ôko adu tî gbùe na mbênî kpäkë kuru. Âtanga tî âgbê sô na yâ tî ôko kâmba nî sô, a bâa nî töngana yê ndê, sô ^tî tene, töngana âlêmbëtï sô kuru nî alîngbi tî tua daä na gbegbê nî.",
+       "specialpages": "Âlêmbëtï sô ayeke ndê"
 }
index ba7af45..542a13d 100644 (file)
        "searchrelated": "sosėjėn",
        "searchall": "vėsė",
        "showingresults": "Žemiau ruodoma lėgė '''$1''' {{PLURAL:$1|rezoltata|rezoltatu|rezoltatu}} pradedont #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Rezoltats '''$1''' ėš '''$3'''|Rezoltatā '''$1 - $2''' ėš '''$3'''}} vagol paklausėma '''$4'''",
        "search-nonefound": "Nier rezoltatu, katrėi atitėktu ožklausėma.",
        "powersearch-legend": "Prapliesta paėiška",
        "powersearch-ns": "Ėiškoutė vardū srėtīsė:",
        "statistics": "Statėstėka",
        "statistics-header-pages": "Poslapiu statėstėka",
        "statistics-header-edits": "Redagavėmu statėstėka",
-       "statistics-header-views": "Parveizu statistėka",
        "statistics-header-users": "Nauduotuoju statėstėka",
        "statistics-header-hooks": "Kėta statėstėka",
        "statistics-articles": "Torėnė poslapē",
        "statistics-users": "Ožsėregėstravosiu [[Special:ListUsers|nauduotuoju]]",
        "statistics-users-active": "Aktīviu nauduotuoju",
        "statistics-users-active-desc": "Nauduotuojē, katrėi par {{PLURAL:$1|paskiausė dėina|paskiausė 2 dėinė|paskiausės $1 dėinas|paskiausiu $1 dėinū}} padėrba keitėmu",
-       "statistics-mostpopular": "Daugiausē ruodītė poslapē",
        "doubleredirects": "Dvėgobė paradresavėmā",
        "doubleredirectstext": "Tėi paradresavėmā ruod i kėtus paradresavėma poslapius. Kuožnuo eilotē pamėnavuots pėrmasā ėr ontrasā paradresavėmā, tēpuogi ontrojė paradresavėma paskėrtis, katra paprastā ė paruod i tėkraji poslapi, i katra pėrmasā paradresavėms ė torietu ruodītė.",
        "double-redirect-fixed-move": "[[$1]] bova parkelts, daba tas īr paradresavėms i [[$2]]",
        "pager-older-n": "{{PLURAL:$1|senesnis|senesni|senesniū}}",
        "booksources": "Knīngu šaltinē",
        "booksources-search-legend": "Knīngu šaltiniu paėiška",
-       "booksources-go": "Ēk!",
        "specialloguserlabel": "Nauduotuos:",
        "speciallogtitlelabel": "Pavadėnims:",
        "log": "Specēliūju veiksmū istuorėjė",
        "wlheader-enotif": "El. pašta primėnėmā ijongtė īr.",
        "wlheader-showupdated": "Poslapē, katrėi pakeistė nu Tamstas paskotėnė apsėlonkėma čiesa anūs, īr pažīmietė '''pastuorintā'''",
        "wlnote": "Ruoduoma '''$1''' paskotėniu pakeitėmu, atlėktū par '''$2''' paskotėniu adīnu.",
-       "wlshowlast": "Ruodītė paskotėniu $1 adīnu, $2 dėinū a $3 pakeitėmus",
+       "wlshowlast": "Ruodītė paskotėniu $1 adīnu, $2 dėinū a  pakeitėmus",
        "watchlist-options": "Keravuojamu sāroša pasėrinkėmā",
        "watching": "Itraukiama i keravuojamu sāraša...",
        "unwatching": "Šalėnama ėš keravuojamu sāraša...",
        "exif-contrast-0": "Paprasts",
        "exif-contrast-1": "Mažos",
        "exif-contrast-2": "Dėdlis",
-       "watchlistall2": "vėsos",
        "namespacesall": "vėsas",
        "monthsall": "vėsė",
        "confirmemail": "Patvirtėnkėt el. pašta adresa",
index 5f637fd..16af5ec 100644 (file)
        "passwordreset-emailsent-capture": "E-mail za resetiranje lozinke/zaporke je poslan (prikazan dolje).",
        "passwordreset-emailerror-capture": "E-mail za resetiranje lozinke/zaporke, prikazan dolje, je poslan, ali slanje {{GENDER:$2|korisniku|korisnici|korisniku}} nije uspjelo: $1",
        "changeemail": "Promijeni e-mail adresu",
-       "changeemail-header": "Promijeni e-mail adresu korisničkog računa",
        "changeemail-text": "Ispunite ovaj formular da biste promijenili svoju e-mail adresu. Morat ćete upisati svoju lozinku da potvrdite ovu promjenu.",
        "changeemail-no-info": "Morate biti prijavljeni da biste izravno pristupili ovoj stranici.",
        "changeemail-oldemail": "Trenutna e-mail adresa:",
        "changeemail-none": "(ništa)",
        "changeemail-password": "Tvoja šifra/lozinka za {{SITENAME}}:",
        "changeemail-submit": "Promijeni e-mail",
-       "changeemail-cancel": "Odustani",
        "changeemail-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.",
        "resettokens": "Resetirajte tokene",
        "resettokens-text": "Možete resetirati tokene koji dozvoljavaju pristup određenim privatnim podacima povezanim sa vašim računom ovdje.\n\nTo možete učiniti ako ste ih slučajno podijelili sa nekim ili ako je vaš račun kompromitiran.",
        "mergehistory-same-destination": "Izvorne i odredišne stranice ne mogu biti iste",
        "mergehistory-reason": "Razlog:",
        "mergelog": "Registar spajanja",
-       "pagemerge-logentry": "spojeno [[$1]] u [[$2]] (sve do $3 revizije)",
        "revertmerge": "Ukini spajanje",
        "mergelogpagetext": "Ispod je spisak nedavnih spajanja historija stranica.",
        "history-title": "Historija izmjena stranice \"$1\"",
        "searchall": "sve",
        "showingresults": "Dole {{PLURAL:$1|je prikazan '''1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}} počev od '''$2'''.",
        "showingresultsinrange": "Ispod {{PLURAL:$1|je prikazan <strong>1</strong> rezultat|su prikazana <strong>$1</strong> rezultata|je prikazano <strong>$1</strong> rezultata}}, u rasponu od <strong>$2</strong> do <strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Rezultat '''$1''' od '''$3'''|Rezultati '''$1 - $2''' od '''$3'''}} za '''$4'''",
        "search-nonefound": "Nisu pronađeni rezultati koji odgovaraju upitu.",
        "powersearch-legend": "Napredna pretraga",
        "powersearch-ns": "Pretraga u imenskim prostorima:",
        "randomincategory": "Slučajna stranica u kategoriji",
        "randomincategory-invalidcategory": "\"$1\" nije valjano ime kategorije.",
        "randomincategory-nopages": "Nema stranica u kategoriji [[:Category:$1|$1]].",
-       "randomincategory-selectcategory": "Dobij slučajnu stranicu iz kategorije: $1 $2.",
-       "randomincategory-selectcategory-submit": "Idi",
        "randomredirect": "Slučajno preusmjerenje / Случајно преусмјерење",
        "randomredirect-nopages": "Nema preusmjerenja u imenskom prostoru \"$1\".",
        "statistics": "Statistike / Статистике",
        "statistics-header-pages": "Statistike stranice",
        "statistics-header-edits": "Statistike izmjena",
-       "statistics-header-views": "Statistike pregleda",
        "statistics-header-users": "Statistike korisnika",
        "statistics-header-hooks": "Ostale statistike",
        "statistics-articles": "Stranice sadržaja",
        "statistics-files": "Broj postavljenih datoteka",
        "statistics-edits": "Broj izmjena od kako je instalirana {{SITENAME}}",
        "statistics-edits-average": "Prosječno izmjena po stranici",
-       "statistics-views-total": "Ukupno pregleda",
-       "statistics-views-total-desc": "Pregledi nepostojećih stranica i posebnih stranica nisu uključeni",
-       "statistics-views-peredit": "Pregleda po izmjeni",
        "statistics-users": "Registrovani [[Special:ListUsers|korisnici]]",
        "statistics-users-active": "Aktivni korisnici",
        "statistics-users-active-desc": "Korisnici koju su izvršili akciju u toku {{PLURAL:$1|zadnjeg dana|zadnja $1 dana|zadnjih $1 dana}}",
-       "statistics-mostpopular": "Najviše pregledane stranice",
        "pageswithprop": "Stranice sa svojstvom stranice",
        "pageswithprop-legend": "Stranice sa svojstvom stranice",
        "pageswithprop-text": "Ova stranica navodi stranice sa specifičnim svojstvom stranice.",
        "uncategorizedtemplates": "Šabloni bez kategorije",
        "unusedcategories": "Neiskorištene kategorije",
        "unusedimages": "Neiskorišćene slike / Неискоришћене слике",
-       "popularpages": "Popularne stranice",
        "wantedcategories": "Tražene kategorije",
        "wantedpages": "Tražene stranice / Тражене странице",
        "wantedpages-badtitle": "Nevaljan naslov u setu rezultata: $1",
        "querypage-disabled": "Ova posebna stranica je onemogućena jer smanjuje performanse.",
        "booksources": "Književni izvori",
        "booksources-search-legend": "Traži književne izvore",
-       "booksources-go": "Idi",
        "booksources-text": "Ispod se nalazi spisak vanjskih linkova na ostale stranice koje prodaju nove ili korištene knjige kao i stranice koje mogu da imaju važnije podatke o knjigama koje tražite:",
        "booksources-invalid-isbn": "Navedeni ISBN broj nije validan; molimo da provjerite da li je došlo do greške pri kopiranju iz prvobitnog izvora.",
        "specialloguserlabel": "Izvršilac:",
        "wlheader-enotif": "* Obavještavanje e-poštom je omogućeno.",
        "wlheader-showupdated": "* Stranice koje su izmijenjene od kad ste ih posljednji put posjetili su prikazane '''podebljanim slovima'''",
        "wlnote": "Ispod {{PLURAL:$1|je posljednja izmjena|su posljednje '''$1''' izmjene|je posljednjih '''$1''' izmjena}} u {{PLURAL:$2|prethodnom satu|prethodna '''$2''' sata|prethodnih '''$2''' sati}}, zaključno sa $3, $4.",
-       "wlshowlast": "Prikaži posljednjih $1 sati $2 dana $3",
+       "wlshowlast": "Prikaži posljednjih $1 sati $2 dana",
        "watchlist-options": "Opcije liste praćenja",
        "watching": "Pratim... / Додавање на списак надгледања...",
        "unwatching": "Ne pratim…",
        "import": "Uvoz stranica",
        "importinterwiki": "Transwiki uvoz",
        "import-interwiki-text": "Izaberi wiki i naslov stranice za uvoz.\nDatumi revizije i imena urednika će biti sačuvana.\nSve akcije vezane uz transwiki uvoz su zabilježene u [[Special:Log/import|registru uvoza]].",
-       "import-interwiki-source": "Izvorna wiki/stranica:",
        "import-interwiki-history": "Kopiraj sve verzije historije za ovu stranicu",
        "import-interwiki-templates": "Uključi sve šablone",
        "import-interwiki-submit": "Uvezi - Увези",
        "pageinfo-robot-policy": "Status tražilice",
        "pageinfo-robot-index": "Stranicu je moguće indeksirati",
        "pageinfo-robot-noindex": "Ne može se indeksirati",
-       "pageinfo-views": "Broj pregleda",
        "pageinfo-watchers": "Broj pratitelja stranice",
        "pageinfo-few-watchers": "Manje od $1 {{PLURAL:$1|pratioca|pratilaca}}",
        "pageinfo-redirects-name": "Preusmjeravanja na ovu stranicu",
        "exif-urgency-low": "Nisko ($1)",
        "exif-urgency-high": "Visoko ($1)",
        "exif-urgency-other": "Priorite definiran od korisnika ($1)",
-       "watchlistall2": "sve",
        "namespacesall": "sve",
        "monthsall": "sve",
        "confirmemail": "Potvrdite adresu e-pošte",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|je promijenio|je promijenila|je promijenio}} članstvo grupe za $3",
        "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-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:",
index 6b4ac69..df7d659 100644 (file)
        "mergehistory-same-destination": "Tisniwin tiɣbula d tin ɣilli rant urgant yat.",
        "mergehistory-reason": "Maɣ:",
        "mergelog": "Aɣmis n imsmun",
-       "pagemerge-logentry": "[[$1]] tllan ɣ  [[$2]] (Lqm ar $3)",
        "revertmerge": "Fukku",
        "mergelogpagetext": "Γid umuɣ n izdayn n umzruy n yat tasna ɣ yat yaḍn lli igan tamaynut",
        "history-title": "Asakud n umcggr n « $1 »",
        "searchrelated": "Tuyzday",
        "searchall": "Kullu",
        "showingresults": "Ẓr azddar  {{PLURAL:$1|'''1''' May tuykfan|'''$1''' Mad kfan}} Bdu s #'''$2'''",
-       "showingresultsheader": "{{PLURAL:$5|May kfa '''$1''' ar '''$3'''|Mad kfan '''$1 - $2''' ar '''$3'''}} i '''$4'''",
        "search-nonefound": "Ur ittuykfa walu maygan zund ɣayli trit",
        "powersearch-legend": "Amsigl imzwarn",
        "powersearch-ns": "Icnubbucn ɣ tɣulin",
        "booksources": "Iɣbula n udlis",
        "booksources-search-legend": "Acnubc s iɣbula n idlisn",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Ftu",
        "specialloguserlabel": "Amsqdac",
        "speciallogtitlelabel": "Azwl",
        "log": "Immussutn ittyuran",
        "watchthispage": "Ṭfr tasna yad",
        "unwatch": "Ur rast tsaggaɣ",
        "watchlist-details": "Umuɣ nk n imttfura ar  ittawi $1 tasna {{PLURAL:$1||s}}, bla dis tsmunt tisniwin n imdiwiln.",
-       "wlshowlast": "Ml ikudan imggura $1 , ussan imggura $2 niɣd $3",
+       "wlshowlast": "Ml ikudan imggura $1 , ussan imggura $2 niɣd",
        "watchlist-options": "Tixtiṛiyin n umuɣ lli ntfar",
        "watching": "Ar itt sagga",
        "unwatching": "Ur at sul ntsagga",
        "exif-subjectdistancerange-2": "tannayt iqrbn",
        "exif-gpslatitude-n": "dairat lard chamaliya",
        "exif-gpsspeed-n": "Knots",
-       "watchlistall2": "kraygat (kullu)",
        "namespacesall": "kullu",
        "monthsall": "kullu",
        "recreate": "awd skr",
        "htmlform-selectorother-other": "wayya",
        "revdelete-restricted": "iskr aqn i indbaln",
        "revdelete-unrestricted": "Aqn iḥiyd i indbaln",
-       "rightsnone": "(ḥtta yan)"
+       "rightsnone": "(ḥtta yan)",
+       "revdelete-summary": "Awal uflla n imbddln"
 }
index 7290105..3248763 100644 (file)
@@ -24,7 +24,8 @@
                        "සුරනිමල",
                        "아라",
                        "හරිත",
-                       "Indunil Chamara"
+                       "Indunil Chamara",
+                       "Susith Chandira Gts"
                ]
        },
        "tog-underline": "සබැඳි යටීර කිරීම:",
        "otherlanguages": "වෙනත් භාෂා වලින්",
        "redirectedfrom": "($1 වෙතින් යළි-යොමු කරන ලදි)",
        "redirectpagesub": "පිටුව යළි-යොමු කරන්න",
+       "redirectto": "යළියොමුව:",
        "lastmodifiedat": "මෙම පිටුව අවසන් වරට වෙනස් කරන ලද්දේ $1 දිනදී, $2 වේලාවෙහිදීය.",
        "viewcount": "මෙම පිටුවට {{PLURAL:$1|එක් වරක්|$1 වරක්}} පිවිස ඇත.",
        "protectedpage": "ආරක්ෂිත පිටුව",
        "passwordreset-emailsent-capture": "මුර-පදය වෙනස් කිරීම පිළිබඳව විද්‍යුත් තැපෑලක් යවන ලදී, එය පහත දැක්වේ.",
        "passwordreset-emailerror-capture": "සිහිකැඳවුම් ඊ-තැපෑල ජනිත කරනු ලැබූ අතර, එය පහත දැක්වේ, නමුත් එය {{GENDER:$2|}}පරිශීලකයාට යැවීම අසාර්ථක වුනි: $1",
        "changeemail": "විද්‍යුත් තැපැල් ලිපිනය වෙනස් කරන්න",
-       "changeemail-header": "ගිණුම් විද්‍යුත් තැපැල් ලිපිනය වෙනස් කරන්න",
        "changeemail-text": "ඔබගේ විද්‍යුත් තැපැල් ලිපිනය වෙනස් කිරීම සඳහා මෙම ෆෝරමය සම්පූර්ණ කරන්න . මෙම වෙනස් කිරීම තහවුරු කිරීම සඳහා ඔබගේ මුරපදය යෙදීමට ඔබට සිදු වේ.",
        "changeemail-no-info": "මෙම පිටුව සෘජු ලෙස සම්ප්‍රවේශය කෙරුමට පළමුව ඔබ ප්‍රවිෂ්ටව සිටිය යුතුය.",
        "changeemail-oldemail": "වත්මන් විද්‍යුත් තැපැල් ලිපිනය:",
        "changeemail-none": "(කිසිවක් නොමැත)",
        "changeemail-password": "ඔබේ {{SITENAME}} මුරපදය:",
        "changeemail-submit": "විද්‍යුත් තැපෑල  වෙනස් කරන්න",
-       "changeemail-cancel": "අවලංගු කරන්න",
        "changeemail-throttled": "ඔබ විසින් මෑතදී  පමණට වඩා වාර ගණනක් පිවිසීමෙහි උත්සාහයන් දරා ඇත.\nයළි උත්සාහ කිරීමට පෙර $1 වේලාවක් රැඳී සිටින්න.",
        "resettokens": "සංකේත නැවත සකසන්න",
        "resettokens-legend": "සංකේත නැවත සකසන්න",
        "mergehistory-same-destination": "මූල හා අන්ත පිටු දෙකම එකක් විය නොහැක",
        "mergehistory-reason": "හේතුව:",
        "mergelog": "එකාබද්ධ කිරීම් ලඝු-සටහන",
-       "pagemerge-logentry": "[[$2]] හා සමග [[$1]] ඒකාබද්ධ කරන ලදි ($3 දක්වා සංශෝධනයන්)",
        "revertmerge": "ඒකාබද්ධය අහෝසි කරන්න",
        "mergelogpagetext": "එක් පිටු ඉතිහාසයක් තවකක් හා සමග ඉතා මෑතදී සිදුවූ ඒකාබද්ධ වීම් දැක්වෙන ලැයිස්තුවක් පහත වේ.",
        "history-title": "$1:  සංශෝධන ඉතිහාසය",
        "searchrelated": "ආශ්‍රිත",
        "searchall": "සියල්ල",
        "showingresults": "#'''$2''' ගෙන් ආරම්භ කොට, {{PLURAL:$1|ප්‍රතිඵල '''1'''  ක් |ප්‍රතිඵල '''$1''' ක්}} දක්වා පහත පෙන්වා ඇත.",
-       "showingresultsheader": "'''$4''' සඳහා {{PLURAL:$5| '''$3''' අතුරින් '''$1''' ප්‍රතිඵලය| '''$3''' අතුරින් '''$1 - $2''' ප්‍රතිඵලයන්}}",
        "search-nonefound": "විමසුම හා ගැලපෙන ප්‍රතිඵල කිසිවක් නොමැත.",
        "powersearch-legend": "වැඩිමනත් ගවේෂණය",
        "powersearch-ns": "නාමඅවකාශයන්හි ගවේෂණය කරන්න:",
        "gender-female": "ස්ත්‍රී",
        "prefs-help-gender": "මෙම සංස්කරණය අත්‍යවශ්‍ය නැත: මෘදුකාංග විසින් නිවැරැදි ආමන්ත්‍රනය සඳහා භාවිතා කෙරෙයි.\nමෙම තොරතුර ප්‍රජාවට විවෘතය.",
        "email": "විද්‍යුත් තැපෑල",
-       "prefs-help-realname": "à·\83à·\90බà·\91 à¶±à·\8fමය à·\84à·\99à·\85à·\92 à¶\9aà·\92රà·\93ම à·\80à·\9bà¶\9aලà·\8aපà·\92à¶\9aයà·\92.\nà¶\94බ à·\80à·\92à·\83à·\92නà·\8a à¶\91ය à·\84à·\99à·\85à·\92 à¶\9aල à·\84à·\9cතà·\8a, à¶\94බà¶\9cà·\9a à¶\9aà·\98තà·\93නà·\8a à·\83ඳà·\84à·\8f à¶\94බà·\84ට à¶\9aතà·\98-බුහුමන් පිරිනැමීමට එය භාවිතා කරනු ඇත.",
+       "prefs-help-realname": "à·\83à·\90බà·\91 à¶±à·\8fමය à·\84à·\99à·\85à·\92 à¶\9aà·\92රà·\93ම à\85තà·\8aâ\80\8dයà·\80à·\81à·\8aâ\80\8dය à¶±à·\90ත.\nà¶\94බ à·\80à·\92à·\83à·\92නà·\8a à¶\91ය à·\84à·\99à·\85à·\92 à¶\9aල à·\84à·\9cතà·\8a, à¶\94බà¶\9cà·\9a à¶\9aà·\98තà·\93නà·\8a à·\83ඳà·\84à·\8f à¶\94බà·\84ට à¶\9aතà·\98බුහුමන් පිරිනැමීමට එය භාවිතා කරනු ඇත.",
        "prefs-help-email": "විද්‍යුත් තැපැල් ලිපිනය අත්‍යාවශ්‍ය නොවේ, එහෙත් ඔබගේ මුර පදය අමතක වූ විටෙක එය යලි සැකසීමට නම් විද්‍යුත් ලිපිනයක් දී තිබිය යුතුය.",
        "prefs-help-email-others": "ඔබගේ පරිශීලක හෝ පරිශීලක සාකච්ඡා පිටුවෙහි සබැඳියක් ඔස්සේ විද්‍යුත් තැපෑල මගින් අනෙක් අයට ඔබව සම්බන්ධ කර ගැනීම පිණිස තේරිමක් සිදු කල හැක.\nඅනෙකුත් පරිශීලකයන් ඔබව අමතන විට ඔබගේ විද්‍යුත් තැපැල් ලිපිනය හෙලිදරවු නොකෙරේ.",
        "prefs-help-email-required": "විද්‍යුත්-ලිපිනය අවශ්‍යයි.",
        "statistics": "සංඛ්‍යාන දත්ත",
        "statistics-header-pages": "පිටුවල සංඛ්‍යාන දත්ත",
        "statistics-header-edits": "සංස්කරණ වල සංඛ්‍යාන දත්ත",
-       "statistics-header-views": "නැරඹුම් වල සංඛ්‍යාන දත්ත",
        "statistics-header-users": "පරිශීලකයන් පිළිබඳ සංඛ්‍යාන දත්ත",
        "statistics-header-hooks": "අනෙක් සංඛ්‍යා ලේඛන",
        "statistics-articles": "අන්තර්ගත  පිටු",
        "statistics-files": "උඩුගතකරන ලද ගොනු",
        "statistics-edits": "{{SITENAME}} පිහිටුවීමෙන් අනතුරුව සිදුවූ පිටු සංස්කරණයන්",
        "statistics-edits-average": "එක් පිටුවකට සංස්කරණයන්හි  මධ්‍යක අගය",
-       "statistics-views-total": "නැරඹුම් එකතුව",
-       "statistics-views-total-desc": "විශේෂ හා දැනට නොපවතින පිටු වල දසුන් එක් කොට නැත",
-       "statistics-views-peredit": "එක් සංස්කරණයකට නැරඹුම් ගණන",
        "statistics-users": "ලේඛනගත  [[Special:ListUsers|පරිශීලකයෝ]]",
        "statistics-users-active": "ක්‍රියාශීලි පරිශීලකයන්",
        "statistics-users-active-desc": "පසුගිය {{PLURAL:$1|දිනය|දින $1}} තුලදී කිසියම් ක්‍රියාවක් සිදු කල පරිශීලකයන්",
-       "statistics-mostpopular": "බෙහෙවින් නරඹනු ලබන පිටු",
        "pageswithprop-prop": "ගුණ නාමය:",
        "pageswithprop-submit": "යන්න",
        "pageswithprop-prophidden-binary": "ද්විමය ගුණ අගය සැඟවී ($1)",
        "uncategorizedtemplates": "ප්‍රවර්ගීකරණය නොවූ සැකිලි",
        "unusedcategories": "භාවිතා නොවූ ප්‍රවර්ග",
        "unusedimages": "භාවිතා නොවූ ගොනු",
-       "popularpages": "ජනප්‍රිය පිටු",
        "wantedcategories": "අවශ්‍ය ප්‍රවර්ග",
        "wantedpages": "අවශ්‍ය පිටු",
        "wantedpages-badtitle": "ප්‍රතිඵල ගොන්නේ අනීතික ශීර්ෂය: $1",
        "pager-older-n": "{{PLURAL:$1|පැරණි 1|පැරණි $1}}",
        "suppress": "ප්‍රමාද දෝෂය",
        "querypage-disabled": "ක්‍රියාකාරීත්ව හේතූන්මත මෙම විශේෂ පිටුව අක්‍රීය කර ඇත.",
+       "apihelp": "API උදවු",
+       "apihelp-no-such-module": "ආකෘතිය \"$1\" හමුවුනේ නැත.",
        "booksources": "මූලාශ්‍ර පොත්",
        "booksources-search-legend": "ග්‍රන්ථ මූලාශ්‍ර සඳහා ගවේෂණය කරන්න",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "යන්න",
        "booksources-text": "පහත දැක්වෙන්නේ අළුත් හා පරණ පොත් විකුණන අනෙකුත් අඩවි වලට සබැඳි ලැයිස්තුවක් වන අතර,  ඔබ විසින් සොයන පොත් පිළිබඳ වැඩිමනත් විස්තර ඒවා‍යේ අඩංගු වීමට ඉඩ ඇත:",
        "booksources-invalid-isbn": "සපයන ලද ISBN අංකය නීතික බවක් නොපෙන්වයි; මුල් මුලාශ්‍රය වෙතින් පිටපත් කිරීමේදී සිදුවූ දෝෂ සඳහා පරික්ෂා කරන්න.",
        "specialloguserlabel": "ඉටුකරන්නා:",
        "wlheader-enotif": "විද්‍යුත් තැපැල් දැනුම්දීම සක්‍රීයයි.",
        "wlheader-showupdated": "ඔබ විසින් ඒවාට අවසන් වරට පිවිසුනු පසුව වෙනස්ව තිබෙන පිටු <strong>තදකුරු</strong> වලින් පෙන්වා ඇත.",
        "wlnote": "පහත දැක්වෙන්නේ $3, $4 මෙන්, අවසන් {{PLURAL:$2|පැය|පැය '''$2''' }} තුලදී සිදු කෙරී ඇති {{PLURAL:$1|අවසන් වෙනස්වීම්යි |අවසන් වෙනස්වීම්  '''$1''' යි}}.",
-       "wlshowlast": "පසුගිය පැය $1 දින $2 $3 පෙන්වන්න",
+       "wlshowlast": "පසුගිය පැය $1 දින $2 පෙන්වන්න",
        "watchlist-options": "තෝරාගතහැකි මුර ලැයිස්තු සැකසුම්",
        "watching": "මුර කරමින්...",
        "unwatching": "මුර නොකරමින්...",
        "pageinfo-robot-policy": "සෙවුම් එන්ජිම් තත්ත්වය",
        "pageinfo-robot-index": "සුචිමය",
        "pageinfo-robot-noindex": "සුචිමය නොවන",
-       "pageinfo-views": "නැරඹුම් සංඛ්‍යාව",
        "pageinfo-watchers": "පිටු මුරකරන්නන් සංඛ්‍යාව",
        "pageinfo-redirects-name": "මෙම පිටුවට යළියොමු ගණන",
        "pageinfo-subpages-name": "මෙම පිටුවෙහි උපපිටු",
        "exif-urgency-low": "අඩුයි ($1)",
        "exif-urgency-high": "ඉහළයි ($1)",
        "exif-urgency-other": "පරිශීලක-අර්ථ දැක්වූ ප්‍රමුඛත්වය ($1)",
-       "watchlistall2": "සියල්ල",
        "namespacesall": "සියල්ල",
        "monthsall": "සියළු",
        "confirmemail": "විද්‍යුත්-තැපැල් ලිපිනය තහවුරු කරන්න",
        "logentry-newusers-create2": "$1 විසින් $3 පරිශීලක ගිණුම තනන ලදී",
        "logentry-newusers-autocreate": "$1 ගිණුම ස්වංක්‍රීයව නිර්මිතය",
        "rightsnone": "(කිසිවක් නොමැත)",
+       "revdelete-summary": "සංස්කරණ සාරාංශය",
        "feedback-subject": "විෂයය:",
        "feedback-message": "පණිවුඩය:",
        "feedback-cancel": "අවලංගු කරන්න",
index 4bacc61..967b679 100644 (file)
                        "Valasek",
                        "Wizzard",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Matthew Greg",
+                       "Ата"
                ]
        },
        "tog-underline": "Podčiarkovať odkazy:",
        "tog-hideminor": "V posledných úpravách nezobrazovať drobné úpravy",
        "tog-hidepatrolled": "Skryť strážené úpravy v Posledných úpravách",
        "tog-newpageshidepatrolled": "Skryť strážené stránky zo zoznamu nových stránok",
-       "tog-extendwatchlist": "Rozšíriť zoznam sledovaných stránok, aby zobrazoval všetky zmeny, nie len posledné",
+       "tog-extendwatchlist": "Rozšíriť zoznam sledovaných stránok, aby zobrazoval všetky úpravy, nie len posledné",
        "tog-usenewrc": "Zoskupiť zmeny v posledných úpravách a na zozname sledovaných stránok podľa stránky",
        "tog-numberheadings": "Automaticky číslovať nadpisy",
        "tog-showtoolbar": "Zobraziť panel nástrojov úprav",
@@ -53,7 +55,7 @@
        "tog-shownumberswatching": "Zobraziť počet používateľov sledujúcich stránku",
        "tog-oldsig": "Súčasný podpis:",
        "tog-fancysig": "Považovať podpisy za wikitext (bez automatických odkazov)",
-       "tog-uselivepreview": "Používať živý náhľad(experimentálna funkcia)",
+       "tog-uselivepreview": "Používať živý náhľad (experimentálna funkcia)",
        "tog-forceeditsummary": "Upozoriť ma, keď nevyplním zhrnutie úprav",
        "tog-watchlisthideown": "Skryť moje úpravy zo zoznamu sledovaných",
        "tog-watchlisthidebots": "Skryť úpravy botov zo zoznamu sledovaných",
        "otherlanguages": "V iných jazykoch",
        "redirectedfrom": "(Presmerované z $1)",
        "redirectpagesub": "Presmerovacia stránka",
+       "redirectto": "Presmerovať na:",
        "lastmodifiedat": "Čas poslednej úpravy tejto stránky je $2, $1.",
        "viewcount": "Táto stránka bola navštívená {{PLURAL:$1|raz|$1-krát|$1-krát}}.",
        "protectedpage": "Zamknutá stránka",
        "jumptonavigation": "navigácia",
        "jumptosearch": "hľadanie",
        "view-pool-error": "Ľutujeme, servery sú momentálne preťažené.\nPríliš veľa používateľov sa pokúša zobraziť túto stránku.\nProsím, počkajte chvíľu predtým, než sa pokúsite na túto stránku dostať znova.\n\n$1",
+       "generic-pool-error": "Ľutujeme, servery sú momentálne preťažené.\nPríliš veľa používateľov sa pokúša zobraziť tento zdroj.\nProsím, pred ďalším pokusom o prístup chvíľu počkajte.",
        "pool-timeout": "Bol prekročený vyhradený čas čakania na zámok",
        "pool-queuefull": "Front je plný",
        "pool-errorunknown": "Neznáma chyba",
        "hidetoc": "skryť",
        "collapsible-collapse": "zbaliť",
        "collapsible-expand": "rozbaliť",
+       "confirmable-confirm": "Ste si {{GENDER:$1|istý|istá|istí}}?",
+       "confirmable-yes": "Áno",
+       "confirmable-no": "Nie",
        "thisisdeleted": "Zobraziť alebo obnoviť $1?",
        "viewdeleted": "Zobraziť $1?",
        "restorelink": "{{PLURAL:$1|jednu zmazanú úpravu|$1 zmazané úpravy|$1 zmazaných úprav}}",
        "actionthrottledtext": "Ako opatrenie proti spamu je počet vykonaní tejto činnosti za určitý čas obmedzený. Tento limit ste prekročili. Prosím, skúste to znova o niekoľko minút.",
        "protectedpagetext": "Táto stránka bola zamknutá aby sa zamedzilo úpravám.",
        "viewsourcetext": "Môžete si zobraziť a kopírovať zdroj tejto stránky:",
-       "viewyourtext": "Môžete si prehliadnuť a skopírovať zdrojový kód '''vašich zmien''' tejto stránky:",
+       "viewyourtext": "Môžete si prehliadnuť a skopírovať zdrojový kód <strong>vašich úprav</strong> tejto stránky:",
        "protectedinterface": "Táto stránka poskytuje text používateľského rozhrania tejto wiki a je zamknutá, aby sa predišlo jej zneužitiu.\nAk chcete pridať alebo zmeniť preklady pre všetky wiki, prosím, použite [//translatewiki.net/ translatewiki.net], projekt lokalizácie MediaWiki.",
        "editinginterface": "'''Upozornenie:''' Upravujete stránku, ktorá poskytuje text používateľského rozhrania.\nZmeny tejto stránky ovplyvnia vzhľad používateľského rozhrania ostatným používateľom.\nAk chcete pridať alebo zmeniť preklady pre všetky wiki, prosím, použite [//translatewiki.net/ translatewiki.net], projekt lokalizácie MediaWiki.",
        "cascadeprotected": "Táto stránka bola zamknutá proti úpravám, pretože je použitá na {{PLURAL:$1|nasledovnej stránke, ktorá je zamknutá|nasledovných stránkach, ktoré sú zamknuté}} voľbou „kaskádového zamknutia“:\n$2",
        "invalidtitle-knownnamespace": "Neplatný názov s menným priestorom „$2“ a textom „$3“",
        "invalidtitle-unknownnamespace": "Neplatný názov s neznámym číslom menného priestoru „$1“ a textom „$2“",
        "exception-nologin": "Nie ste prihlásený",
-       "exception-nologin-text": "Táto stránka alebo operácia vyžaduje, aby ste [[Special:Userlogin|boli prihlásený]].",
+       "exception-nologin-text": "Táto stránka alebo operácia vyžaduje, aby ste boli prihlásený.",
        "exception-nologin-text-manual": "Pre prístup na túto stránku alebo k tejto akcii sa musíte $1.",
        "virus-badscanner": "Chybná konfigurácia: neznámy antivírus: ''$1''",
        "virus-scanfailed": "kontrola zlyhala (kód $1)",
        "createaccount-text": "Niekto vytvoril účet pre vašu emailovú adresu na {{GRAMMAR:lokál|{{SITENAME}}}}\n($4) s názvom „$2“, s heslom „$3“. Mali by ste sa prihlásiť a svoje heslo teraz zmeniť.\n\nAk bol účet vytvorený omylom, túto správu môžete ignorovať.",
        "login-throttled": "Uskutočnili ste príliš mnoho neúspešných pokusov o prihlásenie.\nProsím, počkajte $1 predtým, než to skúsite znova.",
        "login-abort-generic": "Vaše prihlásenie nebolo úspešné - zrušené",
+       "login-migrated-generic": "Váš účet bol presťahovaný a vaše používateľské meno už viac na tejto wiki neexistuje.",
        "loginlanguagelabel": "Jazyk: $1",
        "suspicious-userlogout": "Vaša požiadavka odhlásiť sa bola zamietnutá, pretože to vyzerá, že ju poslal pokazený prehliadač alebo proxy server.",
        "createacct-another-realname-tip": "Skutočné meno je nepovinné.\nAk sa rozhodnete ho poskytnúť, použije sa na označenie vašej práce.",
        "resetpass-temp-password": "Dočasné heslo:",
        "resetpass-abort-generic": "Zmena hesla bola zablokovaná rozšírením.",
        "resetpass-expired": "Platnosť vášho hesla vypršala. Pre prihlásenie si nastavte nové heslo.",
+       "resetpass-expired-soft": "Platnosť vášho hesla vypršala, musíte si nastaviť nové. Zvoľte si nové heslo nebo kliknite na „{{int:resetpass-submit-cancel}}“ a nastavte si ho neskôr.",
+       "resetpass-validity-soft": "Vaše heslo je neplatné: $1\n\nVyberte si nové heslo, alebo kliknite na „{{int:resetpass-submit-cancel}}“ a nastavte si ho neskôr.",
        "passwordreset": "Reset hesla",
        "passwordreset-text-one": "Pre získanie nového hesla vyplňte tento formulár.",
-       "passwordreset-text-many": "{{PLURAL:$1|Pre získanie nového hesla zadajte jeden z údajov.}}",
+       "passwordreset-text-many": "{{PLURAL:$1|Pre získanie nového hesla emailom, zadajte jeden z údajov.}}",
        "passwordreset-legend": "Obnoviť heslo",
        "passwordreset-disabled": "Obnovenie hesla bolo na tejto wiki zakázané.",
        "passwordreset-emaildisabled": "E-mailové funkcie boli na tejto wiki vypnuté.",
        "passwordreset-emailsent-capture": "Bol odoslaný email s novým heslom, ktorý je zobrazený nižšie.",
        "passwordreset-emailerror-capture": "Bol odoslaný email s novým heslom, ktorý je zobrazený nižšie, ale nepodarilo sa ho odoslať {{GENDER:$2|používateľovi}}: $1",
        "changeemail": "Zmeniť emailovú adresu",
-       "changeemail-header": "Zmena e-mailovej adresy pre účet",
        "changeemail-text": "Vyplňte tento formulár na zmenu e-mailovej adresy. Zmenu budete musieť potvrdiť zadaním svojho hesla.",
        "changeemail-no-info": "Na prístup k tejto stránke musíte byť prihlásený.",
        "changeemail-oldemail": "Súčasná e-mailová adresa:",
        "changeemail-none": "(žiadna)",
        "changeemail-password": "Vaše heslo k {{GRAMMAR:lokál|{{SITENAME}}}}:",
        "changeemail-submit": "Zmeniť e-mail",
-       "changeemail-cancel": "Zrušiť",
        "changeemail-throttled": "Uskutočnili ste príliš mnoho neúspešných pokusov o prihlásenie. Prosím, počkajte $1 predtým, než to skúsite znova.",
        "resettokens": "Obnoviť tokeny",
        "resettokens-text": "Tu môžete obnoviť tokeny, ktoré umožňujú prístup k určitým súkromným údajom spojeným s vaším účtom.\n\nMali by ste to urobiť, ak ste ich omylom niekomu poskytli alebo ak bolo vaše konto zneužité.",
        "preview": "Náhľad",
        "showpreview": "Zobraziť náhľad",
        "showdiff": "Zobraziť rozdiely",
-       "anoneditwarning": "'''Upozornenie:''' Nie ste prihlásený.\nVaša IP adresa bude zaznamenaná v histórii úprav tejto stránky.",
+       "blankarticle": "<strong>Upozornenie:</strong> Stránka, ktorú sa chystáte založiť, je prázdna. Pokiaľ ešte raz kliknete na „{{int:savearticle}}“, bude založená úplne bez obsahu.",
+       "anoneditwarning": "<strong>Upozornenie:</strong> Nie ste prihlásený.\nAk uložíte akúkoľvek úpravu vaša IP adresa bude zverejnená v histórii tejto stránky. Ak sa <strong>[$1 prihlásite]</strong> alebo si <strong>[$2 vytvoríte účet]</strong>, budú vaše úpravy priradené k vášmu používateľskému menu a získate i ďalšie výhody.",
        "anonpreviewwarning": "''Nie ste prihlásený. Uložením zaznamenáte svoju IP adresu do histórie úprav tejto stránky.''",
        "missingsummary": "'''Pripomienka:''' Neposkytli ste zhrnutie úprav. Ak kliknete znova na Uložiť, vaše úpravy sa uložia bez zhrnutia úprav.",
        "missingcommenttext": "Prosím, dolu napíšte komentár.",
        "edit-gone-missing": "Nebolo možné aktualizovať stránku.\nZdá sa, že bola zmazaná.",
        "edit-conflict": "Konflikt pri upravovaní.",
        "edit-no-change": "Vaša úprava bola ignorovaná, pretože ste v texte nič nezmenili.",
+       "postedit-confirmation-created": "Stránka bola vytvorená.",
+       "postedit-confirmation-restored": "Stránka bola obnovená.",
        "postedit-confirmation-saved": "Vaša úprava bola uložená.",
        "edit-already-exists": "Nebolo možné vytvoriť novú stránku.\nUž existuje.",
        "defaultmessagetext": "Predvolený text správy",
        "content-model-text": "čistý text",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Stránky s duplicitnými parametrami pri volaniach šablón",
+       "duplicate-args-category-desc": "Stránka obsahuje volania šablóny používajúce duplicitné parametere, ako napríklad <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> alebo <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Upozornenie: Táto stránka obsahuje príliš mnoho volaní funkcií syntaktického analyzátora, ktoré nadmerne zaťažujú server.\n\nObsahuje $1 {{PLURAL:$1|volanie|volania|volaní}}. Mala by obsahovať menej ako $2 {{PLURAL:$1|volanie|volania|volaní}}.",
        "expensive-parserfunction-category": "Stránky s príliš veľkým počtom volaní funkcií syntaktického analyzátora",
        "post-expand-template-inclusion-warning": "Upozornenie: Vkladaná šablóna je príliš veľká.\nNiektoré zo šablón nebudú vložené.",
        "parser-template-recursion-depth-warning": "Bol prekročený limit rekurzie šablón ($1)",
        "language-converter-depth-warning": "Bolo prekročené obmedzenie hĺbky ($1) jazykového konvertora",
        "node-count-exceeded-category": "Stránky s priveľkým počtom uzlov",
-       "node-count-exceeded-warning": "Stránka prekročila povolený počet uzlov",
+       "node-count-exceeded-category-desc": "Tato stránka prekračuje maximálny počet uzlov.",
+       "node-count-exceeded-warning": "Stránka prekročila počet uzlov",
        "expansion-depth-exceeded-category": "Stránky s priveľkou hĺbkou expanzie",
+       "expansion-depth-exceeded-category-desc": "Stránka prekročila maximálnu hĺbku expanzie.",
        "expansion-depth-exceeded-warning": "Stránka prekročila povolenú hĺbku expanzie",
        "parser-unstrip-loop-warning": "Zistené zacyklenie volania rozširovacej značky",
        "parser-unstrip-recursion-limit": "Prektočený limit rekurzie volania rozširovacej značky ($1)",
        "undo-success": "Úpravu je možné vrátiť. Prosím skontrolujte tento rozdiel, čím overíte, že táto úprava je tá, ktorú chcete, a následne uložte zmeny, čím ukončíte vrátenie.",
        "undo-failure": "Úpravu nie je možné vrátiť kvôli konfliktným medziľahlým úpravám.",
        "undo-norev": "Túto úpravu nie je možné vrátiť, pretože neexistuje alebo bola zmazaná.",
+       "undo-nochange": "Zdá se, že úprava už bola zrušená.",
        "undo-summary": "Revízia $1 používateľa [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusia]]) bola vrátená",
        "undo-summary-username-hidden": "Vrátiť revíziu $1, ktorú vykonal skrytý používateľ",
        "cantcreateaccounttitle": "Nie je možné vytvoriť účet",
        "mergehistory-same-destination": "Zdrojová a cieľová stránka sa nemôžu zhodovať",
        "mergehistory-reason": "Dôvod:",
        "mergelog": "Záznam zlúčení",
-       "pagemerge-logentry": "zlúčil [[$1]] do [[$2]] (revízie do $3)",
        "revertmerge": "Vrátiť zlúčenie",
        "mergelogpagetext": "Dolu je zoznam posledných zlúčení jednej histórie revízií stránky do druhej.",
        "history-title": " $1: História revízií",
        "searchrelated": "súvisiace",
        "searchall": "všetko",
        "showingresults": "Nižšie {{PLURAL:$1|je zobrazený jeden výsledok|sú zobrazené '''1''' výsledky|je zobrazených '''$1''' výsledkov}}, počnúc od  #<b>$2</b>.",
-       "showingresultsheader": "{{PLURAL:$5|Výsledok '''$1''' z '''$3'''|Výsledky '''$1 - $2''' z '''$3'''}} pre '''$4'''",
        "search-nonefound": "Vyhľadávanie nenašlo žiadne výsledky.",
        "powersearch-legend": "Pokročilé hľadanie",
        "powersearch-ns": "Hľadať v menných priestoroch:",
        "right-move": "Presúvať stránky",
        "right-move-subpages": "Presunúť stránky aj s podstránkami",
        "right-move-rootuserpages": "Presunúť koreňové stránky používateľa",
+       "right-move-categorypages": "Premiestňovanie stránok kategórií",
        "right-movefile": "Presunúť súbory",
        "right-suppressredirect": "Nevytvoriť presmerovanie zo starého názvu pri presúvaní stránky",
        "right-upload": "Nahrávať súbory",
        "action-createpage": "vytvárať stránky",
        "action-createtalk": "vytvárať diskusné stránky",
        "action-createaccount": "vytvoriť tento používateľský účet",
+       "action-history": "zobraziť históriu tejto stránky",
        "action-minoredit": "označiť túto úpravu ako drobnú",
        "action-move": "presunúť túto stránku",
        "action-move-subpages": "presunúť túto stránku a jej podtránky",
        "action-move-rootuserpages": "presunúť koreňové stránky používateľa",
+       "action-move-categorypages": "premiestňovať stránky kategórií",
        "action-movefile": "presunúť tento súbor",
        "action-upload": "nahrať tento súbor",
        "action-reupload": "prepísať tento existujúci súbor",
        "action-viewmywatchlist": "zobraziť zoznam sledovaných stránok",
        "action-viewmyprivateinfo": "zobraziť vaše súkromné údaje",
        "action-editmyprivateinfo": "upraviť vaše súkromné údaje",
-       "nchanges": "$1 {{PLURAL:$1|zmena|zmeny|zmien}}",
+       "nchanges": "$1 {{PLURAL:$1|úprava|úpravy|úprav}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|od poslednej návštevy}}",
        "enhancedrc-history": "história",
        "recentchanges": "Posledné úpravy",
-       "recentchanges-legend": "Možnosti posledných zmien",
+       "recentchanges-legend": "Možnosti posledných úprav",
        "recentchanges-summary": "Pomocou tejto stránky sledujete posledné úpravy wiki.",
        "recentchanges-noresult": "V danom období nie sú zmeny spĺňajúce tieto kritériá.",
        "recentchanges-feed-description": "Sledovať posledné úpravy tejto wiki týmto kanálom.",
        "recentchanges-label-plusminus": "Veľkosť stránky sa zmenila o toľkoto bajtov",
        "recentchanges-legend-heading": "'''Legenda:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (pozri tiež [[Special:NewPages|zoznam nových stránok]])",
-       "rcnotefrom": "Nižšie sú zobrazené úpravy od <strong>$2</strong> (do <strong>$1</strong>).",
+       "rcnotefrom": "Nižšie {{PLURAL:$5|je zobrazená úprava|sú zobrazené úpravy}} od <strong>$2</strong> (do <strong>$1</strong>).",
        "rclistfrom": "Zobraziť nové úpravy počnúc od $3 $2",
        "rcshowhideminor": "$1 drobné úpravy",
        "rcshowhideminor-show": "Zobraziť",
        "diff": "rozdiel",
        "hist": "história",
        "hide": "Skryť",
-       "show": "zobraziť",
+       "show": "Zobraziť",
        "minoreditletter": "d",
        "newpageletter": "N",
        "boteditletter": "b",
        "license-nopreview": "(Náhľad nie je dostupný)",
        "upload_source_url": " (platný, verejne prístupný URL)",
        "upload_source_file": " (súbor na vašom počítači)",
+       "listfiles-delete": "zmazať",
        "listfiles-summary": "Táto špeciálna stránka zobrazuje všetky nahrané súbory.",
        "listfiles_search_for": "Hľadať názov súboru:",
        "imgfile": "súbor",
        "randomincategory": "Náhodná stránka v kategórii",
        "randomincategory-invalidcategory": "\"$1\" nie je platný názov kategórie.",
        "randomincategory-nopages": "V [[:Category:$1|kategórii $1]] nie sú žiadne stránky.",
-       "randomincategory-selectcategory": "Získať náhodnú stránku z kategórie: $1 $2",
-       "randomincategory-selectcategory-submit": "Ísť na",
+       "randomincategory-category": "Kategória:",
+       "randomincategory-legend": "Náhodná stránka v kategórii",
        "randomredirect": "Náhodná presmerovacia stránka",
        "randomredirect-nopages": "V mennom „$1“ priestore nie sú žiadne presmerovania.",
        "statistics": "Štatistiky",
        "statistics-header-pages": "Štatistika stránok",
        "statistics-header-edits": "Štatistika úprav",
-       "statistics-header-views": "Štatistika zobrazení",
        "statistics-header-users": "Štatistika používateľov",
        "statistics-header-hooks": "Iná štatistika",
        "statistics-articles": "Stránok s obsahom",
        "statistics-files": "Nahraných súborov",
        "statistics-edits": "Úprav stránok od založenia {{GRAMMAR:genitív|{{SITENAME}}}}",
        "statistics-edits-average": "Priemerný počet úprav na stránku",
-       "statistics-views-total": "Celkom zobrazení",
-       "statistics-views-total-desc": "Zobrazenia neexistujúcich stránok a špeciálnych stránok nie sú zahrnuté",
-       "statistics-views-peredit": "Zobrazení na úpravu",
        "statistics-users": "Registrovaných [[Special:ListUsers|používateľov]]",
        "statistics-users-active": "Aktívnych používateľov",
        "statistics-users-active-desc": "Používatelia, ktorí za {{PLURAL:$1|posledný deň|posledné $1 dni|posledných $1 dní}} vykonali nejakú operáciu",
-       "statistics-mostpopular": "Najčastejšie prezerané stránky",
        "pageswithprop": "Stránky s vlastnosťou stránky",
        "pageswithprop-legend": "Stránky s vlastnosťou stránky",
        "pageswithprop-text": "Táto stránka obsahuje stránky, ktoré používajú konkrétnu vlastnosť stránky.",
        "pageswithprop-prophidden-binary": "hodnota binárnej vlastnosti bola skrytá ($1)",
        "doubleredirects": "Dvojité presmerovania",
        "doubleredirectstext": "Táto stránka obsahuje zoznam stránok, ktoré presmerovávajú na iné presmerovacie stránky.\nKaždý riadok obsahuje odkaz na prvé a druhé presmerovanie a tiež prvý riadok z textu na ktorý odkazuje druhé presmerovanie, ktoré zvyčajne odkazuje na „skutočný“ cieľ, na ktorý má odkazovať prvé presmerovanie.\n<del>Prečiarknuté</del> položky boli vyriešené.",
-       "double-redirect-fixed-move": "Stránka [[$1]] bola presunutá, teraz je presmerovaním na [[$2]]",
+       "double-redirect-fixed-move": "Stránka [[$1]] bola presunutá.\nBola automaticky aktualizovaná a teraz presmerováva na [[$2]]",
        "double-redirect-fixed-maintenance": "Opravuje sa dvojité presmerovanie z [[$1]] na [[$2]].",
        "double-redirect-fixer": "Korektor presmerovaní",
        "brokenredirects": "Pokazené presmerovania",
        "uncategorizedtemplates": "Nekategorizované šablóny",
        "unusedcategories": "Nepoužité kategórie",
        "unusedimages": "Nepoužité obrázky",
-       "popularpages": "Populárne stránky",
        "wantedcategories": "Žiadané kategórie",
        "wantedpages": "Žiadané stránky",
        "wantedpages-badtitle": "Neplatný názov vo výsledkoch: $1",
        "querypage-disabled": "Táto špeciálna stránka bola zakázaná z výkonnostných dôvodov.",
        "booksources": "Knižné zdroje",
        "booksources-search-legend": "Vyhľadávať knižné zdroje",
-       "booksources-go": "Vykonať",
+       "booksources-search": "Hľadať",
        "booksources-text": "Nižšie je zoznam odkazov na iné stránky, ktoré predávajú nové a použité knihy a tiež môžu obsahovať ďalšie informácie o knihách, ktoré hľadáte:",
        "booksources-invalid-isbn": "Zdá sa, že dané ISBN nie je platné. Skontrolujte, či ste neurobili chybu pri kopírovaní z pôvodného zdroja.",
        "specialloguserlabel": "Pôvodca:",
        "watchlist-details": "{{PLURAL:$1|Jedna sledovaná stránka|$1 sledované stránky|$1 sledovaných stránok}}, nepočítajúc diskusné stránky.",
        "wlheader-enotif": "Upozorňovanie e-mailom je zapnuté.",
        "wlheader-showupdated": "Stránky, ktoré boli zmenené od vašej poslednej návštevy sú zobrazené '''tučne'''.",
-       "wlnote": "Nižšie {{PLURAL:$1|je posledná jedna zmena|sú posledné '''$1''' zmeny|je posledných '''$1''' zmien}} za {{PLURAL:$2|poslednú hodinu|posledné '''$2''' hodiny|posledných '''$2''' hodín}} do $4, $3.",
-       "wlshowlast": "Zobraziť posledných $1 hodín $2 dní $3",
+       "wlnote": "Nižšie {{PLURAL:$1|je posledná úprava|sú posledné <strong>$1</strong> úpravy|je posledných <strong>$1</strong> úprav}} za {{PLURAL:$2|poslednú hodinu|posledné <strong>$2</strong> hodiny|posledných <strong>$2</strong> hodín}} do $4, $3.",
+       "wlshowlast": "Zobraziť posledných $1 hodín $2 dní",
        "watchlist-options": "Nastavenia zoznamu sledovaných",
        "watching": "Pridávam do zoznamu sledovaných...",
        "unwatching": "Odoberám zo zoznamu sledovaných...",
        "import": "Import stránok",
        "importinterwiki": "Transwiki import",
        "import-interwiki-text": "Zvoľte wiki a názov stránky, ktorá sa má importovať.\nDátumy revízií a mená používateľov budú zachované.\nVšetky transwiki importy sa zaznamenávajú v [[Special:Log/import|Zázname importov]].",
-       "import-interwiki-source": "Zdrojová wiki/stránka:",
+       "import-interwiki-sourcewiki": "Zdrojová wiki:",
+       "import-interwiki-sourcepage": "Zdrojová stránka:",
        "import-interwiki-history": "Skopírovať všetky historické revízie tejto stránky",
        "import-interwiki-templates": "Vložiť všetky šablóny",
        "import-interwiki-submit": "Importovať",
        "importuploaderrortemp": "Nahranie alebo import súboru zlyhal. Dočasný adresár chýba.",
        "import-parse-failure": "Chyba syntaktickej analýzy pri XML importe",
        "import-noarticle": "Žiadny článok na import!",
-       "import-nonewrevisions": "Všetky revízie boli predtým importované.",
+       "import-nonewrevisions": "Žiadne revízie neboli importované (buď už boli všetky  importované skôr, alebo boli preskočené kvôli chybám).",
        "xml-error-string": "$1 na riadku $2, stĺpec $3 (bajt $4): $5",
        "import-upload": "Nahrať XML údaje",
        "import-token-mismatch": "Strata údajov relácie. Prosím, skúste to znova.",
        "pageinfo-robot-policy": "Indexovanie pomocou robotov",
        "pageinfo-robot-index": "Povolené",
        "pageinfo-robot-noindex": "Nepovolené",
-       "pageinfo-views": "Počet zobrazení",
        "pageinfo-watchers": "Počet používateľov sledujúcich stránku",
        "pageinfo-few-watchers": "Menej ako $1 {{PLURAL:$1|sledujúci|sledujúci|sledujúcich}}",
        "pageinfo-redirects-name": "Počet presmerovaní na túto stránku",
        "markaspatrolledtext": "Označiť túto stránku ako stráženú",
        "markedaspatrolled": "Označené ako strážené",
        "markedaspatrolledtext": "Vybraná verzia [[:$1]] bola označená ako strážená.",
-       "rcpatroldisabled": "Stráženie posledných zmien bolo vypnuté",
-       "rcpatroldisabledtext": "Funkcia stráženia posledných zmien je momentálne vypnutá.",
+       "rcpatroldisabled": "Stráženie posledných úprav bolo vypnuté",
+       "rcpatroldisabledtext": "Funkcia stráženia posledných úprav je momentálne vypnutá.",
        "markedaspatrollederror": "Nie je možné označiť ako strážené",
        "markedaspatrollederrortext": "Pre označenie ako strážený je potrebné uviesť revíziu, ktorá sa má označiť ako strážená.",
-       "markedaspatrollederror-noautopatrol": "Nie je vám umožnené označiť vlastné zmeny za strážené.",
+       "markedaspatrollederror-noautopatrol": "Nie je vám umožnené označiť vlastné úpravy za strážené.",
        "markedaspatrollednotify": "Táto zmena stránky $1 bola označená ako strážená.",
        "markedaspatrollederrornotify": "Označenie ako strážená zlyhalo.",
        "patrol-log-page": "Záznam strážení",
        "newimages-summary": "Táto špeciálna stránka zobrazuje posledné nahrané súbory.",
        "newimages-legend": "Filter",
        "newimages-label": "Názov súboru (alebo jeho časť):",
+       "newimages-showbots": "Zobraziť súbory nahrané botmi",
        "noimages": "Niet čo zobraziť.",
        "ilsubmit": "Hľadať",
        "bydate": "podľa dátumu",
        "exif-urgency-low": "Nízka ( $1 )",
        "exif-urgency-high": "Vysoká ( $1 )",
        "exif-urgency-other": "Používateľom definovaná priorita ($1)",
-       "watchlistall2": "všetky",
        "namespacesall": "všetky",
        "monthsall": "všetky",
        "confirmemail": "Potvrdiť e-mailovú adresu",
        "autosumm-replace": "Nahrádzam stránku textom „$1“",
        "autoredircomment": "Presmerovanie na [[$1]]",
        "autosumm-new": "Vytvorená stránka „$1“",
+       "autosumm-newblank": "Vytvorená prázdna stránka",
        "lag-warn-normal": "Úpravy za {{PLURAL:$1|poslednú sekundu|posledné $1 sekundy|posledných $1 sekúnd}} nemusia byť v tomto zozname zobrazené.",
        "lag-warn-high": "Kvôli dlhšej odozve databázového servera nemusia byť úpravy za {{PLURAL:$1|poslednú sekundu|posledné $1 sekundy|posledných $1 sekúnd}} v tomto zozname zobrazené.",
        "watchlistedit-normal-title": "Upraviť zoznam sledovaných stránok",
        "watchlistedit-raw-done": "Váš zoznam sledovaných stránok bol aktualizovaný.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Jedna položka bola pridaná|$1 položky boli pridané|$1 položiek bolo pridaných}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Jedna položka bola odstránená|$1 položky boli odstránené|$1 položiek bolo odstránených}}:",
+       "watchlistedit-clear-title": "Vyprázdnenie zoznamu sledovaných stránok",
+       "watchlistedit-clear-legend": "Vyprázdniť zoznam sledovaných stránok",
+       "watchlistedit-clear-explain": "Z vášho zoznamu sledovaných stránok budú odstránené všetky názvy",
+       "watchlistedit-clear-titles": "Názvy:",
+       "watchlistedit-clear-submit": "Vyprázdniť zoznam sledovaných stránok (natrvalo!)",
+       "watchlistedit-clear-done": "Váš zoznam sledovaných stránok bol vyprázdnený.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|Bol odstránený jeden názov|Boli odstránené $1 názvy|Bolo odstránených $1 názvov}}:",
+       "watchlisttools-clear": "Vyprázdniť zoznam sledovaných stránok",
        "watchlisttools-view": "Zobraziť súvisiace zmeny",
        "watchlisttools-edit": "Zobraziť a upraviť zoznam sledovaných stránok",
        "watchlisttools-raw": "Upraviť nespracovaný zoznam sledovaných stránok",
        "version-license": "Licencia",
        "version-ext-license": "Licencia",
        "version-ext-colheader-name": "Rozšírenie",
+       "version-skin-colheader-name": "Vzhľad",
        "version-ext-colheader-version": "Verzia",
        "version-ext-colheader-license": "Licencia",
        "version-ext-colheader-description": "Popis",
        "specialpages-group-maintenance": "Údržbové správy",
        "specialpages-group-other": "Iné špeciálne stránky",
        "specialpages-group-login": "Prihlásenie / registrácia",
-       "specialpages-group-changes": "Posledné zmeny a záznamy",
+       "specialpages-group-changes": "Posledné úpravy a záznamy",
        "specialpages-group-media": "Správy o multimédiách a nahrávaniach",
        "specialpages-group-users": "Používatelia a skupiny",
        "specialpages-group-highuse": "Často používané stránky",
        "blankpage": "Prázdna stránka",
        "intentionallyblankpage": "Táto stránka je zámerne prázdna. Používa sa na meranie výkonnosti atď.",
        "external_image_whitelist": "  #Nechajte tento riadok presne tak, ako je<pre>\n#Časti regulárnych výrazov (tie, ktoré sa píšu medzi //) napíšte dolu\n#Budú porovnané s URL externých obrázkov\n#Tie, ktoré budú zodpovedať reg. výrazu sa zobrazia ako obrázky, inak sa zobrazí iba odkaz na obrázok\n#Riadky, ktoré začínajú znakom # sa považujú za komentáre\n#Na veľkosti písmen nezáleží\n\n#Napíšte všetky časti reg. výrazov nad tento riadok. Nechajte tento riadok presne tak, ako je</pre>",
-       "tags": "Platné označenia zmien",
+       "tags": "Platné značky úprav",
        "tag-filter": "Filter [[Special:Tags|značiek]]:",
        "tag-filter-submit": "Filter",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Značka|Značky}}]]: $2)",
        "tags-title": "Značky",
-       "tags-intro": "Táto stránka obsahuje zoznam značiek, s ktorým softvér môže pracovať a upravovať ich a ich význam.",
+       "tags-intro": "Táto stránka obsahuje zoznam a význam značiek, ktorými môže softvér označovať jednotlivé úpravy.",
        "tags-tag": "Názov značky",
        "tags-display-header": "Vzhľad v zoznamoch úprav",
-       "tags-description-header": "Úplný popis významu",
-       "tags-active-header": "Aktívny?",
-       "tags-hitcount-header": "OznaÄ\8dené Ãºpravy",
+       "tags-description-header": "Popis významu",
+       "tags-active-header": "Aktívna?",
+       "tags-hitcount-header": "OznaÄ\8dených Ãºprav",
        "tags-active-yes": "Áno",
        "tags-active-no": "Nie",
        "tags-edit": "upraviť",
-       "tags-hitcount": "$1 {{PLURAL:$1|zmena|zmeny|zmien}}",
+       "tags-hitcount": "$1 {{PLURAL:$1|úprava|úpravy|úprav}}",
        "comparepages": "Porovnať stránky",
        "compare-page1": "Stránka 1",
        "compare-page2": "Stránka 2",
        "htmlform-no": "Nie",
        "htmlform-yes": "Áno",
        "htmlform-chosen-placeholder": "Vyberte možnosť",
+       "htmlform-cloner-create": "Pridať ďalšie",
+       "htmlform-cloner-delete": "Odstrániť",
        "sqlite-has-fts": "$1 s podporou vyhľadávania v plnom texte",
        "sqlite-no-fts": "$1 bez podpory vyhľadávania v plnom texte",
        "logentry-delete-delete": "$1 zmazal stránku $3",
        "logentry-rights-rights-legacy": "$1 zmenil členstvo $3 v skupinách",
        "logentry-rights-autopromote": "$1 bol automaticky povýšený z $4 na $5",
        "rightsnone": "(žiadne)",
+       "revdelete-summary": "zhrnutie úprav",
        "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:",
        "expand_templates_remove_comments": "Odstrániť komentáre",
        "expand_templates_remove_nowiki": "Potlačiť značky <nowiki> vo výsledku",
        "expand_templates_generate_xml": "Zobraziť strom XML",
-       "expand_templates_preview": "Náhľad"
+       "expand_templates_preview": "Náhľad",
+       "pagelang-name": "Stránka",
+       "pagelang-language": "Jazyk",
+       "pagelang-use-default": "Použiť predvolený jazyk",
+       "pagelang-select-lang": "Vybrať jazyk",
+       "right-pagelang": "Zmeniť jazyk stránky",
+       "default-skin-not-found": "Uups! Základná tapeta pre Vašu wiki, popísanú v <code dir=\"ltr\">$wgDefaultSkin</code> ako <code>$1</code>, nie je dostupná. \n\nVaša inštalácia pravdepodobne obsahuje nasledovné tapety. Pozri [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pre viac informácii o ich aktivácii a zvoľte základnú.\n\n$2\n\n; Ak ste MediaWiki len teraz nainštalovali\n; Zrejme ste to nainštalovali z gitu alebo priamo zo zdrojového kódu inou metódou. Je to očakávané. Skúste nainštalovať nejaké tapety z [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory];\n:*Stiahnutím [https://www.mediawiki.org/wiki/Download tarball installer], ktorý ponúka viacero tapiet a rozšírení. Skopírovať a nalepiť možno priamo z <code>skins/</code>.\n:*Klonovanie jednej zo <code>mediawiki/skins/*</code> schránok cez git do <code dir=\"ltr\">skins/</code> priečinku Vašej Media Wiki inštalácie.\n: S existujúcou git schránkou, ak ste vývojár MediaWiki, by nemal byť konflikt.\n\n: Ak ste upgradeovali MediaWiki\n: MediaWiki 1.24 a novšie už tapety automaticky neaktivujú. (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Nasledovný kód môžete skopírovať do <code>LocalSettings.php</code> pre aktivovanie všetkých dostupných tapiet.\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ak ste upravili <code>LocalSettings.php</code>:\n: Skontrolujte chyby.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (povolený)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''zakázaný''')",
+       "mediastatistics": "Štatistika súborov",
+       "mediastatistics-table-count": "Počet súborov",
+       "mediastatistics-table-totalbytes": "Celková veľkosť",
+       "mediastatistics-header-unknown": "Neznáme",
+       "mediastatistics-header-bitmap": "Rastrové obrázky",
+       "mediastatistics-header-drawing": "Kresby (vektorové obrázky)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Videá",
+       "mediastatistics-header-multimedia": "Multimédiá",
+       "mediastatistics-header-office": "Kancelárske súbory",
+       "mediastatistics-header-text": "Text",
+       "mediastatistics-header-executable": "Spustiteľné súbory",
+       "mediastatistics-header-archive": "Komprimované formáty"
 }
index b650281..6e39183 100644 (file)
        "otherlanguages": "V drugih jezikih",
        "redirectedfrom": "(Preusmerjeno s strani $1)",
        "redirectpagesub": "Preusmeritvena stran",
+       "redirectto": "Preusmeritev na:",
        "lastmodifiedat": "Čas zadnje spremembe: $2, $1.",
        "viewcount": "Stran je bila naložena {{PLURAL:$1|$1-krat}}.",
        "protectedpage": "Zaščitena stran",
        "viewsourcetext": "Vsebino te strani si lahko ogledate in kopirate:",
        "viewyourtext": "Lahko si ogledate in kopirate vsebino '''vaših urejanj''' te strani:",
        "protectedinterface": "Prikazana stran vsebuje besedilo vmesnika programja na tem wikiju in je zaradi preprečevanja zlorab zaščitena.\n\nZa dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.",
-       "editinginterface": "'''Opozorilo:''' Urejate stran, ki vsebuje besedilo ali drug element uporabniškega vmesnika programja.\nSpremembe te strani bodo vplivale na podobo uporabniškega vmesnika ostalih uporabnikov na tem wikiju.\nZa dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.",
+       "editinginterface": "<strong>Opozorilo:</strong> Urejate stran, ki vsebuje besedilo ali drug element uporabniškega vmesnika programja.\nSpremembe te strani bodo vplivale na podobo uporabniškega vmesnika ostalih uporabnikov na tem wikiju.",
+       "translateinterface": "Za dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.",
        "cascadeprotected": "Ta stran je bila zaščitena pred urejanji, ker je vključena na {{PLURAL:$1|sledečo stran, ki je bila zaščitena|sledeči strani, ki sta bili zaščiteni|sledeče strani, ki so bile zaščitene}} z vključeno kaskadno možnostjo:\n$2",
        "namespaceprotected": "Za urejanje strani v imenskem prostoru '''$1''' nimate dovoljenja.",
        "customcssprotected": "Nimate pravice urejati te strani CSS, ker vsebuje osebne nastavitve drugega uporabnika.",
        "createaccount-text": "Nekdo je ustvaril račun $2 na {{GRAMMAR:dajalnik|{{SITENAME}}}} ($4). Geslo za »$2« je »$3«. Priporočljivo je, da se prijavite in spremenite svoje geslo sedaj.\n\nTo sporočilo lahko prezrete, če je bil račun ustvarjen pomotoma.",
        "login-throttled": "Nedavno ste izvedli preveč poskusov prijave.\nProsimo, počakajte $1, preden poskusite znova.",
        "login-abort-generic": "Vaša prijava ni bila uspešna – Prekinjeno",
+       "login-migrated-generic": "Vaš račun smo preselili in vaše uporabniško ime na tem wikiju ne obstaja več.",
        "loginlanguagelabel": "Jezik: $1",
        "suspicious-userlogout": "Vaša zahteva za odjavo je bila zavrnjena, saj kaže, da je bila poslana iz pokvarjenega brskalnika ali proxyja s predpomnilnikom.",
        "createacct-another-realname-tip": "Pravo ime ni obvezno.\nČe se ga odločite navesti, bo uporabljeno za priznavanje uporabnikovega dela.",
        "passwordreset-emailsent-capture": "Poslali smo e-pošto za ponastavitev gesla, ki je prikazana spodaj.",
        "passwordreset-emailerror-capture": "Ustvarili smo e-pošto za ponastavitev gesla, ki je prikazana spodaj, vendar pa pošiljanje {{GENDER:$2|uporabniku|uporabnici}} ni uspelo: $1",
        "changeemail": "Sprememba e-poštnega naslova",
-       "changeemail-header": "Sprememba e-poštnega naslova računa",
        "changeemail-text": "Izpolnite obrazec za spremembo vašega e-poštnega naslova. Za potrditev spremembe boste morali vnesti svoje geslo.",
        "changeemail-no-info": "Za neposredni dostop do strani morate biti prijavljeni.",
        "changeemail-oldemail": "Trenutni e-poštni naslov:",
        "changeemail-none": "(noben)",
        "changeemail-password": "Vaše geslo za {{GRAMMAR:tožilnik|{{SITENAME}}}}:",
        "changeemail-submit": "Spremeni e-naslov",
-       "changeemail-cancel": "Prekliči",
        "changeemail-throttled": "Izvedli ste preveč poskusov prijave.\nProsimo, počakajte $1, preden poskusite znova.",
        "resettokens": "Ponastavitev žetonov",
        "resettokens-text": "Žetone lahko ponastavite, kar omogoča dostop do nekaterih zasebnih podatkov, povezanih z vašim računom.\n\nTo storite, če ste po nesreči žetone z nekom delili, ali če je bil vaš račun ogrožen.",
        "showpreview": "Prikaži predogled",
        "showdiff": "Prikaži spremembe",
        "blankarticle": "<strong>Opozorilo:</strong> Stran, ki jo ustvarjate, je prazna.\nČe ponovno kliknete »{{int:savearticle}}«, bomo stran ustvarili brez kakršne koli vsebine.",
-       "anoneditwarning": "'''Opozorilo''': niste prijavljeni. V zgodovino strani se bo zapisal vaš IP-naslov.",
+       "anoneditwarning": "<strong>Opozorilo:</strong> Niste prijavljeni. Vaš IP-naslov bo javno viden, če naredite kakršno koli urejanje. Če se <strong>[$1 prijavite]</strong> ali <strong>[$2 ustvarite račun]</strong>, bodo vaša urejanja pripisana vašemu uporabniškemu imenu skupaj z drugimi prednostmi.",
        "anonpreviewwarning": "Niste prijavljeni. Ob spremembi strani se bo vaš IP-naslov zapisal v zgodovini urejanja te strani.",
        "missingsummary": "'''Opozorilo:''' Niste napisali povzetka urejanja. Ob ponovnem kliku gumba ''Shrani'' se bo vaše urejanje shranilo brez njega.",
        "missingcommenttext": "Prosimo, vpišite v spodnje polje komentar.",
        "content-model-text": "golo besedilo",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Strani s podvojenimi argumenti v klicih predlog",
+       "duplicate-args-category-desc": "Stran vsebuje klice predlog, ki vsebujejo dvojnike argumentov, kot sta <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ali <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Opozorilo:''' Ta stran vsebuje preveč klicev funkcije razčlenjevalnika kode.\n\nStran naj bi vsebovala manj kot $2 {{PLURAL:$2|klic|klica|klice|klicev}}, trenutno {{PLURAL:$1|je v uporabi $1 klic|sta v uporabi $1 klica|so v uporabi $1 klici|je v uporabi $1 klicev}}.",
        "expensive-parserfunction-category": "Strani s prevelikim številom klicev na funkcijo razčlenjevalnika kode",
        "post-expand-template-inclusion-warning": "'''Opozorilo:''' Velikost vključenih predlog je prevelika.\nNekatere predloge ne bodo prikazane.",
        "mergehistory-same-destination": "Izhodiščna in ciljna stran ne moreta imeti enak naslov",
        "mergehistory-reason": "Razlog:",
        "mergelog": "Dnevnik združevanj",
-       "pagemerge-logentry": "[[$1]] združen z/s [[$2]] (redakcije do $3)",
        "revertmerge": "Razdruži",
        "mergelogpagetext": "Prikazan je seznam nedavnih združevanj zgodovin strani.",
        "history-title": "$1: Zgodovina strani",
        "search-result-category-size": "$1 {{PLURAL:$1|član|člana|člani|članov}} ($1 {{PLURAL:$2|podkategorija|podkategoriji|podkategorije|podkategorij}}, $1 {{PLURAL:$3|datoteka|datoteki|datoteke|datotek}})",
        "search-redirect": "(preusmeritev $1)",
        "search-section": "(razdelek $1)",
+       "search-category": "(kategorija $1)",
        "search-file-match": "(ujema se z vsebino datoteke)",
        "search-suggest": "Iščete morda: $1",
        "search-interwiki-caption": "Sorodni projekti",
        "searchall": "vse",
        "showingresults": "Prikazujem do '''$1''' {{PLURAL:$1|zadetek|zadetka|zadetke|zadetkov}}, začenši s št. '''$2'''.",
        "showingresultsinrange": "Spodaj prikazujem {{PLURAL:$1|1=<strong>1</strong> rezultat|<strong>$1</strong> rezultata|<strong>$1</strong> rezultate|<strong>$1</strong> rezultatov}} v razponu od št. <strong>$2</strong> do št. <strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Zadetek '''$1''' od '''$3'''|Zadetki '''$1 - $2''' od skupno '''$3'''}} za povpraševanje '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Rezultat <strong>$1</strong> od <strong>$3</strong>|Rezultati <strong>$1–$2</strong> od <strong>$3</strong>}}",
        "search-nonefound": "Ni bilo zadetkov, ki ustrezajo poizvedbi.",
        "powersearch-legend": "Napredno iskanje",
        "powersearch-ns": "Iskanje v imenskih prostorih:",
        "gender-female": "Ona ureja wikistrani.",
        "prefs-help-gender": "Nastavitev ni obvezna.\nProgramje uporablja njeno vrednost za vaše naslavljanje in omenjanje v ustreznem slovničnem spolu.\nPodatek bo javno prikazan.",
        "email": "E-pošta",
-       "prefs-help-realname": "Pravo ime ni obvezno.\nČe se ga odločite navesti, bo uporabljeno za priznavanje vašega dela.",
+       "prefs-help-realname": "Pravo ime ni obvezno.\nČe ga navedete, ga bomo morda uporabili za priznavanje vašega dela.",
        "prefs-help-email": "E-poštni naslov ni obvezen, vendar omogoča, da vam v primeru pozabljenega gesla pošljemo novo.",
        "prefs-help-email-others": "Omogočite lahko tudi možnost, da vam lahko ostali uporabniki pošiljajo e-pošto prek vaše uporabniške ali pogovorne strani.\nKo vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo razkrili.",
        "prefs-help-email-required": "E-poštni naslov je obvezen.",
        "prefs-tokenwatchlist": "Žeton",
        "prefs-diffs": "Primerjave",
        "prefs-help-prefershttps": "Nastavitev bo začela veljati ob vaši naslednji prijavi.",
+       "prefswarning-warning": "V svojih nastavitvah ste naredili spremembe, ki jih še niste shranili. Če odidete s strani brez da bi kliknili »$1«, vaših nastavitev ne bomo posodobili.",
        "prefs-tabs-navigation-hint": "Namig: Za krmarjenje med zavihki na seznamu zavihkov lahko uporabite levo in desno smerno tipko.",
        "email-address-validity-valid": "E-poštni naslov je videti veljaven",
        "email-address-validity-invalid": "Vnesite veljaven e-poštni naslov",
        "statistics": "Statistika",
        "statistics-header-pages": "Statistika strani",
        "statistics-header-edits": "Statistika urejanj",
-       "statistics-header-views": "Statistika ogledov",
        "statistics-header-users": "Uporabniška statistika",
        "statistics-header-hooks": "Drugi statistični podatki",
        "statistics-articles": "Članki",
        "statistics-files": "Naložene datoteke",
        "statistics-edits": "Urejanja strani od postavitve {{GRAMMAR:rodilnik|{{SITENAME}}}}",
        "statistics-edits-average": "Povprečno število urejanj na stran",
-       "statistics-views-total": "Vseh ogledov",
-       "statistics-views-total-desc": "Ogledi neoobstoječih in posebnih strani niso vključeni",
-       "statistics-views-peredit": "Razmerje med ogledi in urejanji",
        "statistics-users": "Registrirani [[Special:ListUsers|uporabniki]]",
        "statistics-users-active": "Aktivni uporabniki",
        "statistics-users-active-desc": "Uporabniki, ki so izvedli dejanje v {{PLURAL:$1|zadnjem dnevu|zadnjih $1 dneh}}",
-       "statistics-mostpopular": "Strani z največ ogledi",
        "pageswithprop": "Strani z lastnostmi strani",
        "pageswithprop-legend": "Strani z lastnostmi strani",
        "pageswithprop-text": "Stran navaja vse strani, ki uporabljajo določene lastnosti strani.",
        "uncategorizedtemplates": "Nekategorizirane predloge",
        "unusedcategories": "Osirotele kategorije",
        "unusedimages": "Osirotele datoteke",
-       "popularpages": "Priljubljene strani",
        "wantedcategories": "Želene kategorije",
        "wantedpages": "Želene strani",
        "wantedpages-badtitle": "Neveljaven naslov v končnem nizu: $1",
        "pager-older-n": "{{PLURAL:$1|starejši|starejša|starejši|starejših}} $1",
        "suppress": "Nadzor",
        "querypage-disabled": "Ta posebna stran je onemogočena iz zmogljivostnih razlogov.",
+       "apihelp": "Pomoč za API",
+       "apihelp-no-such-module": "Modula »$1« nismo našli.",
        "booksources": "Viri knjig",
        "booksources-search-legend": "Išči knjižne vire",
-       "booksources-go": "Pojdi",
+       "booksources-search": "Išči",
        "booksources-text": "Sledi seznam povezav do drugi spletnih strani, ki prodajajo nove in rabljene knjige, in imajo morda nadaljnje informacije o knjigah, ki jih iščete:",
        "booksources-invalid-isbn": "Za dani ISBN se ne zdi, da je veljaven; preverite za morebitne napake pri kopiranju iz prvotnega vira.",
        "specialloguserlabel": "Izvajalec:",
        "wlheader-enotif": "Obveščanje po elektronski pošti je omogočeno.",
        "wlheader-showupdated": "Strani, spremenjene od vašega zadnjega ogleda, so prikazane '''krepko'''.",
        "wlnote": "{{PLURAL:$1|Navedena je zadnja|Navedeni sta zadnji|Navedene so zadnje|Navedenih je zadnjih}} <strong>$1</strong> {{PLURAL:$1|sprememba|spremembi|spremembe|sprememb}} v {{PLURAL:$2|zadnji <strong>$2</strong> uri|zadnjih <strong>$2</strong> urah}}, od $3, $4.",
-       "wlshowlast": "Prikaži zadnjih $1 ur; $2 dni; $3;",
+       "wlshowlast": "Prikaži zadnjih $1 ur; $2 dni",
        "watchlist-options": "Možnosti spiska nadzorov",
        "watching": "Nadziranje ...",
        "unwatching": "Nenadziranje ...",
        "protect-othertime": "Drugačen čas:",
        "protect-othertime-op": "drugačen čas",
        "protect-existing-expiry": "Obstoječ čas izteka: $3, $2",
+       "protect-existing-expiry-infinity": "Obstoječ čas izteka: neskončno",
        "protect-otherreason": "Drug/dodaten razlog:",
        "protect-otherreason-op": "Drug razlog",
        "protect-dropdown": "*Pogosti razlogi za zaščito\n** Prekomeren vandalizem\n** Vztrajno dodajanje reklamnih povezav\n** Neproduktivne urejevalske vojne\n** Zelo obiskana stran",
        "unblocked": "[[User:$1|$1]] je bil odblokiran",
        "unblocked-range": "$1 so odblokirani",
        "unblocked-id": "Blokada $1 je odstranjena",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] smo odblokirali.",
        "blocklist": "Blokirani uporabniki",
        "ipblocklist": "Blokirani uporabniki",
        "ipblocklist-legend": "Poišči blokiranega uporabnika",
        "tooltip-pt-mycontris": "Seznam vaših prispevkov",
        "tooltip-pt-login": "Prijava ni obvezna, vendar je zaželena",
        "tooltip-pt-logout": "Odjavite se",
+       "tooltip-pt-createaccount": "Predlagamo vam, da ustvarite račun in se prijavite, vendar pa to ni obvezno.",
        "tooltip-ca-talk": "Pogovor o strani",
        "tooltip-ca-edit": "Stran lahko uredite. Preden jo shranite, uporabite gumb za predogled.",
        "tooltip-ca-addsection": "Začnite novo razpravo",
        "tooltip-feed-atom": "Atom-vir strani",
        "tooltip-t-contributions": "Preglejte seznam uporabnikovih prispevkov",
        "tooltip-t-emailuser": "Pošljite uporabniku e-pismo",
+       "tooltip-t-info": "Več informacij o strani",
        "tooltip-t-upload": "Naložite slike ali predstavnostne datoteke",
        "tooltip-t-specialpages": "Preglejte seznam vseh posebnih strani",
        "tooltip-t-print": "Natisljiva različica strani",
        "pageinfo-robot-policy": "Robotsko indeksiranje",
        "pageinfo-robot-index": "Dovoljeno",
        "pageinfo-robot-noindex": "Nedovoljeno",
-       "pageinfo-views": "Število ogledov",
        "pageinfo-watchers": "Število spremljevalcev strani",
        "pageinfo-few-watchers": "Manj kot $1 {{PLURAL:$1|spremljevalec|spremljevalca|spremljevalci|spremljevalcev}}",
        "pageinfo-redirects-name": "Število preusmeritev na stran",
        "exif-urgency-low": "Nizko ($1)",
        "exif-urgency-high": "Visoko ($1)",
        "exif-urgency-other": "Uporabniško določena prednost ($1)",
-       "watchlistall2": "vse",
        "namespacesall": "vse",
        "monthsall": "vse",
        "confirmemail": "Potrditev naslova elektronske pošte",
        "unknown_extension_tag": "Neznana razširitvena etiketa »$1«",
        "duplicate-defaultsort": "'''Opozorilo:''' Privzeti ključ razvrščanja »$2« prepiše prejšnji privzeti ključ razvrščanja »$1«.",
        "duplicate-displaytitle": "<strong>Opozorilo:</strong> Prikazni naslov »$2« prepiše prejšnji prikazni naslov »$1«.",
+       "invalid-indicator-name": "<strong>Napaka:</strong> Atribut <code>name</code> indikatorjev stanja strani ne sme biti prazen.",
        "version": "Različica",
        "version-extensions": "Nameščene razširitve",
        "version-skins": "Nameščene kože",
        "revdelete-uname-unhid": "uporabniško ime je ponovno prikazano",
        "revdelete-restricted": "uveljavljene omejitve administratorjev",
        "revdelete-unrestricted": "odstranjene omejitve administratorjev",
+       "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-move-move_redir": "$1 je {{GENDER:$2|prestavil|prestavila|prestavil(-a)}} stran $3 na $4 prek preusmeritve",
        "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",
        "rightsnone": "(nobeno)",
+       "revdelete-summary": "povzetek urejanja",
        "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:",
        "api-error-stashfailed": "Notranja napaka: strežnik ni uspel shraniti začasne datoteke.",
        "api-error-publishfailed": "Notranja napaka: strežnik ni uspel objaviti začasne datoteke.",
        "api-error-stasherror": "Pri nalaganju datoteke v hrambo je prišlo do napake.",
+       "api-error-stashedfilenotfound": "Datoteke iz skrite shrambe med poskusom nalaganja iz skrite shrambe nismo našli.",
+       "api-error-stashpathinvalid": "Pot, na kateri naj bi bila datoteka iz skrite shrambe, ni veljavna.",
+       "api-error-stashfilestorage": "Pri shranjevanju datoteke v skrito shrambo je prišlo do napake.",
+       "api-error-stashzerolength": "Strežnik ni mogel dati datoteke v skrito shrambo, ker ima ničelno dolžino.",
+       "api-error-stashnotloggedin": "Da lahko shranite datoteke v skrito shrambo nalaganja, morate biti prijavljeni.",
+       "api-error-stashwrongowner": "Datoteka, do katere ste poskušali dostopati v skriti shrambi, ne pripada vam.",
+       "api-error-stashnosuchfilekey": "Datoteka, do katere ste poskušali dostopati v skriti shrambi, ne obstaja.",
        "api-error-timeout": "Strežnik se ni odzval v pričakovanem času.",
        "api-error-unclassified": "Prišlo je do neznane napake",
        "api-error-unknown-code": "Neznana napaka: »$1«",
        "log-name-pagelang": "Dnevnik spreminjanja jezika",
        "log-description-pagelang": "Dnevnik sprememb jezika strani.",
        "logentry-pagelang-pagelang": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} jezik strani $3 z jezika $4 na jezik $5.",
+       "default-skin-not-found": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nKot kaže, vaša namestitev vsebuje kože, navedene spodaj. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.\n\n$2\n\n; Če ste MediaWiki pravkar namestili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code>skins/</code>.\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code dir=\"ltr\">skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git.\n\n; Če ste MediaWiki pravkar posodobili:\n: MediaWiki 1.24 in novejši nameščenih kož več ne omogočijo samodejno (oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Priročnik: Samodejno odkrivanje kož]). V <code>LocalSettings.php</code> lahko prilepite naslednje vrstice, da omogočite trenutno nameščene kože:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Če ste pravkar spremenili <code>LocalSettings.php</code>:\n: Ponovno preverite imena kož, če ste se morda zatipkali.",
+       "default-skin-not-found-no-skins": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nNimate nameščenih kož.\n\n; Če ste MediaWiki pravkar namestili ali posodobili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. MediaWiki 1.24 in novejši nimajo vključene nobene kože v glavnem repozitoriju. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code dir=\"ltr\">skins/</code>.\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code>skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (omogočeno)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''onemogočeno''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''onemogočeno''')",
+       "mediastatistics": "Statistika predstavnosti",
+       "mediastatistics-summary": "Statistika o naloženih vrstah datotek. To vključuje samo najnovejše različice datotek. Stare in izbrisane različice niso vključene.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajta|$1 bajti|$1 bajtov}} ($2; $3 %)",
+       "mediastatistics-table-mimetype": "Vrsta MIME",
+       "mediastatistics-table-extensions": "Možne razširitve",
+       "mediastatistics-table-count": "Število datotek",
+       "mediastatistics-table-totalbytes": "Skupna velikost",
+       "mediastatistics-header-unknown": "Neznano",
+       "mediastatistics-header-bitmap": "Bitne slike",
+       "mediastatistics-header-drawing": "Risbe (vektorske slike)",
+       "mediastatistics-header-audio": "Zvok",
+       "mediastatistics-header-video": "Videoposnetki",
+       "mediastatistics-header-multimedia": "Obogatena predstavnost",
+       "mediastatistics-header-office": "Pisarna",
+       "mediastatistics-header-text": "Besedilno",
+       "mediastatistics-header-executable": "Izvedljive datoteke",
+       "mediastatistics-header-archive": "Stisnjene oblike",
+       "json-warn-trailing-comma": "Iz JSON-a smo odstranili $1 {{PLURAL:$1|končno vejico|končni vejici|končne vejice|končnih vejic}}",
+       "json-error-unknown": "Naleteli smo na težavo z JSON-om. Napaka: $1",
+       "json-error-depth": "Presegli smo največjo globino sklada",
+       "json-error-state-mismatch": "Neveljaven ali slabo oblikovan JSON",
+       "json-error-ctrl-char": "Napaka kontrolnega znaka; morda je nepravilno zakodiran",
+       "json-error-syntax": "Skladenjska napaka",
+       "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"
 }
index 3c0729d..da013e8 100644 (file)
        "mergehistory-comment": "„[[:$1]]“ vereinigt noach „[[:$2]]“: $3",
        "mergehistory-same-destination": "Ausgangs- und Zielseyte dirfa ne identisch sei",
        "mergehistory-reason": "Begriendung:",
-       "pagemerge-logentry": "vereinigte [[$1]] ei [[$2]] (Versionen bis $3)",
        "revertmerge": "Vereinigung rieckgängig macha",
        "mergelogpagetext": "Dies ies doas Logbuch dar vereinigta Versionsgeschichta.",
        "history-title": "Versionsgeschichte vun „$1“",
        "searchrelated": "verwandt",
        "searchall": "olle",
        "showingresults": "Hier {{PLURAL:$1|ies '''1''' Ergebnis|sein '''$1''' Ergebnisse}}, beginnend miet Nummer '''$2.'''",
-       "showingresultsheader": "{{PLURAL:$5|Ergebnis '''$1''' vu '''$3'''|Ergebnisse '''$1–$2''' vu '''$3'''}} fier '''$4'''",
        "search-nonefound": "Fier denne Sichoafroage wurden kenne Ergebnisse gefunda.",
        "powersearch-ns": "Suche ei Noamasräuma:",
        "powersearch-toggleall": "Olle",
        "statistics": "Statistik",
        "statistics-header-pages": "Seytastatistik",
        "statistics-header-edits": "Beoarbeetungsstatistik",
-       "statistics-header-views": "Seytauffrufstatistik",
        "statistics-header-hooks": "Andere Statistika",
        "statistics-articles": "Inhaltsseyta",
        "statistics-pages": "Seyta",
        "statistics-files": "Huchgeladene Dateien",
        "statistics-edits": "Seytabeoarbeetunga",
        "statistics-edits-average": "Bearbeetunga pro Seite eim Durchschnitt",
-       "statistics-views-total": "Seytaaufrufe gesamt",
-       "statistics-views-peredit": "Seyta uffruffe pro Beoarbeetung",
        "statistics-users": "Registrierte [[Special:ListUsers|Nutzer]]",
        "statistics-users-active-desc": "Nutzer miet Beoarbeetunga {{PLURAL:$1|enn letzta 24 Stunden|enn vergangenen $1 Tagen}}",
-       "statistics-mostpopular": "Meistbesichte Seyta",
        "doubleredirects": "Doppelte Weiterleitunga",
        "doubleredirectstext": "Diese Liste enthält Weiterleitunga, de uff wettere Wetterleitunga verlinka.\nJede Zeile enthält Links zu dar erschta und zweeta Wetterleitung suwie doas Ziel dar zweeta Wetterleitung, welches fier gewehnlich die gewünschte Zielseyte ies, uff de bereits de erschte Wetterleitung zeiga sullte.\n<del>Durchgestrichene</del> Einträge wurden bereits erledigt.",
        "double-redirect-fixed-move": "doppelte Wetterleitung uffgelest: [[$1]] → [[$2]]",
        "uncategorizedcategories": "Ne kategorisierte Kategorien",
        "uncategorizedimages": "Ne kategorisierte Dateien",
        "uncategorizedtemplates": "Ne kategorisierte Vurlagen",
-       "popularpages": "Beliebteste Seyta",
        "wantedcategories": "Nutzte, oaber ne oagelegte Kategorien",
        "wantedpages": "Gewinschte Seyta",
        "wantedfiles": "Fahlende Dateien",
        "pager-older-n": "{{PLURAL:$1|vurheriger|vurherige $1}}",
        "booksources": "ISBN-Suche",
        "booksources-search-legend": "Suche noach Bezugsquella fier Bicher",
-       "booksources-go": "Sucha",
        "booksources-text": "Dies ies anne Liste miet Links zu Internetseyta, de neue und gebrauchte Bicher verkoofa. Durt koan is au wettere Informationen ieber de Bicher gahn. {{SITENAME}} ies miet kemm dieser Oabieter geschäftlich verbunda.",
        "booksources-invalid-isbn": "Vermutlich ies de ISBN ungiltig.\nBitte priefe, ob korrekt vu dar Quelle iebertraga wurde.",
        "speciallogtitlelabel": "Tittel:",
        "wlheader-enotif": "Dar E-Mail-Benoachrichtigungsdienst ies aktiviert.",
        "wlheader-showupdated": "Seyta miet noo ne gesehenen Änderunga waan '''fett''' dargestellt.",
        "wlnote": "Is {{PLURAL:$1|folgt de letzte Änderung|folga de letzta '''$1''' Änderunga}} dar letzta {{PLURAL:$2|Stunde|'''$2''' Stunda}}.",
-       "wlshowlast": "Zeige de Änneronga dar letzta $1 Stonda, $2 Taage oder $3.",
+       "wlshowlast": "Zeige de Änneronga dar letzta $1 Stonda, $2 Taage oder .",
        "watchlist-options": "Oazeegeoptiona",
        "watching": "Beobachta …",
        "unwatching": "Nee beobachta …",
        "thumbnail_image-type": "Bildtyp ne understützt",
        "import": "Seyta importiern",
        "import-interwiki-text": "Wähle a Wiki und anne Seite zum Importieren aus.\nDe Versionsdaten und Nutzernoama bleiba dabei erhaala.\nOlle Transwiki-Import-Aksjonna waan eim [[Special:Log/import|Import-Logbuch]] protokolliert.",
-       "import-interwiki-source": "Quell-Wiki/-Seite:",
        "import-interwiki-history": "Olle Versionen dieser Seite importieren",
        "import-interwiki-templates": "Olle Vurloaga einschließen",
        "import-interwiki-namespace": "Zielnoamasraum:",
        "exif-sharpness-2": "Stork",
        "exif-subjectdistancerange-0": "Unbekennt",
        "exif-gpsstatus-v": "Interoperabilität vu Messunga",
-       "watchlistall2": "olle",
        "namespacesall": "olle",
        "monthsall": "olle",
        "confirmemail": "E-Mail-Atresse bestätiga (Authentifizierung)",
        "htmlform-reset": "Änderunga rickgängig macha",
        "htmlform-selectorother-other": "Ondere",
        "revdelete-restricted": "Einschränkungen gelten au fier Administratorn",
-       "revdelete-unrestricted": "Einschränkungen fier Administratorn uffgehobn"
+       "revdelete-unrestricted": "Einschränkungen fier Administratorn uffgehobn",
+       "revdelete-summary": "Zusommafoassungskommentar"
 }
index 33411fb..3f9eaf3 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "sm.wikipedia.org sysops"
-        ]
-    },
-    "sunday": "Aso sa",
-    "monday": "Aso-gafua",
-    "tuesday": "‘O le aso lua",
-    "wednesday": "Aso lulu",
-    "thursday": "Aso totofi",
-    "friday": "Aso falaile",
-    "saturday": "Aso to‘ona‘i",
-    "sun": "Aso sa",
-    "mon": "Aso gafua",
-    "wed": "Aso lulu",
-    "fri": "Aso falaile",
-    "january": "Ianuari",
-    "february": "Fepuari",
-    "march": "Mati",
-    "april": "Aperila",
-    "may_long": "Me",
-    "june": "Iuni",
-    "july": "Iulai",
-    "august": "Aokuso",
-    "september": "Setema",
-    "october": "Oketopa",
-    "november": "Novema",
-    "december": "Tesema",
-    "january-gen": "Ianuari",
-    "february-gen": "Fepuari",
-    "march-gen": "Mati",
-    "april-gen": "Aperila",
-    "may-gen": "Me",
-    "june-gen": "Iuni",
-    "july-gen": "Iulai",
-    "august-gen": "Aokuso",
-    "september-gen": "Setema",
-    "october-gen": "Oketopa",
-    "november-gen": "Novema",
-    "december-gen": "Tesema",
-    "jan": "Ianuari",
-    "feb": "Fepuari",
-    "mar": "Mati",
-    "apr": "Aperila",
-    "may": "Me",
-    "jun": "Iuni",
-    "jul": "Iulai",
-    "aug": "Aokuso",
-    "sep": "Setema",
-    "oct": "Oketopa",
-    "nov": "Novema",
-    "dec": "Tesema",
-    "cancel": "Toe tape",
-    "mytalk": "La'u talanoa",
-    "navigation": "Ulifolau",
-    "help": "Fesoasoani",
-    "search": "Su'e",
-    "searchbutton": "Su'e",
-    "go": "Alu",
-    "searcharticle": "Alu",
-    "history_short": "Tala fa'asolopito",
-    "printableversion": "Kopi e lolomi",
-    "permalink": "So'otaga tumau",
-    "print": "Lolomi",
-    "edit": "Teuteu",
-    "delete": "Tape",
-    "protect": "Puipui",
-    "unprotect": "'Aua le Puipuia",
-    "specialpage": "Itulau fa'apitoa",
-    "talk": "Talanoaga",
-    "toolbox": "Meafaigaluega",
-    "otherlanguages": "I isi gagana",
-    "jumptonavigation": "Ulifolau",
-    "jumptosearch": "Su'e",
-    "currentevents": "Tala Fou",
-    "currentevents-url": "Project:Tala Fou",
-    "edithelp": "Fesoasoani e teuteu",
-    "mainpage": "Itulau Muamua",
-    "mainpage-description": "Itulau Muamua",
-    "portal": "Vaega mo Tagata Lautele",
-    "portal-url": "Project:Vaega mo Tagata Lautele",
-    "youhavenewmessages": "'Ua iai lau $1 ($2).",
-    "youhavenewmessagesmulti": "'Ua iai au fe'au fou i le $1",
-    "editsection": "Teuteu",
-    "editold": "Teuteu",
-    "nstab-main": "Tusitusiga",
-    "nstab-user": "Itulau a 'oe",
-    "nstab-mediawiki": "Fe'au",
-    "yourname": "Igoa o le tagata fa'aaoga",
-    "yourpassword": "'Upu ulufale",
-    "yourpasswordagain": "Toe lolomi 'upu ulufale",
-    "login": "Fa'aola",
-    "userlogin": "Fa'aola / Lesitala le ulufale",
-    "logout": "Tape",
-    "userlogout": "Tape",
-    "notloggedin": "Le'i fa'aolaina",
-    "nologinlink": "Lesitala le ulufale",
-    "createaccount": "Lesitala le ulufale",
-    "gotaccountlink": "Fa'aola",
-    "summary": "'Oto'otoga:",
-    "minoredit": "'O se teuteuga la'itiiti lenei",
-    "watchthis": "Matau lenei itulau",
-    "savearticle": "Sefe le itulau",
-    "showpreview": "Fa'aali teuteuga",
-    "showdiff": "Fa'aali suiga",
-    "loginreqlink": "Fa'aola",
-    "mypreferences": "Mea 'ou te fiafia i ai",
-    "searchresultshead": "Su'e",
-    "youremail": "'Imeli:",
-    "username": "Igoa o le tagata fa'aaoga:",
-    "email": "'Imeli",
-    "group-all": "(mea 'uma)",
-    "recentchanges": "Suiga talu ai nei",
-    "hist": "Tala fa'asolopito",
-    "recentchangeslinked": "Suiga e a'afia ai",
-    "upload": "Si'i mai le faila",
-    "uploadbtn": "Si'i mai le faila",
-    "uploadnologin": "Le'i fa'aolaina",
-    "filedesc": "'Oto'otoga",
-    "fileuploadsummary": "'Oto'otoga:",
-    "watchthisupload": "Matau lenei itulau",
-    "randompage": "Itulau le fa'ailogaina",
-    "newpages-username": "Igoa o le tagata fa'aaoga:",
-    "move": "Si'itia",
-    "booksources-go": "Alu",
-    "allpagessubmit": "Alu",
-    "emailuser": "'Imeli mai le tagata lenei",
-    "emailmessage": "Fe'au",
-    "watchlist": "Lo'u lisi va'ava'aia",
-    "watchnologin": "Le'i fa'aolaina",
-    "watch": "Va'ai",
-    "watchthispage": "Matau lenei itulau",
-    "restriction-move": "Si'itia",
-    "undelete-search-submit": "Su'e",
-    "contributions": "Sao a tagata fa'aaoga",
-    "mycontris": "'O la'u saoga",
-    "whatlinkshere": "Nofoaga e soso'o mai",
-    "move-page-legend": "Si'i le itulau",
-    "movearticle": "Si'i le itulau",
-    "newtitle": "'I le ulutala fou",
-    "move-watch": "Matau lenei itulau",
-    "movepagebtn": "Si'i le itulau",
-    "movetalk": "Sui le itulau e tau i ai",
-    "movereason": "Mafua'aga",
-    "allmessagesname": "Igoa",
-    "ilsubmit": "Su'e",
-    "watchlistall2": "mea 'uma",
-    "namespacesall": "mea 'uma",
-    "imgmultigo": "Alu!",
-    "table_pager_limit_submit": "Alu",
-    "specialpages": "Itulau fa'apitoa"
+       "@metadata": {
+               "authors": [
+                       "sm.wikipedia.org sysops"
+               ]
+       },
+       "sunday": "Aso sa",
+       "monday": "Aso-gafua",
+       "tuesday": "‘O le aso lua",
+       "wednesday": "Aso lulu",
+       "thursday": "Aso totofi",
+       "friday": "Aso falaile",
+       "saturday": "Aso to‘ona‘i",
+       "sun": "Aso sa",
+       "mon": "Aso gafua",
+       "wed": "Aso lulu",
+       "fri": "Aso falaile",
+       "january": "Ianuari",
+       "february": "Fepuari",
+       "march": "Mati",
+       "april": "Aperila",
+       "may_long": "Me",
+       "june": "Iuni",
+       "july": "Iulai",
+       "august": "Aokuso",
+       "september": "Setema",
+       "october": "Oketopa",
+       "november": "Novema",
+       "december": "Tesema",
+       "january-gen": "Ianuari",
+       "february-gen": "Fepuari",
+       "march-gen": "Mati",
+       "april-gen": "Aperila",
+       "may-gen": "Me",
+       "june-gen": "Iuni",
+       "july-gen": "Iulai",
+       "august-gen": "Aokuso",
+       "september-gen": "Setema",
+       "october-gen": "Oketopa",
+       "november-gen": "Novema",
+       "december-gen": "Tesema",
+       "jan": "Ianuari",
+       "feb": "Fepuari",
+       "mar": "Mati",
+       "apr": "Aperila",
+       "may": "Me",
+       "jun": "Iuni",
+       "jul": "Iulai",
+       "aug": "Aokuso",
+       "sep": "Setema",
+       "oct": "Oketopa",
+       "nov": "Novema",
+       "dec": "Tesema",
+       "cancel": "Toe tape",
+       "mytalk": "La'u talanoa",
+       "navigation": "Ulifolau",
+       "help": "Fesoasoani",
+       "search": "Su'e",
+       "searchbutton": "Su'e",
+       "go": "Alu",
+       "searcharticle": "Alu",
+       "history_short": "Tala fa'asolopito",
+       "printableversion": "Kopi e lolomi",
+       "permalink": "So'otaga tumau",
+       "print": "Lolomi",
+       "edit": "Teuteu",
+       "delete": "Tape",
+       "protect": "Puipui",
+       "unprotect": "'Aua le Puipuia",
+       "specialpage": "Itulau fa'apitoa",
+       "talk": "Talanoaga",
+       "toolbox": "Meafaigaluega",
+       "otherlanguages": "I isi gagana",
+       "jumptonavigation": "Ulifolau",
+       "jumptosearch": "Su'e",
+       "currentevents": "Tala Fou",
+       "currentevents-url": "Project:Tala Fou",
+       "edithelp": "Fesoasoani e teuteu",
+       "mainpage": "Itulau Muamua",
+       "mainpage-description": "Itulau Muamua",
+       "portal": "Vaega mo Tagata Lautele",
+       "portal-url": "Project:Vaega mo Tagata Lautele",
+       "youhavenewmessages": "'Ua iai lau $1 ($2).",
+       "youhavenewmessagesmulti": "'Ua iai au fe'au fou i le $1",
+       "editsection": "Teuteu",
+       "editold": "Teuteu",
+       "nstab-main": "Tusitusiga",
+       "nstab-user": "Itulau a 'oe",
+       "nstab-mediawiki": "Fe'au",
+       "yourname": "Igoa o le tagata fa'aaoga",
+       "yourpassword": "'Upu ulufale",
+       "yourpasswordagain": "Toe lolomi 'upu ulufale",
+       "login": "Fa'aola",
+       "userlogin": "Fa'aola / Lesitala le ulufale",
+       "logout": "Tape",
+       "userlogout": "Tape",
+       "notloggedin": "Le'i fa'aolaina",
+       "nologinlink": "Lesitala le ulufale",
+       "createaccount": "Lesitala le ulufale",
+       "gotaccountlink": "Fa'aola",
+       "summary": "'Oto'otoga:",
+       "minoredit": "'O se teuteuga la'itiiti lenei",
+       "watchthis": "Matau lenei itulau",
+       "savearticle": "Sefe le itulau",
+       "showpreview": "Fa'aali teuteuga",
+       "showdiff": "Fa'aali suiga",
+       "loginreqlink": "Fa'aola",
+       "mypreferences": "Mea 'ou te fiafia i ai",
+       "searchresultshead": "Su'e",
+       "youremail": "'Imeli:",
+       "username": "Igoa o le tagata fa'aaoga:",
+       "email": "'Imeli",
+       "group-all": "(mea 'uma)",
+       "recentchanges": "Suiga talu ai nei",
+       "hist": "Tala fa'asolopito",
+       "recentchangeslinked": "Suiga e a'afia ai",
+       "upload": "Si'i mai le faila",
+       "uploadbtn": "Si'i mai le faila",
+       "uploadnologin": "Le'i fa'aolaina",
+       "filedesc": "'Oto'otoga",
+       "fileuploadsummary": "'Oto'otoga:",
+       "watchthisupload": "Matau lenei itulau",
+       "randompage": "Itulau le fa'ailogaina",
+       "newpages-username": "Igoa o le tagata fa'aaoga:",
+       "move": "Si'itia",
+       "allpagessubmit": "Alu",
+       "emailuser": "'Imeli mai le tagata lenei",
+       "emailmessage": "Fe'au",
+       "watchlist": "Lo'u lisi va'ava'aia",
+       "watchnologin": "Le'i fa'aolaina",
+       "watch": "Va'ai",
+       "watchthispage": "Matau lenei itulau",
+       "restriction-move": "Si'itia",
+       "undelete-search-submit": "Su'e",
+       "contributions": "Sao a tagata fa'aaoga",
+       "mycontris": "'O la'u saoga",
+       "whatlinkshere": "Nofoaga e soso'o mai",
+       "move-page-legend": "Si'i le itulau",
+       "movearticle": "Si'i le itulau",
+       "newtitle": "'I le ulutala fou",
+       "move-watch": "Matau lenei itulau",
+       "movepagebtn": "Si'i le itulau",
+       "movetalk": "Sui le itulau e tau i ai",
+       "movereason": "Mafua'aga",
+       "allmessagesname": "Igoa",
+       "ilsubmit": "Su'e",
+       "namespacesall": "mea 'uma",
+       "imgmultigo": "Alu!",
+       "table_pager_limit_submit": "Alu",
+       "specialpages": "Itulau fa'apitoa"
 }
index 1a8edef..4d477e9 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Andrijko Z.",
-            "Bïerne",
-            "M.M.S.",
-            "Urhixidur"
-        ]
-    },
-    "tog-showtoolbar": "Dïrregesïeve vuesehth (JavaScript)",
-    "tog-fancysig": "Saajpe singnatuvreh (namhtah jïjtsistie lïenghke)",
-    "underline-always": "Iktesth",
-    "underline-never": "Aaltere",
-    "sunday": "Aejlege",
-    "monday": "Måanta",
-    "tuesday": "Däjsta",
-    "wednesday": "Gaske-våhkoe",
-    "thursday": "Dåarsta",
-    "friday": "Bearjedh",
-    "saturday": "Laavadahke",
-    "sun": "Aej",
-    "mon": "Måa",
-    "tue": "Däj",
-    "wed": "Gas",
-    "thu": "Dåa",
-    "fri": "Bea",
-    "sat": "Laa",
-    "january": "tsiengele",
-    "february": "goevte",
-    "march": "njoktje",
-    "april": "Voerhtje",
-    "may_long": "Suehpede",
-    "june": "Ruffie",
-    "july": "Snjaltje",
-    "august": "Mïetske",
-    "september": "Gaekere",
-    "october": "Golke",
-    "november": "Rahka",
-    "december": "Goeve",
-    "january-gen": "Tsiengele",
-    "february-gen": "Goevte",
-    "march-gen": "Njoktje",
-    "april-gen": "Voerhtje",
-    "may-gen": "Suehpede",
-    "june-gen": "Ruffie",
-    "july-gen": "Snjaltje",
-    "august-gen": "Mïetske",
-    "september-gen": "Gaekere",
-    "october-gen": "Golke",
-    "november-gen": "Rahka",
-    "december-gen": "Goeve",
-    "jan": "Tsi",
-    "feb": "Goe",
-    "mar": "Njo",
-    "apr": "Voe",
-    "may": "Sue",
-    "jun": "Ruf",
-    "jul": "Snj",
-    "aug": "Mïe",
-    "sep": "Gae",
-    "oct": "Gol",
-    "nov": "Rah",
-    "dec": "Goe",
-    "pagecategories": "{{PLURAL:$1|Kategorije|Kategorijeh}}",
-    "category_header": "Bielie sïjse kategorije \"$1\"",
-    "subcategories": "Subkategorijeh",
-    "category-media-header": "Guvvie sïjse karegorije \"$1\"",
-    "category-empty": "''Dïhte kategorije sisvege ijje bielieh jallh baalkah.''",
-    "listingcontinuesabbrev": "jåar.",
-    "about": "Bïjre",
-    "article": "Sisvege bielie",
-    "newwindow": "(geehpehtidh sïjse orre klaase)",
-    "cancel": "Orrijidh",
-    "moredotdotdot": "Jienebe...",
-    "mypage": "Mov bielie",
-    "mytalk": "Mov dïjveldidh",
-    "anontalk": "Dïjveldidh ihke dïhte IP",
-    "navigation": "Navigasjovne",
-    "and": "&#32;jih",
-    "qbfind": "Gaavnedh",
-    "qbedit": "Värrhtoedimmie",
-    "qbpageoptions": "Dïhte bielie",
-    "qbmyoptions": "Mov bielieh",
-    "faq": "FAQ",
-    "faqpage": "Project:FAQ",
-    "errorpagetitle": "Båajhtode",
-    "returnto": "Bååstide gåajkoe $1.",
-    "tagline": "{{SITENAME}}sta",
-    "help": "Viehkie",
-    "search": "Ohtsedh",
-    "searchbutton": "Ohtsedh",
-    "go": "Vaadtsa",
-    "searcharticle": "Vaadtsa",
-    "history": "Histovrije",
-    "history_short": "Histovrije",
-    "printableversion": "Tjaelije bielie",
-    "permalink": "Permanente lïenghke",
-    "print": "Tjaeledh olkese",
-    "edit": "Sjiehtedh",
-    "editthispage": "Värrhtoedimmie dïhte bielie",
-    "delete": "Tjåegkedh",
-    "protect": "Vaarjelidh",
-    "protectthispage": "Vaarjelidh dïhte bielie",
-    "newpage": "Orre bielie",
-    "talkpage": "Dïjveldidh dïhte bielie",
-    "talkpagelinktext": "Digkiedimmie",
-    "specialpage": "Joekoelaakan Bielie",
-    "personaltools": "Persjovne dïrregeh",
-    "articlepage": "Vuesehte artihkle bielie",
-    "talk": "Dïjveldeme",
-    "views": "Vuesehth",
-    "toolbox": "Dïrregeborhtje",
-    "userpage": "Vuesehte nuhtjienbielie",
-    "projectpage": "Vuesehte Wikipedijebielie",
-    "imagepage": "Vuesehte guvvie bielie",
-    "templatepage": "Vuesehte maale bielie",
-    "viewhelppage": "Vuesehte viehkie bielie",
-    "categorypage": "Vuesehte kategorije bielie",
-    "viewtalkpage": "Vuesehte dïjveldidh",
-    "otherlanguages": "jeatjebh gïele",
-    "redirectedfrom": "(Bïjre-dirisjovne raejeste $1)",
-    "redirectpagesub": "Bïjre-dirisjovne bielie",
-    "protectedpage": "Vaarjelidh bielie",
-    "jumpto": "Vaadtsa gåajkoe:",
-    "jumptonavigation": "navigasjovne",
-    "jumptosearch": "ohtsedh",
-    "aboutsite": "{{SITENAME}}en bïjre",
-    "aboutpage": "Project:Bïjre",
-    "copyrightpage": "{{ns:project}}:Bäjjesereaktah",
-    "currentevents": "Daaletje deahpadimmieh",
-    "currentevents-url": "Project:Daaletje deahpadimmieh",
-    "disclaimers": "Friijavuohte vastideamis",
-    "disclaimerpage": "Project:Bäjjesereaktah",
-    "edithelp": "Sjiehtedimmie viehkie",
-    "mainpage": "Aalkoebielie",
-    "mainpage-description": "Aalkoebielie",
-    "portal": "Meatan portaale",
-    "portal-url": "Project:Meatan portaale",
-    "privacy": "Privaate pålisy",
-    "privacypage": "Project:Privaate pålisy",
-    "retrievedfrom": "Raejeste \"$1\" vïedtjeme",
-    "youhavenewmessages": "Datne åtna $1 ($2).",
-    "editsection": "sjïehtedh",
-    "editold": "värrhtoedimmie",
-    "editsectionhint": "Sektiovne sjiehtedh: $1",
-    "toc": "Sisvege",
-    "showtoc": "vuesehte",
-    "hidetoc": "gaptjedh",
-    "viewdeleted": "Vuesehte $1?",
-    "site-rss-feed": "$1 RSS Feed",
-    "site-atom-feed": "$1 Atom Feed",
-    "page-rss-feed": "\"$1\" RSS Feed",
-    "page-atom-feed": "\"$1\" Atom Feed",
-    "nstab-main": "Bielie",
-    "nstab-user": "Nuhtjien bielie",
-    "nstab-media": "Guvvie",
-    "nstab-special": "Joekoelaakan",
-    "nstab-project": "Prosjekte bielie",
-    "nstab-image": "Baalka",
-    "nstab-mediawiki": "MediaWiki",
-    "nstab-template": "Maale",
-    "nstab-help": "Viehke bielie",
-    "nstab-category": "Kategorije",
-    "error": "Båajhtode",
-    "databaseerror": "Daatabaase båajhtode",
-    "readonly": "Daatabaase steegkeldahkesne",
-    "internalerror": "Sjisjnjie båajhtede",
-    "internalerror_info": "Sjisjnjie båajhtede: $1",
-    "badtitle": "Gååre nomme",
-    "badtitletext": "Dïhte bielietiitele lea nov sån ijje luhpede, bielie lea gåaroes, jallh lea bielie gåarhmede lïenghke gåajkoe.",
-    "viewsource": "Vuesehte tjaalege",
-    "viewsourcetext": "Dov dorje vuesehte jih kåpieerae gaaltjie dejstie dïhte bielie:",
-    "yourname": "Nuhtjiennomme:",
-    "yourpassword": "Loevesbaakoe:",
-    "remembermypassword": "Måjhtije mov loggesïjse nille dïhte daatovre (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "yourdomainname": "Dov domäne:",
-    "login": "Logge sïjse",
-    "nav-login-createaccount": "Logge sïjse / skaepede nuhtjien",
-    "loginprompt": "Dov galkedh luhpede cookies ihke logge sïjse nille {{SITENAME}}.",
-    "userlogin": "Logge sïjse / skaepede nuhtjien",
-    "logout": "Logge olkese",
-    "userlogout": "Logge ålkone",
-    "nologin": "Lea dov ijje registreered? '''$1'''.",
-    "nologinlink": "Skaepede nuhtjien",
-    "createaccount": "Skaepede nuhtjien",
-    "gotaccount": "Åtna dov joe nuhtjiennomme? '''$1'''.",
-    "gotaccountlink": "Logge sïjse",
-    "createaccountmail": "meatan e-påaste",
-    "loginerror": "Logge sïjse båajhtode",
-    "loginsuccesstitle": "Dov lea daelie sïjse logge",
-    "loginsuccess": "'''Dov lea daelie sïjselogge nille {{SITENAME}} goh \"$1\".'''",
-    "nosuchuser": "Dïhte gååvnese ijje nuhtjien goh nomme \"$1\". Gïehtjedidh dov baakoehtidh, jallh skaepede orre nuhtjien.",
-    "nosuchusershort": "Dïhte gååvnese ijje nuhtjien goh nomme \"$1\". Gïehtjedidh baakoehtidh.",
-    "nouserspecified": "Dov galkedh tjaeledh nuhtjiennomme.",
-    "wrongpassword": "Loevesbaakoe lea gåarhmede. Vuejnedh vihth.",
-    "wrongpasswordempty": "Loevesbaakoe lea gåaroes. Vuejnedh vihth.",
-    "passwordtooshort": "Dov loevesbaakoe lea ov-jiltighe jallh ihke åenehks. Dïhte galkedh åtna unnemes $1 vähta jih sjädta jeatjebe raejeste dov nuhtjiennomme.",
-    "mailmypassword": "E-påaste loevesbaakoe",
-    "passwordremindertitle": "Orre loevesbaakoe ihke {{SITENAME}}",
-    "noemail": "Dïhte lea ijje e-påaste tjaalesijjie registreeredh ihke nuhtjien \"$1\".",
-    "passwordsent": "Orre loevesbaakoe åtna sjädta seedtie gåajkoe e-påaste tjaalesijjie\nregistreered ihke \"$1\".\nGïemhpes logge sïjse vihth männgan datne åtna låhka dïhte.",
-    "accountcreated": "Nuhtjien skaepede",
-    "loginlanguagelabel": "Gïele: $1",
-    "changepassword": "Värrhtoedimmie loevesbaakoe",
-    "oldpassword": "Båeries loevesbaakoe:",
-    "newpassword": "Orre loevesbaakoe:",
-    "retypenew": "Odhasit orre loevesbaakoe:",
-    "bold_sample": "Buajtehks tjaalege",
-    "bold_tip": "Buajtehks tjaalege",
-    "italic_sample": "Kursiive tjaalege",
-    "italic_tip": "Kursiive tjaalege",
-    "link_sample": "Lïenghke tiitele",
-    "link_tip": "Sjisjnjie lïenghke",
-    "extlink_sample": "http://www.example.com lïenghke tiitele",
-    "extlink_tip": "Ehkstäärne lïenghke (måjhtajidh http:// prefihkse)",
-    "headline_sample": "Rubriike tjaalege",
-    "headline_tip": "Daltese 2 rubriike",
-    "nowiki_sample": "Bïejedh ijje-hammode tjaalege daesnie",
-    "nowiki_tip": "Rievdde wikïhammode",
-    "image_tip": "Lååtje guvvie",
-    "media_tip": "Meedia baalka lïenghke",
-    "sig_tip": "Dov signatuvre meatan tïjjestäämpele",
-    "hr_tip": "Horisontele sïeve (nuhtjie bïhteles-laakan)",
-    "summary": "Tjohkehtehteme:",
-    "subject": "Ïebne/rubriike:",
-    "minoredit": "Dïhte lea ohtje värrhtoedimmie",
-    "watchthis": "Sïektjedh dïhte bielie",
-    "savearticle": "Spååredh bielie",
-    "preview": "Åvte-vuesiehtidh",
-    "showpreview": "Vuesehte åvte-vuesiehtidh",
-    "showdiff": "Vuesehte värrhtoedimmie",
-    "anoneditwarning": "'''Vaaroehtidh:''' Dov lea ijje logge sïjse. Dov IP tjaalesijjie båetedh spååredh sïjse dïhte bielie värrhtoedimmie histovrije.",
-    "summary-preview": "Tjohkehtehteme åvte-vuesiehtidh:",
-    "loginreqlink": "logge sïjse",
-    "loginreqpagetext": "Dov galkedh $1 ihke vuesehte jeatjebh bielieh.",
-    "accmailtitle": "Loevesbaakoe seedtie.",
-    "accmailtext": "Loevesbaakoe ihke ”$1” utnedh seedtedh gåajkoe $2.",
-    "newarticle": "(Orre)",
-    "noarticletext": "Dïhte lea daelie ijje tjaalege sïjse dïhte bielie, dov dorje [[Special:Search/{{PAGENAME}}|ohtsedh ihke dïhte bielie nomme]] sïjse jeatjebh bielieh jallh [{{fullurl:{{FULLPAGENAME}}|action=edit}} värrhtoedimmie dïhte bielie].",
-    "usercssyoucanpreview": "'''Tiipse:''' Nuhtjie 'Vuesehte åvte-vuesiehtidh' båaloe ihke pryövoe dov orre CSS åvte spååredh.",
-    "userjsyoucanpreview": "'''Tiipse:''' Nuhtjie 'Vuesehte åvte-vuesiehtidh' båaloe ihke pryövoe dov orre JS åvte spååredh.",
-    "updated": "(Orrestahteme)",
-    "note": "'''Galtege:'''",
-    "previewnote": "'''Dïhte lea aktegh åvte-vuesiehtidh; värrhtoedimmieh ånta ijje sjïdtedh spååredh!'''",
-    "editing": "Sjiehtedimmie $1",
-    "editingsection": "Värrhtoedimmie $1 (sektiovne)",
-    "yourtext": "Dov tjaalege",
-    "copyrightwarning": "Tjaeleste gaajhke värrhtoedimmieh gåajkoe {{SITENAME}} lea ahte gïehtjele goh maam buektedh nuelesne $2 (vuajna $1 ihke detaaljeh). Bïjre datne ijje sïjhtedh dov tjaalege galka värrhtoedimmieh jallh kåpieeres minngesne jeatjebh daerpies voete, galka datne ijje tjaala daesnie.<br />\nDatne luhpede mijjieh aaj datne tjaala tjaalege jïjtje, jallh kåpieeret raejeste gaaltjie goh ijje vaarjele dejstie bäjjesereaktah, jallh plïerehke.<br />\n'''LISSEHTE IJJE OLKESE BÄJJESEREAKTAHVAARJELE ÏEBNE NAMHTAH LUHPIE!'''",
-    "templatesused": "{{PLURAL:$1|Maal|Maler}}Maaleh nuhtjie nille dïhte bielie:",
-    "templatesusedpreview": "{{PLURAL:$1|Maal|Maaleh}} nuhtjie sïjse dïhte åvte-vuesiehtidh:",
-    "template-protected": "(vaarjeleme)",
-    "template-semiprotected": "(lehkie-vaarjelidh)",
-    "nocreatetext": "{{SITENAME}} åtna gaertjiedidh nuepieh ahte skaepede orre bielieh.\nDov dorje värrhtoedimmie gååvnese bielieh, jallh [[Special:UserLogin|logge sïjse jallh skaepede nuhtjien]].",
-    "viewpagelogs": "Vuesehte loggeh ihke dïhte bielie",
-    "currentrev": "Daaletje gïehtjedamme",
-    "revisionasof": "Gïehtjedamme ihke $1",
-    "revision-info": "Gïehtjedamme raejeste dïhte $1; $2",
-    "previousrevision": "←Båarasåabpoe gïehtjedamme",
-    "nextrevision": "Minngebe gïehtjedamme→",
-    "currentrevisionlink": "Daaletje gïehtjedamme",
-    "cur": "daaletje",
-    "next": "minngebe",
-    "last": "minngemes",
-    "page_first": "voestegh",
-    "page_last": "minngemes",
-    "histfirst": "Aareh",
-    "histlast": "Minngemes",
-    "historysize": "({{PLURAL:$1|1 byte|$1 byteh}})",
-    "history-feed-title": "Gïehtjedamme histovrije",
-    "history-feed-item-nocomment": "$1 dïhte $2",
-    "mergehistory-from": "Gaaltjie bielie:",
-    "history-title": "Gïehtjedamme histovrije ihke \"$1\"",
-    "lineno": "Sïeve $1:",
-    "compareselectedversions": "Mohtedidh veeljeme låhkoeh",
-    "editundo": "ov-darjodh",
-    "searchresults": "Ohtsedh resultaateh",
-    "prevn": "övtebe {{PLURAL:$1|$1}}",
-    "nextn": "minngeben {{PLURAL:$1|$1}}",
-    "viewprevnext": "Vuesehth ($1 {{int:pipe-separator}} $2) ($3)",
-    "preferences": "Sïjsestäälningeh",
-    "mypreferences": "Mov sïjsesäälningeh",
-    "skin-preview": "Åvte-vuesiehtidh",
-    "saveprefs": "Spååredh",
-    "searchresultshead": "Ohtsedh",
-    "timezonelegend": "Tïjjedajve",
-    "localtime": "Byjrehks tïjje",
-    "youremail": "E-påaste:",
-    "username": "Nuhtjiennomme:",
-    "uid": "Nuhtjien ID:",
-    "yourrealname": "Ov nomme:",
-    "yourlanguage": "Gïele:",
-    "yournick": "Nuhjiennomme:",
-    "email": "E-påaste",
-    "prefs-help-realname": "Ov nomme galkedh ijje tjaeledh. Bïjre datne veeljeme tjaeledh dov ov nomme, båetedh dïhte nuhtjie ihke tjaeledh dov barkoe.",
-    "editinguser": "Värrhtoedimmie nuhtjien '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
-    "group": "Tjïerte:",
-    "group-bot": "Jïjtjesvïhtjije",
-    "group-sysop": "Reeredh",
-    "group-bot-member": "Jïjtjesvïhtjije",
-    "group-sysop-member": "Reerien",
-    "grouppage-sysop": "{{ns:project}}:Reeredh",
-    "rightslog": "Nuhtjienreaktah logge",
-    "nchanges": "$1 {{PLURAL:$1|värrhtoedimmie|värrhtoedimmieh}}",
-    "recentchanges": "Männgan värrhtoedimmieh",
-    "recentchanges-feed-description": "Dåeriedidh männgan värrhtoedimmie sïjse wiki meatan dïhte feed.",
-    "rcnotefrom": "Vuelelen vuesehte dah männgan '''$1''' värrhtoedimmieh männgan '''$2'''.",
-    "rclistfrom": "Vuesehte orre värrhtoedimmieh aelkedh raejeste $1",
-    "rcshowhideminor": "$1 ohtje värrhtoedimmie",
-    "rcshowhidebots": "$1 jïjtjesvïhtjijeh",
-    "rcshowhideliu": "$1 värrhtoedimmie dejstie sïjselogge nuhtjienh",
-    "rcshowhideanons": "$1 anonyyme nuhtjienh",
-    "rcshowhidepatr": "$1 dååhkasjehtedh värrhtoedimmieh",
-    "rcshowhidemine": "$1 mov värrhtoedimmieh",
-    "rclinks": "Vuesehte männgan $1 värrhtoedimmieh nuelesne männgan $2 biejjieh<br />$3",
-    "diff": "joekehts",
-    "hist": "hist",
-    "hide": "Gaptjedh",
-    "show": "Vuesehte",
-    "minoreditletter": "u",
-    "newpageletter": "O",
-    "boteditletter": "j",
-    "recentchangeslinked": "Värrhtoedimmieh nille krïense bielieh",
-    "recentchangeslinked-feed": "Värrhtoedimmieh nille krïense bielieh",
-    "recentchangeslinked-toolbox": "Värrhtoedimmieh nille krïense bielieh",
-    "recentchangeslinked-title": "Värrhtoedimmie laktaseaddji gåajkoe \"$1\"",
-    "recentchangeslinked-summary": "Dïhte joekoelaakan bielie lästoe dah minngemes värrhtoedimmieh nille bielieh goh lea lïenghke. Bielieh [[Special:Watchlist|nille dov]] sïektjedhlästoe lea '''buajtehks'''.",
-    "upload": "Sadde guvvie",
-    "uploadbtn": "Sadde baalka",
-    "uploadlogpage": "Sadde logge",
-    "filename": "Guvvienomme",
-    "filesource": "Gaaltjie",
-    "savefile": "Spååredh guvvie",
-    "uploadedimage": "sadde \"[[$1]]\"",
-    "uploadvirus": "Guvvie tjeekehdidh viirus! Bïevnesh: $1",
-    "sourcefilename": "Gaaltjie guvvienomme",
-    "upload-file-error": "Sjisjnjie båajhtode",
-    "license": "Liseense",
-    "license-header": "Liseense",
-    "listfiles_search_for": "Ohtsedh ihke guvvie nomme:",
-    "imgfile": "guvvie",
-    "listfiles": "Guvvie lästoe",
-    "listfiles_name": "Nomme",
-    "listfiles_user": "Nuhtjien",
-    "listfiles_size": "Stoerre",
-    "file-anchor-link": "Baalka",
-    "filehist": "Baalka histovrije",
-    "filehist-help": "Diedtedh nille biejjie ihke vuajna man baalkan lij bealese dïhte tïjje.",
-    "filehist-current": "daaletje",
-    "filehist-datetime": "Biejjie/Tïjje",
-    "filehist-user": "Nuhtjien",
-    "filehist-dimensions": "Dimisjovneh",
-    "filehist-filesize": "Guvvie stoerre",
-    "filehist-comment": "Lahtestimmie",
-    "imagelinks": "Lïenghkeh",
-    "linkstoimage": "Tjuovvovasj {{PLURAL:$1|side|$1 sider}} bielieh lïenghkeh gåajkoe dïhte baalka:",
-    "nolinkstoimage": "Dïhte lea ijje bielieh goh nuhtjie dïhte baalka.",
-    "sharedupload": "Dïhte baalka lea $1 sadde goh juaka jih dorje sjädta nuhtjie dejstie jeatjebh prosjekte.",
-    "uploadnewversion-linktext": "Sadde orre låhkoe dejstie dïhte baalka",
-    "mimesearch": "MIME ohtsedh",
-    "mimetype": "MIME vuekie:",
-    "listredirects": "Lästoe bïjre-dirisjovneh",
-    "unusedtemplates": "Ov-nuhtjie maaleh",
-    "unusedtemplateswlh": "jeatjebh lïenghkeh",
-    "randompage": "Summal bielie",
-    "randomredirect": "Summal odhasitstivren",
-    "statistics": "Statistiike",
-    "statistics-header-users": "Nuhtjien statistiike",
-    "doubleredirects": "Guektien-gïerth bïjre-dirisjovneh",
-    "brokenredirects": "Earjohks bïrje-dirisjovneh",
-    "brokenredirects-edit": "(värrhtoedimmie)",
-    "withoutinterwiki": "Bielieh namhtah gïele lïenghkeh",
-    "fewestrevisions": "Bielieh meatan dah unnebes gïehtjedamme",
-    "nbytes": "$1 {{PLURAL:$1|byte|byteh}}",
-    "ncategories": "$1 {{PLURAL:$1|kategorije|kategorijeh}}",
-    "nlinks": "$1 {{PLURAL:$1|lïenghke|lïenghkeh}}",
-    "nmembers": "$1 {{PLURAL:$1|lihtsege|lihtsegh}}",
-    "nrevisions": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}",
-    "nviews": "$1 {{PLURAL:$1|vuesehte|vuesehteh}}",
-    "lonelypages": "Eejhtegapth bielieh",
-    "uncategorizedpages": "Ov-kategorije bielieh",
-    "uncategorizedcategories": "Ov-kategorije kategorijeh",
-    "uncategorizedimages": "Ov-kategorije guvvieh",
-    "uncategorizedtemplates": "Ov-kategorije maaleh",
-    "unusedcategories": "Ov-nuhtjie kategorije",
-    "unusedimages": "Ov-nnuhtjie guvvieh",
-    "wantedcategories": "Vaajtelidh kategorijeh",
-    "wantedpages": "Vaajtelidh bielieh",
-    "mostlinked": "Jeenjebe lïenghkeh gåajkoe bielieh",
-    "mostlinkedcategories": "Jeenjebe lïenghke gåajkoe kategorijeh",
-    "mostlinkedtemplates": "Jeenjebe lïenghke gåajkoe malleh",
-    "mostcategories": "Bielieh meatan jïjnje kategorijeh",
-    "mostimages": "Jeenjebe lïenghke gåajkoe guvvieh",
-    "mostrevisions": "Bielieh meatan jïjnje gïehtjedammeh",
-    "prefixindex": "Prefiikse indeekse",
-    "shortpages": "Åenehks bielieh",
-    "longpages": "Guhkie bielieh",
-    "deadendpages": "Tsuvvedh bielieh",
-    "protectedpages": "Sïektjedh bielieh",
-    "listusers": "Nuhtjien lästoe",
-    "newpages": "Orre bielie",
-    "newpages-username": "Nuhtjiennomme:",
-    "ancientpages": "Båarasåabpoe bielieh",
-    "move": "Jåhta",
-    "movethispage": "Jåhta dïhte bielie",
-    "booksources": "Gärja gaaltjieh",
-    "booksources-search-legend": "Ohtsedh ihke gärja gaaltjieh",
-    "booksources-go": "Vaadtsa",
-    "specialloguserlabel": "Nuhtjien:",
-    "speciallogtitlelabel": "Tiitele:",
-    "log": "Loggeh",
-    "all-logs-page": "Gaajhke loggeh",
-    "allpages": "Gaajhke bielieh",
-    "alphaindexline": "$1 ... $2",
-    "nextpage": "Minngebe bielie ($1)",
-    "prevpage": "Övtebe bielie ($1)",
-    "allpagesfrom": "Vuesehte bielieh goh aelkedh meatan:",
-    "allarticles": "Gaajhke bielieh",
-    "allpagessubmit": "Vaadtsa",
-    "allpagesprefix": "Vuesehte bielieh meatan prefihkse:",
-    "categories": "Karegorijeh",
-    "listusers-submit": "Vuesehte",
-    "emailuser": "E-påaste dïhte nuhtjien",
-    "emailpage": "E-påaste nuhtjien",
-    "defemailsubject": "{{SITENAME}} e-påaste",
-    "emailfrom": "Raejeste",
-    "emailto": "Gåajkoe",
-    "emailsubject": "Ïebne",
-    "emailmessage": "Dïjre",
-    "emailsend": "Seedtie",
-    "emailsent": "E-påaste seedtedh",
-    "watchlist": "Mov sïektjedhlästoe",
-    "mywatchlist": "Mov sïektjedhlästoe",
-    "removedwatchtext": "Bielie \"[[:$1]]\" lea sihkojuvvon raejeste [[Special:Watchlist|dov sïektjedhlästoe]].",
-    "watch": "Sïektjedh",
-    "watchthispage": "Sïektjedh dïhte bielie",
-    "unwatch": "Ov-sïektjedh",
-    "watchlist-details": "{{PLURAL:$1|$1 bielie|$1 bielieh}} sïektjedh (doekoe dïerhkestidhbielieh).",
-    "wlshowlast": "Vuesehte minngemes $1 täjmoeh $2 biejjieh $3",
-    "watching": "Sïektjeminie...",
-    "unwatching": "Ov-sïektjedh...",
-    "enotif_impersonal_salutation": "{{SITENAME}} nuhtjien",
-    "created": "skaepede",
-    "deletepage": "Tjåegkedh bielie",
-    "historywarning": "Vaaroehtidh: Bielie datne gïehtele ahte sihkut åtna histovrije:",
-    "actioncomplete": "Deahpadimmie voerkes",
-    "deletedtext": "\"$1\" lea sihkojuvvon.\nVuajna $2 ihke galtege bïjre männgan sihkojuvvonh.",
-    "dellogpage": "Sihkkun logge",
-    "deletecomment": "Gaavhtan ihke sihkkuma",
-    "deleteotherreason": "Jeatjebh/ehkstre gaavhtan:",
-    "deletereasonotherlist": "Jeatjebh gaavhtan",
-    "rollbacklink": "jurrelde bååstede",
-    "protectlogpage": "Vaarjelidh logge",
-    "prot_1movedto2": "[[$1]] jåhta gåajkoe [[$2]]",
-    "protect-legend": "Skylledh vaarjelidh",
-    "protectcomment": "Lahtestimmie:",
-    "protectexpiry": "Boarasnuvve:",
-    "protect_expiry_invalid": "Ov-jiltiige buaorasjnuvvenaigi.",
-    "protect_expiry_old": "Boarasnuvvenaigi lea vaesedh.",
-    "protect-text": "Daesnie dorje datne vuajna jih värrhtoedimmie vaarjelidhdaltese dejstie bielie '''$1'''.",
-    "protect-locked-access": "Dov nuhtjien åtna ijje luhpie gåajkoe värrhtoedimmie tjaeleste-vaarjelidh.\nDaaletje tjaeleste-vaarjelidh sïjsestäälninge ihke bielie '''$1''' lea:",
-    "protect-default": "(åvte-veeljeme)",
-    "protect-fallback": "Luhpie \"$1\"",
-    "protect-level-autoconfirmed": "Tjöödtjehtidh ov-registreered nuhtjienh",
-    "protect-level-sysop": "Barre reeredh",
-    "protect-summary-cascade": "viididuvvon",
-    "protect-expiring": "boarasnuvve $1 (UTC)",
-    "protect-cascade": "Vaarjelidh bielieh guosket sïjse dïhte bielie (viidit suodjaluse)",
-    "protect-cantedit": "Datne dorje ijje värrhtoedimmie vaarjelidhdaltese ihke dïhte bielie, ihke datne ijja åtna luhpie ahte värrhtoedimmie dïhte.",
-    "protect-expiry-options": "2 täjmoe:2 hours,1 biejjie:1 day,3 biejjie:3 days,1 våhkoe:1 week,2 våhkoe:2 weeks,1 aske:1 month,3 aske:3 months,6 aske:6 months,1 jaepie:1 year,gietjieloeves:infinite",
-    "restriction-type": "Permisjovne:",
-    "restriction-level": "Restriksjovne daltese:",
-    "restriction-edit": "Värrhtoedimmie",
-    "restriction-move": "Jåhta",
-    "restriction-create": "Skaepiedidh",
-    "restriction-level-sysop": "dïeves-vaarjelidh",
-    "undeleterevisions": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}} våarhkoe",
-    "undeletebtn": "Mahtsat",
-    "undelete-search-submit": "Ohtsedh",
-    "namespace": "Nommeïebne:",
-    "invert": "Jarkoe veeljeme",
-    "blanknamespace": "(Bielieh)",
-    "contributions": "Nuhtjien värrhtoedimmieh",
-    "mycontris": "Mov värrhtoedimmieh",
-    "contribsub2": "Ihke $1 ($2)",
-    "uctop": "(gïerege)",
-    "month": "Raejeste aske (jih övtebe):",
-    "year": "Raejeste jaepie (jih övtebe):",
-    "sp-contributions-newbies-sub": "Ihke orre nuhtjienh",
-    "sp-contributions-blocklog": "Tjöödtjehtidh logge",
-    "sp-contributions-talk": "Digkiedimmie",
-    "sp-contributions-username": "IP Tjaalesijjie jallh nuhtjiennomme:",
-    "sp-contributions-submit": "Ohtsedh",
-    "whatlinkshere": "Bilieh goh lïenghkeh diekie",
-    "whatlinkshere-title": "Bielieh goh lïenghke gåajkoe $1",
-    "whatlinkshere-page": "Bielie:",
-    "linkshere": "Tjuovvovasj bielie lïenghke gåajkoe '''[[:$1]]''':",
-    "nolinkshere": "Ijje bielieh lïenghke gåajkoe '''[[:$1]]'''.",
-    "isredirect": "bïjre-dirisjovne bielie",
-    "istemplate": "lasihuvvon goh maale",
-    "whatlinkshere-prev": "{{PLURAL:$1|övtebe|övtebe $1}}",
-    "whatlinkshere-next": "{{PLURAL:$1|minngebe|minngebe $1}}",
-    "whatlinkshere-links": "← lïenghkeh",
-    "blockip": "Tjöödtjehtidh nuhtjien",
-    "ipadressorusername": "IP Tjaalesijjie jallh nuhtjiennomme:",
-    "ipbother": "Jeatjebh tïjje:",
-    "ipboptions": "2 täjmoe:2 hours,1 biejjie:1 day,3 biejjie:3 days,1 våhkoe:1 week,2 våhkoe:2 weeks,1 aske:1 month,3 aske:3 months,6 aske:6 months,1 jaepie:1 year,gietjieloeves:infinite",
-    "ipblocklist": "Lästoe bijjelen tjöödtjehtidh IP tjaalesijjieh jih nuhtjiennommeh",
-    "ipblocklist-submit": "Ohtsedh",
-    "blocklink": "tjöödtjehtidh",
-    "unblocklink": "ov-tjöödtjehtidh",
-    "contribslink": "dåarjoeh",
-    "blocklogpage": "Tjöödtjehtidh logge",
-    "blocklogentry": "blåhkedidh \"[[$1]]\" $2 $3",
-    "lockdb": "Tjuevtedh daatabaase",
-    "lockbtn": "Tjuevtedh daatabaase",
-    "databasenotlocked": "Daatabaase lea ijje tjuevtedh.",
-    "move-page-legend": "Jåhta bielie",
-    "movearticle": "Jåhta bielie:",
-    "newtitle": "Gåajkoe orre tiitele:",
-    "move-watch": "Sïektjedh dïhte bielie",
-    "movepagebtn": "Jåhta bielie",
-    "pagemovedsub": "Jåhta lähkoe",
-    "articleexists": "Bielie meatan dïhte nomme gååvnese joe, jallh\nnome dov åtna veeljeme lea ijje jiiltige.\nGïemhpes veeljeme jeatjebh nomme.",
-    "movetalk": "Jåhta aaj dïerkestidhbielie, bïjre dïhte gååvnese.",
-    "movelogpage": "Jåhta logge",
-    "movereason": "Gaavhtan:",
-    "revertmove": "jåhta bååstede",
-    "export": "Ehksporte bielieh",
-    "export-submit": "Ehksporte",
-    "export-addcat": "Lissiehtidh",
-    "export-templates": "Inkludera mallar",
-    "allmessages": "Systeeme dïrje",
-    "allmessagesname": "Nomme",
-    "thumbnail-more": "Vijriedidh",
-    "thumbnail_error": "Båajhtode nuelesne skaepede dejstie miniatyvreguvvie: $1",
-    "import": "Imporhte bielieh",
-    "import-interwiki-submit": "Imporhte",
-    "importstart": "Imporhte bielieh...",
-    "import-revision-count": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}",
-    "importfailed": "Imporhte steegkeldahkesne: $1",
-    "importsuccess": "Imporhte lähkoe!",
-    "importlogpage": "Imporhte logge",
-    "import-logentry-upload-detail": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}",
-    "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}} raejeste $2",
-    "tooltip-pt-userpage": "Mov nuhtjienbielie",
-    "tooltip-pt-mytalk": "Mov dïjveldidh bielie",
-    "tooltip-pt-preferences": "Mov sïjsesäälningeh",
-    "tooltip-pt-watchlist": "Lästoe bijjelen bielieh goh sïektjedh",
-    "tooltip-pt-mycontris": "Lästoe bijjelen mov värrhtoedimmie",
-    "tooltip-pt-login": "Dov åådtje logge sïjse, bine dïhte lea ijje daerpies.",
-    "tooltip-pt-logout": "Logge ålkone",
-    "tooltip-ca-talk": "Dïjveldidh bïjre sisvege bieliej",
-    "tooltip-ca-edit": "Dov dorje värrhtoedimmie dïhte bielie. Nuhtjie åvte-vuesiehtidh båaloe åvte spååredh.",
-    "tooltip-ca-addsection": "Lissiehtidh lahtestimmie gåajkoe dïhte dïjveldidh.",
-    "tooltip-ca-viewsource": "Dïhte bielie lea vaarjelidh. Dov dorje vuesehte gaaltjiej.",
-    "tooltip-ca-protect": "Vaarjelidh dïhte bielie",
-    "tooltip-ca-delete": "Tjåegkedh dïhte bielie",
-    "tooltip-ca-move": "Jåhta dïhte bielie",
-    "tooltip-ca-watch": "Lissiehtidh dïhte bielie gåajkoe dov sïektjedhlästoe",
-    "tooltip-ca-unwatch": "Sirdde dïhte bielie raejeste dov sïektjedhlästoe",
-    "tooltip-search": "Ohtsedh {{SITENAME}}sne",
-    "tooltip-p-logo": "Åejjiebielie",
-    "tooltip-n-mainpage": "Gåajkoe aalkoebielie vaadtsa",
-    "tooltip-n-portal": "Bïjre prosjekte, mij dov dorje, lij dov gaavnedh daeverh",
-    "tooltip-n-currentevents": "Bïevnesh bïjre daaletje deahpadimmieh",
-    "tooltip-n-recentchanges": "Lästoe männganes sjiehtedh bijjelen nille {{SITENAME}}.",
-    "tooltip-n-randompage": "Vaadtsa summal bielie",
-    "tooltip-n-help": "Viehkie jih bïevnesh {{SITENAME}} bïjre.",
-    "tooltip-t-whatlinkshere": "Lästoe bijjelen gaajhke wiki bielieh goh lïenghke diekie",
-    "tooltip-feed-rss": "RSS feed ihke dïhte bielie",
-    "tooltip-feed-atom": "Atom feed ihke dïhte bielie",
-    "tooltip-t-contributions": "Vuesehte lästoe bijjelen värrhtoedimmieh dejstie dïhte nuhtjien",
-    "tooltip-t-emailuser": "Seedtedh e-påaste gåajkoe dïhte nuhtjien",
-    "tooltip-t-upload": "Sadde guvvir jallh meedia baalkah",
-    "tooltip-t-specialpages": "Lästoe gaajhke joekoen bielieh bijjelen",
-    "tooltip-ca-nstab-user": "Vuesehte nuhtjien bieliej",
-    "tooltip-ca-nstab-project": "Vuesehte prosjekte bieliej",
-    "tooltip-ca-nstab-image": "Vuesehte guvvie bieliej",
-    "tooltip-ca-nstab-template": "Vuesehte maalej",
-    "tooltip-ca-nstab-help": "Vuesehte viehkie bieliej",
-    "tooltip-ca-nstab-category": "Vuesehte kategorije bieliej",
-    "tooltip-minoredit": "Mïerhkesjidh dïhte lea ohtje värrhtoedimmie",
-    "tooltip-save": "Spååredh dov värrhtoedimmieh",
-    "tooltip-preview": "Åvte-vuesiehtidh dov värrhtoedimmie, gïemhpes nuhtjie dïhte åvte spååredh!",
-    "tooltip-diff": "Vuesehte guhte värrhtoedimmieh dov åtna dorjeme dejstie tjaalege.",
-    "tooltip-compareselectedversions": "Vuesehte joekehts gaskesne dah göökte vïhtesjidh låhkoeh dejstie dïhte bielie.",
-    "tooltip-watch": "Lissiehtidh dïhte bielie gåajkoe dov sïektjedhlästoe",
-    "siteuser": "{{SITENAME}} nuhtjien $1",
-    "siteusers": "{{SITENAME}} nuhtjien(h) $1",
-    "previousdiff": "← Övtebe joekehts",
-    "nextdiff": "Minngebe joekehts →",
-    "file-info": "baalka stoerre: $1, MIME-vuekie: $2",
-    "file-info-size": "$1 × $2 pixel, baalka stoerre: $3, MIME-vuekie: $4",
-    "file-nohires": "Ijje jïlle bäjjeselöösninge jaksoes.",
-    "svg-long-desc": "SVG baalka, maadth-stoerre $1 × $2 pixel, baalka stoerre: $3",
-    "show-big-image": "Dïeves stoerre",
-    "newimages": "Gallerije dejstie orre baalkah",
-    "ilsubmit": "Ohtsedh",
-    "metadata": "Metadaata",
-    "metadata-expand": "Vuesehte vijriedidh detaaljeh",
-    "metadata-collapse": "Gaptjedh vijrede daeverh",
-    "metadata-fields": "EXIF-dajve goh lästoe sïjse dïhte dïrje vuesehte nille guvviebielie gåessie metadaatataabelle lea unniedidh.\nJeatjebh dajveh lea gaptjedh goh sïejhme, bine vuesehte gåessie taabelle stoerre.\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": "Gamte",
-    "exif-imagelength": "Gåhkoe",
-    "exif-model": "Guvviedahke hammohke",
-    "exif-software": "Möövhkesvaare nuhtjie",
-    "exif-filesource": "Guvvie gaaltjie",
-    "exif-gpslatituderef": "Noerhte jallh Åarjetje Laatituude",
-    "exif-gpslatitude": "Laatituude",
-    "exif-gpslongituderef": "Lulnie jallh Jillege Låångdituude",
-    "exif-gpslongitude": "Låångdituude",
-    "exif-gpsareainformation": "Nomme ihke GPS davje",
-    "exif-meteringmode-0": "Ammes",
-    "exif-meteringmode-255": "Jeatjebh",
-    "exif-lightsource-0": "Ammes",
-    "exif-scenecapturetype-0": "Sïejhme",
-    "exif-contrast-1": "Möövhkes",
-    "exif-contrast-2": "Garre",
-    "exif-sharpness-1": "Möövhkes",
-    "exif-sharpness-2": "Garre",
-    "exif-subjectdistancerange-0": "Ammes",
-    "exif-gpslatitude-n": "Noerhte latituude",
-    "exif-gpslatitude-s": "Åarjetje laatituude",
-    "exif-gpslongitude-e": "Lulnie låångdituude",
-    "exif-gpslongitude-w": "Jillege låångdituude",
-    "watchlistall2": "gaajhke",
-    "namespacesall": "gaajhke",
-    "monthsall": "gaajhke",
-    "scarytranscludetoolong": "[URL lea ihke guhkie; gaatelassjedh]",
-    "confirm-purge-top": "Döömedh cache ihke dïhte bielie?",
-    "imgmultipageprev": "← övtebe bielie",
-    "imgmultipagenext": "minngebe bielie →",
-    "imgmultigo": "Vaadtsa!",
-    "table_pager_next": "Minngebe bielie",
-    "table_pager_prev": "Övtebe bielie",
-    "table_pager_first": "Voestemes bielie",
-    "table_pager_last": "Minngemes bielie",
-    "table_pager_limit_submit": "Vaadtsa",
-    "autosumm-new": "Orre bielie: $1",
-    "livepreview-loading": "Leedtedh…",
-    "livepreview-ready": "Leedtedh… Voerkes!",
-    "watchlisttools-view": "Sïektjedhlästoe",
-    "watchlisttools-edit": "Vuesehte jih värrhtoedimmie sïektjedhlästoe",
-    "watchlisttools-raw": "Värrhtordimmie saajpe sïektjedhlästoe",
-    "unknown_extension_tag": "Ammes ekshtensjovne lissie \"$1\"",
-    "version": "Låhkoe",
-    "specialpages": "Joekoen bielieh"
+       "@metadata": {
+               "authors": [
+                       "Andrijko Z.",
+                       "Bïerne",
+                       "M.M.S.",
+                       "Urhixidur",
+                       "TMg",
+                       "아라"
+               ]
+       },
+       "tog-showtoolbar": "Dïrregesïeve vuesehth (JavaScript)",
+       "tog-fancysig": "Saajpe singnatuvreh (namhtah jïjtsistie lïenghke)",
+       "underline-always": "Iktesth",
+       "underline-never": "Aaltere",
+       "sunday": "Aejlege",
+       "monday": "Måanta",
+       "tuesday": "Däjsta",
+       "wednesday": "Gaske-våhkoe",
+       "thursday": "Dåarsta",
+       "friday": "Bearjedh",
+       "saturday": "Laavadahke",
+       "sun": "Aej",
+       "mon": "Måa",
+       "tue": "Däj",
+       "wed": "Gas",
+       "thu": "Dåa",
+       "fri": "Bea",
+       "sat": "Laa",
+       "january": "tsiengele",
+       "february": "goevte",
+       "march": "njoktje",
+       "april": "Voerhtje",
+       "may_long": "Suehpede",
+       "june": "Ruffie",
+       "july": "Snjaltje",
+       "august": "Mïetske",
+       "september": "Gaekere",
+       "october": "Golke",
+       "november": "Rahka",
+       "december": "Goeve",
+       "january-gen": "Tsiengele",
+       "february-gen": "Goevte",
+       "march-gen": "Njoktje",
+       "april-gen": "Voerhtje",
+       "may-gen": "Suehpede",
+       "june-gen": "Ruffie",
+       "july-gen": "Snjaltje",
+       "august-gen": "Mïetske",
+       "september-gen": "Gaekere",
+       "october-gen": "Golke",
+       "november-gen": "Rahka",
+       "december-gen": "Goeve",
+       "jan": "Tsïen",
+       "feb": "Goevt",
+       "mar": "Njok",
+       "apr": "Voer",
+       "may": "Sueh",
+       "jun": "Ruff",
+       "jul": "Snja",
+       "aug": "Mïet",
+       "sep": "Gaek",
+       "oct": "Golk",
+       "nov": "Rahk",
+       "dec": "Goev",
+       "pagecategories": "{{PLURAL:$1|Kategorije|Kategorijeh}}",
+       "category_header": "Bielie sïjse kategorije \"$1\"",
+       "subcategories": "Subkategorijeh",
+       "category-media-header": "Guvvie sïjse karegorije \"$1\"",
+       "category-empty": "''Dïhte kategorije sisvege ijje bielieh jallh baalkah.''",
+       "listingcontinuesabbrev": "jåar.",
+       "about": "Bïjre",
+       "article": "Sisvege bielie",
+       "newwindow": "(geehpehtidh sïjse orre klaase)",
+       "cancel": "Orrijidh",
+       "moredotdotdot": "Jienebe...",
+       "mypage": "Mov bielie",
+       "mytalk": "Mov dïjveldidh",
+       "anontalk": "Dïjveldidh ihke dïhte IP",
+       "navigation": "Navigasjovne",
+       "and": "&#32;jih",
+       "qbfind": "Gaavnedh",
+       "qbedit": "Värrhtoedimmie",
+       "qbpageoptions": "Dïhte bielie",
+       "qbmyoptions": "Mov bielieh",
+       "faq": "FAQ",
+       "faqpage": "Project:FAQ",
+       "errorpagetitle": "Båajhtode",
+       "returnto": "Bååstide gåajkoe $1.",
+       "tagline": "{{SITENAME}}sta",
+       "help": "Viehkie",
+       "search": "Ohtsedh",
+       "searchbutton": "Ohtsedh",
+       "go": "Vaadtsa",
+       "searcharticle": "Vaadtsa",
+       "history": "Histovrije",
+       "history_short": "Histovrije",
+       "printableversion": "Tjaelije bielie",
+       "permalink": "Permanente lïenghke",
+       "print": "Tjaeledh olkese",
+       "edit": "Sjiehtedh",
+       "editthispage": "Värrhtoedimmie dïhte bielie",
+       "delete": "Tjåegkedh",
+       "protect": "Vaarjelidh",
+       "protectthispage": "Vaarjelidh dïhte bielie",
+       "newpage": "Orre bielie",
+       "talkpage": "Dïjveldidh dïhte bielie",
+       "talkpagelinktext": "Digkiedimmie",
+       "specialpage": "Joekoelaakan Bielie",
+       "personaltools": "Persjovne dïrregeh",
+       "articlepage": "Vuesehte artihkle bielie",
+       "talk": "Dïjveldeme",
+       "views": "Vuesehth",
+       "toolbox": "Dïrregeborhtje",
+       "userpage": "Vuesehte nuhtjienbielie",
+       "projectpage": "Vuesehte Wikipedijebielie",
+       "imagepage": "Vuesehte guvvie bielie",
+       "templatepage": "Vuesehte maale bielie",
+       "viewhelppage": "Vuesehte viehkie bielie",
+       "categorypage": "Vuesehte kategorije bielie",
+       "viewtalkpage": "Vuesehte dïjveldidh",
+       "otherlanguages": "jeatjebh gïele",
+       "redirectedfrom": "(Bïjre-dirisjovne raejeste $1)",
+       "redirectpagesub": "Bïjre-dirisjovne bielie",
+       "protectedpage": "Vaarjelidh bielie",
+       "jumpto": "Vaadtsa gåajkoe:",
+       "jumptonavigation": "navigasjovne",
+       "jumptosearch": "ohtsedh",
+       "aboutsite": "{{SITENAME}}en bïjre",
+       "aboutpage": "Project:Bïjre",
+       "copyrightpage": "{{ns:project}}:Bäjjesereaktah",
+       "currentevents": "Daaletje deahpadimmieh",
+       "currentevents-url": "Project:Daaletje deahpadimmieh",
+       "disclaimers": "Friijavuohte vastideamis",
+       "disclaimerpage": "Project:Bäjjesereaktah",
+       "edithelp": "Sjiehtedimmie viehkie",
+       "mainpage": "Aalkoebielie",
+       "mainpage-description": "Aalkoebielie",
+       "portal": "Meatan portaale",
+       "portal-url": "Project:Meatan portaale",
+       "privacy": "Privaate pålisy",
+       "privacypage": "Project:Privaate pålisy",
+       "retrievedfrom": "Raejeste \"$1\" vïedtjeme",
+       "youhavenewmessages": "Datne åtna $1 ($2).",
+       "editsection": "sjïehtedh",
+       "editold": "värrhtoedimmie",
+       "editsectionhint": "Sektiovne sjiehtedh: $1",
+       "toc": "Sisvege",
+       "showtoc": "vuesehte",
+       "hidetoc": "gaptjedh",
+       "viewdeleted": "Vuesehte $1?",
+       "site-rss-feed": "$1 RSS Feed",
+       "site-atom-feed": "$1 Atom Feed",
+       "page-rss-feed": "\"$1\" RSS Feed",
+       "page-atom-feed": "\"$1\" Atom Feed",
+       "nstab-main": "Bielie",
+       "nstab-user": "Nuhtjien bielie",
+       "nstab-media": "Guvvie",
+       "nstab-special": "Joekoelaakan",
+       "nstab-project": "Prosjekte bielie",
+       "nstab-image": "Baalka",
+       "nstab-mediawiki": "MediaWiki",
+       "nstab-template": "Maale",
+       "nstab-help": "Viehke bielie",
+       "nstab-category": "Kategorije",
+       "error": "Båajhtode",
+       "databaseerror": "Daatabaase båajhtode",
+       "readonly": "Daatabaase steegkeldahkesne",
+       "internalerror": "Sjisjnjie båajhtede",
+       "internalerror_info": "Sjisjnjie båajhtede: $1",
+       "badtitle": "Gååre nomme",
+       "badtitletext": "Dïhte bielietiitele lea nov sån ijje luhpede, bielie lea gåaroes, jallh lea bielie gåarhmede lïenghke gåajkoe.",
+       "viewsource": "Vuesehte tjaalege",
+       "viewsourcetext": "Dov dorje vuesehte jih kåpieerae gaaltjie dejstie dïhte bielie:",
+       "yourname": "Nuhtjiennomme:",
+       "yourpassword": "Loevesbaakoe:",
+       "remembermypassword": "Måjhtije mov loggesïjse nille dïhte daatovre (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "yourdomainname": "Dov domäne:",
+       "login": "Logge sïjse",
+       "nav-login-createaccount": "Logge sïjse / skaepede nuhtjien",
+       "userlogin": "Logge sïjse / skaepede nuhtjien",
+       "logout": "Logge olkese",
+       "userlogout": "Logge ålkone",
+       "nologin": "Lea dov ijje registreered? '''$1'''.",
+       "nologinlink": "Skaepede nuhtjien",
+       "createaccount": "Skaepede nuhtjien",
+       "gotaccount": "Åtna dov joe nuhtjiennomme? '''$1'''.",
+       "gotaccountlink": "Logge sïjse",
+       "createaccountmail": "meatan e-påaste",
+       "loginerror": "Logge sïjse båajhtode",
+       "loginsuccesstitle": "Dov lea daelie sïjse logge",
+       "loginsuccess": "'''Dov lea daelie sïjselogge nille {{SITENAME}} goh \"$1\".'''",
+       "nosuchuser": "Dïhte gååvnese ijje nuhtjien goh nomme \"$1\". Gïehtjedidh dov baakoehtidh, jallh skaepede orre nuhtjien.",
+       "nosuchusershort": "Dïhte gååvnese ijje nuhtjien goh nomme \"$1\". Gïehtjedidh baakoehtidh.",
+       "nouserspecified": "Dov galkedh tjaeledh nuhtjiennomme.",
+       "wrongpassword": "Loevesbaakoe lea gåarhmede. Vuejnedh vihth.",
+       "wrongpasswordempty": "Loevesbaakoe lea gåaroes. Vuejnedh vihth.",
+       "passwordtooshort": "Dov loevesbaakoe lea ov-jiltighe jallh ihke åenehks. Dïhte galkedh åtna unnemes $1 vähta jih sjädta jeatjebe raejeste dov nuhtjiennomme.",
+       "mailmypassword": "E-påaste loevesbaakoe",
+       "passwordremindertitle": "Orre loevesbaakoe ihke {{SITENAME}}",
+       "noemail": "Dïhte lea ijje e-påaste tjaalesijjie registreeredh ihke nuhtjien \"$1\".",
+       "passwordsent": "Orre loevesbaakoe åtna sjädta seedtie gåajkoe e-påaste tjaalesijjie\nregistreered ihke \"$1\".\nGïemhpes logge sïjse vihth männgan datne åtna låhka dïhte.",
+       "accountcreated": "Nuhtjien skaepede",
+       "loginlanguagelabel": "Gïele: $1",
+       "changepassword": "Värrhtoedimmie loevesbaakoe",
+       "oldpassword": "Båeries loevesbaakoe:",
+       "newpassword": "Orre loevesbaakoe:",
+       "retypenew": "Odhasit orre loevesbaakoe:",
+       "bold_sample": "Buajtehks tjaalege",
+       "bold_tip": "Buajtehks tjaalege",
+       "italic_sample": "Kursiive tjaalege",
+       "italic_tip": "Kursiive tjaalege",
+       "link_sample": "Lïenghke tiitele",
+       "link_tip": "Sjisjnjie lïenghke",
+       "extlink_sample": "http://www.example.com lïenghke tiitele",
+       "extlink_tip": "Ehkstäärne lïenghke (måjhtajidh http:// prefihkse)",
+       "headline_sample": "Rubriike tjaalege",
+       "headline_tip": "Daltese 2 rubriike",
+       "nowiki_sample": "Bïejedh ijje-hammode tjaalege daesnie",
+       "nowiki_tip": "Rievdde wikïhammode",
+       "image_tip": "Lååtje guvvie",
+       "media_tip": "Meedia baalka lïenghke",
+       "sig_tip": "Dov signatuvre meatan tïjjestäämpele",
+       "hr_tip": "Horisontele sïeve (nuhtjie bïhteles-laakan)",
+       "summary": "Tjohkehtehteme:",
+       "subject": "Ïebne/rubriike:",
+       "minoredit": "Dïhte lea ohtje värrhtoedimmie",
+       "watchthis": "Sïektjedh dïhte bielie",
+       "savearticle": "Spååredh bielie",
+       "preview": "Åvte-vuesiehtidh",
+       "showpreview": "Vuesehte åvte-vuesiehtidh",
+       "showdiff": "Vuesehte värrhtoedimmie",
+       "anoneditwarning": "'''Vaaroehtidh:''' Dov lea ijje logge sïjse. Dov IP tjaalesijjie båetedh spååredh sïjse dïhte bielie värrhtoedimmie histovrije.",
+       "summary-preview": "Tjohkehtehteme åvte-vuesiehtidh:",
+       "loginreqlink": "logge sïjse",
+       "loginreqpagetext": "Dov galkedh $1 ihke vuesehte jeatjebh bielieh.",
+       "accmailtitle": "Loevesbaakoe seedtie.",
+       "accmailtext": "Loevesbaakoe ihke ”$1” utnedh seedtedh gåajkoe $2.",
+       "newarticle": "(Orre)",
+       "noarticletext": "Dïhte lea daelie ijje tjaalege sïjse dïhte bielie, dov dorje [[Special:Search/{{PAGENAME}}|ohtsedh ihke dïhte bielie nomme]] sïjse jeatjebh bielieh jallh [{{fullurl:{{FULLPAGENAME}}|action=edit}} värrhtoedimmie dïhte bielie].",
+       "usercssyoucanpreview": "'''Tiipse:''' Nuhtjie 'Vuesehte åvte-vuesiehtidh' båaloe ihke pryövoe dov orre CSS åvte spååredh.",
+       "userjsyoucanpreview": "'''Tiipse:''' Nuhtjie 'Vuesehte åvte-vuesiehtidh' båaloe ihke pryövoe dov orre JS åvte spååredh.",
+       "updated": "(Orrestahteme)",
+       "note": "'''Galtege:'''",
+       "previewnote": "'''Dïhte lea aktegh åvte-vuesiehtidh; värrhtoedimmieh ånta ijje sjïdtedh spååredh!'''",
+       "editing": "Sjiehtedimmie $1",
+       "editingsection": "Värrhtoedimmie $1 (sektiovne)",
+       "yourtext": "Dov tjaalege",
+       "copyrightwarning": "Tjaeleste gaajhke värrhtoedimmieh gåajkoe {{SITENAME}} lea ahte gïehtjele goh maam buektedh nuelesne $2 (vuajna $1 ihke detaaljeh). Bïjre datne ijje sïjhtedh dov tjaalege galka värrhtoedimmieh jallh kåpieeres minngesne jeatjebh daerpies voete, galka datne ijje tjaala daesnie.<br />\nDatne luhpede mijjieh aaj datne tjaala tjaalege jïjtje, jallh kåpieeret raejeste gaaltjie goh ijje vaarjele dejstie bäjjesereaktah, jallh plïerehke.<br />\n'''LISSEHTE IJJE OLKESE BÄJJESEREAKTAHVAARJELE ÏEBNE NAMHTAH LUHPIE!'''",
+       "templatesused": "{{PLURAL:$1|Maal|Maler}}Maaleh nuhtjie nille dïhte bielie:",
+       "templatesusedpreview": "{{PLURAL:$1|Maal|Maaleh}} nuhtjie sïjse dïhte åvte-vuesiehtidh:",
+       "template-protected": "(vaarjeleme)",
+       "template-semiprotected": "(lehkie-vaarjelidh)",
+       "nocreatetext": "{{SITENAME}} åtna gaertjiedidh nuepieh ahte skaepede orre bielieh.\nDov dorje värrhtoedimmie gååvnese bielieh, jallh [[Special:UserLogin|logge sïjse jallh skaepede nuhtjien]].",
+       "viewpagelogs": "Vuesehte loggeh ihke dïhte bielie",
+       "currentrev": "Daaletje gïehtjedamme",
+       "revisionasof": "Gïehtjedamme ihke $1",
+       "revision-info": "Gïehtjedamme raejeste dïhte $1; $2",
+       "previousrevision": "←Båarasåabpoe gïehtjedamme",
+       "nextrevision": "Minngebe gïehtjedamme→",
+       "currentrevisionlink": "Daaletje gïehtjedamme",
+       "cur": "daaletje",
+       "next": "minngebe",
+       "last": "minngemes",
+       "page_first": "voestegh",
+       "page_last": "minngemes",
+       "histfirst": "Aareh",
+       "histlast": "Minngemes",
+       "historysize": "({{PLURAL:$1|1 byte|$1 byteh}})",
+       "history-feed-title": "Gïehtjedamme histovrije",
+       "history-feed-item-nocomment": "$1 dïhte $2",
+       "mergehistory-from": "Gaaltjie bielie:",
+       "history-title": "Gïehtjedamme histovrije ihke \"$1\"",
+       "lineno": "Sïeve $1:",
+       "compareselectedversions": "Mohtedidh veeljeme låhkoeh",
+       "editundo": "ov-darjodh",
+       "searchresults": "Ohtsedh resultaateh",
+       "prevn": "övtebe {{PLURAL:$1|$1}}",
+       "nextn": "minngeben {{PLURAL:$1|$1}}",
+       "viewprevnext": "Vuesehth ($1 {{int:pipe-separator}} $2) ($3)",
+       "preferences": "Sïjsestäälningeh",
+       "mypreferences": "Mov sïjsesäälningeh",
+       "skin-preview": "Åvte-vuesiehtidh",
+       "saveprefs": "Spååredh",
+       "searchresultshead": "Ohtsedh",
+       "timezonelegend": "Tïjjedajve",
+       "localtime": "Byjrehks tïjje",
+       "youremail": "E-påaste:",
+       "username": "Nuhtjiennomme:",
+       "yourrealname": "Ov nomme:",
+       "yourlanguage": "Gïele:",
+       "yournick": "Nuhjiennomme:",
+       "email": "E-påaste",
+       "prefs-help-realname": "Ov nomme galkedh ijje tjaeledh. Bïjre datne veeljeme tjaeledh dov ov nomme, båetedh dïhte nuhtjie ihke tjaeledh dov barkoe.",
+       "editinguser": "Värrhtoedimmie nuhtjien '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+       "group": "Tjïerte:",
+       "group-bot": "Jïjtjesvïhtjije",
+       "group-sysop": "Reeredh",
+       "group-bot-member": "Jïjtjesvïhtjije",
+       "group-sysop-member": "Reerien",
+       "grouppage-sysop": "{{ns:project}}:Reeredh",
+       "rightslog": "Nuhtjienreaktah logge",
+       "nchanges": "$1 {{PLURAL:$1|värrhtoedimmie|värrhtoedimmieh}}",
+       "recentchanges": "Männgan värrhtoedimmieh",
+       "recentchanges-feed-description": "Dåeriedidh männgan värrhtoedimmie sïjse wiki meatan dïhte feed.",
+       "rcnotefrom": "Vuelelen vuesehte dah männgan '''$1''' värrhtoedimmieh männgan '''$2'''.",
+       "rclistfrom": "Vuesehte orre värrhtoedimmieh aelkedh raejeste $3 $2",
+       "rcshowhideminor": "$1 ohtje värrhtoedimmie",
+       "rcshowhidebots": "$1 jïjtjesvïhtjijeh",
+       "rcshowhideliu": "$1 värrhtoedimmie dejstie sïjselogge nuhtjienh",
+       "rcshowhideanons": "$1 anonyyme nuhtjienh",
+       "rcshowhidepatr": "$1 dååhkasjehtedh värrhtoedimmieh",
+       "rcshowhidemine": "$1 mov värrhtoedimmieh",
+       "rclinks": "Vuesehte männgan $1 värrhtoedimmieh nuelesne männgan $2 biejjieh<br />$3",
+       "diff": "joekehts",
+       "hist": "hist",
+       "hide": "Gaptjedh",
+       "show": "Vuesehte",
+       "minoreditletter": "u",
+       "newpageletter": "O",
+       "boteditletter": "j",
+       "recentchangeslinked": "Värrhtoedimmieh nille krïense bielieh",
+       "recentchangeslinked-feed": "Värrhtoedimmieh nille krïense bielieh",
+       "recentchangeslinked-toolbox": "Värrhtoedimmieh nille krïense bielieh",
+       "recentchangeslinked-title": "Värrhtoedimmie laktaseaddji gåajkoe \"$1\"",
+       "recentchangeslinked-summary": "Dïhte joekoelaakan bielie lästoe dah minngemes värrhtoedimmieh nille bielieh goh lea lïenghke. Bielieh [[Special:Watchlist|nille dov]] sïektjedhlästoe lea '''buajtehks'''.",
+       "upload": "Sadde guvvie",
+       "uploadbtn": "Sadde baalka",
+       "uploadlogpage": "Sadde logge",
+       "filename": "Guvvienomme",
+       "filesource": "Gaaltjie",
+       "savefile": "Spååredh guvvie",
+       "uploadvirus": "Guvvie tjeekehdidh viirus! Bïevnesh: $1",
+       "sourcefilename": "Gaaltjie guvvienomme",
+       "upload-file-error": "Sjisjnjie båajhtode",
+       "license": "Liseense",
+       "license-header": "Liseense",
+       "listfiles_search_for": "Ohtsedh ihke guvvie nomme:",
+       "imgfile": "guvvie",
+       "listfiles": "Guvvie lästoe",
+       "listfiles_name": "Nomme",
+       "listfiles_user": "Nuhtjien",
+       "listfiles_size": "Stoerre",
+       "file-anchor-link": "Baalka",
+       "filehist": "Baalka histovrije",
+       "filehist-help": "Diedtedh nille biejjie ihke vuajna man baalkan lij bealese dïhte tïjje.",
+       "filehist-current": "daaletje",
+       "filehist-datetime": "Biejjie/Tïjje",
+       "filehist-user": "Nuhtjien",
+       "filehist-dimensions": "Dimisjovneh",
+       "filehist-filesize": "Guvvie stoerre",
+       "filehist-comment": "Lahtestimmie",
+       "imagelinks": "Lïenghkeh",
+       "linkstoimage": "Tjuovvovasj {{PLURAL:$1|side|$1 sider}} bielieh lïenghkeh gåajkoe dïhte baalka:",
+       "nolinkstoimage": "Dïhte lea ijje bielieh goh nuhtjie dïhte baalka.",
+       "sharedupload": "Dïhte baalka lea $1 sadde goh juaka jih dorje sjädta nuhtjie dejstie jeatjebh prosjekte.",
+       "uploadnewversion-linktext": "Sadde orre låhkoe dejstie dïhte baalka",
+       "mimesearch": "MIME ohtsedh",
+       "mimetype": "MIME vuekie:",
+       "listredirects": "Lästoe bïjre-dirisjovneh",
+       "unusedtemplates": "Ov-nuhtjie maaleh",
+       "unusedtemplateswlh": "jeatjebh lïenghkeh",
+       "randompage": "Summal bielie",
+       "randomredirect": "Summal odhasitstivren",
+       "statistics": "Statistiike",
+       "statistics-header-users": "Nuhtjien statistiike",
+       "doubleredirects": "Guektien-gïerth bïjre-dirisjovneh",
+       "brokenredirects": "Earjohks bïrje-dirisjovneh",
+       "brokenredirects-edit": "(värrhtoedimmie)",
+       "withoutinterwiki": "Bielieh namhtah gïele lïenghkeh",
+       "fewestrevisions": "Bielieh meatan dah unnebes gïehtjedamme",
+       "nbytes": "$1 {{PLURAL:$1|byte|byteh}}",
+       "ncategories": "$1 {{PLURAL:$1|kategorije|kategorijeh}}",
+       "nlinks": "$1 {{PLURAL:$1|lïenghke|lïenghkeh}}",
+       "nmembers": "$1 {{PLURAL:$1|lihtsege|lihtsegh}}",
+       "nrevisions": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}",
+       "nviews": "$1 {{PLURAL:$1|vuesehte|vuesehteh}}",
+       "lonelypages": "Eejhtegapth bielieh",
+       "uncategorizedpages": "Ov-kategorije bielieh",
+       "uncategorizedcategories": "Ov-kategorije kategorijeh",
+       "uncategorizedimages": "Ov-kategorije guvvieh",
+       "uncategorizedtemplates": "Ov-kategorije maaleh",
+       "unusedcategories": "Ov-nuhtjie kategorije",
+       "unusedimages": "Ov-nnuhtjie guvvieh",
+       "wantedcategories": "Vaajtelidh kategorijeh",
+       "wantedpages": "Vaajtelidh bielieh",
+       "mostlinked": "Jeenjebe lïenghkeh gåajkoe bielieh",
+       "mostlinkedcategories": "Jeenjebe lïenghke gåajkoe kategorijeh",
+       "mostlinkedtemplates": "Jeenjebe lïenghke gåajkoe malleh",
+       "mostcategories": "Bielieh meatan jïjnje kategorijeh",
+       "mostimages": "Jeenjebe lïenghke gåajkoe guvvieh",
+       "mostrevisions": "Bielieh meatan jïjnje gïehtjedammeh",
+       "prefixindex": "Prefiikse indeekse",
+       "shortpages": "Åenehks bielieh",
+       "longpages": "Guhkie bielieh",
+       "deadendpages": "Tsuvvedh bielieh",
+       "protectedpages": "Sïektjedh bielieh",
+       "listusers": "Nuhtjien lästoe",
+       "newpages": "Orre bielie",
+       "newpages-username": "Nuhtjiennomme:",
+       "ancientpages": "Båarasåabpoe bielieh",
+       "move": "Jåhta",
+       "movethispage": "Jåhta dïhte bielie",
+       "booksources": "Gärja gaaltjieh",
+       "booksources-search-legend": "Ohtsedh ihke gärja gaaltjieh",
+       "specialloguserlabel": "Nuhtjien:",
+       "speciallogtitlelabel": "Tiitele:",
+       "log": "Loggeh",
+       "all-logs-page": "Gaajhke loggeh",
+       "allpages": "Gaajhke bielieh",
+       "nextpage": "Minngebe bielie ($1)",
+       "prevpage": "Övtebe bielie ($1)",
+       "allpagesfrom": "Vuesehte bielieh goh aelkedh meatan:",
+       "allarticles": "Gaajhke bielieh",
+       "allpagessubmit": "Vaadtsa",
+       "allpagesprefix": "Vuesehte bielieh meatan prefihkse:",
+       "categories": "Karegorijeh",
+       "listusers-submit": "Vuesehte",
+       "emailuser": "E-påaste dïhte nuhtjien",
+       "emailpage": "E-påaste nuhtjien",
+       "defemailsubject": "{{SITENAME}} e-påaste",
+       "emailfrom": "Raejeste",
+       "emailto": "Gåajkoe",
+       "emailsubject": "Ïebne",
+       "emailmessage": "Dïjre",
+       "emailsend": "Seedtie",
+       "emailsent": "E-påaste seedtedh",
+       "watchlist": "Mov sïektjedhlästoe",
+       "mywatchlist": "Mov sïektjedhlästoe",
+       "removedwatchtext": "Bielie \"[[:$1]]\" lea sihkojuvvon raejeste [[Special:Watchlist|dov sïektjedhlästoe]].",
+       "watch": "Sïektjedh",
+       "watchthispage": "Sïektjedh dïhte bielie",
+       "unwatch": "Ov-sïektjedh",
+       "watchlist-details": "{{PLURAL:$1|$1 bielie|$1 bielieh}} sïektjedh (doekoe dïerhkestidhbielieh).",
+       "wlshowlast": "Vuesehte minngemes $1 täjmoeh $2 biejjieh",
+       "watching": "Sïektjeminie...",
+       "unwatching": "Ov-sïektjedh...",
+       "enotif_impersonal_salutation": "{{SITENAME}} nuhtjien",
+       "created": "skaepede",
+       "deletepage": "Tjåegkedh bielie",
+       "historywarning": "Vaaroehtidh: Bielie datne gïehtele ahte sihkut åtna histovrije:",
+       "actioncomplete": "Deahpadimmie voerkes",
+       "deletedtext": "\"$1\" lea sihkojuvvon.\nVuajna $2 ihke galtege bïjre männgan sihkojuvvonh.",
+       "dellogpage": "Sihkkun logge",
+       "deletecomment": "Gaavhtan ihke sihkkuma",
+       "deleteotherreason": "Jeatjebh/ehkstre gaavhtan:",
+       "deletereasonotherlist": "Jeatjebh gaavhtan",
+       "rollbacklink": "jurrelde bååstede",
+       "protectlogpage": "Vaarjelidh logge",
+       "prot_1movedto2": "[[$1]] jåhta gåajkoe [[$2]]",
+       "protect-legend": "Skylledh vaarjelidh",
+       "protectcomment": "Lahtestimmie:",
+       "protectexpiry": "Boarasnuvve:",
+       "protect_expiry_invalid": "Ov-jiltiige buaorasjnuvvenaigi.",
+       "protect_expiry_old": "Boarasnuvvenaigi lea vaesedh.",
+       "protect-text": "Daesnie dorje datne vuajna jih värrhtoedimmie vaarjelidhdaltese dejstie bielie '''$1'''.",
+       "protect-locked-access": "Dov nuhtjien åtna ijje luhpie gåajkoe värrhtoedimmie tjaeleste-vaarjelidh.\nDaaletje tjaeleste-vaarjelidh sïjsestäälninge ihke bielie '''$1''' lea:",
+       "protect-default": "(åvte-veeljeme)",
+       "protect-fallback": "Luhpie \"$1\"",
+       "protect-level-autoconfirmed": "Tjöödtjehtidh ov-registreered nuhtjienh",
+       "protect-level-sysop": "Barre reeredh",
+       "protect-summary-cascade": "viididuvvon",
+       "protect-expiring": "boarasnuvve $1 (UTC)",
+       "protect-cascade": "Vaarjelidh bielieh guosket sïjse dïhte bielie (viidit suodjaluse)",
+       "protect-cantedit": "Datne dorje ijje värrhtoedimmie vaarjelidhdaltese ihke dïhte bielie, ihke datne ijja åtna luhpie ahte värrhtoedimmie dïhte.",
+       "protect-expiry-options": "2 täjmoe:2 hours,1 biejjie:1 day,3 biejjie:3 days,1 våhkoe:1 week,2 våhkoe:2 weeks,1 aske:1 month,3 aske:3 months,6 aske:6 months,1 jaepie:1 year,gietjieloeves:infinite",
+       "restriction-type": "Permisjovne:",
+       "restriction-level": "Restriksjovne daltese:",
+       "restriction-edit": "Värrhtoedimmie",
+       "restriction-move": "Jåhta",
+       "restriction-create": "Skaepiedidh",
+       "restriction-level-sysop": "dïeves-vaarjelidh",
+       "undeleterevisions": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}} våarhkoe",
+       "undeletebtn": "Mahtsat",
+       "undelete-search-submit": "Ohtsedh",
+       "namespace": "Nommeïebne:",
+       "invert": "Jarkoe veeljeme",
+       "blanknamespace": "(Bielieh)",
+       "contributions": "Nuhtjien värrhtoedimmieh",
+       "mycontris": "Mov värrhtoedimmieh",
+       "contribsub2": "Ihke $1 ($2)",
+       "uctop": "(gïerege)",
+       "month": "Raejeste aske (jih övtebe):",
+       "year": "Raejeste jaepie (jih övtebe):",
+       "sp-contributions-newbies-sub": "Ihke orre nuhtjienh",
+       "sp-contributions-blocklog": "Tjöödtjehtidh logge",
+       "sp-contributions-talk": "Digkiedimmie",
+       "sp-contributions-username": "IP Tjaalesijjie jallh nuhtjiennomme:",
+       "sp-contributions-submit": "Ohtsedh",
+       "whatlinkshere": "Bilieh goh lïenghkeh diekie",
+       "whatlinkshere-title": "Bielieh goh lïenghke gåajkoe $1",
+       "whatlinkshere-page": "Bielie:",
+       "linkshere": "Tjuovvovasj bielie lïenghke gåajkoe '''[[:$1]]''':",
+       "nolinkshere": "Ijje bielieh lïenghke gåajkoe '''[[:$1]]'''.",
+       "isredirect": "bïjre-dirisjovne bielie",
+       "istemplate": "lasihuvvon goh maale",
+       "whatlinkshere-prev": "{{PLURAL:$1|övtebe|övtebe $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|minngebe|minngebe $1}}",
+       "whatlinkshere-links": "← lïenghkeh",
+       "blockip": "Tjöödtjehtidh nuhtjien",
+       "ipaddressorusername": "!!FUZZY!!IP Tjaalesijjie jallh nuhtjiennomme:",
+       "ipbother": "Jeatjebh tïjje:",
+       "ipboptions": "2 täjmoe:2 hours,1 biejjie:1 day,3 biejjie:3 days,1 våhkoe:1 week,2 våhkoe:2 weeks,1 aske:1 month,3 aske:3 months,6 aske:6 months,1 jaepie:1 year,gietjieloeves:infinite",
+       "ipblocklist": "Lästoe bijjelen tjöödtjehtidh IP tjaalesijjieh jih nuhtjiennommeh",
+       "ipblocklist-submit": "Ohtsedh",
+       "blocklink": "tjöödtjehtidh",
+       "unblocklink": "ov-tjöödtjehtidh",
+       "contribslink": "dåarjoeh",
+       "blocklogpage": "Tjöödtjehtidh logge",
+       "blocklogentry": "blåhkedidh \"[[$1]]\" $2 $3",
+       "lockdb": "Tjuevtedh daatabaase",
+       "lockbtn": "Tjuevtedh daatabaase",
+       "databasenotlocked": "Daatabaase lea ijje tjuevtedh.",
+       "move-page-legend": "Jåhta bielie",
+       "movearticle": "Jåhta bielie:",
+       "newtitle": "Gåajkoe orre tiitele:",
+       "move-watch": "Sïektjedh dïhte bielie",
+       "movepagebtn": "Jåhta bielie",
+       "pagemovedsub": "Jåhta lähkoe",
+       "articleexists": "Bielie meatan dïhte nomme gååvnese joe, jallh\nnome dov åtna veeljeme lea ijje jiiltige.\nGïemhpes veeljeme jeatjebh nomme.",
+       "movetalk": "Jåhta aaj dïerkestidhbielie, bïjre dïhte gååvnese.",
+       "movelogpage": "Jåhta logge",
+       "movereason": "Gaavhtan:",
+       "revertmove": "jåhta bååstede",
+       "export": "Ehksporte bielieh",
+       "export-submit": "Ehksporte",
+       "export-addcat": "Lissiehtidh",
+       "export-templates": "Inkludera mallar",
+       "allmessages": "Systeeme dïrje",
+       "allmessagesname": "Nomme",
+       "thumbnail-more": "Vijriedidh",
+       "thumbnail_error": "Båajhtode nuelesne skaepede dejstie miniatyvreguvvie: $1",
+       "import": "Imporhte bielieh",
+       "import-interwiki-submit": "Imporhte",
+       "importstart": "Imporhte bielieh...",
+       "import-revision-count": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}",
+       "importfailed": "Imporhte steegkeldahkesne: $1",
+       "importsuccess": "Imporhte lähkoe!",
+       "importlogpage": "Imporhte logge",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}} raejeste $2",
+       "tooltip-pt-userpage": "Mov nuhtjienbielie",
+       "tooltip-pt-mytalk": "Mov dïjveldidh bielie",
+       "tooltip-pt-preferences": "Mov sïjsesäälningeh",
+       "tooltip-pt-watchlist": "Lästoe bijjelen bielieh goh sïektjedh",
+       "tooltip-pt-mycontris": "Lästoe bijjelen mov värrhtoedimmie",
+       "tooltip-pt-login": "Dov åådtje logge sïjse, bine dïhte lea ijje daerpies.",
+       "tooltip-pt-logout": "Logge ålkone",
+       "tooltip-ca-talk": "Dïjveldidh bïjre sisvege bieliej",
+       "tooltip-ca-edit": "Dov dorje värrhtoedimmie dïhte bielie. Nuhtjie åvte-vuesiehtidh båaloe åvte spååredh.",
+       "tooltip-ca-addsection": "Lissiehtidh lahtestimmie gåajkoe dïhte dïjveldidh.",
+       "tooltip-ca-viewsource": "Dïhte bielie lea vaarjelidh. Dov dorje vuesehte gaaltjiej.",
+       "tooltip-ca-protect": "Vaarjelidh dïhte bielie",
+       "tooltip-ca-delete": "Tjåegkedh dïhte bielie",
+       "tooltip-ca-move": "Jåhta dïhte bielie",
+       "tooltip-ca-watch": "Lissiehtidh dïhte bielie gåajkoe dov sïektjedhlästoe",
+       "tooltip-ca-unwatch": "Sirdde dïhte bielie raejeste dov sïektjedhlästoe",
+       "tooltip-search": "Ohtsedh {{SITENAME}}sne",
+       "tooltip-p-logo": "Åejjiebielie",
+       "tooltip-n-mainpage": "Gåajkoe aalkoebielie vaadtsa",
+       "tooltip-n-portal": "Bïjre prosjekte, mij dov dorje, lij dov gaavnedh daeverh",
+       "tooltip-n-currentevents": "Bïevnesh bïjre daaletje deahpadimmieh",
+       "tooltip-n-recentchanges": "Lästoe männganes sjiehtedh bijjelen nille {{SITENAME}}.",
+       "tooltip-n-randompage": "Vaadtsa summal bielie",
+       "tooltip-n-help": "Viehkie jih bïevnesh {{SITENAME}} bïjre.",
+       "tooltip-t-whatlinkshere": "Lästoe bijjelen gaajhke wiki bielieh goh lïenghke diekie",
+       "tooltip-feed-rss": "RSS feed ihke dïhte bielie",
+       "tooltip-feed-atom": "Atom feed ihke dïhte bielie",
+       "tooltip-t-contributions": "Vuesehte lästoe bijjelen värrhtoedimmieh dejstie dïhte nuhtjien",
+       "tooltip-t-emailuser": "Seedtedh e-påaste gåajkoe dïhte nuhtjien",
+       "tooltip-t-upload": "Sadde guvvir jallh meedia baalkah",
+       "tooltip-t-specialpages": "Lästoe gaajhke joekoen bielieh bijjelen",
+       "tooltip-ca-nstab-user": "Vuesehte nuhtjien bieliej",
+       "tooltip-ca-nstab-project": "Vuesehte prosjekte bieliej",
+       "tooltip-ca-nstab-image": "Vuesehte guvvie bieliej",
+       "tooltip-ca-nstab-template": "Vuesehte maalej",
+       "tooltip-ca-nstab-help": "Vuesehte viehkie bieliej",
+       "tooltip-ca-nstab-category": "Vuesehte kategorije bieliej",
+       "tooltip-minoredit": "Mïerhkesjidh dïhte lea ohtje värrhtoedimmie",
+       "tooltip-save": "Spååredh dov värrhtoedimmieh",
+       "tooltip-preview": "Åvte-vuesiehtidh dov värrhtoedimmie, gïemhpes nuhtjie dïhte åvte spååredh!",
+       "tooltip-diff": "Vuesehte guhte värrhtoedimmieh dov åtna dorjeme dejstie tjaalege.",
+       "tooltip-compareselectedversions": "Vuesehte joekehts gaskesne dah göökte vïhtesjidh låhkoeh dejstie dïhte bielie.",
+       "tooltip-watch": "Lissiehtidh dïhte bielie gåajkoe dov sïektjedhlästoe",
+       "siteuser": "{{SITENAME}} nuhtjien $1",
+       "siteusers": "{{SITENAME}} nuhtjien(h) $1",
+       "previousdiff": "← Övtebe joekehts",
+       "nextdiff": "Minngebe joekehts →",
+       "file-info": "baalka stoerre: $1, MIME-vuekie: $2",
+       "file-info-size": "$1 × $2 pixel, baalka stoerre: $3, MIME-vuekie: $4",
+       "file-nohires": "Ijje jïlle bäjjeselöösninge jaksoes.",
+       "svg-long-desc": "SVG baalka, maadth-stoerre $1 × $2 pixel, baalka stoerre: $3",
+       "show-big-image": "Dïeves stoerre",
+       "newimages": "Gallerije dejstie orre baalkah",
+       "ilsubmit": "Ohtsedh",
+       "metadata": "Metadaata",
+       "metadata-expand": "Vuesehte vijriedidh detaaljeh",
+       "metadata-collapse": "Gaptjedh vijrede daeverh",
+       "metadata-fields": "EXIF-dajve goh lästoe sïjse dïhte dïrje vuesehte nille guvviebielie gåessie metadaatataabelle lea unniedidh.\nJeatjebh dajveh lea gaptjedh goh sïejhme, bine vuesehte gåessie taabelle stoerre.\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": "Gamte",
+       "exif-imagelength": "Gåhkoe",
+       "exif-model": "Guvviedahke hammohke",
+       "exif-software": "Möövhkesvaare nuhtjie",
+       "exif-filesource": "Guvvie gaaltjie",
+       "exif-gpslatituderef": "Noerhte jallh Åarjetje Laatituude",
+       "exif-gpslatitude": "Laatituude",
+       "exif-gpslongituderef": "Lulnie jallh Jillege Låångdituude",
+       "exif-gpslongitude": "Låångdituude",
+       "exif-gpsareainformation": "Nomme ihke GPS davje",
+       "exif-meteringmode-0": "Ammes",
+       "exif-meteringmode-255": "Jeatjebh",
+       "exif-lightsource-0": "Ammes",
+       "exif-scenecapturetype-0": "Sïejhme",
+       "exif-contrast-1": "Möövhkes",
+       "exif-contrast-2": "Garre",
+       "exif-sharpness-1": "Möövhkes",
+       "exif-sharpness-2": "Garre",
+       "exif-subjectdistancerange-0": "Ammes",
+       "exif-gpslatitude-n": "Noerhte latituude",
+       "exif-gpslatitude-s": "Åarjetje laatituude",
+       "exif-gpslongitude-e": "Lulnie låångdituude",
+       "exif-gpslongitude-w": "Jillege låångdituude",
+       "namespacesall": "gaajhke",
+       "monthsall": "gaajhke",
+       "scarytranscludetoolong": "[URL lea ihke guhkie; gaatelassjedh]",
+       "confirm-purge-top": "Döömedh cache ihke dïhte bielie?",
+       "imgmultipageprev": "← övtebe bielie",
+       "imgmultipagenext": "minngebe bielie →",
+       "imgmultigo": "Vaadtsa!",
+       "table_pager_next": "Minngebe bielie",
+       "table_pager_prev": "Övtebe bielie",
+       "table_pager_first": "Voestemes bielie",
+       "table_pager_last": "Minngemes bielie",
+       "table_pager_limit_submit": "Vaadtsa",
+       "autosumm-new": "Orre bielie: $1",
+       "watchlisttools-view": "Sïektjedhlästoe",
+       "watchlisttools-edit": "Vuesehte jih värrhtoedimmie sïektjedhlästoe",
+       "watchlisttools-raw": "Värrhtordimmie saajpe sïektjedhlästoe",
+       "unknown_extension_tag": "Ammes ekshtensjovne lissie \"$1\"",
+       "version": "Låhkoe",
+       "specialpages": "Joekoen bielieh"
 }
index 94e2a25..fcec449 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Hakka"
-        ]
-    },
-    "sunday": "Svondo",
-    "monday": "Muvhuro",
-    "tuesday": "Chipiri",
-    "wednesday": "Chitatu",
-    "thursday": "China",
-    "friday": "Chishanu",
-    "saturday": "Mugovera",
-    "january": "Ndira",
-    "february": "Kukadzi",
-    "march": "Kurume",
-    "april": "Kubvumbi",
-    "may_long": "Chivabvu",
-    "june": "Chikumi",
-    "july": "Chikunguru",
-    "august": "Nyamavhuvhu",
-    "september": "Gunyana",
-    "october": "Gumiguru",
-    "november": "Mbudzi",
-    "december": "Zvita",
-    "january-gen": "Ndira",
-    "february-gen": "Kukadzi",
-    "march-gen": "Kurume",
-    "april-gen": "Kubvumbi",
-    "may-gen": "Chivabvu",
-    "june-gen": "Chikumi",
-    "july-gen": "Chikunguru",
-    "august-gen": "Nyamavhuvhu",
-    "september-gen": "Gunyana",
-    "october-gen": "Gumiguru",
-    "november-gen": "Mbudzi",
-    "december-gen": "Zvita",
-    "cancel": "Kanzura",
-    "mytalk": "Hurukuro dzangu",
-    "navigation": "Banguranyika",
-    "qbedit": "Chinja",
-    "help": "Rubatsiro",
-    "search": "Tsvaga",
-    "searchbutton": "Tsvaga",
-    "go": "Enda",
-    "searcharticle": "Enda",
-    "history_short": "Zvemakare",
-    "printableversion": "Rinoita kuprinta",
-    "permalink": "Zvikochekero Zvisingachinje",
-    "edit": "Chinja",
-    "delete": "Bharanura",
-    "protect": "Chengetedza",
-    "talk": "Hurukuro",
-    "toolbox": "Maturuzi",
-    "otherlanguages": "Mimwe Mitauro",
-    "currentevents": "Zvirikuitika",
-    "currentevents-url": "Project:Zvirikuitika",
-    "disclaimers": "Matandanyadzi",
-    "edithelp": "Mashandurirwo",
-    "mainpage": "Peji Rekutanga",
-    "mainpage-description": "Peji Rekutanga",
-    "portal": "Mukova wegutse",
-    "youhavenewmessagesmulti": "Une mashoko matsva pa$1",
-    "editsection": "chinja",
-    "editold": "chinja",
-    "nstab-main": "Gani",
-    "viewsource": "Wona mabviro",
-    "yourname": "Zita:",
-    "yourpassword": "Password:",
-    "yourpasswordagain": "Nyorazve password:",
-    "remembermypassword": "Ndiyeuke (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "login": "Gamuchirwa",
-    "userlogin": "Gamuchirwa / Gadzira Akaunzi",
-    "logout": "Chibuda",
-    "userlogout": "Chibuda",
-    "notloggedin": "Hauna kugamuchirwa",
-    "createaccount": "Gadzira Akaunzi",
-    "summary": "Muchidimbu:",
-    "minoredit": "Uku kushandurwa kudiki",
-    "watchthis": "Ringa peji rino",
-    "savearticle": "Kotsa peji",
-    "showpreview": "Ratidza chipandwa",
-    "showdiff": "Ratidza zvasandurwa",
-    "mypreferences": "Zvandinosarudza",
-    "prefs-rc": "Zvaba Kuchinjwa",
-    "searchresultshead": "Tsvaga",
-    "youremail": "E-mail:",
-    "username": "Zita:",
-    "recentchanges": "Zvaba Kuchinjwa",
-    "recentchangeslinked": "Zvinoenderana nezvachinjwa",
-    "recentchangeslinked-feed": "Zvinoenderana nezvachinjwa",
-    "recentchangeslinked-toolbox": "Zvinoenderana nezvachinjwa",
-    "upload": "Isa fayera",
-    "uploadbtn": "Isa fayera",
-    "uploadnologin": "Hauna kugamuchirwa",
-    "watchthisupload": "Ringa peji rino",
-    "randompage": "Peji nhemwa",
-    "move": "Chichinura",
-    "movethispage": "Chichinura kupeji iri",
-    "watchlist": "Zvandakarinda",
-    "mywatchlist": "Zvandakarinda",
-    "watch": "Rinda",
-    "watchthispage": "Ringa peji rino",
-    "prot_1movedto2": "[[$1]] rachichinurwa ku [[$2]]",
-    "restriction-edit": "Chinja",
-    "restriction-move": "Chichinura",
-    "undelete-search-submit": "Tsvaga",
-    "contributions": "Mushandisi Kanzatu",
-    "mycontris": "Kanzatu kangu",
-    "sp-contributions-submit": "Tsvaga",
-    "whatlinkshere": "Zvakakochekera pano",
-    "move-page-legend": "Chichinura peji",
-    "movepagebtn": "Chichinura peji",
-    "movereason": "Chikonzero",
-    "allmessages": "Mashoko esystem",
-    "tooltip-pt-preferences": "Zvandinosarudza",
-    "tooltip-pt-logout": "Chibuda",
-    "tooltip-ca-move": "Chichinura kupeji iri",
-    "tooltip-p-logo": "Peji Rekutanga",
-    "table_pager_limit_submit": "Enda",
-    "specialpages": "Mapeji akakosha"
+       "@metadata": {
+               "authors": [
+                       "Hakka"
+               ]
+       },
+       "sunday": "Svondo",
+       "monday": "Muvhuro",
+       "tuesday": "Chipiri",
+       "wednesday": "Chitatu",
+       "thursday": "China",
+       "friday": "Chishanu",
+       "saturday": "Mugovera",
+       "january": "Ndira",
+       "february": "Kukadzi",
+       "march": "Kurume",
+       "april": "Kubvumbi",
+       "may_long": "Chivabvu",
+       "june": "Chikumi",
+       "july": "Chikunguru",
+       "august": "Nyamavhuvhu",
+       "september": "Gunyana",
+       "october": "Gumiguru",
+       "november": "Mbudzi",
+       "december": "Zvita",
+       "january-gen": "Ndira",
+       "february-gen": "Kukadzi",
+       "march-gen": "Kurume",
+       "april-gen": "Kubvumbi",
+       "may-gen": "Chivabvu",
+       "june-gen": "Chikumi",
+       "july-gen": "Chikunguru",
+       "august-gen": "Nyamavhuvhu",
+       "september-gen": "Gunyana",
+       "october-gen": "Gumiguru",
+       "november-gen": "Mbudzi",
+       "december-gen": "Zvita",
+       "cancel": "Kanzura",
+       "mytalk": "Hurukuro dzangu",
+       "navigation": "Banguranyika",
+       "qbedit": "Chinja",
+       "help": "Rubatsiro",
+       "search": "Tsvaga",
+       "searchbutton": "Tsvaga",
+       "go": "Enda",
+       "searcharticle": "Enda",
+       "history_short": "Zvemakare",
+       "printableversion": "Rinoita kuprinta",
+       "permalink": "Zvikochekero Zvisingachinje",
+       "edit": "Chinja",
+       "delete": "Bharanura",
+       "protect": "Chengetedza",
+       "talk": "Hurukuro",
+       "toolbox": "Maturuzi",
+       "otherlanguages": "Mimwe Mitauro",
+       "currentevents": "Zvirikuitika",
+       "currentevents-url": "Project:Zvirikuitika",
+       "disclaimers": "Matandanyadzi",
+       "edithelp": "Mashandurirwo",
+       "mainpage": "Peji Rekutanga",
+       "mainpage-description": "Peji Rekutanga",
+       "portal": "Mukova wegutse",
+       "youhavenewmessagesmulti": "Une mashoko matsva pa$1",
+       "editsection": "chinja",
+       "editold": "chinja",
+       "nstab-main": "Gani",
+       "viewsource": "Wona mabviro",
+       "yourname": "Zita:",
+       "yourpassword": "Password:",
+       "yourpasswordagain": "Nyorazve password:",
+       "remembermypassword": "Ndiyeuke (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "login": "Gamuchirwa",
+       "userlogin": "Gamuchirwa / Gadzira Akaunzi",
+       "logout": "Chibuda",
+       "userlogout": "Chibuda",
+       "notloggedin": "Hauna kugamuchirwa",
+       "createaccount": "Gadzira Akaunzi",
+       "summary": "Muchidimbu:",
+       "minoredit": "Uku kushandurwa kudiki",
+       "watchthis": "Ringa peji rino",
+       "savearticle": "Kotsa peji",
+       "showpreview": "Ratidza chipandwa",
+       "showdiff": "Ratidza zvasandurwa",
+       "mypreferences": "Zvandinosarudza",
+       "prefs-rc": "Zvaba Kuchinjwa",
+       "searchresultshead": "Tsvaga",
+       "youremail": "E-mail:",
+       "username": "Zita:",
+       "recentchanges": "Zvaba Kuchinjwa",
+       "recentchangeslinked": "Zvinoenderana nezvachinjwa",
+       "recentchangeslinked-feed": "Zvinoenderana nezvachinjwa",
+       "recentchangeslinked-toolbox": "Zvinoenderana nezvachinjwa",
+       "upload": "Isa fayera",
+       "uploadbtn": "Isa fayera",
+       "uploadnologin": "Hauna kugamuchirwa",
+       "watchthisupload": "Ringa peji rino",
+       "randompage": "Peji nhemwa",
+       "move": "Chichinura",
+       "movethispage": "Chichinura kupeji iri",
+       "watchlist": "Zvandakarinda",
+       "mywatchlist": "Zvandakarinda",
+       "watch": "Rinda",
+       "watchthispage": "Ringa peji rino",
+       "prot_1movedto2": "[[$1]] rachichinurwa ku [[$2]]",
+       "restriction-edit": "Chinja",
+       "restriction-move": "Chichinura",
+       "undelete-search-submit": "Tsvaga",
+       "contributions": "Mushandisi Kanzatu",
+       "mycontris": "Kanzatu kangu",
+       "sp-contributions-submit": "Tsvaga",
+       "whatlinkshere": "Zvakakochekera pano",
+       "move-page-legend": "Chichinura peji",
+       "movepagebtn": "Chichinura peji",
+       "movereason": "Chikonzero",
+       "allmessages": "Mashoko esystem",
+       "tooltip-pt-preferences": "Zvandinosarudza",
+       "tooltip-pt-logout": "Chibuda",
+       "tooltip-ca-move": "Chichinura kupeji iri",
+       "tooltip-p-logo": "Peji Rekutanga",
+       "table_pager_limit_submit": "Enda",
+       "specialpages": "Mapeji akakosha"
 }
index 7587cea..b538424 100644 (file)
        "passwordreset-emailelement": "Magaca gudagalka: $1\nEreysirka kumeelgaarka ah: $2",
        "passwordreset-emailerror-capture": "E-mail xasuus ah ayaa la sameeyay, oo ka arki kartid hoosta,laakiin wuxuu ku guul dareestay in isticmaalaha loo diro: $1",
        "changeemail": "Bedel ciwaanka E-mailka",
-       "changeemail-header": "Bedel ciwaanka e-mailka akoonka",
        "changeemail-oldemail": "Ciwaanka e-mailka hadda jiro:",
        "changeemail-newemail": "Ciwaan e-mail oo cusub:",
        "changeemail-none": "(waxna)",
        "changeemail-submit": "Bedel e-mailka",
-       "changeemail-cancel": "Ka noqo",
        "bold_sample": "Far butac ah",
        "bold_tip": "Far butac ah",
        "italic_sample": "Farta caatada ah",
        "searchrelated": "La xiriiro",
        "searchall": "Dhamaan",
        "showingresults": "Waxaa hoos laga heley{{PLURAL:$1|'''1''' natiijo|'''$1''' natiijooyin}} ka biloow #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Natiijada  '''$1''' ee '''$3'''|Natiijooyinka '''$1 - $2'''  oo ah  '''$3'''}} ee '''$4'''",
        "search-nonefound": "Wax natiijo oo ka soo baxay ma jirto wixii aad raadisay",
        "powersearch-legend": "Sidii aad wax uugu raadin laheed",
        "powersearch-ns": "ka raadi xarun magaceedka:",
        "nmembers": " $1 {{PLURAL:$1|ka mid ah|ka mid ah}}",
        "lonelypages": "Boggaga agoonta ah",
        "uncategorizedpages": "Maqaalada aan la aruurin",
-       "popularpages": "Boggaga caanka ah",
        "prefixindex": "Dhamaan bogagga leh qoraalka hore",
        "shortpages": "Boggaga gaaban",
        "longpages": "Boggaga dhaadheer",
        "pager-older-n": "{{PLURAL:$1|ka duqsan 1|ka duqsan $1}}",
        "booksources": "Xogta buuga",
        "booksources-search-legend": "Raadi xogta buuga",
-       "booksources-go": "Soco",
        "log": "Guda galayaasha",
        "allpages": "Dhamaan bogagga",
        "nextpage": "Bogga ku xiga ($1)",
        "unwatch": "Ha waardiyeynin",
        "unwatchthispage": "Jooji waardiyeyntiisa",
        "watchlist-details": "{{PLURAL:$1|$1 bog|$1 boggag ah}}  aa ku jirto liiskaaga waardiyaha, ma lagu darin boggaga wadahadalka.",
-       "wlshowlast": "Itus wixii ka danbeeyay $1 saacadood $2 maalmood $3",
+       "wlshowlast": "Itus wixii ka danbeeyay $1 saacadood $2 maalmood",
        "watchlist-options": "Dooqyada liiska waardiyaha",
        "watching": "Daawasho...",
        "enotif_subject_created": "{{SITENAME}} Bogga $1 Qof ayaa sameeyey {{gender:$2|$2}}",
        "metadata-fields": "Sawirka qeybihiisa metadata oo ku tixan fariintaan waxaa lagu dari doonaa bogga sawirka meesha laga arko markii miiska metadata la qariyo.Kuwa kale waxaa loo qarinaa sida default.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-iimcategory": "Qeybta",
        "exif-dc-rights": "Xuquuqaha",
-       "watchlistall2": "dhamaan",
        "namespacesall": "dhamaan",
        "monthsall": "Dhamaan",
        "confirmemail_noemail": "Kuma haysatid cinwaan E-boosto sax [[Special:Preferences|isticmaala dooqiisa]].",
index cda9eba..1f216ea 100644 (file)
        "passwordreset-emailsent-capture": "U dërgua një e-mail kujtesë, i cili tregohet më poshtë.",
        "passwordreset-emailerror-capture": "U dërgua një e-mail kujtesë, i cili tregohet më poshtë, por dërgesa për tek përdoruesi qe e pamundur: $1",
        "changeemail": "Ndrysho postën elektronike",
-       "changeemail-header": "Ndrysho llogarinë e adresës së postës elektronike",
        "changeemail-text": "Plotësoni këtë formular për të ndryshuar adresën tuaj të postës elektronike. Ju duhet të shkruani fjalëkalimin tuaj për të konfirmuar këtë ndryshim.",
        "changeemail-no-info": "Ju duhet të identifikoheni në mënyrë që të keni të drejtë hyrjeje në këtë faqe.",
        "changeemail-oldemail": "Posta elektronike e aktuale:",
        "changeemail-newemail": "Posta elektronike e re:",
        "changeemail-none": "(asgjë)",
        "changeemail-submit": "Ndrysho postën elektronike",
-       "changeemail-cancel": "Anulo",
        "bold_sample": "Stil i theksuar i tekstit",
        "bold_tip": "Stil i theksuar i tekstit",
        "italic_sample": "Tekst i pjerrët",
        "mergehistory-same-destination": "Burimi dhe faqja e përcaktimit nuk mund të jenë të njëjta",
        "mergehistory-reason": "Arsyeja:",
        "mergelog": "Regjistri i bashkimeve",
-       "pagemerge-logentry": "u bashkua [[$1]] në [[$2]] (versione deri më $3)",
        "revertmerge": "Ndaj",
        "mergelogpagetext": "Më poshtë jepet një listë e bashkimeve së fundmi nga historiku i një faqeje në historikun e një faqeje tjetër.",
        "history-title": "Historiku i redaktimeve të \"$1\"",
        "searchrelated": "të ngjashme",
        "searchall": "të gjitha",
        "showingresults": "Më poshtë tregohen {{PLURAL:$1|'''1''' përfundim|'''$1''' përfundime}} duke filluar nga #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Rezultati '''$1''' nga '''$3'''|Rezultatet '''$1 - $2''' nga '''$3'''}} për '''$4'''",
        "search-nonefound": "Nuk ka rezultate që përputhen me kërkesën.",
        "powersearch-legend": "Kërkim i përparuar",
        "powersearch-ns": "Kërkim në hapësira:",
        "statistics": "Statistika",
        "statistics-header-pages": "Statistikat e faqes",
        "statistics-header-edits": "Statistikat e redaktimit",
-       "statistics-header-views": "Statistikat e shikimit",
        "statistics-header-users": "Statistikat e përdoruesve",
        "statistics-header-hooks": "Statistikat të tjera",
        "statistics-articles": "Përmbajtja e faqeve",
        "statistics-files": "Skedat e ngarkuara",
        "statistics-edits": "Redaktimet e faqes që kur {{SITENAME}} u regjistrua",
        "statistics-edits-average": "Ndryshime mesatare për faqe",
-       "statistics-views-total": "Shikimet gjithsej",
-       "statistics-views-total-desc": "Shikimet tek faqet joekzistuese dhe faqet speciale nuk janë të përfshira",
-       "statistics-views-peredit": "Shikimet për redaktim",
        "statistics-users": "[[Special:ListUsers|Përdoruesit]] e regjistruar",
        "statistics-users-active": "Përdoruesit aktiv",
        "statistics-users-active-desc": "Përdoruesit që kanë së paku një veprim në {{PLURAL:$1|ditën|$1 ditët}} e fundit",
-       "statistics-mostpopular": "Faqet më të shikuara",
        "doubleredirects": "Përcjellime dopjo",
        "doubleredirectstext": "Kjo faqe liston faqet përcjellëse tek faqet e tjera përcjellëse.\nSecili rresht përmban lidhjet tek përcjellimi i parë dhe përcjellimi i dytë, gjithashtu synimin e përcjellimit të dytë, që është zakonisht faqja synuese '''e vërtetë''', që faqja w parë duhej të ishte përcjellëse e kësaj faqeje.\n<del>Kalimet nga</del> hyrjet janë zgjidhur.",
        "double-redirect-fixed-move": "[[$1]] u zhvendos, tani është gjendet në [[$2]]",
        "uncategorizedtemplates": "Stampa të pakategorizuara",
        "unusedcategories": "Kategori të papërdorura",
        "unusedimages": "Figura të papërdorura",
-       "popularpages": "Artikuj të frekuentuar shpesh",
        "wantedcategories": "Kategori më të dëshiruara",
        "wantedpages": "Artikuj më të dëshiruar",
        "wantedpages-badtitle": "Titull i pavlefshëm në vendosjen e rezultateve: $1",
        "querypage-disabled": "Kjo faqe speciale është çaktivizuar për arsye të performancës.",
        "booksources": "Burime librash",
        "booksources-search-legend": "Kërkim burimor librash",
-       "booksources-go": "Shko",
        "booksources-text": "Më posht është një listë me lidhje të cilët shesin ose përdorin libra dhe munden të kenë informacione për librat që kërkoni ju:",
        "booksources-invalid-isbn": "ISBN-ja e dhënë nuk duket të jetë e vlefshme; kontrolloni oër gabime gjatë kopjimit nga burimi origjinal.",
        "specialloguserlabel": "Performuesi:",
        "wlheader-enotif": "Njoftimi me email është lejuar.",
        "wlheader-showupdated": "Faqet që kanë ndryshuar nga vizita juaj e fundit do të tregohen të '''trasha'''",
        "wlnote": "Më poshtë {{PLURAL:$1|është ndryshimi i fundit|janë '''$1''' ndryshimet e fundit}} në {{PLUARAL:$2:orën e fundit|'''$2''' orët e fundit}}, që nga $3, $4.",
-       "wlshowlast": "Trego $1 orët $2 ditët $3",
+       "wlshowlast": "Trego $1 orët $2 ditët",
        "watchlist-options": "Mundësitë e listës mbikqyrëse",
        "watching": "Duke mbikqyrur...",
        "unwatching": "Duke çmbikqyrur...",
        "import": "Importoni faqe",
        "importinterwiki": "Import ndër-wiki",
        "import-interwiki-text": "Zgjidhni një wiki dhe titull faqeje për të importuar.\nDatat e versioneve dhe emrat e redaktuesve do të ruhen.\nTë gjitha veprimet e importit transwiki janë të regjistruara tek [[Special:Log/import|registri i importimeve]].",
-       "import-interwiki-source": "Burimi wiki/faqe",
        "import-interwiki-history": "Kopjo të gjitha versionet e historisë për këtë faqe",
        "import-interwiki-templates": "Përfshini të gjitha stampat",
        "import-interwiki-submit": "Importo",
        "simpleantispam-label": "Kontroll anti-spam.\n'''MOS''' e plotësoni këtë!",
        "pageinfo-title": "Informacion për \" $1 \"",
        "pageinfo-header-edits": "Redaktimet",
-       "pageinfo-views": "Numri i shikimeve",
        "pageinfo-watchers": "Numri i mbikqyrësve",
        "pageinfo-edits": "Numri i redaktimeve",
        "pageinfo-authors": "Numri i autorëve të veçantë",
        "exif-urgency-low": "Ulët ( $1 )",
        "exif-urgency-high": "E Lartë ( $1 )",
        "exif-urgency-other": "Prioritet i përcaktuar nga përdoruesi ( $1 )",
-       "watchlistall2": "të gjitha",
        "namespacesall": "të gjitha",
        "monthsall": "të gjitha",
        "confirmemail": "Vërtetoni adresën tuaj",
        "logentry-newusers-create2": "$1 krijoi një llogari $3",
        "logentry-newusers-autocreate": "Llogaria $1 u krijua automatikisht",
        "rightsnone": "(asgjë)",
+       "revdelete-summary": "përmbledhja redaktimit",
        "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:",
index ea4e522..bf93633 100644 (file)
        "otherlanguages": "Други језици",
        "redirectedfrom": "(преусмерено са $1)",
        "redirectpagesub": "Преусмерење",
+       "redirectto": "Преусмерава на:",
        "lastmodifiedat": "Ова страница је последњи пут измењена $1 у $2.",
        "viewcount": "Ова страница је прегледана {{PLURAL:$1|једанпут|$1 пута|$1 пута}}.",
        "protectedpage": "Заштићена страница",
        "badtitle": "Неисправан наслов",
        "badtitletext": "Наслов странице је неисправан, празан или је међујезички или међувики наслов погрешно повезан.\nМожда садржи знакове који се не могу користити у насловима.",
        "perfcached": "Следећи подаци су кеширани и могу бити застарели. Кеш садржи највише {{PLURAL:$1|један резултат|$1 резултата|$1 резултата}}.",
-       "perfcachedts": "Следећи подаци су кеширани и последњи пут су ажурирани $2 у $3. У кешу {{PLURAL:$4|је доступан највише један резултат|су доступна највише $4 резултата|је доступно највише $4 резултата}}.",
+       "perfcachedts": "Следећи подаци су кеширани и последњи пут су ажурирани $2 у $3. У кешу {{PLURAL:$4|1=је доступан највише један резултат|су доступна највише $4 резултата|је доступно највише $4 резултата}}.",
        "querypage-no-updates": "Ажурирање ове странице је тренутно онемогућено.\nПодаци који се овде налазе могу бити застарели.",
        "viewsource": "Изворни код",
        "viewsource-title": "Приказ извора странице $1",
        "createacct-another-submit": "Отвори још један налог",
        "createacct-benefit-heading": "{{SITENAME}} је направљен од стране људи као што сте ви.",
        "createacct-benefit-body1": "{{PLURAL:$1|измена}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|страница}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|страница|странице}}",
        "createacct-benefit-body3": "скорашњих {{PLURAL:$1|доприноса}}",
        "badretype": "Унете лозинке се не поклапају.",
        "userexists": "Корисничко име је заузето. Изаберите друго.",
        "loginerror": "Грешка при пријављивању",
-       "createacct-error": "Ð\94оÑ\88ло Ñ\98е Ð´Ð¾ Ð³Ñ\80еÑ\88ке Ð¿Ñ\80и ÐºÑ\80еирању налога",
+       "createacct-error": "Ð\94оÑ\88ло Ñ\98е Ð´Ð¾ Ð³Ñ\80еÑ\88ке Ð¿Ñ\80и Ð¾Ñ\82варању налога",
        "createaccounterror": "Не могу да отворим налог: $1",
        "nocookiesnew": "Кориснички налог је отворен, али нисте пријављени.\n{{SITENAME}} користи колачиће за пријаву. Вама су колачићи онемогућени.\nОмогућите их, па се онда пријавите са својим корисничким именом и лозинком.",
        "nocookieslogin": "{{SITENAME}} користи колачиће за пријављивање корисника.\nВама су колачићи онемогућени. Омогућите их и покушајте поново.",
        "passwordsent": "Нова лозинка је послата на е-адресу {{GENDER:$1|корисника|кориснице|корисника}} $1.\nПријавите се пошто је примите.",
        "blocked-mailpassword": "Вашој ИП адреси је онемогућено уређивање страница, као и могућност захтевања нове лозинке.",
        "eauthentsent": "На наведену е-адресу је послат потврдни код.\nПре него што пошаљемо даљње поруке, пратите упутства с е-поште да бисте потврдили да сте ви отворили налог.",
-       "throttled-mailpassword": "Порука за промену лозинке је послата у {{PLURAL:$1|последњих сат времена|последња $1 сата|последњих $1 сати}}.\nДа бисмо спречили злоупотребу, подсетник шаљемо само једном у року од {{PLURAL:$1|сат времена|$1 сата|$1 сати}}.",
+       "throttled-mailpassword": "Порука за промену лозинке је послата у {{PLURAL:$1|1=последњих сат времена|последња $1 сата|последњих $1 сати}}.\nДа бисмо спречили злоупотребу, подсетник шаљемо само једном у року од {{PLURAL:$1|1=сат времена|$1 сата|$1 сати}}.",
        "mailerror": "Грешка при слању поруке: $1",
        "acct_creation_throttle_hit": "Посетиоци овог викија који користе вашу ИП адресу су већ отворили {{PLURAL:$1|1=један налог|$1 налога|$1 налога}} претходни дан, што је највећи дозвољени број у том временском периоду.\nЗбог тога посетиоци с ове ИП адресе тренутно не могу отворити више налога.",
        "emailauthenticated": "Ваша е-адреса је потврђена $2 у $3.",
        "passwordreset-emailsent-capture": "Послат је подсетник преко е-поште (приказан доле).",
        "passwordreset-emailerror-capture": "Е-порука за ресетовање лозинке, приказана испод је послата, али слање {{GENDER:$2|кориснику|корисници}} није успело: $1",
        "changeemail": "Промена е-адресе",
-       "changeemail-header": "Промените е-адресу налога",
        "changeemail-text": "Попуните овај образац да бисте променили своју е-адресу. Мораћете да унесете лозинку да потврдите измену.",
        "changeemail-no-info": "Морате бити пријављени да бисте приступили овој страници.",
        "changeemail-oldemail": "Тренутна е-адреса:",
        "changeemail-none": "(ништа)",
        "changeemail-password": "Ваша лозинка:",
        "changeemail-submit": "Промени",
-       "changeemail-cancel": "Откажи",
        "changeemail-throttled": "Превише пута сте покушали да се пријавите.\nМолимо вас да сачекате $1 пре него што покушате поново.",
        "resettokens": "Ресетовање жетона",
        "resettokens-no-tokens": "Нема жетона за ресетовање.",
        "showpreview": "Прикажи претпреглед",
        "showdiff": "Прикажи измене",
        "blankarticle": "<strong>Упозорење:</strong> страница коју правите нема никакав садржај.\nАко још једном притиснете „{{int:savearticle}}“ направићете страницу без садржаја.",
-       "anoneditwarning": "'''Упозорење:''' нисте пријављени.\nВаша ИП адреса ће бити забележена у историји ове странице.",
+       "anoneditwarning": "<strong>Упозорење:</strong> нисте пријављени. Ваша ИП адреса ће бити јавно видљива у историји ове странице ако начините било какву измену. Ако се <strong>[$1 пријавите]</strong> или <strong>[$2 отворите налог]</strong> ваше измене ће бити приписане вашем корисничком имену.",
        "anonpreviewwarning": "''Нисте пријављени. Ваша ИП адреса ће бити забележена у историји ове странице.''",
        "missingsummary": "'''Напомена:''' нисте унели опис измене.\nАко поново кликнете на „{{int:savearticle}}“, ваша измена ће бити сачувана без описа.",
        "missingcommenttext": "Унесите коментар испод.",
        "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Наведите све податке изнад при стварања било каквих упита.",
-       "autoblockedtext": "Ваша ИП адреса је блокирана јер ју је употребљавао други корисник, кога је {{GENDER:$1|блокирао|блокирала|блокирао}} $1.\nРазлог:\n\n:''$2''\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$1|кориснику|корисници|кориснику}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\n\nНе можете користити могућност „Пошаљи поруку овом кориснику“ ако нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].\n\nВаша блокирана ИП адреса је $3, а ИБ $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.",
        "confirmedittext": "Морате да потврдите своју е-адресу пре уређивања страница.\nПоставите и потврдите адресу преко [[Special:Preferences|подешавања]].",
        "undo-summary": "Поништена измена $1 {{GENDER:$2|корисника|кориснице}} [[Special:Contribs/$2|$2]] ([[User talk:$2|разговор]])",
        "undo-summary-username-hidden": "Поништи измену $1 скривеног корисника",
        "cantcreateaccounttitle": "Не могу да отворим налог",
-       "cantcreateaccount-text": "Отварање налога с ове IP адресе ('''$1''') је {{GENDER:$3|блокирао|блокирала|блокирао}} [[User:$3|$3]].\n\nРазлог који је навео {{GENDER:$3|корисник|корисница|корисник}} $3 је ''$2''",
+       "cantcreateaccount-text": "Отварање налога с ове IP адресе (<strong>$1</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
+       "cantcreateaccount-range-text": "Отварање налога са IP адреса у распону '''$1''', који укључује и вашу IP адресу ('''$4''') је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
        "viewpagelogs": "Погледај дневнике ове странице",
        "nohistory": "Не постоји историја измена ове странице.",
        "currentrev": "Текућа измена",
        "mergehistory-same-destination": "Изворна и одредишна страница не могу бити исте",
        "mergehistory-reason": "Разлог:",
        "mergelog": "Дневник спајања",
-       "pagemerge-logentry": "је спојио [[$1]] у [[$2]] (све до измене $3)",
        "revertmerge": "растави",
        "mergelogpagetext": "Испод је списак најскоријих спајања историја двеју страница.",
        "history-title": "Историја измена странице „$1“",
        "searchall": "све",
        "showingresults": "Испод {{PLURAL:$1|је приказан <strong>1</strong> резултат|су приказана <strong>$1</strong> резултата|је приказано <strong>$1</strong> резултата}} почев од броја <strong>$2</strong>.",
        "showingresultsinrange": "Испод {{PLURAL:$1|је приказан <strong>1</strong> резултат|су приказана <strong>$1</strong> резултата|је приказано <strong>$1</strong> резултата}}, у распону од <strong>$2</strong> до <strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Резултат '''$1''' од '''$3'''|Резултата '''$1 – $2''' од '''$3'''}} за '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Резултат <strong>$1</strong> од <strong>$3</strong>|Резултата <strong>$1 – $2</strong> од <strong>$3</strong>}}",
        "search-nonefound": "Нема поклапања.",
        "powersearch-legend": "Напредна претрага",
        "powersearch-ns": "Тражи у следећим именским просторима:",
        "prefs-tokenwatchlist": "Жетон",
        "prefs-diffs": "Разлике",
        "prefs-help-prefershttps": "Ова подешавања ће ступити на снагу при следећој пријави.",
+       "prefswarning-warning": "Променили сте ваша подешавања али нисте их још сачували.\nАко не притиснете „$1“ ваша подешавања ће бити изгубљена.",
        "email-address-validity-valid": "Е-адреса је исправна",
        "email-address-validity-invalid": "Унесите исправну е-адресу",
        "userrights": "Управљање корисничким правима",
        "statistics": "Статистике",
        "statistics-header-pages": "Странице",
        "statistics-header-edits": "Измене",
-       "statistics-header-views": "Прегледи",
        "statistics-header-users": "Корисници",
        "statistics-header-hooks": "Остало",
        "statistics-articles": "Странице са садржајем",
        "statistics-files": "Број послатих датотека",
        "statistics-edits": "Број измена страница откад постоји {{SITENAME}}",
        "statistics-edits-average": "Просечан број измена по страници",
-       "statistics-views-total": "Укупно прегледа",
-       "statistics-views-total-desc": "Прегледи непостојећих и посебних страница нису укључени",
-       "statistics-views-peredit": "Прегледа по измени",
        "statistics-users": "Регистровани [[Special:ListUsers|корисници]]",
        "statistics-users-active": "Активни корисници",
-       "statistics-users-active-desc": "Корисници који су извршили бар једну радњу {{PLURAL:$1|претходни дан|у последња $1 дана|у последњих $1 дана}}",
-       "statistics-mostpopular": "Најпосећеније странице",
+       "statistics-users-active-desc": "Корисници који су извршили бар једну радњу {{PLURAL:$1|1=претходни дан|у последња $1 дана|у последњих $1 дана}}",
        "pageswithprop": "Стране с особином стране",
        "pageswithprop-legend": "Стране с особином стране",
        "pageswithprop-text": "Ова страна излистава стране које имају одређену особину",
        "uncategorizedtemplates": "Некатегорисани шаблони",
        "unusedcategories": "Некоришћене категорије",
        "unusedimages": "Некоришћене датотеке",
-       "popularpages": "Популарне странице",
        "wantedcategories": "Тражене категорије",
        "wantedpages": "Тражене странице",
        "wantedpages-badtitle": "Неисправан наслов у низу резултата: $1",
        "suppress": "Надзор",
        "querypage-disabled": "Ова посебна страница је онемогућена ради побољшања перформанси.",
        "booksources": "Штампани извори",
-       "booksources-search-legend": "ТÑ\80ажеÑ\9aе Ð¸Ð·Ð²Ð¾Ñ\80а ÐºÑ\9aиге",
+       "booksources-search-legend": "ТÑ\80ажи ÐºÑ\9aижевне Ð¸Ð·Ð²Ð¾Ñ\80е",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Иди",
+       "booksources-search": "Претражи",
        "booksources-text": "Испод се налази списак веза ка сајтовима који се баве продајом нових и половних књига, а који би могли имати додатне податке о књигама које тражите:",
        "booksources-invalid-isbn": "Наведени ISBN број није исправан. Проверите да није дошло до грешке при умножавању из првобитног извора.",
        "specialloguserlabel": "Извршилац:",
        "listusers-noresult": "Корисник није пронађен.",
        "listusers-blocked": "({{GENDER:$1|блокиран|блокирана|блокиран}})",
        "activeusers": "Списак активних корисника",
-       "activeusers-intro": "Ово је списак корисника који су били активни {{PLURAL:$1|претходни дан|у последња $1 дана|у последњих $1 дана}}.",
+       "activeusers-intro": "Ово је списак корисника који су били активни {{PLURAL:$1|1=претходни дан|у последња $1 дана|у последњих $1 дана}}.",
        "activeusers-count": "$1 {{PLURAL:$1|радња|радње|радњи}} {{PLURAL:$3|претходни дан|у последња $3 дана|у последњих $3 дана}}",
        "activeusers-from": "Прикажи кориснике почев од:",
        "activeusers-hidebots": "Сакриј ботове",
        "emailuser-title-target": "Слање е-поруке {{GENDER:$1|кориснику|корисници|кориснику}}",
        "emailuser-title-notarget": "Слање е-поруке кориснику",
        "emailpage": "Слање е-порука",
-       "emailpagetext": "Можете да користите доњи образац да пошаљете е-поруку {{GENDER:$1|овом кориснику|овој корисници|овом кориснику|}}.\nЕ-адреса коју сте унели у вашим [[Special:Preferences|подешавањима]] ће се приказати у пољу „Од“, тако да ће прималац моћи да вам одговори директно.",
+       "emailpagetext": "Можете да користите доњи образац да пошаљете е-поруку {{GENDER:$1|овом кориснику|овој корисници}}.\nЕ-адреса коју сте унели у вашим [[Special:Preferences|подешавањима]] ће се приказати у пољу „Од“, тако да ће прималац моћи да вам одговори директно.",
        "defemailsubject": "{{SITENAME}} — Е-пошта од {{GENDER:$1|корисника|кориснице}} $1",
        "usermaildisabled": "Корисничка е-пошта је онемогућена",
        "usermaildisabledtext": "Не можете да шаљете е-поруке другим корисницима на овом викију",
        "emailsubject": "Наслов:",
        "emailmessage": "Порука:",
        "emailsend": "Пошаљи",
-       "emailccme": "Ð\9fоÑ\88аÑ\99и Ð¼Ð¸ Ð¿Ñ\80имеÑ\80ак Ð¿Ð¾Ñ\80Ñ\83ке Ðµ-поÑ\88Ñ\82ом",
-       "emailccsubject": "Ð\9fÑ\80имеÑ\80ак Ð²Ð°Ñ\88е Ð¿Ð¾Ñ\80Ñ\83ке Ð·Ð° $1: $2",
+       "emailccme": "Ð\9fоÑ\88аÑ\99и Ð¼Ð¸ ÐºÐ¾Ð¿Ð¸Ñ\98Ñ\83 Ð¿Ð¾Ñ\80Ñ\83ке Ð½Ð° Ð¼Ð¾Ñ\98Ñ\83 Ðµ-поÑ\88Ñ\82Ñ\83.",
+       "emailccsubject": "Ð\9aопиÑ\98а Ð²Ð°Ñ\88е Ð¿Ð¾Ñ\80Ñ\83ке ÐºÐ¾Ñ\80иÑ\81никÑ\83 $1: $2",
        "emailsent": "Порука је послата",
-       "emailsenttext": "Ð\92аÑ\88а Ð¿Ð¾Ñ\80Ñ\83ка Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82а Ðµ-поÑ\88Ñ\82ом.",
+       "emailsenttext": "Ð\92аÑ\88а Ðµ-поÑ\80Ñ\83ка Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82а.",
        "emailuserfooter": "Ову е-поруку је {{GENDER:|послао|послала|послао}} $1 кориснику $2 путем е-поште с викија {{SITENAME}}.",
        "usermessage-summary": "Слање системске поруке.",
        "usermessage-editor": "Уређивач системских порука",
        "wlheader-enotif": "Обавештење е-поруком је омогућено.",
        "wlheader-showupdated": "Странице које су измењене откад сте их последњи пут посетили су '''подебљане'''.",
        "wlnote": "Испод {{PLURAL:$1|је последња измена|су последње '''$1''' измене|је последњих '''$1''' измена}} у {{PLURAL:$2|претходном сату|претходна '''$2''' сата|претходних '''$2''' сати}}, закључно са $3, $4.",
-       "wlshowlast": "Прикажи последњих $1 сати, $2 дана, $3",
+       "wlshowlast": "Прикажи последњих $1 сати, $2 дана",
        "watchlist-options": "Поставке списка надгледања",
        "watching": "Надгледање…",
        "unwatching": "Прекидање надгледања…",
        "deletepage": "Обриши страницу",
        "confirm": "Потврди",
        "excontent": "садржај је био: „$1“",
-       "excontentauthor": "садржај је био: „$1“ (а једини уредник је био „[[Special:Contribs/$2|$2]]“)",
+       "excontentauthor": "садржај је био: „$1“ (а једини уредник [[Special:Contribs/$2|$2]])",
        "exbeforeblank": "садржај пре брисања је био: „$1“",
        "delete-confirm": "Брисање странице „$1“",
        "delete-legend": "Обриши",
-       "historywarning": "<strong>Упозорење:</strong> страница коју желите да обришете има историју с приближно $1 {{PLURAL:$1|изменом|измене|измена}}:",
+       "historywarning": "<strong>Упозорење:</strong> страница коју желите да обришете има историју са $1 {{PLURAL:$1|изменом|измене|измена}}:",
        "confirmdeletetext": "Управо ћете обрисати страницу, укључујући и њену историју.\nПотврдите своју намеру, да разумете последице и да ово радите у складу с [[{{MediaWiki:Policy-url}}|правилима]].",
        "actioncomplete": "Радња је завршена",
        "actionfailed": "Радња није успела",
        "undeleteinvert": "Обрни избор",
        "undeletecomment": "Разлог:",
        "undeletedrevisions": "{{PLURAL:$1|Измена је враћена|$1 измене су враћене|$1 измена је враћено}}",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|измена|измене|измена}} и $2 {{PLURAL:$2|датотека|датотеке|датотека}} је враћено",
+       "undeletedrevisions-files": "$1 {{PLURAL:$1|измена|измене|измена}} и $2 {{PLURAL:$2|датотека је враћена|датотеке су враћене|датотека је враћено}}",
        "undeletedfiles": "{{PLURAL:$1|Датотека је враћена|$1 датотеке су враћене|$1 датотека је враћено}}",
        "cannotundelete": "Враћање није успело:\n$1",
        "undeletedpage": "'''Страница $1 је враћена'''\n\nПогледајте [[Special:Log/delete|историју брисања]] за записе о скорашњим брисањима и враћањима.",
        "unblockiptext": "Користите образац испод да бисте вратили право писања блокираној IP адреси или корисничком имену.",
        "ipusubmit": "Уклони ову блокаду",
        "unblocked": "[[User:$1|$1]] је деблокиран",
-       "unblocked-range": "$1 је {{GENDER:$1|деблокиран|деблокирана|деблокиран}}",
+       "unblocked-range": "$1 је деблокиран",
        "unblocked-id": "Блокирање $1 је уклоњено",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] је деблокиран.",
        "blocklist": "Блокирани корисници",
        "ipblocklist": "Блокирани корисници",
        "ipblocklist-legend": "Проналажење блокираног корисника",
        "emaillink": "пошаљи е-поруку",
        "autoblocker": "Аутоматски сте блокирани јер делите ИП адресу с корисником/цом [[User:$1|$1]].\nРазлог блокирања: „$2“",
        "blocklogpage": "Дневник блокирања",
-       "blocklog-showlog": "{{GENDER:$1|Овај корисник је раније блокиран|Ова корисница је раније блокирана|Овај корисник је раније блокиран}}.\nИсторија блокирања се налази испод:",
-       "blocklog-showsuppresslog": "{{GENDER:|Овај корисник је раније блокиран и сакривен|Ова корисница је раније блокирана и сакривена|Овај корисник је раније блокиран и сакривен}}.\nИсторија сакривања се налази испод:",
+       "blocklog-showlog": "{{GENDER:$1|Овај корисник је раније блокиран|Ова корисница је раније блокирана}}.\nИсторија блокирања се налази испод:",
+       "blocklog-showsuppresslog": "{{GENDER:$1|Овај корисник је раније блокиран и сакривен|Ова корисница је раније блокирана и сакривена}}.\nИсторија сакривања се налази испод:",
        "blocklogentry": "је блокирао [[$1]] с роком истицања од $2 $3",
        "reblock-logentry": "{{GENDER:|је променио|је променила|је променио}} подешавања за блокирање {{GENDER:$1|корисника|кориснице|корисника}} [[$1]] с роком истека од $2 ($3)",
        "blocklogtext": "Ово је дневник блокирања и деблокирања корисника.\nАутоматски блокиране ИП адресе нису наведене.\nТекуће забране и блокирања можете наћи [[Special:BlockList|овде]].",
-       "unblocklogentry": "{{GENDER:|је деблокирао|је деблокирала}} $1",
+       "unblocklogentry": "је деблокирао $1",
        "block-log-flags-anononly": "само анонимни корисници",
        "block-log-flags-nocreate": "онемогућено отварање налога",
        "block-log-flags-noautoblock": "аутоматско блокирање је онемогућено",
        "tooltip-undo": "Поништава ову измену и отвара образац за уређивање.",
        "tooltip-preferences-save": "Сачувај поставке",
        "tooltip-summary": "Унесите кратак опис",
-       "common.css": "/** CSS постављен овде ће се одразити на све теме */",
+       "common.css": "/* CSS постављен овде ће се одразити на све теме */",
        "print.css": "/* CSS постављен овде ће утицати на издање за штампу */",
        "noscript.css": "/* CSS постављен овде ће утицати на све кориснике којима је онемогућен јаваскрипт */",
        "group-autoconfirmed.css": "/* CSS постављен овде ће утицати на самопотврђене кориснике */",
        "pageinfo-robot-policy": "Индексирање од стране робота",
        "pageinfo-robot-index": "Дозвољено",
        "pageinfo-robot-noindex": "Није дозвољено",
-       "pageinfo-views": "Број прегледа",
        "pageinfo-watchers": "Број надгледача странице",
        "pageinfo-few-watchers": "Мање од $1 {{PLURAL:$1|пратиоца|пратилаца}}",
        "pageinfo-redirects-name": "Број преусмерења на ову страницу",
        "exif-urgency-low": "Ниско ($1)",
        "exif-urgency-high": "Високо ($1)",
        "exif-urgency-other": "Прилагођени приоритет ($1)",
-       "watchlistall2": "све",
        "namespacesall": "сви",
        "monthsall": "све",
        "confirmemail": "Потврда е-адресе",
        "scarytranscludefailed-httpstatus": "[Не могу да преузмем шаблон $1: HTTP $2]",
        "scarytranscludetoolong": "[URL адреса је предугачка]",
        "deletedwhileediting": "<strong>Упозорење</strong>: ова страница је обрисана након што сте почели с уређивањем!",
-       "confirmrecreate": "[[User:$1|$1]] ([[User talk:$1|разговор]]) {{GENDER:$1|је обрисао|је обрисала|обриса}} ову страницу након што сте почели да је уређујете из следећег разлога:\n: ''$2''\nПотврдите да стварно желите да направите страницу.",
+       "confirmrecreate": "Корисник [[User:$1|$1]] ([[User talk:$1|разговор]]) је обрисао ову страницу након што сте почели да је уређујете из следећег разлога:\n: <em>$2</em>\nПотврдите да стварно желите да направите страницу.",
        "confirmrecreate-noreason": "Корисник [[User:$1|$1]] ([[User talk:$1|разговор]]) је обрисао ову страницу након што сте почели да га уређујете. Потврдите да стварно желите да поново направите ову страницу.",
        "recreate": "Поново направи",
        "unit-pixel": "px",
        "table_pager_limit_submit": "Иди",
        "table_pager_empty": "Нема резултата",
        "autosumm-blank": "Уклоњен целокупан садржај странице",
-       "autosumm-replace": "Замена садржаја странице са „$1“",
+       "autosumm-replace": "Замењен садржај странице са „$1“",
        "autoredircomment": "Преусмерење на [[$1]]",
        "autosumm-new": "Нова страница: $1",
        "autosumm-newblank": "Направљена празна страница",
        "watchlistedit-clear-titles": "Наслови:",
        "watchlistedit-clear-submit": "Испразни списак надгледања (Ово је трајно!)",
        "watchlistedit-clear-done": "Ваш списак надгледања је испражњен.",
-       "watchlistedit-clear-removed": "{{PLURAL:$1|1 наслов је уклоњен|$1 наслова је уклоњено}}:",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 наслов је уклоњен|$1 наслова су уклоњена|$1 наслова је уклоњено}}:",
+       "watchlistedit-too-many": "Има превише страница за приказ овде.",
        "watchlisttools-clear": "испразни списак надгледања",
        "watchlisttools-view": "прикажи сродне измене",
        "watchlisttools-edit": "прикажи и уреди списак надгледања",
        "sqlite-no-fts": "$1 без подршке претраге целог текста",
        "logentry-delete-delete": "$1 је {{GENDER:$2|обрисао|обрисала}} страницу $3",
        "logentry-delete-restore": "$1 је {{GENDER:$2|вратио|вратила}} страницу $3",
-       "logentry-delete-event": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|догађаја|$5 догађаја}} у дневнику на $3: $4",
-       "logentry-delete-revision": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|измене|$5 измена}} на страници $3: $4",
+       "logentry-delete-event": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|1=догађаја|$5 догађаја|$5 догађаја}} у дневнику на $3: $4",
+       "logentry-delete-revision": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|$5 измене|$5 измена|1=једне измене}} на страници $3: $4",
        "logentry-delete-event-legacy": "$1 је {{GENDER:$2|променио|променила}} видљивост догађаја у дневнику на $3",
        "logentry-delete-revision-legacy": "$1 је {{GENDER:$2|променио|променила}} видљивост измена на страници $3",
        "logentry-suppress-delete": "$1 је {{GENDER:$2|потиснуо|потиснула}} страницу $3",
-       "logentry-suppress-event": "$1 је тајно {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|догађаја|$5 догађаја}} у дневнику на $3: $4",
+       "logentry-suppress-event": "$1 је тајно {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|1=догађаја|$5 догађаја|$5 догађаја}} у дневнику на $3: $4",
        "logentry-suppress-revision": "$1 је тајно {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|измене|$5 измена}} на страници $3: $4",
        "logentry-suppress-event-legacy": "$1 је потајно {{GENDER:$2|променио|променила}} видљивост догађаја у дневнику на $3",
        "logentry-suppress-revision-legacy": "$1 је тајно {{GENDER:$2|променио|променила}} видљивост измена на страници $3",
        "logentry-upload-overwrite": "$1 је {{GENDER:$2|послао|послала}} нову верзију $3",
        "logentry-upload-revert": "$1 је {{GENDER:$2|послао|послала}} $3",
        "rightsnone": "(нема)",
+       "revdelete-summary": "опис измене",
        "feedback-bugornote": "Ако сте спремни да детаљно опишете технички проблем, онда [$1 пријавите грешку].\nУ супротном, послужите се једноставним обрасцем испод. Ваш коментар ће стајати на страници „[$3 $2]“, заједно с корисничким именом и прегледачем који користите.",
        "feedback-subject": "Наслов:",
        "feedback-message": "Порука:",
        "pagelang-language": "Језик",
        "pagelang-select-lang": "Изабери језик",
        "right-pagelang": "мењање језика странице",
-       "action-pagelang": "промену језика странице"
+       "action-pagelang": "промену језика странице",
+       "mediastatistics-summary": "Статистике о типовима послатих датотека. Овде су урачунате само најновије верзије датотека. Старе или обрисане верзије нису урачунате.",
+       "mediastatistics-table-mimetype": "MIME тип",
+       "mediastatistics-table-extensions": "Могуће екстензије",
+       "mediastatistics-table-count": "Број датотека",
+       "mediastatistics-table-totalbytes": "Укупна величина",
+       "mediastatistics-header-bitmap": "Битмап слике",
+       "mediastatistics-header-drawing": "Цртежи (векторске слике)",
+       "mediastatistics-header-audio": "Аудио",
+       "mediastatistics-header-video": "Видео",
+       "mediastatistics-header-office": "Канцеларија"
 }
index 4bca5d6..fe87203 100644 (file)
        "otherlanguages": "Drugi jezici",
        "redirectedfrom": "(preusmereno sa $1)",
        "redirectpagesub": "Preusmerenje",
+       "redirectto": "Preusmerava na:",
        "lastmodifiedat": "Ova stranica je poslednji put izmenjena $1 u $2.",
        "viewcount": "Ova stranica je pregledana {{PLURAL:$1|jedanput|$1 puta|$1 puta}}.",
        "protectedpage": "Zaštićena stranica",
        "error": "Greška",
        "databaseerror": "Greška u bazi podataka",
        "databaseerror-text": "Došlo je do greške u upitu baze podataka. Možda je u pitanju programska greška.",
+       "databaseerror-query": "Upit: $1",
        "databaseerror-function": "Funkcija: $1",
        "databaseerror-error": "Greška: $1",
        "laggedslavemode": "'''Upozorenje:''' stranica je možda zastarela.",
        "badtitle": "Neispravan naslov",
        "badtitletext": "Naslov stranice je neispravan, prazan ili je međujezički ili međuviki naslov pogrešno povezan.\nMožda sadrži znakove koji se ne mogu koristiti u naslovima.",
        "perfcached": "Sledeći podaci su keširani i mogu biti zastareli. Keš sadrži najviše {{PLURAL:$1|jedan rezultat|$1 rezultata|$1 rezultata}}.",
-       "perfcachedts": "Sledeći podaci su keširani i poslednji put su ažurirani $2 u $3. U kešu {{PLURAL:$4|je dostupan najviše jedan rezultat|su dostupna najviše $4 rezultata|je dostupno najviše $4 rezultata}}.",
+       "perfcachedts": "Sledeći podaci su keširani i poslednji put su ažurirani $2 u $3. U kešu {{PLURAL:$4|1=je dostupan najviše jedan rezultat|su dostupna najviše $4 rezultata|je dostupno najviše $4 rezultata}}.",
        "querypage-no-updates": "Ažuriranje ove stranice je trenutno onemogućeno.\nPodaci koji se ovde nalaze mogu biti zastareli.",
        "viewsource": "Izvorni kod",
        "viewsource-title": "Prikaz izvora stranice $1",
        "badretype": "Unete lozinke se ne poklapaju.",
        "userexists": "Korisničko ime je zauzeto. Izaberite drugo.",
        "loginerror": "Greška pri prijavljivanju",
-       "createacct-error": "Došlo je do greške pri kreiranju naloga",
+       "createacct-error": "Došlo je do greške pri otvaranju naloga",
        "createaccounterror": "Ne mogu da otvorim nalog: $1",
        "nocookiesnew": "Korisnički nalog je otvoren, ali niste prijavljeni.\n{{SITENAME}} koristi kolačiće za prijavu. Vama su kolačići onemogućeni.\nOmogućite ih, pa se onda prijavite sa svojim korisničkim imenom i lozinkom.",
        "nocookieslogin": "{{SITENAME}} koristi kolačiće za prijavljivanje korisnika.\nVama su kolačići onemogućeni. Omogućite ih i pokušajte ponovo.",
        "passwordsent": "Nova lozinka je poslata na e-adresu {{GENDER:$1|korisnika|korisnice|korisnika}} $1.\nPrijavite se pošto je primite.",
        "blocked-mailpassword": "Vašoj IP adresi je onemogućeno uređivanje stranica, kao i mogućnost zahtevanja nove lozinke.",
        "eauthentsent": "Na navedenu e-adresu je poslat potvrdni kod.\nPre nego što pošaljemo daljnje poruke, pratite uputstva s e-pošte da biste potvrdili da ste vi otvorili nalog.",
-       "throttled-mailpassword": "Poruka za promenu lozinke je poslata u {{PLURAL:$1|poslednjih sat vremena|poslednja $1 sata|poslednjih $1 sati}}.\nDa bismo sprečili zloupotrebu, podsetnik šaljemo samo jednom u roku od {{PLURAL:$1|sat vremena|$1 sata|$1 sati}}.",
+       "throttled-mailpassword": "Poruka za promenu lozinke je poslata u {{PLURAL:$1|1=poslednjih sat vremena|poslednja $1 sata|poslednjih $1 sati}}.\nDa bismo sprečili zloupotrebu, podsetnik šaljemo samo jednom u roku od {{PLURAL:$1|1=sat vremena|$1 sata|$1 sati}}.",
        "mailerror": "Greška pri slanju poruke: $1",
        "acct_creation_throttle_hit": "Posetioci ovog vikija koji koriste vašu IP adresu su već otvorili {{PLURAL:$1|1=jedan nalog|$1 naloga|$1 naloga}} prethodni dan, što je najveći dozvoljeni broj u tom vremenskom periodu.\nZbog toga posetioci s ove IP adrese trenutno ne mogu otvoriti više naloga.",
        "emailauthenticated": "Vaša e-adresa je potvrđena $2 u $3.",
        "passwordreset-emailsent-capture": "Poslat je podsetnik preko e-pošte (prikazan dole).",
        "passwordreset-emailerror-capture": "E-poruka za resetovanje lozinke, prikazana ispod je poslata, ali slanje {{GENDER:$2|korisniku|korisnici}} nije uspelo: $1",
        "changeemail": "Promena e-adrese",
-       "changeemail-header": "Promenite e-adresu naloga",
        "changeemail-text": "Popunite ovaj obrazac da biste promenili svoju e-adresu. Moraćete da unesete lozinku da potvrdite izmenu.",
        "changeemail-no-info": "Morate biti prijavljeni da biste pristupili ovoj stranici.",
        "changeemail-oldemail": "Trenutna e-adresa:",
        "changeemail-none": "(ništa)",
        "changeemail-password": "Vaša lozinka:",
        "changeemail-submit": "Promeni",
-       "changeemail-cancel": "Otkaži",
        "changeemail-throttled": "Previše puta ste pokušali da se prijavite.\nMolimo vas da sačekate $1 pre nego što pokušate ponovo.",
        "resettokens": "Resetovanje žetona",
        "resettokens-no-tokens": "Nema žetona za resetovanje.",
        "showpreview": "Prikaži pretpregled",
        "showdiff": "Prikaži izmene",
        "blankarticle": "<strong>Upozorenje:</strong> stranica koju pravite nema nikakav sadržaj.\nAko još jednom pritisnete „{{int:savearticle}}“ napravićete stranicu bez sadržaja.",
-       "anoneditwarning": "'''Upozorenje:''' niste prijavljeni.\nVaša IP adresa će biti zabeležena u istoriji ove stranice.",
+       "anoneditwarning": "<strong>Upozorenje:</strong> niste prijavljeni. Vaša IP adresa će biti javno vidljiva u istoriji ove stranice ako načinite bilo kakvu izmenu. Ako se <strong>[$1 prijavite]</strong> ili <strong>[$2 otvorite nalog]</strong> vaše izmene će biti pripisane vašem korisničkom imenu.",
        "anonpreviewwarning": "''Niste prijavljeni. Vaša IP adresa će biti zabeležena u istoriji ove stranice.''",
        "missingsummary": "'''Napomena:''' niste uneli opis izmene.\nAko ponovo kliknete na „{{int:savearticle}}“, vaša izmena će biti sačuvana bez opisa.",
        "missingcommenttext": "Unesite komentar ispod.",
        "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.",
-       "autoblockedtext": "Vaša IP adresa je blokirana jer ju je upotrebljavao drugi korisnik, koga je {{GENDER:$1|blokirao|blokirala|blokirao}} $1.\nRazlog:\n\n:''$2''\n\n* Datum blokiranja: $8\n* Blokiranje ističe: $6\n* Ime korisnika: $7\n\nObratite se {{GENDER:$1|korisniku|korisnici|korisniku}} $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 IB $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.",
        "confirmedittext": "Morate da potvrdite svoju e-adresu pre uređivanja stranica.\nPostavite i potvrdite adresu preko [[Special:Preferences|podešavanja]].",
        "undo-summary": "Poništena izmena $1 {{GENDER:$2|korisnika|korisnice}} [[Special:Contribs/$2|$2]] ([[User talk:$2|razgovor]])",
        "undo-summary-username-hidden": "Poništi izmenu $1 skrivenog korisnika",
        "cantcreateaccounttitle": "Ne mogu da otvorim nalog",
-       "cantcreateaccount-text": "Otvaranje naloga s ove IP adrese ('''$1''') je {{GENDER:$3|blokirao|blokirala|blokirao}} [[User:$3|$3]].\n\nRazlog koji je naveo {{GENDER:$3|korisnik|korisnica|korisnik}} $3 je ''$2''",
+       "cantcreateaccount-text": "Otvaranje naloga s ove IP adrese (<strong>$1</strong>) je blokirao/la [[User:$3|$3]].\n\nRazlog koji je naveo/la $3 je <em>$2</em>",
+       "cantcreateaccount-range-text": "Otvaranje naloga sa IP adresa u rasponu '''$1''', koji uključuje i vašu IP adresu ('''$4''') je blokirao/la [[User:$3|$3]].\n\nRazlog koji je naveo/la $3 je <em>$2</em>",
        "viewpagelogs": "Pogledaj dnevnike ove stranice",
        "nohistory": "Ne postoji istorija izmena ove stranice.",
        "currentrev": "Tekuća izmena",
        "revdelete-selected-text": "{{PLURAL:$1|Izabrana izmena|Izabrane izmene}} [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Izabrana verzija datoteke|Izabrane verzije datoteke}} [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Izabrana stavka u istoriji|Izabrane stavke u istoriji}}:",
+       "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-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-legend": "Ograničenja vidljivosti",
        "mergehistory-empty": "Nema izmena za spajanje.",
        "mergehistory-success": "$3 {{PLURAL:$3|izmena stranice [[:$1]] je spojena|izmene stranice [[:$1]] su spojene|izmena stranice [[:$1]] je spojeno}} u [[:$2]].",
        "mergehistory-fail": "Ne mogu da spojim istorije. Proverite stranicu i vremenske parametre.",
+       "mergehistory-fail-toobig": "Nije moguće spojiti istorije jer više od $1 {{PLURAL:$1|izmene će biti premeštene|izmena će biti premešteno}}.",
        "mergehistory-no-source": "Izvorna stranica $1 ne postoji.",
        "mergehistory-no-destination": "Odredišna stranica $1 ne postoji.",
        "mergehistory-invalid-source": "Izvorna stranica mora imati ispravan naslov.",
        "mergehistory-same-destination": "Izvorna i odredišna stranica ne mogu biti iste",
        "mergehistory-reason": "Razlog:",
        "mergelog": "Dnevnik spajanja",
-       "pagemerge-logentry": "je spojio [[$1]] u [[$2]] (sve do izmene $3)",
        "revertmerge": "rastavi",
        "mergelogpagetext": "Ispod je spisak najskorijih spajanja istorija dveju stranica.",
        "history-title": "Istorija izmena stranice „$1“",
        "searchall": "sve",
        "showingresults": "Ispod {{PLURAL:$1|je prikazan <strong>1</strong> rezultat|su prikazana <strong>$1</strong> rezultata|je prikazano <strong>$1</strong> rezultata}} počev od broja <strong>$2</strong>.",
        "showingresultsinrange": "Ispod {{PLURAL:$1|je prikazan <strong>1</strong> rezultat|su prikazana <strong>$1</strong> rezultata|je prikazano <strong>$1</strong> rezultata}}, u rasponu od <strong>$2</strong> do <strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|1=Rezultat '''$1''' od '''$3'''|Rezultata '''$1 – $2''' od '''$3'''}} za '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Rezultat <strong>$1</strong> od <strong>$3</strong>|Rezultata <strong>$1 – $2</strong> od <strong>$3</strong>}}",
        "search-nonefound": "Nema poklapanja.",
        "powersearch-legend": "Napredna pretraga",
        "powersearch-ns": "Traži u sledećim imenskim prostorima:",
        "prefs-tokenwatchlist": "Žeton",
        "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.",
        "email-address-validity-valid": "E-adresa je ispravna",
        "email-address-validity-invalid": "Unesite ispravnu e-adresu",
        "userrights": "Upravljanje korisničkim pravima",
        "action-move": "premeštanje ove stranice",
        "action-move-subpages": "premeštanje ove stranice i njenih podstranica",
        "action-move-rootuserpages": "premeštanje osnovnih korisničkih stranica",
+       "action-move-categorypages": "premeštanje kategorija",
        "action-movefile": "premeštanje ove datoteke",
        "action-upload": "slanje ove datoteke",
        "action-reupload": "zamenjivanje postojeće datoteke",
        "license-nopreview": "(pregled nije dostupan)",
        "upload_source_url": "(ispravna i javno dostupna adresa)",
        "upload_source_file": "(datoteka na vašem računaru)",
+       "listfiles-delete": "obriši",
        "listfiles-summary": "Ova posebna stranica prikazuje sve poslate datoteke.",
        "listfiles_search_for": "Naziv datoteke:",
        "imgfile": "datoteka",
        "randomincategory": "Slučajna stranica u kategoriji",
        "randomincategory-invalidcategory": "„$1“ nije valjano ime kategorije",
        "randomincategory-nopages": "Nema stranica u kategoriji [[:Category:$1|$1]].",
+       "randomincategory-category": "Kategorija:",
        "randomredirect": "Slučajno preusmerenje",
        "randomredirect-nopages": "Nema preusmerenja u imenskom prostoru „$1”.",
        "statistics": "Statistike",
        "statistics-header-pages": "Stranice",
        "statistics-header-edits": "Izmene",
-       "statistics-header-views": "Pregledi",
        "statistics-header-users": "Korisnici",
        "statistics-header-hooks": "Ostalo",
        "statistics-articles": "Stranice sa sadržajem",
        "statistics-files": "Broj poslatih datoteka",
        "statistics-edits": "Broj izmena stranica otkad postoji {{SITENAME}}",
        "statistics-edits-average": "Prosečan broj izmena po stranici",
-       "statistics-views-total": "Ukupno pregleda",
-       "statistics-views-total-desc": "Pregledi nepostojećih i posebnih stranica nisu uključeni",
-       "statistics-views-peredit": "Pregleda po izmeni",
        "statistics-users": "Registrovani [[Special:ListUsers|korisnici]]",
        "statistics-users-active": "Aktivni korisnici",
-       "statistics-users-active-desc": "Korisnici koji su izvršili bar jednu radnju {{PLURAL:$1|prethodni dan|u poslednja $1 dana|u poslednjih $1 dana}}",
-       "statistics-mostpopular": "Najposećenije stranice",
+       "statistics-users-active-desc": "Korisnici koji su izvršili bar jednu radnju {{PLURAL:$1|1=prethodni dan|u poslednja $1 dana|u poslednjih $1 dana}}",
        "pageswithprop": "Strane s osobinom strane",
        "pageswithprop-legend": "Strane s osobinom strane",
        "pageswithprop-text": "Ova strana izlistava strane koje imaju određenu osobinu",
        "uncategorizedtemplates": "Nekategorisani šabloni",
        "unusedcategories": "Nekorišćene kategorije",
        "unusedimages": "Nekorišćene datoteke",
-       "popularpages": "Popularne stranice",
        "wantedcategories": "Tražene kategorije",
        "wantedpages": "Tražene stranice",
        "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]].",
        "wantedfiletext-nocat": "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.",
+       "wantedfiletext-nocat-noforeign": "Sledeće datoteke se koriste, ali ne postoje.",
        "wantedtemplates": "Traženi šabloni",
        "mostlinked": "Stranice s najviše veza",
        "mostlinkedcategories": "Kategorije s najviše veza",
        "suppress": "Nadzor",
        "querypage-disabled": "Ova posebna stranica je onemogućena radi poboljšanja performansi.",
        "booksources": "Štampani izvori",
-       "booksources-search-legend": "Traženje izvora knjige",
+       "booksources-search-legend": "Traži književne izvore",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Idi",
+       "booksources-search": "Pretraži",
        "booksources-text": "Ispod se nalazi spisak veza ka sajtovima koji se bave prodajom novih i polovnih knjiga, a koji bi mogli imati dodatne podatke o knjigama koje tražite:",
        "booksources-invalid-isbn": "Navedeni ISBN broj nije ispravan. Proverite da nije došlo do greške pri umnožavanju iz prvobitnog izvora.",
        "specialloguserlabel": "Izvršilac:",
        "listusers-noresult": "Korisnik nije pronađen.",
        "listusers-blocked": "({{GENDER:$1|blokiran|blokirana|blokiran}})",
        "activeusers": "Spisak aktivnih korisnika",
-       "activeusers-intro": "Ovo je spisak korisnika koji su bili aktivni {{PLURAL:$1|prethodni dan|u poslednja $1 dana|u poslednjih $1 dana}}.",
+       "activeusers-intro": "Ovo je spisak korisnika koji su bili aktivni {{PLURAL:$1|1=prethodni dan|u poslednja $1 dana|u poslednjih $1 dana}}.",
        "activeusers-count": "$1 {{PLURAL:$1|radnja|radnje|radnji}} {{PLURAL:$3|prethodni dan|u poslednja $3 dana|u poslednjih $3 dana}}",
        "activeusers-from": "Prikaži korisnike počev od:",
        "activeusers-hidebots": "Sakrij botove",
        "listgrouprights-addgroup-self-all": "Dodaj sve grupe na sopstveni nalog",
        "listgrouprights-removegroup-self-all": "Ukloni sve grupe sa sopstvenog naloga",
        "listgrouprights-namespaceprotection-namespace": "Imenski prostor",
+       "trackingcategories-name": "Ime poruke",
        "trackingcategories-nodesc": "Opis nije dostupan.",
+       "trackingcategories-disabled": "Kategorija je onemogućena",
        "mailnologin": "Nema adrese za slanje",
        "mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu e-adresu u [[Special:Preferences|podešavanjima]] da biste slali e-poruke drugim korisnicima.",
        "emailuser": "Pošalji e-poruku",
        "emailuser-title-target": "Slanje e-poruke {{GENDER:$1|korisniku|korisnici|korisniku}}",
        "emailuser-title-notarget": "Slanje e-poruke korisniku",
        "emailpage": "Slanje e-poruka",
-       "emailpagetext": "Možete da koristite donji obrazac da pošaljete e-poruku {{GENDER:$1|ovom korisniku|ovoj korisnici|ovom korisniku|}}.\nE-adresa koju ste uneli u vašim [[Special:Preferences|podešavanjima]] će se prikazati u polju „Od“, tako da će primalac moći da vam odgovori direktno.",
+       "emailpagetext": "Možete da koristite donji obrazac da pošaljete e-poruku {{GENDER:$1|ovom korisniku|ovoj korisnici}}.\nE-adresa koju ste uneli u vašim [[Special:Preferences|podešavanjima]] će se prikazati u polju „Od“, tako da će primalac moći da vam odgovori direktno.",
        "defemailsubject": "{{SITENAME}} — E-pošta od {{GENDER:$1|korisnika|korisnice}} $1",
        "usermaildisabled": "Korisnička e-pošta je onemogućena",
        "usermaildisabledtext": "Ne možete da šaljete e-poruke drugim korisnicima na ovom vikiju",
        "emailsubject": "Naslov:",
        "emailmessage": "Poruka:",
        "emailsend": "Pošalji",
-       "emailccme": "Pošalji mi primerak poruke e-poštom",
-       "emailccsubject": "Primerak vaše poruke za $1: $2",
+       "emailccme": "Pošalji mi kopiju poruke na moju e-poštu.",
+       "emailccsubject": "Kopija vaše poruke korisniku $1: $2",
        "emailsent": "Poruka je poslata",
-       "emailsenttext": "Vaša poruka je poslata e-poštom.",
+       "emailsenttext": "Vaša e-poruka je poslata.",
        "emailuserfooter": "Ovu e-poruku je {{GENDER:|poslao|poslala|poslao}} $1 korisniku $2 putem e-pošte s vikija {{SITENAME}}.",
        "usermessage-summary": "Slanje sistemske poruke.",
        "usermessage-editor": "Uređivač sistemskih poruka",
        "wlheader-enotif": "Obaveštenje e-porukom je omogućeno.",
        "wlheader-showupdated": "Stranice koje su izmenjene otkad ste ih poslednji put posetili su '''podebljane'''.",
        "wlnote": "Ispod {{PLURAL:$1|je poslednja izmena|su poslednje '''$1''' izmene|je poslednjih '''$1''' izmena}} u {{PLURAL:$2|prethodnom satu|prethodna '''$2''' sata|prethodnih '''$2''' sati}}, zaključno sa $3, $4.",
-       "wlshowlast": "Prikaži poslednjih $1 sati, $2 dana, $3",
+       "wlshowlast": "Prikaži poslednjih $1 sati, $2 dana",
        "watchlist-options": "Postavke spiska nadgledanja",
        "watching": "Nadgledanje…",
        "unwatching": "Prekidanje nadgledanja…",
        "deletepage": "Obriši stranicu",
        "confirm": "Potvrdi",
        "excontent": "sadržaj je bio: „$1“",
-       "excontentauthor": "sadržaj je bio: „$1“ (a jedini urednik je bio „[[Special:Contribs/$2|$2]]“)",
+       "excontentauthor": "sadržaj je bio: „$1“ (a jedini urednik [[Special:Contribs/$2|$2]])",
        "exbeforeblank": "sadržaj pre brisanja je bio: „$1“",
        "delete-confirm": "Brisanje stranice „$1“",
        "delete-legend": "Obriši",
        "delete-edit-reasonlist": "Uredi razloge brisanja",
        "delete-toobig": "Ova stranica ima veliku istoriju, preko $1 {{PLURAL:$1|izmene|izmene|izmena}}.\nBrisanje takvih stranica je ograničeno da bi se sprečilo slučajno opterećenje servera.",
        "delete-warning-toobig": "Ova stranica ima veliku istoriju, preko $1 {{PLURAL:$1|izmene|izmene|izmena}}.\nNjeno brisanje može poremetiti bazu podataka, stoga postupajte s oprezom.",
+       "deleteprotected": "Ne možete obrisati ovu stranicu zato što je zaštićena.",
        "deleting-backlinks-warning": "'''Upozorenje:''' brišete stranicu koja je uključena u [[Special:WhatLinksHere/{{FULLPAGENAME}}|druge stranice]] ili druge stranice vode na nju.",
        "rollback": "Vrati izmene",
        "rollback_short": "Vrati",
        "undeleteinvert": "Obrni izbor",
        "undeletecomment": "Razlog:",
        "undeletedrevisions": "{{PLURAL:$1|Izmena je vraćena|$1 izmene su vraćene|$1 izmena je vraćeno}}",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|izmena|izmene|izmena}} i $2 {{PLURAL:$2|datoteka|datoteke|datoteka}} je vraćeno",
+       "undeletedrevisions-files": "$1 {{PLURAL:$1|izmena|izmene|izmena}} i $2 {{PLURAL:$2|datoteka je vraćena|datoteke su vraćene|datoteka je vraćeno}}",
        "undeletedfiles": "{{PLURAL:$1|Datoteka je vraćena|$1 datoteke su vraćene|$1 datoteka je vraćeno}}",
        "cannotundelete": "Vraćanje nije uspelo:\n$1",
        "undeletedpage": "'''Stranica $1 je vraćena'''\n\nPogledajte [[Special:Log/delete|istoriju brisanja]] za zapise o skorašnjim brisanjima i vraćanjima.",
        "unblockiptext": "Koristite obrazac ispod da biste vratili pravo pisanja blokiranoj IP adresi ili korisničkom imenu.",
        "ipusubmit": "Ukloni ovu blokadu",
        "unblocked": "[[User:$1|$1]] je deblokiran",
-       "unblocked-range": "$1 je {{GENDER:$1|deblokiran|deblokirana|deblokiran}}",
+       "unblocked-range": "$1 je deblokiran",
        "unblocked-id": "Blokiranje $1 je uklonjeno",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] je deblokiran.",
        "blocklist": "Blokirani korisnici",
        "ipblocklist": "Blokirani korisnici",
        "ipblocklist-legend": "Pronalaženje blokiranog korisnika",
        "autoblocker": "Automatski ste blokirani jer delite IP adresu s korisnikom/com [[User:$1|$1]].\nRazlog blokiranja: „$2“",
        "blocklogpage": "Dnevnik blokiranja",
        "blocklog-showlog": "{{GENDER:$1|Ovaj korisnik je ranije blokiran|Ova korisnica je ranije blokirana|Ovaj korisnik je ranije blokiran}}.\nIstorija blokiranja se nalazi ispod:",
-       "blocklog-showsuppresslog": "{{GENDER:|Ovaj korisnik je ranije blokiran i sakriven|Ova korisnica je ranije blokirana i sakrivena|Ovaj korisnik je ranije blokiran i sakriven}}.\nIstorija sakrivanja se nalazi ispod:",
+       "blocklog-showsuppresslog": "{{GENDER:$1|Ovaj korisnik je ranije blokiran i sakriven|Ova korisnica je ranije blokirana i sakrivena}}.\nIstorija sakrivanja se nalazi ispod:",
        "blocklogentry": "je blokirao [[$1]] s rokom isticanja od $2 $3",
        "reblock-logentry": "{{GENDER:|je promenio|je promenila|je promenio}} podešavanja za blokiranje {{GENDER:$1|korisnika|korisnice|korisnika}} [[$1]] s rokom isteka od $2 ($3)",
        "blocklogtext": "Ovo je dnevnik blokiranja i deblokiranja korisnika.\nAutomatski blokirane IP adrese nisu navedene.\nTekuće zabrane i blokiranja možete naći [[Special:BlockList|ovde]].",
-       "unblocklogentry": "{{GENDER:|je deblokirao|je deblokirala}} $1",
+       "unblocklogentry": "je deblokirao $1",
        "block-log-flags-anononly": "samo anonimni korisnici",
        "block-log-flags-nocreate": "onemogućeno otvaranje naloga",
        "block-log-flags-noautoblock": "automatsko blokiranje je onemogućeno",
        "tooltip-undo": "Poništava ovu izmenu i otvara obrazac za uređivanje.",
        "tooltip-preferences-save": "Sačuvaj postavke",
        "tooltip-summary": "Unesite kratak opis",
-       "common.css": "/** CSS postavljen ovde će se odraziti na sve teme */",
+       "common.css": "/* CSS postavljen ovde će se odraziti na sve teme */",
        "print.css": "/* CSS postavljen ovde će uticati na izdanje za štampu */",
        "noscript.css": "/* CSS postavljen ovde će uticati na sve korisnike kojima je onemogućen javaskript */",
        "group-autoconfirmed.css": "/* CSS postavljen ovde će uticati na samopotvrđene korisnike */",
        "pageinfo-robot-policy": "Indeksiranje od strane robota",
        "pageinfo-robot-index": "Dozvoljeno",
        "pageinfo-robot-noindex": "Nije dozvoljeno",
-       "pageinfo-views": "Broj pregleda",
        "pageinfo-watchers": "Broj nadgledača stranicе",
        "pageinfo-few-watchers": "Manje od $1 {{PLURAL:$1|pratioca|pratilaca}}",
        "pageinfo-redirects-name": "Broj preusmerenja na ovu stranicu",
        "exif-urgency-low": "Nisko ($1)",
        "exif-urgency-high": "Visoko ($1)",
        "exif-urgency-other": "Prilagođeni prioritet ($1)",
-       "watchlistall2": "sve",
        "namespacesall": "svi",
        "monthsall": "sve",
        "confirmemail": "Potvrda e-adrese",
        "scarytranscludefailed-httpstatus": "[Ne mogu da preuzmem šablon $1: HTTP $2]",
        "scarytranscludetoolong": "[URL adresa je predugačka]",
        "deletedwhileediting": "<strong>Upozorenje</strong>: ova stranica je obrisana nakon što ste počeli s uređivanjem!",
-       "confirmrecreate": "[[User:$1|$1]] ([[User talk:$1|razgovor]]) {{GENDER:$1|je obrisao|je obrisala|je obrisao}} ovu stranicu nakon što ste počeli da je uređujete iz sledećeg razloga:\n: ''$2''\nPotvrdite da stvarno želite da napravite stranicu.",
+       "confirmrecreate": "Korisnik [[User:$1|$1]] ([[User talk:$1|razgovor]]) je obrisao ovu stranicu nakon što ste počeli da je uređujete iz sledećeg razloga:\n: <em>$2</em>\nPotvrdite da stvarno želite da napravite stranicu.",
        "confirmrecreate-noreason": "Korisnik [[User:$1|$1]] ([[User talk:$1|razgovor]]) je obrisao ovu stranicu nakon što ste počeli da ga uređujete. Potvrdite da stvarno želite da ponovo napravite ovu stranicu.",
        "recreate": "Ponovo napravi",
        "unit-pixel": "px",
        "table_pager_limit_submit": "Idi",
        "table_pager_empty": "Nema rezultata",
        "autosumm-blank": "Uklonjen celokupan sadržaj stranice",
-       "autosumm-replace": "Zamena sadržaja stranice sa „$1“",
+       "autosumm-replace": "Zamenjen sadržaj stranice sa „$1“",
        "autoredircomment": "Preusmerenje na [[$1]]",
        "autosumm-new": "Nova stranica: $1",
        "autosumm-newblank": "Napravljena prazna stranica",
        "watchlistedit-clear-titles": "Naslovi:",
        "watchlistedit-clear-submit": "Isprazni spisak nadgledanja (Ovo je trajno!)",
        "watchlistedit-clear-done": "Vaš spisak nadgledanja je ispražnjen.",
-       "watchlistedit-clear-removed": "{{PLURAL:$1|1 naslov je uklonjen|$1 naslova je uklonjeno}}:",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 naslov je uklonjen|$1 naslova su uklonjena|$1 naslova je uklonjeno}}:",
+       "watchlistedit-too-many": "Ima previše stranica za prikaz ovde.",
        "watchlisttools-clear": "isprazni spisak nadgledanja",
        "watchlisttools-view": "prikaži srodne izmene",
        "watchlisttools-edit": "prikaži i uredi spisak nadgledanja",
        "version-hook-name": "Naziv kuke",
        "version-hook-subscribedby": "Prijavljeno od",
        "version-version": "(izdanje $1)",
+       "version-no-ext-name": "[nema imena]",
        "version-svn-revision": "(izm. $2)",
        "version-license": "Medijaviki licenca",
        "version-ext-license": "Licenca",
        "version-ext-colheader-name": "Ekstenzija",
+       "version-skin-colheader-name": "Tema",
        "version-ext-colheader-version": "Verzija",
        "version-ext-colheader-license": "Licenca",
        "version-ext-colheader-description": "Opis",
        "sqlite-no-fts": "$1 bez podrške pretrage celog teksta",
        "logentry-delete-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} stranicu $3",
        "logentry-delete-restore": "$1 je {{GENDER:$2|vratio|vratila}} stranicu $3",
-       "logentry-delete-event": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|događaja|$5 daogađaja}} u dnevniku na $3: $4",
-       "logentry-delete-revision": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|izmene|$5 izmena}} na stranici $3: $4",
+       "logentry-delete-event": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|1=događaja|$5 događaja|$5 događaja}} u dnevniku na $3: $4",
+       "logentry-delete-revision": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|$5 izmene|$5 izmena|1=jedne izmene}} na stranici $3: $4",
        "logentry-delete-event-legacy": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost događaja u dnevniku na $3",
        "logentry-delete-revision-legacy": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost izmena na stranici $3",
        "logentry-suppress-delete": "$1 je {{GENDER:$2|potisnuo|potisnula}} stranicu $3",
-       "logentry-suppress-event": "$1 je tajno {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|događaja|$5 događaja}} u dnevniku na $3: $4",
+       "logentry-suppress-event": "$1 je tajno {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|1=događaja|$5 događaja|$5 događaja}} u dnevniku na $3: $4",
        "logentry-suppress-revision": "$1 je tajno {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|izmene|$5 izmena}} na stranici $3: $4",
        "logentry-suppress-event-legacy": "$1 је tajno {{GENDER:$2|promenio|promenila}} vidljivost događaj u dnevniku na $3",
        "logentry-suppress-revision-legacy": "$1 je tajno {{GENDER:$2|promenio|promenila}} vidljivost izmena na stranici $3",
        "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-rights-autopromote": "$1 je automatski {{GENDER:$1|unapređen|unapređena}} iz $4 u $5",
+       "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",
        "rightsnone": "(nema)",
+       "revdelete-summary": "opis izmene",
        "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:",
        "expand_templates_input": "Unos:",
        "expand_templates_output": "Rezultat",
        "expand_templates_xml_output": "XML izlaz",
+       "expand_templates_html_output": "Sirov HTML izlaz",
        "expand_templates_ok": "U redu",
        "expand_templates_remove_comments": "Ukloni komentare",
        "expand_templates_remove_nowiki": "Poništava efekat <nowiki> tagova u prikazu članaka",
        "expand_templates_generate_xml": "Prikaži XML stablo",
+       "expand_templates_generate_rawhtml": "Prikaži sirov HTML",
        "expand_templates_preview": "Prikaz",
-       "right-pagelang": "menjanje jezika stranice"
+       "pagelang-name": "Stranica",
+       "pagelang-language": "Jezik",
+       "pagelang-select-lang": "Izaberi jezik",
+       "right-pagelang": "menjanje jezika stranice",
+       "action-pagelang": "promenu jezika stranice",
+       "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-table-extensions": "Moguće ekstenzije",
+       "mediastatistics-table-count": "Broj datoteka",
+       "mediastatistics-table-totalbytes": "Ukupna veličina",
+       "mediastatistics-header-bitmap": "Bitmap slike",
+       "mediastatistics-header-drawing": "Crteži (vektorske slike)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Video",
+       "mediastatistics-header-office": "Kancelarija"
 }
index 8cc2bbd..8218904 100644 (file)
        "pager-newer-n": "{{PLURAL:$1|nyunr wan|nyunr $1}}",
        "pager-older-n": "{{PLURAL:$1|owrur wan|owrur $1}}",
        "booksources": "Buku source",
-       "booksources-go": "Suku",
        "specialloguserlabel": "Kebroikiman:",
        "speciallogtitlelabel": "Papira nen:",
        "log": "Log buku",
        "watchthispage": "Tan luku a papira disi",
        "unwatch": "No tan luku",
        "watchlist-details": "{{PLURAL:$1|Wan papira|$1 papira}} de ini yu Tan Luku réy, sondro fu teri den kruderi papira.",
-       "wlshowlast": "Sori laste $1 yuru, $2 dey ($3)",
+       "wlshowlast": "Sori laste $1 yuru, $2 dey ()",
        "watching": "A wiki e poti a papira disi ini yu Tan Luku...",
        "unwatching": "A wiki e puru a papira disi fu yu Tan Luku...",
        "deletepage": "Disi papira trowe",
        "metadata-expand": "Sori moro fin'fini",
        "metadata-collapse": "Kibri a fin'fini",
        "metadata-fields": "Den EXIF-metadata boksu ini a boskopu disi o sori owktu tapu wan prenki papira, efu a metadata tabel tapu.\nTrawan o kibri.\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",
-       "watchlistall2": "ala",
        "namespacesall": "ala",
        "monthsall": "ala",
        "confirm_purge_button": "oki",
index af91034..c65edf6 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Jatrobat",
-            "MF-Warburg",
-            "Sibande"
-        ]
-    },
-    "sunday": "LiSontfo",
-    "monday": "Msombuluko",
-    "tuesday": "Lesibili",
-    "wednesday": "Lesitsatfu",
-    "thursday": "Lesine",
-    "friday": "Lesihlanu",
-    "saturday": "Mgcibelo",
-    "sun": "LiSontfo",
-    "mon": "Msombuluko",
-    "tue": "Lesibili",
-    "wed": "Lesitsatfu",
-    "thu": "Lesine",
-    "fri": "Lesihlanu",
-    "sat": "Mgcibelo",
-    "january": "Bhimbidvwane",
-    "february": "iNdlovana",
-    "march": "iNdlovu",
-    "april": "Mabasa",
-    "may_long": "iNkhwekhweti",
-    "june": "iNhlaba",
-    "july": "Kholwane",
-    "august": "iNgci",
-    "september": "iNyoni",
-    "october": "iMphala",
-    "november": "Lweti",
-    "december": "iNgongoni",
-    "january-gen": "Bhimbidvwane",
-    "february-gen": "iNdlovana",
-    "march-gen": "iNdlovu",
-    "april-gen": "Mabasa",
-    "may-gen": "iNkhwekhweti",
-    "june-gen": "iNhlaba",
-    "july-gen": "Kholwane",
-    "august-gen": "iNgci",
-    "september-gen": "iNyoni",
-    "october-gen": "iMphala",
-    "november-gen": "Lweti",
-    "december-gen": "iNgongoni",
-    "jan": "Bhi",
-    "feb": "iNdlova",
-    "mar": "iNdlovu",
-    "apr": "Mab",
-    "may": "iNkhwe",
-    "jun": "iNhla",
-    "jul": "Kho",
-    "aug": "iNgci",
-    "sep": "iNyo",
-    "oct": "iMpha",
-    "nov": "Lwe",
-    "dec": "iNgo",
-    "category_header": "Makhasi lakulomkhakha \"$1\"",
-    "subcategories": "Mikhakha lengaphansi",
-    "category-media-header": "i-Media lekulomkhakha \"$1\"",
-    "category-empty": "''Lomkhakha ute makhasi nobe i-media lewuphetse.''",
-    "hidden-category-category": "Mikhakha lefihliwe",
-    "listingcontinuesabbrev": "chubeka.",
-    "index-category": "Makhasi lacokelelwe",
-    "noindex-category": "Makhasi lasabalele",
-    "about": "Kabanti",
-    "article": "Likhasi lentfo",
-    "newwindow": "(kuvulekela tukweli-window lelisha)",
-    "cancel": "Yekela",
-    "moredotdotdot": "Lokunyenti...",
-    "mypage": "Likhasi lami",
-    "mytalk": "Tingcoco tami",
-    "anontalk": "Tingcogco letentwe ngulelikheli lale-IP",
-    "qbfind": "Tfola",
-    "qbbrowse": "Browse",
-    "qbedit": "Hlela",
-    "qbpageoptions": "Lelikhasi",
-    "qbmyoptions": "Makhasi ami",
-    "vector-action-addsection": "Ngeta sihloko",
-    "vector-action-move": "Khweshisa",
-    "vector-view-create": "Create",
-    "vector-view-edit": "Hlela",
-    "vector-view-history": "Bona umlandvo",
-    "vector-view-view": "Fundza",
-    "actions": "Tento",
-    "returnto": "Buyela ku $1.",
-    "help": "Sita",
-    "search": "Sesha",
-    "searchbutton": "Sesha",
-    "go": "Hamba",
-    "searcharticle": "Hamba",
-    "history": "Umlandvo walelikhasi",
-    "history_short": "Umlandvo",
-    "print": "Print",
-    "edit": "Hlela",
-    "create": "Yakha",
-    "editthispage": "Hlela lelikhasi",
-    "create-this-page": "Yakha lelikhasi",
-    "delete": "Sula",
-    "deletethispage": "Sula lelikhasi",
-    "protect": "Vikela",
-    "protect_change": "gucula",
-    "protectthispage": "Vikela lelikhasi",
-    "unprotect": "Yekelela",
-    "unprotectthispage": "Yekelela lelikhasi",
-    "newpage": "Likhasi lelisha",
-    "talkpage": "Coca ngalelikhasi",
-    "talkpagelinktext": "Ingcoco",
-    "specialpage": "Likhasi lelibalulekile",
-    "personaltools": "Mathulusi emuntfu",
-    "postcomment": "Sihloko lesinsha",
-    "articlepage": "Bona likhasi lelicuketse",
-    "talk": "Ingcoco",
-    "views": "Kubukeka",
-    "toolbox": "Libhokisi Lemathulusi",
-    "userpage": "Buna likhasi lemuntfu",
-    "projectpage": "Bona likhasi leprojekthi",
-    "imagepage": "Bona lelifayela likhasi",
-    "mediawikipage": "Bona likhasi lemiyaleto",
-    "viewhelppage": "Bona likhasi lelusito",
-    "categorypage": "Bona likhasi lemikhakha",
-    "viewtalkpage": "Bona ingcoco",
-    "otherlanguages": "Ngaletinye tilwimi",
-    "redirectedfrom": "(Utfunyelelwe likhasi $1)",
-    "redirectpagesub": "Likhasi lekutfumela",
-    "lastmodifiedat": "Lelikhasi ligcine kushintjwa ngetingu $1, ngo $2.",
-    "viewcount": "Lelikhasi selibonwe {{PLURAL:$1|kanye|kayi $1}}.",
-    "protectedpage": "Likhasi lelivikelekile",
-    "jumpto": "Zuba ku:",
-    "jumptosearch": "sesha",
-    "view-pool-error": "Siyacolisa, maseva etfu agwele kakhulu ngalesikhatsi.\nKunebantfu labanyenti labatama kubona lelikhasi.\nSicela ume kancane ngaphambi lwekuphindze ubone lelikhasi.\n\n$1",
-    "aboutsite": "Kabanti nge {{SITENAME}}",
-    "aboutpage": "Project:Kabanti",
-    "copyright": "Lokucuketfwe kungaphansi kwe $1.",
-    "copyrightpage": "{{ns:project}}:Malungelo ekukhicita",
-    "currentevents": "Tentakalo tanyalo",
-    "currentevents-url": "Project:Tentakalo tanyalo",
-    "edithelp": "Lusito ngekuhlela",
-    "mainpage": "Likhasi Lelikhulu",
-    "mainpage-description": "Likhasi lelikhulu",
-    "policy-url": "Project:Umtsetfo",
-    "portal": "Likhefi le-inthanethi",
-    "portal-url": "Project:Likhefi le-inthanethi",
-    "badaccess": "Liphutsa lemalungelo",
-    "badaccess-group0": "Awukavunyelwa kwenta lesento lobowutama kusenta.",
-    "badaccess-groups": "Lesento losicelile sincishiselwe bantfu labakule {{PLURAL:$2|ncumbi|labakunobe nguyiphi incumbi}}: $1.",
-    "ok": "Kulungile",
-    "retrievedfrom": "Kutsatfwe ku \"$1\"",
-    "youhavenewmessages": "Una $1 ($2).",
-    "youhavenewmessagesmulti": "Unemilayeto lemisha nge $1",
-    "editsection": "hlela",
-    "editold": "hlela",
-    "viewsourceold": "Bona kwakheka",
-    "editlink": "hlela",
-    "viewsourcelink": "Bona kwakheka",
-    "editsectionhint": "Hlela sihloko: $1",
-    "toc": "Lokucuketfwe",
-    "showtoc": "khomba",
-    "hidetoc": "fihla",
-    "thisisdeleted": "Bona nobe buyisela esimweni $1?",
-    "viewdeleted": "Bona $1?",
-    "nstab-main": "Likhasi",
-    "nstab-user": "Umuntfu",
-    "nstab-help": "Likhasi lelusito",
-    "loginlanguagelabel": "Lulwimi: $1",
-    "search-relatedarticle": "Lokuhlobene",
-    "searcheverything-enable": "Sesha onke ma namespaces",
-    "searchrelated": "lokuhlobene",
-    "searchall": "konke",
-    "showingresults": "Ngaphasi kukhonjiswa kuya ku {{PLURAL:$1|'''1''' umphumela|'''$1''' miphumela}} kucalwa nga #'''$2'''.",
-    "showingresultsnum": "Ngaphansi kukhonjiswa {{PLURAL:$3|'''1''' umphumela|'''$3''' miphumela}} kucalwa nga #'''$2'''.",
-    "showingresultsheader": "{{PLURAL:$5|Umphumela '''$1''' of '''$3'''|Imiphumela '''$1 - $2''' ye '''$3'''}} ya '''$4'''",
-    "search-nonefound": "Kute umphume lotfolwe/lofanele lesicelo sakho.",
-    "powersearch-legend": "Sesha ngalokuphakeme",
-    "powersearch-ns": "Sesha ku namespaces:",
-    "powersearch-redir": "Makhasi latfumelayo",
-    "powersearch-togglelabel": "Buka:",
-    "powersearch-toggleall": "Konke",
-    "powersearch-togglenone": "Kute",
-    "search-external": "Sesha ngelithulusi langaphandle",
-    "searchdisabled": "{{SITENAME}} kusesha kuvinjiwe.\nUngasesha nge Google.\nNaka kutsi makhasi abo e {{SITENAME}} angaba sekadlulelwe sikhatsi.",
-    "searchresultshead": "Sesha",
-    "uid": "Matisi Wemuntfu:",
-    "yourlanguage": "Lulwimi:",
-    "listfiles_date": "Lusuku",
-    "listfiles_name": "Ligama",
-    "listfiles_user": "Umuntfu",
-    "filehist-datetime": "Lusuku/Sikhatsi",
-    "filehist-user": "Umuntfu",
-    "brokenredirects-edit": "hlela",
-    "withoutinterwiki-submit": "Khomba",
-    "move": "Khweshisa",
-    "booksources-go": "Hamba",
-    "specialloguserlabel": "Umuntfu:",
-    "allpagessubmit": "Hamba",
-    "linksearch-ok": "Sesha",
-    "listusers-submit": "Khomba",
-    "watch": "Gadza",
-    "unwatch": "Yekela kugadza",
-    "restriction-edit": "Hlela",
-    "restriction-move": "Khweshisa",
-    "restriction-create": "Create",
-    "undelete-search-submit": "Sesha",
-    "sp-contributions-talk": "ingcoco",
-    "sp-contributions-submit": "Sesha",
-    "ipblocklist-submit": "Sesha",
-    "movelogpage": "Khweshisa i-log",
-    "allmessagesname": "Ligama",
-    "tooltip-search": "Sesha i-{{SITENAME}}",
-    "tooltip-p-logo": "Vakashela likhasi lelikhulu",
-    "ilsubmit": "Sesha",
-    "imgmultigo": "Hamba!",
-    "table_pager_limit_submit": "Hamba",
-    "version-specialpages": "Emakhasi labalulekile",
-    "specialpages": "Emakhasi labalulekile"
+       "@metadata": {
+               "authors": [
+                       "Jatrobat",
+                       "MF-Warburg",
+                       "Sibande",
+                       "Bobbyshabangu"
+               ]
+       },
+       "sunday": "LiSontfo",
+       "monday": "Msombuluko",
+       "tuesday": "Lesibili",
+       "wednesday": "Lesitsatfu",
+       "thursday": "Lesine",
+       "friday": "Lesihlanu",
+       "saturday": "Mgcibelo",
+       "sun": "LiSontfo",
+       "mon": "Msombuluko",
+       "tue": "Lesibili",
+       "wed": "Lesitsatfu",
+       "thu": "Lesine",
+       "fri": "Lesihlanu",
+       "sat": "Mgcibelo",
+       "january": "Bhimbidvwane",
+       "february": "iNdlovana",
+       "march": "iNdlovu",
+       "april": "Mabasa",
+       "may_long": "iNkhwekhweti",
+       "june": "iNhlaba",
+       "july": "Kholwane",
+       "august": "iNgci",
+       "september": "iNyoni",
+       "october": "iMphala",
+       "november": "Lweti",
+       "december": "iNgongoni",
+       "january-gen": "Bhimbidvwane",
+       "february-gen": "iNdlovana",
+       "march-gen": "iNdlovu",
+       "april-gen": "Mabasa",
+       "may-gen": "iNkhwekhweti",
+       "june-gen": "iNhlaba",
+       "july-gen": "Kholwane",
+       "august-gen": "iNgci",
+       "september-gen": "iNyoni",
+       "october-gen": "iMphala",
+       "november-gen": "Lweti",
+       "december-gen": "iNgongoni",
+       "jan": "Bhi",
+       "feb": "iNdlova",
+       "mar": "iNdlovu",
+       "apr": "Mab",
+       "may": "iNkhwe",
+       "jun": "iNhla",
+       "jul": "Kho",
+       "aug": "iNgci",
+       "sep": "iNyo",
+       "oct": "iMpha",
+       "nov": "Lwe",
+       "dec": "iNgo",
+       "category_header": "Makhasi lakulomkhakha \"$1\"",
+       "subcategories": "Mikhakha lengaphansi",
+       "category-media-header": "i-Media lekulomkhakha \"$1\"",
+       "category-empty": "''Lomkhakha ute makhasi nobe i-media lewuphetse.''",
+       "hidden-category-category": "Mikhakha lefihliwe",
+       "listingcontinuesabbrev": "chubeka.",
+       "index-category": "Makhasi lacokelelwe",
+       "noindex-category": "Makhasi lasabalele",
+       "about": "Kabanti",
+       "article": "Likhasi lentfo",
+       "newwindow": "(kuvulekela tukweli-window lelisha)",
+       "cancel": "Yekela",
+       "moredotdotdot": "Lokunyenti...",
+       "mypage": "Likhasi lami",
+       "mytalk": "Tingcoco tami",
+       "anontalk": "Tingcogco letentwe ngulelikheli lale-IP",
+       "qbfind": "Tfola",
+       "qbbrowse": "Browse",
+       "qbedit": "Hlela",
+       "qbpageoptions": "Lelikhasi",
+       "qbmyoptions": "Makhasi ami",
+       "actions": "Tento",
+       "returnto": "Buyela ku $1.",
+       "help": "Sita",
+       "search": "Sesha",
+       "searchbutton": "Sesha",
+       "go": "Hamba",
+       "searcharticle": "Hamba",
+       "history": "Umlandvo walelikhasi",
+       "history_short": "Umlandvo",
+       "print": "Print",
+       "edit": "Hlela",
+       "create": "Yakha",
+       "editthispage": "Hlela lelikhasi",
+       "create-this-page": "Yakha lelikhasi",
+       "delete": "Sula",
+       "deletethispage": "Sula lelikhasi",
+       "protect": "Vikela",
+       "protect_change": "gucula",
+       "protectthispage": "Vikela lelikhasi",
+       "unprotect": "Yekelela",
+       "unprotectthispage": "Yekelela lelikhasi",
+       "newpage": "Likhasi lelisha",
+       "talkpage": "Coca ngalelikhasi",
+       "talkpagelinktext": "Ingcoco",
+       "specialpage": "Likhasi lelibalulekile",
+       "personaltools": "Mathulusi emuntfu",
+       "articlepage": "Bona likhasi lelicuketse",
+       "talk": "Ingcoco",
+       "views": "Kubukeka",
+       "toolbox": "Libhokisi Lemathulusi",
+       "userpage": "Buna likhasi lemuntfu",
+       "projectpage": "Bona likhasi leprojekthi",
+       "imagepage": "Bona lelifayela likhasi",
+       "mediawikipage": "Bona likhasi lemiyaleto",
+       "viewhelppage": "Bona likhasi lelusito",
+       "categorypage": "Bona likhasi lemikhakha",
+       "viewtalkpage": "Bona ingcoco",
+       "otherlanguages": "Ngaletinye tilwimi",
+       "redirectedfrom": "(Utfunyelelwe likhasi $1)",
+       "redirectpagesub": "Likhasi lekutfumela",
+       "lastmodifiedat": "Lelikhasi ligcine kushintjwa ngetingu $1, ngo $2.",
+       "viewcount": "Lelikhasi selibonwe {{PLURAL:$1|kanye|kayi $1}}.",
+       "protectedpage": "Likhasi lelivikelekile",
+       "jumpto": "Zuba ku:",
+       "jumptosearch": "sesha",
+       "view-pool-error": "Siyacolisa, maseva etfu agwele kakhulu ngalesikhatsi.\nKunebantfu labanyenti labatama kubona lelikhasi.\nSicela ume kancane ngaphambi lwekuphindze ubone lelikhasi.\n\n$1",
+       "aboutsite": "Kabanti nge {{SITENAME}}",
+       "aboutpage": "Project:Kabanti",
+       "copyright": "Lokucuketfwe kungaphansi kwe $1.",
+       "copyrightpage": "{{ns:project}}:Malungelo ekukhicita",
+       "currentevents": "Tentakalo tanyalo",
+       "currentevents-url": "Project:Tentakalo tanyalo",
+       "edithelp": "Lusito ngekuhlela",
+       "mainpage": "Likhasi Lelikhulu",
+       "mainpage-description": "Likhasi lelikhulu",
+       "policy-url": "Project:Umtsetfo",
+       "portal": "Likhefi le-inthanethi",
+       "portal-url": "Project:Likhefi le-inthanethi",
+       "badaccess": "Liphutsa lemalungelo",
+       "badaccess-group0": "Awukavunyelwa kwenta lesento lobowutama kusenta.",
+       "badaccess-groups": "Lesento losicelile sincishiselwe bantfu labakule {{PLURAL:$2|ncumbi|labakunobe nguyiphi incumbi}}: $1.",
+       "ok": "Kulungile",
+       "retrievedfrom": "Kutsatfwe ku \"$1\"",
+       "youhavenewmessages": "Una $1 ($2).",
+       "youhavenewmessagesmulti": "Unemilayeto lemisha nge $1",
+       "editsection": "hlela",
+       "editold": "hlela",
+       "viewsourceold": "Bona kwakheka",
+       "editlink": "hlela",
+       "viewsourcelink": "Bona kwakheka",
+       "editsectionhint": "Hlela sihloko: $1",
+       "toc": "Lokucuketfwe",
+       "showtoc": "khomba",
+       "hidetoc": "fihla",
+       "thisisdeleted": "Bona nobe buyisela esimweni $1?",
+       "viewdeleted": "Bona $1?",
+       "nstab-main": "Likhasi",
+       "nstab-user": "Umuntfu",
+       "nstab-help": "Likhasi lelusito",
+       "loginlanguagelabel": "Lulwimi: $1",
+       "pt-login-button": "Ngena",
+       "revdelete-text-file": "emaveshini lacishiwe atosolo avela emlandvweni, kodvwa letinye tincenywe talendzaba ngete yabakhona emphakatsini.",
+       "revdelete-text-others": "Labanye bahleli {{LIGAMALELISAYITHI}} batokhona kutfola mibiko lecishiwe baphindze bakhone kuyibuyisa kutsi ibekhona besebentisa tinhlelo letifanako te interface, loku kungenteka kuphela uma kunemigomo letsite nemibandzela.",
+       "search-relatedarticle": "Lokuhlobene",
+       "searchrelated": "lokuhlobene",
+       "searchall": "konke",
+       "showingresults": "Ngaphasi kukhonjiswa kuya ku {{PLURAL:$1|'''1''' umphumela|'''$1''' miphumela}} kucalwa nga #'''$2'''.",
+       "search-nonefound": "Kute umphume lotfolwe/lofanele lesicelo sakho.",
+       "powersearch-legend": "Sesha ngalokuphakeme",
+       "powersearch-ns": "Sesha ku namespaces:",
+       "powersearch-togglelabel": "Buka:",
+       "powersearch-toggleall": "Konke",
+       "powersearch-togglenone": "Kute",
+       "search-external": "Sesha ngelithulusi langaphandle",
+       "searchdisabled": "{{SITENAME}} kusesha kuvinjiwe.\nUngasesha nge Google.\nNaka kutsi makhasi abo e {{SITENAME}} angaba sekadlulelwe sikhatsi.",
+       "searchresultshead": "Sesha",
+       "yourlanguage": "Lulwimi:",
+       "listfiles_date": "Lusuku",
+       "listfiles_name": "Ligama",
+       "listfiles_user": "Umuntfu",
+       "filehist-datetime": "Lusuku/Sikhatsi",
+       "filehist-user": "Umuntfu",
+       "brokenredirects-edit": "hlela",
+       "withoutinterwiki-submit": "Khomba",
+       "move": "Khweshisa",
+       "specialloguserlabel": "Umuntfu:",
+       "allpagessubmit": "Hamba",
+       "linksearch-ok": "Sesha",
+       "listusers-submit": "Khomba",
+       "watch": "Gadza",
+       "unwatch": "Yekela kugadza",
+       "restriction-edit": "Hlela",
+       "restriction-move": "Khweshisa",
+       "restriction-create": "Create",
+       "undelete-search-submit": "Sesha",
+       "sp-contributions-talk": "ingcoco",
+       "sp-contributions-submit": "Sesha",
+       "ipblocklist-submit": "Sesha",
+       "movelogpage": "Khweshisa i-log",
+       "allmessagesname": "Ligama",
+       "tooltip-search": "Sesha i-{{SITENAME}}",
+       "tooltip-p-logo": "Vakashela likhasi lelikhulu",
+       "ilsubmit": "Sesha",
+       "imgmultigo": "Hamba!",
+       "table_pager_limit_submit": "Hamba",
+       "version-specialpages": "Emakhasi labalulekile",
+       "specialpages": "Emakhasi labalulekile"
 }
index ad862c8..27e4dca 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Cbrown1023",
-            "Zyxoas (on st.wikipedia.org)"
-        ]
-    },
-    "sunday": "Sontaha",
-    "monday": "Mantaha",
-    "tuesday": "Labobedi",
-    "wednesday": "Laboraro",
-    "thursday": "Labone",
-    "friday": "Labohlano",
-    "saturday": "Moqebelo",
-    "january": "Pherekgong",
-    "february": "Hlakola",
-    "march": "Hlakubele",
-    "april": "Mmesa",
-    "may_long": "Motsheanong",
-    "june": "Phupjane",
-    "july": "Phupu",
-    "august": "Phato",
-    "september": "Lwetse",
-    "october": "Mphalane",
-    "november": "Pudungwana",
-    "december": "Tshitwe",
-    "may-gen": "Motsheanong",
-    "jan": "Phere",
-    "feb": "Hlako",
-    "mar": "Hlaku",
-    "apr": "Mmesa",
-    "may": "Motshe",
-    "jun": "Phupjane",
-    "jul": "Phupu",
-    "aug": "Phato",
-    "sep": "Lwetse",
-    "oct": "Mphala",
-    "nov": "Pudu",
-    "dec": "Tshitwe",
-    "category_header": "Dingolwa tse mokgeng wa \"$1\"",
-    "mypage": "Leqephe la ka",
-    "mytalk": "Leqephe la ka la moqoqo",
-    "navigation": "Eya ho",
-    "faq": "Dipotso-mehla",
-    "returnto": "Kgutlela ho $1.",
-    "tagline": "E tswa ho {{SITENAME}}",
-    "search": "Fuputsa",
-    "history": "Nalane",
-    "history_short": "Nalane",
-    "newpage": "Leqephe le letjha",
-    "talkpage": "Qoqa ka leqephe lena",
-    "talk": "Moqoqo",
-    "categorypage": "Mpontshe leqephe la mekga",
-    "otherlanguages": "Ka maleme a mang",
-    "jumptosearch": "phuputso",
-    "mainpage": "Leqephe la pele",
-    "mainpage-description": "Leqephe la pele",
-    "portal": "Potjho e kopano",
-    "portal-url": "Project:Potjho e kopano",
-    "retrievedfrom": "E tswa ho \"$1\"",
-    "nstab-main": "Sengolwa",
-    "nstab-mediawiki": "Molaetsa",
-    "nstab-help": "Leqephe la thusa",
-    "nstab-category": "Mokga",
-    "yourpasswordagain": "Ngola lepetjo hape",
-    "remembermypassword": "O nkgopole (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "nologinlink": "Ingodisetse",
-    "createaccount": "Ingodisetse",
-    "gotaccount": "O se o ingodisitse? '''$1'''.",
-    "createaccountmail": "ka e-mail",
-    "badretype": "Mapetjo a mabedi o a ngotseng ha a tshwane.",
-    "mailmypassword": "Nthomele password ya ka ka email",
-    "changepassword": "Fetola lepetjo",
-    "oldpassword": "Lepetjo la kgale:",
-    "newpassword": "Lepetjo le letjha:",
-    "retypenew": "Ngola lepetjo le letjha hape:",
-    "savearticle": "Le boloke",
-    "showpreview": "Mpontshe hore le tlo ba jwang",
-    "showdiff": "Mpontshe hore ho tlo fetoha eng",
-    "accmailtitle": "Lepetjo le rometswe.",
-    "accmailtext": "Lepetjo la \"$1\" le se le rometswe ho $2.",
-    "note": "'''Ela hloko:'''",
-    "searchresultshead": "Phuputso",
-    "allowemail": "Dumella batho ba bang hore ba nthomelle di-email",
-    "download": "Jarolla",
-    "randompage": "Mpontshe leqephe le leng le le leng",
-    "statistics": "Dipalopalo",
-    "mostcategories": "Dingolwa tse mekga e mengata",
-    "shortpages": "Maqephe a makgutshwane",
-    "longpages": "Maqephe a matelele",
-    "newpages": "Maqephe a matjha",
-    "allpages": "Maqephe ohle",
-    "categories": "Mekga",
-    "categoriespagetext": "The following {{PLURAL:$1|category contains|categories contain}} pages or media.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
-    "emailuser": "Romela motho enwa email",
-    "emailfrom": "E tswa ho:",
-    "emailto": "Ho:",
-    "emailsubject": "Ka:",
-    "emailmessage": "O re:",
-    "emailsend": "E romele",
-    "emailsent": "E rometswe",
-    "emailsenttext": "Email ya molaetsa wa hao e se e rometswe.",
-    "contributions": "Tse ngotsweng ke motho enwa",
-    "mycontris": "Tse ngotsweng ke nna",
-    "ipbreason": "Lebaka",
-    "infiniteblock": "ho eya ho ile",
-    "allmessagesname": "Lebitso",
-    "allmessagesdefault": "Se neng se ngotswe pele",
-    "allmessagescurrent": "Se ngotsweng hona jwale"
+       "@metadata": {
+               "authors": [
+                       "Cbrown1023",
+                       "Zyxoas (on st.wikipedia.org)"
+               ]
+       },
+       "sunday": "Sontaha",
+       "monday": "Mantaha",
+       "tuesday": "Labobedi",
+       "wednesday": "Laboraro",
+       "thursday": "Labone",
+       "friday": "Labohlano",
+       "saturday": "Moqebelo",
+       "january": "Pherekgong",
+       "february": "Hlakola",
+       "march": "Hlakubele",
+       "april": "Mmesa",
+       "may_long": "Motsheanong",
+       "june": "Phupjane",
+       "july": "Phupu",
+       "august": "Phato",
+       "september": "Lwetse",
+       "october": "Mphalane",
+       "november": "Pudungwana",
+       "december": "Tshitwe",
+       "may-gen": "Motsheanong",
+       "jan": "Phere",
+       "feb": "Hlako",
+       "mar": "Hlaku",
+       "apr": "Mmesa",
+       "may": "Motshe",
+       "jun": "Phupjane",
+       "jul": "Phupu",
+       "aug": "Phato",
+       "sep": "Lwetse",
+       "oct": "Mphala",
+       "nov": "Pudu",
+       "dec": "Tshitwe",
+       "category_header": "Dingolwa tse mokgeng wa \"$1\"",
+       "mypage": "Leqephe la ka",
+       "mytalk": "Leqephe la ka la moqoqo",
+       "navigation": "Eya ho",
+       "faq": "Dipotso-mehla",
+       "returnto": "Kgutlela ho $1.",
+       "tagline": "E tswa ho {{SITENAME}}",
+       "search": "Fuputsa",
+       "history": "Nalane",
+       "history_short": "Nalane",
+       "newpage": "Leqephe le letjha",
+       "talkpage": "Qoqa ka leqephe lena",
+       "talk": "Moqoqo",
+       "categorypage": "Mpontshe leqephe la mekga",
+       "otherlanguages": "Ka maleme a mang",
+       "jumptosearch": "phuputso",
+       "mainpage": "Leqephe la pele",
+       "mainpage-description": "Leqephe la pele",
+       "portal": "Potjho e kopano",
+       "portal-url": "Project:Potjho e kopano",
+       "retrievedfrom": "E tswa ho \"$1\"",
+       "nstab-main": "Sengolwa",
+       "nstab-mediawiki": "Molaetsa",
+       "nstab-help": "Leqephe la thusa",
+       "nstab-category": "Mokga",
+       "yourpasswordagain": "Ngola lepetjo hape",
+       "remembermypassword": "O nkgopole (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "nologinlink": "Ingodisetse",
+       "createaccount": "Ingodisetse",
+       "gotaccount": "O se o ingodisitse? '''$1'''.",
+       "createaccountmail": "ka e-mail",
+       "badretype": "Mapetjo a mabedi o a ngotseng ha a tshwane.",
+       "mailmypassword": "Nthomele password ya ka ka email",
+       "changepassword": "Fetola lepetjo",
+       "oldpassword": "Lepetjo la kgale:",
+       "newpassword": "Lepetjo le letjha:",
+       "retypenew": "Ngola lepetjo le letjha hape:",
+       "savearticle": "Le boloke",
+       "showpreview": "Mpontshe hore le tlo ba jwang",
+       "showdiff": "Mpontshe hore ho tlo fetoha eng",
+       "accmailtitle": "Lepetjo le rometswe.",
+       "accmailtext": "Lepetjo la \"$1\" le se le rometswe ho $2.",
+       "note": "'''Ela hloko:'''",
+       "searchresultshead": "Phuputso",
+       "allowemail": "Dumella batho ba bang hore ba nthomelle di-email",
+       "download": "Jarolla",
+       "randompage": "Mpontshe leqephe le leng le le leng",
+       "statistics": "Dipalopalo",
+       "mostcategories": "Dingolwa tse mekga e mengata",
+       "shortpages": "Maqephe a makgutshwane",
+       "longpages": "Maqephe a matelele",
+       "newpages": "Maqephe a matjha",
+       "allpages": "Maqephe ohle",
+       "categories": "Mekga",
+       "categoriespagetext": "The following {{PLURAL:$1|category contains|categories contain}} pages or media.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
+       "emailuser": "Romela motho enwa email",
+       "emailfrom": "E tswa ho:",
+       "emailto": "Ho:",
+       "emailsubject": "Ka:",
+       "emailmessage": "O re:",
+       "emailsend": "E romele",
+       "emailsent": "E rometswe",
+       "emailsenttext": "Email ya molaetsa wa hao e se e rometswe.",
+       "contributions": "Tse ngotsweng ke motho enwa",
+       "mycontris": "Tse ngotsweng ke nna",
+       "ipbreason": "Lebaka",
+       "infiniteblock": "ho eya ho ile",
+       "allmessagesname": "Lebitso",
+       "allmessagesdefault": "Se neng se ngotswe pele",
+       "allmessagescurrent": "Se ngotsweng hona jwale"
 }
index edfbeb0..5563bfd 100644 (file)
        "mergehistory-same-destination": "Uutgongs- un Sielsiede duuren nit identisk weese",
        "mergehistory-reason": "Begruundenge:",
        "mergelog": "Fereenigengs-Logbouk",
-       "pagemerge-logentry": "fereenigede [[$1]] in [[$2]] (Versione bit $3)",
        "revertmerge": "tourääch annerd Fereenigenge",
        "mergelogpagetext": "Dit is dät Logbouk fon do fereenigede Versionsgeskichten.",
        "history-title": "Versionsgeskichte fon \"$1\"",
        "searchrelated": "früünd",
        "searchall": "aal",
        "showingresults": "Hier {{PLURAL:$1|is '''1''' Resultoat|sunt '''$1''' Resultoate}}, ounfangend mäd Nuumer '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Resultoat '''$1''' fon '''$3'''|Resultoate '''$1–$2''' fon '''$3'''}} foar '''$4'''",
        "search-nonefound": "Foar dien Säikanfroage wuuden neen Resultoate fuunen.",
        "powersearch-legend": "Fääre säike",
        "powersearch-ns": "Säik in Noomensruume:",
        "statistics": "Statistik",
        "statistics-header-pages": "Siedenstatistik",
        "statistics-header-edits": "Beoarbaidengsstatistik",
-       "statistics-header-views": "Siedenaproupstatistik",
        "statistics-header-users": "Benutserstatistik",
        "statistics-header-hooks": "Uur Statistike",
        "statistics-articles": "Inhooldssieden",
        "statistics-files": "Hoochleedene Doatäie",
        "statistics-edits": "Siedenbeoarbaidengen siet {{SITENAME}} waas ounfangd",
        "statistics-edits-average": "Beoarbaidengen pro Siede in n Truchsleek",
-       "statistics-views-total": "Siedenaproupe mädnunner",
-       "statistics-views-total-desc": "Aproupe fon nit bestoundende Sieden un fon Spezialsieden wäide nit in Reekenge nuumen",
-       "statistics-views-peredit": "Siedenaproupe pro Beoarbaidenge",
        "statistics-users": "Registrierde [[Special:ListUsers|Benutsere]]",
        "statistics-users-active": "Aktive Benutsere",
        "statistics-users-active-desc": "Benutsere mäd Beoarbaidengen {{PLURAL:$1|in do lääste 24 Uuren|in do fergeene $1 Deege}}",
-       "statistics-mostpopular": "Maast besoachte Sieden",
        "doubleredirects": "Dubbelde Fäärelaitengen",
        "doubleredirectstext": "Disse Lieste änthoalt Fääreleedengen, do der ap wiedere Fääreleedengen ferlinkje.\nÄlke Riege änthoalt Links tou ju eerste un twäide Fääreleedenge as uk dät Siel fon ju twäide Fääreleedenge, wät foar gewöönelk ju wonskede Sielsiede is, ap ju al ju eerste Fääreleedenge wiese skuul.\n<del>Truchstriekene</del> Iendraage wuuden al oumoaked.",
        "double-redirect-fixed-move": "dubbelde Fäärelaitenge aplöösd: [[$1]] → [[$2]]",
        "uncategorizedtemplates": "Nit kategorisierde Foarloagen",
        "unusedcategories": "Ferwaisede Kategorien",
        "unusedimages": "Ferwaisede Bielden",
-       "popularpages": "Sieden do oafte bekieked wäide",
        "wantedcategories": "Benutsede, man nit anlaide Kategorien",
        "wantedpages": "Wonskede Sieden",
        "wantedpages-badtitle": "Uungultigen Tittel in dat Resultoat: $1",
        "querypage-disabled": "Disse Spezialsiede wuud deaktivierd uum ju Laistenge tou behoolden.",
        "booksources": "ISBN-Säike",
        "booksources-search-legend": "Säik ätter Steeden wier me Bouke kriege kon",
-       "booksources-go": "Säike (011)",
        "booksources-text": "Dit is ne Lieste mäd Ferbiendengen tou Internetsieden, do der näie un bruukte Bouke ferkoopje. Deer kon et uk wiedere Informatione uur do Bouke reeke. {{SITENAME}} is mäd neen fon disse Anbjoodere geskäftelk ferbuunen.",
        "booksources-invalid-isbn": "Fermoudelk is ju ISBN uungultich. Säik ätter Failere in ju Kopie.",
        "specialloguserlabel": "Uutfierenden Benutser:",
        "wlheader-enotif": "E-Mail-Beskeed is aktivierd.",
        "wlheader-showupdated": "Sieden, do ätter dien lääste Besäik annerd wuuden sunt, wäide '''fat''' deerstoald.",
        "wlnote": "Hier {{PLURAL:$1|foulget do lääste Annerenge|foulgje do lääste '''$1''' Annerengen}} fon do lääste {{PLURAL:$2|Uur|'''$2''' Uuren}}.",
-       "wlshowlast": "Wies do lääste $1 Uuren, $2 Deege, of $3 (in do lääste 30 Deege).",
+       "wlshowlast": "Wies do lääste $1 Uuren, $2 Deege, of  (in do lääste 30 Deege).",
        "watchlist-options": "Anwiesoptione",
        "watching": "Beooboachtje …",
        "unwatching": "Nit beooboachtje …",
        "import": "Sieden importierje",
        "importinterwiki": "Transwiki-Import",
        "import-interwiki-text": "Wääl n Wiki un ne Siede toun Importierjen uut.\nDo Versionsdoaten un Benutsernoomen blieuwe deerbie beheelden.\nAal Transwiki-Import-Aktione wäide in dät [[Special:Log/import|Import-Logbouk]] protokollierd.",
-       "import-interwiki-source": "Wälle-Wiki/-Siede:",
        "import-interwiki-history": "Importier aal Versione fon disse Siede",
        "import-interwiki-templates": "Aal Foarloagen iensluute",
        "import-interwiki-submit": "Import",
        "simpleantispam-label": "Spamskuts-Wröige. Hier '''niks''' iendreege!",
        "pageinfo-title": "Informatione tou „$1“",
        "pageinfo-header-edits": "Beoarbaidengen",
-       "pageinfo-views": "Antaal fon Siedenaproupe",
        "pageinfo-watchers": "Antaal fon do Besäikere",
        "pageinfo-edits": "Antaal fon do  Beoarbaidengen",
        "pageinfo-authors": "Antaal fon unnerskeedelke Autoren",
        "exif-gpsspeed-n": "Knätte",
        "exif-gpsdirection-t": "Wuddelke Gjuchte",
        "exif-gpsdirection-m": "Magnetiske Gjuchte",
-       "watchlistall2": "aal",
        "namespacesall": "aal",
        "monthsall": "aal",
        "confirmemail": "Email-Adrässe bestäätigje",
        "revdelete-restricted": "Einskränkengen jäilde uk foar Administratore",
        "revdelete-unrestricted": "Ienskränkengen foar Administratore wächhoald",
        "rightsnone": "(-)",
+       "revdelete-summary": "Touhoopefoatengskommentoar",
        "searchsuggest-search": "Säik",
        "searchsuggest-containing": "Fultextsäike ätter ...",
        "expandtemplates": "Foarloagen expandierje",
index 0002de3..012b957 100644 (file)
        "tog-hidepatrolled": "Sumputkeun anu geus diroris ti béréndélan nu anyar robah",
        "tog-newpageshidepatrolled": "Sumputkeun nu geus diroris tina béréndélan kaca anyar",
        "tog-extendwatchlist": "Legaan béréndélan ngarah sakabéh parobahanana kaawaskeun",
-       "tog-usenewrc": "Parobahan grup dumasar kaca dina béréndélan anyar robah jeung awaskeuneun (maké JavaScript)",
+       "tog-usenewrc": "Parobahan grup dumasar kaca dina béréndélan anu anyar robah jeung awaskeuneun",
        "tog-numberheadings": "Nomeran lulugu sacara otomatis",
-       "tog-showtoolbar": "Témbongkeun ''toolbar'' édit (JavaScript)",
-       "tog-editondblclick": "Édit kaca ku klik ganda (JavaScript)",
-       "tog-editsectiononrightclick": "Fungsikeun ngédit sub-bagean kalawan klik-katuhu dina judul bagean (JavaScript)",
+       "tog-showtoolbar": "Témbongkeun tulbar édit",
+       "tog-editondblclick": "Édit kaca ku klik ganda",
+       "tog-editsectiononrightclick": "Fungsikeun ngédit sub-bagean kalawan klik-katuhu dina judul bagéan",
        "tog-watchcreations": "Tambahkeun kaca-kaca jieunan kuring jeung berkas muatan kuring kana awaskeuneun",
        "tog-watchdefault": "Tambahkeun kaca jeung berkas anu diédit ku kuring kana awaskeuneun",
        "tog-watchmoves": "Tambahkeun kaca jeung berkas anu dipindahkeun ka awaskeuneun",
        "tog-watchdeletion": "Tambahkeun kaca jeung berkas anu dihapus kana awaskeuneun",
+       "tog-watchrollback": "Tambahkeun kaca anu jujutanana kungsi dibalikkeun kana awaskeuneun",
        "tog-minordefault": "Tandaan sadaya éditan salaku minor luyu jeung ti dituna",
        "tog-previewontop": "Témbongkeun sawangan méméh kotak édit (lain sanggeusna)",
        "tog-previewonfirst": "Témbongkeun sawangan dina éditan munggaran",
@@ -37,7 +38,7 @@
        "tog-shownumberswatching": "Témbongkeun jumlah nu ngawaskeun",
        "tog-oldsig": "Paraf nu geus aya:",
        "tog-fancysig": "Témbongkeun paraf salaku wikitext (tanpa tumbu otomatis)",
-       "tog-uselivepreview": "Paké pramidang saharita (JavaScript) (ujicoba)",
+       "tog-uselivepreview": "Paké pramidang saharita (ujicoba)",
        "tog-forceeditsummary": "Mun kotak ringkesan éditan masih kosong, béjaan!",
        "tog-watchlisthideown": "Sumputkeun éditan kuring dina daptar awaskeuneun",
        "tog-watchlisthidebots": "Sumputkeun éditan bot dina daptar awaskeuneun",
        "tog-showhiddencats": "Témbongkeun kategori nyumput",
        "tog-norollbackdiff": "Liwat béda sanggeus malikkeun révisi",
        "tog-useeditwarning": "Béjaan kuring lamun ninggalkeun kaca édit anu parobahanana can disimpen",
+       "tog-prefershttps": "Salawasna paké sambungan aman nalika asup log",
        "underline-always": "Salawasna",
        "underline-never": "Ulah",
-       "underline-default": "Luyu jeung buhunna panyungsi",
+       "underline-default": "Buhunna kulit atawa panyungsi",
        "editfont-style": "Gaya aksara dina kotak éditan:",
        "editfont-default": "Luyu jeung buhunna panyungsi",
        "editfont-monospace": "Aksara monospasi",
@@ -65,7 +67,7 @@
        "thursday": "Kemis",
        "friday": "Jumaah",
        "saturday": "Saptu",
-       "sun": "Min",
+       "sun": "Ming",
        "mon": "Sen",
        "tue": "Sal",
        "wed": "Reb",
        "oct": "Okt",
        "nov": "Nop",
        "dec": "Dés",
+       "january-date": "$1 Januari",
+       "february-date": "$1 Pébruari",
+       "march-date": "$1 Maret",
+       "april-date": "$1 April",
+       "may-date": "$1 Méi",
+       "june-date": "$1 Juni",
+       "july-date": "$1 Juli",
+       "august-date": "$1 Agustus",
+       "september-date": "$1 Séptémber",
+       "october-date": "$1 Oktober",
+       "november-date": "$1 Nopémber",
+       "december-date": "$1 Désémber",
        "pagecategories": "{{PLURAL:$1|Kategori|Kategori}}",
        "category_header": "Artikel-artikel na kategori \"$1\"",
        "subcategories": "Subkategori",
        "newwindow": "(buka na jandéla anyar)",
        "cancel": "Bolay",
        "moredotdotdot": "Deui...",
-       "mypage": "Kaca kuring",
+       "morenotlisted": "Ieu béréndélan tacan lengkep.",
+       "mypage": "Kaca",
        "mytalk": "Obrolan",
-       "anontalk": "Obrolan pikeun IP ieu",
+       "anontalk": "Obrolan pikeun alamat IP ieu",
        "navigation": "Pituduh",
        "and": "&#32;jeung",
        "qbfind": "Panggihan",
        "actions": "Peta",
        "namespaces": "Spasi ngaran",
        "variants": "Varian",
+       "navigation-heading": "Ménu navigasi",
        "errorpagetitle": "Kasalahan",
        "returnto": "Balik deui ka $1.",
        "tagline": "Ti {{SITENAME}}",
        "permalink": "Tutumbu permanén",
        "print": "Citak",
        "view": "Tempo",
+       "view-foreign": "Tempo di $1",
        "edit": "Édit",
+       "edit-local": "Edit déskripsi lokal",
        "create": "Jieun",
+       "create-local": "Tambah déskripsi lokal",
        "editthispage": "Édit kaca ieu",
        "create-this-page": "Jieun kaca ieu",
        "delete": "Hapus",
        "deletethispage": "Hapus kaca ieu",
+       "undeletethispage": "Bolaykeun ngahapus ieu kaca",
        "undelete_short": "Bolaykeun ngahapus {{PLURAL:$1|hiji éditan|$1 éditan}}",
        "viewdeleted_short": "Témbongkeun {{PLURAL:$1|hiji éditan nu dihapus|$1 éditan nu dihapus}}",
        "protect": "Konci",
        "articlepage": "Témbongkeun kaca eusi",
        "talk": "Sawala",
        "views": "Témbongan",
-       "toolbox": "Kotak parabot",
+       "toolbox": "Parabot",
        "userpage": "Témbongkeun kaca pamaké",
        "projectpage": "Témbongkeun kaca proyék",
        "imagepage": "Tempo kaca gambar",
        "otherlanguages": "Dina séjén basa",
        "redirectedfrom": "(dipindahkeun ti $1)",
        "redirectpagesub": "Kaca alihan",
+       "redirectto": "Alihkeun ka:",
        "lastmodifiedat": "Kaca ieu panungtungan dirobah $2, $1.",
        "viewcount": "Kaca ieu geus dibuka {{PLURAL:$1|sakali|$1 kali}}.<br />",
        "protectedpage": "Kaca nu dikonci",
        "jumptonavigation": "pituduh",
        "jumptosearch": "sungsi",
        "view-pool-error": "Punten, serverna keur pinuh.\nLoba teuing nu nyoba muka ieu kaca.\nMangga cobian sanés waktos.\n\n$1",
+       "generic-pool-error": "Hampura, serverna keur pinuh.\nLoba teuing nu nyoba muka ieu sumberdaya.\nAntosan sakedap, engké cobaan deui.",
        "pool-timeout": "Béakeun waktu nungguan konci",
        "pool-queuefull": "Antrian geus pinuh",
        "pool-errorunknown": "Éror teu dipikawanoh",
+       "pool-servererror": "Palayanan ''pool counter'' teu disadiakeun ($1).",
        "aboutsite": "Ngeunaan {{SITENAME}}",
        "aboutpage": "Project:Ngeunaan",
-       "copyright": "Sadaya kandungan ieu loka ditangtayungan ku $1",
+       "copyright": "Eusina ditangtayungan ku $1 iwal lamun disebutkeun béda.",
        "copyrightpage": "{{ns:project}}:Hak cipta",
        "currentevents": "Keur lumangsung",
-       "currentevents-url": "Project:Keur lumangsung",
+       "currentevents-url": "Portal:Keur lumangsung",
        "disclaimers": "Bantahan",
        "disclaimerpage": "Project:Bantahan_umum",
        "edithelp": "Pitulung ngédit",
        "ok": "Heug",
        "retrievedfrom": "Disalin ti \"$1\"",
        "youhavenewmessages": "Anjeun boga $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Anjeun boga}} $1 ti {{PLURAL:$3|pamaké séjén|$3 pamaké}} ($2).",
+       "youhavenewmessagesmanyusers": "Anjeun boga $1 ti pamaké lian ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|obrolan anyar|obrolan anyar}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|parobahan|999=parobahan}} panungtung",
        "youhavenewmessagesmulti": "Anjeun boga talatah anyar di $1",
        "editsection": "édit",
        "editold": "édit",
        "hidetoc": "sumputkeun",
        "collapsible-collapse": "Tilepkeun",
        "collapsible-expand": "Amparkeun",
+       "confirmable-confirm": "{{GENDER:$1|Anjeun}} geus yakin?",
+       "confirmable-yes": "Enya",
+       "confirmable-no": "Henteu",
        "thisisdeleted": "Témbongkeun atawa simpen deui $1?",
        "viewdeleted": "Témbongkeun $1?",
        "restorelink": "$1 {{PLURAL:$1|éditan|éditan}} dihapus",
        "nospecialpagetext": "<strong>Anjeun ménta kaca husus nu teu dipikawanoh.</strong>\nKaca husus anu bener bisa ditempo béréndélanana dina [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Kasalahan",
        "databaseerror": "Kasalahan gudang data",
+       "databaseerror-query": "Kueri: $1",
+       "databaseerror-function": "Fungsi: $1",
+       "databaseerror-error": "Eror: $1",
        "laggedslavemode": "Awas: kandungan kaca bisa baé teu mutahir.",
        "readonly": "pangkalan data dikonci",
        "enterlockreason": "Asupkeun alesan pikeun ngonci, kaasup kira-kira iraha konci ieu rék dibuka",
        "viewsource-title": "Témbongkeun sumber pikeun $1",
        "actionthrottled": "Peta diwates",
        "actionthrottledtext": "Salaku tetengger anti-spam, anjeun teu diwenangkeun loba kitu peta dina jangka waktu anu sakitu heureutna. Mangga lajengkeun deui sanggeus sababaraha menit ka payun.",
-       "protectedpagetext": "Ieu kaca dikonci ngarah teu bisa dirobah.",
+       "protectedpagetext": "Ieu kaca dijaga tina éditan atawa peta lianna.",
        "viewsourcetext": "Anjeun bisa némbongkeun sarta nyalin sumber ieu kaca:",
        "viewyourtext": "Anjeun bisa némbongkeun sarta nyalin sumber '''éditan anjeun''' ka ieu kaca:",
        "protectedinterface": "Kaca ieu eusina teks antarmuka pikeun dipaké ku pakakas beyé sarta geus dikunci pikeun ngahindar ti kasalahan.",
        "editinginterface": "'''Awas:''' Anjeun keur ngédit kaca nu dipaké pikeun nyadiakeun téks antarmuka pikeun sopwérna.\nParobahan kana ieu kaca bakal mangaruhan pidangan antarmuka pikeun pamaké séjén.\nPikeun alihbasa, mangga sumping ka [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], proyék lokalisasi MediaWiki.",
+       "translateinterface": "Pikeun nambahkeun atawa ngarobah tarjamah keur sakabéh wiki, paké [//translatewiki.net/ translatewiki.net], proyék lokalisasi MediaWiki.",
        "cascadeprotected": "Kaca ieu geus dikonci ti éditan alatan disartakeun di {{PLURAL:$1|kaca|kaca-kaca}} katut anu geus dikonci kalawan pilihan \"runtun\": $2",
        "namespaceprotected": "Anjeun teu ngabogaan hak pikeun ngédit kaca di ngaranspasi '''$1'''.",
        "customcssprotected": "Anjeun teu teu diwenangkeun pikeun ngédit ieu kaca CSS, sabab ngandung setélan pribadi kontributor séjén.",
        "customjsprotected": "Anjeun teu teu diwenangkeun pikeun ngédit ieu kaca JavaScript, sabab ngandung setélan pribadi kontributor séjén.",
+       "mycustomcssprotected": "Anjeun teu boga kawenangan pikeun ngédit kaca CSS ieu.",
+       "mycustomjsprotected": "Anjeun teu boga kawenangan pikeun ngédit kaca JavaScript ieu.",
+       "myprivateinfoprotected": "Anjeun teu boga kawenangan pikeun ngédit émbaran pribadi anjeun.",
+       "mypreferencesprotected": "Anjeun teu boga kawenangan pikeun ngédit préferénsi anjeun.",
        "ns-specialprotected": "Kaca dina ngaranspasi {{ns:special}} teu bisa di édit.",
        "titleprotected": "Ieu judul dikonci ku [[User:$1|$1]] kalawan alesan ''$2''.",
+       "filereadonlyerror": "Berkas \"$1\" teu bisa dirobah kusabab répositori \"$2\" keur dina mode ukur-maca.\n\nKuncén anu ngonci méré alesan: \"$3\".",
+       "exception-nologin": "Henteu asup log",
+       "exception-nologin-text": "Mangga asup log pikeun bisa asup atawa ngarobah ieu kaca.",
+       "exception-nologin-text-manual": "Mangga $1 pikeun bisa asup atawa ngarobah ieu kaca.",
        "virus-badscanner": "Kasalahan konfigurasi: panyekén virus teu dipikawanoh: ''$1''",
        "virus-scanfailed": "nyekén gagal (kode $1)",
        "virus-unknownscanner": "antivirus teu dipikawanoh:",
-       "logouttext": "'''Anjeun ayeuna geus kaluar log.'''\n\nAnjeun bisa tetep migunakeun {{SITENAME}} bari anonim, atawa bisa <span class='plainlinks'>[$1 asup log deui]</span> salaku pamaké nu sarua atawa nu séjén deui.\nMangkahadé, sababaraha kaca bakal tetep némbongkeun saolah-olah anjeun asup log kénéh nepi ka anjeun ngosongkeun ''cache'' panyungsi anjeun.",
+       "logouttext": "<strong>Anjeun ayeuna geus kaluar log.<strong>\n\nMangkahadé, sababaraha kaca bakal tetep némbongkeun saolah-olah asup kénéh log nepi ka anjeun ngosongkeun ''cache'' dina panyungsi.",
+       "welcomeuser": "Bagéa, $1!",
+       "welcomecreation-msg": "Akun anjeun geus dijieun.\nLamun minat, Anjeun bisa ngarobah [[Special:Preferences|préferénsi]] {{SITENAME}}.",
        "yourname": "Sandiasma:",
+       "userlogin-yourname": "Sandiasma",
+       "userlogin-yourname-ph": "Asupkeun sandiasma anjeun",
+       "createacct-another-username-ph": "Asupkeun sandiasma",
        "yourpassword": "Sandi anjeun",
+       "userlogin-yourpassword": "Kecap sandi",
+       "userlogin-yourpassword-ph": "Asupkeun kecap sandi anjeun",
+       "createacct-yourpassword-ph": "Asupkeun kecap sandi",
        "yourpasswordagain": "Ketik deui sandi anjeun",
+       "createacct-yourpasswordagain": "Konfirmasi kecap sandi",
+       "createacct-yourpasswordagain-ph": "Asupkeun deui kecap sandi",
        "remembermypassword": "Apalkeun login kuring dina ieu komputer (pikeun paling lila $1 {{PLURAL:$1|poé|poé}})",
+       "userlogin-remembermypassword": "Jaga ngarah angger asup log",
+       "userlogin-signwithsecure": "Paké sambungan aman",
        "yourdomainname": "Domain anjeun",
+       "password-change-forbidden": "Anjeun teu bisa ngarobah kecap sandi dina ieu wiki.",
        "externaldberror": "Aya kasalahan dina pangkalan data oténtikasi luar, atawa anjeun mémang teu diwenangkeun pikeun ngaropéa rekening luar anjeun.",
        "login": "Asup log",
        "nav-login-createaccount": "Nyieun akun/asup log",
        "logout": "Kaluar log",
        "userlogout": "Kaluar log",
        "notloggedin": "Can asup log",
+       "userlogin-noaccount": "Teu boga akun?",
+       "userlogin-joinproject": "Ngiluan {{SITENAME}}",
        "nologin": "Teu boga akun? '''$1'''.",
        "nologinlink": "Jieun akun",
        "createaccount": "Jieun akun",
        "gotaccount": "Geus boga akun? '''$1'''.",
        "gotaccountlink": "Asup log",
        "userlogin-resetlink": "Poho akun sorangan?",
-       "createaccountmail": "ku surélék",
+       "userlogin-resetpassword-link": "Poho kecap sandi?",
+       "userlogin-helplink2": "Pitulung asup log",
+       "userlogin-loggedin": "Anjeun geus asup log salaku {{GENDER:$1|$1}}.\nPaké pormulir di handap pikeun asup log salaku pamaké séjén.",
+       "userlogin-createanother": "Jieun akun séjén",
+       "createacct-emailrequired": "Alamat surélék:",
+       "createacct-emailoptional": "Alamat surélék (teu wajib)",
+       "createacct-email-ph": "Asupkeun alamat surélék anjeun",
+       "createacct-another-email-ph": "Asupkeun alamat surélék",
+       "createaccountmail": "Paké kecap sandi acak sarta kirim ka alamat surélék",
+       "createacct-realname": "Ngaran asli (teu wajib)",
        "createaccountreason": "Alesan:",
+       "createacct-reason": "Alesan",
+       "createacct-reason-ph": "Naha bet nyieun akun séjén",
+       "createacct-captcha": "Pamariksaan kaamanan",
+       "createacct-imgcaptcha-ph": "Asupkeun téks anu kabaca di luhur",
+       "createacct-submit": "Jieun akun anjeun",
+       "createacct-another-submit": "Jieun akun séjén",
+       "createacct-benefit-heading": "{{SITENAME}} téh dijieun ku jalma-jalma siga anjeun.",
+       "createacct-benefit-body1": "{{PLURAL:$1|édit|édit}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|kaca|kaca}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|kontributor|kontributor}} panungtung",
        "badretype": "Sandi nu diasupkeun teu cocog.",
        "userexists": "Sandiasma nu diasupkeun geus aya nu maké.\nMangga pilih sandiasma nu séjén.",
        "loginerror": "Kasalahan asup log",
+       "createacct-error": "Nyieun akun éror",
        "createaccounterror": "Teu bisa nyieun rekening: $1",
        "nocookiesnew": "Rekening pamaké geus dijieun, tapi anjeun can asup log. {{SITENAME}} maké ''cookies'' pikeun ngasupkeun log pamaké. Anjeun boga ''cookies'' nu ditumpurkeun. Mangga fungsikeun, teras asup log migunakeun ngaran pamaké sarta sandi nu anyar.",
        "nocookieslogin": "{{SITENAME}} migunakeun ''cookies'' pikeun ngasupkeun pamaké kana log. Anjeun boga ''cookies'' nu ditumpurkeun. Mangga pungsikeun sarta cobian deui.",
        "passwordtooshort": "Sandina kudu diwangun ku sahanteuna {{PLURAL:$1|1 karakter|$1 karakter}}.",
        "password-name-match": "Sandi anjeun kudu béda ti landihan.",
        "password-login-forbidden": "Sandiasma jeung sandina teu bisa dipaké.",
-       "mailmypassword": "Kirim sandi anyar ngaliwatan surélék",
+       "mailmypassword": "Setél ulang kecap sandi",
        "passwordremindertitle": "Pangéling sandi ti {{SITENAME}}",
        "passwordremindertext": "Aya (jigana anjeun ti alamat IP $1) nu ménta sangkan dikiriman sandi anyar asup log {{SITENAME}} ($4). Saheulaanan, sandi anyar keur pamaké \"$2\" ayeuna diganti jadi \"$3\". Anjeun kudu asup log sarta ngarobah sandi anjeun ayeuna. Ieu sandi bakal kadaluwarsa dina {{PLURAL:$5|sapoé|$5 poé}}.\n\nMun pamundut ieu datang ti nu séjén, atawa mun anjeun geus inget sandi anu tadina poho, sarta teu hayang ngarobah sandina, anjeun teu kudu ngawaro kana ieu surat sarta bisa tetep maké sandi anu ti heula.",
        "noemail": "Teu aya alamat surélék karékam pikeun \"$1\".",
        "noemailcreate": "Anjeun kudu nyadiakeun alamat surélék anu bener",
        "passwordsent": "Sandi anyar geus dikirim ka alamat surélék nu kadaptar pikeun \"$1\". Mangga asup log deui satutasna katarima.",
-       "blocked-mailpassword": "Alamat IP anjeun dipeungpeuk, moal bisa ngédit, and so\nis not allowed to use the password recovery function to prevent abuse.",
-       "eauthentsent": "Surélék konfirmasi geus dikirim ka alamat bieu. Méméh aya surat séjén asup ka rekeningna, anjeun kudu nuturkeun pituduh na surélékna pikeun ngonfirmasi yén rekening éta téh bener nu anjeun.",
-       "throttled-mailpassword": "Hiji panginget kecap sandi geus dikirimkeun dina {{PLURAL:$1|jam|$1 jam}} pamungkas.\nPikeun ngahindar disalahgunakeun, ngan hiji kecap sandi anu baris dikirimkeun saban {{PLURAL:$1|jam|$1 jam}}.",
+       "blocked-mailpassword": "Alamat IP anjeun dipeungpeuk tina kabisa ngédit, sarta moal bisa maké fungsi ganti kecap sandi ngarah hanteu disalahgunakeun.",
+       "eauthentsent": "Surélék konfirmasi geus dikirim ka alamat bieu.\nMéméh aya surat séjén asup ka akunna, anjeun kudu nuturkeun pituduh dina surélékna pikeun mastikeun yén akun éta téh bener boga anjeun.",
+       "throttled-mailpassword": "Surélék pikeun ngarobah kecap sandi geus dikirim {{PLURAL:$1|jam|$1 jam}} kaliwat.\nNgarah hanteu disalahgunakeun, ngan hiji surélék anu bakal dikirim saban {{PLURAL:$1|jam|$1 jam}}.",
        "mailerror": "Kasalahan ngirim surat: $1",
        "acct_creation_throttle_hit": "Punten,pamaké alamat IP anjeun geus nyieun {{PLURAL:$1|1 rekening|$1 rekening}} dina sapoé ieu. mangrupa jumlah nu di idinan dina sapoé.\nanjeun teu bisa nyieun deui samentara waktu.",
-       "emailauthenticated": "Alamat surélék anjeun geus dioténtikasi dina $3, $2.",
-       "emailnotauthenticated": "Alamat surélék anjeun <strong>can dioténtikasi</strong>. Moal aya surélék nu bakal dikirim pikeun fitur-fitur di handap ieu.",
+       "emailauthenticated": "Alamat surélék anjeun geus dikonfirmasi $2 tabuh $3.",
+       "emailnotauthenticated": "Alamat surélék anjeun can dikonfirmasi.\nMoal aya surélék nu bakal dikirim pikeun fitur-fitur di handap ieu.",
        "noemailprefs": "Teu aya alamat surélék, fitur di handap moal bisa jalan.",
        "emailconfirmlink": "Konfirmasi alamat surélék anjeun",
        "invalidemailaddress": "Alamat surélék teu bisa ditarima sabab formatna salah.\nMangga lebetkeun alamat nu formatna bener atawa kosongkeun baé.",
        "cannotchangeemail": "Alamat surat-é akun hanteu bisa dirobah di ieu wiki.",
+       "emaildisabled": "Ieu loka teu bisa ngirim surélék.",
        "accountcreated": "Rekening geus dijieun.",
-       "accountcreatedtext": "Rekening pamaké pikeun $1 geus dijieun.",
+       "accountcreatedtext": "Akun pamaké [[{{ns:Pamaké}}:$1|$1]] ([[{{ns:Obrolan pamaké}}:$1|obrolan]]) geus dijieun.",
        "createaccount-title": "Nyieun rekening keur {{SITENAME}}",
        "createaccount-text": "Aya nu nyieun rekening pikeun alamat surélék anjeun di {{SITENAME}} ($4) maké landihan \"$2\" sarta sandi \"$3\". Anjeun kudu asup log sarta ngaganti sandina ayeuna kénéh.\n\nMun ieu rekening balukar ayana éror, teu kudu diwaro.",
-       "login-throttled": "Anjeun geus loba teuing nyobaan asup log.\nTungguan heula sakeudeung, laju cobaan deui.",
+       "login-throttled": "Anjeun geus loba teuing nyobaan asup log.\nTungguan $1, laju cobaan deui.",
        "login-abort-generic": "Login gagal - Dibolaykeun",
+       "login-migrated-generic": "Akun anjeun geus pindah, ku kituna sandiasma anjeun geus leungit ti ieu wiki.",
        "loginlanguagelabel": "Basa: $1",
        "suspicious-userlogout": "Pamundut anjeun pikeun kaluar log ditolak ku sabab sigana dikirim ku pangaprak buntu atawa ''cache'' proxi.",
+       "createacct-another-realname-tip": "Ngaran asli hanteu diwajibkeun.\nLamun anjeun milih ngeusian, ieu ngaran bakal dipaké pikeun nandaan kontribusi anjeun.",
+       "pt-login": "Asup log",
+       "pt-login-button": "Asup log",
+       "pt-createaccount": "Jieun akun",
+       "pt-userlogout": "Kaluar log",
        "php-mail-error-unknown": "Kasalahan nu teu kanyahoan dina fungsi PHP surélék().",
        "user-mail-no-addy": "Nyobaan ngirim surélék tanpa alamat.",
        "changepassword": "Robah sandi",
-       "resetpass_announce": "Anjeun asup log migunakeun sandi samentara. Salajengna, mangga gentos ku sandi anyar di dieu:",
+       "resetpass_announce": "Pikeun nganggeuskeun asup log, anjeun kudu nyieun kecap sandi anyar.",
        "resetpass_text": "<!-- Tambahkeun téks di dieu -->",
        "resetpass_header": "Ganti sandi rekening",
        "oldpassword": "Sandi heubeul",
        "newpassword": "Sandi anyar:",
        "retypenew": "Ketik ulang sandi",
        "resetpass_submit": "Setél log asup katut sandina",
-       "changepassword-success": "Kecap sandi Anjeun geus junun dirobah! Ayeuna proses asup log Anjeun...",
+       "changepassword-success": "Kecap sandi Anjeun geus laksana dirobah!",
+       "changepassword-throttled": "Anjeun geus loba teuing nyobaan asup log.\nTungguan $1 méméh nyobaan deui.",
        "resetpass_forbidden": "Sandi henteu bisa dirobah",
        "resetpass-no-info": "Anjeun kudu asup log pkeun bisa muka ieu kaca sacara langsung.",
        "resetpass-submit-loggedin": "Ganti kecap sandi rekening",
        "resetpass-submit-cancel": "Bolay",
        "resetpass-wrong-oldpass": "Salah sandi.\nBisa jadi anjeun geus ngaganti sandina atawa ménta sandi saheulaanan anu anyar.",
+       "resetpass-recycled": "Mangga ganti kecap sandi anjeun ku nu anyar.",
+       "resetpass-temp-emailed": "Anjeun asup log migunakeun sandi témporér. Pikeun nganggeuskeun asup log, anjeun kudu nyieun kecap sandi anyar di dieu:",
        "resetpass-temp-password": "Sandi samentara:",
+       "resetpass-expired": "Kecap sandi anjeun geus kadaluwarsa. Mangga jieun anu anyar pikeun asup log.",
        "passwordreset": "Setél ulang sandi",
+       "passwordreset-text-one": "Eusian formulir ieu pikeun ngirimkeun kecap sandi saheulaanan kana surélék.",
        "passwordreset-legend": "Setél ulang sandi",
        "passwordreset-disabled": "Dina ieu wiki, sandi teu bisa disetél ulang.",
+       "passwordreset-emaildisabled": "Fitur surélék ditumpurkeun di ieu wiki.",
        "passwordreset-username": "Sandiasma:",
        "passwordreset-domain": "Domain:",
        "passwordreset-capture": "Témbongkeun surat-é hasilna?",
        "passwordreset-emailelement": "Sandiasma: $1\nSandi saheulaanan: $2",
        "passwordreset-emailsent": "Surélék pangéling geus dikirim.",
        "changeemail": "Ganti alamat surélék",
-       "changeemail-header": "Ganti alamat surélék akun",
        "changeemail-text": "Lengkepan ieu formulir pikeun ngaganti alamat surélék. Anjeun bakal kudu ngasupkeun sandi pikeun ngonfirmasi ieu parobahan.",
        "changeemail-no-info": "Anjeun kudu asup log pikeun bisa muka ieu kaca sacara langsung.",
        "changeemail-oldemail": "Alamat surélék ayeuna:",
        "changeemail-newemail": "Alamat surélék anyar:",
        "changeemail-none": "(euweuh)",
+       "changeemail-password": "Kecap sandi {{SITENAME}} Anjeun:",
        "changeemail-submit": "Ganti surélék",
-       "changeemail-cancel": "Bolay",
+       "resettokens-tokens": "Token:",
        "bold_sample": "Téks kandel",
        "bold_tip": "Téks kandel",
        "italic_sample": "Tulisan déngdék",
        "preview": "Pramidang",
        "showpreview": "Témbongkeun pramidang",
        "showdiff": "Témbongkeun parobahan",
-       "anoneditwarning": "'''Perhatosan:''' Anjeun can asup log. IP anjeun kacatet dina jujutan kaca ieu",
+       "blankarticle": "<strong>Awas:</strong> Kaca anu dijieun ku anjeun kosong kénéh.\nUpama anjeun ngaklik \"{{int:savearticle}}\" deui, kacana bakal dijieun tanpa eusi.",
+       "anoneditwarning": "<strong>Awas:</strong> Anjeun can asup log. Lamun ngédit, alamat IP anjeun bakal katempo ku balaréa. Lamun anjeun <strong>[$1 asup log]</strong> atawa <strong>[$2 nyieun akun]</strong>, ngaran anjeun bakal natrat dina jujutan éditanana, kalayan sababaraha kauntungan lianna.",
        "anonpreviewwarning": "\"Anjeun can asup log. Mun disimpen, alamat IP anjeun bakal kacatet dina jujutan ieu kaca.\"",
        "missingsummary": "'''Pépéling:''' Anjeun can ngeusian sari éditan. Mun anjeun ngaklik deui Simpen, éditan anjeun bakal disimpen tanpa sari éditan",
        "missingcommenttext": "Mangga tulis koméntar di handapeun ieu.",
        "token_suffix_mismatch": "'''Éditan anjeun ditolak sabab aplikasi klien Anjeun ngarobah karakter tanda baca dina éditan. Éditan kasebut ditolak keur nyegah kasalahan dina artikel téks. Hal ieu kadang-kadang kajadian lamun Anjeun maké proksi anonim basis web nu masalah.'''",
        "edit_form_incomplete": "'''Sawatara bagian tina wangun éditan teu nepi ka sérver; pariksa deui naha éditan Anjeun tetep gembleng sarta cobaan deui.'''",
        "editing": "Ngédit $1",
+       "creating": "Nyieun $1",
        "editingsection": "Ngédit $1 (bagian)",
        "editingcomment": "Ngédit $1 (bagian anyar)",
        "editconflict": "Konflik éditan: $1",
        "copyrightwarning": "Perhatikeun yén sadaya kontribusi ka MediaWiki dianggap medal dina panangtayungan lisénsi $2 (tempo $1 pikeun jéntréna). Mun anjeun teu miharep tulisan anjeun dirobah sarta disebarkeun deui, ulah dilebetkeun ka dieu.<br />\nAnjeun ogé jangji yén tulisan ieu dijieun ku sorangan, atawa disalin ti ''domain'' umum atawa sumberdaya bébas séjénna. '''ULAH NGASUPKEUN KARYA NU MIBANDA HAK CIPTA TANPA IDIN!'''",
        "copyrightwarning2": "Catet yén sadaya kontribusi ka {{SITENAME}} bisa diédit, dirobah, atawa dihapus ku kontributor séjén. Mun anjeun teu miharep tulisan anjeun dirobah, ulah ngintunkeun ka dieu.<br />\nAnjeun ogé mastikeun yén ieu téh pituin tulisan anjeun, atawa salinan ti domain umum atawa sumberdaya bébas séjénna (tempo $1 pikeun écésna).\n'''ULAH NGINTUNKEUN KARYA NU MIBANDA HAK CIPTA TANPA WIDI!'''",
        "longpageerror": "'''SALAH: Téks anu dikirimkeun gedéna $1 kb, leuwih ti maksimum $2 kb. Téks teu bisa disimpen.'''",
-       "readonlywarning": "'''PERHATOSAN''': pangkalan data dikonci pikeun diropéa, anjeun moal bisa nyimpen éditan anjeun ayeuna. Cobi ''cut-n-paste'' téksna ka na koropak téks sarta simpen dina waktu séjén.\n\nkuncén nu ngonci pangkalan data mikeun kajelasan : $1",
+       "readonlywarning": "<strong>Awas: pangkalan data dikonci pikeun diropéa, anjeun moal bisa nyimpen éditan anjeun ayeuna.</strong>\nMun perlu, simpen heula téksna kana berkas téks pikeun diasupkeun deui séjén mangsa.\n\nKuncén anu ngonci pangkalan data méré katerangan: $1",
        "protectedpagewarning": "'''AWAS: ieu kaca dikonci sarta ngan bisa dirobah ku pamaké nu statusna kuncén.'''\nÉntri log panungtungan ditémbongkeun di handap:",
        "semiprotectedpagewarning": "'''Catetan''': ieu kaca dikonci sarta ukur bisa dirobah ku pamaké nu geus kadaptar.\nÉntri log panungtung dibéréndélkeun di handap:",
        "cascadeprotectedwarning": "'''Awas''': ieu kaca dikonci sahingga ukur bisa dirobah ku kuncén, sabab kaasup {{PLURAL:$1|kaca|kaca}} dina panyalindungan-ngaruntuy di handap ieu:",
        "edit-gone-missing": "Kaca teu bisa dianyarkeun,\nsigana kusabab geus dihapus.",
        "edit-conflict": "Éditan bantrok",
        "edit-no-change": "Éditan anjeun teu diwaro, kusabab taya nu robah dina tulisanana.",
+       "postedit-confirmation-saved": "Éditan anjeun tos disimpen.",
        "edit-already-exists": "Teu bisa nyieun kaca anyar.\nArtikelna geus aya.",
+       "defaultmessagetext": "Téks ti dituna",
+       "invalid-content-data": "Data eusi henteu valid",
+       "content-not-allowed-here": "Eusi \"$1\" teu diijinan di kaca [[$2]]",
+       "content-model-wikitext": "wikitéks",
+       "content-model-text": "téks polos",
+       "content-model-javascript": "JavaScript",
+       "content-model-css": "CSS",
        "expensive-parserfunction-warning": "Inget!: Kaca ieu ngandung réa teuing maké fungsi ''parser''.\n\nAyeuna aya {{PLURAL:$1|$1 panggilan|$1 panggilan}}, sakuduna kurang ti $2 {{PLURAL:$2|panggilan|panggilan}}.",
        "expensive-parserfunction-category": "Kaca kalawan réa teuing maké fungsi parser",
        "post-expand-template-inclusion-warning": "Inget! : Ukuran citakan anu dipaké badag teuing.\nSawatara citakan baris teu diasupkeun.",
        "histlegend": "Pilihan béda: tandaan wadah buleud vérsina pikeun ngabandingkeun sarta pencét énter atawa tombol di handap.<br />\nKaterangan: (kiw) = bédana jeung vérsi kiwari,\n(ahir) = bédana jeung vérsi nu harita, m = éditan minor.",
        "history-fieldset-title": "Sungsi jujutan",
        "history-show-deleted": "Ukur nu dihapus",
-       "histfirst": "Pangheubeulna",
-       "histlast": "Pangahirna",
+       "histfirst": "pangheubeulna",
+       "histlast": "panganyarna",
        "historysize": "($1 {{PLURAL:$1|bit|bit}})",
        "historyempty": "(kosong)",
        "history-feed-title": "Sajarah révisi",
        "revdelete-nooldid-title": "Udagan révisi salah",
        "revdelete-nooldid-text": "Anjeun can nangtukeun atawa méré révisi pikeun ngajalankeun ieu fungsi, révisi nu di tangtukeun can aya, atawa anjeun nyoba nyumputkeun  révisi kiwari.",
        "revdelete-no-file": "Berkas anu ditujul teu kapanggih.",
-       "revdelete-show-file-confirm": "Anjeun yakin rék nempo révisi anu geus dihapus dina koropak \"<nowiki>$1</nowiki>\" ti $2 nepi ka $3?",
+       "revdelete-show-file-confirm": "Anjeun yakin rék nempo révisi anu geus dihapus dina berkas \"<nowiki>$1</nowiki>\" ti $2 nepi ka $3?",
        "revdelete-show-file-submit": "Enya",
        "logdelete-selected": "{{PLURAL:$1|pilihan keur log|pilihan keur log}}:",
        "revdelete-confirm": "Mangga geura konfirmasi yen Anjeun gaduh maksad pikeun ngalakukeun hal ieu, paham kana konsekwensina, tur nu dilakukeun ieu teh luyu sareng [[{{MediaWiki:Policy-url}}|kawijakanana]]",
        "revdelete-suppress-text": "Nyumputkeun revisi '''ukur''' bisa digunakeun keur kasus-kasus di handap ieu:\n* Informasi nu boga potensi mitenah\n* Informasi pribadi nu teu pantes\n*: ''alamat imah katut nomer telepon, nomer kartu identitas, jeung lian-liana.''",
        "revdelete-legend": "Setél réstriksi révisi:",
-       "revdelete-hide-text": "Sumputkeun téks révisi",
+       "revdelete-hide-text": "Téks révisi",
        "revdelete-hide-image": "Sumputkeun eusi gambar",
        "revdelete-hide-name": "Sumputkeun lampah sarta udagan",
        "revdelete-hide-comment": "Sumputkeun koméntar ngédit",
        "revdelete-hide-user": "Sumputkeun ngaran pamaké/IP éditor",
        "revdelete-hide-restricted": "Sumputkeun data boh ti kuncén atawa nu séjénna",
        "revdelete-radio-same": "(ulah dirobah)",
-       "revdelete-radio-set": "Enya",
-       "revdelete-radio-unset": "Ulah",
+       "revdelete-radio-set": "Nyumput",
+       "revdelete-radio-unset": "Némbongan",
        "revdelete-suppress": "Sumputkeun ogé ti kuncén",
        "revdelete-unsuppress": "Hapus watesan kana révisi anu geus dipulangkeun",
        "revdelete-log": "Alesan:",
        "revdelete-submit": "Larapkeun kana {{PLURAL:$1|révisi|révisi}} nu dipilih",
-       "revdelete-success": "Pangaturan nyumpukeun révisi junun dilarapkeun.",
+       "revdelete-success": "<strong>Visibilitas révisi geus dimutahirkeun.</strong>",
        "revdelete-failure": "'''Visibilitas révisi teu bisa diapdét:'''\n$1",
        "logdelete-success": "Log pangatur nyumputkeun junun dilarapkeun.",
        "logdelete-failure": "'''Visibilitas log teu bisa disét:'''\n$1",
        "mergehistory-same-destination": "Kaca sumber jeung tujulna teu bisa sarua",
        "mergehistory-reason": "Alesan:",
        "mergelog": "Log gabung",
-       "pagemerge-logentry": "[[$1]] geus ngagabung jeung [[$2]] (révisi nepi ka $3)",
        "revertmerge": "Pisahkeun",
        "mergelogpagetext": "Di handap ieu béréndélan prosés gabung jujutan kaca.",
        "history-title": "Jujutan révisi \"$1\"",
        "searchprofile-everything": "Sagala",
        "searchprofile-advanced": "Lengkep",
        "searchprofile-articles-tooltip": "Pilari di $1",
-       "searchprofile-images-tooltip": "Pilari koropak/file",
+       "searchprofile-images-tooltip": "Pilari berkas",
        "searchprofile-everything-tooltip": "Pilari di sakabéh eusi (kaasup kaca obrolan)",
        "searchprofile-advanced-tooltip": "Paluruh di rohang ngaran anu tangtu",
        "search-result-size": "$1 ({{PLURAL:$2|1 kecap|$2 kecap}})",
        "search-section": "(bagean $1)",
        "search-suggest": "Meureun maksud Anjeun nyaéta: $1",
        "search-interwiki-caption": "Proyék sawargi",
-       "search-interwiki-default": "$1 hasil:",
+       "search-interwiki-default": "Hasil ti $1:",
        "search-interwiki-more": "(saterusna)",
        "search-relatedarticle": "Patula-patali",
        "searchrelated": "patula-patali",
        "searchall": "sadayana",
        "showingresults": "Di handap ieu némbongkeun {{PLURAL:$1|'''1''' hasil|'''$1''' hasil}}, dimimitianku  #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Hasil '''$1''' ti '''$3'''|Hasil '''$1 - $2''' ti '''$3'''}} pikeun '''$4'''",
        "search-nonefound": "Euweuh hasil nu cocog jeung kueri.",
        "powersearch-legend": "Panéangan tuluy",
        "powersearch-ns": "Téangan di ngaranspasi:",
        "search-external": "Panéangan luar",
        "searchdisabled": "Punten! Néangan téks lengkep di {{SITENAME}} kanggo samentawis ditumpurkeun pikeun alesan kinerja. Jalaran kitu, saheulaanan anjeun bisa nyungsi di Google di handap ieu. Catet yén indéxna ngeunaan eusi {{SITENAME}} bisa jadi teu mutahir.",
        "preferences": "Préferénsi",
-       "mypreferences": "Préferéns",
+       "mypreferences": "Préferénsi",
        "prefs-edits": "Jumlah éditan:",
        "prefs-skin": "Kulit",
        "skin-preview": "Pramidang",
        "datedefault": "Tanpa préferénsi",
        "prefs-labs": "Fitur Labs",
+       "prefs-user-pages": "Kaca pamaké",
        "prefs-personal": "Data pamaké",
        "prefs-rc": "Panémbong robahan anyar jeung tukung",
        "prefs-watchlist": "Awaskeuneun",
        "prefs-watchlist-days": "Jumlah poé anu ditémbongkeun dina daptar awaskeuneun:",
-       "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+       "prefs-watchlist-days-max": "Panglilana $1 {{PLURAL:$1|poé|poé}}",
        "prefs-watchlist-edits": "Jumlah parobahan maksimum nu ditémbongkeun dina daptar panjang awaskeuneun:",
        "prefs-watchlist-edits-max": "Panglobana: 1000",
        "prefs-misc": "Pangaturan rupa-rupa",
        "prefs-email": "Pilihan surélék",
        "prefs-rendering": "Pidangan",
        "saveprefs": "Simpen préferénsi",
-       "restoreprefs": "Larapkeun setélan buhun",
+       "restoreprefs": "Larapkeun setélan buhun (sakabéh bab)",
        "prefs-editing": "Ukuran kotak téks",
        "rows": "Baris",
        "columns": "Kolom",
        "timezoneregion-indian": "Samudra Indonésia",
        "timezoneregion-pacific": "Samudra Pasifik",
        "allowemail": "Buka koropak pikeun nampa surélék ti nu séjén",
-       "prefs-searchoptions": "Piliheun Panéangan",
+       "prefs-searchoptions": "Paluruh",
        "prefs-namespaces": "Ngaranspasi",
        "default": "ti dituna",
        "prefs-files": "Koropak",
        "prefs-reset-intro": "Anjeun bisa maké ieu kaca pikeun mulangkeun préferénsi anjeun ka nu baku.\nMun geus anggeus teu bisa dibolaykeun.",
        "prefs-emailconfirm-label": "Konfirmasi surélék:",
        "youremail": "Surélék:",
-       "username": "Landihan:",
-       "prefs-memberingroups": "Anggota {{PLURAL:$1|jumplukan|jumplukan}}:",
+       "username": "{{GENDER:$1|Sandiasma}}:",
+       "prefs-memberingroups": "{{GENDER:$2|Anggota}} {{PLURAL:$1|kelompok|kelompok}}:",
        "prefs-registration": "Waktu daptar:",
        "yourrealname": "Ngaran anjeun*",
        "yourlanguage": "Basa antarbeungeut",
        "badsig": "Parafna teu valid; pariksa tag HTML-na geura.",
        "badsiglength": "Tawis leungeun panjang teuing. Kuduna kurang ti $1 {{PLURAL:$1|karaktér|karaktér}}.",
        "yourgender": "Jenis kelamin:",
-       "gender-unknown": "Teu nyebutkeun",
-       "gender-male": "Lalaki",
-       "gender-female": "Awéwé",
+       "gender-unknown": "Moal béja-béja",
+       "gender-male": "Manéhna ngédit kaca wiki",
+       "gender-female": "Manéhna ngédit kaca wiki",
        "email": "Surélék",
        "prefs-help-realname": "* Ngaran asli (pilihan): mun anjeun milih ngeusian, bakal dipaké pikeun nandaan kontribusi anjeun.",
        "prefs-help-email": "Surélék sipatna pilihan, tapi diperlukeun pikeun nyetél ulang sandi lamun anjeun poho.",
        "prefs-signature": "Tandatangan",
        "prefs-dateformat": "Format titimangsa",
        "prefs-timeoffset": "Format waktu",
-       "prefs-advancedediting": "Pilihan lengkep",
+       "prefs-advancedediting": "Pilihan umum",
+       "prefs-editor": "Éditor",
+       "prefs-preview": "Pratayang",
        "prefs-advancedrc": "Pilihan lengkep",
        "prefs-advancedrendering": "Pilihan lengkep",
        "prefs-advancedsearchoptions": "Pilihan lengkep",
        "prefs-advancedwatchlist": "Pilihan lengkep",
        "prefs-displayrc": "Pilihan pidangan",
        "prefs-displaywatchlist": "Pilihan pidangan",
+       "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Béda",
        "email-address-validity-valid": "Alamat surélék sigana bener",
        "email-address-validity-invalid": "Asupkeun alamat ratron nu bener",
        "right-move": "Mindahkeun kaca",
        "right-move-subpages": "Pindahkeun kaca katut sakabéh subkacana",
        "right-move-rootuserpages": "Mindahkeun akar kaca kontributor",
+       "right-move-categorypages": "Pindahkeun kaca kategori",
        "right-movefile": "Mindahkeun berkas",
        "right-suppressredirect": "Henteu nyieun hiji alihan ti ngaran lila sabot mindahkeun kaca",
        "right-upload": "Muatkeun koropak",
        "right-browsearchive": "Sungsi kaca nu geus dihapus",
        "right-undelete": "Balikeun deui kaca",
        "right-suppressrevision": "Mariksa jeung mulangkeun révisi anu disumputkeun ti kuncén",
+       "right-viewsuppressed": "Témbongkeun révisi anu disumputkeun ti pamaké lianna",
        "right-suppressionlog": "Nempo log privat",
        "right-block": "Peungpeuk pamaké lain tina ngédit",
        "right-blockemail": "Halangan pamaké keur ngirim Surélék",
        "right-hideuser": "Peungpeuk pamaké, tong ditingalikeun ka nulain",
        "right-ipblock-exempt": "Narabas peungpeuk IP, peungpeuk-otomatis, jeung peungpeuk rentang",
        "right-proxyunbannable": "Abaikeun pengpeuk otomatis keur proxy",
-       "right-unblockself": "Muka peungpeuk ka dirina sorangan",
-       "right-protect": "Ngarobah hambalan konci jeung ngédit kaca anu dikonci",
-       "right-editprotected": "Ngédit kaca anu dikonci (tanpa ngarobah protéksi)",
+       "right-unblockself": "buka peungpeuk sorangan",
+       "right-protect": "Ngarobah hambalan protéksi jeung édit kaca anu dikonci",
+       "right-editprotected": "Edit kaca anu dikonci salaku \"{{int:protect-level-sysop}}\"",
        "right-editinterface": "Édit antarbenget pamaké",
        "right-editusercssjs": "Édit berkas CSS jeung JS pamaké séjén",
        "right-editusercss": "Édit berkas CSS pamaké séjén",
        "right-edituserjs": "Ngédit berkas JS pamaké séjén",
+       "right-viewmywatchlist": "Tempo awaskeuneun anjeun",
+       "right-viewmyprivateinfo": "Tempo data pribadi anjeun (alamat surélék, ngaran asli)",
+       "right-editmyprivateinfo": "Robah data pribadi anjeun (alamat surélék, ngaran asli)",
+       "right-editmyoptions": "Robah préferénsi anjeun",
        "right-import": "Ngimpor kaca ti wiki séjén",
        "right-importupload": "Ngimpor kaca tina hiji koropak nu dimuat",
        "right-patrol": "Nandaan éditan pamaké séjén minangka geus dipatroli",
        "action-createpage": "mitembeyan kaca anyar",
        "action-createtalk": "mitembeyan kaca obrolan",
        "action-createaccount": "nyieun rekening pamaké ieu",
+       "action-history": "tempo jujutan ieu kaca",
        "action-minoredit": "nandaan ieu éditan salaku minor",
        "action-move": "mindahkeun ieu kaca",
        "action-move-subpages": "mindahkeun ieu kaca katut bagian-bagianana",
        "action-move-rootuserpages": "mindahkeun kaca utama kontributor",
+       "action-move-categorypages": "pindahkeun kaca kategori",
        "action-movefile": "mindahkeun ieu berkas",
        "action-upload": "ngamuat ieu berkas",
        "action-reupload": "nimpah berkas nu geus aya ieu",
        "action-suppressionlog": "nempo ieu log pribadi",
        "action-block": "meungpeuk ieu pamaké tina ngédit",
        "action-protect": "ngarobah hambalan konci ieu kaca",
-       "action-import": "impor ieu kaca ti séjén wiki",
+       "action-import": "impor kaca ti wiki séjén",
        "action-patrol": "Nandaan éditan séjén minangka geus diroris",
        "action-autopatrol": "tandaan éditan anjeun salaku geus diroris",
        "action-unwatchedpages": "témbongkeun béréndélan kaca nu teu diawaskeun",
        "action-userrights-interwiki": "ngarobah hak pamaké di wiki lianna",
        "action-siteadmin": "ngonci atawa muka konci databés",
        "action-sendemail": "ngirim surélék",
+       "action-editmywatchlist": "robah awaskeuneun anjeun",
+       "action-viewmyprivateinfo": "tempo émbaran pribadi anjeun",
+       "action-editmyprivateinfo": "robah émbaran pribadi anjeun",
        "nchanges": "$1 {{PLURAL:$1|parobahan|parobahan}}",
+       "enhancedrc-history": "jujutan",
        "recentchanges": "Anyar robah",
        "recentchanges-legend": "Pilihan parobahan anyar",
        "recentchanges-summary": "Lacak parobahan ka wiki panganyarna na kaca ieu.",
        "recentchanges-label-minor": "Ieu éditan minor",
        "recentchanges-label-bot": "Ieu parobahan dijieun ku bot",
        "recentchanges-label-unpatrolled": "Ieu éditan can karoris",
+       "recentchanges-legend-heading": "'''Pedaran:'''",
        "recentchanges-legend-newpage": "$1 - kaca anyar",
        "rcnotefrom": "Di handap ieu parobahan saprak <b>$2</b> (nu ditémbongkeun nepi ka <b>$1</b>).",
        "rclistfrom": "Témbongkeun nu anyar robah nepi ka $3 $2",
        "rcshowhideminor": "$1 éditan minor",
+       "rcshowhideminor-show": "Témbongkeun",
+       "rcshowhideminor-hide": "Sumputkeun",
        "rcshowhidebots": "$1 bot",
-       "rcshowhideliu": "$1 kontributor nu asup log",
+       "rcshowhidebots-show": "Témbongkeun",
+       "rcshowhidebots-hide": "Sumputkeun",
+       "rcshowhideliu": "$1 pamaké kadaptar",
+       "rcshowhideliu-show": "Témbongkeun",
+       "rcshowhideliu-hide": "Sumputkeun",
        "rcshowhideanons": "$1 kontributor anonim",
+       "rcshowhideanons-show": "Témbongkeun",
+       "rcshowhideanons-hide": "Sumputkeun",
        "rcshowhidepatr": "$1 éditan karoris",
+       "rcshowhidepatr-show": "Témbongkeun",
+       "rcshowhidepatr-hide": "Sumputkeun",
        "rcshowhidemine": "$1 éditan kuring",
+       "rcshowhidemine-show": "Témbongkeun",
+       "rcshowhidemine-hide": "Sumputkeun",
        "rclinks": "Témbongkeun $1 parobahan ahir dina $2 poé ahir<br />$3",
        "diff": "béda",
        "hist": "juj",
        "newsectionsummary": "/* $1 */ bagean anyar",
        "rc-enhanced-expand": "Témbongkeun rincian (butuh JavaScript)",
        "rc-enhanced-hide": "Sumputkeun rincian",
+       "rc-old-title": "Mimitina dijieun salaku \"$1\"",
        "recentchangeslinked": "Parobahan nu patali",
        "recentchangeslinked-feed": "Parobahan nu patali",
        "recentchangeslinked-toolbox": "Parobahan nu patali",
        "recentchangeslinked-summary": "Ieu kaca husus ngabéréndélkeun parobahan anyar anu numbu ti kaca husus (atawa uesi katagori husus). Kaca anu [[Special:Watchlist|diawaskeun]] némbongan '''kandel'''.",
        "recentchangeslinked-page": "Ngaran kaca:",
        "recentchangeslinked-to": "Témbongkeun parobahan ka kaca-kaca nu ditumbukeun ka kaca nu dimaksud",
-       "upload": "Unggah berkas",
+       "upload": "Muat berkas",
        "uploadbtn": "Muatkeun koropak",
        "reuploaddesc": "Balik ka formulir muatan.",
        "uploadnologin": "Can asup log",
-       "uploadnologintext": "Anjeun kudu [[Special:UserLogin|asup log]] pikeun ngamuat koropak.",
+       "uploadnologintext": "Mangga $1 pikeun ngunggah berkas.",
        "upload_directory_read_only": "Diréktori muatan ($1) teu bisa ditulis ku server ramat.",
        "uploaderror": "Kasalahan muat",
        "upload-recreate-warning": "'''Awas: berkas nu ngaranna kitu geus kungsi dihapus atawa dipindahkeun.'''\n\nLog hahapus jeung pipindah pikeun ieu kaca dipidangkeun di handap:",
        "uploadwarning-text": "Ropéa pedaran berkas di handap terus cobaan deui.",
        "savefile": "Simpen koropak",
        "uploaddisabled": "Punten, ngamuat ayeuna ditumpurkeun.",
+       "copyuploaddisabled": "Unggahan dumasar URL ditumpurkeun.",
        "uploaddisabledtext": "Fungsi ngamuat koropak ditumpurkeun.",
        "uploadscripted": "Koropak ieu ngandung kode HTML atawa skrip nu bisa dibaca ngaco ku panyungsi ramat (''web browser'').",
        "uploadvirus": "Koropakna ngandung virus! Katrangan: $1",
        "lockmanager-fail-db-release": "Teu bisa ngaleupaskeun konci dina databés $1.",
        "lockmanager-fail-svr-release": "Teu bisa ngaleupaskeun konci dina server $1.",
        "zip-wrong-format": "Berkas anu dipilih lain berkas ZIP.",
+       "img-auth-accessdenied": "Aksés ditolak",
        "img-auth-nofile": "Berkas \"$1\" henteu aya.",
        "img-auth-noread": "Pamaké teu boga kawenangan maca \"$1\".",
        "http-invalid-url": "URL teu bener: $1",
        "license": "Lisénsi:",
        "license-header": "Lisénsi",
        "nolicense": "Taya nu dipilih",
+       "licenses-edit": "Robah pilihan lisénsi",
        "license-nopreview": "(euweuh pramidang)",
        "upload_source_url": "(URL nu sohéh sarta bisa dibuka ku umum)",
        "upload_source_file": " (koropak dina komputer salira)",
+       "listfiles-delete": "hapus",
+       "listfiles-summary": "Ieu kaca husus némbongkeun sakabéh berkas anu geus diunggah.",
        "listfiles_search_for": "Sungsi ngaran média:",
-       "imgfile": "koropak",
+       "imgfile": "Berkas",
        "listfiles": "Daptar gambar",
        "listfiles_date": "Titimangsa",
        "listfiles_name": "Ngaran",
        "listfiles_size": "Badagna",
        "listfiles_description": "Pedaran",
        "listfiles_count": "Vérsi",
+       "listfiles-latestversion": "Vérsi ayeuna",
+       "listfiles-latestversion-yes": "Enya",
+       "listfiles-latestversion-no": "Henteu",
        "file-anchor-link": "Gambar",
        "filehist": "Sajarah gambar",
        "filehist-help": "Klik dina titimangsa pikeun nempo koropak nu aya dina mangsa éta.",
        "filehist-comment": "Kamandang",
        "imagelinks": "Pamakéan berkas",
        "linkstoimage": "Kaca ieu  {{PLURAL:$1|numbu|$1 numbu}} ka gambar ieu :",
-       "nolinkstoimage": "Teu aya kaca nu numbu ka gambar ieu.",
+       "nolinkstoimage": "Teu aya kaca anu nutumbu ka ieu berkas.",
        "sharedupload": "Ieu koropak téh ti $1 nu bisa jadi dipaké ku proyék-proyék lianna.",
        "sharedupload-desc-here": "Ieu berkas asalna ti $1 anu bisa jadi dipaké ku proyék séjén. \nPedaran ti [$2 kaca pedaranana] dipidangkeun di handap.",
        "uploadnewversion-linktext": "ngamuatkeun vérsi anyar koropak ieu",
        "filedelete-reason-otherlist": "Alesan séjén",
        "filedelete-reason-dropdown": "*Alesan nu ilahar\n** Ngarumpak hak cipta\n** Koropak geus aya",
        "filedelete-edit-reasonlist": "Alesan ngahapus éditan",
+       "filedelete-maintenance-title": "Henteu bisa ngahapus berkas",
        "mimesearch": "Sungsi MIME",
        "mimesearch-summary": "Ieu kaca bisa dipaké nyaring koropak dumasar tipeu MIME-na. Asupan: contenttype/subtype, contona <code>image/jpeg</code>.",
        "mimetype": "Tipeu MIME:",
        "unusedtemplateswlh": "tumbu lianna",
        "randompage": "Kaca acak",
        "randompage-nopages": "Euweuh kaca dina ieu spasi ngaran \"$1\".",
+       "randomincategory-category": "Kategori:",
        "randomredirect": "Alihan acak",
        "randomredirect-nopages": "Euweuh alihan dina ieu spasi ngaran \"$1\".",
        "statistics": "Statistik",
        "statistics-header-pages": "Statistik kaca",
        "statistics-header-edits": "Statistik éditan",
-       "statistics-header-views": "Statistik pidangan",
        "statistics-header-users": "Statistik pamaké",
        "statistics-header-hooks": "Statistika lianna",
        "statistics-articles": "Halaman eusi",
        "statistics-files": "Koropak nu geus dimuat",
        "statistics-edits": "Ëditan kaca ti saprak {{SITENAME}} mimiti dibuka",
        "statistics-edits-average": "Rata-rata éditan unggal kaca",
-       "statistics-views-total": "Lobana dibuka",
-       "statistics-views-total-desc": "Muka kaca nu can aya jeung kaca husus teu diitung",
-       "statistics-views-peredit": "Muka unggal édit",
        "statistics-users": "[[Special:ListUsers|Kontributor]] kadaptar",
        "statistics-users-active": "Pamaké getol",
        "statistics-users-active-desc": "Kontributor nu ngoprék salila {{PLURAL:$1|poé|$1 poé}} panungtung",
-       "statistics-mostpopular": "Kaca nu pangmindengna dibuka",
+       "pageswithprop-submit": "Jung",
        "doubleredirects": "Alihan ganda",
        "doubleredirectstext": "Ieu kaca ngabéréndélkeun kaca-kaca alihan ka kaca alihan lianna. Unggal baris ngandung tutumbu ka alihan kahiji jeung kadua, ogé tujul alihan kadua anu biasana tujul kaca anu \"bener\", anu sakuduna dituju ku alihan kahiji. Ëntri nu <del>dicorét</del> geus diropéa.",
        "double-redirect-fixed-move": "[[$1]] geus pindah, dialihkeun ka [[$2]].",
        "fewestrevisions": "Artikel nu pangjarangna dirévisi",
        "nbytes": "$1 {{PLURAL:$1|bait|bait}}",
        "ncategories": "$1 {{PLURAL:$1|kategori|kategori}}",
+       "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwiki}}",
        "nlinks": "$1 {{PLURAL:$1|tumbu|tumbu}}",
        "nmembers": "$1 {{PLURAL:$1|kontributor|kontributor}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|anggota|anggota}}",
        "nrevisions": "$1 {{PLURAL:$1|révisi|révisi}}",
        "nviews": "$1 {{PLURAL:$1|témbongan|témbongan}}",
        "nimagelinks": "Dipaké di $1 {{PLURAL:$1|kaca|kaca}}",
        "uncategorizedtemplates": "Citakan nu can boga kategori",
        "unusedcategories": "Kategori nu teu kapaké",
        "unusedimages": "Gambar-gambar nu teu kapaké",
-       "popularpages": "Kaca-kaca kawentar",
        "wantedcategories": "Kategori nu dipikabutuh",
        "wantedpages": "Kaca nu dipikabutuh",
        "wantedfiles": "Berkas nu dipikabutuh",
        "protectedpages": "Kaca-kaca nu dikonci",
        "protectedpages-indef": "Ngan pikeun panangtayungan kalawan waktu nuteu kawates",
        "protectedpagesempty": "Dina danget ieu, teu aya kaca nu dikonci dumasar kana ieu paraméter.",
+       "protectedpages-timestamp": "Cap titimangsa",
+       "protectedpages-page": "Kaca",
+       "protectedpages-expiry": "Kadaluwarsa",
+       "protectedpages-params": "Paraméter protéksi",
+       "protectedpages-reason": "Alesan",
+       "protectedpages-unknown-timestamp": "Teu kanyahoan",
+       "protectedpages-unknown-performer": "Pamaké henteu dipikawanoh",
        "protectedtitles": "Judul nu dikonci",
        "protectedtitlesempty": "Dina danget ieu, euweuh judul nu keur dikonci tina paraméter-paraméter éta.",
        "listusers": "Daptar pamaké",
        "querypage-disabled": "Ieu kaca husus ditumpurkeun ku alesan kinerja.",
        "booksources": "Sumber pustaka",
        "booksources-search-legend": "Sungsi sumber buku",
-       "booksources-go": "Jung",
        "booksources-text": "Di handap ieu ngabéréndélkeun tumbu ka loka-loka nu ngical buku, boh nu anyar atawa loakan, nu sugan uninga kana buku anu nuju dipilari:",
        "booksources-invalid-isbn": "ISBN-na sigana henteu bener; pariksa deui bisi aya salah salin ti sumber aslina.",
        "specialloguserlabel": "Pamaké:",
-       "speciallogtitlelabel": "Judul:",
+       "speciallogtitlelabel": "Sasaran (judul atawa pamaké):",
        "log": "Log",
        "all-logs-page": "Sakabéh log umum",
        "alllogstext": "Béréndélan sakabéh log nu aya di {{SITENAME}}.\nBisa dipondokkeun ku cara milih tipe log, ngaran pamaké, atawa kaca nu dimaksud.",
        "emailuser": "Surélékan pamaké ieu",
        "emailpage": "Surélékan pamaké",
        "emailpagetext": "Anjeun bisa maké formulir di handap pikeun ngirim surélék ka ieu pamaké.\nAlamat surélék nu diasupkeun kana [[Special:Preferences|préferénsi pamaké anjeun]] bakal katémbong salaku alamat \"Ti\" dina surélékna, sahingga nu dituju bisa males langsung.",
-       "defemailsubject": "Surélék {{SITENAME}}",
+       "defemailsubject": "Surélék {{SITENAME}} ti pamaké \"$1\"",
        "usermaildisabled": "Surélék kontributor ditumpurkeun",
        "usermaildisabledtext": "Anjeun teu bisa ngirim surélék ka kontributor séjén di ieu wiki",
        "noemailtitle": "Teu aya alamat surélék",
        "noemailtext": "Ieu pamaké ieu teu méré alamat surélék nu sah.",
        "nowikiemailtext": "Ieu kontributor milih teu nampa surélék ti kontributor séjén.",
+       "emailnotarget": "Sandiasma panarima henteu valid atawa henteu aya.",
+       "emailtarget": "ASupkeun sandiasma panarima",
        "emailusername": "Sandiasma:",
        "emailusernamesubmit": "Kirim",
        "email-legend": "Kirim surélék ka kontributor {{SITENAME}} lianna",
        "emailsent": "Surélék geus dikirim",
        "emailsenttext": "Surélék anjeun geus dikirim.",
        "emailuserfooter": "Ieu surélék dikirim ku $1 ka $2 migunakeun fungsi \"Surélékan pamaké ieu\" di {{SITENAME}}.",
+       "usermessage-summary": "Ninggalkeun talatah sistem.",
        "watchlist": "Awaskeuneun",
        "mywatchlist": "Awaskeuneun",
        "watchlistfor2": "Pikeun $1 $2",
        "nowatchlist": "Anjeun teu boga awaskeuneun.",
-       "watchlistanontext": "Mangga $1 pikeun némbongkeun atawa ngarobah béréndélan awaskeuneun anjeun.",
+       "watchlistanontext": "Mangga asup log pikeun nempo atawa ngarobah béréndélan awaskeuneun anjeun.",
        "watchnologin": "Can asup log",
        "addedwatchtext": "Kaca \"[[:$1]]\" geus ditambahkeun ka [[Special:Watchlist|awaskeuneun]] anjeun.\nJaga, parobahan na kaca ieu katut kaca obrolanana bakal dibéréndélkeun di dinya, sarta kacana bakal katémbong '''dikandelan''' dina kaca [[Special:RecentChanges|Nu anyar robah]] sangkan leuwih gampang ngawaskeunana.\n\n<p>Mun jaga anjeun moal deui ngawaskeun parobahan na kaca éta, klik tumbu \"Eureun ngawaskeun\" na lajursisi.",
+       "removewatch": "Piceun tina béréndélan awaskeuneun",
        "removedwatchtext": "Kaca \"[[:$1]]\" geus dikaluarkeun tina [[Special:Watchlist|daptar awaskeuneun]] anjeun.",
+       "removedwatchtext-short": "Kaca \"$1\" geus dipiceun tina béréndélan awaskeuneun.",
        "watch": "awaskeun",
        "watchthispage": "Awaskeun kaca ieu",
        "unwatch": "Eureun ngawaskeun",
        "unwatchthispage": "Eureun ngawaskeun",
        "notanarticle": "Sanés kaca eusi",
        "notvisiblerev": "Révisi geus dihapus",
-       "watchlist-details": "Aya {{PLURAL:$1|$1 kaca|$1 kaca}} nu ku anjeun diawaskeun, teu kaasup kaca obrolan/sawala.",
+       "watchlist-details": "Aya {{PLURAL:$1|$1 kaca|$1 kaca}} dina béréndélan awaskeuneun, teu kaasup kaca obrolan/sawala.",
        "wlheader-enotif": "Pangémbar surélék difungsikeun.",
        "wlheader-showupdated": "Kaca nu robah ti panungtungan anjeun sindang ditémbongkeun kalawan '''kandel'''",
        "wlnote": "Di handap ieu mangrupa $1 {{PLURAL:$1|robahan|robahan}} ahir salila '''$2''' jam.",
-       "wlshowlast": "Témbongkeun $1 jam $2 poé $3 ahir",
+       "wlshowlast": "Témbongkeun $1 jam $2 poé  ahir",
        "watchlist-options": "Pilihan awaskeuneun",
        "watching": "Ngawaskeun...",
        "unwatching": "Eureun ngawaskeun...",
        "enotif_reset": "Tandaan sadaya kaca nu geus dilongok",
        "enotif_impersonal_salutation": "Pamaké {{SITENAME}}",
+       "enotif_subject_deleted": "Kaca {{SITENAME}} $1 geus {{GENDER:$2|dihapus}} ku $2",
        "enotif_lastvisited": "Tempo $1 pikeun sadaya parobahan ti saprak anjeun ninggalkeun ieu kaca.",
        "enotif_lastdiff": "Buka $1 pikeun nempo ieu parobahan.",
        "enotif_anon_editor": "pamaké anonim $1",
        "protect-level-sysop": "Ngan bisa ku kuncén",
        "protect-summary-cascade": "ngaruntuykeun",
        "protect-expiring": "kadaluwarsa $1",
+       "protect-expiring-local": "kadaluwarsa $1",
        "protect-expiry-indefinite": "tanpa wates",
        "protect-cascade": "Konci kaca nu kawengku dina ieu kaca (pangonci ngaruntuy).",
        "protect-cantedit": "Anjeung teu wenang ngarobah hambalan ngonci ieu kaca.",
        "protect-othertime": "Séjén waktu",
+       "protect-othertime-op": "séjén waktu",
        "protect-existing-expiry": "Waktu mungkas nu aya: $3, $2",
+       "protect-existing-expiry-infinity": "Waktu kadaluwarsa nu aya: taya wates",
        "protect-otherreason": "Alesan panambah/lianna:",
        "protect-otherreason-op": "Alesan séjén",
        "protect-dropdown": "*Alesan ngonci nu ilahar\n** Vandalismeu kamalinaan\n** Spamming kamalinaan\n** Perang éditan\n** Kaca loba pisan diédit",
        "undeleteviewlink": "tempo",
        "undeletecomment": "Alesan:",
        "undeletedrevisions": "$1 {{PLURAL:$1|révisi|révisi}} disimpen deui",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 révisi|$1 révisi}} jeung {{PLURAL:$2|1 koropak|$2 koropak}} geus dipulangkeun",
-       "undeletedfiles": "$1 {{PLURAL:$1|koropak}} dibalikeun",
+       "undeletedrevisions-files": "{{PLURAL:$1|1 révisi|$1 révisi}} jeung {{PLURAL:$2|1 berkas|$2 berkas}} geus dibalikkeun",
+       "undeletedfiles": "{{PLURAL:$1|1 berkas|$1 berkas}} dibalikkeun",
        "cannotundelete": "Gagal ngabolaykeun hapusan; sigana kapiheulaan ngabolaykeun hapusan ku nu séjén.",
        "undeletedpage": "'''$1 hasil dibalikeun'''\n\nTempo [[Special:Log/delete|log hapusan]] keur data ngahapus jeung malikeun.",
        "undelete-header": "Tempo [[Special:Log/delete|log hapusan]] pikeun béréndélan kaca nu anyar dihapus.",
        "undelete-search-prefix": "Témbongkeun kaca dimimitian ku",
        "undelete-search-submit": "Téang",
        "undelete-no-results": "Euweuh kaca nu cocog dina arsip hapusan.",
-       "undelete-filename-mismatch": "Teu bisa ngabolaykeun hapusan révisi koropak nu titimangsana $1: ngaran teu cocog.",
-       "undelete-bad-store-key": "Teu bisa ngabolaykeun hapusan révisi koropak nu titimangsana $1: leungit méméh dihapus.",
-       "undelete-cleanup-error": "Éror ngahapus koropak arsip \"$1\" nu teu kapaké.",
-       "undelete-missing-filearchive": "Gagal mulangkeun arsip koropak ID $1 kusabab teu kapanggih dina pangkalan data. Bisa jadi éta koropak bolay dihapus.",
+       "undelete-filename-mismatch": "Hanteu bisa ngabolaykeun hapusan révisi berkas titimangsa $1: ngaran berkas teu cocog.",
+       "undelete-bad-store-key": "Hanteu bisa ngabolaykeun hapusan révisi berkas titimangsa $1: Berkas leungit méméh dihapus.",
+       "undelete-cleanup-error": "Éror ngahapus berkas arsip \"$1\" anu teu kapaké.",
+       "undelete-missing-filearchive": "Hanteu bisa mulangkeun arsip berkas ID $1 kusabab teu kapanggih dina pangkalan data. Bisa jadi éta koropak bolay dihapus.",
        "undelete-error-short": "Éror ngabolaykeun hapusan: $1",
        "undelete-error-long": "Aya éror nalika ngabolaykeun hapusan:\n\n$1",
        "undelete-show-file-submit": "Enya",
        "contributions": "Kontribusi ti kontributor",
        "contributions-title": "Sumbangan tulisan ti $1",
        "mycontris": "Kontribusi",
-       "contribsub2": "Pikeun $1 ($2)",
+       "contribsub2": "Pikeun {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Akun pamaké \"$1\" teu aya dina daptar.",
        "nocontribs": "Taya robahan nu kapanggih cocog jeung patokan ieu.",
-       "uctop": "(pangluhurna)",
+       "uctop": "(ayeuna)",
        "month": "Ti bulan (jeung saméméhna):",
        "year": "Ti taun (jeung saméméhna):",
        "sp-contributions-newbies": "Témbongkeun kontribusi ti akun anyar wungkul",
        "sp-contributions-talk": "obrolan",
        "sp-contributions-userrights": "ngatur hak pamaké",
        "sp-contributions-blocked-notice": "Ieu pamaké keur dipeungpeuk.\nPikeun rujukan, éntri log panungtung dipidangkeun di handap:",
+       "sp-contributions-blocked-notice-anon": "Ieu alamat IP keur dipeungpeuk.\nPikeun rujukan, éntri log panungtung dipidangkeun di handap:",
        "sp-contributions-search": "Paluruh kontribusi",
-       "sp-contributions-username": "Alamat IP atawa landihan:",
+       "sp-contributions-username": "Alamat IP atawa sandiasma:",
        "sp-contributions-toponly": "Témbongkeun éditan anu révisi panungtung wungkul",
        "sp-contributions-submit": "Paluruh",
-       "whatlinkshere": "Nu numbu ka dieu",
-       "whatlinkshere-title": "Kaca-kaca nu numbu ka \"$1\"",
+       "whatlinkshere": "Anu nutumbu ka dieu",
+       "whatlinkshere-title": "Kaca anu nutumbu ka \"$1\"",
        "whatlinkshere-page": "Kaca:",
        "linkshere": "Kaca di handap ieu numbu ka '''[[:$1]]''':",
-       "nolinkshere": "Euweuh kaca nu numbu ka '''[[:$1]]'''.",
-       "nolinkshere-ns": "Euweuh kaca nu numbu ka '''[[:$1]]''' dina namespace nu dipilih.",
+       "nolinkshere": "Euweuh kaca anu nutumbu ka <strong>[[:$1]]</strong>.",
+       "nolinkshere-ns": "Euweuh kaca anu nutumbu ka <strong>[[:$1]]</strong> dina ruang-nama anu dipilih.",
        "isredirect": "Kaca alihan",
        "istemplate": "ku citakan",
        "isimage": "tutumbu berkas",
        "blockip": "Peungpeuk pamaké",
        "blockip-legend": "Peungpeuk pamaké",
        "blockiptext": "Paké formulir di handap pikeun meungpeuk aksés nulis ti alamat IP atawa ngaran pamaké husus. Ieu sakuduna ditujukeun pikeun nyegah vandalisme, sarta saluyu jeung [[{{MediaWiki:Policy-url}}|kawijakan]]. Eusi alesan nu jéntré (misal, ngarujuk kaca tinangtu nu geus diruksak).",
-       "ipaddressorusername": "Alamat IP atawa ngaran pamaké",
+       "ipaddressorusername": "Alamat IP atawa sandiasma:",
        "ipbexpiry": "Kadaluarsa",
        "ipbreason": "Alesan:",
+       "ipb-hardblock": "Nyegah pamaké anu asup log pikeun ngédit ti ieu alamat IP",
        "ipbcreateaccount": "Tong bisa nyieun rekening",
        "ipbemailban": "Henteu kaci pamaké ngirimkeun surélék",
        "ipbenableautoblock": "Peungpeuk sacara otomatis alamat IP anu panungtungan dipaké ku pamaké sarta sakabéh alamat IP anu kungsi dipaké.",
        "unblocklink": "buka blokir",
        "change-blocklink": "Robah status blokir",
        "contribslink": "kontribusi",
+       "emaillink": "kirim surélék",
        "autoblocker": "Otomatis dipeungpeuk kusabab alamat IP anjeun dipaké ku \"[[User:$1|$1]]\".\nAlesan: \"$2\"",
        "blocklogpage": "Log_peungpeuk",
        "blocklog-showlog": "Ieu pamaké saméméhna geus kungsi dipeungpeuk.\nPikeun rujukan, logna dipidangkeun di handap ieu:",
        "ip_range_invalid": "Angka IP teu bener.",
        "proxyblocker": "Pameungpeuk proxy",
        "proxyblockreason": "Alamat IP anjeun dipeungpeuk sabab mangrupa proxy muka. Mangga tepungan ''Internet service provider'' atanapi ''tech support'' anjeun, béjakeun masalah serius ieu.",
-       "sorbsreason": "Alamat IP anjeun kadaptar salaku ''open proxy'' dina DNSBL.",
+       "sorbsreason": "Alamat IP anjeun kadaptar salaku ''open proxy'' dina DNSBL anu dipaké ku {{SITENAME}}.",
        "sorbs_create_account_reason": "Alamat IP anjeun kadaptar salaku ''open proxy'' dina DNSBL. Anjeun teu bisa nyieun rekening",
        "ipbblocked": "Anjeun teu bisa meungpeuk atawa muka peungpeuk séjén kontributor ku sabab anjeun sorangan keur dipeungpeuk",
        "lockdb": "Konci pangkalan data",
        "immobile-source-page": "Ieu kaca teu bisa dipindahkeun.",
        "immobile-target-page": "Teu bisa mindahkeun ka judul nu ditujul.",
        "imagenocrossnamespace": "Teu bisa mindahkeun gambar ka rohangan ngaran nu lain gambar",
-       "imagetypemismatch": "Éksténsi koropak anyar teu cocog jeung tipena",
-       "imageinvalidfilename": "Ngaran koropak tujuan teu sah",
+       "imagetypemismatch": "Éksténsi berkas anyar teu cocog jeung tipena",
+       "imageinvalidfilename": "Ngaran berkas tujuan teu sah",
        "fix-double-redirects": "Hadéan sakabéh alihan ganda nu mungkin kajadian",
        "protectedpagemovewarning": "'''Awas:''' ieu kaca geus dikonci sarta ngan bisa dipindahkeun ku pamaké nu boga kawenangan kuncén.\nPikeun rujukan, éntri log panungtung dipidangkeun di handap:",
        "semiprotectedpagemovewarning": "'''Awas:''' ieu kaca geus dikonci sarta ukur bisa dipindahkeun ku pamaké nu geus asup log.\nPikeun rujukan, éntri log panungtung dipidangkeun di handap:",
        "export-addcattext": "Tambahkeun kaca tina kategori:",
        "export-addcat": "Tambahkeun",
        "export-addns": "Tambahkeun",
-       "export-download": "Simpen dina koropak",
+       "export-download": "Simpen salaku berkas",
        "export-templates": "Kaasup citakan",
        "allmessages": "Talatah sistim",
        "allmessagesname": "Ngaran",
        "allmessages-language": "Basa:",
        "allmessages-filter-submit": "Jung",
        "thumbnail-more": "Gedéan",
-       "filemissing": "Koropak leungit",
+       "filemissing": "Berkas leungit",
        "thumbnail_error": "Kasalahan sawaktu nyieun gambar leutik (thumbnail): $1",
        "djvu_page_error": "Kaca DjVu teu kawadahan",
-       "djvu_no_xml": "XML keur koropak DjVu teu bisa dicokot",
+       "djvu_no_xml": "Hanteu bisa nyokot XML pikeun berkas DjVu",
        "thumbnail_invalid_params": "Kasalahan paraméter miniatur",
        "thumbnail_dest_directory": "Diréktori nu dituju teu bisa dijieun",
        "thumbnail_image-type": "Jenis gambar teu dirojong",
        "import": "Impor kaca",
        "importinterwiki": "Impor transwiki",
        "import-interwiki-text": "Pilih wiki jeung judul kaca nu rék diimpor.\nTanggal révisi katut ngaran nu ngédit bakal dipertahankeun.\nSadaya aktivitas impor transwiki baris kacatet dina [[Special:Log/import|log impor]].",
-       "import-interwiki-source": "Wiki/kaca sumber:",
+       "import-interwiki-sourcewiki": "Wiki sumber:",
+       "import-interwiki-sourcepage": "Kaca sumber:",
        "import-interwiki-history": "Salin sakabéh vérsi jujutan pikeun ieu kaca",
        "import-interwiki-templates": "Kaasup sakabéh citakan",
        "import-interwiki-submit": "Impor",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|vérsi heubeul}}",
        "import-logentry-interwiki": "$1 geus ditranswikikeun",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|vérsi heubel}} ti $2",
+       "javascripttest": "Nguji JavaScript",
        "tooltip-pt-userpage": "Kaca kontributor Anjeun",
        "tooltip-pt-anonuserpage": "Kaca pamaké pikeun IP nu ku anjeun keur diédit",
        "tooltip-pt-mytalk": "Kaca obrolan Anjeun",
        "tooltip-pt-anontalk": "Sawala ngeunaan éditan ti alamat IP ieu",
-       "tooltip-pt-preferences": "Préferénsi kuring",
+       "tooltip-pt-preferences": "Préferénsi anjeun",
        "tooltip-pt-watchlist": "Daptar kaca nu diawaskeun ku anjeun parobahanana.",
        "tooltip-pt-mycontris": "Daptar tulisan Anjeun",
        "tooltip-pt-login": "Leuwih hadé asup log, sanajan teu wajib",
        "tooltip-n-recentchanges": "Béréndélan nu anyar robah dina wiki",
        "tooltip-n-randompage": "Muatkeun kaca naon baé",
        "tooltip-n-help": "Tempat pikeun néangan pitulung",
-       "tooltip-t-whatlinkshere": "Daptar kaca-kaca wiki nu numbu ka dieu",
-       "tooltip-t-recentchangeslinked": "Nu anyar robah na kaca-kaca nu numbu ka dieu",
+       "tooltip-t-whatlinkshere": "Béréndélan sakabéh kaca wiki anu nutumbu ka dieu",
+       "tooltip-t-recentchangeslinked": "Anu anyar robah dina kaca-kaca anu nutumbu ti dieu",
        "tooltip-feed-rss": "Asupan RSS pikeun kaca ieu",
        "tooltip-feed-atom": "Asupan atom pikeun kaca ieu",
        "tooltip-t-contributions": "Témbongkeun béréndélan kontribusi ti ieu kontributor",
        "spamprotectiontitle": "Saringan spam",
        "spamprotectiontext": "Kaca nu rék disimpen dipeungpeuk ku saringan spam.\nSigana mah ieu téh alatan tumbu ka loka luar.",
        "pageinfo-title": "Émbaran pikeun \"$1\"",
-       "pageinfo-header-edits": "Éditan",
+       "pageinfo-header-basic": "Émbaran dasar",
+       "pageinfo-header-edits": "Jujutan édit",
+       "pageinfo-header-restrictions": "Protéksi kaca",
        "pageinfo-watchers": "Jumlah nu ngawaskeun",
        "pageinfo-edits": "Jumlah éditan",
        "pageinfo-authors": "Jumlah kontributor nu béda",
+       "pageinfo-contentpage-yes": "Enya",
+       "pageinfo-protect-cascading-yes": "Enya",
        "markaspatrolleddiff": "Tandaan salaku geus diriksa",
        "markaspatrolledtext": "Tandaan artikel ieu salaku geus diriksa",
        "markedaspatrolled": "Tandaan salaku geus diriksa",
        "file-info-size-pages": "$1 × $2 pixel, ukuran berkas: $3, tipeu MIME: $4, $5 {{PLURAL:$5|kaca|kaca}}",
        "file-nohires": "Euweuh résolusi nu leuwih luhur.",
        "svg-long-desc": "Koropak SVG, nominalna $1 × $2 piksel, ukuranana $3",
-       "show-big-image": "Résolusi pinuh",
+       "show-big-image": "Berkas asli",
        "show-big-image-preview": "Ukuran ieu pramidang: $1.",
        "show-big-image-other": "Résolusi lianna: $1.",
        "show-big-image-size": "$1 × $2 pixel",
        "ilsubmit": "Sungsi",
        "bydate": "dumasar titimangsa",
        "sp-newimages-showfrom": "Témbongkeun gambar anyar ti $2, $1",
+       "sunday-at": "Minggu jam $1",
        "bad_image_list": "Formatna kieu:\n\nNgan daptar butiran (baris anu dimimitian ku tanda *) anu diitung. \nTutumbu kahiji dina hiji baris dianggap numbu ka berkas anu goréng. \nTutumbu sanggeusna dina baris anu sarua dianggap bener, nyaéta artikel anu midangkeun éta berkas.",
        "metadata": "Métadata",
        "metadata-help": "Ieu koropak ngandung émbaran tambahan, nu sigana asalna tina kaméra digital atawa paminday nu dipaké pikeun ngadigitalkeunana. Mun ieu koropak geus dirobah tina bentuk aslina, datana bisa jadi teu bener.",
        "exif-orientation-3": "Diputer 180°",
        "exif-orientation-4": "Dibalikkeun vértikal",
        "exif-orientation-5": "Diputer 90° CCW jeung dibalikkeun vértikal",
-       "exif-orientation-6": "Diputer 90° CW",
+       "exif-orientation-6": "Diputer 90° CCW",
        "exif-orientation-7": "Diputer 90° CW jeung dibalikkeun vértikal",
        "exif-orientation-8": "Diputer 90° CCW",
        "exif-planarconfiguration-2": "format datar",
        "exif-iimcategory-spo": "Olahraga",
        "exif-iimcategory-wea": "Cuaca",
        "exif-urgency-normal": "Normal ($1)",
-       "watchlistall2": "sadaya",
        "namespacesall": "kabéh",
        "monthsall": "kabéh",
        "confirmemail": "Konfirmasi alamat surélék",
        "version-hook-name": "Ngaran kait",
        "version-hook-subscribedby": "Didaptarkeun ku",
        "version-version": "(Vérsi $1)",
-       "version-license": "Lisénsi",
+       "version-license": "Lisénsi MediaWiki",
        "version-software": "Sopwér nu geus diinstal",
        "version-software-product": "Produk",
        "version-software-version": "Vérsi",
        "fileduplicatesearch-result-1": "Koropak \"$1\" teu boga duplikat idéntik.",
        "fileduplicatesearch-result-n": "Koropak \"$1\" mibanda {{PLURAL:$2|1 duplikat idéntik|$2 duplikat idéntik}}.",
        "specialpages": "Kaca husus",
-       "specialpages-note": "* Kaca husus bisa di buka ku umum.\n* <strong class=\"mw-specialpagerestricted\">Cetak kandel kaca husus nu kawates.</strong>",
+       "specialpages-note": "* Kaca husus normal.\n* <span class=\"mw-specialpagerestricted\">Kaca husus diwates.</span>",
        "specialpages-group-maintenance": "Laporan pigawéeun",
        "specialpages-group-other": "Kaca husus lainna",
-       "specialpages-group-login": "Asup log / Nyieun rekening",
+       "specialpages-group-login": "Asup log / jieun akun",
        "specialpages-group-changes": "Nuanyar robah sarta log",
        "specialpages-group-media": "Laporan sarta muatkeun koropak",
        "specialpages-group-users": "Pamaké sarta hak pamaké",
        "specialpages-group-highuse": "Pamakéan kaca nu badag",
        "specialpages-group-pages": "Daptar kaca",
        "specialpages-group-pagetools": "Parabot kaca",
-       "specialpages-group-wiki": "Data wiki jeung parabot",
+       "specialpages-group-wiki": "Data jeung parabot",
        "specialpages-group-redirects": "Alihan kaca husus",
        "specialpages-group-spam": "Parabot Spam",
        "blankpage": "Kaca kosong",
        "revdelete-restricted": "akses geus dibatesan ukur keur kuncén",
        "revdelete-unrestricted": "Watesan akses kuncén dihapuskeun",
        "rightsnone": "(euweuh)",
+       "revdelete-summary": "ringkesan ngédit",
        "feedback-subject": "Ngeunaan:",
        "feedback-message": "Surat:",
        "feedback-cancel": "Bolay",
index 075690c..6b0bac8 100644 (file)
                        "WikiPhoenix",
                        "לערי ריינהארט",
                        "아라",
-                       "Abbedabb"
+                       "Abbedabb",
+                       "Platinawolf"
                ]
        },
        "tog-underline": "Stryk under länkar:",
-       "tog-hideminor": "Visa inte mindre redigeringar i senaste ändringar",
+       "tog-hideminor": "Dölj mindre redigeringar i senaste ändringar",
        "tog-hidepatrolled": "Dölj patrullerade redigeringar i senaste ändringar",
-       "tog-newpageshidepatrolled": "Göm patrullerade sidor från listan över nya sidor",
+       "tog-newpageshidepatrolled": "Dölj patrullerade sidor i listan över nya sidor",
        "tog-extendwatchlist": "Utöka bevakningslistan till att visa alla ändringar, inte bara den senaste",
        "tog-usenewrc": "Gruppera ändringar efter sida i senaste ändringar och bevakningslistan",
        "tog-numberheadings": "Automatisk numrerade rubriker",
@@ -75,7 +76,7 @@
        "tog-watchdefault": "Lägg till sidor och filer jag redigerar i min bevakningslista",
        "tog-watchmoves": "Lägg till sidor och filer jag flyttar i min bevakningslista",
        "tog-watchdeletion": "Lägg till sidor och filer jag raderar i min bevakningslista",
-       "tog-watchrollback": "Lägg till sidor som jag har utfört en tillbakarullning på i min övervakningslista",
+       "tog-watchrollback": "Lägg till sidor där jag har utfört en tillbakarullning till min övervakningslista",
        "tog-minordefault": "Markera automatiskt ändringar som mindre",
        "tog-previewontop": "Visa förhandsgranskningen ovanför redigeringsrutan",
        "tog-previewonfirst": "Visa förhandsgranskning vid första redigeringen",
        "tog-enotifrevealaddr": "Visa min e-postadress i e-postmeddelanden om ändringar som skickas till andra",
        "tog-shownumberswatching": "Visa antalet användare som bevakar",
        "tog-oldsig": "Nuvarande signatur:",
-       "tog-fancysig": " signatur som wikitext (utan en automatisk länk)",
+       "tog-fancysig": "Behandla signatur som wikitext (utan en automatisk länk)",
        "tog-uselivepreview": "Använd direktuppdaterad förhandsgranskning (experimentell)",
        "tog-forceeditsummary": "Påminn mig om jag inte fyller i en redigeringskommentar",
-       "tog-watchlisthideown": "Visa inte mina redigeringar i bevakningslistan",
+       "tog-watchlisthideown": "Dölj mina redigeringar i bevakningslistan",
        "tog-watchlisthidebots": "Visa inte robotredigeringar i bevakningslistan",
-       "tog-watchlisthideminor": "Visa inte mindre ändringar i bevakningslistan",
+       "tog-watchlisthideminor": "Dölj mindre ändringar i bevakningslistan",
        "tog-watchlisthideliu": "Visa inte redigeringar av inloggade användare i bevakningslistan",
-       "tog-watchlisthideanons": "Visa inte redigeringar av anonyma användare i bevakningslistan",
-       "tog-watchlisthidepatrolled": "Göm patrullerade redigeringar från bevakningslistan",
+       "tog-watchlisthideanons": "Dölj redigeringar av anonyma användare i bevakningslistan",
+       "tog-watchlisthidepatrolled": "Dölj patrullerade redigeringar i bevakningslistan",
        "tog-ccmeonemails": "Skicka kopior till mig av e-post jag skickar till andra användare",
        "tog-diffonly": "Visa inte sidinnehåll under diffar",
        "tog-showhiddencats": "Visa dolda kategorier",
        "editfont-style": "Typsnitt i redigeringsrutan:",
        "editfont-default": "Webbläsarens standard",
        "editfont-monospace": "Fast bredd",
-       "editfont-sansserif": "Sans-serif",
-       "editfont-serif": "Serif",
+       "editfont-sansserif": "Sans-serif-teckensnitt",
+       "editfont-serif": "Serif-teckensnitt",
        "sunday": "söndag",
        "monday": "måndag",
        "tuesday": "tisdag",
        "category-article-count": "{{PLURAL:$2|Denna kategori innehåller endast följande sida.|Följande {{PLURAL:$1|sida|$1 sidor}} (av totalt $2) finns i denna kategori.}}",
        "category-article-count-limited": "Följande {{PLURAL:$1|sida|$1 sidor}} finns i den här kategorin.",
        "category-file-count": "{{PLURAL:$2|Denna kategori innehåller endast följande fil.|Följande {{PLURAL:$1|fil|$1 filer}} (av totalt $2) finns i denna kategori.}}",
-       "category-file-count-limited": "Följande {{PLURAL:$1|fil |$1 filer}} finns i den här kategorin.",
+       "category-file-count-limited": "Följande {{PLURAL:$1|fil|$1 filer}} finns i den aktuella kategorin.",
        "listingcontinuesabbrev": "forts.",
        "index-category": "Indexerade sidor",
        "noindex-category": "Icke-indexerade sidor",
        "cancel": "Avbryt",
        "moredotdotdot": "Mer...",
        "morenotlisted": "Denna lista är inte fullständig.",
-       "mypage": "Min sida",
+       "mypage": "Sida",
        "mytalk": "Diskussion",
        "anontalk": "Diskussionssida för denna IP-adress",
        "navigation": "Navigering",
        "searchbutton": "Sök",
        "go": "Gå till",
        "searcharticle": "Gå till",
-       "history": "Versionshistorik",
+       "history": "Sidhistorik",
        "history_short": "Historik",
        "updatedmarker": "uppdaterad sedan senaste besöket",
        "printableversion": "Utskriftsvänlig version",
        "otherlanguages": "På andra språk",
        "redirectedfrom": "(Omdirigerad från $1)",
        "redirectpagesub": "Omdirigeringssida",
+       "redirectto": "Omdirigering till:",
        "lastmodifiedat": "Sidan ändrades senast den $1 kl. $2.",
        "viewcount": "Den här sidan har visats {{PLURAL:$1|en gång|$1 gånger}}.",
        "protectedpage": "Skrivskyddad sida",
        "editsectionhint": "Redigera avsnitt: $1",
        "toc": "Innehåll",
        "showtoc": "visa",
-       "hidetoc": "göm",
+       "hidetoc": "dölj",
        "collapsible-collapse": "Dölj",
        "collapsible-expand": "Visa",
        "confirmable-confirm": "Är {{GENDER:$1|du}} säker?",
        "viewsource": "Visa wikitext",
        "viewsource-title": "Visa källa för $1",
        "actionthrottled": "Åtgärden stoppades",
-       "actionthrottledtext": "Som skydd mot spam, finns det en begränsning av hur många gånger du kan utföra den här åtgärden under en viss tid. Du har överskridit den gränsen. Försök igen om några minuter.",
+       "actionthrottledtext": "Som skydd mot spam finns det en begränsning av hur många gånger du kan utföra den här åtgärden under en viss tid. Du har överskridit den gränsen. Försök igen om några minuter.",
        "protectedpagetext": "Den här sidan har skrivskyddats för att förhindra redigering eller andra åtgärder.",
        "viewsourcetext": "Du kan se och kopiera denna sidas källtext:",
        "viewyourtext": "Du kan se och kopiera källan för '''dina redigeringar''' av denna sida:",
        "protectedinterface": "Denna sida innehåller text för mjukvarans gränssnitt på denna wiki, och är skrivskyddad för att förebygga missbruk.\nFör att lägga till eller ändra översättningar för alla wikis, var god använd [//translatewiki.net/ translatewiki.net], lokaliseringsprojektet för MediaWiki.",
-       "editinginterface": "'''Varning:''' Du redigerar en sida som används för texten i gränssnittet.\nÄndringar på denna sida kommer att påverka gränssnittets utseende för alla användare på denna wiki.\nFör att lägga till eller ändra översättningar för alla wikis, var god använd [//translatewiki.net/ translatewiki.net], översättningsprojektet för MediaWiki.",
+       "editinginterface": "<strong>Varning:</strong> Du redigerar en sida som används för texten i gränssnittet.\nÄndringar på denna sida kommer att påverka användargränssnittets utseende för andra användare på denna wiki.",
+       "translateinterface": "För att lägga till eller ändra översättningar för alla wikis, använd [//translatewiki.net/ translatewiki.net], lokaliseringsprojektet för MediaWiki.",
        "cascadeprotected": "Den här sidan har skyddats från redigering eftersom den inkluderas på följande {{PLURAL:$1|sida|sidor}} som skrivskyddats med \"kaskaderande skydd\":\n$2",
        "namespaceprotected": "Du har inte behörighet att redigera sidor i namnrymden '''$1'''.",
        "customcssprotected": "Du har inte behörighet att redigera denna CSS-sida eftersom den innehåller en annan användares personliga inställningar.",
        "virus-badscanner": "Dålig konfigurering: okänd virusskanner: ''$1''",
        "virus-scanfailed": "skanning misslyckades (kod $1)",
        "virus-unknownscanner": "okänt antivirusprogram:",
-       "logouttext": "'''Du är nu utloggad.'''\n\nObservera att det, tills du tömmer din webbläsares cache, på vissa sidor kan se ut som att du fortfarande är inloggad.",
+       "logouttext": "<strong>Du är nu utloggad.</strong>\n\nObservera att det, tills du tömmer din webbläsares cache, på vissa sidor kan det se ut som att du fortfarande är inloggad.",
        "welcomeuser": "Välkommen, $1!",
-       "welcomecreation-msg": "Ditt konto har skapats.\nGlöm inte att justera dina [[Special:Preferences|{{SITENAME}}-inställningar]].",
+       "welcomecreation-msg": "Ditt konto har skapats.\nDu kan justera dina [[Special:Preferences|{{SITENAME}}-inställningar]] om du vill.",
        "yourname": "Användarnamn:",
        "userlogin-yourname": "Användarnamn",
        "userlogin-yourname-ph": "Ange ditt användarnamn",
        "loginerror": "Inloggningsproblem",
        "createacct-error": "Fel när konto skulle skapas",
        "createaccounterror": "Kunde inte skapa konto: $1",
-       "nocookiesnew": "Användarkontot skapades, men du är inte inloggad.\n{{SITENAME}} använder kakor för att logga in användare.\nDu har kakor inaktiverade.\nAktivera dem, och logga sen in med ditt nya användarnamn och lösenord.",
+       "nocookiesnew": "Användarkontot skapades, men du är inte inloggad.\n{{SITENAME}} använder kakor för att logga in användare.\nDu har kakor inaktiverade.\nAktivera dem, och logga sedan in med ditt nya användarnamn och lösenord.",
        "nocookieslogin": "{{SITENAME}} använder kakor för att logga in användare. Du har stängt av kakor i din webbläsare. Försök igen med stöd för kakor aktiverat.",
        "nocookiesfornew": "Användarkontot skapades inte, eftersom vi inte kunde bekräfta dess källa.\nSe till att du har aktiverat kakor, ladda om denna sida och försök igen.",
        "noname": "Du har angett ett ogiltigt användarnamn.",
        "createaccount-text": "Någon har skapat ett konto åt din e-postadress på {{SITENAME}} ($4) med namnet \"$2\" och lösenordet \"$3\". Du bör nu logga in och ändra ditt lösenord.\n\nDu kan ignorera detta meddelande om kontot skapats av misstag.",
        "login-throttled": "Du har gjort för många misslyckade inloggningsförsök.\nVänta $1 innan du försöker igen.",
        "login-abort-generic": "Din inloggning misslyckades - Avbröts",
+       "login-migrated-generic": "Dit konto har migrerats och ditt användarnamn existerar inte längre på denna wiki.",
        "loginlanguagelabel": "Språk: $1",
        "suspicious-userlogout": "Din begäran om att logga ut nekades eftersom det ser ut som det skickades av en trasig webbläsare eller cachande proxy.",
-       "createacct-another-realname-tip": "Riktiga namnet är valfritt.\nOm du väljer att ange det, kommer det användas för att tillskriva användaren för sitt arbete.",
+       "createacct-another-realname-tip": "Riktigt namn behöver inte anges.\nOm du väljer att ange det, kommer det att användas för att tillskriva dig ditt arbete.",
        "pt-login": "Logga in",
        "pt-login-button": "Logga in",
        "pt-createaccount": "Skapa konto",
        "passwordreset-emailsent-capture": "En lösenordsåterställning via e-post har skickats, som visas nedan.",
        "passwordreset-emailerror-capture": "En lösenordsåterställning via e-post har skapats, som visas nedan, men det gick inte att skicka den till {{GENDER:$2|användaren}}: $1",
        "changeemail": "Ändra e-postadress",
-       "changeemail-header": "Ändra kontots e-postadress",
        "changeemail-text": "Fyll i detta formulär för att ändra din e-postadress. Du måste ange ditt lösenord för att bekräfta ändringen.",
        "changeemail-no-info": "Du måste vara inloggad för att komma åt den här sidan direkt.",
        "changeemail-oldemail": "Nuvarande e-postadress:",
        "changeemail-none": "(ingen)",
        "changeemail-password": "Ditt lösenord till {{SITENAME}}:",
        "changeemail-submit": "Ändra e-post",
-       "changeemail-cancel": "Avbryt",
        "changeemail-throttled": "Du har gjort för många inloggningsförsök.\nVänta $1 innan du försöker igen.",
        "resettokens": "Återställ nycklar",
        "resettokens-text": "Du kan återställa nycklar som tillåter åtkomst till vissa privata uppgifter som är associerade till ditt konto här.\n\nDu bör återställa om du av misstag delade dem med någon eller om ditt konto har äventyrats.",
        "showpreview": "Visa förhandsgranskning",
        "showdiff": "Visa ändringar",
        "blankarticle": "<strong>Varning:</strong> Sidan du skapar är tom.\nOm du klickar på \"{{int:savearticle}}\" igen kommer sidan skapas utan något innehåll.",
-       "anoneditwarning": "'''Varning:''' Du är inte inloggad.\nDin IP-adress kommer att sparas i historiken för den här sidan.",
+       "anoneditwarning": "<strong>Varning:</strong> Du är inte inloggad. Din IP-adress kommer att vara publikt synlig om du gör några redigeringar. Om du <strong>[$1 loggar in]</strong> eller <strong>[$2 skapar ett konto]</strong> kommer dina redigeringar att tillskrivas ditt användarnamn, tillsammans med andra fördelar.",
        "anonpreviewwarning": "''Du är inte inloggad. Om du sparar kommer din IP-adress registreras på denna sidas redigeringshistorik.''",
-       "missingsummary": "'''Påminnelse:''' Du har inte skrivit någon redigeringskommentar.\nOm du klickar på \"{{int:savearticle}}\" igen, kommer din redigering att sparas utan en sådan.",
+       "missingsummary": "<strong>Påminnelse:</strong> Du har inte skrivit någon redigeringskommentar.\nOm du klickar på \"{{int:savearticle}}\" igen kommer din redigering att sparas utan en sådan.",
        "missingcommenttext": "Var god och skriv in en kommentar nedan.",
-       "missingcommentheader": "'''Påminnelse:''' 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.",
+       "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:",
        "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.",
        "blockednoreason": "ingen motivering angavs",
-       "whitelistedittext": "Du måste $1 för att kunna redigera sidor.",
+       "whitelistedittext": "Vänligen $1 för att redigera sidor.",
        "confirmedittext": "Du måste bekräfta din e-postadress innan du kan redigera sidor. Var vänlig ställ in och validera din e-postadress genom dina [[Special:Preferences|användarinställningar]].",
        "nosuchsectiontitle": "Kan inte hitta avsnitt",
        "nosuchsectiontext": "Du försökte redigera ett avsnitt som inte finns.\nDet kan ha flyttats eller raderats medan du tittade på sidan.",
        "previewconflict": "Den här förhandsvisningen är resultatet av den\nredigerbara texten ovanför,\nså som det kommer att se ut om du väljer att spara.",
        "session_fail_preview": "'''Vi kunde inte behandla din redigering eftersom sessionsdata gått förlorad.\nVar god försök igen.\nOm det fortfarande inte fungerar, prova att [[Special:UserLogout|logga ut]] och logga in igen.'''",
        "session_fail_preview_html": "'''Vi kunde inte behandla din redigering eftersom sessionsdata gått förlorad.'''\n\n''Eftersom {{SITENAME}} har aktiverat rå HTML, så döljs förhandsvisningen som en förebyggande säkerhetsåtgärd mot JavaScript-attacker.''\n\n'''Om detta är ett försök att göra en rättmätig redigering, så försök igen.\nOm det fortfarande inte fungerar, pröva att [[Special:UserLogout|logga ut]] och logga in igen.'''",
-       "token_suffix_mismatch": "'''Din redigering har stoppats eftersom din klient har ändrat tecknen\ni redigeringens \"edit token\". Redigeringen stoppades för att förhindra att sidtexten skadas.\nDetta händer ibland om du använder buggiga webbaserade anonyma proxytjänster.'''",
+       "token_suffix_mismatch": "'''Din redigering har stoppats eftersom din klient har ändrat tecknen\ni redigerings-nyckeln. Redigeringen stoppades för att förhindra att sidtexten skadas.\nDetta händer ibland om du använder buggiga webbaserade anonyma proxytjänster.'''",
        "edit_form_incomplete": "'''Vissa delar av redigeringen kunde inte nå servern, dubbelkolla att dina ändringar är intakta och försök igen.'''",
        "editing": "Redigerar $1",
        "creating": "Skapar $1",
        "content-model-text": "oformaterad text",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Sidor som använder upprepade argument i mallanrop",
+       "duplicate-args-category-desc": "Sidan innehåller mallanrop som använder repeterade argument, så som <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> eller <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Varning: Denna sida innehåller för många anrop av resurskrävande parserfunktioner.\n\nAntalet anrop får vara högst $2, nu görs {{PLURAL:$1|$1 anrop}}",
        "expensive-parserfunction-category": "Sidor med för många resurskrävande parserfunktioner",
        "post-expand-template-inclusion-warning": "Varning: Den här sidan innehåller för mycket mallinklusioner.\nNågra av mallarna kommer inte att inkluderas.",
        "rev-suppressed-unhide-diff": "En av versionerna för denna diff har blivit '''undanhållen'''.\nDet kan finnas detaljer i [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} undanhållandeloggen].\nDu kan fortfarande [$1 se denna diff] om du önskar fortsätta.",
        "rev-deleted-diff-view": "En av sidversionerna i denna diff har '''raderats'''.\nDu kan se denna diff; mer information kan finnas i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].",
        "rev-suppressed-diff-view": "En av versionerna för denna diff har blivit '''undanhållen'''.\nDu kan se denna diff; detaljer kan finnas i [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} undanhållandeloggen].",
-       "rev-delundel": "visa/göm",
+       "rev-delundel": "ändra synlighet",
        "rev-showdeleted": "visa",
        "revisiondelete": "Ta bort/återställ versioner",
        "revdelete-nooldid-title": "Ogiltig målversion",
-       "revdelete-nooldid-text": "Antingen har du inte angivit någon sidversion att utföra funktionen på,\neller så finns inte den version du angav,\neller så försöker du gömma den senaste versionen av sidan.",
+       "revdelete-nooldid-text": "Antingen har du inte angivit någon sidversion att utföra funktionen på, eller så finns inte den version du angav,\neller så försöker du dölja den senaste versionen av sidan.",
        "revdelete-no-file": "Den specificerade filen finns inte.",
        "revdelete-show-file-confirm": "Är du säker på att du vill visa en raderad version av filen \"<nowiki>$1</nowiki>\" från den $2 klockan $3?",
        "revdelete-show-file-submit": "Ja",
        "mergehistory-reason": "Anledning:",
        "mergehistory-revisionrow": "$1($2) $3 . .$4 $5 $6",
        "mergelog": "Sammanfogningslogg",
-       "pagemerge-logentry": "infogade [[$1]] i [[$2]] (versioner t.o.m. $3)",
        "revertmerge": "Återställ infogning",
        "mergelogpagetext": "Detta är en lista över de senaste sammansfogningarna av sidhistoriker.",
        "history-title": "Versionshistorik för \"$1\"",
        "search-result-category-size": "{{PLURAL:$1|1 medlem|$1 medlemmar}} ({{PLURAL:$2|1 underkategori|$2 underkategorier}}, {{PLURAL:$3|1 fil|$3 filer}})",
        "search-redirect": "(omdirigering $1)",
        "search-section": "(avsnitt $1)",
+       "search-category": "(kategorin $1)",
        "search-file-match": "(överensstämmer filens innehåll)",
        "search-suggest": "Menade du: $1",
        "search-interwiki-caption": "Systerprojekt",
        "searchall": "alla",
        "showingresults": "Nedan visas upp till {{PLURAL:$1|'''1''' post|'''$1''' poster}} från och med nummer '''$2'''.",
        "showingresultsinrange": "Nedan visas upp till {{PLURAL:$3|<strong>1</strong> resultat|<strong>$1</strong> resultat}} mellan nummer <strong>$2</strong> och nummer <strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' av '''$3'''|Resultat '''$1 - $2''' av '''$3'''}} för '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Resultat <strong>$1</strong> av <strong>$3</strong>|Resultat <strong>$1 – $2</strong> av <strong>$3</strong>}}",
        "search-nonefound": "Inga resultat matchade frågan.",
        "powersearch-legend": "Avancerad sökning",
        "powersearch-ns": "Sök i namnrymderna:",
        "prefs-namespaces": "Namnrymder",
        "default": "ursprungsinställning",
        "prefs-files": "Filer",
-       "prefs-custom-css": "personlig CSS",
-       "prefs-custom-js": "personlig JavaScript",
+       "prefs-custom-css": "Personlig CSS",
+       "prefs-custom-js": "Personligt JavaScript",
        "prefs-common-css-js": "Delad CSS/JS för alla utseenden:",
        "prefs-reset-intro": "Du kan använda den här sidan till att återställa dina inställningar till webbplatsens standardinställningar.\nDetta kan inte återställas.",
        "prefs-emailconfirm-label": "E-postbekräftelse:",
        "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.",
        "email": "E-post",
-       "prefs-help-realname": "Riktigt namn behöver inte anges.\nOm du väljer att ange ditt riktiga namn, kommer det att användas för att tillskriva dig ditt arbete.",
+       "prefs-help-realname": "Riktigt namn behöver inte anges.\nOm angivet, kan det komma att användas för att tillskriva dig ditt arbete.",
        "prefs-help-email": "Att ange e-postadress är valfritt, men gör det möjligt att få ditt lösenord mejlat till dig om du glömmer det.",
        "prefs-help-email-others": "Du kan också välja att låta andra kontakta dig via e-post genom en länk på din användar- eller diskussionssida. Din e-postadress avslöjas inte när andra användare kontaktar dig.",
        "prefs-help-email-required": "E-postadress måste anges.",
        "prefs-tokenwatchlist": "Nyckel",
        "prefs-diffs": "Skillnader",
        "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.",
        "email-address-validity-valid": "E-postadress ser giltig ut",
        "email-address-validity-invalid": "Ange en giltig e-postadress",
        "right-suppressionlog": "Se privata loggar",
        "right-block": "Blockera andra användare från att redigera",
        "right-blockemail": "Blockera användare från att skicka e-post",
-       "right-hideuser": "Blockera användarnamn och dölja det från blockeringsloggen",
+       "right-hideuser": "Blockera ett användarnamn och dölja det från allmänheten",
        "right-ipblock-exempt": "Kan redigera från blockerade IP-adresser",
        "right-proxyunbannable": "Kan redigera från blockerade proxyer",
        "right-unblockself": "Avblockera sig själv",
        "right-patrol": "Markera ändringar som patrullerade",
        "right-autopatrol": "Får automatiskt sina ändringar markerade som patrullerade",
        "right-patrolmarks": "Se markeringar av opatrullerade ändringar i senaste ändringarna",
-       "right-unwatchedpages": "Se listan över obevakade sidor",
+       "right-unwatchedpages": "Se en lista över obevakade sidor",
        "right-mergehistory": "Sammanfoga sidhistoriker",
-       "right-userrights": "Ändra alla användarrättigheter",
-       "right-userrights-interwiki": "Ändra rättigheter för användare på andra wikier",
-       "right-siteadmin": "Låsa och låsa upp databasen",
+       "right-userrights": "Redigera alla användarrättigheter",
+       "right-userrights-interwiki": "Redigera användarrättigheterna på andra wikier",
+       "right-siteadmin": "Lås och öppna databasen",
        "right-override-export-depth": "Exportera sidor inklusive länkade sidor till ett djup på 5",
        "right-sendemail": "Skicka e-post till andra användare",
        "right-passwordreset": "Visa e-postmeddelanden med lösenordsåterställning",
        "newuserlogpage": "Logg över nya användare",
-       "newuserlogpagetext": "Detta är en logg över skapade användarkonton.",
+       "newuserlogpagetext": "Detta är en logg över nya användarkonton.",
        "rightslog": "Användarrättighetslogg",
        "rightslogtext": "Detta är en logg över ändringar av användares rättigheter.",
        "action-read": "läsa denna sida",
        "action-suppressionlog": "se denna privata logg",
        "action-block": "blockera denna användare från redigering",
        "action-protect": "ändra skyddsnivå för denna sida",
-       "action-rollback": "snabbt rulla tillbaka ändringarna gjorda av den användare som senast redigerade en viss sida",
+       "action-rollback": "rulla snabbt tillbaka ändringarna gjorda av den användare som senast redigerade en viss sida",
        "action-import": "importera sidor från en annan wiki",
        "action-importupload": "importera sidor från en filuppladdning",
        "action-patrol": "märka annans redigering som patrullerad",
        "recentchanges-legend-heading": "'''Teckenförklaring:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se även [[Special:NewPages|listan över nya sidor]])",
        "recentchanges-legend-plusminus": "(''±123'')",
-       "rcnotefrom": "Nedan visas {{PLURAL:$5|ändringar|ändringen}} sedan <strong>$3, $4</strong> (upp till <strong>$1</strong> ändringar visas).",
+       "rcnotefrom": "Nedan visas {{PLURAL:$5|ändringen|ändringar}} sedan <strong>$3, $4</strong> (upp till <strong>$1</strong> ändringar visas).",
        "rclistfrom": "Visa ändringar från och med $3 $2",
        "rcshowhideminor": "$1 mindre ändringar",
        "rcshowhideminor-show": "Visa",
        "rclinks": "Visa senaste $1 ändringar under de senaste $2 dygnen<br />$3",
        "diff": "skillnad",
        "hist": "historik",
-       "hide": "Göm",
+       "hide": "Dölj",
        "show": "Visa",
        "minoreditletter": "m",
        "newpageletter": "N",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte}} efter ändring",
        "newsectionsummary": "/* $1 */ nytt avsnitt",
        "rc-enhanced-expand": "Visa detaljer",
-       "rc-enhanced-hide": "Göm detaljer",
+       "rc-enhanced-hide": "Dölj detaljer",
        "rc-old-title": "skapades ursprungligen som \"$1\"",
        "recentchangeslinked": "Relaterade ändringar",
        "recentchangeslinked-feed": "Relaterade ändringar",
        "statistics": "Statistik",
        "statistics-header-pages": "Sidstatistik",
        "statistics-header-edits": "Redigeringsstatistik",
-       "statistics-header-views": "Sidvisningsstatistik",
        "statistics-header-users": "Användarstatistik",
        "statistics-header-hooks": "Övrig statistik",
        "statistics-articles": "Sidor med innehåll",
        "statistics-files": "Uppladdade filer",
        "statistics-edits": "Sidredigeringar sedan {{SITENAME}} startades",
        "statistics-edits-average": "Redigeringar per sida i genomsnitt",
-       "statistics-views-total": "Totalt antal sidvisningar",
-       "statistics-views-total-desc": "Visningar av icke-existerande sidor och specialsidor ingår inte",
-       "statistics-views-peredit": "Antal sidvisningar per redigering",
        "statistics-users": "Registrerade [[Special:ListUsers|användare]]",
        "statistics-users-active": "Aktiva användare",
        "statistics-users-active-desc": "Användare som utfört någon åtgärd under {{PLURAL:$1|det senaste dygnet|de senaste $1 dygnen}}",
-       "statistics-mostpopular": "Mest besökta sidor",
        "pageswithprop": "Sidor med en sidegenskap",
        "pageswithprop-legend": "Sidor med en sidegenskap",
        "pageswithprop-text": "Denna sida listar sidor som använder en speciell sidegenskap.",
        "uncategorizedtemplates": "Ej kategoriserade mallar",
        "unusedcategories": "Oanvända kategorier",
        "unusedimages": "Oanvända filer",
-       "popularpages": "Populära sidor",
        "wantedcategories": "Önskade kategorier",
        "wantedpages": "Önskade sidor",
        "wantedpages-badtitle": "Ogiltig titel bland resultaten: $1",
        "protectedpages-timestamp": "Tidsstämpel",
        "protectedpages-page": "Sida",
        "protectedpages-expiry": "Upphör",
-       "protectedpages-performer": "Skyddar användare",
+       "protectedpages-performer": "Skyddande användare",
        "protectedpages-params": "Skyddsparametrar",
        "protectedpages-reason": "Anledning",
        "protectedpages-unknown-timestamp": "Okänd",
        "pager-older-n": "{{PLURAL:$1|1 äldre|$1 äldre}}",
        "suppress": "Censur",
        "querypage-disabled": "Den här specialsidan är inaktiverad av prestandaskäl.",
+       "apihelp": "API-hjälp",
+       "apihelp-no-such-module": "Modulen ”$1” hittades inte",
        "booksources": "Bokkällor",
        "booksources-search-legend": "Sök efter bokkällor",
-       "booksources-go": "Visa",
+       "booksources-search": "Sök",
        "booksources-text": "Nedan följer en lista över länkar till webbplatser som säljer nya och begagnade böcker, och som kanske har ytterligare information om de böcker du söker.",
        "booksources-invalid-isbn": "Det angivna ISBN-numret verkar inte vara giltigt. Kontrollera källan för eventuella fel.",
        "specialloguserlabel": "Utförare:",
        "allpagesprefix": "Visa sidor med prefixet:",
        "allpagesbadtitle": "Den angivna sidtiteln var ogiltig eller innehöll ett prefix för annan språkversion eller ett interwiki-prefix.\nDen kan innehålla en eller fler tecken som inte är tillåtna i titlar.",
        "allpages-bad-ns": "Namnrymden \"$1\" finns inte på {{SITENAME}}.",
-       "allpages-hide-redirects": "Göm omdirigeringar",
+       "allpages-hide-redirects": "Dölj omdirigeringar",
        "cachedspecial-viewing-cached-ttl": "Du visar en cachad version av denna sida, som kan vara upp till $1 gammal.",
        "cachedspecial-viewing-cached-ts": "Du visar en cachad version av denna sida, som kanske inte är helt aktuell.",
        "cachedspecial-refresh-now": "Visa senaste.",
        "wlheader-enotif": "E-postmeddelanden är aktiverade.",
        "wlheader-showupdated": "Sidor som har ändrats sedan ditt senaste besök visas i '''fetstil.'''",
        "wlnote": "Nedan finns {{PLURAL:$1|den senaste ändringen|de senaste <strong>$1</strong> ändringarna}} under {{PLURAL:$2|den senaste timmen|de senaste <strong>$2</strong> timmarna}} från den $3 kl. $4.",
-       "wlshowlast": "Visa senaste $1 timmarna $2 dygnen $3",
+       "wlshowlast": "Visa senaste $1 timmarna $2 dygnen",
        "watchlist-options": "Alternativ för bevakningslistan",
        "watching": "Bevakar...",
        "unwatching": "Avbevakar...",
        "protect-othertime": "Annan tidsperiod:",
        "protect-othertime-op": "annan tidsperiod",
        "protect-existing-expiry": "Gällande varaktighet: $2, kl. $3",
+       "protect-existing-expiry-infinity": "Gällande varaktighet: oändlig",
        "protect-otherreason": "Annan/ytterligare anledning:",
        "protect-otherreason-op": "Annan anledning",
        "protect-dropdown": "*Vanliga anledningar för skrivskydd\n** Upprepad vandalisering\n** Upprepad spam\n** Redigeringskrig\n** Sida med många besökare",
        "ipboptions": "2 timmar:2 hours,1 dygn:1 day,3 dygn:3 days,1 vecka:1 week,2 veckor:2 weeks,1 månad:1 month,3 månader:3 months,6 månader:6 months,1 år:1 year,oändlig:infinite",
        "ipbhidename": "Dölj användarnamnet från redigeringar och listor",
        "ipbwatchuser": "Bevaka användarens användarsida och diskussionssida",
-       "ipb-disableusertalk": "Hindra användaren från att redigera sina egna diskussionssida under blockeringen",
+       "ipb-disableusertalk": "Hindra användaren från att redigera sin egen diskussionssida under blockeringen",
        "ipb-change-block": "Återblockera användaren med de här inställningarna",
        "ipb-confirm": "Bekräfta blockering",
        "badipaddress": "Du har inte skrivit IP-adressen korrekt.",
        "blockipsuccesssub": "Blockeringen är utförd",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] har blockerats.<br />\nFör att se alla aktuella blockeringar, gå till [[Special:BlockList|listan över blockeringar]].",
        "ipb-blockingself": "Du håller på att blockera dig själv! Är du säker på att du vill göra det?",
-       "ipb-confirmhideuser": "Du är på väg att blockera en användare med \"göm användare\" aktiverat. Detta kommer upphäva användarens namn i alla listor och loggar. Är du säker på att du vill göra det?",
+       "ipb-confirmhideuser": "Du är på väg att blockera en användare med \"dölj användare\" aktiverat. Detta kommer upphäva användarens namn i alla listor och loggar. Är du säker på att du vill göra det?",
        "ipb-confirmaction": "Markera fältet \"{{int:ipb-confirm}}\" längst ned om du är säker på att du verkligen vill göra det.",
        "ipb-edit-dropdown": "Redigera blockeringsanledningar",
        "ipb-unblock-addr": "Ta bort blockering av $1",
        "unblocked": "Blockeringen av [[User:$1|$1]] har hävts",
        "unblocked-range": "$1 har avblockerats",
        "unblocked-id": "Blockeringen $1 har hävts",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] har avblockerats.",
        "blocklist": "Blockerade användare",
        "ipblocklist": "Blockerade användare",
        "ipblocklist-legend": "Sök efter en blockerad användare",
-       "blocklist-userblocks": "Göm kontoblockeringar",
+       "blocklist-userblocks": "Dölj kontoblockeringar",
        "blocklist-tempblocks": "Dölj tillfälliga blockeringar",
-       "blocklist-addressblocks": "Göm enskilda IP-blockeringar",
-       "blocklist-rangeblocks": "Göm intervallblockeringar",
+       "blocklist-addressblocks": "Dölj enskilda IP-blockeringar",
+       "blocklist-rangeblocks": "Dölj intervallblockeringar",
        "blocklist-timestamp": "Tidsstämpel",
        "blocklist-target": "Mål",
        "blocklist-expiry": "Upphör",
        "autoblocker": "Automatisk blockerad eftersom din IP-adress nyligen använts av \"[[User:$1|$1]]\".\nMotiveringen som angavs för blockeringen av $1 var: \"$2\".",
        "blocklogpage": "Blockeringslogg",
        "blocklog-showlog": "Denna användare har blivit blockerad tidigare.\nBlockeringsloggen är tillgänglig nedan som referens:",
-       "blocklog-showsuppresslog": "Denna användare har tidigare blivit blockerad och gömd.\nUndanhållandeloggen visas nedan för referens:",
+       "blocklog-showsuppresslog": "Denna användare har tidigare blivit blockerad och dold.\nUndanhållandeloggen visas nedan för referens:",
        "blocklogentry": "blockerade [[$1]] med blockeringstid på $2 $3",
        "reblock-logentry": "ändrade blockeringsinställningar för [[$1]] med en varaktighet på $2 $3",
        "blocklogtext": "Detta är en logg över blockeringar och avblockeringar.\nAutomatiskt blockerade IP-adresser listas ej.\nSe [[Special:BlockList|blockeringslistan]] för en översikt av gällande blockeringar.",
        "block-log-flags-noemail": "e-post blockerad",
        "block-log-flags-nousertalk": "kan inte redigera sin diskussionssida",
        "block-log-flags-angry-autoblock": "utökad automatblockering aktiverad",
-       "block-log-flags-hiddenname": "användarnamn gömt",
+       "block-log-flags-hiddenname": "användarnamn dolt",
        "range_block_disabled": "Möjligheten för administratörer att blockera intervall av IP-adresser har stängts av.",
        "ipb_expiry_invalid": "Ogiltig varaktighetstid.",
        "ipb_expiry_temp": "För att dölja användarnamnet måste blockeringen vara permanent.",
        "sorbsreason": "Din IP-adress är listad som öppen proxy i den DNSBL {{SITENAME}} använder.",
        "sorbs_create_account_reason": "Din IP-adress är listad som en öppen proxy i den DNSBL som används av {{SITENAME}}.\nDu får inte skapa ett användarkonto",
        "xffblockreason": "En IP-adress i sidhuvudet X-Forwarded-For, antingen din adress eller en proxyserver som du använder, har blockerats. Den ursprungliga anledningen till blockeringen var: $1",
-       "cant-see-hidden-user": "Användaren du försöker blockera är redan blockerad och gömd. Eftersom du inte har hideuser-rättigheter, kan du inte se eller redigera användarens blockering.",
+       "cant-see-hidden-user": "Användaren du försöker blockera är redan blockerad och dold. Eftersom du inte har hideuser-rättigheter, kan du inte se eller redigera användarens blockering.",
        "ipbblocked": "Du kan inte blockera eller avblockera andra användare, eftersom du själv är blockerad",
        "ipbnounblockself": "Du har inte tillåtelse att avblockera dig själv",
        "lockdb": "Lås databas",
        "tooltip-pt-mycontris": "Lista över dina bidrag",
        "tooltip-pt-login": "Du uppmuntras att logga in, men det är inte nödvändigt",
        "tooltip-pt-logout": "Logga ut",
+       "tooltip-pt-createaccount": "Du uppmuntras att skapa ett konto och logga in, men det är inte obligatoriskt",
        "tooltip-ca-talk": "Diskussion om innehållssidan",
        "tooltip-ca-edit": "Du kan redigera den här sidan.\nVänligen använd förhandsgranskningsknappen innan du sparar.",
        "tooltip-ca-addsection": "Starta ett nytt avsnitt",
        "tooltip-feed-atom": "Atom-flöde för den här sidan",
        "tooltip-t-contributions": "En lista över bidrag från den här användaren",
        "tooltip-t-emailuser": "Skicka e-post till den här användaren",
+       "tooltip-t-info": "Mer information om denna sida",
        "tooltip-t-upload": "Ladda upp filer",
        "tooltip-t-specialpages": "Lista över alla specialsidor",
        "tooltip-t-print": "Utskriftvänlig version av den här sidan",
        "tooltip-recreate": "Återskapa sidan fast den har tagits bort",
        "tooltip-upload": "Starta uppladdning",
        "tooltip-rollback": "\"Tillbakarullning\" tar med en knapptryckning bort ändringar som gjorts av den som senast redigerade sidan",
-       "tooltip-undo": "\"Gör ogjord\" återställer denna redigering och öppnar redigeringsrutan med förhandsgranskning.\nDen ger möjlighet att skriva en motivering i redigeringssammanfattningen.",
+       "tooltip-undo": "\"Gör ogjord\" återställer denna redigering och öppnar redigeringsrutan med förhandsgranskning. Det ger möjlighet att skriva en motivering i redigeringssammanfattningen.",
        "tooltip-preferences-save": "Spara inställningar",
        "tooltip-summary": "Skriv en kort sammanfattning",
        "interlanguage-link-title": "$1 - $2",
        "pageinfo-robot-policy": "Indexering av robotar",
        "pageinfo-robot-index": "Tillåten",
        "pageinfo-robot-noindex": "Inte tillåten",
-       "pageinfo-views": "Antal visningar",
        "pageinfo-watchers": "Antal användare som bevakar sidan",
        "pageinfo-few-watchers": "Färre än $1 {{PLURAL:$1|bevakare}}",
        "pageinfo-redirects-name": "Antal omdirigeringar till denna sida",
        "metadata-help": "Den här filen innehåller extrainformation som troligen lades till av en digitalkamera eller skanner när filen skapades. Om filen har modifierats kan det hända att vissa detaljer inte överensstämmer med den modifierade filen.",
        "metadata-expand": "Visa utökade detaljer",
        "metadata-collapse": "Dölj utökade detaljer",
-       "metadata-fields": "Bildens metadata-fält som är listad i detta meddelande kommer att finnas på bildsidan när metadata-tabellen är hopfälld.\nAndra kommer att gömmas som standard\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": "Bildens metadata-fält som är listad i detta meddelande kommer att finnas på bildsidan när metadata-tabellen är hopfälld.\nAndra kommer att döljas som standard\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": "Bredd",
        "exif-imagelength": "Höjd",
        "exif-bitspersample": "Bitar per komponent",
        "exif-urgency-low": "Låg ($1)",
        "exif-urgency-high": "Hög ($1)",
        "exif-urgency-other": "Användardefinierad prioritet ($1)",
-       "watchlistall2": "alla",
        "namespacesall": "alla",
        "monthsall": "alla",
        "confirmemail": "Bekräfta e-postadress",
        "unknown_extension_tag": "Okänd tagg \"$1\"",
        "duplicate-defaultsort": "'''Varning:''' Standardsorteringsnyckeln \"$2\" tar över från den tidigare standardsorteringsnyckeln \"$1\".",
        "duplicate-displaytitle": "<strong>Varning:</strong> Visningstiteln \"$2\" skriver över den tidigare visningstiteln \"$1\".",
+       "invalid-indicator-name": "<p>Fel:</strong> Sidstatus-indikatorernas <code>namn</code>-attributet får inte vara tomt.",
        "version": "Version",
        "version-extensions": "Installerade programtillägg",
        "version-skins": "Installerade utseenden",
        "logentry-delete-revision": "$1 {{GENDER:$2|ändrade}} synligheten för {{PLURAL:$5|en version|$5 versioner}} på sidan $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|ändrade}} synligheten för logghändelser på $3",
        "logentry-delete-revision-legacy": "$1 {{GENDER:$2|ändrade}} synligheten för versioner på sidan $3",
-       "logentry-suppress-delete": "$1 {{GENDER:$2|gömde}} sidan $3",
+       "logentry-suppress-delete": "$1 {{GENDER:$2|dolde}} sidan $3",
        "logentry-suppress-event": "$1 {{GENDER:$2|ändrade}} i hemlighet synligheten för {{PLURAL:$5|en logghändelse|$5 logghändelser}} på $3: $4",
        "logentry-suppress-revision": "$1 {{GENDER:$2|ändrade}} synligheten i hemlighet för {{PLURAL:$5|en version|$5 versioner}} på sidan $3: $4",
        "logentry-suppress-event-legacy": "$1 {{GENDER:$2|ändrade}} synligheten i hemlighet för logghändelser på $3",
        "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-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-move-move_redir": "$1 {{GENDER:$2|flyttade}} sidan $3 till $4 över en omdirigering",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|laddade upp}} en ny version av $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|laddade upp}} $3",
        "rightsnone": "(inga)",
+       "revdelete-summary": "sammanfattning",
        "feedback-bugornote": "Om du är redo att beskriva ett tekniskt problem detaljerat, var god [$1 rapporterar en bugg].\nAnnars kan du använda det enkla formuläret nedan. Din kommentar kommer att läggas till på sidan \"[$3 $2]\", tillsammans med ditt användarnamn och vilken webbläsare du använder.",
        "feedback-subject": "Ämne:",
        "feedback-message": "Meddelande:",
        "searchsuggest-search": "Sök",
        "searchsuggest-containing": "innehåller...",
        "api-error-badaccess-groups": "Du får inte ladda upp filer till denna wiki.",
-       "api-error-badtoken": "Internt fel: felaktig token.",
+       "api-error-badtoken": "Internt fel: felaktig nyckel.",
        "api-error-copyuploaddisabled": "Uppladdning via URL är inaktiverad på den här servern.",
        "api-error-duplicate": "Det finns redan {{PLURAL:$1|[$2 en annan fil]|[$2 andra filer]}} på webbplatsen med samma innehåll.",
        "api-error-duplicate-archive": "Det fanns redan {{PLURAL:$1|[$2 en annan fil]|[$2 några andra filer]}} på webbplatsen med samma innehåll, men {{PLURAL:$1|den har|de har}} raderats.",
        "log-name-pagelang": "Språkändringslogg",
        "log-description-pagelang": "Detta är en logg över ändringar i sidspråken.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ändrade}} sidspråket för $3 från $4 till $5.",
-       "default-skin-not-found": "Ojsan! Standardutseendet för din wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, är inte tillgängligt.\n\nDin installation verkar innehålla följande utseenden. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur dessa aktiveras och hur standard väljs.\n\n$2\n\n; Om du precis installerat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är att förvänta. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klipp-och-klistra in <code>skins/</code>-katalogen från den.\n:* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code>skins/</code>-katalogen i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare.\n\n; Om du precis har uppgraderat MediaWiki:\n: MediaWiki 1.24 och nyare aktiverar ej längre automatiskt utseenden (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Automatisk identifiering av utseenden]). Du kan klistra in följande rader i <code>LocalSettings.php</code> för att aktivera alla för närvarande installerade utseenden:\n\n<pre>$3</pre>\n\n; Om du precis har ändrat i <code>LocalSettings.php</code>:\n: Dubbelkolla namnen för utseendena för att identifiera stavfel.",
-       "default-skin-not-found-no-skins": "Ojsan! Standardutseendet för din wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, är inte tillgängligt.\n\nDu har inga installerade utseenden.\n\n; Om du precis installerat eller uppdaterat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är att förvänta. MediaWiki 1.24 och nyare inkluderar inte några utseenden i det huvudsakliga centralförvaret. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klipp-och-klistra in <code>skins/</code>-katalogen från den.\n* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code>skins/</code>-katalogen i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur utseenden aktiveras och hur standardutseendet väljs.",
+       "default-skin-not-found": "Ojsan! Standardutseendet för din wiki, definierad i <code dir=\"ltr\">$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDin installation verkar innehålla följande utseenden. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur dessa aktiveras och hur standard väljs.\n\n$2\n\n; Om du precis installerat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är att förvänta. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klipp-och-klistra in <code>skins/</code>-katalogen från den.\n:* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code dir=\"ltr\">skins/</code>-katalogen i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare.\n\n; Om du precis har uppgraderat MediaWiki:\n: MediaWiki 1.24 och nyare aktiverar ej längre automatiskt utseenden (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Automatisk identifiering av utseenden]). Du kan klistra in följande rader i <code>LocalSettings.php</code> för att aktivera alla för närvarande installerade utseenden:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Om du precis har ändrat i <code>LocalSettings.php</code>:\n: Dubbelkolla namnen för utseendena för att identifiera stavfel.",
+       "default-skin-not-found-no-skins": "Ojsan! Standardutseendet för din wiki, definierad i <code>$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDu har inga installerade utseenden.\n\n; Om du precis installerat eller uppdaterat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är att förvänta. MediaWiki 1.24 och nyare inkluderar inte några utseenden i det huvudsakliga centralförvaret. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klipp-och-klistra in <code dir=\"ltr\">skins/</code>-katalogen från den.\n* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code>skins/</code>-katalogen i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur utseenden aktiveras och hur standardutseendet väljs.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiverad)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''inaktiverad''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''inaktiverad''')",
+       "mediastatistics": "Mediastatistik",
+       "mediastatistics-summary": "Statistik om uppladdade filtyper. Detta inkluderar bara den senaste versionen av en fil. Äldre eller raderade filversioner exkluderas.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME-typ",
+       "mediastatistics-table-extensions": "Möjliga tillägg",
+       "mediastatistics-table-count": "Antal filer",
+       "mediastatistics-table-totalbytes": "Kombinerad storlek",
+       "mediastatistics-header-unknown": "Okänd",
+       "mediastatistics-header-bitmap": "Bitmap-bilder",
+       "mediastatistics-header-drawing": "Teckningar (vektorbilder)",
+       "mediastatistics-header-audio": "Ljud",
+       "mediastatistics-header-video": "Video",
+       "mediastatistics-header-multimedia": "Rik media",
+       "mediastatistics-header-office": "Dokument",
+       "mediastatistics-header-text": "Text",
+       "mediastatistics-header-executable": "Körbara filer",
+       "mediastatistics-header-archive": "Komprimerade format",
+       "json-warn-trailing-comma": "$1 avslutande {{PLURAL:$1|kommatecken}} togs bort från JSON",
+       "json-error-unknown": "Det var ett problem med JSON. Fel: $1",
+       "json-error-depth": "Listans maximala djup har överskridits",
+       "json-error-state-mismatch": "Ogiltig eller felaktig JSON",
+       "json-error-ctrl-char": "Kontrollteckenfel, möjligen felaktigt kodad",
+       "json-error-syntax": "Syntaxfel",
+       "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"
 }
index 04b8a9b..be5d21c 100644 (file)
        "passwordreset-emailsent-capture": "Barua pepe ya ukukumbusho imetumwa, ambayo inaonekana hapo chini.",
        "passwordreset-emailerror-capture": "Barua pepe ya ukukumbusho imetengenezwa, ambayo inaonekana hapo chini, lakini kuituma kwa mtumiaji imeshindikana: $1",
        "changeemail": "Badilisha anwani ya barua pepe",
-       "changeemail-header": "Badilisha anwani ya barua pepe ya akaunti yako",
        "changeemail-text": "Jaza fomu hii ili kubadilisha anwani yako ya barua pepe. Itabidi uingize neno lako la siri ili kukamilisha badiliko hili.",
        "changeemail-no-info": "Lazima uwe umeingia ili kuweza kutumia kurasa hii moja kwa moja.",
        "changeemail-oldemail": "Anwani ya barua pepe ya sasa:",
        "changeemail-none": "(hakuna)",
        "changeemail-password": "Neno lako la siri kuingia {{SITENAME}}:",
        "changeemail-submit": "Badilisha anwani ya barua pepe",
-       "changeemail-cancel": "Batilisha",
        "bold_sample": "Maandishi ya kooze",
        "bold_tip": "Kukoozesha maandishi",
        "italic_sample": "Matini ya italiki",
        "mergehistory-same-destination": "Kurasa za chanzo na za mwishilio haziwezi kuwa sawa",
        "mergehistory-reason": "Sababu:",
        "mergelog": "Kumbukumbu za kuunganisha",
-       "pagemerge-logentry": "aliunganisha [[$1]] ndani wa [[$2]] (mapitio hadi $3)",
        "revertmerge": "Toa muungano",
        "mergelogpagetext": "Hapo chini yanaorodheshwa matukio ya hivi karibuni ya kuunganisha historia za kurasa mbili.",
        "history-title": "Historia ya mapitio ya \"$1\"",
        "searchrelated": "zingine zinazofanana",
        "searchall": "zote",
        "showingresults": "{{PLURAL:$1|Tokeo '''1''' linaonyeshwa|matokeo '''$1''' yanaonyeshwa}} chini, kuanzia na namba '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Tokeo '''$1''' kati ya jumla ya '''$3'''|Matokeo '''$1 - $2''' kati ya jumla ya '''$3'''}} kutokana na kuitafuta '''$4'''",
        "search-nonefound": "Hakuna matokeo ya kutafuta ulizio ule.",
        "powersearch-legend": "Tafuta kwa hali ya juu",
        "powersearch-ns": "Tafuta kwenye maeneo ya wiki yafuatayo:",
        "statistics": "Takwimu",
        "statistics-header-pages": "Takwimu za kurasa",
        "statistics-header-edits": "Takwimu za kuhariri",
-       "statistics-header-views": "Onyesha takwimu",
        "statistics-header-users": "Takwimu za watumiaji",
        "statistics-header-hooks": "Takwimu zingine",
        "statistics-articles": "Kurasa zilizopo",
        "statistics-files": "Faili zilizopakiwa",
        "statistics-edits": "Kurasa zilizohaririwa tangu {{SITENAME}} ilivyoanzishwa",
        "statistics-edits-average": "Wastani wa uhariri kwa kurasa",
-       "statistics-views-total": "Jumla ya mitazamaji",
-       "statistics-views-total-desc": "Tazamo za kurasa zisizokuwepo na kurasa maalumu hazionikani.",
-       "statistics-views-peredit": "Mitazamaji kwa haririo",
        "statistics-users": "[[Special:ListUsers|Watumiaji]] waliojisajiri",
        "statistics-users-active": "Watumiaji wanaofanya kazi",
        "statistics-users-active-desc": "Watumiaji waliofanya kazi katika siku {{PLURAL:$1|iliyopita|$1 zilizopita}}",
-       "statistics-mostpopular": "Kurasa zinazotazamwa sana",
        "pageswithprop-submit": "Nenda",
        "doubleredirects": "Maelekezo mawilimawili",
        "doubleredirectstext": "Ukurasa huu unaorodhesha kurasa zinazoelekeza kurasa zingine za kuelekeza.\nKatika kila mstari kuna viungo vinavyokwenda katika kurasa za kuelekeza zote mbili, pamoja na ukurasa wa mwishilio mwa elekezo la pili. Ukurasa huu wa mwishilio huwa ni ukurasa unaostahili kuelekezwa kutoka kwa ukurasa wa kuelekeza wa kwanza. Vitu <del>vilivyokatwa kwa mstari</del> vimeshatatuliwa.",
        "uncategorizedtemplates": "Vigezo ambavyo havijawekwa katika jamii",
        "unusedcategories": "Jamii ambazo hazitumiwi",
        "unusedimages": "Mafaili ambayo hayatumiwi",
-       "popularpages": "Kurasa zinazopendelewa",
        "wantedcategories": "Jamii zinazotakiwa",
        "wantedpages": "Kurasa zinazotakiwa",
        "wantedpages-badtitle": "Kichwa batili katika seti ya matokeo: $1",
        "suppress": "Uangalizi",
        "booksources": "Vyanzo vya vitabu",
        "booksources-search-legend": "Tafuta mahali panopopatikana kitabu",
-       "booksources-go": "Nenda",
        "booksources-invalid-isbn": "ISBN iliyoandikwa haonekani kuwa halali; hakikisha kwamba ni sawa na chanzo halisi cha ISBN.",
        "specialloguserlabel": "Mtendaji:",
        "speciallogtitlelabel": "Kusudio (jina la ukurasa au mtumiaji):",
        "wlheader-enotif": "Huduma ya kuarifu kwa barua pepe imewezeshwa.",
        "wlheader-showupdated": "Kurasa zilizobadilika tangu ulivyotembelea mara ya mwisho zinaonyeshwa katika hali ya '''kukooza'''",
        "wlnote": "{{PLURAL:$1|is the last change|Mabadiliko '''$1''' ya}} mwisho katika {{PLURAL:$2|hour|masaa '''$2''' yaliyopita yanaonyeshwa}} chini, ilivyokuwa saa $4, tarehe $3.",
-       "wlshowlast": "Onyesha kutoka masaa $1 siku $2 $3",
+       "wlshowlast": "Onyesha kutoka masaa $1 siku $2",
        "watchlist-options": "Hitiari za maangalizi",
        "watching": "Unafuatilia...",
        "unwatching": "Umeacha kufuatilia...",
        "exif-urgency-low": "Chini ($1)",
        "exif-urgency-high": "Juu ($1)",
        "exif-urgency-other": "Upaumbele uliotajwa na mtumiaji ($1)",
-       "watchlistall2": "zote",
        "namespacesall": "zote",
        "monthsall": "yote",
        "confirmemail": "Kuyakinisha anwani ya barua pepe",
        "logentry-newusers-create2": "$1 alianzisha akaunti ya mtumiaji $3",
        "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",
index 2a0f494..00766b7 100644 (file)
        "passwordreset-emailsent-capture": "E-brif posłony, kerego widać niżej.",
        "passwordreset-emailerror-capture": "Ńy udoło śe posłać wjadomości lo {{GENDER:$2|używocza|używoczki}}: $1",
        "changeemail": "Pomjyno ausdruka e-mail",
-       "changeemail-header": "Pomjyno ausduku e-mail",
        "changeemail-text": "Wypełnij formularz, podej nowy ausdruk a hasło.",
        "changeemail-no-info": "Muśisz być zalogowany, coby uzyskać bezpostrzedńi dostymp do tyj zajty.",
        "changeemail-oldemail": "Uobecny ausdruk:",
        "changeemail-newemail": "Nowy adresu e-brif",
        "changeemail-none": "podstawowo",
        "changeemail-submit": "Spamjyntej nowy",
-       "changeemail-cancel": "Uodćepej",
        "resettokens": "Resetuj tokeny",
        "bold_sample": "Ruby tekst",
        "bold_tip": "Ruby tekst",
        "mergehistory-same-destination": "Zajta zdřuduowo a docelowo ńy mogům być te same.",
        "mergehistory-reason": "Kůmyntorz:",
        "mergelog": "Pouůnčůne",
-       "pagemerge-logentry": "Pouůnčůno [[$1]] ze [[$2]] (historja pomjyńań aže do $3)",
        "revertmerge": "Uodkupluj",
        "mergelogpagetext": "Půńižej znojduje śe lista uostatńich pouůnčyń historyji půmjyńań zajtůw.",
        "history-title": "Gyszichta sprowjyń \"$1\"",
        "searchrelated": "podane",
        "searchall": "wszyjske",
        "showingresults": "To lista na keryj je {{PLURAL:$1|'''1''' wyńik|'''$1''' wyńikůw}}, počynojůnc uod nůmeru '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Wyńik '''$1''' z '''$3'''|Wyńiki '''$1 – $2''' z '''$3'''}} lo '''$4'''",
        "search-nonefound": "Ńy mo wynikůw, kere uodpadajům kryterjům zapytańo.",
        "powersearch-legend": "Sznupańy zaawansowane",
        "powersearch-ns": "Sznupej we przestrzyńach mjan:",
        "statistics": "Sztatystyka",
        "statistics-header-pages": "Statystyka zajtůw",
        "statistics-header-edits": "Statystyka sprowjyń",
-       "statistics-header-views": "Statystyka bezuchůw",
        "statistics-header-users": "Statystyka užytkowńikůw",
        "statistics-articles": "Zajty",
        "statistics-pages": "Zajty",
        "statistics-files": "Wćepane pliki",
        "statistics-edits": "Sprowjyńa wykůnane uod powstańo {{grammar:D.lp|{{SITENAME}}}}",
        "statistics-edits-average": "Strzedńo liczba sprowjyń na zajta",
-       "statistics-views-total": "Cołkowito liczba bezuchůw",
-       "statistics-views-peredit": "Liczba bezuchůw na sprowjyńy",
        "statistics-users": "Zarejerowanych [[Special:ListUsers|użytkowńikůw]]",
        "statistics-users-active": "Aktywnych użytkowńikůw",
        "statistics-users-active-desc": "Użytkowńiki, kere bůły aktywne bez {{PLURAL:$1|uostatńi dźyń|uostatńich $1 dńi}}",
-       "statistics-mostpopular": "Zajty we kere nojčyńśći sam filujom",
        "doubleredirects": "Podwůjne překierowańa",
        "doubleredirectstext": "Na tyi liśće mogům znojdować śe překerowańo pozorne. Uoznača to, aže půńižej pjyrwšej lińii artikla, zawjerajůncyj \"#REDIRECT ...\", može znojdować śe dodotkowy tekst. Koždy wjerš listy zawjero uodwouańo do pjyrwšygo i drůgygo překerowańo a pjyrwšom lińjům tekstu drůgygo překerowańo. Uůmožliwjo to na ogůu uodnaleźyńy wuaśćiwygo artikla, do kerygo powinno śe překerowywać.",
        "double-redirect-fixed-move": "zajta [[$1]] zostoła zastůmpjůno bez przekerowańy, skiż jeij przekludzyńo ku [[$2]]",
        "uncategorizedtemplates": "Mustry bez kategorii",
        "unusedcategories": "Ńyużywane kategoryje",
        "unusedimages": "Ńyużywane pliki",
-       "popularpages": "Zajty we kere nojczynśćij sam filujům",
        "wantedcategories": "Potrzebne katygoryje",
        "wantedpages": "Nojpotrzebńijsze zajty",
        "wantedfiles": "Potrzebne pliki",
        "suppress": "Oversight",
        "booksources": "Kśůnžki",
        "booksources-search-legend": "Sznupej za zdrzůdłůma kśůnżkowymi",
-       "booksources-go": "Pokoż",
        "booksources-text": "Půńiżyj je lista uodnośńikůw do inkszych witryn, kere pośredńiczům we sprzedaży nowych a używanych buchůw, a tyż můgům mjeć dolsze informacyje uo poszukiwanym bez ćebje buchu.",
        "booksources-invalid-isbn": "Podany numer ISBN zostoł rozpoznany kej felerny. Sprowdź aże podany numer je zgodny s numerym kery je we zdrzůdle.",
        "specialloguserlabel": "Užytkowńik:",
        "wlheader-enotif": "Wysůuańy powjadůmjyń na adres e-brif je zouůnčůne",
        "wlheader-showupdated": "Zajty, kere bouy sprowjane uod Twoi uostatńi wizyty na ńych zostoy naškryflane '''tuustym'''",
        "wlnote": "Půńižy pokazano {{PLURAL:$1|ostatńy sprawjyńy dokůnane|ostatńy '''$1''' sprawjyńe dokůnane|ostatńych '''$1''' sprawjyń dokůnanych}} bez {{PLURAL:$2|uostatńo godźina|uostatńich '''$2''' godźin}}.",
-       "wlshowlast": "Pokož uostatńy $1 godźin $2 dńi ($3)",
+       "wlshowlast": "Pokož uostatńy $1 godźin $2 dńi ()",
        "watchlist-options": "Uopcyje artikli na kere dowosz pozůr",
        "watching": "Dowom pozor...",
        "unwatching": "Njy dowom pozoru...",
        "import": "Importuj zajty",
        "importinterwiki": "Import transwiki",
        "import-interwiki-text": "Wybjer wiki i nmjano zajty do importowańo.\nDaty a tyž mjana autorůw bydům zachowane.\nWšyjstke uoperacyje importu transwiki sům uodnotowywane w [[Special:Log/import|rejeře importu]].",
-       "import-interwiki-source": "Zdrzůdło wiki/zajty:",
        "import-interwiki-history": "Kopjuj couko historja sprowjyń tyi zajty",
        "import-interwiki-submit": "Importuj",
        "import-interwiki-namespace": "Docelowo przestrzyń mjan:",
        "exif-gpsspeed-n": "wynzuůw",
        "exif-gpsdirection-t": "kerůnek geůgrafičny",
        "exif-gpsdirection-m": "kerůnek magnetyčny",
-       "watchlistall2": "do kupy",
        "namespacesall": "wszyjske",
        "monthsall": "wšyskie",
        "confirmemail": "Potwjerdź adres e-brif",
        "revdelete-restricted": "naštaluj uograničyńo do administratorůw",
        "revdelete-unrestricted": "wycofej uograničyńo do administratorůw",
        "rightsnone": "podstawowo",
+       "revdelete-summary": "uopis pomjyńań",
        "expand_templates_ok": "OK"
 }
index 051e05d..9c7d2b9 100644 (file)
        "userlogout": "விடுபதிகை",
        "notloggedin": "புகுபதிகை செய்யப்படவில்லை",
        "userlogin-noaccount": "பயனர் கணக்கு இல்லையா?",
-       "userlogin-joinproject": "இணைக {{SITENAME}}",
+       "userlogin-joinproject": "{{SITENAME}}-இல் இணைக",
        "nologin": "பயனர் கணக்கு இல்லையா? '''$1'''.",
        "nologinlink": "கணக்கு ஒன்றை உருவாக்கவும்",
        "createaccount": "புதிய கணக்கை உருவாக்கு",
        "passwordreset-emailsent-capture": "கீழே காண்பிக்கப்பட்டுள்ளது போல் கடவுச்சொல் மீட்டமைக்கும் மின்னஞ்சல் அனுப்பப்பட்டது.",
        "passwordreset-emailerror-capture": "கடவுச்சொல் மீட்டமைக்கும் மின்னஞ்சல்  உருவாக்கப்பட்டுவிட்டது, அது கீழே காட்டப்பட்டுள்ளது, ஆனால் பயனீட்டாளருக்கு அனுப்புவது தோல்வியடைந்தது:$1",
        "changeemail": "மின்னஞ்சல் முகவரியை மாற்று",
-       "changeemail-header": "கணக்கின் மின்னஞ்சல் முகவரியை மாற்று",
        "changeemail-text": "இந்த படிவத்தை உங்கள் மின்னஞ்சல் முகவரியை மாற்ற பூர்த்தி செய்யவும். நீங்கள் இந்த மாற்றத்தை உறுதிசெய்ய உங்கள் கடவுச்சொல்லை உள்ளிட வேண்டிவரும்.",
        "changeemail-no-info": "இப்பக்கத்தை நேரடியாக அணுகுவதற்கு நீங்கள் புகுபதிகை செய்திருக்கவேண்டும்.",
        "changeemail-oldemail": "தற்பொழுதுள்ள மின்னஞ்சல் முகவரி:",
        "changeemail-none": "(எதுவுமில்லை)",
        "changeemail-password": "உங்கள் {{SITENAME}} கடவுச்சொல்:",
        "changeemail-submit": "மின்னஞ்சலை மாற்று",
-       "changeemail-cancel": "விட்டுவிடு",
        "bold_sample": "தடித்த எழுத்துக்கள்",
        "bold_tip": "தடித்த எழுத்து",
        "italic_sample": "சாய்வெழுத்து",
        "mergehistory-same-destination": "மூலப் பக்கமும் முடிவிடப் பக்கமும் ஒன்றாக இருக்கமுடியாது",
        "mergehistory-reason": "காரணம்:",
        "mergelog": "இணைப்புப் பதிகை",
-       "pagemerge-logentry": "[[$1]] பக்கம் [[$2]] பக்கத்துடன் இணைக்கப்பட்டது ($3 வரையான திருத்தங்கள்)",
        "revertmerge": "பிரி",
        "mergelogpagetext": "பின்வருவது அண்மையில் செய்யப்பட்ட பக்க வரலாறு இணைப்புகளின் பட்டியலாகும்.",
        "history-title": "திருத்த வரலாறு - \"$1\"",
        "searchrelated": "தொடர்புடையவை",
        "searchall": "அனைத்தும்",
        "showingresults": "'''$2''' இலிருந்து தொடங்கும்  {{PLURAL:$1|'''1''' முடிவு கீழே காட்டப்பட்டுள்ளது|'''$1''' முடிவுகள் கீழே காட்டப்பட்டுள்ளன}}.",
-       "showingresultsheader": "'''$4''' இற்கான {{PLURAL:$5|முடிவு  '''$3''' இல் '''$1'''|முடிவுகள்'''$3''' இல்  '''$1 - $2''' }}",
        "search-nonefound": "உங்கள் வினவலுக்கான முடிவுகள் எதுவும் இல்லை.",
        "powersearch-legend": "மேம்பட்ட தேடல்",
        "powersearch-ns": "பெயர்வெளிகளில் தேடவும்",
        "statistics": "புள்ளிவிவரங்கள்",
        "statistics-header-pages": "பக்கங்களின் புள்ளிவிவரங்கள்",
        "statistics-header-edits": "தொகுப்புக்கள் பற்றிய புள்ளிவிவரங்கள்",
-       "statistics-header-views": "எத்தனைத்தடவை பார்க்கப்பட்டது எனபது பற்றிய புள்ளிவிவரங்கள்",
        "statistics-header-users": "பயனர் புள்ளி விபரங்கள்",
        "statistics-header-hooks": "மற்ற புள்ளிவிவரங்கள்",
        "statistics-articles": "உள்ளடக்கம் கொண்ட பக்கங்கள்",
        "statistics-files": "பதிவேற்றப்பட்டக் கோப்புகள்",
        "statistics-edits": "{{SITENAME}} அமைக்கப்பட்டதிலிருந்து பக்க திருத்தங்கள்",
        "statistics-edits-average": "ஒரு பக்கத்திற்கான சராசரி தொகுப்புக்கள்",
-       "statistics-views-total": "பார்வையிடப்பட்டதின் மொத்த எண்ணிக்கை",
-       "statistics-views-total-desc": "தற்பொழுது இல்லாத மற்றும் சிறப்பு பக்கங்களின் காட்சிகள் இதில் சேர்க்கபடவில்லை",
-       "statistics-views-peredit": "ஒரு தொகுத்தலுக்காக பார்க்கப்பட்ட எண்ணிக்கை",
        "statistics-users": "பதிவு செய்யப்பட்ட [[Special:ListUsers|பயனர்கள்]]",
        "statistics-users-active": "தொடர் பங்களிப்பாளர்கள் (பயனர்கள்)",
        "statistics-users-active-desc": "கடந்த {{PLURAL:$1|நாள்|$1 நாட்களில்}} ஒன்று அல்லது அதற்கு மேற்பட்ட செயலைச் செய்த பயனர்கள்",
-       "statistics-mostpopular": "அதிகம் பார்க்கப்பட்ட பக்கங்கள்",
        "pageswithprop": "பக்கப் பண்புடைய பக்கங்கள்",
        "pageswithprop-submit": "செல்க",
        "doubleredirects": "இரட்டை வழிமாற்றுகள்",
        "uncategorizedtemplates": "வகைப்படுத்தப்படாத வார்ப்புருக்கள்",
        "unusedcategories": "பயன்படுத்தப்படாத பகுப்புகள்",
        "unusedimages": "பயன்படுத்தப்படாத படிமங்கள்",
-       "popularpages": "அடிக்கடி பார்க்கப்படும் பக்கங்கள்",
        "wantedcategories": "வேண்டிய பகுப்புகள்",
        "wantedpages": "வேண்டிய பக்கங்கள்",
        "wantedpages-badtitle": "முடிவு குழு :$1 லில் உள்ள செல்லாத தலைப்பு",
        "querypage-disabled": "செயல்பாட்டு காரணங்களுக்காக இந்த சிறப்புப் பக்கம் முடக்கப்பட்டுள்ளது.",
        "booksources": "நூல் மூலங்கள்",
        "booksources-search-legend": "நூல் மூலங்களைத் தேடு",
-       "booksources-go": "செல்",
+       "booksources-search": "தேடுக",
        "booksources-text": "நீங்கள் தேடும் நூல்களின் புதிய, பயன்படுத்தியப் பிரதிகளை விற்பனை செய்யும் இணையத்தளங்களின் பட்டியல் கீழே காட்டப்பட்டுள்ளது. நூல்கள் பற்றிய மேலதிகத் தகவல்களை இத்தளங்கள் கொண்டிருக்கலாம்:",
        "booksources-invalid-isbn": "கொடுக்கப்பட்ட ISBN செல்லத்தக்கதாக தெரியவில்லை ; மூலத்திலிருந்து நகலெடுத்ததில் உள்ள  பிழைகளை சரிபார்.",
        "specialloguserlabel": "செயல்படுபவர்:",
        "wlheader-enotif": "மின்னஞ்சல் அறிவிப்புகள் செயல்படுத்தப்பட்டுள்ளன.",
        "wlheader-showupdated": "உங்கள் கடைசி வருகைக்குப் பின்னர் மாற்றங்கள் செய்யப்பட்ட பக்கங்கள் '''தடித்த எழுத்துக்களில்''' காட்டப்பட்டுள்ளன",
        "wlnote": "பின்வருவன கடைசி {{PLURAL:$2|மணித்தியாலத்தில்|'''$2''' மணித்தியாலங்களில்}} செய்யப்பட்ட {{PLURAL:$1|கடைசி ஒரு மாற்றமாகும்|கடைசி $1 மாற்றங்களாகும்}}.",
-       "wlshowlast": "கடைசி $1 மணித்தியாலங்கள் $2 நாட்களைக் காட்டு $3",
+       "wlshowlast": "கடைசி $1 மணித்தியாலங்கள் $2 நாட்களைக் காட்டு",
        "watchlist-options": "கவனிப்பு பட்டியலின் விருப்பத் தேர்வுகள்",
        "watching": "கவனிக்கப்படுகிறது...",
        "unwatching": "கவனிப்பு விடப்படுகிறது...",
        "tooltip-feed-atom": "இப்பக்கத்துக்கான அடொம் ஓடை கிடையாது",
        "tooltip-t-contributions": "இப்பயனரின்  பங்களிப்புக்களின் பட்டியலைப் பார்",
        "tooltip-t-emailuser": "இப் பயனருக்கு மின்னஞ்சல் செய்",
+       "tooltip-t-info": "இப்பக்கத்தைப்பற்றி மேலதிக விபரம்",
        "tooltip-t-upload": "கோப்புகளைப் பதிவேற்றுக",
        "tooltip-t-specialpages": "அனைத்துச் சிறப்புப் பக்கங்களின் பட்டியல்",
        "tooltip-t-print": "இப்பக்கத்தின் அச்சுக்குகந்தப் பதிப்பு",
        "pageinfo-robot-policy": "தானியங்கி மூலம் அட்டவணைப்படுத்தல்",
        "pageinfo-robot-index": "அனுமதிக்கப்படுகிறது",
        "pageinfo-robot-noindex": "அனுமதிக்கப்படாதது",
-       "pageinfo-views": "காட்சிகள் எண்ணிக்கை",
        "pageinfo-watchers": "பக்கப் பார்வையாளர்கள் எண்ணிக்கை",
        "pageinfo-few-watchers": "விட குறைவானது $1 {{PLURAL:$1|watcher|watchers}}",
        "pageinfo-redirects-name": "இந்தப் பக்கத்திற்கான வழிமாற்றுகளின் எண்ணிக்கை",
        "exif-urgency-low": "குறைந்த ($1)",
        "exif-urgency-high": "அதிகம் ($1)",
        "exif-urgency-other": "பயனர் அறுதியிட்ட முன்னுரிமை ( $1 )",
-       "watchlistall2": "அனைத்து",
        "namespacesall": "அனைத்து",
        "monthsall": "அனைத்து மாதங்களும்",
        "confirmemail": "மின்னஞ்சல் முகவரியை உறுதிப்படுத்துக",
        "logentry-newusers-newusers": "பயனர் கணக்கு $1 உருவாக்கப்பட்டது",
        "logentry-newusers-create": "$1 ஒரு புதிய பயனர் கணக்கை உருவாக்கியுள்ளார்.",
        "logentry-newusers-create2": "$3 பயனர் கணக்கினை $1 உருவாக்கினார்",
-       "logentry-newusers-autocreate": "பயணர் கணக்கு $1 தானாக உருவாக்கப்பட்டது",
+       "logentry-newusers-autocreate": "பயனர் கணக்கு $1 தானாக உருவாக்கப்பட்டது",
        "rightsnone": "(எதுவுமில்லை)",
+       "revdelete-summary": "தொகுப்பு சுருக்கத்தை",
        "feedback-bugornote": "நீங்கள் ஒரு தொழில்நுட்பக் கோளாறு குறித்து விரிவாக விளக்க தாயாராக இருந்தால் தயவுசெய்து [ $1  ஒரு bug பற்றி கூறு].\nஇல்லையெனில், நீங்கள் கீழேயுள்ள எளிதான படிவத்தை பயன்படுத்தலாம்.உங்கள் கருத்துரை \"[$3 $2]\" பக்கத்தில் உங்கள் பயனர் பெயர் மற்றும் உங்கள் உலாவியின் பெயருடன் சேர்க்கப்படும்.",
        "feedback-subject": "பொருள்:",
        "feedback-message": "தகவல்:",
        "expand_templates_output": "முடிவுகள்",
        "expand_templates_ok": "ஆம்",
        "expand_templates_remove_comments": "கருத்துரைகளை நீக்கு",
-       "expand_templates_preview": "முன்தோற்றம்"
+       "expand_templates_preview": "முன்தோற்றம்",
+       "mediastatistics-header-unknown": "அறியப்படாதது",
+       "mediastatistics-header-video": "காணொளிகள்"
 }
index 4b6eb59..f070329 100644 (file)
        "passwordreset-username": "ಸದಸ್ಯೆರ್ನ ಪುದರ್:",
        "passwordreset-email": "ಇ-ಅಂಚೆ ವಿಳಾಸೊ",
        "changeemail-submit": "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾವಣೆ ಮಲ್ಪುಲೆ",
-       "changeemail-cancel": "ವಜಾ ಮಲ್ಪುಲೆ",
        "bold_sample": "ದಪ್ಪ ಅಕ್ಷರ",
        "bold_tip": "ದಪ್ಪ ಅಕ್ಷರೊಲು",
        "italic_sample": "ಓರೆ ಅಕ್ಷರೊಲು",
        "pager-older-n": "{{PLURAL:$1|ಪರತ್ತ್ ೧|ಪರತ್ತ್ $1}}",
        "booksources": "ಪುಸ್ತಕೊಲ್ದ ಮೂಲ",
        "booksources-search-legend": "ಪುಸ್ತಕೊದ ಮೂಲೊನು ನಾಡ್ಲ",
-       "booksources-go": "ಪೋ",
        "log": "ದಾಖಲೆಲು",
        "allpages": "ಪೂರಾ ಪೂಟೊಲು",
        "allpagesfrom": "ಇಂದೆರ್ದ್ ಶುರುವಾಪುನ ಪುಟೊಲೆನ್ ತೊಜ್ಪಾವು:",
        "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",
-       "watchlistall2": "ಪೂರ",
        "namespacesall": "ಪೂರಾ",
        "monthsall": "ಪೂರಾ",
        "watchlisttools-view": "ಪ್ರಸ್ತುತ ಬದಲಾವಣೆಲ್ ತೋಜಾಲೆ",
index 35f166b..14ebeaf 100644 (file)
        "passwordreset-emailsent-capture": "క్రింద చూపిన సంకేతపదం మార్పు ఈమెయిలును పంపించాం.",
        "passwordreset-emailerror-capture": "కింద చూపిన సంకేతపదం మార్పు ఈమెయిలును తయారుచేసాం. కానీ దాన్ని {{GENDER:$2|వాడుకరికి}} పంపడం విఫలమైంది: $1",
        "changeemail": "ఈ-మెయిలు చిరునామా మార్పు",
-       "changeemail-header": "ఖాతా ఈ-మెయిల్ చిరునామాని మార్చండి",
        "changeemail-text": "మీ ఈమెయిలు చిరునామాని మార్చుకోడానికి ఈ ఫారాన్ని నింపండి. ఈ మార్పుని నిర్ధారించడానికి మీ సంకేతపదాన్ని ఇవ్వాల్సివస్తుంది.",
        "changeemail-no-info": "ఈ పేజీని నేరుగా చూడటానికి మీరు లాగినయి వుండాలి.",
        "changeemail-oldemail": "ప్రస్తుత ఈ-మెయిలు చిరునామా:",
        "changeemail-none": "(ఏమీలేదు)",
        "changeemail-password": "మీ {{SITENAME}} సంకేతపదం:",
        "changeemail-submit": "ఈ-మెయిల్ మార్చు",
-       "changeemail-cancel": "రద్దుచేయి",
        "changeemail-throttled": "మరీ ఎక్కువగా లాగిన్ ప్రయత్నాలు చేసారు.\nమళ్ళీ ప్రయత్నించే ముందు $1 ఆగండి.",
        "resettokens": "టోకెన్ ను రీసెట్ చెయ్యి",
        "resettokens-text": "మీ ఖాతాకు అనుబంధంగా ఉన్న గోపనీయ డేటాను చూపించే టోకెన్లను మీరు ఇక్కడ రీసెట్ చెయ్యవచ్చు.\n\nమీరా టోకెన్లను పొరపాటున ఎవరికైనా ఇచ్చి ఉన్నా, లేక మీ ఖాతా వివరాలు మరెవరికైనా తెలిసిపోయినా మీరీ పని చెయ్యాలి.",
        "mergehistory-same-destination": "మూల మరియు గమ్యస్థాన పేజీలు ఒకటే కాకూడదు",
        "mergehistory-reason": "కారణం:",
        "mergelog": "విలీనాల చిట్టా",
-       "pagemerge-logentry": "[[$1]] ను [[$2]] లోకి విలీనం చేసాం ($3 కూర్పు దాకా)",
        "revertmerge": "విలీనాన్ని రద్దుచెయ్యి",
        "mergelogpagetext": "ఒక పేజీ చరితాన్ని మరో పేజీ చరితం లోకి ఇటీవల చేసిన విలీనాల జాబితా ఇది.",
        "history-title": "\"$1\" యొక్క కూర్పుల చరిత్ర",
        "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> ఫలితాల}} వరకు కింద చూపించాం.",
-       "showingresultsheader": "<strong>$4</strong> కోసం వచ్చిన ఫలితాలు {{PLURAL:$5|<strong>$3</strong> లో <strong>$1</strong>|</strong>$3</strong> లో <strong>$1 - $2</strong>}}",
        "search-nonefound": "మీ ప్రశ్నకి సరిపోలిన ఫలితాలేమీ లేవు.",
        "powersearch-legend": "నిశితమైన అన్వేషణ",
        "powersearch-ns": "ఈ పేరుబరుల్లో వెతుకు:",
        "statistics": "గణాంకాలు",
        "statistics-header-pages": "పేజీ గణాంకాలు",
        "statistics-header-edits": "మార్పుల గణాంకాలు",
-       "statistics-header-views": "వీక్షణల గణాంకాలు",
        "statistics-header-users": "వాడుకరులు",
        "statistics-header-hooks": "ఇతర గణాంకాలు",
        "statistics-articles": "విషయపు పేజీలు",
        "statistics-files": "ఎక్కించిన దస్త్రాలు",
        "statistics-edits": "{{SITENAME}}ని మొదలుపెట్టినప్పటినుండి జరిగిన మార్పులు",
        "statistics-edits-average": "పేజీకి సగటు మార్పులు",
-       "statistics-views-total": "మొత్తం వీక్షణలు",
-       "statistics-views-total-desc": "ఉనికిలో లేని పుటలకు మరియు ప్రత్యేక పుటలకు వచ్చిన సందర్శనలని కలుపలేదు",
-       "statistics-views-peredit": "ఒక మార్పుకి వీక్షణలు",
        "statistics-users": "నమోదైన [[Special:ListUsers|వాడుకరులు]]",
        "statistics-users-active": "క్రియాశీల వాడుకరులు",
        "statistics-users-active-desc": "గత {{PLURAL:$1|రోజు|$1 రోజుల}}లో పని చేసిన వాడుకరులు",
-       "statistics-mostpopular": "ఎక్కువగా చూసిన పేజీలు",
        "pageswithprop": "ఒక పేజీ లక్షణం కలిగిన పేజీలు",
        "pageswithprop-legend": "ఒక పేజీ లక్షణం కలిగిన పేజీలు",
        "pageswithprop-text": "ఫలానా పేజీ లక్షణం కలిగిన పేజీల జాబితాను ఈ పేజీలో చూడవచ్చు.",
        "uncategorizedtemplates": "వర్గీకరించని మూసలు",
        "unusedcategories": "ఉపయోగించని వర్గాలు",
        "unusedimages": "ఉపయోగించని ఫైళ్ళు",
-       "popularpages": "ప్రజాదరణ పొందిన పేజీలు",
        "wantedcategories": "కోరిన వర్గాలు",
        "wantedpages": "కోరిన పేజీలు",
        "wantedpages-badtitle": "ఫలితాల సమితిలో తప్పుడు శీర్షిక: $1",
        "querypage-disabled": "పనితీరు కారణాల వలన, ఈ ప్రత్యేకపేజీని అశక్తం చేసాం.",
        "booksources": "పుస్తక మూలాలు",
        "booksources-search-legend": "పుస్తక మూలాల కోసం వెతుకు",
-       "booksources-go": "వెళ్ళు",
        "booksources-text": "కొత్త, పాత పుస్తకాలు అమ్మే ఇతర సైట్లకు లింకులు కింద ఇచ్చాం. మీరు వెతికే పుస్తకాలకు సంబంధించిన మరింత సమాచారం కూడా అక్కడ దొరకొచ్చు:",
        "booksources-invalid-isbn": "మీరిచ్చిన ISBN సరైనదిగా అనిపించుటలేదు; అసలు మూలాన్నుండి కాపీ చేయడంలో పొరపాట్లున్నాయేమో చూసుకోండి.",
        "specialloguserlabel": "కర్త:",
        "wlheader-enotif": "ఈ-మెయిలు గమనికలు పంపబడతాయి.",
        "wlheader-showupdated": "మీ గత సందర్శన తరువాత మారిన పేజీలు <strong>బొద్దు</strong>గా చూపించబడ్డాయి.",
        "wlnote": "$3 నాడు $4 సమయానికి, గడచిన {{PLURAL:$2|గంటలో|'''$2''' గంటలలో}} జరిగిన {{PLURAL:$1|ఒక్క మార్పు కింద ఉంది|'''$1''' మార్పులు కింద ఉన్నాయి}}.",
-       "wlshowlast": "గత $1 గంటల $2 రోజుల $3 చూపించు",
+       "wlshowlast": "గత $1 గంటల $2 రోజుల  చూపించు",
        "watchlist-options": "వీక్షణ జాబితా ఎంపికలు",
        "watching": "గమనిస్తున్నారు...",
        "unwatching": "గమనించడం లేదు...",
        "pageinfo-robot-policy": "రోబోట్లచే ఇండెక్సవుతోంది",
        "pageinfo-robot-index": "అనుమతించబడింది",
        "pageinfo-robot-noindex": "అనుమతించబడలేదు",
-       "pageinfo-views": "వీక్షణల సంఖ్య",
        "pageinfo-watchers": "పేజీ వీక్షకుల సంఖ్య",
        "pageinfo-few-watchers": "$1 {{PLURAL:$1|వీక్షకుడి|వీక్షకుల}} కంటే తక్కువ",
        "pageinfo-redirects-name": "ఈ పేజీకి ఉన్న దారిమార్పుల సంఖ్య",
        "exif-urgency-low": "తక్కువ ($1)",
        "exif-urgency-high": "ఎక్కువ ($1)",
        "exif-urgency-other": "వాడుకరి-నిర్వచిత ప్రాథాన్యత ($1)",
-       "watchlistall2": "అన్నీ",
        "namespacesall": "అన్నీ",
        "monthsall": "అన్నీ",
        "confirmemail": "ఈ-మెయిలు చిరునామా ధృవీకరించండి",
        "logentry-rights-rights-legacy": "$1, $3 యొక్క గుంపు సభ్యత్వాన్ని {{GENDER:$2|మార్చారు}}",
        "logentry-rights-autopromote": "$1, $4 నుండి $5 కు ఆటోమేటిగ్గా {{GENDER:$2|ప్రమోటు చెయ్యబడ్డారు}}",
        "rightsnone": "(ఏమీలేవు)",
+       "revdelete-summary": "మార్పు సంగ్రహం",
        "feedback-bugornote": "ఏదైనా సాంకేతిక సమస్యను మీరు వివరించదలిస్తే [$1 లోపంపై ఫిర్యాదు చెయ్యండి].\nలేదంటే, కింద ఉన్న సులువైన ఫారాన్ని వాడండి. మీ వ్యాఖ్య మీ వాడుకరిపేరుతో సహా  \"[$3 $2]\" పేజీలో చేర్చబడుతుంది.",
        "feedback-subject": "విషయం:",
        "feedback-message": "సందేశం:",
index 3c840fd..e60a27d 100644 (file)
        "historyempty": "(mamuk)",
        "history-feed-item-nocomment": "$1 iha $2",
        "rev-delundel": "hatudu/subar",
+       "rev-showdeleted": "hatudu",
        "revisiondelete": "Halakon/restaurar versaun",
        "revdelete-show-file-submit": "Sin",
-       "revdelete-hide-user": "Subar naran edita-na'in/IP",
+       "revdelete-hide-text": "Testu versaun nian",
+       "revdelete-hide-user": "Naran edita-na'in/diresaun IP",
        "revdelete-radio-set": "Sin",
        "revdelete-radio-unset": "Lae",
        "revdelete-edit-reasonlist": "Edita lista motivu nian",
        "recentchanges-label-minor": "Ne'e mudansa ki'ik",
        "recentchanges-label-bot": "Edita husi prosesu automátiku (\"bot\")",
        "rcshowhideminor": "$1 muda ki-ki'ik",
+       "rcshowhideminor-show": "Hatudu",
        "rcshowhidebots": "$1 bot sira",
+       "rcshowhidebots-show": "Hatudu",
        "rcshowhideliu": "$1 ema rejista",
+       "rcshowhideliu-show": "Hatudu",
        "rcshowhideanons": "$1 ema anónimu",
+       "rcshowhideanons-show": "Hatudu",
+       "rcshowhideanons-hide": "Subar",
+       "rcshowhidepatr-show": "Hatudu",
        "rcshowhidemine": "$1 ha'u-nia edita",
+       "rcshowhidemine-show": "Hatudu",
        "diff": "diferensa",
        "hist": "istória",
        "hide": "Hamsumik",
        "ancientpages": "Pájina tuan liu hotu sira",
        "move": "Book",
        "movethispage": "Book pájina ne'e",
-       "booksources-go": "Bá",
        "specialloguserlabel": "Uza-na'in ne'ebé halo:",
        "speciallogtitlelabel": "Objetivu (títulu ka uza-na'in):",
        "allpages": "Pájina hotu",
        "watchthispage": "Hateke pájina ne'e",
        "unwatch": "La hateke ona",
        "watchlist-details": "{{PLURAL:$1|Pájina ida (1)|Pájina $1}} iha Ita-nia \"lista hateke\" (la ho pájina diskusaun).",
-       "wlshowlast": "Hatudu $1 hora $2 loron ikus $3",
+       "wlshowlast": "Hatudu $1 hora $2 loron ikus",
        "watching": "Hateke...",
        "unwatching": "La hateke...",
        "enotif_impersonal_salutation": "Uza-na'in {{SITENAME}} nian",
        "exif-urgency-normal": "Normál ($1)",
        "exif-urgency-low": "Kraik ($1)",
        "exif-urgency-high": "Aas ($1)",
-       "watchlistall2": "hotu",
        "namespacesall": "hotu",
        "monthsall": "hotu",
        "confirm_purge_button": "OK",
index 20e7d0e..22b84d5 100644 (file)
        "otherlanguages": "Бо забонҳои дигар",
        "redirectedfrom": "(Тағйири масир аз $1)",
        "redirectpagesub": "Саҳифаи равонакунӣ",
+       "redirectto": "Тағйири масир ба:",
        "lastmodifiedat": "Ин саҳифа бори охир $2, $1 дигаргун карда шудааст.",
        "viewcount": "Ин саҳифа {{PLURAL:$1|бор|$1 бор}} дида шудааст.",
        "protectedpage": "Саҳифаи муҳофизатшуда",
        "jumptonavigation": "гаштан",
        "jumptosearch": "Ҷустуҷӯ",
        "view-pool-error": "Мутаасифона, корсозҳои дар ҳоли ҳозир дучори бори изофӣ ҳастанд.\nТеъдоди зиёди аз корбарон талош мекунанд, ки ин саҳифаро бубинанд.\nЛутфан қабл аз талош дубора барои дидани ин саҳифа муддате сабр кунед.\n\n$1",
+       "generic-pool-error": "Мутаасифона, корсозҳои дар ҳоли ҳозир дучори бори изофӣ ҳастанд.\nТеъдоди зиёди аз корбарон талош мекунанд, ки ин саҳифаро бубинанд.\nЛутфан қабл аз талош дубора барои дидани ин саҳифа муддате сабр кунед.",
+       "pool-timeout": "Замони мунтазирӣ барои қуфл",
+       "pool-queuefull": "Қатори ҳафза пур аст",
        "pool-errorunknown": "Хатогии ношинос",
+       "pool-servererror": "Хидмати ҳисобкунаки ҳафз дастрас нест ($1).",
        "aboutsite": "Дар бораи {{SITENAME}}",
        "aboutpage": "Project:Дар бораи",
        "copyright": "Мӯҳтаво таҳти иҷозатномаи $1 ва ё дигар дастрас аст.",
        "createacct-yourpasswordagain": "Тасдиқи гузарвожа",
        "createacct-yourpasswordagain-ph": "Гузарвожаро бори дигар ворид кунед",
        "remembermypassword": "Вуруди манро дар ин мурургар дар хотир нигоҳ дор (то ҳадди аксар $1 {{PLURAL:$1|рӯз|рӯз}})",
-       "userlogin-remembermypassword": "Вурудшударо манро нигоҳ дор",
+       "userlogin-remembermypassword": "Вурудшуда манро нигоҳ дор",
        "userlogin-signwithsecure": "Истифодаи пайвастшавии амн",
        "yourdomainname": "Домейни Шумо",
        "password-change-forbidden": "Шумо гузарвожаро дар ин вики тағийр дода наметавонед.",
        "changeemail-none": "(ҳеҷ)",
        "changeemail-password": "Гузарвожаи Шумо дар {{SITENAME}}:",
        "changeemail-submit": "Ивази email",
-       "changeemail-cancel": "Лағв",
        "resettokens-no-tokens": "Ягон нишона барои танзими муҷадад вуҷуд надорад.",
        "resettokens-legend": "Танзими муҷадади нишона",
        "resettokens-tokens": "Нишонаҳо:",
        "preview": "Пешнамоиш",
        "showpreview": "Пеш намоиш",
        "showdiff": "Намоиши тағйирот",
-       "anoneditwarning": "'''Ð\9eгоҳӣ:''' Ð¨Ñ\83мо Ð²Ñ\83Ñ\80Ñ\83д Ð½Ð°ÐºÐ°Ñ\80даед. Ð¡Ñ\83Ñ\80оÒ\93аи IP Ð¨Ñ\83мо Ð´Ð°Ñ\80 Ð²Ð¸Ñ\80оиÑ\88оÑ\82и Ð¸Ð½ Ñ\81аҳиÑ\84а Ñ\81абÑ\82 хоҳад шуд.",
+       "anoneditwarning": "'''Ð\9eгоҳӣ:''' Ð¨Ñ\83мо Ð²Ñ\83Ñ\80Ñ\83д Ð½Ð°ÐºÐ°Ñ\80даед. Ð\90гаÑ\80 Ñ\8fгон Ð²Ð¸Ñ\80оиÑ\88и ÐºÑ\83нед Ð½Ð¸Ñ\88онаи IP Ð¨Ñ\83мо Ð±Ð° Ò³Ð°Ð¼Ð° Ð½Ð°Ð¼Ð¾Ñ\91н Ñ\85оҳад Ð±Ñ\83д. Ð\90гаÑ\80 Ð¨Ñ\83мо <strong>[$1 Ð²Ð¾Ñ\80ид Ñ\88авед]</strong> Ñ\91 <strong>[$2 Ò³Ð¸Ñ\81обеÑ\80о Ñ\8dҷод ÐºÑ\83нед]</strong>, Ð²Ð¸Ñ\80оиÑ\88оÑ\82и Ð¨Ñ\83мо Ð±Ð° Ð½Ð¾Ð¼Ð¸ ÐºÐ¾Ñ\80баÑ\80иаÑ\82он Ò³Ð°Ð¼Ñ\80оҳ Ð±Ð¾ Ð´Ð¸Ð³Ð°Ñ\80 Ð±Ð°Ñ\80Ñ\82аÑ\80иҳо Ð¼Ñ\83Ñ\82алиÒ\9b хоҳад шуд.",
        "anonpreviewwarning": "<em>Шумо вориди нашудаед. Захиракунӣ IP нишонаи шуморо дар таърихи вироиши ин саҳифа захира хоҳад кард.</em>",
        "missingsummary": "'''Ёдоварӣ:''' Шумо хулосаи вироиш нанавиштаед.\nАгар дубора тугмаи \"Захира\"-ро клик кунед, вироишатон бидуни хулоса захира хоҳад шуд.",
        "missingcommenttext": "Лутфан тавсифе дар зер бинависед.",
        "currentrev": "Вироишоти кунунӣ",
        "currentrev-asof": "Нусхаи кунунӣ то $1",
        "revisionasof": "Нусха $1",
-       "revision-info": "Нусхаи вироиш $2 дар таърихи $1",
+       "revision-info": "Нусхаи вироиш аз $1 тавассути {{GENDER:$6|$2}}$7",
        "previousrevision": "←Нусхаи кӯҳнатар",
        "nextrevision": "Нусхаи навтарин→",
        "currentrevisionlink": "Намоиши нусхаи феълӣ",
        "mergehistory-comment": "[[:$1]] ба [[:$2]] идғом шуд: $3",
        "mergehistory-reason": "Сабаб:",
        "mergelog": "Гузориши идғом",
-       "pagemerge-logentry": "идгом шуд [[$1]] дар [[$2]] (нусхаҳо то $3)",
        "revertmerge": "Вогардонии идғом",
        "mergelogpagetext": "Дар зер феҳристи идғоми охирини таърихи як саҳифаро ба дигар саҳифаро мебинед.",
        "history-title": "Таърихчаи вироишҳои \"$1\"",
        "searchrelated": "алоқаманд",
        "searchall": "ҳама",
        "showingresults": "Намоиши {{PLURAL:$1|'''1''' натиҷа|'''$1''' натоиҷ}} дар зер оғоз аз #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Натиҷаи <strong>$1</strong> <strong>$3</strong>|Натоиҷи <strong>$1 - $2</strong> <strong>$3</strong>}} барои <strong>$4</strong>",
        "search-nonefound": "Натиҷаи муносиб бо дархост пайдо нашуд.",
        "powersearch-legend": "Ҷустуҷӯи пешрафта",
        "powersearch-ns": "Ҷустуҷӯ дар фазоҳои ном:",
        "randompage": "Саҳифаи тасодуфӣ",
        "randompage-nopages": "Ҳеҷ саҳифае дар ин фазои ном мавҷуд нест.",
        "randomincategory": "Саҳифаи тасодуфӣ дар гурӯҳ",
-       "randomincategory-selectcategory-submit": "Бирав",
        "randomredirect": "Масири тасодуфӣ",
        "randomredirect-nopages": "Ҳеҷ саҳифаи тағйири масире дар ин фазои ном мавҷуд нест.",
        "statistics": "Омор\\Статистика",
        "statistics-header-pages": "Саҳифаи омор",
        "statistics-header-edits": "Вироиши омор",
-       "statistics-header-views": "Дидани омор",
        "statistics-header-users": "Омори корбарон",
        "statistics-header-hooks": "Дигар омор",
        "statistics-articles": "Саҳифаҳои мӯҳтаво",
        "statistics-pages": "Саҳифаҳо",
        "statistics-files": "Парвандаҳои боршуда",
-       "statistics-views-total": "Маҷмуаъи боздидҳо",
        "statistics-users": "[[Special:ListUsers|Корбарони]] сабтиномшуда",
        "statistics-users-active": "Корбарони фаъол",
-       "statistics-mostpopular": "Саҳифаҳои бисёр назаркардашуда",
        "pageswithprop-submit": "Бирав",
        "doubleredirects": "Тағйири масирҳои дутоӣ",
        "doubleredirectstext": "Ҳар сатр дар бар дорандаи пайвандҳое ба тағйири масири аввал ва дувум ва ҳамчунин хати нахуст тагйири масири дувум аст. Маъмулан саҳифаи мақсади воқеъӣ, ки нахустин тағйири масир бояд ба он бошад ба ин гуна мушаххас мешавад.",
        "uncategorizedtemplates": "Шаблонҳое, ки ба ягон гурӯҳ дохил нестанд",
        "unusedcategories": "Гурӯҳҳои истифоданашуда",
        "unusedimages": "Файлҳои истифоданашуда",
-       "popularpages": "Саҳифаҳои машҳур",
        "wantedcategories": "Гурӯҳҳои дархостӣ",
        "wantedpages": "Саҳифаҳои дархостӣ",
        "wantedfiles": "Парвандаҳои дархостӣ",
        "suppress": "Назорат",
        "booksources": "Манбаҳои китобҳо",
        "booksources-search-legend": "Ҷустуҷӯи сарчашмаҳои китоб",
-       "booksources-go": "Бирав",
        "booksources-text": "Дер зер феҳристи пайвандҳо ба сомонаҳое, ки китобҳои нав ва кӯҳна мефурӯшанд, оварда шудааст. Мумкин аст, иттилооти бештарро дар бораи китобҳои ҷустуҷӯ кардаатон дошта бошанд:",
        "specialloguserlabel": "Иҷрокунанда:",
        "speciallogtitlelabel": "Ҳадаф (унвон ё корбар):",
        "wlheader-enotif": "Иттилоорасонии тариқи почтаи электронӣ (E-mail) фаъол шудааст.",
        "wlheader-showupdated": "Саҳифаҳое, ки пас аз охирин сар заданатон ба онҳо тағйир кардаанд '''пурранг''' нишон дода шудаанд",
        "wlnote": "Дар зер {{PLURAL:$1|охирин тағйир|'''$1''' охирин тағйирот}} дар $2 соати охир {{PLURAL:омадааст|омадаанд}}.",
-       "wlshowlast": "Намоиши охирин $1 соат $2 рӯзҳо $3",
+       "wlshowlast": "Намоиши охирин $1 соат $2 рӯзҳо",
        "watchlist-options": "Ихтиёроти феҳристи пайгириҳо",
        "watching": "Пайгири...",
        "unwatching": "Тавқифи пайгири...",
        "exif-iimcategory-pol": "Сиёсат",
        "exif-iimcategory-rel": "Дин ва ибодат",
        "exif-iimcategory-spo": "Варзиш",
-       "watchlistall2": "ҳама",
        "namespacesall": "ҳама",
        "monthsall": "ҳама",
        "confirmemail": "Тасдиқи нишонаи почтаи электронӣ",
        "revdelete-restricted": "маҳдудиятҳо ба мудирон амалӣ шуданд",
        "revdelete-unrestricted": "маҳдудиятҳо аз мудирон бардошта шуданд",
        "rightsnone": "(ҳеҷ)",
+       "revdelete-summary": "вироиши хулоса",
        "feedback-subject": "Мавзӯъ:",
        "feedback-message": "Пайём:",
        "feedback-cancel": "Лағв",
index ec2df52..76ef9bd 100644 (file)
        "mergehistory-comment": "[[:$1]] ba [[:$2]] idƣom şud: $3",
        "mergehistory-reason": "Sabab:",
        "mergelog": "Guzorişi idƣom",
-       "pagemerge-logentry": "idgom şud [[$1]] dar [[$2]] (nusxaho to $3)",
        "revertmerge": "Vogardoniji idƣom",
        "mergelogpagetext": "Dar zer fehristi idƣomi oxirini ta'rixi jak sahifaro ba digar sahifaro mebined.",
        "history-title": "Ta'rixcai viroişhoi \"$1\"",
        "statistics": "Omor\\Statistika",
        "statistics-header-pages": "Sahifai omor",
        "statistics-header-edits": "Viroişi omor",
-       "statistics-header-views": "Didani omor",
        "statistics-header-users": "Omori korbaron",
        "statistics-articles": "Sahifahoi mūhtavo",
        "statistics-pages": "Sahifaho",
        "statistics-files": "Parvandahoi borşuda",
        "statistics-users": "[[Special:ListUsers|Korbaroni]] sabtinomşuda",
        "statistics-users-active": "Korbaroni fa'ol",
-       "statistics-mostpopular": "Sahifahoi bisjor nazarkardaşuda",
        "doubleredirects": "Taƣjiri masirhoi dutoī",
        "double-redirect-fixer": "Ta'mirkori taƣjirmasirho",
        "brokenredirects": "Sahifahoi kandaşudai ravonakunī",
        "uncategorizedtemplates": "Şablonhoe, ki ba jagon gurūh doxil nestand",
        "unusedcategories": "Gurūhhoi istifodanaşuda",
        "unusedimages": "Fajlhoi istifodanaşuda",
-       "popularpages": "Sahifahoi maşhur",
        "wantedcategories": "Gurūhhoi darxostī",
        "wantedpages": "Sahifahoi darxostī",
        "wantedfiles": "Parvandahoi darxostī",
        "suppress": "Nazorat",
        "booksources": "Manbahoi kitobho",
        "booksources-search-legend": "Çustuçūi sarcaşmahoi kitob",
-       "booksources-go": "Birav",
        "booksources-text": "Der zer fehristi pajvandho ba somonahoe, ki kitobhoi nav va kūhna mefurūşand, ovarda şudaast. Mumkin ast, ittilooti beştarro dar borai kitobhoi çustuçū kardaaton doşta boşand:",
        "specialloguserlabel": "Korbar:",
        "speciallogtitlelabel": "Sarlavha:",
        "wlheader-enotif": "Ittiloorasoniji tariqi poctai elektronī (E-mail) imkonpazir ast.",
        "wlheader-showupdated": "Sahifahoe, ki pas az oxirin sar zadanaton ba onho taƣjir kardaand '''purrang''' nişon doda şudaand",
        "wlnote": "Dar zer {{PLURAL:$1|oxirin taƣjir|'''$1''' oxirin taƣjirot}} dar $2 soati oxir {{PLURAL:omadaast|omadaand}}.",
-       "wlshowlast": "Namoişi oxirin $1 soat $2 rūzho $3",
+       "wlshowlast": "Namoişi oxirin $1 soat $2 rūzho",
        "watchlist-options": "Ixtijoroti fehristi pajgiriho",
        "watching": "Pajgiri...",
        "unwatching": "Tavqifi pajgiri...",
        "exif-gpsspeed-n": "Gireh",
        "exif-gpsdirection-t": "Ravandi durust",
        "exif-gpsdirection-m": "Ravandi magnetikī",
-       "watchlistall2": "hama",
        "namespacesall": "hama",
        "monthsall": "hama",
        "confirmemail": "Tasdiqi nişonai poctai elektronī",
        "revdelete-restricted": "mahdudijatho ba mudiron amalī şudand",
        "revdelete-unrestricted": "mahdudijatho az mudiron bardoşta şudand",
        "rightsnone": "(heç)",
+       "revdelete-summary": "viroişi xulosa",
        "expandtemplates": "Bastdodani şablonho",
        "expand_templates_intro": "In sahifai viƶa matnero darjoft karda va tamomi şablonhoi ba kor rafta dar onro ba tavri bozgaşte bast medihad. Hamcunin tobehoi taçzeh\n<nowiki>{{</nowiki>#language:...}}, va mutaƣjirhoe cun\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash;ro ham bast medihad – dar voqe' taqriban har ciro ki doxili du akulot boşad.\nIn kor bo sado zadani marhilai taçzehi marbut dar xudi MediaViki surat megirad.",
        "expand_templates_title": "Unvoni mavzū', baroi {{FULLPAGENAME}} va ƣajra.:",
index 6b6f134..1fa4813 100644 (file)
        },
        "tog-underline": "การขีดเส้นใต้ลิงก์:",
        "tog-hideminor": "ซ่อนการแก้ไขเล็กน้อยในหน้าปรับปรุงล่าสุด",
-       "tog-hidepatrolled": "ซ่อนการแก้ไขที่ตรวจแล้วในหน้าปรับปรุงล่าสุด",
-       "tog-newpageshidepatrolled": "à¸\8bà¹\88อà¸\99หà¸\99à¹\89าà¸\97ีà¹\88à¸\95รวà¸\88à¹\81ลà¹\89วà¸\88าà¸\81รายการหน้าใหม่",
+       "tog-hidepatrolled": "à¸\8bà¹\88อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\97ีà¹\88à¸\95รวà¸\88สอà¸\9aà¹\81ลà¹\89วà¹\83à¸\99หà¸\99à¹\89าà¸\9bรัà¸\9aà¸\9bรุà¸\87ลà¹\88าสุà¸\94",
+       "tog-newpageshidepatrolled": "à¸\8bà¹\88อà¸\99หà¸\99à¹\89าà¸\97ีà¹\88à¸\95รวà¸\88สอà¸\9aà¹\81ลà¹\89วà¹\83à¸\99รายการหน้าใหม่",
        "tog-extendwatchlist": "ขยายรายการเฝ้าดูให้แสดงการเปลี่ยนแปลงทั้งหมด ไม่เพียงการเปลี่ยนแปลงล่าสุด",
        "tog-usenewrc": "จัดกลุ่มการเปลี่ยนแปลงแบ่งตามหน้าในรายการปรับปรุงล่าสุดและรายการเฝ้าดู",
-       "tog-numberheadings": "à¹\83สà¹\88เลขหัวเรื่องอัตโนมัติ",
+       "tog-numberheadings": "à¸\81ำหà¸\99à¸\94เลขหัวเรื่องอัตโนมัติ",
        "tog-showtoolbar": "แสดงแถบเครื่องมือแก้ไข",
        "tog-editondblclick": "แก้ไขหน้าเมื่อดับเบิลคลิก",
-       "tog-editsectiononrightclick": "à¹\80à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80à¸\89à¸\9eาะสà¹\88วà¸\99à¹\82à¸\94ยà¸\84ลิà¸\81à¸\82วาà¸\97ีà¹\88à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¸\82อà¸\87สà¹\88วà¸\99à¸\99ัà¹\89à¸\99",
+       "tog-editsectiononrightclick": "เปิดใช้งานการแก้ไขส่วนโดยคลิกขวาที่ชื่อเรื่องของส่วนนั้น",
        "tog-watchcreations": "เพิ่มหน้าที่ฉันสร้างและไฟล์ที่ฉันอัปโหลดเข้ารายการเฝ้าดู",
        "tog-watchdefault": "เพิ่มหน้าและไฟล์ที่ฉันแก้ไขเข้ารายการเฝ้าดู",
-       "tog-watchmoves": "à¹\80à¸\9eิà¹\88มà¹\81ละà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\89ัà¸\99à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อเข้ารายการเฝ้าดู",
+       "tog-watchmoves": "à¹\80à¸\9eิà¹\88มà¹\81ละà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\89ัà¸\99ยà¹\89ายเข้ารายการเฝ้าดู",
        "tog-watchdeletion": "เพิ่มหน้าและไฟล์ที่ฉันลบเข้ารายการเฝ้าดู",
        "tog-watchrollback": "เพิ่มหน้าที่ฉันย้อนกลับฉุกเฉินเข้ารายการเฝ้าดู",
-       "tog-minordefault": "à¸\81ำหà¸\99à¸\94à¹\83หà¹\89à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\97ุà¸\81à¸\84รัà¹\89à¸\87à¹\80à¸\9bà¹\87à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80ลà¹\87à¸\81à¸\99à¹\89อยà¹\82à¸\94ยà¸\9bริยาย",
-       "tog-previewontop": "à¹\83หà¹\89à¸\95ัวอยà¹\88าà¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\81สà¸\94งก่อนกล่องแก้ไข",
+       "tog-minordefault": "กำหนดการแก้ไขทุกครั้งเป็นการแก้ไขเล็กน้อยโดยปริยาย",
+       "tog-previewontop": "à¹\81สà¸\94à¸\87à¸\95ัวอยà¹\88างก่อนกล่องแก้ไข",
        "tog-previewonfirst": "แสดงตัวอย่างในการแก้ไขครั้งแรก",
        "tog-enotifwatchlistpages": "อีเมลหาเมื่อหน้าหรือไฟล์ในรายการเฝ้าดูเปลี่ยนแปลง",
        "tog-enotifusertalkpages": "อีเมลหาเมื่อมีการเปลี่ยนแปลงหน้าคุยกับผู้ใช้ของฉัน",
        "tog-enotifrevealaddr": "เปิดเผยที่อยู่อีเมลของฉันในอีเมลแจ้งเตือน",
        "tog-shownumberswatching": "แสดงจำนวนผู้ใช้ที่เฝ้าดู",
        "tog-oldsig": "ลายเซ็นที่ใช้อยู่:",
-       "tog-fancysig": "à¹\83à¸\8aà¹\89à¸\84ำสัà¹\88à¸\87วิà¸\81ิà¸\97ีà¹\88à¸\9bราà¸\81à¸\8fà¹\83à¸\99ลายà¹\80à¸\8bà¹\87à¸\99à¸\99ีà¹\89 (โดยไม่มีลิงก์อัตโนมัติ)",
-       "tog-uselivepreview": "à¹\81สà¸\94à¸\87à¸\95ัวอยà¹\88าà¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\81à¸\9aà¸\9aทันที (ทดลอง)",
+       "tog-fancysig": "à¸\96ือลายà¹\80à¸\8bà¹\87à¸\99à¹\80à¸\9bà¹\87à¸\99à¸\82à¹\89อà¸\84วามวิà¸\81ิ (โดยไม่มีลิงก์อัตโนมัติ)",
+       "tog-uselivepreview": "à¹\83à¸\8aà¹\89à¸\95ัวอยà¹\88าà¸\87ทันที (ทดลอง)",
        "tog-forceeditsummary": "เตือนเมื่อช่องคำอธิบายอย่างย่อว่าง",
        "tog-watchlisthideown": "ซ่อนการแก้ไขของฉันจากรายการเฝ้าดู",
        "tog-watchlisthidebots": "ซ่อนการแก้ไขของบอตจากรายการเฝ้าดู",
        "tog-watchlisthideminor": "ซ่อนการแก้ไขเล็กน้อยจากรายการเฝ้าดู",
        "tog-watchlisthideliu": "ซ่อนการแก้ไขโดยผู้ใช้ล็อกอินจากรายการเฝ้าดู",
        "tog-watchlisthideanons": "ซ่อนการแก้ไขโดยผู้ใช้นิรนามจากรายการเฝ้าดู",
-       "tog-watchlisthidepatrolled": "ซ่อนการแก้ไขที่ตรวจแล้วจากรายการเฝ้าดู",
+       "tog-watchlisthidepatrolled": "à¸\8bà¹\88อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\97ีà¹\88à¸\95รวà¸\88สอà¸\9aà¹\81ลà¹\89วà¸\88าà¸\81รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู",
        "tog-ccmeonemails": "ส่งสำเนาอีเมลที่ฉันส่งหาผู้อื่นให้ฉัน",
        "tog-diffonly": "ไม่แสดงเนื้อหาหน้าใต้ผลต่าง",
        "tog-showhiddencats": "แสดงหมวดหมู่ที่ซ่อนอยู่",
        "category-empty": "<em>ปัจจุบันหมวดหมู่นี้ไม่มีหน้าหรือสื่อใด</em>",
        "hidden-categories": "{{PLURAL:$1|หมวดหมู่ที่ซ่อนอยู่|หมวดหมู่ที่ซ่อนอยู่}}",
        "hidden-category-category": "หมวดหมู่ที่ซ่อนอยู่",
-       "category-subcat-count": "{{PLURAL:$2|หมวà¸\94หมูà¹\88à¸\99ีà¹\89มีหมวà¸\94หมูà¹\88ยà¹\88อยà¹\80à¸\9eียà¸\87หมวà¸\94หมูà¹\88à¹\80à¸\94ียว|หมวà¸\94หมูà¹\88à¸\99ีà¹\89มี {{PLURAL:$1|หมวà¸\94หมูà¹\88ยà¹\88อย|$1 à¸«à¸¡à¸§à¸\94หมูà¹\88ยà¹\88อย}} จากทั้งหมด $2 หมวดหมู่}}",
-       "category-subcat-count-limited": "หมวดหมู่นี้มี $1 หมวดหมู่ย่อย",
-       "category-article-count": "{{PLURAL:$2|หมวà¸\94หมูà¹\88à¸\99ีà¹\89มีอยูà¹\88à¹\80à¸\9eียà¸\87หà¸\99à¹\89าà¹\80à¸\94ียว|à¹\83à¸\99หมวà¸\94หมูà¹\88à¸\99ีà¹\89มี {{PLURAL:$1|หà¸\99à¹\89าà¹\80à¸\94ียว|$1 à¸«à¸\99à¹\89า}} จากทั้งหมด $2 หน้า}}",
+       "category-subcat-count": "{{PLURAL:$2|หมวà¸\94หมูà¹\88à¸\99ีà¹\89มีหมวà¸\94หมูà¹\88ยà¹\88อยà¹\80à¸\94ียวà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89|หมวà¸\94หมูà¹\88à¸\99ีà¹\89มี {{PLURAL:$1|หมวà¸\94หมูà¹\88ยà¹\88อยà¹\80à¸\94ียว|$1 à¸«à¸¡à¸§à¸\94หมูà¹\88ยà¹\88อย}}à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89 จากทั้งหมด $2 หมวดหมู่}}",
+       "category-subcat-count-limited": "หมวดหมู่นี้มี $1 หมวดหมู่ย่อยต่อไปนี้",
+       "category-article-count": "{{PLURAL:$2|หมวà¸\94หมูà¹\88à¸\99ีà¹\89มีอยูà¹\88à¹\80à¸\9eียà¸\87หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89|{{PLURAL:$1|หà¸\99à¹\89า|$1 à¸«à¸\99à¹\89า}}à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89อยูà¹\88à¹\83à¸\99หมวà¸\94หมูà¹\88à¸\99ีà¹\89 จากทั้งหมด $2 หน้า}}",
        "category-article-count-limited": "$1 หน้าต่อไปนี้อยู่ในหมวดหมู่นี้",
-       "category-file-count": "{{PLURAL:$2|หมวดหมู่นี้มีเพียงไฟล์นี้|หมวดหมู่นี้มี $1 ไฟล์ จากทั้งหมด $2 ไฟล์}}",
+       "category-file-count": "{{PLURAL:$2|หมวดหมู่นี้มีเพียงไฟล์นี้|$1 ไฟล์ต่อไปนี้อยู่ในหมวดหมู่นี้ จากทั้งหมด $2 ไฟล์}}",
        "category-file-count-limited": "{{PLURAL:$1|ไฟล์|ไฟล์}}ต่อไปนี้อยู่ในหมวดหมู่นี้",
        "listingcontinuesabbrev": "ต่อ",
        "index-category": "หน้าที่มีดัชนี",
        "mypage": "หน้า",
        "mytalk": "พูดคุย",
        "anontalk": "พูดคุยกับเลขที่อยู่ไอพีนี้",
-       "navigation": "à¸\9bà¹\89ายà¸\9aอà¸\81ทาง",
+       "navigation": "à¸\81ารà¸\99ำทาง",
        "and": "&#32;และ",
        "qbfind": "ค้นหา",
        "qbbrowse": "สืบค้น",
        "actions": "ปฏิบัติการ",
        "namespaces": "เนมสเปซ",
        "variants": "สิ่งที่แตกต่าง",
-       "navigation-heading": "รายà¸\81ารà¹\80ลือà¸\81à¸\9bà¹\89ายà¸\9aอà¸\81ทาง",
+       "navigation-heading": "รายà¸\81ารà¹\80ลือà¸\81à¸\81ารà¸\99ำทาง",
        "errorpagetitle": "มีข้อผิดพลาด",
-       "returnto": "กลับไปที่ $1",
+       "returnto": "กลับไป $1",
        "tagline": "จาก {{SITENAME}}",
-       "help": "à¸\84ำอà¸\98ิà¸\9aาย",
+       "help": "วิà¸\98ีà¹\83à¸\8aà¹\89",
        "search": "ค้นหา",
        "searchbutton": "ค้นหา",
        "go": "ไป",
        "searcharticle": "ไป",
        "history": "ประวัติหน้า",
        "history_short": "ประวัติ",
-       "updatedmarker": "à¸\96ูà¸\81à¸\9bรัà¸\9aà¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\81ารà¹\80à¸\82à¹\89าà¸\8aมà¸\84รัà¹\89à¸\87ลà¹\88าสุà¸\94ของฉัน",
+       "updatedmarker": "à¸\96ูà¸\81à¸\9bรัà¸\9aà¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\81ารà¹\80ยีà¹\88ยมà¸\8aมà¸\84รัà¹\89à¸\87สุà¸\94à¸\97à¹\89ายของฉัน",
        "printableversion": "รุ่นพร้อมพิมพ์",
-       "permalink": "à¸\81ารà¹\82ยà¸\87ถาวร",
+       "permalink": "ลิà¸\87à¸\81à¹\8cถาวร",
        "print": "พิมพ์",
        "view": "ดู",
        "view-foreign": "ดูบน $1",
        "otherlanguages": "ในภาษาอื่น",
        "redirectedfrom": "(เปลี่ยนทางจาก $1)",
        "redirectpagesub": "หน้าเปลี่ยนทาง",
-       "lastmodifiedat": "หน้านี้แก้ไขล่าสุดเมื่อวันที่ $1 เวลา $2",
-       "viewcount": "หน้านี้มีการเข้าชม $1 ครั้ง",
+       "redirectto": "เปลี่ยนทางไป:",
+       "lastmodifiedat": "ดัดแปรหน้านี้ล่าสุดเมื่อวันที่ $1 เวลา $2",
+       "viewcount": "มีการเข้าถึงหน้านี้ $1 ครั้ง",
        "protectedpage": "หน้าถูกล็อก",
-       "jumpto": "ข้ามไปยัง:",
-       "jumptonavigation": "à¸\9aอà¸\81ทาง",
+       "jumpto": "ข้ามไป:",
+       "jumptonavigation": "à¸\81ารà¸\99ำทาง",
        "jumptosearch": "ค้นหา",
        "view-pool-error": "ขออภัย ขณะนี้เซิร์ฟเวอร์มีภาระเกิน\nผู้ใช้พยายามดูหน้านี้มากเกินไป\nกรุณารอสักครู่ก่อนเข้าหน้านี้อีกครั้ง\n\n$1",
        "generic-pool-error": "ขออภัย ขณะนี้เซิร์ฟเวอร์โหลดเกิน\nมีผู้ใช้พยายามดูทรัพยากรนี้มากเกินไป\nโปรดรอสักครู่ก่อนลองเข้าถึงทรัพยากรนี้อีกครั้ง",
-       "pool-timeout": "à¹\80à¸\81ิà¸\99à¹\80วลารอà¸\81ารล็อก",
+       "pool-timeout": "หมà¸\94à¹\80วลารอà¸\81ำลัà¸\87รอล็อก",
        "pool-queuefull": "พื้นที่รองรับคิวเต็ม",
        "pool-errorunknown": "เกิดข้อผิดพลาดไม่ทราบสาเหตุ",
        "aboutsite": "เกี่ยวกับ{{SITENAME}}",
        "restorelink": "$1 การแก้ไขที่ถูกลบ",
        "feedlinks": "ฟีด:",
        "feed-invalid": "ฟีดที่สมัครไม่ถูกชนิด",
-       "feed-unavailable": "à¸\9fีà¸\94à¹\84มà¹\88à¸\96ูà¸\81à¹\80à¸\9bิà¸\94à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99",
+       "feed-unavailable": "à¸\9fีà¸\94ยัà¸\87à¹\83à¸\8aà¹\89à¹\84มà¹\88à¹\84à¸\94à¹\89",
        "site-rss-feed": "ฟีดอาร์เอสเอส $1",
        "site-atom-feed": "ฟีดอะตอม $1",
        "page-rss-feed": "ฟีดอาร์เอสเอส \"$1\"",
        "nstab-template": "แม่แบบ",
        "nstab-help": "หน้าวิธีใช้",
        "nstab-category": "หมวดหมู่",
-       "nosuchaction": "à¹\84มà¹\88มีà¸\81ารà¸\81ระà¸\97ำดังกล่าว",
+       "nosuchaction": "à¹\84มà¹\88มีà¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารดังกล่าว",
        "nosuchactiontext": "การกระทำที่กำหนดผ่านยูอาร์แอลดังกล่าวไม่สามารถใช้ได้\nคุณอาจกรอกยูอาร์แอลผิด หรือมาตามลิงก์ที่ไม่ถูกต้อง\nหรืออาจเกิดจากข้อผิดพลาดในซอฟต์แวร์ซึ่ง {{SITENAME}} ใช้อยู่",
        "nosuchspecialpage": "ไม่มีหน้าพิเศษดังกล่าว",
        "nospecialpagetext": "<strong>คุณขอหน้าพิเศษไม่ถูกต้อง</strong>\n\nรายการหน้าพิเศษที่ถูกต้องดูได้ที่ [[Special:SpecialPages|รายการหน้าพิเศษ]]",
-       "error": "ข้อผิดพลาด",
-       "databaseerror": "ข้อผิดพลาดที่ฐานข้อมูล",
-       "databaseerror-text": "à¹\80à¸\81ิà¸\94à¸\84วามผิดพลาดข้อคำถามของฐานข้อมูล\nซึ่งอาจบ่งชี้ว่ามีจุดบกพร่องในซอฟต์แวร์",
-       "databaseerror-textcl": "à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¸\82à¹\89อà¸\84ำà¸\96ามของฐานข้อมูล",
-       "databaseerror-query": "à¸\82à¹\89อà¸\84ำà¸\96าม: $1",
+       "error": "มีà¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94",
+       "databaseerror": "มีà¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¸\97ีà¹\88à¸\90าà¸\99à¸\82à¹\89อมูล",
+       "databaseerror-text": "à¹\80à¸\81ิà¸\94à¸\82à¹\89อผิดพลาดข้อคำถามของฐานข้อมูล\nซึ่งอาจบ่งชี้ว่ามีจุดบกพร่องในซอฟต์แวร์",
+       "databaseerror-textcl": "à¹\80à¸\81ิà¸\94à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¸\84ำสัà¹\88à¸\87ของฐานข้อมูล",
+       "databaseerror-query": "à¸\84ำสัà¹\88à¸\87: $1",
        "databaseerror-function": "ฟังก์ชัน: $1",
        "databaseerror-error": "ข้อผิดพลาด: $1",
        "laggedslavemode": "<strong>คำเตือน:</strong> หน้านี้อาจไม่มีการปรับล่าสุด",
        "readonly_lag": "ฐานข้อมูลถูกล็อกอัตโนมัติขณะที่เซิร์ฟเวอร์ฐานข้อมูลรองกำลังปรับปรุงตามฐานข้อมูลหลัก",
        "internalerror": "ข้อผิดพลาดภายใน",
        "internalerror_info": "เกิดข้อผิดพลาดภายใน: $1",
-       "filecopyerror": "ไม่สามารถคัดลอกไฟล์ \"$1\" ไปที่ \"$2\"",
+       "filecopyerror": "ไม่สามารถคัดลอกไฟล์ \"$1\" ไป \"$2\"",
        "filerenameerror": "ไม่สามารถเปลี่ยนชื่อไฟล์ \"$1\" เป็น \"$2\"",
        "filedeleteerror": "ไม่สามารถลบไฟล์ \"$1\"",
-       "directorycreateerror": "à¹\84มà¹\88สามารà¸\96สรà¹\89าà¸\87à¹\84à¸\94à¹\80รà¸\81à¸\97อรี \"$1\"",
+       "directorycreateerror": "à¹\84มà¹\88สามารà¸\96สรà¹\89าà¸\87สารà¸\9aà¸\9a \"$1\"",
        "filenotfound": "ไม่พบไฟล์ \"$1\"",
-       "unexpected": "à¸\9cลà¸\97ีà¹\88à¹\84มà¹\88à¸\84าà¸\94à¸\84ิà¸\94: \"$1\"=\"$2\"",
-       "formerror": "ข้อผิดพลาด: ส่งแบบไม่ได้",
+       "unexpected": "à¸\84à¹\88าà¹\84มà¹\88à¸\84าà¸\94หมาย: \"$1\"=\"$2\"",
+       "formerror": "มีà¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94: à¸ªà¹\88à¸\87à¹\81à¸\9aà¸\9aà¹\84มà¹\88à¹\84à¸\94à¹\89",
        "badarticleerror": "ไม่สามารถดำเนินปฏิบัติการนี้ในหน้านี้",
-       "cannotdelete": "à¹\84มà¹\88สามารà¸\96ลà¸\9aหà¸\99à¹\89าหรือà¹\84à¸\9fลà¹\8c \"$1\" \nอาà¸\88มีà¸\9cูà¹\89อืà¹\88à¸\99ลบไปแล้ว",
+       "cannotdelete": "à¹\84มà¹\88สามารà¸\96ลà¸\9aหà¸\99à¹\89าหรือà¹\84à¸\9fลà¹\8c \"$1\" \nà¸\9cูà¹\89อืà¹\88à¸\99อาà¸\88ลบไปแล้ว",
        "cannotdelete-title": "ไม่สามารถลบหน้า ''$1''",
        "delete-hook-aborted": "การลบถูกฮุกยกเลิก\nโดยไม่มีคำชี้แจง",
        "no-null-revision": "ไม่สามารถสร้างรุ่นว่างใหม่ของหน้า \"$1\"",
        "badtitle": "ใช้ชื่อเรื่องนี้ไม่ได้",
        "badtitletext": "ชื่อหน้าที่ขอไม่ถูกต้อง เป็นชื่อว่าง หรือชื่อข้ามภาษาหรือข้ามวิกิที่เชื่อมโยงไม่ถูกต้อง\nอาจมีอักขระที่ไม่สามารถใช้ในชื่อเรื่องได้",
-       "perfcached": "ข้อมูลต่อไปนี้ถูกเก็บในแคช และอาจล้าสมัย มีผลการค้นหาสูงสุด $1 รายการในแคช",
-       "perfcachedts": "ข้อมูลต่อไปนี้ถูกเก็บในแคช และได้รับการปรับล่าสุดเมื่อ $1 ผลลัพธ์สูงสุด $4 รายการสามารถเก็บในแคชได้",
+       "perfcached": "ข้อมูลต่อไปนี้ถูกเก็บในแคชและอาจล้าสมัย มีผลการค้นหาสูงสุด $1 รายการในแคช",
+       "perfcachedts": "ข้อมูลต่อไปนี้ถูกเก็บในแคชและถูกปรับล่าสุดเมื่อ $1 มีผลลัพธ์สูงสุด $4 รายการในแคชได้",
        "querypage-no-updates": "ขณะนี้ปิดใช้งานการปรับหน้านี้ \nข้อมูลในที่นี้จะไม่รีเฟรชเป็นปัจจุบัน",
        "viewsource": "ดูโค้ด",
        "viewsource-title": "ดูโค้ดสำหรับ $1",
        "protectedpagetext": "หน้านี้ถูกล็อกเพื่อป้องกันการแก้ไขหรือปฏิบัติการอื่น",
        "viewsourcetext": "คุณสามารถดูและคัดลอกโค้ดของหน้านี้:",
        "viewyourtext": "คุณสามารถดูและคัดลอกต้นฉบับ<strong>การแก้ไขของคุณ</strong>มายังหน้านี้ได้:",
-       "protectedinterface": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9bà¹\87à¸\99à¸\82à¹\89อà¸\84วามอิà¸\99à¹\80à¸\95อรà¹\8cà¹\80à¸\9fà¸\8bสำหรัà¸\9aà¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cà¸\9aà¸\99วิà¸\81ิà¸\99ีà¹\89 à¹\81ละà¸\96ูà¸\81à¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¹\80à¸\9eืà¹\88อมิà¹\83หà¹\89มีการกระทำผิด\nในการเพิ่มหรือเปลี่ยนแปลงการแปลสำหรับทุกวิกิ โปรดใช้ [//translatewiki.net/ translatewiki.net] โครงการแปลมีเดียวิกิเป็นภาษาถิ่น",
-       "editinginterface": "'''คำเตือน:''' คุณกำลังแก้ไขหน้าที่ใช้เพื่อให้ข้อความอินเตอร์เฟซแก่ซอฟต์แวร์\nการเปลี่ยนแปลงหน้านี้จะกระทบต่อลักษณะของอินเตอร์เฟซผู้ใช้แก่ผู้ใช้อื่นบนวิกินี้\nในการเพิ่มหรือเปลี่ยนแปลงคำแปลสำหรับทุกวิกิ โปรดใช้ [//translatewiki.net/wiki/Main_Page?setlang=th translatewiki.net] โครงการแปลมีเดียวิกิเป็นภาษาถิ่น",
+       "protectedinterface": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9bà¹\87à¸\99à¸\82à¹\89อà¸\84วามสà¹\88วà¸\99à¸\95à¹\88อà¸\9bระสาà¸\99สำหรัà¸\9aà¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cà¸\9aà¸\99วิà¸\81ิà¸\99ีà¹\89 à¹\81ละà¸\96ูà¸\81ลà¹\87อà¸\81à¹\80à¸\9eืà¹\88อà¸\9bà¹\89อà¸\87à¸\81ัà¸\99การกระทำผิด\nในการเพิ่มหรือเปลี่ยนแปลงการแปลสำหรับทุกวิกิ โปรดใช้ [//translatewiki.net/ translatewiki.net] โครงการแปลมีเดียวิกิเป็นภาษาถิ่น",
+       "editinginterface": "<strong>คำเตือน:</strong> คุณกำลังแก้ไขหน้าที่ใช้จัดหาข้อความอินเตอร์เฟซให้ซอฟต์แวร์\nการเปลี่ยนแปลงหน้านี้จะกระทบต่อสภาพปรากฏของส่วนต่อประสานผู้ใช้แก่ผู้ใช้อื่นบนวิกินี้\nในการเพิ่มหรือเปลี่ยนแปลงคำแปลสำหรับทุกวิกิ โปรดใช้ [//translatewiki.net/wiki/Main_Page?setlang=th translatewiki.net] โครงการแปลมีเดียวิกิเป็นภาษาถิ่น",
        "cascadeprotected": "หน้านี้ถูกป้องกันมิให้แก้ไข เพราะถูกรวมอยู่ในหน้าซึ่งถูกล็อกโดยเปิดตัวเลือก \"ทบทุกลำดับขั้น\":\n$2",
        "namespaceprotected": "คุณไม่มีสิทธิแก้ไขหน้าในเนมสเปซ <strong>$1</strong>",
-       "customcssprotected": "คุณไม่มีสิทธิแก้ไขหน้าสไตล์ CSS นี้ เพราะมีการตั้งค่าส่วนบุคคลของผู้ใช้อื่น",
+       "customcssprotected": "คุณไม่มีสิทธิแก้ไขหน้า CSS นี้ เพราะมีการตั้งค่าส่วนบุคคลของผู้ใช้อื่น",
        "customjsprotected": "คุณไม่มีสิทธิแก้ไขหน้าจาวาสคริปต์นี้ เพราะหน้านี้มีการตั้งค่าส่วนบุคคลของผู้ใช้อื่น",
-       "mycustomcssprotected": "à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89แก้ไขหน้าซีเอสเอสนี้",
-       "mycustomjsprotected": "à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89แก้ไขหน้าจาวาสคริปต์นี้",
-       "myprivateinfoprotected": "à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89แก้ไขข้อมูลส่วนตัวของคุณ",
-       "mypreferencesprotected": "à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89แก้ไขการตั้งค่าของคุณ",
+       "mycustomcssprotected": "à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิแก้ไขหน้าซีเอสเอสนี้",
+       "mycustomjsprotected": "à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิแก้ไขหน้าจาวาสคริปต์นี้",
+       "myprivateinfoprotected": "à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิแก้ไขข้อมูลส่วนตัวของคุณ",
+       "mypreferencesprotected": "à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิแก้ไขการตั้งค่าของคุณ",
        "ns-specialprotected": "ไม่สามารถแก้ไขหน้าพิเศษ",
        "titleprotected": "ชื่อเรื่องนี้ถูก [[User:$1|$1]] ป้องกันมิให้สร้าง\nเหตุผลที่ให้ไว้คือ ''<em>$2</em>''",
        "filereadonlyerror": "ไม่สามารถแก้ไขไฟล์ \"$1\" เพราะที่เก็บไฟล์ \"$2\" อยู่ในภาวะอ่านอย่างเดียว\n\nผู้ดูแลระบบที่ล็อกให้คำอธิบายว่า: \"$3\"",
        "exception-nologin-text-manual": "โปรด$1เพื่อสามารถเข้าถึงหน้าหรือปฏิบัติการนี้",
        "virus-badscanner": "โครงแบบผิดพลาด: ไม่รู้จักตัวสแกนไวรัส: <em>$1</em>",
        "virus-scanfailed": "การสแกนล้มเหลว (โค้ด $1)",
-       "virus-unknownscanner": "à¹\84มà¹\88รูà¹\89à¸\88ัà¸\81à¹\82à¸\9bรà¹\81à¸\81รมà¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¹\84วรัสà¸\95ัวà¸\99ีà¹\89:",
-       "logouttext": "<strong>à¸\84ุà¸\93ลà¹\87อà¸\81à¹\80อาà¸\95à¹\8cà¹\81ลà¹\89ว</strong>\n\nหมายà¹\80หà¸\95ุวà¹\88า à¸\9aาà¸\87หà¸\99à¹\89าอาà¸\88ยัà¸\87à¹\81สà¸\94à¸\87à¸\9cลà¹\80สมือà¸\99วà¹\88าà¸\84ุà¸\93ยัà¸\87ลà¹\87อà¸\81อิà¸\99อยูà¹\88 à¸\88à¸\99à¸\81วà¹\88าà¸\84ุà¸\93à¸\88ะลà¹\89าà¸\87à¹\81à¸\84à¸\8aà¹\80à¸\9aราวà¹\8cà¹\80à¸\8bอรà¹\8cà¸\82อà¸\87à¸\84ุà¸\93",
+       "virus-unknownscanner": "à¹\82à¸\9bรà¹\81à¸\81รมà¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¹\84วรัสà¸\97ีà¹\88à¹\84มà¹\88รูà¹\89à¸\88ัà¸\81:",
+       "logouttext": "<strong>คุณล็อกเอาต์แล้ว</strong>\n\nหมายเหตุว่า บางหน้าอาจยังแสดงผลเสมือนว่าคุณยังล็อกอินอยู่ จนกว่าคุณล้างแคชเบราว์เซอร์ของคุณ",
        "welcomeuser": "ยินดีต้อนรับ $1!",
        "welcomecreation-msg": "สร้างบัญชีของคุณแล้ว\nคุณสามารถเปลี่ยน[[Special:Preferences|การตั้งค่า]] {{SITENAME}} ของคุณได้หากต้องการ",
        "yourname": "ชื่อผู้ใช้:",
        "userlogin-yourname": "ชื่อผู้ใช้",
-       "userlogin-yourname-ph": "กรอกชื่อผู้ใช้",
+       "userlogin-yourname-ph": "กรอกชื่อผู้ใช้ของคุณ",
        "createacct-another-username-ph": "กรอกชื่อผู้ใช้",
        "yourpassword": "รหัสผ่าน:",
        "userlogin-yourpassword": "รหัสผ่าน",
-       "userlogin-yourpassword-ph": "กรอกรหัสผ่าน",
+       "userlogin-yourpassword-ph": "กรอกรหัสผ่านของคุณ",
        "createacct-yourpassword-ph": "กรอกรหัสผ่าน",
        "yourpasswordagain": "พิมพ์รหัสผ่านอีกครั้ง:",
        "createacct-yourpasswordagain": "ยืนยันรหัสผ่าน",
        "userlogin-createanother": "สร้างอีกบัญชี",
        "createacct-emailrequired": "ที่อยู่อีเมล",
        "createacct-emailoptional": "ที่อยู่อีเมล (เลือกไม่ใส่ได้)",
-       "createacct-email-ph": "กรอกที่อยู่อีเมล",
+       "createacct-email-ph": "กรอกที่อยู่อีเมลของคุณ",
        "createacct-another-email-ph": "กรอกที่อยู่อีเมล",
        "createaccountmail": "ใช้รหัสผ่านสุ่มชั่วคราวและส่งไปยังที่อยู่อีเมลที่ระบุ",
        "createacct-realname": "ชื่อจริง (เลือกไม่ใส่ได้)",
        "createacct-benefit-heading": "{{SITENAME}}สร้างขึ้นจากคนเช่นคุณ",
        "createacct-benefit-body1": "$1 การแก้ไข",
        "createacct-benefit-body2": "$1 หน้า",
-       "createacct-benefit-body3": "$1 ผู้ร่วมเขียน",
-       "badretype": "รหัสผ่านที่คุณกรอกไม่ตรงกัน",
+       "createacct-benefit-body3": "$1 ผู้ร่วมเขียนล่าสุด",
+       "badretype": "รหัสผ่านที่คุณกรอกไม่ตรง",
        "userexists": "ชื่อผู้ใช้ที่กรอกมีผู้ใช้แล้ว \nกรุณาเลือกชื่ออื่น",
        "loginerror": "ล็อกอินผิดพลาด",
        "createacct-error": "การสร้างบัญชีผิดพลาด",
        "nocookiesfornew": "บัญชีผู้ใช้ไม่ถูกสร้าง เนื่องจากเราไม่สามารถยืนยันต้นทาง\nกรุณาทำให้แน่ใจว่าคุณได้เปิดใช้งานคุกกี้ โหลดหน้านี้ใหม่และลองอีกครั้ง",
        "noname": "คุณไม่ได้ใส่ชื่อผู้ใช้ที่ถูกต้อง",
        "loginsuccesstitle": "ล็อกอินสำเร็จ",
-       "loginsuccess": "<strong>à¸\82à¸\93ะà¸\99ีà¹\89à¸\84ุà¸\93ลà¹\87อà¸\81อิà¸\99à¹\80à¸\82à¹\89าสูà¹\88 {{SITENAME}} à¸\94à¹\89วยชื่อ \"$1\"</strong>",
+       "loginsuccess": "<strong>à¸\82à¸\93ะà¸\99ีà¹\89à¸\84ุà¸\93ลà¹\87อà¸\81อิà¸\99สูà¹\88 {{SITENAME}} à¹\83à¸\99ชื่อ \"$1\"</strong>",
        "nosuchuser": "ไม่มีผู้ใช้ชื่อ \"$1\"\nชื่อผู้ใช้นั้นไวต่ออักษรใหญ่เล็ก\nกรุณาตรวจการสะกดอีกครั้ง หรือ[[Special:UserLogin/signup|สร้างบัญชีใหม่]]",
        "nosuchusershort": "ไม่มีผู้ใช้ชื่อ \"$1\" \nกรุณาตรวจสอบการสะกด",
        "nouserspecified": "คุณต้องระบุชื่อผู้ใช้",
        "password-login-forbidden": "ห้ามใช้ชื่อผู้ใช้และรหัสผ่านนี้",
        "mailmypassword": "ตั้งรหัสผ่านใหม่",
        "passwordremindertitle": "รหัสผ่านชั่วคราวใหม่สำหรับ {{SITENAME}}",
-       "passwordremindertext": "à¸\9cูà¹\89à¹\83à¸\94à¸\9cูà¹\89หà¸\99ึà¹\88à¸\87 (à¸\8bึà¹\88à¸\87อาà¸\88à¹\80à¸\9bà¹\87à¸\99à¸\84ุà¸\93 à¸\97ีà¹\88à¹\83à¸\8aà¹\89เลขที่อยู่ไอพี $1) ขอให้ส่งรหัสผ่านใหม่ของ {{SITENAME}} ($4) รหัสผ่านชั่วคราวสำหรับผู้ใช้ \"$2\" ถูกสร้างขึ้น และกำหนดเป็น \"$3\" หากเป็นเจตนาของคุณ คุณจำต้องล็อกอินและเลือกรหัสผ่านใหม่ในขณะนี้ \nรหัสผ่านชั่วคราวของคุณจะหมดอายุใน $5 วัน\n\nหากเป็นบุคคลอื่นที่ขอรหัสผ่านใหม่ หรือหากคุณจำรหัสผ่านของคุณได้แล้ว และไม่ต้องการเปลี่ยนรหัสผ่านใหม่อีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
+       "passwordremindertext": "à¸\9cูà¹\89à¹\83à¸\94à¸\9cูà¹\89หà¸\99ึà¹\88à¸\87 (à¸\8bึà¹\88à¸\87อาà¸\88à¹\80à¸\9bà¹\87à¸\99à¸\84ุà¸\93 à¸\88าà¸\81เลขที่อยู่ไอพี $1) ขอให้ส่งรหัสผ่านใหม่ของ {{SITENAME}} ($4) รหัสผ่านชั่วคราวสำหรับผู้ใช้ \"$2\" ถูกสร้างขึ้น และกำหนดเป็น \"$3\" หากเป็นเจตนาของคุณ คุณจำต้องล็อกอินและเลือกรหัสผ่านใหม่ในขณะนี้ \nรหัสผ่านชั่วคราวของคุณจะหมดอายุใน $5 วัน\n\nหากเป็นบุคคลอื่นที่ขอรหัสผ่านใหม่ หรือหากคุณจำรหัสผ่านของคุณได้แล้ว และไม่ต้องการเปลี่ยนรหัสผ่านใหม่อีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
        "noemail": "ไม่มีการบันทึกที่อยู่อีเมลสำหรับผู้ใช้ \"$1\"",
        "noemailcreate": "คุณจำต้องใส่ที่อยู่อีเมลให้ถูกต้อง",
        "passwordsent": "รหัสผ่านใหม่ถูกส่งไปยังที่อยู่อีเมลที่ลงทะเบียนไว้ของ \"$1\"\nกรุณาล็อกอินอีกครั้งหลังได้รับอีเมล",
        "cannotchangeemail": "ไม่สามารถเปลี่ยนที่อยู่อีเมลบนวิกินี้",
        "emaildisabled": "เว็บไซต์นี้ไม่สามารถส่งอีเมล",
        "accountcreated": "สร้างบัญชีแล้ว",
-       "accountcreatedtext": "à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89สำหรัà¸\9a [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|à¸\9eูà¸\94à¸\84ุย]]) à¸\96ูà¸\81สรà¹\89าà¸\87à¸\82ึà¹\89à¸\99แล้ว",
+       "accountcreatedtext": "สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89สำหรัà¸\9a [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|à¸\9eูà¸\94à¸\84ุย]]) แล้ว",
        "createaccount-title": "การสร้างบัญชีสำหรับ {{SITENAME}}",
        "createaccount-text": "มีบางคนสร้างบัญชีโดยใช้ที่อยู่อีเมลของคุณบน {{SITENAME}} ($4) โดยใช้ชื่อ \"$2\" และรหัสผ่าน \"$3\" \nคุณควรล็อกอินและเปลี่ยนรหัสผ่านทันที\n\nคุณอาจเพิกเฉยข้อความนี้ หากการสร้างบัญชีนี้เป็นความผิดพลาด",
        "login-throttled": "ที่ผ่านมาคุณพยายามล็อกอินมากครั้งเกินไป\nกรุณารอ $1 ก่อนลองอีกครั้ง",
        "newpassword": "รหัสผ่านใหม่:",
        "retypenew": "พิมพ์รหัสผ่านใหม่อีกครั้ง:",
        "resetpass_submit": "ตั้งรหัสผ่านและล็อกอิน",
-       "changepassword-success": "เปลี่ยนรหัสผ่านของคุณสำเร็จ",
-       "changepassword-throttled": "คุณพยายามล็อกอินมากครั้งเกินไป\nกรุณารอ $1 ก่อนลองอีกครั้ง",
+       "changepassword-success": "เปลี่ยนรหัสผ่านของคุณสำเร็จ!",
+       "changepassword-throttled": "ลà¹\88าสุà¸\94à¸\84ุà¸\93à¸\9eยายามลà¹\87อà¸\81อิà¸\99มาà¸\81à¸\84รัà¹\89à¸\87à¹\80à¸\81ิà¸\99à¹\84à¸\9b\nà¸\81รุà¸\93ารอ $1 à¸\81à¹\88อà¸\99ลอà¸\87อีà¸\81à¸\84รัà¹\89à¸\87",
        "resetpass_forbidden": "ไม่สามารถเปลี่ยนรหัสผ่านได้",
        "resetpass-no-info": "คุณต้องล็อกอินเพื่อเข้าถึงหน้านี้โดยตรง",
        "resetpass-submit-loggedin": "เปลี่ยนรหัสผ่าน",
        "resetpass-submit-cancel": "ยกเลิก",
-       "resetpass-wrong-oldpass": "รหัสผ่านชั่วคราวหรือปัจจุบันไม่ถูกต้อง\nคุณอาจเปลี่ยนรหัสผ่านของคุณแล้ว หรือขอรหัสผ่านชั่วคราวใหม่แล้ว",
+       "resetpass-wrong-oldpass": "รหัสà¸\9cà¹\88าà¸\99à¸\8aัà¹\88วà¸\84ราวหรือà¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¹\84มà¹\88à¸\96ูà¸\81à¸\95à¹\89อà¸\87\nà¸\84ุà¸\93อาà¸\88à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\84ุà¸\93สำà¹\80รà¹\87à¸\88à¹\81ลà¹\89ว à¸«à¸£à¸·à¸­à¸\82อรหัสà¸\9cà¹\88าà¸\99à¸\8aัà¹\88วà¸\84ราวà¹\83หมà¹\88à¹\81ลà¹\89ว",
        "resetpass-recycled": "โปรดตั้งรหัสผ่านใหม่ให้ต่างจากรหัสผ่านปัจจุบัน",
        "resetpass-temp-emailed": "คุณล็อกอินด้วยรหัสผ่านชั่วคราวที่ส่งทางอีเมล\nคุณต้องตั้งรหัสผ่านใหม่ที่นี่จึงจะเสร็จสิ้นการล็อกอิน:",
        "resetpass-temp-password": "รหัสผ่านชั่วคราว:",
        "resetpass-expired-soft": "รหัสผ่านของคุณหมดอายุแล้วและจำเป็นต้องตั้งใหม่ โปรดเลือกรหัสผ่านใหม่ขณะนี้ หรือคลิก \"{{int:resetpass-submit-cancel}}\" เพื่อตั้งใหม่ทีหลัง",
        "resetpass-validity-soft": "รหัสผ่านของคุณไม่สมเหตุสมผล: $1\n\nโปรดเลือดรหัสผ่านใหม่ในขณะนี้ หรือคลิก \"{{int:resetpass-submit-cancel}}\" เพื่อตั้งใหม่ทีหลัง",
        "passwordreset": "ตั้งรหัสผ่านใหม่",
-       "passwordreset-text-one": "à¸\81รอà¸\81à¹\81à¸\9aà¸\9aà¸\99ีà¹\89à¹\80à¸\9eืà¹\88อà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88",
-       "passwordreset-text-many": "{{PLURAL:$1|กรอกเขตข้อมูลหนึ่งเพื่อรับรหัสผ่านชั่วคราวทางอีเมล}}",
-       "passwordreset-legend": "à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99",
+       "passwordreset-text-one": "à¸\81รอà¸\81à¹\81à¸\9aà¸\9aà¸\99ีà¹\89à¹\80à¸\9eืà¹\88อรัà¸\9aรหัสà¸\9cà¹\88าà¸\99à¸\8aัà¹\88วà¸\84ราวà¹\82à¸\94ยà¸\97าà¸\87อีà¹\80มล",
+       "passwordreset-text-many": "{{PLURAL:$1|à¸\81รอà¸\81à¹\80à¸\82à¸\95à¸\82à¹\89อมูลหà¸\99ึà¹\88à¸\87à¹\80à¸\9eืà¹\88อรัà¸\9aรหัสà¸\9cà¹\88าà¸\99à¸\8aัà¹\88วà¸\84ราวà¹\82à¸\94ยà¸\97าà¸\87อีà¹\80มล}}",
+       "passwordreset-legend": "à¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88",
        "passwordreset-disabled": "วิกินี้ปิดใช้งานการตั้งรหัสผ่านใหม่",
        "passwordreset-emaildisabled": "วิกินี้ปิดใช้งานคุณลักษณะอีเมล",
        "passwordreset-username": "ชื่อผู้ใช้:",
        "passwordreset-domain": "โดเมน:",
        "passwordreset-capture": "ดูอีเมลที่ได้หรือไม่",
-       "passwordreset-capture-help": "หาà¸\81à¸\84ุà¸\93à¹\80ลือà¸\81à¸\81ลà¹\88อà¸\87à¸\99ีà¹\89 à¸­à¸µà¹\80มลà¸\94ัà¸\87à¸\81ลà¹\88าว (à¸\9eรà¹\89อมรหัสà¸\9cà¹\88าà¸\99à¸\8aัà¹\88วà¸\84ราว) à¸\88ะà¹\81สà¸\94à¸\87แก่คุณ เช่นเดียวกับส่งไปยังผู้ใช้",
+       "passwordreset-capture-help": "หาà¸\81à¸\84ุà¸\93à¹\80ลือà¸\81à¸\81ลà¹\88อà¸\87à¸\99ีà¹\89 à¸\88ะà¹\81สà¸\94à¸\87อีà¹\80มลà¸\94ัà¸\87à¸\81ลà¹\88าว (à¸\9eรà¹\89อมรหัสà¸\9cà¹\88าà¸\99à¸\8aัà¹\88วà¸\84ราว) แก่คุณ เช่นเดียวกับส่งไปยังผู้ใช้",
        "passwordreset-email": "ที่อยู่อีเมล:",
        "passwordreset-emailtitle": "รายละเอียดบัญชีบน {{SITENAME}}",
-       "passwordreset-emailtext-ip": "à¸\9aาà¸\87à¸\84à¸\99 (à¸\8bึà¹\88à¸\87อาà¸\88à¹\80à¸\9bà¹\87à¸\99à¸\84ุà¸\93 à¸\88าà¸\81à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eี $1) à¸£à¹\89อà¸\87à¸\82อà¸\81ารตั้งรหัสผ่านของคุณใหม่บน{{SITENAME}} ($4) บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
-       "passwordreset-emailtext-user": "à¸\9cูà¹\89à¹\83à¸\8aà¹\89 $1 à¸\82อà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\84ุà¸\93à¹\83หมà¹\88à¸\9aà¸\99{{SITENAME}} ($4) {{PLURAL:$3||}}บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
+       "passwordreset-emailtext-ip": "à¸\9aาà¸\87à¸\84à¸\99 (à¸\8bึà¹\88à¸\87อาà¸\88à¹\80à¸\9bà¹\87à¸\99à¸\84ุà¸\93 à¸\88าà¸\81à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eี $1) à¸\82อตั้งรหัสผ่านของคุณใหม่บน{{SITENAME}} ($4) บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
+       "passwordreset-emailtext-user": "à¸\9cูà¹\89à¹\83à¸\8aà¹\89 $1 à¸\9aà¸\99 {{SITENAME}} à¸\82อà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\84ุà¸\93à¹\83หมà¹\88สำหรัà¸\9a {{SITENAME}} ($4) {{PLURAL:$3||}}บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
        "passwordreset-emailelement": "ชื่อผู้ใช้: $1\nรหัสผ่านชั่วคราว: $2",
        "passwordreset-emailsent": "อีเมลตั้งรหัสผ่านใหม่ถูกส่งไปแล้ว",
        "passwordreset-emailsent-capture": "อีเมลตั้งรหัสผ่านใหม่ถูกส่งไปแล้ว ซึ่งแสดงด้านล่าง",
        "passwordreset-emailerror-capture": "อีเมลตั้งรหัสผ่านใหม่ถูกสร้างขึ้นแล้ว ซึ่งแสดงด้านล่าง แต่ไม่สามารถส่งไปยัง{{GENDER:$2|ผู้ใช้}}: $1",
        "changeemail": "เปลี่ยนที่อยู่อีเมล",
-       "changeemail-header": "เปลี่ยนที่อยู่อีเมลของบัญชี",
        "changeemail-text": "กรอกแบบนี้เพื่อเปลี่ยนที่อยู่อีเมลของคุณ คุณต้องกรอกรหัสผ่านเพื่อยืนยันการเปลี่ยนแปลงนี้",
        "changeemail-no-info": "คุณจำต้องล็อกอินเพื่อเข้าถึงหน้านี้โดยตรง",
        "changeemail-oldemail": "ที่อยู่อีเมลปัจจุบัน:",
        "changeemail-none": "(ไม่มี)",
        "changeemail-password": "รหัสผ่าน {{SITENAME}} ของคุณ:",
        "changeemail-submit": "เปลี่ยนอีเมล",
-       "changeemail-cancel": "ยกเลิก",
        "changeemail-throttled": "คุณได้พยายามล็อกอินหลายครั้งเกินไป\nกรุณารอ $1 ก่อนลองอีกครั้ง",
        "resettokens": "ตั้งโทเค็นใหม่",
        "resettokens-text": "คุณสามารถตั้งโทเค็นใหม่ ซึ่งให้การเข้าถึงข้อมูลส่วนตัวบางอย่างที่เกี่ยวข้องกับบัญชีของคุณที่นี่\n\nคุณควรตั้งโทเค็นใหม่ หากคุณบอกผู้อื่นโดยมิได้ตั้งใจหรือบัญชีของคุณถูกเจาะ",
        "resettokens-legend": "ตั้งโทเค็นใหม่",
        "resettokens-tokens": "โทเค็น:",
        "resettokens-token-label": "$1 (ค่าปัจจุบัน: $2)",
-       "resettokens-watchlist-token": "à¹\82à¸\97à¹\80à¸\84à¹\87à¸\99à¸\81ารà¸\9bà¹\89อà¸\99à¹\80วà¹\87à¸\9a (Atom/RSS) à¸\82อà¸\87[[Special:Watchlist|à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\84à¸\9bยัà¸\87หน้าในรายการเฝ้าดูของคุณ]]",
+       "resettokens-watchlist-token": "à¹\82à¸\97à¹\80à¸\84à¹\87à¸\99สำหรัà¸\9aà¹\80วà¹\87à¸\9aà¸\9fีà¸\94 (Atom/RSS) à¸\82อà¸\87[[Special:Watchlist|à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\81à¸\81à¹\88หน้าในรายการเฝ้าดูของคุณ]]",
        "resettokens-done": "ตั้งโทเค็นใหม่แล้ว",
        "resettokens-resetbutton": "ตั้งโทเค็นที่เลือกใหม่",
        "bold_sample": "ข้อความตัวหนา",
        "sig_tip": "ลายเซ็นของคุณพร้อมตราเวลา",
        "hr_tip": "เส้นนอน (ใช้อย่างจำกัด)",
        "summary": "คำอธิบายโดยย่อ:",
-       "subject": "หัวà¸\82à¹\89อ/พาดหัว:",
+       "subject": "à¹\80รืà¹\88อà¸\87/พาดหัว:",
        "minoredit": "เป็นการแก้ไขเล็กน้อย",
        "watchthis": "เฝ้าดูหน้านี้",
        "savearticle": "บันทึก",
        "preview": "ตัวอย่าง",
-       "showpreview": "à¸\94ูตัวอย่าง",
+       "showpreview": "à¹\81สà¸\94à¸\87ตัวอย่าง",
        "showdiff": "แสดงความเปลี่ยนแปลง",
        "blankarticle": "<strong>คำเตือน:</strong> หน้าที่คุณกำลังสร้างว่าง หากคุณคลิก \"{{int:savearticle}}\" อีกครั้ง จะสร้างหน้าโดยไม่มีเนื้อหาใด",
-       "anoneditwarning": "'''คำเตือน:''' คุณมิได้ล็อกอิน เลขที่อยู่ไอพีของคุณจะถูกบันทึกไว้ในประวัติการแก้ไขของหน้านี้",
-       "anonpreviewwarning": "'''คุณมิได้ล็อกอิน การบันทึกจะเก็บเลขที่อยู่ไอพีของคุณในประวัติการแก้ไขของหน้านี้'''",
-       "missingsummary": "'''อย่าลืม:''' คุณยังไม่ได้ระบุคำอธิบายการแก้ไข ถ้าคุณกด \"บันทึก\" อีกครั้ง การแก้ไขของคุณจะถูกบันทึกโดยไม่มีคำอธิบายการแก้ไข",
-       "missingcommenttext": "à¸\81รุà¸\93าà¹\83สà¹\88ความเห็นด้านล่าง",
-       "missingcommentheader": "'''ประกาศเตือน:''' คุณยังไม่ได้ใส่หัวข้อ/จ่าหัวสำหรับความเห็นนี้ ถ้าคุณกด \"{{int:savearticle}}\" อีกครั้ง การแก้ไขของคุณจะถูกบันทึกโดยไม่มีหัวข้อ",
-       "summary-preview": "ตัวอย่างคำอธิบายการแก้ไข:",
-       "subject-preview": "à¸\95ัวอยà¹\88าà¸\87หัวà¸\82à¹\89อ/พาดหัว:",
+       "anoneditwarning": "<strong>คำเตือน:</strong> คุณมิได้ล็อกอิน สาธารณะจะเห็นเลขที่อยู่ไอพีของคุณหากคุณแก้ไข หากคุณ<strong>[$1 ล็อกอิน]</strong>หรือ<strong>[$2 สร้างบัญชี]</strong> การแก้ไขของคุณจะถือว่าเป็นของชื่อผู้ใช้ของคุณ ร่วมกับประโยชน์อื่น",
+       "anonpreviewwarning": "<em>คุณมิได้ล็อกอิน การบันทึกจะเก็บเลขที่อยู่ไอพีของคุณในประวัติการแก้ไขของหน้านี้</em>",
+       "missingsummary": "<strong>อย่าลืม:</strong> คุณยังไม่ได้ให้คำอธิบายการแก้ไข \nถ้าคุณคลิก \"{{int:savearticle}}\" อีก จะบันทึกการแก้ไขของคุณโดยไม่มีคำอธิบายการแก้ไข",
+       "missingcommenttext": "à¸\81รุà¸\93าà¸\81รอà¸\81ความเห็นด้านล่าง",
+       "missingcommentheader": "<strong>อย่าลืม:</strong> คุณยังไม่ได้ใส่หัวข้อ/พาดหัวสำหรับความเห็นนี้ \nถ้าคุณคลิก \"{{int:savearticle}}\" อีก จะบันทึกการแก้ไขของคุณโดยไม่มีหัวข้อ/พาดหัว",
+       "summary-preview": "ตัวอย่างคำอธิบาย:",
+       "subject-preview": "à¸\95ัวอยà¹\88าà¸\87à¹\80รืà¹\88อà¸\87/พาดหัว:",
        "blockedtitle": "ผู้ใช้ถูกบล็อก",
-       "blockedtext": "<strong>ชื่อผู้ใช้หรือเลขที่อยู่ไอพีของคุณถูกบล็อก</strong>\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": "à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81อัà¸\95à¹\82à¸\99มัà¸\95ิ à¹\80à¸\9eราะมีà¸\9cูà¹\89à¹\83à¸\8aà¹\89อืà¹\88à¸\99à¹\83à¸\8aà¹\89มาà¸\81à¹\88อà¸\99 à¸\8bึà¹\88à¸\87à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81à¹\82à¸\94ย $1\nà¹\82à¸\94ยà¹\83หà¹\89à¹\80หà¸\95ุà¸\9cลวà¹\88า\n\n:<em>$2</em>\n\n* à¹\80ริà¹\88มà¸\81ารà¸\9aลà¹\87อà¸\81: $8\n* à¸ªà¸´à¹\89à¸\99สุà¸\94à¸\81ารà¸\9aลà¹\87อà¸\81: $6\n* à¸\9cูà¹\89à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81: $7\n\nà¸\84ุà¸\93สามารà¸\96à¸\95ิà¸\94à¸\95à¹\88อ $1 à¸«à¸£à¸·à¸­[[{{MediaWiki:Grouppage-sysop}}|à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9a]]à¸\84à¸\99อืà¹\88à¸\99à¹\80à¸\9eืà¹\88อหารือการบล็อกนี้ \nคุณไม่สามารถใช้คุณลักษณะ \"ส่งอีเมลหาผู้ใช้รายนี้ได้\" จนกว่าจะระบุที่อยู่อีเมลที่ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกห้ามใช้\nเลขที่อยู่ไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 \nโปรดรวมรายละเอียดข้างต้นทั้งหมดในการสอบถามใด ๆ",
+       "blockedtext": "<strong>ชื่อผู้ใช้หรือเลขที่อยู่ไอพีของคุณถูกบล็อก</strong>\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": "à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81อัà¸\95à¹\82à¸\99มัà¸\95ิ à¹\80à¸\9eราะà¹\80à¸\84ยมีà¸\9cูà¹\89à¹\83à¸\8aà¹\89อืà¹\88à¸\99à¹\83à¸\8aà¹\89 à¸\8bึà¹\88à¸\87à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81à¹\82à¸\94ย $1\nà¹\82à¸\94ยà¹\83หà¹\89à¹\80หà¸\95ุà¸\9cลวà¹\88า\n\n:<em>$2</em>\n\n* à¹\80ริà¹\88มà¸\81ารà¸\9aลà¹\87อà¸\81: $8\n* à¸ªà¸´à¹\89à¸\99สุà¸\94à¸\81ารà¸\9aลà¹\87อà¸\81: $6\n* à¸\9cูà¹\89à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81à¸\97ีà¹\88à¹\80à¸\88à¸\95à¸\99า: $7\n\nà¸\84ุà¸\93สามารà¸\96à¸\95ิà¸\94à¸\95à¹\88อ $1 à¸«à¸£à¸·à¸­[[{{MediaWiki:Grouppage-sysop}}|à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9a]]à¸\84à¸\99อืà¹\88à¸\99à¹\80à¸\9eืà¹\88ออภิà¸\9bรายการบล็อกนี้ \nคุณไม่สามารถใช้คุณลักษณะ \"ส่งอีเมลหาผู้ใช้รายนี้ได้\" จนกว่าจะระบุที่อยู่อีเมลที่ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกห้ามใช้\nเลขที่อยู่ไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 \nโปรดรวมรายละเอียดข้างต้นทั้งหมดในการสอบถามใด ๆ",
        "blockednoreason": "ไม่ได้ให้เหตุผล",
        "whitelistedittext": "คุณต้อง$1เพื่อแก้ไขหน้า",
-       "confirmedittext": "คุณต้องยืนยันที่อยู่อีเมลของคุณก่อนแก้ไขหน้า โปรดกำหนดที่อยู่อีเมลของคุณและทำให้ถูกต้องผ่าน[[Special:Preferences|การตั้งค่าผู้ใช้]]",
+       "confirmedittext": "คุณต้องยืนยันที่อยู่อีเมลของคุณก่อนแก้ไขหน้า \nโปรดตั้งและตรวจสอบความสมเหตุสมผลของที่อยู่อีเมลของคุผ่าน[[Special:Preferences|การตั้งค่าผู้ใช้]]",
        "nosuchsectiontitle": "ไม่พบส่วน",
-       "nosuchsectiontext": "คุณพยายามแก้ไขส่วนที่ไม่มีอยู่ ส่วนดังกล่าวอาจถูกย้ายหรือลบขณะที่คุณดูหน้าอยู่",
-       "loginreqtitle": "à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87ลà¹\87อà¸\81อิà¸\99",
+       "nosuchsectiontext": "คุณพยายามแก้ไขส่วนที่ไม่มีอยู่ \nส่วนดังกล่าวอาจถูกย้ายหรือลบขณะที่คุณดูหน้าอยู่",
+       "loginreqtitle": "ต้องล็อกอิน",
        "loginreqlink": "ล็อกอิน",
-       "loginreqpagetext": "à¸\84ุà¸\93à¸\95à¹\89อà¸\87$1เพื่อดูหน้าอื่น",
+       "loginreqpagetext": "à¸\81รุà¸\93า$1เพื่อดูหน้าอื่น",
        "accmailtitle": "ส่งรหัสผ่านแล้ว",
-       "accmailtext": "รหัสà¸\9cà¹\88าà¸\99à¹\81à¸\9aà¸\9aสุà¹\88มà¸\82อà¸\87 [[User talk:$1|$1]] à¸\96ูà¸\81สà¹\88à¸\87à¹\84à¸\9bยัà¸\87 $2 à¹\81ลà¹\89ว à¸ªà¸²à¸¡à¸²à¸£à¸\96à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99à¹\83à¸\99หà¸\99à¹\89า''[[Special:ChangePassword|à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99]]'' หลังล็อกอิน",
+       "accmailtext": "สà¹\88à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\81à¸\9aà¸\9aสุà¹\88มà¸\82อà¸\87 [[User talk:$1|$1]] à¹\84à¸\9b $2 à¹\81ลà¹\89ว à¸ªà¸²à¸¡à¸²à¸£à¸\96à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99à¹\83à¸\99หà¸\99à¹\89า<em>[[Special:ChangePassword|à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99]]</em> หลังล็อกอิน",
        "newarticle": "(ใหม่)",
-       "newarticletext": "คุณตามลิงก์ไปยังหน้าที่ยังไม่มีในขณะนี้\nในการสร้างหน้า เริ่มพิมพ์ในกล่องด้านล่าง (ดูข้อมูลเพิ่มเติมใน[$1 หน้าคำอธิบาย])\nถ้าคุณเข้ามาหน้านี้โดยผิดพลาด ให้กดปุ่ม'''ถอยหลัง''' (back) ของเบราว์เซอร์",
-       "anontalkpagetext": "----\n<em>หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¸\84ุยà¸\81ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89สำหรัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ิรà¸\99ามà¸\8bึà¹\88à¸\87ยัà¸\87à¹\84มà¹\88à¹\84à¸\94à¹\89สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีหรือà¹\84มà¹\88à¹\84à¸\94à¹\89à¹\83à¸\8aà¹\89</em>\nดังนั้นเราจึงระบุตัวตนโดยใช้เลขที่อยู่ไอพีแทน\nเลขที่อยู่ไอพีนี้อาจมีผู้ใช้ร่วมกันหลายคน\nถ้าคุณเป็นผู้ใช้นิรนาม และรู้สึกว่าคุณได้รับความเห็นที่ไม่เกี่ยวข้องส่งหาคุณ กรุณา[[Special:UserLogin/signup|สร้างบัญชี]]หรือ[[Special:UserLogin|ล็อกอิน]] เพื่อป้องกันการสับสนกับผู้ใช้นิรนามรายอื่นในอนาคต",
+       "newarticletext": "คุณตามลิงก์ไปยังหน้าที่ยังไม่มีในขณะนี้\nในการสร้างหน้า เริ่มพิมพ์ในกล่องด้านล่าง (ดูข้อมูลเพิ่มเติมใน[$1 หน้าคำอธิบาย])\nถ้าคุณเข้ามาหน้านี้โดยผิดพลาด ให้กดปุ่ม<strong>ถอยหลัง</strong> (back) ของเบราว์เซอร์",
+       "anontalkpagetext": "----\n<em>หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¸\84ุยà¸\81ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89สำหรัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ิรà¸\99ามà¸\8bึà¹\88à¸\87ยัà¸\87à¹\84มà¹\88à¹\84à¸\94à¹\89สรà¹\89าà¸\87หรือà¹\83à¸\8aà¹\89à¸\9aัà¸\8dà¸\8aี</em>\nดังนั้นเราจึงระบุตัวตนโดยใช้เลขที่อยู่ไอพีแทน\nเลขที่อยู่ไอพีนี้อาจมีผู้ใช้ร่วมกันหลายคน\nถ้าคุณเป็นผู้ใช้นิรนาม และรู้สึกว่าคุณได้รับความเห็นที่ไม่เกี่ยวข้องส่งหาคุณ กรุณา[[Special:UserLogin/signup|สร้างบัญชี]]หรือ[[Special:UserLogin|ล็อกอิน]] เพื่อป้องกันการสับสนกับผู้ใช้นิรนามรายอื่นในอนาคต",
        "noarticletext": "ปัจจุบันไม่มีข้อความในหน้านี้\nคุณสามารถ[[Special:Search/{{PAGENAME}}|ค้นหาชื่อหน้านี้]]ในหน้าอื่น <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ค้นหาปูมที่เกี่ยวข้อง] หรือ[{{fullurl:{{FULLPAGENAME}}|action=edit}} แก้ไขหน้านี้]</span>",
        "noarticletext-nopermission": "ปัจจุบันไม่มีข้อความในหน้านี้\nคุณสามารถ[[Special:Search/{{PAGENAME}}|ค้นหาชื่อหน้านี้]]ในหน้าอื่น หรือ<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ค้นหาปูมที่เกี่ยวข้อง]</span> แต่คุณไม่มีสิทธิสร้างหน้านี้",
        "missing-revision": "ไม่มีรุ่นปรับปรุง #$1 ของหน้าชื่อ \"{{FULLPAGENAME}}\" \n\nปกติเกิดจากการตามการโยงประวัติเก่าไปยังหน้าที่ถูกลบแล้ว\nดูรายละเอียดได้ที่[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
        "userpage-userdoesnotexist": "บัญชีผู้ใช้ \"$1\" มิได้ลงทะเบียน \nกรุณาตรวจสอบหากคุณต้องการสร้าง/แก้ไขหน้านี้",
        "userpage-userdoesnotexist-view": "บัญชีผู้ใช้ \"$1\" มิได้ลงทะเบียน",
        "blocked-notice-logextract": "ปัจจุบันผู้ใช้นี้ถูกบล็อก\nหน่วยปูมการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:",
-       "clearyourcache": "'''หมายเหตุ:''' หลังจากบันทึก คุณอาจต้องล้างแคชเว็บเบราว์เซอร์ของคุณเพื่อดูการเปลี่ยนแปลง\n* '''ไฟร์ฟอกซ์ / ซาฟารี:''' กดปุ่ม ''Shift'' ค้างไว้ขณะคลิก ''Reload'' หรือกด ''Ctrl-F5'' หรือ ''Ctrl-R'' (''⌘-R'' บนแมค)\n* '''กูเกิล โครม:''' กดปุ่ม ''Ctrl-Shift-R'' (''⌘-Shift-R'' บนแมค)\n* '''อินเทอร์เน็ตเอกซ์พลอเรอร์:''' กดปุ่ม ''Ctrl'' ค้างไว้ขณะคลิก ''Refresh'' หรือกด ''Ctrl-F5''\n* '''โอเปร่า:''' ล้างแคชใน ''Tools → Preferences''",
-       "usercssyoucanpreview": "'''คำแนะนำ:''' กดปุ่ม \"{{int:showpreview}}\" เพื่อทดสอบ CSS ใหม่ของคุณก่อนบันทึก",
-       "userjsyoucanpreview": "'''คำแนะนำ:''' กดปุ่ม \"{{int:showpreview}}\" เพื่อทดสอบจาวาสคริปต์ใหม่ของคุณก่อนบันทึก",
-       "usercsspreview": "'''อย่าลืมว่าคุณกำลังดูตัวอย่าง CSS ผู้ใช้ของคุณ'''\n'''ยังไม่ได้ถูกบันทึก!'''",
-       "userjspreview": "'''อย่าลืมว่าคุณกำลังทดสอบ/ดูตัวอย่างจาวาสคริปต์ผู้ใช้ของคุณ'''\n'''ยังไม่ถูกบันทึก!'''",
-       "sitecsspreview": "'''พึงระลึกว่าคุณกำลังแสดงตัวอย่าง CSS นี้เท่านั้น'''\n'''ยังไม่ได้ถูกบันทึก!'''",
-       "sitejspreview": "'''พึงระลึกว่าคุณกำลังแสดงตัวอย่างโค้ดจาวาสคริปต์นี้เท่านั้น'''\n'''ยังไม่ได้ถูกบันทึก!'''",
-       "userinvalidcssjstitle": "'''คำเตือน:''' ไม่มีหน้าตา \"$1\" หน้า .css และ .js ที่ปรับแต่งเอง ใช้ตัวเล็กทั้งหมด เช่น {{ns:user}}:Foo/vector.css มิใช่ {{ns:user}}:Foo/Vector.css",
+       "clearyourcache": "<strong>หมายเหตุ:</strong> หลังบันทึก คุณอาจต้องล้างแคชเว็บเบราว์เซอร์ของคุณเพื่อดูการเปลี่ยนแปลง\n* <strong>ไฟร์ฟอกซ์ / ซาฟารี:</strong> กด <em>Shift</em> ค้างขณะคลิก <em>Reload</em> หรือกด <em>Ctrl-F5</em> หรือ <em>Ctrl-R</em> (<em>⌘-R</em> บนแมค)\n* <strong>กูเกิล โครม:</strong> กด <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> บนแมค)\n* <strong>อินเทอร์เน็ตเอกซ์พลอเรอร์:</strong> กด <em>Ctrl</em> ค้างขณะคลิก <em>Refresh</em> หรือกด <em>Ctrl-F5</em>\n* <strong>โอเปร่า:</strong> ล้างแคชใน <em>Tools → Preferences</em>",
+       "usercssyoucanpreview": "<strong>คำแนะนำ:</strong> กดปุ่ม \"{{int:showpreview}}\" เพื่อทดสอบ CSS ใหม่ของคุณก่อนบันทึก",
+       "userjsyoucanpreview": "<strong>คำแนะนำ:</strong> กดปุ่ม \"{{int:showpreview}}\" เพื่อทดสอบจาวาสคริปต์ใหม่ของคุณก่อนบันทึก",
+       "usercsspreview": "<strong>พึงระลึกว่าคุณเพียงกำลังดูตัวอย่าง CSS ผู้ใช้ของคุณ\nยังไม่ได้บันทึก!</strong>",
+       "userjspreview": "<strong>พึงระลึกว่าคุณกำลังทดสอบ/ดูตัวอย่างจาวาสคริปต์ผู้ใช้ของคุณ\nยังไม่ได้บันทึก!</strong>",
+       "sitecsspreview": "<strong>พึงระลึกว่าคุณเพียงกำลังแสดงตัวอย่าง CSS นี้\nยังไม่ได้บันทึก!</strong>",
+       "sitejspreview": "<strong>พึงระลึกว่าคุณเพียงกำลังแสดงตัวอย่างโค้ดจาวาสคริปต์นี้\nยังไม่ได้บันทึก!</strong>",
+       "userinvalidcssjstitle": "<strong>คำเตือน:</strong> ไม่มีหน้าตา \"$1\" หน้า .css และ .js ใช้ตัวเล็กทั้งหมด เช่น {{ns:user}}:Foo/vector.css มิใช่ {{ns:user}}:Foo/Vector.css",
        "updated": "(ปรับแล้ว)",
-       "note": "'''หมายเหตุ:'''",
-       "previewnote": "'''พึงระลึกว่านี่เป็นเพียงการแสดงตัวอย่างเท่านั้น'''\nการเปลี่ยนแปลงของคุณยังไม่ได้ถูกบันทึก!",
-       "continue-editing": "à¹\84à¸\9bยัà¸\87à¸\9eืà¹\89à¸\99à¸\97ีà¹\88à¹\81à¸\81à¹\89à¹\84à¸\82",
-       "previewconflict": "à¸\81ารà¹\81สà¸\94à¸\87à¸\95ัวอยà¹\88าà¸\87à¸\99ีà¹\89สะà¸\97à¹\89อà¸\99à¸\82à¹\89อà¸\84วามà¹\83à¸\99à¸\9eืà¹\89à¸\99à¸\97ีà¹\88à¹\81à¸\81à¹\89à¹\84à¸\82à¸\82à¹\89อà¸\84วามสà¹\88วà¸\99à¸\9aà¸\99à¸\8bึà¹\88à¸\87à¸\88ะà¸\9bราà¸\81à¸\8fหาà¸\81à¸\84ุà¸\93à¹\80ลือà¸\81à¸\9aัà¸\99à¸\97ึà¸\81",
-       "session_fail_preview": "'''ขออภัย ไม่สามารถดำเนินการแก้ไขต่อได้ เนื่องจากข้อมูลช่วงเวลาสื่อสารสูญหาย'''\nโปรดทดลองอีกครั้ง หากยังเสียอยู่ ลอง[[Special:UserLogout|ล็อกเอาต์]]และล็อกอินกลับมา",
-       "session_fail_preview_html": "'''ขออภัย ไม่สามารถดำเนินการแก้ไขต่อได้ เนื่องจากข้อมูลช่วงเวลาสื่อสารสูญหาย'''\n\n''เนื่องจาก {{SITENAME}} เปิดใช้งานเอชทีเอ็มแอลล้วน การแสดงตัวอย่างจะถูกซ่อนไว้เพื่อป้องกันการโจมตีด้วยจาวาสคริปต์''\n\n'''หากนี่เป็นความพยายามแก้ไขโดยชอบ โปรดลองอีกครั้งหนึ่ง''' หากยังเสียอยู่ ลอง[[Special:UserLogout|ล็อกเอาต์]]และล็อกอินกลับมา",
-       "token_suffix_mismatch": "'''การแก้ไขของคุณถูกปฏิเสธ เนื่องจากเครื่องลูกข่ายที่คุณใช้ทำให้อักขระเครื่องหมายวรรคตอนในตราสารประจำการแก้ไข (edit token) เสีย'''\nการแก้ไขนี้ถูกปฏิเสธเพื่อป้องกันการวิบัติของข้อความหน้า\nบางครั้งเกิดปัญหานี้ขึ้นเมื่อคุณใช้บริการเว็บพร็อกซีนิรนามที่มีบั๊ก",
-       "edit_form_incomplete": "'''แบบแก้ไขบางส่วนไปไม่ถึงเซิร์ฟเวอร์ ตรวจสอบอีกครั้งว่าการแก้ไขของคุณยังอยู่และลองอีกครั้ง'''",
+       "note": "<strong>หมายเหตุ:</strong>",
+       "previewnote": "<strong>พึงระลึกว่านี่เป็นเพียงการแสดงตัวอย่าง</strong>\nยังไม่ได้บันทึกการเปลี่ยนแปลงของคุณ!",
+       "continue-editing": "ไปพื้นที่แก้ไข",
+       "previewconflict": "ตัวอย่างนี้สะท้อนข้อความในพื้นที่แก้ไขข้อความส่วนบนซึ่งจะปรากฏหากคุณเลือกบันทึก",
+       "session_fail_preview": "<strong>ขออภัย! ไม่สามารถดำเนินการแก้ไขของคุณได้ เนื่องจากข้อมูลช่วงเวลาสื่อสารสูญหาย</strong>\nโปรดลองอีกครั้ง \nหากยังเสียอยู่ ลอง[[Special:UserLogout|ล็อกเอาต์]]และล็อกอินกลับมา",
+       "session_fail_preview_html": "<strong>ขออภัย! ไม่สามารถดำเนินการแก้ไขของคุณต่อได้ เนื่องจากข้อมูลช่วงเวลาสื่อสารสูญหาย</strong>\n\n<em>เนื่องจาก {{SITENAME}} เปิดใช้งานเอชทีเอ็มแอลล้วน การแสดงตัวอย่างจะถูกซ่อนไว้เพื่อป้องกันการโจมตีด้วยจาวาสคริปต์</em>\n\n<strong>หากนี่เป็นความพยายามแก้ไขโดยชอบ โปรดลองอีกครั้งหนึ่ง</strong> \nหากยังเสียอยู่ ลอง[[Special:UserLogout|ล็อกเอาต์]]และล็อกอินกลับมา",
+       "token_suffix_mismatch": "<strong>การแก้ไขของคุณถูกปฏิเสธ เนื่องจากเครื่องลูกข่ายของคุณทำให้อักขระเครื่องหมายวรรคตอนในโทเค็นการแก้ไขเสีย</strong>\nการแก้ไขนี้ถูกปฏิเสธเพื่อป้องกันการวิบัติของข้อความหน้า\nบางครั้งเกิดปัญหานี้ขึ้นเมื่อคุณใช้บริการเว็บพร็อกซีนิรนามที่มีจุดบกพร่อง",
+       "edit_form_incomplete": "<strong>แบบแก้ไขบางส่วนไปไม่ถึงเซิร์ฟเวอร์ ตรวจสอบอีกครั้งว่าการแก้ไขของคุณยังอยู่และลองอีกครั้ง</strong>",
        "editing": "กำลังแก้ไข $1",
        "creating": "กำลังสร้าง $1",
        "editingsection": "กำลังแก้ไข $1 (เฉพาะส่วน)",
        "editingcomment": "กำลังแก้ไข $1 (ส่วนใหม่)",
        "editconflict": "แก้ไขชนกัน: $1",
-       "explainconflict": "à¹\83à¸\84รà¸\9aาà¸\87à¸\84à¸\99à¹\84à¸\94à¹\89à¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\84ุà¸\93à¸\81ำลัà¸\87à¹\81à¸\81à¹\89à¹\84à¸\82\nà¸\9eืà¹\89à¸\99à¸\97ีà¹\88à¸\82à¹\89อà¸\84วามสà¹\88วà¸\99à¸\9aà¸\99มีà¸\82à¹\89อà¸\84วามหà¸\99à¹\89าà¸\97ีà¹\88มีอยูà¹\88à¹\83à¸\99à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99\nà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¹\81สà¸\94à¸\87อยูà¹\88à¹\83à¸\99à¸\9eืà¹\89à¸\99à¸\97ีà¹\88à¸\82à¹\89อà¸\84วามสà¹\88วà¸\99ลà¹\88าà¸\87\nà¸\84ุà¸\93à¸\88ะà¸\95à¹\89อà¸\87รวมà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\82อà¸\87à¸\84ุà¸\93à¹\80à¸\82à¹\89าà¸\81ัà¸\9aà¸\82à¹\89อà¸\84วามà¸\97ีà¹\88มีอยูà¹\88\n'''à¹\80à¸\89à¸\9eาะ'''à¸\82à¹\89อà¸\84วามà¹\83à¸\99à¸\9eืà¹\89à¸\99à¸\97ีà¹\88à¸\82à¹\89อà¸\84วามสà¹\88วà¸\99à¸\9aà¸\99à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99à¸\97ีà¹\88à¸\88ะà¸\96ูà¸\81à¸\9aัà¸\99à¸\97ึà¸\81 à¹\80มืà¹\88อà¸\81à¸\94à¸\9bุà¹\88ม \"{{int:savearticle}}\"",
+       "explainconflict": "มีà¸\9cูà¹\89à¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\84ุà¸\93à¹\80ริà¹\88มà¹\81à¸\81à¹\89à¹\84à¸\82\nà¸\9eืà¹\89à¸\99à¸\97ีà¹\88à¸\82à¹\89อà¸\84วามสà¹\88วà¸\99à¸\9aà¸\99มีà¸\82à¹\89อà¸\84วามหà¸\99à¹\89าà¸\97ีà¹\88มีอยูà¹\88à¹\83à¸\99à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99\nà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¹\81สà¸\94à¸\87อยูà¹\88à¹\83à¸\99à¸\9eืà¹\89à¸\99à¸\97ีà¹\88à¸\82à¹\89อà¸\84วามสà¹\88วà¸\99ลà¹\88าà¸\87\nà¸\84ุà¸\93à¸\88ะà¸\95à¹\89อà¸\87รวมà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\82อà¸\87à¸\84ุà¸\93à¹\80à¸\82à¹\89าà¸\81ัà¸\9aà¸\82à¹\89อà¸\84วามà¸\97ีà¹\88มีอยูà¹\88\n<strong>à¹\80à¸\89à¸\9eาะ</strong>à¸\82à¹\89อà¸\84วามà¹\83à¸\99à¸\9eืà¹\89à¸\99à¸\97ีà¹\88à¸\82à¹\89อà¸\84วามสà¹\88วà¸\99à¸\9aà¸\99à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99à¸\97ีà¹\88à¸\88ะà¸\96ูà¸\81à¸\9aัà¸\99à¸\97ึà¸\81 à¹\80มืà¹\88อà¸\81à¸\94 \"{{int:savearticle}}\"",
        "yourtext": "ข้อความของคุณ",
        "storedversion": "รุ่นที่เก็บไว้",
-       "nonunicodebrowser": "'''คำเตือน: เว็บเบราว์เซอร์นี้ไม่สนับสนุนการใช้งานแบบยูนิโคด ตัวอักษรที่ไม่ใช่แบบแอสกีจะแสดงในกล่องการแก้ไขในลักษณะรหัสเลขฐานสิบหก'''",
-       "editingold": "'''คำเตือน: ข้อมูลที่แก้ไขอยู่ไม่ใช่ข้อมูลใหม่ล่าสุดของหน้านี้ ถ้าทำการบันทึกไป การเปลี่ยนแปลงที่เกิดขึ้นระหว่างรุ่นนี้กับรุ่นใหม่จะสูญหาย'''",
+       "nonunicodebrowser": "<strong>คำเตือน: เบราว์เซอร์ของคุณไม่สนับสนุนยูนิโคด</strong> \nการแก้ไขไปพลางจะทำให้คุณแก้ไขหน้าได้อย่างปลอดภัย: อักขระที่มิใช่ ASCII จะปรากฏในกล่องแก้ไขเป็นรหัสฐานสิบหก",
+       "editingold": "<strong>คำเตือน: คุณกำลังแก้ไขรุ่นที่ล้าสมัยของหน้านี้</strong> ถ้าคุณบันทึก การเปลี่ยนแปลงใด ๆ หลังรุ่นนี้จะหาย",
        "yourdiff": "ความแตกต่าง",
-       "copyrightwarning": "à¹\82à¸\9bรà¸\94อยà¹\88าลืมวà¹\88าà¸\87าà¸\99à¹\80à¸\82ียà¸\99à¸\97ัà¹\89à¸\87หมà¸\94à¹\83à¸\99 {{SITENAME}} à¸\9cูà¹\89à¹\80à¸\82ียà¸\99à¸\97ัà¹\89à¸\87หมà¸\94ยิà¸\99à¸\94ีà¹\83หà¹\89à¸\87าà¸\99à¹\80à¸\81à¹\87à¸\9aà¹\84วà¹\89ภายà¹\83à¸\95à¹\89สัà¸\8dà¸\8dาลิà¸\82สิà¸\97à¸\98ิà¹\8c $2 (à¸\94ู $1 à¸ªà¸³à¸«à¸£à¸±à¸\9aà¸\82à¹\89อมูลà¹\80à¸\9eิà¹\88มà¹\80à¸\95ิม)\nà¸\96à¹\89าà¸\84ุà¸\93à¹\84มà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\83หà¹\89à¸\87าà¸\99à¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81à¹\81à¸\81à¹\89à¹\84à¸\82 à¸«à¸£à¸·à¸­à¹\84มà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\83หà¹\89à¸\87าà¸\99à¹\80à¸\9cยà¹\81à¸\9eรà¹\88à¸\95ามà¸\97ีà¹\88à¹\84à¸\94à¹\89à¸\81ลà¹\88าวà¹\84วà¹\89 à¸­à¸¢à¹\88าสà¹\88à¸\87à¸\82à¹\89อà¸\84วามà¹\80à¸\82à¹\89ามาà¸\97ีà¹\88à¸\99ีà¹\88<br />\nà¸\99อà¸\81à¸\88าà¸\81à¸\99ีà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\82à¹\89อà¸\84วามà¸\97ีà¹\88สà¹\88à¸\87à¹\80à¸\82à¹\89ามาà¹\84à¸\94à¹\89à¹\80à¸\82ียà¸\99à¸\94à¹\89วยà¸\95ัวà¹\80อà¸\87 à¹\84มà¹\88à¹\84à¸\94à¹\89à¸\84ัà¸\94ลอà¸\81 à¸«à¸£à¸·à¸­à¸\97ำà¸\8bà¹\89ำà¸\88าà¸\81à¹\81หลà¹\88à¸\87อืà¹\88à¸\99\n'''อยà¹\88าสà¹\88à¸\87à¸\87าà¸\99à¸\97ีà¹\88มีลิà¸\82สิà¸\97à¸\98ิà¹\8cà¹\80à¸\82à¹\89ามาà¸\81à¹\88อà¸\99à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95à¸\88าà¸\81à¹\80à¸\88à¹\89าà¸\82อà¸\87!'''",
-       "copyrightwarning2": "à¹\82à¸\9bรà¸\94อยà¹\88าลืมวà¹\88าà¸\87าà¸\99à¹\80à¸\82ียà¸\99à¸\97ัà¹\89à¸\87หมà¸\94à¹\83à¸\99 {{SITENAME}} à¸­à¸²à¸\88à¸\88ะà¸\96ูà¸\81à¹\81à¸\81à¹\89à¹\84à¸\82 à¸\94ัà¸\94à¹\81à¸\9bลà¸\87 à¸«à¸£à¸·à¸­à¸¥à¸\9aออà¸\81à¹\82à¸\94ยà¸\9cูà¹\89รà¹\88วมà¹\80à¸\82ียà¸\99à¸\84à¸\99อืà¹\88à¸\99\nà¸\96à¹\89าà¸\84ุà¸\93à¹\84มà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\83หà¹\89à¸\87าà¸\99à¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81à¹\81à¸\81à¹\89à¹\84à¸\82 à¸«à¸£à¸·à¸­à¹\84มà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\83หà¹\89à¸\87าà¸\99à¹\80à¸\9cยà¹\81à¸\9eรà¹\88à¸\95ามà¸\97ีà¹\88à¸\81ลà¹\88าวà¹\84วà¹\89 à¸­à¸¢à¹\88าสà¹\88à¸\87à¸\82à¹\89อà¸\84วามà¸\82อà¸\87à¸\84ุà¸\93à¹\80à¸\82à¹\89ามาà¸\97ีà¹\88à¸\99ีà¹\88<br />\nà¸\99อà¸\81à¸\88าà¸\81à¸\99ีà¹\89à¸\84ุà¸\93à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\82à¹\89อà¸\84วามà¸\97ีà¹\88สà¹\88à¸\87à¹\80à¸\82à¹\89ามาà¸\84ุà¸\93à¹\84à¸\94à¹\89à¹\80à¸\82ียà¸\99à¸\94à¹\89วยà¸\95ัวà¹\80อà¸\87 à¹\84มà¹\88à¹\84à¸\94à¹\89à¸\84ัà¸\94ลอà¸\81 à¸\97ำà¸\8bà¹\89ำสà¹\88วà¸\99หà¸\99ึà¹\88à¸\87สà¹\88วà¸\99à¹\83à¸\94หรือà¸\97ัà¹\89à¸\87หมà¸\94à¸\88าà¸\81à¹\81หลà¹\88à¸\87อืà¹\88à¸\99 (à¸\94ูรายละà¹\80อียà¸\94à¸\97ีà¹\88 $1)\n'''อยà¹\88าสà¹\88à¸\87à¸\87าà¸\99à¸\97ีà¹\88มีลิà¸\82สิà¸\97à¸\98ิà¹\8cà¹\80à¸\82à¹\89ามาà¸\81à¹\88อà¸\99à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95à¸\88าà¸\81à¹\80à¸\88à¹\89าà¸\82อà¸\87!'''",
-       "longpageerror": "'''ข้อผิดพลาด: ข้อความที่คุณส่งเข้ามามีขนาด $1 กิโลไบต์\nซึ่งเกินกว่าขนาดสูงสุดซึ่งกำหนดไว้ที่ $2 กิโลไบต์ จึงไม่สามารถบันทึกได้'''",
-       "readonlywarning": "'''คำเตือน: ฐานข้อมูลถูกล็อกเพื่อบำรุงรักษา คุณจึงไม่สามารถบันทึกการเปลี่ยนแปลงของคุณได้ในขณะนี้'''\nคุณอาจต้องการคัดลอกและวางข้อความของคุณในไฟล์ข้อความ และบันทึกไว้ใช้ภายหลัง\n\nผู้ดูแลระบบที่ล็อกฐานข้อมูลได้ให้คำอธิบายดังนี้: $1",
-       "protectedpagewarning": "'''คำเตือน: หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้น'''\nรายการปูมล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง:",
-       "semiprotectedpagewarning": "'''หมายเหตุ:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้น\nรายการแก้ไขล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง",
-       "cascadeprotectedwarning": "'''คำเตือน:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้น เนื่องจากหน้านี้สืบทอดการล็อกมาจาก{{PLURAL:$1|หน้า|หน้า}}ต่อไปนี้:",
-       "titleprotectedwarning": "'''คำเตือน: หน้านี้ได้รับการป้องกัน สร้างได้เฉพาะผู้ใช้ที่มี[[Special:ListGroupRights|สิทธิจำเพาะ]]เท่านั้น'''\nรายการปูมล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง",
+       "copyrightwarning": "à¹\82à¸\9bรà¸\94ระลึà¸\81วà¹\88าà¸\87าà¸\99à¹\80à¸\82ียà¸\99à¸\97ัà¹\89à¸\87หมà¸\94à¹\83à¸\99 {{SITENAME}} à¸\96ือวà¹\88าà¹\80à¸\9cยà¹\81à¸\9eรà¹\88ภายà¹\83à¸\95à¹\89 $2 (à¸\94ูรายละà¹\80อียà¸\94à¸\97าà¸\87 $1)\nหาà¸\81à¸\84ุà¸\93à¹\84มà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\83หà¹\89à¸\87าà¸\99à¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81à¹\81à¸\81à¹\89à¹\84à¸\82à¹\81ละà¸\81ระà¸\88ายà¹\84à¸\94à¹\89à¸\95ามà¹\83à¸\88 à¸\81à¹\87อยà¹\88าสà¹\88à¸\87à¹\80à¸\82à¹\89ามา<br />\nà¸\99อà¸\81à¸\88าà¸\81à¸\99ีà¹\89 à¸\84ุà¸\93ยัà¸\87สัà¸\8dà¸\8dาà¹\80ราวà¹\88าà¸\84ุà¸\93à¹\80à¸\82ียà¸\99à¸\87าà¸\99à¸\94à¹\89วยà¸\95à¸\99à¹\80อà¸\87 à¸«à¸£à¸·à¸­à¸\84ัà¸\94ลอà¸\81à¸\88าà¸\81สาà¸\98ารà¸\93สมà¸\9aัà¸\95ิหรือà¸\97รัà¸\9eยาà¸\81รà¹\80สรีà¸\97ีà¹\88à¸\84ลà¹\89ายà¸\81ัà¸\99\n<strong>อยà¹\88าสà¹\88à¸\87à¸\87าà¸\99มีลิà¸\82สิà¸\97à¸\98ิà¹\8cà¹\82à¸\94ยà¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95!</strong>",
+       "copyrightwarning2": "à¹\82à¸\9bรà¸\94ระลึà¸\81วà¹\88าà¸\87าà¸\99à¹\80à¸\82ียà¸\99à¸\97ัà¹\89à¸\87หมà¸\94à¹\83à¸\99 {{SITENAME}} à¸­à¸²à¸\88à¸\96ูà¸\81à¸\9cูà¹\89à¹\80à¸\82ียà¸\99อืà¹\88à¸\99à¹\81à¸\81à¹\89à¹\84à¸\82 à¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87หรือà¸\99ำออà¸\81\nหาà¸\81à¸\84ุà¸\93à¹\84มà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\83หà¹\89à¸\87าà¸\99à¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81à¹\81à¸\81à¹\89à¹\84à¸\82 à¸\81à¹\87อยà¹\88าสà¹\88à¸\87à¹\80à¸\82à¹\89ามา<br />\nà¸\99อà¸\81à¸\88าà¸\81à¸\99ีà¹\89 à¸\84ุà¸\93ยัà¸\87สัà¸\8dà¸\8dาà¹\80ราวà¹\88าà¸\84ุà¸\93à¹\80à¸\82ียà¸\99à¸\87าà¸\99à¸\94à¹\89วยà¸\95à¸\99à¹\80อà¸\87 à¸«à¸£à¸·à¸­à¸\84ัà¸\94ลอà¸\81à¸\88าà¸\81สาà¸\98ารà¸\93สมà¸\9aัà¸\95ิหรือà¸\97รัà¸\9eยาà¸\81รà¹\80สรีà¸\97ีà¹\88à¸\84ลà¹\89ายà¸\81ัà¸\99 (à¸\94ูรายละà¹\80อียà¸\94à¸\97ีà¹\88 $1)\n<strong>อยà¹\88าสà¹\88à¸\87à¸\87าà¸\99มีลิà¸\82สิà¸\97à¸\98ิà¹\8cà¹\82à¸\94ยà¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95!</strong>",
+       "longpageerror": "<strong>ข้อผิดพลาด: ข้อความที่คุณส่งมีขนาด $1 กิโลไบต์\nซึ่งเกินสูงสุด $2 กิโลไบต์</strong>\nไม่สามารถบันทึกได้",
+       "readonlywarning": "<strong>คำเตือน: ฐานข้อมูลถูกล็อกเพื่อบำรุงรักษา คุณจึงไม่สามารถบันทึกการเปลี่ยนแปลงของคุณได้ในขณะนี้</strong>\nคุณอาจต้องการคัดลอกและวางข้อความของคุณในไฟล์ข้อความ และบันทึกไว้ภายหลัง\n\nผู้ดูแลระบบที่ล็อกฐานข้อมูลให้คำอธิบายดังนี้: $1",
+       "protectedpagewarning": "<strong>คำเตือน: หน้านี้ถูกล็อก เพื่อให้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบแก้ไขได้เท่านั้น</strong>\nรายการปูมล่าสุดจัดไว้ด้านล่างเพื่อการอ้างอิง:",
+       "semiprotectedpagewarning": "<strong>หมายเหตุ:</strong> หน้านี้ถูกล็อก เพื่อให้เฉพาะผู้ใช้ลงทะเบียนสามารถแก้ไขเท่านั้น\nรายการปูมล่าสุดได้จัดไว้ด้านล่างนี้เพื่อการอ้างอิง",
+       "cascadeprotectedwarning": "<strong>คำเตือน:</strong> หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้น เนื่องจากหน้านี้สืบทอดการล็อกมาจาก{{PLURAL:$1|หน้า|หน้า}}ต่อไปนี้:",
+       "titleprotectedwarning": "<strong>คำเตือน: หน้านี้ได้รับการป้องกัน สร้างได้เฉพาะผู้ใช้ที่มี[[Special:ListGroupRights|สิทธิจำเพาะ]]เท่านั้น</strong>\nรายการปูมล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง",
        "templatesused": "{{PLURAL:$1|แม่แบบ}}ที่ใช้ในหน้านี้:",
-       "templatesusedpreview": "{{PLURAL:$1|à¹\81มà¹\88à¹\81à¸\9aà¸\9a}}à¸\97ีà¹\88à¹\83à¸\8aà¹\89à¹\83à¸\99à¸\81ารà¹\81สà¸\94à¸\87à¸\95ัวอยà¹\88าà¸\87:",
+       "templatesusedpreview": "{{PLURAL:$1|à¹\81มà¹\88à¹\81à¸\9aà¸\9a}}à¸\97ีà¹\88à¹\83à¸\8aà¹\89à¹\83à¸\99à¸\95ัวอยà¹\88าà¸\87à¸\99ีà¹\89:",
        "templatesusedsection": "{{PLURAL:$1|แม่แบบ}}ที่ใช้ในส่วนนี้:",
        "template-protected": "(ถูกล็อก)",
        "template-semiprotected": "(ถูกกึ่งล็อก)",
        "hiddencategories": "หน้านี้มี {{PLURAL:$1|1 หมวดหมู่ที่ซ่อนอยู่|$1 หมวดหมู่ที่ซ่อนอยู่}}:",
        "edittools": "<!-- ข้อความนี้จะแสดงผลใต้ฟอร์มสำหรับการแก้ไขและอัปโหลด -->",
        "nocreatetext": "{{SITENAME}} จำกัดการสร้างหน้าใหม่\nคุณสามารถย้อนกลับไปแก้ไขหน้าที่มีอยู่เดิม หรือ[[Special:UserLogin|ล็อกอินหรือสร้างบัญชีผู้ใช้]]",
-       "nocreate-loggedin": "à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89สร้างหน้าใหม่",
+       "nocreate-loggedin": "à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิสร้างหน้าใหม่",
        "sectioneditnotsupported-title": "ไม่สนับสนุนการแก้ไขหัวข้อย่อย",
        "sectioneditnotsupported-text": "ไม่สนับสนุนการแก้ไขหัวข้อย่อยในหน้านี้",
        "permissionserrors": "ข้อผิดพลาดในการใช้สิทธิ",
-       "permissionserrorstext": "à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aสิà¸\97à¸\98ิà¹\83à¸\99à¸\81ารà¸\97ำสิà¹\88à¸\87à¸\99ีà¹\89 เนื่องจาก{{PLURAL:$1|เหตุผล|เหตุผล}}ต่อไปนี้:",
+       "permissionserrorstext": "à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¸\97ำà¹\80à¸\8aà¹\88à¸\99à¸\99ัà¹\89à¸\99 เนื่องจาก{{PLURAL:$1|เหตุผล|เหตุผล}}ต่อไปนี้:",
        "permissionserrorstext-withaction": "คุณไม่มีสิทธิ$2 ด้วย{{PLURAL:$1|เหตุ|เหตุ}}ต่อไปนี้:",
-       "recreate-moveddeleted-warn": "'''คำเตือน: คุณกำลังสร้างหน้าซึ่งได้ถูกลบไปก่อนหน้านี้แล้วอีกครั้ง'''\n\nคุณควรพิจารณาว่าการแก้ไขหน้านี้ต่อไปเหมาะสมหรือไม่\nปูมการลบและเปลี่ยนชื่อหน้านี้ได้แสดงไว้ด้านล่างเพื่อความสะดวก:",
-       "moveddeleted-notice": "หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¸\9a\nà¸\9bูมà¸\81ารลà¸\9aà¹\81ละà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¹\84à¸\94à¹\89à¹\81สà¸\94à¸\87à¹\84วà¹\89à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9eืà¹\88ออà¹\89าà¸\87อิà¸\87",
+       "recreate-moveddeleted-warn": "<strong>คำเตือน: คุณกำลังสร้างหน้าซึ่งได้ถูกลบไปก่อนหน้านี้แล้วอีกครั้ง</strong>\n\nคุณควรพิจารณาว่าการแก้ไขหน้านี้ต่อไปเหมาะสมหรือไม่\nปูมการลบและเปลี่ยนชื่อหน้านี้จัดไว้ด้านล่างเพื่อความสะดวก:",
+       "moveddeleted-notice": "หน้านี้ถูกลบ\nปูมการลบและเปลี่ยนชื่อของหน้านี้แสดงไว้ด้านล่างเพื่ออ้างอิง",
        "log-fulllog": "ดูปูมแบบเต็ม",
-       "edit-hook-aborted": "à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\96ูà¸\81ยà¸\81à¹\80ลิà¸\81\nà¹\84มà¹\88มีà¸\84ำอà¸\98ิà¸\9aายสำหรัà¸\9aà¸\81ารยà¸\81à¹\80ลิà¸\81à¸\99ีà¹\89",
-       "edit-gone-missing": "à¹\84มà¹\88สามารà¸\96อัà¸\9bà¹\80à¸\94à¸\95หà¸\99à¹\89าà¸\94ัà¸\87à¸\81ลà¹\88าวà¹\84à¸\94à¹\89\nà¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¸\9aà¹\84à¸\9bแล้ว",
+       "edit-hook-aborted": "à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\96ูà¸\81ฮุà¸\81ยà¸\81à¹\80ลิà¸\81\nà¹\84มà¹\88à¹\84à¸\94à¹\89à¹\83หà¹\89à¸\84ำอà¸\98ิà¸\9aาย",
+       "edit-gone-missing": "à¹\84มà¹\88สามารà¸\96à¸\9bรัà¸\9aหà¸\99à¹\89าà¸\94ัà¸\87à¸\81ลà¹\88าวà¹\84à¸\94à¹\89\nà¸\94ูà¹\80หมือà¸\99à¸\96ูà¸\81ลà¸\9aแล้ว",
        "edit-conflict": "แก้ชนกัน",
-       "edit-no-change": "à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81à¹\80à¸\9eิà¸\81à¹\80à¸\89ย à¹\80à¸\9eราะà¹\84มà¹\88มีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\83à¸\94 à¹\86",
-       "postedit-confirmation-created": "หà¸\99à¹\89าà¸\96ูà¸\81สรà¹\89าà¸\87แล้ว",
-       "postedit-confirmation-restored": "หà¸\99à¹\89าà¸\96ูà¸\81à¸\81ูà¹\89à¸\84ืà¸\99",
+       "edit-no-change": "à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81à¹\80à¸\9eิà¸\81à¹\80à¸\89ย à¹\80à¸\9eราะà¹\84มà¹\88มีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\82à¹\89อà¸\84วาม",
+       "postedit-confirmation-created": "สรà¹\89าà¸\87หà¸\99à¹\89าแล้ว",
+       "postedit-confirmation-restored": "à¸\81ูà¹\89à¸\84ืà¸\99หà¸\99à¹\89าà¹\81ลà¹\89ว",
        "postedit-confirmation-saved": "บันทึกการแก้ไขของคุณแล้ว",
-       "edit-already-exists": "à¹\84มà¹\88สามารà¸\96สรà¹\89าà¸\87หà¸\99à¹\89าà¹\83หมà¹\88à¹\84à¸\94à¹\89\nà¹\80à¸\9eราะมีหà¸\99à¹\89าà¸\99ีà¹\89à¹\81ลà¹\89ว",
+       "edit-already-exists": "ไม่สามารถสร้างหน้าใหม่ได้\nเพราะมีแล้ว",
        "defaultmessagetext": "ข้อความสารโดยปริยาย",
        "content-failed-to-parse": "แจงส่วนเนื้อหา $2 ของตัวแบบ $1 ล้มเหลว: $3",
        "invalid-content-data": "ข้อมูลเนื้อหาไม่ถูกต้อง",
-       "content-not-allowed-here": "à¹\80à¸\99ืà¹\89อหา \"$1\" à¹\84มà¹\88อà¸\99ุà¸\8dาà¸\95ในหน้า [[$2]]",
+       "content-not-allowed-here": "à¹\84มà¹\88อà¸\99ุà¸\8dาà¸\95à¹\80à¸\99ืà¹\89อหา \"$1\" ในหน้า [[$2]]",
        "editwarning-warning": "การออกจากหน้านี้อาจทำให้ความเปลี่ยนแปลงที่คุณดำเนินการสูญหาย\nถ้าคุณล็อกอินแล้ว คุณสามารถปิดคำเตือนนี้ได้ที่ส่วน \"{{int:prefs-editing}}\" ในการตั้งค่าของคุณ",
        "editpage-notsupportedcontentformat-title": "รูปแบบเนื้อหาไม่ได้รับการรองรับ",
        "editpage-notsupportedcontentformat-text": "ตัวแบบเนื้อหา $2 ไม่รองรับตัวแบบเนื้อหา $1",
        "content-model-text": "ข้อความธรรมดา",
        "content-model-javascript": "จาวาสคริปต์",
        "content-model-css": "CSS",
-       "expensive-parserfunction-warning": "'''คำเตือน:''' หน้านี้มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป\n\nหน้านี้ควรมีการเรียกใช้น้อยกว่า $2  ครั้ง แต่ปัจจุบันมีการเรียกใช้ $1 ครั้ง",
+       "expensive-parserfunction-warning": "<strong>คำเตือน:</strong> หน้านี้มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป\n\nหน้านี้ควรมีการเรียกใช้น้อยกว่า $2  ครั้ง แต่ปัจจุบันมีการเรียกใช้ $1 ครั้ง",
        "expensive-parserfunction-category": "หน้าที่มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป",
-       "post-expand-template-inclusion-warning": "'''คำเตือน:''' แม่แบบที่นำมารวมมีขนาดใหญ่เกินไป\nบางแม่แบบจะไม่ถูกรวมเข้ามา",
+       "post-expand-template-inclusion-warning": "<strong>คำเตือน:</strong> แม่แบบที่นำมารวมมีขนาดใหญ่เกินไป\nจะไม่รวมบางแม่แบบเข้ามา",
        "post-expand-template-inclusion-category": "หน้าที่มีแม่แบบรวมมาเกินขนาด",
-       "post-expand-template-argument-warning": "คำเตือน: หน้านี้มีแม่แบบที่มีอาร์กิวเมนต์ขนาดใหญ่เกินไป อาร์กิวเมนต์เหล่านี้จะถูกละทิ้ง",
-       "post-expand-template-argument-category": "หà¸\99à¹\89าà¸\97ีà¹\88มีà¹\81มà¹\88à¹\81à¸\9aà¸\9aà¸\8bึà¹\88à¸\87อารà¹\8cà¸\81ิวà¹\80มà¸\99à¸\95à¹\8cà¸\96ูà¸\81ละà¸\97ิà¹\89à¸\87",
-       "parser-template-loop-warning": "à¸\95รวà¸\88à¸\9eà¸\9aà¹\81มà¹\88à¹\81à¸\9aà¸\9aà¸\81ลัà¸\9aมาà¹\80รียà¸\81à¸\95ัวà¹\80อà¸\87: [[$1]]",
-       "parser-template-recursion-depth-warning": "à¹\80รียà¸\81à¹\81มà¹\88à¹\81à¸\9aà¸\9aà¸\8bà¹\89อà¸\99หลายà¸\8aัà¹\89à¸\99à¹\80à¸\81ิà¸\99à¸\82ีà¸\94à¸\88ำà¸\81ัà¸\94 ($1)",
-       "language-converter-depth-warning": "à¸\84ำสัà¹\88à¸\87à¹\83à¸\99à¸\81ารà¹\81à¸\9bลà¸\87ภาษาลึà¸\81à¹\80à¸\81ิà¸\99 $1 à¸¥à¸³à¸\94ัà¸\9a",
+       "post-expand-template-argument-warning": "<strong>คำเตือน:</strong> หน้านี้มีอาร์กิวเมนต์แม่แบบอย่างน้อยหนึ่งที่มีขนาดขยายใหญ่เกินไป\nสละอาร์กิวเมนต์เหล่านี้แล้ว",
+       "post-expand-template-argument-category": "หà¸\99à¹\89าà¸\97ีà¹\88มีอารà¹\8cà¸\81ิวà¹\80มà¸\99à¸\95à¹\8cà¹\81มà¹\88à¹\81à¸\9aà¸\9aà¸\96ูà¸\81สละ",
+       "parser-template-loop-warning": "à¸\95รวà¸\88à¸\9eà¸\9aวà¸\87วà¸\99à¹\81มà¹\88à¹\81à¸\9aà¸\9a: [[$1]]",
+       "parser-template-recursion-depth-warning": "à¹\80à¸\81ิà¸\99à¸\82ีà¸\94à¸\88ำà¸\81ัà¸\94à¸\84วามลึà¸\81à¸\81ารà¹\80รียà¸\81à¹\81มà¹\88à¹\81à¸\9aà¸\9aà¸\8bà¹\89ำ ($1)",
+       "language-converter-depth-warning": "à¹\80à¸\81ิà¸\99à¸\82ีà¸\94à¸\88ำà¸\81ัà¸\94à¸\84วามลึà¸\81à¸\95ัวà¹\81à¸\9bลà¸\87à¸\9cัà¸\99ภาษา ($1)",
        "node-count-exceeded-category": "หน้าที่จำนวนปมเกิน",
        "node-count-exceeded-warning": "หน้าเกินจำนวนปม",
        "expansion-depth-exceeded-category": "หน้าที่ความลึกการขยายเกิน",
        "parser-unstrip-loop-warning": "พบวงวน unstrip",
        "parser-unstrip-recursion-limit": "ขีดจำกัดการเรียกซ้ำ unstrip เกิน ($1)",
        "converter-manual-rule-error": "พบข้อผิดพลาดในกฎการแปลงผันภาษาด้วยมือ",
-       "undo-success": "à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99ีà¹\89สามารà¸\96ยà¹\89อà¸\99à¸\81ลัà¸\9aà¹\84à¸\94à¹\89 à¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aà¸\82à¹\89อà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\99ีà¹\88à¸\84ือสิà¹\88à¸\87à¸\97ีà¹\88à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารà¸\97ำ à¸\88าà¸\81à¸\99ัà¹\89à¸\99à¹\83หà¹\89à¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9eืà¹\88อà¹\80สรà¹\87à¸\88สิà¹\89à¸\99à¸\82ัà¹\89à¸\99à¸\95อà¸\99",
-       "undo-failure": "à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99ีà¹\89à¹\84มà¹\88สามารà¸\96ยà¹\89อà¸\99à¸\81ลัà¸\9aà¹\84à¸\94à¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¸\82ัà¸\94à¹\81ยà¹\89à¸\87à¸\81ัà¸\9aà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99",
-       "undo-norev": "ไม่สามารถย้อนการแก้ไขนี้ เพราะไม่มีหรือถูกลบไปแล้ว",
-       "undo-nochange": "ดูเหมือนว่าการแก้ไขดังกล่าวถูกย้อนแล้ว",
-       "undo-summary": "ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82รุà¹\88à¸\99 $1 โดย [[Special:Contributions/$2|$2]] ([[User talk:$2|พูดคุย]])",
-       "undo-summary-username-hidden": "ยà¹\89อà¸\99รุà¹\88à¸\99 $1 โดยผู้ใช้ไม่ระบุชื่อ",
+       "undo-success": "สามารà¸\96ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99ีà¹\89à¸\81ลัà¸\9aà¹\84à¸\94à¹\89 \nà¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aà¸\82à¹\89อà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9eืà¹\88อà¸\97วà¸\99สอà¸\9aวà¹\88าà¸\99ีà¹\88à¹\80à¸\9bà¹\87à¸\99สิà¹\88à¸\87à¸\97ีà¹\88à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารà¸\97ำ à¹\81ลà¹\89วà¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9eืà¹\88อà¹\80สรà¹\87à¸\88สิà¹\89à¸\99à¸\81ารยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\81ลัà¸\9a",
+       "undo-failure": "à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99ีà¹\89à¹\84มà¹\88สามารà¸\96ยà¹\89อà¸\99à¸\81ลัà¸\9aà¹\84à¸\94à¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¸\82ัà¸\94à¹\81ยà¹\89à¸\87à¸\81ัà¸\9aà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ระหวà¹\88าà¸\87à¸\81ลาà¸\87",
+       "undo-norev": "ไม่สามารถย้อนการแก้ไขนี้กลับ เพราะไม่มีหรือถูกลบไปแล้ว",
+       "undo-nochange": "à¸\94ูà¹\80หมือà¸\99วà¹\88าà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\94ัà¸\87à¸\81ลà¹\88าวà¸\96ูà¸\81ยà¹\89อà¸\99à¸\81ลัà¸\9aà¹\81ลà¹\89ว",
+       "undo-summary": "à¸\97ำà¸\81ลัà¸\9aรุà¹\88à¸\99à¹\81à¸\81à¹\89à¹\84à¸\82 $1 โดย [[Special:Contributions/$2|$2]] ([[User talk:$2|พูดคุย]])",
+       "undo-summary-username-hidden": "à¸\97ำà¸\81ลัà¸\9aรุà¹\88à¸\99à¹\81à¸\81à¹\89à¹\84à¸\82 $1 โดยผู้ใช้ไม่ระบุชื่อ",
        "cantcreateaccounttitle": "ไม่สามารถสร้างบัญชีได้",
        "cantcreateaccount-text": "การสร้างบัญชีใหม่จากที่อยู่ไอพีนี้ ('''$1''') ถูกระงับโดย [[User:$3|$3]]\n\nเหตุผลที่ $3 ให้ไว้ คือ ''$2''",
        "cantcreateaccount-range-text": "การสร้างบัญชีจากเลขที่อยู่ไอพีในช่วง '''$1''' ซึ่งรวมเลขที่อยู่ไอพีของคุณ ('''$4''') ถูกบล็อกโดย [[User:$3|$3]] \n\nเหตุผลที่ $3 ชี้แจง คือ ''$2''",
        "nohistory": "ไม่มีประวัติการแก้ไขสำหรับหน้านี้",
        "currentrev": "รุ่นปัจจุบัน",
        "currentrev-asof": "รุ่นปัจจุบัน เมื่อ $1",
-       "revisionasof": "รุ่นเมื่อ $1",
-       "revision-info": "รุ่นเมื่อ $1 โดย {{GENDER:$6|$2}}$7",
-       "previousrevision": "←รุ่นก่อนหน้า",
-       "nextrevision": "รุ่นถัดไป→",
+       "revisionasof": "รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¹\80มืà¹\88อ $1",
+       "revision-info": "รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¹\80มืà¹\88อ $1 à¹\82à¸\94ย {{GENDER:$6|$2}}$7",
+       "previousrevision": "â\86\90รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\81à¹\88อà¸\99หà¸\99à¹\89า",
+       "nextrevision": "รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\96ัà¸\94à¹\84à¸\9bâ\86\92",
        "currentrevisionlink": "รุ่นล่าสุด",
        "cur": "ป",
        "next": "ถัดไป",
        "last": "ก",
        "page_first": "แรกสุด",
        "page_last": "ท้ายสุด",
-       "histlegend": "วิà¸\98ีà¹\80à¸\9bรียà¸\9aà¹\80à¸\97ียà¸\9a: à¹\80ลือà¸\81à¸\9bุà¹\88มà¸\82อà¸\87รุà¹\88à¸\99สอà¸\87รุà¹\88à¸\99à¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bรียà¸\9aà¹\80à¸\97ียà¸\9a à¹\81ละà¸\81à¸\94à¸\9bุà¹\88มà¹\80ริà¹\88มà¹\80à¸\9bรียà¸\9aà¹\80à¸\97ียà¸\9aà¸\94à¹\89าà¸\99ลà¹\88าà¸\87<br />\nà¸\84ำอà¸\98ิà¸\9aาย: <strong>({{int:cur}})</strong> = à¹\80à¸\97ียà¸\9aà¸\81ัà¸\9aรุà¹\88à¸\99à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99, <strong>({{int:last}})</strong> = à¹\80à¸\97ียà¸\9aกับรุ่นก่อนหน้า, <strong>{{int:minoreditletter}}</strong> = การแก้ไขเล็กน้อย",
-       "history-fieldset-title": "à¸\84à¹\89à¸\99หาประวัติ",
+       "histlegend": "à¸\81ารà¹\80ลือà¸\81à¸\9cลà¸\95à¹\88าà¸\87: à¹\80ลือà¸\81à¸\9bุà¹\88มà¸\82อà¸\87สอà¸\87รุà¹\88à¸\99à¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bรียà¸\9aà¹\80à¸\97ียà¸\9a à¹\81ละà¸\81à¸\94à¸\9bà¹\89อà¸\99à¹\80à¸\82à¹\89าหรือà¸\9bุà¹\88มà¸\94à¹\89าà¸\99ลà¹\88าà¸\87<br />\nà¸\84ำอà¸\98ิà¸\9aาย: <strong>({{int:cur}})</strong> = à¸\9cลà¸\95à¹\88าà¸\87à¸\81ัà¸\9aรุà¹\88à¸\99à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99, <strong>({{int:last}})</strong> = à¸\9cลà¸\95à¹\88าà¸\87กับรุ่นก่อนหน้า, <strong>{{int:minoreditletter}}</strong> = การแก้ไขเล็กน้อย",
+       "history-fieldset-title": "à¸\84à¹\89à¸\99à¸\94ูประวัติ",
        "history-show-deleted": "เฉพาะที่ถูกลบ",
        "histfirst": "แรกสุด",
        "histlast": "ล่าสุด",
-       "historysize": "$1 ไบต์",
+       "historysize": "($1 ไบต์)",
        "historyempty": "(ว่าง)",
-       "history-feed-title": "ประวัติรุ่น",
-       "history-feed-description": "ประวัติรุ่นของหน้านี้ในวิกิ",
+       "history-feed-title": "ประวัติรุ่นปรับปรุง",
+       "history-feed-description": "à¸\9bระวัà¸\95ิรุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¹\83à¸\99วิà¸\81ิ",
        "history-feed-item-nocomment": "$1 เมื่อ $2",
-       "history-feed-empty": "à¹\84มà¹\88มีหà¸\99à¹\89าà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร \nà¸\8bึà¹\88à¸\87อาà¸\88à¸\96ูà¸\81ลà¸\9aหรือà¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\84à¸\9bแล้ว \nลอง[[Special:Search|ค้นวิกินี้]]หาหน้าใหม่ที่เกี่ยวข้อง",
+       "history-feed-empty": "à¹\84มà¹\88มีหà¸\99à¹\89าà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร \nà¸\8bึà¹\88à¸\87อาà¸\88à¸\96ูà¸\81ลà¸\9aหรือà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อแล้ว \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-deleted-text-unhide": "รุ่นหน้านี้'''ถูกลบ'''\nรายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]\nคุณยังสามารถ[$1 ดูรุ่นนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
-       "rev-suppressed-text-unhide": "รุ่นหน้านี้'''ถูกยับยั้ง'''\nรายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]\nคุณยังสามารถ[$1 ดูรุ่นนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
-       "rev-deleted-text-view": "รุ่นหน้านี้'''ถูกลบ'''\nคุณสามารถดูรุ่นนี้ได้ รายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
-       "rev-suppressed-text-view": "รุ่นหน้านี้'''ถูกยับยั้ง'''\nคุณสามารถดูรุ่นนี้ได้ รายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]",
-       "rev-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 ดูผลต่างนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
-       "rev-suppressed-unhide-diff": "รุ่นหนึ่งของผลต่างนี้'''ถูกยับยั้ง'''\nรายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]\nคุณยังสามารถ[$1 ดูผลต่างนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
+       "rev-deleted-user-contribs": "[นำชื่อผู้ใช้หรือเลขที่อยู่ไอพีออกแล้ว - การแก้ไขถูกซ่อนจากรายการแก้ไข]",
+       "rev-deleted-text-permission": "รุ่นหน้านี้ <strong>ถูกลบ</strong>.\nพบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
+       "rev-suppressed-text-permission": "รุ่นหน้านี้ถูก<strong>ยับยั้ง</strong> \nพบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]",
+       "rev-deleted-text-unhide": "รุ่นหน้านี้<strong>ถูกลบ</strong>\nพบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]\nคุณยังสามารถ[$1 ดูรุ่นนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
+       "rev-suppressed-text-unhide": "รุ่นหน้านี้<strong>ถูกยับยั้ง</strong>\nพบรายละเอียดพบใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]\nคุณยังสามารถ[$1 ดูรุ่นนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
+       "rev-deleted-text-view": "รุ่นหน้านี้<strong>ถูกลบ</strong>\nคุณสามารถดูรุ่นนี้ได้ พบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
+       "rev-suppressed-text-view": "รุ่นหน้านี้strong>ถูกยับยั้ง</strong>\nคุณสามารถดูรุ่นนี้ได้ พบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]",
+       "rev-deleted-no-diff": "คุณไม่สามารถเรียกดูผลต่างนี้ เพราะมีรุ่นหนึ่ง<strong>ถูกลบ</strong>\nพบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
+       "rev-suppressed-no-diff": "คุณไม่สามารถดูผลต่างนี้ได้ เพราะมีรุ่นหนึ่งที่<strong>ถูกลบ</strong>",
+       "rev-deleted-unhide-diff": "รุ่นหนึ่งของผลต่างนี้<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": "รุ่นหนึ่งของผลต่างนี้'''ถูกลบ'''\nคุณสามารถดูผลต่างนี้ได้ รายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
-       "rev-suppressed-diff-view": "รุ่นหนึ่งของผลต่างนี้'''ถูกยับยั้ง'''\nคุณสามารถดูผลต่างนี้ได้ รายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]",
+       "rev-suppressed-diff-view": "รุ่นหนึ่งของผลต่างนี้<strong>ถูกยับยั้ง</strong>\nคุณสามารถดูผลต่างนี้ได้ พบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]",
        "rev-delundel": "เปลี่ยนทัศนวิสัย",
        "rev-showdeleted": "แสดง",
-       "revisiondelete": "ลบ/กู้คืนรุ่น",
-       "revdelete-nooldid-title": "à¹\84มà¹\88มีรุà¹\88à¸\99à¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร",
-       "revdelete-nooldid-text": "à¸\84ุà¸\93มิà¹\84à¸\94à¹\89à¹\80à¸\88าะà¸\88à¸\87รุà¹\88à¸\99à¹\80à¸\9bà¹\89าหมายà¹\80à¸\9eืà¹\88อà¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99à¸\99ีà¹\89 à¸«à¸£à¸·à¸­à¹\84มà¹\88มีรุà¹\88à¸\99ที่เจาะจง หรือคุณกำลังพยายามซ่อนรุ่นปัจจุบันอย่างใดอย่างหนึ่ง",
+       "revisiondelete": "ลบ/กู้คืนรุ่นปรับปรุง",
+       "revdelete-nooldid-title": "รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¹\80à¸\9bà¹\89าหมายà¹\84มà¹\88สมà¹\80หà¸\95ุสมà¸\9cล",
+       "revdelete-nooldid-text": "à¸\84ุà¸\93มิà¹\84à¸\94à¹\89à¹\80à¸\88าะà¸\88à¸\87รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¹\80à¸\9bà¹\89าหมายà¹\80à¸\9eืà¹\88อà¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99à¸\99ีà¹\89 à¸«à¸£à¸·à¸­à¹\84มà¹\88มีรุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87ที่เจาะจง หรือคุณกำลังพยายามซ่อนรุ่นปัจจุบันอย่างใดอย่างหนึ่ง",
        "revdelete-no-file": "ไม่มีไฟล์ที่ระบุ",
-       "revdelete-show-file-confirm": "à¸\84ุà¸\93à¹\81à¸\99à¹\88à¹\83à¸\88à¸\97ีà¹\88à¸\88ะดูรุ่นที่ถูกลบของไฟล์ \"<nowiki>$1</nowiki>\" เมื่อวันที่ $2 เวลา $3 หรือไม่",
+       "revdelete-show-file-confirm": "à¸\84ุà¸\93à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\95à¹\89อà¸\87à¸\81ารดูรุ่นที่ถูกลบของไฟล์ \"<nowiki>$1</nowiki>\" เมื่อวันที่ $2 เวลา $3 หรือไม่",
        "revdelete-show-file-submit": "ใช่",
-       "revdelete-selected-text": "{{PLURAL:$1|รุ่นที่เลือก}}ของ [[:$2]]:",
+       "revdelete-selected-text": "{{PLURAL:$1|รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ีà¹\88à¹\80ลือà¸\81}}à¸\82อà¸\87 [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|รุ่นไฟล์ที่เลือก}}ของ [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|เหตุการณ์ปูมที่เลือก|เหตุการณ์ปูมที่เลือก}} :",
-       "revdelete-text-text": "รุ่นที่ถูกลบจะยังปรากฏในประวัติหน้า แต่สาธารณะจะไม่สามารถเข้าถึงเนื้อหาบางส่วนได้",
-       "revdelete-text-file": "รุ่นที่ถูกลบจะยังปรากฏในประวัติไฟล์ แต่สาธารณะจะไม่สามารถเข้าถึงเนื้อหาบางส่วนได้",
-       "logdelete-text": "รายà¸\81ารปูมที่ถูกลบจะยังปรากฏในปูม แต่สาธารณะจะไม่สามารถเข้าถึงเนื้อหาบางส่วนได้",
-       "revdelete-text-others": "à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¸\84à¸\99อืà¹\88à¸\99à¸\88ะยัà¸\87สามารà¸\96à¹\80à¸\82à¹\89าà¸\96ึà¸\87à¹\80à¸\99ืà¹\89อหาà¸\97ีà¹\88à¸\96ูà¸\81à¸\8bà¹\88อà¸\99 à¹\81ละสามารà¸\96à¸\81ูà¹\89à¸\84ืà¸\99à¹\80à¸\99ืà¹\89อหาà¹\84à¸\94à¹\89 à¸¢à¸\81à¹\80วà¹\89à¸\99มีà¸\81ารตั้งข้อจำกัดเพิ่มเติม",
-       "revdelete-confirm": "กรุณายืนยันว่าคุณมีเจตนาลบจริง และเข้าใจผลลัพธ์ และกระทำภายใต้[[{{MediaWiki:Policy-url}}|นโยบาย]]",
-       "revdelete-suppress-text": "การระงับควรใช้'''เฉพาะ'''กรณีต่อไปนี้:\n* ข้อมูลที่อาจหมิ่นประมาท\n* ข้อมูลส่วนบุคคลที่ไม่เหมาะสม\n*: ''ที่อยู่บ้านและหมายเลขโทรศัพท์บ้าน, หมายเลขประกันสังคม, ฯลฯ''",
-       "revdelete-legend": "ตั้งการจำกัดทัศนวิสัย:",
-       "revdelete-hide-text": "ข้อความรุ่น",
+       "revdelete-text-text": "รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ีà¹\88à¸\96ูà¸\81ลà¸\9aà¸\88ะยัà¸\87à¸\9bราà¸\81à¸\8fà¹\83à¸\99à¸\9bระวัà¸\95ิหà¸\99à¹\89า à¹\81à¸\95à¹\88สาà¸\98ารà¸\93ะà¸\88ะà¹\84มà¹\88สามารà¸\96à¹\80à¸\82à¹\89าà¸\96ึà¸\87à¹\80à¸\99ืà¹\89อหาà¸\9aาà¸\87สà¹\88วà¸\99à¹\84à¸\94à¹\89",
+       "revdelete-text-file": "รุà¹\88à¸\99à¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\96ูà¸\81ลà¸\9aà¸\88ะยัà¸\87à¸\9bราà¸\81à¸\8fà¹\83à¸\99à¸\9bระวัà¸\95ิà¹\84à¸\9fลà¹\8c à¹\81à¸\95à¹\88สาà¸\98ารà¸\93ะà¸\88ะà¹\84มà¹\88สามารà¸\96à¹\80à¸\82à¹\89าà¸\96ึà¸\87à¹\80à¸\99ืà¹\89อหาà¸\9aาà¸\87สà¹\88วà¸\99à¹\84à¸\94à¹\89",
+       "logdelete-text": "à¹\80หà¸\95ุà¸\81ารà¸\93à¹\8cปูมที่ถูกลบจะยังปรากฏในปูม แต่สาธารณะจะไม่สามารถเข้าถึงเนื้อหาบางส่วนได้",
+       "revdelete-text-others": "à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¸\84à¸\99อืà¹\88à¸\99à¸\88ะยัà¸\87สามารà¸\96à¹\80à¸\82à¹\89าà¸\96ึà¸\87à¹\81ละà¸\81ูà¹\89à¸\84ืà¸\99à¹\80à¸\99ืà¹\89อหาà¸\97ีà¹\88à¸\96ูà¸\81à¸\8bà¹\88อà¸\99à¹\84à¸\94à¹\89 à¸¢à¸\81à¹\80วà¹\89à¸\99ตั้งข้อจำกัดเพิ่มเติม",
+       "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": "ซ่อนปฏิบัติการและเป้าหมาย",
        "revdelete-hide-comment": "คำอธิบายอย่างย่อ",
        "revdelete-hide-user": "ชื่อผู้ใช้/เลขที่อยู่ไอพีผู้เขียน",
-       "revdelete-hide-restricted": "ระà¸\87ัà¸\9aข้อมูลจากผู้ดูแลระบบเช่นเดียวกับผู้ใช้อื่น",
+       "revdelete-hide-restricted": "ยัà¸\9aยัà¹\89à¸\87ข้อมูลจากผู้ดูแลระบบเช่นเดียวกับผู้ใช้อื่น",
        "revdelete-radio-same": "(ไม่เปลี่ยนแปลง)",
        "revdelete-radio-set": "ซ่อน",
        "revdelete-radio-unset": "เปิดเผย",
-       "revdelete-suppress": "à¸\8bà¹\88อà¸\99ข้อมูลจากผู้ดูแลระบบเช่นเดียวกับผู้ใช้อื่น",
-       "revdelete-unsuppress": "ลà¸\9aà¸\81ารà¸\88ำà¸\81ัà¸\94สำหรัà¸\9aรุà¹\88à¸\99ที่กู้คืน",
+       "revdelete-suppress": "ยัà¸\9aยัà¹\89à¸\87ข้อมูลจากผู้ดูแลระบบเช่นเดียวกับผู้ใช้อื่น",
+       "revdelete-unsuppress": "ลà¸\9aà¸\81ารà¸\88ำà¸\81ัà¸\94à¹\81à¸\81à¹\88รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87ที่กู้คืน",
        "revdelete-log": "เหตุผล:",
-       "revdelete-submit": "ใช้กับ{{PLURAL:$1|รุ่น|รุ่น}}ที่เลือก",
-       "revdelete-success": "'''ปรับทัศนวิสัยรุ่นสำเร็จ'''",
-       "revdelete-failure": "'''ไม่สามารถปรับทัศนวิสัยของรุ่นได้:'''\n$1",
-       "logdelete-success": "'''ตั้งทัศนวิสัยปูมสำเร็จ'''",
-       "logdelete-failure": "'''ไม่สามารถตั้งทัศนวิสัยของปูมได้:'''\n$1",
+       "revdelete-submit": "ใช้กับรุ่นปรับปรุง{{PLURAL:$1|}}ที่เลือก",
+       "revdelete-success": "<strong>ปรับทัศนวิสัยรุ่นปรับปรุงสำเร็จ</strong>",
+       "revdelete-failure": "<strong>ไม่สามารถปรับทัศนวิสัยของรุ่นปรับปรุงได้:</strong>\n$1",
+       "logdelete-success": "<strong>ตั้งทัศนวิสัยปูมสำเร็จ</strong>",
+       "logdelete-failure": "<strong>ไม่สามารถตั้งทัศนวิสัยของปูม:</strong>\n$1",
        "revdel-restore": "เปลี่ยนทัศนวิสัย",
        "pagehist": "ประวัติหน้า",
        "deletedhist": "ประวัติที่ถูกลบ",
        "revdelete-hide-current": "เกิดความผิดพลาดในการซ่อนรายการลงวันที่ $2 เวลา $1: นี่คือรุ่นการแก้ไขปัจจุบัน\nไม่สามารถซ่อนได้",
-       "revdelete-show-no-access": "à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¹\81สà¸\94à¸\87รายà¸\81ารลà¸\87วันที่ $2 เวลา $1: รายการนี้ถูกทำเครื่องหมายเป็น \"ถูกจำกัด\"\nคุณไม่มีสิทธิเข้าถึงรุ่นดังกล่าว",
-       "revdelete-modify-no-access": "à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¸\94ัà¸\94à¹\81à¸\9bรรายà¸\81ารลà¸\87วันที่ $2 เวลา $1: รายการนี้ถูกทำเครื่องหมายเป็น \"ถูกจำกัด\"\nคุณไม่มีสิทธิเข้าถึงรุ่นดังกล่าว",
-       "revdelete-modify-missing": "à¹\80à¸\81ิà¸\94ข้อผิดพลาดในการดัดแปรรายการหมายเลข $1: รายการนี้สูญหายจากฐานข้อมูล!",
-       "revdelete-no-change": "'''คำเตือน:''' รายการลงวันที่ $2 เวลา $1 ตั้งค่าทัศนวิสัยตามที่ขออยู่แล้ว",
-       "revdelete-concurrent-change": "à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¸\94ัà¸\94à¹\81à¸\9bรรายà¸\81ารลà¸\87วัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1: à¸ªà¸\96าà¸\99ะà¸\82อà¸\87รายà¸\81ารà¸\96ูà¸\81à¸\9aาà¸\87à¸\84à¸\99à¹\80à¸\9bลีà¹\88ยà¸\99à¸\82à¸\93ะà¸\97ีà¹\88คุณพยายามดัดแปร\nโปรดตรวจสอบปูม",
-       "revdelete-only-restricted": "à¹\80à¸\81ิà¸\94à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¸\8bà¹\88อà¸\99รายà¸\81ารลà¸\87วัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1: à¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96ยัà¸\9aยัà¹\89à¸\87à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aมิà¹\83หà¹\89ดูรุ่นนี้ได้โดยไม่เลือกตัวเลือกทัศนวิสัยอื่นด้วย",
+       "revdelete-show-no-access": "มีà¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¹\81สà¸\94à¸\87รายà¸\81ารวันที่ $2 เวลา $1: รายการนี้ถูกทำเครื่องหมายเป็น \"ถูกจำกัด\"\nคุณไม่มีสิทธิเข้าถึงรุ่นดังกล่าว",
+       "revdelete-modify-no-access": "มีà¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¸\94ัà¸\94à¹\81à¸\9bรรายà¸\81ารวันที่ $2 เวลา $1: รายการนี้ถูกทำเครื่องหมายเป็น \"ถูกจำกัด\"\nคุณไม่มีสิทธิเข้าถึงรุ่นดังกล่าว",
+       "revdelete-modify-missing": "มีข้อผิดพลาดในการดัดแปรรายการหมายเลข $1: รายการนี้สูญหายจากฐานข้อมูล!",
+       "revdelete-no-change": "<strong>คำเตือน:</strong> รายการวันที่ $2 เวลา $1 ตั้งค่าทัศนวิสัยตามที่ขออยู่แล้ว",
+       "revdelete-concurrent-change": "มีà¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¸\94ัà¸\94à¹\81à¸\9bรรายà¸\81ารลà¸\87วัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1: à¸\94ูà¹\80หมือà¸\99วà¹\88ามีà¸\9cูà¹\89à¹\80à¸\9bลีà¹\88ยà¸\99สà¸\96าà¸\99ะà¸\82อà¸\87รายà¸\81ารà¸\82à¸\93ะคุณพยายามดัดแปร\nโปรดตรวจสอบปูม",
+       "revdelete-only-restricted": "มีà¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¸\8bà¹\88อà¸\99รายà¸\81ารวัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1: à¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96ยัà¸\9aยัà¹\89à¸\87มิà¹\83หà¹\89à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aดูรุ่นนี้ได้โดยไม่เลือกตัวเลือกทัศนวิสัยอื่นด้วย",
        "revdelete-reason-dropdown": "*เหตุผลการลบทั่วไป\n** ละเมิดลิขสิทธิ์\n** ความเห็นไม่เหมาะสมหรือสารสนเทศส่วนบุคคล\n** ชื่อผู้ใช้ไม่เหมาะสม\n** สารสนเทศที่อาจหมิ่นประมาท",
        "revdelete-otherreason": "เหตุผลอื่น/เพิ่มเติม:",
        "revdelete-reasonotherlist": "เหตุผลอื่น",
        "revdelete-edit-reasonlist": "แก้ไขเหตุผลการลบ",
-       "revdelete-offender": "à¸\9cูà¹\89à¹\80à¸\82ียà¸\99รุà¹\88à¸\99:",
-       "suppressionlog": "à¸\9bูมà¸\81ารระà¸\87ัà¸\9a",
-       "suppressionlogtext": "à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¸\99ีà¹\89à¸\84ือรายà¸\81ารà¸\81ารลà¸\9aà¹\81ละà¸\81ารà¸\9aลà¹\87อà¸\81à¸\97ีà¹\88à¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87à¸\81ัà¸\9aà¹\80à¸\99ืà¹\89อหาà¸\97ีà¹\88à¸\96ูà¸\81à¸\8bà¹\88อà¸\99à¸\88าà¸\81à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9a\nà¸\94ู[[Special:BlockList|รายà¸\81ารà¸\9aลà¹\87อà¸\81à¹\84อà¸\9eี]]สำหรัà¸\9aà¸\81ารà¸\9aลà¹\87อà¸\81à¹\81ละà¸\81ารระà¸\87ัà¸\9aในปัจจุบัน",
-       "mergehistory": "à¸\9bระวัà¸\95ิà¸\81ารรวมหน้า",
-       "mergehistory-header": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\84วà¹\89à¹\83หà¹\89à¸\84ุà¸\93à¹\83à¸\8aà¹\89รวมรุà¹\88à¸\99à¹\83à¸\99à¸\9bระวัà¸\95ิà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87หà¸\99à¹\89าà¸\95à¹\89à¸\99à¸\97าà¸\87หà¸\99ึà¹\88à¸\87à¹\84à¸\9bยัà¸\87หà¸\99à¹\89าà¹\83หมà¹\88\nà¸\81à¹\88อà¸\99à¸\94ำà¹\80à¸\99ิà¸\99à¸\81าร à¸\84วรà¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88à¸\81à¹\88อà¸\99วà¹\88าà¸\81ารà¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¸\99ีà¹\89ยัà¸\87รัà¸\81ษาความต่อเนื่องของประวัติหน้าเก่า",
-       "mergehistory-box": "รวมรุà¹\88à¸\99à¸\82อà¸\87หà¸\99à¹\89าà¸\97ัà¹\89à¸\87สอà¸\87:",
+       "revdelete-offender": "à¸\9cูà¹\89à¸\9bระà¸\9eัà¸\99à¸\98à¹\8cรุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87:",
+       "suppressionlog": "à¸\9bูมà¸\81ารยัà¸\9aยัà¹\89à¸\87",
+       "suppressionlogtext": "à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¸\99ีà¹\89à¸\84ือรายà¸\81ารà¸\81ารลà¸\9aà¹\81ละà¸\9aลà¹\87อà¸\81à¸\97ีà¹\88à¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87à¸\81ัà¸\9aà¹\80à¸\99ืà¹\89อหาà¸\97ีà¹\88à¸\96ูà¸\81à¸\8bà¹\88อà¸\99à¸\88าà¸\81à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9a\nà¸\94ู[[Special:BlockList|รายà¸\81ารà¸\9aลà¹\87อà¸\81]]สำหรัà¸\9aรายà¸\81ารà¸\81ารà¹\81à¸\9aà¸\99à¹\81ละà¸\9aลà¹\87อà¸\81à¸\97ีà¹\88ยัà¸\87มีà¸\9cลในปัจจุบัน",
+       "mergehistory": "รวมà¸\9bระวัà¸\95ิหน้า",
+       "mergehistory-header": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\83หà¹\89à¸\84ุà¸\93รวมรุà¹\88à¸\99à¸\82อà¸\87à¸\9bระวัà¸\95ิหà¸\99à¹\89าà¸\95à¹\89à¸\99à¸\97าà¸\87หà¸\99ึà¹\88à¸\87à¹\84à¸\9bหà¸\99à¹\89าà¹\83หมà¹\88\nà¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\99ีà¹\89à¸\88ะà¸\84à¸\87ความต่อเนื่องของประวัติหน้าเก่า",
+       "mergehistory-box": "รวมรุà¹\88à¸\99à¸\82อà¸\87สอà¸\87หà¸\99à¹\89า:",
        "mergehistory-from": "หน้าต้นทาง:",
        "mergehistory-into": "หน้าปลายทาง:",
        "mergehistory-list": "ประวัติการแก้ไขที่สามารถรวมได้",
-       "mergehistory-merge": "รุà¹\88à¸\99à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\82อà¸\87หà¸\99à¹\89า [[:$1]] à¸ªà¸²à¸¡à¸²à¸£à¸\96รวมà¹\80à¸\82à¹\89าà¸\81ัà¸\9aหà¸\99à¹\89า [[:$2]] à¹\84à¸\94à¹\89 à¹\83à¸\8aà¹\89à¸\84อลัมà¸\99à¹\8cà¸\9bุà¹\88มรวมà¹\80à¸\89à¸\9eาะรุà¹\88à¸\99à¸\97ีà¹\88สรà¹\89าà¸\87à¹\80วลาà¸\97ีà¹\88à¸\81ำหà¸\99à¸\94หรือà¸\81à¹\88อà¸\99หà¸\99à¹\89าà¸\99ัà¹\89à¸\99 หมายเหตุว่าการใช้ลิงก์นำทางจะตั้งคอลัมน์นี้ใหม่",
-       "mergehistory-go": "à¹\81สà¸\94à¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\97ีà¹\88สามารà¸\96รวมà¹\84à¸\94à¹\89",
-       "mergehistory-submit": "รวมรุ่น",
-       "mergehistory-empty": "à¹\84มà¹\88มีรุà¹\88à¸\99à¸\97ีà¹\88สามารà¸\96รวมได้",
-       "mergehistory-success": "à¸\9bระวัà¸\95ิ $3 à¸£à¸¸à¹\88à¸\99à¸\82อà¸\87 [[:$1]] à¹\84à¸\94à¹\89à¸\96ูà¸\81รวมเข้ากับ [[:$2]] แล้ว",
-       "mergehistory-fail": "à¹\84มà¹\88สามารà¸\96รวมà¸\9bระวัà¸\95ิà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\94à¹\89 à¹\82à¸\9bรà¸\94à¸\95รวà¸\88สอà¸\9aà¸\84à¹\88าà¸\95ัวà¹\81à¸\9bรหน้าและเวลาอีกครั้ง",
-       "mergehistory-no-source": "ไม่มีหน้าต้นทาง $1 อยู่ในสารบบ",
-       "mergehistory-no-destination": "ไม่มีหน้าปลายทาง $1 อยู่ในสารบบ",
+       "mergehistory-merge": "รุà¹\88à¸\99à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\82อà¸\87หà¸\99à¹\89า [[:$1]] à¸ªà¸²à¸¡à¸²à¸£à¸\96รวมà¸\81ัà¸\9aหà¸\99à¹\89า [[:$2]] à¹\84à¸\94à¹\89 \nà¹\83à¸\8aà¹\89à¸\84อลัมà¸\99à¹\8cà¸\9bุà¹\88มà¹\80à¸\9eืà¹\88อรวมà¹\80à¸\89à¸\9eาะรุà¹\88à¸\99à¸\97ีà¹\88สรà¹\89าà¸\87 à¸\93 à¹\81ละà¸\81à¹\88อà¸\99à¹\80วลาà¸\97ีà¹\88ระà¸\9aุ\nหมายเหตุว่าการใช้ลิงก์นำทางจะตั้งคอลัมน์นี้ใหม่",
+       "mergehistory-go": "แสดงการแก้ไขที่รวมได้",
+       "mergehistory-submit": "รวมรุ่นปรับปรุง",
+       "mergehistory-empty": "à¹\84มà¹\88มีรุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ีà¹\88รวมได้",
+       "mergehistory-success": "รวม $3 à¸£à¸¸à¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\82อà¸\87 [[:$1]] เข้ากับ [[:$2]] แล้ว",
+       "mergehistory-fail": "à¹\84มà¹\88สามารà¸\96รวมà¸\9bระวัà¸\95ิà¹\84à¸\94à¹\89 à¹\82à¸\9bรà¸\94à¸\95รวà¸\88สอà¸\9aà¸\95ัวà¹\81à¸\9bรà¹\80สริมหน้าและเวลาอีกครั้ง",
+       "mergehistory-no-source": "ไม่มีหน้าต้นทาง $1",
+       "mergehistory-no-destination": "ไม่มีหน้าปลายทาง $1",
        "mergehistory-invalid-source": "ชื่อเรื่องหน้าต้นทางต้องสมเหตุสมผล",
        "mergehistory-invalid-destination": "ชื่อเรื่องหน้าปลายทางต้องสมเหตุสมผล",
        "mergehistory-autocomment": "รวม [[:$1]] เข้ากับ [[:$2]]",
        "mergehistory-comment": "รวม [[:$1]] เข้ากับ [[:$2]]: $3",
        "mergehistory-same-destination": "หน้าต้นทางและปลายทางเป็นหน้าเดียวกันไม่ได้",
        "mergehistory-reason": "เหตุผล:",
-       "mergelog": "ปูมการรวมหน้า",
-       "pagemerge-logentry": "รวม [[$1]] เข้ากับ [[$2]] (รุ่นถึง $3)",
-       "revertmerge": "ยกเลิกการรวมหน้า",
-       "mergelogpagetext": "ด้านล่างนี้เป็นรายการการรวมประวัติของหน้าหนึ่งเข้ากับของอีกหน้าหนึ่งล่าสุด",
+       "mergelog": "ปูมการรวม",
+       "revertmerge": "เลิกรวม",
+       "mergelogpagetext": "ด้านล่างนี้เป็นรายการการรวมประวัติหน้าหนึ่งกับของอีกหน้าหนึ่งล่าสุด",
        "history-title": "ประวัติรุ่นปรับปรุงของ \"$1\"",
        "difference-title": "ผลต่างระหว่างรุ่นของ \"$1\"",
        "difference-title-multipage": "ผลต่างระหว่างหน้า \"$1\" และ \"$2\"",
        "difference-multipage": "(ผลต่างระหว่างหน้า)",
        "lineno": "แถว $1:",
-       "compareselectedversions": "เปรียบเทียบรุ่นที่เลือกไว้",
-       "showhideselectedversions": "à¹\81สà¸\94à¸\87/à¸\8bà¹\88อà¸\99รุ่นที่เลือก",
-       "editundo": "ยà¹\89อà¸\99",
+       "compareselectedversions": "เปรียบเทียบรุ่นที่เลือก",
+       "showhideselectedversions": "à¹\80à¸\9bลีà¹\88ยà¸\99à¸\97ัศà¸\99วิสัยà¸\82อà¸\87รุ่นที่เลือก",
+       "editundo": "à¸\97ำà¸\81ลัà¸\9a",
        "diff-empty": "(ไม่แตกต่าง)",
-       "diff-multi-sameuser": "(มิà¹\84à¸\94à¹\89แสดง $1 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)",
-       "diff-multi-otherusers": "(มิà¹\84à¸\94à¹\89แสดง $1 รุ่นระหว่างกลางโดยผู้ใช้ $2 คน)",
-       "diff-multi-manyusers": "(มิà¹\84à¸\94à¹\89แสดง $1 รุ่นระหว่างกลางโดยผู้ใช้กว่า $2 คน)",
-       "difference-missing-revision": "ไม่พบรุ่น{{PLURAL:$2|รุ่น| $2 รุ่น}}ของผลต่างนี้ ($1)\n\nโดยปกติเกิดจากการเข้าลิงก์ผลต่างของหน้าที่ถูกลบไปแล้ว \nดูรายละเอียดได้ที่[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
+       "diff-multi-sameuser": "(à¹\84มà¹\88แสดง $1 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)",
+       "diff-multi-otherusers": "(à¹\84มà¹\88แสดง $1 รุ่นระหว่างกลางโดยผู้ใช้ $2 คน)",
+       "diff-multi-manyusers": "(à¹\84มà¹\88แสดง $1 รุ่นระหว่างกลางโดยผู้ใช้กว่า $2 คน)",
+       "difference-missing-revision": "ไม่พบ{{PLURAL:$2|รุ่น| $2 รุ่น}}ของผลต่างนี้ ($1)\n\nโดยปกติเกิดจากการเข้าลิงก์ผลต่างของหน้าที่ถูกลบแล้ว \nดูรายละเอียดได้ที่[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
        "searchresults": "ผลการค้นหา",
        "searchresults-title": "ผลการค้นหาสำหรับ \"$1\"",
-       "titlematches": "à¸\9eà¸\9aà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87หà¸\99à¹\89าà¸\95รà¸\87à¸\81ัà¸\99",
-       "textmatches": "à¸\9eà¸\9aà¸\82à¹\89อà¸\84วามà¸\95รà¸\87à¹\83à¸\99หà¸\99à¹\89า",
-       "notextmatches": "à¹\84มà¹\88à¸\9eà¸\9aà¸\82à¹\89อà¸\84วามà¸\95รà¸\87à¹\83à¸\99หà¸\99à¹\89า",
+       "titlematches": "ชื่อเรื่องหน้าตรงกัน",
+       "textmatches": "à¸\82à¹\89อà¸\84วามหà¸\99à¹\89าà¸\95รà¸\87à¸\81ัà¸\99",
+       "notextmatches": "à¹\84มà¹\88à¸\9eà¸\9aà¸\82à¹\89อà¸\84วามหà¸\99à¹\89าà¸\95รà¸\87à¸\81ัà¸\99",
        "prevn": "ก่อนหน้า $1",
        "nextn": "ถัดไป $1",
        "prevn-title": "$1 ผลลัพธ์ก่อนหน้า",
        "searchmenu-exists": "<strong>มีหน้าชื่อ \"[[:$1]]\" บนวิกินี้</strong>\n{{PLURAL:$2|0=|ดูผลการค้นหาอื่นที่พบเพิ่มเติม}}",
        "searchmenu-new": "<strong>สร้างหน้า \"[[:$1]]\" บนวิกินี้!</strong> {{PLURAL:$2|0=|ดูหน้าที่พบด้วยการค้นหาของคุณ|ดูผลการค้นหาที่พบเพิ่มเติม}}",
        "searchprofile-articles": "หน้าเนื้อหา",
-       "searchprofile-images": "มัลà¸\95ิมีà¹\80à¸\94ีย",
+       "searchprofile-images": "สืà¹\88อà¸\9bระสม",
        "searchprofile-everything": "ทุกอย่าง",
-       "searchprofile-advanced": "à¸\8aั้นสูง",
+       "searchprofile-advanced": "à¸\82ั้นสูง",
        "searchprofile-articles-tooltip": "ค้นหาใน $1",
        "searchprofile-images-tooltip": "ค้นหาไฟล์",
        "searchprofile-everything-tooltip": "ค้นเนื้อหาทั้งหมด (รวมหน้าอภิปราย)",
        "search-result-category-size": "$1 สมาชิก ($2 หมวดหมู่ย่อย, $3 ไฟล์)",
        "search-redirect": "(เปลี่ยนทาง $1)",
        "search-section": "(ส่วน $1)",
-       "search-file-match": "(à¸\88ัà¸\9aà¸\84ูà¹\88à¹\80à¸\99ืà¹\89อหาà¹\84à¸\9fลà¹\8c)",
+       "search-file-match": "(à¹\80à¸\99ืà¹\89อหาà¹\84à¸\9fลà¹\8cà¸\95รà¸\87)",
        "search-suggest": "คุณอาจหมายถึง: $1",
        "search-interwiki-caption": "โครงการพี่น้อง",
-       "search-interwiki-default": "ผลลัพธ์จาก $1 :",
+       "search-interwiki-default": "ผลลัพธ์จาก $1:",
        "search-interwiki-more": "(เพิ่มเติม)",
        "search-relatedarticle": "สัมพันธ์",
        "searchrelated": "สัมพันธ์",
        "searchall": "ทั้งหมด",
        "showingresults": "ด้านล่างแสดง <strong>1</strong> ผลลัพธ์ เริ่มตั้งแต่รายการที่ <strong>$2</strong>",
        "showingresultsinrange": "ด้านล่างแสดงมากสุด {{PLURAL:$1|<strong>1</strong>|<strong>$1</strong>}} ผลลัพธ์ ในพิสัย #<strong>$2</strong> ถึง #<strong>$3</strong>",
-       "showingresultsheader": "{{PLURAL:$5|ผลการค้นหา <strong>$1</strong> จาก <strong>$3</strong>|ผลการค้นหา <strong>$1 - $2</strong> จาก <strong>$3</strong>}} สำหรับ <strong>$4</strong>",
+       "search-showingresults": "{{PLURAL:$4|ผลลัพธ์ <strong>$1</strong> จากทั้งหมด <strong>$3</strong>|ผลลัพธ์ <strong>$1 - $2</strong> จากทั้งหมด <strong>$3</strong>}}",
        "search-nonefound": "ไม่มีผลลัพธ์ตรงกับคำค้น",
-       "powersearch-legend": "à¸\84à¹\89à¸\99หาระà¸\94ัà¸\9aสูง",
+       "powersearch-legend": "à¸\84à¹\89à¸\99หาà¸\82ัà¹\89à¸\99สูง",
        "powersearch-ns": "ค้นหาในเนมสเปซ:",
        "powersearch-togglelabel": "เลือก:",
        "powersearch-toggleall": "ทั้งหมด",
        "powersearch-togglenone": "ไม่เลือก",
        "powersearch-remember": "จำการเลือกสำหรับการค้นหาในอนาคต",
        "search-external": "ค้นหาภายนอก",
-       "searchdisabled": "à¸\81ารà¸\84à¹\89à¸\99หา {{SITENAME}} à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99 à¸\84ุà¸\93สามารà¸\96à¸\84à¹\89à¸\99หาà¸\9cà¹\88าà¸\99à¸\81ูà¹\80à¸\81ิลหรือà¹\80à¸\8bิรà¹\8cà¸\8aà¹\80อà¸\99à¸\88ิà¸\99อืà¹\88à¸\99à¹\83à¸\99à¹\80วลาà¹\84มà¹\88à¸\99าà¸\99 à¹\82à¸\9bรà¸\94à¸\97ราà¸\9aวà¹\88าà¸\94ัà¸\8aà¸\99ีà¹\80à¸\99ืà¹\89อหาà¸\82อà¸\87 {{SITENAME}} à¸\9aà¸\99à¹\80à¸\8bิรà¹\8cà¸\8aà¹\80อà¸\99à¸\88ิà¸\99อาà¸\88à¹\80à¸\9bà¹\87à¸\99à¸\82à¹\89อมูลà¹\80à¸\81à¹\88า",
-       "search-error": "à¹\80à¸\81ิà¸\94à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¸\82à¸\93ะà¸\81ำลัà¸\87ค้นหา: $1",
-       "preferences": "à¸\95ัà¹\89à¸\87à¸\84à¹\88าสà¹\88วà¸\99à¸\95ัว",
+       "searchdisabled": "à¸\81ารà¸\84à¹\89à¸\99หา {{SITENAME}} à¸\96ูà¸\81à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99 \nà¸\84ุà¸\93สามารà¸\96à¸\84à¹\89à¸\99หาà¹\82à¸\94ยà¸\97าà¸\87à¸\81ูà¹\80à¸\81ิลà¹\83à¸\99ระหวà¹\88าà¸\87à¸\99ัà¹\89à¸\99\nà¹\82à¸\9bรà¸\94à¸\97ราà¸\9aวà¹\88าà¸\94ัà¸\8aà¸\99ีà¹\80à¸\99ืà¹\89อหา {{SITENAME} à¸­à¸²à¸\88ลà¹\89าสมัย",
+       "search-error": "มีà¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¸\82à¸\93ะค้นหา: $1",
+       "preferences": "à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88า",
        "mypreferences": "การตั้งค่า",
        "prefs-edits": "จำนวนการแก้ไข:",
        "prefsnologintext2": "โปรดล็อกอินเพื่อเปลี่ยนการตั้งค่าของคุณ",
        "prefs-skin": "หน้าตา",
-       "skin-preview": "à¹\81สà¸\94à¸\87à¸\95ัวอยà¹\88าà¸\87",
+       "skin-preview": "ตัวอย่าง",
        "datedefault": "ไม่มีการตั้งค่า",
        "prefs-labs": "คุณสมบัติทดลอง",
        "prefs-user-pages": "หน้าผู้ใช้",
        "prefs-watchlist": "รายการเฝ้าดู",
        "prefs-watchlist-days": "จำนวนวันที่แสดงในรายการเฝ้าดู:",
        "prefs-watchlist-days-max": "มากสุด $1 วัน",
-       "prefs-watchlist-edits": "à¸\88ำà¸\99วà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82มาà¸\81สุà¸\94à¸\97ีà¹\88à¹\81สà¸\94à¸\87à¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\97ีà¹\88à¸\82ยายออà¸\81:",
+       "prefs-watchlist-edits": "à¸\88ำà¸\99วà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82มาà¸\81สุà¸\94à¸\97ีà¹\88à¹\81สà¸\94à¸\87à¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82ยาย:",
        "prefs-watchlist-edits-max": "จำนวนสูงสุด: 1000",
        "prefs-watchlist-token": "โทเค็นรายการเฝ้าดู:",
        "prefs-misc": "เบ็ดเตล็ด",
        "rows": "แถว:",
        "columns": "คอลัมน์:",
        "searchresultshead": "ค้นหา",
-       "stub-threshold": "ขีดแบ่งสำหรับ <a href=\"#\" class=\"stub\">ลิงก์โครง</a> (ไบต์):",
+       "stub-threshold": "ขีดแบ่งสำหรับการจัดรูปแบบ <a href=\"#\" class=\"stub\">ลิงก์โครง</a> (ไบต์):",
        "stub-threshold-disabled": "ปิดใช้งาน",
        "recentchangesdays": "จำนวนวันที่แสดงในปรับปรุงล่าสุด:",
        "recentchangesdays-max": "มากสุด $1 วัน",
        "recentchangescount": "จำนวนการแก้ไขที่แสดงโดยปริยาย:",
        "prefs-help-recentchangescount": "นี่รวมถึงการปรับปรุงล่าสุด ประวิติหน้า และปูม",
        "prefs-help-watchlist-token2": "นี่คือแป้นลับสำหรับเข้าการป้อนเว็บรายการเฝ้าดูของคุณ\nใครก็ตามที่ทราบจะสามารถอ่านรายการเฝ้าดูของคุณได้ ฉะนั้นอย่าบอกผู้อื่น\n[[Special:ResetTokens|คลิกที่นี่หากคุณต้องการตั้งใหม่]]",
-       "savedprefs": "à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\94à¹\89à¸\96ูà¸\81à¸\9aัà¸\99à¸\97ึà¸\81แล้ว",
+       "savedprefs": "à¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\82อà¸\87à¸\84ุà¸\93แล้ว",
        "timezonelegend": "เขตเวลา:",
-       "localtime": "เวลาท้องถิ่น",
+       "localtime": "เวลาท้องถิ่น:",
        "timezoneuseserverdefault": "ใช้ค่าโดยปริยายของวิกิ ($1)",
        "timezoneuseoffset": "อื่น ๆ (ระบุส่วนต่างเวลา)",
        "servertime": "เวลาเซิร์ฟเวอร์:",
-       "guesstimezone": "à¹\80รียà¸\81à¸\84à¹\88าà¸\88าà¸\81à¹\80วà¹\87à¸\9aà¹\80à¸\9aราวà¹\8cà¹\80à¸\8bอรà¹\8c",
+       "guesstimezone": "เรียกค่าจากเบราว์เซอร์",
        "timezoneregion-africa": "แอฟริกา",
        "timezoneregion-america": "อเมริกา",
        "timezoneregion-antarctica": "แอนตาร์กติกา",
        "timezoneregion-europe": "ยุโรป",
        "timezoneregion-indian": "มหาสมุทรอินเดีย",
        "timezoneregion-pacific": "มหาสมุทรแปซิฟิก",
-       "allowemail": "à¹\80à¸\9bิà¸\94รัà¸\9aอีเมลจากผู้ใช้อื่น",
+       "allowemail": "à¹\80à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99อีเมลจากผู้ใช้อื่น",
        "prefs-searchoptions": "ค้นหา",
        "prefs-namespaces": "เนมสเปซ",
        "default": "ค่าโดยปริยาย",
        "prefs-files": "ไฟล์",
        "prefs-custom-css": "สไตล์ชีตปรับแต่งเอง",
        "prefs-custom-js": "จาวาสคริปต์ปรับแต่งเอง",
-       "prefs-common-css-js": "CSS / à¸\88าวาสà¸\84ริà¸\9bà¸\95à¹\8cà¸\97ีà¹\88à¹\83à¸\8aà¹\89รà¹\88วมà¸\81ัà¸\99à¸\81ับทุกหน้าตา:",
-       "prefs-reset-intro": "à¸\84ุà¸\93สามารà¸\96à¹\83à¸\8aà¹\89หà¸\99à¹\89าà¸\99ีà¹\89à¸\95ัà¹\89à¸\87à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\82อà¸\87à¸\84ุà¸\93à¸\81ลัà¸\9aà¹\84à¸\9bยัà¸\87à¸\84à¹\88าà¸\95ัà¹\89à¸\87à¸\95à¹\89à¸\99à¸\82อà¸\87à¹\80วà¹\87à¸\9aà¹\83หมà¹\88\nà¸\8bึà¹\88à¸\87ไม่สามารถทำกลับได้",
+       "prefs-common-css-js": "CSS / à¸\88าวาสà¸\84ริà¸\9bà¸\95à¹\8cรวมสำหรับทุกหน้าตา:",
+       "prefs-reset-intro": "à¸\84ุà¸\93สามารà¸\96à¹\83à¸\8aà¹\89หà¸\99à¹\89าà¸\99ีà¹\89à¸\95ัà¹\89à¸\87à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\82อà¸\87à¸\84ุà¸\93à¹\80à¸\9bà¹\87à¸\99à¸\84à¹\88าà¹\82à¸\94ยà¸\9bริยายà¸\82อà¸\87à¹\80วà¹\87à¸\9aà¹\83หมà¹\88\nไม่สามารถทำกลับได้",
        "prefs-emailconfirm-label": "การยืนยันอีเมล:",
        "youremail": "อีเมล:",
        "username": "{{GENDER:$1|ชื่อผู้ใช้}}:",
        "yourlanguage": "ภาษา:",
        "yourvariant": "อักษรต่างรูปของเนื้อหา:",
        "prefs-help-variant": "รูปแปรหรืออักขรวิธีที่คุณเลือกให้แสดงหน้าเนื้อหาของวิกินี้",
-       "yournick": "ลายเซ็น:",
-       "prefs-help-signature": "à¸\84วามà¹\80หà¹\87à¸\99à¹\83à¸\99หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\84วรลà¸\87ลายà¹\80à¸\8bà¹\87à¸\99ด้วย \"<nowiki>~~~~</nowiki>\" ซึ่งจะถูกแปลงเป็นลายเซ็นของคุณและตราเวลา",
-       "badsig": "ลายเซ็นดิบไม่ถูกต้อง ให้ตรวจสอบแท็กเอชทีเอ็มแอล",
-       "badsiglength": "ลายเซ็นของคุณยาวเกินไป ต้องยาวไม่เกิน $1 ตัวอักษร",
-       "yourgender": "à¹\80à¸\9eศ:",
-       "gender-unknown": "ไม่ระบุ",
+       "yournick": "ลายเซ็นใหม่:",
+       "prefs-help-signature": "à¸\84วรลà¸\87ลายà¹\80à¸\8bà¹\87à¸\99à¸\84วามà¹\80หà¹\87à¸\99à¹\83à¸\99หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยด้วย \"<nowiki>~~~~</nowiki>\" ซึ่งจะถูกแปลงเป็นลายเซ็นของคุณและตราเวลา",
+       "badsig": "ลายเซ็นดิบไม่ถูกต้อง \nให้ตรวจสอบป้ายระบุเอชทีเอ็มแอล",
+       "badsiglength": "ลายเซ็นของคุณยาวเกินไป \nต้องยาวไม่เกิน $1 อักขระ",
+       "yourgender": "à¸\95à¹\89อà¸\87à¸\81ารà¹\83หà¹\89ระà¸\9aุà¸\84ุà¸\93à¹\80à¸\9bà¹\87à¸\99à¹\80à¸\9eศà¹\83à¸\94",
+       "gender-unknown": "à¸\82อà¹\84มà¹\88ระà¸\9aุ",
        "gender-male": "ชาย",
        "gender-female": "หญิง",
-       "prefs-help-gender": "à¹\80ลือà¸\81à¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\99ีà¹\89หรือà¹\84มà¹\88à¸\81à¹\87à¹\84à¸\94à¹\89\nà¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cà¹\83à¸\8aà¹\89à¸\84à¹\88าà¸\99ีà¹\89à¹\80à¸\9eืà¹\88อà¸\95ิà¸\94à¸\95à¹\88อà¸\84ุà¸\93à¹\81ละà¸\81ลà¹\88าวà¸\96ึà¸\87à¸\84ุà¸\93à¹\82à¸\94ยà¹\83à¸\8aà¹\89à¹\80à¸\9eศà¸\97าà¸\87à¹\84วยาà¸\81รà¸\93à¹\8cà¸\97ีà¹\88à¹\80หมาะสมà¹\80มืà¹\88อà¸\95ิà¸\94à¸\95à¹\88อà¸\9cูà¹\89อืà¹\88à¸\99\nà¸\82à¹\89อมูลนี้เปิดเผยต่อสาธารณะ",
+       "prefs-help-gender": "à¹\80ลือà¸\81à¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\99ีà¹\89หรือà¹\84มà¹\88à¸\81à¹\87à¹\84à¸\94à¹\89\nà¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cà¹\83à¸\8aà¹\89à¸\84à¹\88าà¸\99ีà¹\89à¹\80à¸\9eืà¹\88อà¸\95ิà¸\94à¸\95à¹\88อà¸\84ุà¸\93à¹\81ละà¸\81ลà¹\88าวà¸\96ึà¸\87à¸\84ุà¸\93à¹\82à¸\94ยà¹\83à¸\8aà¹\89à¹\80à¸\9eศà¸\97าà¸\87à¹\84วยาà¸\81รà¸\93à¹\8cà¸\97ีà¹\88à¹\80หมาะสมà¹\80มืà¹\88อà¸\95ิà¸\94à¸\95à¹\88อà¸\9cูà¹\89อืà¹\88à¸\99\nสารสà¸\99à¹\80à¸\97ศนี้เปิดเผยต่อสาธารณะ",
        "email": "อีเมล",
-       "prefs-help-realname": "ไม่จำเป็นต้องใช้ชื่อจริง ถ้าคุณเลือกใช้ชื่อจริง จะใช้เพื่อให้เกียรติแก่งานของคุณ",
-       "prefs-help-email": "à¹\84มà¹\88à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87à¹\83สà¹\88à¸\97ีà¹\88อยูà¹\88อีà¹\80มล à¹\81à¸\95à¹\88à¸\88ำà¹\80à¸\9bà¹\87à¸\99สำหรัà¸\9aà¸\81ารà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¹\80มืà¹\88อคุณลืมรหัสผ่าน",
-       "prefs-help-email-others": "à¸\84ุà¸\93ยัà¸\87สามารà¸\96à¹\80ลือà¸\81à¹\83หà¹\89à¸\9cูà¹\89อืà¹\88à¸\99à¸\95ิà¸\94à¸\95à¹\88อà¸\84ุà¸\93à¹\82à¸\94ยอีà¹\80มลà¸\9cà¹\88าà¸\99ลิà¸\87à¸\81à¹\8cà¸\9aà¸\99หà¸\99à¹\89าà¸\9cูà¹\89à¹\83à¸\8aà¹\89หรือหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\81ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\82อà¸\87à¸\84ุà¸\93\nà¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93à¹\84มà¹\88à¸\96ูà¸\81à¹\80à¸\9bิà¸\94à¹\80à¸\9cยเมื่อผู้ใช้อื่นติดต่อคุณ",
+       "prefs-help-realname": "ไม่จำเป็นต้องใช้ชื่อจริง \nถ้าคุณเลือกใช้ชื่อจริง จะใช้เพื่อให้เกียรติแก่งานของคุณ",
+       "prefs-help-email": "à¹\84มà¹\88à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87à¹\83สà¹\88à¸\97ีà¹\88อยูà¹\88อีà¹\80มล à¹\81à¸\95à¹\88à¸\88ำà¹\80à¸\9bà¹\87à¸\99สำหรัà¸\9aà¸\81ารà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88หาà¸\81คุณลืมรหัสผ่าน",
+       "prefs-help-email-others": "à¸\84ุà¸\93ยัà¸\87สามารà¸\96à¹\80ลือà¸\81à¹\83หà¹\89à¸\9cูà¹\89อืà¹\88à¸\99à¸\95ิà¸\94à¸\95à¹\88อà¸\84ุà¸\93à¹\82à¸\94ยอีà¹\80มลà¸\9cà¹\88าà¸\99ลิà¸\87à¸\81à¹\8cà¸\9aà¸\99หà¸\99à¹\89าà¸\9cูà¹\89à¹\83à¸\8aà¹\89หรือหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\81ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\82อà¸\87à¸\84ุà¸\93\nà¹\84มà¹\88à¹\80à¸\9bิà¸\94à¹\80à¸\9cยà¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93เมื่อผู้ใช้อื่นติดต่อคุณ",
        "prefs-help-email-required": "ต้องการที่อยู่อีเมล",
-       "prefs-info": "à¸\82à¹\89อมูลเบื้องต้น",
+       "prefs-info": "สารสà¸\99à¹\80à¸\97ศเบื้องต้น",
        "prefs-i18n": "สากลวิวัตน์",
        "prefs-signature": "ลายเซ็น",
-       "prefs-dateformat": "รูปแบบวันที่และเวลา",
+       "prefs-dateformat": "รูปแบบวัน",
        "prefs-timeoffset": "ส่วนต่างเวลา",
        "prefs-advancedediting": "ตัวเลือกทั่วไป",
        "prefs-editor": "ตัวแก้ไข",
        "prefs-tokenwatchlist": "โทเค็น",
        "prefs-diffs": "ผลต่าง",
        "prefs-help-prefershttps": "การตั้งค่านี้จะมีผลเมื่อคุณล็อกอินครั้งถัดไป",
+       "prefswarning-warning": "คุณเปลี่ยนแปลงการตั้งค่าของคุณที่ยังไม่ได้บันทึก\nหากคุณออกจากหน้านี้โดยไม่คลิก \"$1\" จะไม่ปรับการตั้งค่าของคุณ",
        "prefs-tabs-navigation-hint": "แนะนำ: คุณสามารถใช้แป้นลูกศรซ้ายและขวาเพื่อนำทางระหว่างแถบในรายการแถบได้",
        "email-address-validity-valid": "ที่อยู่อีเมลดูถูกต้อง",
        "email-address-validity-invalid": "ป้อนที่อยู่อีเมลที่ถูกต้อง",
-       "userrights": "บริหารสิทธิผู้ใช้",
-       "userrights-lookup-user": "à¸\9aริหารสิà¸\97à¸\98ิผู้ใช้",
+       "userrights": "à¸\81ารà¸\9aริหารสิà¸\97à¸\98ิà¸\9cูà¹\89à¹\83à¸\8aà¹\89",
+       "userrights-lookup-user": "à¸\9aริหารà¸\81ลุà¹\88มผู้ใช้",
        "userrights-user-editname": "ใส่ชื่อผู้ใช้:",
        "editusergroup": "แก้ไขกลุ่มผู้ใช้",
-       "editinguser": "กำลังเปลี่ยนสิทธิผู้ใช้ของผู้ใช้ '''[[User:$1|$1]]''' $2",
+       "editinguser": "กำลังเปลี่ยนสิทธิผู้ใช้ของผู้ใช้ <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "แก้ไขกลุ่มผู้ใช้",
-       "saveusergroups": "à¸\95à¸\81ลà¸\87",
-       "userrights-groupsmember": "สมาà¸\8aิà¸\81à¹\83à¸\99à¸\81ลุà¹\88ม:",
+       "saveusergroups": "à¸\9aัà¸\99à¸\97ึà¸\81à¸\81ลุà¹\88มà¸\9cูà¹\89à¹\83à¸\8aà¹\89",
+       "userrights-groupsmember": "สมาà¸\8aิà¸\81à¸\82อà¸\87:",
        "userrights-groupsmember-auto": "สมาชิกโดยปริยายของ:",
        "userrights-groups-help": "คุณสามารถเปลี่ยนแปลงกลุ่มที่ผู้ใช้รายนี้อยู่:\n* กล่องที่มีเครื่องหมายถูก หมายความว่า ผู้ใช้อยู่ในกลุ่มนั้น\n* กล่องที่ไม่มีเครื่องหมายถูก หมายความว่า ผู้ใช้ไม่ได้อยู่ในกลุ่มนั้น\n* เครื่องหมาย * ชี้ว่าคุณไม่สามารถนำกลุ่มนั้นออกได้เมื่อคุณเพิ่มกลุ่มนั้นไปแล้ว หรือกลับกัน",
        "userrights-reason": "เหตุผล:",
-       "userrights-no-interwiki": "à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aสิทธิแก้ไขสิทธิผู้ใช้บนวิกิอื่น",
-       "userrights-nodatabase": "à¹\84มà¹\88มีà¸\90าà¸\99à¸\82à¹\89อมูล $1 à¸­à¸¢à¸¹à¹\88 à¸«à¸£à¸·à¸­à¸\90าà¸\99à¸\82à¹\89อมูลอยูà¹\88à¸\9aà¸\99à¹\80à¸\84รืà¹\88อà¸\87อืà¹\88à¸\99",
+       "userrights-no-interwiki": "à¸\84ุà¸\93à¹\84มà¹\88มีสิทธิแก้ไขสิทธิผู้ใช้บนวิกิอื่น",
+       "userrights-nodatabase": "ไม่มีฐานข้อมูล $1 หรือฐานข้อมูลอยู่บนเครื่องอื่น",
        "userrights-nologin": "คุณต้อง[[Special:UserLogin|ล็อกอิน]]ด้วยบัญชีผู้ดูแลระบบก่อน จึงจะกำหนดสิทธิผู้ใช้ได้",
-       "userrights-notallowed": "à¸\9aัà¸\8dà¸\8aีà¸\82อà¸\87à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89à¹\80à¸\9eิà¹\88มหรือลà¸\94สิทธิผู้ใช้",
+       "userrights-notallowed": "à¸\9aัà¸\8dà¸\8aีà¸\82อà¸\87à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\80à¸\9eิà¹\88มหรือà¹\80à¸\9eิà¸\81à¸\96อà¸\99สิทธิผู้ใช้",
        "userrights-changeable-col": "กลุ่มที่คุณสามารถเปลี่ยนได้",
        "userrights-unchangeable-col": "กลุ่มที่คุณไม่สามารถเปลี่ยนได้",
        "userrights-conflict": "พบการเปลี่ยนแปลงสิทธิผู้ใช้ขัดกัน! โปรดทบทวนและยืนยันการเปลี่ยนแปลงของคุณ",
-       "userrights-removed-self": "คุณเพิกถอนสิทธิของคุณสำเร็จแล้ว ฉะนั้น คุณจึงไม่สามารถเข้าถึงหน้านี้ได้อีกต่อไป",
+       "userrights-removed-self": "คุณเพิกถอนสิทธิของคุณสำเร็จแล้ว ฉะนั้น คุณจึงไม่สามารถเข้าถึงหน้านี้ได้อีก",
        "group": "กลุ่ม:",
        "group-user": "ผู้ใช้",
        "group-autoconfirmed": "ผู้ใช้ทั่วไป",
        "right-move": "ย้ายหน้า",
        "right-move-subpages": "ย้ายหน้าพร้อมหน้าย่อย",
        "right-move-rootuserpages": "ย้ายหน้าผู้ใช้หลัก",
+       "right-move-categorypages": "เปลี่ยนชื่อหน้าหมวดหมู่",
        "right-movefile": "ย้ายไฟล์",
        "right-suppressredirect": "ไม่สร้างหน้าเปลี่ยนทางจากหน้าต้นทางเมื่อย้ายหน้า",
        "right-upload": "อัปโหลดไฟล์",
-       "right-reupload": "à¹\80à¸\82ียà¸\99ทับไฟล์เดิม",
-       "right-reupload-own": "à¹\80à¸\82ียà¸\99à¸\97ัà¸\9aà¹\84à¸\9fลà¹\8cà¹\80à¸\94ิมà¸\97ีà¹\88อัà¸\9bà¹\82หลà¸\94à¸\94à¹\89วยà¸\95à¸\99เอง",
-       "right-reupload-shared": "à¹\80à¸\82ียà¸\99à¸\97ัà¸\9aà¹\84à¸\9fลà¹\8cà¸\9aà¸\99à¸\84ลัà¸\87à¹\80à¸\81à¹\87à¸\9aสืà¹\88อสà¹\88วà¸\99à¸\81ลาà¸\87",
+       "right-reupload": "à¸\9aัà¸\99à¸\97ึà¸\81ทับไฟล์เดิม",
+       "right-reupload-own": "à¸\9aัà¸\99à¸\97ึà¸\81à¸\97ัà¸\9aà¹\84à¸\9fลà¹\8cà¹\80à¸\94ิมà¸\97ีà¹\88à¸\84ุà¸\93อัà¸\9bà¹\82หลà¸\94เอง",
+       "right-reupload-shared": "à¸\9aัà¸\99à¸\97ึà¸\81à¸\97ัà¸\9aà¹\84à¸\9fลà¹\8cà¸\9aà¸\99à¸\84ลัà¸\87รà¹\88วมสืà¹\88อà¸\97à¹\89อà¸\87à¸\96ิà¹\88à¸\99",
        "right-upload_by_url": "อัปโหลดไฟล์จากยูอาร์แอล",
-       "right-purge": "ลà¹\89าà¸\87à¹\81à¸\84à¸\8aà¸\82อà¸\87à¹\80วà¹\87à¸\9aà¹\84à¸\8bà¸\95à¹\8cà¹\82à¸\94ยà¹\84มà¹\88มีà¸\81ารยืà¸\99ยัà¸\99",
-       "right-autoconfirmed": "à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\97ีà¹\88à¸\96ูà¸\81à¸\81ึà¹\88à¸\87ลà¹\87อà¸\81",
+       "right-purge": "ล้างแคชของเว็บไซต์โดยไม่ยืนยัน",
+       "right-autoconfirmed": "à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aà¸\9cลà¸\88าà¸\81à¸\82ีà¸\94à¸\88ำà¸\81ัà¸\94อัà¸\95รายึà¸\94à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eี",
        "right-bot": "กำหนดเป็นกระบวนการอัตโนมัติ",
-       "right-nominornewtalk": "à¹\84มà¹\88มีà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80ลà¹\87à¸\81à¸\99à¹\89อยà¹\83à¸\99หà¸\99à¹\89าอภิà¸\9bรายà¸\97ีà¹\88ทำให้การแจ้งข้อความใหม่ปรากฏ",
+       "right-nominornewtalk": "หาà¸\81à¹\84มà¹\88มีà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80ลà¹\87à¸\81à¸\99à¹\89อยà¹\83à¸\99หà¸\99à¹\89าอภิà¸\9bรายà¸\88ะทำให้การแจ้งข้อความใหม่ปรากฏ",
        "right-apihighlimits": "ใช้ข้อจำกัดที่สูงขึ้นในคำสั่งเอพีไอ",
        "right-writeapi": "ใช้การเขียนเอพีไอ",
        "right-delete": "ลบหน้า",
-       "right-bigdelete": "ลà¸\9aหà¸\99à¹\89าà¸\97ีà¹\88มีà¸\9bระวัà¸\95ิà¸\82à¸\99าà¸\94à¹\83หà¸\8dà¹\88",
-       "right-deletelogentry": "ลà¸\9aà¹\81ละà¸\81ูà¹\89à¸\84ืà¸\99หà¸\99à¹\88วยà¸\9bูมà¸\97ีà¹\88à¹\80à¸\88าะà¸\88à¸\87",
+       "right-bigdelete": "ลบหน้าที่มีประวัติใหญ่",
+       "right-deletelogentry": "ลà¸\9aà¹\81ละà¸\81ูà¹\89à¸\84ืà¸\99หà¸\99à¹\88วยà¸\9bูมà¸\88ำà¹\80à¸\9eาะ",
        "right-deleterevision": "ลบและกู้คืนรุ่นจำเพาะของหน้า",
        "right-deletedhistory": "ดูหน่วยประวัติที่ถูกลบ โดยไม่มีข้อความที่เกี่ยวข้อง",
        "right-deletedtext": "ดูข้อความที่ถูกลบและการเปลี่ยนแปลงระหว่างรุ่นที่ถูกลบ",
        "right-browsearchive": "ค้นหาหน้าที่ถูกลบ",
        "right-undelete": "กู้คืนหน้า",
-       "right-suppressrevision": "ดูรุ่นต่าง ๆ หรือ ซ่อน/เลิกซ่อนรุ่นที่กำหนดจากผู้ใช้ใด ๆ",
-       "right-viewsuppressed": "à¸\94ูรุà¸\99à¸\97ีà¹\88à¸\96ูà¸\81à¸\8bà¹\88อà¸\99à¸\88าà¸\81à¸\9cูà¹\89à¹\83à¸\8aà¹\89อืà¹\88น",
+       "right-suppressrevision": "ดู ซ่อนและเปิดเผยรุ่นจำเพาะของหน้าจากผู้ใช้ทุกคน",
+       "right-viewsuppressed": "à¸\94ูรุà¹\88à¸\99à¸\97ีà¹\88à¸\96ูà¸\81à¸\8bà¹\88อà¸\99à¸\88าà¸\81à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ุà¸\81à¸\84น",
        "right-suppressionlog": "ดูปูมส่วนตัว",
        "right-block": "บล็อกมิให้ผู้ใช้อื่นแก้ไข",
-       "right-blockemail": "à¸\9aลà¹\87อà¸\81มิà¹\83หà¹\89à¸\9cูà¹\89à¹\83à¸\8a้ส่งอีเมล",
+       "right-blockemail": "à¸\9aลà¹\87อà¸\81à¸\9cูà¹\89à¹\83à¸\8aà¹\89มิà¹\83ห้ส่งอีเมล",
        "right-hideuser": "บล็อกชื่อผู้ใช้ ซ่อนไม่ให้สาธารณะเห็น",
-       "right-ipblock-exempt": "อà¹\89อมการบล็อกเลขที่อยู่ไอพี บล็อกอัตโนมัติ และบล็อกช่วง",
+       "right-ipblock-exempt": "à¹\80ลีà¹\88ยà¸\87การบล็อกเลขที่อยู่ไอพี บล็อกอัตโนมัติ และบล็อกช่วง",
        "right-proxyunbannable": "เลี่ยงการบล็อกอัตโนมัติของพร็อกซี",
        "right-unblockself": "ปลดบล็อกตนเอง",
-       "right-protect": "เปลี่ยนระดับการล็อกและแก้ไขหน้าที่ถูกล็อก",
-       "right-editprotected": "à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\97ีà¹\88à¸\96ูà¸\81ลà¹\87อà¸\81à¸\8bึà¹\88à¸\87 \"{{int:protect-level-sysop}}\"",
-       "right-editsemiprotected": "à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\97ีà¹\88à¸\96ูà¸\81ลà¹\87อà¸\81à¸\8bึà¹\88à¸\87 \"{{int:protect-level-autoconfirmed}}\"",
+       "right-protect": "เปลี่ยนระดับการล็อกและแก้ไขหน้าที่ถูกล็อกแบบถ่ายทอด",
+       "right-editprotected": "à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\97ีà¹\88à¸\96ูà¸\81ลà¹\87อà¸\81à¹\83à¸\99à¸\90าà¸\99ะ \"{{int:protect-level-sysop}}\"",
+       "right-editsemiprotected": "à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\97ีà¹\88à¸\96ูà¸\81ลà¹\87อà¸\81à¹\83à¸\99à¸\90าà¸\99ะ \"{{int:protect-level-autoconfirmed}}\"",
        "right-editinterface": "แก้ไขอินเตอร์เฟซผู้ใช้",
        "right-editusercssjs": "แก้ไขไฟล์ CSS และจาวาสคริปต์ของผู้ใช้อื่น",
        "right-editusercss": "แก้ไขไฟล์ CSS ของผู้ใช้อื่น",
        "right-editmyusercss": "แก้ไขไฟล์ซีเอสเอสผู้ใช้ของคุณเอง",
        "right-editmyuserjs": "แก้ไขไฟล์จาวาสคริปต์ผู้ใช้ของคุณเอง",
        "right-viewmywatchlist": "ดูรายการเฝ้าดูของคุณ",
-       "right-editmywatchlist": "à¹\81à¸\81à¹\89à¹\84à¸\82รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93 à¸«à¸¡à¸²à¸¢à¹\80หà¸\95ุวà¹\88า à¸\81ารà¸\81ระà¸\97ำà¸\9aาà¸\87อยà¹\88าà¸\87อาà¸\88ยัà¸\87à¹\80à¸\9eิà¹\88มหà¸\99à¹\89าà¹\81มà¹\89à¸\88ะปราศจากสิทธินี้",
+       "right-editmywatchlist": "à¹\81à¸\81à¹\89à¹\84à¸\82รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93 à¸«à¸¡à¸²à¸¢à¹\80หà¸\95ุวà¹\88า à¸\9aาà¸\87à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารà¸\88ะยัà¸\87à¹\80à¸\9eิà¹\88มหà¸\99à¹\89าà¹\81มà¹\89ปราศจากสิทธินี้",
        "right-viewmyprivateinfo": "ดูข้อมูลส่วนตัวของคุณ (เช่น ที่อยู่อีเมล ชื่อจริง)",
        "right-editmyprivateinfo": "แก้ไขข้อมูลส่วนตัวของคุณ (เช่น ที่อยู่อีเมล ชื่อจริง)",
        "right-editmyoptions": "แก้ไขการตั้งค่าของคุณ",
        "right-rollback": "ย้อนการแก้ไขของผู้ใช้ล่าสุดที่แก้ไขหน้าเฉพาะอย่างรวดเร็ว",
-       "right-markbotedits": "ทำเครื่องหมายการย้อนว่าเป็นการแก้ไขโดยบอต",
+       "right-markbotedits": "à¸\97ำà¹\80à¸\84รืà¹\88อà¸\87หมายà¸\81ารยà¹\89อà¸\99à¸\81ลัà¸\9aà¸\89ุà¸\81à¹\80à¸\89ิà¸\99วà¹\88าà¹\80à¸\9bà¹\87à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\82à¸\94ยà¸\9aอà¸\95",
        "right-noratelimit": "ไม่ได้รับผลกระทบจากขีดจำกัดอัตรา",
        "right-import": "นำเข้าหน้าจากวิกิอื่น",
        "right-importupload": "นำเข้าหน้าจากไฟล์ที่อัปโหลด",
        "right-patrol": "ทำเครื่องหมายการแก้ไขของผู้อื่นว่าตรวจสอบแล้ว",
        "right-autopatrol": "ให้ทำเครื่องหมายการแก้ไขของตนเองเป็นตรวจสอบแล้วอัตโนมัติ",
-       "right-patrolmarks": "à¸\94ูà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87ลà¹\88าสุà¸\94à¸\82อà¸\87à¸\81ารà¸\97ำà¹\80à¸\84รืà¹\88อà¸\87หมายà¸\95รวà¸\88สอà¸\9a",
+       "right-patrolmarks": "à¸\94ูà¸\81ารà¸\97ำà¹\80à¸\84รืà¹\88อà¸\87หมายà¸\95รวà¸\88สอà¸\9aà¹\83à¸\99à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87ลà¹\88าสุà¸\94",
        "right-unwatchedpages": "ดูรายการหน้าที่ไม่มีผู้เฝ้าดู",
        "right-mergehistory": "รวมประวัติหน้า",
        "right-userrights": "แก้ไขสิทธิผู้ใช้ทั้งหมด",
        "action-createpage": "สร้างหน้า",
        "action-createtalk": "สร้างหน้าอภิปราย",
        "action-createaccount": "สร้างบัญชีผู้ใช้นี้",
-       "action-history": "à¸\94ูà¸\9bระวัà¸\95ิà¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89",
+       "action-history": "ดูประวัติหน้านี้",
        "action-minoredit": "ทำเครื่องหมายการแก้ไขนี้เป็นการแก้ไขเล็กน้อย",
        "action-move": "ย้ายหน้านี้",
-       "action-move-subpages": "ย้ายหน้านี้ รวมทั้งหน้าย่อย",
+       "action-move-subpages": "ย้ายหน้านี้และหน้าย่อย",
        "action-move-rootuserpages": "ย้ายหน้าผู้ใช้หลัก",
+       "action-move-categorypages": "เปลี่ยนชื่อหน้าหมวดหมู่",
        "action-movefile": "ย้ายไฟล์นี้",
        "action-upload": "อัปโหลดไฟล์นี้",
-       "action-reupload": "อัà¸\9bà¹\82หลà¸\94ทับไฟล์ที่มีอยู่แล้วนี้",
-       "action-reupload-shared": "à¹\80à¸\82ียà¸\99à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¸\97ัà¸\9aà¸\9aà¸\99à¸\84ลัà¸\87สà¹\88วà¸\99à¸\81ลาà¸\87",
-       "action-upload_by_url": "อัà¸\9bà¹\82หลà¸\94à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¸\88าà¸\81à¸\97ีà¹\88อยูà¹\88ยูอารà¹\8cà¹\81อล",
+       "action-reupload": "à¸\9aัà¸\99à¸\97ึà¸\81ทับไฟล์ที่มีอยู่แล้วนี้",
+       "action-reupload-shared": "à¸\9aัà¸\99à¸\97ึà¸\81à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¸\97ัà¸\9aà¸\9aà¸\99à¸\84ลัà¸\87รวม",
+       "action-upload_by_url": "อัปโหลดไฟล์นี้จากยูอาร์แอล",
        "action-writeapi": "ใช้การเขียนเอพีไอ",
        "action-delete": "ลบหน้านี้",
-       "action-deleterevision": "ลบรุ่นนี้",
+       "action-deleterevision": "ลà¸\9aรุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\99ีà¹\89",
        "action-deletedhistory": "ดูประวัติที่ถูกลบของหน้านี้",
        "action-browsearchive": "ค้นหาหน้าที่ถูกลบ",
        "action-undelete": "กู้คืนหน้านี้",
-       "action-suppressrevision": "ทบทวนและกู้คืนรุ่นที่ซ่อนอยู่นี้",
+       "action-suppressrevision": "à¸\97à¸\9aà¸\97วà¸\99à¹\81ละà¸\81ูà¹\89à¸\84ืà¸\99รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ีà¹\88à¸\8bà¹\88อà¸\99อยูà¹\88à¸\99ีà¹\89",
        "action-suppressionlog": "ดูปูมส่วนตัวนี้",
-       "action-block": "à¸\9aลà¹\87อà¸\81à¸\9cูà¹\89à¹\83à¸\8aà¹\89รายà¸\99ีà¹\89มิà¹\83หà¹\89à¹\81à¸\81à¹\89à¹\84à¸\82",
+       "action-block": "บล็อกผู้ใช้นี้มิให้แก้ไข",
        "action-protect": "เปลี่ยนระดับการล็อกสำหรับหน้านี้",
        "action-rollback": "ย้อนการแก้ไขของผู้ใช้ล่าสุดที่แก้ไขหน้าเฉพาะอย่างรวดเร็ว",
        "action-import": "นำเข้าหน้าจากวิกิอื่น",
        "action-sendemail": "ส่งอีเมล",
        "action-editmywatchlist": "แก้ไขรายการเฝ้าดูของคุณ",
        "action-viewmywatchlist": "ดูรายการเฝ้าดูของคุณ",
-       "action-viewmyprivateinfo": "à¸\94ูà¸\82à¹\89อมูลส่วนตัวของคุณ",
-       "action-editmyprivateinfo": "à¹\81à¸\81à¹\89à¹\84à¸\82à¸\82à¹\89อมูลส่วนตัวของคุณ",
-       "nchanges": "$1 à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82",
-       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\81ารà¹\80à¸\82à¹\89าà¸\8aมลà¹\88าสุà¸\94}}",
+       "action-viewmyprivateinfo": "à¸\94ูสารสà¸\99à¹\80à¸\97ศส่วนตัวของคุณ",
+       "action-editmyprivateinfo": "à¹\81à¸\81à¹\89à¹\84à¸\82สารสà¸\99à¹\80à¸\97ศส่วนตัวของคุณ",
+       "nchanges": "$1 à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\81ารà¹\80ยีà¹\88ยมà¸\8aมà¸\84รัà¹\89à¸\87สุà¸\94à¸\97à¹\89าย}}",
        "enhancedrc-history": "ประวัติ",
        "recentchanges": "ปรับปรุงล่าสุด",
        "recentchanges-legend": "ตัวเลือกการปรับปรุงล่าสุด",
-       "recentchanges-summary": "à¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9bà¹\87à¸\99รายà¸\81ารà¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87ลà¹\88าสุà¸\94à¸\9aà¸\99วิà¸\81ินี้",
+       "recentchanges-summary": "à¸\95ิà¸\94à¸\95ามà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87ลà¹\88าสุà¸\94à¸\9aà¸\99วิà¸\81ิà¸\99ีà¹\89à¹\84à¸\94à¹\89à¸\97าà¸\87หà¸\99à¹\89านี้",
        "recentchanges-noresult": "ไม่มีการเปลี่ยนแปลงในช่วงที่กำหนดซึ่งตรงกับเกณฑ์เหล่านี้",
        "recentchanges-feed-description": "ติดตามการปรับปรุงล่าสุดในวิกินี้ในฟีดนี้",
        "recentchanges-label-newpage": "การแก้ไขนี้สร้างหน้าใหม่",
        "recentchanges-label-unpatrolled": "การแก้ไขนี้ยังไม่ได้ตรวจสอบ",
        "recentchanges-label-plusminus": "ขนาดของหน้าเปลี่ยนไปด้วยจำนวนไบต์เท่านี้",
        "recentchanges-legend-heading": "'''คำอธิบายสัญลักษณ์:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ดูเพิ่มที่[[Special:NewPages|รายชื่อหน้าใหม่]])",
-       "rcnotefrom": "à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9bà¹\87à¸\99à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88 <strong>$3, $4</strong> (มาà¸\81สุà¸\94 <strong>$1</strong> à¸£à¸²à¸¢à¸\81าร)",
-       "rclistfrom": "แสดงการเปลี่ยนแปลงใหม่เริ่มตั้งแต่ $3 $2",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ดูเพิ่มที่ [[Special:NewPages|รายชื่อหน้าใหม่]])",
+       "rcnotefrom": "à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9bà¹\87à¸\99à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88 <strong>$3, $4</strong> (à¹\81สà¸\94à¸\87มาà¸\81สุà¸\94 <strong>$1</strong>)",
+       "rclistfrom": "แสดงการเปลี่ยนแปลงใหม่เริ่มตั้งแต่ $2, $3",
        "rcshowhideminor": "$1การแก้ไขเล็กน้อย",
        "rcshowhideminor-show": "แสดง",
        "rcshowhideminor-hide": "ซ่อน",
        "newpageletter": "ม",
        "boteditletter": "บ",
        "unpatrolledletter": "!",
-       "number_of_watching_users_pageview": "[$1 à¸\84à¸\99เฝ้าดู]",
+       "number_of_watching_users_pageview": "[$1 à¸\9cูà¹\89à¹\83à¸\8aà¹\89เฝ้าดู]",
        "rc_categories": "จำกัดเฉพาะหมวดหมู่ (แยกด้วย \"|\")",
        "rc_categories_any": "ใด ๆ",
        "rc-change-size-new": "$1 ไบต์หลังปรับปรุง",
        "recentchangeslinked": "ปรับปรุงที่เกี่ยวโยง",
        "recentchangeslinked-feed": "ปรับปรุงที่เกี่ยวโยง",
        "recentchangeslinked-toolbox": "การปรับปรุงที่เกี่ยวโยง",
-       "recentchangeslinked-title": "à¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ีà¹\88à¹\82ยà¸\87มายัà¸\87 \"$1\"",
-       "recentchangeslinked-summary": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9bà¹\87à¸\99รายà¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87ลà¹\88าสุà¸\94à¸\82อà¸\87หà¸\99à¹\89าà¸\97ีà¹\88à¸\96ูà¸\81à¹\82ยà¸\87à¹\84à¸\9b (หรือà¹\84à¸\9bยัà¸\87หà¸\99à¹\89าà¸\95à¹\88าà¸\87 à¹\86 à¸\82อà¸\87หมวà¸\94หมูà¹\88à¸\97ีà¹\88à¸\81ำหà¸\99à¸\94) à¹\82à¸\94ยหà¸\99à¹\89าà¸\97ีà¹\88อยูà¹\88à¹\83à¸\99[[Special:Watchlist|รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู]]à¹\81สà¸\94à¸\87à¹\80à¸\9bà¹\87à¸\99'''à¸\95ัวหà¸\99า'''",
+       "recentchangeslinked-title": "à¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ีà¹\88à¹\82ยà¸\87à¸\81ัà¸\9a \"$1\"",
+       "recentchangeslinked-summary": "à¸\99ีà¹\88à¸\84ือรายà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87ลà¹\88าสุà¸\94à¸\82อà¸\87หà¸\99à¹\89าà¸\97ีà¹\88à¸\96ูà¸\81ลิà¸\87à¸\81à¹\8cà¸\88าà¸\81หà¸\99à¹\89าà¹\80à¸\89à¸\9eาะ (หรือà¹\84à¸\9bสมาà¸\8aิà¸\81à¸\82อà¸\87หมวà¸\94หมูà¹\88à¹\80à¸\89à¸\9eาะ)\nหà¸\99à¹\89าà¹\83à¸\99[[Special:Watchlist|รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู]]à¹\81สà¸\94à¸\87à¹\80à¸\9bà¹\87à¸\99<strong>à¸\95ัวหà¸\99า</strong>",
        "recentchangeslinked-page": "ชื่อหน้า:",
        "recentchangeslinked-to": "แสดงการเปลี่ยนแปลงไปยังหน้าที่เชื่อมโยงมายังหน้าที่ระบุแทน",
        "upload": "อัปโหลดไฟล์",
        "reuploaddesc": "ยกเลิกการอัปโหลดและกลับไปยังแบบอัปโหลด",
        "upload-tryagain": "ส่งคำอธิบายไฟล์ที่ดัดแปรแล้ว",
        "uploadnologin": "ไม่ได้ล็อกอิน",
-       "uploadnologintext": "à¸\95à¹\89อà¸\87$1à¸\81à¹\88อà¸\99à¸\88ึà¸\87à¸\88ะอัà¸\9bà¹\82หลà¸\94à¹\84à¸\9fลà¹\8cà¹\84à¸\94à¹\89",
-       "upload_directory_missing": "à¹\84à¸\94à¹\80รà¸\81à¸\97อรีสำหรัà¸\9aอัà¸\9bà¹\82หลà¸\94 ($1) à¸«à¸²à¸¢à¹\84à¸\9b และเว็บเซิร์ฟเวอร์ไม่สามารถสร้างได้",
-       "upload_directory_read_only": "à¹\80วà¹\87à¸\9aà¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8cà¹\84มà¹\88สามารà¸\96à¹\80à¸\81à¹\87à¸\9aà¸\82à¹\89อมูลà¹\83à¸\99à¹\84à¸\94à¹\80รà¸\81à¸\97อรี ($1)",
+       "uploadnologintext": "à¹\82à¸\9bรà¸\94$1à¹\80à¸\9eืà¹\88ออัà¸\9bà¹\82หลà¸\94à¹\84à¸\9fลà¹\8c",
+       "upload_directory_missing": "สารà¸\9aà¸\9aอัà¸\9bà¹\82หลà¸\94 ($1) à¸«à¸²à¸¢ และเว็บเซิร์ฟเวอร์ไม่สามารถสร้างได้",
+       "upload_directory_read_only": "à¹\80วà¹\87à¸\9aà¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8cà¹\84มà¹\88สามารà¸\96à¹\80à¸\82ียà¸\99สารà¸\9aà¸\9aอัà¸\9bà¹\82หลà¸\94 ($1)",
        "uploaderror": "การอัปโหลดผิดพลาด",
-       "upload-recreate-warning": "'''คำเตือน: ไฟล์ชื่อนั้นถูกลบหรือเปลี่ยนชื่อแล้ว'''\n\nปูมการลบและปูมการย้ายของหน้านี้ถูกนำมาไว้ด้านล่างเพื่อความสะดวก:",
+       "upload-recreate-warning": "<strong>คำเตือน: ไฟล์ชื่อนั้นถูกลบหรือเปลี่ยนชื่อแล้ว</strong>\n\nปูมการลบและปูมการย้ายของหน้านี้จัดไว้ด้านล่างเพื่อความสะดวก:",
        "uploadtext": "กรุณาใช้แบบด้านล่างในการอัปโหลดไฟล์\nสำหรับการดูหรือการค้นหาไฟล์ที่เคยอัปโหลดก่อนหน้านี้ ให้ไปที่[[Special:FileList|รายการไฟล์ที่ถูกอัปโหลด]] การอัปโหลดและการอัปโหลดซ้ำดูได้ที่[[Special:Log/upload|ปูมการอัปโหลด]] และการลบไฟล์ดูได้ที่[[Special:Log/delete|ปูมการลบ]]\n\nถ้าต้องการแทรกไฟล์ลงในหน้าหนึ่ง ๆ ให้ใช้คำสั่งหนึ่งในรูปแบบต่อไปนี้\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' เพื่อใช้รูปขนาดเต็ม\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|ข้อความอธิบาย]]</nowiki></code>''' เพื่อใช้รูปย่อขนาดกว้าง 200 พิกเซลในกล่องที่จัดชิดซ้าย โดยมี \"ข้อความอธิบาย\" เป็นคำบรรยายใต้ภาพ\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' สำหรับการเชื่อมโยงไฟล์โดยตรง โดยไม่ปรากฏไฟล์นั้นออกมา",
        "upload-permitted": "ชนิดไฟล์ที่อนุญาต: $1",
        "upload-preferred": "ชนิดไฟล์ที่ควรใช้: $1",
        "uploadlogpagetext": "ด้านล่างเป็นรายการการอัปโหลดไฟล์ล่าสุด\nดูภาพรวมที่ [[Special:NewFiles|แกลอรีไฟล์ใหม่]]",
        "filename": "ชื่อไฟล์",
        "filedesc": "ความย่อ",
-       "fileuploadsummary": "รายละà¹\80อียà¸\94à¹\84à¸\9fลà¹\8c:",
-       "filereuploadsummary": "เปลี่ยนแปลงไฟล์:",
+       "fileuploadsummary": "à¸\84วามยà¹\88อ:",
+       "filereuploadsummary": "à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\84à¸\9fลà¹\8c:",
        "filestatus": "สถานะลิขสิทธิ์:",
        "filesource": "แหล่งที่มา:",
        "ignorewarning": "บันทึกไฟล์โดยละเลยคำเตือน",
        "ignorewarnings": "ละเลยคำเตือนทั้งหมด",
        "minlength1": "ชื่อไฟล์ต้องมีตัวอักษรอย่างน้อยหนึ่งตัว",
-       "illegalfilename": "ชื่อไฟล์  \"$1\" มีอักขระที่ไม่อนุญาตในชื่อเรื่องหน้า กรุณาเปลี่ยนชื่อไฟล์และลองอัปโหลดอีกครั้ง",
+       "illegalfilename": "ชื่อไฟล์  \"$1\" มีอักขระที่ไม่อนุญาตในชื่อเรื่องหน้า \nกรุณาเปลี่ยนชื่อไฟล์และลองอัปโหลดอีกครั้ง",
        "filename-toolong": "ชื่อไฟล์ไม่อาจยาวกว่า 240 ไบต์",
-       "badfilename": "à¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99เป็น \"$1\"",
+       "badfilename": "à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cเป็น \"$1\"",
        "filetype-mime-mismatch": "นามสกุลไฟล์ \".$1\" ไม่ตรงกับชนิดไมม์ของไฟล์ที่ตรวจพบ ($2)",
        "filetype-badmime": "ไม่อนุญาตให้อัปโหลดไฟล์ที่เป็นไมม์ชนิด \"$1\"",
        "filetype-bad-ie-mime": "ไม่สามารถอัปโหลดไฟล์นี้เนื่องจากอินเทอร์เน็ตเอกซ์พลอเรอร์จะตรวจจับว่าเป็น \"$1\" ซึ่งเป็นชนิดไฟล์ที่ไม่อนุญาตและอาจเป็นอันตราย",
-       "filetype-unwanted-type": "{{PLURAL:$3|ไฟล์|ไฟล์}}ชนิด '''\".$1\"''' เป็นไฟล์ที่ไม่สามารถอัปโหลดได้ ไฟล์ที่สามารถใช้ได้ ได้แก่ $2",
-       "filetype-banned-type": "'''\".$1\"''' {{PLURAL:$4|เป็นชนิดไฟล์ที่ไม่อนุญาต|เป็นชนิดไฟล์ที่ไม่อนุญาต}}\n{{PLURAL:$3|ชนิดไฟล์|ชนิดไฟล์}}ที่อนุญาตคือ $2",
-       "filetype-missing": "à¸\99ามสà¸\81ุลà¹\84à¸\9fลà¹\8cหายà¹\84à¸\9b (เช่น \".jpg\")",
-       "empty-file": "à¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\84ุà¸\93สà¹\88à¸\87มาà¸\99ัà¹\89à¸\99วà¹\88าà¸\87",
+       "filetype-unwanted-type": "<strong>\".$1\"</strong> เป็นชนิดไฟล์ที่ไม่ปรารถนา\n{{PLURAL:$3|}}ชนิดไฟล์ที่สนับสนุน ได้แก่ $2",
+       "filetype-banned-type": "<strong>\".$1\"</strong> {{PLURAL:$4|เป็นชนิดไฟล์ที่ไม่อนุญาต|เป็นชนิดไฟล์ที่ไม่อนุญาต}}\n{{PLURAL:$3|ชนิดไฟล์|ชนิดไฟล์}}ที่อนุญาตคือ $2",
+       "filetype-missing": "à¹\84à¸\9fลà¹\8cà¹\84มà¹\88มีà¸\99ามสà¸\81ุล (เช่น \".jpg\")",
+       "empty-file": "ไฟล์ที่คุณส่งมาว่าง",
        "file-too-large": "ไฟล์ที่คุณส่งมามีขนาดใหญ่เกินไป",
        "filename-tooshort": "ชื่อไฟล์สั้นเกินไป",
-       "filetype-banned": "à¹\84à¸\9fลà¹\8cà¸\8aà¸\99ิà¸\94à¸\99ีà¹\89à¸\96ูà¸\81หà¹\89าม",
+       "filetype-banned": "หà¹\89ามà¹\84à¸\9fลà¹\8cà¸\8aà¸\99ิà¸\94à¸\99ีà¹\89",
        "verification-error": "ไฟล์นี้ไม่ผ่านการพิสูจน์ยืนยันไฟล์",
-       "hookaborted": "สิà¹\88à¸\87à¸\97ีà¹\88à¸\84ุà¸\93à¸\9eยายามà¸\9bรัà¸\9aà¹\80à¸\9bลีà¹\88ยà¸\99à¸\96ูà¸\81ยà¸\81à¹\80ลิà¸\81à¹\82à¸\94ยสà¹\88วà¸\99à¸\82ยาย",
-       "illegal-filename": "à¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95",
-       "overwrite": "à¹\84มà¹\88อà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89à¹\80à¸\82ียà¸\99à¸\97ัà¸\9aà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88มีอยูà¹\88à¹\81ลà¹\89ว",
+       "hookaborted": "สิà¹\88à¸\87à¸\97ีà¹\88à¸\84ุà¸\93à¸\9eยายามà¸\94ัà¸\94à¹\81à¸\9bรà¹\80à¸\9bลีà¹\88ยà¸\99à¸\96ูà¸\81สà¹\88วà¸\99à¸\82ยายยà¸\81à¹\80ลิà¸\81",
+       "illegal-filename": "à¹\84มà¹\88อà¸\99ุà¸\8dาà¸\95à¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¸\99ีà¹\89",
+       "overwrite": "à¹\84มà¹\88อà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89à¸\9aัà¸\99à¸\97ึà¸\81à¸\97ัà¸\9aà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88มีอยูà¹\88",
        "unknown-error": "เกิดข้อผิดพลาดไม่ทราบสาเหตุ",
        "tmp-create-error": "ไม่สามารถสร้างไฟล์ชั่วคราว",
-       "tmp-write-error": "à¹\80à¸\81ิà¸\94à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99การเขียนไฟล์ชั่วคราว",
-       "large-file": "แนะนำว่าไฟล์ไม่ควรมีขนาดใหญ่กว่า $1 ไฟล์นี้มีขนาด $2",
-       "largefileserver": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มีà¸\82à¸\99าà¸\94à¹\83หà¸\8dà¹\88à¸\81วà¹\88าà¸\97ีà¹\88à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8cอนุญาต",
-       "emptyfile": "à¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\84ุà¸\93อัà¸\9bà¹\82หลà¸\94à¹\80หมือà¸\99à¹\80à¸\9bà¹\87à¸\99à¹\84à¸\9fลà¹\8cวà¹\88าà¸\87 à¸­à¸²à¸\88à¹\80à¸\81ิà¸\94à¸\88าà¸\81à¸\9bัà¸\8dหาà¸\9eิมà¸\9eà¹\8cà¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¸\9cิà¸\94 à¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aวà¹\88า à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารอัà¸\9bà¹\82หลà¸\94à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¸\88ริà¸\87 à¹\86",
+       "tmp-write-error": "มีà¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94การเขียนไฟล์ชั่วคราว",
+       "large-file": "แนะนำว่าไฟล์ไม่ควรมีขนาดใหญ่กว่า $1 \nไฟล์นี้มีขนาด $2",
+       "largefileserver": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มีà¸\82à¸\99าà¸\94à¹\83หà¸\8dà¹\88à¹\80à¸\81ิà¸\99à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8cมีà¹\82à¸\84รà¸\87à¹\81à¸\9aà¸\9aอนุญาต",
+       "emptyfile": "à¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\84ุà¸\93อัà¸\9bà¹\82หลà¸\94à¹\80หมือà¸\99วà¹\88าà¸\87 \nอาà¸\88à¹\80à¸\81ิà¸\94à¸\88าà¸\81à¸\9bัà¸\8dหาà¸\9eิมà¸\9eà¹\8cà¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¸\9cิà¸\94 \nà¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aวà¹\88า à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารอัà¸\9bà¹\82หลà¸\94à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¸\88ริà¸\87 à¹\86 à¸«à¸£à¸·à¸­à¹\84มà¹\88",
        "windows-nonascii-filename": "วิกินี้ไม่รองรับชื่อไฟล์ที่มีอักขระพิเศษ",
-       "fileexists": "มีà¹\84à¸\9fลà¹\8cà¸\8aืà¹\88อà¸\99ีà¹\89อยูà¹\88à¹\81ลà¹\89ว à¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9a <strong>[[:$1]]</strong> à¸«à¸²à¸\81à¸\84ุà¸\93à¹\84มà¹\88à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89หรือà¹\84มà¹\88 [[$1|thumb]]",
-       "filepageexists": "หà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aายสำหรัà¸\9aà¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¹\84à¸\94à¹\89à¸\96ูà¸\81สรà¹\89าà¸\87à¹\81ลà¹\89วà¸\97ีà¹\88 <strong>[[:$1]]</strong> à¹\81à¸\95à¹\88à¹\84à¸\9fลà¹\8cà¸\8aืà¹\88อà¸\99ีà¹\89à¹\84มà¹\88มีอยูà¹\88à¹\83à¸\99à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99\nà¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ยà¹\88อà¸\97ีà¹\88à¸\84ุà¸\93à¸\81รอà¸\81à¸\88ะà¹\84มà¹\88à¸\9bราà¸\81à¸\8fà¸\9aà¸\99หà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aาย\nà¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ยà¹\88อà¸\9bราà¸\81à¸\8fà¸\82ึà¹\89à¸\99 คุณจำเป็นต้องแก้ไขด้วยตนเอง\n[[$1|thumb]]",
-       "fileexists-extension": "มีà¹\84à¸\9fลà¹\8cà¸\8aืà¹\88อà¸\84ลà¹\89ายà¸\81ัà¸\99: [[$2|thumb]]\n* à¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\81ำลัà¸\87อัà¸\9bà¹\82หลà¸\94: <strong>[[:$1]]</strong>\n* à¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88มีอยูà¹\88: <strong>[[:$2]]</strong>\nà¸\81รุà¸\93าà¹\80ลือà¸\81à¸\8aืà¹\88ออืà¹\88à¸\99",
+       "fileexists": "มีà¹\84à¸\9fลà¹\8cà¸\8aืà¹\88อà¸\99ีà¹\89à¹\81ลà¹\89ว à¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9a <strong>[[:$1]]</strong> à¸«à¸²à¸\81à¸\84ุà¸\93à¹\84มà¹\88à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99หรือà¹\84มà¹\88 \n[[$1|thumb]]",
+       "filepageexists": "สรà¹\89าà¸\87หà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aายสำหรัà¸\9aà¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¹\81ลà¹\89วà¸\97ีà¹\88 <strong>[[:$1]]</strong> à¹\81à¸\95à¹\88à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¹\84มà¹\88มีà¹\84à¸\9fลà¹\8cà¸\8aืà¹\88อà¸\99ีà¹\89\nà¸\84วามยà¹\88อà¸\97ีà¹\88à¸\84ุà¸\93à¸\81รอà¸\81à¸\88ะà¹\84มà¹\88à¸\9bราà¸\81à¸\8fà¸\9aà¸\99หà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aาย\nà¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¸\84วามยà¹\88อà¸\82อà¸\87à¸\84ุà¸\93à¸\9bราà¸\81à¸\8f คุณจำเป็นต้องแก้ไขด้วยตนเอง\n[[$1|thumb]]",
+       "fileexists-extension": "มีà¹\84à¸\9fลà¹\8cà¸\8aืà¹\88อà¸\84ลà¹\89ายà¸\81ัà¸\99: [[$2|thumb]]\n* à¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\81ำลัà¸\87อัà¸\9bà¹\82หลà¸\94: <strong>[[:$1]]</strong>\n* à¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88มีอยูà¹\88: <strong>[[:$2]]</strong>\nà¸\9aาà¸\87à¸\97ีà¸\84ุà¸\93อาà¸\88à¸\95à¹\89อà¸\87à¸\81ารà¹\83à¸\8aà¹\89à¸\8aืà¹\88อà¸\97ีà¹\88à¹\80à¸\94à¹\88à¸\99à¸\81วà¹\88าà¸\99ีà¹\89",
        "fileexists-thumbnail-yes": "ไฟล์นี้ดูเหมือนจะเป็นภาพที่ถูกลดขนาด ''(รูปย่อ)''\n[[$1|thumb]]\nกรุณาตรวจสอบไฟล์ <strong>[[:$1]]</strong>\nถ้าตรวจสอบแล้วและพบว่าเป็นภาพขนาดเดียวกับต้นฉบับ ไฟล์นั้นไม่จำเป็นต้องอัปโหลดเพิ่ม",
        "file-thumbnail-no": "ชื่อไฟล์ขึ้นต้นด้วย <strong>$1</strong>\nภาพนี้ดูเหมือนว่าจะเป็นภาพที่ถูกลดขนาด ''(thumbnail)''\nถ้าคุณมีภาพนี้ในความละเอียดเต็ม ให้อัปโหลดภาพนี้ มิฉะนั้นแล้วโปรดเปลี่ยนชื่อไฟล์",
        "fileexists-forbidden": "มีไฟล์ชื่อนี้แล้ว และไม่สามารถเขียนทับได้\nหากคุณยังต้องการอัปโหลดไฟล์ของคุณ กรุณาย้อนกลับและใช้ชื่อใหม่ \n[[File:$1|thumb|center|$1]]",
        "uploaddisabled": "ปิดใช้งานการอัปโหลด",
        "copyuploaddisabled": "ปิดใช้งานการอัปโหลดโดยยูอาร์แอล",
        "uploaddisabledtext": "ปิดใช้งานการอัปโหลดไฟล์",
-       "php-uploaddisabledtext": "à¹\80à¸\9bิà¸\94à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\81ารอัà¸\9bà¹\82หลà¸\94à¹\84à¸\9fลà¹\8cà¹\83à¸\99à¸\9eีà¹\80อà¸\8aà¸\9eี\nà¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aà¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88า file_uploads",
-       "uploadscripted": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มีสà¹\88วà¸\99à¸\9bระà¸\81อà¸\9aà¸\82อà¸\87à¹\82à¸\84à¹\89à¸\94à¹\80อà¸\8aà¸\97ีà¹\80อà¹\87มà¹\81อลหรือสà¸\84ริà¸\9bà¸\95à¹\8c à¸\8bึà¹\88à¸\87อาà¸\88à¸\81à¹\88อà¹\83หà¹\89à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¹\81สà¸\94à¸\87à¸\9cลà¸\82อà¸\87à¹\80วà¹\87à¸\9aà¹\80à¸\9aราวà¹\8cà¹\80à¸\8bอรà¹\8c",
+       "php-uploaddisabledtext": "ปิดการใช้งานการอัปโหลดไฟล์ในพีเอชพี\nกรุณาตรวจสอบการตั้งค่า file_uploads",
+       "uploadscripted": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มีà¹\82à¸\84à¹\89à¸\94à¹\80อà¸\8aà¸\97ีà¹\80อà¹\87มà¹\81อลหรือสà¸\84ริà¸\9bà¸\95à¹\8c à¸\8bึà¹\88à¸\87อาà¸\88à¸\81à¹\88อà¹\83หà¹\89à¸\81ารà¹\81à¸\9bลà¸\84ำสัà¹\88à¸\87à¸\82อà¸\87à¹\80à¸\9aราวà¹\8cà¹\80à¸\8bอรà¹\8cà¸\9cิà¸\94à¸\9eลาà¸\94",
        "uploadscriptednamespace": "ไฟล์ SVG นี้มีเนมสเปซไม่ถูกต้อง \"$1\"",
-       "uploadvirus": "ไฟล์นี้มีไวรัส! รายละเอียด: $1",
+       "uploadvirus": "ไฟล์นี้มีไวรัส! \nรายละเอียด: $1",
        "upload-source": "ไฟล์ต้นทาง",
        "sourcefilename": "ชื่อไฟล์ต้นทาง:",
        "sourceurl": "ยูอาร์แอลที่มา:",
        "destfilename": "ชื่อไฟล์ปลายทาง:",
-       "upload-maxfilesize": "à¸\82à¸\99าà¸\94à¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¹\83หà¸\8dà¹\88à¸\97ีà¹\88สุà¸\94à¸\97ีà¹\88อà¸\99ุà¸\8dาà¸\95: $1",
+       "upload-maxfilesize": "à¸\82à¸\99าà¸\94à¹\84à¸\9fลà¹\8cà¹\83หà¸\8dà¹\88สุà¸\94: $1",
        "upload-description": "คำอธิบายไฟล์",
        "upload-options": "ตัวเลือกอัปโหลด",
        "watchthisupload": "เฝ้าดูไฟล์นี้",
        "filewasdeleted": "ไฟล์ชื่อนี้ถูกอัปโหลดก่อนหน้าและถูกลบไปแล้ว กรุณาตรวจสอบ $1 ก่อนอัปโหลดอีกครั้ง",
-       "filename-bad-prefix": "à¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\84ุà¸\93à¸\81ำลัà¸\87อัà¸\9bà¹\82หลà¸\94à¸\82à¹\89à¸\99à¸\95à¹\89à¸\99à¸\94à¹\89วย '''\"$1\"''' à¸\8bึà¹\88à¸\87à¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¸\97ีà¹\88à¹\84มà¹\88สืà¹\88อà¸\84วามหมายà¹\83à¸\94 à¹\86 à¸\97ีà¹\88à¹\82à¸\94ยà¸\9bà¸\81à¸\95ิà¹\81ลà¹\89วà¸\81ลà¹\89อà¸\87à¸\96à¹\88ายรูà¸\9bà¸\94ิà¸\88ิà¸\97ัลà¸\95ัà¹\89à¸\87à¹\83หà¹\89อัà¸\95à¹\82à¸\99มัà¸\95ิ กรุณาตั้งชื่อไฟล์ใหม่ให้สื่อความหมายกว่าเดิม",
+       "filename-bad-prefix": "à¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\84ุà¸\93à¸\81ำลัà¸\87อัà¸\9bà¹\82หลà¸\94à¸\82à¹\89à¸\99à¸\95à¹\89à¸\99à¸\94à¹\89วย '''\"$1\"''' à¸\8bึà¹\88à¸\87à¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¸\97ีà¹\88à¹\84มà¹\88สืà¹\88อà¸\84วามหมายà¹\83à¸\94 à¹\86 à¸\97ีà¹\88à¸\9bà¸\81à¸\95ิà¸\81ลà¹\89อà¸\87à¸\96à¹\88ายรูà¸\9bà¸\94ิà¸\88ิà¸\97ัลà¸\95ัà¹\89à¸\87à¹\83หà¹\89อัà¸\95à¹\82à¸\99มัà¸\95ิ \nกรุณาตั้งชื่อไฟล์ใหม่ให้สื่อความหมายกว่าเดิม",
        "upload-success-subj": "อัปโหลดสำเร็จ",
        "upload-success-msg": "การอัปโหลดของคุณจาก [$2] สำเร็จแล้ว และสามารถใช้ไฟล์ได้ที่นี่: [[:{{ns:file}}:$1]]",
        "upload-failure-subj": "ปัญหาการอัปโหลด",
        "upload-warning-msg": "พบปัญหาการอัปโหลดของคุณจาก [$2] คุณอาจกลับไปยัง[[Special:Upload/stash/$1|แบบอัปโหลด]]เพื่อแก้ไขปัญหานี้",
        "upload-proto-error": "โพรโทคอลไม่ถูกต้อง",
        "upload-proto-error-text": "การอัปโหลดโดยตรงจากเว็บต้องการยูอาร์แอลที่ขึ้นต้นด้วย <code>http://</code> หรือ <code>ftp://</code>",
-       "upload-file-error": "à¹\80à¸\81ิà¸\94à¸\84วามผิดพลาดภายใน",
-       "upload-file-error-text": "à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94ภายà¹\83à¸\99à¸\82à¸\93ะà¸\9eยายามสรà¹\89าà¸\87à¹\84à¸\9fลà¹\8cà¸\8aัà¹\88วà¸\84ราวà¸\9aà¸\99à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8c กรุณาติดต่อ[[Special:ListUsers/sysop|ผู้ดูแลระบบ]]",
-       "upload-misc-error": "à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารอัà¸\9bà¹\82หลà¸\94à¹\82à¸\94ยไม่ทราบสาเหตุ",
-       "upload-misc-error-text": "เกิดความผิดพลาดไม่ทราบสาเหตุระหว่างอัปโหลด กรุณาตรวจสอบว่ายูอาร์แอลนั้นถูกต้องและเข้าถึงได้ และลองอีกครั้ง ถ้ายังมีปัญหา ให้ติดต่อ[[Special:ListUsers/sysop|ผู้ดูแลระบบ]]",
-       "upload-too-many-redirects": "ยูอารà¹\8cà¹\81อลà¸\97ีà¹\88ระà¸\9aุมีการเปลี่ยนทางมากเกินไป",
+       "upload-file-error": "มีà¸\82à¹\89อผิดพลาดภายใน",
+       "upload-file-error-text": "à¹\80à¸\81ิà¸\94à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94ภายà¹\83à¸\99à¸\82à¸\93ะà¸\9eยายามสรà¹\89าà¸\87à¹\84à¸\9fลà¹\8cà¸\8aัà¹\88วà¸\84ราวà¸\9aà¸\99à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8c \nกรุณาติดต่อ[[Special:ListUsers/sysop|ผู้ดูแลระบบ]]",
+       "upload-misc-error": "à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¸\81ารอัà¸\9bà¹\82หลà¸\94ไม่ทราบสาเหตุ",
+       "upload-misc-error-text": "เกิดความผิดพลาดไม่ทราบสาเหตุระหว่างอัปโหลด \nกรุณาตรวจสอบว่ายูอาร์แอลนั้นถูกต้องและเข้าถึงได้ และลองอีกครั้ง \nถ้ายังมีปัญหา ให้ติดต่อ[[Special:ListUsers/sysop|ผู้ดูแลระบบ]]",
+       "upload-too-many-redirects": "ยูอารà¹\8cà¹\81อลà¸\99ัà¹\89à¸\99มีการเปลี่ยนทางมากเกินไป",
        "upload-http-error": "เกิดข้อผิดพลาดเอชทีทีพี: $1",
-       "upload-copy-upload-invalid-domain": "à¸\81ารอัà¸\9bà¹\82หลà¸\94สำà¹\80à¸\99าà¹\84มà¹\88สามารà¸\96à¸\97ำà¹\84à¸\94à¹\89จากโดเมนนี้",
-       "backend-fail-backup": "à¹\84มà¹\88สามารà¸\96สำรอà¸\87à¸\82à¹\89อมูลà¹\84à¸\9fลà¹\8c $1.",
+       "upload-copy-upload-invalid-domain": "à¹\84มà¹\88สามารà¸\96à¸\84ัà¸\94ลอà¸\81à¸\81ารอัà¸\9bà¹\82หลà¸\94จากโดเมนนี้",
+       "backend-fail-backup": "à¹\84มà¹\88สามารà¸\96สำรอà¸\87à¹\84à¸\9fลà¹\8c \"$1\"",
        "backend-fail-notexists": "ไม่มีไฟล์ $1",
-       "backend-fail-delete": "ไม่สามารถลบไฟล์ $1 ได้",
+       "backend-fail-delete": "ไม่สามารถลบไฟล์ \"$1\"",
        "backend-fail-alreadyexists": "มีไฟล์ \"$1\" อยู่แล้ว",
        "backend-fail-store": "ไม่สามารถเก็บไฟล์ \"$1\" ที่ \"$2\" ได้",
        "backend-fail-copy": "ไม่สามารถคัดลอกไฟล์ \"$1\" ไปยัง \"$2\" ได้",
        "uploadstash-nofiles": "คุณไม่มีไฟล์ซ่อน",
        "uploadstash-badtoken": "ดำเนินการปฏิบัติไม่สำเร็จ อาจเนื่องจากข้อมูลการแก้ไขประจำตัวของคุณหมดอายุแล้ว กรุณาลองใหม่",
        "uploadstash-errclear": "การล้างไฟล์ไม่สำเร็จ",
-       "uploadstash-refresh": "à¸\9fืà¹\89à¸\99à¸\9fูรายการไฟล์",
-       "img-auth-accessdenied": "à¸\81ารà¹\80à¸\82à¹\89าà¸\96ึà¸\87à¸\96ูà¸\81à¸\88ำà¸\81ัà¸\94",
-       "img-auth-nopathinfo": "ค่า PATH_INFO สูญหาย\nเซิร์ฟเวอร์ของคุณอาจไม่ได้ถูกตั้งให้ส่งข้อมูลนี้\nหรือเซิร์ฟเวอร์อาจเป็นแบบ CGI-based และไม่สนับสนุนข้อมูล img_auth\nดูที่ https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
-       "img-auth-notindir": "à¸\97ีà¹\88อยูà¹\88à¸\97ีà¹\88รà¹\89อà¸\87à¸\82อà¹\84มà¹\88à¹\84à¸\94à¹\89อยูà¹\88à¹\83à¸\99à¹\84à¸\94à¹\80รà¹\87à¸\81à¸\97อรีอัพโหลดที่กำหนดไว้",
-       "img-auth-badtitle": "ไม่สามารถสร้างชื่อเรื่องที่ถูกต้องจาก \"$1\" ได้",
-       "img-auth-nologinnWL": "à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89ลà¹\87อà¸\81อิà¸\99à¹\81ละ \"$1\" à¹\84มà¹\88à¹\84à¸\94à¹\89อยูà¹\88à¹\83à¸\99รายà¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\94ี (whitelist)",
+       "uploadstash-refresh": "รีà¹\80à¸\9fรà¸\8aรายการไฟล์",
+       "img-auth-accessdenied": "à¸\81ารà¹\80à¸\82à¹\89าà¸\96ึà¸\87à¸\96ูà¸\81à¸\9bà¸\8fิà¹\80สà¸\98",
+       "img-auth-nopathinfo": "PATH_INFO สูญหาย\nเซิร์ฟเวอร์ของคุณอาจไม่ได้ถูกตั้งให้ส่งสารสนเทศนี้\nอาจเป็นแบบ CGI-based และไม่สามารถสนับสนุน img_auth\nดูที่ https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
+       "img-auth-notindir": "à¸\97ีà¹\88อยูà¹\88à¸\97ีà¹\88รà¹\89อà¸\87à¸\82อà¹\84มà¹\88à¹\84à¸\94à¹\89อยูà¹\88à¹\83à¸\99สารà¸\9aà¸\9aอัพโหลดที่กำหนดไว้",
+       "img-auth-badtitle": "ไม่สามารถสร้างชื่อเรื่องที่ถูกต้องจาก \"$1\"",
+       "img-auth-nologinnWL": "à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89ลà¹\87อà¸\81อิà¸\99à¹\81ละ \"$1\" à¹\84มà¹\88à¹\84à¸\94à¹\89อยูà¹\88à¹\83à¸\99รายà¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95 (whitelist)",
        "img-auth-nofile": "ไม่มีไฟล์ \"$1\"",
-       "img-auth-isdir": "à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\9eยายามà¹\80à¸\82à¹\89าà¸\96ึà¸\87à¹\84à¸\94à¹\80รà¹\87à¸\81à¸\97อรี \"$1\"\nà¸\8bึà¹\88à¸\87à¸\84ุà¸\93สามารà¸\96à¹\80à¸\82à¹\89าà¸\96ึà¸\87à¹\84à¸\94à¹\89à¹\80à¸\89à¸\9eาะà¹\84à¸\9fลà¹\8cà¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99",
+       "img-auth-isdir": "à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\9eยายามà¹\80à¸\82à¹\89าà¸\96ึà¸\87สารà¸\9aà¸\9a \"$1\"\nอà¸\99ุà¸\8dาà¸\95à¹\80à¸\89à¸\9eาะà¸\81ารà¹\80à¸\82à¹\89าà¸\96ึà¸\87à¹\84à¸\9fลà¹\8c",
        "img-auth-streaming": "กำลังดึงข้อมูล \"$1\"",
-       "img-auth-public": "à¸\9fัà¸\87à¸\81à¹\87à¸\8aัà¸\99à¸\82อà¸\87 img_auth.php à¸\84ือà¹\80à¸\9eืà¹\88อสà¹\88à¸\87à¹\84à¸\9fลà¹\8cà¸\82าออà¸\81à¸\88าà¸\81วิà¸\81ิสà¹\88วà¸\99à¸\95ัว\nวิà¸\81ิà¸\99ีà¹\89à¸\96ูà¸\81à¸\81ำหà¸\99à¸\94à¹\80à¸\9bà¹\87à¸\99วิà¸\81ิสà¹\88วà¸\99à¸\95ัว\nà¹\80à¸\9eืà¹\88อà¸\84วามà¸\9bลอà¸\94ภัยสูà¸\87สุà¸\94 img_auth.php à¸\88ึà¸\87à¸\96ูà¸\81à¸\9bิà¸\94",
-       "img-auth-noread": "à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aสิà¸\97à¸\98ิà¹\8cà¹\83à¸\99à¸\81ารอ่าน \"$1\"",
+       "img-auth-public": "หà¸\99à¹\89าà¸\97ีà¹\88à¸\82อà¸\87 img_auth.php à¸\84ือ à¹\80à¸\9eืà¹\88อสà¹\88à¸\87à¹\84à¸\9fลà¹\8cออà¸\81à¸\88าà¸\81วิà¸\81ิสà¹\88วà¸\99à¸\95ัว\nวิà¸\81ิà¸\99ีà¹\89มีà¹\82à¸\84รà¸\87à¹\81à¸\9aà¸\9aà¹\80à¸\9bà¹\87à¸\99วิà¸\81ิสาà¸\98ารà¸\93ะ\nà¹\80à¸\9eืà¹\88อà¸\84วามà¸\9bลอà¸\94ภัยสูà¸\87สุà¸\94 à¸\88ึà¸\87à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99 img_auth.php",
+       "img-auth-noread": "à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84มà¹\88มีสิà¸\97à¸\98ิอ่าน \"$1\"",
        "http-invalid-url": "ยูอาร์แอลไม่ถูกต้อง: $1",
        "http-invalid-scheme": "ไม่สนับสนุนยูอาร์แอลที่มีรูปแบบ \"$1\"",
        "http-request-error": "คำขอข้อมูล HTTP ผิดพลาดโดยไม่ทราบสาเหตุ",
-       "http-read-error": "การอ่านข้อมูล HTTP ผิดพลาด",
-       "http-timed-out": "คำขอข้อมูล HTTP เกินเวลาที่กำหนด",
-       "http-curl-error": "à¹\80à¸\81ิà¸\94à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¹\80รียà¸\81à¸\82à¹\89อมูลà¸\88าà¸\81 URL: $1",
-       "http-bad-status": "à¸\9eà¸\9aà¸\9bัà¸\8dหาà¹\83à¸\99ระหวà¹\88าà¸\87à¸\81ารà¸\82à¹\89อà¸\82à¹\89อมูล HTTP: $1 $2",
-       "upload-curl-error6": "ไม่สามารถติดต่อยูอาร์แอลได้",
-       "upload-curl-error6-text": "à¹\84มà¹\88สามารà¸\96à¹\80à¸\82à¹\89าà¸\96ึà¸\87ยูอารà¹\8cà¹\81อลà¸\97ีà¹\88à¹\83สà¹\88มาà¹\84à¸\94à¹\89 กรุณาตรวจสอบอีกครั้งว่ายูอาร์แอลนั้นถูกต้อง และเว็บไซต์นั้นยังใช้งานได้",
-       "upload-curl-error28": "à¹\80วลาอัà¸\9bà¹\82หลà¸\94à¸\96ูà¸\81à¸\95ัด",
-       "upload-curl-error28-text": "à¹\80วà¹\87à¸\9aà¹\84à¸\8bà¸\95à¹\8cà¸\99ีà¹\89à¹\83à¸\8aà¹\89à¹\80วลาà¸\99าà¸\99à¹\80à¸\81ิà¸\99à¹\84à¸\9bà¹\83à¸\99à¸\81ารà¹\80à¸\8aืà¹\88อมà¸\95à¹\88อ à¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aวà¹\88าà¹\80วà¹\87à¸\9aà¸\99ีà¹\89ยัà¸\87à¹\83à¸\8aà¹\89à¸\87าà¸\99à¹\84à¸\94à¹\89à¸\95ามà¸\9bà¸\81à¸\95ิ à¸«à¸£à¸·à¸­à¸­à¸²à¸\88à¸\88ะรอสัà¸\81à¸\84รูà¹\88à¹\81ลà¹\89วลอà¸\87อัà¸\9bà¹\82หลà¸\94à¹\83หมà¹\88",
+       "http-read-error": "การอ่าน HTTP ผิดพลาด",
+       "http-timed-out": "คำขอ HTTP เกินเวลา",
+       "http-curl-error": "à¹\80à¸\81ิà¸\94à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¸\81ารà¹\84à¸\9bà¸\99ำมาà¸\8bึà¹\88à¸\87ยูอารà¹\8cà¹\81อล: $1",
+       "http-bad-status": "à¸\9eà¸\9aà¸\9bัà¸\8dหาระหวà¹\88าà¸\87à¸\81ารà¸\82อ HTTP: $1 $2",
+       "upload-curl-error6": "ไม่สามารถติดต่อยูอาร์แอล",
+       "upload-curl-error6-text": "à¹\84มà¹\88สามารà¸\96à¹\80à¸\82à¹\89าà¸\96ึà¸\87ยูอารà¹\8cà¹\81อลà¸\97ีà¹\88à¸\88ัà¸\94มาà¹\84à¸\94à¹\89 \nกรุณาตรวจสอบอีกครั้งว่ายูอาร์แอลนั้นถูกต้อง และเว็บไซต์นั้นยังใช้งานได้",
+       "upload-curl-error28": "หมà¸\94à¹\80วลารออัà¸\9bà¹\82หลด",
+       "upload-curl-error28-text": "à¹\80วà¹\87à¸\9aà¹\84à¸\8bà¸\95à¹\8cà¸\99ีà¹\89à¹\83à¸\8aà¹\89à¹\80วลาà¸\95อà¸\9aสà¸\99อà¸\87à¸\99าà¸\99à¹\80à¸\81ิà¸\99\nà¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aวà¹\88าà¹\80วà¹\87à¸\9aà¸\99ีà¹\89ยัà¸\87à¹\83à¸\8aà¹\89à¸\87าà¸\99à¹\84à¸\94à¹\89à¸\95ามà¸\9bà¸\81à¸\95ิ à¸£à¸­à¸ªà¸±à¸\81à¸\84รูà¹\88à¹\81ลà¹\89วลอà¸\87อัà¸\9bà¹\82หลà¸\94à¹\83หมà¹\88\nà¸\84ุà¸\93อาà¸\88ลอà¸\87à¹\83à¸\99à¹\80วลาà¸\97ีà¹\88วุà¹\88à¸\99วายà¸\99à¹\89อยà¸\81วà¹\88า",
        "license": "การอนุญาตใช้สิทธิ:",
        "license-header": "การอนุญาตใช้สิทธิ",
        "nolicense": "ไม่ได้เลือก",
-       "license-nopreview": "(ไม่สามารถแสดงตัวอย่าง)",
+       "licenses-edit": "แก้ไขตัวเลือกใบอนุญาต",
+       "license-nopreview": "(ไม่มีตัวอย่าง)",
        "upload_source_url": "(ไฟล์ที่คุณเลือกจากยูอาร์แอลที่สมเหตุสมผลและสาธารณะเข้าถึงได้)",
        "upload_source_file": "(ไฟล์ที่คุณเลือกจากคอมพิวเตอร์ของคุณ)",
        "listfiles-delete": "ลบ",
        "listfiles-latestversion-no": "ไม่",
        "file-anchor-link": "ไฟล์",
        "filehist": "ประวัติไฟล์",
-       "filehist-help": "กดเลือกวัน/เวลา เพื่อดูไฟล์ที่ปรากฏในขณะนั้น",
+       "filehist-help": "กดเลือกวัน/เวลาเพื่อดูไฟล์ที่ปรากฏในขณะนั้น",
        "filehist-deleteall": "ลบทั้งหมด",
        "filehist-deleteone": "ลบ",
        "filehist-revert": "ย้อน",
        "filehist-current": "ปัจจุบัน",
-       "filehist-datetime": "วันที่/เวลา",
+       "filehist-datetime": "วัน/เวลา",
        "filehist-thumb": "รูปย่อ",
-       "filehist-thumbtext": "รูปย่อสำหรับรุ่น $1",
+       "filehist-thumbtext": "รูปย่อสำหรับรุ่นเมื่อ $1",
        "filehist-nothumb": "ไม่มีรูปย่อ",
        "filehist-user": "ผู้ใช้",
        "filehist-dimensions": "ขนาด",
        "filehist-comment": "ความเห็น",
        "imagelinks": "การใช้ไฟล์",
        "linkstoimage": "มี $1 หน้าเชื่อมโยงมายังไฟล์นี้:",
-       "linkstoimage-more": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มีหà¸\99à¹\89าà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87มาà¸\81วà¹\88า $1 à¸«à¸\99à¹\89า\nรายà¸\81ารà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87 $1 à¸«à¸\99à¹\89าà¹\81รà¸\81à¸\97ีà¹\88มายัà¸\87à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99\nà¸\94ูà¹\80à¸\9eิà¹\88มà¹\84à¸\94à¹\89à¸\97ีà¹\88[[Special:WhatLinksHere/$2|รายการเต็ม]]",
+       "linkstoimage-more": "มีหà¸\99à¹\89าà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87มาà¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¸\81วà¹\88า $1 à¸«à¸\99à¹\89า\nรายà¸\81ารà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87 $1 à¸«à¸\99à¹\89าà¹\81รà¸\81à¸\97ีà¹\88มายัà¸\87à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99\nมี[[Special:WhatLinksHere/$2|รายการเต็ม]]",
        "nolinkstoimage": "ไม่มีหน้าเชื่อมโยงมายังไฟล์นี้",
        "morelinkstoimage": "ดู[[Special:WhatLinksHere/$1|การเชื่อมโยง]]มายังไฟล์นี้เพิ่มเติม",
        "linkstoimage-redirect": "$1 (ไฟล์เปลี่ยนทาง) $2",
        "duplicatesoffile": "$1 ไฟล์ต่อไปนี้ เป็นไฟล์เดียวกับไฟล์นี้ ([[Special:FileDuplicateSearch/$2|รายละเอียดเพิ่มเติม]]):",
-       "sharedupload": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มาà¸\88าà¸\81 $1 à¹\81ละอาà¸\88มีà¸\81ารà¹\83à¸\8aà¹\89à¹\83à¸\99à¹\82à¸\84รà¸\87à¸\81ารอืà¹\88à¸\99",
-       "sharedupload-desc-there": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มาà¸\88าà¸\81 $1 à¹\81ละอาà¸\88à¸\96ูà¸\81à¹\83à¸\8aà¹\89à¸\9aà¸\99à¹\82à¸\84รà¸\87à¸\81ารอืà¹\88à¸\99\nà¸\81รุà¸\93าà¸\94ู[หà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aายà¹\84à¸\9fลà¹\8c $2] à¸ªà¸³à¸«à¸£à¸±à¸\9aà¸\82à¹\89อมูลเพิ่มเติม",
-       "sharedupload-desc-here": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มาà¸\88าà¸\81 $1 à¹\81ละอาà¸\88มีà¹\83à¸\8aà¹\89à¹\83à¸\99à¹\82à¸\84รà¸\87à¸\81ารอืà¹\88à¸\99\nà¸\84ำอà¸\98ิà¸\9aายà¹\83à¸\99[$2 à¸«à¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aายà¹\84à¸\9fลà¹\8c]à¹\81สà¸\94à¸\87à¹\84วà¹\89à¸\82à¹\89าà¸\87ล่างนี้",
-       "sharedupload-desc-edit": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มาà¸\88าà¸\81 $1 à¹\81ละอาà¸\88มีà¹\83à¸\8aà¹\89à¹\83à¸\99à¹\82à¸\84รà¸\87à¸\81ารอืà¹\88à¸\99\nหาà¸\81à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\84ำอà¸\98ิà¸\9aาย à¹\83หà¹\89à¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¸\9aà¸\99[$2 à¸«à¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aายà¹\84à¸\9fลà¹\8c]",
-       "sharedupload-desc-create": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มาà¸\88าà¸\81 $1 à¹\81ละอาà¸\88มีà¸\81ารà¹\83à¸\8aà¹\89à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¹\83à¸\99à¹\82à¸\84รà¸\87à¸\81ารอืà¹\88à¸\99\nหาà¸\81à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\84ำอà¸\98ิà¸\9aาย à¹\83หà¹\89à¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¸\9aà¸\99[$2 à¸«à¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aายà¹\84à¸\9fลà¹\8c]",
+       "sharedupload": "ไฟล์นี้มาจาก $1 และอาจมีใช้ในโครงการอื่น",
+       "sharedupload-desc-there": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มาà¸\88าà¸\81 $1 à¹\81ละอาà¸\88à¹\83à¸\8aà¹\89à¸\9aà¸\99à¹\82à¸\84รà¸\87à¸\81ารอืà¹\88à¸\99\nà¸\81รุà¸\93าà¸\94ู[หà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aายà¹\84à¸\9fลà¹\8c $2] à¸ªà¸³à¸«à¸£à¸±à¸\9aสารสà¸\99à¹\80à¸\97ศเพิ่มเติม",
+       "sharedupload-desc-here": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มาà¸\88าà¸\81 $1 à¹\81ละอาà¸\88มีà¹\83à¸\8aà¹\89à¹\83à¸\99à¹\82à¸\84รà¸\87à¸\81ารอืà¹\88à¸\99\nà¸\84ำอà¸\98ิà¸\9aายà¹\83à¸\99[$2 à¸«à¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aายà¹\84à¸\9fลà¹\8c]à¹\81สà¸\94à¸\87à¹\84วà¹\89à¸\94à¹\89าà¸\99ล่างนี้",
+       "sharedupload-desc-edit": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มาà¸\88าà¸\81 $1 à¹\81ละอาà¸\88มีà¹\83à¸\8aà¹\89à¹\83à¸\99à¹\82à¸\84รà¸\87à¸\81ารอืà¹\88à¸\99\nà¸\84ุà¸\93อาà¸\88à¸\95à¹\89อà¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\84ำอà¸\98ิà¸\9aายà¹\83à¸\99[$2 à¸«à¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aายà¹\84à¸\9fลà¹\8c]à¸\99ัà¹\89à¸\99",
+       "sharedupload-desc-create": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มาà¸\88าà¸\81 $1 à¹\81ละอาà¸\88มีà¹\83à¸\8aà¹\89à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¹\83à¸\99à¹\82à¸\84รà¸\87à¸\81ารอืà¹\88à¸\99\nà¸\84ุà¸\93อาà¸\88à¸\95à¹\89อà¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\84ำอà¸\98ิà¸\9aายà¹\83à¸\99[$2 à¸«à¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aายà¹\84à¸\9fลà¹\8c]à¸\99ัà¹\89à¸\99",
        "filepage-nofile": "ไม่มีไฟล์ชื่อนี้",
        "filepage-nofile-link": "ไม่มีไฟล์ชื่อนี้ แต่คุณสามารถ[$1 อัปโหลด]ได้",
        "uploadnewversion-linktext": "อัปโหลดรุ่นใหม่ของไฟล์นี้",
        "shared-repo-from": "จาก $1",
-       "shared-repo": "à¸\84ลัà¸\87à¸\97ีà¹\88à¹\83à¸\8aà¹\89รà¹\88วมà¸\81ัà¸\99",
+       "shared-repo": "à¸\84ลัà¸\87รà¹\88วม",
        "shared-repo-name-wikimediacommons": "วิกิมีเดียคอมมอนส์",
        "filepage.css": "/* สไตล์ชีตในหน้านี้ถูกรวมในหน้าคำอธิบายไฟล์ และถูกรวมในวิกิผู้รับบริการต่างถิ่นด้วย */",
-       "upload-disallowed-here": "à¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96อัà¸\9bà¹\82หลà¸\94à¹\84à¸\9fลà¹\8cà¹\83หมà¹\88à¸\97ัà¸\9aà¹\84à¸\9fลà¹\8cà¹\80à¸\94ิมà¸\99ีà¹\89à¹\84à¸\94้",
+       "upload-disallowed-here": "à¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96à¸\9aัà¸\99à¸\97ึà¸\81à¸\97ัà¸\9aà¹\84à¸\9fลà¹\8cà¸\99ี้",
        "filerevert": "ย้อน $1",
-       "filerevert-legend": "ย้อนไฟล์กลับ",
-       "filerevert-intro": "<span class=\"plainlinks\">คุณกำลังย้อนไฟล์ '''[[Media:$1|$1]]''' ไปยัง [รุ่น $4 วันที่ $2, $3]</span>",
+       "filerevert-legend": "ย้อนไฟล์",
+       "filerevert-intro": "คุณกำลังย้อนไฟล์ <strong>[[Media:$1|$1]]</strong> ไปยัง [รุ่น $4 เมื่อ $2, $3]",
        "filerevert-comment": "เหตุผล:",
-       "filerevert-defaultcomment": "ย้อนไปรุ่น $1, $2",
+       "filerevert-defaultcomment": "ย้อนไปรุ่นเมื่อ $1, $2",
        "filerevert-submit": "ย้อน",
-       "filerevert-success": "<span class=\"plainlinks\">'''[[Media:$1|$1]]''' ถูกย้อนไปยัง [รุ่น $4 วันที่ $2, $3]</span>",
-       "filerevert-badversion": "à¹\84มà¹\88มีรุà¹\88à¸\99à¸\81à¹\88อà¸\99หà¸\99à¹\89าà¸\82อà¸\87à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¹\83à¸\99à¹\80วลาà¸\97ีà¹\88à¸\81ำหà¸\99à¸\94à¹\84วà¹\89",
+       "filerevert-success": "<strong>[[Media:$1|$1]]</strong> ถูกย้อนไปเป็น [รุ่น $4 เมื่อ $2, $3]",
+       "filerevert-badversion": "à¹\84มà¹\88มีรุà¹\88à¸\99à¸\97à¹\89อà¸\87à¸\96ิà¹\88à¸\99à¸\81à¹\88อà¸\99หà¸\99à¹\89าà¸\82อà¸\87à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¸\8bึà¹\88à¸\87มีà¸\95ราà¹\80วลาà¸\97ีà¹\88à¸\81ำหà¸\99à¸\94",
        "filedelete": "ลบ $1",
        "filedelete-legend": "ลบไฟล์",
-       "filedelete-intro": "คุณกำลังลบไฟล์ '''[[Media:$1|$1]]''' พร้อมกับประวัติทั้งหมดของไฟล์นี้",
-       "filedelete-intro-old": "คุณกำลังลบ '''[[Media:$1|$1]]''' รุ่น [$4 $3, $2]",
+       "filedelete-intro": "คุณกำลังลบไฟล์ <strong>[[Media:$1|$1]]</strong> พร้อมประวัติทั้งหมด",
+       "filedelete-intro-old": "คุณกำลังลบรุ่นของ <strong>[[Media:$1|$1]]</strong> เมื่อ [$4 $3, $2]",
        "filedelete-comment": "เหตุผล:",
        "filedelete-submit": "ลบ",
-       "filedelete-success": "ลบไฟล์ '''$1''' แล้ว",
-       "filedelete-success-old": "à¹\84à¸\9fลà¹\8c '''[[Media:$1|$1]]''' à¸£à¸¸à¹\88à¸\99à¹\80มืà¹\88อ $3, $2 à¸\96ูà¸\81ลà¸\9aแล้ว",
-       "filedelete-nofile": "ไม่มีไฟล์ '''$1'''",
-       "filedelete-nofile-old": "ไม่มี '''$1''' ตามคุณลักษณะที่กำหนด อยู่ในกรุ",
+       "filedelete-success": "ลบ <strong>$1</strong> แล้ว",
+       "filedelete-success-old": "ลà¸\9aรุà¹\88à¸\99à¸\82อà¸\87 <strong>[[Media:$1|$1]]</strong> à¹\80มืà¹\88อ $3, $2 แล้ว",
+       "filedelete-nofile": "ไม่มีไฟล์ <strong>$1</strong>",
+       "filedelete-nofile-old": "ไม่มีรุ่นเก็บถาวรของ <strong>$1</strong> ซึ่งมีคุณลักษณะที่กำหนด",
        "filedelete-otherreason": "เหตุผลอื่น/เพิ่มเติม:",
        "filedelete-reason-otherlist": "เหตุผลอื่น",
        "filedelete-reason-dropdown": "* เหตุผลการลบทั่วไป\n** ละเมิดลิขสิทธิ์\n** ไฟล์ซ้ำ",
        "filedelete-edit-reasonlist": "แก้ไขเหตุผลการลบ",
-       "filedelete-maintenance": "à¸\81ารลà¸\9aà¹\81ละà¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\9fลà¹\8cà¹\83à¸\8aà¹\89à¸\87าà¸\99à¹\84มà¹\88à¹\84à¸\94à¹\89ชั่วคราวระหว่างการบำรุงรักษา",
+       "filedelete-maintenance": "à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\81ารลà¸\9aà¹\81ละà¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\9fลà¹\8cชั่วคราวระหว่างการบำรุงรักษา",
        "filedelete-maintenance-title": "ไม่สามารถลบไฟล์",
-       "mimesearch": "à¸\84à¹\89à¸\99หาà¸\95ามà¸\8aà¸\99ิà¸\94à¹\84มมà¹\8c",
+       "mimesearch": "ค้นหาไมม์",
        "mimesearch-summary": "หน้านี้แสดงไฟล์ตามการแบ่งของชนิดไมม์ของแต่ละไฟล์ \nใส่ค่า: contenttype/subtype เช่น <code>image/jpeg</code>",
        "mimetype": "ชนิดไมม์:",
        "download": "ดาวน์โหลด",
        "unwatchedpages": "หน้าที่ไม่มีผู้เฝ้าดู",
        "listredirects": "รายการหน้าเปลี่ยนทาง",
        "unusedtemplates": "แม่แบบไม่ได้ใช้",
-       "unusedtemplatestext": "หน้านี้แสดงรายการหน้าทั้งหมดในเนมสเปซ {{ns:template}} ซึ่งไม่ได้ถูกรวมอยู่ในหน้าอื่น อย่าลืมตรวจสอบการเชื่อมโยงมายังแม่แบบอื่นก่อนลบ",
+       "unusedtemplatestext": "หน้านี้แสดงรายการหน้าทั้งหมดในเนมสเปซ {{ns:template}} ซึ่งไม่ได้ถูกรวมอยู่ในหน้าอื่น \nอย่าลืมตรวจสอบการเชื่อมโยงมายังแม่แบบอื่นก่อนลบ",
        "unusedtemplateswlh": "การเชื่อมโยงอื่น",
        "randompage": "สุ่มหน้า",
        "randompage-nopages": "ไม่มีหน้าใดใน{{PLURAL:$2|เนมสเปซ}}ต่อไปนี้: \"$1\"",
        "randomincategory": "สุ่มหน้าในหมวดหมู่",
        "randomincategory-invalidcategory": "\"$1\" มิใช่ชื่อหมวดหมู่ที่ถูกต้อง",
-       "randomincategory-nopages": "ไม่มีหน้าใน[[:Category:$1]]",
+       "randomincategory-nopages": "ไม่มีหน้าในหมวดหมู่ [[:Category:$1]]",
+       "randomincategory-category": "หมวดหมู่:",
+       "randomincategory-legend": "สุ่มหน้าในหมวดหมู่",
        "randomredirect": "สุ่มหน้าเปลี่ยนทาง",
        "randomredirect-nopages": "ไม่มีหน้าเปลี่ยนทางในเนมสเปซ \"$1\"",
        "statistics": "สถิติ",
-       "statistics-header-pages": "สà¸\96ิà¸\95ิà¸\82อà¸\87หà¸\99à¹\89า",
+       "statistics-header-pages": "สถิติหน้า",
        "statistics-header-edits": "สถิติการแก้ไข",
-       "statistics-header-views": "สถิติการเข้าชม",
        "statistics-header-users": "สถิติผู้ใช้",
        "statistics-header-hooks": "สถิติอื่น",
        "statistics-articles": "หน้าเนื้อหา",
-       "statistics-pages": "หน้าทั้งหมด",
+       "statistics-pages": "หน้า",
        "statistics-pages-desc": "หน้าทั้งหมดในวิกินี้ รวมทั้งหน้าพูดคุย หน้าเปลี่ยนทาง เป็นต้น",
-       "statistics-files": "จำนวนไฟล์ที่ถูกอัปโหลด",
-       "statistics-edits": "การแก้ไขหน้าทั้งหมดนับแต่ก่อตั้ง {{SITENAME}}",
-       "statistics-edits-average": "จำนวนแก้ไขต่อหน้าโดยเฉลี่ย",
-       "statistics-views-total": "จำนวนการเข้าชมทั้งหมด",
-       "statistics-views-total-desc": "ไม่นับรวมจำนวนการเข้าชมหน้าที่ไม่มีอยู่และหน้าพิเศษ",
-       "statistics-views-peredit": "จำนวนการเข้าดูต่อการแก้ไข:",
+       "statistics-files": "ไฟล์ที่อัปโหลด",
+       "statistics-edits": "การแก้ไขหน้านับแต่ก่อตั้ง {{SITENAME}}",
+       "statistics-edits-average": "การแก้ไขต่อหน้าเฉลี่ย",
        "statistics-users": "[[Special:ListUsers|ผู้ใช้]]ลงทะเบียน",
        "statistics-users-active": "ผู้ใช้ที่ยังมีความเคลื่อนไหว",
-       "statistics-users-active-desc": "ผู้ใช้ที่ดำเนินปฏิบัติการในช่วง $1 วันที่ผ่านมา",
-       "statistics-mostpopular": "หน้าที่มีการเข้าชมมากที่สุด",
+       "statistics-users-active-desc": "ผู้ใช้ที่ดำเนินปฏิบัติการในช่วง $1 วันหลังสุด",
        "pageswithprop": "หน้าพร้อมคุณสมบัติหน้า",
        "pageswithprop-legend": "หน้าพร้อมคุณสมบัติหน้า",
-       "pageswithprop-text": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\81สà¸\94à¸\87รายà¸\81ารหà¸\99à¹\89าà¸\97ีà¹\88à¹\83à¸\8aà¹\89à¸\84ุà¸\93สมà¸\9aัà¸\95ิหà¸\99à¹\89าอยà¹\88าà¸\87à¹\83à¸\94อยà¹\88าà¸\87หà¸\99ึà¹\88à¸\87à¹\82à¸\94ยà¹\80à¸\89à¸\9eาะ",
+       "pageswithprop-text": "หน้านี้แสดงรายการหน้าที่ใช้คุณสมบัติหน้าเฉพาะ",
        "pageswithprop-prop": "ชื่อคุณสมบัติ:",
        "pageswithprop-submit": "ไป",
-       "doubleredirects": "หà¸\99à¹\89าเปลี่ยนทางซ้ำซ้อน",
-       "doubleredirectstext": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\81สà¸\94à¸\87รายà¸\81ารหà¸\99à¹\89าà¸\97ีà¹\88à¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¹\84à¸\9bยัà¸\87หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87อืà¹\88à¸\99\nà¹\81à¸\95à¹\88ละà¹\81à¸\96วมีà¸\81ารà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¹\84à¸\9bยัà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\84รัà¹\89à¸\87à¹\81รà¸\81à¹\81ละà¸\84รัà¹\89à¸\87à¸\97ีà¹\88สอà¸\87 à¹\80à¸\8aà¹\88à¸\99à¹\80à¸\94ียวà¸\81ัà¸\9aà¹\80à¸\9bà¹\89าหมายà¸\82อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\84รัà¹\89à¸\87à¸\97ีà¹\88สอà¸\87 à¸\8bึà¹\88à¸\87มัà¸\81à¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¹\80à¸\9bà¹\89าหมาย \"à¸\97ีà¹\88แท้จริง\" ที่การเปลี่ยนแปลงครั้งแรกควรชี้ไป\nหน่วยที่<del>ขีดฆ่า</del> คือ รายการที่ได้แก้ไขแล้ว",
-       "double-redirect-fixed-move": "[[$1]] ถูกย้ายแล้ว มีการปรับอัตโนมัติและขณะนี้เปลี่ยนทางไปยัง [[$2]]",
-       "double-redirect-fixed-maintenance": "à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\8bà¹\89ำà¸\8bà¹\89อà¸\99à¸\88าà¸\81 [[$1]] à¹\84à¸\9bยัà¸\87 [[$2]] โดยอัตโนมัติในงานบำรุงรักษา",
+       "doubleredirects": "à¸\81ารเปลี่ยนทางซ้ำซ้อน",
+       "doubleredirectstext": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\81สà¸\94à¸\87รายà¸\81ารหà¸\99à¹\89าà¸\97ีà¹\88à¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¹\84à¸\9bหà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87อืà¹\88à¸\99\nà¹\81à¸\95à¹\88ละà¹\81à¸\96วมีà¸\81ารà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¹\84à¸\9bà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\84รัà¹\89à¸\87à¹\81รà¸\81à¹\81ละà¸\84รัà¹\89à¸\87à¸\97ีà¹\88สอà¸\87 à¹\80à¸\8aà¹\88à¸\99à¹\80à¸\94ียวà¸\81ัà¸\9aà¹\80à¸\9bà¹\89าหมายà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\84รัà¹\89à¸\87à¸\97ีà¹\88สอà¸\87 à¸\8bึà¹\88à¸\87มัà¸\81à¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¹\80à¸\9bà¹\89าหมาย \"แท้จริง\" ที่การเปลี่ยนแปลงครั้งแรกควรชี้ไป\nหน่วยที่<del>ขีดฆ่า</del> คือ รายการที่ได้แก้ไขแล้ว",
+       "double-redirect-fixed-move": "ย้าย [[$1]] แล้ว \nมีการปรับอัตโนมัติและขณะนี้เปลี่ยนทางไป [[$2]]",
+       "double-redirect-fixed-maintenance": "à¸\81ำลัà¸\87à¸\8bà¹\88อมà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\8bà¹\89ำà¸\8bà¹\89อà¸\99à¸\88าà¸\81 [[$1]] à¹\84à¸\9b [[$2]] โดยอัตโนมัติในงานบำรุงรักษา",
        "double-redirect-fixer": "ตัวซ่อมหน้าเปลี่ยนทาง",
-       "brokenredirects": "หà¸\99à¹\89าเปลี่ยนทางเสีย",
-       "brokenredirectstext": "หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¹\84à¸\9bยัà¸\87หà¸\99à¹\89าà¸\97ีà¹\88ยัà¸\87à¹\84มà¹\88à¸\96ูà¸\81สรà¹\89าà¸\87:",
+       "brokenredirects": "à¸\81ารเปลี่ยนทางเสีย",
+       "brokenredirectstext": "à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¹\84à¸\9bยัà¸\87หà¸\99à¹\89าà¸\97ีà¹\88à¹\84มà¹\88มี:",
        "brokenredirects-edit": "แก้ไข",
        "brokenredirects-delete": "ลบ",
        "withoutinterwiki": "หน้าที่ไม่มีลิงก์ข้ามภาษา",
-       "withoutinterwiki-summary": "หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\84มà¹\88มีลิà¸\87à¸\81à¹\8cà¸\82à¹\89ามà¹\84à¸\9bภาษาอื่น",
+       "withoutinterwiki-summary": "หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\84มà¹\88à¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¹\84à¸\9bรุà¹\88à¸\99ภาษาอื่น",
        "withoutinterwiki-legend": "คำขึ้นต้น",
        "withoutinterwiki-submit": "แสดง",
-       "fewestrevisions": "หน้าที่มีรุ่นน้อยสุด",
+       "fewestrevisions": "หà¸\99à¹\89าà¸\97ีà¹\88มีรุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\99à¹\89อยสุà¸\94",
        "nbytes": "$1 ไบต์",
        "ncategories": "$1 หมวดหมู่",
        "ninterwikis": "$1 ลิงก์ข้ามโครงการ",
        "nlinks": "$1 ลิงก์",
        "nmembers": "$1 หน้า",
        "nmemberschanged": "$1 → $2 สมาชิก",
-       "nrevisions": "$1 รุ่น",
+       "nrevisions": "$1 รุ่นปรับปรุง",
        "nviews": "$1 ครั้ง",
        "nimagelinks": "ใช้ใน $1 {{PLURAL:$1|หน้า|หน้า}}",
        "ntransclusions": "ใช้ใน $1 {{PLURAL:$1|หน้า|หน้า}}",
        "uncategorizedcategories": "หมวดหมู่ที่ไม่ได้จัดหมวดหมู่",
        "uncategorizedimages": "ไฟล์ที่ยังไม่จัดหมวดหมู่",
        "uncategorizedtemplates": "แม่แบบที่ยังไม่จัดหมวดหมู่",
-       "unusedcategories": "หมวà¸\94หมูà¹\88à¸\97ีà¹\88à¹\84มà¹\88à¹\84à¸\94à¹\89à¹\83à¸\8aà¹\89",
+       "unusedcategories": "หมวดหมู่ไม่ได้ใช้",
        "unusedimages": "ไฟล์ไม่ได้ใช้",
-       "popularpages": "หน้าที่มีการเข้าดูมาก",
        "wantedcategories": "หมวดหมู่ที่ต้องการ",
        "wantedpages": "หน้าที่ต้องการ",
        "wantedpages-badtitle": "ชื่อเรื่องไม่สมเหตุสมผลในเซตผลลัพธ์: $1",
        "wantedfiles": "ไฟล์ที่ต้องการ",
-       "wantedfiletext-cat": "ไฟล์ต่อไปนี้มีการเรียกใช้แต่ไม่มีอยู่ ไฟล์จากคลังเก็บภาษาอื่นอาจแสดงรายการแม้จะมีอยู่ ผลบวกลวงใด ๆ จะถูก<del>ขีดฆ่า</del> ยิ่งไปกว่านั้น หน้าที่ฝังตัวไฟล์ที่ไม่มีอยู่จะแสดงรายการใน [[:$1]]",
-       "wantedfiletext-nocat": "ไฟล์ต่อไปนี้มีการเรียกใช้แต่ไม่มีอยู่ ไฟล์จากคลังเก็บภาษาอื่นอาจแสดงรายการแม้จะมีอยู่ ผลบวกลวงใด ๆ จะถูก<del>ขีดฆ่า</del>",
+       "wantedfiletext-cat": "ไฟล์ต่อไปนี้พบใช้แต่ไม่มี ไฟล์จากคลังภายนอกอาจแสดงรายการแม้มีอยู่ ผลบวกลวงใด ๆ จะถูก<del>ขีดฆ่า</del> นอกจากนั้น หน้าที่ใส่ไฟล์ที่ไม่มีแสดงรายการใน [[:$1]]",
+       "wantedfiletext-cat-noforeign": "ไฟล์ต่อไปนี้พบใช้แต่ไม่มี นอกจากนี้ หน้าที่ใส่ไฟล์ที่ไม่มีแสดงรายการใน [[:$1]]",
+       "wantedfiletext-nocat": "ไฟล์ต่อไปนี้พบใช้แต่ไม่มี ไฟล์จากคลังภายนอกอาจแสดงรายการได้แม้มีอยู่ ผลบวกลวงดังกล่าวใด ๆ จะถูก<del>ขีดฆ่า</del>",
+       "wantedfiletext-nocat-noforeign": "ไฟล์ต่อไปนี้พบใช้แต่ไม่มี",
        "wantedtemplates": "แม่แบบที่ต้องการ",
        "mostlinked": "หน้าที่มีการเชื่อมโยงหามากที่สุด",
        "mostlinkedcategories": "หมวดหมู่ที่มีการเชื่อมโยงหามากที่สุด",
        "mostlinkedtemplates": "หน้าที่มีการเชื่อมโยงหามากที่สุด",
        "mostcategories": "หน้าที่มีหมวดหมู่มากที่สุด",
-       "mostimages": "ภาà¸\9eà¸\97ีà¹\88มีà¸\81ารà¹\82ยà¸\87à¹\84à¸\9bหามากที่สุด",
+       "mostimages": "à¹\84à¸\9fลà¹\8cà¸\97ีà¹\88มีà¸\81ารà¹\82ยà¸\87หามากที่สุด",
        "mostinterwikis": "หน้าที่มีลิงก์ข้ามโครงการมากที่สุด",
-       "mostrevisions": "หà¸\99à¹\89าà¸\97ีà¹\88มีรุà¹\88à¸\99มาà¸\81à¸\97ีà¹\88สุด",
-       "prefixindex": "à¸\97ุà¸\81หà¸\99à¹\89าพร้อมคำขึ้นต้น",
-       "prefixindex-namespace": "à¸\97ุà¸\81หà¸\99à¹\89าพร้อมคำขึ้นต้น (เนมสเปซ $1)",
+       "mostrevisions": "หà¸\99à¹\89าà¸\97ีà¹\88มีรุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87มาà¸\81สุด",
+       "prefixindex": "หà¸\99à¹\89าà¸\97ัà¹\89à¸\87หมà¸\94พร้อมคำขึ้นต้น",
+       "prefixindex-namespace": "หà¸\99à¹\89าà¸\97ัà¹\89à¸\87หมà¸\94พร้อมคำขึ้นต้น (เนมสเปซ $1)",
        "prefixindex-strip": "ลบคำขึ้นต้นในรายการออก",
        "shortpages": "หน้าสั้น",
        "longpages": "หน้ายาว",
        "deadendpages": "หน้าสุดทาง",
        "deadendpagestext": "หน้าต่อไปนี้ไม่เชื่อมโยงไปหน้าอื่นใน {{SITENAME}}",
        "protectedpages": "หน้าที่ถูกล็อก",
-       "protectedpages-indef": "à¸\81ารลà¹\87อà¸\81à¹\81à¸\9aà¸\9aà¹\84มà¹\88มีà¸\81ำหà¸\99à¸\94à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99",
+       "protectedpages-indef": "à¹\80à¸\89à¸\9eาะà¸\81ารลà¹\87อà¸\81à¹\81à¸\9aà¸\9aà¹\84มà¹\88มีà¸\81ำหà¸\99à¸\94",
        "protectedpages-summary": "หน้านี้แสดงรายการหน้าที่มีอยู่ซึ่งปัจจุบันถูกล็อก สำหรับรายการชื่อเรื่องที่ถูกป้องกันมิให้สร้าง ดู [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]",
-       "protectedpages-cascade": "à¸\81ารลà¹\87อà¸\81à¹\81à¸\9aà¸\9aสืà¸\9aà¸\97อà¸\94à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99",
+       "protectedpages-cascade": "à¹\80à¸\89à¸\9eาะà¸\81ารลà¹\87อà¸\81à¹\81à¸\9aà¸\9aสืà¸\9aà¸\97อà¸\94",
        "protectedpages-noredirect": "ซ่อนการเปลี่ยนทาง",
-       "protectedpagesempty": "à¸\82à¸\93ะà¸\99ีà¹\89à¹\84มà¹\88มีหà¸\99à¹\89าà¹\83à¸\94à¸\96ูà¸\81ลà¹\87อà¸\81à¸\95ามà¸\9eารามิà¹\80à¸\95อรà¹\8cà¹\80หลà¹\88าà¸\99ีà¹\89",
+       "protectedpagesempty": "ขณะนี้ไม่มีหน้าถูกล็อกตามพารามิเตอร์เหล่านี้",
        "protectedpages-timestamp": "ตราเวลา",
        "protectedpages-page": "หน้า",
        "protectedpages-expiry": "หมดอายุ",
        "protectedtitles": "ชื่อเรื่องที่ถูกป้องกัน",
        "protectedtitles-summary": "หน้านี้แสดงรายการชื่อที่ปัจจุบันถูกป้องกันมิให้สร้าง สำหรับรายการหน้าที่มีอยู่ที่ถูกล็อก ดู [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]",
        "protectedtitlesempty": "ปัจจุบันไม่มีหัวเรื่องที่ได้รับการป้องกันด้วยพารามิเตอร์เหล่านี้",
-       "listusers": "รายà¸\99ามผู้ใช้",
+       "listusers": "รายà¸\81ารผู้ใช้",
        "listusers-editsonly": "แสดงเฉพาะผู้ใช้ที่มีการแก้ไข",
-       "listusers-creationsort": "à¹\80รียà¸\87ลำà¸\94ัà¸\9aà¸\95ามวัà¸\99สรà¹\89าà¸\87",
-       "listusers-desc": "à¹\80รียà¸\87à¸\95ามลำà¸\94ัà¸\9aลà¸\94",
-       "usereditcount": "การแก้ไข $1 ครั้ง",
+       "listusers-creationsort": "เรียงตามวันสร้าง",
+       "listusers-desc": "à¹\80รียà¸\87ลำà¸\94ัà¸\9aลà¸\87",
+       "usereditcount": "$1 การแก้ไข",
        "usercreated": "{{GENDER:$3|ถูกสร้าง}}เมื่อ $1 เวลา $2",
        "newpages": "หน้าใหม่",
        "newpages-username": "ชื่อผู้ใช้:",
-       "ancientpages": "หà¸\99à¹\89าà¸\97ีà¹\88à¹\84มà¹\88à¹\84à¸\94à¹\89à¹\81à¸\81à¹\89à¹\84à¸\82à¸\99าà¸\99สุด",
+       "ancientpages": "หà¸\99à¹\89าà¹\80à¸\81à¹\88าสุด",
        "move": "เปลี่ยนชื่อ",
        "movethispage": "เปลี่ยนชื่อหน้านี้",
-       "unusedimagestext": "ไฟล์ต่อไปนี้มีอยู่ แต่ไม่มีการเรียกใช้ในหน้าใด ๆ เลย\nหมายเหตุว่า เว็บไซต์อื่นอาจเชื่อมโยงมายังไฟล์ด้วยยูอาร์แอลโดยตรง ฉะนั้นจึงชื่ออาจยังแสดงรายการอยู่ที่นี่แม้จะมีการใช้อย่างต่อเนื่อง",
-       "unusedcategoriestext": "หมวà¸\94หมูà¹\88à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89ยัà¸\87มีอยูà¹\88 à¹\81มà¹\89à¹\84มà¹\88มีหà¸\99à¹\89าอืà¹\88à¸\99หรือหมวà¸\94หมูà¹\88à¹\83à¸\94à¹\83à¸\8aà¹\89สà¹\88วà¸\99à¸\99ี้",
-       "notargettitle": "à¹\84มà¹\88à¸\9eà¸\9aเป้าหมาย",
+       "unusedimagestext": "ไฟล์ต่อไปนี้มีอยู่ แต่ไม่มีการเรียกใช้ในหน้าใด\nหมายเหตุว่า เว็บไซต์อื่นอาจเชื่อมโยงมายังไฟล์ด้วยยูอาร์แอลโดยตรง ฉะนั้นจึงอาจยังแสดงรายการอยู่ที่นี่แม้ยังใช้อยู่",
+       "unusedcategoriestext": "หมวà¸\94หมูà¹\88à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89มีอยูà¹\88 à¹\81มà¹\89à¹\84มà¹\88มีหà¸\99à¹\89าอืà¹\88à¸\99หรือหมวà¸\94หมูà¹\88à¹\83à¸\94à¹\83à¸\8a้",
+       "notargettitle": "à¹\84มà¹\88มีเป้าหมาย",
        "notargettext": "คุณมิได้ระบุหน้าหรือผู้ใช้เป้าหมายที่จะดำเนินการฟังก์ชันนี้",
        "nopagetitle": "ไม่มีหน้าเป้าหมายดังกล่าว",
-       "nopagetext": "หà¸\99à¹\89าà¹\80à¸\9bà¹\89าหมายà¸\97ีà¹\88à¸\84ุà¸\93ระà¸\9aุà¹\84มà¹\88มีอยูà¹\88",
+       "nopagetext": "à¹\84มà¹\88มีหà¸\99à¹\89าà¹\80à¸\9bà¹\89าหมายà¸\97ีà¹\88à¸\84ุà¸\93ระà¸\9aุ",
        "pager-newer-n": "ใหม่กว่า $1",
        "pager-older-n": "เก่ากว่า $1",
        "suppress": "ผู้ดูแลประวัติ",
-       "querypage-disabled": "หà¸\99à¹\89าà¸\9eิà¹\80ศษà¸\99ีà¹\89à¸\96ูà¸\81à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81มีà¸\9bระสิà¸\97à¸\98ิภาà¸\9eà¸\95à¹\88ำ",
+       "querypage-disabled": "หà¸\99à¹\89าà¸\9eิà¹\80ศษà¸\99ีà¹\89à¸\96ูà¸\81à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\94à¹\89วยà¹\80หà¸\95ุà¸\9cลà¸\94à¹\89าà¸\99สมรรà¸\96ภาà¸\9e",
        "booksources": "แหล่งหนังสือ",
        "booksources-search-legend": "ค้นหาแหล่งหนังสือ",
-       "booksources-go": "ค้นหา",
+       "booksources-search": "ค้นหา",
        "booksources-text": "ด้านล่างเป็นรายการการเชื่อมโยงไปยังเว็บไซต์อื่นที่ขายหนังสือใหม่และหนังสือใช้แล้ว และอาจมีสารสนเทศเพิ่มเติมเกี่ยวกับหนังสือที่คุณกำลังมองหา:",
        "booksources-invalid-isbn": "รหัส ISBN ที่ให้ไว้ไม่ถูกต้อง กรุณาตรวจสอบจากต้นฉบับอีกครั้ง",
        "specialloguserlabel": "ผู้ดำเนินการ:",
        "all-logs-page": "ปูมสาธารณะทั้งหมด",
        "alllogstext": "การแสดงผลรวมปูมที่มีทั้งหมดของ {{SITENAME}}\nคุณสามารถค้นหาให้ละเอียดขึ้นโดยเลือกประเภทปูม ชื่อผู้ใช้หรือหน้าที่ต้องการ (ไวต่ออักษรใหญ่เล็ก)",
        "logempty": "ไม่พบรายการตรงกันในปูม",
-       "log-title-wildcard": "ค้นหาชื่อเรื่องด้วยข้อความนี้",
-       "showhideselectedlogentries": "à¹\81สà¸\94à¸\87/à¸\8bà¹\88อà¸\99หน่วยปูมที่เลือก",
+       "log-title-wildcard": "à¸\84à¹\89à¸\99หาà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¸\8bึà¹\88à¸\87à¸\82ึà¹\89à¸\99à¸\95à¹\89à¸\99à¸\94à¹\89วยà¸\82à¹\89อà¸\84วามà¸\99ีà¹\89",
+       "showhideselectedlogentries": "à¹\80à¸\9bลีà¹\88ยà¸\99à¸\97ัศà¸\99วิสัยà¸\82อà¸\87หน่วยปูมที่เลือก",
        "allpages": "หน้าทั้งหมด",
        "nextpage": "หน้าถัดไป ($1)",
        "prevpage": "หน้าก่อนหน้า ($1)",
-       "allpagesfrom": "à¹\81สà¸\94à¸\87หà¸\99à¹\89าà¹\82à¸\94ยà¹\80ริà¹\88มà¸\88าà¸\81:",
+       "allpagesfrom": "แสดงหน้าเริ่มจาก:",
        "allpagesto": "แสดงหน้าจบที่:",
-       "allarticles": "à¸\97ุà¸\81หà¸\99à¹\89า",
-       "allinnamespace": "หà¸\99à¹\89าà¸\97ุà¸\81หà¸\99à¹\89า (เนมสเปซ $1)",
+       "allarticles": "หà¸\99à¹\89าà¸\97ัà¹\89à¸\87หมà¸\94",
+       "allinnamespace": "หà¸\99à¹\89าà¸\97ัà¹\89à¸\87หมà¸\94 (เนมสเปซ $1)",
        "allpagessubmit": "ดู",
        "allpagesprefix": "แสดงหน้าที่ขึ้นต้นด้วย:",
-       "allpagesbadtitle": "ชื่อเรื่องนี้ไม่ถูกต้อง อาจสะกดผิด หรือเป็นลิงก์ข้ามภาษา หรือมีตัวอักษรที่ไม่สามารถใช้เป็นชื่อเรื่องได้",
+       "allpagesbadtitle": "ชื่อเรื่องนี้ไม่ถูกต้องหรือมีคำเติมหน้าข้ามภาษาหรือข้ามโครงการ \nอาจมีอักขระที่ไม่สามารถใช้ในชื่อเรื่องได้",
        "allpages-bad-ns": "{{SITENAME}} ไม่มีเนมสเปซ \"$1\"",
        "allpages-hide-redirects": "ซ่อนการเปลี่ยนทาง",
        "cachedspecial-viewing-cached-ttl": "คุณกำลังดูรุ่นที่เก็บหน่วยความจำแคชของหน้านี้ ซึ่งอาจมีอายุ $1",
        "categoriesfrom": "แสดงหมวดหมู่เริ่มจาก:",
        "special-categories-sort-count": "เรียงตามจำนวน",
        "special-categories-sort-abc": "เรียงตามตัวอักษร",
-       "deletedcontributions": "à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ที่ถูกลบ",
-       "deletedcontributions-title": "à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ที่ถูกลบ",
+       "deletedcontributions": "à¹\80รืà¹\88อà¸\87à¸\97ีà¹\88à¹\80à¸\82ียà¸\99à¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89ที่ถูกลบ",
+       "deletedcontributions-title": "à¹\80รืà¹\88อà¸\87à¸\97ีà¹\88à¹\80à¸\82ียà¸\99à¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89ที่ถูกลบ",
        "sp-deletedcontributions-contribs": "เรื่องที่เขียน",
        "linksearch": "ค้นหาลิงก์ภายนอก",
        "linksearch-pat": "รูปแบบการค้นหา:",
        "listusers-noresult": "ไม่พบผู้ใช้",
        "listusers-blocked": "(ถูกบล็อก)",
        "activeusers": "รายการผู้ใช้ที่มีความเคลื่อนไหว",
-       "activeusers-intro": "à¸\99ีà¹\88à¸\84ือรายà¸\81ารà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88มีà¸\81ิà¸\88à¸\81รรมà¹\83à¸\94 à¹\86 à¹\83à¸\99à¸\8aà¹\88วà¸\87 $1 à¸§à¸±à¸\99à¸\97ีà¹\88à¸\9cà¹\88าà¸\99มา",
-       "activeusers-count": "{{PLURAL:$1|ปฏิบัติการล่าสุด|ปฏิบัติการล่าสุด $1 รายการ}} ในช่วง $3 วันที่ผ่านมา",
+       "activeusers-intro": "à¸\99ีà¹\88à¸\84ือรายà¸\81ารà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88มีà¸\81ิà¸\88à¸\81รรมà¹\83à¸\94 à¹\86 à¹\83à¸\99à¸\8aà¹\88วà¸\87 $1 à¸§à¸±à¸\99หลัà¸\87สุà¸\94",
+       "activeusers-count": "$1 ปฏิบัติการ{{PLURAL:$1|}} ในช่วง $3 วันหลังสุด",
        "activeusers-from": "แสดงผู้ใช้เริ่มจาก:",
        "activeusers-hidebots": "ซ่อนบอต",
        "activeusers-hidesysops": "ซ่อนผู้ดูแลระบบ",
        "activeusers-noresult": "ไม่พบผู้ใช้",
        "listgrouprights": "สิทธิกลุ่มผู้ใช้",
-       "listgrouprights-summary": "à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9bà¹\87à¸\99รายà¸\81ารà¸\81ลุà¹\88มà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\99ิยามà¸\9aà¸\99วิà¸\81ิà¸\99ีà¹\89 à¹\81ละสิà¸\97à¸\98ิà¸\81ารà¹\80à¸\82à¹\89าà¸\96ึà¸\87à¸\97ีà¹\88à¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87\nอาà¸\88มี[[{{MediaWiki:Listgrouprights-helppage}}|à¸\82à¹\89อมูลเพิ่มเติม]]เกี่ยวกับสิทธิหนึ่ง ๆ",
+       "listgrouprights-summary": "à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9bà¹\87à¸\99รายà¸\81ารà¸\81ลุà¹\88มà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\99ิยามà¸\9aà¸\99วิà¸\81ิà¸\99ีà¹\89 à¹\81ละสิà¸\97à¸\98ิà¸\81ารà¹\80à¸\82à¹\89าà¸\96ึà¸\87à¸\97ีà¹\88à¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87\nอาà¸\88มี[[{{MediaWiki:Listgrouprights-helppage}}|สารสà¸\99à¹\80à¸\97ศเพิ่มเติม]]เกี่ยวกับสิทธิหนึ่ง ๆ",
        "listgrouprights-key": "คำอธิบาย:\n* <span class=\"listgrouprights-granted\">สิทธิที่ได้รับแต่งตั้ง</span>\n* <span class=\"listgrouprights-revoked\">สิทธิที่ถูกเพิกถอน</span>",
        "listgrouprights-group": "กลุ่ม",
        "listgrouprights-rights": "สิทธิ",
        "listgrouprights-addgroup": "เพิ่ม{{PLURAL:$2|กลุ่มนี้|กลุ่มเหล่านี้}}: $1",
        "listgrouprights-removegroup": "นำ{{PLURAL:$2|กลุ่มนี้|กลุ่มเหล่านี้}}ออก: $1",
        "listgrouprights-addgroup-all": "เพิ่มกลุ่มทั้งหมด",
-       "listgrouprights-removegroup-all": "à¸\99ำกลุ่มทั้งหมดออก",
-       "listgrouprights-addgroup-self": "à¹\80à¸\9eิà¹\88ม{{PLURAL:$2|à¸\81ลุà¹\88ม|à¸\81ลุà¹\88ม}}à¹\80à¸\82à¹\89าà¹\84à¸\9bà¹\83à¸\99à¸\9aัà¸\8dà¸\8aี: $1",
-       "listgrouprights-removegroup-self": "ลบ{{PLURAL:$2|กลุ่ม|กลุ่ม}}ออกจากบัญชี: $1",
-       "listgrouprights-addgroup-self-all": "à¹\80à¸\9eิà¹\88มà¸\97ุà¸\81à¸\81ลุà¹\88มà¹\80à¸\82à¹\89าà¹\84à¸\9bà¹\83à¸\99à¸\9aัà¸\8dà¸\8aีà¸\99ีà¹\89",
-       "listgrouprights-removegroup-self-all": "à¸\99ำà¸\97ุà¸\81à¸\81ลุà¹\88มออà¸\81à¸\88าà¸\81à¸\9aัà¸\8dà¸\8aีà¸\99ีà¹\89",
+       "listgrouprights-removegroup-all": "ลà¸\9aกลุ่มทั้งหมดออก",
+       "listgrouprights-addgroup-self": "à¹\80à¸\9eิà¹\88ม{{PLURAL:$2|à¸\81ลุà¹\88ม|à¸\81ลุà¹\88ม}}à¹\83หà¹\89à¸\9aัà¸\8dà¸\8aีà¸\82อà¸\87à¸\95ัว: $1",
+       "listgrouprights-removegroup-self": "ลบ{{PLURAL:$2|กลุ่ม|กลุ่ม}}ออกจากบัญชีของตัว: $1",
+       "listgrouprights-addgroup-self-all": "à¹\80à¸\9eิà¹\88มà¸\97ุà¸\81à¸\81ลุà¹\88มà¹\80à¸\82à¹\89าà¸\9aัà¸\8dà¸\8aีà¸\82อà¸\87à¸\95ัว",
+       "listgrouprights-removegroup-self-all": "ลà¸\9aà¸\97ุà¸\81à¸\81ลุà¹\88มออà¸\81à¸\88าà¸\81à¸\9aัà¸\8dà¸\8aีà¸\82อà¸\87à¸\95ัว",
        "listgrouprights-namespaceprotection-header": "การจำกัดเนมสเปซ",
        "listgrouprights-namespaceprotection-namespace": "เนมสเปซ",
        "listgrouprights-namespaceprotection-restrictedto": "สิทธิอนุญาตให้ผู้ใช้แก้ไข",
        "trackingcategories": "หมวดหมู่ค้นหาและติดตาม",
-       "trackingcategories-summary": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\81สà¸\94à¸\87รายà¸\81ารหมวà¸\94หมูà¹\88à¸\84à¹\89à¸\99หาà¹\81ละà¸\95ิà¸\94à¸\95ามà¸\8bึà¹\88à¸\87à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cมีà¹\80à¸\94ียวิà¸\81ิà¸\88ัà¸\94à¸\81ารอัà¸\95à¹\82à¸\99มัà¸\95ิ à¸\8aืà¹\88อà¹\80หลà¹\88าà¸\99ีà¹\89สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99ได้โดยการเปลี่ยนสารระบบที่เกี่ยวข้องในเนมสเปซ {{ns:8}}",
+       "trackingcategories-summary": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\81สà¸\94à¸\87รายà¸\81ารหมวà¸\94หมูà¹\88à¸\84à¹\89à¸\99หาà¹\81ละà¸\95ิà¸\94à¸\95ามà¸\8bึà¹\88à¸\87à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cมีà¹\80à¸\94ียวิà¸\81ิà¸\88ัà¸\94à¸\81ารอัà¸\95à¹\82à¸\99มัà¸\95ิ à¸ªà¸²à¸¡à¸²à¸£à¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\80หลà¹\88าà¸\99ีà¹\89ได้โดยการเปลี่ยนสารระบบที่เกี่ยวข้องในเนมสเปซ {{ns:8}}",
        "trackingcategories-msg": "หมวดหมู่ค้นหาและติดตาม",
        "trackingcategories-name": "ชื่อสาร",
        "trackingcategories-desc": "เกณฑ์การรวมหมวดหมู่",
        "noindex-category-desc": "โรบอตไม่สามารถทำดัชนีหน้านี้เพราะมีเมจิกเวิร์ด <code><nowiki>__NOINDEX__</nowiki></code> อยู่และอยู่ในเนมสเปซซึ่งอนุญาตตัวบ่งชี้นี้",
        "index-category-desc": "หน้านี้มี <code><nowiki>__INDEX__</nowiki></code> อยู่ (และอยู่ในเนมสเปซซึ่งอนุญาตตัวบ่งชี้นี้) ฉะนั้น โรบอตจึงทำดัชนี้ได้ ซึ่งปกติไม่สามารถทำได้",
-       "hidden-category-category-desc": "นี่คือหมวดหมู่ที่ติด <code><nowiki>__HIDDENCAT__</nowiki></code> ซึ่งป้องกันมิให้แสดงในกล่องลิงก์หมวดหมู่ในหน้าโดยปริยาย",
+       "hidden-category-category-desc": "หมวดหมู่นี้มี <code><nowiki>__HIDDENCAT__</nowiki></code> ในเนื้อหาหน้า ซึ่งป้องกันมิให้แสดงในกล่องลิงก์หมวดหมู่ในหน้าโดยปริยาย",
+       "trackingcategories-nodesc": "ไม่มีคำอธิบาย",
+       "trackingcategories-disabled": "ปิดใช้งานหมวดหมู่",
        "mailnologin": "ไม่มีที่อยู่ส่ง",
-       "mailnologintext": "คุณต้อง[[Special:UserLogin|ล็อกอิน]]และมีที่อยู่อีเมลที่สมเหตุสมผลใน[[Special:Preferences|การตั้งค่า]]ของคุณ ในการส่งอีเมลหาผู้ใช้อื่น",
+       "mailnologintext": "คุณต้อง[[Special:UserLogin|ล็อกอิน]]และมีที่อยู่อีเมลที่สมเหตุสมผลใน[[Special:Preferences|การตั้งค่า]]ของคุณเพื่อส่งอีเมลหาผู้ใช้อื่น",
        "emailuser": "ส่งอีเมลหาผู้ใช้นี้",
        "emailuser-title-target": "ส่งอีเมลหา{{GENDER:$1|ผู้ใช้}}",
        "emailuser-title-notarget": "อีเมลผู้ใช้",
        "emailpage": "อีเมลผู้ใช้",
        "emailpagetext": "คุณสามารถใช้แบบด้านล่างส่งอีเมลหา{{GENDER:$1|ผู้ใช้}}นี้\nที่อยู่อีเมลที่คุณกรอกใน[[Special:Preferences|การตั้งค่าส่วนตัวของคุณ]]จะปรากฏเป็นที่อยู่ \"จาก\" ของอีเมล ซึ่งผู้รับสามารถตอบกลับคุณได้โดยตรง",
-       "defemailsubject": "อีเมล{{SITENAME}}จากผู้ใช้ \"$1\"",
+       "defemailsubject": "อีเมล {{SITENAME}} จากผู้ใช้ \"$1\"",
        "usermaildisabled": "ปิดใช้งานการส่งอีเมลหาผู้ใช้",
        "usermaildisabledtext": "คุณไม่สามารถส่งอีเมลหาผู้ใช้อื่นบนวิกินี้",
        "noemailtitle": "ไม่มีที่อยู่อีเมล",
        "email-legend": "ส่งอีเมลถึงผู้ใช้ {{SITENAME}} อีกคน",
        "emailfrom": "จาก:",
        "emailto": "ถึง:",
-       "emailsubject": "หัวà¹\80รืà¹\88อà¸\87:",
+       "emailsubject": "เรื่อง:",
        "emailmessage": "ข้อความ:",
        "emailsend": "ส่ง",
-       "emailccme": "สà¹\88à¸\87อีà¹\80มลสำà¹\80à¸\99าà¸\81ลัà¸\9aมา",
-       "emailccsubject": "à¸\84ัà¸\94ลอà¸\81à¸\82à¹\89อà¸\84วามà¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\9bยัà¸\87$1: $2",
-       "emailsent": "อีà¹\80มลà¸\96ูà¸\81สà¹\88à¸\87แล้ว",
-       "emailsenttext": "อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81สà¹\88à¸\87แล้ว",
-       "emailuserfooter": "อีà¹\80มลà¸\89à¸\9aัà¸\9aà¸\99ีà¹\89à¸\96ูà¸\81สà¹\88à¸\87à¹\82à¸\94ย $1 ถึง $2 ด้วยฟังก์ชัน \"อีเมลผู้ใช้รายนี้\" ที่ {{SITENAME}}",
-       "usermessage-summary": "à¸\9dาà¸\81à¸\82à¹\89อà¸\84วามà¸\82อà¸\87ระบบ",
-       "usermessage-editor": "à¸\95ัวสà¹\88à¸\87à¸\82à¹\89อà¸\84วามของระบบ",
+       "emailccme": "สà¹\88à¸\87อีà¹\80มลสำà¹\80à¸\99าสารà¸\82อà¸\87à¸\89ัà¸\99หาà¸\89ัà¸\99",
+       "emailccsubject": "à¸\84ัà¸\94ลอà¸\81สารà¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\9b $1: $2",
+       "emailsent": "สà¹\88à¸\87อีà¹\80มลแล้ว",
+       "emailsenttext": "สà¹\88à¸\87สารอีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93แล้ว",
+       "emailuserfooter": "สà¹\88à¸\87อีà¹\80มลà¸\88าà¸\81 $1 ถึง $2 ด้วยฟังก์ชัน \"อีเมลผู้ใช้รายนี้\" ที่ {{SITENAME}}",
+       "usermessage-summary": "à¸\9dาà¸\81สารระบบ",
+       "usermessage-editor": "à¸\95ัวสà¹\88à¸\87สารของระบบ",
        "watchlist": "รายการเฝ้าดู",
        "mywatchlist": "รายการเฝ้าดู",
        "watchlistfor2": "สำหรับ $1 $2",
        "watchlistanontext": "กรุณาล็อกอินเพื่อดูหรือแก้ไขรายการในรายการเฝ้าดูของคุณ",
        "watchnologin": "ยังไม่ได้ล็อกอิน",
        "addwatch": "เพิ่มเข้ารายการเฝ้าดู",
-       "addedwatchtext": "หà¸\99à¹\89า \"[[:$1]]\" à¹\84à¸\94à¹\89à¹\80à¸\9eิà¹\88มลà¸\87à¹\83à¸\99[[Special:Watchlist|รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู]]à¸\82อà¸\87à¸\84ุà¸\93à¹\81ลà¹\89ว à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\83à¸\99หน้านี้หรือหน้าพูดคุยที่เกี่ยวข้องจะแสดงในรายการดังกล่าว",
-       "addedwatchtext-short": "หà¸\99à¹\89า \"$1\" à¸\96ูà¸\81à¹\80à¸\9eิà¹\88มà¹\80à¸\82à¹\89ารายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93",
+       "addedwatchtext": "à¹\80à¸\9eิà¹\88มหà¸\99à¹\89า \"[[:$1]]\" à¹\80à¸\82à¹\89า[[Special:Watchlist|รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู]]à¸\82อà¸\87à¸\84ุà¸\93à¹\81ลà¹\89ว \nà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\83à¸\99อà¸\99าà¸\84à¸\95à¹\81à¸\81à¹\88หน้านี้หรือหน้าพูดคุยที่เกี่ยวข้องจะแสดงในรายการดังกล่าว",
+       "addedwatchtext-short": "à¹\80à¸\9eิà¹\88มหà¸\99à¹\89า \"$1\" à¹\80à¸\82à¹\89ารายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93à¹\81ลà¹\89ว",
        "removewatch": "นำออกจากรายการเฝ้าดู",
-       "removedwatchtext": "หà¸\99à¹\89า \"[[:$1]]\" à¸\96ูà¸\81à¸\99ำออà¸\81à¸\88าà¸\81[[Special:Watchlist|รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93]]",
-       "removedwatchtext-short": "หà¸\99à¹\89า \"$1\" à¸\96ูà¸\81à¸\99ำออà¸\81à¸\88าà¸\81รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93",
+       "removedwatchtext": "à¸\99ำหà¸\99à¹\89า \"[[:$1]]\" à¸­à¸­à¸\81à¸\88าà¸\81[[Special:Watchlist|รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93]]à¹\81ลà¹\89ว",
+       "removedwatchtext-short": "à¸\99ำหà¸\99à¹\89า \"$1\" à¸­à¸­à¸\81à¸\88าà¸\81รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93à¹\81ลà¹\89ว",
        "watch": "เฝ้าดู",
        "watchthispage": "เฝ้าดูหน้านี้",
        "unwatch": "เลิกเฝ้าดู",
        "notanarticle": "ไม่ใช่หน้าเนื้อหา",
        "notvisiblerev": "รุ่นล่าสุดโดยผู้ใช้อีกคนถูกลบแล้ว",
        "watchlist-details": "มี $1 หน้าในรายการเฝ้าดูของคุณ ไม่นับแยกหน้าอภิปราย",
-       "wlheader-enotif": "à¸\81ารà¹\81à¸\88à¹\89à¸\87à¹\80à¸\95ือà¸\99à¸\9cà¹\88าà¸\99อีà¹\80มลà¸\96ูà¸\81à¹\80à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99",
-       "wlheader-showupdated": "หà¸\99à¹\89าà¸\97ีà¹\88มีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\84ุà¸\93à¹\80à¸\82à¹\89าà¸\8aมลà¹\88าสุà¸\94à¹\81สà¸\94à¸\87à¹\83à¸\99'''à¸\95ัวหà¸\99า'''",
-       "wlnote": "ด้านล่างเป็นการแก้ไข{{PLURAL:$1|ล่าสุด|ล่าสุด <strong>$1</strong> รายการ}} ใน{{PLURAL:$2|ชั่วโมง| <strong>$2</strong> ชั่วโมง}}ที่ผ่านมา จนถึง $3, $4",
-       "wlshowlast": "แสดง $1 ชั่วโมง $2 วันล่าสุด $3",
+       "wlheader-enotif": "à¹\80à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\81ารà¹\81à¸\88à¹\89à¸\87à¹\80à¸\95ือà¸\99à¸\9cà¹\88าà¸\99อีà¹\80มล",
+       "wlheader-showupdated": "หà¸\99à¹\89าà¸\97ีà¹\88มีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\84ุà¸\93à¹\80ยีà¹\88ยมà¸\84รัà¹\89à¸\87สุà¸\94à¸\97à¹\89ายà¹\81สà¸\94à¸\87à¸\94à¹\89วย<strong>à¸\95ัวหà¸\99า</strong>",
+       "wlnote": "ด้านล่างเป็น{{PLURAL:$1|การเปลี่ยนแปลงหลังสุด| <strong>$1</strong> การเปลี่ยนแปลงหลังสุด}} ใน{{PLURAL:$2|ชั่วโมง| <strong>$2</strong> ชั่วโมง}}ที่หลังสุด จนถึง $3, $4",
+       "wlshowlast": "แสดง $1 ชั่วโมง $2 วันล่าสุด",
        "watchlist-options": "ตัวเลือกรายการเฝ้าดู",
-       "watching": "เฝ้าดู...",
-       "unwatching": "เลิกเฝ้าดู...",
+       "watching": "à¸\81ำลัà¸\87à¹\80à¸\9dà¹\89าà¸\94ู...",
+       "unwatching": "à¸\81ำลัà¸\87à¹\80ลิà¸\81à¹\80à¸\9dà¹\89าà¸\94ู...",
        "watcherrortext": "เกิดข้อผิดพลาดขณะเปลี่ยนแปลงการตั้งค่ารายการเฝ้าดูของคุณ เพราะ \"$1\"",
-       "enotif_reset": "ทำเครื่องหมายว่าชมทุกหน้าแล้ว",
-       "enotif_impersonal_salutation": "ผู้ใช้{{SITENAME}}",
-       "enotif_subject_deleted": "หน้า $1 บน {{SITENAME}} ถูกลบโดย {{gender:$2|$2}}",
-       "enotif_subject_created": "หน้า $1 บน {{SITENAME}} ถูกสร้างโดย {{gender:$2|$2}}",
-       "enotif_subject_moved": "หน้า $1 บน {{SITENAME}} ถูกย้ายโดย {{gender:$2|$2}}",
-       "enotif_subject_restored": "หน้า $1 บน {{SITENAME}} ถูก{{GENDER:$2|กู้คืน}}โดย $2",
-       "enotif_subject_changed": "หน้า $1 บน {{SITENAME}} มีการเปลี่ยนแปลงโดย {{gender:$2|$2}}",
-       "enotif_body_intro_deleted": "หน้า $1 บน {{SITENAME}} ถูก{{GENDER:$2|ลบ}}เมื่อ $PAGEEDITDATE โดย $2 ดู $3",
-       "enotif_body_intro_created": "หน้า $1 บน {{SITENAME}} ถูก{{GENDER:$2|สร้าง}}เมื่อ $PAGEEDITDATE โดย $2 ดูรุ่นปัจจุบันที่ $3",
-       "enotif_body_intro_moved": "หน้า $1 บน {{SITENAME}} ถูก{{GENDER:$2|เปลี่ยนชื่อ}}เมื่อ $PAGEEDITDATE โดย $2 ดูรุ่นปัจจุบันที่ $3",
-       "enotif_body_intro_restored": "หน้า $1 บน {{SITENAME}} ถูก{{GENDER:$2|กู้คืน}}เมื่อ $PAGEEDITDATE โดย $2 ดูรุ่นปัจจุบันที่ $3",
-       "enotif_body_intro_changed": "หน้า $1 บน {{SITENAME}} ถูก{{GENDER:$2|เปลี่ยนแปลง}}เมื่อ $PAGEEDITDATE โดย $2 ดูรุ่นปัจจุบันที่ $3",
-       "enotif_lastvisited": "à¸\94ู $1 à¸ªà¸³à¸«à¸£à¸±à¸\9aà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\97ัà¹\89à¸\87หมà¸\94à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\84ุà¸\93à¹\80à¸\82à¹\89าà¸\8aมà¸\84รัà¹\89à¸\87ลà¹\88าสุà¸\94",
+       "enotif_reset": "à¸\97ำà¹\80à¸\84รืà¹\88อà¸\87หมายวà¹\88าà¹\80ยีà¹\88ยมà¸\8aมà¸\97ุà¸\81หà¸\99à¹\89าà¹\81ลà¹\89ว",
+       "enotif_impersonal_salutation": "ผู้ใช้ {{SITENAME}}",
+       "enotif_subject_deleted": "$2 ลบหน้า $1 บน {{SITENAME}}",
+       "enotif_subject_created": "$2 สร้างหน้า $1 บน {{SITENAME}}",
+       "enotif_subject_moved": "$2 ย้ายหน้า $1 บน {{SITENAME}}",
+       "enotif_subject_restored": "$2 กู้คืนหน้า $1 บน {{SITENAME}}",
+       "enotif_subject_changed": "$2 เปลี่ยนแปลงหน้า $1 บน {{SITENAME}}",
+       "enotif_body_intro_deleted": "$2 ลบหน้า $1 บน {{SITENAME}} เมื่อ $PAGEEDITDATE ดู $3",
+       "enotif_body_intro_created": "$2 สร้างหน้า $1 บน {{SITENAME}} เมื่อ $PAGEEDITDATE ดูรุ่นปัจจุบันที่ $3",
+       "enotif_body_intro_moved": "$2 ย้ายหน้า $1 บน {{SITENAME}} เมื่อ $PAGEEDITDATE ดูรุ่นปัจจุบันที่ $3",
+       "enotif_body_intro_restored": "$2 กู้คืนหน้า $1 บน {{SITENAME}} เมื่อ $PAGEEDITDATE ดูรุ่นปัจจุบันที่ $3",
+       "enotif_body_intro_changed": "$2 เปลี่ยนแปลงหน้า $1 บน {{SITENAME}} เมื่อ $PAGEEDITDATE ดูรุ่นปัจจุบันที่ $3",
+       "enotif_lastvisited": "à¸\94ู $1 à¸ªà¸³à¸«à¸£à¸±à¸\9aà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\97ัà¹\89à¸\87หมà¸\94à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\84ุà¸\93à¹\80ยีà¹\88ยมà¸\8aมà¸\84รัà¹\89à¸\87สุà¸\94à¸\97à¹\89าย",
        "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",
        "changed": "ถูกเปลี่ยนแปลง",
        "deletepage": "ลบหน้า",
        "confirm": "ยืนยัน",
-       "excontent": "เนื้อหาเดิม: '$1'",
-       "excontentauthor": "เนื้อหาเดิม: '$1' (และมีผู้เขียนคนเดียวคือ '[[Special:Contributions/$2|$2]]')",
-       "exbeforeblank": "เนื้อหาก่อนถูกทำว่างคือ: '$1'",
+       "excontent": "เนื้อหาเดิม: \"$1\"",
+       "excontentauthor": "เนื้อหาเดิม: \"$1\" (และมีผู้เขียนคนเดียวคือ \"[[Special:Contributions/$2|$2]]\")",
+       "exbeforeblank": "เนื้อหาก่อนถูกทำว่างคือ: \"$1\"",
        "delete-confirm": "ลบ \"$1\"",
        "delete-legend": "ลบ",
        "historywarning": "'''คำเตือน:'''' หน้าที่คุณกำลังลบมีประวัติการแก้ไขประมาณ $1 {{PLURAL:$1|รุ่น}}:",
        "confirmdeletetext": "คุณกำลังลบหน้า รวมทั้งประวัติทั้งหมดของหน้า\nกรุณายืนยันว่าคุณเจตนา เข้าใจผลกระทบ และการกระทำนี้สอดคล้องกับ[[{{MediaWiki:Policy-url}}|นโยบาย]]",
        "actioncomplete": "ปฏิบัติการสำเร็จ",
        "actionfailed": "ปฏิบัติการล้มเหลว",
-       "deletedtext": "\"$1\" ถูกลบ\nดู $2 สำหรับบันทึกการลบล่าสุด",
+       "deletedtext": "ลบ \"$1\" แล้ว\nดู $2 สำหรับบันทึกการลบล่าสุด",
        "dellogpage": "ปูมการลบ",
        "dellogpagetext": "ด้านล่างเป็นรายการการลบล่าสุด",
        "deletionlog": "ปูมการลบ",
        "delete-edit-reasonlist": "แก้ไขเหตุผลการลบ",
        "delete-toobig": "หน้านี้มีประวัติการแก้ไขนาดใหญ่ คือ กว่า $1 รุ่น การลบหน้าเช่นนี้ถูกจำกัดเพื่อป้องกันการรบกวน{{SITENAME}}โดยบังเอิญ",
        "delete-warning-toobig": "หน้านี้มีประวัติการแก้ไขขนาดใหญ่ กว่า $1 รุ่น การลบหน้านี้อาจรบกวนการทำงานของฐานข้อมูลของ {{SITENAME}} โปรดดำเนินการด้วยความระมัดระวัง",
+       "deleteprotected": "คุณไม่สามารถลบหน้านี้เพราะถูกล็อก",
        "deleting-backlinks-warning": "'''คำเตือน:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|หน้าอื่น]]เชื่อมโยงมายังหรือดึงข้อมูลจากหน้าที่คุณกำลังจะลบ",
        "rollback": "ย้อนการแก้ไขกลับฉุกเฉิน",
        "rollback_short": "ย้อนกลับฉุกเฉิน",
        "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": "à¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ยà¹\88อคือ: \"''$1''\"",
-       "revertpage": "ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87 [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) à¹\84à¸\9bยัà¸\87รุà¹\88à¸\99à¸\82อà¸\87 [[User:$1|$1]]",
-       "revertpage-nouser": "ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\82à¸\94ยà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84มà¹\88ระà¸\9aุà¸\8aืà¹\88อà¹\84à¸\9bยัà¸\87รุà¹\88à¸\99สุà¸\94à¸\97à¹\89ายโดย {{GENDER:$1|[[User:$1|$1]]}}",
-       "rollback-success": "ย้อนการแก้ไขโดย $1 ไปยังรุ่นล่าสุดโดย $2",
+       "editcomment": "à¸\84ำอà¸\98ิà¸\9aายà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82คือ: \"''$1''\"",
+       "revertpage": "ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\82à¸\94ย [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) à¹\84à¸\9bยัà¸\87รุà¹\88à¸\99à¹\81à¸\81à¹\89à¹\84à¸\82ลà¹\88าสุà¸\94à¹\82à¸\94ย [[User:$1|$1]]",
+       "revertpage-nouser": "ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\82à¸\94ยà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84มà¹\88ระà¸\9aุà¸\8aืà¹\88อà¹\84à¸\9bยัà¸\87รุà¹\88à¸\99ลà¹\88าสุà¸\94โดย {{GENDER:$1|[[User:$1|$1]]}}",
+       "rollback-success": "ย้อนการแก้ไขโดย $1; \nเปลี่ยนกลับไปรุ่นล่าสุดโดย $2",
        "sessionfailure-title": "ช่วงเวลาสื่อสารล้มเหลว",
        "sessionfailure": "ดูเหมือนมีปัญหากับช่วงเวลาสื่อสารล็อกอินของคุณ\nการกระทำนี้ถูกยกเลิกเป็นการป้องกันการลักลอบช่วงเวลาสื่อสารไว้ก่อน \nกลับไปหน้าที่แล้ว โหลดหน้าใหม่ แล้วลองอีกครั้ง",
        "protectlogpage": "ปูมการล็อก",
        "protectlogtext": "ด้านล่างเป็นรายการการเปลี่ยนแปลงการล็อกหน้า\nดู[[Special:ProtectedPages|รายการหน้าที่ถูกล็อก]]สำหรับการล็อกหน้าที่มีผลอยู่ในปัจจุบัน",
        "protectedarticle": "ล็อก \"[[$1]]\"",
        "modifiedarticleprotection": "เปลี่ยนระดับการล็อกของ \"[[$1]]\"",
-       "unprotectedarticle": "ยกเลิกการล็อกจาก \"[[$1]]\" แล้ว",
-       "movedarticleprotection": "ย้ายการตั้งค่าการล็อกจาก \"[[$2]]\" ไปยัง \"[[$1]]\"",
-       "protect-title": "à¸\81ำลัà¸\87ลà¹\87อà¸\81หà¸\99à¹\89า \"$1\"",
+       "unprotectedarticle": "ยกเลิกการล็อกจาก \"[[$1]]\"",
+       "movedarticleprotection": "ย้ายการตั้งค่าการล็อกจาก \"[[$2]]\" ไป \"[[$1]]\"",
+       "protect-title": "à¹\80à¸\9bลีà¹\88ยà¸\99ระà¸\94ัà¸\9aà¸\81ารลà¹\87อà¸\81สำหรัà¸\9a \"$1\"",
        "protect-title-notallowed": "ดูระดับการล็อกของ \"$1\"",
-       "prot_1movedto2": "[[$1]] ถูกเปลี่ยนชื่อเป็น [[$2]]",
+       "prot_1movedto2": "เปลี่ยนชื่อ [[$1]] เป็น [[$2]]",
        "protect-badnamespace-title": "เนมสเปซล็อกไม่ได้",
-       "protect-badnamespace-text": "หà¸\99à¹\89าà¹\83à¸\99à¹\80à¸\99มสà¹\80à¸\9bà¸\8bà¸\99ีà¹\89à¹\84มà¹\88สามารà¸\96à¸\9bà¹\89อà¸\87à¸\81ัà¸\99ได้",
+       "protect-badnamespace-text": "ลà¹\87อà¸\81หà¸\99à¹\89าà¹\83à¸\99à¹\80à¸\99มสà¹\80à¸\9bà¸\8bà¸\99ีà¹\89à¹\84มà¹\88ได้",
        "protect-norestrictiontypes-text": "หน้านี้ไม่สามารถถูกล็อก เพราะไม่มีประเภทการจำกัดที่ใช้ได้",
        "protect-norestrictiontypes-title": "หน้าที่ล็อกไม่ได้",
        "protect-legend": "ยืนยันการล็อก",
        "protect_expiry_invalid": "เวลาหมดอายุไม่ถูกต้อง",
        "protect_expiry_old": "เวลาหมดอายุผ่านมาแล้ว",
        "protect-unchain-permissions": "ปลดล็อกตัวเลือกการล็อกอื่น ๆ",
-       "protect-text": "ที่นี่คุณสามารถดูและเปลี่ยนแปลงระดับการล็อกของหน้า '''$1''' ได้",
-       "protect-locked-blocked": "à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99ระà¸\94ัà¸\9aà¸\81ารลà¹\87อà¸\81หà¸\99à¹\89าà¸\82à¸\93ะà¸\97ีà¹\88à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81à¹\84à¸\94à¹\89 à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¸\82อà¸\87หà¸\99à¹\89า '''$1''' คือ:",
-       "protect-locked-dblock": "à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99ระà¸\94ัà¸\9aà¸\81ารลà¹\87อà¸\81à¹\84à¸\94à¹\89à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¸\90าà¸\99à¸\82à¹\89อมูลà¸\96ูà¸\81ลà¹\87อà¸\81 à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¸\82อà¸\87หà¸\99à¹\89า '''$1''' คือ:",
-       "protect-locked-access": "à¸\9aัà¸\8dà¸\8aีà¸\82อà¸\87à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89à¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87ระà¸\94ัà¸\9aà¸\81ารลà¹\87อà¸\81หà¸\99à¹\89า à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¸\82อà¸\87หà¸\99à¹\89า '''$1''' คือ:",
-       "protect-cascadeon": "หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¹\80à¸\9bà¹\87à¸\99สà¹\88วà¸\99หà¸\99ึà¹\88à¸\87à¸\82อà¸\87{{PLURAL:$1|หน้า|หน้า}}ที่เปิดการล็อกแบบสืบทอด\nการเปลี่ยนระดับการล็อกของหน้านี้จะไม่มีผลต่อการล็อกแบบสืบทอด",
+       "protect-text": "ที่นี่คุณสามารถดูและเปลี่ยนแปลงระดับการล็อกของหน้า <strong>$1</strong> ได้",
+       "protect-locked-blocked": "à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99ระà¸\94ัà¸\9aà¸\81ารลà¹\87อà¸\81หà¸\99à¹\89าà¸\82à¸\93ะà¸\96ูà¸\81à¸\9aลà¹\87อà¸\81à¹\84à¸\94à¹\89 \nà¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¸\82อà¸\87หà¸\99à¹\89า <strong>$1</strong> คือ:",
+       "protect-locked-dblock": "à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99ระà¸\94ัà¸\9aà¸\81ารลà¹\87อà¸\81à¹\84à¸\94à¹\89à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¸\90าà¸\99à¸\82à¹\89อมูลà¸\81ำลัà¸\87à¸\96ูà¸\81ลà¹\87อà¸\81 \nà¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¸\82อà¸\87หà¸\99à¹\89า <strong>$1</strong> คือ:",
+       "protect-locked-access": "à¸\9aัà¸\8dà¸\8aีà¸\82อà¸\87à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87ระà¸\94ัà¸\9aà¸\81ารลà¹\87อà¸\81หà¸\99à¹\89า \nà¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¸\82อà¸\87หà¸\99à¹\89า <strong>$1</strong> คือ:",
+       "protect-cascadeon": "à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81รวมอยูà¹\88à¹\83à¸\99{{PLURAL:$1|หน้า|หน้า}}ที่เปิดการล็อกแบบสืบทอด\nการเปลี่ยนระดับการล็อกของหน้านี้จะไม่มีผลต่อการล็อกแบบสืบทอด",
        "protect-default": "อนุญาตผู้ใช้ทั้งหมด",
        "protect-fallback": "อนุญาตเฉพาะผู้ใช้ที่มีสิทธิ \"$1\"",
        "protect-level-autoconfirmed": "อนุญาตเฉพาะผู้ใช้ยืนยันอัตโนมัติ",
        "protect-expiring": "หมดอายุ $1 (UTC)",
        "protect-expiring-local": "หมดอายุ $1",
        "protect-expiry-indefinite": "ไม่มีกำหนด",
-       "protect-cascade": "ล็อกหน้าที่เป็นส่วนหนึ่งของหน้านี้ (ล็อกแบบสืบทอด)",
-       "protect-cantedit": "คุณไม่สามารถเปลี่ยนระดับการล็อกของหน้านี้ เพราะคุณไม่ได้รับอนุญาตให้แก้ไขระดับการล็อก",
-       "protect-othertime": "ระยะเวลาอื่น:",
-       "protect-othertime-op": "ระยะเวลาอื่น",
-       "protect-existing-expiry": "ระยะเวลาการป้องกัน: $3, $2",
+       "protect-cascade": "ล็อกหน้าที่เป็นรวมอยู่ในหน้านี้ (ล็อกแบบสืบทอด)",
+       "protect-cantedit": "คุณไม่สามารถเปลี่ยนระดับการล็อกของหน้านี้ เพราะคุณไม่มีสิทธิแก้ไข",
+       "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** หน้าที่มีการเข้าชมมาก",
-       "protect-edit-reasonlist": "สาà¹\80หà¸\95ุà¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99การแก้ไข",
+       "protect-edit-reasonlist": "สาà¹\80หà¸\95ุà¸\81ารลà¹\87อà¸\81การแก้ไข",
        "protect-expiry-options": "1 ชั่วโมง:1 hour,1 วัน:1 day,1 สัปดาห์:1 week,2 สัปดาห์:2 weeks,1 เดือน:1 month,3 เดือน:3 months,6 เดือน:6 months,1 ปี:1 year,ไม่มีกำหนด:infinite",
-       "restriction-type": "อà¸\99ุà¸\8dาà¸\95",
-       "restriction-level": "ระà¸\94ัà¸\9aà¸\81ารลà¹\87อà¸\81",
+       "restriction-type": "à¸\81ารอà¸\99ุà¸\8dาà¸\95:",
+       "restriction-level": "ระà¸\94ัà¸\9aà¸\81ารà¸\88ำà¸\81ัà¸\94:",
        "minimum-size": "ขนาดอย่างน้อย",
        "maximum-size": "ขนาดอย่างมาก",
        "pagesize": "(ไบต์)",
        "restriction-level-all": "ทุกระดับ",
        "undelete": "ดูหน้าที่ถูกลบ",
        "undeletepage": "ดูและกู้คืนหน้าที่ถูกลบ",
-       "undeletepagetitle": "'''ต่อไปนี้เป็นรุ่นการแก้ไขที่ถูกลบของ [[:$1|$1]]'''",
+       "undeletepagetitle": "<strong>ต่อไปนี้เป็นรุ่นการแก้ไขที่ถูกลบของ [[:$1|$1]]</strong>",
        "viewdeletedpage": "ดูหน้าที่ถูกลบ",
-       "undeletepagetext": "{{PLURAL:$1||$1 }}หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\96ูà¸\81ลà¸\9aà¹\84à¸\9bà¹\81ลà¹\89ว à¹\81à¸\95à¹\88à¹\80à¸\99ืà¹\89อหายัà¸\87à¸\84à¸\87อยูà¹\88à¹\83à¸\99à¸\81รุà¹\81ละสามารà¸\96à¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\94à¹\89 \nà¸\81รุอาà¸\88à¸\96ูà¸\81ลà¸\9aà¹\80à¸\9bà¹\87à¸\99ระยะà¹\84à¸\94à¹\89",
-       "undelete-fieldset-title": "กู้คืนรุ่น",
-       "undeleteextrahelp": "à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¸\81ูà¹\89à¸\9bระวัà¸\95ิà¸\82อà¸\87หà¸\99à¹\89าà¸\84ืà¸\99à¸\97ัà¹\89à¸\87หมà¸\94 à¹\84มà¹\88à¸\95à¹\89อà¸\87à¹\80ลือà¸\81à¸\81ลà¹\88อà¸\87à¹\83à¸\94à¹\80ลย à¹\81ลà¹\89วà¸\81à¸\94à¸\9bุà¹\88ม '''''à¸\81ูà¹\89à¸\84ืà¸\99'''''\nà¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¸\81ูà¹\89à¸\9bระวัà¸\95ิà¸\84ืà¸\99à¹\80à¸\89à¸\9eาะà¸\9aาà¸\87สà¹\88วà¸\99 à¹\83หà¹\89à¹\80ลือà¸\81à¸\81ลà¹\88อà¸\87à¸\97ีà¹\88มีà¸\9bระวัà¸\95ิสà¹\88วà¸\99à¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¸\81ูà¹\89 à¹\81ลà¹\89วà¸\81à¸\94'''''à¸\81ูà¹\89à¸\84ืà¸\99'''''\nà¸\81à¸\94 '''''ลà¹\89าà¸\87à¸\84à¹\88า''''' à¹\80à¸\9eืà¹\88อลà¸\9aà¸\84à¹\88าà¹\83à¸\99à¸\81ลà¹\88อà¸\87à¸\84วามà¹\80หà¹\87à¸\99à¹\81ละà¸\81ลà¹\88อà¸\87à¸\95ัวà¹\80ลือà¸\81à¸\97ัà¹\89à¸\87หมà¸\94",
-       "undeleterevisions": "$1 à¸£à¸¸à¹\88à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\96ูà¸\81à¹\80à¸\81à¹\87à¸\9aà¹\84วà¹\89",
-       "undeletehistory": "à¹\80มืà¹\88อà¸\84ุà¸\93à¸\81ูà¹\89หà¸\99à¹\89าà¹\83à¸\94หà¸\99à¹\89าหà¸\99ึà¹\88à¸\87 à¸£à¸¸à¹\88à¸\99à¸\97ัà¹\89à¸\87หมà¸\94à¸\88ะà¸\96ูà¸\81à¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\9bยัà¸\87à¸\9bระวัà¸\95ิ à¸«à¸²à¸\81มีหà¸\99à¹\89าà¹\83หมà¹\88à¹\83à¸\99à¸\8aืà¹\88อà¹\80à¸\94ียวà¸\81ัà¸\99à¸\96ูà¸\81สรà¹\89าà¸\87à¸\82ึà¹\89à¸\99หลัà¸\87à¸\88าà¸\81à¸\81ารลà¸\9a à¸£à¸¸à¹\88à¸\99à¸\97ีà¹\88à¸\81ูà¹\89à¸\84ืà¸\99à¸\99ัà¹\89à¸\99à¸\88ะà¸\9bราà¸\81à¸\8fà¹\83à¸\99à¸\9bระวัà¸\95ิà¸\97ีà¹\88มีมาà¸\81à¹\88อà¸\99",
-       "undeleterevdel": "à¸\88ะà¸\81ูà¹\89à¸\84ืà¸\99à¹\84มà¹\88à¹\84à¸\94à¹\89หาà¸\81à¸\81ารà¸\81ูà¹\89à¸\84ืà¸\99à¸\99ัà¹\89à¸\99สà¹\88à¸\87à¸\9cลà¹\83หà¹\89รุà¹\88à¸\99ลà¹\88าสุà¸\94à¸\82อà¸\87หà¸\99à¹\89าหรือà¹\84à¸\9fลà¹\8cà¸\96ูà¸\81ลà¸\9aà¹\84à¸\9bà¸\9aาà¸\87สà¹\88วà¸\99 \nà¹\83à¸\99à¸\81รà¸\93ีà¹\80à¸\8aà¹\88à¸\99à¸\99ัà¹\89à¸\99 à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¹\84มà¹\88à¹\80ลือà¸\81หรือà¹\81สà¸\94à¸\87รุà¹\88à¸\99à¹\83หมà¹\88สุà¸\94à¸\97ีà¹\88à¸\96ูà¸\81ลà¸\9aà¹\84à¸\9bà¸\81à¹\88อà¸\99",
-       "undeletehistorynoadmin": "หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¸\9aà¹\84à¸\9bà¹\81ลà¹\89ว\nมีสาà¹\80หà¸\95ุà¸\81ารลà¸\9aà¹\81สà¸\94à¸\87à¹\84วà¹\89à¹\83à¸\99à¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ยà¹\88อà¸\82à¹\89าà¸\87ลà¹\88าà¸\87 à¸£à¹\88วมà¸\81ัà¸\9aรายละà¹\80อียà¸\94à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¹\80à¸\84ยà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\99ีà¹\89à¸\81à¹\88อà¸\99ลà¸\9a\nà¸\82à¹\89อà¸\84วามà¹\81à¸\97à¹\89à¸\88ริà¸\87à¸\82อà¸\87รุà¹\88à¸\99à¸\97ีà¹\88à¸\96ูà¸\81ลà¸\9aà¸\94ูà¹\84à¸\94à¹\89à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9a",
+       "undeletepagetext": "{{PLURAL:$1||$1 }}หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\96ูà¸\81ลà¸\9aà¹\81ลà¹\89ว à¹\81à¸\95à¹\88à¹\80à¸\99ืà¹\89อหายัà¸\87à¸\84à¸\87อยูà¹\88à¹\83à¸\99หà¸\99à¹\88วยà¹\80à¸\81à¹\87à¸\9aà¸\96าวรà¹\81ละสามารà¸\96à¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\94à¹\89 \nหà¸\99à¹\88วยà¹\80à¸\81à¹\87à¸\9aà¸\96าวรอาà¸\88à¸\96ูà¸\81ลà¸\9aà¹\80à¸\9bà¹\87à¸\99ระยะ",
+       "undelete-fieldset-title": "กู้คืนรุ่นปรับปรุง",
+       "undeleteextrahelp": "à¹\83à¸\99à¸\81ารà¸\81ูà¹\89à¸\9bระวัà¸\95ิà¸\82อà¸\87หà¸\99à¹\89าà¸\84ืà¸\99à¸\97ัà¹\89à¸\87หมà¸\94 à¹\83หà¹\89à¹\80วà¹\89à¸\99à¸\97ุà¸\81à¸\81ลà¹\88อà¸\87à¹\81ละà¸\84ลิà¸\81 <strong><em>{{int:undeletebtn}}</em></strong>\nà¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¸\81ูà¹\89à¸\9bระวัà¸\95ิà¸\84ืà¸\99à¹\80à¸\89à¸\9eาะà¸\9aาà¸\87สà¹\88วà¸\99 à¹\83หà¹\89à¹\80ลือà¸\81à¸\81ลà¹\88อà¸\87à¸\97ีà¹\88มีà¸\9bระวัà¸\95ิสà¹\88วà¸\99à¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\81ละà¸\84ลิà¸\81 <strong><em>{{int:undeletebtn}}</em></strong>",
+       "undeleterevisions": "$1 à¸£à¸¸à¹\88à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\96ูà¸\81à¹\80à¸\81à¹\87à¸\9aà¸\96าวร",
+       "undeletehistory": "à¹\80มืà¹\88อà¸\84ุà¸\93à¸\81ูà¹\89หà¸\99à¹\89าà¸\84ืà¸\99 à¸£à¸¸à¹\88à¸\99à¸\97ัà¹\89à¸\87หมà¸\94à¸\88ะà¸\96ูà¸\81à¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\9bยัà¸\87à¸\9bระวัà¸\95ิ \nหาà¸\81มีà¸\81ารสรà¹\89าà¸\87หà¸\99à¹\89าà¹\83หมà¹\88à¸\8aืà¹\88อà¹\80à¸\94ียวà¸\81ัà¸\99หลัà¸\87à¸\81ารลà¸\9a à¸£à¸¸à¹\88à¸\99à¸\97ีà¹\88à¸\81ูà¹\89à¸\84ืà¸\99à¸\99ัà¹\89à¸\99à¸\88ะà¸\9bราà¸\81à¸\8fà¹\83à¸\99à¸\9bระวัà¸\95ิà¸\81à¹\88อà¸\99หà¸\99à¹\89า",
+       "undeleterevdel": "à¸\88ะà¹\84มà¹\88à¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¸\81ูà¹\89à¸\84ืà¸\99หาà¸\81สà¹\88à¸\87à¸\9cลà¹\83หà¹\89รุà¹\88à¸\99à¸\9aà¸\99สุà¸\94à¸\82อà¸\87หà¸\99à¹\89าหรือà¹\84à¸\9fลà¹\8cà¸\96ูà¸\81ลà¸\9aà¸\9aาà¸\87สà¹\88วà¸\99\nà¹\83à¸\99à¸\81รà¸\93ีà¹\80à¸\8aà¹\88à¸\99à¸\99ัà¹\89à¸\99 à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¹\84มà¹\88à¹\80ลือà¸\81หรือà¹\81สà¸\94à¸\87รุà¹\88à¸\99à¸\97ีà¹\88à¸\96ูà¸\81ลà¸\9aà¹\83หมà¹\88สุà¸\94",
+       "undeletehistorynoadmin": "หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¸\9aà¹\81ลà¹\89ว\nสาà¹\80หà¸\95ุà¸\81ารลà¸\9aà¹\81สà¸\94à¸\87à¹\83à¸\99à¸\84วามยà¹\88อà¸\94à¹\89าà¸\99ลà¹\88าà¸\87 à¸£à¹\88วมà¸\81ัà¸\9aรายละà¹\80อียà¸\94à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¹\80à¸\84ยà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\99ีà¹\89à¸\81à¹\88อà¸\99ลà¸\9a\nà¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¸\97ีà¹\88à¸\94ูà¸\82à¹\89อà¸\84วามà¹\81à¸\97à¹\89à¸\88ริà¸\87à¸\82อà¸\87รุà¹\88à¸\99à¸\97ีà¹\88à¸\96ูà¸\81ลà¸\9aà¹\80หลà¹\88าà¸\99ีà¹\89à¹\84à¸\94à¹\89",
        "undelete-revision": "รุ่นที่ถูกลบของหน้า $1 (ตั้งแต่ $4 เมื่อ $5) โดย $3:",
        "undeleterevision-missing": "รุ่นไม่ถูกต้องหรือสูญหาย\nคุณอาจมีลิงก์เสีย หรือรุ่นอาจถูกกู้คืนหรือนำออกจากกรุ",
        "undelete-nodiff": "ไม่พบรุ่นก่อนหน้า",
        "undeleteinvert": "กลับการเลือก",
        "undeletecomment": "เหตุผล:",
        "undeletedrevisions": "กู้คืนการแก้ไข $1 รุ่นแล้ว",
-       "undeletedrevisions-files": "$1 รุ่น และ $2 ไฟล์ถูกกู้คืน",
-       "undeletedfiles": "$1 ไฟล์ถูกกู้คืน",
+       "undeletedrevisions-files": "กู้คืน $1 รุ่นและ $2 ไฟล์แล้ว",
+       "undeletedfiles": "กู้คืน $1 ไฟล์แล้ว",
        "cannotundelete": "การกู้คืนล้มเหลว:\n$1",
-       "undeletedpage": "'''$1 ถูกกู้คืน'''\n\nดู[[Special:Log/delete|ปูมการลบ]] สำหรับรายชื่อการลบและการกู้คืนล่าสุด",
+       "undeletedpage": "<strong>กู้คืน $1 แล้ว</strong>\n\nดู[[Special:Log/delete|ปูมการลบ]] สำหรับบันทึกรายชื่อการลบและการกู้คืนล่าสุด",
        "undelete-header": "ดู [[Special:Log/delete|ปูมการลบ]] สำหรับหน้าที่ถูกลบล่าสุด",
        "undelete-search-title": "ค้นหาหน้าที่ถูกลบ",
        "undelete-search-box": "ค้นหาหน้าที่ถูกลบ",
-       "undelete-search-prefix": "à¸\84à¹\89à¸\99หาหน้าที่ขึ้นต้นด้วย:",
+       "undelete-search-prefix": "à¹\81สà¸\94à¸\87หน้าที่ขึ้นต้นด้วย:",
        "undelete-search-submit": "ค้นหา",
-       "undelete-no-results": "à¹\84มà¹\88à¸\9eà¸\9aหà¸\99à¹\89าà¸\97ีà¹\88à¸\95รà¸\87à¸\81ัà¸\99à¹\83à¸\99à¸\81รุการลบ",
+       "undelete-no-results": "à¹\84มà¹\88à¸\9eà¸\9aหà¸\99à¹\89าà¸\95รà¸\87à¸\81ัà¸\99à¹\83à¸\99หà¸\99à¹\88วยà¹\80à¸\81à¹\87à¸\9aà¸\96าวรการลบ",
        "undelete-filename-mismatch": "ไม่สามารถกู้คืนรุ่นไฟล์ที่มีตราเวลา $1: ชื่อไฟล์ไม่ตรง",
        "undelete-bad-store-key": "ไม่สามารถกู้คืนรุ่นไฟล์ที่มีตราเวลา $1: ไฟล์สูญหายก่อนถูกลบ",
-       "undelete-cleanup-error": "à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารลà¸\9aà¹\84à¸\9fลà¹\8cà¸\81รุà¸\97ีà¹\88ไม่ใช้แล้ว \"$1\"",
-       "undelete-missing-filearchive": "à¹\84มà¹\88สามารà¸\96à¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\9fลà¹\8cà¹\80à¸\81à¹\88าหมายà¹\80ลà¸\82 $1 à¹\80à¸\9eราะà¹\84มà¹\88มีà¸\82à¹\89อมูลà¹\83à¸\99à¸\90าà¸\99à¸\82à¹\89อมูล \nà¹\84à¸\9fลà¹\8cอาà¸\88à¸\96ูà¸\81à¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\9bแล้ว",
-       "undelete-error": "à¹\80à¸\81ิà¸\94ข้อผิดพลาดในการกู้คืนหน้า",
-       "undelete-error-short": "à¹\80à¸\81ิà¸\94ข้อผิดพลาดในการกู้คืนไฟล์: $1",
+       "undelete-cleanup-error": "มีà¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารลà¸\9aà¹\84à¸\9fลà¹\8cà¹\80à¸\81à¹\87à¸\9aà¸\96าวรไม่ใช้แล้ว \"$1\"",
+       "undelete-missing-filearchive": "à¹\84มà¹\88สามารà¸\96à¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\9fลà¹\8cà¹\80à¸\81à¹\87à¸\9aà¸\96าวรหมายà¹\80ลà¸\82 $1 à¹\80à¸\9eราะà¹\84มà¹\88อยูà¹\88à¹\83à¸\99à¸\90าà¸\99à¸\82à¹\89อมูล \nà¹\84à¸\9fลà¹\8cอาà¸\88à¸\96ูà¸\81à¸\81ูà¹\89à¸\84ืà¸\99แล้ว",
+       "undelete-error": "มีข้อผิดพลาดในการกู้คืนหน้า",
+       "undelete-error-short": "มีข้อผิดพลาดในการกู้คืนไฟล์: $1",
        "undelete-error-long": "เกิดข้อผิดพลาดขณะกู้คืนไฟล์:\n\n$1",
        "undelete-show-file-confirm": "คุณแน่ใจหรือว่าต้องการดูรุ่นที่ถูกลบของไฟล์ \"<nowiki>$1</nowiki>\" ตั้งแต่ $2 เมื่อ $3",
        "undelete-show-file-submit": "ใช่",
        "sp-contributions-newbies-sub": "สำหรับบัญชีใหม่",
        "sp-contributions-newbies-title": "เรื่องที่เขียนโดยบัญชีใหม่",
        "sp-contributions-blocklog": "ปูมการบล็อก",
-       "sp-contributions-deleted": "การแก้ไขที่ถูกลบ",
+       "sp-contributions-suppresslog": "ระงับเรื่องที่ผู้ใช้เขียน",
+       "sp-contributions-deleted": "การแก้ไขของผู้ใช้ที่ถูกลบ",
        "sp-contributions-uploads": "อัปโหลด",
        "sp-contributions-logs": "ปูม",
        "sp-contributions-talk": "พูดคุย",
-       "sp-contributions-userrights": "จัดการสิทธิผู้ใช้",
-       "sp-contributions-blocked-notice": "à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีนี้ถูกบล็อก\nปูมการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:",
+       "sp-contributions-userrights": "à¸\81ารà¸\88ัà¸\94à¸\81ารสิà¸\97à¸\98ิà¸\9cูà¹\89à¹\83à¸\8aà¹\89",
+       "sp-contributions-blocked-notice": "à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89นี้ถูกบล็อก\nปูมการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:",
        "sp-contributions-blocked-notice-anon": "ปัจจุบันเลขที่อยู่ไอพีนี้ถูกบล็อก\nปูมการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:",
        "sp-contributions-search": "ค้นหาการแก้ไข",
        "sp-contributions-username": "เลขที่อยู่ไอพีหรือชื่อผู้ใช้:",
        "sp-contributions-newonly": "แสดงเฉพาะการแก้ไขที่เป็นการสร้างหน้า",
        "sp-contributions-submit": "ค้นหา",
        "whatlinkshere": "หน้าที่ลิงก์มา",
-       "whatlinkshere-title": "หน้าที่ลิงก์มายัง \"$1\"",
+       "whatlinkshere-title": "หน้าที่ลิงก์มา \"$1\"",
        "whatlinkshere-page": "หน้า:",
-       "linkshere": "หน้าต่อไปนี้ลิงก์มายัง '''[[:$1]]''':",
-       "nolinkshere": "ไม่มีหน้าใดลิงก์มาที่ '''[[:$1]]'''",
-       "nolinkshere-ns": "ไม่มีหน้าใดลิงก์มาที่'''[[:$1]]''' ในเนมสเปซที่เลือกไว้",
+       "linkshere": "หน้าต่อไปนี้ลิงก์มา <strong>[[:$1]]</strong>:",
+       "nolinkshere": "ไม่มีหน้าใดลิงก์มา <strong>[[:$1]]</strong>",
+       "nolinkshere-ns": "ไม่มีหน้าใดลิงก์มา <strong>[[:$1]]</strong> ในเนมสเปซที่เลือก",
        "isredirect": "หน้าเปลี่ยนทาง",
        "istemplate": "รวมอยู่",
        "isimage": "ลิงก์ไฟล์",
-       "whatlinkshere-prev": "{{PLURAL:$1|ก่อนหน้า|ก่อนหน้า $1 หน้า}}",
-       "whatlinkshere-next": "{{PLURAL:$1|ถัดไป|ถัดไป $1 หน้า}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|ก่อนหน้า|ก่อนหน้า $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|ถัดไป|ถัดไป $1}}",
        "whatlinkshere-links": "← ลิงก์",
        "whatlinkshere-hideredirs": "$1หน้าเปลี่ยนทาง",
        "whatlinkshere-hidetrans": "$1 ถูกรวมอยู่",
        "blockip": "บล็อกผู้ใช้",
        "blockip-legend": "บล็อกผู้ใช้",
        "blockiptext": "ใช้แบบด้านล่างเพื่อบล็อกสิทธิเข้าถึงการเขียนของเลขที่อยู่ไอพีหรือชื่อผู้ใช้โดยเจาะจง การบล็อกนี้ควรดำเนินการเพื่อป้องกันการก่อกวนเท่านั้น และให้สอดคล้องกับ[[{{MediaWiki:Policy-url}}|นโยบาย]]\nกรอกเหตุผลโดยเจาะจงด้านล่าง (เช่น อ้างถึงหน้าที่ถูกก่อกวน)",
-       "ipaddressorusername": "เลขที่อยู่ไอพีหรือชื่อผู้ใช้",
-       "ipbexpiry": "หมดอายุ",
+       "ipaddressorusername": "เลขที่อยู่ไอพีหรือชื่อผู้ใช้:",
+       "ipbexpiry": "หมดอายุ:",
        "ipbreason": "เหตุผล:",
        "ipbreason-dropdown": "*สาเหตุการบล็อกทั่วไป\n** ใส่ข้อมูลเท็จ\n** ลบเนื้อหาในหน้าออก\n** ใส่ลิงก์สแปม\n** ใส่ข้อความไร้สาระ/ขยะเข้ามา\n** พฤติกรรมข่มขู่/รังควาน\n** ใช้หลายบัญชีในทางที่ผิด\n** ชื่อผู้ใช้ที่ไม่อาจยอมรับได้",
        "ipb-hardblock": "ป้องกันไม่ให้ผู้ใช้ล็อกอินแก้ไขจากเลขที่อยู่ไอพีนี้",
        "ipbemailban": "ป้องกันมิให้ผู้ใช้ส่งอีเมล",
        "ipbenableautoblock": "บล็อกเลขที่อยู่ไอพีล่าสุดที่ผู้ใช้นี้ใช้ ทั้งทุกเลขที่อยู่ไอพีที่ผู้นั้นพยายามใช้แก้ไขโดยอัตโนมัติ",
        "ipbsubmit": "บล็อกผู้ใช้นี้",
-       "ipbother": "เวลาอื่น",
+       "ipbother": "เวลาอื่น:",
        "ipboptions": "2 ชั่วโมง:2 hours,1 วัน:1 day,3 วัน:3 days,1 สัปดาห์:1 week,2 สัปดาห์:2 weeks,1 เดือน:1 month,3 เดือน:3 months,6 เดือน:6 months,1 ปี:1 year,ไม่มีกำหนด:infinite",
-       "ipbhidename": "à¸\8bà¹\88อà¸\99à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\88าà¸\81à¸\9bูมและรายการต่าง ๆ",
-       "ipbwatchuser": "à¹\80à¸\9dà¹\89าà¸\94ูหà¸\99à¹\89าà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\81ละหà¸\99à¹\89าà¸\84ุยà¸\81ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89รายà¸\99ีà¹\89",
+       "ipbhidename": "à¸\8bà¹\88อà¸\99à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\88าà¸\81à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82และรายการต่าง ๆ",
+       "ipbwatchuser": "เฝ้าดูหน้าผู้ใช้และหน้าคุยกับผู้ใช้ของผู้ใช้นี้",
        "ipb-disableusertalk": "ป้องกันไม่ให้ผู้ใช้นี้แก้ไขหน้าคุยกับผู้ใช้ของตัวเองขณะถูกบล็อก",
        "ipb-change-block": "บล็อกผู้ใช้อีกครั้งด้วยการตั้งค่าเหล่านี้",
        "ipb-confirm": "ยืนยันการบล็อก",
        "badipaddress": "เลขที่อยู่ไอพีไม่ถูกต้อง",
        "blockipsuccesssub": "บล็อกสำเร็จ",
-       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] ได้ถูกบล็อกแล้ว<br />\nดู[[Special:BlockList|รายการบล็อก]]เพื่อทบทวนการบล็อก",
+       "blockipsuccesstext": "บล็อก [[Special:Contributions/$1|$1]] แล้ว<br />\nดู[[Special:BlockList|รายการบล็อก]]เพื่อทบทวนการบล็อก",
        "ipb-blockingself": "คุณกำลังบล็อกตัวเอง! แน่ใจแล้วหรือว่าต้องการทำอย่างนั้น",
        "ipb-confirmhideuser": "คุณกำลังบล็อกผู้ใช้โดยเป็นผู้ใช้ \"ซ่อนผู้ใช้\" ซึ่งจะระงับชื่อผู้ใช้ในรายการและหน่วยปูมทั้งหมด คุณแน่ใจหรือว่าต้องการดำเนินการเช่นนั้น",
-       "ipb-confirmaction": "หากคุณแน่ใจว่าคุณต้องการดำเนินการ โปรดเลือกเขตข้อมูล \"{{int:ipb-confirm}}\"  ที่อยู่ล่างสุด",
+       "ipb-confirmaction": "หากคุณแน่ใจว่าคุณต้องการดำเนินการ โปรดเลือกเขตข้อมูล \"{{int:ipb-confirm}}\" ที่อยู่ล่างสุด",
        "ipb-edit-dropdown": "แก้ไขสาเหตุการบล็อก",
        "ipb-unblock-addr": "ปลดบล็อก $1",
        "ipb-unblock": "ปลดบล็อกผู้ใช้หรือเลขที่อยู่ไอพี",
-       "ipb-blocklist": "à¸\94ูà¸\81ารà¸\9aลà¹\87อà¸\81à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99",
-       "ipb-blocklist-contribs": "à¸\9cลà¸\87าà¸\99เขียนโดย $1",
+       "ipb-blocklist": "à¸\94ูà¸\81ารà¸\9aลà¹\87อà¸\81à¸\97ีà¹\88มีอยูà¹\88",
+       "ipb-blocklist-contribs": "à¹\80รืà¹\88อà¸\87à¸\97ีà¹\88เขียนโดย $1",
        "unblockip": "ปลดบล็อกผู้ใช้",
-       "unblockiptext": "à¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9eืà¹\88อà¸\84ืà¸\99สิà¸\97à¸\98ิà¸\81ารà¹\80à¸\82à¹\89าà¸\96ึà¸\87à¸\81ารà¹\80à¸\82ียà¸\99à¹\81à¸\81à¹\88à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eี à¸«à¸£à¸·à¸­à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¹\80à¸\84ยà¸\96ูà¸\81à¸\9aลà¹\87อà¸\81",
+       "unblockiptext": "ใช้แบบด้านล่างเพื่อคืนการเข้าถึงการเขียนแก่เลขที่อยู่ไอพี หรือชื่อผู้ใช้ที่เคยถูกบล็อก",
        "ipusubmit": "ยกเลิกการบล็อกนี้",
-       "unblocked": "[[User:$1|$1]] ถูกปลดบล็อกแล้ว",
-       "unblocked-range": "$1 ถูกปลดบล็อกแล้ว",
-       "unblocked-id": "เลิกบล็อก $1",
+       "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": "ซ่อนบล็อกไอพีเดียว",
+       "blocklist-userblocks": "à¸\8bà¹\88อà¸\99à¸\81ารà¸\9aลà¹\87อà¸\81à¸\9aัà¸\8dà¸\8aี",
+       "blocklist-tempblocks": "à¸\8bà¹\88อà¸\99à¸\81ารà¸\9aลà¹\87อà¸\81à¸\8aัà¹\88วà¸\84ราว",
+       "blocklist-addressblocks": "à¸\8bà¹\88อà¸\99à¸\81ารà¸\9aลà¹\87อà¸\81à¹\84อà¸\9eีà¹\80à¸\94ียว",
        "blocklist-rangeblocks": "ซ่อนการบล็อกช่วง",
        "blocklist-timestamp": "ตราเวลา",
        "blocklist-target": "เป้าหมาย",
        "ipblocklist-otherblocks": "{{PLURAL:$1|การบล็อก}}อื่น",
        "infiniteblock": "ไม่มีกำหนด",
        "expiringblock": "หมดอายุ $1 เวลา $2",
-       "anononlyblock": "à¹\84มà¹\88ลà¹\87อà¸\81อิà¸\99à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99",
-       "noautoblockblock": "ยà¸\81à¹\80ลิà¸\81การบล็อกอัตโนมัติ",
-       "createaccountblock": "ปิดใช้งานการสร้างบัญชีผู้ใช้ใหม่",
+       "anononlyblock": "à¹\80à¸\89à¸\9eาะà¸\99ิรà¸\99าม",
+       "noautoblockblock": "à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99การบล็อกอัตโนมัติ",
+       "createaccountblock": "ปิดใช้งานการสร้างบัญชี",
        "emailblock": "ปิดใช้งานอีเมล",
        "blocklist-nousertalk": "ไม่สามารถแก้ไขหน้าคุยกับผู้ใช้ของตนเอง",
        "ipblocklist-empty": "รายการบล็อกว่าง",
-       "ipblocklist-no-results": "à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีหรือà¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\84มà¹\88à¹\84à¸\94à¹\89ถูกบล็อก",
+       "ipblocklist-no-results": "à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีหรือà¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\82อà¹\84มà¹\88ถูกบล็อก",
        "blocklink": "บล็อก",
-       "unblocklink": "à¹\80ลิà¸\81บล็อก",
+       "unblocklink": "à¸\9bลà¸\94บล็อก",
        "change-blocklink": "เปลี่ยนการบล็อก",
        "contribslink": "เรื่องที่เขียน",
        "emaillink": "ส่งอีเมล",
        "autoblocker": "ถูกบล็อกอัตโนมัติเนื่องจาก \"[[User:$1|$1]]\" ใช้เลขที่อยู่ไอพีของคุณเมื่อเร็ว ๆ นี้\nเหตุผลที่ให้แก่การบล็อก $1 คือ: \"$2\"",
        "blocklogpage": "ปูมการบล็อก",
-       "blocklog-showlog": "à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¸\96ูà¸\81สà¸\81ัà¸\94à¸\81ัà¹\89à¸\99มาà¸\81à¹\88อà¸\99\nà¸\9bูมà¸\81ารสà¸\81ัà¸\94à¸\81ัà¹\89à¸\99แสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:",
-       "blocklog-showsuppresslog": "à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¸\96ูà¸\81สà¸\81ัà¸\94à¸\81ัà¹\89à¸\99à¹\81ละà¸\96ูà¸\81à¸\8bà¹\88อà¸\99มาà¸\81่อน\nปูมการระงับแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:",
-       "blocklogentry": "บล็อก \"[[$1]]\" หมดอายุ $2 $3",
+       "blocklog-showlog": "à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¹\80à¸\84ยà¸\96ูà¸\81à¸\9aลà¹\87อà¸\81\nà¸\9bูมà¸\81ารà¸\9aลà¹\87อà¸\81แสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:",
+       "blocklog-showsuppresslog": "à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81à¹\81ละà¸\8b่อน\nปูมการระงับแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:",
+       "blocklogentry": "บล็อก [[$1]] หมดอายุ $2 $3",
        "reblock-logentry": "เปลี่ยนระดับการบล็อกสำหรับ [[$1]] หมดอายุ $2 $3",
        "blocklogtext": "นี่คือปูมการบล็อกและการเลิกบล็อกผู้ใช้\nการบล็อกที่อยู่ไอพีโดยอัตโนมัติจะไม่แสดงในรายการ\nดู[[Special:BlockList|รายการบล็อกไอพี]]สำหรับการบล็อกและการระงับในปัจจุบัน",
-       "unblocklogentry": "à¹\80ลิà¸\81บล็อก $1",
-       "block-log-flags-anononly": "à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ิรà¸\99ามà¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99",
+       "unblocklogentry": "à¸\9bลà¸\94บล็อก $1",
+       "block-log-flags-anononly": "à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ิรà¸\99าม",
        "block-log-flags-nocreate": "ปิดใช้งานการสร้างบัญชี",
        "block-log-flags-noautoblock": "ปิดใช้งานการบล็อกอัตโนมัติ",
        "block-log-flags-noemail": "ปิดใช้งานอีเมล",
        "block-log-flags-nousertalk": "ไม่สามารถแก้ไขหน้าพูดคุยของตนเอง",
        "block-log-flags-angry-autoblock": "การบล็อกอัตโนมัติขั้นสูงเปิดใช้งาน",
        "block-log-flags-hiddenname": "ชื่อผู้ใช้ถูกซ่อน",
-       "range_block_disabled": "à¸\81ารà¸\9aลà¹\87อà¸\81à¸\8aà¹\88วà¸\87à¹\84อà¸\9eีà¸\82อà¸\87à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¸\96ูà¸\81à¸\9bิà¸\94à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99",
-       "ipb_expiry_invalid": "วัà¸\99หมดอายุไม่ถูกต้อง",
+       "range_block_disabled": "การบล็อกช่วงไอพีของผู้ดูแลระบบถูกปิดใช้งาน",
+       "ipb_expiry_invalid": "à¹\80วลาหมดอายุไม่ถูกต้อง",
        "ipb_expiry_temp": "การบล็อกชื่อผู้ใช้ที่ซ่อนต้องเป็นการบล็อกถาวร",
        "ipb_hide_invalid": "ไม่สามารถยับยั้งชื่อผู้ใช้นี้ได้ อาจเพราะมีการแก้ไขมากกว่า $1 การแก้ไข",
-       "ipb_already_blocked": "\"$1\" à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81à¹\84à¸\9bà¹\81ลà¹\89วà¸\81à¹\88อà¸\99หà¸\99à¹\89าà¸\99ีà¹\89",
+       "ipb_already_blocked": "\"$1\" à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81à¹\81ลà¹\89ว",
        "ipb-needreblock": "$1 ถูกบล็อกแล้ว คุณต้องการเปลี่ยนการตั้งค่าหรือไม่",
-       "ipb-otherblocks-header": "{{PLURAL:$1|การบล็อก}}อื่น ๆ",
-       "unblock-hideuser": "à¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96ยà¸\81à¹\80ลิà¸\81à¸\81ารà¸\9aลà¹\87อà¸\81à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\87าà¸\99รายนี้ได้ เพราะชื่อผู้ใช้ถูกซ่อนอยู่",
-       "ipb_cant_unblock": "à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94: à¹\84มà¹\88à¸\9eà¸\9aหมายà¹\80ลà¸\82à¸\9aลà¹\87อà¸\81 $1 à¸\81ารà¸\9aลà¹\87อà¸\81à¸\94ัà¸\87à¸\81ลà¹\88าวอาจถูกปลดบล็อกแล้ว",
-       "ipb_blocked_as_range": "à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94: à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eี $1 à¸¡à¸´à¹\84à¸\94à¹\89à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81à¹\82à¸\94ยà¸\95รà¸\87à¹\81ละà¹\84มà¹\88สามารà¸\96à¸\9bลà¸\94à¸\9aลà¹\87อà¸\81à¹\84à¸\94à¹\89\nอยà¹\88าà¸\87à¹\84รà¸\81à¹\87à¸\95าม à¹\84อà¸\9eีà¸\99ีà¹\89à¸\96ูà¸\81ระà¸\87ัà¸\9aà¹\83à¸\99à¸\90าà¸\99ะà¸\97ีà¹\88à¹\80à¸\9bà¹\87à¸\99สà¹\88วà¸\99หà¸\99ึà¹\88à¸\87à¸\82อà¸\87à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¹\83à¸\99à¸\9eิสัย $2 ซึ่งสามารถปลดบล็อกได้",
+       "ipb-otherblocks-header": "{{PLURAL:$1|การบล็อก}}อื่น",
+       "unblock-hideuser": "à¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96à¸\9bลà¸\94à¸\9aลà¹\87อà¸\81à¸\9cูà¹\89à¹\83à¸\8aà¹\89นี้ได้ เพราะชื่อผู้ใช้ถูกซ่อนอยู่",
+       "ipb_cant_unblock": "à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94: à¹\84มà¹\88à¸\9eà¸\9aà¸\81ารà¸\9aลà¹\87อà¸\81หมายà¹\80ลà¸\82 $1 อาจถูกปลดบล็อกแล้ว",
+       "ipb_blocked_as_range": "à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94: à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eี $1 à¸¡à¸´à¹\84à¸\94à¹\89à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81à¹\82à¸\94ยà¸\95รà¸\87à¹\81ละà¹\84มà¹\88สามารà¸\96à¸\9bลà¸\94à¸\9aลà¹\87อà¸\81à¹\84à¸\94à¹\89\nอยà¹\88าà¸\87à¹\84รà¸\81à¹\87à¸\95าม à¹\84อà¸\9eีà¸\99ีà¹\89à¸\96ูà¸\81ระà¸\87ัà¸\9aà¹\82à¸\94ยà¹\80à¸\9bà¹\87à¸\99สà¹\88วà¸\99หà¸\99ึà¹\88à¸\87à¸\82อà¸\87à¸\8aà¹\88วà¸\87 $2 ซึ่งสามารถปลดบล็อกได้",
        "ip_range_invalid": "พิสัยไอพีไม่ถูกต้อง",
        "ip_range_toolarge": "พิสัยบล็อกที่มีขนาดใหญ่กว่า /$1 จะไม่ได้รับอนุญาต",
        "proxyblocker": "ตัวบล็อกพร็อกซี",
        "unlockdb": "ปลดล็อกฐานข้อมูล",
        "lockdbtext": "เมื่อล็อกฐานข้อมูลจะส่งผลให้ไม่สามารถแก้ไขทุกหน้า หรือแม้แต่เปลี่ยนแปลงการตั้งค่า ตรวจสอบให้แน่ใจว่าต้องการล็อกฐานข้อมูล และอย่าลืมปลดล็อกเมื่อตรวจสอบฐานข้อมูลเรียบร้อย",
        "unlockdbtext": "เมื่อปลดล็อกฐานข้อมูลจะส่งผลให้ ผู้ใช้สามารถเริ่มแก้ไขหน้าได้เหมือนเดิม รวมถึงการตั้งค่าทุกอย่าง ตรวจสอบให้แน่ใจว่าต้องการปลดล็อกฐานข้อมูล",
-       "lockconfirm": "ยืà¸\99ยัà¸\99 ต้องการล็อกฐานข้อมูล",
-       "unlockconfirm": "ยืà¸\99ยัà¸\99 ต้องการปลดล็อกฐานข้อมูล",
+       "lockconfirm": "à¹\83à¸\8aà¹\88 à¸\89ัà¸\99ต้องการล็อกฐานข้อมูล",
+       "unlockconfirm": "à¹\83à¸\8aà¹\88 à¸\89ัà¸\99ต้องการปลดล็อกฐานข้อมูล",
        "lockbtn": "ล็อกฐานข้อมูล",
        "unlockbtn": "ปลดล็อกฐานข้อมูล",
        "locknoconfirm": "ค่าตัวเลือกไม่ได้ถูกเลือก",
        "movenotallowedfile": "คุณไม่มีสิทธิย้ายไฟล์",
        "cant-move-user-page": "คุณไม่มีสิทธิย้ายหน้าผู้ใช้ (แยกจากหน้าย่อย)",
        "cant-move-to-user-page": "คุณไม่มีสิทธิย้ายหน้าใด ๆ ไปเป็นหน้าผู้ใช้ (ยกเว้นหน้าย่อยของผู้ใช้)",
-       "newtitle": "ชื่อเรื่องใหม่:",
+       "newtitle": "à¹\84à¸\9bà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\83หมà¹\88:",
        "move-watch": "เฝ้าดูหน้าต้นทางและหน้าปลายทาง",
        "movepagebtn": "เปลี่ยนชื่อ",
        "pagemovedsub": "เปลี่ยนชื่อสำเร็จ",
-       "movepage-moved": "'''\"$1\" ถูกเปลี่ยนชื่อเป็น \"$2\"'''",
-       "movepage-moved-redirect": "หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\96ูà¸\81สรà¹\89าà¸\87à¸\82ึà¹\89à¸\99",
+       "movepage-moved": "<strong>เปลี่ยนชื่อ \"$1\" เป็น \"$2\" แล้ว</strong>",
+       "movepage-moved-redirect": "สรà¹\89าà¸\87หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¹\81ลà¹\89ว",
        "movepage-moved-noredirect": "การสร้างหน้าเปลี่ยนทางถูกระงับ",
        "articleexists": "หน้าที่ต้องการมีอยู่แล้ว หรือชื่อที่เลือกไม่ถูกต้อง กรุณาเลือกชื่อใหม่",
        "cantmove-titleprotected": "คุณไม่สามารถเปลี่ยนชื่อหน้าเป็นชื่อนี้ได้ เนื่องจากชื่อเรื่องใหม่ถูกป้องกันมิให้สร้าง",
-       "movetalk": "à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\9eรà¹\89อมà¸\81ัà¸\99",
-       "move-subpages": "ยà¹\89ายหà¸\99à¹\89ายà¹\88อยà¸\97ัà¹\89à¸\87หมà¸\94 (มาà¸\81à¸\96ึà¸\87 $1 หน้า)",
-       "move-talk-subpages": "ยà¹\89ายหà¸\99à¹\89ายà¹\88อยà¸\97ัà¹\89à¸\87หมà¸\94à¸\82อà¸\87หà¸\99à¹\89าอภิà¸\9bราย (มาà¸\81à¸\96ึà¸\87 $1 หน้า)",
-       "movepage-page-exists": "หà¸\99à¹\89า $1 à¸¡à¸µà¸­à¸¢à¸¹à¹\88à¹\81ลà¹\89วà¹\81ละà¹\84มà¹\88สามารà¸\96à¹\80à¸\82ียà¸\99à¸\97ัà¸\9aà¹\84à¸\94à¹\89à¹\82à¸\94ยอัตโนมัติ",
-       "movepage-page-moved": "หà¸\99à¹\89า $1 à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\80à¸\9bà¹\87à¸\99 $2",
-       "movepage-page-unmoved": "หà¸\99à¹\89า $1 à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\80à¸\9bà¹\87à¸\99 $2 à¹\84à¸\94à¹\89",
-       "movepage-max-pages": "หà¸\99à¹\89า $1 à¸«à¸\99à¹\89าà¸\96ูà¸\81ยà¹\89ายà¹\84à¸\9b à¸\8bึà¹\88à¸\87มาà¸\81สุà¸\94à¹\81ลà¹\89ว à¹\81ละà¸\88ะà¹\84มà¹\88มีหà¸\99à¹\89าà¹\83à¸\94ยà¹\89ายอัà¸\95à¹\82à¸\99มัà¸\95ิà¹\80à¸\9eิà¹\88ม",
+       "movetalk": "à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\97ีà¹\88สัมà¸\9eัà¸\99à¸\98à¹\8c",
+       "move-subpages": "ยà¹\89ายหà¸\99à¹\89ายà¹\88อยà¸\97ัà¹\89à¸\87หมà¸\94 (มาà¸\81สุà¸\94 $1 หน้า)",
+       "move-talk-subpages": "ยà¹\89ายหà¸\99à¹\89ายà¹\88อยà¸\97ัà¹\89à¸\87หมà¸\94à¸\82อà¸\87หà¸\99à¹\89าอภิà¸\9bราย (มาà¸\81สุà¸\94 $1 หน้า)",
+       "movepage-page-exists": "มีหà¸\99à¹\89า $1 à¸­à¸¢à¸¹à¹\88à¹\81ลà¹\89วà¹\81ละà¹\84มà¹\88สามารà¸\96à¸\9aัà¸\99à¸\97ึà¸\81à¸\97ัà¸\9aอัตโนมัติ",
+       "movepage-page-moved": "à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89า $1 à¹\80à¸\9bà¹\87à¸\99 $2 à¹\81ลà¹\89ว",
+       "movepage-page-unmoved": "à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89า $1 à¹\80à¸\9bà¹\87à¸\99 $2",
+       "movepage-max-pages": "à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89ามาà¸\81สุà¸\94 $1 à¸«à¸\99à¹\89าà¹\81ลà¹\89วà¹\81ละà¸\88ะà¹\84มà¹\88à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¹\80à¸\9eิà¹\88มอีà¸\81อัà¸\95à¹\82à¸\99มัà¸\95ิ",
        "movelogpage": "ปูมการเปลี่ยนชื่อ",
        "movelogpagetext": "ด้านล่างเป็นรายการการเปลี่ยนชื่อทั้งหมด",
        "movesubpage": "{{PLURAL:$1|หน้าย่อย|หน้าย่อย}}",
        "movereason": "เหตุผล:",
        "revertmove": "ย้อน",
        "delete_and_move": "ลบและย้าย",
-       "delete_and_move_text": "== ต้องการลบ ==\nมีหน้าปลายทาง \"[[:$1]]\" แล้ว คุณต้องการลบหน้าดังกล่าวเพื่อสร้างหนทางที่จะย้ายหรือไม่?",
-       "delete_and_move_confirm": "à¹\83à¸\8aà¹\88 à¸\95à¹\89อà¸\87à¸\81ารà¸\88ะลà¸\9aà¹\81ละยà¹\89าย",
-       "delete_and_move_reason": "ลà¸\9aà¹\80à¸\9eืà¹\88อสรà¹\89าà¸\87หà¸\99à¸\97าà¸\87à¸\97ีà¹\88à¸\88ะย้ายจาก \"[[$1]]\"",
-       "selfmove": "à¸\8aืà¹\88อหà¸\99à¹\89าà¸\95à¹\89à¸\99à¸\97าà¸\87à¹\81ละà¸\9bลายà¸\97าà¸\87à¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¹\80à¸\94ียวà¸\81ัà¸\99 à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\84à¸\94à¹\89มาใช้ชื่อเดิมได้",
+       "delete_and_move_text": "== ต้องการลบ ==\nมีหน้าปลายทาง \"[[:$1]]\" แล้ว \nคุณต้องการลบหน้าดังกล่าวเพื่อสร้างหนทางสำหรับการย้ายหรือไม่",
+       "delete_and_move_confirm": "à¹\83à¸\8aà¹\88 à¸¥à¸\9aหà¸\99à¹\89าà¸\99ัà¹\89à¸\99",
+       "delete_and_move_reason": "à¸\96ูà¸\81ลà¸\9aà¹\80à¸\9eืà¹\88อสรà¹\89าà¸\87หà¸\99à¸\97าà¸\87สำหรัà¸\9aà¸\81ารย้ายจาก \"[[$1]]\"",
+       "selfmove": "à¸\8aืà¹\88อหà¸\99à¹\89าà¸\95à¹\89à¸\99à¸\97าà¸\87à¹\81ละà¸\9bลายà¸\97าà¸\87à¹\80หมือà¸\99à¸\81ัà¸\99\nà¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อมาใช้ชื่อเดิมได้",
        "immobile-source-namespace": "ไม่สามารถเปลี่ยนชื่อหน้าในเนมสเปซ \"$1\"",
-       "immobile-target-namespace": "à¹\84มà¹\88สามารà¸\96ยà¹\89ายหà¸\99à¹\89าà¹\84à¸\9bยัà¸\87เนมสเปซ \"$1\" ได้",
-       "immobile-target-namespace-iw": "à¹\84มà¹\88สามารà¸\96ยà¹\89ายà¹\84à¸\9bยัà¸\87หà¸\99à¹\89าà¸\9bลายà¸\97าà¸\87à¸\97ีà¹\88à¹\80à¸\9bà¹\87à¸\99ลิà¸\87à¸\81à¹\8c interwiki à¹\84à¸\94à¹\89",
-       "immobile-source-page": "หน้านี้ไม่สามารถเปลี่ยนชื่อได้",
-       "immobile-target-page": "à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¹\84à¸\9bยัà¸\87à¸\8aืà¹\88อà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\84à¸\94à¹\89",
+       "immobile-target-namespace": "à¹\84มà¹\88สามารà¸\96ยà¹\89ายหà¸\99à¹\89าà¹\80à¸\82à¹\89าเนมสเปซ \"$1\" ได้",
+       "immobile-target-namespace-iw": "ลิà¸\87à¸\81à¹\8cà¸\82à¹\89ามà¹\82à¸\84รà¸\87à¸\81ารมิà¹\83à¸\8aà¹\88à¹\80à¸\9bà¹\89าหมายà¸\97ีà¹\88à¸\96ูà¸\81à¸\95à¹\89อà¸\87à¸\82อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89า",
+       "immobile-source-page": "หน้านี้ไม่สามารถเปลี่ยนชื่อ",
+       "immobile-target-page": "à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¸\9bลายà¸\97าà¸\87à¸\99ัà¹\89à¸\99",
        "imagenocrossnamespace": "ไม่สามารถย้ายไฟล์ไปยังเนมสเปซอื่น",
        "nonfile-cannot-move-to-file": "ไม่สามารถย้ายจากเนมสเปซอื่นมาเป็นเนมสเปซไฟล์",
-       "imagetypemismatch": "à¸\99ามสà¸\81ุลà¸\82อà¸\87à¹\84à¸\9fลà¹\8cà¹\83หมà¹\88à¹\84มà¹\88à¸\95รà¸\87à¸\81ัà¸\9aà¸\8aà¸\99ิà¸\94à¸\82อà¸\87à¹\84à¸\9fลà¹\8c",
+       "imagetypemismatch": "à¸\99ามสà¸\81ุลà¹\84à¸\9fลà¹\8cà¹\83หมà¹\88à¹\84มà¹\88à¸\95รà¸\87à¸\81ัà¸\9aà¸\8aà¸\99ิà¸\94",
        "imageinvalidfilename": "ชื่อไฟล์เป้าหมายไม่ถูกต้อง",
-       "fix-double-redirects": "อัà¸\9bà¹\80à¸\94à¸\95หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\97ุà¸\81หà¸\99à¹\89าà¸\97ีà¹\88à¹\82อà¸\99à¹\84à¸\9bยัà¸\87à¸\8aืà¹\88อเดิม",
+       "fix-double-redirects": "à¸\9bรัà¸\9aà¸\97ุà¸\81หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\97ีà¹\88à¸\8aีà¹\89à¹\84à¸\9bยัà¸\87à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87เดิม",
        "move-leave-redirect": "สร้างหน้าเปลี่ยนทางตามมา",
        "protectedpagemovewarning": "'''คำเตือน:''' หน้านี้ถูกล็อก เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้นที่ย้ายได้\nปูมการป้องกันล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง:",
        "semiprotectedpagemovewarning": "'''หมายเหตุ:''' หน้านี้ถูกล็อก เฉพาะผู้ใช้ลงทะเบียนเท่านั้นที่ย้ายได้\nรายการปูมล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:",
        "allmessagesnotsupportedDB": "หน้านี้ไม่สามารถใช้งานได้เนื่องจาก '''$wgUseDatabaseMessages''' ถูกระงับการใช้งาน",
        "allmessages-filter-legend": "กรอง",
        "allmessages-filter": "กรองตามสถานะที่เลือก:",
-       "allmessages-filter-unmodified": "à¹\84มà¹\88มีà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82",
+       "allmessages-filter-unmodified": "à¹\84มà¹\88à¸\94ัà¸\94à¹\81à¸\9bร",
        "allmessages-filter-all": "ทั้งหมด",
-       "allmessages-filter-modified": "มีà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82",
+       "allmessages-filter-modified": "à¸\94ัà¸\94à¹\81à¸\9bร",
        "allmessages-prefix": "กรองด้วยคำขึ้นต้น:",
        "allmessages-language": "ภาษา:",
        "allmessages-filter-submit": "ไป",
-       "allmessages-filter-translate": "à¸\81ารà¹\81à¸\9bล",
+       "allmessages-filter-translate": "แปล",
        "thumbnail-more": "ขยาย",
        "filemissing": "ไฟล์สูญหาย",
-       "thumbnail_error": "à¹\80à¸\81ิà¸\94à¸\9bัà¸\8dหาà¹\84มà¹\88สามารà¸\96à¸\97ำรูà¸\9bยà¹\88อà¹\84à¸\94à¹\89: $1",
+       "thumbnail_error": "มีà¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารสรà¹\89าà¸\87รูà¸\9bยà¹\88อ: $1",
        "djvu_page_error": "หน้าเดจาวู (DjVu) เกินขนาด",
        "djvu_no_xml": "ไม่สามารถส่งเอกซ์เอ็มแอล (XML) สำหรับไฟล์เดจาวู (DjVu)",
-       "thumbnail_invalid_params": "à¸\9eารามิà¹\80à¸\95อรà¹\8cà¸\82อà¸\87à¸\98ัมà¸\9aà¹\8cà¹\80à¸\99ลไม่ถูกต้อง",
-       "thumbnail_dest_directory": "à¹\84มà¹\88สามารà¸\96สรà¹\89าà¸\87à¹\84à¸\94à¹\80รà¸\81à¸\97อรีภาà¸\9eà¹\84à¸\94à¹\89",
+       "thumbnail_invalid_params": "à¸\9eารามิà¹\80à¸\95อรà¹\8cรูà¸\9bยà¹\88อไม่ถูกต้อง",
+       "thumbnail_dest_directory": "à¹\84มà¹\88สามารà¸\96สรà¹\89าà¸\87สารà¸\9aà¸\9aà¸\9bลายà¸\97าà¸\87",
        "thumbnail_image-type": "ไม่รองรับรูปแบบของไฟล์รูปภาพนี้",
        "thumbnail_gd-library": "การตั้งค่าไลบรารี GD ไม่สมบูรณ์: ไม่พบฟังก์ชัน $1",
-       "thumbnail_image-missing": "à¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¹\80หมือà¸\99à¸\88ะหายà¹\84à¸\9b: $1",
+       "thumbnail_image-missing": "ไฟล์ที่เหมือนหายไป: $1",
        "import": "หน้านำเข้า",
        "importinterwiki": "นำเข้าข้ามวิกิ",
        "import-interwiki-text": "เลือกวิกิและชื่อหัวข้อที่ต้องการนำเข้า วันที่และชื่อผู้เขียนทั้งหมดจะถูกเก็บไว้ โดยการนำเข้าทุกส่วนจะถูกเก็บไว้ใน [[Special:Log/import|ปูมการนำเข้า]]",
+       "import-interwiki-sourcewiki": "วิกิต้นทาง:",
+       "import-interwiki-sourcepage": "หน้าต้นทาง:",
        "import-interwiki-history": "คัดลอกประวัติทั้งหมดในหน้านี้",
        "import-interwiki-templates": "รวมแม่แบบทั้งหมด",
        "import-interwiki-submit": "นำเข้า",
        "javascripttest-qunit-intro": "ดู[$1 เอกสารกำกับการทดสอบ]บน mediawiki.org",
        "tooltip-pt-userpage": "หน้าผู้ใช้ของคุณ",
        "tooltip-pt-anonuserpage": "หน้าผู้ใช้ของเลขที่อยู่ไอพีที่คุณกำลังใช้แก้ไข",
-       "tooltip-pt-mytalk": "หà¸\99à¹\89าอภิà¸\9bรายของคุณ",
-       "tooltip-pt-anontalk": "à¸\9eูà¸\94à¸\84ุยเกี่ยวกับการแก้ไขจากเลขที่อยู่ไอพีนี้",
+       "tooltip-pt-mytalk": "หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยของคุณ",
+       "tooltip-pt-anontalk": "อภิà¸\9bรายเกี่ยวกับการแก้ไขจากเลขที่อยู่ไอพีนี้",
        "tooltip-pt-preferences": "ตั้งค่าการใช้งานส่วนตัว",
        "tooltip-pt-watchlist": "รายการหน้าที่คุณเฝ้าดูการแก้ไข",
        "tooltip-pt-mycontris": "รายการหน้าที่คุณเขียน",
        "tooltip-pt-login": "ไม่จำเป็นต้องล็อกอินในการแก้ไข แต่แนะนำอย่างยิ่งให้ล็อกอิน",
        "tooltip-pt-logout": "ล็อกเอาต์",
-       "tooltip-ca-talk": "à¸\9eูà¸\94à¸\84ุยà¹\80à¸\81ีà¹\88ยวà¸\81ัà¸\9aเนื้อหา",
-       "tooltip-ca-edit": "à¸\84ุà¸\93สามารà¸\96à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\99ีà¹\89à¹\84à¸\94à¹\89 à¹\82à¸\9bรà¸\94à¹\83à¸\8aà¹\89à¸\9bุà¹\88มà¸\94ูà¸\95ัวอยà¹\88าà¸\87à¸\81à¹\88อà¸\99à¸\9aัà¸\99à¸\97ึà¸\81",
-       "tooltip-ca-addsection": "à¹\80ริà¹\88มหัวà¸\82à¹\89อยà¹\88อยใหม่",
-       "tooltip-ca-viewsource": "หน้านี้ถูกล็อก แต่ยังดูโค้ดได้",
+       "tooltip-ca-talk": "อภิà¸\9bรายà¹\80à¸\81ีà¹\88ยวà¸\81ัà¸\9aหà¸\99à¹\89าเนื้อหา",
+       "tooltip-ca-edit": "คุณสามารถแก้ไขหน้านี้ได้ โปรดใช้ปุ่มตัวอย่างก่อนบันทึก",
+       "tooltip-ca-addsection": "à¹\80ริà¹\88มสà¹\88วà¸\99ใหม่",
+       "tooltip-ca-viewsource": "หน้านี้ถูกล็อก \nแต่ยังดูโค้ดได้",
        "tooltip-ca-history": "รุ่นที่แล้วของหน้านี้",
        "tooltip-ca-protect": "ล็อกหน้านี้",
-       "tooltip-ca-unprotect": "à¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99หà¸\99à¹\89าà¸\99ีà¹\89",
+       "tooltip-ca-unprotect": "เปลี่ยนการป้องกันหน้านี้",
        "tooltip-ca-delete": "ลบหน้านี้",
        "tooltip-ca-undelete": "กู้คืนการแก้ไขหน้านี้กลับมาเป็นรุ่นก่อนที่ถูกลบ",
        "tooltip-ca-move": "เปลี่ยนชื่อหน้านี้",
        "tooltip-search": "ค้นหา {{SITENAME}}",
        "tooltip-search-go": "ตรงไปยังหน้าที่ตรงกับชื่อนี้ (ถ้ามี)",
        "tooltip-search-fulltext": "ค้นหาหน้าที่มีข้อความนี้",
-       "tooltip-p-logo": "à¹\80à¸\82à¹\89าสูà¹\88หน้าหลัก",
-       "tooltip-n-mainpage": "à¹\80à¸\82à¹\89าสูà¹\88หน้าหลัก",
-       "tooltip-n-mainpage-description": "à¹\80à¸\82à¹\89าสูà¹\88หน้าหลัก",
+       "tooltip-p-logo": "à¹\80ยีà¹\88ยมà¸\8aมหน้าหลัก",
+       "tooltip-n-mainpage": "à¹\80ยีà¹\88ยมà¸\8aมหน้าหลัก",
+       "tooltip-n-mainpage-description": "à¹\80ยีà¹\88ยมà¸\8aมหน้าหลัก",
        "tooltip-n-portal": "เกี่ยวกับโครงการ สิ่งที่คุณทำได้ วิธีการค้นหา",
        "tooltip-n-currentevents": "ค้นหาเหตุการณ์ปัจจุบัน",
        "tooltip-n-recentchanges": "รายการปรับปรุงล่าสุดในวิกินี้",
-       "tooltip-n-randompage": "สุà¹\88มหà¸\99à¹\89าà¸\82ึà¹\89à¸\99มา",
+       "tooltip-n-randompage": "à¹\82หลà¸\94หà¸\99à¹\89าสุà¹\88ม",
        "tooltip-n-help": "อธิบายการใช้งาน",
        "tooltip-t-whatlinkshere": "รายการทุกหน้าวิกิที่ลิงก์มาที่นี่",
        "tooltip-t-recentchangeslinked": "รายการปรับปรุงล่าสุดในหน้าที่ลิงก์จากหน้านี้",
        "tooltip-diff": "แสดงการเปลี่ยนการต่อข้อความ",
        "tooltip-compareselectedversions": "แสดงความแตกต่างระหว่างสองรุ่นที่เลือกของหน้านี้",
        "tooltip-watch": "เพิ่มหน้านี้เข้ารายการเฝ้าดู",
-       "tooltip-watchlistedit-normal-submit": "à¸\99ำชื่อเรื่องออก",
-       "tooltip-watchlistedit-raw-submit": "อัà¸\9eà¹\80à¸\94à¸\97รายการเฝ้าดู",
+       "tooltip-watchlistedit-normal-submit": "ลà¸\9aชื่อเรื่องออก",
+       "tooltip-watchlistedit-raw-submit": "à¸\9bรัà¸\9aรายการเฝ้าดู",
        "tooltip-recreate": "สร้างหน้านี้อีกครั้งแม้เคยถูกลบ",
        "tooltip-upload": "เริ่มอัปโหลด",
        "tooltip-rollback": "\"ย้อนกลับฉุกเฉิน\" ใช้ย้อนการแก้ไขในหน้านี้ของผู้เขียนคนล่าสุดในคลิกเดียว",
-       "tooltip-undo": "\"ยà¹\89อà¸\99\" à¹\83à¸\8aà¹\89ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\84รัà¹\89à¸\87à¸\99ีà¹\89à¹\81ละà¹\80à¸\9bิà¸\94à¹\81à¸\9aà¸\9aà¹\81à¸\81à¹\89à¹\84à¸\82 à¸ªà¸²à¸¡à¸²à¸£à¸\96à¹\80à¸\9eิà¹\88มà¸\84ำอà¸\98ิà¸\9aายà¹\83à¸\99à¸\95อà¸\99à¸\97à¹\89าย",
+       "tooltip-undo": "\"ยà¹\89อà¸\99\" à¸¢à¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99ีà¹\89à¹\81ละà¹\80à¸\9bิà¸\94à¹\81à¸\9aà¸\9aà¹\81à¸\81à¹\89à¹\84à¸\82à¹\83à¸\99ภาวะà¸\95ัวอยà¹\88าà¸\87 à¹\80à¸\9bิà¸\94à¹\83หà¹\89à¹\80à¸\9eิà¹\88มà¹\80หà¸\95ุà¸\9cลà¹\83à¸\99à¸\84ำอà¸\98ิà¸\9aาย",
        "tooltip-preferences-save": "บันทึกการตั้งค่า",
        "tooltip-summary": "ใส่คำอธิบายอย่างย่อสั้น ๆ",
        "common.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ทุกสกิน */",
        "anonymous": "{{PLURAL:$1|ผู้ใช้|ผู้ใช้}}นิรนามของ{{SITENAME}}",
        "siteuser": "ผู้ใช้ $1 จาก {{SITENAME}}",
        "anonuser": "ผู้ใช้นิรนามจาก {{SITENAME}} $1",
-       "lastmodifiedatby": "à¹\81à¸\81à¹\89à¹\84à¸\82ลà¹\88าสุà¸\94à¹\80มืà¹\88อà¹\80วลา $2 $1 โดย $3",
+       "lastmodifiedatby": "à¸\94ัà¸\94à¹\81à¸\9bรหà¸\99à¹\89าà¸\99ีà¹\89ลà¹\88าสุà¸\94à¹\80มืà¹\88อà¹\80วลา $2, $1 โดย $3",
        "othercontribs": "พัฒนาจากงานเขียนของ $1",
        "others": "ผู้อื่น",
-       "siteusers": "{{PLURAL:$2|ผู้ใช้|ผู้ใช้}} {{SITENAME}} $1",
-       "anonusers": "{{PLURAL:$2|à¸\9cูà¹\89à¹\83à¸\8aà¹\89|à¸\9aรรà¸\94าà¸\9cูà¹\89à¹\83à¸\8aà¹\89}}à¸\99ิรà¸\99ามà¸\88าà¸\81 {{SITENAME}} $1",
+       "siteusers": "{{PLURAL:$2|ผู้ใช้|ผู้ใช้}}จาก {{SITENAME}} $1",
+       "anonusers": "{{PLURAL:$2|ผู้ใช้|ผู้ใช้}}นิรนามจาก {{SITENAME}} $1",
        "creditspage": "เกียรติแก่ผู้ร่วมสร้าง",
        "nocredits": "ไม่มีรายชื่อผู้เป็นเกียรติที่ร่วมสร้างหน้านี้",
        "spamprotectiontitle": "ตัวกรองป้องกันสแปม",
        "spamprotectiontext": "ข้อความที่คุณต้องการบันทึกถูกตัวกรองสแปมบล็อก\nอาจเกิดจากลิงก์ไปยังเว็บไซต์ภายนอกที่ถูกขึ้นบัญชีดำ",
        "spamprotectionmatch": "ข้อความต่อไปนี้ทำให้ตัวกรองสแปมของเราทำงาน: $1",
        "spambot_username": "กวาดล้างมีเดียวิกิสแปม",
-       "spam_reverting": "ยà¹\89อà¸\99à¸\81ลัà¸\9aà¹\84à¸\9bรุà¹\88à¸\99à¸\81à¹\88อà¸\99หà¸\99à¹\89าà¸\97ีà¹\88à¹\84มà¹\88มีลิà¸\87à¸\81à¹\8cà¹\84à¸\9bยัà¸\87à¹\80วà¹\87à¸\9a $1",
+       "spam_reverting": "ยà¹\89อà¸\99à¹\84à¸\9bรุà¹\88à¸\99à¹\81à¸\81à¹\89à¹\84à¸\82สุà¸\94à¸\97à¹\89ายà¸\97ีà¹\88à¹\84มà¹\88มีลิà¸\87à¸\81à¹\8cà¹\84à¸\9b $1",
        "spam_blanking": "รุ่นการปรับปรุงทุกรุ่นประกอบไปด้วยลิงก์ไปยังเว็บ $1 (ทำหน้าว่าง)",
        "spam_deleting": "ทุกรุ่นที่มีลิงก์ไปยัง $1 กำลังลบ",
        "simpleantispam-label": "การตรวจสอบสแปม\n<strong>อย่า</strong>กรอกช่องนี้!",
-       "pageinfo-title": "à¸\82à¹\89อมูลสำหรับ \"$1\"",
-       "pageinfo-not-current": "à¸\82ออภัย à¹\84มà¹\88สามารà¸\96à¹\83หà¹\89à¸\82à¹\89อมูลà¸\99ีà¹\89สำหรัà¸\9aรุà¹\88à¸\99เก่าได้",
-       "pageinfo-header-basic": "à¸\82à¹\89อมูลเบื้องต้น",
+       "pageinfo-title": "สารสà¸\99à¹\80à¸\97ศสำหรับ \"$1\"",
+       "pageinfo-not-current": "à¸\82ออภัย à¹\84มà¹\88สามารà¸\96à¹\83หà¹\89สารสà¸\99à¹\80à¸\97ศà¸\99ีà¹\89สำหรัà¸\9aรุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87เก่าได้",
+       "pageinfo-header-basic": "สารสà¸\99à¹\80à¸\97ศเบื้องต้น",
        "pageinfo-header-edits": "ประวัติการแก้ไข",
        "pageinfo-header-restrictions": "การล็อกหน้า",
        "pageinfo-header-properties": "คุณสมบัติหน้า",
        "pageinfo-robot-policy": "การทำดัชนีโดยบอต",
        "pageinfo-robot-index": "อนุญาต",
        "pageinfo-robot-noindex": "ไม่อนุญาต",
-       "pageinfo-views": "จำนวนการเข้าดู",
-       "pageinfo-watchers": "จำนวนผู้เข้าดูหน้า",
+       "pageinfo-watchers": "จำนวนผู้เฝ้าดูหน้า",
        "pageinfo-few-watchers": "{{PLURAL:$1|ผู้เฝ้าดู|ผู้เฝ้าดู}}น้อยกว่า $1 คน",
        "pageinfo-redirects-name": "จำนวนการเปลี่ยนทางมาหน้านี้",
-       "pageinfo-subpages-name": "หน้าย่อยของหน้านี้",
+       "pageinfo-subpages-name": "à¸\88ำà¸\99วà¸\99หà¸\99à¹\89ายà¹\88อยà¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89",
        "pageinfo-subpages-value": "$1 ($2 หน้าเปลี่ยนทาง; $3 หน้าไม่เปลี่ยนทาง)",
        "pageinfo-firstuser": "ผู้สร้างหน้า",
        "pageinfo-firsttime": "วันที่สร้างหน้า",
        "pageinfo-recent-authors": "จำนวนผู้เขียนล่าสุด",
        "pageinfo-hidden-categories": "หมวดหมู่ที่ซ่อนอยู่ ($1)",
        "pageinfo-templates": "แม่แบบที่ใช้ ($1)",
-       "pageinfo-toolboxlink": "à¸\82à¹\89อมูลหน้า",
-       "pageinfo-redirectsto": "เปลี่ยนทางไปยัง",
+       "pageinfo-toolboxlink": "สารสà¸\99à¹\80à¸\97ศหน้า",
+       "pageinfo-redirectsto": "เปลี่ยนทางไป",
        "pageinfo-contentpage": "นับเป็นหน้าเนื้อหา",
        "pageinfo-contentpage-yes": "ใช่",
        "pageinfo-protect-cascading": "การล็อกที่สืบทอดจากหน้านี้",
        "pageinfo-protect-cascading-yes": "ใช่",
-       "pageinfo-protect-cascading-from": "à¸\81ารลà¹\87อà¸\81à¸\97ีà¹\88สืà¸\9aà¸\97อà¸\94มายัà¸\87หà¸\99à¹\89าà¸\99ีà¹\89",
-       "pageinfo-category-info": "à¸\82à¹\89อมูลหมวดหมู่",
+       "pageinfo-protect-cascading-from": "à¸\81ารลà¹\87อà¸\81สืà¸\9aà¸\97อà¸\94à¸\88าà¸\81",
+       "pageinfo-category-info": "สารสà¸\99à¹\80à¸\97ศหมวดหมู่",
        "pageinfo-category-pages": "จำนวนหน้า",
        "pageinfo-category-subcats": "จำนวนหมวดหมู่ย่อย",
        "pageinfo-category-files": "จำนวนไฟล์",
        "markaspatrolleddiff": "ทำเครื่องหมายว่าตรวจสอบแล้ว",
        "markaspatrolledtext": "ทำเครื่องหมายว่าหน้านี้ถูกตรวจสอบแล้ว",
        "markedaspatrolled": "ตรวจสอบแล้ว",
-       "markedaspatrolledtext": "รุà¹\88à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87[[:$1]]à¸\96ูà¸\81à¸\81ำหà¸\99à¸\94ว่าตรวจสอบแล้ว",
-       "rcpatroldisabled": "การตรวจสอบหน้าปรับปรุงล่าสุดปิดใช้งาน",
-       "rcpatroldisabledtext": "à¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99à¸\81ารà¸\95รวà¸\88สอà¸\9aหà¸\99à¹\89าà¸\9bรัà¸\9aà¸\9bรุà¸\87ลà¹\88าสุà¸\94à¸\82à¸\93ะà¸\99ีà¹\89à¹\84มà¹\88à¹\80à¸\9bิà¸\94à¸\81ารใช้งาน",
+       "markedaspatrolledtext": "à¸\81ำหà¸\99à¸\94รุà¹\88à¸\99à¸\97ีà¹\88à¹\80ลือà¸\81à¸\82อà¸\87 [[:$1]] ว่าตรวจสอบแล้ว",
+       "rcpatroldisabled": "à¸\81ารà¸\95รวà¸\88สอà¸\9aหà¸\99à¹\89าà¸\9bรัà¸\9aà¸\9bรุà¸\87ลà¹\88าสุà¸\94à¸\96ูà¸\81à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99",
+       "rcpatroldisabledtext": "à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99à¸\81ารà¸\95รวà¸\88สอà¸\9aหà¸\99à¹\89าà¸\9bรัà¸\9aà¸\9bรุà¸\87ลà¹\88าสุà¸\94à¸\96ูà¸\81à¸\9bิà¸\94ใช้งาน",
        "markedaspatrollederror": "ไม่สามารถทำเครื่องหมายว่าตรวจสอบแล้ว",
        "markedaspatrollederrortext": "คุณจำเป็นต้องระบุรุ่นการแก้ไขที่กำหนดว่าตรวจสอบแล้ว",
        "markedaspatrollederror-noautopatrol": "คุณไม่สามารถทำเครื่องหมายการแก้ไขของคุณเองว่าตรวจสอบแล้ว",
        "patrol-log-header": "หน้านี้คือปูมรุ่นการแก้ไขที่กำหนดว่าตรวจสอบแล้ว",
        "log-show-hide-patrol": "$1 ปูมการตรวจสอบ",
        "deletedrevision": "รุ่นเก่าที่ถูกลบ $1",
-       "filedeleteerror-short": "à¹\80à¸\81ิà¸\94à¸\9bัà¸\8dหาการลบไฟล์: $1",
+       "filedeleteerror-short": "มีà¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94การลบไฟล์: $1",
        "filedeleteerror-long": "เกิดข้อผิดพลาดขณะลบไฟล์:\n\n$1",
        "filedelete-missing": "ไม่สามารถลบไฟล์ \"$1\" ได้ เนื่องจากไม่มีไฟล์ชื่อนี้อยู่",
        "filedelete-old-unregistered": "ไม่มีรุ่นไฟล์ \"$1\" ที่ระบุในฐานข้อมูล",
        "noimages": "ไม่มีให้ดู",
        "ilsubmit": "สืบค้น",
        "bydate": "ตามวันที่",
-       "sp-newimages-showfrom": "à¹\81สà¸\94à¸\87ภาà¸\9eà¹\83หมà¹\88à¹\80ริà¹\88มà¸\95à¹\89à¸\99จาก $2, $1",
+       "sp-newimages-showfrom": "à¹\81สà¸\94à¸\87à¹\84à¸\9fลà¹\8cà¹\83หมà¹\88à¹\80ริà¹\88มจาก $2, $1",
        "seconds-abbrev": "$1 วินาที",
        "minutes-abbrev": "$1 นาที",
        "hours-abbrev": "$1 ชั่วโมง",
        "bad_image_list": "รูปแบบแสดงต่อไปนี้:\n\nเฉพาะรายการที่แสดง (ในแถวขึ้นต้นด้วย *) โดยลิงก์แรกของแต่ละแถวเป็นลิงก์ไปยังภาพที่เสีย\nโดยลิงก์ถัดไปเป็นข้อยกเว้น เช่น บทความที่ภาพถูกจัดในบรรทัดเดียวกับส่วนข้อความ",
        "metadata": "ข้อมูลแนบ",
        "metadata-help": "ไฟล์นี้มีข้อมูลเพิ่มเติมแนบไว้ อาจจะมาจาก กล้องดิจิทัล สแกนเนอร์ หรือเครื่องรับส่งจีพีเอส อย่างไรก็ตามข้อมูลที่เก็บไว้อาจถูกดัดแปลงถ้าไฟล์ต้นฉบับถูกแก้ไขจากซอฟต์แวร์อื่น",
-       "metadata-expand": "à¹\81สà¸\94à¸\87à¸\82à¹\89อมูลà¹\80à¸\9eิà¹\88มà¹\80à¸\95ิม",
-       "metadata-collapse": "à¸\8bà¹\88อà¸\99à¸\82à¹\89อมูลà¹\80à¸\9eิà¹\88มà¹\80à¸\95ิม",
+       "metadata-expand": "à¹\81สà¸\94à¸\87รายละà¹\80อียà¸\94à¸\82ยาย",
+       "metadata-collapse": "à¸\8bà¹\88อà¸\99รายละà¹\80อียà¸\94à¸\82ยาย",
        "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-bitspersample": "บิตต่อคอมโพเนนต์",
        "exif-compression": "รูปแบบการบีบอัด",
        "exif-photometricinterpretation": "พิกเซลคอมโพซิชัน",
        "exif-orientation": "การจัดวางภาพ",
        "exif-model": "รุ่นกล้อง",
        "exif-software": "ซอฟต์แวร์ที่ใช้",
        "exif-artist": "ผู้สร้างสรรค์",
-       "exif-copyright": "à¸\9cูà¹\89à¸\96ือลิขสิทธิ์",
+       "exif-copyright": "à¸\9cูà¹\89à¸\97รà¸\87ลิขสิทธิ์",
        "exif-exifversion": "รุ่นเอกซิฟ (Exif)",
        "exif-flashpixversion": "รุ่นแฟลชพิกซ์ที่รองรับ",
        "exif-colorspace": "สเปซสี",
        "exif-gpslatitude-s": "ละติจูดใต้",
        "exif-gpslongitude-e": "ลองจิจูดตะวันออก",
        "exif-gpslongitude-w": "ลองจิจูดตะวันตก",
-       "exif-gpsstatus-a": "à¸\81ำลัà¸\87à¸\97ำà¸\81ารวัà¸\94อยูà¹\88",
+       "exif-gpsstatus-a": "à¸\81ำลัà¸\87วัà¸\94",
        "exif-gpsstatus-v": "ความสามารถในการวัดตำแหน่ง",
        "exif-gpsmeasuremode-2": "การวัดสองมิติ",
        "exif-gpsmeasuremode-3": "การวัดสามมิติ",
        "exif-iimcategory-sci": "วิทยาศาสตร์และเทคโนโลยี",
        "exif-iimcategory-spo": "กีฬา",
        "exif-iimcategory-wea": "ภูมิอากาศ",
-       "watchlistall2": "ทั้งหมด",
        "namespacesall": "ทั้งหมด",
        "monthsall": "ทั้งหมด",
        "confirmemail": "ยืนยันที่อยู่อีเมล",
        "confirmemail_body": "ใครบางคน ซึ่งอาจจะเป็นคุณ จากหมายเลขไอพี $1 ได้ลงทะเบียนในชื่อ \"$2\" โดยใช้อีเมลนี้ที่ {{SITENAME}}\n\nเพื่อยืนยันว่าบัญชีผู้ใช้นี้เป็นของคุณอย่างแน่อน และใช้งานฟีเจอร์ส่งอีเมลหาผู้ใช้บน {{SITENAME}} กดลิงก์นี้ในเว็บเบราวเซอร์ของคุณ:\n\n$3\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เพื่อยืนยันว่าบัญชีนี้เป็นของคุณจริง ๆ\nและเปิดใช้งานคุณสมบัติอีเมลบน {{SITENAME}} อีกครั้ง\nให้เปิดลิงก์ต่อไปนี้ในเบราว์เซอร์ของคุณ:\n\n$3\n\nหากบัญชีดังกล่าว *ไม่ใช่* ของคุณ\nให้เปิดลิงก์ต่อไปนี้เพื่อยกเลิกการยืนยันที่อยู่อีเมล:\n\n$5\n\nรหัสยืนยันนี้จะหมดอายุเมื่อ $4",
-       "confirmemail_invalidated": "à¸\81ารยืà¸\99ยัà¸\99à¸\97าà¸\87อีà¹\80มลà¹\84à¸\94à¹\89à¸\96ูà¸\81ยà¸\81à¹\80ลิà¸\81แล้ว",
-       "invalidateemail": "ยà¸\81à¹\80ลิà¸\81à¸\81ารยืà¸\99ยัà¸\99à¸\97าà¸\87อีà¹\80มล",
+       "confirmemail_invalidated": "ยà¸\81à¹\80ลิà¸\81à¸\81ารยืà¸\99ยัà¸\99à¸\97ีà¹\88อยูà¹\88อีà¹\80มลแล้ว",
+       "invalidateemail": "ยกเลิกการยืนยันอีเมล",
        "scarytranscludedisabled": "[ส่งค่าของอินเตอร์วิกิถูกระงับ]",
        "scarytranscludefailed": "[ไม่สามารถดึงแม่แบบมาได้สำหรับ $1]",
-       "scarytranscludetoolong": "[à¸\97ีà¹\88อยูà¹\88à¹\80วà¹\87à¸\9aà¹\84à¸\8bà¸\95à¹\8cยาวเกินไป]",
-       "deletedwhileediting": "'''คำเตือน''': หน้านี้ถูกลบไปแล้วในขณะที่คุณกำลังแก้ไข!",
-       "confirmrecreate": "à¸\9cูà¹\89à¹\83à¸\8aà¹\89 [[User:$1|$1]] ([[User talk:$1|à¸\9eูà¸\94à¸\84ุย]]) à¹\84à¸\94à¹\89ลà¸\9aหà¸\99à¹\89าà¸\99ีà¹\89à¹\83à¸\99à¸\8aà¹\88วà¸\87à¸\97ีà¹\88à¸\84ุà¸\93à¸\81ำลัà¸\87à¹\81à¸\81à¹\89à¹\84à¸\82 à¸\94à¹\89วยà¹\80หà¸\95ุà¸\9cลวà¹\88า:\n: ''$2''\nà¸\81รุà¸\93ายืà¸\99ยัà¸\99วà¹\88าà¸\95à¹\89อà¸\87à¸\81ารสรà¹\89าà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¸\82ึà¹\89à¸\99มาใหม่",
+       "scarytranscludetoolong": "[ยูอารà¹\8cà¹\81อลยาวเกินไป]",
+       "deletedwhileediting": "<strong>คำเตือน:</strong>  หน้านี้ถูกลบหลังคุณเริ่มแก้ไข!",
+       "confirmrecreate": "à¸\9cูà¹\89à¹\83à¸\8aà¹\89 [[User:$1|$1]] ([[User talk:$1|à¸\9eูà¸\94à¸\84ุย]]) à¸¥à¸\9aหà¸\99à¹\89าà¸\99ีà¹\89หลัà¸\87à¸\84ุà¸\93à¹\80ริà¹\88มà¹\81à¸\81à¹\89à¹\84à¸\82 à¸\94à¹\89วยà¹\80หà¸\95ุà¸\9cลวà¹\88า:\n: <em>$2</em>\nà¸\81รุà¸\93ายืà¸\99ยัà¸\99วà¹\88า à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารสรà¹\89าà¸\87หà¸\99à¹\89าà¸\99ีà¹\89ใหม่",
        "confirmrecreate-noreason": "ผู้ใช้ [[User:$1|$1]] ([[User talk:$1|พูดคุย]]) ลบหน้านี้หลังคุณเริ่มแก้ไข โปรดยืนยันว่าคุณต้องการสร้างหน้านี้ใหม่จริง ๆ",
        "recreate": "สร้างใหม่",
        "confirm_purge_button": "ตกลง",
        "imgmultipageprev": "← หน้าก่อนหน้า",
        "imgmultipagenext": "หน้าถัดไป →",
        "imgmultigo": "ไป!",
-       "imgmultigoto": "à¹\84à¸\9bà¸\97ีà¹\88หà¸\99à¹\89า $1",
-       "ascending_abbrev": "หà¸\99à¹\89าà¹\84à¸\9bหลัà¸\87",
-       "descending_abbrev": "หลัà¸\87มาหà¸\99à¹\89า",
+       "imgmultigoto": "ไปหน้า $1",
+       "ascending_abbrev": "ลำà¸\94ัà¸\9aà¸\82ึà¹\89à¸\99",
+       "descending_abbrev": "ลำà¸\94ัà¸\9aลà¸\87",
        "table_pager_next": "หน้าถัดไป",
        "table_pager_prev": "หน้าก่อนหน้า",
        "table_pager_first": "หน้าแรก",
        "table_pager_limit": "แสดง $1 รายการต่อหน้า",
        "table_pager_limit_label": "รายการต่อหน้า:",
        "table_pager_limit_submit": "ค้นหา",
-       "table_pager_empty": "à¹\84มà¹\88à¸\9eà¸\9aà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร",
+       "table_pager_empty": "à¹\84มà¹\88มีà¸\9cลลัà¸\9eà¸\98à¹\8c",
        "autosumm-blank": "ทำหน้าว่าง",
-       "autosumm-replace": "à¹\81à¸\97à¸\99à¸\97ีà¹\88à¸\82à¹\89อà¸\84วามà¸\97ัà¹\89à¸\87หมà¸\94à¸\94à¹\89วย '$1'",
-       "autoredircomment": "à¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¹\84à¸\9bà¸\97ีà¹\88 [[$1]]",
-       "autosumm-new": "หà¸\99à¹\89าà¸\97ีà¹\88à¸\96ูà¸\81สรà¹\89าà¸\87à¸\94à¹\89วย '$1'",
+       "autosumm-replace": "à¹\81à¸\97à¸\99à¸\97ีà¹\88à¹\80à¸\99ืà¹\89อหาà¸\94à¹\89วย \"$1\"",
+       "autoredircomment": "à¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87หà¸\99à¹\89าà¹\84à¸\9b [[$1]]",
+       "autosumm-new": "สรà¹\89าà¸\87หà¸\99à¹\89าà¸\94à¹\89วย \"$1\"",
        "autosumm-newblank": "สร้างหน้าว่าง",
        "size-bytes": "$1 ไบต์",
        "size-kilobytes": "$1 กิโลไบต์",
        "bitrate-exabits": "$1 เอกซะบิตต่อวินาที",
        "bitrate-zetabits": "$1 เซตตะบิตต่อวินาที",
        "bitrate-yottabits": "$1 ยอตตะบิตต่อวินาที",
-       "lag-warn-normal": "à¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ีà¹\88à¹\83หมà¹\88à¸\81วà¹\88า $1 à¸§à¸´à¸\99าà¸\97ี à¸­à¸²à¸\88à¹\84มà¹\88à¹\81สà¸\94à¸\87à¸\9cลà¹\83à¸\99รายà¸\81ารà¸\99ีà¹\89",
-       "lag-warn-high": "เนื่องจากปัญหาการล่าช้าของเซิร์ฟเวอร์ฐานข้อมูล การปรับปรุงที่ใหม่กว่า $1 วินาที อาจไม่แสดงผลในรายการนี้",
+       "lag-warn-normal": "การปรับปรุงที่ใหม่กว่า $1 วินาที อาจไม่แสดงในรายการนี้",
+       "lag-warn-high": "เนื่องจากปัญหาการล่าช้าของเซิร์ฟเวอร์ฐานข้อมูล การปรับปรุงที่ใหม่กว่า $1 วินาทีอาจไม่แสดงในรายการนี้",
        "watchlistedit-normal-title": "แก้ไขรายการเฝ้าดู",
        "watchlistedit-normal-legend": "ลบชื่อเรื่องออกจากรายการเฝ้าดู",
        "watchlistedit-normal-explain": "ชื่อเรื่องในรายการเฝ้าดูของคุณแสดงด้านล่าง \nถ้าต้องการลบออก ให้คลิกเลือกที่กล่องด้านข้างแต่ละชื่อ และคลิก \"{{int:Watchlistedit-normal-submit}}\" \nหรืออาจจะ[[Special:EditWatchlist/raw|แก้ไขรายการทั้งหมด]]",
        "watchlistedit-raw-legend": "แก้ไขรายการเฝ้าดูทั้งหมด",
        "watchlistedit-raw-explain": "ชื่อเรื่องในรายการเฝ้าดูของคุณแสดงด้านล่าง ซึ่งสามารถเพิ่มหรือนำออกได้ หนึ่งชื่อเรื่องต่อแถว \nเมื่อเสร็จแล้ว ให้กด \"{{int:Watchlistedit-raw-submit}}\" \nซึ่งอาจแก้ไขผ่าน [[Special:EditWatchlist|โปรแกรมแก้ไขข้อความทั่วไป]]",
        "watchlistedit-raw-titles": "ชื่อเรื่อง:",
-       "watchlistedit-raw-submit": "à¸\9bรัà¸\9aà¸\9bรุà¸\87รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู",
-       "watchlistedit-raw-done": "รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\94à¹\89à¸\9bรัà¸\9aแล้ว",
-       "watchlistedit-raw-added": "$1 ชื่อเรื่องได้ถูกเพิ่มเข้าไป:",
-       "watchlistedit-raw-removed": "$1 ชื่อเรื่องได้ถูกนำออกไป:",
+       "watchlistedit-raw-submit": "ปรับรายการเฝ้าดู",
+       "watchlistedit-raw-done": "à¸\9bรัà¸\9aรายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93แล้ว",
+       "watchlistedit-raw-added": "เพิ่ม $1 ชื่อเรื่อง:",
+       "watchlistedit-raw-removed": "ลบ $1 ชื่อเรื่อง:",
        "watchlistedit-clear-title": "ล้างรายการเฝ้าดู",
        "watchlistedit-clear-legend": "ล้างรายการเฝ้าดู",
-       "watchlistedit-clear-explain": "à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¸\97ัà¹\89à¸\87หมà¸\94à¸\88ะà¸\96ูà¸\81à¸\99ำออà¸\81จากรายการเฝ้าดูของคุณ",
+       "watchlistedit-clear-explain": "ลà¸\9aà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¸\97ัà¹\89à¸\87หมà¸\94จากรายการเฝ้าดูของคุณ",
        "watchlistedit-clear-titles": "ชื่อเรื่อง:",
        "watchlistedit-clear-submit": "ล้างรายการเฝ้าดู (เป็นการถาวร!)",
        "watchlistedit-clear-done": "ล้างรายการเฝ้าดูของคุณแล้ว",
-       "watchlistedit-clear-removed": "$1 ชื่อเรื่องถูกนำออก:",
-       "watchlistedit-too-many": "มีหà¸\99à¹\89ามาà¸\81à¹\80à¸\81ิà¸\99à¹\84à¸\9bà¸\97ีà¹\88à¸\88ะà¹\81สà¸\94à¸\87à¸\9cลที่นี่",
+       "watchlistedit-clear-removed": "ลบ $1 ชื่อเรื่อง:",
+       "watchlistedit-too-many": "มีหà¸\99à¹\89ามาà¸\81à¹\80à¸\81ิà¸\99à¹\81สà¸\94à¸\87ที่นี่",
        "watchlisttools-clear": "ล้างรายการเฝ้าดู",
        "watchlisttools-view": "ดูการเปลี่ยนแปลงที่เกี่ยวข้อง",
        "watchlisttools-edit": "ดูและแก้ไขรายการเฝ้าดู",
        "watchlisttools-raw": "แก้ไขรายการเฝ้าดูทั้งหมด",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|พูดคุย]])",
-       "unknown_extension_tag": "ไม่รู้จัก tag ส่วนขยาย (extension tag) \"$1\"",
-       "duplicate-defaultsort": "คำเตือน: หลักเรียงลำดับปริยาย \"$2\" ได้ลบล้างหลักเรียงลำดับปริยาย \"$1\" ที่มีอยู่ก่อนหน้า",
-       "version": "รุ่นซอฟต์แวร์",
+       "unknown_extension_tag": "ไม่รู้จักป้ายระบุส่วนขยาย \"$1\"",
+       "duplicate-defaultsort": "<strong>คำเตือน:</strong> หลักเรียงลำดับปริยาย \"$2\" ได้ลบล้างหลักเรียงลำดับปริยาย \"$1\" ที่มีอยู่ก่อนหน้า",
+       "version": "รุ่น",
        "version-extensions": "ส่วนขยายเพิ่ม (extension) ที่ติดตั้ง",
-       "version-skins": "รูà¸\9bลัà¸\81ษà¸\93à¹\8cที่ติดตั้ง",
+       "version-skins": "หà¸\99à¹\89าà¸\95าที่ติดตั้ง",
        "version-specialpages": "หน้าพิเศษ",
-       "version-parserhooks": "ฮุà¸\81à¸\97ีà¹\88มีà¸\81ารà¸\9eารà¹\8cสà¸\84à¹\88า",
+       "version-parserhooks": "ฮุà¸\81à¸\95ัวà¹\81à¸\88à¸\87สà¹\88วà¸\99",
        "version-variables": "ตัวแปร",
        "version-antispam": "การป้องกันสแปม",
-       "version-other": "อื่นๆ",
-       "version-mediahandlers": "à¸\95ัวà¸\88ัà¸\94à¸\81ารà¹\80à¸\81ีà¹\88ยวà¸\81ัà¸\9aสืà¹\88อ (media handler)",
+       "version-other": "อื่น ๆ",
+       "version-mediahandlers": "à¸\95ัวà¸\88ัà¸\94à¸\81ารสืà¹\88อ",
        "version-hooks": "ฮุก",
-       "version-parser-extensiontags": "à¹\81à¸\97à¹\87à¸\81à¸\97ีà¹\88มีà¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\82อà¸\87à¸\9eารà¹\8cสà¹\80à¸\8bอรà¹\8c",
-       "version-parser-function-hooks": "ฮุà¸\81à¸\97ีà¹\88มีà¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99à¸\9eารà¹\8cสà¹\80à¸\8bอรà¹\8c",
+       "version-parser-extensiontags": "à¸\9bà¹\89ายระà¸\9aุสà¹\88วà¸\99à¸\82ยายà¸\95ัวà¹\81à¸\88à¸\87สà¹\88วà¸\99",
+       "version-parser-function-hooks": "ฮุà¸\81à¸\97ีà¹\88มีà¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99à¸\95ัวà¹\81à¸\88à¸\87สà¹\88วà¸\99",
        "version-hook-name": "ชื่อฮุก",
        "version-hook-subscribedby": "สนับสนุนโดย",
        "version-version": "(รุ่น $1)",
+       "version-no-ext-name": "[ไม่มีชื่อ]",
        "version-license": "สัญญาอนุญาตมีเดียวิกิ",
        "version-poweredby-credits": "วิกินี้จัดทำโดย '''[https://www.mediawiki.org/ MediaWiki]''', สงวนลิขสิทธิ์ © 2001-$1 โดย $2",
        "version-poweredby-others": "ผู้อื่น",
        "version-poweredby-translators": "ผู้แปล translatewiki.net",
        "version-license-info": "มีเดียวิกิเป็นซอฟต์แวร์เสรี คุณสามารถแจกจ่าย และ/หรือ แก้ไขได้ภายใต้เงื่อนไขแห่งสัญญาอนุญาตสาธารณะทั่วไปของกนูตามที่เผยแพร่โดยมูลนิธิซอฟต์แวร์เสรี ไม่ว่ารุ่นที่ 2 แห่งสัญญาอนุญาต หรือรุ่นภายหลังอื่นใด (ตามที่คุณเลือก)\n\nมีเดียวิกิมีถูกแจกจ่ายด้วยหวังว่าจะเป็นประโยชน์ แต่ไม่มีการรับประกันใด ๆ ทั้งสิ้น ไม่มีแม้การรับประกันโดยนัยเพื่อการค้า หรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ดูรายละเอียดเพิ่มเติมที่สัญญาอนุญาตสาธารณะทั่วไปของกนู\n\nคุณควรได้รับ[{{SERVER}}{{SCRIPTPATH}}/COPYING สำเนาของสัญญาอนุญาตสาธารณะทั่วไปของกนู]พร้อมกับโปรแกรมนี้ หากไม่พบ กรุณาเขียนจดหมายถึงบริษัทมูลนิธิซอฟต์แวร์เสรี ที่อยู่ 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": "à¸\8aืà¹\88อ",
+       "version-software-product": "à¸\9cลิà¸\95ภัà¸\93à¸\91à¹\8c",
        "version-software-version": "รุ่น",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath เส้นทางบทความ]",
        "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath เส้นทางสคริปต์]",
        "redirect-value": "ค่า:",
        "redirect-user": "รหัสผู้ใช้",
        "redirect-page": "รหัสประจำหน้า",
-       "redirect-revision": "รุ่นหน้า",
+       "redirect-revision": "รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87หà¸\99à¹\89า",
        "redirect-file": "ชื่อไฟล์",
        "redirect-not-exists": "ไม่พบค่า",
-       "fileduplicatesearch": "à¸\84à¹\89à¸\99หาà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\8bà¹\89ำà¸\8bà¹\89อà¸\99",
-       "fileduplicatesearch-summary": "à¸\84à¹\89à¸\99หาà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\8bà¹\89ำà¸\81ัà¸\99à¸\95ามà¸\84à¹\88าà¹\81ฮà¸\8a",
+       "fileduplicatesearch": "ค้นหาไฟล์ซ้ำซ้อน",
+       "fileduplicatesearch-summary": "ค้นหาไฟล์ซ้ำกันตามค่าแฮช",
        "fileduplicatesearch-legend": "ค้นหาไฟล์ที่ซ้ำกัน",
        "fileduplicatesearch-filename": "ชื่อไฟล์ :",
-       "fileduplicatesearch-submit": "สืà¸\9aà¸\84à¹\89à¸\99",
+       "fileduplicatesearch-submit": "à¸\84à¹\89à¸\99หา",
        "fileduplicatesearch-info": "$1 × $2 พิกเซล<br />ขนาดไฟล์: $3<br />ชนิดของไมม์: $4",
        "fileduplicatesearch-result-1": "ไม่มีไฟล์ที่ซ้ำกับไฟล์ \"$1\"",
        "fileduplicatesearch-result-n": "มี {{PLURAL:$2|ไฟล์เดียว|$2 ไฟล์}}ที่ซ้ำกับไฟล์ \"$1\"",
        "specialpages": "หน้าพิเศษ",
        "specialpages-note-top": "คำอธิบายสัญลักษณ์",
        "specialpages-note": "* หน้าพิเศษปกติ\n* <span class=\"mw-specialpagerestricted\">หน้าพิเศษที่ถูกจำกัด</span>",
-       "specialpages-group-maintenance": "รายà¸\87าà¸\99à¸\81ารà¹\80à¸\81à¹\87à¸\9aà¸\81วาà¸\94",
+       "specialpages-group-maintenance": "รายà¸\87าà¸\99à¸\81ารà¸\9aำรุà¸\87รัà¸\81ษา",
        "specialpages-group-other": "หน้าพิเศษอื่น ๆ",
        "specialpages-group-login": "ล็อกอิน / สร้างบัญชี",
-       "specialpages-group-changes": "ปรับปรุงล่าสุดและปูมต่าง ๆ",
-       "specialpages-group-media": "รายà¸\87าà¸\99à¹\80รืà¹\88อà¸\87สืà¹\88อà¹\81ละà¸\81ารอัà¸\9bà¹\82หลà¸\94",
+       "specialpages-group-changes": "ปรับปรุงล่าสุดและปูม",
+       "specialpages-group-media": "รายงานสื่อและการอัปโหลด",
        "specialpages-group-users": "ผู้ใช้และสิทธิ",
        "specialpages-group-highuse": "หน้าที่มีการใช้งานสูง",
-       "specialpages-group-pages": "รายà¸\8aืà¹\88อหน้า",
-       "specialpages-group-pagetools": "à¹\80à¸\84รืà¹\88อà¸\87มือà¹\80à¸\81ีà¹\88ยวà¸\81ัà¸\9aหà¸\99à¹\89าà¸\95à¹\88าà¸\87 à¹\86",
+       "specialpages-group-pages": "รายà¸\81ารหน้า",
+       "specialpages-group-pagetools": "à¹\80à¸\84รืà¹\88อà¸\87มือหà¸\99à¹\89า",
        "specialpages-group-wiki": "ข้อมูลและเครื่องมือ",
        "specialpages-group-redirects": "เปลี่ยนทางหน้าพิเศษ",
-       "specialpages-group-spam": "à¹\80à¸\84รืà¹\88อà¸\87มือà¹\80à¸\81ีà¹\88ยวà¸\81ัà¸\9aสà¹\81à¸\9bม",
+       "specialpages-group-spam": "เครื่องมือสแปม",
        "blankpage": "หน้าว่าง",
        "intentionallyblankpage": "หน้านี้ถูกทิ้งว่างโดยเจตนา",
        "external_image_whitelist": "  #เว้นบรรทัดนี้ไว้จากการแก้ไข<pre>\n#ใส่คำอธิบายปกติ (เฉพาะในส่วนที่อยู่ระหว่างสัญลักษณ์ //) ด้านล่างนี้\n#ซึ่งคำอธิบายดังกล่าวจะถูกจับคู่กับ URL ของรูปถ่ายภายนอก\n#ถ้าตรงกันจะปรากฏเป็นภาพออกมา หรือมิเช่นนั้นจะปรากฏเป็นลิงก์ไปยังรูปภาพนั้น\n#บรรทัดที่ขึ้นต้นด้วย # จะถูกกำหนดเป็นหมายเหตุเพิ่มเติม\n#กรุณาพิมพ์ตัวพิมพ์เล็ก-ใหญ่ตามชื่อไฟล์ให้ตรงกัน\n\n#ใส่ส่วนของคำอธิบายด้านบนของบรรทัดนี้และเว้นบรรทัดนี้จากการแก้ไข</pre>",
        "logentry-upload-overwrite": "$1 อัปโหลดรุ่นใหม่ของ $3",
        "logentry-upload-revert": "$1 อัปโหลด $3",
        "rightsnone": "(ไม่มี)",
+       "revdelete-summary": "คำอธิบายโดยย่อ",
        "feedback-bugornote": "หากคุณได้อธิบายปัญหาทางเทคนิคในรายละเอียดแล้ว โปรด[$1 รายงานจุดบกพร่อง]\nมิฉะนั้น คุณสามารถแบบอย่างง่ายด้านล่าง ความเห็นของคุณจะถูกเพิ่มเข้าสู่ \"[$3 $2]\" ร่วมกับชื่อผู้ใช้ของคุณ",
        "feedback-subject": "เรื่อง:",
        "feedback-message": "ข้อความ:",
        "feedback-bugcheck": "ยอดเยี่ยม! เพียงตรวจสอบว่าจุดบกพร่องนั้นมิใช่หนึ่งใน[$1 จุดบกพร่องที่ทราบแล้ว]",
        "feedback-bugnew": "ฉันตรวจสอบแล้ว รายงานจุดบกพร่องใหม่",
        "searchsuggest-search": "ค้นหา",
-       "searchsuggest-containing": "à¸\9bระà¸\81อà¸\9aà¹\84à¸\9bà¸\94à¹\89วย...",
+       "searchsuggest-containing": "มี...",
        "api-error-badaccess-groups": "คุณไม่ได้รับอนุญาตให้อัปโหลดไฟล์มายังวิกินี้",
        "api-error-empty-file": "ไฟล์ที่คุณส่งมานั้นว่าง",
        "api-error-emptypage": "ไม่อนุญาตให้สร้างหน้าใหม่ที่ว่าง",
index e1c5fba..928f728 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Blake",
-            "Node ue",
-            "Teak"
-        ]
-    },
-    "underline-always": "ጥራይ",
-    "underline-never": "ኣይትግበሩ",
-    "sunday": "ሰንበት",
-    "monday": "ሰኑይ",
-    "tuesday": "ሰሉስ",
-    "wednesday": "ረብዓ",
-    "thursday": "ኃሙስ",
-    "friday": "ዓርቢ",
-    "saturday": "ቀዳም",
-    "sun": "ሰንበ",
-    "mon": "ሰኑይ",
-    "tue": "ሠሉስ",
-    "wed": "ረቡዕ",
-    "thu": "ኃሙስ",
-    "fri": "ዓርቢ",
-    "sat": "ቀዳም",
-    "january": "ትሪ",
-    "february": "ለካቲት",
-    "march": "መጋቢት",
-    "april": "ሚያዝያ",
-    "may_long": "ግንቦት",
-    "june": "ሰነ",
-    "july": "ሓምለ",
-    "august": "ነሓሰ",
-    "september": "መስከረም",
-    "october": "ጥቅምቲ",
-    "november": "ኅዳር",
-    "december": "ታኅሣሥ",
-    "jan": "ጃንዩ",
-    "feb": "ፌብሩ",
-    "mar": "ማርች",
-    "apr": "ኤፕረ",
-    "may": "ሜይ",
-    "jun": "ጁን",
-    "about": "ብዛዕባ ብጠቅላላ",
-    "mypage": "ፅሑፈይ",
-    "qbpageoptions": "ፅሑፍዚ",
-    "qbmyoptions": "ፅሑፋተይ",
-    "help": "ፍንጪ",
-    "search": "ድሉይ",
-    "searchbutton": "ድሉይ",
-    "history": "ናይ ፅሑፍ ታሪኽ",
-    "history_short": "ታሪኽ",
-    "newpage": "ሓዳስ ፅሑፍ",
-    "jumptosearch": "ድሉይ",
-    "aboutsite": "ብዛዕባ ዊኪፒዲያ ብጠቅላላ",
-    "mainpage": "መበገሲ ገጽ",
-    "mainpage-description": "መበገሲ ገጽ",
-    "nstab-main": "ፅሑፍ",
-    "nstab-user": "ናይ ፅሑፍ ኣባል",
-    "nstab-project": "ናይ ፅሑፍ ፕሮጀክት",
-    "nstab-image": "ምስሊ",
-    "yourname": "ናይ ኣባል ሽም:",
-    "loginlanguagelabel": "ቋንቋ: $1",
-    "savearticle": "ፅሑፍ ኣቐምጥ",
-    "newarticle": "(ሓዳስ)",
-    "next": "ዝቕጽል",
-    "historysize": "($1 {{PLURAL:$1|ባይታት|ባይታት}})",
-    "prevn": "ናይ ቀደም {{PLURAL:$1|$1}}",
-    "nextn": "ዝቕጽል {{PLURAL:$1|$1}}",
-    "preferences": "ኣማረጽቲ",
-    "mypreferences": "ናተይ ኣማረጽቲ",
-    "saveprefs": "ኣቐምጥ",
-    "searchresultshead": "ድሉይ",
-    "savedprefs": "ዘቕረብኩሞ መርኣይ ብትክክል ተቀሚጡ ኣሎ።",
-    "prefs-files": "ምስልታት",
-    "youremail": "ኢ-መይል:",
-    "yourlanguage": "ቋንቋ:",
-    "email": "ኢ-መይል",
-    "group": "ብሓበር:",
-    "group-sysop": "ሲሶፓት",
-    "group-sysop-member": "{{GENDER:$1|ሲሶፕ}}",
-    "hist": "ታሪኽ",
-    "newpageletter": "ሓ",
-    "savefile": "ምስሊ ኣቐምጥ",
-    "imgfile": "ምስሊ",
-    "listfiles": "ምስልታት",
-    "listfiles_name": "ሽም",
-    "listfiles_user": "ኣባል",
-    "file-anchor-link": "ምስሊ",
-    "nbytes": "$1 {{PLURAL:$1|ባይት|ባይታት}}",
-    "longpages": "ነዋሕቲ ፅሑፋት",
-    "listusers": "ኣባላት",
-    "newpages": "ሓደሽቲ ዛዕባታት",
-    "newpages-username": "ናይ ኣባል ሽም:",
-    "booksources-go": "ኪድ",
-    "specialloguserlabel": "ኣባል:",
-    "alphaindexline": "$1 ናብ $2",
-    "nextpage": "ዝቕጽል ፅሑፍ ($1)",
-    "prevpage": "ናይ ቀደም ፅሑፍ ($1)",
-    "allarticles": "ኵሎም ፅሑፋት",
-    "allpagessubmit": "ኪድ",
-    "pagesize": "(ባይታት)",
-    "undelete-search-submit": "ድሉይ",
-    "contribsub2": "ን$1 ($2)",
-    "sp-contributions-submit": "ድሉይ",
-    "ipblocklist-submit": "ድሉይ",
-    "allmessagesname": "ሽም",
-    "tooltip-pt-preferences": "ናተይ ኣማረጽቲ",
-    "ilsubmit": "ድሉይ",
-    "metadata": "ሜታዳታ",
-    "imgmultipageprev": "← ናይ ቀደም ፅሑፍ",
-    "imgmultipagenext": "ዝቕጽል ፅሑፍ →",
-    "table_pager_next": "ዝቕጽል ፅሑፍ",
-    "table_pager_prev": "ናይ ቀደም ፅሑፍ",
-    "table_pager_limit_submit": "ኪድ",
-    "autosumm-new": "ሓዳስ ፅሑፍ: $1",
-    "size-bytes": "$1 ባይታት",
-    "size-kilobytes": "$1 ኪሎባይታት",
-    "size-megabytes": "$1 ሜጋባይታት",
-    "size-gigabytes": "$1 ጊጋባይታት"
+       "@metadata": {
+               "authors": [
+                       "Blake",
+                       "Node ue",
+                       "Teak"
+               ]
+       },
+       "underline-always": "ጥራይ",
+       "underline-never": "ኣይትግበሩ",
+       "sunday": "ሰንበት",
+       "monday": "ሰኑይ",
+       "tuesday": "ሰሉስ",
+       "wednesday": "ረብዓ",
+       "thursday": "ኃሙስ",
+       "friday": "ዓርቢ",
+       "saturday": "ቀዳም",
+       "sun": "ሰንበ",
+       "mon": "ሰኑይ",
+       "tue": "ሠሉስ",
+       "wed": "ረቡዕ",
+       "thu": "ኃሙስ",
+       "fri": "ዓርቢ",
+       "sat": "ቀዳም",
+       "january": "ትሪ",
+       "february": "ለካቲት",
+       "march": "መጋቢት",
+       "april": "ሚያዝያ",
+       "may_long": "ግንቦት",
+       "june": "ሰነ",
+       "july": "ሓምለ",
+       "august": "ነሓሰ",
+       "september": "መስከረም",
+       "october": "ጥቅምቲ",
+       "november": "ኅዳር",
+       "december": "ታኅሣሥ",
+       "jan": "ጃንዩ",
+       "feb": "ፌብሩ",
+       "mar": "ማርች",
+       "apr": "ኤፕረ",
+       "may": "ሜይ",
+       "jun": "ጁን",
+       "about": "ብዛዕባ ብጠቅላላ",
+       "mypage": "ፅሑፈይ",
+       "qbpageoptions": "ፅሑፍዚ",
+       "qbmyoptions": "ፅሑፋተይ",
+       "help": "ፍንጪ",
+       "search": "ድሉይ",
+       "searchbutton": "ድሉይ",
+       "history": "ናይ ፅሑፍ ታሪኽ",
+       "history_short": "ታሪኽ",
+       "newpage": "ሓዳስ ፅሑፍ",
+       "jumptosearch": "ድሉይ",
+       "aboutsite": "ብዛዕባ ዊኪፒዲያ ብጠቅላላ",
+       "mainpage": "መበገሲ ገጽ",
+       "mainpage-description": "መበገሲ ገጽ",
+       "nstab-main": "ፅሑፍ",
+       "nstab-user": "ናይ ፅሑፍ ኣባል",
+       "nstab-project": "ናይ ፅሑፍ ፕሮጀክት",
+       "nstab-image": "ምስሊ",
+       "yourname": "ናይ ኣባል ሽም:",
+       "loginlanguagelabel": "ቋንቋ: $1",
+       "savearticle": "ፅሑፍ ኣቐምጥ",
+       "newarticle": "(ሓዳስ)",
+       "next": "ዝቕጽል",
+       "historysize": "($1 {{PLURAL:$1|ባይታት|ባይታት}})",
+       "prevn": "ናይ ቀደም {{PLURAL:$1|$1}}",
+       "nextn": "ዝቕጽል {{PLURAL:$1|$1}}",
+       "preferences": "ኣማረጽቲ",
+       "mypreferences": "ናተይ ኣማረጽቲ",
+       "saveprefs": "ኣቐምጥ",
+       "searchresultshead": "ድሉይ",
+       "savedprefs": "ዘቕረብኩሞ መርኣይ ብትክክል ተቀሚጡ ኣሎ።",
+       "prefs-files": "ምስልታት",
+       "youremail": "ኢ-መይል:",
+       "yourlanguage": "ቋንቋ:",
+       "email": "ኢ-መይል",
+       "group": "ብሓበር:",
+       "group-sysop": "ሲሶፓት",
+       "group-sysop-member": "{{GENDER:$1|ሲሶፕ}}",
+       "hist": "ታሪኽ",
+       "newpageletter": "ሓ",
+       "savefile": "ምስሊ ኣቐምጥ",
+       "imgfile": "ምስሊ",
+       "listfiles": "ምስልታት",
+       "listfiles_name": "ሽም",
+       "listfiles_user": "ኣባል",
+       "file-anchor-link": "ምስሊ",
+       "nbytes": "$1 {{PLURAL:$1|ባይት|ባይታት}}",
+       "longpages": "ነዋሕቲ ፅሑፋት",
+       "listusers": "ኣባላት",
+       "newpages": "ሓደሽቲ ዛዕባታት",
+       "newpages-username": "ናይ ኣባል ሽም:",
+       "specialloguserlabel": "ኣባል:",
+       "nextpage": "ዝቕጽል ፅሑፍ ($1)",
+       "prevpage": "ናይ ቀደም ፅሑፍ ($1)",
+       "allarticles": "ኵሎም ፅሑፋት",
+       "allpagessubmit": "ኪድ",
+       "pagesize": "(ባይታት)",
+       "undelete-search-submit": "ድሉይ",
+       "contribsub2": "ን$1 ($2)",
+       "sp-contributions-submit": "ድሉይ",
+       "ipblocklist-submit": "ድሉይ",
+       "allmessagesname": "ሽም",
+       "tooltip-pt-preferences": "ናተይ ኣማረጽቲ",
+       "ilsubmit": "ድሉይ",
+       "metadata": "ሜታዳታ",
+       "imgmultipageprev": "← ናይ ቀደም ፅሑፍ",
+       "imgmultipagenext": "ዝቕጽል ፅሑፍ →",
+       "table_pager_next": "ዝቕጽል ፅሑፍ",
+       "table_pager_prev": "ናይ ቀደም ፅሑፍ",
+       "table_pager_limit_submit": "ኪድ",
+       "autosumm-new": "ሓዳስ ፅሑፍ: $1",
+       "size-bytes": "$1 ባይታት",
+       "size-kilobytes": "$1 ኪሎባይታት",
+       "size-megabytes": "$1 ሜጋባይታት",
+       "size-gigabytes": "$1 ጊጋባይታት"
 }
index 07d5212..d90b67e 100644 (file)
        "changeemail-newemail": "Täze e-poçta adresi:",
        "changeemail-none": "(hiç biri)",
        "changeemail-submit": "E-poçtany üýtget",
-       "changeemail-cancel": "Goýbolsun et",
        "bold_sample": "Goýy tekst",
        "bold_tip": "Goýy tekst",
        "italic_sample": "Kursiw tekst",
        "mergehistory-same-destination": "Çeşme we  niýetlenilýän sahypalar birmeňzeş bolup bilmeýär",
        "mergehistory-reason": "Sebäp:",
        "mergelog": "Birleşdirme gündeligi",
-       "pagemerge-logentry": "[[$1]] bilen [[$2]] birleşdirildi (şuňa çenliki wersiýalar: $3)",
        "revertmerge": "Dargat",
        "mergelogpagetext": "Aşakdaky sanaw sahypalaryň geçmişleriniň iň soňky birleşdirmelerini görkezýär.",
        "history-title": "\"$1\" — sahypa geçmişi",
        "searchrelated": "baglanyşykly",
        "searchall": "ählisi",
        "showingresults": "Aşakda №'''$2''' netijeden başlap, {{PLURAL:$1|'''1''' netije|'''$1''' netije}} görkezilýär.",
-       "showingresultsheader": "'''$4''' hakda {{PLURAL:$5|'''$3''' netijeden '''$1''' sanysy|'''$3''' netijeden '''$1 - $2''' aralygy}}",
        "search-nonefound": "Talaba gabat gelýän hiç hili netije ýok.",
        "powersearch-legend": "Giňişleýin gözleg",
        "powersearch-ns": "At giňişliklerinde gözleg:",
        "statistics": "Statistika",
        "statistics-header-pages": "Sahypa statistikalary",
        "statistics-header-edits": "Özgerdiş statistikalary",
-       "statistics-header-views": "Synlama statistikalary",
        "statistics-header-users": "Ulanyjy statistikalary",
        "statistics-header-hooks": "Başga statistikalar",
        "statistics-articles": "Makalalar",
        "statistics-files": "Ýüklenen faýllar",
        "statistics-edits": "{{SITENAME}} gurulaly bäri edilen sahypa özgerdişleri",
        "statistics-edits-average": "Sahypa başyna ortaça özgerdiş",
-       "statistics-views-total": "Jemi synlama",
-       "statistics-views-peredit": "Özgerdiş başyna synlama",
        "statistics-users": "Hasaba alnan [[Special:ListUsers|ulanyjylar]]",
        "statistics-users-active": "Işjeň ulanyjylar",
        "statistics-users-active-desc": "Soňky {{PLURAL:$1|1 günde|$1 günde}} haýsydyr bir iş geçiren ulanyjylar",
-       "statistics-mostpopular": "Iň köp görülýän sahypalar",
        "doubleredirects": "Jübüt gönükdirmeler",
        "doubleredirectstext": "Bu sahypa başga gönükdirme sahypalaryna gönükdirýän sahypalaryň sanawyny görkezýär.\nHer bir hatar birinji we ikinji gönükdirmeleri, şeýle-de ikinji gönükdirmäniň maksady bolup durýan hem-de şol bir wagtyň özünde birinji gönükdirmäniň adatça barmaly ýeri bolan \"hakyky\" maksat edinilýän sahypany öz içine alýar.\n<del>Üsti çyzylan</del> ýazgylar düzedilenlerdir.",
        "double-redirect-fixed-move": "[[$1]] sahypasynyň ady üýtgedildi.\nOl indi [[$2]] sahypasyna gönükdirýär.",
        "uncategorizedtemplates": "Kategoriýa goýulmadyk şablonlar",
        "unusedcategories": "Ulanylmaýan kategoriýalar",
        "unusedimages": "Ulanylmaýan faýllar",
-       "popularpages": "Ýörgünli sahypalar",
        "wantedcategories": "Talap edilýän kategoriýalar",
        "wantedpages": "Talap edilýän sahypalar",
        "wantedpages-badtitle": "Netijeler toplumyndaky nädogry at: $1",
        "suppress": "Esewan",
        "booksources": "Kitap çeşmeleri",
        "booksources-search-legend": "Kitap çeşmelerini gözle",
-       "booksources-go": "Git",
        "booksources-text": "Aşakda täze hem-de ulanylan kitap satýan başga saýtlara çykgytlaryň sanawy görkezilýär, we olarda agtarýan kitabyňyz barada has köp maglumat bar bolmagy mümkin.",
        "booksources-invalid-isbn": "Berlen ISBN dogry däl ýaly; asyl çeşmä seredip göçürme säwliklerini barlaň.",
        "specialloguserlabel": "Ulanyjy:",
        "wlheader-enotif": "E-poçta bilen habar beriş açyk.",
        "wlheader-showupdated": "Soňky gezek baryp görenizden soňra üýtgedilen sahypalar '''goýy şrift''' bilen görkezilýär.",
        "wlnote": "Aşakda soňky {{PLURAL:$2|bir sagatda|'''$2''' sagatda}} edilen {{PLURAL:$1|soňky üýtgeşme|soňky '''$1''' üýtgeşme}} görkezilýär.",
-       "wlshowlast": "Soňky $1 sagady $2 güni görkez $3",
+       "wlshowlast": "Soňky $1 sagady $2 güni görkez",
        "watchlist-options": "Gözegçilik sanawynyň opsiýalary",
        "watching": "Gözegçilige alynýar...",
        "unwatching": "Gözegçilikden aýyrylýar...",
        "import": "Sahypalary importirle",
        "importinterwiki": "Wikiara importirleme",
        "import-interwiki-text": "Importirlemek üçin biri wiki we sahypa adyny saýlaň.\nWersiýalaryň seneleri we awtorlaryň atlary saklanyljakdyr.\nÄhli wikiara importirleme amallary [[Special:Log/import|import gündeligine]] ýazylýar.",
-       "import-interwiki-source": "Wiki çeşme/sahypa:",
        "import-interwiki-history": "Bu sahypa üçin ähli geçmiş wersiýalary göçür",
        "import-interwiki-templates": "Ähli şablonlary giriz",
        "import-interwiki-submit": "Importirle",
        "exif-gpsspeed-n": "Uzel (deňiz mili)",
        "exif-gpsdirection-t": "Hakyky ugur",
        "exif-gpsdirection-m": "Magnit ugur",
-       "watchlistall2": "Ählisini görkez",
        "namespacesall": "ählisi",
        "monthsall": "ählisi",
        "confirmemail": "E-poçta adresini tassykla",
        "revdelete-restricted": "administratorlara goýlan çäklendirmeler",
        "revdelete-unrestricted": "administratorlardan aýyrylan çäklendirmeler",
        "rightsnone": "(hiç biri)",
+       "revdelete-summary": "özgerdiş mazmuny",
        "searchsuggest-search": "Gözleg",
        "searchsuggest-containing": "öz içine alýar...",
        "expandtemplates": "Şablonlary giňelt",
index cbb0891..e23eb02 100644 (file)
@@ -12,7 +12,8 @@
                        "Sky Harbor",
                        "tl.wikipedia.org sysops",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Ianlopez1115"
                ]
        },
        "tog-underline": "Pagsasalungguhit ng link:",
        "permalink": "Palagiang kawing",
        "print": "Ilimbag",
        "view": "Tingnan",
+       "view-foreign": "Tingnan sa $1",
        "edit": "Baguhin",
        "create": "Likhain",
        "editthispage": "Baguhin ang pahinang ito",
        "passwordreset-emailsent-capture": "Naipadala na ang isang e-liham na paalala, na ipinapakita sa ibaba.",
        "passwordreset-emailerror-capture": "Nalikha na ang isang e-liham na paalala, na ipinapakita sa ibaba, subalit nabigo ang pagpapadala sa tagagamit: $1",
        "changeemail": "Baguhin ang direksiyong e-liham",
-       "changeemail-header": "Baguhin ang email address ng account",
        "changeemail-text": "Kumpletuhin ang form na ito upang mabago ang email address. Kakailanganin mong ipasok ang iyong password upang tiyakin ang pagbabagong ito.",
        "changeemail-no-info": "Kailangan mong lumagda upang tuwirang mapuntahan ang pahinang ito.",
        "changeemail-oldemail": "Kasalukuyang direksiyong e-liham:",
        "changeemail-none": "(wala)",
        "changeemail-password": "Ang iyong {{SITENAME}} password:",
        "changeemail-submit": "Baguhin ang e-liham",
-       "changeemail-cancel": "Kanselahin",
        "changeemail-throttled": "Masyadong madami ang kamakailan lamang mong pagsubok sa pag-login.\nMaghintay po muna ng $1 bago subukan uli.",
        "resettokens": "I-reset ang mga token o susi",
        "bold_sample": "Makapal na panitik",
        "mergehistory-reason": "Dahilan:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Tala ng pagsasanib",
-       "pagemerge-logentry": "sinanib ang [[$1]] sa [[$2]] (mga pagbabago hanggang sa $3)",
        "revertmerge": "Paghiwalayin",
        "mergelogpagetext": "Nasa ibaba ang isang talaan ng mga pinakakamakailan lamang na mga pagsasanib ng isang kasaysayan ng pahina patungo sa isa pa.",
        "history-title": "Kasaysayan sa pagbago ng \"$1\"",
        "searchrelated": "kaugnay",
        "searchall": "lahat",
        "showingresults": "Ipinapakita sa ibaba ang magpahanggang sa {{PLURAL:$1|'''1''' resultang|'''$1''' mga resultang}} nagsisimula sa #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Resultang '''$1''' ng '''$3'''|Mga resultang '''$1 - $2''' ng '''$3'''}} para sa '''$4'''",
        "search-nonefound": "Walang mga resultang tumutugma sa katanungan/pagtatanong.",
        "powersearch-legend": "Paghahanap na may mas mataas na antas",
        "powersearch-ns": "Maghanap sa mga espasyo ng pangalan:",
        "unusedtemplateswlh": "ibang mga ugnay",
        "randompage": "Pahinang walang-pili",
        "randompage-nopages": "Walang mga pahina sa sumusunod na {{PLURAL:$2|ngalan-espasyo|mga ngalan-espasyo}}: $1.",
-       "randomincategory-selectcategory-submit": "Gawin",
        "randomredirect": "Pagkargang walang-pili",
        "randomredirect-nopages": "Walang mga pagkarga sa ngalan-espasyong \"$1\".",
        "statistics": "Mga estadistika",
        "statistics-header-pages": "Mga estadistika ng pahina",
        "statistics-header-edits": "Mga estadistika sa mga pagbabago",
-       "statistics-header-views": "Tingnan ang mga estadistika",
        "statistics-header-users": "Mga estadistika sa mga tagagamit",
        "statistics-header-hooks": "Ibang mga estadistika",
        "statistics-articles": "Mga pahina ng nilalaman",
        "statistics-files": "Ikinargang mga talaksan",
        "statistics-edits": "Naihanda na ang mga pagbabago ng pahina mula sa {{SITENAME}}",
        "statistics-edits-average": "Karaniwang pagbabago sa bawat pahina",
-       "statistics-views-total": "Kabuuan ng mga pagtanaw",
-       "statistics-views-total-desc": "Hindi kabilang ang mga pagtanaw sa mga pahinang hindi umiiral at mga pahinang natatangi",
-       "statistics-views-peredit": "Pagtingin sa bawat pagbabago",
        "statistics-users": "Mga nakatalang [[Special:ListUsers|tagagamit]]",
        "statistics-users-active": "Mga masusugid na tagagamit <small>(mga nakatalang mang-aambag sa buwang ito)</small>",
        "statistics-users-active-desc": "Mga tagagamit na nagsagawa ng isang galaw/gawain sa huling {{PLURAL:$1|araw|$1 mga araw}}",
-       "statistics-mostpopular": "Mga pinakarinarayong pahina",
        "doubleredirects": "Mga dobleng karga",
        "doubleredirectstext": "Nagtatala ang pahinang ito ng mga pahinang pumupunta sa iba pang mga pahinang nililipatan.  Naglalaman ang bawat hanay ng mga kawing sa una ang pangalawang kapupuntahan, maging ng puntiryang pangalawang kapupuntahan, na karaniwang \"tunay\" na puntiryang pahina, na dapat kinatuturuan ng unang pupuntahan.\nNasugpo na ang mga ipinasok na <del>inekisan</del>.",
        "double-redirect-fixed-move": "Inilipat na ang [[$1]], isa na ngayon itong panuto/panturo patungo sa [[$2]]",
        "uncategorizedtemplates": "Hindi nakakategoryang mga suleras",
        "unusedcategories": "Hindi ginagamit na mga kategorya",
        "unusedimages": "Hindi ginagamit na mga talaksan",
-       "popularpages": "Mga popular na pahina",
        "wantedcategories": "Kinakailangang mga kategorya",
        "wantedpages": "Kinakailangang mga pahina",
        "wantedpages-badtitle": "Hindi tanggap na pamagat sa loob ng pangkat ng kinalabasan: $1",
        "booksources": "Mga mapagkukunang aklat",
        "booksources-search-legend": "Maghanap ng mapagkukunang aklat",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Puntahan",
+       "booksources-search": "Hanapin",
        "booksources-text": "Matatagpuan sa ibaba ang isang tala ng mga kawil patungo sa ibang mga website na nagtitinda ng mga bago at gamit nang aklat, at maaaring may iba pang impormasyon ito tungkol sa mga aklat na hinahanap mo:",
        "booksources-invalid-isbn": "Tila mukhang hindi yata katanggap-tanggap ang ibinigay na ISBN; pakisuri kung may mga kamalian ang pagkakasip/pagkakakopya mula sa orihinal na pinagmulan.",
        "specialloguserlabel": "Tagaganap:",
        "wlheader-enotif": "Umiiral ang pagpapahayag sa pamamagitan ng e-liham.",
        "wlheader-showupdated": "Ipinapakitang may '''makakapal na mga panitik''' ang nabagong/binagong mga pahina mula pa noong huli mong pagdalaw sa kanila",
        "wlnote": "Nasa ibaba ang {{PLURAL:$1|pinakahuling pagbabago|pinakahuling '''$1''' mga pagbabago}} sa loob ng huling {{PLURAL:$2|oras|'''$2''' mga oras}}, magmula noong $3 sa ganap na ika-$4.",
-       "wlshowlast": "Ipakita ang huling $1 mga oras $2 mga araw $3",
+       "wlshowlast": "Ipakita ang huling $1 mga oras $2 mga araw",
        "watchlist-options": "Mga pagpipilian para sa talaan ng mga binabantayan",
        "watching": "Isinasama sa mga binabantayan...",
        "unwatching": "Tinatanggal mula sa mga binabantayan...",
        "import": "Mag-angkat ng pahina",
        "importinterwiki": "Angkat na transwiki",
        "import-interwiki-text": "Pumili ng isang wiki at pamagat ng pahina na iaangkat.\nMapapanatili ang mga petsa ng pagbabago at mga pangalan ng patnugot.\nNaitatala sa [[Special:Log/import|tala ng inangkat]] ang lahat ng mga transwiking aksyon para sa pag-angkat.",
-       "import-interwiki-source": "Batayang wiki/pahina:",
        "import-interwiki-history": "Kopyahin ang lahat ng mga bersyon ng kasaysayan para sa pahinang ito",
        "import-interwiki-templates": "Isama ang lahat ng mga suleras",
        "import-interwiki-submit": "Mag-angkat",
        "pageinfo-robot-policy": "Katayuan ng makinang panghanap",
        "pageinfo-robot-index": "Matataluntunan",
        "pageinfo-robot-noindex": "Hindi matataluntunan",
-       "pageinfo-views": "Bilang ng mga pagtanaw",
        "pageinfo-watchers": "Bilang ng mga nagbabantay ng pahina",
        "pageinfo-redirects-name": "Napapapunta sa pahinang ito",
        "pageinfo-redirects-value": "$1",
        "exif-urgency-low": "Mababa ( $1 )",
        "exif-urgency-high": "Mataas ($1)",
        "exif-urgency-other": "Pagkakauna-unang tinukoy ng tagagamit ($1)",
-       "watchlistall2": "lahat",
        "namespacesall": "lahat",
        "monthsall": "lahat",
        "confirmemail": "Patotohanan ang adres ng e-liham",
        "logentry-newusers-create2": "Lumikha si $1 ng isang kuwenta ng tagagamit na $3",
        "logentry-newusers-autocreate": "Automatikong {{GENDER:$2|inilikha}} ang account ng tagagamit na $1",
        "rightsnone": "(wala)",
+       "revdelete-summary": "buod ng pagbabago",
        "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:",
index 79b7b31..b3bc4dc 100644 (file)
        "changeemail-newemail": "Е-номә тожә унвон:",
        "changeemail-none": "(ни)",
        "changeemail-submit": "Е-номә дәгиш кардеј",
-       "changeemail-cancel": "Ләғв карде",
        "bold_sample": "Нимәтындә шрифт",
        "bold_tip": "Нимәтындә шрифт",
        "italic_sample": "Курсивә мәтн",
        "search-interwiki-more": "(һәнијән)",
        "searchrelated": "ангыл кардә быә",
        "searchall": "Һәммәј",
-       "showingresultsheader": "{{PLURAL:$5|Нәтиҹә'''$1''' из '''$3'''|Нәтиҹон '''$1 — $2''' че '''$3'''}} бо '''$4'''",
        "search-nonefound": "Бә шымә хәбәсә ујғун омә сәкыштә пәјдо ныбе.",
        "powersearch-toggleall": "Һәммәј",
        "preferences": "Кукон",
        "pager-older-n": "{{PLURAL:$1|1 тикиән канә|$1 ән канә}}",
        "booksources": "Китобон сәвонон",
        "booksources-search-legend": "Китоби барәдә мәлумоти нәве",
-       "booksources-go": "Нәве",
        "log": "Журналон",
        "allpages": "Һәммәј сәһифон",
        "allarticles": "Һәммәј сәһифон",
        "watch": "Думотоно егыниеј",
        "unwatch": "Думотоно ныегыниеј",
        "watchlist-details": "Мызокирә сәһифон ныашмардеј, шымә ноғо доә сијоһиәдә {{PLURAL:$1|$1 сәһифәје|$1 сәһифәје}}.",
-       "wlshowlast": "Нишо дој бә охонә $1 саат $2 руж $3",
+       "wlshowlast": "Нишо дој бә охонә $1 саат $2 руж",
        "watchlist-options": "Ноғо доә сијоһи пеғандон",
        "actioncomplete": "Һәрәкәт иҹро кардә быә",
        "actionfailed": "Һәрәкәт иҹро кардә бәни",
        "exif-gaincontrol-0": "Ни",
        "exif-saturation-0": "Ади",
        "exif-dc-publisher": "Нәшрәкә",
-       "watchlistall2": "һәммәј",
        "namespacesall": "һәммәј",
        "monthsall": "һәммәј",
        "table_pager_limit_submit": "Давард",
index e8169f7..df34310 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Cbrown1023",
-            "Hakka"
-        ]
-    },
-    "sunday": "Tshipi",
-    "monday": "Mosupologo",
-    "tuesday": "Labobedi",
-    "wednesday": "Laboraro",
-    "thursday": "Labone",
-    "friday": "Labotlhano",
-    "saturday": "Matlhatso",
-    "january": "Firikgong",
-    "february": "Tlhakole",
-    "march": "Mopitlo",
-    "april": "Moranang",
-    "may_long": "Motsheganong",
-    "june": "Seetebosigo",
-    "july": "Phukwi",
-    "august": "Phatwe",
-    "september": "Lwetse",
-    "october": "Phalane",
-    "november": "Ngwanatsele",
-    "december": "Sedimonthole",
-    "january-gen": "Firikgong",
-    "february-gen": "Tlhakole",
-    "march-gen": "Mopitlo",
-    "april-gen": "Moranang",
-    "may-gen": "Motsheganong",
-    "june-gen": "Seetebosigo",
-    "july-gen": "Phukwi",
-    "august-gen": "Phatwe",
-    "september-gen": "Lwetse",
-    "october-gen": "Phalane",
-    "november-gen": "Ngwanatsele",
-    "december-gen": "Sedimonthole",
-    "cancel": "Sutlha",
-    "mytalk": "Puo yame",
-    "navigation": "Tsweletso",
-    "help": "Thuso",
-    "search": "Senka",
-    "searchbutton": "Senka",
-    "go": "Tsamaya",
-    "searcharticle": "Tsamaya",
-    "history_short": "Ditso",
-    "printableversion": "Mokwalo o o ka gatisiwang motlhofo",
-    "permalink": "Kgolagano ya sennelaruri",
-    "edit": "Baakanya",
-    "delete": "Sutlha",
-    "protect": "Sireletsa",
-    "talk": "Puisano",
-    "toolbox": "Lebokoso la dithulusu",
-    "otherlanguages": "Ka dipuo di sele",
-    "currentevents": "Ditiragalo tsa sešeng",
-    "disclaimers": "Tlhapa diatla",
-    "edithelp": "Thuso ya go fetola",
-    "mainpage": "Tsebe ya konokono",
-    "mainpage-description": "Tsebe ya konokono",
-    "portal": "Patlelo ya setšhaba",
-    "portal-url": "Project:Patlelo ya setšhaba",
-    "privacy": "Melawana ya sephiri",
-    "youhavenewmessages": "O na le $1 ($2).",
-    "youhavenewmessagesmulti": "O na le molaetsa o moša mo $1",
-    "editsection": "baakanya",
-    "editold": "baakanya",
-    "nstab-main": "Mokwalo",
-    "nstab-mediawiki": "Molaetsa",
-    "viewsource": "Lebelela motswedi",
-    "yourname": "Leina la modirisi:",
-    "yourpassword": "Selotlolo sa sephiri:",
-    "yourpasswordagain": "Kwala selotlolo sa gago sa sephiri gape:",
-    "remembermypassword": "Gakologelwa ikwadiso yame mo khompiutareng e (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "login": "Ikwadise",
-    "userlogin": "Ikwadise / ipulela tsebe",
-    "logout": "Tswala",
-    "userlogout": "Tswala",
-    "notloggedin": "Ga o a ikwadisa",
-    "createaccount": "Ipulela tsebe",
-    "summary": "Tshoboko:",
-    "minoredit": "Se ke paakanyo e potlana",
-    "watchthis": "Lebelela tsebe e",
-    "savearticle": "Boloka tsebe",
-    "showpreview": "Supa gore go tlaa lebega jang",
-    "showdiff": "Supa diphetogo",
-    "currentrev": "Dipaakanyo tsa sešeng",
-    "currentrevisionlink": "Dipaakanyo tsa sešeng",
-    "mypreferences": "Dikgatlhegelo tsa me",
-    "youremail": "E-mail:",
-    "username": "Leina la modirisi:",
-    "recentchanges": "Diphetogo tsa sešeng",
-    "recentchangeslinked": "Diphetogo tse di tsamaelanang",
-    "recentchangeslinked-feed": "Diphetogo tse di tsamaelanang",
-    "recentchangeslinked-toolbox": "Diphetogo tse di tsamaelanang",
-    "upload": "Tsenya mokwalo o o tswang kwantle",
-    "uploadbtn": "Tsenya mokwalo o o tswang kwantle",
-    "watchthisupload": "Lebelela tsebe e",
-    "randompage": "Tsebe e e sa tlhomamang",
-    "move": "Suta",
-    "movethispage": "Sutisa tsebe e",
-    "mywatchlist": "Mafoko a ke a etseng tlhoko",
-    "watchnologin": "Ga o a ikwadisa",
-    "watch": "Lebelela",
-    "watchthispage": "Lebelela tsebe e",
-    "prot_1movedto2": "[[$1]] o sutisediwa kwa go [[$2]]",
-    "undelete-search-submit": "Senka",
-    "mycontris": "Seabe same",
-    "whatlinkshere": "Ke eng se se gokaganang fa",
-    "move-page-legend": "Sutisa tsebe",
-    "movearticle": "Sutisa tsebe:",
-    "movepagebtn": "Sutisa tsebe",
-    "movereason": "Lebaka:",
-    "allmessages": "Melaetsa ya maranyane",
-    "specialpages": "Diphetogo tse di faphegileng"
+       "@metadata": {
+               "authors": [
+                       "Cbrown1023",
+                       "Hakka"
+               ]
+       },
+       "sunday": "Tshipi",
+       "monday": "Mosupologo",
+       "tuesday": "Labobedi",
+       "wednesday": "Laboraro",
+       "thursday": "Labone",
+       "friday": "Labotlhano",
+       "saturday": "Matlhatso",
+       "january": "Firikgong",
+       "february": "Tlhakole",
+       "march": "Mopitlo",
+       "april": "Moranang",
+       "may_long": "Motsheganong",
+       "june": "Seetebosigo",
+       "july": "Phukwi",
+       "august": "Phatwe",
+       "september": "Lwetse",
+       "october": "Phalane",
+       "november": "Ngwanatsele",
+       "december": "Sedimonthole",
+       "january-gen": "Firikgong",
+       "february-gen": "Tlhakole",
+       "march-gen": "Mopitlo",
+       "april-gen": "Moranang",
+       "may-gen": "Motsheganong",
+       "june-gen": "Seetebosigo",
+       "july-gen": "Phukwi",
+       "august-gen": "Phatwe",
+       "september-gen": "Lwetse",
+       "october-gen": "Phalane",
+       "november-gen": "Ngwanatsele",
+       "december-gen": "Sedimonthole",
+       "cancel": "Sutlha",
+       "mytalk": "Puo yame",
+       "navigation": "Tsweletso",
+       "help": "Thuso",
+       "search": "Senka",
+       "searchbutton": "Senka",
+       "go": "Tsamaya",
+       "searcharticle": "Tsamaya",
+       "history_short": "Ditso",
+       "printableversion": "Mokwalo o o ka gatisiwang motlhofo",
+       "permalink": "Kgolagano ya sennelaruri",
+       "edit": "Baakanya",
+       "delete": "Sutlha",
+       "protect": "Sireletsa",
+       "talk": "Puisano",
+       "toolbox": "Lebokoso la dithulusu",
+       "otherlanguages": "Ka dipuo di sele",
+       "currentevents": "Ditiragalo tsa sešeng",
+       "disclaimers": "Tlhapa diatla",
+       "edithelp": "Thuso ya go fetola",
+       "mainpage": "Tsebe ya konokono",
+       "mainpage-description": "Tsebe ya konokono",
+       "portal": "Patlelo ya setšhaba",
+       "portal-url": "Project:Patlelo ya setšhaba",
+       "privacy": "Melawana ya sephiri",
+       "youhavenewmessages": "O na le $1 ($2).",
+       "youhavenewmessagesmulti": "O na le molaetsa o moša mo $1",
+       "editsection": "baakanya",
+       "editold": "baakanya",
+       "nstab-main": "Mokwalo",
+       "nstab-mediawiki": "Molaetsa",
+       "viewsource": "Lebelela motswedi",
+       "yourname": "Leina la modirisi:",
+       "yourpassword": "Selotlolo sa sephiri:",
+       "yourpasswordagain": "Kwala selotlolo sa gago sa sephiri gape:",
+       "remembermypassword": "Gakologelwa ikwadiso yame mo khompiutareng e (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "login": "Ikwadise",
+       "userlogin": "Ikwadise / ipulela tsebe",
+       "logout": "Tswala",
+       "userlogout": "Tswala",
+       "notloggedin": "Ga o a ikwadisa",
+       "createaccount": "Ipulela tsebe",
+       "summary": "Tshoboko:",
+       "minoredit": "Se ke paakanyo e potlana",
+       "watchthis": "Lebelela tsebe e",
+       "savearticle": "Boloka tsebe",
+       "showpreview": "Supa gore go tlaa lebega jang",
+       "showdiff": "Supa diphetogo",
+       "currentrev": "Dipaakanyo tsa sešeng",
+       "currentrevisionlink": "Dipaakanyo tsa sešeng",
+       "mypreferences": "Dikgatlhegelo tsa me",
+       "youremail": "E-mail:",
+       "username": "Leina la modirisi:",
+       "recentchanges": "Diphetogo tsa sešeng",
+       "recentchangeslinked": "Diphetogo tse di tsamaelanang",
+       "recentchangeslinked-feed": "Diphetogo tse di tsamaelanang",
+       "recentchangeslinked-toolbox": "Diphetogo tse di tsamaelanang",
+       "upload": "Tsenya mokwalo o o tswang kwantle",
+       "uploadbtn": "Tsenya mokwalo o o tswang kwantle",
+       "watchthisupload": "Lebelela tsebe e",
+       "randompage": "Tsebe e e sa tlhomamang",
+       "move": "Suta",
+       "movethispage": "Sutisa tsebe e",
+       "mywatchlist": "Mafoko a ke a etseng tlhoko",
+       "watchnologin": "Ga o a ikwadisa",
+       "watch": "Lebelela",
+       "watchthispage": "Lebelela tsebe e",
+       "prot_1movedto2": "[[$1]] o sutisediwa kwa go [[$2]]",
+       "undelete-search-submit": "Senka",
+       "mycontris": "Seabe same",
+       "whatlinkshere": "Ke eng se se gokaganang fa",
+       "move-page-legend": "Sutisa tsebe",
+       "movearticle": "Sutisa tsebe:",
+       "movepagebtn": "Sutisa tsebe",
+       "movereason": "Lebaka:",
+       "allmessages": "Melaetsa ya maranyane",
+       "specialpages": "Diphetogo tse di faphegileng"
 }
index 1aed46c..f8f2986 100644 (file)
        "randomredirect": "Leʻei noa pē",
        "statistics": "Sitesitesika",
        "statistics-header-users": "Sitesitesika ʻo e ʻetita",
-       "statistics-mostpopular": "Ko e ngaahi peesi naʻe vakai ki ai lahi taha",
        "doubleredirects": "Ngaahi leʻeleʻei",
        "doubleredirectstext": "ʻOku ʻasi ʻi he ʻotu kotoa pē ha ongo fehokotaki ki he leʻei, mo e leʻeleʻei, mo e kamataʻanga ʻo e leʻeleʻei, taimi ʻe niʻihi ko e peesi totonu ia, ʻoku taau ʻe tuhu ki ai ʻe he leʻei.",
        "brokenredirects": "Ngaahi leʻei maumau",
        "uncategorizedtemplates": "Sīpinga taʻefaʻahingaʻi",
        "unusedcategories": "Faʻahinga taʻengāueʻaki",
        "unusedimages": "Faitā taʻengāueʻaki",
-       "popularpages": "Peesi manakoa",
        "wantedcategories": "Faʻahinga fiemaʻu",
        "wantedpages": "Kupu fiemaʻu",
        "wantedfiles": "Faile fiemaʻu",
        "pager-newer-n": "kupu foʻou ange ʻe $1",
        "pager-older-n": "kupu motuʻa ange ʻe $1",
        "booksources": "Ngaahi tupunga tohi",
-       "booksources-go": "Fai ā",
        "specialloguserlabel": "ʻEtita:",
        "speciallogtitlelabel": "Hingoa:",
        "log": "Tohinoa",
        "wlheader-enotif": "Kuo fakamafeiaʻi tala mei he tohila",
        "wlheader-showupdated": "*Ko e ngaahi peesi kuo liliu talu he taimi hoʻo ʻaʻahi ki ai, ʻoku ʻasi mai fakasinolahi",
        "wlnote": "ʻOku ʻasi ʻi lalo ʻa e liliu fakamuimui ʻe $1 ʻi he houa fakamuimui ʻe <b>$2</b>.",
-       "wlshowlast": "ʻAsi mai houa fakamuimui ʻe $1, ʻaho ʻe $2, $3",
+       "wlshowlast": "ʻAsi mai houa fakamuimui ʻe $1, ʻaho ʻe $2,",
        "watching": "ʻOku leʻo...",
        "unwatching": "ʻOku taʻeleʻo...",
        "created": "kuo fakatupu",
        "exif-gpsspeed-m": "Maile he houa",
        "exif-gpsdirection-t": "Tūkufua moʻoni",
        "exif-gpsdirection-m": "Tūkufua fakamakineti",
-       "watchlistall2": "kātoa",
        "namespacesall": "vā kotoa",
        "confirmemail": "Fakamoʻoniʻi ho tuʻasila tohila",
        "confirmemail_noemail": "Naʻe ʻikai te ke fakamoʻoniʻi ʻa e tohila totonu ʻi he [[Special:Preferences|faʻiteliha ʻaʻau]].",
index 9f1b09e..67f4b5f 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "http://tokipona.wikia.com sysops"
-        ]
-    },
-    "january": "tenpo mun pi nanpa wan",
-    "february": "tenpo mun pi nanpa tu",
-    "march": "tenpo mun pi nanpa tu wan",
-    "april": "tenpo mun pi nanpa tu tu",
-    "may_long": "tenpo mun pi nanpa luka",
-    "june": "tenpo mun pi nanpa luka wan",
-    "july": "tenpo mun pi nanpa luka tu",
-    "august": "tenpo mun pi nanpa luka tu wan",
-    "september": "tenpo mun pi nanpa luka tu tu",
-    "october": "tenpo mun pi nanpa luka luka",
-    "november": "tenpo mun pi nanpa luka luka wan",
-    "december": "tenpo mun pi nanpa luka luka tu",
-    "category_header": "lipu lon kulupu lipu \"$1\"",
-    "subcategories": "kulupu lipu lili",
-    "listingcontinuesabbrev": " li awen",
-    "article": "lipu sona",
-    "newwindow": "(ona li open e lupa sin)",
-    "cancel": "ike",
-    "mytalk": "toki mi",
-    "navigation": "lipu suli",
-    "help": "mi sona ala",
-    "search": "o lukin jo",
-    "go": "o tawa",
-    "history": "o lukin e lipu ni pi tenpo pini",
-    "history_short": "lipu ni pi tenpo pini",
-    "printableversion": "lipu ni o kama lipu len",
-    "permalink": "nimi open kiwen",
-    "edit": "o ante",
-    "editthispage": "o ante e lipu ni",
-    "delete": "o weka",
-    "deletethispage": "o weka e lipu ni",
-    "protect": "mi taso o ken ante",
-    "protectthispage": "mi taso o ken ante e lipu ni",
-    "unprotect": "jan ali o ken ante",
-    "unprotectthispage": "jan ale o ken ante e lipu ni",
-    "talkpage": "Talk page",
-    "specialpage": "lipu suli",
-    "talk": "o toki",
-    "toolbox": "ilo",
-    "otherlanguages": "toki ante",
-    "redirectedfrom": "(tan $1)",
-    "aboutsite": "lipu sona pi toki pona li seme?",
-    "aboutpage": "Project:lipu sona pi toki pona li seme?",
-    "copyright": "lipu ken $1 li lawa e lipu ni.",
-    "currentevents": "seme li sin lon ma?",
-    "disclaimers": "wile ala",
-    "edithelp": "mi sona ala e ante",
-    "mainpage": "lipu lawa",
-    "mainpage-description": "lipu lawa",
-    "portal": "lipu pi kulupu ni",
-    "privacy": "ken pi awen weka",
-    "ok": "pona",
-    "retrievedfrom": "tan $1",
-    "editsection": "o ante",
-    "toc": "poki lawa",
-    "showtoc": "o suli e poki ni.",
-    "hidetoc": "o lili e poki ni",
-    "nstab-main": "lipu sona",
-    "nstab-user": "lipu jan",
-    "nstab-special": "suli",
-    "nstab-image": "lipu nanpa",
-    "nstab-mediawiki": "nimi",
-    "nstab-template": "lipu mama",
-    "nstab-help": "pana pona",
-    "nstab-category": "kulupu lipu",
-    "logout": "mi o tawa",
-    "userlogout": "mi o tawa",
-    "summary": "ante li seme:",
-    "minoredit": "ante ni li lili taso",
-    "watchthis": "mi wile sona e ante ale pi lipu ni lon tenpo kama",
-    "savearticle": "o awen",
-    "preview": "lukin taso",
-    "showpreview": "mi wile lukin taso e ante",
-    "editing": "mi ante e: $1",
-    "editingcomment": "mi ante e lipu $1 (wan sin)",
-    "copyrightwarning": "o sona e ni: ken $2 (o lukin e $1) li lawa tawa ante ali lon {{SITENAME}} li. jan li ken ante e toki sina li ken pana e ona tawa jan ante. sina wile ala e ni la, o sitelen ala lon lipu ni.<br />\nkin la sina toki e ni: toki sina ni li tan sina taso anu lipu pi ken ali.\n'''SINA KEN ALA LA, O PANA ALA E TOKI PI KEN LILI TAWA LIPU NI!'''",
-    "templatesused": "{{PLURAL:$1|Template|Templates}} used on this page:",
-    "histfirst": "pini taso",
-    "histlast": "sin taso",
-    "prevn": "nanpa {{PLURAL:$1|$1}} pini",
-    "nextn": "nanpa {{PLURAL:$1|$1}} kama",
-    "viewprevnext": "o lukin e ($1 {{int:pipe-separator}} $2) ($3).",
-    "preferences": "seme li pona tawa mi",
-    "recentchanges": "lipu seme li ante?",
-    "minoreditletter": "ante lili",
-    "newpageletter": "lipu sin",
-    "recentchangeslinked": "ante sama",
-    "recentchangeslinked-feed": "ante sama",
-    "recentchangeslinked-toolbox": "ante sama",
-    "upload": "o pana e lipu nanpa",
-    "filedesc": "ante li seme",
-    "fileuploadsummary": "ante li seme:",
-    "file-anchor-link": "Lipu nanpa",
-    "randompage": "mi wile lukin e lipu ante",
-    "lonelypages": "lipu ni li jo ala e lipu sama",
-    "move": "o tawa",
-    "movethispage": "o pana e nimi sin",
-    "allpages": "lipu ale",
-    "categories": "kulupu lipu",
-    "watchlist": "mi sona e ante pi lipu seme",
-    "watch": "o sona e ante",
-    "watchthispage": "mi wile sona e ante ale pi lipu ni lon tenpo kama",
-    "unwatchthispage": "mi wile ala sona e ante ale pi lipu ni lon tenpo kama",
-    "mycontris": "mi ante e lipu seme",
-    "whatlinkshere": "lipu seme li tawa ni?",
-    "specialpages": "lipu suli"
+       "@metadata": {
+               "authors": [
+                       "http://tokipona.wikia.com sysops"
+               ]
+       },
+       "january": "tenpo mun pi nanpa wan",
+       "february": "tenpo mun pi nanpa tu",
+       "march": "tenpo mun pi nanpa tu wan",
+       "april": "tenpo mun pi nanpa tu tu",
+       "may_long": "tenpo mun pi nanpa luka",
+       "june": "tenpo mun pi nanpa luka wan",
+       "july": "tenpo mun pi nanpa luka tu",
+       "august": "tenpo mun pi nanpa luka tu wan",
+       "september": "tenpo mun pi nanpa luka tu tu",
+       "october": "tenpo mun pi nanpa luka luka",
+       "november": "tenpo mun pi nanpa luka luka wan",
+       "december": "tenpo mun pi nanpa luka luka tu",
+       "category_header": "lipu lon kulupu lipu \"$1\"",
+       "subcategories": "kulupu lipu lili",
+       "listingcontinuesabbrev": " li awen",
+       "article": "lipu sona",
+       "newwindow": "(ona li open e lupa sin)",
+       "cancel": "ike",
+       "mytalk": "toki mi",
+       "navigation": "lipu suli",
+       "help": "mi sona ala",
+       "search": "o lukin jo",
+       "go": "o tawa",
+       "history": "o lukin e lipu ni pi tenpo pini",
+       "history_short": "lipu ni pi tenpo pini",
+       "printableversion": "lipu ni o kama lipu len",
+       "permalink": "nimi open kiwen",
+       "edit": "o ante",
+       "editthispage": "o ante e lipu ni",
+       "delete": "o weka",
+       "deletethispage": "o weka e lipu ni",
+       "protect": "mi taso o ken ante",
+       "protectthispage": "mi taso o ken ante e lipu ni",
+       "unprotect": "jan ali o ken ante",
+       "unprotectthispage": "jan ale o ken ante e lipu ni",
+       "talkpage": "Talk page",
+       "specialpage": "lipu suli",
+       "talk": "o toki",
+       "toolbox": "ilo",
+       "otherlanguages": "toki ante",
+       "redirectedfrom": "(tan $1)",
+       "aboutsite": "lipu sona pi toki pona li seme?",
+       "aboutpage": "Project:lipu sona pi toki pona li seme?",
+       "copyright": "lipu ken $1 li lawa e lipu ni.",
+       "currentevents": "seme li sin lon ma?",
+       "disclaimers": "wile ala",
+       "edithelp": "mi sona ala e ante",
+       "mainpage": "lipu lawa",
+       "mainpage-description": "lipu lawa",
+       "portal": "lipu pi kulupu ni",
+       "privacy": "ken pi awen weka",
+       "ok": "pona",
+       "retrievedfrom": "tan $1",
+       "editsection": "o ante",
+       "toc": "poki lawa",
+       "showtoc": "o suli e poki ni.",
+       "hidetoc": "o lili e poki ni",
+       "nstab-main": "lipu sona",
+       "nstab-user": "lipu jan",
+       "nstab-special": "suli",
+       "nstab-image": "lipu nanpa",
+       "nstab-mediawiki": "nimi",
+       "nstab-template": "lipu mama",
+       "nstab-help": "pana pona",
+       "nstab-category": "kulupu lipu",
+       "logout": "mi o tawa",
+       "userlogout": "mi o tawa",
+       "summary": "ante li seme:",
+       "minoredit": "ante ni li lili taso",
+       "watchthis": "mi wile sona e ante ale pi lipu ni lon tenpo kama",
+       "savearticle": "o awen",
+       "preview": "lukin taso",
+       "showpreview": "mi wile lukin taso e ante",
+       "editing": "mi ante e: $1",
+       "editingcomment": "mi ante e lipu $1 (wan sin)",
+       "copyrightwarning": "o sona e ni: ken $2 (o lukin e $1) li lawa tawa ante ali lon {{SITENAME}} li. jan li ken ante e toki sina li ken pana e ona tawa jan ante. sina wile ala e ni la, o sitelen ala lon lipu ni.<br />\nkin la sina toki e ni: toki sina ni li tan sina taso anu lipu pi ken ali.\n'''SINA KEN ALA LA, O PANA ALA E TOKI PI KEN LILI TAWA LIPU NI!'''",
+       "templatesused": "{{PLURAL:$1|Template|Templates}} used on this page:",
+       "histfirst": "pini taso",
+       "histlast": "sin taso",
+       "prevn": "nanpa {{PLURAL:$1|$1}} pini",
+       "nextn": "nanpa {{PLURAL:$1|$1}} kama",
+       "viewprevnext": "o lukin e ($1 {{int:pipe-separator}} $2) ($3).",
+       "preferences": "seme li pona tawa mi",
+       "recentchanges": "lipu seme li ante?",
+       "minoreditletter": "ante lili",
+       "newpageletter": "lipu sin",
+       "recentchangeslinked": "ante sama",
+       "recentchangeslinked-feed": "ante sama",
+       "recentchangeslinked-toolbox": "ante sama",
+       "upload": "o pana e lipu nanpa",
+       "filedesc": "ante li seme",
+       "fileuploadsummary": "ante li seme:",
+       "file-anchor-link": "Lipu nanpa",
+       "randompage": "mi wile lukin e lipu ante",
+       "lonelypages": "lipu ni li jo ala e lipu sama",
+       "move": "o tawa",
+       "movethispage": "o pana e nimi sin",
+       "allpages": "lipu ale",
+       "categories": "kulupu lipu",
+       "watchlist": "mi sona e ante pi lipu seme",
+       "watch": "o sona e ante",
+       "watchthispage": "mi wile sona e ante ale pi lipu ni lon tenpo kama",
+       "unwatchthispage": "mi wile ala sona e ante ale pi lipu ni lon tenpo kama",
+       "mycontris": "mi ante e lipu seme",
+       "whatlinkshere": "lipu seme li tawa ni?",
+       "specialpages": "lipu suli"
 }
index 62e90fc..89f476c 100644 (file)
@@ -6,7 +6,8 @@
                        "Iketsi",
                        "Wantok",
                        "Wytukaze",
-                       "לערי ריינהארט"
+                       "לערי ריינהארט",
+                       "सरोज कुमार ढकाल"
                ]
        },
        "tog-underline": "Putim lain ananit long ol link:",
        "unusedcategoriestext": "Ol dispela grup istap yet, tasol i no gat wanpela pes o grup i stap insait long ol.",
        "booksources": "Ol as bilong buk",
        "booksources-search-legend": "Painim long ol buk as",
-       "booksources-go": "Go",
        "specialloguserlabel": "Yusa:",
        "speciallogtitlelabel": "Nem:",
        "log": "Ol ripot",
        "unwatchthispage": "Pinis long lukautim",
        "watchlist-details": "$1 pes istap long lukautbuk (dispela namba i no kaunim ol pes bilong toktok).",
        "wlheader-showupdated": "Ol pes i senis pinis bihain long taim yu lukim ol igat nem i '''strongpela'''",
-       "wlshowlast": "Lukim dispela $1 aua $2 de $3",
+       "wlshowlast": "Lukim dispela $1 aua $2 de",
        "watchlist-options": "Ol laik bilong Lukautbuk",
        "watching": "Wet liklik, i go insait long lukautbuk nau...",
        "unwatching": "Wet liklik, i raus nau long lukautbuk...",
        "metadata": "Metadata",
        "exif-imagedescription": "Nem bilong piksa",
        "exif-meteringmode-255": "Narapela",
-       "watchlistall2": "olgeta",
        "namespacesall": "ol",
        "monthsall": "olgeta",
        "scarytranscludetoolong": "[URL i longpela tumas]",
index 6471c13..4c3c97e 100644 (file)
                        "아라",
                        "Arystanbek",
                        "Sayginer",
-                       "Sucsuzz"
+                       "Sucsuzz",
+                       "Kafkasmurat",
+                       "Violetanka",
+                       "Trockya"
                ]
        },
        "tog-underline": "Bağlantıların altını çiz:",
@@ -78,6 +81,7 @@
        "tog-watchdefault": "Düzenleme yaptığım sayfaları ve dosyaları izleme listeme ekle",
        "tog-watchmoves": "Taşıdığım sayfaları ve dosyaları izleme listeme ekle",
        "tog-watchdeletion": "Sildiğim sayfaları ve dosyaları izleme listeme ekle",
+       "tog-watchrollback": "Eski haline getirme kullandığım sayfaları izleme listeme ekle",
        "tog-minordefault": "Varsayılan olarak bütün düzenlemeleri küçük olarak işaretle",
        "tog-previewontop": "Ön izlemeyi düzenleme kutusunun üstünde göster",
        "tog-previewonfirst": "İlk düzenlemede ön izlemeyi göster",
        "index-category": "Dizinli sayfalar",
        "noindex-category": "Dizinli olmayan sayfalar",
        "broken-file-category": "Bozuk dosya bağlantıları içeren sayfalar",
+       "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "Hakkında",
        "article": "İçerik sayfası",
        "newwindow": "(yeni bir pencerede açılır)",
        "otherlanguages": "Diğer dillerde",
        "redirectedfrom": "($1 sayfasından yönlendirildi)",
        "redirectpagesub": "Yönlendirme sayfası",
+       "redirectto": "Şuraya yönlendir:",
        "lastmodifiedat": "Bu sayfa son olarak $1, $2 tarihinde güncellenmiştir.",
        "viewcount": "Bu sayfaya {{PLURAL:$1|bir|$1 }} defa erişilmiş.",
        "protectedpage": "Korumalı sayfa",
        "pool-timeout": "Kilit için zaman bitimi bekleniyor",
        "pool-queuefull": "Havuz sırası dolu",
        "pool-errorunknown": "Bilinmeyen hata",
+       "pool-servererror": "Anket sayacı hizmeti kullanılamıyor ($1).",
        "aboutsite": "{{SITENAME}} hakkında",
        "aboutpage": "Project:Hakkında",
        "copyright": "Aksi belirtilmedikçe içerik $1 altındadır.",
        "viewsourcetext": "Bu sayfanın kaynağını görebilir ve kopyalayabilirsiniz:",
        "viewyourtext": "Bu sayfaya '''yaptığınız değişikliklerin''' kaynağını görünteleyip kopyalayabilirsiniz:",
        "protectedinterface": "Bu sayfa yazılım için arayüz metni sağlamaktadır ve kötüye kullanımı önlemek için korumaya alınmıştır. Eklemek ya da bütün vikilerdeki çevirileri değiştirmek için lütfen MediaWiki yerelleştirme projesi [//translatewiki.net/ translatewiki.net]'i kullanın.",
-       "editinginterface": "'''UYARI:''' Wiki yazılımı için arayüz sağlamakta kullanılan bir sayfayı değiştirmektesiniz. Bu sayfadaki değişiklikler kullanıcı arayüzünü diğer kullanıcılar için de değiştirecektir. Çeviriler için, lütfen [//translatewiki.net/wiki/Main_Page?setlang=tr translatewiki.net]'yi kullanarak MediaWiki yerelleştirme projesini dikkate alınız.",
+       "editinginterface": "<strong>Uyarı:</strong> Yazılım için arayüz metni sağlayan bir sayfayı değiştiriyorsunuz.\nBu sayfada yapılacak değişiklikler diğer kullanıcıların vikilerindeki kullanıcı arayüzlerinin görünümünü de etkileyecektir.",
+       "translateinterface": "Tüm vikilerde çeviri eklemek veya çevirileri değiştirmek için lütfen MediaWiki yerelleştirme projesini [//translatewiki.net/] kullanın.",
        "cascadeprotected": "Bu sayfa değişiklik yapılması engellenmiştir, çünkü  \"kademeli\" seçeneği aktif hale getirilerek koruma altına alınan {{PLURAL:$1|sayfada|sayfada}} kullanılmaktadır:\n$2",
        "namespaceprotected": "'''$1''' alandındaki sayfaları düzenlemeye izniniz bulunmamaktadır.",
        "customcssprotected": "Bu sayfayı değiştirmeye yetkiniz bulunmamaktadır, çünkü bu sayfa başka bir kullanıcının kişisel ayarlarını içermektedir.",
        "invalidtitle-knownnamespace": "\"$2\" alan adı için \"$3\" metni geçersiz bir başlık",
        "invalidtitle-unknownnamespace": "Bilinmeyen $1 ad alanı sayısı ve geçersiz \"$2\" başlık",
        "exception-nologin": "Giriş yapılmamış",
-       "exception-nologin-text": "Bu sayfaya ya da eyleme erişmek için lütfen [[Special:Userlogin|oturum açın]].",
+       "exception-nologin-text": "Bu sayfaya ya da eyleme erişmek için lütfen oturum açın.",
        "exception-nologin-text-manual": "Bu sayfaya ya da eyleme erişebilmek için lütfen $1ın.",
        "virus-badscanner": "Yanlış ayarlama: bilinmeyen virüs tarayıcı: ''$1''",
        "virus-scanfailed": "tarama başarısız (kod $1)",
        "createaccount-text": "Birisi {{SITENAME}} sitesinde ($4) sizin e-posta adresinizi kullarak, şifresi \"$3\" olan, \"$2\" isimli bir hesap oluşturdu.\n\nSiteye giriş yapmalı ve parolanızı değiştirmelisiniz.\n\nEğer kullanıcı hesabını yanlışlıkla oluşturmuş iseniz, bu mesajı yoksayabilirsiniz.",
        "login-throttled": "Çok fazla yeni oturum açma girişiminde bulundunuz.\nDevam etmeden önce $1 bekleyin.",
        "login-abort-generic": "Girişiniz başarısız - iptal edilmiş",
+       "login-migrated-generic": "Hesabınız aktarılmış ve kullanıcı adınız artık bu vikide yok.",
        "loginlanguagelabel": "Dil: $1",
        "suspicious-userlogout": "Çıkış isteğiniz reddedildi çünkü bozuk bir tarayıcı ya da önbellekli vekil tarafından gönerilmiş gibi görünüyor.",
        "createacct-another-realname-tip": "Gerçek adınız isteğe bağlıdır.\nEğer gerçek adınızı belirtirseniz, çalışmalarınıza atıfta bulunulması için de kullanılacaktır.",
        "passwordreset-emailsent-capture": "Aşağıda gözüktüğü gibi bir parola sıfırlama e-postası gönderildi.",
        "passwordreset-emailerror-capture": "Aşağıda gözüktüğü gibi bir parola sıfırlama e-postası oluşturuldu ancak {{GENDER:$2|kullanıcıya}} gönderme işlemi başarısız oldu: $1",
        "changeemail": "E-posta adresini değiştir",
-       "changeemail-header": "Hesabın e-posta adresini değiştirin",
        "changeemail-text": "E-posta adresinizi değiştirmek için bu formu doldurun. Değişikliği onaylamak için parolanızı girmeniz gerekecektir.",
        "changeemail-no-info": "Bu sayfaya doğrudan erişmek için oturum açmanız gereklidir.",
        "changeemail-oldemail": "Mevcut E-posta adresi:",
        "changeemail-none": "(yok)",
        "changeemail-password": "{{SITENAME}} parolanız:",
        "changeemail-submit": "E-posta'yı değiştir",
-       "changeemail-cancel": "İptal",
        "changeemail-throttled": "Çok fazla oturum açma girişiminde bulundunuz.\nLütfen tekrar denemeden önce $1 bekleyin.",
        "resettokens": "Anahtarları sıfırla",
        "resettokens-text": "Burada hesabınızla ilişkili bazı özel verilere erişim izin anahtarları sıfırlayabilirsiniz.\n\n\nSiz yanlışlıkla bunları paylaştıysanız veya hesabınızda bir bozulma varsa bunu yapmalısınız.",
        "showpreview": "Önizlemeyi göster",
        "showdiff": "Değişiklikleri göster",
        "blankarticle": "<strong>Uyarı:</strong> Oluşturduğunuz sayfa boş.\nEğer \"{{int:savearticle}}\" düğmesine tekrar tıklarsanız, sayfa içerik olmadan oluşturulacaktır.",
-       "anoneditwarning": "'''Uyarı:''' Oturum açmadınız.\nIP adresiniz sayfanın değişiklik geçmişine kaydedilecektir.",
+       "anoneditwarning": "<strong>Uyarı:</strong> Giriş yapmadınız. Herhangi bir değişiklik yapmanız durumunda IP adresiniz herkese gözükecektir. Eğer <strong>[$1 giriş yaparsanız]</strong> veya <strong>[$2 bir hesap oluşturursanız]</strong>, edineceğiniz çeşitli yararların yanı sıra yaptığınız değişiklikler de kullanıcı adınıza atfedilecektir.",
        "anonpreviewwarning": "''Giriş yapmadınız. Kaydederseniz, sayfanın değişiklik geçmişine IP adresiniz yazılır.''",
        "missingsummary": "'''Uyarı:''' Herhangi bir özet yazmadın.\nKaydet tuşuna tekrar basarsan sayfa özetsiz kaydedilecek.",
        "missingcommenttext": "Lütfen aşağıda bir açıklama yazınız.",
        "content-model-text": "düz metin",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Yinelenen şablon değişkenleri kullanan sayfalar",
        "expensive-parserfunction-warning": "Uyarı: Bu sayfa çok fazla zengin derleyici fonksiyonu çağrısı içeriyor.\n\nBu $2 çağrıdan az olmalı, şu anda {{PLURAL:$1|1 çağrı var|$1 çağrı var}}.",
        "expensive-parserfunction-category": "Çok fazla zengin derleyici fonksiyonu çağrısına sahip sayfalar",
        "post-expand-template-inclusion-warning": "'''Uyarı''': Şablon içeriği çok büyük.\nBazı şablonlar eklenemeyecek.",
        "logdelete-selected": "{{PLURAL:$1|Seçili kayıt olayı|Seçili kayıt olayları}}:",
        "revdelete-text-text": "Silinen sürümler sayfa geçmişinde yer almaya devam edecek ancak okuyucular tarafından içeriklerine erişilemeyecektir.",
        "revdelete-text-file": "Silinen dosya sürümleri dosya geçmişinde yer almaya devam edecek ancak okuyucular tarafından içerik bölümlerine erişilemeyecektir.",
+       "revdelete-text-others": "Ek kısıtlamalar konulmadıkça diğer yöneticiler silinen bir gizli içeriğe işlemi geri almak için erişebilecek.",
        "revdelete-confirm": "Lütfen, bunu yapmak istediğinizi , sonuçlarını anladığınızı, ve bunu [[{{MediaWiki:Policy-url}}|ilkelere]] göre yapıyor olduğunuzu onaylayın.",
        "revdelete-suppress-text": "Saklama '''sadece''' aşağıdaki durumlarda kullanılmalıdır:\n* Muhtemel iftira niteliğindeki bilgi\n* Uygunsuz kişisel bilgi\n*: ''ev adresleri ve telefon numaraları, sosyal güvenlik numaraları, vs.''",
        "revdelete-legend": "Görünürlük kısıtlamaları ayarla",
        "mergehistory-comment": "[[:$1]] ile [[:$2]] birleştirildi: $3",
        "mergehistory-same-destination": "Kaynak ve hedef sayfaları aynı olamaz",
        "mergehistory-reason": "Sebep:",
+       "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Birleştirme kaydı",
-       "pagemerge-logentry": "[[$1]] ile [[$2]] birleştirildi ($3'e kadar olan revizyonlar)",
        "revertmerge": "Ayır",
        "mergelogpagetext": "Aşağıdaki liste, sayfaların geçmiş versiyonlarının birbirleriyle en son birleştirilmelerini içerir",
        "history-title": "\"$1\" sayfasının geçmişi",
        "search-file-match": "(dosya içeriğiyle eşleşiyor)",
        "search-suggest": "Bunu mu demek istediniz: $1",
        "search-interwiki-caption": "Kardeş projeler",
-       "search-interwiki-default": "$1 sonuçlar:",
+       "search-interwiki-default": "$1 sonuçları:",
        "search-interwiki-more": "(daha çok)",
        "search-relatedarticle": "ilgili",
        "searchrelated": "ilgili",
        "searchall": "hepsi",
        "showingresults": "$2. sonuçtan başlayarak {{PLURAL:$1|'''1''' sonuç |'''$1''' sonuç }} aşağıdadır:",
        "showingresultsinrange": "<strong>$2</strong> ile <strong>$3</strong> arasında toplam <strong>$1</strong> sonuç gösteriliyor.",
-       "showingresultsheader": "'''$4''' için {{PLURAL:$5|'''$3''' sonuçtan '''$1'''i|'''$1 - $2''' arası '''$3''' sonuç}}",
        "search-nonefound": "Sorguyla eşleşen bir sonuç yok.",
        "powersearch-legend": "Gelişmiş arama",
        "powersearch-ns": "Ad alanlarında ara:",
        "preferences": "Tercihler",
        "mypreferences": "Tercihler",
        "prefs-edits": "Değişiklik sayısı:",
-       "prefsnologintext2": "Kullanıcı tercihlerini ayarlamak için lütfen $1ın.",
+       "prefsnologintext2": "Kullanıcı tercihlerini ayarlamak için lütfen oturum açın.",
        "prefs-skin": "Görünüm",
        "skin-preview": "Önizleme",
        "datedefault": "Tercih yok",
        "youremail": "E-posta:",
        "username": "{{GENDER:$1|Kullanıcı adı}}:",
        "prefs-memberingroups": "{{GENDER:$2|Üye}} {{PLURAL:$1|group|grupları}}:",
+       "prefs-memberingroups-type": "$1",
        "prefs-registration": "Kayıt zamanı:",
+       "prefs-registration-date-time": "$1",
        "yourrealname": "Gerçek adınız:",
        "yourlanguage": "Dil:",
        "yourvariant": "İçerik dili türevi:",
        "gender-female": "Viki sayfalarını kadın olarak düzenliyorum",
        "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 isim (isteğe bağlı): eğer gerçek isminizi vermeyi seçerseniz, çalışmanızı size atfederken kullanılacaktır.",
+       "prefs-help-realname": "Gerçek ismi vermek isteğe bağlıdır.\nEğer verirseniz yaptığınız çalışmalara ithafen kullanılabilir.",
        "prefs-help-email": "E-posta adresi isteğe bağlıdır; ancak parolanızı unutmanız durumunda parola sıfırlamak için gerekecektir.",
        "prefs-help-email-others": "Ayrıca kullanıcı sayfanızdaki bir bağlantı yoluyla diğer kullanıcıların size e-posta atmasına izin vermeyi seçebilirsiniz.\nDiğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz açıklanmaz.",
        "prefs-help-email-required": "E-posta adresi gerekmektedir.",
        "prefs-tokenwatchlist": "Anahtar",
        "prefs-diffs": "Farklar",
        "prefs-help-prefershttps": "Bu tercih bir sonraki girişinizde etkili olacaktır.",
+       "prefswarning-warning": "Henüz kaydedilmemiş değişiklikler yaptınız. \"$\"'e basmadığınız takdirde tercihleriniz güncellenmeyecektir.",
        "prefs-tabs-navigation-hint": "İpucu: Sekmeler listesindeki sekmeler arasında gezinmek için sağ ve sol ok tuşlarını kullanabilirsiniz.",
        "email-address-validity-valid": "E-posta adresi geçerli görünüyor",
        "email-address-validity-invalid": "Geçerli bir e-posta adresi girin",
        "saveusergroups": "Kullanıcı grupları kaydet",
        "userrights-groupsmember": "İçinde olduğu gruplar:",
        "userrights-groupsmember-auto": "Saklı olarak içinde olduğu gruplar:",
+       "userrights-groupsmember-type": "$1",
        "userrights-groups-help": "Bu kullanıcının içinde olduğu grupları değiştirebilirsiniz:\n* Seçili bir kutu, kullanıcının o gruba dahil olduğu anlamına gelir\n* Seçilmemiş bir kutu, kullanıcının o grupta olmadığı anlamına gelir.\n* *, grubu bir kez oluşturduktan sonra silemeceğinizi belirtir, ya da karşılıklı olarak.",
        "userrights-reason": "Neden:",
        "userrights-no-interwiki": "Diğer vikilerdeki kullanıcıların izinlerini değiştirmeye yetkiniz yok.",
        "license": "Lisans:",
        "license-header": "Lisanslama",
        "nolicense": "Hiçbirini seçme",
+       "licenses-edit": "Lisans seçeneklerini düzenle",
        "license-nopreview": "(Önizleme etkin değil)",
        "upload_source_url": "(geçerli, herkesin ulaşabileceği bir URL'den seçtiğiniz dosya)",
        "upload_source_file": "(bilgisayarınızdan seçtiğiniz dosya)",
        "uploadnewversion-linktext": "Dosyanın yenisini yükleyin",
        "shared-repo-from": "$1'dan",
        "shared-repo": "ortak bir havuz",
+       "shared-repo-name-wikimediacommons": "Wikimedia Commons'ta",
        "upload-disallowed-here": "Bu dosyanın üzerine yazamazsınız.",
        "filerevert": "$1 dosyasını eski haline döndür",
        "filerevert-legend": "Dosyayı eski haline döndür",
        "randomincategory": "Kategoriye göre rastgele sayfa",
        "randomincategory-invalidcategory": "\"$1\" geçerli bir kategori adı değil.",
        "randomincategory-nopages": "[[:Category:$1|$1]] kategorisinde hiç sayfa yok.",
+       "randomincategory-category": "Kategori:",
+       "randomincategory-legend": "Kategoriden rastgele sayfa",
        "randomredirect": "Rastgele yönlendirme",
        "randomredirect-nopages": "\"$1\" ad alanında hiç bir yönlendirme yok.",
        "statistics": "İstatistikler",
        "statistics-header-pages": "Sayfa istatistikleri",
        "statistics-header-edits": "Değişiklik istatistikleri",
-       "statistics-header-views": "Görüntüleme istatistikleri",
        "statistics-header-users": "Kullanıcı istatistikleri",
        "statistics-header-hooks": "Diğer istatistikler",
        "statistics-articles": "Maddeler",
        "statistics-files": "Yüklenmiş dosyalar",
        "statistics-edits": "{{SITENAME}} kurulduğundan beri yapılan sayfa değişiklikleri",
        "statistics-edits-average": "Her sayfadaki ortalama değişiklik",
-       "statistics-views-total": "Toplam görüntüleme",
-       "statistics-views-total-desc": "Varolmayan ve özel sayfaların görüntülenmeleri dahil edilmemiştir.",
-       "statistics-views-peredit": "Değişiklik başına görüntüleme",
        "statistics-users": "Kayıtlı [[Special:ListUsers|kullanıcılar]]",
        "statistics-users-active": "Aktif kullanıcılar",
        "statistics-users-active-desc": "Son {{PLURAL:$1|gün|$1 günde}} çalışma yapan kullanıcılar",
-       "statistics-mostpopular": "En çok ziyaret edilen sayfalar",
        "pageswithprop": "Bir sayfa özelliğine sahip sayfalar",
        "pageswithprop-legend": "Bir sayfa özelliğine sahip sayfalar",
        "pageswithprop-text": "Bu sayfa belirli bir sayfa özelliğini kullanan sayfaları listeler.",
        "doubleredirects": "Çift yönlendirmeler",
        "doubleredirectstext": "Bu sayfa diğer yönlendirme sayfalarına yönlendirme yapan sayfaları listeler.\nHer satırın içerdiği bağlantılar; birinci ve ikinci yönlendirme, ayrıca ikinci yönlendirmenin hedefi, ki bu genelde birinci yönlendirmenin göstermesi gereken \"gerçek\" hedef sayfasıdır.\n<del>Üstü çizili</del> girdiler çözülmüştür.",
        "double-redirect-fixed-move": "[[$1]] taşındı.\nYönlendirme otomatik olarak güncellendi ve [[$2]] sayfasına yönlendirildi.",
-       "double-redirect-fixed-maintenance": "[[$1]] - [[$2]] yapılan çift yönlendirme düzeltiliyor.",
+       "double-redirect-fixed-maintenance": "[[$1]] sayfasından [[$2]] sayfasına yapılan çift yönlendirme otomatik olarak düzeltiliyor.",
        "double-redirect-fixer": "Yönlendirme tamircisi",
        "brokenredirects": "Boş yönlendirmeler",
        "brokenredirectstext": "Aşağıdaki yönlendirmeler varolmayan sayfalara bağlantı veriyor:",
        "uncategorizedtemplates": "Kategorisiz şablonlar",
        "unusedcategories": "Kullanılmayan kategoriler",
        "unusedimages": "Kullanılmayan dosyalar",
-       "popularpages": "Popüler sayfalar",
        "wantedcategories": "İstenen kategoriler",
        "wantedpages": "İstenen sayfalar",
        "wantedpages-badtitle": "Sonuç kümesinde geçersiz başlık: $1",
        "wantedfiles": "İstenen dosyalar",
        "wantedfiletext-cat": "Aşağıdaki dosyalar kullanılıyor ama mevcut değil. Yabancı depolardaki dosyalar, varolsalar bile gösterilebilir. Böyle yanlış pozitiflerin <del>üstü çizilecektir</del>. Ek olarak, varolmayan dosyaları gömen sayfalar [[:$1]] sayfasında listelenmiştir.",
        "wantedfiletext-nocat": "Aşağıdaki dosyalar kullanılıyor ama mevcut değil. Yabancı depolardaki dosyalar, varolsalar bile gösterilebilir. Böyle yanlış pozitiflerin <del>üstü çizilecektir</del>.",
+       "wantedfiletext-nocat-noforeign": "Aşağıdaki dosyalar kullanıyor ancak mevcut değil.",
        "wantedtemplates": "İstenen şablonlar",
        "mostlinked": "Kendisine en fazla bağlantı verilmiş sayfalar",
        "mostlinkedcategories": "En çok maddeye sahip kategoriler",
        "pager-older-n": "$1 daha eski",
        "suppress": "Gözetim",
        "querypage-disabled": "Bu özel sayfa, performansa dayalı nedenlerle devre dışı bırakılır.",
+       "apihelp-no-such-module": "\"$1\" modülü bulunamadı.",
        "booksources": "Kaynak kitaplar",
        "booksources-search-legend": "Kitap kaynaklarını ara",
-       "booksources-go": "Git",
+       "booksources-isbn": "ISBN:",
+       "booksources-search": "Ara",
        "booksources-text": "Aşağıdaki, yeni ve kullanılmış kitap satan diğer sitelere bağlantıların listesidir, ve aradığınız kitaplar hakkında daha fazla bilgiye sahip olabilirler:",
        "booksources-invalid-isbn": "Verilen ISBN geçersiz gibi görünüyor; orijinal kaynaktan kopyalama hataları için kontrol edin.",
        "specialloguserlabel": "Kullanıcı:",
        "listgrouprights-removegroup-self": "Kendi hesabından {{PLURAL:$2|grup|grupları}} çıkarabilir: $1",
        "listgrouprights-addgroup-self-all": "Kendi hesabına tüm grupları ekleyebilir",
        "listgrouprights-removegroup-self-all": "Kendi hesabından tüm grupları çıkarabilir",
+       "listgrouprights-namespaceprotection-restrictedto": "Kullanıcının değişiklik yapmasına izin veren hak(lar)",
+       "broken-file-category-desc": "Sayfa bozuk dosya bağlantısı (mevcut olmayan bir dosyayı kullanmaya çalışan bağlantı) içeriyor.",
        "trackingcategories-nodesc": "Açıklama yok.",
        "mailnologin": "Gönderi adresi yok.",
        "mailnologintext": "Diğer kullanıcılara e-posta gönderebilmeniz için [[Special:UserLogin|oturum aç]]malısınız ve [[Special:Preferences|tercihler]] sayfasında geçerli bir e-posta adresiniz olmalı.",
        "mywatchlist": "İzleme listesi",
        "watchlistfor2": "$1 için $2",
        "nowatchlist": "İzleme listesinde hiçbir madde bulunmuyor.",
-       "watchlistanontext": "Lütfen izleme listenizdeki maddeleri görmek ya da değiştirmek için $1.",
+       "watchlistanontext": "Lütfen izleme listenizdeki maddeleri görmek ya da değiştirmek için oturum açın.",
        "watchnologin": "Oturum açık değil.",
        "addwatch": "İzleme listesine ekle",
        "addedwatchtext": "\"[[:$1]]\" sayfası [[Special:Watchlist|izleme listenize]] eklenmiştir.\nBundan sonra, bu sayfaya ve ilgili tartışma sayfasına yapılacak değişiklikler burada listelenecek.",
        "wlheader-enotif": "E-posta bildirimi etkin.",
        "wlheader-showupdated": "Sayfaları son ziyaretinizden beri değişen sayfalar '''kalın''' gösterilmiştir.",
        "wlnote": "$3 saat $4 itibariyle son {{PLURAL:$2|bir saatte|'''$2''' saatte}} yapılan {{PLURAL:$1|son değişiklik|son '''$1''' değişiklik}} aşağıdadır.",
-       "wlshowlast": "Son $1 saati $2 günü göster $3",
+       "wlshowlast": "Son $1 saati $2 günü göster",
        "watchlist-options": "İzleme listesi seçenekleri",
        "watching": "İzleniyor...",
        "unwatching": "İzlenmiyor...",
        "exbeforeblank": "Silinmeden önceki içerik: '$1'",
        "delete-confirm": "\"$1\" sil",
        "delete-legend": "sil",
-       "historywarning": "'''Uyarı:''' Silmek üzere olduğunuz sayfanın yaklaşık olarak $1 {{PLURAL:$1|sürüme|sürüme}} sahip bir geçmişi var:",
+       "historywarning": "<strong>Uyarı:</strong> Silmek üzere olduğunuz sayfanın yaklaşık olarak $1 sürüme sahip bir geçmişi var:",
        "confirmdeletetext": "Bu sayfayı veya dosyayı tüm geçmişi ile birlikte veritabanından kalıcı olarak silmek üzeresiniz.\nBu işlemden kaynaklı doğabilecek sonuçların farkında iseniz ve işlemin [[{{MediaWiki:Policy-url}}|Silme kurallarına]] uygun olduğuna eminseniz, işlemi onaylayın.",
        "actioncomplete": "İşlem tamamlandı",
        "actionfailed": "İşlem başarısız oldu",
        "delete-edit-reasonlist": "Silme nedenlerini değiştir",
        "delete-toobig": "Bu sayfa, $1 {{PLURAL:$1|tane değişiklik|tane değişiklik}} ile çok uzun bir geçmişe sahiptir.\nBöyle sayfaların silinmesi, {{SITENAME}} sitesini bozmamak için sınırlanmaktadır.",
        "delete-warning-toobig": "Bu sayfanın büyük bir değişiklik geçmişi var, $1 {{PLURAL:$1|revizyonun|revizyonun}} üzerinde.\nBunu silmek {{SITENAME}} işlemlerini aksatabilir;\ndikkatle devam edin.",
+       "deleteprotected": "Bu sayfayı silemezsiniz çünkü sayfa korumaya alınmış.",
        "deleting-backlinks-warning": "'''Uyarı:''' Silmek üzere olduğunuz sayfaya [[Özel:SayfayaBağlantılar/{{FULLPAGENAME}}|başka sayfalardan]] bağlantılar var veya sayfanın bazı bölümleri başka sayfalar tarafından alıntı olarak kullanılıyor.",
        "rollback": "değişiklikleri geri al",
        "rollback_short": "geri al",
        "protect-othertime": "Farklı zaman:",
        "protect-othertime-op": "farklı zaman",
        "protect-existing-expiry": "Mevcut bitiş zamanı: $3, $2",
+       "protect-existing-expiry-infinity": "Mevcut sona erme zamanı: sonsuz",
        "protect-otherreason": "Diğer/ilave gerekçe:",
        "protect-otherreason-op": "Diğer gerekçe",
        "protect-dropdown": "*Genel koruma gerekçeleri\n** Aşırı vandalizm\n** Aşırı spam\n** Değişiklik savaşı\n** Yüksek trafiğe sahip sayfa",
        "movepagetalktext": "İlişikteki tartışma sayfası da (eğer varsa) otomatik olarak yeni isme taşınacaktır. Ama şu durumlarda '''taşınmaz''':\n\n*Alanlar arası bir taşıma ise, (örnek: \"Project:\" --> \"Help:\")\n*Yeni isimde bir tartışma sayfası zaten var ise,\n*Alttaki kutucuğu seçmediyseniz.\n\nBu durumlarda sayfayı kendiniz aktarmalısınız.",
        "movearticle": "Eski isim",
        "moveuserpage-warning": "'''Uyarı:''' Bir kullanıcı sayfasını taşımak üzeresiniz. Lütfen sadece sayfanın taşınacağına, ancak kullanıcının yeniden ''adlandırılmayacağına'' dikkat edin.",
+       "movecategorypage-warning": "<strong>Uyarı:</strong> Bir kategori sayfasını taşımak üzeresiniz. Lütfen yalnızca sayfanın taşınacağını ve eski kategoride yer alan sayfaların yeniden kategorize <em>edilmeyeceğini</em> unutmayın.",
        "movenologintext": "Sayfanın adını değiştirebilmek için kayıtlı ve [[Special:UserLogin|sisteme]] giriş yapmış olmanız gerekmektedir.",
        "movenotallowed": "Sayfaları taşımaya izniniz yok.",
        "movenotallowedfile": "Sayfaları taşımaya izniniz yok.",
        "import": "Sayfaları aktar",
        "importinterwiki": "Vikilerarası içe aktarım",
        "import-interwiki-text": "İçe aktarmak için bir viki ve sayfa başlığı seçin.\nRevizyon tarihleri ve yazarların isimleri korunacaktır.\nBütün vikilerarası içe aktarım eylemleri [[Special:Log/import|içe aktarım günlüğünde]] kaydedilmektedir.",
+       "import-interwiki-sourcewiki": "Kaynak viki:",
+       "import-interwiki-sourcepage": "Kaynak sayfa:",
        "import-interwiki-history": "Sayfanın tüm geçmiş sürümlerini kopyala",
        "import-interwiki-templates": "Tüm şablonları içer",
        "import-interwiki-submit": "Import",
        "import-error-create": "\"$1\" sayfası içe aktarılamadı çünkü sayfayı oluşturmaya yetkiniz yok.",
        "import-error-interwiki": "\"$1\" sayfası içe aktarılamadı çünkü sayfanın adı dış bağlantı için ayrılmış (vikilerarası).",
        "import-error-special": "\"$1\" sayfası içe aktarılamadı çünkü sayfalara izin vermeyen özel bir ad alanına ait.",
-       "import-error-invalid": "\"$1\" sayfası içe aktarılamadı çünkü sayfa adı geçersiz.",
+       "import-error-invalid": "\"$1\" sayfası içe aktarılamadı çünkü sayfa adı bu vikide geçersiz.",
        "import-error-unserialize": "\"$1\" sayfasının $2 revizyonu serileştirilmesi geri alınamıyor. Revizyonun $4 olarak serileştirilmiş $3 içerik modelini kullandığı raporlandı.",
        "import-error-bad-location": "\"$1\" sayfası için $3 içerik modelini kullanan $2 revizyonu, model sayfada desteklenmediğinden, bu vikide saklanamıyor.",
        "import-options-wrong": "Yanlış {{PLURAL:$2|seçenek|seçenek}}: <nowiki>$1</nowiki>",
        "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}}",
+       "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}}",
+       "import-logentry-interwiki-detail": "$2 sayfasından $1 {{PLURAL:$1|revizyon|revizyon}} içe aktarıldı",
        "javascripttest": "JavaScript denemesi",
        "javascripttest-title": "$1 testleri çalışıyor",
        "javascripttest-pagetext-noframework": "Bu sayfa JavaScript testleri çalıştırmak için ayrılmıştır.",
        "tooltip-pt-mycontris": "Katkılarınızın listesi",
        "tooltip-pt-login": "Oturum açmanızı tavsiye ederiz; ancak zorunda değilsiniz",
        "tooltip-pt-logout": "Sistemden çık",
+       "tooltip-pt-createaccount": "Bir hesap oluşturup oturum açmanız tavsiye edilmektedir ancak bu zorunlu değildir",
        "tooltip-ca-talk": "İçerik ile ilgili tartışma",
        "tooltip-ca-edit": "Bu sayfayı değiştirebilirsiniz. Lütfen kaydetmeden önce önizleme düğmesini kullanın.",
        "tooltip-ca-addsection": "Yeni bir altbaşlık aç",
        "tooltip-feed-atom": "Bu sayfa için atom beslemesi",
        "tooltip-t-contributions": "Kullanıcının katkılarının listesini gör",
        "tooltip-t-emailuser": "Bu kullanıcıya e-posta gönder",
+       "tooltip-t-info": "Bu sayfa hakkında daha fazla bilgi",
        "tooltip-t-upload": "Dosya yükle",
        "tooltip-t-specialpages": "Tüm özel sayfaların listesi",
        "tooltip-t-print": "Bu sayfanın basılmaya uygun sürümü",
        "pageinfo-robot-policy": "Robotlar tarafından endeksleniyor",
        "pageinfo-robot-index": "İzin verilmiş",
        "pageinfo-robot-noindex": "İzin verilmedi",
-       "pageinfo-views": "Görüntülenme sayısı",
        "pageinfo-watchers": "Sayfanın izleyici sayısı",
        "pageinfo-few-watchers": "$1 {{PLURAL:$1|izleyiciden|izleyiciden}} az",
        "pageinfo-redirects-name": "Bu sayfaya yönlendirme sayısı",
        "exif-urgency-low": "Düşük ( $1 )",
        "exif-urgency-high": "Yüksek ( $1 )",
        "exif-urgency-other": "Kullanıcı tanımlı öncelik ($1)",
-       "watchlistall2": "Hepsini göster",
        "namespacesall": "hepsi",
        "monthsall": "hepsi",
        "confirmemail": "E-posta adresini onayla",
        "confirm-unwatch-button": "TAMAM",
        "confirm-unwatch-top": "Bu sayfayı izleme listenizden çıkarın",
        "percent": "%$1",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← önceki sayfa",
        "imgmultipagenext": "sonraki sayfa →",
        "imgmultigo": "Git!",
        "logentry-rights-rights-legacy": "$1, $3 için grup üyeliğini {{GENDER:$2|değiştirdi}}",
        "logentry-rights-autopromote": "$1, $4 iken $5 olarak otomatik {{GENDER:$2|terfi edildi}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|yükledi}} $3",
+       "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-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:",
        "pagelang-use-default": "Varsayılan dili kullan",
        "pagelang-select-lang": "Dil seçin",
        "right-pagelang": "Sayfa dilini değiştir",
-       "action-pagelang": "sayfa dilini değiştir"
+       "action-pagelang": "sayfa dilini değiştir",
+       "logentry-pagelang-pagelang": "$1, $3 sayfasının dilini $4 dilinden $5 diline {{GENDER:$2|çevirdi}}.",
+       "mediastatistics": "Medya istatistikleri",
+       "mediastatistics-summary": "Karşıya yüklenen dosya türlerine ilişkin istatistikler. Bu yalnızca bir dosyanın en son sürümünü içerir. Eski veya silinen dosyala sürümleri hariç tutulur.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 byte}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME türü",
+       "mediastatistics-table-extensions": "Olası uzantılar",
+       "mediastatistics-table-count": "Dosya sayısı",
+       "mediastatistics-table-totalbytes": "Toplam boyut",
+       "mediastatistics-header-unknown": "Bilinmeyen",
+       "mediastatistics-header-bitmap": "Bitmap görüntüleri",
+       "mediastatistics-header-drawing": "Çizimler (vektör görüntüler)",
+       "mediastatistics-header-audio": "Ses",
+       "mediastatistics-header-video": "Videolar",
+       "mediastatistics-header-multimedia": "Zengin medya",
+       "mediastatistics-header-office": "Ofis",
+       "mediastatistics-header-text": "Metin türü",
+       "mediastatistics-header-executable": "Yürütülebilir dosyalar",
+       "mediastatistics-header-archive": "Sıkıştırılmış biçimler",
+       "json-warn-trailing-comma": "$1 takip eden {{PLURAL:$1|virgül|virgüller}} JSON'dan kaldırılmıştır.",
+       "json-error-unknown": "JSON ile ilgili bir sorun oluştu. Hata:$1",
+       "json-error-depth": "Azami yığın derinliği aşıldı",
+       "json-error-state-mismatch": "Geçersiz veya hatalı biçimlendirilmiş JSON",
+       "json-error-ctrl-char": "Kontrol karakteri hatası, muhtemelen yanlış kodlanmış",
+       "json-error-syntax": "Sözdizimi hatası",
+       "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"
 }
index fbb3d9b..5d532fc 100644 (file)
        "search-interwiki-more": "(heşa)",
        "searchrelated": "related",
        "searchall": "kulle",
-       "showingresultsheader": "{{PLURAL:$5|Nafqo '''$1''' of '''$3'''|Nafqe '''$1 - $2''' men '''$3'''}} l'''$4'''",
        "search-nonefound": "Für deine Suchanfrage wurden keine Ergebnisse gefunden.",
        "powersearch-togglelabel": "Sım Qontrol:",
        "powersearch-toggleall": "Kulle",
        "pager-older-n": "{{PLURAL:$1|3atiqo1|3atiqe $1}}",
        "booksources": "Kruxyo baNumarat duISBN",
        "booksources-search-legend": "Krax Mabu³e me Kṭowe",
-       "booksources-go": "Zux",
        "log": "Logs",
        "allpages": "aFaṭaṭe kulle",
        "allarticles": "aFaṭaṭe kulle",
        "watch": "Watch",
        "unwatch": "Unwatch",
        "watchlist-details": "{{PLURAL:$1|$1 page|$1 pages}} on your watchlist, not counting talk pages.",
-       "wlshowlast": "Maḥway li aŞuḥlofe dıtsimi meqım $1 Sa³ayat $2 Yawme $3",
+       "wlshowlast": "Maḥway li aŞuḥlofe dıtsimi meqım $1 Sa³ayat $2 Yawme",
        "watchlist-options": "Watchlist options",
        "actioncomplete": "uDuboro kamıl",
        "actionfailed": "Action failed",
        "exif-writer": "Kaṭowo",
        "exif-languagecode": "Leşono",
        "exif-cameraownername": "uMoro diQamera",
-       "watchlistall2": "kulle",
        "namespacesall": "kulle",
        "monthsall": "kulle",
        "watchlisttools-view": "View relevant changes",
index 91da0bb..c38423b 100644 (file)
        "searchrelated": "Yelanaka",
        "searchall": "Hinkwaswo",
        "showingresults": "Kombisa e hansi kufika eka {{PLURAL:$1|'''1''' mbuyelo|'''$1''' mimbuyelo}} Kusungula hi#'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|nkutlunya '''$1''' wa '''$3''' lowu|minkutlunya '''$1 - $2''' ya '''$3''' leyi}} yelanaka na '''$4'''",
        "search-nonefound": "Kuhava mimbuyelo leyi yelanaka xikombelo lexi.",
        "mypreferences": "Minhlawulo ya mina",
        "prefs-edits": "Ntsengo wa mindzulamiso:",
        "pager-older-n": "{{PLURAL:$1|ra khale|$1 ya khale}}",
        "booksources": "Swihlovo swatibuku",
        "booksources-search-legend": "Lavalava swihlovo swa tibuku",
-       "booksources-go": "Nghena",
        "specialloguserlabel": "Mutirhisi:",
        "log": "Nghula ya minxaxamelo",
        "allpages": "Matluka hinkwawo",
        "watchthispage": "Languta tluka leri",
        "unwatch": "Ungalanguti",
        "watchlist-details": "{{PLURAL:$1|$1 tluka|$1 wa matluka}} eka nxaxamelo wa leswi uswilanguteke, kungasi hlayiwa matluka yu mbulavulo.",
-       "wlshowlast": "Komba $1 wati awara  $2 wa masiku kumbe $3",
+       "wlshowlast": "Komba $1 wati awara  $2 wa masiku kumbe",
        "watchlist-options": "Minhlawulo ya nxaxamelo wa leswilangutiweke",
        "watching": "Ulangutile...",
        "unwatching": "Utshika ku languta...",
        "metadata": "Nghula ya vuxokoxoko",
        "metadata-help": "Fayili leyi yi khome vuxokoxoko lebyi engetelekeke, swingaendleka yi hoxiwile kusuka eka Khemera kumbe muchini wo gandlisa lowu tirhisiweke ku yi tumbuluxa.\nLoko fayili yi antswisiwile kusukela eka matshamelo ya yona yo sungula, vuxokoxoko bya yona byinga va byi cincile.",
        "metadata-fields": "Vuxokoxoko bya xifaniso lexi nga eka hungu leri byi ta kombiwa eka tluka leri kombaka xifaniso lexi loko tafula ra nxaxamela wa vuxokoxoko ri pfariwa.\nLebyi n'wana vuxokoxoko bya finiso byitumbetiwile.\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",
-       "watchlistall2": "Hinkwawo",
        "namespacesall": "Hinkwawo",
        "monthsall": "hikwato",
        "watchlisttools-view": "Vona kucinca loku yelanaka",
index 57d4c06..8dcc5d8 100644 (file)
@@ -20,7 +20,8 @@
                        "Ильнар",
                        "Рашат Якупов",
                        "Умар",
-                       "아라"
+                       "아라",
+                       "Derslek"
                ]
        },
        "tog-underline": "Сылтамаларның астына сызу:",
        "print": "Бастыру",
        "view": "Карау",
        "edit": "Үзгәртү",
+       "edit-local": "Локаль тасвирламаны үзгәртергә",
        "create": "Төзү",
+       "create-local": "Локаль тасвирлама өстәргә",
        "editthispage": "Бу битне үзгәртү",
        "create-this-page": "Бу битне төзү",
        "delete": "Бетерү",
        "deletethispage": "Бу битне бетерү",
        "undeletethispage": "Бу битне кайтарырга",
-       "undelete_short": "$1 {{PLURAL:$1|үзгәртмәне}} торгызу",
-       "viewdeleted_short": "{{PLURAL:$1|1=1 бетерелгән үзгәртүне|$1 бетерелгән үзгәртүне}} карау",
+       "undelete_short": "$1 {{PLURAL:$1|төзәтмәне|$1 төзәтмә}} торгызу",
+       "viewdeleted_short": "{{PLURAL:$1|1=1 бетерелгән үзгәртүне|$1 бетерелгән үзгәртүне}} карау\n{{PLURAL:$1|бетерелгән төзәтмәне|$1 бетерелгән төзәтмәне}} карау",
        "protect": "Яклау",
        "protect_change": "үзгәртү",
        "protectthispage": "Бу битне яклау",
        "otherlanguages": "Башка телләрдә",
        "redirectedfrom": "($1 битеннән юнәлтелде)",
        "redirectpagesub": "Башка биткә юнәлтү бите",
+       "redirectto": "Шунда юнәлтелә:",
        "lastmodifiedat": "Бу битне соңгы үзгәртү: $2, $1.",
-       "viewcount": "Бу биткә $1 {{PLURAL:$1|тапкыр}} мөрәҗәгать иттеләр.",
+       "viewcount": "Бу биткә $1 {{PLURAL:$1|бер тапкыр|$1 тапкыр}} мөрәҗәгать иттеләр.",
        "protectedpage": "Якланган бит",
        "jumpto": "Моңа күчү:",
        "jumptonavigation": "навигация",
        "passwordreset-emailsent-capture": "Җибәрелгән хат-искәртү түбәндә китерелә",
        "passwordreset-emailerror-capture": "Түбәндә язылган хат-искәртү китерелгән, аны җибәрмәүнең сәбәбе:$1",
        "changeemail": "Электрон әрҗә адресын үзгәртү",
-       "changeemail-header": "Электрон әрҗә адресын үзгәртү",
        "changeemail-text": "Электрон әрҗә адресын үзгәртү өчен, бу кырларны тутырыгыз. Үзгәртүне раслау өчен, сезгә серсүзне җыярга кирәк булыр",
        "changeemail-no-info": "Бу сәхифәгә турыдан-туры мөрәҗәгать итәр өчен, сез системага керергә тиешсез",
        "changeemail-oldemail": "Хәзерге электрон әрҗә адресы:",
        "changeemail-none": "(юк)",
        "changeemail-password": "«{{SITENAME}}» проекты өчен серсүзегез:",
        "changeemail-submit": "E-mail адресын үзгәртү",
-       "changeemail-cancel": "Баш тарту",
        "bold_sample": "Калын язылыш",
        "bold_tip": "Калын язылыш",
        "italic_sample": "Курсив язылыш",
        "searchrelated": "бәйләнгән",
        "searchall": "барлык",
        "showingresults": "Аста № '''$2''' {{PLURAL:$1|башлап}} '''$1''' {{PLURAL:$1|результат}} күрсәтелгән.",
-       "showingresultsheader": "'''$4''' өчен {{PLURAL:$5|1=Результат '''$1''' сеннән '''$3'''|Результатлар '''$1 — $2''' сеннән  '''$3'''}}",
        "search-nonefound": "Сорауга туры килгән җаваплар табылмады.",
        "powersearch-legend": "Өстәмә эзләү",
        "powersearch-ns": "исемнәрендә эзләү",
        "statistics": "Хисапнамә",
        "statistics-header-pages": "Битләр хисапнамәсе",
        "statistics-header-edits": "Үзгәртүләр хисапнамәсе",
-       "statistics-header-views": "Караулар хисапнамәсе",
        "statistics-header-users": "Кулланучылар буенча хисапнамә",
        "statistics-header-hooks": "Башка хисапнамәләр",
        "statistics-articles": "Мәкаләләр саны",
        "statistics-files": "Йөкләнелгән файллар",
        "statistics-edits": "{{grammar:genitive|{{SITENAME}}}} проекты ачылганнан бирле булган барлык үзгәртүләр исәбе",
        "statistics-edits-average": "Бер биткә уртача үзгәртүләр исәбе",
-       "statistics-views-total": "Барлык каралган битләр",
-       "statistics-views-peredit": "Үзгәртүләргә карау",
        "statistics-users": "Теркәлгән [[Special:ListUsers|кулланучылар]]",
        "statistics-users-active": "Актив кулланучылар",
        "statistics-users-active-desc": "{{PLURAL:$1|$1 көн }} өчендә нинди дә булса үзгәртүләр керткән кулланучылар",
-       "statistics-mostpopular": "Иң күп каралучы битләр",
        "doubleredirects": "Икеләтә юнәлтүләр",
        "brokenredirects": "Бәйләнешсез юнәлтүләр",
        "brokenredirectstext": "Бу юнәлтүләр булмаган битләргә сылтыйлар:",
        "uncategorizedtemplates": "Төркемләнмәгән үрнәкләр",
        "unusedcategories": "Кулланмаган төркемнәр",
        "unusedimages": "Кулланмаган сүрәтләр",
-       "popularpages": "Популяр битләр",
        "wantedcategories": "Зарур төркемнәр",
        "wantedpages": "Зарур битләр",
        "wantedfiles": "Кирәкле файллар",
        "suppress": "Яшерү",
        "booksources": "Китап чыганаклары",
        "booksources-search-legend": "Китап чыганакларыны эзләү",
-       "booksources-go": "Башкару",
        "booksources-text": "Әлеге биттә күрсәтелгән сылтамалар ярәмендә сезнең кызыксындырган китап буенча өстәмә мәгълүматлар табарга мөмкин. Болар интернет-кибетләр һәм китапханә җыентыгында эзләүче системалар.",
        "booksources-invalid-isbn": "Бирелгән ISBN саны бәлки хаталдыр. Зинһар, бирелгән саннарны яңадан тикшерегез.",
        "specialloguserlabel": "Кулланучы:",
        "unwatchthispage": "Күзәтүне туктат",
        "notanarticle": "Мәкалә түгел",
        "watchlist-details": "Күзәтү исемлегегездә, бәхәс битләрен санамыйча, {{PLURAL:$1|1=$1 бит|$1 бит}} бар.",
-       "wlshowlast": "Баягы $1 сәгать $2 көн эчендә яки $3ны күрсәт",
+       "wlshowlast": "Баягы $1 сәгать $2 көн эчендә яки ны күрсәт",
        "watchlist-options": "Күзәтү исемлеге көйләүләре",
        "watching": "Күзәтү исемлегемә өстәүе…",
        "unwatching": "Күзәтү исемлегемнән чыгаруы…",
        "import": "Битләр кертү",
        "importinterwiki": "Викиара кертү",
        "import-interwiki-text": "Викины һәм кертелүче битнең исемен языгыз.\nҮзгәртүләр вакыты һәм аның авторлары сакланачак.\nБөтен викиара күчерүләр [[Special:Log/import|махсус журналда]] сакланачак.",
-       "import-interwiki-source": "Вики-чыганак/бит:",
        "import-interwiki-history": "Бу битнең барлык үзгәртү тарихын күчермәләү",
        "import-interwiki-templates": "Барлык үрнәкләрне кертү",
        "import-interwiki-submit": "Импортлау",
        "exif-gpsstatus-v": "Мәгълүматларны җибәрүгә әзер",
        "exif-gpsspeed-k": "км/сәг",
        "exif-gpsspeed-m": "миля/сәг",
-       "watchlistall2": "барлык",
        "namespacesall": "барлык",
        "monthsall": "барлык",
        "recreate": "Яңадан ясау",
        "logentry-newusers-create2": "$1 $3 кулланучы хисап язмасын төзеде",
        "logentry-newusers-autocreate": "Автоматик рәвештә $1 хисап язмасы төзелде.",
        "rightsnone": "(юк)",
+       "revdelete-summary": "үзгәртүләр тасвирламасы",
        "feedback-bugornote": "Әгәр дә сез техник проблеманы җентекләп тасвирларга әзер икәнсез, зинһар өчен, [$1 хата турында хәбәр итегез].\nБашка очракта сез түбәндәге гади форманы куллана аласыз. Сезнең шәрехләмә \"[$3 $2]\" сәхифәсенә сезнең кулланучы исеме һәм сез кулланган браузер исеме белән бергә өстәләчәк.",
        "feedback-subject": "Тема:",
        "feedback-message": "Хәбәр:",
index a7f86ed..4fd905f 100644 (file)
        "searchrelated": "bäylängän",
        "searchall": "barlıq",
        "showingresults": "Asta № '''$2''' {{PLURAL:$1|başlap}} '''$1''' {{PLURAL:$1|rezultat}} kürsätelgän.",
-       "showingresultsheader": "'''$4''' öçen {{PLURAL:$5|Rezultat '''$1''' sennän '''$3'''|Rezultatlar '''$1 — $2''' sennän  '''$3'''}}",
        "search-nonefound": "Sorawğa turı kilgän cawaplar tabılmadı.",
        "powersearch-legend": "Östämä ezläw",
        "powersearch-ns": "isemnärendä ezläw",
        "statistics": "Xisapnamä",
        "statistics-header-pages": "Bitlär xisapnamäse",
        "statistics-header-edits": "Üzgärtülär xisapnamäse",
-       "statistics-header-views": "Qarawlar xisapnamäse",
        "statistics-header-users": "Qullanuçılar buyınça xisapnamä",
        "statistics-header-hooks": "Başqa xisapnamälär",
        "statistics-articles": "Mäqälälär sanı",
        "statistics-files": "Yöklänelgän fayllar",
        "statistics-edits": "{{grammar:genitive|{{SITENAME}}}} proyektı açılğannan birle bulğan barlıq üzgärtülär isäbe",
        "statistics-edits-average": "Ber bitkä urtaça üzgärtülär isäbe",
-       "statistics-views-total": "Barlıq qaralğan bitlär",
-       "statistics-views-peredit": "Üzgärtülärgä qaraw",
        "statistics-users": "Terkälgän [[Special:ListUsers|qullanuçılar]]",
        "statistics-users-active": "Aktiv qullanuçılar",
        "statistics-users-active-desc": "{{PLURAL:$1|$1 kön }} öçendä nindi dä bulsa üzgärtülär kertkän qullanuçılar",
-       "statistics-mostpopular": "İñ küp qaraluçı bitlär",
        "doubleredirects": "İkelätä yünältülär",
        "brokenredirects": "Bäyläneşsez yünältülär",
        "brokenredirectstext": "Bu yünältülär bulmağan bitlärgä sıltıylar:",
        "uncategorizedtemplates": "Törkemlänmägän ürnäklär",
        "unusedcategories": "Qullanmağan törkemnär",
        "unusedimages": "Qullanmağan sürätlär",
-       "popularpages": "Populyar bitlär",
        "wantedcategories": "Zarur törkemnär",
        "wantedpages": "Zarur bitlär",
        "wantedfiles": "Kiräkle fayllar",
        "suppress": "Yäşerü",
        "booksources": "Kitap çığanaqları",
        "booksources-search-legend": "Kitap çığanaqlarını ezläw",
-       "booksources-go": "Başqaru",
        "booksources-text": "Älege bittä kürsätelgän sıltamalar yärämendä sezneñ qızıqsındırğan kitap buyınça östämä mäğlümatlar tabarğa mömkin. Bolar internet-kibetlär häm kitapxanä cıyıntığında ezläwçe sistemalar.",
        "booksources-invalid-isbn": "Birelgän ISBN sanı bälki xataldır. Zinhar, birelgän sannarnı yañadan tikşeregez.",
        "specialloguserlabel": "Qullanuçı:",
        "unwatch": "Küzätmäw",
        "notanarticle": "Mäqälä tügel",
        "watchlist-details": "Küzätü isemlegegezdä, bäxäs bitlären sanamıyça, {{PLURAL:$1|$1 bit|$1 bit}} bar.",
-       "wlshowlast": "Bayağı $1 säğät $2 kön eçendä yäki $3nı kürsät",
+       "wlshowlast": "Bayağı $1 säğät $2 kön eçendä yäki nı kürsät",
        "watchlist-options": "Küzätü isemlege köyläwläre",
        "watching": "Küzätü isemlegemä östäwe…",
        "unwatching": "Küzätü isemlegemnän çığaruı…",
        "exif-subjectdistancerange-3": "Yıraqtan töşerü",
        "exif-gpsspeed-k": "km/säğ",
        "exif-gpsspeed-m": "milya/säğ",
-       "watchlistall2": "barlıq",
        "namespacesall": "barlıq",
        "monthsall": "barlıq",
        "recreate": "Yañadan yasaw",
        "htmlform-reset": "Üzgärtülärne kire qaytaru",
        "htmlform-selectorother-other": "Başqa",
        "revdelete-restricted": "çikläwlär idaräçelärgä dä qullanıla",
-       "rightsnone": "(yuq)"
+       "rightsnone": "(yuq)",
+       "revdelete-summary": "üzgärtülär taswirlaması"
 }
index f9cef95..9c3140e 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Sab",
-            "Sainte-Rose (on ty.wikipedia.org)",
-            "Tahitoa (on ty.wikipedia.org)"
-        ]
-    },
-    "sunday": "tāpati",
-    "monday": "monirē",
-    "tuesday": "mahana piti",
-    "wednesday": "mahana toru",
-    "thursday": "mahana maha",
-    "friday": "mahana pae",
-    "saturday": "mahana mā’a",
-    "sun": "tāpati",
-    "mon": "monirē",
-    "tue": "mahana piti",
-    "wed": "mahana toru",
-    "thu": "mahana maha",
-    "fri": "mahana pae",
-    "sat": "mahana mā’a",
-    "january": "nō tēnuare",
-    "february": "nō fepuare",
-    "march": "nō māti",
-    "april": "nō ’ēperēra",
-    "may_long": "nō mē",
-    "june": "nō tiunu",
-    "july": "nō tiurai",
-    "august": "nō tiurai",
-    "september": "nō tetepa",
-    "october": "nō ’ātopa",
-    "november": "nō novema",
-    "december": "nō tītema",
-    "january-gen": "nō tēnuare",
-    "february-gen": "nō fepuare",
-    "march-gen": "nō māti",
-    "april-gen": "nō ’ēperēra",
-    "may-gen": "nō mē",
-    "june-gen": "nō tiunu",
-    "july-gen": "nō tiurai",
-    "august-gen": "nō tiurai",
-    "september-gen": "nō tetepa",
-    "october-gen": "nō ’ātopa",
-    "november-gen": "nō novema",
-    "december-gen": "nō tītema",
-    "jan": "nō tēnuare",
-    "feb": "nō fepuare",
-    "mar": "nō māti",
-    "apr": "nō ’ēperēra",
-    "may": "nō mē",
-    "jun": "nō tiunu",
-    "jul": "nō tiurai",
-    "aug": "nō tiurai",
-    "sep": "nō tetepa",
-    "oct": "nō ’ātopa",
-    "nov": "nō novema",
-    "dec": "nō tītema",
-    "about": "Nō",
-    "article": "Parau pāpa’i",
-    "navigation": "Arata’i",
-    "qbedit": "Fa’ahuru ’ē",
-    "qbmyoptions": "ta’u ’api",
-    "help": "Tauturu",
-    "search": "Roromā’imi",
-    "searchbutton": "Roromā’imi",
-    "searcharticle": "Haere",
-    "history_short": "Parau tuatāpapa",
-    "edit": "Fa’ahuru ’ē",
-    "delete": "Fa’a’ore",
-    "protect": "Pāruru",
-    "specialpage": "’Api ta’a ’ē",
-    "talk": "Paraparaura’a",
-    "jumptonavigation": "arata’i",
-    "jumptosearch": "haere",
-    "aboutsite": "Nō {{SITENAME}}",
-    "aboutpage": "Project:Nō",
-    "edithelp": "Tauturu",
-    "mainpage": "Fa’ari’ira’a",
-    "mainpage-description": "Fa’ari’ira’a",
-    "portal": "Fare auhoa",
-    "editsection": "fa’ahuru ’ē",
-    "editold": "fa’ahuru ’ē",
-    "nstab-main": "Parau pāpa’i",
-    "nstab-user": "Ta’ata",
-    "nstab-special": "Ta’a ’ē",
-    "nstab-image": "Hōho’a",
-    "nstab-mediawiki": "Poro’i",
-    "nstab-template": "Hōho’a fāito",
-    "nstab-help": "Tauturu",
-    "nstab-category": "Huru",
-    "history-feed-title": "Parau tuatāpapa",
-    "prefs-rc": "Te mau fa’ahuru-’ē-ra’a ’āpī",
-    "prefs-files": "Te mau putu’ite",
-    "youremail": "Tā’u ’āfata rata uira",
-    "yourlanguage": "Te reo:",
-    "email": "’Imere",
-    "recentchanges": "Te mau fa’ahuru-’ē-ra’a ’āpī",
-    "listfiles_user": "Ta’ata fa’a’ohipa",
-    "file-anchor-link": "Hōho’a",
-    "filehist-user": "Ta’ata",
-    "randompage": "’Api mā’iti-haere-noa",
-    "specialloguserlabel": "Ta’ata fa’a’ohipa :",
-    "allpagessubmit": "Haere",
-    "categories": "Te mau huru o te ’api",
-    "watch": "Ha’apa’o",
-    "prot_1movedto2": "’Ua tāhitihia te ’api [[$1]] e ana i te ’api ’āpī [[$2]]",
-    "restriction-edit": "Fa’ahuru ’ē",
-    "restriction-move": "Tāhiti",
-    "whatlinkshere": "Te mau ’api i tū’atihia mai",
-    "tooltip-search": "Roromā’imi {{SITENAME}}",
-    "specialpages": "Te mau ’api ta’a ’ē"
+       "@metadata": {
+               "authors": [
+                       "Sab",
+                       "Sainte-Rose (on ty.wikipedia.org)",
+                       "Tahitoa (on ty.wikipedia.org)",
+                       "TMg"
+               ]
+       },
+       "sunday": "tāpati",
+       "monday": "monirē",
+       "tuesday": "mahana piti",
+       "wednesday": "mahana toru",
+       "thursday": "mahana maha",
+       "friday": "mahana pae",
+       "saturday": "mahana mā’a",
+       "sun": "tāpati",
+       "mon": "monirē",
+       "tue": "mahana piti",
+       "wed": "mahana toru",
+       "thu": "mahana maha",
+       "fri": "mahana pae",
+       "sat": "mahana mā’a",
+       "january": "nō tēnuare",
+       "february": "nō fepuare",
+       "march": "nō māti",
+       "april": "nō ’ēperēra",
+       "may_long": "nō mē",
+       "june": "nō tiunu",
+       "july": "nō tiurai",
+       "august": "nō ʻātete",
+       "september": "nō tetepa",
+       "october": "nō ’ātopa",
+       "november": "nō novema",
+       "december": "nō tītema",
+       "january-gen": "nō tēnuare",
+       "february-gen": "nō fepuare",
+       "march-gen": "nō māti",
+       "april-gen": "nō ’ēperēra",
+       "may-gen": "nō mē",
+       "june-gen": "nō tiunu",
+       "july-gen": "nō tiurai",
+       "august-gen": "nō ʻātete",
+       "september-gen": "nō tetepa",
+       "october-gen": "nō ’ātopa",
+       "november-gen": "nō novema",
+       "december-gen": "nō tītema",
+       "jan": "nō tēnuare",
+       "feb": "nō fepuare",
+       "mar": "nō māti",
+       "apr": "nō ’ēperēra",
+       "may": "nō mē",
+       "jun": "nō tiunu",
+       "jul": "nō tiurai",
+       "aug": "nō ʻātete",
+       "sep": "nō tetepa",
+       "oct": "nō ’ātopa",
+       "nov": "nō novema",
+       "dec": "nō tītema",
+       "about": "Nō",
+       "article": "Parau pāpa’i",
+       "navigation": "Arata’i",
+       "qbedit": "Fa’ahuru ’ē",
+       "qbmyoptions": "ta’u ’api",
+       "help": "Tauturu",
+       "search": "Roromā’imi",
+       "searchbutton": "Roromā’imi",
+       "searcharticle": "Haere",
+       "history_short": "Parau tuatāpapa",
+       "edit": "Fa’ahuru ’ē",
+       "delete": "Fa’a’ore",
+       "protect": "Pāruru",
+       "specialpage": "’Api ta’a ’ē",
+       "talk": "Paraparaura’a",
+       "jumptonavigation": "arata’i",
+       "jumptosearch": "haere",
+       "aboutsite": "Nō {{SITENAME}}",
+       "aboutpage": "Project:Nō",
+       "edithelp": "Tauturu",
+       "mainpage": "Fa’ari’ira’a",
+       "mainpage-description": "Fa’ari’ira’a",
+       "portal": "Fare auhoa",
+       "editsection": "fa’ahuru ’ē",
+       "editold": "fa’ahuru ’ē",
+       "nstab-main": "Parau pāpa’i",
+       "nstab-user": "Ta’ata",
+       "nstab-special": "Ta’a ’ē",
+       "nstab-image": "Hōho’a",
+       "nstab-mediawiki": "Poro’i",
+       "nstab-template": "Hōho’a fāito",
+       "nstab-help": "Tauturu",
+       "nstab-category": "Huru",
+       "history-feed-title": "Parau tuatāpapa",
+       "prefs-rc": "Te mau fa’ahuru-’ē-ra’a ’āpī",
+       "prefs-files": "Te mau putu’ite",
+       "youremail": "Tā’u ’āfata rata uira",
+       "yourlanguage": "Te reo:",
+       "email": "’Imere",
+       "recentchanges": "Te mau fa’ahuru-’ē-ra’a ’āpī",
+       "listfiles_user": "Ta’ata fa’a’ohipa",
+       "file-anchor-link": "Hōho’a",
+       "filehist-user": "Ta’ata",
+       "randompage": "’Api mā’iti-haere-noa",
+       "specialloguserlabel": "Ta’ata fa’a’ohipa :",
+       "allpagessubmit": "Haere",
+       "categories": "Te mau huru o te ’api",
+       "watch": "Ha’apa’o",
+       "prot_1movedto2": "’Ua tāhitihia te ’api [[$1]] e ana i te ’api ’āpī [[$2]]",
+       "restriction-edit": "Fa’ahuru ’ē",
+       "restriction-move": "Tāhiti",
+       "whatlinkshere": "Te mau ’api i tū’atihia mai",
+       "tooltip-search": "Roromā’imi {{SITENAME}}",
+       "specialpages": "Te mau ’api ta’a ’ē"
 }
index 0fb063a..00047d7 100644 (file)
        "accountcreatedtext": "«$1» деп ажыглакчының бүрүткел бижиини бүдүрген.",
        "login-abort-generic": "Системаже таптыг эвес кирип тур силер",
        "loginlanguagelabel": "Дыл: $1",
+       "pt-userlogout": "Үнер",
        "php-mail-error-unknown": "PHP-ниң mail() ажыл-чорудулгазында билбес алдаг бар.",
        "changepassword": "Чажыт сөстү өскертири",
        "resetpass_text": "<!-- Маңаа сөзүглелди немерелээри -->",
        "passwordreset-email": "Э-чагааның адреси:",
        "passwordreset-emailelement": "Ажыглакчы ады: $1\nТүр чажыт сөс: $2",
        "changeemail": "Э-чагааның адресин өскертири",
-       "changeemail-header": "Бүрүткел бижиктиң э-чагааның адресин өскертири",
        "changeemail-oldemail": "Амгы э-чагааның адреси:",
        "changeemail-newemail": "Чаа э-чагааның адреси:",
        "changeemail-none": "(чок)",
        "changeemail-submit": "Э-чагааны өскертири",
-       "changeemail-cancel": "Соксаары",
        "bold_sample": "Кара сөзүглел",
        "bold_tip": "Кара сөзүглел",
        "italic_sample": "Ийлендирер сөзүглел",
        "search-interwiki-more": "(артык)",
        "searchrelated": "холбаалыг",
        "searchall": "шупту",
-       "showingresultsheader": "«'''$4'''» дилээниниң {{PLURAL:$5|1='''$3''' одуругдан '''$1''' түңнели|'''$3''' одуругдан '''$1—$2''' түңнелдери}}",
        "search-nonefound": "Айыткан негелдениң түңнели чок",
        "powersearch-ns": "Аттар делгемнеринден дилээри:",
        "powersearch-toggleall": "Шупту",
        "uncategorizedtemplates": "Аңгылалдаваан майыктар",
        "unusedcategories": "Ажыглаваан бөлүктер",
        "unusedimages": "Ажыглаваан файлдар",
-       "popularpages": "Чоннуң арыннар",
        "wantedcategories": "Күзээринге бөлүктер",
        "wantedpages": "Күзээрүнге арыннар",
        "mostlinked": "Эң холбаалар арыннар",
        "pager-older-n": "{{PLURAL:$1|артык эски}}",
        "booksources": "Номнарның үнген дөзү",
        "booksources-search-legend": "Номнуң медээлерин дилээри",
-       "booksources-go": "Күүcедири",
        "specialloguserlabel": "Күүседикчи:",
        "speciallogtitlelabel": "Target (aтка азы ажыглакчыга):",
        "log": "Журналдар",
        "unwatch": "Хайгааравас",
        "unwatchthispage": "Бо арынны хайгаарабас",
        "watchlist-details": "Чугаалажылга арыннарын санаваска, хайгаарал даңзыңарда {{PLURAL:$1|$1 арын}} бар.",
-       "wlshowlast": "Сөөлү $1 шак болгаш $2 хүн иштинде $3 көргүзери",
+       "wlshowlast": "Сөөлү $1 шак болгаш $2 хүн иштинде  көргүзери",
        "watchlist-options": "Хайгаарал даңзының эдиглери",
        "watching": "Хайгаарап турар...",
        "unwatching": "Хайгааравайн турар...",
        "exif-iimcategory-sci": "Эртем база техника",
        "exif-iimcategory-spo": "Спорт",
        "exif-iimcategory-wea": "Агаар",
-       "watchlistall2": "шупту",
        "namespacesall": "шупту",
        "monthsall": "шупту",
        "recreate": "Катап чогаадыры",
index 843ceff..04f2eb2 100644 (file)
        "search-relatedarticle": "ⵜⴰⵎⵣⴷⴰⵢⵜ",
        "searchrelated": "ⵜⴰⵎⵣⴷⴰⵢⵜ",
        "searchall": "ⵎⴰⵕⵕⴰ",
-       "showingresultsheader": "{{PLURAL:$5|ⵜⴰⵢⴰⴼⵓⵜ '''$1'''|ⵜⵉⵢⴰⴼⵓⵜⵉⵏ '''$1–$2'''}} ⵙⴳ '''$3''' ⵉ '''$4'''",
        "powersearch-toggleall": "ⵎⴰⵕⵕⴰ",
        "powersearch-togglenone": "ⴰⵎⵢⴰ (ⵓⵍⴰⵛ)",
        "search-external": "ⴰⵔⵣⵣⵓ ⴰⴱⵕⵕⴰⵏⵉ",
        "mimesearch": "ⴰⵔⵣⵣⵓ ⵏ MIME",
        "mimetype": "ⴰⵏⴰⵡ ⵓⵙⴷⴰⵡ:",
        "statistics-pages": "ⵜⵉⵙⵏⴰⵡⵉⵏ",
-       "statistics-views-total": "ⵎⴰⵕⵕⴰ ⵉⵎⵥⵕⴰⵏ",
        "brokenredirects-edit": "ⴱⴷⴷⴻⵍ",
        "brokenredirects-delete": "ⵓⴽⵓⵙ",
        "withoutinterwiki-submit": "ⵥⵕ",
        "booksources": "ⵉⵖⴱⵓⵍⴰ ⵏ ⵓⴷⵍⵉⵙ",
        "booksources-search-legend": "ⵔⵣⵣⵓ ⵅⴼ ⵉⵖⴱⵓⵍⴰ ⵏ ⵉⴷⵍⵉⵙⵏ",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "ⴷⴷⵓ",
        "allpages": "ⵎⴰⵕⵕⴰ ⵜⵉⵙⵏⴰⵡⵉⵏ",
        "allarticles": "ⵎⴰⵕⵕⴰ ⵜⵉⵙⵏⴰⵡⵉⵏ",
        "allpagessubmit": "ⴷⴷⵓ",
        "watchlistfor2": "ⵉ $1 $2",
        "watch": "ⵥⵕ",
        "unwatch": "ⵙⴱⴻⴷⴷ ⵍⵄⵙⵙⴰ",
-       "wlshowlast": "ⵉⵥⵕⵉ ⵏⵉⴹⵏ $1 ⵜⴰⵔⴰⴳⵉⵏ $2 ⵓⵙⵙⴰⵏ $3",
+       "wlshowlast": "ⵉⵥⵕⵉ ⵏⵉⴹⵏ $1 ⵜⴰⵔⴰⴳⵉⵏ $2 ⵓⵙⵙⴰⵏ",
        "changed": "ⵜⴱⴷⴷⴻⵍⴷ",
        "delete-legend": "ⵓⴽⵓⵙ",
        "protectcomment": "ⴰⵙⵔⴰⴳ:",
        "exif-iimcategory-rel": "ⴰⵙⴳⴷ ⴷ ⵜⵉⴼⵍⵙⵉⵏ",
        "exif-iimcategory-spo": "ⵜⵓⵏⵏⵓⵏⵜ",
        "exif-iimcategory-wea": "ⴰⵏⵣⵡⵉ",
-       "watchlistall2": "ⵎⴰⵕⵕⴰ",
        "namespacesall": "ⵎⴰⵕⵕⴰ",
        "monthsall": "ⵎⴰⵕⵕⴰ",
        "confirm_purge_button": "ⵡⴰⵅⵅⴰ",
index c2591b8..7bff7f2 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Andrewboltachev",
-            "Kaganer",
-            "Udmwiki",
-            "ОйЛ",
-            "לערי ריינהארט"
-        ]
-    },
-    "tog-underline": "Линкъёс ултӥз гожен сызоно",
-    "tog-hideminor": "Берпуметӥ тупатонъёслэн списоксэс ичи воштонъёстэк возьматыны",
-    "tog-hidepatrolled": "Берпуметӥ тупатонъёслэн списоксэс партрулировать каремын воштонъёстэк возьматыны",
-    "tog-newpageshidepatrolled": "Выль бамъёслэн списоксэс партрулировать каремын бамъёстэк возьматыны",
-    "tog-extendwatchlist": "Чаклан списокын вань тупатонъёсты возьматыны (озьытэк берпуметӥоссэс гинэ)",
-    "tog-usenewrc": "Выль тупатонъёслэсь списоксэс умояллям сямен возьматыны (JavsScript кулэ)",
-    "tog-numberheadings": "Заголовокъёсты автоматически нумеровать карыны",
-    "tog-showtoolbar": "Тупатон тӥрлыкъёслэн панельзэс возьматыны (JavaScript кулэ)",
-    "tog-editondblclick": "Бамъёсты шырлэсь зӥбонзэ кык пол зӥбыса тупатыны (JavaScript кулэ)",
-    "tog-editsectiononrightclick": "Cекциолэсь заголовок вылазы шырлэн бур кнопкаеныз зӥбыса тупатонзэс лэзьыны (JavaScript кулэ)",
-    "tog-rememberpassword": "Мынэсьтым пыроннимме та браузерын возьыны ($1 нуналлэсь кемагес ӧвӧл)",
-    "tog-watchcreations": "Мынэсьтым кылдытэм бамъёсме но ӝуткам файлъёсме чаклан списокам пыртыны",
-    "tog-watchdefault": "Мынэсьтым тупатэм бамъёсме но файлъёсме чаклан списокам пыртыны",
-    "tog-watchmoves": "Мынэсьтым мукет интые выжтэм бамъёсме но файлъёсме чаклан списокам пыртыны",
-    "tog-watchdeletion": "Мынэсьтым ӵушыса быдтэм бамъёсме но файлъёсме чаклан списоке пыртыны",
-    "tog-minordefault": "Вань воштонъёсты «ичи воштон» пусэн пусйыны",
-    "tog-previewontop": "Утён азьвыл учконлэсь укнозэ тупатон укнолэсь азьвылгес возьматыны",
-    "tog-previewonfirst": "Бам нырысьсэ утиськыкуз уётн азьвыл учконэз возьматыны",
-    "underline-always": "Котьку",
-    "underline-never": "Ноку",
-    "underline-default": "Браузерлэсь настройкаоссэ уже кутоно",
-    "editfont-style": "Тупатон бусыысь шрифтлэн стилез",
-    "editfont-default": "Браузерлэн настройкаосысьтыз шрифтэз уже кутоно",
-    "editfont-monospace": "Огпасьтала пусъёсын шрифт",
-    "editfont-sansserif": "Засечкатэк шрифт",
-    "editfont-serif": "Засечкаен шрифт",
-    "sunday": "арнянунал",
-    "monday": "вордӥськон",
-    "tuesday": "пуксён",
-    "wednesday": "вирнунал",
-    "thursday": "покчиарня",
-    "friday": "удмуртарня",
-    "saturday": "кӧснунал",
-    "sun": "Арн",
-    "mon": "Врд",
-    "tue": "Пкс",
-    "wed": "Врн",
-    "thu": "Пкч",
-    "fri": "Удм",
-    "sat": "Ксн",
-    "january": "толшор",
-    "february": "тулыспал",
-    "march": "южтолэзь",
-    "april": "оштолэзь",
-    "may_long": "куартолэзь",
-    "june": "инвожо",
-    "july": "пӧсьтолэзь",
-    "august": "гудырикошкон",
-    "september": "куарусён",
-    "october": "коньывуон",
-    "november": "шуркынмон",
-    "december": "толсур",
-    "january-gen": "толшоре",
-    "february-gen": "тулыспалэ",
-    "march-gen": "южтолэзе",
-    "april-gen": "оштолэзе",
-    "may-gen": "куартолэзе",
-    "june-gen": "инвожое",
-    "july-gen": "пӧсьтолэзе",
-    "august-gen": "гудырикошконэ",
-    "september-gen": "куарусёнэ",
-    "october-gen": "коньывуонэ",
-    "november-gen": "шуркынмонэ",
-    "december-gen": "толсурэ",
-    "jan": "тшт",
-    "feb": "тпт",
-    "mar": "южт",
-    "apr": "ошт",
-    "may": "южт",
-    "jun": "ивт",
-    "jul": "пст",
-    "aug": "гкт",
-    "sep": "кст",
-    "oct": "квт",
-    "nov": "шкт",
-    "dec": "тст",
-    "pagecategories": "{{PLURAL:$1|1=Категория|Категориос}}",
-    "category_header": "«$1» категориысь бамъёс",
-    "subcategories": "Подкатегориос",
-    "category-media-header": "«$1» категориысь файлъёс",
-    "category-empty": "''Та категориын али бамъёс но, файлъёс но ӧвӧл.''",
-    "hidden-categories": "{{PLURAL:$1|1=Ватэм категория|Ватэм категориос}}",
-    "hidden-category-category": "Ватэм категориос",
-    "category-subcat-count": "{{PLURAL:$2|1=Со категориын одӥг подкатегория гинэ.|Возьматэмын $1 подкатегория $2 пӧлысь.}}",
-    "category-subcat-count-limited": "Со категориын $1 подкатегория.",
-    "category-article-count": "{{PLURAL:$2|1=Со категориын одӥг бам гинэ.|Возьматэмын $1 бам $2 пӧлысь.}}",
-    "category-article-count-limited": "Со категориын $1 бам.",
-    "category-file-count": "{{PLURAL:$2|1=Со категориын одӥг файл гинэ.|Возьматэмын $1 файл $2 пӧлысь.}}",
-    "category-file-count-limited": "Со категориын $1 файл.",
-    "listingcontinuesabbrev": "азьлань",
-    "index-category": "Индексировать кароно бамъёс",
-    "noindex-category": "Индексировать каронтэм бамъёс",
-    "about": "Та сярысь",
-    "article": "Статья",
-    "mypage": "Ас бам",
-    "mytalk": "Викиавтор сярысь вераськон",
-    "anontalk": "Со IP-адрес сярысь вераськон",
-    "navigation": "Навигация",
-    "qbpageoptions": "Бамлэн настройкаосыз",
-    "faq": "Юан-веран",
-    "faqpage": "Project:Юан-веран",
-    "vector-action-addsection": "Выль темаез ватсано",
-    "vector-action-delete": "Быдтоно",
-    "vector-action-move": "Мукет интые выжтыны",
-    "vector-action-protect": "Утьыны",
-    "vector-view-create": "Кылдытоно",
-    "vector-view-edit": "Тупатоно",
-    "vector-view-history": "История",
-    "vector-view-view": "Лыдӟоно",
-    "vector-view-viewsource": "Кодзэ учкыны",
-    "errorpagetitle": "Янгыш",
-    "tagline": "{{SITENAME}}-ысь материал",
-    "help": "Валэктонъёс",
-    "search": "Утчан",
-    "searchbutton": "Утчано",
-    "searcharticle": "Мыноно",
-    "history": "Бамлэн историез",
-    "history_short": "история",
-    "printableversion": "Печатламон версия",
-    "permalink": "Ӵапак та версиезлы линк",
-    "print": "Печатлано",
-    "edit": "тупатыны",
-    "delete": "Быдтыны",
-    "protect": "Утьыны",
-    "talkpagelinktext": "Вераськон",
-    "talk": "Вераськон",
-    "toolbox": "Тӥрлык",
-    "jumptonavigation": "навигация",
-    "jumptosearch": "утчан",
-    "currentevents": "Выль иворъёс",
-    "currentevents-url": "Project:Выль иворъёс",
-    "mainpage": "Кутскон бам",
-    "mainpage-description": "Кутскон бам",
-    "portal": "Сообщество",
-    "portal-url": "Project:Портал сообщества",
-    "retrievedfrom": "«$1»-лэсь басьтэмын",
-    "editsection": "тупатыны",
-    "editsectionhint": "$1 секциез тупатоно",
-    "showtoc": "возьматоно",
-    "hidetoc": "ватоно",
-    "site-rss-feed": "$1 — RSS-лента",
-    "site-atom-feed": "$1 — Atom-лента",
-    "red-link-title": "$1 (со бам ӧвӧл на)",
-    "nstab-user": "Викиавтор",
-    "nstab-mediawiki": "Ивортон",
-    "viewsource": "Кодзэ учкыны",
-    "login": "Пырон",
-    "nav-login-createaccount": "Нимдэс вераны / Регистрациез ортчытыны",
-    "userlogin": "Регистрациез ортчытыны яке Википедие пырыны",
-    "userloginnocreate": "Пырон",
-    "logout": "Кошкыны",
-    "userlogout": "Кошкыны",
-    "createaccount": "выль вики-авторлэн регистрациез",
-    "summary": "Мар но малы тупатэмын? (вакчияк):",
-    "minoredit": "Ичи воштон",
-    "noarticletext": "В настоящий момент текст на данной странице отсутствует.\nВы можете [[Special:Search/{{PAGENAME}}|найти упоминание данного названия]] на других страницах,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов],\nили '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} создать страницу с таким названием]'''</span>.",
-    "revdelete-radio-set": "Ватэм",
-    "revdelete-radio-unset": "Адӟымон",
-    "searchresults": "Шедьтэмын",
-    "search-result-size": "$1 кыл({{PLURAL:$2|1=1 word|$2 words}})",
-    "preferences": "настройкаос",
-    "mypreferences": "Настройкаос",
-    "prefs-watchlist": "Чаклан список",
-    "recentchanges": "Выль тупатонъёс",
-    "hist": "история",
-    "recentchangeslinked": "Герӟаськем тупатонъёс",
-    "recentchangeslinked-feed": "Герӟаськем тупатонъёс",
-    "recentchangeslinked-toolbox": "Герӟаськем тупатонъёс",
-    "upload": "Файл поныны",
-    "sharedupload": "Та файл — $1-ысь, сое мукет проектъёсын но уже кутыны луэ.",
-    "randompage": "Олокыӵе статья",
-    "nbytes": "$1 байт",
-    "move": "Мукет интые выжтыны",
-    "emailmessage": "Ивортон:",
-    "watchlist": "Чаклано статьяос",
-    "mywatchlist": "Чаклан список",
-    "watch": "Чаклано",
-    "unwatch": "Чакламысь дугдыны",
-    "mycontris": "Мынам гожтэмъёсы",
-    "whatlinkshere": "Татчы линкъёс",
-    "movearticle": "Статьяез мукет интые выжтыны",
-    "move-watch": "Та бамез чаклан списоке пыртыны",
-    "delete_and_move": "Быдтыны но мукет интые выжтыны",
-    "allmessagesname": "Ивортон",
-    "tooltip-ca-talk": "Бамлэн контентэз сярысь вераськон",
-    "tooltip-search": "Утчано {{SITENAME}}",
-    "tooltip-n-mainpage": "Кутскон баме мыноно",
-    "tooltip-n-mainpage-description": "Кутскон баме мыноно",
-    "tooltip-n-portal": "Проект сярысь, мар карыны быгатоды, ужлы кулэ луэмзэ кытысь шедьтоно",
-    "tooltip-n-recentchanges": "Берпуметӥ тупатонъёслэн списоксы",
-    "tooltip-n-randompage": "Олокыӵе бамез учконо",
-    "tooltip-t-whatlinkshere": "Ваньмыз бамъёс, кудъёсаз та бамлы линксы вань",
-    "tooltip-t-specialpages": "Специальной бамъёслэн списоксы",
-    "pageinfo-toolboxlink": "Бам сярысь тодэтъёс",
-    "specialpages": "Ваньмыз панельёс"
+       "@metadata": {
+               "authors": [
+                       "Andrewboltachev",
+                       "Kaganer",
+                       "Udmwiki",
+                       "ОйЛ",
+                       "לערי ריינהארט",
+                       "TMg"
+               ]
+       },
+       "tog-underline": "Линкъёс ултӥз гожен сызоно",
+       "tog-hideminor": "Берпуметӥ тупатонъёслэн списоксэс ичи воштонъёстэк возьматыны",
+       "tog-hidepatrolled": "Берпуметӥ тупатонъёслэн списоксэс партрулировать каремын воштонъёстэк возьматыны",
+       "tog-newpageshidepatrolled": "Выль бамъёслэн списоксэс партрулировать каремын бамъёстэк возьматыны",
+       "tog-extendwatchlist": "Чаклан списокын вань тупатонъёсты возьматыны (озьытэк берпуметӥоссэс гинэ)",
+       "tog-usenewrc": "Выль тупатонъёслэсь списоксэс умояллям сямен возьматыны (JavsScript кулэ)",
+       "tog-numberheadings": "Заголовокъёсты автоматически нумеровать карыны",
+       "tog-showtoolbar": "Тупатон тӥрлыкъёслэн панельзэс возьматыны (JavaScript кулэ)",
+       "tog-editondblclick": "Бамъёсты шырлэсь зӥбонзэ кык пол зӥбыса тупатыны (JavaScript кулэ)",
+       "tog-editsectiononrightclick": "Cекциолэсь заголовок вылазы шырлэн бур кнопкаеныз зӥбыса тупатонзэс лэзьыны (JavaScript кулэ)",
+       "tog-watchcreations": "Мынэсьтым кылдытэм бамъёсме но ӝуткам файлъёсме чаклан списокам пыртыны",
+       "tog-watchdefault": "Мынэсьтым тупатэм бамъёсме но файлъёсме чаклан списокам пыртыны",
+       "tog-watchmoves": "Мынэсьтым мукет интые выжтэм бамъёсме но файлъёсме чаклан списокам пыртыны",
+       "tog-watchdeletion": "Мынэсьтым ӵушыса быдтэм бамъёсме но файлъёсме чаклан списоке пыртыны",
+       "tog-minordefault": "Вань воштонъёсты «ичи воштон» пусэн пусйыны",
+       "tog-previewontop": "Утён азьвыл учконлэсь укнозэ тупатон укнолэсь азьвылгес возьматыны",
+       "tog-previewonfirst": "Бам нырысьсэ утиськыкуз уётн азьвыл учконэз возьматыны",
+       "underline-always": "Котьку",
+       "underline-never": "Ноку",
+       "underline-default": "Браузерлэсь настройкаоссэ уже кутоно",
+       "editfont-style": "Тупатон бусыысь шрифтлэн стилез",
+       "editfont-default": "Браузерлэн настройкаосысьтыз шрифтэз уже кутоно",
+       "editfont-monospace": "Огпасьтала пусъёсын шрифт",
+       "editfont-sansserif": "Засечкатэк шрифт",
+       "editfont-serif": "Засечкаен шрифт",
+       "sunday": "арнянунал",
+       "monday": "вордӥськон",
+       "tuesday": "пуксён",
+       "wednesday": "вирнунал",
+       "thursday": "покчиарня",
+       "friday": "удмуртарня",
+       "saturday": "кӧснунал",
+       "sun": "Арн",
+       "mon": "Врд",
+       "tue": "Пкс",
+       "wed": "Врн",
+       "thu": "Пкч",
+       "fri": "Удм",
+       "sat": "Ксн",
+       "january": "толшор",
+       "february": "тулыспал",
+       "march": "южтолэзь",
+       "april": "оштолэзь",
+       "may_long": "куартолэзь",
+       "june": "инвожо",
+       "july": "пӧсьтолэзь",
+       "august": "гудырикошкон",
+       "september": "куарусён",
+       "october": "коньывуон",
+       "november": "шуркынмон",
+       "december": "толсур",
+       "january-gen": "толшоре",
+       "february-gen": "тулыспалэ",
+       "march-gen": "южтолэзе",
+       "april-gen": "оштолэзе",
+       "may-gen": "куартолэзе",
+       "june-gen": "инвожое",
+       "july-gen": "пӧсьтолэзе",
+       "august-gen": "гудырикошконэ",
+       "september-gen": "куарусёнэ",
+       "october-gen": "коньывуонэ",
+       "november-gen": "шуркынмонэ",
+       "december-gen": "толсурэ",
+       "jan": "тшт",
+       "feb": "тпт",
+       "mar": "южт",
+       "apr": "ошт",
+       "may": "крт",
+       "jun": "ивт",
+       "jul": "пст",
+       "aug": "гкт",
+       "sep": "кст",
+       "oct": "квт",
+       "nov": "шкт",
+       "dec": "тст",
+       "pagecategories": "{{PLURAL:$1|1=Категория|Категориос}}",
+       "category_header": "«$1» категориысь бамъёс",
+       "subcategories": "Подкатегориос",
+       "category-media-header": "«$1» категориысь файлъёс",
+       "category-empty": "''Та категориын али бамъёс но, файлъёс но ӧвӧл.''",
+       "hidden-categories": "{{PLURAL:$1|1=Ватэм категория|Ватэм категориос}}",
+       "hidden-category-category": "Ватэм категориос",
+       "category-subcat-count": "{{PLURAL:$2|1=Со категориын одӥг подкатегория гинэ.|Возьматэмын $1 подкатегория $2 пӧлысь.}}",
+       "category-subcat-count-limited": "Со категориын $1 подкатегория.",
+       "category-article-count": "{{PLURAL:$2|1=Со категориын одӥг бам гинэ.|Возьматэмын $1 бам $2 пӧлысь.}}",
+       "category-article-count-limited": "Со категориын $1 бам.",
+       "category-file-count": "{{PLURAL:$2|1=Со категориын одӥг файл гинэ.|Возьматэмын $1 файл $2 пӧлысь.}}",
+       "category-file-count-limited": "Со категориын $1 файл.",
+       "listingcontinuesabbrev": "азьлань",
+       "index-category": "Индексировать кароно бамъёс",
+       "noindex-category": "Индексировать каронтэм бамъёс",
+       "about": "Та сярысь",
+       "article": "Статья",
+       "mypage": "Ас бам",
+       "mytalk": "Викиавтор сярысь вераськон",
+       "anontalk": "Со IP-адрес сярысь вераськон",
+       "navigation": "Навигация",
+       "qbpageoptions": "Бамлэн настройкаосыз",
+       "faq": "Юан-веран",
+       "faqpage": "Project:Юан-веран",
+       "errorpagetitle": "Янгыш",
+       "tagline": "{{SITENAME}}-ысь материал",
+       "help": "Валэктонъёс",
+       "search": "Утчан",
+       "searchbutton": "Утчано",
+       "searcharticle": "Мыноно",
+       "history": "Бамлэн историез",
+       "history_short": "история",
+       "printableversion": "Печатламон версия",
+       "permalink": "Ӵапак та версиезлы линк",
+       "print": "Печатлано",
+       "edit": "тупатыны",
+       "delete": "Быдтыны",
+       "protect": "Утьыны",
+       "talkpagelinktext": "Вераськон",
+       "talk": "Вераськон",
+       "toolbox": "Тӥрлык",
+       "jumptonavigation": "навигация",
+       "jumptosearch": "утчан",
+       "currentevents": "Выль иворъёс",
+       "currentevents-url": "Project:Выль иворъёс",
+       "mainpage": "Кутскон бам",
+       "mainpage-description": "Кутскон бам",
+       "portal": "Сообщество",
+       "portal-url": "Project:Портал сообщества",
+       "retrievedfrom": "«$1»-лэсь басьтэмын",
+       "editsection": "тупатыны",
+       "editsectionhint": "$1 секциез тупатоно",
+       "showtoc": "возьматоно",
+       "hidetoc": "ватоно",
+       "site-rss-feed": "$1 — RSS-лента",
+       "site-atom-feed": "$1 — Atom-лента",
+       "red-link-title": "$1 (со бам ӧвӧл на)",
+       "nstab-user": "Викиавтор",
+       "nstab-mediawiki": "Ивортон",
+       "viewsource": "Кодзэ учкыны",
+       "login": "Пырон",
+       "nav-login-createaccount": "Нимдэс вераны / Регистрациез ортчытыны",
+       "userlogin": "Регистрациез ортчытыны яке Википедие пырыны",
+       "userloginnocreate": "Пырон",
+       "logout": "Кошкыны",
+       "userlogout": "Кошкыны",
+       "createaccount": "выль вики-авторлэн регистрациез",
+       "summary": "Мар но малы тупатэмын? (вакчияк):",
+       "minoredit": "Ичи воштон",
+       "noarticletext": "В настоящий момент текст на данной странице отсутствует.\nВы можете [[Special:Search/{{PAGENAME}}|найти упоминание данного названия]] на других страницах,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов],\nили '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} создать страницу с таким названием]'''</span>.",
+       "revdelete-radio-set": "Ватэм",
+       "revdelete-radio-unset": "Адӟымон",
+       "searchresults": "Шедьтэмын",
+       "search-result-size": "$1 кыл({{PLURAL:$2|1=1 word|$2 words}})",
+       "preferences": "настройкаос",
+       "mypreferences": "Настройкаос",
+       "prefs-watchlist": "Чаклан список",
+       "recentchanges": "Выль тупатонъёс",
+       "hist": "история",
+       "recentchangeslinked": "Герӟаськем тупатонъёс",
+       "recentchangeslinked-feed": "Герӟаськем тупатонъёс",
+       "recentchangeslinked-toolbox": "Герӟаськем тупатонъёс",
+       "upload": "Файл поныны",
+       "sharedupload": "Та файл — $1-ысь, сое мукет проектъёсын но уже кутыны луэ.",
+       "randompage": "Олокыӵе статья",
+       "nbytes": "$1 байт",
+       "move": "Мукет интые выжтыны",
+       "emailmessage": "Ивортон:",
+       "watchlist": "Чаклано статьяос",
+       "mywatchlist": "Чаклан список",
+       "watch": "Чаклано",
+       "unwatch": "Чакламысь дугдыны",
+       "mycontris": "Мынам гожтэмъёсы",
+       "whatlinkshere": "Татчы линкъёс",
+       "movearticle": "Статьяез мукет интые выжтыны",
+       "move-watch": "Та бамез чаклан списоке пыртыны",
+       "delete_and_move": "Быдтыны но мукет интые выжтыны",
+       "allmessagesname": "Ивортон",
+       "tooltip-ca-talk": "Бамлэн контентэз сярысь вераськон",
+       "tooltip-search": "Утчано {{SITENAME}}",
+       "tooltip-n-mainpage": "Кутскон баме мыноно",
+       "tooltip-n-mainpage-description": "Кутскон баме мыноно",
+       "tooltip-n-portal": "Проект сярысь, мар карыны быгатоды, ужлы кулэ луэмзэ кытысь шедьтоно",
+       "tooltip-n-recentchanges": "Берпуметӥ тупатонъёслэн списоксы",
+       "tooltip-n-randompage": "Олокыӵе бамез учконо",
+       "tooltip-t-whatlinkshere": "Ваньмыз бамъёс, кудъёсаз та бамлы линксы вань",
+       "tooltip-t-specialpages": "Специальной бамъёслэн списоксы",
+       "pageinfo-toolboxlink": "Бам сярысь тодэтъёс",
+       "specialpages": "Ваньмыз панельёс"
 }
index a4f87fa..902c9c1 100644 (file)
        "passwordreset-emailsent-capture": "پارولنى قايتا بېكىتىش ئېلخېتى يوللاندى، تۆۋەندە كۆرسىتىلىدۇ.",
        "passwordreset-emailerror-capture": "ھاسىل قىلىنغان پارولنى قايتا بېكىتىش ئېلخېتى تۆۋەندە كۆرسىتىلگەندەك ئەمما ئۇنى {{GENDER:$2|ئىشلەتكۈچى}}گە يوللىيالمىدى: $1",
        "changeemail": "ئېلخەت ئادرېس ئۆزگەرت",
-       "changeemail-header": "ھېساباتنىڭ ئېلخەت ئادرېسىنى ئۆزگەرت",
        "changeemail-text": "بۇ جەدۋەل تاماملانسا ئېلخەت ئادرېسىڭىزنى ئۆزگەرتىدۇ. سىز ئىم كىرگۈزۈپ بۇ ئۆزگەرتىشنى جەزملەيسىز.",
        "changeemail-no-info": "سىز تىزىمغا كىرگەندىن كېيىن بىۋاسىتە بۇ بەتكە كىرىشىڭىز لازىم.",
        "changeemail-oldemail": "نۆۋەتتىكى ئېلخەت ئادرېسى:",
        "changeemail-none": "(يوق)",
        "changeemail-password": "{{SITENAME}} دىكى پارولىڭىز:",
        "changeemail-submit": "ئېلخەت ئۆزگەرت",
-       "changeemail-cancel": "ۋاز كەچ",
        "changeemail-throttled": "سىز بۇ ھېساباتتا تىزىمغا كىرىشنى كۆپ قېتىم سىنىدىڭىز.\n$1 ساقلاپ، ئاندىن قايتا سىناڭ.",
        "resettokens": "ئاچقۇچلۇق بەلگىلەرنى قايتا بېكىتمەك",
        "resettokens-text": "سىز بۇ يەردە سىزنىڭ ھىساۋاتىڭىزگە مۇناسۋەتلىك شەخسى ئۇچۇر مەخپىيەتلىكىنى قايتا كۆرەلەيسىز.\n\nئۇ ئۇچۇرلار ھەمبەھرلىنىپ كەتسە ياكى باشقىلار ئىشلىتۋالغان بولسا، ئۇ ئۇچۇرلارنى ئەسلىگە قايتۇرۇڭ.",
        "mergehistory-reason": "سەۋەب:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "بىرلەشتۈرۈش خاتىرىسى",
-       "pagemerge-logentry": "[[$1]] نى [[$2]] غا بىرلەشتۈرۈلدى: ( تۈزىتىلگەن نەشرى $3)",
        "revertmerge": "پارچىلا",
        "mergelogpagetext": "تۆۋەندىكىسى يېقىندا بىر بەتنىڭ تۈزىتىش تارىخىنىڭ باشقا بىر بەتكە بىرلەشتۈرۈلگەنلىك تىزىملىكى",
        "history-title": "\"$1\" نىڭ ئۆزگەرتىش خاتىرىسى",
        "searchrelated": "ئالاقىدار",
        "searchall": "ھەممىسى",
        "showingresults": "تۆۋەندە '''$2''' - نەتىجىدىن باشلانغان {{PLURAL:$1|'''1''' نەتىجە|'''$1''' نەتىجە}} كۆرسىتىدۇ:",
-       "showingresultsheader": "'''$4''' نىڭ {{PLURAL:$5|'''$1''' دىن '''$3'''غىچە نەتىجە | '''$1 - $2''' غىچە جەمئى '''$3''' نەتىجە}}",
        "search-nonefound": "سۈرۈشتۈرۈشكە ماس نەتىجە تېپىلمىدى.",
        "powersearch-legend": "ئالىي ئىزدەش",
        "powersearch-ns": "ئات بوشلۇقىدىن ئىزدە:",
        "statistics": "ستاتىستىكا",
        "statistics-header-pages": "بەت ستاتىستىكا",
        "statistics-header-edits": "تەھرىر ستاتىستىكا",
-       "statistics-header-views": "كۆرۈش ستاتىستىكا",
        "statistics-header-users": "ئىشلەتكۈچى ستاتىستىكا",
        "statistics-header-hooks": "باشقا سىتاتىستىكا",
        "statistics-articles": "مەزمۇن بېتى",
        "statistics-files": "يۈكلەنگەن ھۆججەتلەر",
        "statistics-edits": " {{SITENAME}} تەڭشىگەن بەتنىڭ تەھرىر سانى",
        "statistics-edits-average": "ھەر بىر بەتنىڭ ئوتتۇرىچە تەھرىر سانى",
-       "statistics-views-total": "كۆرسىتىش ئومۇمى سانى",
-       "statistics-views-total-desc": "مەۋجۇت بولمىغان بەت ۋە ئالاھىدە بەتلەرنىڭ كۆرۈلۈش سانىنى ئۆز ئىچىگە ئالمايدۇ",
-       "statistics-views-peredit": "ھەر قېتىملىق تەھرىرنى كۆرسىتىش سانى",
        "statistics-users": "خەتلەتكەن [[Special:ListUsers|ئىشلەتكۈچى]]",
        "statistics-users-active": "ئاكتىپ ئىشلەتكۈچى",
        "statistics-users-active-desc": "ئالدىنقى {{PLURAL:$1|كۈن|$1 كۈن}} دىكى مەشغۇلات قىلغان ئىشلەتكۈچىلەر",
-       "statistics-mostpopular": "ئەڭ كۆپ كۆرۈلگەن بەتلەر",
        "doubleredirects": "قوش قايتا نىشانلانغان بەت",
        "doubleredirectstext": "بۇ بەتتە قايتا نىشانلانغان بەت يەنە بىر قايتا نىشانلانغان بەتنى نىشانغانلىق تىزىملىكى كۆرسىتىلدى.\nھەر بىر قۇردا بىرىنچى ۋە ئىككىنچى قايتا نىشانلانغان بەتنىڭ ئۇلانمىسىنى شۇنداقلا ئىككىنچى قايتا نىشانلانغان بەتنىڭ نىشانىنى ئۆز ئىچىگە ئالىدۇ، ئادەتتە كۆرسىتىلىدىغىنى  \"ھەقىقىي\" نىشان بەت، مۇنداقچە ئېيتقاندا بىرىنچى نىشانلانغان بەت نىشانلايدىغان بەتتۇر.",
        "double-redirect-fixed-move": "[[$1]] يۆتكەلدى.\\n\nھازىر [[$2]] نى قايتا نىشانلىدى.",
        "uncategorizedtemplates": "تۈرگە ئايرىلمىغان قېلىپلار",
        "unusedcategories": "ئىشلىتىلمىگەن تۈرلەر",
        "unusedimages": "ئىشلىتىلمىگەن ھۆججەتلەر",
-       "popularpages": "جەلپكار بەتلەر",
        "wantedcategories": "لازىملىق تۈرلەر",
        "wantedpages": "كېرەكلىك بەتلەر",
        "wantedpages-badtitle": "نەتىجە گۇرۇپپىسىدىكى ئىناۋەتسىز ماۋزۇ: $1",
        "booksources": "كىتاب مەنبەسى",
        "booksources-search-legend": "كىتاب مەنبەسى ئىزدە",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "يۆتكەل",
        "booksources-text": "تۆۋەندىكىسى بىر قىسىم تور كىتابخانىلىرىنىڭ تىزىملىكى، ئىچىدە سىز ئىزدىمەكچى بولغان كىتابلارنىڭ تېخىمۇ كۆپ ئۇچۇرى بولۇشى مۇمكىن:",
        "booksources-invalid-isbn": "تەمىنلىگەن ISBN نومۇرى توغرا ئەمەس. ئەسلى كۆچۈرگەن مەنبەدىكى نومۇردا خاتالىق بار يوقلۇقىنى تەكشۈرۈڭ.",
        "specialloguserlabel": "ئىشلەتكۈچى:",
        "wlheader-enotif": "ئېلخەتتە ئەسكەرتىش ئىقتىدارى قوزغىتىلدى.",
        "wlheader-showupdated": "سىز ئالدىنقى قېتىم كۆرگەندىن كېيىن ئۆزگەرتىلگەن بەتلەر '''توم''' كۆرۈنىدۇ",
        "wlnote": "تۆۋەندىكىسى يېقىنقى {{PLURAL:$2|سائەت}} ئىچىدىكى ئاخىرقى '{{PLURAL:$1| قېتىملىق}}  ئۆزگەرتىش، $3 $4 گىچە.",
-       "wlshowlast": "يېقىنقى $1 سائەت $2 كۈن $3 نىڭ ئۆزگەرتىشىنى كۆرسەت",
+       "wlshowlast": "يېقىنقى $1 سائەت $2 كۈن  نىڭ ئۆزگەرتىشىنى كۆرسەت",
        "watchlist-options": "كۆزەت تىزىملىك تاللانما",
        "watching": "كۆزەت قىلىۋاتىدۇ…",
        "unwatching": "كۆزەت قىلمايۋاتىدۇ…",
        "import": "بەت ئەكىر",
        "importinterwiki": "wiki ھالقىپ ئەكىر",
        "import-interwiki-text": "wiki دىن بىرنى ۋە بەت ماۋزۇسىنى تاللاپ ئەكىرىڭ.\nتۈزىتىلگەن ۋاقىت ۋە تەھرىرلىگۈچى ئاتى بىرلا ۋاقىتتا ساقلىنىدۇ.\nبارلىق wiki ھالقىغان ئەكىرىش مەشغۇلاتى  [[Special:Log/import|ئەكىرىش خاتىرىسى]]غا خاتىرىلىنىدۇ.",
-       "import-interwiki-source": "مەنبە wiki /بەت:",
        "import-interwiki-history": "بۇ بەتنىڭ ھەممە تارىخى تۈزىتىلگەن نەشرىنى كۆچۈر.",
        "import-interwiki-templates": "ھەممە قېلىپىنى ئۆز ئىچىگە ئالىدۇ",
        "import-interwiki-submit": "ئەكىر",
        "pageinfo-robot-policy": "ئىزدەش ماتور ھالىتى",
        "pageinfo-robot-index": "چەكلەنمىگەن",
        "pageinfo-robot-noindex": "چەكلەنگەن",
-       "pageinfo-views": "كۆرۈنۈش سانى",
        "pageinfo-watchers": "بەت كۆزەتكۈچىلەر سانى",
        "pageinfo-redirects-name": "بۇ بەتكە قايتا نىشانلايدۇ",
        "pageinfo-redirects-value": "$1",
        "exif-urgency-low": "تۆۋەن ($1)",
        "exif-urgency-high": "يۇقىرى ($1)",
        "exif-urgency-other": "ئىشلەتكۈچى بەلگىلىگەن ئالدىنلىق ($1)",
-       "watchlistall2": "ھەممىسى",
        "namespacesall": "ھەممىسى",
        "monthsall": "ھەممىسى",
        "confirmemail": "جەزملەش ئېلخەت ئادرېسى",
        "logentry-rights-rights-legacy": "$3 نىڭ ئىشلەتكۈچى گۇرۇپپىسىنى $1 ئۆزگەرتتى",
        "logentry-rights-autopromote": "$1 نىڭ ئىشلەتكۈچى گۇرۇپپىسى ئۆزلۈكىدىن $4 دىن $5 غا يۈكسەلدى",
        "rightsnone": "(يوق)",
+       "revdelete-summary": "ئۈزۈندە تەھرىرلە",
        "feedback-bugornote": "ئەگەر بىر تېخنىكىلىق مەسىلىنى تەپسىلىي بايان قىلىشقا تەييارلانماقچى بولسىڭىز، [$1 خاتالىق دوكلات]ى يوللاڭ. ياكى تۆۋەندىكى ئاددىي جەدۋەلنى ئىشلىتىڭ. ئىنكاسىڭىز \"[$3 $2]\" بەتكە قوشۇلىدۇ، ئىشلەتكۈچى ئاتىڭىز ۋە ئىشلەتكەن توركۆرگۈڭىز قوشۇپ قويۇلىدۇ.",
        "feedback-subject": "تېما:",
        "feedback-message": "ئۇچۇر:",
index 08bc086..8944f40 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Jose77",
-            "M.erdem",
-            "לערי ריינהארט"
-        ]
-    },
-    "sunday": "Yekshenbe",
-    "monday": "Düshenbe",
-    "tuesday": "Seyshenbe",
-    "wednesday": "Charshenbe",
-    "thursday": "Peyshenbe",
-    "friday": "Jüme",
-    "saturday": "Shenbe",
-    "january": "Yanwar",
-    "february": "Féwral",
-    "march": "Mart",
-    "april": "Aprél",
-    "may_long": "May",
-    "june": "Iyun",
-    "july": "Iyul",
-    "august": "Awghust",
-    "september": "Séntebr",
-    "october": "Öktebir",
-    "november": "Noyabr",
-    "december": "Dékabr",
-    "may-gen": "May",
-    "september-gen": "Séntebr",
-    "october-gen": "Öktebir",
-    "november-gen": "Noyabr",
-    "december-gen": "Dékabr",
-    "jan": "1-Ay",
-    "feb": "2-Ay",
-    "mar": "3-Ay",
-    "apr": "4-Ay",
-    "may": "May",
-    "jun": "6-Ay",
-    "jul": "7-Ay",
-    "aug": "8-Ay",
-    "sep": "9-Ay",
-    "oct": "10-Ay",
-    "nov": "11-Ay",
-    "dec": "12-Ay",
-    "mypage": "Mening beti",
-    "navigation": "Körüsh",
-    "qbedit": "Uzgartish",
-    "help": "Yardem",
-    "search": "Izdash",
-    "searchbutton": "Izdash",
-    "go": "Kuchush",
-    "searcharticle": "Kuchush",
-    "history_short": "Tarih",
-    "printableversion": "Basma Nushisi",
-    "permalink": "Menggülük bet",
-    "edit": "Uzgartish",
-    "delete": "Yukhutush",
-    "protect": "Koghdash",
-    "talkpagelinktext": "Monazire",
-    "talk": "Monazire",
-    "toolbox": "Qural sanduqlari",
-    "otherlanguages": "Bashqa tillarda",
-    "jumptosearch": "izdash",
-    "currentevents": "Hazirqi weqeler",
-    "edithelp": "Uzgartish yardemi",
-    "mainpage": "Bash Bet",
-    "mainpage-description": "Bash Bet",
-    "portal": "Tor Jemiyiti",
-    "ok": "MAQUL",
-    "editsection": "uzgartish",
-    "editold": "uzgartish",
-    "red-link-title": "$1 (bet yoq)",
-    "nstab-main": "Bet",
-    "nstab-user": "Ishletkuqi tor beti",
-    "nstab-special": "Alahide betleri",
-    "nstab-help": "Yardem beti",
-    "yourname": "Ishletkuqi ismi:",
-    "yourpassword": "Achkuch:",
-    "yourpasswordagain": "Achkuchni khayta besing:",
-    "login": "Kirish",
-    "logout": "Chiqish",
-    "userlogout": "Chikish",
-    "gotaccountlink": "Kirish",
-    "loginlanguagelabel": "Til: $1",
-    "passwordreset-username": "Ishletkuchi ismi:",
-    "summary": "Hulasa:",
-    "minoredit": "Bu Kichik Uzgartish",
-    "watchthis": "Bu Batka Kharang",
-    "savearticle": "Betni saqlang",
-    "showpreview": "Aldinala kurux",
-    "showdiff": "Uzgurushlerni kursutung",
-    "loginreqlink": "kirish",
-    "newarticle": "(Yéngi)",
-    "prevn": "aldinqi {{PLURAL:$1|$1}}",
-    "nextn": "kéyinki {{PLURAL:$1|$1}}",
-    "prefs-rc": "Yengi uzgurush",
-    "searchresultshead": "Izdash",
-    "timezoneregion-asia": "Asiya",
-    "timezoneregion-europe": "Yawropa",
-    "youremail": "Élxet:",
-    "username": "Ishletkuqi ismi:",
-    "yourlanguage": "Til:",
-    "email": "Élxet:",
-    "recentchanges": "Yéngi özgirish",
-    "recentchangeslinked": "Yéqinqi özgirishler",
-    "recentchangeslinked-feed": "Yéqinqi özgirishler",
-    "recentchangeslinked-toolbox": "Yéqinqi özgirishler",
-    "recentchangeslinked-page": "Betning ismi:",
-    "upload": "Yéngi höjjet kirgüzush",
-    "uploadbtn": "Yengi Hujjat Kirguzush",
-    "filedesc": "Hulasa",
-    "watchthisupload": "Bu Batka Kharang",
-    "filehist-user": "Ishletkuchi",
-    "filedelete-submit": "Yukhutush",
-    "randompage": "Halighan Tor Beti",
-    "brokenredirects-edit": "uzgartish",
-    "brokenredirects-delete": "yukhutush",
-    "newpages": "Yéngi betler",
-    "newpages-username": "Ishletkuqi ismi:",
-    "move": "Yotkash",
-    "movethispage": "Bu batni yotkang",
-    "booksources-go": "Kuchush",
-    "nextpage": "Kéyinki bet ($1)",
-    "prevpage": "Aldinqi bet ($1)",
-    "allpagessubmit": "Kuchush",
-    "linksearch-ok": "Izdash",
-    "watchlist": "Men kharawatkhan tor betleri",
-    "watch": "Karang",
-    "watchthispage": "Bu Batka Kharang",
-    "restriction-edit": "Uzgartish",
-    "restriction-move": "Yotkash",
-    "undelete-search-submit": "Izdash",
-    "sp-contributions-talk": "Monazire",
-    "sp-contributions-submit": "Izdash",
-    "whatlinkshere": "Bashqa tor betler",
-    "whatlinkshere-page": "Bet:",
-    "ipblocklist-submit": "Izdash",
-    "movearticle": "Yotkigen beti:",
-    "move-watch": "Bu Batka Kharang",
-    "movepagebtn": "Yotkigen beti",
-    "allmessages": "System havarleri",
-    "tooltip-pt-logout": "Chikish",
-    "tooltip-ca-move": "Bu batni yotkang",
-    "tooltip-search": "Izdash {{SITENAME}}",
-    "tooltip-p-logo": "Bash Bet",
-    "ilsubmit": "Izdash",
-    "confirm_purge_button": "Maqul",
-    "imgmultipageprev": "← aldinqi bet",
-    "imgmultipagenext": "kéyinki bet →",
-    "imgmultigo": "Kuchush!",
-    "table_pager_next": "Kéyinki bet",
-    "table_pager_prev": "Aldinqi bet",
-    "table_pager_first": "Birinchi bet",
-    "table_pager_last": "Eng axirqi bet",
-    "table_pager_limit_submit": "Kuchush",
-    "specialpages": "Alahide tor betleri",
-    "expand_templates_ok": "Maqul"
+       "@metadata": {
+               "authors": [
+                       "Jose77",
+                       "M.erdem",
+                       "לערי ריינהארט"
+               ]
+       },
+       "sunday": "Yekshenbe",
+       "monday": "Düshenbe",
+       "tuesday": "Seyshenbe",
+       "wednesday": "Charshenbe",
+       "thursday": "Peyshenbe",
+       "friday": "Jüme",
+       "saturday": "Shenbe",
+       "january": "Yanwar",
+       "february": "Féwral",
+       "march": "Mart",
+       "april": "Aprél",
+       "may_long": "May",
+       "june": "Iyun",
+       "july": "Iyul",
+       "august": "Awghust",
+       "september": "Séntebr",
+       "october": "Öktebir",
+       "november": "Noyabr",
+       "december": "Dékabr",
+       "may-gen": "May",
+       "september-gen": "Séntebr",
+       "october-gen": "Öktebir",
+       "november-gen": "Noyabr",
+       "december-gen": "Dékabr",
+       "jan": "1-Ay",
+       "feb": "2-Ay",
+       "mar": "3-Ay",
+       "apr": "4-Ay",
+       "may": "May",
+       "jun": "6-Ay",
+       "jul": "7-Ay",
+       "aug": "8-Ay",
+       "sep": "9-Ay",
+       "oct": "10-Ay",
+       "nov": "11-Ay",
+       "dec": "12-Ay",
+       "mypage": "Mening beti",
+       "navigation": "Körüsh",
+       "qbedit": "Uzgartish",
+       "help": "Yardem",
+       "search": "Izdash",
+       "searchbutton": "Izdash",
+       "go": "Kuchush",
+       "searcharticle": "Kuchush",
+       "history_short": "Tarih",
+       "printableversion": "Basma Nushisi",
+       "permalink": "Menggülük bet",
+       "edit": "Uzgartish",
+       "delete": "Yukhutush",
+       "protect": "Koghdash",
+       "talkpagelinktext": "Monazire",
+       "talk": "Monazire",
+       "toolbox": "Qural sanduqlari",
+       "otherlanguages": "Bashqa tillarda",
+       "jumptosearch": "izdash",
+       "currentevents": "Hazirqi weqeler",
+       "edithelp": "Uzgartish yardemi",
+       "mainpage": "Bash Bet",
+       "mainpage-description": "Bash Bet",
+       "portal": "Tor Jemiyiti",
+       "ok": "MAQUL",
+       "editsection": "uzgartish",
+       "editold": "uzgartish",
+       "red-link-title": "$1 (bet yoq)",
+       "nstab-main": "Bet",
+       "nstab-user": "Ishletkuqi tor beti",
+       "nstab-special": "Alahide betleri",
+       "nstab-help": "Yardem beti",
+       "yourname": "Ishletkuqi ismi:",
+       "yourpassword": "Achkuch:",
+       "yourpasswordagain": "Achkuchni khayta besing:",
+       "login": "Kirish",
+       "logout": "Chiqish",
+       "userlogout": "Chikish",
+       "gotaccountlink": "Kirish",
+       "loginlanguagelabel": "Til: $1",
+       "passwordreset-username": "Ishletkuchi ismi:",
+       "summary": "Hulasa:",
+       "minoredit": "Bu Kichik Uzgartish",
+       "watchthis": "Bu Batka Kharang",
+       "savearticle": "Betni saqlang",
+       "showpreview": "Aldinala kurux",
+       "showdiff": "Uzgurushlerni kursutung",
+       "loginreqlink": "kirish",
+       "newarticle": "(Yéngi)",
+       "prevn": "aldinqi {{PLURAL:$1|$1}}",
+       "nextn": "kéyinki {{PLURAL:$1|$1}}",
+       "prefs-rc": "Yengi uzgurush",
+       "searchresultshead": "Izdash",
+       "timezoneregion-asia": "Asiya",
+       "timezoneregion-europe": "Yawropa",
+       "youremail": "Élxet:",
+       "username": "Ishletkuqi ismi:",
+       "yourlanguage": "Til:",
+       "email": "Élxet:",
+       "recentchanges": "Yéngi özgirish",
+       "recentchangeslinked": "Yéqinqi özgirishler",
+       "recentchangeslinked-feed": "Yéqinqi özgirishler",
+       "recentchangeslinked-toolbox": "Yéqinqi özgirishler",
+       "recentchangeslinked-page": "Betning ismi:",
+       "upload": "Yéngi höjjet kirgüzush",
+       "uploadbtn": "Yengi Hujjat Kirguzush",
+       "filedesc": "Hulasa",
+       "watchthisupload": "Bu Batka Kharang",
+       "filehist-user": "Ishletkuchi",
+       "filedelete-submit": "Yukhutush",
+       "randompage": "Halighan Tor Beti",
+       "brokenredirects-edit": "uzgartish",
+       "brokenredirects-delete": "yukhutush",
+       "newpages": "Yéngi betler",
+       "newpages-username": "Ishletkuqi ismi:",
+       "move": "Yotkash",
+       "movethispage": "Bu batni yotkang",
+       "nextpage": "Kéyinki bet ($1)",
+       "prevpage": "Aldinqi bet ($1)",
+       "allpagessubmit": "Kuchush",
+       "linksearch-ok": "Izdash",
+       "watchlist": "Men kharawatkhan tor betleri",
+       "watch": "Karang",
+       "watchthispage": "Bu Batka Kharang",
+       "restriction-edit": "Uzgartish",
+       "restriction-move": "Yotkash",
+       "undelete-search-submit": "Izdash",
+       "sp-contributions-talk": "Monazire",
+       "sp-contributions-submit": "Izdash",
+       "whatlinkshere": "Bashqa tor betler",
+       "whatlinkshere-page": "Bet:",
+       "ipblocklist-submit": "Izdash",
+       "movearticle": "Yotkigen beti:",
+       "move-watch": "Bu Batka Kharang",
+       "movepagebtn": "Yotkigen beti",
+       "allmessages": "System havarleri",
+       "tooltip-pt-logout": "Chikish",
+       "tooltip-ca-move": "Bu batni yotkang",
+       "tooltip-search": "Izdash {{SITENAME}}",
+       "tooltip-p-logo": "Bash Bet",
+       "ilsubmit": "Izdash",
+       "confirm_purge_button": "Maqul",
+       "imgmultipageprev": "← aldinqi bet",
+       "imgmultipagenext": "kéyinki bet →",
+       "imgmultigo": "Kuchush!",
+       "table_pager_next": "Kéyinki bet",
+       "table_pager_prev": "Aldinqi bet",
+       "table_pager_first": "Birinchi bet",
+       "table_pager_last": "Eng axirqi bet",
+       "table_pager_limit_submit": "Kuchush",
+       "specialpages": "Alahide tor betleri",
+       "expand_templates_ok": "Maqul"
 }
index 26a9de1..4d3384b 100644 (file)
@@ -49,7 +49,9 @@
                        "아라",
                        "Calak",
                        "Mykola Swarnyk",
-                       "Milicevic01"
+                       "Milicevic01",
+                       "Lamsec",
+                       "Olion"
                ]
        },
        "tog-underline": "Підкреслювання посилань:",
@@ -71,7 +73,7 @@
        "tog-previewontop": "Показувати попередній перегляд перед вікном редагування, а не після",
        "tog-previewonfirst": "Показувати попередній перегляд під час першого редагування",
        "tog-enotifwatchlistpages": "Повідомляти електронною поштою про зміну сторінки або файлу з мого списку спостереження",
-       "tog-enotifusertalkpages": "Ð\9fовÑ\96домлÑ\8fÑ\82и ÐµÐ»ÐµÐºÑ\82Ñ\80онноÑ\8e Ð¿Ð¾Ñ\88Ñ\82оÑ\8e Ð¿Ñ\80о Ð·Ð¼Ñ\96ни Ð½Ð° Ð¼Ð¾Ñ\97й Ñ\81Ñ\82оÑ\80Ñ\96нÑ\86Ñ\96 обговорення",
+       "tog-enotifusertalkpages": "Ð\9fовÑ\96домлÑ\8fÑ\82и ÐµÐ»ÐµÐºÑ\82Ñ\80онноÑ\8e Ð¿Ð¾Ñ\88Ñ\82оÑ\8e Ð¿Ñ\80о Ð·Ð¼Ñ\96ни Ð¼Ð¾Ñ\94Ñ\97 Ñ\81Ñ\82оÑ\80Ñ\96нки обговорення",
        "tog-enotifminoredits": "Надсилати мені електронного листа навіть при незначних редагуваннях сторінок та файлів",
        "tog-enotifrevealaddr": "Показувати мою поштову адресу в повідомленнях",
        "tog-shownumberswatching": "Показувати число користувачів, які додали сторінку до свого списку спостереження",
        "october-date": "$1 жовтня",
        "november-date": "$1 листопада",
        "december-date": "$1 грудня",
-       "pagecategories": "{{PLURAL:$1|1=Категорія|Категорії|Категорій}}",
-       "category_header": "Сторінок в категорії «$1»",
+       "pagecategories": "{{PLURAL:$1|1=Категорія|Категорії}}",
+       "category_header": "Сторінок у категорії «$1»",
        "subcategories": "Підкатегорії",
        "category-media-header": "Файли в категорії «$1»",
        "category-empty": "''Ця категорія зараз порожня.''",
-       "hidden-categories": "{{PLURAL:$1|1=Прихована категорія|Приховані категорії|Прихованих категорій}}",
+       "hidden-categories": "{{PLURAL:$1|1=Прихована категорія|Приховані категорії}}",
        "hidden-category-category": "Приховані категорії",
        "category-subcat-count": "{{PLURAL:$2|Ця категорія має тільки таку підкатегорію.|Показано $1 {{PLURAL:$1|підкатегорію з|підкатегорії з|підкатегорій із}} $2.}}",
        "category-subcat-count-limited": "У цій категорії {{PLURAL:$1|$1 підкатегорія|$1 підкатегорії|$1 підкатегорій}}.",
        "otherlanguages": "Іншими мовами",
        "redirectedfrom": "(Перенаправлено з $1)",
        "redirectpagesub": "Сторінка-перенаправлення",
+       "redirectto": "Перенаправити на:",
        "lastmodifiedat": "Цю сторінку востаннє змінено: $2, $1.",
        "viewcount": "Цю сторінку переглядали $1 {{PLURAL:$1|раз|рази|разів}}.",
        "protectedpage": "Захищена сторінка",
        "viewsourcetext": "Ви можете переглянути та скопіювати початковий текст цієї сторінки:",
        "viewyourtext": "Ви можете переглянути та скопіювати текст '''ваших редагувань''' на цій сторінці:",
        "protectedinterface": "Ця сторінка містить текст інтерфейсу програмного забезпечення цієї Вікі, захищений від небажаного втручання. Щоб додати або змінити переклади для всіх вікі, перейдіть до [//translatewiki.net/ translatewiki.net], проекту локалізації MediaWiki.",
-       "editinginterface": "'''Увага:''' Ви редагуєте сторінку, що є частиною текстового інтерфейсу програм. \nЗміни цієї сторінки спричинять зміну інтерфейсу для інших користувачів цієї Вікі. \nЩоб додати чи змінити переклади для всіх вікі, використовуйте [//translatewiki.net/wiki/Main_Page?setlang=uk translatewiki.net] — проект локалізації MediaWiki.",
+       "editinginterface": "'''Увага:''' Ви редагуєте сторінку, що є частиною текстового інтерфейсу програм. \nЗміни цієї сторінки спричинять зміну інтерфейсу для інших користувачів цієї Вікі.",
+       "translateinterface": "Для того, щоб додати чи змінити переклад повідомлень інтерфейсу для всіх вікі-проектів, скористайтеся будь ласка проектом локалізації MediaWiki: [//translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "Сторінка захищена від змін, оскільки вона належить до {{PLURAL:$1|1=сторінки, для якої|сторінок, для яких}} установлено каскадний захист: $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)",
        "createaccount-text": "Хтось створив обліковий запис «$2» на сервері проекту {{SITENAME}} ($4) з паролем «$3», зазначивши вашу адресу електронної пошти. Вам слід зайти і змінити пароль.\n\nІгноруйте дане повідомлення, якщо обліковий запис було створено помилково.",
        "login-throttled": "Ви зробили надто багато спроб ввійти до системи.\nБудь ласка, зачекайте $1 перед повторною спробою.",
        "login-abort-generic": "Не вдалося ввійти до системи",
+       "login-migrated-generic": "Ваш обліковий запис було перенесено і ваше ім'я користувача більше не існує на цій вікі.",
        "loginlanguagelabel": "Мова: $1",
        "suspicious-userlogout": "Ваш запит на завершення сеансу відхилений, оскільки він схожий на запит, відправлений зіпсованим веб-оглядачем або кешуючим проксі-сервером.",
        "createacct-another-realname-tip": "Справжнє ім'я є необов'язковим.\nЯкщо ви вирішите надати його, воно буде використовуватись для позначення редагувань та інших дій користувача.",
        "passwordreset-emailsent-capture": "Електронний лист скидання пароля було надіслано, як показано нижче.",
        "passwordreset-emailerror-capture": "Електронний лист для відновлення пароля мав бути надісланий, як показано нижче, але його надсилання {{GENDER:$2|користувачеві|користувачці}} $1 не вдалося.",
        "changeemail": "Змінити адресу електронної пошти",
-       "changeemail-header": "Зміна адреси електронної пошти",
        "changeemail-text": "Заповніть цю форму, щоб змінити адресу електронної пошти. Вам потрібно буде ввести пароль, щоб підтвердити ці зміни.",
        "changeemail-no-info": "Ви повинні увійти в систему, щоб отримати безпосередній доступ до цієї сторінки.",
        "changeemail-oldemail": "Поточна адреса електронної пошти:",
        "changeemail-none": "(немає)",
        "changeemail-password": "Ваш пароль проекту {{SITENAME}}:",
        "changeemail-submit": "Змінити адресу електронної пошти",
-       "changeemail-cancel": "Скасувати",
        "changeemail-throttled": "Ви зробили надто багато спроб ввійти до системи.\nБудь ласка, зачекайте $1 перед повторною спробою.",
        "resettokens": "Скидання жетонів",
        "resettokens-text": "Ви можете скинути жетони, що забезпечують доступ до певних особистих даних, пов'язаних тут із вашим обліковим записом.\nВам слід це зробити, якщо ви випадково поділились жетонами з кимось, або якщо ваш обліковий запис було зламано.",
        "showpreview": "Попередній перегляд",
        "showdiff": "Показати зміни",
        "blankarticle": "'''Попередження:''' Створена вами сторінка порожня.\nЯкщо Ви знову натиснете «{{int:savearticle}}», сторінку буде створено без вмісту.",
-       "anoneditwarning": "'''Увага''': Ви не увійшли до системи. До історії змін цієї сторінки буде записана ваша IP-адреса.",
+       "anoneditwarning": "<strong>Увага!</strong> Ви не авторизувалися на сайті. Ваша IP-адреса буде публічно видима, якщо ви будете вносити будь-які правки. Якщо ви <strong>[$1 увійдете]</strong> або <strong>[$2 створите обліковий запис]</strong>, правки замість цього будуть пов'язані з вашим ім'ям користувача, а також у вас з'являться інші переваги.",
        "anonpreviewwarning": "''Ви не увійшли в систему. Якщо ви виконаєте збереження, то в історію сторінки буде записана ваша IP-адреса.''",
        "missingsummary": "'''Нагадування''': Ви не дали короткого опису змін.\nНатиснувши кнопку «Зберегти» ще раз, ви збережете зміни без коментаря.",
        "missingcommenttext": "Будь ласка, введіть нижче ваше повідомлення.",
        "content-model-text": "звичайний текст",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "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": "Ð\9aаÑ\82егоÑ\80Ñ\96Ñ\8f Ð´Ð»Ñ\8f Ñ\81Ñ\82оÑ\80Ñ\96нок, Ð½Ð° Ñ\8fкиÑ\85 Ð¿ÐµÑ\80евиÑ\89ена ÐºÑ\96лÑ\8cкÑ\96Ñ\81Ñ\82Ñ\8c вузлів.",
-       "node-count-exceeded-warning": "Ð\9aÑ\96лÑ\8cкÑ\96Ñ\81Ñ\82Ñ\8c Ð²Ñ\83злÑ\96в Ð¿Ñ\80епÑ\80оÑ\86еÑ\81оÑ\80а Ð½Ð° Ñ\81Ñ\82оÑ\80Ñ\96нÑ\86Ñ\96 Ð¿ÐµÑ\80евиÑ\89ила Ð²Ñ\81Ñ\82ановленÑ\83 Ð¼ÐµÐ¶Ñ\83.",
+       "node-count-exceeded-category-desc": "Ð\9dа Ñ\81Ñ\82оÑ\80Ñ\96нÑ\86Ñ\96 Ð¿ÐµÑ\80евиÑ\89ено Ð¼Ð°ÐºÑ\81ималÑ\8cно Ð´Ð¾Ð¿Ñ\83Ñ\81Ñ\82име Ñ\87иÑ\81ло вузлів.",
+       "node-count-exceeded-warning": "СÑ\82оÑ\80Ñ\96нка Ð¿ÐµÑ\80евиÑ\89ила Ð²Ñ\81Ñ\82ановленÑ\83 Ð¼ÐµÐ¶Ñ\83 Ð²Ñ\83злÑ\96в",
        "expansion-depth-exceeded-category": "Сторінки, де перевищено глибину розгортання",
-       "expansion-depth-exceeded-category-desc": "Це ÐºÐ°Ñ\82егоÑ\80Ñ\96Ñ\8f Ð´Ð»Ñ\8f Ñ\81Ñ\82оÑ\80Ñ\96нок Ð· Ð¿ÐµÑ\80евиÑ\89еноÑ\8e Ð³Ð»Ð¸Ð±Ð¸Ð½Ð¾Ñ\8e розкриття.",
+       "expansion-depth-exceeded-category-desc": "Ð\9dа Ñ\81Ñ\82оÑ\80Ñ\96нÑ\86Ñ\96 Ð¿ÐµÑ\80евиÑ\89ено Ð¼Ð°ÐºÑ\81ималÑ\8cно Ð´Ð¾Ð¿Ñ\83Ñ\81Ñ\82има Ð³Ð»Ð¸Ð±Ð¸Ð½Ñ\83 розкриття.",
        "expansion-depth-exceeded-warning": "На сторінці перевищено межу глибини вкладеності",
        "parser-unstrip-loop-warning": "Виявлено незакритий тег (такий, як <pre>)",
        "parser-unstrip-recursion-limit": "Перевищено межу вкладеної рекурсії ($1) для парсера.",
        "mergehistory-same-destination": "Початкова і цільова сторінки повинні відрізнятися",
        "mergehistory-reason": "Причина:",
        "mergelog": "Журнал об'єднань",
-       "pagemerge-logentry": "об'єднані [[$1]] і [[$2]] (версії до $3)",
        "revertmerge": "Розділити",
        "mergelogpagetext": "Нижче наведений список останніх об'єднань історій сторінок.",
        "history-title": "$1: Історія змін",
        "shown-title": "Показувати $1 {{PLURAL:$1|запис|записи|записів}} на сторінці",
        "viewprevnext": "Переглянути ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''У цій вікі є сторінка з назвою «[[:$1]]»'''",
-       "searchmenu-new": "<strong>Створити сторінку «[[:$1]]» у цьому вікі-проекті!</strong>\n{{PLURAL:$2|0=|Див. також сторінку, знайдену по результатами вашого пошуку.|Див. також знайдені результати пошуку.}}",
+       "searchmenu-new": "<strong>Створити сторінку «[[:$1]]» у цьому вікіпроекті!</strong>\n{{PLURAL:$2|0=|Див. також сторінку, знайдену за результатами вашого пошуку.|Див. також знайдені результати пошуку.}}",
        "searchprofile-articles": "Статті",
        "searchprofile-images": "Мультимедіа",
        "searchprofile-everything": "Усюди",
        "search-result-category-size": "{{PLURAL:$1|$1 елемент|$1 елементи|$1 елементів}} ({{PLURAL:$2|$2 підкатегорія|$2 підкатегорії|$2 підкатегорій}}, {{PLURAL:$3|$3 файл|$3 файли|$3 файлів}})",
        "search-redirect": "(перенаправлення $1)",
        "search-section": "(розділ $1)",
+       "search-category": "(категорія $1)",
        "search-file-match": "(збігається із вмістом файлу)",
        "search-suggest": "Можливо, ви мали на увазі: $1",
        "search-interwiki-caption": "Братні проекти",
        "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>.",
-       "showingresultsheader": "{{PLURAL:$5|1=Результат '''$1''' з '''$3'''|Результати '''$1 — $2''' з '''$3'''}} для '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Результат <strong>$1</strong> із <strong>$3</strong>|Результати <strong>$1 — $2</strong> із <strong>$3</strong>}}",
        "search-nonefound": "Не знайдено результатів, що відповідають запиту.",
        "powersearch-legend": "Розширений пошук",
        "powersearch-ns": "Пошук у просторах назв:",
        "preferences": "Налаштування",
        "mypreferences": "Налаштування",
        "prefs-edits": "Кількість редагувань:",
-       "prefsnologintext2": "Ð\9fоÑ\82Ñ\80Ñ\96бно $1 Ð´Ð»Ñ\8f Ð½Ð°Ð»Ð°Ñ\88Ñ\82Ñ\83ваннÑ\8f Ð¿Ð°Ñ\80амеÑ\82Ñ\80Ñ\96в ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87а.",
+       "prefsnologintext2": "Ð\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, Ñ\83вÑ\96йдÑ\96Ñ\82Ñ\8c, Ñ\89об Ð·Ð¼Ñ\96ниÑ\82и Ð²Ð°Ñ\88Ñ\96 Ñ\83подобаннÑ\8f.",
        "prefs-skin": "Оформлення",
        "skin-preview": "Попередній перегляд",
        "datedefault": "Стандартний",
        "gender-female": "Жіноча",
        "prefs-help-gender": "Задання цього параметру - необов'язкове. Застосовується рушієм у тих звертаннях до користувача, які залежать від статі.\nЦя інформація загальнодоступна.",
        "email": "Електронна пошта",
-       "prefs-help-realname": "СпÑ\80авжнÑ\94 Ñ\96м'Ñ\8f Ð½ÐµÐ¾Ð±Ð¾Ð²'Ñ\8fзково Ð²ÐºÐ°Ð·Ñ\83ваÑ\82и.\nЯкÑ\89о Ð²Ð¸ Ð¹Ð¾Ð³Ð¾ Ð·Ð°Ð·Ð½Ð°Ñ\87иÑ\82е, Ñ\82о Ð²Ð¾Ð½Ð¾ Ð±Ñ\83де Ð²Ð¸ÐºÐ¾Ñ\80иÑ\81Ñ\82овÑ\83ваÑ\82иÑ\81Ñ\8f, Ñ\89об Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ\82и, Ñ\85Ñ\82о Ñ\80едагÑ\83вав Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83.",
+       "prefs-help-realname": "СпÑ\80авжнÑ\94 Ñ\96м'Ñ\8f Ð²ÐºÐ°Ð·Ñ\83ваÑ\82и Ð½ÐµÐ¾Ð±Ð¾Ð²'Ñ\8fзково.\nЯкÑ\89о Ð²Ð¸ Ð¹Ð¾Ð³Ð¾ Ð·Ð°Ð·Ð½Ð°Ñ\87иÑ\82е, Ñ\82о Ñ\81аме Ð· Ð½Ð¸Ð¼ Ð¼Ð¾Ð¶Ðµ Ð±Ñ\83Ñ\82и Ð¿Ð¾Ð²'Ñ\8fзаний Ñ\83веÑ\81Ñ\8c Ð²Ð°Ñ\88 Ð´Ð¾Ñ\80обок.",
        "prefs-help-email": "Адреса електронної пошти не є обов'язковою, але необхідна для скидання пароля, якщо ви його забудете.",
        "prefs-help-email-others": "Також вона дозволить іншим користувачам зв'язатися з вами через вашу особисту сторінку без необхідності розкриття вашої електронної адреси.",
        "prefs-help-email-required": "Потрібно зазначити адресу електронної пошти.",
        "prefs-tokenwatchlist": "Жетон",
        "prefs-diffs": "Різниці версій",
        "prefs-help-prefershttps": "Цей параметр набуде чинності при вашому наступному вході у систему.",
+       "prefswarning-warning": "Ви внесли в свої налаштування зміни, які ще не були збережені.\nЯкщо ви залишите цю сторінку, не натиснувши \"$1\", налаштування не будуть оновлені.",
        "prefs-tabs-navigation-hint": "Порада: Ви можете використовувати клавіші стрілок вліво і вправо для переходу між вкладками в списку вкладок.",
        "email-address-validity-valid": "Адреса електронної пошти є чинною",
        "email-address-validity-invalid": "Введіть чинну адресу електронної пошти",
        "nolicense": "Відсутнє",
        "licenses-edit": "Редагувати параметри ліцензії",
        "license-nopreview": "(Попередній перегляд недоступний)",
-       "upload_source_url": " (вірна, публічно доступна інтернет-адреса)",
+       "upload_source_url": "(ви вибрали правильну, публічно доступну інтернет-адресу)",
        "upload_source_file": " (файл на вашому комп'ютері)",
        "listfiles-delete": "видалити",
        "listfiles-summary": "Ця спеціальна сторінка показує всі завантажені файли.",
        "randomincategory": "Випадкова сторінка у категорії",
        "randomincategory-invalidcategory": "\" $1 \" не є дійсним іменем категорії.",
        "randomincategory-nopages": "У [[:Category:$1]] немає сторінок.",
-       "randomincategory-selectcategory": "Перейти на випадкову сторінку з категорії: $1 $2.",
-       "randomincategory-selectcategory-submit": "Перейти",
+       "randomincategory-category": "Категорія:",
+       "randomincategory-legend": "Випадкова сторінка у категорії",
        "randomredirect": "Випадкове перенаправлення",
        "randomredirect-nopages": "Простір назв «$1» не містить перенаправлень.",
        "statistics": "Статистика",
        "statistics-header-pages": "Статистика сторінок",
        "statistics-header-edits": "Статистика редагувань",
-       "statistics-header-views": "Статистика переглядів",
        "statistics-header-users": "Статистика користувачів",
        "statistics-header-hooks": "Інша статистика",
        "statistics-articles": "Статей",
        "statistics-files": "Завантажено файлів",
        "statistics-edits": "Кількість редагувань з моменту установки {{grammar:genitive|{{SITENAME}}}}",
        "statistics-edits-average": "Середнє число редагувань на сторінку",
-       "statistics-views-total": "Усього переглядів",
-       "statistics-views-total-desc": "Перегляди неіснуючих та спеціальних сторінок не враховані",
-       "statistics-views-peredit": "Переглядів на редагування",
        "statistics-users": "Зареєстрованих [[Special:ListUsers|користувачів]]",
        "statistics-users-active": "Активні користувачі",
        "statistics-users-active-desc": "Користувачі, які здійснили якусь дію протягом {{PLURAL:$1|1=минулого дня|$1 минулих днів}}",
-       "statistics-mostpopular": "Сторінки, які найчастіше переглядають",
        "pageswithprop": "Сторінки з перевизначеними властивостями",
        "pageswithprop-legend": "Сторінки з перевизначеними властивостями",
        "pageswithprop-text": "Тут перераховані сторінки, у яких були вручну перевизначені окремі властивості.",
        "uncategorizedtemplates": "Некатегоризовані шаблони",
        "unusedcategories": "Категорії, що не використовуються",
        "unusedimages": "Файли, що не використовуються",
-       "popularpages": "Популярні статті",
        "wantedcategories": "Необхідні категорії",
        "wantedpages": "Необхідні статті",
        "wantedpages-badtitle": "Неправильний заголовок у результатах запиту: $1",
        "pager-older-n": "{{PLURAL:$1|старіша|старіші|старіших}} $1",
        "suppress": "Ревізор",
        "querypage-disabled": "Цю спеціальну сторінку вимкнуто для покращення продуктивності.",
+       "apihelp": "Довідка з API",
+       "apihelp-no-such-module": "Додаток \"$1\" не знайдено.",
        "booksources": "Джерела книг",
        "booksources-search-legend": "Пошук інформації про книгу",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Знайти",
+       "booksources-search": "Пошук",
        "booksources-text": "На цій сторінці наведено список посилань на сайти, де ви, можливо, знайдете додаткову інформацію про книгу. Це інтернет-магазини й системи пошуку в бібліотечних каталогах.",
        "booksources-invalid-isbn": "Вказаний номер ISBN, судячи з усього, містить помилку. Будь ласка, перевірте, що при перенесенні номера з першоджерела не виникло спотворень.",
        "specialloguserlabel": "Виконавець:",
        "trackingcategories-desc": "Критерій включення в категорію",
        "noindex-category-desc": "Сторінка не індексується пошуковими роботами, тому що на ній є «чарівне слово» <code><nowiki>__NOINDEX__</nowiki></code>, і вона знаходиться в просторі імен, де дозволений цей прапор).",
        "index-category-desc": "На сторінці є «чарівне слово» __INDEX__ (і сторінка знаходиться в просторі імен, де дозволений цей прапор), тому вона індексуються пошуковими роботами в тих випадках, коли цього зазвичай не відбувається.",
-       "post-expand-template-inclusion-category-desc": "Ð\9fÑ\96Ñ\81лÑ\8f Ð¿Ð¾ÐºÐ°Ð·Ñ\83 Ð²Ñ\81Ñ\96Ñ\85 Ñ\88аблонÑ\96в Ñ\80озмÑ\96Ñ\80 Ñ\81Ñ\82оÑ\80Ñ\96нки Ñ\81Ñ\82ане Ð±Ñ\96лÑ\8cÑ\88е, Ð½Ñ\96ж <code>$wgMaxArticleSize</code>, Ñ\82омÑ\83 Ð´ÐµÑ\8fкÑ\96 Ñ\88аблони не були показані повністю.",
-       "post-expand-template-argument-category-desc": "Ð\9fÑ\96Ñ\81лÑ\8f Ñ\80озкÑ\80иÑ\82Ñ\82Ñ\8f Ð°Ñ\80гÑ\83менÑ\82Ñ\83 Ñ\88аблона (Ñ\89о-небÑ\83дÑ\8c Ð² Ð¿Ð¾Ñ\82Ñ\80Ñ\96йниÑ\85 Ñ\84Ñ\96гÑ\83Ñ\80ниÑ\85 Ð´Ñ\83жкаÑ\85, Ð½Ð°Ð¿Ñ\80иклад, <code>{{{Foo}}})</code>, Ñ\81Ñ\82оÑ\80Ñ\96нка Ñ\81Ñ\82ане Ð±Ñ\96лÑ\8cÑ\88е, Ð½Ñ\96ж <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": "Ð\9aаÑ\82егоÑ\80Ñ\96Ñ\8f Ð´Ð¾Ð´Ð°Ñ\94Ñ\82Ñ\8cÑ\81Ñ\8f, Ñ\8fкÑ\89о Ñ\81Ñ\82оÑ\80Ñ\96нка Ð¼Ñ\96Ñ\81Ñ\82иÑ\82Ñ\8c Ð½ÐµÐºÐ¾Ñ\80екÑ\82нÑ\83 Ñ\84айловÑ\83 посилання (посилання на неіснуючий файл).",
-       "hidden-category-category-desc": "Це категорія з доданою міткою <code><nowiki>__HIDDENCAT__</nowiki></code> в неї, що за замовчуванням запобігає її відображенню на сторінках в розділі категорій.",
+       "post-expand-template-inclusion-category-desc": "РозмÑ\96Ñ\80 Ñ\81Ñ\82оÑ\80Ñ\96нки Ñ\81Ñ\82ане Ð±Ñ\96лÑ\8cÑ\88ий Ð·Ð° <code>$wgMaxArticleSize</code> Ð¿Ñ\96Ñ\81лÑ\8f Ð¿Ð¾ÐºÐ°Ð·Ñ\83 Ð²Ñ\81Ñ\96Ñ\85 Ñ\88аблонÑ\96в, Ñ\82омÑ\83 Ð´ÐµÑ\8fкÑ\96 Ð· Ð½Ð¸Ñ\85 не були показані повністю.",
+       "post-expand-template-argument-category-desc": "СÑ\82оÑ\80Ñ\96нка Ñ\81Ñ\82ане Ð±Ñ\96лÑ\8cÑ\88оÑ\8e Ð·Ð° <code>$wgMaxArticleSize</code> Ð¿Ñ\96Ñ\81лÑ\8f Ñ\80озкÑ\80иÑ\82Ñ\82Ñ\8f Ð°Ñ\80гÑ\83менÑ\82Ñ\83 Ñ\88аблона (Ñ\89о-небÑ\83дÑ\8c Ð² Ð¿Ð¾Ñ\82Ñ\80Ñ\96йниÑ\85 Ñ\84Ñ\96гÑ\83Ñ\80ниÑ\85 Ð´Ñ\83жкаÑ\85, Ð½Ð°Ð¿Ñ\80иклад, <code>{{{Foo}}})</code>).",
+       "expensive-parserfunction-category-desc": "На сторінці також використовується занадто багато ресурсомістких функцій (таких, як <code>#ifexist</code>). Детальніше - на сторінці [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "СÑ\82оÑ\80Ñ\96нка Ð¼Ñ\96Ñ\81Ñ\82иÑ\82Ñ\8c Ð½ÐµÐºÐ¾Ñ\80екÑ\82не Ñ\84айлове посилання (посилання на неіснуючий файл).",
+       "hidden-category-category-desc": "Ця категорія містить мітку <code><nowiki>__HIDDENCAT__</nowiki></code> у вмісті сторінки, що типово запобігає її відображенню на сторінках в розділі категорій.",
        "trackingcategories-nodesc": "Опис відсутній.",
        "trackingcategories-disabled": "Категорія вимкнена",
        "mailnologin": "Відсутня адреса для відправки",
        "mywatchlist": "Список спостереження",
        "watchlistfor2": "Для $1 $2",
        "nowatchlist": "Ваш список спостереження порожній.",
-       "watchlistanontext": "Вам необхідно $1, щоб переглянути чи редагувати список спостереження.",
+       "watchlistanontext": "Вам необхідно увійти, щоб переглянути чи редагувати список спостереження.",
        "watchnologin": "Ви не ввійшли до системи",
        "addwatch": "Додати до списку спостереження",
        "addedwatchtext": "Сторінку «[[:$1]]» додано до вашого [[Special:Watchlist|списку спостереження]].\nПодальші редагування цієї сторінки (та пов'язаної з нею сторінки обговорення) відображатимуться в цьому списку.",
        "wlheader-enotif": "Сповіщення електронною поштою ввімкнено.",
        "wlheader-showupdated": "Сторінки, що змінилися після вашого останнього їх відвідування, виділені '''жирним''' шрифтом.",
        "wlnote": "Нижче наведено {{PLURAL:$1|останнє $1 редагування|останні $1 редагування|останні $1 редагувань}} за {{PLURAL:$2|останню|останні|останні}} <strong>$2</strong> {{PLURAL:$2|годину|години|годин}}, на час $3 $4.",
-       "wlshowlast": "Показати зміни за останні $1 годин $2 днів $3",
+       "wlshowlast": "Показати зміни за останні $1 годин $2 днів",
        "watchlist-options": "Налаштування списку спостереження",
        "watching": "Додавання до списку спостереження…",
        "unwatching": "Вилучення зі списку спостереження…",
        "exbeforeblank": "зміст до очистки: «$1»",
        "delete-confirm": "Вилучення «$1»",
        "delete-legend": "Вилучення",
-       "historywarning": "'''Попередження:''' Сторінка, яку ви збираєтеся вилучити, має історію редагувань з приблизно $1 {{PLURAL:$1|1=версії|версій}}:",
+       "historywarning": "<strong>Попередження:</strong> Сторінка, яку ви збираєтеся вилучити, має історію редагувань з приблизно $1 {{PLURAL:$1|1=версії|версій}}:",
        "confirmdeletetext": "Ви збираєтесь вилучити сторінку і всі її журнали редагувань з бази даних.\nБудь ласка, підтвердіть, що ви бажаєте зробити це, повністю розумієте наслідки і що робите це у відповідності з [[{{MediaWiki:Policy-url}}|правилами]].",
        "actioncomplete": "Дію виконано",
        "actionfailed": "Виконати дію не вдалося",
        "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": "Ð\92Ñ\96дкинÑ\83Ñ\82и редагування",
+       "rollback": "Ð\92Ñ\96дкинÑ\83Ñ\82о редагування",
        "rollback_short": "Відкинути",
        "rollbacklink": "відкинути",
        "rollbacklinkcount": "відкинути $1 {{PLURAL:$1|редагування|редагування|редагувань}}",
        "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": "Ð\91локÑ\83ваннÑ\8f",
+       "blockip": "Ð\97аблокÑ\83ваÑ\82и {{GENDER:$1|коÑ\80иÑ\81Ñ\82Ñ\83ваÑ\87а|коÑ\80иÑ\81Ñ\82Ñ\83ваÑ\87кÑ\83}}",
        "blockip-legend": "Блокування користувача",
        "blockiptext": "Використовуйте форму нижче, щоб заблокувати можливість редагування зазначеній IP-адресі або користувачу.\nЦе слід робити лише для запобігання порушенням і у відповідності до [[{{MediaWiki:Policy-url}}|правил]].\nОбов'язково заповніть причину нижче, бажано дати інформативну вичерпну інформацію (наприклад, послатися на конкретні правила, дати посилання на редагування користувача, які призвели до блокування). Можна конкретизувати причину блокування на сторінці обговорення користувача.\n* Якщо ви блокуєте обліковий запис бота, переконайтеся, що ви вимкнули автоблокування (для запобігання автоматичного блокування облікових записів власника бота або інших ботів).\n* Зверніть увагу, що IP-адреси у більшості випадків не варто блокувати на більший за декілька днів термін, щоб під блокування не підпали інші користувачі з таким самим IP. Винятки — частий довготривалий вандалізм.",
        "ipaddressorusername": "IP-адреса або ім'я користувача:",
        "ipb-unblock-addr": "Розблокувати $1",
        "ipb-unblock": "Розблокувати користувача або IP-адресу",
        "ipb-blocklist": "Показати чинні блокування",
-       "ipb-blocklist-contribs": "Внесок користувача $1",
+       "ipb-blocklist-contribs": "Внесок {{GENDER:$1|$1}}",
        "unblockip": "Розблокувати IP-адресу",
        "unblockiptext": "Використовуйте подану нижче форму, щоб відновити можливість збереження з раніше заблокованої IP-адреси.",
        "ipusubmit": "Зняти це блокування",
        "unblocked": "[[User:$1|$1]] розблокований",
        "unblocked-range": "$1 розблоковано",
        "unblocked-id": "Блокування $1 було зняте",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] вже розлоковано.",
        "blocklist": "Заблоковані користувачі",
        "ipblocklist": "Список заблокованих адрес та користувачів",
        "ipblocklist-legend": "Пошук заблокованого користувача",
        "move-page": "Перейменування сторінки «$1»",
        "move-page-legend": "Перейменування сторінки",
        "movepagetext": "Скориставшись формою нижче, ви можете перейменувати сторінку, одночасно перемістивши на нове місце і журнал її редагувань.\nСтара назва стане перенаправленням на нову назву.\nВи можете автоматично оновити перенаправлення на стару назву.\nЯкщо ви цього не зробите, будь ласка, перевірте наявність [[Special:DoubleRedirects|подвійних]] чи [[Special:BrokenRedirects|розірваних]] перенаправлень.\nВи відповідаєте за те, щоб посилання і надалі вказували туди, куди припускалося.\n\nЗверніть увагу, що сторінка '''не''' буде перейменована, якщо сторінка з новою назвою вже існує, окрім випадків, коли остання порожня або є перенаправленням, а журнал її редагувань порожній.\nЦе означає, що ви можете повернути сторінці стару назву, якщо ви перейменували її помилково, але ви не можете затерти існуючу сторінку.\n\n'''ПОПЕРЕДЖЕННЯ!'''\nЦя дія може стати причиною серйозних та неочікуваних змін популярних сторінок.\nБудь ласка, перед продовженням переконайтесь, що ви розумієте всі можливі наслідки.",
-       "movepagetext-noredirectfixer": "ЦÑ\8f Ñ\84оÑ\80ма Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\8fÑ\94 Ð¿ÐµÑ\80ейменÑ\83ваÑ\82и Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83 Ð· Ð¾Ð´Ð½Ð¾Ñ\87аÑ\81ним Ð¿ÐµÑ\80емÑ\96Ñ\89еннÑ\8fм Ñ\97Ñ\97 Ð¶Ñ\83Ñ\80налÑ\83 Ð·Ð¼Ñ\96н.\nСÑ\82аÑ\80а Ð½Ð°Ð·Ð²Ð° Ñ\81Ñ\82ане Ð¿ÐµÑ\80енапÑ\80авленнÑ\8fм Ð½Ð° Ð½Ð¾Ð²Ñ\83.\nÐ\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, Ð½Ðµ Ð·Ð°Ð±Ñ\83дÑ\8cÑ\82е Ð²Ð¸Ð¿Ñ\80авиÑ\82и [[Special:DoubleRedirects|подвÑ\96йнÑ\96]] Ñ\96 [[Special:BrokenRedirects|розірвані перенаправлення]].\nВи відповідаєте за те, щоб посилання і далі вказували туди, куди треба.\n\nЗверніть увагу, що сторінка '''не буде''' перейменована, якщо сторінка з новою назвою вже існує, крім випадків, коли вона є перенаправленням або порожня та не має історії редагувань.\nЦе означає, що Ви можете перейменувати сторінку назад, якщо Ви допустилися помилки, і при цьому не зможете випадково перезаписати наявну сторінку.\n\n'''Попередження!'''\nПерейменування може призвести до масштабних і несподіваних змін для ''популярних'' сторінок.\nТому перед перейменуванням упевніться, що Ви оцінили можливі наслідки.",
+       "movepagetext-noredirectfixer": "ЦÑ\8f Ñ\84оÑ\80ма Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\8fÑ\94 Ð¿ÐµÑ\80ейменÑ\83ваÑ\82и Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83 Ð· Ð¾Ð´Ð½Ð¾Ñ\87аÑ\81ним Ð¿ÐµÑ\80емÑ\96Ñ\89еннÑ\8fм Ñ\97Ñ\97 Ð¶Ñ\83Ñ\80налÑ\83 Ð·Ð¼Ñ\96н.\nСÑ\82аÑ\80а Ð½Ð°Ð·Ð²Ð° Ñ\81Ñ\82ане Ð¿ÐµÑ\80енапÑ\80авленнÑ\8fм Ð½Ð° Ð½Ð¾Ð²Ñ\83.\nÐ\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, Ð½Ðµ Ð·Ð°Ð±Ñ\83дÑ\8cÑ\82е Ð²Ð¸Ð¿Ñ\80авиÑ\82и [[Special:DoubleRedirects|подвÑ\96йнÑ\96]] Ñ\82а [[Special:BrokenRedirects|розірвані перенаправлення]].\nВи відповідаєте за те, щоб посилання і далі вказували туди, куди треба.\n\nЗверніть увагу, що сторінка '''не буде''' перейменована, якщо сторінка з новою назвою вже існує, крім випадків, коли вона є перенаправленням або порожня та не має історії редагувань.\nЦе означає, що Ви можете перейменувати сторінку назад, якщо Ви допустилися помилки, і при цьому не зможете випадково перезаписати наявну сторінку.\n\n'''Попередження!'''\nПерейменування може призвести до масштабних і несподіваних змін для ''популярних'' сторінок.\nТому перед перейменуванням упевніться, що Ви оцінили можливі наслідки.",
        "movepagetalktext": "Приєднана сторінка обговорення також буде автоматично перейменована, '''окрім таких випадків:'''\n* Непорожня сторінка обговорення з такою назвою вже існує або\n* Ви не поставили галочку в полі нижче.\n\nУ цих випадках ви будете змушені перейменувати чи об'єднати сторінки вручну в разі необхідності",
        "movearticle": "Перейменувати сторінку",
        "moveuserpage-warning": "'''Увага:''' Ви збираєтеся перейменувати сторінку користувача. Будь ласка, зверніть увагу, що  буде перейменовано тільки сторінку, але користувача '''не''' буде перейменовано.",
        "import": "Імпорт статей",
        "importinterwiki": "Міжвікі імпорт",
        "import-interwiki-text": "Вкажіть вікі й назву імпортованої сторінки.\nДати змін й імена авторів буде збережено.\nУсі операції міжвікі-імпорту реєструються в [[Special:Log/import|відповідному протоколі]].",
-       "import-interwiki-source": "Вікі/сторінка-джерело",
+       "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": "Створити новий розділ",
        "tooltip-feed-atom": "Трансляція в Atom для цієї сторінки",
        "tooltip-t-contributions": "Перегляд внеску цього користувача",
        "tooltip-t-emailuser": "Надіслати листа цьому користувачеві",
+       "tooltip-t-info": "Додаткові відомості про цю сторінку",
        "tooltip-t-upload": "Завантажити файли",
        "tooltip-t-specialpages": "Перелік спеціальних сторінок",
        "tooltip-t-print": "Версія цієї сторінки для друку",
        "pageinfo-robot-policy": "Індексація пошуковими системами",
        "pageinfo-robot-index": "Індексується",
        "pageinfo-robot-noindex": "Не індексується",
-       "pageinfo-views": "Кількість переглядів",
        "pageinfo-watchers": "Кількість спостерігачів",
        "pageinfo-few-watchers": "Менше ніж $1 {{PLURAL:$1|спостерігач|спостерігачі|спостерігачів}}",
        "pageinfo-redirects-name": "Число перенаправлень на цю сторінку",
        "exif-urgency-low": "Низька ($1)",
        "exif-urgency-high": "Висока ($1)",
        "exif-urgency-other": "Визначений користувачем пріоритет ($1)",
-       "watchlistall2": "всі",
        "namespacesall": "всі",
        "monthsall": "всі",
        "confirmemail": "Підтвердження адреси ел. пошти",
        "unknown_extension_tag": "Невідомий тег доповнення «$1»",
        "duplicate-defaultsort": "Увага. Ключ сортування «$2» перекриває попередній ключ сортування «$1».",
        "duplicate-displaytitle": "<strong>Увага:</strong> Відображений заголовок \"$2\" заміщує раніше відображений заголовок \"$1\".",
+       "invalid-indicator-name": "<strong>Помилка:</strong> Сторінка індикатора стану <code>name</code> атрибута не може бути пуста.",
        "version": "Версія MediaWiki",
        "version-extensions": "Установлені розширення",
        "version-skins": "Встановлені теми оформлення",
        "revdelete-uname-unhid": "ім'я користувача відкрито",
        "revdelete-restricted": "застосовані обмеження для адміністраторів",
        "revdelete-unrestricted": "зняті обмеження для адміністраторів",
+       "logentry-merge-merge": "$1 {{GENDER:$2|приєднав|приєднала}} $3 до $4 (версії до $5)",
        "logentry-move-move": "$1 {{GENDER:$2|перейменував|перейменувала}} сторінку з $3 на $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|перейменував|перейменувала}} сторінку з $3 на $4 без створення перенаправлення",
        "logentry-move-move_redir": "$1 {{GENDER:$2|перейменував|перейменувала}} сторінку з $3 на $4 поверх перенаправлення",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|завантажив|завантажила}} нову версію $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|завантажив|завантажила}} $3",
        "rightsnone": "(нема)",
+       "revdelete-summary": "коментар до редагування",
        "feedback-bugornote": "Якщо ви готові описати технічні проблеми в деталях, будь ласка, [$1 повідомте про помилку].\nАбо можете використати форму нижче. Ваш коментар буде додано на сторінку \"[$3  $2]\", разом з іменем користувача.",
        "feedback-subject": "Тема:",
        "feedback-message": "Повідомлення:",
        "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:* Склонувавши один з репозиторіїв <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; Якщо ви щойно оновили 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": "Ой! Типова тема оформлення для вашої вікі <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\n\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 архів файлів], який містить декілька тем оформлення і розширень. Ви можете скопіювати теку <code>skins/</code> з нього.\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] для отримання інформації про те, як включити теми оформлення і вибрати типову тему.",
        "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 ('''вимкнено''')",
+       "mediastatistics": "Медіа-статистика",
+       "mediastatistics-summary": "Статистичні дані про типи завантажених файлів. Вона тільки включає в себе найновішу версію файлу. Старі або видалені версії файлів виключені.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 байт|$1 байтів|$1 байти}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME-тип",
+       "mediastatistics-table-extensions": "Можливі розширення",
+       "mediastatistics-table-count": "Кількість файлів",
+       "mediastatistics-table-totalbytes": "Загальний розмір",
+       "mediastatistics-header-unknown": "Невідомо",
+       "mediastatistics-header-bitmap": "Растрові зображення",
+       "mediastatistics-header-drawing": "Малюнки (векторні зображення)",
+       "mediastatistics-header-audio": "Звук",
+       "mediastatistics-header-video": "Відео",
+       "mediastatistics-header-multimedia": "Мішана мультимедія",
+       "mediastatistics-header-office": "Офіс",
+       "mediastatistics-header-text": "Текст",
+       "mediastatistics-header-executable": "Виконувані файли",
+       "mediastatistics-header-archive": "Стиснуті формати",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|зайву завершальну кому|зайвих завершальних коми|зайвих завершальних ком}} було видалено із JSON",
+       "json-error-unknown": "Виникла проблема із JSON. Помилка: $1",
+       "json-error-depth": "Перевищено дозволену глибину стека",
+       "json-error-state-mismatch": "Недозволений чи невірно сформований JSON",
+       "json-error-ctrl-char": "Помилковий контрольний символ, можливо, неправильно кодований",
+       "json-error-syntax": "Синтаксична помилка",
+       "json-error-utf8": "Спотворені символи UTF-8, можливо, неправильно закодовано",
+       "json-error-recursion": "Необхідність закодувати одне чи більше рекурсивних посилань",
+       "json-error-inf-or-nan": "Необхідність закодувати одне чи більше значення NAN або INF",
+       "json-error-unsupported-type": "Було вказано значення типу, який не вдається закодувати"
 }
index 3170cbd..60d9cf6 100644 (file)
        "changeemail-newemail": "نیا برقی ڈاک پتہ:",
        "changeemail-none": "(کوئی نہیں)",
        "changeemail-submit": "برقی ڈاک تبدیل کریں",
-       "changeemail-cancel": "منسوخ",
        "bold_sample": "دبیز متن",
        "bold_tip": "دبیز متن",
        "italic_sample": "ترچھا متن",
        "uncategorizedimages": "بے زمرہ تصاویر",
        "unusedcategories": "غیر استعمال شدہ زمرہ جات",
        "unusedimages": "غیر استعمال شدہ فائلیں",
-       "popularpages": "مقبول صفحات",
        "wantedcategories": "طلب شدہ زمرہ جات",
        "wantedpages": "درخواست شدہ مضامین",
        "mostlinked": "سب سے زیادہ ربط والے مضامین",
        "pager-older-n": "{{PLURAL:$1|پُرانا 1|پُرانے $1}}",
        "booksources": "کتابی وسائل",
        "booksources-search-legend": "تلاش برائے مآخذاتِ کتاب",
-       "booksources-go": "چلو",
        "specialloguserlabel": "صارف:",
        "speciallogtitlelabel": "عنوان:",
        "log": "نوشتہ جات",
        "unwatch": "زیرنظرمنسوخ",
        "watchlist-details": "آپ کی زیرِنظرفہرست پر {{PLURAL:$1|$1 صفحہ ہے|$1 صفحات ہیں}}، اِس میں تبادلۂ خیال صفحات کی تعداد شامل نہیں.",
        "wlnote": "نیچےآخری $1 تبدیلیاں ہیں جو کے پیچھلے <b>$2</b> گھنٹوں میں کی گئیں۔",
-       "wlshowlast": "دکھائیں آخری $1 گھنٹے $2 دن $3",
+       "wlshowlast": "دکھائیں آخری $1 گھنٹے $2 دن",
        "watchlist-options": "اختیارات برائے زیرِنظرفہرست",
        "created": "بنا دیا گیا",
        "changed": "تبدیل کردیاگیا",
        "metadata": "میٹا ڈیٹا",
        "metadata-collapse": "طویل تفاصیل چھپاؤ",
        "exif-meteringmode-0": "نامعلوم",
-       "watchlistall2": "تمام",
        "namespacesall": "تمام",
        "monthsall": "تمام",
        "deletedwhileediting": "انتباہ: آپ کے ترمیم شروع کرنے کے بعد یہ صفحہ حذف کیا جا چکا ہے!",
        "version": "ورژن",
        "specialpages": "خصوصی صفحات",
        "rightsnone": "(کچھ نہیں)",
+       "revdelete-summary": "خلاصۂ تدوین",
        "searchsuggest-search": "تلاش",
        "expandtemplates": "سانچے کو وسیع کریں",
        "expand_templates_input": "ان پٹ متن:",
index 5c1fd06..8ce4527 100644 (file)
@@ -9,17 +9,18 @@
                        "Nataev",
                        "Sociologist",
                        "Xexdof",
-                       "Arystanbek"
+                       "Arystanbek",
+                       "6ahodir"
                ]
        },
        "tog-underline": "Havolalarning tagiga chizish:",
-       "tog-hideminor": "Yangi oʻzgarishlar roʻyxatida kichik tahrirlarni yashirish",
-       "tog-hidepatrolled": "Yangi oʻzgarishlar roʻyxatida tekshirilgan tahrirlarni yashirish",
-       "tog-newpageshidepatrolled": "Yangi sahifalar roʻyxatida tekshirilgan sahifalarni yashirish",
+       "tog-hideminor": "Yangi oʻzgarishlar roʻyxatidan kichik tahrirlarni yashirish",
+       "tog-hidepatrolled": "Yangi oʻzgarishlar roʻyxatidan tekshirilgan tahrirlarni yashirish",
+       "tog-newpageshidepatrolled": "Yangi sahifalar roʻyxatidan tekshirilgan sahifalarni yashirish",
        "tog-extendwatchlist": "Kengaytirilgan kuzatuv roʻyxati: faqat oxirgi paytdagi emas, barcha oʻzgarishlar koʻrsatiladi",
        "tog-usenewrc": "Yangi oʻzgarishlar va kuzatuv roʻyxatidagi sahifalarni guruhlarga boʻlish (JavaScript orqali)",
        "tog-numberheadings": "Sarlavhalarni avtomatik raqamlash",
-       "tog-showtoolbar": "Yuqoridagi tahrirlash asboblarini koʻrsatish",
+       "tog-showtoolbar": "Tahrirlash asboblarini koʻrsatish",
        "tog-editondblclick": "Sichqonchaning chap tugmasini ikki marta bosib tahrirlashni boshlash",
        "tog-editsectiononrightclick": "Boʻlim sarlavhasiga sichqonchaning oʻng tugmasini bosib tahrirlashni boshlash",
        "tog-watchcreations": "Men yaratgan sahifalar va yuklagan fayllar kuzatuv roʻyxatimga qoʻshilsin",
        "thu": "Pay",
        "fri": "Jum",
        "sat": "Shn",
-       "january": "yanvar",
-       "february": "fevral",
-       "march": "mart",
-       "april": "aprel",
-       "may_long": "may",
-       "june": "iyun",
-       "july": "iyul",
-       "august": "avgust",
-       "september": "sentabr",
-       "october": "oktabr",
-       "november": "noyabr",
-       "december": "dekabr",
-       "january-gen": "yanvar",
-       "february-gen": "fevral",
-       "march-gen": "mart",
-       "april-gen": "aprel",
-       "may-gen": "may",
-       "june-gen": "iyun",
-       "july-gen": "iyul",
-       "august-gen": "avgust",
-       "september-gen": "sentabr",
-       "october-gen": "oktabr",
-       "november-gen": "noyabr",
-       "december-gen": "dekabr",
-       "jan": "yan",
-       "feb": "fev",
-       "mar": "mar",
-       "apr": "apr",
-       "may": "may",
-       "jun": "iyn",
-       "jul": "iyl",
-       "aug": "avg",
-       "sep": "sen",
-       "oct": "okt",
-       "nov": "noy",
-       "dec": "dek",
+       "january": "Yanvar",
+       "february": "Fevral",
+       "march": "Mart",
+       "april": "Aprel",
+       "may_long": "May",
+       "june": "Iyun",
+       "july": "Iyul",
+       "august": "Avgust",
+       "september": "Sentabr",
+       "october": "Oktabr",
+       "november": "Noyabr",
+       "december": "Dekabr",
+       "january-gen": "Yanvar",
+       "february-gen": "Fevral",
+       "march-gen": "Mart",
+       "april-gen": "Aprel",
+       "may-gen": "May",
+       "june-gen": "Iyun",
+       "july-gen": "Iyul",
+       "august-gen": "Avgust",
+       "september-gen": "Sentabr",
+       "october-gen": "Oktabr",
+       "november-gen": "Noyabr",
+       "december-gen": "Dekabr",
+       "jan": "Yan",
+       "feb": "Fev",
+       "mar": "Mar",
+       "apr": "Apr",
+       "may": "May",
+       "jun": "Jyn",
+       "jul": "Iyl",
+       "aug": "Avg",
+       "sep": "Sen",
+       "oct": "Okt",
+       "nov": "Noy",
+       "dec": "Dek",
        "january-date": "Yanvar $1",
        "february-date": "Fevral $1",
        "march-date": "Mart $1",
        "april-date": "Aprel $1",
+       "may-date": "$1-may",
        "june-date": "Iyun $1",
        "july-date": "Iyul $1",
        "august-date": "Avgust $1",
        "november-date": "Noyabr $1",
        "december-date": "Dekabr $1",
        "pagecategories": "{{PLURAL:$1|Turkum}}",
-       "category_header": "\"$1\" turkumidagi maqolalar.",
+       "category_header": "\"$1\" turkumidagi sahifalar",
        "subcategories": "Ostturkumlar",
        "category-media-header": "\"$1\" turkumidagi fayllar",
        "category-empty": "''Ushbu turkumda hozircha sahifa yoki fayllar yoʻq.''",
        "anontalk": "Ushbu IP-manzil munozarasi",
        "navigation": "Saytda harakatlanish",
        "and": "&#32;va",
-       "qbfind": "Qidiruv",
-       "qbbrowse": "Koʻrish",
+       "qbfind": "Topish",
+       "qbbrowse": "Koʻrib chiqish",
        "qbedit": "Tahrirlash",
        "qbpageoptions": "Ushbu sahifa moslamalari",
-       "qbmyoptions": "Moslamalarim",
+       "qbmyoptions": "Mening sahifalarim",
        "faq": "TSS",
-       "faqpage": "Project:TSS",
+       "faqpage": "Loyiha:TSS",
        "actions": "Amallar",
        "namespaces": "Nomfazolar",
        "variants": "Variantlar",
        "permalink": "Doimiy ishorat",
        "print": "Chop etish",
        "view": "Koʻrish",
+       "view-foreign": "$1 da koʻrish",
        "edit": "Tahrirlash",
        "create": "Yaratish",
        "editthispage": "Ushbu sahifani tahrirlash",
        "otherlanguages": "Boshqa tillarda",
        "redirectedfrom": "($1dan yoʻnaltirildi)",
        "redirectpagesub": "Yoʻnaltiruvchi sahifa",
+       "redirectto": "Qayta yoʻnaltirish:",
        "lastmodifiedat": "Bu sahifa oxirgi marta $1 soat $2 da tahrirlangan.",
        "viewcount": "Bu sahifaga {{PLURAL:$1|bir marta|$1 marta}} murojaat qilingan.",
        "protectedpage": "Himoyalangan sahifa",
        "hidetoc": "yashirish",
        "collapsible-collapse": "Yigʻish",
        "collapsible-expand": "Yoyish",
+       "confirmable-yes": "Ha",
+       "confirmable-no": "Yoʻq",
        "thisisdeleted": "$1ni koʻrib chiqasizmi yoki tiklaysizmi?",
        "viewdeleted": "$1ni koʻrib chiqasizmi?",
        "restorelink": "{{PLURAL:$1|Oʻchirilgan tahrir|$1 ta oʻchirilgan tahrirlar}}",
        "nosuchaction": "Bunday amal yoʻq",
        "nosuchspecialpage": "Bunday maxsus sahifa yoʻq",
        "error": "Xato",
+       "databaseerror": "Maʼlumotlar bazasida xatolik",
+       "databaseerror-query": "So‘rov: $1",
+       "databaseerror-function": "Funktsiya: $1",
+       "databaseerror-error": "Xato: $1",
        "laggedslavemode": "'''Diqqat:''' sahifada oxirgi yangilanishlar koʻrsatilmagan boʻlishi mumkin.",
        "readonly": "Maʼlumotlar bazasiga yozish toʻsilgan",
        "missingarticle-rev": "(versiya №: $1)",
        "missingarticle-diff": "(Farq: $1, $2)",
        "internalerror": "Ichki xato",
        "internalerror_info": "Ichki xato: $1",
+       "filecopyerror": "\"$1\" fayl nusxasini \"$2\" fayliga koʻchirib boʻlmadi.",
+       "filedeleteerror": "\"$1\" faylini oʻchirib boʻlmadi.",
+       "filenotfound": "\"$1\" faylini topib boʻlmadi.",
+       "cannotdelete-title": "\"$1\" sahifasini oʻchirib boʻlmadi.",
        "badtitle": "Notoʻgʻri sarlavha",
        "viewsource": "Manbasini koʻrish",
        "viewsource-title": "$1 sahifasining manbasini koʻrish",
        "virus-scanfailed": "tekshirishda xatolik (kod $1)",
        "virus-unknownscanner": "noma'lum antivirus:",
        "logouttext": "<strong>Siz saytdan muvaffaqiyatli chiqdingiz.</strong>\n\nBrauzeringiz keshini tozalamaguningizgacha ayrim sahifalar tizimga kirganingizdek koʻrinishda davom etaverishi mumkin.",
+       "welcomeuser": "Xush kelibsiz, $1!",
        "yourname": "Foydalanuvchi nomi:",
        "userlogin-yourname": "Foydalanuvchi nomi",
        "userlogin-yourname-ph": "Foydalanuvchi nomingizni kiriting",
        "gotaccountlink": "Kirish",
        "userlogin-resetlink": "Kirish maʻlumotlaringiz esdan chiqdimi?",
        "userlogin-resetpassword-link": "Unutib qoʻydingizmi?",
+       "userlogin-helplink2": "Kirish uchun yordam",
        "userlogin-loggedin": "Siz {{GENDER:$1|$1}} nomi bilan kirgansiz.\nBoshqa hisob raqami orqali kirish uchun quyidagi formadan foydalaning.",
        "userlogin-createanother": "Boshqa hisob yaratish",
        "createacct-emailrequired": "Elektron pochta manzilingiz",
        "createacct-benefit-body3": "soʻnggi paytdagi ishtirokchilar soni",
        "badretype": "Siz tomondan kiritilgan maxfiy so'zlar mos kelmayapti.",
        "loginerror": "Foydalanuvchini aniqlashda xatolik",
+       "createacct-error": "Hisob yaratishda xatolik",
        "createaccounterror": "Hisob yozuvi yaratishning iloji yoʻq: $1",
        "loginsuccesstitle": "Kirish muvaffaqiyatli amalga oshdi",
        "loginsuccess": "'''{{SITENAME}}ga \"$1\" foydalanuvchi nomi bilan kirdingiz.'''",
        "wrongpasswordempty": "Maxfiy soʻz koʻrsatilmagan. Qaytadan urinib koʻring.",
        "mailmypassword": "Maxfiy soʻzni yangilash",
        "passwordremindertitle": "{{SITENAME}} uchun vaqtinchalik yangi maxfiy so'z",
+       "mailerror": "$1 manziliga xat yuborishda xatolik",
        "emailauthenticated": "Elektron pochta manzilingiz $2, $3 da tasdiqlangan.",
        "emailconfirmlink": "Elektron pochta manzilingizni tasdiqlash",
        "emaildisabled": "Bu sayt elektron pochta xatlarini yubora olmaydi.",
        "accountcreated": "Hisob yozuvi yaratildi",
+       "createaccount-title": "{{SITENAME}} da hisob yaratish",
        "login-abort-generic": "Tizimga kirishga mufavvaqiyatsiz urinish",
        "loginlanguagelabel": "Til: $1",
        "pt-login": "Kirish",
+       "pt-login-button": "Kirish",
        "pt-createaccount": "Hisob yaratish",
        "pt-userlogout": "Chiqish",
        "changepassword": "Maxfiy soʻzni oʻzgartirish",
        "resetpass_forbidden": "Maxfiy so'z o'zgartirilishi mumkin emas",
        "resetpass-submit-loggedin": "Maxfiy soʻzni oʻzgartirish",
        "resetpass-submit-cancel": "Bekor",
+       "resetpass-temp-password": "Vaqtinchalik maxfiy soʻz",
        "passwordreset": "Maxfiy soʻzni yangilash",
        "passwordreset-text-one": "Mahfiy soʻzni tashlash uchun ushbu oynalarni toʻltiring.",
        "passwordreset-text-many": "{{PLURAL:$1|Quyidagi oynalardan birini toʻldirsangiz, elektron pochtangizga vaqtinchalik maxfiy soʻz joʻnatiladi.}}",
        "passwordreset-legend": "Maxfiy soʻzni yangilash",
        "passwordreset-username": "Foydalanuvchi nomi:",
        "passwordreset-domain": "Domen:",
+       "passwordreset-capture": "Xatni koʻrmoqchimisiz?",
        "passwordreset-email": "Elektron pochta manzilingiz:",
        "passwordreset-emailelement": "Foydalanuvchi ismi: $1\nVaqtinchalik maxfiy so'z: $2",
        "changeemail": "Elektron pochta manzilini oʻzgartirish",
-       "changeemail-header": "Elektron pochta manzilini o'zgaritish",
        "changeemail-oldemail": "Joriy elektron pochta manzili",
        "changeemail-newemail": "Elektron pochtaning yangi manzili",
        "changeemail-none": "(yoʻq)",
        "changeemail-submit": "Manzilni o'zgartirish",
-       "changeemail-cancel": "Bekor",
        "bold_sample": "Qalin matn",
        "bold_tip": "Qalin matn",
        "italic_sample": "Yotiq matn",
        "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]].''",
        "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",
        "updated": "(Yangilandi)",
        "note": "'''Izoh:'''",
        "editingsection": "$1 tahrirlanmoqda (boʻlim)",
        "editingcomment": "$1 tahrirlanmoqda (yangi mavzu)",
        "editconflict": "Tahrirlash toʻqnashuvi: $1",
+       "yourtext": "Sizning matningiz",
+       "yourdiff": "Farqlar",
        "copyrightwarning": "Iltimos, {{SITENAME}}ga yuklangan har qanday axborot $2 ostida tarqatilishiga diqqat qiling (batafsil ma'lumot uchun $1ni ko'ring).\nAgar yozganlaringiz keyinchalik tahrir qilinishi va qayta tarqatilishiga rozi bo'lmasangiz, u holda bu yerga yozmang.<br />\nSiz shuningdek bu yozganlaringiz sizniki yoki erkin litsenziya ostida ekanligini va'da qilmoqdasiz.\n'''MUALLIFLIK HUQUQLARI BILAN HIMOYALANGAN ISHLARNI ZINHOR BERUXSAT YUBORMANG!'''",
        "copyrightwarning2": "Iltimos, shuni esda tutingki, {{SITENAME}} sahifalaridagi barcha matnlar boshqa foydalanuvchilar tomonidan tahrirlanishi, almashtirilishi yoki o'chirilishi mumkin. Agar siz yozgan ma'lumotlaringizni bunday tartibda tahrirlanishiga rozi bo'lmasangiz, unda uni bu yerga joylashtirmang.<br />\nBundan tashqari, siz ushbu ma'lumotlarni o'zingiz yozgan bo'lishingiz yoki ruxsat berilgan internet manzilidan yoki shu kabi erkin resursdan nusxa olgan bo'lishingiz lozim (Qo'shimcha ma'lumotlar uchun $1 sahifasiga murojaat qiling).\n'''MUALLIFLIK HUQUQI QO'YILGAN ISHLARNI RUXSATSIZ BU YERGA JOYLASHTIRMANG!'''",
        "templatesused": "Ushbu sahifada foydalanilgan {{PLURAL:$1|andoza|andozalar}}:",
        "moveddeleted-notice": "Bu sahifa oʻchirilgan.\nMaʼlumot uchun quyida oʻchirish va qayta nomlash jurnallaridan mos yozuvlar keltirilgan.",
        "log-fulllog": "Qaydlarni toʻliq koʻrish",
        "edit-conflict": "Tahrirlash toʻqnashuvi.",
+       "postedit-confirmation-created": "Sahifa yaratildi.",
+       "postedit-confirmation-restored": "Sahifa qayta tiklandi.",
        "postedit-confirmation-saved": "Tahriringiz saqlandi.",
        "defaultmessagetext": "Boshlang'ich matn",
+       "content-model-text": "quruq matn",
+       "content-model-javascript": "JavaScript",
+       "content-model-css": "CSS",
        "post-expand-template-inclusion-warning": "'''Diqqat:''' Qo'llanilayotgan andozalarning jami hajmi juda katta.\nAyrim andozalar qo'shilmaydi.",
        "post-expand-template-inclusion-category": "Qo'llaniladigan andozalarning mumkin bo'lgan miqdoridan oshgan sahifalar",
        "post-expand-template-argument-category": "Andozalarning to'ldirilmagan o'zgaruvchilariga ega sahifalar",
        "mergehistory-submit": "Tahrirlarni birlashtirish",
        "mergehistory-reason": "Sabab:",
        "mergelog": "Birlashtirish qaydlari",
-       "pagemerge-logentry": "[[$1]] va [[$2]]lar birlashtirildi ($3 gacha bo'lgan versiyalar)",
        "revertmerge": "Bo'lish",
        "history-title": "$1 - oʻzgarishlar tarixi",
        "difference-title": "$1 — versiyalar orasidagi farq",
        "searchrelated": "bogʻlangan",
        "searchall": "barchasi",
        "showingresults": "Quyida №'''$2'''dan boshlab {{PLURAL:$1|'''bitta''' natija|'''$1''' ta natija}} koʻrsatilgan.",
-       "showingresultsheader": "<strong>$4</strong> uchun jami {{PLURAL:$5|<strong>$3</strong> tadan <strong>$1</strong> ta natija koʻrsatildi|<strong>$3</strong> tadan <strong>$1</strong> — <strong>$2</strong> chi natijalar koʻrsatildi}}",
        "search-nonefound": "Talabga javob beradigan natija topilmadi.",
        "powersearch-legend": "Kengaytirilgan qidiruv",
        "powersearch-ns": "Quyidagi nomfazolardan qidir:",
        "recentchangescount": "Sukut boʻyicha koʻrsatiladigan tahrirlar soni:",
        "prefs-help-recentchangescount": "Yangi oʻzgarishlar, sahifalar tarixi va qaydlar uchun",
        "prefs-help-watchlist-token2": "Bu kuzatuv roʻyxatingizning veb-kanali uchun maxfiy kalit kodi.\nBu kodni biladigan har kim sizning kuzatuv roʻyxatingizni koʻrishi mumkin, shuning uchun boshqalarga uni oshkor qilmang. [[Special:ResetTokens|Tokenni yangilash]].",
-       "savedprefs": "Sizning moslamalaringiz saqlandi.",
+       "savedprefs": "Sizning moslamalaringiz saqlandi",
        "timezonelegend": "Vaqt mintaqangiz:",
        "localtime": "Mahalliy vaqt:",
        "timezoneuseserverdefault": "Server moslamalaridan foydalanish ($1)",
        "download": "yuklash",
        "unusedtemplates": "Ishlatilinmagan andozalar",
        "randompage": "Tasodifiy sahifa",
-       "randomincategory-selectcategory-submit": "Oʻtish",
        "statistics": "Statistika",
        "statistics-header-pages": "Sahifalar statistikasi",
        "statistics-header-edits": "Tahrirlar statistikasi",
        "suppress": "Bekitish",
        "booksources": "Kitob manbalari",
        "booksources-search-legend": "Kitob haqida ma'lumot qidirish",
-       "booksources-go": "O‘tish",
        "specialloguserlabel": "Ijrochi:",
        "speciallogtitlelabel": "Moʻljal:",
        "log": "Qaydlar",
        "watchlist-details": "Sizning kuzatuv roʻyxatingizda hozirda {{PLURAL:$1|bitta sahifa|$1ta sahifa}} mavjud (munozara sahifalarini hisobga olmaganda).",
        "wlheader-showupdated": "Siz oxirgi marta kirganingizdan keyin oʻzgartirilgan sahifalar '''qalin''' yozuv bilan ajratib koʻrsatilgan.",
        "wlnote": "Below {{PLURAL:$1|is the last change|are the last '''$1''' changes}} in the last {{PLURAL:$2|hour|'''$2''' hours}}, as of $3, $4.",
-       "wlshowlast": "Oxirgi $1 soatdagi $2 kundagi tahrirlarni koʻrsat $3",
+       "wlshowlast": "Oxirgi $1 soatdagi $2 kundagi tahrirlarni koʻrsatish",
        "watchlist-options": "Kuzatuv roʻyxati moslamalari",
        "watching": "Kuzatish...",
        "unwatching": "Kuzatuv ro'yxatidan o'chirish...",
        "exif-iimcategory-sci": "Fan va texnologiyalar",
        "exif-iimcategory-spo": "Sport",
        "exif-iimcategory-wea": "Ob-havo",
-       "watchlistall2": "hammasi",
        "namespacesall": "Barchasi",
        "monthsall": "barchasi",
        "unit-pixel": " piksel",
index 67a4e39..add43d4 100644 (file)
        "passwordreset-emailsent-capture": "Xe stà invià na mail de reset password: el contegù xe riportà cuà de seguito.",
        "passwordreset-emailerror-capture": "Xe stà generà na mail de reset password, riportà cuà de seguito. L'invio a {{GENDER:$2|l'utente}} no xe riusido: $1",
        "changeemail": "Canbia indiriso de posta ełetronega",
-       "changeemail-header": "Canbia el indiriso de posta ełetronega del account",
        "changeemail-text": "Conpleta sto moduło par canbiare el to indiriso de posta ełetronega. Sarà necesario inserire ła password par confermare ła modifega.",
        "changeemail-no-info": "Te ghe da aver efetuà l'aceso par acedare a sta pajina diretamente.",
        "changeemail-oldemail": "Indiriso de posta ełetronega atuałe:",
        "changeemail-none": "(nisun)",
        "changeemail-password": "Ła password so {{SITENAME}}:",
        "changeemail-submit": "Canbia indiriso de posta ełetronega",
-       "changeemail-cancel": "Anuła",
        "resettokens-token-label": "$1 (valor atuale: $2)",
        "bold_sample": "Testo in grosso",
        "bold_tip": "Testo in grosso",
        "mergehistory-same-destination": "Le pàxene de origine e de destinasion no le pode èssar la stessa",
        "mergehistory-reason": "Motivassion:",
        "mergelog": "Registro de le unioni",
-       "pagemerge-logentry": "gà unìo [[$1]] a [[$2]] (revisioni fin a $3)",
        "revertmerge": "Desfa union",
        "mergelogpagetext": "Qua de seguito vien presentà na lista de le ultime operazion de unione de la cronologia de na pagina in un'altra.",
        "history-title": "$1: cronołojia dełe modifeghe",
        "searchrelated": "ligà",
        "searchall": "tuti",
        "showingresults": "Qua de soto vien mostrà al massimo {{PLURAL:$1|'''1''' risultato|'''$1''' risultati}} a partir dal nùmaro '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Risultato '''$1''' de '''$3'''|Risultati '''$1 - $2''' de '''$3'''}} par '''$4'''",
        "search-nonefound": "La riserca no la gà catà gnente.",
        "powersearch-legend": "Riserca avansà",
        "powersearch-ns": "Serca ne i namespace:",
        "recentchanges-label-plusminus": "La dimension de la pagina la xe canbià de sto nùmaro de byte",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (varda anca [[Special:NewPages|l'elenco de le pagine nove]])",
        "rcnotefrom": "Qui di seguito sono elencate le modifiche da '''$2''' (fino a '''$1''').",
-       "rclistfrom": "Fà védar i canbiamenti fati dal $3 $2",
+       "rclistfrom": "Mostra i canbiamenti fati da ƚe $2 del $3",
        "rcshowhideminor": "$1 i canbiamenti picenini",
        "rcshowhidebots": "$1 i bot",
        "rcshowhideliu": "$1 i utenti registrài",
        "randomincategory": "Pagina a ocio in te na categoria",
        "randomincategory-invalidcategory": "\"$1\" no'l và mia ben come nome de categoria.",
        "randomincategory-nopages": "No ghe xe mia pagine in [[:Category:$1]].",
-       "randomincategory-selectcategory": "Ciapa na pagina a ocio da la categoria: $1 $2.",
-       "randomincategory-selectcategory-submit": "Và",
        "randomredirect": "Un redirect a caso",
        "randomredirect-nopages": "No ghe xe nissun rimando in tel namespace \"$1\".",
        "statistics": "Statisteghe",
        "statistics-header-pages": "Statìsteghe relative a le pàxene",
        "statistics-header-edits": "Statìsteghe relative a i canbiamenti",
-       "statistics-header-views": "Statìsteghe relative a le visualizassion",
        "statistics-header-users": "Statistiche dei utenti",
        "statistics-header-hooks": "Altre statìsteghe",
        "statistics-articles": "Pagine de contenuti",
        "statistics-files": "File cargà",
        "statistics-edits": "Modifiche a scuminsiar da l'istalassion de {{SITENAME}}",
        "statistics-edits-average": "Canbiamenti in media par pagina",
-       "statistics-views-total": "Visualizasion totali",
-       "statistics-views-total-desc": "Xe lassà fora le viste de pagine speciali o mia esistenti",
-       "statistics-views-peredit": "Visualizassion par modifica",
        "statistics-users": "[[Special:ListUsers|Utenti]] registrà",
        "statistics-users-active": "Utenti atìvi",
        "statistics-users-active-desc": "Utenti che gà fato almanco un'azion in {{PLURAL:$1|tel'ultimo zorno|in tei ultimi $1 zorni}}",
-       "statistics-mostpopular": "Pagine piassè visità",
        "pageswithprop": "Pagine co na proprietà de pagina",
        "pageswithprop-legend": "Pagine co na proprietà de pagina",
        "pageswithprop-text": "Sta pagina la elenca le pagine che dòpara na particolare proprietà de pagina.",
        "uncategorizedtemplates": "Modèi che no gà categorie",
        "unusedcategories": "Categorie mìa doparàe",
        "unusedimages": "File mìa doparà",
-       "popularpages": "Pagine pì viste",
        "wantedcategories": "Categorie richieste",
        "wantedpages": "Pagine pì domandà",
        "wantedpages-badtitle": "Titolo mia valido nel grupo de risultati: $1",
        "querypage-disabled": "Sta pàjina speciałe ła xe dixativà par motivi de prestasion.",
        "booksources": "Fonti librarie",
        "booksources-search-legend": "Riserca de fonti librarie",
-       "booksources-go": "Va",
        "booksources-text": "De seguito vien presentà un elenco de colegamenti verso siti foresti che vende libri novi e usài, atraverso i quali se pol otegner piassè informazioni sul testo sercà.",
        "booksources-invalid-isbn": "El nùmaro ISBN inserìo no'l xe mia valido: controla de novo se te lo ghè copià justo da la fonte originale.",
        "specialloguserlabel": "Asion efetuà da:",
        "wlheader-enotif": "Xe ativà la notifica via e-mail.",
        "wlheader-showupdated": "Le pagine che xe stà canbià da la to ultima visita le xe segnà in '''grosso'''",
        "wlnote": "Cuà soto te cati {{PLURAL:$1|'l ultimo canbiamento|i ultimi '''$1''' canbiamenti}} inte {{PLURAL:$2|l'ultema ora|łe ultime '''$2''' ore}}; i dati i xe axornai a łe $4 del $3.",
-       "wlshowlast": "Mostra le ultime $1 ore $2 zorni $3",
+       "wlshowlast": "Mostra le ultime $1 ore $2 zorni",
        "watchlist-options": "Inpostassion de le pagine tegnùe d'ocio",
        "watching": "Taco a tegner d'ocio...",
        "unwatching": "Desmeto de tegner d'ocio...",
        "import": "Inporta pàxene",
        "importinterwiki": "Inportazion transwiki",
        "import-interwiki-text": "Seleziona un projeto wiki e el titoło de ła pàxena da inportar.\nLe date de publicazion e i nomi de i autori de łe varie version i sarà conservà.\nTute łe operazion de inportazion trans-wiki łe xè notà nel [[Special:Log/import|registro de inportazion]].",
-       "import-interwiki-source": "Sorgente wiki/pàxena:",
        "import-interwiki-history": "Copia l'intiera cronołogia de sta pàxena",
        "import-interwiki-templates": "Tira dentro tuti i modèi",
        "import-interwiki-submit": "Inporta",
        "pageinfo-robot-policy": "Stato par i motori de riserca",
        "pageinfo-robot-index": "Indicizabile",
        "pageinfo-robot-noindex": "Mia indicizabile",
-       "pageinfo-views": "Nùmaro de visite",
        "pageinfo-watchers": "Nùmaro de utenti che tien d'ocio sta pagina",
        "pageinfo-few-watchers": "Manco de $1 {{PLURAL:$1|oservador|oservadori}}",
        "pageinfo-redirects-name": "Rimandi verso sta pagina",
        "exif-urgency-low": "Basa ($1)",
        "exif-urgency-high": "Alta ($1)",
        "exif-urgency-other": "Priorità definie dal utente ($1)",
-       "watchlistall2": "tute",
        "namespacesall": "Tuti",
        "monthsall": "tuti",
        "confirmemail": "Conferma indirisso e-mail",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|el|la}} ga canbià l'apartenensa a grupi de $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|el|la}} xe stà automategamente promoso/a da $4 a $5",
        "rightsnone": "(nissun)",
+       "revdelete-summary": "modifica ogeto",
        "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:",
index d00ada8..bd9b398 100644 (file)
        "changeemail-newemail": "Uz' e-počtan adres",
        "changeemail-none": "(ei ole)",
        "changeemail-submit": "Toižetada e-počtan adres",
-       "changeemail-cancel": "Heitta",
        "resettokens-tokens": "Tokenad:",
        "bold_sample": "Lihavoitud tekst",
        "bold_tip": "Lihavoitud tekst",
        "mergehistory-same-destination": "Augotižlehpolen da metlehpolen keskes pidab tehta eroid",
        "mergehistory-reason": "Sü:",
        "mergelog": "Ühtenzoitusiden aigkirj",
-       "pagemerge-logentry": "[[$1]] da [[$2]]-lehtpoled oma ühtenzoittud (versijad $3-hesai)",
        "revertmerge": "Jagada",
        "mergelogpagetext": "Naku om tantoižiden lehtpoliden nimiden ühtenzoitusiden nimikirjutez.",
        "history-title": "\"$1\"-lehtpolen toižetusiden istorii",
        "searchrelated": "sidotud",
        "searchall": "kaik",
        "showingresults": "Alemba ozutadas {{PLURAL:$1|'''1''' rezul'tat|'''$1''' rezul'tatad}} nomeraspäi #'''$2''' augotaden.",
-       "showingresultsheader": "{{PLURAL:$5|'''$1''' '''$3'''-š rezul'tatoišpäi|Rezul'tatad '''$1–$2''' '''$3'''-špäi}} '''$4'''-n täht",
        "search-nonefound": "Ecmižhe ei löudnus rezul'tatoid.",
        "powersearch-legend": "Levitoittud ecind",
        "powersearch-ns": "Ecind nimiavaruziš:",
        "unusedtemplateswlh": "toižed kosketused",
        "randompage": "Statjaline lehtpol'",
        "randompage-nopages": "\"$1\"-{{PLURAL:$2|Nimiavarudes|Nimiavaruziš}} ei ole lehtpolid.",
-       "randomincategory-selectcategory-submit": "Mäne",
        "randomredirect": "Statjaline läbikosketuz",
        "randomredirect-nopages": "\"$1\"-nimiavaruses ei ole läbikosketusid.",
        "statistics": "Statistik",
        "statistics-header-pages": "Lehtpoliden statistik",
        "statistics-header-edits": "Redaktiruida statistikad",
-       "statistics-header-views": "Kacta statistikha",
        "statistics-header-users": "Kävutajiden statistik",
        "statistics-header-hooks": "Toine statistik",
        "statistics-articles": "Südäimištlehtpol't",
        "statistics-files": "Jügetoittud failad",
        "statistics-edits": "Toižetusiden lugu {{SITENAME}}-saitan seižutamižessai.",
        "statistics-edits-average": "Toižetusiden keskmäine lugu lehtpolel",
-       "statistics-views-total": "Kaiked kacundoid",
-       "statistics-views-peredit": "Kacundoid redakcijas",
        "statistics-users": "Registriruidud [[Special:ListUsers|kävutajad]]",
        "statistics-users-active": "Activižed kävutajad",
        "statistics-users-active-desc": "Kävutajad, kudambad ozutiba aktivižut {{PLURAL:$1|jäl’gmäižen päivän|$1 jäl'gmäižil päivil}}",
-       "statistics-mostpopular": "Kaikiš populärižembad lehtpoled",
        "pageswithprop-submit": "Tege",
        "doubleredirects": "Kaksitadud läbikosketused",
        "double-redirect-fixed-move": "[[$1]]-lehtpol' om udesnimitadud. Se läbikosketab nügüd' [[$2]]-lehtpolele.",
        "uncategorizedtemplates": "Järgendamatomad šablonad",
        "unusedcategories": "Kävutamatomad kategorijad",
        "unusedimages": "Kävutamatomad failad",
-       "popularpages": "Populärižed lehtpoled",
        "wantedcategories": "Ectud kategorijad",
        "wantedpages": "Ectud lehtpoled",
        "wantedpages-badtitle": "Petuzline pälkirjutez küzumižen rezul'tatoiš: $1",
        "booksources": "Kirjpurtked",
        "booksources-search-legend": "Ectä kirjpurtkid",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "Ectä",
        "booksources-text": "Naku om kosketusid saitoile, kudambil mödas uzid da kuluid kirjoid. Niilpäi voib löuta ližainformacijad ectud kirjoiš:",
        "booksources-invalid-isbn": "Nece ISBN, näguse, om vär; Kodvgat, oikti-k oled kopiruinuded sidä originaližes purtkespäi.",
        "specialloguserlabel": "Kävutai:",
        "notvisiblerev": "Versijad oma čutud",
        "watchlist-details": "Teiden kaclendnimikirjuteses om {{PLURAL:$1|$1 lehtpol'|$1 lehtpol't}}. Lodulehtpoled ei olgoi neciš lugus.",
        "wlheader-enotif": "Tedotand e-počtadme om kävutamas.",
-       "wlshowlast": "Ozutada jäl'gmäižiš $1 časuiš da $2 päiviš $3",
+       "wlshowlast": "Ozutada jäl'gmäižiš $1 časuiš da $2 päiviš",
        "watchlist-options": "Kaclendnimikirjutesen järgendused",
        "watching": "Ližaduz kaclendnimikirjuteshe...",
        "unwatching": "Heitmine kaclendnimikirjutesespäi...",
        "thumbnail_image-missing": "Näguse, ei ole $1-failad",
        "import": "Toda lehtesid toižiš saitoišpäi",
        "importinterwiki": "Transwiki-tomine",
-       "import-interwiki-source": "Wikipurde/lehtpol':",
        "import-interwiki-history": "Kopiruida kaik necen lehtpolen toižetamižen istorii",
        "import-interwiki-templates": "Mülütada kaik šablonad",
        "import-interwiki-submit": "Import",
        "spambot_username": "MediaWikid puhtastadas spamaspäi",
        "pageinfo-header-edits": "Redakcijoiden istorii",
        "pageinfo-article-id": "Lehtpolen ID",
-       "pageinfo-views": "Kacundoiden lugu",
        "pageinfo-watchers": "Lehtpolen kaclijoiden lugu",
        "pageinfo-edits": "Redakcijoiden lugumär",
        "pageinfo-authors": "Erazvuiččiden avtoroiden lugu",
        "exif-urgency-normal": "Normaline ($1)",
        "exif-urgency-low": "Madal ($1)",
        "exif-urgency-high": "Korged ($1)",
-       "watchlistall2": "kaik",
        "namespacesall": "kaik",
        "monthsall": "kaik",
        "confirmemail": "Vahvištoitta e-počtan adres",
        "revdelete-restricted": "kaidendused administratoriden täht",
        "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",
index e7a4a53..24a9572 100644 (file)
@@ -25,7 +25,8 @@
                        "Withoutaname",
                        "לערי ריינהארט",
                        "아라",
-                       "Tranquanganh"
+                       "Tranquanganh",
+                       "Max20091"
                ]
        },
        "tog-underline": "Gạch chân liên kết:",
@@ -38,7 +39,7 @@
        "tog-showtoolbar": "Hiển thị thanh định dạng",
        "tog-editondblclick": "Nhấn đúp để sửa đổi trang",
        "tog-editsectiononrightclick": "Bấm chuột phải vào đề mục để sửa đổi phần trang",
-       "tog-watchcreations": "Tự động theo dõi các trang tôi viết mới và các tập tin tôi tải lên",
+       "tog-watchcreations": "Tự động theo dõi các trang tôi viết và các tập tin tôi tải lên",
        "tog-watchdefault": "Tự động theo dõi các trang và tập tin tôi sửa",
        "tog-watchmoves": "Tự động theo dõi các trang và tập tin tôi di chuyển",
        "tog-watchdeletion": "Tự động theo dõi các trang và tập tin tôi xóa",
        "otherlanguages": "Ngôn ngữ khác",
        "redirectedfrom": "(đổi hướng từ $1)",
        "redirectpagesub": "Trang đổi hướng",
+       "redirectto": "Đổi hướng đến:",
        "lastmodifiedat": "Trang này được sửa đổi lần cuối lúc $2 $1.",
        "viewcount": "Trang này đã được đọc {{PLURAL:$1|một|$1}} lần.",
        "protectedpage": "Trang bị khóa",
        "hidetoc": "ẩn",
        "collapsible-collapse": "Thu gọn",
        "collapsible-expand": "Mở rộng",
+       "confirmable-confirm": "{{GENDER:$1}}Bạn chắc chứ?",
+       "confirmable-yes": "Có",
+       "confirmable-no": "Không",
        "thisisdeleted": "Xem hay phục hồi $1 ?",
        "viewdeleted": "Xem $1?",
        "restorelink": "{{PLURAL:$1|một|$1}} sửa đổi đã xóa",
        "viewsourcetext": "Bạn vẫn có thể xem và chép xuống mã nguồn của trang này:",
        "viewyourtext": "Bạn vẫn có thể xem và chép xuống mã nguồn '''các sửa đổi của bạn''' tại trang này:",
        "protectedinterface": "Trang này cung cấp một thông điệp trong giao diện phần mềm, và bị khóa để tránh phá hoại. Để bổ sung hoặc thay đổi bản dịch ở bất cứ wiki nào, xin vui lòng đóng góp vào [//translatewiki.net/wiki/Main_Page?setlang=vi translatewiki.net], dự án bản địa hóa của MediaWiki.",
-       "editinginterface": "'''Lưu ý:''' Bạn đang sửa chữa một trang dùng để cung cấp thông điệp giao diện cho phần mềm. Những thay đổi tại trang này sẽ ảnh hưởng đến giao diện của rất nhiều người dùng wiki này. Để bổ sung hoặc thay đổi bản dịch ở bất cứ wiki nào, xin vui lòng đóng góp vào [//translatewiki.net/wiki/Main_Page?setlang=vi translatewiki.net], dự án bản địa hóa của MediaWiki.",
+       "editinginterface": "<strong>Lưu ý:</strong> Bạn đang sửa chữa một trang dùng để cung cấp thông điệp giao diện cho phần mềm. Những thay đổi tại trang này sẽ ảnh hưởng đến giao diện của rất nhiều người dùng wiki này.",
+       "translateinterface": "Để bổ sung hoặc thay đổi bản dịch ở bất cứ wiki nào, xin vui lòng đóng góp vào [//translatewiki.net/?setlang=vi translatewiki.net], dự án bản địa hóa MediaWiki.",
        "cascadeprotected": "Trang này đã bị khóa không cho sửa đổi, vì nó được nhúng vào {{PLURAL:$1|trang|những trang}} đã bị khóa với tùy chọn “khóa theo tầng” được kích hoạt:\n$2",
        "namespaceprotected": "Bạn không có quyền sửa các trang trong không gian tên '''$1'''.",
        "customcssprotected": "Bạn không có quyền sửa đổi trang CSS này vì nó chứa các tùy chọn cá nhân của một thành viên khác.",
        "invalidtitle-knownnamespace": "Tựa trang không hợp lệ có không gian tên “$2” và văn bản “$3”",
        "invalidtitle-unknownnamespace": "Tựa trang không hợp lệ có không gian tên số $1 không rõ và văn bản “$2”",
        "exception-nologin": "Chưa đăng nhập",
-       "exception-nologin-text": "Xin vui lòng [[Special:Userlogin|đăng nhập]] để truy cập trang hoặc thực hiện tác vụ này.",
+       "exception-nologin-text": "Xin vui lòng đăng nhập để truy cập trang hoặc thực hiện tác vụ này.",
        "exception-nologin-text-manual": "Xin vui lòng $1 để truy cập trang hoặc tác vụ này.",
        "virus-badscanner": "Cấu hình sau: không nhận ra bộ quét virus: ''$1''",
        "virus-scanfailed": "quét thất bại (mã $1)",
        "createaccount-text": "Ai đó đã tạo một tài khoản với tên $2 tại {{SITENAME}} ($4). Mật khẩu của \"$2\" là \"$3\". Bạn nên đăng nhập và đổi mật khẩu ngay bây giờ.\n\nXin hãy bỏ qua thông điệp này nếu tài khoản này không phải do bạn tạo ra.",
        "login-throttled": "Bạn đã hết quyền thử mật khẩu tài khoản này vì bạn đã nhập sai quá nhiều. Xin hãy đợi $1 rồi hãy thử lại.",
        "login-abort-generic": "Thất bại khi đăng nhập",
+       "login-migrated-generic": "Tài khoản của bạn đã được hợp nhất, và tên đăng nhập của bạn không còn tồn tại trên wiki này.",
        "loginlanguagelabel": "Ngôn ngữ: $1",
        "suspicious-userlogout": "Đã bỏ qua yêu cầu đăng xuất bạn, hình như được gửi từ trình duyệt hoặc máy proxy nhớ đệm hư.",
        "createacct-another-realname-tip": "Tên thật là không bắt buộc. \n\nNếu bạn đồng ý cung cấp, nó sẽ dùng để ghi nhận công lao của bạn.",
        "passwordreset-emailsent-capture": "Thư điện tử để tái tạo mật khẩu đã được gửi, nội dung như sau.",
        "passwordreset-emailerror-capture": "Chúng tôi đã tạo thư tái tạo mật khẩu dưới đây, nhưng không thể gửi đến {{GENDER:$2}}người dùng: $1",
        "changeemail": "Đổi địa chỉ thư điện tử",
-       "changeemail-header": "Đổi địa chỉ thư điện tử của tài khoản",
        "changeemail-text": "Điền biểu mẫu này để đổi địa chỉ thư điện tử. Bạn sẽ cần phải nhập mật khẩu để xác nhận thay đổi này.",
        "changeemail-no-info": "Bạn phải đăng nhập mới có thể truy cập trực tiếp trang này.",
        "changeemail-oldemail": "Địa chỉ thư điện tử hiện tại:",
        "changeemail-none": "(không có)",
        "changeemail-password": "Mật khẩu của bạn tại {{SITENAME}}:",
        "changeemail-submit": "Đổi địa chỉ",
-       "changeemail-cancel": "Hủy bỏ",
        "changeemail-throttled": "Bạn đã thử đăng nhập nhiều lần quá. Xin chờ $1 trước khi bạn thử lần nữa.",
        "resettokens": "Đặt lại dấu hiệu",
        "resettokens-text": "Bạn có thể đặt lại các dấu hiệu cho phép truy cập những dữ liệu cá nhân của tài khoản của bạn tại đây.\n\nBạn nên sử dụng chức năng này nếu bạn đã vô tình chia sẻ các dấu hiệu với người khác hoặc tài khoản của bạn đã bị xâm phạm.",
        "showpreview": "Xem trước",
        "showdiff": "Xem thay đổi",
        "blankarticle": "<strong>Cảnh báo:</strong> Bạn sẽ tạo ra một trang trống.\nNếu bấm “{{int:savearticle}}” lần nữa, một trang không có nội dung sẽ được tạo ra.",
-       "anoneditwarning": "'''Cảnh báo:''' Bạn chưa đăng nhập. Địa chỉ IP của bạn sẽ được ghi lại trong lịch sử sửa đổi của trang.",
+       "anoneditwarning": "<strong>Cảnh báo:</strong> Bạn chưa đăng nhập. Địa chỉ IP của bạn sẽ bị hiển thị công khai nếu bạn thực hiện bất kỳ sửa đổi nào. Nếu bạn <strong>[$1 đăng nhập]</strong> hoặc <strong>[$2 mở tài khoản]</strong>, sửa đổi của bạn sẽ được gán bởi tên đăng nhập của bạn, cùng nhiều lợi ích khác.",
        "anonpreviewwarning": "''Bạn chưa đăng nhập. Khi lưu trang này, địa chỉ IP của bạn sẽ được ghi vào lịch sử trang.''",
        "missingsummary": "'''Nhắc nhở:''' Bạn đã không ghi lại tóm lược sửa đổi. Nếu bạn nhấn Lưu trang một lần nữa, sửa đổi của bạn sẽ được lưu mà không có tóm lược.",
        "missingcommenttext": "Xin hãy gõ vào lời bàn luận ở dưới.",
        "content-model-text": "văn bản thuần",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Trang đưa đối số thừa vào bản mẫu",
+       "duplicate-args-category-desc": "Trang đưa một đối số nhiều lần vào một bản mẫu được nhúng, thí dụ <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> hoặc <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Cảnh báo: Trang này có quá nhiều lần gọi hàm cú pháp cần mức độ xử lý cao.\n\nNó nên ít hơn $2 {{PLURAL:$2|lần gọi|lần gọi}}, hiện giờ đang là {{PLURAL:$1|$1 lần gọi|$1 lần gọi}}.",
        "expensive-parserfunction-category": "Trang có quá nhiều lời gọi hàm cú pháp cần mức độ xử lý cao",
        "post-expand-template-inclusion-warning": "Cảnh báo: Kích thước bản mẫu nhúng vào quá lớn.\nMột số bản mẫu sẽ không được đưa vào.",
        "parser-template-recursion-depth-warning": "Bản mẫu đã vượt quá giới hạn về độ sâu đệ quy ($1)",
        "language-converter-depth-warning": "Đã vượt quá giới hạn độ sâu của bộ chuyển đổi ngôn ngữ ($1)",
        "node-count-exceeded-category": "Trang có số nốt vượt quá giới hạn cho phép",
-       "node-count-exceeded-category-desc": "Thể loại chứa các trang có số nốt vượt quá giới hạn cho phép.",
-       "node-count-exceeded-warning": "Trang có nhiều nốt quá",
+       "node-count-exceeded-category-desc": "Trang có số nốt vượt quá giới hạn cho phép.",
+       "node-count-exceeded-warning": "Trang có quá nhiều nốt",
        "expansion-depth-exceeded-category": "Trang có độ sâu bung bản mẫu vượt quá giới hạn cho phép",
-       "expansion-depth-exceeded-category-desc": "Thể loại này chứa các trang có độ sâu bung bản mẫu vượt quá giới hạn cho phép.",
+       "expansion-depth-exceeded-category-desc": "Trang có độ sâu bung bản mẫu vượt quá giới hạn cho phép.",
        "expansion-depth-exceeded-warning": "Trang bung bản mẫu sâu quá",
        "parser-unstrip-loop-warning": "Vòng lặp unstrip",
        "parser-unstrip-recursion-limit": "Đã vượt quá giới hạn về độ sâu đệ quy unstrip ($1)",
        "mergehistory-same-destination": "Trang nguồn và trang đích không được trùng tên",
        "mergehistory-reason": "Lý do:",
        "mergelog": "Nhật trình trộn",
-       "pagemerge-logentry": "đã trộn [[$1]] vào [[$2]] (sửa đổi cho đến $3)",
        "revertmerge": "Bỏ trộn",
        "mergelogpagetext": "Dưới đây là danh sách các thao tác trộn mới nhất của lịch sử một trang vào trang khác.",
        "history-title": "Lịch sử sửa đổi của “$1”",
        "search-result-category-size": "$1 trang thành viên ($2 thể loại con, $3 tập tin)",
        "search-redirect": "(đổi hướng $1)",
        "search-section": "(đề mục $1)",
+       "search-category": "(thể loại $1)",
        "search-file-match": "(khớp nội dung tập tin)",
        "search-suggest": "Có phải bạn muốn tìm: $1",
        "search-interwiki-caption": "Các dự án liên quan",
        "searchall": "tất cả",
        "showingresults": "Dưới đây là {{PLURAL:$1|'''1'''|'''$1'''}} kết quả bắt đầu từ #'''$2'''.",
        "showingresultsinrange": "Dưới đây là cho tới <strong>$1</strong> kết quả từ #<strong>$2</strong> đến #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|Kết quả thứ '''$1''' trong tổng số '''$3''' kết quả|Các kết quả '''$1–$2''' trong tổng số '''$3''' kết quả}} cho '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|Kết quả thứ <strong>$1</strong> trong tổng số <strong>$3</strong>|Các kết quả <strong>$1–$2</strong> trong tổng số <strong>$3</strong>}}",
        "search-nonefound": "Không có kết quả nào khớp với câu truy vấn.",
        "powersearch-legend": "Tìm kiếm nâng cao",
        "powersearch-ns": "Tìm trong không gian tên:",
        "preferences": "Tùy chọn",
        "mypreferences": "Tùy chọn",
        "prefs-edits": "Số lần sửa đổi:",
-       "prefsnologintext2": "Xin vui lòng $1 để thay đổi tùy chọn.",
+       "prefsnologintext2": "Xin vui lòng đăng nhập để thay đổi tùy chọn.",
        "prefs-skin": "Giao diện",
        "skin-preview": "Xem trước",
        "datedefault": "Không quan tâm",
        "prefs-tokenwatchlist": "Dấu hiệu",
        "prefs-diffs": "Khác biệt",
        "prefs-help-prefershttps": "Đăng xuất và đăng nhập lại để áp dụng tùy chọn này.",
+       "prefswarning-warning": "Bạn chưa lưu những thay đổi tùy chọn đã thực hiện.\nNếu bạn rời khỏi trang này mà không bấm “$1”, các tùy chọn của bạn sẽ không được cập nhật.",
        "prefs-tabs-navigation-hint": "Mẹo: Bạn có thể bấm các phím mũi tên trái phải để luân chuyển qua các thẻ trong danh sách thẻ.",
        "email-address-validity-valid": "Có vẻ hợp lệ",
        "email-address-validity-invalid": "Yêu cầu địa chỉ hợp lệ!",
        "randomincategory": "Trang ngẫu nhiên trong thể loại",
        "randomincategory-invalidcategory": "“$1” không phải tên thể loại hợp lệ.",
        "randomincategory-nopages": "Không có trang nào trong [[:Category:$1]].",
-       "randomincategory-selectcategory": "Xem trang ngẫu nhiên trong thể loại: $1 $2.",
-       "randomincategory-selectcategory-submit": "Xem",
+       "randomincategory-category": "Thể loại:",
+       "randomincategory-legend": "Trang ngẫu nhiên trong thể loại",
        "randomredirect": "Trang đổi hướng ngẫu nhiên",
        "randomredirect-nopages": "Không có trang đổi hướng nào trong không gian tên “$1”.",
        "statistics": "Thống kê",
        "statistics-header-pages": "Thống kê trang",
        "statistics-header-edits": "Thống kê sửa đổi",
-       "statistics-header-views": "Thống kê truy cập",
        "statistics-header-users": "Thống kê thành viên",
        "statistics-header-hooks": "Thống kê khác",
        "statistics-articles": "Số trang nội dung",
        "statistics-files": "Số tập tin đã tải lên",
        "statistics-edits": "Số sửa đổi trang từ khi {{SITENAME}} được thành lập",
        "statistics-edits-average": "Số sửa đổi trung bình trên một trang",
-       "statistics-views-total": "Số lần xem tổng cộng",
-       "statistics-views-total-desc": "Không bao gồm số lần xem các trang không tồn tại và các trang đặc biệt",
-       "statistics-views-peredit": "Số lần xem trên một sửa đổi",
        "statistics-users": "Số [[Special:ListUsers|thành viên]] có tài khoản",
        "statistics-users-active": "Số thành viên tích cực",
        "statistics-users-active-desc": "Những thành viên đã hoạt động trong {{PLURAL:$1|ngày|$1 ngày}} qua",
-       "statistics-mostpopular": "Các trang được xem nhiều nhất",
        "pageswithprop": "Trang có thuộc tính trang",
        "pageswithprop-legend": "Các trang có thuộc tính trang",
        "pageswithprop-text": "Trang này liệt kê các trang sử dụng một thuộc tính trang nào đó.",
        "uncategorizedtemplates": "Bản mẫu chưa được phân loại",
        "unusedcategories": "Thể loại trống",
        "unusedimages": "Tập tin chưa dùng",
-       "popularpages": "Trang nhiều người đọc",
        "wantedcategories": "Thể loại cần thiết",
        "wantedpages": "Trang cần viết",
        "wantedpages-badtitle": "Tiêu đề không hợp lệ trong tập kết quả: $1",
        "pager-older-n": "{{PLURAL:$1|1|$1}} cũ hơn",
        "suppress": "Giám sát viên",
        "querypage-disabled": "Trang đặc biệt này bị tắt vì lý do hiệu suất.",
+       "apihelp": "Trợ giúp API",
+       "apihelp-no-such-module": "Không tìm thấy mô đun “$1”",
        "booksources": "Nguồn sách",
        "booksources-search-legend": "Tìm kiếm nguồn sách",
-       "booksources-go": "Tìm kiếm",
+       "booksources-search": "Tìm kiếm",
        "booksources-text": "Dưới đây là danh sách những trang bán sách mới và cũ, đồng thời có thể có thêm thông tin về những cuốn sách bạn đang tìm:",
        "booksources-invalid-isbn": "ISBN mà bạn cung cấp dường như không đúng; xin hãy kiểm tra lại xem có lỗi gì khi sao chép từ nội dung gốc hay không.",
        "specialloguserlabel": "Người thực hiện:",
        "trackingcategories-desc": "Tiêu chuẩn xếp thể loại",
        "noindex-category-desc": "Trang này không được các robot đánh chỉ mục vì trang có từ thần chú <code><nowiki>__NOINDEX__</nowiki></code> và nằm trong không gian tên cho phép từ thần chú này.",
        "index-category-desc": "Trang này có từ thần chú <code><nowiki>__INDEX__</nowiki></code> và nằm trong một không gian tên cho phép từ thần chú này, nên được các robot đánh chỉ mục, trong khi bình thường nó không được đánh chỉ mục.",
-       "post-expand-template-inclusion-category-desc": "Nếu bung tất cả các bản mẫu, kích thước trang sẽ vượt quá <code>$wgMaxArticleSize</code>, nên một số bản mẫu không được bung.",
-       "post-expand-template-argument-category-desc": "Nếu bung một tham số bản mẫu (tức định danh có mỗi bên ba dấu ngoặc móc, thí dụ <code>{{{Thí dụ}}}</code>), trang này sẽ vượt quá <code>$wgMaxArticleSize</code>.",
-       "expensive-parserfunction-category-desc": "Trang có quá nhiều hàm cú pháp cần mức độ xử lý cao (chẳng hạn như <code>#ifexist</code>). Xem [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit?uselang=vi Manual:$wgExpensiveParserFunctionLimit].",
-       "broken-file-category-desc": "Trang này muốn nhúng một tập tin không tồn tại.",
-       "hidden-category-category-desc": "Thể loại này có <code><nowiki>__HIDDENCAT__</nowiki></code>, nên, theo mặc định, thể loại không xuất hiện trong hộp thể loại trên các trang được xếp vào thể loại.",
+       "post-expand-template-inclusion-category-desc": "Kích thước trang sẽ vượt quá <code>$wgMaxArticleSize</code> nếu bung hết toàn bộ bản mẫu, nên một số bản mẫu không được bung.",
+       "post-expand-template-argument-category-desc": "Trang này sẽ vượt quá <code>$wgMaxArticleSize</code> nếu bung một tham số bản mẫu (tức định danh có mỗi bên ba dấu ngoặc móc, thí dụ <code>{{{Thí dụ}}}</code>).",
+       "expensive-parserfunction-category-desc": "Trang có quá nhiều hàm cú pháp cần mức độ xử lý cao (chẳng hạn như <code>#ifexist</code>). Xem [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Trang này có một liên kết tập tin hỏng (liên kết nhúng tập tin không tồn tại).",
+       "hidden-category-category-desc": "Nội dung của trang thể loại này chứa <code><nowiki>__HIDDENCAT__</nowiki></code>, nên theo mặc định thì thể loại không xuất hiện trong thanh thể loại trên các trang được xếp vào thể loại.",
        "trackingcategories-nodesc": "Không có miêu tả.",
        "trackingcategories-disabled": "Thể loại bị tắt",
        "mailnologin": "Không có địa chỉ gửi thư",
        "mywatchlist": "Trang theo dõi",
        "watchlistfor2": "Của $1 $2",
        "nowatchlist": "Danh sách theo dõi của bạn không có gì.",
-       "watchlistanontext": "Xin hãy $1 để xem hay sửa đổi các trang được theo dõi.",
+       "watchlistanontext": "Xin hãy đăng nhập để xem hay sửa đổi các trang trong danh sách theo dõi của bạn.",
        "watchnologin": "Chưa đăng nhập",
        "addwatch": "Thêm vào danh sách theo dõi",
        "addedwatchtext": "Trang “[[:$1]]” đã vào [[Special:Watchlist|danh sách theo dõi]] của bạn.\nNhững sửa đổi đối với trang này và trang thảo luận của nó sẽ được liệt kê ở đấy.",
        "wlheader-enotif": "Đã bật thông báo qua thư điện tử.",
        "wlheader-showupdated": "Các trang đã thay đổi kể từ lần cuối bạn xem chúng được in '''đậm'''",
        "wlnote": "Dưới đây là {{PLURAL:$1|thay đổi duy nhất|<strong>$1</strong> thay đổi gần nhất}} trong {{PLURAL:$2|giờ|<strong>$2</strong> giờ}} qua, tính tới $3 lúc $4.",
-       "wlshowlast": "Hiển thị $1 giờ $2 ngày gần đây $3",
+       "wlshowlast": "Hiển thị $1 giờ $2 ngày gần đây",
        "watchlist-options": "Tùy chọn về danh sách theo dõi",
        "watching": "Đang theo dõi…",
        "unwatching": "Đang ngừng theo dõi…",
        "exbeforeblank": "nội dung trước khi tẩy trống: “$1”",
        "delete-confirm": "Xóa “$1”",
        "delete-legend": "Xóa",
-       "historywarning": "'''Cảnh báo:''' Trang bạn sắp xóa đã có lịch sử khoảng $1 {{PLURAL:$1|phiên bản|phiên bản}}:",
+       "historywarning": "<strong>Cảnh báo:</strong> Trang bạn sắp xóa đã có lịch sử $1 phiên bản:",
        "confirmdeletetext": "Bạn sắp xóa hẳn một trang cùng với tất cả lịch sử của nó.\nXin xác nhận việc bạn định làm, và hiểu rõ những hệ lụy của nó, và bạn thực hiện nó theo đúng đúng [[{{MediaWiki:Policy-url}}|quy định]].",
        "actioncomplete": "Đã thực hiện xong",
        "actionfailed": "Tác động bị thất bại",
        "delete-edit-reasonlist": "Sửa lý do xóa",
        "delete-toobig": "Trang này có lịch sử sửa đổi lớn, đến hơn {{PLURAL:$1|lần|lần}} sửa đổi.\nViệc xóa các trang như vậy bị hạn chế để ngăn ngừa phá hoại do vô ý cho {{SITENAME}}.",
        "delete-warning-toobig": "Trang này có lịch sử sửa đổi lớn, đến hơn {{PLURAL:$1|lần|lần}} sửa đổi.\nViệc xóa các trang có thể làm tổn hại đến hoạt động của cơ sở dữ liệu {{SITENAME}};\nhãy cẩn trọng khi thực hiện.",
+       "deleteprotected": "Bạn không thể xóa trang này vì nó đã được khóa lại.",
        "deleting-backlinks-warning": "'''Cảnh báo:''' Có [[Special:WhatLinksHere/{{FULLPAGENAME}}|trang khác]] liên kết đến hoặc nhúng trang mà bạn sắp xóa.",
        "rollback": "Lùi tất cả sửa đổi",
        "rollback_short": "Lùi tất cả",
        "protect-othertime": "Thời hạn khác:",
        "protect-othertime-op": "thời hạn khác",
        "protect-existing-expiry": "Thời hạn hiện thời: $3, $2",
+       "protect-existing-expiry-infinity": "Thời hạn hiện thời: vô hạn",
        "protect-otherreason": "Lý do khác/bổ sung:",
        "protect-otherreason-op": "Lý do khác",
        "protect-dropdown": "*Các lý do thường dùng khi khóa\n** Bị phá hoại quá mức\n** Bị spam quá mức\n** Bút chiến thiếu tính xây dựng\n** Trang nhiều người xem",
        "autoblockid": "Cấm tự động #$1",
        "block": "Cấm người dùng",
        "unblock": "Bỏ cấm người dùng",
-       "blockip": "Cấm người dùng",
+       "blockip": "Cấm {{GENDER:$1}}người dùng",
        "blockip-legend": "Cấm người dùng",
        "blockiptext": "Dùng mẫu dưới để cấm một địa chỉ IP hoặc thành viên không được viết trang.\nĐiều này chỉ nên làm để tránh phá hoại, và phải theo [[{{MediaWiki:Policy-url}}|quy định]].\nĐiền vào lý do cụ thể ở dưới (ví dụ, chỉ ra trang nào bị phá hoại).",
        "ipaddressorusername": "Địa chỉ IP hay tên thành viên:",
        "unblocked": "[[User:$1|$1]] đã hết bị cấm",
        "unblocked-range": "$1 đã được bỏ cấm",
        "unblocked-id": "$1 đã hết bị cấm",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] đã được bỏ cấm.",
        "blocklist": "Người dùng bị cấm",
        "ipblocklist": "Người dùng bị cấm",
        "ipblocklist-legend": "Tìm một thành viên bị cấm",
        "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]].",
-       "import-interwiki-source": "Wiki/trang mã nguồn:",
+       "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",
        "import-interwiki-templates": "Gồm tất cả các bản mẫu",
        "import-interwiki-submit": "Nhập",
        "tooltip-pt-mycontris": "Danh sách các đóng góp của tôi",
        "tooltip-pt-login": "Đăng nhập sẽ có lợi hơn, tuy nhiên không bắt buộc.",
        "tooltip-pt-logout": "Đăng xuất",
+       "tooltip-pt-createaccount": "Khuyến khích bạn mở tài khoản và đăng nhập; tuy nhiên, không phải bắt buộc phải có tài khoản",
        "tooltip-ca-talk": "Thảo luận về trang này",
        "tooltip-ca-edit": "Bạn có thể sửa được trang này! (Xin vui lòng xem trước trước khi lưu.)",
        "tooltip-ca-addsection": "Bắt đầu một đề mục mới",
        "tooltip-feed-atom": "Nguồn cấp Atom của trang này",
        "tooltip-t-contributions": "Xem đóng góp của người này",
        "tooltip-t-emailuser": "Gửi thư cho người này",
+       "tooltip-t-info": "Thêm chi tiết về trang này",
        "tooltip-t-upload": "Tải hình ảnh hoặc tập tin lên",
        "tooltip-t-specialpages": "Danh sách các trang đặc biệt",
        "tooltip-t-print": "Bản để in ra của trang",
        "pageinfo-robot-policy": "Ghi chỉ mục bởi robot",
        "pageinfo-robot-index": "Cho phép",
        "pageinfo-robot-noindex": "Không cho phép",
-       "pageinfo-views": "Số lần xem",
        "pageinfo-watchers": "Số người theo dõi trang",
        "pageinfo-few-watchers": "Không tới $1 người theo dõi",
        "pageinfo-redirects-name": "Số trang đổi hướng đến trang này",
        "exif-urgency-low": "Thấp ($1)",
        "exif-urgency-high": "Cao ($1)",
        "exif-urgency-other": "Ưu tiên người dùng định nghĩa ($1)",
-       "watchlistall2": "tất cả",
        "namespacesall": "tất cả",
        "monthsall": "tất cả",
        "confirmemail": "Xác nhận thư điện tử",
        "unknown_extension_tag": "Không hiểu thẻ mở rộng “$1”",
        "duplicate-defaultsort": "Cảnh báo: Từ khóa xếp mặc định “$2” ghi đè từ khóa trước, “$1”.",
        "duplicate-displaytitle": "<strong>Cảnh báo:</strong> Tên hiển thị “$2” ghi đè tên hiển thị “$1” bên trên.",
+       "invalid-indicator-name": "<strong>Lỗi:</strong> Không thể để trống thuộc tính <code>name</code> của cái chỉ trạng thái trang.",
        "version": "Phiên bản",
        "version-extensions": "Các phần mở rộng được cài đặt",
        "version-skins": "Giao diện đã cài đặt",
        "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-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-move-move_redir": "$1 {{GENDER:$2}}đã đổi $3 thành $4 qua đổi hướng",
        "logentry-rights-rights": "$1 {{GENDER:$2}}đã đổi các nhóm bao gồm $3 từ $4 đến $5",
        "logentry-rights-rights-legacy": "{{GENDER:$2}}$1 đã đổi các nhóm bao gồm $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2}}đã được tự động phong cấp từ $4 đến $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2}}đã tải lên $3",
+       "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",
        "rightsnone": "(không có)",
+       "revdelete-summary": "tóm lược sửa đổ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:",
        "api-error-stashfailed": "Lỗi nội bộ: Máy chủ bị thất bại trong việc lưu giữ tập tin tạm.",
        "api-error-publishfailed": "Lỗi nội bộ: Máy chủ bị thất bại trong việc xuất bản tập tin tạm.",
        "api-error-stasherror": "Đã xuất hiện lỗi khi tải tập tin lên hàng đợi.",
+       "api-error-stashedfilenotfound": "Không tìm thấy tập tin khi thử tải nó lên từ hàng đợi.",
+       "api-error-stashpathinvalid": "Đường dẫn mong đợi đến tập tin đợi tải lên là không hợp lệ.",
+       "api-error-stashfilestorage": "Đã xuất hiện lỗi khi tải tập tin lên từ hàng đợi.",
+       "api-error-stashzerolength": "Máy chủ không thể lưu tập tin vào hàng đợi vì nó không có nội dung.",
+       "api-error-stashnotloggedin": "Bạn phải đăng nhập để lưu tập tin vào hàng đợi tải lên.",
+       "api-error-stashwrongowner": "Không thể truy cập một tập tin không phải của bạn trong hàng đợi tải lên.",
+       "api-error-stashnosuchfilekey": "Bạn không thể truy cập chìa khóa tập tin đợi tải lên vì chìa khóa này không tồn tại.",
        "api-error-timeout": "Máy chủ không đáp ứng trong thời gian dự kiến.",
        "api-error-unclassified": "Gặp lỗi không ngờ",
        "api-error-unknown-code": "Lỗi không rõ: “$1”",
        "action-pagelang": "thay đổi ngôn ngữ của trang",
        "log-name-pagelang": "Nhật trình thay đổi ngôn ngữ",
        "log-description-pagelang": "Nhật trình này ghi các thay đổi ngôn ngữ của các trang.",
-       "logentry-pagelang-pagelang": "$1 {{GENDER:$2}}đã đổi ngôn ngữ của trang $3 từ $4 thành $5."
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2}}đã đổi ngôn ngữ của trang $3 từ $4 thành $5.",
+       "default-skin-not-found": "Đã xảy ra lỗi! Giao diện mặc định của wiki này được định nghĩa trong <code dir=\"ltr\">$wgDefaultSkin</code> là <code>$1</code> nhưng không tồn tại.\n\nViệc cài đặt của bạn dường như bao gồm những giao diện sau đây. Xin xem [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration Hướng dẫn: Cấu hình giao diện] để biết thông tin về cách kích hoạt hoặc chọn một trong số chúng làm giao diện mặc định.\n\n$2\n\n; Nếu bạn vừa mới cài đặt MediaWiki:\n: Có lẽ bạn đã cài đặt nó từ git, hoặc trực tiếp từ mã nguồn bằng cách sử dụng một số phương thức khác. Điều này đã nằm trong tính toán của chúng tôi. Hãy thử cài đặt một số giao diện từ [https://www.mediawiki.org/wiki/Category:All_skins thư mục giao diện của mediawiki.org] bằng cách:\n:* Tải về [https://www.mediawiki.org/wiki/Special:MyLanguage/Download trình cài đặt dưới dạng gói tar], trong đó có kèm theo một số giao diện và phần mở rộng. Bạn có thể chép nó và dán vào thư mục <code>skins/</code>.\n:*Sao chép một trong những kho <code>mediawiki/skins/*</code> thông qua git vào trong thư mục <code dir=\"ltr\">skins/</code> của cài đặt MediaWiki của bạn.\n: Cách này sẽ không có ảnh hưởng đến kho git của bạn dù bạn là một nhà phát triển MediaWiki.\n\n; Nếu bạn vừa mới nâng cấp MediaWiki:\n: Phiên bản MediaWiki 1.24 trở lên không còn tự động kích hoạt giao diện đã cài đặt (xem [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Hướng dẫn: Tự động dò giao diện]). Bạn có thể dán những dòng lệnh vào <code>LocalSettings.php</code> để kích hoạt tất cả giao diện hiện đã được cài dặt:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Nếu bạn vừa mới chỉnh sửa <code>LocalSettings.php</code>:\n: Kiểm tra lại tên các giao diện xem có lỗi đánh máy nào không.",
+       "default-skin-not-found-no-skins": "Đã xảy ra lỗi! Giao diện mặc định của wiki này được định nghĩa trong <code dir=\"ltr\">$wgDefaultSkin</code> là <code>$1</code> nhưng không tồn tại.\n\nKhông có giao diện nào của bạn được kích hoạt.\n\n; Nếu bạn vừa mới cài đặt MediaWiki:\n: Bạn có thể cài đặt nó từ git, hoặc trực tiếp từ mã nguồn bằng cách sử dụng một số phương thức khác. Điều này nằm trong dự kiến. Hãy thử cài đặt một số giao diện từ [https://www.mediawiki.org/wiki/Category:All_skins thư mục giao diện của mediawiki.org], bằng cách:\n:* Tải về [https://www.mediawiki.org/wiki/Special:MyLanguage/Download trình cài đặt dưới dạng gói tar], trong đó có kèm theo một số giao diện và phần mở rộng. Bạn có thể chép nó và dán vào thư mục <code>skins/</code>.\n:*Sao chép một trong những kho <code>mediawiki/skins/*</code> thông qua git vào trong thư mục <code dir=\"ltr\">skins/</code> của cài đặt MediaWiki của bạn.\n: Cách này sẽ không có ảnh hưởng đến kho git của bạn dù bạn là một nhà phát triển MediaWiki. Xin xem [https://www.mediawiki.org/wiki/Manual:Skin_configuration Hướng dẫn: Cấu hình giao diện] để biết thông tin về cách kích hoạt hoặc chọn một trong số chúng làm giao diện mặc định.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (kích hoạt)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''vô hiệu hóa''')",
+       "mediastatistics": "Thống kê phương tiện",
+       "mediastatistics-summary": "Thống kê về các kiểu tập tin đã tải lên. Bảng này chỉ liệt kê phiên bản mới nhất của các tập tin. Các phiên bản cũ hoặc các phiên bản bị xóa được bỏ qua.",
+       "mediastatistics-nbytes": "$1 byte ($2; $3%)",
+       "mediastatistics-table-mimetype": "Kiểu MIME",
+       "mediastatistics-table-extensions": "Phần mở rộng có thể",
+       "mediastatistics-table-count": "Số tập tin",
+       "mediastatistics-table-totalbytes": "Kích thước kết hợp",
+       "mediastatistics-header-unknown": "Không rõ",
+       "mediastatistics-header-bitmap": "Hình ảnh bitmap",
+       "mediastatistics-header-drawing": "Bản vẽ (hình ảnh vectơ)",
+       "mediastatistics-header-audio": "Âm thanh",
+       "mediastatistics-header-video": "Video",
+       "mediastatistics-header-multimedia": "Phương tiện phong phú",
+       "mediastatistics-header-office": "Văn phòng",
+       "mediastatistics-header-text": "Văn bản",
+       "mediastatistics-header-executable": "Tập tin khả thi",
+       "mediastatistics-header-archive": "Định dạng nén",
+       "json-warn-trailing-comma": "$1 dấu phẩy lủng lẳng được xóa khỏi JSON",
+       "json-error-unknown": "JSON có vấn đề. Lỗi: $1",
+       "json-error-depth": "Đã vượt quá độ sâu ngăn xếp tối đa",
+       "json-error-state-mismatch": "JSON không hợp lệ hoặc sai dạng",
+       "json-error-ctrl-char": "Lỗi ký tự điều khiển, có lẽ đã mã hóa không chính xác",
+       "json-error-syntax": "Lỗi cú pháp",
+       "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"
 }
index 2a1afc3..ee19269 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "DasRakel",
-            "Tbc",
-            "לערי ריינהארט"
-        ]
-    },
-    "tog-underline": "Links ounderstreepn:",
-    "tog-hideminor": "Klêne veranderiengn verdukn van juste veranderd",
-    "tog-enotifrevealaddr": "Tôog min e-mailadres in e-mails",
-    "tog-shownumberswatching": "Tôog et aantal gebrukers dan et blad volgn",
-    "underline-always": "Olsan",
-    "underline-never": "Noois",
-    "underline-default": "Browser standoard",
-    "sunday": "zundag",
-    "monday": "moandag",
-    "tuesday": "disndag",
-    "wednesday": "woesdag",
-    "thursday": "dunderdag",
-    "friday": "vrydag",
-    "saturday": "zoaterdag",
-    "sun": "zu",
-    "mon": "moa",
-    "tue": "din",
-    "wed": "woe",
-    "thu": "dun",
-    "fri": "vry",
-    "sat": "zat",
-    "january": "januoari",
-    "february": "februoari",
-    "march": "moarte",
-    "april": "april",
-    "may_long": "mei",
-    "june": "juni",
-    "july": "juli",
-    "august": "ogustus",
-    "september": "september",
-    "october": "oktober",
-    "november": "november",
-    "december": "december",
-    "january-gen": "januari",
-    "february-gen": "februoari",
-    "march-gen": "moarte",
-    "april-gen": "april",
-    "may-gen": "mei",
-    "june-gen": "juni",
-    "july-gen": "juli",
-    "august-gen": "ogustus",
-    "september-gen": "september",
-    "october-gen": "oktober",
-    "november-gen": "november",
-    "december-gen": "december",
-    "jan": "jan",
-    "feb": "feb",
-    "mar": "mrt",
-    "apr": "apr",
-    "may": "mei",
-    "jun": "jun",
-    "jul": "jul",
-    "aug": "ogs",
-    "sep": "sep",
-    "oct": "okt",
-    "nov": "nov",
-    "dec": "dec",
-    "listingcontinuesabbrev": "vervolg",
-    "newwindow": "(opent in e nieuw veister)",
-    "moredotdotdot": "Mêer…",
-    "mypage": "Myn gebrukersblad",
-    "mytalk": "Myn discuusjeblad",
-    "and": "&#32;en",
-    "qbedit": "Bewerkn",
-    "vector-action-delete": "Wegdoen",
-    "vector-action-move": "Ernoemn",
-    "vector-view-create": "Anmoakn",
-    "vector-view-edit": "Bewerkn",
-    "vector-view-history": "Geschiedenisse bekykn",
-    "vector-view-view": "Leezn",
-    "vector-view-viewsource": "Brontekst bekykn",
-    "tagline": "Van {{SITENAME}}",
-    "help": "Ulpe",
-    "search": "Zoekn",
-    "searchbutton": "Zoekn",
-    "history_short": "Geschiedenisse",
-    "updatedmarker": "bygewerkt sinds min latste visite",
-    "printableversion": "Drukboare versie",
-    "permalink": "Bluuvende link",
-    "print": "Drukn",
-    "edit": "Bewerk'n",
-    "create": "Anmoakn",
-    "editthispage": "Da blad ier bewerkn",
-    "create-this-page": "Da blad ier anmoakn",
-    "delete": "Wegdoen",
-    "deletethispage": "Da blad ier verwydern",
-    "undelete_short": "{{PLURAL:$1|êen bewerkinge|$1 bewerkingn}} werekêern",
-    "protect": "Beveilign",
-    "protectthispage": "Da blad ier beveilign",
-    "unprotect": "beveiliginge wegdoen",
-    "unprotectthispage": "De beveiliginge van da blad ier ofleggn",
-    "newpage": "Nieuw blad",
-    "talkpagelinktext": "Discuusje",
-    "specialpage": "Specioal blad",
-    "talk": "Discuusje",
-    "toolbox": "Ulpmiddeln",
-    "aboutsite": "Over {{SITENAME}}",
-    "aboutpage": "Project:Info",
-    "disclaimers": "Aansprakelekeid",
-    "mainpage": "Voorblad",
-    "privacy": "Privacybeleid",
-    "viewsourceold": "Brontekst bekykn",
-    "viewsourcelink": "Brontekst bekykn",
-    "site-rss-feed": "$1 RSS-feed",
-    "site-atom-feed": "$1 Atom-feed",
-    "red-link-title": "$1 (Blad bestoat nie)",
-    "nstab-special": "Specioal blad",
-    "viewsource": "Brontekst bekykn",
-    "logout": "Ofmeldn",
-    "search-result-size": "$1 ({{PLURAL:$2|1 woord|$2 woordn}})",
-    "newuserlogpage": "Logboek nieuwe gebrukers",
-    "recentchanges": "Juste veranderd",
-    "upload": "Bestand toevoegn",
-    "uploadbtn": "Bestand toevoegn",
-    "uploadnologin": "Ge zyt nie angemeld",
-    "uploadlog": "logboek upgeloade bestandn",
-    "uploadlogpage": "Logboek upgeloade bestandn",
-    "uploadlogpagetext": "Hier stoa e lyste met de mêest recente upgeloade bestandn.",
-    "uploadedfiles": "Upgeloade bestandn",
-    "uploadedimage": "\"[[$1]]\" upgeload",
-    "unwatchedpages": "Pagina's die ip niemands volglyste stoan",
-    "newpages": "Nieuwe bloadn",
-    "newpages-username": "Gebrukersnoame:",
-    "mywatchlist": "Myn volglyste",
-    "watch": "Volgn",
-    "unwatch": "Nie volgn",
-    "unwatching": "Stoppn me volgn...",
-    "undelete": "Weggedoane bloadn bekykn",
-    "undeletepage": "Weggedoane bloadn erstelln of bekykn",
-    "undeletehistorynoadmin": "'t Artikel is weggedoan. De reden davôorn ku je zien in de soamnvattienge ieronder, tôpe me uutleg over wie dat 't blad bewerkt èt vôorn dat weggedoan es gewist. Den tekst van die weggedoane versies kan allêene door sysops gelezen wordn.",
-    "undeletebtn": "Erstelln",
-    "undeletedfiles": "{{PLURAL:$1|1 bestand|$1 bestandn}} ersteld",
-    "mycontris": "Myn bydroagn",
-    "uctop": "(latste veranderienge)",
-    "contribslink": "bydroagn",
-    "delete_and_move": "Wegdoen en ernoemn",
-    "tooltip-n-mainpage": "Noar 't voorblad goane",
-    "newimages": "Nieuwe ofbeeldiengn"
+       "@metadata": {
+               "authors": [
+                       "DasRakel",
+                       "Tbc",
+                       "לערי ריינהארט"
+               ]
+       },
+       "tog-underline": "Links ounderstreepn:",
+       "tog-hideminor": "Klêne veranderiengn verdukn van juste veranderd",
+       "tog-enotifrevealaddr": "Tôog min e-mailadres in e-mails",
+       "tog-shownumberswatching": "Tôog et aantal gebrukers dan et blad volgn",
+       "underline-always": "Olsan",
+       "underline-never": "Noois",
+       "underline-default": "Browser standoard",
+       "sunday": "zundag",
+       "monday": "moandag",
+       "tuesday": "disndag",
+       "wednesday": "woesdag",
+       "thursday": "dunderdag",
+       "friday": "vrydag",
+       "saturday": "zoaterdag",
+       "sun": "zu",
+       "mon": "moa",
+       "tue": "din",
+       "wed": "woe",
+       "thu": "dun",
+       "fri": "vry",
+       "sat": "zat",
+       "january": "januoari",
+       "february": "februoari",
+       "march": "moarte",
+       "april": "april",
+       "may_long": "mei",
+       "june": "juni",
+       "july": "juli",
+       "august": "ogustus",
+       "september": "september",
+       "october": "oktober",
+       "november": "november",
+       "december": "december",
+       "january-gen": "januari",
+       "february-gen": "februoari",
+       "march-gen": "moarte",
+       "april-gen": "april",
+       "may-gen": "mei",
+       "june-gen": "juni",
+       "july-gen": "juli",
+       "august-gen": "ogustus",
+       "september-gen": "september",
+       "october-gen": "oktober",
+       "november-gen": "november",
+       "december-gen": "december",
+       "jan": "jan",
+       "feb": "feb",
+       "mar": "mrt",
+       "apr": "apr",
+       "may": "mei",
+       "jun": "jun",
+       "jul": "jul",
+       "aug": "ogs",
+       "sep": "sep",
+       "oct": "okt",
+       "nov": "nov",
+       "dec": "dec",
+       "listingcontinuesabbrev": "vervolg",
+       "newwindow": "(opent in e nieuw veister)",
+       "moredotdotdot": "Mêer…",
+       "mypage": "Myn gebrukersblad",
+       "mytalk": "Myn discuusjeblad",
+       "and": "&#32;en",
+       "qbedit": "Bewerkn",
+       "tagline": "Van {{SITENAME}}",
+       "help": "Ulpe",
+       "search": "Zoekn",
+       "searchbutton": "Zoekn",
+       "history_short": "Geschiedenisse",
+       "updatedmarker": "bygewerkt sinds min latste visite",
+       "printableversion": "Drukboare versie",
+       "permalink": "Bluuvende link",
+       "print": "Drukn",
+       "edit": "Bewerk'n",
+       "create": "Anmoakn",
+       "editthispage": "Da blad ier bewerkn",
+       "create-this-page": "Da blad ier anmoakn",
+       "delete": "Wegdoen",
+       "deletethispage": "Da blad ier verwydern",
+       "undelete_short": "{{PLURAL:$1|êen bewerkinge|$1 bewerkingn}} werekêern",
+       "protect": "Beveilign",
+       "protectthispage": "Da blad ier beveilign",
+       "unprotect": "beveiliginge wegdoen",
+       "unprotectthispage": "De beveiliginge van da blad ier ofleggn",
+       "newpage": "Nieuw blad",
+       "talkpagelinktext": "Discuusje",
+       "specialpage": "Specioal blad",
+       "talk": "Discuusje",
+       "toolbox": "Ulpmiddeln",
+       "aboutsite": "Over {{SITENAME}}",
+       "aboutpage": "Project:Info",
+       "disclaimers": "Aansprakelekeid",
+       "mainpage": "Voorblad",
+       "privacy": "Privacybeleid",
+       "viewsourceold": "Brontekst bekykn",
+       "viewsourcelink": "Brontekst bekykn",
+       "site-rss-feed": "$1 RSS-feed",
+       "site-atom-feed": "$1 Atom-feed",
+       "red-link-title": "$1 (Blad bestoat nie)",
+       "nstab-special": "Specioal blad",
+       "viewsource": "Brontekst bekykn",
+       "logout": "Ofmeldn",
+       "search-result-size": "$1 ({{PLURAL:$2|1 woord|$2 woordn}})",
+       "newuserlogpage": "Logboek nieuwe gebrukers",
+       "recentchanges": "Juste veranderd",
+       "upload": "Bestand toevoegn",
+       "uploadbtn": "Bestand toevoegn",
+       "uploadnologin": "Ge zyt nie angemeld",
+       "uploadlogpage": "Logboek upgeloade bestandn",
+       "uploadlogpagetext": "Hier stoa e lyste met de mêest recente upgeloade bestandn.",
+       "unwatchedpages": "Pagina's die ip niemands volglyste stoan",
+       "newpages": "Nieuwe bloadn",
+       "newpages-username": "Gebrukersnoame:",
+       "mywatchlist": "Myn volglyste",
+       "watch": "Volgn",
+       "unwatch": "Nie volgn",
+       "unwatching": "Stoppn me volgn...",
+       "undelete": "Weggedoane bloadn bekykn",
+       "undeletepage": "Weggedoane bloadn erstelln of bekykn",
+       "undeletehistorynoadmin": "'t Artikel is weggedoan. De reden davôorn ku je zien in de soamnvattienge ieronder, tôpe me uutleg over wie dat 't blad bewerkt èt vôorn dat weggedoan es gewist. Den tekst van die weggedoane versies kan allêene door sysops gelezen wordn.",
+       "undeletebtn": "Erstelln",
+       "undeletedfiles": "{{PLURAL:$1|1 bestand|$1 bestandn}} ersteld",
+       "mycontris": "Myn bydroagn",
+       "uctop": "(latste veranderienge)",
+       "contribslink": "bydroagn",
+       "delete_and_move": "Wegdoen en ernoemn",
+       "tooltip-n-mainpage": "Noar 't voorblad goane",
+       "newimages": "Nieuwe ofbeeldiengn"
 }
index 8eefeb6..4c3f099 100644 (file)
        "searchrelated": "fârwand",
        "searchall": "ale",
        "showingresults": "Hiâr {{PLURAL:$1|is '''1'''|sin '''$1'''}} Ärgääbnis , ôôgfangn baj numâr '''$2.'''",
-       "showingresultsheader": "{{PLURAL:$5|Ärgääbnis '''$1''' don '''$3'''|Ärgääbnis '''$1–$2''' fon '''$3'''}} fir '''$4'''",
        "search-nonefound": "Dsu dajna suuchfrôôchn is nigs gfundn wôrn.",
        "powersearch-legend": "Suuche mid mäa oogaam",
        "powersearch-ns": "In dena Nôômâsrajm suchng:",
        "pager-older-n": "{{PLURAL:$1|foorichâr|fooriche $1}}",
        "booksources": "ISBN-Suuche",
        "booksources-search-legend": "Gugn, woo mr biâchâr häärgrichd",
-       "booksources-go": "Loos-suchng",
        "log": "Logbicher",
        "allpages": "Ale sajdn",
        "prevpage": "Fooriche sajdn ($1)",
        "watchthispage": "Dii sajdn undâr beoobachdung nämâ",
        "unwatch": "Nimmä beoobachdn",
        "watchlist-details": "Duu häldsch {{PLURAL:$1|1 sajdn|$1 sajdn}} undâr beoobachdung.",
-       "wlshowlast": "Dsajch dii ändrunga fo di ledsdn $1 schdundn, $2 dooch odär $3",
+       "wlshowlast": "Dsajch dii ändrunga fo di ledsdn $1 schdundn, $2 dooch odär",
        "watchlist-options": "Was un wii alles af Dajnâr beobachdungslisdn dsajchd wärn sol",
        "watching": "Ghumd undâr beoobachdung ...",
        "unwatching": "Beobachdn ajschränggn",
        "metadata-fields": "Folgnde Felder vo däi EXIF-Medadaden, däi wou in den MediaWigi-Sysdemdexd ogeem sin, werrn af Bildbeschreibungsseidn miid eiglabbder Medadadndabelln ozeichd. Weidere werrn schdandaddmäßich net ozeichd.\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": "brajdn",
        "exif-imagelength": "Heen",
-       "watchlistall2": "ale",
        "namespacesall": "ale",
        "monthsall": "alle",
        "watchlisttools-view": "Ändrunga in där beoobachdungslisdn",
index 84c90c1..7b70bb8 100644 (file)
        "passwordreset-domain": "Domen:",
        "passwordreset-email": "Ladet leäktronik:",
        "changeemail": "Votükön ladeti leäktronik",
-       "changeemail-header": "Votükön ladeti leäktronik kala",
        "changeemail-oldemail": "Ladet leäktronik anuik:",
        "changeemail-newemail": "Ladet leäktronik nulik:",
        "changeemail-none": "(nonik)",
        "changeemail-password": "Letavöd olik su {{SITENAME}}:",
        "changeemail-submit": "Votükön ladeti leäktronik",
-       "changeemail-cancel": "Stöpädön",
        "bold_sample": "Vödem bigik",
        "bold_tip": "Vödem bigik",
        "italic_sample": "Korsiv",
        "mergehistory-same-destination": "Fonäta- e zeilapad no dalons binön pad ot.",
        "mergehistory-reason": "Kod:",
        "mergelog": "Jenotalised padibalamas",
-       "pagemerge-logentry": "Pad: [[$1]] pebalon ad [[$2]] (fomams jüesa $3)",
        "revertmerge": "Säbalön",
        "mergelogpagetext": "Is palisedon balamis brefabüikün jenotema pada bal ini votik.",
        "history-title": "Revidajenotem pada: \"$1\"",
        "searchrelated": "tefik",
        "searchall": "valik",
        "showingresults": "Pajonons dono jü {{PLURAL:$1|sukasek '''1'''|sukaseks '''$1'''}}, primölo me nüm #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Sek: '''$1''' se '''$3'''|Seks: '''$1 - $2''' se '''$3'''}} pro '''$4'''",
        "search-nonefound": "Sukaseks nonik dabinons.",
        "powersearch-legend": "Suk komplitikum",
        "powersearch-ns": "Sukön in nemaspads:",
        "statistics": "Statits",
        "statistics-header-pages": "Statits pada",
        "statistics-header-edits": "Redakamastatits",
-       "statistics-header-views": "Logamastatits",
        "statistics-header-users": "Gebanastatits",
        "statistics-header-hooks": "Statits votik",
        "statistics-articles": "Pads ninädilabik",
        "statistics-files": "Ragivs pelöpüköl",
        "statistics-edits": "Padiredakams sisä {{SITENAME}} päjafon",
        "statistics-edits-average": "Num zänedik redakamas a pad",
-       "statistics-views-total": "Logams (valod)",
-       "statistics-views-peredit": "Logams a redakam",
        "statistics-users": "[[Special:ListUsers|Gebans]] peregistaröl",
        "statistics-users-active": "Gebans jäfedik",
        "statistics-users-active-desc": "Gebans, kels edunons bosi ün {{PLURAL:$1|del lätik|dels lätik $1}}",
-       "statistics-mostpopular": "Pads suvüno palogöls:",
        "pageswithprop-submit": "Golön",
        "doubleredirects": "Lüodüköms telik",
        "doubleredirectstext": "Kedet alik labon yümis lü lüodüköm balid e telid, ed i kedeti balid vödema lüodüköma telid, kel nomiko ninädon padi, ko kel lüodüköm balid söton payümön.",
        "uncategorizedtemplates": "Samafomots nen klad",
        "unusedcategories": "Klads no pageböls",
        "unusedimages": "Ragivs no pageböls",
-       "popularpages": "Pads suvüno pelogöls",
        "wantedcategories": "Klads mekabik",
        "wantedpages": "Pads mekabik",
        "wantedfiles": "Ragivs mekabik",
        "suppress": "Lovelogam",
        "booksources": "Bukafons",
        "booksources-search-legend": "Sukön bukafonis:",
-       "booksources-go": "Getolöd",
        "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:",
        "wlheader-enotif": "Nunam medü pot leäktronik pemögükon.",
        "wlheader-showupdated": "Pads pos visit lätik ola pevotüköls papenons '''me tonats bigik'''",
        "wlnote": "Is palisedons votükam{{PLURAL:$1| lätik|s lätik '''$1'''}} dü düp{{PLURAL:$2| lätik|s lätik '''$2'''}}.",
-       "wlshowlast": "Jonolöd: düpis lätik $1, delis lätik $2, $3",
+       "wlshowlast": "Jonolöd: düpis lätik $1, delis lätik $2,",
        "watchlist-options": "Paramets galädaliseda",
        "watching": "Papladon ini galädalised...",
        "unwatching": "Pamoükon se galädalised...",
        "import": "Nüveigön padis",
        "importinterwiki": "Nüveigam vü vüks",
        "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-source": "Fonätavük/pad:",
        "import-interwiki-history": "Kopiedön fomamis valik jenotema pada at",
        "import-interwiki-templates": "Keninükön samafomotis valik",
        "import-interwiki-submit": "Nüveigön",
        "exif-dc-publisher": "Püban",
        "exif-iimcategory-spo": "Spots",
        "exif-iimcategory-wea": "Stom",
-       "watchlistall2": "valikis",
        "namespacesall": "valik",
        "monthsall": "valik",
        "confirmemail": "Fümedolös ladeti leäktronik",
        "revdelete-restricted": "miedükams pelonöfükons pro guvans",
        "revdelete-unrestricted": "miedükams pro guvans pemoükons",
        "rightsnone": "(nonik)",
+       "revdelete-summary": "plän redakama",
        "feedback-subject": "Yegäd:",
        "searchsuggest-search": "Suk",
        "searchsuggest-containing": "ninädöl...",
index 28d38e7..1fcb1d9 100644 (file)
        "resetpass-submit-cancel": "Otmeńoit",
        "passwordreset-username": "Cäüttijänimi:",
        "changeemail-newemail": "Vassõn e-mail:",
-       "changeemail-cancel": "Otmeńoit",
        "bold_sample": "Pimmiä teksti",
        "bold_tip": "Pimmiä teksti",
        "italic_sample": "Kursiivoi teksti",
        "search-interwiki-more": "(lisä)",
        "searchrelated": "sittu",
        "searchall": "kõik",
-       "showingresultsheader": "{{PLURAL:$5|Tuloz '''$1''' '''$3'''-ss|Tulohsõd '''$1-$2''' '''$3'''-ss}} «$4» vart",
        "search-nonefound": "Cüsümühse mukaizõssi eb õõ mitäid löütettü.",
        "powersearch-legend": "Etenennü ettsü",
        "powersearch-ns": "Etsi nimiruumõssa:",
        "pager-older-n": "{{PLURAL:$1|vanöpi 1|vanõpad $1}}",
        "booksources": "Сirjalähed",
        "booksources-search-legend": "Etsi сirjalähteit",
-       "booksources-go": "Mee",
        "log": "Logid",
        "allpages": "Kõik artikkelid",
        "prevpage": "Entin сülсi ($1)",
        "watchthispage": "Katso sitä cülciä",
        "unwatch": "Lõpõt kattsõõmin",
        "watchlist-details": "Kattsõspiizgall on {{PLURAL:$1|$1 cülci|$1 cülciä}} (ilma juttucülciit).",
-       "wlshowlast": "Näüt viimeized $1 tunnia vai $2 päivää $3",
+       "wlshowlast": "Näüt viimeized $1 tunnia vai $2 päivää",
        "watchlist-options": "Kattsõspiizgaa valimizõd",
        "watching": "Kattsõõn…",
        "unwatching": "Kattsõõmizõõ lõpõttõmin…",
        "exif-iimcategory-hth": "Terveüz",
        "exif-iimcategory-pol": "Politiikka",
        "exif-iimcategory-wea": "Ilma",
-       "watchlistall2": "koko istori",
        "namespacesall": "kõik",
        "monthsall": "kõik",
        "confirm_purge_button": "OK",
index 9461efe..72ea504 100644 (file)
        "searchrelated": "samasugunõ",
        "searchall": "kõik",
        "showingresults": "{{PLURAL:$1|'''Üts''' tulõmus|'''$1''' tulõmust}} (tulõmusõst '''$2''' pääle).",
-       "showingresultsheader": "{{PLURAL:$5|'''$1''' '''$3'''-st vastussõst|Vastusõq '''$1–$2''' '''$3'''-st}} perräküsümisele '''$4'''",
        "search-nonefound": "Perräküsümisele löüdä-äs vastust.",
        "powersearch-legend": "Laendõt otsminõ",
        "powersearch-ns": "Otsminõ nimeruumõst:",
        "statistics": "Statistiga",
        "statistics-header-pages": "Lehekülgi statistiga",
        "statistics-header-edits": "Toimõndamisõ statistiga",
-       "statistics-header-views": "Kaemisõ statistiga",
        "statistics-header-users": "Pruukjidõ statistiga",
        "statistics-articles": "Sisulehekülgi",
        "statistics-pages": "Lehekülgi",
        "statistics-files": "Üleslaadituid teedüstüid",
        "statistics-edits": "Toimõnduisi {{SITENAME}} luumisõst pääle",
        "statistics-edits-average": "Keskmädselt toimõnduisi leheküle kotsilõ",
-       "statistics-views-total": "Lehti kaemiisi kokko",
        "statistics-users": "Kirjäpandnuid [[Special:ListUsers|pruukjit]]",
        "statistics-users-active": "Tegüsit pruukjit",
        "statistics-users-active-desc": "Pruukjaq, kiä ommaq tan midägi toimõndanuq {{PLURAL:$1|viimädse päävä|viimädse $1 päävä}} seen.",
-       "statistics-mostpopular": "Kõgõ kaetumbaq leheq",
        "doubleredirects": "Katõkõrdsõq ümbresaatmisõq",
        "doubleredirectstext": "Egä ria pääl om ärq tuud edimäne ja tõõnõ ümbresaatmisleht ja niisama tõõsõ ümbresaatmislehe link, miä näütäs hariligult kotusõ pääle, kohe edimäne ümbersaatmisleht pidänüq õkva näütämä.",
        "brokenredirects": "Vigadsõq ümbresaatmisõq",
        "uncategorizedtemplates": "Katõgoorialdaq näüdüseq",
        "unusedcategories": "Pruukmalda katõgooriaq",
        "unusedimages": "Pruukmaldaq pildiq",
-       "popularpages": "Pall'okäütüq leheküleq",
        "wantedcategories": "Kõgõ tahetumbaq katõgooriaq",
        "wantedpages": "Kõgõ tahetumbaq artikliq",
        "mostlinked": "Leheq, kohe om kõgõ rohkõmb linke",
        "pager-older-n": "{{PLURAL:$1|vanõmb 1|vanõmbaq $1}}",
        "booksources": "Raamaduq",
        "booksources-search-legend": "Otsiq raamatut",
-       "booksources-go": "Otsiq",
        "booksources-text": "Tan om linke lehekülile, kon müvväs raamatit vai andas raamatidõ kotsilõ teedüst.",
        "specialloguserlabel": "Pruukja:",
        "speciallogtitlelabel": "Päälkiri:",
        "wlheader-enotif": "E-postiga teedäqandmisõq ommaq käügin.",
        "wlheader-showupdated": "Leheq, midä om muudõt päält su viimäst käümist, ommaq '''paksun kirän'''",
        "wlnote": "Tan om '''$1''' {{PLURAL:$1|muutminõ|muutmist}} viimädse '''$2''' tunni ao seen.",
-       "wlshowlast": "Näütäq viimädseq $1 tunni $2 päivä $3",
+       "wlshowlast": "Näütäq viimädseq $1 tunni $2 päivä",
        "watchlist-options": "Perräkaemisnimekirä säädmine",
        "watching": "Pandas perräkaemisnimekirjä...",
        "unwatching": "Võetas perräkaemisõ alt maaha...",
        "exif-gpsspeed-n": "sõlmõ",
        "exif-gpsdirection-t": "Peris tsiht",
        "exif-gpsdirection-m": "Magnõttsiht",
-       "watchlistall2": ", terveq aolugu",
        "namespacesall": "kõik",
        "monthsall": "kõik",
        "confirmemail": "Kinnüdäq e-postiaadrõssit",
index 49957ca..d7cd777 100644 (file)
        "createaccount": "Ahiver on novea conte",
        "gotaccount": "Vos avoz ddja on conte so ç' wiki ci? '''$1'''.",
        "gotaccountlink": "Elodjîz vs",
-       "userlogin-resetlink": "Avoz rovyî vos detays d' elodjaedje?",
+       "userlogin-resetlink": "Avoz rovyî les pondants et djondants po s' elodjî?",
        "createaccountmail": "pa emile",
        "createaccountreason": "Råjhon:",
+       "createacct-another-submit": "Ahiver èn ôte conte",
        "badretype": "Vos avoz dné deus screts diferins.",
        "userexists": "Li no d' uzeu ki vs avoz tchoezi est ddja eployî.\nTchoezixhoz è èn ôte s' i vs plait.",
        "loginerror": "Aroke d' elodjaedje",
        "accountcreated": "Conte ahivé",
        "accountcreatedtext": "Li conte d' uzeu «$1» a stî ahivé.",
        "loginlanguagelabel": "Lingaedje: $1",
+       "pt-login": "S' elodjî",
+       "pt-login-button": "S' elodjî",
+       "pt-createaccount": "Ahiver on novea conte",
+       "pt-userlogout": "\nSi dislodjî",
        "changepassword": "Candjî l' sicret",
        "resetpass_announce": "Vos vs avoz elodjî avou on scret timporaire ki vos a stî emilé.\nPor vos fini l' elodjaedje, vos dvoz defini on novea scret:",
        "resetpass_header": "Candjî l' sicret do conte",
        "passwordreset-email": "Adresse emile:",
        "passwordreset-emailtitle": "Detays do contre so {{SITENAME}}",
        "changeemail": "Candjî l' emile",
-       "changeemail-header": "Candjî l' adresse emile do conte",
        "changeemail-text": "Rimplixhoz l' formulrece po candjî voste adresse emile. Vos dvroz dner vosse sicret po-z acertiner l' candjmint.",
        "changeemail-no-info": "Vos dvoz esse elodjî po pleur aveur accès a cisse pådje ci.",
        "changeemail-oldemail": "Adresse emile pol moumint:",
        "changeemail-newemail": "Novele adresse emile:",
        "changeemail-none": "(nole)",
        "changeemail-submit": "Candjî l' emile",
-       "changeemail-cancel": "Rinoncî",
        "bold_sample": "Cråssès letes",
        "bold_tip": "Tecse e cråssès letes",
        "italic_sample": "Clintcheyès letes",
        "search-interwiki-more": "(dipus)",
        "searchall": "totafwait",
        "showingresults": "Chal pa dzo {{PLURAL:$1|'''1''' rizultat|'''$1''' rizultats}} a pårti do limero '''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Rizultat '''$1'''|Rizultats '''$1 - $2'''}} foû di '''$3'' po '''$4'''",
        "search-nonefound": "N' a rén di çou ki vs cweroz après",
        "powersearch-legend": "Pus spepieus rcweraedjes",
        "powersearch-ns": "Cweri ezès espåces di lomaedje:",
        "statistics-header-users": "Sitatistikes des uzeus",
        "statistics-articles": "Pådjes di contnou",
        "statistics-pages-desc": "Totes les pådjes do \"Wiki\", minme les copinaedjes, les rdjiblaedjes, evnd.",
-       "statistics-mostpopular": "Pådjes les pus veyowes",
        "doubleredirects": "Dobes redjiblaedjes",
        "doubleredirectstext": "Cisse pådje ci mostere les dobes redjiblaedjes (pådjes ki redjiblèt viè ene ôte pådje di redjiblaedje).\nTchaeke roye a-st on loyén viè l' prumî eyet l' deujhinme redjiblaedje, avou on mostraedje del såme do deujhinme redjiblaedje, çou ki å pus sovint dene li «vraiy» årtike såme, ki l' prumî redjiblaedje divreut evoyî viè lu.\nLis intrêyes <del>bårêyes</del> otn ddja stî coridjeyes.",
        "double-redirect-fixed-move": "[[$1]] a stî displaecî.\nAsteure c' est on redjiblaedje viè [[$2]].",
        "uncategorizedtemplates": "Modele nén categorijhî",
        "unusedcategories": "Categoreyes nén eployeyes",
        "unusedimages": "Imådjes nén eployeyes",
-       "popularpages": "Pådjes les pus léjhowes",
        "wantedcategories": "Categoreyes les pus rcwerowes",
        "wantedpages": "Pådjes les pus rcwerowes",
        "wantedfiles": "Fitchîs les pus rcwerous",
        "pager-older-n": "{{PLURAL:$1|$1 pus vî|$1 pus vîs}}",
        "booksources": "Sourdants po les lives",
        "booksources-search-legend": "Cweri des sourdants po des lives",
-       "booksources-go": "I va",
        "specialloguserlabel": "Fwait pa:",
        "speciallogtitlelabel": "Såme (tite ou uzeu):",
        "log": "Djournås",
        "wlheader-enotif": "Li notifiaedje pa emile est en alaedje.",
        "wlheader-showupdated": "Les pådjes k' ont candjî dispoy vosse dierinne vizite sont metowes e '''cråssès letes'''",
        "wlnote": "Chal pa dzo {{PLURAL:$1|li dierin candjmint|les '''$1''' dierins candjmints}} {{PLURAL:$2|del dierinne eure|des '''$2''' dierinnès eures}}, disk' å $3 a $4.",
-       "wlshowlast": "Mostrer les dierin(nè)s $1 eures, $2 djoûs ou $3",
+       "wlshowlast": "Mostrer les dierin(nè)s $1 eures, $2 djoûs ou",
        "watchlist-options": "Tchuzes del djivêye des shuvous",
        "enotif_reset": "Mårker totes les pådjes come vizitêyes",
        "enotif_lastvisited": "Loukîz $1 po tos les candjmints dispoy vosse dierinne vizite.",
        "creditspage": "Pådje di credits",
        "nocredits": "I n' a pont d' infôrmåcion di credits po cisse pådje ci.",
        "pageinfo-title": "Infôrmåcion po «$1»",
-       "pageinfo-views": "Nombe di lijhaedjes",
        "pageinfo-watchers": "Nombe di shuveus",
        "pageinfo-edits": "Nombe di candjmints",
        "pageinfo-authors": "Nombe d' oteurs diferins",
-       "markaspatrolleddiff": "Marké come patrouyî",
+       "markaspatrolleddiff": "Marké come ricoridjî",
        "markaspatrolledtext": "Marker cisse pådje ci come dedja patrouyeye",
        "patrol-log-page": "Djournå des patrouyaedjes",
        "patrol-log-header": "Çouchal c' est on djournå des modêyes k' ont stî patrouyeyes.",
        "exif-gpsspeed-k": "km/h",
        "exif-gpsspeed-m": "miles/h",
        "exif-gpsspeed-n": "nuks",
-       "watchlistall2": "totafwait",
        "namespacesall": "tos",
        "monthsall": "tos",
        "confirmemail": "Acertinaedje di l' adresse emile",
index 7d6b931..95e036b 100644 (file)
        "passwordreset-emailsent-capture": "Ginpadangat an password reset email, nga ginpakita ha ubos.",
        "passwordreset-emailerror-capture": "Ginhimo an password reset email, kun diin nakikita ha ubos, pero pakyas an pagpadara ha  {{GENDER:$2|gumaramit}}: $1",
        "changeemail": "Igliwan an e-mail address",
-       "changeemail-header": "Igliwan an e-mail address akawnt",
        "changeemail-text": "Igkompleto ini nga porma para makapagliwan han imo e-mail address.  Kinahanglanon mo igbutang an imo tigaman-pagsulod para makompirma ini nga pagbag-o.",
        "changeemail-no-info": "Kinahanglanon mo mag-log-in para ka direkta makasakob hini nga pakli.",
        "changeemail-oldemail": "Yana nga e-mail address:",
        "changeemail-none": "(waray)",
        "changeemail-password": "An imo {{SITENAME}} password:",
        "changeemail-submit": "Igbalyo an e-mail",
-       "changeemail-cancel": "Pasagdi",
        "changeemail-throttled": "Nakadamo kada pag-log-in. Alayon paghulat hin $1 ugsa ka umutro.",
        "resettokens": "Igrest an mga token",
        "resettokens-text": "Puydi nimo mareset an mga token para makahatag hin pipira nga pribado nga datos nga may pakahisumpay ha imo akawnt dinhi.\nKinahanglan mo ini buhaton kun aksidenti nim nasaro hira ha iba nga tawo o an imo akawnt in nakompromiso.",
        "search-relatedarticle": "kasumapy",
        "searchrelated": "kadugtong",
        "searchall": "ngatanan",
-       "showingresultsheader": "{{PLURAL:$5|Resulta '''$1''' han '''$3'''|Mga resulta '''$1 - $2''' han '''$3'''}} para ha '''$4'''",
        "search-nonefound": "Waray resulta an nakakabaton han pakiana.",
        "powersearch-legend": "Abansado nga pagbiling",
        "powersearch-ns": "Pamiling ha mga ngaran-lat'ang:",
        "unusedtemplates": "Waray kagamiti nga mga batakan",
        "unusedtemplateswlh": "iba nga mga sumpay",
        "randompage": "Bisan ano nga pakli",
-       "randomincategory-selectcategory-submit": "Pakadto",
        "randomredirect": "Bisan ano la nga redirect",
        "randomredirect-nopages": "Waray mga redirecta ha ngaran-lat'ang nga \"$1\".",
        "statistics": "Mga estadistika",
        "statistics-header-pages": "Mga estadistika han pakli",
        "statistics-header-edits": "Mga estadistika han pagliwat",
-       "statistics-header-views": "Mga estadistika han nakita",
        "statistics-header-users": "Mga estadistika han gumaramit",
        "statistics-header-hooks": "Lain nga mga estadistika",
        "statistics-articles": "Unod nga mga pakli",
        "statistics-files": "Mga paypay nga iginkarga pasaka",
        "statistics-edits": "Mga pagliwat hit pakli tikang gintukod hini nga {{SITENAME}}",
        "statistics-edits-average": "Average nga mga pagliwat kada pakli",
-       "statistics-views-total": "Ngatanan nga mga panginano",
-       "statistics-views-peredit": "Mga panginano kada pagliwat",
        "statistics-users": "Mga [[Special:ListUsers|gumaramit]] nga nakarehistro",
        "statistics-users-active": "Mga gumaramit nga nanggigios",
        "statistics-users-active-desc": "Mga gumaramit nga may-ada iginbuhat ha urhi nga {{PLURAL:$1|ka adlaw|$1 ka mga adlaw}}",
-       "statistics-mostpopular": "Gidamoi nga ginpanginanohan nga mga pakli",
        "pageswithprop-submit": "Kadto-a",
        "doubleredirects": "Mga doble nga redirekta",
        "double-redirect-fixer": "Mangangayad hin redirekta",
        "uncategorizedtemplates": "Waray kaarangay nga mga batakan",
        "unusedcategories": "Waray kagamit nga mga kaarangay",
        "unusedimages": "Waray kagamit nga mga fayl",
-       "popularpages": "Mga sikat nga pakli",
        "wantedcategories": "Mga nagkikinahanglan hin kaarangay",
        "wantedpages": "Mga ginkikinahanglan nga pakli",
        "wantedfiles": "Mga nagkikinahanglan hin file",
        "pager-older-n": "{{PLURAL:$1|durudaan 1|durudaan $1}}",
        "booksources": "Mga libro nga tinikangan",
        "booksources-search-legend": "Pamilnga an mga libro nga gintikangan",
-       "booksources-go": "Kadto-a",
        "specialloguserlabel": "Magburuhat:",
        "speciallogtitlelabel": "iiguon (titulo o gumarami):",
        "log": "Mga talaan",
        "notanarticle": "Diri uska unod nga pakli",
        "notvisiblerev": "An urhi nga pagliwat han iba nga gumaramit in ginpara",
        "watchlist-details": "{{PLURAL:$1|$1 nga pakli|$1 nga mga pakli}} nga aada ha imo talaan nga binabantayan, diri bulag nga paglakip han mga hiruhimangraw-nga-pakli.",
-       "wlshowlast": "Igpakita an katapusan nga $1 nga mga oras $2 nga mga adlaw $3",
+       "wlshowlast": "Igpakita an katapusan nga $1 nga mga oras $2 nga mga adlaw",
        "watchlist-options": "Mga pirilian han talaan han binabantayan",
        "watching": "Ginbabantay...",
        "unwatching": "Diri na ginbabantay...",
        "thumbnail_error": "Sayo han paghihimo hin thumbnail: $1",
        "thumbnail_image-type": "An klase han hulagway in diri suportado",
        "import": "Naangbit hit mga pakli",
-       "import-interwiki-source": "Tinikangan nga wiki/pakli:",
        "import-interwiki-templates": "Lakip an ngatanan nga mga batakan",
        "import-interwiki-submit": "Naangbit",
        "import-interwiki-namespace": "Kakadtoan nga ngaran-lat'ang:",
        "pageinfo-robot-policy": "Pag-index hin mga robot",
        "pageinfo-robot-index": "Gintutugot",
        "pageinfo-robot-noindex": "Dírì gintutugot",
-       "pageinfo-views": "Ihap han mga naglantaw",
        "pageinfo-watchers": "Ihap han nangingita hin pakli",
        "pageinfo-redirects-name": "Ihap hin mga redirek ngani nga pakli",
        "pageinfo-subpages-name": "Mga bahinpakli hin nga pakli",
        "exif-urgency-normal": "Normal ($1)",
        "exif-urgency-low": "Hamubo ($1)",
        "exif-urgency-high": "Hataas ($1)",
-       "watchlistall2": "ngatanan",
        "namespacesall": "ngatanan",
        "monthsall": "ngatanan",
        "confirmemail": "Igkompirma an e-mail address",
index e3a99fe..48db359 100644 (file)
        "mergehistory-same-destination": "Gongikuwaay ak jëmuwaayu xët yi waruñoo bokk",
        "mergehistory-reason": "Ngirte :",
        "mergelog": "Yéenekaayu boole yi",
-       "pagemerge-logentry": "Booleb [[$1]] ak [[$2]] (sumb ba $3)",
        "revertmerge": "Neenal boole yi",
        "mergelogpagetext": "Lii ci suuf ab lim la ci boole yu mujj yu jaar-jaaru aw xët ak weneen .",
        "history-title": "Jaar-jaaru sumbi « $1 »",
        "searchrelated": "yeneeni ngérte",
        "searchall": "yépp",
        "showingresults": "Woneg <b>$1</b> {{PLURAL:$1|ngérte|ciy ngérte}} doore ko ci #<b>$2</b>.",
-       "showingresultsheader": "{{PLURAL:$5|Ngérte '''$1''' bu '''$3'''|Ngértey '''$1 - $2'''}}  ngir '''$4'''",
        "search-nonefound": "Ceet gi jurul dara.",
        "powersearch-legend": "Ceet gu xóot",
        "powersearch-ns": "Seet ci barabi tur yi :",
        "statistics": "Limbari",
        "statistics-header-pages": "Limbari ñeel xët yi",
        "statistics-header-edits": "Limbari ñeel coppite yi",
-       "statistics-header-views": "Limbari ñeel saytu yi",
        "statistics-header-users": "Limbari ñeel jëfandikukat yi",
        "statistics-header-hooks": "Yeneen limbari",
        "statistics-articles": "Xëti ëmbiit",
        "statistics-pages-desc": "Xët yépp yi ci wiki bi, xëti waxtaanuwaay yi, jubluwaat yi, añs.",
        "statistics-files": "Xët yees yeb fii",
        "statistics-edits": "Coppitey xët yi dalee ca campug  {{SITENAME}}",
-       "statistics-views-total": "Mbooleem saytu yi",
-       "statistics-views-peredit": "Saytu ngir soppi",
        "statistics-users": "[[Special:ListUsers|Jëfandikukat]] yi bindu",
        "statistics-users-active": "Jëfandikukat yu yëngu",
        "statistics-users-active-desc": "Jëfandikukat yi amal ag yëngu-yëngu ci {{PLURAL:$1|bés bu mujj bi|$1 bés yu mujj yi}}",
-       "statistics-mostpopular": "Xët yees gën a saytu",
        "doubleredirects": "Jubluwaat ñaari yoon",
        "doubleredirectstext": "Wii xët dafa ëmb mbooleem xët yees jubluwaatal ci yeneen xëti jubluwaat.\nRëdd wu ne am na lëkkalekaay buy jëme ci bu njëkk ak ñaareelu jubluwaat bi, ak rëdduw mbind wu njëkk wu ñaareelu jubluwaat bi, biy ëmb xëtu jëmuwaay wu ''baax'' wi, wi jubluwaat bu njëkk bi war a jublu moom itam.",
        "double-redirect-fixed-move": "[[$1]] tuddewaat nañu ko.\nLéegi mi ngi jublu [[$2]].",
        "uncategorizedtemplates": "Royuwaay yi amul Wàll",
        "unusedcategories": "Wàll yees jëfandikoowul",
        "unusedimages": "Dencukaay yees jëfandikoowul",
-       "popularpages": "Xët yees gën a saytu",
        "wantedcategories": "Wàll yi ñu gën a laaj",
        "wantedpages": "Xët yi ñu gën a laaj",
        "wantedpages-badtitle": "Koj bu baaxul bu nekk ci ngérte yi : $1",
        "booksources": "Téereb delluwaay",
        "booksources-search-legend": "Seet ab téereb delluwaay",
        "booksources-isbn": "ISBN :",
-       "booksources-go": "Ayca",
        "booksources-text": "Lii ab lima ay lëkkalekaay la yu jëme ciy dal yu biti yuy jaayi téere yu yees ak yu magget, man nga faa ami xibaar ñeel téere yi ngay seet:",
        "booksources-invalid-isbn": "ISBN bi nga joxe mel na ni baaxul; xoolal bu baax ndax defoo ag njuumte ci bi nga koy duppi ca gongikuwaayam.",
        "specialloguserlabel": "Jëfandikukat :",
        "watchlist-details": "Topp nga $1 {{PLURAL:$1|xët|ciy xët}}, soo waññiwaalewul xëti waxtaanuwaay yi.",
        "wlheader-showupdated": "Xët yi ñu soppiwoon ca sa duggu bu mujj ñoom la ñu fesal ñu <b>xëm</b>",
        "wlnote": "Fii ci suuf {{PLURAL:$1| ngay gis coppite yu mujj yi|ngay gis $1 coppite yu mujj}} ci {{PLURAL:$2|waxtu gu mujj gi|<b>$2</b> waxtu yu mujj}}.",
-       "wlshowlast": "wone $1 waxtu yu mujj, $2 bess yu mujj, walla $3.",
+       "wlshowlast": "wone $1 waxtu yu mujj, $2 bess yu mujj, walla .",
        "watchlist-options": "Tànneefi limu toppte bi",
        "watching": "Topp...",
        "unwatching": "Farug toppte gi ...",
        "exif-imagelength": "Kawewaay",
        "exif-usercomment": "Kadduy jëfëndikookat bi",
        "exif-componentsconfiguration-0": "Amul",
-       "watchlistall2": "yépp",
        "namespacesall": "Yépp",
        "monthsall": "Yépp",
        "confirmemail": "Dëggalal sa m-bataaxal",
        "specialpages": "Xëti jagleel",
        "revdelete-restricted": "doxalub digal ngir yorkat yi",
        "revdelete-unrestricted": "digal ngir yorkat yi deñ na",
-       "rightsnone": "(menn)"
+       "rightsnone": "(menn)",
+       "revdelete-summary": "soppi tënk gi"
 }
index 32dc1d2..e1d187f 100644 (file)
@@ -15,7 +15,9 @@
                        "Cwek",
                        "Duolaimi",
                        "Impersonator 1",
-                       "LNDDYL"
+                       "LNDDYL",
+                       "TheChampionMan1234",
+                       "Fitoschido"
                ]
        },
        "tog-underline": "鏈接下橫線:",
@@ -42,7 +44,7 @@
        "tog-shownumberswatching": "顯示關注人數",
        "tog-oldsig": "能界签名先望:",
        "tog-fancysig": "畀簽名當wiki文本(弗自動鏈接)",
-       "tog-uselivepreview": "用当场先望(试验)",
+       "tog-uselivepreview": "用當場先望(試驗)",
        "tog-forceeditsummary": "編要空白到提醒我",
        "tog-watchlisthideown": "關注表裏囥脫我所編",
        "tog-watchlisthidebots": "關注表裏囥脫機器人所編",
        "currentevents-url": "Project:箇阶段个事干",
        "disclaimers": "甮追問",
        "disclaimerpage": "Project:甮追問",
-       "edithelp": "ç¼\96å\86\99帮助",
+       "edithelp": "編寫幫助",
        "mainpage": "封面",
        "mainpage-description": "封面",
        "policy-url": "Project:策略",
-       "portal": "社å\8cºå\8f°é\97¨",
-       "portal-url": "Project:社å\8cºå\8f°é\97¨",
+       "portal": "社å\8d\80è\87ºé\96\80",
+       "portal-url": "Project:社å\8d\80è\87ºé\96\80",
        "privacy": "隱私策略",
        "privacypage": "Project:隱私策略",
        "badaccess": "权限",
        "databaseerror-text": "數據庫討信出錯。\n嘸數說明軟件裏有一個bug。",
        "databaseerror-textcl": "數據庫討信出錯。",
        "databaseerror-query": "討信:$1",
-       "databaseerror-function": "功能ː $1",
+       "databaseerror-function": "功能: $1",
        "databaseerror-error": "出錯:$1",
        "laggedslavemode": "警告: 页面可能弗包含最近个更新。",
        "readonly": "數據庫鎖牢",
        "mergehistory-same-destination": "来源页面与目的页面弗可以相同",
        "mergehistory-reason": "理由:",
        "mergelog": "合并日志",
-       "pagemerge-logentry": "已拿[[$1]]合并到[[$2]] (修订截至$3)",
        "revertmerge": "反合并",
        "mergelogpagetext": "下底是只最近发生个页面历史合并个记录列表。",
        "history-title": "“$1”的版本历史",
        "searchrelated": "相关",
        "searchall": "全部",
        "showingresults": "下头显示从第<b>$2</b>条开始个<b>$1</b>条结果:",
-       "showingresultsheader": "对'''$4'''个{{PLURAL:$5|第'''$1'''至第'''$3'''项结果|第'''$1-$2'''项,共'''$3'''个结果}}",
        "search-nonefound": "查询呒有结果。",
        "powersearch-legend": "高级搜索",
        "powersearch-ns": "垃拉箇眼名字空间里向搜索:",
        "unusedtemplateswlh": "其他鏈接",
        "randompage": "随便望望",
        "randomincategory": "分類裏個隨便一頁",
-       "randomincategory-selectcategory-submit": "去",
        "statistics": "统计",
        "statistics-header-users": "用户资料",
        "statistics-users-active": "活跃用户",
        "nbytes": "$1字节",
        "nmembers": "$1只成员",
        "unusedimages": "朆用着个文件",
-       "popularpages": "热门页面",
        "mostlinked": "链进去顶多个页面",
        "mostlinkedcategories": "链进去顶多个分类",
        "mostcategories": "分类顶多个页面",
        "pager-older-n": "旧$1次",
        "booksources": "书源",
        "booksources-search-legend": "搜索图书来源",
-       "booksources-go": "去",
        "specialloguserlabel": "用戶:",
        "speciallogtitlelabel": "目標(標題要弗用戶):",
        "log": "记录",
        "unwatchthispage": "停止监控",
        "notanarticle": "弗是內容頁",
        "watchlist-details": "弗包括讨论页,有 $1 页徕你侬关注表里向。",
-       "wlshowlast": "显示上 $1 个钟头 $2 日 $3",
+       "wlshowlast": "显示上 $1 个钟头 $2 日",
        "watchlist-options": "监控列表选项",
        "watching": "监控……",
        "unwatching": "解除监控……",
        "exif-contrast-2": "高",
        "exif-gpsspeed-k": "公里每小时",
        "exif-gpsspeed-m": "英里每小时",
-       "watchlistall2": "全部",
        "namespacesall": "全部",
        "monthsall": "全",
        "confirmemail": "确认电子邮件地址",
        "dberr-info-hidden": "(數據庫服務器連弗上)",
        "revdelete-restricted": "已将限制应用到管理员",
        "revdelete-unrestricted": "已移除对管理员个限制",
-       "rightsnone": "(呒)"
+       "rightsnone": "(呒)",
+       "revdelete-summary": "编辑摘要"
 }
index c952187..b68fe15 100644 (file)
        "statistics": "То бүрткл",
        "statistics-header-pages": "Халхарн то бүрткл",
        "statistics-header-edits": "Сольлһна то бүрткл",
-       "statistics-header-views": "Хәләврин то бүрткл",
        "statistics-header-users": "Демнчәрн то бүрткл",
        "statistics-articles": "Зүүлс",
        "statistics-pages": "Халхс",
        "statistics-files": "Тәвсн боомгуд",
        "statistics-edits": "{{SITENAME}} эклсн цагас авн сольлһна то",
        "statistics-edits-average": "Халхарн сольлһна то",
-       "statistics-views-total": "Цуг хәләврин то",
-       "statistics-views-peredit": "Сольлһарн хәләврин то",
        "statistics-users": "Бичгдлһтә [[Special:ListUsers|демнчнр]]",
        "statistics-users-active": "Үүлтә демнчнр",
        "statistics-users-active-desc": "{{PLURAL:$1|$1 өдрт|$1 өдрмүдт|$1 өдрмүдт}} болв чигн үүл кесн демнчнр",
-       "statistics-mostpopular": "Маш хәләсн халхс",
        "brokenredirects-edit": "чиклх",
        "brokenredirects-delete": "һарһх",
        "nbytes": "$1 {{PLURAL:$1|байд|байдуд|байдуд}}",
-       "nmembers": "$1 {{PLURAL:$1|мөч|мөчүд|мөчин}}",
+       "nmembers": "$1 {{PLURAL:$1|мөч|мөчин|мөчүд}}",
        "prefixindex": "Цуг халхс эн эклцтә",
        "newpages": "Шин халхс",
        "move": "Көндәх",
        "pager-older-n": "{{PLURAL:$1|1=көгшәр 1|көгшәр $1}}",
        "booksources": "Дегтрин делгүрс",
        "booksources-search-legend": "Дегтр туск хәәх",
-       "booksources-go": "Ор",
        "log": "Сеткүлс",
        "allpages": "Цуг халхс",
        "prevpage": "Урдк халх ($1)",
        "watchthispage": "Эн халхиг шинҗлх",
        "unwatch": "Шинҗлх биш",
        "watchlist-details": "$1 {{PLURAL:$1|халх|халхс|халхс}} ухалвр угаһар тана шиҗллһнә сеткүлд.",
-       "wlshowlast": "Кенз $1 часд $2 өдрт $3 үзүлх",
+       "wlshowlast": "Кенз $1 часд $2 өдрт  үзүлх",
        "watchlist-options": "Шинҗллһнә сеткүлин көгүд",
        "watching": "Шинҗллһнә бүтлклд немлһн...",
        "unwatching": "Шинҗлһнә бүрткләс һарһлһн...",
        "exif-gpsaltitude": "Теңгсәс өндр",
        "exif-orientation-1": "Кирин",
        "exif-orientation-2": "Теңгрин хормаһар туссн",
-       "watchlistall2": "цуг",
        "namespacesall": "цуг",
        "monthsall": "цуг",
        "confirm_purge_button": "Тиим",
index c4cac2a..4e059ae 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Jcwf",
-            "Jose77"
-        ]
-    },
-    "sunday": "Icawe",
-    "monday": "UMvulo",
-    "tuesday": "ULwesibini",
-    "wednesday": "ULwesithathu",
-    "thursday": "ULwesine",
-    "friday": "ULwesihlanu",
-    "saturday": "UMgqibelo",
-    "january": "EyoMqungu",
-    "february": "EyoMdumba",
-    "march": "EyoKwindla",
-    "april": "EkaTshazimpuzi",
-    "june": "EyeSilimela",
-    "july": "EyeKhala",
-    "august": "EyeThupha",
-    "september": "Eyo Msintsi",
-    "october": "Eye Dwarha",
-    "november": "Eye Nkanga",
-    "december": "Eyo Mnga",
-    "january-gen": "EyoMqungu",
-    "february-gen": "Eyo Mdumba",
-    "march-gen": "Eyo Kwindla",
-    "april-gen": "Ekatshazimpuzi",
-    "may-gen": "EkaCanzibe",
-    "june-gen": "Eyesilimela",
-    "july-gen": "Eye Khala",
-    "august-gen": "Eye Thupha",
-    "september-gen": "Eyo Msintsi",
-    "october-gen": "Eye Dwarha",
-    "november-gen": "Eye Nkanga",
-    "december-gen": "Eyo Mnga",
-    "may": "EkaCanzibe",
-    "article": "Inqaku",
-    "mypage": "Inqaku yam",
-    "mytalk": "Inthetho yam",
-    "vector-view-edit": "Tshintsha",
-    "help": "Uncedo",
-    "search": "Khangela",
-    "searchbutton": "Khangela",
-    "go": "Hamba",
-    "searcharticle": "Hamba",
-    "edit": "Tshintsha",
-    "delete": "Cima",
-    "protect": "Khusela",
-    "talkpagelinktext": "Inthetho",
-    "talk": "Ingxoxo",
-    "otherlanguages": "Kwezinye Ilwimi",
-    "currentevents": "Imisebenzi Eyenzekayo",
-    "edithelp": "Uncedo ngoTshintsho",
-    "mainpage": "Iphepha Elingundoqo",
-    "mainpage-description": "Iphepha Elingundoqo",
-    "youhavenewmessagesmulti": "Unemiyalezo emitsha ku $1",
-    "editsection": "tshintsha",
-    "editold": "tshintsha",
-    "editlink": "tshintsha",
-    "nstab-main": "Inqaba",
-    "viewsource": "Jonga i Source",
-    "yourname": "Igama lelungu:",
-    "yourpassword": "Igama elifihlakeleyo lelungu:",
-    "yourpasswordagain": "Faka kwakhona igama elifihlakeleyo:",
-    "remembermypassword": "Khumbula igama lam elifihlakeleyo kule Khompyutha (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "createaccount": "Vula I Account",
-    "loginlanguagelabel": "Ulwimi: $1",
-    "summary": "Isishwankathelo:",
-    "minoredit": "Lutshitsho oluncinci olu",
-    "watchthis": "Bukela le Page",
-    "savearticle": "Gcina eliphepha",
-    "showpreview": "Bonisa Utshintsho",
-    "showdiff": "Gcina Utshitshi",
-    "mypreferences": "Ezithandwa ndim",
-    "searchresultshead": "Khangela",
-    "username": "Igama lelungu:",
-    "recentchanges": "Utshitsho olusandokwenziwa",
-    "minoreditletter": "nc",
-    "recentchangeslinked": "Utsitsho olufana nolu",
-    "recentchangeslinked-feed": "Utsitsho olufana nolu",
-    "recentchangeslinked-toolbox": "Utsitsho olufana nolu",
-    "upload": "Faka Ifile",
-    "filedesc": "Isishwankathelo",
-    "watchthisupload": "Bukela le Page",
-    "move": "Dlulisa",
-    "movethispage": "Dlulisa eliphepha",
-    "allinnamespace": "Amanqaku onke ($1 namespace)",
-    "allpagessubmit": "Hamba",
-    "watchlist": "Endizibukeleyo",
-    "mywatchlist": "Endizibukeleyo",
-    "watch": "Bukela",
-    "watchthispage": "Bukela le Page",
-    "prot_1movedto2": "[[$1]] lidluliselwe [[$2]]",
-    "contributions": "Imisebenzi ye lungu",
-    "mycontris": "Inkxaso yam",
-    "sp-contributions-talk": "Inthetho",
-    "sp-contributions-submit": "Khangela",
-    "ipblocklist-submit": "Khangela",
-    "move-page-legend": "Dlulisa eliphepha",
-    "movepagebtn": "DLulisa eliphepha",
-    "movereason": "Isizathu",
-    "ilsubmit": "Khangela",
-    "specialpages": "Amaphepha Abalulekileyo"
+       "@metadata": {
+               "authors": [
+                       "Jcwf",
+                       "Jose77"
+               ]
+       },
+       "sunday": "Icawe",
+       "monday": "UMvulo",
+       "tuesday": "ULwesibini",
+       "wednesday": "ULwesithathu",
+       "thursday": "ULwesine",
+       "friday": "ULwesihlanu",
+       "saturday": "UMgqibelo",
+       "january": "EyoMqungu",
+       "february": "EyoMdumba",
+       "march": "EyoKwindla",
+       "april": "EkaTshazimpuzi",
+       "june": "EyeSilimela",
+       "july": "EyeKhala",
+       "august": "EyeThupha",
+       "september": "Eyo Msintsi",
+       "october": "Eye Dwarha",
+       "november": "Eye Nkanga",
+       "december": "Eyo Mnga",
+       "january-gen": "EyoMqungu",
+       "february-gen": "Eyo Mdumba",
+       "march-gen": "Eyo Kwindla",
+       "april-gen": "Ekatshazimpuzi",
+       "may-gen": "EkaCanzibe",
+       "june-gen": "Eyesilimela",
+       "july-gen": "Eye Khala",
+       "august-gen": "Eye Thupha",
+       "september-gen": "Eyo Msintsi",
+       "october-gen": "Eye Dwarha",
+       "november-gen": "Eye Nkanga",
+       "december-gen": "Eyo Mnga",
+       "may": "EkaCanzibe",
+       "article": "Inqaku",
+       "mypage": "Inqaku yam",
+       "mytalk": "Inthetho yam",
+       "help": "Uncedo",
+       "search": "Khangela",
+       "searchbutton": "Khangela",
+       "go": "Hamba",
+       "searcharticle": "Hamba",
+       "edit": "Tshintsha",
+       "delete": "Cima",
+       "protect": "Khusela",
+       "talkpagelinktext": "Inthetho",
+       "talk": "Ingxoxo",
+       "otherlanguages": "Kwezinye Ilwimi",
+       "currentevents": "Imisebenzi Eyenzekayo",
+       "edithelp": "Uncedo ngoTshintsho",
+       "mainpage": "Iphepha Elingundoqo",
+       "mainpage-description": "Iphepha Elingundoqo",
+       "youhavenewmessagesmulti": "Unemiyalezo emitsha ku $1",
+       "editsection": "tshintsha",
+       "editold": "tshintsha",
+       "editlink": "tshintsha",
+       "nstab-main": "Inqaba",
+       "viewsource": "Jonga i Source",
+       "yourname": "Igama lelungu:",
+       "yourpassword": "Igama elifihlakeleyo lelungu:",
+       "yourpasswordagain": "Faka kwakhona igama elifihlakeleyo:",
+       "remembermypassword": "Khumbula igama lam elifihlakeleyo kule Khompyutha (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "createaccount": "Vula I Account",
+       "loginlanguagelabel": "Ulwimi: $1",
+       "summary": "Isishwankathelo:",
+       "minoredit": "Lutshitsho oluncinci olu",
+       "watchthis": "Bukela le Page",
+       "savearticle": "Gcina eliphepha",
+       "showpreview": "Bonisa Utshintsho",
+       "showdiff": "Gcina Utshitshi",
+       "mypreferences": "Ezithandwa ndim",
+       "searchresultshead": "Khangela",
+       "username": "Igama lelungu:",
+       "recentchanges": "Utshitsho olusandokwenziwa",
+       "minoreditletter": "nc",
+       "recentchangeslinked": "Utsitsho olufana nolu",
+       "recentchangeslinked-feed": "Utsitsho olufana nolu",
+       "recentchangeslinked-toolbox": "Utsitsho olufana nolu",
+       "upload": "Faka Ifile",
+       "filedesc": "Isishwankathelo",
+       "watchthisupload": "Bukela le Page",
+       "move": "Dlulisa",
+       "movethispage": "Dlulisa eliphepha",
+       "allinnamespace": "Amanqaku onke ($1 namespace)",
+       "allpagessubmit": "Hamba",
+       "watchlist": "Endizibukeleyo",
+       "mywatchlist": "Endizibukeleyo",
+       "watch": "Bukela",
+       "watchthispage": "Bukela le Page",
+       "prot_1movedto2": "[[$1]] lidluliselwe [[$2]]",
+       "contributions": "Imisebenzi ye lungu",
+       "mycontris": "Inkxaso yam",
+       "sp-contributions-talk": "Inthetho",
+       "sp-contributions-submit": "Khangela",
+       "ipblocklist-submit": "Khangela",
+       "move-page-legend": "Dlulisa eliphepha",
+       "movepagebtn": "DLulisa eliphepha",
+       "movereason": "Isizathu",
+       "ilsubmit": "Khangela",
+       "specialpages": "Amaphepha Abalulekileyo"
 }
index c71079f..6b95e78 100644 (file)
        "search-interwiki-more": "(უმოს)",
        "searchrelated": "მათანგეფ",
        "searchall": "არძო",
-       "showingresultsheader": "{{PLURAL:$5|მოღალუ '''$1''' '''$3'''-შე|მოღალუეფ '''$1 - $2''' '''$3'''-შე}} '''$4'''-შო",
        "search-nonefound": "თქვანი მოგორაფილიშ მუთუნნერ მანგი მოღალუქ ვეძირჷ.",
        "powersearch-legend": "გოძინელ გორუა",
        "powersearch-ns": "დოგორ ჯოხოეფიშ ოფირჩას:",
        "pager-older-n": "{{PLURAL:$1|უმოს ჯვეში 1|უმოს ჯვეში $1}}",
        "booksources": "წინგიშ წყუეფ",
        "booksources-search-legend": "წიგნიშ წყუშ გორუა",
-       "booksources-go": "გინულა",
        "specialloguserlabel": "მახვარებუ:",
        "speciallogtitlelabel": "სათაურ:",
        "log": "ჟურნალეფ",
        "watchthispage": "თე ხასილაშ კონტროლ",
        "unwatch": "კონტროლიშ გოუქვაფა",
        "watchlist-details": "{{PLURAL:$1|$1 ხასილა|$1 ხასილეფ}} რე თქვან კონტროლიშ ერკებულს, სხუნუაშ ხასილეფიშ მეუკოროცხუო.",
-       "wlshowlast": "ეკონია $1 საათიშ $2 დღაშ $3 ძირაფა",
+       "wlshowlast": "ეკონია $1 საათიშ $2 დღაშ  ძირაფა",
        "watchlist-options": "კონტროლიშ ერკებულიშ ოფციეფ",
        "watching": "კონტროლირებად...",
        "unwatching": "კონტროლ მონწყუმილ რე ...-შა",
        "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": "სიმაღალე",
-       "watchlistall2": "არძა",
        "namespacesall": "არძა",
        "monthsall": "არძა",
        "watchlisttools-view": "მერცხილ თირაფეფიშ ძირაფა",
index 3e490e9..b0c2824 100644 (file)
@@ -11,7 +11,8 @@
                        "ווארצגאנג",
                        "לערי ריינהארט",
                        "פוילישער",
-                       "아라"
+                       "아라",
+                       "Har-wradim"
                ]
        },
        "tog-underline": "שטרייכט אונטער לינקען",
        "go": "גיין",
        "searcharticle": "גיין",
        "history": "בלאט היסטאריע",
-       "history_short": "היסטאריע",
+       "history_short": "היסטאָריע",
        "updatedmarker": "דערהיינטיגט זינט מיין לעצטע וויזיט",
        "printableversion": "דרוק ווערסיע",
        "permalink": "שטענדיגער לינק",
        "otherlanguages": "אין אַנדערע שפראַכן",
        "redirectedfrom": "(אַריבערגעפֿירט פון $1)",
        "redirectpagesub": "ווייטערפירן בלאט",
+       "redirectto": "ווײַטערפירן צו:",
        "lastmodifiedat": "דער בלאט איז לעצט געווארן מאדיפיצירט $2, $1.",
        "viewcount": "דער בלאט איז געווארן געליינט {{PLURAL:$1|איין מאל|$1 מאל}}.",
        "protectedpage": "באשיצטער בלאט",
        "pool-timeout": "אַריבער דער צײַט וואַרטן פֿאר דער שליסונג",
        "pool-queuefull": "ריי איז פֿול",
        "pool-errorunknown": "אומבאַקאַנטער פֿעלער",
+       "pool-servererror": "נישט פאראן דער פול־צאל דינסט ($1).",
        "aboutsite": "וועגן {{SITENAME}}",
        "aboutpage": "Project:וועגן",
        "copyright": "דער אינהאַלט איז פֿאַראַן אונטער $1 ווען נישט באוויזן אנדערש.",
        "viewsourcetext": "איר קענט זען און קאפירן דעם מקור פון דעם בלאַט:",
        "viewyourtext": "איר קענט באקוקן דעם מקור פון '''אייערע רעדאקטירונגען''' צו דעם בלאט:",
        "protectedinterface": "דער בלאַט שטעלט צו באניצער־אויבערפלאך טעקסט פֿאַרן װײכװאַרג אויף דער דאזיקער וויקי, און איז פֿאַרשפּאַרט כּדי צו פֿאַרמײַדן װאַנדאַליזם.\nכדי צולייגן אדער ענדערן איבערזעצונגען פאר אלע וויקיס, זייט אזוי גוט ניצן [//translatewiki.net/ translatewiki.net], דער מעדיעוויקי לאקאליזאציע פראיעקט.",
-       "editinginterface": "'''ווארענונג:''' איר באַאַרבעט א בלאט וואס איז געניצט צוצושטעלן אינטערפֿייס טעקסט פאר דער ווייכווארג. ענדערונגען אין דעם בלאַט וועלן טוישן דאס אויסזען פון די סיסטעם מודעות פאר אלע אנדערע באניצער אויף דער וויקי.\nכדי צולייגן אדער ענדערן איבערזעצונגען, באַטראַכטס באַניצן [//translatewiki.net/ translatewiki.net], דער מעדיעוויקי לאקאַליזאציע פראיעקט.",
+       "editinginterface": "<strong>ווארענונג:</strong> איר באַאַרבעט א בלאט וואס ווערט געניצט צוצושטעלן אינטערפֿייס טעקסט פאר דער ווייכווארג.\nענדערונגען אין דעם בלאַט וועלן טוישן דאס אויסזען פון די סיסטעם מודעות פאר אנדערע באניצער אויף דער וויקי.",
+       "translateinterface": "כדי צו צולייגן איבערזעצונגען פאר אלע וויקיס, זײַט אזוי גוט און ניצט [//translatewiki.net/ translatewiki.net], דער מעדיעוויקי לאקאליזירונג פראיעקט.",
        "cascadeprotected": "דער בלאט איז פארשפארט צום ענדערן וויבאלד ער איז איינגעשלאסן אין איינע פון די פאלגנדע {{PLURAL:$1|בלאט, וואס איז|בלעטער, וואס זענען}} באשיצט מיט דער קאסקייד אפציע:\n\n$2",
        "namespaceprotected": "איר זענט נישט ערלויבט צו רעדאקטירן בלעטער אינעם '''$1''' נאמענטייל.",
        "customcssprotected": "איר האט נישט רשות צו רעדאַקטירן דעם CSS בלאַט, ווײַל ער אַנטהאַלט די פערזענלעכע באַשטימונגען פון אַן אַנדער באַניצער.",
        "createaccount-text": "עמעצער האט באשאפֿן א קאנטע פֿאר אייער ע-פאסט אדרעס אין {{SITENAME}} ($4) מיטן נאמען \"$2\" און  פאסווארט \"$3\". איר דארפט אצינד איינלאגירן און ענדערן דאס פאסווארט.\n\nאיר קענט איגנארירן די מעלדונג, ווען די קאנטע איז באשאפֿן בטעות.",
        "login-throttled": "איר האט געפרוווט צופֿיל מאל אריינלאגירן.\nזייט אזוי גוט און וואַרט $1 איידער איר פרוווט נאכאמאל.",
        "login-abort-generic": "אײַער ארײַנלאגירונג איז נישט געווען דערפֿאלגרייך—אָפגעשטעלט",
+       "login-migrated-generic": "אײַער קאנטע איז געווארן מיגרירט, און אײַער באניצער־נאמען איז מער נישט פאראן אויף דער וויקי.",
        "loginlanguagelabel": "שפראך: $1",
        "suspicious-userlogout": " אײַער בקשה אַרויסלאָגירן זיך איז אפגעלייגט געווארן ווייַל אייגנטלעך איז זי געשיקט דורך אַ צעבראכענעם בלעטערער אָדער א פראקסי מיט א זאפאס.",
        "createacct-another-realname-tip": "עכטער נאמען איז אפציאנאל.\nאויב איר וויילט אויס צוצושטעלן אים, וועט דאס גענוצט ווערן צו געבן אטריבוציע פאר זייער ארבעט.",
        "passwordreset-emailsent-capture": "מען האט געשיקט א פאסווארט צוריקשטעלן בליצבריוו, וואס ווערט געוויזן אונטן.",
        "passwordreset-emailerror-capture": "מען האט געשאפן א פאסווארט צוריקשטעלן בליצבריוו, וואס ווערט געוויזן אונטן, אבער שיקן צום {{GENDER:$2|באניצער}}איז דורכגעפאלן: $1",
        "changeemail": "ענדערן ע-פּאָסט אַדרעס",
-       "changeemail-header": "ענדערן קאנטע ע-פּאָסט אַדרעס",
        "changeemail-text": "דערגאַנצט די פֿאָרעם צו ענדערן אייער ע-פּאָסט אַדרעס. איר וועט דאַרפֿן אַרײַנגעבן אײַער פּאַראָל צו באַשטעטיקן די ענדערונג.",
        "changeemail-no-info": "איר דאַרפֿט זיין אַרײַנלאגירט צוצוקומען גלײַך צו דעם דאָזיגן בלאַט.",
        "changeemail-oldemail": "קראַנטער ע-פּאָסט אַדרעס:",
        "changeemail-none": "(קיין)",
        "changeemail-password": "אייער {{SITENAME}} פאסווארט:",
        "changeemail-submit": "ענדערן ע־פאסט אדרעס",
-       "changeemail-cancel": "אַנולירן",
        "changeemail-throttled": "איר האט געפרוווט צופֿיל מאל אריינלאגירן.\nזייט אזוי גוט און וואַרט $1 איידער איר פרוווט נאכאמאל.",
        "resettokens": "צוריקזעצן טאקנס",
        "resettokens-text": "דא קענט איר צוריקשטעלן טאקנס וואס דערלויבן צוטריט צו געוויסע פריוואטע דאטן שייך צו אײַער קאנטע.\n\nYou should do it if you accidentally shared them with someone or if your account has been compromised.",
        "subject": "טעמע/קעפל:",
        "minoredit": "דאס איז א מינערדיגע ענדערונג",
        "watchthis": "טוט אױפֿפּאַסן דעם בלאט",
-       "savearticle": "×\90ױפֿהיטן בלאַט",
+       "savearticle": "×\90×\95×\99פהיטן בלאַט",
        "preview": "פֿאראויסקוק",
-       "showpreview": "×\95×\95ײַ×\96×\9f ×¤Ö¿אָרױסקוק",
+       "showpreview": "×\95×\95×\99×\99×\96×\9f ×¤אָרױסקוק",
        "showdiff": "ווײַז די ענדערונגען",
        "blankarticle": "<strong>אזהרה:</strong> דער בלאט איר גייט שאפן איז ליידיק.\nטאמער איר וועט דריקן אויף \"{{int:savearticle}}\" נאכאמאל, וועט דער בלאט ווערן געשאפן אן קיין אינהאלט.",
-       "anoneditwarning": "'''ווארענונג:''' איר זענט נישט אריינלאגירט אין אייער קאנטע. אייער איי פי אדרעס וועט ווערן דאקומענטירט אין דעם בלאטס היסטאריע פון ענדערונגען. אויב זארגט איר זיך פאר פריוואטקייטן, ביטע טוט זיך אריינלאגירן.",
+       "anoneditwarning": "<strong>ווארענונג:</strong> איר זענט נישט אריינלאגירט. אייער איי פי אדרעס וועט ווערן עפנטלעך זעבאר ווען איר פירט דורך  ענדערונגען . אז איר <strong>[$1 לאגירט ארײַן]</strong> אדער <strong>[$2 שאפט א קאנטע]</strong>, וועלן אײַערע רעדאקטירונגען ווערן צוגעשריבן צו אײַער באניצער-נאמען, ווי אויך אנדערע טובות.",
        "anonpreviewwarning": "''איר זענט נישט אַרײַנלאגירט. אויפֿהיטן וועט ארײַנשרײַבן אײַער IP אַדרעס אין דער רעדאַקטירונג היסטאריע פונעם בלאַט.''",
        "missingsummary": "'''דערמאנונג:''' איר האט נישט אויסגעפילט דעם קורץ ווארט אויפקלערונג אויף אייער עדיט. אויב וועט איר דרוקן נאכאמאל אויף  \"היט אפ דעם בלאט\", וועט אייער ענדערונג ווערן געהיטן אן דעם.",
        "missingcommenttext": "ביטע שטעלט אריין א אנמערקונג פון אונטן.",
        "userinvalidcssjstitle": "'''ווארענונג:''' סאיז נישטא קיין סקין \"$1\". גדענקט אז קאסטעם .css און .js בלעטער נוצען לאוער קעיס טיטול, e.g. {{ns:user}}:Foo/vector.css ווי אנדערשט צו {{ns:user}}:Foo/Vector.css.",
        "updated": "(דערהיינטיגט)",
        "note": "'''באמערקונג:'''",
-       "previewnote": "'''געדענקט אז דאס איז נאָר אין אַ פֿאָרויסיקע ווייזונג.'''\nאייערע ענדערונגען זענען נאָך נישט געהיט!",
+       "previewnote": "'''געדענקט אַז דאָס איז נאָר אַ פאָרויסקוק.'''\nאייערע ענדערונגען זענען נאָך נישט געהיט!",
        "continue-editing": "אריבער צום רעדאקטירן פֿעלד",
        "previewconflict": "די פֿאראויסיגע ווייזונג רעפלעקטירט דעם טעקסט און דער אויבערשטע טעקסט ענדערונג אָפטיילונג וויאזוי דאס וועט אויסזען אויב וועט איר דאס אָפהיטן.",
        "session_fail_preview": "'''אנטשולדיגט! מען האט נישט געקענט פראצעסירן אייער ענדערונג צוליב א פארלוסט פון סעסיע דאטע. ביטע פרובירט נאכאמאל. אויב ס'ארבעט נאך אלס ניט, פרובירט [[Special:UserLogout|ארויסלאגירן]] און זיך צוריק אריינלאגירן.",
        "longpageerror": "'''פעלער: דער טעקסט וואס איר האט ארײַנגעשטעלט איז לאנג {{PLURAL:$1|איין קילאבייט|$1 קילאבייטן}}, וואס איז לענגער פון דעם מאקסימום פון {{PLURAL:$2|איין קילאבייט|$2 קילאבייטן}}.\nער קען נישט ווערן אפגעהיטן.'''",
        "readonlywarning": "'''ווארענונג: די דאטנבאזע איז געווארן פארשלאסן פאר אויפהאלטונג, ממילא וועט איר נישט קענען אפהיטן אייערע ענדערונגען אצינד. '''\nאיר קענט קאפירן און ארײַנלייגן דעם טעקסט אריין צו א טעקסט טעקע און דאס דארטן אפהיטן אויף שפעטער.\n\nדער אדמיניסטראטאר וואס האט זי פארשלאסן האט מסביר געווען אזוי: $1",
        "protectedpagewarning": "'''ווארענונג:  דער בלאט איז געווארן פארשפארט אז בלויז באניצערס מיט סיסאפ פריווילעגיעס קענען אים ענדערן.'''\nדי פארגאנגענע לאגבוך באשרײַבונג ווערט געוויזן דא:",
-       "semiprotectedpagewarning": "'''באמערקונג:''' דער דאזיגער בלאַט איז פֿאַרשפאַרט אז בלויז איינגעשריבענע באניצערס קענען אים ענדערן.\nדי פֿאַרגאַנגענע לאגבוך באשרײַבונג ווערט געוויזן דאָ:",
+       "semiprotectedpagewarning": "'''באמערקונג:''' דער דאָזיקער בלאַט איז פאַרשפּאַרט, אַזוי אַז בלויז איינגעשריבענע באַניצער קענען אים ענדערן.\nדאָס פאַרגאַנגענע לאָגבוך באַשרייבונג ווערט געוויזן דאָ:",
        "cascadeprotectedwarning": "'''ווארענונג:''' דער בלאט איז פארשפארט אז בלויז סיסאפן קענען אים ענדערן, וויבאלד ער איז איינגעשלאסן אין {{PLURAL:$1| דעם פאלגנדן בלאט, וואס איז|די פאלגנדע בלעטער, וואס זענען}} קאסקאד באשיצט:",
        "titleprotectedwarning": "'''אזהרה: דער בלאט איז פֿארשפאַרט טא דארף מען [[Special:ListGroupRights|ספעציפֿישע רעכטן]] צו שאפֿן אים.'''\nדי פֿאַרגאַנגענע לאגבוך באשרײַבונג ווערט געוויזן דאָ:",
        "templatesused": "{{PLURAL:$1|מוסטער|מוסטערן}} באנוצט אויף דעם בלאט:",
        "content-model-text": "פשוטער טעקסט",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "בלעטער וואס ניצן געטאפלטע ארגומענטן אין מוסטער רופן",
        "expensive-parserfunction-warning": "'''אזהרה:''' דער בלאט אנטהאלט צופיל טייערע פארזירער רופן.\n\nער דארף האבן ווינציגער פון  $2 {{PLURAL:$2|רוף|רופן}}, אבער אצינד {{PLURAL:$1|איז דא $1 רוף|זענען דא $1 רופן}}.",
        "expensive-parserfunction-category": "בלעטער מיט צופֿיל טייערע פאַרזער פֿונקציאן רופֿן",
        "post-expand-template-inclusion-warning": "'''אכטונג:''' איינגעשלאסענע מוסטערן אין דעם בלאט זענען צו גרויס.\nטייל מוסטערן וועלן נישט ווערן איינגעשלאסן.",
        "mergehistory-same-destination": "מקור און ציל בלעטער זענען די זעלבע",
        "mergehistory-reason": "אורזאַך:",
        "mergelog": "צונויפֿגיסן לאג-בוך",
-       "pagemerge-logentry": "צונויפֿגעגאסן [[$1]] אין [[$2]] (גרסאות ביז $3)",
        "revertmerge": "מבטל זײַן צאמשטעל",
        "mergelogpagetext": "אונטן איז א ליסטע פון לעצטנסדיגע צונויפגיסונגען פון איין בלאט'ס היסטאריע אין א צווייטער.",
        "history-title": "רעוויזיע היסטאריע פֿון $1",
        "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": "ווייזן ביז {{PLURAL:$1|רעזולטאט '''איינס'''|'''$1''' רעזולטאטן}} אנגעפאנגן פון נומער #'''$2''':",
        "showingresultsinrange": "ווײַזן אונטן ביז {{PLURAL:$1|<strong>1</strong> רעזולטאט|<strong>$1</strong> רעזולטאטן}} אין גרייך #<strong>$2</strong> ביז #<strong>$3</strong>.",
-       "showingresultsheader": "{{PLURAL:$5|רעזולטאַט '''$1''' פֿון '''$3'''| רעזולטאַטן '''$1 - $2''' פֿון '''$3'''}} פֿאַר '''$4'''",
+       "search-showingresults": "{{PLURAL:$4|רעזולטאַט <strong>$1</strong> פֿון <strong>$3</strong>|רעזולטאַטן\n<strong>$1 - $2</strong> פֿון <strong>$3</strong>}}",
        "search-nonefound": "נישטא קיין רעזולטאטן פֿאַר דער שאלה.",
        "powersearch-legend": "ווײַטהאלטן זוכן",
        "powersearch-ns": "זוכן אין נאמענטיילן:",
        "gender-female": "זי רעדאקטירט וויקי בלעטער",
        "prefs-help-gender": "שטעלן דעם פרעפֿערענץ איז אפציאנאַל.\nדאס ווייכוואַרג באניצט זיין ווערט אײַך צו אַדרעסירן און דערמאנען צו אנדערע מיטן געהעריגן מין פֿארעם. \nדי אינפֿארמאַציע ווערט ידוע צו אַלעמען.",
        "email": "ע-פאסט",
-       "prefs-help-realname": "* עכטער נאמען (אפציאנאל): אויב וועט איר אויסוועלן צוצישטעלן דאס, וועט גענוצט ווערן צו געבן אטריביאציע צו אייער ארבייט.",
+       "prefs-help-realname": "עכטער נאמען איז אפציאנאל.\nווען אנגעגעבן, וועט ער גענוצט ווערן צו געבן אטריבוציע פאר אייער ארבעט.",
        "prefs-help-email": "ע-פאסט אַדרעס איז ברירהדיק, אבער עס דערמעגליכט אז מען קען אייך שיקן א ניי פאסווארט טאמער איר פֿארגעסט דאָס אַלטע.",
        "prefs-help-email-others": "איר קענט אויך אויסקלייבן צו לאזן אנדערע פֿארבינדן מיט אייך דורך ע־פאסט דורך א לינק אויף אייער באניצער אדער שמועס בלאט.\nמען וועט נישט אנטפלעקן אייער ע־פאסט אדרעס ווען אנדערע פֿארבינדן זיך מיט אייך.",
        "prefs-help-email-required": "בליצפאסט אדרעס באדארפט.",
        "prefs-tokenwatchlist": "טאקן",
        "prefs-diffs": "צווישנשיידן",
        "prefs-help-prefershttps": "דער פרעפערענץ וועט ארבעטן ביי אײַער נעקסטער ארײַנלאגירונג.",
+       "prefswarning-warning": "איר האט געמאכט ענדערונגען צו אײַערע פרעפערענצן וואס זענען נאך נישט אויפגעהיטן.\nאז איר פארלאזט דעם בלאט אן קליקן ״$1״ וועלן אײַערע פרעפערענצן נישט ווערן דערהײַנטיקט.",
        "prefs-tabs-navigation-hint": "טיפ: איר קענט ניצן די רעכטס און לינקס פייל־קלאווישן צו נאוויגירן צווישן די צינגלעך אין דער צינגלעך־ליסטע.",
        "email-address-validity-valid": "ע-פּאָסט אַדרעס זעט אויס גילטיק",
        "email-address-validity-invalid": "לייגט אַרײַן א גילטיקן ע־פאסט אַדרעס",
        "statistics": "סטאַטיסטיק",
        "statistics-header-pages": "בלעטער סטאטיסטיק",
        "statistics-header-edits": "רעדאקטירן סטאַטיסטיק",
-       "statistics-header-views": "זען סטאטיסטיק",
        "statistics-header-users": "באניצער סטאטיסטיק",
        "statistics-header-hooks": "אנדערע סטאטיסטיק",
        "statistics-articles": "אינהאלט בלעטער",
        "statistics-files": "ארויפֿגעלאדענע טעקעס",
        "statistics-edits": "רעדאַקטירונגען זײַט {{SITENAME}} איז אויפֿגעשטעלט",
        "statistics-edits-average": "דורכשניט רעדאַקטירונגען אין א בלאַט",
-       "statistics-views-total": "צאל קוקן אינגאַנצן",
-       "statistics-views-total-desc": "באַקוקן צו נישט־פֿאַרהאַנען בלעטער און באַזונדערע בלעטער זענען נישט אַרייַנגערעכנט.",
-       "statistics-views-peredit": "צאל קוקן צו א רעדאַקטירונג",
        "statistics-users": "איינגעשריבענע [[Special:ListUsers|באניצערס]]",
        "statistics-users-active": "טעטיקע באניצערס",
        "statistics-users-active-desc": "באניצערס וואס האבן דורכגעפירט א פעולה אין די לעצטע {{PLURAL:$1|טאג|$1 טעג}}",
-       "statistics-mostpopular": "מערסטע געזען בלעטער",
        "pageswithprop": "בלעטער מיט א בלאט אייגנשאפט",
        "pageswithprop-legend": "בלעטער מיט א בלאט אייגנשאפט",
        "pageswithprop-text": "דער בלאט האלט א רשימה פון בלעטער וואס ניצן א געוויסע בלאט אייגנשאפט.",
        "uncategorizedtemplates": "אומקאטעגאריזירטע מוסטערן",
        "unusedcategories": "נישט געניצטע קאטעגאריעס",
        "unusedimages": "נישט געניצטע טעקעס",
-       "popularpages": "פאפולערע בלעטער",
        "wantedcategories": "געזוכטע קאטעגאריעס",
        "wantedpages": "געזוכטע בלעטער",
        "wantedpages-badtitle": "אומגילטיקער טיטל אין רעזולטאַט: $1",
        "newpages": "נייע בלעטער",
        "newpages-username": "באַניצער נאָמען:",
        "ancientpages": "עלטסטע בלעטער",
-       "move": "×\91×\90Ö·×°עגן",
+       "move": "×\91×\90Ö·×\95×\95עגן",
        "movethispage": "באוועג דעם בלאט",
        "unusedimagestext": "די פֿאלגנדע טעקעס עקזיסטירן אבער ווערן נישט גענוצט אין קיין שום בלאַט.\nגיט אַכט אז אנדערע וועבערטער קענען פֿארבינדן צו א טעקע מיט א דירעקטן URL, און קענען דעריבער באווײַזן זיך דאָ כאטש זיי זענען אין אקטיוון באניץ.",
        "unusedcategoriestext": "די פֿאלגנדע קאטעגאריעס עקסיסטירן, אבער קיין בלאט אדער קאטעגאריע ניצט זיי נישט.",
        "pager-older-n": "{{PLURAL:$1|עלטערע|$1 עלטערע}}",
        "suppress": "אויפֿזען",
        "querypage-disabled": "דער באַזונדער־בלאַט איז אומאַקטיווירט צוליב אויספֿירונג סיבות.",
+       "apihelp": "API־הילף",
+       "apihelp-no-such-module": "מאָדול \"$1\" נישט געפונען.",
        "booksources": "דרויסנדיגע ליטעראַטור ISBN",
        "booksources-search-legend": "זוכן פאר דרויסנדע ביכער מקורות",
-       "booksources-go": "גיין",
+       "booksources-search": "זוכן",
        "booksources-text": "אונטן איז א ליסטע פון סייטס וואס פֿארקויפֿן נייע און גענוצטע ביכער און האבן אויך נאך אינפֿארמאציע וועגן די ביכער וואס איר זוכט:",
        "booksources-invalid-isbn": "דאָס געגעבענע ISBN זעט נישט אויס צו זיין גילטיק; קאנטראלירט פֿאַר גרײַזן בײַם קאפּירן פון דעם ערשטיקן מקור.",
        "specialloguserlabel": "אויספֿירער:",
        "trackingcategories-msg": "אויפפאסן־קאטעגאריע",
        "trackingcategories-name": "מעלדונג נאמען",
        "trackingcategories-desc": "קאטעגאריע אײַנשליסן קריטעריע",
+       "hidden-category-category-desc": "די קאטעגאריע אנטהאלט  <code><nowiki>__HIDDENCAT__</nowiki></code> אין בלאט־אינהנהאלט, וואס פארמײַדט אים פון באשײַנען אין דעם קאטעגאריע־לינק־קעסטל.",
        "trackingcategories-nodesc": "נישט פאראן קיין באשרײַבונג.",
        "trackingcategories-disabled": "קאטעגאריע איז אומאקטיווירט",
        "mailnologin": "נישטא קיין אדרעס צו שיקן",
        "removedwatchtext-short": "מ'האט אראפגענומען בלאט \"$1\" פון אײַער אויפפאסן ליסטע.",
        "watch": "אױפֿפּאַסן",
        "watchthispage": "טוט אױפֿפּאַסן דעם בלאט",
-       "unwatch": "אויפֿהערן אויפֿפּאַסן",
+       "unwatch": "אויפהערן אויפפּאַסן",
        "unwatchthispage": "ענדיגן אויפֿפאַסן",
        "notanarticle": "דאס איז נישט קיין אינהאלט בלאט",
        "notvisiblerev": "די באארבעטונג איז געווארן אויסגעמעקט",
        "wlheader-enotif": "ע-פאסט מעלדונג ערמעגליכט.",
        "wlheader-showupdated": "בלעטער געענדערט זײַט אײַער לעצטן וויזיט זען געוויזן '''דיק'''.",
        "wlnote": "אונטן {{PLURAL:$1|איז די לעצטע ענדערונג|זענען די לעצטע <strong>$1</strong> ענדערונגען}} אין {{PLURAL:$2|דער לעצטער שעה|די לעצטע <strong>$2</strong> שעה'ן}} ביז $3, $4.",
-       "wlshowlast": "(ווײַזן די לעצטע $1 שעה'ן | $2 טעג | $3)",
+       "wlshowlast": "ווײַזן די לעצטע $1 שעה'ן  $2 טעג",
        "watchlist-options": "אויפֿפאַסן ליסטע ברירות",
        "watching": "אויפפאסענדונג…",
        "unwatching": "נעמט אראפ פון אויפפאסונג ליסטע…",
        "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** שטארק געניצטער בלאט",
        "sp-contributions-search": "זוכן בײַשטײַערונגען",
        "sp-contributions-username": "באניצער נאמען אדער IP אדרעס:",
        "sp-contributions-toponly": "בלויז ווײַזן רעדאַקטירונגען וואָס זענען די לעצטיקע רעוויזיעס",
-       "sp-contributions-newonly": "בלוז ווײַזן רעדאקטירונגען וואס זענען נײַ־געשאפענע בלעטער",
+       "sp-contributions-newonly": "×\91×\9c×\95×\99×\96 ×\95×\95ײַ×\96×\9f ×¨×¢×\93×\90ק×\98×\99ר×\95× ×\92×¢×\9f ×\95×\95×\90ס ×\96×¢× ×¢×\9f × ×²Ö·Ö¾×\92עש×\90פענע ×\91×\9c×¢×\98ער",
        "sp-contributions-submit": "זוכן",
        "whatlinkshere": "װאָס פֿאַרבינדט אַהער",
        "whatlinkshere-title": "בלעטער וואס פֿארבינדן צו $1",
        "movepagetalktext": "דער רעדן בלאט וועט ווערן באַוועגט אויטאמאֵטיש מיט אים, '''אחוץ:'''\n* ס'איז שוין דא א נישט-ליידיגער בלאט מיטן נייעם נאמען, אדער.\n* איר נעמט  אראפ דעם צייכן פונעם קעסטל אונטן.\n\nאין די פֿעלער, וועט איר דארפֿן באַוועגן אדער צונויפֿגיסן דעם בלאט האַנטלעך, ווען איר ווילט.",
        "movearticle": "באוועג בלאט:",
        "moveuserpage-warning": "'''ווארענונג:''' איר האלט ביי באוועגן א באניצער בלאט. ביטע באמערקט אז נאר דער בלאט ווערט באוועגט אבער דער באניצער נאמען ווערט ''נישט'' געענדערט.",
+       "movecategorypage-warning": "<strong>ווארענונג:</strong> איר האלט ביי באוועגן א קאטעגאריע בלאט. גיט אכט אז נאר דער בלאט וועט ווערן באוועגט, אבער די בלעטער אין דער אלטער קאטעגאריע וועט מען <em>נישט</em> be ארײַנשטעלן אין דער נייער קאטעגאריע.",
        "movenologintext": "איר דארפֿט זיך אײַנשרײַבן און זײַן  [[Special:UserLogin|אַרײַנלאגירט]] צו באַוועגן א בלאַט.",
        "movenotallowed": "איר זענט נישט דערלויבט צו באוועגן בלעטער.",
        "movenotallowedfile": "איר האט נישט קיין רשות צו באוועגן טעקעס.",
        "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": "אימפארט",
        "tooltip-ca-undelete": "צוריק דרייען די ענדערונגען פון דעם בלאט פארן מעקן",
        "tooltip-ca-move": "באַוועגן דעם בלאַט",
        "tooltip-ca-watch": "לייגט צו דעם בלאט אויפצופאסן",
-       "tooltip-ca-unwatch": "נעמט אראפ דעם בלאט פון אויפפאסן",
+       "tooltip-ca-unwatch": "נעמט אַראָפּ דעם בלאַט פון נאָכפאָלג־ליסטע",
        "tooltip-search": "זוכט אינעם סייט",
        "tooltip-search-go": "גייט צו א בלאט מיט אט דעם נאמען, אויב ער עקסיסטירט",
        "tooltip-search-fulltext": "זוכט דעם טעקסט אין די בלעטער",
        "tooltip-feed-atom": "לייג צו אן אטאמאטישער אפדעיט דורך אטאם Atom",
        "tooltip-t-contributions": "אלע בײַשטײַערונגען פון דעם באניצער",
        "tooltip-t-emailuser": "שיקן א בליצבריוו צו דעם בַאניצער",
+       "tooltip-t-info": "נאָך אינפאָרמאַציע וועגן דעם בלאַט",
        "tooltip-t-upload": "ארויפלאדן טעקעס",
        "tooltip-t-specialpages": "אלע ספעציעלע בלעטער",
        "tooltip-t-print": "דרוק ווערסיע פון דעם בלאט",
        "pageinfo-robot-policy": "אינדעקסירן דורך ראבאטן",
        "pageinfo-robot-index": "דערלויבט",
        "pageinfo-robot-noindex": "נישט דערלויבט",
-       "pageinfo-views": "צאַל קוקן",
        "pageinfo-watchers": "!צאָל בלאט אויפֿפאַסער",
        "pageinfo-few-watchers": "ווינציקער ווי $1 {{PLURAL:$1|אויפֿפאסער}}",
        "pageinfo-redirects-name": "צאָל ווײַטערפירונגען צו דעם בלאט",
        "exif-urgency-low": "נידעריק ($1)",
        "exif-urgency-high": "הויך ($1)",
        "exif-urgency-other": "באניצער־דעפינירטע פריאריטעט ($1)",
-       "watchlistall2": "אַלע",
        "namespacesall": "אַלע",
        "monthsall": "אלע",
        "confirmemail": "באַשטעטיקט בליצפּאָסט אַדרעס",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|האט געביטן}} גרופע מיטגלידערשאפט פאר $3",
        "logentry-rights-autopromote": "$1 אויטאמאטיש  {{GENDER:$2|פראמאווירט}} פון $4 צו $5",
        "rightsnone": "(גארנישט)",
+       "revdelete-summary": "רעדאקטירונג קיצור",
        "feedback-bugornote": "ווען איר זענט גרייט צו באשרייבן א טעכנישן פראבלעם ביטע [$1 מעלדט א פעלער].\nאנדערש, קענט איר ניצן די גרינגע פארעם אונטן. מען וועט צולייגן אייער הערה צום בלאט \"[$3 $2]\", צוזאמען מיט אייער באניצער נאמען און וועלכן בלעטערער איר ניצט.",
        "feedback-subject": "טעמע:",
        "feedback-message": "מעלדונג:",
index 842cc1d..21dc246 100644 (file)
        "passwordreset-emailsent-capture": "E-mail àtúntò ọ̀rọ̀ìpamọ́ kan ti jẹ́ fífiránṣẹ́. Òhun nìyí nísàlẹ̀.",
        "passwordreset-emailerror-capture": "E-mail ìyípadà ọ̀rọ̀ìpamọ́ jẹ́ dídá, òhun lóhàn nísàlẹ̀ yìí, sùgbọ́n ìfiránṣẹ́ rẹ̀ sí {{GENDER:$2|oníṣe}} náà kùnà: $1",
        "changeemail": "Ìyípadà àdírẹ̀sì E-mail",
-       "changeemail-header": "Ìyípadà àdírẹ̀sì e-mail àkópamọ́",
        "changeemail-text": "Ẹ parí fọ́ọ̀mù yìí láti ṣèyípadà àdírẹ̀sì e-mail yín. Ẹ gbọ́dọ̀ tẹ ọ̀rọ̀ìpamọ́ yín láti ṣèmúdájú ìyípadà yìí.",
        "changeemail-no-info": "Ẹ gbódọ̀ wọlé láti bósí ojúewé yìí tààrà.",
        "changeemail-oldemail": "Àdírẹ̀sì E-mail ìsinsìnyí:",
        "changeemail-none": "(kòsí)",
        "changeemail-password": "Ọ̀rọ̀ìpamọ́ {{SITENAME}} yín:",
        "changeemail-submit": "Ìyípadà E-mail",
-       "changeemail-cancel": "Fagilé",
        "bold_sample": "Ìkọ kedere",
        "bold_tip": "Ìkọ kedere",
        "italic_sample": "Ìkọ italiki",
        "mergehistory-same-destination": "Ojúewé orísun àti ojúewé ìdópin kò gbọdọ̀ jẹ́ ìkannáà",
        "mergehistory-reason": "Ìdíẹ̀:",
        "mergelog": "Àkọọ́lẹ̀ ìdàpọ̀",
-       "pagemerge-logentry": "[[$1]] ti jẹ́ dídàpọ̀ sínúu [[$2]] (àwọn àtúnyẹ̀wò títí dé $3)",
        "revertmerge": "Ìdápadà ìdàpọ̀",
        "mergelogpagetext": "Nísàlẹ̀ ni àtòjọ àwọn ìdàpọ̀ àìpẹ́ ìtàn ojúewé kan sínú òmíràn.",
        "history-title": "Ìtàn àtúnyẹ̀wò fún \"$1\"",
        "searchrelated": "tóbáramu",
        "searchall": "gbogbo",
        "showingresults": "Ìfihàn nísàlẹ̀ títí dé {{PLURAL:$1|èsì '''1'''|àwọn èsì '''$1'''}} láti ìbẹ̀rẹ̀ ní #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Èsì '''$1''' nínú ''''$3'''|Àwọn èsì '''$1 - $2''' nínú '''$3'''}} fún '''$4'''",
        "search-nonefound": "Kò sí àwọn èsì kankan tóbáramu mọ́ ìtọrọ.",
        "powersearch-legend": "Àwárí kíkúnrẹ́rẹ́",
        "powersearch-ns": "Àwárí nínú orúkọàyè:",
        "statistics": "Àwọn statistiki",
        "statistics-header-pages": "Àwọn statistiki ojúewé",
        "statistics-header-edits": "Àwọn statistiki àtúnṣe",
-       "statistics-header-views": "Ẹ wo àwọn statístíkì",
        "statistics-header-users": "Àwọn statistiki oníṣe",
        "statistics-header-hooks": "Àwọn statistiki míràn",
        "statistics-articles": "Àwọn ojúewé àkóónú",
        "statistics-files": "Àwọn fáìlì ajẹ́rírùsókè",
        "statistics-edits": "Àwọn iye àtúnṣe ojúewé láti ìgbà tí {{SITENAME}} ti bẹ̀rẹ̀",
        "statistics-edits-average": "Iye àtúnṣe apínlàrin fún ojúewé kọ̀ọ̀kan",
-       "statistics-views-total": "Àpapọ̀ iye ìwò",
-       "statistics-views-total-desc": "Ìwò sí àwọn ojúewé tí kò sí àti àwọn ojúewé pàtàkì kò jẹ́ àmúpọ̀.",
-       "statistics-views-peredit": "Iye ìwò fún àtúnṣe kọ̀ọ̀kan",
        "statistics-users": "[[Special:ListUsers|Àwọn oníṣe]] ajẹ́fífilórúkọsílẹ̀",
        "statistics-users-active": "Àwọn oníṣe agbéṣe",
        "statistics-users-active-desc": "Àwọn oníṣe tí wọ́n ti ṣe ìgbéṣe kan ní {{PLURAL:$1|ọjọ́ kan|ọjọ́ $1}} sẹ́yìn",
-       "statistics-mostpopular": "Àwọn ojúewé tí wọ́n jẹ́ wíwò jùlọ",
        "pageswithprop": "Àwọn ojúewé tó ní ohun-ìní ojúewé",
        "pageswithprop-legend": "Àwọn ojúewé tó ní ohun-ìní ojúewé",
        "pageswithprop-text": "Ojúewé yìí ṣe àtòjọ àwọn ojúewé tó únlo ohun-ìní ojúewé pàtò kan.",
        "uncategorizedtemplates": "Àwọn àdàkọ aláìlẹ́ka",
        "unusedcategories": "Ẹ̀ka àìlò",
        "unusedimages": "Faili àìlò",
-       "popularpages": "Ojúewé tógbajúmọ̀",
        "wantedcategories": "Àwọn ẹ̀ka wíwá",
        "wantedpages": "Àwọn ojúewé àìsí",
        "wantedpages-badtitle": "Àkọlé aláìníìbámu nínú ìtò èsì: $1",
        "querypage-disabled": "Ojúewé pàtàkì yìí jẹ́ ìdálẹ́kun nítorí ìsiṣẹ́.",
        "booksources": "Àwọn orísun ìwé",
        "booksources-search-legend": "Àwáàrí fún áwọn ìwé ìtọ́ka",
-       "booksources-go": "Lọ",
        "booksources-text": "Nísàlẹ̀ ni àtòjọ àwọn àjápọ̀ mọ́ àwọn ibiìtakùn míràn tí wọ́n únta ìwé tuntun àti ìwé àtijọ́, wọ́n sì le ní ọ̀rọ̀ ẹ̀kúnrẹ́rẹ́ nípa àwọn ìwé tí ẹ únwá:",
        "booksources-invalid-isbn": "ISBN náà kò dà bíi pé ó jẹ́ oníìbámu; ẹ yẹ̀ ẹ́ wò bóyá àsìṣe wà láti ibi tó jẹ́ kíkọ wá.",
        "specialloguserlabel": "Olùṣe:",
        "wlheader-enotif": "Ìfitónilétí e-mail wà ní gbígbàláyè.",
        "wlheader-showupdated": "Àwọn ojúewé tí wọn ti yípadà látìgbà tí ẹ ṣàbẹ̀wò wọn gbẹ̀yìn jẹ́ fífihàn ní ''kedere'''",
        "wlnote": "Lábẹ́ {{PLURAL:$1|ni àtúnṣe tó gbẹ̀yìn|ni àwọn àtúnṣe '''$1''' tí wọn gbẹ̀yìn}} ní {{PLURAL:$2|wákàtí kan|wákàtí '''$2'''}} sẹ́yìn, títí dí ọjọ́ $3, $4.",
-       "wlshowlast": "Ìfihàn wákàtí $1 sẹ́yìn ọjọ́ $2 sẹ́yìn $3",
+       "wlshowlast": "Ìfihàn wákàtí $1 sẹ́yìn ọjọ́ $2 sẹ́yìn",
        "watchlist-options": "Àṣàyàn ìmójútọ́",
        "watching": "Ó ún mójútó...",
        "unwatching": "Jíjáwọ́ ìmójútó...",
        "import": "Ìkówọlé àwọn ojúewé",
        "importinterwiki": "Ìkówọlé láàrin àwọn wiki",
        "import-interwiki-text": "Ẹ mú wiki àti àkọlé ojúewé tí ẹ fẹ́ kówọlé.\nỌjọ́ àti orúkọ olùtúnṣe àtúnyẹ̀wò kò ní yàtọ̀.\nGbogbo ìkówọlé láàrin wiki jẹ́ kíkọsílẹ̀ sí [[Special:Log/import|àkọọ́lẹ̀ ìkówọlé]].",
-       "import-interwiki-source": "Orísún wiki/ojúewé:",
        "import-interwiki-history": "Ṣe àwòkọ gbogbo àwọn àtúnyẹ̀wò ìtàn fún ojúewé yìí",
        "import-interwiki-templates": "Ìmúpọ̀ gbogbo àwọn àdàkọ",
        "import-interwiki-submit": "Ìkówọlé",
        "pageinfo-robot-policy": "Ipò ẹ̀rọ ìṣàwárí",
        "pageinfo-robot-index": "Ṣíṣeéwárí",
        "pageinfo-robot-noindex": "Kò ṣeéwárí",
-       "pageinfo-views": "Iye àwọn ìwò",
        "pageinfo-watchers": "Iye àwọn olùṣọ́ ojúewé",
        "pageinfo-redirects-name": "Àwọn àtúnjúwe sí ojúewé yìí",
        "pageinfo-subpages-name": "Àwọn ojúewé tó wà lábẹ́ ojúewé yìí",
        "exif-urgency-normal": "Déédé ($1)",
        "exif-urgency-low": "Kúkúrú ($1)",
        "exif-urgency-high": "Gíga ($1)",
-       "watchlistall2": "gbogbo",
        "namespacesall": "gbogbo",
        "monthsall": "gbogbo",
        "confirmemail": "Ṣè'múdájú àdírẹ́ẹ̀sì e-mail",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|yí}} ọmọ ẹgbẹ́ padà fún $3",
        "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-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ṣẹ́:",
index 4b0d976..efba070 100644 (file)
        "passwordreset-emailsent-capture": "密碼重設電郵經已送出,下面有顯示。",
        "passwordreset-emailerror-capture": "密碼重設電郵經已送出,下面有顯示,但送畀{{GENDER:$2|user}}時失敗: $1",
        "changeemail": "改電郵地址",
-       "changeemail-header": "改戶口電郵地址",
        "changeemail-text": "填呢份表去改戶口電郵地址。你需要入密碼確認改動。",
        "changeemail-no-info": "你一定要簽到咗去直接入來呢一版。",
        "changeemail-oldemail": "而家個電郵地址:",
        "changeemail-none": "(冇)",
        "changeemail-password": "你{{SITENAME}}個密碼:",
        "changeemail-submit": "轉電郵",
-       "changeemail-cancel": "取消",
        "changeemail-throttled": "你試咗登入太多次,請喺$1後再試過。",
        "resettokens": "重設密匙",
        "resettokens-text": "您可以重設有關你戶口私隱資料嘅密匙。\n\n如果你唔小心洩漏密匙,或者戶口畀人入侵,就要重設密匙。",
        "mergehistory-same-destination": "來源頁同目的頁唔可以一樣",
        "mergehistory-reason": "原因:",
        "mergelog": "合併日誌",
-       "pagemerge-logentry": "合併咗[[$1]]去到[[$2]] (修訂截到$3)",
        "revertmerge": "反合併",
        "mergelogpagetext": "下面係一個最近由一版嘅修訂記錄合併到另一個嘅一覽。",
        "history-title": "「$1」嘅修訂歷史",
        "searchrelated": "有關",
        "searchall": "全部",
        "showingresults": "'自#'''$2'''起顯示最多'''$1'''個結果。",
-       "showingresultsheader": "對'''$4'''嘅{{PLURAL:$5|第'''$1'''到第'''$3'''項結果|第'''$1 - $2'''項,共'''$3'''項結果}}",
        "search-nonefound": "響個查詢度無結果配合。",
        "powersearch-legend": "進階搵嘢",
        "powersearch-ns": "喺以下嘅空間名度搵:",
        "statistics": "統計",
        "statistics-header-pages": "頁統計",
        "statistics-header-edits": "編輯統計",
-       "statistics-header-views": "參看統計",
        "statistics-header-users": "用戶統計",
        "statistics-header-hooks": "其它統計",
        "statistics-articles": "內容頁",
        "statistics-files": "已經上載咗嘅檔案",
        "statistics-edits": "自從{{SITENAME}}設定後嘅頁編輯數",
        "statistics-edits-average": "每一版平均編輯數",
-       "statistics-views-total": "查看總數",
-       "statistics-views-total-desc": "唔包唔存在頁面同特別頁嘅查看數",
-       "statistics-views-peredit": "每次編輯查看數",
        "statistics-users": "註冊咗嘅[[Special:ListUsers|用戶]]",
        "statistics-users-active": "活躍用戶",
        "statistics-users-active-desc": "響$1日前做過動作嘅用戶",
-       "statistics-mostpopular": "最多人睇嘅頁",
        "doubleredirects": "雙重跳轉",
        "doubleredirectstext": "每一行都順次序寫住第一頁名,佢嘅目的頁,同埋目的頁再指去邊度。改嘅時候,應該將第一個跳轉頁轉入第三頁。\n<del>劃咗</del>嘅項目係已經解決咗嘅。",
        "double-redirect-fixed-move": "[[$1]]已經搬好咗,佢而家跳轉過去[[$2]]。",
        "uncategorizedtemplates": "未有分類嘅模",
        "unusedcategories": "未用嘅分類",
        "unusedimages": "未用嘅檔案",
-       "popularpages": "受歡迎嘅頁面",
        "wantedcategories": "被徵求嘅分類",
        "wantedpages": "被徵求嘅頁面",
        "wantedpages-badtitle": "響結果組嘅無效標題: $1",
        "querypage-disabled": "呢個特別版基於效能嘅原因停用咗。",
        "booksources": "書籍來源",
        "booksources-search-legend": "搵書源",
-       "booksources-go": "去",
        "booksources-text": "以下嘅連結清單列出其它一啲賣新書同二手書嘅網站,可能可以提供到有關你想搵嘅書嘅更多資料:",
        "booksources-invalid-isbn": "個ISBN無效;請檢查原來源複製落來嘅錯。",
        "specialloguserlabel": "用戶:",
        "wlheader-enotif": "電子郵件通知已經啟用。",
        "wlheader-showupdated": "'''粗體字'''嘅頁響你上次嚟之後被人改過",
        "wlnote": "以下係最近'''$2'''個鐘之內嘅最新$1次修改。",
-       "wlshowlast": "顯示最近 $1 個鐘 $2 日 $3 嘅修改",
+       "wlshowlast": "顯示最近 $1 個鐘 $2 日  嘅修改",
        "watchlist-options": "監視清單選項",
        "watching": "監視緊...",
        "unwatching": "唔再監視緊...",
        "import": "倒入頁面",
        "importinterwiki": "Transwiki 倒入",
        "import-interwiki-text": "揀一個 wiki 同埋一頁去倒入。\n修訂日期同編輯者會被保存落嚟。\n所有 transwiki 嘅倒入動作會響[[Special:Log/import|倒入日誌]]度記錄落嚟。",
-       "import-interwiki-source": "來源 wiki/頁:",
        "import-interwiki-history": "複製呢一頁所有嘅歷史修訂",
        "import-interwiki-templates": "包含全部嘅模",
        "import-interwiki-submit": "倒入",
        "exif-gpsdestdistance-n": "浬",
        "exif-gpsdirection-t": "真實方向",
        "exif-gpsdirection-m": "地磁方向",
-       "watchlistall2": "全部",
        "namespacesall": "全部",
        "monthsall": "全部",
        "confirmemail": "確認電郵地址",
        "revdelete-restricted": "已經應用限制到操作員",
        "revdelete-unrestricted": "已經拎走對於操作員嘅限制",
        "rightsnone": "(冇)",
+       "revdelete-summary": "編輯摘要",
        "searchsuggest-search": "搵嘢",
        "searchsuggest-containing": "名單傳送緊...",
        "duration-hours": "$1{{PLURAL:$1|個鐘}}",
index 3405680..fc7409d 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Biŋhai",
-            "Hakka"
-        ]
-    },
-    "underline-never": "coengz mbouj swjyungh",
-    "sunday": "Swnggeiz Yaet",
-    "monday": "Swnggeiz Wtx",
-    "tuesday": "Swnggeiz Yeih",
-    "wednesday": "Swnggeiz Sam",
-    "thursday": "Swnggeiz Seiq",
-    "friday": "Swnggeiz Haj",
-    "saturday": "Swnggeiz Lokj",
-    "sun": "Ngoenz",
-    "mon": "It",
-    "tue": "Ngeih",
-    "wed": "Sam",
-    "thu": "Seiq",
-    "fri": "Ngux",
-    "sat": "Loeg",
-    "january": "Nin Wtj",
-    "february": "Nin Yeih",
-    "march": "Nin Sam",
-    "april": "Nin Seiq",
-    "may_long": "Nin Haj",
-    "june": "Nin Loekj",
-    "july": "Nin Caet",
-    "august": "Nin Betq",
-    "september": "Nin Gouj",
-    "october": "Nin Cwbx",
-    "november": "Nin Cwbx Wtj",
-    "december": "Nin Cwbx Yeih",
-    "january-gen": "It nyied",
-    "february-gen": "Ngeih nyied",
-    "march-gen": "Sam nyied",
-    "april-gen": "Seiq nyied",
-    "may-gen": "Nin Haj",
-    "june-gen": "Loeg nyied",
-    "july-gen": "Caet nyied",
-    "august-gen": "Bet nyied",
-    "september-gen": "Nin Gouj",
-    "october-gen": "Cib nyied",
-    "november-gen": "Cibit nyied",
-    "december-gen": "Cibngeih nyied",
-    "jan": "Itnyied",
-    "feb": "Ngeihnyied",
-    "mar": "Samnyied",
-    "apr": "Seiqnyied",
-    "may": "Nguxnyied",
-    "jun": "Loegnyied",
-    "jul": "Caetnyied",
-    "aug": "Batnyied",
-    "sep": "Goujnyied",
-    "oct": "Cibnyied",
-    "nov": "Cib'itnyied",
-    "dec": "Cibngeihnyied",
-    "pagecategories": "{{PLURAL:$1$1 aen|faendingz|faendingz}}",
-    "subcategories": "Faendingz lwgsai",
-    "about": "Gvendaengz",
-    "article": "Banjbienj",
-    "cancel": "Fwtqfex",
-    "mytalk": "Gaeq gou gangj",
-    "navigation": "Dazzaeuh",
-    "qbfind": "Ra",
-    "qbedit": "Gaij",
-    "qbmyoptions": "Yieb gou",
-    "faq": "Cam caeuq dap",
-    "faqpage": "Project:Cam caeuq dap",
-    "vector-action-delete": "Ca",
-    "vector-action-move": "Daen",
-    "vector-action-protect": "Bauj",
-    "vector-view-create": "Laeb",
-    "vector-view-edit": "gaij",
-    "vector-view-history": "Cazyawj lizsij",
-    "errorpagetitle": "Loengloek",
-    "tagline": "okcih {{SITENAME}}",
-    "help": "Bangcoh",
-    "search": "Cwmh",
-    "searchbutton": "Cwmh",
-    "go": "Bae",
-    "searcharticle": "Bae",
-    "history": "Lizsij",
-    "history_short": "Lizsij",
-    "printableversion": "Gojyaenq banj",
-    "permalink": "Gaeq-lamh kaemdaengz",
-    "edit": "gaij",
-    "create": "Laeb",
-    "delete": "Duz",
-    "protect": "Hahdiuz",
-    "protect_change": "gaij",
-    "newpage": "Bienj moq",
-    "talkpage": "Dunjlun yieb neix",
-    "talkpagelinktext": "Daujlun",
-    "personaltools": "Hongdawz bonjfaenh",
-    "talk": "Kwng",
-    "views": "Cazyawj",
-    "toolbox": "Loengx hong",
-    "jumpto": "Diuq bae",
-    "jumptonavigation": "Dazzaeuh",
-    "jumptosearch": "Ra",
-    "aboutsite": "Gvanhyih {{SITENAME}}",
-    "aboutpage": "Project:gvanhyih",
-    "currentevents": "Saehgienh seizneix",
-    "disclaimers": "gangjmingz mienxcwz",
-    "disclaimerpage": "Project:Itbuen mienxcwz",
-    "edithelp": "Caeuq mungz san-zonz",
-    "mainpage": "Yiebdaeuz",
-    "mainpage-description": "Yiebdeauz",
-    "policy-url": "Project:fuengcim",
-    "portal": "Segih",
-    "portal-url": "Project:seqgih",
-    "privacy": "Seiyaem cwngcwz",
-    "privacypage": "Project:Seiyaem cwngcwz",
-    "badaccess": "Loengloek gienzhanh",
-    "badaccess-group0": "Cingjgouz mwngz mbouj haengj ciuqguh.",
-    "badaccess-groups": "Cingjgouz mwngz hanh youq {{PLURAL:$2|neix|gijneix}} bouxyungh: $1",
-    "versionrequired": "Sihyau MediaWiki $1",
-    "versionrequiredtext": "Sihyau MediaWik $1 caengj daeng sawjyungh.",
-    "youhavenewmessages": "Mungz meiz $1($2)。",
-    "editsection": "gaij",
-    "editold": "gaij",
-    "editlink": "gaij",
-    "editsectionhint": "Gaij duenh:$1",
-    "showtoc": "yienh'ok",
-    "hidetoc": "cangz",
-    "nstab-main": "Feanzcieng",
-    "nstab-user": "Yieb bouxsawjyungq",
-    "nstab-project": "Yieb giva",
-    "nstab-image": "Vwnzgen",
-    "nstab-mediawiki": "Siuhsik",
-    "nstab-template": "Mozbanj",
-    "nstab-help": "Yieb bangcoh",
-    "nstab-category": "Faendingz",
-    "viewsource": "Liuq lagh mae-nej",
-    "yourname": "Ciu bouxdeiz:",
-    "yourpassword": "Mizmak:",
-    "login": "Dwnghluz",
-    "nav-login-createaccount": "dwngh haeuj/laebbaen canghu",
-    "userlogin": "Daengh haeuj/Laeb bouxdeiz",
-    "logout": "Doiq ok",
-    "userlogout": "Doiq ok",
-    "notloggedin": "Maengx laezhaej",
-    "nologinlink": "Laeb bouxdeiz",
-    "summary": "Saegmangj:",
-    "minoredit": "Di-nej gaij noix",
-    "watchthis": "Gamyawj yieb neix",
-    "savearticle": "Zonzdiuz mae-nej",
-    "showpreview": "Okqhaej piu-ngoengx",
-    "showdiff": "Okqhaej gaeqgaei",
-    "newarticle": "(Moq)",
-    "editundo": "siu",
-    "searchresults": "gietgoj ra",
-    "searchresults-title": "doiq \"$1\" gij gietgoj ra",
-    "search-interwiki-more": "(more)",
-    "powersearch-legend": "Gauhgiz saeu",
-    "powersearch-redir": "Cungzdinghyiengq liedbiuj",
-    "mypreferences": "Doenghgaeq gou hae",
-    "searchresultshead": "Cwmh",
-    "username": "Ciu bouxdeiz:",
-    "group-user-member": "{{GENDER:$1|Bouxsawjyungq}}",
-    "action-edit": "gaij yieb neix",
-    "recentchanges": "Gaeqgaij seizneix",
-    "diff": "Faenbied",
-    "hide": "Cangz",
-    "show": "Yienh'ok",
-    "minoreditletter": "n",
-    "newpageletter": "M",
-    "boteditletter": "g",
-    "recentchangeslinked": "Lienh ok gaengaij",
-    "upload": "Cienz vwnzgen",
-    "uploadnologin": "Maengx laezhaej",
-    "filedesc": "Saegmangj",
-    "fileuploadsummary": "Saegmangj:",
-    "uploadedimage": "senq cienz \"[[$1]]\"",
-    "watchthisupload": "Demq mae-nej",
-    "listfiles_user": "Bouxyungh",
-    "filehist-current": "seizneix",
-    "filehist-datetime": "Ngoenz/Seizgan",
-    "filehist-user": "Bouxsawjyungh",
-    "filehist-comment": "Gejgangj",
-    "randompage": "Mae zaihzex",
-    "statistics-pages": "Yieb",
-    "nbytes": "$1 {{PLURAL:$1|cihciet|cihciet}}",
-    "newpages": "Yieb moq",
-    "newpages-username": "Ciu bouxdeiz:",
-    "move": "Daen",
-    "movethispage": "Caen mae nej",
-    "booksources-go": "Bae",
-    "log": "Ngoenzceiq",
-    "allpages": "Sojmiz yieb",
-    "allarticles": "Sojmiz yieb",
-    "allpagessubmit": "Bae",
-    "watchlist": "Yieb gou yawj",
-    "mywatchlist": "Gaeq gou demq",
-    "watchnologin": "Maengx laezhaej",
-    "watch": "Demq",
-    "watchthispage": "Demq mae-nej",
-    "watching": "Bawxndu……",
-    "unwatching": "Souma bawxndu……",
-    "prot_1movedto2": "[[$1]] caen bei [[$2]]",
-    "restriction-move": "Caen",
-    "namespace": "ndawhoengq mingzcih:",
-    "blanknamespace": "(Cujyau)",
-    "contributions": "Gaeq bouxdeiz haej",
-    "mycontris": "Gaeq gou haej",
-    "uctop": "(dingz)",
-    "sp-contributions-submit": "Ra",
-    "whatlinkshere": "Maelaez lamh haenznej",
-    "whatlinkshere-page": "Yieb:",
-    "ipblocklist-submit": "Cwmh",
-    "contribslink": "gung'yen",
-    "move-page-legend": "Caen doengh mae",
-    "movearticle": "Caen doengh mae:",
-    "move-watch": "Demq mae-nej",
-    "movepagebtn": "Caen doengh mae",
-    "movereason": "Haujgaemj",
-    "revertmove": "siu",
-    "tooltip-pt-mytalk": "Yieb daujlun mwngz",
-    "tooltip-pt-preferences": "Doenghgaeq gou hae",
-    "tooltip-pt-logout": "Doiq ok",
-    "tooltip-ca-talk": "Gvanhyih cingqfaenz yieb gij daojun",
-    "tooltip-ca-history": "yieb neix gij banj lizsij",
-    "tooltip-ca-move": "Dean yieb neix",
-    "tooltip-search": "Ra {{SITENAME}}",
-    "tooltip-p-logo": "Mae meh",
-    "tooltip-n-mainpage": "Raen Yiebdaeuz",
-    "tooltip-n-randompage": "Cang haeuj yieb seizgih",
-    "tooltip-n-help": "Cimh gouz bangcoh",
-    "tooltip-t-upload": "Cienz vwnzgen",
-    "tooltip-ca-nstab-main": "Cazyawj ndawyungz yieb",
-    "ilsubmit": "Cwmh",
-    "watchlistall2": "cenzbu",
-    "namespacesall": "cenzbu",
-    "monthsall": "cenzbu",
-    "imgmultigo": "Bei!",
-    "table_pager_limit_submit": "Bei",
-    "watchlisttools-view": "Cazyawj gaij mizgven",
-    "specialpages": "Doenghmae daegxsei",
-    "tags-edit": "gaij"
+       "@metadata": {
+               "authors": [
+                       "Biŋhai",
+                       "Hakka"
+               ]
+       },
+       "underline-never": "coengz mbouj swjyungh",
+       "sunday": "Swnggeiz Yaet",
+       "monday": "Swnggeiz Wtx",
+       "tuesday": "Swnggeiz Yeih",
+       "wednesday": "Swnggeiz Sam",
+       "thursday": "Swnggeiz Seiq",
+       "friday": "Swnggeiz Haj",
+       "saturday": "Swnggeiz Lokj",
+       "sun": "Ngoenz",
+       "mon": "It",
+       "tue": "Ngeih",
+       "wed": "Sam",
+       "thu": "Seiq",
+       "fri": "Ngux",
+       "sat": "Loeg",
+       "january": "Nin Wtj",
+       "february": "Nin Yeih",
+       "march": "Nin Sam",
+       "april": "Nin Seiq",
+       "may_long": "Nin Haj",
+       "june": "Nin Loekj",
+       "july": "Nin Caet",
+       "august": "Nin Betq",
+       "september": "Nin Gouj",
+       "october": "Nin Cwbx",
+       "november": "Nin Cwbx Wtj",
+       "december": "Nin Cwbx Yeih",
+       "january-gen": "It nyied",
+       "february-gen": "Ngeih nyied",
+       "march-gen": "Sam nyied",
+       "april-gen": "Seiq nyied",
+       "may-gen": "Nin Haj",
+       "june-gen": "Loeg nyied",
+       "july-gen": "Caet nyied",
+       "august-gen": "Bet nyied",
+       "september-gen": "Nin Gouj",
+       "october-gen": "Cib nyied",
+       "november-gen": "Cibit nyied",
+       "december-gen": "Cibngeih nyied",
+       "jan": "Itnyied",
+       "feb": "Ngeihnyied",
+       "mar": "Samnyied",
+       "apr": "Seiqnyied",
+       "may": "Nguxnyied",
+       "jun": "Loegnyied",
+       "jul": "Caetnyied",
+       "aug": "Batnyied",
+       "sep": "Goujnyied",
+       "oct": "Cibnyied",
+       "nov": "Cib'itnyied",
+       "dec": "Cibngeihnyied",
+       "pagecategories": "{{PLURAL:$1$1 aen|faendingz|faendingz}}",
+       "subcategories": "Faendingz lwgsai",
+       "about": "Gvendaengz",
+       "article": "Banjbienj",
+       "cancel": "Fwtqfex",
+       "mytalk": "Gaeq gou gangj",
+       "navigation": "Dazzaeuh",
+       "qbfind": "Ra",
+       "qbedit": "Gaij",
+       "qbmyoptions": "Yieb gou",
+       "faq": "Cam caeuq dap",
+       "faqpage": "Project:Cam caeuq dap",
+       "errorpagetitle": "Loengloek",
+       "tagline": "okcih {{SITENAME}}",
+       "help": "Bangcoh",
+       "search": "Cwmh",
+       "searchbutton": "Cwmh",
+       "go": "Bae",
+       "searcharticle": "Bae",
+       "history": "Lizsij",
+       "history_short": "Lizsij",
+       "printableversion": "Gojyaenq banj",
+       "permalink": "Gaeq-lamh kaemdaengz",
+       "edit": "gaij",
+       "create": "Laeb",
+       "delete": "Duz",
+       "protect": "Hahdiuz",
+       "protect_change": "gaij",
+       "newpage": "Bienj moq",
+       "talkpage": "Dunjlun yieb neix",
+       "talkpagelinktext": "Daujlun",
+       "personaltools": "Hongdawz bonjfaenh",
+       "talk": "Kwng",
+       "views": "Cazyawj",
+       "toolbox": "Loengx hong",
+       "jumpto": "Diuq bae",
+       "jumptonavigation": "Dazzaeuh",
+       "jumptosearch": "Ra",
+       "aboutsite": "Gvanhyih {{SITENAME}}",
+       "aboutpage": "Project:gvanhyih",
+       "currentevents": "Saehgienh seizneix",
+       "disclaimers": "gangjmingz mienxcwz",
+       "disclaimerpage": "Project:Itbuen mienxcwz",
+       "edithelp": "Caeuq mungz san-zonz",
+       "mainpage": "Yiebdaeuz",
+       "mainpage-description": "Yiebdeauz",
+       "policy-url": "Project:fuengcim",
+       "portal": "Segih",
+       "portal-url": "Project:seqgih",
+       "privacy": "Seiyaem cwngcwz",
+       "privacypage": "Project:Seiyaem cwngcwz",
+       "badaccess": "Loengloek gienzhanh",
+       "badaccess-group0": "Cingjgouz mwngz mbouj haengj ciuqguh.",
+       "badaccess-groups": "Cingjgouz mwngz hanh youq {{PLURAL:$2|neix|gijneix}} bouxyungh: $1",
+       "versionrequired": "Sihyau MediaWiki $1",
+       "versionrequiredtext": "Sihyau MediaWik $1 caengj daeng sawjyungh.",
+       "youhavenewmessages": "Mungz meiz $1($2)。",
+       "editsection": "gaij",
+       "editold": "gaij",
+       "editlink": "gaij",
+       "editsectionhint": "Gaij duenh:$1",
+       "showtoc": "yienh'ok",
+       "hidetoc": "cangz",
+       "nstab-main": "Feanzcieng",
+       "nstab-user": "Yieb bouxsawjyungq",
+       "nstab-project": "Yieb giva",
+       "nstab-image": "Vwnzgen",
+       "nstab-mediawiki": "Siuhsik",
+       "nstab-template": "Mozbanj",
+       "nstab-help": "Yieb bangcoh",
+       "nstab-category": "Faendingz",
+       "viewsource": "Liuq lagh mae-nej",
+       "yourname": "Ciu bouxdeiz:",
+       "yourpassword": "Mizmak:",
+       "login": "Dwnghluz",
+       "nav-login-createaccount": "dwngh haeuj/laebbaen canghu",
+       "userlogin": "Daengh haeuj/Laeb bouxdeiz",
+       "logout": "Doiq ok",
+       "userlogout": "Doiq ok",
+       "notloggedin": "Maengx laezhaej",
+       "nologinlink": "Laeb bouxdeiz",
+       "summary": "Saegmangj:",
+       "minoredit": "Di-nej gaij noix",
+       "watchthis": "Gamyawj yieb neix",
+       "savearticle": "Zonzdiuz mae-nej",
+       "showpreview": "Okqhaej piu-ngoengx",
+       "showdiff": "Okqhaej gaeqgaei",
+       "newarticle": "(Moq)",
+       "editundo": "siu",
+       "searchresults": "gietgoj ra",
+       "searchresults-title": "doiq \"$1\" gij gietgoj ra",
+       "search-interwiki-more": "(more)",
+       "powersearch-legend": "Gauhgiz saeu",
+       "mypreferences": "Doenghgaeq gou hae",
+       "searchresultshead": "Cwmh",
+       "username": "Ciu bouxdeiz:",
+       "group-user-member": "{{GENDER:$1|Bouxsawjyungq}}",
+       "action-edit": "gaij yieb neix",
+       "recentchanges": "Gaeqgaij seizneix",
+       "diff": "Faenbied",
+       "hide": "Cangz",
+       "show": "Yienh'ok",
+       "minoreditletter": "n",
+       "newpageletter": "M",
+       "boteditletter": "g",
+       "recentchangeslinked": "Lienh ok gaengaij",
+       "upload": "Cienz vwnzgen",
+       "uploadnologin": "Maengx laezhaej",
+       "filedesc": "Saegmangj",
+       "fileuploadsummary": "Saegmangj:",
+       "watchthisupload": "Demq mae-nej",
+       "listfiles_user": "Bouxyungh",
+       "filehist-current": "seizneix",
+       "filehist-datetime": "Ngoenz/Seizgan",
+       "filehist-user": "Bouxsawjyungh",
+       "filehist-comment": "Gejgangj",
+       "randompage": "Mae zaihzex",
+       "statistics-pages": "Yieb",
+       "nbytes": "$1 {{PLURAL:$1|cihciet|cihciet}}",
+       "newpages": "Yieb moq",
+       "newpages-username": "Ciu bouxdeiz:",
+       "move": "Daen",
+       "movethispage": "Caen mae nej",
+       "log": "Ngoenzceiq",
+       "allpages": "Sojmiz yieb",
+       "allarticles": "Sojmiz yieb",
+       "allpagessubmit": "Bae",
+       "watchlist": "Yieb gou yawj",
+       "mywatchlist": "Gaeq gou demq",
+       "watchnologin": "Maengx laezhaej",
+       "watch": "Demq",
+       "watchthispage": "Demq mae-nej",
+       "watching": "Bawxndu……",
+       "unwatching": "Souma bawxndu……",
+       "prot_1movedto2": "[[$1]] caen bei [[$2]]",
+       "restriction-move": "Caen",
+       "namespace": "ndawhoengq mingzcih:",
+       "blanknamespace": "(Cujyau)",
+       "contributions": "Gaeq bouxdeiz haej",
+       "mycontris": "Gaeq gou haej",
+       "uctop": "(dingz)",
+       "sp-contributions-submit": "Ra",
+       "whatlinkshere": "Maelaez lamh haenznej",
+       "whatlinkshere-page": "Yieb:",
+       "ipblocklist-submit": "Cwmh",
+       "contribslink": "gung'yen",
+       "move-page-legend": "Caen doengh mae",
+       "movearticle": "Caen doengh mae:",
+       "move-watch": "Demq mae-nej",
+       "movepagebtn": "Caen doengh mae",
+       "movereason": "Haujgaemj",
+       "revertmove": "siu",
+       "tooltip-pt-mytalk": "Yieb daujlun mwngz",
+       "tooltip-pt-preferences": "Doenghgaeq gou hae",
+       "tooltip-pt-logout": "Doiq ok",
+       "tooltip-ca-talk": "Gvanhyih cingqfaenz yieb gij daojun",
+       "tooltip-ca-history": "yieb neix gij banj lizsij",
+       "tooltip-ca-move": "Dean yieb neix",
+       "tooltip-search": "Ra {{SITENAME}}",
+       "tooltip-p-logo": "Mae meh",
+       "tooltip-n-mainpage": "Raen Yiebdaeuz",
+       "tooltip-n-randompage": "Cang haeuj yieb seizgih",
+       "tooltip-n-help": "Cimh gouz bangcoh",
+       "tooltip-t-upload": "Cienz vwnzgen",
+       "tooltip-ca-nstab-main": "Cazyawj ndawyungz yieb",
+       "ilsubmit": "Cwmh",
+       "namespacesall": "cenzbu",
+       "monthsall": "cenzbu",
+       "imgmultigo": "Bei!",
+       "table_pager_limit_submit": "Bei",
+       "watchlisttools-view": "Cazyawj gaij mizgven",
+       "specialpages": "Doenghmae daegxsei",
+       "tags-edit": "gaij"
 }
index e99e9f2..42d4ba1 100644 (file)
        "templatesusedpreview": "Sjabloon'n gebruukt in deêze voevertoônieng:",
        "templatesusedsection": "Sjabloon'n die an gebruukt worn in deêze subkop:",
        "template-protected": "(beveiligd)",
-       "template-semiprotected": "(semi-beveiligd)",
+       "template-semiprotected": "(semibeveiligd)",
        "hiddencategories": "Deêze pagina val in de volhende verborhen {{PLURAL:$1|categorie|categorieën}}:",
        "nocreatetext": "{{SITENAME}} ei de meuhlijkeid om nieuwe pagina's an te maeken beperkt.\nJe kan a bestaende pagina's wiezigen, of je kan [[Special:UserLogin|jen eihen anmelden of een gebruker  anmaeken]].",
        "nocreate-loggedin": "Je kan hin nieuwe pagina's anmaeken.",
        "mergehistory-autocomment": "[[:$1]] saemenevoegd ni [[:$2]]",
        "mergehistory-comment": "[[:$1]] saemenevoegd ni [[:$2]]: $3",
        "mergelog": "Saemenvoehiengslogboek",
-       "pagemerge-logentry": "voehen [[$1]] ni [[$2]] saemen (versies tot en met $3)",
        "revertmerge": "Saemenvoehieng onhedaen maeken",
        "mergelogpagetext": "Ieronder zie je een lieste van recente saemenvoehiengen van een paginaheschiedenisse ni een aorn.",
        "history-title": "Heschiedenisse van \"$1\"",
        "searchrelated": "gerelateerd",
        "searchall": "aolle",
        "showingresults": "Ieronder {{PLURAL:$1|sti '''1''' resultaot|staen '''$1''' resultaoten}} vanof #'''$2'''.",
-       "showingresultsheader": "{{PLURAL:$5|Resultaot '''$1''' von '''$3'''|Resultaot'n '''$1 - $2''' von '''$3'''}} vò '''$4'''",
        "search-nonefound": "Er zin geen resultaot'n vò je zoekopdracht.",
        "powersearch-legend": "Uutebreid zoeken",
        "search-external": "Extern zoeken",
        "pager-older-n": "{{PLURAL:$1|1 ouwere|$1 ouwere}}",
        "booksources": "Bronnen vò boeken",
        "booksources-search-legend": "Bronn'n en informaosie over 'n boek zoek'n",
-       "booksources-go": "OK",
        "specialloguserlabel": "Gebruker:",
        "log": "Logboek'n",
        "alllogstext": "Saemengesteld overzicht van de wis-, bescherm-, blokkeer- en gebrukerslechtenlogboeken.\nJe kan 't overzicht bepaelen deu 'n soôrte logboek, 'n gebrukersnaem of eên bladzie uut te kiezen.",
        "watchthispage": "Bekiek deêze bladzie",
        "unwatch": "Nie meêr volge",
        "watchlist-details": "Er {{PLURAL:$1|sti eên pagina|staen $1 pagina's}} op je volglieste, exclusief overlegpagina's.",
-       "wlshowlast": "Laetste $1 uur, $2 daegen bekieken ($3)",
+       "wlshowlast": "Laetste $1 uur, $2 daegen bekieken ()",
        "watchlist-options": "Opties vò volglieste",
        "actioncomplete": "Actie uutgevoerd",
        "actionfailed": "De handelienge is mislukt.",
        "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.",
        "metadata-fields": "De aofbildiengsmetadataveld'n in dit bericht worr'n oôk weergegeev'n op 'n aofbildiengspagina as de metadatatabel ingeklapt is.\nAorre veld'n worr'n verborr'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",
-       "watchlistall2": "aol",
        "namespacesall": "aol",
        "monthsall": "aolle",
        "imgmultipageprev": "← vorrege bladzie",
        "tag-filter": "[[Special:Tags|Labelfilter]]:",
        "revdelete-restricted": "ei beperkiengen an beheêrders opeleid",
        "revdelete-unrestricted": "ei beperkiengen voe beheêrders opeheven",
-       "rightsnone": "(hin)"
+       "rightsnone": "(hin)",
+       "revdelete-summary": "saemenvattieng bewerken"
 }
index 055ab1b..78f36cd 100644 (file)
@@ -79,7 +79,8 @@
                        "Impersonator 1",
                        "Duolaimi",
                        "TianyinLee",
-                       "NigelSoft"
+                       "NigelSoft",
+                       "Zhuyifei1999"
                ]
        },
        "tog-underline": "链接下划线:",
        "october-date": "10月$1日",
        "november-date": "11月$1日",
        "december-date": "12月$1日",
-       "pagecategories": "{{PLURAL:$1|分类}}",
+       "pagecategories": "{{PLURAL:$1|分类}}",
        "category_header": "分类“$1”中的页面",
        "subcategories": "子分类",
        "category-media-header": "分类“$1”中的媒体文件",
-       "category-empty": "<em>本分类目前没有包含页面或媒体文件。</em>",
-       "hidden-categories": "{{PLURAL:$1|隐藏分类}}",
+       "category-empty": "<em>本分类目前没有包含任何页面或媒体文件。</em>",
+       "hidden-categories": "{{PLURAL:$1|隐藏分类}}",
        "hidden-category-category": "隐藏分类",
        "category-subcat-count": "{{PLURAL:$2|本分类只有以下子分类。|本分类有以下$1个子分类,共有$2个子分类。}}",
        "category-subcat-count-limited": "本分类有以下{{PLURAL:$1|子分类|$1个子分类}}。",
        "variants": "变种",
        "navigation-heading": "导航菜单",
        "errorpagetitle": "错误",
-       "returnto": "返回$1。",
+       "returnto": "返回$1。",
        "tagline": "来自{{SITENAME}}",
        "help": "帮助",
        "search": "搜索",
        "otherlanguages": "其他语言",
        "redirectedfrom": "(重定向自$1)",
        "redirectpagesub": "重定向页面",
+       "redirectto": "重定向至:",
        "lastmodifiedat": "本页面最后修改于$1 $2。",
        "viewcount": "本页面已经被访问过$1次。",
        "protectedpage": "受保护页面",
        "jumpto": "跳转至:",
        "jumptonavigation": "导航",
        "jumptosearch": "搜索",
-       "view-pool-error": "对不起,服务器当前正超负荷运转。过多用户正尝试查看本页面。请在再次尝试访问本页面前稍等片刻。\n\n$1",
-       "generic-pool-error": "对不起,服务器目前超负荷运转。太多用户尝试查看本页面。请稍等片刻再重新尝试。",
+       "view-pool-error": "对不起,服务器当前正超负荷运转。正在尝试查看本页面的用户过多。在重新尝试访问本页面之前,请您稍等片刻。\n\n$1",
+       "generic-pool-error": "对不起,服务器当前正超负荷运转。正在尝试查看本资源的用户过多。在重新尝试访问本资源之前,请您稍等片刻。",
        "pool-timeout": "等待锁超时",
        "pool-queuefull": "请求队列已满",
        "pool-errorunknown": "未知错误",
        "aboutsite": "关于{{SITENAME}}",
        "aboutpage": "Project:关于",
        "copyright": "除非另有声明,本网站内容采用$1授权。",
-       "copyrightpage": "{{ns:project}}:著作权",
+       "copyrightpage": "{{ns:project}}:权",
        "currentevents": "新闻动态",
        "currentevents-url": "Project:新闻动态",
        "disclaimers": "免责声明",
        "mainpage": "首页",
        "mainpage-description": "首页",
        "policy-url": "Project:方针",
-       "portal": "社区主页",
-       "portal-url": "Project:社区专页",
-       "privacy": "é\9a\90ç§\81æ\9d\83æ\94¿ç­\96",
+       "portal": "社区门户",
+       "portal-url": "Project:社区门户",
+       "privacy": "隐私政策",
        "privacypage": "Project:隐私权政策",
        "badaccess": "权限错误",
-       "badaccess-group0": "你被ç¦\81æ­¢æ\89§è¡\8cä½ å\88\9aæ\89\8d请求的操作。",
-       "badaccess-groups": "您请求的操作仅限属于{{PLURAL:$2|该用户组|这些用户组}}的用户执行:$1",
+       "badaccess-group0": "ä¸\8då\85\81许æ\82¨æ\89§è¡\8cæ\82¨æ\89\80请求的操作。",
+       "badaccess-groups": "您所请求的操作仅限于{{PLURAL:$2|该|这些}}用户组的用户使用:$1",
        "versionrequired": "需要$1版本的MediaWiki",
-       "versionrequiredtext": "使用本页需要$1版本的MediaWiki。请见[[Special:Version|版本页面]]。",
+       "versionrequiredtext": "使用本页需要$1版本的MediaWiki。请见[[Special:Version|版本页面]]。",
        "ok": "确定",
        "backlinksubtitle": "←$1",
        "retrievedfrom": "取自“$1”",
        "viewsourceold": "查看源代码",
        "editlink": "编辑",
        "viewsourcelink": "查看源代码",
-       "editsectionhint": "编辑段落:$1",
+       "editsectionhint": "编辑小节:$1",
        "toc": "目录",
        "showtoc": "显示",
        "hidetoc": "隐藏",
        "collapsible-collapse": "折叠",
        "collapsible-expand": "展开",
-       "confirmable-confirm": "{{GENDER:$1|}}确定么?",
+       "confirmable-confirm": "{{GENDER:$1|}}确定么?",
        "confirmable-yes": "是",
        "confirmable-no": "否",
        "thisisdeleted": "查看或还原$1?",
        "nstab-special": "特殊页面",
        "nstab-project": "项目页面",
        "nstab-image": "文件",
-       "nstab-mediawiki": "息",
+       "nstab-mediawiki": "息",
        "nstab-template": "模板",
        "nstab-help": "帮助页面",
        "nstab-category": "分类",
-       "nosuchaction": "无该命令",
-       "nosuchactiontext": "URLæ\8c\87å®\9aç\9a\84æ\93\8dä½\9cæ\97 æ\95\88ã\80\82ä½ å\8f¯è\83½è¾\93å\85¥äº\86é\94\99误ç\9a\84URLå\9c°å\9d\80ï¼\8cæ\88\96æ\98¯ç\82¹å\87»äº\86é\94\99误ç\9a\84é\93¾æ\8e¥ã\80\82è¿\99ä¹\9få\8f¯è\83½è¡¨æ\98\8e{{SITENAME}}使ç\94¨ç\9a\84软件ç\9a\84å­\98å\9c¨æ¼\8fæ´\9eï¼\88bugï¼\89。",
+       "nosuchaction": "无此操作",
+       "nosuchactiontext": "URLæ\89\80æ\8c\87å®\9aç\9a\84æ\93\8dä½\9cæ\97 æ\95\88ã\80\82ä½ æ\89\80è¾\93å\85¥ç\9a\84URLå\9c°å\9d\80å\8f¯è\83½æ\9c\89误ï¼\8cæ\88\96æ\98¯ä½¿ç\94¨äº\86é\94\99误ç\9a\84é\93¾æ\8e¥ã\80\82è¿\99ä¹\9få\8f¯è\83½è¡¨ç¤º{{SITENAME}}æ\89\80使ç\94¨è½¯ä»¶ä¹\8b中å­\98å\9c¨æ¼\8fæ´\9e。",
        "nosuchspecialpage": "此特殊页面不存在",
-       "nospecialpagetext": "<strong>您请求了一个无效的特殊页面。</strong>\n\n有效的特殊页面的列表可以在[[Special:SpecialPages|{{int:specialpages}}]]找到。",
-       "error": "出错",
+       "nospecialpagetext": "<strong>您请求了一个无效的特殊页面。</strong>\n\n在[[Special:SpecialPages|{{int:specialpages}}]可以]找到有效的特殊页面的列表。",
+       "error": "错误",
        "databaseerror": "数据库错误",
-       "databaseerror-text": "数据库查询出错。这可能表明软件中存在漏洞(bug)。",
-       "databaseerror-textcl": "数据库查询出错。",
+       "databaseerror-text": "出现数据库查询错误。这可能表示软件中存在漏洞。",
+       "databaseerror-textcl": "出现数据库查询错误。",
        "databaseerror-query": "查询:$1",
        "databaseerror-function": "函数:$1",
-       "databaseerror-error": "出错:$1",
-       "laggedslavemode": "'''警告:'''页面可能没有包含最近的更新。",
-       "readonly": "数据库锁定",
-       "enterlockreason": "请输入锁定的原因(包括预计解锁的时间)",
-       "readonlytext": "数据库当前被锁定,不能添加新条目或进行其他修改,锁定可能是因为例行的数据库维护,完成后即可恢复正常。\n\n锁定数据库的管理员提供的解释:$1",
+       "databaseerror-error": "错误:$1",
+       "laggedslavemode": "'''警告:'''页面可能没有包含最近的更新。",
+       "readonly": "数据库锁定",
+       "enterlockreason": "请输入锁定原因,包括预计解锁的时间",
+       "readonlytext": "数据库当前被锁定,不能添加新条目或进行其他修改,锁定可能是因为例行的数据库维护,完成后即可恢复正常。\n\n锁定数据库的管理员提供的解释:$1",
        "missing-article": "数据库找不到预期的页面文字:“$1”$2。\n\n这通常是由于点击了链向旧有差异或历史的链接,而原有版本已被删除导致的。\n\n如果情况不是这样,您可能找到了软件的一个内部错误。请记录下URL地址,并向[[Special:ListUsers/sysop|管理员]]报告。",
        "missingarticle-rev": "(版本#:$1)",
        "missingarticle-diff": "(差异:$1,$2)",
        "viewsourcetext": "您可以查看并复制此页面的源代码:",
        "viewyourtext": "您可以查看并复制<strong>您对此页面作出编辑后</strong>的源代码:",
        "protectedinterface": "该页提供此wiki软件的界面文字,它已被保护以防止恶意修改。\n如欲修改所有wiki的翻译,请到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化计划。",
-       "editinginterface": "'''警告:'''您正在编辑的页面是用于提供软件的界面文字。\n改变此页将影响其他在此wiki上的用户界面外观。\n如欲修改所有wiki的翻译,请到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化计划。",
-       "cascadeprotected": "本页面已经受到保护,不能编辑,因为它被嵌入了以下启用“级联”选项的受保护{{PLURAL:$1|页面}}:$2",
+       "editinginterface": "<strong>警告:</strong>您正在编辑用于提供软件的界面文字的页面。改变此页将影响其他在此wiki上其他用户的用户界面外观。",
+       "translateinterface": "要加入或更改所有wiki的翻译,请访问MediaWiki本地化项目网站[//translatewiki.net/ translatewiki.net]。",
+       "cascadeprotected": "本页面已经受到保护,不能编辑,因为它包含于以下被“连锁保护”的{{PLURAL:$1|页面}}:\n$2",
        "namespaceprotected": "您没有权限编辑'''$1'''名字空间内的页面。",
        "customcssprotected": "您没有权限编辑此CSS页面,因为它包含另一位用户的个人设置。",
        "customjsprotected": "您没有权限编辑此JavaScript页面,因为它包含另一位用户的个人设置。",
        "createaccount-text": "有人在{{SITENAME}}中利用您的邮箱创建了一个名为 \"$2\" 的新帐户($4),密码是 \"$3\" 。您应该立即登录并更改密码。\n\n如果该账户创建错误的话,您可以忽略此信息。",
        "login-throttled": "你最近尝试登录的次数过多。请等待$1后再试。",
        "login-abort-generic": "登录失败 - 已终止",
+       "login-migrated-generic": "您的账户已被迁移,并且您的用户名在此wiki不再存在。",
        "loginlanguagelabel": "语言:$1",
        "suspicious-userlogout": "注销请求被拒绝,因为它似乎是由有设计缺陷的浏览器或缓存代理发出的。",
        "createacct-another-realname-tip": "真实姓名是选填项目。\n如果你选择提供它,它将会用于贡献署名。",
        "passwordreset-capture-help": "如果您选中此框,电子邮件(包括临时密码)将显示,并发送给用户。",
        "passwordreset-email": "电子邮件地址:",
        "passwordreset-emailtitle": "在 {{SITENAME}} 的帐户详细信息",
-       "passwordreset-emailtext-ip": "有人(可能是您,来自IP地址$1)请求重设{{SITENAME}}($4)上相关账户的密码。{{PLURAL:$3|以下账户|此账户}}与该电子邮件地址关联:\n\n$2\n\n这个临时密码将会在{{PLURAL:$5|一天|$5天}}后过期。请立即登录并设置新的密码。如果请求是其他人发出的,或者您已回忆起您的旧密码并不再需要更改,您可以忽略本条消息并继续使用原密码。",
+       "passwordreset-emailtext-ip": "有人(可能是您,来自IP地址$1)请求重设{{SITENAME}}($4)上相关账户的密码。以下$3个账户与该电子邮件地址关联:\n\n$2\n\n这个临时密码将会在{{PLURAL:$5|一天|$5天}}后过期。请立即登录并设置新的密码。如果请求是其他人发出的,或者您已回忆起您的旧密码并不再需要更改,您可以忽略本条消息并继续使用原密码。",
        "passwordreset-emailtext-user": "用户$1请求重设{{SITENAME}}($4)上您的账户的密码。{{PLURAL:$3|以下账户|此账户}}与该电子邮件地址关联:\n\n$2\n\n这个临时密码将会在{{PLURAL:$5|一天|$5天}}后过期。请立即登录并设置新的密码。如果请求是其他人发出的,或者您已回忆起您的旧密码并不再需要更改,您可以忽略本条消息并继续使用原密码。",
        "passwordreset-emailelement": "用户名:$1\n临时密码:$2",
        "passwordreset-emailsent": "密码重置邮件已发送。",
        "passwordreset-emailsent-capture": "密码重设电子邮件已发送,并在下面显示。",
        "passwordreset-emailerror-capture": "重置密码邮件已生成,但是无法向{{GENDER:$2|下列用户}} 发送:$1",
        "changeemail": "更改电子邮件地址",
-       "changeemail-header": "更改账户电子邮件地址",
        "changeemail-text": "完成该表格以更改你的电子邮件地址。你需要输入你的密码以确认该更改。",
        "changeemail-no-info": "\n您必须登录以直接访问本页。",
        "changeemail-oldemail": "当前电子邮件地址:",
        "changeemail-none": "(无)",
        "changeemail-password": "你的{{SITENAME}}密码:",
        "changeemail-submit": "更改电子邮件地址",
-       "changeemail-cancel": "取消",
        "changeemail-throttled": "您最近尝试了太多次登录。请等待$1后再试。",
        "resettokens": "重置密钥",
        "resettokens-text": "你可以在这里重置允许访问与你的账户有关的特定私人数据的密钥。\n\n如果你意外将它们分享给他人,或是你的账户已经被入侵,你应该重置它们。",
        "showpreview": "显示预览",
        "showdiff": "显示更改",
        "blankarticle": "<strong>警告</strong>:您创建的页面是空白的。如果您再次点击“{{int:savearticle}}”,您将真的创建没有任何内容的页面。",
-       "anoneditwarning": "<strong>警告:</strong>您没有登录。您的IP地址将被记录在该页面的编辑历史中。",
+       "anoneditwarning": "<strong>警告:</strong>您没有登录。您做出任何编辑后您的IP地址会公开可见。如果您<strong>[$1 登陆]</strong>或<strong>[$2 注册]</strong>一个账户,您的编辑将归属于您的用户名,以及有其他好处。",
        "anonpreviewwarning": "<em>你没有登录。保存会记录你的IP地址于该页面的编辑历史中。</em>",
        "missingsummary": "'''提示:'''你没有提供编辑摘要。如果你再次点击“{{int:savearticle}}”,你的编辑将不带编辑摘要保存。",
        "missingcommenttext": "请在下面输入评论。",
        "editingold": "'''警告:你正在编辑的是本页面的旧版本。'''如果你保存该编辑,该版本后的所有更改都会丢失。",
        "yourdiff": "差异",
        "copyrightwarning": "请注意您对{{SITENAME}}的所有贡献都被认为是在$2下发布,请查看在$1的细节。\n如果您不希望您的文字被任意修改和再散布,请不要提交。<br />\n您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源。\n'''不要在未获授权的情况下发表!'''<br />",
-       "copyrightwarning2": "请注意您对{{SITENAME}}的所有贡献\n都可能被其他贡献者编辑,修改或删除。\n如果您不希望您的文字被任意修改和再散布,请不要提交。<br />\n您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅$1的细节)。\n'''不要在未获授权的情况下发表!'''",
+       "copyrightwarning2": "请注意,您对{{SITENAME}}的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。<br />\n您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅$1的细节)。'''不要在未获授权的情况下发表!'''",
        "longpageerror": "'''错误:您所提交的文本长度有{{PLURAL:$1|1|$1}}KB,这大于{{PLURAL:$2|1|$2}}KB的最大值。'''\n因此,该文本无法保存。",
        "readonlywarning": "警告:数据库被锁定以进行维护,所以您目前将无法保存您的修改。'''您或许希望将本段文字先剪贴并保存到文本文件,并在稍后进行修改。\n\n锁定数据库的管理员有如下解释:$1",
        "protectedpagewarning": "'''警告:本页面已被保护,只有拥有管理员权限的用户可以编辑。'''下面提供最后的日志条目以供参考:",
        "semiprotectedpagewarning": "'''注意:'''本页面已被保护,只有注册用户可以编辑。下面提供最后的日志条目以供参考:",
-       "cascadeprotectedwarning": "<strong>警告:</strong>本页面已经被保护,只有拥有管理员权限的用户可以编辑,因为它被嵌入了以下启用级联保护的{{PLURAL:$1|页面}}:",
+       "cascadeprotectedwarning": "<strong>警告:</strong>本页面已经被保护,只有拥有管理员权限的用户可以编辑,因为它包含于以下启用连锁保护的{{PLURAL:$1|页面}}中:",
        "titleprotectedwarning": "'''警告:本页面已被保护,创建本页面需要[[Special:ListGroupRights|特定权限]]。'''下面提供最后的日志条目以供参考:",
        "templatesused": "该页面使用的{{PLURAL:$1|模板}}:",
        "templatesusedpreview": "本预览使用的{{PLURAL:$1|模板}}:",
        "content-model-text": "纯文本",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "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次呼叫,现在有$1次呼叫。",
        "expensive-parserfunction-category": "页面中有太多耗费的语法功能呼叫",
        "post-expand-template-inclusion-warning": "'''警告:'''包含模板大小过大。\n一些模板将不会包含。",
        "parser-template-recursion-depth-warning": "模板递归深度越限($1)",
        "language-converter-depth-warning": "字词转换器深度越限($1)",
        "node-count-exceeded-category": "页面的节点数超出限制",
-       "node-count-exceeded-category-desc": "超出最高节点数的页面。",
-       "node-count-exceeded-warning": "页面超出了节点数",
+       "node-count-exceeded-category-desc": "页面超出最大节点数限制。",
+       "node-count-exceeded-warning": "页面超出节点数限制",
        "expansion-depth-exceeded-category": "扩展深度超出限制的页面",
-       "expansion-depth-exceeded-category-desc": "页面超出最大扩展深度。",
-       "expansion-depth-exceeded-warning": "页面超过了扩展深度",
+       "expansion-depth-exceeded-category-desc": "页面超出最大展开深度限制。",
+       "expansion-depth-exceeded-warning": "页面超出展开深度限制",
        "parser-unstrip-loop-warning": "检测到回圈",
        "parser-unstrip-recursion-limit": "递归超过限制 ($1)",
        "converter-manual-rule-error": "在手动语言转换规则中检测到错误",
        "mergehistory-same-destination": "来源页面与目的页面不可以相同",
        "mergehistory-reason": "原因:",
        "mergelog": "合并日志",
-       "pagemerge-logentry": "合并[[$1]]至[[$2]](版本截至$3)",
        "revertmerge": "解除合并",
        "mergelogpagetext": "下面是最近的页面历史合并的列表。",
        "history-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": "姊妹项目",
        "searchall": "所有",
        "showingresults": "下面显示从第'''$2'''条结果开始的'''$1'''条结果。",
        "showingresultsinrange": "下面显示区间#<strong>$2</strong>至#<strong>$3</strong>的<strong>$1</strong>条结果。",
-       "showingresultsheader": "关于<strong>$4</strong>的{{PLURAL:$5|第<strong>$1</strong>条结果,共<strong>$3</strong>条结果|第<strong>$1 - $2</strong>条结果,共<strong>$3</strong>条结果}}",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong>条结果中的<strong>$1</strong>条|<strong>$3</strong>条结果中的<strong>$1~$2</strong>条}}",
        "search-nonefound": "找不到和查询相匹配的结果。",
        "powersearch-legend": "高级搜索",
        "powersearch-ns": "搜索名字空间:",
        "powersearch-togglelabel": "选择:",
        "powersearch-toggleall": "全选",
        "powersearch-togglenone": "全不选",
-       "powersearch-remember": "记住选择用于以后搜索",
+       "powersearch-remember": "记住选择用于以后搜索",
        "search-external": "外部搜索",
        "searchdisabled": "{{SITENAME}}的搜索已被禁用。您可以暂时使用搜索引擎进行搜索,须注意他们索引的{{SITENAME}}内容可能不是最新的。",
        "search-error": "搜索时发生错误:$1",
        "gender-female": "她",
        "prefs-help-gender": "该设置为可选项。软件根据该值在称呼您及对他人提及您时使用适当的语法性别。该信息会被公开。",
        "email": "电子邮件",
-       "prefs-help-realname": "真实姓名是选填项目。如果你选择提供它,它将会用于贡献署名。",
+       "prefs-help-realname": "真实姓名是选填项目。如果提供,它可能用于署名您的贡献。",
        "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": "请输入有效的电子邮件地址",
        "action-userrights": "编辑所有用户的权限",
        "action-userrights-interwiki": "编辑其他wiki用户的用户权限",
        "action-siteadmin": "锁定或解锁数据库",
-       "action-sendemail": "电邮联系其他用户",
+       "action-sendemail": "发送电子邮件",
        "action-editmywatchlist": "编辑你的监视列表",
        "action-viewmywatchlist": "查看你的监视列表",
        "action-viewmyprivateinfo": "查看您的私人信息",
        "statistics": "统计",
        "statistics-header-pages": "页面统计",
        "statistics-header-edits": "编辑统计",
-       "statistics-header-views": "查看统计",
        "statistics-header-users": "用户统计",
        "statistics-header-hooks": "其它统计",
        "statistics-articles": "内容页面",
        "statistics-files": "上传的文件",
        "statistics-edits": "自{{SITENAME}}建立以来的页面编辑数",
        "statistics-edits-average": "每页平均编辑数",
-       "statistics-views-total": "查看总数",
-       "statistics-views-total-desc": "不存在页面和特殊页面的查看数未计入",
-       "statistics-views-peredit": "每编辑查看数",
        "statistics-users": "注册[[Special:ListUsers|用户]]",
        "statistics-users-active": "活跃用户",
        "statistics-users-active-desc": "在过去{{PLURAL:$1|$1天}}执行过操作的用户",
-       "statistics-mostpopular": "最多查看页面",
        "pageswithprop": "有页面属性的页面",
        "pageswithprop-legend": "有页面属性的页面",
        "pageswithprop-text": "本页面列出使用特定页面属性的页面。",
        "uncategorizedtemplates": "未归类模板",
        "unusedcategories": "未使用分类",
        "unusedimages": "未使用文件",
-       "popularpages": "热门页面",
        "wantedcategories": "需要的分类",
        "wantedpages": "需要的页面",
        "wantedpages-badtitle": "在结果组上的无效标题:$1",
        "pager-older-n": "后$1个",
        "suppress": "监督",
        "querypage-disabled": "本特殊页面因性能问题而停用。",
+       "apihelp": "API 帮助",
+       "apihelp-no-such-module": "找不到模块“$1”。",
        "booksources": "网络书源",
        "booksources-search-legend": "搜索图书来源",
        "booksources-isbn": "ISBN:",
-       "booksources-go": "提交",
+       "booksources-search": "搜索",
        "booksources-text": "下面是销售新书和二手书的其他网站的链接的列表,也可能有关于你正在寻找的图书的更多信息:",
        "booksources-invalid-isbn": "提供的ISBN号码并不正确,请检查原始复制来源号码是否有误。",
        "specialloguserlabel": "执行者:",
        "listusers-blocked": "(已封禁)",
        "activeusers": "活跃用户列表",
        "activeusers-intro": "这是在过去$1{{PLURAL:$1|天}}有过某种活动的用户的列表。",
-       "activeusers-count": "最近$3天内有$1次编辑",
+       "activeusers-count": "过去$3天有$1次操作",
        "activeusers-from": "显示用户开始于:",
        "activeusers-hidebots": "隐藏机器人",
        "activeusers-hidesysops": "隐藏管理员",
        "listgrouprights-namespaceprotection-namespace": "名字空间",
        "listgrouprights-namespaceprotection-restrictedto": "允许用户编辑的权限",
        "trackingcategories": "追踪分类",
-       "trackingcategories-summary": "æ\9c¬é¡µé\9d¢å\88\97举ç\94±MediaWiki软件è\87ªå\8a¨æ·»å\8a ç\9a\84è·\9f踪分类。它们的名字可通过修改{{ns:8}}名字空间对应的系统信息而变更。",
+       "trackingcategories-summary": "æ\9c¬é¡µé\9d¢å\88\97举ç\94±MediaWiki软件è\87ªå\8a¨æ·»å\8a ç\9a\84追踪分类。它们的名字可通过修改{{ns:8}}名字空间对应的系统信息而变更。",
        "trackingcategories-msg": "追踪分类",
        "trackingcategories-name": "信息名",
        "trackingcategories-desc": "分类收录标准",
-       "noindex-category-desc": "页面中有<code><nowiki>__NOINDEX__</nowiki></code>魔术字(并且在标记允许的名字空间)且因此未被机器人索引的。",
-       "index-category-desc": "页é\9d¢ä¸­æ\9c\89<code><nowiki>__INDEX__</nowiki></code>é­\94æ\9c¯å­\97ï¼\88并ä¸\94å\9c¨æ \87è®°å\85\81许ç\9a\84å\90\8då­\97空é\97´ï¼\89ä¸\94å\9b æ­¤è¢«æ\9cºå\99¨äººç´¢å¼\95ä½\86æ\9c¬ä¸\8dåº\94ç´¢å¼\95ç\9a\84。",
-       "post-expand-template-inclusion-category-desc": "在展开了所有模板后,页面大小大于<code>$wgMaxArticleSize</code>,所以一些模板未展开。",
-       "post-expand-template-argument-category-desc": "å±\95å¼\80äº\86模æ\9d¿å\8f\82æ\95°ï¼\88ä¸\89对è\8a±æ\8b¬å\8f·å\86\85ï¼\8cä¾\8bå¦\82<code>{{{Foo}}}</code>ï¼\89ä¹\8b后,页面大于<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": "页é\9d¢å\8c\85å\90«æ\8d\9få\9d\8fç\9a\84æ\96\87件è¿\9eæ\8e¥ï¼\88è¿\9eæ\8e¥è\87³åµ\8cå\85¥ç\9a\84ä¸\80个ä¸\8då­\98å\9c¨æ\96\87件)。",
-       "hidden-category-category-desc": "页面中包含<code><nowiki>__HIDDENCAT__</nowiki></code>的分类,它阻止分类默认在页面上的分类链接框中显示。",
+       "noindex-category-desc": "因为页面上有魔术字<code><nowiki>__NOINDEX__</nowiki></code>并位于允许该标记的名字空间,而不被机器人索引的页面。",
+       "index-category-desc": "页é\9d¢ä¸\8aæ\9c\89é­\94æ\9c¯å­\97<code><nowiki>__INDEX__</nowiki></code>ï¼\88并ä½\8däº\8eå\85\81许该æ \87è®°ç\9a\84å\90\8då­\97空é\97´ï¼\89ï¼\8c并å\9b æ­¤è¢«æ\9cºå\99¨äººç´¢å¼\95ï¼\8cä½\86é\80\9a常ä¸\8dåº\94被索å¼\95。",
+       "post-expand-template-inclusion-category-desc": "在展开所有模板后,页面大小大于<code>$wgMaxArticleSize</code>,所以某些模板未展开。",
+       "post-expand-template-argument-category-desc": "å\9c¨å±\95å¼\80模æ\9d¿å\8f\82æ\95°ï¼\88以ä¸\89对è\8a±æ\8b¬å\8f·å\8c\85å\90«ç\9a\84ä¸\9c西ï¼\8cå¦\82<code>{{{Foo}}}</code>ï¼\89后,页面大于<code>$wgMaxArticleSize</code>。",
+       "expensive-parserfunction-category-desc": "页面使用过多高开销解析器函数(如<code>#ifexist</code>)。请见[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit MediaWiki官网手册]。",
+       "broken-file-category-desc": "页é\9d¢å\90«æ\9c\89å\8f\97æ\8d\9fæ\96\87件é\93¾æ\8e¥ï¼\88æ\96\87件ä¸\8då­\98å\9c¨æ\97¶ç\9a\84åµ\8cå\85¥æ\96\87件é\93¾æ\8e¥)。",
+       "hidden-category-category-desc": "分类的页面内容中含有<code><nowiki>__HIDDENCAT__</nowiki></code>,它会阻止分类默认在页面的分类链接框中显示。",
        "trackingcategories-nodesc": "没有说明。",
        "trackingcategories-disabled": "分类被禁用",
        "mailnologin": "无电子邮件地址",
        "wlheader-enotif": "已启用电子邮件通知。",
        "wlheader-showupdated": "您上次访问后发生更改的页面'''加粗'''显示",
        "wlnote": "下面是{{PLURAL:$2|过去<strong>$2</strong>小时}}的{{PLURAL:$1|最后<strong>$1</strong>个更改}},截至$3 $4。",
-       "wlshowlast": "显示过去$1小时$2天$3",
+       "wlshowlast": "显示过去$1小时$2天",
        "watchlist-options": "监视列表选项",
        "watching": "正在监视...",
        "unwatching": "正在取消监视...",
        "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** 高流量页面",
        "unblocked": "[[User:$1|$1]]已经被解封",
        "unblocked-range": "$1已被解封",
        "unblocked-id": "封禁$1已被解除",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]]已解封。",
        "blocklist": "被封禁用户",
        "ipblocklist": "被封禁用户",
        "ipblocklist-legend": "查找被封禁用户",
        "thumbnail-more": "放大",
        "filemissing": "无法找到文件",
        "thumbnail_error": "生成缩略图出错:$1",
-       "thumbnail_error_remote": "来自$1的错误消息从:\n$2",
+       "thumbnail_error_remote": "来自$1的错误消息$2",
        "djvu_page_error": "DjVu页面超出范围",
        "djvu_no_xml": "无法在DjVu文件中获取XML",
        "thumbnail-temp-create": "无法创建临时缩略图文件",
        "import-interwiki-templates": "包含所有模板",
        "import-interwiki-submit": "导入",
        "import-interwiki-namespace": "目标名字空间:",
-       "import-interwiki-rootpage": "目的根页(可选):",
+       "import-interwiki-rootpage": "目标根页面(可选):",
        "import-upload-filename": "文件名:",
        "import-comment": "注释:",
        "importtext": "请使用[[Special:Export|导出功能]]从源 wiki 导出文件,\n保存到您的电脑并上传到这里。",
        "importlogpage": "导入日志",
        "importlogpagetext": "管理性导入在其他wiki上有编辑历史的页面。",
        "import-logentry-upload": "通过文件上传导入[[$1]]",
-       "import-logentry-upload-detail": "已导å\85¥$1个{{PLURAL:$1|ç\89\88æ\9c¬}}",
-       "import-logentry-interwiki": "跨wiki页面$1",
-       "import-logentry-interwiki-detail": "已从$2导入$1个{{PLURAL:$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测试。",
        "tooltip-pt-mycontris": "你的贡献的列表",
        "tooltip-pt-login": "我们鼓励您登录,不过这不是强制的",
        "tooltip-pt-logout": "退出登录",
+       "tooltip-pt-createaccount": "我们鼓励您创建一个账户并登录;然而这不是强制的",
        "tooltip-ca-talk": "关于内容页面的讨论",
        "tooltip-ca-edit": "你可以编辑本页面。请在保存前使用预览按钮",
        "tooltip-ca-addsection": "开始新段落",
        "tooltip-feed-atom": "本页面的Atom源",
        "tooltip-t-contributions": "该用户的贡献的列表",
        "tooltip-t-emailuser": "给该用户发送电子邮件",
+       "tooltip-t-info": "关于此页面的更多信息",
        "tooltip-t-upload": "上传文件",
        "tooltip-t-specialpages": "所有特殊页面的列表",
        "tooltip-t-print": "本页面的可打印版本",
        "print.css": "/* 放置于这里的CSS将影响打印输出 */",
        "noscript.css": "/* 放置于这里的CSS将影响停用JavaScript的用户 */",
        "group-autoconfirmed.css": "/* 放置于这里的CSS将只影响自动确认用户 */",
-       "group-user.css": "/* 放置于此的CSS将只影响注册用户 */",
+       "group-user.css": "/* 放置于此的CSS将只影响注册用户 */",
        "group-bot.css": "/* 放置于这里的CSS将只影响机器人 */",
        "group-sysop.css": "/* 放置于这里的CSS将只影响管理员 */",
        "group-bureaucrat.css": "/* 放置于这里的CSS将只影响行政员 */",
        "pageinfo-robot-policy": "爬虫索引",
        "pageinfo-robot-index": "允许",
        "pageinfo-robot-noindex": "不允许",
-       "pageinfo-views": "查看数",
        "pageinfo-watchers": "页面监视者数",
        "pageinfo-few-watchers": "少于$1个监视者",
        "pageinfo-redirects-name": "至该页面的重定向数",
        "exif-urgency-low": "低($1)",
        "exif-urgency-high": "高($1)",
        "exif-urgency-other": "用户定义的优先级($1)",
-       "watchlistall2": "所有",
        "namespacesall": "所有",
        "monthsall": "所有",
        "confirmemail": "确认电子邮件地址",
        "unknown_extension_tag": "未知扩展标签“$1”",
        "duplicate-defaultsort": "'''警告:'''默认排序关键词“$2”覆盖了之前的默认排序关键词“$1”。",
        "duplicate-displaytitle": "<strong>警告:</strong>显示的标题“$2”重写了此前显示的标题“$1”。",
+       "invalid-indicator-name": "<strong>错误:</strong>页面状态指示器的<code>name</code>属性必须不为空。",
        "version": "版本",
        "version-extensions": "安装的扩展程序",
        "version-skins": "已安装皮肤",
        "revdelete-uname-unhid": "公开用户名",
        "revdelete-restricted": "应用对管理员的限制",
        "revdelete-unrestricted": "删除对管理员的限制",
+       "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-move-move_redir": "$1{{GENDER:$2|移动}}页面$3至$4覆盖重定向",
        "logentry-rights-rights": "$1{{GENDER:$2|更改}}$3的用户组自$4至$5",
        "logentry-rights-rights-legacy": "$1更改$3的用户组",
        "logentry-rights-autopromote": "$1被自动地{{GENDER:$2|提升}}自$4至$5",
-       "logentry-upload-upload": "$1{{GENDER:$2|上传}}$3",
-       "logentry-upload-overwrite": "$1{{GENDER:$2|上传}}$3的新版本",
-       "logentry-upload-revert": "$1{{GENDER:$2|上传}}$3",
+       "logentry-upload-upload": "$1{{GENDER:$2|上传}}$3",
+       "logentry-upload-overwrite": "$1{{GENDER:$2|上传}}$3的新版本",
+       "logentry-upload-revert": "$1{{GENDER:$2|上传}}$3",
        "rightsnone": "(无)",
+       "revdelete-summary": "编辑摘要",
        "feedback-bugornote": "如果你准备好详细描述一个技术问题,请[$1 报告bug]。或者你可以使用下面的简单表格。你的评论将被添加至页面“[$3 $2]”,附有你的用户名。",
        "feedback-subject": "主题:",
        "feedback-message": "信息:",
        "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",
        "expand_templates_intro": "此特殊页面可以递归地展开所给文本中的模板。\n它同时还可展开诸如<nowiki>{{</nowiki>#language:...}}的解析器函数和诸如<nowiki>{{</nowiki>CURRENTDAY}}的变量。\n实际上,几乎所有在双重花括号中的内容都会被展开。",
        "expand_templates_title": "上下文标题,用于{{FULLPAGENAME}}等:",
        "expand_templates_input": "输入文本:",
-       "expand_templates_output": "结果",
+       "expand_templates_output": "结果",
        "expand_templates_xml_output": "XML输出",
        "expand_templates_html_output": "原始HTML输出",
        "expand_templates_ok": "确定",
        "log-name-pagelang": "更改语言日志",
        "log-description-pagelang": "这是页面语言更改的日志。",
        "logentry-pagelang-pagelang": "$1{{GENDER:$2|更改}}$3的页面语言:从$4改为$5。",
-       "default-skin-not-found": "天哪!您wiki的默认皮肤(<code>$wgDefaultSkin</code>)<code>$1</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/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code>skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。\n\n; 如果您升级了您的MediaWiki的话:\n: MediaWiki 1.24版本起不再自动启用已安装皮肤(参见[https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 此手册])。您可复制粘贴以下文本至您wiki的<code>LocalSettings.php</code>以启用安装的皮肤:\n\n<pre>$3</pre>\n\n; 如果您已经修改了<code>LocalSettings.php</code>:\n: 请再次检查皮肤名以确保不存在错误拼写。",
-       "default-skin-not-found-no-skins": "天哪!您wiki的默认皮肤(<code>$wgDefaultSkin</code>)<code>$1</code>不可用。而且您没有安装任何皮肤。\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的。希望如此。尝试通过以下方法从[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code>skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。",
+       "default-skin-not-found": "天哪!您在<code dir=\"ltr\">$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</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/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。\n\n; 如果您升级了您的MediaWiki的话:\n: MediaWiki 1.24版本起不再自动启用已安装皮肤(参见[https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 此手册])。您可复制粘贴以下文本至您wiki的<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>定义的wiki默认皮肤<code>$1</code>不可用。而且您没有安装任何皮肤。\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的,这是预期的。这是因为MediaWiki 1.24版本起主代码库不再包含任何皮肤。尝试通过以下方法从[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Special:MyLanguage/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('''已禁用''')",
+       "mediastatistics": "媒体统计",
+       "mediastatistics-summary": "有关上传文件类型的统计。这只包含文件的最新版本,旧版本或删除版本则不会包括。",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1字节}}($2;$3%)",
+       "mediastatistics-table-mimetype": "MIME类型",
+       "mediastatistics-table-extensions": "可用扩展名",
+       "mediastatistics-table-count": "文件数",
+       "mediastatistics-table-totalbytes": "组合尺寸",
+       "mediastatistics-header-unknown": "未知",
+       "mediastatistics-header-bitmap": "位图图像",
+       "mediastatistics-header-drawing": "图纸(矢量图像)",
+       "mediastatistics-header-audio": "音频",
+       "mediastatistics-header-video": "视频",
+       "mediastatistics-header-multimedia": "富媒体",
+       "mediastatistics-header-office": "办公文件",
+       "mediastatistics-header-text": "文本",
+       "mediastatistics-header-executable": "可执行文件",
+       "mediastatistics-header-archive": "压缩格式",
+       "json-warn-trailing-comma": "$1个结尾逗号从JSON移除",
+       "json-error-unknown": "JSON出现问题。错误:$1",
+       "json-error-depth": "超出最大堆栈深度",
+       "json-error-state-mismatch": "无效或格式不正确的JSON",
+       "json-error-ctrl-char": "控制字符错误,可能是错误编码",
+       "json-error-syntax": "语法错误",
+       "json-error-utf8": "不正确的UTF-8字符,可能是错误编码",
+       "json-error-recursion": "要编码的数值中一个或更多递归引用",
+       "json-error-inf-or-nan": "要编码的数值中一个或更多NAN或INF值",
+       "json-error-unsupported-type": "给出了不能编码的类型的值"
 }
index 68278b4..83bb70a 100644 (file)
                        "Impersonator 1",
                        "LNDDYL",
                        "Cathypilot0117",
-                       "NigelSoft"
+                       "NigelSoft",
+                       "EagerLin"
                ]
        },
-       "tog-underline": "連結底線:",
-       "tog-hideminor": "隱藏最近變更中的小修訂",
-       "tog-hidepatrolled": "隱藏最近更改中巡查過的編輯",
+       "tog-underline": "底線標示連結:",
+       "tog-hideminor": "隱藏近期變更以來的小編輯",
+       "tog-hidepatrolled": "隱藏近期變更中巡查過的編輯",
        "tog-newpageshidepatrolled": "隱藏新頁面清單中巡查過的頁面",
        "tog-extendwatchlist": "展開監視清單顯示包含最近以外的所有變更",
-       "tog-usenewrc": "依最近變更與監視清單頁面分類顯示變更",
+       "tog-usenewrc": "依近期變更與監視清單頁面分類顯示變更",
        "tog-numberheadings": "標題自動編號",
        "tog-showtoolbar": "顯示編輯工具列",
-       "tog-editondblclick": "啟用滑鼠雙擊編輯頁面",
+       "tog-editondblclick": "開啟滑鼠雙擊編輯頁面",
        "tog-editsectiononrightclick": "開啟滑鼠右鍵點選章節標題編輯",
        "tog-watchcreations": "將我建立的頁面和上傳的檔案加入監視清單",
        "tog-watchdefault": "將我編輯的頁面和檔案新增至監視清單",
@@ -85,7 +86,7 @@
        "tog-shownumberswatching": "顯示正在監視的使用者數",
        "tog-oldsig": "現有簽名:",
        "tog-fancysig": "將簽名視為 Wikitext 語言 (不自動產生連結)",
-       "tog-uselivepreview": "使用即時預覽 (測試中)",
+       "tog-uselivepreview": "使用即時預覽 (實驗中)",
        "tog-forceeditsummary": "未填寫編輯摘要時提示我",
        "tog-watchlisthideown": "隱藏監視清單中我自己的編輯",
        "tog-watchlisthidebots": "隱藏監視清單中機器人的編輯",
        "october-date": "十月 $1 日",
        "november-date": "十一月 $1 日",
        "december-date": "十二月 $1 日",
-       "pagecategories": "{{PLURAL:$1|分類|分類}}",
+       "pagecategories": "{{PLURAL:$1|分類|$1 個分類}}",
        "category_header": "分類 \"$1\" 中的頁面",
        "subcategories": "子分類",
        "category-media-header": "分類 \"$1\" 中的媒體",
        "otherlanguages": "其他語言",
        "redirectedfrom": "(已重新導向自 $1)",
        "redirectpagesub": "重新導向頁面",
+       "redirectto": "重新導向至:",
        "lastmodifiedat": "此頁面最後修訂於 $1 $2。",
        "viewcount": "此頁面已被檢視過 $1 次。",
        "protectedpage": "受保護頁面",
        "aboutsite": "關於 {{SITENAME}}",
        "aboutpage": "Project:About",
        "copyright": "除非額外說明,否則本站內容均使用 $1 授權條款。",
-       "copyrightpage": "{{ns:project}}:Copyrights",
-       "currentevents": "最新事件",
+       "copyrightpage": "{{ns:project}}:版權",
+       "currentevents": "最新動態",
        "currentevents-url": "Project:Current events",
        "disclaimers": "免責聲明",
        "disclaimerpage": "Project:General disclaimer",
        "edithelp": "編輯説明",
-       "mainpage": "主頁",
-       "mainpage-description": "主頁",
+       "mainpage": "主頁",
+       "mainpage-description": "主頁",
        "policy-url": "Project:Policy",
        "portal": "社群入口",
        "portal-url": "Project:Community portal",
        "viewsourcetext": "您可以檢視並複製此頁面的原始碼。",
        "viewyourtext": "您可以檢視並複製此頁面中<strong>您編輯</strong>的原始碼:",
        "protectedinterface": "本頁用來提供此 Wiki 軟體介面上的文字,並且已被設為保護以防止惡意修改。\n如欲增加或修改 Wiki 的翻譯,請至 [//translatewiki.net/ translatewiki.net] 上的 MediaWiki 在地化專案。",
-       "editinginterface": "<strong>警告:</strong>您正在編輯的頁面是用來提供軟體介面上的文字。\n更改此頁將影響其他在此 Wiki 上的使用者介面外觀。\n如欲修改 Wiki 的翻譯,請至 [//translatewiki.net/ translatewiki.net]上的 MediaWiki 在地化專案。",
+       "editinginterface": "<strong>警告:</strong>您正在編輯的頁面文字是用來作為軟體介面使用。\n更改此頁面將會影響其他使用者在此 Wiki 上看到的使用者介面。",
+       "translateinterface": "如欲修改 Wiki 的翻譯,請至 [//translatewiki.net/ translatewiki.net] 上的 MediaWiki 在地化專案。",
        "cascadeprotected": "此頁面被保護無法編輯,因為此頁面被以下開啟 \"連鎖保護\" 選項的{{PLURAL:$1|一頁|數頁}}保護頁面引用:\n$2",
        "namespaceprotected": "您沒有權限編輯 <strong>$1</strong> 命名空間的頁面。",
        "customcssprotected": "您並沒有權限編輯此 CSS 頁面,因為此頁面包含了其他使用者的個人設定。",
        "createacct-another-submit": "建立另一個帳號",
        "createacct-benefit-heading": "{{SITENAME}} 是由像您一樣貢獻的人所建立的。",
        "createacct-benefit-body1": " {{PLURAL:$1|次編輯}}",
-       "createacct-benefit-body2": " $1 頁",
+       "createacct-benefit-body2": "$1 頁",
        "createacct-benefit-body3": " 位最近的{{PLURAL:$1|貢獻者}}",
        "badretype": "兩次輸入的密碼並不相同。",
        "userexists": "您所輸入的使用者名稱已存在,請另選一個名稱。",
        "throttled-mailpassword": "密碼重設的電子郵件已經在最近 $1 小時內寄出。\n為防止濫用,$1 小時內只能寄出一次密碼重設信件。",
        "mailerror": "傳送電子郵件錯誤:$1",
        "acct_creation_throttle_hit": "使用您目前的 IP 位址的訪客在最近一天建立了 {{PLURAL:$1|1 個帳號|$1 個帳號}},已超出系統允許的上限。\n因此,目前無法讓使用此 IP 位址的訪客建立帳號。",
-       "emailauthenticated": "您的電子郵件位址已確認於 $2 的 $3。",
+       "emailauthenticated": "您的電子郵件位址已於 $2 $3 確認。",
        "emailnotauthenticated": "您的電子郵件位址尚未確認,\n尚不會寄出以下功能的電子郵件給您。",
        "noemailprefs": "在您的偏好設定中設定電子郵件位址,讓您可以使用這些功能。",
        "emailconfirmlink": "確認您的電子郵件位址",
        "createaccount-text": "不明人士使用您的電子郵件位址在 {{SITENAME}} ($4) 建立了一個帳號名稱為 \"$2\",密碼為 \"$3\"。\n您應該立即登入並更改密碼。\n\n如果該帳號是建立錯誤的話,您可以忽略此訊息。",
        "login-throttled": "您已經嘗試太多次的登入動作。\n請稍等 $1 後再試。",
        "login-abort-generic": "您登入失敗 - 已中止",
+       "login-migrated-generic": "您的帳號已轉移,且此 Wiki 中您的使用者名稱已不存在。",
        "loginlanguagelabel": "語言:$1",
        "suspicious-userlogout": "您登出的請求被拒絕,可能是因您使用了有問題的瀏覽器或者快取代理伺服器。",
        "createacct-another-realname-tip": "真實姓名為選填欄位。\n若您提供真實姓名,它會用於使用者貢獻署名。",
        "passwordreset-emailsent-capture": "已寄出重設密碼的電子郵件,並於下方顯示。",
        "passwordreset-emailerror-capture": "下列為重設密碼的電子郵件內容,傳送給{{GENDER:$2|使用者}}失敗:$1",
        "changeemail": "變更電子郵件位址",
-       "changeemail-header": "變更帳號的電子郵件位址",
        "changeemail-text": "完成此表單以修改您的電子郵件位址,您需要輸入您的密碼來確認此次變更。",
        "changeemail-no-info": "您必須登入方可直接存取此頁面。",
        "changeemail-oldemail": "目前的電子郵件位址:",
        "changeemail-none": "(無)",
        "changeemail-password": "您於 {{SITENAME}} 的密碼:",
        "changeemail-submit": "變更電子郵件",
-       "changeemail-cancel": "取消",
        "changeemail-throttled": "您最近嘗試了太多次登入。\n請等待 $1 後再試。",
        "resettokens": "重設密鑰",
        "resettokens-text": "您可以在此重設用來存取您帳號相關隱私資料的密鑰。\n\n若您不小心將您的密鑰分享給其他人或您的帳號已遭到入侵、破壞,應該要重設此密鑰。",
        "headline_tip": "第 2 層標題文字",
        "nowiki_sample": "插入非格式化文字",
        "nowiki_tip": "忽略 Wiki 格式化語法",
+       "image_sample": "範例.jpg",
        "image_tip": "附加檔案",
        "media_tip": "檔案連結",
        "sig_tip": "您的簽名與日期時間",
        "showpreview": "顯示預覽",
        "showdiff": "顯示變更",
        "blankarticle": "<strong>警告:</strong>您正在建立的頁面是空白的。\n如果您再按一下\"{{int:savearticle}}\",將建立沒有任何內容的頁面。",
-       "anoneditwarning": "<strong>警告:</strong>您尚未登入。\n您的 IP 位址將記錄在此頁的編輯歷史中。",
+       "anoneditwarning": "<strong>警告:</strong>您尚未登入。 若您進行任何的編輯您的 IP 位置將會被公開。 若您 <strong>[$1 登入]</strong> 或 <strong>[$2 建立帳號]</strong>,您的編輯將會以您的使用者名稱標示,擁有其他優點。",
        "anonpreviewwarning": "<em>您尚未登入。儲存頁面會將您的 IP 位址記錄在此頁面的編輯歷史中。</em>",
        "missingsummary": "<strong>提醒:</strong>您未填寫編輯摘要。\n若您再點選 \"{{int:savearticle}}\" 一次,將略過摘要直接儲存您的編輯。",
        "missingcommenttext": "請在下方輸入評論。",
        "userpage-userdoesnotexist": "使用者帳號 \"$1\" 尚未註冊。\n若您要建立/編輯此頁面,請先檢查是否正確。",
        "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> 中清除快取。",
+       "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。",
        "usercsspreview": "<strong>您目前正預覽您的使用者 CSS,CSS 還尚未儲存!</strong>",
        "sitejspreview": "<strong>您目前正預覽此 JavaScript,JavaScript 還尚未儲存!</strong>",
        "userinvalidcssjstitle": "<strong>警告:</strong> 無此外觀樣式 \"$1\"。\n自訂的 .css 和 .js 頁面要使用小寫標題,例如:{{ns:user}}:Foo/vector.css 與 {{ns:user}}:Foo/Vector.css 是不同的。",
        "updated": "(已更新)",
-       "note": "</strong>注意:</strong>",
+       "note": "<strong>注意:</strong>",
        "previewnote": "<strong>您目前正在預覽,您的變更還尚未儲存!</strong>",
        "continue-editing": "前往編輯框",
        "previewconflict": "此預覽顯示了您於上方文字編輯框中的內容儲存之後將會顯示的結果。",
        "postedit-confirmation-saved": "您的編輯已儲存。",
        "edit-already-exists": "無法建立新頁面。\n該頁面已存在。",
        "defaultmessagetext": "預設訊息文字",
-       "content-failed-to-parse": "析 $2 格式的 $1 語法內容失敗:$3",
+       "content-failed-to-parse": "析 $2 格式的 $1 語法內容失敗:$3",
        "invalid-content-data": "內容資料無效",
        "content-not-allowed-here": "頁面 [[$2]] 不允許使用 \"$1\" 語法內容",
        "editwarning-warning": "離開此頁面可能會令您遺失之前所作的所有更改。\n若您已經登入,您可在偏好設定的 \"{{int:prefs-editing}}\" 項目關閉此警告。",
        "content-model-text": "純文字",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "expensive-parserfunction-warning": "<strong>警告:</strong>此頁面使用了太多消耗系統資源的分析函數。\n\n使用次數應小於 $2 次,但目前使用了 $1 次。",
+       "duplicate-args-category": "樣版呼叫時使用重複的參數的頁面",
+       "duplicate-args-category-desc": "該頁面包含重複使用參數的樣版呼叫,如 <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> 或 <code><nowiki>{{foo|bar|1=baz}}</nowiki>。",
+       "expensive-parserfunction-warning": "<strong>警告:</strong>此頁面使用了太多消耗系統資源的解析函數。\n\n使用次數應小於 $2 次,但目前使用了 $1 次。",
        "expensive-parserfunction-category": "使用了太多消耗系統資源的分析函數的頁面",
        "post-expand-template-inclusion-warning": "<strong>警告:</strong>引用樣板後大小超出限制。\n部份樣版內容將不會被使用。",
        "post-expand-template-inclusion-category": "引用樣板後大小超出限制的頁面",
        "mergehistory-same-destination": "來源頁面與目標頁面不可相同",
        "mergehistory-reason": "原因:",
        "mergelog": "合併日誌",
-       "pagemerge-logentry": "已合併 [[$1]] 至 [[$2]] (修訂更新至 $3)",
        "revertmerge": "取消合併",
        "mergelogpagetext": "以下是最近合併頁面歷史的清單。",
        "history-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": "姐妹專案",
        "searchall": "全部",
        "showingresults": "以下顯示從第 <strong>$2</strong> 筆開始,共 {{PLURAL:$1|<strong>1</strong> 筆結果|<strong>$1</strong> 筆結果}}:",
        "showingresultsinrange": "以下顯示從第 <strong>$2</strong> 筆至第 <strong>$3</strong> 筆中的 {{PLURAL:$1|<strong>1</strong> 筆結果|<strong>$1</strong> 筆結果}}:",
-       "showingresultsheader": "<strong>$4</strong> 的 {{PLURAL:$5|第 <strong>$1</strong> 筆結果,共 <strong>$3</strong> 筆|第 <strong>$1 - $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": "進階搜尋",
        "powersearch-ns": "搜尋以下命名空間:",
        "prefs-labs": "實驗中的功能",
        "prefs-user-pages": "使用者頁面",
        "prefs-personal": "使用者基本資料",
-       "prefs-rc": "最近變更",
+       "prefs-rc": "近期變更",
        "prefs-watchlist": "監視清單",
        "prefs-watchlist-days": "監視清單中顯示的天數:",
        "prefs-watchlist-days-max": "最多 $1 {{PLURAL:$1|天}}",
        "searchresultshead": "搜尋",
        "stub-threshold": "<a href=\"#\" class=\"stub\">短頁面連結</a>格式門檻值 (位元組):",
        "stub-threshold-disabled": "已停用",
-       "recentchangesdays": "最近變更的顯示日數:",
+       "recentchangesdays": "近期變更顯示的天數:",
        "recentchangesdays-max": "最多 $1 {{PLURAL:$1|天}}",
        "recentchangescount": "預設顯示的編輯數:",
-       "prefs-help-recentchangescount": "這包含最近變更、頁面歷史以及日誌。",
+       "prefs-help-recentchangescount": "這包含近期變更、頁面歷史以及日誌。",
        "prefs-help-watchlist-token2": "訂閱您的監視清單所需的密鑰。\n任何人只要知道密鑰就能夠讀取您的監視清單,所以請勿任意與它人共享。\n若有需要 [[Special:ResetTokens|您可重設密鑰]]。",
        "savedprefs": "已儲存您的偏好設定。",
        "timezonelegend": "時區:",
        "prefs-help-signature": "在對話頁面上評論時應使用 \"<nowiki>~~~~</nowiki>\" 簽名,\n該符號會轉換成您的簽名與時間。",
        "badsig": "錯誤的原始簽名。請檢查 HTML 標籤。",
        "badsiglength": "您的簽名過長。\n它的長度不可超過 $1 個字元。",
-       "yourgender": "您希望如何被描述?",
+       "yourgender": "您希望使用何種性別稱呼?",
        "gender-unknown": "我不想說明",
        "gender-male": "他編輯了 Wiki 頁面",
        "gender-female": "她編輯了 Wiki 頁面",
        "prefs-help-gender": "此偏好設定為選填欄位。\n系統會使用您選擇的方式稱呼您,對他人提及您時也會使用適當語法稱呼。\n此項資訊會被公開。",
        "email": "電子郵件",
-       "prefs-help-realname": "ç\9c\9f實å§\93å\90\8dç\82ºé\81¸å¡«æ¬\84ä½\8dã\80\82\nè\8b¥æ\82¨æ\8f\90ä¾\9bç\9c\9f實å§\93å\90\8dï¼\8cå®\83æ\9c\83ç\94¨æ\96¼ä½¿ç\94¨è\80\85è²¢ç\8d»署名。",
+       "prefs-help-realname": "ç\9c\9f實å§\93å\90\8dç\82ºé\81¸å¡«æ¬\84ä½\8dã\80\82\nè\8b¥æ\8f\90ä¾\9bï¼\8cç\9c\9f實å§\93å\90\8då\8f¯è\83½æ\9c\83ç\94¨ä¾\86ä½\9cç\82ºæ\82¨ç\9a\84ä½\9cå\93\81ç\9a\84署名。",
        "prefs-help-email": "電子郵件位址為選填欄位。\n但在重設密碼時會使用,而您很有可能會忘記密。",
        "prefs-help-email-others": "您亦可以選擇讓其他使用者用電子郵件與您聯繫,透過您的使用者或對話頁面上方的連結。\n您的電子郵件位址不會實際告知給其他要聯絡您的使用者。",
        "prefs-help-email-required": "電子郵件地址是必填項目。",
        "prefs-tokenwatchlist": "密鑰",
        "prefs-diffs": "差異",
        "prefs-help-prefershttps": "此偏好設定將於您下次登入時生效。",
+       "prefswarning-warning": "您對您的偏好設定所做的變更尚未儲存。\n若您未點選 \"$1\" 離開此頁面,將不會更新您的偏好設定。",
        "prefs-tabs-navigation-hint": "提示:您可使用左、右方向鍵切換頁籤。",
        "email-address-validity-valid": "電子郵件位址有效",
        "email-address-validity-invalid": "請輸入一個有效的電子郵件位址",
        "right-viewmywatchlist": "檢視自己的監視清單",
        "right-editmywatchlist": "編輯自己的監視清單。注意,即使無此權限,某些操作仍會新增頁面至監視清單。",
        "right-viewmyprivateinfo": "檢視自己的私隱資料 (如:電子郵件位址及真實姓名)",
-       "right-editmyprivateinfo": "編輯自己的私隱資料 (如:電子郵件位址及真實姓名)",
+       "right-editmyprivateinfo": "編輯自己的隱私資料 (如:電子郵件位址及真實姓名)",
        "right-editmyoptions": "編輯自己的偏好設定",
        "right-rollback": "快速還原最後一位使用者對某一頁面的編輯",
        "right-markbotedits": "標示還原編輯為機械人編輯",
        "right-importupload": "由檔案上傳匯入頁面",
        "right-patrol": "標示其他人的編輯爲已巡查",
        "right-autopatrol": "將自己的編輯自動標示為已巡查",
-       "right-patrolmarks": "檢視最近變更的巡查標記",
+       "right-patrolmarks": "檢視近期變更的巡查標記",
        "right-unwatchedpages": "檢視未監視的頁面",
        "right-mergehistory": "合併頁面歷史",
        "right-userrights": "編輯所有使用者的權限",
        "nchanges": "$1 次變更",
        "enhancedrc-since-last-visit": "自上次訪問已有 $1",
        "enhancedrc-history": "歷史",
-       "recentchanges": "最近變更",
-       "recentchanges-legend": "最近變更選項",
-       "recentchanges-summary": "追蹤 Wiki 中此頁面的最近變更。",
+       "recentchanges": "近期變更",
+       "recentchanges-legend": "近期變更選項",
+       "recentchanges-summary": "追蹤 Wiki 中此頁面的近期變更。",
        "recentchanges-noresult": "於指定時間內沒有符合條件的變更。",
-       "recentchanges-feed-description": "追蹤此訂閱中該 Wiki 的最近變更。",
+       "recentchanges-feed-description": "追蹤 Wiki 中此訂閱來源的近期變更。",
        "recentchanges-label-newpage": "該編輯建立新頁面",
        "recentchanges-label-minor": "該編輯是一個小修訂",
        "recentchanges-label-bot": "該編輯由機器人執行",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (請參考 [[Special:NewPages|最新頁面]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rcnotefrom": "以下{{PLURAL:$5|為}}自 <strong>$3 $4</strong> 以來的變更 (最多顯示 <strong>$1</strong> 筆)。",
-       "rclistfrom": "顯示自 $3 $2 以來的最近變更",
+       "rclistfrom": "顯示自 $3 $2 以來的近期變更",
        "rcshowhideminor": "$1 小修訂",
        "rcshowhideminor-show": "顯示",
        "rcshowhideminor-hide": "隱藏",
        "upload_directory_read_only": "網頁伺服器沒有上傳目錄 ($1) 的寫入權限。",
        "uploaderror": "上傳錯誤",
        "upload-recreate-warning": "<strong>警告:曾有檔案使用此名稱已被刪除或者移動至它處。</strong>\n\n在此提供刪除與移動日誌方便作為參考:",
-       "uploadtext": "使用下面的表單來上傳檔案。\n要檢視或搜尋以前上傳的檔案,可至 [[Special:FileList|檔案上傳清單]],(重新)上傳會在 [[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|alt text]]</nowiki></code></strong> 會在左方放置一張 200 像素寬的圖片於框中,並顯示 \"alt text\" 作為描述\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> 直接連結到圖片而不顯示預覽",
+       "uploadtext": "使用下面的表單來上傳檔案。\n要檢視或搜尋以前上傳的檔案,可至 [[Special:FileList|檔案上傳清單]],(重新) 上傳會在 [[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|alt text]]</nowiki></code></strong> 會在左方放置一張 200 像素寬的圖片於框中,並顯示 \"alt text\" 作為描述\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> 直接連結到圖片而不顯示預覽",
        "upload-permitted": "允許的檔案類型:$1。",
        "upload-preferred": "建議的檔案類型:$1。",
        "upload-prohibited": "禁止的檔案類型:$1。",
        "filetype-badmime": "不允許上傳 MIME 類型為 \"$1\" 的檔案。",
        "filetype-bad-ie-mime": "Internet Explorer 會將此檔案類型誤判為 \"$1\",可能造成潛在問題,不允許上傳此類型檔案。",
        "filetype-unwanted-type": "不建議使用檔案類型 <strong>\".$1\"</strong>。\n建議的檔案類型有 $2。",
-       "filetype-banned-type": "不允許使用檔案類型 <strong>\".$1\"</strong>。\n允許的{{PLURAL:$3|檔案類型|檔案類型}}為 $2。",
+       "filetype-banned-type": "不允許使用檔案類型 <strong>\".$1\"</strong>。允許的{{PLURAL:$3|檔案類型}}為 $2。",
        "filetype-missing": "該檔案沒有副檔名 (如 \".jpg\")。",
        "empty-file": "您所送出的檔案為空的。",
        "file-too-large": "您所送出的檔案過大。",
        "filename-tooshort": "檔案名稱過短。",
        "filetype-banned": "此類型檔案已禁止使用。",
        "verification-error": "此檔案未通過驗證。",
-       "hookaborted": "æ\82¨æ\89\80å\98\97試ç\9a\84ä¿®æ\94¹è¢«æ\93´å±\95套件中止。",
+       "hookaborted": "æ\82¨æ\89\80å\98\97試ç\9a\84ä¿®æ\94¹è¢«æ\93´å\85\85套件中止。",
        "illegal-filename": "不允許使用的檔案名稱。",
        "overwrite": "不允許覆蓋現有檔案。",
        "unknown-error": "發生不明錯誤。",
-       "tmp-create-error": "無法建立臨時檔案。",
+       "tmp-create-error": "無法建立暫存檔案。",
        "tmp-write-error": "寫入臨時檔案發生錯誤。",
        "large-file": "建議的檔案大小上限為 $1;\n此檔案為 $2。",
        "largefileserver": "此檔案大小超出伺服器設定的允許範圍。",
-       "emptyfile": "您上傳的檔案為空的。\n可能是檔案名輸入錯誤。\n請檢查您是否真的要上傳空檔案。",
+       "emptyfile": "您上傳的檔案為空的。\n可能是檔案名輸入錯誤。\n請檢查您是否真的要上傳空檔案。",
        "windows-nonascii-filename": "本 Wiki 不支援使用特殊符號的檔案名稱。",
        "fileexists": "已存在相同名稱的檔案,若{{GENDER:|您}}不確定是否要變更它,請檢查 <strong>[[:$1]]</strong>。\n[[$1|thumb]]",
        "filepageexists": "此檔案的描述頁面 <strong>[[:$1]]</strong> 已存在,但目前沒有使用此名稱的檔案。\n您在此輸入的摘要不會儲存到該描述頁面,\n您必須手動編輯該描述頁面。\n[[$1|thumb]]",
        "upload-proto-error": "通訊協定不正確",
        "upload-proto-error-text": "遠端上傳檔案需要使用以 <code>http://</code> 或 <code>ftp://</code> 開頭的 URL。",
        "upload-file-error": "內部錯誤",
-       "upload-file-error-text": "嘗試在伺服器上建立臨時檔案時發生內部錯誤。\n請連絡 [[Special:ListUsers/sysop|管理員]]。",
+       "upload-file-error-text": "嘗試在伺服器上建立暫存檔案時發生內部錯誤。\n請連絡 [[Special:ListUsers/sysop|管理員]]。",
        "upload-misc-error": "不明的上傳錯誤",
        "upload-misc-error-text": "上傳時發生不明錯誤。\n請檢查您的 URL 是否有效且可存取,然後再重試一次。\n如果仍有問題,請聯絡 [[Special:ListUsers/sysop|管理員]]。",
        "upload-too-many-redirects": "該 URL 重新導向至太多其他位址",
        "backend-fail-stream": "無法傳輸檔案 \"$1\"。",
        "backend-fail-backup": "無法備份檔案 \"$1\"。",
        "backend-fail-notexists": "檔案 $1 不存在。",
-       "backend-fail-hashes": "無法取得檔案雜湊值(Hash)進行比較。",
+       "backend-fail-hashes": "無法取得檔案雜湊值 (Hash) 進行比較。",
        "backend-fail-notsame": "於 \"$1\" 已存在另一個不相同的檔案。",
        "backend-fail-invalidpath": "\"$1\" 不是有效的儲存路徑。",
        "backend-fail-delete": "無法刪除檔案 \"$1\"。",
        "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-based 的伺服器,不支援 img_auth。\n請參考 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization。",
        "img-auth-notindir": "已設定的上傳目錄清單中不存在您指定的路徑。",
        "img-auth-badtitle": "無法使用 \"$1\" 建立有效的標題。",
        "img-auth-nologinnWL": "您尚未登入,且 \"$1\" 並未在允許清單上。",
        "listfiles-summary": "此特殊頁面顯示所有已上傳的檔案。",
        "listfiles_search_for": "搜尋媒體名稱:",
        "imgfile": "檔案",
-       "listfiles": "檔案列表",
+       "listfiles": "檔案清單",
        "listfiles_thumb": "縮圖",
        "listfiles_date": "日期",
        "listfiles_name": "名稱",
        "statistics": "統計",
        "statistics-header-pages": "頁面統計",
        "statistics-header-edits": "編輯統計",
-       "statistics-header-views": "檢視統計",
        "statistics-header-users": "使用者統計資訊",
        "statistics-header-hooks": "其它統計",
        "statistics-articles": "內容頁面",
        "statistics-files": "已上傳的檔案",
        "statistics-edits": "自 {{SITENAME}} 成立以來的頁面編輯數",
        "statistics-edits-average": "每頁平均編輯數",
-       "statistics-views-total": "檢視總數",
-       "statistics-views-total-desc": "不包含不存在頁面與特殊頁面的檢視數",
-       "statistics-views-peredit": "每次編輯檢視數",
        "statistics-users": "已註冊的 [[Special:ListUsers|使用者]]",
        "statistics-users-active": "活動使用者",
        "statistics-users-active-desc": "在最近 $1 天操作過的使用者",
-       "statistics-mostpopular": "檢視最多次的頁面",
        "pageswithprop": "擁有屬性的頁面",
        "pageswithprop-legend": "擁有頁面屬性的頁面",
        "pageswithprop-text": "此頁面用來查詢使用了指定屬性的頁面。",
        "uncategorizedtemplates": "待分類樣版",
        "unusedcategories": "未使用的分類",
        "unusedimages": "未使用的檔案",
-       "popularpages": "熱門頁面",
        "wantedcategories": "需要的分類",
        "wantedpages": "需要的頁面",
        "wantedpages-badtitle": "結果集合中的標題無效:$1",
        "wantedfiles": "需要的檔案",
-       "wantedfiletext-cat": "以ä¸\8bæª\94æ¡\88被使ç\94¨ï¼\8cä½\86ä¸\8då­\98å\9c¨ã\80\82å¤\96é\83¨å\84²å­\98庫ç\9a\84æª\94æ¡\88å\84\98管ç\8f¾æ\9c\89ï¼\8cä½\86å\8f¯è\83½æ\9c\83å\9c¨æ­¤å\88\97å\87ºï¼\8cä»»ä½\95æ­¤é¡\9eç\9a\84誤報å°\87被<del>å\89\94é\99¤</del>ã\80\82æ­¤å¤\96ï¼\8cå\85§åµ\8cäº\86ä¸\8då­\98å\9c¨ç\9a\84æª\94æ¡\88ç\9a\84網é \81å°\87å\9c¨[[:$1]]å\88\97å\87ºã\80\82",
+       "wantedfiletext-cat": "ä¸\8bå\88\97æª\94æ¡\88被æ\99\82ç\94¨ï¼\8cä½\86æª\94æ¡\88ä¸\8då­\98å\9c¨ã\80\82 å¤\96é\83¨å\84²å­\98庫ç\9a\84æª\94æ¡\88å\84\98管å­\98å\9c¨ï¼\8cä½\86æ­¤æ¸\85å\96®ä»\8dæ\9c\83å\88\97å\87ºã\80\82 é\80\99é¡\9e誤報ç\9a\84é \85ç\9b®æ\9c\83以 <del>å\88ªé\99¤ç·\9a</del> æ¨\99示ã\80\82 å\8f¦å¤\96ï¼\8cé \81é\9d¢å\85§åµ\8cæª\94æ¡\88ä¸\8då­\98å\9c¨æ\9c\83æ\96¼æ¸\85å\96® [[:$1]] ä¸­é¡¯ç¤ºã\80\82",
        "wantedfiletext-cat-noforeign": "下列檔案已被使用但不存在。 除此之外,頁面已內嵌但不存在的檔案列於 [[:$1]]。",
-       "wantedfiletext-nocat": "以ä¸\8bæª\94æ¡\88被使ç\94¨ï¼\8cä½\86ä¸\8då­\98å\9c¨ã\80\82å¤\96é\83¨å\84²å­\98庫ç\9a\84æ\96\87件å\84\98管ç\8f¾æ\9c\89ï¼\8cä½\86å\8f¯è\83½æ\9c\83å\9c¨æ­¤å\88\97å\87ºï¼\8cä»»ä½\95æ­¤é¡\9eç\9a\84誤報å°\87被<del>å\89\94é\99¤</del>。",
+       "wantedfiletext-nocat": "ä¸\8bå\88\97æª\94æ¡\88被æ\99\82ç\94¨ï¼\8cä½\86æª\94æ¡\88ä¸\8då­\98å\9c¨ã\80\82 å¤\96é\83¨å\84²å­\98庫ç\9a\84æª\94æ¡\88å\84\98管å­\98å\9c¨ï¼\8cä½\86æ­¤æ¸\85å\96®ä»\8dæ\9c\83å\88\97å\87ºã\80\82 é\80\99é¡\9e誤報ç\9a\84é \85ç\9b®æ\9c\83以 <del>å\88ªé\99¤ç·\9a</del> æ¨\99示。",
        "wantedfiletext-nocat-noforeign": "下列檔案已被使用但不存在。",
        "wantedtemplates": "需要的樣版",
        "mostlinked": "被連結最多的頁面",
        "mostlinkedtemplates": "被引用最多的頁面",
        "mostcategories": "最多分類的頁面",
        "mostimages": "被連結最多的檔案",
-       "mostinterwikis": "最多 Interwiki 連結的頁面",
+       "mostinterwikis": "最多網際 Wiki 連結的頁面",
        "mostrevisions": "最多修訂的頁面",
        "prefixindex": "所有頁面與字首",
        "prefixindex-namespace": "所有含字首的頁面 ($1 命名空間)",
        "pager-newer-n": "較新 $1 筆",
        "pager-older-n": "較舊 $1 筆",
        "suppress": "監督",
-       "querypage-disabled": "此特殊頁面基於效能的原因已經被停用。",
+       "querypage-disabled": "此特殊頁面因考量效能問題已被停用。",
+       "apihelp": "API 說明",
+       "apihelp-no-such-module": "查無模組 \"$1\"。",
        "booksources": "圖書資源",
        "booksources-search-legend": "尋找圖書資源",
        "booksources-isbn": "國際標準書號:",
-       "booksources-go": "執行",
-       "booksources-text": "以ä¸\8bæ\98¯ä¸\80份é\8a·å\94®æ\96°æ\9b¸æ\88\96äº\8cæ\89\8bæ\9b¸ç\9a\84å\88\97表ï¼\8c並å\8f¯è\83½æ\9c\89{{GENDER:|ä½ |妳|ä½ }}æ­£å°\8bæ\89¾ç\9a\84æ\9b¸ç\9a\84é\80²ä¸\80æ­¥è¨\8aæ\81¯:",
-       "booksources-invalid-isbn": "æ\8f\90ä¾\9bç\9a\84ISBNè\99\9f碼並ä¸\8d正確ï¼\8cè«\8b檢æ\9f¥å\8e\9få§\8bè¤\87製ä¾\86æº\90è\99\9f碼是否有誤。",
+       "booksources-search": "搜尋",
+       "booksources-text": "ä¸\8bå\88\97æ¸\85å\96®å\8c\85å\90«å\85¶ä»\96é\8a·å\94®æ\96°æ\9b¸ç±\8dæ\88\96äº\8cæ\89\8bæ\9b¸ç±\8dç\9a\84網ç«\99é\80£çµ\90ï¼\8cå\8f¯æ\9c\83æ\9c\89ä½ æ\83³å°\8bæ\89¾æ\9b¸ç±\8dç\9a\84é\80²ä¸\80é\83¨è³\87è¨\8a:",
+       "booksources-invalid-isbn": "æ\82¨æ\8f\90ä¾\9bç\9a\84 ISBN ä¸\8d正確ï¼\8cè«\8b檢æ\9f¥è¤\87製ç\9a\84ä¾\86æº\90是否有誤。",
        "specialloguserlabel": "執行者:",
        "speciallogtitlelabel": "目標 (標題或使用者):",
        "log": "日誌",
        "deletedcontributions-title": "已刪除的使用者貢獻",
        "sp-deletedcontributions-contribs": "貢獻",
        "linksearch": "外部連結搜尋",
-       "linksearch-pat": "搜尋網址:",
+       "linksearch-pat": "搜尋關鍵字:",
        "linksearch-ns": "命名空間:",
        "linksearch-ok": "搜尋",
-       "linksearch-text": "可使用萬用字元如 \"*.wikipedia.org\"。\n萬用字元必須使用在最上層網域,例如 \"*.org\".<br />\n支援的{{PLURAL:$2|通訊協定|通訊協定}}有:<code>$1</code> (若未指定則預設使用 http:// 通訊協定)。",
+       "linksearch-text": "可使用萬用字元如 \"*.wikipedia.org\"。\n萬用字元必須使用在最上層網域,例如 \"*.org\".<br />\n支援的{{PLURAL:$2|通訊協定}}有:<code>$1</code> (若未指定則預設使用 http:// 通訊協定)。",
        "linksearch-line": "$1 由 $2 所連結",
        "linksearch-error": "萬用字元僅可在主機名稱的開頭使用。",
        "listusersfrom": "顯示使用者開始自:",
        "listgrouprights-namespaceprotection-namespace": "命名空間",
        "listgrouprights-namespaceprotection-restrictedto": "允許使用者編輯的權限",
        "trackingcategories": "追蹤分類",
-       "trackingcategories-summary": "此頁面列出由 MediaWiki 系統自動產生用來追蹤頁面的分類,這些分類的名稱可由命名空間 {{ns:8}} 中的相關系統訊息中修改。",
+       "trackingcategories-summary": "此頁面列出由 MediaWiki 軟體自動產生用來追蹤頁面的分類,這些分類的名稱可由命名空間 {{ns:8}} 中的相關系統訊息中修改。",
        "trackingcategories-msg": "追蹤分類",
        "trackingcategories-name": "訊息名稱",
        "trackingcategories-desc": "分類收錄標準",
        "index-category-desc": "命名空間允許,且含有魔術字 <code><nowiki>__INDEX__</nowiki></code> 被機器人列入索引的頁面。",
        "post-expand-template-inclusion-category-desc": "展開樣版後大小超過 <code>$wgMaxArticleSize</code> 導致部份樣版未正常展開的頁面。",
        "post-expand-template-argument-category-desc": "展開樣版參數後大小超過 <code>$wgMaxArticleSize</code> 的頁面 (有些於三括號中,如 <code>{{{Foo}}}</code>)。",
-       "expensive-parserfunction-category-desc": "頁面使用太多消耗系統資源的析器函數 (如 <code>#ifexist</code>)。\n請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit]。",
+       "expensive-parserfunction-category-desc": "頁面使用太多消耗系統資源的析器函數 (如 <code>#ifexist</code>)。\n請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit]。",
        "broken-file-category-desc": "含有損壞檔案連結的頁面 (內嵌檔案連結的檔案不存在)。",
        "hidden-category-category-desc": "內容中使用 <code><nowiki>__HIDDENCAT__</nowiki></code> 的分類,可隱藏預設在頁面上顯示的分類連結方塊。",
        "trackingcategories-nodesc": "沒有可用的描述。",
        "emailuser-title-notarget": "E-mail 給使用者",
        "emailpage": "E-mail 給使用者",
        "emailpagetext": "您可以使用以下表格傳送電子郵件給這位 {{Gender:$1|使用者}}。\n您在 [[Special:Preferences|偏好設定]] 中所輸入的電子郵件位址將會作為郵件的 \"寄件人\",因此該使用者可直接回覆您。",
-       "defemailsubject": "來自使用者 \"$1\" 於 {{SITENAME}} 寄來的電子郵件",
+       "defemailsubject": "{{SITENAME}} 使用者 \"$1\" 寄來的電子郵件",
        "usermaildisabled": "使用者電子郵件已停用",
-       "usermaildisabledtext": "您不傳送信件到這個 Wiki 上的其他使用者",
+       "usermaildisabledtext": "您不傳送信件到這個 Wiki 上的其他使用者",
        "noemailtitle": "沒有電子郵件位址",
        "noemailtext": "此使用者尚未指定一個有效的電子郵件位址。",
        "nowikiemailtext": "此使用者選擇不接收其他使用者的信件。",
        "emailtarget": "輸入收件人使用者名稱",
        "emailusername": "使用者名稱:",
        "emailusernamesubmit": "送出",
-       "email-legend": "傳送電子郵件給另一位 {{SITENAME}} 使用者",
+       "email-legend": "傳送電子郵件給另一位 {{SITENAME}} 使用者",
        "emailfrom": "寄件人:",
        "emailto": "收件人:",
        "emailsubject": "主旨:",
        "emailmessage": "訊息:",
        "emailsend": "傳送",
-       "emailccme": "傳送一份副本到我的電子郵件信箱。",
+       "emailccme": "傳送一份訊息副本到我的電子郵件信箱。",
        "emailccsubject": "您寄給 $1 的訊息副本:$2",
        "emailsent": "已寄出電子郵件",
        "emailsenttext": "已寄出您的電子郵件訊息。",
        "mywatchlist": "監視清單",
        "watchlistfor2": "$1 的監視清單 $2",
        "nowatchlist": "您的監視清單沒有任何項目。",
-       "watchlistanontext": "請先登入以檢視或修改在監控表的項目",
+       "watchlistanontext": "請先登入以檢視或修改在監控清單的項目。",
        "watchnologin": "尚未登入",
        "addwatch": "新增至監視清單",
        "addedwatchtext": "已於[[Special:Watchlist|您的監視清單]]新增頁面 \"[[:$1]]\"。\n未來對此頁面及其關聯的對話頁面的變更將會在此清單中列出。",
        "wlheader-enotif": "已開啟電子郵件通知功能。",
        "wlheader-showupdated": "在您最後一次檢視過後修改的頁面會以 <strong>粗體</strong> 顯示。",
        "wlnote": "以下為自 $3 $4 之後的 <strong>$2</strong> 小時內所做的 <strong>$1</strong> 次變更。",
-       "wlshowlast": "顯示最近 $1 小時,$2 天,$3 的修改",
+       "wlshowlast": "顯示最近 $1 小時 $2 天",
        "watchlist-options": "監視清單選項",
        "watching": "正在監視...",
        "unwatching": "正在停止監視...",
        "actionfailed": "操作失敗",
        "deletedtext": "已刪除 \"$1\"。\n請參考 $2 檢視最近的刪除記錄。",
        "dellogpage": "刪除日誌",
-       "dellogpagetext": "以下為最近刪除記錄的列表。",
+       "dellogpagetext": "以下為最近刪除記錄的清單。",
        "deletionlog": "刪除日誌",
        "reverted": "還原到較早的版本",
        "deletecomment": "原因:",
        "deletereasonotherlist": "其它原因",
        "deletereason-dropdown": "* 常見的刪除原因\n** 濫發廣告訊息\n** 破壞\n** 侵犯版權\n** 作者請求\n** 損壞的重新導向連結",
        "delete-edit-reasonlist": "編輯刪除原因",
-       "delete-toobig": "這個頁面有一個十分大量的編輯歷史,超過$1次修訂。刪除此類頁面的動作已經被限制,以防止在{{SITENAME}}上的意外擾亂。",
-       "delete-warning-toobig": "這個頁面有一個十分大量的編輯歷史,超過$1次修訂。刪除它可能會擾亂{{SITENAME}}的資料庫操作;在繼續此動作前請小心。",
+       "delete-toobig": "此頁面含有大量的編輯歷史,超過 $1 次修訂。\n已限制刪除此類頁面的動作,以避免意外中斷 {{SITENAME}} 的運作。",
+       "delete-warning-toobig": "此頁面含有大量的編輯歷史,超過 $1 次修訂。\n刪除該頁面可能會中斷 {{SITENAME}} 的資料庫運作;\n請小心執行此動作。",
        "deleteprotected": "此頁面已受保護,您無法刪除此頁面。",
        "deleting-backlinks-warning": "<strong>警告:</strong>您正要刪除的頁面有[[Special:WhatLinksHere/{{FULLPAGENAME}}|其他頁面]]連結或引用。",
        "rollback": "還原編輯",
        "revertpage-nouser": "已還隱藏使用者的編輯為最後 {{GENDER:$1|[[User:$1|$1]]}} 修訂的版本",
        "rollback-success": "已還原 $1 做的編輯;\n更變回最後由 $2 修訂的版本。",
        "sessionfailure-title": "連線階段失敗",
-       "sessionfailure": "似乎您的登入會話有問題;\n為了防止會話劫持,這個操作已經被取消。\n請返回先前的頁面,重新載入該頁面,然後重試。",
+       "sessionfailure": "您的登入連線階段似乎有問題,\n為了預防連線階段受到劫持攻擊,此動作已經被取消。\n請返回上一頁,重新讀取該頁面再試一次。",
        "protectlogpage": "保護日誌",
-       "protectlogtext": "以下為變更頁面保護的列表。\n請參考 [[Special:ProtectedPages|受保護頁面列表]] 檢視目前受保護頁面。",
+       "protectlogtext": "以下為變更頁面保護的清單。\n請參考 [[Special:ProtectedPages|受保護頁面清單]] 檢視目前受保護頁面。",
        "protectedarticle": "已保護 \"[[$1]]\"",
        "modifiedarticleprotection": "已變更 \"[[$1]]\" 的保護層級",
        "unprotectedarticle": "已解除 \"[[$1]]\" 的保護",
        "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** 高流量頁面",
        "month": "截止月份:",
        "year": "截止年份:",
        "sp-contributions-newbies": "只顯示新帳號的貢獻",
-       "sp-contributions-newbies-sub": "新",
+       "sp-contributions-newbies-sub": "新帳號的貢獻",
        "sp-contributions-newbies-title": "新帳號的使用者貢獻",
        "sp-contributions-blocklog": "封鎖記錄",
        "sp-contributions-suppresslog": "已禁止顯示的使用者貢獻",
        "sp-contributions-talk": "對話",
        "sp-contributions-userrights": "使用者權限管理",
        "sp-contributions-blocked-notice": "此使用者目前已被封鎖。\n以下為最近的封鎖紀錄以供參考:",
-       "sp-contributions-blocked-notice-anon": "此 IP 位址目前已被封鎖。\n以下為最近的封鎖錄以供參考:",
-       "sp-contributions-search": "搜尋貢獻記錄",
+       "sp-contributions-blocked-notice-anon": "此 IP 位址目前已被封鎖。\n以下為最近的封鎖錄以供參考:",
+       "sp-contributions-search": "搜尋貢獻",
        "sp-contributions-username": "IP 位址或使用者名稱:",
-       "sp-contributions-toponly": "å\8fªé¡¯ç¤ºæ\9c\80æ\96°ä¿®è¨\82ç\89\88æ\9c¬ç\9a\84編輯",
-       "sp-contributions-newonly": "å\83\85顯示建ç«\8bé \81é\9d¢ä¹\8b編輯",
+       "sp-contributions-toponly": "只顯示最新修訂的編輯",
+       "sp-contributions-newonly": "å\8fªé¡¯ç¤ºå»ºç«\8bé \81é\9d¢ç\9a\84編輯",
        "sp-contributions-submit": "搜尋",
        "whatlinkshere": "連入頁面",
        "whatlinkshere-title": "連結到 \"$1\" 的頁面",
        "unblocked": "[[User:$1|$1]] 的封鎖已經解除。",
        "unblocked-range": "已解除封鎖 $1。",
        "unblocked-id": "已經移除 $1 的封鎖。",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] 已解除封鎖。",
        "blocklist": "已封鎖的使用者",
        "ipblocklist": "已封鎖的使用者",
        "ipblocklist-legend": "搜尋已封鎖的使用者",
        "block-log-flags-angry-autoblock": "加強自動封鎖已開啟",
        "block-log-flags-hiddenname": "隱藏使用者名稱",
        "range_block_disabled": "管理員可建立範圍封鎖的權限以被關閉。",
-       "ipb_expiry_invalid": "無效的終止時間。",
+       "ipb_expiry_invalid": "無效的期限。",
        "ipb_expiry_temp": "隱藏使用者名稱的封鎖不可設定期限。",
        "ipb_hide_invalid": "無法禁止顯示此帳號;它擁有超過 $1 次的編輯。",
        "ipb_already_blocked": "已經封鎖 \"$1\"。",
        "ipb_blocked_as_range": "錯誤:IP 位址 $1 並不是直接被封鎖,因此無法直接解除封鎖。\n此 IP 位址在 $2 的封鎖範圍之中,您可以解決此範圍的封鎖。",
        "ip_range_invalid": "無效的 IP 範圍。",
        "ip_range_toolarge": "不允許封鎖範圍大於 /$1。",
-       "proxyblocker": "代理封鎖器",
-       "proxyblockreason": "因您的 IP 位址是開放代理伺服器,已被封鎖。\n請聯繫您的網服務供應商或您所在組織的技術支援,告知他們此嚴重的安全性問題。",
+       "proxyblocker": "代理伺服器封鎖器",
+       "proxyblockreason": "因您的 IP 位址是開放代理伺服器,已被封鎖。\n請聯繫您的網服務供應商或您所在組織的技術支援,告知他們此嚴重的安全性問題。",
        "sorbsreason": "您的 IP 位址在 {{SITENAME}} 使用的 DNSBL 列為開放代理伺服器。",
        "sorbs_create_account_reason": "您連線到 {{SITENAME}} 的 IP 位址被 DNSBL 列為開放代理伺服器。\n您不能建立帳號。",
        "xffblockreason": "您的 IP 位址使用 X-Forwarded-For 標頭,您或您使用的代理伺服器已被封鎖。\n封鎖的原因為:$1",
        "thumbnail_error_remote": "來自 $1 錯誤訊息:\n$2",
        "djvu_page_error": "DjVu 頁面超出範圍",
        "djvu_no_xml": "無法在 DjVu 檔案中擷取 XML",
-       "thumbnail-temp-create": "無法建立臨時縮圖檔案",
+       "thumbnail-temp-create": "無法建立暫存縮圖檔案",
        "thumbnail-dest-create": "無法儲存縮圖至目標",
        "thumbnail_invalid_params": "無效的縮圖參數",
        "thumbnail_dest_directory": "無法建立目標目錄",
        "importsuccess": "已完成匯入!",
        "importnosources": "未定義任何 Transwiki 匯入來源且已關閉使用歷史記錄上傳功能。",
        "importnofile": "未上傳匯入檔案。",
-       "importuploaderrorsize": "上匯入檔案失敗。\n檔案大小超過允許上傳大小。",
-       "importuploaderrorpartial": "上匯入檔案失敗。\n僅上傳部份檔案。",
-       "importuploaderrortemp": "上載匯入檔案失敗。\n遺失臨時資料夾。",
-       "import-parse-failure": "XML 匯入析失敗",
+       "importuploaderrorsize": "上匯入檔案失敗。\n檔案大小超過允許上傳大小。",
+       "importuploaderrorpartial": "上匯入檔案失敗。\n僅上傳部份檔案。",
+       "importuploaderrortemp": "上傳匯入檔案失敗。\n遺失暫存資料夾。",
+       "import-parse-failure": "XML 匯入析失敗",
        "import-noarticle": "沒有任何可匯入的頁面!",
        "import-nonewrevisions": "未匯入任何修訂 (修訂已存在,或因錯誤跳過)。",
        "xml-error-string": "$1 於行 $2,欄 $3 ($4 位元組):$5",
        "tooltip-pt-userpage": "您的使用者頁面",
        "tooltip-pt-anonuserpage": "您編輯使用的 IP 位址所對應的使用者頁面",
        "tooltip-pt-mytalk": "您的對話頁面",
-       "tooltip-pt-anontalk": "對於來自此 IP 位址編輯的對話",
+       "tooltip-pt-anontalk": "有關來自此 IP 位址編輯的討論",
        "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-n-mainpage": "參觀主頁面",
        "tooltip-n-mainpage-description": "參觀主頁面",
        "tooltip-n-portal": "關於本專案、您可以做什麼、哪裡可以找到事情",
-       "tooltip-n-currentevents": "提供目前新聞事件的背景資料",
-       "tooltip-n-recentchanges": "列出此 Wiki 中的最近變更清單",
+       "tooltip-n-currentevents": "尋找新聞中最新動態的背景資訊",
+       "tooltip-n-recentchanges": "列出此 Wiki 中的近期變更清單",
        "tooltip-n-randompage": "隨機進入一個頁面",
        "tooltip-n-help": "尋求協助的地方",
        "tooltip-t-whatlinkshere": "列出所有連結此頁面的頁面",
-       "tooltip-t-recentchangeslinked": "此頁面連結到其他頁面的最近變更",
+       "tooltip-t-recentchangeslinked": "此頁面連結到其他頁面的近期變更",
        "tooltip-feed-rss": "訂閱此頁面的 RSS feed",
        "tooltip-feed-atom": "訂閱此頁面的 Atom feed",
        "tooltip-t-contributions": "此使用者的貢獻清單",
        "tooltip-t-emailuser": "傳送電子郵件給這個使用者",
+       "tooltip-t-info": "更多關於此頁面的資訊",
        "tooltip-t-upload": "上傳檔案",
-       "tooltip-t-specialpages": "全部特殊頁面的列表",
+       "tooltip-t-specialpages": "全部特殊頁面的清單",
        "tooltip-t-print": "此頁面的可列印版本",
-       "tooltip-t-permalink": "此頁面修訂的固定連結",
+       "tooltip-t-permalink": "此頁面修訂的靜態連結",
        "tooltip-ca-nstab-main": "檢視頁面內容",
        "tooltip-ca-nstab-user": "檢視使用者頁面",
        "tooltip-ca-nstab-media": "檢視媒體頁面",
        "noscript.css": "/* 此 CSS 會影響沒有啓用 JavaScript 的使用者 */",
        "group-autoconfirmed.css": "/* 此 CSS 會影響自動確認的使用者 */",
        "group-bot.css": "/* 此 CSS 會影響機器人 */",
-       "group-sysop.css": "/*  CSS 會影響管理員 */",
+       "group-sysop.css": "/* 這裡的 CSS 會影響管理員 */",
        "group-bureaucrat.css": "/* 此 CSS 會影響行政員 */",
        "common.js": "/* 此 JavaScript 會用於使用者載入的每一個頁面。 */",
+       "group-sysop.js": "/* 這裡的 JavaScript 會影響管理員 */",
        "anonymous": "{{SITENAME}} 的匿名{{PLURAL:$1|使用者}}",
        "siteuser": "{{SITENAME}} 使用者 $1",
        "anonuser": "{{SITENAME}} 匿名使用者 $1",
-       "lastmodifiedatby": "此頁由 $3 於 $1 $2 的最後更改。",
+       "lastmodifiedatby": "此頁面由 $3 於 $1 $2 做最後修改。",
        "othercontribs": "此頁面由 $1 所貢獻。",
        "others": "其他",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|使用者}} $1",
        "pageinfo-robot-policy": "由機器人建立索引",
        "pageinfo-robot-index": "允許",
        "pageinfo-robot-noindex": "不允許",
-       "pageinfo-views": "檢視次數",
        "pageinfo-watchers": "頁面監視者數",
        "pageinfo-few-watchers": "少於 $1 名監視者",
        "pageinfo-redirects-name": "指向此頁面的重新導向頁面數量",
        "pageinfo-lasttime": "最近編輯日期",
        "pageinfo-edits": "編輯總次數",
        "pageinfo-authors": "作者總數",
-       "pageinfo-recent-edits": "最近編輯次數 (過去$1內)",
+       "pageinfo-recent-edits": "最近編輯次數 (過去 $1 內)",
        "pageinfo-recent-authors": "最近作者數",
        "pageinfo-magic-words": "魔術{{PLURAL:$1|字}} ($1)",
-       "pageinfo-hidden-categories": "隱藏{{PLURAL:$1|分類}} ($1)",
+       "pageinfo-hidden-categories": "隱藏分類 ($1)",
        "pageinfo-templates": "引用樣版 ($1)",
        "pageinfo-transclusions": "頁面被引用於 ($1)",
        "pageinfo-toolboxlink": "頁面資訊",
        "markaspatrolledtext": "標記此頁面為已巡查",
        "markedaspatrolled": "己標記為已巡查",
        "markedaspatrolledtext": "已標記選擇的修訂 [[:$1]] 為已巡查。",
-       "rcpatroldisabled": "最近變更巡查已停用",
+       "rcpatroldisabled": "近期變更巡查已停用",
        "rcpatroldisabledtext": "最新變更巡查的功能目前已停用。",
        "markedaspatrollederror": "無法標記為已巡查",
        "markedaspatrollederrortext": "您需指定要標記為已巡查的修訂。",
        "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-imagewidth": "寬度",
        "exif-imagelength": "高度",
        "exif-bitspersample": "每像素位元",
        "exif-samplesperpixel": "像素數量",
        "exif-planarconfiguration": "資料排列",
        "exif-ycbcrsubsampling": "黃色轉洋紅二次抽樣比率",
-       "exif-ycbcrpositioning": "黃色和洋紅配置",
+       "exif-ycbcrpositioning": "亮度與彩度偏移",
        "exif-xresolution": "水平解析度",
        "exif-yresolution": "垂直解析度",
        "exif-stripoffsets": "影像資料位置",
        "exif-rating": "評分 (共 5 分)",
        "exif-rightscertificate": "版權管理證書",
        "exif-copyrighted": "版權狀態",
-       "exif-copyrightowner": "ç\89\88æ¬\8aæ\8c\81有人",
+       "exif-copyrightowner": "ç\89\88æ¬\8aæ\89\80有人",
        "exif-usageterms": "使用條款",
        "exif-webstatement": "線上版權聲明",
        "exif-originaldocumentid": "原始文件唯一識別碼",
        "exif-urgency-low": "低 ($1)",
        "exif-urgency-high": "高 ($1)",
        "exif-urgency-other": "使用者自訂優先權 ($1)",
-       "watchlistall2": "全部",
        "namespacesall": "全部",
        "monthsall": "全部",
        "confirmemail": "確認電子郵件位址",
        "confirmemail_noemail": "您尚未於 [[Special:Preferences|偏好設定]] 輸入一個有效的電子郵件位址。",
-       "confirmemail_text": "{{SITENAME}}è¦\81æ±\82æ\82¨å\9c¨ä½¿ç\94¨é\83µä»¶å\8a\9fè\83½ä¹\8bå\89\8dé©\97è­\89æ\82¨ç\9a\84é\83µç®±ä½\8då\9d\80ã\80\82\né»\9eé\81¸ä»¥ä¸\8bæ\8c\89é\88\95å\8f¯å\90\91æ\82¨ç\9a\84é\83µç®±å\82³é\80\81ä¸\80å°\81確èª\8dé\83µä»¶ã\80\82該é\83µä»¶å\8c\85å\90«æ\9c\89ä¸\80è¡\8c代碼é\80£çµ\90ï¼\9b\nè«\8bå\9c¨æ\82¨ç\9a\84ç\80\8f覽å\99¨ä¸­è¼\89å\85¥æ­¤é\80£çµ\90以確èª\8dæ\82¨ç\9a\84é\83µç®±位址是有效的。",
+       "confirmemail_text": "{{SITENAME}}è¦\81æ±\82æ\82¨å\9c¨ä½¿ç\94¨é\83µä»¶å\8a\9fè\83½ä¹\8bå\89\8dé©\97è­\89æ\82¨ç\9a\84é\9b»å­\90é\83µä»¶ä½\8då\9d\80ã\80\82\né»\9eé\81¸ä»¥ä¸\8bæ\8c\89é\88\95å\8f¯å\90\91æ\82¨ç\9a\84é\9b»å­\90é\83µä»¶å\82³é\80\81ä¸\80å°\81確èª\8dé\83µä»¶ã\80\82該é\83µä»¶å\8c\85å\90«æ\9c\89ä¸\80è¡\8c代碼é\80£çµ\90ï¼\9b\nè«\8bå\9c¨æ\82¨ç\9a\84ç\80\8f覽å\99¨ä¸­è¼\89å\85¥æ­¤é\80£çµ\90以確èª\8dæ\82¨ç\9a\84é\9b»å­\90é\83µä»¶位址是有效的。",
        "confirmemail_pending": "確認碼已傳送至您的電子郵件,\n若您才剛建立好您的帳號,可能需要稍後幾分鐘才能收到。\n若沒有收到,請再重新申請一次確認碼。",
        "confirmemail_send": "電子郵件寄送確認代碼",
        "confirmemail_sent": "已寄出確認電子郵件。",
-       "confirmemail_oncreate": "一個確認代碼已經被傳送到您的郵箱。該代碼並不要求您進行登入,\n但若您要啟用在此 wiki 上的任何基於電子郵件的功能,您必須先提交此代碼。",
-       "confirmemail_sendfailed": "{{SITENAME}}ç\84¡æ³\95å\82³é\80\81確èª\8dé\83µä»¶ï¼\8cè«\8b檢æ\9f¥é\83µç®±位址是否包含非法字元。\n\n郵件傳送員回應: $1",
+       "confirmemail_oncreate": "確認代碼已傳送至您的電子郵件位址。\n登入動作不需要使用此代碼,但開啟在 Wiki 中任何以電子郵件為基礎的功能會需要先提供此代碼。",
+       "confirmemail_sendfailed": "{{SITENAME}}ç\84¡æ³\95å\82³é\80\81確èª\8dé\83µä»¶ï¼\8cè«\8b檢æ\9f¥é\9b»å­\90é\83µä»¶位址是否包含非法字元。\n\n郵件傳送員回應: $1",
        "confirmemail_invalid": "無效的確認碼,該代碼可能已經過期。",
        "confirmemail_needlogin": "請 $1 以確認您的電子郵件地址。",
-       "confirmemail_success": "æ\82¨ç\9a\84é\83µç®±已經被確認。您現在可以[[Special:UserLogin|登入]]並使用此網站了。",
+       "confirmemail_success": "æ\82¨ç\9a\84é\9b»å­\90é\83µä»¶已經被確認。您現在可以[[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_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 讀取失敗]",
        "unknown_extension_tag": "不明的擴充標籤 \"$1\"",
        "duplicate-defaultsort": "<strong>警告:</strong>預設的排序鍵 \"$2\" 會覆蓋先前預設的排序鍵 \"$1\"。",
        "duplicate-displaytitle": "<strong>警告:</strong> 顯示標題 \"$2\" 覆蓋之前的顯示標題 \"$1\"。",
+       "invalid-indicator-name": "<strong>錯誤:</strong>頁面狀態指示器的<code>name</code> 屬性不能為空。",
        "version": "版本",
        "version-extensions": "已安裝的擴充套件",
        "version-skins": "已安裝的外觀",
        "version-specialpages": "特殊頁面",
-       "version-parserhooks": "èª\9eæ³\95é\80£çµ\90(Hook)",
+       "version-parserhooks": "解æ\9e\90å\99¨é\80£çµ\90 (Hook)",
        "version-variables": "變數",
        "version-antispam": "垃圾訊息防止",
        "version-other": "其他",
        "version-mediahandlers": "媒體處理器",
-       "version-hooks": "連結(Hooks)",
-       "version-parser-extensiontags": "èª\9eæ³\95擴充標籤",
+       "version-hooks": "連結 (Hooks)",
+       "version-parser-extensiontags": "解æ\9e\90å\99¨擴充標籤",
        "version-parser-function-hooks": "語法函數連結",
        "version-hook-name": "連結名稱",
        "version-hook-subscribedby": "署名",
        "redirect-file": "檔案名稱",
        "redirect-not-exists": "查無值",
        "fileduplicatesearch": "搜尋重覆檔案",
-       "fileduplicatesearch-summary": "依據雜湊值(Hash)來搜尋重複的檔案。",
+       "fileduplicatesearch-summary": "依據雜湊值 (Hash) 來搜尋重複的檔案。",
        "fileduplicatesearch-legend": "搜尋重覆",
        "fileduplicatesearch-filename": "檔案名稱:",
        "fileduplicatesearch-submit": "搜尋",
        "specialpages-group-maintenance": "維護報表",
        "specialpages-group-other": "其它特殊頁面",
        "specialpages-group-login": "登入 / 建立帳號",
-       "specialpages-group-changes": "最近變更與日誌",
+       "specialpages-group-changes": "近期變更與日誌",
        "specialpages-group-media": "媒體上傳與報表",
        "specialpages-group-users": "使用者與權限",
        "specialpages-group-highuse": "常用頁面",
        "tag-filter-submit": "搜尋",
        "tag-list-wrapper": "([[Special:Tags|標籤]]:$2)",
        "tags-title": "標籤",
-       "tags-intro": "這個頁面列示出在軟件中已標示的編輯,以及它們的解釋。",
+       "tags-intro": "此頁面列出所有可用來標示編輯的標籤,以及這些標籤的含意。",
        "tags-tag": "標籤名稱",
        "tags-display-header": "在更改清單中的出現方式",
        "tags-description-header": "完整含意說明",
        "compare-rev1": "修訂 1",
        "compare-rev2": "修訂 2",
        "compare-submit": "比較",
-       "compare-invalid-title": "æ\89\80æ\8c\87å®\9a標題無效。",
-       "compare-title-not-exists": "æ\89\80æ\8c\87å®\9aç\9a\84話題不存在。",
-       "compare-revision-not-exists": "所指定的修訂不存在。",
+       "compare-invalid-title": "æ\82¨æ\89\80æ\8c\87å®\9aç\9a\84標題無效。",
+       "compare-title-not-exists": "æ\82¨æ\89\80æ\8c\87å®\9aç\9a\84æ¨\99題不存在。",
+       "compare-revision-not-exists": "æ\82¨æ\89\80æ\8c\87å®\9aç\9a\84ä¿®è¨\82ä¸\8då­\98å\9c¨ã\80\82",
        "dberr-problems": "抱歉!這個網站出現了一些技術上的問題。",
        "dberr-again": "嘗試等候數分鐘後,然後再試。",
        "dberr-info": "(無法連線資料庫伺服器:$1)",
        "dberr-info-hidden": "(無法連線資料庫伺服器)",
-       "dberr-usegoogle": "在現階段您可以嘗試透過 Google 搜尋。",
-       "dberr-outofdate": "留意他們索引出來之內容可能不是最新的。",
-       "dberr-cachederror": "這個是所要求出來的快取複本,可能不是最新的。",
-       "htmlform-invalid-input": "您輸入的內容存在問題",
+       "dberr-usegoogle": "您可以嘗試在此期間使用 Google 搜尋。",
+       "dberr-outofdate": "注意,它們用來建立索引的內容可能不是最新的。",
+       "dberr-cachederror": "這是請求面頁面的快取複本,可能不是最新的。",
+       "htmlform-invalid-input": "您的輸入的內容有問題。",
        "htmlform-select-badoption": "您所指定的值不是有效的選項。",
        "htmlform-int-invalid": "您所指定的值不是一個整數。",
        "htmlform-float-invalid": "您所指定的值不是一個數字。",
        "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-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_redir": "$1 已移動頁面 $3 至 $4 並覆蓋原有重新導向",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|上傳了}}新版本的 $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|已上傳}} $3",
        "rightsnone": "(無)",
+       "revdelete-summary": "編輯摘要",
        "feedback-bugornote": "如果您準備要詳細描述一個技術問題,請至 [$1 回報問題]。\n或您可以使用以下的簡易表單回報問題,您的使用者名稱與評論將被新增到頁面 \"[$3 $2]\"。",
        "feedback-subject": "主旨:",
        "feedback-message": "訊息:",
        "api-error-file-too-large": "您送出的檔案太大了。",
        "api-error-filename-tooshort": "檔案名稱過短。",
        "api-error-filetype-banned": "此檔案類型已禁止使用。",
-       "api-error-filetype-banned-type": "$1{{PLURAL:$4|不是允許的檔案類型}}。  允許的{{PLURAL:$3|檔案類型是}} $2。",
-       "api-error-filetype-missing": "æ\9c¬æª\94æ¡\88缺å°\91äº\86副檔名。",
-       "api-error-hookaborted": "你試圖進行的修改被一個擴展鉤子終止。",
-       "api-error-http": "內部錯誤:無法連到伺服器。",
+       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|不是允許的檔案類型}}。 允許的{{PLURAL:$3|檔案類型有}} $2。",
+       "api-error-filetype-missing": "æ­¤æª\94æ¡\88å\90\8d稱缺å°\91副檔名。",
+       "api-error-hookaborted": "您嘗試進行的修改被某個擴充套件中止。",
+       "api-error-http": "內部錯誤:無法連到伺服器。",
        "api-error-illegal-filename": "不允許使用的檔案名稱。",
        "api-error-internal-error": "內部錯誤:此 Wiki 在處理你的上傳時發生錯誤。",
-       "api-error-invalid-file-key": "內部錯誤:於臨時儲存庫中查無檔案。",
-       "api-error-missingparam": "內部錯誤:請求缺少參數。",
-       "api-error-missingresult": "內部錯誤:無法確定複製是否成功。",
+       "api-error-invalid-file-key": "內部錯誤:於暫存儲存庫中查無檔案。",
+       "api-error-missingparam": "內部錯誤:請求缺少參數。",
+       "api-error-missingresult": "內部錯誤:無法辨識複製是否成功。",
        "api-error-mustbeloggedin": "您必須登入方可上傳檔案。",
-       "api-error-mustbeposted": "內部錯誤:請求需要 HTTP POST。",
-       "api-error-noimageinfo": "上傳成功,但伺服器沒有給我們任何該檔案的資訊。",
-       "api-error-nomodule": "內部錯誤:缺少上傳模塊集。",
-       "api-error-ok-but-empty": "內部錯誤:伺服器沒有響應。",
-       "api-error-overwrite": "不允許覆蓋現有檔案。",
-       "api-error-stashfailed": "內部錯誤:伺服器儲存臨時檔案失敗。",
-       "api-error-publishfailed": "內部錯誤:伺服器發佈臨時檔案失敗。",
-       "api-error-stasherror": "上載檔案存檔時出錯。",
+       "api-error-mustbeposted": "內部錯誤:請求需使用 HTTP POST。",
+       "api-error-noimageinfo": "已成功上傳,但伺服器未回應任何該檔案的資訊。",
+       "api-error-nomodule": "內部錯誤:缺少上傳模組集。",
+       "api-error-ok-but-empty": "內部錯誤:伺服器沒有回應。",
+       "api-error-overwrite": "不允許覆蓋已存在的檔案。",
+       "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",
-       "api-error-unknown-error": "å\85§é\83¨é\8c¯èª¤ï¼\9aå\98\97試ä¸\8aå\82³æª\94æ¡\88æ\99\82å\87ºé\8c¯。",
+       "api-error-unclassified": "發生不明錯誤。",
+       "api-error-unknown-code": "不明錯誤:\"$1\"。",
+       "api-error-unknown-error": "å\85§é\83¨é\8c¯èª¤ï¼\9aå\98\97試ä¸\8aå\82³æ\82¨ç\9a\84æª\94æ¡\88æ\99\82ç\99¼ç\94\9fé\8c¯èª¤。",
        "api-error-unknown-warning": "不明警告:\"$1\"。",
        "api-error-unknownerror": "不明錯誤:\"$1\"。",
        "api-error-uploaddisabled": "此 Wiki 的上傳功能已停用。",
-       "api-error-verification-error": "æ\9c¬檔案可能已損壞,或副檔名錯誤。",
+       "api-error-verification-error": "æ­¤檔案可能已損壞,或副檔名錯誤。",
        "duration-seconds": "$1 秒",
        "duration-minutes": "$1 分鐘",
        "duration-hours": "$1 小時",
        "duration-decades": "$1{{PLURAL:$1|0 年|0 年}}",
        "duration-centuries": "$1 世紀",
        "duration-millennia": "$1 千年",
-       "rotate-comment": "順時針旋轉圖像$1{{PLURAL:$1|度}}",
-       "limitreport-title": "析器分析資料:",
+       "rotate-comment": "已順時針旋轉圖片 $1 {{PLURAL:$1|度|度}}",
+       "limitreport-title": "析器分析資料:",
        "limitreport-cputime": "CPU 使用時間",
        "limitreport-cputime-value": "$1 秒",
        "limitreport-walltime": "實際使用時間",
        "limitreport-walltime-value": "$1 秒",
-       "limitreport-ppvisitednodes": "預處理機訪問節點次數",
+       "limitreport-ppvisitednodes": "預處理器已訪問節點計數",
        "limitreport-ppgeneratednodes": "預處理器產生節點次數",
        "limitreport-postexpandincludesize": "展開後的引用大小",
        "limitreport-postexpandincludesize-value": "$1/$2 個{{PLURAL:$2|位元組}}",
        "limitreport-templateargumentsize": "樣版參數大小",
        "limitreport-templateargumentsize-value": "$1/$2 個{{PLURAL:$2|位元組}}",
        "limitreport-expansiondepth": "最高展開深度",
-       "limitreport-expensivefunctioncount": "高分析函數次數",
+       "limitreport-expensivefunctioncount": "高消耗解析器函數次數",
        "expandtemplates": "展開樣版",
-       "expand_templates_intro": "本特殊頁面會將文字中的樣版展開,可以包含支援的分析程式語法,如 <code><nowiki>{{</nowiki>#language:…}}</code> 與變數如 <code><nowiki>{{</nowiki>CURRENTDAY}}</code>。\n實際上,絕大部分在雙括號中的內容都會被展開。",
+       "expand_templates_intro": "本特殊頁面會將文字中的樣版展開,可以包含支援的解析器語法,如 <code><nowiki>{{</nowiki>#language:…}}</code> 與變數如 <code><nowiki>{{</nowiki>CURRENTDAY}}</code>。\n實際上,絕大部分在雙括號中的內容都會被展開。",
        "expand_templates_title": "上下文標題,用於 {{FULLPAGENAME}} 等:",
        "expand_templates_input": "輸入文字:",
        "expand_templates_output": "結果",
        "right-pagelang": "更改頁面語言",
        "action-pagelang": "更改頁面語言",
        "log-name-pagelang": "更改語言日誌",
-       "log-description-pagelang": "這是頁面語言更改日誌。",
+       "log-description-pagelang": "此頁為頁面語言的變更日誌。",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|已更改}}頁面 $3 的語言從 $4 到 $5。",
-       "default-skin-not-found": "哎呀!您的 Wiki 預設外觀 (<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:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code>skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。\n\n; 若您才剛升級 MediaWiki:\n: MediaWiki 1.24 與較新的版本不再自動開啟已安裝的外觀 (請參考 [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 操作手冊:外觀自動搜尋])。 您可以將下列行貼上至 <code>LocalSettings.php</code> 來開啟所有目前已經安裝的外觀:\n\n<pre>$3</pre>\n\n; 若您才剛修改 <code>LocalSettings.php</code>:\n: 請再次確認您輸入的外觀名稱是否有誤。",
-       "default-skin-not-found-no-skins": "哎呀!您的 Wiki 預設外觀 (<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:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code>skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。 請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。",
+       "default-skin-not-found": "哎呀!您於 <code dir=\"ltr\">$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <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/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\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: 請再次確認您輸入的外觀名稱是否有誤。",
+       "default-skin-not-found-no-skins": "哎呀!您於 <code>$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <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/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code dir=\"ltr\">skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。 請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/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 ('''已停用''')",
+       "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-bitmap": "點陣圖",
+       "mediastatistics-header-drawing": "繪圖 (向量圖)",
+       "mediastatistics-header-audio": "音訊",
+       "mediastatistics-header-video": "影片",
+       "mediastatistics-header-multimedia": "豐富多媒體",
+       "mediastatistics-header-office": "辦公",
+       "mediastatistics-header-text": "純文字",
+       "mediastatistics-header-executable": "可執行",
+       "mediastatistics-header-archive": "已壓縮格式",
+       "json-warn-trailing-comma": "已移除 $1 個 JSON 結尾的{{PLURAL:$1|逗號}}",
+       "json-error-unknown": "JSON 發生問題。錯誤:$1",
+       "json-error-depth": "已超出堆疊深度限制",
+       "json-error-state-mismatch": "無效或格式不正確的 JSON",
+       "json-error-ctrl-char": "控制字元錯誤,可能被不正確編碼",
+       "json-error-syntax": "語法錯誤",
+       "json-error-utf8": "格式不正確的 UTF-8 字元,可能被不正確編碼",
+       "json-error-recursion": "在資料中有一個或多個的遞迴參照值被編碼",
+       "json-error-inf-or-nan": "在資料中有一個或多個的 NAN 或 INF 值被編碼",
+       "json-error-unsupported-type": "下列的資料型態無法被編碼"
 }
index cd4ce7a..93887d3 100644 (file)
 {
-    "@metadata": {
-        "authors": [
-            "Jose77 (on zu.wikipedia.org)",
-            "Joziboy (on zu.wikipedia.org)",
-            "Rosinah3",
-            "Vogone",
-            "לערי ריינהארט"
-        ]
-    },
-    "underline-always": "Njalo",
-    "sunday": "iSonto",
-    "monday": "uMsombuluko",
-    "tuesday": "uLwesibili",
-    "wednesday": "uLwesithathu",
-    "thursday": "uLwesine",
-    "friday": "uLwesihlanu",
-    "saturday": "uMgqibelo",
-    "january": "Umasingana",
-    "february": "uNhlolanja",
-    "march": "uMbasa",
-    "april": "uNdasa",
-    "may_long": "uNhlaba",
-    "june": "uNhlangulana",
-    "july": "uNtulikazi",
-    "august": "uNcwaba",
-    "september": "uMandulo",
-    "october": "uMfumfu",
-    "november": "uLwezi",
-    "december": "uZibandlela",
-    "january-gen": "uJanuwali",
-    "february-gen": "uFebruwari",
-    "march-gen": "uMashi",
-    "april-gen": "u-Apreli",
-    "may-gen": "uMeyi",
-    "june-gen": "uJuni",
-    "july-gen": "uJulayi",
-    "august-gen": "u-Agasti",
-    "september-gen": "uSepthemba",
-    "october-gen": "u-Okthoba",
-    "november-gen": "uNovemba",
-    "december-gen": "uDisemba",
-    "may": "uMeyi",
-    "cancel": "Nqamula",
-    "moredotdotdot": "Amanye...",
-    "mypage": "Ikhasi lami",
-    "mytalk": "Ingxoxo yami",
-    "navigation": "Ukuqondiswa kwemikhumbi",
-    "qbfind": "Thola",
-    "qbbrowse": "Cinga",
-    "qbedit": "Ukuhlela",
-    "qbpageoptions": "Leli khasi",
-    "qbmyoptions": "Amakhasi ami",
-    "errorpagetitle": "Icala",
-    "help": "Usizo",
-    "search": "Sesha",
-    "searchbutton": "Sesha",
-    "go": "Hamba",
-    "searcharticle": "Hamba",
-    "history_short": "Umlando",
-    "printableversion": "Inguqulo eshicilelekayo",
-    "print": "Shicilela",
-    "edit": "Hlela",
-    "editthispage": "Hlela leli khasi",
-    "delete": "Sula",
-    "deletethispage": "Sula lelikhasi",
-    "protect": "Londoloza",
-    "protectthispage": "Londoloza lelikhasi",
-    "newpage": "Ikhasi elisha",
-    "talkpage": "Xoxa ngalelikhasi",
-    "personaltools": "Amathuluzi kamsebenzisi",
-    "talk": "Ingxoxo",
-    "toolbox": "Amathuluzi",
-    "otherlanguages": "Ngezilimi ezinahlukene",
-    "redirectpagesub": "Ikhasi likakuphambukisa",
-    "protectedpage": "Ikhasi elilondolozwa",
-    "jumpto": "Eqa e:",
-    "jumptonavigation": "Ukuqondiswa kwemikhumbi",
-    "jumptosearch": "Sesha",
-    "currentevents": "Izehlakalo ezimanje",
-    "currentevents-url": "Project:Izehlakalo ezimanje",
-    "edithelp": "Usizo ngokuhlela",
-    "mainpage": "Ikhasi Elikhulu",
-    "mainpage-description": "Ikhasi Elikhulu",
-    "portal": "Umnyango wamgwamanda",
-    "portal-url": "Project:Umnyango wamgwamanda",
-    "ok": "Kulungile",
-    "youhavenewmessagesmulti": "Uyanemilayezo emisha e $1",
-    "editsection": "hlela",
-    "toc": "Isiqikili",
-    "showtoc": "Bukisa",
-    "hidetoc": "Fihla",
-    "nstab-main": "Umlayezo",
-    "nstab-user": "Ikhasi lomsebenzisi",
-    "nstab-special": "Kukhulu",
-    "nstab-image": "Ifayela",
-    "nstab-mediawiki": "Umlayezo",
-    "nstab-help": "Usizo",
-    "nstab-category": "Uhlobo",
-    "error": "Icala",
-    "databaseerror": "Idatabheyisi linecala",
-    "internalerror": "Icala lingaphakathi",
-    "welcomeuser": "Umbingelelo, $1!",
-    "welcomecreation-msg": "Ikhawundi lakho liyadalwa. Musa ukukhohlwa ukuguqula [[Special:Preferences|amakhethelo]] a-Wikipedia wakho.",
-    "yourname": "Isiga",
-    "yourpassword": "Izwi elingenangozi",
-    "yourpasswordagain": "Bhala izwi elingenangozi lakho kabusha",
-    "remembermypassword": "Ngikhumbule (for a maximum of $1 {{PLURAL:$1|day|days}})",
-    "login": "Ngena",
-    "nav-login-createaccount": "Ngena / Dala ikhawundi",
-    "userlogin": "Ngena / Dala ikhawundi",
-    "logout": "Phuma",
-    "userlogout": "Phuma",
-    "notloggedin": "Awungenile",
-    "nologin": "Awunekhawundi? '''$1'''.",
-    "nologinlink": "Dala ikhawundi",
-    "createaccount": "Dala ikhawundi",
-    "gotaccountlink": "Ngena",
-    "loginsuccesstitle": "Ubengena",
-    "nosuchuser": "Akukho umsebenzisi unegama \"$1\". Hlola umbhalo wakho, noma dala ikhawundi elisha.",
-    "nosuchusershort": "Akukho umsebenzisi unegama \"$1\". Hlola umbhalo wakho.",
-    "emailconfirmlink": "Qinisekisa ikheli likagesi lakho",
-    "loginlanguagelabel": "Ulimi: $1",
-    "changepassword": "Guqula izwi elingenangozi",
-    "newpassword": "Izwi elingenangozi elisha:",
-    "italic_sample": "Amazwi ama-italiki",
-    "italic_tip": "Amazwi ama-italiki",
-    "hr_tip": "Umugqa uhleliwe  (use sparingly)",
-    "summary": "Isifinyezo:",
-    "minoredit": "Lokho ngukuhlela okuncane",
-    "watchthis": "Bukela ngalelikhasi",
-    "savearticle": "Ukonga ikhasi",
-    "preview": "Isibonakalo",
-    "showpreview": "Bukisa isibonakalo",
-    "showdiff": "Bukisa izinguquko",
-    "missingcommenttext": "Ake ubhale uvo ngaphansi.",
-    "loginreqtitle": "Lidinga ukuthi uyangena",
-    "loginreqlink": "Ngena",
-    "noarticletext": "Akukho umbhalo kuleli khasi manje. Unga [[Special:Search/Allmessages|cinga leli bizo lekhasi]] emakhasini amanye noma unga [{{fullurl:{{FULLPAGENAME}}|action=edit}} hlela leli khasi].",
-    "yourtext": "Umbhalo wakho",
-    "yourdiff": "Izinguquko",
-    "next": "Kulandela",
-    "last": "Amagcino",
-    "histfirst": "lokuqala",
-    "histlast": "ligcinileyo",
-    "rev-delundel": "bukisa/fihla",
-    "searchresults": "Umphumela wokusesha",
-    "preferences": "Amakhethelo",
-    "mypreferences": "Amakhethelo ami",
-    "saveprefs": "Ukonga",
-    "searchresultshead": "Sesha",
-    "timezonelegend": "Isifunda sasikhathi",
-    "localtime": "Isikhathi siyalapha",
-    "username": "Isiga:",
-    "yourrealname": "Igama eliqinisileyo",
-    "yourlanguage": "Ulimi:",
-    "email": "Iposi likagesi",
-    "recentchanges": "Izinguquko ezimanje",
-    "hide": "Fihla",
-    "show": "Bukisa",
-    "recentchangeslinked": "Izinguquko ezilandiweyo",
-    "recentchangeslinked-feed": "Izinguquko ezilandiweyo",
-    "recentchangeslinked-toolbox": "Izinguquko ezilandiweyo",
-    "upload": "Layisha ifayili",
-    "uploadbtn": "Layisha ifayili",
-    "filesource": "Umthombo:",
-    "ignorewarnings": "Duba imiyalo",
-    "upload-success-subj": "Ukulayisha okuchumile",
-    "nolicense": "Ubekhetha lutho",
-    "file-anchor-link": "Ifayela",
-    "nolinkstoimage": "Akukho amakhasi akhomba kuleli fayela.",
-    "randompage": "Ikhasi elingaphandle kokucabanga",
-    "statistics-header-users": "Ukwaziswa wamsebenzisi",
-    "shortpages": "Amakhasi amafishane",
-    "longpages": "Amakhasi amade",
-    "newpages": "Amakhasi amasha",
-    "newpages-username": "Isiga:",
-    "move": "Sunduza",
-    "movethispage": "Thuthisa leli khasi",
-    "specialloguserlabel": "Umsebenzisi:",
-    "allinnamespace": "Onke amakhasi ($1 namespace)",
-    "allpagessubmit": "Hamba",
-    "emailuser": "Thumela umlayezo lo msebenzisi",
-    "noemailtitle": "Akukho ikheli likaposi",
-    "emailsubject": "Indaba",
-    "emailmessage": "Umlayezo",
-    "emailsend": "Thuma",
-    "emailsent": "Umlayezo uthumwa",
-    "watchlist": "Uhlelo ubukelwa wami",
-    "watch": "Bukela",
-    "unwatch": "Mus'ukubukela",
-    "notanarticle": "Akulona ikhasi elinakho okuqukethwe",
-    "deletepage": "Sula ikhasi",
-    "confirm": "Qinisekisa",
-    "exblank": "ikhasi elize",
-    "protectcomment": "Isizathu",
-    "restriction-edit": "Ukuhlela",
-    "restriction-move": "Sunduza",
-    "undeletecomment": "Khuluma:",
-    "contributions": "Amanikelo amsebenzisi",
-    "mycontris": "Amanikelo ami",
-    "nolinkshere": "Akukho amakhasi ukuthi balayela lapha '''[[:$1]]'''.",
-    "isredirect": "Ikhasi silayela",
-    "blockip": "Vimbela lo msebenzisi",
-    "ipbexpiry": "Ukuphela",
-    "ipbreason": "Isizathu",
-    "ipbsubmit": "Vimbela lo msebenzisi",
-    "ipusubmit": "Qeda isivimbelo lo msebenzisi",
-    "createaccountblock": "Ukudala kwekhawundi kuvimbelwa",
-    "databasenotlocked": "Idatabheyisi alikhiyiwi.",
-    "move-page-legend": "Thuthisa ikhasi",
-    "movearticle": "Thuthisa ikhasi",
-    "movepagebtn": "Thuthisa ikhasi",
-    "movereason": "Isizathu",
-    "delete_and_move": "Sula futhi sunduza",
-    "delete_and_move_confirm": "Yebo, sula ikhasi",
-    "export-submit": "Thekelisa",
-    "allmessagesname": "Igama",
-    "thumbnail-more": "Khulisa",
-    "filemissing": "Ifayili lilahlekile",
-    "import-interwiki-submit": "Ngenisa",
-    "tooltip-search": "Phenya",
-    "tooltip-search-fulltext": "\nPhenya amakhasi ukuze uthole lombhalo",
-    "tooltip-p-logo": "vakashela ikhasi elikhulu",
-    "others": "Abanye",
-    "markaspatrolleddiff": "Dweba ukuthi lelikhasi liyagadwa",
-    "markaspatrolledtext": "Dweba ukuthi lelikhasi liyagadwa",
-    "markedaspatrolled": "Dweba ukuthi lelikhasi liyagadwa",
-    "newimages": "Uhlelo lwamafayela amasha",
-    "noimages": "Awuboni lutho.",
-    "ilsubmit": "Sesha",
-    "metadata-expand": "Bukisa imininingwane yonke",
-    "metadata-collapse": "Fihla imininingwane yonke",
-    "exif-orientation": "Ukuma okumaqondana nempumalanga",
-    "exif-artist": "Umbhali",
-    "exif-sharpness": "Ububukhali",
-    "exif-orientation-1": "Kuphelele",
-    "exif-meteringmode-5": "Umhlobiso",
-    "exif-lightsource-4": "Umbani",
-    "exif-lightsource-11": "Umthunzi",
-    "exif-sensingmethod-1": "Akucaci",
-    "exif-scenecapturetype-0": "Izinga",
-    "exif-scenecapturetype-1": "Umfanekiso wesizwe",
-    "exif-scenecapturetype-2": "Umfanekiso womuntu",
-    "exif-scenecapturetype-3": "Imboniso ebusuku",
-    "exif-contrast-0": "Kuphelele",
-    "exif-contrast-1": "Kuntofontofo",
-    "exif-contrast-2": "Kulukhuni",
-    "exif-saturation-0": "Kuphelele",
-    "exif-sharpness-0": "Kuphelele",
-    "exif-sharpness-1": "Kuntofontofo",
-    "exif-sharpness-2": "Kulukhuni",
-    "confirmemail": "Qinisekisa ikheli likagesi",
-    "confirmemail_loggedin": "Ikheli likagesi lakho liqinisekiswa.",
-    "recreate": "Dala kabusha",
-    "confirm_purge_button": "Kulungile"
+       "@metadata": {
+               "authors": [
+                       "Jose77 (on zu.wikipedia.org)",
+                       "Joziboy (on zu.wikipedia.org)",
+                       "Rosinah3",
+                       "Vogone",
+                       "לערי ריינהארט"
+               ]
+       },
+       "underline-always": "Njalo",
+       "sunday": "iSonto",
+       "monday": "uMsombuluko",
+       "tuesday": "uLwesibili",
+       "wednesday": "uLwesithathu",
+       "thursday": "uLwesine",
+       "friday": "uLwesihlanu",
+       "saturday": "uMgqibelo",
+       "january": "Umasingana",
+       "february": "uNhlolanja",
+       "march": "uMbasa",
+       "april": "uNdasa",
+       "may_long": "uNhlaba",
+       "june": "uNhlangulana",
+       "july": "uNtulikazi",
+       "august": "uNcwaba",
+       "september": "uMandulo",
+       "october": "uMfumfu",
+       "november": "uLwezi",
+       "december": "uZibandlela",
+       "january-gen": "uJanuwali",
+       "february-gen": "uFebruwari",
+       "march-gen": "uMashi",
+       "april-gen": "u-Apreli",
+       "may-gen": "uMeyi",
+       "june-gen": "uJuni",
+       "july-gen": "uJulayi",
+       "august-gen": "u-Agasti",
+       "september-gen": "uSepthemba",
+       "october-gen": "u-Okthoba",
+       "november-gen": "uNovemba",
+       "december-gen": "uDisemba",
+       "may": "uMeyi",
+       "cancel": "Nqamula",
+       "moredotdotdot": "Amanye...",
+       "mypage": "Ikhasi lami",
+       "mytalk": "Ingxoxo yami",
+       "navigation": "Ukuqondiswa kwemikhumbi",
+       "qbfind": "Thola",
+       "qbbrowse": "Cinga",
+       "qbedit": "Ukuhlela",
+       "qbpageoptions": "Leli khasi",
+       "qbmyoptions": "Amakhasi ami",
+       "errorpagetitle": "Icala",
+       "help": "Usizo",
+       "search": "Sesha",
+       "searchbutton": "Sesha",
+       "go": "Hamba",
+       "searcharticle": "Hamba",
+       "history_short": "Umlando",
+       "printableversion": "Inguqulo eshicilelekayo",
+       "print": "Shicilela",
+       "edit": "Hlela",
+       "editthispage": "Hlela leli khasi",
+       "delete": "Sula",
+       "deletethispage": "Sula lelikhasi",
+       "protect": "Londoloza",
+       "protectthispage": "Londoloza lelikhasi",
+       "newpage": "Ikhasi elisha",
+       "talkpage": "Xoxa ngalelikhasi",
+       "personaltools": "Amathuluzi kamsebenzisi",
+       "talk": "Ingxoxo",
+       "toolbox": "Amathuluzi",
+       "otherlanguages": "Ngezilimi ezinahlukene",
+       "redirectpagesub": "Ikhasi likakuphambukisa",
+       "protectedpage": "Ikhasi elilondolozwa",
+       "jumpto": "Eqa e:",
+       "jumptonavigation": "Ukuqondiswa kwemikhumbi",
+       "jumptosearch": "Sesha",
+       "currentevents": "Izehlakalo ezimanje",
+       "currentevents-url": "Project:Izehlakalo ezimanje",
+       "edithelp": "Usizo ngokuhlela",
+       "mainpage": "Ikhasi Elikhulu",
+       "mainpage-description": "Ikhasi Elikhulu",
+       "portal": "Umnyango wamgwamanda",
+       "portal-url": "Project:Umnyango wamgwamanda",
+       "ok": "Kulungile",
+       "youhavenewmessagesmulti": "Uyanemilayezo emisha e $1",
+       "editsection": "hlela",
+       "toc": "Isiqikili",
+       "showtoc": "Bukisa",
+       "hidetoc": "Fihla",
+       "nstab-main": "Umlayezo",
+       "nstab-user": "Ikhasi lomsebenzisi",
+       "nstab-special": "Kukhulu",
+       "nstab-image": "Ifayela",
+       "nstab-mediawiki": "Umlayezo",
+       "nstab-help": "Usizo",
+       "nstab-category": "Uhlobo",
+       "error": "Icala",
+       "databaseerror": "Idatabheyisi linecala",
+       "internalerror": "Icala lingaphakathi",
+       "welcomeuser": "Umbingelelo, $1!",
+       "welcomecreation-msg": "Ikhawundi lakho liyadalwa. Musa ukukhohlwa ukuguqula [[Special:Preferences|amakhethelo]] a-Wikipedia wakho.",
+       "yourname": "Isiga",
+       "yourpassword": "Izwi elingenangozi",
+       "yourpasswordagain": "Bhala izwi elingenangozi lakho kabusha",
+       "remembermypassword": "Ngikhumbule (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "login": "Ngena",
+       "nav-login-createaccount": "Ngena / Dala ikhawundi",
+       "userlogin": "Ngena / Dala ikhawundi",
+       "logout": "Phuma",
+       "userlogout": "Phuma",
+       "notloggedin": "Awungenile",
+       "nologin": "Awunekhawundi? '''$1'''.",
+       "nologinlink": "Dala ikhawundi",
+       "createaccount": "Dala ikhawundi",
+       "gotaccountlink": "Ngena",
+       "loginsuccesstitle": "Ubengena",
+       "nosuchuser": "Akukho umsebenzisi unegama \"$1\". Hlola umbhalo wakho, noma dala ikhawundi elisha.",
+       "nosuchusershort": "Akukho umsebenzisi unegama \"$1\". Hlola umbhalo wakho.",
+       "emailconfirmlink": "Qinisekisa ikheli likagesi lakho",
+       "loginlanguagelabel": "Ulimi: $1",
+       "changepassword": "Guqula izwi elingenangozi",
+       "newpassword": "Izwi elingenangozi elisha:",
+       "italic_sample": "Amazwi ama-italiki",
+       "italic_tip": "Amazwi ama-italiki",
+       "hr_tip": "Umugqa uhleliwe  (use sparingly)",
+       "summary": "Isifinyezo:",
+       "minoredit": "Lokho ngukuhlela okuncane",
+       "watchthis": "Bukela ngalelikhasi",
+       "savearticle": "Ukonga ikhasi",
+       "preview": "Isibonakalo",
+       "showpreview": "Bukisa isibonakalo",
+       "showdiff": "Bukisa izinguquko",
+       "missingcommenttext": "Ake ubhale uvo ngaphansi.",
+       "loginreqtitle": "Lidinga ukuthi uyangena",
+       "loginreqlink": "Ngena",
+       "noarticletext": "Akukho umbhalo kuleli khasi manje. Unga [[Special:Search/Allmessages|cinga leli bizo lekhasi]] emakhasini amanye noma unga [{{fullurl:{{FULLPAGENAME}}|action=edit}} hlela leli khasi].",
+       "yourtext": "Umbhalo wakho",
+       "yourdiff": "Izinguquko",
+       "next": "Kulandela",
+       "last": "Amagcino",
+       "histfirst": "lokuqala",
+       "histlast": "ligcinileyo",
+       "rev-delundel": "bukisa/fihla",
+       "searchresults": "Umphumela wokusesha",
+       "preferences": "Amakhethelo",
+       "mypreferences": "Amakhethelo ami",
+       "saveprefs": "Ukonga",
+       "searchresultshead": "Sesha",
+       "timezonelegend": "Isifunda sasikhathi",
+       "localtime": "Isikhathi siyalapha",
+       "username": "Isiga:",
+       "yourrealname": "Igama eliqinisileyo",
+       "yourlanguage": "Ulimi:",
+       "email": "Iposi likagesi",
+       "recentchanges": "Izinguquko ezimanje",
+       "hide": "Fihla",
+       "show": "Bukisa",
+       "recentchangeslinked": "Izinguquko ezilandiweyo",
+       "recentchangeslinked-feed": "Izinguquko ezilandiweyo",
+       "recentchangeslinked-toolbox": "Izinguquko ezilandiweyo",
+       "upload": "Layisha ifayili",
+       "uploadbtn": "Layisha ifayili",
+       "filesource": "Umthombo:",
+       "ignorewarnings": "Duba imiyalo",
+       "upload-success-subj": "Ukulayisha okuchumile",
+       "nolicense": "Ubekhetha lutho",
+       "file-anchor-link": "Ifayela",
+       "nolinkstoimage": "Akukho amakhasi akhomba kuleli fayela.",
+       "randompage": "Ikhasi elingaphandle kokucabanga",
+       "statistics-header-users": "Ukwaziswa wamsebenzisi",
+       "shortpages": "Amakhasi amafishane",
+       "longpages": "Amakhasi amade",
+       "newpages": "Amakhasi amasha",
+       "newpages-username": "Isiga:",
+       "move": "Sunduza",
+       "movethispage": "Thuthisa leli khasi",
+       "specialloguserlabel": "Umsebenzisi:",
+       "allinnamespace": "Onke amakhasi ($1 namespace)",
+       "allpagessubmit": "Hamba",
+       "emailuser": "Thumela umlayezo lo msebenzisi",
+       "noemailtitle": "Akukho ikheli likaposi",
+       "emailsubject": "Indaba",
+       "emailmessage": "Umlayezo",
+       "emailsend": "Thuma",
+       "emailsent": "Umlayezo uthumwa",
+       "watchlist": "Uhlelo ubukelwa wami",
+       "watch": "Bukela",
+       "unwatch": "Mus'ukubukela",
+       "notanarticle": "Akulona ikhasi elinakho okuqukethwe",
+       "deletepage": "Sula ikhasi",
+       "confirm": "Qinisekisa",
+       "protectcomment": "Isizathu",
+       "restriction-edit": "Ukuhlela",
+       "restriction-move": "Sunduza",
+       "undeletecomment": "Khuluma:",
+       "contributions": "Amanikelo amsebenzisi",
+       "mycontris": "Amanikelo ami",
+       "nolinkshere": "Akukho amakhasi ukuthi balayela lapha '''[[:$1]]'''.",
+       "isredirect": "Ikhasi silayela",
+       "blockip": "Vimbela lo msebenzisi",
+       "ipbexpiry": "Ukuphela",
+       "ipbreason": "Isizathu",
+       "ipbsubmit": "Vimbela lo msebenzisi",
+       "ipusubmit": "Qeda isivimbelo lo msebenzisi",
+       "createaccountblock": "Ukudala kwekhawundi kuvimbelwa",
+       "databasenotlocked": "Idatabheyisi alikhiyiwi.",
+       "move-page-legend": "Thuthisa ikhasi",
+       "movearticle": "Thuthisa ikhasi",
+       "movepagebtn": "Thuthisa ikhasi",
+       "movereason": "Isizathu",
+       "delete_and_move": "Sula futhi sunduza",
+       "delete_and_move_confirm": "Yebo, sula ikhasi",
+       "export-submit": "Thekelisa",
+       "allmessagesname": "Igama",
+       "thumbnail-more": "Khulisa",
+       "filemissing": "Ifayili lilahlekile",
+       "import-interwiki-submit": "Ngenisa",
+       "tooltip-search": "Phenya",
+       "tooltip-search-fulltext": "\nPhenya amakhasi ukuze uthole lombhalo",
+       "tooltip-p-logo": "vakashela ikhasi elikhulu",
+       "others": "Abanye",
+       "markaspatrolleddiff": "Dweba ukuthi lelikhasi liyagadwa",
+       "markaspatrolledtext": "Dweba ukuthi lelikhasi liyagadwa",
+       "markedaspatrolled": "Dweba ukuthi lelikhasi liyagadwa",
+       "newimages": "Uhlelo lwamafayela amasha",
+       "noimages": "Awuboni lutho.",
+       "ilsubmit": "Sesha",
+       "metadata-expand": "Bukisa imininingwane yonke",
+       "metadata-collapse": "Fihla imininingwane yonke",
+       "exif-orientation": "Ukuma okumaqondana nempumalanga",
+       "exif-artist": "Umbhali",
+       "exif-sharpness": "Ububukhali",
+       "exif-orientation-1": "Kuphelele",
+       "exif-meteringmode-5": "Umhlobiso",
+       "exif-lightsource-4": "Umbani",
+       "exif-lightsource-11": "Umthunzi",
+       "exif-sensingmethod-1": "Akucaci",
+       "exif-scenecapturetype-0": "Izinga",
+       "exif-scenecapturetype-1": "Umfanekiso wesizwe",
+       "exif-scenecapturetype-2": "Umfanekiso womuntu",
+       "exif-scenecapturetype-3": "Imboniso ebusuku",
+       "exif-contrast-0": "Kuphelele",
+       "exif-contrast-1": "Kuntofontofo",
+       "exif-contrast-2": "Kulukhuni",
+       "exif-saturation-0": "Kuphelele",
+       "exif-sharpness-0": "Kuphelele",
+       "exif-sharpness-1": "Kuntofontofo",
+       "exif-sharpness-2": "Kulukhuni",
+       "confirmemail": "Qinisekisa ikheli likagesi",
+       "confirmemail_loggedin": "Ikheli likagesi lakho liqinisekiswa.",
+       "recreate": "Dala kabusha",
+       "confirm_purge_button": "Kulungile"
 }
index a8190b3..84eb922 100644 (file)
@@ -139,6 +139,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'MeesteWysigings' ),
        'Movepage'                  => array( 'Skuif_bladsy', 'Skuifbladsy' ),
        'Mycontributions'           => array( 'Mybydrae' ),
+       'MyLanguage'                => array( 'MyTaal' ),
        'Mypage'                    => array( 'MyBladsy' ),
        'Mytalk'                    => array( 'Mybespreking', 'Mybesprekings' ),
        'Newimages'                 => array( 'Nuwe_beelde', 'Nuwebeelde', 'Nuwe_lêers', 'Nuwelêers' ),
index aa1d9d1..2f86c78 100644 (file)
 $namespaceNames = array(
        NS_SPECIAL          => 'Syndrig',
        NS_TALK             => 'Mōtung',
-       NS_FILE             => 'Biliþ',
-       NS_FILE_TALK        => 'Biliþmōtung',
+       NS_USER             => 'Brūcend',
+       NS_USER_TALK        => 'Brūcendmōtung',
+       NS_FILE             => 'Ymele',
+       NS_FILE_TALK        => 'Ymelmōtung',
+       NS_MEDIAWIKI_TALK   => 'MediaWikimōtung',
        NS_TEMPLATE         => 'Bysen',
        NS_TEMPLATE_TALK    => 'Bysenmōtung',
        NS_HELP             => 'Help',
@@ -26,8 +29,9 @@ $namespaceAliases = array(
        'Motung'        => NS_TALK,
        'Brucend'       => NS_USER,
        'Brucendmotung' => NS_USER_TALK,
-       'Biliþgesprec'  => NS_FILE_TALK,
+       'Biliþ'         => NS_FILE,
        'Biliþmotung'   => NS_FILE_TALK,
+       'Biliþmōtung'   => NS_FILE_TALK,
        'Bysengesprec'  => NS_TEMPLATE_TALK,
        'Bysenmotung'   => NS_TEMPLATE_TALK,
        'Helpgesprec'   => NS_HELP_TALK,
index dd9b06f..3872f1c 100644 (file)
@@ -357,6 +357,7 @@ $specialPageAliases = array(
        'Mycontributions'           => array( 'مساهماتي' ),
        'Mypage'                    => array( 'صفحتي' ),
        'Mytalk'                    => array( 'نقاشي' ),
+       'MyLanguage'                => array( 'لغتي' ),
        'Myuploads'                 => array( 'رفوعاتي' ),
        'Newimages'                 => array( 'ملفات_جديدة', 'صور_جديدة' ),
        'Newpages'                  => array( 'صفحات_جديدة' ),
index cd514d3..2247b36 100644 (file)
@@ -64,6 +64,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'ܬܢܝ̈ܬܐ_ܝܬܝܪ_ܡܢ_ܟܠ' ),
        'Movepage'                  => array( 'ܫܢܝ_ܦܐܬܐ' ),
        'Mycontributions'           => array( 'ܫܘܬܦܘ̈ܬܝ' ),
+       'MyLanguage'                => array( 'ܠܫܢܐ_ܕܝܠܝ' ),
        'Mypage'                    => array( 'ܦܐܬܐ_ܕܝܠܝ' ),
        'Mytalk'                    => array( 'ܡܡܠܠܐ_ܕܝܠܝ' ),
        'Myuploads'                 => array( 'ܐܣܩ̈ܬܐ_ܕܝܠܝ' ),
index 8e2b71f..09fd319 100644 (file)
@@ -83,6 +83,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'اكتر_مراجعات' ),
        'Movepage'                  => array( 'نقل_صفحه' ),
        'Mycontributions'           => array( 'مساهماتى' ),
+       'MyLanguage'                => array( 'اللغة_بتاعتى' ),
        'Mypage'                    => array( 'صفحتى' ),
        'Mytalk'                    => array( 'مناقشتى' ),
        'Newimages'                 => array( 'فايلات_جديده', 'صور_جديده' ),
index 3d6e1f2..9afe020 100644 (file)
@@ -98,6 +98,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIMEMIMEmmmgM_অনুসন্ধান' ),
        'Movepage'                  => array( 'পৃষ্ঠা_স্থানান্তৰ' ),
        'Mycontributions'           => array( 'মোৰ_বৰঙনি' ),
+       'MyLanguage'                => array( 'মোৰ_ভাষা' ),
        'Mypage'                    => array( 'মোৰ_পৃষ্ঠা' ),
        'Mytalk'                    => array( 'মোৰ_কথোপকথন' ),
        'Myuploads'                 => array( 'মোৰ_আপল’ডসমূহ' ),
index 88d8d6e..07246a4 100644 (file)
@@ -92,6 +92,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Paubahan_pambanyaknya' ),
        'Movepage'                  => array( 'Pindahakan_tungkaran' ),
        'Mycontributions'           => array( 'Sumbangan_ulun' ),
+       'MyLanguage'                => array( 'Bahasa_ulun' ),
        'Mypage'                    => array( 'Tungkaran_ulun' ),
        'Mytalk'                    => array( 'Pamandiran_ulun' ),
        'Myuploads'                 => array( 'Unggahan_ulun' ),
index 7824ba4..222399e 100644 (file)
@@ -66,6 +66,7 @@ $specialPageAliases = array(
        'Mostlinkedtemplates'       => array( 'PatromoùImplijetañ' ),
        'Movepage'                  => array( 'AdkasPajenn' ),
        'Mycontributions'           => array( 'MaDegasadennoù' ),
+       'MyLanguage'                => array( 'MaYezh' ),
        'Mypage'                    => array( 'MaFajenn' ),
        'Mytalk'                    => array( 'MaC\'haozeadennoù' ),
        'Newimages'                 => array( 'RestroùNevez', 'SkeudennoùNevez' ),
index 2259641..f9a58ca 100644 (file)
@@ -55,6 +55,7 @@ $specialPageAliases = array(
        'ComparePages'              => array( 'Хуудаһа_харисуулха' ),
        'Confirmemail'              => array( 'Сахим_хаяг_баталха' ),
        'CreateAccount'             => array( 'Данса_үүсхэхэ' ),
+       'MyLanguage'                => array( 'Минии_хэлэн' ),
        'Mypage'                    => array( 'Минии_хуудаһан' ),
        'Mytalk'                    => array( 'Минии_хэлэлсэл' ),
        'Myuploads'                 => array( 'Минии_ашаалһан_зүйл' ),
index c9b8a86..fb61b4a 100644 (file)
@@ -80,6 +80,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( '最稠其版本' ),
        'Movepage'                  => array( '移動其頁面' ),
        'Mycontributions'           => array( '我其貢獻' ),
+       'MyLanguage'                => array( '我其語言' ),
        'Mypage'                    => array( '我其頁面' ),
        'Mytalk'                    => array( '我其討論' ),
        'Myuploads'                 => array( '我其上傳' ),
index d8e07ae..2babb83 100644 (file)
@@ -117,6 +117,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Сих_сиха_нисйина_йолу_агӀонаш' ),
        'Movepage'                  => array( 'АгӀона_цӀе_хийцар' ),
        'Mycontributions'           => array( 'Сан_къинхьегам' ),
+       'MyLanguage'                => array( 'Сан_мотт' ),
        'Mypage'                    => array( 'Сан_агӀо' ),
        'Mytalk'                    => array( 'Сан_дийцаре' ),
        'Myuploads'                 => array( 'Сан_файлаш' ),
index dd19174..6595543 100644 (file)
@@ -8,10 +8,8 @@
  *
  */
 
-$linkPrefixExtension = true;
-$fallback8bitEncoding = 'windows-1256';
-
 $rtl = true;
+$fallback8bitEncoding = 'windows-1256';
 
 $namespaceNames = array(
        NS_MEDIA            => 'میدیا',
@@ -173,3 +171,4 @@ $dateFormats = array(
        'hijri both' => '‏H:i، xmjی xmFی xmY',
 );
 
+$linkTrail = "/^([ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆهھەیێ‌]+)(.*)$/sDu";
index 1d97c23..95f1719 100644 (file)
@@ -91,6 +91,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Meistbearbeitete_Seiten' ),
        'Movepage'                  => array( 'Verschieben' ),
        'Mycontributions'           => array( 'Meine_Beiträge' ),
+       'MyLanguage'                => array( 'Meine_Sprache' ),
        'Mypage'                    => array( 'Meine_Benutzerseite' ),
        'Mytalk'                    => array( 'Meine_Diskussionsseite' ),
        'Myuploads'                 => array( 'Meine_hochgeladenen_Dateien' ),
index 12d3b96..70e4de3 100644 (file)
@@ -106,6 +106,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'TewrvéşiRevizyon' ),
        'Movepage'                  => array( 'PelerBeré' ),
        'Mycontributions'           => array( 'DekerdenéMe' ),
+       'MyLanguage'                => array( 'ZıwaneMe' ),
        'Mypage'                    => array( 'PeréMe' ),
        'Mytalk'                    => array( 'VatenayışéMe' ),
        'Myuploads'                 => array( 'BarkerdışéMe' ),
index c6bcc46..a6a64f6 100644 (file)
@@ -108,6 +108,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'ΠερισσότεροΕπεξεργασίες' ),
        'Movepage'                  => array( 'ΜετακίνησηΣελίδας' ),
        'Mycontributions'           => array( 'ΟιΣυνεισφορέςΜου' ),
+       'MyLanguage'                => array( 'ΗΓλώσσαΜου' ),
        'Mypage'                    => array( 'ΗΣελίδαΜου' ),
        'Mytalk'                    => array( 'ΗΣυζήτησήΜου' ),
        'Myuploads'                 => array( 'ΟιΕπιφορτώσειςΜου' ),
index ccdd310..a2c1873 100644 (file)
@@ -240,7 +240,6 @@ $magicWords = array(
        'numberofusers'           => array( 1, 'NUMBEROFUSERS' ),
        'numberofactiveusers'     => array( 1, 'NUMBEROFACTIVEUSERS' ),
        'numberofedits'           => array( 1, 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( 1, 'NUMBEROFVIEWS' ),
        'pagename'                => array( 1, 'PAGENAME' ),
        'pagenamee'               => array( 1, 'PAGENAMEE' ),
        'namespace'               => array( 1, 'NAMESPACE' ),
@@ -388,6 +387,7 @@ $specialPageAliases = array(
        'Allmessages'               => array( 'AllMessages' ),
        'AllMyUploads'              => array( 'AllMyUploads', 'AllMyFiles' ),
        'Allpages'                  => array( 'AllPages' ),
+       'ApiHelp'                   => array( 'ApiHelp' ),
        'Ancientpages'              => array( 'AncientPages' ),
        'Badtitle'                  => array( 'Badtitle' ),
        'Blankpage'                 => array( 'BlankPage' ),
@@ -428,6 +428,7 @@ $specialPageAliases = array(
        'Log'                       => array( 'Log', 'Logs' ),
        'Lonelypages'               => array( 'LonelyPages', 'OrphanedPages' ),
        'Longpages'                 => array( 'LongPages' ),
+       'MediaStatistics'           => array( 'MediaStatistics' ),
        'MergeHistory'              => array( 'MergeHistory' ),
        'MIMEsearch'                => array( 'MIMESearch' ),
        'Mostcategories'            => array( 'MostCategories' ),
@@ -512,16 +513,16 @@ $linkPrefixCharset = 'a-zA-Z\\x{80}-\\x{10ffff}';
  * basis if needed.
  */
 $imageFiles = array(
-       'button-bold'     => 'button_bold.png',
-       'button-italic'   => 'button_italic.png',
-       'button-link'     => 'button_link.png',
-       'button-extlink'  => 'button_extlink.png',
-       'button-headline' => 'button_headline.png',
-       'button-image'    => 'button_image.png',
-       'button-media'    => 'button_media.png',
-       'button-nowiki'   => 'button_nowiki.png',
-       'button-sig'      => 'button_sig.png',
-       'button-hr'       => 'button_hr.png',
+       'button-bold'     => 'en/button_bold.png',
+       'button-italic'   => 'en/button_italic.png',
+       'button-link'     => 'en/button_link.png',
+       'button-extlink'  => 'en/button_extlink.png',
+       'button-headline' => 'en/button_headline.png',
+       'button-image'    => 'en/button_image.png',
+       'button-media'    => 'en/button_media.png',
+       'button-nowiki'   => 'en/button_nowiki.png',
+       'button-sig'      => 'en/button_sig.png',
+       'button-hr'       => 'en/button_hr.png',
 );
 
 /**
@@ -535,7 +536,7 @@ $preloadedMessages = array(
        'accesskey-ca-history',
        'accesskey-ca-nstab-main',
        'accesskey-ca-talk',
-       'accesskey-ca-view',
+       'accesskey-ca-viewsource',
        'accesskey-n-currentevents',
        'accesskey-n-help',
        'accesskey-n-mainpage-description',
@@ -544,15 +545,20 @@ $preloadedMessages = array(
        'accesskey-n-recentchanges',
        'accesskey-p-logo',
        'accesskey-pt-login',
+       'accesskey-pt-createaccount',
        'accesskey-search',
        'accesskey-search-fulltext',
        'accesskey-search-go',
+       'accesskey-t-info',
        'accesskey-t-permalink',
+       'accesskey-t-print',
        'accesskey-t-recentchangeslinked',
        'accesskey-t-specialpages',
        'accesskey-t-whatlinkshere',
        'actions',
        'anonnotice',
+       'brackets',
+       'comma-separator',
        'currentevents',
        'currentevents-url',
        'disclaimerpage',
@@ -574,7 +580,6 @@ $preloadedMessages = array(
        'navigation',
        'nav-login-createaccount',
        'nstab-main',
-       'nstab-talk',
        'opensearch-desc',
        'pagecategories',
        'pagecategorieslink',
@@ -596,6 +601,7 @@ $preloadedMessages = array(
        'search',
        'searcharticle',
        'searchbutton',
+       'searchsuggest-search',
        'sidebar',
        'navigation-heading',
        'site-atom-feed',
@@ -608,7 +614,7 @@ $preloadedMessages = array(
        'tooltip-ca-history',
        'tooltip-ca-nstab-main',
        'tooltip-ca-talk',
-       'tooltip-ca-view',
+       'tooltip-ca-viewsource',
        'tooltip-n-currentevents',
        'tooltip-n-help',
        'tooltip-n-mainpage-description',
@@ -616,13 +622,14 @@ $preloadedMessages = array(
        'tooltip-n-randompage',
        'tooltip-n-recentchanges',
        'tooltip-p-logo',
-       'tooltip-p-navigation',
-       'tooltip-p-tb',
        'tooltip-pt-login',
+       'tooltip-pt-createaccount',
        'tooltip-search',
        'tooltip-search-fulltext',
        'tooltip-search-go',
+       'tooltip-t-info',
        'tooltip-t-permalink',
+       'tooltip-t-print',
        'tooltip-t-recentchangeslinked',
        'tooltip-t-specialpages',
        'tooltip-t-whatlinkshere',
@@ -633,5 +640,6 @@ $preloadedMessages = array(
        'viewcount',
        'views',
        'whatlinkshere',
+       'word-separator',
 );
 
index 49f3ae9..05f3be8 100644 (file)
@@ -101,6 +101,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Plej_multaj_revizioj' ),
        'Movepage'                  => array( 'Alinomigi_paĝon' ),
        'Mycontributions'           => array( 'Miaj_kontribuoj', 'MiajKontribuoj' ),
+       'MyLanguage'                => array( 'Mia_lingvo' ),
        'Mypage'                    => array( 'Mia_paĝo', 'MiaPaĝo' ),
        'Mytalk'                    => array( 'Mia_diskutpaĝo', 'MiaDiskutpaĝo' ),
        'Myuploads'                 => array( 'Miaj_alŝutaĵoj' ),
index 2b4b8b9..e872d4e 100644 (file)
@@ -89,6 +89,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'MásEdiciones', 'Más_ediciones' ),
        'Movepage'                  => array( 'MoverPágina', 'Mover_página' ),
        'Mycontributions'           => array( 'MisContribuciones', 'Mis_contribuciones' ),
+       'MyLanguage'                => array( 'MiIdioma', 'Mi_idioma' ),
        'Mypage'                    => array( 'MiPágina', 'Mi_página' ),
        'Mytalk'                    => array( 'MiDiscusión', 'Mi_discusión' ),
        'Myuploads'                 => array( 'MisArchivosSubidos' ),
index da3eb7a..9fd3123 100644 (file)
@@ -92,6 +92,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'بیشترین_نسخه' ),
        'Movepage'                  => array( 'انتقال_صفحه' ),
        'Mycontributions'           => array( 'مشارکت‌های_من' ),
+       'MyLanguage'                => array( 'زبان‌های_من' ),
        'Mypage'                    => array( 'صفحه_من' ),
        'Mytalk'                    => array( 'بحث_من' ),
        'Myuploads'                 => array( 'بارگذاری‌های_من' ),
index 50558ee..ed4c90a 100644 (file)
@@ -84,6 +84,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Muokatuimmat_sivut' ),
        'Movepage'                  => array( 'Siirrä_sivu' ),
        'Mycontributions'           => array( 'Omat_muokkaukset' ),
+       'MyLanguage'                => array( 'Oma_kieli' ),
        'Mypage'                    => array( 'Oma_sivu' ),
        'Mytalk'                    => array( 'Oma_keskustelu' ),
        'Myuploads'                 => array( 'Omat_tiedostot' ),
index cd5359b..5e406da 100644 (file)
@@ -92,6 +92,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Pages_les_plus_modifiées', 'PagesLesPlusModifiées', 'Pages_les_plus_modifiees', 'PagesLesPlusModifiees', 'Les_plus_modifiés', 'LesPlusModifiés', 'Les_plus_modifies', 'LesPlusModifies' ),
        'Movepage'                  => array( 'Renommer_une_page', 'Renommer', 'Renommage' ),
        'Mycontributions'           => array( 'Mes_contributions', 'Mescontributions' ),
+       'MyLanguage'                => array( 'MaLangue', 'Ma_langue' ),
        'Mypage'                    => array( 'Ma_page', 'Mapage' ),
        'Mytalk'                    => array( 'Mes_discussions', 'Mesdiscussions' ),
        'Newimages'                 => array( 'Nouveaux_fichiers', 'NouveauxFichiers', 'Nouvelles_images', 'NouvellesImages' ),
index 7cbe696..d165495 100644 (file)
@@ -60,6 +60,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Syte_wo_am_meischte_bearbeitet_sin' ),
        'Movepage'                  => array( 'Verschiebe' ),
        'Mycontributions'           => array( 'Myyni_Byytreeg' ),
+       'MyLanguage'                => array( 'Myyni_Sprooch' ),
        'Mypage'                    => array( 'Myyni_Benutzersyte' ),
        'Mytalk'                    => array( 'Myyni_Diskussionssyte' ),
        'Myuploads'                 => array( 'Dateie_wonni_uffeglade_han' ),
index 60f9bf8..0852f44 100644 (file)
@@ -95,6 +95,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'הגרסאות_הרבות_ביותר', 'הדפים_בעלי_מספר_העריכות_הגבוה_ביותר' ),
        'Movepage'                  => array( 'העברת_דף', 'העברה' ),
        'Mycontributions'           => array( 'התרומות_שלי' ),
+       'MyLanguage'                => array( 'השפה_שלי' ),
        'Mypage'                    => array( 'הדף_שלי', 'דף_המשתמש_שלי' ),
        'Mytalk'                    => array( 'השיחה_שלי', 'דף_השיחה_שלי' ),
        'Myuploads'                 => array( 'ההעלאות_שלי' ),
index 38e5b0a..22219b2 100644 (file)
@@ -99,6 +99,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Strony_z_najwjace_wersijemi' ),
        'Movepage'                  => array( 'Přesunyć' ),
        'Mycontributions'           => array( 'Moje_přinoški' ),
+       'MyLanguage'                => array( 'Moja_rěč' ),
        'Mypage'                    => array( 'Moja_wužiwarska_strona' ),
        'Mytalk'                    => array( 'Moja_diskusijna_strona' ),
        'Newimages'                 => array( 'Nowe_dataje' ),
index 5e4b1e4..18e4a2d 100644 (file)
@@ -86,6 +86,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'PlisRevizyon' ),
        'Movepage'                  => array( 'DeplasePaj' ),
        'Mycontributions'           => array( 'KontribisyonM' ),
+       'MyLanguage'                => array( 'LangMwen' ),
        'Mypage'                    => array( 'PajMwen' ),
        'Mytalk'                    => array( 'DiskisyonM' ),
        'Myuploads'                 => array( 'ChajmanM' ),
index 744ac9d..0d4fd18 100644 (file)
@@ -85,6 +85,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Le_plus_versiones' ),
        'Movepage'                  => array( 'Renominar_pagina' ),
        'Mycontributions'           => array( 'Mi_contributiones' ),
+       'MyLanguage'                => array( 'Mi_lingua' ),
        'Mypage'                    => array( 'Mi_pagina' ),
        'Mytalk'                    => array( 'Mi_discussion' ),
        'Myuploads'                 => array( 'Mi_files_incargate' ),
index 4ea207d..dc2ea35 100644 (file)
@@ -245,6 +245,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Perubahan_terbanyak', 'PerubahanTerbanyak' ),
        'Movepage'                  => array( 'Pindahkan_halaman', 'PindahkanHalaman' ),
        'Mycontributions'           => array( 'Kontribusi_saya', 'KontribusiSaya' ),
+       'MyLanguage'                => array( 'Bahasa_saya' ),
        'Mypage'                    => array( 'Halaman_saya', 'HalamanSaya' ),
        'Mytalk'                    => array( 'Pembicaraan_saya', 'PembicaraanSaya' ),
        'Myuploads'                 => array( 'Unggahan_saya' ),
index b3f301b..7c0f1a7 100644 (file)
@@ -101,6 +101,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'PagineConPiùRevisioni' ),
        'Movepage'                  => array( 'Sposta', 'Rinomina' ),
        'Mycontributions'           => array( 'MieiContributi' ),
+       'MyLanguage'                => array( 'MiaLingua' ),
        'Mypage'                    => array( 'MiaPaginaUtente', 'MiaPagina' ),
        'Mytalk'                    => array( 'MieDiscussioni' ),
        'Myuploads'                 => array( 'MieiUpload', 'MieiEdit' ),
index ebb52ce..aef8dad 100644 (file)
@@ -111,6 +111,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( '編集履歴の多いページ', '版の多い項目', '版の多いページ' ),
        'Movepage'                  => array( '移動', 'ページの移動' ),
        'Mycontributions'           => array( '自分の投稿記録' ),
+       'MyLanguage'                => array( '自分の言語' ),
        'Mypage'                    => array( '利用者ページ', 'マイページ', 'マイ・ページ' ),
        'Mytalk'                    => array( 'トークページ', '会話ページ', 'マイトーク', 'マイ・トーク' ),
        'Myuploads'                 => array( '自分のアップロード記録' ),
index 1006422..598f101 100644 (file)
@@ -73,6 +73,7 @@ $specialPageAliases = array(
        'Longpages'                 => array( 'გრძელი_გვერდები' ),
        'Movepage'                  => array( 'გვერდის_გადატანა' ),
        'Mycontributions'           => array( 'ჩემი_წვლილი' ),
+       'MyLanguage'                => array( 'ჩემი_ენა' ),
        'Mypage'                    => array( 'ჩემი_გვერდი' ),
        'Mytalk'                    => array( 'ჩენი_განხილვა' ),
        'Myuploads'                 => array( 'ჩემი_ატვირთვები' ),
index faceb17..289e5c2 100644 (file)
@@ -139,6 +139,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'ទំព័រមានកំណែច្រើនជាងគេ' ),
        'Movepage'                  => array( 'ប្ដូរទីតាំងទំព័រ' ),
        'Mycontributions'           => array( 'ការរួមចំណែករបស់ខ្ញុំ' ),
+       'MyLanguage'                => array( 'ភាសារបស់ខ្ញុំ' ),
        'Mypage'                    => array( 'ទំព័ររបស់ខ្ញុំ' ),
        'Mytalk'                    => array( 'ការពិភាក្សារបស់ខ្ញុំ' ),
        'Myuploads'                 => array( 'អ្វីដែលខ្ញុំផ្ទុកឡើង' ),
index f31bb06..4e83fe3 100644 (file)
@@ -125,6 +125,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( '역사긴문서' ),
        'Movepage'                  => array( '옮기기', '문서옮기기', '이동', '문서이동' ),
        'Mycontributions'           => array( '내기여', '내기여목록' ),
+       'MyLanguage'                => array( '내언어' ),
        'Mypage'                    => array( '내사용자문서' ),
        'Mytalk'                    => array( '내사용자토론' ),
        'Myuploads'                 => array( '내가올린파일' ),
index d7826be..6b62160 100644 (file)
@@ -79,6 +79,7 @@ $specialPageAliases = array(
        'Mostimages'                => array( 'Эм_кёб_хайырланнган_файлла' ),
        'Movepage'                  => array( 'Бетни_атын_тюрлендириу', 'Атны_тюрлендириу', 'Атны_тюрлендир' ),
        'Mycontributions'           => array( 'Мени_къошумум' ),
+       'MyLanguage'                => array( 'Мени_тилим' ),
        'Mypage'                    => array( 'Мени_бетим' ),
        'Mytalk'                    => array( 'Мени_сюзюуюм' ),
        'Myuploads'                 => array( 'Мени_джюклегенлерим' ),
index 2f6c650..e338b42 100644 (file)
@@ -209,6 +209,6 @@ $magicWords = array(
 );
 
 $imageFiles = array(
-       'button-italic'   => 'ksh/button_S_italic.png',
+       'button-italic'   => 'ksh/button_italic.png',
 );
 
index f42a893..4a42160 100644 (file)
@@ -62,6 +62,7 @@ $specialPageAliases = array(
        'Listbots'                  => array( 'Lîsteya_Botan' ),
        'Listusers'                 => array( 'Lîsteya_bikarhêneran' ),
        'Longpages'                 => array( 'Rûpelên_dirêj' ),
+       'MyLanguage'                => array( 'Zimanê_Min' ),
        'Newpages'                  => array( 'Rûpelên_nû' ),
        'Randompage'                => array( 'Rûpela_tesadufî' ),
        'Randomredirect'            => array( 'Redirecta_tasadufî' ),
index 1b7c78c..ea7384a 100644 (file)
@@ -110,6 +110,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'AnMoyhaAmendyansow' ),
        'Movepage'                  => array( 'GwayaFolen' ),
        'Mycontributions'           => array( 'OwHevrohow' ),
+       'MyLanguage'                => array( 'OwYeth' ),
        'Mypage'                    => array( 'OwFolen' ),
        'Mytalk'                    => array( 'OwHeskows' ),
        'Myuploads'                 => array( 'OwUghkargansow' ),
index 8850302..02fdb1c 100644 (file)
@@ -104,6 +104,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Säite_mat_de_meeschten_Ännerungen' ),
        'Movepage'                  => array( 'Säit_réckelen' ),
        'Mycontributions'           => array( 'Meng_Kontributiounen' ),
+       'MyLanguage'                => array( 'Meng_Sprooch' ),
        'Mypage'                    => array( 'Meng_Benotzersäit' ),
        'Mytalk'                    => array( 'Meng_Diskussiounssäit' ),
        'Myuploads'                 => array( 'Meng_eropgeluede_Fichieren' ),
index 09ae5a6..abba540 100644 (file)
 
 $fallback = 'hi';
 
+$namespaceNames = array(
+       NS_MEDIA            => 'मेडिया',
+       NS_SPECIAL          => 'विशेष',
+       NS_TALK             => 'वार्ता',
+       NS_USER             => 'प्रयोगकर्ता',
+       NS_USER_TALK        => 'प्रयोगकर्ता_वार्ता',
+       NS_PROJECT_TALK     => '$1_वार्ता',
+       NS_FILE             => 'फाइल',
+       NS_FILE_TALK        => 'फाइल_वार्ता',
+       NS_MEDIAWIKI        => 'मेडियाविकि',
+       NS_MEDIAWIKI_TALK   => 'मेडियाविकि_वार्ता',
+       NS_TEMPLATE         => 'आकृति',
+       NS_TEMPLATE_TALK    => 'आकृति_वार्ता',
+       NS_HELP             => 'मद्दत',
+       NS_HELP_TALK        => 'मद्दत_वार्ता',
+       NS_CATEGORY         => 'श्रेणी',
+       NS_CATEGORY_TALK    => 'श्रेणी_वार्ता',
+);
index 063b8d9..3d29b6b 100644 (file)
@@ -145,6 +145,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'НајмногуРевизии' ),
        'Movepage'                  => array( 'ПреместиСтраница' ),
        'Mycontributions'           => array( 'МоиПридонеси' ),
+       'MyLanguage'                => array( 'МојЈазик' ),
        'Mypage'                    => array( 'МојаСтраница' ),
        'Mytalk'                    => array( 'МојРазговор', 'МоиРазговори' ),
        'Myuploads'                 => array( 'МоиПодигања' ),
index 718ab28..5b87ace 100644 (file)
@@ -136,6 +136,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'കൂടുതൽ_പുനരവലോകനങ്ങൾ' ),
        'Movepage'                  => array( 'താൾ_മാറ്റുക' ),
        'Mycontributions'           => array( 'എന്റെസംഭാവനകൾ' ),
+       'MyLanguage'                => array( 'എന്റെഭാഷ' ),
        'Mypage'                    => array( 'എന്റെതാൾ' ),
        'Mytalk'                    => array( 'എന്റെസംവാദം' ),
        'Myuploads'                 => array( 'ഞാൻഅപ്‌ലോഡ്‌ചെയ്തവ' ),
index 0bbbf8c..6806443 100644 (file)
@@ -123,6 +123,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'सर्वाधिकआवर्तने' ),
        'Movepage'                  => array( 'पान_हलवा' ),
        'Mycontributions'           => array( 'माझे_योगदान' ),
+       'MyLanguage'                => array( 'माझीभाषा' ),
        'Mypage'                    => array( 'माझे_पान' ),
        'Mytalk'                    => array( 'माझ्या_चर्चा' ),
        'Newimages'                 => array( 'नवीन_संचिका', 'नवीन_चित्रे' ),
index f6b688e..e5e189c 100644 (file)
@@ -74,6 +74,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'ВесемедеЛамокстьЛиякстомтозь' ),
        'Movepage'                  => array( 'ПечтевтемсЛопа' ),
        'Mycontributions'           => array( 'МонМезеТеинь' ),
+       'MyLanguage'                => array( 'Келем' ),
        'Mypage'                    => array( 'МоньЛопам' ),
        'Mytalk'                    => array( 'МоньКортамом' ),
        'Newimages'                 => array( 'ОдАртовкст' ),
index 83e736f..e53cefd 100644 (file)
@@ -148,6 +148,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Flest_revisjoner' ),
        'Movepage'                  => array( 'Flytt_side' ),
        'Mycontributions'           => array( 'Mine_bidrag' ),
+       'MyLanguage'                => array( 'Mitt_språk' ),
        'Mypage'                    => array( 'Min_side' ),
        'Mytalk'                    => array( 'Min_diskusjon' ),
        'Myuploads'                 => array( 'Mine_opplastinger' ),
index 49268f6..e78964e 100644 (file)
@@ -73,7 +73,6 @@ $bookstoreList = array(
        'Koninklijke Bibliotheek' => 'http://opc4.kb.nl/DB=1/SET=5/TTL=1/CMD?ACT=SRCH&IKT=1007&SRT=RLV&TRM=$1'
 );
 
-#!!# Translation <b>HLEERSTE:</b> is used more than once for <a href="#mw-sp-magic-lcfirst">lcfirst</a> and <a href="#mw-sp-magic-ucfirst">ucfirst</a>.
 $magicWords = array(
        'redirect'                  => array( '0', '#DEURVERWIEZING', '#DUURVERWIEZING', '#DOORVERWIJZING', '#REDIRECT' ),
        'notoc'                     => array( '0', '__GIENONDERWARPEN__', '__GEENINHOUD__', '__NOTOC__' ),
@@ -271,6 +270,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Meeste_bewarkingen' ),
        'Movepage'                  => array( 'Zied_herneumen' ),
        'Mycontributions'           => array( 'Mien_biedragen' ),
+       'MyLanguage'                => array( 'Mien_taal' ),
        'Mypage'                    => array( 'Mien_gebrukerszied' ),
        'Mytalk'                    => array( 'Mien_overleg' ),
        'Myuploads'                 => array( 'Mien_in-elaojen_bestaanden' ),
index c90908f..0132437 100644 (file)
@@ -323,6 +323,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'MeesteVersies', 'MeesteHerzieningen', 'MeesteRevisies' ),
        'Movepage'                  => array( 'PaginaHernoemen', 'PaginaVerplaatsen', 'TitelWijzigen', 'VerplaatsPagina' ),
        'Mycontributions'           => array( 'MijnBijdragen' ),
+       'MyLanguage'                => array( 'MijnTaal' ),
        'Mypage'                    => array( 'MijnPagina' ),
        'Mytalk'                    => array( 'MijnOverleg' ),
        'Myuploads'                 => array( 'MijnUploads' ),
index 9d99964..991a513 100644 (file)
@@ -267,6 +267,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Flest_endringar' ),
        'Movepage'                  => array( 'Flytt_side' ),
        'Mycontributions'           => array( 'Bidraga_mine' ),
+       'MyLanguage'                => array( 'Språket_mitt' ),
        'Mypage'                    => array( 'Sida_mi' ),
        'Mytalk'                    => array( 'Diskusjonssida_mi' ),
        'Myuploads'                 => array( 'Opplastingane_mine' ),
index 3c512d7..3412c80 100644 (file)
@@ -115,6 +115,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਰੀਵਿਜ਼ਨ' ),
        'Movepage'                  => array( 'ਸਿਰਲੇਖ_ਬਦਲੋ' ),
        'Mycontributions'           => array( 'ਮੇਰੇ_ਯੋਗਦਾਨ' ),
+       'MyLanguage'                => array( 'ਮੇਰੀ_ਭਾਸ਼ਾ', 'ਮੇਰੀ_ਬੋਲੀ' ),
        'Mypage'                    => array( 'ਮੇਰਾ_ਸਫ਼ਾ' ),
        'Mytalk'                    => array( 'ਮੇਰੀ_ਚਰਚਾ' ),
        'Myuploads'                 => array( 'ਮੇਰੇ_ਅੱਪਲੋਡ' ),
index c591faa..f3f2ef5 100644 (file)
@@ -178,6 +178,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Najwięcej_edycji', 'Najczęściej_edytowane' ),
        'Movepage'                  => array( 'Przenieś' ),
        'Mycontributions'           => array( 'Mój_wkład' ),
+       'MyLanguage'                => array( 'Mój_język' ),
        'Mypage'                    => array( 'Moja_strona' ),
        'Mytalk'                    => array( 'Moja_dyskusja' ),
        'Myuploads'                 => array( 'Moje_pliki' ),
index 63d6513..f057810 100644 (file)
@@ -84,6 +84,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'AnchaLlamkapusqa', 'AchkaKutiLlamkapusqa' ),
        'Movepage'                  => array( 'PanqataAstay' ),
        'Mycontributions'           => array( 'Rurasqaykuna', 'Llamkapusqaykuna' ),
+       'MyLanguage'                => array( 'Rimayniy' ),
        'Mypage'                    => array( 'Panqay', 'NuqapPanqay' ),
        'Mytalk'                    => array( 'Rimachinay', 'RimanakuyPanqay', 'NuqapRimachinay', 'NuqapRimanakuyPanqay' ),
        'Newimages'                 => array( 'MusuqRikcha', 'MusuqRikchakuna' ),
index 9098d85..02b7972 100644 (file)
@@ -184,6 +184,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Наибольшее_количество_версий' ),
        'Movepage'                  => array( 'Переименовать_страницу', 'Переименование', 'Переименовать' ),
        'Mycontributions'           => array( 'Мой_вклад' ),
+       'MyLanguage'                => array( 'Мой_язык' ),
        'Mypage'                    => array( 'Моя_страница' ),
        'Mytalk'                    => array( 'Моё_обсуждение' ),
        'Myuploads'                 => array( 'Мои_загрузки' ),
@@ -433,9 +434,9 @@ $fallback8bitEncoding = 'windows-1251';
 $linkPrefixExtension = false;
 
 $imageFiles = array(
-       'button-bold'   => 'cyrl/button_bold.png',
-       'button-italic' => 'cyrl/button_italic.png',
-       'button-link'   => 'cyrl/button_link.png',
+       'button-bold'   => 'ru/button_bold.png',
+       'button-italic' => 'ru/button_italic.png',
+       'button-link'   => 'ru/button_link.png',
 );
 
 $linkTrail = '/^([a-zабвгдеёжзийклмнопрстуфхцчшщъыьэюя]+)(.*)$/sDu';
index d06e726..74ca0bc 100644 (file)
@@ -102,6 +102,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'PagineConPiùRevisioni' ),
        'Movepage'                  => array( 'Sposta', 'Rinomina' ),
        'Mycontributions'           => array( 'MieiContributi' ),
+       'MyLanguage'                => array( 'MiaLingua' ),
        'Mypage'                    => array( 'MiaPaginaUtente', 'MiaPagina' ),
        'Mytalk'                    => array( 'MieDiscussioni' ),
        'Myuploads'                 => array( 'MieiUpload', 'MieiEdit' ),
diff --git a/languages/messages/MessagesSes.php b/languages/messages/MessagesSes.php
new file mode 100644 (file)
index 0000000..9d9e009
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+/** Koyraboro Senni
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ */
+
+$fallback = 'fr';
index 839a5de..e9d8aa9 100644 (file)
@@ -130,6 +130,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'ЧланциСаНајвишеРевизија' ),
        'Movepage'                  => array( 'Преусмери', 'Премести_страницу' ),
        'Mycontributions'           => array( 'МојиДоприноси', 'Моји_доприноси', 'Моји_прилози' ),
+       'MyLanguage'                => array( 'Мој_језик' ),
        'Mypage'                    => array( 'МојаСтраница', 'Моја_страница' ),
        'Mytalk'                    => array( 'МојРазговор', 'Мој_разговор' ),
        'Myuploads'                 => array( 'Моја_слања' ),
index 0d64526..5936055 100644 (file)
@@ -90,7 +90,6 @@ $namespaceAliases = array(
        'Hjälp_diskussion'     => NS_HELP_TALK
 );
 
-#!!# Translation <b>Prefixindex</b> for <a href="#mw-sp-magic-Prefixindex">Prefixindex</a> is not in normalised form, which is <b>PrefixIndex</b>
 $specialPageAliases = array(
        'Allmessages'               => array( 'Systemmeddelanden' ),
        'Allpages'                  => array( 'Alla_sidor' ),
@@ -137,6 +136,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Flest_versioner' ),
        'Movepage'                  => array( 'Flytta' ),
        'Mycontributions'           => array( 'Mina_bidrag' ),
+       'MyLanguage'                => array( 'Mitt_språk' ),
        'Mypage'                    => array( 'Min_sida' ),
        'Mytalk'                    => array( 'Min_diskussion' ),
        'Myuploads'                 => array( 'Mina_uppladdningar' ),
index 7825ae9..140073a 100644 (file)
@@ -102,6 +102,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'บทความที่ถูกแก้ไขมากที่สุด' ),
        'Movepage'                  => array( 'เปลี่ยนทาง' ),
        'Mycontributions'           => array( 'เรื่องที่ฉันเขียน' ),
+       'MyLanguage'                => array( 'ภาษาของฉัน' ),
        'Mypage'                    => array( 'หน้าของฉัน' ),
        'Mytalk'                    => array( 'หน้าพูดคุยของฉัน' ),
        'Myuploads'                 => array( 'ไฟล์ที่อัปโหลดของฉัน' ),
index 5a9b68c..f1d9a4b 100644 (file)
@@ -46,6 +46,7 @@ $specialPageAliases = array(
        'Emailuser'                 => array( 'Бә_иштирокәкә_номә_вығандеј' ),
        'Longpages'                 => array( 'Дырозә_сәһифон' ),
        'Movepage'                  => array( 'Сәһифә_номи_дәгиш_кардеј' ),
+       'MyLanguage'                => array( 'Чымы_зывон' ),
        'Mypage'                    => array( 'Чымы_сәһифә' ),
        'Mytalk'                    => array( 'Чымы_мызокирә' ),
        'Myuploads'                 => array( 'Чымы_бо_жә_быә_чијон' ),
index e08c9fc..21cc341 100644 (file)
@@ -145,6 +145,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'EnÇokRevizyon' ),
        'Movepage'                  => array( 'SayfaTaşı' ),
        'Mycontributions'           => array( 'Katkılarım' ),
+       'MyLanguage'                => array( 'Dilim', 'BenimDilim' ),
        'Mypage'                    => array( 'Sayfam', 'BenimSayfam', 'KullanıcıSayfam' ),
        'Mytalk'                    => array( 'MesajSayfam', 'İletiSayfam' ),
        'Myuploads'                 => array( 'Yüklemelerim' ),
index 49a8891..457ca9a 100644 (file)
@@ -140,6 +140,7 @@ $specialPageAliases = array(
        'Mostcategories'            => array( 'Зур_төркемнәр' ),
        'Mostrevisions'             => array( 'Зур_үзгәртүләр' ),
        'Movepage'                  => array( 'Битне_күчерү' ),
+       'MyLanguage'                => array( 'Телем' ),
        'Mypage'                    => array( 'Сәхифәм' ),
        'Mytalk'                    => array( 'Бәхәсем' ),
        'Newimages'                 => array( 'Яңа_файл' ),
index 41f21e5..77759a1 100644 (file)
@@ -48,6 +48,10 @@ $namespaceAliases = array(
        'Категория_чугаазы'  => NS_CATEGORY_TALK,
 );
 
+$specialPageAliases = array(
+       'MyLanguage'                => array( 'Дылым' ),
+);
+
 $magicWords = array(
        'redirect'                  => array( '0', '#көжүрүлге', '#ШИГЛЕДИР', '#перенаправление', '#перенапр', '#REDIRECT' ),
        'notoc'                     => array( '0', '__ЭГЕ_ЧОК__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
index e18fc46..861b936 100644 (file)
@@ -165,6 +165,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Найбільш_редаговані' ),
        'Movepage'                  => array( 'Перейменувати' ),
        'Mycontributions'           => array( 'Мій_внесок' ),
+       'MyLanguage'                => array( 'Моя_мова' ),
        'Mypage'                    => array( 'Моя_сторінка' ),
        'Mytalk'                    => array( 'Моє_обговорення' ),
        'Myuploads'                 => array( 'Мої_завантаження' ),
index 1712c05..c691b0e 100644 (file)
@@ -111,6 +111,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( 'Nhiều_phiên_bản_nhất' ),
        'Movepage'                  => array( 'Di_chuyển', 'Đổi_tên_trang' ),
        'Mycontributions'           => array( 'Đóng_góp_của_tôi', 'Tôi_đóng_góp' ),
+       'MyLanguage'                => array( 'Ngôn_ngữ_tôi' ),
        'Mypage'                    => array( 'Trang_tôi', 'Trang_cá_nhân' ),
        'Mytalk'                    => array( 'Thảo_luận_tôi', 'Trang_thảo_luận_của_tôi' ),
        'Myuploads'                 => array( 'Tập_tin_tôi' ),
index 12711d1..dcbc3e1 100644 (file)
@@ -143,6 +143,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( '最多版本' ),
        'Movepage'                  => array( '搬頁' ),
        'Mycontributions'           => array( '我嘅貢獻' ),
+       'MyLanguage'                => array( '我個話' ),
        'Mypage'                    => array( '我嘅頁面' ),
        'Mytalk'                    => array( '我嘅傾偈' ),
        'Myuploads'                 => array( '我嘅上傳' ),
index fa72339..e6501c6 100644 (file)
@@ -185,6 +185,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( '最多修订页面' ),
        'Movepage'                  => array( '移动页面' ),
        'Mycontributions'           => array( '我的贡献' ),
+       'MyLanguage'                => array( '我的语言' ),
        'Mypage'                    => array( '我的用户页' ),
        'Mytalk'                    => array( '我的讨论页' ),
        'Myuploads'                 => array( '我上传的文件' ),
index be18e0b..9b7dc9e 100644 (file)
@@ -169,6 +169,7 @@ $specialPageAliases = array(
        'Mostrevisions'             => array( '最多修訂頁面' ),
        'Movepage'                  => array( '移動頁面' ),
        'Mycontributions'           => array( '我的貢獻' ),
+       'MyLanguage'                => array( '我的語言' ),
        'Mypage'                    => array( '我的用戶頁' ),
        'Mytalk'                    => array( '我的討論頁' ),
        'Myuploads'                 => array( '我的上傳' ),
index 1dd1a89..8b23909 100644 (file)
--- a/load.php
+++ b/load.php
@@ -23,7 +23,7 @@
  */
 
 // Bail if PHP is too low
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
+if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.3' ) < 0 ) {
        // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require dirname( __FILE__ ) . '/includes/PHPVersionError.php';
        wfPHPVersionError( 'load.php' );
@@ -38,14 +38,15 @@ if ( !$wgRequest->checkUrlExtension() ) {
        return;
 }
 
-// Respond to resource loading request
-$resourceLoader = new ResourceLoader();
+// Respond to resource loading request.
+// foo()->bar() syntax is not supported in PHP4, and this file needs to *parse* in PHP4.
+$configFactory = ConfigFactory::getDefaultInstance();
+$resourceLoader = new ResourceLoader( $configFactory->makeConfig( 'main' ) );
 $resourceLoader->respond( new ResourceLoaderContext( $resourceLoader, $wgRequest ) );
 
 wfProfileOut( 'load.php' );
 wfLogProfilingData();
 
-// Shut down the database.  foo()->bar() syntax is not supported in PHP4, and this file
-// needs to *parse* in PHP4, although we'll never get down here to worry about = vs =&
+// Shut down the database.
 $lb = wfGetLBFactory();
 $lb->shutdown();
index ffb07eb..d740f56 100644 (file)
@@ -20,8 +20,8 @@
  * @defgroup Maintenance Maintenance
  */
 
-// Make sure we're on PHP5.3.2 or better
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
+// Make sure we're on PHP5.3.3 or better
+if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.3' ) < 0 ) {
        // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require_once dirname( __FILE__ ) . '/../includes/PHPVersionError.php';
        wfPHPVersionError( 'cli' );
@@ -113,6 +113,13 @@ abstract class Maintenance {
         */
        public $fileHandle;
 
+       /**
+        * Accessible via getConfig()
+        *
+        * @var Config
+        */
+       private $config;
+
        /**
         * Default constructor. Children should call this *first* if implementing
         * their own constructors
@@ -457,6 +464,26 @@ abstract class Maintenance {
                $this->mDependantParameters = array_diff_key( $this->mParams, $this->mGenericParameters );
        }
 
+       /**
+        * @since 1.24
+        * @return Config
+        */
+       public function getConfig() {
+               if ( $this->config === null ) {
+                       $this->config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+               }
+
+               return $this->config;
+       }
+
+       /**
+        * @since 1.24
+        * @param Config $config
+        */
+       public function setConfig( Config $config ) {
+               $this->config = $config;
+       }
+
        /**
         * Run a child maintenance script. Pass all of the current arguments
         * to it.
diff --git a/maintenance/archives/patch-restructure.sql b/maintenance/archives/patch-restructure.sql
deleted file mode 100644 (file)
index a5bc3e5..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
--- The Great Restructuring of October 2004
--- Creates 'page', 'revision' tables and transforms the classic
--- cur+old into a separate page+revision+text structure.
---
--- The pre-conversion 'old' table is renamed to 'text' and used
--- without internal restructuring to avoid rebuilding the entire
--- table. (This can be done separately if desired.)
---
--- The pre-conversion 'cur' table is now redundant and can be
--- discarded when done.
-
-CREATE TABLE /*$wgDBprefix*/page (
-  page_id int unsigned NOT NULL auto_increment,
-  page_namespace tinyint NOT NULL,
-  page_title varchar(255) binary NOT NULL,
-  page_restrictions tinyblob NOT NULL,
-  page_counter bigint unsigned NOT NULL default '0',
-  page_is_redirect tinyint unsigned NOT NULL default '0',
-  page_is_new tinyint unsigned NOT NULL default '0',
-  page_random real unsigned NOT NULL,
-  page_touched binary(14) NOT NULL default '',
-  page_latest int unsigned NOT NULL,
-  page_len int unsigned NOT NULL,
-
-  PRIMARY KEY page_id (page_id),
-  UNIQUE INDEX name_title (page_namespace,page_title),
-  INDEX (page_random),
-  INDEX (page_len)
-);
-
-CREATE TABLE /*$wgDBprefix*/revision (
-  rev_id int unsigned NOT NULL auto_increment,
-  rev_page int unsigned NOT NULL,
-  rev_comment tinyblob NOT NULL,
-  rev_user int unsigned NOT NULL default '0',
-  rev_user_text varchar(255) binary NOT NULL default '',
-  rev_timestamp binary(14) NOT NULL default '',
-  rev_minor_edit tinyint unsigned NOT NULL default '0',
-  rev_deleted tinyint unsigned NOT NULL default '0',
-
-  PRIMARY KEY rev_page_id (rev_page, rev_id),
-  UNIQUE INDEX rev_id (rev_id),
-  INDEX rev_timestamp (rev_timestamp),
-  INDEX page_timestamp (rev_page,rev_timestamp),
-  INDEX user_timestamp (rev_user,rev_timestamp),
-  INDEX usertext_timestamp (rev_user_text,rev_timestamp)
-);
-
--- If creating new 'text' table it would look like this:
---
--- CREATE TABLE /*$wgDBprefix*/text (
---   old_id int(8) unsigned NOT NULL auto_increment,
---   old_text mediumtext NOT NULL,
---   old_flags tinyblob NOT NULL,
---
---   PRIMARY KEY old_id (old_id)
--- );
-
-
--- Lock!
-LOCK TABLES /*$wgDBprefix*/page WRITE, /*$wgDBprefix*/revision WRITE, /*$wgDBprefix*/old WRITE, /*$wgDBprefix*/cur WRITE;
-
--- Save the last old_id value for later
-SELECT (@maxold:=MAX(old_id)) FROM /*$wgDBprefix*/old;
-
--- First, copy all current entries into the old table.
-INSERT
-  INTO /*$wgDBprefix*/old
-    (old_namespace,
-    old_title,
-    old_text,
-    old_comment,
-    old_user,
-    old_user_text,
-    old_timestamp,
-    old_minor_edit,
-    old_flags)
-  SELECT
-    cur_namespace,
-    cur_title,
-    cur_text,
-    cur_comment,
-    cur_user,
-    cur_user_text,
-    cur_timestamp,
-    cur_minor_edit,
-    ''
-  FROM /*$wgDBprefix*/cur;
-
--- Now, copy all old data except the text into revisions
-INSERT
-  INTO /*$wgDBprefix*/revision
-    (rev_id,
-    rev_page,
-    rev_comment,
-    rev_user,
-    rev_user_text,
-    rev_timestamp,
-    rev_minor_edit)
-  SELECT
-    old_id,
-    cur_id,
-    old_comment,
-    old_user,
-    old_user_text,
-    old_timestamp,
-    old_minor_edit
-  FROM /*$wgDBprefix*/old,/*$wgDBprefix*/cur
-  WHERE old_namespace=cur_namespace
-    AND old_title=cur_title;
-
--- And, copy the cur data into page
-INSERT
-  INTO /*$wgDBprefix*/page
-    (page_id,
-    page_namespace,
-    page_title,
-    page_restrictions,
-    page_counter,
-    page_is_redirect,
-    page_is_new,
-    page_random,
-    page_touched,
-    page_latest)
-  SELECT
-    cur_id,
-    cur_namespace,
-    cur_title,
-    cur_restrictions,
-    cur_counter,
-    cur_is_redirect,
-    cur_is_new,
-    cur_random,
-    cur_touched,
-    rev_id
-  FROM /*$wgDBprefix*/cur,/*$wgDBprefix*/revision
-  WHERE cur_id=rev_page
-    AND rev_timestamp=cur_timestamp
-    AND rev_id > @maxold;
-
-UNLOCK TABLES;
-
--- Keep the old table around as the text store.
--- Its extra fields will be ignored, but trimming them is slow
--- so we won't bother doing it for now.
-ALTER TABLE /*$wgDBprefix*/old RENAME TO /*$wgDBprefix*/text;
diff --git a/maintenance/cleanupBlocks.php b/maintenance/cleanupBlocks.php
new file mode 100644 (file)
index 0000000..1736203
--- /dev/null
@@ -0,0 +1,147 @@
+<?php
+/**
+ * Cleans up user blocks with user names not matching the 'user' table
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Maintenance script to clean up user blocks with user names not matching the
+ * 'user' table.
+ *
+ * @ingroup Maintenance
+ */
+class CleanupBlocks extends Maintenance {
+
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = "Cleanup user blocks with user names not matching the 'user' table";
+               $this->setBatchSize( 1000 );
+       }
+
+       public function execute() {
+               $db = wfGetDB( DB_MASTER );
+
+               $max = $db->selectField( 'ipblocks', 'MAX(ipb_user)' );
+
+               // Step 1: Clean up any duplicate user blocks
+               for ( $from = 1; $from <= $max; $from += $this->mBatchSize ) {
+                       $to = min( $max, $from + $this->mBatchSize - 1 );
+                       $this->output( "Cleaning up duplicate ipb_user ($from-$to of $max)\n" );
+
+                       $delete = array();
+
+                       $res = $db->select(
+                               'ipblocks',
+                               array( 'ipb_user' ),
+                               array(
+                                       "ipb_user >= $from",
+                                       "ipb_user <= $to",
+                               ),
+                               __METHOD__,
+                               array(
+                                       'GROUP BY' => 'ipb_user',
+                                       'HAVING' => 'COUNT(*) > 1',
+                               )
+                       );
+                       foreach ( $res as $row ) {
+                               $bestBlock = null;
+                               $res2 = $db->select(
+                                       'ipblocks',
+                                       '*',
+                                       array(
+                                               'ipb_user' => $row->ipb_user,
+                                       )
+                               );
+                               foreach ( $res2 as $row2 ) {
+                                       $block = Block::newFromRow( $row2 );
+                                       if ( !$bestBlock ) {
+                                               $bestBlock = $block;
+                                               continue;
+                                       }
+
+                                       // Find the most-restrictive block. Can't use
+                                       // Block::chooseBlock because that's for IP blocks, not
+                                       // user blocks.
+                                       $keep = null;
+                                       if ( $keep === null && $block->getExpiry() !== $bestBlock->getExpiry() ) {
+                                               // This works for infinite blocks because 'infinity' > '20141024234513'
+                                               $keep = $block->getExpiry() > $bestBlock->getExpiry();
+                                       }
+                                       if ( $keep === null ) {
+                                               foreach ( array( 'createaccount', 'sendemail', 'editownusertalk' ) as $action ) {
+                                                       if ( $block->prevents( $action ) xor $bestBlock->prevents( $action ) ) {
+                                                               $keep = $block->prevents( $action );
+                                                               break;
+                                                       }
+                                               }
+                                       }
+
+                                       if ( $keep ) {
+                                               $delete[] = $bestBlock->getId();
+                                               $bestBlock = $block;
+                                       } else {
+                                               $delete[] = $block->getId();
+                                       }
+                               }
+                       }
+
+                       if ( $delete ) {
+                               $db->delete(
+                                       'ipblocks',
+                                       array( 'ipb_id' => $delete ),
+                                       __METHOD__
+                               );
+                       }
+               }
+
+               // Step 2: Update the user name in any blocks where it doesn't match
+               for ( $from = 1; $from <= $max; $from += $this->mBatchSize ) {
+                       $to = min( $max, $from + $this->mBatchSize - 1 );
+                       $this->output( "Cleaning up mismatched user name ($from-$to of $max)\n" );
+
+                       $res = $db->select(
+                               array( 'ipblocks', 'user' ),
+                               array( 'ipb_id', 'user_name' ),
+                               array(
+                                       'ipb_user = user_id',
+                                       "ipb_user >= $from",
+                                       "ipb_user <= $to",
+                                       'ipb_address != user_name',
+                               ),
+                               __METHOD__
+                       );
+                       foreach ( $res as $row ) {
+                               $db->update(
+                                       'ipblocks',
+                                       array( 'ipb_address' => $row->user_name ),
+                                       array( 'ipb_id' => $row->ipb_id ),
+                                       __METHOD__
+                               );
+                       }
+               }
+
+               $this->output( "Done!\n" );
+       }
+}
+
+$maintClass = "CleanupBlocks";
+require_once RUN_MAINTENANCE_IF_MAIN;
index 9e88c13..6234db4 100644 (file)
@@ -37,6 +37,9 @@ require_once __DIR__ . '/cleanupTable.inc';
  * @ingroup Maintenance
  */
 class CapsCleanup extends TableCleanup {
+
+       private $user;
+
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Script to cleanup capitalization";
@@ -44,13 +47,13 @@ class CapsCleanup extends TableCleanup {
        }
 
        public function execute() {
-               global $wgCapitalLinks, $wgUser;
+               global $wgCapitalLinks;
 
                if ( $wgCapitalLinks ) {
                        $this->error( "\$wgCapitalLinks is on -- no need for caps links cleanup.", true );
                }
 
-               $wgUser = User::newFromName( 'Conversion script' );
+               $this->user = User::newFromName( 'Conversion script' );
 
                $this->namespace = intval( $this->getOption( 'namespace', 0 ) );
                $this->dryrun = $this->hasOption( 'dry-run' );
@@ -87,7 +90,9 @@ class CapsCleanup extends TableCleanup {
                        $this->output( "\"$display\" -> \"$targetDisplay\": DRY RUN, NOT MOVED\n" );
                        $ok = true;
                } else {
-                       $ok = $current->moveTo( $target, false, 'Converting page titles to lowercase' );
+                       $mp = new MovePage( $current, $target );
+                       $status = $mp->move( $this->user, 'Converting page titles to lowercase', true );
+                       $ok = $status->isOK() ? 'OK' : $status->getWikiText();
                        $this->output( "\"$display\" -> \"$targetDisplay\": $ok\n" );
                }
                if ( $ok === true ) {
index cc8b024..e1d0ed6 100644 (file)
@@ -47,7 +47,7 @@ class CleanupRemovedModules extends Maintenance {
 
        public function execute() {
                $dbw = wfGetDB( DB_MASTER );
-               $rl = new ResourceLoader();
+               $rl = new ResourceLoader( ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
                $moduleNames = $rl->getModuleNames();
                $moduleList = implode( ', ', array_map( array( $dbw, 'addQuotes' ), $moduleNames ) );
                $limit = max( 1, intval( $this->getOption( 'batchsize', 500 ) ) );
index eee1204..0df9e7f 100644 (file)
@@ -156,7 +156,7 @@ class TitleCleanup extends TableCleanup {
 
                        $clean = 'Broken/' . $prior;
                        $verified = Title::makeTitleSafe( $ns, $clean );
-                       if ( $verified->exists() ) {
+                       if ( !$verified || $verified->exists() ) {
                                $blah = "Broken/id:" . $row->page_id;
                                $this->output( "Couldn't legalize; form '$clean' exists; using '$blah'\n" );
                                $verified = Title::makeTitleSafe( $ns, $blah );
diff --git a/maintenance/cssjanus/COPYING b/maintenance/cssjanus/COPYING
deleted file mode 100644 (file)
index 3f2c895..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-   Copyright 2008 Google Inc.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/maintenance/cssjanus/LICENSE b/maintenance/cssjanus/LICENSE
deleted file mode 100644 (file)
index d645695..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/maintenance/cssjanus/README b/maintenance/cssjanus/README
deleted file mode 100644 (file)
index 1b96d1a..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-=CSSJanus=
-
-_Flips CSS from LTR to an RTL orienation and vice-versa_
-
-Author: `Lindsey Simon <elsigh@google.com>`
-
-==Introduction==
-
-CSSJanus is CSS parser utility designed to aid the conversion of a website's
-layout from left-to-right(LTR) to right-to-left(RTL). The script was born out of
-a need to convert CSS for RTL languages when tables are not being used for layout (since tables will automatically reorder TD's in RTL).
-CSSJanus will change most of the obvious CSS property names and their values as
-well as some not-so-obvious ones (cursor, background-position %, etc...).
-The script is designed to offer flexibility to account for cases when you do
-not want to change certain rules which exist to account for bidirectional text
-display bugs, as well as situations where you may or may not want to flip annotations inside of the background url string.
-Note that you can disable CSSJanus from running on an entire class or any
-rule within a class by prepending a /* @noflip */ comment before the rule(s)
-you want CSSJanus to ignore.
-
-CSSJanus itself is not always enough to make a website that works in a LTR
-language context work in a RTL language all the way, but it is a start.
-
-==Getting the code==
-
-View the trunk at:
-
-  http://cssjanus.googlecode.com/svn/trunk/
-
-Check out the latest development version anonymously with:
-
-{{{
-  $ svn checkout http://cssjanus.googlecode.com/svn/trunk/ cssjanus
-}}}
-
-==Using==
-
-Usage:
-  ./cssjanus.py < file.css > file-rtl.css
-Flags:
-  --swap_left_right_in_url: Fixes "left"/"right" string within urls.
-  Ex: ./cssjanus.py --swap_left_right_in_url < file.css > file_rtl.css
-  --swap_ltr_rtl_in_url: Fixes "ltr"/"rtl" string within urls.
-  Ex: ./cssjanus.py --swap_ltr_rtl_in_url < file.css > file_rtl.css
-
-If you'd like to make use of the webapp version of cssjanus, you'll need to
-download the Google App Engine SDK
-  http://code.google.com/appengine/downloads.html
-and also drop a "django" directory into this directory, with the latest svn
-from django. You should be good to go with that setup. Please let me know
-otherwise.
-
-==Bugs, Patches==
-
-Patches and bug reports are welcome, just please keep the style
-consistent with the original source. If you find a bug, please include a diff
-of cssjanus_test.py with the bug included as a new unit test which fails. It
-will make understanding and fixing the bug easier.
-
-==Todo==
-
-* Include some helpers for some typical bidi text solutions?
-* Aural CSS (azimuth) swapping?
-
-==Contributors==
-
-Additional thanks to Mike Samuel for his work on csslex.py, Andy Perelson for
-his help coding and reviewing, Stephen Zabel for his help with i18n and my sanity,
-and to Eric Meyer for his thoughtful input.
-Thanks to Junyu Wang for the Chinese translation.
-Thanks to Masashi Kawashima for the Japanese translation.
-Thanks to Taaryk Taar and Tariq Al-Omaireeni for an updated Arabic translation.
-Thanks to Jens Meiert for the German translation.
-
-==License==
-
-{{{
-  Copyright 2008 Google Inc. All Rights Reserved.
-
-  Licensed under the Apache License, Version 2.0 (the 'License');
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an 'AS IS' BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-}}}
diff --git a/maintenance/cssjanus/cssjanus.py b/maintenance/cssjanus/cssjanus.py
deleted file mode 100644 (file)
index dd14bd5..0000000
+++ /dev/null
@@ -1,574 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2008 Google Inc. All Rights Reserved.
-
-"""Converts a LeftToRight Cascading Style Sheet into a RightToLeft one.
-
-   This is a utility script for replacing "left" oriented things in a CSS file
-   like float, padding, margin with "right" oriented values.
-   It also does the opposite.
-   The goal is to be able to conditionally serve one large, cat'd, compiled CSS
-   file appropriate for LeftToRight oriented languages and RightToLeft ones.
-   This utility will hopefully help your structural layout done in CSS in
-   terms of its RTL compatibility. It will not help with some of the more
-   complicated bidirectional text issues.
-"""
-
-__author__ = 'elsigh@google.com (Lindsey Simon)'
-__version__ = '0.1'
-
-import logging
-import re
-import sys
-import getopt
-import os
-
-import csslex
-
-logging.getLogger().setLevel(logging.INFO)
-
-# Global for the command line flags.
-SWAP_LTR_RTL_IN_URL_DEFAULT = False
-SWAP_LEFT_RIGHT_IN_URL_DEFAULT = False
-FLAGS = {'swap_ltr_rtl_in_url': SWAP_LTR_RTL_IN_URL_DEFAULT,
-         'swap_left_right_in_url': SWAP_LEFT_RIGHT_IN_URL_DEFAULT}
-
-# Generic token delimiter character.
-TOKEN_DELIMITER = '~'
-
-# This is a temporary match token we use when swapping strings.
-TMP_TOKEN = '%sTMP%s' % (TOKEN_DELIMITER, TOKEN_DELIMITER)
-
-# Token to be used for joining lines.
-TOKEN_LINES = '%sJ%s' % (TOKEN_DELIMITER, TOKEN_DELIMITER)
-
-# Global constant text strings for CSS value matches.
-LTR = 'ltr'
-RTL = 'rtl'
-LEFT = 'left'
-RIGHT = 'right'
-
-# This is a lookbehind match to ensure that we don't replace instances
-# of our string token (left, rtl, etc...) if there's a letter in front of it.
-# Specifically, this prevents replacements like 'background: url(bright.png)'.
-LOOKBEHIND_NOT_LETTER = r'(?<![a-zA-Z])'
-
-# This is a lookahead match to make sure we don't replace left and right
-# in actual classnames, so that we don't break the HTML/CSS dependencies.
-# Read literally, it says ignore cases where the word left, for instance, is
-# directly followed by valid classname characters and a curly brace.
-# ex: .column-left {float: left} will become .column-left {float: right}
-LOOKAHEAD_NOT_OPEN_BRACE = (r'(?!(?:%s|%s|%s|#|\:|\.|\,|\+|>)*?{)' %
-                            (csslex.NMCHAR, TOKEN_LINES, csslex.SPACE))
-
-
-# These two lookaheads are to test whether or not we are within a
-# background: url(HERE) situation.
-# Ref: http://www.w3.org/TR/CSS21/syndata.html#uri
-VALID_AFTER_URI_CHARS = r'[\'\"]?%s' % csslex.WHITESPACE
-LOOKAHEAD_NOT_CLOSING_PAREN = r'(?!%s?%s\))' % (csslex.URL_CHARS,
-                                                VALID_AFTER_URI_CHARS)
-LOOKAHEAD_FOR_CLOSING_PAREN = r'(?=%s?%s\))' % (csslex.URL_CHARS,
-                                                VALID_AFTER_URI_CHARS)
-
-# Compile a regex to swap left and right values in 4 part notations.
-# We need to match negatives and decimal numeric values.
-# ex. 'margin: .25em -2px 3px 0' becomes 'margin: .25em 0 3px -2px'.
-POSSIBLY_NEGATIVE_QUANTITY = r'((?:-?%s)|(?:inherit|auto))' % csslex.QUANTITY
-POSSIBLY_NEGATIVE_QUANTITY_SPACE = r'%s%s%s' % (POSSIBLY_NEGATIVE_QUANTITY,
-                                                csslex.SPACE,
-                                                csslex.WHITESPACE)
-FOUR_NOTATION_QUANTITY_RE = re.compile(r'%s%s%s%s' %
-                                       (POSSIBLY_NEGATIVE_QUANTITY_SPACE,
-                                        POSSIBLY_NEGATIVE_QUANTITY_SPACE,
-                                        POSSIBLY_NEGATIVE_QUANTITY_SPACE,
-                                        POSSIBLY_NEGATIVE_QUANTITY),
-                                       re.I)
-COLOR = r'(%s|%s)' % (csslex.NAME, csslex.HASH)
-COLOR_SPACE = r'%s%s' % (COLOR, csslex.SPACE)
-FOUR_NOTATION_COLOR_RE = re.compile(r'(-color%s:%s)%s%s%s(%s)' %
-                                    (csslex.WHITESPACE,
-                                     csslex.WHITESPACE,
-                                     COLOR_SPACE,
-                                     COLOR_SPACE,
-                                     COLOR_SPACE,
-                                     COLOR),
-                                    re.I)
-
-# Compile the cursor resize regexes
-CURSOR_EAST_RE = re.compile(LOOKBEHIND_NOT_LETTER + '([ns]?)e-resize')
-CURSOR_WEST_RE = re.compile(LOOKBEHIND_NOT_LETTER + '([ns]?)w-resize')
-
-# Matches the condition where we need to replace the horizontal component
-# of a background-position value when expressed in horizontal percentage.
-# Had to make two regexes because in the case of position-x there is only
-# one quantity, and otherwise we don't want to match and change cases with only
-# one quantity.
-BG_HORIZONTAL_PERCENTAGE_RE = re.compile(r'background(-position)?(%s:%s)'
-                                         '([^%%]*?)(%s)%%'
-                                         '(%s(?:%s|%s))' % (csslex.WHITESPACE,
-                                                            csslex.WHITESPACE,
-                                                            csslex.NUM,
-                                                            csslex.WHITESPACE,
-                                                            csslex.QUANTITY,
-                                                            csslex.IDENT))
-
-BG_HORIZONTAL_PERCENTAGE_X_RE = re.compile(r'background-position-x(%s:%s)'
-                                           '(%s)%%' % (csslex.WHITESPACE,
-                                                       csslex.WHITESPACE,
-                                                       csslex.NUM))
-
-# Matches the opening of a body selector.
-BODY_SELECTOR = r'body%s{%s' % (csslex.WHITESPACE, csslex.WHITESPACE)
-
-# Matches anything up until the closing of a selector.
-CHARS_WITHIN_SELECTOR = r'[^\}]*?'
-
-# Matches the direction property in a selector.
-DIRECTION_RE = r'direction%s:%s' % (csslex.WHITESPACE, csslex.WHITESPACE)
-
-# These allow us to swap "ltr" with "rtl" and vice versa ONLY within the
-# body selector and on the same line.
-BODY_DIRECTION_LTR_RE = re.compile(r'(%s)(%s)(%s)(ltr)' %
-                                   (BODY_SELECTOR, CHARS_WITHIN_SELECTOR,
-                                    DIRECTION_RE),
-                                   re.I)
-BODY_DIRECTION_RTL_RE = re.compile(r'(%s)(%s)(%s)(rtl)' %
-                                   (BODY_SELECTOR, CHARS_WITHIN_SELECTOR,
-                                    DIRECTION_RE),
-                                   re.I)
-
-
-# Allows us to swap "direction:ltr" with "direction:rtl" and
-# vice versa anywhere in a line.
-DIRECTION_LTR_RE = re.compile(r'%s(ltr)' % DIRECTION_RE)
-DIRECTION_RTL_RE = re.compile(r'%s(rtl)' % DIRECTION_RE)
-
-# We want to be able to switch left with right and vice versa anywhere
-# we encounter left/right strings, EXCEPT inside the background:url(). The next
-# two regexes are for that purpose. We have alternate IN_URL versions of the
-# regexes compiled in case the user passes the flag that they do
-# actually want to have left and right swapped inside of background:urls.
-LEFT_RE = re.compile('%s(%s)%s%s' % (LOOKBEHIND_NOT_LETTER,
-                                     LEFT,
-                                     LOOKAHEAD_NOT_CLOSING_PAREN,
-                                     LOOKAHEAD_NOT_OPEN_BRACE),
-                     re.I)
-RIGHT_RE = re.compile('%s(%s)%s%s' % (LOOKBEHIND_NOT_LETTER,
-                                      RIGHT,
-                                      LOOKAHEAD_NOT_CLOSING_PAREN,
-                                      LOOKAHEAD_NOT_OPEN_BRACE),
-                      re.I)
-LEFT_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER,
-                                          LEFT,
-                                          LOOKAHEAD_FOR_CLOSING_PAREN),
-                            re.I)
-RIGHT_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER,
-                                           RIGHT,
-                                           LOOKAHEAD_FOR_CLOSING_PAREN),
-                             re.I)
-LTR_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER,
-                                         LTR,
-                                         LOOKAHEAD_FOR_CLOSING_PAREN),
-                           re.I)
-RTL_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER,
-                                         RTL,
-                                         LOOKAHEAD_FOR_CLOSING_PAREN),
-                           re.I)
-
-COMMENT_RE = re.compile('(%s)' % csslex.COMMENT, re.I)
-
-NOFLIP_TOKEN = r'\@noflip'
-# The NOFLIP_TOKEN inside of a comment. For now, this requires that comments
-# be in the input, which means users of a css compiler would have to run
-# this script first if they want this functionality.
-NOFLIP_ANNOTATION = r'/\*%s%s%s\*/' % (csslex.WHITESPACE,
-                                       NOFLIP_TOKEN,
-                                       csslex. WHITESPACE)
-
-# After a NOFLIP_ANNOTATION, and within a class selector, we want to be able
-# to set aside a single rule not to be flipped. We can do this by matching
-# our NOFLIP annotation and then using a lookahead to make sure there is not
-# an opening brace before the match.
-NOFLIP_SINGLE_RE = re.compile(r'(%s%s[^;}]+;?)' % (NOFLIP_ANNOTATION,
-                                                   LOOKAHEAD_NOT_OPEN_BRACE),
-                              re.I)
-
-# After a NOFLIP_ANNOTATION, we want to grab anything up until the next } which
-# means the entire following class block. This will prevent all of its
-# declarations from being flipped.
-NOFLIP_CLASS_RE = re.compile(r'(%s%s})' % (NOFLIP_ANNOTATION,
-                                           CHARS_WITHIN_SELECTOR),
-                             re.I)
-
-
-class Tokenizer:
-  """Replaces any CSS comments with string tokens and vice versa."""
-
-  def __init__(self, token_re, token_string):
-    """Constructor for the Tokenizer.
-
-    Args:
-      token_re: A regex for the string to be replace by a token.
-      token_string: The string to put between token delimiters when tokenizing.
-    """
-    logging.debug('Tokenizer::init token_string=%s' % token_string)
-    self.token_re = token_re
-    self.token_string = token_string
-    self.originals = []
-
-  def Tokenize(self, line):
-    """Replaces any string matching token_re in line with string tokens.
-
-    By passing a function as an argument to the re.sub line below, we bypass
-    the usual rule where re.sub will only replace the left-most occurrence of
-    a match by calling the passed in function for each occurrence.
-
-    Args:
-      line: A line to replace token_re matches in.
-
-    Returns:
-      line: A line with token_re matches tokenized.
-    """
-    line = self.token_re.sub(self.TokenizeMatches, line)
-    logging.debug('Tokenizer::Tokenize returns: %s' % line)
-    return line
-
-  def DeTokenize(self, line):
-    """Replaces tokens with the original string.
-
-    Args:
-      line: A line with tokens.
-
-    Returns:
-      line with any tokens replaced by the original string.
-    """
-
-    # Put all of the comments back in by their comment token.
-    for i, original in enumerate(self.originals):
-      token = '%s%s_%s%s' % (TOKEN_DELIMITER, self.token_string, i + 1,
-                             TOKEN_DELIMITER)
-      line = line.replace(token, original)
-      logging.debug('Tokenizer::DeTokenize i:%s w/%s' % (i, token))
-    logging.debug('Tokenizer::DeTokenize returns: %s' % line)
-    return line
-
-  def TokenizeMatches(self, m):
-    """Replaces matches with tokens and stores the originals.
-
-    Args:
-      m: A match object.
-
-    Returns:
-      A string token which replaces the CSS comment.
-    """
-    logging.debug('Tokenizer::TokenizeMatches %s' % m.group(1))
-    self.originals.append(m.group(1))
-    return '%s%s_%s%s' % (TOKEN_DELIMITER,
-                          self.token_string,
-                          len(self.originals),
-                          TOKEN_DELIMITER)
-
-
-def FixBodyDirectionLtrAndRtl(line):
-  """Replaces ltr with rtl and vice versa ONLY in the body direction.
-
-  Args:
-    line: A string to replace instances of ltr with rtl.
-  Returns:
-    line with direction: ltr and direction: rtl swapped only in body selector.
-    line = FixBodyDirectionLtrAndRtl('body { direction:ltr }')
-    line will now be 'body { direction:rtl }'.
-  """
-
-  line = BODY_DIRECTION_LTR_RE.sub('\\1\\2\\3%s' % TMP_TOKEN, line)
-  line = BODY_DIRECTION_RTL_RE.sub('\\1\\2\\3%s' % LTR, line)
-  line = line.replace(TMP_TOKEN, RTL)
-  logging.debug('FixBodyDirectionLtrAndRtl returns: %s' % line)
-  return line
-
-
-def FixLeftAndRight(line):
-  """Replaces left with right and vice versa in line.
-
-  Args:
-    line: A string in which to perform the replacement.
-
-  Returns:
-    line with left and right swapped. For example:
-    line = FixLeftAndRight('padding-left: 2px; margin-right: 1px;')
-    line will now be 'padding-right: 2px; margin-left: 1px;'.
-  """
-
-  line = LEFT_RE.sub(TMP_TOKEN, line)
-  line = RIGHT_RE.sub(LEFT, line)
-  line = line.replace(TMP_TOKEN, RIGHT)
-  logging.debug('FixLeftAndRight returns: %s' % line)
-  return line
-
-
-def FixLeftAndRightInUrl(line):
-  """Replaces left with right and vice versa ONLY within background urls.
-
-  Args:
-    line: A string in which to replace left with right and vice versa.
-
-  Returns:
-    line with left and right swapped in the url string. For example:
-    line = FixLeftAndRightInUrl('background:url(right.png)')
-    line will now be 'background:url(left.png)'.
-  """
-
-  line = LEFT_IN_URL_RE.sub(TMP_TOKEN, line)
-  line = RIGHT_IN_URL_RE.sub(LEFT, line)
-  line = line.replace(TMP_TOKEN, RIGHT)
-  logging.debug('FixLeftAndRightInUrl returns: %s' % line)
-  return line
-
-
-def FixLtrAndRtlInUrl(line):
-  """Replaces ltr with rtl and vice versa ONLY within background urls.
-
-  Args:
-    line: A string in which to replace ltr with rtl and vice versa.
-
-  Returns:
-    line with left and right swapped. For example:
-    line = FixLtrAndRtlInUrl('background:url(rtl.png)')
-    line will now be 'background:url(ltr.png)'.
-  """
-
-  line = LTR_IN_URL_RE.sub(TMP_TOKEN, line)
-  line = RTL_IN_URL_RE.sub(LTR, line)
-  line = line.replace(TMP_TOKEN, RTL)
-  logging.debug('FixLtrAndRtlInUrl returns: %s' % line)
-  return line
-
-
-def FixCursorProperties(line):
-  """Fixes directional CSS cursor properties.
-
-  Args:
-    line: A string to fix CSS cursor properties in.
-
-  Returns:
-    line reformatted with the cursor properties substituted. For example:
-    line = FixCursorProperties('cursor: ne-resize')
-    line will now be 'cursor: nw-resize'.
-  """
-
-  line = CURSOR_EAST_RE.sub('\\1' + TMP_TOKEN, line)
-  line = CURSOR_WEST_RE.sub('\\1e-resize', line)
-  line = line.replace(TMP_TOKEN, 'w-resize')
-  logging.debug('FixCursorProperties returns: %s' % line)
-  return line
-
-
-def FixFourPartNotation(line):
-  """Fixes the second and fourth positions in 4 part CSS notation.
-
-  Args:
-    line: A string to fix 4 part CSS notation in.
-
-  Returns:
-    line reformatted with the 4 part notations swapped. For example:
-    line = FixFourPartNotation('padding: 1px 2px 3px 4px')
-    line will now be 'padding: 1px 4px 3px 2px'.
-  """
-  line = FOUR_NOTATION_QUANTITY_RE.sub('\\1 \\4 \\3 \\2', line)
-  line = FOUR_NOTATION_COLOR_RE.sub('\\1\\2 \\5 \\4 \\3', line)
-  logging.debug('FixFourPartNotation returns: %s' % line)
-  return line
-
-
-def FixBackgroundPosition(line):
-  """Fixes horizontal background percentage values in line.
-
-  Args:
-    line: A string to fix horizontal background position values in.
-
-  Returns:
-    line reformatted with the 4 part notations swapped.
-  """
-  line = BG_HORIZONTAL_PERCENTAGE_RE.sub(CalculateNewBackgroundPosition, line)
-  line = BG_HORIZONTAL_PERCENTAGE_X_RE.sub(CalculateNewBackgroundPositionX,
-                                           line)
-  logging.debug('FixBackgroundPosition returns: %s' % line)
-  return line
-
-
-def CalculateNewBackgroundPosition(m):
-  """Fixes horizontal background-position percentages.
-
-  This function should be used as an argument to re.sub since it needs to
-  perform replacement specific calculations.
-
-  Args:
-    m: A match object.
-
-  Returns:
-    A string with the horizontal background position percentage fixed.
-    BG_HORIZONTAL_PERCENTAGE_RE.sub(FixBackgroundPosition,
-                                    'background-position: 75% 50%')
-    will return 'background-position: 25% 50%'.
-  """
-
-  # The flipped value is the offset from 100%
-  new_x = str(100-int(m.group(4)))
-
-  # Since m.group(1) may very well be None type and we need a string..
-  if m.group(1):
-    position_string = m.group(1)
-  else:
-    position_string = ''
-
-  return 'background%s%s%s%s%%%s' % (position_string, m.group(2), m.group(3),
-                                     new_x, m.group(5))
-
-
-def CalculateNewBackgroundPositionX(m):
-  """Fixes percent based background-position-x.
-
-  This function should be used as an argument to re.sub since it needs to
-  perform replacement specific calculations.
-
-  Args:
-    m: A match object.
-
-  Returns:
-    A string with the background-position-x percentage fixed.
-    BG_HORIZONTAL_PERCENTAGE_X_RE.sub(CalculateNewBackgroundPosition,
-                                      'background-position-x: 75%')
-    will return 'background-position-x: 25%'.
-  """
-
-  # The flipped value is the offset from 100%
-  new_x = str(100-int(m.group(2)))
-
-  return 'background-position-x%s%s%%' % (m.group(1), new_x)
-
-
-def ChangeLeftToRightToLeft(lines,
-                            swap_ltr_rtl_in_url=None,
-                            swap_left_right_in_url=None):
-  """Turns lines into a stream and runs the fixing functions against it.
-
-  Args:
-    lines: An list of CSS lines.
-    swap_ltr_rtl_in_url: Overrides this flag if param is set.
-    swap_left_right_in_url: Overrides this flag if param is set.
-
-  Returns:
-    The same lines, but with left and right fixes.
-  """
-
-  global FLAGS
-
-  # Possibly override flags with params.
-  logging.debug('ChangeLeftToRightToLeft swap_ltr_rtl_in_url=%s, '
-                'swap_left_right_in_url=%s' % (swap_ltr_rtl_in_url,
-                                               swap_left_right_in_url))
-  if swap_ltr_rtl_in_url is None:
-    swap_ltr_rtl_in_url = FLAGS['swap_ltr_rtl_in_url']
-  if swap_left_right_in_url is None:
-    swap_left_right_in_url = FLAGS['swap_left_right_in_url']
-
-  # Turns the array of lines into a single line stream.
-  logging.debug('LINES COUNT: %s' % len(lines))
-  line = TOKEN_LINES.join(lines)
-
-  # Tokenize any single line rules with the /* noflip */ annotation.
-  noflip_single_tokenizer = Tokenizer(NOFLIP_SINGLE_RE, 'NOFLIP_SINGLE')
-  line = noflip_single_tokenizer.Tokenize(line)
-
-  # Tokenize any class rules with the /* noflip */ annotation.
-  noflip_class_tokenizer = Tokenizer(NOFLIP_CLASS_RE, 'NOFLIP_CLASS')
-  line = noflip_class_tokenizer.Tokenize(line)
-
-  # Tokenize the comments so we can preserve them through the changes.
-  comment_tokenizer = Tokenizer(COMMENT_RE, 'C')
-  line = comment_tokenizer.Tokenize(line)
-
-  # Here starteth the various left/right orientation fixes.
-  line = FixBodyDirectionLtrAndRtl(line)
-
-  if swap_left_right_in_url:
-    line = FixLeftAndRightInUrl(line)
-
-  if swap_ltr_rtl_in_url:
-    line = FixLtrAndRtlInUrl(line)
-
-  line = FixLeftAndRight(line)
-  line = FixCursorProperties(line)
-  line = FixFourPartNotation(line)
-  line = FixBackgroundPosition(line)
-
-  # DeTokenize the single line noflips.
-  line = noflip_single_tokenizer.DeTokenize(line)
-
-  # DeTokenize the class-level noflips.
-  line = noflip_class_tokenizer.DeTokenize(line)
-
-  # DeTokenize the comments.
-  line = comment_tokenizer.DeTokenize(line)
-
-  # Rejoin the lines back together.
-  lines = line.split(TOKEN_LINES)
-
-  return lines
-
-def usage():
-  """Prints out usage information."""
-
-  print 'Usage:'
-  print '  ./cssjanus.py < file.css > file-rtl.css'
-  print 'Flags:'
-  print '  --swap_left_right_in_url: Fixes "left"/"right" string within urls.'
-  print '  Ex: ./cssjanus.py --swap_left_right_in_url < file.css > file_rtl.css'
-  print '  --swap_ltr_rtl_in_url: Fixes "ltr"/"rtl" string within urls.'
-  print '  Ex: ./cssjanus --swap_ltr_rtl_in_url < file.css > file_rtl.css'
-
-def setflags(opts):
-  """Parse the passed in command line arguments and set the FLAGS global.
-
-  Args:
-    opts: getopt iterable intercepted from argv.
-  """
-
-  global FLAGS
-
-  # Parse the arguments.
-  for opt, arg in opts:
-    logging.debug('opt: %s, arg: %s' % (opt, arg))
-    if opt in ("-h", "--help"):
-      usage()
-      sys.exit()
-    elif opt in ("-d", "--debug"):
-      logging.getLogger().setLevel(logging.DEBUG)
-    elif opt == '--swap_ltr_rtl_in_url':
-      FLAGS['swap_ltr_rtl_in_url'] = True
-    elif opt == '--swap_left_right_in_url':
-      FLAGS['swap_left_right_in_url'] = True
-
-
-def main(argv):
-  """Sends stdin lines to ChangeLeftToRightToLeft and writes to stdout."""
-
-  # Define the flags.
-  try:
-    opts, args = getopt.getopt(argv, 'hd', ['help', 'debug',
-                                            'swap_left_right_in_url',
-                                            'swap_ltr_rtl_in_url'])
-  except getopt.GetoptError:
-    usage()
-    sys.exit(2)
-
-  # Parse and set the flags.
-  setflags(opts)
-
-  # Call the main routine with all our functionality.
-  fixed_lines = ChangeLeftToRightToLeft(sys.stdin.readlines())
-  sys.stdout.write(''.join(fixed_lines))
-
-if __name__ == '__main__':
-  main(sys.argv[1:])
diff --git a/maintenance/cssjanus/csslex.py b/maintenance/cssjanus/csslex.py
deleted file mode 100644 (file)
index 1fc7304..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2007 Google Inc. All Rights Reserved.
-
-"""CSS Lexical Grammar rules.
-
-CSS lexical grammar from http://www.w3.org/TR/CSS21/grammar.html
-"""
-
-__author__ = ['elsigh@google.com (Lindsey Simon)',
-              'msamuel@google.com (Mike Samuel)']
-
-# public symbols
-__all__ = [ "NEWLINE", "HEX", "NON_ASCII", "UNICODE", "ESCAPE", "NMSTART", "NMCHAR", "STRING1", "STRING2", "IDENT", "NAME", "HASH", "NUM", "STRING", "URL", "SPACE", "WHITESPACE", "COMMENT", "QUANTITY", "PUNC" ]
-
-# The comments below are mostly copied verbatim from the grammar.
-
-# "@import"               {return IMPORT_SYM;}
-# "@page"                 {return PAGE_SYM;}
-# "@media"                {return MEDIA_SYM;}
-# "@charset"              {return CHARSET_SYM;}
-KEYWORD = r'(?:\@(?:import|page|media|charset))'
-
-# nl                      \n|\r\n|\r|\f ; a newline
-NEWLINE = r'\n|\r\n|\r|\f'
-
-# h                       [0-9a-f]      ; a hexadecimal digit
-HEX = r'[0-9a-f]'
-
-# nonascii                [\200-\377]
-NON_ASCII = r'[\200-\377]'
-
-# unicode                 \\{h}{1,6}(\r\n|[ \t\r\n\f])?
-UNICODE = r'(?:(?:\\' + HEX + r'{1,6})(?:\r\n|[ \t\r\n\f])?)'
-
-# escape                  {unicode}|\\[^\r\n\f0-9a-f]
-ESCAPE = r'(?:' + UNICODE + r'|\\[^\r\n\f0-9a-f])'
-
-# nmstart                 [_a-z]|{nonascii}|{escape}
-NMSTART = r'(?:[_a-z]|' + NON_ASCII + r'|' + ESCAPE + r')'
-
-# nmchar                  [_a-z0-9-]|{nonascii}|{escape}
-NMCHAR = r'(?:[_a-z0-9-]|' + NON_ASCII + r'|' + ESCAPE + r')'
-
-# ident                   -?{nmstart}{nmchar}*
-IDENT = r'-?' + NMSTART + NMCHAR + '*'
-
-# name                    {nmchar}+
-NAME = NMCHAR + r'+'
-
-# hash
-HASH = r'#' + NAME
-
-# string1                 \"([^\n\r\f\\"]|\\{nl}|{escape})*\"  ; "string"
-STRING1 = r'"(?:[^\"\\]|\\.)*"'
-
-# string2                 \'([^\n\r\f\\']|\\{nl}|{escape})*\'  ; 'string'
-STRING2 = r"'(?:[^\'\\]|\\.)*'"
-
-# string                  {string1}|{string2}
-STRING = '(?:' + STRING1 + r'|' + STRING2 + ')'
-
-# num                     [0-9]+|[0-9]*"."[0-9]+
-NUM = r'(?:[0-9]*\.[0-9]+|[0-9]+)'
-
-# s                       [ \t\r\n\f]
-SPACE = r'[ \t\r\n\f]'
-
-# w                       {s}*
-WHITESPACE = '(?:' + SPACE + r'*)'
-
-# url special chars
-URL_SPECIAL_CHARS = r'[!#$%&*-~]'
-
-# url chars               ({url_special_chars}|{nonascii}|{escape})*
-URL_CHARS = r'(?:%s|%s|%s)*' % (URL_SPECIAL_CHARS, NON_ASCII, ESCAPE)
-
-# url
-URL = r'url\(%s(%s|%s)%s\)' % (WHITESPACE, STRING, URL_CHARS, WHITESPACE)
-
-# comments
-# see http://www.w3.org/TR/CSS21/grammar.html
-COMMENT = r'/\*[^*]*\*+([^/*][^*]*\*+)*/'
-
-# {E}{M}             {return EMS;}
-# {E}{X}             {return EXS;}
-# {P}{X}             {return LENGTH;}
-# {C}{M}             {return LENGTH;}
-# {M}{M}             {return LENGTH;}
-# {I}{N}             {return LENGTH;}
-# {P}{T}             {return LENGTH;}
-# {P}{C}             {return LENGTH;}
-# {D}{E}{G}          {return ANGLE;}
-# {R}{A}{D}          {return ANGLE;}
-# {G}{R}{A}{D}       {return ANGLE;}
-# {M}{S}             {return TIME;}
-# {S}                {return TIME;}
-# {H}{Z}             {return FREQ;}
-# {K}{H}{Z}          {return FREQ;}
-# %                  {return PERCENTAGE;}
-UNIT = r'(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)'
-
-# {num}{UNIT|IDENT}                   {return NUMBER;}
-QUANTITY = '%s(?:%s%s|%s)?' % (NUM, WHITESPACE, UNIT, IDENT)
-
-# "<!--"                  {return CDO;}
-# "-->"                   {return CDC;}
-# "~="                    {return INCLUDES;}
-# "|="                    {return DASHMATCH;}
-# {w}"{"                  {return LBRACE;}
-# {w}"+"                  {return PLUS;}
-# {w}">"                  {return GREATER;}
-# {w}","                  {return COMMA;}
-PUNC =  r'<!--|-->|~=|\|=|[\{\+>,:;]'
index bd99845..dbe9698 100644 (file)
@@ -30,8 +30,8 @@ require_once __DIR__ . '/Maintenance.php';
 class DeleteEqualMessages extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Deletes all pages in the MediaWiki namespace that are equal to '
-                       . 'the default message";
+               $this->mDescription = 'Deletes all pages in the MediaWiki namespace that are equal to '
+                       . 'the default message';
                $this->addOption( 'delete', 'Actually delete the pages (default: dry run)' );
                $this->addOption( 'delete-talk', 'Don\'t leave orphaned talk pages behind during deletion' );
                $this->addOption( 'lang-code', 'Check for subpages of this language code (default: root '
@@ -138,10 +138,10 @@ class DeleteEqualMessages extends Maintenance {
                        return;
                }
 
-               $this->output( "\n{$messageInfo['relevantPages']} pages in the MediaWiki namespace ' .
-                       'override messages." );
-               $this->output( "\n{$messageInfo['equalPages']} pages are equal to the default message ' .
-                       '(+ {$messageInfo['equalPagesTalks']} talk pages).\n" );
+               $this->output( "\n{$messageInfo['relevantPages']} pages in the MediaWiki namespace "
+                       . "override messages." );
+               $this->output( "\n{$messageInfo['equalPages']} pages are equal to the default message "
+                       . "(+ {$messageInfo['equalPagesTalks']} talk pages).\n" );
 
                if ( !$doDelete ) {
                        $list = '';
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index fc72908..ad8b004 100644 (file)
@@ -750,6 +750,7 @@ bmwschema
 bmysql
 bname
 bodycontent
+bogo
 boldening
 bolding
 booksources
@@ -861,6 +862,7 @@ categorypage
 categoryviewer
 catids
 catlinks
+catmsg
 catpage
 catrope
 cattitles
@@ -1677,6 +1679,7 @@ geocoordinate
 geodata
 geosearch
 gerrit
+geshi
 getcookie
 getenv
 getheader
@@ -1810,8 +1813,8 @@ hit
 hitcount
 hitcounter
 hits
+hlist
 hmac
-hmtl
 hobby
 homelink
 hookaborted
@@ -2245,17 +2248,16 @@ logextract
 loggedin
 logid
 login
-loginend
 loginerror
 loginfo
 loginlanguagelinks
 loginlink
+loginout
 loginprompt
 loginreqlink
 loginreqpagetext
 loginreqtitle
 logins
-loginstart
 logitem
 loglink
 loglist
@@ -2454,6 +2456,7 @@ moodbar
 moredotdotdot
 morelinkstoimage
 morethan
+mouseup
 move
 movedarticleprotection
 moveddeleted
@@ -2600,6 +2603,7 @@ newpos
 newquery
 newrevid
 news
+newsectionheaderdefaultlevel
 newsectionlink
 newsectionsummary
 newset
@@ -2895,7 +2899,6 @@ numberofedits
 numberoffiles
 numberofpages
 numberofusers
-numberofviews
 numberofwatchingusers
 numedits
 numentries
@@ -4011,6 +4014,7 @@ test
 testclean
 testdata
 testmailuser
+teston
 testpass
 testrunner
 testswarm
@@ -4157,6 +4161,7 @@ transwiki
 troff
 true
 truespeed
+truncatedtext
 trustworthy
 truteq
 truthy
@@ -4264,6 +4269,7 @@ unseed
 unserialization
 unserialize
 unserialized
+unserializes
 unserializing
 unsetting
 unstub
@@ -4438,6 +4444,7 @@ viewdeleted
 viewhelppage
 viewmyprivateinfo
 viewmywatchlist
+viewport
 viewprevnext
 viewsource
 viewsourcelink
@@ -4613,6 +4620,7 @@ xml
 xmldoublequote
 xmlfm
 xmlimport
+xmlmeta
 xmlns
 xmlselect
 xor
index 28a0545..e4380a7 100644 (file)
@@ -44,6 +44,7 @@ if ( !$maintClass || !class_exists( $maintClass ) ) {
 }
 
 // Get an object to start us off
+/** @var Maintenance $maintenance */
 $maintenance = new $maintClass();
 
 // Basic sanity checks and such
@@ -55,8 +56,8 @@ $self = $maintenance->getName();
 
 # Start the autoloader, so that extensions can derive classes from core files
 require_once "$IP/includes/AutoLoader.php";
-# Stub the profiler
-require_once "$IP/includes/profiler/Profiler.php";
+# Grab profiling functions
+require_once "$IP/includes/profiler/ProfilerFunctions.php";
 
 # Start the profiler
 $wgProfiler = array();
@@ -89,6 +90,8 @@ if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
                $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
        }
 }
+
+$maintenance->setConfig( ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
 $maintenance->finalSetup();
 // Some last includes
 require_once "$IP/includes/Setup.php";
index 4b2ff71..d8bc3a4 100644 (file)
@@ -54,7 +54,7 @@ abstract class DumpIterator extends Maintenance {
                $this->checkOptions();
 
                if ( $this->hasOption( 'file' ) ) {
-                       $revision = new WikiRevision;
+                       $revision = new WikiRevision( $this->getConfig() );
 
                        $revision->setText( file_get_contents( $this->getOption( 'file' ) ) );
                        $revision->setTitle( Title::newFromText(
@@ -73,7 +73,7 @@ abstract class DumpIterator extends Maintenance {
                        $this->error( "Sorry, I don't support dump filenames yet. "
                                . "Use - and provide it on stdin on the meantime.", true );
                }
-               $importer = new WikiImporter( $source );
+               $importer = new WikiImporter( $source, $this->getConfig() );
 
                $importer->setRevisionCallback(
                        array( &$this, 'handleRevision' ) );
index 51f2cac..25ecc09 100644 (file)
@@ -54,18 +54,18 @@ if ( isset( $options['d'] ) ) {
        }
 }
 
-$useReadline = function_exists( 'readline_add_history' )
+$__useReadline = function_exists( 'readline_add_history' )
        && Maintenance::posix_isatty( 0 /*STDIN*/ );
 
-if ( $useReadline ) {
-       $historyFile = isset( $_ENV['HOME'] ) ?
+if ( $__useReadline ) {
+       $__historyFile = isset( $_ENV['HOME'] ) ?
                "{$_ENV['HOME']}/.mweval_history" : "$IP/maintenance/.mweval_history";
-       readline_read_history( $historyFile );
+       readline_read_history( $__historyFile );
 }
 
-$e = null; // PHP exception
-while ( ( $line = Maintenance::readconsole() ) !== false ) {
-       if ( $e && !preg_match( '/^(exit|die);?$/', $line ) ) {
+$__e = null; // PHP exception
+while ( ( $__line = Maintenance::readconsole() ) !== false ) {
+       if ( $__e && !preg_match( '/^(exit|die);?$/', $__line ) ) {
                // Internal state may be corrupted or fatals may occur later due
                // to some object not being set. Don't drop out of eval in case
                // lines were being pasted in (which would then get dumped to the shell).
@@ -73,23 +73,23 @@ while ( ( $line = Maintenance::readconsole() ) !== false ) {
                echo "Exception was thrown before; please restart eval.php\n";
                continue;
        }
-       if ( $useReadline ) {
-               readline_add_history( $line );
-               readline_write_history( $historyFile );
+       if ( $__useReadline ) {
+               readline_add_history( $__line );
+               readline_write_history( $__historyFile );
        }
        try {
-               $val = eval( $line . ";" );
-       } catch ( Exception $e ) {
-               echo "Caught exception " . get_class( $e ) .
-                       ": {$e->getMessage()}\n" . $e->getTraceAsString() . "\n";
+               $__val = eval( $__line . ";" );
+       } catch ( Exception $__e ) {
+               echo "Caught exception " . get_class( $__e ) .
+                       ": {$__e->getMessage()}\n" . $__e->getTraceAsString() . "\n";
                continue;
        }
-       if ( wfIsHHVM() || is_null( $val ) ) {
+       if ( wfIsHHVM() || is_null( $__val ) ) {
                echo "\n";
-       } elseif ( is_string( $val ) || is_numeric( $val ) ) {
-               echo "$val\n";
+       } elseif ( is_string( $__val ) || is_numeric( $__val ) ) {
+               echo "$__val\n";
        } else {
-               var_dump( $val );
+               var_dump( $__val );
        }
 }
 
index 36760d7..66e8da0 100644 (file)
@@ -163,36 +163,39 @@ class FindHooks extends Maintenance {
         * @return array Array of documented hooks
         */
        private function getHooksFromOnlineDoc() {
-               // All hooks
-               $allhookdata = Http::get(
-                       'http://www.mediawiki.org/w/api.php?action=query&list=categorymembers&'
-                       . 'cmtitle=Category:MediaWiki_hooks&cmlimit=500&format=php'
+               $allhooks = $this->getHooksFromOnlineDocCategory( 'MediaWiki_hooks' );
+               $removed = $this->getHooksFromOnlineDocCategory( 'Removed_hooks' );
+               return array_diff( $allhooks, $removed );
+       }
+
+       /**
+        * @param string $title
+        * @return array
+        */
+       private function getHooksFromOnlineDocCategory( $title ) {
+               $params = array(
+                       'action' => 'query',
+                       'list' => 'categorymembers',
+                       'cmtitle' => "Category:$title",
+                       'cmlimit' => 500,
+                       'format' => 'json',
+                       'continue' => '',
                );
-               $allhookdata = unserialize( $allhookdata );
-               $allhooks = array();
-               foreach ( $allhookdata['query']['categorymembers'] as $page ) {
-                       $found = preg_match( '/Manual\:Hooks\/([a-zA-Z0-9- :]+)/', $page['title'], $matches );
-                       if ( $found ) {
-                               $hook = str_replace( ' ', '_', $matches[1] );
-                               $allhooks[] = $hook;
+
+               $retval = array();
+               while ( true ) {
+                       $json = Http::get( wfAppendQuery( 'http://www.mediawiki.org/w/api.php', $params ) );
+                       $data = FormatJson::decode( $json, true );
+                       foreach ( $data['query']['categorymembers'] as $page ) {
+                               if ( preg_match( '/Manual\:Hooks\/([a-zA-Z0-9- :]+)/', $page['title'], $m ) ) {
+                                       $retval[] = str_replace( ' ', '_', $m[1] );
+                               }
                        }
-               }
-               // Removed hooks
-               $oldhookdata = Http::get(
-                       'http://www.mediawiki.org/w/api.php?action=query&list=categorymembers&'
-                       . 'cmtitle=Category:Removed_hooks&cmlimit=500&format=php'
-               );
-               $oldhookdata = unserialize( $oldhookdata );
-               $removed = array();
-               foreach ( $oldhookdata['query']['categorymembers'] as $page ) {
-                       $found = preg_match( '/Manual\:Hooks\/([a-zA-Z0-9- :]+)/', $page['title'], $matches );
-                       if ( $found ) {
-                               $hook = str_replace( ' ', '_', $matches[1] );
-                               $removed[] = $hook;
+                       if ( !isset( $data['continue'] ) ) {
+                               return $retval;
                        }
+                       $params = array_replace( $params, $data['continue'] );
                }
-
-               return array_diff( $allhooks, $removed );
        }
 
        /**
index 8c71699..5818ee2 100644 (file)
@@ -26,8 +26,10 @@ class FindMissingFiles extends Maintenance {
                parent::__construct();
 
                $this->mDescription = 'Find registered files with no corresponding file.';
-               $this->addOption( 'start', 'Starting file name', false, true );
-               $this->setBatchSize( 200 );
+               $this->addOption( 'start', 'Start after this file name', false, true );
+               $this->addOption( 'mtimeafter', 'Only include files changed since this time', false, true );
+               $this->addOption( 'mtimebefore', 'Only includes files changed before this time', false, true );
+               $this->setBatchSize( 300 );
        }
 
        function execute() {
@@ -37,20 +39,44 @@ class FindMissingFiles extends Maintenance {
                $dbr = $repo->getSlaveDB();
                $be = $repo->getBackend();
 
+               $mtime1 = $dbr->timestampOrNull( $this->getOption( 'mtimeafter', null ) );
+               $mtime2 = $dbr->timestampOrNull( $this->getOption( 'mtimebefore', null ) );
+
+               $joinTables = array();
+               $joinConds = array();
+               if ( $mtime1 || $mtime2 ) {
+                       $joinTables[] = 'page';
+                       $joinConds['page'] = array( 'INNER JOIN',
+                               array( 'page_title = img_name', 'page_namespace' => NS_FILE ) );
+                       $joinTables[] = 'logging';
+                       $on = array( 'log_page = page_id', 'log_type' => array( 'upload', 'move', 'delete' ) );
+                       if ( $mtime1 ) {
+                               $on[] = "log_timestamp > {$dbr->addQuotes($mtime1)}";
+                       }
+                       if ( $mtime2 ) {
+                               $on[] = "log_timestamp < {$dbr->addQuotes($mtime2)}";
+                       }
+                       $joinConds['logging'] = array( 'INNER JOIN', $on );
+               }
+
                do {
-                       $res = $dbr->select( 'image',
-                               'img_name',
-                               array( "img_name >= " . $dbr->addQuotes( $lastName ) ),
+                       $res = $dbr->select(
+                               array_merge( array( 'image' ), $joinTables ),
+                               array( 'name' => 'img_name' ),
+                               array( "img_name > " . $dbr->addQuotes( $lastName ) ),
                                __METHOD__,
-                               array( 'ORDER BY' => 'img_name', 'LIMIT' => $this->mBatchSize )
+                               // DISTINCT causes a pointless filesort
+                               array( 'ORDER BY' => 'name', 'GROUP BY' => 'name',
+                                       'LIMIT' => $this->mBatchSize ),
+                               $joinConds
                        );
 
                        // Check if any of these files are missing...
                        $pathsByName = array();
                        foreach ( $res as $row ) {
-                               $file = $repo->newFile( $row->img_name );
-                               $pathsByName[$row->img_name] = $file->getPath();
-                               $lastName = $row->img_name;
+                               $file = $repo->newFile( $row->name );
+                               $pathsByName[$row->name] = $file->getPath();
+                               $lastName = $row->name;
                        }
                        $be->preloadFileStat( array( 'srcs' => $pathsByName ) );
                        foreach ( $pathsByName as $path ) {
@@ -66,14 +92,22 @@ class FindMissingFiles extends Maintenance {
                                        array( 'oi_name' => array_keys( $pathsByName ) ),
                                        __METHOD__
                                );
+
+                               $checkPaths = array();
                                foreach ( $ores as $row ) {
                                        if ( !strlen( $row->oi_archive_name ) ) {
                                                continue; // broken row
                                        }
                                        $file = $repo->newFromArchiveName( $row->oi_name, $row->oi_archive_name );
-                                       $path = $file->getPath();
-                                       if ( $be->fileExists( array( 'src' => $path ) ) === false ) {
-                                               $this->output( "$path\n" );
+                                       $checkPaths[] = $file->getPath();
+                               }
+
+                               foreach ( array_chunk( $checkPaths, $this->mBatchSize ) as $paths ) {
+                                       $be->preloadFileStat( array( 'srcs' => $paths ) );
+                                       foreach ( $paths as $path ) {
+                                               if ( $be->fileExists( array( 'src' => $path ) ) === false ) {
+                                                       $this->output( "$path\n" );
+                                               }
                                        }
                                }
                        }
index 1930a22..12711ea 100644 (file)
@@ -181,7 +181,14 @@ class GenerateSitemap extends Maintenance {
                $this->setNamespacePriorities();
                $this->url_limit = 50000;
                $this->size_limit = pow( 2, 20 ) * 10;
-               $this->fspath = self::init_path( $this->getOption( 'fspath', getcwd() ) );
+
+               # Create directory if needed
+               $fspath = $this->getOption( 'fspath', getcwd() );
+               if ( !wfMkdirParents( $fspath, null, __METHOD__ ) ) {
+                       $this->error( "Can not create directory $fspath.", 1 );
+               }
+
+               $this->fspath = realpath( $fspath ) . DIRECTORY_SEPARATOR;
                $this->urlpath = $this->getOption( 'urlpath', "" );
                if ( $this->urlpath !== "" && substr( $this->urlpath, -1 ) !== '/' ) {
                        $this->urlpath .= '/';
@@ -238,20 +245,6 @@ class GenerateSitemap extends Maintenance {
                }
        }
 
-       /**
-        * Create directory if it does not exist and return pathname with a trailing slash
-        * @param string $fspath
-        * @return null|string
-        */
-       private static function init_path( $fspath ) {
-               # Create directory if needed
-               if ( $fspath && !is_dir( $fspath ) ) {
-                       wfMkdirParents( $fspath, null, __METHOD__ ) or die( "Can not create directory $fspath.\n" );
-               }
-
-               return realpath( $fspath ) . DIRECTORY_SEPARATOR;
-       }
-
        /**
         * Generate a one-dimensional array of existing namespaces
         */
index 1f75bcc..ea8c84b 100644 (file)
@@ -270,7 +270,7 @@ TEXT;
                $this->startTime = microtime( true );
 
                $source = new ImportStreamSource( $handle );
-               $importer = new WikiImporter( $source );
+               $importer = new WikiImporter( $source, $this->getConfig() );
 
                if ( $this->hasOption( 'debug' ) ) {
                        $importer->setDebug( true );
index 7705ec9..e67d077 100644 (file)
@@ -70,33 +70,40 @@ class ImportSiteScripts extends Maintenance {
        protected function fetchScriptList() {
                $data = array(
                        'action' => 'query',
-                       'format' => 'php', //'json',
+                       'format' => 'json',
                        'list' => 'allpages',
                        'apnamespace' => '8',
                        'aplimit' => '500',
+                       'continue' => '',
                );
                $baseUrl = $this->getArg( 0 );
                $pages = array();
 
-               do {
+               while ( true ) {
                        $url = wfAppendQuery( $baseUrl, $data );
                        $strResult = Http::get( $url );
-                       //$result = FormatJson::decode( $strResult ); // Still broken
-                       $result = unserialize( $strResult );
+                       $result = FormatJson::decode( $strResult, true );
 
-                       if ( !empty( $result['query']['allpages'] ) ) {
-                               foreach ( $result['query']['allpages'] as $page ) {
-                                       if ( substr( $page['title'], -3 ) === '.js' ) {
-                                               strtok( $page['title'], ':' );
-                                               $pages[] = strtok( '' );
-                                       }
+                       $page = null;
+                       foreach ( $result['query']['allpages'] as $page ) {
+                               if ( substr( $page['title'], -3 ) === '.js' ) {
+                                       strtok( $page['title'], ':' );
+                                       $pages[] = strtok( '' );
                                }
                        }
-                       if ( !empty( $result['query-continue'] ) ) {
-                               $data['apfrom'] = $result['query-continue']['allpages']['apfrom'];
-                               $this->output( "Fetching new batch from {$data['apfrom']}\n" );
+
+                       if ( $page !== null ) {
+                               $this->output( "Fetched list up to {$page['title']}\n" );
+                       }
+
+                       if ( isset( $result['continue'] ) ) { // >= 1.21
+                               $data = array_replace( $data, $result['continue'] );
+                       } elseif ( isset( $result['query-continue']['allpages'] ) ) { // <= 1.20
+                               $data = array_replace( $data, $result['query-continue']['allpages'] );
+                       } else {
+                               break;
                        }
-               } while ( isset( $result['query-continue'] ) );
+               }
 
                return $pages;
        }
index 49e0e9d..cac33ec 100644 (file)
@@ -34,11 +34,7 @@ class InitSiteStats extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Re-initialise the site statistics tables";
-               $this->addOption(
-                       'update',
-                       'Update the existing statistics (preserves the ss_total_views field)'
-               );
-               $this->addOption( 'noviews', "Don't update the page view counter" );
+               $this->addOption( 'update', 'Update the existing statistics' );
                $this->addOption( 'active', 'Also update active users count' );
                $this->addOption( 'use-master', 'Count using the master database' );
        }
@@ -63,12 +59,6 @@ class InitSiteStats extends Maintenance {
                $image = $counter->files();
                $this->output( "{$image}\n" );
 
-               if ( !$this->hasOption( 'noviews' ) ) {
-                       $this->output( "Counting total page views..." );
-                       $views = $counter->views();
-                       $this->output( "{$views}\n" );
-               }
-
                if ( $this->hasOption( 'update' ) ) {
                        $this->output( "\nUpdating site statistics..." );
                        $counter->refresh();
index 2aff988..bf0e07f 100644 (file)
@@ -66,7 +66,7 @@ class SeeTag < CommonTag
     <<-EOHTML
       <h3 class="pa">Related</h3>
       <ul>
-      #{ context[@tagname].map {|tag| tag[:doc] }.join("\n") }
+      #{ context[@tagname].map { |tag| tag[:doc] }.join("\n") }
       </ul>
     EOHTML
   end
index d6163bd..145749a 100644 (file)
@@ -13,7 +13,8 @@
                                        "mw.html",
                                        "mw.html.Cdata",
                                        "mw.html.Raw",
-                                       "mw.hook"
+                                       "mw.hook",
+                                       "mw.template"
                                ]
                        },
                        {
index e97f292..3a74804 100644 (file)
@@ -17,6 +17,7 @@
                "../../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",
index db6c315..973cf7b 100644 (file)
@@ -48,7 +48,7 @@ class GenerateCollationData extends Maintenance {
         * Important tertiary weights from UTS #10 section 7.2
         */
        const NORMAL_UPPERCASE = 0x08;
-       const NORMAL_HIRAGANA = 0X0E;
+       const NORMAL_HIRAGANA = 0x0E;
 
        public function __construct() {
                parent::__construct();
index 713753f..a27a772 100644 (file)
@@ -103,10 +103,10 @@ class MoveBatch extends Maintenance {
 
                        $this->output( $source->getPrefixedText() . ' --> ' . $dest->getPrefixedText() );
                        $dbw->begin( __METHOD__ );
-                       $err = $source->moveTo( $dest, false, $reason, !$noredirects );
-                       if ( $err !== true ) {
-                               $msg = array_shift( $err[0] );
-                               $this->output( "\nFAILED: " . wfMessage( $msg, $err[0] )->text() );
+                       $mp = new MovePage( $source, $dest );
+                       $status = $mp->move( $wgUser, $reason, !$noredirects );
+                       if ( !$status->isOK() ) {
+                               $this->output( "\nFAILED: " . $status->getWikiText() );
                        }
                        $dbw->commit( __METHOD__ );
                        $this->output( "\n" );
index c80981b..0cc7bde 100644 (file)
@@ -16,8 +16,33 @@ if ( PHP_SAPI != 'cli' ) {
 }
 
 $source = file_get_contents( $argv[1] );
-$regexp = '#\@var\s+([^\s]+)([^/]+)/\s+(var|public|protected|private)\s+(\$[^\s;=]+)#';
-$replac = '${2} */ ${3} ${1} ${4}';
+$regexp = '#'
+       . '\@var'
+       . '\s+'
+       // Type hint
+       . '([^\s]+)'
+       . '\s+'
+       // Any text or line(s) between type hint and '/' closing the comment
+       // (includes the star of "*/"). Descriptions containing a slash
+       // are not supported. Those will have to to be rewritten to have their
+       // description *before* the @var:
+       // /**
+       //  * Description with / in it.
+       //  * @var array
+       //  */
+       // instead of:
+       // /**
+       //  * @var array Description with / in it.
+       //  */
+       . '([^/]+)'
+       . '/'
+       . '\s+'
+       . '(var|public|protected|private)'
+       . '\s+'
+       // Variable name
+       . '(\$[^\s;=]+)'
+       . '#';
+$replac = '${2}/ ${3} ${1} ${4}';
 $source = preg_replace( $regexp, $replac, $source );
 
 echo $source;
index 1e0fa40..36be16e 100644 (file)
@@ -88,7 +88,7 @@ CREATE INDEX &mw_prefix.page_i03 ON &mw_prefix.page (page_is_redirect, page_name
 
 -- Create a dummy page to satisfy fk contraints especially with revisions
 INSERT INTO &mw_prefix.page
-  VALUES (0, 0, ' ', NULL, 0, 0, 0, 0, current_timestamp, NULL, 0, 0, NULL);
+  VALUES (0, 0, ' ', NULL, 0, 0, 0, 0, current_timestamp, NULL, 0, 0, NULL, NULL);
 
 /*$mw$*/
 CREATE TRIGGER &mw_prefix.page_set_random BEFORE INSERT ON &mw_prefix.page
diff --git a/maintenance/oracle/update-keys.sql b/maintenance/oracle/update-keys.sql
new file mode 100644 (file)
index 0000000..7761d0c
--- /dev/null
@@ -0,0 +1,29 @@
+-- SQL to insert update keys into the initial tables after a
+-- fresh installation of MediaWiki's database.
+-- This is read and executed by the install script; you should
+-- not have to run it by itself unless doing a manual install.
+-- Insert keys here if either the unnecessary would cause heavy
+-- processing or could potentially cause trouble by lowering field
+-- sizes, adding constraints, etc.
+-- When adjusting field sizes, it is recommended removing old
+-- patches but to play safe, update keys should also inserted here.
+
+-- The /*_*/ comments in this and other files are
+-- replaced with the defined table prefix by the installer
+-- and updater scripts. If you are installing or running
+-- updates manually, you will need to manually insert the
+-- table prefix if any when running these scripts.
+--
+
+INSERT INTO /*_*/updatelog (ul_key, ul_value)
+       VALUES( 'filearchive-fa_major_mime-patch-fa_major_mime-chemical.sql', null );
+INSERT INTO /*_*/updatelog (ul_key, ul_value)
+       VALUES( 'image-img_major_mime-patch-img_major_mime-chemical.sql', null );
+INSERT INTO /*_*/updatelog (ul_key, ul_value)
+       VALUES( 'oldimage-oi_major_mime-patch-oi_major_mime-chemical.sql', null );
+INSERT INTO /*_*/updatelog (ul_key, ul_value)
+       VALUES( 'user_groups-ug_group-patch-ug_group-length-increase-255.sql', null );
+INSERT INTO /*_*/updatelog (ul_key, ul_value)
+       VALUES( 'user_former_groups-ufg_group-patch-ufg_group-length-increase-255.sql', null );
+INSERT INTO /*_*/updatelog (ul_key, ul_value)
+       VALUES( 'user_properties-up_property-patch-up_property.sql', null );
diff --git a/maintenance/populateBloomCache.php b/maintenance/populateBloomCache.php
new file mode 100644 (file)
index 0000000..40ad5fc
--- /dev/null
@@ -0,0 +1,78 @@
+<?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;
old mode 100644 (file)
new mode 100755 (executable)
index 9155623..cb55f0f 100644 (file)
@@ -159,6 +159,7 @@ class PPFuzzTest {
 
        /**
         * @param Title $title
+        * @return array
         */
        function templateHook( $title ) {
                $titleText = $title->getPrefixedDBkey();
diff --git a/maintenance/purgeOldText.inc b/maintenance/purgeOldText.inc
deleted file mode 100644 (file)
index 5093cb3..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-/**
- * Support functions for cleaning up redundant text records
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write 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
- * @author Rob Church <robchur@gmail.com>
- */
-
-/**
- * @param bool $delete
- */
-function PurgeRedundantText( $delete = false ) {
-
-       # Data should come off the master, wrapped in a transaction
-       $dbw = wfGetDB( DB_MASTER );
-       $dbw->begin( __METHOD__ );
-
-       $tbl_arc = $dbw->tableName( 'archive' );
-       $tbl_rev = $dbw->tableName( 'revision' );
-       $tbl_txt = $dbw->tableName( 'text' );
-
-       # Get "active" text records from the revisions table
-       echo "Searching for active text records in revisions table...";
-       $res = $dbw->query( "SELECT DISTINCT rev_text_id FROM $tbl_rev" );
-       foreach ( $res as $row ) {
-               $cur[] = $row->rev_text_id;
-       }
-       echo "done.\n";
-
-       # Get "active" text records from the archive table
-       echo "Searching for active text records in archive table...";
-       $res = $dbw->query( "SELECT DISTINCT ar_text_id FROM $tbl_arc" );
-       $cur = array();
-       foreach ( $res as $row ) {
-               $cur[] = $row->ar_text_id;
-       }
-       echo "done.\n";
-
-       # Get the IDs of all text records not in these sets
-       echo "Searching for inactive text records...";
-       $set = implode( ', ', $cur );
-       $res = $dbw->query( "SELECT old_id FROM $tbl_txt WHERE old_id NOT IN ( $set )" );
-       $old = array();
-       foreach ( $res as $row ) {
-               $old[] = $row->old_id;
-       }
-       echo "done.\n";
-
-       # Inform the user of what we're going to do
-       $count = count( $old );
-       echo "$count inactive items found.\n";
-
-       # Delete as appropriate
-       if ( $delete && $count ) {
-               echo "Deleting...";
-               $set = implode( ', ', $old );
-               $dbw->query( "DELETE FROM $tbl_txt WHERE old_id IN ( $set )" );
-               echo "done.\n";
-       }
-
-       # Done
-       $dbw->commit( __METHOD__ );
-}
index 169f512..2218a5e 100644 (file)
@@ -61,7 +61,7 @@ class DumpRenderer extends Maintenance {
                }
 
                $source = new ImportStreamSource( $this->getStdin() );
-               $importer = new WikiImporter( $source );
+               $importer = new WikiImporter( $source, $this->getConfig() );
 
                $importer->setRevisionCallback(
                        array( &$this, 'handleRevision' ) );
index 1b35292..651f211 100755 (executable)
@@ -71,8 +71,8 @@ NEWCHANGES=$(git log $OLDHASH.. --oneline --no-merges --reverse --color=never)
 NEWCHANGESDISPLAY=$(git log $OLDHASH.. --oneline --no-merges --reverse --color=always)
 
 # Copy files
-# - Exclude the default non-svg stylesheet
-rsync --recursive --delete --force --exclude 'oojs-ui.css' --exclude 'oojs-ui*.rtl.css' ./dist/ "$TARGET_REPO/$TARGET_DIR" || exit 1
+# - Exclude the minimised distribution files and RTL sheets for non-CSSJanus environments
+rsync --recursive --delete --force --exclude 'oojs-ui*.min.*' --exclude 'oojs-ui*.rtl.css' ./dist/ "$TARGET_REPO/$TARGET_DIR" || exit 1
 
 # Read the new version
 NEWVERSION=$(oojsuiversion)
index b8dc554..a9f7d8b 100644 (file)
@@ -38,16 +38,19 @@ class ShowJobs extends Maintenance {
                parent::__construct();
                $this->mDescription = "Show number of jobs waiting in master database";
                $this->addOption( 'group', 'Show number of jobs per job type' );
-               $this->addOption(
-                       'list',
-                       'Show a complete list of all jobs in a machine-readable format, instead of statistics'
-               );
+               $this->addOption( 'list',
+                       'Show a list of all jobs in a machine-readable format, instead of statistics' );
+               $this->addOption( 'type', 'Only show/count jobs of a given type', false, true );
        }
 
        public function execute() {
+               $filterType = $this->getOption( 'type', '' );
                $group = JobQueueGroup::singleton();
                if ( $this->hasOption( 'list' ) ) {
                        foreach ( $group->getQueueTypes() as $type ) {
+                               if ( $filterType != '' && $type != $filterType ) {
+                                       continue;
+                               }
                                $queue = $group->get( $type );
                                foreach ( $queue->getAllQueuedJobs() as $job ) {
                                        $this->output( $job->toString() . " status=unclaimed\n" );
@@ -58,6 +61,9 @@ class ShowJobs extends Maintenance {
                        }
                } elseif ( $this->hasOption( 'group' ) ) {
                        foreach ( $group->getQueueTypes() as $type ) {
+                               if ( $filterType != '' && $type != $filterType ) {
+                                       continue;
+                               }
                                $queue = $group->get( $type );
                                $delayed = $queue->getDelayedCount();
                                $pending = $queue->getSize();
@@ -75,6 +81,9 @@ class ShowJobs extends Maintenance {
                } else {
                        $count = 0;
                        foreach ( $group->getQueueTypes() as $type ) {
+                               if ( $filterType != '' && $type != $filterType ) {
+                                       continue;
+                               }
                                $count += $group->get( $type )->getSize();
                        }
                        $this->output( "$count\n" );
index 374a66e..370d14e 100644 (file)
@@ -44,7 +44,6 @@ class ShowSiteStats extends Maintenance {
 
        public function execute() {
                $fields = array(
-                       'ss_total_views' => 'Total views',
                        'ss_total_edits' => 'Total edits',
                        'ss_good_articles' => 'Number of articles',
                        'ss_total_pages' => 'Total pages',
index afa3ef7..886e3f1 100644 (file)
@@ -39,7 +39,8 @@ class MwSql extends Maintenance {
        }
 
        public function execute() {
-               $wiki = $this->getOption( 'wikidb' ) ?: false;
+               // We wan't to allow "" for the wikidb, meaning don't call select_db()
+               $wiki = $this->hasOption( 'wikidb' ) ? $this->getOption( 'wikidb' ) : false;
                // Get the appropriate load balancer (for this wiki)
                if ( $this->hasOption( 'cluster' ) ) {
                        $lb = wfGetLBFactory()->getExternalLB( $this->getOption( 'cluster' ), $wiki );
index 0f99662..c0f6c7b 100644 (file)
@@ -39,6 +39,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 /**
  * Maintenance script to do various checks on external storage.
  *
+ * @fixme this should extend the base Maintenance class
  * @ingroup Maintenance ExternalStorage
  */
 class CheckStorage {
@@ -466,7 +467,10 @@ class CheckStorage {
                $dbw->ping();
 
                $source = new ImportStreamSource( $file );
-               $importer = new WikiImporter( $source );
+               $importer = new WikiImporter(
+                       $source,
+                       ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
+               );
                $importer->setRevisionCallback( array( &$this, 'importRevision' ) );
                $importer->doImport();
        }
old mode 100644 (file)
new mode 100755 (executable)
index d5ef924..dfbb67e 100644 (file)
@@ -20,7 +20,7 @@
 -- table prefix if any when running these scripts.
 --
 
-INSERT INTO /*_*/updatelog
+INSERT IGNORE INTO /*_*/updatelog
        SELECT 'filearchive-fa_major_mime-patch-fa_major_mime-chemical.sql' AS ul_key, null as ul_value
        UNION SELECT 'image-img_major_mime-patch-img_major_mime-chemical.sql', null
        UNION SELECT 'oldimage-oi_major_mime-patch-oi_major_mime-chemical.sql', null
index 046d73c..d1d17cf 100755 (executable)
@@ -26,7 +26,7 @@
  * @ingroup Maintenance
  */
 
-if ( !function_exists( 'version_compare' ) || ( version_compare( PHP_VERSION, '5.3.2' ) < 0 ) ) {
+if ( !function_exists( 'version_compare' ) || ( version_compare( PHP_VERSION, '5.3.3' ) < 0 ) ) {
        require dirname( __FILE__ ) . '/../includes/PHPVersionError.php';
        wfPHPVersionError( 'cli' );
 }
@@ -178,11 +178,12 @@ class UpdateMediaWiki extends Maintenance {
                        }
                }
 
+               $updater->setFileAccess();
                if ( !$this->hasOption( 'nopurge' ) ) {
                        $updater->purgeCache();
                }
-               $time2 = new MWTimestamp();
 
+               $time2 = new MWTimestamp();
                $timeDiff = $time2->diff( $time1 );
                $this->output( "\nDone in " . $timeDiff->format( "%i:%S" ) . ".\n" );
        }
index 5bee7f9..342ffba 100644 (file)
@@ -221,6 +221,7 @@ TEXT;
         * assuming an ordering of cl_to, cl_type, cl_from
         * @param stdClass $row
         * @param DatabaseBase $dbw
+        * @return string
         */
        function getBatchCondition( $row, $dbw ) {
                $fields = array( 'cl_to', 'cl_type', 'cl_from' );
index 6164282..d67ef6b 100644 (file)
@@ -81,16 +81,16 @@ class UpdateSpecialPages extends Maintenance {
                        if ( !$this->hasOption( 'only' ) || $this->getOption( 'only' ) == $queryPage->getName() ) {
                                $this->output( sprintf( '%-30s [QueryPage] ', $special ) );
                                if ( $queryPage->isExpensive() ) {
-                                       $t1 = explode( ' ', microtime() );
+                                       $t1 = microtime( true );
                                        # Do the query
                                        $num = $queryPage->recache( $limit === null ? $wgQueryCacheLimit : $limit );
-                                       $t2 = explode( ' ', microtime() );
+                                       $t2 = microtime( true );
                                        if ( $num === false ) {
                                                $this->output( "FAILED: database error\n" );
                                        } else {
                                                $this->output( "got $num rows in " );
 
-                                               $elapsed = ( $t2[0] - $t1[0] ) + ( $t2[1] - $t1[1] );
+                                               $elapsed = $t2 - $t1;
                                                $hours = intval( $elapsed / 3600 );
                                                $minutes = intval( $elapsed % 3600 / 60 );
                                                $seconds = $elapsed - $hours * 3600 - $minutes * 60;
@@ -139,12 +139,12 @@ class UpdateSpecialPages extends Maintenance {
                                        continue;
                                }
                                $this->output( sprintf( '%-30s [callback] ', $special ) );
-                               $t1 = explode( ' ', microtime() );
+                               $t1 = microtime( true );
                                call_user_func( $call, $dbw );
-                               $t2 = explode( ' ', microtime() );
+                               $t2 = microtime( true );
 
                                $this->output( "completed in " );
-                               $elapsed = ( $t2[0] - $t1[0] ) + ( $t2[1] - $t1[1] );
+                               $elapsed = $t2 - $t1;
                                $hours = intval( $elapsed / 3600 );
                                $minutes = intval( $elapsed % 3600 / 60 );
                                $seconds = $elapsed - $hours * 3600 - $minutes * 60;
index 2886e08..cf17aef 100644 (file)
@@ -9,7 +9,7 @@
                                .replace( /__+/g, '_' )
                                .replace( /^_+/, '' )
                                .replace( /_+$/, '' );
-                       value = value.substr( 0, 1 ).toUpperCase() + value.substr( 1 );
+                       value = value.charAt( 0 ).toUpperCase() + value.slice( 1 );
                        $label.text( labelText.replace( '$1', value ) );
                }
 
index 8c42118..c6bd868 100644 (file)
Binary files a/mw-config/images/installer-logo.png and b/mw-config/images/installer-logo.png differ
index a6cebc3..ed3e7f4 100644 (file)
@@ -21,7 +21,7 @@
  */
 
 // Bail if PHP is too low
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
+if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.3' ) < 0 ) {
        // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require dirname( dirname( __FILE__ ) ) . '/includes/PHPVersionError.php';
        wfPHPVersionError( 'mw-config/index.php' );
index 99e1e4f..e53ed54 100644 (file)
@@ -83,33 +83,28 @@ return array(
         */
        'mediawiki.skinning.elements' => array(
                'styles' => array(
-                       'commonElements.css' => array( 'media' => 'screen' ),
+                       'resources/src/mediawiki.skinning/elements.css' => array( 'media' => 'screen' ),
                ),
-               'remoteSkinPath' => 'common',
-               'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/common',
        ),
        'mediawiki.skinning.content' => array(
                'styles' => array(
-                       'commonElements.css' => array( 'media' => 'screen' ),
-                       'commonContent.css' => array( 'media' => 'screen' ),
+                       'resources/src/mediawiki.skinning/elements.css' => array( 'media' => 'screen' ),
+                       'resources/src/mediawiki.skinning/content.css' => array( 'media' => 'screen' ),
                ),
-               'remoteSkinPath' => 'common',
-               'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/common',
        ),
        'mediawiki.skinning.interface' => array(
+               'class' => 'ResourceLoaderSkinModule',
                // Used in the web installer. Test it after modifying this definition!
                'styles' => array(
-                       'commonElements.css' => array( 'media' => 'screen' ),
-                       'commonContent.css' => array( 'media' => 'screen' ),
-                       'commonInterface.css' => array( 'media' => 'screen' ),
+                       'resources/src/mediawiki.skinning/elements.css' => array( 'media' => 'screen' ),
+                       'resources/src/mediawiki.skinning/content.css' => array( 'media' => 'screen' ),
+                       'resources/src/mediawiki.skinning/interface.css' => array( 'media' => 'screen' ),
                ),
-               'remoteSkinPath' => 'common',
-               'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/common',
        ),
 
        'mediawiki.skinning.content.parsoid' => array(
                // Style Parsoid HTML+RDFa output consistent with wikitext from PHP parser
-               // with the commonInterface.css styles; skinStyles should be used if your
+               // with the interface.css styles; skinStyles should be used if your
                // skin over-rides common content styling.
                'skinStyles' => array(
                        'default' => 'resources/src/mediawiki.skinning/content.parsoid.less',
@@ -117,6 +112,12 @@ return array(
                'targets' => array( 'desktop', 'mobile' ),
        ),
 
+       'mediawiki.skinning.content.externallinks' => array(
+               'styles' => array(
+                       'resources/src/mediawiki.skinning/content.externallinks.css' => array( 'media' => 'screen' ),
+               ),
+       ),
+
        /* jQuery */
 
        'jquery' => array(
@@ -200,6 +201,7 @@ return array(
                        'confirmable-confirm',
                        'confirmable-yes',
                        'confirmable-no',
+                       'word-separator',
                ),
                'styles' => 'resources/src/jquery/jquery.confirmable.css',
                'dependencies' => 'mediawiki.jqueryMsg',
@@ -243,14 +245,6 @@ return array(
        'jquery.hoverIntent' => array(
                'scripts' => 'resources/lib/jquery/jquery.hoverIntent.js',
        ),
-       'jquery.json' => array(
-               // @deprecated since 1.24: Use the 'json' module and global JSON object instead.
-               'scripts' => array(
-                       'resources/lib/jquery/jquery.json.js',
-                       'resources/src/jquery.json-deprecate.js',
-               ),
-               'targets' => array( 'mobile', 'desktop' ),
-       ),
        'jquery.localize' => array(
                'scripts' => 'resources/src/jquery/jquery.localize.js',
        ),
@@ -691,82 +685,82 @@ return array(
        'moment' => array(
                'scripts' => 'resources/lib/moment/moment.js',
                'languageScripts' => array(
-                       'af' => 'resources/lib/moment/lang/af.js',
-                       'ar' => 'resources/lib/moment/lang/ar.js',
-                       'ar-ma' => 'resources/lib/moment/lang/ar-ma.js',
-                       'ar-sa' => 'resources/lib/moment/lang/ar-sa.js',
-                       'az' => 'resources/lib/moment/lang/az.js',
-                       'be' => 'resources/lib/moment/lang/be.js',
-                       'bg' => 'resources/lib/moment/lang/bg.js',
-                       'bn' => 'resources/lib/moment/lang/bn.js',
-                       'bo' => 'resources/lib/moment/lang/bo.js',
-                       'br' => 'resources/lib/moment/lang/br.js',
-                       'bs' => 'resources/lib/moment/lang/bs.js',
-                       'ca' => 'resources/lib/moment/lang/ca.js',
-                       'cs' => 'resources/lib/moment/lang/cs.js',
-                       'cv' => 'resources/lib/moment/lang/cv.js',
-                       'cy' => 'resources/lib/moment/lang/cy.js',
-                       'da' => 'resources/lib/moment/lang/da.js',
-                       'de' => 'resources/lib/moment/lang/de.js',
-                       'de-at' => 'resources/lib/moment/lang/de-at.js',
-                       'el' => 'resources/lib/moment/lang/el.js',
-                       'en-au' => 'resources/lib/moment/lang/en-au.js',
-                       'en-ca' => 'resources/lib/moment/lang/en-ca.js',
-                       'en-gb' => 'resources/lib/moment/lang/en-gb.js',
-                       'eo' => 'resources/lib/moment/lang/eo.js',
-                       'es' => 'resources/lib/moment/lang/es.js',
-                       'et' => 'resources/lib/moment/lang/et.js',
-                       'eu' => 'resources/lib/moment/lang/eu.js',
-                       'fa' => 'resources/lib/moment/lang/fa.js',
-                       'fi' => 'resources/lib/moment/lang/fi.js',
-                       'fo' => 'resources/lib/moment/lang/fo.js',
-                       'fr-ca' => 'resources/lib/moment/lang/fr-ca.js',
-                       'fr' => 'resources/lib/moment/lang/fr.js',
-                       'gl' => 'resources/lib/moment/lang/gl.js',
-                       'he' => 'resources/lib/moment/lang/he.js',
-                       'hi' => 'resources/lib/moment/lang/hi.js',
-                       'hr' => 'resources/lib/moment/lang/hr.js',
-                       'hu' => 'resources/lib/moment/lang/hu.js',
-                       'hy-am' => 'resources/lib/moment/lang/hy-am.js',
-                       'id' => 'resources/lib/moment/lang/id.js',
-                       'is' => 'resources/lib/moment/lang/is.js',
-                       'it' => 'resources/lib/moment/lang/it.js',
-                       'ja' => 'resources/lib/moment/lang/ja.js',
-                       'ka' => 'resources/lib/moment/lang/ka.js',
-                       'ko' => 'resources/lib/moment/lang/ko.js',
-                       'lt' => 'resources/lib/moment/lang/lt.js',
-                       'lv' => 'resources/lib/moment/lang/lv.js',
-                       'mk' => 'resources/lib/moment/lang/mk.js',
-                       'ml' => 'resources/lib/moment/lang/ml.js',
-                       'mr' => 'resources/lib/moment/lang/mr.js',
-                       'ms-my' => 'resources/lib/moment/lang/ms-my.js',
-                       'my' => 'resources/lib/moment/lang/my.js',
-                       'nb' => 'resources/lib/moment/lang/nb.js',
-                       'ne' => 'resources/lib/moment/lang/ne.js',
-                       'nl' => 'resources/lib/moment/lang/nl.js',
-                       'nn' => 'resources/lib/moment/lang/nn.js',
-                       'pl' => 'resources/lib/moment/lang/pl.js',
-                       'pt-br' => 'resources/lib/moment/lang/pt-br.js',
-                       'pt' => 'resources/lib/moment/lang/pt.js',
-                       'ro' => 'resources/lib/moment/lang/ro.js',
-                       'ru' => 'resources/lib/moment/lang/ru.js',
-                       'sk' => 'resources/lib/moment/lang/sk.js',
-                       'sl' => 'resources/lib/moment/lang/sl.js',
-                       'sq' => 'resources/lib/moment/lang/sq.js',
-                       'sr' => 'resources/lib/moment/lang/sr.js',
-                       'sr-ec' => 'resources/lib/moment/lang/sr-cyrl.js',
-                       'sv' => 'resources/lib/moment/lang/sv.js',
-                       'ta' => 'resources/lib/moment/lang/ta.js',
-                       'th' => 'resources/lib/moment/lang/th.js',
-                       'tl-ph' => 'resources/lib/moment/lang/tl-ph.js',
-                       'tr' => 'resources/lib/moment/lang/tr.js',
-                       'tzm' => 'resources/lib/moment/lang/tzm.js',
-                       'tzm-latn' => 'resources/lib/moment/lang/tzm-latn.js',
-                       'uk' => 'resources/lib/moment/lang/uk.js',
-                       'uz' => 'resources/lib/moment/lang/uz.js',
-                       'vi' => 'resources/lib/moment/lang/vi.js',
-                       'zh-cn' => 'resources/lib/moment/lang/zh-cn.js',
-                       'zh-tw' => 'resources/lib/moment/lang/zh-tw.js',
+                       'af' => 'resources/lib/moment/locale/af.js',
+                       'ar' => 'resources/lib/moment/locale/ar.js',
+                       'ar-ma' => 'resources/lib/moment/locale/ar-ma.js',
+                       'ar-sa' => 'resources/lib/moment/locale/ar-sa.js',
+                       'az' => 'resources/lib/moment/locale/az.js',
+                       'be' => 'resources/lib/moment/locale/be.js',
+                       'bg' => 'resources/lib/moment/locale/bg.js',
+                       'bn' => 'resources/lib/moment/locale/bn.js',
+                       'bo' => 'resources/lib/moment/locale/bo.js',
+                       'br' => 'resources/lib/moment/locale/br.js',
+                       'bs' => 'resources/lib/moment/locale/bs.js',
+                       'ca' => 'resources/lib/moment/locale/ca.js',
+                       'cs' => 'resources/lib/moment/locale/cs.js',
+                       'cv' => 'resources/lib/moment/locale/cv.js',
+                       'cy' => 'resources/lib/moment/locale/cy.js',
+                       'da' => 'resources/lib/moment/locale/da.js',
+                       'de' => 'resources/lib/moment/locale/de.js',
+                       'de-at' => 'resources/lib/moment/locale/de-at.js',
+                       'el' => 'resources/lib/moment/locale/el.js',
+                       'en-au' => 'resources/lib/moment/locale/en-au.js',
+                       'en-ca' => 'resources/lib/moment/locale/en-ca.js',
+                       'en-gb' => 'resources/lib/moment/locale/en-gb.js',
+                       'eo' => 'resources/lib/moment/locale/eo.js',
+                       'es' => 'resources/lib/moment/locale/es.js',
+                       'et' => 'resources/lib/moment/locale/et.js',
+                       'eu' => 'resources/lib/moment/locale/eu.js',
+                       'fa' => 'resources/lib/moment/locale/fa.js',
+                       'fi' => 'resources/lib/moment/locale/fi.js',
+                       'fo' => 'resources/lib/moment/locale/fo.js',
+                       'fr-ca' => 'resources/lib/moment/locale/fr-ca.js',
+                       'fr' => 'resources/lib/moment/locale/fr.js',
+                       'gl' => 'resources/lib/moment/locale/gl.js',
+                       'he' => 'resources/lib/moment/locale/he.js',
+                       'hi' => 'resources/lib/moment/locale/hi.js',
+                       'hr' => 'resources/lib/moment/locale/hr.js',
+                       'hu' => 'resources/lib/moment/locale/hu.js',
+                       'hy-am' => 'resources/lib/moment/locale/hy-am.js',
+                       'id' => 'resources/lib/moment/locale/id.js',
+                       'is' => 'resources/lib/moment/locale/is.js',
+                       'it' => 'resources/lib/moment/locale/it.js',
+                       'ja' => 'resources/lib/moment/locale/ja.js',
+                       'ka' => 'resources/lib/moment/locale/ka.js',
+                       'ko' => 'resources/lib/moment/locale/ko.js',
+                       'lt' => 'resources/lib/moment/locale/lt.js',
+                       'lv' => 'resources/lib/moment/locale/lv.js',
+                       'mk' => 'resources/lib/moment/locale/mk.js',
+                       'ml' => 'resources/lib/moment/locale/ml.js',
+                       'mr' => 'resources/lib/moment/locale/mr.js',
+                       'ms-my' => 'resources/lib/moment/locale/ms-my.js',
+                       'my' => 'resources/lib/moment/locale/my.js',
+                       'nb' => 'resources/lib/moment/locale/nb.js',
+                       'ne' => 'resources/lib/moment/locale/ne.js',
+                       'nl' => 'resources/lib/moment/locale/nl.js',
+                       'nn' => 'resources/lib/moment/locale/nn.js',
+                       'pl' => 'resources/lib/moment/locale/pl.js',
+                       'pt-br' => 'resources/lib/moment/locale/pt-br.js',
+                       'pt' => 'resources/lib/moment/locale/pt.js',
+                       'ro' => 'resources/lib/moment/locale/ro.js',
+                       'ru' => 'resources/lib/moment/locale/ru.js',
+                       'sk' => 'resources/lib/moment/locale/sk.js',
+                       'sl' => 'resources/lib/moment/locale/sl.js',
+                       'sq' => 'resources/lib/moment/locale/sq.js',
+                       'sr' => 'resources/lib/moment/locale/sr.js',
+                       'sr-ec' => 'resources/lib/moment/locale/sr-cyrl.js',
+                       'sv' => 'resources/lib/moment/locale/sv.js',
+                       'ta' => 'resources/lib/moment/locale/ta.js',
+                       'th' => 'resources/lib/moment/locale/th.js',
+                       'tl-ph' => 'resources/lib/moment/locale/tl-ph.js',
+                       'tr' => 'resources/lib/moment/locale/tr.js',
+                       'tzm' => 'resources/lib/moment/locale/tzm.js',
+                       'tzm-latn' => 'resources/lib/moment/locale/tzm-latn.js',
+                       'uk' => 'resources/lib/moment/locale/uk.js',
+                       'uz' => 'resources/lib/moment/locale/uz.js',
+                       'vi' => 'resources/lib/moment/locale/vi.js',
+                       'zh-cn' => 'resources/lib/moment/locale/zh-cn.js',
+                       'zh-tw' => 'resources/lib/moment/locale/zh-tw.js',
                ),
        ),
 
@@ -778,6 +772,21 @@ return array(
                'raw' => true,
                'targets' => array( 'desktop', 'mobile' ),
        ),
+       'mediawiki.apihelp' => array(
+               'styles' => 'resources/src/mediawiki/mediawiki.apihelp.css',
+               'targets' => array( 'desktop' ),
+               'dependencies' => array(
+                       'mediawiki.hlist',
+               ),
+       ),
+       'mediawiki.template' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.template.js',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'mediawiki.apipretty' => array(
+               'styles' => 'resources/src/mediawiki/mediawiki.apipretty.css',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        'mediawiki.api' => array(
                'scripts' => 'resources/src/mediawiki.api/mediawiki.api.js',
                'dependencies' => 'mediawiki.util',
@@ -818,6 +827,11 @@ return array(
        'mediawiki.content.json' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.content.json.css',
        ),
+       'mediawiki.confirmCloseWindow' => array(
+               'scripts' => array(
+                       'resources/src/mediawiki/mediawiki.confirmCloseWindow.js',
+               ),
+       ),
        'mediawiki.debug' => array(
                'scripts' => array(
                        'resources/src/mediawiki/mediawiki.debug.js',
@@ -841,6 +855,9 @@ 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(
@@ -914,6 +931,10 @@ return array(
                'scripts' => 'resources/src/mediawiki/mediawiki.notify.js',
                'targets' => array( 'desktop', 'mobile' ),
        ),
+       'mediawiki.pager.tablePager' => array(
+               'styles' => 'resources/src/mediawiki/mediawiki.pager.tablePager.less',
+               'position' => 'top',
+       ),
        'mediawiki.searchSuggest' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.searchSuggest.js',
                'styles' => 'resources/src/mediawiki/mediawiki.searchSuggest.css',
@@ -959,6 +980,13 @@ return array(
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
+       'mediawiki.userSuggest' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.userSuggest.js',
+               'dependencies' => array(
+                       'jquery.suggestions',
+                       'mediawiki.api'
+               )
+       ),
        'mediawiki.util' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.util.js',
                'dependencies' => array(
@@ -974,14 +1002,22 @@ return array(
                'dependencies' => array(
                        'jquery.cookie',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'mediawiki.toolbar' => array(
+               'class' => 'ResourceLoaderEditToolbarModule',
+               'scripts' => 'resources/src/mediawiki.toolbar/toolbar.js',
+               'styles' => 'resources/src/mediawiki.toolbar/toolbar.less',
        ),
 
        /* MediaWiki Action */
 
        'mediawiki.action.edit' => array(
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.edit.js',
+               'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.css',
                'dependencies' => array(
                        'mediawiki.action.edit.styles',
+                       'mediawiki.toolbar',
                        'jquery.textSelection',
                        'jquery.byteLimit',
                ),
@@ -1023,9 +1059,11 @@ return array(
                'dependencies' => array(
                        'mediawiki.util',
                        'mediawiki.page.startup',
+                       'user.options',
                ),
        ),
        'mediawiki.action.view.metadata' => array(
+               'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.metadata.css',
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.metadata.js',
                'messages' => array(
                        'metadata-expand',
@@ -1033,6 +1071,9 @@ return array(
                ),
        ),
        'mediawiki.action.view.postEdit' => array(
+               'templates' => array(
+                       'postEdit.html' => 'resources/src/mediawiki.action/templates/postEdit.html',
+               ),
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.postEdit.js',
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.postEdit.css',
                'dependencies' => array(
@@ -1052,9 +1093,8 @@ return array(
                ),
                'position' => 'top',
        ),
-       // Deployment hack for compatibility with cached HTML, remove before 1.24 release
-       'mediawiki.action.view.redirectToFragment' => array(
-               'dependencies' => 'mediawiki.action.view.redirect',
+       'mediawiki.action.view.redirectPage' => array(
+               'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css',
                'position' => 'top',
        ),
        'mediawiki.action.view.rightClickEdit' => array(
@@ -1064,10 +1104,12 @@ return array(
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.edit.editWarning.js',
                'dependencies' => array(
                        'jquery.textSelection',
-                       'mediawiki.jqueryMsg'
+                       'mediawiki.jqueryMsg',
+                       'mediawiki.confirmCloseWindow',
                ),
                'messages' => array(
                        'editwarning-warning',
+                       // editwarning-warning uses {{int:prefs-editing}}
                        'prefs-editing'
                ),
        ),
@@ -1096,10 +1138,15 @@ return array(
                        'uk' => 'resources/src/mediawiki.language/languages/uk.js',
                ),
                'dependencies' => array(
-                               'mediawiki.language.data',
-                               'mediawiki.cldr',
-                       ),
+                       'mediawiki.language.data',
+                       'mediawiki.cldr',
+               ),
                'targets' => array( 'desktop', 'mobile' ),
+               'messages' => array(
+                       'and',
+                       'comma-separator',
+                       'word-separator'
+               ),
        ),
 
        'mediawiki.cldr' => array(
@@ -1155,11 +1202,11 @@ return array(
        'mediawiki.page.ready' => array(
                'scripts' => 'resources/src/mediawiki.page/mediawiki.page.ready.js',
                'dependencies' => array(
+                       'jquery.accessKeyLabel',
                        'jquery.checkboxShiftClick',
                        'jquery.makeCollapsible',
                        'jquery.placeholder',
                        'jquery.mw-jump',
-                       'mediawiki.util',
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
@@ -1276,6 +1323,8 @@ return array(
                'position' => 'top',
                'messages' => array(
                        'prefs-tabs-navigation-hint',
+                       'prefswarning-warning',
+                       'saveprefs',
                ),
                'dependencies' => array(
                        'mediawiki.language',
@@ -1299,7 +1348,9 @@ return array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.undelete.js',
        ),
        'mediawiki.special.upload' => array(
-               // @todo merge in remainder of mediawiki.legacy.upload
+               'templates' => array(
+                       'thumbnail.html' => 'resources/src/mediawiki.special/templates/thumbnail.html',
+               ),
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.upload.js',
                'messages' => array(
                        'widthheight',
@@ -1308,10 +1359,18 @@ return array(
                        'size-megabytes',
                        'size-gigabytes',
                        'largefileserver',
+                       'editwarning-warning',
+                       // editwarning-warning uses {{int:prefs-editing}}
+                       'prefs-editing',
                ),
                'dependencies' => array(
+                       'jquery.spinner',
+                       'mediawiki.jqueryMsg',
+                       'mediawiki.api',
                        'mediawiki.libs.jpegmeta',
+                       'mediawiki.Title',
                        'mediawiki.util',
+                       'mediawiki.confirmCloseWindow',
                ),
        ),
        'mediawiki.special.userlogin.common.styles' => array(
@@ -1401,55 +1460,38 @@ return array(
        /* MediaWiki Legacy */
 
        'mediawiki.legacy.ajax' => array(
-               'scripts' => 'common/ajax.js',
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'scripts' => 'resources/src/mediawiki.legacy/ajax.js',
                'dependencies' => array(
                        'mediawiki.util',
                        'mediawiki.legacy.wikibits',
                ),
-               'position' => 'top', // Temporary hack for legacy support
+               'position' => 'top',
        ),
        'mediawiki.legacy.commonPrint' => array(
-               'styles' => array( 'common/commonPrint.css' => array( 'media' => 'print' ) ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'styles' => array(
+                       'resources/src/mediawiki.legacy/commonPrint.css' => array( 'media' => 'print' )
+               ),
        ),
        'mediawiki.legacy.protect' => array(
-               'scripts' => 'common/protect.js',
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'scripts' => 'resources/src/mediawiki.legacy/protect.js',
                'dependencies' => array(
                        'jquery.byteLimit',
                ),
-               'position' => 'top',
+               'messages' => array( 'protect-unchain-permissions' )
        ),
        'mediawiki.legacy.shared' => array(
                // Used in the web installer. Test it after modifying this definition!
-               'styles' => array( 'common/shared.css' => array( 'media' => 'screen' ) ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'styles' => array(
+                       'resources/src/mediawiki.legacy/shared.css' => array( 'media' => 'screen' )
+               ),
        ),
        'mediawiki.legacy.oldshared' => array(
-               'styles' => array( 'common/oldshared.css' => array( 'media' => 'screen' ) ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
-       ),
-       'mediawiki.legacy.upload' => array(
-               'scripts' => 'common/upload.js',
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
-               'dependencies' => array(
-                       'jquery.spinner',
-                       'mediawiki.api',
-                       'mediawiki.Title',
-                       'mediawiki.util',
+               'styles' => array(
+                       'resources/src/mediawiki.legacy/oldshared.css' => array( 'media' => 'screen' )
                ),
        ),
        'mediawiki.legacy.wikibits' => array(
-               'scripts' => 'common/wikibits.js',
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'scripts' => 'resources/src/mediawiki.legacy/wikibits.js',
                'dependencies' => array(
                        'mediawiki.util',
                ),
@@ -1459,38 +1501,67 @@ return array(
        /* MediaWiki UI */
 
        'mediawiki.ui' => array(
-               'styles' => array(
-                       'resources/src/mediawiki.ui/default.less',
+               'skinStyles' => array(
+                       'default' => array(
+                               'resources/src/mediawiki.ui/default.less',
+                       ),
                ),
                'position' => 'top',
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.ui.checkbox' => array(
-               'styles' => array(
-                       'resources/src/mediawiki.ui/components/checkbox.less',
+               'skinStyles' => array(
+                       'default' => array(
+                               'resources/src/mediawiki.ui/components/checkbox.less',
+                       ),
                ),
                'position' => 'top',
                'targets' => array( 'desktop', 'mobile' ),
        ),
        // Lightweight module for anchor styles
        'mediawiki.ui.anchor' => array(
-               'styles' => array(
-                       'resources/src/mediawiki.ui/components/anchors.less',
+               'skinStyles' => array(
+                       'default' => array(
+                               'resources/src/mediawiki.ui/components/anchors.less',
+                       ),
                ),
                'position' => 'top',
                'targets' => array( 'desktop', 'mobile' ),
        ),
        // Lightweight module for button styles
        'mediawiki.ui.button' => array(
-               'styles' => array(
-                       'resources/src/mediawiki.ui/components/buttons.less',
+               'skinStyles' => array(
+                       'default' => array(
+                               'resources/src/mediawiki.ui/components/buttons.less',
+                       ),
                ),
                'position' => 'top',
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.ui.input' => array(
-               'styles' => array(
-                       'resources/src/mediawiki.ui/components/inputs.less',
+               'skinStyles' => array(
+                       'default' => array(
+                               'resources/src/mediawiki.ui/components/inputs.less',
+                       ),
+               ),
+               'position' => 'top',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'mediawiki.ui.icon' => array(
+               'skinStyles' => array(
+                       'default' => array(
+                               'resources/src/mediawiki.ui/components/icons.less',
+                       ),
+               ),
+               'position' => 'top',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       // Lightweight module for text styles
+       'mediawiki.ui.text' => array(
+               'skinStyles' => array(
+                       'default' => array(
+                               'resources/src/mediawiki.ui/components/text.less',
+                       ),
                ),
                'position' => 'top',
                'targets' => array( 'desktop', 'mobile' ),
@@ -1500,6 +1571,7 @@ return array(
        'es5-shim' => array(
                'scripts' => array(
                        'resources/lib/es5-shim/es5-shim.js',
+                       'resources/src/polyfill-object-create.js',
                ),
                'targets' => array( 'desktop', 'mobile' ),
                'skipFunction' => 'resources/src/es5-skip.js',
@@ -1524,24 +1596,27 @@ return array(
                'scripts' => array(
                        'resources/lib/oojs-ui/oojs-ui.js',
                ),
-               'styles' => array(
-                       'resources/lib/oojs-ui/oojs-ui.svg.css',
+               'skinScripts' => array(
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-apex.js',
+                       'minerva' => 'resources/lib/oojs-ui/oojs-ui-mediawiki.js',
                ),
                'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-apex.css',
-                       // FIXME As of July 2014, this is to be gone "in a couple of months".
-                       'minerva' => 'resources/lib/oojs-ui/oojs-ui-agora.css',
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-apex.svg.css',
+                       'minerva' => 'resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css',
                ),
                'messages' => array(
-                       'ooui-outline-control-move-down',
-                       'ooui-outline-control-move-up',
-                       'ooui-outline-control-remove',
-                       'ooui-toolbar-more',
                        'ooui-dialog-message-accept',
                        'ooui-dialog-message-reject',
+                       'ooui-dialog-process-continue',
                        'ooui-dialog-process-dismiss',
                        'ooui-dialog-process-error',
                        'ooui-dialog-process-retry',
+                       'ooui-outline-control-move-down',
+                       'ooui-outline-control-move-up',
+                       'ooui-outline-control-remove',
+                       'ooui-toolbar-more',
+                       'ooui-toolgroup-collapse',
+                       'ooui-toolgroup-expand',
                ),
                'dependencies' => array(
                        'es5-shim',
diff --git a/resources/assets/file-type-icons/COPYING b/resources/assets/file-type-icons/COPYING
new file mode 100644 (file)
index 0000000..136530a
--- /dev/null
@@ -0,0 +1,43 @@
+The icons used here are derived from the crystalsvg icons in the the
+pics/crystalsvg/ directory of kdelibs-3.4.0 they were modified on 2005-05-15
+by Ævar Arnfjörð Bjarmason for use in MediaWiki.
+
+What follows is the contents of the LICENSE.crystalsvg file found in the pics/
+subdirectory of kdelibs-3.4.0:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+This copyright and license notice covers all CrystalSVG images.
+Note the license notice contains an add-on.
+********************************************************************************
+KDE Crystal theme icons.
+Copyright (C) 2002 and following years KDE Artists
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation,
+version 2.1 of the License.
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+    **** NOTE THIS ADD-ON ****
+The GNU Lesser General Public License or LGPL is written for software libraries
+in the first place. We expressly want the LGPL to be valid for this artwork
+library too.
+KDE Crystal theme icons is a special kind of software library, it is an
+artwork library, it's elements can be used in a Graphical User Interface, or
+GUI.
+Source code, for this library means:
+ - for vectors svg;
+ - for pixels, if applicable, the multi-layered formats xcf or psd, or
+otherwise png.
+The LGPL in some sections obliges you to make the files carry
+notices. With images this is in some cases impossible or hardly useful.
+With this library a notice is placed at a prominent place in the directory
+containing the elements. You may follow this practice.
+The exception in section 6 of the GNU Lesser General Public License covers
+the use of elements of this art library in a GUI.
+kde-artists [at] kde.org
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
diff --git a/resources/assets/file-type-icons/fileicon-c.png b/resources/assets/file-type-icons/fileicon-c.png
new file mode 100644 (file)
index 0000000..0d603b7
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-c.png differ
diff --git a/resources/assets/file-type-icons/fileicon-cpp.png b/resources/assets/file-type-icons/fileicon-cpp.png
new file mode 100644 (file)
index 0000000..123688f
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-cpp.png differ
diff --git a/resources/assets/file-type-icons/fileicon-deb.png b/resources/assets/file-type-icons/fileicon-deb.png
new file mode 100644 (file)
index 0000000..87ca3fa
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-deb.png differ
diff --git a/resources/assets/file-type-icons/fileicon-djvu.png b/resources/assets/file-type-icons/fileicon-djvu.png
new file mode 100644 (file)
index 0000000..1da2276
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-djvu.png differ
diff --git a/resources/assets/file-type-icons/fileicon-djvu.xcf b/resources/assets/file-type-icons/fileicon-djvu.xcf
new file mode 100644 (file)
index 0000000..8043dcd
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-djvu.xcf differ
diff --git a/resources/assets/file-type-icons/fileicon-dvi.png b/resources/assets/file-type-icons/fileicon-dvi.png
new file mode 100644 (file)
index 0000000..f37878d
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-dvi.png differ
diff --git a/resources/assets/file-type-icons/fileicon-exe.png b/resources/assets/file-type-icons/fileicon-exe.png
new file mode 100644 (file)
index 0000000..dc020eb
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-exe.png differ
diff --git a/resources/assets/file-type-icons/fileicon-h.png b/resources/assets/file-type-icons/fileicon-h.png
new file mode 100644 (file)
index 0000000..339bf02
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-h.png differ
diff --git a/resources/assets/file-type-icons/fileicon-html.png b/resources/assets/file-type-icons/fileicon-html.png
new file mode 100644 (file)
index 0000000..f28f8a2
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-html.png differ
diff --git a/resources/assets/file-type-icons/fileicon-iso.png b/resources/assets/file-type-icons/fileicon-iso.png
new file mode 100644 (file)
index 0000000..c73d229
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-iso.png differ
diff --git a/resources/assets/file-type-icons/fileicon-java.png b/resources/assets/file-type-icons/fileicon-java.png
new file mode 100644 (file)
index 0000000..a1b4f22
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-java.png differ
diff --git a/resources/assets/file-type-icons/fileicon-mid.png b/resources/assets/file-type-icons/fileicon-mid.png
new file mode 100644 (file)
index 0000000..ce2bebb
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-mid.png differ
diff --git a/resources/assets/file-type-icons/fileicon-mov.png b/resources/assets/file-type-icons/fileicon-mov.png
new file mode 100644 (file)
index 0000000..952de1f
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-mov.png differ
diff --git a/resources/assets/file-type-icons/fileicon-o.png b/resources/assets/file-type-icons/fileicon-o.png
new file mode 100644 (file)
index 0000000..f3523d9
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-o.png differ
diff --git a/resources/assets/file-type-icons/fileicon-ogg.png b/resources/assets/file-type-icons/fileicon-ogg.png
new file mode 100644 (file)
index 0000000..ef4d801
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-ogg.png differ
diff --git a/resources/assets/file-type-icons/fileicon-ogg.xcf b/resources/assets/file-type-icons/fileicon-ogg.xcf
new file mode 100644 (file)
index 0000000..a91024b
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-ogg.xcf differ
diff --git a/resources/assets/file-type-icons/fileicon-pdf.png b/resources/assets/file-type-icons/fileicon-pdf.png
new file mode 100644 (file)
index 0000000..8c8da92
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-pdf.png differ
diff --git a/resources/assets/file-type-icons/fileicon-ps.png b/resources/assets/file-type-icons/fileicon-ps.png
new file mode 100644 (file)
index 0000000..e872833
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-ps.png differ
diff --git a/resources/assets/file-type-icons/fileicon-psd.png b/resources/assets/file-type-icons/fileicon-psd.png
new file mode 100644 (file)
index 0000000..598f190
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-psd.png differ
diff --git a/resources/assets/file-type-icons/fileicon-rm.png b/resources/assets/file-type-icons/fileicon-rm.png
new file mode 100644 (file)
index 0000000..81dbe0b
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-rm.png differ
diff --git a/resources/assets/file-type-icons/fileicon-rpm.png b/resources/assets/file-type-icons/fileicon-rpm.png
new file mode 100644 (file)
index 0000000..1903aac
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-rpm.png differ
diff --git a/resources/assets/file-type-icons/fileicon-svg.png b/resources/assets/file-type-icons/fileicon-svg.png
new file mode 100644 (file)
index 0000000..b782113
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-svg.png differ
diff --git a/resources/assets/file-type-icons/fileicon-tar.png b/resources/assets/file-type-icons/fileicon-tar.png
new file mode 100644 (file)
index 0000000..e5fd1b7
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-tar.png differ
diff --git a/resources/assets/file-type-icons/fileicon-tex.png b/resources/assets/file-type-icons/fileicon-tex.png
new file mode 100644 (file)
index 0000000..a437284
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-tex.png differ
diff --git a/resources/assets/file-type-icons/fileicon-ttf.png b/resources/assets/file-type-icons/fileicon-ttf.png
new file mode 100644 (file)
index 0000000..1ed4e74
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-ttf.png differ
diff --git a/resources/assets/file-type-icons/fileicon-txt.png b/resources/assets/file-type-icons/fileicon-txt.png
new file mode 100644 (file)
index 0000000..9e988e7
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-txt.png differ
diff --git a/resources/assets/file-type-icons/fileicon-xcf.png b/resources/assets/file-type-icons/fileicon-xcf.png
new file mode 100644 (file)
index 0000000..1037b50
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon-xcf.png differ
diff --git a/resources/assets/file-type-icons/fileicon.png b/resources/assets/file-type-icons/fileicon.png
new file mode 100644 (file)
index 0000000..59696a3
Binary files /dev/null and b/resources/assets/file-type-icons/fileicon.png differ
diff --git a/resources/assets/licenses/cc-0.png b/resources/assets/licenses/cc-0.png
new file mode 100644 (file)
index 0000000..9d3fe5f
Binary files /dev/null and b/resources/assets/licenses/cc-0.png differ
diff --git a/resources/assets/licenses/cc-by-nc-sa.png b/resources/assets/licenses/cc-by-nc-sa.png
new file mode 100644 (file)
index 0000000..0d24a71
Binary files /dev/null and b/resources/assets/licenses/cc-by-nc-sa.png differ
diff --git a/resources/assets/licenses/cc-by-sa.png b/resources/assets/licenses/cc-by-sa.png
new file mode 100644 (file)
index 0000000..518fb64
Binary files /dev/null and b/resources/assets/licenses/cc-by-sa.png differ
diff --git a/resources/assets/licenses/cc-by.png b/resources/assets/licenses/cc-by.png
new file mode 100644 (file)
index 0000000..9cca2f9
Binary files /dev/null and b/resources/assets/licenses/cc-by.png differ
diff --git a/resources/assets/licenses/gnu-fdl.png b/resources/assets/licenses/gnu-fdl.png
new file mode 100644 (file)
index 0000000..3feaf57
Binary files /dev/null and b/resources/assets/licenses/gnu-fdl.png differ
diff --git a/resources/assets/licenses/public-domain.png b/resources/assets/licenses/public-domain.png
new file mode 100644 (file)
index 0000000..ebf0107
Binary files /dev/null and b/resources/assets/licenses/public-domain.png differ
diff --git a/resources/assets/mediawiki.png b/resources/assets/mediawiki.png
new file mode 100644 (file)
index 0000000..8c42118
Binary files /dev/null and b/resources/assets/mediawiki.png differ
diff --git a/resources/assets/poweredby_mediawiki_88x31.png b/resources/assets/poweredby_mediawiki_88x31.png
new file mode 100644 (file)
index 0000000..30e1d2e
Binary files /dev/null and b/resources/assets/poweredby_mediawiki_88x31.png differ
diff --git a/resources/assets/wiki.png b/resources/assets/wiki.png
new file mode 100644 (file)
index 0000000..48595b0
Binary files /dev/null and b/resources/assets/wiki.png differ
index 2e088ca..d4f7db3 100644 (file)
@@ -14,7 +14,7 @@
 .ui-helper-hidden { display: none; }
 .ui-helper-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
 .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
+.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; border-collapse: collapse; }
 .ui-helper-clearfix:after { clear: both; }
 .ui-helper-clearfix { zoom: 1; }
 .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
index cc11aed..45e19ac 100644 (file)
  * For more information, please refer to <http://unlicense.org/>
  */
 
+/* global ActiveXObject: false */
+/* jshint browser: true */
+
 (function() {
     'use strict';
 
     var
     /* jStorage version */
-        JSTORAGE_VERSION = '0.4.10',
+        JSTORAGE_VERSION = '0.4.12',
 
         /* detect a dollar object or create one if not found */
         $ = window.jQuery || window.$ || (window.$ = {}),
@@ -58,7 +61,7 @@
         };
 
     // Break if no JSON support was found
-    if (!('parse' in JSON) || !('stringify' in JSON)) {
+    if (typeof JSON.parse !== 'function' || typeof JSON.stringify !== 'function') {
         throw new Error('No JSON support found, include //cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js to page');
     }
 
             return;
         }
         var pubelm,
-            _pubsubCurrent = _pubsub_last;
+            _pubsubCurrent = _pubsub_last,
+            needFired = [];
 
         for (i = len = _storage.__jstorage_meta.PubSub.length - 1; i >= 0; i--) {
             pubelm = _storage.__jstorage_meta.PubSub[i];
             if (pubelm[0] > _pubsub_last) {
                 _pubsubCurrent = pubelm[0];
-                _fireSubscribers(pubelm[1], pubelm[2]);
+                needFired.unshift(pubelm);
             }
         }
 
+        for (i = needFired.length - 1; i >= 0; i--) {
+            _fireSubscribers(needFired[i][1], needFired[i][2]);
+        }
+
         _pubsub_last = _pubsubCurrent;
     }
 
         switch (l) {
             case 3:
                 h ^= (str.charCodeAt(i + 2) & 0xff) << 16;
+                /* falls through */
             case 2:
                 h ^= (str.charCodeAt(i + 1) & 0xff) << 8;
+                /* falls through */
             case 1:
                 h ^= (str.charCodeAt(i) & 0xff);
                 h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));
     // Initialize jStorage
     _init();
 
-})();
\ No newline at end of file
+})();
diff --git a/resources/lib/jquery/jquery.json.js b/resources/lib/jquery/jquery.json.js
deleted file mode 100644 (file)
index 75953f4..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/**
- * jQuery JSON plugin 2.4.0
- *
- * @author Brantley Harris, 2009-2011
- * @author Timo Tijhof, 2011-2012
- * @source This plugin is heavily influenced by MochiKit's serializeJSON, which is
- *         copyrighted 2005 by Bob Ippolito.
- * @source Brantley Harris wrote this plugin. It is based somewhat on the JSON.org
- *         website's http://www.json.org/json2.js, which proclaims:
- *         "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that
- *         I uphold.
- * @license MIT License <http://www.opensource.org/licenses/mit-license.php>
- */
-(function ($) {
-       'use strict';
-
-       var escape = /["\\\x00-\x1f\x7f-\x9f]/g,
-               meta = {
-                       '\b': '\\b',
-                       '\t': '\\t',
-                       '\n': '\\n',
-                       '\f': '\\f',
-                       '\r': '\\r',
-                       '"' : '\\"',
-                       '\\': '\\\\'
-               },
-               hasOwn = Object.prototype.hasOwnProperty;
-
-       /**
-        * jQuery.toJSON
-        * Converts the given argument into a JSON representation.
-        *
-        * @param o {Mixed} The json-serializable *thing* to be converted
-        *
-        * If an object has a toJSON prototype, that will be used to get the representation.
-        * Non-integer/string keys are skipped in the object, as are keys that point to a
-        * function.
-        *
-        */
-       $.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o) {
-               if (o === null) {
-                       return 'null';
-               }
-
-               var pairs, k, name, val,
-                       type = $.type(o);
-
-               if (type === 'undefined') {
-                       return undefined;
-               }
-
-               // Also covers instantiated Number and Boolean objects,
-               // which are typeof 'object' but thanks to $.type, we
-               // catch them here. I don't know whether it is right
-               // or wrong that instantiated primitives are not
-               // exported to JSON as an {"object":..}.
-               // We choose this path because that's what the browsers did.
-               if (type === 'number' || type === 'boolean') {
-                       return String(o);
-               }
-               if (type === 'string') {
-                       return $.quoteString(o);
-               }
-               if (typeof o.toJSON === 'function') {
-                       return $.toJSON(o.toJSON());
-               }
-               if (type === 'date') {
-                       var month = o.getUTCMonth() + 1,
-                               day = o.getUTCDate(),
-                               year = o.getUTCFullYear(),
-                               hours = o.getUTCHours(),
-                               minutes = o.getUTCMinutes(),
-                               seconds = o.getUTCSeconds(),
-                               milli = o.getUTCMilliseconds();
-
-                       if (month < 10) {
-                               month = '0' + month;
-                       }
-                       if (day < 10) {
-                               day = '0' + day;
-                       }
-                       if (hours < 10) {
-                               hours = '0' + hours;
-                       }
-                       if (minutes < 10) {
-                               minutes = '0' + minutes;
-                       }
-                       if (seconds < 10) {
-                               seconds = '0' + seconds;
-                       }
-                       if (milli < 100) {
-                               milli = '0' + milli;
-                       }
-                       if (milli < 10) {
-                               milli = '0' + milli;
-                       }
-                       return '"' + year + '-' + month + '-' + day + 'T' +
-                               hours + ':' + minutes + ':' + seconds +
-                               '.' + milli + 'Z"';
-               }
-
-               pairs = [];
-
-               if ($.isArray(o)) {
-                       for (k = 0; k < o.length; k++) {
-                               pairs.push($.toJSON(o[k]) || 'null');
-                       }
-                       return '[' + pairs.join(',') + ']';
-               }
-
-               // Any other object (plain object, RegExp, ..)
-               // Need to do typeof instead of $.type, because we also
-               // want to catch non-plain objects.
-               if (typeof o === 'object') {
-                       for (k in o) {
-                               // Only include own properties,
-                               // Filter out inherited prototypes
-                               if (hasOwn.call(o, k)) {
-                                       // Keys must be numerical or string. Skip others
-                                       type = typeof k;
-                                       if (type === 'number') {
-                                               name = '"' + k + '"';
-                                       } else if (type === 'string') {
-                                               name = $.quoteString(k);
-                                       } else {
-                                               continue;
-                                       }
-                                       type = typeof o[k];
-
-                                       // Invalid values like these return undefined
-                                       // from toJSON, however those object members
-                                       // shouldn't be included in the JSON string at all.
-                                       if (type !== 'function' && type !== 'undefined') {
-                                               val = $.toJSON(o[k]);
-                                               pairs.push(name + ':' + val);
-                                       }
-                               }
-                       }
-                       return '{' + pairs.join(',') + '}';
-               }
-       };
-
-       /**
-        * jQuery.evalJSON
-        * Evaluates a given json string.
-        *
-        * @param str {String}
-        */
-       $.evalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
-               /*jshint evil: true */
-               return eval('(' + str + ')');
-       };
-
-       /**
-        * jQuery.secureEvalJSON
-        * Evals JSON in a way that is *more* secure.
-        *
-        * @param str {String}
-        */
-       $.secureEvalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
-               var filtered =
-                       str
-                       .replace(/\\["\\\/bfnrtu]/g, '@')
-                       .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
-                       .replace(/(?:^|:|,)(?:\s*\[)+/g, '');
-
-               if (/^[\],:{}\s]*$/.test(filtered)) {
-                       /*jshint evil: true */
-                       return eval('(' + str + ')');
-               }
-               throw new SyntaxError('Error parsing JSON, source is not valid.');
-       };
-
-       /**
-        * jQuery.quoteString
-        * Returns a string-repr of a string, escaping quotes intelligently.
-        * Mostly a support function for toJSON.
-        * Examples:
-        * >>> jQuery.quoteString('apple')
-        * "apple"
-        *
-        * >>> jQuery.quoteString('"Where are we going?", she asked.')
-        * "\"Where are we going?\", she asked."
-        */
-       $.quoteString = function (str) {
-               if (str.match(escape)) {
-                       return '"' + str.replace(escape, function (a) {
-                               var c = meta[a];
-                               if (typeof c === 'string') {
-                                       return c;
-                               }
-                               c = a.charCodeAt();
-                               return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
-                       }) + '"';
-               }
-               return '"' + str + '"';
-       };
-
-}(jQuery));
diff --git a/resources/lib/moment/lang/af.js b/resources/lib/moment/lang/af.js
deleted file mode 100644 (file)
index 2777e58..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-// moment.js locale configuration
-// locale : afrikaans (af)
-// author : Werner Mollentze : https://github.com/wernerm
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('af', {
-        months : "Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),
-        monthsShort : "Jan_Feb_Mar_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),
-        weekdays : "Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),
-        weekdaysShort : "Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),
-        weekdaysMin : "So_Ma_Di_Wo_Do_Vr_Sa".split("_"),
-        meridiem : function (hours, minutes, isLower) {
-            if (hours < 12) {
-                return isLower ? 'vm' : 'VM';
-            } else {
-                return isLower ? 'nm' : 'NM';
-            }
-        },
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd, D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay : '[Vandag om] LT',
-            nextDay : '[Môre om] LT',
-            nextWeek : 'dddd [om] LT',
-            lastDay : '[Gister om] LT',
-            lastWeek : '[Laas] dddd [om] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "oor %s",
-            past : "%s gelede",
-            s : "'n paar sekondes",
-            m : "'n minuut",
-            mm : "%d minute",
-            h : "'n uur",
-            hh : "%d ure",
-            d : "'n dag",
-            dd : "%d dae",
-            M : "'n maand",
-            MM : "%d maande",
-            y : "'n jaar",
-            yy : "%d jaar"
-        },
-        ordinal : function (number) {
-            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter
-        },
-        week : {
-            dow : 1, // Maandag is die eerste dag van die week.
-            doy : 4  // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/ar-ma.js b/resources/lib/moment/lang/ar-ma.js
deleted file mode 100644 (file)
index c8add2d..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-// moment.js locale configuration
-// locale : Moroccan Arabic (ar-ma)
-// author : ElFadili Yassine : https://github.com/ElFadiliY
-// author : Abdel Said : https://github.com/abdelsaid
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('ar-ma', {
-        months : "يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),
-        monthsShort : "يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),
-        weekdays : "الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),
-        weekdaysShort : "احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),
-        weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay: "[اليوم على الساعة] LT",
-            nextDay: '[غدا على الساعة] LT',
-            nextWeek: 'dddd [على الساعة] LT',
-            lastDay: '[أمس على الساعة] LT',
-            lastWeek: 'dddd [على الساعة] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "في %s",
-            past : "منذ %s",
-            s : "ثوان",
-            m : "دقيقة",
-            mm : "%d دقائق",
-            h : "ساعة",
-            hh : "%d ساعات",
-            d : "يوم",
-            dd : "%d أيام",
-            M : "شهر",
-            MM : "%d أشهر",
-            y : "سنة",
-            yy : "%d سنوات"
-        },
-        week : {
-            dow : 6, // Saturday is the first day of the week.
-            doy : 12  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/ar-sa.js b/resources/lib/moment/lang/ar-sa.js
deleted file mode 100644 (file)
index 64e2091..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-// moment.js locale configuration
-// locale : Arabic Saudi Arabia (ar-sa)
-// author : Suhail Alkowaileet : https://github.com/xsoh
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var symbolMap = {
-        '1': '١',
-        '2': '٢',
-        '3': '٣',
-        '4': '٤',
-        '5': '٥',
-        '6': '٦',
-        '7': '٧',
-        '8': '٨',
-        '9': '٩',
-        '0': '٠'
-    }, numberMap = {
-        '١': '1',
-        '٢': '2',
-        '٣': '3',
-        '٤': '4',
-        '٥': '5',
-        '٦': '6',
-        '٧': '7',
-        '٨': '8',
-        '٩': '9',
-        '٠': '0'
-    };
-
-    return moment.defineLocale('ar-sa', {
-        months : "يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),
-        monthsShort : "يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),
-        weekdays : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),
-        weekdaysShort : "أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),
-        weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd D MMMM YYYY LT"
-        },
-        meridiem : function (hour, minute, isLower) {
-            if (hour < 12) {
-                return "ص";
-            } else {
-                return "م";
-            }
-        },
-        calendar : {
-            sameDay: "[اليوم على الساعة] LT",
-            nextDay: '[غدا على الساعة] LT',
-            nextWeek: 'dddd [على الساعة] LT',
-            lastDay: '[أمس على الساعة] LT',
-            lastWeek: 'dddd [على الساعة] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "في %s",
-            past : "منذ %s",
-            s : "ثوان",
-            m : "دقيقة",
-            mm : "%d دقائق",
-            h : "ساعة",
-            hh : "%d ساعات",
-            d : "يوم",
-            dd : "%d أيام",
-            M : "شهر",
-            MM : "%d أشهر",
-            y : "سنة",
-            yy : "%d سنوات"
-        },
-        preparse: function (string) {
-            return string.replace(/[۰-۹]/g, function (match) {
-                return numberMap[match];
-            }).replace(/،/g, ',');
-        },
-        postformat: function (string) {
-            return string.replace(/\d/g, function (match) {
-                return symbolMap[match];
-            }).replace(/,/g, '،');
-        },
-        week : {
-            dow : 6, // Saturday is the first day of the week.
-            doy : 12  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/ar.js b/resources/lib/moment/lang/ar.js
deleted file mode 100644 (file)
index 2af64ee..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-// moment.js locale configuration
-// locale : Arabic (ar)
-// author : Abdel Said : https://github.com/abdelsaid
-// changes in months, weekdays : Ahmed Elkhatib
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var symbolMap = {
-        '1': '١',
-        '2': '٢',
-        '3': '٣',
-        '4': '٤',
-        '5': '٥',
-        '6': '٦',
-        '7': '٧',
-        '8': '٨',
-        '9': '٩',
-        '0': '٠'
-    }, numberMap = {
-        '١': '1',
-        '٢': '2',
-        '٣': '3',
-        '٤': '4',
-        '٥': '5',
-        '٦': '6',
-        '٧': '7',
-        '٨': '8',
-        '٩': '9',
-        '٠': '0'
-    };
-
-    return moment.defineLocale('ar', {
-        months : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"),
-        monthsShort : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"),
-        weekdays : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),
-        weekdaysShort : "أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),
-        weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd D MMMM YYYY LT"
-        },
-        meridiem : function (hour, minute, isLower) {
-            if (hour < 12) {
-                return "ص";
-            } else {
-                return "م";
-            }
-        },
-        calendar : {
-            sameDay: "[اليوم على الساعة] LT",
-            nextDay: '[غدا على الساعة] LT',
-            nextWeek: 'dddd [على الساعة] LT',
-            lastDay: '[أمس على الساعة] LT',
-            lastWeek: 'dddd [على الساعة] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "في %s",
-            past : "منذ %s",
-            s : "ثوان",
-            m : "دقيقة",
-            mm : "%d دقائق",
-            h : "ساعة",
-            hh : "%d ساعات",
-            d : "يوم",
-            dd : "%d أيام",
-            M : "شهر",
-            MM : "%d أشهر",
-            y : "سنة",
-            yy : "%d سنوات"
-        },
-        preparse: function (string) {
-            return string.replace(/[۰-۹]/g, function (match) {
-                return numberMap[match];
-            }).replace(/،/g, ',');
-        },
-        postformat: function (string) {
-            return string.replace(/\d/g, function (match) {
-                return symbolMap[match];
-            }).replace(/,/g, '،');
-        },
-        week : {
-            dow : 6, // Saturday is the first day of the week.
-            doy : 12  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/az.js b/resources/lib/moment/lang/az.js
deleted file mode 100644 (file)
index a6a5aff..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-// moment.js locale configuration
-// locale : azerbaijani (az)
-// author : topchiyev : https://github.com/topchiyev
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var suffixes = {
-        1: "-inci",
-        5: "-inci",
-        8: "-inci",
-        70: "-inci",
-        80: "-inci",
-
-        2: "-nci",
-        7: "-nci",
-        20: "-nci",
-        50: "-nci",
-
-        3: "-üncü",
-        4: "-üncü",
-        100: "-üncü",
-
-        6: "-ncı",
-
-        9: "-uncu",
-        10: "-uncu",
-        30: "-uncu",
-
-        60: "-ıncı",
-        90: "-ıncı"
-    };
-    return moment.defineLocale('az', {
-        months : "yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),
-        monthsShort : "yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),
-        weekdays : "Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),
-        weekdaysShort : "Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),
-        weekdaysMin : "Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD.MM.YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd, D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay : '[bugün saat] LT',
-            nextDay : '[sabah saat] LT',
-            nextWeek : '[gələn həftə] dddd [saat] LT',
-            lastDay : '[dünən] LT',
-            lastWeek : '[keçən həftə] dddd [saat] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%s sonra",
-            past : "%s əvvəl",
-            s : "birneçə saniyyə",
-            m : "bir dəqiqə",
-            mm : "%d dəqiqə",
-            h : "bir saat",
-            hh : "%d saat",
-            d : "bir gün",
-            dd : "%d gün",
-            M : "bir ay",
-            MM : "%d ay",
-            y : "bir il",
-            yy : "%d il"
-        },
-        meridiem : function (hour, minute, isLower) {
-            if (hour < 4) {
-                return "gecə";
-            } else if (hour < 12) {
-                return "səhər";
-            } else if (hour < 17) {
-                return "gündüz";
-            } else {
-                return "axşam";
-            }
-        },
-        ordinal : function (number) {
-            if (number === 0) {  // special case for zero
-                return number + "-ıncı";
-            }
-            var a = number % 10,
-                b = number % 100 - a,
-                c = number >= 100 ? 100 : null;
-
-            return number + (suffixes[a] || suffixes[b] || suffixes[c]);
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/be.js b/resources/lib/moment/lang/be.js
deleted file mode 100644 (file)
index 6e0aef1..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-// moment.js locale configuration
-// locale : belarusian (be)
-// author : Dmitry Demidov : https://github.com/demidov91
-// author: Praleska: http://praleska.pro/
-// Author : Menelion Elensúle : https://github.com/Oire
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    function plural(word, num) {
-        var forms = word.split('_');
-        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
-    }
-
-    function relativeTimeWithPlural(number, withoutSuffix, key) {
-        var format = {
-            'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
-            'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
-            'dd': 'дзень_дні_дзён',
-            'MM': 'месяц_месяцы_месяцаў',
-            'yy': 'год_гады_гадоў'
-        };
-        if (key === 'm') {
-            return withoutSuffix ? 'хвіліна' : 'хвіліну';
-        }
-        else if (key === 'h') {
-            return withoutSuffix ? 'гадзіна' : 'гадзіну';
-        }
-        else {
-            return number + ' ' + plural(format[key], +number);
-        }
-    }
-
-    function monthsCaseReplace(m, format) {
-        var months = {
-            'nominative': 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_'),
-            'accusative': 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_')
-        },
-
-        nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
-            'accusative' :
-            'nominative';
-
-        return months[nounCase][m.month()];
-    }
-
-    function weekdaysCaseReplace(m, format) {
-        var weekdays = {
-            'nominative': 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
-            'accusative': 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_')
-        },
-
-        nounCase = (/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/).test(format) ?
-            'accusative' :
-            'nominative';
-
-        return weekdays[nounCase][m.day()];
-    }
-
-    return moment.defineLocale('be', {
-        months : monthsCaseReplace,
-        monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
-        weekdays : weekdaysCaseReplace,
-        weekdaysShort : "нд_пн_ат_ср_чц_пт_сб".split("_"),
-        weekdaysMin : "нд_пн_ат_ср_чц_пт_сб".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD.MM.YYYY",
-            LL : "D MMMM YYYY г.",
-            LLL : "D MMMM YYYY г., LT",
-            LLLL : "dddd, D MMMM YYYY г., LT"
-        },
-        calendar : {
-            sameDay: '[Сёння ў] LT',
-            nextDay: '[Заўтра ў] LT',
-            lastDay: '[Учора ў] LT',
-            nextWeek: function () {
-                return '[У] dddd [ў] LT';
-            },
-            lastWeek: function () {
-                switch (this.day()) {
-                case 0:
-                case 3:
-                case 5:
-                case 6:
-                    return '[У мінулую] dddd [ў] LT';
-                case 1:
-                case 2:
-                case 4:
-                    return '[У мінулы] dddd [ў] LT';
-                }
-            },
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "праз %s",
-            past : "%s таму",
-            s : "некалькі секунд",
-            m : relativeTimeWithPlural,
-            mm : relativeTimeWithPlural,
-            h : relativeTimeWithPlural,
-            hh : relativeTimeWithPlural,
-            d : "дзень",
-            dd : relativeTimeWithPlural,
-            M : "месяц",
-            MM : relativeTimeWithPlural,
-            y : "год",
-            yy : relativeTimeWithPlural
-        },
-
-
-        meridiem : function (hour, minute, isLower) {
-            if (hour < 4) {
-                return "ночы";
-            } else if (hour < 12) {
-                return "раніцы";
-            } else if (hour < 17) {
-                return "дня";
-            } else {
-                return "вечара";
-            }
-        },
-
-        ordinal: function (number, period) {
-            switch (period) {
-            case 'M':
-            case 'd':
-            case 'DDD':
-            case 'w':
-            case 'W':
-                return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';
-            case 'D':
-                return number + '-га';
-            default:
-                return number;
-            }
-        },
-
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/bg.js b/resources/lib/moment/lang/bg.js
deleted file mode 100644 (file)
index b8a8c32..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-// moment.js locale configuration
-// locale : bulgarian (bg)
-// author : Krasen Borisov : https://github.com/kraz
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('bg', {
-        months : "януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),
-        monthsShort : "янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),
-        weekdays : "неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),
-        weekdaysShort : "нед_пон_вто_сря_чет_пет_съб".split("_"),
-        weekdaysMin : "нд_пн_вт_ср_чт_пт_сб".split("_"),
-        longDateFormat : {
-            LT : "H:mm",
-            L : "D.MM.YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd, D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay : '[Днес в] LT',
-            nextDay : '[Утре в] LT',
-            nextWeek : 'dddd [в] LT',
-            lastDay : '[Вчера в] LT',
-            lastWeek : function () {
-                switch (this.day()) {
-                case 0:
-                case 3:
-                case 6:
-                    return '[В изминалата] dddd [в] LT';
-                case 1:
-                case 2:
-                case 4:
-                case 5:
-                    return '[В изминалия] dddd [в] LT';
-                }
-            },
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "след %s",
-            past : "преди %s",
-            s : "няколко секунди",
-            m : "минута",
-            mm : "%d минути",
-            h : "час",
-            hh : "%d часа",
-            d : "ден",
-            dd : "%d дни",
-            M : "месец",
-            MM : "%d месеца",
-            y : "година",
-            yy : "%d години"
-        },
-        ordinal : function (number) {
-            var lastDigit = number % 10,
-                last2Digits = number % 100;
-            if (number === 0) {
-                return number + '-ев';
-            } else if (last2Digits === 0) {
-                return number + '-ен';
-            } else if (last2Digits > 10 && last2Digits < 20) {
-                return number + '-ти';
-            } else if (lastDigit === 1) {
-                return number + '-ви';
-            } else if (lastDigit === 2) {
-                return number + '-ри';
-            } else if (lastDigit === 7 || lastDigit === 8) {
-                return number + '-ми';
-            } else {
-                return number + '-ти';
-            }
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/bn.js b/resources/lib/moment/lang/bn.js
deleted file mode 100644 (file)
index 8ceb8eb..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-// moment.js locale configuration
-// locale : Bengali (bn)
-// author : Kaushik Gandhi : https://github.com/kaushikgandhi
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var symbolMap = {
-        '1': '১',
-        '2': '২',
-        '3': '৩',
-        '4': '৪',
-        '5': '৫',
-        '6': '৬',
-        '7': '৭',
-        '8': '৮',
-        '9': '৯',
-        '0': '০'
-    },
-    numberMap = {
-        '১': '1',
-        '২': '2',
-        '৩': '3',
-        '৪': '4',
-        '৫': '5',
-        '৬': '6',
-        '৭': '7',
-        '৮': '8',
-        '৯': '9',
-        '০': '0'
-    };
-
-    return moment.defineLocale('bn', {
-        months : 'জানুয়ারী_ফেবুয়ারী_মার্চ_এপ্রিল_মে_জুন_জুলাই_অগাস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split("_"),
-        monthsShort : 'জানু_ফেব_মার্চ_এপর_মে_জুন_জুল_অগ_সেপ্ট_অক্টো_নভ_ডিসেম্'.split("_"),
-        weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পত্তিবার_শুক্রুবার_শনিবার'.split("_"),
-        weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পত্তি_শুক্রু_শনি'.split("_"),
-        weekdaysMin : 'রব_সম_মঙ্গ_বু_ব্রিহ_শু_শনি'.split("_"),
-        longDateFormat : {
-            LT : "A h:mm সময়",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY, LT",
-            LLLL : "dddd, D MMMM YYYY, LT"
-        },
-        calendar : {
-            sameDay : '[আজ] LT',
-            nextDay : '[আগামীকাল] LT',
-            nextWeek : 'dddd, LT',
-            lastDay : '[গতকাল] LT',
-            lastWeek : '[গত] dddd, LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%s পরে",
-            past : "%s আগে",
-            s : "কএক সেকেন্ড",
-            m : "এক মিনিট",
-            mm : "%d মিনিট",
-            h : "এক ঘন্টা",
-            hh : "%d ঘন্টা",
-            d : "এক দিন",
-            dd : "%d দিন",
-            M : "এক মাস",
-            MM : "%d মাস",
-            y : "এক বছর",
-            yy : "%d বছর"
-        },
-        preparse: function (string) {
-            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
-                return numberMap[match];
-            });
-        },
-        postformat: function (string) {
-            return string.replace(/\d/g, function (match) {
-                return symbolMap[match];
-            });
-        },
-        //Bengali is a vast language its spoken
-        //in different forms in various parts of the world.
-        //I have just generalized with most common one used
-        meridiem : function (hour, minute, isLower) {
-            if (hour < 4) {
-                return "রাত";
-            } else if (hour < 10) {
-                return "শকাল";
-            } else if (hour < 17) {
-                return "দুপুর";
-            } else if (hour < 20) {
-                return "বিকেল";
-            } else {
-                return "রাত";
-            }
-        },
-        week : {
-            dow : 0, // Sunday is the first day of the week.
-            doy : 6  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/bo.js b/resources/lib/moment/lang/bo.js
deleted file mode 100644 (file)
index f1567ab..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-// moment.js locale configuration
-// locale : tibetan (bo)
-// author : Thupten N. Chakrishar : https://github.com/vajradog
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var symbolMap = {
-        '1': '༡',
-        '2': '༢',
-        '3': '༣',
-        '4': '༤',
-        '5': '༥',
-        '6': '༦',
-        '7': '༧',
-        '8': '༨',
-        '9': '༩',
-        '0': '༠'
-    },
-    numberMap = {
-        '༡': '1',
-        '༢': '2',
-        '༣': '3',
-        '༤': '4',
-        '༥': '5',
-        '༦': '6',
-        '༧': '7',
-        '༨': '8',
-        '༩': '9',
-        '༠': '0'
-    };
-
-    return moment.defineLocale('bo', {
-        months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split("_"),
-        monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split("_"),
-        weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split("_"),
-        weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split("_"),
-        weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split("_"),
-        longDateFormat : {
-            LT : "A h:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY, LT",
-            LLLL : "dddd, D MMMM YYYY, LT"
-        },
-        calendar : {
-            sameDay : '[དི་རིང] LT',
-            nextDay : '[སང་ཉིན] LT',
-            nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',
-            lastDay : '[ཁ་སང] LT',
-            lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%s ལ་",
-            past : "%s སྔན་ལ",
-            s : "ལམ་སང",
-            m : "སྐར་མ་གཅིག",
-            mm : "%d སྐར་མ",
-            h : "ཆུ་ཚོད་གཅིག",
-            hh : "%d ཆུ་ཚོད",
-            d : "ཉིན་གཅིག",
-            dd : "%d ཉིན་",
-            M : "ཟླ་བ་གཅིག",
-            MM : "%d ཟླ་བ",
-            y : "ལོ་གཅིག",
-            yy : "%d ལོ"
-        },
-        preparse: function (string) {
-            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
-                return numberMap[match];
-            });
-        },
-        postformat: function (string) {
-            return string.replace(/\d/g, function (match) {
-                return symbolMap[match];
-            });
-        },
-        meridiem : function (hour, minute, isLower) {
-            if (hour < 4) {
-                return "མཚན་མོ";
-            } else if (hour < 10) {
-                return "ཞོགས་ཀས";
-            } else if (hour < 17) {
-                return "ཉིན་གུང";
-            } else if (hour < 20) {
-                return "དགོང་དག";
-            } else {
-                return "མཚན་མོ";
-            }
-        },
-        week : {
-            dow : 0, // Sunday is the first day of the week.
-            doy : 6  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/br.js b/resources/lib/moment/lang/br.js
deleted file mode 100644 (file)
index fb11fe1..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-// moment.js locale configuration
-// locale : breton (br)
-// author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    function relativeTimeWithMutation(number, withoutSuffix, key) {
-        var format = {
-            'mm': "munutenn",
-            'MM': "miz",
-            'dd': "devezh"
-        };
-        return number + ' ' + mutation(format[key], number);
-    }
-
-    function specialMutationForYears(number) {
-        switch (lastNumber(number)) {
-        case 1:
-        case 3:
-        case 4:
-        case 5:
-        case 9:
-            return number + ' bloaz';
-        default:
-            return number + ' vloaz';
-        }
-    }
-
-    function lastNumber(number) {
-        if (number > 9) {
-            return lastNumber(number % 10);
-        }
-        return number;
-    }
-
-    function mutation(text, number) {
-        if (number === 2) {
-            return softMutation(text);
-        }
-        return text;
-    }
-
-    function softMutation(text) {
-        var mutationTable = {
-            'm': 'v',
-            'b': 'v',
-            'd': 'z'
-        };
-        if (mutationTable[text.charAt(0)] === undefined) {
-            return text;
-        }
-        return mutationTable[text.charAt(0)] + text.substring(1);
-    }
-
-    return moment.defineLocale('br', {
-        months : "Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),
-        monthsShort : "Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),
-        weekdays : "Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),
-        weekdaysShort : "Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),
-        weekdaysMin : "Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),
-        longDateFormat : {
-            LT : "h[e]mm A",
-            L : "DD/MM/YYYY",
-            LL : "D [a viz] MMMM YYYY",
-            LLL : "D [a viz] MMMM YYYY LT",
-            LLLL : "dddd, D [a viz] MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay : '[Hiziv da] LT',
-            nextDay : '[Warc\'hoazh da] LT',
-            nextWeek : 'dddd [da] LT',
-            lastDay : '[Dec\'h da] LT',
-            lastWeek : 'dddd [paset da] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "a-benn %s",
-            past : "%s 'zo",
-            s : "un nebeud segondennoù",
-            m : "ur vunutenn",
-            mm : relativeTimeWithMutation,
-            h : "un eur",
-            hh : "%d eur",
-            d : "un devezh",
-            dd : relativeTimeWithMutation,
-            M : "ur miz",
-            MM : relativeTimeWithMutation,
-            y : "ur bloaz",
-            yy : specialMutationForYears
-        },
-        ordinal : function (number) {
-            var output = (number === 1) ? 'añ' : 'vet';
-            return number + output;
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/bs.js b/resources/lib/moment/lang/bs.js
deleted file mode 100644 (file)
index d69015a..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-// moment.js locale configuration
-// locale : bosnian (bs)
-// author : Nedim Cholich : https://github.com/frontyard
-// based on (hr) translation by Bojan Marković
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    function translate(number, withoutSuffix, key) {
-        var result = number + " ";
-        switch (key) {
-        case 'm':
-            return withoutSuffix ? 'jedna minuta' : 'jedne minute';
-        case 'mm':
-            if (number === 1) {
-                result += 'minuta';
-            } else if (number === 2 || number === 3 || number === 4) {
-                result += 'minute';
-            } else {
-                result += 'minuta';
-            }
-            return result;
-        case 'h':
-            return withoutSuffix ? 'jedan sat' : 'jednog sata';
-        case 'hh':
-            if (number === 1) {
-                result += 'sat';
-            } else if (number === 2 || number === 3 || number === 4) {
-                result += 'sata';
-            } else {
-                result += 'sati';
-            }
-            return result;
-        case 'dd':
-            if (number === 1) {
-                result += 'dan';
-            } else {
-                result += 'dana';
-            }
-            return result;
-        case 'MM':
-            if (number === 1) {
-                result += 'mjesec';
-            } else if (number === 2 || number === 3 || number === 4) {
-                result += 'mjeseca';
-            } else {
-                result += 'mjeseci';
-            }
-            return result;
-        case 'yy':
-            if (number === 1) {
-                result += 'godina';
-            } else if (number === 2 || number === 3 || number === 4) {
-                result += 'godine';
-            } else {
-                result += 'godina';
-            }
-            return result;
-        }
-    }
-
-    return moment.defineLocale('bs', {
-        months : "januar_februar_mart_april_maj_juni_juli_avgust_septembar_oktobar_novembar_decembar".split("_"),
-        monthsShort : "jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),
-        weekdays : "nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),
-        weekdaysShort : "ned._pon._uto._sri._čet._pet._sub.".split("_"),
-        weekdaysMin : "ne_po_ut_sr_če_pe_su".split("_"),
-        longDateFormat : {
-            LT : "H:mm",
-            L : "DD. MM. YYYY",
-            LL : "D. MMMM YYYY",
-            LLL : "D. MMMM YYYY LT",
-            LLLL : "dddd, D. MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay  : '[danas u] LT',
-            nextDay  : '[sutra u] LT',
-
-            nextWeek : function () {
-                switch (this.day()) {
-                case 0:
-                    return '[u] [nedjelju] [u] LT';
-                case 3:
-                    return '[u] [srijedu] [u] LT';
-                case 6:
-                    return '[u] [subotu] [u] LT';
-                case 1:
-                case 2:
-                case 4:
-                case 5:
-                    return '[u] dddd [u] LT';
-                }
-            },
-            lastDay  : '[jučer u] LT',
-            lastWeek : function () {
-                switch (this.day()) {
-                case 0:
-                case 3:
-                    return '[prošlu] dddd [u] LT';
-                case 6:
-                    return '[prošle] [subote] [u] LT';
-                case 1:
-                case 2:
-                case 4:
-                case 5:
-                    return '[prošli] dddd [u] LT';
-                }
-            },
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "za %s",
-            past   : "prije %s",
-            s      : "par sekundi",
-            m      : translate,
-            mm     : translate,
-            h      : translate,
-            hh     : translate,
-            d      : "dan",
-            dd     : translate,
-            M      : "mjesec",
-            MM     : translate,
-            y      : "godinu",
-            yy     : translate
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/ca.js b/resources/lib/moment/lang/ca.js
deleted file mode 100644 (file)
index 932c1cb..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-// moment.js locale configuration
-// locale : catalan (ca)
-// author : Juan G. Hurtado : https://github.com/juanghurtado
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('ca', {
-        months : "gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),
-        monthsShort : "gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.".split("_"),
-        weekdays : "diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),
-        weekdaysShort : "dg._dl._dt._dc._dj._dv._ds.".split("_"),
-        weekdaysMin : "Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),
-        longDateFormat : {
-            LT : "H:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay : function () {
-                return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
-            },
-            nextDay : function () {
-                return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
-            },
-            nextWeek : function () {
-                return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
-            },
-            lastDay : function () {
-                return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
-            },
-            lastWeek : function () {
-                return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
-            },
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "en %s",
-            past : "fa %s",
-            s : "uns segons",
-            m : "un minut",
-            mm : "%d minuts",
-            h : "una hora",
-            hh : "%d hores",
-            d : "un dia",
-            dd : "%d dies",
-            M : "un mes",
-            MM : "%d mesos",
-            y : "un any",
-            yy : "%d anys"
-        },
-        ordinal : '%dº',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/cs.js b/resources/lib/moment/lang/cs.js
deleted file mode 100644 (file)
index 085bba0..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-// moment.js locale configuration
-// locale : czech (cs)
-// author : petrbela : https://github.com/petrbela
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var months = "leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),
-        monthsShort = "led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");
-
-    function plural(n) {
-        return (n > 1) && (n < 5) && (~~(n / 10) !== 1);
-    }
-
-    function translate(number, withoutSuffix, key, isFuture) {
-        var result = number + " ";
-        switch (key) {
-        case 's':  // a few seconds / in a few seconds / a few seconds ago
-            return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';
-        case 'm':  // a minute / in a minute / a minute ago
-            return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');
-        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
-            if (withoutSuffix || isFuture) {
-                return result + (plural(number) ? 'minuty' : 'minut');
-            } else {
-                return result + 'minutami';
-            }
-            break;
-        case 'h':  // an hour / in an hour / an hour ago
-            return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
-        case 'hh': // 9 hours / in 9 hours / 9 hours ago
-            if (withoutSuffix || isFuture) {
-                return result + (plural(number) ? 'hodiny' : 'hodin');
-            } else {
-                return result + 'hodinami';
-            }
-            break;
-        case 'd':  // a day / in a day / a day ago
-            return (withoutSuffix || isFuture) ? 'den' : 'dnem';
-        case 'dd': // 9 days / in 9 days / 9 days ago
-            if (withoutSuffix || isFuture) {
-                return result + (plural(number) ? 'dny' : 'dní');
-            } else {
-                return result + 'dny';
-            }
-            break;
-        case 'M':  // a month / in a month / a month ago
-            return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';
-        case 'MM': // 9 months / in 9 months / 9 months ago
-            if (withoutSuffix || isFuture) {
-                return result + (plural(number) ? 'měsíce' : 'měsíců');
-            } else {
-                return result + 'měsíci';
-            }
-            break;
-        case 'y':  // a year / in a year / a year ago
-            return (withoutSuffix || isFuture) ? 'rok' : 'rokem';
-        case 'yy': // 9 years / in 9 years / 9 years ago
-            if (withoutSuffix || isFuture) {
-                return result + (plural(number) ? 'roky' : 'let');
-            } else {
-                return result + 'lety';
-            }
-            break;
-        }
-    }
-
-    return moment.defineLocale('cs', {
-        months : months,
-        monthsShort : monthsShort,
-        monthsParse : (function (months, monthsShort) {
-            var i, _monthsParse = [];
-            for (i = 0; i < 12; i++) {
-                // use custom parser to solve problem with July (červenec)
-                _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
-            }
-            return _monthsParse;
-        }(months, monthsShort)),
-        weekdays : "neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),
-        weekdaysShort : "ne_po_út_st_čt_pá_so".split("_"),
-        weekdaysMin : "ne_po_út_st_čt_pá_so".split("_"),
-        longDateFormat : {
-            LT: "H.mm",
-            L : "DD. MM. YYYY",
-            LL : "D. MMMM YYYY",
-            LLL : "D. MMMM YYYY LT",
-            LLLL : "dddd D. MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay: "[dnes v] LT",
-            nextDay: '[zítra v] LT',
-            nextWeek: function () {
-                switch (this.day()) {
-                case 0:
-                    return '[v neděli v] LT';
-                case 1:
-                case 2:
-                    return '[v] dddd [v] LT';
-                case 3:
-                    return '[ve středu v] LT';
-                case 4:
-                    return '[ve čtvrtek v] LT';
-                case 5:
-                    return '[v pátek v] LT';
-                case 6:
-                    return '[v sobotu v] LT';
-                }
-            },
-            lastDay: '[včera v] LT',
-            lastWeek: function () {
-                switch (this.day()) {
-                case 0:
-                    return '[minulou neděli v] LT';
-                case 1:
-                case 2:
-                    return '[minulé] dddd [v] LT';
-                case 3:
-                    return '[minulou středu v] LT';
-                case 4:
-                case 5:
-                    return '[minulý] dddd [v] LT';
-                case 6:
-                    return '[minulou sobotu v] LT';
-                }
-            },
-            sameElse: "L"
-        },
-        relativeTime : {
-            future : "za %s",
-            past : "před %s",
-            s : translate,
-            m : translate,
-            mm : translate,
-            h : translate,
-            hh : translate,
-            d : translate,
-            dd : translate,
-            M : translate,
-            MM : translate,
-            y : translate,
-            yy : translate
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/cv.js b/resources/lib/moment/lang/cv.js
deleted file mode 100644 (file)
index 0a290d8..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-// moment.js locale configuration
-// locale : chuvash (cv)
-// author : Anatoly Mironov : https://github.com/mirontoli
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('cv', {
-        months : "кăрлач_нарăс_пуш_ака_май_çĕртме_утă_çурла_авăн_юпа_чӳк_раштав".split("_"),
-        monthsShort : "кăр_нар_пуш_ака_май_çĕр_утă_çур_ав_юпа_чӳк_раш".split("_"),
-        weekdays : "вырсарникун_тунтикун_ытларикун_юнкун_кĕçнерникун_эрнекун_шăматкун".split("_"),
-        weekdaysShort : "выр_тун_ытл_юн_кĕç_эрн_шăм".split("_"),
-        weekdaysMin : "вр_тн_ыт_юн_кç_эр_шм".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD-MM-YYYY",
-            LL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ]",
-            LLL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT",
-            LLLL : "dddd, YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT"
-        },
-        calendar : {
-            sameDay: '[Паян] LT [сехетре]',
-            nextDay: '[Ыран] LT [сехетре]',
-            lastDay: '[Ĕнер] LT [сехетре]',
-            nextWeek: '[Çитес] dddd LT [сехетре]',
-            lastWeek: '[Иртнĕ] dddd LT [сехетре]',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : function (output) {
-                var affix = /сехет$/i.exec(output) ? "рен" : /çул$/i.exec(output) ? "тан" : "ран";
-                return output + affix;
-            },
-            past : "%s каялла",
-            s : "пĕр-ик çеккунт",
-            m : "пĕр минут",
-            mm : "%d минут",
-            h : "пĕр сехет",
-            hh : "%d сехет",
-            d : "пĕр кун",
-            dd : "%d кун",
-            M : "пĕр уйăх",
-            MM : "%d уйăх",
-            y : "пĕр çул",
-            yy : "%d çул"
-        },
-        ordinal : '%d-мĕш',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/cy.js b/resources/lib/moment/lang/cy.js
deleted file mode 100644 (file)
index 6231a52..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-// moment.js locale configuration
-// locale : Welsh (cy)
-// author : Robert Allen
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale("cy", {
-        months: "Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),
-        monthsShort: "Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),
-        weekdays: "Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),
-        weekdaysShort: "Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),
-        weekdaysMin: "Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),
-        // time formats are the same as en-gb
-        longDateFormat: {
-            LT: "HH:mm",
-            L: "DD/MM/YYYY",
-            LL: "D MMMM YYYY",
-            LLL: "D MMMM YYYY LT",
-            LLLL: "dddd, D MMMM YYYY LT"
-        },
-        calendar: {
-            sameDay: '[Heddiw am] LT',
-            nextDay: '[Yfory am] LT',
-            nextWeek: 'dddd [am] LT',
-            lastDay: '[Ddoe am] LT',
-            lastWeek: 'dddd [diwethaf am] LT',
-            sameElse: 'L'
-        },
-        relativeTime: {
-            future: "mewn %s",
-            past: "%s yn ôl",
-            s: "ychydig eiliadau",
-            m: "munud",
-            mm: "%d munud",
-            h: "awr",
-            hh: "%d awr",
-            d: "diwrnod",
-            dd: "%d diwrnod",
-            M: "mis",
-            MM: "%d mis",
-            y: "blwyddyn",
-            yy: "%d flynedd"
-        },
-        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
-        ordinal: function (number) {
-            var b = number,
-                output = '',
-                lookup = [
-                    '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed
-                    'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed
-                ];
-
-            if (b > 20) {
-                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
-                    output = 'fed'; // not 30ain, 70ain or 90ain
-                } else {
-                    output = 'ain';
-                }
-            } else if (b > 0) {
-                output = lookup[b];
-            }
-
-            return number + output;
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/da.js b/resources/lib/moment/lang/da.js
deleted file mode 100644 (file)
index 9c1c68f..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-// moment.js locale configuration
-// locale : danish (da)
-// author : Ulrik Nielsen : https://github.com/mrbase
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('da', {
-        months : "januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),
-        monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),
-        weekdays : "søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),
-        weekdaysShort : "søn_man_tir_ons_tor_fre_lør".split("_"),
-        weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D. MMMM YYYY",
-            LLL : "D. MMMM YYYY LT",
-            LLLL : "dddd [d.] D. MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay : '[I dag kl.] LT',
-            nextDay : '[I morgen kl.] LT',
-            nextWeek : 'dddd [kl.] LT',
-            lastDay : '[I går kl.] LT',
-            lastWeek : '[sidste] dddd [kl] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "om %s",
-            past : "%s siden",
-            s : "få sekunder",
-            m : "et minut",
-            mm : "%d minutter",
-            h : "en time",
-            hh : "%d timer",
-            d : "en dag",
-            dd : "%d dage",
-            M : "en måned",
-            MM : "%d måneder",
-            y : "et år",
-            yy : "%d år"
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/de-at.js b/resources/lib/moment/lang/de-at.js
deleted file mode 100644 (file)
index 48d1b88..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-// moment.js locale configuration
-// locale : austrian german (de-at)
-// author : lluchs : https://github.com/lluchs
-// author: Menelion Elensúle: https://github.com/Oire
-// author : Martin Groller : https://github.com/MadMG
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    function processRelativeTime(number, withoutSuffix, key, isFuture) {
-        var format = {
-            'm': ['eine Minute', 'einer Minute'],
-            'h': ['eine Stunde', 'einer Stunde'],
-            'd': ['ein Tag', 'einem Tag'],
-            'dd': [number + ' Tage', number + ' Tagen'],
-            'M': ['ein Monat', 'einem Monat'],
-            'MM': [number + ' Monate', number + ' Monaten'],
-            'y': ['ein Jahr', 'einem Jahr'],
-            'yy': [number + ' Jahre', number + ' Jahren']
-        };
-        return withoutSuffix ? format[key][0] : format[key][1];
-    }
-
-    return moment.defineLocale('de-at', {
-        months : "Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),
-        monthsShort : "Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),
-        weekdays : "Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),
-        weekdaysShort : "So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),
-        weekdaysMin : "So_Mo_Di_Mi_Do_Fr_Sa".split("_"),
-        longDateFormat : {
-            LT: "HH:mm [Uhr]",
-            L : "DD.MM.YYYY",
-            LL : "D. MMMM YYYY",
-            LLL : "D. MMMM YYYY LT",
-            LLLL : "dddd, D. MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay: "[Heute um] LT",
-            sameElse: "L",
-            nextDay: '[Morgen um] LT',
-            nextWeek: 'dddd [um] LT',
-            lastDay: '[Gestern um] LT',
-            lastWeek: '[letzten] dddd [um] LT'
-        },
-        relativeTime : {
-            future : "in %s",
-            past : "vor %s",
-            s : "ein paar Sekunden",
-            m : processRelativeTime,
-            mm : "%d Minuten",
-            h : processRelativeTime,
-            hh : "%d Stunden",
-            d : processRelativeTime,
-            dd : processRelativeTime,
-            M : processRelativeTime,
-            MM : processRelativeTime,
-            y : processRelativeTime,
-            yy : processRelativeTime
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/de.js b/resources/lib/moment/lang/de.js
deleted file mode 100644 (file)
index 0c389f9..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-// moment.js locale configuration
-// locale : german (de)
-// author : lluchs : https://github.com/lluchs
-// author: Menelion Elensúle: https://github.com/Oire
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    function processRelativeTime(number, withoutSuffix, key, isFuture) {
-        var format = {
-            'm': ['eine Minute', 'einer Minute'],
-            'h': ['eine Stunde', 'einer Stunde'],
-            'd': ['ein Tag', 'einem Tag'],
-            'dd': [number + ' Tage', number + ' Tagen'],
-            'M': ['ein Monat', 'einem Monat'],
-            'MM': [number + ' Monate', number + ' Monaten'],
-            'y': ['ein Jahr', 'einem Jahr'],
-            'yy': [number + ' Jahre', number + ' Jahren']
-        };
-        return withoutSuffix ? format[key][0] : format[key][1];
-    }
-
-    return moment.defineLocale('de', {
-        months : "Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),
-        monthsShort : "Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),
-        weekdays : "Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),
-        weekdaysShort : "So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),
-        weekdaysMin : "So_Mo_Di_Mi_Do_Fr_Sa".split("_"),
-        longDateFormat : {
-            LT: "HH:mm [Uhr]",
-            L : "DD.MM.YYYY",
-            LL : "D. MMMM YYYY",
-            LLL : "D. MMMM YYYY LT",
-            LLLL : "dddd, D. MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay: "[Heute um] LT",
-            sameElse: "L",
-            nextDay: '[Morgen um] LT',
-            nextWeek: 'dddd [um] LT',
-            lastDay: '[Gestern um] LT',
-            lastWeek: '[letzten] dddd [um] LT'
-        },
-        relativeTime : {
-            future : "in %s",
-            past : "vor %s",
-            s : "ein paar Sekunden",
-            m : processRelativeTime,
-            mm : "%d Minuten",
-            h : processRelativeTime,
-            hh : "%d Stunden",
-            d : processRelativeTime,
-            dd : processRelativeTime,
-            M : processRelativeTime,
-            MM : processRelativeTime,
-            y : processRelativeTime,
-            yy : processRelativeTime
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/el.js b/resources/lib/moment/lang/el.js
deleted file mode 100644 (file)
index 7f31628..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-// moment.js locale configuration
-// locale : modern greek (el)
-// author : Aggelos Karalias : https://github.com/mehiel
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('el', {
-        monthsNominativeEl : "Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),
-        monthsGenitiveEl : "Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),
-        months : function (momentToFormat, format) {
-            if (/D/.test(format.substring(0, format.indexOf("MMMM")))) { // if there is a day number before 'MMMM'
-                return this._monthsGenitiveEl[momentToFormat.month()];
-            } else {
-                return this._monthsNominativeEl[momentToFormat.month()];
-            }
-        },
-        monthsShort : "Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),
-        weekdays : "Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),
-        weekdaysShort : "Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),
-        weekdaysMin : "Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),
-        meridiem : function (hours, minutes, isLower) {
-            if (hours > 11) {
-                return isLower ? 'μμ' : 'ΜΜ';
-            } else {
-                return isLower ? 'πμ' : 'ΠΜ';
-            }
-        },
-        longDateFormat : {
-            LT : "h:mm A",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd, D MMMM YYYY LT"
-        },
-        calendarEl : {
-            sameDay : '[Σήμερα {}] LT',
-            nextDay : '[Αύριο {}] LT',
-            nextWeek : 'dddd [{}] LT',
-            lastDay : '[Χθες {}] LT',
-            lastWeek : function () {
-                switch (this.day()) {
-                    case 6:
-                        return '[το προηγούμενο] dddd [{}] LT';
-                    default:
-                        return '[την προηγούμενη] dddd [{}] LT';
-                }
-            },
-            sameElse : 'L'
-        },
-        calendar : function (key, mom) {
-            var output = this._calendarEl[key],
-                hours = mom && mom.hours();
-
-            if (typeof output === 'function') {
-                output = output.apply(mom);
-            }
-
-            return output.replace("{}", (hours % 12 === 1 ? "στη" : "στις"));
-        },
-        relativeTime : {
-            future : "σε %s",
-            past : "%s πριν",
-            s : "δευτερόλεπτα",
-            m : "ένα λεπτό",
-            mm : "%d λεπτά",
-            h : "μία ώρα",
-            hh : "%d ώρες",
-            d : "μία μέρα",
-            dd : "%d μέρες",
-            M : "ένας μήνας",
-            MM : "%d μήνες",
-            y : "ένας χρόνος",
-            yy : "%d χρόνια"
-        },
-        ordinal : function (number) {
-            return number + 'η';
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/en-au.js b/resources/lib/moment/lang/en-au.js
deleted file mode 100644 (file)
index 852ecc9..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-// moment.js locale configuration
-// locale : australian english (en-au)
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('en-au', {
-        months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
-        monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
-        weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
-        weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
-        weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
-        longDateFormat : {
-            LT : "h:mm A",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd, D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay : '[Today at] LT',
-            nextDay : '[Tomorrow at] LT',
-            nextWeek : 'dddd [at] LT',
-            lastDay : '[Yesterday at] LT',
-            lastWeek : '[Last] dddd [at] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "in %s",
-            past : "%s ago",
-            s : "a few seconds",
-            m : "a minute",
-            mm : "%d minutes",
-            h : "an hour",
-            hh : "%d hours",
-            d : "a day",
-            dd : "%d days",
-            M : "a month",
-            MM : "%d months",
-            y : "a year",
-            yy : "%d years"
-        },
-        ordinal : function (number) {
-            var b = number % 10,
-                output = (~~(number % 100 / 10) === 1) ? 'th' :
-                (b === 1) ? 'st' :
-                (b === 2) ? 'nd' :
-                (b === 3) ? 'rd' : 'th';
-            return number + output;
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/en-ca.js b/resources/lib/moment/lang/en-ca.js
deleted file mode 100644 (file)
index ce253a8..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-// moment.js locale configuration
-// locale : canadian english (en-ca)
-// author : Jonathan Abourbih : https://github.com/jonbca
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('en-ca', {
-        months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
-        monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
-        weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
-        weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
-        weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
-        longDateFormat : {
-            LT : "h:mm A",
-            L : "YYYY-MM-DD",
-            LL : "D MMMM, YYYY",
-            LLL : "D MMMM, YYYY LT",
-            LLLL : "dddd, D MMMM, YYYY LT"
-        },
-        calendar : {
-            sameDay : '[Today at] LT',
-            nextDay : '[Tomorrow at] LT',
-            nextWeek : 'dddd [at] LT',
-            lastDay : '[Yesterday at] LT',
-            lastWeek : '[Last] dddd [at] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "in %s",
-            past : "%s ago",
-            s : "a few seconds",
-            m : "a minute",
-            mm : "%d minutes",
-            h : "an hour",
-            hh : "%d hours",
-            d : "a day",
-            dd : "%d days",
-            M : "a month",
-            MM : "%d months",
-            y : "a year",
-            yy : "%d years"
-        },
-        ordinal : function (number) {
-            var b = number % 10,
-                output = (~~(number % 100 / 10) === 1) ? 'th' :
-                (b === 1) ? 'st' :
-                (b === 2) ? 'nd' :
-                (b === 3) ? 'rd' : 'th';
-            return number + output;
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/en-gb.js b/resources/lib/moment/lang/en-gb.js
deleted file mode 100644 (file)
index 14ccbab..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-// moment.js locale configuration
-// locale : great britain english (en-gb)
-// author : Chris Gedrim : https://github.com/chrisgedrim
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('en-gb', {
-        months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
-        monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
-        weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
-        weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
-        weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd, D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay : '[Today at] LT',
-            nextDay : '[Tomorrow at] LT',
-            nextWeek : 'dddd [at] LT',
-            lastDay : '[Yesterday at] LT',
-            lastWeek : '[Last] dddd [at] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "in %s",
-            past : "%s ago",
-            s : "a few seconds",
-            m : "a minute",
-            mm : "%d minutes",
-            h : "an hour",
-            hh : "%d hours",
-            d : "a day",
-            dd : "%d days",
-            M : "a month",
-            MM : "%d months",
-            y : "a year",
-            yy : "%d years"
-        },
-        ordinal : function (number) {
-            var b = number % 10,
-                output = (~~(number % 100 / 10) === 1) ? 'th' :
-                (b === 1) ? 'st' :
-                (b === 2) ? 'nd' :
-                (b === 3) ? 'rd' : 'th';
-            return number + output;
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/eo.js b/resources/lib/moment/lang/eo.js
deleted file mode 100644 (file)
index 318385b..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-// moment.js locale configuration
-// locale : esperanto (eo)
-// author : Colin Dean : https://github.com/colindean
-// komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko.
-//          Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni!
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('eo', {
-        months : "januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),
-        monthsShort : "jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),
-        weekdays : "Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"),
-        weekdaysShort : "Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab".split("_"),
-        weekdaysMin : "Di_Lu_Ma_Me_Ĵa_Ve_Sa".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "YYYY-MM-DD",
-            LL : "D[-an de] MMMM, YYYY",
-            LLL : "D[-an de] MMMM, YYYY LT",
-            LLLL : "dddd, [la] D[-an de] MMMM, YYYY LT"
-        },
-        meridiem : function (hours, minutes, isLower) {
-            if (hours > 11) {
-                return isLower ? 'p.t.m.' : 'P.T.M.';
-            } else {
-                return isLower ? 'a.t.m.' : 'A.T.M.';
-            }
-        },
-        calendar : {
-            sameDay : '[Hodiaŭ je] LT',
-            nextDay : '[Morgaŭ je] LT',
-            nextWeek : 'dddd [je] LT',
-            lastDay : '[Hieraŭ je] LT',
-            lastWeek : '[pasinta] dddd [je] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "je %s",
-            past : "antaŭ %s",
-            s : "sekundoj",
-            m : "minuto",
-            mm : "%d minutoj",
-            h : "horo",
-            hh : "%d horoj",
-            d : "tago",//ne 'diurno', ĉar estas uzita por proksimumo
-            dd : "%d tagoj",
-            M : "monato",
-            MM : "%d monatoj",
-            y : "jaro",
-            yy : "%d jaroj"
-        },
-        ordinal : "%da",
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/es.js b/resources/lib/moment/lang/es.js
deleted file mode 100644 (file)
index ed0b564..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-// moment.js locale configuration
-// locale : spanish (es)
-// author : Julio Napurí : https://github.com/julionc
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var monthsShortDot = "ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),
-        monthsShort = "ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");
-
-    return moment.defineLocale('es', {
-        months : "enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),
-        monthsShort : function (m, format) {
-            if (/-MMM-/.test(format)) {
-                return monthsShort[m.month()];
-            } else {
-                return monthsShortDot[m.month()];
-            }
-        },
-        weekdays : "domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),
-        weekdaysShort : "dom._lun._mar._mié._jue._vie._sáb.".split("_"),
-        weekdaysMin : "Do_Lu_Ma_Mi_Ju_Vi_Sá".split("_"),
-        longDateFormat : {
-            LT : "H:mm",
-            L : "DD/MM/YYYY",
-            LL : "D [de] MMMM [del] YYYY",
-            LLL : "D [de] MMMM [del] YYYY LT",
-            LLLL : "dddd, D [de] MMMM [del] YYYY LT"
-        },
-        calendar : {
-            sameDay : function () {
-                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
-            },
-            nextDay : function () {
-                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
-            },
-            nextWeek : function () {
-                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
-            },
-            lastDay : function () {
-                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
-            },
-            lastWeek : function () {
-                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
-            },
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "en %s",
-            past : "hace %s",
-            s : "unos segundos",
-            m : "un minuto",
-            mm : "%d minutos",
-            h : "una hora",
-            hh : "%d horas",
-            d : "un día",
-            dd : "%d días",
-            M : "un mes",
-            MM : "%d meses",
-            y : "un año",
-            yy : "%d años"
-        },
-        ordinal : '%dº',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/et.js b/resources/lib/moment/lang/et.js
deleted file mode 100644 (file)
index 2241529..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-// moment.js locale configuration
-// locale : estonian (et)
-// author : Henry Kehlmann : https://github.com/madhenry
-// improvements : Illimar Tambek : https://github.com/ragulka
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    function processRelativeTime(number, withoutSuffix, key, isFuture) {
-        var format = {
-            's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
-            'm' : ['ühe minuti', 'üks minut'],
-            'mm': [number + ' minuti', number + ' minutit'],
-            'h' : ['ühe tunni', 'tund aega', 'üks tund'],
-            'hh': [number + ' tunni', number + ' tundi'],
-            'd' : ['ühe päeva', 'üks päev'],
-            'M' : ['kuu aja', 'kuu aega', 'üks kuu'],
-            'MM': [number + ' kuu', number + ' kuud'],
-            'y' : ['ühe aasta', 'aasta', 'üks aasta'],
-            'yy': [number + ' aasta', number + ' aastat']
-        };
-        if (withoutSuffix) {
-            return format[key][2] ? format[key][2] : format[key][1];
-        }
-        return isFuture ? format[key][0] : format[key][1];
-    }
-
-    return moment.defineLocale('et', {
-        months        : "jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),
-        monthsShort   : "jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),
-        weekdays      : "pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),
-        weekdaysShort : "P_E_T_K_N_R_L".split("_"),
-        weekdaysMin   : "P_E_T_K_N_R_L".split("_"),
-        longDateFormat : {
-            LT   : "H:mm",
-            L    : "DD.MM.YYYY",
-            LL   : "D. MMMM YYYY",
-            LLL  : "D. MMMM YYYY LT",
-            LLLL : "dddd, D. MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay  : '[Täna,] LT',
-            nextDay  : '[Homme,] LT',
-            nextWeek : '[Järgmine] dddd LT',
-            lastDay  : '[Eile,] LT',
-            lastWeek : '[Eelmine] dddd LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%s pärast",
-            past   : "%s tagasi",
-            s      : processRelativeTime,
-            m      : processRelativeTime,
-            mm     : processRelativeTime,
-            h      : processRelativeTime,
-            hh     : processRelativeTime,
-            d      : processRelativeTime,
-            dd     : '%d päeva',
-            M      : processRelativeTime,
-            MM     : processRelativeTime,
-            y      : processRelativeTime,
-            yy     : processRelativeTime
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/eu.js b/resources/lib/moment/lang/eu.js
deleted file mode 100644 (file)
index fe2dddb..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-// moment.js locale configuration
-// locale : euskara (eu)
-// author : Eneko Illarramendi : https://github.com/eillarra
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('eu', {
-        months : "urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),
-        monthsShort : "urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),
-        weekdays : "igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),
-        weekdaysShort : "ig._al._ar._az._og._ol._lr.".split("_"),
-        weekdaysMin : "ig_al_ar_az_og_ol_lr".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "YYYY-MM-DD",
-            LL : "YYYY[ko] MMMM[ren] D[a]",
-            LLL : "YYYY[ko] MMMM[ren] D[a] LT",
-            LLLL : "dddd, YYYY[ko] MMMM[ren] D[a] LT",
-            l : "YYYY-M-D",
-            ll : "YYYY[ko] MMM D[a]",
-            lll : "YYYY[ko] MMM D[a] LT",
-            llll : "ddd, YYYY[ko] MMM D[a] LT"
-        },
-        calendar : {
-            sameDay : '[gaur] LT[etan]',
-            nextDay : '[bihar] LT[etan]',
-            nextWeek : 'dddd LT[etan]',
-            lastDay : '[atzo] LT[etan]',
-            lastWeek : '[aurreko] dddd LT[etan]',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%s barru",
-            past : "duela %s",
-            s : "segundo batzuk",
-            m : "minutu bat",
-            mm : "%d minutu",
-            h : "ordu bat",
-            hh : "%d ordu",
-            d : "egun bat",
-            dd : "%d egun",
-            M : "hilabete bat",
-            MM : "%d hilabete",
-            y : "urte bat",
-            yy : "%d urte"
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/fa.js b/resources/lib/moment/lang/fa.js
deleted file mode 100644 (file)
index 09c7909..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-// moment.js locale configuration
-// locale : Persian
-// author : Ebrahim Byagowi : https://github.com/ebraminio
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var symbolMap = {
-        '1': '۱',
-        '2': '۲',
-        '3': '۳',
-        '4': '۴',
-        '5': '۵',
-        '6': '۶',
-        '7': '۷',
-        '8': '۸',
-        '9': '۹',
-        '0': '۰'
-    }, numberMap = {
-        '۱': '1',
-        '۲': '2',
-        '۳': '3',
-        '۴': '4',
-        '۵': '5',
-        '۶': '6',
-        '۷': '7',
-        '۸': '8',
-        '۹': '9',
-        '۰': '0'
-    };
-
-    return moment.defineLocale('fa', {
-        months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
-        monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
-        weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
-        weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
-        weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),
-        longDateFormat : {
-            LT : 'HH:mm',
-            L : 'DD/MM/YYYY',
-            LL : 'D MMMM YYYY',
-            LLL : 'D MMMM YYYY LT',
-            LLLL : 'dddd, D MMMM YYYY LT'
-        },
-        meridiem : function (hour, minute, isLower) {
-            if (hour < 12) {
-                return "قبل از ظهر";
-            } else {
-                return "بعد از ظهر";
-            }
-        },
-        calendar : {
-            sameDay : '[امروز ساعت] LT',
-            nextDay : '[فردا ساعت] LT',
-            nextWeek : 'dddd [ساعت] LT',
-            lastDay : '[دیروز ساعت] LT',
-            lastWeek : 'dddd [پیش] [ساعت] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : 'در %s',
-            past : '%s پیش',
-            s : 'چندین ثانیه',
-            m : 'یک دقیقه',
-            mm : '%d دقیقه',
-            h : 'یک ساعت',
-            hh : '%d ساعت',
-            d : 'یک روز',
-            dd : '%d روز',
-            M : 'یک ماه',
-            MM : '%d ماه',
-            y : 'یک سال',
-            yy : '%d سال'
-        },
-        preparse: function (string) {
-            return string.replace(/[۰-۹]/g, function (match) {
-                return numberMap[match];
-            }).replace(/،/g, ',');
-        },
-        postformat: function (string) {
-            return string.replace(/\d/g, function (match) {
-                return symbolMap[match];
-            }).replace(/,/g, '،');
-        },
-        ordinal : '%dم',
-        week : {
-            dow : 6, // Saturday is the first day of the week.
-            doy : 12 // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/fi.js b/resources/lib/moment/lang/fi.js
deleted file mode 100644 (file)
index 2afc5e8..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-// moment.js locale configuration
-// locale : finnish (fi)
-// author : Tarmo Aidantausta : https://github.com/bleadof
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),
-        numbersFuture = [
-            'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',
-            numbersPast[7], numbersPast[8], numbersPast[9]
-        ];
-
-    function translate(number, withoutSuffix, key, isFuture) {
-        var result = "";
-        switch (key) {
-        case 's':
-            return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
-        case 'm':
-            return isFuture ? 'minuutin' : 'minuutti';
-        case 'mm':
-            result = isFuture ? 'minuutin' : 'minuuttia';
-            break;
-        case 'h':
-            return isFuture ? 'tunnin' : 'tunti';
-        case 'hh':
-            result = isFuture ? 'tunnin' : 'tuntia';
-            break;
-        case 'd':
-            return isFuture ? 'päivän' : 'päivä';
-        case 'dd':
-            result = isFuture ? 'päivän' : 'päivää';
-            break;
-        case 'M':
-            return isFuture ? 'kuukauden' : 'kuukausi';
-        case 'MM':
-            result = isFuture ? 'kuukauden' : 'kuukautta';
-            break;
-        case 'y':
-            return isFuture ? 'vuoden' : 'vuosi';
-        case 'yy':
-            result = isFuture ? 'vuoden' : 'vuotta';
-            break;
-        }
-        result = verbalNumber(number, isFuture) + " " + result;
-        return result;
-    }
-
-    function verbalNumber(number, isFuture) {
-        return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;
-    }
-
-    return moment.defineLocale('fi', {
-        months : "tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),
-        monthsShort : "tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),
-        weekdays : "sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),
-        weekdaysShort : "su_ma_ti_ke_to_pe_la".split("_"),
-        weekdaysMin : "su_ma_ti_ke_to_pe_la".split("_"),
-        longDateFormat : {
-            LT : "HH.mm",
-            L : "DD.MM.YYYY",
-            LL : "Do MMMM[ta] YYYY",
-            LLL : "Do MMMM[ta] YYYY, [klo] LT",
-            LLLL : "dddd, Do MMMM[ta] YYYY, [klo] LT",
-            l : "D.M.YYYY",
-            ll : "Do MMM YYYY",
-            lll : "Do MMM YYYY, [klo] LT",
-            llll : "ddd, Do MMM YYYY, [klo] LT"
-        },
-        calendar : {
-            sameDay : '[tänään] [klo] LT',
-            nextDay : '[huomenna] [klo] LT',
-            nextWeek : 'dddd [klo] LT',
-            lastDay : '[eilen] [klo] LT',
-            lastWeek : '[viime] dddd[na] [klo] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%s päästä",
-            past : "%s sitten",
-            s : translate,
-            m : translate,
-            mm : translate,
-            h : translate,
-            hh : translate,
-            d : translate,
-            dd : translate,
-            M : translate,
-            MM : translate,
-            y : translate,
-            yy : translate
-        },
-        ordinal : "%d.",
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/fo.js b/resources/lib/moment/lang/fo.js
deleted file mode 100644 (file)
index cdc9eda..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-// moment.js locale configuration
-// locale : faroese (fo)
-// author : Ragnar Johannesen : https://github.com/ragnar123
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('fo', {
-        months : "januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),
-        monthsShort : "jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),
-        weekdays : "sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),
-        weekdaysShort : "sun_mán_týs_mik_hós_frí_ley".split("_"),
-        weekdaysMin : "su_má_tý_mi_hó_fr_le".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd D. MMMM, YYYY LT"
-        },
-        calendar : {
-            sameDay : '[Í dag kl.] LT',
-            nextDay : '[Í morgin kl.] LT',
-            nextWeek : 'dddd [kl.] LT',
-            lastDay : '[Í gjár kl.] LT',
-            lastWeek : '[síðstu] dddd [kl] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "um %s",
-            past : "%s síðani",
-            s : "fá sekund",
-            m : "ein minutt",
-            mm : "%d minuttir",
-            h : "ein tími",
-            hh : "%d tímar",
-            d : "ein dagur",
-            dd : "%d dagar",
-            M : "ein mánaði",
-            MM : "%d mánaðir",
-            y : "eitt ár",
-            yy : "%d ár"
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/fr-ca.js b/resources/lib/moment/lang/fr-ca.js
deleted file mode 100644 (file)
index 714b11b..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-// moment.js locale configuration
-// locale : canadian french (fr-ca)
-// author : Jonathan Abourbih : https://github.com/jonbca
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('fr-ca', {
-        months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),
-        monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),
-        weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),
-        weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"),
-        weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "YYYY-MM-DD",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay: "[Aujourd'hui à] LT",
-            nextDay: '[Demain à] LT',
-            nextWeek: 'dddd [à] LT',
-            lastDay: '[Hier à] LT',
-            lastWeek: 'dddd [dernier à] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "dans %s",
-            past : "il y a %s",
-            s : "quelques secondes",
-            m : "une minute",
-            mm : "%d minutes",
-            h : "une heure",
-            hh : "%d heures",
-            d : "un jour",
-            dd : "%d jours",
-            M : "un mois",
-            MM : "%d mois",
-            y : "un an",
-            yy : "%d ans"
-        },
-        ordinal : function (number) {
-            return number + (number === 1 ? 'er' : '');
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/fr.js b/resources/lib/moment/lang/fr.js
deleted file mode 100644 (file)
index 106ab11..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-// moment.js locale configuration
-// locale : french (fr)
-// author : John Fischer : https://github.com/jfroffice
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('fr', {
-        months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),
-        monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),
-        weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),
-        weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"),
-        weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay: "[Aujourd'hui à] LT",
-            nextDay: '[Demain à] LT',
-            nextWeek: 'dddd [à] LT',
-            lastDay: '[Hier à] LT',
-            lastWeek: 'dddd [dernier à] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "dans %s",
-            past : "il y a %s",
-            s : "quelques secondes",
-            m : "une minute",
-            mm : "%d minutes",
-            h : "une heure",
-            hh : "%d heures",
-            d : "un jour",
-            dd : "%d jours",
-            M : "un mois",
-            MM : "%d mois",
-            y : "un an",
-            yy : "%d ans"
-        },
-        ordinal : function (number) {
-            return number + (number === 1 ? 'er' : '');
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/gl.js b/resources/lib/moment/lang/gl.js
deleted file mode 100644 (file)
index e82065f..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-// moment.js locale configuration
-// locale : galician (gl)
-// author : Juan G. Hurtado : https://github.com/juanghurtado
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('gl', {
-        months : "Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro".split("_"),
-        monthsShort : "Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.".split("_"),
-        weekdays : "Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado".split("_"),
-        weekdaysShort : "Dom._Lun._Mar._Mér._Xov._Ven._Sáb.".split("_"),
-        weekdaysMin : "Do_Lu_Ma_Mé_Xo_Ve_Sá".split("_"),
-        longDateFormat : {
-            LT : "H:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay : function () {
-                return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
-            },
-            nextDay : function () {
-                return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
-            },
-            nextWeek : function () {
-                return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
-            },
-            lastDay : function () {
-                return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';
-            },
-            lastWeek : function () {
-                return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
-            },
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : function (str) {
-                if (str === "uns segundos") {
-                    return "nuns segundos";
-                }
-                return "en " + str;
-            },
-            past : "hai %s",
-            s : "uns segundos",
-            m : "un minuto",
-            mm : "%d minutos",
-            h : "unha hora",
-            hh : "%d horas",
-            d : "un día",
-            dd : "%d días",
-            M : "un mes",
-            MM : "%d meses",
-            y : "un ano",
-            yy : "%d anos"
-        },
-        ordinal : '%dº',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/he.js b/resources/lib/moment/lang/he.js
deleted file mode 100644 (file)
index 0af4e09..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-// moment.js locale configuration
-// locale : Hebrew (he)
-// author : Tomer Cohen : https://github.com/tomer
-// author : Moshe Simantov : https://github.com/DevelopmentIL
-// author : Tal Ater : https://github.com/TalAter
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('he', {
-        months : "ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),
-        monthsShort : "ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),
-        weekdays : "ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),
-        weekdaysShort : "א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),
-        weekdaysMin : "א_ב_ג_ד_ה_ו_ש".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D [ב]MMMM YYYY",
-            LLL : "D [ב]MMMM YYYY LT",
-            LLLL : "dddd, D [ב]MMMM YYYY LT",
-            l : "D/M/YYYY",
-            ll : "D MMM YYYY",
-            lll : "D MMM YYYY LT",
-            llll : "ddd, D MMM YYYY LT"
-        },
-        calendar : {
-            sameDay : '[היום ב־]LT',
-            nextDay : '[מחר ב־]LT',
-            nextWeek : 'dddd [בשעה] LT',
-            lastDay : '[אתמול ב־]LT',
-            lastWeek : '[ביום] dddd [האחרון בשעה] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "בעוד %s",
-            past : "לפני %s",
-            s : "מספר שניות",
-            m : "דקה",
-            mm : "%d דקות",
-            h : "שעה",
-            hh : function (number) {
-                if (number === 2) {
-                    return "שעתיים";
-                }
-                return number + " שעות";
-            },
-            d : "יום",
-            dd : function (number) {
-                if (number === 2) {
-                    return "יומיים";
-                }
-                return number + " ימים";
-            },
-            M : "חודש",
-            MM : function (number) {
-                if (number === 2) {
-                    return "חודשיים";
-                }
-                return number + " חודשים";
-            },
-            y : "שנה",
-            yy : function (number) {
-                if (number === 2) {
-                    return "שנתיים";
-                }
-                return number + " שנים";
-            }
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/hi.js b/resources/lib/moment/lang/hi.js
deleted file mode 100644 (file)
index 6dd7098..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-// moment.js locale configuration
-// locale : hindi (hi)
-// author : Mayank Singhal : https://github.com/mayanksinghal
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var symbolMap = {
-        '1': '१',
-        '2': '२',
-        '3': '३',
-        '4': '४',
-        '5': '५',
-        '6': '६',
-        '7': '७',
-        '8': '८',
-        '9': '९',
-        '0': '०'
-    },
-    numberMap = {
-        '१': '1',
-        '२': '2',
-        '३': '3',
-        '४': '4',
-        '५': '5',
-        '६': '6',
-        '७': '7',
-        '८': '8',
-        '९': '9',
-        '०': '0'
-    };
-
-    return moment.defineLocale('hi', {
-        months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split("_"),
-        monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split("_"),
-        weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split("_"),
-        weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split("_"),
-        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split("_"),
-        longDateFormat : {
-            LT : "A h:mm बजे",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY, LT",
-            LLLL : "dddd, D MMMM YYYY, LT"
-        },
-        calendar : {
-            sameDay : '[आज] LT',
-            nextDay : '[कल] LT',
-            nextWeek : 'dddd, LT',
-            lastDay : '[कल] LT',
-            lastWeek : '[पिछले] dddd, LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%s में",
-            past : "%s पहले",
-            s : "कुछ ही क्षण",
-            m : "एक मिनट",
-            mm : "%d मिनट",
-            h : "एक घंटा",
-            hh : "%d घंटे",
-            d : "एक दिन",
-            dd : "%d दिन",
-            M : "एक महीने",
-            MM : "%d महीने",
-            y : "एक वर्ष",
-            yy : "%d वर्ष"
-        },
-        preparse: function (string) {
-            return string.replace(/[१२३४५६७८९०]/g, function (match) {
-                return numberMap[match];
-            });
-        },
-        postformat: function (string) {
-            return string.replace(/\d/g, function (match) {
-                return symbolMap[match];
-            });
-        },
-        // Hindi notation for meridiems are quite fuzzy in practice. While there exists
-        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
-        meridiem : function (hour, minute, isLower) {
-            if (hour < 4) {
-                return "रात";
-            } else if (hour < 10) {
-                return "सुबह";
-            } else if (hour < 17) {
-                return "दोपहर";
-            } else if (hour < 20) {
-                return "शाम";
-            } else {
-                return "रात";
-            }
-        },
-        week : {
-            dow : 0, // Sunday is the first day of the week.
-            doy : 6  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/hr.js b/resources/lib/moment/lang/hr.js
deleted file mode 100644 (file)
index 20fe8c1..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-// moment.js locale configuration
-// locale : hrvatski (hr)
-// author : Bojan Marković : https://github.com/bmarkovic
-
-// based on (sl) translation by Robert Sedovšek
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    function translate(number, withoutSuffix, key) {
-        var result = number + " ";
-        switch (key) {
-        case 'm':
-            return withoutSuffix ? 'jedna minuta' : 'jedne minute';
-        case 'mm':
-            if (number === 1) {
-                result += 'minuta';
-            } else if (number === 2 || number === 3 || number === 4) {
-                result += 'minute';
-            } else {
-                result += 'minuta';
-            }
-            return result;
-        case 'h':
-            return withoutSuffix ? 'jedan sat' : 'jednog sata';
-        case 'hh':
-            if (number === 1) {
-                result += 'sat';
-            } else if (number === 2 || number === 3 || number === 4) {
-                result += 'sata';
-            } else {
-                result += 'sati';
-            }
-            return result;
-        case 'dd':
-            if (number === 1) {
-                result += 'dan';
-            } else {
-                result += 'dana';
-            }
-            return result;
-        case 'MM':
-            if (number === 1) {
-                result += 'mjesec';
-            } else if (number === 2 || number === 3 || number === 4) {
-                result += 'mjeseca';
-            } else {
-                result += 'mjeseci';
-            }
-            return result;
-        case 'yy':
-            if (number === 1) {
-                result += 'godina';
-            } else if (number === 2 || number === 3 || number === 4) {
-                result += 'godine';
-            } else {
-                result += 'godina';
-            }
-            return result;
-        }
-    }
-
-    return moment.defineLocale('hr', {
-        months : "sječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_"),
-        monthsShort : "sje._vel._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),
-        weekdays : "nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),
-        weekdaysShort : "ned._pon._uto._sri._čet._pet._sub.".split("_"),
-        weekdaysMin : "ne_po_ut_sr_če_pe_su".split("_"),
-        longDateFormat : {
-            LT : "H:mm",
-            L : "DD. MM. YYYY",
-            LL : "D. MMMM YYYY",
-            LLL : "D. MMMM YYYY LT",
-            LLLL : "dddd, D. MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay  : '[danas u] LT',
-            nextDay  : '[sutra u] LT',
-
-            nextWeek : function () {
-                switch (this.day()) {
-                case 0:
-                    return '[u] [nedjelju] [u] LT';
-                case 3:
-                    return '[u] [srijedu] [u] LT';
-                case 6:
-                    return '[u] [subotu] [u] LT';
-                case 1:
-                case 2:
-                case 4:
-                case 5:
-                    return '[u] dddd [u] LT';
-                }
-            },
-            lastDay  : '[jučer u] LT',
-            lastWeek : function () {
-                switch (this.day()) {
-                case 0:
-                case 3:
-                    return '[prošlu] dddd [u] LT';
-                case 6:
-                    return '[prošle] [subote] [u] LT';
-                case 1:
-                case 2:
-                case 4:
-                case 5:
-                    return '[prošli] dddd [u] LT';
-                }
-            },
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "za %s",
-            past   : "prije %s",
-            s      : "par sekundi",
-            m      : translate,
-            mm     : translate,
-            h      : translate,
-            hh     : translate,
-            d      : "dan",
-            dd     : translate,
-            M      : "mjesec",
-            MM     : translate,
-            y      : "godinu",
-            yy     : translate
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/hu.js b/resources/lib/moment/lang/hu.js
deleted file mode 100644 (file)
index 910f086..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-// moment.js locale configuration
-// locale : hungarian (hu)
-// author : Adam Brunner : https://github.com/adambrunner
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
-
-    function translate(number, withoutSuffix, key, isFuture) {
-        var num = number,
-            suffix;
-
-        switch (key) {
-        case 's':
-            return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';
-        case 'm':
-            return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
-        case 'mm':
-            return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
-        case 'h':
-            return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
-        case 'hh':
-            return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
-        case 'd':
-            return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
-        case 'dd':
-            return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
-        case 'M':
-            return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
-        case 'MM':
-            return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
-        case 'y':
-            return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
-        case 'yy':
-            return num + (isFuture || withoutSuffix ? ' év' : ' éve');
-        }
-
-        return '';
-    }
-
-    function week(isFuture) {
-        return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';
-    }
-
-    return moment.defineLocale('hu', {
-        months : "január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),
-        monthsShort : "jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),
-        weekdays : "vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),
-        weekdaysShort : "vas_hét_kedd_sze_csüt_pén_szo".split("_"),
-        weekdaysMin : "v_h_k_sze_cs_p_szo".split("_"),
-        longDateFormat : {
-            LT : "H:mm",
-            L : "YYYY.MM.DD.",
-            LL : "YYYY. MMMM D.",
-            LLL : "YYYY. MMMM D., LT",
-            LLLL : "YYYY. MMMM D., dddd LT"
-        },
-        meridiem : function (hours, minutes, isLower) {
-            if (hours < 12) {
-                return isLower === true ? 'de' : 'DE';
-            } else {
-                return isLower === true ? 'du' : 'DU';
-            }
-        },
-        calendar : {
-            sameDay : '[ma] LT[-kor]',
-            nextDay : '[holnap] LT[-kor]',
-            nextWeek : function () {
-                return week.call(this, true);
-            },
-            lastDay : '[tegnap] LT[-kor]',
-            lastWeek : function () {
-                return week.call(this, false);
-            },
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%s múlva",
-            past : "%s",
-            s : translate,
-            m : translate,
-            mm : translate,
-            h : translate,
-            hh : translate,
-            d : translate,
-            dd : translate,
-            M : translate,
-            MM : translate,
-            y : translate,
-            yy : translate
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/hy-am.js b/resources/lib/moment/lang/hy-am.js
deleted file mode 100644 (file)
index b6984a2..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-// moment.js locale configuration
-// locale : Armenian (hy-am)
-// author : Armendarabyan : https://github.com/armendarabyan
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    function monthsCaseReplace(m, format) {
-        var months = {
-            'nominative': 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_'),
-            'accusative': 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_')
-        },
-
-        nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
-            'accusative' :
-            'nominative';
-
-        return months[nounCase][m.month()];
-    }
-
-    function monthsShortCaseReplace(m, format) {
-        var monthsShort = 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_');
-
-        return monthsShort[m.month()];
-    }
-
-    function weekdaysCaseReplace(m, format) {
-        var weekdays = 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_');
-
-        return weekdays[m.day()];
-    }
-
-    return moment.defineLocale('hy-am', {
-        months : monthsCaseReplace,
-        monthsShort : monthsShortCaseReplace,
-        weekdays : weekdaysCaseReplace,
-        weekdaysShort : "կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),
-        weekdaysMin : "կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD.MM.YYYY",
-            LL : "D MMMM YYYY թ.",
-            LLL : "D MMMM YYYY թ., LT",
-            LLLL : "dddd, D MMMM YYYY թ., LT"
-        },
-        calendar : {
-            sameDay: '[այսօր] LT',
-            nextDay: '[վաղը] LT',
-            lastDay: '[երեկ] LT',
-            nextWeek: function () {
-                return 'dddd [օրը ժամը] LT';
-            },
-            lastWeek: function () {
-                return '[անցած] dddd [օրը ժամը] LT';
-            },
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "%s հետո",
-            past : "%s առաջ",
-            s : "մի քանի վայրկյան",
-            m : "րոպե",
-            mm : "%d րոպե",
-            h : "ժամ",
-            hh : "%d ժամ",
-            d : "օր",
-            dd : "%d օր",
-            M : "ամիս",
-            MM : "%d ամիս",
-            y : "տարի",
-            yy : "%d տարի"
-        },
-
-        meridiem : function (hour) {
-            if (hour < 4) {
-                return "գիշերվա";
-            } else if (hour < 12) {
-                return "առավոտվա";
-            } else if (hour < 17) {
-                return "ցերեկվա";
-            } else {
-                return "երեկոյան";
-            }
-        },
-
-        ordinal: function (number, period) {
-            switch (period) {
-            case 'DDD':
-            case 'w':
-            case 'W':
-            case 'DDDo':
-                if (number === 1) {
-                    return number + '-ին';
-                }
-                return number + '-րդ';
-            default:
-                return number;
-            }
-        },
-
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/id.js b/resources/lib/moment/lang/id.js
deleted file mode 100644 (file)
index 6043f30..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-// moment.js locale configuration
-// locale : Bahasa Indonesia (id)
-// author : Mohammad Satrio Utomo : https://github.com/tyok
-// reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('id', {
-        months : "Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),
-        monthsShort : "Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),
-        weekdays : "Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),
-        weekdaysShort : "Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),
-        weekdaysMin : "Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),
-        longDateFormat : {
-            LT : "HH.mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY [pukul] LT",
-            LLLL : "dddd, D MMMM YYYY [pukul] LT"
-        },
-        meridiem : function (hours, minutes, isLower) {
-            if (hours < 11) {
-                return 'pagi';
-            } else if (hours < 15) {
-                return 'siang';
-            } else if (hours < 19) {
-                return 'sore';
-            } else {
-                return 'malam';
-            }
-        },
-        calendar : {
-            sameDay : '[Hari ini pukul] LT',
-            nextDay : '[Besok pukul] LT',
-            nextWeek : 'dddd [pukul] LT',
-            lastDay : '[Kemarin pukul] LT',
-            lastWeek : 'dddd [lalu pukul] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "dalam %s",
-            past : "%s yang lalu",
-            s : "beberapa detik",
-            m : "semenit",
-            mm : "%d menit",
-            h : "sejam",
-            hh : "%d jam",
-            d : "sehari",
-            dd : "%d hari",
-            M : "sebulan",
-            MM : "%d bulan",
-            y : "setahun",
-            yy : "%d tahun"
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/is.js b/resources/lib/moment/lang/is.js
deleted file mode 100644 (file)
index ed22406..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-// moment.js locale configuration
-// locale : icelandic (is)
-// author : Hinrik Örn Sigurðsson : https://github.com/hinrik
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    function plural(n) {
-        if (n % 100 === 11) {
-            return true;
-        } else if (n % 10 === 1) {
-            return false;
-        }
-        return true;
-    }
-
-    function translate(number, withoutSuffix, key, isFuture) {
-        var result = number + " ";
-        switch (key) {
-        case 's':
-            return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';
-        case 'm':
-            return withoutSuffix ? 'mínúta' : 'mínútu';
-        case 'mm':
-            if (plural(number)) {
-                return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
-            } else if (withoutSuffix) {
-                return result + 'mínúta';
-            }
-            return result + 'mínútu';
-        case 'hh':
-            if (plural(number)) {
-                return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
-            }
-            return result + 'klukkustund';
-        case 'd':
-            if (withoutSuffix) {
-                return 'dagur';
-            }
-            return isFuture ? 'dag' : 'degi';
-        case 'dd':
-            if (plural(number)) {
-                if (withoutSuffix) {
-                    return result + 'dagar';
-                }
-                return result + (isFuture ? 'daga' : 'dögum');
-            } else if (withoutSuffix) {
-                return result + 'dagur';
-            }
-            return result + (isFuture ? 'dag' : 'degi');
-        case 'M':
-            if (withoutSuffix) {
-                return 'mánuður';
-            }
-            return isFuture ? 'mánuð' : 'mánuði';
-        case 'MM':
-            if (plural(number)) {
-                if (withoutSuffix) {
-                    return result + 'mánuðir';
-                }
-                return result + (isFuture ? 'mánuði' : 'mánuðum');
-            } else if (withoutSuffix) {
-                return result + 'mánuður';
-            }
-            return result + (isFuture ? 'mánuð' : 'mánuði');
-        case 'y':
-            return withoutSuffix || isFuture ? 'ár' : 'ári';
-        case 'yy':
-            if (plural(number)) {
-                return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
-            }
-            return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
-        }
-    }
-
-    return moment.defineLocale('is', {
-        months : "janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),
-        monthsShort : "jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),
-        weekdays : "sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),
-        weekdaysShort : "sun_mán_þri_mið_fim_fös_lau".split("_"),
-        weekdaysMin : "Su_Má_Þr_Mi_Fi_Fö_La".split("_"),
-        longDateFormat : {
-            LT : "H:mm",
-            L : "DD/MM/YYYY",
-            LL : "D. MMMM YYYY",
-            LLL : "D. MMMM YYYY [kl.] LT",
-            LLLL : "dddd, D. MMMM YYYY [kl.] LT"
-        },
-        calendar : {
-            sameDay : '[í dag kl.] LT',
-            nextDay : '[á morgun kl.] LT',
-            nextWeek : 'dddd [kl.] LT',
-            lastDay : '[í gær kl.] LT',
-            lastWeek : '[síðasta] dddd [kl.] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "eftir %s",
-            past : "fyrir %s síðan",
-            s : translate,
-            m : translate,
-            mm : translate,
-            h : "klukkustund",
-            hh : translate,
-            d : translate,
-            dd : translate,
-            M : translate,
-            MM : translate,
-            y : translate,
-            yy : translate
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/it.js b/resources/lib/moment/lang/it.js
deleted file mode 100644 (file)
index a151ccc..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-// moment.js locale configuration
-// locale : italian (it)
-// author : Lorenzo : https://github.com/aliem
-// author: Mattia Larentis: https://github.com/nostalgiaz
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('it', {
-        months : "gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),
-        monthsShort : "gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),
-        weekdays : "Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"),
-        weekdaysShort : "Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),
-        weekdaysMin : "D_L_Ma_Me_G_V_S".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd, D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay: '[Oggi alle] LT',
-            nextDay: '[Domani alle] LT',
-            nextWeek: 'dddd [alle] LT',
-            lastDay: '[Ieri alle] LT',
-            lastWeek: '[lo scorso] dddd [alle] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : function (s) {
-                return ((/^[0-9].+$/).test(s) ? "tra" : "in") + " " + s;
-            },
-            past : "%s fa",
-            s : "alcuni secondi",
-            m : "un minuto",
-            mm : "%d minuti",
-            h : "un'ora",
-            hh : "%d ore",
-            d : "un giorno",
-            dd : "%d giorni",
-            M : "un mese",
-            MM : "%d mesi",
-            y : "un anno",
-            yy : "%d anni"
-        },
-        ordinal: '%dº',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/ja.js b/resources/lib/moment/lang/ja.js
deleted file mode 100644 (file)
index 34c4b89..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-// moment.js locale configuration
-// locale : japanese (ja)
-// author : LI Long : https://github.com/baryon
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('ja', {
-        months : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),
-        monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),
-        weekdays : "日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),
-        weekdaysShort : "日_月_火_水_木_金_土".split("_"),
-        weekdaysMin : "日_月_火_水_木_金_土".split("_"),
-        longDateFormat : {
-            LT : "Ah時m分",
-            L : "YYYY/MM/DD",
-            LL : "YYYY年M月D日",
-            LLL : "YYYY年M月D日LT",
-            LLLL : "YYYY年M月D日LT dddd"
-        },
-        meridiem : function (hour, minute, isLower) {
-            if (hour < 12) {
-                return "午前";
-            } else {
-                return "午後";
-            }
-        },
-        calendar : {
-            sameDay : '[今日] LT',
-            nextDay : '[明日] LT',
-            nextWeek : '[来週]dddd LT',
-            lastDay : '[昨日] LT',
-            lastWeek : '[前週]dddd LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%s後",
-            past : "%s前",
-            s : "数秒",
-            m : "1分",
-            mm : "%d分",
-            h : "1時間",
-            hh : "%d時間",
-            d : "1日",
-            dd : "%d日",
-            M : "1ヶ月",
-            MM : "%dヶ月",
-            y : "1年",
-            yy : "%d年"
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/ka.js b/resources/lib/moment/lang/ka.js
deleted file mode 100644 (file)
index 3134524..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-// moment.js locale configuration
-// locale : Georgian (ka)
-// author : Irakli Janiashvili : https://github.com/irakli-janiashvili
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    function monthsCaseReplace(m, format) {
-        var months = {
-            'nominative': 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
-            'accusative': 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
-        },
-
-        nounCase = (/D[oD] *MMMM?/).test(format) ?
-            'accusative' :
-            'nominative';
-
-        return months[nounCase][m.month()];
-    }
-
-    function weekdaysCaseReplace(m, format) {
-        var weekdays = {
-            'nominative': 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
-            'accusative': 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_')
-        },
-
-        nounCase = (/(წინა|შემდეგ)/).test(format) ?
-            'accusative' :
-            'nominative';
-
-        return weekdays[nounCase][m.day()];
-    }
-
-    return moment.defineLocale('ka', {
-        months : monthsCaseReplace,
-        monthsShort : "იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),
-        weekdays : weekdaysCaseReplace,
-        weekdaysShort : "კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),
-        weekdaysMin : "კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),
-        longDateFormat : {
-            LT : "h:mm A",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd, D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay : '[დღეს] LT[-ზე]',
-            nextDay : '[ხვალ] LT[-ზე]',
-            lastDay : '[გუშინ] LT[-ზე]',
-            nextWeek : '[შემდეგ] dddd LT[-ზე]',
-            lastWeek : '[წინა] dddd LT-ზე',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : function (s) {
-                return (/(წამი|წუთი|საათი|წელი)/).test(s) ?
-                    s.replace(/ი$/, "ში") :
-                    s + "ში";
-            },
-            past : function (s) {
-                if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {
-                    return s.replace(/(ი|ე)$/, "ის წინ");
-                }
-                if ((/წელი/).test(s)) {
-                    return s.replace(/წელი$/, "წლის წინ");
-                }
-            },
-            s : "რამდენიმე წამი",
-            m : "წუთი",
-            mm : "%d წუთი",
-            h : "საათი",
-            hh : "%d საათი",
-            d : "დღე",
-            dd : "%d დღე",
-            M : "თვე",
-            MM : "%d თვე",
-            y : "წელი",
-            yy : "%d წელი"
-        },
-        ordinal : function (number) {
-            if (number === 0) {
-                return number;
-            }
-
-            if (number === 1) {
-                return number + "-ლი";
-            }
-
-            if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {
-                return "მე-" + number;
-            }
-
-            return number + "-ე";
-        },
-        week : {
-            dow : 1,
-            doy : 7
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/km.js b/resources/lib/moment/lang/km.js
deleted file mode 100644 (file)
index f457e8d..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// moment.js locale configuration
-// locale : khmer (km)
-// author : Kruy Vanna : https://github.com/kruyvanna
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('km', {
-        months: "មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),
-        monthsShort: "មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),
-        weekdays: "អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),
-        weekdaysShort: "អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),
-        weekdaysMin: "អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),
-        longDateFormat: {
-            LT: "HH:mm",
-            L: "DD/MM/YYYY",
-            LL: "D MMMM YYYY",
-            LLL: "D MMMM YYYY LT",
-            LLLL: "dddd, D MMMM YYYY LT"
-        },
-        calendar: {
-            sameDay: '[ថ្ងៃនៈ ម៉ោង] LT',
-            nextDay: '[ស្អែក ម៉ោង] LT',
-            nextWeek: 'dddd [ម៉ោង] LT',
-            lastDay: '[ម្សិលមិញ ម៉ោង] LT',
-            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
-            sameElse: 'L'
-        },
-        relativeTime: {
-            future: "%sទៀត",
-            past: "%sមុន",
-            s: "ប៉ុន្មានវិនាទី",
-            m: "មួយនាទី",
-            mm: "%d នាទី",
-            h: "មួយម៉ោង",
-            hh: "%d ម៉ោង",
-            d: "មួយថ្ងៃ",
-            dd: "%d ថ្ងៃ",
-            M: "មួយខែ",
-            MM: "%d ខែ",
-            y: "មួយឆ្នាំ",
-            yy: "%d ឆ្នាំ"
-        },
-        week: {
-            dow: 1, // Monday is the first day of the week.
-            doy: 4 // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/ko.js b/resources/lib/moment/lang/ko.js
deleted file mode 100644 (file)
index 7de2e51..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-// moment.js locale configuration
-// locale : korean (ko)
-//
-// authors
-//
-// - Kyungwook, Park : https://github.com/kyungw00k
-// - Jeeeyul Lee <jeeeyul@gmail.com>
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('ko', {
-        months : "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),
-        monthsShort : "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),
-        weekdays : "일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),
-        weekdaysShort : "일_월_화_수_목_금_토".split("_"),
-        weekdaysMin : "일_월_화_수_목_금_토".split("_"),
-        longDateFormat : {
-            LT : "A h시 mm분",
-            L : "YYYY.MM.DD",
-            LL : "YYYY년 MMMM D일",
-            LLL : "YYYY년 MMMM D일 LT",
-            LLLL : "YYYY년 MMMM D일 dddd LT"
-        },
-        meridiem : function (hour, minute, isUpper) {
-            return hour < 12 ? '오전' : '오후';
-        },
-        calendar : {
-            sameDay : '오늘 LT',
-            nextDay : '내일 LT',
-            nextWeek : 'dddd LT',
-            lastDay : '어제 LT',
-            lastWeek : '지난주 dddd LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%s 후",
-            past : "%s 전",
-            s : "몇초",
-            ss : "%d초",
-            m : "일분",
-            mm : "%d분",
-            h : "한시간",
-            hh : "%d시간",
-            d : "하루",
-            dd : "%d일",
-            M : "한달",
-            MM : "%d달",
-            y : "일년",
-            yy : "%d년"
-        },
-        ordinal : '%d일',
-        meridiemParse : /(오전|오후)/,
-        isPM : function (token) {
-            return token === "오후";
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/lb.js b/resources/lib/moment/lang/lb.js
deleted file mode 100644 (file)
index c878b79..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-// moment.js locale configuration
-// locale : Luxembourgish (lb)
-// author : mweimerskirch : https://github.com/mweimerskirch, David Raison : https://github.com/kwisatz
-
-// Note: Luxembourgish has a very particular phonological rule ("Eifeler Regel") that causes the
-// deletion of the final "n" in certain contexts. That's what the "eifelerRegelAppliesToWeekday"
-// and "eifelerRegelAppliesToNumber" methods are meant for
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    function processRelativeTime(number, withoutSuffix, key, isFuture) {
-        var format = {
-            'm': ['eng Minutt', 'enger Minutt'],
-            'h': ['eng Stonn', 'enger Stonn'],
-            'd': ['een Dag', 'engem Dag'],
-            'M': ['ee Mount', 'engem Mount'],
-            'y': ['ee Joer', 'engem Joer']
-        };
-        return withoutSuffix ? format[key][0] : format[key][1];
-    }
-
-    function processFutureTime(string) {
-        var number = string.substr(0, string.indexOf(' '));
-        if (eifelerRegelAppliesToNumber(number)) {
-            return "a " + string;
-        }
-        return "an " + string;
-    }
-
-    function processPastTime(string) {
-        var number = string.substr(0, string.indexOf(' '));
-        if (eifelerRegelAppliesToNumber(number)) {
-            return "viru " + string;
-        }
-        return "virun " + string;
-    }
-
-    /**
-     * Returns true if the word before the given number loses the "-n" ending.
-     * e.g. "an 10 Deeg" but "a 5 Deeg"
-     *
-     * @param number {integer}
-     * @returns {boolean}
-     */
-    function eifelerRegelAppliesToNumber(number) {
-        number = parseInt(number, 10);
-        if (isNaN(number)) {
-            return false;
-        }
-        if (number < 0) {
-            // Negative Number --> always true
-            return true;
-        } else if (number < 10) {
-            // Only 1 digit
-            if (4 <= number && number <= 7) {
-                return true;
-            }
-            return false;
-        } else if (number < 100) {
-            // 2 digits
-            var lastDigit = number % 10, firstDigit = number / 10;
-            if (lastDigit === 0) {
-                return eifelerRegelAppliesToNumber(firstDigit);
-            }
-            return eifelerRegelAppliesToNumber(lastDigit);
-        } else if (number < 10000) {
-            // 3 or 4 digits --> recursively check first digit
-            while (number >= 10) {
-                number = number / 10;
-            }
-            return eifelerRegelAppliesToNumber(number);
-        } else {
-            // Anything larger than 4 digits: recursively check first n-3 digits
-            number = number / 1000;
-            return eifelerRegelAppliesToNumber(number);
-        }
-    }
-
-    return moment.defineLocale('lb', {
-        months: "Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),
-        monthsShort: "Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),
-        weekdays: "Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),
-        weekdaysShort: "So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),
-        weekdaysMin: "So_Mé_Dë_Më_Do_Fr_Sa".split("_"),
-        longDateFormat: {
-            LT: "H:mm [Auer]",
-            L: "DD.MM.YYYY",
-            LL: "D. MMMM YYYY",
-            LLL: "D. MMMM YYYY LT",
-            LLLL: "dddd, D. MMMM YYYY LT"
-        },
-        calendar: {
-            sameDay: "[Haut um] LT",
-            sameElse: "L",
-            nextDay: '[Muer um] LT',
-            nextWeek: 'dddd [um] LT',
-            lastDay: '[Gëschter um] LT',
-            lastWeek: function () {
-                // Different date string for "Dënschdeg" (Tuesday) and "Donneschdeg" (Thursday) due to phonological rule
-                switch (this.day()) {
-                    case 2:
-                    case 4:
-                        return '[Leschten] dddd [um] LT';
-                    default:
-                        return '[Leschte] dddd [um] LT';
-                }
-            }
-        },
-        relativeTime : {
-            future : processFutureTime,
-            past : processPastTime,
-            s : "e puer Sekonnen",
-            m : processRelativeTime,
-            mm : "%d Minutten",
-            h : processRelativeTime,
-            hh : "%d Stonnen",
-            d : processRelativeTime,
-            dd : "%d Deeg",
-            M : processRelativeTime,
-            MM : "%d Méint",
-            y : processRelativeTime,
-            yy : "%d Joer"
-        },
-        ordinal: '%d.',
-        week: {
-            dow: 1, // Monday is the first day of the week.
-            doy: 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/lt.js b/resources/lib/moment/lang/lt.js
deleted file mode 100644 (file)
index 7d7b93f..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-// moment.js locale configuration
-// locale : Lithuanian (lt)
-// author : Mindaugas Mozūras : https://github.com/mmozuras
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var units = {
-        "m" : "minutė_minutės_minutę",
-        "mm": "minutės_minučių_minutes",
-        "h" : "valanda_valandos_valandą",
-        "hh": "valandos_valandų_valandas",
-        "d" : "diena_dienos_dieną",
-        "dd": "dienos_dienų_dienas",
-        "M" : "mėnuo_mėnesio_mėnesį",
-        "MM": "mėnesiai_mėnesių_mėnesius",
-        "y" : "metai_metų_metus",
-        "yy": "metai_metų_metus"
-    },
-    weekDays = "sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_");
-
-    function translateSeconds(number, withoutSuffix, key, isFuture) {
-        if (withoutSuffix) {
-            return "kelios sekundės";
-        } else {
-            return isFuture ? "kelių sekundžių" : "kelias sekundes";
-        }
-    }
-
-    function translateSingular(number, withoutSuffix, key, isFuture) {
-        return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);
-    }
-
-    function special(number) {
-        return number % 10 === 0 || (number > 10 && number < 20);
-    }
-
-    function forms(key) {
-        return units[key].split("_");
-    }
-
-    function translate(number, withoutSuffix, key, isFuture) {
-        var result = number + " ";
-        if (number === 1) {
-            return result + translateSingular(number, withoutSuffix, key[0], isFuture);
-        } else if (withoutSuffix) {
-            return result + (special(number) ? forms(key)[1] : forms(key)[0]);
-        } else {
-            if (isFuture) {
-                return result + forms(key)[1];
-            } else {
-                return result + (special(number) ? forms(key)[1] : forms(key)[2]);
-            }
-        }
-    }
-
-    function relativeWeekDay(moment, format) {
-        var nominative = format.indexOf('dddd HH:mm') === -1,
-            weekDay = weekDays[moment.day()];
-
-        return nominative ? weekDay : weekDay.substring(0, weekDay.length - 2) + "į";
-    }
-
-    return moment.defineLocale("lt", {
-        months : "sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),
-        monthsShort : "sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),
-        weekdays : relativeWeekDay,
-        weekdaysShort : "Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),
-        weekdaysMin : "S_P_A_T_K_Pn_Š".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "YYYY-MM-DD",
-            LL : "YYYY [m.] MMMM D [d.]",
-            LLL : "YYYY [m.] MMMM D [d.], LT [val.]",
-            LLLL : "YYYY [m.] MMMM D [d.], dddd, LT [val.]",
-            l : "YYYY-MM-DD",
-            ll : "YYYY [m.] MMMM D [d.]",
-            lll : "YYYY [m.] MMMM D [d.], LT [val.]",
-            llll : "YYYY [m.] MMMM D [d.], ddd, LT [val.]"
-        },
-        calendar : {
-            sameDay : "[Šiandien] LT",
-            nextDay : "[Rytoj] LT",
-            nextWeek : "dddd LT",
-            lastDay : "[Vakar] LT",
-            lastWeek : "[Praėjusį] dddd LT",
-            sameElse : "L"
-        },
-        relativeTime : {
-            future : "po %s",
-            past : "prieš %s",
-            s : translateSeconds,
-            m : translateSingular,
-            mm : translate,
-            h : translateSingular,
-            hh : translate,
-            d : translateSingular,
-            dd : translate,
-            M : translateSingular,
-            MM : translate,
-            y : translateSingular,
-            yy : translate
-        },
-        ordinal : function (number) {
-            return number + '-oji';
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/lv.js b/resources/lib/moment/lang/lv.js
deleted file mode 100644 (file)
index 0df007d..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-// moment.js locale configuration
-// locale : latvian (lv)
-// author : Kristaps Karlsons : https://github.com/skakri
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var units = {
-        'mm': 'minūti_minūtes_minūte_minūtes',
-        'hh': 'stundu_stundas_stunda_stundas',
-        'dd': 'dienu_dienas_diena_dienas',
-        'MM': 'mēnesi_mēnešus_mēnesis_mēneši',
-        'yy': 'gadu_gadus_gads_gadi'
-    };
-
-    function format(word, number, withoutSuffix) {
-        var forms = word.split('_');
-        if (withoutSuffix) {
-            return number % 10 === 1 && number !== 11 ? forms[2] : forms[3];
-        } else {
-            return number % 10 === 1 && number !== 11 ? forms[0] : forms[1];
-        }
-    }
-
-    function relativeTimeWithPlural(number, withoutSuffix, key) {
-        return number + ' ' + format(units[key], number, withoutSuffix);
-    }
-
-    return moment.defineLocale('lv', {
-        months : "janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),
-        monthsShort : "jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),
-        weekdays : "svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),
-        weekdaysShort : "Sv_P_O_T_C_Pk_S".split("_"),
-        weekdaysMin : "Sv_P_O_T_C_Pk_S".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD.MM.YYYY",
-            LL : "YYYY. [gada] D. MMMM",
-            LLL : "YYYY. [gada] D. MMMM, LT",
-            LLLL : "YYYY. [gada] D. MMMM, dddd, LT"
-        },
-        calendar : {
-            sameDay : '[Šodien pulksten] LT',
-            nextDay : '[Rīt pulksten] LT',
-            nextWeek : 'dddd [pulksten] LT',
-            lastDay : '[Vakar pulksten] LT',
-            lastWeek : '[Pagājušā] dddd [pulksten] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%s vēlāk",
-            past : "%s agrāk",
-            s : "dažas sekundes",
-            m : "minūti",
-            mm : relativeTimeWithPlural,
-            h : "stundu",
-            hh : relativeTimeWithPlural,
-            d : "dienu",
-            dd : relativeTimeWithPlural,
-            M : "mēnesi",
-            MM : relativeTimeWithPlural,
-            y : "gadu",
-            yy : relativeTimeWithPlural
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/mk.js b/resources/lib/moment/lang/mk.js
deleted file mode 100644 (file)
index 2d8a739..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-// moment.js locale configuration
-// locale : macedonian (mk)
-// author : Borislav Mickov : https://github.com/B0k0
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('mk', {
-        months : "јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),
-        monthsShort : "јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),
-        weekdays : "недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),
-        weekdaysShort : "нед_пон_вто_сре_чет_пет_саб".split("_"),
-        weekdaysMin : "нe_пo_вт_ср_че_пе_сa".split("_"),
-        longDateFormat : {
-            LT : "H:mm",
-            L : "D.MM.YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd, D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay : '[Денес во] LT',
-            nextDay : '[Утре во] LT',
-            nextWeek : 'dddd [во] LT',
-            lastDay : '[Вчера во] LT',
-            lastWeek : function () {
-                switch (this.day()) {
-                case 0:
-                case 3:
-                case 6:
-                    return '[Во изминатата] dddd [во] LT';
-                case 1:
-                case 2:
-                case 4:
-                case 5:
-                    return '[Во изминатиот] dddd [во] LT';
-                }
-            },
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "после %s",
-            past : "пред %s",
-            s : "неколку секунди",
-            m : "минута",
-            mm : "%d минути",
-            h : "час",
-            hh : "%d часа",
-            d : "ден",
-            dd : "%d дена",
-            M : "месец",
-            MM : "%d месеци",
-            y : "година",
-            yy : "%d години"
-        },
-        ordinal : function (number) {
-            var lastDigit = number % 10,
-                last2Digits = number % 100;
-            if (number === 0) {
-                return number + '-ев';
-            } else if (last2Digits === 0) {
-                return number + '-ен';
-            } else if (last2Digits > 10 && last2Digits < 20) {
-                return number + '-ти';
-            } else if (lastDigit === 1) {
-                return number + '-ви';
-            } else if (lastDigit === 2) {
-                return number + '-ри';
-            } else if (lastDigit === 7 || lastDigit === 8) {
-                return number + '-ми';
-            } else {
-                return number + '-ти';
-            }
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/ml.js b/resources/lib/moment/lang/ml.js
deleted file mode 100644 (file)
index d3cee1d..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-// moment.js locale configuration
-// locale : malayalam (ml)
-// author : Floyd Pink : https://github.com/floydpink
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('ml', {
-        months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split("_"),
-        monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split("_"),
-        weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split("_"),
-        weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split("_"),
-        weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split("_"),
-        longDateFormat : {
-            LT : "A h:mm -നു",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY, LT",
-            LLLL : "dddd, D MMMM YYYY, LT"
-        },
-        calendar : {
-            sameDay : '[ഇന്ന്] LT',
-            nextDay : '[നാളെ] LT',
-            nextWeek : 'dddd, LT',
-            lastDay : '[ഇന്നലെ] LT',
-            lastWeek : '[കഴിഞ്ഞ] dddd, LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%s കഴിഞ്ഞ്",
-            past : "%s മുൻപ്",
-            s : "അൽപ നിമിഷങ്ങൾ",
-            m : "ഒരു മിനിറ്റ്",
-            mm : "%d മിനിറ്റ്",
-            h : "ഒരു മണിക്കൂർ",
-            hh : "%d മണിക്കൂർ",
-            d : "ഒരു ദിവസം",
-            dd : "%d ദിവസം",
-            M : "ഒരു മാസം",
-            MM : "%d മാസം",
-            y : "ഒരു വർഷം",
-            yy : "%d വർഷം"
-        },
-        meridiem : function (hour, minute, isLower) {
-            if (hour < 4) {
-                return "രാത്രി";
-            } else if (hour < 12) {
-                return "രാവിലെ";
-            } else if (hour < 17) {
-                return "ഉച്ച കഴിഞ്ഞ്";
-            } else if (hour < 20) {
-                return "വൈകുന്നേരം";
-            } else {
-                return "രാത്രി";
-            }
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/mr.js b/resources/lib/moment/lang/mr.js
deleted file mode 100644 (file)
index 8cbfe7c..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-// moment.js locale configuration
-// locale : Marathi (mr)
-// author : Harshad Kale : https://github.com/kalehv
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var symbolMap = {
-        '1': '१',
-        '2': '२',
-        '3': '३',
-        '4': '४',
-        '5': '५',
-        '6': '६',
-        '7': '७',
-        '8': '८',
-        '9': '९',
-        '0': '०'
-    },
-    numberMap = {
-        '१': '1',
-        '२': '2',
-        '३': '3',
-        '४': '4',
-        '५': '5',
-        '६': '6',
-        '७': '7',
-        '८': '8',
-        '९': '9',
-        '०': '0'
-    };
-
-    return moment.defineLocale('mr', {
-        months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split("_"),
-        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split("_"),
-        weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split("_"),
-        weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split("_"),
-        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split("_"),
-        longDateFormat : {
-            LT : "A h:mm वाजता",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY, LT",
-            LLLL : "dddd, D MMMM YYYY, LT"
-        },
-        calendar : {
-            sameDay : '[आज] LT',
-            nextDay : '[उद्या] LT',
-            nextWeek : 'dddd, LT',
-            lastDay : '[काल] LT',
-            lastWeek: '[मागील] dddd, LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%s नंतर",
-            past : "%s पूर्वी",
-            s : "सेकंद",
-            m: "एक मिनिट",
-            mm: "%d मिनिटे",
-            h : "एक तास",
-            hh : "%d तास",
-            d : "एक दिवस",
-            dd : "%d दिवस",
-            M : "एक महिना",
-            MM : "%d महिने",
-            y : "एक वर्ष",
-            yy : "%d वर्षे"
-        },
-        preparse: function (string) {
-            return string.replace(/[१२३४५६७८९०]/g, function (match) {
-                return numberMap[match];
-            });
-        },
-        postformat: function (string) {
-            return string.replace(/\d/g, function (match) {
-                return symbolMap[match];
-            });
-        },
-        meridiem: function (hour, minute, isLower)
-        {
-            if (hour < 4) {
-                return "रात्री";
-            } else if (hour < 10) {
-                return "सकाळी";
-            } else if (hour < 17) {
-                return "दुपारी";
-            } else if (hour < 20) {
-                return "सायंकाळी";
-            } else {
-                return "रात्री";
-            }
-        },
-        week : {
-            dow : 0, // Sunday is the first day of the week.
-            doy : 6  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/ms-my.js b/resources/lib/moment/lang/ms-my.js
deleted file mode 100644 (file)
index eee412f..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-// moment.js locale configuration
-// locale : Bahasa Malaysia (ms-MY)
-// author : Weldan Jamili : https://github.com/weldan
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('ms-my', {
-        months : "Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),
-        monthsShort : "Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),
-        weekdays : "Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),
-        weekdaysShort : "Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),
-        weekdaysMin : "Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),
-        longDateFormat : {
-            LT : "HH.mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY [pukul] LT",
-            LLLL : "dddd, D MMMM YYYY [pukul] LT"
-        },
-        meridiem : function (hours, minutes, isLower) {
-            if (hours < 11) {
-                return 'pagi';
-            } else if (hours < 15) {
-                return 'tengahari';
-            } else if (hours < 19) {
-                return 'petang';
-            } else {
-                return 'malam';
-            }
-        },
-        calendar : {
-            sameDay : '[Hari ini pukul] LT',
-            nextDay : '[Esok pukul] LT',
-            nextWeek : 'dddd [pukul] LT',
-            lastDay : '[Kelmarin pukul] LT',
-            lastWeek : 'dddd [lepas pukul] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "dalam %s",
-            past : "%s yang lepas",
-            s : "beberapa saat",
-            m : "seminit",
-            mm : "%d minit",
-            h : "sejam",
-            hh : "%d jam",
-            d : "sehari",
-            dd : "%d hari",
-            M : "sebulan",
-            MM : "%d bulan",
-            y : "setahun",
-            yy : "%d tahun"
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/my.js b/resources/lib/moment/lang/my.js
deleted file mode 100644 (file)
index 442d569..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-// moment.js locale configuration
-// locale : Burmese (my)
-// author : Squar team, mysquar.com
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var symbolMap = {
-        '1': '၁',
-        '2': '၂',
-        '3': '၃',
-        '4': '၄',
-        '5': '၅',
-        '6': '၆',
-        '7': '၇',
-        '8': '၈',
-        '9': '၉',
-        '0': '၀'
-    }, numberMap = {
-        '၁': '1',
-        '၂': '2',
-        '၃': '3',
-        '၄': '4',
-        '၅': '5',
-        '၆': '6',
-        '၇': '7',
-        '၈': '8',
-        '၉': '9',
-        '၀': '0'
-    };
-    return moment.defineLocale('my', {
-        months: "ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),
-        monthsShort: "ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),
-        weekdays: "တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),
-        weekdaysShort: "နွေ_လာ_င်္ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),
-        weekdaysMin: "နွေ_လာ_င်္ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),
-        longDateFormat: {
-            LT: "HH:mm",
-            L: "DD/MM/YYYY",
-            LL: "D MMMM YYYY",
-            LLL: "D MMMM YYYY LT",
-            LLLL: "dddd D MMMM YYYY LT"
-        },
-        calendar: {
-            sameDay: '[ယနေ.] LT [မှာ]',
-            nextDay: '[မနက်ဖြန်] LT [မှာ]',
-            nextWeek: 'dddd LT [မှာ]',
-            lastDay: '[မနေ.က] LT [မှာ]',
-            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
-            sameElse: 'L'
-        },
-        relativeTime: {
-            future: "လာမည့် %s မှာ",
-            past: "လွန်ခဲ့သော %s က",
-            s: "စက္ကန်.အနည်းငယ်",
-            m: "တစ်မိနစ်",
-            mm: "%d မိနစ်",
-            h: "တစ်နာရီ",
-            hh: "%d နာရီ",
-            d: "တစ်ရက်",
-            dd: "%d ရက်",
-            M: "တစ်လ",
-            MM: "%d လ",
-            y: "တစ်နှစ်",
-            yy: "%d နှစ်"
-        },
-        preparse: function (string) {
-            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
-                return numberMap[match];
-            });
-        },
-        postformat: function (string) {
-            return string.replace(/\d/g, function (match) {
-                return symbolMap[match];
-            });
-        },
-        week: {
-            dow: 1, // Monday is the first day of the week.
-            doy: 4 // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/nb.js b/resources/lib/moment/lang/nb.js
deleted file mode 100644 (file)
index 5e4a511..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-// moment.js locale configuration
-// locale : norwegian bokmål (nb)
-// authors : Espen Hovlandsdal : https://github.com/rexxars
-//           Sigurd Gartmann : https://github.com/sigurdga
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('nb', {
-        months : "januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),
-        monthsShort : "jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),
-        weekdays : "søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),
-        weekdaysShort : "sø._ma._ti._on._to._fr._lø.".split("_"),
-        weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"),
-        longDateFormat : {
-            LT : "H.mm",
-            L : "DD.MM.YYYY",
-            LL : "D. MMMM YYYY",
-            LLL : "D. MMMM YYYY [kl.] LT",
-            LLLL : "dddd D. MMMM YYYY [kl.] LT"
-        },
-        calendar : {
-            sameDay: '[i dag kl.] LT',
-            nextDay: '[i morgen kl.] LT',
-            nextWeek: 'dddd [kl.] LT',
-            lastDay: '[i går kl.] LT',
-            lastWeek: '[forrige] dddd [kl.] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "om %s",
-            past : "for %s siden",
-            s : "noen sekunder",
-            m : "ett minutt",
-            mm : "%d minutter",
-            h : "en time",
-            hh : "%d timer",
-            d : "en dag",
-            dd : "%d dager",
-            M : "en måned",
-            MM : "%d måneder",
-            y : "ett år",
-            yy : "%d år"
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/ne.js b/resources/lib/moment/lang/ne.js
deleted file mode 100644 (file)
index 836fb4d..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-// moment.js locale configuration
-// locale : nepali/nepalese
-// author : suvash : https://github.com/suvash
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var symbolMap = {
-        '1': '१',
-        '2': '२',
-        '3': '३',
-        '4': '४',
-        '5': '५',
-        '6': '६',
-        '7': '७',
-        '8': '८',
-        '9': '९',
-        '0': '०'
-    },
-    numberMap = {
-        '१': '1',
-        '२': '2',
-        '३': '3',
-        '४': '4',
-        '५': '5',
-        '६': '6',
-        '७': '7',
-        '८': '8',
-        '९': '9',
-        '०': '0'
-    };
-
-    return moment.defineLocale('ne', {
-        months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split("_"),
-        monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split("_"),
-        weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split("_"),
-        weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split("_"),
-        weekdaysMin : 'आइ._सो._मङ्_बु._बि._शु._श.'.split("_"),
-        longDateFormat : {
-            LT : "Aको h:mm बजे",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY, LT",
-            LLLL : "dddd, D MMMM YYYY, LT"
-        },
-        preparse: function (string) {
-            return string.replace(/[१२३४५६७८९०]/g, function (match) {
-                return numberMap[match];
-            });
-        },
-        postformat: function (string) {
-            return string.replace(/\d/g, function (match) {
-                return symbolMap[match];
-            });
-        },
-        meridiem : function (hour, minute, isLower) {
-            if (hour < 3) {
-                return "राती";
-            } else if (hour < 10) {
-                return "बिहान";
-            } else if (hour < 15) {
-                return "दिउँसो";
-            } else if (hour < 18) {
-                return "बेलुका";
-            } else if (hour < 20) {
-                return "साँझ";
-            } else {
-                return "राती";
-            }
-        },
-        calendar : {
-            sameDay : '[आज] LT',
-            nextDay : '[भोली] LT',
-            nextWeek : '[आउँदो] dddd[,] LT',
-            lastDay : '[हिजो] LT',
-            lastWeek : '[गएको] dddd[,] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%sमा",
-            past : "%s अगाडी",
-            s : "केही समय",
-            m : "एक मिनेट",
-            mm : "%d मिनेट",
-            h : "एक घण्टा",
-            hh : "%d घण्टा",
-            d : "एक दिन",
-            dd : "%d दिन",
-            M : "एक महिना",
-            MM : "%d महिना",
-            y : "एक बर्ष",
-            yy : "%d बर्ष"
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/nl.js b/resources/lib/moment/lang/nl.js
deleted file mode 100644 (file)
index 1577673..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-// moment.js locale configuration
-// locale : dutch (nl)
-// author : Joris Röling : https://github.com/jjupiter
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var monthsShortWithDots = "jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),
-        monthsShortWithoutDots = "jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_");
-
-    return moment.defineLocale('nl', {
-        months : "januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),
-        monthsShort : function (m, format) {
-            if (/-MMM-/.test(format)) {
-                return monthsShortWithoutDots[m.month()];
-            } else {
-                return monthsShortWithDots[m.month()];
-            }
-        },
-        weekdays : "zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),
-        weekdaysShort : "zo._ma._di._wo._do._vr._za.".split("_"),
-        weekdaysMin : "Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD-MM-YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay: '[vandaag om] LT',
-            nextDay: '[morgen om] LT',
-            nextWeek: 'dddd [om] LT',
-            lastDay: '[gisteren om] LT',
-            lastWeek: '[afgelopen] dddd [om] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "over %s",
-            past : "%s geleden",
-            s : "een paar seconden",
-            m : "één minuut",
-            mm : "%d minuten",
-            h : "één uur",
-            hh : "%d uur",
-            d : "één dag",
-            dd : "%d dagen",
-            M : "één maand",
-            MM : "%d maanden",
-            y : "één jaar",
-            yy : "%d jaar"
-        },
-        ordinal : function (number) {
-            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/nn.js b/resources/lib/moment/lang/nn.js
deleted file mode 100644 (file)
index e479b45..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-// moment.js locale configuration
-// locale : norwegian nynorsk (nn)
-// author : https://github.com/mechuwind
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('nn', {
-        months : "januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),
-        monthsShort : "jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),
-        weekdays : "sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),
-        weekdaysShort : "sun_mån_tys_ons_tor_fre_lau".split("_"),
-        weekdaysMin : "su_må_ty_on_to_fr_lø".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD.MM.YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay: '[I dag klokka] LT',
-            nextDay: '[I morgon klokka] LT',
-            nextWeek: 'dddd [klokka] LT',
-            lastDay: '[I går klokka] LT',
-            lastWeek: '[Føregåande] dddd [klokka] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "om %s",
-            past : "for %s sidan",
-            s : "nokre sekund",
-            m : "eit minutt",
-            mm : "%d minutt",
-            h : "ein time",
-            hh : "%d timar",
-            d : "ein dag",
-            dd : "%d dagar",
-            M : "ein månad",
-            MM : "%d månader",
-            y : "eit år",
-            yy : "%d år"
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/pl.js b/resources/lib/moment/lang/pl.js
deleted file mode 100644 (file)
index 75e978b..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-// moment.js locale configuration
-// locale : polish (pl)
-// author : Rafal Hirsz : https://github.com/evoL
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var monthsNominative = "styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),
-        monthsSubjective = "stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");
-
-    function plural(n) {
-        return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);
-    }
-
-    function translate(number, withoutSuffix, key) {
-        var result = number + " ";
-        switch (key) {
-        case 'm':
-            return withoutSuffix ? 'minuta' : 'minutę';
-        case 'mm':
-            return result + (plural(number) ? 'minuty' : 'minut');
-        case 'h':
-            return withoutSuffix  ? 'godzina'  : 'godzinę';
-        case 'hh':
-            return result + (plural(number) ? 'godziny' : 'godzin');
-        case 'MM':
-            return result + (plural(number) ? 'miesiące' : 'miesięcy');
-        case 'yy':
-            return result + (plural(number) ? 'lata' : 'lat');
-        }
-    }
-
-    return moment.defineLocale('pl', {
-        months : function (momentToFormat, format) {
-            if (/D MMMM/.test(format)) {
-                return monthsSubjective[momentToFormat.month()];
-            } else {
-                return monthsNominative[momentToFormat.month()];
-            }
-        },
-        monthsShort : "sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),
-        weekdays : "niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),
-        weekdaysShort : "nie_pon_wt_śr_czw_pt_sb".split("_"),
-        weekdaysMin : "N_Pn_Wt_Śr_Cz_Pt_So".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD.MM.YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd, D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay: '[Dziś o] LT',
-            nextDay: '[Jutro o] LT',
-            nextWeek: '[W] dddd [o] LT',
-            lastDay: '[Wczoraj o] LT',
-            lastWeek: function () {
-                switch (this.day()) {
-                case 0:
-                    return '[W zeszłą niedzielę o] LT';
-                case 3:
-                    return '[W zeszłą środę o] LT';
-                case 6:
-                    return '[W zeszłą sobotę o] LT';
-                default:
-                    return '[W zeszły] dddd [o] LT';
-                }
-            },
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "za %s",
-            past : "%s temu",
-            s : "kilka sekund",
-            m : translate,
-            mm : translate,
-            h : translate,
-            hh : translate,
-            d : "1 dzień",
-            dd : '%d dni',
-            M : "miesiąc",
-            MM : translate,
-            y : "rok",
-            yy : translate
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/pt-br.js b/resources/lib/moment/lang/pt-br.js
deleted file mode 100644 (file)
index d577018..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-// moment.js locale configuration
-// locale : brazilian portuguese (pt-br)
-// author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('pt-br', {
-        months : "janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),
-        monthsShort : "jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),
-        weekdays : "domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado".split("_"),
-        weekdaysShort : "dom_seg_ter_qua_qui_sex_sáb".split("_"),
-        weekdaysMin : "dom_2ª_3ª_4ª_5ª_6ª_sáb".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D [de] MMMM [de] YYYY",
-            LLL : "D [de] MMMM [de] YYYY [às] LT",
-            LLLL : "dddd, D [de] MMMM [de] YYYY [às] LT"
-        },
-        calendar : {
-            sameDay: '[Hoje às] LT',
-            nextDay: '[Amanhã às] LT',
-            nextWeek: 'dddd [às] LT',
-            lastDay: '[Ontem às] LT',
-            lastWeek: function () {
-                return (this.day() === 0 || this.day() === 6) ?
-                    '[Último] dddd [às] LT' : // Saturday + Sunday
-                    '[Última] dddd [às] LT'; // Monday - Friday
-            },
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "em %s",
-            past : "%s atrás",
-            s : "segundos",
-            m : "um minuto",
-            mm : "%d minutos",
-            h : "uma hora",
-            hh : "%d horas",
-            d : "um dia",
-            dd : "%d dias",
-            M : "um mês",
-            MM : "%d meses",
-            y : "um ano",
-            yy : "%d anos"
-        },
-        ordinal : '%dº'
-    });
-}));
diff --git a/resources/lib/moment/lang/pt.js b/resources/lib/moment/lang/pt.js
deleted file mode 100644 (file)
index 8086414..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-// moment.js locale configuration
-// locale : portuguese (pt)
-// author : Jefferson : https://github.com/jalex79
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('pt', {
-        months : "janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),
-        monthsShort : "jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),
-        weekdays : "domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado".split("_"),
-        weekdaysShort : "dom_seg_ter_qua_qui_sex_sáb".split("_"),
-        weekdaysMin : "dom_2ª_3ª_4ª_5ª_6ª_sáb".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D [de] MMMM [de] YYYY",
-            LLL : "D [de] MMMM [de] YYYY LT",
-            LLLL : "dddd, D [de] MMMM [de] YYYY LT"
-        },
-        calendar : {
-            sameDay: '[Hoje às] LT',
-            nextDay: '[Amanhã às] LT',
-            nextWeek: 'dddd [às] LT',
-            lastDay: '[Ontem às] LT',
-            lastWeek: function () {
-                return (this.day() === 0 || this.day() === 6) ?
-                    '[Último] dddd [às] LT' : // Saturday + Sunday
-                    '[Última] dddd [às] LT'; // Monday - Friday
-            },
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "em %s",
-            past : "há %s",
-            s : "segundos",
-            m : "um minuto",
-            mm : "%d minutos",
-            h : "uma hora",
-            hh : "%d horas",
-            d : "um dia",
-            dd : "%d dias",
-            M : "um mês",
-            MM : "%d meses",
-            y : "um ano",
-            yy : "%d anos"
-        },
-        ordinal : '%dº',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/ro.js b/resources/lib/moment/lang/ro.js
deleted file mode 100644 (file)
index 21a3293..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-// moment.js locale configuration
-// locale : romanian (ro)
-// author : Vlad Gurdiga : https://github.com/gurdiga
-// author : Valentin Agachi : https://github.com/avaly
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    function relativeTimeWithPlural(number, withoutSuffix, key) {
-        var format = {
-                'mm': 'minute',
-                'hh': 'ore',
-                'dd': 'zile',
-                'MM': 'luni',
-                'yy': 'ani'
-            },
-            separator = ' ';
-        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
-            separator = ' de ';
-        }
-
-        return number + separator + format[key];
-    }
-
-    return moment.defineLocale('ro', {
-        months : "ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),
-        monthsShort : "ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),
-        weekdays : "duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),
-        weekdaysShort : "Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),
-        weekdaysMin : "Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),
-        longDateFormat : {
-            LT : "H:mm",
-            L : "DD.MM.YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY H:mm",
-            LLLL : "dddd, D MMMM YYYY H:mm"
-        },
-        calendar : {
-            sameDay: "[azi la] LT",
-            nextDay: '[mâine la] LT',
-            nextWeek: 'dddd [la] LT',
-            lastDay: '[ieri la] LT',
-            lastWeek: '[fosta] dddd [la] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "peste %s",
-            past : "%s în urmă",
-            s : "câteva secunde",
-            m : "un minut",
-            mm : relativeTimeWithPlural,
-            h : "o oră",
-            hh : relativeTimeWithPlural,
-            d : "o zi",
-            dd : relativeTimeWithPlural,
-            M : "o lună",
-            MM : relativeTimeWithPlural,
-            y : "un an",
-            yy : relativeTimeWithPlural
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/ru.js b/resources/lib/moment/lang/ru.js
deleted file mode 100644 (file)
index 3ae8d23..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-// moment.js locale configuration
-// locale : russian (ru)
-// author : Viktorminator : https://github.com/Viktorminator
-// Author : Menelion Elensúle : https://github.com/Oire
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    function plural(word, num) {
-        var forms = word.split('_');
-        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
-    }
-
-    function relativeTimeWithPlural(number, withoutSuffix, key) {
-        var format = {
-            'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
-            'hh': 'час_часа_часов',
-            'dd': 'день_дня_дней',
-            'MM': 'месяц_месяца_месяцев',
-            'yy': 'год_года_лет'
-        };
-        if (key === 'm') {
-            return withoutSuffix ? 'минута' : 'минуту';
-        }
-        else {
-            return number + ' ' + plural(format[key], +number);
-        }
-    }
-
-    function monthsCaseReplace(m, format) {
-        var months = {
-            'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
-            'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_')
-        },
-
-        nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
-            'accusative' :
-            'nominative';
-
-        return months[nounCase][m.month()];
-    }
-
-    function monthsShortCaseReplace(m, format) {
-        var monthsShort = {
-            'nominative': 'янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
-            'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_')
-        },
-
-        nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
-            'accusative' :
-            'nominative';
-
-        return monthsShort[nounCase][m.month()];
-    }
-
-    function weekdaysCaseReplace(m, format) {
-        var weekdays = {
-            'nominative': 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
-            'accusative': 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_')
-        },
-
-        nounCase = (/\[ ?[Вв] ?(?:прошлую|следующую)? ?\] ?dddd/).test(format) ?
-            'accusative' :
-            'nominative';
-
-        return weekdays[nounCase][m.day()];
-    }
-
-    return moment.defineLocale('ru', {
-        months : monthsCaseReplace,
-        monthsShort : monthsShortCaseReplace,
-        weekdays : weekdaysCaseReplace,
-        weekdaysShort : "вс_пн_вт_ср_чт_пт_сб".split("_"),
-        weekdaysMin : "вс_пн_вт_ср_чт_пт_сб".split("_"),
-        monthsParse : [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[й|я]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i],
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD.MM.YYYY",
-            LL : "D MMMM YYYY г.",
-            LLL : "D MMMM YYYY г., LT",
-            LLLL : "dddd, D MMMM YYYY г., LT"
-        },
-        calendar : {
-            sameDay: '[Сегодня в] LT',
-            nextDay: '[Завтра в] LT',
-            lastDay: '[Вчера в] LT',
-            nextWeek: function () {
-                return this.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT';
-            },
-            lastWeek: function () {
-                switch (this.day()) {
-                case 0:
-                    return '[В прошлое] dddd [в] LT';
-                case 1:
-                case 2:
-                case 4:
-                    return '[В прошлый] dddd [в] LT';
-                case 3:
-                case 5:
-                case 6:
-                    return '[В прошлую] dddd [в] LT';
-                }
-            },
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "через %s",
-            past : "%s назад",
-            s : "несколько секунд",
-            m : relativeTimeWithPlural,
-            mm : relativeTimeWithPlural,
-            h : "час",
-            hh : relativeTimeWithPlural,
-            d : "день",
-            dd : relativeTimeWithPlural,
-            M : "месяц",
-            MM : relativeTimeWithPlural,
-            y : "год",
-            yy : relativeTimeWithPlural
-        },
-
-        meridiemParse: /ночи|утра|дня|вечера/i,
-        isPM : function (input) {
-            return /^(дня|вечера)$/.test(input);
-        },
-
-        meridiem : function (hour, minute, isLower) {
-            if (hour < 4) {
-                return "ночи";
-            } else if (hour < 12) {
-                return "утра";
-            } else if (hour < 17) {
-                return "дня";
-            } else {
-                return "вечера";
-            }
-        },
-
-        ordinal: function (number, period) {
-            switch (period) {
-            case 'M':
-            case 'd':
-            case 'DDD':
-                return number + '-й';
-            case 'D':
-                return number + '-го';
-            case 'w':
-            case 'W':
-                return number + '-я';
-            default:
-                return number;
-            }
-        },
-
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/sk.js b/resources/lib/moment/lang/sk.js
deleted file mode 100644 (file)
index d03fff8..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-// moment.js locale configuration
-// locale : slovak (sk)
-// author : Martin Minka : https://github.com/k2s
-// based on work of petrbela : https://github.com/petrbela
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var months = "január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),
-        monthsShort = "jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");
-
-    function plural(n) {
-        return (n > 1) && (n < 5);
-    }
-
-    function translate(number, withoutSuffix, key, isFuture) {
-        var result = number + " ";
-        switch (key) {
-        case 's':  // a few seconds / in a few seconds / a few seconds ago
-            return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';
-        case 'm':  // a minute / in a minute / a minute ago
-            return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');
-        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
-            if (withoutSuffix || isFuture) {
-                return result + (plural(number) ? 'minúty' : 'minút');
-            } else {
-                return result + 'minútami';
-            }
-            break;
-        case 'h':  // an hour / in an hour / an hour ago
-            return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
-        case 'hh': // 9 hours / in 9 hours / 9 hours ago
-            if (withoutSuffix || isFuture) {
-                return result + (plural(number) ? 'hodiny' : 'hodín');
-            } else {
-                return result + 'hodinami';
-            }
-            break;
-        case 'd':  // a day / in a day / a day ago
-            return (withoutSuffix || isFuture) ? 'deň' : 'dňom';
-        case 'dd': // 9 days / in 9 days / 9 days ago
-            if (withoutSuffix || isFuture) {
-                return result + (plural(number) ? 'dni' : 'dní');
-            } else {
-                return result + 'dňami';
-            }
-            break;
-        case 'M':  // a month / in a month / a month ago
-            return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';
-        case 'MM': // 9 months / in 9 months / 9 months ago
-            if (withoutSuffix || isFuture) {
-                return result + (plural(number) ? 'mesiace' : 'mesiacov');
-            } else {
-                return result + 'mesiacmi';
-            }
-            break;
-        case 'y':  // a year / in a year / a year ago
-            return (withoutSuffix || isFuture) ? 'rok' : 'rokom';
-        case 'yy': // 9 years / in 9 years / 9 years ago
-            if (withoutSuffix || isFuture) {
-                return result + (plural(number) ? 'roky' : 'rokov');
-            } else {
-                return result + 'rokmi';
-            }
-            break;
-        }
-    }
-
-    return moment.defineLocale('sk', {
-        months : months,
-        monthsShort : monthsShort,
-        monthsParse : (function (months, monthsShort) {
-            var i, _monthsParse = [];
-            for (i = 0; i < 12; i++) {
-                // use custom parser to solve problem with July (červenec)
-                _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
-            }
-            return _monthsParse;
-        }(months, monthsShort)),
-        weekdays : "nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),
-        weekdaysShort : "ne_po_ut_st_št_pi_so".split("_"),
-        weekdaysMin : "ne_po_ut_st_št_pi_so".split("_"),
-        longDateFormat : {
-            LT: "H:mm",
-            L : "DD.MM.YYYY",
-            LL : "D. MMMM YYYY",
-            LLL : "D. MMMM YYYY LT",
-            LLLL : "dddd D. MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay: "[dnes o] LT",
-            nextDay: '[zajtra o] LT',
-            nextWeek: function () {
-                switch (this.day()) {
-                case 0:
-                    return '[v nedeľu o] LT';
-                case 1:
-                case 2:
-                    return '[v] dddd [o] LT';
-                case 3:
-                    return '[v stredu o] LT';
-                case 4:
-                    return '[vo štvrtok o] LT';
-                case 5:
-                    return '[v piatok o] LT';
-                case 6:
-                    return '[v sobotu o] LT';
-                }
-            },
-            lastDay: '[včera o] LT',
-            lastWeek: function () {
-                switch (this.day()) {
-                case 0:
-                    return '[minulú nedeľu o] LT';
-                case 1:
-                case 2:
-                    return '[minulý] dddd [o] LT';
-                case 3:
-                    return '[minulú stredu o] LT';
-                case 4:
-                case 5:
-                    return '[minulý] dddd [o] LT';
-                case 6:
-                    return '[minulú sobotu o] LT';
-                }
-            },
-            sameElse: "L"
-        },
-        relativeTime : {
-            future : "za %s",
-            past : "pred %s",
-            s : translate,
-            m : translate,
-            mm : translate,
-            h : translate,
-            hh : translate,
-            d : translate,
-            dd : translate,
-            M : translate,
-            MM : translate,
-            y : translate,
-            yy : translate
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/sl.js b/resources/lib/moment/lang/sl.js
deleted file mode 100644 (file)
index 6174ae6..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-// moment.js locale configuration
-// locale : slovenian (sl)
-// author : Robert Sedovšek : https://github.com/sedovsek
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    function translate(number, withoutSuffix, key) {
-        var result = number + " ";
-        switch (key) {
-        case 'm':
-            return withoutSuffix ? 'ena minuta' : 'eno minuto';
-        case 'mm':
-            if (number === 1) {
-                result += 'minuta';
-            } else if (number === 2) {
-                result += 'minuti';
-            } else if (number === 3 || number === 4) {
-                result += 'minute';
-            } else {
-                result += 'minut';
-            }
-            return result;
-        case 'h':
-            return withoutSuffix ? 'ena ura' : 'eno uro';
-        case 'hh':
-            if (number === 1) {
-                result += 'ura';
-            } else if (number === 2) {
-                result += 'uri';
-            } else if (number === 3 || number === 4) {
-                result += 'ure';
-            } else {
-                result += 'ur';
-            }
-            return result;
-        case 'dd':
-            if (number === 1) {
-                result += 'dan';
-            } else {
-                result += 'dni';
-            }
-            return result;
-        case 'MM':
-            if (number === 1) {
-                result += 'mesec';
-            } else if (number === 2) {
-                result += 'meseca';
-            } else if (number === 3 || number === 4) {
-                result += 'mesece';
-            } else {
-                result += 'mesecev';
-            }
-            return result;
-        case 'yy':
-            if (number === 1) {
-                result += 'leto';
-            } else if (number === 2) {
-                result += 'leti';
-            } else if (number === 3 || number === 4) {
-                result += 'leta';
-            } else {
-                result += 'let';
-            }
-            return result;
-        }
-    }
-
-    return moment.defineLocale('sl', {
-        months : "januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),
-        monthsShort : "jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),
-        weekdays : "nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),
-        weekdaysShort : "ned._pon._tor._sre._čet._pet._sob.".split("_"),
-        weekdaysMin : "ne_po_to_sr_če_pe_so".split("_"),
-        longDateFormat : {
-            LT : "H:mm",
-            L : "DD. MM. YYYY",
-            LL : "D. MMMM YYYY",
-            LLL : "D. MMMM YYYY LT",
-            LLLL : "dddd, D. MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay  : '[danes ob] LT',
-            nextDay  : '[jutri ob] LT',
-
-            nextWeek : function () {
-                switch (this.day()) {
-                case 0:
-                    return '[v] [nedeljo] [ob] LT';
-                case 3:
-                    return '[v] [sredo] [ob] LT';
-                case 6:
-                    return '[v] [soboto] [ob] LT';
-                case 1:
-                case 2:
-                case 4:
-                case 5:
-                    return '[v] dddd [ob] LT';
-                }
-            },
-            lastDay  : '[včeraj ob] LT',
-            lastWeek : function () {
-                switch (this.day()) {
-                case 0:
-                case 3:
-                case 6:
-                    return '[prejšnja] dddd [ob] LT';
-                case 1:
-                case 2:
-                case 4:
-                case 5:
-                    return '[prejšnji] dddd [ob] LT';
-                }
-            },
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "čez %s",
-            past   : "%s nazaj",
-            s      : "nekaj sekund",
-            m      : translate,
-            mm     : translate,
-            h      : translate,
-            hh     : translate,
-            d      : "en dan",
-            dd     : translate,
-            M      : "en mesec",
-            MM     : translate,
-            y      : "eno leto",
-            yy     : translate
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/sq.js b/resources/lib/moment/lang/sq.js
deleted file mode 100644 (file)
index 4a3dfea..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-// moment.js locale configuration
-// locale : Albanian (sq)
-// author : Flakërim Ismani : https://github.com/flakerimi
-// author: Menelion Elensúle: https://github.com/Oire (tests)
-// author : Oerd Cukalla : https://github.com/oerd (fixes)
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('sq', {
-        months : "Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),
-        monthsShort : "Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),
-        weekdays : "E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),
-        weekdaysShort : "Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),
-        weekdaysMin : "D_H_Ma_Më_E_P_Sh".split("_"),
-        meridiem : function (hours, minutes, isLower) {
-            return hours < 12 ? 'PD' : 'MD';
-        },
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd, D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay : '[Sot në] LT',
-            nextDay : '[Nesër në] LT',
-            nextWeek : 'dddd [në] LT',
-            lastDay : '[Dje në] LT',
-            lastWeek : 'dddd [e kaluar në] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "në %s",
-            past : "%s më parë",
-            s : "disa sekonda",
-            m : "një minutë",
-            mm : "%d minuta",
-            h : "një orë",
-            hh : "%d orë",
-            d : "një ditë",
-            dd : "%d ditë",
-            M : "një muaj",
-            MM : "%d muaj",
-            y : "një vit",
-            yy : "%d vite"
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/sr-cyrl.js b/resources/lib/moment/lang/sr-cyrl.js
deleted file mode 100644 (file)
index ef6e7ce..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-// moment.js locale configuration
-// locale : Serbian-cyrillic (sr-cyrl)
-// author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var translator = {
-        words: { //Different grammatical cases
-            m: ['један минут', 'једне минуте'],
-            mm: ['минут', 'минуте', 'минута'],
-            h: ['један сат', 'једног сата'],
-            hh: ['сат', 'сата', 'сати'],
-            dd: ['дан', 'дана', 'дана'],
-            MM: ['месец', 'месеца', 'месеци'],
-            yy: ['година', 'године', 'година']
-        },
-        correctGrammaticalCase: function (number, wordKey) {
-            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
-        },
-        translate: function (number, withoutSuffix, key) {
-            var wordKey = translator.words[key];
-            if (key.length === 1) {
-                return withoutSuffix ? wordKey[0] : wordKey[1];
-            } else {
-                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
-            }
-        }
-    };
-
-    return moment.defineLocale('sr-cyrl', {
-        months: ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар'],
-        monthsShort: ['јан.', 'феб.', 'мар.', 'апр.', 'мај', 'јун', 'јул', 'авг.', 'сеп.', 'окт.', 'нов.', 'дец.'],
-        weekdays: ['недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота'],
-        weekdaysShort: ['нед.', 'пон.', 'уто.', 'сре.', 'чет.', 'пет.', 'суб.'],
-        weekdaysMin: ['не', 'по', 'ут', 'ср', 'че', 'пе', 'су'],
-        longDateFormat: {
-            LT: "H:mm",
-            L: "DD. MM. YYYY",
-            LL: "D. MMMM YYYY",
-            LLL: "D. MMMM YYYY LT",
-            LLLL: "dddd, D. MMMM YYYY LT"
-        },
-        calendar: {
-            sameDay: '[данас у] LT',
-            nextDay: '[сутра у] LT',
-
-            nextWeek: function () {
-                switch (this.day()) {
-                case 0:
-                    return '[у] [недељу] [у] LT';
-                case 3:
-                    return '[у] [среду] [у] LT';
-                case 6:
-                    return '[у] [суботу] [у] LT';
-                case 1:
-                case 2:
-                case 4:
-                case 5:
-                    return '[у] dddd [у] LT';
-                }
-            },
-            lastDay  : '[јуче у] LT',
-            lastWeek : function () {
-                var lastWeekDays = [
-                    '[прошле] [недеље] [у] LT',
-                    '[прошлог] [понедељка] [у] LT',
-                    '[прошлог] [уторка] [у] LT',
-                    '[прошле] [среде] [у] LT',
-                    '[прошлог] [четвртка] [у] LT',
-                    '[прошлог] [петка] [у] LT',
-                    '[прошле] [суботе] [у] LT'
-                ];
-                return lastWeekDays[this.day()];
-            },
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "за %s",
-            past   : "пре %s",
-            s      : "неколико секунди",
-            m      : translator.translate,
-            mm     : translator.translate,
-            h      : translator.translate,
-            hh     : translator.translate,
-            d      : "дан",
-            dd     : translator.translate,
-            M      : "месец",
-            MM     : translator.translate,
-            y      : "годину",
-            yy     : translator.translate
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/sr.js b/resources/lib/moment/lang/sr.js
deleted file mode 100644 (file)
index 86e8e84..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-// moment.js locale configuration
-// locale : Serbian-latin (sr)
-// author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var translator = {
-        words: { //Different grammatical cases
-            m: ['jedan minut', 'jedne minute'],
-            mm: ['minut', 'minute', 'minuta'],
-            h: ['jedan sat', 'jednog sata'],
-            hh: ['sat', 'sata', 'sati'],
-            dd: ['dan', 'dana', 'dana'],
-            MM: ['mesec', 'meseca', 'meseci'],
-            yy: ['godina', 'godine', 'godina']
-        },
-        correctGrammaticalCase: function (number, wordKey) {
-            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
-        },
-        translate: function (number, withoutSuffix, key) {
-            var wordKey = translator.words[key];
-            if (key.length === 1) {
-                return withoutSuffix ? wordKey[0] : wordKey[1];
-            } else {
-                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
-            }
-        }
-    };
-
-    return moment.defineLocale('sr', {
-        months: ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar'],
-        monthsShort: ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun', 'jul', 'avg.', 'sep.', 'okt.', 'nov.', 'dec.'],
-        weekdays: ['nedelja', 'ponedeljak', 'utorak', 'sreda', 'četvrtak', 'petak', 'subota'],
-        weekdaysShort: ['ned.', 'pon.', 'uto.', 'sre.', 'čet.', 'pet.', 'sub.'],
-        weekdaysMin: ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'],
-        longDateFormat: {
-            LT: "H:mm",
-            L: "DD. MM. YYYY",
-            LL: "D. MMMM YYYY",
-            LLL: "D. MMMM YYYY LT",
-            LLLL: "dddd, D. MMMM YYYY LT"
-        },
-        calendar: {
-            sameDay: '[danas u] LT',
-            nextDay: '[sutra u] LT',
-
-            nextWeek: function () {
-                switch (this.day()) {
-                case 0:
-                    return '[u] [nedelju] [u] LT';
-                case 3:
-                    return '[u] [sredu] [u] LT';
-                case 6:
-                    return '[u] [subotu] [u] LT';
-                case 1:
-                case 2:
-                case 4:
-                case 5:
-                    return '[u] dddd [u] LT';
-                }
-            },
-            lastDay  : '[juče u] LT',
-            lastWeek : function () {
-                var lastWeekDays = [
-                    '[prošle] [nedelje] [u] LT',
-                    '[prošlog] [ponedeljka] [u] LT',
-                    '[prošlog] [utorka] [u] LT',
-                    '[prošle] [srede] [u] LT',
-                    '[prošlog] [četvrtka] [u] LT',
-                    '[prošlog] [petka] [u] LT',
-                    '[prošle] [subote] [u] LT'
-                ];
-                return lastWeekDays[this.day()];
-            },
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "za %s",
-            past   : "pre %s",
-            s      : "nekoliko sekundi",
-            m      : translator.translate,
-            mm     : translator.translate,
-            h      : translator.translate,
-            hh     : translator.translate,
-            d      : "dan",
-            dd     : translator.translate,
-            M      : "mesec",
-            MM     : translator.translate,
-            y      : "godinu",
-            yy     : translator.translate
-        },
-        ordinal : '%d.',
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/sv.js b/resources/lib/moment/lang/sv.js
deleted file mode 100644 (file)
index 9e39a30..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-// moment.js locale configuration
-// locale : swedish (sv)
-// author : Jens Alm : https://github.com/ulmus
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('sv', {
-        months : "januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),
-        monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),
-        weekdays : "söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),
-        weekdaysShort : "sön_mån_tis_ons_tor_fre_lör".split("_"),
-        weekdaysMin : "sö_må_ti_on_to_fr_lö".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "YYYY-MM-DD",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay: '[Idag] LT',
-            nextDay: '[Imorgon] LT',
-            lastDay: '[Igår] LT',
-            nextWeek: 'dddd LT',
-            lastWeek: '[Förra] dddd[en] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "om %s",
-            past : "för %s sedan",
-            s : "några sekunder",
-            m : "en minut",
-            mm : "%d minuter",
-            h : "en timme",
-            hh : "%d timmar",
-            d : "en dag",
-            dd : "%d dagar",
-            M : "en månad",
-            MM : "%d månader",
-            y : "ett år",
-            yy : "%d år"
-        },
-        ordinal : function (number) {
-            var b = number % 10,
-                output = (~~(number % 100 / 10) === 1) ? 'e' :
-                (b === 1) ? 'a' :
-                (b === 2) ? 'a' :
-                (b === 3) ? 'e' : 'e';
-            return number + output;
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/ta.js b/resources/lib/moment/lang/ta.js
deleted file mode 100644 (file)
index 963d403..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-// moment.js locale configuration
-// locale : tamil (ta)
-// author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    /*var symbolMap = {
-            '1': '௧',
-            '2': '௨',
-            '3': '௩',
-            '4': '௪',
-            '5': '௫',
-            '6': '௬',
-            '7': '௭',
-            '8': '௮',
-            '9': '௯',
-            '0': '௦'
-        },
-        numberMap = {
-            '௧': '1',
-            '௨': '2',
-            '௩': '3',
-            '௪': '4',
-            '௫': '5',
-            '௬': '6',
-            '௭': '7',
-            '௮': '8',
-            '௯': '9',
-            '௦': '0'
-        }; */
-
-    return moment.defineLocale('ta', {
-        months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split("_"),
-        monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split("_"),
-        weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split("_"),
-        weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split("_"),
-        weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY, LT",
-            LLLL : "dddd, D MMMM YYYY, LT"
-        },
-        calendar : {
-            sameDay : '[இன்று] LT',
-            nextDay : '[நாளை] LT',
-            nextWeek : 'dddd, LT',
-            lastDay : '[நேற்று] LT',
-            lastWeek : '[கடந்த வாரம்] dddd, LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%s இல்",
-            past : "%s முன்",
-            s : "ஒரு சில விநாடிகள்",
-            m : "ஒரு நிமிடம்",
-            mm : "%d நிமிடங்கள்",
-            h : "ஒரு மணி நேரம்",
-            hh : "%d மணி நேரம்",
-            d : "ஒரு நாள்",
-            dd : "%d நாட்கள்",
-            M : "ஒரு மாதம்",
-            MM : "%d மாதங்கள்",
-            y : "ஒரு வருடம்",
-            yy : "%d ஆண்டுகள்"
-        },
-/*        preparse: function (string) {
-            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
-                return numberMap[match];
-            });
-        },
-        postformat: function (string) {
-            return string.replace(/\d/g, function (match) {
-                return symbolMap[match];
-            });
-        },*/
-        ordinal : function (number) {
-            return number + 'வது';
-        },
-
-
-        // refer http://ta.wikipedia.org/s/1er1
-
-        meridiem : function (hour, minute, isLower) {
-            if (hour >= 6 && hour <= 10) {
-                return " காலை";
-            } else if (hour >= 10 && hour <= 14) {
-                return " நண்பகல்";
-            } else if (hour >= 14 && hour <= 18) {
-                return " எற்பாடு";
-            } else if (hour >= 18 && hour <= 20) {
-                return " மாலை";
-            } else if (hour >= 20 && hour <= 24) {
-                return " இரவு";
-            } else if (hour >= 0 && hour <= 6) {
-                return " வைகறை";
-            }
-        },
-        week : {
-            dow : 0, // Sunday is the first day of the week.
-            doy : 6  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/th.js b/resources/lib/moment/lang/th.js
deleted file mode 100644 (file)
index 30b41e6..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-// moment.js locale configuration
-// locale : thai (th)
-// author : Kridsada Thanabulpong : https://github.com/sirn
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('th', {
-        months : "มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),
-        monthsShort : "มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา".split("_"),
-        weekdays : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),
-        weekdaysShort : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"), // yes, three characters difference
-        weekdaysMin : "อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),
-        longDateFormat : {
-            LT : "H นาฬิกา m นาที",
-            L : "YYYY/MM/DD",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY เวลา LT",
-            LLLL : "วันddddที่ D MMMM YYYY เวลา LT"
-        },
-        meridiem : function (hour, minute, isLower) {
-            if (hour < 12) {
-                return "ก่อนเที่ยง";
-            } else {
-                return "หลังเที่ยง";
-            }
-        },
-        calendar : {
-            sameDay : '[วันนี้ เวลา] LT',
-            nextDay : '[พรุ่งนี้ เวลา] LT',
-            nextWeek : 'dddd[หน้า เวลา] LT',
-            lastDay : '[เมื่อวานนี้ เวลา] LT',
-            lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "อีก %s",
-            past : "%sที่แล้ว",
-            s : "ไม่กี่วินาที",
-            m : "1 นาที",
-            mm : "%d นาที",
-            h : "1 ชั่วโมง",
-            hh : "%d ชั่วโมง",
-            d : "1 วัน",
-            dd : "%d วัน",
-            M : "1 เดือน",
-            MM : "%d เดือน",
-            y : "1 ปี",
-            yy : "%d ปี"
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/tl-ph.js b/resources/lib/moment/lang/tl-ph.js
deleted file mode 100644 (file)
index dfacf18..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-// moment.js locale configuration
-// locale : Tagalog/Filipino (tl-ph)
-// author : Dan Hagman
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('tl-ph', {
-        months : "Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),
-        monthsShort : "Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),
-        weekdays : "Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),
-        weekdaysShort : "Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),
-        weekdaysMin : "Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "MM/D/YYYY",
-            LL : "MMMM D, YYYY",
-            LLL : "MMMM D, YYYY LT",
-            LLLL : "dddd, MMMM DD, YYYY LT"
-        },
-        calendar : {
-            sameDay: "[Ngayon sa] LT",
-            nextDay: '[Bukas sa] LT',
-            nextWeek: 'dddd [sa] LT',
-            lastDay: '[Kahapon sa] LT',
-            lastWeek: 'dddd [huling linggo] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "sa loob ng %s",
-            past : "%s ang nakalipas",
-            s : "ilang segundo",
-            m : "isang minuto",
-            mm : "%d minuto",
-            h : "isang oras",
-            hh : "%d oras",
-            d : "isang araw",
-            dd : "%d araw",
-            M : "isang buwan",
-            MM : "%d buwan",
-            y : "isang taon",
-            yy : "%d taon"
-        },
-        ordinal : function (number) {
-            return number;
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/tr.js b/resources/lib/moment/lang/tr.js
deleted file mode 100644 (file)
index e6c2ada..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-// moment.js locale configuration
-// locale : turkish (tr)
-// authors : Erhan Gundogan : https://github.com/erhangundogan,
-//           Burak Yiğit Kaya: https://github.com/BYK
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    var suffixes = {
-        1: "'inci",
-        5: "'inci",
-        8: "'inci",
-        70: "'inci",
-        80: "'inci",
-
-        2: "'nci",
-        7: "'nci",
-        20: "'nci",
-        50: "'nci",
-
-        3: "'üncü",
-        4: "'üncü",
-        100: "'üncü",
-
-        6: "'ncı",
-
-        9: "'uncu",
-        10: "'uncu",
-        30: "'uncu",
-
-        60: "'ıncı",
-        90: "'ıncı"
-    };
-
-    return moment.defineLocale('tr', {
-        months : "Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),
-        monthsShort : "Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),
-        weekdays : "Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),
-        weekdaysShort : "Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),
-        weekdaysMin : "Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD.MM.YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd, D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay : '[bugün saat] LT',
-            nextDay : '[yarın saat] LT',
-            nextWeek : '[haftaya] dddd [saat] LT',
-            lastDay : '[dün] LT',
-            lastWeek : '[geçen hafta] dddd [saat] LT',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "%s sonra",
-            past : "%s önce",
-            s : "birkaç saniye",
-            m : "bir dakika",
-            mm : "%d dakika",
-            h : "bir saat",
-            hh : "%d saat",
-            d : "bir gün",
-            dd : "%d gün",
-            M : "bir ay",
-            MM : "%d ay",
-            y : "bir yıl",
-            yy : "%d yıl"
-        },
-        ordinal : function (number) {
-            if (number === 0) {  // special case for zero
-                return number + "'ıncı";
-            }
-            var a = number % 10,
-                b = number % 100 - a,
-                c = number >= 100 ? 100 : null;
-
-            return number + (suffixes[a] || suffixes[b] || suffixes[c]);
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/tzm-latn.js b/resources/lib/moment/lang/tzm-latn.js
deleted file mode 100644 (file)
index 1411e16..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// moment.js locale configuration
-// locale : Morocco Central Atlas Tamaziɣt in Latin (tzm-latn)
-// author : Abdel Said : https://github.com/abdelsaid
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('tzm-latn', {
-        months : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),
-        monthsShort : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),
-        weekdays : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),
-        weekdaysShort : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),
-        weekdaysMin : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay: "[asdkh g] LT",
-            nextDay: '[aska g] LT',
-            nextWeek: 'dddd [g] LT',
-            lastDay: '[assant g] LT',
-            lastWeek: 'dddd [g] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "dadkh s yan %s",
-            past : "yan %s",
-            s : "imik",
-            m : "minuḍ",
-            mm : "%d minuḍ",
-            h : "saɛa",
-            hh : "%d tassaɛin",
-            d : "ass",
-            dd : "%d ossan",
-            M : "ayowr",
-            MM : "%d iyyirn",
-            y : "asgas",
-            yy : "%d isgasn"
-        },
-        week : {
-            dow : 6, // Saturday is the first day of the week.
-            doy : 12  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/tzm.js b/resources/lib/moment/lang/tzm.js
deleted file mode 100644 (file)
index 615eb97..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// moment.js locale configuration
-// locale : Morocco Central Atlas Tamaziɣt (tzm)
-// author : Abdel Said : https://github.com/abdelsaid
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('tzm', {
-        months : "ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),
-        monthsShort : "ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),
-        weekdays : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),
-        weekdaysShort : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),
-        weekdaysMin : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "dddd D MMMM YYYY LT"
-        },
-        calendar : {
-            sameDay: "[ⴰⵙⴷⵅ ⴴ] LT",
-            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
-            nextWeek: 'dddd [ⴴ] LT',
-            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
-            lastWeek: 'dddd [ⴴ] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",
-            past : "ⵢⴰⵏ %s",
-            s : "ⵉⵎⵉⴽ",
-            m : "ⵎⵉⵏⵓⴺ",
-            mm : "%d ⵎⵉⵏⵓⴺ",
-            h : "ⵙⴰⵄⴰ",
-            hh : "%d ⵜⴰⵙⵙⴰⵄⵉⵏ",
-            d : "ⴰⵙⵙ",
-            dd : "%d oⵙⵙⴰⵏ",
-            M : "ⴰⵢoⵓⵔ",
-            MM : "%d ⵉⵢⵢⵉⵔⵏ",
-            y : "ⴰⵙⴳⴰⵙ",
-            yy : "%d ⵉⵙⴳⴰⵙⵏ"
-        },
-        week : {
-            dow : 6, // Saturday is the first day of the week.
-            doy : 12  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/uk.js b/resources/lib/moment/lang/uk.js
deleted file mode 100644 (file)
index f27d9f3..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-// moment.js locale configuration
-// locale : ukrainian (uk)
-// author : zemlanin : https://github.com/zemlanin
-// Author : Menelion Elensúle : https://github.com/Oire
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    function plural(word, num) {
-        var forms = word.split('_');
-        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
-    }
-
-    function relativeTimeWithPlural(number, withoutSuffix, key) {
-        var format = {
-            'mm': 'хвилина_хвилини_хвилин',
-            'hh': 'година_години_годин',
-            'dd': 'день_дні_днів',
-            'MM': 'місяць_місяці_місяців',
-            'yy': 'рік_роки_років'
-        };
-        if (key === 'm') {
-            return withoutSuffix ? 'хвилина' : 'хвилину';
-        }
-        else if (key === 'h') {
-            return withoutSuffix ? 'година' : 'годину';
-        }
-        else {
-            return number + ' ' + plural(format[key], +number);
-        }
-    }
-
-    function monthsCaseReplace(m, format) {
-        var months = {
-            'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'),
-            'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_')
-        },
-
-        nounCase = (/D[oD]? *MMMM?/).test(format) ?
-            'accusative' :
-            'nominative';
-
-        return months[nounCase][m.month()];
-    }
-
-    function weekdaysCaseReplace(m, format) {
-        var weekdays = {
-            'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),
-            'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),
-            'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')
-        },
-
-        nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ?
-            'accusative' :
-            ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ?
-                'genitive' :
-                'nominative');
-
-        return weekdays[nounCase][m.day()];
-    }
-
-    function processHoursFunction(str) {
-        return function () {
-            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
-        };
-    }
-
-    return moment.defineLocale('uk', {
-        months : monthsCaseReplace,
-        monthsShort : "січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),
-        weekdays : weekdaysCaseReplace,
-        weekdaysShort : "нд_пн_вт_ср_чт_пт_сб".split("_"),
-        weekdaysMin : "нд_пн_вт_ср_чт_пт_сб".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD.MM.YYYY",
-            LL : "D MMMM YYYY р.",
-            LLL : "D MMMM YYYY р., LT",
-            LLLL : "dddd, D MMMM YYYY р., LT"
-        },
-        calendar : {
-            sameDay: processHoursFunction('[Сьогодні '),
-            nextDay: processHoursFunction('[Завтра '),
-            lastDay: processHoursFunction('[Вчора '),
-            nextWeek: processHoursFunction('[У] dddd ['),
-            lastWeek: function () {
-                switch (this.day()) {
-                case 0:
-                case 3:
-                case 5:
-                case 6:
-                    return processHoursFunction('[Минулої] dddd [').call(this);
-                case 1:
-                case 2:
-                case 4:
-                    return processHoursFunction('[Минулого] dddd [').call(this);
-                }
-            },
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "за %s",
-            past : "%s тому",
-            s : "декілька секунд",
-            m : relativeTimeWithPlural,
-            mm : relativeTimeWithPlural,
-            h : "годину",
-            hh : relativeTimeWithPlural,
-            d : "день",
-            dd : relativeTimeWithPlural,
-            M : "місяць",
-            MM : relativeTimeWithPlural,
-            y : "рік",
-            yy : relativeTimeWithPlural
-        },
-
-        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
-
-        meridiem : function (hour, minute, isLower) {
-            if (hour < 4) {
-                return "ночі";
-            } else if (hour < 12) {
-                return "ранку";
-            } else if (hour < 17) {
-                return "дня";
-            } else {
-                return "вечора";
-            }
-        },
-
-        ordinal: function (number, period) {
-            switch (period) {
-            case 'M':
-            case 'd':
-            case 'DDD':
-            case 'w':
-            case 'W':
-                return number + '-й';
-            case 'D':
-                return number + '-го';
-            default:
-                return number;
-            }
-        },
-
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 1st is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/uz.js b/resources/lib/moment/lang/uz.js
deleted file mode 100644 (file)
index aeaad63..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// moment.js locale configuration
-// locale : uzbek
-// author : Sardor Muminov : https://github.com/muminoff
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('uz', {
-        months : "январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),
-        monthsShort : "янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),
-        weekdays : "Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),
-        weekdaysShort : "Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),
-        weekdaysMin : "Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM YYYY",
-            LLL : "D MMMM YYYY LT",
-            LLLL : "D MMMM YYYY, dddd LT"
-        },
-        calendar : {
-            sameDay : '[Бугун соат] LT [да]',
-            nextDay : '[Эртага] LT [да]',
-            nextWeek : 'dddd [куни соат] LT [да]',
-            lastDay : '[Кеча соат] LT [да]',
-            lastWeek : '[Утган] dddd [куни соат] LT [да]',
-            sameElse : 'L'
-        },
-        relativeTime : {
-            future : "Якин %s ичида",
-            past : "Бир неча %s олдин",
-            s : "фурсат",
-            m : "бир дакика",
-            mm : "%d дакика",
-            h : "бир соат",
-            hh : "%d соат",
-            d : "бир кун",
-            dd : "%d кун",
-            M : "бир ой",
-            MM : "%d ой",
-            y : "бир йил",
-            yy : "%d йил"
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 7  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/vi.js b/resources/lib/moment/lang/vi.js
deleted file mode 100644 (file)
index 3f8f5f5..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-// moment.js locale configuration
-// locale : vietnamese (vi)
-// author : Bang Nguyen : https://github.com/bangnk
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('vi', {
-        months : "tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),
-        monthsShort : "Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),
-        weekdays : "chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),
-        weekdaysShort : "CN_T2_T3_T4_T5_T6_T7".split("_"),
-        weekdaysMin : "CN_T2_T3_T4_T5_T6_T7".split("_"),
-        longDateFormat : {
-            LT : "HH:mm",
-            L : "DD/MM/YYYY",
-            LL : "D MMMM [năm] YYYY",
-            LLL : "D MMMM [năm] YYYY LT",
-            LLLL : "dddd, D MMMM [năm] YYYY LT",
-            l : "DD/M/YYYY",
-            ll : "D MMM YYYY",
-            lll : "D MMM YYYY LT",
-            llll : "ddd, D MMM YYYY LT"
-        },
-        calendar : {
-            sameDay: "[Hôm nay lúc] LT",
-            nextDay: '[Ngày mai lúc] LT',
-            nextWeek: 'dddd [tuần tới lúc] LT',
-            lastDay: '[Hôm qua lúc] LT',
-            lastWeek: 'dddd [tuần rồi lúc] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : "%s tới",
-            past : "%s trước",
-            s : "vài giây",
-            m : "một phút",
-            mm : "%d phút",
-            h : "một giờ",
-            hh : "%d giờ",
-            d : "một ngày",
-            dd : "%d ngày",
-            M : "một tháng",
-            MM : "%d tháng",
-            y : "một năm",
-            yy : "%d năm"
-        },
-        ordinal : function (number) {
-            return number;
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/zh-cn.js b/resources/lib/moment/lang/zh-cn.js
deleted file mode 100644 (file)
index e73acd7..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-// moment.js locale configuration
-// locale : chinese
-// author : suupic : https://github.com/suupic
-// author : Zeno Zeng : https://github.com/zenozeng
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('zh-cn', {
-        months : "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),
-        monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),
-        weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),
-        weekdaysShort : "周日_周一_周二_周三_周四_周五_周六".split("_"),
-        weekdaysMin : "日_一_二_三_四_五_六".split("_"),
-        longDateFormat : {
-            LT : "Ah点mm",
-            L : "YYYY-MM-DD",
-            LL : "YYYY年MMMD日",
-            LLL : "YYYY年MMMD日LT",
-            LLLL : "YYYY年MMMD日ddddLT",
-            l : "YYYY-MM-DD",
-            ll : "YYYY年MMMD日",
-            lll : "YYYY年MMMD日LT",
-            llll : "YYYY年MMMD日ddddLT"
-        },
-        meridiem : function (hour, minute, isLower) {
-            var hm = hour * 100 + minute;
-            if (hm < 600) {
-                return "凌晨";
-            } else if (hm < 900) {
-                return "早上";
-            } else if (hm < 1130) {
-                return "上午";
-            } else if (hm < 1230) {
-                return "中午";
-            } else if (hm < 1800) {
-                return "下午";
-            } else {
-                return "晚上";
-            }
-        },
-        calendar : {
-            sameDay : function () {
-                return this.minutes() === 0 ? "[今天]Ah[点整]" : "[今天]LT";
-            },
-            nextDay : function () {
-                return this.minutes() === 0 ? "[明天]Ah[点整]" : "[明天]LT";
-            },
-            lastDay : function () {
-                return this.minutes() === 0 ? "[昨天]Ah[点整]" : "[昨天]LT";
-            },
-            nextWeek : function () {
-                var startOfWeek, prefix;
-                startOfWeek = moment().startOf('week');
-                prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]';
-                return this.minutes() === 0 ? prefix + "dddAh点整" : prefix + "dddAh点mm";
-            },
-            lastWeek : function () {
-                var startOfWeek, prefix;
-                startOfWeek = moment().startOf('week');
-                prefix = this.unix() < startOfWeek.unix()  ? '[上]' : '[本]';
-                return this.minutes() === 0 ? prefix + "dddAh点整" : prefix + "dddAh点mm";
-            },
-            sameElse : 'LL'
-        },
-        ordinal : function (number, period) {
-            switch (period) {
-            case "d":
-            case "D":
-            case "DDD":
-                return number + "日";
-            case "M":
-                return number + "月";
-            case "w":
-            case "W":
-                return number + "周";
-            default:
-                return number;
-            }
-        },
-        relativeTime : {
-            future : "%s内",
-            past : "%s前",
-            s : "几秒",
-            m : "1分钟",
-            mm : "%d分钟",
-            h : "1小时",
-            hh : "%d小时",
-            d : "1天",
-            dd : "%d天",
-            M : "1个月",
-            MM : "%d个月",
-            y : "1年",
-            yy : "%d年"
-        },
-        week : {
-            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-}));
diff --git a/resources/lib/moment/lang/zh-tw.js b/resources/lib/moment/lang/zh-tw.js
deleted file mode 100644 (file)
index edb1fb9..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-// moment.js locale configuration
-// locale : traditional chinese (zh-tw)
-// author : Ben : https://github.com/ben-lin
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(['moment'], factory); // AMD
-    } else if (typeof exports === 'object') {
-        module.exports = factory(require('../moment')); // Node
-    } else {
-        factory(window.moment); // Browser global
-    }
-}(function (moment) {
-    return moment.defineLocale('zh-tw', {
-        months : "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),
-        monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),
-        weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),
-        weekdaysShort : "週日_週一_週二_週三_週四_週五_週六".split("_"),
-        weekdaysMin : "日_一_二_三_四_五_六".split("_"),
-        longDateFormat : {
-            LT : "Ah點mm",
-            L : "YYYY年MMMD日",
-            LL : "YYYY年MMMD日",
-            LLL : "YYYY年MMMD日LT",
-            LLLL : "YYYY年MMMD日ddddLT",
-            l : "YYYY年MMMD日",
-            ll : "YYYY年MMMD日",
-            lll : "YYYY年MMMD日LT",
-            llll : "YYYY年MMMD日ddddLT"
-        },
-        meridiem : function (hour, minute, isLower) {
-            var hm = hour * 100 + minute;
-            if (hm < 900) {
-                return "早上";
-            } else if (hm < 1130) {
-                return "上午";
-            } else if (hm < 1230) {
-                return "中午";
-            } else if (hm < 1800) {
-                return "下午";
-            } else {
-                return "晚上";
-            }
-        },
-        calendar : {
-            sameDay : '[今天]LT',
-            nextDay : '[明天]LT',
-            nextWeek : '[下]ddddLT',
-            lastDay : '[昨天]LT',
-            lastWeek : '[上]ddddLT',
-            sameElse : 'L'
-        },
-        ordinal : function (number, period) {
-            switch (period) {
-            case "d" :
-            case "D" :
-            case "DDD" :
-                return number + "日";
-            case "M" :
-                return number + "月";
-            case "w" :
-            case "W" :
-                return number + "週";
-            default :
-                return number;
-            }
-        },
-        relativeTime : {
-            future : "%s內",
-            past : "%s前",
-            s : "幾秒",
-            m : "一分鐘",
-            mm : "%d分鐘",
-            h : "一小時",
-            hh : "%d小時",
-            d : "一天",
-            dd : "%d天",
-            M : "一個月",
-            MM : "%d個月",
-            y : "一年",
-            yy : "%d年"
-        }
-    });
-}));
diff --git a/resources/lib/moment/locale/af.js b/resources/lib/moment/locale/af.js
new file mode 100644 (file)
index 0000000..1b8c520
--- /dev/null
@@ -0,0 +1,65 @@
+// moment.js locale configuration
+// locale : afrikaans (af)
+// author : Werner Mollentze : https://github.com/wernerm
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('af', {
+        months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),
+        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
+        weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),
+        weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
+        weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
+        meridiem : function (hours, minutes, isLower) {
+            if (hours < 12) {
+                return isLower ? 'vm' : 'VM';
+            } else {
+                return isLower ? 'nm' : 'NM';
+            }
+        },
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd, D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay : '[Vandag om] LT',
+            nextDay : '[Môre om] LT',
+            nextWeek : 'dddd [om] LT',
+            lastDay : '[Gister om] LT',
+            lastWeek : '[Laas] dddd [om] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'oor %s',
+            past : '%s gelede',
+            s : '\'n paar sekondes',
+            m : '\'n minuut',
+            mm : '%d minute',
+            h : '\'n uur',
+            hh : '%d ure',
+            d : '\'n dag',
+            dd : '%d dae',
+            M : '\'n maand',
+            MM : '%d maande',
+            y : '\'n jaar',
+            yy : '%d jaar'
+        },
+        ordinal : function (number) {
+            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter
+        },
+        week : {
+            dow : 1, // Maandag is die eerste dag van die week.
+            doy : 4  // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/ar-ma.js b/resources/lib/moment/locale/ar-ma.js
new file mode 100644 (file)
index 0000000..5b2095a
--- /dev/null
@@ -0,0 +1,56 @@
+// moment.js locale configuration
+// locale : Moroccan Arabic (ar-ma)
+// author : ElFadili Yassine : https://github.com/ElFadiliY
+// author : Abdel Said : https://github.com/abdelsaid
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('ar-ma', {
+        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
+        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
+        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay: '[اليوم على الساعة] LT',
+            nextDay: '[غدا على الساعة] LT',
+            nextWeek: 'dddd [على الساعة] LT',
+            lastDay: '[أمس على الساعة] LT',
+            lastWeek: 'dddd [على الساعة] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'في %s',
+            past : 'منذ %s',
+            s : 'ثوان',
+            m : 'دقيقة',
+            mm : '%d دقائق',
+            h : 'ساعة',
+            hh : '%d ساعات',
+            d : 'يوم',
+            dd : '%d أيام',
+            M : 'شهر',
+            MM : '%d أشهر',
+            y : 'سنة',
+            yy : '%d سنوات'
+        },
+        week : {
+            dow : 6, // Saturday is the first day of the week.
+            doy : 12  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/ar-sa.js b/resources/lib/moment/locale/ar-sa.js
new file mode 100644 (file)
index 0000000..f7867ea
--- /dev/null
@@ -0,0 +1,96 @@
+// moment.js locale configuration
+// locale : Arabic Saudi Arabia (ar-sa)
+// author : Suhail Alkowaileet : https://github.com/xsoh
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var symbolMap = {
+        '1': '١',
+        '2': '٢',
+        '3': '٣',
+        '4': '٤',
+        '5': '٥',
+        '6': '٦',
+        '7': '٧',
+        '8': '٨',
+        '9': '٩',
+        '0': '٠'
+    }, numberMap = {
+        '١': '1',
+        '٢': '2',
+        '٣': '3',
+        '٤': '4',
+        '٥': '5',
+        '٦': '6',
+        '٧': '7',
+        '٨': '8',
+        '٩': '9',
+        '٠': '0'
+    };
+
+    return moment.defineLocale('ar-sa', {
+        months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+        monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd D MMMM YYYY LT'
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ص';
+            } else {
+                return 'م';
+            }
+        },
+        calendar : {
+            sameDay: '[اليوم على الساعة] LT',
+            nextDay: '[غدا على الساعة] LT',
+            nextWeek: 'dddd [على الساعة] LT',
+            lastDay: '[أمس على الساعة] LT',
+            lastWeek: 'dddd [على الساعة] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'في %s',
+            past : 'منذ %s',
+            s : 'ثوان',
+            m : 'دقيقة',
+            mm : '%d دقائق',
+            h : 'ساعة',
+            hh : '%d ساعات',
+            d : 'يوم',
+            dd : '%d أيام',
+            M : 'شهر',
+            MM : '%d أشهر',
+            y : 'سنة',
+            yy : '%d سنوات'
+        },
+        preparse: function (string) {
+            return string.replace(/[۰-۹]/g, function (match) {
+                return numberMap[match];
+            }).replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            }).replace(/,/g, '،');
+        },
+        week : {
+            dow : 6, // Saturday is the first day of the week.
+            doy : 12  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/ar.js b/resources/lib/moment/locale/ar.js
new file mode 100644 (file)
index 0000000..1791a6b
--- /dev/null
@@ -0,0 +1,129 @@
+// moment.js locale configuration
+// Locale: Arabic (ar)
+// Author: Abdel Said: https://github.com/abdelsaid
+// Changes in months, weekdays: Ahmed Elkhatib
+// Native plural forms: forabi https://github.com/forabi
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var symbolMap = {
+        '1': '١',
+        '2': '٢',
+        '3': '٣',
+        '4': '٤',
+        '5': '٥',
+        '6': '٦',
+        '7': '٧',
+        '8': '٨',
+        '9': '٩',
+        '0': '٠'
+    }, numberMap = {
+        '١': '1',
+        '٢': '2',
+        '٣': '3',
+        '٤': '4',
+        '٥': '5',
+        '٦': '6',
+        '٧': '7',
+        '٨': '8',
+        '٩': '9',
+        '٠': '0'
+    }, pluralForm = function (n) {
+        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
+    }, plurals = {
+        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
+        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
+        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
+        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
+        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
+        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
+    }, pluralize = function (u) {
+        return function (number, withoutSuffix, string, isFuture) {
+            var f = pluralForm(number),
+                str = plurals[u][pluralForm(number)];
+            if (f === 2) {
+                str = str[withoutSuffix ? 0 : 1];
+            }
+            return str.replace(/%d/i, number);
+        };
+    }, months = [
+        'كانون الثاني يناير',
+        'شباط فبراير',
+        'آذار مارس',
+        'نيسان أبريل',
+        'أيار مايو',
+        'حزيران يونيو',
+        'تموز يوليو',
+        'آب أغسطس',
+        'أيلول سبتمبر',
+        'تشرين الأول أكتوبر',
+        'تشرين الثاني نوفمبر',
+        'كانون الأول ديسمبر'
+    ];
+
+    return moment.defineLocale('ar', {
+        months : months,
+        monthsShort : months,
+        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd D MMMM YYYY LT'
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ص';
+            } else {
+                return 'م';
+            }
+        },
+        calendar : {
+            sameDay: '[اليوم عند الساعة] LT',
+            nextDay: '[غدًا عند الساعة] LT',
+            nextWeek: 'dddd [عند الساعة] LT',
+            lastDay: '[أمس عند الساعة] LT',
+            lastWeek: 'dddd [عند الساعة] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'بعد %s',
+            past : 'منذ %s',
+            s : pluralize('s'),
+            m : pluralize('m'),
+            mm : pluralize('m'),
+            h : pluralize('h'),
+            hh : pluralize('h'),
+            d : pluralize('d'),
+            dd : pluralize('d'),
+            M : pluralize('M'),
+            MM : pluralize('M'),
+            y : pluralize('y'),
+            yy : pluralize('y')
+        },
+        preparse: function (string) {
+            return string.replace(/[۰-۹]/g, function (match) {
+                return numberMap[match];
+            }).replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            }).replace(/,/g, '،');
+        },
+        week : {
+            dow : 6, // Saturday is the first day of the week.
+            doy : 12  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/az.js b/resources/lib/moment/locale/az.js
new file mode 100644 (file)
index 0000000..e82f6e1
--- /dev/null
@@ -0,0 +1,101 @@
+// moment.js locale configuration
+// locale : azerbaijani (az)
+// author : topchiyev : https://github.com/topchiyev
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var suffixes = {
+        1: '-inci',
+        5: '-inci',
+        8: '-inci',
+        70: '-inci',
+        80: '-inci',
+
+        2: '-nci',
+        7: '-nci',
+        20: '-nci',
+        50: '-nci',
+
+        3: '-üncü',
+        4: '-üncü',
+        100: '-üncü',
+
+        6: '-ncı',
+
+        9: '-uncu',
+        10: '-uncu',
+        30: '-uncu',
+
+        60: '-ıncı',
+        90: '-ıncı'
+    };
+    return moment.defineLocale('az', {
+        months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),
+        monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
+        weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),
+        weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
+        weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD.MM.YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd, D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay : '[bugün saat] LT',
+            nextDay : '[sabah saat] LT',
+            nextWeek : '[gələn həftə] dddd [saat] LT',
+            lastDay : '[dünən] LT',
+            lastWeek : '[keçən həftə] dddd [saat] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%s sonra',
+            past : '%s əvvəl',
+            s : 'birneçə saniyyə',
+            m : 'bir dəqiqə',
+            mm : '%d dəqiqə',
+            h : 'bir saat',
+            hh : '%d saat',
+            d : 'bir gün',
+            dd : '%d gün',
+            M : 'bir ay',
+            MM : '%d ay',
+            y : 'bir il',
+            yy : '%d il'
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'gecə';
+            } else if (hour < 12) {
+                return 'səhər';
+            } else if (hour < 17) {
+                return 'gündüz';
+            } else {
+                return 'axşam';
+            }
+        },
+        ordinal : function (number) {
+            if (number === 0) {  // special case for zero
+                return number + '-ıncı';
+            }
+            var a = number % 10,
+                b = number % 100 - a,
+                c = number >= 100 ? 100 : null;
+
+            return number + (suffixes[a] || suffixes[b] || suffixes[c]);
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/be.js b/resources/lib/moment/locale/be.js
new file mode 100644 (file)
index 0000000..fe3186a
--- /dev/null
@@ -0,0 +1,150 @@
+// moment.js locale configuration
+// locale : belarusian (be)
+// author : Dmitry Demidov : https://github.com/demidov91
+// author: Praleska: http://praleska.pro/
+// Author : Menelion Elensúle : https://github.com/Oire
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function plural(word, num) {
+        var forms = word.split('_');
+        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+    }
+
+    function relativeTimeWithPlural(number, withoutSuffix, key) {
+        var format = {
+            'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
+            'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
+            'dd': 'дзень_дні_дзён',
+            'MM': 'месяц_месяцы_месяцаў',
+            'yy': 'год_гады_гадоў'
+        };
+        if (key === 'm') {
+            return withoutSuffix ? 'хвіліна' : 'хвіліну';
+        }
+        else if (key === 'h') {
+            return withoutSuffix ? 'гадзіна' : 'гадзіну';
+        }
+        else {
+            return number + ' ' + plural(format[key], +number);
+        }
+    }
+
+    function monthsCaseReplace(m, format) {
+        var months = {
+            'nominative': 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_'),
+            'accusative': 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_')
+        },
+
+        nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return months[nounCase][m.month()];
+    }
+
+    function weekdaysCaseReplace(m, format) {
+        var weekdays = {
+            'nominative': 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
+            'accusative': 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_')
+        },
+
+        nounCase = (/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return weekdays[nounCase][m.day()];
+    }
+
+    return moment.defineLocale('be', {
+        months : monthsCaseReplace,
+        monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
+        weekdays : weekdaysCaseReplace,
+        weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
+        weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD.MM.YYYY',
+            LL : 'D MMMM YYYY г.',
+            LLL : 'D MMMM YYYY г., LT',
+            LLLL : 'dddd, D MMMM YYYY г., LT'
+        },
+        calendar : {
+            sameDay: '[Сёння ў] LT',
+            nextDay: '[Заўтра ў] LT',
+            lastDay: '[Учора ў] LT',
+            nextWeek: function () {
+                return '[У] dddd [ў] LT';
+            },
+            lastWeek: function () {
+                switch (this.day()) {
+                case 0:
+                case 3:
+                case 5:
+                case 6:
+                    return '[У мінулую] dddd [ў] LT';
+                case 1:
+                case 2:
+                case 4:
+                    return '[У мінулы] dddd [ў] LT';
+                }
+            },
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'праз %s',
+            past : '%s таму',
+            s : 'некалькі секунд',
+            m : relativeTimeWithPlural,
+            mm : relativeTimeWithPlural,
+            h : relativeTimeWithPlural,
+            hh : relativeTimeWithPlural,
+            d : 'дзень',
+            dd : relativeTimeWithPlural,
+            M : 'месяц',
+            MM : relativeTimeWithPlural,
+            y : 'год',
+            yy : relativeTimeWithPlural
+        },
+
+
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'ночы';
+            } else if (hour < 12) {
+                return 'раніцы';
+            } else if (hour < 17) {
+                return 'дня';
+            } else {
+                return 'вечара';
+            }
+        },
+
+        ordinal: function (number, period) {
+            switch (period) {
+            case 'M':
+            case 'd':
+            case 'DDD':
+            case 'w':
+            case 'W':
+                return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';
+            case 'D':
+                return number + '-га';
+            default:
+                return number;
+            }
+        },
+
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/bg.js b/resources/lib/moment/locale/bg.js
new file mode 100644 (file)
index 0000000..41b1e3a
--- /dev/null
@@ -0,0 +1,86 @@
+// moment.js locale configuration
+// locale : bulgarian (bg)
+// author : Krasen Borisov : https://github.com/kraz
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('bg', {
+        months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),
+        monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
+        weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),
+        weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
+        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+        longDateFormat : {
+            LT : 'H:mm',
+            L : 'D.MM.YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd, D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay : '[Днес в] LT',
+            nextDay : '[Утре в] LT',
+            nextWeek : 'dddd [в] LT',
+            lastDay : '[Вчера в] LT',
+            lastWeek : function () {
+                switch (this.day()) {
+                case 0:
+                case 3:
+                case 6:
+                    return '[В изминалата] dddd [в] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[В изминалия] dddd [в] LT';
+                }
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'след %s',
+            past : 'преди %s',
+            s : 'няколко секунди',
+            m : 'минута',
+            mm : '%d минути',
+            h : 'час',
+            hh : '%d часа',
+            d : 'ден',
+            dd : '%d дни',
+            M : 'месец',
+            MM : '%d месеца',
+            y : 'година',
+            yy : '%d години'
+        },
+        ordinal : function (number) {
+            var lastDigit = number % 10,
+                last2Digits = number % 100;
+            if (number === 0) {
+                return number + '-ев';
+            } else if (last2Digits === 0) {
+                return number + '-ен';
+            } else if (last2Digits > 10 && last2Digits < 20) {
+                return number + '-ти';
+            } else if (lastDigit === 1) {
+                return number + '-ви';
+            } else if (lastDigit === 2) {
+                return number + '-ри';
+            } else if (lastDigit === 7 || lastDigit === 8) {
+                return number + '-ми';
+            } else {
+                return number + '-ти';
+            }
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/bn.js b/resources/lib/moment/locale/bn.js
new file mode 100644 (file)
index 0000000..7e8ccfd
--- /dev/null
@@ -0,0 +1,106 @@
+// moment.js locale configuration
+// locale : Bengali (bn)
+// author : Kaushik Gandhi : https://github.com/kaushikgandhi
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var symbolMap = {
+        '1': '১',
+        '2': '২',
+        '3': '৩',
+        '4': '৪',
+        '5': '৫',
+        '6': '৬',
+        '7': '৭',
+        '8': '৮',
+        '9': '৯',
+        '0': '০'
+    },
+    numberMap = {
+        '১': '1',
+        '২': '2',
+        '৩': '3',
+        '৪': '4',
+        '৫': '5',
+        '৬': '6',
+        '৭': '7',
+        '৮': '8',
+        '৯': '9',
+        '০': '0'
+    };
+
+    return moment.defineLocale('bn', {
+        months : 'জানুয়ারী_ফেবুয়ারী_মার্চ_এপ্রিল_মে_জুন_জুলাই_অগাস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
+        monthsShort : 'জানু_ফেব_মার্চ_এপর_মে_জুন_জুল_অগ_সেপ্ট_অক্টো_নভ_ডিসেম্'.split('_'),
+        weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পত্তিবার_শুক্রুবার_শনিবার'.split('_'),
+        weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পত্তি_শুক্রু_শনি'.split('_'),
+        weekdaysMin : 'রব_সম_মঙ্গ_বু_ব্রিহ_শু_শনি'.split('_'),
+        longDateFormat : {
+            LT : 'A h:mm সময়',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY, LT',
+            LLLL : 'dddd, D MMMM YYYY, LT'
+        },
+        calendar : {
+            sameDay : '[আজ] LT',
+            nextDay : '[আগামীকাল] LT',
+            nextWeek : 'dddd, LT',
+            lastDay : '[গতকাল] LT',
+            lastWeek : '[গত] dddd, LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%s পরে',
+            past : '%s আগে',
+            s : 'কএক সেকেন্ড',
+            m : 'এক মিনিট',
+            mm : '%d মিনিট',
+            h : 'এক ঘন্টা',
+            hh : '%d ঘন্টা',
+            d : 'এক দিন',
+            dd : '%d দিন',
+            M : 'এক মাস',
+            MM : '%d মাস',
+            y : 'এক বছর',
+            yy : '%d বছর'
+        },
+        preparse: function (string) {
+            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
+                return numberMap[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            });
+        },
+        //Bengali is a vast language its spoken
+        //in different forms in various parts of the world.
+        //I have just generalized with most common one used
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'রাত';
+            } else if (hour < 10) {
+                return 'শকাল';
+            } else if (hour < 17) {
+                return 'দুপুর';
+            } else if (hour < 20) {
+                return 'বিকেল';
+            } else {
+                return 'রাত';
+            }
+        },
+        week : {
+            dow : 0, // Sunday is the first day of the week.
+            doy : 6  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/bo.js b/resources/lib/moment/locale/bo.js
new file mode 100644 (file)
index 0000000..0d44e47
--- /dev/null
@@ -0,0 +1,103 @@
+// moment.js locale configuration
+// locale : tibetan (bo)
+// author : Thupten N. Chakrishar : https://github.com/vajradog
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var symbolMap = {
+        '1': '༡',
+        '2': '༢',
+        '3': '༣',
+        '4': '༤',
+        '5': '༥',
+        '6': '༦',
+        '7': '༧',
+        '8': '༨',
+        '9': '༩',
+        '0': '༠'
+    },
+    numberMap = {
+        '༡': '1',
+        '༢': '2',
+        '༣': '3',
+        '༤': '4',
+        '༥': '5',
+        '༦': '6',
+        '༧': '7',
+        '༨': '8',
+        '༩': '9',
+        '༠': '0'
+    };
+
+    return moment.defineLocale('bo', {
+        months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
+        monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
+        weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),
+        weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
+        weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
+        longDateFormat : {
+            LT : 'A h:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY, LT',
+            LLLL : 'dddd, D MMMM YYYY, LT'
+        },
+        calendar : {
+            sameDay : '[དི་རིང] LT',
+            nextDay : '[སང་ཉིན] LT',
+            nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',
+            lastDay : '[ཁ་སང] LT',
+            lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%s ལ་',
+            past : '%s སྔན་ལ',
+            s : 'ལམ་སང',
+            m : 'སྐར་མ་གཅིག',
+            mm : '%d སྐར་མ',
+            h : 'ཆུ་ཚོད་གཅིག',
+            hh : '%d ཆུ་ཚོད',
+            d : 'ཉིན་གཅིག',
+            dd : '%d ཉིན་',
+            M : 'ཟླ་བ་གཅིག',
+            MM : '%d ཟླ་བ',
+            y : 'ལོ་གཅིག',
+            yy : '%d ལོ'
+        },
+        preparse: function (string) {
+            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
+                return numberMap[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            });
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'མཚན་མོ';
+            } else if (hour < 10) {
+                return 'ཞོགས་ཀས';
+            } else if (hour < 17) {
+                return 'ཉིན་གུང';
+            } else if (hour < 20) {
+                return 'དགོང་དག';
+            } else {
+                return 'མཚན་མོ';
+            }
+        },
+        week : {
+            dow : 0, // Sunday is the first day of the week.
+            doy : 6  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/br.js b/resources/lib/moment/locale/br.js
new file mode 100644 (file)
index 0000000..a4f1491
--- /dev/null
@@ -0,0 +1,107 @@
+// moment.js locale configuration
+// locale : breton (br)
+// author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function relativeTimeWithMutation(number, withoutSuffix, key) {
+        var format = {
+            'mm': 'munutenn',
+            'MM': 'miz',
+            'dd': 'devezh'
+        };
+        return number + ' ' + mutation(format[key], number);
+    }
+
+    function specialMutationForYears(number) {
+        switch (lastNumber(number)) {
+        case 1:
+        case 3:
+        case 4:
+        case 5:
+        case 9:
+            return number + ' bloaz';
+        default:
+            return number + ' vloaz';
+        }
+    }
+
+    function lastNumber(number) {
+        if (number > 9) {
+            return lastNumber(number % 10);
+        }
+        return number;
+    }
+
+    function mutation(text, number) {
+        if (number === 2) {
+            return softMutation(text);
+        }
+        return text;
+    }
+
+    function softMutation(text) {
+        var mutationTable = {
+            'm': 'v',
+            'b': 'v',
+            'd': 'z'
+        };
+        if (mutationTable[text.charAt(0)] === undefined) {
+            return text;
+        }
+        return mutationTable[text.charAt(0)] + text.substring(1);
+    }
+
+    return moment.defineLocale('br', {
+        months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),
+        monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
+        weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'),
+        weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
+        weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
+        longDateFormat : {
+            LT : 'h[e]mm A',
+            L : 'DD/MM/YYYY',
+            LL : 'D [a viz] MMMM YYYY',
+            LLL : 'D [a viz] MMMM YYYY LT',
+            LLLL : 'dddd, D [a viz] MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay : '[Hiziv da] LT',
+            nextDay : '[Warc\'hoazh da] LT',
+            nextWeek : 'dddd [da] LT',
+            lastDay : '[Dec\'h da] LT',
+            lastWeek : 'dddd [paset da] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'a-benn %s',
+            past : '%s \'zo',
+            s : 'un nebeud segondennoù',
+            m : 'ur vunutenn',
+            mm : relativeTimeWithMutation,
+            h : 'un eur',
+            hh : '%d eur',
+            d : 'un devezh',
+            dd : relativeTimeWithMutation,
+            M : 'ur miz',
+            MM : relativeTimeWithMutation,
+            y : 'ur bloaz',
+            yy : specialMutationForYears
+        },
+        ordinal : function (number) {
+            var output = (number === 1) ? 'añ' : 'vet';
+            return number + output;
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/bs.js b/resources/lib/moment/locale/bs.js
new file mode 100644 (file)
index 0000000..b9a5851
--- /dev/null
@@ -0,0 +1,138 @@
+// moment.js locale configuration
+// locale : bosnian (bs)
+// author : Nedim Cholich : https://github.com/frontyard
+// based on (hr) translation by Bojan Marković
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function translate(number, withoutSuffix, key) {
+        var result = number + ' ';
+        switch (key) {
+        case 'm':
+            return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+        case 'mm':
+            if (number === 1) {
+                result += 'minuta';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'minute';
+            } else {
+                result += 'minuta';
+            }
+            return result;
+        case 'h':
+            return withoutSuffix ? 'jedan sat' : 'jednog sata';
+        case 'hh':
+            if (number === 1) {
+                result += 'sat';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'sata';
+            } else {
+                result += 'sati';
+            }
+            return result;
+        case 'dd':
+            if (number === 1) {
+                result += 'dan';
+            } else {
+                result += 'dana';
+            }
+            return result;
+        case 'MM':
+            if (number === 1) {
+                result += 'mjesec';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'mjeseca';
+            } else {
+                result += 'mjeseci';
+            }
+            return result;
+        case 'yy':
+            if (number === 1) {
+                result += 'godina';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'godine';
+            } else {
+                result += 'godina';
+            }
+            return result;
+        }
+    }
+
+    return moment.defineLocale('bs', {
+        months : 'januar_februar_mart_april_maj_juni_juli_avgust_septembar_oktobar_novembar_decembar'.split('_'),
+        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),
+        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+        longDateFormat : {
+            LT : 'H:mm',
+            L : 'DD. MM. YYYY',
+            LL : 'D. MMMM YYYY',
+            LLL : 'D. MMMM YYYY LT',
+            LLLL : 'dddd, D. MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay  : '[danas u] LT',
+            nextDay  : '[sutra u] LT',
+
+            nextWeek : function () {
+                switch (this.day()) {
+                case 0:
+                    return '[u] [nedjelju] [u] LT';
+                case 3:
+                    return '[u] [srijedu] [u] LT';
+                case 6:
+                    return '[u] [subotu] [u] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[u] dddd [u] LT';
+                }
+            },
+            lastDay  : '[jučer u] LT',
+            lastWeek : function () {
+                switch (this.day()) {
+                case 0:
+                case 3:
+                    return '[prošlu] dddd [u] LT';
+                case 6:
+                    return '[prošle] [subote] [u] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[prošli] dddd [u] LT';
+                }
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'za %s',
+            past   : 'prije %s',
+            s      : 'par sekundi',
+            m      : translate,
+            mm     : translate,
+            h      : translate,
+            hh     : translate,
+            d      : 'dan',
+            dd     : translate,
+            M      : 'mjesec',
+            MM     : translate,
+            y      : 'godinu',
+            yy     : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/ca.js b/resources/lib/moment/locale/ca.js
new file mode 100644 (file)
index 0000000..fd41ff5
--- /dev/null
@@ -0,0 +1,66 @@
+// moment.js locale configuration
+// locale : catalan (ca)
+// author : Juan G. Hurtado : https://github.com/juanghurtado
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('ca', {
+        months : 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),
+        monthsShort : 'gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.'.split('_'),
+        weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),
+        weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
+        weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'),
+        longDateFormat : {
+            LT : 'H:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay : function () {
+                return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+            },
+            nextDay : function () {
+                return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+            },
+            nextWeek : function () {
+                return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+            },
+            lastDay : function () {
+                return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+            },
+            lastWeek : function () {
+                return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'en %s',
+            past : 'fa %s',
+            s : 'uns segons',
+            m : 'un minut',
+            mm : '%d minuts',
+            h : 'una hora',
+            hh : '%d hores',
+            d : 'un dia',
+            dd : '%d dies',
+            M : 'un mes',
+            MM : '%d mesos',
+            y : 'un any',
+            yy : '%d anys'
+        },
+        ordinal : '%dº',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/cs.js b/resources/lib/moment/locale/cs.js
new file mode 100644 (file)
index 0000000..87dec55
--- /dev/null
@@ -0,0 +1,155 @@
+// moment.js locale configuration
+// locale : czech (cs)
+// author : petrbela : https://github.com/petrbela
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),
+        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');
+
+    function plural(n) {
+        return (n > 1) && (n < 5) && (~~(n / 10) !== 1);
+    }
+
+    function translate(number, withoutSuffix, key, isFuture) {
+        var result = number + ' ';
+        switch (key) {
+        case 's':  // a few seconds / in a few seconds / a few seconds ago
+            return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';
+        case 'm':  // a minute / in a minute / a minute ago
+            return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');
+        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'minuty' : 'minut');
+            } else {
+                return result + 'minutami';
+            }
+            break;
+        case 'h':  // an hour / in an hour / an hour ago
+            return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+        case 'hh': // 9 hours / in 9 hours / 9 hours ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'hodiny' : 'hodin');
+            } else {
+                return result + 'hodinami';
+            }
+            break;
+        case 'd':  // a day / in a day / a day ago
+            return (withoutSuffix || isFuture) ? 'den' : 'dnem';
+        case 'dd': // 9 days / in 9 days / 9 days ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'dny' : 'dní');
+            } else {
+                return result + 'dny';
+            }
+            break;
+        case 'M':  // a month / in a month / a month ago
+            return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';
+        case 'MM': // 9 months / in 9 months / 9 months ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'měsíce' : 'měsíců');
+            } else {
+                return result + 'měsíci';
+            }
+            break;
+        case 'y':  // a year / in a year / a year ago
+            return (withoutSuffix || isFuture) ? 'rok' : 'rokem';
+        case 'yy': // 9 years / in 9 years / 9 years ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'roky' : 'let');
+            } else {
+                return result + 'lety';
+            }
+            break;
+        }
+    }
+
+    return moment.defineLocale('cs', {
+        months : months,
+        monthsShort : monthsShort,
+        monthsParse : (function (months, monthsShort) {
+            var i, _monthsParse = [];
+            for (i = 0; i < 12; i++) {
+                // use custom parser to solve problem with July (červenec)
+                _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
+            }
+            return _monthsParse;
+        }(months, monthsShort)),
+        weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
+        weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),
+        weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),
+        longDateFormat : {
+            LT: 'H:mm',
+            L : 'DD. MM. YYYY',
+            LL : 'D. MMMM YYYY',
+            LLL : 'D. MMMM YYYY LT',
+            LLLL : 'dddd D. MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay: '[dnes v] LT',
+            nextDay: '[zítra v] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                case 0:
+                    return '[v neděli v] LT';
+                case 1:
+                case 2:
+                    return '[v] dddd [v] LT';
+                case 3:
+                    return '[ve středu v] LT';
+                case 4:
+                    return '[ve čtvrtek v] LT';
+                case 5:
+                    return '[v pátek v] LT';
+                case 6:
+                    return '[v sobotu v] LT';
+                }
+            },
+            lastDay: '[včera v] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                case 0:
+                    return '[minulou neděli v] LT';
+                case 1:
+                case 2:
+                    return '[minulé] dddd [v] LT';
+                case 3:
+                    return '[minulou středu v] LT';
+                case 4:
+                case 5:
+                    return '[minulý] dddd [v] LT';
+                case 6:
+                    return '[minulou sobotu v] LT';
+                }
+            },
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'za %s',
+            past : 'před %s',
+            s : translate,
+            m : translate,
+            mm : translate,
+            h : translate,
+            hh : translate,
+            d : translate,
+            dd : translate,
+            M : translate,
+            MM : translate,
+            y : translate,
+            yy : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/cv.js b/resources/lib/moment/locale/cv.js
new file mode 100644 (file)
index 0000000..138b6c1
--- /dev/null
@@ -0,0 +1,59 @@
+// moment.js locale configuration
+// locale : chuvash (cv)
+// author : Anatoly Mironov : https://github.com/mirontoli
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('cv', {
+        months : 'кăрлач_нарăс_пуш_ака_май_çĕртме_утă_çурла_авăн_юпа_чӳк_раштав'.split('_'),
+        monthsShort : 'кăр_нар_пуш_ака_май_çĕр_утă_çур_ав_юпа_чӳк_раш'.split('_'),
+        weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кĕçнерникун_эрнекун_шăматкун'.split('_'),
+        weekdaysShort : 'выр_тун_ытл_юн_кĕç_эрн_шăм'.split('_'),
+        weekdaysMin : 'вр_тн_ыт_юн_кç_эр_шм'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD-MM-YYYY',
+            LL : 'YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ]',
+            LLL : 'YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT',
+            LLLL : 'dddd, YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT'
+        },
+        calendar : {
+            sameDay: '[Паян] LT [сехетре]',
+            nextDay: '[Ыран] LT [сехетре]',
+            lastDay: '[Ĕнер] LT [сехетре]',
+            nextWeek: '[Çитес] dddd LT [сехетре]',
+            lastWeek: '[Иртнĕ] dddd LT [сехетре]',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : function (output) {
+                var affix = /сехет$/i.exec(output) ? 'рен' : /çул$/i.exec(output) ? 'тан' : 'ран';
+                return output + affix;
+            },
+            past : '%s каялла',
+            s : 'пĕр-ик çеккунт',
+            m : 'пĕр минут',
+            mm : '%d минут',
+            h : 'пĕр сехет',
+            hh : '%d сехет',
+            d : 'пĕр кун',
+            dd : '%d кун',
+            M : 'пĕр уйăх',
+            MM : '%d уйăх',
+            y : 'пĕр çул',
+            yy : '%d çул'
+        },
+        ordinal : '%d-мĕш',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/cy.js b/resources/lib/moment/locale/cy.js
new file mode 100644 (file)
index 0000000..65fb356
--- /dev/null
@@ -0,0 +1,77 @@
+// moment.js locale configuration
+// locale : Welsh (cy)
+// author : Robert Allen
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('cy', {
+        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),
+        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),
+        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),
+        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
+        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
+        // time formats are the same as en-gb
+        longDateFormat: {
+            LT: 'HH:mm',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY LT',
+            LLLL: 'dddd, D MMMM YYYY LT'
+        },
+        calendar: {
+            sameDay: '[Heddiw am] LT',
+            nextDay: '[Yfory am] LT',
+            nextWeek: 'dddd [am] LT',
+            lastDay: '[Ddoe am] LT',
+            lastWeek: 'dddd [diwethaf am] LT',
+            sameElse: 'L'
+        },
+        relativeTime: {
+            future: 'mewn %s',
+            past: '%s yn ôl',
+            s: 'ychydig eiliadau',
+            m: 'munud',
+            mm: '%d munud',
+            h: 'awr',
+            hh: '%d awr',
+            d: 'diwrnod',
+            dd: '%d diwrnod',
+            M: 'mis',
+            MM: '%d mis',
+            y: 'blwyddyn',
+            yy: '%d flynedd'
+        },
+        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
+        ordinal: function (number) {
+            var b = number,
+                output = '',
+                lookup = [
+                    '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed
+                    'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed
+                ];
+
+            if (b > 20) {
+                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
+                    output = 'fed'; // not 30ain, 70ain or 90ain
+                } else {
+                    output = 'ain';
+                }
+            } else if (b > 0) {
+                output = lookup[b];
+            }
+
+            return number + output;
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/da.js b/resources/lib/moment/locale/da.js
new file mode 100644 (file)
index 0000000..5e9ef96
--- /dev/null
@@ -0,0 +1,56 @@
+// moment.js locale configuration
+// locale : danish (da)
+// author : Ulrik Nielsen : https://github.com/mrbase
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('da', {
+        months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),
+        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
+        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
+        weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),
+        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D. MMMM YYYY',
+            LLL : 'D. MMMM YYYY LT',
+            LLLL : 'dddd [d.] D. MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay : '[I dag kl.] LT',
+            nextDay : '[I morgen kl.] LT',
+            nextWeek : 'dddd [kl.] LT',
+            lastDay : '[I går kl.] LT',
+            lastWeek : '[sidste] dddd [kl] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'om %s',
+            past : '%s siden',
+            s : 'få sekunder',
+            m : 'et minut',
+            mm : '%d minutter',
+            h : 'en time',
+            hh : '%d timer',
+            d : 'en dag',
+            dd : '%d dage',
+            M : 'en måned',
+            MM : '%d måneder',
+            y : 'et år',
+            yy : '%d år'
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/de-at.js b/resources/lib/moment/locale/de-at.js
new file mode 100644 (file)
index 0000000..ff715f8
--- /dev/null
@@ -0,0 +1,72 @@
+// moment.js locale configuration
+// locale : austrian german (de-at)
+// author : lluchs : https://github.com/lluchs
+// author: Menelion Elensúle: https://github.com/Oire
+// author : Martin Groller : https://github.com/MadMG
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function processRelativeTime(number, withoutSuffix, key, isFuture) {
+        var format = {
+            'm': ['eine Minute', 'einer Minute'],
+            'h': ['eine Stunde', 'einer Stunde'],
+            'd': ['ein Tag', 'einem Tag'],
+            'dd': [number + ' Tage', number + ' Tagen'],
+            'M': ['ein Monat', 'einem Monat'],
+            'MM': [number + ' Monate', number + ' Monaten'],
+            'y': ['ein Jahr', 'einem Jahr'],
+            'yy': [number + ' Jahre', number + ' Jahren']
+        };
+        return withoutSuffix ? format[key][0] : format[key][1];
+    }
+
+    return moment.defineLocale('de-at', {
+        months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
+        monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
+        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
+        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+        longDateFormat : {
+            LT: 'HH:mm [Uhr]',
+            L : 'DD.MM.YYYY',
+            LL : 'D. MMMM YYYY',
+            LLL : 'D. MMMM YYYY LT',
+            LLLL : 'dddd, D. MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay: '[Heute um] LT',
+            sameElse: 'L',
+            nextDay: '[Morgen um] LT',
+            nextWeek: 'dddd [um] LT',
+            lastDay: '[Gestern um] LT',
+            lastWeek: '[letzten] dddd [um] LT'
+        },
+        relativeTime : {
+            future : 'in %s',
+            past : 'vor %s',
+            s : 'ein paar Sekunden',
+            m : processRelativeTime,
+            mm : '%d Minuten',
+            h : processRelativeTime,
+            hh : '%d Stunden',
+            d : processRelativeTime,
+            dd : processRelativeTime,
+            M : processRelativeTime,
+            MM : processRelativeTime,
+            y : processRelativeTime,
+            yy : processRelativeTime
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/de.js b/resources/lib/moment/locale/de.js
new file mode 100644 (file)
index 0000000..11ab9ac
--- /dev/null
@@ -0,0 +1,71 @@
+// moment.js locale configuration
+// locale : german (de)
+// author : lluchs : https://github.com/lluchs
+// author: Menelion Elensúle: https://github.com/Oire
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function processRelativeTime(number, withoutSuffix, key, isFuture) {
+        var format = {
+            'm': ['eine Minute', 'einer Minute'],
+            'h': ['eine Stunde', 'einer Stunde'],
+            'd': ['ein Tag', 'einem Tag'],
+            'dd': [number + ' Tage', number + ' Tagen'],
+            'M': ['ein Monat', 'einem Monat'],
+            'MM': [number + ' Monate', number + ' Monaten'],
+            'y': ['ein Jahr', 'einem Jahr'],
+            'yy': [number + ' Jahre', number + ' Jahren']
+        };
+        return withoutSuffix ? format[key][0] : format[key][1];
+    }
+
+    return moment.defineLocale('de', {
+        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
+        monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
+        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
+        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+        longDateFormat : {
+            LT: 'HH:mm [Uhr]',
+            L : 'DD.MM.YYYY',
+            LL : 'D. MMMM YYYY',
+            LLL : 'D. MMMM YYYY LT',
+            LLLL : 'dddd, D. MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay: '[Heute um] LT',
+            sameElse: 'L',
+            nextDay: '[Morgen um] LT',
+            nextWeek: 'dddd [um] LT',
+            lastDay: '[Gestern um] LT',
+            lastWeek: '[letzten] dddd [um] LT'
+        },
+        relativeTime : {
+            future : 'in %s',
+            past : 'vor %s',
+            s : 'ein paar Sekunden',
+            m : processRelativeTime,
+            mm : '%d Minuten',
+            h : processRelativeTime,
+            hh : '%d Stunden',
+            d : processRelativeTime,
+            dd : processRelativeTime,
+            M : processRelativeTime,
+            MM : processRelativeTime,
+            y : processRelativeTime,
+            yy : processRelativeTime
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/el.js b/resources/lib/moment/locale/el.js
new file mode 100644 (file)
index 0000000..eb8eb1a
--- /dev/null
@@ -0,0 +1,94 @@
+// moment.js locale configuration
+// locale : modern greek (el)
+// author : Aggelos Karalias : https://github.com/mehiel
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('el', {
+        monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),
+        monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),
+        months : function (momentToFormat, format) {
+            if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'
+                return this._monthsGenitiveEl[momentToFormat.month()];
+            } else {
+                return this._monthsNominativeEl[momentToFormat.month()];
+            }
+        },
+        monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),
+        weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),
+        weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),
+        weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),
+        meridiem : function (hours, minutes, isLower) {
+            if (hours > 11) {
+                return isLower ? 'μμ' : 'ΜΜ';
+            } else {
+                return isLower ? 'πμ' : 'ΠΜ';
+            }
+        },
+        isPM : function (input) {
+            return ((input + '').toLowerCase()[0] === 'μ');
+        },
+        meridiemParse : /[ΠΜ]\.?Μ?\.?/i,
+        longDateFormat : {
+            LT : 'h:mm A',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd, D MMMM YYYY LT'
+        },
+        calendarEl : {
+            sameDay : '[Σήμερα {}] LT',
+            nextDay : '[Αύριο {}] LT',
+            nextWeek : 'dddd [{}] LT',
+            lastDay : '[Χθες {}] LT',
+            lastWeek : function () {
+                switch (this.day()) {
+                    case 6:
+                        return '[το προηγούμενο] dddd [{}] LT';
+                    default:
+                        return '[την προηγούμενη] dddd [{}] LT';
+                }
+            },
+            sameElse : 'L'
+        },
+        calendar : function (key, mom) {
+            var output = this._calendarEl[key],
+                hours = mom && mom.hours();
+
+            if (typeof output === 'function') {
+                output = output.apply(mom);
+            }
+
+            return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));
+        },
+        relativeTime : {
+            future : 'σε %s',
+            past : '%s πριν',
+            s : 'δευτερόλεπτα',
+            m : 'ένα λεπτό',
+            mm : '%d λεπτά',
+            h : 'μία ώρα',
+            hh : '%d ώρες',
+            d : 'μία μέρα',
+            dd : '%d μέρες',
+            M : 'ένας μήνας',
+            MM : '%d μήνες',
+            y : 'ένας χρόνος',
+            yy : '%d χρόνια'
+        },
+        ordinal : function (number) {
+            return number + 'η';
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/en-au.js b/resources/lib/moment/locale/en-au.js
new file mode 100644 (file)
index 0000000..75ad34a
--- /dev/null
@@ -0,0 +1,62 @@
+// moment.js locale configuration
+// locale : australian english (en-au)
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('en-au', {
+        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat : {
+            LT : 'h:mm A',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd, D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay : '[Today at] LT',
+            nextDay : '[Tomorrow at] LT',
+            nextWeek : 'dddd [at] LT',
+            lastDay : '[Yesterday at] LT',
+            lastWeek : '[Last] dddd [at] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'in %s',
+            past : '%s ago',
+            s : 'a few seconds',
+            m : 'a minute',
+            mm : '%d minutes',
+            h : 'an hour',
+            hh : '%d hours',
+            d : 'a day',
+            dd : '%d days',
+            M : 'a month',
+            MM : '%d months',
+            y : 'a year',
+            yy : '%d years'
+        },
+        ordinal : function (number) {
+            var b = number % 10,
+                output = (~~(number % 100 / 10) === 1) ? 'th' :
+                (b === 1) ? 'st' :
+                (b === 2) ? 'nd' :
+                (b === 3) ? 'rd' : 'th';
+            return number + output;
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/en-ca.js b/resources/lib/moment/locale/en-ca.js
new file mode 100644 (file)
index 0000000..077dc8b
--- /dev/null
@@ -0,0 +1,59 @@
+// moment.js locale configuration
+// locale : canadian english (en-ca)
+// author : Jonathan Abourbih : https://github.com/jonbca
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('en-ca', {
+        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat : {
+            LT : 'h:mm A',
+            L : 'YYYY-MM-DD',
+            LL : 'D MMMM, YYYY',
+            LLL : 'D MMMM, YYYY LT',
+            LLLL : 'dddd, D MMMM, YYYY LT'
+        },
+        calendar : {
+            sameDay : '[Today at] LT',
+            nextDay : '[Tomorrow at] LT',
+            nextWeek : 'dddd [at] LT',
+            lastDay : '[Yesterday at] LT',
+            lastWeek : '[Last] dddd [at] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'in %s',
+            past : '%s ago',
+            s : 'a few seconds',
+            m : 'a minute',
+            mm : '%d minutes',
+            h : 'an hour',
+            hh : '%d hours',
+            d : 'a day',
+            dd : '%d days',
+            M : 'a month',
+            MM : '%d months',
+            y : 'a year',
+            yy : '%d years'
+        },
+        ordinal : function (number) {
+            var b = number % 10,
+                output = (~~(number % 100 / 10) === 1) ? 'th' :
+                (b === 1) ? 'st' :
+                (b === 2) ? 'nd' :
+                (b === 3) ? 'rd' : 'th';
+            return number + output;
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/en-gb.js b/resources/lib/moment/locale/en-gb.js
new file mode 100644 (file)
index 0000000..4491d4a
--- /dev/null
@@ -0,0 +1,63 @@
+// moment.js locale configuration
+// locale : great britain english (en-gb)
+// author : Chris Gedrim : https://github.com/chrisgedrim
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('en-gb', {
+        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd, D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay : '[Today at] LT',
+            nextDay : '[Tomorrow at] LT',
+            nextWeek : 'dddd [at] LT',
+            lastDay : '[Yesterday at] LT',
+            lastWeek : '[Last] dddd [at] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'in %s',
+            past : '%s ago',
+            s : 'a few seconds',
+            m : 'a minute',
+            mm : '%d minutes',
+            h : 'an hour',
+            hh : '%d hours',
+            d : 'a day',
+            dd : '%d days',
+            M : 'a month',
+            MM : '%d months',
+            y : 'a year',
+            yy : '%d years'
+        },
+        ordinal : function (number) {
+            var b = number % 10,
+                output = (~~(number % 100 / 10) === 1) ? 'th' :
+                (b === 1) ? 'st' :
+                (b === 2) ? 'nd' :
+                (b === 3) ? 'rd' : 'th';
+            return number + output;
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/eo.js b/resources/lib/moment/locale/eo.js
new file mode 100644 (file)
index 0000000..735ed8e
--- /dev/null
@@ -0,0 +1,65 @@
+// moment.js locale configuration
+// locale : esperanto (eo)
+// author : Colin Dean : https://github.com/colindean
+// komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko.
+//          Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni!
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('eo', {
+        months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),
+        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),
+        weekdays : 'Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato'.split('_'),
+        weekdaysShort : 'Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab'.split('_'),
+        weekdaysMin : 'Di_Lu_Ma_Me_Ĵa_Ve_Sa'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'YYYY-MM-DD',
+            LL : 'D[-an de] MMMM, YYYY',
+            LLL : 'D[-an de] MMMM, YYYY LT',
+            LLLL : 'dddd, [la] D[-an de] MMMM, YYYY LT'
+        },
+        meridiem : function (hours, minutes, isLower) {
+            if (hours > 11) {
+                return isLower ? 'p.t.m.' : 'P.T.M.';
+            } else {
+                return isLower ? 'a.t.m.' : 'A.T.M.';
+            }
+        },
+        calendar : {
+            sameDay : '[Hodiaŭ je] LT',
+            nextDay : '[Morgaŭ je] LT',
+            nextWeek : 'dddd [je] LT',
+            lastDay : '[Hieraŭ je] LT',
+            lastWeek : '[pasinta] dddd [je] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'je %s',
+            past : 'antaŭ %s',
+            s : 'sekundoj',
+            m : 'minuto',
+            mm : '%d minutoj',
+            h : 'horo',
+            hh : '%d horoj',
+            d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo
+            dd : '%d tagoj',
+            M : 'monato',
+            MM : '%d monatoj',
+            y : 'jaro',
+            yy : '%d jaroj'
+        },
+        ordinal : '%da',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/es.js b/resources/lib/moment/locale/es.js
new file mode 100644 (file)
index 0000000..04b83a8
--- /dev/null
@@ -0,0 +1,75 @@
+// moment.js locale configuration
+// locale : spanish (es)
+// author : Julio Napurí : https://github.com/julionc
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
+        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
+
+    return moment.defineLocale('es', {
+        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
+        monthsShort : function (m, format) {
+            if (/-MMM-/.test(format)) {
+                return monthsShort[m.month()];
+            } else {
+                return monthsShortDot[m.month()];
+            }
+        },
+        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+        weekdaysMin : 'Do_Lu_Ma_Mi_Ju_Vi_Sá'.split('_'),
+        longDateFormat : {
+            LT : 'H:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D [de] MMMM [de] YYYY',
+            LLL : 'D [de] MMMM [de] YYYY LT',
+            LLLL : 'dddd, D [de] MMMM [de] YYYY LT'
+        },
+        calendar : {
+            sameDay : function () {
+                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+            },
+            nextDay : function () {
+                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+            },
+            nextWeek : function () {
+                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+            },
+            lastDay : function () {
+                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+            },
+            lastWeek : function () {
+                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'en %s',
+            past : 'hace %s',
+            s : 'unos segundos',
+            m : 'un minuto',
+            mm : '%d minutos',
+            h : 'una hora',
+            hh : '%d horas',
+            d : 'un día',
+            dd : '%d días',
+            M : 'un mes',
+            MM : '%d meses',
+            y : 'un año',
+            yy : '%d años'
+        },
+        ordinal : '%dº',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/et.js b/resources/lib/moment/locale/et.js
new file mode 100644 (file)
index 0000000..242ee16
--- /dev/null
@@ -0,0 +1,76 @@
+// moment.js locale configuration
+// locale : estonian (et)
+// author : Henry Kehlmann : https://github.com/madhenry
+// improvements : Illimar Tambek : https://github.com/ragulka
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function processRelativeTime(number, withoutSuffix, key, isFuture) {
+        var format = {
+            's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
+            'm' : ['ühe minuti', 'üks minut'],
+            'mm': [number + ' minuti', number + ' minutit'],
+            'h' : ['ühe tunni', 'tund aega', 'üks tund'],
+            'hh': [number + ' tunni', number + ' tundi'],
+            'd' : ['ühe päeva', 'üks päev'],
+            'M' : ['kuu aja', 'kuu aega', 'üks kuu'],
+            'MM': [number + ' kuu', number + ' kuud'],
+            'y' : ['ühe aasta', 'aasta', 'üks aasta'],
+            'yy': [number + ' aasta', number + ' aastat']
+        };
+        if (withoutSuffix) {
+            return format[key][2] ? format[key][2] : format[key][1];
+        }
+        return isFuture ? format[key][0] : format[key][1];
+    }
+
+    return moment.defineLocale('et', {
+        months        : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),
+        monthsShort   : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),
+        weekdays      : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),
+        weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),
+        weekdaysMin   : 'P_E_T_K_N_R_L'.split('_'),
+        longDateFormat : {
+            LT   : 'H:mm',
+            L    : 'DD.MM.YYYY',
+            LL   : 'D. MMMM YYYY',
+            LLL  : 'D. MMMM YYYY LT',
+            LLLL : 'dddd, D. MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay  : '[Täna,] LT',
+            nextDay  : '[Homme,] LT',
+            nextWeek : '[Järgmine] dddd LT',
+            lastDay  : '[Eile,] LT',
+            lastWeek : '[Eelmine] dddd LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%s pärast',
+            past   : '%s tagasi',
+            s      : processRelativeTime,
+            m      : processRelativeTime,
+            mm     : processRelativeTime,
+            h      : processRelativeTime,
+            hh     : processRelativeTime,
+            d      : processRelativeTime,
+            dd     : '%d päeva',
+            M      : processRelativeTime,
+            MM     : processRelativeTime,
+            y      : processRelativeTime,
+            yy     : processRelativeTime
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/eu.js b/resources/lib/moment/locale/eu.js
new file mode 100644 (file)
index 0000000..8fb89b4
--- /dev/null
@@ -0,0 +1,60 @@
+// moment.js locale configuration
+// locale : euskara (eu)
+// author : Eneko Illarramendi : https://github.com/eillarra
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('eu', {
+        months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),
+        monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),
+        weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),
+        weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),
+        weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'YYYY-MM-DD',
+            LL : 'YYYY[ko] MMMM[ren] D[a]',
+            LLL : 'YYYY[ko] MMMM[ren] D[a] LT',
+            LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] LT',
+            l : 'YYYY-M-D',
+            ll : 'YYYY[ko] MMM D[a]',
+            lll : 'YYYY[ko] MMM D[a] LT',
+            llll : 'ddd, YYYY[ko] MMM D[a] LT'
+        },
+        calendar : {
+            sameDay : '[gaur] LT[etan]',
+            nextDay : '[bihar] LT[etan]',
+            nextWeek : 'dddd LT[etan]',
+            lastDay : '[atzo] LT[etan]',
+            lastWeek : '[aurreko] dddd LT[etan]',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%s barru',
+            past : 'duela %s',
+            s : 'segundo batzuk',
+            m : 'minutu bat',
+            mm : '%d minutu',
+            h : 'ordu bat',
+            hh : '%d ordu',
+            d : 'egun bat',
+            dd : '%d egun',
+            M : 'hilabete bat',
+            MM : '%d hilabete',
+            y : 'urte bat',
+            yy : '%d urte'
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/fa.js b/resources/lib/moment/locale/fa.js
new file mode 100644 (file)
index 0000000..b1151bd
--- /dev/null
@@ -0,0 +1,97 @@
+// moment.js locale configuration
+// locale : Persian (fa)
+// author : Ebrahim Byagowi : https://github.com/ebraminio
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var symbolMap = {
+        '1': '۱',
+        '2': '۲',
+        '3': '۳',
+        '4': '۴',
+        '5': '۵',
+        '6': '۶',
+        '7': '۷',
+        '8': '۸',
+        '9': '۹',
+        '0': '۰'
+    }, numberMap = {
+        '۱': '1',
+        '۲': '2',
+        '۳': '3',
+        '۴': '4',
+        '۵': '5',
+        '۶': '6',
+        '۷': '7',
+        '۸': '8',
+        '۹': '9',
+        '۰': '0'
+    };
+
+    return moment.defineLocale('fa', {
+        months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
+        monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
+        weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
+        weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
+        weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd, D MMMM YYYY LT'
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'قبل از ظهر';
+            } else {
+                return 'بعد از ظهر';
+            }
+        },
+        calendar : {
+            sameDay : '[امروز ساعت] LT',
+            nextDay : '[فردا ساعت] LT',
+            nextWeek : 'dddd [ساعت] LT',
+            lastDay : '[دیروز ساعت] LT',
+            lastWeek : 'dddd [پیش] [ساعت] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'در %s',
+            past : '%s پیش',
+            s : 'چندین ثانیه',
+            m : 'یک دقیقه',
+            mm : '%d دقیقه',
+            h : 'یک ساعت',
+            hh : '%d ساعت',
+            d : 'یک روز',
+            dd : '%d روز',
+            M : 'یک ماه',
+            MM : '%d ماه',
+            y : 'یک سال',
+            yy : '%d سال'
+        },
+        preparse: function (string) {
+            return string.replace(/[۰-۹]/g, function (match) {
+                return numberMap[match];
+            }).replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            }).replace(/,/g, '،');
+        },
+        ordinal : '%dم',
+        week : {
+            dow : 6, // Saturday is the first day of the week.
+            doy : 12 // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/fi.js b/resources/lib/moment/locale/fi.js
new file mode 100644 (file)
index 0000000..1fedcab
--- /dev/null
@@ -0,0 +1,105 @@
+// moment.js locale configuration
+// locale : finnish (fi)
+// author : Tarmo Aidantausta : https://github.com/bleadof
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),
+        numbersFuture = [
+            'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',
+            numbersPast[7], numbersPast[8], numbersPast[9]
+        ];
+
+    function translate(number, withoutSuffix, key, isFuture) {
+        var result = '';
+        switch (key) {
+        case 's':
+            return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
+        case 'm':
+            return isFuture ? 'minuutin' : 'minuutti';
+        case 'mm':
+            result = isFuture ? 'minuutin' : 'minuuttia';
+            break;
+        case 'h':
+            return isFuture ? 'tunnin' : 'tunti';
+        case 'hh':
+            result = isFuture ? 'tunnin' : 'tuntia';
+            break;
+        case 'd':
+            return isFuture ? 'päivän' : 'päivä';
+        case 'dd':
+            result = isFuture ? 'päivän' : 'päivää';
+            break;
+        case 'M':
+            return isFuture ? 'kuukauden' : 'kuukausi';
+        case 'MM':
+            result = isFuture ? 'kuukauden' : 'kuukautta';
+            break;
+        case 'y':
+            return isFuture ? 'vuoden' : 'vuosi';
+        case 'yy':
+            result = isFuture ? 'vuoden' : 'vuotta';
+            break;
+        }
+        result = verbalNumber(number, isFuture) + ' ' + result;
+        return result;
+    }
+
+    function verbalNumber(number, isFuture) {
+        return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;
+    }
+
+    return moment.defineLocale('fi', {
+        months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),
+        monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),
+        weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),
+        weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),
+        weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),
+        longDateFormat : {
+            LT : 'HH.mm',
+            L : 'DD.MM.YYYY',
+            LL : 'Do MMMM[ta] YYYY',
+            LLL : 'Do MMMM[ta] YYYY, [klo] LT',
+            LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] LT',
+            l : 'D.M.YYYY',
+            ll : 'Do MMM YYYY',
+            lll : 'Do MMM YYYY, [klo] LT',
+            llll : 'ddd, Do MMM YYYY, [klo] LT'
+        },
+        calendar : {
+            sameDay : '[tänään] [klo] LT',
+            nextDay : '[huomenna] [klo] LT',
+            nextWeek : 'dddd [klo] LT',
+            lastDay : '[eilen] [klo] LT',
+            lastWeek : '[viime] dddd[na] [klo] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%s päästä',
+            past : '%s sitten',
+            s : translate,
+            m : translate,
+            mm : translate,
+            h : translate,
+            hh : translate,
+            d : translate,
+            dd : translate,
+            M : translate,
+            MM : translate,
+            y : translate,
+            yy : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/fo.js b/resources/lib/moment/locale/fo.js
new file mode 100644 (file)
index 0000000..a27f9da
--- /dev/null
@@ -0,0 +1,56 @@
+// moment.js locale configuration
+// locale : faroese (fo)
+// author : Ragnar Johannesen : https://github.com/ragnar123
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('fo', {
+        months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
+        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
+        weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),
+        weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),
+        weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd D. MMMM, YYYY LT'
+        },
+        calendar : {
+            sameDay : '[Í dag kl.] LT',
+            nextDay : '[Í morgin kl.] LT',
+            nextWeek : 'dddd [kl.] LT',
+            lastDay : '[Í gjár kl.] LT',
+            lastWeek : '[síðstu] dddd [kl] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'um %s',
+            past : '%s síðani',
+            s : 'fá sekund',
+            m : 'ein minutt',
+            mm : '%d minuttir',
+            h : 'ein tími',
+            hh : '%d tímar',
+            d : 'ein dagur',
+            dd : '%d dagar',
+            M : 'ein mánaði',
+            MM : '%d mánaðir',
+            y : 'eitt ár',
+            yy : '%d ár'
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/fr-ca.js b/resources/lib/moment/locale/fr-ca.js
new file mode 100644 (file)
index 0000000..c0f1bdc
--- /dev/null
@@ -0,0 +1,54 @@
+// moment.js locale configuration
+// locale : canadian french (fr-ca)
+// author : Jonathan Abourbih : https://github.com/jonbca
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('fr-ca', {
+        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+        weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'YYYY-MM-DD',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay: '[Aujourd\'hui à] LT',
+            nextDay: '[Demain à] LT',
+            nextWeek: 'dddd [à] LT',
+            lastDay: '[Hier à] LT',
+            lastWeek: 'dddd [dernier à] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'dans %s',
+            past : 'il y a %s',
+            s : 'quelques secondes',
+            m : 'une minute',
+            mm : '%d minutes',
+            h : 'une heure',
+            hh : '%d heures',
+            d : 'un jour',
+            dd : '%d jours',
+            M : 'un mois',
+            MM : '%d mois',
+            y : 'un an',
+            yy : '%d ans'
+        },
+        ordinal : function (number) {
+            return number + (number === 1 ? 'er' : '');
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/fr.js b/resources/lib/moment/locale/fr.js
new file mode 100644 (file)
index 0000000..f217ff1
--- /dev/null
@@ -0,0 +1,58 @@
+// moment.js locale configuration
+// locale : french (fr)
+// author : John Fischer : https://github.com/jfroffice
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('fr', {
+        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+        weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay: '[Aujourd\'hui à] LT',
+            nextDay: '[Demain à] LT',
+            nextWeek: 'dddd [à] LT',
+            lastDay: '[Hier à] LT',
+            lastWeek: 'dddd [dernier à] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'dans %s',
+            past : 'il y a %s',
+            s : 'quelques secondes',
+            m : 'une minute',
+            mm : '%d minutes',
+            h : 'une heure',
+            hh : '%d heures',
+            d : 'un jour',
+            dd : '%d jours',
+            M : 'un mois',
+            MM : '%d mois',
+            y : 'un an',
+            yy : '%d ans'
+        },
+        ordinal : function (number) {
+            return number + (number === 1 ? 'er' : '');
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/gl.js b/resources/lib/moment/locale/gl.js
new file mode 100644 (file)
index 0000000..ac63862
--- /dev/null
@@ -0,0 +1,71 @@
+// moment.js locale configuration
+// locale : galician (gl)
+// author : Juan G. Hurtado : https://github.com/juanghurtado
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('gl', {
+        months : 'Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro'.split('_'),
+        monthsShort : 'Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.'.split('_'),
+        weekdays : 'Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado'.split('_'),
+        weekdaysShort : 'Dom._Lun._Mar._Mér._Xov._Ven._Sáb.'.split('_'),
+        weekdaysMin : 'Do_Lu_Ma_Mé_Xo_Ve_Sá'.split('_'),
+        longDateFormat : {
+            LT : 'H:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay : function () {
+                return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
+            },
+            nextDay : function () {
+                return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
+            },
+            nextWeek : function () {
+                return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
+            },
+            lastDay : function () {
+                return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';
+            },
+            lastWeek : function () {
+                return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : function (str) {
+                if (str === 'uns segundos') {
+                    return 'nuns segundos';
+                }
+                return 'en ' + str;
+            },
+            past : 'hai %s',
+            s : 'uns segundos',
+            m : 'un minuto',
+            mm : '%d minutos',
+            h : 'unha hora',
+            hh : '%d horas',
+            d : 'un día',
+            dd : '%d días',
+            M : 'un mes',
+            MM : '%d meses',
+            y : 'un ano',
+            yy : '%d anos'
+        },
+        ordinal : '%dº',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/he.js b/resources/lib/moment/locale/he.js
new file mode 100644 (file)
index 0000000..06f954f
--- /dev/null
@@ -0,0 +1,77 @@
+// moment.js locale configuration
+// locale : Hebrew (he)
+// author : Tomer Cohen : https://github.com/tomer
+// author : Moshe Simantov : https://github.com/DevelopmentIL
+// author : Tal Ater : https://github.com/TalAter
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('he', {
+        months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),
+        monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),
+        weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
+        weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
+        weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D [ב]MMMM YYYY',
+            LLL : 'D [ב]MMMM YYYY LT',
+            LLLL : 'dddd, D [ב]MMMM YYYY LT',
+            l : 'D/M/YYYY',
+            ll : 'D MMM YYYY',
+            lll : 'D MMM YYYY LT',
+            llll : 'ddd, D MMM YYYY LT'
+        },
+        calendar : {
+            sameDay : '[היום ב־]LT',
+            nextDay : '[מחר ב־]LT',
+            nextWeek : 'dddd [בשעה] LT',
+            lastDay : '[אתמול ב־]LT',
+            lastWeek : '[ביום] dddd [האחרון בשעה] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'בעוד %s',
+            past : 'לפני %s',
+            s : 'מספר שניות',
+            m : 'דקה',
+            mm : '%d דקות',
+            h : 'שעה',
+            hh : function (number) {
+                if (number === 2) {
+                    return 'שעתיים';
+                }
+                return number + ' שעות';
+            },
+            d : 'יום',
+            dd : function (number) {
+                if (number === 2) {
+                    return 'יומיים';
+                }
+                return number + ' ימים';
+            },
+            M : 'חודש',
+            MM : function (number) {
+                if (number === 2) {
+                    return 'חודשיים';
+                }
+                return number + ' חודשים';
+            },
+            y : 'שנה',
+            yy : function (number) {
+                if (number === 2) {
+                    return 'שנתיים';
+                }
+                return number + ' שנים';
+            }
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/hi.js b/resources/lib/moment/locale/hi.js
new file mode 100644 (file)
index 0000000..4e64560
--- /dev/null
@@ -0,0 +1,105 @@
+// moment.js locale configuration
+// locale : hindi (hi)
+// author : Mayank Singhal : https://github.com/mayanksinghal
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var symbolMap = {
+        '1': '१',
+        '2': '२',
+        '3': '३',
+        '4': '४',
+        '5': '५',
+        '6': '६',
+        '7': '७',
+        '8': '८',
+        '9': '९',
+        '0': '०'
+    },
+    numberMap = {
+        '१': '1',
+        '२': '2',
+        '३': '3',
+        '४': '4',
+        '५': '5',
+        '६': '6',
+        '७': '7',
+        '८': '8',
+        '९': '9',
+        '०': '0'
+    };
+
+    return moment.defineLocale('hi', {
+        months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),
+        monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),
+        weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
+        weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
+        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
+        longDateFormat : {
+            LT : 'A h:mm बजे',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY, LT',
+            LLLL : 'dddd, D MMMM YYYY, LT'
+        },
+        calendar : {
+            sameDay : '[आज] LT',
+            nextDay : '[कल] LT',
+            nextWeek : 'dddd, LT',
+            lastDay : '[कल] LT',
+            lastWeek : '[पिछले] dddd, LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%s में',
+            past : '%s पहले',
+            s : 'कुछ ही क्षण',
+            m : 'एक मिनट',
+            mm : '%d मिनट',
+            h : 'एक घंटा',
+            hh : '%d घंटे',
+            d : 'एक दिन',
+            dd : '%d दिन',
+            M : 'एक महीने',
+            MM : '%d महीने',
+            y : 'एक वर्ष',
+            yy : '%d वर्ष'
+        },
+        preparse: function (string) {
+            return string.replace(/[१२३४५६७८९०]/g, function (match) {
+                return numberMap[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            });
+        },
+        // Hindi notation for meridiems are quite fuzzy in practice. While there exists
+        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'रात';
+            } else if (hour < 10) {
+                return 'सुबह';
+            } else if (hour < 17) {
+                return 'दोपहर';
+            } else if (hour < 20) {
+                return 'शाम';
+            } else {
+                return 'रात';
+            }
+        },
+        week : {
+            dow : 0, // Sunday is the first day of the week.
+            doy : 6  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/hr.js b/resources/lib/moment/locale/hr.js
new file mode 100644 (file)
index 0000000..9e3f6fa
--- /dev/null
@@ -0,0 +1,139 @@
+// moment.js locale configuration
+// locale : hrvatski (hr)
+// author : Bojan Marković : https://github.com/bmarkovic
+
+// based on (sl) translation by Robert Sedovšek
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function translate(number, withoutSuffix, key) {
+        var result = number + ' ';
+        switch (key) {
+        case 'm':
+            return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+        case 'mm':
+            if (number === 1) {
+                result += 'minuta';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'minute';
+            } else {
+                result += 'minuta';
+            }
+            return result;
+        case 'h':
+            return withoutSuffix ? 'jedan sat' : 'jednog sata';
+        case 'hh':
+            if (number === 1) {
+                result += 'sat';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'sata';
+            } else {
+                result += 'sati';
+            }
+            return result;
+        case 'dd':
+            if (number === 1) {
+                result += 'dan';
+            } else {
+                result += 'dana';
+            }
+            return result;
+        case 'MM':
+            if (number === 1) {
+                result += 'mjesec';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'mjeseca';
+            } else {
+                result += 'mjeseci';
+            }
+            return result;
+        case 'yy':
+            if (number === 1) {
+                result += 'godina';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'godine';
+            } else {
+                result += 'godina';
+            }
+            return result;
+        }
+    }
+
+    return moment.defineLocale('hr', {
+        months : 'sječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_'),
+        monthsShort : 'sje._vel._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),
+        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+        longDateFormat : {
+            LT : 'H:mm',
+            L : 'DD. MM. YYYY',
+            LL : 'D. MMMM YYYY',
+            LLL : 'D. MMMM YYYY LT',
+            LLLL : 'dddd, D. MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay  : '[danas u] LT',
+            nextDay  : '[sutra u] LT',
+
+            nextWeek : function () {
+                switch (this.day()) {
+                case 0:
+                    return '[u] [nedjelju] [u] LT';
+                case 3:
+                    return '[u] [srijedu] [u] LT';
+                case 6:
+                    return '[u] [subotu] [u] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[u] dddd [u] LT';
+                }
+            },
+            lastDay  : '[jučer u] LT',
+            lastWeek : function () {
+                switch (this.day()) {
+                case 0:
+                case 3:
+                    return '[prošlu] dddd [u] LT';
+                case 6:
+                    return '[prošle] [subote] [u] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[prošli] dddd [u] LT';
+                }
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'za %s',
+            past   : 'prije %s',
+            s      : 'par sekundi',
+            m      : translate,
+            mm     : translate,
+            h      : translate,
+            hh     : translate,
+            d      : 'dan',
+            dd     : translate,
+            M      : 'mjesec',
+            MM     : translate,
+            y      : 'godinu',
+            yy     : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/hu.js b/resources/lib/moment/locale/hu.js
new file mode 100644 (file)
index 0000000..73fdb83
--- /dev/null
@@ -0,0 +1,105 @@
+// moment.js locale configuration
+// locale : hungarian (hu)
+// author : Adam Brunner : https://github.com/adambrunner
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
+
+    function translate(number, withoutSuffix, key, isFuture) {
+        var num = number,
+            suffix;
+
+        switch (key) {
+        case 's':
+            return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';
+        case 'm':
+            return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
+        case 'mm':
+            return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
+        case 'h':
+            return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
+        case 'hh':
+            return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
+        case 'd':
+            return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
+        case 'dd':
+            return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
+        case 'M':
+            return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+        case 'MM':
+            return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+        case 'y':
+            return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
+        case 'yy':
+            return num + (isFuture || withoutSuffix ? ' év' : ' éve');
+        }
+
+        return '';
+    }
+
+    function week(isFuture) {
+        return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';
+    }
+
+    return moment.defineLocale('hu', {
+        months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),
+        monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),
+        weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
+        weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),
+        weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),
+        longDateFormat : {
+            LT : 'H:mm',
+            L : 'YYYY.MM.DD.',
+            LL : 'YYYY. MMMM D.',
+            LLL : 'YYYY. MMMM D., LT',
+            LLLL : 'YYYY. MMMM D., dddd LT'
+        },
+        meridiem : function (hours, minutes, isLower) {
+            if (hours < 12) {
+                return isLower === true ? 'de' : 'DE';
+            } else {
+                return isLower === true ? 'du' : 'DU';
+            }
+        },
+        calendar : {
+            sameDay : '[ma] LT[-kor]',
+            nextDay : '[holnap] LT[-kor]',
+            nextWeek : function () {
+                return week.call(this, true);
+            },
+            lastDay : '[tegnap] LT[-kor]',
+            lastWeek : function () {
+                return week.call(this, false);
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%s múlva',
+            past : '%s',
+            s : translate,
+            m : translate,
+            mm : translate,
+            h : translate,
+            hh : translate,
+            d : translate,
+            dd : translate,
+            M : translate,
+            MM : translate,
+            y : translate,
+            yy : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/hy-am.js b/resources/lib/moment/locale/hy-am.js
new file mode 100644 (file)
index 0000000..affcd7e
--- /dev/null
@@ -0,0 +1,112 @@
+// moment.js locale configuration
+// locale : Armenian (hy-am)
+// author : Armendarabyan : https://github.com/armendarabyan
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function monthsCaseReplace(m, format) {
+        var months = {
+            'nominative': 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_'),
+            'accusative': 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_')
+        },
+
+        nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return months[nounCase][m.month()];
+    }
+
+    function monthsShortCaseReplace(m, format) {
+        var monthsShort = 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_');
+
+        return monthsShort[m.month()];
+    }
+
+    function weekdaysCaseReplace(m, format) {
+        var weekdays = 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_');
+
+        return weekdays[m.day()];
+    }
+
+    return moment.defineLocale('hy-am', {
+        months : monthsCaseReplace,
+        monthsShort : monthsShortCaseReplace,
+        weekdays : weekdaysCaseReplace,
+        weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
+        weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD.MM.YYYY',
+            LL : 'D MMMM YYYY թ.',
+            LLL : 'D MMMM YYYY թ., LT',
+            LLLL : 'dddd, D MMMM YYYY թ., LT'
+        },
+        calendar : {
+            sameDay: '[այսօր] LT',
+            nextDay: '[վաղը] LT',
+            lastDay: '[երեկ] LT',
+            nextWeek: function () {
+                return 'dddd [օրը ժամը] LT';
+            },
+            lastWeek: function () {
+                return '[անցած] dddd [օրը ժամը] LT';
+            },
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : '%s հետո',
+            past : '%s առաջ',
+            s : 'մի քանի վայրկյան',
+            m : 'րոպե',
+            mm : '%d րոպե',
+            h : 'ժամ',
+            hh : '%d ժամ',
+            d : 'օր',
+            dd : '%d օր',
+            M : 'ամիս',
+            MM : '%d ամիս',
+            y : 'տարի',
+            yy : '%d տարի'
+        },
+
+        meridiem : function (hour) {
+            if (hour < 4) {
+                return 'գիշերվա';
+            } else if (hour < 12) {
+                return 'առավոտվա';
+            } else if (hour < 17) {
+                return 'ցերեկվա';
+            } else {
+                return 'երեկոյան';
+            }
+        },
+
+        ordinal: function (number, period) {
+            switch (period) {
+            case 'DDD':
+            case 'w':
+            case 'W':
+            case 'DDDo':
+                if (number === 1) {
+                    return number + '-ին';
+                }
+                return number + '-րդ';
+            default:
+                return number;
+            }
+        },
+
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/id.js b/resources/lib/moment/locale/id.js
new file mode 100644 (file)
index 0000000..143426a
--- /dev/null
@@ -0,0 +1,67 @@
+// moment.js locale configuration
+// locale : Bahasa Indonesia (id)
+// author : Mohammad Satrio Utomo : https://github.com/tyok
+// reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('id', {
+        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),
+        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'),
+        weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
+        weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
+        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
+        longDateFormat : {
+            LT : 'HH.mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY [pukul] LT',
+            LLLL : 'dddd, D MMMM YYYY [pukul] LT'
+        },
+        meridiem : function (hours, minutes, isLower) {
+            if (hours < 11) {
+                return 'pagi';
+            } else if (hours < 15) {
+                return 'siang';
+            } else if (hours < 19) {
+                return 'sore';
+            } else {
+                return 'malam';
+            }
+        },
+        calendar : {
+            sameDay : '[Hari ini pukul] LT',
+            nextDay : '[Besok pukul] LT',
+            nextWeek : 'dddd [pukul] LT',
+            lastDay : '[Kemarin pukul] LT',
+            lastWeek : 'dddd [lalu pukul] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'dalam %s',
+            past : '%s yang lalu',
+            s : 'beberapa detik',
+            m : 'semenit',
+            mm : '%d menit',
+            h : 'sejam',
+            hh : '%d jam',
+            d : 'sehari',
+            dd : '%d hari',
+            M : 'sebulan',
+            MM : '%d bulan',
+            y : 'setahun',
+            yy : '%d tahun'
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/is.js b/resources/lib/moment/locale/is.js
new file mode 100644 (file)
index 0000000..479f82d
--- /dev/null
@@ -0,0 +1,124 @@
+// moment.js locale configuration
+// locale : icelandic (is)
+// author : Hinrik Örn Sigurðsson : https://github.com/hinrik
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function plural(n) {
+        if (n % 100 === 11) {
+            return true;
+        } else if (n % 10 === 1) {
+            return false;
+        }
+        return true;
+    }
+
+    function translate(number, withoutSuffix, key, isFuture) {
+        var result = number + ' ';
+        switch (key) {
+        case 's':
+            return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';
+        case 'm':
+            return withoutSuffix ? 'mínúta' : 'mínútu';
+        case 'mm':
+            if (plural(number)) {
+                return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
+            } else if (withoutSuffix) {
+                return result + 'mínúta';
+            }
+            return result + 'mínútu';
+        case 'hh':
+            if (plural(number)) {
+                return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
+            }
+            return result + 'klukkustund';
+        case 'd':
+            if (withoutSuffix) {
+                return 'dagur';
+            }
+            return isFuture ? 'dag' : 'degi';
+        case 'dd':
+            if (plural(number)) {
+                if (withoutSuffix) {
+                    return result + 'dagar';
+                }
+                return result + (isFuture ? 'daga' : 'dögum');
+            } else if (withoutSuffix) {
+                return result + 'dagur';
+            }
+            return result + (isFuture ? 'dag' : 'degi');
+        case 'M':
+            if (withoutSuffix) {
+                return 'mánuður';
+            }
+            return isFuture ? 'mánuð' : 'mánuði';
+        case 'MM':
+            if (plural(number)) {
+                if (withoutSuffix) {
+                    return result + 'mánuðir';
+                }
+                return result + (isFuture ? 'mánuði' : 'mánuðum');
+            } else if (withoutSuffix) {
+                return result + 'mánuður';
+            }
+            return result + (isFuture ? 'mánuð' : 'mánuði');
+        case 'y':
+            return withoutSuffix || isFuture ? 'ár' : 'ári';
+        case 'yy':
+            if (plural(number)) {
+                return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
+            }
+            return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
+        }
+    }
+
+    return moment.defineLocale('is', {
+        months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),
+        monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
+        weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),
+        weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),
+        weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
+        longDateFormat : {
+            LT : 'H:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D. MMMM YYYY',
+            LLL : 'D. MMMM YYYY [kl.] LT',
+            LLLL : 'dddd, D. MMMM YYYY [kl.] LT'
+        },
+        calendar : {
+            sameDay : '[í dag kl.] LT',
+            nextDay : '[á morgun kl.] LT',
+            nextWeek : 'dddd [kl.] LT',
+            lastDay : '[í gær kl.] LT',
+            lastWeek : '[síðasta] dddd [kl.] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'eftir %s',
+            past : 'fyrir %s síðan',
+            s : translate,
+            m : translate,
+            mm : translate,
+            h : 'klukkustund',
+            hh : translate,
+            d : translate,
+            dd : translate,
+            M : translate,
+            MM : translate,
+            y : translate,
+            yy : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/it.js b/resources/lib/moment/locale/it.js
new file mode 100644 (file)
index 0000000..6695390
--- /dev/null
@@ -0,0 +1,59 @@
+// moment.js locale configuration
+// locale : italian (it)
+// author : Lorenzo : https://github.com/aliem
+// author: Mattia Larentis: https://github.com/nostalgiaz
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('it', {
+        months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
+        monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
+        weekdays : 'Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato'.split('_'),
+        weekdaysShort : 'Dom_Lun_Mar_Mer_Gio_Ven_Sab'.split('_'),
+        weekdaysMin : 'D_L_Ma_Me_G_V_S'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd, D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay: '[Oggi alle] LT',
+            nextDay: '[Domani alle] LT',
+            nextWeek: 'dddd [alle] LT',
+            lastDay: '[Ieri alle] LT',
+            lastWeek: '[lo scorso] dddd [alle] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : function (s) {
+                return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;
+            },
+            past : '%s fa',
+            s : 'alcuni secondi',
+            m : 'un minuto',
+            mm : '%d minuti',
+            h : 'un\'ora',
+            hh : '%d ore',
+            d : 'un giorno',
+            dd : '%d giorni',
+            M : 'un mese',
+            MM : '%d mesi',
+            y : 'un anno',
+            yy : '%d anni'
+        },
+        ordinal: '%dº',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/ja.js b/resources/lib/moment/locale/ja.js
new file mode 100644 (file)
index 0000000..f14fa4e
--- /dev/null
@@ -0,0 +1,58 @@
+// moment.js locale configuration
+// locale : japanese (ja)
+// author : LI Long : https://github.com/baryon
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('ja', {
+        months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+        weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
+        weekdaysShort : '日_月_火_水_木_金_土'.split('_'),
+        weekdaysMin : '日_月_火_水_木_金_土'.split('_'),
+        longDateFormat : {
+            LT : 'Ah時m分',
+            L : 'YYYY/MM/DD',
+            LL : 'YYYY年M月D日',
+            LLL : 'YYYY年M月D日LT',
+            LLLL : 'YYYY年M月D日LT dddd'
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 12) {
+                return '午前';
+            } else {
+                return '午後';
+            }
+        },
+        calendar : {
+            sameDay : '[今日] LT',
+            nextDay : '[明日] LT',
+            nextWeek : '[来週]dddd LT',
+            lastDay : '[昨日] LT',
+            lastWeek : '[前週]dddd LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%s後',
+            past : '%s前',
+            s : '数秒',
+            m : '1分',
+            mm : '%d分',
+            h : '1時間',
+            hh : '%d時間',
+            d : '1日',
+            dd : '%d日',
+            M : '1ヶ月',
+            MM : '%dヶ月',
+            y : '1年',
+            yy : '%d年'
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/ka.js b/resources/lib/moment/locale/ka.js
new file mode 100644 (file)
index 0000000..73eb9c7
--- /dev/null
@@ -0,0 +1,107 @@
+// moment.js locale configuration
+// locale : Georgian (ka)
+// author : Irakli Janiashvili : https://github.com/irakli-janiashvili
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function monthsCaseReplace(m, format) {
+        var months = {
+            'nominative': 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
+            'accusative': 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
+        },
+
+        nounCase = (/D[oD] *MMMM?/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return months[nounCase][m.month()];
+    }
+
+    function weekdaysCaseReplace(m, format) {
+        var weekdays = {
+            'nominative': 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
+            'accusative': 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_')
+        },
+
+        nounCase = (/(წინა|შემდეგ)/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return weekdays[nounCase][m.day()];
+    }
+
+    return moment.defineLocale('ka', {
+        months : monthsCaseReplace,
+        monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
+        weekdays : weekdaysCaseReplace,
+        weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
+        weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
+        longDateFormat : {
+            LT : 'h:mm A',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd, D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay : '[დღეს] LT[-ზე]',
+            nextDay : '[ხვალ] LT[-ზე]',
+            lastDay : '[გუშინ] LT[-ზე]',
+            nextWeek : '[შემდეგ] dddd LT[-ზე]',
+            lastWeek : '[წინა] dddd LT-ზე',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : function (s) {
+                return (/(წამი|წუთი|საათი|წელი)/).test(s) ?
+                    s.replace(/ი$/, 'ში') :
+                    s + 'ში';
+            },
+            past : function (s) {
+                if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {
+                    return s.replace(/(ი|ე)$/, 'ის წინ');
+                }
+                if ((/წელი/).test(s)) {
+                    return s.replace(/წელი$/, 'წლის წინ');
+                }
+            },
+            s : 'რამდენიმე წამი',
+            m : 'წუთი',
+            mm : '%d წუთი',
+            h : 'საათი',
+            hh : '%d საათი',
+            d : 'დღე',
+            dd : '%d დღე',
+            M : 'თვე',
+            MM : '%d თვე',
+            y : 'წელი',
+            yy : '%d წელი'
+        },
+        ordinal : function (number) {
+            if (number === 0) {
+                return number;
+            }
+
+            if (number === 1) {
+                return number + '-ლი';
+            }
+
+            if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {
+                return 'მე-' + number;
+            }
+
+            return number + '-ე';
+        },
+        week : {
+            dow : 1,
+            doy : 7
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/km.js b/resources/lib/moment/locale/km.js
new file mode 100644 (file)
index 0000000..9ba4888
--- /dev/null
@@ -0,0 +1,55 @@
+// moment.js locale configuration
+// locale : khmer (km)
+// author : Kruy Vanna : https://github.com/kruyvanna
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('km', {
+        months: 'មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
+        monthsShort: 'មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
+        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+        weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+        weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY LT',
+            LLLL: 'dddd, D MMMM YYYY LT'
+        },
+        calendar: {
+            sameDay: '[ថ្ងៃនៈ ម៉ោង] LT',
+            nextDay: '[ស្អែក ម៉ោង] LT',
+            nextWeek: 'dddd [ម៉ោង] LT',
+            lastDay: '[ម្សិលមិញ ម៉ោង] LT',
+            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
+            sameElse: 'L'
+        },
+        relativeTime: {
+            future: '%sទៀត',
+            past: '%sមុន',
+            s: 'ប៉ុន្មានវិនាទី',
+            m: 'មួយនាទី',
+            mm: '%d នាទី',
+            h: 'មួយម៉ោង',
+            hh: '%d ម៉ោង',
+            d: 'មួយថ្ងៃ',
+            dd: '%d ថ្ងៃ',
+            M: 'មួយខែ',
+            MM: '%d ខែ',
+            y: 'មួយឆ្នាំ',
+            yy: '%d ឆ្នាំ'
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4 // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/ko.js b/resources/lib/moment/locale/ko.js
new file mode 100644 (file)
index 0000000..57017f5
--- /dev/null
@@ -0,0 +1,63 @@
+// moment.js locale configuration
+// locale : korean (ko)
+//
+// authors
+//
+// - Kyungwook, Park : https://github.com/kyungw00k
+// - Jeeeyul Lee <jeeeyul@gmail.com>
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('ko', {
+        months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
+        monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
+        weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
+        weekdaysShort : '일_월_화_수_목_금_토'.split('_'),
+        weekdaysMin : '일_월_화_수_목_금_토'.split('_'),
+        longDateFormat : {
+            LT : 'A h시 m분',
+            L : 'YYYY.MM.DD',
+            LL : 'YYYY년 MMMM D일',
+            LLL : 'YYYY년 MMMM D일 LT',
+            LLLL : 'YYYY년 MMMM D일 dddd LT'
+        },
+        meridiem : function (hour, minute, isUpper) {
+            return hour < 12 ? '오전' : '오후';
+        },
+        calendar : {
+            sameDay : '오늘 LT',
+            nextDay : '내일 LT',
+            nextWeek : 'dddd LT',
+            lastDay : '어제 LT',
+            lastWeek : '지난주 dddd LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%s 후',
+            past : '%s 전',
+            s : '몇초',
+            ss : '%d초',
+            m : '일분',
+            mm : '%d분',
+            h : '한시간',
+            hh : '%d시간',
+            d : '하루',
+            dd : '%d일',
+            M : '한달',
+            MM : '%d달',
+            y : '일년',
+            yy : '%d년'
+        },
+        ordinal : '%d일',
+        meridiemParse : /(오전|오후)/,
+        isPM : function (token) {
+            return token === '오후';
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/lb.js b/resources/lib/moment/locale/lb.js
new file mode 100644 (file)
index 0000000..14fab97
--- /dev/null
@@ -0,0 +1,137 @@
+// moment.js locale configuration
+// locale : Luxembourgish (lb)
+// author : mweimerskirch : https://github.com/mweimerskirch, David Raison : https://github.com/kwisatz
+
+// Note: Luxembourgish has a very particular phonological rule ('Eifeler Regel') that causes the
+// deletion of the final 'n' in certain contexts. That's what the 'eifelerRegelAppliesToWeekday'
+// and 'eifelerRegelAppliesToNumber' methods are meant for
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function processRelativeTime(number, withoutSuffix, key, isFuture) {
+        var format = {
+            'm': ['eng Minutt', 'enger Minutt'],
+            'h': ['eng Stonn', 'enger Stonn'],
+            'd': ['een Dag', 'engem Dag'],
+            'M': ['ee Mount', 'engem Mount'],
+            'y': ['ee Joer', 'engem Joer']
+        };
+        return withoutSuffix ? format[key][0] : format[key][1];
+    }
+
+    function processFutureTime(string) {
+        var number = string.substr(0, string.indexOf(' '));
+        if (eifelerRegelAppliesToNumber(number)) {
+            return 'a ' + string;
+        }
+        return 'an ' + string;
+    }
+
+    function processPastTime(string) {
+        var number = string.substr(0, string.indexOf(' '));
+        if (eifelerRegelAppliesToNumber(number)) {
+            return 'viru ' + string;
+        }
+        return 'virun ' + string;
+    }
+
+    /**
+     * Returns true if the word before the given number loses the '-n' ending.
+     * e.g. 'an 10 Deeg' but 'a 5 Deeg'
+     *
+     * @param number {integer}
+     * @returns {boolean}
+     */
+    function eifelerRegelAppliesToNumber(number) {
+        number = parseInt(number, 10);
+        if (isNaN(number)) {
+            return false;
+        }
+        if (number < 0) {
+            // Negative Number --> always true
+            return true;
+        } else if (number < 10) {
+            // Only 1 digit
+            if (4 <= number && number <= 7) {
+                return true;
+            }
+            return false;
+        } else if (number < 100) {
+            // 2 digits
+            var lastDigit = number % 10, firstDigit = number / 10;
+            if (lastDigit === 0) {
+                return eifelerRegelAppliesToNumber(firstDigit);
+            }
+            return eifelerRegelAppliesToNumber(lastDigit);
+        } else if (number < 10000) {
+            // 3 or 4 digits --> recursively check first digit
+            while (number >= 10) {
+                number = number / 10;
+            }
+            return eifelerRegelAppliesToNumber(number);
+        } else {
+            // Anything larger than 4 digits: recursively check first n-3 digits
+            number = number / 1000;
+            return eifelerRegelAppliesToNumber(number);
+        }
+    }
+
+    return moment.defineLocale('lb', {
+        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
+        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+        weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),
+        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
+        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
+        longDateFormat: {
+            LT: 'H:mm [Auer]',
+            L: 'DD.MM.YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY LT',
+            LLLL: 'dddd, D. MMMM YYYY LT'
+        },
+        calendar: {
+            sameDay: '[Haut um] LT',
+            sameElse: 'L',
+            nextDay: '[Muer um] LT',
+            nextWeek: 'dddd [um] LT',
+            lastDay: '[Gëschter um] LT',
+            lastWeek: function () {
+                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
+                switch (this.day()) {
+                    case 2:
+                    case 4:
+                        return '[Leschten] dddd [um] LT';
+                    default:
+                        return '[Leschte] dddd [um] LT';
+                }
+            }
+        },
+        relativeTime : {
+            future : processFutureTime,
+            past : processPastTime,
+            s : 'e puer Sekonnen',
+            m : processRelativeTime,
+            mm : '%d Minutten',
+            h : processRelativeTime,
+            hh : '%d Stonnen',
+            d : processRelativeTime,
+            dd : '%d Deeg',
+            M : processRelativeTime,
+            MM : '%d Méint',
+            y : processRelativeTime,
+            yy : '%d Joer'
+        },
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/lt.js b/resources/lib/moment/locale/lt.js
new file mode 100644 (file)
index 0000000..013f8f1
--- /dev/null
@@ -0,0 +1,118 @@
+// moment.js locale configuration
+// locale : Lithuanian (lt)
+// author : Mindaugas Mozūras : https://github.com/mmozuras
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var units = {
+        'm' : 'minutė_minutės_minutę',
+        'mm': 'minutės_minučių_minutes',
+        'h' : 'valanda_valandos_valandą',
+        'hh': 'valandos_valandų_valandas',
+        'd' : 'diena_dienos_dieną',
+        'dd': 'dienos_dienų_dienas',
+        'M' : 'mėnuo_mėnesio_mėnesį',
+        'MM': 'mėnesiai_mėnesių_mėnesius',
+        'y' : 'metai_metų_metus',
+        'yy': 'metai_metų_metus'
+    },
+    weekDays = 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_');
+
+    function translateSeconds(number, withoutSuffix, key, isFuture) {
+        if (withoutSuffix) {
+            return 'kelios sekundės';
+        } else {
+            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
+        }
+    }
+
+    function translateSingular(number, withoutSuffix, key, isFuture) {
+        return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);
+    }
+
+    function special(number) {
+        return number % 10 === 0 || (number > 10 && number < 20);
+    }
+
+    function forms(key) {
+        return units[key].split('_');
+    }
+
+    function translate(number, withoutSuffix, key, isFuture) {
+        var result = number + ' ';
+        if (number === 1) {
+            return result + translateSingular(number, withoutSuffix, key[0], isFuture);
+        } else if (withoutSuffix) {
+            return result + (special(number) ? forms(key)[1] : forms(key)[0]);
+        } else {
+            if (isFuture) {
+                return result + forms(key)[1];
+            } else {
+                return result + (special(number) ? forms(key)[1] : forms(key)[2]);
+            }
+        }
+    }
+
+    function relativeWeekDay(moment, format) {
+        var nominative = format.indexOf('dddd HH:mm') === -1,
+            weekDay = weekDays[moment.day()];
+
+        return nominative ? weekDay : weekDay.substring(0, weekDay.length - 2) + 'į';
+    }
+
+    return moment.defineLocale('lt', {
+        months : 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),
+        monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
+        weekdays : relativeWeekDay,
+        weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
+        weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'YYYY-MM-DD',
+            LL : 'YYYY [m.] MMMM D [d.]',
+            LLL : 'YYYY [m.] MMMM D [d.], LT [val.]',
+            LLLL : 'YYYY [m.] MMMM D [d.], dddd, LT [val.]',
+            l : 'YYYY-MM-DD',
+            ll : 'YYYY [m.] MMMM D [d.]',
+            lll : 'YYYY [m.] MMMM D [d.], LT [val.]',
+            llll : 'YYYY [m.] MMMM D [d.], ddd, LT [val.]'
+        },
+        calendar : {
+            sameDay : '[Šiandien] LT',
+            nextDay : '[Rytoj] LT',
+            nextWeek : 'dddd LT',
+            lastDay : '[Vakar] LT',
+            lastWeek : '[Praėjusį] dddd LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'po %s',
+            past : 'prieš %s',
+            s : translateSeconds,
+            m : translateSingular,
+            mm : translate,
+            h : translateSingular,
+            hh : translate,
+            d : translateSingular,
+            dd : translate,
+            M : translateSingular,
+            MM : translate,
+            y : translateSingular,
+            yy : translate
+        },
+        ordinal : function (number) {
+            return number + '-oji';
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/lv.js b/resources/lib/moment/locale/lv.js
new file mode 100644 (file)
index 0000000..7e1892e
--- /dev/null
@@ -0,0 +1,77 @@
+// moment.js locale configuration
+// locale : latvian (lv)
+// author : Kristaps Karlsons : https://github.com/skakri
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var units = {
+        'mm': 'minūti_minūtes_minūte_minūtes',
+        'hh': 'stundu_stundas_stunda_stundas',
+        'dd': 'dienu_dienas_diena_dienas',
+        'MM': 'mēnesi_mēnešus_mēnesis_mēneši',
+        'yy': 'gadu_gadus_gads_gadi'
+    };
+
+    function format(word, number, withoutSuffix) {
+        var forms = word.split('_');
+        if (withoutSuffix) {
+            return number % 10 === 1 && number !== 11 ? forms[2] : forms[3];
+        } else {
+            return number % 10 === 1 && number !== 11 ? forms[0] : forms[1];
+        }
+    }
+
+    function relativeTimeWithPlural(number, withoutSuffix, key) {
+        return number + ' ' + format(units[key], number, withoutSuffix);
+    }
+
+    return moment.defineLocale('lv', {
+        months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),
+        monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
+        weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),
+        weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),
+        weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD.MM.YYYY',
+            LL : 'YYYY. [gada] D. MMMM',
+            LLL : 'YYYY. [gada] D. MMMM, LT',
+            LLLL : 'YYYY. [gada] D. MMMM, dddd, LT'
+        },
+        calendar : {
+            sameDay : '[Šodien pulksten] LT',
+            nextDay : '[Rīt pulksten] LT',
+            nextWeek : 'dddd [pulksten] LT',
+            lastDay : '[Vakar pulksten] LT',
+            lastWeek : '[Pagājušā] dddd [pulksten] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%s vēlāk',
+            past : '%s agrāk',
+            s : 'dažas sekundes',
+            m : 'minūti',
+            mm : relativeTimeWithPlural,
+            h : 'stundu',
+            hh : relativeTimeWithPlural,
+            d : 'dienu',
+            dd : relativeTimeWithPlural,
+            M : 'mēnesi',
+            MM : relativeTimeWithPlural,
+            y : 'gadu',
+            yy : relativeTimeWithPlural
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/mk.js b/resources/lib/moment/locale/mk.js
new file mode 100644 (file)
index 0000000..94c7fc1
--- /dev/null
@@ -0,0 +1,86 @@
+// moment.js locale configuration
+// locale : macedonian (mk)
+// author : Borislav Mickov : https://github.com/B0k0
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('mk', {
+        months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),
+        monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
+        weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),
+        weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),
+        weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),
+        longDateFormat : {
+            LT : 'H:mm',
+            L : 'D.MM.YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd, D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay : '[Денес во] LT',
+            nextDay : '[Утре во] LT',
+            nextWeek : 'dddd [во] LT',
+            lastDay : '[Вчера во] LT',
+            lastWeek : function () {
+                switch (this.day()) {
+                case 0:
+                case 3:
+                case 6:
+                    return '[Во изминатата] dddd [во] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[Во изминатиот] dddd [во] LT';
+                }
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'после %s',
+            past : 'пред %s',
+            s : 'неколку секунди',
+            m : 'минута',
+            mm : '%d минути',
+            h : 'час',
+            hh : '%d часа',
+            d : 'ден',
+            dd : '%d дена',
+            M : 'месец',
+            MM : '%d месеци',
+            y : 'година',
+            yy : '%d години'
+        },
+        ordinal : function (number) {
+            var lastDigit = number % 10,
+                last2Digits = number % 100;
+            if (number === 0) {
+                return number + '-ев';
+            } else if (last2Digits === 0) {
+                return number + '-ен';
+            } else if (last2Digits > 10 && last2Digits < 20) {
+                return number + '-ти';
+            } else if (lastDigit === 1) {
+                return number + '-ви';
+            } else if (lastDigit === 2) {
+                return number + '-ри';
+            } else if (lastDigit === 7 || lastDigit === 8) {
+                return number + '-ми';
+            } else {
+                return number + '-ти';
+            }
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/ml.js b/resources/lib/moment/locale/ml.js
new file mode 100644 (file)
index 0000000..ea4d949
--- /dev/null
@@ -0,0 +1,64 @@
+// moment.js locale configuration
+// locale : malayalam (ml)
+// author : Floyd Pink : https://github.com/floydpink
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('ml', {
+        months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),
+        monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),
+        weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),
+        weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
+        weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
+        longDateFormat : {
+            LT : 'A h:mm -നു',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY, LT',
+            LLLL : 'dddd, D MMMM YYYY, LT'
+        },
+        calendar : {
+            sameDay : '[ഇന്ന്] LT',
+            nextDay : '[നാളെ] LT',
+            nextWeek : 'dddd, LT',
+            lastDay : '[ഇന്നലെ] LT',
+            lastWeek : '[കഴിഞ്ഞ] dddd, LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%s കഴിഞ്ഞ്',
+            past : '%s മുൻപ്',
+            s : 'അൽപ നിമിഷങ്ങൾ',
+            m : 'ഒരു മിനിറ്റ്',
+            mm : '%d മിനിറ്റ്',
+            h : 'ഒരു മണിക്കൂർ',
+            hh : '%d മണിക്കൂർ',
+            d : 'ഒരു ദിവസം',
+            dd : '%d ദിവസം',
+            M : 'ഒരു മാസം',
+            MM : '%d മാസം',
+            y : 'ഒരു വർഷം',
+            yy : '%d വർഷം'
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'രാത്രി';
+            } else if (hour < 12) {
+                return 'രാവിലെ';
+            } else if (hour < 17) {
+                return 'ഉച്ച കഴിഞ്ഞ്';
+            } else if (hour < 20) {
+                return 'വൈകുന്നേരം';
+            } else {
+                return 'രാത്രി';
+            }
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/mr.js b/resources/lib/moment/locale/mr.js
new file mode 100644 (file)
index 0000000..141eaf8
--- /dev/null
@@ -0,0 +1,104 @@
+// moment.js locale configuration
+// locale : Marathi (mr)
+// author : Harshad Kale : https://github.com/kalehv
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var symbolMap = {
+        '1': '१',
+        '2': '२',
+        '3': '३',
+        '4': '४',
+        '5': '५',
+        '6': '६',
+        '7': '७',
+        '8': '८',
+        '9': '९',
+        '0': '०'
+    },
+    numberMap = {
+        '१': '1',
+        '२': '2',
+        '३': '3',
+        '४': '4',
+        '५': '5',
+        '६': '6',
+        '७': '7',
+        '८': '8',
+        '९': '9',
+        '०': '0'
+    };
+
+    return moment.defineLocale('mr', {
+        months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),
+        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),
+        weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
+        weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
+        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
+        longDateFormat : {
+            LT : 'A h:mm वाजता',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY, LT',
+            LLLL : 'dddd, D MMMM YYYY, LT'
+        },
+        calendar : {
+            sameDay : '[आज] LT',
+            nextDay : '[उद्या] LT',
+            nextWeek : 'dddd, LT',
+            lastDay : '[काल] LT',
+            lastWeek: '[मागील] dddd, LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%s नंतर',
+            past : '%s पूर्वी',
+            s : 'सेकंद',
+            m: 'एक मिनिट',
+            mm: '%d मिनिटे',
+            h : 'एक तास',
+            hh : '%d तास',
+            d : 'एक दिवस',
+            dd : '%d दिवस',
+            M : 'एक महिना',
+            MM : '%d महिने',
+            y : 'एक वर्ष',
+            yy : '%d वर्षे'
+        },
+        preparse: function (string) {
+            return string.replace(/[१२३४५६७८९०]/g, function (match) {
+                return numberMap[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            });
+        },
+        meridiem: function (hour, minute, isLower)
+        {
+            if (hour < 4) {
+                return 'रात्री';
+            } else if (hour < 10) {
+                return 'सकाळी';
+            } else if (hour < 17) {
+                return 'दुपारी';
+            } else if (hour < 20) {
+                return 'सायंकाळी';
+            } else {
+                return 'रात्री';
+            }
+        },
+        week : {
+            dow : 0, // Sunday is the first day of the week.
+            doy : 6  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/ms-my.js b/resources/lib/moment/locale/ms-my.js
new file mode 100644 (file)
index 0000000..7efcbaa
--- /dev/null
@@ -0,0 +1,66 @@
+// moment.js locale configuration
+// locale : Bahasa Malaysia (ms-MY)
+// author : Weldan Jamili : https://github.com/weldan
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('ms-my', {
+        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
+        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
+        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
+        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
+        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
+        longDateFormat : {
+            LT : 'HH.mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY [pukul] LT',
+            LLLL : 'dddd, D MMMM YYYY [pukul] LT'
+        },
+        meridiem : function (hours, minutes, isLower) {
+            if (hours < 11) {
+                return 'pagi';
+            } else if (hours < 15) {
+                return 'tengahari';
+            } else if (hours < 19) {
+                return 'petang';
+            } else {
+                return 'malam';
+            }
+        },
+        calendar : {
+            sameDay : '[Hari ini pukul] LT',
+            nextDay : '[Esok pukul] LT',
+            nextWeek : 'dddd [pukul] LT',
+            lastDay : '[Kelmarin pukul] LT',
+            lastWeek : 'dddd [lepas pukul] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'dalam %s',
+            past : '%s yang lepas',
+            s : 'beberapa saat',
+            m : 'seminit',
+            mm : '%d minit',
+            h : 'sejam',
+            hh : '%d jam',
+            d : 'sehari',
+            dd : '%d hari',
+            M : 'sebulan',
+            MM : '%d bulan',
+            y : 'setahun',
+            yy : '%d tahun'
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/my.js b/resources/lib/moment/locale/my.js
new file mode 100644 (file)
index 0000000..138d101
--- /dev/null
@@ -0,0 +1,88 @@
+// moment.js locale configuration
+// locale : Burmese (my)
+// author : Squar team, mysquar.com
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var symbolMap = {
+        '1': '၁',
+        '2': '၂',
+        '3': '၃',
+        '4': '၄',
+        '5': '၅',
+        '6': '၆',
+        '7': '၇',
+        '8': '၈',
+        '9': '၉',
+        '0': '၀'
+    }, numberMap = {
+        '၁': '1',
+        '၂': '2',
+        '၃': '3',
+        '၄': '4',
+        '၅': '5',
+        '၆': '6',
+        '၇': '7',
+        '၈': '8',
+        '၉': '9',
+        '၀': '0'
+    };
+    return moment.defineLocale('my', {
+        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),
+        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
+        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),
+        weekdaysShort: 'နွေ_လာ_င်္ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
+        weekdaysMin: 'နွေ_လာ_င်္ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
+        longDateFormat: {
+            LT: 'HH:mm',
+            L: 'DD/MM/YYYY',
+            LL: 'D MMMM YYYY',
+            LLL: 'D MMMM YYYY LT',
+            LLLL: 'dddd D MMMM YYYY LT'
+        },
+        calendar: {
+            sameDay: '[ယနေ.] LT [မှာ]',
+            nextDay: '[မနက်ဖြန်] LT [မှာ]',
+            nextWeek: 'dddd LT [မှာ]',
+            lastDay: '[မနေ.က] LT [မှာ]',
+            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
+            sameElse: 'L'
+        },
+        relativeTime: {
+            future: 'လာမည့် %s မှာ',
+            past: 'လွန်ခဲ့သော %s က',
+            s: 'စက္ကန်.အနည်းငယ်',
+            m: 'တစ်မိနစ်',
+            mm: '%d မိနစ်',
+            h: 'တစ်နာရီ',
+            hh: '%d နာရီ',
+            d: 'တစ်ရက်',
+            dd: '%d ရက်',
+            M: 'တစ်လ',
+            MM: '%d လ',
+            y: 'တစ်နှစ်',
+            yy: '%d နှစ်'
+        },
+        preparse: function (string) {
+            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
+                return numberMap[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            });
+        },
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4 // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/nb.js b/resources/lib/moment/locale/nb.js
new file mode 100644 (file)
index 0000000..533659d
--- /dev/null
@@ -0,0 +1,57 @@
+// moment.js locale configuration
+// locale : norwegian bokmål (nb)
+// authors : Espen Hovlandsdal : https://github.com/rexxars
+//           Sigurd Gartmann : https://github.com/sigurdga
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('nb', {
+        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
+        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
+        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
+        weekdaysShort : 'søn_man_tirs_ons_tors_fre_lør'.split('_'),
+        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
+        longDateFormat : {
+            LT : 'H.mm',
+            L : 'DD.MM.YYYY',
+            LL : 'D. MMMM YYYY',
+            LLL : 'D. MMMM YYYY [kl.] LT',
+            LLLL : 'dddd D. MMMM YYYY [kl.] LT'
+        },
+        calendar : {
+            sameDay: '[i dag kl.] LT',
+            nextDay: '[i morgen kl.] LT',
+            nextWeek: 'dddd [kl.] LT',
+            lastDay: '[i går kl.] LT',
+            lastWeek: '[forrige] dddd [kl.] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'om %s',
+            past : 'for %s siden',
+            s : 'noen sekunder',
+            m : 'ett minutt',
+            mm : '%d minutter',
+            h : 'en time',
+            hh : '%d timer',
+            d : 'en dag',
+            dd : '%d dager',
+            M : 'en måned',
+            MM : '%d måneder',
+            y : 'ett år',
+            yy : '%d år'
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/ne.js b/resources/lib/moment/locale/ne.js
new file mode 100644 (file)
index 0000000..51629eb
--- /dev/null
@@ -0,0 +1,105 @@
+// moment.js locale configuration
+// locale : nepali/nepalese
+// author : suvash : https://github.com/suvash
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var symbolMap = {
+        '1': '१',
+        '2': '२',
+        '3': '३',
+        '4': '४',
+        '5': '५',
+        '6': '६',
+        '7': '७',
+        '8': '८',
+        '9': '९',
+        '0': '०'
+    },
+    numberMap = {
+        '१': '1',
+        '२': '2',
+        '३': '3',
+        '४': '4',
+        '५': '5',
+        '६': '6',
+        '७': '7',
+        '८': '8',
+        '९': '9',
+        '०': '0'
+    };
+
+    return moment.defineLocale('ne', {
+        months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),
+        monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),
+        weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),
+        weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
+        weekdaysMin : 'आइ._सो._मङ्_बु._बि._शु._श.'.split('_'),
+        longDateFormat : {
+            LT : 'Aको h:mm बजे',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY, LT',
+            LLLL : 'dddd, D MMMM YYYY, LT'
+        },
+        preparse: function (string) {
+            return string.replace(/[१२३४५६७८९०]/g, function (match) {
+                return numberMap[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            });
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 3) {
+                return 'राती';
+            } else if (hour < 10) {
+                return 'बिहान';
+            } else if (hour < 15) {
+                return 'दिउँसो';
+            } else if (hour < 18) {
+                return 'बेलुका';
+            } else if (hour < 20) {
+                return 'साँझ';
+            } else {
+                return 'राती';
+            }
+        },
+        calendar : {
+            sameDay : '[आज] LT',
+            nextDay : '[भोली] LT',
+            nextWeek : '[आउँदो] dddd[,] LT',
+            lastDay : '[हिजो] LT',
+            lastWeek : '[गएको] dddd[,] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%sमा',
+            past : '%s अगाडी',
+            s : 'केही समय',
+            m : 'एक मिनेट',
+            mm : '%d मिनेट',
+            h : 'एक घण्टा',
+            hh : '%d घण्टा',
+            d : 'एक दिन',
+            dd : '%d दिन',
+            M : 'एक महिना',
+            MM : '%d महिना',
+            y : 'एक बर्ष',
+            yy : '%d बर्ष'
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/nl.js b/resources/lib/moment/locale/nl.js
new file mode 100644 (file)
index 0000000..213beeb
--- /dev/null
@@ -0,0 +1,67 @@
+// moment.js locale configuration
+// locale : dutch (nl)
+// author : Joris Röling : https://github.com/jjupiter
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
+        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
+
+    return moment.defineLocale('nl', {
+        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
+        monthsShort : function (m, format) {
+            if (/-MMM-/.test(format)) {
+                return monthsShortWithoutDots[m.month()];
+            } else {
+                return monthsShortWithDots[m.month()];
+            }
+        },
+        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
+        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
+        weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD-MM-YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay: '[vandaag om] LT',
+            nextDay: '[morgen om] LT',
+            nextWeek: 'dddd [om] LT',
+            lastDay: '[gisteren om] LT',
+            lastWeek: '[afgelopen] dddd [om] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'over %s',
+            past : '%s geleden',
+            s : 'een paar seconden',
+            m : 'één minuut',
+            mm : '%d minuten',
+            h : 'één uur',
+            hh : '%d uur',
+            d : 'één dag',
+            dd : '%d dagen',
+            M : 'één maand',
+            MM : '%d maanden',
+            y : 'één jaar',
+            yy : '%d jaar'
+        },
+        ordinal : function (number) {
+            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/nn.js b/resources/lib/moment/locale/nn.js
new file mode 100644 (file)
index 0000000..c5b6505
--- /dev/null
@@ -0,0 +1,56 @@
+// moment.js locale configuration
+// locale : norwegian nynorsk (nn)
+// author : https://github.com/mechuwind
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('nn', {
+        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
+        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
+        weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
+        weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),
+        weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD.MM.YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay: '[I dag klokka] LT',
+            nextDay: '[I morgon klokka] LT',
+            nextWeek: 'dddd [klokka] LT',
+            lastDay: '[I går klokka] LT',
+            lastWeek: '[Føregåande] dddd [klokka] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'om %s',
+            past : 'for %s sidan',
+            s : 'nokre sekund',
+            m : 'eit minutt',
+            mm : '%d minutt',
+            h : 'ein time',
+            hh : '%d timar',
+            d : 'ein dag',
+            dd : '%d dagar',
+            M : 'ein månad',
+            MM : '%d månader',
+            y : 'eit år',
+            yy : '%d år'
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/pl.js b/resources/lib/moment/locale/pl.js
new file mode 100644 (file)
index 0000000..63a62f1
--- /dev/null
@@ -0,0 +1,98 @@
+// moment.js locale configuration
+// locale : polish (pl)
+// author : Rafal Hirsz : https://github.com/evoL
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),
+        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');
+
+    function plural(n) {
+        return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);
+    }
+
+    function translate(number, withoutSuffix, key) {
+        var result = number + ' ';
+        switch (key) {
+        case 'm':
+            return withoutSuffix ? 'minuta' : 'minutę';
+        case 'mm':
+            return result + (plural(number) ? 'minuty' : 'minut');
+        case 'h':
+            return withoutSuffix  ? 'godzina'  : 'godzinę';
+        case 'hh':
+            return result + (plural(number) ? 'godziny' : 'godzin');
+        case 'MM':
+            return result + (plural(number) ? 'miesiące' : 'miesięcy');
+        case 'yy':
+            return result + (plural(number) ? 'lata' : 'lat');
+        }
+    }
+
+    return moment.defineLocale('pl', {
+        months : function (momentToFormat, format) {
+            if (/D MMMM/.test(format)) {
+                return monthsSubjective[momentToFormat.month()];
+            } else {
+                return monthsNominative[momentToFormat.month()];
+            }
+        },
+        monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
+        weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),
+        weekdaysShort : 'nie_pon_wt_śr_czw_pt_sb'.split('_'),
+        weekdaysMin : 'N_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD.MM.YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd, D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay: '[Dziś o] LT',
+            nextDay: '[Jutro o] LT',
+            nextWeek: '[W] dddd [o] LT',
+            lastDay: '[Wczoraj o] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                case 0:
+                    return '[W zeszłą niedzielę o] LT';
+                case 3:
+                    return '[W zeszłą środę o] LT';
+                case 6:
+                    return '[W zeszłą sobotę o] LT';
+                default:
+                    return '[W zeszły] dddd [o] LT';
+                }
+            },
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'za %s',
+            past : '%s temu',
+            s : 'kilka sekund',
+            m : translate,
+            mm : translate,
+            h : translate,
+            hh : translate,
+            d : '1 dzień',
+            dd : '%d dni',
+            M : 'miesiąc',
+            MM : translate,
+            y : 'rok',
+            yy : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/pt-br.js b/resources/lib/moment/locale/pt-br.js
new file mode 100644 (file)
index 0000000..44eedaf
--- /dev/null
@@ -0,0 +1,56 @@
+// moment.js locale configuration
+// locale : brazilian portuguese (pt-br)
+// author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('pt-br', {
+        months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),
+        monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
+        weekdays : 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split('_'),
+        weekdaysShort : 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),
+        weekdaysMin : 'dom_2ª_3ª_4ª_5ª_6ª_sáb'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D [de] MMMM [de] YYYY',
+            LLL : 'D [de] MMMM [de] YYYY [às] LT',
+            LLLL : 'dddd, D [de] MMMM [de] YYYY [às] LT'
+        },
+        calendar : {
+            sameDay: '[Hoje às] LT',
+            nextDay: '[Amanhã às] LT',
+            nextWeek: 'dddd [às] LT',
+            lastDay: '[Ontem às] LT',
+            lastWeek: function () {
+                return (this.day() === 0 || this.day() === 6) ?
+                    '[Último] dddd [às] LT' : // Saturday + Sunday
+                    '[Última] dddd [às] LT'; // Monday - Friday
+            },
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'em %s',
+            past : '%s atrás',
+            s : 'segundos',
+            m : 'um minuto',
+            mm : '%d minutos',
+            h : 'uma hora',
+            hh : '%d horas',
+            d : 'um dia',
+            dd : '%d dias',
+            M : 'um mês',
+            MM : '%d meses',
+            y : 'um ano',
+            yy : '%d anos'
+        },
+        ordinal : '%dº'
+    });
+}));
diff --git a/resources/lib/moment/locale/pt.js b/resources/lib/moment/locale/pt.js
new file mode 100644 (file)
index 0000000..aced692
--- /dev/null
@@ -0,0 +1,60 @@
+// moment.js locale configuration
+// locale : portuguese (pt)
+// author : Jefferson : https://github.com/jalex79
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('pt', {
+        months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),
+        monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
+        weekdays : 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split('_'),
+        weekdaysShort : 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),
+        weekdaysMin : 'dom_2ª_3ª_4ª_5ª_6ª_sáb'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D [de] MMMM [de] YYYY',
+            LLL : 'D [de] MMMM [de] YYYY LT',
+            LLLL : 'dddd, D [de] MMMM [de] YYYY LT'
+        },
+        calendar : {
+            sameDay: '[Hoje às] LT',
+            nextDay: '[Amanhã às] LT',
+            nextWeek: 'dddd [às] LT',
+            lastDay: '[Ontem às] LT',
+            lastWeek: function () {
+                return (this.day() === 0 || this.day() === 6) ?
+                    '[Último] dddd [às] LT' : // Saturday + Sunday
+                    '[Última] dddd [às] LT'; // Monday - Friday
+            },
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'em %s',
+            past : 'há %s',
+            s : 'segundos',
+            m : 'um minuto',
+            mm : '%d minutos',
+            h : 'uma hora',
+            hh : '%d horas',
+            d : 'um dia',
+            dd : '%d dias',
+            M : 'um mês',
+            MM : '%d meses',
+            y : 'um ano',
+            yy : '%d anos'
+        },
+        ordinal : '%dº',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/ro.js b/resources/lib/moment/locale/ro.js
new file mode 100644 (file)
index 0000000..dc34d3c
--- /dev/null
@@ -0,0 +1,72 @@
+// moment.js locale configuration
+// locale : romanian (ro)
+// author : Vlad Gurdiga : https://github.com/gurdiga
+// author : Valentin Agachi : https://github.com/avaly
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function relativeTimeWithPlural(number, withoutSuffix, key) {
+        var format = {
+                'mm': 'minute',
+                'hh': 'ore',
+                'dd': 'zile',
+                'MM': 'luni',
+                'yy': 'ani'
+            },
+            separator = ' ';
+        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
+            separator = ' de ';
+        }
+
+        return number + separator + format[key];
+    }
+
+    return moment.defineLocale('ro', {
+        months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),
+        monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),
+        weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
+        weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
+        weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
+        longDateFormat : {
+            LT : 'H:mm',
+            L : 'DD.MM.YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY H:mm',
+            LLLL : 'dddd, D MMMM YYYY H:mm'
+        },
+        calendar : {
+            sameDay: '[azi la] LT',
+            nextDay: '[mâine la] LT',
+            nextWeek: 'dddd [la] LT',
+            lastDay: '[ieri la] LT',
+            lastWeek: '[fosta] dddd [la] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'peste %s',
+            past : '%s în urmă',
+            s : 'câteva secunde',
+            m : 'un minut',
+            mm : relativeTimeWithPlural,
+            h : 'o oră',
+            hh : relativeTimeWithPlural,
+            d : 'o zi',
+            dd : relativeTimeWithPlural,
+            M : 'o lună',
+            MM : relativeTimeWithPlural,
+            y : 'un an',
+            yy : relativeTimeWithPlural
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/ru.js b/resources/lib/moment/locale/ru.js
new file mode 100644 (file)
index 0000000..2f15233
--- /dev/null
@@ -0,0 +1,166 @@
+// moment.js locale configuration
+// locale : russian (ru)
+// author : Viktorminator : https://github.com/Viktorminator
+// Author : Menelion Elensúle : https://github.com/Oire
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function plural(word, num) {
+        var forms = word.split('_');
+        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+    }
+
+    function relativeTimeWithPlural(number, withoutSuffix, key) {
+        var format = {
+            'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
+            'hh': 'час_часа_часов',
+            'dd': 'день_дня_дней',
+            'MM': 'месяц_месяца_месяцев',
+            'yy': 'год_года_лет'
+        };
+        if (key === 'm') {
+            return withoutSuffix ? 'минута' : 'минуту';
+        }
+        else {
+            return number + ' ' + plural(format[key], +number);
+        }
+    }
+
+    function monthsCaseReplace(m, format) {
+        var months = {
+            'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
+            'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_')
+        },
+
+        nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return months[nounCase][m.month()];
+    }
+
+    function monthsShortCaseReplace(m, format) {
+        var monthsShort = {
+            'nominative': 'янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
+            'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_')
+        },
+
+        nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return monthsShort[nounCase][m.month()];
+    }
+
+    function weekdaysCaseReplace(m, format) {
+        var weekdays = {
+            'nominative': 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
+            'accusative': 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_')
+        },
+
+        nounCase = (/\[ ?[Вв] ?(?:прошлую|следующую)? ?\] ?dddd/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return weekdays[nounCase][m.day()];
+    }
+
+    return moment.defineLocale('ru', {
+        months : monthsCaseReplace,
+        monthsShort : monthsShortCaseReplace,
+        weekdays : weekdaysCaseReplace,
+        weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
+        weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
+        monthsParse : [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[й|я]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i],
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD.MM.YYYY',
+            LL : 'D MMMM YYYY г.',
+            LLL : 'D MMMM YYYY г., LT',
+            LLLL : 'dddd, D MMMM YYYY г., LT'
+        },
+        calendar : {
+            sameDay: '[Сегодня в] LT',
+            nextDay: '[Завтра в] LT',
+            lastDay: '[Вчера в] LT',
+            nextWeek: function () {
+                return this.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT';
+            },
+            lastWeek: function () {
+                switch (this.day()) {
+                case 0:
+                    return '[В прошлое] dddd [в] LT';
+                case 1:
+                case 2:
+                case 4:
+                    return '[В прошлый] dddd [в] LT';
+                case 3:
+                case 5:
+                case 6:
+                    return '[В прошлую] dddd [в] LT';
+                }
+            },
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'через %s',
+            past : '%s назад',
+            s : 'несколько секунд',
+            m : relativeTimeWithPlural,
+            mm : relativeTimeWithPlural,
+            h : 'час',
+            hh : relativeTimeWithPlural,
+            d : 'день',
+            dd : relativeTimeWithPlural,
+            M : 'месяц',
+            MM : relativeTimeWithPlural,
+            y : 'год',
+            yy : relativeTimeWithPlural
+        },
+
+        meridiemParse: /ночи|утра|дня|вечера/i,
+        isPM : function (input) {
+            return /^(дня|вечера)$/.test(input);
+        },
+
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'ночи';
+            } else if (hour < 12) {
+                return 'утра';
+            } else if (hour < 17) {
+                return 'дня';
+            } else {
+                return 'вечера';
+            }
+        },
+
+        ordinal: function (number, period) {
+            switch (period) {
+            case 'M':
+            case 'd':
+            case 'DDD':
+                return number + '-й';
+            case 'D':
+                return number + '-го';
+            case 'w':
+            case 'W':
+                return number + '-я';
+            default:
+                return number;
+            }
+        },
+
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/sk.js b/resources/lib/moment/locale/sk.js
new file mode 100644 (file)
index 0000000..991afeb
--- /dev/null
@@ -0,0 +1,156 @@
+// moment.js locale configuration
+// locale : slovak (sk)
+// author : Martin Minka : https://github.com/k2s
+// based on work of petrbela : https://github.com/petrbela
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),
+        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
+
+    function plural(n) {
+        return (n > 1) && (n < 5);
+    }
+
+    function translate(number, withoutSuffix, key, isFuture) {
+        var result = number + ' ';
+        switch (key) {
+        case 's':  // a few seconds / in a few seconds / a few seconds ago
+            return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';
+        case 'm':  // a minute / in a minute / a minute ago
+            return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');
+        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'minúty' : 'minút');
+            } else {
+                return result + 'minútami';
+            }
+            break;
+        case 'h':  // an hour / in an hour / an hour ago
+            return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+        case 'hh': // 9 hours / in 9 hours / 9 hours ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'hodiny' : 'hodín');
+            } else {
+                return result + 'hodinami';
+            }
+            break;
+        case 'd':  // a day / in a day / a day ago
+            return (withoutSuffix || isFuture) ? 'deň' : 'dňom';
+        case 'dd': // 9 days / in 9 days / 9 days ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'dni' : 'dní');
+            } else {
+                return result + 'dňami';
+            }
+            break;
+        case 'M':  // a month / in a month / a month ago
+            return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';
+        case 'MM': // 9 months / in 9 months / 9 months ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'mesiace' : 'mesiacov');
+            } else {
+                return result + 'mesiacmi';
+            }
+            break;
+        case 'y':  // a year / in a year / a year ago
+            return (withoutSuffix || isFuture) ? 'rok' : 'rokom';
+        case 'yy': // 9 years / in 9 years / 9 years ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'roky' : 'rokov');
+            } else {
+                return result + 'rokmi';
+            }
+            break;
+        }
+    }
+
+    return moment.defineLocale('sk', {
+        months : months,
+        monthsShort : monthsShort,
+        monthsParse : (function (months, monthsShort) {
+            var i, _monthsParse = [];
+            for (i = 0; i < 12; i++) {
+                // use custom parser to solve problem with July (červenec)
+                _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
+            }
+            return _monthsParse;
+        }(months, monthsShort)),
+        weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
+        weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),
+        weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),
+        longDateFormat : {
+            LT: 'H:mm',
+            L : 'DD.MM.YYYY',
+            LL : 'D. MMMM YYYY',
+            LLL : 'D. MMMM YYYY LT',
+            LLLL : 'dddd D. MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay: '[dnes o] LT',
+            nextDay: '[zajtra o] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                case 0:
+                    return '[v nedeľu o] LT';
+                case 1:
+                case 2:
+                    return '[v] dddd [o] LT';
+                case 3:
+                    return '[v stredu o] LT';
+                case 4:
+                    return '[vo štvrtok o] LT';
+                case 5:
+                    return '[v piatok o] LT';
+                case 6:
+                    return '[v sobotu o] LT';
+                }
+            },
+            lastDay: '[včera o] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                case 0:
+                    return '[minulú nedeľu o] LT';
+                case 1:
+                case 2:
+                    return '[minulý] dddd [o] LT';
+                case 3:
+                    return '[minulú stredu o] LT';
+                case 4:
+                case 5:
+                    return '[minulý] dddd [o] LT';
+                case 6:
+                    return '[minulú sobotu o] LT';
+                }
+            },
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'za %s',
+            past : 'pred %s',
+            s : translate,
+            m : translate,
+            mm : translate,
+            h : translate,
+            hh : translate,
+            d : translate,
+            dd : translate,
+            M : translate,
+            MM : translate,
+            y : translate,
+            yy : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/sl.js b/resources/lib/moment/locale/sl.js
new file mode 100644 (file)
index 0000000..2bdbf1c
--- /dev/null
@@ -0,0 +1,144 @@
+// moment.js locale configuration
+// locale : slovenian (sl)
+// author : Robert Sedovšek : https://github.com/sedovsek
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function translate(number, withoutSuffix, key) {
+        var result = number + ' ';
+        switch (key) {
+        case 'm':
+            return withoutSuffix ? 'ena minuta' : 'eno minuto';
+        case 'mm':
+            if (number === 1) {
+                result += 'minuta';
+            } else if (number === 2) {
+                result += 'minuti';
+            } else if (number === 3 || number === 4) {
+                result += 'minute';
+            } else {
+                result += 'minut';
+            }
+            return result;
+        case 'h':
+            return withoutSuffix ? 'ena ura' : 'eno uro';
+        case 'hh':
+            if (number === 1) {
+                result += 'ura';
+            } else if (number === 2) {
+                result += 'uri';
+            } else if (number === 3 || number === 4) {
+                result += 'ure';
+            } else {
+                result += 'ur';
+            }
+            return result;
+        case 'dd':
+            if (number === 1) {
+                result += 'dan';
+            } else {
+                result += 'dni';
+            }
+            return result;
+        case 'MM':
+            if (number === 1) {
+                result += 'mesec';
+            } else if (number === 2) {
+                result += 'meseca';
+            } else if (number === 3 || number === 4) {
+                result += 'mesece';
+            } else {
+                result += 'mesecev';
+            }
+            return result;
+        case 'yy':
+            if (number === 1) {
+                result += 'leto';
+            } else if (number === 2) {
+                result += 'leti';
+            } else if (number === 3 || number === 4) {
+                result += 'leta';
+            } else {
+                result += 'let';
+            }
+            return result;
+        }
+    }
+
+    return moment.defineLocale('sl', {
+        months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),
+        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),
+        weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
+        weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
+        weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),
+        longDateFormat : {
+            LT : 'H:mm',
+            L : 'DD. MM. YYYY',
+            LL : 'D. MMMM YYYY',
+            LLL : 'D. MMMM YYYY LT',
+            LLLL : 'dddd, D. MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay  : '[danes ob] LT',
+            nextDay  : '[jutri ob] LT',
+
+            nextWeek : function () {
+                switch (this.day()) {
+                case 0:
+                    return '[v] [nedeljo] [ob] LT';
+                case 3:
+                    return '[v] [sredo] [ob] LT';
+                case 6:
+                    return '[v] [soboto] [ob] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[v] dddd [ob] LT';
+                }
+            },
+            lastDay  : '[včeraj ob] LT',
+            lastWeek : function () {
+                switch (this.day()) {
+                case 0:
+                case 3:
+                case 6:
+                    return '[prejšnja] dddd [ob] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[prejšnji] dddd [ob] LT';
+                }
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'čez %s',
+            past   : '%s nazaj',
+            s      : 'nekaj sekund',
+            m      : translate,
+            mm     : translate,
+            h      : translate,
+            hh     : translate,
+            d      : 'en dan',
+            dd     : translate,
+            M      : 'en mesec',
+            MM     : translate,
+            y      : 'eno leto',
+            yy     : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/sq.js b/resources/lib/moment/locale/sq.js
new file mode 100644 (file)
index 0000000..6ae4178
--- /dev/null
@@ -0,0 +1,61 @@
+// moment.js locale configuration
+// locale : Albanian (sq)
+// author : Flakërim Ismani : https://github.com/flakerimi
+// author: Menelion Elensúle: https://github.com/Oire (tests)
+// author : Oerd Cukalla : https://github.com/oerd (fixes)
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('sq', {
+        months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),
+        monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
+        weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),
+        weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
+        weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),
+        meridiem : function (hours, minutes, isLower) {
+            return hours < 12 ? 'PD' : 'MD';
+        },
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd, D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay : '[Sot në] LT',
+            nextDay : '[Nesër në] LT',
+            nextWeek : 'dddd [në] LT',
+            lastDay : '[Dje në] LT',
+            lastWeek : 'dddd [e kaluar në] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'në %s',
+            past : '%s më parë',
+            s : 'disa sekonda',
+            m : 'një minutë',
+            mm : '%d minuta',
+            h : 'një orë',
+            hh : '%d orë',
+            d : 'një ditë',
+            dd : '%d ditë',
+            M : 'një muaj',
+            MM : '%d muaj',
+            y : 'një vit',
+            yy : '%d vite'
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/sr-cyrl.js b/resources/lib/moment/locale/sr-cyrl.js
new file mode 100644 (file)
index 0000000..7278de6
--- /dev/null
@@ -0,0 +1,105 @@
+// moment.js locale configuration
+// locale : Serbian-cyrillic (sr-cyrl)
+// author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var translator = {
+        words: { //Different grammatical cases
+            m: ['један минут', 'једне минуте'],
+            mm: ['минут', 'минуте', 'минута'],
+            h: ['један сат', 'једног сата'],
+            hh: ['сат', 'сата', 'сати'],
+            dd: ['дан', 'дана', 'дана'],
+            MM: ['месец', 'месеца', 'месеци'],
+            yy: ['година', 'године', 'година']
+        },
+        correctGrammaticalCase: function (number, wordKey) {
+            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
+        },
+        translate: function (number, withoutSuffix, key) {
+            var wordKey = translator.words[key];
+            if (key.length === 1) {
+                return withoutSuffix ? wordKey[0] : wordKey[1];
+            } else {
+                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
+            }
+        }
+    };
+
+    return moment.defineLocale('sr-cyrl', {
+        months: ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар'],
+        monthsShort: ['јан.', 'феб.', 'мар.', 'апр.', 'мај', 'јун', 'јул', 'авг.', 'сеп.', 'окт.', 'нов.', 'дец.'],
+        weekdays: ['недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота'],
+        weekdaysShort: ['нед.', 'пон.', 'уто.', 'сре.', 'чет.', 'пет.', 'суб.'],
+        weekdaysMin: ['не', 'по', 'ут', 'ср', 'че', 'пе', 'су'],
+        longDateFormat: {
+            LT: 'H:mm',
+            L: 'DD. MM. YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY LT',
+            LLLL: 'dddd, D. MMMM YYYY LT'
+        },
+        calendar: {
+            sameDay: '[данас у] LT',
+            nextDay: '[сутра у] LT',
+
+            nextWeek: function () {
+                switch (this.day()) {
+                case 0:
+                    return '[у] [недељу] [у] LT';
+                case 3:
+                    return '[у] [среду] [у] LT';
+                case 6:
+                    return '[у] [суботу] [у] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[у] dddd [у] LT';
+                }
+            },
+            lastDay  : '[јуче у] LT',
+            lastWeek : function () {
+                var lastWeekDays = [
+                    '[прошле] [недеље] [у] LT',
+                    '[прошлог] [понедељка] [у] LT',
+                    '[прошлог] [уторка] [у] LT',
+                    '[прошле] [среде] [у] LT',
+                    '[прошлог] [четвртка] [у] LT',
+                    '[прошлог] [петка] [у] LT',
+                    '[прошле] [суботе] [у] LT'
+                ];
+                return lastWeekDays[this.day()];
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'за %s',
+            past   : 'пре %s',
+            s      : 'неколико секунди',
+            m      : translator.translate,
+            mm     : translator.translate,
+            h      : translator.translate,
+            hh     : translator.translate,
+            d      : 'дан',
+            dd     : translator.translate,
+            M      : 'месец',
+            MM     : translator.translate,
+            y      : 'годину',
+            yy     : translator.translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/sr.js b/resources/lib/moment/locale/sr.js
new file mode 100644 (file)
index 0000000..d008282
--- /dev/null
@@ -0,0 +1,105 @@
+// moment.js locale configuration
+// locale : Serbian-latin (sr)
+// author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var translator = {
+        words: { //Different grammatical cases
+            m: ['jedan minut', 'jedne minute'],
+            mm: ['minut', 'minute', 'minuta'],
+            h: ['jedan sat', 'jednog sata'],
+            hh: ['sat', 'sata', 'sati'],
+            dd: ['dan', 'dana', 'dana'],
+            MM: ['mesec', 'meseca', 'meseci'],
+            yy: ['godina', 'godine', 'godina']
+        },
+        correctGrammaticalCase: function (number, wordKey) {
+            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
+        },
+        translate: function (number, withoutSuffix, key) {
+            var wordKey = translator.words[key];
+            if (key.length === 1) {
+                return withoutSuffix ? wordKey[0] : wordKey[1];
+            } else {
+                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
+            }
+        }
+    };
+
+    return moment.defineLocale('sr', {
+        months: ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar'],
+        monthsShort: ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun', 'jul', 'avg.', 'sep.', 'okt.', 'nov.', 'dec.'],
+        weekdays: ['nedelja', 'ponedeljak', 'utorak', 'sreda', 'četvrtak', 'petak', 'subota'],
+        weekdaysShort: ['ned.', 'pon.', 'uto.', 'sre.', 'čet.', 'pet.', 'sub.'],
+        weekdaysMin: ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'],
+        longDateFormat: {
+            LT: 'H:mm',
+            L: 'DD. MM. YYYY',
+            LL: 'D. MMMM YYYY',
+            LLL: 'D. MMMM YYYY LT',
+            LLLL: 'dddd, D. MMMM YYYY LT'
+        },
+        calendar: {
+            sameDay: '[danas u] LT',
+            nextDay: '[sutra u] LT',
+
+            nextWeek: function () {
+                switch (this.day()) {
+                case 0:
+                    return '[u] [nedelju] [u] LT';
+                case 3:
+                    return '[u] [sredu] [u] LT';
+                case 6:
+                    return '[u] [subotu] [u] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[u] dddd [u] LT';
+                }
+            },
+            lastDay  : '[juče u] LT',
+            lastWeek : function () {
+                var lastWeekDays = [
+                    '[prošle] [nedelje] [u] LT',
+                    '[prošlog] [ponedeljka] [u] LT',
+                    '[prošlog] [utorka] [u] LT',
+                    '[prošle] [srede] [u] LT',
+                    '[prošlog] [četvrtka] [u] LT',
+                    '[prošlog] [petka] [u] LT',
+                    '[prošle] [subote] [u] LT'
+                ];
+                return lastWeekDays[this.day()];
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'za %s',
+            past   : 'pre %s',
+            s      : 'nekoliko sekundi',
+            m      : translator.translate,
+            mm     : translator.translate,
+            h      : translator.translate,
+            hh     : translator.translate,
+            d      : 'dan',
+            dd     : translator.translate,
+            M      : 'mesec',
+            MM     : translator.translate,
+            y      : 'godinu',
+            yy     : translator.translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/sv.js b/resources/lib/moment/locale/sv.js
new file mode 100644 (file)
index 0000000..634b3cf
--- /dev/null
@@ -0,0 +1,63 @@
+// moment.js locale configuration
+// locale : swedish (sv)
+// author : Jens Alm : https://github.com/ulmus
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('sv', {
+        months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),
+        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
+        weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
+        weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
+        weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'YYYY-MM-DD',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay: '[Idag] LT',
+            nextDay: '[Imorgon] LT',
+            lastDay: '[Igår] LT',
+            nextWeek: 'dddd LT',
+            lastWeek: '[Förra] dddd[en] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'om %s',
+            past : 'för %s sedan',
+            s : 'några sekunder',
+            m : 'en minut',
+            mm : '%d minuter',
+            h : 'en timme',
+            hh : '%d timmar',
+            d : 'en dag',
+            dd : '%d dagar',
+            M : 'en månad',
+            MM : '%d månader',
+            y : 'ett år',
+            yy : '%d år'
+        },
+        ordinal : function (number) {
+            var b = number % 10,
+                output = (~~(number % 100 / 10) === 1) ? 'e' :
+                (b === 1) ? 'a' :
+                (b === 2) ? 'a' :
+                (b === 3) ? 'e' : 'e';
+            return number + output;
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/ta.js b/resources/lib/moment/locale/ta.js
new file mode 100644 (file)
index 0000000..53bab0d
--- /dev/null
@@ -0,0 +1,112 @@
+// moment.js locale configuration
+// locale : tamil (ta)
+// author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    /*var symbolMap = {
+            '1': '௧',
+            '2': '௨',
+            '3': '௩',
+            '4': '௪',
+            '5': '௫',
+            '6': '௬',
+            '7': '௭',
+            '8': '௮',
+            '9': '௯',
+            '0': '௦'
+        },
+        numberMap = {
+            '௧': '1',
+            '௨': '2',
+            '௩': '3',
+            '௪': '4',
+            '௫': '5',
+            '௬': '6',
+            '௭': '7',
+            '௮': '8',
+            '௯': '9',
+            '௦': '0'
+        }; */
+
+    return moment.defineLocale('ta', {
+        months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
+        monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
+        weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),
+        weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),
+        weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY, LT',
+            LLLL : 'dddd, D MMMM YYYY, LT'
+        },
+        calendar : {
+            sameDay : '[இன்று] LT',
+            nextDay : '[நாளை] LT',
+            nextWeek : 'dddd, LT',
+            lastDay : '[நேற்று] LT',
+            lastWeek : '[கடந்த வாரம்] dddd, LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%s இல்',
+            past : '%s முன்',
+            s : 'ஒரு சில விநாடிகள்',
+            m : 'ஒரு நிமிடம்',
+            mm : '%d நிமிடங்கள்',
+            h : 'ஒரு மணி நேரம்',
+            hh : '%d மணி நேரம்',
+            d : 'ஒரு நாள்',
+            dd : '%d நாட்கள்',
+            M : 'ஒரு மாதம்',
+            MM : '%d மாதங்கள்',
+            y : 'ஒரு வருடம்',
+            yy : '%d ஆண்டுகள்'
+        },
+/*        preparse: function (string) {
+            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
+                return numberMap[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            });
+        },*/
+        ordinal : function (number) {
+            return number + 'வது';
+        },
+
+
+        // refer http://ta.wikipedia.org/s/1er1
+
+        meridiem : function (hour, minute, isLower) {
+            if (hour >= 6 && hour <= 10) {
+                return ' காலை';
+            } else if (hour >= 10 && hour <= 14) {
+                return ' நண்பகல்';
+            } else if (hour >= 14 && hour <= 18) {
+                return ' எற்பாடு';
+            } else if (hour >= 18 && hour <= 20) {
+                return ' மாலை';
+            } else if (hour >= 20 && hour <= 24) {
+                return ' இரவு';
+            } else if (hour >= 0 && hour <= 6) {
+                return ' வைகறை';
+            }
+        },
+        week : {
+            dow : 0, // Sunday is the first day of the week.
+            doy : 6  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/th.js b/resources/lib/moment/locale/th.js
new file mode 100644 (file)
index 0000000..fc99701
--- /dev/null
@@ -0,0 +1,58 @@
+// moment.js locale configuration
+// locale : thai (th)
+// author : Kridsada Thanabulpong : https://github.com/sirn
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('th', {
+        months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),
+        monthsShort : 'มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา'.split('_'),
+        weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
+        weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
+        weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
+        longDateFormat : {
+            LT : 'H นาฬิกา m นาที',
+            L : 'YYYY/MM/DD',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY เวลา LT',
+            LLLL : 'วันddddที่ D MMMM YYYY เวลา LT'
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 12) {
+                return 'ก่อนเที่ยง';
+            } else {
+                return 'หลังเที่ยง';
+            }
+        },
+        calendar : {
+            sameDay : '[วันนี้ เวลา] LT',
+            nextDay : '[พรุ่งนี้ เวลา] LT',
+            nextWeek : 'dddd[หน้า เวลา] LT',
+            lastDay : '[เมื่อวานนี้ เวลา] LT',
+            lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'อีก %s',
+            past : '%sที่แล้ว',
+            s : 'ไม่กี่วินาที',
+            m : '1 นาที',
+            mm : '%d นาที',
+            h : '1 ชั่วโมง',
+            hh : '%d ชั่วโมง',
+            d : '1 วัน',
+            dd : '%d วัน',
+            M : '1 เดือน',
+            MM : '%d เดือน',
+            y : '1 ปี',
+            yy : '%d ปี'
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/tl-ph.js b/resources/lib/moment/locale/tl-ph.js
new file mode 100644 (file)
index 0000000..c15cc1f
--- /dev/null
@@ -0,0 +1,58 @@
+// moment.js locale configuration
+// locale : Tagalog/Filipino (tl-ph)
+// author : Dan Hagman
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('tl-ph', {
+        months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),
+        monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
+        weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),
+        weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
+        weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'MM/D/YYYY',
+            LL : 'MMMM D, YYYY',
+            LLL : 'MMMM D, YYYY LT',
+            LLLL : 'dddd, MMMM DD, YYYY LT'
+        },
+        calendar : {
+            sameDay: '[Ngayon sa] LT',
+            nextDay: '[Bukas sa] LT',
+            nextWeek: 'dddd [sa] LT',
+            lastDay: '[Kahapon sa] LT',
+            lastWeek: 'dddd [huling linggo] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'sa loob ng %s',
+            past : '%s ang nakalipas',
+            s : 'ilang segundo',
+            m : 'isang minuto',
+            mm : '%d minuto',
+            h : 'isang oras',
+            hh : '%d oras',
+            d : 'isang araw',
+            dd : '%d araw',
+            M : 'isang buwan',
+            MM : '%d buwan',
+            y : 'isang taon',
+            yy : '%d taon'
+        },
+        ordinal : function (number) {
+            return number;
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/tr.js b/resources/lib/moment/locale/tr.js
new file mode 100644 (file)
index 0000000..36e8fca
--- /dev/null
@@ -0,0 +1,92 @@
+// moment.js locale configuration
+// locale : turkish (tr)
+// authors : Erhan Gundogan : https://github.com/erhangundogan,
+//           Burak Yiğit Kaya: https://github.com/BYK
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var suffixes = {
+        1: '\'inci',
+        5: '\'inci',
+        8: '\'inci',
+        70: '\'inci',
+        80: '\'inci',
+
+        2: '\'nci',
+        7: '\'nci',
+        20: '\'nci',
+        50: '\'nci',
+
+        3: '\'üncü',
+        4: '\'üncü',
+        100: '\'üncü',
+
+        6: '\'ncı',
+
+        9: '\'uncu',
+        10: '\'uncu',
+        30: '\'uncu',
+
+        60: '\'ıncı',
+        90: '\'ıncı'
+    };
+
+    return moment.defineLocale('tr', {
+        months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),
+        monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
+        weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),
+        weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
+        weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD.MM.YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd, D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay : '[bugün saat] LT',
+            nextDay : '[yarın saat] LT',
+            nextWeek : '[haftaya] dddd [saat] LT',
+            lastDay : '[dün] LT',
+            lastWeek : '[geçen hafta] dddd [saat] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : '%s sonra',
+            past : '%s önce',
+            s : 'birkaç saniye',
+            m : 'bir dakika',
+            mm : '%d dakika',
+            h : 'bir saat',
+            hh : '%d saat',
+            d : 'bir gün',
+            dd : '%d gün',
+            M : 'bir ay',
+            MM : '%d ay',
+            y : 'bir yıl',
+            yy : '%d yıl'
+        },
+        ordinal : function (number) {
+            if (number === 0) {  // special case for zero
+                return number + '\'ıncı';
+            }
+            var a = number % 10,
+                b = number % 100 - a,
+                c = number >= 100 ? 100 : null;
+
+            return number + (suffixes[a] || suffixes[b] || suffixes[c]);
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/tzm-latn.js b/resources/lib/moment/locale/tzm-latn.js
new file mode 100644 (file)
index 0000000..3189772
--- /dev/null
@@ -0,0 +1,55 @@
+// moment.js locale configuration
+// locale : Morocco Central Atlas Tamaziɣt in Latin (tzm-latn)
+// author : Abdel Said : https://github.com/abdelsaid
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('tzm-latn', {
+        months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
+        monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
+        weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+        weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+        weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay: '[asdkh g] LT',
+            nextDay: '[aska g] LT',
+            nextWeek: 'dddd [g] LT',
+            lastDay: '[assant g] LT',
+            lastWeek: 'dddd [g] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'dadkh s yan %s',
+            past : 'yan %s',
+            s : 'imik',
+            m : 'minuḍ',
+            mm : '%d minuḍ',
+            h : 'saɛa',
+            hh : '%d tassaɛin',
+            d : 'ass',
+            dd : '%d ossan',
+            M : 'ayowr',
+            MM : '%d iyyirn',
+            y : 'asgas',
+            yy : '%d isgasn'
+        },
+        week : {
+            dow : 6, // Saturday is the first day of the week.
+            doy : 12  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/tzm.js b/resources/lib/moment/locale/tzm.js
new file mode 100644 (file)
index 0000000..0a7f3f1
--- /dev/null
@@ -0,0 +1,55 @@
+// moment.js locale configuration
+// locale : Morocco Central Atlas Tamaziɣt (tzm)
+// author : Abdel Said : https://github.com/abdelsaid
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('tzm', {
+        months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
+        monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
+        weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+        weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+        weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd D MMMM YYYY LT'
+        },
+        calendar : {
+            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
+            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
+            nextWeek: 'dddd [ⴴ] LT',
+            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
+            lastWeek: 'dddd [ⴴ] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',
+            past : 'ⵢⴰⵏ %s',
+            s : 'ⵉⵎⵉⴽ',
+            m : 'ⵎⵉⵏⵓⴺ',
+            mm : '%d ⵎⵉⵏⵓⴺ',
+            h : 'ⵙⴰⵄⴰ',
+            hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',
+            d : 'ⴰⵙⵙ',
+            dd : '%d oⵙⵙⴰⵏ',
+            M : 'ⴰⵢoⵓⵔ',
+            MM : '%d ⵉⵢⵢⵉⵔⵏ',
+            y : 'ⴰⵙⴳⴰⵙ',
+            yy : '%d ⵉⵙⴳⴰⵙⵏ'
+        },
+        week : {
+            dow : 6, // Saturday is the first day of the week.
+            doy : 12  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/uk.js b/resources/lib/moment/locale/uk.js
new file mode 100644 (file)
index 0000000..bc22fff
--- /dev/null
@@ -0,0 +1,157 @@
+// moment.js locale configuration
+// locale : ukrainian (uk)
+// author : zemlanin : https://github.com/zemlanin
+// Author : Menelion Elensúle : https://github.com/Oire
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function plural(word, num) {
+        var forms = word.split('_');
+        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+    }
+
+    function relativeTimeWithPlural(number, withoutSuffix, key) {
+        var format = {
+            'mm': 'хвилина_хвилини_хвилин',
+            'hh': 'година_години_годин',
+            'dd': 'день_дні_днів',
+            'MM': 'місяць_місяці_місяців',
+            'yy': 'рік_роки_років'
+        };
+        if (key === 'm') {
+            return withoutSuffix ? 'хвилина' : 'хвилину';
+        }
+        else if (key === 'h') {
+            return withoutSuffix ? 'година' : 'годину';
+        }
+        else {
+            return number + ' ' + plural(format[key], +number);
+        }
+    }
+
+    function monthsCaseReplace(m, format) {
+        var months = {
+            'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'),
+            'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_')
+        },
+
+        nounCase = (/D[oD]? *MMMM?/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return months[nounCase][m.month()];
+    }
+
+    function weekdaysCaseReplace(m, format) {
+        var weekdays = {
+            'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),
+            'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),
+            'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')
+        },
+
+        nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ?
+            'accusative' :
+            ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ?
+                'genitive' :
+                'nominative');
+
+        return weekdays[nounCase][m.day()];
+    }
+
+    function processHoursFunction(str) {
+        return function () {
+            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
+        };
+    }
+
+    return moment.defineLocale('uk', {
+        months : monthsCaseReplace,
+        monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),
+        weekdays : weekdaysCaseReplace,
+        weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD.MM.YYYY',
+            LL : 'D MMMM YYYY р.',
+            LLL : 'D MMMM YYYY р., LT',
+            LLLL : 'dddd, D MMMM YYYY р., LT'
+        },
+        calendar : {
+            sameDay: processHoursFunction('[Сьогодні '),
+            nextDay: processHoursFunction('[Завтра '),
+            lastDay: processHoursFunction('[Вчора '),
+            nextWeek: processHoursFunction('[У] dddd ['),
+            lastWeek: function () {
+                switch (this.day()) {
+                case 0:
+                case 3:
+                case 5:
+                case 6:
+                    return processHoursFunction('[Минулої] dddd [').call(this);
+                case 1:
+                case 2:
+                case 4:
+                    return processHoursFunction('[Минулого] dddd [').call(this);
+                }
+            },
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : 'за %s',
+            past : '%s тому',
+            s : 'декілька секунд',
+            m : relativeTimeWithPlural,
+            mm : relativeTimeWithPlural,
+            h : 'годину',
+            hh : relativeTimeWithPlural,
+            d : 'день',
+            dd : relativeTimeWithPlural,
+            M : 'місяць',
+            MM : relativeTimeWithPlural,
+            y : 'рік',
+            yy : relativeTimeWithPlural
+        },
+
+        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
+
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 4) {
+                return 'ночі';
+            } else if (hour < 12) {
+                return 'ранку';
+            } else if (hour < 17) {
+                return 'дня';
+            } else {
+                return 'вечора';
+            }
+        },
+
+        ordinal: function (number, period) {
+            switch (period) {
+            case 'M':
+            case 'd':
+            case 'DDD':
+            case 'w':
+            case 'W':
+                return number + '-й';
+            case 'D':
+                return number + '-го';
+            default:
+                return number;
+            }
+        },
+
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/uz.js b/resources/lib/moment/locale/uz.js
new file mode 100644 (file)
index 0000000..62fb89e
--- /dev/null
@@ -0,0 +1,55 @@
+// moment.js locale configuration
+// locale : uzbek (uz)
+// author : Sardor Muminov : https://github.com/muminoff
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('uz', {
+        months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
+        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
+        weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
+        weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
+        weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'D MMMM YYYY, dddd LT'
+        },
+        calendar : {
+            sameDay : '[Бугун соат] LT [да]',
+            nextDay : '[Эртага] LT [да]',
+            nextWeek : 'dddd [куни соат] LT [да]',
+            lastDay : '[Кеча соат] LT [да]',
+            lastWeek : '[Утган] dddd [куни соат] LT [да]',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'Якин %s ичида',
+            past : 'Бир неча %s олдин',
+            s : 'фурсат',
+            m : 'бир дакика',
+            mm : '%d дакика',
+            h : 'бир соат',
+            hh : '%d соат',
+            d : 'бир кун',
+            dd : '%d кун',
+            M : 'бир ой',
+            MM : '%d ой',
+            y : 'бир йил',
+            yy : '%d йил'
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/vi.js b/resources/lib/moment/locale/vi.js
new file mode 100644 (file)
index 0000000..20e3ffe
--- /dev/null
@@ -0,0 +1,62 @@
+// moment.js locale configuration
+// locale : vietnamese (vi)
+// author : Bang Nguyen : https://github.com/bangnk
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('vi', {
+        months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),
+        monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),
+        weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),
+        weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+        weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM [năm] YYYY',
+            LLL : 'D MMMM [năm] YYYY LT',
+            LLLL : 'dddd, D MMMM [năm] YYYY LT',
+            l : 'DD/M/YYYY',
+            ll : 'D MMM YYYY',
+            lll : 'D MMM YYYY LT',
+            llll : 'ddd, D MMM YYYY LT'
+        },
+        calendar : {
+            sameDay: '[Hôm nay lúc] LT',
+            nextDay: '[Ngày mai lúc] LT',
+            nextWeek: 'dddd [tuần tới lúc] LT',
+            lastDay: '[Hôm qua lúc] LT',
+            lastWeek: 'dddd [tuần rồi lúc] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : '%s tới',
+            past : '%s trước',
+            s : 'vài giây',
+            m : 'một phút',
+            mm : '%d phút',
+            h : 'một giờ',
+            hh : '%d giờ',
+            d : 'một ngày',
+            dd : '%d ngày',
+            M : 'một tháng',
+            MM : '%d tháng',
+            y : 'một năm',
+            yy : '%d năm'
+        },
+        ordinal : function (number) {
+            return number;
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/zh-cn.js b/resources/lib/moment/locale/zh-cn.js
new file mode 100644 (file)
index 0000000..aff26c5
--- /dev/null
@@ -0,0 +1,108 @@
+// moment.js locale configuration
+// locale : chinese (zh-cn)
+// author : suupic : https://github.com/suupic
+// author : Zeno Zeng : https://github.com/zenozeng
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('zh-cn', {
+        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
+        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+        weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),
+        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
+        longDateFormat : {
+            LT : 'Ah点mm',
+            L : 'YYYY-MM-DD',
+            LL : 'YYYY年MMMD日',
+            LLL : 'YYYY年MMMD日LT',
+            LLLL : 'YYYY年MMMD日ddddLT',
+            l : 'YYYY-MM-DD',
+            ll : 'YYYY年MMMD日',
+            lll : 'YYYY年MMMD日LT',
+            llll : 'YYYY年MMMD日ddddLT'
+        },
+        meridiem : function (hour, minute, isLower) {
+            var hm = hour * 100 + minute;
+            if (hm < 600) {
+                return '凌晨';
+            } else if (hm < 900) {
+                return '早上';
+            } else if (hm < 1130) {
+                return '上午';
+            } else if (hm < 1230) {
+                return '中午';
+            } else if (hm < 1800) {
+                return '下午';
+            } else {
+                return '晚上';
+            }
+        },
+        calendar : {
+            sameDay : function () {
+                return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT';
+            },
+            nextDay : function () {
+                return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT';
+            },
+            lastDay : function () {
+                return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT';
+            },
+            nextWeek : function () {
+                var startOfWeek, prefix;
+                startOfWeek = moment().startOf('week');
+                prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]';
+                return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
+            },
+            lastWeek : function () {
+                var startOfWeek, prefix;
+                startOfWeek = moment().startOf('week');
+                prefix = this.unix() < startOfWeek.unix()  ? '[上]' : '[本]';
+                return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
+            },
+            sameElse : 'LL'
+        },
+        ordinal : function (number, period) {
+            switch (period) {
+            case 'd':
+            case 'D':
+            case 'DDD':
+                return number + '日';
+            case 'M':
+                return number + '月';
+            case 'w':
+            case 'W':
+                return number + '周';
+            default:
+                return number;
+            }
+        },
+        relativeTime : {
+            future : '%s内',
+            past : '%s前',
+            s : '几秒',
+            m : '1分钟',
+            mm : '%d分钟',
+            h : '1小时',
+            hh : '%d小时',
+            d : '1天',
+            dd : '%d天',
+            M : '1个月',
+            MM : '%d个月',
+            y : '1年',
+            yy : '%d年'
+        },
+        week : {
+            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/lib/moment/locale/zh-tw.js b/resources/lib/moment/locale/zh-tw.js
new file mode 100644 (file)
index 0000000..71f99a2
--- /dev/null
@@ -0,0 +1,84 @@
+// moment.js locale configuration
+// locale : traditional chinese (zh-tw)
+// author : Ben : https://github.com/ben-lin
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.defineLocale('zh-tw', {
+        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
+        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
+        longDateFormat : {
+            LT : 'Ah點mm',
+            L : 'YYYY年MMMD日',
+            LL : 'YYYY年MMMD日',
+            LLL : 'YYYY年MMMD日LT',
+            LLLL : 'YYYY年MMMD日ddddLT',
+            l : 'YYYY年MMMD日',
+            ll : 'YYYY年MMMD日',
+            lll : 'YYYY年MMMD日LT',
+            llll : 'YYYY年MMMD日ddddLT'
+        },
+        meridiem : function (hour, minute, isLower) {
+            var hm = hour * 100 + minute;
+            if (hm < 900) {
+                return '早上';
+            } else if (hm < 1130) {
+                return '上午';
+            } else if (hm < 1230) {
+                return '中午';
+            } else if (hm < 1800) {
+                return '下午';
+            } else {
+                return '晚上';
+            }
+        },
+        calendar : {
+            sameDay : '[今天]LT',
+            nextDay : '[明天]LT',
+            nextWeek : '[下]ddddLT',
+            lastDay : '[昨天]LT',
+            lastWeek : '[上]ddddLT',
+            sameElse : 'L'
+        },
+        ordinal : function (number, period) {
+            switch (period) {
+            case 'd' :
+            case 'D' :
+            case 'DDD' :
+                return number + '日';
+            case 'M' :
+                return number + '月';
+            case 'w' :
+            case 'W' :
+                return number + '週';
+            default :
+                return number;
+            }
+        },
+        relativeTime : {
+            future : '%s內',
+            past : '%s前',
+            s : '幾秒',
+            m : '一分鐘',
+            mm : '%d分鐘',
+            h : '一小時',
+            hh : '%d小時',
+            d : '一天',
+            dd : '%d天',
+            M : '一個月',
+            MM : '%d個月',
+            y : '一年',
+            yy : '%d年'
+        }
+    });
+}));
index 03a2460..d100a9c 100644 (file)
@@ -1,5 +1,5 @@
 //! moment.js
-//! version : 2.8.1
+//! version : 2.8.3
 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
 //! license : MIT
 //! momentjs.com
     ************************************/
 
     var moment,
-        VERSION = '2.8.1',
+        VERSION = '2.8.3',
         // the global-scope this is NOT the global object in Node.js
         globalScope = typeof global !== 'undefined' ? global : this,
         oldGlobalMoment,
         round = Math.round,
+        hasOwnProperty = Object.prototype.hasOwnProperty,
         i,
 
         YEAR = 0,
@@ -88,7 +89,7 @@
             ['HH', /(T| )\d\d/]
         ],
 
-        // timezone chunker "+10:00" > ["10", "00"] or "-1530" > ["-15", "30"]
+        // timezone chunker '+10:00' > ['10', '00'] or '-1530' > ['-15', '30']
         parseTimezoneChunker = /([\+\-]|\d\d)/gi,
 
         // getter and setter names
         }
     }
 
+    function hasOwnProp(a, b) {
+        return hasOwnProperty.call(a, b);
+    }
+
     function defaultParsingFlags() {
         // We need to deep clone this object, and es5 standard is not very
         // helpful.
     function printMsg(msg) {
         if (moment.suppressDeprecationWarnings === false &&
                 typeof console !== 'undefined' && console.warn) {
-            console.warn("Deprecation warning: " + msg);
+            console.warn('Deprecation warning: ' + msg);
         }
     }
 
 
     function extend(a, b) {
         for (var i in b) {
-            if (b.hasOwnProperty(i)) {
+            if (hasOwnProp(b, i)) {
                 a[i] = b[i];
             }
         }
 
-        if (b.hasOwnProperty('toString')) {
+        if (hasOwnProp(b, 'toString')) {
             a.toString = b.toString;
         }
 
-        if (b.hasOwnProperty('valueOf')) {
+        if (hasOwnProp(b, 'valueOf')) {
             a.valueOf = b.valueOf;
         }
 
             var dur, tmp;
             //invert the arguments, but complain about it
             if (period !== null && !isNaN(+period)) {
-                deprecateSimple(name, "moment()." + name  + "(period, number) is deprecated. Please use moment()." + name + "(number, period).");
+                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period).');
                 tmp = val; val = period; period = tmp;
             }
 
             prop;
 
         for (prop in inputObject) {
-            if (inputObject.hasOwnProperty(prop)) {
+            if (hasOwnProp(inputObject, prop)) {
                 normalizedProp = normalizeUnits(prop);
                 if (normalizedProp) {
                     normalizedInput[normalizedProp] = inputObject[prop];
         for (i = 0; i < config._f.length; i++) {
             currentScore = 0;
             tempConfig = copyConfig({}, config);
+            if (config._useUTC != null) {
+                tempConfig._useUTC = config._useUTC;
+            }
             tempConfig._pf = defaultParsingFlags();
             tempConfig._f = config._f[i];
             makeDateFromStringAndFormat(tempConfig);
             config._pf.iso = true;
             for (i = 0, l = isoDates.length; i < l; i++) {
                 if (isoDates[i][1].exec(string)) {
-                    // match[5] should be "T" or undefined
+                    // match[5] should be 'T' or undefined
                     config._f = isoDates[i][0] + (match[6] || ' ');
                     break;
                 }
         }
     }
 
+    function map(arr, fn) {
+        var res = [], i;
+        for (i = 0; i < arr.length; ++i) {
+            res.push(fn(arr[i], i));
+        }
+        return res;
+    }
+
     function makeDateFromInput(config) {
         var input = config._i, matched;
         if (input === undefined) {
         } else if (typeof input === 'string') {
             makeDateFromString(config);
         } else if (isArray(input)) {
-            config._a = input.slice(0);
+            config._a = map(input.slice(0), function (obj) {
+                return parseInt(obj, 10);
+            });
             dateFromConfig(config);
         } else if (typeof(input) === 'object') {
             dateFromObject(config);
     moment = function (input, format, locale, strict) {
         var c;
 
-        if (typeof(locale) === "boolean") {
+        if (typeof(locale) === 'boolean') {
             strict = locale;
             locale = undefined;
         }
     moment.utc = function (input, format, locale, strict) {
         var c;
 
-        if (typeof(locale) === "boolean") {
+        if (typeof(locale) === 'boolean') {
             strict = locale;
             locale = undefined;
         }
 
         ret = new Duration(duration);
 
-        if (moment.isDuration(input) && input.hasOwnProperty('_locale')) {
+        if (moment.isDuration(input) && hasOwnProp(input, '_locale')) {
             ret._locale = input._locale;
         }
 
     };
 
     moment.lang = deprecate(
-        "moment.lang is deprecated. Use moment.locale instead.",
+        'moment.lang is deprecated. Use moment.locale instead.',
         function (key, value) {
             return moment.locale(key, value);
         }
     moment.locale = function (key, values) {
         var data;
         if (key) {
-            if (typeof(values) !== "undefined") {
+            if (typeof(values) !== 'undefined') {
                 data = moment.defineLocale(key, values);
             }
             else {
     };
 
     moment.langData = deprecate(
-        "moment.langData is deprecated. Use moment.localeData instead.",
+        'moment.langData is deprecated. Use moment.localeData instead.',
         function (key) {
             return moment.localeData(key);
         }
     // compare moment object
     moment.isMoment = function (obj) {
         return obj instanceof Moment ||
-            (obj != null &&  obj.hasOwnProperty('_isAMomentObject'));
+            (obj != null && hasOwnProp(obj, '_isAMomentObject'));
     };
 
     // for typechecking Duration objects
         },
 
         toString : function () {
-            return this.clone().locale('en').format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ");
+            return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
         },
 
         toDate : function () {
                 this._isUTC = false;
 
                 if (keepLocalTime) {
-                    this.add(this._d.getTimezoneOffset(), 'm');
+                    this.add(this._dateTzOffset(), 'm');
                 }
             }
             return this;
         diff : function (input, units, asFloat) {
             var that = makeAs(input, this),
                 zoneDiff = (this.zone() - that.zone()) * 6e4,
-                diff, output;
+                diff, output, daysAdjust;
 
             units = normalizeUnits(units);
 
                 output = ((this.year() - that.year()) * 12) + (this.month() - that.month());
                 // adjust by taking difference in days, average number of days
                 // and dst in the given months.
-                output += ((this - moment(this).startOf('month')) -
-                        (that - moment(that).startOf('month'))) / diff;
+                daysAdjust = (this - moment(this).startOf('month')) -
+                    (that - moment(that).startOf('month'));
                 // same as above but with zones, to negate all dst
-                output -= ((this.zone() - moment(this).startOf('month').zone()) -
-                        (that.zone() - moment(that).startOf('month').zone())) * 6e4 / diff;
+                daysAdjust -= ((this.zone() - moment(this).startOf('month').zone()) -
+                        (that.zone() - moment(that).startOf('month').zone())) * 6e4;
+                output += daysAdjust / diff;
                 if (units === 'year') {
                     output = output / 12;
                 }
         },
 
         isAfter: function (input, units) {
-            units = typeof units !== 'undefined' ? units : 'millisecond';
-            return +this.clone().startOf(units) > +moment(input).startOf(units);
+            units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');
+            if (units === 'millisecond') {
+                input = moment.isMoment(input) ? input : moment(input);
+                return +this > +input;
+            } else {
+                return +this.clone().startOf(units) > +moment(input).startOf(units);
+            }
         },
 
         isBefore: function (input, units) {
-            units = typeof units !== 'undefined' ? units : 'millisecond';
-            return +this.clone().startOf(units) < +moment(input).startOf(units);
+            units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');
+            if (units === 'millisecond') {
+                input = moment.isMoment(input) ? input : moment(input);
+                return +this < +input;
+            } else {
+                return +this.clone().startOf(units) < +moment(input).startOf(units);
+            }
         },
 
         isSame: function (input, units) {
-            units = units || 'ms';
-            return +this.clone().startOf(units) === +makeAs(input, this).startOf(units);
+            units = normalizeUnits(units || 'millisecond');
+            if (units === 'millisecond') {
+                input = moment.isMoment(input) ? input : moment(input);
+                return +this === +input;
+            } else {
+                return +this.clone().startOf(units) === +makeAs(input, this).startOf(units);
+            }
         },
 
         min: deprecate(
                     input = input * 60;
                 }
                 if (!this._isUTC && keepLocalTime) {
-                    localAdjust = this._d.getTimezoneOffset();
+                    localAdjust = this._dateTzOffset();
                 }
                 this._offset = input;
                 this._isUTC = true;
                     }
                 }
             } else {
-                return this._isUTC ? offset : this._d.getTimezoneOffset();
+                return this._isUTC ? offset : this._dateTzOffset();
             }
             return this;
         },
         // instance.  Otherwise, it will return the locale configuration
         // variables for this instance.
         locale : function (key) {
+            var newLocaleData;
+
             if (key === undefined) {
                 return this._locale._abbr;
             } else {
-                this._locale = moment.localeData(key);
+                newLocaleData = moment.localeData(key);
+                if (newLocaleData != null) {
+                    this._locale = newLocaleData;
+                }
                 return this;
             }
         },
 
         lang : deprecate(
-            "moment().lang() is deprecated. Use moment().localeData() instead.",
+            'moment().lang() is deprecated. Use moment().localeData() instead.',
             function (key) {
                 if (key === undefined) {
                     return this.localeData();
                 } else {
-                    this._locale = moment.localeData(key);
-                    return this;
+                    return this.locale(key);
                 }
             }
         ),
 
         localeData : function () {
             return this._locale;
+        },
+
+        _dateTzOffset : function () {
+            // On Firefox.24 Date#getTimezoneOffset returns a floating point.
+            // https://github.com/moment/moment/pull/1871
+            return Math.round(this._d.getTimezoneOffset() / 15) * 15;
         }
     });
 
             var days, months;
             units = normalizeUnits(units);
 
-            days = this._days + this._milliseconds / 864e5;
             if (units === 'month' || units === 'year') {
+                days = this._days + this._milliseconds / 864e5;
                 months = this._months + daysToYears(days) * 12;
                 return units === 'month' ? months : months / 12;
             } else {
-                days += yearsToDays(this._months / 12);
+                // handle milliseconds separately because of floating point math errors (issue #1867)
+                days = this._days + yearsToDays(this._months / 12);
                 switch (units) {
-                    case 'week': return days / 7;
-                    case 'day': return days;
-                    case 'hour': return days * 24;
-                    case 'minute': return days * 24 * 60;
-                    case 'second': return days * 24 * 60 * 60;
-                    case 'millisecond': return days * 24 * 60 * 60 * 1000;
+                    case 'week': return days / 7 + this._milliseconds / 6048e5;
+                    case 'day': return days + this._milliseconds / 864e5;
+                    case 'hour': return days * 24 + this._milliseconds / 36e5;
+                    case 'minute': return days * 24 * 60 + this._milliseconds / 6e4;
+                    case 'second': return days * 24 * 60 * 60 + this._milliseconds / 1000;
+                    // Math.floor prevents floating point math errors here
+                    case 'millisecond': return Math.floor(days * 24 * 60 * 60 * 1000) + this._milliseconds;
                     default: throw new Error('Unknown unit ' + units);
                 }
             }
         locale : moment.fn.locale,
 
         toIsoString : deprecate(
-            "toIsoString() is deprecated. Please use toISOString() instead " +
-            "(notice the capitals)",
+            'toIsoString() is deprecated. Please use toISOString() instead ' +
+            '(notice the capitals)',
             function () {
                 return this.toISOString();
             }
         }
     });
 
+    moment.duration.fn.toString = moment.duration.fn.toISOString;
+
     function makeDurationGetter(name) {
         moment.duration.fn[name] = function () {
             return this._data[name];
     }
 
     for (i in unitMillisecondFactors) {
-        if (unitMillisecondFactors.hasOwnProperty(i)) {
+        if (hasOwnProp(unitMillisecondFactors, i)) {
             makeDurationGetter(i.toLowerCase());
         }
     }
index b37e9bc..0fdc1a8 100644 (file)
@@ -4,7 +4,6 @@
                        "Si Gam Acèh"
                ]
        },
-       "ooui-dialog-action-close": "Tôp",
        "ooui-outline-control-move-down": "Pinah item u yup",
        "ooui-outline-control-move-up": "Pinah item u ateuëh",
        "ooui-toolbar-more": "Lom"
index c5984af..5ce3666 100644 (file)
@@ -4,7 +4,6 @@
                        "Naudefj"
                ]
        },
-       "ooui-dialog-action-close": "Sluit",
        "ooui-outline-control-move-down": "Skuif item af",
        "ooui-outline-control-move-up": "Skuif item op"
 }
index 0e070c6..bfe9d5c 100644 (file)
@@ -3,6 +3,5 @@
                "authors": [
                        "Elfalem"
                ]
-       },
-       "ooui-dialog-action-close": "ለመዝጋት"
+       }
 }
index 7eb02a7..de5b7af 100644 (file)
@@ -3,6 +3,5 @@
                "authors": [
                        "Basharh"
                ]
-       },
-       "ooui-dialog-action-close": "ܣܟܘܪ"
+       }
 }
index aa835e2..fc12d1b 100644 (file)
@@ -6,7 +6,6 @@
                        "Jduranboger"
                ]
        },
-       "ooui-dialog-action-close": "Bağla",
        "ooui-outline-control-move-down": "Bəndi aşağı apar",
        "ooui-outline-control-move-up": "Bəndi yuxarı apar",
        "ooui-outline-control-remove": "Bəndi sil",
index 0bfa299..ff915b0 100644 (file)
@@ -9,7 +9,6 @@
                        "Рустам Нурыев"
                ]
        },
-       "ooui-dialog-action-close": "Ябырға",
        "ooui-outline-control-move-down": "Аҫҡа күсерергә",
        "ooui-outline-control-move-up": "Өҫкә күсерергә"
 }
diff --git a/resources/lib/oojs-ui/i18n/bcc.json b/resources/lib/oojs-ui/i18n/bcc.json
new file mode 100644 (file)
index 0000000..a340a88
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Baloch Afghanistan"
+               ]
+       },
+       "ooui-dialog-message-accept": "اوکی",
+       "ooui-dialog-process-retry": "پدا کوشش کورتین"
+}
index f3db639..bc2251e 100644 (file)
@@ -5,7 +5,6 @@
                        "Sky Harbor"
                ]
        },
-       "ooui-dialog-action-close": "Seraduhon",
        "ooui-outline-control-move-down": "Balyuhon an aytem paibaba",
        "ooui-outline-control-move-up": "Balyuhon an aytem paitaas",
        "ooui-toolbar-more": "Kadugangan"
index c3f1abf..c5475f8 100644 (file)
@@ -7,7 +7,6 @@
                        "Zedlik"
                ]
        },
-       "ooui-dialog-action-close": "Закрыць",
        "ooui-outline-control-move-down": "Перасунуць ніжэй",
        "ooui-outline-control-move-up": "Перасунуць вышэй",
        "ooui-toolbar-more": "Болей"
index 08fbe0b..fb0f688 100644 (file)
@@ -5,9 +5,6 @@
                        "Artificial123"
                ]
        },
-       "ooui-dialog-action-close": "Закрыць",
-       "ooui-dialog-confirm-title": "Пацвердзіць",
-       "ooui-dialog-confirm-default-prompt": "Вы ўпэўненыя?",
-       "ooui-dialog-confirm-default-ok": "ОК",
-       "ooui-dialog-confirm-default-cancel": "Адмяніць"
+       "ooui-dialog-message-accept": "ОК",
+       "ooui-dialog-message-reject": "Адмяніць"
 }
index c283973..02d95b5 100644 (file)
@@ -7,7 +7,6 @@
                        "Mitzev"
                ]
        },
-       "ooui-dialog-action-close": "Затваряне",
        "ooui-outline-control-remove": "Премахване на обекта",
        "ooui-toolbar-more": "Още"
 }
index f7105ce..2696144 100644 (file)
@@ -9,12 +9,10 @@
                        "Sayak Sarkar"
                ]
        },
-       "ooui-dialog-action-close": "বন্ধ",
        "ooui-outline-control-move-down": "আইটেম নিচে স্থানান্তর",
        "ooui-outline-control-move-up": "আইটেম উপরে স্থানান্তর",
        "ooui-outline-control-remove": "আইটেম সরান",
        "ooui-toolbar-more": "আরও",
-       "ooui-dialog-confirm-title": "নিশ্চিত করুন",
-       "ooui-dialog-confirm-default-ok": "ঠিক আছে",
-       "ooui-dialog-confirm-default-cancel": "বাতিল"
+       "ooui-dialog-message-accept": "ঠিক আছে",
+       "ooui-dialog-message-reject": "বাতিল"
 }
index 6959191..83af863 100644 (file)
@@ -3,16 +3,20 @@
                "authors": [
                        "Fohanno",
                        "Fulup",
-                       "Y-M D"
+                       "Y-M D",
+                       "Maoris"
                ]
        },
        "ooui-outline-control-move-down": "Lakaat an elfenn da ziskenn",
        "ooui-outline-control-move-up": "Lakaat an elfenn da bignat",
        "ooui-outline-control-remove": "Tennañ an elfenn",
        "ooui-toolbar-more": "Muioc'h",
+       "ooui-toolgroup-expand": "Muioc'h",
+       "ooui-toolgroup-collapse": "Nebeutoc'h",
        "ooui-dialog-message-accept": "Mat eo",
        "ooui-dialog-message-reject": "Nullañ",
        "ooui-dialog-process-error": "Un dra bennak a-dreuz a zo bet",
        "ooui-dialog-process-dismiss": "Disteurel",
-       "ooui-dialog-process-retry": "Klask en-dro"
+       "ooui-dialog-process-retry": "Klask en-dro",
+       "ooui-dialog-process-continue": "Kenderc'hel"
 }
index 14280a7..c7afbfa 100644 (file)
@@ -4,13 +4,10 @@
                        "DzWiki"
                ]
        },
-       "ooui-dialog-action-close": "Zatvori",
        "ooui-outline-control-move-down": "Premjesti stavku dole",
        "ooui-outline-control-move-up": "Premjesti stavku gore",
        "ooui-outline-control-remove": "Ukloni stavku",
        "ooui-toolbar-more": "Više",
-       "ooui-dialog-confirm-title": "Potvrdi",
-       "ooui-dialog-confirm-default-prompt": "Da li ste sigurni?",
-       "ooui-dialog-confirm-default-ok": "U redu",
-       "ooui-dialog-confirm-default-cancel": "Otkaži"
+       "ooui-dialog-message-accept": "U redu",
+       "ooui-dialog-message-reject": "Otkaži"
 }
index de86daf..25fb5f5 100644 (file)
@@ -5,13 +5,10 @@
                        "Умар"
                ]
        },
-       "ooui-dialog-action-close": "ДӀачӀагӀа",
        "ooui-outline-control-move-down": "Лаха яккха элемент",
        "ooui-outline-control-move-up": "Лаккха яккха элемент",
        "ooui-outline-control-remove": "ДӀадаха меттиг",
        "ooui-toolbar-more": "Кхин",
-       "ooui-dialog-confirm-title": "Бакъдан",
-       "ooui-dialog-confirm-default-prompt": "Бакъалла лаьий хӀуна?",
-       "ooui-dialog-confirm-default-ok": "ХӀаъ",
-       "ooui-dialog-confirm-default-cancel": "Цаоьшу"
+       "ooui-dialog-message-accept": "ХӀаъ",
+       "ooui-dialog-message-reject": "Цаоьшу"
 }
index eadae99..0c66619 100644 (file)
@@ -6,8 +6,6 @@
                        "Serwan"
                ]
        },
-       "ooui-dialog-action-close": "دایخە",
-       "ooui-dialog-confirm-default-prompt": "ئایا تۆ دڵنیات ؟",
-       "ooui-dialog-confirm-default-ok": "باشە",
-       "ooui-dialog-confirm-default-cancel": "پاشگەزبوونەوە"
+       "ooui-dialog-message-accept": "باشە",
+       "ooui-dialog-message-reject": "پاشگەزبوونەوە"
 }
index 19c2f5c..01d181d 100644 (file)
@@ -4,7 +4,6 @@
                        "Paulu"
                ]
        },
-       "ooui-dialog-action-close": "Chjude",
        "ooui-outline-control-move-down": "Fà falà l'ogettu",
        "ooui-outline-control-move-up": "Fà cullà l'ogettu"
 }
index a75cf0b..2854f0b 100644 (file)
@@ -17,6 +17,8 @@
        "ooui-outline-control-move-up": "Přesunout položku nahoru",
        "ooui-outline-control-remove": "Odstranit položku",
        "ooui-toolbar-more": "Další",
+       "ooui-toolgroup-expand": "Více",
+       "ooui-toolgroup-collapse": "Méně",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Storno",
        "ooui-dialog-process-error": "Něco se pokazilo",
index 45cd201..099b0f3 100644 (file)
@@ -4,6 +4,5 @@
                        "ОйЛ"
                ]
        },
-       "ooui-dialog-action-close": "ꙁакрꙑи",
        "ooui-toolbar-more": "вѧщє"
 }
index ff71251..b74cd06 100644 (file)
@@ -7,7 +7,6 @@
                        "DChan (WMF)"
                ]
        },
-       "ooui-dialog-action-close": "Cau",
        "ooui-outline-control-move-down": "Symud yr eitem i lawr",
        "ooui-outline-control-move-up": "Symud yr eitem i fyny",
        "ooui-outline-control-remove": "Tynnu'r eitem",
index 156a6bc..0b847be 100644 (file)
@@ -10,7 +10,6 @@
                        "Tehnix"
                ]
        },
-       "ooui-dialog-action-close": "Luk",
        "ooui-outline-control-move-down": "Flyt ned",
        "ooui-outline-control-move-up": "Flyt op",
        "ooui-toolbar-more": "Mere"
index 546689b..15624fd 100644 (file)
        "ooui-outline-control-move-up": "Element nach oben verschieben",
        "ooui-outline-control-remove": "Element entfernen",
        "ooui-toolbar-more": "Mehr",
+       "ooui-toolgroup-expand": "Mehr",
+       "ooui-toolgroup-collapse": "Weniger",
        "ooui-dialog-message-accept": "Okay",
        "ooui-dialog-message-reject": "Abbrechen",
        "ooui-dialog-process-error": "Etwas ist schief gelaufen",
        "ooui-dialog-process-dismiss": "Ausblenden",
-       "ooui-dialog-process-retry": "Erneut versuchen"
+       "ooui-dialog-process-retry": "Erneut versuchen",
+       "ooui-dialog-process-continue": "Fortfahren"
 }
index 09415fd..881ff67 100644 (file)
@@ -9,7 +9,6 @@
                        "Se4598"
                ]
        },
-       "ooui-dialog-action-close": "Racnê",
        "ooui-outline-control-move-down": "Bendi bere cêr",
        "ooui-outline-control-move-up": "Bendi bere cor",
        "ooui-outline-control-remove": "Obcey wedare",
index d963ac8..7ad3f20 100644 (file)
@@ -4,7 +4,6 @@
                        "Michawiki"
                ]
        },
-       "ooui-dialog-action-close": "Zacyniś",
        "ooui-outline-control-move-down": "Element dołoj pśesunuś",
        "ooui-outline-control-move-up": "Element górjej pśesunuś",
        "ooui-outline-control-remove": "Zapisk wótpóraś",
index d4ef2d5..624ecaa 100644 (file)
@@ -5,13 +5,10 @@
                        "Gloria sah"
                ]
        },
-       "ooui-dialog-action-close": "Sèra",
        "ooui-outline-control-move-down": "Spôsta in bâs",
        "ooui-outline-control-move-up": "Spôsta in êlt",
        "ooui-outline-control-remove": "Armōv l'elemèint",
        "ooui-toolbar-more": "Êter",
-       "ooui-dialog-confirm-title": "Cunfermèr",
-       "ooui-dialog-confirm-default-prompt": "Sî-'v sicùr?",
-       "ooui-dialog-confirm-default-ok": "'D acòrdi",
-       "ooui-dialog-confirm-default-cancel": "Scanślèr"
+       "ooui-dialog-message-accept": "'D acòrdi",
+       "ooui-dialog-message-reject": "Scanślèr"
 }
index 0b54f41..6d9e8bf 100644 (file)
@@ -5,13 +5,10 @@
                        "Lévi"
                ]
        },
-       "ooui-dialog-action-close": "Sèra",
        "ooui-outline-control-move-down": "Spôsta in bâs",
        "ooui-outline-control-move-up": "Spôsta in êlta",
        "ooui-outline-control-remove": "Tór vìa 'l elemèint",
        "ooui-toolbar-more": "Êter",
-       "ooui-dialog-confirm-title": "Cunfirmèr",
-       "ooui-dialog-confirm-default-prompt": "Sî-'v sicùr?",
-       "ooui-dialog-confirm-default-ok": "'D acòrdi",
-       "ooui-dialog-confirm-default-cancel": "Scanślèr"
+       "ooui-dialog-message-accept": "'D acòrdi",
+       "ooui-dialog-message-reject": "Scanślèr"
 }
index 9e99440..1db3fd8 100644 (file)
        "ooui-outline-control-move-up": "Move item up",
        "ooui-outline-control-remove": "Remove item",
        "ooui-toolbar-more": "More",
+       "ooui-toolgroup-expand": "More",
+       "ooui-toolgroup-collapse": "Fewer",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Cancel",
        "ooui-dialog-process-error": "Something went wrong",
        "ooui-dialog-process-dismiss": "Dismiss",
-       "ooui-dialog-process-retry": "Try again"
+       "ooui-dialog-process-retry": "Try again",
+       "ooui-dialog-process-continue": "Continue"
 }
index 101f0af..8d9714c 100644 (file)
@@ -7,7 +7,6 @@
                        "Yekrats"
                ]
        },
-       "ooui-dialog-action-close": "Fermi",
        "ooui-outline-control-move-down": "Movi eron suben",
        "ooui-outline-control-move-up": "Movi eron supren",
        "ooui-toolbar-more": "Pli"
index 7660d4a..82699a3 100644 (file)
@@ -22,6 +22,8 @@
        "ooui-outline-control-move-up": "Subir elemento",
        "ooui-outline-control-remove": "Eliminar elemento",
        "ooui-toolbar-more": "Más",
+       "ooui-toolgroup-expand": "Más",
+       "ooui-toolgroup-collapse": "Menos",
        "ooui-dialog-message-accept": "Aceptar",
        "ooui-dialog-message-reject": "Cancelar",
        "ooui-dialog-process-error": "Algo salió mal",
index ac3af74..6a212b6 100644 (file)
@@ -9,9 +9,12 @@
        "ooui-outline-control-move-up": "Liiguta üksust ülespoole",
        "ooui-outline-control-remove": "Eemalda üksus",
        "ooui-toolbar-more": "Veel",
+       "ooui-toolgroup-expand": "Veel",
+       "ooui-toolgroup-collapse": "Vähem",
        "ooui-dialog-message-accept": "Sobib",
        "ooui-dialog-message-reject": "Loobu",
        "ooui-dialog-process-error": "Midagi läks valesti",
        "ooui-dialog-process-dismiss": "Hülga",
-       "ooui-dialog-process-retry": "Proovi uuesti"
+       "ooui-dialog-process-retry": "Proovi uuesti",
+       "ooui-dialog-process-continue": "Jätka"
 }
index f1ce0bb..62973d3 100644 (file)
@@ -6,7 +6,6 @@
                        "Xabier Armendaritz"
                ]
        },
-       "ooui-dialog-action-close": "Itxi",
        "ooui-outline-control-move-down": "Mugitu itema beherantz",
        "ooui-outline-control-move-up": "Mugitu itema gorantz",
        "ooui-toolbar-more": "Gehiago"
index efaabed..6262293 100644 (file)
@@ -20,6 +20,8 @@
        "ooui-outline-control-move-up": "Siirrä kohdetta ylöspäin",
        "ooui-outline-control-remove": "Poista kohde",
        "ooui-toolbar-more": "Lisää",
+       "ooui-toolgroup-expand": "Enemmän",
+       "ooui-toolgroup-collapse": "Vähemmän",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Peruuta",
        "ooui-dialog-process-error": "Jokin meni pieleen",
index 1810080..b84df25 100644 (file)
@@ -4,7 +4,6 @@
                        "EileenSanda"
                ]
        },
-       "ooui-dialog-action-close": "Lat aftur",
        "ooui-outline-control-move-down": "Flyt lutin niður",
        "ooui-outline-control-move-up": "Flyt lutin upp",
        "ooui-toolbar-more": "Meira"
index 8ff5475..def0346 100644 (file)
@@ -33,6 +33,7 @@
        "ooui-outline-control-move-up": "Faire monter l’élément",
        "ooui-outline-control-remove": "Supprimer l’élément",
        "ooui-toolbar-more": "Plus",
+       "ooui-toolgroup-expand": "Plus",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Annuler",
        "ooui-dialog-process-error": "Quelque chose a mal tourné",
index d98f4ab..54d0fb2 100644 (file)
@@ -5,7 +5,6 @@
                        "Murma174"
                ]
        },
-       "ooui-dialog-action-close": "Slütj",
        "ooui-outline-control-move-down": "Element efter onern sküüw",
        "ooui-outline-control-move-up": "Element efter boowen sküüw",
        "ooui-outline-control-remove": "Element wechnem",
index e1c129b..83c2fd9 100644 (file)
@@ -5,7 +5,6 @@
                        "Tocaibon"
                ]
        },
-       "ooui-dialog-action-close": "Siere",
        "ooui-outline-control-move-down": "sposte sot",
        "ooui-outline-control-move-up": "sposte in su",
        "ooui-toolbar-more": "Altri"
diff --git a/resources/lib/oojs-ui/i18n/fy.json b/resources/lib/oojs-ui/i18n/fy.json
new file mode 100644 (file)
index 0000000..2aaf960
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Robin0van0der0vliet"
+               ]
+       },
+       "ooui-dialog-message-reject": "Annulearje"
+}
index bbaf4c1..81690ab 100644 (file)
@@ -19,6 +19,8 @@
        "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": "משהו השתבש",
index 5a9bef0..a76d39e 100644 (file)
@@ -8,7 +8,6 @@
                        "Goelujjwal"
                ]
        },
-       "ooui-dialog-action-close": "बंद करें",
        "ooui-outline-control-move-down": "प्रविष्टि नीचे ले जाएँ",
        "ooui-outline-control-move-up": "प्रविष्टि ऊपर ले जाएँ",
        "ooui-outline-control-remove": "आइटम हटाएँ",
index 371b4f3..1581fd8 100644 (file)
@@ -5,7 +5,6 @@
                        "Michawiki"
                ]
        },
-       "ooui-dialog-action-close": "Začinić",
        "ooui-outline-control-move-down": "Zapisk dele přesunyć",
        "ooui-outline-control-move-up": "Zapisk horje přesunyć",
        "ooui-outline-control-remove": "Zapisk wotstronić",
index a6705d0..ebb2860 100644 (file)
@@ -2,12 +2,17 @@
        "@metadata": {
                "authors": [
                        "Vacio",
-                       "Xelgen"
+                       "Xelgen",
+                       "Դավիթ Սարոյան"
                ]
        },
-       "ooui-dialog-action-close": "Փակել",
        "ooui-outline-control-move-down": "Իջեցնել կետը",
        "ooui-outline-control-move-up": "Բարձրացնել կետը",
        "ooui-outline-control-remove": "Հեռացնել տարրը",
-       "ooui-toolbar-more": "Ավելին"
+       "ooui-toolbar-more": "Ավելին",
+       "ooui-dialog-message-accept": "Լավ",
+       "ooui-dialog-message-reject": "Չեղարկել",
+       "ooui-dialog-process-error": "Ինչ-որ սխալ է տեղի ունեցել",
+       "ooui-dialog-process-dismiss": "Փակել",
+       "ooui-dialog-process-retry": "Կրկին փորձել"
 }
index 1710bc6..7565f4f 100644 (file)
@@ -11,7 +11,6 @@
                        "William Surya Permana"
                ]
        },
-       "ooui-dialog-action-close": "Tutup",
        "ooui-outline-control-move-down": "Pindahkan butir ke bawah",
        "ooui-outline-control-move-up": "Pindahkan butir ke atas",
        "ooui-toolbar-more": "Lainnya"
index 4a9f1c4..241cc33 100644 (file)
@@ -4,7 +4,6 @@
                        "Makuba"
                ]
        },
-       "ooui-dialog-action-close": "Terminar",
        "ooui-outline-control-move-down": "Mover element a infra",
        "ooui-outline-control-move-up": "Mover element a supra",
        "ooui-toolbar-more": "Plu"
index 58fc1b8..2c99bdd 100644 (file)
@@ -5,7 +5,6 @@
                        "Snævar"
                ]
        },
-       "ooui-dialog-action-close": "Loka",
        "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"
index 3d4e049..0ff8af8 100644 (file)
        "ooui-outline-control-move-up": "Sposta in alto",
        "ooui-outline-control-remove": "Rimuovi elemento",
        "ooui-toolbar-more": "Altro",
+       "ooui-toolgroup-expand": "Più",
+       "ooui-toolgroup-collapse": "Meno",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Annulla",
        "ooui-dialog-process-error": "Qualcosa è andato storto",
        "ooui-dialog-process-dismiss": "Nascondi",
-       "ooui-dialog-process-retry": "Riprova"
+       "ooui-dialog-process-retry": "Riprova",
+       "ooui-dialog-process-continue": "Continua"
 }
index 2ac8dc1..6442342 100644 (file)
@@ -12,6 +12,8 @@
        "ooui-outline-control-move-up": "項目を上に移動させる",
        "ooui-outline-control-remove": "項目を除去",
        "ooui-toolbar-more": "その他",
+       "ooui-toolgroup-expand": "続き",
+       "ooui-toolgroup-collapse": "折り畳む",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "キャンセル",
        "ooui-dialog-process-error": "エラーが発生しました…",
index 38d35f7..8827af3 100644 (file)
@@ -6,6 +6,5 @@
                        "Pras"
                ]
        },
-       "ooui-dialog-action-close": "Tutup",
        "ooui-outline-control-move-down": "Pindhahaken butir mangandhap"
 }
index ef59f1b..b79ab50 100644 (file)
@@ -11,7 +11,6 @@
                        "Tokoko"
                ]
        },
-       "ooui-dialog-action-close": "დახურვა",
        "ooui-outline-control-move-down": "ელემენტის ქვემოთ გადატანა",
        "ooui-outline-control-move-up": "ელემენტის ზემოთ გადატანა",
        "ooui-toolbar-more": "მეტი"
index c1a0f19..9840319 100644 (file)
@@ -4,7 +4,6 @@
                        "Arystanbek"
                ]
        },
-       "ooui-dialog-action-close": "Жабу",
        "ooui-outline-control-move-down": "Элементті төмен жылжыту",
        "ooui-outline-control-move-up": "Элементті жоғары жылжыту",
        "ooui-outline-control-remove": "Элементті алып тастау",
index f7bfca5..c0d72c4 100644 (file)
@@ -4,7 +4,6 @@
                        "Sovichet"
                ]
        },
-       "ooui-dialog-action-close": "បិទ",
        "ooui-outline-control-move-down": "រុញ​ទៅ​ក្រោម",
        "ooui-outline-control-move-up": "រុញ​ទៅ​លើ",
        "ooui-outline-control-remove": "ដក​វត្ថុ​ចេញ",
index 56884a8..63902f3 100644 (file)
@@ -7,7 +7,8 @@
                        "LFM",
                        "아라",
                        "고기랑",
-                       "Ryuch"
+                       "Ryuch",
+                       "Revi"
                ]
        },
        "ooui-outline-control-move-down": "항목을 아래로 옮기기",
@@ -16,7 +17,7 @@
        "ooui-toolbar-more": "더 보기",
        "ooui-dialog-message-accept": "확인",
        "ooui-dialog-message-reject": "취소",
-       "ooui-dialog-process-error": "오류가 발생했습니다.",
+       "ooui-dialog-process-error": "무언가가 잘못되었습니다",
        "ooui-dialog-process-dismiss": "숨기기",
-       "ooui-dialog-process-retry": "다시 시도하세요."
+       "ooui-dialog-process-retry": "다시 시도하세요"
 }
index 18c66e9..1bec097 100644 (file)
@@ -4,7 +4,6 @@
                        "Iltever"
                ]
        },
-       "ooui-dialog-action-close": "Джаб",
        "ooui-outline-control-move-down": "Элементни тюбюне кёчюр",
        "ooui-outline-control-move-up": "Элементни башына кёчюр",
        "ooui-outline-control-remove": "Пунктну кетер",
index c7f2887..a6c6d8a 100644 (file)
@@ -5,6 +5,5 @@
                        "Nrowe",
                        "Purodha"
                ]
-       },
-       "ooui-dialog-action-close": "Degea"
+       }
 }
index 7c6b994..e2b8ab7 100644 (file)
@@ -7,6 +7,5 @@
                        "Tynchtyk Chorotegin",
                        "Викиней"
                ]
-       },
-       "ooui-dialog-action-close": "Жабуу"
+       }
 }
index 1cbcb8a..270bae4 100644 (file)
@@ -14,6 +14,8 @@
        "ooui-outline-control-move-up": "Element erop réckelen",
        "ooui-outline-control-remove": "Element ewechhuelen",
        "ooui-toolbar-more": "Méi",
+       "ooui-toolgroup-expand": "Méi",
+       "ooui-toolgroup-collapse": "Manner",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Ofbriechen",
        "ooui-dialog-process-error": "Et ass eppes schif gaang",
index 3156e84..87309db 100644 (file)
@@ -4,7 +4,6 @@
                        "Ninonino"
                ]
        },
-       "ooui-dialog-action-close": "Sèra",
        "ooui-outline-control-move-down": "Spòsta 'n zó",
        "ooui-outline-control-move-up": "Spòsta 'n sö",
        "ooui-toolbar-more": "Amò"
index e295704..ecd06a8 100644 (file)
@@ -6,6 +6,5 @@
                        "Mantak111"
                ]
        },
-       "ooui-dialog-action-close": "Uždaryti",
        "ooui-outline-control-remove": "Šalinti elementus"
 }
index f296c3a..2b3ad53 100644 (file)
@@ -4,5 +4,5 @@
                        "Joe young yu"
                ]
        },
-       "ooui-dialog-confirm-default-ok": "可"
+       "ooui-dialog-message-accept": "可"
 }
index 2f27614..af97d17 100644 (file)
@@ -3,6 +3,5 @@
                "authors": [
                        "Jagwar"
                ]
-       },
-       "ooui-dialog-action-close": "Hidiana"
+       }
 }
index 6dfe34a..b8790d3 100644 (file)
@@ -5,13 +5,10 @@
                        "Jagwar"
                ]
        },
-       "ooui-dialog-action-close": "Tutuik",
        "ooui-outline-control-move-down": "Pindahan ko ka bawah",
        "ooui-outline-control-move-up": "Pindahan ko ka ateh",
        "ooui-outline-control-remove": "Hapuih ko",
        "ooui-toolbar-more": "Lainnyo",
-       "ooui-dialog-confirm-title": "Pastian",
-       "ooui-dialog-confirm-default-prompt": "Yakin?",
-       "ooui-dialog-confirm-default-ok": "Yo",
-       "ooui-dialog-confirm-default-cancel": "Batal"
+       "ooui-dialog-message-accept": "Yo",
+       "ooui-dialog-message-reject": "Batal"
 }
index d628034..7962336 100644 (file)
        "ooui-outline-control-move-up": "Помести нагоре",
        "ooui-outline-control-remove": "Отстрани ставка",
        "ooui-toolbar-more": "Повеќе",
+       "ooui-toolgroup-expand": "Повеќе",
+       "ooui-toolgroup-collapse": "Помалку",
        "ooui-dialog-message-accept": "ОК",
        "ooui-dialog-message-reject": "Откажи",
        "ooui-dialog-process-error": "Нешто не е во ред",
        "ooui-dialog-process-dismiss": "Тргни",
-       "ooui-dialog-process-retry": "Обиди се пак"
+       "ooui-dialog-process-retry": "Обиди се пак",
+       "ooui-dialog-process-continue": "Продолжи"
 }
index 48b05f5..0ce0c3f 100644 (file)
@@ -7,7 +7,6 @@
                        "Vssun"
                ]
        },
-       "ooui-dialog-action-close": "അടയ്ക്കുക",
        "ooui-outline-control-move-down": "ഇനം താഴേയ്ക്ക് മാറ്റുക",
        "ooui-outline-control-move-up": "ഇനം മുകളിലേയ്ക്ക് മാറ്റുക",
        "ooui-toolbar-more": "കൂടുതൽ"
index 618b5dc..7006190 100644 (file)
@@ -9,7 +9,6 @@
                        "संतोष दहिवळ"
                ]
        },
-       "ooui-dialog-action-close": "बंद करा",
        "ooui-outline-control-move-down": "घटक (आयटम) खाली सरकवा",
        "ooui-outline-control-move-up": "घटक (आयटम) वर सरकवा",
        "ooui-toolbar-more": "अधिक"
index 2cee413..9166037 100644 (file)
@@ -6,6 +6,5 @@
                        "PiRSquared17"
                ]
        },
-       "ooui-dialog-action-close": "Chiure",
        "ooui-toolbar-more": "Atro"
 }
index e8f0c83..26171f1 100644 (file)
@@ -4,7 +4,6 @@
                        "Servien"
                ]
        },
-       "ooui-dialog-action-close": "Sluten",
        "ooui-outline-control-move-down": "Onderwarp ummeneer zetten",
        "ooui-outline-control-move-up": "Onderwarp umhoge zetten"
 }
index c5d16ba..1e5b83d 100644 (file)
@@ -4,7 +4,6 @@
                        "Zylbath"
                ]
        },
-       "ooui-dialog-action-close": "Dichtmaken",
        "ooui-outline-control-move-down": "Element na ünnen schuven",
        "ooui-outline-control-move-up": "Element na baven schuven",
        "ooui-toolbar-more": "Mehr"
index da4b829..8b73233 100644 (file)
@@ -6,13 +6,10 @@
                        "Ganesh Paudel"
                ]
        },
-       "ooui-dialog-action-close": "बन्द गर्ने",
        "ooui-outline-control-move-down": "वस्तुलाई तल सार्ने",
        "ooui-outline-control-move-up": "वस्तुलाई माथि सार्ने",
        "ooui-outline-control-remove": "वस्तुलाई हटाउने",
        "ooui-toolbar-more": "थप",
-       "ooui-dialog-confirm-title": "निश्चित गर्ने",
-       "ooui-dialog-confirm-default-prompt": "निश्चित हुनुहुन्छ ?",
-       "ooui-dialog-confirm-default-ok": "हुन्छ",
-       "ooui-dialog-confirm-default-cancel": "रद्द गर्ने"
+       "ooui-dialog-message-accept": "हुन्छ",
+       "ooui-dialog-message-reject": "रद्द गर्ने"
 }
index 07a40b1..943e6ad 100644 (file)
@@ -5,7 +5,6 @@
                        "Njardarlogar"
                ]
        },
-       "ooui-dialog-action-close": "Lat att",
        "ooui-outline-control-move-down": "Flytt element ned",
        "ooui-outline-control-move-up": "Flytt element opp",
        "ooui-toolbar-more": "Fleire"
index a7f43a3..4d35b6c 100644 (file)
@@ -5,12 +5,9 @@
                        "Gloria sah"
                ]
        },
-       "ooui-dialog-action-close": "Tampar",
        "ooui-outline-control-move-down": "Far davalar l’element",
        "ooui-outline-control-move-up": "Far montar l’element",
        "ooui-outline-control-remove": "Suprimir l’element",
        "ooui-toolbar-more": "Mai",
-       "ooui-dialog-confirm-title": "Confirmar",
-       "ooui-dialog-confirm-default-prompt": "Sètz segur ?",
-       "ooui-dialog-confirm-default-cancel": "Anullar"
+       "ooui-dialog-message-reject": "Anullar"
 }
index a7083ae..2a1f95e 100644 (file)
@@ -5,6 +5,5 @@
                        "Psubhashish",
                        "ଶିତିକଣ୍ଠ ଦାଶ"
                ]
-       },
-       "ooui-dialog-action-close": "ବନ୍ଦ କରିବେ"
+       }
 }
index 8f75286..7af5bc9 100644 (file)
@@ -6,6 +6,5 @@
                        "Bouron",
                        "Nasir8891"
                ]
-       },
-       "ooui-dialog-action-close": "বন্ধ"
+       }
 }
index b51f70d..02d0842 100644 (file)
@@ -4,12 +4,10 @@
                        "Manuae"
                ]
        },
-       "ooui-dialog-action-close": "Schließe",
        "ooui-outline-control-move-down": "Bweeschs nunna",
        "ooui-outline-control-move-up": "Bweeschs nuff",
        "ooui-outline-control-remove": "Leschs",
        "ooui-toolbar-more": "Mea",
-       "ooui-dialog-confirm-default-prompt": "Bischda sischa?",
-       "ooui-dialog-confirm-default-ok": "OK",
-       "ooui-dialog-confirm-default-cancel": "Abbresche"
+       "ooui-dialog-message-accept": "OK",
+       "ooui-dialog-message-reject": "Abbresche"
 }
index 7978673..dea65eb 100644 (file)
@@ -27,5 +27,6 @@
        "ooui-dialog-message-reject": "Anuluj",
        "ooui-dialog-process-error": "Coś poszło nie tak",
        "ooui-dialog-process-dismiss": "Ukryj",
-       "ooui-dialog-process-retry": "Spróbuj ponownie"
+       "ooui-dialog-process-retry": "Spróbuj ponownie",
+       "ooui-dialog-process-continue": "Kontynuuj"
 }
index a202a02..b8fd3a5 100644 (file)
@@ -6,7 +6,6 @@
                        "පසිඳු කාවින්ද"
                ]
        },
-       "ooui-dialog-action-close": "Saré",
        "ooui-outline-control-move-down": "Fé calé giù l'element",
        "ooui-outline-control-move-up": "Fé monté l'element",
        "ooui-toolbar-more": "Ëd pi"
index 06d3b87..94bc7df 100644 (file)
@@ -4,7 +4,6 @@
                        "Ahmed-Najib-Biabani-Ibrahimkhel"
                ]
        },
-       "ooui-dialog-action-close": "تړل",
        "ooui-outline-control-move-down": "توکی ښکته راوړل",
        "ooui-outline-control-move-up": "توکی پورته راوړل",
        "ooui-toolbar-more": "نور"
index a8cced8..94ea089 100644 (file)
@@ -12,7 +12,6 @@
                        555
                ]
        },
-       "ooui-dialog-action-close": "Fechar",
        "ooui-outline-control-move-down": "Mover item para baixo",
        "ooui-outline-control-move-up": "Mover item para cima",
        "ooui-toolbar-more": "Mais"
index 5cb3e3d..d261e2d 100644 (file)
        "ooui-outline-control-move-up": "Mover item para cima",
        "ooui-outline-control-remove": "Remover elemento",
        "ooui-toolbar-more": "Mais",
+       "ooui-toolgroup-expand": "Mais",
        "ooui-dialog-message-accept": "Aceitar",
        "ooui-dialog-message-reject": "Cancelar",
        "ooui-dialog-process-error": "Algo correu mal",
        "ooui-dialog-process-dismiss": "Ignorar",
-       "ooui-dialog-process-retry": "Tentar novamente"
+       "ooui-dialog-process-retry": "Tentar novamente",
+       "ooui-dialog-process-continue": "Continuar"
 }
index 9b3bb60..c1b794a 100644 (file)
        "ooui-outline-control-move-up": "Tool tip for a button that moves items in a list up one place",
        "ooui-outline-control-remove": "Tool tip for a button that removes items from a list.\n{{Identical|Remove item}}",
        "ooui-toolbar-more": "Label for the toolbar group that contains a list of all other available tools.\n{{Identical|More}}",
+       "ooui-toolgroup-expand": "Label for the fake tool that expands the full list of tools in a toolbar group.\n\nSee also:\n* {{msg-mw|Ooui-toolgroup-collapse}}\n{{Identical|More}}",
+       "ooui-toolgroup-collapse": "Label for the fake tool that collapses the full list of tools in a toolbar group.\n\nSee also:\n* {{msg-mw|Ooui-toolgroup-expand}}\n{{Identical|Fewer}}",
        "ooui-dialog-message-accept": "Default label for the accept button of a message dialog\n{{Identical|OK}}",
        "ooui-dialog-message-reject": "Default label for the reject button of a message dialog\n{{Identical|Cancel}}",
        "ooui-dialog-process-error": "Title for process dialog error description",
        "ooui-dialog-process-dismiss": "Label for process dialog dismiss error button, visible when describing errors\n{{Identical|Dismiss}}",
-       "ooui-dialog-process-retry": "Label for process dialog retry action button, visible when describing recoverable errors\n{{Identical|Try again}}"
+       "ooui-dialog-process-retry": "Label for process dialog retry action button, visible when describing recoverable errors\n{{Identical|Try again}}",
+       "ooui-dialog-process-continue": "Label for process dialog retry action button, visible when describing only warnings\n{{Identical|Continue}}"
 }
index 5141f34..cb0b2c3 100644 (file)
@@ -5,7 +5,6 @@
                        "Jduranboger"
                ]
        },
-       "ooui-dialog-action-close": "Wichq'ay",
        "ooui-outline-control-move-down": "Qallawata uraykuchiy",
        "ooui-outline-control-move-up": "Qallawata huqariy",
        "ooui-outline-control-remove": "P'anqa sutikunata qichuy",
index 06e0f1d..258f3e7 100644 (file)
        "ooui-outline-control-move-up": "Mută elementul mai sus",
        "ooui-outline-control-remove": "Elimină elementul",
        "ooui-toolbar-more": "Mai mult",
+       "ooui-toolgroup-expand": "Mai multe",
+       "ooui-toolgroup-collapse": "Mai puține",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Revocare",
        "ooui-dialog-process-error": "Ceva nu a funcționat",
        "ooui-dialog-process-dismiss": "Renunțare",
-       "ooui-dialog-process-retry": "Reîncearcă"
+       "ooui-dialog-process-retry": "Reîncearcă",
+       "ooui-dialog-process-continue": "Continuă"
 }
index 11427ec..cd089af 100644 (file)
@@ -4,7 +4,6 @@
                        "Joetaras"
                ]
        },
-       "ooui-dialog-action-close": "Achiude",
        "ooui-outline-control-move-down": "Spuèste 'a vôsce sotte",
        "ooui-outline-control-move-up": "Spuèste 'a vôsce sus",
        "ooui-toolbar-more": "De cchiù"
index efd1062..129dd6a 100644 (file)
                        "Putnik",
                        "Sunpriat",
                        "Yury Katkov",
-                       "Умар"
+                       "Умар",
+                       "Камалист"
                ]
        },
        "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 82d76a6..85a94cd 100644 (file)
@@ -4,6 +4,5 @@
                        "Gazeb",
                        "HalanTul"
                ]
-       },
-       "ooui-dialog-action-close": "Сап"
+       }
 }
index a063cc8..22a212f 100644 (file)
@@ -7,9 +7,7 @@
                        "Gloria sah"
                ]
        },
-       "ooui-dialog-action-close": "Chiùi",
        "ooui-outline-control-move-down": "Sposta di sutta",
        "ooui-outline-control-move-up": "Sposta di supra",
-       "ooui-toolbar-more": "Àutri cosi",
-       "ooui-dialog-confirm-title": "Cunferma"
+       "ooui-toolbar-more": "Àutri cosi"
 }
index 085f908..0a26a5c 100644 (file)
@@ -4,7 +4,6 @@
                        "John Reid"
                ]
        },
-       "ooui-dialog-action-close": "Claise",
        "ooui-outline-control-move-down": "Muiv eetem doon",
        "ooui-outline-control-move-up": "Muiv eetem up",
        "ooui-outline-control-remove": "Remuiv eetem",
index ab9f9fd..b40fa04 100644 (file)
@@ -4,7 +4,6 @@
                        "OC Ripper"
                ]
        },
-       "ooui-dialog-action-close": "Zatvori",
        "ooui-outline-control-move-down": "Pomakni stavku dolje",
        "ooui-outline-control-move-up": "Pomakni stavku gore"
 }
index b5c0b69..5988773 100644 (file)
@@ -6,7 +6,6 @@
                        "ශ්වෙත"
                ]
        },
-       "ooui-dialog-action-close": "නිමවන්න",
        "ooui-outline-control-move-down": "අයිතමය පහලටදමන්න",
        "ooui-outline-control-move-up": "අයිතමය ඉහලටදමන්න"
 }
index 07d9828..c8246da 100644 (file)
@@ -5,8 +5,8 @@
                        "Teslaton"
                ]
        },
-       "ooui-dialog-action-close": "Zatvoriť",
        "ooui-outline-control-move-down": "Posunúť položku nadol",
        "ooui-outline-control-move-up": "Posunúť položku nahor",
+       "ooui-outline-control-remove": "Odstrániť položku",
        "ooui-toolbar-more": "Viac"
 }
index 889b0f6..382317e 100644 (file)
@@ -4,10 +4,13 @@
                        "Milicevic01"
                ]
        },
-       "ooui-dialog-action-close": "Zatvori",
        "ooui-outline-control-move-down": "Premesti stavku na dole",
        "ooui-outline-control-move-up": "Premesti stavku na gore",
        "ooui-outline-control-remove": "Ukloni stavku",
        "ooui-toolbar-more": "Više",
-       "ooui-dialog-confirm-default-prompt": "Jeste li sigurni?"
+       "ooui-dialog-message-accept": "U redu",
+       "ooui-dialog-message-reject": "Otkaži",
+       "ooui-dialog-process-error": "Nešto je pošlo naopako",
+       "ooui-dialog-process-dismiss": "Odbaci",
+       "ooui-dialog-process-retry": "Pokušaj ponovo"
 }
index 40305d0..d61d951 100644 (file)
@@ -18,6 +18,8 @@
        "ooui-outline-control-move-up": "Flytta upp objekt",
        "ooui-outline-control-remove": "Ta bort objekt",
        "ooui-toolbar-more": "Mer",
+       "ooui-toolgroup-expand": "Fler",
+       "ooui-toolgroup-collapse": "Färre",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Avbryt",
        "ooui-dialog-process-error": "Något gick fel",
index f9c46d7..510e468 100644 (file)
@@ -5,8 +5,11 @@
                        "Muddyb Blast Producer"
                ]
        },
-       "ooui-dialog-action-close": "Funga",
        "ooui-outline-control-move-down": "Sogeza kipengee chini",
        "ooui-outline-control-move-up": "Sogeza kipengee juu",
-       "ooui-toolbar-more": "Zaidi"
+       "ooui-outline-control-remove": "Toa kitu",
+       "ooui-toolbar-more": "Zaidi",
+       "ooui-dialog-message-accept": "Sawa",
+       "ooui-dialog-message-reject": "Batilisha",
+       "ooui-dialog-process-retry": "Jaribu tena"
 }
index dd8294f..0145017 100644 (file)
@@ -6,6 +6,5 @@
                        "Shanmugamp7",
                        "மதனாஹரன்"
                ]
-       },
-       "ooui-dialog-action-close": "மூடுக"
+       }
 }
index f220fa3..d486870 100644 (file)
@@ -9,6 +9,5 @@
                        "Visdaviva",
                        "மதனாஹரன்"
                ]
-       },
-       "ooui-dialog-action-close": "మూయి"
+       }
 }
index 908c894..1429bed 100644 (file)
@@ -4,7 +4,6 @@
                        "Ibrahim"
                ]
        },
-       "ooui-dialog-action-close": "Пӯшиш",
        "ooui-outline-control-move-down": "Ҳаракати мавод ба поён",
        "ooui-outline-control-move-up": "Ҳаракати мавод ба боло",
        "ooui-outline-control-remove": "Ҳазви мавод",
index f36dd6a..9452793 100644 (file)
@@ -5,7 +5,6 @@
                        "Taweetham"
                ]
        },
-       "ooui-dialog-action-close": "ปิด",
        "ooui-outline-control-move-down": "เลื่อนรายการลง",
        "ooui-outline-control-move-up": "ย้ายรายการขึ้น"
 }
index 178384c..b3a9f24 100644 (file)
@@ -5,13 +5,10 @@
                        "Sky Harbor"
                ]
        },
-       "ooui-dialog-action-close": "Isara",
        "ooui-outline-control-move-down": "Ilipat ang aytem pababa",
        "ooui-outline-control-move-up": "Ilipat ang aytem pataas",
        "ooui-outline-control-remove": "Tanggalin ang aytem",
        "ooui-toolbar-more": "Marami pa",
-       "ooui-dialog-confirm-title": "Tiyakin",
-       "ooui-dialog-confirm-default-prompt": "Nakatitiyak ka ba?",
-       "ooui-dialog-confirm-default-ok": "Sige",
-       "ooui-dialog-confirm-default-cancel": "Huwag ituloy"
+       "ooui-dialog-message-accept": "Sige",
+       "ooui-dialog-message-reject": "Huwag ituloy"
 }
index 257e13c..408a1b4 100644 (file)
@@ -4,7 +4,6 @@
                        "Ajdar"
                ]
        },
-       "ooui-dialog-action-close": "Ябу",
        "ooui-outline-control-move-down": "Элементны аска күчерү",
        "ooui-outline-control-move-up": "Элементны өскә күчерү"
 }
index 03b7808..7c6263e 100644 (file)
@@ -7,7 +7,6 @@
                        "පසිඳු කාවින්ද"
                ]
        },
-       "ooui-dialog-action-close": "Yopish",
        "ooui-outline-control-move-down": "Elementni pastga koʻchirish",
        "ooui-outline-control-move-up": "Elementni yuqoriga koʻchirish",
        "ooui-toolbar-more": "Yana"
index 1a91cdb..4de584b 100644 (file)
@@ -6,10 +6,8 @@
                        "Gloria sah"
                ]
        },
-       "ooui-dialog-action-close": "Sara",
        "ooui-outline-control-move-down": "Sposta in baso",
        "ooui-outline-control-move-up": "Sposta in sima",
        "ooui-toolbar-more": "Altro",
-       "ooui-dialog-confirm-title": "Conferma",
-       "ooui-dialog-confirm-default-ok": "Va ben"
+       "ooui-dialog-message-accept": "Va ben"
 }
index 205cbe8..d5c1e36 100644 (file)
@@ -3,16 +3,20 @@
                "authors": [
                        "Cheers!",
                        "Jdforrester",
-                       "Minh Nguyen"
+                       "Minh Nguyen",
+                       "Max20091"
                ]
        },
        "ooui-outline-control-move-down": "Chuyển mục xuống",
        "ooui-outline-control-move-up": "Chuyển mục lên",
        "ooui-outline-control-remove": "Xóa khoản",
        "ooui-toolbar-more": "Thêm",
+       "ooui-toolgroup-expand": "Mở rộng",
+       "ooui-toolgroup-collapse": "Rút gọn",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Hủy bỏ",
        "ooui-dialog-process-error": "Đã bị trục trặc",
        "ooui-dialog-process-dismiss": "Bỏ qua",
-       "ooui-dialog-process-retry": "Thử lại"
+       "ooui-dialog-process-retry": "Thử lại",
+       "ooui-dialog-process-continue": "Tiếp tục"
 }
index 7e359a5..3510ca9 100644 (file)
@@ -4,6 +4,5 @@
                        "Malafaya"
                ]
        },
-       "ooui-dialog-action-close": "Färmükön",
        "ooui-toolbar-more": "Pluikos"
 }
index bbb8f30..d979fc1 100644 (file)
@@ -4,7 +4,6 @@
                        "Demmy"
                ]
        },
-       "ooui-dialog-action-close": "Ìpadé",
        "ooui-outline-control-move-down": "Sún onítòún sí sàlẹ̀",
        "ooui-outline-control-move-up": "Sún onítòún s'ókè",
        "ooui-toolbar-more": "Míràn"
index 02bdafa..b16755e 100644 (file)
        "ooui-outline-control-move-up": "上移项",
        "ooui-outline-control-remove": "删除项",
        "ooui-toolbar-more": "更多",
+       "ooui-toolgroup-expand": "更多",
+       "ooui-toolgroup-collapse": "更少",
        "ooui-dialog-message-accept": "确定",
        "ooui-dialog-message-reject": "取消",
        "ooui-dialog-process-error": "发生一些错误",
        "ooui-dialog-process-dismiss": "解除",
-       "ooui-dialog-process-retry": "重试"
+       "ooui-dialog-process-retry": "重试",
+       "ooui-dialog-process-continue": "继续"
 }
index 05fb20d..1110669 100644 (file)
        "ooui-outline-control-move-up": "項目上移",
        "ooui-outline-control-remove": "移除項目",
        "ooui-toolbar-more": "更多",
+       "ooui-toolgroup-expand": "更多",
+       "ooui-toolgroup-collapse": "更少",
        "ooui-dialog-message-accept": "確定",
        "ooui-dialog-message-reject": "取消",
        "ooui-dialog-process-error": "發生不明錯誤",
-       "ooui-dialog-process-dismiss": "放棄",
+       "ooui-dialog-process-dismiss": "關閉",
        "ooui-dialog-process-retry": "再試一次"
 }
diff --git a/resources/lib/oojs-ui/images/anchor.svg b/resources/lib/oojs-ui/images/anchor.svg
deleted file mode 100644 (file)
index 3694391..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="15" height="8" viewBox="0 0 15 8">
-    <g id="anchor">
-        <polygon id="outline" style="fill:#808080;" points="7.609,2.499 2.096,8 13.125,8"/>
-        <polygon id="fill" style="fill:#FFFFFF;" points="7.609,3 2.598,8 12.622,8"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/accept.png b/resources/lib/oojs-ui/images/icons/accept.png
deleted file mode 100644 (file)
index 1075110..0000000
Binary files a/resources/lib/oojs-ui/images/icons/accept.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/accept.svg b/resources/lib/oojs-ui/images/icons/accept.svg
deleted file mode 100644 (file)
index b385a74..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="accept" opacity=".75">
-        <path id="check" d="M19.062 5.139l-1.644-1.139-8.551 12.357-3.454-3.454-1.413 1.413 5.021 5.022z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/add-item.png b/resources/lib/oojs-ui/images/icons/add-item.png
deleted file mode 100644 (file)
index 5cf353f..0000000
Binary files a/resources/lib/oojs-ui/images/icons/add-item.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/add-item.svg b/resources/lib/oojs-ui/images/icons/add-item.svg
deleted file mode 100644 (file)
index c42731a..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="add-item" opacity=".75">
-        <path id="plus" d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/advanced.png b/resources/lib/oojs-ui/images/icons/advanced.png
deleted file mode 100644 (file)
index 7f5ada5..0000000
Binary files a/resources/lib/oojs-ui/images/icons/advanced.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/advanced.svg b/resources/lib/oojs-ui/images/icons/advanced.svg
deleted file mode 100644 (file)
index 0f85e44..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="settings" opacity=".75">
-        <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>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/alert.png b/resources/lib/oojs-ui/images/icons/alert.png
deleted file mode 100644 (file)
index 992ea2a..0000000
Binary files a/resources/lib/oojs-ui/images/icons/alert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/alert.svg b/resources/lib/oojs-ui/images/icons/alert.svg
deleted file mode 100644 (file)
index 819e062..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="alert" opacity=".75">
-        <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/images/icons/arched-arrow-ltr.png b/resources/lib/oojs-ui/images/icons/arched-arrow-ltr.png
deleted file mode 100644 (file)
index 5db1c4d..0000000
Binary files a/resources/lib/oojs-ui/images/icons/arched-arrow-ltr.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/arched-arrow-ltr.svg b/resources/lib/oojs-ui/images/icons/arched-arrow-ltr.svg
deleted file mode 100644 (file)
index 9fd2866..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="arched-arrow-ltr" opacity=".75">
-        <path id="arrow" d="M19.925 14.937l-2.391-6.901-1.48 2.329c-.964-.845-2.699-1.85-5.513-1.823-4.887.046-6.524 4.244-6.524 4.244s2.753-2.639 6.925-1.949c1.729.286 3.007 1.206 3.675 1.791l-1.474 2.319 6.782-.01z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/arched-arrow-rtl.png b/resources/lib/oojs-ui/images/icons/arched-arrow-rtl.png
deleted file mode 100644 (file)
index 7931971..0000000
Binary files a/resources/lib/oojs-ui/images/icons/arched-arrow-rtl.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/arched-arrow-rtl.svg b/resources/lib/oojs-ui/images/icons/arched-arrow-rtl.svg
deleted file mode 100644 (file)
index b16c1b4..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="arched-arrow-rtl" opacity=".75">
-        <path id="arrow" d="M13.401 8.542c-2.814-.027-4.549.978-5.513 1.823l-1.48-2.329-2.391 6.901 6.782.009-1.474-2.319c.668-.584 1.945-1.504 3.675-1.791 4.172-.69 6.925 1.949 6.925 1.949s-1.637-4.197-6.524-4.243z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/check.png b/resources/lib/oojs-ui/images/icons/check.png
deleted file mode 100644 (file)
index 82c3cb4..0000000
Binary files a/resources/lib/oojs-ui/images/icons/check.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/check.svg b/resources/lib/oojs-ui/images/icons/check.svg
deleted file mode 100644 (file)
index 8d4a1f8..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="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"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/clear.png b/resources/lib/oojs-ui/images/icons/clear.png
deleted file mode 100644 (file)
index 697dd62..0000000
Binary files a/resources/lib/oojs-ui/images/icons/clear.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/clear.svg b/resources/lib/oojs-ui/images/icons/clear.svg
deleted file mode 100644 (file)
index 8409c67..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="clear" opacity=".75">
-        <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/close.png b/resources/lib/oojs-ui/images/icons/close.png
deleted file mode 100644 (file)
index f7eed9f..0000000
Binary files a/resources/lib/oojs-ui/images/icons/close.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/close.svg b/resources/lib/oojs-ui/images/icons/close.svg
deleted file mode 100644 (file)
index 3c0ab46..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" opacity=".75">
-        <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/images/icons/code.png b/resources/lib/oojs-ui/images/icons/code.png
deleted file mode 100644 (file)
index a5ebdbf..0000000
Binary files a/resources/lib/oojs-ui/images/icons/code.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/code.svg b/resources/lib/oojs-ui/images/icons/code.svg
deleted file mode 100644 (file)
index a45ab1e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
-    <g id="code" opacity=".75">
-        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1v-2.386c0-.514.024-.896.073-1.142.054-.252.139-.463.257-.633.204-.279.473-.475.808-.584.335-.115.872-.255 1.835-.255h1.027v1h-.752c-.457 0-.77.191-.936.408-.167.215-.312.445-.312 1.068v1.857c0 .729-.041 1.18-.244 1.493-.2.307-.562.529-1.09.667.535.155.9.385 1.096.688.199.303.238.757.238 1.484v1.862c0 .619.145.848.312 1.062.166.22.479.407.936.407l.752.004v1h-1.027c-.963 0-1.5-.133-1.835-.248-.335-.109-.604-.307-.808-.591-.118-.165-.203-.374-.257-.625-.049-.253-.073-.636-.073-1.149v-2.387c0-1 0-1-1-1h-1z"/>
-        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/collapse.png b/resources/lib/oojs-ui/images/icons/collapse.png
deleted file mode 100644 (file)
index 38b796f..0000000
Binary files a/resources/lib/oojs-ui/images/icons/collapse.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/collapse.svg b/resources/lib/oojs-ui/images/icons/collapse.svg
deleted file mode 100644 (file)
index c677e9e..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="collapse" opacity=".75">
-        <path id="arrow" d="M6.697 15.714l5.303-5.302 5.303 5.302 1.414-1.414-6.717-6.717-6.717 6.717z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/comment.png b/resources/lib/oojs-ui/images/icons/comment.png
deleted file mode 100644 (file)
index 9546455..0000000
Binary files a/resources/lib/oojs-ui/images/icons/comment.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/comment.svg b/resources/lib/oojs-ui/images/icons/comment.svg
deleted file mode 100644 (file)
index 0348035..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="comment" opacity=".75">
-        <path id="speech-bubble" d="M15 6h-6c-1.657 0-3 1.344-3 3v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3v-4c0-1.656-1.343-3-3-3z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/expand.png b/resources/lib/oojs-ui/images/icons/expand.png
deleted file mode 100644 (file)
index e90aca1..0000000
Binary files a/resources/lib/oojs-ui/images/icons/expand.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/expand.svg b/resources/lib/oojs-ui/images/icons/expand.svg
deleted file mode 100644 (file)
index f41b9f9..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="expand" opacity=".75">
-        <path id="arrow" d="M17.303 8.283l-5.303 5.303-5.303-5.303-1.414 1.414 6.717 6.717 6.717-6.717z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/help.png b/resources/lib/oojs-ui/images/icons/help.png
deleted file mode 100644 (file)
index dca745b..0000000
Binary files a/resources/lib/oojs-ui/images/icons/help.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/help.svg b/resources/lib/oojs-ui/images/icons/help.svg
deleted file mode 100644 (file)
index ce129a7..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" opacity=".75">
-        <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/images/icons/history.png b/resources/lib/oojs-ui/images/icons/history.png
deleted file mode 100644 (file)
index c049931..0000000
Binary files a/resources/lib/oojs-ui/images/icons/history.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/history.svg b/resources/lib/oojs-ui/images/icons/history.svg
deleted file mode 100644 (file)
index 91e072f..0000000
+++ /dev/null
@@ -1,7 +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="history" opacity=".75">
-        <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.559 1.702-6.559s-4.35 5.363-4.877 6.699c-.463 1.168 1.459 2.209 2.346 1.678 1.9.551 4.834 1.244 4.834 1.244z"/>
-        <path id="arrow" d="M12.086 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 1.783.476 3.454 1.301 4.898l-2.223 2.04h5.688v-5.219l-2.066 1.896c-.55-1.088-.866-2.312-.866-3.615 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083-1.145 0-2.228-.247-3.213-.678l-.833 1.634c1.235.557 2.602.874 4.045.874 5.476 0 9.914-4.438 9.914-9.914-.001-5.477-4.439-9.915-9.915-9.915z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/info.png b/resources/lib/oojs-ui/images/icons/info.png
deleted file mode 100644 (file)
index f43804d..0000000
Binary files a/resources/lib/oojs-ui/images/icons/info.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/info.svg b/resources/lib/oojs-ui/images/icons/info.svg
deleted file mode 100644 (file)
index 9ba57d7..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="info" opacity=".75">
-        <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>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/link.png b/resources/lib/oojs-ui/images/icons/link.png
deleted file mode 100644 (file)
index 7dfa268..0000000
Binary files a/resources/lib/oojs-ui/images/icons/link.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/link.svg b/resources/lib/oojs-ui/images/icons/link.svg
deleted file mode 100644 (file)
index fcb06be..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" opacity=".75">
-        <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/images/icons/menu.png b/resources/lib/oojs-ui/images/icons/menu.png
deleted file mode 100644 (file)
index b5ac60f..0000000
Binary files a/resources/lib/oojs-ui/images/icons/menu.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/menu.svg b/resources/lib/oojs-ui/images/icons/menu.svg
deleted file mode 100644 (file)
index 2d04789..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="menu" opacity=".75">
-        <path id="lines" d="M6 15h12c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-12c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1zm-1-4v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1zm0-5v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/move-ltr.png b/resources/lib/oojs-ui/images/icons/move-ltr.png
deleted file mode 100644 (file)
index ded5f05..0000000
Binary files a/resources/lib/oojs-ui/images/icons/move-ltr.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/move-ltr.svg b/resources/lib/oojs-ui/images/icons/move-ltr.svg
deleted file mode 100644 (file)
index eea75d8..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="move-ltr" opacity=".75">
-        <path id="arrow" d="M8.935 7.181l5.302 5.302-5.302 5.303 1.414 1.414 6.716-6.717-6.716-6.716z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/move-rtl.png b/resources/lib/oojs-ui/images/icons/move-rtl.png
deleted file mode 100644 (file)
index fc6e62d..0000000
Binary files a/resources/lib/oojs-ui/images/icons/move-rtl.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/move-rtl.svg b/resources/lib/oojs-ui/images/icons/move-rtl.svg
deleted file mode 100644 (file)
index 2dc5eaf..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="move-rtl" opacity=".75">
-        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.414-1.414-6.716 6.716 6.716 6.717z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/picture.png b/resources/lib/oojs-ui/images/icons/picture.png
deleted file mode 100644 (file)
index faf8af9..0000000
Binary files a/resources/lib/oojs-ui/images/icons/picture.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/picture.svg b/resources/lib/oojs-ui/images/icons/picture.svg
deleted file mode 100644 (file)
index 4862fbc..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="picture" opacity=".75">
-        <path id="frame" d="M18 4h-12c-2-.007-3 .993-3 2.993l.014 9.007c-.014 2 .986 2.988 2.986 3h12c2-.012 2.994-1 3-3.006v-9.001c-.006-2-1-3-3-2.993zm1 13h-14v-11h14v11z"/>
-        <path id="mountains" d="M6 13.5l3.5-3.5 2.328 2.312-1.312 1.094.875 1.032 4.109-3.438 2.5 2v3h-12z"/>
-        <path id="sky" d="M6 12l3.516-4.156 3.046 3.172 2.938-2.016 2.5 2v-4h-12z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/remove-item.png b/resources/lib/oojs-ui/images/icons/remove-item.png
deleted file mode 100644 (file)
index 2f11db3..0000000
Binary files a/resources/lib/oojs-ui/images/icons/remove-item.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/remove-item.svg b/resources/lib/oojs-ui/images/icons/remove-item.svg
deleted file mode 100644 (file)
index 723e70f..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="remove-item">
-        <path id="minus" d="M8 11h8v2h-8z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/remove.png b/resources/lib/oojs-ui/images/icons/remove.png
deleted file mode 100644 (file)
index d7e116c..0000000
Binary files a/resources/lib/oojs-ui/images/icons/remove.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/remove.svg b/resources/lib/oojs-ui/images/icons/remove.svg
deleted file mode 100644 (file)
index 61f4d2d..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="remove" opacity=".75">
-        <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/resources/lib/oojs-ui/images/icons/search.png b/resources/lib/oojs-ui/images/icons/search.png
deleted file mode 100644 (file)
index df29792..0000000
Binary files a/resources/lib/oojs-ui/images/icons/search.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/search.svg b/resources/lib/oojs-ui/images/icons/search.svg
deleted file mode 100644 (file)
index 75b38c8..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="search" opacity=".75">
-        <path id="magnifying-glass" d="M16.021 15.96l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/settings.png b/resources/lib/oojs-ui/images/icons/settings.png
deleted file mode 100644 (file)
index b1b35e9..0000000
Binary files a/resources/lib/oojs-ui/images/icons/settings.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/settings.svg b/resources/lib/oojs-ui/images/icons/settings.svg
deleted file mode 100644 (file)
index 6e45b60..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="settings" opacity=".75">
-        <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>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/tag.png b/resources/lib/oojs-ui/images/icons/tag.png
deleted file mode 100644 (file)
index 722f4d7..0000000
Binary files a/resources/lib/oojs-ui/images/icons/tag.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/tag.svg b/resources/lib/oojs-ui/images/icons/tag.svg
deleted file mode 100644 (file)
index 1d61b81..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="tag" opacity=".75">
-        <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/window.png b/resources/lib/oojs-ui/images/icons/window.png
deleted file mode 100644 (file)
index 3d48a3c..0000000
Binary files a/resources/lib/oojs-ui/images/icons/window.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/icons/window.svg b/resources/lib/oojs-ui/images/icons/window.svg
deleted file mode 100644 (file)
index 802f295..0000000
+++ /dev/null
@@ -1,7 +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="window" opacity=".75">
-        <path id="title" d="M7 10h10v1h-10z"/>
-        <path id="window" d="M16 19h-8c-2.206 0-4-1.794-4-4v-6c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zm-8-12c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2v-6c0-1.103-.897-2-2-2h-8z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/alert.png b/resources/lib/oojs-ui/images/indicators/alert.png
deleted file mode 100644 (file)
index bfc83e7..0000000
Binary files a/resources/lib/oojs-ui/images/indicators/alert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/indicators/alert.svg b/resources/lib/oojs-ui/images/indicators/alert.svg
deleted file mode 100644 (file)
index e2e49a8..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="alert" opacity=".75">
-        <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2v-5h-2zm0 3h2v-2h-2z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-down.png b/resources/lib/oojs-ui/images/indicators/arrow-down.png
deleted file mode 100644 (file)
index 64e3bac..0000000
Binary files a/resources/lib/oojs-ui/images/indicators/arrow-down.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-down.svg b/resources/lib/oojs-ui/images/indicators/arrow-down.svg
deleted file mode 100644 (file)
index 55670de..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="down" opacity=".75">
-        <path id="arrow" d="M2 3l3.5 6 3.5-6z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-ltr.png b/resources/lib/oojs-ui/images/indicators/arrow-ltr.png
deleted file mode 100644 (file)
index 4eafd0f..0000000
Binary files a/resources/lib/oojs-ui/images/indicators/arrow-ltr.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-ltr.svg b/resources/lib/oojs-ui/images/indicators/arrow-ltr.svg
deleted file mode 100644 (file)
index 5092d88..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="ltr" opacity=".75">
-        <path id="arrow" d="M3 9v-7l6 3.5z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-rtl.png b/resources/lib/oojs-ui/images/indicators/arrow-rtl.png
deleted file mode 100644 (file)
index ce13ba0..0000000
Binary files a/resources/lib/oojs-ui/images/indicators/arrow-rtl.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-rtl.svg b/resources/lib/oojs-ui/images/indicators/arrow-rtl.svg
deleted file mode 100644 (file)
index 8d39de8..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="rtl" opacity=".75">
-        <path id="arrow" d="M3 5.5l6 3.5v-7z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-up.png b/resources/lib/oojs-ui/images/indicators/arrow-up.png
deleted file mode 100644 (file)
index 401cde6..0000000
Binary files a/resources/lib/oojs-ui/images/indicators/arrow-up.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-up.svg b/resources/lib/oojs-ui/images/indicators/arrow-up.svg
deleted file mode 100644 (file)
index b9d725e..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="up" opacity=".75">
-        <path id="arrow" d="M5.5 2l-3.5 6h7z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/required.png b/resources/lib/oojs-ui/images/indicators/required.png
deleted file mode 100644 (file)
index d10e0d4..0000000
Binary files a/resources/lib/oojs-ui/images/indicators/required.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/indicators/required.svg b/resources/lib/oojs-ui/images/indicators/required.svg
deleted file mode 100644 (file)
index 45035f4..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="required" opacity=".75">
-        <path d="M5 1h2v10h-2zM9.83 2.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/textures/pending.gif b/resources/lib/oojs-ui/images/textures/pending.gif
deleted file mode 100644 (file)
index 1194eed..0000000
Binary files a/resources/lib/oojs-ui/images/textures/pending.gif and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/textures/transparency.png b/resources/lib/oojs-ui/images/textures/transparency.png
deleted file mode 100644 (file)
index b8e36d3..0000000
Binary files a/resources/lib/oojs-ui/images/textures/transparency.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/images/toolbar-shadow.png b/resources/lib/oojs-ui/images/toolbar-shadow.png
deleted file mode 100644 (file)
index 97e8d13..0000000
Binary files a/resources/lib/oojs-ui/images/toolbar-shadow.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/oojs-ui-agora.css b/resources/lib/oojs-ui/oojs-ui-agora.css
deleted file mode 100644 (file)
index c29b262..0000000
+++ /dev/null
@@ -1,337 +0,0 @@
-/*!
- * OOjs UI v0.1.0-pre (d6008381aa)
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-08-21T23:45:56Z
- */
-.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-overlay {
-  z-index: 3;
-}
-
-.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: 0;
-  bottom: 0;
-  background-color: #fff;
-  -webkit-transform: translate3d(0, -200%, 0);
-  -moz-transform: translate3d(0, -200%, 0);
-  -ms-transform: translate3d(0, -200%, 0);
-  -o-transform: translate3d(0, -200%, 0);
-  transform: translate3d(0, -200%, 0);
-  -webkit-transition: transform 250ms ease-in-out;
-  -moz-transition: transform 250ms ease-in-out;
-  -ms-transition: transform 250ms ease-in-out;
-  -o-transition: transform 250ms ease-in-out;
-  transition: transform 250ms ease-in-out;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
-  opacity: 1;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
-  -webkit-transform: translate3d(0, 0, 0);
-  -moz-transform: translate3d(0, 0, 0);
-  -ms-transform: translate3d(0, 0, 0);
-  -o-transform: translate3d(0, 0, 0);
-  transform: translate3d(0, 0, 0);
-}
-.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
-  border: solid 1px #ccc;
-  border-radius: 0.5em;
-  box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
-}
-
-.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: #000;
-}
-.oo-ui-messageDialog-message {
-  font-size: 0.9em;
-  line-height: 1.25em;
-  color: #666;
-}
-.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 .oo-ui-labeledElement-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-flaggableElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
-  font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
-}
-
-.oo-ui-processDialog-content .oo-ui-window-head {
-  height: 3.35em;
-  border-bottom: 1px solid #dddddd;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.oo-ui-processDialog-content .oo-ui-window-body {
-  top: 3.35em;
-  padding: 2em 0;
-}
-.oo-ui-processDialog-navigation {
-  position: relative;
-  height: 3.35em;
-  padding: 0 1em;
-}
-.oo-ui-processDialog-location {
-  padding: 0.25em 0;
-  height: 3.35em;
-  cursor: default;
-  text-align: center;
-}
-.oo-ui-processDialog-title {
-  font-weight: bold;
-  line-height: 1.85em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button {
-  padding: 0.35em 0.75em;
-  min-width: 1.85em;
-  min-height: 1.85em;
-  border: 1px solid #dddddd;
-  border-radius: 4px;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label {
-  line-height: 1.85em;
-  padding: 0 1em;
-  font-weight: bold;
-  color: #777777;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon {
-  position: absolute;
-  margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
-  vertical-align: middle;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button {
-  border: 1px solid transparent;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-labeledElement-label {
-  color: #d11d13;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button {
-  padding: 0.75em 0.35em;
-  border: none;
-  border-radius: 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button {
-  background-color: #347bff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
-  color: #ffffff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
-  left: 0.5em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
-  padding-left: 2.25em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
-  right: 0.5em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
-  padding-right: 2.25em;
-}
-.oo-ui-processDialog-actions-other {
-  position: absolute;
-  bottom: 1em;
-}
-.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: #000;
-  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-buttonedElement.oo-ui-indicatedElement .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  width: 3.35em;
-  height: 3.35em;
-  background-size: 2em auto;
-}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
-  padding: 0 0 1em;
-}
-
-.oo-ui-panelLayout {
-  padding: 1em 3.35em;
-}
-
-.oo-ui-optionWidget {
-  padding: 0.8em 1em 0.8em 3.35em;
-  font-weight: bold;
-  border-bottom: 1px solid #dddddd;
-}
-.oo-ui-optionWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label {
-  padding-right: 1.5em;
-}
-.oo-ui-optionWidget-level-0 {
-  padding-left: 3.5em;
-}
-.oo-ui-optionWidget-level-0 .oo-ui-iconedElement-icon {
-  left: 1em;
-}
-.oo-ui-optionWidget-level-1 {
-  padding-left: 5em;
-}
-.oo-ui-optionWidget-level-1 .oo-ui-iconedElement-icon {
-  left: 2.5em;
-}
-.oo-ui-optionWidget-level-2 {
-  padding-left: 6.5em;
-}
-.oo-ui-optionWidget-level-2 .oo-ui-iconedElement-icon {
-  left: 4em;
-}
-
-.oo-ui-buttonOptionWidget {
-  padding: 0;
-}
-
-.oo-ui-lookupWidget-menu {
-  background-color: #fff;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  background: #347bff;
-  color: #ffffff;
-}
-.oo-ui-menuItemWidget .oo-ui-iconedElement-icon {
-  background-size: 24px auto;
-}
-
-.oo-ui-menuSectionItemWidget {
-  font-weight: normal;
-  color: #777777;
-  border: none;
-}
-
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-  padding: .8em 1em;
-}
-
-/* Icons */
-.oo-ui-icon-check {
-  background-image: /* @embed */ url(themes/agora/images/icons/check.svg);
-  background: #347bff;
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-agora.rtl.css b/resources/lib/oojs-ui/oojs-ui-agora.rtl.css
deleted file mode 100644 (file)
index fef9ba5..0000000
+++ /dev/null
@@ -1,420 +0,0 @@
-/*!
- * OOjs UI v0.1.0
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-07-22T21:39:24Z
- */
-.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 {
-  top: 0;
-  z-index: 1;
-}
-
-.oo-ui-dialog-content > .oo-ui-window-body {
-  top: 0;
-  bottom: 0;
-  z-index: 2;
-}
-
-.oo-ui-dialog-content > .oo-ui-window-foot {
-  bottom: 0;
-  z-index: 1;
-}
-
-.oo-ui-dialog-content > .oo-ui-window-overlay {
-  z-index: 3;
-}
-
-.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: #fff;
-  -webkit-transform: translate3d(0, -200%, 0);
-     -moz-transform: translate3d(0, -200%, 0);
-      -ms-transform: translate3d(0, -200%, 0);
-       -o-transform: translate3d(0, -200%, 0);
-          transform: translate3d(0, -200%, 0);
-  -webkit-transition: transform 250ms ease-in-out;
-     -moz-transition: transform 250ms ease-in-out;
-      -ms-transition: transform 250ms ease-in-out;
-       -o-transition: transform 250ms ease-in-out;
-          transition: transform 250ms ease-in-out;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
-  opacity: 1;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
-  -webkit-transform: translate3d(0, 0, 0);
-     -moz-transform: translate3d(0, 0, 0);
-      -ms-transform: translate3d(0, 0, 0);
-       -o-transform: translate3d(0, 0, 0);
-          transform: translate3d(0, 0, 0);
-}
-
-.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
-  border: solid 1px #ccc;
-  border-radius: 0.5em;
-  box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
-}
-
-.oo-ui-messageDialog-title,
-.oo-ui-messageDialog-message {
-  display: block;
-  padding-top: 0.5em;
-  text-align: center;
-}
-
-.oo-ui-messageDialog-title {
-  font-size: 1.5em;
-  line-height: 1em;
-  color: #000;
-}
-
-.oo-ui-messageDialog-message {
-  font-size: 0.9em;
-  line-height: 1.25em;
-  color: #666;
-}
-
-.oo-ui-messageDialog-message-verbose {
-  font-size: 1.1em;
-  line-height: 1.5em;
-  text-align: right;
-}
-
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
-  border-left: solid 1px #e5e5e5;
-}
-
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
-  border-left-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 .oo-ui-labeledElement-label {
-  padding: 0 2em;
-  line-height: 3.4em;
-  text-align: center;
-}
-
-.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-flaggableElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
-  font-weight: bold;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
-}
-
-.oo-ui-processDialog-content .oo-ui-window-head {
-  height: 3.35em;
-  border-bottom: 1px solid #dddddd;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.oo-ui-processDialog-content .oo-ui-window-body {
-  top: 3.35em;
-  padding: 2em 0;
-}
-
-.oo-ui-processDialog-navigation {
-  position: relative;
-  height: 3.35em;
-  padding: 0 1em;
-}
-
-.oo-ui-processDialog-location {
-  height: 3.35em;
-  padding: 0.25em 0;
-  text-align: center;
-  cursor: default;
-}
-
-.oo-ui-processDialog-title {
-  font-weight: bold;
-  line-height: 1.85em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button {
-  min-width: 1.85em;
-  min-height: 1.85em;
-  padding-top: 0.75em;
-  padding-bottom: 0.75em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label {
-  padding: 0 1em;
-  line-height: 1.85em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon {
-  position: absolute;
-  margin-top: -0.125em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed {
-  margin: 0.75em 0.75em 0.75em 0;
-  border: solid 1px #ccc;
-  border-radius: 0.25em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
-  padding: 0;
-  vertical-align: middle;
-}
-
-.oo-ui-processDialog-actions-safe.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
-  margin: 0.75em;
-}
-
-.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-buttonedElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed {
-  margin: 0.75em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
-  /* Adjust for border so text aligns with title */
-
-  margin: -1px;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
-  font-weight: bold;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
-  right: 0.5em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
-  padding-right: 2.25em;
-}
-
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
-  left: 0.5em;
-}
-
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
-  padding-left: 2.25em;
-}
-
-.oo-ui-processDialog > .oo-ui-window-frame {
-  min-height: 5em;
-}
-
-.oo-ui-processDialog-errors {
-  padding: 3em 3em 1.5em 3em;
-  text-align: center;
-  background-color: rgba(255, 255, 255, 0.9);
-}
-
-.oo-ui-processDialog-errors .oo-ui-buttonWidget {
-  margin: 2em 1em 2em 1em;
-}
-
-.oo-ui-processDialog-errors-title {
-  margin-bottom: 2em;
-  font-size: 1.5em;
-  color: #000;
-}
-
-.oo-ui-processDialog-error {
-  padding: 1em;
-  margin: 1em;
-  text-align: right;
-  background-color: #fff7f7;
-  border: solid 1px #ff9e9e;
-  border-radius: 0.25em;
-}
-
-.oo-ui-buttonedElement.oo-ui-indicatedElement .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  width: 3.35em;
-  height: 3.35em;
-  background-size: 2em auto;
-}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
-  padding: 0 0 1em;
-}
-
-.oo-ui-optionWidget {
-  padding: 0.8em 3.35em 0.8em 1em;
-  font-weight: bold;
-  border-bottom: 1px solid #dddddd;
-}
-
-.oo-ui-optionWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label {
-  padding-left: 1.5em;
-}
-
-.oo-ui-optionWidget-level-0 {
-  padding-right: 3.5em;
-}
-
-.oo-ui-optionWidget-level-0 .oo-ui-iconedElement-icon {
-  right: 1em;
-}
-
-.oo-ui-optionWidget-level-1 {
-  padding-right: 5em;
-}
-
-.oo-ui-optionWidget-level-1 .oo-ui-iconedElement-icon {
-  right: 2.5em;
-}
-
-.oo-ui-optionWidget-level-2 {
-  padding-right: 6.5em;
-}
-
-.oo-ui-optionWidget-level-2 .oo-ui-iconedElement-icon {
-  right: 4em;
-}
-
-.oo-ui-buttonOptionWidget {
-  padding: 0;
-}
-
-.oo-ui-lookupWidget-menu {
-  background-color: #fff;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  color: #ffffff;
-  background: #347bff;
-}
-
-.oo-ui-menuSectionItemWidget {
-  font-weight: normal;
-  color: #777777;
-  border: none;
-}
-
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-  padding: .8em 1em;
-}
-
-/* Icons */
-
-.oo-ui-icon-check {
-  background: #347bff;
-  background-image: /* @embed */ url(themes/agora/images/icons/check.svg);
-}
\ No newline at end of file
index a1c96cc..4cac5e5 100644 (file)
 /*!
- * OOjs UI v0.1.0-pre (d6008381aa)
+ * OOjs UI v0.1.0-pre (12b66051ff)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-08-21T23:45:56Z
+ * Date: 2014-11-06T19:08:43Z
  */
-.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;
+/* @noflip */
+.oo-ui-rtl {
+       direction: rtl;
+}
+/* @noflip */
+.oo-ui-ltr {
+       direction: ltr;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button {
+       cursor: pointer;
+       display: inline-block;
+       vertical-align: middle;
+       font-family: 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-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-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 {
+       color: #333333;
+}
+.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 {
+       opacity: 0.8;
+       width: 1.9em;
+       height: 1.9em;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+       /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
+       /*.oo-ui-transition(opacity 200ms);*/
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus {
+       outline: none;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-iconElement-icon {
+       opacity: 1;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
+       color: #000000;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #333333;
+       margin-left: 0.25em;
+}
+.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #087ecc;
+}
+.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #76ab36;
+}
+.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #d45353;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+       opacity: 0.2;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #cccccc;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
+       margin: 0.1em 0;
+       padding: 0.2em 0.8em;
+       border-radius: 0.3em;
+       text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
+       border: 1px #c9c9c9 solid;
+       -webkit-transition: border-color 100ms ease-in-out;
+          -moz-transition: border-color 100ms ease-in-out;
+           -ms-transition: border-color 100ms ease-in-out;
+            -o-transition: border-color 100ms ease-in-out;
+               transition: border-color 100ms ease-in-out;
+       background: #eeeeee;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
+       background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:    -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:     -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:      -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:         linear-gradient(top, #ffffff 0%, #dddddd 100%);
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
+       border-color: #aaaaaa;
+       outline: none;
+}
+.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       line-height: 1.9em;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
+       color: black;
+       border-color: #c9c9c9;
+       background: #eeeeee;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
+       background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:    -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:     -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:      -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:         linear-gradient(top, #dddddd 0%, #ffffff 100%);
+}
+.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-flaggedElement-primary > .oo-ui-buttonElement-button {
+       border: solid 1px #a6cee1;
+       background: #cde7f4;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
+       background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:    -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:     -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:      -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:         linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:focus {
+       border-color: #9dc2d4;
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       border: solid 1px #a6cee1;
+       background: #cde7f4;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
+       background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:    -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:     -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:      -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:         linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
+       border: solid 1px #b8d892;
+       background: #daf0be;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f0fbe1), color-stop(100%, #c3e59a));
+       background-image: -webkit-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+       background-image:    -moz-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+       background-image:     -ms-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+       background-image:      -o-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+       background-image:         linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
+       border-color: #adcb89;
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       border: solid 1px #b8d892;
+       background: #daf0be;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #c3e59a), color-stop(100%, #f0fbe1));
+       background-image: -webkit-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+       background-image:    -moz-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+       background-image:     -ms-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+       background-image:      -o-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+       background-image:         linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
+       color: #d45353;
+}
+.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 {
+       opacity: 0.5;
+       -webkit-transform: translate3d(0, 0, 0);
+       box-shadow: none;
+       color: #333333;
+       background: #eeeeee;
+       border-color: #cccccc;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:focus,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:focus,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:focus {
+       border-color: #cccccc;
+       box-shadow: none;
+}
+.oo-ui-clippableElement-clippable {
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable {
+       overflow-y: hidden;
 }
-.oo-ui-dialog-content > .oo-ui-window-head {
-  z-index: 1;
-  top: 0;
+.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-dialog-content > .oo-ui-window-body {
-  z-index: 2;
-  top: 0;
-  bottom: 0;
-  box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable {
+       overflow-y: auto;
 }
-.oo-ui-dialog-content > .oo-ui-window-foot {
-  z-index: 1;
-  bottom: 0;
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded {
+       padding: 2em;
 }
-.oo-ui-dialog-content > .oo-ui-window-overlay {
-  z-index: 3;
+.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget {
+       position: absolute;
+       top: 0;
+       left: 0;
+       right: 0;
+       bottom: 3em;
+       overflow-y: auto;
 }
-
-.oo-ui-toolbar-bar {
-  border-bottom: solid 1px #ccc;
-  background: #f8fbfd;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#f1f7fb');
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #f1f7fb));
-  background-image: -webkit-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
-  background-image: -moz-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
-  background-image: -ms-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
-  background-image: -o-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
-  background-image: linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
+       position: absolute;
+       bottom: 0;
+       left: 0;
+       right: 0;
 }
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
-  border: none;
-  background: none;
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
+       padding: 1.5em;
 }
-.oo-ui-toolbar-shadow {
-  background-image: /* @embed */ url(images/toolbar-shadow.png);
-  bottom: -9px;
-  height: 9px;
-  opacity: 0.125;
-  -webkit-transition: opacity 500ms ease-in-out;
-  -moz-transition: opacity 500ms ease-in-out;
-  -ms-transition: opacity 500ms ease-in-out;
-  -o-transition: opacity 500ms ease-in-out;
-  transition: opacity 500ms ease-in-out;
+.oo-ui-bookletLayout-outlinePanel {
+       border-right: solid 1px #dddddd;
 }
-
-.oo-ui-toolGroup {
-  border-radius: 0.25em;
-  border: solid 1px transparent;
-  -webkit-transition: border-color 300ms ease-in-out;
-  -moz-transition: border-color 300ms ease-in-out;
-  -ms-transition: border-color 300ms ease-in-out;
-  -o-transition: border-color 300ms ease-in-out;
-  transition: border-color 300ms ease-in-out;
+.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
+       box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
 }
-.oo-ui-toolGroup.oo-ui-widget-enabled:hover {
-  border-color: rgba(0, 0, 0, 0.1);
+.oo-ui-fieldLayout {
+       display: block;
+       margin-bottom: 1em;
 }
-.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
-  color: #000;
+.oo-ui-fieldLayout:before,
+.oo-ui-fieldLayout:after {
+       content: " ";
+       display: table;
 }
-
-.oo-ui-window-isolated.oo-ui-window-content {
-  font-family: sans-serif;
-  font-size: 0.8em;
-  background: transparent;
+.oo-ui-fieldLayout:after {
+       clear: both;
 }
-.oo-ui-window-isolated.oo-ui-window-overlay {
-  font-family: sans-serif;
-  line-height: 1.5em;
-  font-size: 1em;
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+       display: block;
+       float: left;
 }
-
-.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-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
+       display: block;
+       float: left;
 }
-.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
-  top: 1em;
-  bottom: 1em;
-  background-color: #fff;
-  -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-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+       text-align: right;
 }
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
-  opacity: 1;
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
+       display: inline-block;
+       vertical-align: middle;
 }
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
-  -webkit-transform: scale(1);
-  -moz-transform: scale(1);
-  -ms-transform: scale(1);
-  -o-transform: scale(1);
-  transform: scale(1);
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
+       display: inline-block;
+       vertical-align: middle;
 }
-.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
-  border: solid 1px #ccc;
-  border-radius: 0.5em;
-  box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
+       display: inline-block;
 }
-
-.oo-ui-messageDialog-content .oo-ui-window-body {
-  box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+       z-index: 1;
 }
-.oo-ui-messageDialog-title,
-.oo-ui-messageDialog-message {
-  display: block;
-  text-align: center;
-  padding-top: 0.5em;
+.oo-ui-fieldLayout .oo-ui-fieldLayout-help {
+       float: right;
 }
-.oo-ui-messageDialog-title {
-  font-size: 1.5em;
-  line-height: 1em;
-  color: #000;
+.oo-ui-fieldLayout .oo-ui-fieldLayout-help-content {
+       padding: 0.5em 0.75em;
 }
-.oo-ui-messageDialog-message {
-  font-size: 0.9em;
-  line-height: 1.25em;
-  color: #666;
+.oo-ui-fieldLayout:last-child {
+       margin-bottom: 0;
 }
-.oo-ui-messageDialog-message-verbose {
-  font-size: 1.1em;
-  line-height: 1.5em;
-  text-align: left;
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+       padding-top: 0.5em;
+       margin-right: 5%;
+       width: 35%;
 }
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
-  border-right: solid 1px #e5e5e5;
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
+       width: 60%;
 }
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
-  border-right-width: 0;
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
+       padding: 0.75em 0.5em 0.5em 0.5em;
 }
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
-  border-bottom: solid 1px #e5e5e5;
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
+       padding: 0.5em 0;
 }
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
-  border-bottom-width: 0;
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
+       padding: 0.5em 0;
 }
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label {
-  text-align: center;
-  line-height: 3.4em;
-  padding: 0 2em;
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+       margin-top: 0.25em;
 }
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
-  background-color: rgba(0, 0, 0, 0.05);
+.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
+       color: #cccccc;
 }
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
-  background-color: rgba(0, 0, 0, 0.1);
+.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 {
+       margin-top: 2em;
+}
+.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
+       font-size: 1.5em;
+       margin-bottom: 0.5em;
+       padding: 0.25em 0;
+}
+.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: 2em;
+       height: 2em;
+}
+.oo-ui-gridLayout {
+       position: absolute;
+       top: 0;
+       left: 0;
+       right: 0;
+       bottom: 0;
+}
+.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-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
+.oo-ui-panelLayout-padded {
+       padding: 1.25em;
 }
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
+.oo-ui-stackLayout > .oo-ui-panelLayout {
+       display: none;
 }
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
-  font-weight: bold;
+.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
+       display: block;
+       position: relative;
 }
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
+.oo-ui-popupTool .oo-ui-popupWidget-popup,
+.oo-ui-popupTool .oo-ui-popupWidget-anchor {
+       z-index: 4;
 }
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
+.oo-ui-popupTool .oo-ui-popupWidget {
+       /* @noflip */
+       margin-left: 1.25em;
+       font-size: 0.8em;
 }
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
+.oo-ui-toolGroup {
+       display: inline-block;
+       vertical-align: middle;
+       margin: 0.3em;
+       border-radius: 0.25em;
+       border: solid 1px transparent;
+       -webkit-transition: border-color 300ms ease-in-out;
+          -moz-transition: border-color 300ms ease-in-out;
+           -ms-transition: border-color 300ms ease-in-out;
+            -o-transition: border-color 300ms ease-in-out;
+               transition: border-color 300ms ease-in-out;
+}
+.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-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
+.oo-ui-toolGroup.oo-ui-widget-enabled:hover {
+       border-color: rgba(0, 0, 0, 0.1);
 }
-
-.oo-ui-processDialog-content .oo-ui-window-head {
-  height: 3.4em;
+.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
+       color: #000000;
 }
-.oo-ui-processDialog-content .oo-ui-window-body {
-  top: 3.4em;
-  box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
+.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
+.oo-ui-barToolGroup > .oo-ui-labelElement-label {
+       display: none;
 }
-.oo-ui-processDialog-navigation {
-  position: relative;
-  height: 3.4em;
-  padding: 0 1em;
+.oo-ui-barToolGroup .oo-ui-tool {
+       display: inline-block;
+       position: relative;
+       vertical-align: top;
 }
-.oo-ui-processDialog-location {
-  padding: 0.25em 0;
-  height: 1.9em;
-  cursor: default;
-  text-align: center;
+.oo-ui-barToolGroup .oo-ui-tool-link {
+       display: block;
 }
-.oo-ui-processDialog-title {
-  font-weight: bold;
-  line-height: 1.9em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button {
-  padding-top: 0.75em;
-  padding-bottom: 0.75em;
-  min-width: 1.9em;
-  min-height: 1.9em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label {
-  line-height: 1.9em;
-  padding: 0 1em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon {
-  position: absolute;
-  margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed {
-  margin: 0.75em 0 0.75em 0.75em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
-  padding: 0;
-  vertical-align: middle;
+.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+       display: block;
 }
-.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-barToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+       display: none;
 }
-.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-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+       cursor: default;
 }
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed {
-  margin: 0.75em;
+.oo-ui-barToolGroup .oo-ui-tool-title,
+.oo-ui-barToolGroup .oo-ui-tool-accel {
+       display: none;
 }
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
-  /* Adjust for border so text aligns with title */
-  margin: -1px;
+.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link {
+       cursor: pointer;
 }
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
+.oo-ui-barToolGroup .oo-ui-tool {
+       margin: -1px 0 -1px -1px;
+       border: solid 1px transparent;
 }
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
+.oo-ui-barToolGroup .oo-ui-tool:first-child {
+       border-top-left-radius: 0.25em;
+       border-bottom-left-radius: 0.25em;
 }
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
-  font-weight: bold;
+.oo-ui-barToolGroup .oo-ui-tool:last-child {
+       margin-right: -1px;
+       border-top-right-radius: 0.25em;
+       border-bottom-right-radius: 0.25em;
 }
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
+.oo-ui-barToolGroup .oo-ui-tool-link {
+       height: 1.5em;
+       padding: 0.25em;
 }
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
+.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+       height: 1.5em;
+       width: 1.5em;
+       opacity: 0.8;
 }
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
+.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover {
+       border-color: rgba(0, 0, 0, 0.2);
 }
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
+.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled {
+       border-color: rgba(0, 0, 0, 0.2);
+       box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+       background: #f8fbfd;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
+       background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:    -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:     -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:      -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:         linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
 }
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
-  left: 0.5em;
+.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
+       border-left-color: rgba(0, 0, 0, 0.1);
 }
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
-  padding-left: 2.25em;
+.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-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
-  right: 0.5em;
+.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-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
-  padding-right: 2.25em;
+.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-processDialog > .oo-ui-window-frame {
-  min-height: 5em;
+.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+       opacity: 0.2;
 }
-.oo-ui-processDialog-errors {
-  background-color: rgba(255, 255, 255, 0.9);
-  padding: 3em 3em 1.5em 3em;
-  text-align: center;
+.oo-ui-popupToolGroup {
+       position: relative;
+       height: 2em;
+       min-width: 2.5em;
 }
-.oo-ui-processDialog-errors .oo-ui-buttonWidget {
-  margin: 2em 1em 2em 1em;
+.oo-ui-popupToolGroup-handle {
+       display: block;
+       cursor: pointer;
 }
-.oo-ui-processDialog-errors-title {
-  font-size: 1.5em;
-  color: #000;
-  margin-bottom: 2em;
+.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-processDialog-error {
-  text-align: left;
-  margin: 1em;
-  padding: 1em;
-  border: solid 1px #ff9e9e;
-  background-color: #fff7f7;
-  border-radius: 0.25em;
+.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
+       cursor: default;
 }
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button {
-  color: #333;
-}
-.oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  opacity: 0.8;
-  width: 1.9em;
-  height: 1.9em;
-}
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
-  /*.oo-ui-transition(opacity 200ms);*/
-}
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:hover > .oo-ui-iconedElement-icon,
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:focus > .oo-ui-iconedElement-icon {
-  opacity: 1;
-}
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:hover > .oo-ui-labeledElement-label,
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:focus > .oo-ui-labeledElement-label {
-  color: #000;
-}
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  color: #333;
-}
-.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  color: #087ecc;
-}
-.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  color: #76ab36;
-}
-.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-destructive > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  color: #d45353;
-}
-.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  color: #ccc;
-}
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button {
-  margin: 0.1em 0;
-  padding: 0.2em 0.8em;
-  border-radius: 0.3em;
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
-  border: 1px #c9c9c9 solid;
-  -webkit-transition: border-color 100ms ease-in-out;
-  -moz-transition: border-color 100ms ease-in-out;
-  -ms-transition: border-color 100ms ease-in-out;
-  -o-transition: border-color 100ms ease-in-out;
-  transition: border-color 100ms ease-in-out;
-  background: #eeeeee;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
-  background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
-}
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button:focus {
-  border-color: #aaa;
-}
-.oo-ui-buttonedElement-framed.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button {
-  box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
-  color: black;
-  border-color: #c9c9c9;
-  background: #eeeeee;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
-  background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
-}
-.oo-ui-buttonedElement-framed.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  margin-left: -0.5em;
-  margin-right: -0.5em;
-}
-.oo-ui-buttonedElement-framed.oo-ui-iconedElement.oo-ui-labeledElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  margin-left: -0.5em;
-  margin-right: 0.3em;
-}
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button {
-  border: solid 1px #a6cee1;
-  background: #cde7f4;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
-  background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-  background-image: -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-  background-image: -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-  background-image: -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-  background-image: linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-}
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button:focus {
-  border-color: #9dc2d4;
-}
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button {
-  border: solid 1px #a6cee1;
-  background: #cde7f4;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
-  background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-}
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button {
-  border: solid 1px #b8d892;
-  background: #daf0be;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a');
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f0fbe1), color-stop(100%, #c3e59a));
-  background-image: -webkit-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
-  background-image: -moz-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
-  background-image: -ms-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
-  background-image: -o-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
-  background-image: linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
-}
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button:focus {
-  border-color: #adcb89;
-}
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button {
-  border: solid 1px #b8d892;
-  background: #daf0be;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1');
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #c3e59a), color-stop(100%, #f0fbe1));
-  background-image: -webkit-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
-  background-image: -moz-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
-  background-image: -ms-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
-  background-image: -o-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
-  background-image: linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
-}
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-destructive > .oo-ui-buttonedElement-button {
-  color: #d45353;
-}
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button {
-  opacity: 0.5;
-  box-shadow: none;
-  color: #333;
-  background: #eee;
-  border-color: #ccc;
-}
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button:focus,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button:focus,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button:focus {
-  border-color: #ccc;
-  box-shadow: none;
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+       display: none;
+       position: absolute;
+       z-index: 4;
 }
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
-  padding: 1.5em;
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon {
+       background-repeat: no-repeat;
+       background-position: center center;
 }
-.oo-ui-bookletLayout-outlinePanel {
-  border-right: solid 1px #ddd;
+.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
+       display: block;
 }
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
-  box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
+.oo-ui-popupToolGroup-left > .oo-ui-toolGroup-tools {
+       left: 0;
 }
-
-.oo-ui-fieldLayout-disabled .oo-ui-labeledElement-label {
-  color: #ccc;
+.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
+       right: 0;
 }
-
-.oo-ui-fieldsetLayout {
-  border: none;
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+       display: inline-block;
+       vertical-align: middle;
 }
-.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label {
-  font-size: 1.5em;
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+       display: inline-table;
+       vertical-align: middle;
+       width: 100%;
+       margin-right: -2.5em;
 }
-
-.oo-ui-panelLayout-padded {
-  padding: 1.25em;
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       display: table-cell;
 }
-
-.oo-ui-barToolGroup .oo-ui-tool {
-  margin: -1px 0 -1px -1px;
-  border: solid 1px transparent;
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text {
+       width: 100%;
 }
-.oo-ui-barToolGroup .oo-ui-tool:first-child {
-  border-top-left-radius: 0.25em;
-  border-bottom-left-radius: 0.25em;
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       text-align: right;
+       padding-right: 2.5em;
 }
-.oo-ui-barToolGroup .oo-ui-tool:last-child {
-  margin-right: -1px;
-  border-top-right-radius: 0.25em;
-  border-bottom-right-radius: 0.25em;
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel:not(:empty) {
+       padding-left: 3em;
 }
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 0.8;
+.oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
+       min-width: 3.5em;
 }
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover {
-  border-color: rgba(0, 0, 0, 0.2);
+.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-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled {
-  border-color: rgba(0, 0, 0, 0.2);
-  box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
-  background: #f8fbfd;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
-  background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
+       right: 0;
 }
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
-  border-left-color: rgba(0, 0, 0, 0.1);
+.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+       left: 0.25em;
 }
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 0.2;
+.oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       line-height: 2.6em;
+       font-size: 0.8em;
+       margin: 0 1em;
 }
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 0.8;
+.oo-ui-popupToolGroup-header {
+       line-height: 2.6em;
+       font-size: 0.8em;
+       margin: 0 0.6em;
+       font-weight: bold;
 }
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 1;
+.oo-ui-popupToolGroup-active.oo-ui-widget-enabled {
+       border-bottom-left-radius: 0;
+       border-bottom-right-radius: 0;
+       box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+       background: #f8fbfd;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
+       background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:    -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:     -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:      -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:         linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+}
+.oo-ui-popupToolGroup.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin-left: 3em;
+}
+.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin-right: 2.25em;
 }
-.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 0.2;
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+       top: 2em;
+       margin: 0 -1px;
+       border: solid 1px #cccccc;
+       background-color: white;
+       box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25);
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+       height: 2em;
+       width: 2em;
+       margin-right: 0.25em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+       line-height: 2em;
+       font-size: 0.8em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       color: #888888;
+}
+.oo-ui-listToolGroup .oo-ui-tool {
+       display: inline-block;
+       width: 100%;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-listToolGroup .oo-ui-tool-link {
+       display: block;
+       cursor: pointer;
+       white-space: nowrap;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+       cursor: default;
+}
+.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
+       padding: 0.25em;
 }
-
 .oo-ui-listToolGroup.oo-ui-popupToolGroup-active {
-  border-color: rgba(0, 0, 0, 0.2);
+       border-color: rgba(0, 0, 0, 0.2);
 }
 .oo-ui-listToolGroup .oo-ui-tool {
-  border: solid 1px transparent;
-  margin: -1px 0;
+       border: solid 1px transparent;
+       margin: -1px 0;
+}
+.oo-ui-listToolGroup .oo-ui-tool-link {
+       padding-right: 0.5em;
 }
 .oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
-  border-color: rgba(0, 0, 0, 0.1);
-  box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
-  background: #f8fbfd;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
-  background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       border-color: rgba(0, 0, 0, 0.1);
+       box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+       background: #f8fbfd;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
+       background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:    -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:     -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:      -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:         linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
 }
 .oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
-  border-top-color: rgba(0, 0, 0, 0.1);
+       border-top-color: rgba(0, 0, 0, 0.1);
 }
 .oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
-  border-color: rgba(0, 0, 0, 0.2);
+       border-color: rgba(0, 0, 0, 0.2);
 }
 .oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
-  border-color: rgba(0, 0, 0, 0.2);
+       border-color: rgba(0, 0, 0, 0.2);
 }
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 0.8;
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+       opacity: 0.8;
 }
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 1;
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-icon {
+       opacity: 1;
 }
 .oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
-  color: #ccc;
+       color: #cccccc;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       color: #dddddd;
 }
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 0.2;
+.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: #ccc;
+       color: #cccccc;
 }
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator,
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon {
-  opacity: 0.2;
+.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-menuToolGroup {
-  border-color: rgba(0, 0, 0, 0.1);
+       border-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-menuToolGroup .oo-ui-tool {
+       display: block;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link {
+       display: block;
+       cursor: pointer;
+       white-space: nowrap;
+}
+.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 {
+       padding: 0.25em 0 0.25em 0;
 }
 .oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
-  border-color: rgba(0, 0, 0, 0.2);
+       border-color: rgba(0, 0, 0, 0.2);
 }
 .oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
-  border-color: rgba(0, 0, 0, 0.25);
+       border-color: rgba(0, 0, 0, 0.25);
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link {
+       padding: 0 1em 0 0.25em;
+       display: block;
+       cursor: pointer;
+       white-space: nowrap;
+}
+.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/apex/images/icons/check.svg);
 }
 .oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
-  background-color: #e1f3ff;
+       background-color: #e1f3ff;
 }
 .oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
-  color: #ccc;
+       color: #cccccc;
 }
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 0.2;
+.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: #ccc;
-  border-color: rgba(0, 0, 0, 0.05);
+       color: #cccccc;
+       border-color: rgba(0, 0, 0, 0.05);
 }
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator,
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon {
-  opacity: 0.2;
+.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-popupToolGroup-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
-  opacity: 0.8;
+.oo-ui-toolbar {
+       clear: both;
 }
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-  border: solid 1px #ccc;
-  background-color: white;
-  box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25);
+.oo-ui-toolbar-bar {
+       line-height: 1em;
 }
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled {
-  border-bottom-left-radius: 0;
-  border-bottom-right-radius: 0;
-  box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
-  background: #f8fbfd;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
-  background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+.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 1px #cccccc;
+       background: #f8fbfd;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#f1f7fb');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #f1f7fb));
+       background-image: -webkit-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+       background-image:    -moz-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+       background-image:     -ms-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+       background-image:      -o-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+       background-image:         linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+}
+.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
+       border: none;
+       background: none;
+}
+.oo-ui-toolbar-shadow {
+       background-image: /* @embed */ url(themes/apex/images/toolbar-shadow.png);
+       bottom: -9px;
+       height: 9px;
+       opacity: 0.125;
+       -webkit-transition: opacity 500ms ease-in-out;
+          -moz-transition: opacity 500ms ease-in-out;
+           -ms-transition: opacity 500ms ease-in-out;
+            -o-transition: opacity 500ms ease-in-out;
+               transition: opacity 500ms ease-in-out;
 }
-
 .oo-ui-optionWidget {
-  padding: 0.5em 2em 0.5em 3em;
+       position: relative;
+       display: block;
+       cursor: pointer;
+       padding: 0.5em 2em 0.5em 3em;
+       border: none;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+       cursor: default;
+}
+.oo-ui-optionWidget .oo-ui-labelElement-label {
+       display: block;
+       white-space: nowrap;
+       text-overflow: ellipsis;
+       overflow: hidden;
 }
 .oo-ui-optionWidget-highlighted {
-  background-color: #e1f3ff;
+       background-color: #e1f3ff;
+}
+.oo-ui-optionWidget .oo-ui-labelElement-label {
+       line-height: 1.5em;
 }
 .oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected {
-  background-color: #a7dcff;
+       background-color: #a7dcff;
 }
 .oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed {
-  background-color: #a7dcff;
+       background-color: #a7dcff;
 }
 .oo-ui-optionWidget.oo-ui-widget-disabled {
-  color: #ccc;
+       color: #cccccc;
 }
-
-.oo-ui-menuWidget {
-  background: #fff;
-  margin-top: -1px;
-  border: solid 1px #ccc;
-  border-radius: 0 0 0.25em 0.25em;
-  box-shadow: 0 0.15em 1em 0 rgba(0, 0, 0, 0.2);
+.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-popupWidget-popup {
-  border: solid 1px #ccc;
-  border-radius: 0.25em;
-  background-color: #fff;
-  box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2);
+.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-popupWidget-anchored .oo-ui-popupWidget-anchor {
-  background-image: /* @embed */ url(images/anchor.svg);
-  width: 15px;
-  height: 8px;
-  margin-left: -7px;
+.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
+       left: 0.5em;
 }
-.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-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
+       right: 0.5em;
 }
-.oo-ui-popupWidget-body {
-  box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
+.oo-ui-buttonSelectWidget {
+       display: inline-block;
+       white-space: nowrap;
+       border-radius: 0.3em;
 }
-
-.oo-ui-buttonGroupWidget {
-  display: inline-block;
-  white-space: nowrap;
+.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: 0.3em;
+       border-top-left-radius: 0.3em;
+       margin-left: 0;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
+       border-bottom-right-radius: 0.3em;
+       border-top-right-radius: 0.3em;
 }
-
 .oo-ui-buttonOptionWidget {
-  padding: 0;
+       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;
+       background-color: transparent;
+}
+.oo-ui-labelWidget {
+       display: inline-block;
+       padding: 0.5em 0;
+}
+.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;
+       opacity: 0.8;
+}
+.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;
+       opacity: 0.8;
+}
+.oo-ui-indicatorWidget.oo-ui-widget-disabled {
+       opacity: 0.2;
+}
+.oo-ui-buttonWidget {
+       display: inline-block;
+       vertical-align: middle;
 }
-
-.oo-ui-buttonSelectWidget {
-  border-radius: 0.3em;
+.oo-ui-buttonGroupWidget {
+       display: inline-block;
+       white-space: nowrap;
+       border-radius: 0.3em;
 }
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
-  border-radius: 0;
-  margin-left: -1px;
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+       border-radius: 0;
+       margin-bottom: -1px;
+       margin-left: -1px;
 }
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonedElement-button {
-  border-bottom-left-radius: 0.3em;
-  border-top-left-radius: 0.3em;
-  margin-left: 0;
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
+       border-bottom-left-radius: 0.3em;
+       border-top-left-radius: 0.3em;
+       margin-left: 0;
 }
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonedElement-button {
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
+       border-bottom-right-radius: 0.3em;
+       border-top-right-radius: 0.3em;
 }
-
-.oo-ui-comboBoxWidget-handle {
-  border: solid 1px rgba(0, 0, 0, 0.1);
-  border-radius: 0.25em;
+.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;
+       box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #dddddd;
+       border: solid 1px #cccccc;
+       background: #eeeeee;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
+       background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:    -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:     -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:      -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:         linear-gradient(top, #dddddd 0%, #ffffff 100%);
 }
-.oo-ui-comboBoxWidget-handle:hover {
-  border-color: rgba(0, 0, 0, 0.2);
+.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
+       cursor: default;
 }
-.oo-ui-comboBoxWidget.oo-ui-widget-disabled .oo-ui-textInputWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator,
-.oo-ui-comboBoxWidget-empty .oo-ui-textInputWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
-  cursor: default;
-  opacity: 0.2;
+.oo-ui-toggleSwitchWidget-grip {
+       position: absolute;
+       display: block;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
 }
-
-.oo-ui-inlineMenuWidget-handle {
-  border: solid 1px rgba(0, 0, 0, 0.1);
-  border-radius: 0.25em;
+.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-inlineMenuWidget-handle:hover {
-  border-color: rgba(0, 0, 0, 0.2);
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+       display: none;
 }
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
-  opacity: 0.8;
+.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
+       opacity: 0.5;
 }
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
-  color: #ccc;
-  text-shadow: 0 1px 1px #fff;
-  border-color: #ddd;
-  background-color: #f3f3f3;
+.oo-ui-toggleSwitchWidget-grip {
+       top: 0.25em;
+       left: 0.25em;
+       width: 1.5em;
+       height: 1.5em;
+       margin-top: -1px;
+       border-radius: 1em;
+       box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
+       border: 1px #c9c9c9 solid;
+       -webkit-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+          -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+           -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+            -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+               transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+       background: #eeeeee;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
+       background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:    -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:     -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:      -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:         linear-gradient(top, #ffffff 0%, #dddddd 100%);
 }
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator {
-  opacity: 0.2;
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover,
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip {
+       border-color: #aaaaaa;
 }
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  background-color: transparent;
+.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
+       border-radius: 1em;
+       box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
+       -webkit-transition: opacity 200ms ease-in-out;
+          -moz-transition: opacity 200ms ease-in-out;
+           -ms-transition: opacity 200ms ease-in-out;
+            -o-transition: opacity 200ms ease-in-out;
+               transition: opacity 200ms ease-in-out;
+       background: #cde7f4;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
+       background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:    -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:     -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:      -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:         linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
 }
-.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted,
-.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
-  background-color: #e1f3ff;
+.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
+       opacity: 1;
 }
-
-.oo-ui-menuSectionItemWidget {
-  padding: 0.33em 0.75em;
-  color: #888;
+.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
+       left: 2.25em;
+       margin-left: -2px;
 }
-
-.oo-ui-outlineControlsWidget {
-  background-color: #fff;
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+       display: block;
+       opacity: 0;
+}
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
+       left: 0.25em;
+       margin-left: 0;
+}
+.oo-ui-progressBarWidget {
+       width: 100%;
+       max-width: 50em;
+       border: solid 1px #a6cee1;
+       border-radius: 0.25em;
+}
+.oo-ui-progressBarWidget-bar {
+       height: 1em;
+       border-right: solid 1px #a6cee1;
+       -webkit-transition: width 200ms;
+          -moz-transition: width 200ms;
+           -ms-transition: width 200ms;
+            -o-transition: width 200ms;
+               transition: width 200ms;
+       background: #cde7f4;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
+       background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:    -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:     -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:      -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:         linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+}
+.oo-ui-progressBarWidget.oo-ui-widget-disabled {
+       opacity: 0.6;
+}
+.oo-ui-actionWidget.oo-ui-pendingElement-pending {
+       background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
+}
+.oo-ui-popupWidget {
+       position: absolute;
+       /* @noflip */
+       left: 0;
 }
-.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
-  opacity: 0.2;
+.oo-ui-popupWidget-popup {
+       position: relative;
+       overflow: hidden;
+       z-index: 1;
 }
-
-.oo-ui-outlineItemWidget {
-  font-size: 1.1em;
+.oo-ui-popupWidget-anchor {
+       display: none;
+       z-index: 1;
 }
-.oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label {
-  padding-right: 1.5em;
+.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-outlineItemWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
-  opacity: 0.5;
+.oo-ui-popupWidget-body {
+       clear: both;
+       overflow: hidden;
 }
-.oo-ui-outlineItemWidget-level-0 {
-  padding-left: 3.5em;
+.oo-ui-popupWidget-popup {
+       border: solid 1px #cccccc;
+       border-radius: 0.25em;
+       background-color: #ffffff;
+       box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2);
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
+       margin-top: 7px;
+}
+.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: -8px;
+       left: -7px;
+       border-bottom-color: #aaaaaa;
+       border-width: 7px;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
+       bottom: -8px;
+       left: -6px;
+       border-bottom-color: #ffffff;
+       border-width: 6px;
 }
-.oo-ui-outlineItemWidget-level-0 .oo-ui-iconedElement-icon {
-  left: 1em;
+.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-outlineItemWidget-level-1 {
-  padding-left: 5em;
+.oo-ui-popupWidget-head {
+       height: 2.5em;
 }
-.oo-ui-outlineItemWidget-level-1 .oo-ui-iconedElement-icon {
-  left: 2.5em;
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+       margin: 0.25em;
 }
-.oo-ui-outlineItemWidget-level-2 {
-  padding-left: 6.5em;
+.oo-ui-popupWidget-head .oo-ui-labelElement-label {
+       margin: 0.75em 1em;
 }
-.oo-ui-outlineItemWidget-level-2 .oo-ui-iconedElement-icon {
-  left: 4em;
+.oo-ui-popupWidget-body {
+       box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
 }
-.oo-ui-selectWidget-depressed .oo-ui-outlineItemWidget.oo-ui-optionWidget-selected {
-  background-color: #a7dcff;
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
+.oo-ui-popupWidget-body-padded {
+       padding: 0 1em;
 }
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-important {
-  font-weight: bold;
+.oo-ui-popupButtonWidget {
+       position: relative;
 }
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-placeholder {
-  font-style: italic;
+.oo-ui-popupButtonWidget .oo-ui-popupWidget {
+       position: absolute;
+       cursor: auto;
 }
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-iconedElement-icon {
-  opacity: 0.5;
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget {
+       left: 1em;
 }
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-labeledElement-label {
-  color: #777;
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+       left: -1em;
 }
-
-.oo-ui-searchWidget-query {
-  box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.2);
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget {
+       left: 1.25em;
+}
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+       left: -1.25em;
 }
-
 .oo-ui-textInputWidget {
-  width: 20em;
+       position: relative;
+       -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 {
-  padding: 0.5em;
-  font-size: 1em;
-  font-family: sans-serif;
-  background-color: #fff;
-  border: solid 1px #ccc;
-  box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
-  border-radius: 0.25em;
-  -webkit-transition: border-color 200ms, box-shadow 200ms;
-  -moz-transition: border-color 200ms, box-shadow 200ms;
-  -ms-transition: border-color 200ms, box-shadow 200ms;
-  -o-transition: border-color 200ms, box-shadow 200ms;
-  transition: border-color 200ms, box-shadow 200ms;
+       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 input,
+.oo-ui-textInputWidget textarea {
+       padding: 0.5em;
+       font-size: 1em;
+       font-family: sans-serif;
+       background-color: #ffffff;
+       border: solid 1px #cccccc;
+       box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #dddddd;
+       border-radius: 0.25em;
+       -webkit-transition: border-color 200ms, box-shadow 200ms;
+          -moz-transition: border-color 200ms, box-shadow 200ms;
+           -ms-transition: border-color 200ms, box-shadow 200ms;
+            -o-transition: border-color 200ms, box-shadow 200ms;
+               transition: border-color 200ms, box-shadow 200ms;
 }
 .oo-ui-textInputWidget-decorated input,
 .oo-ui-textInputWidget-decorated textarea {
-  padding-left: 2em;
+       padding-left: 2em;
 }
 .oo-ui-textInputWidget-icon {
-  width: 2em;
+       width: 2em;
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
-  outline: none;
-  border-color: #a7dcff;
-  box-shadow: 0 0 0.3em #a7dcff, 0 0 0 white;
+       outline: none;
+       border-color: #a7dcff;
+       box-shadow: 0 0 0.3em #a7dcff, 0 0 0 white;
+}
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
+       background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
 }
 .oo-ui-textInputWidget input[readonly],
 .oo-ui-textInputWidget textarea[readonly] {
-  color: #777;
-  text-shadow: 0 1px 1px #fff;
+       color: #777777;
 }
-.oo-ui-textInputWidget-pending input,
-.oo-ui-textInputWidget-pending textarea {
-  background-color: transparent;
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
+       background-color: transparent;
 }
 .oo-ui-textInputWidget.oo-ui-widget-disabled input,
 .oo-ui-textInputWidget.oo-ui-widget-disabled input:focus,
 .oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
 .oo-ui-textInputWidget.oo-ui-widget-disabled textarea:focus {
-  color: #ccc;
-  text-shadow: 0 1px 1px #fff;
-  border-color: #ddd;
-  background-color: #f3f3f3;
+       color: #cccccc;
+       text-shadow: 0 1px 1px #ffffff;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
 }
-.oo-ui-textInputWidget .oo-ui-iconedElement-icon,
-.oo-ui-textInputWidget .oo-ui-indicatedElement-indicator {
-  opacity: 0.8;
+.oo-ui-textInputWidget .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget .oo-ui-indicatorElement-indicator {
+       opacity: 0.8;
 }
-.oo-ui-textInputWidget.oo-ui-iconedElement input,
-.oo-ui-textInputWidget.oo-ui-iconedElement textarea {
-  padding-left: 2em;
+.oo-ui-textInputWidget.oo-ui-iconElement input,
+.oo-ui-textInputWidget.oo-ui-iconElement textarea {
+       padding-left: 2em;
 }
-.oo-ui-textInputWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
-  width: 2em;
-  background-position: right center;
+.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+       width: 2em;
+       background-position: right center;
 }
-.oo-ui-textInputWidget.oo-ui-indicatedElement input,
-.oo-ui-textInputWidget.oo-ui-indicatedElement textarea {
-  padding-right: 1.5em;
+.oo-ui-textInputWidget.oo-ui-indicatorElement input,
+.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
+       padding-right: 1.5em;
 }
-.oo-ui-textInputWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
-  width: 1.5em;
-  background-position: left center;
+.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       width: 1.5em;
+       background-position: left center;
+}
+.oo-ui-menuWidget {
+       position: absolute;
+       background: #ffffff;
+       margin-top: -1px;
+       border: solid 1px #cccccc;
+       border-radius: 0 0 0.25em 0.25em;
+       box-shadow: 0 0.15em 1em 0 rgba(0, 0, 0, 0.2);
+}
+.oo-ui-menuWidget input {
+       position: absolute;
+       width: 0;
+       height: 0;
+       overflow: hidden;
+       opacity: 0;
+}
+.oo-ui-menuItemWidget {
+       position: relative;
+}
+.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
+       display: none;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
+       background-color: transparent;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
+       display: block;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
+       background-color: transparent;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted,
+.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
+       background-color: #e1f3ff;
+}
+.oo-ui-menuSectionItemWidget {
+       cursor: default;
+       padding: 0.33em 0.75em;
+       color: #888888;
+}
+.oo-ui-dropdownWidget {
+       position: relative;
+       display: inline-block;
+       margin: 0.25em 0;
+       width: 100%;
+       max-width: 50em;
+}
+.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-menuWidget {
+       z-index: 1;
+       width: 100%;
+}
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
+       cursor: default;
+}
+.oo-ui-dropdownWidget-handle {
+       height: 2.5em;
+       border: solid 1px rgba(0, 0, 0, 0.1);
+       border-radius: 0.25em;
+}
+.oo-ui-dropdownWidget-handle:hover {
+       border-color: rgba(0, 0, 0, 0.2);
+}
+.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 0.5em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
+       top: 0;
+       width: 2.5em;
+       height: 2.5em;
+       opacity: 0.8;
+}
+.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-outlineItemWidget {
+       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-outlineItemWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
+       padding-right: 1.5em;
+}
+.oo-ui-outlineItemWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       opacity: 0.5;
+}
+.oo-ui-outlineItemWidget-level-0 {
+       padding-left: 3.5em;
+}
+.oo-ui-outlineItemWidget-level-0 .oo-ui-iconElement-icon {
+       left: 1em;
+}
+.oo-ui-outlineItemWidget-level-1 {
+       padding-left: 5em;
+}
+.oo-ui-outlineItemWidget-level-1 .oo-ui-iconElement-icon {
+       left: 2.5em;
+}
+.oo-ui-outlineItemWidget-level-2 {
+       padding-left: 6.5em;
+}
+.oo-ui-outlineItemWidget-level-2 .oo-ui-iconElement-icon {
+       left: 4em;
+}
+.oo-ui-selectWidget-depressed .oo-ui-outlineItemWidget.oo-ui-optionWidget-selected {
+       background-color: #a7dcff;
+       text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
+}
+.oo-ui-outlineItemWidget.oo-ui-flaggedElement-important {
+       font-weight: bold;
+}
+.oo-ui-outlineItemWidget.oo-ui-flaggedElement-placeholder {
+       font-style: italic;
+}
+.oo-ui-outlineItemWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
+       opacity: 0.5;
+}
+.oo-ui-outlineItemWidget.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;
+       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-outlineControlsWidget-items {
+       margin-left: 0;
+}
+.oo-ui-comboBoxWidget {
+       display: inline-block;
+       position: relative;
+       width: 100%;
+       max-width: 50em;
+}
+.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
+       width: 100%;
+       z-index: 1;
+}
+.oo-ui-comboBoxWidget-handle {
+       border: solid 1px rgba(0, 0, 0, 0.1);
+       border-radius: 0.25em;
+}
+.oo-ui-comboBoxWidget-handle:hover {
+       border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-comboBoxWidget.oo-ui-widget-disabled .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
+.oo-ui-comboBoxWidget-empty .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       cursor: default;
+       opacity: 0.2;
+}
+.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
+       margin-top: -3px;
+}
+.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;
+       box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.2);
+}
+.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-frame > iframe {
+       width: 100%;
+       height: 100%;
+       margin: 0;
+       padding: 0;
+}
+.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-color: transparent;
+       background-image: none;
+       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 {
+       box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
+}
+.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-content .oo-ui-window-body {
+       box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
+}
+.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 .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-primary:hover {
+       background-color: rgba(8, 126, 204, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
+       background-color: rgba(8, 126, 204, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .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/apex/images/textures/pending.gif);
+}
+.oo-ui-processDialog-content .oo-ui-window-body {
+       top: 3.4em;
+       box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
+}
+.oo-ui-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 {
+       padding-top: 0.75em;
+       padding-bottom: 0.75em;
+       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;
+       padding: 0 1em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
+       position: absolute;
+       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;
+       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-primary:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
+       background-color: rgba(8, 126, 204, 0.05);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
+       background-color: rgba(8, 126, 204, 0.1);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .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-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+       left: 0.5em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
+       padding-left: 2.25em;
+}
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+       right: 0.5em;
+}
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
+       padding-right: 2.25em;
+}
+.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-setup {
+       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-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame > iframe {
+       width: 100%;
+       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;
+       -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 {
+       opacity: 1;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
+       -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 #cccccc;
+       border-radius: 0.5em;
+       box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
 }
 
-.oo-ui-toggleSwitchWidget {
-  border-radius: 1em;
-  box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
-  border: solid 1px #ccc;
-  background: #eeeeee;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
-  background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
+.oo-ui-icon-add {
+       background-image: /* @embed */ url(themes/apex/images/icons/add.png);
 }
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
-  opacity: 0.5;
+.oo-ui-icon-advanced {
+       background-image: /* @embed */ url(themes/apex/images/icons/advanced.png);
 }
-.oo-ui-toggleSwitchWidget-grip {
-  border-radius: 1em;
-  box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
-  border: 1px #c9c9c9 solid;
-  background: #eeeeee;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
-  background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
+.oo-ui-icon-alert {
+       background-image: /* @embed */ url(themes/apex/images/icons/alert.png);
 }
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover,
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip {
-  border-color: #aaa;
+.oo-ui-icon-check {
+       background-image: /* @embed */ url(themes/apex/images/icons/check.png);
 }
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
-  border-radius: 1em;
-  box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
-  background: #cde7f4;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
-  background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+.oo-ui-icon-clear {
+       background-image: /* @embed */ url(themes/apex/images/icons/clear.png);
 }
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
-  opacity: 1;
+.oo-ui-icon-close {
+       background-image: /* @embed */ url(themes/apex/images/icons/close.png);
 }
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-  display: block;
-  opacity: 0;
+.oo-ui-icon-code {
+       background-image: /* @embed */ url(themes/apex/images/icons/code.png);
+}
+.oo-ui-icon-collapse {
+       background-image: /* @embed */ url(themes/apex/images/icons/collapse.png);
+}
+.oo-ui-icon-comment {
+       background-image: /* @embed */ url(themes/apex/images/icons/comment.png);
+}
+.oo-ui-icon-expand {
+       background-image: /* @embed */ url(themes/apex/images/icons/expand.png);
+}
+.oo-ui-icon-help {
+       background-image: /* @embed */ url(themes/apex/images/icons/help.png);
+}
+.oo-ui-icon-info {
+       background-image: /* @embed */ url(themes/apex/images/icons/info.png);
+}
+.oo-ui-icon-link {
+       background-image: /* @embed */ url(themes/apex/images/icons/link.png);
+}
+.oo-ui-icon-menu {
+       background-image: /* @embed */ url(themes/apex/images/icons/menu.png);
+}
+.oo-ui-icon-next {
+       background-image: /* @embed */ url(themes/apex/images/icons/move-ltr.png);
+}
+.oo-ui-icon-picture {
+       background-image: /* @embed */ url(themes/apex/images/icons/picture.png);
+}
+.oo-ui-icon-previous {
+       background-image: /* @embed */ url(themes/apex/images/icons/move-rtl.png);
+}
+.oo-ui-icon-redo {
+       background-image: /* @embed */ url(themes/apex/images/icons/arched-arrow-ltr.png);
+}
+.oo-ui-icon-remove {
+       background-image: /* @embed */ url(themes/apex/images/icons/remove.png);
+}
+.oo-ui-icon-search {
+       background-image: /* @embed */ url(themes/apex/images/icons/search.png);
+}
+.oo-ui-icon-settings {
+       background-image: /* @embed */ url(themes/apex/images/icons/settings.png);
+}
+.oo-ui-icon-tag {
+       background-image: /* @embed */ url(themes/apex/images/icons/tag.png);
+}
+.oo-ui-icon-undo {
+       background-image: /* @embed */ url(themes/apex/images/icons/arched-arrow-rtl.png);
+}
+.oo-ui-icon-window {
+       background-image: /* @embed */ url(themes/apex/images/icons/window.png);
+}
+.oo-ui-indicator-alert {
+       background-image: /* @embed */ url(themes/apex/images/indicators/alert.png);
+}
+.oo-ui-indicator-up {
+       background-image: /* @embed */ url(themes/apex/images/indicators/arrow-up.png);
+}
+.oo-ui-indicator-down {
+       background-image: /* @embed */ url(themes/apex/images/indicators/arrow-down.png);
+}
+.oo-ui-indicator-next {
+       background-image: /* @embed */ url(themes/apex/images/indicators/arrow-ltr.png);
+}
+.oo-ui-indicator-previous {
+       background-image: /* @embed */ url(themes/apex/images/indicators/arrow-rtl.png);
+}
+.oo-ui-indicator-required {
+       background-image: /* @embed */ url(themes/apex/images/indicators/required.png);
+}
+.oo-ui-texture-pending {
+       background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
+}
+.oo-ui-texture-transparency {
+       background-image: /* @embed */ url(themes/apex/images/textures/transparency.png);
 }
diff --git a/resources/lib/oojs-ui/oojs-ui-apex.js b/resources/lib/oojs-ui/oojs-ui-apex.js
new file mode 100644 (file)
index 0000000..a2edf03
--- /dev/null
@@ -0,0 +1,13 @@
+/*!
+ * OOjs UI v0.1.0-pre (12b66051ff)
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2014 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2014-11-06T19:08:33Z
+ */
+/* Instantiation */
+
+OO.ui.theme = new OO.ui.Theme();
diff --git a/resources/lib/oojs-ui/oojs-ui-apex.rtl.css b/resources/lib/oojs-ui/oojs-ui-apex.rtl.css
deleted file mode 100644 (file)
index 3cbb677..0000000
+++ /dev/null
@@ -1,1103 +0,0 @@
-/*!
- * OOjs UI v0.1.0
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-07-22T21:39:24Z
- */
-.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 {
-  top: 0;
-  z-index: 1;
-}
-
-.oo-ui-dialog-content > .oo-ui-window-body {
-  top: 0;
-  bottom: 0;
-  z-index: 2;
-  box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
-}
-
-.oo-ui-dialog-content > .oo-ui-window-foot {
-  bottom: 0;
-  z-index: 1;
-}
-
-.oo-ui-dialog-content > .oo-ui-window-overlay {
-  z-index: 3;
-}
-
-.oo-ui-frame-content {
-  font-family: sans-serif;
-  font-size: 0.8em;
-}
-
-.oo-ui-toolbar-bar {
-  background: #f8fbfd;
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f1f7fb));
-  background-image: -webkit-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
-  background-image: -moz-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
-  background-image: -ms-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
-  background-image: -o-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
-  background-image: linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
-  border-bottom: solid 1px #ccc;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#f1f7fb');
-}
-
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
-  background: none;
-  border: none;
-}
-
-.oo-ui-toolbar-shadow {
-  bottom: -9px;
-  height: 9px;
-  background-image: /* @embed */ url(images/toolbar-shadow.png);
-  opacity: 0.125;
-  -webkit-transition: opacity 500ms ease-in-out;
-     -moz-transition: opacity 500ms ease-in-out;
-      -ms-transition: opacity 500ms ease-in-out;
-       -o-transition: opacity 500ms ease-in-out;
-          transition: opacity 500ms ease-in-out;
-}
-
-.oo-ui-toolGroup {
-  border: solid 1px transparent;
-  border-radius: 0.25em;
-  -webkit-transition: border-color 300ms ease-in-out;
-     -moz-transition: border-color 300ms ease-in-out;
-      -ms-transition: border-color 300ms ease-in-out;
-       -o-transition: border-color 300ms ease-in-out;
-          transition: border-color 300ms ease-in-out;
-}
-
-.oo-ui-toolGroup.oo-ui-widget-enabled:hover {
-  border-color: rgba(0, 0, 0, 0.1);
-}
-
-.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
-  color: #000;
-}
-
-.oo-ui-window-content {
-  background: transparent;
-}
-
-.oo-ui-window-overlay {
-  font-family: sans-serif;
-  font-size: 1em;
-  line-height: 1.5em;
-}
-
-.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: #fff;
-  -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 {
-  opacity: 1;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
-  -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 #ccc;
-  border-radius: 0.5em;
-  box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
-}
-
-.oo-ui-messageDialog-content .oo-ui-window-body {
-  box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
-}
-
-.oo-ui-messageDialog-title,
-.oo-ui-messageDialog-message {
-  display: block;
-  padding-top: 0.5em;
-  text-align: center;
-}
-
-.oo-ui-messageDialog-title {
-  font-size: 1.5em;
-  line-height: 1em;
-  color: #000;
-}
-
-.oo-ui-messageDialog-message {
-  font-size: 0.9em;
-  line-height: 1.25em;
-  color: #666;
-}
-
-.oo-ui-messageDialog-message-verbose {
-  font-size: 1.1em;
-  line-height: 1.5em;
-  text-align: right;
-}
-
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
-  border-left: solid 1px #e5e5e5;
-}
-
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
-  border-left-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 .oo-ui-labeledElement-label {
-  padding: 0 2em;
-  line-height: 3.4em;
-  text-align: center;
-}
-
-.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-flaggableElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
-  font-weight: bold;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
-}
-
-.oo-ui-processDialog-content .oo-ui-window-head {
-  height: 3.4em;
-}
-
-.oo-ui-processDialog-content .oo-ui-window-body {
-  top: 3.4em;
-  box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
-}
-
-.oo-ui-processDialog-navigation {
-  position: relative;
-  height: 3.4em;
-  padding: 0 1em;
-}
-
-.oo-ui-processDialog-location {
-  height: 1.9em;
-  padding: 0.25em 0;
-  text-align: center;
-  cursor: default;
-}
-
-.oo-ui-processDialog-title {
-  font-weight: bold;
-  line-height: 1.9em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button {
-  min-width: 1.9em;
-  min-height: 1.9em;
-  padding-top: 0.75em;
-  padding-bottom: 0.75em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label {
-  padding: 0 1em;
-  line-height: 1.9em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon {
-  position: absolute;
-  margin-top: -0.125em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed {
-  margin: 0.75em 0.75em 0.75em 0;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
-  padding: 0;
-  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-buttonedElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed {
-  margin: 0.75em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
-  /* Adjust for border so text aligns with title */
-
-  margin: -1px;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
-  font-weight: bold;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
-  right: 0.5em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
-  padding-right: 2.25em;
-}
-
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
-  left: 0.5em;
-}
-
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
-  padding-left: 2.25em;
-}
-
-.oo-ui-processDialog > .oo-ui-window-frame {
-  min-height: 5em;
-}
-
-.oo-ui-processDialog-errors {
-  padding: 3em 3em 1.5em 3em;
-  text-align: center;
-  background-color: rgba(255, 255, 255, 0.9);
-}
-
-.oo-ui-processDialog-errors .oo-ui-buttonWidget {
-  margin: 2em 1em 2em 1em;
-}
-
-.oo-ui-processDialog-errors-title {
-  margin-bottom: 2em;
-  font-size: 1.5em;
-  color: #000;
-}
-
-.oo-ui-processDialog-error {
-  padding: 1em;
-  margin: 1em;
-  text-align: right;
-  background-color: #fff7f7;
-  border: solid 1px #ff9e9e;
-  border-radius: 0.25em;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button {
-  color: #333;
-}
-
-.oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  width: 1.9em;
-  height: 1.9em;
-  opacity: 0.8;
-}
-
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
-
-  /*.oo-ui-transition(opacity 200ms);*/
-
-}
-
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:hover > .oo-ui-iconedElement-icon,
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:focus > .oo-ui-iconedElement-icon {
-  opacity: 1;
-}
-
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:hover > .oo-ui-labeledElement-label,
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:focus > .oo-ui-labeledElement-label {
-  color: #000;
-}
-
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  color: #333;
-}
-
-.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  color: #087ecc;
-}
-
-.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  color: #76ab36;
-}
-
-.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-destructive > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  color: #d45353;
-}
-
-.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  opacity: 0.2;
-}
-
-.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  color: #ccc;
-}
-
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button {
-  padding: 0.2em 0.8em;
-  margin: 0.1em 0;
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
-  background: #eeeeee;
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
-  background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  border: 1px #c9c9c9 solid;
-  border-radius: 0.3em;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
-  -webkit-transition: border-color 100ms ease-in-out;
-     -moz-transition: border-color 100ms ease-in-out;
-      -ms-transition: border-color 100ms ease-in-out;
-       -o-transition: border-color 100ms ease-in-out;
-          transition: border-color 100ms ease-in-out;
-}
-
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button:focus {
-  border-color: #aaa;
-}
-
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
-  color: black;
-  background: #eeeeee;
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
-  background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  border-color: #c9c9c9;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
-  box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  margin-left: -0.5em;
-  margin-right: -0.5em;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-iconedElement.oo-ui-labeledElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  margin-left: 0.3em;
-  margin-right: -0.5em;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button {
-  background: #cde7f4;
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
-  background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-  background-image: -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-  background-image: -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-  background-image: -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-  background-image: linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-  border: solid 1px #a6cee1;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button:focus {
-  border-color: #9dc2d4;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
-  background: #cde7f4;
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
-  background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  border: solid 1px #a6cee1;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button {
-  background: #daf0be;
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f0fbe1), color-stop(100%, #c3e59a));
-  background-image: -webkit-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
-  background-image: -moz-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
-  background-image: -ms-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
-  background-image: -o-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
-  background-image: linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
-  border: solid 1px #b8d892;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a');
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button:focus {
-  border-color: #adcb89;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
-  background: #daf0be;
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #c3e59a), color-stop(100%, #f0fbe1));
-  background-image: -webkit-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
-  background-image: -moz-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
-  background-image: -ms-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
-  background-image: -o-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
-  background-image: linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
-  border: solid 1px #b8d892;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1');
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-destructive > .oo-ui-buttonedElement-button {
-  color: #d45353;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
-  color: #333;
-  background: #eee;
-  border-color: #ccc;
-  opacity: 0.5;
-  box-shadow: none;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active:hover,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed:hover,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button:focus,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active:focus,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed:focus {
-  border-color: #ccc;
-  box-shadow: none;
-}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
-  padding: 1.5em;
-}
-
-.oo-ui-bookletLayout-outlinePanel {
-  border-left: solid 1px #ddd;
-}
-
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
-  box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
-}
-
-.oo-ui-fieldLayout-disabled .oo-ui-labeledElement-label {
-  color: #ccc;
-}
-
-.oo-ui-fieldsetLayout {
-  border: none;
-}
-
-.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label {
-  font-size: 1.5em;
-}
-
-.oo-ui-panelLayout-padded {
-  padding: 1.25em;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool {
-  margin: -1px -1px -1px 0;
-  border: solid 1px transparent;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool:first-child {
-  border-bottom-right-radius: 0.25em;
-  border-top-right-radius: 0.25em;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool:last-child {
-  margin-left: -1px;
-  border-top-left-radius: 0.25em;
-  border-bottom-left-radius: 0.25em;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 0.8;
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover {
-  border-color: rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled {
-  background: #f8fbfd;
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
-  background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  border-color: rgba(0, 0, 0, 0.2);
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
-  box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
-  border-right-color: rgba(0, 0, 0, 0.1);
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 0.2;
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-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-iconedElement-icon {
-  opacity: 1;
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 0.2;
-}
-
-.oo-ui-listToolGroup.oo-ui-popupToolGroup-active {
-  border-color: rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-listToolGroup .oo-ui-tool {
-  margin: -1px 0;
-  border: solid 1px transparent;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
-  background: #f8fbfd;
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
-  background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  border-color: rgba(0, 0, 0, 0.1);
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
-  box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
-}
-
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
-  border-top-color: rgba(0, 0, 0, 0.1);
-}
-
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
-  border-color: rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
-  border-color: rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 0.8;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 1;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
-  color: #ccc;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 0.2;
-}
-
-.oo-ui-listToolGroup.oo-ui-widget-disabled {
-  color: #ccc;
-}
-
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator,
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon {
-  opacity: 0.2;
-}
-
-.oo-ui-menuToolGroup {
-  border-color: rgba(0, 0, 0, 0.1);
-}
-
-.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
-  border-color: rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
-  border-color: rgba(0, 0, 0, 0.25);
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
-  background-color: #e1f3ff;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
-  color: #ccc;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  opacity: 0.2;
-}
-
-.oo-ui-menuToolGroup.oo-ui-widget-disabled {
-  color: #ccc;
-  border-color: rgba(0, 0, 0, 0.05);
-}
-
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator,
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon {
-  opacity: 0.2;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
-  opacity: 0.8;
-}
-
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-  background-color: white;
-  border: solid 1px #ccc;
-  box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25);
-}
-
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled {
-  background: #f8fbfd;
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
-  background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  border-bottom-left-radius: 0;
-  border-bottom-right-radius: 0;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
-  box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
-}
-
-.oo-ui-optionWidget {
-  padding: 0.5em 3em 0.5em 2em;
-}
-
-.oo-ui-optionWidget-highlighted {
-  background-color: #e1f3ff;
-}
-
-.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected {
-  background-color: #a7dcff;
-}
-
-.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed {
-  background-color: #a7dcff;
-}
-
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-  color: #ccc;
-}
-
-.oo-ui-menuWidget {
-  margin-top: -1px;
-  background: #fff;
-  border: solid 1px #ccc;
-  border-radius: 0 0 0.25em 0.25em;
-  box-shadow: 0 0.15em 1em 0 rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-popupWidget-popup {
-  background-color: #fff;
-  border: solid 1px #ccc;
-  border-radius: 0.25em;
-  box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
-  width: 15px;
-  height: 8px;
-  margin-right: -7px;
-  background-image: /* @embed */ url(images/anchor.svg);
-}
-
-.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
-  -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out;
-     -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out;
-      -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out;
-       -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out;
-          transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out;
-}
-
-.oo-ui-popupWidget-body {
-  box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
-}
-
-.oo-ui-buttonGroupWidget {
-  display: inline-block;
-  white-space: nowrap;
-}
-
-.oo-ui-buttonOptionWidget {
-  padding: 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-buttonSelectWidget {
-  border-radius: 0.3em;
-}
-
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
-  margin-right: -1px;
-  border-radius: 0;
-}
-
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonedElement-button {
-  margin-right: 0;
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-}
-
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonedElement-button {
-  border-top-left-radius: 0.3em;
-  border-bottom-left-radius: 0.3em;
-}
-
-.oo-ui-inlineMenuWidget-handle {
-  border: solid 1px rgba(0, 0, 0, 0.1);
-  border-radius: 0.25em;
-}
-
-.oo-ui-inlineMenuWidget-handle:hover {
-  border-color: rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
-  opacity: 0.8;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
-  color: #ccc;
-  text-shadow: 0 1px 1px #fff;
-  background-color: #f3f3f3;
-  border-color: #ddd;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator {
-  opacity: 0.2;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  background-color: transparent;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted,
-.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
-  background-color: #e1f3ff;
-}
-
-.oo-ui-menuSectionItemWidget {
-  padding: 0.33em 0.75em;
-  color: #888;
-}
-
-.oo-ui-outlineControlsWidget {
-  background-color: #fff;
-}
-
-.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
-  opacity: 0.2;
-}
-
-.oo-ui-outlineItemWidget {
-  font-size: 1.1em;
-}
-
-.oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label {
-  padding-left: 1.5em;
-}
-
-.oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
-  opacity: 0.5;
-}
-
-.oo-ui-outlineItemWidget-level-0 {
-  padding-right: 3.5em;
-}
-
-.oo-ui-outlineItemWidget-level-0 .oo-ui-iconedElement-icon {
-  right: 1em;
-}
-
-.oo-ui-outlineItemWidget-level-1 {
-  padding-right: 5em;
-}
-
-.oo-ui-outlineItemWidget-level-1 .oo-ui-iconedElement-icon {
-  right: 2.5em;
-}
-
-.oo-ui-outlineItemWidget-level-2 {
-  padding-right: 6.5em;
-}
-
-.oo-ui-outlineItemWidget-level-2 .oo-ui-iconedElement-icon {
-  right: 4em;
-}
-
-.oo-ui-selectWidget-depressed .oo-ui-outlineItemWidget.oo-ui-optionWidget-selected {
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
-  background-color: #a7dcff;
-}
-
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-important {
-  font-weight: bold;
-}
-
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-placeholder {
-  font-style: italic;
-}
-
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-iconedElement-icon {
-  opacity: 0.5;
-}
-
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-labeledElement-label {
-  color: #777;
-}
-
-.oo-ui-searchWidget-query {
-  box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-textInputWidget {
-  width: 20em;
-}
-
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-  padding: 0.5em;
-  font-family: sans-serif;
-  font-size: 1em;
-  background-color: #fff;
-  border: solid 1px #ccc;
-  border-radius: 0.25em;
-  box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
-  -webkit-transition: border-color 200ms, box-shadow 200ms;
-     -moz-transition: border-color 200ms, box-shadow 200ms;
-      -ms-transition: border-color 200ms, box-shadow 200ms;
-       -o-transition: border-color 200ms, box-shadow 200ms;
-          transition: border-color 200ms, box-shadow 200ms;
-}
-
-.oo-ui-textInputWidget-decorated input,
-.oo-ui-textInputWidget-decorated textarea {
-  padding-right: 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 {
-  border-color: #a7dcff;
-  outline: none;
-  box-shadow: 0 0 0.3em #a7dcff, 0 0 0 white;
-}
-
-.oo-ui-textInputWidget input[readonly],
-.oo-ui-textInputWidget textarea[readonly] {
-  color: #777;
-  text-shadow: 0 1px 1px #fff;
-}
-
-.oo-ui-textInputWidget-pending input,
-.oo-ui-textInputWidget-pending textarea {
-  background-color: transparent;
-}
-
-.oo-ui-textInputWidget.oo-ui-widget-disabled input,
-.oo-ui-textInputWidget.oo-ui-widget-disabled input:focus,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea:focus {
-  color: #ccc;
-  text-shadow: 0 1px 1px #fff;
-  background-color: #f3f3f3;
-  border-color: #ddd;
-}
-
-.oo-ui-toggleSwitchWidget {
-  background: #eeeeee;
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
-  background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  border: solid 1px #ccc;
-  border-radius: 1em;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
-  box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
-}
-
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
-  opacity: 0.5;
-}
-
-.oo-ui-toggleSwitchWidget-grip {
-  background: #eeeeee;
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
-  background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  border: 1px #c9c9c9 solid;
-  border-radius: 1em;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
-  box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
-}
-
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover,
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip {
-  border-color: #aaa;
-}
-
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
-  background: #cde7f4;
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
-  background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  border-radius: 1em;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
-  box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
-}
-
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
-  opacity: 1;
-}
-
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-  display: block;
-  opacity: 0;
-}
\ No newline at end of file
diff --git a/resources/lib/oojs-ui/oojs-ui-apex.svg.css b/resources/lib/oojs-ui/oojs-ui-apex.svg.css
new file mode 100644 (file)
index 0000000..5bf6e69
--- /dev/null
@@ -0,0 +1,2144 @@
+/*!
+ * OOjs UI v0.1.0-pre (12b66051ff)
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2014 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2014-11-06T19:08:43Z
+ */
+/* @noflip */
+.oo-ui-rtl {
+       direction: rtl;
+}
+/* @noflip */
+.oo-ui-ltr {
+       direction: ltr;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button {
+       cursor: pointer;
+       display: inline-block;
+       vertical-align: middle;
+       font-family: 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-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-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 {
+       color: #333333;
+}
+.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 {
+       opacity: 0.8;
+       width: 1.9em;
+       height: 1.9em;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+       /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
+       /*.oo-ui-transition(opacity 200ms);*/
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus {
+       outline: none;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-iconElement-icon {
+       opacity: 1;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
+       color: #000000;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #333333;
+       margin-left: 0.25em;
+}
+.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #087ecc;
+}
+.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #76ab36;
+}
+.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #d45353;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+       opacity: 0.2;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #cccccc;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
+       margin: 0.1em 0;
+       padding: 0.2em 0.8em;
+       border-radius: 0.3em;
+       text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
+       border: 1px #c9c9c9 solid;
+       -webkit-transition: border-color 100ms ease-in-out;
+          -moz-transition: border-color 100ms ease-in-out;
+           -ms-transition: border-color 100ms ease-in-out;
+            -o-transition: border-color 100ms ease-in-out;
+               transition: border-color 100ms ease-in-out;
+       background: #eeeeee;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
+       background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:    -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:     -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:      -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:         linear-gradient(top, #ffffff 0%, #dddddd 100%);
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
+       border-color: #aaaaaa;
+       outline: none;
+}
+.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       line-height: 1.9em;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
+       color: black;
+       border-color: #c9c9c9;
+       background: #eeeeee;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
+       background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:    -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:     -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:      -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:         linear-gradient(top, #dddddd 0%, #ffffff 100%);
+}
+.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-flaggedElement-primary > .oo-ui-buttonElement-button {
+       border: solid 1px #a6cee1;
+       background: #cde7f4;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
+       background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:    -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:     -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:      -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:         linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:focus {
+       border-color: #9dc2d4;
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       border: solid 1px #a6cee1;
+       background: #cde7f4;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
+       background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:    -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:     -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:      -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:         linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
+       border: solid 1px #b8d892;
+       background: #daf0be;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f0fbe1), color-stop(100%, #c3e59a));
+       background-image: -webkit-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+       background-image:    -moz-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+       background-image:     -ms-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+       background-image:      -o-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+       background-image:         linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
+       border-color: #adcb89;
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       border: solid 1px #b8d892;
+       background: #daf0be;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #c3e59a), color-stop(100%, #f0fbe1));
+       background-image: -webkit-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+       background-image:    -moz-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+       background-image:     -ms-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+       background-image:      -o-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+       background-image:         linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
+       color: #d45353;
+}
+.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 {
+       opacity: 0.5;
+       -webkit-transform: translate3d(0, 0, 0);
+       box-shadow: none;
+       color: #333333;
+       background: #eeeeee;
+       border-color: #cccccc;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:focus,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:focus,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:focus {
+       border-color: #cccccc;
+       box-shadow: none;
+}
+.oo-ui-clippableElement-clippable {
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.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-outlineWidget {
+       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-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+       display: block;
+       float: left;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
+       display: block;
+       float: left;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+       text-align: right;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
+       display: inline-block;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+       z-index: 1;
+}
+.oo-ui-fieldLayout .oo-ui-fieldLayout-help {
+       float: right;
+}
+.oo-ui-fieldLayout .oo-ui-fieldLayout-help-content {
+       padding: 0.5em 0.75em;
+}
+.oo-ui-fieldLayout:last-child {
+       margin-bottom: 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+       padding-top: 0.5em;
+       margin-right: 5%;
+       width: 35%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
+       width: 60%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
+       padding: 0.75em 0.5em 0.5em 0.5em;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
+       padding: 0.5em 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
+       padding: 0.5em 0;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+       margin-top: 0.25em;
+}
+.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
+       color: #cccccc;
+}
+.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 {
+       margin-top: 2em;
+}
+.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
+       font-size: 1.5em;
+       margin-bottom: 0.5em;
+       padding: 0.25em 0;
+}
+.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: 2em;
+       height: 2em;
+}
+.oo-ui-gridLayout {
+       position: absolute;
+       top: 0;
+       left: 0;
+       right: 0;
+       bottom: 0;
+}
+.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 > .oo-ui-panelLayout {
+       display: none;
+}
+.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;
+       border-radius: 0.25em;
+       border: solid 1px transparent;
+       -webkit-transition: border-color 300ms ease-in-out;
+          -moz-transition: border-color 300ms ease-in-out;
+           -ms-transition: border-color 300ms ease-in-out;
+            -o-transition: border-color 300ms ease-in-out;
+               transition: border-color 300ms ease-in-out;
+}
+.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:hover {
+       border-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
+       color: #000000;
+}
+.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-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 {
+       margin: -1px 0 -1px -1px;
+       border: solid 1px transparent;
+}
+.oo-ui-barToolGroup .oo-ui-tool:first-child {
+       border-top-left-radius: 0.25em;
+       border-bottom-left-radius: 0.25em;
+}
+.oo-ui-barToolGroup .oo-ui-tool:last-child {
+       margin-right: -1px;
+       border-top-right-radius: 0.25em;
+       border-bottom-right-radius: 0.25em;
+}
+.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.oo-ui-widget-enabled:hover {
+       border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled {
+       border-color: rgba(0, 0, 0, 0.2);
+       box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+       background: #f8fbfd;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
+       background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:    -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:     -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:      -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:         linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
+       border-left-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-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 .oo-ui-iconElement-icon {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+       display: inline-table;
+       vertical-align: middle;
+       width: 100%;
+       margin-right: -2.5em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       display: table-cell;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text {
+       width: 100%;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       text-align: right;
+       padding-right: 2.5em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .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-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-handle .oo-ui-labelElement-label {
+       line-height: 2.6em;
+       font-size: 0.8em;
+       margin: 0 1em;
+}
+.oo-ui-popupToolGroup-header {
+       line-height: 2.6em;
+       font-size: 0.8em;
+       margin: 0 0.6em;
+       font-weight: bold;
+}
+.oo-ui-popupToolGroup-active.oo-ui-widget-enabled {
+       border-bottom-left-radius: 0;
+       border-bottom-right-radius: 0;
+       box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+       background: #f8fbfd;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
+       background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:    -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:     -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:      -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:         linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+}
+.oo-ui-popupToolGroup.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin-left: 3em;
+}
+.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin-right: 2.25em;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+       top: 2em;
+       margin: 0 -1px;
+       border: solid 1px #cccccc;
+       background-color: white;
+       box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25);
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+       height: 2em;
+       width: 2em;
+       margin-right: 0.25em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+       line-height: 2em;
+       font-size: 0.8em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       color: #888888;
+}
+.oo-ui-listToolGroup .oo-ui-tool {
+       display: inline-block;
+       width: 100%;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-listToolGroup .oo-ui-tool-link {
+       display: block;
+       cursor: pointer;
+       white-space: nowrap;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+       cursor: default;
+}
+.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
+       padding: 0.25em;
+}
+.oo-ui-listToolGroup.oo-ui-popupToolGroup-active {
+       border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-listToolGroup .oo-ui-tool {
+       border: solid 1px transparent;
+       margin: -1px 0;
+}
+.oo-ui-listToolGroup .oo-ui-tool-link {
+       padding-right: 0.5em;
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
+       border-color: rgba(0, 0, 0, 0.1);
+       box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+       background: #f8fbfd;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
+       background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:    -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:     -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:      -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:         linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
+       border-top-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
+       border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
+       border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+       opacity: 0.8;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-icon {
+       opacity: 1;
+}
+.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-title .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-menuToolGroup {
+       border-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-menuToolGroup .oo-ui-tool {
+       display: block;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link {
+       display: block;
+       cursor: pointer;
+       white-space: nowrap;
+}
+.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 {
+       padding: 0.25em 0 0.25em 0;
+}
+.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
+       border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
+       border-color: rgba(0, 0, 0, 0.25);
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link {
+       padding: 0 1em 0 0.25em;
+       display: block;
+       cursor: pointer;
+       white-space: nowrap;
+}
+.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/apex/images/icons/check.svg);
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
+       background-color: #e1f3ff;
+}
+.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: rgba(0, 0, 0, 0.05);
+}
+.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 1px #cccccc;
+       background: #f8fbfd;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#f1f7fb');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #f1f7fb));
+       background-image: -webkit-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+       background-image:    -moz-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+       background-image:     -ms-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+       background-image:      -o-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+       background-image:         linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+}
+.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
+       border: none;
+       background: none;
+}
+.oo-ui-toolbar-shadow {
+       background-image: /* @embed */ url(themes/apex/images/toolbar-shadow.png);
+       bottom: -9px;
+       height: 9px;
+       opacity: 0.125;
+       -webkit-transition: opacity 500ms ease-in-out;
+          -moz-transition: opacity 500ms ease-in-out;
+           -ms-transition: opacity 500ms ease-in-out;
+            -o-transition: opacity 500ms ease-in-out;
+               transition: opacity 500ms ease-in-out;
+}
+.oo-ui-optionWidget {
+       position: relative;
+       display: block;
+       cursor: pointer;
+       padding: 0.5em 2em 0.5em 3em;
+       border: none;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+       cursor: default;
+}
+.oo-ui-optionWidget .oo-ui-labelElement-label {
+       display: block;
+       white-space: nowrap;
+       text-overflow: ellipsis;
+       overflow: hidden;
+}
+.oo-ui-optionWidget-highlighted {
+       background-color: #e1f3ff;
+}
+.oo-ui-optionWidget .oo-ui-labelElement-label {
+       line-height: 1.5em;
+}
+.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected {
+       background-color: #a7dcff;
+}
+.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed {
+       background-color: #a7dcff;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+       color: #cccccc;
+}
+.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: 0.3em;
+}
+.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: 0.3em;
+       border-top-left-radius: 0.3em;
+       margin-left: 0;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
+       border-bottom-right-radius: 0.3em;
+       border-top-right-radius: 0.3em;
+}
+.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-labelWidget {
+       display: inline-block;
+       padding: 0.5em 0;
+}
+.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;
+       opacity: 0.8;
+}
+.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;
+       opacity: 0.8;
+}
+.oo-ui-indicatorWidget.oo-ui-widget-disabled {
+       opacity: 0.2;
+}
+.oo-ui-buttonWidget {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-buttonGroupWidget {
+       display: inline-block;
+       white-space: nowrap;
+       border-radius: 0.3em;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+       border-radius: 0;
+       margin-bottom: -1px;
+       margin-left: -1px;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
+       border-bottom-left-radius: 0.3em;
+       border-top-left-radius: 0.3em;
+       margin-left: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
+       border-bottom-right-radius: 0.3em;
+       border-top-right-radius: 0.3em;
+}
+.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;
+       box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #dddddd;
+       border: solid 1px #cccccc;
+       background: #eeeeee;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
+       background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:    -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:     -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:      -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:         linear-gradient(top, #dddddd 0%, #ffffff 100%);
+}
+.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.oo-ui-widget-disabled {
+       opacity: 0.5;
+}
+.oo-ui-toggleSwitchWidget-grip {
+       top: 0.25em;
+       left: 0.25em;
+       width: 1.5em;
+       height: 1.5em;
+       margin-top: -1px;
+       border-radius: 1em;
+       box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
+       border: 1px #c9c9c9 solid;
+       -webkit-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+          -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+           -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+            -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+               transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+       background: #eeeeee;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
+       background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:    -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:     -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:      -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:         linear-gradient(top, #ffffff 0%, #dddddd 100%);
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover,
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip {
+       border-color: #aaaaaa;
+}
+.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
+       border-radius: 1em;
+       box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
+       -webkit-transition: opacity 200ms ease-in-out;
+          -moz-transition: opacity 200ms ease-in-out;
+           -ms-transition: opacity 200ms ease-in-out;
+            -o-transition: opacity 200ms ease-in-out;
+               transition: opacity 200ms ease-in-out;
+       background: #cde7f4;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
+       background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:    -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:     -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:      -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:         linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+}
+.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
+       opacity: 1;
+}
+.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
+       left: 2.25em;
+       margin-left: -2px;
+}
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+       display: block;
+       opacity: 0;
+}
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
+       left: 0.25em;
+       margin-left: 0;
+}
+.oo-ui-progressBarWidget {
+       width: 100%;
+       max-width: 50em;
+       border: solid 1px #a6cee1;
+       border-radius: 0.25em;
+}
+.oo-ui-progressBarWidget-bar {
+       height: 1em;
+       border-right: solid 1px #a6cee1;
+       -webkit-transition: width 200ms;
+          -moz-transition: width 200ms;
+           -ms-transition: width 200ms;
+            -o-transition: width 200ms;
+               transition: width 200ms;
+       background: #cde7f4;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
+       background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:    -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:     -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:      -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:         linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+}
+.oo-ui-progressBarWidget.oo-ui-widget-disabled {
+       opacity: 0.6;
+}
+.oo-ui-actionWidget.oo-ui-pendingElement-pending {
+       background-image: /* @embed */ url(themes/apex/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 #cccccc;
+       border-radius: 0.25em;
+       background-color: #ffffff;
+       box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2);
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
+       margin-top: 7px;
+}
+.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: -8px;
+       left: -7px;
+       border-bottom-color: #aaaaaa;
+       border-width: 7px;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
+       bottom: -8px;
+       left: -6px;
+       border-bottom-color: #ffffff;
+       border-width: 6px;
+}
+.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
+       -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+          -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+           -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+            -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+               transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+}
+.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 {
+       box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
+}
+.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-frameless > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+       left: -1em;
+}
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget {
+       left: 1.25em;
+}
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+       left: -1.25em;
+}
+.oo-ui-textInputWidget {
+       position: relative;
+       -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 input,
+.oo-ui-textInputWidget textarea {
+       padding: 0.5em;
+       font-size: 1em;
+       font-family: sans-serif;
+       background-color: #ffffff;
+       border: solid 1px #cccccc;
+       box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #dddddd;
+       border-radius: 0.25em;
+       -webkit-transition: border-color 200ms, box-shadow 200ms;
+          -moz-transition: border-color 200ms, box-shadow 200ms;
+           -ms-transition: border-color 200ms, box-shadow 200ms;
+            -o-transition: border-color 200ms, box-shadow 200ms;
+               transition: border-color 200ms, box-shadow 200ms;
+}
+.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: #a7dcff;
+       box-shadow: 0 0 0.3em #a7dcff, 0 0 0 white;
+}
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
+       background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
+}
+.oo-ui-textInputWidget input[readonly],
+.oo-ui-textInputWidget textarea[readonly] {
+       color: #777777;
+}
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
+       background-color: transparent;
+}
+.oo-ui-textInputWidget.oo-ui-widget-disabled input,
+.oo-ui-textInputWidget.oo-ui-widget-disabled input:focus,
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea:focus {
+       color: #cccccc;
+       text-shadow: 0 1px 1px #ffffff;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
+}
+.oo-ui-textInputWidget .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget .oo-ui-indicatorElement-indicator {
+       opacity: 0.8;
+}
+.oo-ui-textInputWidget.oo-ui-iconElement input,
+.oo-ui-textInputWidget.oo-ui-iconElement textarea {
+       padding-left: 2em;
+}
+.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+       width: 2em;
+       background-position: right center;
+}
+.oo-ui-textInputWidget.oo-ui-indicatorElement input,
+.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
+       padding-right: 1.5em;
+}
+.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       width: 1.5em;
+       background-position: left center;
+}
+.oo-ui-menuWidget {
+       position: absolute;
+       background: #ffffff;
+       margin-top: -1px;
+       border: solid 1px #cccccc;
+       border-radius: 0 0 0.25em 0.25em;
+       box-shadow: 0 0.15em 1em 0 rgba(0, 0, 0, 0.2);
+}
+.oo-ui-menuWidget input {
+       position: absolute;
+       width: 0;
+       height: 0;
+       overflow: hidden;
+       opacity: 0;
+}
+.oo-ui-menuItemWidget {
+       position: relative;
+}
+.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
+       display: none;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
+       background-color: transparent;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
+       display: block;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
+       background-color: transparent;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted,
+.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
+       background-color: #e1f3ff;
+}
+.oo-ui-menuSectionItemWidget {
+       cursor: default;
+       padding: 0.33em 0.75em;
+       color: #888888;
+}
+.oo-ui-dropdownWidget {
+       position: relative;
+       display: inline-block;
+       margin: 0.25em 0;
+       width: 100%;
+       max-width: 50em;
+}
+.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-menuWidget {
+       z-index: 1;
+       width: 100%;
+}
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
+       cursor: default;
+}
+.oo-ui-dropdownWidget-handle {
+       height: 2.5em;
+       border: solid 1px rgba(0, 0, 0, 0.1);
+       border-radius: 0.25em;
+}
+.oo-ui-dropdownWidget-handle:hover {
+       border-color: rgba(0, 0, 0, 0.2);
+}
+.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 0.5em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
+       top: 0;
+       width: 2.5em;
+       height: 2.5em;
+       opacity: 0.8;
+}
+.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-outlineItemWidget {
+       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-outlineItemWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
+       padding-right: 1.5em;
+}
+.oo-ui-outlineItemWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       opacity: 0.5;
+}
+.oo-ui-outlineItemWidget-level-0 {
+       padding-left: 3.5em;
+}
+.oo-ui-outlineItemWidget-level-0 .oo-ui-iconElement-icon {
+       left: 1em;
+}
+.oo-ui-outlineItemWidget-level-1 {
+       padding-left: 5em;
+}
+.oo-ui-outlineItemWidget-level-1 .oo-ui-iconElement-icon {
+       left: 2.5em;
+}
+.oo-ui-outlineItemWidget-level-2 {
+       padding-left: 6.5em;
+}
+.oo-ui-outlineItemWidget-level-2 .oo-ui-iconElement-icon {
+       left: 4em;
+}
+.oo-ui-selectWidget-depressed .oo-ui-outlineItemWidget.oo-ui-optionWidget-selected {
+       background-color: #a7dcff;
+       text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
+}
+.oo-ui-outlineItemWidget.oo-ui-flaggedElement-important {
+       font-weight: bold;
+}
+.oo-ui-outlineItemWidget.oo-ui-flaggedElement-placeholder {
+       font-style: italic;
+}
+.oo-ui-outlineItemWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
+       opacity: 0.5;
+}
+.oo-ui-outlineItemWidget.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;
+       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-outlineControlsWidget-items {
+       margin-left: 0;
+}
+.oo-ui-comboBoxWidget {
+       display: inline-block;
+       position: relative;
+       width: 100%;
+       max-width: 50em;
+}
+.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
+       width: 100%;
+       z-index: 1;
+}
+.oo-ui-comboBoxWidget-handle {
+       border: solid 1px rgba(0, 0, 0, 0.1);
+       border-radius: 0.25em;
+}
+.oo-ui-comboBoxWidget-handle:hover {
+       border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-comboBoxWidget.oo-ui-widget-disabled .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
+.oo-ui-comboBoxWidget-empty .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       cursor: default;
+       opacity: 0.2;
+}
+.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
+       margin-top: -3px;
+}
+.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;
+       box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.2);
+}
+.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-frame > iframe {
+       width: 100%;
+       height: 100%;
+       margin: 0;
+       padding: 0;
+}
+.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-color: transparent;
+       background-image: none;
+       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 {
+       box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
+}
+.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-content .oo-ui-window-body {
+       box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
+}
+.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 .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-primary:hover {
+       background-color: rgba(8, 126, 204, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
+       background-color: rgba(8, 126, 204, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .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/apex/images/textures/pending.gif);
+}
+.oo-ui-processDialog-content .oo-ui-window-body {
+       top: 3.4em;
+       box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
+}
+.oo-ui-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 {
+       padding-top: 0.75em;
+       padding-bottom: 0.75em;
+       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;
+       padding: 0 1em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
+       position: absolute;
+       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;
+       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-primary:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
+       background-color: rgba(8, 126, 204, 0.05);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
+       background-color: rgba(8, 126, 204, 0.1);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .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-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+       left: 0.5em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
+       padding-left: 2.25em;
+}
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+       right: 0.5em;
+}
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
+       padding-right: 2.25em;
+}
+.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-setup {
+       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-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame > iframe {
+       width: 100%;
+       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;
+       -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 {
+       opacity: 1;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
+       -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 #cccccc;
+       border-radius: 0.5em;
+       box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
+}
+
+.oo-ui-icon-add {
+       background-image: /* @embed */ url(themes/apex/images/icons/add.svg);
+}
+.oo-ui-icon-advanced {
+       background-image: /* @embed */ url(themes/apex/images/icons/advanced.svg);
+}
+.oo-ui-icon-alert {
+       background-image: /* @embed */ url(themes/apex/images/icons/alert.svg);
+}
+.oo-ui-icon-check {
+       background-image: /* @embed */ url(themes/apex/images/icons/check.svg);
+}
+.oo-ui-icon-clear {
+       background-image: /* @embed */ url(themes/apex/images/icons/clear.svg);
+}
+.oo-ui-icon-close {
+       background-image: /* @embed */ url(themes/apex/images/icons/close.svg);
+}
+.oo-ui-icon-code {
+       background-image: /* @embed */ url(themes/apex/images/icons/code.svg);
+}
+.oo-ui-icon-collapse {
+       background-image: /* @embed */ url(themes/apex/images/icons/collapse.svg);
+}
+.oo-ui-icon-comment {
+       background-image: /* @embed */ url(themes/apex/images/icons/comment.svg);
+}
+.oo-ui-icon-expand {
+       background-image: /* @embed */ url(themes/apex/images/icons/expand.svg);
+}
+.oo-ui-icon-help {
+       background-image: /* @embed */ url(themes/apex/images/icons/help.svg);
+}
+.oo-ui-icon-info {
+       background-image: /* @embed */ url(themes/apex/images/icons/info.svg);
+}
+.oo-ui-icon-link {
+       background-image: /* @embed */ url(themes/apex/images/icons/link.svg);
+}
+.oo-ui-icon-menu {
+       background-image: /* @embed */ url(themes/apex/images/icons/menu.svg);
+}
+.oo-ui-icon-next {
+       background-image: /* @embed */ url(themes/apex/images/icons/move-ltr.svg);
+}
+.oo-ui-icon-picture {
+       background-image: /* @embed */ url(themes/apex/images/icons/picture.svg);
+}
+.oo-ui-icon-previous {
+       background-image: /* @embed */ url(themes/apex/images/icons/move-rtl.svg);
+}
+.oo-ui-icon-redo {
+       background-image: /* @embed */ url(themes/apex/images/icons/arched-arrow-ltr.svg);
+}
+.oo-ui-icon-remove {
+       background-image: /* @embed */ url(themes/apex/images/icons/remove.svg);
+}
+.oo-ui-icon-search {
+       background-image: /* @embed */ url(themes/apex/images/icons/search.svg);
+}
+.oo-ui-icon-settings {
+       background-image: /* @embed */ url(themes/apex/images/icons/settings.svg);
+}
+.oo-ui-icon-tag {
+       background-image: /* @embed */ url(themes/apex/images/icons/tag.svg);
+}
+.oo-ui-icon-undo {
+       background-image: /* @embed */ url(themes/apex/images/icons/arched-arrow-rtl.svg);
+}
+.oo-ui-icon-window {
+       background-image: /* @embed */ url(themes/apex/images/icons/window.svg);
+}
+.oo-ui-indicator-alert {
+       background-image: /* @embed */ url(themes/apex/images/indicators/alert.svg);
+}
+.oo-ui-indicator-up {
+       background-image: /* @embed */ url(themes/apex/images/indicators/arrow-up.svg);
+}
+.oo-ui-indicator-down {
+       background-image: /* @embed */ url(themes/apex/images/indicators/arrow-down.svg);
+}
+.oo-ui-indicator-next {
+       background-image: /* @embed */ url(themes/apex/images/indicators/arrow-ltr.svg);
+}
+.oo-ui-indicator-previous {
+       background-image: /* @embed */ url(themes/apex/images/indicators/arrow-rtl.svg);
+}
+.oo-ui-indicator-required {
+       background-image: /* @embed */ url(themes/apex/images/indicators/required.svg);
+}
+.oo-ui-texture-pending {
+       background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
+}
+.oo-ui-texture-transparency {
+       background-image: /* @embed */ url(themes/apex/images/textures/transparency.svg);
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-mediawiki.css
new file mode 100644 (file)
index 0000000..90355a2
--- /dev/null
@@ -0,0 +1,2148 @@
+/*!
+ * OOjs UI v0.1.0-pre (12b66051ff)
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2014 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2014-11-06T19:08:43Z
+ */
+/* @noflip */
+.oo-ui-rtl {
+       direction: rtl;
+}
+/* @noflip */
+.oo-ui-ltr {
+       direction: ltr;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button {
+       cursor: pointer;
+       display: inline-block;
+       vertical-align: middle;
+       font-family: 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-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-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: 2.2em;
+       height: 2.2em;
+}
+.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.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #dddddd;
+}
+.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-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-active > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
+.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-primary > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
+       color: #598ad1;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #777777;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #015ccc;
+}
+.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-active > .oo-ui-buttonElement-button > .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;
+}
+.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-active > .oo-ui-buttonElement-button > .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;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
+       margin: 0.1em 0;
+       padding: 0.3em 1.2em;
+       border-radius: 0.3em;
+       -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-buttonElement-button > .oo-ui-labelElement-label {
+       line-height: 2.2em;
+}
+.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: #dddddd;
+       background: #ffffff;
+       border: solid 1px #cdcdcd;
+}
+.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,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:focus {
+       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:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       background-color: #d0d0d0;
+       border-color: #d0d0d0;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button {
+       text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
+       color: #ffffff;
+       background-color: #0274ff;
+       border-color: #0274ff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:focus {
+       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-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       background-color: #015ccc;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
+       text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
+       color: #ffffff;
+       background-color: #00af89;
+       border-color: #00af89;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
+       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-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-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       background-color: #008c6d;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
+       text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
+       color: #ffffff;
+       background-color: #d11d13;
+       border-color: #d11d13;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
+       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-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-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       background-color: #a7170f;
+}
+.oo-ui-clippableElement-clippable {
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.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-outlineWidget {
+       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-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+       display: block;
+       float: left;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
+       display: block;
+       float: left;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+       text-align: right;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
+       display: inline-block;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+       z-index: 1;
+}
+.oo-ui-fieldLayout .oo-ui-fieldLayout-help {
+       float: right;
+}
+.oo-ui-fieldLayout .oo-ui-fieldLayout-help-content {
+       padding: 0.5em 0.75em;
+}
+.oo-ui-fieldLayout:last-child {
+       margin-bottom: 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+       padding-top: 0.5em;
+       margin-right: 5%;
+       width: 35%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
+       width: 60%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
+       padding: 0.75em 0.5em 0.5em 0.5em;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
+       padding: 0.5em 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
+       padding: 0.5em 0;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+       margin-top: 0.25em;
+}
+.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
+       color: #cccccc;
+}
+.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 {
+       margin-top: 2em;
+}
+.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
+       font-size: 1.5em;
+       margin-bottom: 0.5em;
+       padding: 0.25em 0;
+}
+.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: 2em;
+       height: 2em;
+}
+.oo-ui-gridLayout {
+       position: absolute;
+       top: 0;
+       left: 0;
+       right: 0;
+       bottom: 0;
+}
+.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 > .oo-ui-panelLayout {
+       display: none;
+}
+.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-title .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-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 .oo-ui-iconElement-icon {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+       display: inline-table;
+       vertical-align: middle;
+       width: 100%;
+       margin-right: -2.5em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       display: table-cell;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text {
+       width: 100%;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       text-align: right;
+       padding-right: 2.5em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .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-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-handle .oo-ui-labelElement-label {
+       line-height: 2.6em;
+       font-size: 0.8em;
+       margin: 0 1em;
+}
+.oo-ui-popupToolGroup-header {
+       line-height: 2.6em;
+       font-size: 0.8em;
+       margin: 0 0.6em;
+       font-weight: bold;
+}
+.oo-ui-popupToolGroup.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin-left: 3em;
+}
+.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin-right: 2.25em;
+}
+.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;
+       margin-right: 0.25em;
+}
+.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: inline-block;
+       width: 100%;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-listToolGroup .oo-ui-tool-link {
+       display: block;
+       cursor: pointer;
+       white-space: nowrap;
+}
+.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.25em;
+}
+.oo-ui-listToolGroup .oo-ui-tool-link {
+       padding-right: 0.5em;
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
+       background-color: #eeeeee;
+}
+.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-title .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;
+       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-menuToolGroup {
+       border: solid 1px #cccccc;
+       border-radius: 0.1em;
+}
+.oo-ui-menuToolGroup .oo-ui-tool {
+       display: block;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link {
+       display: block;
+       cursor: pointer;
+       white-space: nowrap;
+}
+.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;
+       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-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-link {
+       padding: 0 1em 0 0.25em;
+       display: block;
+       cursor: pointer;
+       white-space: nowrap;
+}
+.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: #e1f3ff;
+}
+.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 1px #cccccc;
+       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: 0.3em;
+}
+.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: 0.3em;
+       border-top-left-radius: 0.3em;
+       margin-left: 0;
+}
+.oo-ui-selectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
+       border-bottom-right-radius: 0.3em;
+       border-top-right-radius: 0.3em;
+}
+.oo-ui-optionWidget {
+       position: relative;
+       display: block;
+       cursor: pointer;
+       padding: 0.5em 2em 0.5em 3em;
+       border: none;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+       cursor: default;
+}
+.oo-ui-optionWidget .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 {
+       background-color: #a7dcff;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+       color: #cccccc;
+}
+.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: 0.3em;
+}
+.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: 0.3em;
+       border-top-left-radius: 0.3em;
+       margin-left: 0;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
+       border-bottom-right-radius: 0.3em;
+       border-top-right-radius: 0.3em;
+}
+.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: 2.2em;
+}
+.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       height: 2.2em;
+       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-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: 2.2em;
+       width: 2.2em;
+}
+.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: 2.2em;
+       width: 2.2em;
+}
+.oo-ui-indicatorWidget.oo-ui-widget-disabled {
+       opacity: 0.2;
+}
+.oo-ui-buttonWidget {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-buttonGroupWidget {
+       display: inline-block;
+       white-space: nowrap;
+       border-radius: 0.3em;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+       border-radius: 0;
+       margin-bottom: -1px;
+       margin-left: -1px;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
+       border-bottom-left-radius: 0.3em;
+       border-top-left-radius: 0.3em;
+       margin-left: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
+       border-bottom-right-radius: 0.3em;
+       border-top-right-radius: 0.3em;
+}
+.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;
+}
+.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-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 {
+       width: 100%;
+       max-width: 50em;
+       border: solid 1px #0274ff;
+       border-radius: 0.1em;
+}
+.oo-ui-progressBarWidget-bar {
+       height: 1em;
+       border-right: solid 1px #0274ff;
+       background: #0274ff;
+       -webkit-transition: width 200ms;
+          -moz-transition: width 200ms;
+           -ms-transition: width 200ms;
+            -o-transition: width 200ms;
+               transition: width 200ms;
+}
+.oo-ui-progressBarWidget.oo-ui-widget-disabled {
+       opacity: 0.2;
+}
+.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: 7px;
+}
+.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: -8px;
+       left: -13px;
+       border-bottom-color: #888888;
+       border-width: 13px;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
+       bottom: -8px;
+       left: -12px;
+       border-bottom-color: #ffffff;
+       border-width: 12px;
+}
+.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 {
+       box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
+}
+.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-frameless > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+       left: -1em;
+}
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget {
+       left: 1.75em;
+}
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+       left: -1.75em;
+}
+.oo-ui-checkboxInputWidget {
+       position: relative;
+       line-height: 1.6em;
+}
+.oo-ui-checkboxInputWidget * {
+       vertical-align: middle;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"] {
+       opacity: 0;
+       width: 1.6em;
+       height: 1.6em;
+       max-width: none;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"] + span {
+       cursor: pointer;
+       margin: 0 0.4em;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"] + span::before {
+       content: "";
+       position: absolute;
+       left: 0;
+       border-radius: 0.3em;
+       width: 1.6em;
+       height: 1.6em;
+       background-color: #ffffff;
+       border: 1px solid grey;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:checked + span::before {
+       background-image: /* @embed */ url(themes/mediawiki/images/icons/check-constructive.svg);
+       background-size: 1.6em, 1.6em;
+       background-repeat: no-repeat;
+       background-position: center top;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:active + span::after,
+.oo-ui-checkboxInputWidget input[type="checkbox"]:focus + span::after {
+       content: "";
+       position: absolute;
+       width: 1.6em;
+       height: 1.5em;
+       left: 1px;
+       border-bottom: solid 0.2em #d3d3d3;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span {
+       cursor: default;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span::before {
+       background-color: lightgrey;
+}
+.oo-ui-textInputWidget {
+       position: relative;
+       -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 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;
+       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-pendingElement-pending input,
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
+       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
+}
+.oo-ui-textInputWidget input[readonly],
+.oo-ui-textInputWidget textarea[readonly] {
+       color: #777777;
+       text-shadow: 0 1px 1px #ffffff;
+}
+.oo-ui-textInputWidget input[readonly]:focus,
+.oo-ui-textInputWidget textarea[readonly]:focus {
+       box-shadow: inset 0.4em 0 0 0 #cccccc;
+}
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
+       background-color: transparent;
+}
+.oo-ui-textInputWidget.oo-ui-widget-disabled input,
+.oo-ui-textInputWidget.oo-ui-widget-disabled input:focus,
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea:focus {
+       color: #cccccc;
+       text-shadow: 0 1px 1px #ffffff;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
+}
+.oo-ui-textInputWidget.oo-ui-iconElement input,
+.oo-ui-textInputWidget.oo-ui-iconElement textarea {
+       padding-left: 2.4em;
+}
+.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: 2.2em;
+}
+.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       width: 1.6em;
+       height: 100%;
+       background-position: left center;
+}
+.oo-ui-menuWidget {
+       position: absolute;
+       background: #ffffff;
+       margin-top: -1px;
+       border: solid 1px #aaaaaa;
+       border-radius: 0 0 0.1em 0.1em;
+       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-menuWidget input {
+       position: absolute;
+       width: 0;
+       height: 0;
+       overflow: hidden;
+       opacity: 0;
+}
+.oo-ui-menuItemWidget {
+       position: relative;
+}
+.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
+       display: none;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
+       background-color: transparent;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
+       display: block;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
+       background-color: transparent;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted {
+       background-color: #eeeeee;
+}
+.oo-ui-menuSectionItemWidget {
+       cursor: default;
+       padding: 0.33em 0.75em;
+       color: #888888;
+}
+.oo-ui-dropdownWidget {
+       position: relative;
+       display: inline-block;
+       margin: 0.25em 0;
+       width: 100%;
+       max-width: 50em;
+}
+.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-menuWidget {
+       z-index: 1;
+       width: 100%;
+}
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
+       cursor: default;
+}
+.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-outlineItemWidget {
+       position: relative;
+       cursor: pointer;
+       -webkit-touch-callout: none;
+       -webkit-user-select: none;
+          -moz-user-select: none;
+           -ms-user-select: none;
+               user-select: none;
+}
+.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-comboBoxWidget {
+       display: inline-block;
+       position: relative;
+       width: 100%;
+       max-width: 50em;
+}
+.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
+       width: 100%;
+       z-index: 1;
+}
+.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: 2.2em;
+}
+.oo-ui-comboBoxWidget .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       width: 2.2em;
+       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: 2.4em;
+       top: 1px;
+}
+.oo-ui-searchWidget-query .oo-ui-textInputWidget input {
+       border-width: 1px 0;
+}
+.oo-ui-searchWidget-results {
+       top: 2.2em;
+       bottom: 0.2em;
+       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-frame > iframe {
+       width: 100%;
+       height: 100%;
+       margin: 0;
+       padding: 0;
+}
+.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 {
+       box-shadow: 0 0 1px 0 #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 .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-primary:hover {
+       background-color: rgba(8, 126, 204, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
+       background-color: rgba(8, 126, 204, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .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;
+       box-shadow: 0 0 0 1px 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 {
+       padding-top: 0.75em;
+       padding-bottom: 0.75em;
+       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;
+       padding: 0 1em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
+       position: absolute;
+       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;
+       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-primary:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
+       background-color: rgba(8, 126, 204, 0.05);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
+       background-color: rgba(8, 126, 204, 0.1);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .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-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+       left: 0.5em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
+       padding-left: 2.25em;
+}
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+       right: 0.5em;
+}
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
+       padding-right: 2.25em;
+}
+.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-setup {
+       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-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame > iframe {
+       width: 100%;
+       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;
+       -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 {
+       opacity: 1;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
+       -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.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);
+}
+.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);
+}
+.oo-ui-icon-advanced {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-icon-alert {
+       background-image: /* @embed */ url(themes/mediawiki/images/icons/alert.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);
+}
+.oo-ui-icon-check {
+       background-image: /* @embed */ 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);
+}
+.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);
+}
+.oo-ui-icon-clear {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-icon-close {
+       background-image: /* @embed */ url(themes/mediawiki/images/icons/close.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);
+}
+.oo-ui-icon-code {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-icon-collapse {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-icon-comment {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-icon-expand {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-icon-help {
+       background-image: /* @embed */ url(themes/mediawiki/images/icons/help.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);
+}
+.oo-ui-icon-info {
+       background-image: /* @embed */ 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-menu {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-icon-next {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-icon-picture {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-icon-previous {
+       background-image: /* @embed */ 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-redo {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-icon-remove {
+       background-image: /* @embed */ 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);
+}
+.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);
+}
+.oo-ui-icon-search {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-icon-settings {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-icon-tag {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-icon-undo {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-icon-window {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-indicator-alert {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-indicator-up {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-indicator-down {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-indicator-next {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-indicator-previous {
+       background-image: /* @embed */ 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);
+}
+.oo-ui-indicator-required {
+       background-image: /* @embed */ 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);
+}
+.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.png);
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.js b/resources/lib/oojs-ui/oojs-ui-mediawiki.js
new file mode 100644 (file)
index 0000000..cd436e2
--- /dev/null
@@ -0,0 +1,68 @@
+/*!
+ * OOjs UI v0.1.0-pre (12b66051ff)
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2014 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2014-11-06T19:08:33Z
+ */
+/**
+ * @class
+ * @extends OO.ui.Theme
+ *
+ * @constructor
+ */
+OO.ui.MediaWikiTheme = function OoUiMediaWikiTheme() {
+       // Parent constructor
+       OO.ui.MediaWikiTheme.super.call( this );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.MediaWikiTheme, OO.ui.Theme );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MediaWikiTheme.prototype.getElementClasses = function ( element ) {
+       // Parent method
+       var variant,
+               variants = {
+                       invert: false,
+                       primary: false,
+                       constructive: false,
+                       destructive: false
+               },
+               // Parent method
+               classes = OO.ui.MediaWikiTheme.super.prototype.getElementClasses.call( this, element );
+
+       if ( element.supports( [ 'isFramed', 'isDisabled', 'hasFlag' ] ) ) {
+               if ( element.isFramed() && !element.isDisabled() ) {
+                       if (
+                               element.hasFlag( 'primary' ) ||
+                               element.hasFlag( 'constructive' ) ||
+                               element.hasFlag( 'destructive' )
+                       ) {
+                               variants.invert = true;
+                       }
+               } else {
+                       variants.primary = element.hasFlag( 'primary' );
+                       variants.constructive = element.hasFlag( 'constructive' );
+                       variants.destructive = element.hasFlag( 'destructive' );
+               }
+       }
+
+       for ( variant in variants ) {
+               classes[variants[variant] ? 'on' : 'off'].push( 'oo-ui-image-' + variant );
+       }
+
+       return classes;
+};
+
+/* Instantiation */
+
+OO.ui.theme = new OO.ui.MediaWikiTheme();
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css b/resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css
new file mode 100644 (file)
index 0000000..0d399f9
--- /dev/null
@@ -0,0 +1,2148 @@
+/*!
+ * OOjs UI v0.1.0-pre (12b66051ff)
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2014 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2014-11-06T19:08:43Z
+ */
+/* @noflip */
+.oo-ui-rtl {
+       direction: rtl;
+}
+/* @noflip */
+.oo-ui-ltr {
+       direction: ltr;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button {
+       cursor: pointer;
+       display: inline-block;
+       vertical-align: middle;
+       font-family: 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-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-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: 2.2em;
+       height: 2.2em;
+}
+.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.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #dddddd;
+}
+.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-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-active > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
+.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-primary > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
+       color: #598ad1;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #777777;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #015ccc;
+}
+.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-active > .oo-ui-buttonElement-button > .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;
+}
+.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-active > .oo-ui-buttonElement-button > .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;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
+       margin: 0.1em 0;
+       padding: 0.3em 1.2em;
+       border-radius: 0.3em;
+       -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-buttonElement-button > .oo-ui-labelElement-label {
+       line-height: 2.2em;
+}
+.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: #dddddd;
+       background: #ffffff;
+       border: solid 1px #cdcdcd;
+}
+.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,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:focus {
+       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:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       background-color: #d0d0d0;
+       border-color: #d0d0d0;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button {
+       text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
+       color: #ffffff;
+       background-color: #0274ff;
+       border-color: #0274ff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:focus {
+       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-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       background-color: #015ccc;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
+       text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
+       color: #ffffff;
+       background-color: #00af89;
+       border-color: #00af89;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
+       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-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-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       background-color: #008c6d;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
+       text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
+       color: #ffffff;
+       background-color: #d11d13;
+       border-color: #d11d13;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
+       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-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-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       background-color: #a7170f;
+}
+.oo-ui-clippableElement-clippable {
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.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-outlineWidget {
+       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-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+       display: block;
+       float: left;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
+       display: block;
+       float: left;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+       text-align: right;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
+       display: inline-block;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+       z-index: 1;
+}
+.oo-ui-fieldLayout .oo-ui-fieldLayout-help {
+       float: right;
+}
+.oo-ui-fieldLayout .oo-ui-fieldLayout-help-content {
+       padding: 0.5em 0.75em;
+}
+.oo-ui-fieldLayout:last-child {
+       margin-bottom: 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+       padding-top: 0.5em;
+       margin-right: 5%;
+       width: 35%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
+       width: 60%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
+       padding: 0.75em 0.5em 0.5em 0.5em;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
+       padding: 0.5em 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
+       padding: 0.5em 0;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+       margin-top: 0.25em;
+}
+.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
+       color: #cccccc;
+}
+.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 {
+       margin-top: 2em;
+}
+.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
+       font-size: 1.5em;
+       margin-bottom: 0.5em;
+       padding: 0.25em 0;
+}
+.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: 2em;
+       height: 2em;
+}
+.oo-ui-gridLayout {
+       position: absolute;
+       top: 0;
+       left: 0;
+       right: 0;
+       bottom: 0;
+}
+.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 > .oo-ui-panelLayout {
+       display: none;
+}
+.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-title .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-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 .oo-ui-iconElement-icon {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+       display: inline-table;
+       vertical-align: middle;
+       width: 100%;
+       margin-right: -2.5em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       display: table-cell;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text {
+       width: 100%;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       text-align: right;
+       padding-right: 2.5em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .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-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-handle .oo-ui-labelElement-label {
+       line-height: 2.6em;
+       font-size: 0.8em;
+       margin: 0 1em;
+}
+.oo-ui-popupToolGroup-header {
+       line-height: 2.6em;
+       font-size: 0.8em;
+       margin: 0 0.6em;
+       font-weight: bold;
+}
+.oo-ui-popupToolGroup.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin-left: 3em;
+}
+.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin-right: 2.25em;
+}
+.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;
+       margin-right: 0.25em;
+}
+.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: inline-block;
+       width: 100%;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-listToolGroup .oo-ui-tool-link {
+       display: block;
+       cursor: pointer;
+       white-space: nowrap;
+}
+.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.25em;
+}
+.oo-ui-listToolGroup .oo-ui-tool-link {
+       padding-right: 0.5em;
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
+       background-color: #eeeeee;
+}
+.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-title .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;
+       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-menuToolGroup {
+       border: solid 1px #cccccc;
+       border-radius: 0.1em;
+}
+.oo-ui-menuToolGroup .oo-ui-tool {
+       display: block;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link {
+       display: block;
+       cursor: pointer;
+       white-space: nowrap;
+}
+.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;
+       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-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-link {
+       padding: 0 1em 0 0.25em;
+       display: block;
+       cursor: pointer;
+       white-space: nowrap;
+}
+.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: #e1f3ff;
+}
+.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 1px #cccccc;
+       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: 0.3em;
+}
+.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: 0.3em;
+       border-top-left-radius: 0.3em;
+       margin-left: 0;
+}
+.oo-ui-selectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
+       border-bottom-right-radius: 0.3em;
+       border-top-right-radius: 0.3em;
+}
+.oo-ui-optionWidget {
+       position: relative;
+       display: block;
+       cursor: pointer;
+       padding: 0.5em 2em 0.5em 3em;
+       border: none;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+       cursor: default;
+}
+.oo-ui-optionWidget .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 {
+       background-color: #a7dcff;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+       color: #cccccc;
+}
+.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: 0.3em;
+}
+.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: 0.3em;
+       border-top-left-radius: 0.3em;
+       margin-left: 0;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
+       border-bottom-right-radius: 0.3em;
+       border-top-right-radius: 0.3em;
+}
+.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: 2.2em;
+}
+.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       height: 2.2em;
+       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-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: 2.2em;
+       width: 2.2em;
+}
+.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: 2.2em;
+       width: 2.2em;
+}
+.oo-ui-indicatorWidget.oo-ui-widget-disabled {
+       opacity: 0.2;
+}
+.oo-ui-buttonWidget {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-buttonGroupWidget {
+       display: inline-block;
+       white-space: nowrap;
+       border-radius: 0.3em;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+       border-radius: 0;
+       margin-bottom: -1px;
+       margin-left: -1px;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
+       border-bottom-left-radius: 0.3em;
+       border-top-left-radius: 0.3em;
+       margin-left: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
+       border-bottom-right-radius: 0.3em;
+       border-top-right-radius: 0.3em;
+}
+.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;
+}
+.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-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 {
+       width: 100%;
+       max-width: 50em;
+       border: solid 1px #0274ff;
+       border-radius: 0.1em;
+}
+.oo-ui-progressBarWidget-bar {
+       height: 1em;
+       border-right: solid 1px #0274ff;
+       background: #0274ff;
+       -webkit-transition: width 200ms;
+          -moz-transition: width 200ms;
+           -ms-transition: width 200ms;
+            -o-transition: width 200ms;
+               transition: width 200ms;
+}
+.oo-ui-progressBarWidget.oo-ui-widget-disabled {
+       opacity: 0.2;
+}
+.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: 7px;
+}
+.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: -8px;
+       left: -13px;
+       border-bottom-color: #888888;
+       border-width: 13px;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
+       bottom: -8px;
+       left: -12px;
+       border-bottom-color: #ffffff;
+       border-width: 12px;
+}
+.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 {
+       box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
+}
+.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-frameless > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+       left: -1em;
+}
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget {
+       left: 1.75em;
+}
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+       left: -1.75em;
+}
+.oo-ui-checkboxInputWidget {
+       position: relative;
+       line-height: 1.6em;
+}
+.oo-ui-checkboxInputWidget * {
+       vertical-align: middle;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"] {
+       opacity: 0;
+       width: 1.6em;
+       height: 1.6em;
+       max-width: none;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"] + span {
+       cursor: pointer;
+       margin: 0 0.4em;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"] + span::before {
+       content: "";
+       position: absolute;
+       left: 0;
+       border-radius: 0.3em;
+       width: 1.6em;
+       height: 1.6em;
+       background-color: #ffffff;
+       border: 1px solid grey;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:checked + span::before {
+       background-image: /* @embed */ url(themes/mediawiki/images/icons/check-constructive.svg);
+       background-size: 1.6em, 1.6em;
+       background-repeat: no-repeat;
+       background-position: center top;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:active + span::after,
+.oo-ui-checkboxInputWidget input[type="checkbox"]:focus + span::after {
+       content: "";
+       position: absolute;
+       width: 1.6em;
+       height: 1.5em;
+       left: 1px;
+       border-bottom: solid 0.2em #d3d3d3;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span {
+       cursor: default;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span::before {
+       background-color: lightgrey;
+}
+.oo-ui-textInputWidget {
+       position: relative;
+       -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 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;
+       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-pendingElement-pending input,
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
+       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
+}
+.oo-ui-textInputWidget input[readonly],
+.oo-ui-textInputWidget textarea[readonly] {
+       color: #777777;
+       text-shadow: 0 1px 1px #ffffff;
+}
+.oo-ui-textInputWidget input[readonly]:focus,
+.oo-ui-textInputWidget textarea[readonly]:focus {
+       box-shadow: inset 0.4em 0 0 0 #cccccc;
+}
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
+       background-color: transparent;
+}
+.oo-ui-textInputWidget.oo-ui-widget-disabled input,
+.oo-ui-textInputWidget.oo-ui-widget-disabled input:focus,
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea:focus {
+       color: #cccccc;
+       text-shadow: 0 1px 1px #ffffff;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
+}
+.oo-ui-textInputWidget.oo-ui-iconElement input,
+.oo-ui-textInputWidget.oo-ui-iconElement textarea {
+       padding-left: 2.4em;
+}
+.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: 2.2em;
+}
+.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       width: 1.6em;
+       height: 100%;
+       background-position: left center;
+}
+.oo-ui-menuWidget {
+       position: absolute;
+       background: #ffffff;
+       margin-top: -1px;
+       border: solid 1px #aaaaaa;
+       border-radius: 0 0 0.1em 0.1em;
+       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-menuWidget input {
+       position: absolute;
+       width: 0;
+       height: 0;
+       overflow: hidden;
+       opacity: 0;
+}
+.oo-ui-menuItemWidget {
+       position: relative;
+}
+.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
+       display: none;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
+       background-color: transparent;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
+       display: block;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
+       background-color: transparent;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted {
+       background-color: #eeeeee;
+}
+.oo-ui-menuSectionItemWidget {
+       cursor: default;
+       padding: 0.33em 0.75em;
+       color: #888888;
+}
+.oo-ui-dropdownWidget {
+       position: relative;
+       display: inline-block;
+       margin: 0.25em 0;
+       width: 100%;
+       max-width: 50em;
+}
+.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-menuWidget {
+       z-index: 1;
+       width: 100%;
+}
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
+       cursor: default;
+}
+.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-outlineItemWidget {
+       position: relative;
+       cursor: pointer;
+       -webkit-touch-callout: none;
+       -webkit-user-select: none;
+          -moz-user-select: none;
+           -ms-user-select: none;
+               user-select: none;
+}
+.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-comboBoxWidget {
+       display: inline-block;
+       position: relative;
+       width: 100%;
+       max-width: 50em;
+}
+.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
+       width: 100%;
+       z-index: 1;
+}
+.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: 2.2em;
+}
+.oo-ui-comboBoxWidget .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       width: 2.2em;
+       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: 2.4em;
+       top: 1px;
+}
+.oo-ui-searchWidget-query .oo-ui-textInputWidget input {
+       border-width: 1px 0;
+}
+.oo-ui-searchWidget-results {
+       top: 2.2em;
+       bottom: 0.2em;
+       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-frame > iframe {
+       width: 100%;
+       height: 100%;
+       margin: 0;
+       padding: 0;
+}
+.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 {
+       box-shadow: 0 0 1px 0 #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 .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-primary:hover {
+       background-color: rgba(8, 126, 204, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
+       background-color: rgba(8, 126, 204, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .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;
+       box-shadow: 0 0 0 1px 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 {
+       padding-top: 0.75em;
+       padding-bottom: 0.75em;
+       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;
+       padding: 0 1em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
+       position: absolute;
+       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;
+       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-primary:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
+       background-color: rgba(8, 126, 204, 0.05);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
+       background-color: rgba(8, 126, 204, 0.1);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .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-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+       left: 0.5em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
+       padding-left: 2.25em;
+}
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+       right: 0.5em;
+}
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
+       padding-right: 2.25em;
+}
+.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-setup {
+       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-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame > iframe {
+       width: 100%;
+       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;
+       -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 {
+       opacity: 1;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
+       -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-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-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);
+}
diff --git a/resources/lib/oojs-ui/oojs-ui.css b/resources/lib/oojs-ui/oojs-ui.css
deleted file mode 100644 (file)
index fa07706..0000000
+++ /dev/null
@@ -1,1159 +0,0 @@
-/*!
- * OOjs UI v0.1.0
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: Fri May 30 2014 12:12:37 GMT-0700 (PDT)
- */
-
-/* Textures */
-
-.oo-ui-texture-pending {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-
-.oo-ui-texture-transparency {
-  background-image: /* @embed */ url(images/textures/transparency.png);
-}
-
-/* RTL Definitions */
-
-/* @noflip */
-
-.oo-ui-rtl {
-  direction: rtl;
-}
-
-/* @noflip */
-
-.oo-ui-ltr {
-  direction: ltr;
-}
-
-.oo-ui-dialog {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  padding: 1em;
-  line-height: 1em;
-  /* Fix for strange opacity-related rendering issues.
-          CAUTION: -webkit-backface-visibility: hidden; is EXTREMELY DANGEROUS.
-          If applied to a VE surface directly, it will break selection of
-          FocusableNodes, and in the past it's caused transparent PNGs to
-          render as opaque black images. For some reason applying it to the dialog
-          wrapper in the main document fixes opacity-related behavior in the iframe
-          document, but doesn't break the surface inside the iframe. */
-
-  -webkit-backface-visibility: hidden;
-          backface-visibility: hidden;
-}
-
-.oo-ui-dialog > .oo-ui-window-frame {
-  position: fixed;
-  right: 0;
-  left: 0;
-  min-height: 12em;
-  margin: auto;
-  overflow: hidden;
-}
-
-.oo-ui-dialog > .oo-ui-window-frame .oo-ui-frame {
-  width: 100%;
-  height: 100%;
-}
-
-.oo-ui-dialog-content .oo-ui-window-foot .oo-ui-buttonedElement-framed {
-  float: left;
-}
-
-.oo-ui-dialog-content .oo-ui-window-foot .oo-ui-flaggableElement-primary,
-.oo-ui-dialog-content .oo-ui-window-foot .oo-ui-flaggableElement-constructive,
-.oo-ui-dialog-content .oo-ui-window-foot .oo-ui-flaggableElement-destructive {
-  float: right;
-}
-
-.oo-ui-dialog-content-footless .oo-ui-window-foot {
-  display: none;
-}
-
-.oo-ui-frame {
-  padding: 0;
-  margin: 0;
-}
-
-.oo-ui-frame-body {
-  padding: 0;
-  margin: 0;
-  background: none;
-}
-
-.oo-ui-frame-content:focus {
-  outline: none;
-}
-
-.oo-ui-toolbar {
-  clear: both;
-}
-
-.oo-ui-toolbar-bar {
-  line-height: 1em;
-}
-
-.oo-ui-toolbar-bottom .oo-ui-toolbar-bar {
-  position: absolute;
-}
-
-.oo-ui-toolbar-actions {
-  float: right;
-}
-
-.oo-ui-toolbar-tools {
-  float: left;
-}
-
-.oo-ui-toolbar-tools,
-.oo-ui-toolbar-actions,
-.oo-ui-toolbar-shadow {
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-toolbar-actions .oo-ui-popupWidget {
-  -webkit-user-select: all;
-     -moz-user-select: all;
-      -ms-user-select: all;
-          user-select: all;
-  -webkit-touch-callout: default;
-}
-
-.oo-ui-toolbar-shadow {
-  position: absolute;
-  width: 100%;
-  pointer-events: none;
-  background-position: left top;
-  background-repeat: repeat-x;
-}
-
-.oo-ui-toolGroup {
-  display: inline-block;
-  margin: 0.3em;
-  vertical-align: middle;
-}
-
-.oo-ui-toolGroup-empty {
-  display: none;
-}
-
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-window-head {
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-window-icon {
-  float: left;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-window-title {
-  float: left;
-  white-space: nowrap;
-  cursor: default;
-}
-
-.oo-ui-window-overlay {
-  position: absolute;
-  top: 0;
-  left: 0;
-}
-
-.oo-ui-buttonedElement .oo-ui-buttonedElement-button {
-  display: inline-block;
-  vertical-align: middle;
-  cursor: pointer;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-buttonedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  display: none;
-  margin-left: 0;
-}
-
-.oo-ui-buttonedElement .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator {
-  display: none;
-  margin-right: -0.75em;
-}
-
-.oo-ui-buttonedElement.oo-ui-widget-disabled .oo-ui-buttonedElement-button {
-  cursor: default;
-}
-
-.oo-ui-buttonedElement.oo-ui-indicatedElement .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  display: inline-block;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-buttonedElement-frameless {
-  position: relative;
-  display: inline-block;
-}
-
-.oo-ui-buttonedElement-frameless .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  display: inline-block;
-  margin-left: 0.25em;
-  vertical-align: middle;
-}
-
-.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
-  display: inline-block;
-  text-align: center;
-  vertical-align: top;
-}
-
-.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  display: inline-block;
-  line-height: 1.9em;
-  vertical-align: middle;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
-  cursor: default;
-}
-
-.oo-ui-clippableElement-clippable {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.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-outlineWidget {
-  position: absolute;
-  top: 0;
-  right: 0;
-  bottom: 3em;
-  left: 0;
-  overflow-y: auto;
-}
-
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
-  position: absolute;
-  right: 0;
-  bottom: 0;
-  left: 0;
-}
-
-.oo-ui-fieldLayout {
-  margin-bottom: 1em;
-}
-
-.oo-ui-fieldLayout:last-child {
-  margin-bottom: 0;
-}
-
-.oo-ui-fieldLayout:before,
-.oo-ui-fieldLayout:after {
-  display: table;
-  content: " ";
-}
-
-.oo-ui-fieldLayout:after {
-  clear: both;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labeledElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
-  display: block;
-  float: left;
-  width: 35%;
-  padding-top: 0.5em;
-  margin-right: 5%;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
-  display: block;
-  float: left;
-  width: 60%;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
-  text-align: right;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labeledElement-label {
-  display: inline-block;
-  padding: 0.75em 0.5em 0.5em 0.5em;
-  vertical-align: middle;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
-  display: inline-block;
-  padding: 0.5em 0;
-  vertical-align: middle;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labeledElement-label {
-  padding: 0.5em 0;
-}
-
-.oo-ui-fieldsetLayout {
-  position: relative;
-  padding: 0;
-  margin: 0;
-}
-
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
-  margin-top: 2em;
-}
-
-.oo-ui-fieldsetLayout-labeled {
-  margin-top: -0.75em;
-}
-
-.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label {
-  padding: 0.25em 0;
-  margin-bottom: 0.5em;
-}
-
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-labeledElement-label {
-  padding-left: 1.75em;
-  line-height: 1.33em;
-}
-
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-iconedElement-icon {
-  position: absolute;
-  top: 0.25em;
-  left: 0;
-  display: block;
-  width: 2em;
-  height: 2em;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-gridLayout {
-  position: absolute;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-}
-
-.oo-ui-labelWidget {
-  padding: 0.5em 0;
-}
-
-.oo-ui-panelLayout-scrollable {
-  overflow-y: auto;
-}
-
-.oo-ui-stackLayout > .oo-ui-panelLayout {
-  display: none;
-}
-
-.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
-  position: relative;
-  display: block;
-}
-
-.oo-ui-barToolGroup > .oo-ui-iconedElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labeledElement-label {
-  display: none;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool {
-  position: relative;
-  display: inline-block;
-  vertical-align: top;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link {
-  display: block;
-  height: 1.5em;
-  padding: 0.25em;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  display: block;
-  width: 1.5em;
-  height: 1.5em;
-}
-
-.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-listToolGroup .oo-ui-toolGroup-tools {
-  padding: 0.25em;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool {
-  display: inline-block;
-  width: 100%;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool-link {
-  display: block;
-  padding-right: 0.5em;
-  white-space: nowrap;
-  cursor: pointer;
-}
-
-.oo-ui-listToolGroup .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-tool {
-  display: block;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-link {
-  display: block;
-  padding: 0.25em 1em 0.25em 0.25em;
-  white-space: nowrap;
-  cursor: pointer;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  background-image: none;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  background-image: /* @embed */ url(images/icons/check.png);
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
-  cursor: default;
-}
-
-.oo-ui-popupToolGroup {
-  position: relative;
-  height: 2em;
-  min-width: 2.5em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-indicatedElement.oo-ui-iconedElement {
-  min-width: 3.5em;
-}
-
-.oo-ui-popupToolGroup-handle {
-  display: block;
-  cursor: pointer;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
-  position: absolute;
-  top: 0;
-  width: 2em;
-  height: 2em;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator {
-  right: 0;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
-  left: 0.25em;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
-  margin: 0 1em;
-  font-size: 0.8em;
-  line-height: 2.6em;
-}
-
-.oo-ui-popupToolGroup-header {
-  margin: 0 0.6em;
-  font-size: 0.8em;
-  font-weight: bold;
-  line-height: 2.6em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
-  cursor: default;
-}
-
-.oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
-  margin-left: 3em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
-  margin-right: 2.25em;
-}
-
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-  position: absolute;
-  top: 2em;
-  left: -1px;
-  z-index: 4;
-  display: none;
-}
-
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconedElement-icon {
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
-  display: block;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  display: inline-block;
-  width: 2em;
-  height: 2em;
-  margin-right: 0.25em;
-  vertical-align: middle;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-  display: inline-block;
-  font-size: 0.8em;
-  line-height: 2em;
-  vertical-align: middle;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
-  display: none;
-}
-
-.oo-ui-popupTool .oo-ui-popupWidget {
-  margin-left: 1.25em;
-  font-size: 0.8em;
-}
-
-.oo-ui-popupTool .oo-ui-popupWidget-popup,
-.oo-ui-popupTool .oo-ui-popupWidget-tail {
-  z-index: 4;
-}
-
-.oo-ui-iconWidget {
-  display: inline-block;
-  width: 1.9em;
-  height: 1.9em;
-  line-height: 2.5em;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-  opacity: 0.8;
-}
-
-.oo-ui-iconWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-
-.oo-ui-indicatorWidget {
-  display: inline-block;
-  width: 1.9em;
-  height: 1.9em;
-  line-height: 2.5em;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-  opacity: 0.8;
-}
-
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-
-.oo-ui-selectWidget {
-  padding: 0;
-  margin: 0;
-  list-style: none;
-}
-
-.oo-ui-optionWidget {
-  position: relative;
-  display: block;
-  margin: 0;
-  list-style: none;
-  cursor: pointer;
-  border: none;
-}
-
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-  cursor: default;
-}
-
-.oo-ui-optionWidget .oo-ui-labeledElement-label {
-  display: block;
-  overflow: hidden;
-  line-height: 1.5em;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.oo-ui-optionWidget .oo-ui-iconedElement-icon,
-.oo-ui-optionWidget .oo-ui-indicatedElement-indicator {
-  position: absolute;
-  top: 50%;
-  width: 2em;
-  height: 2em;
-  margin-top: -1em;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-optionWidget .oo-ui-iconedElement-icon {
-  left: 0.5em;
-}
-
-.oo-ui-optionWidget .oo-ui-indicatedElement-indicator {
-  right: 0.5em;
-}
-
-.oo-ui-menuWidget {
-  position: absolute;
-}
-
-.oo-ui-menuWidget input {
-  position: absolute;
-  width: 0;
-  height: 0;
-  overflow: hidden;
-  opacity: 0;
-}
-
-.oo-ui-popupWidget-popup {
-  position: absolute;
-  overflow: hidden;
-}
-
-.oo-ui-popupWidget-tail {
-  display: none;
-}
-
-.oo-ui-popupWidget-tailed .oo-ui-popupWidget-popup {
-  margin-top: 7px;
-}
-
-.oo-ui-popupWidget-tailed .oo-ui-popupWidget-tail {
-  position: absolute;
-  display: block;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-popupWidget-head {
-  height: 2.5em;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
-  float: right;
-  margin: 0.25em;
-}
-
-.oo-ui-popupWidget-head .oo-ui-labeledElement-label {
-  float: left;
-  margin: 0.75em 1em;
-  cursor: default;
-}
-
-.oo-ui-popupWidget-body {
-  clear: both;
-}
-
-.oo-ui-buttonGroupWidget {
-  border-radius: 0.3em;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
-  margin-bottom: -1px;
-  margin-left: -1px;
-  border-radius: 0;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:first-child .oo-ui-buttonedElement-button {
-  margin-left: 0;
-  border-bottom-left-radius: 0.3em;
-  border-top-left-radius: 0.3em;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:last-child .oo-ui-buttonedElement-button {
-  border-top-right-radius: 0.3em;
-  border-bottom-right-radius: 0.3em;
-}
-
-.oo-ui-buttonOptionWidget {
-  display: inline-block;
-  background-color: transparent;
-}
-
-.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
-  position: relative;
-  height: 1.9em;
-}
-
-.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
-  position: static;
-  display: inline-block;
-  height: 1.9em;
-  margin-top: 0;
-  vertical-align: middle;
-}
-
-.oo-ui-buttonSelectWidget {
-  display: inline-block;
-  white-space: nowrap;
-}
-
-.oo-ui-buttonWidget {
-  display: inline-block;
-  vertical-align: middle;
-}
-
-.oo-ui-inlineMenuWidget {
-  position: relative;
-  display: inline-block;
-  min-width: 20em;
-  margin: 0.25em 0;
-}
-
-.oo-ui-inlineMenuWidget-handle {
-  display: inline-block;
-  width: 100%;
-  height: 2.5em;
-  cursor: pointer;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
-  position: absolute;
-  top: 0;
-  width: 2.5em;
-  height: 2.5em;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator {
-  right: 0;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
-  left: 0.25em;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
-  margin: 0 0.5em;
-  line-height: 2.5em;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-iconedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
-  margin-left: 3em;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-indicatedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
-  margin-right: 2em;
-}
-
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
-  z-index: 1;
-  width: 100%;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
-  cursor: default;
-}
-
-.oo-ui-menuItemWidget {
-  position: relative;
-}
-
-.oo-ui-menuItemWidget .oo-ui-iconedElement-icon {
-  display: none;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  background-color: transparent;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconedElement-icon {
-  display: block;
-}
-
-.oo-ui-menuSectionItemWidget {
-  cursor: default;
-}
-
-.oo-ui-outlineControlsWidget {
-  height: 3em;
-}
-
-.oo-ui-outlineControlsWidget-adders,
-.oo-ui-outlineControlsWidget-movers {
-  float: left;
-  height: 2em;
-  padding: 0;
-  margin: 0.5em;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
-  float: left;
-  width: 1.5em;
-  height: 2em;
-  margin: 0.5em 0 0.5em 0.5em;
-  background-position: right center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-outlineControlsWidget-adders {
-  float: left;
-  margin-left: 0;
-}
-
-.oo-ui-outlineControlsWidget-adders .oo-ui-buttonWidget {
-  float: left;
-}
-
-.oo-ui-outlineControlsWidget-movers {
-  float: right;
-}
-
-.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
-  float: right;
-}
-
-.oo-ui-outlineItemWidget {
-  position: relative;
-  padding: 0.75em;
-  cursor: pointer;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-popupButtonWidget {
-  position: relative;
-}
-
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
-  position: absolute;
-  left: 1em;
-  cursor: auto;
-}
-
-.oo-ui-searchWidget-query {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 0;
-  height: 4em;
-  padding: 0 1em;
-}
-
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-  width: 100%;
-  margin: 0.75em 0;
-}
-
-.oo-ui-searchWidget-results {
-  position: absolute;
-  top: 4em;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  padding: 1em;
-  overflow-x: hidden;
-  overflow-y: auto;
-  line-height: 0;
-}
-
-.oo-ui-textInputWidget {
-  position: relative;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-  display: inline-block;
-  width: 100%;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-  resize: none;
-}
-
-.oo-ui-textInputWidget-icon {
-  position: absolute;
-  top: 0;
-  left: 0;
-  height: 100%;
-  background-position: right center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-toggleSwitchWidget {
-  position: relative;
-  display: inline-block;
-  width: 4em;
-  height: 2em;
-  overflow: hidden;
-  vertical-align: middle;
-  cursor: pointer;
-  -webkit-transform: translateZ(0);
-     -moz-transform: translateZ(0);
-      -ms-transform: translateZ(0);
-       -o-transform: translateZ(0);
-          transform: translateZ(0);
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
-  cursor: default;
-}
-
-.oo-ui-toggleSwitchWidget-grip {
-  position: absolute;
-  top: 0.25em;
-  left: 0.25em;
-  display: block;
-  width: 1.5em;
-  height: 1.5em;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-  -webkit-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-     -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-      -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-       -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-          transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-}
-
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
-  position: absolute;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  -webkit-transition: opacity 200ms ease-in-out;
-     -moz-transition: opacity 200ms ease-in-out;
-      -ms-transition: opacity 200ms ease-in-out;
-       -o-transition: opacity 200ms ease-in-out;
-          transition: opacity 200ms ease-in-out;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
-  left: 2.25em;
-  margin-left: -2px;
-}
-
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
-  left: 0.25em;
-  margin-left: 0;
-}
-
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-  display: none;
-}
-
-/* Icons */
-
-.oo-ui-icon-add-item {
-  background-image: /* @embed */ url(images/icons/add-item.png);
-}
-
-.oo-ui-icon-advanced {
-  background-image: /* @embed */ url(images/icons/advanced.png);
-}
-
-.oo-ui-icon-alert {
-  background-image: /* @embed */ url(images/icons/alert.png);
-}
-
-.oo-ui-icon-check {
-  background-image: /* @embed */ url(images/icons/check.png);
-}
-
-.oo-ui-icon-clear {
-  background-image: /* @embed */ url(images/icons/clear.png);
-}
-
-.oo-ui-icon-close {
-  background-image: /* @embed */ url(images/icons/close.png);
-}
-
-.oo-ui-icon-code {
-  background-image: /* @embed */ url(images/icons/code.png);
-}
-
-.oo-ui-icon-collapse {
-  background-image: /* @embed */ url(images/icons/collapse.png);
-}
-
-.oo-ui-icon-comment {
-  background-image: /* @embed */ url(images/icons/comment.png);
-}
-
-.oo-ui-icon-expand {
-  background-image: /* @embed */ url(images/icons/expand.png);
-}
-
-.oo-ui-icon-help {
-  background-image: /* @embed */ url(images/icons/help.png);
-}
-
-.oo-ui-icon-info {
-  background-image: /* @embed */ url(images/icons/info.png);
-}
-
-.oo-ui-icon-link {
-  background-image: /* @embed */ url(images/icons/link.png);
-}
-
-.oo-ui-icon-menu {
-  background-image: /* @embed */ url(images/icons/menu.png);
-}
-
-.oo-ui-icon-next {
-  background-image: /* @embed */ url(images/icons/move-ltr.png);
-}
-
-.oo-ui-icon-picture {
-  background-image: /* @embed */ url(images/icons/picture.png);
-}
-
-.oo-ui-icon-previous {
-  background-image: /* @embed */ url(images/icons/move-rtl.png);
-}
-
-.oo-ui-icon-redo {
-  background-image: /* @embed */ url(images/icons/arched-arrow-ltr.png);
-}
-
-.oo-ui-icon-remove {
-  background-image: /* @embed */ url(images/icons/remove.png);
-}
-
-.oo-ui-icon-search {
-  background-image: /* @embed */ url(images/icons/search.png);
-}
-
-.oo-ui-icon-settings {
-  background-image: /* @embed */ url(images/icons/settings.png);
-}
-
-.oo-ui-icon-tag {
-  background-image: /* @embed */ url(images/icons/tag.png);
-}
-
-.oo-ui-icon-undo {
-  background-image: /* @embed */ url(images/icons/arched-arrow-rtl.png);
-}
-
-.oo-ui-icon-window {
-  background-image: /* @embed */ url(images/icons/window.png);
-}
-
-/* Indicators */
-
-.oo-ui-indicator-alert {
-  background-image: /* @embed */ url(images/indicators/alert.png);
-}
-
-.oo-ui-indicator-down {
-  background-image: /* @embed */ url(images/indicators/down.png);
-}
-
-.oo-ui-indicator-required {
-  background-image: /* @embed */ url(images/indicators/required.png);
-}
-
-.oo-ui-indicator-up {
-  background-image: /* @embed */ url(images/indicators/up.png);
-}
\ No newline at end of file
index 13f4282..387df23 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (d6008381aa)
+ * OOjs UI v0.1.0-pre (12b66051ff)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-08-21T23:45:56Z
+ * Date: 2014-11-06T19:08:33Z
  */
 ( function ( OO ) {
 
@@ -111,6 +111,10 @@ OO.ui.getLocalValue = function ( obj, lang, fallback ) {
                'ooui-outline-control-remove': 'Remove item',
                // Label for the toolbar group that contains a list of all other available tools
                'ooui-toolbar-more': 'More',
+               // Label for the fake tool that expands the full list of tools in a toolbar group
+               'ooui-toolgroup-expand': 'More',
+               // Label for the fake tool that collapses the full list of tools in a toolbar group
+               'ooui-toolgroup-collapse': 'Fewer',
                // Default label for the accept button of a confirmation dialog
                'ooui-dialog-message-accept': 'OK',
                // Default label for the reject button of a confirmation dialog
@@ -119,8 +123,10 @@ OO.ui.getLocalValue = function ( obj, lang, fallback ) {
                'ooui-dialog-process-error': 'Something went wrong',
                // Label for process dialog dismiss error button, visible when describing errors
                'ooui-dialog-process-dismiss': 'Dismiss',
-               // Label for process dialog retry action button, visible when describing recoverable errors
-               'ooui-dialog-process-retry': 'Try again'
+               // Label for process dialog retry action button, visible when describing only recoverable errors
+               'ooui-dialog-process-retry': 'Try again',
+               // Label for process dialog retry action button, visible when describing only warnings
+               'ooui-dialog-process-continue': 'Continue'
        };
 
        /**
@@ -188,6 +194,90 @@ OO.ui.getLocalValue = function ( obj, lang, fallback ) {
 
 } )();
 
+/**
+ * Element that can be marked as pending.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.PendingElement = function OoUiPendingElement( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Properties
+       this.pending = 0;
+       this.$pending = null;
+
+       // Initialisation
+       this.setPendingElement( config.$pending || this.$element );
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.PendingElement );
+
+/* Methods */
+
+/**
+ * Set the pending element (and clean up any existing one).
+ *
+ * @param {jQuery} $pending The element to set to pending.
+ */
+OO.ui.PendingElement.prototype.setPendingElement = function ( $pending ) {
+       if ( this.$pending ) {
+               this.$pending.removeClass( 'oo-ui-pendingElement-pending' );
+       }
+
+       this.$pending = $pending;
+       if ( this.pending > 0 ) {
+               this.$pending.addClass( 'oo-ui-pendingElement-pending' );
+       }
+};
+
+/**
+ * Check if input is pending.
+ *
+ * @return {boolean}
+ */
+OO.ui.PendingElement.prototype.isPending = function () {
+       return !!this.pending;
+};
+
+/**
+ * Increase the pending stack.
+ *
+ * @chainable
+ */
+OO.ui.PendingElement.prototype.pushPending = function () {
+       if ( this.pending === 0 ) {
+               this.$pending.addClass( 'oo-ui-pendingElement-pending' );
+               this.updateThemeClasses();
+       }
+       this.pending++;
+
+       return this;
+};
+
+/**
+ * Reduce the pending stack.
+ *
+ * Clamped at zero.
+ *
+ * @chainable
+ */
+OO.ui.PendingElement.prototype.popPending = function () {
+       if ( this.pending === 1 ) {
+               this.$pending.removeClass( 'oo-ui-pendingElement-pending' );
+               this.updateThemeClasses();
+       }
+       this.pending = Math.max( 0, this.pending - 1 );
+
+       return this;
+};
+
 /**
  * List of actions.
  *
@@ -605,7 +695,7 @@ OO.ui.ActionSet.prototype.organize = function () {
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {Function} [$] jQuery for the frame the widget is in
- * @cfg {string[]} [classes] CSS class names
+ * @cfg {string[]} [classes] CSS class names to add
  * @cfg {string} [text] Text to insert
  * @cfg {jQuery} [$content] Content elements to append (after text)
  */
@@ -617,6 +707,8 @@ OO.ui.Element = function OoUiElement( config ) {
        this.$ = config.$ || OO.ui.Element.getJQuery( document );
        this.$element = this.$( this.$.context.createElement( this.getTagName() ) );
        this.elementGroup = null;
+       this.debouncedUpdateThemeClassesHandler = this.debouncedUpdateThemeClasses.bind( this );
+       this.updateThemeClassesPending = false;
 
        // Initialization
        if ( $.isArray( config.classes ) ) {
@@ -639,7 +731,7 @@ OO.initClass( OO.ui.Element );
 /**
  * HTML tag name.
  *
- * This may be ignored if getTagName is overridden.
+ * This may be ignored if #getTagName is overridden.
  *
  * @static
  * @inheritable
@@ -710,7 +802,7 @@ OO.ui.Element.getWindow = function ( obj ) {
  *
  * @static
  * @param {jQuery|HTMLElement|HTMLDocument|Window} obj Context to get the direction for
- * @return {string} Text direction, either `ltr` or `rtl`
+ * @return {string} Text direction, either 'ltr' or 'rtl'
  */
 OO.ui.Element.getDir = function ( obj ) {
        var isDoc, isWin;
@@ -777,15 +869,35 @@ OO.ui.Element.getFrameOffset = function ( from, to, offset ) {
 /**
  * Get the offset between two elements.
  *
+ * The two elements may be in a different frame, but in that case the frame $element is in must
+ * be contained in the frame $anchor is in.
+ *
  * @static
- * @param {jQuery} $from
- * @param {jQuery} $to
+ * @param {jQuery} $element Element whose position to get
+ * @param {jQuery} $anchor Element to get $element's position relative to
  * @return {Object} Translated position coordinates, containing top and left properties
  */
-OO.ui.Element.getRelativePosition = function ( $from, $to ) {
-       var from = $from.offset(),
-               to = $to.offset();
-       return { top: Math.round( from.top - to.top ), left: Math.round( from.left - to.left ) };
+OO.ui.Element.getRelativePosition = function ( $element, $anchor ) {
+       var iframe, iframePos,
+               pos = $element.offset(),
+               anchorPos = $anchor.offset(),
+               elementDocument = this.getDocument( $element ),
+               anchorDocument = this.getDocument( $anchor );
+
+       // If $element isn't in the same document as $anchor, traverse up
+       while ( elementDocument !== anchorDocument ) {
+               iframe = elementDocument.defaultView.frameElement;
+               if ( !iframe ) {
+                       throw new Error( '$element frame is not contained in $anchor frame' );
+               }
+               iframePos = $( iframe ).offset();
+               pos.left += iframePos.left;
+               pos.top += iframePos.top;
+               elementDocument = iframe.ownerDocument;
+       }
+       pos.left -= anchorPos.left;
+       pos.top -= anchorPos.top;
+       return pos;
 };
 
 /**
@@ -869,7 +981,7 @@ OO.ui.Element.getDimensions = function ( el ) {
  * @static
  * @param {HTMLElement} el Element to find scrollable container for
  * @param {string} [dimension] Dimension of scrolling to look for; `x`, `y` or omit for either
- * @return {HTMLElement|Window} Closest scrollable container
+ * @return {HTMLElement} Closest scrollable container
  */
 OO.ui.Element.getClosestScrollableContainer = function ( el, dimension ) {
        var i, val,
@@ -901,7 +1013,7 @@ OO.ui.Element.getClosestScrollableContainer = function ( el, dimension ) {
  *
  * @static
  * @param {HTMLElement} el Element to scroll into view
- * @param {Object} [config={}] Configuration config
+ * @param {Object} [config] Configuration options
  * @param {string} [config.duration] jQuery animation duration value
  * @param {string} [config.direction] Scroll in only one direction, e.g. 'x' or 'y', omit
  *  to scroll in both directions
@@ -967,8 +1079,79 @@ OO.ui.Element.scrollIntoView = function ( el, config ) {
        }
 };
 
+/**
+ * Bind a handler for an event on a DOM element.
+ *
+ * Used to be for working around a jQuery bug (jqbug.com/14180),
+ * but obsolete as of jQuery 1.11.0.
+ *
+ * @static
+ * @deprecated Use jQuery#on instead.
+ * @param {HTMLElement|jQuery} el DOM element
+ * @param {string} event Event to bind
+ * @param {Function} callback Callback to call when the event fires
+ */
+OO.ui.Element.onDOMEvent = function ( el, event, callback ) {
+       $( el ).on( event, callback );
+};
+
+/**
+ * Unbind a handler bound with #static-method-onDOMEvent.
+ *
+ * @deprecated Use jQuery#off instead.
+ * @static
+ * @param {HTMLElement|jQuery} el DOM element
+ * @param {string} event Event to unbind
+ * @param {Function} [callback] Callback to unbind
+ */
+OO.ui.Element.offDOMEvent = function ( el, event, callback ) {
+       $( el ).off( event, callback );
+};
+
 /* Methods */
 
+/**
+ * Check if element supports one or more methods.
+ *
+ * @param {string|string[]} methods Method or list of methods to check
+ * @return {boolean} All methods are supported
+ */
+OO.ui.Element.prototype.supports = function ( methods ) {
+       var i, len,
+               support = 0;
+
+       methods = $.isArray( methods ) ? methods : [ methods ];
+       for ( i = 0, len = methods.length; i < len; i++ ) {
+               if ( $.isFunction( this[methods[i]] ) ) {
+                       support++;
+               }
+       }
+
+       return methods.length === support;
+};
+
+/**
+ * Update the theme-provided classes.
+ *
+ * @localdoc This is called in element mixins and widget classes anytime state changes.
+ *   Updating is debounced, minimizing overhead of changing multiple attributes and
+ *   guaranteeing that theme updates do not occur within an element's constructor
+ */
+OO.ui.Element.prototype.updateThemeClasses = function () {
+       if ( !this.updateThemeClassesPending ) {
+               this.updateThemeClassesPending = true;
+               setTimeout( this.debouncedUpdateThemeClassesHandler );
+       }
+};
+
+/**
+ * @private
+ */
+OO.ui.Element.prototype.debouncedUpdateThemeClasses = function () {
+       OO.ui.theme.updateElementClasses( this );
+       this.updateThemeClassesPending = false;
+};
+
 /**
  * Get the HTML tag name.
  *
@@ -1036,7 +1219,7 @@ OO.ui.Element.prototype.setElementGroup = function ( group ) {
 /**
  * Scroll element into view.
  *
- * @param {Object} [config={}]
+ * @param {Object} [config] Configuration options
  */
 OO.ui.Element.prototype.scrollElementIntoView = function ( config ) {
        return OO.ui.Element.scrollIntoView( this.$element[0], config );
@@ -1064,37 +1247,6 @@ OO.ui.Element.prototype.offDOMEvent = function ( event, callback ) {
        OO.ui.Element.offDOMEvent( this.$element, event, callback );
 };
 
-( function () {
-       /**
-        * Bind a handler for an event on a DOM element.
-        *
-        * Used to be for working around a jQuery bug (jqbug.com/14180),
-        * but obsolete as of jQuery 1.11.0.
-        *
-        * @static
-        * @deprecated Use jQuery#on instead.
-        * @param {HTMLElement|jQuery} el DOM element
-        * @param {string} event Event to bind
-        * @param {Function} callback Callback to call when the event fires
-        */
-       OO.ui.Element.onDOMEvent = function ( el, event, callback ) {
-               $( el ).on( event, callback );
-       };
-
-       /**
-        * Unbind a handler bound with #static-method-onDOMEvent.
-        *
-        * @deprecated Use jQuery#off instead.
-        * @static
-        * @param {HTMLElement|jQuery} el DOM element
-        * @param {string} event Event to unbind
-        * @param {Function} [callback] Callback to unbind
-        */
-       OO.ui.Element.offDOMEvent = function ( el, event, callback ) {
-               $( el ).off( event, callback );
-       };
-}() );
-
 /**
  * Container for elements.
  *
@@ -1107,7 +1259,7 @@ OO.ui.Element.prototype.offDOMEvent = function ( event, callback ) {
  * @param {Object} [config] Configuration options
  */
 OO.ui.Layout = function OoUiLayout( config ) {
-       // Initialize config
+       // Configuration initialization
        config = config || {};
 
        // Parent constructor
@@ -1179,7 +1331,7 @@ OO.mixinClass( OO.ui.Widget, OO.EventEmitter );
 /**
  * Check if the widget is disabled.
  *
- * @param {boolean} Button is disabled
+ * @return {boolean} Button is disabled
  */
 OO.ui.Widget.prototype.isDisabled = function () {
        return this.disabled;
@@ -1211,6 +1363,7 @@ OO.ui.Widget.prototype.setDisabled = function ( disabled ) {
                this.$element.toggleClass( 'oo-ui-widget-disabled', isDisabled );
                this.$element.toggleClass( 'oo-ui-widget-enabled', !isDisabled );
                this.emit( 'disable', isDisabled );
+               this.updateThemeClasses();
        }
        this.wasDisabled = isDisabled;
 
@@ -1308,12 +1461,14 @@ OO.ui.Window = function OoUiWindow( config ) {
        this.loading = null;
        this.size = config.size || this.constructor.static.size;
        this.$frame = this.$( '<div>' );
+       this.$overlay = this.$( '<div>' );
 
        // Initialization
        this.$element
                .addClass( 'oo-ui-window' )
-               .append( this.$frame );
+               .append( this.$frame, this.$overlay );
        this.$frame.addClass( 'oo-ui-window-frame' );
+       this.$overlay.addClass( 'oo-ui-window-overlay' );
 
        // NOTE: Additional intitialization will occur when #setManager is called
 };
@@ -1323,13 +1478,6 @@ OO.ui.Window = function OoUiWindow( config ) {
 OO.inheritClass( OO.ui.Window, OO.ui.Element );
 OO.mixinClass( OO.ui.Window, OO.EventEmitter );
 
-/* Events */
-
-/**
- * @event resize
- * @param {string} size Symbolic size name, e.g. 'small', 'medium', 'large', 'full'
- */
-
 /* Static Properties */
 
 /**
@@ -1384,7 +1532,9 @@ OO.ui.Window.static.transplantStyles = function ( parentDoc, frameDoc, timeout )
                        styleText = '@import url(' + styleNode.href + ');';
                } else {
                        // Internal stylesheet; just copy the text
-                       styleText = styleNode.textContent;
+                       // For IE10 we need to fall back to .cssText, BUT that's undefined in
+                       // other browsers, so fall back to '' rather than 'undefined'
+                       styleText = styleNode.textContent || parentDoc.styleSheets[i].cssText || '';
                }
 
                // Create a node with a unique ID that we're going to monitor to see when the CSS
@@ -1455,6 +1605,18 @@ OO.ui.Window.static.transplantStyles = function ( parentDoc, frameDoc, timeout )
 
 /* Methods */
 
+/**
+ * Handle mouse down events.
+ *
+ * @param {jQuery.Event} e Mouse down event
+ */
+OO.ui.Window.prototype.onMouseDown = function ( e ) {
+       // Prevent clicking on the click-block from stealing focus
+       if ( e.target === this.$element[0] ) {
+               return false;
+       }
+};
+
 /**
  * Check if window has been initialized.
  *
@@ -1548,17 +1710,26 @@ OO.ui.Window.prototype.getSize = function () {
  * @return {number} Content height
  */
 OO.ui.Window.prototype.getContentHeight = function () {
+       // Temporarily resize the frame so getBodyHeight() can use scrollHeight measurements
+       var bodyHeight, oldHeight = this.$frame[0].style.height;
+       this.$frame[0].style.height = '1px';
+       bodyHeight = this.getBodyHeight();
+       this.$frame[0].style.height = oldHeight;
+
        return Math.round(
                // Add buffer for border
                ( this.$frame.outerHeight() - this.$frame.innerHeight() ) +
                // Use combined heights of children
-               ( this.$head.outerHeight( true ) + this.getBodyHeight() + this.$foot.outerHeight( true ) )
+               ( this.$head.outerHeight( true ) + bodyHeight + this.$foot.outerHeight( true ) )
        );
 };
 
 /**
  * Get the height of the dialog contents.
  *
+ * When this function is called, the dialog will temporarily have been resized
+ * to height=1px, so .scrollHeight measurements can be taken accurately.
+ *
  * @return {number} Height of content
  */
 OO.ui.Window.prototype.getBodyHeight = function () {
@@ -1773,14 +1944,17 @@ OO.ui.Window.prototype.initialize = function () {
        this.$head = this.$( '<div>' );
        this.$body = this.$( '<div>' );
        this.$foot = this.$( '<div>' );
-       this.$overlay = this.$( '<div>' );
+       this.$innerOverlay = this.$( '<div>' );
+
+       // Events
+       this.$element.on( 'mousedown', this.onMouseDown.bind( this ) );
 
        // Initialization
        this.$head.addClass( 'oo-ui-window-head' );
        this.$body.addClass( 'oo-ui-window-body' );
        this.$foot.addClass( 'oo-ui-window-foot' );
-       this.$overlay.addClass( 'oo-ui-window-overlay' );
-       this.$content.append( this.$head, this.$body, this.$foot, this.$overlay );
+       this.$innerOverlay.addClass( 'oo-ui-window-inner-overlay' );
+       this.$content.append( this.$head, this.$body, this.$foot, this.$innerOverlay );
 
        return this;
 };
@@ -1982,15 +2156,16 @@ OO.ui.Window.prototype.load = function () {
        doc.write(
                '<!doctype html>' +
                '<html>' +
-                       '<body class="oo-ui-window-isolated oo-ui-window-content oo-ui-' + this.dir + '"' +
+                       '<body class="oo-ui-window-isolated oo-ui-' + this.dir + '"' +
                                ' style="direction:' + this.dir + ';" dir="' + this.dir + '">' +
+                               '<div class="oo-ui-window-content"></div>' +
                        '</body>' +
                '</html>'
        );
        doc.close();
 
        // Properties
-       this.$ = OO.ui.Element.getJQuery( doc, this.$element );
+       this.$ = OO.ui.Element.getJQuery( doc, this.$iframe );
        this.$content = this.$( '.oo-ui-window-content' ).attr( 'tabIndex', 0 );
        this.$document = this.$( doc );
 
@@ -2038,7 +2213,7 @@ OO.ui.Window.prototype.load = function () {
  * @abstract
  * @class
  * @extends OO.ui.Window
- * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.PendingElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -2047,11 +2222,13 @@ OO.ui.Dialog = function OoUiDialog( config ) {
        // Parent constructor
        OO.ui.Dialog.super.call( this, config );
 
+       // Mixin constructors
+       OO.ui.PendingElement.call( this );
+
        // Properties
        this.actions = new OO.ui.ActionSet();
        this.attachedActions = [];
        this.currentAction = null;
-       this.pending = 0;
 
        // Events
        this.actions.connect( this, {
@@ -2069,6 +2246,7 @@ OO.ui.Dialog = function OoUiDialog( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.Dialog, OO.ui.Window );
+OO.mixinClass( OO.ui.Dialog, OO.ui.PendingElement );
 
 /* Static Properties */
 
@@ -2156,15 +2334,6 @@ OO.ui.Dialog.prototype.onActionsChange = function () {
        }
 };
 
-/**
- * Check if input is pending.
- *
- * @return {boolean}
- */
-OO.ui.Dialog.prototype.isPending = function () {
-       return !!this.pending;
-};
-
 /**
  * Get set of actions.
  *
@@ -2199,7 +2368,7 @@ OO.ui.Dialog.prototype.getActionProcess = function ( action ) {
  * @inheritdoc
  *
  * @param {Object} [data] Dialog opening data
- * @param {jQuery|string|Function|null} [data.label] Dialog label, omit to use #static-label
+ * @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
  */
@@ -2250,11 +2419,12 @@ OO.ui.Dialog.prototype.initialize = function () {
 
        // Events
        if ( this.constructor.static.escapable ) {
-               this.$document.on( 'keydown', OO.ui.bind( this.onDocumentKeyDown, this ) );
+               this.$document.on( 'keydown', this.onDocumentKeyDown.bind( this ) );
        }
 
        // Initialization
        this.$content.addClass( 'oo-ui-dialog-content' );
+       this.setPendingElement( this.$head );
 };
 
 /**
@@ -2289,39 +2459,7 @@ OO.ui.Dialog.prototype.detachActions = function () {
 OO.ui.Dialog.prototype.executeAction = function ( action ) {
        this.pushPending();
        return this.getActionProcess( action ).execute()
-               .always( OO.ui.bind( this.popPending, this ) );
-};
-
-/**
- * Increase the pending stack.
- *
- * @chainable
- */
-OO.ui.Dialog.prototype.pushPending = function () {
-       if ( this.pending === 0 ) {
-               this.$content.addClass( 'oo-ui-actionDialog-content-pending' );
-               this.$head.addClass( 'oo-ui-texture-pending' );
-       }
-       this.pending++;
-
-       return this;
-};
-
-/**
- * Reduce the pending stack.
- *
- * Clamped at zero.
- *
- * @chainable
- */
-OO.ui.Dialog.prototype.popPending = function () {
-       if ( this.pending === 1 ) {
-               this.$content.removeClass( 'oo-ui-actionDialog-content-pending' );
-               this.$head.removeClass( 'oo-ui-texture-pending' );
-       }
-       this.pending = Math.max( 0, this.pending - 1 );
-
-       return this;
+               .always( this.popPending.bind( this ) );
 };
 
 /**
@@ -2393,13 +2531,10 @@ OO.ui.WindowManager = function OoUiWindowManager( config ) {
        this.$ariaHidden = null;
        this.requestedSize = null;
        this.onWindowResizeTimeout = null;
-       this.onWindowResizeHandler = OO.ui.bind( this.onWindowResize, this );
-       this.afterWindowResizeHandler = OO.ui.bind( this.afterWindowResize, this );
-       this.onWindowMouseWheelHandler = OO.ui.bind( this.onWindowMouseWheel, this );
-       this.onDocumentKeyDownHandler = OO.ui.bind( this.onDocumentKeyDown, this );
-
-       // Events
-       this.$element.on( 'mousedown', false );
+       this.onWindowResizeHandler = this.onWindowResize.bind( this );
+       this.afterWindowResizeHandler = this.afterWindowResize.bind( this );
+       this.onWindowMouseWheelHandler = this.onWindowMouseWheel.bind( this );
+       this.onDocumentKeyDownHandler = this.onDocumentKeyDown.bind( this );
 
        // Initialization
        this.$element
@@ -2441,6 +2576,13 @@ OO.mixinClass( OO.ui.WindowManager, OO.EventEmitter );
  * @param {Object} data Window closing data
  */
 
+/**
+ * Window was resized.
+ *
+ * @event resize
+ * @param {OO.ui.Window} win Window that was resized
+ */
+
 /* Static Properties */
 
 /**
@@ -2506,8 +2648,10 @@ OO.ui.WindowManager.prototype.afterWindowResize = function () {
  *
  * @param {jQuery.Event} e Mouse wheel event
  */
-OO.ui.WindowManager.prototype.onWindowMouseWheel = function () {
-       return false;
+OO.ui.WindowManager.prototype.onWindowMouseWheel = function ( e ) {
+       // Kill all events in the parent window if the child window is isolated,
+       // or if the event didn't come from the child window
+       return !( this.shouldIsolate() || !$.contains( this.getCurrentWindow().$frame[0], e.target ) );
 };
 
 /**
@@ -2525,8 +2669,9 @@ OO.ui.WindowManager.prototype.onDocumentKeyDown = function ( e ) {
                case OO.ui.Keys.UP:
                case OO.ui.Keys.RIGHT:
                case OO.ui.Keys.DOWN:
-                       // Prevent any key events that might cause scrolling
-                       return false;
+                       // Kill all events in the parent window if the child window is isolated,
+                       // or if the event didn't come from the child window
+                       return !( this.shouldIsolate() || !$.contains( this.getCurrentWindow().$frame[0], e.target ) );
        }
 };
 
@@ -2711,7 +2856,7 @@ OO.ui.WindowManager.prototype.openWindow = function ( win, data ) {
        // Window opening
        if ( opening.state() !== 'rejected' ) {
                // Begin loading the window if it's not loading or loaded already - may take noticable time
-               // and we want to do this in paralell with any other preparatory actions
+               // and we want to do this in parallel with any other preparatory actions
                if ( !win.isLoading() && !win.isLoaded() ) {
                        // Finish initializing the window (must be done after manager is attached to DOM)
                        win.setManager( this );
@@ -2740,7 +2885,6 @@ OO.ui.WindowManager.prototype.openWindow = function ( win, data ) {
                                        manager.opening.notify( { state: 'setup' } );
                                        setTimeout( function () {
                                                win.ready( data ).then( function () {
-                                                       manager.updateWindowSize( win );
                                                        manager.opening.notify( { state: 'ready' } );
                                                        manager.opening = null;
                                                        manager.opened = $.Deferred();
@@ -2760,7 +2904,7 @@ 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 opening; see {@link #event-closing}
+ * @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
  * @fires closing
@@ -2769,7 +2913,7 @@ OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
        var manager = this,
                preparing = [],
                closing = $.Deferred(),
-               opened = this.opened;
+               opened;
 
        // Argument handling
        if ( typeof win === 'string' ) {
@@ -2806,6 +2950,7 @@ OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
                        manager.closing = closing;
                        manager.preparingToClose = null;
                        manager.emit( 'closing', win, closing, data );
+                       opened = manager.opened;
                        manager.opened = null;
                        opened.resolve( closing.promise(), data );
                        setTimeout( function () {
@@ -2887,7 +3032,7 @@ OO.ui.WindowManager.prototype.removeWindows = function ( names ) {
                if ( !win ) {
                        throw new Error( 'Cannot remove window' );
                }
-               promises.push( this.closeWindow( name ).then( OO.ui.bind( cleanup, null, name, win ) ) );
+               promises.push( this.closeWindow( name ).then( cleanup.bind( null, name, win ) ) );
        }
 
        return $.when.apply( $, promises );
@@ -2932,6 +3077,8 @@ OO.ui.WindowManager.prototype.updateWindowSize = function ( win ) {
        this.$element.toggleClass( 'oo-ui-windowManager-floating', size !== 'full' );
        win.setDimensions( sizes[size] );
 
+       this.emit( 'resize', win );
+
        return this;
 };
 
@@ -3021,6 +3168,7 @@ OO.ui.WindowManager.prototype.destroy = function () {
  * @param {string|jQuery} message Description of error
  * @param {Object} [config] Configuration options
  * @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 ) {
        // Configuration initialization
@@ -3029,6 +3177,7 @@ OO.ui.Error = function OoUiElement( message, config ) {
        // Properties
        this.message = message instanceof jQuery ? message : String( message );
        this.recoverable = config.recoverable === undefined || !!config.recoverable;
+       this.warning = !!config.warning;
 };
 
 /* Setup */
@@ -3046,6 +3195,15 @@ OO.ui.Error.prototype.isRecoverable = function () {
        return this.recoverable;
 };
 
+/**
+ * Check if the error is a warning
+ *
+ * @return {boolean} Error is warning
+ */
+OO.ui.Error.prototype.isWarning = function () {
+       return this.warning;
+};
+
 /**
  * Get error message as DOM nodes.
  *
@@ -3377,6 +3535,55 @@ OO.ui.ToolGroupFactory.static.getDefaultClasses = function () {
        ];
 };
 
+/**
+ * Theme logic.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.Theme = function OoUiTheme( config ) {
+       // Configuration initialization
+       config = config || {};
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.Theme );
+
+/* Methods */
+
+/**
+ * Get a list of classes to be applied to a widget.
+ *
+ * The 'on' and 'off' lists combined MUST contain keys for all classes the theme adds or removes,
+ * otherwise state transitions will not work properly.
+ *
+ * @param {OO.ui.Element} element Element for which to get classes
+ * @return {Object.<string,string[]>} Categorized class names with `on` and `off` lists
+ */
+OO.ui.Theme.prototype.getElementClasses = function ( /* element */ ) {
+       return { on: [], off: [] };
+};
+
+/**
+ * Update CSS classes provided by the theme.
+ *
+ * For elements with theme logic hooks, this should be called anytime there's a state change.
+ *
+ * @param {OO.ui.Element} element Element for which to update classes
+ * @return {Object.<string,string[]>} Categorized class names with `on` and `off` lists
+ */
+OO.ui.Theme.prototype.updateElementClasses = function ( element ) {
+       var classes = this.getElementClasses( element );
+
+       element.$element
+               .removeClass( classes.off.join( ' ' ) )
+               .addClass( classes.on.join( ' ' ) );
+};
+
 /**
  * Element with a button.
  *
@@ -3387,39 +3594,37 @@ OO.ui.ToolGroupFactory.static.getDefaultClasses = function () {
  * @class
  *
  * @constructor
- * @param {jQuery} $button Button node, assigned to #$button
  * @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 {number} [tabIndex=0] Button's tab index, use null to have no tabIndex
+ * @cfg {number} [tabIndex=0] Button's tab index. Use 0 to use default ordering, use -1 to prevent
+ *   tab focusing.
  * @cfg {string} [accessKey] Button's access key
  */
-OO.ui.ButtonedElement = function OoUiButtonedElement( $button, config ) {
+OO.ui.ButtonElement = function OoUiButtonElement( config ) {
        // Configuration initialization
        config = config || {};
 
        // Properties
-       this.$button = $button;
-       this.tabIndex = null;
+       this.$button = null;
        this.framed = null;
+       this.tabIndex = null;
+       this.accessKey = null;
        this.active = false;
-       this.onMouseUpHandler = OO.ui.bind( this.onMouseUp, this );
-
-       // Events
-       this.$button.on( 'mousedown', OO.ui.bind( this.onMouseDown, this ) );
+       this.onMouseUpHandler = this.onMouseUp.bind( this );
+       this.onMouseDownHandler = this.onMouseDown.bind( this );
 
        // Initialization
-       this.$element.addClass( 'oo-ui-buttonedElement' );
-       this.$button
-               .addClass( 'oo-ui-buttonedElement-button' )
-               .attr( 'role', 'button' );
+       this.$element.addClass( 'oo-ui-buttonElement' );
+       this.toggleFramed( config.framed === undefined || config.framed );
        this.setTabIndex( config.tabIndex || 0 );
        this.setAccessKey( config.accessKey );
-       this.toggleFramed( config.framed === undefined || config.framed );
+       this.setButtonElement( config.$button || this.$( '<a>' ) );
 };
 
 /* Setup */
 
-OO.initClass( OO.ui.ButtonedElement );
+OO.initClass( OO.ui.ButtonElement );
 
 /* Static Properties */
 
@@ -3430,25 +3635,43 @@ OO.initClass( OO.ui.ButtonedElement );
  * @inheritable
  * @property {boolean}
  */
-OO.ui.ButtonedElement.static.cancelButtonMouseDownEvents = true;
+OO.ui.ButtonElement.static.cancelButtonMouseDownEvents = true;
 
 /* Methods */
 
+/**
+ * Set the button element.
+ *
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $button Element to use as button
+ */
+OO.ui.ButtonElement.prototype.setButtonElement = function ( $button ) {
+       if ( this.$button ) {
+               this.$button
+                       .removeClass( 'oo-ui-buttonElement-button' )
+                       .removeAttr( 'role accesskey tabindex' )
+                       .off( this.onMouseDownHandler );
+       }
+
+       this.$button = $button
+               .addClass( 'oo-ui-buttonElement-button' )
+               .attr( { role: 'button', accesskey: this.accessKey, tabindex: this.tabIndex } )
+               .on( 'mousedown', this.onMouseDownHandler );
+};
+
 /**
  * Handles mouse down events.
  *
  * @param {jQuery.Event} e Mouse down event
  */
-OO.ui.ButtonedElement.prototype.onMouseDown = function ( e ) {
+OO.ui.ButtonElement.prototype.onMouseDown = function ( e ) {
        if ( this.isDisabled() || e.which !== 1 ) {
                return false;
        }
-       // tabIndex should generally be interacted with via the property, but it's not possible to
-       // reliably unset a tabIndex via a property so we use the (lowercase) "tabindex" attribute
-       this.tabIndex = this.$button.attr( 'tabindex' );
        // Remove the tab-index while the button is down to prevent the button from stealing focus
        this.$button.removeAttr( 'tabindex' );
-       this.$element.addClass( 'oo-ui-buttonedElement-pressed' );
+       this.$element.addClass( 'oo-ui-buttonElement-pressed' );
        // Run the mouseup handler no matter where the mouse is when the button is let go, so we can
        // reliably reapply the tabindex and remove the pressed class
        this.getElementDocument().addEventListener( 'mouseup', this.onMouseUpHandler, true );
@@ -3463,30 +3686,40 @@ OO.ui.ButtonedElement.prototype.onMouseDown = function ( e ) {
  *
  * @param {jQuery.Event} e Mouse up event
  */
-OO.ui.ButtonedElement.prototype.onMouseUp = function ( e ) {
+OO.ui.ButtonElement.prototype.onMouseUp = function ( e ) {
        if ( this.isDisabled() || e.which !== 1 ) {
                return false;
        }
        // Restore the tab-index after the button is up to restore the button's accesssibility
        this.$button.attr( 'tabindex', this.tabIndex );
-       this.$element.removeClass( 'oo-ui-buttonedElement-pressed' );
+       this.$element.removeClass( 'oo-ui-buttonElement-pressed' );
        // Stop listening for mouseup, since we only needed this once
        this.getElementDocument().removeEventListener( 'mouseup', this.onMouseUpHandler, true );
 };
 
+/**
+ * Check if button has a frame.
+ *
+ * @return {boolean} Button is framed
+ */
+OO.ui.ButtonElement.prototype.isFramed = function () {
+       return this.framed;
+};
+
 /**
  * Toggle frame.
  *
  * @param {boolean} [framed] Make button framed, omit to toggle
  * @chainable
  */
-OO.ui.ButtonedElement.prototype.toggleFramed = function ( framed ) {
+OO.ui.ButtonElement.prototype.toggleFramed = function ( framed ) {
        framed = framed === undefined ? !this.framed : !!framed;
        if ( framed !== this.framed ) {
                this.framed = framed;
                this.$element
-                       .toggleClass( 'oo-ui-buttonedElement-frameless', !framed )
-                       .toggleClass( 'oo-ui-buttonedElement-framed', framed );
+                       .toggleClass( 'oo-ui-buttonElement-frameless', !framed )
+                       .toggleClass( 'oo-ui-buttonElement-framed', framed );
+               this.updateThemeClasses();
        }
 
        return this;
@@ -3498,27 +3731,43 @@ OO.ui.ButtonedElement.prototype.toggleFramed = function ( framed ) {
  * @param {number|null} tabIndex Button's tab index, use null to remove
  * @chainable
  */
-OO.ui.ButtonedElement.prototype.setTabIndex = function ( tabIndex ) {
-       if ( typeof tabIndex === 'number' && tabIndex >= 0 ) {
-               this.$button.attr( 'tabindex', tabIndex );
-       } else {
-               this.$button.removeAttr( 'tabindex' );
+OO.ui.ButtonElement.prototype.setTabIndex = function ( tabIndex ) {
+       tabIndex = typeof tabIndex === 'number' && tabIndex >= 0 ? tabIndex : null;
+
+       if ( this.tabIndex !== tabIndex ) {
+               if ( this.$button ) {
+                       if ( tabIndex !== null ) {
+                               this.$button.attr( 'tabindex', tabIndex );
+                       } else {
+                               this.$button.removeAttr( 'tabindex' );
+                       }
+               }
+               this.tabIndex = tabIndex;
        }
+
        return this;
 };
 
 /**
- * Set access key
+ * Set access key.
  *
  * @param {string} accessKey Button's access key, use empty string to remove
  * @chainable
  */
-OO.ui.ButtonedElement.prototype.setAccessKey = function ( accessKey ) {
-       if ( typeof accessKey === 'string' && accessKey.length ) {
-               this.$button.attr( 'accesskey', accessKey );
-       } else {
-               this.$button.removeAttr( 'accesskey' );
+OO.ui.ButtonElement.prototype.setAccessKey = function ( accessKey ) {
+       accessKey = typeof accessKey === 'string' && accessKey.length ? accessKey : null;
+
+       if ( this.accessKey !== accessKey ) {
+               if ( this.$button ) {
+                       if ( accessKey !== null ) {
+                               this.$button.attr( 'accesskey', accessKey );
+                       } else {
+                               this.$button.removeAttr( 'accesskey' );
+                       }
+               }
+               this.accessKey = accessKey;
        }
+
        return this;
 };
 
@@ -3528,299 +3777,52 @@ OO.ui.ButtonedElement.prototype.setAccessKey = function ( accessKey ) {
  * @param {boolean} [value] Make button active
  * @chainable
  */
-OO.ui.ButtonedElement.prototype.setActive = function ( value ) {
-       this.$element.toggleClass( 'oo-ui-buttonedElement-active', !!value );
+OO.ui.ButtonElement.prototype.setActive = function ( value ) {
+       this.$element.toggleClass( 'oo-ui-buttonElement-active', !!value );
        return this;
 };
 
 /**
- * Element that can be automatically clipped to visible boundaies.
- *
- * @abstract
- * @class
- *
- * @constructor
- * @param {jQuery} $clippable Nodes to clip, assigned to #$clippable
- * @param {Object} [config] Configuration options
- */
-OO.ui.ClippableElement = function OoUiClippableElement( $clippable, config ) {
-       // Configuration initialization
-       config = config || {};
-
-       // Properties
-       this.$clippable = $clippable;
-       this.clipping = false;
-       this.clipped = false;
-       this.$clippableContainer = null;
-       this.$clippableScroller = null;
-       this.$clippableWindow = null;
-       this.idealWidth = null;
-       this.idealHeight = null;
-       this.onClippableContainerScrollHandler = OO.ui.bind( this.clip, this );
-       this.onClippableWindowResizeHandler = OO.ui.bind( this.clip, this );
-
-       // Initialization
-       this.$clippable.addClass( 'oo-ui-clippableElement-clippable' );
-};
-
-/* Methods */
-
-/**
- * Set clipping.
- *
- * @param {boolean} value Enable clipping
- * @chainable
- */
-OO.ui.ClippableElement.prototype.setClipping = function ( value ) {
-       value = !!value;
-
-       if ( this.clipping !== value ) {
-               this.clipping = value;
-               if ( this.clipping ) {
-                       this.$clippableContainer = this.$( this.getClosestScrollableElementContainer() );
-                       // If the clippable container is the body, we have to listen to scroll events and check
-                       // jQuery.scrollTop on the window because of browser inconsistencies
-                       this.$clippableScroller = this.$clippableContainer.is( 'body' ) ?
-                               this.$( OO.ui.Element.getWindow( this.$clippableContainer ) ) :
-                               this.$clippableContainer;
-                       this.$clippableScroller.on( 'scroll', this.onClippableContainerScrollHandler );
-                       this.$clippableWindow = this.$( this.getElementWindow() )
-                               .on( 'resize', this.onClippableWindowResizeHandler );
-                       // Initial clip after visible
-                       setTimeout( OO.ui.bind( this.clip, this ) );
-               } else {
-                       this.$clippableContainer = null;
-                       this.$clippableScroller.off( 'scroll', this.onClippableContainerScrollHandler );
-                       this.$clippableScroller = null;
-                       this.$clippableWindow.off( 'resize', this.onClippableWindowResizeHandler );
-                       this.$clippableWindow = null;
-               }
-       }
-
-       return this;
-};
-
-/**
- * Check if the element will be clipped to fit the visible area of the nearest scrollable container.
- *
- * @return {boolean} Element will be clipped to the visible area
- */
-OO.ui.ClippableElement.prototype.isClipping = function () {
-       return this.clipping;
-};
-
-/**
- * Check if the bottom or right of the element is being clipped by the nearest scrollable container.
- *
- * @return {boolean} Part of the element is being clipped
- */
-OO.ui.ClippableElement.prototype.isClipped = function () {
-       return this.clipped;
-};
-
-/**
- * Set the ideal size.
- *
- * @param {number|string} [width] Width as a number of pixels or CSS string with unit suffix
- * @param {number|string} [height] Height as a number of pixels or CSS string with unit suffix
- */
-OO.ui.ClippableElement.prototype.setIdealSize = function ( width, height ) {
-       this.idealWidth = width;
-       this.idealHeight = height;
-};
-
-/**
- * Clip element to visible boundaries and allow scrolling when needed.
- *
- * Element will be clipped the bottom or right of the element is within 10px of the edge of, or
- * overlapped by, the visible area of the nearest scrollable container.
- *
- * @chainable
- */
-OO.ui.ClippableElement.prototype.clip = function () {
-       if ( !this.clipping ) {
-               // this.$clippableContainer and this.$clippableWindow are null, so the below will fail
-               return this;
-       }
-
-       var buffer = 10,
-               cOffset = this.$clippable.offset(),
-               $container = this.$clippableContainer.is( 'body' ) ? this.$clippableWindow : this.$clippableContainer,
-               ccOffset = $container.offset() || { top: 0, left: 0 },
-               ccHeight = $container.innerHeight() - buffer,
-               ccWidth = $container.innerWidth() - buffer,
-               scrollTop = this.$clippableScroller.scrollTop(),
-               scrollLeft = this.$clippableScroller.scrollLeft(),
-               desiredWidth = ( ccOffset.left + scrollLeft + ccWidth ) - cOffset.left,
-               desiredHeight = ( ccOffset.top + scrollTop + ccHeight ) - cOffset.top,
-               naturalWidth = this.$clippable.prop( 'scrollWidth' ),
-               naturalHeight = this.$clippable.prop( 'scrollHeight' ),
-               clipWidth = desiredWidth < naturalWidth,
-               clipHeight = desiredHeight < naturalHeight;
-
-       if ( clipWidth ) {
-               this.$clippable.css( { overflowX: 'auto', width: desiredWidth } );
-       } else {
-               this.$clippable.css( 'width', this.idealWidth || '' );
-               this.$clippable.width(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
-               this.$clippable.css( 'overflowX', '' );
-       }
-       if ( clipHeight ) {
-               this.$clippable.css( { overflowY: 'auto', height: desiredHeight } );
-       } else {
-               this.$clippable.css( 'height', this.idealHeight || '' );
-               this.$clippable.height(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
-               this.$clippable.css( 'overflowY', '' );
-       }
-
-       this.clipped = clipWidth || clipHeight;
-
-       return this;
-};
-
-/**
- * Element with named flags that can be added, removed, listed and checked.
- *
- * A flag, when set, adds a CSS class on the `$element` by combing `oo-ui-flaggableElement-` with
- * the flag name. Flags are primarily useful for styling.
+ * Element containing a sequence of child elements.
  *
  * @abstract
  * @class
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string[]} [flags=[]] Styling flags, e.g. 'primary', 'destructive' or 'constructive'
+ * @cfg {jQuery} [$group] Container node, assigned to #$group, omit to use a generated `<div>`
  */
-OO.ui.FlaggableElement = function OoUiFlaggableElement( config ) {
-       // Config initialization
+OO.ui.GroupElement = function OoUiGroupElement( config ) {
+       // Configuration intialization
        config = config || {};
 
        // Properties
-       this.flags = {};
+       this.$group = null;
+       this.items = [];
+       this.aggregateItemEvents = {};
 
        // Initialization
-       this.setFlags( config.flags );
+       this.setGroupElement( config.$group || this.$( '<div>' ) );
 };
 
-/* Events */
-
-/**
- * @event flag
- * @param {Object.<string,boolean>} changes Object keyed by flag name containing boolean
- *   added/removed properties
- */
-
 /* Methods */
 
 /**
- * Check if a flag is set.
- *
- * @param {string} flag Name of flag
- * @return {boolean} Has flag
- */
-OO.ui.FlaggableElement.prototype.hasFlag = function ( flag ) {
-       return flag in this.flags;
-};
-
-/**
- * Get the names of all flags set.
- *
- * @return {string[]} flags Flag names
- */
-OO.ui.FlaggableElement.prototype.getFlags = function () {
-       return Object.keys( this.flags );
-};
-
-/**
- * Clear all flags.
- *
- * @chainable
- * @fires flag
- */
-OO.ui.FlaggableElement.prototype.clearFlags = function () {
-       var flag,
-               changes = {},
-               classPrefix = 'oo-ui-flaggableElement-';
-
-       for ( flag in this.flags ) {
-               changes[flag] = false;
-               delete this.flags[flag];
-               this.$element.removeClass( classPrefix + flag );
-       }
-
-       this.emit( 'flag', changes );
-
-       return this;
-};
-
-/**
- * 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.
- * @chainable
- * @fires flag
- */
-OO.ui.FlaggableElement.prototype.setFlags = function ( flags ) {
-       var i, len, flag,
-               changes = {},
-               classPrefix = 'oo-ui-flaggableElement-';
-
-       if ( typeof flags === 'string' ) {
-               // Set
-               this.flags[flags] = true;
-               this.$element.addClass( classPrefix + flags );
-       } else if ( $.isArray( flags ) ) {
-               for ( i = 0, len = flags.length; i < len; i++ ) {
-                       flag = flags[i];
-                       // Set
-                       changes[flag] = true;
-                       this.flags[flag] = true;
-                       this.$element.addClass( classPrefix + flag );
-               }
-       } else if ( OO.isPlainObject( flags ) ) {
-               for ( flag in flags ) {
-                       if ( flags[flag] ) {
-                               // Set
-                               changes[flag] = true;
-                               this.flags[flag] = true;
-                               this.$element.addClass( classPrefix + flag );
-                       } else {
-                               // Remove
-                               changes[flag] = false;
-                               delete this.flags[flag];
-                               this.$element.removeClass( classPrefix + flag );
-                       }
-               }
-       }
-
-       this.emit( 'flag', changes );
-
-       return this;
-};
-
-/**
- * Element containing a sequence of child elements.
+ * Set the group element.
  *
- * @abstract
- * @class
+ * If an element is already set, items will be moved to the new element.
  *
- * @constructor
- * @param {jQuery} $group Container node, assigned to #$group
- * @param {Object} [config] Configuration options
+ * @param {jQuery} $group Element to use as group
  */
-OO.ui.GroupElement = function OoUiGroupElement( $group, config ) {
-       // Configuration
-       config = config || {};
+OO.ui.GroupElement.prototype.setGroupElement = function ( $group ) {
+       var i, len;
 
-       // Properties
        this.$group = $group;
-       this.items = [];
-       this.aggregateItemEvents = {};
+       for ( i = 0, len = this.items.length; i < len; i++ ) {
+               this.$group.append( this.items[i].$element );
+       }
 };
 
-/* Methods */
-
 /**
  * Check if there are no items.
  *
@@ -3857,7 +3859,7 @@ OO.ui.GroupElement.prototype.aggregate = function ( events ) {
                groupEvent = events[itemEvent];
 
                // Remove existing aggregated event
-               if ( itemEvent in this.aggregateItemEvents ) {
+               if ( Object.prototype.hasOwnProperty.call( this.aggregateItemEvents, itemEvent ) ) {
                        // Don't allow duplicate aggregations
                        if ( groupEvent ) {
                                throw new Error( 'Duplicate item event aggregation for ' + itemEvent );
@@ -3895,7 +3897,9 @@ OO.ui.GroupElement.prototype.aggregate = function ( events ) {
 /**
  * Add items.
  *
- * @param {OO.ui.Element[]} items Item
+ * Adding an existing item will move it.
+ *
+ * @param {OO.ui.Element[]} items Items
  * @param {number} [index] Index to insert items at
  * @chainable
  */
@@ -3962,7 +3966,7 @@ OO.ui.GroupElement.prototype.removeItems = function ( items ) {
                                !$.isEmptyObject( this.aggregateItemEvents )
                        ) {
                                remove = {};
-                               if ( itemEvent in this.aggregateItemEvents ) {
+                               if ( Object.prototype.hasOwnProperty.call( this.aggregateItemEvents, itemEvent ) ) {
                                        remove[itemEvent] = [ 'emit', this.aggregateItemEvents[itemEvent], item ];
                                }
                                item.disconnect( this, remove );
@@ -3994,7 +3998,7 @@ OO.ui.GroupElement.prototype.clearItems = function () {
                        !$.isEmptyObject( this.aggregateItemEvents )
                ) {
                        remove = {};
-                       if ( itemEvent in this.aggregateItemEvents ) {
+                       if ( Object.prototype.hasOwnProperty.call( this.aggregateItemEvents, itemEvent ) ) {
                                remove[itemEvent] = [ 'emit', this.aggregateItemEvents[itemEvent], item ];
                        }
                        item.disconnect( this, remove );
@@ -4019,28 +4023,31 @@ OO.ui.GroupElement.prototype.clearItems = function () {
  * @class
  *
  * @constructor
- * @param {jQuery} $icon Icon node, assigned to #$icon
  * @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
  */
-OO.ui.IconedElement = function OoUiIconedElement( $icon, config ) {
-       // Config intialization
+OO.ui.IconElement = function OoUiIconElement( config ) {
+       // Configuration intialization
        config = config || {};
 
        // Properties
-       this.$icon = $icon;
+       this.$icon = null;
        this.icon = null;
+       this.iconTitle = null;
 
        // Initialization
-       this.$icon.addClass( 'oo-ui-iconedElement-icon' );
        this.setIcon( config.icon || this.constructor.static.icon );
+       this.setIconTitle( config.iconTitle || this.constructor.static.iconTitle );
+       this.setIconElement( config.$icon || this.$( '<span>' ) );
 };
 
 /* Setup */
 
-OO.initClass( OO.ui.IconedElement );
+OO.initClass( OO.ui.IconElement );
 
 /* Static Properties */
 
@@ -4061,42 +4068,104 @@ OO.initClass( OO.ui.IconedElement );
  *  use the 'default' key to specify the icon to be used when there is no icon in the user's
  *  language
  */
-OO.ui.IconedElement.static.icon = null;
+OO.ui.IconElement.static.icon = null;
+
+/**
+ * Icon title.
+ *
+ * @static
+ * @inheritable
+ * @property {string|Function|null} Icon title text, a function that returns text or null for no
+ *  icon title
+ */
+OO.ui.IconElement.static.iconTitle = null;
 
 /* Methods */
 
 /**
- * Set icon.
+ * Set the icon element.
+ *
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $icon Element to use as icon
+ */
+OO.ui.IconElement.prototype.setIconElement = function ( $icon ) {
+       if ( this.$icon ) {
+               this.$icon
+                       .removeClass( 'oo-ui-iconElement-icon oo-ui-icon-' + this.icon )
+                       .removeAttr( 'title' );
+       }
+
+       this.$icon = $icon
+               .addClass( 'oo-ui-iconElement-icon' )
+               .toggleClass( 'oo-ui-icon-' + this.icon, !!this.icon );
+       if ( this.iconTitle !== null ) {
+               this.$icon.attr( 'title', this.iconTitle );
+       }
+};
+
+/**
+ * Set icon name.
  *
- * @param {Object|string} icon Symbolic icon name, or map of icon names keyed by language ID;
+ * @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
+ *  language, use null to remove icon
  * @chainable
  */
-OO.ui.IconedElement.prototype.setIcon = function ( icon ) {
+OO.ui.IconElement.prototype.setIcon = function ( icon ) {
        icon = OO.isPlainObject( icon ) ? OO.ui.getLocalValue( icon, null, 'default' ) : icon;
+       icon = typeof icon === 'string' && icon.trim().length ? icon.trim() : null;
 
-       if ( this.icon ) {
-               this.$icon.removeClass( 'oo-ui-icon-' + this.icon );
+       if ( this.icon !== icon ) {
+               if ( this.$icon ) {
+                       if ( this.icon !== null ) {
+                               this.$icon.removeClass( 'oo-ui-icon-' + this.icon );
+                       }
+                       if ( icon !== null ) {
+                               this.$icon.addClass( 'oo-ui-icon-' + icon );
+                       }
+               }
+               this.icon = icon;
        }
-       if ( typeof icon === 'string' ) {
-               icon = icon.trim();
-               if ( icon.length ) {
-                       this.$icon.addClass( 'oo-ui-icon-' + icon );
-                       this.icon = icon;
+
+       this.$element.toggleClass( 'oo-ui-iconElement', !!this.icon );
+       this.updateThemeClasses();
+
+       return this;
+};
+
+/**
+ * Set icon title.
+ *
+ * @param {string|Function|null} icon Icon title text, a function that returns text or null
+ *  for no icon title
+ * @chainable
+ */
+OO.ui.IconElement.prototype.setIconTitle = function ( iconTitle ) {
+       iconTitle = typeof iconTitle === 'function' ||
+               ( typeof iconTitle === 'string' && iconTitle.length ) ?
+                       OO.ui.resolveMsg( iconTitle ) : null;
+
+       if ( this.iconTitle !== iconTitle ) {
+               this.iconTitle = iconTitle;
+               if ( this.$icon ) {
+                       if ( this.iconTitle !== null ) {
+                               this.$icon.attr( 'title', iconTitle );
+                       } else {
+                               this.$icon.removeAttr( 'title' );
+                       }
                }
        }
-       this.$element.toggleClass( 'oo-ui-iconedElement', !!this.icon );
 
        return this;
 };
 
 /**
- * Get icon.
+ * Get icon name.
  *
- * @return {string} Icon
+ * @return {string} Icon name
  */
-OO.ui.IconedElement.prototype.getIcon = function () {
+OO.ui.IconElement.prototype.getIcon = function () {
        return this.icon;
 };
 
@@ -4112,29 +4181,30 @@ OO.ui.IconedElement.prototype.getIcon = function () {
  * @class
  *
  * @constructor
- * @param {jQuery} $indicator Indicator node, assigned to #$indicator
  * @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 return text
+ * @cfg {string} [indicatorTitle] Indicator title text or a function that returns text
  */
-OO.ui.IndicatedElement = function OoUiIndicatedElement( $indicator, config ) {
-       // Config intialization
+OO.ui.IndicatorElement = function OoUiIndicatorElement( config ) {
+       // Configuration initialization
        config = config || {};
 
        // Properties
-       this.$indicator = $indicator;
+       this.$indicator = null;
        this.indicator = null;
-       this.indicatorLabel = null;
+       this.indicatorTitle = null;
 
        // Initialization
-       this.$indicator.addClass( 'oo-ui-indicatedElement-indicator' );
        this.setIndicator( config.indicator || this.constructor.static.indicator );
        this.setIndicatorTitle( config.indicatorTitle || this.constructor.static.indicatorTitle );
+       this.setIndicatorElement( config.$indicator || this.$( '<span>' ) );
 };
 
 /* Setup */
 
-OO.initClass( OO.ui.IndicatedElement );
+OO.initClass( OO.ui.IndicatorElement );
 
 /* Static Properties */
 
@@ -4143,70 +4213,103 @@ OO.initClass( OO.ui.IndicatedElement );
  *
  * @static
  * @inheritable
- * @property {string|null} Symbolic indicator name or null for no indicator
+ * @property {string|null} Symbolic indicator name
  */
-OO.ui.IndicatedElement.static.indicator = null;
+OO.ui.IndicatorElement.static.indicator = null;
 
 /**
  * Indicator title.
  *
  * @static
  * @inheritable
- * @property {string|Function|null} Indicator title text, a function that return text or null for no
+ * @property {string|Function|null} Indicator title text, a function that returns text or null for no
  *  indicator title
  */
-OO.ui.IndicatedElement.static.indicatorTitle = null;
+OO.ui.IndicatorElement.static.indicatorTitle = null;
 
 /* Methods */
 
 /**
- * Set indicator.
+ * Set the indicator element.
+ *
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $indicator Element to use as indicator
+ */
+OO.ui.IndicatorElement.prototype.setIndicatorElement = function ( $indicator ) {
+       if ( this.$indicator ) {
+               this.$indicator
+                       .removeClass( 'oo-ui-indicatorElement-indicator oo-ui-indicator-' + this.indicator )
+                       .removeAttr( 'title' );
+       }
+
+       this.$indicator = $indicator
+               .addClass( 'oo-ui-indicatorElement-indicator' )
+               .toggleClass( 'oo-ui-indicator-' + this.indicator, !!this.indicator );
+       if ( this.indicatorTitle !== null ) {
+               this.$indicatorTitle.attr( 'title', this.indicatorTitle );
+       }
+};
+
+/**
+ * Set indicator name.
  *
  * @param {string|null} indicator Symbolic name of indicator to use or null for no indicator
  * @chainable
  */
-OO.ui.IndicatedElement.prototype.setIndicator = function ( indicator ) {
-       if ( this.indicator ) {
-               this.$indicator.removeClass( 'oo-ui-indicator-' + this.indicator );
-               this.indicator = null;
-       }
-       if ( typeof indicator === 'string' ) {
-               indicator = indicator.trim();
-               if ( indicator.length ) {
-                       this.$indicator.addClass( 'oo-ui-indicator-' + indicator );
-                       this.indicator = indicator;
+OO.ui.IndicatorElement.prototype.setIndicator = function ( indicator ) {
+       indicator = typeof indicator === 'string' && indicator.length ? indicator.trim() : null;
+
+       if ( this.indicator !== indicator ) {
+               if ( this.$indicator ) {
+                       if ( this.indicator !== null ) {
+                               this.$indicator.removeClass( 'oo-ui-indicator-' + this.indicator );
+                       }
+                       if ( indicator !== null ) {
+                               this.$indicator.addClass( 'oo-ui-indicator-' + indicator );
+                       }
                }
+               this.indicator = indicator;
        }
-       this.$element.toggleClass( 'oo-ui-indicatedElement', !!this.indicator );
+
+       this.$element.toggleClass( 'oo-ui-indicatorElement', !!this.indicator );
+       this.updateThemeClasses();
 
        return this;
 };
 
 /**
- * Set indicator label.
+ * Set indicator title.
  *
- * @param {string|Function|null} indicator Indicator title text, a function that return 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.IndicatedElement.prototype.setIndicatorTitle = function ( indicatorTitle ) {
-       this.indicatorTitle = indicatorTitle = OO.ui.resolveMsg( indicatorTitle );
+OO.ui.IndicatorElement.prototype.setIndicatorTitle = function ( indicatorTitle ) {
+       indicatorTitle = typeof indicatorTitle === 'function' ||
+               ( typeof indicatorTitle === 'string' && indicatorTitle.length ) ?
+                       OO.ui.resolveMsg( indicatorTitle ) : null;
 
-       if ( typeof indicatorTitle === 'string' && indicatorTitle.length ) {
-               this.$indicator.attr( 'title', indicatorTitle );
-       } else {
-               this.$indicator.removeAttr( 'title' );
+       if ( this.indicatorTitle !== indicatorTitle ) {
+               this.indicatorTitle = indicatorTitle;
+               if ( this.$indicator ) {
+                       if ( this.indicatorTitle !== null ) {
+                               this.$indicator.attr( 'title', indicatorTitle );
+                       } else {
+                               this.$indicator.removeAttr( 'title' );
+                       }
+               }
        }
 
        return this;
 };
 
 /**
- * Get indicator.
+ * Get indicator name.
  *
- * @return {string} title Symbolic name of indicator
+ * @return {string} Symbolic name of indicator
  */
-OO.ui.IndicatedElement.prototype.getIndicator = function () {
+OO.ui.IndicatorElement.prototype.getIndicator = function () {
        return this.indicator;
 };
 
@@ -4215,7 +4318,7 @@ OO.ui.IndicatedElement.prototype.getIndicator = function () {
  *
  * @return {string} Indicator title text
  */
-OO.ui.IndicatedElement.prototype.getIndicatorTitle = function () {
+OO.ui.IndicatorElement.prototype.getIndicatorTitle = function () {
        return this.indicatorTitle;
 };
 
@@ -4226,28 +4329,28 @@ OO.ui.IndicatedElement.prototype.getIndicatorTitle = function () {
  * @class
  *
  * @constructor
- * @param {jQuery} $label Label node, assigned to #$label
  * @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.
  */
-OO.ui.LabeledElement = function OoUiLabeledElement( $label, config ) {
-       // Config intialization
+OO.ui.LabelElement = function OoUiLabelElement( config ) {
+       // Configuration initialization
        config = config || {};
 
        // Properties
-       this.$label = $label;
+       this.$label = null;
        this.label = null;
+       this.autoFitLabel = config.autoFitLabel === undefined || !!config.autoFitLabel;
 
        // Initialization
-       this.$label.addClass( 'oo-ui-labeledElement-label' );
        this.setLabel( config.label || this.constructor.static.label );
-       this.autoFitLabel = config.autoFitLabel === undefined || !!config.autoFitLabel;
+       this.setLabelElement( config.$label || this.$( '<span>' ) );
 };
 
 /* Setup */
 
-OO.initClass( OO.ui.LabeledElement );
+OO.initClass( OO.ui.LabelElement );
 
 /* Static Properties */
 
@@ -4256,28 +4359,89 @@ OO.initClass( OO.ui.LabeledElement );
  *
  * @static
  * @inheritable
- * @property {string|Function|null} Label text; a function that returns nodes or text; or null for
+ * @property {string|Function|null} Label text; a function that returns nodes or text; or null for
  *  no label
  */
-OO.ui.LabeledElement.static.label = null;
+OO.ui.LabelElement.static.label = null;
 
 /* Methods */
 
+/**
+ * Set the label element.
+ *
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $label Element to use as label
+ */
+OO.ui.LabelElement.prototype.setLabelElement = function ( $label ) {
+       if ( this.$label ) {
+               this.$label.removeClass( 'oo-ui-labelElement-label' ).empty();
+       }
+
+       this.$label = $label.addClass( 'oo-ui-labelElement-label' );
+       this.setLabelContent( this.label );
+};
+
 /**
  * Set the label.
  *
  * An empty string will result in the label being hidden. A string containing only whitespace will
- * be converted to a single &nbsp;
+ * be converted to a single `&nbsp;`.
+ *
+ * @param {jQuery|string|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;
+
+       if ( this.label !== label ) {
+               if ( this.$label ) {
+                       this.setLabelContent( label );
+               }
+               this.label = label;
+       }
+
+       this.$element.toggleClass( 'oo-ui-labelElement', !!this.label );
+
+       return this;
+};
+
+/**
+ * Get the label.
  *
- * @param {jQuery|string|Function|null} label Label nodes; text; a function that retuns nodes or
+ * @return {jQuery|string|Function|null} Label nodes; text; a function that returns nodes or
  *  text; or null for no label
+ */
+OO.ui.LabelElement.prototype.getLabel = function () {
+       return this.label;
+};
+
+/**
+ * Fit the label.
+ *
  * @chainable
  */
-OO.ui.LabeledElement.prototype.setLabel = function ( label ) {
-       var empty = false;
+OO.ui.LabelElement.prototype.fitLabel = function () {
+       if ( this.$label && this.$label.autoEllipsis && this.autoFitLabel ) {
+               this.$label.autoEllipsis( { hasSpan: false, tooltip: true } );
+       }
+
+       return this;
+};
 
-       this.label = label = OO.ui.resolveMsg( label ) || null;
-       if ( typeof label === 'string' && label.length ) {
+/**
+ * Set the content of the label.
+ *
+ * Do not call this method until after the label element has been set by #setLabelElement.
+ *
+ * @private
+ * @param {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
+ *  text; or null for no label
+ */
+OO.ui.LabelElement.prototype.setLabelContent = function ( label ) {
+       if ( typeof label === 'string' ) {
                if ( label.match( /^\s*$/ ) ) {
                        // Convert whitespace only string to a single non-breaking space
                        this.$label.html( '&nbsp;' );
@@ -4288,138 +4452,508 @@ OO.ui.LabeledElement.prototype.setLabel = function ( label ) {
                this.$label.empty().append( label );
        } else {
                this.$label.empty();
-               empty = true;
        }
-       this.$element.toggleClass( 'oo-ui-labeledElement', !empty );
-       this.$label.css( 'display', empty ? 'none' : '' );
+       this.$label.css( 'display', !label ? 'none' : '' );
+};
+
+/**
+ * Element containing an OO.ui.PopupWidget object.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {Object} [popup] Configuration to pass to popup
+ * @cfg {boolean} [autoClose=true] Popup auto-closes when it loses focus
+ */
+OO.ui.PopupElement = function OoUiPopupElement( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Properties
+       this.popup = new OO.ui.PopupWidget( $.extend(
+               { autoClose: true },
+               config.popup,
+               { $: this.$, $autoCloseIgnore: this.$element }
+       ) );
+};
+
+/* Methods */
+
+/**
+ * Get popup.
+ *
+ * @return {OO.ui.PopupWidget} Popup widget
+ */
+OO.ui.PopupElement.prototype.getPopup = function () {
+       return this.popup;
+};
+
+/**
+ * Element with named flags that can be added, removed, listed and checked.
+ *
+ * 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.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string|string[]} [flags] Styling flags, e.g. 'primary', 'destructive' or 'constructive'
+ * @cfg {jQuery} [$flagged] Flagged node, assigned to #$flagged, omit to use #$element
+ */
+OO.ui.FlaggedElement = function OoUiFlaggedElement( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Properties
+       this.flags = {};
+       this.$flagged = null;
+
+       // Initialization
+       this.setFlags( config.flags );
+       this.setFlaggedElement( config.$flagged || this.$element );
+};
+
+/* Events */
+
+/**
+ * @event flag
+ * @param {Object.<string,boolean>} changes Object keyed by flag name containing boolean
+ *   added/removed properties
+ */
+
+/* Methods */
+
+/**
+ * Set the flagged element.
+ *
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $flagged Element to add flags to
+ */
+OO.ui.FlaggedElement.prototype.setFlaggedElement = function ( $flagged ) {
+       var classNames = Object.keys( this.flags ).map( function ( flag ) {
+               return 'oo-ui-flaggedElement-' + flag;
+       } ).join( ' ' );
+
+       if ( this.$flagged ) {
+               this.$flagged.removeClass( classNames );
+       }
+
+       this.$flagged = $flagged.addClass( classNames );
+};
+
+/**
+ * Check if a flag is set.
+ *
+ * @param {string} flag Name of flag
+ * @return {boolean} Has flag
+ */
+OO.ui.FlaggedElement.prototype.hasFlag = function ( flag ) {
+       return flag in this.flags;
+};
+
+/**
+ * Get the names of all flags set.
+ *
+ * @return {string[]} Flag names
+ */
+OO.ui.FlaggedElement.prototype.getFlags = function () {
+       return Object.keys( this.flags );
+};
+
+/**
+ * Clear all flags.
+ *
+ * @chainable
+ * @fires flag
+ */
+OO.ui.FlaggedElement.prototype.clearFlags = function () {
+       var flag, className,
+               changes = {},
+               remove = [],
+               classPrefix = 'oo-ui-flaggedElement-';
+
+       for ( flag in this.flags ) {
+               className = classPrefix + flag;
+               changes[flag] = false;
+               delete this.flags[flag];
+               remove.push( className );
+       }
+
+       if ( this.$flagged ) {
+               this.$flagged.removeClass( remove.join( ' ' ) );
+       }
+
+       this.updateThemeClasses();
+       this.emit( 'flag', changes );
 
        return this;
 };
 
 /**
- * Get the label.
+ * Add one or more flags.
  *
- * @return {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
- *  text; or null for no label
+ * @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.
+ * @chainable
+ * @fires flag
  */
-OO.ui.LabeledElement.prototype.getLabel = function () {
-       return this.label;
+OO.ui.FlaggedElement.prototype.setFlags = function ( flags ) {
+       var i, len, flag, className,
+               changes = {},
+               add = [],
+               remove = [],
+               classPrefix = 'oo-ui-flaggedElement-';
+
+       if ( typeof flags === 'string' ) {
+               className = classPrefix + flags;
+               // Set
+               if ( !this.flags[flags] ) {
+                       this.flags[flags] = true;
+                       add.push( className );
+               }
+       } else if ( $.isArray( flags ) ) {
+               for ( i = 0, len = flags.length; i < len; i++ ) {
+                       flag = flags[i];
+                       className = classPrefix + flag;
+                       // Set
+                       if ( !this.flags[flag] ) {
+                               changes[flag] = true;
+                               this.flags[flag] = true;
+                               add.push( className );
+                       }
+               }
+       } else if ( OO.isPlainObject( flags ) ) {
+               for ( flag in flags ) {
+                       className = classPrefix + flag;
+                       if ( flags[flag] ) {
+                               // Set
+                               if ( !this.flags[flag] ) {
+                                       changes[flag] = true;
+                                       this.flags[flag] = true;
+                                       add.push( className );
+                               }
+                       } else {
+                               // Remove
+                               if ( this.flags[flag] ) {
+                                       changes[flag] = false;
+                                       delete this.flags[flag];
+                                       remove.push( className );
+                               }
+                       }
+               }
+       }
+
+       if ( this.$flagged ) {
+               this.$flagged
+                       .addClass( add.join( ' ' ) )
+                       .removeClass( remove.join( ' ' ) );
+       }
+
+       this.updateThemeClasses();
+       this.emit( 'flag', changes );
+
+       return this;
+};
+
+/**
+ * Element with a title.
+ *
+ * Titles are rendered by the browser and are made visible when hovering the element. Titles are
+ * not visible on touch devices.
+ *
+ * @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.
+ */
+OO.ui.TitledElement = function OoUiTitledElement( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Properties
+       this.$titled = null;
+       this.title = null;
+
+       // Initialization
+       this.setTitle( config.title || this.constructor.static.title );
+       this.setTitledElement( config.$titled || this.$element );
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.TitledElement );
+
+/* Static Properties */
+
+/**
+ * Title.
+ *
+ * @static
+ * @inheritable
+ * @property {string|Function} Title text or a function that returns text
+ */
+OO.ui.TitledElement.static.title = null;
+
+/* Methods */
+
+/**
+ * Set the titled element.
+ *
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $titled Element to set title on
+ */
+OO.ui.TitledElement.prototype.setTitledElement = function ( $titled ) {
+       if ( this.$titled ) {
+               this.$titled.removeAttr( 'title' );
+       }
+
+       this.$titled = $titled;
+       if ( this.title ) {
+               this.$titled.attr( 'title', this.title );
+       }
+};
+
+/**
+ * Set 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 ) {
+       title = typeof title === 'string' ? OO.ui.resolveMsg( title ) : null;
+
+       if ( this.title !== title ) {
+               if ( this.$titled ) {
+                       if ( title !== null ) {
+                               this.$titled.attr( 'title', title );
+                       } else {
+                               this.$titled.removeAttr( 'title' );
+                       }
+               }
+               this.title = title;
+       }
+
+       return this;
+};
+
+/**
+ * Get title.
+ *
+ * @return {string} Title string
+ */
+OO.ui.TitledElement.prototype.getTitle = function () {
+       return this.title;
+};
+
+/**
+ * Element that can be automatically clipped to visible boundaries.
+ *
+ * Whenever the element's natural height changes, you have to call
+ * #clip to make sure it's still clipping correctly.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$clippable] Nodes to clip, assigned to #$clippable, omit to use #$element
+ */
+OO.ui.ClippableElement = function OoUiClippableElement( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Properties
+       this.$clippable = null;
+       this.clipping = false;
+       this.clippedHorizontally = false;
+       this.clippedVertically = false;
+       this.$clippableContainer = null;
+       this.$clippableScroller = null;
+       this.$clippableWindow = null;
+       this.idealWidth = null;
+       this.idealHeight = null;
+       this.onClippableContainerScrollHandler = this.clip.bind( this );
+       this.onClippableWindowResizeHandler = this.clip.bind( this );
+
+       // Initialization
+       this.setClippableElement( config.$clippable || this.$element );
+};
+
+/* Methods */
+
+/**
+ * Set clippable element.
+ *
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $clippable Element to make clippable
+ */
+OO.ui.ClippableElement.prototype.setClippableElement = function ( $clippable ) {
+       if ( this.$clippable ) {
+               this.$clippable.removeClass( 'oo-ui-clippableElement-clippable' );
+               this.$clippable.css( { width: '', height: '' } );
+               this.$clippable.width(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
+               this.$clippable.css( { overflowX: '', overflowY: '' } );
+       }
+
+       this.$clippable = $clippable.addClass( 'oo-ui-clippableElement-clippable' );
+       this.clip();
+};
+
+/**
+ * Toggle clipping.
+ *
+ * Do not turn clipping on until after the element is attached to the DOM and visible.
+ *
+ * @param {boolean} [clipping] Enable clipping, omit to toggle
+ * @chainable
+ */
+OO.ui.ClippableElement.prototype.toggleClipping = function ( clipping ) {
+       clipping = clipping === undefined ? !this.clipping : !!clipping;
+
+       if ( this.clipping !== clipping ) {
+               this.clipping = clipping;
+               if ( clipping ) {
+                       this.$clippableContainer = this.$( this.getClosestScrollableElementContainer() );
+                       // If the clippable container is the body, we have to listen to scroll events and check
+                       // jQuery.scrollTop on the window because of browser inconsistencies
+                       this.$clippableScroller = this.$clippableContainer.is( 'body' ) ?
+                               this.$( OO.ui.Element.getWindow( this.$clippableContainer ) ) :
+                               this.$clippableContainer;
+                       this.$clippableScroller.on( 'scroll', this.onClippableContainerScrollHandler );
+                       this.$clippableWindow = this.$( this.getElementWindow() )
+                               .on( 'resize', this.onClippableWindowResizeHandler );
+                       // Initial clip after visible
+                       this.clip();
+               } else {
+                       this.$clippable.css( { width: '', height: '' } );
+                       this.$clippable.width(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
+                       this.$clippable.css( { overflowX: '', overflowY: '' } );
+
+                       this.$clippableContainer = null;
+                       this.$clippableScroller.off( 'scroll', this.onClippableContainerScrollHandler );
+                       this.$clippableScroller = null;
+                       this.$clippableWindow.off( 'resize', this.onClippableWindowResizeHandler );
+                       this.$clippableWindow = null;
+               }
+       }
+
+       return this;
 };
 
 /**
- * Fit the label.
+ * Check if the element will be clipped to fit the visible area of the nearest scrollable container.
  *
- * @chainable
+ * @return {boolean} Element will be clipped to the visible area
  */
-OO.ui.LabeledElement.prototype.fitLabel = function () {
-       if ( this.$label.autoEllipsis && this.autoFitLabel ) {
-               this.$label.autoEllipsis( { hasSpan: false, tooltip: true } );
-       }
-       return this;
+OO.ui.ClippableElement.prototype.isClipping = function () {
+       return this.clipping;
 };
 
 /**
- * Element containing an OO.ui.PopupWidget object.
- *
- * @abstract
- * @class
+ * Check if the bottom or right of the element is being clipped by the nearest scrollable container.
  *
- * @constructor
- * @param {Object} [config] Configuration options
- * @cfg {Object} [popup] Configuration to pass to popup
- * @cfg {boolean} [autoClose=true] Popup auto-closes when it loses focus
+ * @return {boolean} Part of the element is being clipped
  */
-OO.ui.PopuppableElement = function OoUiPopuppableElement( config ) {
-       // Configuration initialization
-       config = config || {};
-
-       // Properties
-       this.popup = new OO.ui.PopupWidget( $.extend(
-               { autoClose: true },
-               config.popup,
-               { $: this.$, $autoCloseIgnore: this.$element }
-       ) );
+OO.ui.ClippableElement.prototype.isClipped = function () {
+       return this.clippedHorizontally || this.clippedVertically;
 };
 
-/* Methods */
-
 /**
- * Get popup.
+ * Check if the right of the element is being clipped by the nearest scrollable container.
  *
- * @return {OO.ui.PopupWidget} Popup widget
+ * @return {boolean} Part of the element is being clipped
  */
-OO.ui.PopuppableElement.prototype.getPopup = function () {
-       return this.popup;
+OO.ui.ClippableElement.prototype.isClippedHorizontally = function () {
+       return this.clippedHorizontally;
 };
 
 /**
- * Element with a title.
- *
- * Titles are rendered by the browser and are made visible when hovering the element. Titles are
- * not visible on touch devices.
- *
- * @abstract
- * @class
+ * Check if the bottom of the element is being clipped by the nearest scrollable container.
  *
- * @constructor
- * @param {jQuery} $label Titled node, assigned to #$titled
- * @param {Object} [config] Configuration options
- * @cfg {string|Function} [title] Title text or a function that returns text
+ * @return {boolean} Part of the element is being clipped
  */
-OO.ui.TitledElement = function OoUiTitledElement( $titled, config ) {
-       // Config intialization
-       config = config || {};
-
-       // Properties
-       this.$titled = $titled;
-       this.title = null;
-
-       // Initialization
-       this.setTitle( config.title || this.constructor.static.title );
+OO.ui.ClippableElement.prototype.isClippedVertically = function () {
+       return this.clippedVertically;
 };
 
-/* Setup */
-
-OO.initClass( OO.ui.TitledElement );
-
-/* Static Properties */
-
 /**
- * Title.
+ * Set the ideal size. These are the dimensions the element will have when it's not being clipped.
  *
- * @static
- * @inheritable
- * @property {string|Function} Title text or a function that returns text
+ * @param {number|string} [width] Width as a number of pixels or CSS string with unit suffix
+ * @param {number|string} [height] Height as a number of pixels or CSS string with unit suffix
  */
-OO.ui.TitledElement.static.title = null;
+OO.ui.ClippableElement.prototype.setIdealSize = function ( width, height ) {
+       this.idealWidth = width;
+       this.idealHeight = height;
 
-/* Methods */
+       if ( !this.clipping ) {
+               // Update dimensions
+               this.$clippable.css( { width: width, height: height } );
+       }
+       // While clipping, idealWidth and idealHeight are not considered
+};
 
 /**
- * Set title.
+ * Clip element to visible boundaries and allow scrolling when needed. Call this method when
+ * the element's natural height changes.
+ *
+ * Element will be clipped the bottom or right of the element is within 10px of the edge of, or
+ * overlapped by, the visible area of the nearest scrollable container.
  *
- * @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 ) {
-       this.title = title = OO.ui.resolveMsg( title ) || null;
+OO.ui.ClippableElement.prototype.clip = function () {
+       if ( !this.clipping ) {
+               // this.$clippableContainer and this.$clippableWindow are null, so the below will fail
+               return this;
+       }
+
+       var buffer = 10,
+               cOffset = this.$clippable.offset(),
+               $container = this.$clippableContainer.is( 'body' ) ?
+                       this.$clippableWindow : this.$clippableContainer,
+               ccOffset = $container.offset() || { top: 0, left: 0 },
+               ccHeight = $container.innerHeight() - buffer,
+               ccWidth = $container.innerWidth() - buffer,
+               scrollTop = this.$clippableScroller.scrollTop(),
+               scrollLeft = this.$clippableScroller.scrollLeft(),
+               desiredWidth = ( ccOffset.left + scrollLeft + ccWidth ) - cOffset.left,
+               desiredHeight = ( ccOffset.top + scrollTop + ccHeight ) - cOffset.top,
+               naturalWidth = this.$clippable.prop( 'scrollWidth' ),
+               naturalHeight = this.$clippable.prop( 'scrollHeight' ),
+               clipWidth = desiredWidth < naturalWidth,
+               clipHeight = desiredHeight < naturalHeight;
 
-       if ( typeof title === 'string' && title.length ) {
-               this.$titled.attr( 'title', title );
+       if ( clipWidth ) {
+               this.$clippable.css( { overflowX: 'scroll', width: desiredWidth } );
        } else {
-               this.$titled.removeAttr( 'title' );
+               this.$clippable.css( 'width', this.idealWidth || '' );
+               this.$clippable.width(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
+               this.$clippable.css( 'overflowX', '' );
+       }
+       if ( clipHeight ) {
+               this.$clippable.css( { overflowY: 'scroll', height: desiredHeight } );
+       } else {
+               this.$clippable.css( 'height', this.idealHeight || '' );
+               this.$clippable.height(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
+               this.$clippable.css( 'overflowY', '' );
        }
 
-       return this;
-};
+       this.clippedHorizontally = clipWidth;
+       this.clippedVertically = clipHeight;
 
-/**
- * Get title.
- *
- * @return {string} Title string
- */
-OO.ui.TitledElement.prototype.getTitle = function () {
-       return this.title;
+       return this;
 };
 
 /**
@@ -4428,7 +4962,8 @@ OO.ui.TitledElement.prototype.getTitle = function () {
  * @abstract
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.IconedElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.FlaggedElement
  *
  * @constructor
  * @param {OO.ui.ToolGroup} toolGroup
@@ -4436,20 +4971,23 @@ OO.ui.TitledElement.prototype.getTitle = function () {
  * @cfg {string|Function} [title] Title text or a function that returns text
  */
 OO.ui.Tool = function OoUiTool( toolGroup, config ) {
-       // Config intialization
+       // Configuration initialization
        config = config || {};
 
        // Parent constructor
        OO.ui.Tool.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
+       OO.ui.IconElement.call( this, config );
+       OO.ui.FlaggedElement.call( this, config );
 
        // Properties
        this.toolGroup = toolGroup;
        this.toolbar = this.toolGroup.getToolbar();
        this.active = false;
        this.$title = this.$( '<span>' );
+       this.$titleText = this.$( '<span>' );
+       this.$accel = this.$( '<span>' );
        this.$link = this.$( '<a>' );
        this.title = null;
 
@@ -4457,7 +4995,11 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
        this.toolbar.connect( this, { updateState: 'onUpdateState' } );
 
        // Initialization
-       this.$title.addClass( 'oo-ui-tool-title' );
+       this.$titleText.addClass( 'oo-ui-tool-title-text' );
+       this.$accel.addClass( 'oo-ui-tool-accel' );
+       this.$title
+               .addClass( 'oo-ui-tool-title' )
+               .append( this.$titleText, this.$accel );
        this.$link
                .addClass( 'oo-ui-tool-link' )
                .append( this.$icon, this.$title )
@@ -4476,7 +5018,8 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.Tool, OO.ui.Widget );
-OO.mixinClass( OO.ui.Tool, OO.ui.IconedElement );
+OO.mixinClass( OO.ui.Tool, OO.ui.IconElement );
+OO.mixinClass( OO.ui.Tool, OO.ui.FlaggedElement );
 
 /* Events */
 
@@ -4588,7 +5131,7 @@ OO.ui.Tool.prototype.onSelect = function () {
 /**
  * Check if the button is active.
  *
- * @param {boolean} Button is active
+ * @return {boolean} Button is active
  */
 OO.ui.Tool.prototype.isActive = function () {
        return this.active;
@@ -4647,13 +5190,8 @@ OO.ui.Tool.prototype.updateTitle = function () {
                accel = this.toolbar.getToolAccelerator( this.constructor.static.name ),
                tooltipParts = [];
 
-       this.$title.empty()
-               .text( this.title )
-               .append(
-                       this.$( '<span>' )
-                               .addClass( 'oo-ui-tool-accel' )
-                               .text( accel )
-               );
+       this.$titleText.text( this.title );
+       this.$accel.text( accel );
 
        if ( titleTooltips && typeof this.title === 'string' && this.title.length ) {
                tooltipParts.push( this.title );
@@ -4700,7 +5238,7 @@ OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {
 
        // Mixin constructors
        OO.EventEmitter.call( this );
-       OO.ui.GroupElement.call( this, this.$( '<div>' ), config );
+       OO.ui.GroupElement.call( this, config );
 
        // Properties
        this.toolFactory = toolFactory;
@@ -4714,7 +5252,7 @@ OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {
        // Events
        this.$element
                .add( this.$bar ).add( this.$group ).add( this.$actions )
-               .on( 'mousedown touchstart', OO.ui.bind( this.onPointerDown, this ) );
+               .on( 'mousedown touchstart', this.onPointerDown.bind( this ) );
 
        // Initialization
        this.$group.addClass( 'oo-ui-toolbar-tools' );
@@ -4809,7 +5347,7 @@ OO.ui.Toolbar.prototype.setup = function ( groups ) {
                                group.type = 'list';
                        }
                        if ( group.label === undefined ) {
-                               group.label = 'ooui-toolbar-more';
+                               group.label = OO.ui.msg( 'ooui-toolbar-more' );
                        }
                }
                // Check type has been registered
@@ -4915,7 +5453,7 @@ OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
        OO.ui.ToolGroup.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.GroupElement.call( this, this.$( '<div>' ), config );
+       OO.ui.GroupElement.call( this, config );
 
        // Properties
        this.toolbar = toolbar;
@@ -4926,14 +5464,14 @@ OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
        this.exclude = config.exclude || [];
        this.promote = config.promote || [];
        this.demote = config.demote || [];
-       this.onCapturedMouseUpHandler = OO.ui.bind( this.onCapturedMouseUp, this );
+       this.onCapturedMouseUpHandler = this.onCapturedMouseUp.bind( this );
 
        // Events
        this.$element.on( {
-               'mousedown touchstart': OO.ui.bind( this.onPointerDown, this ),
-               'mouseup touchend': OO.ui.bind( this.onPointerUp, this ),
-               mouseover: OO.ui.bind( this.onMouseOver, this ),
-               mouseout: OO.ui.bind( this.onMouseOut, this )
+               'mousedown touchstart': this.onPointerDown.bind( this ),
+               'mouseup touchend': this.onPointerUp.bind( this ),
+               mouseover: this.onMouseOver.bind( this ),
+               mouseout: this.onMouseOut.bind( this )
        } );
        this.toolbar.getToolFactory().connect( this, { register: 'onToolFactoryRegister' } );
        this.aggregate( { disable: 'itemDisable' } );
@@ -5515,10 +6053,7 @@ OO.ui.ProcessDialog.prototype.initialize = function () {
                $: this.$,
                label: OO.ui.msg( 'ooui-dialog-process-dismiss' )
        } );
-       this.retryButton = new OO.ui.ButtonWidget( {
-               $: this.$,
-               label: OO.ui.msg( 'ooui-dialog-process-retry' )
-       } );
+       this.retryButton = new OO.ui.ButtonWidget( { $: this.$ } );
        this.$errors = this.$( '<div>' );
        this.$errorsTitle = this.$( '<div>' );
 
@@ -5586,7 +6121,7 @@ OO.ui.ProcessDialog.prototype.attachActions = function () {
  */
 OO.ui.ProcessDialog.prototype.executeAction = function ( action ) {
        OO.ui.ProcessDialog.super.prototype.executeAction.call( this, action )
-               .fail( OO.ui.bind( this.showErrors, this ) );
+               .fail( this.showErrors.bind( this ) );
 };
 
 /**
@@ -5612,12 +6147,16 @@ OO.ui.ProcessDialog.prototype.fitLabel = function () {
 OO.ui.ProcessDialog.prototype.showErrors = function ( errors ) {
        var i, len, $item,
                items = [],
-               recoverable = true;
+               recoverable = true,
+               warning = false;
 
        for ( i = 0, len = errors.length; i < len; i++ ) {
                if ( !errors[i].isRecoverable() ) {
                        recoverable = false;
                }
+               if ( errors[i].isWarning() ) {
+                       warning = true;
+               }
                $item = this.$( '<div>' )
                        .addClass( 'oo-ui-processDialog-error' )
                        .append( errors[i].getMessage() );
@@ -5629,6 +6168,11 @@ OO.ui.ProcessDialog.prototype.showErrors = function ( errors ) {
        } else {
                this.currentAction.setDisabled( true );
        }
+       if ( warning ) {
+               this.retryButton.setLabel( OO.ui.msg( 'ooui-dialog-process-continue' ) );
+       } else {
+               this.retryButton.setLabel( OO.ui.msg( 'ooui-dialog-process-retry' ) );
+       }
        this.retryButton.toggle( recoverable );
        this.$errorsTitle.after( this.$errorItems );
        this.$errors.show().scrollTop( 0 );
@@ -5657,7 +6201,7 @@ OO.ui.ProcessDialog.prototype.hideErrors = function () {
  * @cfg {boolean} [editable=false] Show controls for adding, removing and reordering pages
  */
 OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
-       // Initialize configuration
+       // Configuration initialization
        config = config || {};
 
        // Parent constructor
@@ -5695,7 +6239,7 @@ OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
        }
        if ( this.autoFocus ) {
                // Event 'focus' does not bubble, but 'focusin' does
-               this.stackLayout.onDOMEvent( 'focusin', OO.ui.bind( this.onStackLayoutFocus, this ) );
+               this.stackLayout.onDOMEvent( 'focusin', this.onStackLayoutFocus.bind( this ) );
        }
 
        // Initialization
@@ -6073,76 +6617,81 @@ OO.ui.BookletLayout.prototype.updateOutlineWidget = function () {
 /**
  * Layout made of a field and optional label.
  *
- * @class
- * @extends OO.ui.Layout
- * @mixins OO.ui.LabeledElement
- *
  * 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 use will need to fill out all
+ *  - 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
  *
+ * @class
+ * @extends OO.ui.Layout
+ * @mixins OO.ui.LabelElement
+ *
  * @constructor
- * @param {OO.ui.Widget} field Field widget
+ * @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.
  */
-OO.ui.FieldLayout = function OoUiFieldLayout( field, config ) {
-       var popupButtonWidget;
-       // Config initialization
+OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
+       // Configuration initialization
        config = $.extend( { align: 'left' }, config );
 
        // Parent constructor
        OO.ui.FieldLayout.super.call( this, config );
 
        // Mixin constructors
-       this.$help = this.$( '<div>' );
-       OO.ui.LabeledElement.call( this, this.$( '<label>' ), config );
-       if ( config.help ) {
-               popupButtonWidget = new OO.ui.PopupButtonWidget( $.extend(
-                       {
-                               $: this.$,
-                               frameless: true,
-                               icon: 'info',
-                               title: config.help
-                       },
-                       config,
-                       { label: null }
-               ) );
-               popupButtonWidget.getPopup().$body.append( this.getElementDocument().createTextNode( config.help ) );
-               this.$help = popupButtonWidget.$element;
-       }
+       OO.ui.LabelElement.call( this, config );
 
        // Properties
        this.$field = this.$( '<div>' );
-       this.field = field;
+       this.fieldWidget = fieldWidget;
        this.align = null;
+       if ( config.help ) {
+               this.popupButtonWidget = new OO.ui.PopupButtonWidget( {
+                       $: this.$,
+                       classes: [ 'oo-ui-fieldLayout-help' ],
+                       framed: false,
+                       icon: 'info'
+               } );
+
+               this.popupButtonWidget.getPopup().$body.append(
+                       this.$( '<div>' )
+                               .text( config.help )
+                               .addClass( 'oo-ui-fieldLayout-help-content' )
+               );
+               this.$help = this.popupButtonWidget.$element;
+       } else {
+               this.$help = this.$( [] );
+       }
 
        // Events
-       if ( this.field instanceof OO.ui.InputWidget ) {
-               this.$label.on( 'click', OO.ui.bind( this.onLabelClick, this ) );
+       if ( this.fieldWidget instanceof OO.ui.InputWidget ) {
+               this.$label.on( 'click', this.onLabelClick.bind( this ) );
        }
-       this.field.connect( this, { disable: 'onFieldDisable' } );
+       this.fieldWidget.connect( this, { disable: 'onFieldDisable' } );
 
        // Initialization
        this.$element.addClass( 'oo-ui-fieldLayout' );
        this.$field
                .addClass( 'oo-ui-fieldLayout-field' )
-               .toggleClass( 'oo-ui-fieldLayout-disable', this.field.isDisabled() )
-               .append( this.field.$element );
+               .toggleClass( 'oo-ui-fieldLayout-disable', this.fieldWidget.isDisabled() )
+               .append( this.fieldWidget.$element );
        this.setAlignment( config.align );
 };
 
 /* Setup */
 
 OO.inheritClass( OO.ui.FieldLayout, OO.ui.Layout );
-OO.mixinClass( OO.ui.FieldLayout, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.FieldLayout, OO.ui.LabelElement );
+
+/* Static Properties */
+
+OO.ui.FieldLayout.static.tagName = 'label';
 
 /* Methods */
 
@@ -6161,7 +6710,7 @@ OO.ui.FieldLayout.prototype.onFieldDisable = function ( value ) {
  * @param {jQuery.Event} e Mouse click event
  */
 OO.ui.FieldLayout.prototype.onLabelClick = function () {
-       this.field.simulateLabelClick();
+       this.fieldWidget.simulateLabelClick();
        return false;
 };
 
@@ -6171,12 +6720,13 @@ OO.ui.FieldLayout.prototype.onLabelClick = function () {
  * @return {OO.ui.Widget} Field widget
  */
 OO.ui.FieldLayout.prototype.getField = function () {
-       return this.field;
+       return this.fieldWidget;
 };
 
 /**
  * Set the field alignment mode.
  *
+ * @private
  * @param {string} value Alignment mode, either 'left', 'right', 'top' or 'inline'
  * @chainable
  */
@@ -6192,17 +6742,16 @@ OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
                } else {
                        this.$element.append( this.$help, this.$label, this.$field );
                }
-               // Set classes
+               // Set classes. The following classes can be used here:
+               // * oo-ui-fieldLayout-align-left
+               // * oo-ui-fieldLayout-align-right
+               // * oo-ui-fieldLayout-align-top
+               // * oo-ui-fieldLayout-align-inline
                if ( this.align ) {
                        this.$element.removeClass( 'oo-ui-fieldLayout-align-' + this.align );
                }
+               this.$element.addClass( 'oo-ui-fieldLayout-align-' + value );
                this.align = value;
-               // The following classes can be used here:
-               // oo-ui-fieldLayout-align-left
-               // oo-ui-fieldLayout-align-right
-               // oo-ui-fieldLayout-align-top
-               // oo-ui-fieldLayout-align-inline
-               this.$element.addClass( 'oo-ui-fieldLayout-align-' + this.align );
        }
 
        return this;
@@ -6215,26 +6764,25 @@ OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
  *
  * @class
  * @extends OO.ui.Layout
- * @mixins OO.ui.LabeledElement
- * @mixins OO.ui.IconedElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.LabelElement
  * @mixins OO.ui.GroupElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string} [icon] Symbolic icon name
  * @cfg {OO.ui.FieldLayout[]} [items] Items to add
  */
 OO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) {
-       // Config initialization
+       // Configuration initialization
        config = config || {};
 
        // Parent constructor
        OO.ui.FieldsetLayout.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.IconedElement.call( this, this.$( '<div>' ), config );
-       OO.ui.LabeledElement.call( this, this.$( '<div>' ), config );
-       OO.ui.GroupElement.call( this, this.$( '<div>' ), config );
+       OO.ui.IconElement.call( this, config );
+       OO.ui.LabelElement.call( this, config );
+       OO.ui.GroupElement.call( this, config );
 
        // Initialization
        this.$element
@@ -6248,14 +6796,10 @@ OO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.FieldsetLayout, OO.ui.Layout );
-OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.IconedElement );
-OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.IconElement );
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.LabelElement );
 OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.GroupElement );
 
-/* Static Properties */
-
-OO.ui.FieldsetLayout.static.tagName = 'div';
-
 /**
  * Layout with an HTML form.
  *
@@ -6264,6 +6808,9 @@ OO.ui.FieldsetLayout.static.tagName = 'div';
  *
  * @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
  */
 OO.ui.FormLayout = function OoUiFormLayout( config ) {
        // Configuration initialization
@@ -6273,10 +6820,16 @@ OO.ui.FormLayout = function OoUiFormLayout( config ) {
        OO.ui.FormLayout.super.call( this, config );
 
        // Events
-       this.$element.on( 'submit', OO.ui.bind( this.onFormSubmit, this ) );
+       this.$element.on( 'submit', this.onFormSubmit.bind( this ) );
 
        // Initialization
-       this.$element.addClass( 'oo-ui-formLayout' );
+       this.$element
+               .addClass( 'oo-ui-formLayout' )
+               .attr( {
+                       method: config.method,
+                       action: config.action,
+                       enctype: config.enctype
+               } );
 };
 
 /* Setup */
@@ -6316,12 +6869,12 @@ OO.ui.FormLayout.prototype.onFormSubmit = function () {
  * @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 columns as ratios
+ * @cfg {number[]} [heights] Heights of rows as ratios
  */
 OO.ui.GridLayout = function OoUiGridLayout( panels, config ) {
        var i, len, widths;
 
-       // Config initialization
+       // Configuration initialization
        config = config || {};
 
        // Parent constructor
@@ -6342,10 +6895,7 @@ OO.ui.GridLayout = function OoUiGridLayout( panels, config ) {
                this.layout( config.widths || [ 1 ], config.heights || [ 1 ] );
        } else {
                // Arrange in columns by default
-               widths = [];
-               for ( i = 0, len = this.panels.length; i < len; i++ ) {
-                       widths[i] = 1;
-               }
+               widths = this.panels.map( function () { return 1; } );
                this.layout( widths, [ 1 ] );
        }
 };
@@ -6364,10 +6914,6 @@ OO.inheritClass( OO.ui.GridLayout, OO.ui.Layout );
  * @event update
  */
 
-/* Static Properties */
-
-OO.ui.GridLayout.static.tagName = 'div';
-
 /* Methods */
 
 /**
@@ -6417,27 +6963,22 @@ OO.ui.GridLayout.prototype.layout = function ( widths, heights ) {
  * @fires update
  */
 OO.ui.GridLayout.prototype.update = function () {
-       var x, y, panel,
+       var x, y, panel, width, height, dimensions,
                i = 0,
-               left = 0,
                top = 0,
-               dimensions,
-               width = 0,
-               height = 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++ ) {
-                       panel = this.panels[i];
                        width = this.widths[x];
+                       panel = this.panels[i];
                        dimensions = {
                                width: Math.round( width * 100 ) + '%',
                                height: Math.round( height * 100 ) + '%',
-                               top: Math.round( top * 100 ) + '%',
-                               // HACK: Work around IE bug by setting visibility: hidden; if width or height is zero
-                               visibility: width === 0 || height === 0 ? 'hidden' : ''
+                               top: Math.round( top * 100 ) + '%'
                        };
                        // If RTL, reverse:
                        if ( OO.ui.Element.getDir( this.$.context ) === 'rtl' ) {
@@ -6445,6 +6986,12 @@ OO.ui.GridLayout.prototype.update = function () {
                        } else {
                                dimensions.left = Math.round( 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;
@@ -6466,7 +7013,7 @@ OO.ui.GridLayout.prototype.update = function () {
  * @return {OO.ui.PanelLayout} The panel at the given postion
  */
 OO.ui.GridLayout.prototype.getPanel = function ( x, y ) {
-       return this.panels[( x * this.widths.length ) + y];
+       return this.panels[ ( x * this.widths.length ) + y ];
 };
 
 /**
@@ -6482,8 +7029,12 @@ OO.ui.GridLayout.prototype.getPanel = function ( x, y ) {
  * @cfg {boolean} [expanded=true] Expand size to fill the entire parent element
  */
 OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
-       // Config initialization
-       config = config || {};
+       // Configuration initialization
+       config = $.extend( {
+               scrollable: false,
+               padded: false,
+               expanded: true
+       }, config );
 
        // Parent constructor
        OO.ui.PanelLayout.super.call( this, config );
@@ -6493,12 +7044,10 @@ OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
        if ( config.scrollable ) {
                this.$element.addClass( 'oo-ui-panelLayout-scrollable' );
        }
-
        if ( config.padded ) {
                this.$element.addClass( 'oo-ui-panelLayout-padded' );
        }
-
-       if ( config.expanded === undefined || config.expanded ) {
+       if ( config.expanded ) {
                this.$element.addClass( 'oo-ui-panelLayout-expanded' );
        }
 };
@@ -6635,14 +7184,14 @@ OO.ui.PageLayout.prototype.setActive = function ( active ) {
  * @cfg {OO.ui.Layout[]} [items] Layouts to add
  */
 OO.ui.StackLayout = function OoUiStackLayout( config ) {
-       // Config initialization
+       // Configuration initialization
        config = $.extend( { scrollable: true }, config );
 
        // Parent constructor
        OO.ui.StackLayout.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.GroupElement.call( this, this.$element, config );
+       OO.ui.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
 
        // Properties
        this.currentItem = null;
@@ -6828,9 +7377,9 @@ OO.ui.BarToolGroup.static.name = 'bar';
  * @abstract
  * @class
  * @extends OO.ui.ToolGroup
- * @mixins OO.ui.IconedElement
- * @mixins OO.ui.IndicatedElement
- * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
  * @mixins OO.ui.TitledElement
  * @mixins OO.ui.ClippableElement
  *
@@ -6847,22 +7396,22 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
        OO.ui.PopupToolGroup.super.call( this, toolbar, config );
 
        // Mixin constructors
-       OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
-       OO.ui.IndicatedElement.call( this, this.$( '<span>' ), config );
-       OO.ui.LabeledElement.call( this, this.$( '<span>' ), config );
-       OO.ui.TitledElement.call( this, this.$element, config );
-       OO.ui.ClippableElement.call( this, this.$group, config );
+       OO.ui.IconElement.call( this, config );
+       OO.ui.IndicatorElement.call( this, config );
+       OO.ui.LabelElement.call( this, config );
+       OO.ui.TitledElement.call( this, config );
+       OO.ui.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
 
        // Properties
        this.active = false;
        this.dragging = false;
-       this.onBlurHandler = OO.ui.bind( this.onBlur, this );
+       this.onBlurHandler = this.onBlur.bind( this );
        this.$handle = this.$( '<span>' );
 
        // Events
        this.$handle.on( {
-               'mousedown touchstart': OO.ui.bind( this.onHandlePointerDown, this ),
-               'mouseup touchend': OO.ui.bind( this.onHandlePointerUp, this )
+               'mousedown touchstart': this.onHandlePointerDown.bind( this ),
+               'mouseup touchend': this.onHandlePointerUp.bind( this )
        } );
 
        // Initialization
@@ -6887,9 +7436,9 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.PopupToolGroup, OO.ui.ToolGroup );
-OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IconedElement );
-OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IndicatedElement );
-OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IconElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.LabelElement );
 OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.TitledElement );
 OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.ClippableElement );
 
@@ -6966,13 +7515,25 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
        if ( this.active !== value ) {
                this.active = value;
                if ( value ) {
-                       this.setClipping( true );
-                       this.$element.addClass( 'oo-ui-popupToolGroup-active' );
                        this.getElementDocument().addEventListener( 'mouseup', this.onBlurHandler, true );
+
+                       // Try anchoring the popup to the left first
+                       this.$element.addClass( 'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left' );
+                       this.toggleClipping( true );
+                       if ( this.isClippedHorizontally() ) {
+                               // Anchoring to the left caused the popup to clip, so anchor it to the right instead
+                               this.toggleClipping( false );
+                               this.$element
+                                       .removeClass( 'oo-ui-popupToolGroup-left' )
+                                       .addClass( 'oo-ui-popupToolGroup-right' );
+                               this.toggleClipping( true );
+                       }
                } else {
-                       this.setClipping( false );
-                       this.$element.removeClass( 'oo-ui-popupToolGroup-active' );
                        this.getElementDocument().removeEventListener( 'mouseup', this.onBlurHandler, true );
+                       this.$element.removeClass(
+                               'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left  oo-ui-popupToolGroup-right'
+                       );
+                       this.toggleClipping( false );
                }
        }
 };
@@ -6980,14 +7541,32 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
 /**
  * Drop down list layout of tools as labeled icon buttons.
  *
+ * This layout allows some tools to be collapsible, controlled by a "More" / "Fewer" option at the
+ * bottom of the main list. These are not automatically positioned at the bottom of the list; you
+ * may want to use the 'promote' and 'demote' configuration options to achieve this.
+ *
  * @class
  * @extends OO.ui.PopupToolGroup
  *
  * @constructor
  * @param {OO.ui.Toolbar} toolbar
  * @param {Object} [config] Configuration options
+ * @cfg {Array} [allowCollapse] List of tools that can be collapsed. Remaining tools will be always
+ *  shown.
+ * @cfg {Array} [forceExpand] List of tools that *may not* be collapsed. All remaining tools will be
+ *  allowed to be collapsed.
+ * @cfg {boolean} [expanded=false] Whether the collapsible tools are expanded by default
  */
 OO.ui.ListToolGroup = function OoUiListToolGroup( toolbar, config ) {
+       // Configuration intialization
+       config = config || {};
+
+       // Properties (must be set before parent constructor, which calls #populate)
+       this.allowCollapse = config.allowCollapse;
+       this.forceExpand = config.forceExpand;
+       this.expanded = config.expanded !== undefined ? config.expanded : false;
+       this.collapsibleTools = [];
+
        // Parent constructor
        OO.ui.ListToolGroup.super.call( this, toolbar, config );
 
@@ -7005,6 +7584,96 @@ OO.ui.ListToolGroup.static.accelTooltips = true;
 
 OO.ui.ListToolGroup.static.name = 'list';
 
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ListToolGroup.prototype.populate = function () {
+       var i, len, allowCollapse = [];
+
+       OO.ui.ListToolGroup.super.prototype.populate.call( this );
+
+       // Update the list of collapsible tools
+       if ( this.allowCollapse !== undefined ) {
+               allowCollapse = this.allowCollapse;
+       } else if ( this.forceExpand !== undefined ) {
+               allowCollapse = OO.simpleArrayDifference( Object.keys( this.tools ), this.forceExpand );
+       }
+
+       this.collapsibleTools = [];
+       for ( i = 0, len = allowCollapse.length; i < len; i++ ) {
+               if ( this.tools[ allowCollapse[i] ] !== undefined ) {
+                       this.collapsibleTools.push( this.tools[ allowCollapse[i] ] );
+               }
+       }
+
+       // Keep at the end, even when tools are added
+       this.$group.append( this.getExpandCollapseTool().$element );
+
+       this.getExpandCollapseTool().toggle( this.collapsibleTools.length !== 0 );
+
+       // Calling jQuery's .hide() and then .show() on a detached element caches the default value of its
+       // 'display' attribute and restores it, and the tool uses a <span> and can be hidden and re-shown.
+       // Is this a jQuery bug? http://jsfiddle.net/gtj4hu3h/
+       if ( this.getExpandCollapseTool().$element.css( 'display' ) === 'inline' ) {
+               this.getExpandCollapseTool().$element.css( 'display', 'inline-block' );
+       }
+
+       this.updateCollapsibleState();
+};
+
+OO.ui.ListToolGroup.prototype.getExpandCollapseTool = function () {
+       if ( this.expandCollapseTool === undefined ) {
+               var ExpandCollapseTool = function () {
+                       ExpandCollapseTool.super.apply( this, arguments );
+               };
+
+               OO.inheritClass( ExpandCollapseTool, OO.ui.Tool );
+
+               ExpandCollapseTool.prototype.onSelect = function () {
+                       this.toolGroup.expanded = !this.toolGroup.expanded;
+                       this.toolGroup.updateCollapsibleState();
+                       this.setActive( false );
+               };
+               ExpandCollapseTool.prototype.onUpdateState = function () {
+                       // Do nothing. Tool interface requires an implementation of this function.
+               };
+
+               ExpandCollapseTool.static.name = 'more-fewer';
+
+               this.expandCollapseTool = new ExpandCollapseTool( this );
+       }
+       return this.expandCollapseTool;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ListToolGroup.prototype.onPointerUp = function ( e ) {
+       var ret = OO.ui.ListToolGroup.super.prototype.onPointerUp.call( this, e );
+
+       // Do not close the popup when the user wants to show more/fewer tools
+       if ( this.$( e.target ).closest( '.oo-ui-tool-name-more-fewer' ).length ) {
+               // Prevent the popup list from being hidden
+               this.setActive( true );
+       }
+
+       return ret;
+};
+
+OO.ui.ListToolGroup.prototype.updateCollapsibleState = function () {
+       var i, len;
+
+       this.getExpandCollapseTool()
+               .setIcon( this.expanded ? 'collapse' : 'expand' )
+               .setTitle( OO.ui.msg( this.expanded ? 'ooui-toolgroup-collapse' : 'ooui-toolgroup-expand' ) );
+
+       for ( i = 0, len = this.collapsibleTools.length; i < len; i++ ) {
+               this.collapsibleTools[i].toggle( this.expanded );
+       }
+};
+
 /**
  * Drop down menu layout of tools as selectable menu items.
  *
@@ -7066,7 +7735,7 @@ OO.ui.MenuToolGroup.prototype.onUpdateState = function () {
  * @abstract
  * @class
  * @extends OO.ui.Tool
- * @mixins OO.ui.PopuppableElement
+ * @mixins OO.ui.PopupElement
  *
  * @constructor
  * @param {OO.ui.Toolbar} toolbar
@@ -7077,7 +7746,7 @@ OO.ui.PopupTool = function OoUiPopupTool( toolbar, config ) {
        OO.ui.PopupTool.super.call( this, toolbar, config );
 
        // Mixin constructors
-       OO.ui.PopuppableElement.call( this, config );
+       OO.ui.PopupElement.call( this, config );
 
        // Initialization
        this.$element
@@ -7088,7 +7757,7 @@ OO.ui.PopupTool = function OoUiPopupTool( toolbar, config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.PopupTool, OO.ui.Tool );
-OO.mixinClass( OO.ui.PopupTool, OO.ui.PopuppableElement );
+OO.mixinClass( OO.ui.PopupTool, OO.ui.PopupElement );
 
 /* Methods */
 
@@ -7124,12 +7793,11 @@ OO.ui.PopupTool.prototype.onUpdateState = function () {
  * @extends OO.ui.GroupElement
  *
  * @constructor
- * @param {jQuery} $group Container node, assigned to #$group
  * @param {Object} [config] Configuration options
  */
-OO.ui.GroupWidget = function OoUiGroupWidget( $element, config ) {
+OO.ui.GroupWidget = function OoUiGroupWidget( config ) {
        // Parent constructor
-       OO.ui.GroupWidget.super.call( this, $element, config );
+       OO.ui.GroupWidget.super.call( this, config );
 };
 
 /* Setup */
@@ -7216,21 +7884,26 @@ OO.ui.ItemWidget.prototype.setElementGroup = function ( group ) {
  *
  * 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
  *
  * @constructor
  * @param {OO.ui.TextInputWidget} input Input widget
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$overlay=this.$( 'body' )] Overlay layer
+ * @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 ) {
-       // Config intialization
+       // Configuration initialization
        config = config || {};
 
        // Properties
        this.lookupInput = input;
-       this.$overlay = config.$overlay || this.$( 'body,.oo-ui-window-overlay' ).last();
+       this.$overlay = config.$overlay || this.$element;
        this.lookupMenu = new OO.ui.TextInputMenuWidget( this, {
                $: OO.ui.Element.getJQuery( this.$overlay ),
                input: this.lookupInput,
@@ -7239,21 +7912,22 @@ OO.ui.LookupInputWidget = function OoUiLookupInputWidget( input, config ) {
        this.lookupCache = {};
        this.lookupQuery = null;
        this.lookupRequest = null;
-       this.populating = false;
+       this.lookupsDisabled = false;
+       this.lookupInputFocused = false;
 
        // Events
-       this.$overlay.append( this.lookupMenu.$element );
-
        this.lookupInput.$input.on( {
-               focus: OO.ui.bind( this.onLookupInputFocus, this ),
-               blur: OO.ui.bind( this.onLookupInputBlur, this ),
-               mousedown: OO.ui.bind( this.onLookupInputMouseDown, this )
+               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 */
@@ -7264,7 +7938,8 @@ OO.ui.LookupInputWidget = function OoUiLookupInputWidget( input, config ) {
  * @param {jQuery.Event} e Input focus event
  */
 OO.ui.LookupInputWidget.prototype.onLookupInputFocus = function () {
-       this.openLookupMenu();
+       this.lookupInputFocused = true;
+       this.populateLookupMenu();
 };
 
 /**
@@ -7273,7 +7948,8 @@ OO.ui.LookupInputWidget.prototype.onLookupInputFocus = function () {
  * @param {jQuery.Event} e Input blur event
  */
 OO.ui.LookupInputWidget.prototype.onLookupInputBlur = function () {
-       this.lookupMenu.toggle( false );
+       this.closeLookupMenu();
+       this.lookupInputFocused = false;
 };
 
 /**
@@ -7282,7 +7958,13 @@ OO.ui.LookupInputWidget.prototype.onLookupInputBlur = function () {
  * @param {jQuery.Event} e Input mouse down event
  */
 OO.ui.LookupInputWidget.prototype.onLookupInputMouseDown = function () {
-       this.openLookupMenu();
+       // 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();
+       }
 };
 
 /**
@@ -7291,7 +7973,23 @@ OO.ui.LookupInputWidget.prototype.onLookupInputMouseDown = function () {
  * @param {string} value New input value
  */
 OO.ui.LookupInputWidget.prototype.onLookupInputChange = function () {
-       this.openLookupMenu();
+       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
+               // MenuWidget will close itself when the user presses Esc.
+               this.abortLookupRequest();
+               this.lookupMenu.clearItems();
+       }
 };
 
 /**
@@ -7304,35 +8002,61 @@ OO.ui.LookupInputWidget.prototype.getLookupMenu = function () {
 };
 
 /**
- * Open the menu.
+ * 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 () {
-       var value = this.lookupInput.getValue();
-
-       if ( this.lookupMenu.$input.is( ':focus' ) && $.trim( value ) !== '' ) {
-               this.populateLookupMenu();
+       if ( !this.lookupMenu.isEmpty() ) {
                this.lookupMenu.toggle( true );
-       } else {
-               this.lookupMenu
-                       .clearItems()
-                       .toggle( false );
        }
+       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;
 };
 
 /**
- * Populate lookup menu with current information.
+ * 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;
+       var widget = this,
+               value = this.lookupInput.getValue();
+
+       if ( this.lookupsDisabled ) {
+               return;
+       }
 
-       if ( !this.populating ) {
-               this.populating = true;
+       // 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();
@@ -7341,15 +8065,12 @@ OO.ui.LookupInputWidget.prototype.populateLookupMenu = function () {
                                                .addItems( items )
                                                .toggle( true );
                                        widget.initializeLookupMenuSelection();
-                                       widget.openLookupMenu();
                                } else {
-                                       widget.lookupMenu.toggle( true );
+                                       widget.lookupMenu.toggle( false );
                                }
-                               widget.populating = false;
                        } )
                        .fail( function () {
                                widget.lookupMenu.clearItems();
-                               widget.populating = false;
                        } );
        }
 
@@ -7357,7 +8078,7 @@ OO.ui.LookupInputWidget.prototype.populateLookupMenu = function () {
 };
 
 /**
- * Set selection in the lookup menu with current information.
+ * Select and highlight the first selectable item in the menu.
  *
  * @chainable
  */
@@ -7372,50 +8093,74 @@ OO.ui.LookupInputWidget.prototype.initializeLookupMenuSelection = function () {
  * 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
+ * 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();
+               deferred = $.Deferred(),
+               ourRequest;
 
-       if ( value && value !== this.lookupQuery ) {
-               // Abort current request if query has changed
-               if ( this.lookupRequest ) {
-                       this.lookupRequest.abort();
-                       this.lookupQuery = null;
-                       this.lookupRequest = null;
-               }
-               if ( value in this.lookupCache ) {
-                       deferred.resolve( this.getLookupMenuItemsFromData( this.lookupCache[value] ) );
-               } else {
-                       this.lookupQuery = value;
-                       this.lookupRequest = this.getLookupRequest()
-                               .always( function () {
+       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;
-                               } )
-                               .done( function ( data ) {
                                        widget.lookupCache[value] = widget.getLookupCacheItemFromData( data );
                                        deferred.resolve( widget.getLookupMenuItemsFromData( widget.lookupCache[value] ) );
-                               } )
-                               .fail( function () {
+                               }
+                       } )
+                       .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();
-                               } );
-                       this.pushPending();
-                       this.lookupRequest.always( function () {
-                               widget.popPending();
+                               }
                        } );
-               }
        }
        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 {jqXHR} jQuery AJAX object, or promise object with an .abort() method
+ * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method
  */
 OO.ui.LookupInputWidget.prototype.getLookupRequest = function () {
        // Stub, implemented in subclass
@@ -7423,26 +8168,25 @@ OO.ui.LookupInputWidget.prototype.getLookupRequest = function () {
 };
 
 /**
- * Handle successful lookup request.
- *
- * Overriding methods should call #populateLookupMenu when results are available and cache results
- * for future lookups in #lookupCache as an array of #OO.ui.MenuItemWidget objects.
+ * Get a list of menu item widgets from the data stored by the lookup request's done handler.
  *
  * @abstract
- * @param {Mixed} data Response from server
+ * @param {Mixed} data Cached result data, usually an array
+ * @return {OO.ui.MenuItemWidget[]} Menu items
  */
-OO.ui.LookupInputWidget.prototype.onLookupRequestDone = function () {
+OO.ui.LookupInputWidget.prototype.getLookupMenuItemsFromData = function () {
        // Stub, implemented in subclass
+       return [];
 };
 
 /**
- * Get a list of menu item widgets from the data stored by the lookup request's done handler.
+ * Get lookup cache item from server response data.
  *
  * @abstract
- * @param {Mixed} data Cached result data, usually an array
- * @return {OO.ui.MenuItemWidget[]} Menu items
+ * @param {Mixed} data Response from server
+ * @return {Mixed} Cached result data
  */
-OO.ui.LookupInputWidget.prototype.getLookupMenuItemsFromData = function () {
+OO.ui.LookupInputWidget.prototype.getLookupCacheItemFromData = function () {
        // Stub, implemented in subclass
        return [];
 };
@@ -7455,7 +8199,7 @@ OO.ui.LookupInputWidget.prototype.getLookupMenuItemsFromData = function () {
  * @class
  * @extends OO.ui.Widget
  * @mixins OO.ui.GroupElement
- * @mixins OO.ui.IconedElement
+ * @mixins OO.ui.IconElement
  *
  * @constructor
  * @param {OO.ui.OutlineWidget} outline Outline to control
@@ -7463,14 +8207,14 @@ OO.ui.LookupInputWidget.prototype.getLookupMenuItemsFromData = function () {
  */
 OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, config ) {
        // Configuration initialization
-       config = $.extend( { icon: 'add-item' }, config );
+       config = $.extend( { icon: 'add' }, config );
 
        // Parent constructor
        OO.ui.OutlineControlsWidget.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.GroupElement.call( this, this.$( '<div>' ), config );
-       OO.ui.IconedElement.call( this, this.$( '<div>' ), config );
+       OO.ui.GroupElement.call( this, config );
+       OO.ui.IconElement.call( this, config );
 
        // Properties
        this.outline = outline;
@@ -7517,7 +8261,7 @@ OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, confi
 
 OO.inheritClass( OO.ui.OutlineControlsWidget, OO.ui.Widget );
 OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.GroupElement );
-OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.IconedElement );
+OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.IconElement );
 
 /* Events */
 
@@ -7633,14 +8377,17 @@ OO.ui.ToggleWidget.prototype.setValue = function ( value ) {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {OO.ui.ButtonWidget} [items] Buttons to add
+ * @cfg {OO.ui.ButtonWidget[]} [items] Buttons to add
  */
 OO.ui.ButtonGroupWidget = function OoUiButtonGroupWidget( config ) {
+       // Configuration initialization
+       config = config || {};
+
        // Parent constructor
        OO.ui.ButtonGroupWidget.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.GroupElement.call( this, this.$element, config );
+       OO.ui.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
 
        // Initialization
        this.$element.addClass( 'oo-ui-buttonGroupWidget' );
@@ -7659,12 +8406,12 @@ OO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.GroupElement );
  *
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.ButtonedElement
- * @mixins OO.ui.IconedElement
- * @mixins OO.ui.IndicatedElement
- * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.ButtonElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
  * @mixins OO.ui.TitledElement
- * @mixins OO.ui.FlaggableElement
+ * @mixins OO.ui.FlaggedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -7679,12 +8426,12 @@ OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
        OO.ui.ButtonWidget.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.ButtonedElement.call( this, this.$( '<a>' ), config );
-       OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
-       OO.ui.IndicatedElement.call( this, this.$( '<span>' ), config );
-       OO.ui.LabeledElement.call( this, this.$( '<span>' ), config );
-       OO.ui.TitledElement.call( this, this.$button, config );
-       OO.ui.FlaggableElement.call( this, config );
+       OO.ui.ButtonElement.call( this, config );
+       OO.ui.IconElement.call( this, config );
+       OO.ui.IndicatorElement.call( this, config );
+       OO.ui.LabelElement.call( this, config );
+       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );
+       OO.ui.FlaggedElement.call( this, config );
 
        // Properties
        this.href = null;
@@ -7693,8 +8440,8 @@ OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
 
        // Events
        this.$button.on( {
-               click: OO.ui.bind( this.onClick, this ),
-               keypress: OO.ui.bind( this.onKeyPress, this )
+               click: this.onClick.bind( this ),
+               keypress: this.onKeyPress.bind( this )
        } );
 
        // Initialization
@@ -7709,12 +8456,12 @@ OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.ButtonWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.ButtonedElement );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IconedElement );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IndicatedElement );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.ButtonElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.LabelElement );
 OO.mixinClass( OO.ui.ButtonWidget, OO.ui.TitledElement );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.FlaggableElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.FlaggedElement );
 
 /* Events */
 
@@ -7748,7 +8495,7 @@ OO.ui.ButtonWidget.prototype.onClick = function () {
  */
 OO.ui.ButtonWidget.prototype.onKeyPress = function ( e ) {
        if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
-               this.onClick();
+               this.emit( 'click' );
                if ( this.isHyperlink ) {
                        return true;
                }
@@ -7821,19 +8568,24 @@ OO.ui.ButtonWidget.prototype.setTarget = function ( target ) {
  *
  * @class
  * @extends OO.ui.ButtonWidget
+ * @mixins OO.ui.PendingElement
  *
  * @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
  */
 OO.ui.ActionWidget = function OoUiActionWidget( config ) {
-       // Config intialization
+       // Configuration initialization
        config = $.extend( { framed: false }, config );
 
        // Parent constructor
        OO.ui.ActionWidget.super.call( this, config );
 
+       // Mixin constructors
+       OO.ui.PendingElement.call( this, config );
+
        // Properties
        this.action = config.action || '';
        this.modes = config.modes || [];
@@ -7847,6 +8599,7 @@ OO.ui.ActionWidget = function OoUiActionWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.ActionWidget, OO.ui.ButtonWidget );
+OO.mixinClass( OO.ui.ActionWidget, OO.ui.PendingElement );
 
 /* Events */
 
@@ -7911,7 +8664,7 @@ OO.ui.ActionWidget.prototype.propagateResize = function () {
  */
 OO.ui.ActionWidget.prototype.setIcon = function () {
        // Mixin method
-       OO.ui.IconedElement.prototype.setIcon.apply( this, arguments );
+       OO.ui.IconElement.prototype.setIcon.apply( this, arguments );
        this.propagateResize();
 
        return this;
@@ -7922,7 +8675,7 @@ OO.ui.ActionWidget.prototype.setIcon = function () {
  */
 OO.ui.ActionWidget.prototype.setLabel = function () {
        // Mixin method
-       OO.ui.LabeledElement.prototype.setLabel.apply( this, arguments );
+       OO.ui.LabelElement.prototype.setLabel.apply( this, arguments );
        this.propagateResize();
 
        return this;
@@ -7933,7 +8686,7 @@ OO.ui.ActionWidget.prototype.setLabel = function () {
  */
 OO.ui.ActionWidget.prototype.setFlags = function () {
        // Mixin method
-       OO.ui.FlaggableElement.prototype.setFlags.apply( this, arguments );
+       OO.ui.FlaggedElement.prototype.setFlags.apply( this, arguments );
        this.propagateResize();
 
        return this;
@@ -7944,7 +8697,7 @@ OO.ui.ActionWidget.prototype.setFlags = function () {
  */
 OO.ui.ActionWidget.prototype.clearFlags = function () {
        // Mixin method
-       OO.ui.FlaggableElement.prototype.clearFlags.apply( this, arguments );
+       OO.ui.FlaggedElement.prototype.clearFlags.apply( this, arguments );
        this.propagateResize();
 
        return this;
@@ -7969,7 +8722,7 @@ OO.ui.ActionWidget.prototype.toggle = function () {
  *
  * @class
  * @extends OO.ui.ButtonWidget
- * @mixins OO.ui.PopuppableElement
+ * @mixins OO.ui.PopupElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -7979,7 +8732,7 @@ OO.ui.PopupButtonWidget = function OoUiPopupButtonWidget( config ) {
        OO.ui.PopupButtonWidget.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.PopuppableElement.call( this, config );
+       OO.ui.PopupElement.call( this, config );
 
        // Initialization
        this.$element
@@ -7990,7 +8743,7 @@ OO.ui.PopupButtonWidget = function OoUiPopupButtonWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.PopupButtonWidget, OO.ui.ButtonWidget );
-OO.mixinClass( OO.ui.PopupButtonWidget, OO.ui.PopuppableElement );
+OO.mixinClass( OO.ui.PopupButtonWidget, OO.ui.PopupElement );
 
 /* Methods */
 
@@ -8073,135 +8826,61 @@ OO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) {
 };
 
 /**
- * Icon widget.
- *
- * @class
- * @extends OO.ui.Widget
- * @mixins OO.ui.IconedElement
- * @mixins OO.ui.TitledElement
- *
- * @constructor
- * @param {Object} [config] Configuration options
- */
-OO.ui.IconWidget = function OoUiIconWidget( config ) {
-       // Config intialization
-       config = config || {};
-
-       // Parent constructor
-       OO.ui.IconWidget.super.call( this, config );
-
-       // Mixin constructors
-       OO.ui.IconedElement.call( this, this.$element, config );
-       OO.ui.TitledElement.call( this, this.$element, config );
-
-       // Initialization
-       this.$element.addClass( 'oo-ui-iconWidget' );
-};
-
-/* Setup */
-
-OO.inheritClass( OO.ui.IconWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.IconWidget, OO.ui.IconedElement );
-OO.mixinClass( OO.ui.IconWidget, OO.ui.TitledElement );
-
-/* Static Properties */
-
-OO.ui.IconWidget.static.tagName = 'span';
-
-/**
- * Indicator widget.
- *
- * See OO.ui.IndicatedElement for more information.
- *
- * @class
- * @extends OO.ui.Widget
- * @mixins OO.ui.IndicatedElement
- * @mixins OO.ui.TitledElement
- *
- * @constructor
- * @param {Object} [config] Configuration options
- */
-OO.ui.IndicatorWidget = function OoUiIndicatorWidget( config ) {
-       // Config intialization
-       config = config || {};
-
-       // Parent constructor
-       OO.ui.IndicatorWidget.super.call( this, config );
-
-       // Mixin constructors
-       OO.ui.IndicatedElement.call( this, this.$element, config );
-       OO.ui.TitledElement.call( this, this.$element, config );
-
-       // Initialization
-       this.$element.addClass( 'oo-ui-indicatorWidget' );
-};
-
-/* Setup */
-
-OO.inheritClass( OO.ui.IndicatorWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.IndicatedElement );
-OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.TitledElement );
-
-/* Static Properties */
-
-OO.ui.IndicatorWidget.static.tagName = 'span';
-
-/**
- * Inline menu of options.
+ * Dropdown menu of options.
  *
- * Inline menus provide a control for accessing a menu and compose a menu within the widget, which
+ * Dropdown menus provide a control for accessing a menu and compose a menu within the widget, which
  * can be accessed using the #getMenu method.
  *
- * Use with OO.ui.MenuOptionWidget.
+ * Use with OO.ui.MenuItemWidget.
  *
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.IconedElement
- * @mixins OO.ui.IndicatedElement
- * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
  * @mixins OO.ui.TitledElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {Object} [menu] Configuration options to pass to menu widget
  */
-OO.ui.InlineMenuWidget = function OoUiInlineMenuWidget( config ) {
+OO.ui.DropdownWidget = function OoUiDropdownWidget( config ) {
        // Configuration initialization
        config = $.extend( { indicator: 'down' }, config );
 
        // Parent constructor
-       OO.ui.InlineMenuWidget.super.call( this, config );
+       OO.ui.DropdownWidget.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
-       OO.ui.IndicatedElement.call( this, this.$( '<span>' ), config );
-       OO.ui.LabeledElement.call( this, this.$( '<span>' ), config );
-       OO.ui.TitledElement.call( this, this.$label, config );
+       OO.ui.IconElement.call( this, config );
+       OO.ui.IndicatorElement.call( this, config );
+       OO.ui.LabelElement.call( this, config );
+       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$label } ) );
 
        // Properties
        this.menu = new OO.ui.MenuWidget( $.extend( { $: this.$, widget: this }, config.menu ) );
        this.$handle = this.$( '<span>' );
 
        // Events
-       this.$element.on( { click: OO.ui.bind( this.onClick, this ) } );
+       this.$element.on( { click: this.onClick.bind( this ) } );
        this.menu.connect( this, { select: 'onMenuSelect' } );
 
        // Initialization
        this.$handle
-               .addClass( 'oo-ui-inlineMenuWidget-handle' )
+               .addClass( 'oo-ui-dropdownWidget-handle' )
                .append( this.$icon, this.$label, this.$indicator );
        this.$element
-               .addClass( 'oo-ui-inlineMenuWidget' )
+               .addClass( 'oo-ui-dropdownWidget' )
                .append( this.$handle, this.menu.$element );
 };
 
 /* Setup */
 
-OO.inheritClass( OO.ui.InlineMenuWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.IconedElement );
-OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.IndicatedElement );
-OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.LabeledElement );
-OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.TitledElement );
+OO.inheritClass( OO.ui.DropdownWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.TitledElement );
 
 /* Methods */
 
@@ -8210,7 +8889,7 @@ OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.TitledElement );
  *
  * @return {OO.ui.MenuWidget} Menu of widget
  */
-OO.ui.InlineMenuWidget.prototype.getMenu = function () {
+OO.ui.DropdownWidget.prototype.getMenu = function () {
        return this.menu;
 };
 
@@ -8219,7 +8898,7 @@ OO.ui.InlineMenuWidget.prototype.getMenu = function () {
  *
  * @param {OO.ui.MenuItemWidget} item Selected menu item
  */
-OO.ui.InlineMenuWidget.prototype.onMenuSelect = function ( item ) {
+OO.ui.DropdownWidget.prototype.onMenuSelect = function ( item ) {
        var selectedLabel;
 
        if ( !item ) {
@@ -8241,7 +8920,7 @@ OO.ui.InlineMenuWidget.prototype.onMenuSelect = function ( item ) {
  *
  * @param {jQuery.Event} e Mouse click event
  */
-OO.ui.InlineMenuWidget.prototype.onClick = function ( e ) {
+OO.ui.DropdownWidget.prototype.onClick = function ( e ) {
        // Skip clicks within the menu
        if ( $.contains( this.menu.$element[0], e.target ) ) {
                return;
@@ -8257,54 +8936,132 @@ OO.ui.InlineMenuWidget.prototype.onClick = function ( e ) {
        return false;
 };
 
+/**
+ * Icon widget.
+ *
+ * See OO.ui.IconElement for more information.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.TitledElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.IconWidget = function OoUiIconWidget( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.IconWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.IconElement.call( this, $.extend( {}, config, { $icon: this.$element } ) );
+       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-iconWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.IconWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.IconWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.IconWidget, OO.ui.TitledElement );
+
+/* Static Properties */
+
+OO.ui.IconWidget.static.tagName = 'span';
+
+/**
+ * Indicator widget.
+ *
+ * See OO.ui.IndicatorElement for more information.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.TitledElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.IndicatorWidget = function OoUiIndicatorWidget( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.IndicatorWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.IndicatorElement.call( this, $.extend( {}, config, { $indicator: this.$element } ) );
+       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-indicatorWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.IndicatorWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.TitledElement );
+
+/* Static Properties */
+
+OO.ui.IndicatorWidget.static.tagName = 'span';
+
 /**
  * Base class for input widgets.
  *
  * @abstract
  * @class
  * @extends OO.ui.Widget
+ * @mixins OO.ui.FlaggedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {string} [name=''] HTML input name
  * @cfg {string} [value=''] Input value
- * @cfg {boolean} [readOnly=false] Prevent changes
  * @cfg {Function} [inputFilter] Filter function to apply to the input. Takes a string argument and returns a string.
  */
 OO.ui.InputWidget = function OoUiInputWidget( config ) {
-       // Config intialization
-       config = $.extend( { readOnly: false }, config );
+       // Configuration initialization
+       config = config || {};
 
        // Parent constructor
        OO.ui.InputWidget.super.call( this, config );
 
+       // Mixin constructors
+       OO.ui.FlaggedElement.call( this, config );
+
        // Properties
        this.$input = this.getInputElement( config );
        this.value = '';
-       this.readOnly = false;
        this.inputFilter = config.inputFilter;
 
        // Events
-       this.$input.on( 'keydown mouseup cut paste change input select', OO.ui.bind( this.onEdit, this ) );
+       this.$input.on( 'keydown mouseup cut paste change input select', this.onEdit.bind( this ) );
 
        // Initialization
        this.$input
                .attr( 'name', config.name )
                .prop( 'disabled', this.isDisabled() );
-       this.setReadOnly( config.readOnly );
-       this.$element.addClass( 'oo-ui-inputWidget' ).append( this.$input );
+       this.$element.addClass( 'oo-ui-inputWidget' ).append( this.$input, $( '<span>' ) );
        this.setValue( config.value );
 };
 
 /* Setup */
 
 OO.inheritClass( OO.ui.InputWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.InputWidget, OO.ui.FlaggedElement );
 
 /* Events */
 
 /**
  * @event change
- * @param value
+ * @param {string} value
  */
 
 /* Methods */
@@ -8312,6 +9069,7 @@ OO.inheritClass( OO.ui.InputWidget, OO.ui.Widget );
 /**
  * Get input element.
  *
+ * @private
  * @param {Object} [config] Configuration options
  * @return {jQuery} Input element
  */
@@ -8382,8 +9140,9 @@ OO.ui.InputWidget.prototype.setValue = function ( value ) {
 /**
  * Sanitize incoming value.
  *
- * Ensures value is a string, and converts undefined and null to empty strings.
+ * Ensures value is a string, and converts undefined and null to empty string.
  *
+ * @private
  * @param {string} value Original value
  * @return {string} Sanitized value
  */
@@ -8411,57 +9170,188 @@ OO.ui.InputWidget.prototype.simulateLabelClick = function () {
 };
 
 /**
- * Check if the widget is read-only.
+ * @inheritdoc
+ */
+OO.ui.InputWidget.prototype.setDisabled = function ( state ) {
+       OO.ui.InputWidget.super.prototype.setDisabled.call( this, state );
+       if ( this.$input ) {
+               this.$input.prop( 'disabled', this.isDisabled() );
+       }
+       return this;
+};
+
+/**
+ * Focus the input.
  *
- * @return {boolean}
+ * @chainable
  */
-OO.ui.InputWidget.prototype.isReadOnly = function () {
-       return this.readOnly;
+OO.ui.InputWidget.prototype.focus = function () {
+       this.$input[0].focus();
+       return this;
+};
+
+/**
+ * Blur the input.
+ *
+ * @chainable
+ */
+OO.ui.InputWidget.prototype.blur = function () {
+       this.$input[0].blur();
+       return this;
+};
+
+/**
+ * A button that is an input widget. Intended to be used within a OO.ui.FormLayout.
+ *
+ * @class
+ * @extends OO.ui.InputWidget
+ * @mixins OO.ui.ButtonElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.TitledElement
+ * @mixins OO.ui.FlaggedElement
+ *
+ * @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).
+ */
+OO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) {
+       // Configuration initialization
+       config = $.extend( { type: 'button', useInputTag: false }, config );
+
+       // Properties (must be set before parent constructor, which calls #setValue)
+       this.useInputTag = config.useInputTag;
+
+       // Parent constructor
+       OO.ui.ButtonInputWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.ButtonElement.call( this, $.extend( {}, config, { $button: this.$input } ) );
+       OO.ui.IconElement.call( this, config );
+       OO.ui.IndicatorElement.call( this, config );
+       OO.ui.LabelElement.call( this, config );
+       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$input } ) );
+       OO.ui.FlaggedElement.call( this, config );
+
+       // Events
+       this.$input.on( {
+               click: this.onClick.bind( this ),
+               keypress: this.onKeyPress.bind( this )
+       } );
+
+       // Initialization
+       if ( !config.useInputTag ) {
+               this.$input.append( this.$icon, this.$label, this.$indicator );
+       }
+       this.$element.addClass( 'oo-ui-buttonInputWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ButtonInputWidget, OO.ui.InputWidget );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.ButtonElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.TitledElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.FlaggedElement );
+
+/* Events */
+
+/**
+ * @event click
+ */
+
+/* Methods */
+
+/**
+ * Get input element.
+ *
+ * @private
+ * @param {Object} [config] Configuration options
+ * @return {jQuery} Input element
+ */
+OO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) {
+       // Configuration intialization
+       config = config || {};
+
+       var html = '<' + ( config.useInputTag ? 'input' : 'button' ) + ' type="' + config.type + '">';
+
+       return this.$( html );
 };
 
 /**
- * Set the read-only state of the widget.
+ * Set label value.
  *
- * This should probably change the widgets's appearance and prevent it from being used.
+ * Overridden to support setting the 'value' of `<input/>` elements.
  *
- * @param {boolean} state Make input read-only
+ * @param {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
+ *  text; or null for no label
  * @chainable
  */
-OO.ui.InputWidget.prototype.setReadOnly = function ( state ) {
-       this.readOnly = !!state;
-       this.$input.prop( 'readOnly', this.readOnly );
+OO.ui.ButtonInputWidget.prototype.setLabel = function ( label ) {
+       OO.ui.LabelElement.prototype.setLabel.call( this, label );
+
+       if ( this.useInputTag ) {
+               if ( typeof label === 'function' ) {
+                       label = OO.ui.resolveMsg( label );
+               }
+               if ( label instanceof jQuery ) {
+                       label = label.text();
+               }
+               if ( !label ) {
+                       label = '';
+               }
+               this.$input.val( label );
+       }
+
        return this;
 };
 
 /**
- * @inheritdoc
+ * Set the value of the input.
+ *
+ * Overridden to disable for `<input/>` elements, which have value identical to the label.
+ *
+ * @param {string} value New value
+ * @chainable
  */
-OO.ui.InputWidget.prototype.setDisabled = function ( state ) {
-       OO.ui.InputWidget.super.prototype.setDisabled.call( this, state );
-       if ( this.$input ) {
-               this.$input.prop( 'disabled', this.isDisabled() );
+OO.ui.ButtonInputWidget.prototype.setValue = function ( value ) {
+       if ( !this.useInputTag ) {
+               OO.ui.ButtonInputWidget.super.prototype.setValue.call( this, value );
        }
        return this;
 };
 
 /**
- * Focus the input.
+ * Handles mouse click events.
  *
- * @chainable
+ * @param {jQuery.Event} e Mouse click event
+ * @fires click
  */
-OO.ui.InputWidget.prototype.focus = function () {
-       this.$input[0].focus();
-       return this;
+OO.ui.ButtonInputWidget.prototype.onClick = function () {
+       if ( !this.isDisabled() ) {
+               this.emit( 'click' );
+       }
+       return false;
 };
 
 /**
- * Blur the input.
+ * Handles keypress events.
  *
- * @chainable
+ * @param {jQuery.Event} e Keypress event
+ * @fires click
  */
-OO.ui.InputWidget.prototype.blur = function () {
-       this.$input[0].blur();
-       return this;
+OO.ui.ButtonInputWidget.prototype.onKeyPress = function ( e ) {
+       if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
+               this.emit( 'click' );
+       }
+       return false;
 };
 
 /**
@@ -8485,13 +9375,12 @@ OO.ui.CheckboxInputWidget = function OoUiCheckboxInputWidget( config ) {
 
 OO.inheritClass( OO.ui.CheckboxInputWidget, OO.ui.InputWidget );
 
-/* Events */
-
 /* Methods */
 
 /**
  * Get input element.
  *
+ * @private
  * @return {jQuery} Input element
  */
 OO.ui.CheckboxInputWidget.prototype.getInputElement = function () {
@@ -8508,7 +9397,9 @@ OO.ui.CheckboxInputWidget.prototype.getValue = function () {
 };
 
 /**
- * Set value
+ * Set checked state of the checkbox
+ *
+ * @param {boolean} value New value
  */
 OO.ui.CheckboxInputWidget.prototype.setValue = function ( value ) {
        value = !!value;
@@ -8537,43 +9428,56 @@ OO.ui.CheckboxInputWidget.prototype.onEdit = function () {
  *
  * @class
  * @extends OO.ui.InputWidget
- * @mixins OO.ui.IconedElement
- * @mixins OO.ui.IndicatedElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.PendingElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
+ * @cfg {string} [type='text'] HTML tag `type` attribute
  * @cfg {string} [placeholder] Placeholder text
+ * @cfg {boolean} [readOnly=false] Prevent changes
  * @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 {RegExp|string} [validate] Regular expression (or symbolic name referencing
+ *  one, see #static-validationPatterns)
  */
 OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        // Configuration initialization
-       config = config || {};
+       config = $.extend( { readOnly: false }, config );
 
        // Parent constructor
        OO.ui.TextInputWidget.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
-       OO.ui.IndicatedElement.call( this, this.$( '<span>' ), config );
+       OO.ui.IconElement.call( this, config );
+       OO.ui.IndicatorElement.call( this, config );
+       OO.ui.PendingElement.call( this, config );
 
        // Properties
-       this.pending = 0;
+       this.readOnly = false;
        this.multiline = !!config.multiline;
        this.autosize = !!config.autosize;
        this.maxRows = config.maxRows !== undefined ? config.maxRows : 10;
+       this.validate = null;
+
+       this.setValidation( config.validate );
 
        // Events
-       this.$input.on( 'keypress', OO.ui.bind( this.onKeyPress, this ) );
-       this.$element.on( 'DOMNodeInsertedIntoDocument', OO.ui.bind( this.onElementAttach, this ) );
-       this.$icon.on( 'mousedown', OO.ui.bind( this.onIconMouseDown, this ) );
-       this.$indicator.on( 'mousedown', OO.ui.bind( this.onIndicatorMouseDown, this ) );
+       this.$input.on( {
+               keypress: this.onKeyPress.bind( this ),
+               blur: this.setValidityFlag.bind( this )
+       } );
+       this.$element.on( 'DOMNodeInsertedIntoDocument', this.onElementAttach.bind( this ) );
+       this.$icon.on( 'mousedown', this.onIconMouseDown.bind( this ) );
+       this.$indicator.on( 'mousedown', this.onIndicatorMouseDown.bind( this ) );
 
        // Initialization
        this.$element
                .addClass( 'oo-ui-textInputWidget' )
                .append( this.$icon, this.$indicator );
+       this.setReadOnly( config.readOnly );
        if ( config.placeholder ) {
                this.$input.attr( 'placeholder', config.placeholder );
        }
@@ -8583,8 +9487,16 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.TextInputWidget, OO.ui.InputWidget );
-OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IconedElement );
-OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IndicatedElement );
+OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.TextInputWidget, OO.ui.PendingElement );
+
+/* Static properties */
+
+OO.ui.TextInputWidget.static.validationPatterns = {
+       'non-empty': /.+/,
+       integer: /^\d+$/
+};
 
 /* Events */
 
@@ -8676,10 +9588,34 @@ OO.ui.TextInputWidget.prototype.setValue = function ( value ) {
        // Parent method
        OO.ui.TextInputWidget.super.prototype.setValue.call( this, value );
 
+       this.setValidityFlag();
        this.adjustSize();
        return this;
 };
 
+/**
+ * Check if the widget is read-only.
+ *
+ * @return {boolean}
+ */
+OO.ui.TextInputWidget.prototype.isReadOnly = function () {
+       return this.readOnly;
+};
+
+/**
+ * Set the read-only state of the widget.
+ *
+ * This should probably change the widgets's appearance and prevent it from being used.
+ *
+ * @param {boolean} state Make input read-only
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.setReadOnly = function ( state ) {
+       this.readOnly = !!state;
+       this.$input.prop( 'readOnly', this.readOnly );
+       return this;
+};
+
 /**
  * Automatically adjust the size of the text input.
  *
@@ -8688,31 +9624,34 @@ OO.ui.TextInputWidget.prototype.setValue = function ( value ) {
  * @chainable
  */
 OO.ui.TextInputWidget.prototype.adjustSize = function () {
-       var $clone, scrollHeight, innerHeight, outerHeight, maxInnerHeight, idealHeight;
+       var $clone, scrollHeight, innerHeight, outerHeight, maxInnerHeight, measurementError, idealHeight;
 
        if ( this.multiline && this.autosize ) {
                $clone = this.$input.clone()
                        .val( this.$input.val() )
+                       // Set inline height property to 0 to measure scroll height
                        .css( { height: 0 } )
                        .insertAfter( this.$input );
-               // Set inline height property to 0 to measure scroll height
                scrollHeight = $clone[0].scrollHeight;
                // Remove inline height property to measure natural heights
                $clone.css( 'height', '' );
                innerHeight = $clone.innerHeight();
                outerHeight = $clone.outerHeight();
                // Measure max rows height
-               $clone.attr( 'rows', this.maxRows ).css( 'height', 'auto' );
+               $clone.attr( 'rows', this.maxRows ).css( 'height', 'auto' ).val( '' );
                maxInnerHeight = $clone.innerHeight();
-               $clone.removeAttr( 'rows' ).css( 'height', '' );
+               // Difference between reported innerHeight and scrollHeight with no scrollbars present
+               // Equals 1 on Blink-based browsers and 0 everywhere else
+               measurementError = maxInnerHeight - $clone[0].scrollHeight;
                $clone.remove();
-               idealHeight = Math.min( maxInnerHeight, scrollHeight );
+               idealHeight = Math.min( maxInnerHeight, scrollHeight + measurementError );
                // Only apply inline height when expansion beyond natural height is needed
-               this.$input.css(
-                       'height',
+               if ( idealHeight > innerHeight ) {
                        // Use the difference between the inner and outer height as a buffer
-                       idealHeight > outerHeight ? idealHeight + ( outerHeight - innerHeight ) : ''
-               );
+                       this.$input.css( 'height', idealHeight + ( outerHeight - innerHeight ) );
+               } else {
+                       this.$input.css( 'height', '' );
+               }
        }
        return this;
 };
@@ -8720,14 +9659,18 @@ OO.ui.TextInputWidget.prototype.adjustSize = function () {
 /**
  * Get input element.
  *
+ * @private
  * @param {Object} [config] Configuration options
  * @return {jQuery} Input element
  */
 OO.ui.TextInputWidget.prototype.getInputElement = function ( config ) {
-       return config.multiline ? this.$( '<textarea>' ) : this.$( '<input type="text" />' );
-};
+       // Configuration initialization
+       config = config || {};
 
-/* Methods */
+       var type = config.type || 'text';
+
+       return config.multiline ? this.$( '<textarea>' ) : this.$( '<input type="' + type + '" />' );
+};
 
 /**
  * Check if input supports multiple lines.
@@ -8748,54 +9691,46 @@ OO.ui.TextInputWidget.prototype.isAutosizing = function () {
 };
 
 /**
- * Check if input is pending.
+ * Select the contents of the input.
  *
- * @return {boolean}
+ * @chainable
  */
-OO.ui.TextInputWidget.prototype.isPending = function () {
-       return !!this.pending;
+OO.ui.TextInputWidget.prototype.select = function () {
+       this.$input.select();
+       return this;
 };
 
 /**
- * Increase the pending stack.
- *
- * @chainable
+ * Sets the validation pattern to use.
+ * @param {RegExp|string|null} validate Regular expression (or symbolic name referencing
+ *  one, see #static-validationPatterns)
  */
-OO.ui.TextInputWidget.prototype.pushPending = function () {
-       if ( this.pending === 0 ) {
-               this.$element.addClass( 'oo-ui-textInputWidget-pending' );
-               this.$input.addClass( 'oo-ui-texture-pending' );
+OO.ui.TextInputWidget.prototype.setValidation = function ( validate ) {
+       if ( validate instanceof RegExp ) {
+               this.validate = validate;
+       } else {
+               this.validate = this.constructor.static.validationPatterns[validate] || /.*/;
        }
-       this.pending++;
-
-       return this;
 };
 
 /**
- * Reduce the pending stack.
- *
- * Clamped at zero.
- *
- * @chainable
+ * Sets the 'invalid' flag appropriately.
  */
-OO.ui.TextInputWidget.prototype.popPending = function () {
-       if ( this.pending === 1 ) {
-               this.$element.removeClass( 'oo-ui-textInputWidget-pending' );
-               this.$input.removeClass( 'oo-ui-texture-pending' );
-       }
-       this.pending = Math.max( 0, this.pending - 1 );
-
-       return this;
+OO.ui.TextInputWidget.prototype.setValidityFlag = function () {
+       var widget = this;
+       this.isValid().done( function ( valid ) {
+               widget.setFlags( { invalid: !valid } );
+       } );
 };
 
 /**
- * Select the contents of the input.
+ * Returns whether or not the current value is considered valid, according to the
+ * supplied validation pattern.
  *
- * @chainable
+ * @return {jQuery.Deferred}
  */
-OO.ui.TextInputWidget.prototype.select = function () {
-       this.$input.select();
-       return this;
+OO.ui.TextInputWidget.prototype.isValid = function () {
+       return $.Deferred().resolve( !!this.getValue().match( this.validate ) ).promise();
 };
 
 /**
@@ -8808,6 +9743,7 @@ OO.ui.TextInputWidget.prototype.select = function () {
  * @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
  */
 OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
        // Configuration initialization
@@ -8817,12 +9753,18 @@ OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
        OO.ui.ComboBoxWidget.super.call( this, config );
 
        // Properties
+       this.$overlay = config.$overlay || this.$element;
        this.input = new OO.ui.TextInputWidget( $.extend(
                { $: this.$, indicator: 'down', disabled: this.isDisabled() },
                config.input
        ) );
-       this.menu = new OO.ui.MenuWidget( $.extend(
-               { $: this.$, widget: this, input: this.input, disabled: this.isDisabled() },
+       this.menu = new OO.ui.TextInputMenuWidget( this.input, $.extend(
+               {
+                       $: OO.ui.Element.getJQuery( this.$overlay ),
+                       widget: this,
+                       input: this.input,
+                       disabled: this.isDisabled()
+               },
                config.menu
        ) );
 
@@ -8839,10 +9781,8 @@ OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
        } );
 
        // Initialization
-       this.$element.addClass( 'oo-ui-comboBoxWidget' ).append(
-               this.input.$element,
-               this.menu.$element
-       );
+       this.$element.addClass( 'oo-ui-comboBoxWidget' ).append( this.input.$element );
+       this.$overlay.append( this.menu.$element );
        this.onMenuItemsChange();
 };
 
@@ -8900,6 +9840,8 @@ OO.ui.ComboBoxWidget.prototype.onMenuChoose = function ( item ) {
  * Handle menu item change events.
  */
 OO.ui.ComboBoxWidget.prototype.onMenuItemsChange = function () {
+       var match = this.menu.getItemFromData( this.input.getValue() );
+       this.menu.selectItem( match );
        this.$element.toggleClass( 'oo-ui-comboBoxWidget-empty', this.menu.isEmpty() );
 };
 
@@ -8925,27 +9867,28 @@ OO.ui.ComboBoxWidget.prototype.setDisabled = function ( disabled ) {
  *
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.LabelElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  */
 OO.ui.LabelWidget = function OoUiLabelWidget( config ) {
-       // Config intialization
+       // Configuration initialization
        config = config || {};
 
        // Parent constructor
        OO.ui.LabelWidget.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.LabeledElement.call( this, this.$element, config );
+       OO.ui.LabelElement.call( this, $.extend( {}, config, { $label: this.$element } ) );
+       OO.ui.TitledElement.call( this, config );
 
        // Properties
        this.input = config.input;
 
        // Events
        if ( this.input instanceof OO.ui.InputWidget ) {
-               this.$element.on( 'click', OO.ui.bind( this.onClick, this ) );
+               this.$element.on( 'click', this.onClick.bind( this ) );
        }
 
        // Initialization
@@ -8955,11 +9898,12 @@ OO.ui.LabelWidget = function OoUiLabelWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.LabelWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.LabelWidget, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.LabelWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.LabelWidget, OO.ui.TitledElement );
 
 /* Static Properties */
 
-OO.ui.LabelWidget.static.tagName = 'label';
+OO.ui.LabelWidget.static.tagName = 'span';
 
 /* Methods */
 
@@ -8978,8 +9922,8 @@ OO.ui.LabelWidget.prototype.onClick = function () {
  *
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.LabeledElement
- * @mixins OO.ui.FlaggableElement
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.FlaggedElement
  *
  * @constructor
  * @param {Mixed} data Option data
@@ -8987,7 +9931,7 @@ OO.ui.LabelWidget.prototype.onClick = function () {
  * @cfg {string} [rel] Value for `rel` attribute in DOM, allowing per-option styling
  */
 OO.ui.OptionWidget = function OoUiOptionWidget( data, config ) {
-       // Config intialization
+       // Configuration initialization
        config = config || {};
 
        // Parent constructor
@@ -8995,8 +9939,8 @@ OO.ui.OptionWidget = function OoUiOptionWidget( data, config ) {
 
        // Mixin constructors
        OO.ui.ItemWidget.call( this );
-       OO.ui.LabeledElement.call( this, this.$( '<span>' ), config );
-       OO.ui.FlaggableElement.call( this, config );
+       OO.ui.LabelElement.call( this, config );
+       OO.ui.FlaggedElement.call( this, config );
 
        // Properties
        this.data = data;
@@ -9011,22 +9955,17 @@ OO.ui.OptionWidget = function OoUiOptionWidget( data, config ) {
                .attr( 'role', 'option' )
                .addClass( 'oo-ui-optionWidget' )
                .append( this.$label );
-       this.$element
-               .prepend( this.$icon )
-               .append( this.$indicator );
 };
 
 /* Setup */
 
 OO.inheritClass( OO.ui.OptionWidget, OO.ui.Widget );
 OO.mixinClass( OO.ui.OptionWidget, OO.ui.ItemWidget );
-OO.mixinClass( OO.ui.OptionWidget, OO.ui.LabeledElement );
-OO.mixinClass( OO.ui.OptionWidget, OO.ui.FlaggableElement );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.FlaggedElement );
 
 /* Static Properties */
 
-OO.ui.OptionWidget.static.tagName = 'li';
-
 OO.ui.OptionWidget.static.selectable = true;
 
 OO.ui.OptionWidget.static.highlightable = true;
@@ -9104,6 +10043,7 @@ OO.ui.OptionWidget.prototype.setSelected = function ( state ) {
                if ( state && this.constructor.static.scrollIntoViewOnSelect ) {
                        this.scrollElementIntoView();
                }
+               this.updateThemeClasses();
        }
        return this;
 };
@@ -9118,6 +10058,7 @@ OO.ui.OptionWidget.prototype.setHighlighted = function ( state ) {
        if ( this.constructor.static.highlightable ) {
                this.highlighted = !!state;
                this.$element.toggleClass( 'oo-ui-optionWidget-highlighted', state );
+               this.updateThemeClasses();
        }
        return this;
 };
@@ -9132,6 +10073,7 @@ OO.ui.OptionWidget.prototype.setPressed = function ( state ) {
        if ( this.constructor.static.pressable ) {
                this.pressed = !!state;
                this.$element.toggleClass( 'oo-ui-optionWidget-pressed', state );
+               this.updateThemeClasses();
        }
        return this;
 };
@@ -9182,8 +10124,8 @@ OO.ui.OptionWidget.prototype.getData = function () {
  *
  * @class
  * @extends OO.ui.OptionWidget
- * @mixins OO.ui.IconedElement
- * @mixins OO.ui.IndicatedElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
  *
  * @constructor
  * @param {Mixed} data Option data
@@ -9194,8 +10136,8 @@ OO.ui.DecoratedOptionWidget = function OoUiDecoratedOptionWidget( data, config )
        OO.ui.DecoratedOptionWidget.super.call( this, data, config );
 
        // Mixin constructors
-       OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
-       OO.ui.IndicatedElement.call( this, this.$( '<span>' ), config );
+       OO.ui.IconElement.call( this, config );
+       OO.ui.IndicatorElement.call( this, config );
 
        // Initialization
        this.$element
@@ -9207,8 +10149,8 @@ OO.ui.DecoratedOptionWidget = function OoUiDecoratedOptionWidget( data, config )
 /* Setup */
 
 OO.inheritClass( OO.ui.DecoratedOptionWidget, OO.ui.OptionWidget );
-OO.mixinClass( OO.ui.OptionWidget, OO.ui.IconedElement );
-OO.mixinClass( OO.ui.OptionWidget, OO.ui.IndicatedElement );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.IndicatorElement );
 
 /**
  * Option widget that looks like a button.
@@ -9217,7 +10159,7 @@ OO.mixinClass( OO.ui.OptionWidget, OO.ui.IndicatedElement );
  *
  * @class
  * @extends OO.ui.DecoratedOptionWidget
- * @mixins OO.ui.ButtonedElement
+ * @mixins OO.ui.ButtonElement
  *
  * @constructor
  * @param {Mixed} data Option data
@@ -9228,7 +10170,7 @@ OO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( data, config ) {
        OO.ui.ButtonOptionWidget.super.call( this, data, config );
 
        // Mixin constructors
-       OO.ui.ButtonedElement.call( this, this.$( '<a>' ), config );
+       OO.ui.ButtonElement.call( this, config );
 
        // Initialization
        this.$element.addClass( 'oo-ui-buttonOptionWidget' );
@@ -9239,7 +10181,7 @@ OO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( data, config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.ButtonOptionWidget, OO.ui.DecoratedOptionWidget );
-OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.ButtonedElement );
+OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.ButtonElement );
 
 /* Static Properties */
 
@@ -9329,7 +10271,7 @@ OO.ui.MenuSectionItemWidget.static.highlightable = false;
  * @cfg {boolean} [movable] Allow modification from outline controls
  */
 OO.ui.OutlineItemWidget = function OoUiOutlineItemWidget( data, config ) {
-       // Config intialization
+       // Configuration initialization
        config = config || {};
 
        // Parent constructor
@@ -9402,6 +10344,7 @@ OO.ui.OutlineItemWidget.prototype.getLevel = function () {
  */
 OO.ui.OutlineItemWidget.prototype.setMovable = function ( movable ) {
        this.movable = !!movable;
+       this.updateThemeClasses();
        return this;
 };
 
@@ -9415,6 +10358,7 @@ OO.ui.OutlineItemWidget.prototype.setMovable = function ( movable ) {
  */
 OO.ui.OutlineItemWidget.prototype.setRemovable = function ( removable ) {
        this.removable = !!removable;
+       this.updateThemeClasses();
        return this;
 };
 
@@ -9437,6 +10381,7 @@ OO.ui.OutlineItemWidget.prototype.setLevel = function ( level ) {
                        this.$element.removeClass( levelClass + i );
                }
        }
+       this.updateThemeClasses();
 
        return this;
 };
@@ -9446,7 +10391,7 @@ OO.ui.OutlineItemWidget.prototype.setLevel = function ( level ) {
  *
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.LabelElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -9455,6 +10400,7 @@ OO.ui.OutlineItemWidget.prototype.setLevel = function ( level ) {
  * @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 {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
@@ -9462,23 +10408,25 @@ OO.ui.OutlineItemWidget.prototype.setLevel = function ( level ) {
  * @cfg {boolean} [padded] Add padding to the body
  */
 OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
-       // Config intialization
+       // Configuration initialization
        config = config || {};
 
        // Parent constructor
        OO.ui.PopupWidget.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.LabeledElement.call( this, this.$( '<div>' ), config );
-       OO.ui.ClippableElement.call( this, this.$( '<div>' ), config );
+       OO.ui.LabelElement.call( this, config );
+       OO.ui.ClippableElement.call( this, config );
 
        // Properties
        this.visible = false;
        this.$popup = this.$( '<div>' );
        this.$head = this.$( '<div>' );
-       this.$body = this.$clippable;
+       this.$body = this.$( '<div>' );
        this.$anchor = this.$( '<div>' );
-       this.$container = config.$container || this.$( 'body' );
+       // If undefined, will be computed lazily in updateDimensions()
+       this.$container = config.$container;
+       this.containerPadding = config.containerPadding !== undefined ? config.containerPadding : 10;
        this.autoClose = !!config.autoClose;
        this.$autoCloseIgnore = config.$autoCloseIgnore;
        this.transitionTimeout = null;
@@ -9487,7 +10435,7 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
        this.height = config.height !== undefined ? config.height : null;
        this.align = config.align || 'center';
        this.closeButton = new OO.ui.ButtonWidget( { $: this.$, framed: false, icon: 'close' } );
-       this.onMouseDownHandler = OO.ui.bind( this.onMouseDown, this );
+       this.onMouseDownHandler = this.onMouseDown.bind( this );
 
        // Events
        this.closeButton.connect( this, { click: 'onCloseButtonClick' } );
@@ -9516,24 +10464,15 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
        if ( config.padded ) {
                this.$body.addClass( 'oo-ui-popupWidget-body-padded' );
        }
+       this.setClippableElement( this.$body );
 };
 
 /* Setup */
 
 OO.inheritClass( OO.ui.PopupWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.PopupWidget, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.PopupWidget, OO.ui.LabelElement );
 OO.mixinClass( OO.ui.PopupWidget, OO.ui.ClippableElement );
 
-/* Events */
-
-/**
- * @event hide
- */
-
-/**
- * @event show
- */
-
 /* Methods */
 
 /**
@@ -9615,13 +10554,13 @@ OO.ui.PopupWidget.prototype.toggle = function ( show ) {
 
        if ( change ) {
                if ( show ) {
-                       this.setClipping( true );
                        if ( this.autoClose ) {
                                this.bindMouseDownListener();
                        }
                        this.updateDimensions();
+                       this.toggleClipping( true );
                } else {
-                       this.setClipping( false );
+                       this.toggleClipping( false );
                        if ( this.autoClose ) {
                                this.unbindMouseDownListener();
                        }
@@ -9659,26 +10598,36 @@ OO.ui.PopupWidget.prototype.setSize = function ( width, height, transition ) {
  * @chainable
  */
 OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
-       var widget = this,
-               padding = 10,
-               originOffset = Math.round( this.$element.offset().left ),
-               containerLeft = Math.round( this.$container.offset().left ),
-               containerWidth = this.$container.innerWidth(),
-               containerRight = containerLeft + containerWidth,
-               popupOffset = this.width * ( { left: 0, center: -0.5, right: -1 } )[this.align],
-               anchorWidth = this.$anchor.width(),
-               popupLeft = popupOffset - padding,
-               popupRight = popupOffset + padding + this.width + padding,
-               overlapLeft = ( originOffset + popupLeft ) - containerLeft,
-               overlapRight = containerRight - ( originOffset + popupRight );
+       var popupOffset, originOffset, containerLeft, containerWidth, containerRight,
+               popupLeft, popupRight, overlapLeft, overlapRight, anchorWidth,
+               widget = this;
 
-       // Prevent transition from being interrupted
-       clearTimeout( this.transitionTimeout );
-       if ( transition ) {
-               // Enable transition
-               this.$element.addClass( 'oo-ui-popupWidget-transitioning' );
+       if ( !this.$container ) {
+               // Lazy-initialize $container if not specified in constructor
+               this.$container = this.$( this.getClosestScrollableElementContainer() );
        }
 
+       // Set height and width before measuring things, since it might cause our measurements
+       // to change (e.g. due to scrollbars appearing or disappearing)
+       this.$popup.css( {
+               width: this.width,
+               height: this.height !== null ? this.height : 'auto'
+       } );
+
+       // Compute initial popupOffset based on alignment
+       popupOffset = this.width * ( { left: 0, center: -0.5, right: -1 } )[this.align];
+
+       // Figure out if this will cause the popup to go beyond the edge of the container
+       originOffset = Math.round( this.$element.offset().left );
+       containerLeft = Math.round( this.$container.offset().left );
+       containerWidth = this.$container.innerWidth();
+       containerRight = containerLeft + containerWidth;
+       popupLeft = popupOffset - this.containerPadding;
+       popupRight = popupOffset + this.containerPadding + this.width + this.containerPadding;
+       overlapLeft = ( originOffset + popupLeft ) - containerLeft;
+       overlapRight = containerRight - ( originOffset + popupRight );
+
+       // Adjust offset to make the popup not go beyond the edge, if needed
        if ( overlapRight < 0 ) {
                popupOffset += overlapRight;
        } else if ( overlapLeft < 0 ) {
@@ -9686,18 +10635,24 @@ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
        }
 
        // Adjust offset to avoid anchor being rendered too close to the edge
-       if ( this.align === 'right' ) {
-               popupOffset += anchorWidth;
-       } else if ( this.align === 'left' ) {
-               popupOffset -= anchorWidth;
+       // $anchor.width() doesn't work with the pure CSS anchor (returns 0)
+       // TODO: Find a measurement that works for CSS anchors and image anchors
+       anchorWidth = this.$anchor[0].scrollWidth * 2;
+       if ( popupOffset + this.width < anchorWidth ) {
+               popupOffset = anchorWidth - this.width;
+       } else if ( -popupOffset < anchorWidth ) {
+               popupOffset = -anchorWidth;
        }
 
-       // Position body relative to anchor and resize
-       this.$popup.css( {
-               left: popupOffset,
-               width: this.width,
-               height: this.height !== null ? this.height : 'auto'
-       } );
+       // Prevent transition from being interrupted
+       clearTimeout( this.transitionTimeout );
+       if ( transition ) {
+               // Enable transition
+               this.$element.addClass( 'oo-ui-popupWidget-transitioning' );
+       }
+
+       // Position body relative to anchor
+       this.$popup.css( 'margin-left', popupOffset );
 
        if ( transition ) {
                // Prevent transitioning after transition is complete
@@ -9709,9 +10664,77 @@ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
                this.$element.removeClass( 'oo-ui-popupWidget-transitioning' );
        }
 
+       // Reevaluate clipping state since we've relocated and resized the popup
+       this.clip();
+
        return this;
 };
 
+/**
+ * Progress bar widget.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {number} [progress=0] Initial progress
+ */
+OO.ui.ProgressBarWidget = function OoUiProgressBarWidget( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.ProgressBarWidget.super.call( this, config );
+
+       // Properties
+       this.$bar = this.$( '<div>' );
+       this.progress = null;
+
+       // Initialization
+       this.setProgress( config.progress || 0 );
+       this.$bar.addClass( 'oo-ui-progressBarWidget-bar');
+       this.$element
+               .attr( {
+                       role: 'progressbar',
+                       'aria-valuemin': 0,
+                       'aria-valuemax': 100
+               } )
+               .addClass( 'oo-ui-progressBarWidget' )
+               .append( this.$bar );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ProgressBarWidget, OO.ui.Widget );
+
+/* Static Properties */
+
+OO.ui.ProgressBarWidget.static.tagName = 'div';
+
+/* Methods */
+
+/**
+ * Get progress percent
+ *
+ * @return {number} Progress percent
+ */
+OO.ui.ProgressBarWidget.prototype.getProgress = function () {
+       return this.progress;
+};
+
+/**
+ * Set progress percent
+ *
+ * @param {number} progress Progress percent
+ */
+OO.ui.ProgressBarWidget.prototype.setProgress = function ( progress ) {
+       this.progress = progress;
+
+       this.$bar.css( 'width', this.progress + '%' );
+       this.$element.attr( 'aria-valuenow', this.progress );
+};
+
 /**
  * Search widget.
  *
@@ -9753,7 +10776,7 @@ OO.ui.SearchWidget = function OoUiSearchWidget( config ) {
                highlight: 'onResultsHighlight',
                select: 'onResultsSelect'
        } );
-       this.query.$input.on( 'keydown', OO.ui.bind( this.onQueryKeydown, this ) );
+       this.query.$input.on( 'keydown', this.onQueryKeydown.bind( this ) );
 
        // Initialization
        this.$query
@@ -9870,7 +10893,7 @@ OO.ui.SearchWidget.prototype.getResults = function () {
 /**
  * Generic selection of options.
  *
- * Items can contain any rendering, and are uniquely identified by a has of thier data. Any widget
+ * Items can contain any rendering, and are uniquely identified by a hash of their data. Any widget
  * that provides options, from which the user must choose one, should be built on this class.
  *
  * Use together with OO.ui.OptionWidget.
@@ -9884,27 +10907,27 @@ OO.ui.SearchWidget.prototype.getResults = function () {
  * @cfg {OO.ui.OptionWidget[]} [items] Options to add
  */
 OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
-       // Config intialization
+       // Configuration initialization
        config = config || {};
 
        // Parent constructor
        OO.ui.SelectWidget.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.GroupWidget.call( this, this.$element, config );
+       OO.ui.GroupWidget.call( this, $.extend( {}, config, { $group: this.$element } ) );
 
        // Properties
        this.pressed = false;
        this.selecting = null;
        this.hashes = {};
-       this.onMouseUpHandler = OO.ui.bind( this.onMouseUp, this );
-       this.onMouseMoveHandler = OO.ui.bind( this.onMouseMove, this );
+       this.onMouseUpHandler = this.onMouseUp.bind( this );
+       this.onMouseMoveHandler = this.onMouseMove.bind( this );
 
        // Events
        this.$element.on( {
-               mousedown: OO.ui.bind( this.onMouseDown, this ),
-               mouseover: OO.ui.bind( this.onMouseOver, this ),
-               mouseleave: OO.ui.bind( this.onMouseLeave, this )
+               mousedown: this.onMouseDown.bind( this ),
+               mouseover: this.onMouseOver.bind( this ),
+               mouseleave: this.onMouseLeave.bind( this )
        } );
 
        // Initialization
@@ -9955,10 +10978,6 @@ OO.mixinClass( OO.ui.SelectWidget, OO.ui.GroupWidget );
  * @param {OO.ui.OptionWidget[]} items Removed items
  */
 
-/* Static Properties */
-
-OO.ui.SelectWidget.static.tagName = 'ul';
-
 /* Methods */
 
 /**
@@ -10131,7 +11150,7 @@ OO.ui.SelectWidget.prototype.getHighlightedItem = function () {
 OO.ui.SelectWidget.prototype.getItemFromData = function ( data ) {
        var hash = OO.getHash( data );
 
-       if ( hash in this.hashes ) {
+       if ( Object.prototype.hasOwnProperty.call( this.hashes, hash ) ) {
                return this.hashes[hash];
        }
 
@@ -10268,7 +11287,7 @@ OO.ui.SelectWidget.prototype.getRelativeSelectableItem = function ( item, direct
                        // Default to n-1 instead of -1, if nothing is selected let's start at the end
                        Math.min( index, len );
 
-       while ( true ) {
+       while ( len !== 0 ) {
                i = ( i + inc + len ) % len;
                item = this.items[i];
                if ( item instanceof OO.ui.OptionWidget && item.isSelectable() ) {
@@ -10318,7 +11337,7 @@ OO.ui.SelectWidget.prototype.addItems = function ( items, index ) {
        for ( i = 0, len = items.length; i < len; i++ ) {
                item = items[i];
                hash = OO.getHash( item.getData() );
-               if ( hash in this.hashes ) {
+               if ( Object.prototype.hasOwnProperty.call( this.hashes, hash ) ) {
                        // Remove item with same value
                        remove.push( this.hashes[hash] );
                }
@@ -10352,7 +11371,7 @@ OO.ui.SelectWidget.prototype.removeItems = function ( items ) {
        for ( i = 0, len = items.length; i < len; i++ ) {
                item = items[i];
                hash = OO.getHash( item.getData() );
-               if ( hash in this.hashes ) {
+               if ( Object.prototype.hasOwnProperty.call( this.hashes, hash ) ) {
                        // Remove existing item
                        delete this.hashes[hash];
                }
@@ -10433,14 +11452,14 @@ OO.inheritClass( OO.ui.ButtonSelectWidget, OO.ui.SelectWidget );
  * @cfg {boolean} [autoHide=true] Hide the menu when the mouse is pressed outside the menu
  */
 OO.ui.MenuWidget = function OoUiMenuWidget( config ) {
-       // Config intialization
+       // Configuration initialization
        config = config || {};
 
        // Parent constructor
        OO.ui.MenuWidget.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.ClippableElement.call( this, this.$group, config );
+       OO.ui.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
 
        // Properties
        this.flashing = false;
@@ -10451,8 +11470,8 @@ OO.ui.MenuWidget = function OoUiMenuWidget( config ) {
        this.$widget = config.widget ? config.widget.$element : null;
        this.$previousFocus = null;
        this.isolated = !config.input;
-       this.onKeyDownHandler = OO.ui.bind( this.onKeyDown, this );
-       this.onDocumentMouseDownHandler = OO.ui.bind( this.onDocumentMouseDown, this );
+       this.onKeyDownHandler = this.onKeyDown.bind( this );
+       this.onDocumentMouseDownHandler = this.onDocumentMouseDown.bind( this );
 
        // Initialization
        this.$element
@@ -10579,13 +11598,7 @@ OO.ui.MenuWidget.prototype.chooseItem = function ( item ) {
 };
 
 /**
- * Add items.
- *
- * Adding an existing item (by value) will move it.
- *
- * @param {OO.ui.MenuItemWidget[]} items Items to add
- * @param {number} [index] Index to insert items after
- * @chainable
+ * @inheritdoc
  */
 OO.ui.MenuWidget.prototype.addItems = function ( items, index ) {
        var i, len, item;
@@ -10601,13 +11614,42 @@ OO.ui.MenuWidget.prototype.addItems = function ( items, index ) {
        for ( i = 0, len = items.length; i < len; i++ ) {
                item = items[i];
                if ( this.isVisible() ) {
-                       // Defer fitting label until
+                       // Defer fitting label until item has been attached
                        item.fitLabel();
                } else {
                        this.newItems.push( item );
                }
        }
 
+       // Reevaluate clipping
+       this.clip();
+
+       return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuWidget.prototype.removeItems = function ( items ) {
+       // Parent method
+       OO.ui.MenuWidget.super.prototype.removeItems.call( this, items );
+
+       // Reevaluate clipping
+       this.clip();
+
+       return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuWidget.prototype.clearItems = function () {
+       // Parent method
+       OO.ui.MenuWidget.super.prototype.clearItems.call( this );
+
+       // Reevaluate clipping
+       this.clip();
+
        return this;
 };
 
@@ -10618,7 +11660,9 @@ OO.ui.MenuWidget.prototype.toggle = function ( visible ) {
        visible = ( visible === undefined ? !this.visible : !!visible ) && !!this.items.length;
 
        var i, len,
-               change = visible !== this.isVisible();
+               change = visible !== this.isVisible(),
+               elementDoc = this.getElementDocument(),
+               widgetDoc = this.$widget ? this.$widget[0].ownerDocument : null;
 
        // Parent method
        OO.ui.MenuWidget.super.prototype.toggle.call( this, visible );
@@ -10638,13 +11682,19 @@ OO.ui.MenuWidget.prototype.toggle = function ( visible ) {
                                }
                                this.newItems = null;
                        }
-                       this.setClipping( true );
+                       this.toggleClipping( true );
 
                        // Auto-hide
                        if ( this.autoHide ) {
-                               this.getElementDocument().addEventListener(
+                               elementDoc.addEventListener(
                                        'mousedown', this.onDocumentMouseDownHandler, true
                                );
+                               // Support $widget being in a different document
+                               if ( widgetDoc && widgetDoc !== elementDoc ) {
+                                       widgetDoc.addEventListener(
+                                               'mousedown', this.onDocumentMouseDownHandler, true
+                                       );
+                               }
                        }
                } else {
                        this.unbindKeyDownListener();
@@ -10652,10 +11702,16 @@ OO.ui.MenuWidget.prototype.toggle = function ( visible ) {
                                this.$previousFocus[0].focus();
                                this.$previousFocus = null;
                        }
-                       this.getElementDocument().removeEventListener(
+                       elementDoc.removeEventListener(
                                'mousedown', this.onDocumentMouseDownHandler, true
                        );
-                       this.setClipping( false );
+                       // Support $widget being in a different document
+                       if ( widgetDoc && widgetDoc !== elementDoc ) {
+                               widgetDoc.removeEventListener(
+                                       'mousedown', this.onDocumentMouseDownHandler, true
+                               );
+                       }
+                       this.toggleClipping( false );
                }
        }
 
@@ -10665,8 +11721,8 @@ OO.ui.MenuWidget.prototype.toggle = function ( visible ) {
 /**
  * Menu for a text input widget.
  *
- * This menu is specially designed to be positioned beneeth the text input widget. Even if the input
- * is in a different frame, the menu's position is automatically calulated and maintained when the
+ * This menu is specially designed to be positioned beneath the text input widget. Even if the input
+ * is in a different frame, the menu's position is automatically calculated and maintained when the
  * menu is toggled or the window is resized.
  *
  * @class
@@ -10678,13 +11734,16 @@ OO.ui.MenuWidget.prototype.toggle = function ( visible ) {
  * @cfg {jQuery} [$container=input.$element] Element to render menu under
  */
 OO.ui.TextInputMenuWidget = function OoUiTextInputMenuWidget( input, config ) {
+       // Configuration intialization
+       config = config || {};
+
        // Parent constructor
        OO.ui.TextInputMenuWidget.super.call( this, config );
 
        // Properties
        this.input = input;
        this.$container = config.$container || this.input.$element;
-       this.onWindowResizeHandler = OO.ui.bind( this.onWindowResize, this );
+       this.onWindowResizeHandler = this.onWindowResize.bind( this );
 
        // Initialization
        this.$element.addClass( 'oo-ui-textInputMenuWidget' );
@@ -10709,10 +11768,17 @@ OO.ui.TextInputMenuWidget.prototype.onWindowResize = function () {
  * @inheritdoc
  */
 OO.ui.TextInputMenuWidget.prototype.toggle = function ( visible ) {
-       visible = !!visible;
+       visible = visible === undefined ? !this.isVisible() : !!visible;
 
        var change = visible !== this.isVisible();
 
+       if ( change && visible ) {
+               // Make sure the width is set before the parent method runs.
+               // After this we have to call this.position(); again to actually
+               // position ourselves correctly.
+               this.position();
+       }
+
        // Parent method
        OO.ui.TextInputMenuWidget.super.prototype.toggle.call( this, visible );
 
@@ -10724,6 +11790,7 @@ OO.ui.TextInputMenuWidget.prototype.toggle = function ( visible ) {
                        this.$( this.getElementWindow() ).off( 'resize', this.onWindowResizeHandler );
                }
        }
+
        return this;
 };
 
@@ -10733,31 +11800,17 @@ OO.ui.TextInputMenuWidget.prototype.toggle = function ( visible ) {
  * @chainable
  */
 OO.ui.TextInputMenuWidget.prototype.position = function () {
-       var frameOffset,
-               $container = this.$container,
-               dimensions = $container.offset();
+       var $container = this.$container,
+               pos = OO.ui.Element.getRelativePosition( $container, this.$element.offsetParent() );
 
        // Position under input
-       dimensions.top += $container.height();
+       pos.top += $container.height();
+       this.$element.css( pos );
 
-       // Compensate for frame position if in a differnt frame
-       if ( this.input.$.$iframe && this.input.$.context !== this.$element[0].ownerDocument ) {
-               frameOffset = OO.ui.Element.getRelativePosition(
-                       this.input.$.$iframe, this.$element.offsetParent()
-               );
-               dimensions.left += frameOffset.left;
-               dimensions.top += frameOffset.top;
-       } else {
-               // Fix for RTL (for some reason, no need to fix if the frameoffset is set)
-               if ( this.$element.css( 'direction' ) === 'rtl' ) {
-                       dimensions.right = this.$element.parent().position().left -
-                               $container.width() - dimensions.left;
-                       // Erase the value for 'left':
-                       delete dimensions.left;
-               }
-       }
-       this.$element.css( dimensions );
+       // Set width
        this.setIdealSize( $container.width() );
+       // We updated the position, so re-evaluate the clipping state
+       this.clip();
 
        return this;
 };
@@ -10774,7 +11827,7 @@ OO.ui.TextInputMenuWidget.prototype.position = function () {
  * @param {Object} [config] Configuration options
  */
 OO.ui.OutlineWidget = function OoUiOutlineWidget( config ) {
-       // Config intialization
+       // Configuration initialization
        config = config || {};
 
        // Parent constructor
@@ -10814,7 +11867,7 @@ OO.ui.ToggleSwitchWidget = function OoUiToggleSwitchWidget( config ) {
        this.$grip = this.$( '<span>' );
 
        // Events
-       this.$element.on( 'click', OO.ui.bind( this.onClick, this ) );
+       this.$element.on( 'click', this.onClick.bind( this ) );
 
        // Initialization
        this.$glow.addClass( 'oo-ui-toggleSwitchWidget-glow' );
diff --git a/resources/lib/oojs-ui/oojs-ui.rtl.css b/resources/lib/oojs-ui/oojs-ui.rtl.css
deleted file mode 100644 (file)
index deca745..0000000
+++ /dev/null
@@ -1,1271 +0,0 @@
-/*!
- * OOjs UI v0.1.0
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-07-22T21:39:24Z
- */
-/* Textures */
-
-.oo-ui-texture-pending {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-
-.oo-ui-texture-transparency {
-  background-image: /* @embed */ url(images/textures/transparency.png);
-}
-
-/* RTL Definitions */
-
-/* @noflip */
-
-.oo-ui-rtl {
-  direction: rtl;
-}
-
-/* @noflip */
-
-.oo-ui-ltr {
-  direction: ltr;
-}
-
-.oo-ui-frame {
-  padding: 0;
-  margin: 0;
-}
-
-.oo-ui-frame-body {
-  padding: 0;
-  margin: 0;
-  background: none;
-}
-
-.oo-ui-frame-content:focus {
-  outline: none;
-}
-
-.oo-ui-toolbar {
-  clear: both;
-}
-
-.oo-ui-toolbar-bar {
-  line-height: 1em;
-}
-
-.oo-ui-toolbar-bottom .oo-ui-toolbar-bar {
-  position: absolute;
-}
-
-.oo-ui-toolbar-actions {
-  float: left;
-}
-
-.oo-ui-toolbar-tools {
-  float: right;
-}
-
-.oo-ui-toolbar-tools,
-.oo-ui-toolbar-actions,
-.oo-ui-toolbar-shadow {
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-toolbar-actions .oo-ui-popupWidget {
-  -webkit-user-select: all;
-     -moz-user-select: all;
-      -ms-user-select: all;
-          user-select: all;
-  -webkit-touch-callout: default;
-}
-
-.oo-ui-toolbar-shadow {
-  position: absolute;
-  width: 100%;
-  pointer-events: none;
-  background-position: right top;
-  background-repeat: repeat-x;
-}
-
-.oo-ui-toolGroup {
-  display: inline-block;
-  margin: 0.3em;
-  vertical-align: middle;
-}
-
-.oo-ui-toolGroup-empty {
-  display: none;
-}
-
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-window {
-  line-height: 1em;
-}
-
-.oo-ui-window > .oo-ui-window-frame {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.oo-ui-window > .oo-ui-window-frame > .oo-ui-frame {
-  width: 100%;
-  height: 100%;
-}
-
-.oo-ui-window-head,
-.oo-ui-window-foot {
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-window-overlay {
-  position: absolute;
-  top: 0;
-  right: 0;
-}
-
-.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-setup {
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  width: auto;
-  height: auto;
-  padding: 1em;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
-  position: fixed;
-  left: 0;
-  right: 0;
-  max-width: 100%;
-  max-height: 100%;
-  margin: auto;
-  overflow: hidden;
-}
-
-.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
-  top: 0;
-  bottom: 0;
-  width: 100%;
-  height: 100%;
-}
-
-.oo-ui-messageDialog-actions-horizontal {
-  display: table;
-  width: 100%;
-  table-layout: fixed;
-}
-
-.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-buttonedElement-button {
-  display: block;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label {
-  position: relative;
-  top: auto;
-  bottom: auto;
-  display: inline;
-  white-space: nowrap;
-}
-
-.oo-ui-processDialog-location {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.oo-ui-processDialog-title {
-  display: inline;
-}
-
-.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 {
-  right: 0;
-}
-
-.oo-ui-processDialog-actions-primary {
-  left: 0;
-}
-
-.oo-ui-processDialog-errors {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  z-index: 2;
-  display: none;
-  padding: 3em 3em 1.5em 3em;
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button {
-  display: inline-block;
-  vertical-align: middle;
-  cursor: pointer;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  display: none;
-  margin-right: 0;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator {
-  display: none;
-  margin-left: -0.75em;
-}
-
-.oo-ui-buttonedElement.oo-ui-widget-disabled > .oo-ui-buttonedElement-button {
-  cursor: default;
-}
-
-.oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  display: inline-block;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-buttonedElement-frameless {
-  position: relative;
-  display: inline-block;
-}
-
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  display: inline-block;
-  margin-right: 0.25em;
-  vertical-align: middle;
-}
-
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button {
-  display: inline-block;
-  text-align: center;
-  vertical-align: top;
-}
-
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  display: inline-block;
-  line-height: 1.9em;
-  vertical-align: middle;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
-  cursor: default;
-}
-
-.oo-ui-clippableElement-clippable {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.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-outlineWidget {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 3em;
-  right: 0;
-  overflow-y: auto;
-}
-
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
-  position: absolute;
-  left: 0;
-  bottom: 0;
-  right: 0;
-}
-
-.oo-ui-fieldLayout {
-  margin-bottom: 1em;
-}
-
-.oo-ui-fieldLayout:last-child {
-  margin-bottom: 0;
-}
-
-.oo-ui-fieldLayout:before,
-.oo-ui-fieldLayout:after {
-  display: table;
-  content: " ";
-}
-
-.oo-ui-fieldLayout:after {
-  clear: both;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labeledElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
-  display: block;
-  float: right;
-  width: 35%;
-  padding-top: 0.5em;
-  margin-left: 5%;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
-  display: block;
-  float: right;
-  width: 60%;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
-  text-align: left;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labeledElement-label {
-  display: inline-block;
-  padding: 0.75em 0.5em 0.5em 0.5em;
-  vertical-align: middle;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
-  display: inline-block;
-  padding: 0.5em 0;
-  vertical-align: middle;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labeledElement-label {
-  display: inline-block;
-  padding: 0.5em 0;
-}
-
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  margin-top: 0.25em;
-}
-
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
-  z-index: 1;
-}
-
-.oo-ui-fieldsetLayout {
-  position: relative;
-  padding: 0;
-  margin: 0;
-}
-
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
-  margin-top: 2em;
-}
-
-.oo-ui-fieldsetLayout-labeled {
-  margin-top: -0.75em;
-}
-
-.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label {
-  padding: 0.25em 0;
-  margin-bottom: 0.5em;
-}
-
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-labeledElement-label {
-  padding-right: 1.75em;
-  line-height: 1.33em;
-}
-
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-iconedElement-icon {
-  position: absolute;
-  top: 0.25em;
-  right: 0;
-  display: block;
-  width: 2em;
-  height: 2em;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-gridLayout {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-}
-
-.oo-ui-labelWidget {
-  display: inline-block;
-  padding: 0.5em 0;
-}
-
-.oo-ui-panelLayout {
-  position: relative;
-}
-
-.oo-ui-panelLayout-scrollable {
-  overflow-y: auto;
-}
-
-.oo-ui-panelLayout-expanded {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-}
-
-.oo-ui-stackLayout > .oo-ui-panelLayout {
-  display: none;
-}
-
-.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
-  position: relative;
-  display: block;
-}
-
-.oo-ui-barToolGroup > .oo-ui-iconedElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labeledElement-label {
-  display: none;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool {
-  position: relative;
-  display: inline-block;
-  vertical-align: top;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link {
-  display: block;
-  height: 1.5em;
-  padding: 0.25em;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  display: block;
-  width: 1.5em;
-  height: 1.5em;
-}
-
-.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-listToolGroup .oo-ui-toolGroup-tools {
-  padding: 0.25em;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool {
-  display: inline-block;
-  width: 100%;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool-link {
-  display: block;
-  padding-left: 0.5em;
-  white-space: nowrap;
-  cursor: pointer;
-}
-
-.oo-ui-listToolGroup .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 {
-  padding: 0.25em 0 0.25em 0;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool {
-  display: block;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-link {
-  display: block;
-  padding: 0 0.25em 0 1em;
-  white-space: nowrap;
-  cursor: pointer;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  background-image: none;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  background-image: /* @embed */ url(images/icons/check.svg);
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
-  cursor: default;
-}
-
-.oo-ui-popupToolGroup {
-  position: relative;
-  height: 2em;
-  min-width: 2.5em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-indicatedElement.oo-ui-iconedElement {
-  min-width: 3.5em;
-}
-
-.oo-ui-popupToolGroup-handle {
-  display: block;
-  cursor: pointer;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
-  position: absolute;
-  top: 0;
-  width: 2em;
-  height: 2em;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator {
-  left: 0;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
-  right: 0.25em;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
-  margin: 0 1em;
-  font-size: 0.8em;
-  line-height: 2.6em;
-}
-
-.oo-ui-popupToolGroup-header {
-  margin: 0 0.6em;
-  font-size: 0.8em;
-  font-weight: bold;
-  line-height: 2.6em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
-  cursor: default;
-}
-
-.oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
-  margin-right: 3em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
-  margin-left: 2.25em;
-}
-
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-  position: absolute;
-  top: 2em;
-  right: -1px;
-  z-index: 4;
-  display: none;
-}
-
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconedElement-icon {
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
-  display: block;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  display: inline-block;
-  width: 2em;
-  height: 2em;
-  margin-left: 0.25em;
-  vertical-align: middle;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-  display: inline-block;
-  font-size: 0.8em;
-  line-height: 2em;
-  vertical-align: middle;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
-  display: none;
-}
-
-.oo-ui-popupTool .oo-ui-popupWidget {
-  margin-right: 1.25em;
-  font-size: 0.8em;
-}
-
-.oo-ui-popupTool .oo-ui-popupWidget-popup,
-.oo-ui-popupTool .oo-ui-popupWidget-anchor {
-  z-index: 4;
-}
-
-.oo-ui-iconWidget {
-  display: inline-block;
-  width: 1.9em;
-  height: 1.9em;
-  line-height: 2.5em;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-  opacity: 0.8;
-}
-
-.oo-ui-iconWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-
-.oo-ui-indicatorWidget {
-  display: inline-block;
-  width: 1.9em;
-  height: 1.9em;
-  line-height: 2.5em;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-  opacity: 0.8;
-}
-
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-
-.oo-ui-selectWidget {
-  padding: 0;
-  margin: 0;
-  list-style: none;
-}
-
-.oo-ui-optionWidget {
-  position: relative;
-  display: block;
-  margin: 0;
-  list-style: none;
-  cursor: pointer;
-  border: none;
-}
-
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-  cursor: default;
-}
-
-.oo-ui-optionWidget .oo-ui-labeledElement-label {
-  display: block;
-  overflow: hidden;
-  line-height: 1.5em;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator {
-  position: absolute;
-  top: 50%;
-  width: 2em;
-  height: 2em;
-  margin-top: -1em;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon {
-  right: 0.5em;
-}
-
-.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator {
-  left: 0.5em;
-}
-
-.oo-ui-menuWidget {
-  position: absolute;
-}
-
-.oo-ui-menuWidget input {
-  position: absolute;
-  width: 0;
-  height: 0;
-  overflow: hidden;
-  opacity: 0;
-}
-
-.oo-ui-popupWidget-popup {
-  position: absolute;
-  z-index: 1;
-  overflow: hidden;
-}
-
-.oo-ui-popupWidget-anchor {
-  z-index: 1;
-  display: none;
-}
-
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
-  margin-top: 7px;
-}
-
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
-  position: absolute;
-  display: block;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-popupWidget-head {
-  height: 2.5em;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
-  float: left;
-  margin: 0.25em;
-}
-
-.oo-ui-popupWidget-head .oo-ui-labeledElement-label {
-  float: right;
-  margin: 0.75em 1em;
-  cursor: default;
-}
-
-.oo-ui-popupWidget-body {
-  overflow: hidden;
-  clear: both;
-}
-
-.oo-ui-popupWidget-body-padded {
-  padding: 0 1em;
-}
-
-.oo-ui-buttonGroupWidget {
-  border-radius: 0.3em;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
-  margin-bottom: -1px;
-  margin-right: -1px;
-  border-radius: 0;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:first-child .oo-ui-buttonedElement-button {
-  margin-right: 0;
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:last-child .oo-ui-buttonedElement-button {
-  border-top-left-radius: 0.3em;
-  border-bottom-left-radius: 0.3em;
-}
-
-.oo-ui-buttonOptionWidget {
-  display: inline-block;
-  background-color: transparent;
-}
-
-.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
-  position: relative;
-  height: 1.9em;
-}
-
-.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
-  position: static;
-  display: inline-block;
-  height: 1.9em;
-  margin-top: 0;
-  vertical-align: middle;
-}
-
-.oo-ui-buttonSelectWidget {
-  display: inline-block;
-  white-space: nowrap;
-}
-
-.oo-ui-buttonWidget {
-  display: inline-block;
-  vertical-align: middle;
-}
-
-.oo-ui-inlineMenuWidget {
-  position: relative;
-  display: inline-block;
-  min-width: 20em;
-  margin: 0.25em 0;
-}
-
-.oo-ui-inlineMenuWidget-handle {
-  display: inline-block;
-  width: 100%;
-  height: 2.5em;
-  cursor: pointer;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
-  position: absolute;
-  top: 0;
-  width: 2.5em;
-  height: 2.5em;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator {
-  left: 0;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
-  right: 0.25em;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
-  margin: 0 0.5em;
-  line-height: 2.5em;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-iconedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
-  margin-right: 3em;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-indicatedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
-  margin-left: 2em;
-}
-
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
-  z-index: 1;
-  width: 100%;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
-  cursor: default;
-}
-
-.oo-ui-menuItemWidget {
-  position: relative;
-}
-
-.oo-ui-menuItemWidget .oo-ui-iconedElement-icon {
-  display: none;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  background-color: transparent;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconedElement-icon {
-  display: block;
-}
-
-.oo-ui-menuSectionItemWidget {
-  cursor: default;
-}
-
-.oo-ui-outlineControlsWidget {
-  height: 3em;
-}
-
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-  float: right;
-  height: 2em;
-  padding: 0;
-  margin: 0.5em;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
-  float: right;
-  width: 1.5em;
-  height: 2em;
-  margin: 0.5em 0.5em 0.5em 0;
-  background-position: left center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-outlineControlsWidget-items {
-  float: right;
-  margin-right: 0;
-}
-
-.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
-  float: right;
-}
-
-.oo-ui-outlineControlsWidget-movers {
-  float: left;
-}
-
-.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
-  float: left;
-}
-
-.oo-ui-outlineItemWidget {
-  position: relative;
-  padding: 0.75em;
-  cursor: pointer;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-popupButtonWidget {
-  position: relative;
-}
-
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
-  position: absolute;
-  right: 1em;
-  cursor: auto;
-}
-
-.oo-ui-searchWidget-query {
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: 0;
-  height: 4em;
-  padding: 0 1em;
-}
-
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-  width: 100%;
-  margin: 0.75em 0;
-}
-
-.oo-ui-searchWidget-results {
-  position: absolute;
-  top: 4em;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  padding: 1em;
-  overflow-x: hidden;
-  overflow-y: auto;
-  line-height: 0;
-}
-
-.oo-ui-textInputWidget {
-  position: relative;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-  display: inline-block;
-  width: 100%;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-  resize: none;
-}
-
-.oo-ui-textInputWidget-icon {
-  position: absolute;
-  top: 0;
-  right: 0;
-  height: 100%;
-  background-position: left center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-toggleSwitchWidget {
-  position: relative;
-  display: inline-block;
-  width: 4em;
-  height: 2em;
-  overflow: hidden;
-  vertical-align: middle;
-  cursor: pointer;
-  -webkit-transform: translateZ(0);
-     -moz-transform: translateZ(0);
-      -ms-transform: translateZ(0);
-       -o-transform: translateZ(0);
-          transform: translateZ(0);
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
-  cursor: default;
-}
-
-.oo-ui-toggleSwitchWidget-grip {
-  position: absolute;
-  top: 0.25em;
-  right: 0.25em;
-  display: block;
-  width: 1.5em;
-  height: 1.5em;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-  -webkit-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
-     -moz-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
-      -ms-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
-       -o-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
-          transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
-}
-
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  -webkit-transition: opacity 200ms ease-in-out;
-     -moz-transition: opacity 200ms ease-in-out;
-      -ms-transition: opacity 200ms ease-in-out;
-       -o-transition: opacity 200ms ease-in-out;
-          transition: opacity 200ms ease-in-out;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
-  right: 2.25em;
-  margin-right: -2px;
-}
-
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
-  right: 0.25em;
-  margin-right: 0;
-}
-
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-  display: none;
-}
-
-/* Icons */
-
-.oo-ui-icon-add-item {
-  background-image: /* @embed */ url(images/icons/add-item.png);
-}
-
-.oo-ui-icon-advanced {
-  background-image: /* @embed */ url(images/icons/advanced.png);
-}
-
-.oo-ui-icon-alert {
-  background-image: /* @embed */ url(images/icons/alert.png);
-}
-
-.oo-ui-icon-check {
-  background-image: /* @embed */ url(images/icons/check.png);
-}
-
-.oo-ui-icon-clear {
-  background-image: /* @embed */ url(images/icons/clear.png);
-}
-
-.oo-ui-icon-close {
-  background-image: /* @embed */ url(images/icons/close.png);
-}
-
-.oo-ui-icon-code {
-  background-image: /* @embed */ url(images/icons/code.png);
-}
-
-.oo-ui-icon-collapse {
-  background-image: /* @embed */ url(images/icons/collapse.png);
-}
-
-.oo-ui-icon-comment {
-  background-image: /* @embed */ url(images/icons/comment.png);
-}
-
-.oo-ui-icon-expand {
-  background-image: /* @embed */ url(images/icons/expand.png);
-}
-
-.oo-ui-icon-help {
-  background-image: /* @embed */ url(images/icons/help.png);
-}
-
-.oo-ui-icon-info {
-  background-image: /* @embed */ url(images/icons/info.png);
-}
-
-.oo-ui-icon-link {
-  background-image: /* @embed */ url(images/icons/link.png);
-}
-
-.oo-ui-icon-menu {
-  background-image: /* @embed */ url(images/icons/menu.png);
-}
-
-.oo-ui-icon-next {
-  background-image: /* @embed */ url(images/icons/move-rtl.png);
-}
-
-.oo-ui-icon-picture {
-  background-image: /* @embed */ url(images/icons/picture.png);
-}
-
-.oo-ui-icon-previous {
-  background-image: /* @embed */ url(images/icons/move-ltr.png);
-}
-
-.oo-ui-icon-redo {
-  background-image: /* @embed */ url(images/icons/arched-arrow-rtl.png);
-}
-
-.oo-ui-icon-remove {
-  background-image: /* @embed */ url(images/icons/remove.png);
-}
-
-.oo-ui-icon-search {
-  background-image: /* @embed */ url(images/icons/search.png);
-}
-
-.oo-ui-icon-settings {
-  background-image: /* @embed */ url(images/icons/settings.png);
-}
-
-.oo-ui-icon-tag {
-  background-image: /* @embed */ url(images/icons/tag.png);
-}
-
-.oo-ui-icon-undo {
-  background-image: /* @embed */ url(images/icons/arched-arrow-ltr.png);
-}
-
-.oo-ui-icon-window {
-  background-image: /* @embed */ url(images/icons/window.png);
-}
-
-/* Indicators */
-
-.oo-ui-indicator-alert {
-  background-image: /* @embed */ url(images/indicators/alert.png);
-}
-
-.oo-ui-indicator-down {
-  background-image: /* @embed */ url(images/indicators/arrow-down.png);
-}
-
-.oo-ui-indicator-next {
-  background-image: /* @embed */ url(images/indicators/arrow-rtl.png);
-}
-
-.oo-ui-indicator-previous {
-  background-image: /* @embed */ url(images/indicators/arrow-ltr.png);
-}
-
-.oo-ui-indicator-required {
-  background-image: /* @embed */ url(images/indicators/required.png);
-}
-
-.oo-ui-indicator-up {
-  background-image: /* @embed */ url(images/indicators/arrow-up.png);
-}
\ No newline at end of file
diff --git a/resources/lib/oojs-ui/oojs-ui.svg.css b/resources/lib/oojs-ui/oojs-ui.svg.css
deleted file mode 100644 (file)
index 17432f8..0000000
+++ /dev/null
@@ -1,1101 +0,0 @@
-/*!
- * OOjs UI v0.1.0-pre (d6008381aa)
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-08-21T23:45:56Z
- */
-/* Textures */
-.oo-ui-texture-pending {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-texture-transparency {
-  background-image: /* @embed */ url(images/textures/transparency.png);
-}
-/* RTL Definitions */
-/* @noflip */
-.oo-ui-rtl {
-  direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
-  direction: ltr;
-}
-
-.oo-ui-toolbar {
-  clear: both;
-}
-.oo-ui-toolbar-bar {
-  line-height: 1em;
-}
-.oo-ui-toolbar-actions {
-  float: right;
-}
-.oo-ui-toolbar-tools {
-  float: left;
-}
-.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-toolGroup {
-  display: inline-block;
-  margin: 0.3em;
-  vertical-align: middle;
-}
-.oo-ui-toolGroup-empty {
-  display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-window {
-  line-height: 1em;
-  /* Content div takes focus when opened, so hide outline */
-}
-.oo-ui-window-frame {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.oo-ui-window-frame > iframe {
-  width: 100%;
-  height: 100%;
-  margin: 0;
-  padding: 0;
-}
-.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;
-  left: 0;
-}
-
-.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-setup {
-  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: fixed;
-  right: 0;
-  left: 0;
-  margin: auto;
-  overflow: hidden;
-  max-width: 100%;
-  max-height: 100%;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame > iframe {
-  width: 100%;
-  height: 100%;
-}
-.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
-  width: 100%;
-  height: 100%;
-  top: 0;
-  bottom: 0;
-}
-
-.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-buttonedElement-button {
-  display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label {
-  position: relative;
-  top: auto;
-  bottom: auto;
-  display: inline;
-  white-space: nowrap;
-}
-
-.oo-ui-processDialog-location {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.oo-ui-processDialog-title {
-  display: inline;
-}
-.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;
-  padding: 3em 3em 1.5em 3em;
-  z-index: 2;
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button {
-  cursor: pointer;
-  display: inline-block;
-  vertical-align: middle;
-  -webkit-touch-callout: none;
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-}
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  display: none;
-  margin-left: 0;
-}
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator {
-  display: none;
-  margin-right: -0.75em;
-}
-.oo-ui-buttonedElement.oo-ui-widget-disabled > .oo-ui-buttonedElement-button {
-  cursor: default;
-}
-.oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  display: inline-block;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-buttonedElement-frameless {
-  display: inline-block;
-  position: relative;
-}
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  display: inline-block;
-  vertical-align: middle;
-  margin-left: 0.25em;
-}
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button {
-  display: inline-block;
-  vertical-align: top;
-  text-align: center;
-}
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  display: inline-block;
-  vertical-align: middle;
-  line-height: 1.9em;
-}
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button {
-  cursor: default;
-}
-
-.oo-ui-clippableElement-clippable {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-
-.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-outlineWidget {
-  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-fieldLayout {
-  margin-bottom: 1em;
-}
-.oo-ui-fieldLayout:last-child {
-  margin-bottom: 0;
-}
-.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-labeledElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
-  display: block;
-  float: left;
-  width: 35%;
-  padding-top: 0.5em;
-  margin-right: 5%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
-  display: block;
-  float: left;
-  width: 60%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
-  text-align: right;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labeledElement-label {
-  display: inline-block;
-  vertical-align: middle;
-  padding: 0.75em 0.5em 0.5em 0.5em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
-  display: inline-block;
-  vertical-align: middle;
-  padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labeledElement-label {
-  display: inline-block;
-  padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  margin-top: 0.25em;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
-  z-index: 1;
-}
-
-.oo-ui-fieldsetLayout {
-  position: relative;
-  margin: 0;
-  padding: 0;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
-  margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label {
-  margin-bottom: 0.5em;
-  padding: 0.25em 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-labeledElement-label {
-  padding-left: 1.75em;
-  line-height: 1.33em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-iconedElement-icon {
-  display: block;
-  position: absolute;
-  left: 0;
-  top: 0.25em;
-  width: 2em;
-  height: 2em;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-gridLayout {
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-}
-
-.oo-ui-labelWidget {
-  display: inline-block;
-  padding: 0.5em 0;
-}
-
-.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-stackLayout > .oo-ui-panelLayout {
-  display: none;
-}
-.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
-  display: block;
-  position: relative;
-}
-
-.oo-ui-barToolGroup > .oo-ui-iconedElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labeledElement-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;
-  height: 1.5em;
-  padding: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  display: block;
-  height: 1.5em;
-  width: 1.5em;
-}
-.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-listToolGroup .oo-ui-toolGroup-tools {
-  padding: 0.25em;
-}
-.oo-ui-listToolGroup .oo-ui-tool {
-  display: inline-block;
-  width: 100%;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
-  display: block;
-  cursor: pointer;
-  white-space: nowrap;
-  padding-right: 0.5em;
-}
-.oo-ui-listToolGroup .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 {
-  padding: 0.25em 0 0.25em 0;
-}
-.oo-ui-menuToolGroup .oo-ui-tool {
-  display: block;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link {
-  display: block;
-  cursor: pointer;
-  white-space: nowrap;
-  padding: 0 1em 0 0.25em;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  background-image: none;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  background-image: /* @embed */ url(images/icons/check.svg);
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
-  cursor: default;
-}
-
-.oo-ui-popupToolGroup {
-  position: relative;
-  height: 2em;
-  min-width: 2.5em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatedElement.oo-ui-iconedElement {
-  min-width: 3.5em;
-}
-.oo-ui-popupToolGroup-handle {
-  display: block;
-  cursor: pointer;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
-  position: absolute;
-  top: 0;
-  width: 2em;
-  height: 2em;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator {
-  right: 0;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
-  left: 0.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
-  line-height: 2.6em;
-  font-size: 0.8em;
-  margin: 0 1em;
-}
-.oo-ui-popupToolGroup-header {
-  line-height: 2.6em;
-  font-size: 0.8em;
-  margin: 0 0.6em;
-  font-weight: bold;
-}
-.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
-  cursor: default;
-}
-.oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
-  margin-left: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
-  margin-right: 2.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-  display: none;
-  position: absolute;
-  top: 2em;
-  left: -1px;
-  z-index: 4;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconedElement-icon {
-  background-repeat: no-repeat;
-  background-position: center center;
-}
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
-  display: block;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  display: inline-block;
-  vertical-align: middle;
-  height: 2em;
-  width: 2em;
-  margin-right: 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-  display: inline-block;
-  vertical-align: middle;
-  line-height: 2em;
-  font-size: 0.8em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
-  display: none;
-}
-
-.oo-ui-popupTool .oo-ui-popupWidget {
-  margin-left: 1.25em;
-  font-size: 0.8em;
-}
-.oo-ui-popupTool .oo-ui-popupWidget-popup,
-.oo-ui-popupTool .oo-ui-popupWidget-anchor {
-  z-index: 4;
-}
-
-.oo-ui-iconWidget {
-  display: inline-block;
-  vertical-align: middle;
-  line-height: 2.5em;
-  height: 1.9em;
-  width: 1.9em;
-  background-position: center center;
-  background-repeat: no-repeat;
-  opacity: 0.8;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-
-.oo-ui-indicatorWidget {
-  display: inline-block;
-  vertical-align: middle;
-  line-height: 2.5em;
-  height: 1.9em;
-  width: 1.9em;
-  background-position: center center;
-  background-repeat: no-repeat;
-  opacity: 0.8;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-
-.oo-ui-selectWidget {
-  list-style: none;
-  margin: 0;
-  padding: 0;
-}
-
-.oo-ui-optionWidget {
-  position: relative;
-  display: block;
-  border: none;
-  list-style: none;
-  margin: 0;
-  cursor: pointer;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-  cursor: default;
-}
-.oo-ui-optionWidget .oo-ui-labeledElement-label {
-  display: block;
-  line-height: 1.5em;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-  overflow: hidden;
-}
-
-.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator {
-  position: absolute;
-  top: 50%;
-  width: 2em;
-  height: 2em;
-  margin-top: -1em;
-  background-repeat: no-repeat;
-  background-position: center center;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon {
-  left: 0.5em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator {
-  right: 0.5em;
-}
-
-.oo-ui-menuWidget {
-  position: absolute;
-}
-.oo-ui-menuWidget input {
-  position: absolute;
-  width: 0;
-  height: 0;
-  overflow: hidden;
-  opacity: 0;
-}
-
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
-  z-index: 1;
-  min-width: 20em;
-}
-
-.oo-ui-popupWidget-popup {
-  position: absolute;
-  overflow: hidden;
-  z-index: 1;
-}
-.oo-ui-popupWidget-anchor {
-  display: none;
-  z-index: 1;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
-  margin-top: 7px;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
-  display: block;
-  position: absolute;
-  background-repeat: no-repeat;
-}
-.oo-ui-popupWidget-head {
-  height: 2.5em;
-  -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;
-  margin: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labeledElement-label {
-  float: left;
-  margin: 0.75em 1em;
-  cursor: default;
-}
-.oo-ui-popupWidget-body {
-  clear: both;
-  overflow: hidden;
-}
-.oo-ui-popupWidget-body-padded {
-  padding: 0 1em;
-}
-
-.oo-ui-buttonGroupWidget {
-  border-radius: 0.3em;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
-  border-radius: 0;
-  margin-bottom: -1px;
-  margin-left: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:first-child .oo-ui-buttonedElement-button {
-  border-bottom-left-radius: 0.3em;
-  border-top-left-radius: 0.3em;
-  margin-left: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:last-child .oo-ui-buttonedElement-button {
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-}
-
-.oo-ui-buttonOptionWidget {
-  display: inline-block;
-  background-color: transparent;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
-  position: relative;
-  height: 1.9em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
-  position: static;
-  display: inline-block;
-  vertical-align: middle;
-  height: 1.9em;
-  margin-top: 0;
-}
-
-.oo-ui-buttonSelectWidget {
-  display: inline-block;
-  white-space: nowrap;
-}
-
-.oo-ui-buttonWidget {
-  display: inline-block;
-  vertical-align: middle;
-}
-
-.oo-ui-inlineMenuWidget {
-  position: relative;
-  display: inline-block;
-  margin: 0.25em 0;
-  min-width: 20em;
-}
-.oo-ui-inlineMenuWidget-handle {
-  display: inline-block;
-  width: 100%;
-  height: 2.5em;
-  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-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
-  position: absolute;
-  top: 0;
-  width: 2.5em;
-  height: 2.5em;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator {
-  right: 0;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
-  left: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
-  line-height: 2.5em;
-  margin: 0 0.5em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-iconedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
-  margin-left: 3em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-indicatedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
-  margin-right: 2em;
-}
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
-  width: 100%;
-  z-index: 1;
-}
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
-  cursor: default;
-}
-
-.oo-ui-menuItemWidget {
-  position: relative;
-}
-.oo-ui-menuItemWidget .oo-ui-iconedElement-icon {
-  display: none;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconedElement-icon {
-  display: block;
-}
-
-.oo-ui-menuSectionItemWidget {
-  cursor: default;
-}
-
-.oo-ui-outlineControlsWidget {
-  height: 3em;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-  float: left;
-  height: 2em;
-  margin: 0.5em;
-  padding: 0;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
-  float: left;
-  width: 1.5em;
-  height: 2em;
-  margin: 0.5em 0 0.5em 0.5em;
-  background-position: right center;
-  background-repeat: no-repeat;
-}
-.oo-ui-outlineControlsWidget-items {
-  float: left;
-  margin-left: 0;
-}
-.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-outlineItemWidget {
-  position: relative;
-  padding: 0.75em;
-  cursor: pointer;
-  -webkit-touch-callout: none;
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-}
-
-.oo-ui-popupButtonWidget {
-  position: relative;
-}
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
-  position: absolute;
-  left: 1em;
-  cursor: auto;
-}
-
-.oo-ui-searchWidget-query {
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: 0;
-  height: 4em;
-  padding: 0 1em;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-  width: 100%;
-  margin: 0.75em 0;
-}
-.oo-ui-searchWidget-results {
-  position: absolute;
-  top: 4em;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  padding: 1em;
-  overflow-x: hidden;
-  overflow-y: auto;
-  line-height: 0;
-}
-
-.oo-ui-textInputWidget {
-  position: relative;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.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-iconedElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatedElement-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-iconedElement-icon {
-  left: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatedElement-indicator {
-  right: 0;
-}
-
-.oo-ui-toggleSwitchWidget {
-  position: relative;
-  display: inline-block;
-  vertical-align: middle;
-  height: 2em;
-  width: 4em;
-  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);
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
-  cursor: default;
-}
-.oo-ui-toggleSwitchWidget-grip {
-  position: absolute;
-  display: block;
-  top: 0.25em;
-  left: 0.25em;
-  width: 1.5em;
-  height: 1.5em;
-  margin-top: -1px;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-  -webkit-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-  -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-  -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-  -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-  transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-}
-.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;
-  -webkit-transition: opacity 200ms ease-in-out;
-  -moz-transition: opacity 200ms ease-in-out;
-  -ms-transition: opacity 200ms ease-in-out;
-  -o-transition: opacity 200ms ease-in-out;
-  transition: opacity 200ms ease-in-out;
-}
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
-  left: 2.25em;
-  margin-left: -2px;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
-  left: 0.25em;
-  margin-left: 0;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-  display: none;
-}
-
-/* Icons */
-.oo-ui-icon-add-item {
-  background-image: /* @embed */ url(images/icons/add-item.svg);
-}
-.oo-ui-icon-advanced {
-  background-image: /* @embed */ url(images/icons/advanced.svg);
-}
-.oo-ui-icon-alert {
-  background-image: /* @embed */ url(images/icons/alert.svg);
-}
-.oo-ui-icon-check {
-  background-image: /* @embed */ url(images/icons/check.svg);
-}
-.oo-ui-icon-clear {
-  background-image: /* @embed */ url(images/icons/clear.svg);
-}
-.oo-ui-icon-close {
-  background-image: /* @embed */ url(images/icons/close.svg);
-}
-.oo-ui-icon-code {
-  background-image: /* @embed */ url(images/icons/code.svg);
-}
-.oo-ui-icon-collapse {
-  background-image: /* @embed */ url(images/icons/collapse.svg);
-}
-.oo-ui-icon-comment {
-  background-image: /* @embed */ url(images/icons/comment.svg);
-}
-.oo-ui-icon-expand {
-  background-image: /* @embed */ url(images/icons/expand.svg);
-}
-.oo-ui-icon-help {
-  background-image: /* @embed */ url(images/icons/help.svg);
-}
-.oo-ui-icon-info {
-  background-image: /* @embed */ url(images/icons/info.svg);
-}
-.oo-ui-icon-link {
-  background-image: /* @embed */ url(images/icons/link.svg);
-}
-.oo-ui-icon-menu {
-  background-image: /* @embed */ url(images/icons/menu.svg);
-}
-.oo-ui-icon-next {
-  background-image: /* @embed */ url(images/icons/move-ltr.svg);
-}
-.oo-ui-icon-picture {
-  background-image: /* @embed */ url(images/icons/picture.svg);
-}
-.oo-ui-icon-previous {
-  background-image: /* @embed */ url(images/icons/move-rtl.svg);
-}
-.oo-ui-icon-redo {
-  background-image: /* @embed */ url(images/icons/arched-arrow-ltr.svg);
-}
-.oo-ui-icon-remove {
-  background-image: /* @embed */ url(images/icons/remove.svg);
-}
-.oo-ui-icon-search {
-  background-image: /* @embed */ url(images/icons/search.svg);
-}
-.oo-ui-icon-settings {
-  background-image: /* @embed */ url(images/icons/settings.svg);
-}
-.oo-ui-icon-tag {
-  background-image: /* @embed */ url(images/icons/tag.svg);
-}
-.oo-ui-icon-undo {
-  background-image: /* @embed */ url(images/icons/arched-arrow-rtl.svg);
-}
-.oo-ui-icon-window {
-  background-image: /* @embed */ url(images/icons/window.svg);
-}
-/* Indicators */
-.oo-ui-indicator-alert {
-  background-image: /* @embed */ url(images/indicators/alert.svg);
-}
-.oo-ui-indicator-down {
-  background-image: /* @embed */ url(images/indicators/arrow-down.svg);
-}
-.oo-ui-indicator-next {
-  background-image: /* @embed */ url(images/indicators/arrow-ltr.svg);
-}
-.oo-ui-indicator-previous {
-  background-image: /* @embed */ url(images/indicators/arrow-rtl.svg);
-}
-.oo-ui-indicator-required {
-  background-image: /* @embed */ url(images/indicators/required.svg);
-}
-.oo-ui-indicator-up {
-  background-image: /* @embed */ url(images/indicators/arrow-up.svg);
-}
diff --git a/resources/lib/oojs-ui/oojs-ui.svg.rtl.css b/resources/lib/oojs-ui/oojs-ui.svg.rtl.css
deleted file mode 100644 (file)
index 9a7fe08..0000000
+++ /dev/null
@@ -1,1271 +0,0 @@
-/*!
- * OOjs UI v0.1.0
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-07-22T21:39:24Z
- */
-/* Textures */
-
-.oo-ui-texture-pending {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-
-.oo-ui-texture-transparency {
-  background-image: /* @embed */ url(images/textures/transparency.png);
-}
-
-/* RTL Definitions */
-
-/* @noflip */
-
-.oo-ui-rtl {
-  direction: rtl;
-}
-
-/* @noflip */
-
-.oo-ui-ltr {
-  direction: ltr;
-}
-
-.oo-ui-frame {
-  padding: 0;
-  margin: 0;
-}
-
-.oo-ui-frame-body {
-  padding: 0;
-  margin: 0;
-  background: none;
-}
-
-.oo-ui-frame-content:focus {
-  outline: none;
-}
-
-.oo-ui-toolbar {
-  clear: both;
-}
-
-.oo-ui-toolbar-bar {
-  line-height: 1em;
-}
-
-.oo-ui-toolbar-bottom .oo-ui-toolbar-bar {
-  position: absolute;
-}
-
-.oo-ui-toolbar-actions {
-  float: left;
-}
-
-.oo-ui-toolbar-tools {
-  float: right;
-}
-
-.oo-ui-toolbar-tools,
-.oo-ui-toolbar-actions,
-.oo-ui-toolbar-shadow {
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-toolbar-actions .oo-ui-popupWidget {
-  -webkit-user-select: all;
-     -moz-user-select: all;
-      -ms-user-select: all;
-          user-select: all;
-  -webkit-touch-callout: default;
-}
-
-.oo-ui-toolbar-shadow {
-  position: absolute;
-  width: 100%;
-  pointer-events: none;
-  background-position: right top;
-  background-repeat: repeat-x;
-}
-
-.oo-ui-toolGroup {
-  display: inline-block;
-  margin: 0.3em;
-  vertical-align: middle;
-}
-
-.oo-ui-toolGroup-empty {
-  display: none;
-}
-
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-window {
-  line-height: 1em;
-}
-
-.oo-ui-window > .oo-ui-window-frame {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.oo-ui-window > .oo-ui-window-frame > .oo-ui-frame {
-  width: 100%;
-  height: 100%;
-}
-
-.oo-ui-window-head,
-.oo-ui-window-foot {
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-window-overlay {
-  position: absolute;
-  top: 0;
-  right: 0;
-}
-
-.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-setup {
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  width: auto;
-  height: auto;
-  padding: 1em;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
-  position: fixed;
-  left: 0;
-  right: 0;
-  max-width: 100%;
-  max-height: 100%;
-  margin: auto;
-  overflow: hidden;
-}
-
-.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
-  top: 0;
-  bottom: 0;
-  width: 100%;
-  height: 100%;
-}
-
-.oo-ui-messageDialog-actions-horizontal {
-  display: table;
-  width: 100%;
-  table-layout: fixed;
-}
-
-.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-buttonedElement-button {
-  display: block;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label {
-  position: relative;
-  top: auto;
-  bottom: auto;
-  display: inline;
-  white-space: nowrap;
-}
-
-.oo-ui-processDialog-location {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.oo-ui-processDialog-title {
-  display: inline;
-}
-
-.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 {
-  right: 0;
-}
-
-.oo-ui-processDialog-actions-primary {
-  left: 0;
-}
-
-.oo-ui-processDialog-errors {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  z-index: 2;
-  display: none;
-  padding: 3em 3em 1.5em 3em;
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button {
-  display: inline-block;
-  vertical-align: middle;
-  cursor: pointer;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  display: none;
-  margin-right: 0;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator {
-  display: none;
-  margin-left: -0.75em;
-}
-
-.oo-ui-buttonedElement.oo-ui-widget-disabled > .oo-ui-buttonedElement-button {
-  cursor: default;
-}
-
-.oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  display: inline-block;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-buttonedElement-frameless {
-  position: relative;
-  display: inline-block;
-}
-
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  display: inline-block;
-  margin-right: 0.25em;
-  vertical-align: middle;
-}
-
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button {
-  display: inline-block;
-  text-align: center;
-  vertical-align: top;
-}
-
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
-  display: inline-block;
-  line-height: 1.9em;
-  vertical-align: middle;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
-  cursor: default;
-}
-
-.oo-ui-clippableElement-clippable {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.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-outlineWidget {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 3em;
-  right: 0;
-  overflow-y: auto;
-}
-
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
-  position: absolute;
-  left: 0;
-  bottom: 0;
-  right: 0;
-}
-
-.oo-ui-fieldLayout {
-  margin-bottom: 1em;
-}
-
-.oo-ui-fieldLayout:last-child {
-  margin-bottom: 0;
-}
-
-.oo-ui-fieldLayout:before,
-.oo-ui-fieldLayout:after {
-  display: table;
-  content: " ";
-}
-
-.oo-ui-fieldLayout:after {
-  clear: both;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labeledElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
-  display: block;
-  float: right;
-  width: 35%;
-  padding-top: 0.5em;
-  margin-left: 5%;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
-  display: block;
-  float: right;
-  width: 60%;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
-  text-align: left;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labeledElement-label {
-  display: inline-block;
-  padding: 0.75em 0.5em 0.5em 0.5em;
-  vertical-align: middle;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
-  display: inline-block;
-  padding: 0.5em 0;
-  vertical-align: middle;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labeledElement-label {
-  display: inline-block;
-  padding: 0.5em 0;
-}
-
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  margin-top: 0.25em;
-}
-
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
-  z-index: 1;
-}
-
-.oo-ui-fieldsetLayout {
-  position: relative;
-  padding: 0;
-  margin: 0;
-}
-
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
-  margin-top: 2em;
-}
-
-.oo-ui-fieldsetLayout-labeled {
-  margin-top: -0.75em;
-}
-
-.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label {
-  padding: 0.25em 0;
-  margin-bottom: 0.5em;
-}
-
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-labeledElement-label {
-  padding-right: 1.75em;
-  line-height: 1.33em;
-}
-
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-iconedElement-icon {
-  position: absolute;
-  top: 0.25em;
-  right: 0;
-  display: block;
-  width: 2em;
-  height: 2em;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-gridLayout {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-}
-
-.oo-ui-labelWidget {
-  display: inline-block;
-  padding: 0.5em 0;
-}
-
-.oo-ui-panelLayout {
-  position: relative;
-}
-
-.oo-ui-panelLayout-scrollable {
-  overflow-y: auto;
-}
-
-.oo-ui-panelLayout-expanded {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-}
-
-.oo-ui-stackLayout > .oo-ui-panelLayout {
-  display: none;
-}
-
-.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
-  position: relative;
-  display: block;
-}
-
-.oo-ui-barToolGroup > .oo-ui-iconedElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labeledElement-label {
-  display: none;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool {
-  position: relative;
-  display: inline-block;
-  vertical-align: top;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link {
-  display: block;
-  height: 1.5em;
-  padding: 0.25em;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  display: block;
-  width: 1.5em;
-  height: 1.5em;
-}
-
-.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-listToolGroup .oo-ui-toolGroup-tools {
-  padding: 0.25em;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool {
-  display: inline-block;
-  width: 100%;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool-link {
-  display: block;
-  padding-left: 0.5em;
-  white-space: nowrap;
-  cursor: pointer;
-}
-
-.oo-ui-listToolGroup .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 {
-  padding: 0.25em 0 0.25em 0;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool {
-  display: block;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-link {
-  display: block;
-  padding: 0 0.25em 0 1em;
-  white-space: nowrap;
-  cursor: pointer;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  background-image: none;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  background-image: /* @embed */ url(images/icons/check.svg);
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
-  cursor: default;
-}
-
-.oo-ui-popupToolGroup {
-  position: relative;
-  height: 2em;
-  min-width: 2.5em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-indicatedElement.oo-ui-iconedElement {
-  min-width: 3.5em;
-}
-
-.oo-ui-popupToolGroup-handle {
-  display: block;
-  cursor: pointer;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
-  position: absolute;
-  top: 0;
-  width: 2em;
-  height: 2em;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator {
-  left: 0;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
-  right: 0.25em;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
-  margin: 0 1em;
-  font-size: 0.8em;
-  line-height: 2.6em;
-}
-
-.oo-ui-popupToolGroup-header {
-  margin: 0 0.6em;
-  font-size: 0.8em;
-  font-weight: bold;
-  line-height: 2.6em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
-  cursor: default;
-}
-
-.oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
-  margin-right: 3em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
-  margin-left: 2.25em;
-}
-
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-  position: absolute;
-  top: 2em;
-  right: -1px;
-  z-index: 4;
-  display: none;
-}
-
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconedElement-icon {
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
-  display: block;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
-  display: inline-block;
-  width: 2em;
-  height: 2em;
-  margin-left: 0.25em;
-  vertical-align: middle;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-  display: inline-block;
-  font-size: 0.8em;
-  line-height: 2em;
-  vertical-align: middle;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
-  display: none;
-}
-
-.oo-ui-popupTool .oo-ui-popupWidget {
-  margin-right: 1.25em;
-  font-size: 0.8em;
-}
-
-.oo-ui-popupTool .oo-ui-popupWidget-popup,
-.oo-ui-popupTool .oo-ui-popupWidget-anchor {
-  z-index: 4;
-}
-
-.oo-ui-iconWidget {
-  display: inline-block;
-  width: 1.9em;
-  height: 1.9em;
-  line-height: 2.5em;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-  opacity: 0.8;
-}
-
-.oo-ui-iconWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-
-.oo-ui-indicatorWidget {
-  display: inline-block;
-  width: 1.9em;
-  height: 1.9em;
-  line-height: 2.5em;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-  opacity: 0.8;
-}
-
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-
-.oo-ui-selectWidget {
-  padding: 0;
-  margin: 0;
-  list-style: none;
-}
-
-.oo-ui-optionWidget {
-  position: relative;
-  display: block;
-  margin: 0;
-  list-style: none;
-  cursor: pointer;
-  border: none;
-}
-
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-  cursor: default;
-}
-
-.oo-ui-optionWidget .oo-ui-labeledElement-label {
-  display: block;
-  overflow: hidden;
-  line-height: 1.5em;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator {
-  position: absolute;
-  top: 50%;
-  width: 2em;
-  height: 2em;
-  margin-top: -1em;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon {
-  right: 0.5em;
-}
-
-.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator {
-  left: 0.5em;
-}
-
-.oo-ui-menuWidget {
-  position: absolute;
-}
-
-.oo-ui-menuWidget input {
-  position: absolute;
-  width: 0;
-  height: 0;
-  overflow: hidden;
-  opacity: 0;
-}
-
-.oo-ui-popupWidget-popup {
-  position: absolute;
-  z-index: 1;
-  overflow: hidden;
-}
-
-.oo-ui-popupWidget-anchor {
-  z-index: 1;
-  display: none;
-}
-
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
-  margin-top: 7px;
-}
-
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
-  position: absolute;
-  display: block;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-popupWidget-head {
-  height: 2.5em;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
-  float: left;
-  margin: 0.25em;
-}
-
-.oo-ui-popupWidget-head .oo-ui-labeledElement-label {
-  float: right;
-  margin: 0.75em 1em;
-  cursor: default;
-}
-
-.oo-ui-popupWidget-body {
-  overflow: hidden;
-  clear: both;
-}
-
-.oo-ui-popupWidget-body-padded {
-  padding: 0 1em;
-}
-
-.oo-ui-buttonGroupWidget {
-  border-radius: 0.3em;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
-  margin-bottom: -1px;
-  margin-right: -1px;
-  border-radius: 0;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:first-child .oo-ui-buttonedElement-button {
-  margin-right: 0;
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:last-child .oo-ui-buttonedElement-button {
-  border-top-left-radius: 0.3em;
-  border-bottom-left-radius: 0.3em;
-}
-
-.oo-ui-buttonOptionWidget {
-  display: inline-block;
-  background-color: transparent;
-}
-
-.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
-  position: relative;
-  height: 1.9em;
-}
-
-.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
-  position: static;
-  display: inline-block;
-  height: 1.9em;
-  margin-top: 0;
-  vertical-align: middle;
-}
-
-.oo-ui-buttonSelectWidget {
-  display: inline-block;
-  white-space: nowrap;
-}
-
-.oo-ui-buttonWidget {
-  display: inline-block;
-  vertical-align: middle;
-}
-
-.oo-ui-inlineMenuWidget {
-  position: relative;
-  display: inline-block;
-  min-width: 20em;
-  margin: 0.25em 0;
-}
-
-.oo-ui-inlineMenuWidget-handle {
-  display: inline-block;
-  width: 100%;
-  height: 2.5em;
-  cursor: pointer;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
-  position: absolute;
-  top: 0;
-  width: 2.5em;
-  height: 2.5em;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator {
-  left: 0;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
-  right: 0.25em;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
-  margin: 0 0.5em;
-  line-height: 2.5em;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-iconedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
-  margin-right: 3em;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-indicatedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
-  margin-left: 2em;
-}
-
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
-  z-index: 1;
-  width: 100%;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
-  cursor: default;
-}
-
-.oo-ui-menuItemWidget {
-  position: relative;
-}
-
-.oo-ui-menuItemWidget .oo-ui-iconedElement-icon {
-  display: none;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  background-color: transparent;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconedElement-icon {
-  display: block;
-}
-
-.oo-ui-menuSectionItemWidget {
-  cursor: default;
-}
-
-.oo-ui-outlineControlsWidget {
-  height: 3em;
-}
-
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-  float: right;
-  height: 2em;
-  padding: 0;
-  margin: 0.5em;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
-  float: right;
-  width: 1.5em;
-  height: 2em;
-  margin: 0.5em 0.5em 0.5em 0;
-  background-position: left center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-outlineControlsWidget-items {
-  float: right;
-  margin-right: 0;
-}
-
-.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
-  float: right;
-}
-
-.oo-ui-outlineControlsWidget-movers {
-  float: left;
-}
-
-.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
-  float: left;
-}
-
-.oo-ui-outlineItemWidget {
-  position: relative;
-  padding: 0.75em;
-  cursor: pointer;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-popupButtonWidget {
-  position: relative;
-}
-
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
-  position: absolute;
-  right: 1em;
-  cursor: auto;
-}
-
-.oo-ui-searchWidget-query {
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: 0;
-  height: 4em;
-  padding: 0 1em;
-}
-
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-  width: 100%;
-  margin: 0.75em 0;
-}
-
-.oo-ui-searchWidget-results {
-  position: absolute;
-  top: 4em;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  padding: 1em;
-  overflow-x: hidden;
-  overflow-y: auto;
-  line-height: 0;
-}
-
-.oo-ui-textInputWidget {
-  position: relative;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-  display: inline-block;
-  width: 100%;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-  resize: none;
-}
-
-.oo-ui-textInputWidget-icon {
-  position: absolute;
-  top: 0;
-  right: 0;
-  height: 100%;
-  background-position: left center;
-  background-repeat: no-repeat;
-}
-
-.oo-ui-toggleSwitchWidget {
-  position: relative;
-  display: inline-block;
-  width: 4em;
-  height: 2em;
-  overflow: hidden;
-  vertical-align: middle;
-  cursor: pointer;
-  -webkit-transform: translateZ(0);
-     -moz-transform: translateZ(0);
-      -ms-transform: translateZ(0);
-       -o-transform: translateZ(0);
-          transform: translateZ(0);
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
-  cursor: default;
-}
-
-.oo-ui-toggleSwitchWidget-grip {
-  position: absolute;
-  top: 0.25em;
-  right: 0.25em;
-  display: block;
-  width: 1.5em;
-  height: 1.5em;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-  -webkit-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
-     -moz-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
-      -ms-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
-       -o-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
-          transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
-}
-
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  -webkit-transition: opacity 200ms ease-in-out;
-     -moz-transition: opacity 200ms ease-in-out;
-      -ms-transition: opacity 200ms ease-in-out;
-       -o-transition: opacity 200ms ease-in-out;
-          transition: opacity 200ms ease-in-out;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  -webkit-touch-callout: none;
-}
-
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
-  right: 2.25em;
-  margin-right: -2px;
-}
-
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
-  right: 0.25em;
-  margin-right: 0;
-}
-
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-  display: none;
-}
-
-/* Icons */
-
-.oo-ui-icon-add-item {
-  background-image: /* @embed */ url(images/icons/add-item.svg);
-}
-
-.oo-ui-icon-advanced {
-  background-image: /* @embed */ url(images/icons/advanced.svg);
-}
-
-.oo-ui-icon-alert {
-  background-image: /* @embed */ url(images/icons/alert.svg);
-}
-
-.oo-ui-icon-check {
-  background-image: /* @embed */ url(images/icons/check.svg);
-}
-
-.oo-ui-icon-clear {
-  background-image: /* @embed */ url(images/icons/clear.svg);
-}
-
-.oo-ui-icon-close {
-  background-image: /* @embed */ url(images/icons/close.svg);
-}
-
-.oo-ui-icon-code {
-  background-image: /* @embed */ url(images/icons/code.svg);
-}
-
-.oo-ui-icon-collapse {
-  background-image: /* @embed */ url(images/icons/collapse.svg);
-}
-
-.oo-ui-icon-comment {
-  background-image: /* @embed */ url(images/icons/comment.svg);
-}
-
-.oo-ui-icon-expand {
-  background-image: /* @embed */ url(images/icons/expand.svg);
-}
-
-.oo-ui-icon-help {
-  background-image: /* @embed */ url(images/icons/help.svg);
-}
-
-.oo-ui-icon-info {
-  background-image: /* @embed */ url(images/icons/info.svg);
-}
-
-.oo-ui-icon-link {
-  background-image: /* @embed */ url(images/icons/link.svg);
-}
-
-.oo-ui-icon-menu {
-  background-image: /* @embed */ url(images/icons/menu.svg);
-}
-
-.oo-ui-icon-next {
-  background-image: /* @embed */ url(images/icons/move-rtl.svg);
-}
-
-.oo-ui-icon-picture {
-  background-image: /* @embed */ url(images/icons/picture.svg);
-}
-
-.oo-ui-icon-previous {
-  background-image: /* @embed */ url(images/icons/move-ltr.svg);
-}
-
-.oo-ui-icon-redo {
-  background-image: /* @embed */ url(images/icons/arched-arrow-rtl.svg);
-}
-
-.oo-ui-icon-remove {
-  background-image: /* @embed */ url(images/icons/remove.svg);
-}
-
-.oo-ui-icon-search {
-  background-image: /* @embed */ url(images/icons/search.svg);
-}
-
-.oo-ui-icon-settings {
-  background-image: /* @embed */ url(images/icons/settings.svg);
-}
-
-.oo-ui-icon-tag {
-  background-image: /* @embed */ url(images/icons/tag.svg);
-}
-
-.oo-ui-icon-undo {
-  background-image: /* @embed */ url(images/icons/arched-arrow-ltr.svg);
-}
-
-.oo-ui-icon-window {
-  background-image: /* @embed */ url(images/icons/window.svg);
-}
-
-/* Indicators */
-
-.oo-ui-indicator-alert {
-  background-image: /* @embed */ url(images/indicators/alert.svg);
-}
-
-.oo-ui-indicator-down {
-  background-image: /* @embed */ url(images/indicators/arrow-down.svg);
-}
-
-.oo-ui-indicator-next {
-  background-image: /* @embed */ url(images/indicators/arrow-rtl.svg);
-}
-
-.oo-ui-indicator-previous {
-  background-image: /* @embed */ url(images/indicators/arrow-ltr.svg);
-}
-
-.oo-ui-indicator-required {
-  background-image: /* @embed */ url(images/indicators/required.svg);
-}
-
-.oo-ui-indicator-up {
-  background-image: /* @embed */ url(images/indicators/arrow-up.svg);
-}
\ No newline at end of file
diff --git a/resources/lib/oojs-ui/themes/agora/images/icons/check.svg b/resources/lib/oojs-ui/themes/agora/images/icons/check.svg
deleted file mode 100644 (file)
index 6a91939..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        width="44.075px" height="44.076px" viewBox="0 0 44.075 44.076" enable-background="new 0 0 44.075 44.076" xml:space="preserve">\r
-<polygon fill="#FFFFFF" points="41.673,12.657 15.385,37.159 15.201,36.961 10.037,31.424 2.402,23.239 8.057,17.962 15.693,26.157 \r
-       36.319,6.917 "/>\r
-</svg>\r
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/add.png b/resources/lib/oojs-ui/themes/apex/images/icons/add.png
new file mode 100644 (file)
index 0000000..730d102
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/add.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/add.svg b/resources/lib/oojs-ui/themes/apex/images/icons/add.svg
new file mode 100644 (file)
index 0000000..29e5dba
--- /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="add">
+        <path id="plus" d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/advanced.png b/resources/lib/oojs-ui/themes/apex/images/icons/advanced.png
new file mode 100644 (file)
index 0000000..514ff1d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/advanced.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/advanced.svg b/resources/lib/oojs-ui/themes/apex/images/icons/advanced.svg
new file mode 100644 (file)
index 0000000..201b4d7
--- /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="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>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/alert.png b/resources/lib/oojs-ui/themes/apex/images/icons/alert.png
new file mode 100644 (file)
index 0000000..e98a14a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/alert.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/alert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/alert.svg
new file mode 100644 (file)
index 0000000..f0c6522
--- /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="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/apex/images/icons/arched-arrow-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png
new file mode 100644 (file)
index 0000000..88db108
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.svg b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.svg
new file mode 100644 (file)
index 0000000..8a670ef
--- /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="arched-arrow-ltr">
+        <path id="arrow" d="M19.925 14.937l-2.391-6.901-1.48 2.329c-.964-.845-2.699-1.85-5.513-1.823-4.887.046-6.524 4.244-6.524 4.244s2.753-2.639 6.925-1.949c1.729.286 3.007 1.206 3.675 1.791l-1.474 2.319 6.782-.01z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png
new file mode 100644 (file)
index 0000000..0afcbfa
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.svg b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.svg
new file mode 100644 (file)
index 0000000..01fc216
--- /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="arched-arrow-rtl">
+        <path id="arrow" d="M13.401 8.542c-2.814-.027-4.549.978-5.513 1.823l-1.48-2.329-2.391 6.901 6.782.009-1.474-2.319c.668-.584 1.945-1.504 3.675-1.791 4.172-.69 6.925 1.949 6.925 1.949s-1.637-4.197-6.524-4.243z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/check.png b/resources/lib/oojs-ui/themes/apex/images/icons/check.png
new file mode 100644 (file)
index 0000000..9a2c9db
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/check.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/check.svg b/resources/lib/oojs-ui/themes/apex/images/icons/check.svg
new file mode 100644 (file)
index 0000000..8d4a1f8
--- /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="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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/clear.png b/resources/lib/oojs-ui/themes/apex/images/icons/clear.png
new file mode 100644 (file)
index 0000000..51a33ff
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/clear.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/clear.svg b/resources/lib/oojs-ui/themes/apex/images/icons/clear.svg
new file mode 100644 (file)
index 0000000..0dcde9d
--- /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="clear">
+        <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/close.png b/resources/lib/oojs-ui/themes/apex/images/icons/close.png
new file mode 100644 (file)
index 0000000..4eedfbc
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/close.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/close.svg b/resources/lib/oojs-ui/themes/apex/images/icons/close.svg
new file mode 100644 (file)
index 0000000..1345e86
--- /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="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/apex/images/icons/code.png b/resources/lib/oojs-ui/themes/apex/images/icons/code.png
new file mode 100644 (file)
index 0000000..ee58c9a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/code.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/code.svg b/resources/lib/oojs-ui/themes/apex/images/icons/code.svg
new file mode 100644 (file)
index 0000000..32f140d
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
+    <g id="code">
+        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1v-2.386c0-.514.024-.896.073-1.142.054-.252.139-.463.257-.633.204-.279.473-.475.808-.584.335-.115.872-.255 1.835-.255h1.027v1h-.752c-.457 0-.77.191-.936.408-.167.215-.312.445-.312 1.068v1.857c0 .729-.041 1.18-.244 1.493-.2.307-.562.529-1.09.667.535.155.9.385 1.096.688.199.303.238.757.238 1.484v1.862c0 .619.145.848.312 1.062.166.22.479.407.936.407l.752.004v1h-1.027c-.963 0-1.5-.133-1.835-.248-.335-.109-.604-.307-.808-.591-.118-.165-.203-.374-.257-.625-.049-.253-.073-.636-.073-1.149v-2.387c0-1 0-1-1-1h-1z"/>
+        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/collapse.png b/resources/lib/oojs-ui/themes/apex/images/icons/collapse.png
new file mode 100644 (file)
index 0000000..353ac79
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/collapse.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/collapse.svg b/resources/lib/oojs-ui/themes/apex/images/icons/collapse.svg
new file mode 100644 (file)
index 0000000..55aa8f8
--- /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="collapse">
+        <path id="arrow" d="M6.697 15.714l5.303-5.302 5.303 5.302 1.414-1.414-6.717-6.717-6.717 6.717z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/comment.png b/resources/lib/oojs-ui/themes/apex/images/icons/comment.png
new file mode 100644 (file)
index 0000000..265a3e4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/comment.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/comment.svg b/resources/lib/oojs-ui/themes/apex/images/icons/comment.svg
new file mode 100644 (file)
index 0000000..0ae7e63
--- /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="comment">
+        <path id="speech-bubble" d="M15 6h-6c-1.657 0-3 1.344-3 3v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3v-4c0-1.656-1.343-3-3-3z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/expand.png b/resources/lib/oojs-ui/themes/apex/images/icons/expand.png
new file mode 100644 (file)
index 0000000..9073d24
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/expand.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/expand.svg b/resources/lib/oojs-ui/themes/apex/images/icons/expand.svg
new file mode 100644 (file)
index 0000000..7666b41
--- /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="expand">
+        <path id="arrow" d="M17.303 8.283l-5.303 5.303-5.303-5.303-1.414 1.414 6.717 6.717 6.717-6.717z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/help.png b/resources/lib/oojs-ui/themes/apex/images/icons/help.png
new file mode 100644 (file)
index 0000000..b80df00
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/help.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/help.svg b/resources/lib/oojs-ui/themes/apex/images/icons/help.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/apex/images/icons/info.png b/resources/lib/oojs-ui/themes/apex/images/icons/info.png
new file mode 100644 (file)
index 0000000..eb0fb46
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/info.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/info.svg b/resources/lib/oojs-ui/themes/apex/images/icons/info.svg
new file mode 100644 (file)
index 0000000..9c0d1cb
--- /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="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>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/link.png b/resources/lib/oojs-ui/themes/apex/images/icons/link.png
new file mode 100644 (file)
index 0000000..2a087a4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/link.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/link.svg b/resources/lib/oojs-ui/themes/apex/images/icons/link.svg
new file mode 100644 (file)
index 0000000..dbae341
--- /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="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/apex/images/icons/menu.png b/resources/lib/oojs-ui/themes/apex/images/icons/menu.png
new file mode 100644 (file)
index 0000000..0a78119
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/menu.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/menu.svg b/resources/lib/oojs-ui/themes/apex/images/icons/menu.svg
new file mode 100644 (file)
index 0000000..50ac8a3
--- /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="menu">
+        <path id="lines" d="M6 15h12c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-12c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1zm-1-4v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1zm0-5v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.png
new file mode 100644 (file)
index 0000000..fc4cd39
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.svg b/resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.svg
new file mode 100644 (file)
index 0000000..51e6611
--- /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="move-ltr">
+        <path id="arrow" d="M8.935 7.181l5.302 5.302-5.302 5.303 1.414 1.414 6.716-6.717-6.716-6.716z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png
new file mode 100644 (file)
index 0000000..dbce05e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.svg b/resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.svg
new file mode 100644 (file)
index 0000000..bcee09d
--- /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="move-rtl">
+        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.414-1.414-6.716 6.716 6.716 6.717z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/picture.png b/resources/lib/oojs-ui/themes/apex/images/icons/picture.png
new file mode 100644 (file)
index 0000000..2043424
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/picture.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/picture.svg b/resources/lib/oojs-ui/themes/apex/images/icons/picture.svg
new file mode 100644 (file)
index 0000000..7400bca
--- /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="picture">
+        <path id="frame" d="M18 4h-12c-2-.007-3 .993-3 2.993l.014 9.007c-.014 2 .986 2.988 2.986 3h12c2-.012 2.994-1 3-3.006v-9.001c-.006-2-1-3-3-2.993zm1 13h-14v-11h14v11z"/>
+        <path id="mountains" d="M6 13.5l3.5-3.5 2.328 2.312-1.312 1.094.875 1.032 4.109-3.438 2.5 2v3h-12z"/>
+        <path id="sky" d="M6 12l3.516-4.156 3.046 3.172 2.938-2.016 2.5 2v-4h-12z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/remove.png b/resources/lib/oojs-ui/themes/apex/images/icons/remove.png
new file mode 100644 (file)
index 0000000..9dc34b8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/remove.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/remove.svg b/resources/lib/oojs-ui/themes/apex/images/icons/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/resources/lib/oojs-ui/themes/apex/images/icons/search.png b/resources/lib/oojs-ui/themes/apex/images/icons/search.png
new file mode 100644 (file)
index 0000000..39d3ab8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/search.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/search.svg b/resources/lib/oojs-ui/themes/apex/images/icons/search.svg
new file mode 100644 (file)
index 0000000..e4db4f0
--- /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="search">
+        <path id="magnifying-glass" d="M16.021 15.96l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/settings.png b/resources/lib/oojs-ui/themes/apex/images/icons/settings.png
new file mode 100644 (file)
index 0000000..dd2706b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/settings.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/settings.svg b/resources/lib/oojs-ui/themes/apex/images/icons/settings.svg
new file mode 100644 (file)
index 0000000..9fa0a4b
--- /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="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>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/tag.png b/resources/lib/oojs-ui/themes/apex/images/icons/tag.png
new file mode 100644 (file)
index 0000000..8e100fc
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/tag.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/tag.svg b/resources/lib/oojs-ui/themes/apex/images/icons/tag.svg
new file mode 100644 (file)
index 0000000..534824c
--- /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="tag">
+        <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/window.png b/resources/lib/oojs-ui/themes/apex/images/icons/window.png
new file mode 100644 (file)
index 0000000..db726a1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/window.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/window.svg b/resources/lib/oojs-ui/themes/apex/images/icons/window.svg
new file mode 100644 (file)
index 0000000..cd3b76c
--- /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="window">
+        <path id="title" d="M7 10h10v1h-10z"/>
+        <path id="frame" d="M16 19h-8c-2.206 0-4-1.794-4-4v-6c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zm-8-12c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2v-6c0-1.103-.897-2-2-2h-8z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/alert.png b/resources/lib/oojs-ui/themes/apex/images/indicators/alert.png
new file mode 100644 (file)
index 0000000..5bf0827
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/indicators/alert.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/alert.svg b/resources/lib/oojs-ui/themes/apex/images/indicators/alert.svg
new file mode 100644 (file)
index 0000000..d9dc6a8
--- /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="alert">
+        <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2v-5h-2zm0 3h2v-2h-2z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.png b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.png
new file mode 100644 (file)
index 0000000..6574725
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.svg b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.svg
new file mode 100644 (file)
index 0000000..bfa8ef0
--- /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="down">
+        <path id="arrow" d="M2 3l3.5 6 3.5-6z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.png b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.png
new file mode 100644 (file)
index 0000000..7c84397
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.svg b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.svg
new file mode 100644 (file)
index 0000000..aeca27a
--- /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="ltr">
+        <path id="arrow" d="M3 9v-7l6 3.5z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.png b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.png
new file mode 100644 (file)
index 0000000..5bf9064
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.svg b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.svg
new file mode 100644 (file)
index 0000000..eba0099
--- /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="rtl">
+        <path id="arrow" d="M3 5.5l6 3.5v-7z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.png b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.png
new file mode 100644 (file)
index 0000000..1a05ade
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.svg b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.svg
new file mode 100644 (file)
index 0000000..4b01bb0
--- /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="up">
+        <path id="arrow" d="M5.5 2l-3.5 6h7z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/required.png b/resources/lib/oojs-ui/themes/apex/images/indicators/required.png
new file mode 100644 (file)
index 0000000..45eb03b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/indicators/required.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/required.svg b/resources/lib/oojs-ui/themes/apex/images/indicators/required.svg
new file mode 100644 (file)
index 0000000..969fa2d
--- /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="required">
+        <path d="M5 1h2v10h-2zM9.83 2.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/textures/pending.gif b/resources/lib/oojs-ui/themes/apex/images/textures/pending.gif
new file mode 100644 (file)
index 0000000..1194eed
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/textures/pending.gif differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/textures/transparency.png b/resources/lib/oojs-ui/themes/apex/images/textures/transparency.png
new file mode 100644 (file)
index 0000000..1843f27
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/textures/transparency.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/textures/transparency.svg b/resources/lib/oojs-ui/themes/apex/images/textures/transparency.svg
new file mode 100644 (file)
index 0000000..63a0b57
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="16" height="16" viewBox="0, 0, 16, 16">
+       <g id="transparency">
+               <path d="M0,0 L8,0 L8,8 L0,8 z" fill="#CCCCCC"/>
+               <path d="M8,8 L16,8 L16,16 L8,16 z" fill="#CCCCCC"/>
+               <path d="M8,0 L16,0 L16,8 L8,8 z" fill="#FFFFFF"/>
+               <path d="M0,8 L8,8 L8,16 L0,16 z" fill="#FFFFFF"/>
+       </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/toolbar-shadow.png b/resources/lib/oojs-ui/themes/apex/images/toolbar-shadow.png
new file mode 100644 (file)
index 0000000..97e8d13
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/toolbar-shadow.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png
new file mode 100644 (file)
index 0000000..53d6441
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.svg
new file mode 100644 (file)
index 0000000..cfbb6d8
--- /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: #00C697 }</style>
+    <g id="add">
+        <path id="plus" d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.png
new file mode 100644 (file)
index 0000000..d6144e3
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.svg
new file mode 100644 (file)
index 0000000..93a1c6e
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="add">
+        <path id="plus" d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.png
new file mode 100644 (file)
index 0000000..730d102
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.svg
new file mode 100644 (file)
index 0000000..29e5dba
--- /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="add">
+        <path id="plus" d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png
new file mode 100644 (file)
index 0000000..e074515
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.svg
new file mode 100644 (file)
index 0000000..c3e43d1
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="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>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png
new file mode 100644 (file)
index 0000000..514ff1d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.svg
new file mode 100644 (file)
index 0000000..201b4d7
--- /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="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>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png
new file mode 100644 (file)
index 0000000..5440113
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.svg
new file mode 100644 (file)
index 0000000..715a3f5
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="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/alert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png
new file mode 100644 (file)
index 0000000..e98a14a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.svg
new file mode 100644 (file)
index 0000000..f0c6522
--- /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="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/arched-arrow-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png
new file mode 100644 (file)
index 0000000..8a07140
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg
new file mode 100644 (file)
index 0000000..1874597
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="arched-arrow-ltr">
+        <path id="arrow" d="M19.925 14.937l-2.391-6.901-1.48 2.329c-.964-.845-2.699-1.85-5.513-1.823-4.887.046-6.524 4.244-6.524 4.244s2.753-2.639 6.925-1.949c1.729.286 3.007 1.206 3.675 1.791l-1.474 2.319 6.782-.01z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png
new file mode 100644 (file)
index 0000000..88db108
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.svg
new file mode 100644 (file)
index 0000000..8a670ef
--- /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="arched-arrow-ltr">
+        <path id="arrow" d="M19.925 14.937l-2.391-6.901-1.48 2.329c-.964-.845-2.699-1.85-5.513-1.823-4.887.046-6.524 4.244-6.524 4.244s2.753-2.639 6.925-1.949c1.729.286 3.007 1.206 3.675 1.791l-1.474 2.319 6.782-.01z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png
new file mode 100644 (file)
index 0000000..c6cbec1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg
new file mode 100644 (file)
index 0000000..75b23b4
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="arched-arrow-rtl">
+        <path id="arrow" d="M13.401 8.542c-2.814-.027-4.549.978-5.513 1.823l-1.48-2.329-2.391 6.901 6.782.009-1.474-2.319c.668-.584 1.945-1.504 3.675-1.791 4.172-.69 6.925 1.949 6.925 1.949s-1.637-4.197-6.524-4.243z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png
new file mode 100644 (file)
index 0000000..0afcbfa
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.svg
new file mode 100644 (file)
index 0000000..01fc216
--- /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="arched-arrow-rtl">
+        <path id="arrow" d="M13.401 8.542c-2.814-.027-4.549.978-5.513 1.823l-1.48-2.329-2.391 6.901 6.782.009-1.474-2.319c.668-.584 1.945-1.504 3.675-1.791 4.172-.69 6.925 1.949 6.925 1.949s-1.637-4.197-6.524-4.243z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png
new file mode 100644 (file)
index 0000000..0a6d487
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.svg
new file mode 100644 (file)
index 0000000..90923d5
--- /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: #00C697 }</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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png
new file mode 100644 (file)
index 0000000..1ff6790
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.svg
new file mode 100644 (file)
index 0000000..3e42ba8
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24"><style>* { fill: #FFFFFF }</style>
+    <g id="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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png
new file mode 100644 (file)
index 0000000..9a2c9db
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.svg
new file mode 100644 (file)
index 0000000..8d4a1f8
--- /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="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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png
new file mode 100644 (file)
index 0000000..5668e12
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.svg
new file mode 100644 (file)
index 0000000..6d3bc58
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="clear">
+        <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png
new file mode 100644 (file)
index 0000000..51a33ff
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.svg
new file mode 100644 (file)
index 0000000..0dcde9d
--- /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="clear">
+        <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
+    </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
new file mode 100644 (file)
index 0000000..7b76ffe
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.png 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
new file mode 100644 (file)
index 0000000..0305027
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close.png
new file mode 100644 (file)
index 0000000..4eedfbc
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close.png 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
new file mode 100644 (file)
index 0000000..1345e86
--- /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="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/code-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png
new file mode 100644 (file)
index 0000000..23c5983
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.svg
new file mode 100644 (file)
index 0000000..bc4ae94
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="code">
+        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1v-2.386c0-.514.024-.896.073-1.142.054-.252.139-.463.257-.633.204-.279.473-.475.808-.584.335-.115.872-.255 1.835-.255h1.027v1h-.752c-.457 0-.77.191-.936.408-.167.215-.312.445-.312 1.068v1.857c0 .729-.041 1.18-.244 1.493-.2.307-.562.529-1.09.667.535.155.9.385 1.096.688.199.303.238.757.238 1.484v1.862c0 .619.145.848.312 1.062.166.22.479.407.936.407l.752.004v1h-1.027c-.963 0-1.5-.133-1.835-.248-.335-.109-.604-.307-.808-.591-.118-.165-.203-.374-.257-.625-.049-.253-.073-.636-.073-1.149v-2.387c0-1 0-1-1-1h-1z"/>
+        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png
new file mode 100644 (file)
index 0000000..ee58c9a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.svg
new file mode 100644 (file)
index 0000000..32f140d
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
+    <g id="code">
+        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1v-2.386c0-.514.024-.896.073-1.142.054-.252.139-.463.257-.633.204-.279.473-.475.808-.584.335-.115.872-.255 1.835-.255h1.027v1h-.752c-.457 0-.77.191-.936.408-.167.215-.312.445-.312 1.068v1.857c0 .729-.041 1.18-.244 1.493-.2.307-.562.529-1.09.667.535.155.9.385 1.096.688.199.303.238.757.238 1.484v1.862c0 .619.145.848.312 1.062.166.22.479.407.936.407l.752.004v1h-1.027c-.963 0-1.5-.133-1.835-.248-.335-.109-.604-.307-.808-.591-.118-.165-.203-.374-.257-.625-.049-.253-.073-.636-.073-1.149v-2.387c0-1 0-1-1-1h-1z"/>
+        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png
new file mode 100644 (file)
index 0000000..a9d0d33
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.svg
new file mode 100644 (file)
index 0000000..451e0fe
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="collapse">
+        <path id="arrow" d="M6.697 15.714l5.303-5.302 5.303 5.302 1.414-1.414-6.717-6.717-6.717 6.717z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png
new file mode 100644 (file)
index 0000000..353ac79
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.svg
new file mode 100644 (file)
index 0000000..55aa8f8
--- /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="collapse">
+        <path id="arrow" d="M6.697 15.714l5.303-5.302 5.303 5.302 1.414-1.414-6.717-6.717-6.717 6.717z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.png
new file mode 100644 (file)
index 0000000..0ed3528
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.svg
new file mode 100644 (file)
index 0000000..b6152fe
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="comment">
+        <path id="speech-bubble" d="M15 6h-6c-1.657 0-3 1.344-3 3v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3v-4c0-1.656-1.343-3-3-3z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.png
new file mode 100644 (file)
index 0000000..265a3e4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.svg
new file mode 100644 (file)
index 0000000..0ae7e63
--- /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="comment">
+        <path id="speech-bubble" d="M15 6h-6c-1.657 0-3 1.344-3 3v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3v-4c0-1.656-1.343-3-3-3z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.png
new file mode 100644 (file)
index 0000000..05f7138
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.svg
new file mode 100644 (file)
index 0000000..a3cadb4
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="expand">
+        <path id="arrow" d="M17.303 8.283l-5.303 5.303-5.303-5.303-1.414 1.414 6.717 6.717 6.717-6.717z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.png
new file mode 100644 (file)
index 0000000..9073d24
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.svg
new file mode 100644 (file)
index 0000000..7666b41
--- /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="expand">
+        <path id="arrow" d="M17.303 8.283l-5.303 5.303-5.303-5.303-1.414 1.414 6.717 6.717 6.717-6.717z"/>
+    </g>
+</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
new file mode 100644 (file)
index 0000000..185c1a2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-invert.png 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
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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help.png
new file mode 100644 (file)
index 0000000..b80df00
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help.png 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
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/info-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png
new file mode 100644 (file)
index 0000000..83b00a2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.svg
new file mode 100644 (file)
index 0000000..be4d2c7
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24"><style>* { fill: #FFFFFF }</style>
+    <g id="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>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png
new file mode 100644 (file)
index 0000000..eb0fb46
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.svg
new file mode 100644 (file)
index 0000000..9c0d1cb
--- /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="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>
+</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
new file mode 100644 (file)
index 0000000..d920459
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-invert.png 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
new file mode 100644 (file)
index 0000000..01ce113
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link.png
new file mode 100644 (file)
index 0000000..2a087a4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link.png 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
new file mode 100644 (file)
index 0000000..dbae341
--- /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="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/menu-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png
new file mode 100644 (file)
index 0000000..0400c19
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.svg
new file mode 100644 (file)
index 0000000..dddbbb8
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="menu">
+        <path id="lines" d="M6 15h12c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-12c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1zm-1-4v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1zm0-5v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png
new file mode 100644 (file)
index 0000000..0a78119
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.svg
new file mode 100644 (file)
index 0000000..50ac8a3
--- /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="menu">
+        <path id="lines" d="M6 15h12c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-12c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1zm-1-4v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1zm0-5v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.png
new file mode 100644 (file)
index 0000000..7c9bdc1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.svg
new file mode 100644 (file)
index 0000000..10f0c4e
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="move-ltr">
+        <path id="arrow" d="M8.935 7.181l5.302 5.302-5.302 5.303 1.414 1.414 6.716-6.717-6.716-6.716z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.png
new file mode 100644 (file)
index 0000000..fc4cd39
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.svg
new file mode 100644 (file)
index 0000000..51e6611
--- /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="move-ltr">
+        <path id="arrow" d="M8.935 7.181l5.302 5.302-5.302 5.303 1.414 1.414 6.716-6.717-6.716-6.716z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png
new file mode 100644 (file)
index 0000000..e97d37b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.svg
new file mode 100644 (file)
index 0000000..002ec0f
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="move-rtl">
+        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.414-1.414-6.716 6.716 6.716 6.717z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png
new file mode 100644 (file)
index 0000000..dbce05e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.svg
new file mode 100644 (file)
index 0000000..bcee09d
--- /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="move-rtl">
+        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.414-1.414-6.716 6.716 6.716 6.717z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.png
new file mode 100644 (file)
index 0000000..d6dc62c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.svg
new file mode 100644 (file)
index 0000000..55e0b7f
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="picture">
+        <path id="frame" d="M18 4h-12c-2-.007-3 .993-3 2.993l.014 9.007c-.014 2 .986 2.988 2.986 3h12c2-.012 2.994-1 3-3.006v-9.001c-.006-2-1-3-3-2.993zm1 13h-14v-11h14v11z"/>
+        <path id="mountains" d="M6 13.5l3.5-3.5 2.328 2.312-1.312 1.094.875 1.032 4.109-3.438 2.5 2v3h-12z"/>
+        <path id="sky" d="M6 12l3.516-4.156 3.046 3.172 2.938-2.016 2.5 2v-4h-12z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.png
new file mode 100644 (file)
index 0000000..2043424
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.svg
new file mode 100644 (file)
index 0000000..7400bca
--- /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="picture">
+        <path id="frame" d="M18 4h-12c-2-.007-3 .993-3 2.993l.014 9.007c-.014 2 .986 2.988 2.986 3h12c2-.012 2.994-1 3-3.006v-9.001c-.006-2-1-3-3-2.993zm1 13h-14v-11h14v11z"/>
+        <path id="mountains" d="M6 13.5l3.5-3.5 2.328 2.312-1.312 1.094.875 1.032 4.109-3.438 2.5 2v3h-12z"/>
+        <path id="sky" d="M6 12l3.516-4.156 3.046 3.172 2.938-2.016 2.5 2v-4h-12z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.png
new file mode 100644 (file)
index 0000000..8b6799f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.svg
new file mode 100644 (file)
index 0000000..be51bea
--- /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: #E81915 }</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>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.png
new file mode 100644 (file)
index 0000000..3343de8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.svg
new file mode 100644 (file)
index 0000000..ddc352f
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="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/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.png
new file mode 100644 (file)
index 0000000..9dc34b8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/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/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png
new file mode 100644 (file)
index 0000000..3e15daf
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.svg
new file mode 100644 (file)
index 0000000..5ae4952
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="search">
+        <path id="magnifying-glass" d="M16.021 15.96l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png
new file mode 100644 (file)
index 0000000..39d3ab8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.svg
new file mode 100644 (file)
index 0000000..e4db4f0
--- /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="search">
+        <path id="magnifying-glass" d="M16.021 15.96l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.png
new file mode 100644 (file)
index 0000000..17b4379
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.svg
new file mode 100644 (file)
index 0000000..d7ad1e5
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24"><style>* { fill: #FFFFFF }</style>
+    <g id="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>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.png
new file mode 100644 (file)
index 0000000..dd2706b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.svg
new file mode 100644 (file)
index 0000000..9fa0a4b
--- /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="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>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png
new file mode 100644 (file)
index 0000000..c233429
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.svg
new file mode 100644 (file)
index 0000000..e573429
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="tag">
+        <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png
new file mode 100644 (file)
index 0000000..8e100fc
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.svg
new file mode 100644 (file)
index 0000000..534824c
--- /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="tag">
+        <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.png
new file mode 100644 (file)
index 0000000..1c6ed1f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.svg
new file mode 100644 (file)
index 0000000..0aeb616
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="window">
+        <path id="title" d="M7 10h10v1h-10z"/>
+        <path id="frame" d="M16 19h-8c-2.206 0-4-1.794-4-4v-6c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zm-8-12c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2v-6c0-1.103-.897-2-2-2h-8z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.png
new file mode 100644 (file)
index 0000000..db726a1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.svg
new file mode 100644 (file)
index 0000000..cd3b76c
--- /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="window">
+        <path id="title" d="M7 10h10v1h-10z"/>
+        <path id="frame" d="M16 19h-8c-2.206 0-4-1.794-4-4v-6c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zm-8-12c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2v-6c0-1.103-.897-2-2-2h-8z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.png
new file mode 100644 (file)
index 0000000..28c8704
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.svg
new file mode 100644 (file)
index 0000000..cd66649
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="alert">
+        <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2v-5h-2zm0 3h2v-2h-2z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.png
new file mode 100644 (file)
index 0000000..5bf0827
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.svg
new file mode 100644 (file)
index 0000000..d9dc6a8
--- /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="alert">
+        <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2v-5h-2zm0 3h2v-2h-2z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png
new file mode 100644 (file)
index 0000000..226eb5c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.svg
new file mode 100644 (file)
index 0000000..31a561a
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="ltr">
+        <path id="arrow" d="M12.008,3.034 L11.545,2.567 C11.095,2.121 10.359,2.122 9.908,2.567 L6.003,6.424 L2.087,2.559 C1.637,2.113 0.911,2.129 0.461,2.576 L-0.001,3.034 L6.003,9 L6.003,8.991 L6.003,9 L12.008,3.034"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png
new file mode 100644 (file)
index 0000000..9a418c9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.svg
new file mode 100644 (file)
index 0000000..d64695f
--- /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="ltr">
+        <path id="arrow" d="M12.008,3.034 L11.545,2.567 C11.095,2.121 10.359,2.122 9.908,2.567 L6.003,6.424 L2.087,2.559 C1.637,2.113 0.911,2.129 0.461,2.576 L-0.001,3.034 L6.003,9 L6.003,8.991 L6.003,9 L12.008,3.034"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png
new file mode 100644 (file)
index 0000000..a348495
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.svg
new file mode 100644 (file)
index 0000000..5816c08
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="ltr">
+        <path id="arrow" d="M3.972,-0.005 L3.503,0.458 C3.058,0.908 3.058,1.644 3.503,2.095 L7.36,6 L3.495,9.915 C3.05,10.365 3.065,11.091 3.513,11.541 L3.972,12.004 L9.938,6 L9.929,6 L9.938,6 L3.972,-0.005"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png
new file mode 100644 (file)
index 0000000..bfed7d2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.svg
new file mode 100644 (file)
index 0000000..7bccea1
--- /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="ltr">
+        <path id="arrow" d="M3.972,-0.005 L3.503,0.458 C3.058,0.908 3.058,1.644 3.503,2.095 L7.36,6 L3.495,9.915 C3.05,10.365 3.065,11.091 3.513,11.541 L3.972,12.004 L9.938,6 L9.929,6 L9.938,6 L3.972,-0.005"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png
new file mode 100644 (file)
index 0000000..5080ea5
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.svg
new file mode 100644 (file)
index 0000000..01e40d7
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="rtl">
+        <path id="arrow" d="M7.979,12.004 L8.448,11.541 C8.893,11.091 8.893,10.355 8.448,9.904 L4.59,5.999 L8.455,2.084 C8.9,1.634 8.885,0.908 8.437,0.458 L7.979,-0.005 L2.013,5.999 L2.022,5.999 L2.013,5.999 L7.979,12.004"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png
new file mode 100644 (file)
index 0000000..0639809
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.svg
new file mode 100644 (file)
index 0000000..304c516
--- /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="rtl">
+        <path id="arrow" d="M7.979,12.004 L8.448,11.541 C8.893,11.091 8.893,10.355 8.448,9.904 L4.59,5.999 L8.455,2.084 C8.9,1.634 8.885,0.908 8.437,0.458 L7.979,-0.005 L2.013,5.999 L2.022,5.999 L2.013,5.999 L7.979,12.004"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png
new file mode 100644 (file)
index 0000000..0474926
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.svg
new file mode 100644 (file)
index 0000000..e880711
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="up">
+        <path id="arrow" d="M-0.001,7.99 L0.462,8.459 C0.912,8.904 1.648,8.904 2.099,8.459 L6.004,4.601 L9.919,8.467 C10.369,8.912 11.095,8.897 11.545,8.449 L12.008,7.99 L6.004,2.024 L6.004,2.033 L6.004,2.024 L-0.001,7.99"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png
new file mode 100644 (file)
index 0000000..ac9f0b5
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.svg
new file mode 100644 (file)
index 0000000..4769526
--- /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="up">
+        <path id="arrow" d="M-0.001,7.99 L0.462,8.459 C0.912,8.904 1.648,8.904 2.099,8.459 L6.004,4.601 L9.919,8.467 C10.369,8.912 11.095,8.897 11.545,8.449 L12.008,7.99 L6.004,2.024 L6.004,2.033 L6.004,2.024 L-0.001,7.99"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.png
new file mode 100644 (file)
index 0000000..614c6e8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.svg
new file mode 100644 (file)
index 0000000..30baa50
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="required">
+        <path d="M5 1h2v10h-2zM9.83 2.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.png
new file mode 100644 (file)
index 0000000..45eb03b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.svg
new file mode 100644 (file)
index 0000000..969fa2d
--- /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="required">
+        <path d="M5 1h2v10h-2zM9.83 2.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/textures/pending.gif b/resources/lib/oojs-ui/themes/mediawiki/images/textures/pending.gif
new file mode 100644 (file)
index 0000000..1194eed
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/textures/pending.gif differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.png b/resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.png
new file mode 100644 (file)
index 0000000..1843f27
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.svg b/resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.svg
new file mode 100644 (file)
index 0000000..63a0b57
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="16" height="16" viewBox="0, 0, 16, 16">
+       <g id="transparency">
+               <path d="M0,0 L8,0 L8,8 L0,8 z" fill="#CCCCCC"/>
+               <path d="M8,8 L16,8 L16,16 L8,16 z" fill="#CCCCCC"/>
+               <path d="M8,0 L16,0 L16,8 L8,8 z" fill="#FFFFFF"/>
+               <path d="M0,8 L8,8 L8,16 L0,16 z" fill="#FFFFFF"/>
+       </g>
+</svg>
index 71f2f55..f8a990c 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs v1.0.12 optimised for jQuery
+ * OOjs v1.1.2 optimised for jQuery
  * https://www.mediawiki.org/wiki/OOjs
  *
  * Copyright 2011-2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-08-20T22:33:41Z
+ * Date: 2014-11-06T17:42:36Z
  */
 ( function ( global ) {
 
@@ -37,16 +37,16 @@ oo.initClass = function ( fn ) {
 };
 
 /**
- * Utility for common usage of Object#create for inheriting from one
- * prototype to another.
+ * Inherit from prototype to another using Object#create.
  *
  * Beware: This redefines the prototype, call before setting your prototypes.
+ *
  * Beware: This redefines the prototype, can only be called once on a function.
- *  If called multiple times on the same function, the previous prototype is lost.
- *  This is how prototypal inheritance works, it can only be one straight chain
- *  (just like classical inheritance in PHP for example). If you need to work with
- *  multiple constructors consider storing an instance of the other constructor in a
- *  property instead, or perhaps use a mixin (see OO.mixinClass).
+ * If called multiple times on the same function, the previous prototype is lost.
+ * This is how prototypal inheritance works, it can only be one straight chain
+ * (just like classical inheritance in PHP for example). If you need to work with
+ * multiple constructors consider storing an instance of the other constructor in a
+ * property instead, or perhaps use a mixin (see OO.mixinClass).
  *
  *     function Thing() {}
  *     Thing.prototype.exists = function () {};
@@ -103,13 +103,15 @@ oo.inheritClass = function ( targetFn, originFn ) {
 };
 
 /**
- * Utility to copy over *own* prototype properties of a mixin.
+ * Copy over *own* prototype properties of a mixin.
+ *
  * The 'constructor' (whether implicit or explicit) is not copied over.
  *
  * This does not create inheritance to the origin. If inheritance is needed
  * use oo.inheritClass instead.
  *
  * Beware: This can redefine a prototype property, call before setting your prototypes.
+ *
  * Beware: Don't call before oo.inheritClass.
  *
  *     function Foo() {}
@@ -216,7 +218,7 @@ oo.getObjectValues = function ( obj ) {
 };
 
 /**
- * Recursively compares properties between two objects.
+ * Recursively compare properties between two objects.
  *
  * A false result may be caused by property inequality or by properties in one object missing from
  * the other. An asymmetrical test may also be performed, which checks only that properties in the
@@ -224,8 +226,8 @@ oo.getObjectValues = function ( obj ) {
  *
  * If either a or b is null or undefined it will be treated as an empty object.
  *
- * @param {Object|undefined} a First object to compare
- * @param {Object|undefined} b Second object to compare
+ * @param {Object|undefined|null} a First object to compare
+ * @param {Object|undefined|null} b Second object to compare
  * @param {boolean} [asymmetrical] Whether to check only that b contains values from a
  * @return {boolean} If the objects contain the same values as each other
  */
@@ -251,7 +253,10 @@ oo.compare = function ( a, b, asymmetrical ) {
                aType = typeof aValue;
                bType = typeof bValue;
                if ( aType !== bType ||
-                       ( ( aType === 'string' || aType === 'number' ) && aValue !== bValue ) ||
+                       (
+                               ( aType === 'string' || aType === 'number' || aType === 'boolean' ) &&
+                               aValue !== bValue
+                       ) ||
                        ( aValue === Object( aValue ) && !oo.compare( aValue, bValue, asymmetrical ) ) ) {
                        return false;
                }
@@ -330,7 +335,7 @@ oo.getHash = function ( val ) {
 };
 
 /**
- * Helper function for OO.getHash which sorts objects by key.
+ * Sort objects by key (helper function for OO.getHash).
  *
  * This is a callback passed into JSON.stringify.
  *
@@ -460,253 +465,254 @@ oo.isPlainObject = $.isPlainObject;
 
 /*global hasOwn */
 
-/**
- * @class OO.EventEmitter
- *
- * @constructor
- */
-oo.EventEmitter = function OoEventEmitter() {
-       // Properties
+( function () {
 
        /**
-        * Storage of bound event handlers by event name.
+        * @class OO.EventEmitter
         *
-        * @property
+        * @constructor
         */
-       this.bindings = {};
-};
+       oo.EventEmitter = function OoEventEmitter() {
+               // Properties
 
-oo.initClass( oo.EventEmitter );
-
-/* Methods */
+               /**
+                * Storage of bound event handlers by event name.
+                *
+                * @property
+                */
+               this.bindings = {};
+       };
 
-/**
- * Add a listener to events of a specific event.
- *
- * The listener can be a function or the string name of a method; if the latter, then the
- * name lookup happens at the time the listener is called.
- *
- * @param {string} event Type of event to listen to
- * @param {Function|string} method Function or method name to call when event occurs
- * @param {Array} [args] Arguments to pass to listener, will be prepended to emitted arguments
- * @param {Object} [context=null] Context object for function or method call
- * @throws {Error} Listener argument is not a function or a valid method name
- * @chainable
- */
-oo.EventEmitter.prototype.on = function ( event, method, args, context ) {
-       var bindings;
+       oo.initClass( oo.EventEmitter );
 
-       this.constructor.static.validateMethod( method, context );
+       /* Private helper functions */
 
-       if ( hasOwn.call( this.bindings, event ) ) {
-               bindings = this.bindings[event];
-       } else {
-               // Auto-initialize bindings list
-               bindings = this.bindings[event] = [];
+       /**
+        * Validate a function or method call in a context
+        *
+        * For a method name, check that it names a function in the context object
+        *
+        * @private
+        * @param {Function|string} method Function or method name
+        * @param {Mixed} context The context of the call
+        * @throws {Error} A method name is given but there is no context
+        * @throws {Error} In the context object, no property exists with the given name
+        * @throws {Error} In the context object, the named property is not a function
+        */
+       function validateMethod( method, context ) {
+               // Validate method and context
+               if ( typeof method === 'string' ) {
+                       // Validate method
+                       if ( context === undefined || context === null ) {
+                               throw new Error( 'Method name "' + method + '" has no context.' );
+                       }
+                       if ( typeof context[method] !== 'function' ) {
+                               // Technically the property could be replaced by a function before
+                               // call time. But this probably signals a typo.
+                               throw new Error( 'Property "' + method + '" is not a function' );
+                       }
+               } else if ( typeof method !== 'function' ) {
+                       throw new Error( 'Invalid callback. Function or method name expected.' );
+               }
        }
-       // Add binding
-       bindings.push( {
-               method: method,
-               args: args,
-               context: ( arguments.length < 4 ) ? null : context
-       } );
-       return this;
-};
 
-/**
- * Adds a one-time listener to a specific event.
- *
- * @param {string} event Type of event to listen to
- * @param {Function} listener Listener to call when event occurs
- * @chainable
- */
-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 ) );
-               };
-       return this.on( event, listenerWrapper );
-};
+       /* Methods */
 
-/**
- * Remove a specific listener from a specific event.
- *
- * @param {string} event Type of event to remove listener from
- * @param {Function|string} [method] Listener to remove. Must be in the same form as was passed
- * to "on". Omit to remove all listeners.
- * @param {Object} [context=null] Context object function or method call
- * @chainable
- * @throws {Error} Listener argument is not a function or a valid method name
- */
-oo.EventEmitter.prototype.off = function ( event, method, context ) {
-       var i, bindings;
+       /**
+        * Add a listener to events of a specific event.
+        *
+        * The listener can be a function or the string name of a method; if the latter, then the
+        * name lookup happens at the time the listener is called.
+        *
+        * @param {string} event Type of event to listen to
+        * @param {Function|string} method Function or method name to call when event occurs
+        * @param {Array} [args] Arguments to pass to listener, will be prepended to emitted arguments
+        * @param {Object} [context=null] Context object for function or method call
+        * @throws {Error} Listener argument is not a function or a valid method name
+        * @chainable
+        */
+       oo.EventEmitter.prototype.on = function ( event, method, args, context ) {
+               var bindings;
+
+               validateMethod( method, context );
 
-       if ( arguments.length === 1 ) {
-               // Remove all bindings for event
-               delete this.bindings[event];
+               if ( hasOwn.call( this.bindings, event ) ) {
+                       bindings = this.bindings[event];
+               } else {
+                       // Auto-initialize bindings list
+                       bindings = this.bindings[event] = [];
+               }
+               // Add binding
+               bindings.push( {
+                       method: method,
+                       args: args,
+                       context: ( arguments.length < 4 ) ? null : context
+               } );
                return this;
-       }
+       };
 
-       this.constructor.static.validateMethod( method, context );
+       /**
+        * Add a one-time listener to a specific event.
+        *
+        * @param {string} event Type of event to listen to
+        * @param {Function} listener Listener to call when event occurs
+        * @chainable
+        */
+       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 ) );
+                       };
+               return this.on( event, listenerWrapper );
+       };
 
-       if ( !( event in this.bindings ) || !this.bindings[event].length ) {
-               // No matching bindings
-               return this;
-       }
+       /**
+        * Remove a specific listener from a specific event.
+        *
+        * @param {string} event Type of event to remove listener from
+        * @param {Function|string} [method] Listener to remove. Must be in the same form as was passed
+        * to "on". Omit to remove all listeners.
+        * @param {Object} [context=null] Context object function or method call
+        * @chainable
+        * @throws {Error} Listener argument is not a function or a valid method name
+        */
+       oo.EventEmitter.prototype.off = function ( event, method, context ) {
+               var i, bindings;
 
-       // Default to null context
-       if ( arguments.length < 3 ) {
-               context = null;
-       }
+               if ( arguments.length === 1 ) {
+                       // Remove all bindings for event
+                       delete this.bindings[event];
+                       return this;
+               }
+
+               validateMethod( method, context );
 
-       // Remove matching handlers
-       bindings = this.bindings[event];
-       i = bindings.length;
-       while ( i-- ) {
-               if ( bindings[i].method === method && bindings[i].context === context ) {
-                       bindings.splice( i, 1 );
+               if ( !hasOwn.call( this.bindings, event ) || !this.bindings[event].length ) {
+                       // No matching bindings
+                       return this;
                }
-       }
 
-       // Cleanup if now empty
-       if ( bindings.length === 0 ) {
-               delete this.bindings[event];
-       }
-       return this;
-};
+               // Default to null context
+               if ( arguments.length < 3 ) {
+                       context = null;
+               }
 
-/**
- * Emit an event.
- *
- * TODO: Should this be chainable? What is the usefulness of the boolean
- * return value here?
- *
- * @param {string} event Type of event
- * @param {Mixed} args First in a list of variadic arguments passed to event handler (optional)
- * @return {boolean} If event was handled by at least one listener
- */
-oo.EventEmitter.prototype.emit = function ( event ) {
-       var i, len, binding, bindings, args, method;
-
-       if ( event in this.bindings ) {
-               // Slicing ensures that we don't get tripped up by event handlers that add/remove bindings
-               bindings = this.bindings[event].slice();
-               args = Array.prototype.slice.call( arguments, 1 );
-               for ( i = 0, len = bindings.length; i < len; i++ ) {
-                       binding = bindings[i];
-                       if ( typeof binding.method === 'string' ) {
-                               // Lookup method by name (late binding)
-                               method = binding.context[ binding.method ];
-                       } else {
-                               method = binding.method;
+               // Remove matching handlers
+               bindings = this.bindings[event];
+               i = bindings.length;
+               while ( i-- ) {
+                       if ( bindings[i].method === method && bindings[i].context === context ) {
+                               bindings.splice( i, 1 );
                        }
-                       method.apply(
-                               binding.context,
-                               binding.args ? binding.args.concat( args ) : args
-                       );
                }
-               return true;
-       }
-       return false;
-};
 
-/**
- * Connect event handlers to an object.
- *
- * @param {Object} context Object to call methods on when events occur
- * @param {Object.<string,string>|Object.<string,Function>|Object.<string,Array>} methods List of
- *  event bindings keyed by event name containing either method names, functions or arrays containing
- *  method name or function followed by a list of arguments to be passed to callback before emitted
- *  arguments
- * @chainable
- */
-oo.EventEmitter.prototype.connect = function ( context, methods ) {
-       var method, args, event;
-
-       for ( event in methods ) {
-               method = methods[event];
-               // Allow providing additional args
-               if ( Array.isArray( method ) ) {
-                       args = method.slice( 1 );
-                       method = method[0];
-               } else {
-                       args = [];
+               // Cleanup if now empty
+               if ( bindings.length === 0 ) {
+                       delete this.bindings[event];
                }
-               // Add binding
-               this.on( event, method, args, context );
-       }
-       return this;
-};
+               return this;
+       };
 
-/**
- * Disconnect event handlers from an object.
- *
- * @param {Object} context Object to disconnect methods from
- * @param {Object.<string,string>|Object.<string,Function>|Object.<string,Array>} [methods] List of
- * event bindings keyed by event name. Values can be either method names or functions, but must be
- * consistent with those used in the corresponding call to "connect".
- * @chainable
- */
-oo.EventEmitter.prototype.disconnect = function ( context, methods ) {
-       var i, event, bindings;
+       /**
+        * Emit an event.
+        *
+        * TODO: Should this be chainable? What is the usefulness of the boolean
+        * return value here?
+        *
+        * @param {string} event Type of event
+        * @param {Mixed} args First in a list of variadic arguments passed to event handler (optional)
+        * @return {boolean} If event was handled by at least one listener
+        */
+       oo.EventEmitter.prototype.emit = function ( event ) {
+               var i, len, binding, bindings, args, method;
+
+               if ( hasOwn.call( this.bindings, event ) ) {
+                       // Slicing ensures that we don't get tripped up by event handlers that add/remove bindings
+                       bindings = this.bindings[event].slice();
+                       args = Array.prototype.slice.call( arguments, 1 );
+                       for ( i = 0, len = bindings.length; i < len; i++ ) {
+                               binding = bindings[i];
+                               if ( typeof binding.method === 'string' ) {
+                                       // Lookup method by name (late binding)
+                                       method = binding.context[ binding.method ];
+                               } else {
+                                       method = binding.method;
+                               }
+                               method.apply(
+                                       binding.context,
+                                       binding.args ? binding.args.concat( args ) : args
+                               );
+                       }
+                       return true;
+               }
+               return false;
+       };
+
+       /**
+        * Connect event handlers to an object.
+        *
+        * @param {Object} context Object to call methods on when events occur
+        * @param {Object.<string,string>|Object.<string,Function>|Object.<string,Array>} methods List of
+        *  event bindings keyed by event name containing either method names, functions or arrays containing
+        *  method name or function followed by a list of arguments to be passed to callback before emitted
+        *  arguments
+        * @chainable
+        */
+       oo.EventEmitter.prototype.connect = function ( context, methods ) {
+               var method, args, event;
 
-       if ( methods ) {
-               // Remove specific connections to the context
                for ( event in methods ) {
-                       this.off( event, methods[event], context );
+                       method = methods[event];
+                       // Allow providing additional args
+                       if ( Array.isArray( method ) ) {
+                               args = method.slice( 1 );
+                               method = method[0];
+                       } else {
+                               args = [];
+                       }
+                       // Add binding
+                       this.on( event, method, args, context );
                }
-       } else {
-               // Remove all connections to the context
-               for ( event in this.bindings ) {
-                       bindings = this.bindings[event];
-                       i = bindings.length;
-                       while ( i-- ) {
-                               // bindings[i] may have been removed by the previous step's
-                               // this.off so check it still exists
-                               if ( bindings[i] && bindings[i].context === context ) {
-                                       this.off( event, bindings[i].method, context );
+               return this;
+       };
+
+       /**
+        * Disconnect event handlers from an object.
+        *
+        * @param {Object} context Object to disconnect methods from
+        * @param {Object.<string,string>|Object.<string,Function>|Object.<string,Array>} [methods] List of
+        * event bindings keyed by event name. Values can be either method names or functions, but must be
+        * consistent with those used in the corresponding call to "connect".
+        * @chainable
+        */
+       oo.EventEmitter.prototype.disconnect = function ( context, methods ) {
+               var i, event, bindings;
+
+               if ( methods ) {
+                       // Remove specific connections to the context
+                       for ( event in methods ) {
+                               this.off( event, methods[event], context );
+                       }
+               } else {
+                       // Remove all connections to the context
+                       for ( event in this.bindings ) {
+                               bindings = this.bindings[event];
+                               i = bindings.length;
+                               while ( i-- ) {
+                                       // bindings[i] may have been removed by the previous step's
+                                       // this.off so check it still exists
+                                       if ( bindings[i] && bindings[i].context === context ) {
+                                               this.off( event, bindings[i].method, context );
+                                       }
                                }
                        }
                }
-       }
 
-       return this;
-};
+               return this;
+       };
 
-/**
- * Validate a function or method call in a context
- *
- * For a method name, check that it names a function in the context object
- *
- * @static
- * @param {Function|string} method Function or method name
- * @param {Mixed} context The context of the call
- * @throws {Error} A method name is given but there is no context
- * @throws {Error} In the context object, no property exists with the given name
- * @throws {Error} In the context object, the named property is not a function
- */
-oo.EventEmitter.static.validateMethod = function ( method, context ) {
-       // Validate method and context
-       if ( typeof method === 'string' ) {
-               // Validate method
-               if ( context === undefined || context === null ) {
-                       throw new Error( 'Method name "' + method + '" has no context.' );
-               }
-               if ( !( method in context ) ) {
-                       // Technically the method does not need to exist yet: it could be
-                       // added before call time. But this probably signals a typo.
-                       throw new Error( 'Method not found: "' + method + '"' );
-               }
-               if ( typeof context[method] !== 'function' ) {
-                       // Technically the property could be replaced by a function before
-                       // call time. But this probably signals a typo.
-                       throw new Error( 'Property "' + method + '" is not a function' );
-               }
-       } else if ( typeof method !== 'function' ) {
-               throw new Error( 'Invalid callback. Function or method name expected.' );
-       }
-};
+}() );
 
 /*global hasOwn */
 
diff --git a/resources/src/jquery.json-deprecate.js b/resources/src/jquery.json-deprecate.js
deleted file mode 100644 (file)
index f38decd..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-( function ( mw, $ ) {
-       // @deprecated since 1.24.  The 'jquery.json' module will be removed in MW 1.25.  Use the 'json' module.
-
-       mw.log.deprecate( $, 'toJSON', $.toJSON, 'Use JSON.stringify instead (module "json" for polyfill).' );
-       mw.log.deprecate( $, 'evalJSON', $.evalJSON, 'Use JSON.parse instead (module "json" for polyfill).' );
-       mw.log.deprecate( $, 'secureEvalJSON', $.secureEvalJSON, 'Use JSON.parse instead (module "json" for polyfill).' );
-       mw.log.deprecate( $, 'quoteString', $.quoteString, 'Use JSON.stringify instead (module "json" for polyfill).' );
-}( mediaWiki, jQuery ) );
index 061f5d6..9a196b5 100644 (file)
@@ -108,7 +108,7 @@ $.fn.autoEllipsis = function ( options ) {
                                        r = trimmableText.length;
                                        do {
                                                m = Math.ceil( ( l + r ) / 2 );
-                                               $trimmableText.text( trimmableText.substr( 0, m ) + '...' );
+                                               $trimmableText.text( trimmableText.slice( 0, m ) + '...' );
                                                if ( $trimmableText.width() + pw > w ) {
                                                        // Text is too long
                                                        r = m - 1;
@@ -116,7 +116,7 @@ $.fn.autoEllipsis = function ( options ) {
                                                        l = m;
                                                }
                                        } while ( l < r );
-                                       $trimmableText.text( trimmableText.substr( 0, l ) + '...' );
+                                       $trimmableText.text( trimmableText.slice( 0, l ) + '...' );
                                        break;
                                case 'center':
                                        // TODO: Use binary search like for 'right'
@@ -124,7 +124,7 @@ $.fn.autoEllipsis = function ( options ) {
                                        // Begin with making the end shorter
                                        side = 1;
                                        while ( $trimmableText.outerWidth() + pw > w && i[0] > 0 ) {
-                                               $trimmableText.text( trimmableText.substr( 0, i[0] ) + '...' + trimmableText.substr( i[1] ) );
+                                               $trimmableText.text( trimmableText.slice( 0, i[0] ) + '...' + trimmableText.slice( i[1] ) );
                                                // Alternate between trimming the end and begining
                                                if ( side === 0 ) {
                                                        // Make the begining shorter
@@ -141,7 +141,7 @@ $.fn.autoEllipsis = function ( options ) {
                                        // TODO: Use binary search like for 'right'
                                        r = 0;
                                        while ( $trimmableText.outerWidth() + pw > w && r < trimmableText.length ) {
-                                               $trimmableText.text( '...' + trimmableText.substr( r ) );
+                                               $trimmableText.text( '...' + trimmableText.slice( r ) );
                                                r++;
                                        }
                                        break;
index fa7ea70..34cdf76 100644 (file)
@@ -13,7 +13,7 @@
        font-weight: bold;
        color: white;
        vertical-align: baseline;
-       text-shadow: 0 1px rgba(0, 0, 0, 0.4);
+       text-shadow: 0 1px rgba(0, 0, 0, 0.4);
 }
 
 .mw-badge-inline {
index de05fdf..5551232 100644 (file)
 
                inpParts = [
                        // Same start
-                       newVal.substring( 0, startMatches ),
+                       newVal.slice( 0, startMatches ),
                        // Inserted content
-                       newVal.substring( startMatches, newVal.length - endMatches ),
+                       newVal.slice( startMatches, newVal.length - endMatches ),
                        // Same end
-                       newVal.substring( newVal.length - endMatches )
+                       newVal.slice( newVal.length - endMatches )
                ];
 
                // Chop off characters from the end of the "inserted content" string
index 4b80d95..339e65a 100644 (file)
@@ -36,6 +36,7 @@
         * @param {Function} [options.handler] Callback to fire when the action is confirmed (user clicks
         *     the 'Yes' button).
         * @param {string} [options.i18n] Text to use for interface elements.
+        * @param {string} [options.i18n.space] Word separator to place between the three text messages.
         * @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.
 
                                $interface = $( '<span>' )
                                        .addClass( 'jquery-confirmable-interface' )
-                                       .append( $text, $buttonYes, $buttonNo );
+                                       .append( $text, options.i18n.space, $buttonYes, options.i18n.space, $buttonNo );
                                $interface = options.wrapperCallback( $interface );
 
                                // Render offscreen to measure real width
                buttonCallback: identity,
                handler: null,
                i18n: {
+                       space: ' ',
                        confirm: 'Are you sure?',
                        yes: 'Yes',
                        no: 'No'
index 7ac04f4..d4a106e 100644 (file)
@@ -6,6 +6,7 @@
 
 ( function ( mw, $ ) {
        $.fn.confirmable.defaultOptions.i18n = {
+               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()
index 1881085..d7024cc 100644 (file)
@@ -51,7 +51,7 @@ jQuery._farbtastic = function (container, callback) {
                $('*', e).each(function () {
                        if (this.currentStyle.backgroundImage != 'none') {
                                var image = this.currentStyle.backgroundImage;
-                               image = this.currentStyle.backgroundImage.substring(5, image.length - 2);
+                               image = this.currentStyle.backgroundImage.slice(5, image.length - 2);
                                $(this).css({
                                        'backgroundImage': 'none',
                                        'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
index c44831c..5d6a1d4 100644 (file)
@@ -5,32 +5,19 @@
 /**
  * Get the attributes of an element directy as a plain object.
  *
- * If there are more elements in the collection, like most jQuery get/read methods,
- * this method will use the first element in the collection.
+ * If there is more than one element in the collection, similar to most other jQuery getter methods,
+ * this will use the first element in the collection.
  *
- * In IE6, the `attributes` map of a node includes *all* allowed attributes
- * for an element (including those not set). Those will have values like
- * `undefined`, `null`, `0`, `false`, `""` or `"inherit"`.
- *
- * However there may be attributes genuinely set to one of those values, and there
- * is no way to distinguish between attributes set to that and those not set and
- * it being the default. If you need them, set `all` to `true`. They are filtered out
- * by default.
- *
- * @param {boolean} [all=false]
  * @return {Object}
  */
-jQuery.fn.getAttrs = function ( all ) {
-       var map = this[0].attributes,
+jQuery.fn.getAttrs = function () {
+       var i,
+               map = this[0].attributes,
                attrs = {},
-               len = map.length,
-               i, v;
+               len = map.length;
 
        for ( i = 0; i < len; i++ ) {
-               v = map[i].nodeValue;
-               if ( all || ( v && v !== 'inherit' ) ) {
-                       attrs[ map[i].nodeName ] = v;
-               }
+               attrs[ map[i].name ] = map[i].value;
        }
 
        return attrs;
index 71b083b..4ecfeb8 100644 (file)
@@ -110,7 +110,7 @@ $.matchSrcSet = function ( devicePixelRatio, srcset ) {
                bits = candidate.split( / +/ );
                src = bits[0];
                if ( bits.length > 1 && bits[1].charAt( bits[1].length - 1 ) === 'x' ) {
-                       ratioStr = bits[1].substr( 0, bits[1].length - 1 );
+                       ratioStr = bits[1].slice( 0, -1 );
                        ratio = parseFloat( ratioStr );
                        if ( ratio <= devicePixelRatio && ratio > selectedRatio ) {
                                selectedRatio = ratio;
index cdcb8fb..dc7aaa4 100644 (file)
@@ -12,7 +12,7 @@
                                        '' : str.toString().replace( /\s+$/, '' );
                },
                ucFirst: function ( str ) {
-                       return str.charAt( 0 ).toUpperCase() + str.substr( 1 );
+                       return str.charAt( 0 ).toUpperCase() + str.slice( 1 );
                },
                escapeRE: function ( str ) {
                        return str.replace ( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' );
index 289cd22..632769b 100644 (file)
@@ -24,8 +24,9 @@
 
        $.fn.textSelection = function ( command, options ) {
                var fn,
+                       alternateFn,
                        context,
-                       hasWikiEditorSurface, // The alt edit surface needs to implement the WikiEditor API
+                       hasWikiEditor,
                        needSave,
                        retval;
 
                                                } else {
                                                        while ( selText.charAt( selText.length - 1 ) === ' ' ) {
                                                                // Exclude ending space char
-                                                               selText = selText.substring( 0, selText.length - 1 );
+                                                               selText = selText.slice( 0, -1 );
                                                                post += ' ';
                                                        }
                                                        while ( selText.charAt( 0 ) === ' ' ) {
                                                                // Exclude prepending space char
-                                                               selText = selText.substring( 1, selText.length );
+                                                               selText = selText.slice( 1 );
                                                                pre = ' ' + pre;
                                                        }
                                                }
                                                                        post += '\n';
                                                                }
                                                        }
-                                                       this.value = this.value.substring( 0, startPos ) + insertText +
-                                                               this.value.substring( endPos, this.value.length );
+                                                       this.value = this.value.slice( 0, startPos ) + insertText +
+                                                               this.value.slice( endPos );
                                                        // Setting this.value scrolls the textarea to the top, restore the scroll position
                                                        this.scrollTop = scrollTop;
                                                        if ( window.opera ) {
                        }
                };
 
+               alternateFn = $( this ).data( 'jquery.textSelection' );
+
                // Apply defaults
                switch ( command ) {
                        //case 'getContents': // no params
                                        force: false // Force a scroll even if the caret position is already visible
                                }, options );
                                break;
+                       case 'register':
+                               if ( alternateFn ) {
+                                       throw new Error( 'Another textSelection API was already registered' );
+                               }
+                               $( this ).data( 'jquery.textSelection', options );
+                               // No need to update alternateFn as this command only stores the options.
+                               // A command that uses it will set it again.
+                               return;
+                       case 'unregister':
+                               $( this ).removeData( 'jquery.textSelection' );
+                               return;
                }
 
                context = $( this ).data( 'wikiEditor-context' );
-               hasWikiEditorSurface = ( context !== undefined && context.$iframe !== undefined );
+               hasWikiEditor = ( context !== undefined && context.$iframe !== undefined );
 
                // IE selection restore voodoo
                needSave = false;
-               if ( hasWikiEditorSurface && context.savedSelection !== null ) {
+               if ( hasWikiEditor && context.savedSelection !== null ) {
                        context.fn.restoreSelection();
                        needSave = true;
                }
-               retval = ( hasWikiEditorSurface && context.fn[command] !== undefined ? context.fn : fn )[command].call( this, options );
-               if ( hasWikiEditorSurface && needSave ) {
+               retval = ( alternateFn && alternateFn[command] || fn[command] ).call( this, options );
+               if ( hasWikiEditor && needSave ) {
                        context.fn.saveSelection();
                }
 
diff --git a/resources/src/mediawiki.action/images/nextredirect-ltr.png b/resources/src/mediawiki.action/images/nextredirect-ltr.png
new file mode 100644 (file)
index 0000000..cd657c3
Binary files /dev/null and b/resources/src/mediawiki.action/images/nextredirect-ltr.png differ
diff --git a/resources/src/mediawiki.action/images/nextredirect-rtl.png b/resources/src/mediawiki.action/images/nextredirect-rtl.png
new file mode 100644 (file)
index 0000000..b788f33
Binary files /dev/null and b/resources/src/mediawiki.action/images/nextredirect-rtl.png differ
diff --git a/resources/src/mediawiki.action/images/redirect-ltr.png b/resources/src/mediawiki.action/images/redirect-ltr.png
new file mode 100644 (file)
index 0000000..695f2a1
Binary files /dev/null and b/resources/src/mediawiki.action/images/redirect-ltr.png differ
diff --git a/resources/src/mediawiki.action/images/redirect-rtl.png b/resources/src/mediawiki.action/images/redirect-rtl.png
new file mode 100644 (file)
index 0000000..c954a2a
Binary files /dev/null and b/resources/src/mediawiki.action/images/redirect-rtl.png differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.css b/resources/src/mediawiki.action/mediawiki.action.edit.css
new file mode 100644 (file)
index 0000000..45ba543
--- /dev/null
@@ -0,0 +1,18 @@
+/*!
+ * Styles for elements of the editing form, loaded only when JavaScript is enabled.
+ */
+
+.mw-toolbar-editbutton {
+       width: 23px;
+       height: 22px;
+       cursor: pointer;
+       vertical-align: middle;
+       /* Cross-browser inline-block */
+       /* Firefox 2 */
+       display: -moz-inline-block;
+       /* Modern browsers */
+       display: inline-block;
+       /* IE7 */
+       zoom: 1;
+       *display: inline;
+}
index b565440..6b33012 100644 (file)
@@ -5,54 +5,37 @@
        'use strict';
 
        $( function () {
-               var savedWindowOnBeforeUnload,
-                       $wpTextbox1 = $( '#wpTextbox1' ),
-                       $wpSummary = $( '#wpSummary' );
+               var allowCloseWindow,
+                       $textBox = $( '#wpTextbox1' ),
+                       $summary = $( '#wpSummary' ),
+                       $both = $textBox.add( $summary );
+
                // Check if EditWarning is enabled and if we need it
-               if ( $wpTextbox1.length === 0 ) {
+               if ( !mw.user.options.get( 'useeditwarning' ) ) {
                        return true;
                }
-               // Get the original values of some form elements
-               $wpTextbox1.add( $wpSummary ).each( function () {
-                       $( this ).data( 'origtext', $( this ).val() );
+
+               // Save the original value of the text fields
+               $both.each( function ( index, element ) {
+                       var $element = $( element );
+                       $element.data( 'origtext', $element.textSelection( 'getContents' ) );
                } );
-               $( window )
-                       .on( 'beforeunload.editwarning', function () {
-                               var retval;
 
-                               // Check if the current values of some form elements are the same as
-                               // the original values
-                               if (
-                                       mw.config.get( 'wgAction' ) === 'submit' ||
-                                               $wpTextbox1.data( 'origtext' ) !== $wpTextbox1.textSelection( 'getContents' ) ||
-                                               $wpSummary.data( 'origtext' ) !== $wpSummary.textSelection( 'getContents' )
-                               ) {
-                                       // Return our message
-                                       retval = mw.msg( 'editwarning-warning' );
-                               }
+               allowCloseWindow = mw.confirmCloseWindow( {
+                       test: function () {
+                               // We use .textSelection, because editors might not have updated the form yet.
+                               return mw.config.get( 'wgAction' ) === 'submit' ||
+                                       $textBox.data( 'origtext' ) !== $textBox.textSelection( 'getContents' ) ||
+                                       $summary.data( 'origtext' ) !== $summary.textSelection( 'getContents' );
+                       },
 
-                               // 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.editwarning', function () {
-                               // Re-add onbeforeunload handler
-                               if ( !window.onbeforeunload ) {
-                                       window.onbeforeunload = savedWindowOnBeforeUnload;
-                               }
-                       } );
+                       message: mw.msg( 'editwarning-warning' ),
+                       namespace: 'editwarning'
+               } );
 
                // Add form submission handler
                $( '#editform' ).submit( function () {
-                       // Unbind our handlers
-                       $( window ).off( '.editwarning' );
+                       allowCloseWindow();
                } );
        } );
 
index 0481b6a..f88b836 100644 (file)
-/**
- * Interface for the classic edit toolbar.
- *
- * @class mw.toolbar
- * @singleton
+/*!
+ * Scripts for action=edit
  */
 ( function ( mw, $ ) {
-       var toolbar, isReady, $toolbar, queue, slice, $currentFocused;
-
-       /**
-        * Internal helper that does the actual insertion of the button into the toolbar.
-        *
-        * See #addButton for parameter documentation.
-        *
-        * @private
-        */
-       function insertButton( b, speedTip, tagOpen, tagClose, sampleText, imageId ) {
-               // Backwards compatibility
-               if ( typeof b !== 'object' ) {
-                       b = {
-                               imageFile: b,
-                               speedTip: speedTip,
-                               tagOpen: tagOpen,
-                               tagClose: tagClose,
-                               sampleText: sampleText,
-                               imageId: imageId
-                       };
-               }
-               var $image = $( '<img>' ).attr( {
-                       width: 23,
-                       height: 22,
-                       src: b.imageFile,
-                       alt: b.speedTip,
-                       title: b.speedTip,
-                       id: b.imageId || undefined,
-                       'class': 'mw-toolbar-editbutton'
-               } ).click( function () {
-                       toolbar.insertTags( b.tagOpen, b.tagClose, b.sampleText );
-                       return false;
-               } );
-
-               $toolbar.append( $image );
-       }
-
-       isReady = false;
-       $toolbar = false;
-       /**
-        * @private
-        * @property {Array}
-        * Contains button objects (and for backwards compatibilty, it can
-        * also contains an arguments array for insertButton).
-        */
-       queue = [];
-       slice = queue.slice;
-
-       toolbar = {
-
-               /**
-                * Add buttons to the toolbar.
-                *
-                * Takes care of race conditions and time-based dependencies
-                * by placing buttons in a queue if this method is called before
-                * the toolbar is created.
-                *
-                * For compatiblity, passing the properties listed below as separate arguments
-                * (in the listed order) is also supported.
-                *
-                * @param {Object} button Object with the following properties:
-                * @param {string} button.imageFile
-                * @param {string} button.speedTip
-                * @param {string} button.tagOpen
-                * @param {string} button.tagClose
-                * @param {string} button.sampleText
-                * @param {string} [button.imageId]
-                */
-               addButton: function () {
-                       if ( isReady ) {
-                               insertButton.apply( toolbar, arguments );
-                       } else {
-                               // Convert arguments list to array
-                               queue.push( slice.call( arguments ) );
-                       }
-               },
-               /**
-                * Example usage:
-                *     addButtons( [ { .. }, { .. }, { .. } ] );
-                *     addButtons( { .. }, { .. } );
-                *
-                * @param {Object|Array...} [buttons] An array of button objects or the first
-                *  button object in a list of variadic arguments.
-                */
-               addButtons: function ( buttons ) {
-                       if ( !$.isArray( buttons ) ) {
-                               buttons = slice.call( arguments );
-                       }
-                       if ( isReady ) {
-                               $.each( buttons, function () {
-                                       insertButton( this );
-                               } );
-                       } else {
-                               // Push each button into the queue
-                               queue.push.apply( queue, buttons );
-                       }
-               },
-
-               /**
-                * Apply tagOpen/tagClose to selection in currently focused textarea.
-                *
-                * Uses `sampleText` if selection is empty.
-                *
-                * @param {string} tagOpen
-                * @param {string} tagClose
-                * @param {string} sampleText
-                */
-               insertTags: function ( tagOpen, tagClose, sampleText ) {
-                       if ( $currentFocused && $currentFocused.length ) {
-                               $currentFocused.textSelection(
-                                       'encapsulateSelection', {
-                                               pre: tagOpen,
-                                               peri: sampleText,
-                                               post: tagClose
-                                       }
-                               );
-                       }
-               },
-
-               // For backwards compatibility,
-               // Called from EditPage.php, maybe in other places as well.
-               init: function () {}
-       };
-
-       // Legacy (for compatibility with the code previously in skins/common.edit.js)
-       mw.log.deprecate( window, 'addButton', toolbar.addButton, 'Use mw.toolbar.addButton instead.' );
-       mw.log.deprecate( window, 'insertTags', toolbar.insertTags, 'Use mw.toolbar.insertTags instead.' );
-
-       // Expose API publicly
-       mw.toolbar = toolbar;
 
        $( function () {
-               var i, b, editBox, scrollTop, $editForm;
-
-               // Used to determine where to insert tags
-               $currentFocused = $( '#wpTextbox1' );
-
-               // Populate the selector cache for $toolbar
-               $toolbar = $( '#toolbar' );
-
-               for ( i = 0; i < queue.length; i++ ) {
-                       b = queue[i];
-                       if ( $.isArray( b ) ) {
-                               // Forwarded arguments array from mw.toolbar.addButton
-                               insertButton.apply( toolbar, b );
-                       } else {
-                               // Raw object from mw.toolbar.addButtons
-                               insertButton( b );
-                       }
-               }
-
-               // Clear queue
-               queue.length = 0;
-
-               // This causes further calls to addButton to go to insertion directly
-               // instead of to the queue.
-               // It is important that this is after the one and only loop through
-               // the the queue
-               isReady = true;
+               var editBox, scrollTop, $editForm;
 
                // Make sure edit summary does not exceed byte limit
                $( '#wpSummary' ).byteLimit( 255 );
                                scrollTop.value = editBox.scrollTop;
                        } );
                }
-
-               // Apply to dynamically created textboxes as well as normal ones
-               $( document ).on( 'focus', 'textarea, input:text', function () {
-                       $currentFocused = $( this );
-               } );
        } );
 
 }( mediaWiki, jQuery ) );
index 7148b96..4209aa1 100644 (file)
@@ -8,14 +8,6 @@
        display: block;
 }
 
-.editOptions {
-       background-color: #F0F0F0;
-       border: 1px solid silver;
-       border-top: none;
-       padding: 1em 1em 1.5em 1em;
-       margin-bottom: 2em;
-}
-
 /* Adjustments to edit form elements */
 .editCheckboxes {
        margin-bottom: 1em;
index afe9246..092a597 100644 (file)
@@ -2,7 +2,6 @@
 ** Diff rendering
 */
 table.diff {
-       background-color: white;
        border: none;
        border-spacing: 4px;
        margin: 0;
index 2ded40c..3c22851 100644 (file)
@@ -4,9 +4,12 @@
 ( function ( mw, $ ) {
        $( function () {
                mw.util.$content.dblclick( function ( e ) {
-                       e.preventDefault();
-                       // Trigger native HTMLElement click instead of opening URL (bug 43052)
-                       $( '#ca-edit a' ).get( 0 ).click();
+                       // Recheck preference so extensions can do a hack to disable this code.
+                       if ( parseInt( mw.user.options.get( 'editondblclick' ), 10 ) ) {
+                               e.preventDefault();
+                               // Trigger native HTMLElement click instead of opening URL (bug 43052)
+                               $( '#ca-edit a' ).get( 0 ).click();
+                       }
                } );
        } );
 }( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.metadata.css b/resources/src/mediawiki.action/mediawiki.action.view.metadata.css
new file mode 100644 (file)
index 0000000..2c8d2e6
--- /dev/null
@@ -0,0 +1,6 @@
+/*!
+ * Hide collapsable rows in a collapsed table.
+ */
+table.collapsed tr.collapsable {
+       display: none;
+}
index 712cf29..25b5acc 100644 (file)
@@ -4,9 +4,7 @@
  * Add an expand/collapse link and collapse by default if set to
  * (with JS disabled, user will see all items)
  *
- * See also:
- * - ImagePage.php#makeMetadataTable (creates the HTML)
- * - skins/common/shared.css (hides tr.collapsable inside table.collapsed)
+ * See also ImagePage.php#makeMetadataTable (creates the HTML)
  */
 ( function ( mw, $ ) {
        $( function () {
index 4d2c47a..95ef62c 100644 (file)
                        data.message = $.parseHTML( mw.message( 'postedit-confirmation-saved', data.user || mw.user ).escaped() );
                }
 
-               $div = $(
-                       '<div class="postedit-container">' +
-                               '<div class="postedit">' +
-                                       '<div class="postedit-icon postedit-icon-checkmark postedit-content"></div>' +
-                                       '<a href="#" class="postedit-close">&times;</a>' +
-                               '</div>' +
-                       '</div>'
-               );
+               $div = mw.template.get( 'mediawiki.action.view.postEdit', 'postEdit.html' ).render();
 
                if ( typeof data.message === 'string' ) {
                        $div.find( '.postedit-content' ).text( data.message );
index c87ff7c..52e0d4e 100644 (file)
        // Clear internal mw.config entries, so that no one tries to depend on them
        mw.config.set( 'wgInternalRedirectTargetUrl', null );
 
-       // Deployment hack for compatibility with cached HTML, remove before 1.24 release
-       if ( !canonical ) {
-               canonical = mw.config.get( 'wgRedirectToFragment' );
-       }
-
        index = canonical.indexOf( '#' );
        if ( index !== -1 ) {
                fragment = canonical.slice( index );
                // This will also cause the browser to scroll to given fragment
                history.replaceState( /*data=*/ history.state, /*title=*/ document.title, /*url=*/ canonical );
 
+               // …except for IE 10 and 11. Prod it with a location.hash change.
+               if ( shouldChangeFragment && profile.name === 'msie' && profile.versionNumber >= 10 ) {
+                       location.hash = fragment;
+               }
+
        } else if ( shouldChangeFragment ) {
                if ( profile.layout === 'webkit' && profile.layoutVersion < 420 ) {
                        // Released Safari w/ WebKit 418.9.1 messes up horribly
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css b/resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css
new file mode 100644 (file)
index 0000000..fdbb655
--- /dev/null
@@ -0,0 +1,53 @@
+/*!
+ * Display neat icons on redirect pages.
+ */
+
+/* Hide, but keep accessible for screen-readers. */
+.redirectMsg p {
+       overflow: hidden;
+       height: 0;
+       zoom: 1;
+}
+
+.redirectText {
+       list-style: none none;
+       display: inline;
+       /* shared.css has some very weird directionality-specific rules for 'ul' we need to override,
+          search for "Correct directionality when page dir is different from site/user dir" */
+       margin: 0 !important;
+       padding: 0 !important;
+}
+
+/* @noflip */
+.mw-content-ltr .redirectText li {
+       display: inline;
+       margin: 0;
+       padding: 0;
+       padding-left: 42px;
+       /* @embed */
+       background: url(images/nextredirect-ltr.png) bottom left no-repeat;
+}
+
+/* @noflip */
+.mw-content-ltr .redirectText li:first-child {
+       padding-left: 47px;
+       /* @embed */
+       background: url(images/redirect-ltr.png) bottom left no-repeat;
+}
+
+/* @noflip */
+.mw-content-rtl .redirectText li {
+       display: inline;
+       margin: 0;
+       padding: 0;
+       padding-right: 42px;
+       /* @embed */
+       background: url(images/nextredirect-rtl.png) bottom right no-repeat;
+}
+
+/* @noflip */
+.mw-content-rtl .redirectText li:first-child {
+       padding-right: 47px;
+       /* @embed */
+       background: url(images/redirect-rtl.png) bottom right no-repeat;
+}
diff --git a/resources/src/mediawiki.action/templates/postEdit.html b/resources/src/mediawiki.action/templates/postEdit.html
new file mode 100644 (file)
index 0000000..dbb482a
--- /dev/null
@@ -0,0 +1,6 @@
+<div class="postedit-container">
+       <div class="postedit">
+               <div class="postedit-icon postedit-icon-checkmark postedit-content"></div>
+               <a href="#" class="postedit-close">&times;</a>
+       </div>
+</div>
index 7dd9730..14077e0 100644 (file)
@@ -3,29 +3,21 @@
  */
 ( function ( mw, $ ) {
 
-       var msg = 'Use of mediawiki.api callback params is deprecated. Use the Promise instead.';
        $.extend( mw.Api.prototype, {
                /**
                 * Determine if a category exists.
                 *
                 * @param {mw.Title|string} title
-                * @param {Function} [ok] Success callback (deprecated)
-                * @param {Function} [err] Error callback (deprecated)
                 * @return {jQuery.Promise}
                 * @return {Function} return.done
                 * @return {boolean} return.done.isCategory Whether the category exists.
                 */
-               isCategory: function ( title, ok, err ) {
+               isCategory: function ( title ) {
                        var apiPromise = this.get( {
                                prop: 'categoryinfo',
                                titles: String( title )
                        } );
 
-                       if ( ok || err ) {
-                               mw.track( 'mw.deprecate', 'api.cbParam' );
-                               mw.log.warn( msg );
-                       }
-
                        return apiPromise
                                .then( function ( data ) {
                                        var exists = false;
@@ -38,8 +30,6 @@
                                        }
                                        return exists;
                                } )
-                               .done( ok )
-                               .fail( err )
                                .promise( { abort: apiPromise.abort } );
                },
 
                 * E.g. given "Foo", return "Food", "Foolish people", "Foosball tables"...
                 *
                 * @param {string} prefix Prefix to match.
-                * @param {Function} [ok] Success callback (deprecated)
-                * @param {Function} [err] Error callback (deprecated)
                 * @return {jQuery.Promise}
                 * @return {Function} return.done
                 * @return {string[]} return.done.categories Matched categories
                 */
-               getCategoriesByPrefix: function ( prefix, ok, err ) {
+               getCategoriesByPrefix: function ( prefix ) {
                        // Fetch with allpages to only get categories that have a corresponding description page.
                        var apiPromise = this.get( {
                                list: 'allpages',
                                apnamespace: mw.config.get( 'wgNamespaceIds' ).category
                        } );
 
-                       if ( ok || err ) {
-                               mw.track( 'mw.deprecate', 'api.cbParam' );
-                               mw.log.warn( msg );
-                       }
-
                        return apiPromise
                                .then( function ( data ) {
                                        var texts = [];
@@ -78,8 +61,6 @@
                                        }
                                        return texts;
                                } )
-                               .done( ok )
-                               .fail( err )
                                .promise( { abort: apiPromise.abort } );
                },
 
                 * Get the categories that a particular page on the wiki belongs to.
                 *
                 * @param {mw.Title|string} title
-                * @param {Function} [ok] Success callback (deprecated)
-                * @param {Function} [err] Error callback (deprecated)
-                * @param {boolean} [async=true] Asynchronousness (deprecated)
                 * @return {jQuery.Promise}
                 * @return {Function} return.done
                 * @return {boolean|mw.Title[]} return.done.categories List of category titles or false
                 *  if title was not found.
                 */
-               getCategories: function ( title, ok, err, async ) {
+               getCategories: function ( title ) {
                        var apiPromise = this.get( {
                                prop: 'categories',
                                titles: String( title )
-                       }, {
-                               async: async === undefined ? true : async
                        } );
 
-                       if ( ok || err ) {
-                               mw.track( 'mw.deprecate', 'api.cbParam' );
-                               mw.log.warn( msg );
-                       }
-                       if ( async !== undefined ) {
-                               mw.track( 'mw.deprecate', 'api.async' );
-                               mw.log.warn(
-                                       'Use of mediawiki.api async=false param is deprecated. ' +
-                                       'The sychronous mode will be removed in the future.'
-                               );
-                       }
-
                        return apiPromise
                                .then( function ( data ) {
                                        var titles = false;
                                        }
                                        return titles;
                                } )
-                               .done( ok )
-                               .fail( err )
                                .promise( { abort: apiPromise.abort } );
                }
        } );
index e88ae5e..dbe45bf 100644 (file)
@@ -3,7 +3,6 @@
  */
 ( function ( mw, $ ) {
 
-       var msg = 'Use of mediawiki.api callback params is deprecated. Use the Promise instead.';
        $.extend( mw.Api.prototype, {
 
                /**
                 * cached token and start over.
                 *
                 * @param {Object} params API parameters
-                * @param {Function} [ok] Success callback (deprecated)
-                * @param {Function} [err] Error callback (deprecated)
                 * @return {jQuery.Promise} See #post
                 */
-               postWithEditToken: function ( params, ok, err ) {
-                       if ( ok || err ) {
-                               mw.track( 'mw.deprecate', 'api.cbParam' );
-                               mw.log.warn( msg );
-                       }
-
-                       return this.postWithToken( 'edit', params ).done( ok ).fail( err );
+               postWithEditToken: function ( params ) {
+                       return this.postWithToken( 'edit', params );
                },
 
                /**
                 * API helper to grab an edit token.
                 *
-                * @param {Function} [ok] Success callback (deprecated)
-                * @param {Function} [err] Error callback (deprecated)
                 * @return {jQuery.Promise}
                 * @return {Function} return.done
                 * @return {string} return.done.token Received token.
                 */
-               getEditToken: function ( ok, err ) {
-                       if ( ok || err ) {
-                               mw.track( 'mw.deprecate', 'api.cbParam' );
-                               mw.log.warn( msg );
-                       }
-
-                       return this.getToken( 'edit' ).done( ok ).fail( err );
+               getEditToken: function () {
+                       return this.getToken( 'edit' );
                },
 
                /**
                 * @param {string} header
                 * @param {string} message wikitext message
                 * @param {Object} [additionalParams] Additional API parameters, e.g. `{ redirect: true }`
-                * @param {Function} [ok] Success handler (deprecated)
-                * @param {Function} [err] Error handler (deprecated)
                 * @return {jQuery.Promise}
                 */
-               newSection: function ( title, header, message, additionalParams, ok, err ) {
-                       // Until we remove 'ok' and 'err' parameters, we have to support code that passes them,
-                       // but not additionalParams...
-                       if ( $.isFunction( additionalParams ) ) {
-                               err = ok;
-                               ok = additionalParams;
-                               additionalParams = undefined;
-                       }
-
-                       if ( ok || err ) {
-                               mw.track( 'mw.deprecate', 'api.cbParam' );
-                               mw.log.warn( msg );
-                       }
-
+               newSection: function ( title, header, message, additionalParams ) {
                        return this.postWithEditToken( $.extend( {
                                action: 'edit',
                                section: 'new',
-                               format: 'json',
                                title: String( title ),
                                summary: header,
                                text: message
-                       }, additionalParams ) ).done( ok ).fail( err );
+                       }, additionalParams ) );
                }
        } );
 
index f8dc836..3a19e02 100644 (file)
         *         console.log( data );
         *     } );
         *
+        * Multiple values for a parameter can be specified using an array (since MW 1.25):
+        *
+        *     var api = new mw.Api();
+        *     api.get( {
+        *         action: 'query',
+        *         meta: [ 'userinfo', 'siteinfo' ] // same effect as 'userinfo|siteinfo'
+        *     } ).done ( function ( data ) {
+        *         console.log( data );
+        *     } );
+        *
         * @class
         *
         * @constructor
 
        mw.Api.prototype = {
 
-               /**
-                * Normalize the ajax options for compatibility and/or convenience methods.
-                *
-                * @param {Object} [arg] An object contaning one or more of options.ajax.
-                * @return {Object} Normalized ajax options.
-                */
-               normalizeAjaxOptions: function ( arg ) {
-                       // Arg argument is usually empty
-                       // (before MW 1.20 it was used to pass ok callbacks)
-                       var opts = arg || {};
-                       // Options can also be a success callback handler
-                       if ( typeof arg === 'function' ) {
-                               opts = { ok: arg };
-                       }
-                       return opts;
-               },
-
                /**
                 * Perform API get request
                 *
                 * @param {Object} parameters
-                * @param {Object|Function} [ajaxOptions]
+                * @param {Object} [ajaxOptions]
                 * @return {jQuery.Promise}
                 */
                get: function ( parameters, ajaxOptions ) {
-                       ajaxOptions = this.normalizeAjaxOptions( ajaxOptions );
+                       ajaxOptions = ajaxOptions || {};
                        ajaxOptions.type = 'GET';
                        return this.ajax( parameters, ajaxOptions );
                },
                 * TODO: Post actions for non-local hostnames will need proxy.
                 *
                 * @param {Object} parameters
-                * @param {Object|Function} [ajaxOptions]
+                * @param {Object} [ajaxOptions]
                 * @return {jQuery.Promise}
                 */
                post: function ( parameters, ajaxOptions ) {
-                       ajaxOptions = this.normalizeAjaxOptions( ajaxOptions );
+                       ajaxOptions = ajaxOptions || {};
                        ajaxOptions.type = 'POST';
                        return this.ajax( parameters, ajaxOptions );
                },
                ajax: function ( parameters, ajaxOptions ) {
                        var token,
                                apiDeferred = $.Deferred(),
-                               msg = 'Use of mediawiki.api callback params is deprecated. Use the Promise instead.',
                                xhr, key, formData;
 
                        parameters = $.extend( {}, this.defaults.parameters, parameters );
                                delete parameters.token;
                        }
 
+                       for ( key in parameters ) {
+                               if ( $.isArray( parameters[key] ) ) {
+                                       parameters[key] = parameters[key].join( '|' );
+                               }
+                       }
+
                        // If multipart/form-data has been requested and emulation is possible, emulate it
                        if (
                                ajaxOptions.type === 'POST' &&
                                }
                        }
 
-                       // Backwards compatibility: Before MediaWiki 1.20,
-                       // callbacks were done with the 'ok' and 'err' property in ajaxOptions.
-                       if ( ajaxOptions.ok ) {
-                               mw.track( 'mw.deprecate', 'api.cbParam' );
-                               mw.log.warn( msg );
-                               apiDeferred.done( ajaxOptions.ok );
-                               delete ajaxOptions.ok;
-                       }
-                       if ( ajaxOptions.err ) {
-                               mw.track( 'mw.deprecate', 'api.cbParam' );
-                               mw.log.warn( msg );
-                               apiDeferred.fail( ajaxOptions.err );
-                               delete ajaxOptions.err;
-                       }
-
                        // Make the AJAX request
                        xhr = $.ajax( ajaxOptions )
                                // If AJAX fails, reject API call with error code 'http'
 
                        // Return the Promise
                        return apiDeferred.promise( { abort: xhr.abort } ).fail( function ( code, details ) {
-                               if ( code !== 'abort' ) {
+                               if ( !( code === 'http' && details && details.textStatus === 'abort' ) ) {
                                        mw.log( 'mw.Api error: ', code, details );
                                }
                        } );
                postWithToken: function ( tokenType, params, ajaxOptions ) {
                        var api = this;
 
-                       // Do not allow deprecated ok-callback
-                       // FIXME: Remove this check when the deprecated ok-callback is removed in #post
-                       if ( $.isFunction( ajaxOptions ) ) {
-                               ajaxOptions = undefined;
-                       }
-
-                       return api.getToken( tokenType ).then( function ( token ) {
+                       return api.getToken( tokenType, params.assert ).then( function ( token ) {
                                params.token = token;
                                return api.post( params, ajaxOptions ).then(
                                        // If no error, return to caller as-is
                                                                params.token = undefined;
 
                                                        // Try again, once
-                                                       return api.getToken( tokenType ).then( function ( token ) {
+                                                       return api.getToken( tokenType, params.assert ).then( function ( token ) {
                                                                params.token = token;
                                                                return api.post( params, ajaxOptions );
                                                        } );
                /**
                 * Get a token for a certain action from the API.
                 *
+                * The assert parameter is only for internal use by postWithToken.
+                *
                 * @param {string} type Token type
                 * @return {jQuery.Promise}
                 * @return {Function} return.done
                 * @return {string} return.done.token Received token.
                 * @since 1.22
                 */
-               getToken: function ( type ) {
+               getToken: function ( type, assert ) {
                        var apiPromise,
                                promiseGroup = promises[ this.defaults.ajax.url ],
                                d = promiseGroup && promiseGroup[ type + 'Token' ];
 
                        if ( !d ) {
-                               apiPromise = this.get( { action: 'tokens', type: type } );
+                               apiPromise = this.get( { action: 'tokens', type: type, assert: assert } );
 
                                d = apiPromise
                                        .then( function ( data ) {
                'nomodule',
                'mustbeposted',
                'badaccess-groups',
-               'stashfailed',
                'missingresult',
                'missingparam',
                'invalid-file-key',
                'fetchfileerror',
                'fileexists-shared-forbidden',
                'invalidtitle',
-               'notloggedin'
+               'notloggedin',
+
+               // Stash-specific errors - expanded
+               'stashfailed',
+               'stasherror',
+               'stashedfilenotfound',
+               'stashpathinvalid',
+               'stashfilestorage',
+               'stashzerolength',
+               'stashnotloggedin',
+               'stashwrongowner',
+               'stashnosuchfilekey'
        ];
 
        /**
index b1f1d2b..2dcf807 100644 (file)
@@ -8,31 +8,21 @@
                 * Convenience method for 'action=parse'.
                 *
                 * @param {string} wikitext
-                * @param {Function} [ok] Success callback (deprecated)
-                * @param {Function} [err] Error callback (deprecated)
                 * @return {jQuery.Promise}
                 * @return {Function} return.done
                 * @return {string} return.done.data Parsed HTML of `wikitext`.
                 */
-               parse: function ( wikitext, ok, err ) {
+               parse: function ( wikitext ) {
                        var apiPromise = this.get( {
                                action: 'parse',
                                contentmodel: 'wikitext',
                                text: wikitext
                        } );
 
-                       // Backwards compatibility (< MW 1.20)
-                       if ( ok || err ) {
-                               mw.track( 'mw.deprecate', 'api.cbParam' );
-                               mw.log.warn( 'Use of mediawiki.api callback params is deprecated. Use the Promise instead.' );
-                       }
-
                        return apiPromise
                                .then( function ( data ) {
                                        return data.parse.text['*'];
                                } )
-                               .done( ok )
-                               .fail( err )
                                .promise( { abort: apiPromise.abort } );
                }
        } );
index af2dee1..40ba136 100644 (file)
@@ -12,8 +12,6 @@
         * @param {string|mw.Title|string[]|mw.Title[]} pages Full page name or instance of mw.Title, or an
         *  array thereof. If an array is passed, the return value passed to the promise will also be an
         *  array of appropriate objects.
-        * @param {Function} [ok] Success callback (deprecated)
-        * @param {Function} [err] Error callback (deprecated)
         * @return {jQuery.Promise}
         * @return {Function} return.done
         * @return {Object|Object[]} return.done.watch Object or list of objects (depends on the `pages`
@@ -22,7 +20,7 @@
         * @return {boolean} return.done.watch.watched Whether the page is now watched or unwatched
         * @return {string} return.done.watch.message Parsed HTML of the confirmational interface message
         */
-       function doWatchInternal( pages, ok, err, addParams ) {
+       function doWatchInternal( pages, addParams ) {
                // XXX: Parameter addParams is undocumented because we inherit this
                // documentation in the public method...
                var apiPromise = this.postWithToken( 'watch',
                        )
                );
 
-               // Backwards compatibility (< MW 1.20)
-               if ( ok || err ) {
-                       mw.track( 'mw.deprecate', 'api.cbParam' );
-                       mw.log.warn( 'Use of mediawiki.api callback params is deprecated. Use the Promise instead.' );
-               }
-
                return apiPromise
                        .then( function ( data ) {
                                // If a single page was given (not an array) respond with a single item as well.
                                return $.isArray( pages ) ? data.watch : data.watch[0];
                        } )
-                       .done( ok )
-                       .fail( err )
                        .promise( { abort: apiPromise.abort } );
        }
 
                 *
                 * @inheritdoc #doWatchInternal
                 */
-               watch: function ( pages, ok, err ) {
-                       return doWatchInternal.call( this, pages, ok, err );
+               watch: function ( pages ) {
+                       return doWatchInternal.call( this, pages );
                },
+
                /**
                 * Convenience method for `action=watch&unwatch=1`.
                 *
                 * @inheritdoc #doWatchInternal
                 */
-               unwatch: function ( pages, ok, err ) {
-                       return doWatchInternal.call( this, pages, ok, err, { unwatch: 1 } );
+               unwatch: function ( pages ) {
+                       return doWatchInternal.call( this, pages, { unwatch: 1 } );
                }
        } );
 
index 2382aae..453a675 100644 (file)
@@ -34,7 +34,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                        break;
                case 'illative':
                        // Double the last letter and add 'n'
-                       word += word.substr(  word.length - 1 ) + 'n';
+                       word += word.slice( -1 ) + 'n';
                        break;
                case 'inessive':
                        word += ( aou ? 'ssa' : 'ssä' );
index 48351bc..d1eba43 100644 (file)
@@ -11,17 +11,17 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                case 'prefixed':
                case 'תחילית': // the same word in Hebrew
                        // Duplicate prefixed "Waw", but only if it's not already double
-                       if ( word.substr( 0, 1 ) === 'ו' && word.substr( 0, 2 ) !== 'וו' ) {
+                       if ( word.slice( 0, 1 ) === 'ו' && word.slice( 0, 2 ) !== 'וו' ) {
                                word = 'ו' + word;
                        }
 
                        // Remove the "He" if prefixed
-                       if ( word.substr( 0, 1 ) === 'ה' ) {
-                               word = word.substr( 1, word.length );
+                       if ( word.slice( 0, 1 ) === 'ה' ) {
+                               word = word.slice( 1 );
                        }
 
                        // Add a hyphen (maqaf) before numbers and non-Hebrew letters
-                       if ( word.substr( 0, 1 ) < 'א' ||  word.substr( 0, 1 ) > 'ת' ) {
+                       if ( word.slice( 0, 1 ) < 'א' ||  word.slice( 0, 1 ) > 'ת' ) {
                                word = '־' + word;
                        }
        }
index ae16f24..9cae360 100644 (file)
@@ -14,12 +14,12 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
 
        switch ( form ) {
                case 'genitive': // սեռական հոլով
-                       if ( word.substr( -1 ) === 'ա' ) {
-                               word = word.substr( 0, word.length - 1 ) + 'այի';
-                       } else if ( word.substr( -1 ) === 'ո' ) {
-                               word = word.substr( 0, word.length - 1 ) + 'ոյի';
-                       } else if ( word.substr( -4 ) === 'գիրք' ) {
-                               word = word.substr( 0, word.length - 4 ) + 'գրքի';
+                       if ( word.slice( -1 ) === 'ա' ) {
+                               word = word.slice( 0, -1 ) + 'այի';
+                       } else if ( word.slice( -1 ) === 'ո' ) {
+                               word = word.slice( 0, -1 ) + 'ոյի';
+                       } else if ( word.slice( -4 ) === 'գիրք' ) {
+                               word = word.slice( 0, -4 ) + 'գրքի';
                        } else {
                                word = word + 'ի';
                        }
index bdf59be..787be36 100644 (file)
@@ -19,7 +19,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
        }
        // Checking if the $word is in plural form
        if ( word.match( /тæ$/i ) ) {
-               word = word.substring( 0, word.length - 1 );
+               word = word.slice( 0, -1 );
                endAllative = 'æм';
        }
        // Works if word is in singular form.
@@ -30,7 +30,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
        // 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 ) ) {
-               if ( !word.substring( word.length - 2, word.length - 1 ).match( /[аæеёиоыэюя]$/i ) ) {
+               if ( !word.slice( -2, -1 ).match( /[аæеёиоыэюя]$/i ) ) {
                        jot = 'й';
                }
        } else if ( !word.match( /[бвгджзйклмнопрстфхцчшщьъ]$/i ) ) {
index b6ba59f..2077b6b 100644 (file)
@@ -15,41 +15,41 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
        }
        switch ( form ) {
                case 'genitive': // родительный падеж
-                       if ( word.substr( word.length - 1 ) === 'ь' ) {
-                               word = word.substr(0, word.length - 1 ) + 'я';
-                       } else if ( word.substr( word.length - 2 ) === 'ия' ) {
-                               word = word.substr(0, word.length - 2 ) + 'ии';
-                       } else if ( word.substr( word.length - 2 ) === 'ка' ) {
-                               word = word.substr(0, word.length - 2 ) + 'ки';
-                       } else if ( word.substr( word.length - 2 )  === 'ти' ) {
-                               word = word.substr(0, word.length - 2 ) + 'тей';
-                       } else if ( word.substr( word.length - 2 ) === 'ды' ) {
-                               word = word.substr(0, word.length - 2 ) + 'дов';
-                       } else if ( word.substr( word.length - 1 ) === 'д' ) {
-                               word = word.substr(0, word.length - 1 ) + 'да';
-                       } else if ( word.substr( word.length - 3 ) === 'ные' ) {
-                               word = word.substr(0, word.length - 3 ) + 'ных';
-                       } else if ( word.substr( word.length - 3 ) === 'ник' ) {
-                               word = word.substr(0, word.length - 3 ) + 'ника';
+                       if ( word.slice( -1 ) === 'ь' ) {
+                               word = word.slice( 0, -1 ) + 'я';
+                       } else if ( word.slice( -2 ) === 'ия' ) {
+                               word = word.slice( 0, -2 ) + 'ии';
+                       } else if ( word.slice( -2 ) === 'ка' ) {
+                               word = word.slice( 0, -2 ) + 'ки';
+                       } else if ( word.slice( -2 ) === 'ти' ) {
+                               word = word.slice( 0, -2 ) + 'тей';
+                       } else if ( word.slice( -2 ) === 'ды' ) {
+                               word = word.slice( 0, -2 ) + 'дов';
+                       } else if ( word.slice( -1 ) === 'д' ) {
+                               word = word.slice( 0, -1 ) + 'да';
+                       } else if ( word.slice( -3 ) === 'ные' ) {
+                               word = word.slice( 0, -3 ) + 'ных';
+                       } else if ( word.slice( -3 ) === 'ник' ) {
+                               word = word.slice( 0, -3 ) + 'ника';
                        }
                        break;
                case 'prepositional': // предложный падеж
-                       if ( word.substr( word.length - 1 ) === 'ь' ) {
-                               word = word.substr(0, word.length - 1 ) + 'е';
-                       } else if ( word.substr( word.length - 2 ) === 'ия' ) {
-                               word = word.substr(0, word.length - 2 ) + 'ии';
-                       } else if ( word.substr( word.length - 2 ) === 'ка' ) {
-                               word = word.substr(0, word.length - 2 ) + 'ке';
-                       } else if ( word.substr( word.length - 2 )  === 'ти' ) {
-                               word = word.substr(0, word.length - 2 ) + 'тях';
-                       } else if ( word.substr( word.length - 2 ) === 'ды' ) {
-                               word = word.substr(0, word.length - 2 ) + 'дах';
-                       } else if ( word.substr( word.length - 1 ) === 'д' ) {
-                               word = word.substr(0, word.length - 1 ) + 'де';
-                       } else if ( word.substr( word.length - 3 ) === 'ные' ) {
-                               word = word.substr(0, word.length - 3 ) + 'ных';
-                       } else if ( word.substr( word.length - 3 ) === 'ник' ) {
-                               word = word.substr(0, word.length - 3 ) + 'нике';
+                       if ( word.slice( -1 ) === 'ь' ) {
+                               word = word.slice( 0, -1 ) + 'е';
+                       } else if ( word.slice( -2 ) === 'ия' ) {
+                               word = word.slice( 0, -2 ) + 'ии';
+                       } else if ( word.slice( -2 ) === 'ка' ) {
+                               word = word.slice( 0, -2 ) + 'ке';
+                       } else if ( word.slice( -2 ) === 'ти' ) {
+                               word = word.slice( 0, -2 ) + 'тях';
+                       } else if ( word.slice( -2 ) === 'ды' ) {
+                               word = word.slice( 0, -2 ) + 'дах';
+                       } else if ( word.slice( -1 ) === 'д' ) {
+                               word = word.slice( 0, -1 ) + 'де';
+                       } else if ( word.slice( -3 ) === 'ные' ) {
+                               word = word.slice( 0, -3 ) + 'ных';
+                       } else if ( word.slice( -3 ) === 'ник' ) {
+                               word = word.slice( 0, -3 ) + 'нике';
                        }
                        break;
        }
index 69f7ec5..550a388 100644 (file)
@@ -9,26 +9,26 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
        }
        switch ( form ) {
                case 'genitive': // родовий відмінок
-                       if ( word.substr( word.length - 4 ) !== 'вікі' && word.substr( word.length - 4 ) !== 'Вікі' ) {
-                               if ( word.substr( word.length - 1 ) === 'ь' ) {
-                                       word = word.substr(0, word.length - 1 ) + 'я';
-                               } else if ( word.substr( word.length - 2 ) === 'ія' ) {
-                                       word = word.substr(0, word.length - 2 ) + 'ії';
-                               } else if ( word.substr( word.length - 2 ) === 'ка' ) {
-                                       word = word.substr(0, word.length - 2 ) + 'ки';
-                               } else if ( word.substr( word.length - 2 ) === 'ти' ) {
-                                       word = word.substr(0, word.length - 2 ) + 'тей';
-                               } else if ( word.substr( word.length - 2 ) === 'ды' ) {
-                                       word = word.substr(0, word.length - 2 ) + 'дов';
-                               } else if ( word.substr( word.length - 3 ) === 'ник' ) {
-                                       word = word.substr(0, word.length - 3 ) + 'ника';
+                       if ( word.slice( -4 ) !== 'вікі' && word.slice( -4 ) !== 'Вікі' ) {
+                               if ( word.slice( -1 ) === 'ь' ) {
+                                       word = word.slice(0, -1 ) + 'я';
+                               } else if ( word.slice( -2 ) === 'ія' ) {
+                                       word = word.slice(0, -2 ) + 'ії';
+                               } else if ( word.slice( -2 ) === 'ка' ) {
+                                       word = word.slice(0, -2 ) + 'ки';
+                               } else if ( word.slice( -2 ) === 'ти' ) {
+                                       word = word.slice(0, -2 ) + 'тей';
+                               } else if ( word.slice( -2 ) === 'ды' ) {
+                                       word = word.slice(0, -2 ) + 'дов';
+                               } else if ( word.slice( -3 ) === 'ник' ) {
+                                       word = word.slice(0, -3 ) + 'ника';
                                }
                        }
                        break;
                case 'accusative': // знахідний відмінок
-                       if ( word.substr( word.length - 4 ) !== 'вікі' && word.substr( word.length - 4 ) !== 'Вікі' ) {
-                               if ( word.substr( word.length - 2 ) === 'ія' ) {
-                                       word = word.substr(0, word.length - 2 ) + 'ію';
+                       if ( word.slice( -4 ) !== 'вікі' && word.slice( -4 ) !== 'Вікі' ) {
+                               if ( word.slice( -2 ) === 'ія' ) {
+                                       word = word.slice(0, -2 ) + 'ію';
                                }
                        }
                        break;
index a0b5569..dceae11 100644 (file)
@@ -40,39 +40,18 @@ $.extend( mw.language, {
         *
         * @param {number} count Non-localized quantifier
         * @param {Array} forms List of plural forms
+        * @param {Object} [explicitPluralForms] List of explicit plural forms
         * @return {string} Correct form for quantifier in this language
         */
-       convertPlural: function ( count, forms ) {
+       convertPlural: function ( count, forms, explicitPluralForms ) {
                var pluralRules,
-                       formCount,
-                       form,
-                       index,
-                       equalsPosition,
                        pluralFormIndex = 0;
 
-               if ( !forms || forms.length === 0 ) {
-                       return '';
-               }
-
-               // Handle for explicit n= forms
-               for ( index = 0; index < forms.length; index++ ) {
-                       form = forms[index];
-                       if ( /^\d+=/.test( form ) ) {
-                               equalsPosition = form.indexOf( '=' );
-                               formCount = parseInt( form.substring( 0, equalsPosition ), 10 );
-                               if ( formCount === count ) {
-                                       return form.substr( equalsPosition + 1 );
-                               }
-                               forms[index] = undefined;
-                       }
+               if ( explicitPluralForms && explicitPluralForms[count] ) {
+                       return explicitPluralForms[count];
                }
 
-               // Remove explicit plural forms from the forms.
-               forms = $.map( forms, function ( form ) {
-                       return form;
-               } );
-
-               if ( forms.length === 0 ) {
+               if ( !forms || forms.length === 0 ) {
                        return '';
                }
 
@@ -144,8 +123,28 @@ $.extend( mw.language, {
                        return grammarForms[form][word] || word;
                }
                return word;
-       }
+       },
 
+       /**
+        * Turn a list of string into a simple list using commas and 'and'.
+        *
+        * See Language::listToText in languages/Language.php
+        *
+        * @param {string[]} list
+        * @return {string}
+        */
+       listToText: function ( list ) {
+               var text = '', i = 0;
+               for ( ; i < list.length; i++ ) {
+                       text += list[i];
+                       if ( list.length - 2 === i ) {
+                               text += mw.msg( 'and' ) + mw.msg( 'word-separator' );
+                       } else if ( list.length - 1 !== i ) {
+                               text += mw.msg( 'comma-separator' );
+                       }
+               }
+               return text;
+       }
 } );
 
 }( mediaWiki, jQuery ) );
index 56fa0da..a0b8141 100644 (file)
@@ -34,7 +34,7 @@
        }
 
        /**
-        * Efficiently replicate a string `n` times.
+        * Replicate a string 'n' times.
         *
         * @private
         * @param {string} str The string to replicate
@@ -47,9 +47,8 @@
                }
 
                var buf = [];
-               while (num) {
+               while ( num-- ) {
                        buf.push( str );
-                       str += str;
                }
                return buf.join( '' );
        }
 
                        // Truncate fractional
                        if ( maxPlaces < fractional.length ) {
-                               valueParts[1] = fractional.substr( 0, maxPlaces );
+                               valueParts[1] = fractional.slice( 0, maxPlaces );
                        }
                } else {
                        if ( valueParts[1] ) {
 
                        // Truncate whole
                        if ( patternDigits.indexOf( '#' ) === -1 ) {
-                               valueParts[0] = valueParts[0].substr( valueParts[0].length - padLength );
+                               valueParts[0] = valueParts[0].slice( valueParts[0].length - padLength );
                        }
                }
 
 
                if ( index !== -1 ) {
                        groupSize = patternParts[0].length - index - 1;
-                       remainder = patternParts[0].substr( 0, index );
+                       remainder = patternParts[0].slice( 0, index );
                        index = remainder.lastIndexOf( ',' );
                        if ( index !== -1 ) {
                                groupSize2 = remainder.length - index - 1;
                }
 
                for ( whole = valueParts[0]; whole; ) {
-                       off = whole.length - groupSize;
-
-                       pieces.push( ( off > 0 ) ? whole.substr( off ) : whole );
+                       off = groupSize ? whole.length - groupSize : 0;
+                       pieces.push( ( off > 0 ) ? whole.slice( off ) : whole );
                        whole = ( off > 0 ) ? whole.slice( 0, off ) : '';
 
                        if ( groupSize2 ) {
                                groupSize = groupSize2;
+                               groupSize2 = null;
                        }
                }
                valueParts[0] = pieces.reverse().join( options.group );
diff --git a/resources/src/mediawiki.legacy/ajax.js b/resources/src/mediawiki.legacy/ajax.js
new file mode 100644 (file)
index 0000000..6b9464a
--- /dev/null
@@ -0,0 +1,194 @@
+/**
+ * Remote Scripting Library
+ * Copyright 2005 modernmethod, inc
+ * Under the open source BSD license
+ * http://www.modernmethod.com/sajax/
+ */
+
+/*jshint camelcase:false */
+/*global alert */
+( function ( mw ) {
+
+/**
+ * if sajax_debug_mode is true, this function outputs given the message into
+ * the element with id = sajax_debug; if no such element exists in the document,
+ * it is injected.
+ */
+function debug( text ) {
+       if ( !window.sajax_debug_mode ) {
+               return false;
+       }
+
+       var b, m,
+               e = document.getElementById( 'sajax_debug' );
+
+       if ( !e ) {
+               e = document.createElement( 'p' );
+               e.className = 'sajax_debug';
+               e.id = 'sajax_debug';
+
+               b = document.getElementsByTagName( 'body' )[0];
+
+               if ( b.firstChild ) {
+                       b.insertBefore( e, b.firstChild );
+               } else {
+                       b.appendChild( e );
+               }
+       }
+
+       m = document.createElement( 'div' );
+       m.appendChild( document.createTextNode( text ) );
+
+       e.appendChild( m );
+
+       return true;
+}
+
+/**
+ * Compatibility wrapper for creating a new XMLHttpRequest object.
+ */
+function createXhr() {
+       debug( 'sajax_init_object() called..' );
+       var a;
+       try {
+               // Try the new style before ActiveX so we don't
+               // unnecessarily trigger warnings in IE 7 when
+               // set to prompt about ActiveX usage
+               a = new XMLHttpRequest();
+       } catch ( xhrE ) {
+               try {
+                       a = new window.ActiveXObject( 'Msxml2.XMLHTTP' );
+               } catch ( msXmlE ) {
+                       try {
+                               a = new window.ActiveXObject( 'Microsoft.XMLHTTP' );
+                       } catch ( msXhrE ) {
+                               a = null;
+                       }
+               }
+       }
+       if ( !a ) {
+               debug( 'Could not create connection object.' );
+       }
+
+       return a;
+}
+
+/**
+ * Perform an AJAX call to MediaWiki. Calls are handled by AjaxDispatcher.php
+ *   func_name - the name of the function to call. Must be registered in $wgAjaxExportList
+ *   args - an array of arguments to that function
+ *   target - the target that will handle the result of the call. If this is a function,
+ *            if will be called with the XMLHttpRequest as a parameter; if it's an input
+ *            element, its value will be set to the resultText; if it's another type of
+ *            element, its innerHTML will be set to the resultText.
+ *
+ * Example:
+ *    sajax_do_call( 'doFoo', [1, 2, 3], document.getElementById( 'showFoo' ) );
+ *
+ * This will call the doFoo function via MediaWiki's AjaxDispatcher, with
+ * (1, 2, 3) as the parameter list, and will show the result in the element
+ * with id = showFoo
+ */
+function doAjaxRequest( func_name, args, target ) {
+       var i, x, uri, post_data;
+       uri = mw.util.wikiScript() + '?action=ajax';
+       if ( window.sajax_request_type === 'GET' ) {
+               if ( uri.indexOf( '?' ) === -1 ) {
+                       uri = uri + '?rs=' + encodeURIComponent( func_name );
+               } else {
+                       uri = uri + '&rs=' + encodeURIComponent( func_name );
+               }
+               for ( i = 0; i < args.length; i++ ) {
+                       uri = uri + '&rsargs[]=' + encodeURIComponent( args[i] );
+               }
+               //uri = uri + '&rsrnd=' + new Date().getTime();
+               post_data = null;
+       } else {
+               post_data = 'rs=' + encodeURIComponent( func_name );
+               for ( i = 0; i < args.length; i++ ) {
+                       post_data = post_data + '&rsargs[]=' + encodeURIComponent( args[i] );
+               }
+       }
+       x = createXhr();
+       if ( !x ) {
+               alert( 'AJAX not supported' );
+               return false;
+       }
+
+       try {
+               x.open( window.sajax_request_type, uri, true );
+       } catch ( e ) {
+               if ( location.hostname === 'localhost' ) {
+                       alert( 'Your browser blocks XMLHttpRequest to "localhost", try using a real hostname for development/testing.' );
+               }
+               throw e;
+       }
+       if ( window.sajax_request_type === 'POST' ) {
+               x.setRequestHeader( 'Method', 'POST ' + uri + ' HTTP/1.1' );
+               x.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
+       }
+       x.setRequestHeader( 'Pragma', 'cache=yes' );
+       x.setRequestHeader( 'Cache-Control', 'no-transform' );
+       x.onreadystatechange = function () {
+               if ( x.readyState !== 4 ) {
+                       return;
+               }
+
+               debug( 'received (' + x.status + ' ' + x.statusText + ') ' + x.responseText );
+
+               //if ( x.status != 200 )
+               //      alert( 'Error: ' + x.status + ' ' + x.statusText + ': ' + x.responseText );
+               //else
+
+               if ( typeof target === 'function' ) {
+                       target( x );
+               } else if ( typeof target === 'object' ) {
+                       if ( target.tagName === 'INPUT' ) {
+                               if ( x.status === 200 ) {
+                                       target.value = x.responseText;
+                               }
+                               //else alert( 'Error: ' + x.status + ' ' + x.statusText + ' (' + x.responseText + ')' );
+                       } else {
+                               if ( x.status === 200 ) {
+                                       target.innerHTML = x.responseText;
+                               } else {
+                                       target.innerHTML = '<div class="error">Error: ' + x.status +
+                                               ' ' + x.statusText + ' (' + x.responseText + ')</div>';
+                               }
+                       }
+               } else {
+                       alert( 'Bad target for sajax_do_call: not a function or object: ' + target );
+               }
+       };
+
+       debug( func_name + ' uri = ' + uri + ' / post = ' + post_data );
+       x.send( post_data );
+       debug( func_name + ' waiting..' );
+
+       return true;
+}
+
+/**
+ * @return {boolean} Whether the browser supports AJAX
+ */
+function wfSupportsAjax() {
+       var request = createXhr(),
+               supportsAjax = request ? true : false;
+
+       request = undefined;
+       return supportsAjax;
+}
+
+// Expose + Mark as deprecated
+var deprecationNotice = 'Sajax is deprecated, use jQuery.ajax or mediawiki.api instead.';
+
+// Variables
+mw.log.deprecate( window, 'sajax_debug_mode', false, deprecationNotice );
+mw.log.deprecate( window, 'sajax_request_type', 'GET', deprecationNotice );
+// Methods
+mw.log.deprecate( window, 'sajax_debug', debug, deprecationNotice );
+mw.log.deprecate( window, 'sajax_init_object', createXhr, deprecationNotice );
+mw.log.deprecate( window, 'sajax_do_call', doAjaxRequest, deprecationNotice );
+mw.log.deprecate( window, 'wfSupportsAjax', wfSupportsAjax, deprecationNotice );
+
+}( mediaWiki ) );
diff --git a/resources/src/mediawiki.legacy/commonPrint.css b/resources/src/mediawiki.legacy/commonPrint.css
new file mode 100644 (file)
index 0000000..9405719
--- /dev/null
@@ -0,0 +1,436 @@
+/**
+ * MediaWiki Print style sheet for CSS2-capable browsers.
+ * Copyright Gabriel Wicke, http://www.aulinx.de/
+ *
+ * Derived from the plone (http://plone.org/) styles
+ * Copyright Alexander Limi
+ */
+
+/* Thanks to A List Apart (http://alistapart.com/) for useful extras */
+
+/**
+ * Hide all the elements irrelevant for printing
+ */
+.noprint,
+div#jump-to-nav,
+.mw-jump,
+div.top,
+div#column-one,
+#colophon,
+.mw-editsection,
+.mw-editsection-like,
+.toctoggle,
+#toc.tochidden,
+div#f-poweredbyico,
+div#f-copyrightico,
+li#about,
+li#disclaimer,
+li#mobileview,
+li#privacy,
+#footer-places,
+.mw-hidden-catlinks,
+tr.mw-metadata-show-hide-extended,
+span.mw-filepage-other-resolutions,
+#filetoc,
+.usermessage,
+.patrollink,
+#mw-navigation,
+#siteNotice {
+       display: none;
+}
+
+/**
+ * Pagination
+ */
+.wikitable, .thumb, img {
+       page-break-inside: avoid;
+}
+
+h2, h3, h4, h5, h6 {
+       page-break-after: avoid;
+}
+
+p {
+       widows: 3;
+       orphans: 3;
+}
+
+/**
+ * Generic HTML elements
+ */
+body {
+       background: white;
+       color: black;
+       margin: 0;
+       padding: 0;
+}
+
+ul {
+       list-style-type: square;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       font-weight: bold;
+}
+
+dt {
+       font-weight: bold;
+}
+
+p {
+       margin: 1em 0;
+       line-height: 1.2em;
+}
+
+pre, .mw-code {
+       border: 1pt dashed black;
+       white-space: pre;
+       font-size: 8pt;
+       overflow: auto;
+       padding: 1em 0;
+       background: white;
+       color: black;
+}
+
+/**
+ * MediaWiki-specific elements
+ */
+#globalWrapper {
+       width: 100% !important;
+       min-width: 0 !important;
+}
+
+.mw-body {
+       background: white;
+       border: none !important;
+       padding: 0 !important;
+       margin: 0 !important;
+       direction: ltr;
+       color: black;
+}
+
+#column-content {
+       margin: 0 !important;
+}
+
+#column-content .mw-body {
+       padding: 1em;
+       margin: 0 !important;
+}
+
+#toc {
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       display: -moz-inline-block;
+       display: inline-block;
+       display: table;
+       /* IE7 and earlier */
+       zoom: 1;
+       *display: inline;
+}
+
+#footer {
+       background: white;
+       color: black;
+       margin-top: 1em;
+       border-top: 1px solid #AAA;
+       direction: ltr;
+}
+
+img {
+       border: none;
+       vertical-align: middle;
+}
+
+/* math */
+span.texhtml {
+       font-family: serif;
+}
+
+/**
+ * Links
+ */
+a.stub,
+a.new {
+       color: #ba0000;
+       text-decoration: none;
+}
+
+a {
+       color: black !important;
+       background: none !important;
+       padding: 0 !important;
+}
+
+a:link, a:visited {
+       color: #520;
+       background: transparent;
+       text-decoration: underline;
+}
+
+/* Expand URLs for printing */
+.mw-body a.external.text:after,
+.mw-body a.external.autonumber:after {
+       content: " (" attr(href) ")";
+}
+
+/* Expand protocol-relative URLs for printing */
+.mw-body a.external.text[href^='//']:after,
+.mw-body a.external.autonumber[href^='//']:after {
+       content: " (https:" attr(href) ")";
+}
+
+/* MSIE/Win doesn't understand 'inherit' */
+a,
+a.external,
+a.new,
+a.stub {
+       color: black !important;
+       text-decoration: none !important;
+}
+
+/* Continue ... */
+a,
+a.external,
+a.new,
+a.stub {
+       color: inherit !important;
+       text-decoration: inherit !important;
+}
+
+/**
+ * Floating divs
+ */
+/* @noflip */
+div.floatright {
+       float: right;
+       clear: right;
+       position: relative;
+       margin: 0.5em 0 0.8em 1.4em;
+}
+
+div.floatright p {
+       font-style: italic;
+}
+
+/* @noflip */
+div.floatleft {
+       float: left;
+       clear: left;
+       position: relative;
+       margin: 0.5em 1.4em 0.8em 0;
+}
+
+div.floatleft p {
+       font-style: italic;
+}
+
+div.center {
+       text-align: center;
+}
+
+/**
+ * Thumbnails
+ */
+div.thumb {
+       border: none;
+       width: auto;
+       margin-top: 0.5em;
+       margin-bottom: 0.8em;
+       background-color: transparent;
+}
+
+div.thumbinner {
+       border: 1px solid #cccccc;
+       padding: 3px !important;
+       background-color: White;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+
+html .thumbimage {
+       border: 1px solid #cccccc;
+}
+
+html .thumbcaption {
+       border: none;
+       text-align: left;
+       line-height: 1.4em;
+       padding: 3px !important;
+       font-size: 94%;
+}
+
+div.magnify {
+       display: none;
+}
+
+/* @noflip */
+div.tright {
+       float: right;
+       clear: right;
+       margin: 0.5em 0 0.8em 1.4em;
+}
+
+/* @noflip */
+div.tleft {
+       float: left;
+       clear: left;
+       margin: 0.5em 1.4em 0.8em 0;
+}
+
+img.thumbborder {
+       border: 1px solid #dddddd;
+}
+
+/**
+ * Galleries (see shared.css for more info)
+ */
+li.gallerybox {
+       vertical-align: top;
+       display: inline-block;
+}
+
+ul.gallery, li.gallerybox {
+       zoom: 1;
+       *display: inline;
+}
+
+ul.gallery {
+       margin: 2px;
+       padding: 2px;
+       display: block;
+}
+
+li.gallerycaption {
+       font-weight: bold;
+       text-align: center;
+       display: block;
+       word-wrap: break-word;
+}
+
+li.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       margin: 2px;
+}
+
+div.gallerytext {
+       overflow: hidden;
+       font-size: 94%;
+       padding: 2px 4px;
+       word-wrap: break-word;
+}
+
+/**
+ * Diff rendering
+ */
+table.diff {
+       background: white;
+}
+
+td.diff-otitle {
+       background: #ffffff;
+}
+
+td.diff-ntitle {
+       background: #ffffff;
+}
+
+td.diff-addedline {
+       background: #ccffcc;
+       font-size: smaller;
+       border: solid 2px black;
+}
+
+td.diff-deletedline {
+       background: #ffffaa;
+       font-size: smaller;
+       border: dotted 2px black;
+}
+
+td.diff-context {
+       background: #eeeeee;
+       font-size: smaller;
+}
+
+.diffchange {
+       color: silver;
+       font-weight: bold;
+       text-decoration: underline;
+}
+
+/**
+ * Table rendering
+ * As on shared.css but with white background.
+ */
+table.wikitable,
+table.mw_metadata {
+       margin: 1em 0;
+       border: 1px #aaa solid;
+       background: white;
+       border-collapse: collapse;
+}
+
+table.wikitable > tr > th, table.wikitable > tr > td,
+table.wikitable > * > tr > th, table.wikitable > * > tr > td,
+.mw_metadata th, .mw_metadata td {
+       border: 1px #aaa solid;
+       padding: 0.2em;
+}
+
+table.wikitable > tr > th,
+table.wikitable > * > tr > th,
+.mw_metadata th {
+       text-align: center;
+       background: white;
+       font-weight: bold;
+}
+
+table.wikitable > caption,
+.mw_metadata caption {
+       font-weight: bold;
+}
+
+table.listing,
+table.listing td {
+       border: 1pt solid black;
+       border-collapse: collapse;
+}
+
+a.sortheader {
+       margin: 0 0.3em;
+}
+
+/**
+ * Categories
+ */
+.catlinks ul {
+       display: inline;
+       margin: 0;
+       padding: 0;
+       list-style: none;
+       list-style-type: none;
+       list-style-image: none;
+       vertical-align: middle !ie;
+}
+
+.catlinks li {
+       display: inline-block;
+       line-height: 1.15em;
+       padding: 0 .4em;
+       border-left: 1px solid #AAA;
+       margin: 0.1em 0;
+       zoom: 1;
+       display: inline !ie;
+}
+
+.catlinks li:first-child {
+       padding-left: .2em;
+       border-left: none;
+}
+
+.printfooter {
+       padding: 1em 0 1em 0;
+}
diff --git a/resources/src/mediawiki.legacy/images/ajax-loader.gif b/resources/src/mediawiki.legacy/images/ajax-loader.gif
new file mode 100644 (file)
index 0000000..72203fd
Binary files /dev/null and b/resources/src/mediawiki.legacy/images/ajax-loader.gif differ
diff --git a/resources/src/mediawiki.legacy/images/checker.png b/resources/src/mediawiki.legacy/images/checker.png
new file mode 100644 (file)
index 0000000..3e9e3d0
Binary files /dev/null and b/resources/src/mediawiki.legacy/images/checker.png differ
diff --git a/resources/src/mediawiki.legacy/images/feed-icon.png b/resources/src/mediawiki.legacy/images/feed-icon.png
new file mode 100644 (file)
index 0000000..00f49f6
Binary files /dev/null and b/resources/src/mediawiki.legacy/images/feed-icon.png differ
diff --git a/resources/src/mediawiki.legacy/images/feed-icon.svg b/resources/src/mediawiki.legacy/images/feed-icon.svg
new file mode 100644 (file)
index 0000000..6e5f570
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 256 256"><defs><linearGradient x1=".085" y1=".085" x2=".915" y2=".915" id="a"><stop offset="0" stop-color="#E3702D"/><stop offset=".107" stop-color="#EA7D31"/><stop offset=".35" stop-color="#F69537"/><stop offset=".5" stop-color="#FB9E3A"/><stop offset=".702" stop-color="#EA7C31"/><stop offset=".887" stop-color="#DE642B"/><stop offset="1" stop-color="#D95B29"/></linearGradient></defs><rect width="256" height="256" rx="55" ry="55" fill="#CC5D15"/><rect width="246" height="246" rx="50" ry="50" x="5" y="5" fill="#F49C52"/><rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#a)"/><circle cx="68" cy="189" r="24" fill="#FFF"/><path d="M160 213h-34a82 82 0 0 0-82-82v-34a116 116 0 0 1 116 116zM184 213a140 140 0 0 0-140-140v-35a175 175 0 0 1 175 175z" fill="#FFF"/></svg>
\ No newline at end of file
diff --git a/resources/src/mediawiki.legacy/images/help-question-hover.gif b/resources/src/mediawiki.legacy/images/help-question-hover.gif
new file mode 100644 (file)
index 0000000..515138d
Binary files /dev/null and b/resources/src/mediawiki.legacy/images/help-question-hover.gif differ
diff --git a/resources/src/mediawiki.legacy/images/help-question.gif b/resources/src/mediawiki.legacy/images/help-question.gif
new file mode 100644 (file)
index 0000000..b4fc9c5
Binary files /dev/null and b/resources/src/mediawiki.legacy/images/help-question.gif differ
diff --git a/resources/src/mediawiki.legacy/images/question.png b/resources/src/mediawiki.legacy/images/question.png
new file mode 100644 (file)
index 0000000..f7405d2
Binary files /dev/null and b/resources/src/mediawiki.legacy/images/question.png differ
diff --git a/resources/src/mediawiki.legacy/images/question.svg b/resources/src/mediawiki.legacy/images/question.svg
new file mode 100644 (file)
index 0000000..98fbe8d
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="21.059" height="21.06"><path fill="#575757" d="M10.529 0c-5.814 0-10.529 4.714-10.529 10.529s4.715 10.53 10.529 10.53c5.816 0 10.529-4.715 10.529-10.53s-4.712-10.529-10.529-10.529zm-.002 16.767c-.861 0-1.498-.688-1.498-1.516 0-.862.637-1.534 1.498-1.534.828 0 1.5.672 1.5 1.534 0 .827-.672 1.516-1.5 1.516zm2.137-6.512c-.723.568-1 .931-1 1.739v.5h-2.205v-.603c0-1.517.449-2.136 1.154-2.688.707-.552 1.139-.845 1.139-1.637 0-.672-.414-1.051-1.24-1.051-.707 0-1.328.189-1.982.638l-1.051-1.807c.861-.604 1.93-1.034 3.342-1.034 1.912 0 3.516 1.051 3.516 3.066-.001 1.43-.794 2.188-1.673 2.877z"/></svg>
\ No newline at end of file
diff --git a/resources/src/mediawiki.legacy/images/spinner.gif b/resources/src/mediawiki.legacy/images/spinner.gif
new file mode 100644 (file)
index 0000000..6146be4
Binary files /dev/null and b/resources/src/mediawiki.legacy/images/spinner.gif differ
diff --git a/resources/src/mediawiki.legacy/oldshared.css b/resources/src/mediawiki.legacy/oldshared.css
new file mode 100644 (file)
index 0000000..d92d3bb
--- /dev/null
@@ -0,0 +1,489 @@
+/**
+ * oldshared.css
+ * This file contains CSS settings common to Wikistandard, Nostalgia and
+ * CologneBlue, the old pre-Monobook skins
+ */
+
+/* For clarity, explicitly state some recommendations from
+ * http://www.w3.org/TR/CSS21/sample.html to make sure the editsection links scale right
+ */
+
+h1 {
+       font-size: 2em;
+}
+
+h2 {
+       font-size: 1.5em;
+}
+
+h3 {
+       font-size: 1.17em;
+}
+
+h4 {
+       font-size: 1.11em;
+}
+
+h5 {
+       font-size: 1.05em;
+}
+
+h6 {
+       font-size: 1em;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       font-weight: bolder;
+}
+
+/* Now the custom parts */
+
+#footer {
+       clear: both;
+}
+
+/* images */
+/* @noflip */
+div.floatright {
+       float: right;
+       clear: right;
+       margin: 0 0 1em 1em;
+}
+
+/* @noflip */
+div.floatright p {
+       font-style: italic;
+}
+
+/* @noflip */
+div.floatleft {
+       float: left;
+       clear: left;
+       margin: 0.3em 0.5em 0.5em 0;
+}
+
+/* @noflip */
+div.floatleft p {
+       font-style: italic;
+}
+
+/* table standards */
+table.rimage {
+       float: right;
+       margin-left: 1em;
+       margin-bottom: 1em;
+       text-align: center;
+       font-size: smaller;
+}
+
+/* thumbnails */
+div.thumb {
+       margin-bottom: .5em;
+       border-style: solid;
+       border-color: white;
+       width: auto;
+}
+
+div.thumbinner {
+       border: 1px solid #ccc;
+       padding: 3px;
+       background-color: #f9f9f9;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+
+html .thumbimage {
+       border: 1px solid #ccc;
+}
+
+html .thumbcaption {
+       border: none;
+       line-height: 1.4em;
+       padding: 3px;
+       font-size: 94%;
+       text-align: left;
+}
+
+div.magnify {
+       float: right;
+       margin-left: 3px;
+}
+
+div.magnify a {
+       display: block;
+       /* Hide the text… */
+       text-indent: 15px;
+       white-space: nowrap;
+       overflow: hidden;
+       /* …and replace it with the image */
+       width: 15px;
+       height: 11px;
+       /* @embed */
+       background: url(images/magnify-clip-ltr.png) center center no-repeat;
+       /* Don't annoy people who copy-paste everything too much */
+       -moz-user-select: none;
+       -webkit-user-select: none;
+       -ms-user-select: none;
+       user-select: none;
+}
+
+/* @noflip */
+div.tright {
+       clear: right;
+       float: right;
+       border-width: .5em 0 .8em 1.4em;
+}
+
+/* @noflip */
+div.tleft {
+       float: left;
+       clear: left;
+       margin-right: .5em;
+       border-width: .5em 1.4em .8em 0;
+}
+
+img.thumbborder {
+       border: 1px solid #dddddd;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment {
+       color: #4b4b4b;
+}
+
+img {
+       border: none;
+}
+
+#toc,
+.toc {
+       border: 1px solid #bba;
+       background-color: #f7f8ff;
+       padding: 5px;
+       font-size: 95%;
+       text-align: center;
+       display: -moz-inline-block;
+       display: inline-block;
+       display: table;
+
+       /* IE7 and earlier */
+       zoom: 1;
+       *display: inline;
+
+       padding: 7px;
+}
+
+/* CSS for backwards-compatibility with cached page renders and creative uses in wikitext */
+table#toc,
+table.toc {
+       border-collapse: collapse;
+}
+
+/* Remove additional paddings inside table-cells that are not present in <div>s */
+table#toc td,
+table.toc td {
+       padding: 0;
+}
+
+#toc h2,
+.toc h2 {
+       display: inline;
+       border: none;
+       padding: 0;
+       font-size: 100%;
+       font-weight: bold;
+}
+
+#toc ul,
+.toc ul {
+       list-style-type: none;
+       list-style-image: none;
+       padding: 0;
+       text-align: left;
+}
+
+#toc ul ul,
+.toc ul ul {
+       margin: 0 0 0 2em;
+}
+
+#toc .toctoggle,
+.toc .toctoggle {
+       font-size: 94%;
+}
+
+.error {
+       color: red;
+       font-size: larger;
+}
+
+/* preference page with js-genrated toc */
+#preftoc {
+       float: left;
+       margin: 1em 1em 1em 1em;
+       width: 13em;
+}
+
+#preftoc li {
+       border: 1px solid White;
+}
+
+#preftoc li.selected {
+       background-color: #f9f9f9;
+       border: 1px dashed #aaaaaa;
+}
+
+#preftoc a,
+#preftoc a:active {
+       display: block;
+       color: #005189;
+}
+
+.mw-prefs-buttons {
+       clear: left;
+       float: left;
+       margin-top: 1em;
+}
+
+div.htmlform-tip {
+       font-size: 94%;
+       margin-top: 0.4em;
+       color: #666;
+}
+
+fieldset.prefsection {
+       margin-top: 1em;
+}
+
+fieldset.operaprefsection {
+       margin-left: 15em;
+}
+
+/* emulate center */
+.center {
+       width: 100%;
+       text-align: center;
+}
+
+*.center * {
+       margin-left: auto;
+       margin-right: auto;
+}
+
+/* small for tables and similar */
+.small {
+       font-size: 94%;
+}
+
+table.small {
+       font-size: 100%;
+}
+
+/* use this instead of #toc for page content */
+.toccolours {
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+
+#siteNotice {
+       border: 1px solid #aaaaaa;
+       padding-left: 0.5em;
+       padding-right: 0.5em;
+}
+
+.sharedUploadNotice {
+       font-style: italic;
+}
+
+span.unpatrolled {
+       font-weight: bold;
+       color: red;
+}
+
+span.updatedmarker {
+       color: black;
+       background-color: #00FF00;
+}
+
+div.gallerybox {
+       width: 150px;
+}
+
+span.comment {
+       font-style: italic;
+}
+
+span.changedby {
+       font-size: 95%;
+}
+
+.previewnote {
+       text-align: center;
+       color: #cc0000;
+}
+
+.editExternally {
+       border-style: solid;
+       border-width: 1px;
+       border-color: gray;
+       background: #ffffff;
+       padding: 3px;
+       margin-top: 0.5em;
+       float: left;
+       font-size: small;
+       text-align: center;
+}
+
+.editExternallyHelp {
+       font-style: italic;
+       color: gray;
+}
+
+li span.deleted {
+       text-decoration: line-through;
+       color: #888;
+       font-style: italic;
+}
+
+/* Classes for Exif data display */
+table.mw_metadata {
+       margin-left: 0.5em;
+}
+
+table.mw_metadata caption {
+       font-weight: bold;
+}
+
+table.mw_metadata th {
+       font-weight: normal;
+}
+
+table.mw_metadata td {
+       padding: 0.1em;
+}
+
+table.mw_metadata {
+       border: none;
+       border-collapse: collapse;
+}
+
+table.mw_metadata td,
+table.mw_metadata th {
+       border: 1px solid #aaaaaa;
+       padding-left: 4px;
+       padding-right: 4px;
+}
+
+table.mw_metadata th {
+       background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+       background-color: #fcfcfc;
+}
+
+table.mw_metadata td.spacer {
+       background: inherit;
+       border-top: none;
+       border-bottom: none;
+}
+
+.visualClear {
+       clear: both;
+}
+
+/* Allmessages table */
+#allmessagestable th {
+       background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+       background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+       background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+       background-color: #f0f0ff;
+}
+
+#jump-to-nav {
+       display: none;
+}
+
+div.multipageimagenavbox {
+       border: solid 1px silver;
+       padding: 4px;
+       margin: 1em;
+       background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+       border: none;
+       margin-left: 2em;
+       margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+       margin: 6px;
+}
+
+table.multipageimage td {
+       text-align: center;
+}
+
+.templatesUsed {
+       margin-top: 1em;
+}
+
+.MediaTransformError {
+       border: thin solid #777;
+       background-color: #ccc;
+       padding: 0.1em;
+}
+
+.MediaTransformError td {
+       text-align: center;
+       vertical-align: middle;
+       font-size: 90%;
+}
+
+form#specialpages {
+       display: inline;
+}
+
+body {
+       direction: ltr;
+       unicode-bidi: embed;
+       background-color: #ffffec;
+}
+
+body.ns-0 {
+       background-color: white;
+}
+
+/** RTL specific CSS starts here **/
+
+/**
+ * Lists:
+ * The following lines don't have a visible effect on non-Gecko browsers
+ * They fix a problem with Gecko browsers rendering lists to the right of
+ * left-floated objects in an RTL layout.
+ */
+/* @noflip */
+html > body.rtl div#article ul {
+       display: table;
+}
+
+/* @noflip */
+html > body.rtl .mw-body ul#filetoc {
+       display: block;
+}
+
+/* RTL specific CSS ends here **/
diff --git a/resources/src/mediawiki.legacy/protect.js b/resources/src/mediawiki.legacy/protect.js
new file mode 100644 (file)
index 0000000..f9069b6
--- /dev/null
@@ -0,0 +1,240 @@
+( function ( mw, $ ) {
+
+var ProtectionForm = window.ProtectionForm = {
+       /**
+        * Set up the protection chaining interface (i.e. "unlock move permissions" checkbox)
+        * on the protection form
+        */
+       init: function () {
+               var $cell = $( '<td>' ), $row = $( '<tr>' ).append( $cell );
+
+               if ( !$( '#mwProtectSet' ).length ) {
+                       return false;
+               }
+
+               if ( mw.config.get( 'wgCascadeableLevels' ) !== undefined ) {
+                       $( 'form#mw-Protect-Form' ).submit( this.toggleUnchainedInputs.bind( ProtectionForm, true ) );
+               }
+               this.getExpirySelectors().each( function () {
+                       $( this ).change( ProtectionForm.updateExpiryList.bind( ProtectionForm, this ) );
+               } );
+               this.getExpiryInputs().each( function () {
+                       $( this ).on( 'keyup change', ProtectionForm.updateExpiry.bind( ProtectionForm, this ) );
+               } );
+               this.getLevelSelectors().each( function () {
+                       $( this ).change( ProtectionForm.updateLevels.bind( ProtectionForm, this ) );
+               } );
+
+               $( '#mwProtectSet > tbody > tr:first' ).after( $row );
+
+               // If there is only one protection type, there is nothing to chain
+               if ( $( '[id ^= mw-protect-table-]' ).length > 1 ) {
+                       $cell.append(
+                               $( '<input>' )
+                                       .attr( { id: 'mwProtectUnchained', type: 'checkbox' } )
+                                       .click( this.onChainClick.bind( this ) )
+                                       .prop( 'checked', !this.areAllTypesMatching() ),
+                               document.createTextNode( ' ' ),
+                               $( '<label>' )
+                                       .attr( 'for', 'mwProtectUnchained' )
+                                       .text( mw.msg( 'protect-unchain-permissions' ) )
+                       );
+
+                       this.toggleUnchainedInputs( !this.areAllTypesMatching() );
+               }
+
+               $( '#mwProtect-reason' ).byteLimit( 180 );
+
+               this.updateCascadeCheckbox();
+       },
+
+       /**
+        * Sets the disabled attribute on the cascade checkbox depending on the current selected levels
+        */
+       updateCascadeCheckbox: function () {
+               this.getLevelSelectors().each( function () {
+                       if ( !ProtectionForm.isCascadeableLevel( $( this ).val() ) ) {
+                               $( '#mwProtect-cascade' ).prop( { checked: false, disabled: true } );
+                               return false;
+                       } else {
+                               $( '#mwProtect-cascade' ).prop( 'disabled', false );
+                       }
+               } );
+       },
+
+       /**
+        * Checks if a cerain protection level is cascadeable.
+        *
+        * @param {string} level
+        * @return {boolean}
+        */
+       isCascadeableLevel: function ( level ) {
+               return $.inArray( level, mw.config.get( 'wgCascadeableLevels' ) ) !== -1;
+       },
+
+       /**
+        * When protection levels are locked together, update the rest
+        * when one action's level changes
+        *
+        * @param {Element} source Level selector that changed
+        */
+       updateLevels: function ( source ) {
+               if ( !this.isUnchained() ) {
+                       this.setAllSelectors( source.selectedIndex );
+               }
+               this.updateCascadeCheckbox();
+       },
+
+       /**
+        * When protection levels are locked together, update the
+        * expiries when one changes
+        *
+        * @param {Element} source expiry input that changed
+        */
+
+       updateExpiry: function ( source ) {
+               if ( !this.isUnchained() ) {
+                       this.getExpiryInputs().each( function () {
+                               this.value = source.value;
+                       } );
+               }
+               if ( this.isUnchained() ) {
+                       $( '#' + source.id.replace( /^mwProtect-(\w+)-expires$/, 'mwProtectExpirySelection-$1' ) ).val( 'othertime' );
+               } else {
+                       this.getExpirySelectors().each( function () {
+                               this.value = 'othertime';
+                       } );
+               }
+       },
+
+       /**
+        * When protection levels are locked together, update the
+        * expiry lists when one changes and clear the custom inputs
+        *
+        * @param {Element} source Expiry selector that changed
+        */
+       updateExpiryList: function ( source ) {
+               if ( !this.isUnchained() ) {
+                       this.getExpirySelectors().each( function () {
+                               this.value = source.value;
+                       } );
+                       this.getExpiryInputs().each( function () {
+                               this.value = '';
+                       } );
+               }
+       },
+
+       /**
+        * Update chain status and enable/disable various bits of the UI
+        * when the user changes the "unlock move permissions" checkbox
+        */
+       onChainClick: function () {
+               this.toggleUnchainedInputs( this.isUnchained() );
+               if ( !this.isUnchained() ) {
+                       this.setAllSelectors( this.getMaxLevel() );
+               }
+               this.updateCascadeCheckbox();
+       },
+
+       /**
+        * Returns true if the named attribute in all objects in the given array are matching
+        *
+        * @param {Object[]} objects
+        * @param {string} attrName
+        * @return {boolean}
+        */
+       matchAttribute: function ( objects, attrName ) {
+               return $.map( objects, function ( object ) {
+                       return object[attrName];
+               } ).filter( function ( item, index, a ) {
+                       return index === a.indexOf( item );
+               } ).length === 1;
+       },
+
+       /**
+        * Are all actions protected at the same level, with the same expiry time?
+        *
+        * @return {boolean}
+        */
+       areAllTypesMatching: function () {
+               return this.matchAttribute( this.getLevelSelectors(), 'selectedIndex' )
+                       && this.matchAttribute( this.getExpirySelectors(), 'selectedIndex' )
+                       && this.matchAttribute( this.getExpiryInputs(), 'value' );
+       },
+
+       /**
+        * Is protection chaining off?
+        *
+        * @return {boolean}
+        */
+       isUnchained: function () {
+               var element = document.getElementById( 'mwProtectUnchained' );
+               return element
+                       ? element.checked
+                       : true; // No control, so we need to let the user set both levels
+       },
+
+       /**
+        * Find the highest protection level in any selector
+        * @return {number}
+        */
+       getMaxLevel: function () {
+               return Math.max.apply( Math, this.getLevelSelectors().map( function () {
+                       return this.selectedIndex;
+               } ) );
+       },
+
+       /**
+        * Protect all actions at the specified level
+        *
+        * @param {number} index Protection level
+        */
+       setAllSelectors: function ( index ) {
+               this.getLevelSelectors().each( function () {
+                       this.selectedIndex = index;
+               } );
+       },
+
+       /**
+        * Get a list of all protection selectors on the page
+        *
+        * @return {jQuery}
+        */
+       getLevelSelectors: function () {
+               return $( 'select[id ^= mwProtect-level-]' );
+       },
+
+       /**
+        * Get a list of all expiry inputs on the page
+        *
+        * @return {jQuery}
+        */
+       getExpiryInputs: function () {
+               return $( 'input[id ^= mwProtect-][id $= -expires]' );
+       },
+
+       /**
+        * Get a list of all expiry selector lists on the page
+        *
+        * @return {jQuery}
+        */
+       getExpirySelectors: function () {
+               return $( 'select[id ^= mwProtectExpirySelection-]' );
+       },
+
+       /**
+        * Enable/disable protection selectors and expiry inputs
+        *
+        * @param {boolean} val Enable?
+        */
+       toggleUnchainedInputs: function ( val ) {
+               var setDisabled = function () { this.disabled = !val; };
+               this.getLevelSelectors().slice( 1 ).each( setDisabled );
+               this.getExpiryInputs().slice( 1 ).each( setDisabled );
+               this.getExpirySelectors().slice( 1 ).each( setDisabled );
+       }
+};
+
+$( ProtectionForm.init.bind( ProtectionForm ) );
+
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.legacy/shared.css b/resources/src/mediawiki.legacy/shared.css
new file mode 100644 (file)
index 0000000..0604773
--- /dev/null
@@ -0,0 +1,1167 @@
+/**
+ * CSS in this file is used by *all* skins (that have any CSS at all). Be
+ * careful what you put in here, since what looks good in one skin may not in
+ * another, but don't ignore the poor pre-Monobook users either.
+ */
+
+/* GENERAL CLASSES FOR DIRECTIONALITY SUPPORT */
+
+/**
+ * These classes should be used for text depending on the content direction.
+ * Content stuff like editsection, ul/ol and TOC depend on this.
+ */
+.mw-content-ltr {
+       /* @noflip */
+       direction: ltr;
+}
+
+.mw-content-rtl {
+       /* @noflip */
+       direction: rtl;
+}
+
+/* Most input fields should be in site direction */
+.sitedir-ltr textarea,
+.sitedir-ltr input {
+       /* @noflip */
+       direction: ltr;
+}
+
+.sitedir-rtl textarea,
+.sitedir-rtl input {
+       /* @noflip */
+       direction: rtl;
+}
+
+.mw-userlink {
+       unicode-bidi: embed;
+}
+
+/* User-Agent styles for new HTML5 elements */
+mark {
+       background-color: yellow;
+       color: black;
+}
+
+/* Helper for wbr element on IE 8+; in HTML5, but not supported by default as of IE 11. */
+/* Note canonical HTML5 styles recommend "content: \u200B", but this doesn't work as of IE 11. */
+wbr {
+       display: inline-block;
+}
+
+/* Input types that should follow user direction, like buttons */
+/* TODO: What about buttons in wikipage content ? */
+input[type="submit"],
+input[type="button"],
+input[type="reset"],
+input[type="file"] {
+       direction: ltr;
+}
+
+/* Override default values */
+textarea[dir="ltr"],
+input[dir="ltr"] {
+       /* @noflip */
+       direction: ltr;
+}
+
+textarea[dir="rtl"],
+input[dir="rtl"] {
+       /* @noflip */
+       direction: rtl;
+}
+
+/* Default style for semantic tags */
+abbr[title],
+.explain[title] {
+       border-bottom: 1px dotted;
+       cursor: help;
+}
+
+/* Colored watchlist and recent changes numbers */
+.mw-plusminus-pos {
+       color: #006400; /* dark green */
+}
+
+.mw-plusminus-neg {
+       color: #8b0000; /* dark red */
+}
+
+.mw-plusminus-null {
+       color: #aaa; /* gray */
+}
+
+/**
+ * Links to redirects appear italicized on [[Special:AllPages]], [[Special:PrefixIndex]],
+ * [[Special:Watchlist/edit]] and in category listings.
+ */
+.allpagesredirect,
+.redirect-in-category,
+.watchlistredir {
+       font-style: italic;
+}
+
+/* Comment and username portions of RC entries */
+span.comment {
+       font-style: italic;
+}
+
+span.changedby {
+       font-size: 95%;
+}
+
+/* Math */
+.texvc {
+       direction: ltr;
+       unicode-bidi: embed;
+}
+
+img.tex {
+       vertical-align: middle;
+}
+
+span.texhtml {
+       font-family: serif;
+}
+
+/**
+ * Add a bit of margin space between the preview and the toolbar.
+ * This replaces the ugly <p><br /></p> we used to insert into the page source
+ */
+#wikiPreview.ontop {
+       margin-bottom: 1em;
+}
+
+/* Stop floats from intruding into edit area in previews */
+#editform,
+#toolbar,
+#wpTextbox1 {
+       clear: both;
+}
+
+/**
+ * File description page
+ */
+
+div.mw-filepage-resolutioninfo {
+       font-size: smaller;
+}
+
+/**
+ * File histories
+ */
+h2#filehistory {
+       clear: both;
+}
+
+table.filehistory th,
+table.filehistory td {
+       vertical-align: top;
+}
+
+table.filehistory th {
+       text-align: left;
+}
+
+table.filehistory td.mw-imagepage-filesize,
+table.filehistory th.mw-imagepage-filesize {
+       white-space: nowrap;
+}
+
+table.filehistory td.filehistory-selected {
+       font-weight: bold;
+}
+
+/**
+ * Add a checkered background image on hover for file
+ * description pages. (bug 26470)
+ */
+.filehistory a img,
+#file img:hover {
+       /* @embed */
+       background: white url(images/checker.png) repeat;
+}
+
+/**
+ * rev_deleted stuff
+ */
+li span.deleted,
+span.history-deleted {
+       text-decoration: line-through;
+       color: #888;
+       font-style: italic;
+}
+
+/**
+ * Patrol stuff
+ */
+.not-patrolled {
+       background-color: #ffa;
+}
+
+.unpatrolled {
+       font-weight: bold;
+       color: red;
+}
+
+div.patrollink {
+       font-size: 75%;
+       text-align: right;
+}
+
+/**
+ * Forms
+ */
+td.mw-label {
+       text-align: right;
+}
+
+td.mw-input {
+       text-align: left;
+}
+
+td.mw-submit {
+       text-align: left;
+}
+
+td.mw-label {
+       vertical-align: top;
+}
+
+.prefsection td.mw-label {
+       width: 20%;
+}
+
+.prefsection table {
+       width: 100%;
+}
+
+.prefsection table.mw-htmlform-matrix {
+       width: auto;
+}
+
+.mw-icon-question {
+       /* SVG support using a transparent gradient to guarantee cross-browser
+        * compatibility (browsers able to understand gradient syntax support also SVG).
+        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
+       background-image: url(images/question.png);
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/question.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/question.svg);
+       background-repeat: no-repeat;
+       background-size: 13px 13px;
+       display: inline-block;
+       height: 13px;
+       width: 13px;
+       margin-left: 4px;
+}
+
+.mw-icon-question:lang(ar),
+.mw-icon-question:lang(fa),
+.mw-icon-question:lang(ur) {
+       -webkit-transform: scaleX(-1);
+       -ms-transform: scaleX(-1);
+       transform: scaleX(-1);
+}
+
+td.mw-submit {
+       white-space: nowrap;
+}
+
+table.mw-htmlform-nolabel td.mw-label {
+       width: 1px;
+}
+
+tr.mw-htmlform-vertical-label td.mw-label {
+       text-align: left !important;
+}
+
+.mw-htmlform-invalid-input td.mw-input input {
+       border-color: red;
+}
+
+.mw-htmlform-flatlist div.mw-htmlform-flatlist-item {
+       display: inline;
+       margin-right: 1em;
+       white-space: nowrap;
+}
+
+.mw-htmlform-matrix td {
+       padding-left: 0.5em;
+       padding-right: 0.5em;
+}
+
+input#wpSummary {
+       width: 80%;
+       margin-bottom: 1em;
+}
+
+/**
+ * Image captions.
+ *
+ * This is only meant to provide the most basic of styles, visual settings shouldn't be added here.
+ */
+
+/* @noflip */
+.mw-content-ltr .thumbcaption {
+       text-align: left;
+}
+
+/* @noflip */
+.mw-content-ltr .magnify {
+       float: right;
+}
+
+/* @noflip */
+.mw-content-rtl .thumbcaption {
+       text-align: right;
+}
+
+/* @noflip */
+.mw-content-rtl .magnify {
+       float: left;
+}
+
+/**
+ * Categories
+ */
+#catlinks {
+       /**
+        * Overrides text justification (user preference)
+        * See bug 31990
+        */
+       text-align: left;
+}
+
+.catlinks ul {
+       display: inline;
+       margin: 0;
+       padding: 0;
+       list-style: none;
+       list-style-type: none;
+       list-style-image: none;
+       vertical-align: middle !ie;
+}
+
+.catlinks li {
+       display: inline-block;
+       line-height: 1.25em;
+       border-left: 1px solid #AAA;
+       margin: 0.125em 0;
+       padding: 0 0.5em;
+       zoom: 1;
+       display: inline !ie;
+}
+
+.catlinks li:first-child {
+       padding-left: 0.25em;
+       border-left: none;
+}
+
+/* (bug 5346) make category redirects italic */
+.catlinks li a.mw-redirect {
+       font-style: italic;
+}
+
+/**
+ * Hidden categories
+ */
+.mw-hidden-cats-hidden {
+       display: none;
+}
+
+.catlinks-allhidden {
+       display: none;
+}
+
+/**
+ * Convenience links to edit block, delete and protect reasons
+ * and upload licenses
+ */
+p.mw-ipb-conveniencelinks,
+p.mw-protect-editreasons,
+p.mw-filedelete-editreasons,
+p.mw-delete-editreasons,
+p.mw-revdel-editreasons,
+p.mw-upload-editlicenses {
+       font-size: 90%;
+       text-align: right;
+}
+
+/* Page history styling */
+
+/* The auto-generated edit comments */
+.autocomment {
+       color: gray;
+}
+
+#pagehistory .history-user {
+       margin-left: 0.4em;
+       margin-right: 0.2em;
+}
+
+#pagehistory span.minor {
+       font-weight: bold;
+}
+
+#pagehistory li {
+       border: 1px solid white;
+}
+
+#pagehistory li.selected {
+       background-color: #f9f9f9;
+       border: 1px dashed #aaa;
+}
+
+.mw-history-revisiondelete-button, #mw-fileduplicatesearch-icon {
+       float: right;
+}
+
+/** Generic minor/bot/newpage styling (recent changes) */
+.newpage,
+.minoredit,
+.botedit {
+       font-weight: bold;
+}
+
+#shared-image-dup,
+#shared-image-conflict {
+       font-style: italic;
+}
+
+/**
+ * Recreating deleted page warning
+ * Reupload file warning
+ * Page protection warning
+ * incl. log entries for these warnings
+ */
+div.mw-warning-with-logexcerpt {
+       padding: 3px;
+       margin-bottom: 3px;
+       border: 2px solid #2F6FAB;
+       clear: both;
+}
+
+div.mw-warning-with-logexcerpt ul li {
+       font-size: 90%;
+}
+
+/* (show/hide) revision deletion links */
+span.mw-revdelundel-link,
+strong.mw-revdelundel-link {
+       font-size: 90%;
+}
+
+span.mw-revdelundel-hidden,
+input.mw-revdelundel-hidden {
+       visibility: hidden;
+}
+
+td.mw-revdel-checkbox,
+th.mw-revdel-checkbox {
+       padding-right: 10px;
+       text-align: center;
+}
+
+/* red links; see bug 36276 */
+a.new {
+       color: #BA0000;
+}
+
+/* feed links */
+a.feedlink {
+       /* SVG support using a transparent gradient to guarantee cross-browser
+        * compatibility (browsers able to understand gradient syntax support also SVG).
+        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
+       background-image: url(images/feed-icon.png);
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/feed-icon.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/feed-icon.svg);
+       background-position: center left;
+       background-repeat: no-repeat;
+       background-size: 12px 12px;
+       padding-left: 16px;
+}
+
+/* Plainlinks - this can be used to switch
+ * off special external link styling */
+.plainlinks a.external {
+       background: none !important;
+       padding: 0 !important;
+}
+
+/* External URLs should always be treated as LTR (bug 4330) */
+/* @noflip */ .rtl a.external.free,
+.rtl a.external.autonumber {
+       direction: ltr;
+       unicode-bidi: embed;
+}
+
+/**
+ * wikitable class for skinning normal tables
+ * keep in sync with commonPrint.css
+ */
+table.wikitable {
+       margin: 1em 0;
+       background-color: #f9f9f9;
+       border: 1px #aaa solid;
+       border-collapse: collapse;
+       color: black;
+}
+
+table.wikitable > tr > th,
+table.wikitable > tr > td,
+table.wikitable > * > tr > th,
+table.wikitable > * > tr > td {
+       border: 1px #aaa solid;
+       padding: 0.2em;
+}
+
+table.wikitable > tr > th,
+table.wikitable > * > tr > th {
+       background-color: #f2f2f2;
+       text-align: center;
+}
+
+table.wikitable > caption {
+       font-weight: bold;
+}
+
+/* success and error messages */
+.error,
+.warning,
+.success {
+       font-size: larger;
+}
+
+.error {
+       color: #cc0000;
+}
+
+.warning {
+       color: #705000;
+}
+
+.success {
+       color: #009000;
+}
+
+.errorbox,
+.warningbox,
+.successbox {
+       border: 1px solid;
+       padding: .5em 1em;
+       margin-bottom: 1em;
+       display: -moz-inline-block;
+       display: inline-block;
+       zoom: 1;
+       *display: inline;
+}
+
+.errorbox h2,
+.warningbox h2,
+.successbox h2 {
+       font-size: 1em;
+       color: inherit;
+       font-weight: bold;
+       display: inline;
+       margin: 0 .5em 0 0;
+       border: none;
+}
+
+.errorbox {
+       color: #cc0000;
+       border-color: #fac5c5;
+       background-color: #fae3e3;
+}
+
+.warningbox {
+       color: #705000;
+       border-color: #fde29b;
+       background-color: #fdf1d1;
+}
+
+.successbox {
+       color: #009000;
+       border-color: #b7fdb5;
+       background-color: #e1fddf;
+}
+
+/* general info/warning box for SP */
+.mw-infobox {
+       border: 2px solid #ff7f00;
+       margin: 0.5em;
+       clear: left;
+       overflow: hidden;
+}
+
+.mw-infobox-left {
+       margin: 7px;
+       float: left;
+       width: 35px;
+}
+
+.mw-infobox-right {
+       margin: 0.5em 0.5em 0.5em 49px;
+}
+
+/* Note on preview page */
+.previewnote {
+       color: #c00;
+       margin-bottom: 1em;
+}
+
+.previewnote p {
+       text-indent: 3em;
+       margin: 0.8em 0;
+}
+
+.visualClear {
+       clear: both;
+}
+
+/**
+ * Data table style
+ *
+ * Transparent table with suddle borders
+ * and blue row-highlighting.
+ */
+.mw-datatable {
+       border-collapse: collapse;
+}
+
+.mw-datatable,
+.mw-datatable td,
+.mw-datatable th {
+       border: 1px solid #aaaaaa;
+       padding: 0 0.15em 0 0.15em;
+}
+
+.mw-datatable th {
+       background-color: #ddddff;
+}
+
+.mw-datatable td {
+       background-color: #ffffff;
+}
+
+.mw-datatable tr:hover td {
+       background-color: #eeeeff;
+}
+
+/* filetoc */
+ul#filetoc {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+       margin-bottom: 0.5em;
+       margin-left: 0;
+       margin-right: 0;
+}
+
+#filetoc li {
+       display: inline;
+       list-style-type: none;
+       padding-right: 2em;
+}
+
+/* Classes for Exif data display */
+table.mw_metadata {
+       font-size: 0.8em;
+       margin-left: 0.5em;
+       margin-bottom: 0.5em;
+       width: 400px;
+}
+
+table.mw_metadata caption {
+       font-weight: bold;
+}
+
+table.mw_metadata th {
+       font-weight: normal;
+}
+
+table.mw_metadata td {
+       padding: 0.1em;
+}
+
+table.mw_metadata {
+       border: none;
+       border-collapse: collapse;
+}
+
+table.mw_metadata td,
+table.mw_metadata th {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       padding-left: 5px;
+       padding-right: 5px;
+}
+
+table.mw_metadata th {
+       background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+       background-color: #fcfcfc;
+}
+
+table.mw_metadata ul.metadata-langlist {
+       list-style-type: none;
+       list-style-image: none;
+       padding-right: 5px;
+       padding-left: 5px;
+       margin: 0;
+}
+
+/* Correct directionality when page dir is different from site/user dir */
+.mw-content-ltr ul,
+.mw-content-rtl .mw-content-ltr ul {
+       /* @noflip */
+       margin: 0.3em 0 0 1.6em;
+       padding: 0;
+}
+
+.mw-content-rtl ul,
+.mw-content-ltr .mw-content-rtl ul {
+       /* @noflip */
+       margin: 0.3em 1.6em 0 0;
+       padding: 0;
+}
+
+.mw-content-ltr ol,
+.mw-content-rtl .mw-content-ltr ol {
+       /* @noflip */
+       margin: 0.3em 0 0 3.2em;
+       padding: 0;
+}
+
+.mw-content-rtl ol,
+.mw-content-ltr .mw-content-rtl ol {
+       /* @noflip */
+       margin: 0.3em 3.2em 0 0;
+       padding: 0;
+}
+
+/* @noflip */
+.mw-content-ltr dd,
+.mw-content-rtl .mw-content-ltr dd {
+       margin-left: 1.6em;
+       margin-right: 0;
+}
+
+/* @noflip */
+.mw-content-rtl dd,
+.mw-content-ltr .mw-content-rtl dd {
+       margin-right: 1.6em;
+       margin-left: 0;
+}
+
+/* Galleries */
+/* These display attributes look nonsensical, but are needed to support IE and FF2 */
+/* Don't forget to update commonPrint.css */
+li.gallerybox {
+       vertical-align: top;
+       display: -moz-inline-box;
+       display: inline-block;
+}
+
+ul.gallery,
+li.gallerybox {
+       zoom: 1;
+       *display: inline;
+}
+
+ul.gallery {
+       margin: 2px;
+       padding: 2px;
+       display: block;
+}
+
+li.gallerycaption {
+       font-weight: bold;
+       text-align: center;
+       display: block;
+       word-wrap: break-word;
+}
+
+li.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       background-color: #f9f9f9;
+       margin: 2px;
+}
+
+li.gallerybox div.thumb img {
+       display: block;
+       margin: 0 auto;
+}
+
+div.gallerytext {
+       overflow: hidden;
+       font-size: 94%;
+       padding: 2px 4px;
+       word-wrap: break-word;
+}
+
+/* new gallery stuff */
+ul.mw-gallery-nolines li.gallerybox div.thumb {
+       background-color: transparent;
+       border: none;
+}
+
+ul.mw-gallery-nolines li.gallerybox div.gallerytext {
+       text-align: center;
+}
+
+/* height constrained gallery */
+
+ul.mw-gallery-packed li.gallerybox div.thumb,
+ul.mw-gallery-packed-overlay li.gallerybox div.thumb,
+ul.mw-gallery-packed-hover li.gallerybox div.thumb {
+       background-color: transparent;
+       border: none;
+}
+
+ul.mw-gallery-packed li.gallerybox div.thumb img,
+ul.mw-gallery-packed-overlay li.gallerybox div.thumb img,
+ul.mw-gallery-packed-hover li.gallerybox div.thumb img {
+       margin: 0 auto;
+}
+
+ul.mw-gallery-packed-hover li.gallerybox,
+ul.mw-gallery-packed-overlay li.gallerybox {
+       position: relative;
+}
+
+ul.mw-gallery-packed-hover div.gallerytextwrapper {
+       overflow: hidden;
+       height: 0;
+}
+
+ul.mw-gallery-packed-hover li.gallerybox:hover div.gallerytextwrapper,
+ul.mw-gallery-packed-overlay li.gallerybox div.gallerytextwrapper,
+ul.mw-gallery-packed-hover li.gallerybox.mw-gallery-focused div.gallerytextwrapper {
+       position: absolute;
+       background: white;
+       background: rgba(255, 255, 255, 0.8);
+       padding: 5px 10px;
+       bottom: 0;
+       left: 0; /* Needed for IE */
+       height: auto;
+       font-weight: bold;
+       margin: 2px; /* correspond to style on div.thumb */
+}
+
+ul.mw-gallery-packed-hover,
+ul.mw-gallery-packed-overlay,
+ul.mw-gallery-packed {
+       text-align: center;
+}
+
+.mw-ajax-loader {
+       /* @embed */
+       background-image: url(images/ajax-loader.gif);
+       background-position: center center;
+       background-repeat: no-repeat;
+       padding: 16px;
+       position: relative;
+       top: -16px;
+}
+
+.mw-small-spinner {
+       padding: 10px !important;
+       margin-right: 0.6em;
+       /* @embed */
+       background-image: url(images/spinner.gif);
+       background-position: center center;
+       background-repeat: no-repeat;
+}
+
+/* Language specific height correction for titles. Ref Bug 29405 and Bug 30809 */
+/* Languages like hi or ml require slightly more vertical space to show diacritics properly */
+h1:lang(anp),
+h1:lang(as),
+h1:lang(bh), /* Macrolanguage, used on bh.wikipedia.org, should be removed one day */
+h1:lang(bho),
+h1:lang(bn),
+h1:lang(gu),
+h1:lang(hi),
+h1:lang(kn),
+h1:lang(ks),
+h1:lang(ml),
+h1:lang(mr),
+h1:lang(my),
+h1:lang(mai),
+h1:lang(ne),
+h1:lang(new),
+h1:lang(or),
+h1:lang(pa),
+h1:lang(pi),
+h1:lang(sa),
+h1:lang(ta),
+h1:lang(te) {
+       line-height: 1.6em !important;
+}
+
+h2:lang(anp), h3:lang(anp), h4:lang(anp), h5:lang(anp), h6:lang(anp),
+h2:lang(as), h3:lang(as), h4:lang(as), h5:lang(as), h6:lang(as),
+h2:lang(bho), h3:lang(bho), h4:lang(bho), h5:lang(bho), h6:lang(bho),
+h2:lang(bh), h3:lang(bh), h4:lang(bh), h5:lang(bh), h6:lang(bh),
+h2:lang(bn), h3:lang(bn), h4:lang(bn), h5:lang(bn), h6:lang(bn),
+h2:lang(gu), h3:lang(gu), h4:lang(gu), h5:lang(gu), h6:lang(gu),
+h2:lang(hi), h3:lang(hi), h4:lang(hi), h5:lang(hi), h6:lang(hi),
+h2:lang(kn), h3:lang(kn), h4:lang(kn), h5:lang(kn), h6:lang(kn),
+h2:lang(ks), h3:lang(ks), h4:lang(ks), h5:lang(ks), h6:lang(ks),
+h2:lang(ml), h3:lang(ml), h4:lang(ml), h5:lang(ml), h6:lang(ml),
+h2:lang(mr), h3:lang(mr), h4:lang(mr), h5:lang(mr), h6:lang(mr),
+h2:lang(my), h3:lang(my), h4:lang(my), h5:lang(my), h6:lang(my),
+h2:lang(mai), h3:lang(mai), h4:lang(mai), h5:lang(mai), h6:lang(mai),
+h2:lang(ne), h3:lang(ne), h4:lang(ne), h5:lang(ne), h6:lang(ne),
+h2:lang(new), h3:lang(new), h4:lang(new), h5:lang(new), h6:lang(new),
+h2:lang(or), h3:lang(or), h4:lang(or), h5:lang(or), h6:lang(or),
+h2:lang(pa), h3:lang(pa), h4:lang(pa), h5:lang(pa), h6:lang(pa),
+h2:lang(pi), h3:lang(pi), h4:lang(pi), h5:lang(pi), h6:lang(pi),
+h2:lang(sa), h3:lang(sa), h4:lang(sa), h5:lang(sa), h6:lang(sa),
+h2:lang(ta), h3:lang(ta), h4:lang(ta), h5:lang(ta), h6:lang(ta),
+h2:lang(te), h3:lang(te), h4:lang(te), h5:lang(te), h6:lang(te) {
+       line-height: 1.2em;
+}
+
+/* Localised ordered list numbering for some languages */
+ol:lang(bcc) li,
+ol:lang(bqi) li,
+ol:lang(fa) li,
+ol:lang(glk) li,
+ol:lang(kk-arab) li,
+ol:lang(mzn) li {
+       list-style-type: -moz-persian;
+       list-style-type: persian;
+}
+
+ol:lang(ckb) li {
+       list-style-type: -moz-arabic-indic;
+       list-style-type: arabic-indic;
+}
+
+ol:lang(hi) li,
+ol:lang(mr) li {
+       list-style-type: -moz-devanagari;
+       list-style-type: devanagari;
+}
+
+ol:lang(as) li,
+ol:lang(bn) li {
+       list-style-type: -moz-bengali;
+       list-style-type: bengali;
+}
+
+ol:lang(or) li {
+       list-style-type: -moz-oriya;
+       list-style-type: oriya;
+}
+
+#toc ul, .toc ul {
+       margin: .3em 0;
+}
+
+/* Correct directionality when page dir is different from site/user dir */
+/* @noflip */ .mw-content-ltr .toc ul,
+.mw-content-ltr #toc ul,
+.mw-content-rtl .mw-content-ltr .toc ul,
+.mw-content-rtl .mw-content-ltr #toc ul {
+       text-align: left;
+}
+
+/* @noflip */ .mw-content-rtl .toc ul,
+.mw-content-rtl #toc ul,
+.mw-content-ltr .mw-content-rtl .toc ul,
+.mw-content-ltr .mw-content-rtl #toc ul {
+       text-align: right;
+}
+
+/* @noflip */ .mw-content-ltr .toc ul ul,
+.mw-content-ltr #toc ul ul,
+.mw-content-rtl .mw-content-ltr .toc ul ul,
+.mw-content-rtl .mw-content-ltr #toc ul ul {
+       margin: 0 0 0 2em;
+}
+
+/* @noflip */ .mw-content-rtl .toc ul ul,
+.mw-content-rtl #toc ul ul,
+.mw-content-ltr .mw-content-rtl .toc ul ul,
+.mw-content-ltr .mw-content-rtl #toc ul ul {
+       margin: 0 2em 0 0;
+}
+
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+       direction: ltr;
+}
+
+/* tooltip styles */
+.mw-help-field-hint {
+       display: none;
+       margin-left: 2px;
+       margin-bottom: -8px;
+       padding: 0 0 0 15px;
+       /* @embed */
+       background-image: url(images/help-question.gif);
+       background-position: left center;
+       background-repeat: no-repeat;
+       cursor: pointer;
+       font-size: .8em;
+       text-decoration: underline;
+       color: #0645ad;
+}
+
+.mw-help-field-hint:hover {
+       /* @embed */
+       background-image: url(images/help-question-hover.gif);
+}
+
+.mw-help-field-data {
+       display: block;
+       background-color: #d6f3ff;
+       padding: 5px 8px 4px 8px;
+       border: 1px solid #5dc9f4;
+       margin-left: 20px;
+}
+
+#mw-clearyourcache,
+#mw-sitecsspreview,
+#mw-sitejspreview,
+#mw-usercsspreview,
+#mw-userjspreview {
+       direction: ltr;
+       unicode-bidi: embed;
+}
+
+/* Correct user & content directionality when viewing a diff */
+.diff-currentversion-title,
+.diff {
+       direction: ltr;
+       unicode-bidi: embed;
+}
+
+/* @noflip */ .diff-contentalign-right td {
+       direction: rtl;
+       unicode-bidi: embed;
+}
+
+/* @noflip */ .diff-contentalign-left td {
+       direction: ltr;
+       unicode-bidi: embed;
+}
+
+.diff-multi,
+.diff-otitle,
+.diff-ntitle,
+.diff-lineno {
+       direction: ltr !important;
+       unicode-bidi: embed;
+}
+
+#mw-revision-info,
+#mw-revision-info-current,
+#mw-revision-nav {
+       direction: ltr;
+       display: inline;
+}
+
+/* Images */
+
+/* @noflip */ div.tright,
+div.floatright,
+table.floatright {
+       clear: right;
+       float: right;
+}
+
+/* @noflip */ div.tleft,
+div.floatleft,
+table.floatleft {
+       float: left;
+       clear: left;
+}
+
+div.floatright,
+table.floatright,
+div.floatleft,
+table.floatleft {
+       position: relative;
+}
+
+/* bug 12205 */
+#mw-credits a {
+       unicode-bidi: embed;
+}
+
+/* Accessibility */
+.mw-jump,
+#jump-to-nav {
+       overflow: hidden;
+       height: 0;
+       zoom: 1; /* http://webaim.org/techniques/skipnav/#iequirk */
+}
+
+/* Print footer should be hidden by default in screen. */
+.printfooter {
+       display: none;
+}
+
+/* For developers */
+.xdebug-error {
+       position: absolute;
+       z-index: 99;
+}
+
+.mw-editsection,
+.toctoggle,
+#jump-to-nav {
+       -moz-user-select: none;
+       -webkit-user-select: none;
+       -ms-user-select: none;
+       user-select: none;
+}
+
+/* Display editsection links smaller and next to headings */
+.mw-editsection,
+.mw-editsection-like {
+       font-size: small;
+       font-weight: normal;
+       margin-left: 1em;
+       vertical-align: baseline;
+       /* Reset line-height; headings tend to have it set to larger values */
+       line-height: 1em;
+       /* As .mw-editsection is a <span> (inline element), it is treated as part */
+       /* of the heading content when selecting text by multiple clicks and thus */
+       /* selected together with heading content, despite the user-select: none; */
+       /* rule set above. This enforces non-selection without changing the look. */
+       display: inline-block;
+}
+
+/* Correct directionality when page dir is different from site/user dir */
+/* @noflip */
+.mw-content-ltr .mw-editsection,
+.mw-content-rtl .mw-content-ltr .mw-editsection {
+       margin-left: 1em;
+}
+
+/* @noflip */
+.mw-content-rtl .mw-editsection,
+.mw-content-ltr .mw-content-rtl .mw-editsection {
+       margin-right: 1em;
+}
+
+/* Prevent citations and subscripts from interfering with the line-height */
+sup,
+sub {
+       line-height: 1;
+}
diff --git a/resources/src/mediawiki.legacy/wikibits.js b/resources/src/mediawiki.legacy/wikibits.js
new file mode 100644 (file)
index 0000000..a403996
--- /dev/null
@@ -0,0 +1,204 @@
+/**
+ * MediaWiki legacy wikibits
+ */
+( function ( mw, $ ) {
+       var msg,
+               win = window,
+               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 ) {
+               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;
+};
+
+}( mediaWiki, jQuery ) );
index 8c28884..4a87b74 100644 (file)
  * See <http://lesscss.org/#-mixins> for more information about how to write mixins.
  */
 
-.background-image(@url) when (embeddable(@url)) {
-       background-image: embed(@url);
-       background-image: url(@url)!ie;
+.background-image(@url) {
+       background-image: e('/* @embed */') url(@url);
 }
 
-.background-image(@url) when not (embeddable(@url)) {
-       background-image: url(@url);
+.background-size(@width, @height) {
+       // Vendor prefix for certain older opera browsers e.g. nintendo ds
+       -o-background-size: @width @height;
+       // Vendor prefix is added to support Android 2
+       -webkit-background-size: @width @height;
+       background-size: @width @height;
 }
 
+
 .vertical-gradient(@startColor: gray, @endColor: white, @startPos: 0, @endPos: 100%) {
        background-color: @endColor;
        background-image: -moz-linear-gradient( top, @startColor @startPos, @endColor @endPos ); // Firefox 3.6+
  * We do not embed the fallback image on the assumption that the gain for old browsers
  * is not worth the harm done to modern ones.
  */
-.background-image-svg(@svg, @fallback) when (embeddable(@svg)) {
-       background-image: url(@fallback);
-       /* We don't need the !ie hack because this old IE uses the fallback already */
-       background-image: -webkit-linear-gradient(transparent, transparent), embed(@svg);
-       background-image: linear-gradient(transparent, transparent), embed(@svg);
-}
-
-.background-image-svg(@svg, @fallback) when not (embeddable(@svg)) {
+.background-image-svg(@svg, @fallback) {
        background-image: url(@fallback);
-       background-image: -webkit-linear-gradient(transparent, transparent), url(@svg);
-       background-image: linear-gradient(transparent, transparent), url(@svg);
-}
-
-/* Caution: Does not support localisable images */
-.list-style-image(@url) when (embeddable(@url)) {
-       list-style-image: embed(@url);
-       list-style-image: url(@url)!ie;
+       background-image: -webkit-linear-gradient(transparent, transparent), e('/* @embed */') url(@svg);
+       background-image: linear-gradient(transparent, transparent), e('/* @embed */') url(@svg);
 }
 
-.list-style-image(@url) when not (embeddable(@url)) {
-       list-style-image: url(@url);
+.list-style-image(@url) {
+       list-style-image: e('/* @embed */') url(@url);
 }
 
 .transition(@value) {
index 17bf683..e91302b 100644 (file)
@@ -57,3 +57,6 @@
 @colorGrayLight: #ccc;
 @colorGrayLighter: #ddd;
 @colorGrayLightest: #eee;
+
+// Global border radius to be used to buttons and inputs
+@borderRadius: 2px;
index 83c2524..31c8fef 100644 (file)
@@ -1,12 +1,13 @@
-/* This is CLDRPluralRuleParser v1.1, ported to MediaWiki ResourceLoader */
+/* This is CLDRPluralRuleParser v1.1.3, ported to MediaWiki ResourceLoader */
 
 /**
 * CLDRPluralRuleParser.js
 * A parser engine for CLDR plural rules.
 *
-* Copyright 2012 GPLV3+, Santhosh Thottingal
+* Copyright 2012-2014 Santhosh Thottingal and other contributors
+* Released under the MIT license
+* http://opensource.org/licenses/MIT
 *
-* @version 0.1.0-alpha
 * @source https://github.com/santhoshtr/CLDRPluralRuleParser
 * @author Santhosh Thottingal <santhosh.thottingal@gmail.com>
 * @author Timo Tijhof
@@ -22,6 +23,8 @@
  */
 
 function pluralRuleParser(rule, number) {
+       'use strict';
+
        /*
        Syntax: see http://unicode.org/reports/tr35/#Language_Plural_Rules
        -----------------------------------------------------------------
@@ -44,14 +47,15 @@ function pluralRuleParser(rule, number) {
        decimalValue  = value ('.' value)?
        */
 
-       // we don't evaluate the samples section of the rule. Ignore it.
+       // We don't evaluate the samples section of the rule. Ignore it.
        rule = rule.split('@')[0].replace(/^\s*/, '').replace(/\s*$/, '');
 
        if (!rule.length) {
-               // empty rule or 'other' rule.
+               // Empty rule or 'other' rule.
                return true;
        }
-       // Indicates current position in the rule as we parse through it.
+
+       // Indicates the current position in the rule as we parse through it.
        // Shared among all parsing functions below.
        var pos = 0,
                operand,
@@ -87,15 +91,18 @@ function pluralRuleParser(rule, number) {
        debug('pluralRuleParser', rule, number);
 
        // Try parsers until one works, if none work return null
-
        function choice(parserSyntax) {
                return function() {
-                       for (var i = 0; i < parserSyntax.length; i++) {
-                               var result = parserSyntax[i]();
+                       var i, result;
+
+                       for (i = 0; i < parserSyntax.length; i++) {
+                               result = parserSyntax[i]();
+
                                if (result !== null) {
                                        return result;
                                }
                        }
+
                        return null;
                };
        }
@@ -103,46 +110,56 @@ function pluralRuleParser(rule, number) {
        // Try several parserSyntax-es in a row.
        // All must succeed; otherwise, return null.
        // This is the only eager one.
-
        function sequence(parserSyntax) {
-               var originalPos = pos;
-               var result = [];
-               for (var i = 0; i < parserSyntax.length; i++) {
-                       var res = parserSyntax[i]();
-                       if (res === null) {
+               var i, parserRes,
+                       originalPos = pos,
+                       result = [];
+
+               for (i = 0; i < parserSyntax.length; i++) {
+                       parserRes = parserSyntax[i]();
+
+                       if (parserRes === null) {
                                pos = originalPos;
+
                                return null;
                        }
-                       result.push(res);
+
+                       result.push(parserRes);
                }
+
                return result;
        }
 
        // Run the same parser over and over until it fails.
        // Must succeed a minimum of n times; otherwise, return null.
-
        function nOrMore(n, p) {
                return function() {
-                       var originalPos = pos;
-                       var result = [];
-                       var parsed = p();
+                       var originalPos = pos,
+                               result = [],
+                               parsed = p();
+
                        while (parsed !== null) {
                                result.push(parsed);
                                parsed = p();
                        }
+
                        if (result.length < n) {
                                pos = originalPos;
+
                                return null;
                        }
+
                        return result;
                };
        }
 
-       // Helpers -- just make parserSyntax out of simpler JS builtin types
+       // Helpers - just make parserSyntax out of simpler JS builtin types
        function makeStringParser(s) {
                var len = s.length;
+
                return function() {
                        var result = null;
+
                        if (rule.substr(pos, len) === s) {
                                result = s;
                                pos += len;
@@ -155,95 +172,122 @@ function pluralRuleParser(rule, number) {
        function makeRegexParser(regex) {
                return function() {
                        var matches = rule.substr(pos).match(regex);
+
                        if (matches === null) {
                                return null;
                        }
+
                        pos += matches[0].length;
+
                        return matches[0];
                };
        }
 
-       /*
-        * integer digits of n.
+       /**
+        * Integer digits of n.
         */
        function i() {
                var result = _i_();
+
                if (result === null) {
                        debug(' -- failed i', parseInt(number, 10));
+
                        return result;
                }
+
                result = parseInt(number, 10);
                debug(' -- passed i ', result);
+
                return result;
        }
 
-       /*
-        * absolute value of the source number (integer and decimals).
+       /**
+        * Absolute value of the source number (integer and decimals).
         */
        function n() {
                var result = _n_();
+
                if (result === null) {
                        debug(' -- failed n ', number);
+
                        return result;
                }
+
                result = parseFloat(number, 10);
                debug(' -- passed n ', result);
+
                return result;
        }
 
-       /*
-        * visible fractional digits in n, with trailing zeros.
+       /**
+        * Visible fractional digits in n, with trailing zeros.
         */
        function f() {
                var result = _f_();
+
                if (result === null) {
                        debug(' -- failed f ', number);
+
                        return result;
                }
+
                result = (number + '.').split('.')[1] || 0;
                debug(' -- passed f ', result);
+
                return result;
        }
 
-       /*
-        * visible fractional digits in n, without trailing zeros.
+       /**
+        * Visible fractional digits in n, without trailing zeros.
         */
        function t() {
                var result = _t_();
+
                if (result === null) {
                        debug(' -- failed t ', number);
+
                        return result;
                }
+
                result = (number + '.').split('.')[1].replace(/0$/, '') || 0;
                debug(' -- passed t ', result);
+
                return result;
        }
 
-       /*
-        * number of visible fraction digits in n, with trailing zeros.
+       /**
+        * Number of visible fraction digits in n, with trailing zeros.
         */
        function v() {
                var result = _v_();
+
                if (result === null) {
                        debug(' -- failed v ', number);
+
                        return result;
                }
+
                result = (number + '.').split('.')[1].length || 0;
                debug(' -- passed v ', result);
+
                return result;
        }
 
-       /*
-        * number of visible fraction digits in n, without trailing zeros.
+       /**
+        * Number of visible fraction digits in n, without trailing zeros.
         */
        function w() {
                var result = _w_();
+
                if (result === null) {
                        debug(' -- failed w ', number);
+
                        return result;
                }
+
                result = (number + '.').split('.')[1].replace(/0$/, '').length || 0;
                debug(' -- passed w ', result);
+
                return result;
        }
 
@@ -254,19 +298,27 @@ function pluralRuleParser(rule, number) {
        expression = choice([mod, operand]);
 
        function mod() {
-               var result = sequence([operand, whitespace, choice([_mod_, _percent_]), whitespace, value]);
+               var result = sequence(
+                       [operand, whitespace, choice([_mod_, _percent_]), whitespace, value]
+               );
+
                if (result === null) {
                        debug(' -- failed mod');
+
                        return null;
                }
+
                debug(' -- passed ' + parseInt(result[0], 10) + ' ' + result[2] + ' ' + parseInt(result[4], 10));
+
                return parseInt(result[0], 10) % parseInt(result[4], 10);
        }
 
        function not() {
                var result = sequence([whitespace, _not_]);
+
                if (result === null) {
                        debug(' -- failed not');
+
                        return null;
                }
 
@@ -276,120 +328,170 @@ function pluralRuleParser(rule, number) {
        // is_relation   = expr 'is' ('not')? value
        function is() {
                var result = sequence([expression, whitespace, choice([_is_]), whitespace, value]);
+
                if (result !== null) {
                        debug(' -- passed is : ' + result[0] + ' == ' + parseInt(result[4], 10));
+
                        return result[0] === parseInt(result[4], 10);
                }
+
                debug(' -- failed is');
+
                return null;
        }
 
        // is_relation   = expr 'is' ('not')? value
        function isnot() {
-               var result = sequence([expression, whitespace, choice([_isnot_, _isnot_sign_]), whitespace, value]);
+               var result = sequence(
+                       [expression, whitespace, choice([_isnot_, _isnot_sign_]), whitespace, value]
+               );
+
                if (result !== null) {
                        debug(' -- passed isnot: ' + result[0] + ' != ' + parseInt(result[4], 10));
+
                        return result[0] !== parseInt(result[4], 10);
                }
+
                debug(' -- failed isnot');
+
                return null;
        }
 
        function not_in() {
-               var result = sequence([expression, whitespace, _isnot_sign_, whitespace, rangeList]);
+               var i, range_list,
+                       result = sequence([expression, whitespace, _isnot_sign_, whitespace, rangeList]);
+
                if (result !== null) {
                        debug(' -- passed not_in: ' + result[0] + ' != ' + result[4]);
-                       var range_list = result[4];
-                       for (var i = 0; i < range_list.length; i++) {
+                       range_list = result[4];
+
+                       for (i = 0; i < range_list.length; i++) {
                                if (parseInt(range_list[i], 10) === parseInt(result[0], 10)) {
                                        return false;
                                }
                        }
+
                        return true;
                }
+
                debug(' -- failed not_in');
+
                return null;
        }
 
        // range_list    = (range | value) (',' range_list)*
        function rangeList() {
-               var result = sequence([choice([range, value]), nOrMore(0, rangeTail)]);
-               var resultList = [];
+               var result = sequence([choice([range, value]), nOrMore(0, rangeTail)]),
+                       resultList = [];
+
                if (result !== null) {
                        resultList = resultList.concat(result[0]);
+
                        if (result[1][0]) {
                                resultList = resultList.concat(result[1][0]);
                        }
+
                        return resultList;
                }
+
                debug(' -- failed rangeList');
+
                return null;
        }
 
        function rangeTail() {
                // ',' range_list
                var result = sequence([_comma_, rangeList]);
+
                if (result !== null) {
                        return result[1];
                }
+
                debug(' -- failed rangeTail');
+
                return null;
        }
 
        // range         = value'..'value
-
        function range() {
-               var i;
-               var result = sequence([value, _range_, value]);
+               var i, array, left, right,
+                       result = sequence([value, _range_, value]);
+
                if (result !== null) {
                        debug(' -- passed range');
-                       var array = [];
-                       var left = parseInt(result[0], 10);
-                       var right = parseInt(result[2], 10);
+
+                       array = [];
+                       left = parseInt(result[0], 10);
+                       right = parseInt(result[2], 10);
+
                        for (i = left; i <= right; i++) {
                                array.push(i);
                        }
+
                        return array;
                }
+
                debug(' -- failed range');
+
                return null;
        }
 
        function _in() {
+               var result, range_list, i;
+
                // in_relation   = expr ('not')? 'in' range_list
-               var result = sequence([expression, nOrMore(0, not), whitespace, choice([_in_, _equal_]), whitespace, rangeList]);
+               result = sequence(
+                       [expression, nOrMore(0, not), whitespace, choice([_in_, _equal_]), whitespace, rangeList]
+               );
+
                if (result !== null) {
                        debug(' -- passed _in:' + result);
-                       var range_list = result[5];
-                       for (var i = 0; i < range_list.length; i++) {
+
+                       range_list = result[5];
+
+                       for (i = 0; i < range_list.length; i++) {
                                if (parseInt(range_list[i], 10) === parseInt(result[0], 10)) {
                                        return (result[1][0] !== 'not');
                                }
                        }
+
                        return (result[1][0] === 'not');
                }
+
                debug(' -- failed _in ');
+
                return null;
        }
 
-       /*
-        * The difference between in and within is that in only includes integers in the specified range,
-        * while within includes all values.
+       /**
+        * The difference between "in" and "within" is that
+        * "in" only includes integers in the specified range,
+        * while "within" includes all values.
         */
-
        function within() {
+               var range_list, result;
+
                // within_relation = expr ('not')? 'within' range_list
-               var result = sequence([expression, nOrMore(0, not), whitespace, _within_, whitespace, rangeList]);
+               result = sequence(
+                       [expression, nOrMore(0, not), whitespace, _within_, whitespace, rangeList]
+               );
+
                if (result !== null) {
                        debug(' -- passed within');
-                       var range_list = result[5];
+
+                       range_list = result[5];
+
                        if ((result[0] >= parseInt(range_list[0], 10)) &&
                                (result[0] < parseInt(range_list[range_list.length - 1], 10))) {
+
                                return (result[1][0] !== 'not');
                        }
+
                        return (result[1][0] === 'not');
                }
+
                debug(' -- failed within ');
+
                return null;
        }
 
@@ -398,65 +500,83 @@ function pluralRuleParser(rule, number) {
 
        // and_condition = relation ('and' relation)*
        function and() {
-               var result = sequence([relation, nOrMore(0, andTail)]);
+               var i,
+                       result = sequence([relation, nOrMore(0, andTail)]);
+
                if (result) {
                        if (!result[0]) {
                                return false;
                        }
-                       for (var i = 0; i < result[1].length; i++) {
+
+                       for (i = 0; i < result[1].length; i++) {
                                if (!result[1][i]) {
                                        return false;
                                }
                        }
+
                        return true;
                }
+
                debug(' -- failed and');
+
                return null;
        }
 
        // ('and' relation)*
        function andTail() {
                var result = sequence([whitespace, _and_, whitespace, relation]);
+
                if (result !== null) {
                        debug(' -- passed andTail' + result);
+
                        return result[3];
                }
+
                debug(' -- failed andTail');
+
                return null;
 
        }
        //  ('or' and_condition)*
        function orTail() {
                var result = sequence([whitespace, _or_, whitespace, and]);
+
                if (result !== null) {
                        debug(' -- passed orTail: ' + result[3]);
+
                        return result[3];
                }
+
                debug(' -- failed orTail');
-               return null;
 
+               return null;
        }
 
        // condition     = and_condition ('or' and_condition)*
        function condition() {
-               var result = sequence([and, nOrMore(0, orTail)]);
+               var i,
+                       result = sequence([and, nOrMore(0, orTail)]);
+
                if (result) {
-                       for (var i = 0; i < result[1].length; i++) {
+                       for (i = 0; i < result[1].length; i++) {
                                if (result[1][i]) {
                                        return true;
                                }
                        }
-                       return result[0];
 
+                       return result[0];
                }
+
                return false;
        }
 
        result = condition();
-       /*
+
+       /**
         * For success, the pos must have gotten to the end of the rule
         * and returned a non-null.
-        * n.b. This is part of language infrastructure, so we do not throw an internationalizable message.
+        * n.b. This is part of language infrastructure,
+        * so we do not throw an internationalizable message.
         */
        if (result === null) {
                throw new Error('Parse error at position ' + pos.toString() + ' for rule: ' + rule);
index 622e818..26c32a5 100644 (file)
@@ -2,23 +2,65 @@
  * Implement AJAX navigation for multi-page images so the user may browse without a full page reload.
  */
 ( function ( mw, $ ) {
-       var jqXhr, $multipageimage, $spinner;
+       var jqXhr, $multipageimage, $spinner,
+               cache = {}, cacheOrder = [];
 
-       /* Fetch the next page and use jQuery to swap the table.multipageimage contents.
+       /* Fetch the next page, caching up to 10 last-loaded pages.
         * @param {string} url
-        * @param {boolean} [hist=false] Whether this is a load triggered by history navigation (if
-        *   true, this function won't push a new history state, for the browser did so already).
+        * @return {jQuery.Promise}
         */
-       function loadPage( url, hist ) {
-               var $tr;
-               if ( jqXhr ) {
+       function fetchPageData( url ) {
+               if ( jqXhr && jqXhr.abort ) {
                        // Prevent race conditions and piling up pending requests
                        jqXhr.abort();
-                       jqXhr = undefined;
                }
+               jqXhr = undefined;
+
+               // Try the cache
+               if ( cache[url] ) {
+                       // Update access freshness
+                       cacheOrder.splice( $.inArray( url, cacheOrder ), 1 );
+                       cacheOrder.push( url );
+                       return $.Deferred().resolve( cache[url] ).promise();
+               }
+
+               // @todo Don't fetch the entire page. Ideally we'd only fetch the content portion or the data
+               // (thumbnail urls) and update the interface manually.
+               jqXhr = $.ajax( url ).then( function ( data ) {
+                       return $( data ).find( 'table.multipageimage' ).contents();
+               } );
 
-               // Add a new spinner if one doesn't already exist
-               if ( !$spinner ) {
+               // Handle cache updates
+               jqXhr.done( function ( $contents ) {
+                       jqXhr = undefined;
+
+                       // Cache the newly loaded page
+                       cache[url] = $contents;
+                       cacheOrder.push( url );
+
+                       // Remove the oldest entry if we're over the limit
+                       if ( cacheOrder.length > 10 ) {
+                               delete cache[ cacheOrder[0] ];
+                               cacheOrder = cacheOrder.slice( 1 );
+                       }
+               } );
+
+               return jqXhr.promise();
+       }
+
+       /* Fetch the next page and use jQuery to swap the table.multipageimage contents.
+        * @param {string} url
+        * @param {boolean} [hist=false] Whether this is a load triggered by history navigation (if
+        *   true, this function won't push a new history state, for the browser did so already).
+        */
+       function switchPage( url, hist ) {
+               var $tr, promise;
+
+               // Start fetching data (might be cached)
+               promise = fetchPageData( url );
+
+               // Add a new spinner if one doesn't already exist and the data is not already ready
+               if ( !$spinner && promise.state() !== 'resolved' ) {
                        $tr = $multipageimage.find( 'tr' );
                        $spinner = $.createSpinner( {
                                size: 'large',
                        $multipageimage.empty().append( $spinner );
                }
 
-               // @todo Don't fetch the entire page. Ideally we'd only fetch the content portion or the data
-               // (thumbnail urls) and update the interface manually.
-               jqXhr = $.ajax( url ).done( function ( data ) {
-                       jqXhr = $spinner = undefined;
+               promise.done( function ( $contents ) {
+                       $spinner = undefined;
 
                        // Replace table contents
-                       $multipageimage.empty().append( $( data ).find( 'table.multipageimage' ).contents() );
+                       $multipageimage.empty().append( $contents.clone() );
 
                        bindPageNavigation( $multipageimage );
 
                                .extend( { title: mw.config.get( 'wgPageName' ), page: page } )
                                .toString();
 
-                       loadPage( uri );
+                       switchPage( uri );
                        e.preventDefault();
                } );
 
                $container.find( 'form[name="pageselector"]' ).one( 'change submit', function ( e ) {
-                       loadPage( this.action + '?' + $( this ).serialize() );
+                       switchPage( this.action + '?' + $( this ).serialize() );
                        e.preventDefault();
                } );
        }
                        $( window ).on( 'popstate', function ( e ) {
                                var state = e.originalEvent.state;
                                if ( state && state.tag === 'mw-pagination' ) {
-                                       loadPage( location.href, true );
+                                       switchPage( location.href, true );
                                }
                        } );
                }
index a05a054..246cc81 100644 (file)
@@ -36,6 +36,7 @@
 
        // Things outside the wikipage content
        $( function () {
+               var $nodes;
 
                if ( !supportsPlaceholder ) {
                        // Exclude content to avoid hitting it twice for the (first) wikipage content
                }
 
                // Add accesskey hints to the tooltips
-               mw.util.updateTooltipAccessKeys();
+               if ( document.querySelectorAll ) {
+                       // If we're running on a browser where we can do this efficiently,
+                       // just find all elements that have accesskeys. We can't use jQuery's
+                       // polyfill for the selector since looping over all elements on page
+                       // load might be too slow.
+                       $nodes = $( document.querySelectorAll( '[accesskey]' ) );
+               } else {
+                       // Otherwise go through some elements likely to have accesskeys rather
+                       // than looping over all of them. Unfortunately this will not fully
+                       // work for custom skins with different HTML structures. Input, label
+                       // and button should be rare enough that no optimizations are needed.
+                       $nodes = $( '#column-one a, #mw-head a, #mw-panel a, #p-logo a, input, label, button' );
+               }
+               $nodes.updateTooltipAccessKeys();
 
        } );
 
diff --git a/resources/src/mediawiki.skinning/content.css b/resources/src/mediawiki.skinning/content.css
new file mode 100644 (file)
index 0000000..7a41708
--- /dev/null
@@ -0,0 +1,227 @@
+/**
+ * MediaWiki style sheet for general styles on complex content
+ *
+ * Styles for complex things which are a standard part of page content
+ * (ie: the CSS classing built into the system), like the TOC.
+ */
+
+/* Table of Contents */
+#toc,
+.toc,
+.mw-warning {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+
+/**
+ * We want to display the ToC element with intrinsic width in block mode. The fit-content
+ * value for width is however not supported by large groups of browsers.
+ *
+ * We use display:table. Even though it should only contain other table-* display
+ * elements, there are no known problems with using this.
+ *
+ * Because IE < 8, FF 2 and other older browsers don't support display:table, we fallback to
+ * using inline-block mode, which features at least intrinsic width, but won't clear preceding
+ * inline elements. In practice inline elements surrounding the TOC are uncommon enough that
+ * this is an acceptable sacrifice.
+ */
+#toc,
+.toc {
+       display: -moz-inline-block;
+       display: inline-block;
+       display: table;
+
+       /* IE7 and earlier */
+       zoom: 1;
+       *display: inline;
+
+       padding: 7px;
+}
+
+/* CSS for backwards-compatibility with cached page renders and creative uses in wikitext */
+table#toc,
+table.toc {
+       border-collapse: collapse;
+}
+
+/* Remove additional paddings inside table-cells that are not present in <div>s */
+table#toc td,
+table.toc td {
+       padding: 0;
+}
+
+#toc h2,
+.toc h2 {
+       display: inline;
+       border: none;
+       padding: 0;
+       font-size: 100%;
+       font-weight: bold;
+}
+
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+       text-align: center;
+}
+
+#toc ul,
+.toc ul {
+       list-style-type: none;
+       list-style-image: none;
+       margin-left: 0;
+       padding: 0;
+       text-align: left;
+}
+
+#toc ul ul,
+.toc ul ul {
+       margin: 0 0 0 2em;
+}
+
+#toc .toctoggle,
+.toc .toctoggle {
+       font-size: 94%;
+}
+
+.toccolours {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+
+/* Warning */
+.mw-warning {
+       margin-left: 50px;
+       margin-right: 50px;
+       text-align: center;
+}
+
+/* Images */
+/* @noflip */div.floatright, table.floatright {
+       margin: 0 0 .5em .5em;
+       border: 0;
+}
+
+div.floatright p {
+       font-style: italic;
+}
+
+/* @noflip */div.floatleft, table.floatleft {
+       margin: 0 .5em .5em 0;
+       border: 0;
+}
+
+div.floatleft p {
+       font-style: italic;
+}
+
+/* Thumbnails */
+div.thumb {
+       margin-bottom: .5em;
+       width: auto;
+       background-color: transparent;
+}
+
+div.thumbinner {
+       border: 1px solid #ccc;
+       padding: 3px;
+       background-color: #f9f9f9;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+
+html .thumbimage {
+       border: 1px solid #ccc;
+}
+
+html .thumbcaption {
+       border: none;
+       line-height: 1.4em;
+       padding: 3px;
+       font-size: 94%;
+       /* Default styles when there's no .mw-content-ltr or .mw-content-rtl, overridden below */
+       text-align: left;
+}
+
+div.magnify {
+       /* Default styles when there's no .mw-content-ltr or .mw-content-rtl, overridden below */
+       float: right;
+       margin-left: 3px;
+}
+
+div.magnify a {
+       display: block;
+       /* Hide the text… */
+       text-indent: 15px;
+       white-space: nowrap;
+       overflow: hidden;
+       /* …and replace it with the image */
+       width: 15px;
+       height: 11px;
+       /* Default styles when there's no .mw-content-ltr or .mw-content-rtl, overridden below */
+       /* @embed */
+       background: url(images/magnify-clip-ltr.png) center center no-repeat;
+       /* Don't annoy people who copy-paste everything too much */
+       -moz-user-select: none;
+       -webkit-user-select: none;
+       -ms-user-select: none;
+       user-select: none;
+}
+
+img.thumbborder {
+       border: 1px solid #dddddd;
+}
+
+/* Directionality-specific styles for thumbnails - their positioning depends on content language */
+
+/* @noflip */
+.mw-content-ltr .thumbcaption {
+       text-align: left;
+}
+
+/* @noflip */
+.mw-content-ltr .magnify {
+       float: right;
+       margin-left: 3px;
+       margin-right: 0;
+}
+
+/* @noflip */
+.mw-content-ltr div.magnify a {
+       /* @embed */
+       background-image: url(images/magnify-clip-ltr.png);
+}
+
+/* @noflip */
+.mw-content-rtl .thumbcaption {
+       text-align: right;
+}
+
+/* @noflip */
+.mw-content-rtl .magnify {
+       float: left;
+       margin-left: 0;
+       margin-right: 3px;
+}
+
+/* @noflip */
+.mw-content-rtl div.magnify a {
+       /* @embed */
+       background-image: url(images/magnify-clip-rtl.png);
+}
+
+/* @noflip */
+div.tright {
+       margin: .5em 0 1.3em 1.4em;
+}
+
+/* @noflip */
+div.tleft {
+       margin: .5em 1.4em 1.3em 0;
+}
diff --git a/resources/src/mediawiki.skinning/content.externallinks.css b/resources/src/mediawiki.skinning/content.externallinks.css
new file mode 100644 (file)
index 0000000..d23540d
--- /dev/null
@@ -0,0 +1,102 @@
+/*!
+ * Icons and colors for external links.
+ */
+
+/* Bug 66091 is blocking is from converting this file to LESS
+ * and using the .background-image-svg mixin. */
+
+/* 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 */
+
+.mw-body a.external,
+.link-https {
+       background: url(images/external-ltr.png) center right no-repeat;
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/external-ltr.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/external-ltr.svg);
+       padding-right: 15px;
+}
+
+.mw-body a.external[href^="mailto:"],
+.link-mailto {
+       background: url(images/mail.png) center right no-repeat;
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/mail.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/mail.svg);
+       padding-right: 15px;
+}
+
+.mw-body a.external[href^="ftp://"],
+.link-ftp {
+       background: url(images/ftp-ltr.png) center right no-repeat;
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/ftp-ltr.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/ftp-ltr.svg);
+       padding-right: 15px;
+}
+
+.mw-body a.external[href^="irc://"],
+.mw-body a.external[href^="ircs://"],
+.link-irc {
+       background: url(images/chat-ltr.png) center right no-repeat;
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/chat-ltr.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/chat-ltr.svg);
+       padding-right: 15px;
+}
+
+.mw-body a.external[href$=".ogg"], .mw-body a.external[href$=".OGG"],
+.mw-body a.external[href$=".mid"], .mw-body a.external[href$=".MID"],
+.mw-body a.external[href$=".midi"], .mw-body a.external[href$=".MIDI"],
+.mw-body a.external[href$=".mp3"], .mw-body a.external[href$=".MP3"],
+.mw-body a.external[href$=".wav"], .mw-body a.external[href$=".WAV"],
+.mw-body a.external[href$=".wma"], .mw-body a.external[href$=".WMA"],
+.link-audio {
+       background: url(images/audio-ltr.png) center right no-repeat;
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/audio-ltr.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/audio-ltr.svg);
+       padding-right: 15px;
+}
+
+.mw-body a.external[href$=".ogm"], .mw-body a.external[href$=".OGM"],
+.mw-body a.external[href$=".avi"], .mw-body a.external[href$=".AVI"],
+.mw-body a.external[href$=".mpeg"], .mw-body a.external[href$=".MPEG"],
+.mw-body a.external[href$=".mpg"], .mw-body a.external[href$=".MPG"],
+.link-video {
+       background: url(images/video.png) center right no-repeat;
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/video.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/video.svg);
+       padding-right: 15px;
+}
+
+.mw-body a.external[href$=".pdf"], .mw-body a.external[href$=".PDF"],
+.mw-body a.external[href*=".pdf#"], .mw-body a.external[href*=".PDF#"],
+.mw-body a.external[href*=".pdf?"], .mw-body a.external[href*=".PDF?"],
+.link-document {
+       background: url(images/document-ltr.png) center right no-repeat;
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/document-ltr.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/document-ltr.svg);
+       padding-right: 15px;
+}
+
+/* Interwiki styling */
+.mw-body a.extiw,
+.mw-body a.extiw:active {
+       color: #36b;
+}
+
+/* External link color */
+.mw-body a.external {
+       color: #36b;
+}
index 47c3526..a6515d2 100644 (file)
@@ -31,7 +31,7 @@
  * Styleguide 1.1.
  */
 span.reference {
-       font-size: smaller;
+       font-size: 80%;
        line-height: 1;
        vertical-align: super;
        unicode-bidi: -moz-isolate;
@@ -129,13 +129,3 @@ figure[typeof~='mw:Image/Frame'] > *:first-child > img,
 /* Hide the caption for frameless and plain floated images */
 figure[typeof~="mw:Image/Frameless"] > figcaption,
 figure[typeof~="mw:Image"] > figcaption { display: none }
-
-/*
- * Finally, some basic styling for Parsoid render testing.
- * Only Parsoid directly sets .mw-body-content directly on the body, so this
- * shouldn't affect anything else.
- */
-body.mw-body-content {
-       background-color: #fff;
-       padding: 0.8em;
-}
diff --git a/resources/src/mediawiki.skinning/elements.css b/resources/src/mediawiki.skinning/elements.css
new file mode 100644 (file)
index 0000000..11962f8
--- /dev/null
@@ -0,0 +1,273 @@
+/**
+ * MediaWiki style sheet for general styles on basic content elements
+ *
+ * Styles for basic elements: links, lists, etc...
+ *
+ * This style sheet is used by the Monobook and Vector skins.
+ */
+
+/* Links */
+a {
+       text-decoration: none;
+       color: #0645ad;
+       background: none;
+}
+
+a:visited {
+       color: #0b0080;
+}
+
+a:active {
+       color: #faa700;
+}
+
+a:hover, a:focus {
+       text-decoration: underline;
+}
+
+a.stub {
+       color: #772233;
+}
+
+a.new, #p-personal a.new {
+       color: #ba0000;
+}
+
+a.new:visited, #p-personal a.new:visited {
+       color: #a55858;
+}
+
+/* Interwiki Styling */
+.mw-body a.extiw,
+.mw-body a.extiw:active {
+       color: #36b;
+}
+
+.mw-body a.extiw:visited {
+       color: #636;
+}
+
+.mw-body a.extiw:active {
+       color: #b63;
+}
+
+/* External links */
+.mw-body a.external {
+       color: #36b;
+}
+
+.mw-body a.external:visited {
+       color: #636; /* bug 3112 */
+}
+
+.mw-body a.external:active {
+       color: #b63;
+}
+
+/* Inline Elements */
+img {
+       border: none;
+       vertical-align: middle;
+}
+
+hr {
+       height: 1px;
+       color: #aaa;
+       background-color: #aaa;
+       border: 0;
+       margin: .2em 0;
+}
+
+/* Structural Elements */
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+       color: black;
+       background: none;
+       font-weight: normal;
+       margin: 0;
+       overflow: hidden;
+       padding-top: .5em;
+       padding-bottom: .17em;
+       border-bottom: 1px solid #aaa;
+}
+
+h1 {
+       font-size: 188%;
+}
+
+h2 {
+       font-size: 150%;
+}
+
+h3,
+h4,
+h5,
+h6 {
+       border-bottom: none;
+       font-weight: bold;
+}
+
+h3 {
+       font-size: 128%;
+}
+
+h4 {
+       font-size: 116%;
+}
+
+h5 {
+       font-size: 108%;
+}
+
+h6 {
+       font-size: 100%;
+}
+
+/* Some space under the headers in the content area */
+h1,
+h2 {
+       margin-bottom: .6em;
+}
+
+h3,
+h4,
+h5 {
+       margin-bottom: .3em;
+}
+
+p {
+       margin: .4em 0 .5em 0;
+       line-height: 1.5em;
+}
+
+p img {
+       margin: 0;
+}
+
+ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       margin: .3em 0 0 1.6em;
+       padding: 0;
+}
+
+ol {
+       line-height: 1.5em;
+       margin: .3em 0 0 3.2em;
+       padding: 0;
+       list-style-image: none;
+}
+
+li {
+       margin-bottom: .1em;
+}
+
+dt {
+       font-weight: bold;
+       margin-bottom: .1em;
+}
+
+dl {
+       margin-top: .2em;
+       margin-bottom: .5em;
+}
+
+dd {
+       line-height: 1.5em;
+       margin-left: 1.6em;
+       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.
+        * Specifying any valid, second value will trigger correct behavior without forcing a different font.
+        */
+       font-family: monospace, Courier;
+}
+
+code {
+       color: black;
+       background-color: #f9f9f9;
+       border: 1px solid #ddd;
+       border-radius: 2px;
+       padding: 1px 4px;
+}
+
+pre, .mw-code {
+       color: black;
+       background-color: #f9f9f9;
+       border: 1px solid #ddd;
+       padding: 1em;
+}
+
+/* Tables */
+table {
+       font-size: 100%;
+}
+
+/* Forms */
+fieldset {
+       border: 1px solid #2f6fab;
+       margin: 1em 0 1em 0;
+       padding: 0 1em 1em;
+       line-height: 1.5em;
+}
+
+fieldset.nested {
+       margin: 0 0 0.5em 0;
+       padding: 0 0.5em 0.5em;
+}
+
+legend {
+       padding: .5em;
+       font-size: 95%;
+}
+
+form {
+       border: none;
+       margin: 0;
+}
+
+textarea {
+       width: 100%;
+       padding: .1em;
+       display: block;
+       -moz-box-sizing: border-box;
+       -webkit-box-sizing: border-box;
+       box-sizing: border-box;
+}
+
+select {
+       vertical-align: top;
+}
+
+/* Emulate Center */
+.center {
+       width: 100%;
+       text-align: center;
+}
+
+*.center * {
+       margin-left: auto;
+       margin-right: auto;
+}
+
+/* Small for tables and similar */
+.small {
+       font-size: 94%;
+}
+
+table.small {
+       font-size: 100%;
+}
diff --git a/resources/src/mediawiki.skinning/images/audio-ltr.png b/resources/src/mediawiki.skinning/images/audio-ltr.png
new file mode 100644 (file)
index 0000000..8efc4f2
Binary files /dev/null and b/resources/src/mediawiki.skinning/images/audio-ltr.png differ
diff --git a/resources/src/mediawiki.skinning/images/audio-ltr.svg b/resources/src/mediawiki.skinning/images/audio-ltr.svg
new file mode 100644 (file)
index 0000000..e27a5f5
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.467808,-258.39005)">
+<path style="opacity:1;fill:#3366bb;" d="m43.47,259.4-3,3-3,0,0,4,3,0,3,3zm-1,2.5,0,5-1.5-1.5-2.5,0,0-2,2.5,0z"/>
+<path style="opacity:1;fill:#15a5ea;" d="m43.9,262.5c0-0.6213,0.6213-1.243,1.243-0.6213,0,0,0.6213,0.6213,0.6213,2.485s-0.6213,2.485-0.6213,2.485c-0.6213,0.6213-1.243,0-1.243-0.6213,0,0,0.6213-0.6213,0.6213-1.864s-0.6213-1.864-0.6213-1.864z"/>
+<path style="opacity:1;fill:#15a5ea;" d="m45.76,261.2c0-0.6213,0.6213-1.243,1.243-0.6213,0,0,1.243,1.243,1.243,3.728s-1.243,3.728-1.243,3.728c-0.6213,0.6213-1.243,0-1.243-0.6213,0,0,1.243-1.243,1.243-3.107s-1.243-3.107-1.243-3.107z"/>
+</g>
+</svg>
diff --git a/resources/src/mediawiki.skinning/images/audio-rtl.png b/resources/src/mediawiki.skinning/images/audio-rtl.png
new file mode 100644 (file)
index 0000000..1afdf40
Binary files /dev/null and b/resources/src/mediawiki.skinning/images/audio-rtl.png differ
diff --git a/resources/src/mediawiki.skinning/images/audio-rtl.svg b/resources/src/mediawiki.skinning/images/audio-rtl.svg
new file mode 100644 (file)
index 0000000..683bbcd
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.467808,-258.39005)">
+<path style="opacity:1;fill:#3366bb;" d="m42.47,259.4,3,3,3,0,0,4-3,0-3,3zm1,2.5,0,5,1.5-1.5,2.5,0,0-2-2.5,0z"/>
+<path style="opacity:1;fill:#15a5ea;" d="m42.04,262.5c0-0.6213-0.6213-1.243-1.243-0.6213,0,0-0.6213,0.6213-0.6213,2.485s0.6213,2.485,0.6213,2.485c0.6213,0.6213,1.243,0,1.243-0.6213,0,0-0.6213-0.6213-0.6213-1.864s0.6213-1.864,0.6213-1.864z"/>
+<path style="opacity:1;fill:#15a5ea;" d="m40.17,261.2c0-0.6213-0.6213-1.243-1.243-0.6213,0,0-1.243,1.243-1.243,3.728s1.243,3.728,1.243,3.728c0.6213,0.6213,1.243,0,1.243-0.6213,0,0-1.243-1.243-1.243-3.107s1.243-3.107,1.243-3.107z"/>
+</g>
+</svg>
diff --git a/resources/src/mediawiki.skinning/images/chat-ltr.png b/resources/src/mediawiki.skinning/images/chat-ltr.png
new file mode 100644 (file)
index 0000000..624ecec
Binary files /dev/null and b/resources/src/mediawiki.skinning/images/chat-ltr.png differ
diff --git a/resources/src/mediawiki.skinning/images/chat-ltr.svg b/resources/src/mediawiki.skinning/images/chat-ltr.svg
new file mode 100644 (file)
index 0000000..bd5329e
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.467808,-258.39005)">
+<path style="opacity:1;fill:#3366bb;" d="m38.09,260.4-0.6213,0.6213,0,5.757,0.6213,0.6213,1.689,0-0.6213,2.728,4.311-2.728,4.379,0,0.6213-0.6213,0-5.757-0.6213-0.6213zm0.3787,1,9,0,0,5-4,0-2.902,1.897,0.9021-1.897-3,0z"/>
+</g>
+</svg>
diff --git a/resources/src/mediawiki.skinning/images/chat-rtl.png b/resources/src/mediawiki.skinning/images/chat-rtl.png
new file mode 100644 (file)
index 0000000..f90fa33
Binary files /dev/null and b/resources/src/mediawiki.skinning/images/chat-rtl.png differ
diff --git a/resources/src/mediawiki.skinning/images/chat-rtl.svg b/resources/src/mediawiki.skinning/images/chat-rtl.svg
new file mode 100644 (file)
index 0000000..b86218f
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.467808,-258.39005)">
+<path style="opacity:1;fill:#3366bb;" d="m47.85,260.4,0.6213,0.6213,0,5.757-0.6213,0.6213-1.689,0,0.6213,2.728-4.311-2.728-4.379,0-0.6213-0.6213,0-5.757,0.6213-0.6213zm-0.3787,1-9,0,0,5,4,0,2.902,1.897-0.9021-1.897,3,0z"/>
+</g>
+</svg>
diff --git a/resources/src/mediawiki.skinning/images/document-ltr.png b/resources/src/mediawiki.skinning/images/document-ltr.png
new file mode 100644 (file)
index 0000000..4ea9373
Binary files /dev/null and b/resources/src/mediawiki.skinning/images/document-ltr.png differ
diff --git a/resources/src/mediawiki.skinning/images/document-ltr.svg b/resources/src/mediawiki.skinning/images/document-ltr.svg
new file mode 100644 (file)
index 0000000..4396098
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<path style="opacity:1;fill:#15a5ea;" d="m7.5,2,0,3,2.5,0,1-1-2.5,0,0-3z"/>
+<path style="opacity:1;fill:#3366bb;" d="m3,1,0,10,8,0,0-7-2.5-3zm1,1,4,0,2,2.5,0,5.5-6,0z"/>
+</svg>
diff --git a/resources/src/mediawiki.skinning/images/document-rtl.png b/resources/src/mediawiki.skinning/images/document-rtl.png
new file mode 100644 (file)
index 0000000..c281677
Binary files /dev/null and b/resources/src/mediawiki.skinning/images/document-rtl.png differ
diff --git a/resources/src/mediawiki.skinning/images/document-rtl.svg b/resources/src/mediawiki.skinning/images/document-rtl.svg
new file mode 100644 (file)
index 0000000..c37dadc
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<path style="opacity:1;fill:#15a5ea;" d="m5.5,2,0,3-2.5,0-1-1,2.5,0,0-3z"/>
+<path style="opacity:1;fill:#3366bb;" d="m10,1,0,10-8,0,0-7,2.5-3zm-1,1-4,0-2,2.5,0,5.5,6,0z"/>
+</svg>
diff --git a/resources/src/mediawiki.skinning/images/external link icons.svg b/resources/src/mediawiki.skinning/images/external link icons.svg
new file mode 100644 (file)
index 0000000..6a67993
--- /dev/null
@@ -0,0 +1,697 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="13"
+   height="110"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.5 r10040"
+   sodipodi:docname="external link icons.svg">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.999999"
+     inkscape:cx="10.40536"
+     inkscape:cy="65.686256"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer5"
+     showgrid="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1283"
+     inkscape:window-height="711"
+     inkscape:window-x="1790"
+     inkscape:window-y="-6"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3246"
+       empspacing="4"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       originx="0px"
+       originy="-27.999997px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="base"
+     style="display:none"
+     transform="translate(-505,-869.36218)">
+    <rect
+       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect4646"
+       width="13"
+       height="12.999996"
+       x="505"
+       y="885.36218" />
+    <rect
+       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect4646-4"
+       width="13"
+       height="12.999998"
+       x="505"
+       y="901.36218" />
+    <rect
+       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect4646-4-6"
+       width="13"
+       height="12.999996"
+       x="505"
+       y="917.36218"
+       inkscape:export-filename="/home/rahah/elvidishu/steak/unreal/dev/skins/external link icons/mail.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <rect
+       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect4646-4-6-9"
+       width="13"
+       height="12.999996"
+       x="505"
+       y="933.36218" />
+    <rect
+       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect4646-4-6-6"
+       width="13"
+       height="12.999996"
+       x="505"
+       y="950.36218" />
+    <rect
+       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect4646-4-6-2"
+       width="13"
+       height="12.999998"
+       x="505"
+       y="966.36218" />
+    <rect
+       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       id="rect4646-44"
+       width="13"
+       height="12.999996"
+       x="505"
+       y="869.36218" />
+  </g>
+  <g
+     inkscape:label="sketch 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-505,-869.36218)"
+     style="display:none"
+     sodipodi:insensitive="true">
+    <path
+       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 507,870.36218 0,5 3,0 4,4 0,-13 -4,4 z"
+       id="path3194"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 517,869.36218 c 1,2 1,5 0,7"
+       id="path3196"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 520,867.36218 c 2,2 2,9 0,11"
+       id="path3198"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 507.93861,989.90562 0,15.99988 13,0 0,-10.99988 -5,-5 z"
+       id="path3200"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 506.93861,918.90546 0,11.5 15,0 0,-11.5 z"
+       id="path3202"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 506.93861,918.90546 7.5,6 7.5,-6"
+       id="path3204"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 507.93861,890.90546 3,0"
+       id="path3212"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 507.93861,893.90546 3,0"
+       id="path3214"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 507.93861,899.90546 3,0"
+       id="path3218"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 507.93861,902.90546 3,0"
+       id="path3220"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 517.93861,890.90546 3,0"
+       id="path3222"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 507.93861,896.90546 13,0"
+       id="path3224"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 517.93861,893.90546 3,0"
+       id="path3226"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 517.93861,899.90546 3,0"
+       id="path3230"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 517.93861,902.90546 3,0"
+       id="path3232"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 510.93861,890.90546 0,12 7,0 0,-12 z"
+       id="path3206"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 507.93861,888.90546 0,16"
+       id="path3208"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 520.93861,888.90546 0,16"
+       id="path3210"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 515.93861,989.90562 0,5 5,0"
+       id="path3234"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 513.93861,969.40546 c -2,0 -5,0 -7,0 l 0,10.99995 11,5e-5 c 0,-2.33332 0,-4.66668 0,-7"
+       id="path3236"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none"
+       d="m 513.93861,976.40546 5,-4 3,3 0,-10 -10,0 3,3 -4,5"
+       id="path3242"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 506.93861,940.40546 15,0 0,10 -6,0 -6,4 1,-4 -4,0 z"
+       id="path3244"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccc" />
+    <path
+       style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 509.93861,972.40546 c 2,1 4,3 5,5"
+       id="path4641"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="sketch 2"
+     style="display:none"
+     transform="translate(0,-6.0000106)">
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 8.4921988,1.0623917 -4.0641234,4.064123 -3.2512987,0 0,5.6897733 3.2512987,0 4.0641234,4.064124 z m -1.6256494,4.064124 0,5.6897733 -1.6256493,-1.6256493 -2.438474,-1e-6 0,-2.438474 2.438474,1e-6 z"
+       id="path4755-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+       d="m 9.3050235,5.1265157 c 0,-0.812824 0.8128245,-1.625649 1.6256495,-0.812824 0,0 0.812825,0.812824 0.812825,3.251298 0,2.4384743 -0.812825,3.2512993 -0.812825,3.2512993 -0.812825,0.812825 -1.6256495,0 -1.6256495,-0.812825 0,0 0.8128245,-0.8128243 0.8128245,-2.4384743 0,-1.625649 -0.8128245,-2.438474 -0.8128245,-2.438474 z"
+       id="path4760-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccsccsc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+       d="m 11.743498,3.5008667 c 0,-0.812825 0.812824,-1.625649 1.625649,-0.812825 0,0 1.625649,1.62565 1.625649,4.876948 0,3.2512993 -1.625649,4.8769483 -1.625649,4.8769483 -0.812825,0.812825 -1.625649,0 -1.625649,-0.812824 0,0 1.625649,-1.62565 1.625649,-4.0641243 0,-2.438474 -1.625649,-4.064123 -1.625649,-4.064123 z"
+       id="path4762-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccsccsc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 2.8024261,23.008658 0,0.812825 10.5667209,0 0,-0.812825 z"
+       id="path4772"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 2.8024261,33.575379 10.5667209,0 0,-0.812825 -10.5667209,0 z"
+       id="path4774"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 2.8024261,25.447132 0,0.812824 2.438474,0 0,-0.812824 z m 8.1282469,0 0,0.812824 2.438474,0 0,-0.812824 z"
+       id="path4782"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 2.8024261,30.32408 0,0.812824 2.438474,0 0,-0.812824 z m 8.1282469,0 0,0.812824 2.438474,0 0,-0.812824 z"
+       id="path4778"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 2.8024261,28.698431 10.5667209,0 0,-0.812825 -10.5667209,0 z"
+       id="path4780"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+       d="m 5.2409001,27.479194 0,1.625649 5.6897729,0 0,-1.625649 z"
+       id="path4793"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 4.4280754,23.008658 0,10.56672 7.3154226,0 0,-10.56672 z m 1.6256494,1.625649 4.0641232,0 0,7.315422 -4.0641232,0 z"
+       id="path4768"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 1.9896014,21.383009 1.6256493,0 0,13.818019 -1.6256493,0 z"
+       id="path4764"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 12.556322,21.383009 1.62565,0 0,13.818019 -1.62565,0 z"
+       id="path4766"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+       d="m 1.9896014,44.954923 6.096185,5.689773 6.0961856,-5.689773 -0.812825,-0.812825 -1.625649,0.813196 -3.6577116,3.251298 -3.657711,-3.251298 -1.6256493,-0.813196 z"
+       id="path4800-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 1.1767767,43.329273 0,11.379545 13.8180193,0 0,-11.379545 z m 1.6256494,1.625649 10.5667209,0 0,8.128247 -10.5667209,0 z"
+       id="path4795-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 1.9896014,62.024243 -0.8128247,0.812824 0,8.128247 0.8128247,0.812825 2.438474,0 -0.8128247,3.251297 5.6897728,-3.251297 4.8769485,0 0.812824,-0.812825 0,-8.128247 -0.812824,-0.812824 z m 0.8128247,1.625649 10.5667209,0 0,6.502598 -4.0641235,0 -3.5815088,2.133664 0.9144278,-2.133664 -3.8355164,0 z"
+       id="path4802-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccccccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 4.4280754,82.344856 10.5667206,0 0,10.56672 -3.251298,-3.25129 -3.2512992,2.43847 -0.8128247,-0.81282 4.0641239,-3.2513 1.625649,1.62565 0,-5.68978 -5.6897729,0 1.6256494,1.62565 -3.2512987,4.06413 -0.8128247,-0.81283 2.438474,-3.2513 z"
+       id="path4807-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 8.4921988,85.596156 -7.3154221,0 0,10.56672 10.5667213,0 0,-7.31542 -1.62565,0.81283 0,4.87694 -7.3154219,0 0,-7.31542 4.876948,0 z"
+       id="path4809-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+       d="m 8.4921988,103.47831 0,4.87694 4.8769482,0 0,-1.62565 -3.251299,0 0,-3.25129 z"
+       id="path4818-67"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 1.9896014,102.66548 0,13.81802 12.1923706,0 0,-10.13799 -3.657711,-3.68003 z m 1.6256493,1.62565 6.5025973,0 2.438474,2.43847 0,8.12825 -8.9410713,0 z"
+       id="path4813-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+       d="m 3.6152507,88.847456 c 0,-0.81282 0.8128247,-0.81282 0.8128247,-0.81282 2.438474,0.81282 4.0641234,2.43847 4.8769481,4.87694 0,0 0,0.81283 -0.8128247,0.81283 -1.6256494,-2.43847 -2.438474,-3.2513 -4.8769481,-4.87695 z"
+       id="path4822-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Layer"
+     style="display:none"
+     transform="translate(-10,-26.000007)">
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none"
+       d="m 19,20.999995 -4,4 -3,0 0,6 3,0 4,4 z m -1,2.5 0,9 -2.6,-2.5 -2.4,0 0,-4 2.5,0 z"
+       id="path4755"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none"
+       d="m 19.75,24.999995 c 0,-1 0.75,-1 0.75,-1 0,0 1.5,1.029412 1.5,3.5 0,2.470588 -1.5,3.5 -1.5,3.5 0,0 -0.75,0 -0.75,-1 0,0 1,-0.852941 1,-2.5 0,-1.647059 -1,-2.5 -1,-2.5 z"
+       id="path4760"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccsccsc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none"
+       d="m 22.25,23.999995 c 0,-1 0.75,-1 0.75,-1 0,0 2,1.205882 2,4.5 0,3.294118 -2,4.5 -2,4.5 0,0 -0.75,0 -0.75,-1 0,0 1.5,-1.029412 1.5,-3.5 0,-2.470588 -1.5,-3.5 -1.5,-3.5 z"
+       id="path4762"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccsccsc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none"
+       d="m 31.4375,79.875 -1,1 0,10 1,1 3,0 -1,4 7,-4 6,0 1,-1 0,-10 -1,-1 z m 1,2 13,0 0,8 -5,0 -4.40625,2.625 1.125,-2.625 -4.71875,0 z"
+       id="path4802"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccccccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none"
+       d="m 35.125,98.8125 13,0 0,13 -4,-4 -4,3 -1,-1 5,-4 2,2 0,-7 -7,0 2,2 -4,5 -1,-1 3,-4 z"
+       id="path4807"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none"
+       d="m 40.125,102.8125 -9,0 0,13 13,0 0,-9 -2,1 0,6 -9,0 0,-9 6,0 z"
+       id="path4809"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none"
+       d="m 34.125,106.8125 c 0,-1 1,-1 1,-1 3,1 5,3 6,6 0,0 0,1 -1,1 -2,-3 -3,-4 -6,-6 z"
+       id="path4822"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="m 12,50.499995 0,1 3,0 0,-1 -3,0 z m 9,0 0,1 3,0 0,-1 -3,0 z"
+       id="rect4841"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="m 12,44.499995 0,1 3,0 0,-1 -3,0 z m 9,0 0,1 3,0 0,-1 -3,0 z"
+       id="rect4843"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:connector-curvature="0"
+       style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 12,52.999995 0,1 3,0 0,-1 z m 9,0 0,1 3,0 0,-1 z"
+       id="rect4843-1"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       inkscape:connector-curvature="0"
+       style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 12,41.999995 0,1 3,0 0,-1 z m 9,0 0,1 3,0 0,-1 z"
+       id="rect4843-17"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+       d="m 12,47.499995 0,1 3,0 0,-1 z m 9,0 0,1 3,0 0,-1 z"
+       id="rect4841-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccc" />
+    <rect
+       style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect4835"
+       width="7"
+       height="2"
+       x="4"
+       y="27"
+       transform="translate(10,19.999995)" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none"
+       d="m 2,21 1,0 0,14 -1,0 z"
+       id="path4826"
+       inkscape:connector-curvature="0"
+       transform="translate(10,19.999995)"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none"
+       d="m 13,21 1,0 0,14 -1,0 z"
+       id="path4828"
+       inkscape:connector-curvature="0"
+       transform="translate(10,19.999995)"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none"
+       d="m 4,22 0,12 8,0 0,-12 z m 1,1 6,0 0,10 -6,0 z"
+       transform="translate(10,19.999995)"
+       id="path4830"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccc" />
+    <rect
+       style="fill:#3366bb;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect4837"
+       width="8"
+       height="1"
+       x="4"
+       y="22"
+       transform="translate(10,19.999995)" />
+    <rect
+       style="fill:#3366bb;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect4839"
+       width="8"
+       height="1"
+       x="4"
+       y="33"
+       transform="translate(10,19.999995)" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none"
+       d="m 12,64.999995 6,5 6,-5 0.53033,-1.45299 -1.28033,0.45299 -5.25,4.5 -5.25,-4.5 -1.236136,-0.53033 z"
+       id="path4910"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none"
+       d="m 11,62.999995 0,10 14,0 0,-10 z m 1,1 12,0 0,8 -12,0 z"
+       id="path4905"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+       d="m 19,121 0,5 5,0 -1,-1 -3,0 0,-3 z"
+       id="path4818-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 12,121 0,14 12,0 0,-10 -4,-4 z m 1,1 6.5,0 3.5,3.5 0,8.5 -10,0 z"
+       id="path4813-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="Layer#1"
+     style="opacity:0.98999999"
+     transform="translate(0,-6.0000106)">
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 7,23.000004 -3,3 -3,0 0,4 3,0 3,3 z m -1,2.500001 0,5 -1.5,-1.500001 -2.5,0 0,-2 2.5,0 z"
+       id="path4755-9-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+       d="m 7.4319858,26.075368 c 0,-0.621323 0.6213237,-1.242647 1.2426477,-0.621323 0,0 0.6213228,0.621323 0.6213228,2.485294 0,1.863971 -0.6213228,2.485294 -0.6213228,2.485294 -0.621324,0.621324 -1.2426477,0 -1.2426477,-0.621323 0,0 0.6213237,-0.621324 0.6213237,-1.863971 0,-1.242648 -0.6213237,-1.863971 -0.6213237,-1.863971 z"
+       id="path4760-1-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccsccsc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+       d="m 9.2959563,24.832721 c 0,-0.621324 0.6213228,-1.242647 1.2426477,-0.621324 0,0 1.242646,1.242648 1.242646,3.727942 0,2.485294 -1.242646,3.727941 -1.242646,3.727941 -0.6213249,0.621324 -1.2426477,0 -1.2426477,-0.621323 0,0 1.2426477,-1.242647 1.2426477,-3.106618 0,-1.863971 -1.2426477,-3.106618 -1.2426477,-3.106618 z"
+       id="path4762-8-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccsccsc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:0.99215686;stroke:none;display:inline"
+       d="m 2.4916056,40.000004 0,0.621323 8.0979164,0 0,-0.621323 z"
+       id="path4772-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:0.99215686;stroke:none;display:inline"
+       d="m 2.4916056,48.000004 8.0979164,0 0,-0.621324 -8.0979164,0 z"
+       id="path4774-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:0.99215686;stroke:none;display:inline"
+       d="m 2.4916056,41.919118 0,0.621323 1.8687499,0 0,-0.621323 z m 6.2291665,0 0,0.621323 1.8687499,0 0,-0.621323 z"
+       id="path4782-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:0.99215686;stroke:none;display:inline"
+       d="m 2.4916056,45.589344 0,0.621322 1.8687499,0 0,-0.621322 z m 6.2291665,0 0,0.621322 1.8687499,0 0,-0.621322 z"
+       id="path4778-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:0.99215686;stroke:none;display:inline"
+       d="m 2.4916056,44.404412 8.0979164,0 0,-0.621323 -8.0979164,0 z"
+       id="path4780-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+       d="m 4.3603555,43.472427 0,1.242647 4.3604166,0 0,-1.242647 z"
+       id="path4793-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 4,40.000004 0,8 5,0 0,-8 z m 1,1 3,0 0,6 -3,0 z"
+       id="path4768-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 2,39.000004 1,0 0,10 -1,0 z"
+       id="path4764-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 10,39.000004 1,0 0,10 -1,0 z"
+       id="path4766-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+       d="M 1.8400738,58.055766 6.5000005,62.405031 11.159927,58.055766 10.538604,57.434442 9.2959563,58.056049 6.5000005,60.541343 3.7040445,58.056049 2.4613977,57.434442 z"
+       id="path4800-4-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccc"
+       inkscape:export-filename="/home/rahah/elvidishu/steak/unreal/dev/skins/external link icons/mail.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 1,57.000008 0,8 11,0 0,-8 z m 1,1 9,0 0,6 -9,0 z"
+       id="path4795-8-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccc"
+       inkscape:export-filename="/home/rahah/elvidishu/steak/unreal/dev/skins/external link icons/mail.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="M 1.6213238,72.000004 1,72.621328 l 0,5.757352 0.6213238,0.621324 1.6894529,0 L 2.6894528,81.727943 7,79.000004 l 4.378677,0 L 12,78.37868 12,72.621328 11.378677,72.000004 z m 0.3786762,1 9,0 0,5 -4,0 L 4.0978858,79.896603 5,78.000004 l -3,0 z"
+       id="path4802-8-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccccccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 5,88.000004 7,0 0,7 -2,-2 -3,2 0,-1 3,-2.249999 1,1 0,-3.750001 -3.75,0 1,1 -2.25,3 -1,0 2,-3 z"
+       id="path4807-5-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 7,90.000004 -5,0 0,8 8,0 0,-5 -1,0 0,4 -6,0 0,-6 4,0 z"
+       id="path4809-7-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+       d="m 7.5,105.00001 0,3 2.5,0 1,-1 -2.5,0 0,-3 z"
+       id="path4818-67-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+       d="m 3,104 0,10 8,1e-5 0,-7 -2.5,-3 z m 1,1 4,1e-5 2,2.50001 0,5.49999 -6,0 z"
+       id="path4813-2-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccc" />
+    <path
+       style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+       d="m 4.0827206,92.533089 c 0,-0.621319 0.6213239,-0.621319 0.6213239,-0.621319 1.8639706,0.621319 3.1066175,1.863968 3.7279413,3.727935 0,0 0,0.621328 -0.6213238,0.621328 C 6.5680151,94.397065 5.9466913,93.775738 4.0827206,92.533089 z"
+       id="path4822-8-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#3465ba;fill-opacity:1;stroke:none;display:inline"
+       d="m 1,8.500006 0,7.5001 1,-0.9872 0,-6.0129 2,0 2,1 4,-2e-4 0,2.0002 1,0 0,-2.5 -0.5,-0.5002 -4.5,2e-4 -2,-1 -2.5,0 z"
+       id="path3209"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccccc" />
+    <path
+       style="fill:#16a4e8;fill-opacity:1;stroke:none;display:inline"
+       d="m 6,11.000106 -1,-10e-5 -2.5,0 -0.5,0.5 -1,4.5001 10,-10e-5 0,-4.4998 -0.5,-0.5 z m 0,1 4,-10e-5 0,3 -7.75,-1e-4 0.75,-3.0001 2,0 z"
+       id="path3215"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccccc" />
+    <path
+       style="fill:#3465ba;fill-opacity:1;stroke:none;display:inline"
+       d="m 2,17.000006 0,1 8,0 0,-1 z"
+       id="path3247"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#3465ba;fill-opacity:1;stroke:none;display:inline"
+       d="m 5,15.500006 0,2 2,0 0,-2 c 0,-0.5 -2,-0.5 -2,0 z"
+       id="path3249"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+  </g>
+</svg>
diff --git a/resources/src/mediawiki.skinning/images/external-ltr.png b/resources/src/mediawiki.skinning/images/external-ltr.png
new file mode 100644 (file)
index 0000000..75750ef
Binary files /dev/null and b/resources/src/mediawiki.skinning/images/external-ltr.png differ
diff --git a/resources/src/mediawiki.skinning/images/external-ltr.svg b/resources/src/mediawiki.skinning/images/external-ltr.svg
new file mode 100644 (file)
index 0000000..e914b7d
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.467808,-258.39005)">
+<path style="opacity:1;fill:#3366bb;" d="m41.47,259.4,7,0,0,7-2-2-3,2,0-1,3-2.25,1,1,0-3.75-3.75,0,1,1-2.25,3-1,0,2-3z"/>
+<path style="opacity:1;fill:#3366bb;" d="m43.47,261.4-5,0,0,8,8,0,0-5-1,0,0,4-6,0,0-6,4,0z"/>
+<path style="opacity:1;fill:#15a5ea;" d="m40.55,263.9c0-0.6213,0.6213-0.6213,0.6213-0.6213,1.864,0.6213,3.107,1.864,3.728,3.728,0,0,0,0.6213-0.6213,0.6213-1.243-1.864-1.864-2.485-3.728-3.728z"/>
+</g>
+</svg>
diff --git a/resources/src/mediawiki.skinning/images/external-rtl.png b/resources/src/mediawiki.skinning/images/external-rtl.png
new file mode 100644 (file)
index 0000000..7b56aaa
Binary files /dev/null and b/resources/src/mediawiki.skinning/images/external-rtl.png differ
diff --git a/resources/src/mediawiki.skinning/images/external-rtl.svg b/resources/src/mediawiki.skinning/images/external-rtl.svg
new file mode 100644 (file)
index 0000000..698c616
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.467808,-258.39005)">
+<path style="opacity:1;fill:#3366bb;" d="m44.47,259.4-7,0,0,7,2-2,3,2,0-1-3-2.25-1,1,0-3.75,3.75,0-1,1,2.25,3,1,0-2-3z"/>
+<path style="opacity:1;fill:#3366bb;" d="m42.47,261.4,5,0,0,8-8,0,0-5,1,0,0,4,6,0,0-6-4,0z"/>
+<path style="opacity:1;fill:#15a5ea;" d="m45.39,263.9c0-0.6213-0.6213-0.6213-0.6213-0.6213-1.864,0.6213-3.107,1.864-3.728,3.728l0.6213,0.6213c1.243-1.864,1.864-2.485,3.728-3.728z"/>
+</g>
+</svg>
diff --git a/resources/src/mediawiki.skinning/images/ftp-ltr.png b/resources/src/mediawiki.skinning/images/ftp-ltr.png
new file mode 100644 (file)
index 0000000..f940b06
Binary files /dev/null and b/resources/src/mediawiki.skinning/images/ftp-ltr.png differ
diff --git a/resources/src/mediawiki.skinning/images/ftp-ltr.svg b/resources/src/mediawiki.skinning/images/ftp-ltr.svg
new file mode 100644 (file)
index 0000000..3a90c31
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-136.35715,-374.43362)">
+<path style="opacity:1;fill:#3465ba;" d="m137.4,376.9,0,7.5,1-0.9872,0-6.013,2,0,2,1,4-0.0002,0,2,1,0,0-2.5-0.5-0.5002-4.5,0.0002-2-1-2.5,0z"/>
+<path style="opacity:1;fill:#16a4e8;" d="m142.4,379.4-1-0.0001-2.5,0-0.5,0.5-1,4.5,10-0.0001,0-4.5-0.5-0.5zm0,1,4-0.0001,0,3-7.75-0.0001,0.75-3,2,0z"/>
+<path style="opacity:1;fill:#3465ba;" d="m138.4,385.4,0,1,8,0,0-1z"/>
+<path style="opacity:1;fill:#3465ba;" d="m141.4,383.9,0,2,2,0,0-2c0-0.5-2-0.5-2,0z"/>
+</g>
+</svg>
diff --git a/resources/src/mediawiki.skinning/images/ftp-rtl.png b/resources/src/mediawiki.skinning/images/ftp-rtl.png
new file mode 100644 (file)
index 0000000..ff76304
Binary files /dev/null and b/resources/src/mediawiki.skinning/images/ftp-rtl.png differ
diff --git a/resources/src/mediawiki.skinning/images/ftp-rtl.svg b/resources/src/mediawiki.skinning/images/ftp-rtl.svg
new file mode 100644 (file)
index 0000000..29e4b44
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-136.35715,-374.43362)">
+<path style="opacity:1;fill:#3465ba;" d="m148.4,376.9,0,7.5-1-0.9872,0-6.013-2,0-2,1-4-0.0002,0,2-1,0,0-2.5,0.5-0.5002,4.5,0.0002,2-1,2.5,0z"/>
+<path style="opacity:1;fill:#16a4e8;" d="m143.4,379.4,1-0.0001,2.5,0,0.5,0.5,1,4.5-10-0.0001,0-4.5,0.5-0.5zm0,1-4-0.0001,0,3,7.75-0.0001-0.75-3-2,0z"/>
+<path style="opacity:1;fill:#3465ba;" d="m147.4,385.4,0,1-8,0,0-1z"/>
+<path style="opacity:1;fill:#3465ba;" d="m144.4,383.9,0,2-2,0,0-2c0-0.5,2-0.5,2,0z"/>
+</g>
+</svg>
diff --git a/resources/src/mediawiki.skinning/images/magnify-clip-ltr.png b/resources/src/mediawiki.skinning/images/magnify-clip-ltr.png
new file mode 100644 (file)
index 0000000..00a9cee
Binary files /dev/null and b/resources/src/mediawiki.skinning/images/magnify-clip-ltr.png differ
diff --git a/resources/src/mediawiki.skinning/images/magnify-clip-rtl.png b/resources/src/mediawiki.skinning/images/magnify-clip-rtl.png
new file mode 100644 (file)
index 0000000..ff85c07
Binary files /dev/null and b/resources/src/mediawiki.skinning/images/magnify-clip-rtl.png differ
diff --git a/resources/src/mediawiki.skinning/images/mail.png b/resources/src/mediawiki.skinning/images/mail.png
new file mode 100644 (file)
index 0000000..5085611
Binary files /dev/null and b/resources/src/mediawiki.skinning/images/mail.png differ
diff --git a/resources/src/mediawiki.skinning/images/mail.svg b/resources/src/mediawiki.skinning/images/mail.svg
new file mode 100644 (file)
index 0000000..5e534fe
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.47,-257.4)">
+<path style="fill:#15a5ea;" d="m38.31,261.4,4.66,4.349,4.66-4.349-0.6213-0.6213-1.243,0.6216-2.796,2.485-2.796-2.485-1.243-0.6216z"/>
+<path style="fill:#3366bb;" d="m37.47,260.4,0,8,11,0,0-8zm1,1,9,0,0,6-9,0z"/>
+</g>
+</svg>
diff --git a/resources/src/mediawiki.skinning/images/video.png b/resources/src/mediawiki.skinning/images/video.png
new file mode 100644 (file)
index 0000000..12f6545
Binary files /dev/null and b/resources/src/mediawiki.skinning/images/video.png differ
diff --git a/resources/src/mediawiki.skinning/images/video.svg b/resources/src/mediawiki.skinning/images/video.svg
new file mode 100644 (file)
index 0000000..d52d0db
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.4678,-258.39)">
+<path style="opacity:1;fill-opacity:1;fill:#15a5ea;" d="m38.96,260.4,0,0.6213,8.098,0,0-0.6213z"/>
+<path style="opacity:1;fill-opacity:1;fill:#15a5ea;" d="m38.96,268.4,8.098,0,0-0.6213-8.098,0z"/>
+<path style="opacity:1;fill-opacity:1;fill:#15a5ea;" d="m38.96,262.3,0,0.6213,1.869,0,0-0.6213zm6.229,0,0,0.6213,1.869,0,0-0.6213z"/>
+<path style="opacity:1;fill-opacity:1;fill:#15a5ea;" d="m38.96,266,0,0.6213,1.869,0,0-0.6213zm6.229,0,0,0.6213,1.869,0,0-0.6213z"/>
+<path style="opacity:1;fill-opacity:1;fill:#15a5ea;" d="m38.96,264.8,8.098,0,0-0.6213-8.098,0z"/>
+<path style="opacity:1;fill:#15a5ea;" d="m40.83,263.9,0,1.243,4.36,0,0-1.243z"/>
+<path style="opacity:1;fill:#3366bb;" d="m40.47,260.4,0,8,5,0,0-8zm1,1,3,0,0,6-3,0z"/>
+<path style="opacity:1;fill:#3366bb;" d="m38.47,259.4,1,0,0,10-1,0z"/>
+<path style="opacity:1;fill:#3366bb;" d="m46.47,259.4,1,0,0,10-1,0z"/>
+</g>
+</svg>
diff --git a/resources/src/mediawiki.skinning/interface.css b/resources/src/mediawiki.skinning/interface.css
new file mode 100644 (file)
index 0000000..b57ee36
--- /dev/null
@@ -0,0 +1,76 @@
+/**
+ * MediaWiki style sheet for common core styles on interfaces
+ *
+ * Styles for the Monobook/Vector pattern of laying out common interfaces.
+ * These ids/classes are not built into the system,
+ * they are outputted by the actual MonoBook/Vector code by convention.
+ */
+
+/* Categories */
+.catlinks {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       margin-top: 1em;
+       clear: both;
+}
+
+.editOptions {
+       background-color: #F0F0F0;
+       border: 1px solid silver;
+       border-top: none;
+       padding: 1em 1em 1.5em 1em;
+       margin-bottom: 2em;
+}
+
+.usermessage {
+       background-color: #ffce7b;
+       border: 1px solid #ffa500;
+       color: black;
+       font-weight: bold;
+       margin: 2em 0 1em;
+       padding: .5em 1em;
+       vertical-align: middle;
+}
+
+#siteNotice {
+       position: relative;
+       text-align: center;
+       margin: 0;
+}
+
+#localNotice {
+       margin-bottom: 0.9em;
+}
+
+.firstHeading {
+       margin-bottom: .1em;
+       /* These two rules hack around bug 2013 (fix for more limited bug 11325).
+        * When bug 2013 is fixed properly, they should be removed. */
+       line-height: 1.2em;
+       padding-bottom: 0;
+}
+
+/* Sub-navigation */
+#siteSub {
+       display: none;
+}
+
+#jump-to-nav {
+       /* Negate #contentSub's margin and replicate it so that the jump to links don't affect the spacing */
+       margin-top: -1.4em;
+       margin-bottom: 1.4em;
+}
+
+#contentSub,
+#contentSub2 {
+       font-size: 84%;
+       line-height: 1.2em;
+       margin: 0 0 1.4em 1em;
+       color: #545454;
+       width: auto;
+}
+
+span.subpages {
+       display: block;
+}
index 6b0bf99..55f2f89 100644 (file)
@@ -25,5 +25,9 @@
 
 .mw-changeslist-legend dd {
        margin-left: 1.5em;
+}
+
+.mw-changeslist-legend dt,
+.mw-changeslist-legend dd {
        line-height: 1.3em;
 }
index 0356fc7..d245726 100644 (file)
@@ -118,3 +118,8 @@ table.mw-userrights-groups * td,
 table.mw-userrights-groups * th {
        padding-right: 1.5em;
 }
+
+/* Special:Contributions */
+.mw-contributions-form select {
+       vertical-align: middle;
+}
index afb0905..e27e34a 100644 (file)
@@ -12,7 +12,7 @@
 
 /*
  * Hide, but keep accessible for screen-readers.
- * Like .mw-jump, #jump-to-nav from skins/common/shared.css
+ * Like .mw-jump, #jump-to-nav from shared.css
  */
 .mw-navigation-hint {
        overflow: hidden;
index e553f44..1f6429b 100644 (file)
@@ -5,7 +5,7 @@ jQuery( function ( $ ) {
        var $preftoc, $preferences, $fieldsets, $legends,
                hash, labelFunc,
                $tzSelect, $tzTextbox, $localtimeHolder, servertime,
-               $checkBoxes;
+               $checkBoxes, savedWindowOnBeforeUnload;
 
        labelFunc = function () {
                return this.id.replace( /^mw-prefsection/g, 'preftab' );
@@ -263,4 +263,43 @@ jQuery( function ( $ ) {
        $( '#mw-input-wpsearcheverything' ).change( function () {
                $checkBoxes.prop( 'disabled', $( this ).prop( 'checked' ) );
        } );
+
+       // 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' ) );
+                       }
+
+                       // 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' );
+       } );
 } );
index ef95507..4b6c14e 100644 (file)
@@ -106,9 +106,10 @@ fieldset#mw-searchoptions div#mw-search-togglebox input {
 fieldset#mw-searchoptions table {
        float: left;
        margin-right: 3em;
+       border-collapse: collapse;
 }
 fieldset#mw-searchoptions table td {
-       padding-right: 1em;
+       padding: 0 1em 0 0;
        white-space: nowrap;
 }
 fieldset#mw-searchoptions div.divider {
index a4128f9..b27fe34 100644 (file)
@@ -39,8 +39,8 @@
                                var parts = $( this ).attr( 'href' ).split( 'search=' ),
                                        lastpart = '',
                                        prefix = 'search=';
-                               if ( parts.length > 1 && parts[1].indexOf( '&' ) >= 0 ) {
-                                       lastpart = parts[1].substring( parts[1].indexOf( '&' ) );
+                               if ( parts.length > 1 && parts[1].indexOf( '&' ) !== -1 ) {
+                                       lastpart = parts[1].slice( parts[1].indexOf( '&' ) );
                                } else {
                                        prefix = '&search=';
                                }
index 3c7ad52..87de646 100644 (file)
 /**
  * JavaScript for Special:Upload
  *
- * Note that additional code still lives in skins/common/upload.js
- *
  * @private
  * @class mw.special.upload
  * @singleton
  */
 ( function ( mw, $ ) {
+       var ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
+               $license = $( '#wpLicense' ), uploadWarning, uploadLicense;
+
+       window.wgUploadWarningObj = uploadWarning = {
+               responseCache: { '': '&nbsp;' },
+               nameToCheck: '',
+               typing: false,
+               delay: 500, // ms
+               timeoutID: false,
+
+               keypress: function () {
+                       if ( !ajaxUploadDestCheck ) {
+                               return;
+                       }
+
+                       // Find file to upload
+                       if ( !$( '#wpDestFile' ).length || !$( '#wpDestFile-warning' ).length ) {
+                               return;
+                       }
+
+                       this.nameToCheck = $( '#wpDestFile' ).val();
+
+                       // Clear timer
+                       if ( this.timeoutID ) {
+                               clearTimeout( this.timeoutID );
+                       }
+                       // Check response cache
+                       if ( this.responseCache.hasOwnProperty( this.nameToCheck ) ) {
+                               this.setWarning( this.responseCache[this.nameToCheck] );
+                               return;
+                       }
+
+                       this.timeoutID = setTimeout( function () {
+                               uploadWarning.timeout();
+                       }, this.delay );
+               },
+
+               checkNow: function ( fname ) {
+                       if ( !ajaxUploadDestCheck ) {
+                               return;
+                       }
+                       if ( this.timeoutID ) {
+                               clearTimeout( this.timeoutID );
+                       }
+                       this.nameToCheck = fname;
+                       this.timeout();
+               },
+
+               timeout: function () {
+                       var $spinnerDestCheck;
+                       if ( !ajaxUploadDestCheck || this.nameToCheck === '' ) {
+                               return;
+                       }
+                       $spinnerDestCheck = $.createSpinner().insertAfter( '#wpDestFile' );
+
+                       ( new mw.Api() ).get( {
+                               action: 'query',
+                               titles: ( new mw.Title( this.nameToCheck, mw.config.get( 'wgNamespaceIds' ).file ) ).getPrefixedText(),
+                               prop: 'imageinfo',
+                               iiprop: 'uploadwarning',
+                               indexpageids: ''
+                       } ).done( function ( result ) {
+                               var resultOut = '';
+                               if ( result.query ) {
+                                       resultOut = result.query.pages[result.query.pageids[0]].imageinfo[0];
+                               }
+                               $spinnerDestCheck.remove();
+                               uploadWarning.processResult( resultOut, uploadWarning.nameToCheck );
+                       } );
+               },
+
+               processResult: function ( result, fileName ) {
+                       this.setWarning( result.html );
+                       this.responseCache[fileName] = result.html;
+               },
+
+               setWarning: function ( warning ) {
+                       $( '#wpDestFile-warning' ).html( warning );
+
+                       // Set a value in the form indicating that the warning is acknowledged and
+                       // doesn't need to be redisplayed post-upload
+                       if ( !warning ) {
+                               $( '#wpDestFileWarningAck' ).val( '' );
+                       } else {
+                               $( '#wpDestFileWarningAck' ).val( '1' );
+                       }
+
+               }
+       };
+
+       uploadLicense = {
+
+               responseCache: { '': '' },
+
+               fetchPreview: function ( license ) {
+                       var $spinnerLicense;
+                       if ( !mw.config.get( 'wgAjaxLicensePreview' ) ) {
+                               return;
+                       }
+                       if ( this.responseCache.hasOwnProperty( license ) ) {
+                               this.showPreview( this.responseCache[license] );
+                               return;
+                       }
+
+                       $spinnerLicense = $.createSpinner().insertAfter( '#wpLicense' );
+
+                       ( new mw.Api() ).get( {
+                               action: 'parse',
+                               text: '{{' + license + '}}',
+                               title: $( '#wpDestFile' ).val() || 'File:Sample.jpg',
+                               prop: 'text',
+                               pst: ''
+                       } ).done( function ( result ) {
+                               $spinnerLicense.remove();
+                               uploadLicense.processResult( result, license );
+                       } );
+               },
+
+               processResult: function ( result, license ) {
+                       this.responseCache[license] = result.parse.text['*'];
+                       this.showPreview( this.responseCache[license] );
+               },
+
+               showPreview: function ( preview ) {
+                       $( '#mw-license-preview' ).html( preview );
+               }
+
+       };
+
+       $( 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
+                       // has been changed
+                       $( '#wpDestFile' ).change( function () {
+                               uploadWarning.checkNow( $( this ).val() );
+                       } );
+                       // Insert a row where the warnings will be displayed just below the
+                       // wpDestFile row
+                       $( '#mw-htmlform-description tbody' ).append(
+                               $( '<tr>' ).append(
+                                       $( '<td>' )
+                                               .attr( 'id', 'wpDestFile-warning' )
+                                               .attr( 'colspan', 2 )
+                               )
+                       );
+               }
+
+               if ( mw.config.get( 'wgAjaxLicensePreview' ) && $license.length ) {
+                       // License selector check
+                       $license.change( function () {
+                               // We might show a preview
+                               uploadLicense.fetchPreview( $license.val() );
+                       } );
+
+                       // License selector table row
+                       $license.closest( 'tr' ).after(
+                               $( '<tr>' ).append(
+                                       $( '<td>' ),
+                                       $( '<td>' ).attr( 'id', 'mw-license-preview' )
+                               )
+                       );
+               }
+
+               // fillDestFile setup
+               $.each( mw.config.get( 'wgUploadSourceIds' ), function ( index, sourceId ) {
+                       $( '#' + sourceId ).change( function () {
+                               var path, slash, backslash, fname;
+                               if ( !mw.config.get( 'wgUploadAutoFill' ) ) {
+                                       return;
+                               }
+                               // Remove any previously flagged errors
+                               $( '#mw-upload-permitted' ).attr( 'class', '' );
+                               $( '#mw-upload-prohibited' ).attr( 'class', '' );
+
+                               path = $( this ).val();
+                               // Find trailing part
+                               slash = path.lastIndexOf( '/' );
+                               backslash = path.lastIndexOf( '\\' );
+                               if ( slash === -1 && backslash === -1 ) {
+                                       fname = path;
+                               } else if ( slash > backslash ) {
+                                       fname = path.slice( slash + 1 );
+                               } else {
+                                       fname = path.slice( backslash + 1 );
+                               }
+
+                               // Clear the filename if it does not have a valid extension.
+                               // URLs are less likely to have a useful extension, so don't include them in the
+                               // extension check.
+                               if (
+                                       mw.config.get( 'wgStrictFileExtensions' ) &&
+                                       mw.config.get( 'wgFileExtensions' ) &&
+                                       $( this ).attr( 'id' ) !== 'wpUploadFileURL'
+                               ) {
+                                       if (
+                                               fname.lastIndexOf( '.' ) === -1 ||
+                                               $.inArray(
+                                                       fname.slice( fname.lastIndexOf( '.' ) + 1 ).toLowerCase(),
+                                                       $.map( mw.config.get( 'wgFileExtensions' ), function ( element ) {
+                                                               return element.toLowerCase();
+                                                       } )
+                                               ) === -1
+                                       ) {
+                                               // Not a valid extension
+                                               // Clear the upload and set mw-upload-permitted to error
+                                               $( this ).val( '' );
+                                               $( '#mw-upload-permitted' ).attr( 'class', 'error' );
+                                               $( '#mw-upload-prohibited' ).attr( 'class', 'error' );
+                                               // Clear wpDestFile as well
+                                               $( '#wpDestFile' ).val( '' );
+
+                                               return false;
+                                       }
+                               }
+
+                               // Replace spaces by underscores
+                               fname = fname.replace( / /g, '_' );
+                               // Capitalise first letter if needed
+                               if ( mw.config.get( 'wgCapitalizeUploads' ) ) {
+                                       fname = fname.charAt( 0 ).toUpperCase().concat( fname.slice( 1 ) );
+                               }
+
+                               // Output result
+                               if ( $( '#wpDestFile' ).length ) {
+                                       // Call decodeURIComponent function to remove possible URL-encoded characters
+                                       // from the file name (bug 30390). Especially likely with upload-form-url.
+                                       // decodeURIComponent can throw an exception if input is invalid utf-8
+                                       try {
+                                               $( '#wpDestFile' ).val( decodeURIComponent( fname ) );
+                                       } catch ( err ) {
+                                               $( '#wpDestFile' ).val( fname );
+                                       }
+                                       uploadWarning.checkNow( fname );
+                               }
+                       } );
+               } );
+       } );
+
        // Add a preview to the upload form
        $( function () {
                /**
                                ctx,
                                meta,
                                previewSize = 180,
-                               thumb = $( '<div id="mw-upload-thumbnail" class="thumb tright">' +
-                                                       '<div class="thumbinner">' +
-                                                               '<div class="mw-small-spinner" style="width: 180px; height: 180px"></div>' +
-                                                               '<div class="thumbcaption"><div class="filename"></div><div class="fileinfo"></div></div>' +
-                                                       '</div>' +
-                                               '</div>' );
+                               thumb = mw.template.get( 'mediawiki.special.upload', 'thumbnail.html' ).render();
 
                        thumb.find( '.filename' ).text( file.name ).end()
                                .find( '.fileinfo' ).text( prettySize( file.size ) ).end();
                }
        } );
 
+       $( function () {
+               // Prevent losing work
+               var allowCloseWindow,
+                       $uploadForm = $( '#mw-upload-form' );
+
+               if ( !mw.user.options.get( 'useeditwarning' ) ) {
+                       // If the user doesn't want edit warnings, don't set things up.
+                       return;
+               }
+
+               $uploadForm.data( 'origtext', $uploadForm.serialize() );
+
+               allowCloseWindow = mw.confirmCloseWindow( {
+                       test: function () {
+                               return $( '#wpUploadFile' ).get( 0 ).files.length !== 0 ||
+                                       $uploadForm.data( 'origtext' ) !== $uploadForm.serialize();
+                       },
+
+                       message: mw.msg( 'editwarning-warning' ),
+                       namespace: 'uploadwarning'
+               } );
+
+               $uploadForm.submit( function () {
+                       allowCloseWindow();
+               } );
+       } );
 }( mediaWiki, jQuery ) );
index b66f20e..28b1446 100644 (file)
@@ -43,6 +43,7 @@ section.mw-form-header {
        border: 1px solid #c9c9c9;
        padding: 10px;
        text-align: center;
+       margin-bottom: 15px;
 }
 
 .mw-createacct-captcha-assisted {
index 68d3f61..a32a790 100644 (file)
                        } );
                }
 
-               $input.on( events, $.debounce( 250, updateUsernameStatus ) );
+               $input.on( events, $.debounce( 1000, updateUsernameStatus ) );
        } );
 }( mediaWiki, jQuery ) );
index 764e377..7c87d68 100644 (file)
@@ -12,3 +12,7 @@
 th.mw-version-ext-col-label {
        font-size: 0.9em;
 }
+
+.mw-version-ext-vcs-version {
+       unicode-bidi: embed;
+}
diff --git a/resources/src/mediawiki.special/templates/thumbnail.html b/resources/src/mediawiki.special/templates/thumbnail.html
new file mode 100644 (file)
index 0000000..73042f2
--- /dev/null
@@ -0,0 +1,9 @@
+<div id="mw-upload-thumbnail" class="thumb tright">
+       <div class="thumbinner">
+               <div class="mw-small-spinner" style="width: 180px; height: 180px"></div>
+               <div class="thumbcaption">
+                       <div class="filename"></div>
+                       <div class="fileinfo"></div>
+               </div>
+       </div>
+</div>
diff --git a/resources/src/mediawiki.toolbar/images/ar/button_bold.png b/resources/src/mediawiki.toolbar/images/ar/button_bold.png
new file mode 100644 (file)
index 0000000..e524f6c
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/ar/button_bold.png differ
diff --git a/resources/src/mediawiki.toolbar/images/ar/button_headline.png b/resources/src/mediawiki.toolbar/images/ar/button_headline.png
new file mode 100644 (file)
index 0000000..398e561
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/ar/button_headline.png differ
diff --git a/resources/src/mediawiki.toolbar/images/ar/button_italic.png b/resources/src/mediawiki.toolbar/images/ar/button_italic.png
new file mode 100644 (file)
index 0000000..6ec73e9
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/ar/button_italic.png differ
diff --git a/resources/src/mediawiki.toolbar/images/ar/button_link.png b/resources/src/mediawiki.toolbar/images/ar/button_link.png
new file mode 100644 (file)
index 0000000..c9c63f6
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/ar/button_link.png differ
diff --git a/resources/src/mediawiki.toolbar/images/ar/button_nowiki.png b/resources/src/mediawiki.toolbar/images/ar/button_nowiki.png
new file mode 100644 (file)
index 0000000..743ea61
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/ar/button_nowiki.png differ
diff --git a/resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png b/resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png
new file mode 100644 (file)
index 0000000..5c10cfe
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png differ
diff --git a/resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png b/resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png
new file mode 100644 (file)
index 0000000..72209d7
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png differ
diff --git a/resources/src/mediawiki.toolbar/images/be-tarask/button_link.png b/resources/src/mediawiki.toolbar/images/be-tarask/button_link.png
new file mode 100644 (file)
index 0000000..09c86fb
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/be-tarask/button_link.png differ
diff --git a/resources/src/mediawiki.toolbar/images/de/button_bold.png b/resources/src/mediawiki.toolbar/images/de/button_bold.png
new file mode 100644 (file)
index 0000000..367d5bc
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/de/button_bold.png differ
diff --git a/resources/src/mediawiki.toolbar/images/de/button_italic.png b/resources/src/mediawiki.toolbar/images/de/button_italic.png
new file mode 100644 (file)
index 0000000..fdd8c9f
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/de/button_italic.png differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_bold.png b/resources/src/mediawiki.toolbar/images/en/button_bold.png
new file mode 100644 (file)
index 0000000..75c3f10
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/en/button_bold.png differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_extlink.png b/resources/src/mediawiki.toolbar/images/en/button_extlink.png
new file mode 100644 (file)
index 0000000..458943c
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/en/button_extlink.png differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_headline.png b/resources/src/mediawiki.toolbar/images/en/button_headline.png
new file mode 100644 (file)
index 0000000..9cf751d
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/en/button_headline.png differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_hr.png b/resources/src/mediawiki.toolbar/images/en/button_hr.png
new file mode 100644 (file)
index 0000000..47e1ca4
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/en/button_hr.png differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_image.png b/resources/src/mediawiki.toolbar/images/en/button_image.png
new file mode 100644 (file)
index 0000000..6919296
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/en/button_image.png differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_italic.png b/resources/src/mediawiki.toolbar/images/en/button_italic.png
new file mode 100644 (file)
index 0000000..527fbd1
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/en/button_italic.png differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_link.png b/resources/src/mediawiki.toolbar/images/en/button_link.png
new file mode 100644 (file)
index 0000000..eb5634b
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/en/button_link.png differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_media.png b/resources/src/mediawiki.toolbar/images/en/button_media.png
new file mode 100644 (file)
index 0000000..4194ec1
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/en/button_media.png differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_nowiki.png b/resources/src/mediawiki.toolbar/images/en/button_nowiki.png
new file mode 100644 (file)
index 0000000..2ba818d
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/en/button_nowiki.png differ
diff --git a/resources/src/mediawiki.toolbar/images/en/button_sig.png b/resources/src/mediawiki.toolbar/images/en/button_sig.png
new file mode 100644 (file)
index 0000000..fe34b3f
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/en/button_sig.png differ
diff --git a/resources/src/mediawiki.toolbar/images/fa/button_bold.png b/resources/src/mediawiki.toolbar/images/fa/button_bold.png
new file mode 100644 (file)
index 0000000..c54d094
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/fa/button_bold.png differ
diff --git a/resources/src/mediawiki.toolbar/images/fa/button_headline.png b/resources/src/mediawiki.toolbar/images/fa/button_headline.png
new file mode 100644 (file)
index 0000000..9890d15
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/fa/button_headline.png differ
diff --git a/resources/src/mediawiki.toolbar/images/fa/button_italic.png b/resources/src/mediawiki.toolbar/images/fa/button_italic.png
new file mode 100644 (file)
index 0000000..33f91ed
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/fa/button_italic.png differ
diff --git a/resources/src/mediawiki.toolbar/images/fa/button_link.png b/resources/src/mediawiki.toolbar/images/fa/button_link.png
new file mode 100644 (file)
index 0000000..76b939e
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/fa/button_link.png differ
diff --git a/resources/src/mediawiki.toolbar/images/fa/button_nowiki.png b/resources/src/mediawiki.toolbar/images/fa/button_nowiki.png
new file mode 100644 (file)
index 0000000..743ea61
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/fa/button_nowiki.png differ
diff --git a/resources/src/mediawiki.toolbar/images/ksh/LICENSE b/resources/src/mediawiki.toolbar/images/ksh/LICENSE
new file mode 100644 (file)
index 0000000..47ecfe4
--- /dev/null
@@ -0,0 +1,7 @@
+
+button_italic.png
+-------------------
+Source : http://commons.wikimedia.org/wiki/Image:Button_S_italic.png
+License: Public domain
+Author : Purodha Blissenbach, http://ksh.wikipedia.org/wiki/User:Purodha
+
diff --git a/resources/src/mediawiki.toolbar/images/ksh/button_italic.png b/resources/src/mediawiki.toolbar/images/ksh/button_italic.png
new file mode 100644 (file)
index 0000000..15496c0
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/ksh/button_italic.png differ
diff --git a/resources/src/mediawiki.toolbar/images/ru/LICENSE b/resources/src/mediawiki.toolbar/images/ru/LICENSE
new file mode 100644 (file)
index 0000000..bedcec6
--- /dev/null
@@ -0,0 +1,17 @@
+button_bold.png
+---------------
+Source : http://commons.wikimedia.org/wiki/Image:Button_bold_ukr.png
+License: Public domain
+Author : Alexey Belomoev
+
+button_italic.png
+------------------------
+Source : http://commons.wikimedia.org/wiki/Image:Button_italic_ukr.png
+License: Public domain
+Author : Alexey Belomoev
+
+button_link.png
+-----------------
+Source : http://commons.wikimedia.org/wiki/Image:Button_internal_link_ukr.png
+License: GPL
+Author : Saproj, Erik Möller
diff --git a/resources/src/mediawiki.toolbar/images/ru/button_bold.png b/resources/src/mediawiki.toolbar/images/ru/button_bold.png
new file mode 100644 (file)
index 0000000..eae30d9
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/ru/button_bold.png differ
diff --git a/resources/src/mediawiki.toolbar/images/ru/button_italic.png b/resources/src/mediawiki.toolbar/images/ru/button_italic.png
new file mode 100644 (file)
index 0000000..b958d22
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/ru/button_italic.png differ
diff --git a/resources/src/mediawiki.toolbar/images/ru/button_link.png b/resources/src/mediawiki.toolbar/images/ru/button_link.png
new file mode 100644 (file)
index 0000000..12ad373
Binary files /dev/null and b/resources/src/mediawiki.toolbar/images/ru/button_link.png differ
diff --git a/resources/src/mediawiki.toolbar/toolbar.js b/resources/src/mediawiki.toolbar/toolbar.js
new file mode 100644 (file)
index 0000000..f9944b4
--- /dev/null
@@ -0,0 +1,202 @@
+/**
+ * Interface for the classic edit toolbar.
+ *
+ * @class mw.toolbar
+ * @singleton
+ */
+( function ( mw, $ ) {
+       var toolbar, isReady, $toolbar, queue, slice, $currentFocused;
+
+       /**
+        * Internal helper that does the actual insertion of the button into the toolbar.
+        *
+        * For backwards-compatibility, passing `imageFile`, `speedTip`, `tagOpen`, `tagClose`,
+        * `sampleText` and `imageId` as separate arguments (in this order) is also supported.
+        *
+        * @private
+        *
+        * @param {Object} button Object with the following properties.
+        *  You are required to provide *either* the `onClick` parameter, or the three parameters
+        *  `tagOpen`, `tagClose` and `sampleText`, but not both (they're mutually exclusive).
+        * @param {string} [button.imageFile] Image to use for the button.
+        * @param {string} button.speedTip Tooltip displayed when user mouses over the button.
+        * @param {Function} [button.onClick] Function to be executed when the button is clicked.
+        * @param {string} [button.tagOpen]
+        * @param {string} [button.tagClose]
+        * @param {string} [button.sampleText] Alternative to `onClick`. `tagOpen`, `tagClose` and
+        *  `sampleText` together provide the markup that should be inserted into page text at
+        *  current cursor position.
+        * @param {string} [button.imageId] `id` attribute of the button HTML element. Can be
+        *  used to define the image with CSS if it's not provided as `imageFile`.
+        */
+       function insertButton( button, speedTip, tagOpen, tagClose, sampleText, imageId ) {
+               var $button;
+
+               // Backwards compatibility
+               if ( typeof button !== 'object' ) {
+                       button = {
+                               imageFile: button,
+                               speedTip: speedTip,
+                               tagOpen: tagOpen,
+                               tagClose: tagClose,
+                               sampleText: sampleText,
+                               imageId: imageId
+                       };
+               }
+
+               if ( button.imageFile ) {
+                       $button = $( '<img>' ).attr( {
+                               src: button.imageFile,
+                               alt: button.speedTip,
+                               title: button.speedTip,
+                               id: button.imageId || undefined,
+                               'class': 'mw-toolbar-editbutton'
+                       } );
+               } else {
+                       $button = $( '<div>' ).attr( {
+                               title: button.speedTip,
+                               id: button.imageId || undefined,
+                               'class': 'mw-toolbar-editbutton'
+                       } );
+               }
+
+               $button.click( function ( e ) {
+                       if ( button.onClick !== undefined ) {
+                               button.onClick( e );
+                       } else {
+                               toolbar.insertTags( button.tagOpen, button.tagClose, button.sampleText );
+                       }
+
+                       return false;
+               } );
+
+               $toolbar.append( $button );
+       }
+
+       isReady = false;
+       $toolbar = false;
+
+       /**
+        * @private
+        * @property {Array}
+        * Contains button objects (and for backwards compatibilty, it can
+        * also contains an arguments array for insertButton).
+        */
+       queue = [];
+       slice = queue.slice;
+
+       toolbar = {
+
+               /**
+                * Add buttons to the toolbar.
+                *
+                * Takes care of race conditions and time-based dependencies by placing buttons in a queue if
+                * this method is called before the toolbar is created.
+                *
+                * For backwards-compatibility, passing `imageFile`, `speedTip`, `tagOpen`, `tagClose`,
+                * `sampleText` and `imageId` as separate arguments (in this order) is also supported.
+                *
+                * @inheritdoc #insertButton
+                */
+               addButton: function () {
+                       if ( isReady ) {
+                               insertButton.apply( toolbar, arguments );
+                       } else {
+                               // Convert arguments list to array
+                               queue.push( slice.call( arguments ) );
+                       }
+               },
+
+               /**
+                * Add multiple buttons to the toolbar (see also #addButton).
+                *
+                * Example usage:
+                *
+                *     addButtons( [ { .. }, { .. }, { .. } ] );
+                *     addButtons( { .. }, { .. } );
+                *
+                * @param {Object|Array...} [buttons] An array of button objects or the first
+                *  button object in a list of variadic arguments.
+                */
+               addButtons: function ( buttons ) {
+                       if ( !$.isArray( buttons ) ) {
+                               buttons = slice.call( arguments );
+                       }
+                       if ( isReady ) {
+                               $.each( buttons, function () {
+                                       insertButton( this );
+                               } );
+                       } else {
+                               // Push each button into the queue
+                               queue.push.apply( queue, buttons );
+                       }
+               },
+
+               /**
+                * Apply tagOpen/tagClose to selection in currently focused textarea.
+                *
+                * Uses `sampleText` if selection is empty.
+                *
+                * @param {string} tagOpen
+                * @param {string} tagClose
+                * @param {string} sampleText
+                */
+               insertTags: function ( tagOpen, tagClose, sampleText ) {
+                       if ( $currentFocused && $currentFocused.length ) {
+                               $currentFocused.textSelection(
+                                       'encapsulateSelection', {
+                                               pre: tagOpen,
+                                               peri: sampleText,
+                                               post: tagClose
+                                       }
+                               );
+                       }
+               }
+       };
+
+       // Legacy (for compatibility with the code previously in skins/common.edit.js)
+       mw.log.deprecate( window, 'addButton', toolbar.addButton, 'Use mw.toolbar.addButton instead.' );
+       mw.log.deprecate( window, 'insertTags', toolbar.insertTags, 'Use mw.toolbar.insertTags instead.' );
+
+       // For backwards compatibility. Used to be called from EditPage.php, maybe other places as well.
+       mw.log.deprecate( toolbar, 'init', $.noop );
+
+       // Expose API publicly
+       mw.toolbar = toolbar;
+
+       $( function () {
+               var i, button;
+
+               // Used to determine where to insert tags
+               $currentFocused = $( '#wpTextbox1' );
+
+               // Populate the selector cache for $toolbar
+               $toolbar = $( '#toolbar' );
+
+               for ( i = 0; i < queue.length; i++ ) {
+                       button = queue[i];
+                       if ( $.isArray( button ) ) {
+                               // Forwarded arguments array from mw.toolbar.addButton
+                               insertButton.apply( toolbar, button );
+                       } else {
+                               // Raw object from mw.toolbar.addButtons
+                               insertButton( button );
+                       }
+               }
+
+               // Clear queue
+               queue.length = 0;
+
+               // This causes further calls to addButton to go to insertion directly
+               // instead of to the queue.
+               // It is important that this is after the one and only loop through
+               // the the queue
+               isReady = true;
+
+               // Apply to dynamically created textboxes as well as normal ones
+               $( document ).on( 'focus', 'textarea, input:text', function () {
+                       $currentFocused = $( this );
+               } );
+       } );
+
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.toolbar/toolbar.less b/resources/src/mediawiki.toolbar/toolbar.less
new file mode 100644 (file)
index 0000000..d65b284
--- /dev/null
@@ -0,0 +1,42 @@
+@import "mediawiki.mixins";
+
+#mw-editbutton-bold {
+       .background-image("images/@{button-bold}");
+}
+
+#mw-editbutton-italic {
+       .background-image("images/@{button-italic}");
+}
+
+#mw-editbutton-link {
+       .background-image("images/@{button-link}");
+}
+
+#mw-editbutton-extlink {
+       .background-image("images/@{button-extlink}");
+}
+
+#mw-editbutton-headline {
+       .background-image("images/@{button-headline}");
+}
+
+#mw-editbutton-image {
+       .background-image("images/@{button-image}");
+}
+
+#mw-editbutton-media {
+       .background-image("images/@{button-media}");
+}
+
+#mw-editbutton-nowiki {
+       .background-image("images/@{button-nowiki}");
+}
+
+// Who decided to make only this single one different than the name of the data item?
+#mw-editbutton-signature {
+       .background-image("images/@{button-sig}");
+}
+
+#mw-editbutton-hr {
+       .background-image("images/@{button-hr}");
+}
index e1b258d..f0fb7b9 100644 (file)
@@ -3,13 +3,8 @@
 @import "mediawiki.ui/mixins";
 
 // Helpers
-.mw-ui-anchor( @mainColor ) {
-       // Make all context classes take the main color in IE6
-       .select-ie6-only& {
-               &:link, &:visited, &:hover, &:focus, &:active {
-                       color: @mainColor;
-               }
-       }
+.mixin-mw-ui-anchor-styles( @mainColor ) {
+       color: @mainColor;
 
        // Hover state
        &:hover {
                outline: none; // outline fix
        }
 
-       color: @mainColor;
-
        // Quiet mode is gray at first
        &.mw-ui-quiet {
-               .mw-ui-anchor-quiet( @mainColor );
+               .mixin-mw-ui-anchor-styles-quiet( @mainColor );
        }
 }
 
-.mw-ui-anchor-quiet( @mainColor ) {
-       color: @colorTextLight;
-       text-decoration: none;
+/*
+Anchors
 
-       &:hover {
-               color: @mainColor;
-       }
-       &:focus, &:active {
-               color: darken( @mainColor, @colorDarkenPercentage );
-       }
-}
+The anchor base type can be applied to A elements when a basic context styling needs to be given to a link, without
+having to assign it as a button type. mw-ui-anchor only changes the text color, and should not be used in combination
+with other base classes, such as mw-ui-button.
 
-/*
-Text & Anchors
+Markup:
+<a href="#" class="mw-ui-anchor mw-ui-progressive">Progressive</a>
+<a href="#" class="mw-ui-anchor mw-ui-constructive">Constructive</a>
+<a href="#" class="mw-ui-anchor mw-ui-destructive">Destructive</a>
 
-Allows you to give text a context as to the type of action it is indicating.
+.mw-ui-quiet - Quiet until interaction.
 
-Styleguide 6.
+Styleguide 6.2.
 */
 
+// Setup compound anchor selectors (such as .mw-ui-anchor.mw-ui-progressive)
+.mw-ui-anchor {
+       &.mw-ui-progressive {
+               .mixin-mw-ui-anchor-styles( @colorProgressive );
+       }
+
+       &.mw-ui-constructive {
+               .mixin-mw-ui-anchor-styles( @colorConstructive );
+       }
+
+       &.mw-ui-destructive {
+               .mixin-mw-ui-anchor-styles( @colorDestructive );
+       }
+}
+
 /*
-Guidelines
+Quiet anchors
 
-This context should only applied on elements without special behavior (DIV, SPAN, etc.), including A elements. These classes cannot be applied for styling purposes on other elements (such as form elements), except when used in combination with .mw-ui-button to alter a button context.
+Use quiet anchors when they are less important and alongside other progressive/destructive/progressive
+anchors. Use of quiet anchors is not recommended on mobile/tablet due to lack of hover state.
 
 Markup:
-<a href=# class="mw-ui-progressive {$modifiers}">Progressive</a>
-<a href=# class="mw-ui-constructive {$modifiers}">Constructive</a>
-<a href=# class="mw-ui-destructive {$modifiers}">Destructive</a>
+<a href="#" class="mw-ui-anchor mw-ui-progressive mw-ui-quiet">Progressive</a>
+<a href="#" class="mw-ui-anchor mw-ui-constructive mw-ui-quiet">Constructive</a>
+<a href="#" class="mw-ui-anchor mw-ui-destructive mw-ui-quiet">Destructive</a>
 
-.mw-ui-quiet - Quiet until interaction.
-
-Styleguide 6.1.
+Styleguide 6.2.1.
 */
-.mw-ui-progressive {
-       .mw-ui-anchor( @colorProgressive );
-}
-.mw-ui-constructive {
-       .mw-ui-anchor( @colorConstructive );
-}
-.mw-ui-destructive {
-       .mw-ui-anchor( @colorDestructive );
-}
-.mw-ui-quiet {
-       .mw-ui-anchor-quiet( @colorTextLight );
+.mixin-mw-ui-anchor-styles-quiet( @mainColor ) {
+       color: @colorTextLight;
+       text-decoration: none;
+
+       &:hover {
+               color: @mainColor;
+       }
+       &:focus, &:active {
+               color: darken( @mainColor, @colorDarkenPercentage );
+       }
 }
index ebf4779..6ba7bf7 100644 (file)
 //
 // Styleguide 2.
 
-@buttonBorderRadius: 3px;
 @transitionDuration: .1s;
 @transitionFunction: ease-in-out;
 
 // Neutral button styling
 //
 // Markup:
-// <button class="mw-ui-button">.mw-ui-button</button>
-// <button class="mw-ui-button" disabled>.mw-ui-button</button>
+// <div>
+//   <button class="mw-ui-button">.mw-ui-button</button>
+// </div>
+// <div>
+//   <button class="mw-ui-button" disabled>.mw-ui-button</button>
+// </div>
 //
 // Styleguide 2.1.
 .mw-ui-button {
+       // Inherit the font rather than apply user agent stylesheet (bug 70072)
+       font-family: inherit;
        font-size: 1em;
        // Container layout
        display: inline-block;
@@ -41,7 +46,8 @@
 
        // Container styling
        .button-colors(#FFF);
-       border-radius: @buttonBorderRadius;
+       border-radius: @borderRadius;
+       min-width: 4em;
 
        // Ensure that buttons and inputs are nicely aligned when they have differing heights
        vertical-align: middle;
        // using the mw-ui-big class.
        //
        // Markup:
-       // <button class="mw-ui-button mw-ui-big">.mw-ui-button</button>
-       // <button class="mw-ui-button mw-ui-progressive mw-ui-big">.mw-ui-progressive</button>
-       // <button class="mw-ui-button mw-ui-constructive mw-ui-big">.mw-ui-constructive</button>
-       // <button class="mw-ui-button mw-ui-destructive mw-ui-big">.mw-ui-destructive</button>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-big">.mw-ui-button</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-progressive mw-ui-big">.mw-ui-progressive</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-constructive mw-ui-big">.mw-ui-constructive</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-destructive mw-ui-big">.mw-ui-destructive</button>
+       // </div>
        //
        // Styleguide 2.1.6.
        &.mw-ui-big {
        // Some buttons might need to be stacked.
        //
        // Markup:
-       // <button class="mw-ui-button mw-ui-block">.mw-ui-button</button>
-       // <button class="mw-ui-button mw-ui-progressive mw-ui-block">.mw-ui-progressive</button>
-       // <button class="mw-ui-button mw-ui-constructive mw-ui-block">.mw-ui-constructive</button>
-       // <button class="mw-ui-button mw-ui-destructive mw-ui-block">.mw-ui-destructive</button>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-block">.mw-ui-button</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-progressive mw-ui-block">.mw-ui-progressive</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-constructive mw-ui-block">.mw-ui-constructive</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-destructive mw-ui-block">.mw-ui-destructive</button>
+       // </div>
        //
        // Styleguide 2.1.5.
        &.mw-ui-block {
        // .mw-ui-primary is deprecated, kept for compatibility.
        //
        // Markup:
-       // <button class="mw-ui-button mw-ui-progressive">.mw-ui-progressive</button>
-       // <button class="mw-ui-button mw-ui-progressive" disabled>.mw-ui-progressive</button>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-progressive">.mw-ui-progressive</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-progressive" disabled>.mw-ui-progressive</button>
+       // </div>
        //
        // Styleguide 2.1.1.
        &.mw-ui-progressive,
        // e.g. save changes button
        //
        // Markup:
-       // <button class="mw-ui-button mw-ui-constructive">.mw-ui-constructive</button>
-       // <button class="mw-ui-button mw-ui-constructive" disabled>.mw-ui-constructive</button>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-constructive">.mw-ui-constructive</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-constructive" disabled>.mw-ui-constructive</button>
+       // </div>
        //
        // Styleguide 2.1.2.
        &.mw-ui-constructive {
 
        // Destructive buttons
        //
-       // Use destructive buttons for actions which result in the destruction of data.
-       // e.g. deleting a page.
+       // Use destructive buttons for actions that remove or limit, such as deleting a page or blocking a user.
        // This should not be used for cancel buttons.
        //
        // Markup:
-       // <button class="mw-ui-button mw-ui-destructive">.mw-ui-destructive</button>
-       // <button class="mw-ui-button mw-ui-destructive" disabled>.mw-ui-destructive</button>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-destructive">.mw-ui-destructive</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-destructive" disabled>.mw-ui-destructive</button>
+       // </div>
        //
        // Styleguide 2.1.3.
        &.mw-ui-destructive {
 
        // Quiet buttons
        //
-       // Use quiet buttons when they are less important and alongisde other progressive/destructive/progressive buttons.
+       // Use quiet buttons when they are less important and alongside other constructive/progressive/destructive buttons.
+       // Use of quiet buttons is not recommended on mobile/tablet due to lack of hover state.
        //
        // Markup:
-       // <button class="mw-ui-button mw-ui-quiet">.mw-ui-button</button>
-       // <button class="mw-ui-button mw-ui-constructive mw-ui-quiet">.mw-ui-constructive</button>
-       // <button class="mw-ui-button mw-ui-constructive mw-ui-quiet" disabled>.mw-ui-constructive</button>
-       // <button class="mw-ui-button mw-ui-destructive mw-ui-quiet">.mw-ui-destructive</button>
-       // <button class="mw-ui-button mw-ui-destructive mw-ui-quiet" disabled>.mw-ui-destructive</button>
-       // <button class="mw-ui-button mw-ui-progressive mw-ui-quiet">.mw-ui-progressive</button>
-       // <button class="mw-ui-button mw-ui-progressive mw-ui-quiet" disabled>.mw-ui-progressive</button>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-quiet">.mw-ui-button</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-constructive mw-ui-quiet">.mw-ui-constructive</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-constructive mw-ui-quiet" disabled>.mw-ui-constructive</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-destructive mw-ui-quiet">.mw-ui-destructive</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-destructive mw-ui-quiet" disabled>.mw-ui-destructive</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-progressive mw-ui-quiet">.mw-ui-progressive</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-progressive mw-ui-quiet" disabled>.mw-ui-progressive</button>
+       // </div>
        //
        // Styleguide 2.1.4.
        &.mw-ui-quiet {
@@ -209,12 +257,13 @@ a.mw-ui-button {
 //
 // Styleguide 2.2.
 .mw-ui-button-group > * {
+       min-width: 48px;
        border-radius: 0;
        float: left;
 
        &:first-child {
-               border-top-left-radius: @buttonBorderRadius;
-               border-bottom-left-radius: @buttonBorderRadius;
+               border-top-left-radius: @borderRadius;
+               border-bottom-left-radius: @borderRadius;
        }
 
        &:not(:first-child) {
@@ -222,7 +271,7 @@ a.mw-ui-button {
        }
 
        &:last-child{
-               border-top-right-radius: @buttonBorderRadius;
-               border-bottom-right-radius: @buttonBorderRadius;
+               border-top-right-radius: @borderRadius;
+               border-bottom-right-radius: @borderRadius;
        }
 }
index 6d6fdde..35a44cb 100644 (file)
@@ -1,4 +1,5 @@
 @import "mediawiki.mixins";
+@import "mediawiki.ui/variables";
 
 // Checkbox
 //
 //   <input type="checkbox" id="kss-example-5"><label for="kss-example-5">Standard checkbox</label>
 // </div>
 // <div class="mw-ui-checkbox">
-//   <input type="checkbox" id="kss-example-5-2" disabled><label for="kss-example-5-2">Disabled checkbox</label>
+//   <input type="checkbox" id="kss-example-5-checked" checked><label for="kss-example-5-checked">Standard checked checkbox</label>
+// </div>
+// <div class="mw-ui-checkbox">
+//   <input type="checkbox" id="kss-example-5-disabled" disabled><label for="kss-example-5-disabled">Disabled checkbox</label>
+// </div>
+// <div class="mw-ui-checkbox">
+//   <input type="checkbox" id="kss-example-5-disabled-checked" disabled checked><label for="kss-example-5-disabled-checked">Disabled checked checkbox</label>
 // </div>
 //
 // Styleguide 5.
@@ -22,7 +29,7 @@
        vertical-align: middle;
 }
 
-@checkboxSize: 24px;
+@checkboxSize: 1.6em;
 
 // We use the not selector to cancel out styling on IE 8 and below
 .mw-ui-checkbox:not(#noop) {
                // ensure the invisible checkbox takes up the required width
                width: @checkboxSize;
                height: @checkboxSize;
+               // This is needed for Firefox mobile (See bug 71750 to workaround default Firefox stylesheet)
+               max-width: none;
+               margin-right: .4em;
 
                // the pseudo before element of the label after the checkbox now looks like a checkbox
                & + label {
+                       cursor: pointer;
+
                        &::before {
-                                               content: '';
-                                               position: absolute;
-                                               left: 0;
-                                               display: inline-block;
-                                               border-radius: 2px;
-                                               margin-right: 18px;
-                                               width: @checkboxSize;
-                                               height: @checkboxSize;
-                                               background-color: #fff;
-                                               cursor: pointer;
-                                               border: 1px solid grey;
-                                       }
+                               content: '';
+                               position: absolute;
+                               left: 0;
+                               border-radius: @borderRadius;
+                               width: @checkboxSize;
+                               height: @checkboxSize;
+                               background-color: #fff;
+                               border: 1px solid grey;
+                       }
                }
 
                // when the input is checked, style the label pseudo before element that followed as a checked checkbox
                        + label {
                                &::before {
                                        .background-image-svg('images/checked.svg', 'images/checked.png');
+                                       .background-size( @checkboxSize, @checkboxSize );
                                        background-repeat: no-repeat;
                                        background-position: center top;
                                }
                        }
                }
 
-               @focusBottomBorderSize: 3px;
+               @focusBottomBorderSize: 0.2em;
                &:active,
                &:focus {
                        + label {
@@ -78,7 +88,7 @@
                                        content: '';
                                        position: absolute;
                                        width: @checkboxSize;
-                                       height: @checkboxSize - @focusBottomBorderSize + 1; // offset by bottom border
+                                       height: @checkboxSize - @focusBottomBorderSize + 0.08; // offset by bottom border
                                        // offset from the checkbox by 1px to account for left border
                                        left: 1px;
                                        border-bottom: solid @focusBottomBorderSize lightgrey;
                }
 
                // disabled checked boxes have a gray background
-               &:disabled + label::before {
-                       background-color: lightgrey;
+               &:disabled + label {
+                       cursor: default;
+
+                       &::before {
+                               background-color: lightgrey;
+                       }
                }
        }
 }
index 7c01350..592a309 100644 (file)
        //   </div>
        // </form>
        //
-       // Styleguide 3.1.
+       // Styleguide 3.2.
        .error,
        .errorbox,
        .warningbox,
                word-wrap: break-word;
        }
 
-       // Colours taken from those for .errorbox in skins/common/shared.css
+       // Colours taken from those for .errorbox in shared.css
        .error {
                color: #cc0000;
                border: 1px solid #fac5c5;
        // This specifies styling for individual field validation error messages.
        // Show them below the fields to prevent line break glitches, and leave
        // some space between the field and the error message box.
-       .mw-ui-vform-div .error, /* for backwards-compatibility, remove before 1.24 */
        .mw-ui-vform-field .error {
                display: block;
                margin-top: 5px;
 //
 // (We use a broad definition of 'field' here: a purely textual information
 // block is also a "field".)
-.mw-ui-vform-div, /* for backwards-compatibility, remove before 1.24 */
 .mw-ui-vform-field {
        display: block;
        margin: 0 0 15px;
diff --git a/resources/src/mediawiki.ui/components/icons.less b/resources/src/mediawiki.ui/components/icons.less
new file mode 100644 (file)
index 0000000..dc2ca52
--- /dev/null
@@ -0,0 +1,106 @@
+@import "mediawiki.mixins";
+
+// Variables
+@iconSize: 1.4em;
+@gutterWidth: 1em;
+
+// Mixins
+.mixin-mw-ui-icon-bgimage(@iconSvg, @iconPng) {
+       &.mw-ui-icon {
+               &:after,
+               &:before {
+                       .background-image-svg(@iconSvg, @iconPng);
+               }
+       }
+}
+
+// Icons
+//
+// To use icons you must be using a browser that supports pseudo elements.
+// This includes support for IE8.
+// http://caniuse.com/#feat=css-gencontent
+//
+// For elements that are intended to have both an icon and text, browsers that
+// do not support pseudo-selectors will degrade to text-only.
+//
+// However, icon-only elements do not yet degrade to text-only elements in these
+// browsers.
+//
+// Styleguide 4.
+
+.mw-ui-icon {
+       position: relative;
+       min-height: @iconSize;
+       min-width: @iconSize;
+
+       // Standalone icons
+       //
+       // Markup:
+       // <div class="mw-ui-icon mw-ui-icon-element mw-ui-icon-ok">OK</div>
+       // <div class="mw-ui-icon mw-ui-icon-element mw-ui-icon-ok mw-ui-button mw-ui-progressive">OK</div>
+       //
+       // Styleguide 4.1.1.
+       &.mw-ui-icon-element {
+               @width: @iconSize + ( 2 * @gutterWidth );
+
+               text-indent: -999px;
+               overflow: hidden;
+               width: @width;
+               min-width: @width;
+               max-width: @width;
+               &:before {
+                       left: 0;
+                       right: 0;
+                       position: absolute;
+                       margin: 0 @gutterWidth;
+               }
+       }
+
+       &.mw-ui-icon-after:after,
+       &.mw-ui-icon-before:before,
+       &.mw-ui-icon-element:before {
+               background-position: 50% 50%;
+               float: left;
+               display: block;
+               background-repeat: no-repeat;
+               background-size: 100% auto;
+               min-height: @iconSize;
+               content: '';
+       }
+
+
+       // Icons with text
+       //
+       // Markup:
+       // <div class="mw-ui-icon mw-ui-icon-before mw-ui-icon-ok">OK</div>
+       // <div class="mw-ui-icon mw-ui-icon-before mw-ui-icon-ok mw-ui-progressive mw-ui-button">OK</div>
+       //
+       // Styleguide 4.1.2
+       &.mw-ui-icon-before {
+               &:before {
+                       position: relative;
+                       width: @iconSize;
+                       margin-right: @gutterWidth;
+               }
+       }
+
+       // Icons with text before
+       //
+       // Markup:
+       // <div class="mw-ui-icon mw-ui-icon-after mw-ui-icon-ok mw-ui-progressive mw-ui-button">OK</div>
+       //
+       // Styleguide 4.1.3
+       &.mw-ui-icon-after {
+               &:after {
+                       position: relative;
+                       float: right;
+                       width: @iconSize;
+                       margin-left: @gutterWidth;
+               }
+       }
+}
+
+// Icons
+.mw-ui-icon-ok {
+       .mixin-mw-ui-icon-bgimage('images/ok.svg', 'images/ok.png');
+}
diff --git a/resources/src/mediawiki.ui/components/images/ok.png b/resources/src/mediawiki.ui/components/images/ok.png
new file mode 100644 (file)
index 0000000..8a62f27
Binary files /dev/null and b/resources/src/mediawiki.ui/components/images/ok.png differ
diff --git a/resources/src/mediawiki.ui/components/images/ok.svg b/resources/src/mediawiki.ui/components/images/ok.svg
new file mode 100644 (file)
index 0000000..15bc296
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="142.282px" height="142.28px" viewBox="0 -11.785 142.282 142.28" enable-background="new 0 -11.785 142.282 142.28"
+        xml:space="preserve">
+<g>
+
+               <rect x="18.012" y="41.792" transform="matrix(0.6983 -0.7158 0.7158 0.6983 -17.1914 77.8785)" fill="#F0F0F0" width="131.56" height="35.083"/>
+
+               <rect x="2.416" y="64.455" transform="matrix(0.7158 0.6983 -0.6983 0.7158 67.7777 -2.5416)" fill="#F0F0F0" width="69.191" height="35.082"/>
+</g>
+</svg>
index acf1157..c01dd36 100644 (file)
        border: 1px solid @colorFieldBorder;
        .box-sizing(border-box);
        width: 100%;
-       padding: .3em .3em .3em .6em;
+       padding: .4em .3em .2em .6em;
        display: block;
        vertical-align: middle;
+       border-radius: @borderRadius;
        // Override user agent stylesheet properties. Instead use parent element.
        color: inherit;
+       background-color: inherit;
        font-family: inherit;
        font-size: inherit;
        line-height: inherit;
        }
 
        &:focus {
-               box-shadow: inset .45em 0 0 #5088f7;
+               box-shadow: inset .45em 0 0 @colorProgressive;
                border-color: @colorGrayDark;
                // Remove focus glow on input[type="search"]
                outline: 0;
        }
+
+       &:disabled {
+               border-color: @colorGray14;
+               color: @colorGray12;
+       }
 }
 
 textarea.mw-ui-input {
@@ -85,6 +92,7 @@ textarea.mw-ui-input {
 // <button class="mw-ui-button mw-ui-constructive">go</button>
 //
 // Styleguide 1.2.
+input[type="number"],
 .mw-ui-input-inline {
        display: inline-block;
        width: auto;
@@ -122,3 +130,11 @@ 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.ui/components/text.less b/resources/src/mediawiki.ui/components/text.less
new file mode 100644 (file)
index 0000000..500d42c
--- /dev/null
@@ -0,0 +1,40 @@
+@import "mediawiki.mixins";
+@import "mediawiki.ui/variables";
+@import "mediawiki.ui/mixins";
+
+/*
+Text & Anchors
+
+Allows you to give text a context as to the type of action it is indicating.
+
+Styleguide 6.
+*/
+
+/*
+Text
+
+Context classes may be used on elements with only plain-text content with the mw-ui-text base. When the context classes
+are used on interactive and block-level elements, the appropriate alternative base type classes should also be used. For
+example, mw-ui-anchor with A, or mw-ui-button with buttons.
+
+Markup:
+<span class="mw-ui-text mw-ui-progressive">Progressive</span>
+<span class="mw-ui-text mw-ui-constructive">Constructive</span>
+<span class="mw-ui-text mw-ui-destructive">Destructive</span>
+
+Styleguide 6.1.
+*/
+
+.mw-ui-text {
+       // The selector order is like this on purpose; IE6 ignores the second selector,
+       // so we don't want to accidentally apply this color on all mw-ui-CONTEXT classes
+       .mw-ui-progressive& {
+               color: @colorProgressive;
+       }
+       .mw-ui-constructive& {
+               color: @colorConstructive;
+       }
+       .mw-ui-destructive& {
+               color: @colorDestructive;
+       }
+}
\ No newline at end of file
diff --git a/resources/src/mediawiki/images/arrow-sort-ascending.png b/resources/src/mediawiki/images/arrow-sort-ascending.png
new file mode 100644 (file)
index 0000000..f2d339d
Binary files /dev/null and b/resources/src/mediawiki/images/arrow-sort-ascending.png differ
diff --git a/resources/src/mediawiki/images/arrow-sort-ascending.svg b/resources/src/mediawiki/images/arrow-sort-ascending.svg
new file mode 100644 (file)
index 0000000..1e7a094
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path d="M1 10h10l-5-8.658z" fill="#00a"/></svg>
\ No newline at end of file
diff --git a/resources/src/mediawiki/images/arrow-sort-descending.png b/resources/src/mediawiki/images/arrow-sort-descending.png
new file mode 100644 (file)
index 0000000..8afbca9
Binary files /dev/null and b/resources/src/mediawiki/images/arrow-sort-descending.png differ
diff --git a/resources/src/mediawiki/images/arrow-sort-descending.svg b/resources/src/mediawiki/images/arrow-sort-descending.svg
new file mode 100644 (file)
index 0000000..cf11adb
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path d="M1 2h10l-5 8.658z" fill="#00a"/></svg>
\ No newline at end of file
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-ltr.png b/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-ltr.png
new file mode 100644 (file)
index 0000000..2a64fd0
Binary files /dev/null and b/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-ltr.png differ
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-rtl.png b/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-rtl.png
new file mode 100644 (file)
index 0000000..78a493e
Binary files /dev/null and b/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-rtl.png differ
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-forward-ltr.png b/resources/src/mediawiki/images/pager-arrow-disabled-forward-ltr.png
new file mode 100644 (file)
index 0000000..aa4fbf8
Binary files /dev/null and b/resources/src/mediawiki/images/pager-arrow-disabled-forward-ltr.png differ
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-forward-rtl.png b/resources/src/mediawiki/images/pager-arrow-disabled-forward-rtl.png
new file mode 100644 (file)
index 0000000..83df068
Binary files /dev/null and b/resources/src/mediawiki/images/pager-arrow-disabled-forward-rtl.png differ
diff --git a/resources/src/mediawiki/images/pager-arrow-fastforward-ltr.png b/resources/src/mediawiki/images/pager-arrow-fastforward-ltr.png
new file mode 100644 (file)
index 0000000..caf5033
Binary files /dev/null and b/resources/src/mediawiki/images/pager-arrow-fastforward-ltr.png differ
diff --git a/resources/src/mediawiki/images/pager-arrow-fastforward-rtl.png b/resources/src/mediawiki/images/pager-arrow-fastforward-rtl.png
new file mode 100644 (file)
index 0000000..52b32a5
Binary files /dev/null and b/resources/src/mediawiki/images/pager-arrow-fastforward-rtl.png differ
diff --git a/resources/src/mediawiki/images/pager-arrow-forward-ltr.png b/resources/src/mediawiki/images/pager-arrow-forward-ltr.png
new file mode 100644 (file)
index 0000000..3f8fee3
Binary files /dev/null and b/resources/src/mediawiki/images/pager-arrow-forward-ltr.png differ
diff --git a/resources/src/mediawiki/images/pager-arrow-forward-rtl.png b/resources/src/mediawiki/images/pager-arrow-forward-rtl.png
new file mode 100644 (file)
index 0000000..f363bf6
Binary files /dev/null and b/resources/src/mediawiki/images/pager-arrow-forward-rtl.png differ
index 4387608..7ced42f 100644 (file)
         */
        NS_SPECIAL = -1,
 
+       /**
+        * @private
+        * @static
+        * @property NS_MEDIA
+        */
+       NS_MEDIA = -2,
+
+       /**
+        * @private
+        * @static
+        * @property NS_FILE
+        */
+       NS_FILE = 6,
+
+       /**
+        * @private
+        * @static
+        * @property FILENAME_MAX_BYTES
+        */
+       FILENAME_MAX_BYTES = 240,
+
+       /**
+        * @private
+        * @static
+        * @property TITLE_MAX_BYTES
+        */
+       TITLE_MAX_BYTES = 255,
+
        /**
         * Get the namespace id from a namespace name (either from the localized, canonical or alias
         * name).
                '|&#x[0-9A-Fa-f]+;'
        ),
 
+       // From MediaWikiTitleCodec.php#L225 @26fcab1f18c568a41
+       // "Clean up whitespace" in function MediaWikiTitleCodec::splitTitleString()
+       rWhitespace = /[ _\u0009\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\s]+/g,
+
+       /**
+        * Slightly modified from Flinfo. Credit goes to Lupo and Flominator.
+        * @private
+        * @static
+        * @property sanitationRules
+        */
+       sanitationRules = [
+               // "signature"
+               {
+                       pattern: /~{3}/g,
+                       replace: '',
+                       generalRule: true
+               },
+               // Space, underscore, tab, NBSP and other unusual spaces
+               {
+                       pattern: rWhitespace,
+                       replace: ' ',
+                       generalRule: true
+               },
+               // unicode bidi override characters: Implicit, Embeds, Overrides
+               {
+                       pattern: /[\u200E\u200F\u202A-\u202E]/g,
+                       replace: '',
+                       generalRule: true
+               },
+               // control characters
+               {
+                       pattern: /[\x00-\x1f\x7f]/g,
+                       replace: '',
+                       generalRule: true
+               },
+               // URL encoding (possibly)
+               {
+                       pattern: /%([0-9A-Fa-f]{2})/g,
+                       replace: '% $1',
+                       generalRule: true
+               },
+               // HTML-character-entities
+               {
+                       pattern: /&(([A-Za-z0-9\x80-\xff]+|#[0-9]+|#x[0-9A-Fa-f]+);)/g,
+                       replace: '& $1',
+                       generalRule: true
+               },
+               // slash, colon (not supported by file systems like NTFS/Windows, Mac OS 9 [:], ext4 [/])
+               {
+                       pattern: /[:\/#]/g,
+                       replace: '-',
+                       fileRule: true
+               },
+               // brackets, greater than
+               {
+                       pattern: /[\]\}>]/g,
+                       replace: ')',
+                       generalRule: true
+               },
+               // brackets, lower than
+               {
+                       pattern: /[\[\{<]/g,
+                       replace: '(',
+                       generalRule: true
+               },
+               // everything that wasn't covered yet
+               {
+                       pattern: new RegExp( rInvalid.source, 'g' ),
+                       replace: '-',
+                       generalRule: true
+               },
+               // directory structures
+               {
+                       pattern: /^(\.|\.\.|\.\/.*|\.\.\/.*|.*\/\.\/.*|.*\/\.\.\/.*|.*\/\.|.*\/\.\.)$/g,
+                       replace: '',
+                       generalRule: true
+               }
+       ],
+
        /**
         * Internal helper for #constructor and #newFromtext.
         *
                        namespace = NS_MAIN;
                        title = title
                                // Strip colon
-                               .substr( 1 )
+                               .slice( 1 )
                                // Trim underscores
                                .replace( rUnderscoreTrim, '' );
                }
                } else {
                        fragment = title
                                // Get segment starting after the hash
-                               .substr( i + 1 )
+                               .slice( i + 1 )
                                // Convert to text
                                // NB: Must not be trimmed ("Example#_foo" is not the same as "Example#foo")
                                .replace( /_/g, ' ' );
 
                        title = title
                                // Strip hash
-                               .substr( 0, i )
+                               .slice( 0, i )
                                // Trim underscores, again (strips "_" from "bar" in "Foo_bar_#quux")
                                .replace( rUnderscoreTrim, '' );
                }
                                title.indexOf( '../' ) === 0 ||
                                title.indexOf( '/./' ) !== -1 ||
                                title.indexOf( '/../' ) !== -1 ||
-                               title.substr( title.length - 2 ) === '/.' ||
-                               title.substr( title.length - 3 ) === '/..'
+                               title.slice( -2 ) === '/.' ||
+                               title.slice( -3 ) === '/..'
                        )
                ) {
                        return false;
                        return false;
                }
 
-               // Disallow titles exceeding the 255 byte size limit (size of underlying database field)
+               // Disallow titles exceeding the TITLE_MAX_BYTES byte size limit (size of underlying database field)
                // Except for special pages, e.g. [[Special:Block/Long name]]
                // Note: The PHP implementation also asserts that even in NS_SPECIAL, the title should
                // be less than 512 bytes.
-               if ( namespace !== NS_SPECIAL && $.byteLength( title ) > 255 ) {
+               if ( namespace !== NS_SPECIAL && $.byteLength( title ) > TITLE_MAX_BYTES ) {
                        return false;
                }
 
                        // Extensions are the non-empty segment after the last dot
                        ext = null;
                } else {
-                       ext = title.substr( i + 1 );
-                       title = title.substr( 0, i );
+                       ext = title.slice( i + 1 );
+                       title = title.slice( 0, i );
                }
 
                return {
                }
        },
 
+       /**
+        * Sanitizes a string based on a rule set and a filter
+        *
+        * @private
+        * @static
+        * @method sanitize
+        * @param {string} s
+        * @param {Array} filter
+        * @return {string}
+        */
+       sanitize = function ( s, filter ) {
+               var i, ruleLength, rule, m, filterLength,
+                       rules = sanitationRules;
+
+               for ( i = 0, ruleLength = rules.length; i < ruleLength; ++i ) {
+                       rule = rules[i];
+                       for ( m = 0, filterLength = filter.length; m < filterLength; ++m ) {
+                               if ( rule[filter[m]] ) {
+                                       s = s.replace( rule.pattern, rule.replace );
+                               }
+                       }
+               }
+               return s;
+       },
+
+       /**
+        * Cuts a string to a specific byte length, assuming UTF-8
+        * or less, if the last character is a multi-byte one
+        *
+        * @private
+        * @static
+        * @method trimToByteLength
+        * @param {string} s
+        * @param {number} length
+        * @return {string}
+        */
+       trimToByteLength = function ( s, length ) {
+               var byteLength, chopOffChars, chopOffBytes;
+
+               // bytelength is always greater or equal to the length in characters
+               s = s.substr( 0, length );
+               while ( ( byteLength = $.byteLength( s ) ) > length ) {
+                       // Calculate how many characters can be safely removed
+                       // First, we need to know how many bytes the string exceeds the threshold
+                       chopOffBytes = byteLength - length;
+                       // A character in UTF-8 is at most 4 bytes
+                       // One character must be removed in any case because the
+                       // string is too long
+                       chopOffChars = Math.max( 1, Math.floor( chopOffBytes / 4 ) );
+                       s = s.substr( 0, s.length - chopOffChars );
+               }
+               return s;
+       },
+
+       /**
+        * Cuts a file name to a specific byte length
+        *
+        * @private
+        * @static
+        * @method trimFileNameToByteLength
+        * @param {string} name without extension
+        * @param {string} extension file extension
+        * @return {string} The full name, including extension
+        */
+       trimFileNameToByteLength = function ( name, extension ) {
+               // There is a special byte limit for file names and ... remember the dot
+               return trimToByteLength( name, FILENAME_MAX_BYTES - extension.length - 1 ) + '.' + extension;
+       },
+
        // Polyfill for ES5 Object.create
        createObject = Object.create || ( function () {
                return function ( o ) {
         * Constructor for Title objects with a null return instead of an exception for invalid titles.
         *
         * @static
-        * @method
         * @param {string} title
         * @param {number} [namespace=NS_MAIN] Default namespace
         * @return {mw.Title|null} A valid Title object or null if the title is invalid
                return t;
        };
 
+       /**
+        * Constructor for Title objects from user input altering that input to
+        * produce a title that MediaWiki will accept as legal
+        *
+        * @static
+        * @param {string} title
+        * @param {number} [defaultNamespace=NS_MAIN]
+        *  If given, will used as default namespace for the given title.
+        * @param {Object} [options] additional options
+        * @param {string} [options.fileExtension='']
+        *  If the title is about to be created for the Media or File namespace,
+        *  ensures the resulting Title has the correct extension. Useful, for example
+        *  on systems that predict the type by content-sniffing, not by file extension.
+        *  If different from empty string, `forUploading` is assumed.
+        * @param {boolean} [options.forUploading=true]
+        *  Makes sure that a file is uploadable under the title returned.
+        *  There are pages in the file namespace under which file upload is impossible.
+        *  Automatically assumed if the title is created in the Media namespace.
+        * @return {mw.Title|null} A valid Title object or null if the input cannot be turned into a valid title
+        */
+       Title.newFromUserInput = function ( title, defaultNamespace, options ) {
+               var namespace, m, id, ext, parts, normalizeExtension;
+
+               // defaultNamespace is optional; check whether options moves up
+               if ( arguments.length < 3 && $.type( defaultNamespace ) === 'object' ) {
+                       options = defaultNamespace;
+                       defaultNamespace = undefined;
+               }
+
+               // merge options into defaults
+               options = $.extend( {
+                       fileExtension: '',
+                       forUploading: true
+               }, options );
+
+               normalizeExtension = function ( extension ) {
+                       // Remove only trailing space (that is removed by MW anyway)
+                       extension = extension.toLowerCase().replace(/\s*$/, '');
+                       return extension;
+               };
+
+               namespace = defaultNamespace === undefined ? NS_MAIN : defaultNamespace;
+
+               // Normalise whitespace and remove duplicates
+               title = $.trim( title.replace( rWhitespace, ' ' ) );
+
+               // Process initial colon
+               if ( title !== '' && title.charAt( 0 ) === ':' ) {
+                       // Initial colon means main namespace instead of specified default
+                       namespace = NS_MAIN;
+                       title = title
+                               // Strip colon
+                               .substr( 1 )
+                               // Trim underscores
+                               .replace( rUnderscoreTrim, '' );
+               }
+
+               // Process namespace prefix (if any)
+               m = title.match( rSplit );
+               if ( m ) {
+                       id = getNsIdByName( m[1] );
+                       if ( id !== false ) {
+                               // Ordinary namespace
+                               namespace = id;
+                               title = m[2];
+                       }
+               }
+
+               if ( namespace === NS_MEDIA
+                       || ( ( options.forUploading || options.fileExtension ) && ( namespace === NS_FILE ) )
+               ) {
+
+                       title = sanitize( title, [ 'generalRule', 'fileRule' ] );
+
+                       // Operate on the file extension
+                       // Although it is possible having spaces between the name and the ".ext" this isn't nice for
+                       // operating systems hiding file extensions -> strip them later on
+                       parts = title.split( '.' );
+
+                       if ( parts.length > 1 ) {
+
+                               // Get the last part, which is supposed to be the file extension
+                               ext = parts.pop();
+
+                               // Does the supplied file name carry the desired file extension?
+                               if ( options.fileExtension
+                                       && normalizeExtension( ext ) !== normalizeExtension( options.fileExtension )
+                               ) {
+
+                                       // No, push back, whatever there was after the dot
+                                       parts.push( ext );
+
+                                       // And add the desired file extension later
+                                       ext = options.fileExtension;
+                               }
+
+                               // Remove whitespace of the name part (that W/O extension)
+                               title = $.trim( parts.join( '.' ) );
+
+                               // Cut, if too long and append file extension
+                               title = trimFileNameToByteLength( title, ext );
+
+                       } else {
+
+                               // Missing file extension
+                               title = $.trim( parts.join( '.' ) );
+
+                               if ( options.fileExtension ) {
+
+                                       // Cut, if too long and append the desired file extension
+                                       title = trimFileNameToByteLength( title, options.fileExtension );
+
+                               } else {
+
+                                       // Name has no file extension and a fallback wasn't provided either
+                                       return null;
+                               }
+                       }
+               } else {
+
+                       title = sanitize( title, [ 'generalRule' ] );
+
+                       // Cut titles exceeding the TITLE_MAX_BYTES byte size limit
+                       // (size of underlying database field)
+                       if ( namespace !== NS_SPECIAL ) {
+                               title = trimToByteLength( title, TITLE_MAX_BYTES );
+                       }
+               }
+
+               // Any remaining initial :s are illegal.
+               title = title.replace( /^\:+/, '' );
+
+               return Title.newFromText( title, namespace );
+       };
+
+       /**
+        * Sanitizes a file name as supplied by the user, originating in the user's file system
+        * so it is most likely a valid MediaWiki title and file name after processing.
+        * Returns null on fatal errors.
+        *
+        * @static
+        * @param {string} uncleanName The unclean file name including file extension but
+        *   without namespace
+        * @param {string} [fileExtension] the desired file extension
+        * @return {mw.Title|null} A valid Title object or null if the title is invalid
+        */
+       Title.newFromFileName = function ( uncleanName, fileExtension ) {
+
+               return Title.newFromUserInput( 'File:' + uncleanName, {
+                       fileExtension: fileExtension,
+                       forUploading: true
+               } );
+       };
+
        /**
         * Get the file title from an image element
         *
                        return text( this.getPrefixedDb() );
                },
 
+               /**
+                * Get the page name relative to a namespace
+                *
+                * Example:
+                *
+                * - "Foo:Bar" relative to the Foo namespace becomes "Bar".
+                * - "Bar" relative to any non-main namespace becomes ":Bar".
+                * - "Foo:Bar" relative to any namespace other than Foo stays "Foo:Bar".
+                *
+                * @param {number} namespace The namespace to be relative to
+                * @return {string}
+                */
+               getRelativeText: function ( namespace ) {
+                       if ( this.getNamespaceId() === namespace ) {
+                               return this.getMainText();
+                       } else if ( this.getNamespaceId() === NS_MAIN ) {
+                               return ':' + this.getPrefixedText();
+                       } else {
+                               return this.getPrefixedText();
+                       }
+               },
+
                /**
                 * Get the fragment (if any).
                 *
diff --git a/resources/src/mediawiki/mediawiki.apihelp.css b/resources/src/mediawiki/mediawiki.apihelp.css
new file mode 100644 (file)
index 0000000..d127232
--- /dev/null
@@ -0,0 +1,86 @@
+.apihelp-header {
+       clear: both;
+       margin-bottom: 0.1em;
+}
+
+div.apihelp-linktrail {
+       font-size: smaller;
+}
+
+.apihelp-block {
+       margin-top: 0.5em;
+}
+
+.apihelp-block-head {
+       font-weight: bold;
+}
+
+.apihelp-flags {
+       font-size: smaller;
+       float: right;
+       border: 1px solid black;
+       padding: 0.25em;
+       width: 20em;
+}
+
+.apihelp-deprecated, .apihelp-flag-deprecated,
+.apihelp-flag-internal strong {
+       font-weight: bold;
+       color: red;
+}
+
+.apihelp-empty {
+       color: #888;
+}
+
+.apihelp-help-urls ul {
+       list-style-image: none;
+       list-style-type: none;
+       margin-left: 0;
+}
+
+.apihelp-parameters dl,
+.apihelp-examples dl,
+.apihelp-permissions dl {
+       margin-left: 2em;
+}
+
+.apihelp-parameters dt {
+       float: left;
+       clear: left;
+       min-width: 10em;
+       white-space: nowrap;
+       line-height: 1.5em;
+}
+
+.apihelp-parameters dt:after {
+       content: ':\A0'
+}
+
+.apihelp-parameters dd {
+       margin: 0 0 0.5em 10em;
+       line-height: 1.5em;
+}
+
+.apihelp-parameters dd p:first-child {
+       margin-top: 0;
+}
+
+.apihelp-parameters dd.info {
+       margin-left: 12em;
+       text-indent: -2em;
+}
+
+.apihelp-examples dt {
+       font-weight: normal;
+}
+
+.api-main-links {
+       text-align: center;
+}
+.api-main-links ul:before {
+       content: '[';
+}
+.api-main-links ul:after {
+       content: ']';
+}
diff --git a/resources/src/mediawiki/mediawiki.apipretty.css b/resources/src/mediawiki/mediawiki.apipretty.css
new file mode 100644 (file)
index 0000000..fe5e634
--- /dev/null
@@ -0,0 +1,11 @@
+h1.firstHeading {
+       display: none;
+}
+
+.api-pretty-header {
+       font-size: small;
+}
+
+.api-pretty-content {
+       white-space: pre-wrap;
+}
diff --git a/resources/src/mediawiki/mediawiki.confirmCloseWindow.js b/resources/src/mediawiki/mediawiki.confirmCloseWindow.js
new file mode 100644 (file)
index 0000000..7fc5c42
--- /dev/null
@@ -0,0 +1,68 @@
+( function ( mw, $ ) {
+       /**
+        * @method confirmCloseWindow
+        * @member mw
+        *
+        * Prevent the closing of a window with a confirm message (the onbeforeunload event seems to
+        * work in most browsers.)
+        *
+        * This supersedes any previous onbeforeunload handler. If there was a handler before, it is
+        * restored when you execute the returned function.
+        *
+        *     var allowCloseWindow = mw.confirmCloseWindow();
+        *     // ... do stuff that can't be interrupted ...
+        *     allowCloseWindow();
+        *
+        * @param {Object} [options]
+        * @param {string} [options.namespace] Namespace for the event registration
+        * @param {string} [options.message]
+        * @param {string} options.message.return The string message to show in the confirm dialog.
+        * @param {Function} [options.test]
+        * @param {boolean} [options.test.return=true] Whether to show the dialog to the user.
+        * @return {Function} Execute this when you want to allow the user to close the window
+        */
+       mw.confirmCloseWindow = function ( options ) {
+               var savedUnloadHandler,
+                       mainEventName = 'beforeunload',
+                       showEventName = 'pageshow';
+
+               options = $.extend( {
+                       message: mw.message( 'mwe-prevent-close' ).text(),
+                       test: function () { return true; }
+               }, options );
+
+               if ( options.namespace ) {
+                       mainEventName += '.' + options.namespace;
+                       showEventName += '.' + options.namespace;
+               }
+
+               $( window ).on( mainEventName, function () {
+                       if ( options.test() ) {
+                               // remove the handler while the alert is showing - otherwise breaks caching in Firefox (3?).
+                               // but if they continue working on this page, immediately re-register this handler
+                               savedUnloadHandler = window.onbeforeunload;
+                               window.onbeforeunload = null;
+                               setTimeout( function () {
+                                       window.onbeforeunload = savedUnloadHandler;
+                               }, 1 );
+
+                               // show an alert with this message
+                               if ( $.isFunction( options.message ) ) {
+                                       return options.message();
+                               } else {
+                                       return options.message;
+                               }
+                       }
+               } ).on( showEventName, function () {
+                       // Re-add onbeforeunload handler
+                       if ( !window.onbeforeunload && savedUnloadHandler ) {
+                               window.onbeforeunload = savedUnloadHandler;
+                       }
+               } );
+
+               // return the function they can use to stop this
+               return function () {
+                       $( window ).off( mainEventName + ' ' + showEventName );
+               };
+       };
+} )( mediaWiki, jQuery );
index f56f0d9..4935984 100644 (file)
@@ -61,7 +61,7 @@
                 */
                switchPane: function ( e ) {
                        var currentPaneId = debug.$container.data( 'currentPane' ),
-                               requestedPaneId = $( this ).prop( 'id' ).substr( 9 ),
+                               requestedPaneId = $( this ).prop( 'id' ).slice( 9 ),
                                $currentPane = $( '#mw-debug-pane-' + currentPaneId ),
                                $requestedPane = $( '#mw-debug-pane-' + requestedPaneId ),
                                hovDone = false;
 
                        gitInfo = '';
                        if ( this.data.gitRevision !== false ) {
-                               gitInfo = '(' + this.data.gitRevision.substring( 0, 7 ) + ')';
+                               gitInfo = '(' + this.data.gitRevision.slice( 0, 7 ) + ')';
                                if ( this.data.gitViewUrl !== false ) {
                                        gitInfo = $( '<a>' )
                                                .attr( 'href', this.data.gitViewUrl )
                        }
 
                        bitDiv( 'phpversion' )
-                               .append( $( '<a href="//www.php.net/"></a>' ).text( 'PHP' ) )
+                               .append( $( this.data.phpEngine === 'HHVM'
+                                       ? '<a href="http://hhvm.com/">HHVM</a>'
+                                       : '<a href="https://php.net/">PHP</a>'
+                               ) )
                                .append( ': ' + this.data.phpVersion );
 
                        bitDiv( 'time' )
index 64ec6c3..04f7acd 100644 (file)
                        // only drop events if requested
                        dropThresholdPx = dropThresholdPx || 0;
 
-                       if ( !Array.prototype.map || !Array.prototype.reduce || !Array.prototype.filter ) {
-                               profile.container = profile.buildRequiresES5();
+                       if (
+                               !Array.prototype.map ||
+                               !Array.prototype.reduce ||
+                               !Array.prototype.filter ||
+                               !document.createElementNS ||
+                               !document.createElementNS.bind
+                       ) {
+                               profile.container = profile.buildRequiresBrowserFeatures();
                        } else if ( data.length === 0 ) {
                                profile.container = profile.buildNoData();
                        } else {
+                               // Initialize createSvgElement (now that we know we have
+                               // document.createElementNS and bind)
+                               this.createSvgElement = document.createElementNS.bind( document, 'http://www.w3.org/2000/svg' );
+
                                // generate a flyout
                                profile.data = new ProfileData( data, profile.width, mergeThresholdPx, dropThresholdPx );
                                // draw it
@@ -52,9 +62,9 @@
                        return profile.container;
                },
 
-               buildRequiresES5: function () {
+               buildRequiresBrowserFeatures: function () {
                        return $( '<div>' )
-                               .text( 'An ES5 compatible javascript engine is required for the profile visualization.' )
+                               .text( 'Certain browser features, including parts of ECMAScript 5 and document.createElementNS, are required for the profile visualization.' )
                                .get( 0 );
                },
 
 
                /**
                 * Creates DOM nodes appropriately namespaced for SVG.
+                * Initialized in init after checking support
                 *
                 * @param string tag to create
                 * @return DOMElement
                 */
-               createSvgElement: document.createElementNS
-                       ? document.createElementNS.bind( document, 'http://www.w3.org/2000/svg' )
-                       // throw a error for browsers which does not support document.createElementNS (IE<8)
-                       : function () { throw new Error( 'document.createElementNS not supported' ); },
+               createSvgElement: null,
 
                /**
                 * @param DOMElement|undefined
        ProfileData.groupOf = function ( label ) {
                var pos, prefix = 'Profile section ended by close(): ';
                if ( label.indexOf( prefix ) === 0 ) {
-                       label = label.substring( prefix.length );
+                       label = label.slice( prefix.length );
                }
 
                pos = [ '::', ':', '-' ].reduce( function ( result, separator ) {
                if ( pos === -1 ) {
                        return label;
                } else {
-                       return label.substring( 0, pos );
+                       return label.slice( 0, pos );
                }
        };
 
index 1c0d833..6bcb87f 100644 (file)
                                target: '_blank'
                        } );
 
-                       // TODO: Use a stylesheet instead of these inline styles
-                       this.$dialog =
-                               $( '<div style="position: relative;"></div>' ).append(
-                                       $( '<div class="feedback-mode feedback-form"></div>' ).append(
-                                               $( '<small>' ).append(
-                                                       $( '<p>' ).msg(
-                                                               'feedback-bugornote',
-                                                               $bugNoteLink,
-                                                               fb.title.getNameText(),
-                                                               $feedbackPageLink.clone()
-                                                       )
-                                               ),
-                                               $( '<div style="margin-top: 1em;"></div>' )
-                                               .msg( 'feedback-subject' )
-                                               .append(
-                                                       $( '<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 style="margin-top: 0.4em;"></div>' )
-                                               .msg( 'feedback-message' )
-                                               .append(
-                                                       $( '<br>' ),
-                                                       $( '<textarea name="message" class="feedback-message" rows="5" cols="60"></textarea>' )
-                                               )
-                                       ),
-                                       $( '<div class="feedback-mode feedback-bugs"></div>' ).append(
-                                               $( '<p>' ).msg( 'feedback-bugcheck', $bugsListLink )
-                                       ),
-                                       $( '<div class="feedback-mode feedback-submitting" style="text-align: center; margin: 3em 0;"></div>' )
-                                       .msg( 'feedback-adding' )
-                                       .append(
-                                               $( '<br>' ),
-                                               $( '<span class="feedback-spinner"></span>' )
-                                       ),
-                                       $( '<div class="feedback-mode feedback-thanks" style="text-align: center; margin:1em"></div>' ).msg(
-                                               'feedback-thanks', fb.title.getNameText(), $feedbackPageLink.clone()
-                                       ),
-                                       $( '<div class="feedback-mode feedback-error" style="position: relative;"></div>' ).append(
-                                               $( '<div class="feedback-error-msg style="color: #990000; margin-top: 0.4em;"></div>' )
-                                       )
-                               );
+                       // 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,
index 0bbf8fa..8ba57f6 100644 (file)
@@ -1,31 +1,15 @@
 /*!
- * .hlist fallbacks for IE 6, 7 and 8.
+ * .hlist fallbacks for IE 8.
  * @author [[User:Edokter]]
  */
 ( function ( mw, $ ) {
        var profile = $.client.profile();
 
-       if ( profile.name === 'msie' ) {
-               if ( profile.versionNumber === 8 ) {
-                       /* IE 8: Add pseudo-selector class to last-child list items */
-                       mw.hook( 'wikipage.content' ).add( function ( $content ) {
-                               $content.find( '.hlist' ).find( 'dd:last-child, dt:last-child, li:last-child' )
-                                       .addClass( 'hlist-last-child' );
-                       } );
-               }
-               else if ( profile.versionNumber <= 7 ) {
-                       /* IE 7 and below: Generate interpuncts and parentheses */
-                       mw.hook( 'wikipage.content' ).add( function ( $content ) {
-                               var $hlists = $content.find( '.hlist' );
-                               $hlists.find( 'dt:not(:last-child)' )
-                                       .append( ': ' );
-                               $hlists.find( 'dd:not(:last-child)' )
-                                       .append( '<b>·</b> ' );
-                               $hlists.find( 'li:not(:last-child)' )
-                                       .append( '<b>·</b> ' );
-                               $hlists.find( 'dl dl, dl ol, dl ul, ol dl, ol ol, ol ul, ul dl, ul ol, ul ul' )
-                                       .prepend( '( ' ).append( ') ' );
-                       } );
-               }
+       if ( profile.name === 'msie' && profile.versionNumber === 8 ) {
+               /* Add pseudo-selector class to last-child list items */
+               mw.hook( 'wikipage.content' ).add( function ( $content ) {
+                       $content.find( '.hlist' ).find( 'dd:last-child, dt:last-child, li:last-child' )
+                               .addClass( 'hlist-last-child' );
+               } );
        }
 }( mediaWiki, jQuery ) );
index 5027f7a..fd76c80 100644 (file)
        } );
 
        function enhance( $root ) {
+               var $matrixTooltips, $autocomplete;
 
                /**
                 * @ignore
                        } );
                }
 
-               var $matrixTooltips = $root.find( '.mw-htmlform-matrix .mw-htmlform-tooltip' );
+               $matrixTooltips = $root.find( '.mw-htmlform-matrix .mw-htmlform-tooltip' );
                if ( $matrixTooltips.length ) {
                        mw.loader.using( 'jquery.tipsy', function () {
                                $matrixTooltips.tipsy( { gravity: 's' } );
                        } );
                }
 
+               // Set up autocomplete fields
+               $autocomplete = $root.find( '.mw-htmlform-autocomplete' );
+               if ( $autocomplete.length ) {
+                       mw.loader.using( 'jquery.suggestions', function () {
+                               $autocomplete.suggestions( {
+                                       fetch: function ( val ) {
+                                               var $el = $( this );
+                                               $el.suggestions( 'suggestions',
+                                                       $.grep( $el.data( 'autocomplete' ), function ( v ) {
+                                                               return v.indexOf( val ) === 0;
+                                                       } )
+                                               );
+                                       }
+                               } );
+                       } );
+               }
+
                // Add/remove cloner clones without having to resubmit the form
-               $root.find( '.mw-htmlform-cloner-delete-button' ).click( function ( ev ) {
+               $root.find( '.mw-htmlform-cloner-delete-button' ).filter( ':input' ).click( function ( ev ) {
                        ev.preventDefault();
                        $( this ).closest( 'li.mw-htmlform-cloner-li' ).remove();
                } );
 
-               $root.find( '.mw-htmlform-cloner-create-button' ).click( function ( ev ) {
+               $root.find( '.mw-htmlform-cloner-create-button' ).filter( ':input' ).click( function ( ev ) {
                        var $ul, $li, html;
 
                        ev.preventDefault();
index eda7689..8e9fc89 100644 (file)
                },
 
                /**
-                * Perform a substring search across the JavaScript and CSS source code
+                * Perform a string search across the JavaScript and CSS source code
                 * of all loaded modules and return an array of the names of the
                 * modules that matched.
                 *
index 3f778d8..3eaa6d2 100644 (file)
                         */
                        function makeRegexParser( regex ) {
                                return function () {
-                                       var matches = input.substr( pos ).match( regex );
+                                       var matches = input.slice( pos ).match( regex );
                                        if ( matches === null ) {
                                                return null;
                                        }
 
                                if ( parsedCloseTagResult === null ) {
                                        // Closing tag failed.  Return the start tag and contents.
-                                       return [ 'CONCAT', input.substring( startOpenTagPos, endOpenTagPos ) ]
+                                       return [ 'CONCAT', input.slice( startOpenTagPos, endOpenTagPos ) ]
                                                .concat( parsedHtmlContents );
                                }
 
                                        // parsed HTML link.
                                        //
                                        // Concatenate everything from the tag, flattening the contents.
-                                       result = [ 'CONCAT', input.substring( startOpenTagPos, endOpenTagPos ) ]
-                                               .concat( parsedHtmlContents, input.substring( startCloseTagPos, endCloseTagPos ) );
+                                       result = [ 'CONCAT', input.slice( startOpenTagPos, endOpenTagPos ) ]
+                                               .concat( parsedHtmlContents, input.slice( startCloseTagPos, endCloseTagPos ) );
                                }
 
                                return result;
                 * @return {string} selected pluralized form according to current language
                 */
                plural: function ( nodes ) {
-                       var forms, count;
+                       var forms, firstChild, firstChildText,
+                               explicitPluralForms = {}, explicitPluralFormNumber, formIndex, form, count;
+
                        count = parseFloat( this.language.convertNumber( nodes[0], true ) );
                        forms = nodes.slice( 1 );
-                       return forms.length ? this.language.convertPlural( count, forms ) : '';
+                       for ( formIndex = 0; formIndex < forms.length; formIndex++ ) {
+                               form = forms[formIndex];
+
+                               if ( form.jquery && form.hasClass( 'mediaWiki_htmlEmitter' ) ) {
+                                       // This is a nested node, may be an explicit plural form like 5=[$2 linktext]
+                                       firstChild = form.contents().get( 0 );
+                                       if ( firstChild && firstChild.nodeType === Node.TEXT_NODE ) {
+                                               firstChildText = firstChild.textContent;
+                                               if ( /^\d+=/.test( firstChildText ) ) {
+                                                       explicitPluralFormNumber = parseInt( firstChildText.split( /=/ )[0], 10 );
+                                                       // Use the digit part as key and rest of first text node and
+                                                       // rest of child nodes as value.
+                                                       firstChild.textContent = firstChildText.slice( firstChildText.indexOf( '=' ) + 1 );
+                                                       explicitPluralForms[explicitPluralFormNumber] = form;
+                                                       forms[formIndex] = undefined;
+                                               }
+                                       }
+                               } else if ( /^\d+=/.test( form ) ) {
+                                       // Simple explicit plural forms like 12=a dozen
+                                       explicitPluralFormNumber = parseInt( form.split( /=/ )[0], 10 );
+                                       explicitPluralForms[explicitPluralFormNumber] = form.slice( form.indexOf( '=' ) + 1 );
+                                       forms[formIndex] = undefined;
+                               }
+                       }
+
+                       // Remove explicit plural forms from the forms. They were set undefined in the above loop.
+                       forms = $.map( forms, function ( form ) {
+                               return form;
+                       } );
+
+                       return this.language.convertPlural( count, forms, explicitPluralForms );
                },
 
                /**
index d50fe48..cfdb5a7 100644 (file)
                 */
                messages: new Map(),
 
+               /**
+                * Templates associated with a module
+                * @property {mw.Map}
+                */
+               templates: new Map(),
+
                /* Public Methods */
 
                /**
                         */
                        var registry = {},
                                //
-                               // Mapping of sources, keyed by source-id, values are objects.
+                               // Mapping of sources, keyed by source-id, values are strings.
                                // Format:
                                //      {
-                               //              'sourceId': {
-                               //                      'loadScript': 'http://foo.bar/w/load.php'
-                               //              }
+                               //              'sourceId': 'http://foo.bar/w/load.php'
                                //      }
                                //
                                sources = {},
                                        mw.messages.set( registry[module].messages );
                                }
 
+                               // Initialise templates
+                               if ( registry[module].templates ) {
+                                       mw.templates.set( module, registry[module].templates );
+                               }
+
                                if ( $.isReady || registry[module].async ) {
                                        // Make sure we don't run the scripts until all (potentially asynchronous)
                                        // stylesheet insertions have completed.
 
                                        for ( source in splits ) {
 
-                                               sourceLoadScript = sources[source].loadScript;
+                                               sourceLoadScript = sources[source];
 
                                                for ( group in splits[source] ) {
 
                                                        for ( i = 0; i < modules.length; i += 1 ) {
                                                                // Determine how many bytes this module would add to the query string
                                                                lastDotIndex = modules[i].lastIndexOf( '.' );
-                                                               // Note that these substr() calls work even if lastDotIndex == -1
+
+                                                               // If lastDotIndex is -1, substr() returns an empty string
                                                                prefix = modules[i].substr( 0, lastDotIndex );
-                                                               suffix = modules[i].substr( lastDotIndex + 1 );
+                                                               suffix = modules[i].slice( lastDotIndex + 1 );
+
                                                                bytesAdded = moduleMap[prefix] !== undefined
                                                                        ? suffix.length + 3 // '%2C'.length == 3
                                                                        : modules[i].length + 3; // '%7C'.length == 3
                                 *
                                 * The #work method will use this information to split up requests by source.
                                 *
-                                *     mw.loader.addSource( 'mediawikiwiki', { loadScript: '//www.mediawiki.org/w/load.php' } );
+                                *     mw.loader.addSource( 'mediawikiwiki', '//www.mediawiki.org/w/load.php' );
                                 *
                                 * @param {string} id Short string representing a source wiki, used internally for
                                 *  registered modules to indicate where they should be loaded from (usually lowercase a-z).
-                                * @param {Object} props
-                                * @param {string} props.loadScript Url to the load.php entry point of the source wiki.
+                                * @param {Object|string} loadUrl load.php url, may be an object for backwards-compatibility
                                 * @return {boolean}
                                 */
-                               addSource: function ( id, props ) {
+                               addSource: function ( id, loadUrl ) {
                                        var source;
                                        // Allow multiple additions
                                        if ( typeof id === 'object' ) {
                                                throw new Error( 'source already registered: ' + id );
                                        }
 
-                                       sources[id] = props;
+                                       if ( typeof loadUrl === 'object' ) {
+                                               loadUrl = loadUrl.loadScript;
+                                       }
+
+                                       sources[id] = loadUrl;
 
                                        return true;
                                },
                                 * whether it's safe to extend the stylesheet (see #canExpandStylesheetWith).
                                 *
                                 * @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.
                                 */
-                               implement: function ( module, script, style, msgs ) {
+                               implement: function ( module, script, style, msgs, templates ) {
                                        // Validate input
                                        if ( typeof module !== 'string' ) {
                                                throw new Error( 'module must be a string, not a ' + typeof module );
                                        if ( !$.isPlainObject( msgs ) ) {
                                                throw new Error( 'msgs must be an object, not a ' + typeof msgs );
                                        }
+                                       if ( templates !== undefined && !$.isPlainObject( templates ) ) {
+                                               throw new Error( 'templates must be an object, not a ' + typeof templates );
+                                       }
                                        // Automatically register module
                                        if ( registry[module] === undefined ) {
                                                mw.loader.register( module );
                                        registry[module].script = script;
                                        registry[module].style = style;
                                        registry[module].messages = msgs;
+                                       // Templates are optional (for back-compat)
+                                       registry[module].templates = templates || {};
                                        // The module may already have been marked as erroneous
                                        if ( $.inArray( registry[module].state, ['error', 'missing'] ) === -1 ) {
                                                registry[module].state = 'loaded';
                                 * @param {Function} [ready] Callback to execute when all dependencies are ready
                                 * @param {Function} [error] Callback to execute if one or more dependencies failed
                                 * @return {jQuery.Promise}
+                                * @since 1.23 this returns a promise
                                 */
                                using: function ( dependencies, ready, error ) {
                                        var deferred = $.Deferred();
                                                        // Unversioned, private, or site-/user-specific
                                                        ( !descriptor.version || $.inArray( descriptor.group, [ 'private', 'user', 'site' ] ) !== -1 ) ||
                                                        // Partial descriptor
-                                                       $.inArray( undefined, [ descriptor.script, descriptor.style, descriptor.messages ] ) !== -1
+                                                       $.inArray( undefined, [ descriptor.script, descriptor.style,
+                                                                       descriptor.messages, descriptor.templates ] ) !== -1
                                                ) {
                                                        // Decline to store
                                                        return false;
                                                                        String( descriptor.script ) :
                                                                        JSON.stringify( descriptor.script ),
                                                                JSON.stringify( descriptor.style ),
-                                                               JSON.stringify( descriptor.messages )
+                                                               JSON.stringify( descriptor.messages ),
+                                                               JSON.stringify( descriptor.templates )
                                                        ];
                                                        // Attempted workaround for a possible Opera bug (bug 57567).
                                                        // This regex should never match under sane conditions.
                                                }
 
                                                for ( key in mw.loader.store.items ) {
-                                                       module = key.substring( 0, key.indexOf( '@' ) );
+                                                       module = key.slice( 0, key.indexOf( '@' ) );
                                                        if ( mw.loader.store.getModuleKey( module ) !== key ) {
                                                                mw.loader.store.stats.expired++;
                                                                delete mw.loader.store.items[key];
index 79ec310..1968aa9 100644 (file)
                        // on links from hiding a notification.
                        .on( 'click', 'a', function ( e ) {
                                e.stopPropagation();
-                       } );
+                       } )
+                       .hide();
 
                // Prepend the notification area to the content area and save it's object.
                mw.util.$content.prepend( $area );
diff --git a/resources/src/mediawiki/mediawiki.pager.tablePager.less b/resources/src/mediawiki/mediawiki.pager.tablePager.less
new file mode 100644 (file)
index 0000000..d37aec5
--- /dev/null
@@ -0,0 +1,84 @@
+/*!
+ * Structures generated by the TablePager PHP class
+ * in MediaWiki (used e.g. on Special:ListFiles).
+ */
+
+@import "mediawiki.mixins";
+
+.TablePager {
+       min-width: 80%;
+}
+
+.TablePager .TablePager_sort-ascending a {
+       padding-left: 15px;
+       background: none left center no-repeat;
+       .background-image-svg('images/arrow-sort-ascending.svg', 'images/arrow-sort-ascending.png');
+}
+
+.TablePager .TablePager_sort-descending a {
+       padding-left: 15px;
+       background: none left center no-repeat;
+       .background-image-svg('images/arrow-sort-descending.svg', 'images/arrow-sort-descending.png');
+}
+
+.TablePager_nav {
+       margin: 0 auto;
+}
+
+.TablePager_nav td {
+       padding: 3px;
+       text-align: center;
+       vertical-align: center;
+}
+
+.TablePager_nav a {
+       text-decoration: none;
+}
+
+.TablePager_nav td.TablePager_nav-first .TablePager_nav-disabled {
+       padding-top: 25px;
+       /* @embed */
+       background: url(images/pager-arrow-disabled-fastforward-rtl.png) center top no-repeat;
+}
+
+.TablePager_nav td.TablePager_nav-prev .TablePager_nav-disabled {
+       padding-top: 25px;
+       /* @embed */
+       background: url(images/pager-arrow-disabled-forward-rtl.png) center top no-repeat;
+}
+
+.TablePager_nav td.TablePager_nav-next .TablePager_nav-disabled {
+       padding-top: 25px;
+       /* @embed */
+       background: url(images/pager-arrow-disabled-forward-ltr.png) center top no-repeat;
+}
+
+.TablePager_nav td.TablePager_nav-last .TablePager_nav-disabled {
+       padding-top: 25px;
+       /* @embed */
+       background: url(images/pager-arrow-disabled-fastforward-ltr.png) center top no-repeat;
+}
+
+.TablePager_nav td.TablePager_nav-first .TablePager_nav-enabled {
+       padding-top: 25px;
+       /* @embed */
+       background: url(images/pager-arrow-fastforward-rtl.png) center top no-repeat;
+}
+
+.TablePager_nav td.TablePager_nav-prev .TablePager_nav-enabled {
+       padding-top: 25px;
+       /* @embed */
+       background: url(images/pager-arrow-forward-rtl.png) center top no-repeat;
+}
+
+.TablePager_nav td.TablePager_nav-next .TablePager_nav-enabled {
+       padding-top: 25px;
+       /* @embed */
+       background: url(images/pager-arrow-forward-ltr.png) center top no-repeat;
+}
+
+.TablePager_nav td.TablePager_nav-last .TablePager_nav-enabled {
+       padding-top: 25px;
+       /* @embed */
+       background: url(images/pager-arrow-fastforward-ltr.png) center top no-repeat;
+}
diff --git a/resources/src/mediawiki/mediawiki.template.js b/resources/src/mediawiki/mediawiki.template.js
new file mode 100644 (file)
index 0000000..79f43d1
--- /dev/null
@@ -0,0 +1,123 @@
+/**
+ * @class mw.template
+ * @singleton
+ */
+( function ( mw, $ ) {
+       var compiledTemplates = {},
+               compilers = {};
+
+       mw.template = {
+               /**
+                * Register a new compiler and template.
+                *
+                * @param {string} name of compiler. Should also match with any file extensions of templates that want to use it.
+                * @param {Function} compiler which must implement a compile function
+                */
+               registerCompiler: function ( name, compiler ) {
+                       if ( !compiler.compile ) {
+                               throw new Error( 'Compiler must implement compile method.' );
+                       }
+                       compilers[name] = compiler;
+               },
+
+               /**
+                * Get the name of the compiler associated with a template based on its name.
+                *
+                * @param {string} templateName Name of template (including file suffix)
+                * @return {String} Name of compiler
+                */
+               getCompilerName: function ( templateName ) {
+                       var templateParts = templateName.split( '.' );
+
+                       if ( templateParts.length < 2 ) {
+                               throw new Error( 'Unable to identify compiler. Template name must have a suffix.' );
+                       }
+                       return templateParts[ templateParts.length - 1 ];
+               },
+
+               /**
+                * Get the compiler for a given compiler name.
+                *
+                * @param {string} compilerName Name of the compiler
+                * @return {Object} The compiler associated with that name
+                */
+               getCompiler: function ( compilerName ) {
+                       var compiler = compilers[ compilerName ];
+                       if ( !compiler ) {
+                               throw new Error( 'Unknown compiler ' + compilerName );
+                       }
+                       return compiler;
+               },
+
+               /**
+                * Register a template associated with a module.
+                *
+                * Compiles the newly added template based on the suffix in its name.
+                *
+                * @param {string} moduleName Name of ResourceLoader module to get the template from
+                * @param {string} templateName Name of template to add including file extension
+                * @param {string} templateBody Contents of a template (e.g. html markup)
+                * @return {Function} Compiled template
+                */
+               add: function ( moduleName, templateName, templateBody ) {
+                       var compiledTemplate,
+                               compilerName = this.getCompilerName( templateName );
+
+                       if (!compiledTemplates[moduleName]) {
+                               compiledTemplates[moduleName] = {};
+                       }
+
+                       compiledTemplate = this.compile( templateBody, compilerName );
+                       compiledTemplates[moduleName][ templateName ] = compiledTemplate;
+                       return compiledTemplate;
+               },
+
+               /**
+                * Retrieve a template by module and template name.
+                *
+                * @param {string} moduleName Name of the module to retrieve the template from
+                * @param {string} templateName Name of template to be retrieved
+                * @return {Object} Compiled template
+                */
+               get: function ( moduleName, templateName ) {
+                       var moduleTemplates, compiledTemplate;
+
+                       // Check if the template has already been compiled, compile it if not
+                       if ( !compiledTemplates[ moduleName ] || !compiledTemplates[ moduleName ][ templateName ] ) {
+                               moduleTemplates = mw.templates.get( moduleName );
+                               if ( !moduleTemplates || !moduleTemplates[ templateName ] ) {
+                                       throw new Error( 'Template ' + templateName + ' not found in module ' + moduleName );
+                               }
+
+                               // Add compiled version
+                               compiledTemplate = this.add( moduleName, templateName, moduleTemplates[ templateName ] );
+                       } else {
+                               compiledTemplate = compiledTemplates[ moduleName ][ templateName ];
+                       }
+                       return compiledTemplate;
+               },
+
+               /**
+                * Wrap our template engine of choice.
+                *
+                * @param {string} templateBody Template body
+                * @param {string} compilerName The name of a registered compiler
+                * @return {Object} Template interface
+                */
+               compile: function ( templateBody, compilerName ) {
+                       return this.getCompiler( compilerName ).compile( templateBody );
+               }
+       };
+
+       // Register basic html compiler
+       mw.template.registerCompiler( 'html', {
+               compile: function ( src ) {
+                       return {
+                               render: function () {
+                                       return $( $.parseHTML( $.trim( src ) ) );
+                               }
+                       };
+               }
+       } );
+
+}( mediaWiki, jQuery ) );
index 7933f1d..809a65e 100644 (file)
@@ -62,7 +62,7 @@
                                seed = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
                        for ( i = 0; i < 32; i++ ) {
                                r = Math.floor( Math.random() * seed.length );
-                               id += seed.substring( r, r + 1 );
+                               id += seed.charAt( r );
                        }
                        return id;
                },
                }
        };
 
-       /**
-        * @method name
-        * @inheritdoc #getName
-        * @deprecated since 1.20 Use #getName instead
-        */
-       mw.log.deprecate( user, 'name', user.getName, 'Use mw.user.getName instead.' );
-
-       /**
-        * @method anonymous
-        * @inheritdoc #isAnon
-        * @deprecated since 1.20 Use #isAnon instead
-        */
-       mw.log.deprecate( user, 'anonymous', user.isAnon, 'Use mw.user.isAnon instead.' );
-
 }( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.userSuggest.js b/resources/src/mediawiki/mediawiki.userSuggest.js
new file mode 100644 (file)
index 0000000..aed093c
--- /dev/null
@@ -0,0 +1,42 @@
+/*!
+ * Add autocomplete suggestions for names of registered users.
+ */
+( function ( mw, $ ) {
+       var api, config;
+
+       config = {
+               fetch: function ( userInput ) {
+                       var $textbox = this,
+                               node = this[0];
+
+                       api = api || new mw.Api();
+
+                       $.data( node, 'request', api.get( {
+                               action: 'query',
+                               list: 'allusers',
+                               // Prefix of list=allusers is case sensitive. Normalise first
+                               // character to uppercase so that "fo" may yield "Foo".
+                               auprefix: userInput.charAt( 0 ).toUpperCase() + userInput.slice( 1 )
+                       } ).done( function ( data ) {
+                               var users = $.map( data.query.allusers, function ( userObj ) {
+                                       return userObj.name;
+                               } );
+                               // Set the results as the autocomplete options
+                               $textbox.suggestions( 'suggestions', users );
+                       } ) );
+               },
+               cancel: function () {
+                       var node = this[0],
+                               request = $.data( node, 'request' );
+
+                       if ( request ) {
+                               request.abort();
+                               $.removeData( node, 'request' );
+                       }
+               }
+       };
+
+       $( function () {
+               $( '.mw-autocomplete-user' ).suggestions( config );
+       } );
+}( mediaWiki, jQuery ) );
index 887885e..a53cbcb 100644 (file)
                        return null;
                },
 
-               /**
-                * Add the appropriate prefix to the accesskey shown in the tooltip.
-                *
-                * If the `$nodes` parameter is given, only those nodes are updated;
-                * otherwise, depending on browser support, we update either all elements
-                * with accesskeys on the page or a bunch of elements which are likely to
-                * have them on core skins.
-                *
-                * @param {Array|jQuery} [$nodes] A jQuery object, or array of nodes to update.
-                */
-               updateTooltipAccessKeys: function ( $nodes ) {
-                       if ( !$nodes ) {
-                               if ( document.querySelectorAll ) {
-                                       // If we're running on a browser where we can do this efficiently,
-                                       // just find all elements that have accesskeys. We can't use jQuery's
-                                       // polyfill for the selector since looping over all elements on page
-                                       // load might be too slow.
-                                       $nodes = $( document.querySelectorAll( '[accesskey]' ) );
-                               } else {
-                                       // Otherwise go through some elements likely to have accesskeys rather
-                                       // than looping over all of them. Unfortunately this will not fully
-                                       // work for custom skins with different HTML structures. Input, label
-                                       // and button should be rare enough that no optimizations are needed.
-                                       $nodes = $( '#column-one a, #mw-head a, #mw-panel a, #p-logo a, input, label, button' );
-                               }
-                       } else if ( !( $nodes instanceof $ ) ) {
-                               $nodes = $( $nodes );
-                       }
-
-                       $nodes.updateTooltipAccessKeys();
-               },
-
                /**
                 * The content wrapper of the skin (e.g. `.mw-body`).
                 *
                addPortletLink: function ( portlet, href, text, id, tooltip, accesskey, nextnode ) {
                        var $item, $link, $portlet, $ul;
 
-                       // Check if there's atleast 3 arguments to prevent a TypeError
+                       // Check if there's at least 3 arguments to prevent a TypeError
                        if ( arguments.length < 3 ) {
                                return null;
                        }
                        }
 
                        if ( tooltip ) {
-                               $link.attr( 'title', tooltip ).updateTooltipAccessKeys();
+                               $link.attr( 'title', tooltip );
                        }
 
                        if ( nextnode ) {
+                               // Case: nextnode is a DOM element (was the only option before MW 1.17, in wikibits.js)
+                               // Case: nextnode is a CSS selector for jQuery
                                if ( nextnode.nodeType || typeof nextnode === 'string' ) {
-                                       // nextnode is a DOM element (was the only option before MW 1.17, in wikibits.js)
-                                       // or nextnode is a CSS selector for jQuery
                                        nextnode = $ul.find( nextnode );
-                               } else if ( !nextnode.jquery || ( nextnode.length && nextnode[0].parentNode !== $ul[0] ) ) {
-                                       // Fallback
-                                       $ul.append( $item );
-                                       return $item[0];
+                               } else if ( !nextnode.jquery ) {
+                                       // Error: Invalid nextnode
+                                       nextnode = undefined;
                                }
-                               if ( nextnode.length === 1 ) {
-                                       // nextnode is a jQuery object that represents exactly one element
-                                       nextnode.before( $item );
-                                       return $item[0];
+                               if ( nextnode && ( nextnode.length !== 1 || nextnode[0].parentNode !== $ul[0] ) ) {
+                                       // Error: nextnode must resolve to a single node
+                                       // Error: nextnode must have the associated <ul> as its parent
+                                       nextnode = undefined;
                                }
                        }
 
-                       // Fallback (this is the default behavior)
-                       $ul.append( $item );
-                       return $item[0];
+                       // Case: nextnode is a jQuery-wrapped DOM element
+                       if ( nextnode ) {
+                               nextnode.before( $item );
+                       } else {
+                               // Fallback (this is the default behavior)
+                               $ul.append( $item );
+                       }
+
+                       // Update tooltip for the access key after inserting into DOM
+                       // to get a localized access key label (bug 67946).
+                       $link.updateTooltipAccessKeys();
 
+                       return $item[0];
                },
 
                /**
         */
        mw.log.deprecate( util, 'tooltipAccessKeyRegexp', /\[(ctrl-)?(option-)?(alt-)?(shift-)?(esc-)?(.)\]$/, 'Use jquery.accessKeyLabel instead.' );
 
+       /**
+        * Add the appropriate prefix to the accesskey shown in the tooltip.
+        *
+        * If the `$nodes` parameter is given, only those nodes are updated;
+        * otherwise, depending on browser support, we update either all elements
+        * with accesskeys on the page or a bunch of elements which are likely to
+        * have them on core skins.
+        *
+        * @method updateTooltipAccessKeys
+        * @param {Array|jQuery} [$nodes] A jQuery object, or array of nodes to update.
+        * @deprecated since 1.24 Use the module jquery.accessKeyLabel instead.
+        */
+       mw.log.deprecate( util, 'updateTooltipAccessKeys', function ( $nodes ) {
+               if ( !$nodes ) {
+                       if ( document.querySelectorAll ) {
+                               // If we're running on a browser where we can do this efficiently,
+                               // just find all elements that have accesskeys. We can't use jQuery's
+                               // polyfill for the selector since looping over all elements on page
+                               // load might be too slow.
+                               $nodes = $( document.querySelectorAll( '[accesskey]' ) );
+                       } else {
+                               // Otherwise go through some elements likely to have accesskeys rather
+                               // than looping over all of them. Unfortunately this will not fully
+                               // work for custom skins with different HTML structures. Input, label
+                               // and button should be rare enough that no optimizations are needed.
+                               $nodes = $( '#column-one a, #mw-head a, #mw-panel a, #p-logo a, input, label, button' );
+                       }
+               } else if ( !( $nodes instanceof $ ) ) {
+                       $nodes = $( $nodes );
+               }
+
+               $nodes.updateTooltipAccessKeys();
+       }, 'Use jquery.accessKeyLabel instead.' );
+
        /**
         * Add a little box at the top of the screen to inform the user of
         * something, replacing any previous message.
diff --git a/resources/src/mediawiki/templates/dialog.html b/resources/src/mediawiki/templates/dialog.html
new file mode 100644 (file)
index 0000000..e116f3e
--- /dev/null
@@ -0,0 +1,25 @@
+<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>
diff --git a/resources/src/polyfill-object-create.js b/resources/src/polyfill-object-create.js
new file mode 100644 (file)
index 0000000..607faf6
--- /dev/null
@@ -0,0 +1,62 @@
+/**
+ * Simplified version of es5-sham#Object-create that also works around a bug
+ * in the actual es5-sham: https://github.com/es-shims/es5-shim/issues/252
+ *
+ * Does not:
+ * - Support empty inheritance via `Object.create(null)`.
+ * - Support getter and setter accessors via `Object.create( .., properties )`.
+ * - Support custom property descriptor (e.g. writable, configurtable, enumerable).
+ * - Leave behind an enumerable "__proto__" all over the place.
+ *
+ * @author Timo Tijhof, 2014
+ */
+
+// ES5 15.2.3.5
+// http://es5.github.com/#x15.2.3.5
+if ( !Object.create ) {
+       ( function () {
+               var hasOwn = Object.hasOwnProperty,
+                       // https://developer.mozilla.org/en-US/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
+                       // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
+                       isEnumBug = !{ valueOf: 0 }.propertyIsEnumerable( 'valueOf' );
+
+               // Reusable constructor function for Object.create
+               function Empty() {}
+
+               function defineProperty( object, key, property ) {
+                       if ( hasOwn.call( property, 'value' ) ) {
+                               object[ key ] = property.value;
+                       } else {
+                               object[ key ] = property;
+                       }
+               }
+
+               Object.create = function create( prototype, properties ) {
+                       var object, key;
+
+                       if ( prototype !== Object( prototype ) ) {
+                               throw new TypeError( 'Called on non-object' );
+                       }
+
+                       Empty.prototype = prototype;
+                       object = new Empty();
+
+                       if ( properties !== undefined ) {
+                               if ( !isEnumBug ) {
+                                       for ( key in properties ) {
+                                               if ( hasOwn.call( properties, key ) ) {
+                                                       defineProperty( object, key, properties[ key ] );
+                                               }
+                                       }
+                               } else {
+                                       Object.keys( properties ).forEach( function ( key ) {
+                                               defineProperty( object, key, properties[ key ] );
+                                       } );
+                               }
+                       }
+
+                       return object;
+               };
+
+       }() );
+}
index 01efef4..a62cc9d 100644 (file)
@@ -7,15 +7,14 @@
 var mediaWikiLoadStart = ( new Date() ).getTime();
 
 /**
- * Returns false when run in a black-listed browser
+ * Returns false for Grade C supported browsers.
  *
- * This function will be deleted after it's used, so do not expand it to be
- * generally useful beyond startup.
+ * This function should only be used by the Startup module, do not expand it to
+ * be generally useful beyond startup.
  *
  * See also:
- * - https://www.mediawiki.org/wiki/Compatibility#Browser
- * - http://jquerymobile.com/gbs/
- * - http://jquery.com/browser-support/
+ * - https://www.mediawiki.org/wiki/Compatibility#Browsers
+ * - https://jquery.com/browser-support/
  */
 
 /*jshint unused: false */
@@ -26,8 +25,8 @@ function isCompatible( ua ) {
 
        // Browsers with outdated or limited JavaScript engines get the no-JS experience
        return !(
-               // Internet Explorer < 7
-               ( ua.indexOf( 'MSIE' ) !== -1 && parseFloat( ua.split( 'MSIE' )[1] ) < 7 ) ||
+               // Internet Explorer < 8
+               ( ua.indexOf( 'MSIE' ) !== -1 && parseFloat( ua.split( 'MSIE' )[1] ) < 8 ) ||
                // Firefox < 3
                ( ua.indexOf( 'Firefox/' ) !== -1 && parseFloat( ua.split( 'Firefox/' )[1] ) < 3 ) ||
                // Opera < 12
deleted file mode 100644 (file)
index 6b9464a914398344a7ddcbd239be61441fa68fea..0000000000000000000000000000000000000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/**
- * Remote Scripting Library
- * Copyright 2005 modernmethod, inc
- * Under the open source BSD license
- * http://www.modernmethod.com/sajax/
- */
-
-/*jshint camelcase:false */
-/*global alert */
-( function ( mw ) {
-
-/**
- * if sajax_debug_mode is true, this function outputs given the message into
- * the element with id = sajax_debug; if no such element exists in the document,
- * it is injected.
- */
-function debug( text ) {
-       if ( !window.sajax_debug_mode ) {
-               return false;
-       }
-
-       var b, m,
-               e = document.getElementById( 'sajax_debug' );
-
-       if ( !e ) {
-               e = document.createElement( 'p' );
-               e.className = 'sajax_debug';
-               e.id = 'sajax_debug';
-
-               b = document.getElementsByTagName( 'body' )[0];
-
-               if ( b.firstChild ) {
-                       b.insertBefore( e, b.firstChild );
-               } else {
-                       b.appendChild( e );
-               }
-       }
-
-       m = document.createElement( 'div' );
-       m.appendChild( document.createTextNode( text ) );
-
-       e.appendChild( m );
-
-       return true;
-}
-
-/**
- * Compatibility wrapper for creating a new XMLHttpRequest object.
- */
-function createXhr() {
-       debug( 'sajax_init_object() called..' );
-       var a;
-       try {
-               // Try the new style before ActiveX so we don't
-               // unnecessarily trigger warnings in IE 7 when
-               // set to prompt about ActiveX usage
-               a = new XMLHttpRequest();
-       } catch ( xhrE ) {
-               try {
-                       a = new window.ActiveXObject( 'Msxml2.XMLHTTP' );
-               } catch ( msXmlE ) {
-                       try {
-                               a = new window.ActiveXObject( 'Microsoft.XMLHTTP' );
-                       } catch ( msXhrE ) {
-                               a = null;
-                       }
-               }
-       }
-       if ( !a ) {
-               debug( 'Could not create connection object.' );
-       }
-
-       return a;
-}
-
-/**
- * Perform an AJAX call to MediaWiki. Calls are handled by AjaxDispatcher.php
- *   func_name - the name of the function to call. Must be registered in $wgAjaxExportList
- *   args - an array of arguments to that function
- *   target - the target that will handle the result of the call. If this is a function,
- *            if will be called with the XMLHttpRequest as a parameter; if it's an input
- *            element, its value will be set to the resultText; if it's another type of
- *            element, its innerHTML will be set to the resultText.
- *
- * Example:
- *    sajax_do_call( 'doFoo', [1, 2, 3], document.getElementById( 'showFoo' ) );
- *
- * This will call the doFoo function via MediaWiki's AjaxDispatcher, with
- * (1, 2, 3) as the parameter list, and will show the result in the element
- * with id = showFoo
- */
-function doAjaxRequest( func_name, args, target ) {
-       var i, x, uri, post_data;
-       uri = mw.util.wikiScript() + '?action=ajax';
-       if ( window.sajax_request_type === 'GET' ) {
-               if ( uri.indexOf( '?' ) === -1 ) {
-                       uri = uri + '?rs=' + encodeURIComponent( func_name );
-               } else {
-                       uri = uri + '&rs=' + encodeURIComponent( func_name );
-               }
-               for ( i = 0; i < args.length; i++ ) {
-                       uri = uri + '&rsargs[]=' + encodeURIComponent( args[i] );
-               }
-               //uri = uri + '&rsrnd=' + new Date().getTime();
-               post_data = null;
-       } else {
-               post_data = 'rs=' + encodeURIComponent( func_name );
-               for ( i = 0; i < args.length; i++ ) {
-                       post_data = post_data + '&rsargs[]=' + encodeURIComponent( args[i] );
-               }
-       }
-       x = createXhr();
-       if ( !x ) {
-               alert( 'AJAX not supported' );
-               return false;
-       }
-
-       try {
-               x.open( window.sajax_request_type, uri, true );
-       } catch ( e ) {
-               if ( location.hostname === 'localhost' ) {
-                       alert( 'Your browser blocks XMLHttpRequest to "localhost", try using a real hostname for development/testing.' );
-               }
-               throw e;
-       }
-       if ( window.sajax_request_type === 'POST' ) {
-               x.setRequestHeader( 'Method', 'POST ' + uri + ' HTTP/1.1' );
-               x.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
-       }
-       x.setRequestHeader( 'Pragma', 'cache=yes' );
-       x.setRequestHeader( 'Cache-Control', 'no-transform' );
-       x.onreadystatechange = function () {
-               if ( x.readyState !== 4 ) {
-                       return;
-               }
-
-               debug( 'received (' + x.status + ' ' + x.statusText + ') ' + x.responseText );
-
-               //if ( x.status != 200 )
-               //      alert( 'Error: ' + x.status + ' ' + x.statusText + ': ' + x.responseText );
-               //else
-
-               if ( typeof target === 'function' ) {
-                       target( x );
-               } else if ( typeof target === 'object' ) {
-                       if ( target.tagName === 'INPUT' ) {
-                               if ( x.status === 200 ) {
-                                       target.value = x.responseText;
-                               }
-                               //else alert( 'Error: ' + x.status + ' ' + x.statusText + ' (' + x.responseText + ')' );
-                       } else {
-                               if ( x.status === 200 ) {
-                                       target.innerHTML = x.responseText;
-                               } else {
-                                       target.innerHTML = '<div class="error">Error: ' + x.status +
-                                               ' ' + x.statusText + ' (' + x.responseText + ')</div>';
-                               }
-                       }
-               } else {
-                       alert( 'Bad target for sajax_do_call: not a function or object: ' + target );
-               }
-       };
-
-       debug( func_name + ' uri = ' + uri + ' / post = ' + post_data );
-       x.send( post_data );
-       debug( func_name + ' waiting..' );
-
-       return true;
-}
-
-/**
- * @return {boolean} Whether the browser supports AJAX
- */
-function wfSupportsAjax() {
-       var request = createXhr(),
-               supportsAjax = request ? true : false;
-
-       request = undefined;
-       return supportsAjax;
-}
-
-// Expose + Mark as deprecated
-var deprecationNotice = 'Sajax is deprecated, use jQuery.ajax or mediawiki.api instead.';
-
-// Variables
-mw.log.deprecate( window, 'sajax_debug_mode', false, deprecationNotice );
-mw.log.deprecate( window, 'sajax_request_type', 'GET', deprecationNotice );
-// Methods
-mw.log.deprecate( window, 'sajax_debug', debug, deprecationNotice );
-mw.log.deprecate( window, 'sajax_init_object', createXhr, deprecationNotice );
-mw.log.deprecate( window, 'sajax_do_call', doAjaxRequest, deprecationNotice );
-mw.log.deprecate( window, 'wfSupportsAjax', wfSupportsAjax, deprecationNotice );
-
-}( mediaWiki ) );
new file mode 120000 (symlink)
index 0000000000000000000000000000000000000000..6cf8d718503709f208b5fbecec35ab55ea3d9f13
--- /dev/null
@@ -0,0 +1 @@
+../../resources/src/mediawiki.legacy/ajax.js
\ No newline at end of file
diff --git a/skins/common/commonContent.css b/skins/common/commonContent.css
deleted file mode 100644 (file)
index 622afe6..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-/**
- * MediaWiki style sheet for general styles on complex content
- *
- * Styles for complex things which are a standard part of page content
- * (ie: the CSS classing built into the system), like the TOC.
- */
-
-/* Table of Contents */
-#toc,
-.toc,
-.mw-warning {
-       border: 1px solid #aaa;
-       background-color: #f9f9f9;
-       padding: 5px;
-       font-size: 95%;
-}
-
-/**
- * We want to display the ToC element with intrinsic width in block mode. The fit-content
- * value for width is however not supported by large groups of browsers.
- *
- * We use display:table. Even though it should only contain other table-* display
- * elements, there are no known problems with using this.
- *
- * Because IE < 8, FF 2 and other older browsers don't support display:table, we fallback to
- * using inline-block mode, which features at least intrinsic width, but won't clear preceding
- * inline elements. In practice inline elements surrounding the TOC are uncommon enough that
- * this is an acceptable sacrifice.
- */
-#toc,
-.toc {
-       display: -moz-inline-block;
-       display: inline-block;
-       display: table;
-
-       /* IE7 and earlier */
-       zoom: 1;
-       *display: inline;
-
-       padding: 7px;
-}
-
-/* CSS for backwards-compatibility with cached page renders and creative uses in wikitext */
-table#toc,
-table.toc {
-       border-collapse: collapse;
-}
-
-/* Remove additional paddings inside table-cells that are not present in <div>s */
-table#toc td,
-table.toc td {
-       padding: 0;
-}
-
-#toc h2,
-.toc h2 {
-       display: inline;
-       border: none;
-       padding: 0;
-       font-size: 100%;
-       font-weight: bold;
-}
-
-#toc #toctitle,
-.toc #toctitle,
-#toc .toctitle,
-.toc .toctitle {
-       text-align: center;
-}
-
-#toc ul,
-.toc ul {
-       list-style-type: none;
-       list-style-image: none;
-       margin-left: 0;
-       padding: 0;
-       text-align: left;
-}
-
-#toc ul ul,
-.toc ul ul {
-       margin: 0 0 0 2em;
-}
-
-#toc .toctoggle,
-.toc .toctoggle {
-       font-size: 94%;
-}
-
-.toccolours {
-       border: 1px solid #aaa;
-       background-color: #f9f9f9;
-       padding: 5px;
-       font-size: 95%;
-}
-
-/* Warning */
-.mw-warning {
-       margin-left: 50px;
-       margin-right: 50px;
-       text-align: center;
-}
-
-/* Images */
-/* @noflip */div.floatright, table.floatright {
-       margin: 0 0 .5em .5em;
-       border: 0;
-}
-
-div.floatright p {
-       font-style: italic;
-}
-
-/* @noflip */div.floatleft, table.floatleft {
-       margin: 0 .5em .5em 0;
-       border: 0;
-}
-
-div.floatleft p {
-       font-style: italic;
-}
-
-/* Thumbnails */
-div.thumb {
-       margin-bottom: .5em;
-       width: auto;
-       background-color: transparent;
-}
-
-div.thumbinner {
-       border: 1px solid #ccc;
-       padding: 3px;
-       background-color: #f9f9f9;
-       font-size: 94%;
-       text-align: center;
-       overflow: hidden;
-}
-
-html .thumbimage {
-       border: 1px solid #ccc;
-}
-
-html .thumbcaption {
-       border: none;
-       line-height: 1.4em;
-       padding: 3px;
-       font-size: 94%;
-       /* Default styles when there's no .mw-content-ltr or .mw-content-rtl, overridden below */
-       text-align: left;
-}
-
-div.magnify {
-       /* Default styles when there's no .mw-content-ltr or .mw-content-rtl, overridden below */
-       float: right;
-       margin-left: 3px;
-}
-
-div.magnify a {
-       display: block;
-       /* Hide the text… */
-       text-indent: 15px;
-       white-space: nowrap;
-       overflow: hidden;
-       /* …and replace it with the image */
-       width: 15px;
-       height: 11px;
-       /* Default styles when there's no .mw-content-ltr or .mw-content-rtl, overridden below */
-       /* @embed */
-       background: url(images/magnify-clip-ltr.png) center center no-repeat;
-       /* Don't annoy people who copy-paste everything too much */
-       -moz-user-select: none;
-       -webkit-user-select: none;
-       -ms-user-select: none;
-       user-select: none;
-}
-
-/* Temporary WMF deployment hack, to be removed before 1.24 release */
-div.magnify img {
-       display: none;
-}
-
-img.thumbborder {
-       border: 1px solid #dddddd;
-}
-
-/* Directionality-specific styles for thumbnails - their positioning depends on content language */
-
-/* @noflip */
-.mw-content-ltr .thumbcaption {
-       text-align: left;
-}
-
-/* @noflip */
-.mw-content-ltr .magnify {
-       float: right;
-       margin-left: 3px;
-       margin-right: 0;
-}
-
-/* @noflip */
-.mw-content-ltr div.magnify a {
-       /* @embed */
-       background-image: url(images/magnify-clip-ltr.png);
-}
-
-/* @noflip */
-.mw-content-rtl .thumbcaption {
-       text-align: right;
-}
-
-/* @noflip */
-.mw-content-rtl .magnify {
-       float: left;
-       margin-left: 0;
-       margin-right: 3px;
-}
-
-/* @noflip */
-.mw-content-rtl div.magnify a {
-       /* @embed */
-       background-image: url(images/magnify-clip-rtl.png);
-}
-
-/* @noflip */
-div.tright {
-       margin: .5em 0 1.3em 1.4em;
-}
-
-/* @noflip */
-div.tleft {
-       margin: .5em 1.4em 1.3em 0;
-}
diff --git a/skins/common/commonElements.css b/skins/common/commonElements.css
deleted file mode 100644 (file)
index 392a2a6..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/**
- * MediaWiki style sheet for general styles on basic content elements
- *
- * Styles for basic elements: links, lists, etc...
- *
- * This style sheet is used by the Monobook and Vector skins.
- */
-
-/* Links */
-a {
-       text-decoration: none;
-       color: #0645ad;
-       background: none;
-}
-
-a:visited {
-       color: #0b0080;
-}
-
-a:active {
-       color: #faa700;
-}
-
-a:hover, a:focus {
-       text-decoration: underline;
-}
-
-a.stub {
-       color: #772233;
-}
-
-a.new, #p-personal a.new {
-       color: #ba0000;
-}
-
-a.new:visited, #p-personal a.new:visited {
-       color: #a55858;
-}
-
-/* Interwiki Styling */
-.mw-body a.extiw,
-.mw-body a.extiw:active {
-       color: #36b;
-}
-
-.mw-body a.extiw:visited {
-       color: #636;
-}
-
-.mw-body a.extiw:active {
-       color: #b63;
-}
-
-/* External links */
-.mw-body a.external {
-       color: #36b;
-}
-
-.mw-body a.external:visited {
-       color: #636; /* bug 3112 */
-}
-
-.mw-body a.external:active {
-       color: #b63;
-}
-
-/* Inline Elements */
-img {
-       border: none;
-       vertical-align: middle;
-}
-
-hr {
-       height: 1px;
-       color: #aaa;
-       background-color: #aaa;
-       border: 0;
-       margin: .2em 0;
-}
-
-/* Structural Elements */
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-       color: black;
-       background: none;
-       font-weight: normal;
-       margin: 0;
-       overflow: hidden;
-       padding-top: .5em;
-       padding-bottom: .17em;
-       border-bottom: 1px solid #aaa;
-}
-
-h1 {
-       font-size: 188%;
-}
-
-h2 {
-       font-size: 150%;
-}
-
-h3,
-h4,
-h5,
-h6 {
-       border-bottom: none;
-       font-weight: bold;
-}
-
-h3 {
-       font-size: 132%;
-}
-
-h4 {
-       font-size: 116%;
-}
-
-h5 {
-       font-size: 108%;
-}
-
-h6 {
-       font-size: 100%;
-}
-
-/* Some space under the headers in the content area */
-h1,
-h2 {
-       margin-bottom: .6em;
-}
-
-h3,
-h4,
-h5 {
-       margin-bottom: .3em;
-}
-
-p {
-       margin: .4em 0 .5em 0;
-       line-height: 1.5em;
-}
-
-p img {
-       margin: 0;
-}
-
-ul {
-       line-height: 1.5em;
-       list-style-type: square;
-       margin: .3em 0 0 1.6em;
-       padding: 0;
-}
-
-ol {
-       line-height: 1.5em;
-       margin: .3em 0 0 3.2em;
-       padding: 0;
-       list-style-image: none;
-}
-
-li {
-       margin-bottom: .1em;
-}
-
-dt {
-       font-weight: bold;
-       margin-bottom: .1em;
-}
-
-dl {
-       margin-top: .2em;
-       margin-bottom: .5em;
-}
-
-dd {
-       line-height: 1.5em;
-       margin-left: 1.6em;
-       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.
-        * Specifying any valid, second value will trigger correct behavior without forcing a different font.
-        */
-       font-family: monospace, Courier;
-}
-
-code {
-       color: black;
-       background-color: #f9f9f9;
-       border: 1px solid #ddd;
-       border-radius: 2px;
-       padding: 1px 4px;
-}
-
-pre, .mw-code {
-       color: black;
-       background-color: #f9f9f9;
-       border: 1px solid #ddd;
-       padding: 1em;
-}
-
-/* Tables */
-table {
-       font-size: 100%;
-}
-
-/* Forms */
-fieldset {
-       border: 1px solid #2f6fab;
-       margin: 1em 0 1em 0;
-       padding: 0 1em 1em;
-       line-height: 1.5em;
-}
-
-fieldset.nested {
-       margin: 0 0 0.5em 0;
-       padding: 0 0.5em 0.5em;
-}
-
-legend {
-       padding: .5em;
-       font-size: 95%;
-}
-
-form {
-       border: none;
-       margin: 0;
-}
-
-textarea {
-       width: 100%;
-       padding: .1em;
-       display: block;
-       -moz-box-sizing: border-box;
-       -webkit-box-sizing: border-box;
-       box-sizing: border-box;
-}
-
-select {
-       vertical-align: top;
-}
-
-/* Emulate Center */
-.center {
-       width: 100%;
-       text-align: center;
-}
-
-*.center * {
-       margin-left: auto;
-       margin-right: auto;
-}
-
-/* Small for tables and similar */
-.small {
-       font-size: 94%;
-}
-
-table.small {
-       font-size: 100%;
-}
diff --git a/skins/common/commonInterface.css b/skins/common/commonInterface.css
deleted file mode 100644 (file)
index 733fd11..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * MediaWiki style sheet for common core styles on interfaces
- *
- * Styles for the Monobook/Vector pattern of laying out common interfaces.
- * These ids/classes are not built into the system,
- * they are outputted by the actual MonoBook/Vector code by convention.
- */
-
-/* Categories */
-.catlinks {
-       border: 1px solid #aaa;
-       background-color: #f9f9f9;
-       padding: 5px;
-       margin-top: 1em;
-       clear: both;
-}
-
-/* User Message */
-.usermessage {
-       background-color: #ffce7b;
-       border: 1px solid #ffa500;
-       color: black;
-       font-weight: bold;
-       margin: 2em 0 1em;
-       padding: .5em 1em;
-       vertical-align: middle;
-}
-
-/* Site Notice (includes notices from CentralNotice extension) */
-#siteNotice {
-       position: relative;
-       text-align: center;
-       margin: 0;
-}
-
-#localNotice {
-       margin-bottom: 0.9em;
-}
-
-/* First h1 */
-.firstHeading,
-#firstHeading {
-       margin-bottom: .1em;
-       /* These two rules hack around bug 2013 (fix for more limited bug 11325).
-        * When bug 2013 is fixed properly, they should be removed. */
-       line-height: 1.2em;
-       padding-bottom: 0;
-}
-
-/* Sub-navigation */
-#siteSub {
-       display: none;
-}
-
-#jump-to-nav {
-       /* Negate #contentSub's margin and replicate it so that the jump to links don't affect the spacing */
-       margin-top: -1.4em;
-       margin-bottom: 1.4em;
-}
-
-#contentSub, #contentSub2 {
-       font-size: 84%;
-       line-height: 1.2em;
-       margin: 0 0 1.4em 1em;
-       color: #545454;
-       width: auto;
-}
-
-span.subpages {
-       display: block;
-}
diff --git a/skins/common/commonPrint.css b/skins/common/commonPrint.css
deleted file mode 100644 (file)
index dda17fb..0000000
+++ /dev/null
@@ -1,431 +0,0 @@
-/**
- * MediaWiki Print style sheet for CSS2-capable browsers.
- * Copyright Gabriel Wicke, http://www.aulinx.de/
- *
- * Derived from the plone (http://plone.org/) styles
- * Copyright Alexander Limi
- */
-
-/* Thanks to A List Apart (http://alistapart.com/) for useful extras */
-
-/**
- * Hide all the elements irrelevant for printing
- */
-.noprint,
-div#jump-to-nav,
-.mw-jump,
-div.top,
-div#column-one,
-#colophon,
-.mw-editsection,
-.mw-editsection-like,
-.toctoggle,
-#toc.tochidden,
-div#f-poweredbyico,
-div#f-copyrightico,
-li#viewcount,
-li#about,
-li#disclaimer,
-li#mobileview,
-li#privacy,
-#footer-places,
-.mw-hidden-catlinks,
-tr.mw-metadata-show-hide-extended,
-span.mw-filepage-other-resolutions,
-#filetoc,
-.usermessage,
-.patrollink,
-#mw-navigation,
-#siteNotice {
-       display: none;
-}
-
-/**
- * Pagination
- */
-.wikitable, .thumb, img {
-       page-break-inside: avoid;
-}
-
-h2, h3, h4, h5, h6 {
-       page-break-after: avoid;
-}
-
-p {
-       widows: 3;
-       orphans: 3;
-}
-
-/**
- * Generic HTML elements
- */
-body {
-       background: white;
-       color: black;
-       margin: 0;
-       padding: 0;
-}
-
-ul {
-       list-style-type: square;
-}
-
-h1, h2, h3, h4, h5, h6 {
-       font-weight: bold;
-}
-
-dt {
-       font-weight: bold;
-}
-
-p {
-       margin: 1em 0;
-       line-height: 1.2em;
-}
-
-pre, .mw-code {
-       border: 1pt dashed black;
-       white-space: pre;
-       font-size: 8pt;
-       overflow: auto;
-       padding: 1em 0;
-       background: white;
-       color: black;
-}
-
-/**
- * MediaWiki-specific elements
- */
-#globalWrapper {
-       width: 100% !important;
-       min-width: 0 !important;
-}
-
-#content {
-       background: white;
-       border: none !important;
-       padding: 0 !important;
-       margin: 0 !important;
-       direction: ltr;
-       color: black;
-}
-
-#column-content {
-       margin: 0 !important;
-}
-
-#column-content #content {
-       padding: 1em;
-       margin: 0 !important;
-}
-
-#toc {
-       border: 1px solid #aaaaaa;
-       background-color: #f9f9f9;
-       padding: 5px;
-       display: -moz-inline-block;
-       display: inline-block;
-       display: table;
-       /* IE7 and earlier */
-       zoom: 1;
-       *display: inline;
-}
-
-#footer {
-       background: white;
-       color: black;
-       margin-top: 1em;
-       border-top: 1px solid #AAA;
-       direction: ltr;
-}
-
-img {
-       border: none;
-       vertical-align: middle;
-}
-
-/* math */
-span.texhtml {
-       font-family: serif;
-}
-
-/**
- * Links
- */
-a.stub,
-a.new {
-       color: #ba0000;
-       text-decoration: none;
-}
-
-a {
-       color: black !important;
-       background: none !important;
-       padding: 0 !important;
-}
-
-a:link, a:visited {
-       color: #520;
-       background: transparent;
-       text-decoration: underline;
-}
-
-/* Expand URLs for printing */
-#content a.external.text:after,
-#content a.external.autonumber:after {
-       content: " (" attr(href) ")";
-}
-
-/* Expand protocol-relative URLs for printing */
-#content a.external.text[href^='//']:after,
-#content a.external.autonumber[href^='//']:after {
-       content: " (https:" attr(href) ")";
-}
-
-/* MSIE/Win doesn't understand 'inherit' */
-a,
-a.external,
-a.new,
-a.stub {
-       color: black !important;
-       text-decoration: none !important;
-}
-
-/* Continue ... */
-a,
-a.external,
-a.new,
-a.stub {
-       color: inherit !important;
-       text-decoration: inherit !important;
-}
-
-/**
- * Floating divs
- */
-div.floatright {
-       float: right;
-       clear: right;
-       position: relative;
-       margin: 0.5em 0 0.8em 1.4em;
-}
-
-div.floatright p {
-       font-style: italic;
-}
-
-div.floatleft {
-       float: left;
-       clear: left;
-       position: relative;
-       margin: 0.5em 1.4em 0.8em 0;
-}
-
-div.floatleft p {
-       font-style: italic;
-}
-
-div.center {
-       text-align: center;
-}
-
-/**
- * Thumbnails
- */
-div.thumb {
-       border: none;
-       width: auto;
-       margin-top: 0.5em;
-       margin-bottom: 0.8em;
-       background-color: transparent;
-}
-
-div.thumbinner {
-       border: 1px solid #cccccc;
-       padding: 3px !important;
-       background-color: White;
-       font-size: 94%;
-       text-align: center;
-       overflow: hidden;
-}
-
-html .thumbimage {
-       border: 1px solid #cccccc;
-}
-
-html .thumbcaption {
-       border: none;
-       text-align: left;
-       line-height: 1.4em;
-       padding: 3px !important;
-       font-size: 94%;
-}
-
-div.magnify {
-       display: none;
-}
-
-/* @noflip */
-div.tright {
-       float: right;
-       clear: right;
-       margin: 0.5em 0 0.8em 1.4em;
-}
-
-/* @noflip */
-div.tleft {
-       float: left;
-       clear: left;
-       margin: 0.5em 1.4em 0.8em 0;
-}
-
-img.thumbborder {
-       border: 1px solid #dddddd;
-}
-
-/**
- * Galleries (see shared.css for more info)
- */
-li.gallerybox {
-       vertical-align: top;
-       display: inline-block;
-}
-
-ul.gallery, li.gallerybox {
-       zoom: 1;
-       *display: inline;
-}
-
-ul.gallery {
-       margin: 2px;
-       padding: 2px;
-       display: block;
-}
-
-li.gallerycaption {
-       font-weight: bold;
-       text-align: center;
-       display: block;
-       word-wrap: break-word;
-}
-
-li.gallerybox div.thumb {
-       text-align: center;
-       border: 1px solid #ccc;
-       margin: 2px;
-}
-
-div.gallerytext {
-       overflow: hidden;
-       font-size: 94%;
-       padding: 2px 4px;
-       word-wrap: break-word;
-}
-
-/**
- * Diff rendering
- */
-table.diff {
-       background: white;
-}
-
-td.diff-otitle {
-       background: #ffffff;
-}
-
-td.diff-ntitle {
-       background: #ffffff;
-}
-
-td.diff-addedline {
-       background: #ccffcc;
-       font-size: smaller;
-       border: solid 2px black;
-}
-
-td.diff-deletedline {
-       background: #ffffaa;
-       font-size: smaller;
-       border: dotted 2px black;
-}
-
-td.diff-context {
-       background: #eeeeee;
-       font-size: smaller;
-}
-
-.diffchange {
-       color: silver;
-       font-weight: bold;
-       text-decoration: underline;
-}
-
-/**
- * Table rendering
- * As on shared.css but with white background.
- */
-table.wikitable,
-table.mw_metadata {
-       margin: 1em 0;
-       border: 1px #aaa solid;
-       background: white;
-       border-collapse: collapse;
-}
-
-table.wikitable > tr > th, table.wikitable > tr > td,
-table.wikitable > * > tr > th, table.wikitable > * > tr > td,
-.mw_metadata th, .mw_metadata td {
-       border: 1px #aaa solid;
-       padding: 0.2em;
-}
-
-table.wikitable > tr > th,
-table.wikitable > * > tr > th,
-.mw_metadata th {
-       text-align: center;
-       background: white;
-       font-weight: bold;
-}
-
-table.wikitable > caption,
-.mw_metadata caption {
-       font-weight: bold;
-}
-
-table.listing,
-table.listing td {
-       border: 1pt solid black;
-       border-collapse: collapse;
-}
-
-a.sortheader {
-       margin: 0 0.3em;
-}
-
-/**
- * Categories
- */
-.catlinks ul {
-       display: inline;
-       margin: 0;
-       padding: 0;
-       list-style: none;
-       list-style-type: none;
-       list-style-image: none;
-       vertical-align: middle !ie;
-}
-
-.catlinks li {
-       display: inline-block;
-       line-height: 1.15em;
-       padding: 0 .4em;
-       border-left: 1px solid #AAA;
-       margin: 0.1em 0;
-       zoom: 1;
-       display: inline !ie;
-}
-
-.catlinks li:first-child {
-       padding-left: .2em;
-       border-left: none;
-}
diff --git a/skins/common/images/Arr_d.png b/skins/common/images/Arr_d.png
deleted file mode 100644 (file)
index 58a9fc6..0000000
Binary files a/skins/common/images/Arr_d.png and /dev/null differ
diff --git a/skins/common/images/Arr_u.png b/skins/common/images/Arr_u.png
deleted file mode 100644 (file)
index 1aa543a..0000000
Binary files a/skins/common/images/Arr_u.png and /dev/null differ
diff --git a/skins/common/images/Checker-16x16.png b/skins/common/images/Checker-16x16.png
deleted file mode 100644 (file)
index 3e9e3d0..0000000
Binary files a/skins/common/images/Checker-16x16.png and /dev/null differ
diff --git a/skins/common/images/ajax-loader.gif b/skins/common/images/ajax-loader.gif
deleted file mode 100644 (file)
index 72203fd..0000000
Binary files a/skins/common/images/ajax-loader.gif and /dev/null differ
diff --git a/skins/common/images/ar/button_bold.png b/skins/common/images/ar/button_bold.png
deleted file mode 100644 (file)
index e524f6c..0000000
Binary files a/skins/common/images/ar/button_bold.png and /dev/null differ
diff --git a/skins/common/images/ar/button_headline.png b/skins/common/images/ar/button_headline.png
deleted file mode 100644 (file)
index 398e561..0000000
Binary files a/skins/common/images/ar/button_headline.png and /dev/null differ
diff --git a/skins/common/images/ar/button_italic.png b/skins/common/images/ar/button_italic.png
deleted file mode 100644 (file)
index 6ec73e9..0000000
Binary files a/skins/common/images/ar/button_italic.png and /dev/null differ
diff --git a/skins/common/images/ar/button_link.png b/skins/common/images/ar/button_link.png
deleted file mode 100644 (file)
index c9c63f6..0000000
Binary files a/skins/common/images/ar/button_link.png and /dev/null differ
diff --git a/skins/common/images/ar/button_nowiki.png b/skins/common/images/ar/button_nowiki.png
deleted file mode 100644 (file)
index 743ea61..0000000
Binary files a/skins/common/images/ar/button_nowiki.png and /dev/null differ
diff --git a/skins/common/images/arrow_disabled_first_25.png b/skins/common/images/arrow_disabled_first_25.png
deleted file mode 100644 (file)
index 78a493e..0000000
Binary files a/skins/common/images/arrow_disabled_first_25.png and /dev/null differ
diff --git a/skins/common/images/arrow_disabled_last_25.png b/skins/common/images/arrow_disabled_last_25.png
deleted file mode 100644 (file)
index 2a64fd0..0000000
Binary files a/skins/common/images/arrow_disabled_last_25.png and /dev/null differ
diff --git a/skins/common/images/arrow_disabled_left_25.png b/skins/common/images/arrow_disabled_left_25.png
deleted file mode 100644 (file)
index 83df068..0000000
Binary files a/skins/common/images/arrow_disabled_left_25.png and /dev/null differ
diff --git a/skins/common/images/arrow_disabled_right_25.png b/skins/common/images/arrow_disabled_right_25.png
deleted file mode 100644 (file)
index aa4fbf8..0000000
Binary files a/skins/common/images/arrow_disabled_right_25.png and /dev/null differ
diff --git a/skins/common/images/arrow_first_25.png b/skins/common/images/arrow_first_25.png
deleted file mode 100644 (file)
index 52b32a5..0000000
Binary files a/skins/common/images/arrow_first_25.png and /dev/null differ
diff --git a/skins/common/images/arrow_last_25.png b/skins/common/images/arrow_last_25.png
deleted file mode 100644 (file)
index caf5033..0000000
Binary files a/skins/common/images/arrow_last_25.png and /dev/null differ
diff --git a/skins/common/images/arrow_left_25.png b/skins/common/images/arrow_left_25.png
deleted file mode 100644 (file)
index f363bf6..0000000
Binary files a/skins/common/images/arrow_left_25.png and /dev/null differ
diff --git a/skins/common/images/arrow_right_25.png b/skins/common/images/arrow_right_25.png
deleted file mode 100644 (file)
index 3f8fee3..0000000
Binary files a/skins/common/images/arrow_right_25.png and /dev/null differ
diff --git a/skins/common/images/be-tarask/button_bold.png b/skins/common/images/be-tarask/button_bold.png
deleted file mode 100644 (file)
index 5c10cfe..0000000
Binary files a/skins/common/images/be-tarask/button_bold.png and /dev/null differ
diff --git a/skins/common/images/be-tarask/button_italic.png b/skins/common/images/be-tarask/button_italic.png
deleted file mode 100644 (file)
index 72209d7..0000000
Binary files a/skins/common/images/be-tarask/button_italic.png and /dev/null differ
diff --git a/skins/common/images/be-tarask/button_link.png b/skins/common/images/be-tarask/button_link.png
deleted file mode 100644 (file)
index 09c86fb..0000000
Binary files a/skins/common/images/be-tarask/button_link.png and /dev/null differ
diff --git a/skins/common/images/button_bold.png b/skins/common/images/button_bold.png
deleted file mode 100644 (file)
index 75c3f10..0000000
Binary files a/skins/common/images/button_bold.png and /dev/null differ
diff --git a/skins/common/images/button_extlink.png b/skins/common/images/button_extlink.png
deleted file mode 100644 (file)
index 458943c..0000000
Binary files a/skins/common/images/button_extlink.png and /dev/null differ
diff --git a/skins/common/images/button_headline.png b/skins/common/images/button_headline.png
deleted file mode 100644 (file)
index 9cf751d..0000000
Binary files a/skins/common/images/button_headline.png and /dev/null differ
diff --git a/skins/common/images/button_hr.png b/skins/common/images/button_hr.png
deleted file mode 100644 (file)
index 47e1ca4..0000000
Binary files a/skins/common/images/button_hr.png and /dev/null differ
diff --git a/skins/common/images/button_image.png b/skins/common/images/button_image.png
deleted file mode 100644 (file)
index 6919296..0000000
Binary files a/skins/common/images/button_image.png and /dev/null differ
diff --git a/skins/common/images/button_italic.png b/skins/common/images/button_italic.png
deleted file mode 100644 (file)
index 527fbd1..0000000
Binary files a/skins/common/images/button_italic.png and /dev/null differ
diff --git a/skins/common/images/button_link.png b/skins/common/images/button_link.png
deleted file mode 100644 (file)
index eb5634b..0000000
Binary files a/skins/common/images/button_link.png and /dev/null differ
diff --git a/skins/common/images/button_media.png b/skins/common/images/button_media.png
deleted file mode 100644 (file)
index 4194ec1..0000000
Binary files a/skins/common/images/button_media.png and /dev/null differ
diff --git a/skins/common/images/button_nowiki.png b/skins/common/images/button_nowiki.png
deleted file mode 100644 (file)
index 2ba818d..0000000
Binary files a/skins/common/images/button_nowiki.png and /dev/null differ
diff --git a/skins/common/images/button_sig.png b/skins/common/images/button_sig.png
deleted file mode 100644 (file)
index fe34b3f..0000000
Binary files a/skins/common/images/button_sig.png and /dev/null differ
diff --git a/skins/common/images/cc-0.png b/skins/common/images/cc-0.png
deleted file mode 100644 (file)
index 9d3fe5f..0000000
Binary files a/skins/common/images/cc-0.png and /dev/null differ
diff --git a/skins/common/images/cc-by-nc-sa.png b/skins/common/images/cc-by-nc-sa.png
deleted file mode 100644 (file)
index 0d24a71..0000000
Binary files a/skins/common/images/cc-by-nc-sa.png and /dev/null differ
diff --git a/skins/common/images/cc-by-sa.png b/skins/common/images/cc-by-sa.png
deleted file mode 100644 (file)
index 518fb64..0000000
Binary files a/skins/common/images/cc-by-sa.png and /dev/null differ
diff --git a/skins/common/images/cc-by.png b/skins/common/images/cc-by.png
deleted file mode 100644 (file)
index 9cca2f9..0000000
Binary files a/skins/common/images/cc-by.png and /dev/null differ
diff --git a/skins/common/images/closewindow19x19.png b/skins/common/images/closewindow19x19.png
deleted file mode 100644 (file)
index c96d9ff..0000000
Binary files a/skins/common/images/closewindow19x19.png and /dev/null differ
diff --git a/skins/common/images/cyrl/LICENSE b/skins/common/images/cyrl/LICENSE
deleted file mode 100644 (file)
index bedcec6..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-button_bold.png
----------------
-Source : http://commons.wikimedia.org/wiki/Image:Button_bold_ukr.png
-License: Public domain
-Author : Alexey Belomoev
-
-button_italic.png
-------------------------
-Source : http://commons.wikimedia.org/wiki/Image:Button_italic_ukr.png
-License: Public domain
-Author : Alexey Belomoev
-
-button_link.png
------------------
-Source : http://commons.wikimedia.org/wiki/Image:Button_internal_link_ukr.png
-License: GPL
-Author : Saproj, Erik Möller
diff --git a/skins/common/images/cyrl/button_bold.png b/skins/common/images/cyrl/button_bold.png
deleted file mode 100644 (file)
index eae30d9..0000000
Binary files a/skins/common/images/cyrl/button_bold.png and /dev/null differ
diff --git a/skins/common/images/cyrl/button_italic.png b/skins/common/images/cyrl/button_italic.png
deleted file mode 100644 (file)
index b958d22..0000000
Binary files a/skins/common/images/cyrl/button_italic.png and /dev/null differ
diff --git a/skins/common/images/cyrl/button_link.png b/skins/common/images/cyrl/button_link.png
deleted file mode 100644 (file)
index 12ad373..0000000
Binary files a/skins/common/images/cyrl/button_link.png and /dev/null differ
diff --git a/skins/common/images/de/button_bold.png b/skins/common/images/de/button_bold.png
deleted file mode 100644 (file)
index 367d5bc..0000000
Binary files a/skins/common/images/de/button_bold.png and /dev/null differ
diff --git a/skins/common/images/de/button_italic.png b/skins/common/images/de/button_italic.png
deleted file mode 100644 (file)
index fdd8c9f..0000000
Binary files a/skins/common/images/de/button_italic.png and /dev/null differ
diff --git a/skins/common/images/fa/button_bold.png b/skins/common/images/fa/button_bold.png
deleted file mode 100644 (file)
index c54d094..0000000
Binary files a/skins/common/images/fa/button_bold.png and /dev/null differ
diff --git a/skins/common/images/fa/button_headline.png b/skins/common/images/fa/button_headline.png
deleted file mode 100644 (file)
index 9890d15..0000000
Binary files a/skins/common/images/fa/button_headline.png and /dev/null differ
diff --git a/skins/common/images/fa/button_italic.png b/skins/common/images/fa/button_italic.png
deleted file mode 100644 (file)
index 33f91ed..0000000
Binary files a/skins/common/images/fa/button_italic.png and /dev/null differ
diff --git a/skins/common/images/fa/button_link.png b/skins/common/images/fa/button_link.png
deleted file mode 100644 (file)
index 76b939e..0000000
Binary files a/skins/common/images/fa/button_link.png and /dev/null differ
diff --git a/skins/common/images/fa/button_nowiki.png b/skins/common/images/fa/button_nowiki.png
deleted file mode 100644 (file)
index 743ea61..0000000
Binary files a/skins/common/images/fa/button_nowiki.png and /dev/null differ
diff --git a/skins/common/images/feed-icon.png b/skins/common/images/feed-icon.png
deleted file mode 100644 (file)
index 00f49f6..0000000
Binary files a/skins/common/images/feed-icon.png and /dev/null differ
diff --git a/skins/common/images/feed-icon.svg b/skins/common/images/feed-icon.svg
deleted file mode 100644 (file)
index 6e5f570..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 256 256"><defs><linearGradient x1=".085" y1=".085" x2=".915" y2=".915" id="a"><stop offset="0" stop-color="#E3702D"/><stop offset=".107" stop-color="#EA7D31"/><stop offset=".35" stop-color="#F69537"/><stop offset=".5" stop-color="#FB9E3A"/><stop offset=".702" stop-color="#EA7C31"/><stop offset=".887" stop-color="#DE642B"/><stop offset="1" stop-color="#D95B29"/></linearGradient></defs><rect width="256" height="256" rx="55" ry="55" fill="#CC5D15"/><rect width="246" height="246" rx="50" ry="50" x="5" y="5" fill="#F49C52"/><rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#a)"/><circle cx="68" cy="189" r="24" fill="#FFF"/><path d="M160 213h-34a82 82 0 0 0-82-82v-34a116 116 0 0 1 116 116zM184 213a140 140 0 0 0-140-140v-35a175 175 0 0 1 175 175z" fill="#FFF"/></svg>
\ No newline at end of file
diff --git a/skins/common/images/gnu-fdl.png b/skins/common/images/gnu-fdl.png
deleted file mode 100644 (file)
index 3feaf57..0000000
Binary files a/skins/common/images/gnu-fdl.png and /dev/null differ
diff --git a/skins/common/images/help-question-hover.gif b/skins/common/images/help-question-hover.gif
deleted file mode 100644 (file)
index 515138d..0000000
Binary files a/skins/common/images/help-question-hover.gif and /dev/null differ
diff --git a/skins/common/images/help-question.gif b/skins/common/images/help-question.gif
deleted file mode 100644 (file)
index b4fc9c5..0000000
Binary files a/skins/common/images/help-question.gif and /dev/null differ
diff --git a/skins/common/images/icons/COPYING b/skins/common/images/icons/COPYING
deleted file mode 100644 (file)
index 136530a..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-The icons used here are derived from the crystalsvg icons in the the
-pics/crystalsvg/ directory of kdelibs-3.4.0 they were modified on 2005-05-15
-by Ævar Arnfjörð Bjarmason for use in MediaWiki.
-
-What follows is the contents of the LICENSE.crystalsvg file found in the pics/
-subdirectory of kdelibs-3.4.0:
-
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-This copyright and license notice covers all CrystalSVG images.
-Note the license notice contains an add-on.
-********************************************************************************
-KDE Crystal theme icons.
-Copyright (C) 2002 and following years KDE Artists
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation,
-version 2.1 of the License.
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Lesser General Public License for more details.
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-    **** NOTE THIS ADD-ON ****
-The GNU Lesser General Public License or LGPL is written for software libraries
-in the first place. We expressly want the LGPL to be valid for this artwork
-library too.
-KDE Crystal theme icons is a special kind of software library, it is an
-artwork library, it's elements can be used in a Graphical User Interface, or
-GUI.
-Source code, for this library means:
- - for vectors svg;
- - for pixels, if applicable, the multi-layered formats xcf or psd, or
-otherwise png.
-The LGPL in some sections obliges you to make the files carry
-notices. With images this is in some cases impossible or hardly useful.
-With this library a notice is placed at a prominent place in the directory
-containing the elements. You may follow this practice.
-The exception in section 6 of the GNU Lesser General Public License covers
-the use of elements of this art library in a GUI.
-kde-artists [at] kde.org
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
diff --git a/skins/common/images/icons/fileicon-c.png b/skins/common/images/icons/fileicon-c.png
deleted file mode 100644 (file)
index 0d603b7..0000000
Binary files a/skins/common/images/icons/fileicon-c.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-cpp.png b/skins/common/images/icons/fileicon-cpp.png
deleted file mode 100644 (file)
index 123688f..0000000
Binary files a/skins/common/images/icons/fileicon-cpp.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-deb.png b/skins/common/images/icons/fileicon-deb.png
deleted file mode 100644 (file)
index 87ca3fa..0000000
Binary files a/skins/common/images/icons/fileicon-deb.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-djvu.png b/skins/common/images/icons/fileicon-djvu.png
deleted file mode 100644 (file)
index 1da2276..0000000
Binary files a/skins/common/images/icons/fileicon-djvu.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-djvu.xcf b/skins/common/images/icons/fileicon-djvu.xcf
deleted file mode 100644 (file)
index 8043dcd..0000000
Binary files a/skins/common/images/icons/fileicon-djvu.xcf and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-dvi.png b/skins/common/images/icons/fileicon-dvi.png
deleted file mode 100644 (file)
index f37878d..0000000
Binary files a/skins/common/images/icons/fileicon-dvi.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-exe.png b/skins/common/images/icons/fileicon-exe.png
deleted file mode 100644 (file)
index dc020eb..0000000
Binary files a/skins/common/images/icons/fileicon-exe.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-h.png b/skins/common/images/icons/fileicon-h.png
deleted file mode 100644 (file)
index 339bf02..0000000
Binary files a/skins/common/images/icons/fileicon-h.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-html.png b/skins/common/images/icons/fileicon-html.png
deleted file mode 100644 (file)
index f28f8a2..0000000
Binary files a/skins/common/images/icons/fileicon-html.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-iso.png b/skins/common/images/icons/fileicon-iso.png
deleted file mode 100644 (file)
index c73d229..0000000
Binary files a/skins/common/images/icons/fileicon-iso.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-java.png b/skins/common/images/icons/fileicon-java.png
deleted file mode 100644 (file)
index a1b4f22..0000000
Binary files a/skins/common/images/icons/fileicon-java.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-mid.png b/skins/common/images/icons/fileicon-mid.png
deleted file mode 100644 (file)
index ce2bebb..0000000
Binary files a/skins/common/images/icons/fileicon-mid.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-mov.png b/skins/common/images/icons/fileicon-mov.png
deleted file mode 100644 (file)
index 952de1f..0000000
Binary files a/skins/common/images/icons/fileicon-mov.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-o.png b/skins/common/images/icons/fileicon-o.png
deleted file mode 100644 (file)
index f3523d9..0000000
Binary files a/skins/common/images/icons/fileicon-o.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-ogg.png b/skins/common/images/icons/fileicon-ogg.png
deleted file mode 100644 (file)
index ef4d801..0000000
Binary files a/skins/common/images/icons/fileicon-ogg.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-ogg.xcf b/skins/common/images/icons/fileicon-ogg.xcf
deleted file mode 100644 (file)
index a91024b..0000000
Binary files a/skins/common/images/icons/fileicon-ogg.xcf and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-pdf.png b/skins/common/images/icons/fileicon-pdf.png
deleted file mode 100644 (file)
index 8c8da92..0000000
Binary files a/skins/common/images/icons/fileicon-pdf.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-ps.png b/skins/common/images/icons/fileicon-ps.png
deleted file mode 100644 (file)
index e872833..0000000
Binary files a/skins/common/images/icons/fileicon-ps.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-psd.png b/skins/common/images/icons/fileicon-psd.png
deleted file mode 100644 (file)
index 598f190..0000000
Binary files a/skins/common/images/icons/fileicon-psd.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-rm.png b/skins/common/images/icons/fileicon-rm.png
deleted file mode 100644 (file)
index 81dbe0b..0000000
Binary files a/skins/common/images/icons/fileicon-rm.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-rpm.png b/skins/common/images/icons/fileicon-rpm.png
deleted file mode 100644 (file)
index 1903aac..0000000
Binary files a/skins/common/images/icons/fileicon-rpm.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-svg.png b/skins/common/images/icons/fileicon-svg.png
deleted file mode 100644 (file)
index b782113..0000000
Binary files a/skins/common/images/icons/fileicon-svg.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-tar.png b/skins/common/images/icons/fileicon-tar.png
deleted file mode 100644 (file)
index e5fd1b7..0000000
Binary files a/skins/common/images/icons/fileicon-tar.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-tex.png b/skins/common/images/icons/fileicon-tex.png
deleted file mode 100644 (file)
index a437284..0000000
Binary files a/skins/common/images/icons/fileicon-tex.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-ttf.png b/skins/common/images/icons/fileicon-ttf.png
deleted file mode 100644 (file)
index 1ed4e74..0000000
Binary files a/skins/common/images/icons/fileicon-ttf.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-txt.png b/skins/common/images/icons/fileicon-txt.png
deleted file mode 100644 (file)
index 9e988e7..0000000
Binary files a/skins/common/images/icons/fileicon-txt.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon-xcf.png b/skins/common/images/icons/fileicon-xcf.png
deleted file mode 100644 (file)
index 1037b50..0000000
Binary files a/skins/common/images/icons/fileicon-xcf.png and /dev/null differ
diff --git a/skins/common/images/icons/fileicon.png b/skins/common/images/icons/fileicon.png
deleted file mode 100644 (file)
index 59696a3..0000000
Binary files a/skins/common/images/icons/fileicon.png and /dev/null differ
diff --git a/skins/common/images/ksh/LICENSE b/skins/common/images/ksh/LICENSE
deleted file mode 100644 (file)
index ba56f97..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-button_S_italic.png
--------------------
-Source : http://commons.wikimedia.org/wiki/Image:Button_S_italic.png
-License: Public domain
-Author : Purodha Blissenbach, http://ksh.wikipedia.org/wiki/User:Purodha
-
diff --git a/skins/common/images/ksh/button_S_italic.png b/skins/common/images/ksh/button_S_italic.png
deleted file mode 100644 (file)
index 15496c0..0000000
Binary files a/skins/common/images/ksh/button_S_italic.png and /dev/null differ
diff --git a/skins/common/images/magnify-clip-ltr.png b/skins/common/images/magnify-clip-ltr.png
deleted file mode 100644 (file)
index 00a9cee..0000000
Binary files a/skins/common/images/magnify-clip-ltr.png and /dev/null differ
diff --git a/skins/common/images/mediawiki.png b/skins/common/images/mediawiki.png
deleted file mode 100644 (file)
index 8c42118..0000000
Binary files a/skins/common/images/mediawiki.png and /dev/null differ
diff --git a/skins/common/images/nextredirectltr.png b/skins/common/images/nextredirectltr.png
deleted file mode 100644 (file)
index cd657c3..0000000
Binary files a/skins/common/images/nextredirectltr.png and /dev/null differ
diff --git a/skins/common/images/nextredirectrtl.png b/skins/common/images/nextredirectrtl.png
deleted file mode 100644 (file)
index b788f33..0000000
Binary files a/skins/common/images/nextredirectrtl.png and /dev/null differ
diff --git a/skins/common/images/poweredby_mediawiki_88x31.png b/skins/common/images/poweredby_mediawiki_88x31.png
deleted file mode 100644 (file)
index 30e1d2e..0000000
Binary files a/skins/common/images/poweredby_mediawiki_88x31.png and /dev/null differ
diff --git a/skins/common/images/public-domain.png b/skins/common/images/public-domain.png
deleted file mode 100644 (file)
index ebf0107..0000000
Binary files a/skins/common/images/public-domain.png and /dev/null differ
diff --git a/skins/common/images/question-small.png b/skins/common/images/question-small.png
deleted file mode 100644 (file)
index f7405d2..0000000
Binary files a/skins/common/images/question-small.png and /dev/null differ
diff --git a/skins/common/images/question.svg b/skins/common/images/question.svg
deleted file mode 100644 (file)
index 98fbe8d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="21.059" height="21.06"><path fill="#575757" d="M10.529 0c-5.814 0-10.529 4.714-10.529 10.529s4.715 10.53 10.529 10.53c5.816 0 10.529-4.715 10.529-10.53s-4.712-10.529-10.529-10.529zm-.002 16.767c-.861 0-1.498-.688-1.498-1.516 0-.862.637-1.534 1.498-1.534.828 0 1.5.672 1.5 1.534 0 .827-.672 1.516-1.5 1.516zm2.137-6.512c-.723.568-1 .931-1 1.739v.5h-2.205v-.603c0-1.517.449-2.136 1.154-2.688.707-.552 1.139-.845 1.139-1.637 0-.672-.414-1.051-1.24-1.051-.707 0-1.328.189-1.982.638l-1.051-1.807c.861-.604 1.93-1.034 3.342-1.034 1.912 0 3.516 1.051 3.516 3.066-.001 1.43-.794 2.188-1.673 2.877z"/></svg>
\ No newline at end of file
diff --git a/skins/common/images/spinner.gif b/skins/common/images/spinner.gif
deleted file mode 100644 (file)
index 6146be4..0000000
Binary files a/skins/common/images/spinner.gif and /dev/null differ
diff --git a/skins/common/images/wiki.png b/skins/common/images/wiki.png
deleted file mode 100644 (file)
index 48595b0..0000000
Binary files a/skins/common/images/wiki.png and /dev/null differ
diff --git a/skins/common/oldshared.css b/skins/common/oldshared.css
deleted file mode 100644 (file)
index a4e7544..0000000
+++ /dev/null
@@ -1,538 +0,0 @@
-/**
- * oldshared.css
- * This file contains CSS settings common to Wikistandard, Nostalgia and
- * CologneBlue, the old pre-Monobook skins
- */
-
-/* For clarity, explicitly state some recommendations from
- * http://www.w3.org/TR/CSS21/sample.html to make sure the editsection links scale right
- */
-
-h1 {
-       font-size: 2em;
-}
-
-h2 {
-       font-size: 1.5em;
-}
-
-h3 {
-       font-size: 1.17em;
-}
-
-h4 {
-       font-size: 1.11em;
-}
-
-h5 {
-       font-size: 1.05em;
-}
-
-h6 {
-       font-size: 1em;
-}
-
-h1, h2, h3, h4, h5, h6 {
-       font-weight: bolder;
-}
-
-/* Now the custom parts */
-
-#footer {
-       clear: both;
-}
-
-/* images */
-/* @noflip */
-div.floatright {
-       float: right;
-       clear: right;
-       margin: 0 0 1em 1em;
-}
-
-/* @noflip */
-div.floatright p {
-       font-style: italic;
-}
-
-/* @noflip */
-div.floatleft {
-       float: left;
-       clear: left;
-       margin: 0.3em 0.5em 0.5em 0;
-}
-
-/* @noflip */
-div.floatleft p {
-       font-style: italic;
-}
-
-/* table standards */
-table.rimage {
-       float: right;
-       margin-left: 1em;
-       margin-bottom: 1em;
-       text-align: center;
-       font-size: smaller;
-}
-
-/* thumbnails */
-div.thumb {
-       margin-bottom: .5em;
-       border-style: solid;
-       border-color: white;
-       width: auto;
-}
-
-div.thumbinner {
-       border: 1px solid #ccc;
-       padding: 3px;
-       background-color: #f9f9f9;
-       font-size: 94%;
-       text-align: center;
-       overflow: hidden;
-}
-
-html .thumbimage {
-       border: 1px solid #ccc;
-}
-
-html .thumbcaption {
-       border: none;
-       line-height: 1.4em;
-       padding: 3px;
-       font-size: 94%;
-       text-align: left;
-}
-
-div.magnify {
-       float: right;
-       margin-left: 3px;
-}
-
-div.magnify a {
-       display: block;
-       /* Hide the text… */
-       text-indent: 15px;
-       white-space: nowrap;
-       overflow: hidden;
-       /* …and replace it with the image */
-       width: 15px;
-       height: 11px;
-       /* @embed */
-       background: url(images/magnify-clip-ltr.png) center center no-repeat;
-       /* Don't annoy people who copy-paste everything too much */
-       -moz-user-select: none;
-       -webkit-user-select: none;
-       -ms-user-select: none;
-       user-select: none;
-}
-
-/* Temporary WMF deployment hack, to be removed before 1.24 release */
-div.magnify img {
-       display: none;
-}
-
-/* @noflip */
-div.tright {
-       clear: right;
-       float: right;
-       border-width: .5em 0 .8em 1.4em;
-}
-
-/* @noflip */
-div.tleft {
-       float: left;
-       clear: left;
-       margin-right: .5em;
-       border-width: .5em 1.4em .8em 0;
-}
-
-img.thumbborder {
-       border: 1px solid #dddddd;
-}
-
-/* Page history styling */
-/* the auto-generated edit comments */
-.autocomment {
-       color: #4b4b4b;
-}
-
-img {
-       border: none;
-}
-
-#toc,
-.toc {
-       border: 1px solid #bba;
-       background-color: #f7f8ff;
-       padding: 5px;
-       font-size: 95%;
-       text-align: center;
-       display: -moz-inline-block;
-       display: inline-block;
-       display: table;
-
-       /* IE7 and earlier */
-       zoom: 1;
-       *display: inline;
-
-       padding: 7px;
-}
-
-/* CSS for backwards-compatibility with cached page renders and creative uses in wikitext */
-table#toc,
-table.toc {
-       border-collapse: collapse;
-}
-
-/* Remove additional paddings inside table-cells that are not present in <div>s */
-table#toc td,
-table.toc td {
-       padding: 0;
-}
-
-#toc h2,
-.toc h2 {
-       display: inline;
-       border: none;
-       padding: 0;
-       font-size: 100%;
-       font-weight: bold;
-}
-
-#toc ul,
-.toc ul {
-       list-style-type: none;
-       list-style-image: none;
-       padding: 0;
-       text-align: left;
-}
-
-#toc ul ul,
-.toc ul ul {
-       margin: 0 0 0 2em;
-}
-
-#toc .toctoggle,
-.toc .toctoggle {
-       font-size: 94%;
-}
-
-.error {
-       color: red;
-       font-size: larger;
-}
-
-/* preference page with js-genrated toc */
-#preftoc {
-       float: left;
-       margin: 1em 1em 1em 1em;
-       width: 13em;
-}
-
-#preftoc li {
-       border: 1px solid White;
-}
-
-#preftoc li.selected {
-       background-color: #f9f9f9;
-       border: 1px dashed #aaaaaa;
-}
-
-#preftoc a,
-#preftoc a:active {
-       display: block;
-       color: #005189;
-}
-
-.mw-prefs-buttons {
-       clear: left;
-       float: left;
-       margin-top: 1em;
-}
-
-div.htmlform-tip {
-       font-size: 94%;
-       margin-top: 0.4em;
-       color: #666;
-}
-
-fieldset.prefsection {
-       margin-top: 1em;
-}
-
-fieldset.operaprefsection {
-       margin-left: 15em;
-}
-
-/* emulate center */
-.center {
-       width: 100%;
-       text-align: center;
-}
-
-*.center * {
-       margin-left: auto;
-       margin-right: auto;
-}
-
-/* small for tables and similar */
-.small {
-       font-size: 94%;
-}
-
-table.small {
-       font-size: 100%;
-}
-
-/* use this instead of #toc for page content */
-.toccolours {
-       border: 1px solid #aaaaaa;
-       background-color: #f9f9f9;
-       padding: 5px;
-       font-size: 95%;
-}
-
-#siteNotice {
-       border: 1px solid #aaaaaa;
-       padding-left: 0.5em;
-       padding-right: 0.5em;
-}
-
-.redirectText {
-       font-size: 150%;
-       margin: 5px;
-}
-
-.sharedUploadNotice {
-       font-style: italic;
-}
-
-span.unpatrolled {
-       font-weight: bold;
-       color: red;
-}
-
-span.updatedmarker {
-       color: black;
-       background-color: #00FF00;
-}
-
-div.gallerybox {
-       width: 150px;
-}
-
-span.comment {
-       font-style: italic;
-}
-
-span.changedby {
-       font-size: 95%;
-}
-
-.previewnote {
-       text-align: center;
-       color: #cc0000;
-}
-
-.editExternally {
-       border-style: solid;
-       border-width: 1px;
-       border-color: gray;
-       background: #ffffff;
-       padding: 3px;
-       margin-top: 0.5em;
-       float: left;
-       font-size: small;
-       text-align: center;
-}
-
-.editExternallyHelp {
-       font-style: italic;
-       color: gray;
-}
-
-li span.deleted {
-       text-decoration: line-through;
-       color: #888;
-       font-style: italic;
-}
-
-/* Classes for Exif data display */
-table.mw_metadata {
-       margin-left: 0.5em;
-}
-
-table.mw_metadata caption {
-       font-weight: bold;
-}
-
-table.mw_metadata th {
-       font-weight: normal;
-}
-
-table.mw_metadata td {
-       padding: 0.1em;
-}
-
-table.mw_metadata {
-       border: none;
-       border-collapse: collapse;
-}
-
-table.mw_metadata td,
-table.mw_metadata th {
-       border: 1px solid #aaaaaa;
-       padding-left: 4px;
-       padding-right: 4px;
-}
-
-table.mw_metadata th {
-       background-color: #f9f9f9;
-}
-
-table.mw_metadata td {
-       background-color: #fcfcfc;
-}
-
-table.mw_metadata td.spacer {
-       background: inherit;
-       border-top: none;
-       border-bottom: none;
-}
-
-table.collapsed tr.collapsable {
-       display: none;
-}
-
-.visualClear {
-       clear: both;
-}
-
-/* Allmessages table */
-#allmessagestable th {
-       background-color: #b2b2ff;
-}
-
-#allmessagestable tr.orig {
-       background-color: #ffe2e2;
-}
-
-#allmessagestable tr.new {
-       background-color: #e2ffe2;
-}
-
-#allmessagestable tr.def {
-       background-color: #f0f0ff;
-}
-
-#jump-to-nav {
-       display: none;
-}
-
-div.multipageimagenavbox {
-       border: solid 1px silver;
-       padding: 4px;
-       margin: 1em;
-       background: #f0f0f0;
-}
-
-div.multipageimagenavbox div.thumb {
-       border: none;
-       margin-left: 2em;
-       margin-right: 2em;
-}
-
-div.multipageimagenavbox hr {
-       margin: 6px;
-}
-
-table.multipageimage td {
-       text-align: center;
-}
-
-/*
-  Table pager (e.g. Special:Imagelist)
-  - remove underlines from the navigation link
-  - collapse borders
-  - set the borders to outsets (similar to Special:Allmessages)
-  - remove line wrapping for all td and th, set background color
-  - restore line wrapping for the last two table cells (description and size)
-*/
-.TablePager_nav a {
-       text-decoration: none;
-}
-
-.TablePager {
-       border-collapse: collapse;
-}
-
-.TablePager,
-.TablePager td,
-.TablePager th {
-       border: 0.15em solid #777777;
-       padding: 0 0.15em 0 0.15em;
-}
-
-.TablePager th {
-       background-color: #eeeeff;
-}
-
-.TablePager td {
-       background-color: #ffffff;
-}
-
-.TablePager tr:hover td {
-       background-color: #eeeeff;
-}
-
-.templatesUsed {
-       margin-top: 1em;
-}
-
-.MediaTransformError {
-       border: thin solid #777;
-       background-color: #ccc;
-       padding: 0.1em;
-}
-
-.MediaTransformError td {
-       text-align: center;
-       vertical-align: middle;
-       font-size: 90%;
-}
-
-form#specialpages {
-       display: inline;
-}
-
-body {
-       direction: ltr;
-       unicode-bidi: embed;
-       background-color: #ffffec;
-}
-
-body.ns-0 {
-       background-color: white;
-}
-
-/** RTL specific CSS starts here **/
-
-/**
- * Lists:
- * The following lines don't have a visible effect on non-Gecko browsers
- * They fix a problem with Gecko browsers rendering lists to the right of
- * left-floated objects in an RTL layout.
- */
-/* @noflip */
-html > body.rtl div#article ul {
-       display: table;
-}
-
-/* @noflip */
-html > body.rtl div#bodyContent ul#filetoc {
-       display: block;
-}
-
-/* RTL specific CSS ends here **/
diff --git a/skins/common/protect.js b/skins/common/protect.js
deleted file mode 100644 (file)
index dc142ca..0000000
+++ /dev/null
@@ -1,387 +0,0 @@
-( function ( mw, $ ) {
-
-var ProtectionForm = window.ProtectionForm = {
-       existingMatch: false,
-
-       /**
-        * Set up the protection chaining interface (i.e. "unlock move permissions" checkbox)
-        * on the protection form
-        *
-        * @param opts Object : parameters with members:
-        *     tableId              Identifier of the table containing UI bits
-        *     labelText            Text to use for the checkbox label
-        *     numTypes             The number of protection types
-        *     existingMatch        True if all the existing expiry times match
-        */
-       init: function ( opts ) {
-               var box, boxbody, row, cell, check, label;
-
-               if ( !( document.createTextNode && document.getElementById && document.getElementsByTagName ) ) {
-                       return false;
-               }
-
-               box = document.getElementById( opts.tableId );
-               if ( !box ) {
-                       return false;
-               }
-
-               boxbody = box.getElementsByTagName( 'tbody' )[0];
-               row = document.createElement( 'tr' );
-               boxbody.insertBefore( row, boxbody.firstChild.nextSibling );
-
-               this.existingMatch = opts.existingMatch;
-
-               cell = document.createElement( 'td' );
-               row.appendChild( cell );
-               // If there is only one protection type, there is nothing to chain
-               if ( opts.numTypes > 1 ) {
-                       check = document.createElement( 'input' );
-                       check.id = 'mwProtectUnchained';
-                       check.type = 'checkbox';
-                       $( check ).click( function () {
-                               ProtectionForm.onChainClick();
-                       } );
-
-                       label = document.createElement( 'label' );
-                       label.htmlFor = 'mwProtectUnchained';
-                       label.appendChild( document.createTextNode( opts.labelText ) );
-
-                       cell.appendChild( check );
-                       cell.appendChild( document.createTextNode( ' ' ) );
-                       cell.appendChild( label );
-
-                       check.checked = !this.areAllTypesMatching();
-                       this.enableUnchainedInputs( check.checked );
-               }
-
-               $( '#mwProtect-reason' ).byteLimit( 180 );
-
-               this.updateCascadeCheckbox();
-
-               return true;
-       },
-
-       /**
-        * Sets the disabled attribute on the cascade checkbox depending on the current selected levels
-        */
-       updateCascadeCheckbox: function () {
-               var i, lists, items, selected;
-
-               // For non-existent titles, there is no cascade option
-               if ( !document.getElementById( 'mwProtect-cascade' ) ) {
-                       return;
-               }
-               lists = this.getLevelSelectors();
-               for ( i = 0; i < lists.length; i++ ) {
-                       if ( lists[i].selectedIndex > -1 ) {
-                               items = lists[i].getElementsByTagName( 'option' );
-                               selected = items[ lists[i].selectedIndex ].value;
-                               if ( !this.isCascadeableLevel( selected ) ) {
-                                       document.getElementById( 'mwProtect-cascade' ).checked = false;
-                                       document.getElementById( 'mwProtect-cascade' ).disabled = true;
-                                       return;
-                               }
-                       }
-               }
-               document.getElementById( 'mwProtect-cascade' ).disabled = false;
-       },
-
-       /**
-        * Checks if a cerain protection level is cascadeable.
-        * @param level {String}
-        * @return {Boolean}
-        */
-       isCascadeableLevel: function (  level ) {
-               var cascadeLevels, len, i;
-
-               cascadeLevels = mw.config.get( 'wgCascadeableLevels' );
-               // cascadeLevels isn't defined on all pages
-               if ( cascadeLevels ) {
-                       for ( i = 0, len = cascadeLevels.length; i < len; i += 1 ) {
-                               if ( cascadeLevels[i] === level ) {
-                                       return true;
-                               }
-                       }
-               }
-               return false;
-       },
-
-       /**
-        * When protection levels are locked together, update the rest
-        * when one action's level changes
-        *
-        * @param source Element Level selector that changed
-        */
-       updateLevels: function ( source ) {
-               if ( !this.isUnchained() ) {
-                       this.setAllSelectors( source.selectedIndex );
-               }
-               this.updateCascadeCheckbox();
-       },
-
-       /**
-        * When protection levels are locked together, update the
-        * expiries when one changes
-        *
-        * @param source Element expiry input that changed
-        */
-
-       updateExpiry: function ( source ) {
-               var expiry, listId, list;
-
-               if ( !this.isUnchained() ) {
-                       expiry = source.value;
-                       this.forEachExpiryInput( function ( element ) {
-                               element.value = expiry;
-                       } );
-               }
-               listId = source.id.replace( /^mwProtect-(\w+)-expires$/, 'mwProtectExpirySelection-$1' );
-               list = document.getElementById( listId );
-               if ( list && list.value !== 'othertime' ) {
-                       if ( this.isUnchained() ) {
-                               list.value = 'othertime';
-                       } else {
-                               this.forEachExpirySelector( function ( element ) {
-                                       element.value = 'othertime';
-                               } );
-                       }
-               }
-       },
-
-       /**
-        * When protection levels are locked together, update the
-        * expiry lists when one changes and clear the custom inputs
-        *
-        * @param source Element expiry selector that changed
-        */
-       updateExpiryList: function ( source ) {
-               var expiry;
-               if ( !this.isUnchained() ) {
-                       expiry = source.value;
-                       this.forEachExpirySelector( function ( element ) {
-                               element.value = expiry;
-                       } );
-                       this.forEachExpiryInput( function ( element ) {
-                               element.value = '';
-                       } );
-               }
-       },
-
-       /**
-        * Update chain status and enable/disable various bits of the UI
-        * when the user changes the "unlock move permissions" checkbox
-        */
-       onChainClick: function () {
-               if ( this.isUnchained() ) {
-                       this.enableUnchainedInputs( true );
-               } else {
-                       this.setAllSelectors( this.getMaxLevel() );
-                       this.enableUnchainedInputs( false );
-               }
-               this.updateCascadeCheckbox();
-       },
-
-       /**
-        * Returns true if the named attribute in all objects in the given array are matching
-        */
-       matchAttribute: function ( objects, attrName ) {
-               var i, element, value;
-
-               // Check levels
-               value = null;
-               for ( i = 0; i < objects.length; i++ ) {
-                       element = objects[i];
-                       if ( value === null ) {
-                               value = element[attrName];
-                       } else {
-                               if ( value !== element[attrName] ) {
-                                       return false;
-                               }
-                       }
-               }
-               return true;
-       },
-
-       /**
-        * Are all actions protected at the same level, with the same expiry time?
-        *
-        * @return boolean
-        */
-       areAllTypesMatching: function () {
-               return this.existingMatch
-                       && this.matchAttribute( this.getLevelSelectors(), 'selectedIndex' )
-                       && this.matchAttribute( this.getExpirySelectors(), 'selectedIndex' )
-                       && this.matchAttribute( this.getExpiryInputs(), 'value' );
-       },
-
-       /**
-        * Is protection chaining off?
-        *
-        * @return bool
-        */
-       isUnchained: function () {
-               var element = document.getElementById( 'mwProtectUnchained' );
-               return element
-                       ? element.checked
-                       : true; // No control, so we need to let the user set both levels
-       },
-
-       /**
-        * Find the highest protection level in any selector
-        */
-       getMaxLevel: function () {
-               var maxIndex = -1;
-               this.forEachLevelSelector( function ( element ) {
-                       if ( element.selectedIndex > maxIndex ) {
-                               maxIndex = element.selectedIndex;
-                       }
-               } );
-               return maxIndex;
-       },
-
-       /**
-        * Protect all actions at the specified level
-        *
-        * @param index int Protection level
-        */
-       setAllSelectors: function ( index ) {
-               this.forEachLevelSelector( function ( element ) {
-                       if ( element.selectedIndex !== index ) {
-                               element.selectedIndex = index;
-                       }
-               } );
-       },
-
-       /**
-        * Apply a callback to each protection selector
-        *
-        * @param func callable Callback function
-        */
-       forEachLevelSelector: function ( func ) {
-               var i, selectors;
-
-               selectors = this.getLevelSelectors();
-               for ( i = 0; i < selectors.length; i++ ) {
-                       func( selectors[i] );
-               }
-       },
-
-       /**
-        * Get a list of all protection selectors on the page
-        *
-        * @return Array
-        */
-       getLevelSelectors: function () {
-               var i, ours, all, element;
-
-               all = document.getElementsByTagName( 'select' );
-               ours = [];
-               for ( i = 0; i < all.length; i++ ) {
-                       element = all[i];
-                       if ( element.id.match( /^mwProtect-level-/ ) ) {
-                               ours[ours.length] = element;
-                       }
-               }
-               return ours;
-       },
-
-       /**
-        * Apply a callback to each expiry input
-        *
-        * @param func callable Callback function
-        */
-       forEachExpiryInput: function ( func ) {
-               var i, inputs;
-
-               inputs = this.getExpiryInputs();
-               for ( i = 0; i < inputs.length; i++ ) {
-                       func( inputs[i] );
-               }
-       },
-
-       /**
-        * Get a list of all expiry inputs on the page
-        *
-        * @return Array
-        */
-       getExpiryInputs: function () {
-               var i, all, element, ours;
-
-               all = document.getElementsByTagName( 'input' );
-               ours = [];
-               for ( i = 0; i < all.length; i++ ) {
-                       element = all[i];
-                       if ( element.name.match( /^mwProtect-expiry-/ ) ) {
-                               ours[ours.length] = element;
-                       }
-               }
-               return ours;
-       },
-
-       /**
-        * Apply a callback to each expiry selector list
-        * @param func callable Callback function
-        */
-       forEachExpirySelector: function ( func ) {
-               var i, inputs;
-
-               inputs = this.getExpirySelectors();
-               for ( i = 0; i < inputs.length; i++ ) {
-                       func( inputs[i] );
-               }
-       },
-
-       /**
-        * Get a list of all expiry selector lists on the page
-        *
-        * @return Array
-        */
-       getExpirySelectors: function () {
-               var i, all, ours, element;
-
-               all = document.getElementsByTagName( 'select' );
-               ours = [];
-               for ( i = 0; i < all.length; i++ ) {
-                       element = all[i];
-                       if ( element.id.match( /^mwProtectExpirySelection-/ ) ) {
-                               ours[ours.length] = element;
-                       }
-               }
-               return ours;
-       },
-
-       /**
-        * Enable/disable protection selectors and expiry inputs
-        *
-        * @param val boolean Enable?
-        */
-       enableUnchainedInputs: function ( val ) {
-               var first = true;
-
-               this.forEachLevelSelector( function ( element ) {
-                       if ( first ) {
-                               first = false;
-                       } else {
-                               element.disabled = !val;
-                       }
-               } );
-               first = true;
-               this.forEachExpiryInput( function ( element ) {
-                       if ( first ) {
-                               first = false;
-                       } else {
-                               element.disabled = !val;
-                       }
-               } );
-               first = true;
-               this.forEachExpirySelector( function ( element ) {
-                       if ( first ) {
-                               first = false;
-                       } else {
-                               element.disabled = !val;
-                       }
-               } );
-       }
-};
-
-}( mediaWiki, jQuery ) );
diff --git a/skins/common/shared.css b/skins/common/shared.css
deleted file mode 100644 (file)
index af5d82c..0000000
+++ /dev/null
@@ -1,1197 +0,0 @@
-/**
- * CSS in this file is used by *all* skins (that have any CSS at all). Be
- * careful what you put in here, since what looks good in one skin may not in
- * another, but don't ignore the poor pre-Monobook users either.
- */
-
-/* GENERAL CLASSES FOR DIRECTIONALITY SUPPORT */
-
-/**
- * These classes should be used for text depending on the content direction.
- * Content stuff like editsection, ul/ol and TOC depend on this.
- */
-.mw-content-ltr {
-       /* @noflip */
-       direction: ltr;
-}
-
-.mw-content-rtl {
-       /* @noflip */
-       direction: rtl;
-}
-
-/* Most input fields should be in site direction */
-.sitedir-ltr textarea,
-.sitedir-ltr input {
-       /* @noflip */
-       direction: ltr;
-}
-
-.sitedir-rtl textarea,
-.sitedir-rtl input {
-       /* @noflip */
-       direction: rtl;
-}
-
-/* User-Agent styles for new HTML5 elements */
-mark {
-       background-color: yellow;
-       color: black;
-}
-
-/* Helper for wbr element on IE 8+; in HTML5, but not supported by default as of IE 11. */
-/* Note canonical HTML5 styles recommend "content: \u200B", but this doesn't work as of IE 11. */
-wbr {
-       display: inline-block;
-}
-
-/* Input types that should follow user direction, like buttons */
-/* TODO: What about buttons in wikipage content ? */
-input[type="submit"],
-input[type="button"],
-input[type="reset"],
-input[type="file"] {
-       direction: ltr;
-}
-
-/* Override default values */
-textarea[dir="ltr"],
-input[dir="ltr"] {
-       /* @noflip */
-       direction: ltr;
-}
-
-textarea[dir="rtl"],
-input[dir="rtl"] {
-       /* @noflip */
-       direction: rtl;
-}
-
-/* Default style for semantic tags */
-abbr[title],
-.explain[title] {
-       border-bottom: 1px dotted;
-       cursor: help;
-}
-
-/* Colored watchlist and recent changes numbers */
-.mw-plusminus-pos {
-       color: #006400; /* dark green */
-}
-
-.mw-plusminus-neg {
-       color: #8b0000; /* dark red */
-}
-
-.mw-plusminus-null {
-       color: #aaa; /* gray */
-}
-
-/**
- * Links to redirects appear italicized on [[Special:AllPages]], [[Special:PrefixIndex]],
- * [[Special:Watchlist/edit]] and in category listings.
- */
-.allpagesredirect,
-.redirect-in-category,
-.watchlistredir {
-       font-style: italic;
-}
-
-/* Comment and username portions of RC entries */
-span.comment {
-       font-style: italic;
-}
-
-span.changedby {
-       font-size: 95%;
-}
-
-/* Math */
-.texvc {
-       direction: ltr;
-       unicode-bidi: embed;
-}
-
-img.tex {
-       vertical-align: middle;
-}
-
-span.texhtml {
-       font-family: serif;
-}
-
-/**
- * Add a bit of margin space between the preview and the toolbar.
- * This replaces the ugly <p><br /></p> we used to insert into the page source
- */
-#wikiPreview.ontop {
-       margin-bottom: 1em;
-}
-
-/* Stop floats from intruding into edit area in previews */
-#editform,
-#toolbar,
-#wpTextbox1 {
-       clear: both;
-}
-
-#toolbar img {
-       cursor: pointer;
-}
-
-/**
- * File description page
- */
-
-div.mw-filepage-resolutioninfo {
-       font-size: smaller;
-}
-
-/**
- * File histories
- */
-h2#filehistory {
-       clear: both;
-}
-
-table.filehistory th,
-table.filehistory td {
-       vertical-align: top;
-}
-
-table.filehistory th {
-       text-align: left;
-}
-
-table.filehistory td.mw-imagepage-filesize,
-table.filehistory th.mw-imagepage-filesize {
-       white-space: nowrap;
-}
-
-table.filehistory td.filehistory-selected {
-       font-weight: bold;
-}
-
-/**
- * Add a checkered background image on hover for file
- * description pages. (bug 26470)
- */
-.filehistory a img,
-#file img:hover {
-       /* @embed */
-       background: white url(images/Checker-16x16.png) repeat;
-}
-
-/**
- * rev_deleted stuff
- */
-li span.deleted,
-span.history-deleted {
-       text-decoration: line-through;
-       color: #888;
-       font-style: italic;
-}
-
-/**
- * Patrol stuff
- */
-.not-patrolled {
-       background-color: #ffa;
-}
-
-.unpatrolled {
-       font-weight: bold;
-       color: red;
-}
-
-div.patrollink {
-       font-size: 75%;
-       text-align: right;
-}
-
-/**
- * Forms
- */
-td.mw-label {
-       text-align: right;
-}
-
-td.mw-input {
-       text-align: left;
-}
-
-td.mw-submit {
-       text-align: left;
-}
-
-td.mw-label {
-       vertical-align: top;
-}
-
-.prefsection td.mw-label {
-       width: 20%;
-}
-
-.prefsection table {
-       width: 100%;
-}
-
-.prefsection table.mw-htmlform-matrix {
-       width: auto;
-}
-
-.mw-icon-question {
-       /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG).
-        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
-       background-image: url(images/question-small.png);
-       /* @embed */
-       background-image: -webkit-linear-gradient(transparent, transparent), url(images/question.svg);
-       /* @embed */
-       background-image: linear-gradient(transparent, transparent), url(images/question.svg);
-       background-repeat: no-repeat;
-       background-size: 13px 13px;
-       display: inline-block;
-       height: 13px;
-       width: 13px;
-       margin-left: 4px;
-}
-
-.mw-icon-question:lang(ar),
-.mw-icon-question:lang(fa),
-.mw-icon-question:lang(ur) {
-       -webkit-transform: scaleX(-1);
-       -ms-transform: scaleX(-1);
-       transform: scaleX(-1);
-}
-
-td.mw-submit {
-       white-space: nowrap;
-}
-
-table.mw-htmlform-nolabel td.mw-label {
-       width: 1px;
-}
-
-tr.mw-htmlform-vertical-label td.mw-label {
-       text-align: left !important;
-}
-
-.mw-htmlform-invalid-input td.mw-input input {
-       border-color: red;
-}
-
-.mw-htmlform-flatlist div.mw-htmlform-flatlist-item {
-       display: inline;
-       margin-right: 1em;
-       white-space: nowrap;
-}
-
-.mw-htmlform-matrix td {
-       padding-left: 0.5em;
-       padding-right: 0.5em;
-}
-
-input#wpSummary {
-       width: 80%;
-       margin-bottom: 1em;
-}
-
-/**
- * Image captions.
- *
- * This is only meant to provide the most basic of styles, visual settings shouldn't be added here.
- */
-
-/* @noflip */
-.mw-content-ltr .thumbcaption {
-       text-align: left;
-}
-
-/* @noflip */
-.mw-content-ltr .magnify {
-       float: right;
-}
-
-/* @noflip */
-.mw-content-rtl .thumbcaption {
-       text-align: right;
-}
-
-/* @noflip */
-.mw-content-rtl .magnify {
-       float: left;
-}
-
-/**
- * Categories
- */
-#catlinks {
-       /**
-        * Overrides text justification (user preference)
-        * See bug 31990
-        */
-       text-align: left;
-}
-
-.catlinks ul {
-       display: inline;
-       margin: 0;
-       padding: 0;
-       list-style: none;
-       list-style-type: none;
-       list-style-image: none;
-       vertical-align: middle !ie;
-}
-
-.catlinks li {
-       display: inline-block;
-       line-height: 1.25em;
-       border-left: 1px solid #AAA;
-       margin: 0.125em 0;
-       padding: 0 0.5em;
-       zoom: 1;
-       display: inline !ie;
-}
-
-.catlinks li:first-child {
-       padding-left: 0.25em;
-       border-left: none;
-}
-
-/* (bug 5346) make category redirects italic */
-.catlinks li a.mw-redirect {
-       font-style: italic;
-}
-
-/**
- * Hidden categories
- */
-.mw-hidden-cats-hidden {
-       display: none;
-}
-
-.catlinks-allhidden {
-       display: none;
-}
-
-/**
- * Convenience links to edit block, delete and protect reasons
- * and upload licenses
- */
-p.mw-ipb-conveniencelinks,
-p.mw-protect-editreasons,
-p.mw-filedelete-editreasons,
-p.mw-delete-editreasons,
-p.mw-revdel-editreasons,
-p.mw-upload-editlicenses {
-       font-size: 90%;
-       text-align: right;
-}
-
-/* Page history styling */
-
-/* The auto-generated edit comments */
-.autocomment {
-       color: gray;
-}
-
-#pagehistory .history-user {
-       margin-left: 0.4em;
-       margin-right: 0.2em;
-}
-
-#pagehistory span.minor {
-       font-weight: bold;
-}
-
-#pagehistory li {
-       border: 1px solid white;
-}
-
-#pagehistory li.selected {
-       background-color: #f9f9f9;
-       border: 1px dashed #aaa;
-}
-
-.mw-history-revisiondelete-button, #mw-fileduplicatesearch-icon {
-       float: right;
-}
-
-/** Generic minor/bot/newpage styling (recent changes) */
-.newpage,
-.minoredit,
-.botedit {
-       font-weight: bold;
-}
-
-#shared-image-dup,
-#shared-image-conflict {
-       font-style: italic;
-}
-
-/**
- * Recreating deleted page warning
- * Reupload file warning
- * Page protection warning
- * incl. log entries for these warnings
- */
-div.mw-warning-with-logexcerpt {
-       padding: 3px;
-       margin-bottom: 3px;
-       border: 2px solid #2F6FAB;
-       clear: both;
-}
-
-div.mw-warning-with-logexcerpt ul li {
-       font-size: 90%;
-}
-
-/* (show/hide) revision deletion links */
-span.mw-revdelundel-link,
-strong.mw-revdelundel-link {
-       font-size: 90%;
-}
-
-span.mw-revdelundel-hidden,
-input.mw-revdelundel-hidden {
-       visibility: hidden;
-}
-
-td.mw-revdel-checkbox,
-th.mw-revdel-checkbox {
-       padding-right: 10px;
-       text-align: center;
-}
-
-/* red links; see bug 36276 */
-a.new {
-       color: #BA0000;
-}
-
-/* feed links */
-a.feedlink {
-       /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG).
-        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
-       background-image: url(images/feed-icon.png);
-       /* @embed */
-       background-image: -webkit-linear-gradient(transparent, transparent), url(images/feed-icon.svg);
-       /* @embed */
-       background-image: linear-gradient(transparent, transparent), url(images/feed-icon.svg);
-       background-position: center left;
-       background-repeat: no-repeat;
-       background-size: 12px 12px;
-       padding-left: 16px;
-}
-
-/* Plainlinks - this can be used to switch
- * off special external link styling */
-.plainlinks a {
-       background: none !important;
-       padding: 0 !important;
-}
-
-/* External URLs should always be treated as LTR (bug 4330) */
-/* @noflip */ .rtl a.external.free,
-.rtl a.external.autonumber {
-       direction: ltr;
-       unicode-bidi: embed;
-}
-
-/**
- * wikitable class for skinning normal tables
- * keep in sync with commonPrint.css
- */
-table.wikitable {
-       margin: 1em 0;
-       background-color: #f9f9f9;
-       border: 1px #aaa solid;
-       border-collapse: collapse;
-       color: black;
-}
-
-table.wikitable > tr > th,
-table.wikitable > tr > td,
-table.wikitable > * > tr > th,
-table.wikitable > * > tr > td {
-       border: 1px #aaa solid;
-       padding: 0.2em;
-}
-
-table.wikitable > tr > th,
-table.wikitable > * > tr > th {
-       background-color: #f2f2f2;
-       text-align: center;
-}
-
-table.wikitable > caption {
-       font-weight: bold;
-}
-
-/**
- * Hide collapsable rows in a collapsed table.
- *
- * Used by ImagePage and the mediawiki.action.view.metadata module.
- */
-table.collapsed tr.collapsable {
-       display: none;
-}
-
-/* success and error messages */
-.error,
-.warning,
-.success {
-       font-size: larger;
-}
-
-.error {
-       color: #cc0000;
-}
-
-.warning {
-       color: #705000;
-}
-
-.success {
-       color: #009000;
-}
-
-.errorbox,
-.warningbox,
-.successbox {
-       border: 1px solid;
-       padding: .5em 1em;
-       margin-bottom: 1em;
-       display: -moz-inline-block;
-       display: inline-block;
-       zoom: 1;
-       *display: inline;
-}
-
-.errorbox h2,
-.warningbox h2,
-.successbox h2 {
-       font-size: 1em;
-       color: inherit;
-       font-weight: bold;
-       display: inline;
-       margin: 0 .5em 0 0;
-       border: none;
-}
-
-.errorbox {
-       color: #cc0000;
-       border-color: #fac5c5;
-       background-color: #fae3e3;
-}
-
-.warningbox {
-       color: #705000;
-       border-color: #fde29b;
-       background-color: #fdf1d1;
-}
-
-.successbox {
-       color: #009000;
-       border-color: #b7fdb5;
-       background-color: #e1fddf;
-}
-
-/* general info/warning box for SP */
-.mw-infobox {
-       border: 2px solid #ff7f00;
-       margin: 0.5em;
-       clear: left;
-       overflow: hidden;
-}
-
-.mw-infobox-left {
-       margin: 7px;
-       float: left;
-       width: 35px;
-}
-
-.mw-infobox-right {
-       margin: 0.5em 0.5em 0.5em 49px;
-}
-
-/* Note on preview page */
-.previewnote {
-       color: #c00;
-       margin-bottom: 1em;
-}
-
-.previewnote p {
-       text-indent: 3em;
-       margin: 0.8em 0;
-}
-
-.visualClear {
-       clear: both;
-}
-
-/**
- * Data table style
- *
- * Transparent table with suddle borders
- * and blue row-highlighting.
- */
-.mw-datatable {
-       border-collapse: collapse;
-}
-
-.mw-datatable,
-.mw-datatable td,
-.mw-datatable th {
-       border: 1px solid #aaaaaa;
-       padding: 0 0.15em 0 0.15em;
-}
-
-.mw-datatable th {
-       background-color: #ddddff;
-}
-
-.mw-datatable td {
-       background-color: #ffffff;
-}
-
-.mw-datatable tr:hover td {
-       background-color: #eeeeff;
-}
-
-/**
- * TablePager tables generated by the TablePager PHP class
- * in MediaWiki (e.g. Special:ListFiles).
- */
-.TablePager {
-       min-width: 80%;
-}
-
-.TablePager_nav {
-       margin: 0 auto;
-}
-
-.TablePager_nav td {
-       padding: 3px;
-       text-align: center;
-}
-
-.TablePager_nav a {
-       text-decoration: none;
-}
-
-/* filetoc */
-ul#filetoc {
-       text-align: center;
-       border: 1px solid #aaaaaa;
-       background-color: #f9f9f9;
-       padding: 5px;
-       font-size: 95%;
-       margin-bottom: 0.5em;
-       margin-left: 0;
-       margin-right: 0;
-}
-
-#filetoc li {
-       display: inline;
-       list-style-type: none;
-       padding-right: 2em;
-}
-
-/* Classes for Exif data display */
-table.mw_metadata {
-       font-size: 0.8em;
-       margin-left: 0.5em;
-       margin-bottom: 0.5em;
-       width: 400px;
-}
-
-table.mw_metadata caption {
-       font-weight: bold;
-}
-
-table.mw_metadata th {
-       font-weight: normal;
-}
-
-table.mw_metadata td {
-       padding: 0.1em;
-}
-
-table.mw_metadata {
-       border: none;
-       border-collapse: collapse;
-}
-
-table.mw_metadata td,
-table.mw_metadata th {
-       text-align: center;
-       border: 1px solid #aaaaaa;
-       padding-left: 5px;
-       padding-right: 5px;
-}
-
-table.mw_metadata th {
-       background-color: #f9f9f9;
-}
-
-table.mw_metadata td {
-       background-color: #fcfcfc;
-}
-
-table.mw_metadata ul.metadata-langlist {
-       list-style-type: none;
-       list-style-image: none;
-       padding-right: 5px;
-       padding-left: 5px;
-       margin: 0;
-}
-
-/* Correct directionality when page dir is different from site/user dir */
-.mw-content-ltr ul,
-.mw-content-rtl .mw-content-ltr ul {
-       /* @noflip */
-       margin: 0.3em 0 0 1.6em;
-       padding: 0;
-}
-
-.mw-content-rtl ul,
-.mw-content-ltr .mw-content-rtl ul {
-       /* @noflip */
-       margin: 0.3em 1.6em 0 0;
-       padding: 0;
-}
-
-.mw-content-ltr ol,
-.mw-content-rtl .mw-content-ltr ol {
-       /* @noflip */
-       margin: 0.3em 0 0 3.2em;
-       padding: 0;
-}
-
-.mw-content-rtl ol,
-.mw-content-ltr .mw-content-rtl ol {
-       /* @noflip */
-       margin: 0.3em 3.2em 0 0;
-       padding: 0;
-}
-
-/* @noflip */
-.mw-content-ltr dd,
-.mw-content-rtl .mw-content-ltr dd {
-       margin-left: 1.6em;
-       margin-right: 0;
-}
-
-/* @noflip */
-.mw-content-rtl dd,
-.mw-content-ltr .mw-content-rtl dd {
-       margin-right: 1.6em;
-       margin-left: 0;
-}
-
-/* Galleries */
-/* These display attributes look nonsensical, but are needed to support IE and FF2 */
-/* Don't forget to update commonPrint.css */
-li.gallerybox {
-       vertical-align: top;
-       display: -moz-inline-box;
-       display: inline-block;
-}
-
-ul.gallery,
-li.gallerybox {
-       zoom: 1;
-       *display: inline;
-}
-
-ul.gallery {
-       margin: 2px;
-       padding: 2px;
-       display: block;
-}
-
-li.gallerycaption {
-       font-weight: bold;
-       text-align: center;
-       display: block;
-       word-wrap: break-word;
-}
-
-li.gallerybox div.thumb {
-       text-align: center;
-       border: 1px solid #ccc;
-       background-color: #f9f9f9;
-       margin: 2px;
-}
-
-li.gallerybox div.thumb img {
-       display: block;
-       margin: 0 auto;
-}
-
-div.gallerytext {
-       overflow: hidden;
-       font-size: 94%;
-       padding: 2px 4px;
-       word-wrap: break-word;
-}
-
-/* new gallery stuff */
-ul.mw-gallery-nolines li.gallerybox div.thumb {
-       background-color: transparent;
-       border: none;
-}
-
-ul.mw-gallery-nolines li.gallerybox div.gallerytext {
-       text-align: center;
-}
-
-/* height constrained gallery */
-
-ul.mw-gallery-packed li.gallerybox div.thumb,
-ul.mw-gallery-packed-overlay li.gallerybox div.thumb,
-ul.mw-gallery-packed-hover li.gallerybox div.thumb {
-       background-color: transparent;
-       border: none;
-}
-
-ul.mw-gallery-packed li.gallerybox div.thumb img,
-ul.mw-gallery-packed-overlay li.gallerybox div.thumb img,
-ul.mw-gallery-packed-hover li.gallerybox div.thumb img {
-       margin: 0 auto;
-}
-
-ul.mw-gallery-packed-hover li.gallerybox,
-ul.mw-gallery-packed-overlay li.gallerybox {
-       position: relative;
-}
-
-ul.mw-gallery-packed-hover div.gallerytextwrapper {
-       overflow: hidden;
-       height: 0;
-}
-
-ul.mw-gallery-packed-hover li.gallerybox:hover div.gallerytextwrapper,
-ul.mw-gallery-packed-overlay li.gallerybox div.gallerytextwrapper,
-ul.mw-gallery-packed-hover li.gallerybox.mw-gallery-focused div.gallerytextwrapper {
-       position: absolute;
-       background: white;
-       background: rgba(255, 255, 255, 0.8);
-       padding: 5px 10px;
-       bottom: 0;
-       left: 0; /* Needed for IE */
-       height: auto;
-       font-weight: bold;
-       margin: 2px; /* correspond to style on div.thumb */
-}
-
-ul.mw-gallery-packed-hover,
-ul.mw-gallery-packed-overlay,
-ul.mw-gallery-packed {
-       text-align: center;
-}
-
-.mw-ajax-loader {
-       /* @embed */
-       background-image: url(images/ajax-loader.gif);
-       background-position: center center;
-       background-repeat: no-repeat;
-       padding: 16px;
-       position: relative;
-       top: -16px;
-}
-
-.mw-small-spinner {
-       padding: 10px !important;
-       margin-right: 0.6em;
-       /* @embed */
-       background-image: url(images/spinner.gif);
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-
-/* Language specific height correction for titles. Ref Bug 29405 and Bug 30809 */
-/* Languages like hi or ml require slightly more vertical space to show diacritics properly */
-h1:lang(anp),
-h1:lang(as),
-h1:lang(bh), /* Macrolanguage, used on bh.wikipedia.org, should be removed one day */
-h1:lang(bho),
-h1:lang(bn),
-h1:lang(gu),
-h1:lang(hi),
-h1:lang(kn),
-h1:lang(ks),
-h1:lang(ml),
-h1:lang(mr),
-h1:lang(my),
-h1:lang(mai),
-h1:lang(ne),
-h1:lang(new),
-h1:lang(or),
-h1:lang(pa),
-h1:lang(pi),
-h1:lang(sa),
-h1:lang(ta),
-h1:lang(te) {
-       line-height: 1.6em !important;
-}
-
-h2:lang(anp), h3:lang(anp), h4:lang(anp), h5:lang(anp), h6:lang(anp),
-h2:lang(as), h3:lang(as), h4:lang(as), h5:lang(as), h6:lang(as),
-h2:lang(bho), h3:lang(bho), h4:lang(bho), h5:lang(bho), h6:lang(bho),
-h2:lang(bh), h3:lang(bh), h4:lang(bh), h5:lang(bh), h6:lang(bh),
-h2:lang(bn), h3:lang(bn), h4:lang(bn), h5:lang(bn), h6:lang(bn),
-h2:lang(gu), h3:lang(gu), h4:lang(gu), h5:lang(gu), h6:lang(gu),
-h2:lang(hi), h3:lang(hi), h4:lang(hi), h5:lang(hi), h6:lang(hi),
-h2:lang(kn), h3:lang(kn), h4:lang(kn), h5:lang(kn), h6:lang(kn),
-h2:lang(ks), h3:lang(ks), h4:lang(ks), h5:lang(ks), h6:lang(ks),
-h2:lang(ml), h3:lang(ml), h4:lang(ml), h5:lang(ml), h6:lang(ml),
-h2:lang(mr), h3:lang(mr), h4:lang(mr), h5:lang(mr), h6:lang(mr),
-h2:lang(my), h3:lang(my), h4:lang(my), h5:lang(my), h6:lang(my),
-h2:lang(mai), h3:lang(mai), h4:lang(mai), h5:lang(mai), h6:lang(mai),
-h2:lang(ne), h3:lang(ne), h4:lang(ne), h5:lang(ne), h6:lang(ne),
-h2:lang(new), h3:lang(new), h4:lang(new), h5:lang(new), h6:lang(new),
-h2:lang(or), h3:lang(or), h4:lang(or), h5:lang(or), h6:lang(or),
-h2:lang(pa), h3:lang(pa), h4:lang(pa), h5:lang(pa), h6:lang(pa),
-h2:lang(pi), h3:lang(pi), h4:lang(pi), h5:lang(pi), h6:lang(pi),
-h2:lang(sa), h3:lang(sa), h4:lang(sa), h5:lang(sa), h6:lang(sa),
-h2:lang(ta), h3:lang(ta), h4:lang(ta), h5:lang(ta), h6:lang(ta),
-h2:lang(te), h3:lang(te), h4:lang(te), h5:lang(te), h6:lang(te) {
-       line-height: 1.2em;
-}
-
-/* Localised ordered list numbering for some languages */
-ol:lang(bcc) li,
-ol:lang(bqi) li,
-ol:lang(fa) li,
-ol:lang(glk) li,
-ol:lang(kk-arab) li,
-ol:lang(mzn) li {
-       list-style-type: -moz-persian;
-       list-style-type: persian;
-}
-
-ol:lang(ckb) li {
-       list-style-type: -moz-arabic-indic;
-       list-style-type: arabic-indic;
-}
-
-ol:lang(hi) li,
-ol:lang(mr) li {
-       list-style-type: -moz-devanagari;
-       list-style-type: devanagari;
-}
-
-ol:lang(as) li,
-ol:lang(bn) li {
-       list-style-type: -moz-bengali;
-       list-style-type: bengali;
-}
-
-ol:lang(or) li {
-       list-style-type: -moz-oriya;
-       list-style-type: oriya;
-}
-
-#toc ul, .toc ul {
-       margin: .3em 0;
-}
-
-/* Correct directionality when page dir is different from site/user dir */
-/* @noflip */ .mw-content-ltr .toc ul,
-.mw-content-ltr #toc ul,
-.mw-content-rtl .mw-content-ltr .toc ul,
-.mw-content-rtl .mw-content-ltr #toc ul {
-       text-align: left;
-}
-
-/* @noflip */ .mw-content-rtl .toc ul,
-.mw-content-rtl #toc ul,
-.mw-content-ltr .mw-content-rtl .toc ul,
-.mw-content-ltr .mw-content-rtl #toc ul {
-       text-align: right;
-}
-
-/* @noflip */ .mw-content-ltr .toc ul ul,
-.mw-content-ltr #toc ul ul,
-.mw-content-rtl .mw-content-ltr .toc ul ul,
-.mw-content-rtl .mw-content-ltr #toc ul ul {
-       margin: 0 0 0 2em;
-}
-
-/* @noflip */ .mw-content-rtl .toc ul ul,
-.mw-content-rtl #toc ul ul,
-.mw-content-ltr .mw-content-rtl .toc ul ul,
-.mw-content-ltr .mw-content-rtl #toc ul ul {
-       margin: 0 2em 0 0;
-}
-
-#toc #toctitle,
-.toc #toctitle,
-#toc .toctitle,
-.toc .toctitle {
-       direction: ltr;
-}
-
-/* tooltip styles */
-.mw-help-field-hint {
-       display: none;
-       margin-left: 2px;
-       margin-bottom: -8px;
-       padding: 0 0 0 15px;
-       /* @embed */
-       background-image: url(images/help-question.gif);
-       background-position: left center;
-       background-repeat: no-repeat;
-       cursor: pointer;
-       font-size: .8em;
-       text-decoration: underline;
-       color: #0645ad;
-}
-
-.mw-help-field-hint:hover {
-       /* @embed */
-       background-image: url(images/help-question-hover.gif);
-}
-
-.mw-help-field-data {
-       display: block;
-       background-color: #d6f3ff;
-       padding: 5px 8px 4px 8px;
-       border: 1px solid #5dc9f4;
-       margin-left: 20px;
-}
-
-#mw-clearyourcache,
-#mw-sitecsspreview,
-#mw-sitejspreview,
-#mw-usercsspreview,
-#mw-userjspreview {
-       direction: ltr;
-       unicode-bidi: embed;
-}
-
-/* Correct user & content directionality when viewing a diff */
-.diff-currentversion-title,
-.diff {
-       direction: ltr;
-       unicode-bidi: embed;
-}
-
-/* @noflip */ .diff-contentalign-right td {
-       direction: rtl;
-       unicode-bidi: embed;
-}
-
-/* @noflip */ .diff-contentalign-left td {
-       direction: ltr;
-       unicode-bidi: embed;
-}
-
-.diff-multi,
-.diff-otitle,
-.diff-ntitle,
-.diff-lineno {
-       direction: ltr !important;
-       unicode-bidi: embed;
-}
-
-#mw-revision-info,
-#mw-revision-info-current,
-#mw-revision-nav {
-       direction: ltr;
-       display: inline;
-}
-
-/* Images */
-
-/* @noflip */ div.tright,
-div.floatright,
-table.floatright {
-       clear: right;
-       float: right;
-}
-
-/* @noflip */ div.tleft,
-div.floatleft,
-table.floatleft {
-       float: left;
-       clear: left;
-}
-
-div.floatright,
-table.floatright,
-div.floatleft,
-table.floatleft {
-       position: relative;
-}
-
-/* bug 12205 */
-#mw-credits a {
-       unicode-bidi: embed;
-}
-
-/* Accessibility */
-.mw-jump,
-#jump-to-nav {
-       overflow: hidden;
-       height: 0;
-       zoom: 1; /* http://webaim.org/techniques/skipnav/#iequirk */
-}
-
-/* Print footer should be hidden by default in screen. */
-.printfooter {
-       display: none;
-}
-
-/* For developers */
-.xdebug-error {
-       position: absolute;
-       z-index: 99;
-}
-
-.mw-editsection,
-.toctoggle,
-#jump-to-nav {
-       -moz-user-select: none;
-       -webkit-user-select: none;
-       -ms-user-select: none;
-       user-select: none;
-}
-
-/* Display editsection links smaller and next to headings */
-.mw-editsection,
-.mw-editsection-like {
-       font-size: small;
-       font-weight: normal;
-       margin-left: 1em;
-       vertical-align: baseline;
-       /* Reset line-height; headings tend to have it set to larger values */
-       line-height: 1em;
-       /* As .mw-editsection is a <span> (inline element), it is treated as part */
-       /* of the heading content when selecting text by multiple clicks and thus */
-       /* selected together with heading content, despite the user-select: none; */
-       /* rule set above. This enforces non-selection without changing the look. */
-       display: inline-block;
-}
-
-/* Correct directionality when page dir is different from site/user dir */
-/* @noflip */
-.mw-content-ltr .mw-editsection,
-.mw-content-rtl .mw-content-ltr .mw-editsection {
-       margin-left: 1em;
-}
-
-/* @noflip */
-.mw-content-rtl .mw-editsection,
-.mw-content-ltr .mw-content-rtl .mw-editsection {
-       margin-right: 1em;
-}
-
-/* Prevent citations and subscripts from interfering with the line-height */
-sup,
-sub {
-       line-height: 1;
-}
diff --git a/skins/common/upload.js b/skins/common/upload.js
deleted file mode 100644 (file)
index 7933caf..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-/*jshint camelcase:false */
-( function ( mw, $ ) {
-var    licenseSelectorCheck, wgUploadWarningObj, wgUploadLicenseObj, fillDestFilename,
-       ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
-       fileExtensions = mw.config.get( 'wgFileExtensions' ),
-       $spinnerDestCheck, $spinnerLicense;
-
-licenseSelectorCheck = window.licenseSelectorCheck = function () {
-       var selector = document.getElementById( 'wpLicense' ),
-               selection = selector.options[selector.selectedIndex].value;
-       if ( selector.selectedIndex > 0 ) {
-               if ( !selection ) {
-                       // Option disabled, but browser is broken and doesn't respect this
-                       selector.selectedIndex = 0;
-               }
-       }
-       // We might show a preview
-       wgUploadLicenseObj.fetchPreview( selection );
-};
-
-function uploadSetup() {
-       // Disable URL box if the URL copy upload source type is not selected
-       var ein,
-               selector, ua, isMacIe, i,
-               optionsTable, row, td,
-               wpLicense, wpLicenseRow, wpLicenseTbody,
-               uploadSourceIds, len, onchange,
-               e = document.getElementById( 'wpSourceTypeurl' );
-       if ( e ) {
-               if ( !e.checked ) {
-                       ein = document.getElementById( 'wpUploadFileURL' );
-                       if ( ein ) {
-                               ein.disabled = true;
-                       }
-               }
-       }
-
-       // For MSIE/Mac: non-breaking spaces cause the <option> not to render.
-       // But for some reason, setting the text to itself works
-       selector = document.getElementById( 'wpLicense' );
-       if ( selector ) {
-               ua = navigator.userAgent;
-               isMacIe = ua.indexOf( 'MSIE' ) !== -1 && ua.indexOf( 'Mac' ) !== -1;
-               if ( isMacIe ) {
-                       for ( i = 0; i < selector.options.length; i++ ) {
-                               selector.options[i].text = selector.options[i].text;
-                       }
-               }
-       }
-
-       // AJAX wpDestFile warnings
-       if ( ajaxUploadDestCheck ) {
-               // Insert an event handler that fetches upload warnings when wpDestFile
-               // has been changed
-               document.getElementById( 'wpDestFile' ).onchange = function () {
-                       wgUploadWarningObj.checkNow( this.value );
-               };
-               // Insert a row where the warnings will be displayed just below the
-               // wpDestFile row
-               optionsTable = document.getElementById( 'mw-htmlform-description' ).tBodies[0];
-               row = optionsTable.insertRow( 1 );
-               td = document.createElement( 'td' );
-               td.id = 'wpDestFile-warning';
-               td.colSpan = 2;
-
-               row.appendChild( td );
-       }
-
-       wpLicense = document.getElementById( 'wpLicense' );
-       if ( mw.config.get( 'wgAjaxLicensePreview' ) && wpLicense ) {
-               // License selector check
-               wpLicense.onchange = licenseSelectorCheck;
-
-               // License selector table row
-               wpLicenseRow = wpLicense.parentNode.parentNode;
-               wpLicenseTbody = wpLicenseRow.parentNode;
-
-               row = document.createElement( 'tr' );
-               td = document.createElement( 'td' );
-               row.appendChild( td );
-               td = document.createElement( 'td' );
-               td.id = 'mw-license-preview';
-               row.appendChild( td );
-
-               wpLicenseTbody.insertBefore( row, wpLicenseRow.nextSibling );
-       }
-
-       // fillDestFile setup
-       uploadSourceIds = mw.config.get( 'wgUploadSourceIds' );
-       len = uploadSourceIds.length;
-       onchange = function () {
-               fillDestFilename( this.id );
-       };
-       for ( i = 0; i < len; i += 1 ) {
-               document.getElementById( uploadSourceIds[i] ).onchange = onchange;
-       }
-}
-
-wgUploadWarningObj = window.wgUploadWarningObj = {
-       responseCache: { '': '&nbsp;' },
-       nameToCheck: '',
-       typing: false,
-       delay: 500, // ms
-       timeoutID: false,
-
-       keypress: function () {
-               var cached, destFile, warningElt;
-
-               if ( !ajaxUploadDestCheck ) {
-                       return;
-               }
-
-               // Find file to upload
-               destFile = document.getElementById( 'wpDestFile' );
-               warningElt = document.getElementById( 'wpDestFile-warning' );
-               if ( !destFile || !warningElt ) {
-                       return;
-               }
-
-               this.nameToCheck = destFile.value;
-
-               // Clear timer
-               if ( this.timeoutID ) {
-                       clearTimeout( this.timeoutID );
-               }
-               // Check response cache
-               for ( cached in this.responseCache ) {
-                       if ( this.nameToCheck === cached ) {
-                               this.setWarning(this.responseCache[this.nameToCheck]);
-                               return;
-                       }
-               }
-
-               this.timeoutID = setTimeout( function () {
-                       wgUploadWarningObj.timeout();
-               }, this.delay );
-       },
-
-       checkNow: function ( fname ) {
-               if ( !ajaxUploadDestCheck ) {
-                       return;
-               }
-               if ( this.timeoutID ) {
-                       clearTimeout( this.timeoutID );
-               }
-               this.nameToCheck = fname;
-               this.timeout();
-       },
-
-       timeout: function () {
-               if ( !ajaxUploadDestCheck || this.nameToCheck === '' ) {
-                       return;
-               }
-               $spinnerDestCheck = $.createSpinner().insertAfter( '#wpDestFile' );
-
-               var uploadWarningObj = this;
-               ( new mw.Api() ).get( {
-                       action: 'query',
-                       titles: ( new mw.Title( this.nameToCheck, mw.config.get( 'wgNamespaceIds' ).file ) ).getPrefixedText(),
-                       prop: 'imageinfo',
-                       iiprop: 'uploadwarning',
-                       indexpageids: ''
-               } ).done( function ( result ) {
-                       var resultOut = '';
-                       if ( result.query ) {
-                               resultOut = result.query.pages[result.query.pageids[0]].imageinfo[0];
-                       }
-                       uploadWarningObj.processResult( resultOut, uploadWarningObj.nameToCheck );
-               } );
-       },
-
-       processResult: function ( result, fileName ) {
-               $spinnerDestCheck.remove();
-               $spinnerDestCheck = undefined;
-               this.setWarning( result.html );
-               this.responseCache[fileName] = result.html;
-       },
-
-       setWarning: function ( warning ) {
-               var warningElt = document.getElementById( 'wpDestFile-warning' ),
-                       ackElt = document.getElementsByName( 'wpDestFileWarningAck' );
-
-               this.setInnerHTML( warningElt, warning );
-
-               // Set a value in the form indicating that the warning is acknowledged and
-               // doesn't need to be redisplayed post-upload
-               if ( !warning ) {
-                       ackElt[0].value = '';
-               } else {
-                       ackElt[0].value = '1';
-               }
-
-       },
-       setInnerHTML: function ( element, text ) {
-               // Check for no change to avoid flicker in IE 7
-               if ( element.innerHTML !== text ) {
-                       element.innerHTML = text;
-               }
-       }
-};
-
-fillDestFilename = window.fillDestFilename = function ( id ) {
-       var e, path, slash, backslash, fname,
-               found, ext, i,
-               destFile;
-       if ( !mw.config.get( 'wgUploadAutoFill' ) ) {
-               return;
-       }
-       if ( !document.getElementById ) {
-               return;
-       }
-       // Remove any previously flagged errors
-       e = document.getElementById( 'mw-upload-permitted' );
-       if ( e ) {
-               e.className = '';
-       }
-
-       e = document.getElementById( 'mw-upload-prohibited' );
-       if ( e ) {
-               e.className = '';
-       }
-
-       path = document.getElementById( id ).value;
-       // Find trailing part
-       slash = path.lastIndexOf( '/' );
-       backslash = path.lastIndexOf( '\\' );
-       if ( slash === -1 && backslash === -1 ) {
-               fname = path;
-       } else if ( slash > backslash ) {
-               fname = path.substring( slash + 1, 10000 );
-       } else {
-               fname = path.substring( backslash + 1, 10000 );
-       }
-
-       // Clear the filename if it does not have a valid extension.
-       // URLs are less likely to have a useful extension, so don't include them in the
-       // extension check.
-       if ( mw.config.get( 'wgStrictFileExtensions' ) && fileExtensions && id !== 'wpUploadFileURL' ) {
-               found = false;
-               if ( fname.lastIndexOf( '.' ) !== -1 ) {
-                       ext = fname.substr( fname.lastIndexOf( '.' ) + 1 );
-                       for ( i = 0; i < fileExtensions.length; i += 1 ) {
-                               if ( fileExtensions[i].toLowerCase() === ext.toLowerCase() ) {
-                                       found = true;
-                                       break;
-                               }
-                       }
-               }
-               if ( !found ) {
-                       // Not a valid extension
-                       // Clear the upload and set mw-upload-permitted to error
-                       document.getElementById( id ).value = '';
-                       e = document.getElementById( 'mw-upload-permitted' );
-                       if ( e ) {
-                               e.className = 'error';
-                       }
-
-                       e = document.getElementById( 'mw-upload-prohibited' );
-                       if ( e ) {
-                               e.className = 'error';
-                       }
-
-                       // Clear wpDestFile as well
-                       e = document.getElementById( 'wpDestFile' );
-                       if ( e ) {
-                               e.value = '';
-                       }
-
-                       return false;
-               }
-       }
-
-       // Replace spaces by underscores
-       fname = fname.replace( / /g, '_' );
-       // Capitalise first letter if needed
-       if ( mw.config.get( 'wgCapitalizeUploads' ) ) {
-               fname = fname.charAt( 0 ).toUpperCase().concat( fname.substring( 1, 10000 ) );
-       }
-
-       // Output result
-       destFile = document.getElementById( 'wpDestFile' );
-       if ( destFile ) {
-               // Call decodeURIComponent function to remove possible URL-encoded characters
-               // from the file name (bug 30390). Especially likely with upload-form-url.
-               // decodeURIComponent can throw an exception in input is invalid utf-8
-               try {
-                       destFile.value = decodeURIComponent( fname );
-               } catch ( err ) {
-                       destFile.value = fname;
-               }
-               wgUploadWarningObj.checkNow( fname );
-       }
-};
-
-window.toggleFilenameFiller = function () {
-       if ( !document.getElementById ) {
-               return;
-       }
-       var destName = document.getElementById( 'wpDestFile' ).value;
-       mw.config.set( 'wgUploadAutoFill', !destName );
-};
-
-wgUploadLicenseObj = window.wgUploadLicenseObj = {
-
-       responseCache: { '': '' },
-
-       fetchPreview: function ( license ) {
-               var cached, title;
-               if ( !mw.config.get( 'wgAjaxLicensePreview' ) ) {
-                       return;
-               }
-               for ( cached in this.responseCache ) {
-                       if ( cached === license ) {
-                               this.showPreview( this.responseCache[license] );
-                               return;
-                       }
-               }
-
-               $spinnerLicense = $.createSpinner().insertAfter( '#wpLicense' );
-
-               title = document.getElementById( 'wpDestFile' ).value;
-               if ( !title ) {
-                       title = 'File:Sample.jpg';
-               }
-
-               ( new mw.Api() ).get( {
-                       action: 'parse',
-                       text: '{{' + license + '}}',
-                       title: title,
-                       prop: 'text',
-                       pst: ''
-               } ).done( function ( result ) {
-                       wgUploadLicenseObj.processResult( result, license );
-               } );
-       },
-
-       processResult: function ( result, license ) {
-               $spinnerLicense.remove();
-               $spinnerLicense = undefined;
-               this.responseCache[license] = result.parse.text['*'];
-               this.showPreview( this.responseCache[license] );
-       },
-
-       showPreview: function ( preview ) {
-               var previewPanel = document.getElementById( 'mw-license-preview' );
-               if ( previewPanel.innerHTML !== preview ) {
-                       previewPanel.innerHTML = preview;
-               }
-       }
-
-};
-
-$( uploadSetup );
-
-}( mediaWiki, jQuery ) );
deleted file mode 100644 (file)
index 5c6e63b9ee9285c2de3d2ab68b8d42e6302a4d75..0000000000000000000000000000000000000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/**
- * MediaWiki legacy wikibits
- */
-( function ( mw, $ ) {
-       var msg,
-               win = window,
-               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 ) {
-               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 instead
- */
-msg = 'Use mediawiki.util instead.';
-mw.log.deprecate( win, 'updateTooltipAccessKeys', mw.util.updateTooltipAccessKeys, msg );
-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 );
-
-/**
- * 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 ) );
new file mode 120000 (symlink)
index 0000000000000000000000000000000000000000..c86af5b4cafc2d01d733615599ae1d66fe042639
--- /dev/null
@@ -0,0 +1 @@
+../../resources/src/mediawiki.legacy/wikibits.js
\ No newline at end of file
index 0078d7e..7391afd 100644 (file)
@@ -44,6 +44,7 @@ $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",
 
@@ -111,4 +112,7 @@ $wgAutoloadClasses += array(
        # tests/phpunit/includes/site
        'SiteTest' => "$testDir/phpunit/includes/site/SiteTest.php",
        'TestSites' => "$testDir/phpunit/includes/site/TestSites.php",
+
+       # tests/phpunit/includes/specialpage
+       'SpecialPageTestHelper' => "$testDir/phpunit/includes/specialpage/SpecialPageTestHelper.php",
 );
diff --git a/tests/browser/Gemfile b/tests/browser/Gemfile
deleted file mode 100755 (executable)
index 3be33b7..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#ruby=ruby-2.1.2
-#ruby-gemset=core
-
-source "https://rubygems.org"
-
-gem "mediawiki_api"
-gem "mediawiki_selenium"
diff --git a/tests/browser/Gemfile.lock b/tests/browser/Gemfile.lock
deleted file mode 100644 (file)
index 92784bf..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    builder (3.2.2)
-    childprocess (0.5.3)
-      ffi (~> 1.0, >= 1.0.11)
-    cucumber (1.3.15)
-      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)
-      faker (>= 1.1.2)
-      yml_reader (>= 0.3)
-    diff-lcs (1.2.5)
-    domain_name (0.5.19)
-      unf (>= 0.0.5, < 1.0.0)
-    faker (1.3.0)
-      i18n (~> 0.5)
-    faraday (0.9.0)
-      multipart-post (>= 1.2, < 3)
-    faraday-cookie_jar (0.0.6)
-      faraday (>= 0.7.4)
-      http-cookie (~> 1.0.0)
-    ffi (1.9.3)
-    gherkin (2.12.2)
-      multi_json (~> 1.3)
-    headless (1.0.2)
-    http-cookie (1.0.2)
-      domain_name (~> 0.5)
-    i18n (0.6.9)
-    json (1.8.1)
-    mediawiki_api (0.1.3)
-      faraday (~> 0.9, >= 0.9.0)
-      faraday-cookie_jar (~> 0.0, >= 0.0.6)
-    mediawiki_selenium (0.2.25)
-      cucumber (~> 1.3, >= 1.3.10)
-      headless (~> 1.0, >= 1.0.1)
-      json (~> 1.8, >= 1.8.1)
-      page-object (~> 1.0)
-      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)
-    multipart-post (2.0.0)
-    page-object (1.0)
-      page_navigation (>= 0.9)
-      selenium-webdriver (>= 2.42.0)
-      watir-webdriver (>= 0.6.9)
-    page_navigation (0.9)
-      data_magic (>= 0.14)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    rspec-expectations (2.99.1)
-      diff-lcs (>= 1.1.3, < 2.0)
-    rubyzip (1.1.5)
-    selenium-webdriver (2.42.0)
-      childprocess (>= 0.5.0)
-      multi_json (~> 1.0)
-      rubyzip (~> 1.0)
-      websocket (~> 1.0.4)
-    syntax (1.2.0)
-    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)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  mediawiki_api
-  mediawiki_selenium
index d6745ad..0b4e83a 100644 (file)
@@ -1,4 +1,4 @@
-@chrome @clean @en.wikipedia.beta.wmflabs.org @firefox @phantomjs @test2.wikipedia.org
+@chrome @clean @firefox @phantomjs
 Feature: Create account
 
   Scenario Outline: Go to Create account page
index 29dd1c1..a0aa624 100644 (file)
@@ -1,4 +1,4 @@
-@chrome @clean @en.wikipedia.beta.wmflabs.org @firefox @login @phantomjs @test2.wikipedia.org
+@chrome @clean @firefox @login @phantomjs
 Feature: Create Page With Wiki Link
 
   Scenario: Create Page With Wiki Link
index c190a78..b905795 100644 (file)
@@ -1,4 +1,4 @@
-@chrome @clean @en.wikipedia.beta.wmflabs.org @firefox @login @phantomjs @test2.wikipedia.org
+@chrome @clean @firefox @login @phantomjs
 Feature: Edit Page
 
   Scenario: Create and edit page
index 2d3b708..0bd36ed 100644 (file)
@@ -9,7 +9,7 @@
 # qa-browsertests top-level directory and at
 # https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
 #
-@chrome @en.wikipedia.beta.wmflabs.org @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @phantomjs @test2.wikipedia.org
+@chrome @clean @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @phantomjs
 Feature: File
 
  Scenario: Anonymous goes to file that does not exist
@@ -20,4 +20,4 @@ Feature: File
  Scenario: Logged-in user goes to file that does not exist
    Given I am logged in
      And I am at file that does not exist
-   Then page should show that no such file exists
\ No newline at end of file
+   Then page should show that no such file exists
index 9ff2a2a..c34d23d 100644 (file)
@@ -9,7 +9,7 @@
 # qa-browsertests top-level directory and at
 # https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
 #
-@chrome @en.wikipedia.beta.wmflabs.org @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @phantomjs @test2.wikipedia.org
+@chrome @clean @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @phantomjs
 Feature: Log in
 
   Background:
@@ -39,4 +39,4 @@ Feature: Log in
   @login
   Scenario: Log in with valid credentials
     When I am logged in
-    Then error box should not be visible
\ No newline at end of file
+    Then error box should not be visible
index 561fe53..3613c82 100644 (file)
@@ -1,4 +1,4 @@
-@chrome @clean @en.wikipedia.beta.wmflabs.org @firefox @phantomjs @test2.wikipedia.org
+@chrome @clean @firefox @phantomjs
 Feature: Main Page View History Links
 
   Background:
@@ -16,4 +16,4 @@ Feature: Main Page View History Links
       And I should see a link for Special pages
       And I should see a link for Printable version
       And I should see a link for Permanent link
-      And I should see a link for Page information
\ No newline at end of file
+      And I should see a link for Page information
index 1a958bb..9e3abfd 100644 (file)
@@ -9,7 +9,7 @@
 # qa-browsertests top-level directory and at
 # https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
 #
-@chrome @clean @en.wikipedia.beta.wmflabs.org @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @login @phantomjs @test2.wikipedia.org
+@chrome @clean @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @login @phantomjs
 Feature: Preferences
 
   Scenario: Preferences Appearance
index e7b64cd..c24e386 100644 (file)
@@ -16,7 +16,6 @@ class PreferencesAppearancePage
   page_url URL.url("Special:Preferences#mw-prefsection-rendering")
 
   checkbox(:auto_number_check, id: "mw-input-wpnumberheadings")
-  checkbox(:collapse_sidebar_vector_check, id: "mw-input-wpvector-collapsiblenav")
   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")
index 7b42639..ba61ebd 100644 (file)
@@ -1,4 +1,4 @@
-@chrome @clean @en.wikipedia.beta.wmflabs.org @firefox @phantomjs @test2.wikipedia.org
+@chrome @clean @firefox @phantomjs
 Feature: View History
 
   Scenario: Edit page and view history
@@ -8,4 +8,4 @@ Feature: View History
       And I save the edit
       And the edited page content should contain "Edited and a random string"
       And I click View History
-    Then I should see a link to a previous version of the page
\ No newline at end of file
+    Then I should see a link to a previous version of the page
index 59c18a8..c011a68 100644 (file)
@@ -44,12 +44,13 @@ module.exports = function ( grunt ) {
                jsonlint: {
                        all: [
                                '.jscsrc',
-                               '{languages,languages,maintenance,resources}/**/*.json',
+                               '{languages,maintenance,resources}/**/*.json',
                                'tests/frontend/package.json'
                        ]
                },
                banana: {
                        core: 'languages/i18n/',
+                       api: 'includes/api/i18n/',
                        installer: 'includes/installer/i18n/'
                },
                watch: {
index 386f488..7913363 100644 (file)
@@ -8,7 +8,7 @@
     "grunt": "0.4.2",
     "grunt-contrib-jshint": "0.10.0",
     "grunt-contrib-watch": "0.6.1",
-    "grunt-banana-checker": "0.1.0",
+    "grunt-banana-checker": "0.2.0",
     "grunt-jscs": "0.6.1",
     "grunt-jsonlint": "1.0.4"
   }
index a342fec..529ab82 100644 (file)
@@ -332,6 +332,7 @@ class ParserTest {
         * Remove last character if it is a newline
         * @group utility
         * @param string $s
+        * @return string
         */
        public static function chomp( $s ) {
                if ( substr( $s, -1 ) === "\n" ) {
@@ -416,6 +417,7 @@ class ParserTest {
        /**
         * Get an input dictionary from a set of parser test files
         * @param array $filenames
+        * @return string
         */
        function getFuzzInput( $filenames ) {
                $dict = '';
@@ -438,6 +440,7 @@ class ParserTest {
 
        /**
         * Get a memory usage breakdown
+        * @return array
         */
        function getMemoryBreakdown() {
                $memStats = array();
@@ -625,7 +628,7 @@ class ParserTest {
                                        return $this->showSkipped();
                                }
                                $out = MWTidy::tidy( $out );
-                               $out = preg_replace( '/\s+$/', '', $out);
+                               $out = preg_replace( '/\s+$/', '', $out );
                        }
 
                        if ( isset( $opts['showtitle'] ) ) {
@@ -663,6 +666,7 @@ class ParserTest {
        /**
         * Refactored in 1.22 to use ParserTestResult
         * @param ParserTestResult $testResult
+        * @return bool
         */
        function showTestResult( ParserTestResult $testResult ) {
                if ( $testResult->isSuccess() ) {
@@ -679,6 +683,7 @@ class ParserTest {
         * @param string $key Name of option val to retrieve
         * @param array $opts Options array to look in
         * @param mixed $default Default value returned if not found
+        * @return mixed
         */
        private static function getOptionValue( $key, $opts, $default ) {
                $key = strtolower( $key );
@@ -782,6 +787,7 @@ class ParserTest {
         * Ideally this should replace the global configuration entirely.
         * @param string $opts
         * @param string $config
+        * @return RequestContext
         */
        private function setupGlobals( $opts = '', $config = '' ) {
                global $IP;
@@ -929,12 +935,13 @@ class ParserTest {
        /**
         * List of temporary tables to create, without prefix.
         * Some of these probably aren't necessary.
+        * @return array
         */
        private function listTables() {
                $tables = array( 'user', 'user_properties', 'user_former_groups', 'page', 'page_restrictions',
                        'protected_titles', 'revision', 'text', 'pagelinks', 'imagelinks',
                        'categorylinks', 'templatelinks', 'externallinks', 'langlinks', 'iwlinks',
-                       'site_stats', 'hitcounter', 'ipblocks', 'image', 'oldimage',
+                       'site_stats', 'ipblocks', 'image', 'oldimage',
                        'recentchanges', 'watchlist', 'interwiki', 'logging',
                        'querycache', 'objectcache', 'job', 'l10n_cache', 'redirect', 'querycachetwo',
                        'archive', 'user_groups', 'page_props', 'category', 'msg_resource', 'msg_resource_links'
index e164b12..8dfb4dd 100644 (file)
@@ -155,6 +155,39 @@ Template:OpenTable
 {|
 !!endarticle
 
+!!article
+Template:EmptyLITest
+!!text
+*a
+*
+*
+*b
+!!endarticle
+
+!!article
+Template:EmptyTRTest
+!!text
+{|
+|-
+|-
+|foo
+|-
+|-
+|bar
+|}
+!!endarticle
+
+!!article
+Template:EmptyTRWithHTMLAttrTest
+!!text
+<table>
+<tr align="center"></tr>
+<tr><td>foo</td></tr>
+<tr align="center"></tr>
+<tr><td>bar</td></tr>
+</table>
+!!endarticle
+
 ###
 ### Basic tests
 ###
@@ -1328,8 +1361,7 @@ parsoid
 !! wikitext
 {{echo|&ndash;}}
 !! html
-<p><span typeof="mw:Transclusion mw:Entity" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&amp;ndash;"}},"i":0}}]}'>&ndash;</span>
-</p>
+<p><span typeof="mw:Transclusion mw:Entity" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&amp;ndash;"}},"i":0}}]}'>&ndash;</span></p>
 !! end
 
 !! test
@@ -1488,6 +1520,19 @@ Comment semantics: unclosed comment at end
 
 !! end
 
+# Bug 58184: document parsoid's behaviour
+!! test
+Suppress comment closing tag in lenient browsers
+!! options
+parsoid=wt2html,html2html
+!! wikitext
+<!-- Browsers--!> think this is closed -->
+!! html/php
+
+!! html/parsoid
+<!-- Browsers--¡> think this is closed -->
+!! end
+
 !! test
 Comment in template title
 !! wikitext
@@ -1649,6 +1694,11 @@ x <div>foo</div> z
 <p>z</p>
 !! end
 
+# Tidy strips out the empty <div> tags. Parsoid doesn't.
+# So, we have a separate section for Parsoid. We don't want
+# to mimic this stripping behavior in Parsoid. It affects
+# editing experience and also requires us to maintain additional
+# info for RT-ing.
 !! test
 Empty lines between lines with block tags
 !! wikitext
@@ -1687,6 +1737,19 @@ b
 <p>d</p>
 <p><br /></p>
 <div>e</div>
+!! html/parsoid
+<div data-parsoid='{"stx":"html"}'></div>
+
+<p><br /></p>
+<div data-parsoid='{"stx":"html"}'></div><p>a</p>
+
+<p>b</p>
+<div data-parsoid='{"stx":"html"}'>a</div><p>b</p>
+
+<div data-parsoid='{"stx":"html"}'>b</div><p>d</p>
+
+<p><br /></p>
+<div data-parsoid='{"stx":"html"}'>e</div>
 !! end
 
 ## PHP parser emits output which is broken
@@ -1709,6 +1772,22 @@ b</div>
 <p>b</p>
 !! end
 
+## SSS FIXME: I can come up with other scenarios where this doesn't work because
+## of eager output of buffered tokens in the p-wrapper. But, I'm going to ignore
+## them for now.
+!! test
+P-wrapping should leave sol-transparent tags outside p-tags where possible
+!! options
+parsoid=wt2html
+!! wikitext
+a [[Category:A1]] [[Category:A2]]
+[[Category:A3]]
+[[Category:A4]]
+!! html/parsoid
+<p>a</p>
+<link href="Category:A1"/> <link href="Category:A2"/> <link href="Category:A3"/> <link href="Category:A4"/>
+!! end
+
 ###
 ### Preformatted text
 ###
@@ -1966,8 +2045,11 @@ Entities inside <pre>
 </p>
 !! end
 
+# Parsoid doesn't strip empty tags, like Tidy does.
 !! test
 Empty pre; pre inside other HTML tags (bug 54946)
+!! options
+parsoid=wt2html,wt2wt
 !! wikitext
 a
 
@@ -1975,7 +2057,7 @@ a
 foo
 </pre></div>
 <pre></pre>
-!! html
+!! html/php
 <p>a
 </p>
 <div><pre>
@@ -1983,12 +2065,18 @@ foo
 </pre></div>
 <pre></pre>
 
-!! html+tidy
+!! html/php+tidy
 <p>a</p>
 <div>
 <pre>
 foo
 </pre></div>
+!! html/parsoid
+<p>a</p>
+
+<div><pre>foo
+</pre></div>
+<pre></pre>
 !! end
 
 !! test
@@ -2156,10 +2244,10 @@ parsoid=wt2html
 <table><pre></pre></table>
 
 !! html/parsoid
-<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre &lt;pre>x&lt;/pre>"}},"i":0}}]}'>&lt;pre </span>
-<pre>x</pre>
+<p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre &lt;pre>x&lt;/pre>"}},"i":0}}]}'>&lt;pre </p><pre>x</pre>
+
+<p>&lt;pre </p>
 
-<span>&lt;pre </span>
 <table></table>
 !! end
 
@@ -2559,12 +2647,8 @@ c
 
 !! html/parsoid
 <pre>a</pre>
-<table>
-<tbody>
-<tr>
-<td> b</td></tr>
+ <table>
+ <tbody><tr><td> b</td></tr>
  </tbody></table>
 !!end
 
@@ -2613,6 +2697,12 @@ a
  c <blockquote> foo </blockquote>
 <pre><span> foo </span>
 </pre>
+!! html/parsoid
+ <p>a </p><p data-parsoid='{"stx":"html"}'> foo </p>
+ <p>b </p><div data-parsoid='{"stx":"html"}'> foo </div>
+ <p>c </p><blockquote data-parsoid='{"stx":"html"}'> foo </blockquote>
+<pre><span> foo </span>
+</pre>
 !! html+tidy
 <p>a</p>
 <p>foo</p>
@@ -2637,6 +2727,9 @@ a
 </pre>
  b <div> foo </div>
 
+!! html/parsoid
+<pre>a <span data-parsoid='{"stx":"html"}'>foo</span></pre>
+ b <div data-parsoid='{"stx":"html"}'> foo </div>
 !! html+tidy
 <pre>
 a <span>foo</span>
@@ -2878,8 +2971,7 @@ parsoid=wt2html,wt2wt
 {{echo| [[Category:foo]]}} <!-- No pre-wrapping -->
 !! html
  <link rel="mw:PageProp/Category" href="./Category:Foo"> <!-- No pre-wrapping -->
-<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":" [[Category:foo]]"}},"i":0}}]}'> </span>
-<link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1"> <!-- No pre-wrapping -->
+<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":" [[Category:foo]]"}},"i":0}}]}'> </span><link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1"> <!-- No pre-wrapping -->
 !! end
 
 !! test
@@ -2892,7 +2984,6 @@ parsoid=wt2html,wt2wt
 !! html
 <pre>
 <link rel="mw:PageProp/Category" href="./Category:Foo"> a
-
 <link rel="mw:PageProp/Category" href="./Category:Foo"> <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b"}},"i":0}}]}'>b</span></pre>
 !! end
 
@@ -4004,8 +4095,8 @@ External links: with no contents
 </p>
 !! html/parsoid
 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo"></a></p>
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo">Bar</a></p>
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo"><span>Bar</span></a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" title="wikipedia:Foo">Bar</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" title="wikipedia:Foo"><span>Bar</span></a></p>
 !! end
 
 !! test
@@ -4751,7 +4842,7 @@ Parenthesis in external links, w/ transclusion or comment
 </p><p>(<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>)
 </p>
 !! html/parsoid
-<p>(<a data-mw='{"attribs":[[{"txt":"href"},{"html":"http://example.com/&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" 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;hi&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" 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;:[20,31,null,null]}\">hi&lt;/span>"}]]}' typeof="mw:ExpandedAttrs" about="#mwt2" rel="mw:ExtLink" href="http://example.com/hi" data-parsoid='{"stx":"url","a":{"href":"http://example.com/hi"},"sa":{"href":"http://example.com/{{echo|hi}}"}}'>http://example.com/hi</a>)</p>
+<p>(<a typeof="mw:ExpandedAttrs" about="#mwt2" rel="mw:ExtLink" href="http://example.com/hi" data-parsoid='{"stx":"url","a":{"href":"http://example.com/hi"},"sa":{"href":"http://example.com/{{echo|hi}}"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":"http://example.com/&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;:[20,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;hi&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">hi&lt;/span>"}]]}'>http://example.com/hi</a>)</p>
 
 <p>(<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url","a":{"href":"http://example.com"},"sa":{"href":"http://example.com&lt;!-- hi -->"}}'>http://example.com</a>)</p>
 !! end
@@ -5129,8 +5220,8 @@ Accept "!!" in table data
 </td></tr></table>
 
 !! html/parsoid
-<table data-parsoid='{}'>
-<tbody data-parsoid='{}'><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'> Foo!! </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'></td></tr>
+<table>
+<tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'> Foo!! </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'></td></tr>
 </tbody></table>
 !! end
 
@@ -5525,6 +5616,29 @@ Table-cell after a comment-only-empty-line
 
 !! end
 
+!! test
+Build table with {{!}}
+!! wikitext
+{{{!}} class="wikitable"
+! header
+! second header
+{{!}}- style="color:red;"
+{{!}} data {{!}}{{!}} style="color:red;" {{!}} second data
+{{!}}}
+!! html
+<table class="wikitable">
+<tr>
+<th> header
+</th>
+<th> second header
+</th></tr>
+<tr style="color:red;">
+<td> data </td>
+<td style="color:red;"> second data
+</td></tr></table>
+
+!! end
+
 # The expected HTML structure in this test is debatable. The PHP parser does
 # not parse this kind of table at all. The main focus for Parsoid is on
 # round-tripping, so this output is ok for now. TODO: revisit!
@@ -5551,7 +5665,7 @@ Wikitext table with html-syntax row
 !! test
 Implicit <td> after a |-
 !! options
-parsoid=wt2html,wt2wt
+parsoid=wt2html,html2html
 !! wikitext
 {|
 |-
@@ -5575,7 +5689,7 @@ a
 !! test
 <pre> tags should be recognized in an explicit <td> context, but not in an implicit <td> context
 !! options
-parsoid=wt2html,wt2wt
+parsoid=wt2html,html2html
 !! wikitext
 {|
 |-
 !! end
 
 # PHP + Tidy strips the list out of the table; Parsoid wraps it.
+# Parsoid generates the missing <td>, so wt2wt won't succeed.
 !! test
 Lists should be recognized in an implicit <td> context
 !! options
-parsoid=wt2html,wt2wt
+parsoid=wt2html,html2html
 !! wikitext
 {|
 |-
@@ -5656,14 +5771,19 @@ parsoid=wt2html,wt2wt
 {|
 |baz
 |}<b>quux</b>
-!! html
-<table><tbody>
+!! html+tidy
+<table>
 <tr>
-<td>foo</td></tr></tbody></table> bar
+<td>foo</td>
+</tr>
+</table>
+<p>bar</p>
 <table>
-<tbody>
 <tr>
-<td>baz</td></tr></tbody></table><b>quux</b>
+<td>baz</td>
+</tr>
+</table>
+<p><b>quux</b></p>
 !! end
 
 !! test
@@ -6460,7 +6580,7 @@ title=[[User:test/123]]
 <p><a href="#a">b</a>
 </p>
 !! html/parsoid
-<p data-parsoid='{}'><a rel="mw:WikiLink" href="../User:Test/123#a" data-parsoid='{"stx":"piped","a":{"href":"../User:Test/123#a"},"sa":{"href":"#a"}}'>b</a></p>
+<p><a rel="mw:WikiLink" href="../User:Test/123#a" data-parsoid='{"stx":"piped","a":{"href":"../User:Test/123#a"},"sa":{"href":"#a"}}'>b</a></p>
 !! end
 
 !! test
@@ -6480,7 +6600,7 @@ parsoid
 !! wikitext
 {{echo|Some [[Fool]]}}s
 !! html
-<p data-parsoid='{}'><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]"}},"i":0}},"s"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some </span><a rel="mw:WikiLink" href="./Fool" title="Fool" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a></p>
+<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]"}},"i":0}},"s"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some </span><a rel="mw:WikiLink" href="./Fool" title="Fool" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a></p>
 !! end
 
 !! test
@@ -6490,7 +6610,7 @@ parsoid
 !! wikitext
 {{echo|Some [[Fool]]s are '''bold and foolish'''}}
 !! html
-<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]s are &#39;&#39;&#39;bold and foolish&#39;&#39;&#39;"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some <a rel="mw:WikiLink" href="./Fool" title="Fool" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a> are <b data-parsoid="{}">bold and foolish</b></p>
+<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]s are &#39;&#39;&#39;bold and foolish&#39;&#39;&#39;"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some <a rel="mw:WikiLink" href="./Fool" title="Fool" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a> are <b>bold and foolish</b></p>
 !! end
 
 !! article
@@ -6601,20 +6721,28 @@ Link with angle bracket after anchor
 
 !! test
 Inline interwiki link
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[MeatBall:SoftSecurity]]
-!! html
+!! html/php
 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity" class="extiw" title="meatball:SoftSecurity">MeatBall:SoftSecurity</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity" title="meatball:SoftSecurity">MeatBall:SoftSecurity</a></p>
 !! end
 
 !! test
 Inline interwiki link with empty title (bug 2372)
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[MeatBall:]]
-!! html
+!! html/php
 <p><a href="http://www.usemod.com/cgi-bin/mb.pl" class="extiw" title="meatball:">MeatBall:</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?" title="meatball:">MeatBall:</a></p>
 !! end
 
 !! test
@@ -6643,6 +6771,10 @@ Interwiki link with fragment (bug 2130)
 !! end
 
 # Ideally the wikipedia: prefix here should be proto-relative too
+# [CSA]: this is kind of a bogus test, as the PHP parser test doesn't
+# define the 'en' prefix, and originally the test used 'wikipedia',
+# which isn't a localinterwiki prefix hence the links to the 'en:Foo'
+# article.
 !! test
 Different interwiki prefixes mapping to the same URL
 !! wikitext
@@ -6660,19 +6792,19 @@ Different interwiki prefixes mapping to the same URL
 
 [[  wikiPEdia :Foo]]
 !! html/parsoid
-<p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}'>en:Foo</a></p>
+<p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}' title="en:Foo">en:Foo</a></p>
 
-<p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}'>Foo</a></p>
+<p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}' title="en:Foo">Foo</a></p>
 
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true}'>wikipedia:Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true}' title="wikipedia:Foo">wikipedia:Foo</a></p>
 
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":":wikipedia:Foo"},"isIW":true}'>Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":":wikipedia:Foo"},"isIW":true}' title="wikipedia:Foo">Foo</a></p>
 
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":"wikipedia:en:Foo"},"isIW":true}'>wikipedia:en:Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":"wikipedia:en:Foo"},"isIW":true}' title="wikipedia:en:Foo">wikipedia:en:Foo</a></p>
 
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":":wikipedia:en:Foo"},"isIW":true}'>wikipedia:en:Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":":wikipedia:en:Foo"},"isIW":true}' title="wikipedia:en:Foo">wikipedia:en:Foo</a></p>
 
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"  wikiPEdia :Foo"},"isIW":true}'>  wikiPEdia :Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"  wikiPEdia :Foo"},"isIW":true}' title="wikipedia:Foo">  wikiPEdia :Foo</a></p>
 !! end
 
 !! test
@@ -6684,60 +6816,97 @@ Interwiki links that cannot be represented in wiki syntax
 [http://de.wikipedia.org/wiki/Foo?action=history has query]
 [http://de.wikipedia.org/wiki/#foo is just fragment]
 
+!! html/php
+<p><a href="http://www.usemod.com/cgi-bin/mb.pl?ok" class="extiw" title="meatball:ok">meatball:ok</a>
+<a href="http://www.usemod.com/cgi-bin/mb.pl?ok#foo" class="extiw" title="meatball:ok">ok with fragment</a>
+<a href="http://www.usemod.com/cgi-bin/mb.pl?ok_as_well%3F" class="extiw" title="meatball:ok as well?">ok ending with ? mark</a>
+<a rel="nofollow" class="external text" href="http://de.wikipedia.org/wiki/Foo?action=history">has query</a>
+<a rel="nofollow" class="external text" href="http://de.wikipedia.org/wiki/#foo">is just fragment</a>
+</p>
 !! html/parsoid
-<p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok">meatball:ok</a>
-<a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok#foo">ok with fragment</a>
-<a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok_as_well?">ok ending with ? mark</a>
+<p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok" title="meatball:ok">meatball:ok</a>
+<a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok#foo" title="meatball:ok">ok with fragment</a>
+<a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok_as_well?" title="meatball:ok as well?">ok ending with ? mark</a>
 <a rel="mw:ExtLink" href="http://de.wikipedia.org/wiki/Foo?action=history">has query</a>
 <a rel="mw:ExtLink" href="http://de.wikipedia.org/wiki/#foo">is just fragment</a></p>
 !! end
 
 !! test
 Interwiki links: trail
-!! options
-parsoid
 !! wikitext
 [[wikipedia:Foo|Ba]]r
-!! html
-<p data-parsoid='{}'><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true,"tail":"r"}'>Bar</a></p>
+!! html/php
+<p><a href="http://en.wikipedia.org/wiki/Foo" class="extiw" title="wikipedia:Foo">Bar</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true,"tail":"r"}' title="wikipedia:Foo">Bar</a></p>
 !! end
 
 !! test
 Local interwiki link
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[local:Template:Foo]]
-!! html
+!! html/php
 <p><a href="/wiki/Template:Foo" title="Template:Foo">local:Template:Foo</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Template:Foo" title="Template:Foo">local:Template:Foo</a></p>
 !! end
 
+# Parsoid does not mark self-links, by design.
 !! test
 Local interwiki link: self-link to current page
 !! options
 title=[[Main Page]]
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[local:Main Page]]
-!! html
+!! html/php
 <p><strong class="selflink">local:Main Page</strong>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">local:Main Page</a></p>
 !! end
 
 !! test
 Local interwiki link: prefix only (bug 64167)
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[local:]]
-!! html
+!! html/php
 <p><a href="/wiki/Main_Page" title="Main Page">local:</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">local:</a></p>
 !! end
 
 !! test
 Local interwiki link: with additional interwiki prefix (bug 61357)
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[local:meatball:Hello]]
-!! html
+!! html/php
 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?Hello" class="extiw" title="meatball:Hello">local:meatball:Hello</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?Hello" title="meatball:Hello">local:meatball:Hello</a></p>
+!! end
+
+!! test
+Multiple local interwiki link prefixes
+!! wikitext
+[[local:local:local:local:mi:local:Foo]]
+!! options
+parsoid=wt2html,wt2wt,html2html
+!! html/php
+<p><a href="/wiki/Foo" title="Foo">local:local:local:local:mi:local:Foo</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo">local:local:local:local:mi:local:Foo</a></p>
 !! end
 
 ###
@@ -6754,12 +6923,14 @@ Blah blah blah
 <p>Blah blah blah
 </p>
 !! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
 !! end
 
 !! test
 Interlanguage link with spacing
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 Blah blah blah
 [[   zh  :    Chinese     ]]
@@ -6767,8 +6938,8 @@ Blah blah blah
 <p>Blah blah blah
 </p>
 !! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
 !! end
 
 !! test
@@ -6781,9 +6952,9 @@ Blah blah blah
 <p>Blah blah blah
 </p>
 !! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/Spanish"/>
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Spanish"/>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
 !! end
 
 !! test
@@ -6796,9 +6967,9 @@ Blah blah blah
 <p>Blah blah blah
 </p>
 !! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/Spanish" data-parsoid='{"stx":"simple","a":{"href":"//es.wikipedia.org/wiki/Spanish"},"sa":{"href":"   es :Spanish"}}'/>
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese" data-parsoid='{"stx":"simple","a":{"href":"//zh.wikipedia.org/wiki/Chinese"},"sa":{"href":" ZH :Chinese"}}'/>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Spanish" data-parsoid='{"stx":"simple","a":{"href":"http://es.wikipedia.org/wiki/Spanish"},"sa":{"href":"   es :Spanish"}}'/>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese" data-parsoid='{"stx":"simple","a":{"href":"http://zh.wikipedia.org/wiki/Chinese"},"sa":{"href":" ZH :Chinese"}}'/>
 !! end
 
 !! test
@@ -6812,8 +6983,8 @@ Blah blah blah
 <p>Blah blah blah
 </p>
 !! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
 !! end
 
 !! test
@@ -6828,9 +6999,9 @@ Blah blah blah
 <p>Blah blah blah
 </p>
 !! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/Spanish"/>
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Spanish"/>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
 !! end
 
 !! test
@@ -6842,8 +7013,8 @@ Blah blah blah
 <p>Blah blah blah
 </p>
 !! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" title="Multilingual" href="//wikisource.org/wiki/Article"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" title="Multilingual" href="http://wikisource.org/wiki/Article"/>
 !! end
 
 !! test
@@ -6872,68 +7043,102 @@ He&amp;nbsp;llo [[He&amp;nbsp;llo]]
 
 !! test
 Parsoid: handle constructor well
-!! options
-parsoid
 !! wikitext
 [[constructor]]
 
 [[constructor:foo]]
-!! html
+!! html/php
+<p><a href="/index.php?title=Constructor&amp;action=edit&amp;redlink=1" class="new" title="Constructor (page does not exist)">constructor</a>
+</p><p><a href="/index.php?title=Constructor:foo&amp;action=edit&amp;redlink=1" class="new" title="Constructor:foo (page does not exist)">constructor:foo</a>
+</p>
+!! html/parsoid
 <p><a rel="mw:WikiLink" href="./Constructor" title="Constructor" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Constructor&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor&quot;}}">constructor</a></p>
 
 <p><a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Foo&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor:foo&quot;}}">constructor:foo</a></p>
 !! end
 
+!! article
+ko:
+!! text
+Test.
+!! endarticle
+
+# Note that `ko` isn't a known interlanguage prefix
 !! test
 Parsoid: recognize interlanguage links without a target page
 !! options
-parsoid
+ill
 !! wikitext
+[[es:]]
+
 [[ko:]]
-!! html
-<p><link rel="mw:PageProp/Language" href="http://ko.wikipedia.org/wiki/"></p>
+!! html/php
+es:
+!! html/parsoid
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/"/>
+
+<p><a rel="mw:WikiLink" href="./Ko:" title="Ko:">ko:</a></p>
 !! end
 
+# Note that `ko` isn't a known interwiki prefix
 !! test
 Parsoid: recognize interwiki links without a target page
 !! options
-parsoid
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
+[[:es:]]
+
 [[:ko:]]
-!! html
-<p><a rel="mw:ExtLink" href="//ko.wikipedia.org/wiki/">ko:</a></p>
+!! html/php
+<p><a href="http://es.wikipedia.org/wiki/" class="extiw" title="es:">es:</a>
+</p><p><a href="/wiki/Ko:" title="Ko:">ko:</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/" title="es:">es:</a></p>
+<p><a rel="mw:WikiLink" href="./Ko:" title="Ko:">ko:</a></p>
 !! end
 
 !! test
-Parsoid: Bug #45209, handle interwiki links pointing to the current wiki as plain wiki links
-!! options
-parsoid
+Handle interwiki links pointing to the current wiki as plain wiki links (bug 45209)
 !! wikitext
-[[en:Foo]]
-!! html
-<p><a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"en:Foo"}}'>Foo</a></p>
+[[mi:Foo]]
+!! html/php
+<p><a href="/wiki/Foo" title="Foo">mi:Foo</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"mi:Foo"}}'>mi:Foo</a></p>
 !! end
 
 !! test
 Interlanguage link with preceding local interwiki link (bug 68085)
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 Blah blah blah
 [[local:es:Spanish]]
-!! html
+!! html/php
 <p>Blah blah blah
 <a href="http://es.wikipedia.org/wiki/Spanish" class="extiw" title="es:Spanish">local:es:Spanish</a>
 </p>
+!! html/parsoid
+<p>Blah blah blah
+<a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/Spanish" title="es:Spanish">local:es:Spanish</a></p>
 !! end
 
 !! test
 Looks like an interlanguage link, but is actually a local interwiki
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 Blah blah blah
 [[mi:Template:Foo]]
-!! html
+!! html/php
 <p>Blah blah blah
 <a href="/wiki/Template:Foo" title="Template:Foo">mi:Template:Foo</a>
 </p>
+!! html/parsoid
+<p>Blah blah blah
+<a rel="mw:WikiLink" href="Template:Foo" title="Template:Foo">mi:Template:Foo</a></p>
 !! end
 
 ###
@@ -6957,9 +7162,8 @@ parsoid=wt2html,wt2wt
 !! wikitext
 #REDIRECT [[Main_Page]]
 #REDIRECT [[<nowiki>[[Bar]]</nowiki>]]
-!! html
-<link rel="mw:PageProp/redirect" href="./Main_Page">
-<link rel="mw:PageProp/redirect" href="./%5B%5BBar%5D%5D">
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./Main_Page"><link rel="mw:PageProp/redirect" href="./%5B%5BBar%5D%5D">
 !! end
 
 !! test
@@ -7225,11 +7429,12 @@ Horizontal ruler (should it add that extra space?)
 <hr >
 foo <hr
 > bar
-!! html
+!! html+tidy
 <hr />
 <hr />
-foo <hr /> bar
-
+<p>foo</p>
+<hr />
+<p>bar</p>
 !! end
 
 !! test
@@ -7695,6 +7900,8 @@ Unbalanced closing non-block tags don't break a list
 !! test
 Unclosed formatting tags that straddle lists are closed and reopened
 (php parser relies on Tidy to fix up)
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 # <s> a
 # b </s>
@@ -7704,12 +7911,8 @@ Unclosed formatting tags that straddle lists are closed and reopened
 <li><s>b</s></li>
 </ol>
 !! html/parsoid
-<ol>
-<li> <s> a </s>
-</li>
-<li> <s> b </s>
-</li>
-</ol>
+<ol><li> <s> a</s></li>
+<li><s> b </s></li></ol>
 !! end
 
 # Parsoid fails this test, but it might be tricky to support properly.
@@ -9214,19 +9417,15 @@ some
 <h3><span class="mw-headline" id="here">here</span></h3>
 
 !! html/parsoid
-<!-- comment --><meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"&lt;noinclude>"}'/><!-- comment --><meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/><!-- comment -->
-<h2 data-parsoid='{}'> hu </h2>
+<!-- comment --><meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"&lt;noinclude>"}'/><!-- comment --><meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/><!-- comment --><h2> hu </h2>
 
 <meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"&lt;noinclude>"}'/>
+<p>some</p>
+<meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/><ul><li> stuff</li>
+<li> here</li></ul>
 
-<p data-parsoid='{}'>some</p>
-<meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/>
-<ul data-parsoid='{}'>
-<li data-parsoid='{}'> stuff</li>
-
-<li data-parsoid='{}'> here</li></ul>
+<meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"&lt;includeonly>can have stuff&lt;/includeonly>"}'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":""}'/><h3> here </h3>
 
-<h3 data-parsoid='{}'> here </h3>
 !! end
 
 # TODO: test with DOM fragment reuse!
@@ -9247,25 +9446,17 @@ c}}d
 
 b}}
 !! html
-a<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b
-<table></table>c"}},"i":0}}]}'>b</span>
-<table about="#mwt1"></table><span about="#mwt1">c</span>d
-
-
-<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b\n<table></table>\nc"}},"i":0}},"d"]}'>ab</p><span about="#mwt2">
-</span>
-<table about="#mwt2"></table><span about="#mwt2">
-</span>
-<p about="#mwt2">cd</p>
+<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b&lt;table>&lt;/table>c"}},"i":0}},"d"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>ab</p><table about="#mwt1" data-parsoid='{"stx":"html"}'></table><p about="#mwt1">cd</p>
 
+<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b\n&lt;table>&lt;/table>\nc"}},"i":0}},"d"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>ab</p><span about="#mwt2">
+</span><table about="#mwt2" data-parsoid='{"stx":"html"}'></table><span about="#mwt2">
+</span><p about="#mwt2">cd</p>
 
-<p about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n\n<table></table>\n\nb"}},"i":0}}]}'>a</p><span about="#mwt3">
+<p about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n\n&lt;table>&lt;/table>\n\nb"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>a</p><span about="#mwt3">
 
-</span>
-<table about="#mwt3"></table><span about="#mwt3">
+</span><table about="#mwt3" data-parsoid='{"stx":"html"}'></table><span about="#mwt3">
 
-</span>
-<p about="#mwt3">b</p>
+</span><p about="#mwt3">b</p>
 !! end
 
 !! test
@@ -9382,11 +9573,9 @@ parsoid=wt2html,wt2wt
 |foo
 |}
 !!html/parsoid
-<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":""}},"i":0}}]}'></span>
-<table width="100%">
-<tbody>
-<tr>
-<td>foo</td></tr></tbody></table>
+<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":""}},"i":0}}]}'></span><table width="100%">
+<tbody><tr><td>foo</td></tr>
+</tbody></table>
 !!end
 
 !!test
@@ -9569,7 +9758,7 @@ Templates: Correctly encapsulate templates producing </p> tag without a correspo
 b</p>}}
 !! html/parsoid
 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\nb&lt;/p>"}},"i":0}}]}'>a
-b</p><p></p>
+b</p>
 !!end
 
 !!test
@@ -10818,8 +11007,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" height="220" width="1941"></a></span></p>
 !! end
 
 !! test
@@ -10830,8 +11018,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" height="220" width="1941"></a></span></p>
 !! end
 
 !! test
@@ -10902,9 +11089,9 @@ 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"}],"dsr":[0,59,2,2]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"dsr":[2,null,null,null]}'><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 data-parsoid='{"dsr":[null,57,null,null]}'>Caption <a rel="mw:WikiLink" href="./Link1" title="Link1" data-parsoid='{"stx":"simple","a":{"href":"./Link1"},"sa":{"href":"Link1"},"dsr":[32,41,2,2]}'>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" 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"},"dsr":[47,56,2,2]}'>Link2</a>
+<a rel="mw:WikiLink" href="./Link2" title="Link2" data-parsoid='{"stx":"simple","a":{"href":"./Link2"},"sa":{"href":"Link2"}}'>Link2</a>
 </figcaption></figure>
 !! end
 
@@ -10938,7 +11125,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" data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" 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}}]}\" 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]}\">137px&lt;/span>"}]]}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/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/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
 !! end
 
 !! test
@@ -10949,7 +11136,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" data-mw='{"attribs":[["thumbnail",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" 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}}]}\" 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]}\">thumb&lt;/span>"}],["width",{"html":"&lt;span about=\"#mwt2\" typeof=\"mw:Transclusion\" 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}}]}\" 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]}\">137px&lt;/span>"}]]}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/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/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
 !! end
 
 !! test
@@ -10960,7 +11147,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-mw='{"attribs":[["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" 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}}]}\" 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]}\">50px&lt;/span>"}]]}' data-parsoid='{"optList":[{"ck":"width","ak":"{{echo|50px}}"}]}'><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 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>
 !! end
 
 ## Parsoid does not provide editing support for images where templates produce multiple image attributes.
@@ -10976,7 +11163,6 @@ Image with multiple attributes from the same template
 <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>
 !! end
 
-# Parsoid's output here is broken (incorrect p-wrapping); see bug 64901.
 !! test
 Image with link tails
 !! options
@@ -11006,8 +11192,8 @@ thumbsize=220
 <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>
-123<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>456
-123<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>456
+<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>
 !! end
 
 !! test
@@ -11079,7 +11265,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" 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>
 !! end
 
 !! test
@@ -11360,7 +11546,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" 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>
 !! end
 
 !! test
@@ -11377,7 +11565,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" 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>
 !! end
 
 ###################
@@ -11504,7 +11694,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" 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>
 !! end
 
 ###################
@@ -11863,7 +12056,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" 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>
 !! end
 
 !! article
@@ -11904,12 +12099,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/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50"></a></span></p>
 !! end
 
 !! test
@@ -11920,12 +12110,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/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50"></a></span></p>
 !! end
 
 !! test
@@ -11945,12 +12130,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/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50"></a></span></p>
 !! end
 
 !! test
@@ -11974,12 +12154,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/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="25" width="220" /></a><figcaption>caption content</figcaption></figure>
 !! end
 
 !! test
@@ -11996,12 +12171,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/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" /></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -12021,12 +12191,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" height="220" width="1941" /></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -12037,12 +12202,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" height="220" width="1941" /></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -12058,10 +12218,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" height="220" width="1941"></a></span></p>
 !! end
 
 !! test
@@ -12250,8 +12407,28 @@ Render invalid page names as plain text (bug 51090)
 [[foo&lt;bar]]
 </p>
 !!html/parsoid
-<p>[[./../foo|bar]][[foo�|bar]][[foo/.|bar]][[foo/..|bar]][[foo~~~bar]][[foo>bar]][[foo[bar]][[.]][[..]][[foo././bar]]</p>
-<p>[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"./../foo"}},"i":0}}]}'>./../foo</span>|bar]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo/."}},"i":0}}]}'>foo/.</span>|bar]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo/.."}},"i":0}}]}'>foo/..</span>|bar]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo~~~~bar"}},"i":0}}]}'>foo~~~~bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo>bar"}},"i":0}}]}'>foo>bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo././bar"}},"i":0}}]}'>foo././bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo{bar"}},"i":0}}]}'>foo{bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo}bar"}},"i":0}}]}'>foo}bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo[bar"}},"i":0}}]}'>foo[bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo]bar"}},"i":0}}]}'>foo]bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo&lt;bar"}},"i":0}}]}'>foo&lt;bar</span>]]</p>
+<p>[[./../foo|bar]]
+[[foo�|bar]]
+[[foo/.|bar]]
+[[foo/..|bar]]
+[[foo~~~bar]]
+[[foo>bar]]
+[[foo[bar]]
+[[.]]
+[[..]]
+[[foo././bar]]</p>
+
+<p>[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"./../foo"}},"i":0}}]}'>./../foo</span>|bar]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo/."}},"i":0}}]}'>foo/.</span>|bar]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo/.."}},"i":0}}]}'>foo/..</span>|bar]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo~~~~bar"}},"i":0}}]}'>foo~~~~bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo>bar"}},"i":0}}]}'>foo>bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo././bar"}},"i":0}}]}'>foo././bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo{bar"}},"i":0}}]}'>foo{bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo}bar"}},"i":0}}]}'>foo}bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo[bar"}},"i":0}}]}'>foo[bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo]bar"}},"i":0}}]}'>foo]bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo&lt;bar"}},"i":0}}]}'>foo&lt;bar</span>]]</p>
 !!end
 
 !! test
@@ -12491,7 +12668,17 @@ parsoid
 !! end
 
 !! test
-Parsoid: Defaultsort
+Normalize hrefs properly before testing for invalid link targets (bug 70894)
+!! options
+parsoid=html2wt
+!! html
+<link rel="mw:PageProp/Category" href="./Category:Toxine_bactérienne"/>
+!! wikitext
+[[Category:Toxine bactérienne]]
+!! end
+
+!! test
+Parsoid: Defaultsort
 !! options
 parsoid
 !! wikitext
@@ -12514,9 +12701,9 @@ ill
 !! html/php
 es:Alimento fr:Nourriture zh:食品
 !! html/parsoid
-<p><link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/Alimento"/>
-<link rel="mw:PageProp/Language" href="//fr.wikipedia.org/wiki/Nourriture"/>
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/食品"/></p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Alimento"/>
+<link rel="mw:PageProp/Language" href="http://fr.wikipedia.org/wiki/Nourriture"/>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/食品"/>
 !! end
 
 !! test
@@ -12531,10 +12718,10 @@ ill
 !! html/php
 es:1 fr:1
 !! html/parsoid
-<p><link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/1"/>
-<link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/2"/>
-<link rel="mw:PageProp/Language" href="//fr.wikipedia.org/wiki/1"/>
-<link rel="mw:PageProp/Language" href="//fr.wikipedia.org/wiki/2"/></p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/1"/>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/2"/>
+<link rel="mw:PageProp/Language" href="http://fr.wikipedia.org/wiki/1"/>
+<link rel="mw:PageProp/Language" href="http://fr.wikipedia.org/wiki/2"/>
 !! end
 
 ###
@@ -12938,6 +13125,75 @@ section 5
 </p>
 !! end
 
+!! test
+Header with space, plus and underscore as entity
+!! wikitext
+Id should not contain + for spaces
+
+== Space between Text ==
+section 1
+
+== Space-Entity&#32;between&#32;Text ==
+section 2
+
+== Plus+between+Text ==
+section 3
+
+== Plus-Entity&#43;between&#43;Text ==
+section 4
+
+== Underscore_between_Text ==
+section 5
+
+== Underscore-Entity&#95;between&#95;Text ==
+section 6
+
+[[#Space between Text]]
+[[#Space-Entity&#32;between&#32;Text]]
+[[#Plus+between+Text]]
+[[#Plus-Entity&#43;between&#43;Text]]
+[[#Underscore_between_Text]]
+[[#Underscore-Entity&#95;between&#95;Text]]
+!! html
+<p>Id should not contain + for spaces
+</p>
+<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="#Space_between_Text"><span class="tocnumber">1</span> <span class="toctext">Space between Text</span></a></li>
+<li class="toclevel-1 tocsection-2"><a href="#Space-Entity_between_Text"><span class="tocnumber">2</span> <span class="toctext">Space-Entity&#32;between&#32;Text</span></a></li>
+<li class="toclevel-1 tocsection-3"><a href="#Plus.2Bbetween.2BText"><span class="tocnumber">3</span> <span class="toctext">Plus+between+Text</span></a></li>
+<li class="toclevel-1 tocsection-4"><a href="#Plus-Entity.2Bbetween.2BText"><span class="tocnumber">4</span> <span class="toctext">Plus-Entity&#43;between&#43;Text</span></a></li>
+<li class="toclevel-1 tocsection-5"><a href="#Underscore_between_Text"><span class="tocnumber">5</span> <span class="toctext">Underscore_between_Text</span></a></li>
+<li class="toclevel-1 tocsection-6"><a href="#Underscore-Entity_between_Text"><span class="tocnumber">6</span> <span class="toctext">Underscore-Entity&#95;between&#95;Text</span></a></li>
+</ul>
+</div>
+
+<h2><span class="mw-headline" id="Space_between_Text">Space between 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: Space between Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<p>section 1
+</p>
+<h2><span class="mw-headline" id="Space-Entity_between_Text">Space-Entity&#32;between&#32;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: Space-Entity between Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<p>section 2
+</p>
+<h2><span class="mw-headline" id="Plus.2Bbetween.2BText">Plus+between+Text</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: Plus+between+Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<p>section 3
+</p>
+<h2><span class="mw-headline" id="Plus-Entity.2Bbetween.2BText">Plus-Entity&#43;between&#43;Text</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: Plus-Entity+between+Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<p>section 4
+</p>
+<h2><span class="mw-headline" id="Underscore_between_Text">Underscore_between_Text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Underscore between Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<p>section 5
+</p>
+<h2><span class="mw-headline" id="Underscore-Entity_between_Text">Underscore-Entity&#95;between&#95;Text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Underscore-Entity_between_Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<p>section 6
+</p><p><a href="#Space_between_Text">#Space between Text</a>
+<a href="#Space-Entity_between_Text">#Space-Entity&#32;between&#32;Text</a>
+<a href="#Plus.2Bbetween.2BText">#Plus+between+Text</a>
+<a href="#Plus-Entity.2Bbetween.2BText">#Plus-Entity&#43;between&#43;Text</a>
+<a href="#Underscore_between_Text">#Underscore_between_Text</a>
+<a href="#Underscore-Entity_between_Text">#Underscore-Entity&#95;between&#95;Text</a>
+</p>
+!! end
+
 !! test
 Headers with excess '=' characters
 (Are similar tests necessary beyond the 1st level?)
@@ -13145,15 +13401,14 @@ parsoid
 </tbody></table>
 !! end
 
-# The PHP parser escapes the opening brace to &#123; for some reason, so
-# disabled this test for it.
 !! test
 div with braces in attribute value
-!! options
-parsoid
 !! wikitext
 <div title="{}">Foo</div>
-!! html
+!! html/php
+<div title="&#123;}">Foo</div>
+
+!! html/parsoid
 <div title="{}">Foo</div>
 !! end
 
@@ -13162,17 +13417,19 @@ parsoid
 # 'div with empty attribute value, space before equals'), but strips the
 # attribute completely if the space is missing. We hope that not much content
 # depends on this, so are implementing the behavior below in Parsoid for
-# consistencies' sake. Disabled for the PHP parser. 
+# consistencies' sake.
 # FIXME: fix this behavior in the PHP parser?
 !! test
 div with empty attribute value, no space before equals
 !! options
-parsoid
+parsoid=wt2html,html2html
 !! wikitext
 <div class=>HTML rocks</div>
-!! html
-<div class="">HTML rocks</div>
+!! html/php
+<div>HTML rocks</div>
 
+!! html/parsoid
+<div class="">HTML rocks</div>
 !! end
 
 !! test
@@ -13593,7 +13850,7 @@ Bug 2304: HTML attribute safety (dangerous template; 2309)
 <div title=""></div>
 
 !! html/parsoid
-<div title='" onmouseover="alert(document.cookie)' about="#mwt2" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"title"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;dangerous attribute&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Dangerous_attribute&amp;quot;},&amp;quot;params&amp;quot;:{},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[]],&amp;quot;dsr&amp;quot;:[12,35,null,null]}\">\" onmouseover=\"alert(document.cookie)&lt;/span>"}]]}' data-parsoid='{"stx":"html","a":{"title":"\" onmouseover=\"alert(document.cookie)"},"sa":{"title":"{{dangerous attribute}}"}}'></div>
+<div title='" onmouseover="alert(document.cookie)' about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"title":"\" onmouseover=\"alert(document.cookie)"},"sa":{"title":"{{dangerous attribute}}"}}' data-mw='{"attribs":[[{"txt":"title"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[]],&amp;quot;dsr&amp;quot;:[12,35,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;dangerous attribute&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Dangerous_attribute&amp;quot;},&amp;quot;params&amp;quot;:{},&amp;quot;i&amp;quot;:0}}]}\">\" onmouseover=\"alert(document.cookie)&lt;/span>"}]]}'></div>
 !! end
 
 !! test
@@ -13913,9 +14170,12 @@ Expansion of multi-line templates in attribute values (bug 6255 sanity check)
 !! wikitext
 <div style="background: 
 #00FF00">-</div>
-!! html
+!! html/php
 <div style="background: #00FF00">-</div>
 
+!! html/parsoid
+<div style="background: 
+#00FF00">-</div>
 !! end
 
 !! test
@@ -14153,6 +14413,10 @@ Nested template calls
 ###
 ### Sanitizer
 ###
+
+# HTML+Tidy effectively strips out the empty tags completely
+# But since Parsoid doesn't it wraps the <s></s> tags in p-tags
+# which Tidy would have done for the PHP parser had there been content inside it.
 !! test
 Sanitizer: Closing of open tags
 !! wikitext
@@ -14160,6 +14424,8 @@ Sanitizer: Closing of open tags
 !! html
 <s></s><table></table>
 
+!! html/parsoid
+<p><s></s></p><table></table>
 !! end
 
 !! test
@@ -14198,16 +14464,19 @@ Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id=
 </p>
 !! end
 
+# In HTML5, the restrictions are that id must contain at least one character,
+# and must not contain any space characters.
 !! test
 Sanitizer: Validating the contents of the id attribute (bug 4515)
 !! options
 disabled
 !! wikitext
-<br id=9 />
+<br id="" /><br id="a space" />
 !! html
-Something, but definitely not <br id="9" />...
+Something ...
 !! end
 
+# In HTML5, id must be unique amongst all the ids in the element's home subtree.
 !! test
 Sanitizer: Validating id attribute uniqueness (bug 4515, bug 6301)
 !! options
@@ -14313,29 +14582,36 @@ HTML bullet list, closed tags (bug 5497)
 <li>One</li>
 <li>Two</li>
 </ul>
-!! html
+!! html/php
 <ul>
 <li>One</li>
 <li>Two</li>
 </ul>
 
+!! html/parsoid
+<ul data-parsoid='{"stx":"html"}'>
+<li data-parsoid='{"stx":"html"}'>One</li>
+<li data-parsoid='{"stx":"html"}'>Two</li>
+</ul>
+
 !! end
 
 !! test
 HTML bullet list, unclosed tags (bug 5497)
-!! options
-disabled
 !! wikitext
 <ul>
 <li>One
 <li>Two
 </ul>
-!! html
+!! html/php+tidy
 <ul>
-<li>One
-</li>
-<li>Two
-</li>
+<li>One</li>
+<li>Two</li>
+</ul>
+!! html/parsoid
+<ul data-parsoid='{"stx":"html"}'>
+<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>One</li>
+<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>Two</li>
 </ul>
 
 !! end
@@ -14347,29 +14623,37 @@ HTML ordered list, closed tags (bug 5497)
 <li>One</li>
 <li>Two</li>
 </ol>
-!! html
+!! html/php
 <ol>
 <li>One</li>
 <li>Two</li>
 </ol>
 
+!! html/parsoid
+<ol data-parsoid='{"stx":"html"}'>
+<li data-parsoid='{"stx":"html"}'>One</li>
+<li data-parsoid='{"stx":"html"}'>Two</li>
+</ol>
+
 !! end
 
 !! test
 HTML ordered list, unclosed tags (bug 5497)
 !! options
-disabled
 !! wikitext
 <ol>
 <li>One
 <li>Two
 </ol>
-!! html
+!! html/php+tidy
 <ol>
-<li>One
-</li>
-<li>Two
-</li>
+<li>One</li>
+<li>Two</li>
+</ol>
+!! html/parsoid
+<ol data-parsoid='{"stx":"html"}'>
+<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>One</li>
+<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>Two</li>
 </ol>
 
 !! end
@@ -14401,8 +14685,6 @@ HTML nested bullet list, closed tags (bug 5497)
 
 !! test
 HTML nested bullet list, open tags (bug 5497)
-!! options
-disabled
 !! wikitext
 <ul>
 <li>One
@@ -14412,7 +14694,17 @@ disabled
 <li>Sub-two
 </ul>
 </ul>
-!! html
+!! html/php+tidy
+<ul>
+<li>One</li>
+<li>Two:
+<ul>
+<li>Sub-one</li>
+<li>Sub-two</li>
+</ul>
+</li>
+</ul>
+!! html/parsoid
 <ul>
 <li>One
 </li>
@@ -14455,8 +14747,6 @@ HTML nested ordered list, closed tags (bug 5497)
 
 !! test
 HTML nested ordered list, open tags (bug 5497)
-!! options
-disabled
 !! wikitext
 <ol>
 <li>One
@@ -14466,7 +14756,17 @@ disabled
 <li>Sub-two
 </ol>
 </ol>
-!! html
+!! html/php
+<ol>
+<li>One
+<li>Two:
+<ol>
+<li>Sub-one
+<li>Sub-two
+</ol>
+</ol>
+
+!! html/parsoid
 <ol>
 <li>One
 </li>
@@ -14742,7 +15042,7 @@ Fuzz testing: image with bogus manual thumbnail
 <div class="thumb tright"><div class="thumbinner" style="width:182px;">Error creating thumbnail:   <div class="thumbcaption"></div></div></div>
 
 !! html/parsoid
-<meta typeof="mw:Placeholder" data-parsoid='{"src":"[[Image:foobar.jpg|thumbnail= ]]","optList":[{"ck":"manualthumb","ak":"thumbnail= "}],"dsr":[0,32,null,null]}'/>
+<meta typeof="mw:Placeholder" data-parsoid='{"src":"[[Image:foobar.jpg|thumbnail= ]]","optList":[{"ck":"manualthumb","ak":"thumbnail= "}]}'/>
 !!end
 
 !! test
@@ -14820,15 +15120,19 @@ New wiki paragraph
 </p>
 !! end
 
+# FIXME: The current php output is documented
+# and desired output is the parsoid target.
 !! test
 Inline HTML vs wiki block nesting
-!! options
-disabled
 !! wikitext
 <b>Bold paragraph
 
 New wiki paragraph
-!! html
+!! html/php
+<p><b>Bold paragraph
+</p><p>New wiki paragraph</b>
+</p>
+!! html/parsoid
 <p><b>Bold paragraph</b>
 </p><p>New wiki paragraph
 </p>
@@ -15820,6 +16124,17 @@ Special:Search page linking.
 </p>
 !! end
 
+!! test
+{{!}} is a magic word
+!! wikitext
+{{!}} is a magic word there and {{!}} is still a magic word here
+!! html/php
+<p>| is a magic word there and | is still a magic word here
+</p>
+!! html/parsoid
+<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"!","href":"./Template:!"},"params":{},"i":0}}]}' data-parsoid='{"pi":[[]]}'>|</span> is a magic word there and <span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"!","href":"./Template:!"},"params":{},"i":0}}]}' data-parsoid='{"pi":[[]]}'>|</span> is still a magic word here</p>
+!! end
+
 !! test
 Say the magic word
 !! options
@@ -16324,35 +16639,16 @@ Another italics / bold test
 </pre>
 !!end
 
-# Note the results may be incorrect, as parserTest output included this:
-# XML error: Mismatched tag at byte 6120:
-# ...<dd> </dt></dl> </dd...
+# FIXME: The php output seems broken. It's interleaving some open/close tags.
 !! test
 dt/dd/dl test
-!! options
-disabled
 !! wikitext
 :;;;::
-!! html
-<dl>
-<dd><dl>
-<dt><dl>
-<dt><dl>
-<dt><dl>
-<dd><dl>
-<dd>
-</dd>
-</dl>
-</dd>
-</dl>
-</dt>
-</dl>
-</dt>
-</dl>
-</dt>
-</dl>
-</dd>
-</dl>
+!! html/php
+<dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd></dt></dl></dd></dl></dd></dl></dd></dl></dd></dl></dd></dl>
+
+!! html/parsoid
+<dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd></dd></dl></dd></dl></dt></dl></dt></dl></dt></dl></dd></dl>
 
 !!end
 
@@ -16495,7 +16791,7 @@ Definition list code coverage
 ; title   : def
 ; title : def
 ;title: def
-!! html
+!! html/php
 <dl><dt> title  &#160;</dt>
 <dd> def</dd>
 <dt> title&#160;</dt>
@@ -16503,6 +16799,10 @@ Definition list code coverage
 <dt>title</dt>
 <dd> def</dd></dl>
 
+!! html/parsoid
+<dl><dt> title  <span typeof="mw:Placeholder"> </span></dt><dd> def</dd>
+<dt> title<span typeof="mw:Placeholder"> </span></dt><dd> def</dd>
+<dt>title</dt><dd> def</dd></dl>
 !! end
 
 !! test
@@ -17185,45 +17485,51 @@ language=sr variant=sr-ec
 </p>
 !! end
 
-# This test is currently broken in the PHP parser (bug 52661)
+# FIXME: This test is currently broken in the PHP parser (bug 52661)
 !! test
 Don't break image parsing if language converter markup is in the caption.
 !! options
 language=sr
-disabled
 !! wikitext
 [[File:Foobar.jpg|-{R|caption}-]]
-!! html
+!! html/parsoid
 <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" /></a>
 </p>
 !! end
 
-# This test is currently broken in the PHP parser (bug 52661)
+# FIXME: This test is currently broken in the PHP parser (bug 52661)
 !! test
 Don't break list handling if language converter markup is in the item.
 !! options
 language=zh variant=zh-cn
-disabled
 !! wikitext
 ;-{zh-cn:AAA;zh-tw:BBB}-
-!! html
+!! html/php
+<dl><dt><span class="error">在手动语言转换规则中检测到错误</span></dd></dl>
+
+!! html/parsoid
 <dl><dt>AAA
 </dt></dl>
-
 !! end
 
-# This test is currently broken in the PHP parser (bug 52661)
+# FIXME: This test is currently broken in the PHP parser (bug 52661)
 !! test
 Don't break table handling if language converter markup is in the cell.
 !! options
 language=sr variant=sr-ec
-disabled
 !! wikitext
 {|
 |-
 | -{R|B}-
 |}
-!! html
+!! html/php
+<table>
+
+<tr>
+<td>Б}-
+</td></tr></table>
+
+!! html/parsoid
 <table>
 
 <tr>
@@ -17442,12 +17748,13 @@ Line two
 
 !! test
 Nesting tags, paragraphs on lines which begin with <div>
-!! options
-disabled
 !! wikitext
 <div></div><strong>A
 B</strong>
-!! html
+!! html/php+tidy
+<p><strong>A</strong></p>
+<p><strong>B</strong></p>
+!! html/parsoid
 <div></div>
 <p><strong>A
 B</strong>
@@ -17849,27 +18156,31 @@ comment
 <a href="/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1" class="new" title="ABC3D% ++ (page does not exist)">ABC3D% ++</a> <a href="/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1" class="new" title="ABC3D% ++ (page does not exist)">+%20</a>
 !! end
 
+# FIXME: Omitting the php sections here because of differences in the local and
+# jenkins output. But, more importantly, the Bad.jpg isn't being stripped,
+# which seems to be a problem with the testing infrastructure.
 !! test
 Bad images - basic functionality
-!! options
-disabled
 !! wikitext
 [[File:Bad.jpg]]
-!! html
+!! html/parsoid
+<meta typeof="mw:Placeholder" data-parsoid='{"src":"[[File:Bad.jpg]]","optList":[]}'/>
 !! end
 
+# FIXME: Same reasoning as above. The expected php is:
+#  <p>Foo bar
+#  </p><p>Bar foo
+#  </p>
 !! test
 Bad images - bug 16039: text after bad image disappears
-!! options
-disabled
 !! wikitext
 Foo bar
 [[File:Bad.jpg]]
 Bar foo
-!! html
+!! html/parsoid
 <p>Foo bar
-</p><p>Bar foo
-</p>
+<meta typeof="mw:Placeholder" data-parsoid='{"src":"[[File:Bad.jpg]]","optList":[]}'/>
+Bar foo</p>
 !! end
 
 !! test
@@ -18046,18 +18357,22 @@ preload
 
 !! test
 Play a bit with r67090 and bug 3158
-!! options
-disabled
 !! wikitext
 <div style="width:50% !important">&nbsp;</div>
 <div style="width:50%&nbsp;!important">&nbsp;</div>
 <div style="width:50%&#160;!important">&nbsp;</div>
 <div style="border : solid;">&nbsp;</div>
-!! html
-<div style="width:50% !important">&nbsp;</div>
-<div style="width:50% !important">&nbsp;</div>
-<div style="width:50% !important">&nbsp;</div>
-<div style="border&#160;: solid;">&nbsp;</div>
+!! html/php
+<div style="width:50% !important">&#160;</div>
+<div style="width:50% !important">&#160;</div>
+<div style="width:50% !important">&#160;</div>
+<div style="border&#160;: solid;">&#160;</div>
+
+!! html/parsoid
+<div style="width:50% !important" data-parsoid='{"stx":"html"}'><span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span></div>
+<div style="width:50% !important" data-parsoid='{"stx":"html","a":{"style":"width:50% !important"},"sa":{"style":"width:50%&amp;nbsp;!important"}}'><span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span></div>
+<div style="width:50% !important" data-parsoid='{"stx":"html","a":{"style":"width:50% !important"},"sa":{"style":"width:50%&amp;#160;!important"}}'><span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span></div>
+<div style="border : solid;" data-parsoid='{"stx":"html"}'><span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span></div>
 
 !! end
 
@@ -18766,13 +19081,13 @@ parsoid=wt2html,wt2wt
 #### Parsoid-specific functionality tests
 #### -----------------------------------------------------------------
 
-# Bug 63642: Formatting elt fixup is cleaned up.
+# Bug 63642/66749: Formatting elt fixup around images is cleaned up.
 # We know wt2wt will fail, but we expect selser to pass.
 # Due to the nature of our testing, wt2wt and selser tests will enter the
 # blacklist and we'll catch selser regressions based on changes to the
 # blacklist entries for selser tests.
 !! test
-Bad treebuilder fixup of formatting elt is cleaned up
+1. Bad treebuilder fixup of formatting elt is cleaned up
 !! options
 parsoid=wt2html,wt2wt
 !! wikitext
@@ -18785,12 +19100,28 @@ parsoid=wt2html,wt2wt
 !! html/parsoid
 <table>
 <tbody><tr><td>
-<p><small></small></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><figcaption><small>Test</small></figcaption></figure>
-<p></p></td></tr>
+<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>
+</small>
+</td></tr>
 </tbody></table>
 !! end
 
+!! test
+2. Bad treebuilder fixup of formatting elt is cleaned up
+!! options
+parsoid=wt2html,wt2wt
+!! wikitext
+'''foo[[File:Foobar.jpg|thumb|caption]]bar'''
+
+<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>
+<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>
+!! end
+
 #### ----------------------------------------------------------------
 #### Parsoid-only testing of Parsoid's impl of <ref> and <references>
 #### tags. Parsoid's output for these tags differs from that of the
@@ -18806,9 +19137,9 @@ A <ref>foo</ref>
 B <ref name="x">foo</ref>
 C <ref name="y" />
 !! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span>
-B <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}' id="cite_ref-x-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-2">[2]</a></span>
-C <span about="#mwt3" class="reference" data-mw='{"name":"ref","attrs":{"name":"y"}}' id="cite_ref-y-3-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-y-3">[3]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" 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>
+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>
 !!end
 
 !!test
@@ -18819,8 +19150,8 @@ parsoid
 A <ref name="x">foo</ref>
 B <ref name="x" />
 !! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}' id="cite_ref-x-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span>
-B <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"x"}}' id="cite_ref-x-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span></p>
+<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>
+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>
 !!end
 
 !!test
@@ -18832,20 +19163,20 @@ A <ref name="x">foo</ref>
 B <ref name=" x " />
 C <ref name= x  />
 !! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}' id="cite_ref-x-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span>
-B <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"x"}}' id="cite_ref-x-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span>
-C <span about="#mwt3" class="reference" data-mw='{"name":"ref","attrs":{"name":"x"}}' id="cite_ref-x-1-2" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span></p>
+<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>
+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>
 !!end
 
+# NOTE: constructor is a predefined property in JS and constructor as a ref-name can clash with it if not handled properly)
 !!test
 Ref: 4. 'constructor' should be accepted as a valid ref-name
-(NOTE: constructor is a predefined property in JS and constructor as a ref-name can clash with it if not handled properly)
 !!options
 parsoid
 !! wikitext
 A <ref name="constructor">foo</ref>
 !! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"constructor"}}' id="cite_ref-constructor-1-0" rel="dc:references" typeof="mw:Extension/ref"><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":{"html":"foo"},"attrs":{"name":"constructor"}}'><a href="#cite_note-constructor-1">[1]</a></span></p>
 !!end
 
 !!test
@@ -18859,9 +19190,9 @@ A <ref>
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" 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-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"transclusion\"}},\"i\":0}}]}&#39; data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[55,76,null,null]}&#39;>transclusion&lt;/span>\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" 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>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<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-0">↑</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>
 </ol>
@@ -18880,9 +19211,9 @@ A <ref>
 
 <references />
 !! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo\n bar\n baz\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" 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>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt3" data-mw='{"name":"references","attrs":{}}'>
+<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-0">↑</a></span> foo
  bar
  baz
@@ -18910,9 +19241,9 @@ booz
 
 <references />
 !! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo\n\nbar\n\n\nbaz\n\n\n\nbooz\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" 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>
 
-<ol about="#mwt2" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
+<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-0">↑</a></span> foo
 
 bar
@@ -18936,9 +19267,9 @@ A <ref> foo {{echo|</ref> B C}}
 
 <references />
 !! html
-<p>A <span class="reference" data-mw="{&quot;name&quot;:&quot;ref&quot;,&quot;body&quot;:{&quot;html&quot;:&quot;foo <span typeof=\&quot;mw:Nowiki\&quot; data-parsoid='{\&quot;src\&quot;:\&quot;{{\&quot;,\&quot;dsr\&quot;:[12,14,0,0]}'>{{</span>echo|&quot;},&quot;attrs&quot;:{}}" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B C<span typeof="mw:Nowiki">}}</span></p>
-<ol class="references" typeof="mw:Extension/references" data-mw="{&quot;name&quot;:&quot;references&quot;,&quot;attrs&quot;:{}}">
-<li id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo <span typeof="mw:Nowiki">{{</span>echo|</li>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" 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>
+<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-0">↑</a></span> foo <span typeof="mw:Nowiki">{{</span>echo|</li>
 </ol>
 !!end
 
@@ -18950,9 +19281,9 @@ parsoid
 A <ref> foo <!--</ref> B C
 <references />
 !! html
-<p>A <span class="reference" data-mw='{"name":"ref","body":{"html":"foo &lt;!---->"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B C</p>
-<ol class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
-<li id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo </li>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" 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>
+<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-0">↑</a></span> foo <!----></li>
 </ol>
 !!end
 
@@ -18965,11 +19296,11 @@ A <ref> <b> foo </ref> B C
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" 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":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref> &lt;b> foo &lt;/ref>"}'><a href="#cite_note-1">[1]</a></span> B C</p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" 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>
 
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-parsoid='{"src":"&lt;references />"}' data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> <b data-parsoid='{"stx":"html","autoInsertedEnd":true}'> foo </b></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-0">↑</a></span> <b data-parsoid='{"stx":"html","autoInsertedEnd":true}'> foo </b></li>
 </ol>
 !!end
 
@@ -18981,8 +19312,8 @@ parsoid
 A <ref>foo</ref> B
 C <ref>bar</ref> D
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo&lt;/ref>"}'><a href="#cite_note-1">[1]</a></span> B
-C <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>bar&lt;/ref>"}'><a href="#cite_note-2">[2]</a></span> D</p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" 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-0" 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>
 !!end
 
 !!test
 <p><!--the newline at the end of this line moves out of the p-tag-->a</p>
 
 
-<p>b<!--the newline at the end of this line stays inside the p-tag--> <span about="#mwt1" class="reference" data-mw='{"name":"ref","attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span>
-<span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[2]</a></span></p>
-
+<p>b<!--the newline at the end of this line stays inside the p-tag--> <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{}}'><a href="#cite_note-1">[1]</a></span>
+<span about="#mwt4" class="reference" id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{}}'><a href="#cite_note-2">[2]</a></span></p>
 
 <p>c</p>
 !!end
@@ -19016,8 +19346,8 @@ parsoid
 <ref>bar
 </ref> B
 !! html
-<p><span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> A
-<span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"bar\n"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[2]</a></span> B</p>
+<p><span about="#mwt2" class="reference" id="cite_ref-1-0" 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-0" 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>
 !!end
 
 !!test
@@ -19029,10 +19359,10 @@ parsoid
 
 <references />
 !! html
-<p><span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo &amp;lt;ref>bar&amp;lt;/ref> baz"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo &lt;ref>bar&lt;/ref> baz&lt;/ref>"}'><a href="#cite_note-1">[1]</a></span></p>
+<p><span about="#mwt2" class="reference" id="cite_ref-1-0" 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>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-parsoid='{"src":"&lt;references />"}' data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo &lt;ref>bar&lt;/ref> baz</li>
+<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-0">↑</a></span> foo &lt;ref>bar&lt;/ref> baz</li>
 </ol>
 !!end
 
@@ -19046,10 +19376,10 @@ B1 <ref name="b" /> B2 <ref name="b">bar</ref>
 
 <references />
 !! html
-<p>A1 <span about="#mwt3" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"a"}}' id="cite_ref-a-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-a-1">[1]</a></span> A2 <span about="#mwt4" class="reference" data-mw='{"name":"ref","attrs":{"name":"a"}}' id="cite_ref-a-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-a-1">[1]</a></span>
-B1 <span about="#mwt7" class="reference" data-mw='{"name":"ref","attrs":{"name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-b-2">[2]</a></span> B2 <span about="#mwt8" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}' id="cite_ref-b-2-1" rel="dc:references" typeof="mw:Extension/ref"><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":{"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>
 
-<ol about="#mwt10" class="references" typeof="mw:Extension/references" 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> 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>
 !!end
 
@@ -19063,10 +19393,10 @@ A <ref >foo</ref >
 
 <references />
 !! html
-<p>A <span class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" 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" data-mw='{"name":"references","attrs":{}}'>
-<li id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li></ol>
+<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-0">↑</a></span> foo</li></ol>
 !!end
 
 !!test
@@ -19089,10 +19419,10 @@ B <ref group="b">bar</ref>
 
 <references group="a" />
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"group":"a"}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[a 1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"group":"b"}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[b 1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" 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-0" 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>
 
-<ol about="#mwt6" class="references" typeof="mw:Extension/references" 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-0">↑</a></span> foo</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-0">↑</a></span> foo</li>
 </ol>
 !!end
 
@@ -19109,14 +19439,14 @@ B <ref>bar</ref>
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" 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 about="#mwt4" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</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-0">↑</a></span> foo</li>
 </ol>
 
-<p>B <span about="#mwt6" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[1]</a></span></p>
+<p>B <span about="#mwt6" class="reference" id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}'><a href="#cite_note-2">[1]</a></span></p>
 
-<ol about="#mwt8" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2-0">↑</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-0">↑</a></span> bar</li>
 </ol>
 !!end
 
@@ -19134,15 +19464,15 @@ C <ref>cfoo</ref>
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"afoo"},"attrs":{"group":"a"}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[a 1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bfoo"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"<ref>bfoo</ref>"}'><a href="#cite_note-2">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" 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-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"bfoo"},"attrs":{}}'><a href="#cite_note-2">[1]</a></span></p>
 
-<ol about="#mwt6" class="references" typeof="mw:Extension/references" 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-0">↑</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-0">↑</a></span> afoo</li>
 </ol>
 
-<p>C <span about="#mwt8" class="reference" data-mw='{"name":"ref","body":{"html":"cfoo"},"attrs":{}}' id="cite_ref-3-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-3">[2]</a></span></p>
+<p>C <span about="#mwt8" class="reference" id="cite_ref-3-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"cfoo"},"attrs":{}}'><a href="#cite_note-3">[2]</a></span></p>
 
-<ol about="#mwt10" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2-0">↑</a></span> bfoo</li><li about="#cite_note-3" id="cite_note-3"><span rel="mw:referencedBy"><a href="#cite_ref-3-0">↑</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-0">↑</a></span> bfoo</li><li about="#cite_note-3" id="cite_note-3"><span rel="mw:referencedBy"><a href="#cite_ref-3-0">↑</a></span> cfoo</li>
 </ol>
 !!end
 
@@ -19159,13 +19489,11 @@ B <ref name="b">bar</ref>
 This should just get lost.
 </references>
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"a"}}' id="cite_ref-a-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"a\" />"}'><a href="#cite_note-a-1">[1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"b\">bar&lt;/ref>"}'><a href="#cite_note-b-2">[2]</a></span></p>
+<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>
 
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-parsoid='{"src":"&lt;references>\n&lt;ref name=\"a\">foo&lt;/ref>\nThis should just get lost.\n&lt;/references>"}' 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\" data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"a\"}}&#39; rel=\"dc:references\" typeof=\"mw:Extension/ref\">&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" data-parsoid="{}"><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" data-parsoid="{}"><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;{\"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>
 !!end
 
@@ -19176,7 +19504,7 @@ parsoid
 !! wikitext
 <ref>Foo</ref> {{echo|<references />}}
 !! html
-<span about="#mwt3" class="reference" data-mw='{"name":"ref","body":{"html":"Foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> <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-0">↑</a></span> Foo</li></ol>
+<p><span about="#mwt3" class="reference" id="cite_ref-1-0" 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-0">↑</a></span> Foo</li></ol>
 !!end
 
 !! test
@@ -19193,12 +19521,12 @@ B <ref group="X" name="b" />
 <ref name="b">foo</ref>
 </references>
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo bar for a"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo bar for a&lt;/ref>"}'><a href="#cite_note-1" data-parsoid="{}">[1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","attrs":{"group":"X","name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref group=\"X\" name=\"b\" />"}'><a href="#cite_note-b-2" data-parsoid="{}">[X 1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" 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>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-parsoid='{"src":"&lt;references />"}' data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy" data-parsoid="{}"><a href="#cite_ref-1-0" data-parsoid="{}">↑</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-0">↑</a></span> foo bar for a</li></ol>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-parsoid='{"src":"&lt;references group=\"X\">\n&lt;ref name=\"b\">foo&lt;/ref>\n&lt;/references>","group":"X"}' data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"b\">foo&lt;/ref>","html":"\n&lt;span about=\"#mwt10\" class=\"reference\" data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"b\"}}&#39; rel=\"dc:references\" typeof=\"mw:Extension/ref\">&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" data-parsoid="{}"><span rel="mw:referencedBy" data-parsoid="{}"><a href="#cite_ref-b-2-0" data-parsoid="{}">↑</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;{\"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>
 !! end
 
 !! test
@@ -19208,7 +19536,7 @@ parsoid
 !! wikitext
 <ref name="test &amp; me">hi</ref>
 !! html
-<p data-parsoid='{}'><span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"hi"},"attrs":{"name":"test &amp; me"}}' id="cite_ref-test &amp; me-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"test &amp;amp; me\">hi&lt;/ref>"}'><a href="#cite_note-test &amp; me-1" data-parsoid="{}">[1]</a></span></p>
+<p><span about="#mwt2" class="reference" id="cite_ref-test &amp; me-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"test &amp;amp; me\">hi&lt;/ref>"}' data-mw='{"name":"ref","body":{"html":"hi"},"attrs":{"name":"test &amp; me"}}'><a href="#cite_note-test &amp; me-1">[1]</a></span></p>
 !! end
 
 # This test is wt2html only because we're permitting the serializer to produce
@@ -19222,11 +19550,11 @@ a<ref>foo</ref>
 
 <references>
 !! html
-<p data-parsoid='{}'>a<span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo&lt;/ref>"}'><a href="#cite_note-1" data-parsoid="{}">[1]</a></span></p>
+<p>a<span about="#mwt2" class="reference" id="cite_ref-1-0" 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" about="#mwt4" data-parsoid='{"src":"&lt;references>"}' data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy" data-parsoid="{}"><a href="#cite_ref-1-0" data-parsoid="{}">↑</a></span> foo</li></ol>
+<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-0">↑</a></span> foo</li></ol>
 !! end
 
 !! test
@@ -19240,6 +19568,69 @@ foo
 foo<ol class="references" typeof="mw:Extension/references" about="#mwt2" data-mw='{"name":"references","attrs":{}}'></ol>
 !! end
 
+#--------- Test stripping of empty nodes in template content ----------
+!!test
+Empty LI and TR nodes should be stripped from template content
+!!wikitext
+{{EmptyLITest}}
+{{EmptyTRTest}}
+!!html/parsoid
+<ul 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}}]}'>
+<tbody>
+<tr>
+<td>foo</td>
+</tr>
+<tr>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
+!!end
+
+!!test
+Empty LI and TR nodes should not be stripped from top-level content
+!!wikitext
+* a
+*
+* b
+{|
+|-
+|-
+|foo
+|}
+!!html/parsoid
+<ul>
+<li> a</li>
+<li></li>
+<li> b</li>
+</ul>
+<table>
+<tbody>
+<tr></tr>
+<tr>
+<td>foo</td>
+</tr>
+</tbody>
+</table>
+!!end
+
+!!test
+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}}]}'>
+<tr align="center"></tr>
+<tr><td>foo</td></tr>
+<tr align="center"></tr>
+<tr><td>bar</td></tr>
+</table>
+!!end
+
 #### ----------------------------------------------------------------
 #### The following section of tests are primarily to test
 #### wikitext escaping capabilities of Parsoid.  Given that
@@ -19284,9 +19675,9 @@ parsoid
 <p>=foo<i>a</i><span typeof="mw:Nowiki">=</span></p>
 !!end
 
+# New headings and existing headings are handled differently
 !! test
 Headings: 1. Nested inside html
-(New headings and existing headings are handled differently)
 !! options
 parsoid=html2wt
 !! wikitext
@@ -19308,12 +19699,12 @@ parsoid=html2wt
 <h2>=foo=</h2>
 <h3>=foo=</h3>
 
-<h1 data-parsoid='{}'>=foo=</h1>
-<h2 data-parsoid='{}'>=foo=</h2>
-<h3 data-parsoid='{}'>=foo=</h3>
-<h4 data-parsoid='{}'>=foo=</h4>
-<h5 data-parsoid='{}'>=foo=</h5>
-<h6 data-parsoid='{}'>=foo=</h6>
+<h1 data-parsoid=''>=foo=</h1>
+<h2 data-parsoid=''>=foo=</h2>
+<h3 data-parsoid=''>=foo=</h3>
+<h4 data-parsoid=''>=foo=</h4>
+<h5 data-parsoid=''>=foo=</h5>
+<h6 data-parsoid=''>=foo=</h6>
 !!end
 
 !! test
@@ -19675,9 +20066,9 @@ parsoid
 ----=foo=
 ----*foo
 !! html
-<hr><span typeof="mw:Nowiki">----</span>
-<hr>=foo=
-<hr>*foo
+<hr><p><span typeof="mw:Nowiki">----</span></p>
+<hr><p>=foo=</p>
+<hr><p>*foo</p>
 !! end
 
 #### --------------- Tables ---------------
@@ -20208,10 +20599,10 @@ parsoid=html2wt,wt2wt
 </p>
 !! end
 
+# FIXME: Escaping one or both of [[ and ]] is also acceptable --
+#        this is one of the shortcomings of this format
 !! test
 3. Link fragments inside <i> and <b>
-(FIXME: Escaping one or both of [[ and ]] is also acceptable --
- this is one of the shortcomings of this format)
 !! wikitext
 ''[[foo''<nowiki>]]</nowiki>
 
@@ -20306,7 +20697,7 @@ parsoid
 foo <ref>''a''
  b</ref>
 !! html
-<p>foo <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"&lt;i data-parsoid=&#39;{\"dsr\":[9,14,2,2]}&#39;>a&lt;/i>\n b"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>foo <span about="#mwt2" class="reference" id="cite_ref-1-0" 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>
 !! end
 
 !! test
@@ -20558,7 +20949,7 @@ Table with broken attribute value quoting on consecutive lines
 | title="Hello world|Foo
 | style="color:red|Bar
 |}
-!! html
+!! html/php
 <table>
 <tr>
 <td>Foo
@@ -20566,18 +20957,7 @@ Table with broken attribute value quoting on consecutive lines
 <td>Bar
 </td></tr></table>
 
-!! end
-
-!! test
-Parsoid-only: Table with broken attribute value quoting on consecutive lines
-!! options
-parsoid
-!! wikitext
-{|
-| title="Hello world|Foo
-| style="color:red|Bar
-|}
-!! html
+!! html/parsoid
 <table><tbody>
 <tr>
 <td title="Hello world">Foo
@@ -20691,9 +21071,9 @@ RT-ed inter-element separators should be valid separators
 
 !!end
 
+# Parsoid-only since PHP parser relies on Tidy for correct output
 !!test
 Trailing newlines in a deep dom-subtree that ends a wikitext line should be migrated out
-(Parsoid-only since PHP parser relies on Tidy for correct output)
 !!options
 parsoid
 !! wikitext
@@ -20706,6 +21086,14 @@ bar
 |<small>foo<small>
 |}
 !! html
+<table>
+<tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'><small data-parsoid='{"stx":"html","autoInsertedEnd":true}'>foo
+<p>bar</p></small></td></tr>
+</tbody></table>
+
+<table>
+<tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'><small data-parsoid='{"stx":"html","autoInsertedEnd":true}'>foo<small data-parsoid='{"stx":"html","autoInsertedEnd":true}'></small></small></td></tr>
+</tbody></table>
 !!end
 
 !!test
@@ -20782,15 +21170,15 @@ Indent and comment before table row
 </td></tr></table>
 
 !! html/parsoid
-<table data-parsoid='{}'>
- <!--hi--><tbody data-parsoid='{}'><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
+<table>
+ <!--hi--><tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
  <td data-parsoid='{"autoInsertedEnd":true}'> there</td></tr>
 </tbody></table>
 !! end
 
+# Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext
 !!test
 Empty TR followed by a template-generated TR
-(Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext)
 !!options
 parsoid
 !! wikitext
@@ -20901,20 +21289,20 @@ plain text
 !!end
 
 !!test
-1. Ensure fostered text content is wrapped in spans
+1. Ensure fostered text content is wrapped in element nodes
 !!options
 parsoid=wt2html
 !! wikitext
 <table>hi</table><table>ho</table>
 !! html
-<span>hi</span>
+<p>hi</p>
 <table></table>
-<span>ho</span>
+<p>ho</p>
 <table></table>
 !!end
 
 !!test
-2. Ensure fostered text content is wrapped in spans (traps regressions around fostered marker on the span getting lost)
+2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost)
 !!options
 parsoid=wt2html,wt2wt
 !! wikitext
@@ -20923,11 +21311,9 @@ parsoid=wt2html,wt2wt
 <td> a
 </table>
 !! html
-<span> || ||</span>
-<table>
-<tbody>
-<tr>
-<td> a</td></tr>
+<p> || ||
+</p><table>
+<tbody><tr><td> a</td></tr>
 </tbody></table>
 !!end
 
@@ -20938,14 +21324,7 @@ parsoid=wt2html,wt2wt
 !! wikitext
 {{echo|<table>foo<tr><td>bar</td></tr></table>}}
 !! html
-<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;
-<table>foo
-<tr>
-<td>bar</td></tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</span>
-<table>
-<tbody>
-<tr>
-<td>bar</td></tr></tbody></table>
+<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;<table>foo<tr><td>bar</td></tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</span><table><tbody><tr><td>bar</td></tr></tbody></table>
 !!end
 
 !!test
@@ -20955,14 +21334,13 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table>{{echo|foo<tr><td>bar</td></tr>}}</table>
 !! html
-<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo
-<tr>
-<td>bar</td></tr>&quot;}},&quot;i&quot;:0}},&quot;</table>&quot;]}">foo</span>
-<table>
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo<tr><td>bar</td></tr>&quot;}},&quot;i&quot;:0}},&quot;</table>&quot;]}">foo</p><table>
 <tbody>
 <tr>
-<td>bar</td></tr></tbody></table>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
 !!end
 
 !!test
@@ -20972,15 +21350,14 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table><div>{{echo|foo}}</div><tr><td>bar</td></tr></table>
 !! html
-<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>
-<div>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo&quot;}},&quot;i&quot;:0}},&quot;</div>
-<tr>
-<td>bar</td></tr></table>&quot;]}">foo</div>
+<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><div>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo&quot;}},&quot;i&quot;:0}},&quot;</div><tr><td>bar</td></tr></table>&quot;]}">foo</div>
 <table>
 <tbody>
 <tr>
-<td>bar</td></tr></tbody></table>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
 !!end
 
 !!test
@@ -20990,17 +21367,16 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
 !! html
-<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>
-<div>
-<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div>
-<tr>
-<td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
-<p>foo</p></div>
+<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div><tr><td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
+<p>foo</p>
+</div>
 <table>
 <tbody>
 <tr>
-<td>bar</td></tr></tbody></table>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
 !!end
 
 !!test
@@ -21010,17 +21386,16 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
 !! html
-<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>
-<div>
-<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div>
-<tr>
-<td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
-<p>foo</p></div>
+<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div><tr><td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
+<p>foo</p>
+</div>
 <table>
 <tbody>
 <tr>
-<td>bar</td></tr></tbody></table>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
 !!end
 
 !!test
@@ -21030,18 +21405,18 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table><tr><td><div><p>{{echo|foo</p></div></td>foo}}</tr></table>
 !! html
-<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>
-<tr>
-<td>
-<div>
-<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo&quot;}},&quot;i&quot;:0}},&quot;</tr></table>&quot;]}">foo</span>
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><tr><td><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo&quot;}},&quot;i&quot;:0}},&quot;</tr></table>&quot;]}">foo</p>
 <table>
 <tbody>
 <tr>
 <td>
 <div>
-<p>foo</p></div></td></tr></tbody></table>
+<p>foo</p>
+</div>
+</td>
+</tr>
+</tbody>
+</table>
 !!end
 
 !!test
@@ -21051,18 +21426,18 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table><tr><td><div><p>{{echo|foo</p></div></td>foo</tr></table>}}<p>ok</p>
 !! html
-<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>
-<tr>
-<td>
-<div>
-<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo</tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</span>
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><tr><td><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo</tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</p>
 <table>
 <tbody>
 <tr>
 <td>
 <div>
-<p>foo</p></div></td></tr></tbody></table>
+<p>foo</p>
+</div>
+</td>
+</tr>
+</tbody>
+</table>
 <p>ok</p>
 !!end
 
@@ -21073,14 +21448,14 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table>{{echo|<p>foo</p>}}<td>bar</td></table>
 !! html
-<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;
-<p>foo</p>&quot;}},&quot;i&quot;:0}},&quot;
-<td>bar</td></table>&quot;]}">foo</p>
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;<p>foo</p>&quot;}},&quot;i&quot;:0}},&quot;<td>bar</td></table>&quot;]}">foo</p>
 <table>
 <tbody>
 <tr>
-<td>bar</td></tr></tbody></table>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
 !!end
 
 !!test
@@ -21094,11 +21469,13 @@ parsoid=wt2wt,wt2html
 |b
 |}
 !! html
-<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a\n&quot;}},&quot;i&quot;:0}}]}">a</p><span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;{|&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;style&quot;:{&quot;wt&quot;:&quot;'color:red'&quot;}},&quot;i&quot;:0}},&quot;\n|-\n|b\n|}&quot;]}">{{{1}}}</span>
-<table>
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a\n&quot;}},&quot;i&quot;:0}}]}">a</p><p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;{|&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;style&quot;:{&quot;wt&quot;:&quot;'color:red'&quot;}},&quot;i&quot;:0}},&quot;\n|-\n|b\n|}&quot;]}">{{{1}}}</p><table>
 <tbody>
 <tr>
-<td>b</td></tr></tbody></table>
+<td>b</td>
+</tr>
+</tbody>
+</table>
 !!end
 
 !!test
@@ -21108,8 +21485,7 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table>{{echo|hi</table>hello}}
 !! html
-<span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;/table>hello"}},"i":0}}]}' data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"pi":[[{"k":"1","spc":["","","",""]}]]}'>hi</span>
-<table about="#mwt2" data-parsoid='{"stx":"html"}'></table><span about="#mwt2" data-parsoid="{}">hello</span>
+<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;/table>hello"}},"i":0}}]}' data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"pi":[[{"k":"1","spc":["","","",""]}]]}'>hi</p><table about="#mwt2" data-parsoid='{"stx":"html"}'></table><p about="#mwt2">hello</p>
 !!end
 
 !!test
@@ -21124,7 +21500,7 @@ parsoid=wt2html,wt2wt
 </div>
 |}
 !! html
-<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"OpenTable","href":"./Template:OpenTable"},"params":{},"i":0}},"\n&lt;div>"]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[]]}'></div><span about="#mwt1" data-parsoid="{}">
+<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"OpenTable","href":"./Template:OpenTable"},"params":{},"i":0}},"\n&lt;div>"]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[]]}'></div><span about="#mwt1">
 </span>
 <table about="#mwt1" data-parsoid='{"autoInsertedEnd":true}'></table>
 
@@ -21164,15 +21540,15 @@ parsoid=html2wt
 # All these tests are marked Parsoid html2wt and html2html only
 # ----------------------------------------------------------------
 
+# 'mi' is a localinterwiki prefix as well as a language
 !! test
 Serialize interwiki links pointing to the current wiki as plain wiki links (bug 65869)
 !! options
 parsoid=html2wt
-language=es
 !! wikitext
 [[Foo]]
 !! html
-<p><a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/Foo">Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://mi.wikipedia.org/wiki/Foo">Foo</a></p>
 !! end
 
 !! test
@@ -21336,8 +21712,7 @@ parsoid
 !!end
 
 !! test
-Image: New block level image should have \n before and after (existing
-content)
+Image: New block level image should have \n before and after (existing content)
 !! options
 parsoid
 !! wikitext
@@ -21345,9 +21720,9 @@ parsoid
 [[File:Foobar.jpg|right|thumb|150x150px]]
 456
 !! html
-<p data-parsoid='{"dsr":[0,3,0,0]}'>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"}],"dsr":[4,45,2,2]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"dsr":[6,43,null,null]}'><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>
-<p data-parsoid='{"dsr":[46,49,0,0]}'>456</p>
+<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>
+<p>456</p>
 !!end
 
 !! test
@@ -21359,7 +21734,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" 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>
 !!end
 
 !! test
@@ -21678,9 +22055,9 @@ parsoid=html2wt
 
 ''A'''B'''''
 !! html
-<p><i>A</i><i data-parsoid='{}'>B</i></p>
-<p><b data-parsoid='{}'>A</b><b>B</b></p>
-<p><i>A</i><b data-parsoid='{}'><i data-parsoid='{}'>B</i></b></p>
+<p><i>A</i><i>B</i></p>
+<p><b>A</b><b>B</b></p>
+<p><i>A</i><b><i>B</i></b></p>
 !! end
 
 #------------------------------------
index 078d8f0..2ee805e 100644 (file)
@@ -2207,13 +2207,6 @@ Log in
 &lt;/td&gt;&lt;td&gt;
 <template lineStart="1"><title>int:Login</title></template>
 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
-[http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Loginend&amp;action=edit loginend]&lt;br&gt;
-[[MediaWiki_talk:Loginend|Talk]]
-&lt;/td&gt;&lt;td&gt;
-&amp;amp;nbsp;
-&lt;/td&gt;&lt;td&gt;
-<template lineStart="1"><title>int:Loginend</title></template>
-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
 [http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Loginerror&amp;action=edit loginerror]&lt;br&gt;
 [[MediaWiki_talk:Loginerror|Talk]]
 &lt;/td&gt;&lt;td&gt;
index 3c30da9..4a30f56 100644 (file)
@@ -2207,13 +2207,6 @@ Log in
 </td><td>
 {{int:Login}}
 </td></tr><tr><td>
-[http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Loginend&action=edit loginend]<br>
-[[MediaWiki_talk:Loginend|Talk]]
-</td><td>
-&amp;nbsp;
-</td><td>
-{{int:Loginend}}
-</td></tr><tr><td>
 [http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Loginerror&action=edit loginerror]<br>
 [[MediaWiki_talk:Loginerror|Talk]]
 </td><td>
index 9965c43..5d21319 100644 (file)
@@ -70,10 +70,6 @@ if ( $wgDBtype == 'sqlite' ) {
        }
 }
 
-# There is a convention that the parser should never
-# refer to $wgTitle directly, but instead use the title
-# passed to it.
-$wgTitle = Title::newFromText( 'Parser test script do not use' );
 $tester = new ParserTest( $options );
 
 if ( isset( $options['file'] ) ) {
index 62157d2..71e0f4b 100644 (file)
@@ -6,7 +6,7 @@
  * @see https://github.com/sebastianbergmann/phpunit/blob/master/src/Extensions/PhptTestCase.php
  * @author Sam Smith <samsmith@wikimedia.org>
  */
-class LessFileCompilationTest extends MediaWikiTestCase {
+class LessFileCompilationTest extends ResourceLoaderTestCase {
 
        /**
         * @var string $file
@@ -38,7 +38,13 @@ class LessFileCompilationTest extends MediaWikiTestCase {
                        "$thisString must refer to a readable file"
                );
 
-               $compiler = ResourceLoader::getLessCompiler( RequestContext::getMain()->getConfig() );
+               $rlContext = static::getResourceLoaderContext();
+
+               // Bleh
+               $method = new ReflectionMethod( $this->module, 'getLessCompiler' );
+               $method->setAccessible( true );
+               $compiler = $method->invoke( $this->module, $rlContext );
+
                $this->assertNotNull( $compiler->compileFile( $this->file ) );
        }
 
index 873d979..95d3c40 100644 (file)
@@ -88,6 +88,14 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $this->backupStaticAttributes = false;
        }
 
+       public function __destruct() {
+               // Complain if self::setUp() was called, but not self::tearDown()
+               // $this->called['setUp'] will be checked by self::testMediaWikiTestCaseParentSetupCalled()
+               if ( isset( $this->called['setUp'] ) && !isset( $this->called['tearDown'] ) ) {
+                       throw new MWException( get_called_class() . "::tearDown() must call parent::tearDown()" );
+               }
+       }
+
        public function run( PHPUnit_Framework_TestResult $result = null ) {
                /* Some functions require some kind of caching, and will end up using the db,
                 * which we can't allow, as that would open a new connection for mysql.
@@ -192,7 +200,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        protected function setUp() {
                wfProfileIn( __METHOD__ );
                parent::setUp();
-               $this->called['setUp'] = 1;
+               $this->called['setUp'] = true;
 
                $this->phpErrorLevel = intval( ini_get( 'error_reporting' ) );
 
@@ -215,12 +223,15 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                        $this->db->ignoreErrors( false );
                }
 
+               DeferredUpdates::clearPendingUpdates();
+
                wfProfileOut( __METHOD__ );
        }
 
        protected function tearDown() {
                wfProfileIn( __METHOD__ );
 
+               $this->called['tearDown'] = true;
                // Cleaning up temporary files
                foreach ( $this->tmpFiles as $fileName ) {
                        if ( is_file( $fileName ) || ( is_link( $fileName ) ) ) {
@@ -419,6 +430,34 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                return false;
        }
 
+       /**
+        * Insert a new page.
+        *
+        * Should be called from addDBData().
+        *
+        * @since 1.25
+        * @param string $pageName Page name
+        * @param string $text Page's content
+        * @return array Title object and page id
+        */
+       protected function insertPage( $pageName, $text = 'Sample page for unit test.' ) {
+               $title = Title::newFromText( $pageName, 0 );
+
+               $user = User::newFromName( 'WikiSysop' );
+               $comment = __METHOD__ . ': Sample page for unit test.';
+
+               // Avoid memory leak...?
+               LinkCache::singleton()->clear();
+
+               $page = WikiPage::factory( $title );
+               $page->doEditContent( ContentHandler::makeContent( $text, $title ), $comment, 0, false, $user );
+
+               return array(
+                       'title' => $title,
+                       'id' => $page->getId(),
+               );
+       }
+
        /**
         * Stub. If a test needs to add additional data to the database, it should
         * implement this method and do so
@@ -444,7 +483,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                                'page_namespace' => 0,
                                'page_title' => ' ',
                                'page_restrictions' => null,
-                               'page_counter' => 0,
                                'page_is_redirect' => 0,
                                'page_is_new' => 0,
                                'page_random' => 0,
@@ -455,7 +493,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
 
                User::resetIdByNameCache();
 
-               //Make sysop user
+               // Make sysop user
                $user = User::newFromName( 'UTSysop' );
 
                if ( $user->idForName() == 0 ) {
@@ -467,7 +505,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                        $user->saveSettings();
                }
 
-               //Make 1 page with 1 revision
+               // Make 1 page with 1 revision
                $page = WikiPage::factory( Title::newFromText( 'UTPage' ) );
                if ( $page->getId() == 0 ) {
                        $page->doEditContent(
@@ -475,7 +513,8 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                                'UTPageSummary',
                                EDIT_NEW,
                                false,
-                               User::newFromName( 'UTSysop' ) );
+                               User::newFromName( 'UTSysop' )
+                       );
                }
        }
 
@@ -1110,23 +1149,48 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $this->assertEmpty( $errors, implode( "\n", $errors ) );
        }
 
+       /**
+        * @param array $matcher
+        * @param string $actual
+        * @param bool $isHtml
+        *
+        * @return bool
+        */
+       private static function tagMatch( $matcher, $actual, $isHtml = true ) {
+               $dom = PHPUnit_Util_XML::load( $actual, $isHtml );
+               $tags = PHPUnit_Util_XML::findNodes( $dom, $matcher, $isHtml );
+               return count( $tags ) > 0 && $tags[0] instanceof DOMNode;
+       }
+
        /**
         * Note: we are overriding this method to remove the deprecated error
         * @see https://bugzilla.wikimedia.org/show_bug.cgi?id=69505
         * @see https://github.com/sebastianbergmann/phpunit/issues/1292
+        * @deprecated
         *
         * @param array $matcher
         * @param string $actual
         * @param string $message
         * @param bool $isHtml
         */
-       public static function assertTag($matcher, $actual, $message = '', $isHtml = true) {
+       public static function assertTag( $matcher, $actual, $message = '', $isHtml = true ) {
                //trigger_error(__METHOD__ . ' is deprecated', E_USER_DEPRECATED);
 
-               $dom     = PHPUnit_Util_XML::load($actual, $isHtml);
-               $tags    = PHPUnit_Util_XML::findNodes($dom, $matcher, $isHtml);
-               $matched = count($tags) > 0 && $tags[0] instanceof DOMNode;
+               self::assertTrue( self::tagMatch( $matcher, $actual, $isHtml ), $message );
+       }
+
+       /**
+        * @see MediaWikiTestCase::assertTag
+        * @deprecated
+        *
+        * @param array $matcher
+        * @param string $actual
+        * @param string $message
+        * @param bool $isHtml
+        */
+       public static function assertNotTag( $matcher, $actual, $message = '', $isHtml = true ) {
+               //trigger_error(__METHOD__ . ' is deprecated', E_USER_DEPRECATED);
 
-               self::assertTrue($matched, $message);
+               self::assertFalse( self::tagMatch( $matcher, $actual, $isHtml ), $message );
        }
 }
index f316f56..f5f302e 100644 (file)
@@ -1,10 +1,10 @@
 <?php
 
 abstract class ResourceLoaderTestCase extends MediaWikiTestCase {
-       protected static function getResourceLoaderContext() {
+       protected static function getResourceLoaderContext( $lang = 'en' ) {
                $resourceLoader = new ResourceLoader();
                $request = new FauxRequest( array(
-                               'lang' => 'en',
+                               'lang' => $lang,
                                'modules' => 'startup',
                                'only' => 'scripts',
                                'skin' => 'vector',
@@ -46,6 +46,7 @@ class ResourceLoaderTestModule extends ResourceLoaderModule {
        protected $script = '';
        protected $styles = '';
        protected $skipFunction = null;
+       protected $isRaw = false;
        protected $targets = array( 'test' );
 
        public function __construct( $options = array() ) {
@@ -77,7 +78,18 @@ class ResourceLoaderTestModule extends ResourceLoaderModule {
        public function getSkipFunction() {
                return $this->skipFunction;
        }
+
+       public function isRaw() {
+               return $this->isRaw;
+       }
 }
 
 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/css/expected.css b/tests/phpunit/data/css/expected.css
new file mode 100644 (file)
index 0000000..03addcb
--- /dev/null
@@ -0,0 +1,11 @@
+/* All of the combinations should result in the same output in LTR and RTL mode. */
+
+.selector { /*@embed*/ background-image: url(simple-ltr.gif); }
+
+.selector { /*@embed*/ background-image: url(simple-ltr.gif); }
+
+.selector { /*@embed*/ background-image: url(simple-ltr.gif); }
+
+.selector { /*@embed*/ background-image: url(simple-ltr.gif); }
+
+.selector { /*@embed*/ background-image: url(simple-ltr.gif); }
diff --git a/tests/phpunit/data/css/simple-ltr.gif b/tests/phpunit/data/css/simple-ltr.gif
new file mode 100644 (file)
index 0000000..13c43e9
Binary files /dev/null and b/tests/phpunit/data/css/simple-ltr.gif differ
diff --git a/tests/phpunit/data/css/simple-rtl.gif b/tests/phpunit/data/css/simple-rtl.gif
new file mode 100644 (file)
index 0000000..f9e7531
Binary files /dev/null and b/tests/phpunit/data/css/simple-rtl.gif differ
diff --git a/tests/phpunit/data/css/test.css b/tests/phpunit/data/css/test.css
new file mode 100644 (file)
index 0000000..8d0d670
--- /dev/null
@@ -0,0 +1,11 @@
+/* All of the combinations should result in the same output in LTR and RTL mode. */
+
+/*@noflip*/ .selector { /*@embed*/ background-image: url(simple-ltr.gif); }
+
+/*@noflip*/ .selector { background-image: /*@embed*/ url(simple-ltr.gif); }
+
+.selector { /*@noflip*/ /*@embed*/ background-image: url(simple-ltr.gif); }
+
+.selector { /*@embed*/ /*@noflip*/ background-image: url(simple-ltr.gif); }
+
+.selector { /*@noflip*/ background-image: /*@embed*/ url(simple-ltr.gif); }
diff --git a/tests/phpunit/data/cssmin/circle.svg b/tests/phpunit/data/cssmin/circle.svg
new file mode 100644 (file)
index 0000000..6b7d1af
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8">
+<circle cx="4" cy="4" r="2"/>
+</svg>
diff --git a/tests/phpunit/data/localisationcache/en.json b/tests/phpunit/data/localisationcache/en.json
new file mode 100644 (file)
index 0000000..27600cd
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "present-uk": "en",
+       "present-ru": "en",
+       "present-en": "en"
+}
diff --git a/tests/phpunit/data/localisationcache/ru.json b/tests/phpunit/data/localisationcache/ru.json
new file mode 100644 (file)
index 0000000..79e1444
--- /dev/null
@@ -0,0 +1,4 @@
+{
+       "present-uk": "ru",
+       "present-ru": "ru"
+}
diff --git a/tests/phpunit/data/localisationcache/uk.json b/tests/phpunit/data/localisationcache/uk.json
new file mode 100644 (file)
index 0000000..f63ce5d
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "present-uk": "uk"
+}
index 8e78da3..9f2b7a0 100644 (file)
@@ -4,13 +4,15 @@
  * @group Database
  */
 class ArticleTablesTest extends MediaWikiLangTestCase {
-
        /**
+        * Make sure that bug 14404 doesn't strike again. We don't want
+        * templatelinks based on the user language when {{int:}} is used, only the
+        * content language.
+        *
         * @covers Title::getTemplateLinksFrom
         * @covers Title::getLinksFrom
-        * @todo give this test a real name explaining what is being tested here
         */
-       public function testbug14404() {
+       public function testTemplatelinksUsesContentLanguage() {
                $title = Title::newFromText( 'Bug 14404' );
                $page = WikiPage::factory( $title );
                $user = new User();
index b248d24..1974162 100644 (file)
@@ -133,6 +133,7 @@ class BlockTest extends MediaWikiLangTestCase {
                $username = 'BlockedUserToCreateAccountWith';
                $u = User::newFromName( $username );
                $u->setPassword( 'NotRandomPass' );
+               $u->setId( 14146 );
                $u->addToDatabase();
                unset( $u );
 
@@ -200,6 +201,12 @@ class BlockTest extends MediaWikiLangTestCase {
                        $oldBlock->delete();
                }
 
+               // Local perspective (blockee on current wiki)...
+               $user = User::newFromName( 'UserOnForeignWiki' );
+               $user->addToDatabase();
+               // Set user ID to match the test value
+               $this->db->update( 'user', array( 'user_id' => 14146 ), array( 'user_id' => $user->getId() ) );
+
                // Foreign perspective (blockee not on current wiki)...
                $block = new Block(
                        /* $address */ 'UserOnForeignWiki',
@@ -221,11 +228,6 @@ class BlockTest extends MediaWikiLangTestCase {
                $res = $block->insert( $this->db );
                $this->assertTrue( (bool)$res['id'], 'Block succeeded' );
 
-               // Local perspective (blockee on current wiki)...
-               $user = User::newFromName( 'UserOnForeignWiki' );
-               $user->addToDatabase();
-               // Set user ID to match the test value
-               $this->db->update( 'user', array( 'user_id' => 14146 ), array( 'user_id' => $user->getId() ) );
                $user = null; // clear
 
                $block = Block::newFromID( $res['id'] );
index 6537364..702fce4 100644 (file)
@@ -59,6 +59,9 @@ class EditPageTest extends MediaWikiLangTestCase {
         * User input text is passed to rtrim() by edit page. This is a simple
         * wrapper around assertEquals() which calls rrtrim() to normalize the
         * expected and actual texts.
+        * @param string $expected
+        * @param string $actual
+        * @param string $msg
         */
        protected function assertEditedTextEquals( $expected, $actual, $msg = '' ) {
                return $this->assertEquals( rtrim( $expected ), rtrim( $actual ), $msg );
@@ -177,107 +180,83 @@ class EditPageTest extends MediaWikiLangTestCase {
                return $page;
        }
 
-       /**
-        * @todo split into a dataprovider and test method
-        * @covers EditPage
-        */
-       public function testCreatePage() {
-               $this->assertEdit(
-                       'EditPageTest_testCreatePage',
-                       null,
-                       null,
-                       array(
-                               'wpTextbox1' => "Hello World!",
+       public static function provideCreatePages() {
+               return array(
+                       array( 'expected article being created',
+                               'EditPageTest_testCreatePage',
+                               null,
+                               'Hello World!',
+                               EditPage::AS_SUCCESS_NEW_ARTICLE,
+                               'Hello World!'
                        ),
-                       EditPage::AS_SUCCESS_NEW_ARTICLE,
-                       "Hello World!",
-                       "expected article being created"
-               )->doDeleteArticleReal( 'EditPageTest_testCreatePage' );
-
-               $this->assertEdit(
-                       'EditPageTest_testCreatePage',
-                       null,
-                       null,
-                       array(
-                               'wpTextbox1' => "",
+                       array( 'expected article not being created if empty',
+                               'EditPageTest_testCreatePage',
+                               null,
+                               '',
+                               EditPage::AS_BLANK_ARTICLE,
+                               null
                        ),
-                       EditPage::AS_BLANK_ARTICLE,
-                       null,
-                       "expected article not being created if empty"
-               );
-
-               $this->assertEdit(
-                       'MediaWiki:January',
-                       null,
-                       'UTSysop',
-                       array(
-                               'wpTextbox1' => "Not January",
+                       array( 'expected MediaWiki: page being created',
+                               'MediaWiki:January',
+                               'UTSysop',
+                               'Not January',
+                               EditPage::AS_SUCCESS_NEW_ARTICLE,
+                               'Not January'
                        ),
-                       EditPage::AS_SUCCESS_NEW_ARTICLE,
-                       "Not January",
-                       "expected MediaWiki: page being created"
-               )->doDeleteArticleReal( 'EditPageTest_testCreatePage' );
-
-               $this->assertEdit(
-                       'MediaWiki:EditPageTest_testCreatePage',
-                       null,
-                       'UTSysop',
-                       array(
-                               'wpTextbox1' => "",
+                       array( 'expected not-registered MediaWiki: page not being created if empty',
+                               'MediaWiki:EditPageTest_testCreatePage',
+                               'UTSysop',
+                               '',
+                               EditPage::AS_BLANK_ARTICLE,
+                               null
                        ),
-                       EditPage::AS_BLANK_ARTICLE,
-                       null,
-                       "expected not-registered MediaWiki: page not being created if empty"
-               );
-
-               $this->assertEdit(
-                       'MediaWiki:January',
-                       null,
-                       'UTSysop',
-                       array(
-                               'wpTextbox1' => "",
+                       array( 'expected registered MediaWiki: page being created even if empty',
+                               'MediaWiki:January',
+                               'UTSysop',
+                               '',
+                               EditPage::AS_SUCCESS_NEW_ARTICLE,
+                               ''
                        ),
-                       EditPage::AS_SUCCESS_NEW_ARTICLE,
-                       "",
-                       "expected registered MediaWiki: page being created even if empty"
-               )->doDeleteArticleReal( 'EditPageTest_testCreatePage' );
-
-               $this->assertEdit(
-                       'MediaWiki:Ipb-default-expiry',
-                       null,
-                       'UTSysop',
-                       array(
-                               'wpTextbox1' => "",
+                       array( 'expected registered MediaWiki: page whose default content is empty not being created if empty',
+                               'MediaWiki:Ipb-default-expiry',
+                               'UTSysop',
+                               '',
+                               EditPage::AS_BLANK_ARTICLE,
+                               ''
                        ),
-                       EditPage::AS_BLANK_ARTICLE,
-                       "",
-                       "expected registered MediaWiki: page whose default content is empty not being created if empty"
-               );
-
-               $this->assertEdit(
-                       'MediaWiki:January',
-                       null,
-                       'UTSysop',
-                       array(
-                               'wpTextbox1' => "January",
+                       array( 'expected MediaWiki: page not being created if text equals default message',
+                               'MediaWiki:January',
+                               'UTSysop',
+                               'January',
+                               EditPage::AS_BLANK_ARTICLE,
+                               null
+                       ),
+                       array( 'expected empty article being created',
+                               'EditPageTest_testCreatePage',
+                               null,
+                               '',
+                               EditPage::AS_SUCCESS_NEW_ARTICLE,
+                               '',
+                               true
                        ),
-                       EditPage::AS_BLANK_ARTICLE,
-                       null,
-                       "expected MediaWiki: page not being created if text equals default message"
                );
+       }
 
-               $this->assertEdit(
-                       'EditPageTest_testCreatePage',
-                       null,
-                       null,
-                       array(
-                               'wpTextbox1' => "",
-                               'wpIgnoreBlankArticle' => 1,
-                       ),
-                       EditPage::AS_SUCCESS_NEW_ARTICLE,
-                       "",
-                       "expected empty article being created"
-               )->doDeleteArticleReal( 'EditPageTest_testCreatePage' );
+       /**
+        * @dataProvider provideCreatePages
+        * @covers EditPage
+        */
+       public function testCreatePage( $desc, $pageTitle, $user, $editText, $expectedCode, $expectedText, $ignoreBlank = false ) {
+               $edit = array( 'wpTextbox1' => $editText );
+               if ( $ignoreBlank ) {
+                       $edit['wpIgnoreBlankArticle'] = 1;
+               }
+
+               $page = $this->assertEdit( $pageTitle, null, $user, $edit, $expectedCode, $expectedText, $desc );
+
+               if ( $expectedCode != EditPage::AS_BLANK_ARTICLE ) {
+                       $page->doDeleteArticleReal( $pageTitle );
+               }
        }
 
        public function testUpdatePage() {
index e22f505..c3539d0 100644 (file)
@@ -10,7 +10,7 @@ class GitInfoTest extends MediaWikiTestCase {
        }
 
        public function testValidJsonData() {
-               $dir = $GLOBALS['IP'] . '/testValidJsonData';
+               $dir = $GLOBALS['IP'] . DIRECTORY_SEPARATOR . 'testValidJsonData';
                $fixture = new GitInfo( $dir );
 
                $this->assertTrue( $fixture->cacheIsComplete() );
index 84799ff..2bfabe4 100644 (file)
@@ -59,13 +59,33 @@ class GlobalTest extends MediaWikiTestCase {
                );
        }
 
+       /*
+        * Test cases for random functions could hypothetically fail,
+        * even though they shouldn't.
+        */
+
        /**
         * @covers ::wfRandom
         */
        public function testRandom() {
-               # This could hypothetically fail, but it shouldn't ;)
                $this->assertFalse(
-                       wfRandom() == wfRandom() );
+                       wfRandom() == wfRandom()
+               );
+       }
+
+       /**
+        * @covers ::wfRandomString
+        */
+       public function testRandomString() {
+               $this->assertFalse(
+                       wfRandomString() == wfRandomString()
+               );
+               $this->assertEquals(
+                       strlen( wfRandomString( 10 ) ), 10
+               );
+               $this->assertTrue(
+                       preg_match( '/^[0-9a-f]+$/i', wfRandomString() ) === 1
+               );
        }
 
        /**
@@ -302,16 +322,16 @@ class GlobalTest extends MediaWikiTestCase {
                $wgDebugTimestamps = false;
 
                wfDebug( "This is a normal string" );
-               $this->assertEquals( "This is a normal string", file_get_contents( $wgDebugLogFile ) );
+               $this->assertEquals( "This is a normal string\n", file_get_contents( $wgDebugLogFile ) );
                unlink( $wgDebugLogFile );
 
                wfDebug( "This is nöt an ASCII string" );
-               $this->assertEquals( "This is nöt an ASCII string", file_get_contents( $wgDebugLogFile ) );
+               $this->assertEquals( "This is nöt an ASCII string\n", file_get_contents( $wgDebugLogFile ) );
                unlink( $wgDebugLogFile );
 
                wfDebug( "\00305This has böth UTF and control chars\003" );
                $this->assertEquals(
-                       " 05This has böth UTF and control chars ",
+                       " 05This has böth UTF and control chars \n",
                        file_get_contents( $wgDebugLogFile )
                );
                unlink( $wgDebugLogFile );
diff --git a/tests/phpunit/includes/GlobalFunctions/wfAppendQueryTest.php b/tests/phpunit/includes/GlobalFunctions/wfAppendQueryTest.php
new file mode 100644 (file)
index 0000000..54e1f89
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * @group GlobalFunctions
+ * @covers ::wfAppendQuery
+ */
+class WfAppendQueryTest extends MediaWikiTestCase {
+       /**
+        * @dataProvider provideAppendQuery
+        */
+       public function testAppendQuery( $url, $query, $expected, $message = null ) {
+               $this->assertEquals( $expected, wfAppendQuery( $url, $query ), $message );
+       }
+
+       public static function provideAppendQuery() {
+               return array(
+                       array(
+                               'http://www.example.org/index.php',
+                               '',
+                               'http://www.example.org/index.php',
+                               'No query'
+                       ),
+                       array(
+                               'http://www.example.org/index.php',
+                               array( 'foo' => 'bar' ),
+                               'http://www.example.org/index.php?foo=bar',
+                               'Set query array'
+                       ),
+                       array(
+                               'http://www.example.org/index.php?foz=baz',
+                               'foo=bar',
+                               'http://www.example.org/index.php?foz=baz&foo=bar',
+                               'Set query string'
+                       ),
+                       array(
+                               'http://www.example.org/index.php?foo=bar',
+                               '',
+                               'http://www.example.org/index.php?foo=bar',
+                               'Empty string with query'
+                       ),
+                       array(
+                               'http://www.example.org/index.php?foo=bar',
+                               array( 'baz' => 'quux' ),
+                               'http://www.example.org/index.php?foo=bar&baz=quux',
+                               'Add query array'
+                       ),
+                       array(
+                               'http://www.example.org/index.php?foo=bar',
+                               'baz=quux',
+                               'http://www.example.org/index.php?foo=bar&baz=quux',
+                               'Add query string'
+                       ),
+                       array(
+                               'http://www.example.org/index.php?foo=bar',
+                               array( 'baz' => 'quux', 'foo' => 'baz' ),
+                               'http://www.example.org/index.php?foo=bar&baz=quux&foo=baz',
+                               'Modify query array'
+                       ),
+                       array(
+                               'http://www.example.org/index.php?foo=bar',
+                               'baz=quux&foo=baz',
+                               'http://www.example.org/index.php?foo=bar&baz=quux&foo=baz',
+                               'Modify query string'
+                       )
+               );
+       }
+}
index dd4f9cc..9d55e85 100644 (file)
@@ -186,4 +186,10 @@ class WfBaseConvertTest extends MediaWikiTestCase {
                        strlen( wfBaseConvert( $number, 2, 2, strlen( $number ) - 5 ) )
                );
        }
+
+       public function testLeadingZero() {
+               $this->assertSame( '24', wfBaseConvert( '010', 36, 16 ) );
+               $this->assertSame( '37d4', wfBaseConvert( '0b10', 36, 16 ) );
+               $this->assertSame( 'a734', wfBaseConvert( '0x10', 36, 16 ) );
+       }
 }
index 9b53381..fbd2c31 100644 (file)
@@ -1,6 +1,7 @@
 <?php
+
 /**
- * @group Broken
+ * @group Http
  */
 class HttpTest extends MediaWikiTestCase {
        /**
@@ -92,8 +93,10 @@ class HttpTest extends MediaWikiTestCase {
                        array( true, 'http://user:pass@host', 'Username and password provided' ),
 
                        # (\S+) - host part is made of anything not whitespaces
-                       array( false, 'http://!"èèè¿¿¿~~\'', 'hostname is made of any non whitespace' ),
-                       array( false, 'http://exam:ple.org/', 'hostname can not use colons!' ),
+                       // commented these out in order to remove @group Broken
+                       // @todo are these valid tests? if so, fix Http::isValidURI so it can handle them
+                       //array( false, 'http://!"èèè¿¿¿~~\'', 'hostname is made of any non whitespace' ),
+                       //array( false, 'http://exam:ple.org/', 'hostname can not use colons!' ),
 
                        # (:[0-9]+)? - port number
                        array( true, 'http://example.org:80/' ),
@@ -171,6 +174,310 @@ class HttpTest extends MediaWikiTestCase {
                        $h->getFinalUrl( "Relative file path Location: should keep the latest host and scheme!" )
                );
        }
+
+       /**
+        * Constant values are from PHP 5.3.28 using cURL 7.24.0
+        * @see http://php.net/manual/en/curl.constants.php
+        *
+        * All constant values are present so that developers don’t need to remember
+        * to add them if added at a later date. The commented out constants were
+        * not found anywhere in the MediaWiki core code.
+        *
+        * Commented out constants that were not available in:
+        * HipHop VM 3.3.0 (rel)
+        * Compiler: heads/master-0-g08810d920dfff59e0774cf2d651f92f13a637175
+        * Repo schema: 3214fc2c684a4520485f715ee45f33f2182324b1
+        * Extension API: 20140829
+        *
+        * Commented out constants that were removed in PHP 5.6.0
+        *
+        * @covers CurlHttpRequest::execute
+        */
+       public function provideCurlConstants() {
+               return array(
+                       array( 'CURLAUTH_ANY' ),
+                       array( 'CURLAUTH_ANYSAFE' ),
+                       array( 'CURLAUTH_BASIC' ),
+                       array( 'CURLAUTH_DIGEST' ),
+                       array( 'CURLAUTH_GSSNEGOTIATE' ),
+                       array( 'CURLAUTH_NTLM' ),
+                       // array( 'CURLCLOSEPOLICY_CALLBACK' ), // removed in PHP 5.6.0
+                       // array( 'CURLCLOSEPOLICY_LEAST_RECENTLY_USED' ), // removed in PHP 5.6.0
+                       // array( 'CURLCLOSEPOLICY_LEAST_TRAFFIC' ), // removed in PHP 5.6.0
+                       // array( 'CURLCLOSEPOLICY_OLDEST' ), // removed in PHP 5.6.0
+                       // array( 'CURLCLOSEPOLICY_SLOWEST' ), // removed in PHP 5.6.0
+                       array( 'CURLE_ABORTED_BY_CALLBACK' ),
+                       array( 'CURLE_BAD_CALLING_ORDER' ),
+                       array( 'CURLE_BAD_CONTENT_ENCODING' ),
+                       array( 'CURLE_BAD_FUNCTION_ARGUMENT' ),
+                       array( 'CURLE_BAD_PASSWORD_ENTERED' ),
+                       array( 'CURLE_COULDNT_CONNECT' ),
+                       array( 'CURLE_COULDNT_RESOLVE_HOST' ),
+                       array( 'CURLE_COULDNT_RESOLVE_PROXY' ),
+                       array( 'CURLE_FAILED_INIT' ),
+                       array( 'CURLE_FILESIZE_EXCEEDED' ),
+                       array( 'CURLE_FILE_COULDNT_READ_FILE' ),
+                       array( 'CURLE_FTP_ACCESS_DENIED' ),
+                       array( 'CURLE_FTP_BAD_DOWNLOAD_RESUME' ),
+                       array( 'CURLE_FTP_CANT_GET_HOST' ),
+                       array( 'CURLE_FTP_CANT_RECONNECT' ),
+                       array( 'CURLE_FTP_COULDNT_GET_SIZE' ),
+                       array( 'CURLE_FTP_COULDNT_RETR_FILE' ),
+                       array( 'CURLE_FTP_COULDNT_SET_ASCII' ),
+                       array( 'CURLE_FTP_COULDNT_SET_BINARY' ),
+                       array( 'CURLE_FTP_COULDNT_STOR_FILE' ),
+                       array( 'CURLE_FTP_COULDNT_USE_REST' ),
+                       array( 'CURLE_FTP_PORT_FAILED' ),
+                       array( 'CURLE_FTP_QUOTE_ERROR' ),
+                       array( 'CURLE_FTP_SSL_FAILED' ),
+                       array( 'CURLE_FTP_USER_PASSWORD_INCORRECT' ),
+                       array( 'CURLE_FTP_WEIRD_227_FORMAT' ),
+                       array( 'CURLE_FTP_WEIRD_PASS_REPLY' ),
+                       array( 'CURLE_FTP_WEIRD_PASV_REPLY' ),
+                       array( 'CURLE_FTP_WEIRD_SERVER_REPLY' ),
+                       array( 'CURLE_FTP_WEIRD_USER_REPLY' ),
+                       array( 'CURLE_FTP_WRITE_ERROR' ),
+                       array( 'CURLE_FUNCTION_NOT_FOUND' ),
+                       array( 'CURLE_GOT_NOTHING' ),
+                       array( 'CURLE_HTTP_NOT_FOUND' ),
+                       array( 'CURLE_HTTP_PORT_FAILED' ),
+                       array( 'CURLE_HTTP_POST_ERROR' ),
+                       array( 'CURLE_HTTP_RANGE_ERROR' ),
+                       array( 'CURLE_LDAP_CANNOT_BIND' ),
+                       array( 'CURLE_LDAP_INVALID_URL' ),
+                       array( 'CURLE_LDAP_SEARCH_FAILED' ),
+                       array( 'CURLE_LIBRARY_NOT_FOUND' ),
+                       array( 'CURLE_MALFORMAT_USER' ),
+                       array( 'CURLE_OBSOLETE' ),
+                       array( 'CURLE_OK' ),
+                       array( 'CURLE_OPERATION_TIMEOUTED' ),
+                       array( 'CURLE_OUT_OF_MEMORY' ),
+                       array( 'CURLE_PARTIAL_FILE' ),
+                       array( 'CURLE_READ_ERROR' ),
+                       array( 'CURLE_RECV_ERROR' ),
+                       array( 'CURLE_SEND_ERROR' ),
+                       array( 'CURLE_SHARE_IN_USE' ),
+                       // array( 'CURLE_SSH' ), // not present in HHVM 3.3.0-dev
+                       array( 'CURLE_SSL_CACERT' ),
+                       array( 'CURLE_SSL_CERTPROBLEM' ),
+                       array( 'CURLE_SSL_CIPHER' ),
+                       array( 'CURLE_SSL_CONNECT_ERROR' ),
+                       array( 'CURLE_SSL_ENGINE_NOTFOUND' ),
+                       array( 'CURLE_SSL_ENGINE_SETFAILED' ),
+                       array( 'CURLE_SSL_PEER_CERTIFICATE' ),
+                       array( 'CURLE_TELNET_OPTION_SYNTAX' ),
+                       array( 'CURLE_TOO_MANY_REDIRECTS' ),
+                       array( 'CURLE_UNKNOWN_TELNET_OPTION' ),
+                       array( 'CURLE_UNSUPPORTED_PROTOCOL' ),
+                       array( 'CURLE_URL_MALFORMAT' ),
+                       array( 'CURLE_URL_MALFORMAT_USER' ),
+                       array( 'CURLE_WRITE_ERROR' ),
+                       array( 'CURLFTPAUTH_DEFAULT' ),
+                       array( 'CURLFTPAUTH_SSL' ),
+                       array( 'CURLFTPAUTH_TLS' ),
+                       // array( 'CURLFTPMETHOD_MULTICWD' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLFTPMETHOD_NOCWD' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLFTPMETHOD_SINGLECWD' ), // not present in HHVM 3.3.0-dev
+                       array( 'CURLFTPSSL_ALL' ),
+                       array( 'CURLFTPSSL_CONTROL' ),
+                       array( 'CURLFTPSSL_NONE' ),
+                       array( 'CURLFTPSSL_TRY' ),
+                       // array( 'CURLINFO_CERTINFO' ), // not present in HHVM 3.3.0-dev
+                       array( 'CURLINFO_CONNECT_TIME' ),
+                       array( 'CURLINFO_CONTENT_LENGTH_DOWNLOAD' ),
+                       array( 'CURLINFO_CONTENT_LENGTH_UPLOAD' ),
+                       array( 'CURLINFO_CONTENT_TYPE' ),
+                       array( 'CURLINFO_EFFECTIVE_URL' ),
+                       array( 'CURLINFO_FILETIME' ),
+                       array( 'CURLINFO_HEADER_OUT' ),
+                       array( 'CURLINFO_HEADER_SIZE' ),
+                       array( 'CURLINFO_HTTP_CODE' ),
+                       array( 'CURLINFO_NAMELOOKUP_TIME' ),
+                       array( 'CURLINFO_PRETRANSFER_TIME' ),
+                       array( 'CURLINFO_PRIVATE' ),
+                       array( 'CURLINFO_REDIRECT_COUNT' ),
+                       array( 'CURLINFO_REDIRECT_TIME' ),
+                       // array( 'CURLINFO_REDIRECT_URL' ), // not present in HHVM 3.3.0-dev
+                       array( 'CURLINFO_REQUEST_SIZE' ),
+                       array( 'CURLINFO_SIZE_DOWNLOAD' ),
+                       array( 'CURLINFO_SIZE_UPLOAD' ),
+                       array( 'CURLINFO_SPEED_DOWNLOAD' ),
+                       array( 'CURLINFO_SPEED_UPLOAD' ),
+                       array( 'CURLINFO_SSL_VERIFYRESULT' ),
+                       array( 'CURLINFO_STARTTRANSFER_TIME' ),
+                       array( 'CURLINFO_TOTAL_TIME' ),
+                       array( 'CURLMSG_DONE' ),
+                       array( 'CURLM_BAD_EASY_HANDLE' ),
+                       array( 'CURLM_BAD_HANDLE' ),
+                       array( 'CURLM_CALL_MULTI_PERFORM' ),
+                       array( 'CURLM_INTERNAL_ERROR' ),
+                       array( 'CURLM_OK' ),
+                       array( 'CURLM_OUT_OF_MEMORY' ),
+                       array( 'CURLOPT_AUTOREFERER' ),
+                       array( 'CURLOPT_BINARYTRANSFER' ),
+                       array( 'CURLOPT_BUFFERSIZE' ),
+                       array( 'CURLOPT_CAINFO' ),
+                       array( 'CURLOPT_CAPATH' ),
+                       // array( 'CURLOPT_CERTINFO' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLOPT_CLOSEPOLICY' ), // removed in PHP 5.6.0
+                       array( 'CURLOPT_CONNECTTIMEOUT' ),
+                       array( 'CURLOPT_CONNECTTIMEOUT_MS' ),
+                       array( 'CURLOPT_COOKIE' ),
+                       array( 'CURLOPT_COOKIEFILE' ),
+                       array( 'CURLOPT_COOKIEJAR' ),
+                       array( 'CURLOPT_COOKIESESSION' ),
+                       array( 'CURLOPT_CRLF' ),
+                       array( 'CURLOPT_CUSTOMREQUEST' ),
+                       array( 'CURLOPT_DNS_CACHE_TIMEOUT' ),
+                       array( 'CURLOPT_DNS_USE_GLOBAL_CACHE' ),
+                       array( 'CURLOPT_EGDSOCKET' ),
+                       array( 'CURLOPT_ENCODING' ),
+                       array( 'CURLOPT_FAILONERROR' ),
+                       array( 'CURLOPT_FILE' ),
+                       array( 'CURLOPT_FILETIME' ),
+                       array( 'CURLOPT_FOLLOWLOCATION' ),
+                       array( 'CURLOPT_FORBID_REUSE' ),
+                       array( 'CURLOPT_FRESH_CONNECT' ),
+                       array( 'CURLOPT_FTPAPPEND' ),
+                       array( 'CURLOPT_FTPLISTONLY' ),
+                       array( 'CURLOPT_FTPPORT' ),
+                       array( 'CURLOPT_FTPSSLAUTH' ),
+                       array( 'CURLOPT_FTP_CREATE_MISSING_DIRS' ),
+                       // array( 'CURLOPT_FTP_FILEMETHOD' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLOPT_FTP_SKIP_PASV_IP' ), // not present in HHVM 3.3.0-dev
+                       array( 'CURLOPT_FTP_SSL' ),
+                       array( 'CURLOPT_FTP_USE_EPRT' ),
+                       array( 'CURLOPT_FTP_USE_EPSV' ),
+                       array( 'CURLOPT_HEADER' ),
+                       array( 'CURLOPT_HEADERFUNCTION' ),
+                       array( 'CURLOPT_HTTP200ALIASES' ),
+                       array( 'CURLOPT_HTTPAUTH' ),
+                       array( 'CURLOPT_HTTPGET' ),
+                       array( 'CURLOPT_HTTPHEADER' ),
+                       array( 'CURLOPT_HTTPPROXYTUNNEL' ),
+                       array( 'CURLOPT_HTTP_VERSION' ),
+                       array( 'CURLOPT_INFILE' ),
+                       array( 'CURLOPT_INFILESIZE' ),
+                       array( 'CURLOPT_INTERFACE' ),
+                       array( 'CURLOPT_IPRESOLVE' ),
+                       // array( 'CURLOPT_KEYPASSWD' ), // not present in HHVM 3.3.0-dev
+                       array( 'CURLOPT_KRB4LEVEL' ),
+                       array( 'CURLOPT_LOW_SPEED_LIMIT' ),
+                       array( 'CURLOPT_LOW_SPEED_TIME' ),
+                       array( 'CURLOPT_MAXCONNECTS' ),
+                       array( 'CURLOPT_MAXREDIRS' ),
+                       // array( 'CURLOPT_MAX_RECV_SPEED_LARGE' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLOPT_MAX_SEND_SPEED_LARGE' ), // not present in HHVM 3.3.0-dev
+                       array( 'CURLOPT_NETRC' ),
+                       array( 'CURLOPT_NOBODY' ),
+                       array( 'CURLOPT_NOPROGRESS' ),
+                       array( 'CURLOPT_NOSIGNAL' ),
+                       array( 'CURLOPT_PORT' ),
+                       array( 'CURLOPT_POST' ),
+                       array( 'CURLOPT_POSTFIELDS' ),
+                       array( 'CURLOPT_POSTQUOTE' ),
+                       array( 'CURLOPT_POSTREDIR' ),
+                       array( 'CURLOPT_PRIVATE' ),
+                       array( 'CURLOPT_PROGRESSFUNCTION' ),
+                       // array( 'CURLOPT_PROTOCOLS' ), // not present in HHVM 3.3.0-dev
+                       array( 'CURLOPT_PROXY' ),
+                       array( 'CURLOPT_PROXYAUTH' ),
+                       array( 'CURLOPT_PROXYPORT' ),
+                       array( 'CURLOPT_PROXYTYPE' ),
+                       array( 'CURLOPT_PROXYUSERPWD' ),
+                       array( 'CURLOPT_PUT' ),
+                       array( 'CURLOPT_QUOTE' ),
+                       array( 'CURLOPT_RANDOM_FILE' ),
+                       array( 'CURLOPT_RANGE' ),
+                       array( 'CURLOPT_READDATA' ),
+                       array( 'CURLOPT_READFUNCTION' ),
+                       // array( 'CURLOPT_REDIR_PROTOCOLS' ), // not present in HHVM 3.3.0-dev
+                       array( 'CURLOPT_REFERER' ),
+                       array( 'CURLOPT_RESUME_FROM' ),
+                       array( 'CURLOPT_RETURNTRANSFER' ),
+                       // array( 'CURLOPT_SSH_AUTH_TYPES' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLOPT_SSH_HOST_PUBLIC_KEY_MD5' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLOPT_SSH_PRIVATE_KEYFILE' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLOPT_SSH_PUBLIC_KEYFILE' ), // not present in HHVM 3.3.0-dev
+                       array( 'CURLOPT_SSLCERT' ),
+                       array( 'CURLOPT_SSLCERTPASSWD' ),
+                       array( 'CURLOPT_SSLCERTTYPE' ),
+                       array( 'CURLOPT_SSLENGINE' ),
+                       array( 'CURLOPT_SSLENGINE_DEFAULT' ),
+                       array( 'CURLOPT_SSLKEY' ),
+                       array( 'CURLOPT_SSLKEYPASSWD' ),
+                       array( 'CURLOPT_SSLKEYTYPE' ),
+                       array( 'CURLOPT_SSLVERSION' ),
+                       array( 'CURLOPT_SSL_CIPHER_LIST' ),
+                       array( 'CURLOPT_SSL_VERIFYHOST' ),
+                       array( 'CURLOPT_SSL_VERIFYPEER' ),
+                       array( 'CURLOPT_STDERR' ),
+                       array( 'CURLOPT_TCP_NODELAY' ),
+                       array( 'CURLOPT_TIMECONDITION' ),
+                       array( 'CURLOPT_TIMEOUT' ),
+                       array( 'CURLOPT_TIMEOUT_MS' ),
+                       array( 'CURLOPT_TIMEVALUE' ),
+                       array( 'CURLOPT_TRANSFERTEXT' ),
+                       array( 'CURLOPT_UNRESTRICTED_AUTH' ),
+                       array( 'CURLOPT_UPLOAD' ),
+                       array( 'CURLOPT_URL' ),
+                       array( 'CURLOPT_USERAGENT' ),
+                       array( 'CURLOPT_USERPWD' ),
+                       array( 'CURLOPT_VERBOSE' ),
+                       array( 'CURLOPT_WRITEFUNCTION' ),
+                       array( 'CURLOPT_WRITEHEADER' ),
+                       // array( 'CURLPROTO_ALL' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLPROTO_DICT' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLPROTO_FILE' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLPROTO_FTP' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLPROTO_FTPS' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLPROTO_HTTP' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLPROTO_HTTPS' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLPROTO_LDAP' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLPROTO_LDAPS' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLPROTO_SCP' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLPROTO_SFTP' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLPROTO_TELNET' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLPROTO_TFTP' ), // not present in HHVM 3.3.0-dev
+                       array( 'CURLPROXY_HTTP' ),
+                       // array( 'CURLPROXY_SOCKS4' ), // not present in HHVM 3.3.0-dev
+                       array( 'CURLPROXY_SOCKS5' ),
+                       // array( 'CURLSSH_AUTH_DEFAULT' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLSSH_AUTH_HOST' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLSSH_AUTH_KEYBOARD' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLSSH_AUTH_NONE' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLSSH_AUTH_PASSWORD' ), // not present in HHVM 3.3.0-dev
+                       // array( 'CURLSSH_AUTH_PUBLICKEY' ), // not present in HHVM 3.3.0-dev
+                       array( 'CURLVERSION_NOW' ),
+                       array( 'CURL_HTTP_VERSION_1_0' ),
+                       array( 'CURL_HTTP_VERSION_1_1' ),
+                       array( 'CURL_HTTP_VERSION_NONE' ),
+                       array( 'CURL_IPRESOLVE_V4' ),
+                       array( 'CURL_IPRESOLVE_V6' ),
+                       array( 'CURL_IPRESOLVE_WHATEVER' ),
+                       array( 'CURL_NETRC_IGNORED' ),
+                       array( 'CURL_NETRC_OPTIONAL' ),
+                       array( 'CURL_NETRC_REQUIRED' ),
+                       array( 'CURL_TIMECOND_IFMODSINCE' ),
+                       array( 'CURL_TIMECOND_IFUNMODSINCE' ),
+                       array( 'CURL_TIMECOND_LASTMOD' ),
+                       array( 'CURL_VERSION_IPV6' ),
+                       array( 'CURL_VERSION_KERBEROS4' ),
+                       array( 'CURL_VERSION_LIBZ' ),
+                       array( 'CURL_VERSION_SSL' ),
+               );
+       }
+
+       /**
+        * Added this test based on an issue experienced with HHVM 3.3.0-dev
+        * where it did not define a cURL constant.
+        *
+        * @bug 70570
+        * @dataProvider provideCurlConstants
+        */
+       public function testCurlConstants( $value ) {
+               $this->assertTrue( defined( $value ), $value . ' not defined' );
+       }
 }
 
 /**
index 2fce6bf..678c89b 100644 (file)
@@ -34,7 +34,7 @@ class ImportTest extends MediaWikiLangTestCase {
                        }
                };
 
-               $importer = new WikiImporter( $source );
+               $importer = new WikiImporter( $source, ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
                $importer->setPageOutCallback( $callback );
                $importer->doImport();
 
@@ -45,7 +45,7 @@ class ImportTest extends MediaWikiLangTestCase {
                return array(
                        array(
                                <<< EOF
-<mediawiki>
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
        <page>
                <title>Test</title>
                <ns>0</ns>
@@ -59,10 +59,10 @@ class ImportTest extends MediaWikiLangTestCase {
                                <id>10</id>
                        </contributor>
                        <comment>Admin moved page [[Test]] to [[Test22]]</comment>
-                       <text xml:space="preserve" bytes="20">#REDIRECT [[Test22]]</text>
-                       <sha1>tq456o9x3abm7r9ozi6km8yrbbc56o6</sha1>
                        <model>wikitext</model>
                        <format>text/x-wiki</format>
+                       <text xml:space="preserve" bytes="20">#REDIRECT [[Test22]]</text>
+                       <sha1>tq456o9x3abm7r9ozi6km8yrbbc56o6</sha1>
                </revision>
        </page>
 </mediawiki>
@@ -72,7 +72,7 @@ EOF
                        ),
                        array(
                                <<< EOF
-<mediawiki>
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.9/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.9/ http://www.mediawiki.org/xml/export-0.9.xsd" version="0.9" xml:lang="en">
        <page>
                <title>Test</title>
                <ns>0</ns>
index 72114e9..7b84107 100644 (file)
@@ -1,5 +1,9 @@
 <?php
 
+/**
+ * @group Database
+ */
+
 class LinkerTest extends MediaWikiLangTestCase {
 
        /**
diff --git a/tests/phpunit/includes/LocalisationCacheTest.php b/tests/phpunit/includes/LocalisationCacheTest.php
deleted file mode 100644 (file)
index f98410a..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/**
- * @covers LocalisationCache
- */
-class LocalisationCacheTest extends MediaWikiTestCase {
-       public function testPuralRulesFallback() {
-               $cache = Language::getLocalisationCache();
-
-               $this->assertEquals(
-                       $cache->getItem( 'ar', 'pluralRules' ),
-                       $cache->getItem( 'arz', 'pluralRules' ),
-                       'arz plural rules (undefined) fallback to ar (defined)'
-               );
-
-               $this->assertEquals(
-                       $cache->getItem( 'ar', 'compiledPluralRules' ),
-                       $cache->getItem( 'arz', 'compiledPluralRules' ),
-                       'arz compiled plural rules (undefined) fallback to ar (defined)'
-               );
-
-               $this->assertNotEquals(
-                       $cache->getItem( 'ksh', 'pluralRules' ),
-                       $cache->getItem( 'de', 'pluralRules' ),
-                       'ksh plural rules (defined) dont fallback to de (defined)'
-               );
-
-               $this->assertNotEquals(
-                       $cache->getItem( 'ksh', 'compiledPluralRules' ),
-                       $cache->getItem( 'de', 'compiledPluralRules' ),
-                       'ksh compiled plural rules (defined) dont fallback to de (defined)'
-               );
-       }
-}
index c82dc42..05c1a66 100644 (file)
@@ -8,6 +8,9 @@ class MWTimestampTest extends MediaWikiLangTestCase {
        protected function setUp() {
                parent::setUp();
 
+               // Avoid 'GetHumanTimestamp' hook and others
+               $this->setMwGlobals( 'wgHooks', array() );
+
                RequestContext::getMain()->setLanguage( Language::factory( 'en' ) );
        }
 
@@ -29,7 +32,7 @@ class MWTimestampTest extends MediaWikiLangTestCase {
                $this->assertEquals( '1406833268', $timestamp->__toString() );
        }
 
-       public function provideValidTimestampDifferences() {
+       public static function provideValidTimestampDifferences() {
                return array(
                        array( '1406833268', '1406833269', '00 00 00 01' ),
                        array( '1406833268', '1406833329', '00 00 01 01' ),
index c2acec0..4c5424c 100644 (file)
@@ -34,7 +34,7 @@ class MessageTest extends MediaWikiLangTestCase {
                $this->assertEquals( $expectedLang, $langProperty->getValue( $message ) );
        }
 
-       public function provideConstructor() {
+       public static function provideConstructor() {
                $langDe = Language::factory( 'de' );
                $langEn = Language::factory( 'en' );
 
@@ -45,7 +45,7 @@ class MessageTest extends MediaWikiLangTestCase {
                );
        }
 
-       public function provideTestParams() {
+       public static function provideTestParams() {
                return array(
                        array( array() ),
                        array( array( 'foo' ), 'foo' ),
@@ -109,9 +109,15 @@ class MessageTest extends MediaWikiLangTestCase {
                $this->assertInstanceOf( 'Message', wfMessage( 'mainpage' ) );
                $this->assertInstanceOf( 'Message', wfMessage( 'i-dont-exist-evar' ) );
                $this->assertEquals( 'Main Page', wfMessage( 'mainpage' )->text() );
-               $this->assertEquals( '&lt;i-dont-exist-evar&gt;', wfMessage( 'i-dont-exist-evar' )->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() );
                $this->assertEquals( '<i-dont-exist-evar>', wfMessage( 'i-dont-exist-evar' )->plain() );
+               $this->assertEquals( '<i<dont>exist-evar>', wfMessage( 'i<dont>exist-evar' )->plain() );
                $this->assertEquals( '&lt;i-dont-exist-evar&gt;', wfMessage( 'i-dont-exist-evar' )->escaped() );
+               $this->assertEquals(
+                       '&lt;i&lt;dont&gt;exist-evar&gt;',
+                       wfMessage( 'i<dont>exist-evar' )->escaped()
+               );
        }
 
        /**
@@ -271,6 +277,55 @@ class MessageTest extends MediaWikiLangTestCase {
                );
        }
 
+       public function messagePlaintextParamsProvider() {
+               return array(
+                       array(
+                               'one $2 <div>foo</div> [[Bar]] {{Baz}} &lt;',
+                               'plain',
+                       ),
+
+                       array(
+                               // expect
+                               'one $2 <div>foo</div> [[Bar]] {{Baz}} &lt;',
+                               // format
+                               'text',
+                       ),
+                       array(
+                               'one $2 &lt;div&gt;foo&lt;/div&gt; [[Bar]] {{Baz}} &amp;lt;',
+                               'escaped',
+                       ),
+
+                       array(
+                               'one $2 &lt;div&gt;foo&lt;/div&gt; [[Bar]] {{Baz}} &amp;lt;',
+                               'parse',
+                       ),
+
+                       array(
+                               "<p>one $2 &lt;div&gt;foo&lt;/div&gt; [[Bar]] {{Baz}} &amp;lt;\n</p>",
+                               'parseAsBlock',
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider messagePlaintextParamsProvider
+        * @covers Message::plaintextParams
+        */
+       public function testMessagePlaintextParams( $expect, $format ) {
+               $lang = Language::factory( 'en' );
+
+               $msg = new RawMessage( '$1 $2' );
+               $params = array(
+                       'one $2',
+                       '<div>foo</div> [[Bar]] {{Baz}} &lt;',
+               );
+               $this->assertEquals(
+                       $expect,
+                       $msg->inLanguage( $lang )->plaintextParams( $params )->$format(),
+                       "Fail formatting for $format"
+               );
+       }
+
        /**
         * @covers Message::inContentLanguage
         */
diff --git a/tests/phpunit/includes/MovePageTest.php b/tests/phpunit/includes/MovePageTest.php
new file mode 100644 (file)
index 0000000..027b877
--- /dev/null
@@ -0,0 +1,39 @@
+<?php
+
+class MovePageTest extends MediaWikiTestCase {
+
+       /**
+        * @dataProvider provideIsValidMove
+        * @covers MovePage::isValidMove
+        * @covers MovePage::isValidFileMove
+        */
+       public function testIsValidMove( $old, $new, $error ) {
+               $this->setMwGlobals( 'wgContentHandlerUseDB', false );
+               $mp = new MovePage(
+                       Title::newFromText( $old ),
+                       Title::newFromText( $new )
+               );
+               $status = $mp->isValidMove();
+               if ( $error === true ) {
+                       $this->assertTrue( $status->isGood() );
+               } else {
+                       $this->assertTrue( $status->hasMessage( $error ) );
+               }
+       }
+
+       /**
+        * This should be kept in sync with TitleTest::provideTestIsValidMoveOperation
+        */
+       public static function provideIsValidMove() {
+               return array(
+                       // for MovePage::isValidMove
+                       array( 'Test', 'Test', 'selfmove' ),
+                       array( 'Special:FooBar', 'Test', 'immobile-source-namespace' ),
+                       array( 'Test', 'Special:FooBar', 'immobile-target-namespace' ),
+                       array( 'MediaWiki:Common.js', 'Help:Some wikitext page', 'bad-target-model' ),
+                       array( 'Page', 'File:Test.jpg', 'nonfile-cannot-move-to-file' ),
+                       // for MovePage::isValidFileMove
+                       array( 'File:Test.jpg', 'Page', 'imagenocrossnamespace' ),
+               );
+       }
+}
index 5c1994b..89d1de7 100644 (file)
@@ -141,7 +141,15 @@ class OutputPageTest extends MediaWikiTestCase {
                        // Load module script only
                        array(
                                array( 'test.foo', ResourceLoaderModule::TYPE_SCRIPTS ),
-                               '<script src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.foo&amp;only=scripts&amp;skin=fallback&amp;*"></script>
+                               '<script>if(window.mw){
+document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\u0026amp;lang=en\u0026amp;modules=test.foo\u0026amp;only=scripts\u0026amp;skin=fallback\u0026amp;*\"\u003E\u003C/script\u003E");
+}</script>
+'
+                       ),
+                       array(
+                               // Don't condition wrap raw modules (like the startup module)
+                               array( 'test.raw', ResourceLoaderModule::TYPE_SCRIPTS ),
+                               '<script src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.raw&amp;only=scripts&amp;skin=fallback&amp;*"></script>
 '
                        ),
                        // Load module styles only
@@ -151,18 +159,22 @@ class OutputPageTest extends MediaWikiTestCase {
                                '<link rel=stylesheet href="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.bar%2Cbaz%2Cfoo&amp;only=styles&amp;skin=fallback&amp;*">
 '
                        ),
-                       // Load private module (scripts)
+                       // Load private module (only=scripts)
                        array(
                                array( 'test.quux', ResourceLoaderModule::TYPE_SCRIPTS ),
-                               '<script>if(window.mw){mw.test.baz({token:123});mw.loader.state({"test.quux":"ready"});}
-</script>
+                               '<script>if(window.mw){
+mw.test.baz({token:123});mw.loader.state({"test.quux":"ready"});
+
+}</script>
 '
                        ),
                        // Load private module (combined)
                        array(
                                array( 'test.quux', ResourceLoaderModule::TYPE_COMBINED ),
-                               '<script>mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"css":[".mw-icon{transition:none}\n"]},{});
-</script>
+                               '<script>if(window.mw){
+mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"css":[".mw-icon{transition:none}\n"]},{},{});
+
+}</script>
 '
                        ),
                        // Load module script with with ESI
@@ -175,6 +187,24 @@ class OutputPageTest extends MediaWikiTestCase {
                        array(
                                array( 'test.foo', ResourceLoaderModule::TYPE_STYLES, true ),
                                '<style><esi:include src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.foo&amp;only=styles&amp;skin=fallback&amp;*" /></style>
+',
+                       ),
+                       // Load no modules
+                       array(
+                               array( array(), ResourceLoaderModule::TYPE_COMBINED ),
+                               '',
+                       ),
+                       // noscript group
+                       array(
+                               array( 'test.noscript', ResourceLoaderModule::TYPE_STYLES ),
+                               '<noscript><link rel=stylesheet href="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.noscript&amp;only=styles&amp;skin=fallback&amp;*"></noscript>
+'
+                       ),
+                       // 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>
 ',
                        ),
                );
@@ -218,6 +248,22 @@ class OutputPageTest extends MediaWikiTestCase {
                                'styles' => '/* pref-animate=off */ .mw-icon { transition: none; }',
                                'group' => 'private',
                        )),
+                       'test.raw' => new ResourceLoaderTestModule( array(
+                               'script' => 'mw.test.baz( { token: 123 } );',
+                               'isRaw' => true,
+                       )),
+                       'test.noscript' => new ResourceLoaderTestModule( array(
+                               'styles' => '.mw-test-noscript { content: "style"; }',
+                               'group' => 'noscript',
+                       )),
+                       'test.group.bar' => new ResourceLoaderTestModule( array(
+                               'styles' => '.mw-group-bar { content: "style"; }',
+                               'group' => 'bar',
+                       )),
+                       'test.group.foo' => new ResourceLoaderTestModule( array(
+                               'styles' => '.mw-group-foo { content: "style"; }',
+                               'group' => 'foo',
+                       )),
                ) );
                $links = $method->invokeArgs( $out, $args );
                // Strip comments to avoid variation due to wgDBname in WikiID and cache key
index ceb794b..5ad8aca 100644 (file)
@@ -30,4 +30,10 @@ class PasswordTest extends MediaWikiTestCase {
 
                $this->assertFalse( $invalid1->equals( $invalid2 ) );
        }
+
+       public function testInvalidPlaintext() {
+               $invalid = User::getPasswordFactory()->newFromPlaintext( null );
+
+               $this->assertInstanceOf( 'InvalidPassword', $invalid );
+       }
 }
diff --git a/tests/phpunit/includes/PrefixSearchTest.php b/tests/phpunit/includes/PrefixSearchTest.php
new file mode 100644 (file)
index 0000000..a33f6a6
--- /dev/null
@@ -0,0 +1,216 @@
+<?php
+/**
+ * @group Search
+ * @group Database
+ */
+class PrefixSearchTest extends MediaWikiLangTestCase {
+
+       protected function setUp() {
+               parent::setUp();
+
+               if ( !$this->isWikitextNS( NS_MAIN ) ) {
+                       $this->markTestSkipped( 'Main namespace does not support wikitext.' );
+               }
+
+               $this->insertPages();
+
+               // Avoid special pages from extensions interferring with the tests
+               $this->setMwGlobals( 'wgSpecialPages', array() );
+       }
+
+       protected function searchProvision( Array $results = null ) {
+               if ( $results === null ) {
+                       $this->setMwGlobals( 'wgHooks', array() );
+               } else {
+                       $this->setMwGlobals( 'wgHooks', array(
+                               'PrefixSearchBackend' => array(
+                                       function ( $namespaces, $search, $limit, &$srchres ) use ( $results ) {
+                                               $srchres = $results;
+                                               return false;
+                                       }
+                               ),
+                       ) );
+               }
+       }
+
+       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( 'Talk:Sandbox' );
+               $this->insertPage( 'Talk:Example' );
+
+               $this->insertPage( 'User:Example' );
+       }
+
+       public static function provideSearch() {
+               return array(
+                       array( array(
+                               'Empty string',
+                               'query' => '',
+                               'results' => array(),
+                       ) ),
+                       array( array(
+                               'Main namespace with title prefix',
+                               'query' => 'Ex',
+                               'results' => array(
+                                       'Example',
+                                       'Example/Baz',
+                                       'Example Bar',
+                               ),
+                       ) ),
+                       array( array(
+                               'Talk namespace prefix',
+                               'query' => 'Talk:',
+                               'results' => array(
+                                       'Talk:Example',
+                                       'Talk:Sandbox',
+                               ),
+                       ) ),
+                       array( array(
+                               'User namespace prefix',
+                               'query' => 'User:',
+                               'results' => array(
+                                       'User:Example',
+                               ),
+                       ) ),
+                       array( array(
+                               'Special namespace prefix',
+                               'query' => 'Special:',
+                               'results' => array(
+                                       'Special:ActiveUsers',
+                                       'Special:AllMessages',
+                                       'Special:AllMyFiles',
+                               ),
+                       ) ),
+                       array( array(
+                               'Special namespace with prefix',
+                               'query' => 'Special:Un',
+                               'results' => array(
+                                       'Special:Unblock',
+                                       'Special:UncategorizedCategories',
+                                       'Special:UncategorizedFiles',
+                               ),
+                       ) ),
+                       array( array(
+                               'Special page name',
+                               'query' => 'Special:EditWatchlist',
+                               'results' => array(
+                                       'Special:EditWatchlist',
+                               ),
+                       ) ),
+                       array( array(
+                               'Special page subpages',
+                               'query' => 'Special:EditWatchlist/',
+                               'results' => array(
+                                       'Special:EditWatchlist/clear',
+                                       'Special:EditWatchlist/raw',
+                               ),
+                       ) ),
+                       array( array(
+                               'Special page subpages with prefix',
+                               'query' => 'Special:EditWatchlist/cl',
+                               'results' => array(
+                                       'Special:EditWatchlist/clear',
+                               ),
+                       ) ),
+               );
+       }
+
+       /**
+        * @dataProvider provideSearch
+        * @covers PrefixSearch::search
+        * @covers PrefixSearch::searchBackend
+        */
+       public function testSearch( Array $case ) {
+               $this->searchProvision( null );
+               $searcher = new StringPrefixSearch;
+               $results = $searcher->search( $case['query'], 3 );
+               $this->assertEquals(
+                       $case['results'],
+                       $results,
+                       $case[0]
+               );
+       }
+
+       public static function provideSearchBackend() {
+               return array(
+                       array( array(
+                               'Simple case',
+                               'provision' => array(
+                                       'Bar',
+                                       'Barcelona',
+                                       'Barbara',
+                               ),
+                               'query' => 'Bar',
+                               'results' => array(
+                                       'Bar',
+                                       'Barcelona',
+                                       'Barbara',
+                               ),
+                       ) ),
+                       array( array(
+                               'Exact match not on top (bug 70958)',
+                               'provision' => array(
+                                       'Barcelona',
+                                       'Bar',
+                                       'Barbara',
+                               ),
+                               'query' => 'Bar',
+                               'results' => array(
+                                       'Bar',
+                                       'Barcelona',
+                                       'Barbara',
+                               ),
+                       ) ),
+                       array( array(
+                               'Exact match missing (bug 70958)',
+                               'provision' => array(
+                                       'Barcelona',
+                                       'Barbara',
+                                       'Bart',
+                               ),
+                               'query' => 'Bar',
+                               'results' => array(
+                                       'Bar',
+                                       'Barcelona',
+                                       'Barbara',
+                               ),
+                       ) ),
+                       array( array(
+                               'Exact match missing and not existing',
+                               'provision' => array(
+                                       'Exile',
+                                       'Exist',
+                                       'External',
+                               ),
+                               'query' => 'Ex',
+                               'results' => array(
+                                       'Exile',
+                                       'Exist',
+                                       'External',
+                               ),
+                       ) ),
+               );
+       }
+
+       /**
+        * @dataProvider provideSearchBackend
+        * @covers PrefixSearch::searchBackend
+        */
+       public function testSearchBackend( Array $case ) {
+               $this->searchProvision( $case['provision'] );
+               $searcher = new StringPrefixSearch;
+               $results = $searcher->search( $case['query'], 3 );
+               $this->assertEquals(
+                       $case['results'],
+                       $results,
+                       $case[0]
+               );
+       }
+}
index cae0e52..a9e5be2 100644 (file)
@@ -88,9 +88,9 @@ class RequestContextTest extends MediaWikiTestCase {
                unset( $sc ); // restore previous context
 
                $info = $context->exportSession();
-               $this->assertEquals( $oInfo['ip'], $info['ip'], "Correct initial IP address." );
-               $this->assertEquals( $oInfo['headers'], $info['headers'], "Correct initial headers." );
-               $this->assertEquals( $oInfo['sessionId'], $info['sessionId'], "Correct initial session ID." );
-               $this->assertEquals( $oInfo['userId'], $info['userId'], "Correct initial user ID." );
+               $this->assertEquals( $oInfo['ip'], $info['ip'], "Correct restored IP address." );
+               $this->assertEquals( $oInfo['headers'], $info['headers'], "Correct restored headers." );
+               $this->assertEquals( $oInfo['sessionId'], $info['sessionId'], "Correct restored session ID." );
+               $this->assertEquals( $oInfo['userId'], $info['userId'], "Correct restored user ID." );
        }
 }
index 86e8e8b..2585811 100644 (file)
@@ -47,7 +47,7 @@ class TestSample extends MediaWikiLangTestCase {
         * If you want to run a the same test with a variety of data, use a data provider.
         * see: http://www.phpunit.de/manual/3.4/en/writing-tests-for-phpunit.html
         */
-       public function provideTitles() {
+       public static function provideTitles() {
                return array(
                        array( 'Text', NS_MEDIA, 'Media:Text' ),
                        array( 'Text', null, 'Text' ),
index 50c1e50..f960f48 100644 (file)
@@ -6,12 +6,6 @@
  */
 class SanitizerTest extends MediaWikiTestCase {
 
-       protected function setUp() {
-               parent::setUp();
-
-               AutoLoader::loadClass( 'Sanitizer' );
-       }
-
        /**
         * @covers Sanitizer::decodeCharReferences
         */
index 610a6ac..754568d 100644 (file)
@@ -5,24 +5,41 @@
  * like password if we log in via the API.
  */
 class TestUser {
+       /**
+        * @deprecated Since 1.25. Use TestUser::getUser()->getName()
+        * @private
+        * @var string
+        */
        public $username;
+
+       /**
+        * @deprecated Since 1.25. Use TestUser::getPassword()
+        * @private
+        * @var string
+        */
        public $password;
-       public $email;
-       public $groups;
+
+       /**
+        * @deprecated Since 1.25. Use TestUser::getUser()
+        * @private
+        * @var User
+        */
        public $user;
 
+       private function assertNotReal() {
+               global $wgDBprefix;
+               if ( $wgDBprefix !== MediaWikiTestCase::DB_PREFIX && $wgDBprefix !== MediaWikiTestCase::ORA_DB_PREFIX ) {
+                       throw new MWException( "Can't create user on real database" );
+               }
+       }
+
        public function __construct( $username, $realname = 'Real Name',
                $email = 'sample@example.com', $groups = array()
        ) {
-               $this->username = $username;
-               $this->realname = $realname;
-               $this->email = $email;
-               $this->groups = $groups;
+               $this->assertNotReal();
 
-               // don't allow user to hardcode or select passwords -- people sometimes run tests
-               // on live wikis. Sometimes we create sysop users in these tests. A sysop user with
-               // a known password would be a Bad Thing.
-               $this->password = User::randomPassword();
+               $this->username = $username;
+               $this->password = 'TestUser';
 
                $this->user = User::newFromName( $this->username );
                $this->user->load();
@@ -31,32 +48,99 @@ class TestUser {
                // But for now, we just need to create or update the user with the desired properties.
                // we particularly need the new password, since we just generated it randomly.
                // In core MediaWiki, there is no functionality to delete users, so this is the best we can do.
-               if ( !$this->user->getID() ) {
+               if ( !$this->user->isLoggedIn() ) {
                        // create the user
                        $this->user = User::createNew(
                                $this->username, array(
-                                       "email" => $this->email,
-                                       "real_name" => $this->realname
+                                       "email" => $email,
+                                       "real_name" => $realname
                                )
                        );
+
                        if ( !$this->user ) {
-                               throw new Exception( "error creating user" );
+                               throw new MWException( "Error creating TestUser " . $username );
                        }
                }
 
-               // update the user to use the new random password and other details
-               $this->user->setPassword( $this->password );
-               $this->user->setEmail( $this->email );
-               $this->user->setRealName( $this->realname );
+               // Update the user to use the password and other details
+               $change = $this->setPassword( $this->password ) ||
+                       $this->setEmail( $email ) ||
+                       $this->setRealName( $realname );
 
                // Adjust groups by adding any missing ones and removing any extras
                $currentGroups = $this->user->getGroups();
-               foreach ( array_diff( $this->groups, $currentGroups ) as $group ) {
+               foreach ( array_diff( $groups, $currentGroups ) as $group ) {
                        $this->user->addGroup( $group );
                }
-               foreach ( array_diff( $currentGroups, $this->groups ) as $group ) {
+               foreach ( array_diff( $currentGroups, $groups ) as $group ) {
                        $this->user->removeGroup( $group );
                }
-               $this->user->saveSettings();
+               if ( $change ) {
+                       $this->user->saveSettings();
+               }
+       }
+
+       /**
+        * @param string $realname
+        * @return bool
+        */
+       private function setRealName( $realname ) {
+               if ( $this->user->getRealName() !== $realname ) {
+                       $this->user->setRealName( $realname );
+                       return true;
+               }
+
+               return false;
+       }
+
+       /**
+        * @param string $email
+        * @return bool
+        */
+       private function setEmail( $email ) {
+               if ( $this->user->getEmail() !== $email ) {
+                       $this->user->setEmail( $email );
+                       return true;
+               }
+
+               return false;
+       }
+
+       /**
+        * @param string $password
+        * @return bool
+        */
+       private function setPassword( $password ) {
+               $passwordFactory = $this->user->getPasswordFactory();
+               $oldDefaultType = $passwordFactory->getDefaultType();
+
+               // A is unsalted MD5 (thus fast) ... we don't care about security here, this is test only
+               $passwordFactory->setDefaultType( 'A' );
+               $newPassword = $passwordFactory->newFromPlaintext( $password, $this->user->getPassword() );
+
+               $change = false;
+               if ( !$this->user->getPassword()->equals( $newPassword ) ) {
+                       // Password changed
+                       $this->user->setPassword( $password );
+                       $change = true;
+               }
+
+               $passwordFactory->setDefaultType( $oldDefaultType );
+
+               return $change;
+       }
+
+       /**
+        * @return User
+        */
+       public function getUser() {
+               return $this->user;
+       }
+
+       /**
+        * @return string
+        */
+       public function getPassword() {
+               return $this->password;
        }
 }
index e4c7623..0f7069a 100644 (file)
@@ -64,7 +64,7 @@ class TitleArrayFromResultTest extends MediaWikiTestCase {
                $this->assertEquals( $title, $object->current->mTextform );
        }
 
-       public function provideNumberOfRows() {
+       public static function provideNumberOfRows() {
                return array(
                        array( 0 ),
                        array( 1 ),
index d2400b3..6af1862 100644 (file)
@@ -403,7 +403,8 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
 
                $this->setTitle( NS_USER );
                $this->setUserPerm( '' );
-               $this->assertEquals( array( array( 'badaccess-group0' ), array( 'namespaceprotected', 'User', 'bogus' ) ),
+               $this->assertEquals( array( array( 'badaccess-group0' ),
+                               array( 'namespaceprotected', 'User', 'bogus' ) ),
                        $this->title->getUserPermissionsErrors( 'bogus', $this->user ) );
 
                $this->setTitle( NS_MEDIAWIKI );
@@ -630,7 +631,8 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
 
                $this->assertEquals( false,
                        $this->title->userCan( 'bogus', $this->user ) );
-               $this->assertEquals( array( array( "cascadeprotected", 2, "* [[:Bogus]]\n* [[:UnBogus]]\n", 'bogus' ),
+               $this->assertEquals( array(
+                               array( "cascadeprotected", 2, "* [[:Bogus]]\n* [[:UnBogus]]\n", 'bogus' ),
                                array( "cascadeprotected", 2, "* [[:Bogus]]\n* [[:UnBogus]]\n", 'bogus' ),
                                array( "cascadeprotected", 2, "* [[:Bogus]]\n* [[:UnBogus]]\n", 'bogus' ) ),
                        $this->title->getUserPermissionsErrors( 'bogus', $this->user ) );
@@ -648,10 +650,10 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
        public function testActionPermissions() {
                $this->setUserPerm( array( "createpage" ) );
                $this->setTitle( NS_MAIN, "test page" );
-               $this->title->mTitleProtection['pt_create_perm'] = '';
-               $this->title->mTitleProtection['pt_user'] = $this->user->getID();
-               $this->title->mTitleProtection['pt_expiry'] = wfGetDB( DB_SLAVE )->getInfinity();
-               $this->title->mTitleProtection['pt_reason'] = 'test';
+               $this->title->mTitleProtection['permission'] = '';
+               $this->title->mTitleProtection['user'] = $this->user->getID();
+               $this->title->mTitleProtection['expiry'] = wfGetDB( DB_SLAVE )->getInfinity();
+               $this->title->mTitleProtection['reason'] = 'test';
                $this->title->mCascadeRestriction = false;
 
                $this->assertEquals( array( array( 'titleprotected', 'Useruser', 'test' ) ),
@@ -659,7 +661,7 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                $this->assertEquals( false,
                        $this->title->userCan( 'create', $this->user ) );
 
-               $this->title->mTitleProtection['pt_create_perm'] = 'sysop';
+               $this->title->mTitleProtection['permission'] = 'editprotected';
                $this->setUserPerm( array( 'createpage', 'protect' ) );
                $this->assertEquals( array( array( 'titleprotected', 'Useruser', 'test' ) ),
                        $this->title->getUserPermissionsErrors( 'create', $this->user ) );
index d0f418b..a4bc427 100644 (file)
@@ -39,84 +39,61 @@ class TitleTest extends MediaWikiTestCase {
                }
        }
 
-       /**
-        * See also mediawiki.Title.test.js
-        * @covers Title::secureAndSplit
-        * @todo This method should be split into 2 separate tests each with a provider
-        * @note This mainly tests MediaWikiTitleCodec::parseTitle().
-        */
-       public function testSecureAndSplit() {
-               $this->setMwGlobals( array(
-                       'wgLocalInterwikis' => array( 'localtestiw' ),
-                       'wgHooks' => array(
-                               'InterwikiLoadPrefix' => array(
-                                       function ( $prefix, &$data ) {
-                                               if ( $prefix === 'localtestiw' ) {
-                                                       $data = array( 'iw_url' => 'localtestiw' );
-                                               } elseif ( $prefix === 'remotetestiw' ) {
-                                                       $data = array( 'iw_url' => 'remotetestiw' );
-                                               }
-                                               return false;
-                                       }
-                               )
-                       )
-               ));
-               // Valid
-               foreach ( array(
-                       'Sandbox',
-                       'A "B"',
-                       'A \'B\'',
-                       '.com',
-                       '~',
-                       '#',
-                       '"',
-                       '\'',
-                       'Talk:Sandbox',
-                       'Talk:Foo:Sandbox',
-                       'File:Example.svg',
-                       'File_talk:Example.svg',
-                       'Foo/.../Sandbox',
-                       'Sandbox/...',
-                       'A~~',
-                       ':A',
+       public static function provideValidSecureAndSplit() {
+               return array(
+                       array( 'Sandbox' ),
+                       array( 'A "B"' ),
+                       array( 'A \'B\'' ),
+                       array( '.com' ),
+                       array( '~' ),
+                       array( '#' ),
+                       array( '"' ),
+                       array( '\'' ),
+                       array( 'Talk:Sandbox' ),
+                       array( 'Talk:Foo:Sandbox' ),
+                       array( 'File:Example.svg' ),
+                       array( 'File_talk:Example.svg' ),
+                       array( 'Foo/.../Sandbox' ),
+                       array( 'Sandbox/...' ),
+                       array( 'A~~' ),
+                       array( ':A' ),
                        // Length is 256 total, but only title part matters
-                       'Category:' . str_repeat( 'x', 248 ),
-                       str_repeat( 'x', 252 ),
+                       array( 'Category:' . str_repeat( 'x', 248 ) ),
+                       array( str_repeat( 'x', 252 ) ),
                        // interwiki prefix
-                       'localtestiw: #anchor',
-                       'localtestiw:',
-                       'localtestiw:foo',
-                       'localtestiw: foo # anchor',
-                       'localtestiw: Talk: Sandbox # anchor',
-                       'remotetestiw:',
-                       'remotetestiw: Talk: # anchor',
-                       'remotetestiw: #bar',
-                       'remotetestiw: Talk:',
-                       'remotetestiw: Talk: Foo',
-                       'localtestiw:remotetestiw:',
-                       'localtestiw:remotetestiw:foo'
-               ) as $text ) {
-                       $this->assertInstanceOf( 'Title', Title::newFromText( $text ), "Valid: $text" );
-               }
+                       array( 'localtestiw: #anchor' ),
+                       array( 'localtestiw:' ),
+                       array( 'localtestiw:foo' ),
+                       array( 'localtestiw: foo # anchor' ),
+                       array( 'localtestiw: Talk: Sandbox # anchor' ),
+                       array( 'remotetestiw:' ),
+                       array( 'remotetestiw: Talk: # anchor' ),
+                       array( 'remotetestiw: #bar' ),
+                       array( 'remotetestiw: Talk:' ),
+                       array( 'remotetestiw: Talk: Foo' ),
+                       array( 'localtestiw:remotetestiw:' ),
+                       array( 'localtestiw:remotetestiw:foo' )
+               );
+       }
 
-               // Invalid
-               foreach ( array(
-                       '',
-                       ':',
-                       '__  __',
-                       '  __  ',
+       public static function provideInvalidSecureAndSplit() {
+               return array(
+                       array( '' ),
+                       array( ':' ),
+                       array( '__  __' ),
+                       array( '  __  ' ),
                        // Bad characters forbidden regardless of wgLegalTitleChars
-                       'A [ B',
-                       'A ] B',
-                       'A { B',
-                       'A } B',
-                       'A < B',
-                       'A > B',
-                       'A | B',
+                       array( 'A [ B' ),
+                       array( 'A ] B' ),
+                       array( 'A { B' ),
+                       array( 'A } B' ),
+                       array( 'A < B' ),
+                       array( 'A > B' ),
+                       array( 'A | B' ),
                        // URL encoding
-                       'A%20B',
-                       'A%23B',
-                       'A%2523B',
+                       array( 'A%20B' ),
+                       array( 'A%23B' ),
+                       array( 'A%2523B' ),
                        // XML/HTML character entity references
                        // Note: Commented out because they are not marked invalid by the PHP test as
                        // Title::newFromText runs Sanitizer::decodeCharReferencesAndNormalize first.
@@ -124,32 +101,70 @@ class TitleTest extends MediaWikiTestCase {
                        //'A &#233; B',
                        //'A &#x00E9; B',
                        // Subject of NS_TALK does not roundtrip to NS_MAIN
-                       'Talk:File:Example.svg',
+                       array( 'Talk:File:Example.svg' ),
                        // Directory navigation
-                       '.',
-                       '..',
-                       './Sandbox',
-                       '../Sandbox',
-                       'Foo/./Sandbox',
-                       'Foo/../Sandbox',
-                       'Sandbox/.',
-                       'Sandbox/..',
+                       array( '.' ),
+                       array( '..' ),
+                       array( './Sandbox' ),
+                       array( '../Sandbox' ),
+                       array( 'Foo/./Sandbox' ),
+                       array( 'Foo/../Sandbox' ),
+                       array( 'Sandbox/.' ),
+                       array( 'Sandbox/..' ),
                        // Tilde
-                       'A ~~~ Name',
-                       'A ~~~~ Signature',
-                       'A ~~~~~ Timestamp',
-                       str_repeat( 'x', 256 ),
+                       array( 'A ~~~ Name' ),
+                       array( 'A ~~~~ Signature' ),
+                       array( 'A ~~~~~ Timestamp' ),
+                       array( str_repeat( 'x', 256 ) ),
                        // Namespace prefix without actual title
-                       'Talk:',
-                       'Talk:#',
-                       'Category: ',
-                       'Category: #bar',
+                       array( 'Talk:' ),
+                       array( 'Talk:#' ),
+                       array( 'Category: ' ),
+                       array( 'Category: #bar' ),
                        // interwiki prefix
-                       'localtestiw: Talk: # anchor',
-                       'localtestiw: Talk:'
-               ) as $text ) {
-                       $this->assertNull( Title::newFromText( $text ), "Invalid: $text" );
-               }
+                       array( 'localtestiw: Talk: # anchor' ),
+                       array( 'localtestiw: Talk:' )
+               );
+       }
+
+       private function secureAndSplitGlobals() {
+               $this->setMwGlobals( array(
+                       'wgLocalInterwikis' => array( 'localtestiw' ),
+                       'wgHooks' => array(
+                               'InterwikiLoadPrefix' => array(
+                                       function ( $prefix, &$data ) {
+                                               if ( $prefix === 'localtestiw' ) {
+                                                       $data = array( 'iw_url' => 'localtestiw' );
+                                               } elseif ( $prefix === 'remotetestiw' ) {
+                                                       $data = array( 'iw_url' => 'remotetestiw' );
+                                               }
+                                               return false;
+                                       }
+                               )
+                       )
+               ));
+       }
+
+       /**
+        * See also mediawiki.Title.test.js
+        * @covers Title::secureAndSplit
+        * @dataProvider provideValidSecureAndSplit
+        * @note This mainly tests MediaWikiTitleCodec::parseTitle().
+        */
+       public function testSecureAndSplitValid( $text ) {
+               $this->secureAndSplitGlobals();
+               $this->assertInstanceOf( 'Title', Title::newFromText( $text ), "Valid: $text" );
+       }
+
+       /**
+        * See also mediawiki.Title.test.js
+        * @covers Title::secureAndSplit
+        * @dataProvider provideInvalidSecureAndSplit
+        * @note This mainly tests MediaWikiTitleCodec::parseTitle().
+        */
+       public function testSecureAndSplitInvalid( $text ) {
+               $this->secureAndSplitGlobals();
+               $this->assertNull( Title::newFromText( $text ), "Invalid: $text" );
        }
 
        public static function provideConvertByteClassToUnicodeClass() {
@@ -222,11 +237,10 @@ class TitleTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider provideBug31100
+        * @dataProvider provideSpecialNamesWithAndWithoutParameter
         * @covers Title::fixSpecialName
-        * @todo give this test a real name explaining what is being tested here
         */
-       public function testBug31100FixSpecialName( $text, $expectedParam ) {
+       public function testFixSpecialNameRetainsParameter( $text, $expectedParam ) {
                $title = Title::newFromText( $text );
                $fixed = $title->fixSpecialName();
                $stuff = explode( '/', $fixed->getDBkey(), 2 );
@@ -242,7 +256,7 @@ class TitleTest extends MediaWikiTestCase {
                );
        }
 
-       public static function provideBug31100() {
+       public static function provideSpecialNamesWithAndWithoutParameter() {
                return array(
                        array( 'Special:Version', null ),
                        array( 'Special:Version/', '' ),
@@ -259,8 +273,10 @@ class TitleTest extends MediaWikiTestCase {
         * @param array|string|bool $expected Required error
         * @dataProvider provideTestIsValidMoveOperation
         * @covers Title::isValidMoveOperation
+        * @covers Title::validateFileMoveOperation
         */
        public function testIsValidMoveOperation( $source, $target, $expected ) {
+               $this->setMwGlobals( 'wgContentHandlerUseDB', false );
                $title = Title::newFromText( $source );
                $nt = Title::newFromText( $target );
                $errors = $title->isValidMoveOperation( $nt, false );
@@ -274,13 +290,17 @@ class TitleTest extends MediaWikiTestCase {
                }
        }
 
-       /**
-        * Provides test parameter values for testIsValidMoveOperation()
-        */
-       public function dataTestIsValidMoveOperation() {
+       public static function provideTestIsValidMoveOperation() {
                return array(
+                       // for Title::isValidMoveOperation
+                       array( 'Some page', '', 'badtitletext' ),
                        array( 'Test', 'Test', 'selfmove' ),
-                       array( 'File:Test.jpg', 'Page', 'imagenocrossnamespace' )
+                       array( 'Special:FooBar', 'Test', 'immobile-source-namespace' ),
+                       array( 'Test', 'Special:FooBar', 'immobile-target-namespace' ),
+                       array( 'MediaWiki:Common.js', 'Help:Some wikitext page', 'bad-target-model' ),
+                       array( 'Page', 'File:Test.jpg', 'nonfile-cannot-move-to-file' ),
+                       // for Title::validateFileMoveOperation
+                       array( 'File:Test.jpg', 'Page', 'imagenocrossnamespace' ),
                );
        }
 
@@ -401,13 +421,6 @@ class TitleTest extends MediaWikiTestCase {
                return $result;
        }
 
-       public static function provideTestIsValidMoveOperation() {
-               return array(
-                       array( 'Test', 'Test', 'selfmove' ),
-                       array( 'File:Test.jpg', 'Page', 'imagenocrossnamespace' )
-               );
-       }
-
        /**
         * @dataProvider provideGetPageViewLanguage
         * @covers Title::getPageViewLanguage
@@ -415,14 +428,14 @@ class TitleTest extends MediaWikiTestCase {
        public function testGetPageViewLanguage( $expected, $titleText, $contLang,
                $lang, $variant, $msg = ''
        ) {
-               global $wgLanguageCode, $wgContLang, $wgLang, $wgDefaultLanguageVariant, $wgAllowUserJs;
-
                // Setup environnement for this test
-               $wgLanguageCode = $contLang;
-               $wgContLang = Language::factory( $contLang );
-               $wgLang = Language::factory( $lang );
-               $wgDefaultLanguageVariant = $variant;
-               $wgAllowUserJs = true;
+               $this->setMwGlobals( array(
+                       'wgLanguageCode' => $contLang,
+                       'wgContLang' => Language::factory( $contLang ),
+                       'wgLang' => Language::factory( $lang ),
+                       'wgDefaultLanguageVariant' => $variant,
+                       'wgAllowUserJs' => true,
+               ) );
 
                $title = Title::newFromText( $titleText );
                $this->assertInstanceOf( 'Title', $title,
@@ -534,7 +547,7 @@ class TitleTest extends MediaWikiTestCase {
                );
        }
 
-       public function provideNewFromTitleValue() {
+       public static function provideNewFromTitleValue() {
                return array(
                        array( new TitleValue( NS_MAIN, 'Foo' ) ),
                        array( new TitleValue( NS_MAIN, 'Foo', 'bar' ) ),
@@ -554,7 +567,7 @@ class TitleTest extends MediaWikiTestCase {
                $this->assertEquals( $value->getFragment(), $title->getFragment() );
        }
 
-       public function provideGetTitleValue() {
+       public static function provideGetTitleValue() {
                return array(
                        array( 'Foo' ),
                        array( 'Foo#bar' ),
@@ -575,7 +588,7 @@ class TitleTest extends MediaWikiTestCase {
                $this->assertEquals( $title->getFragment(), $value->getFragment() );
        }
 
-       public function provideGetFragment() {
+       public static function provideGetFragment() {
                return array(
                        array( 'Foo', '' ),
                        array( 'Foo#bar', 'bar' ),
@@ -615,7 +628,7 @@ class TitleTest extends MediaWikiTestCase {
                $this->assertEquals( $isKnown, $title->isAlwaysKnown() );
        }
 
-       public function provideIsAlwaysKnown() {
+       public static function provideIsAlwaysKnown() {
                return array(
                        array( 'Some nonexistent page', false ),
                        array( 'UTPage', false ),
index ea44f36..62989fa 100644 (file)
@@ -61,7 +61,7 @@ class UserArrayFromResultTest extends MediaWikiTestCase {
                $this->assertEquals( $username, $object->current->mName );
        }
 
-       public function provideNumberOfRows() {
+       public static function provideNumberOfRows() {
                return array(
                        array( 0 ),
                        array( 1 ),
diff --git a/tests/phpunit/includes/UserMailerTest.php b/tests/phpunit/includes/UserMailerTest.php
deleted file mode 100644 (file)
index dca8aeb..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-
-class UserMailerTest extends MediaWikiLangTestCase {
-
-       /**
-        * @covers UserMailer::quotedPrintable
-        */
-       public function testQuotedPrintable() {
-               $this->assertEquals(
-                       "=?UTF-8?Q?=C4=88u=20legebla=3F?=",
-                       UserMailer::quotedPrintable( "\xc4\x88u legebla?", "UTF-8" ) );
-       }
-
-}
index 36de114..f9ef317 100644 (file)
@@ -214,8 +214,10 @@ class UserTest extends MediaWikiTestCase {
         */
        public function testEditCount() {
                $user = User::newFromName( 'UnitTestUser' );
-               $user->loadDefaults();
-               $user->addToDatabase();
+
+               if ( !$user->getId() ) {
+                       $user->addToDatabase();
+               }
 
                // let the user have a few (3) edits
                $page = WikiPage::factory( Title::newFromText( 'Help:UserTest_EditCount' ) );
@@ -248,14 +250,17 @@ class UserTest extends MediaWikiTestCase {
         */
        public function testOptions() {
                $user = User::newFromName( 'UnitTestUser' );
-               $user->addToDatabase();
 
-               $user->setOption( 'someoption', 'test' );
+               if ( !$user->getId() ) {
+                       $user->addToDatabase();
+               }
+
+               $user->setOption( 'userjs-someoption', 'test' );
                $user->setOption( 'cols', 200 );
                $user->saveSettings();
 
                $user = User::newFromName( 'UnitTestUser' );
-               $this->assertEquals( 'test', $user->getOption( 'someoption' ) );
+               $this->assertEquals( 'test', $user->getOption( 'userjs-someoption' ) );
                $this->assertEquals( 200, $user->getOption( 'cols' ) );
        }
 
@@ -266,9 +271,9 @@ class UserTest extends MediaWikiTestCase {
         */
        public function testAnonOptions() {
                global $wgDefaultUserOptions;
-               $this->user->setOption( 'someoption', 'test' );
+               $this->user->setOption( 'userjs-someoption', 'test' );
                $this->assertEquals( $wgDefaultUserOptions['cols'], $this->user->getOption( 'cols' ) );
-               $this->assertEquals( 'test', $this->user->getOption( 'someoption' ) );
+               $this->assertEquals( 'test', $this->user->getOption( 'userjs-someoption' ) );
        }
 
        /**
@@ -276,12 +281,10 @@ class UserTest extends MediaWikiTestCase {
         * @covers User::getPasswordExpired()
         */
        public function testPasswordExpire() {
-               global $wgPasswordExpireGrace;
-               $wgTemp = $wgPasswordExpireGrace;
-               $wgPasswordExpireGrace = 3600 * 24 * 7; // 7 days
+               $this->setMwGlobals( 'wgPasswordExpireGrace', 3600 * 24 * 7 ); // 7 days
 
                $user = User::newFromName( 'UnitTestUser' );
-               $user->loadDefaults();
+               $user->loadDefaults( 'UnitTestUser' );
                $this->assertEquals( false, $user->getPasswordExpired() );
 
                $ts = time() - ( 3600 * 24 * 1 ); // 1 day ago
@@ -291,8 +294,6 @@ class UserTest extends MediaWikiTestCase {
                $ts = time() - ( 3600 * 24 * 10 ); // 10 days ago
                $user->expirePassword( $ts );
                $this->assertEquals( 'hard', $user->getPasswordExpired() );
-
-               $wgPasswordExpireGrace = $wgTemp;
        }
 
        /**
@@ -323,4 +324,35 @@ class UserTest extends MediaWikiTestCase {
                $this->assertFalse( $user->checkPasswordValidity( 'Passpass' )->isGood() );
                $this->assertEquals( 'password-login-forbidden', $user->getPasswordValidity( 'Passpass' ) );
        }
+
+       /**
+        * @covers User::getCanonicalName()
+        * @dataProvider provideGetCanonicalName
+        */
+       public function testGetCanonicalName( $name, $expectedArray, $msg ) {
+               foreach ( $expectedArray as $validate => $expected ) {
+                       $this->assertEquals(
+                               User::getCanonicalName( $name, $validate === 'false' ? false : $validate ),
+                               $expected,
+                               $msg . ' (' . $validate . ')'
+                       );
+               }
+       }
+
+       public static function provideGetCanonicalName() {
+               return array(
+                       array( ' trailing space ', array( 'creatable' => 'Trailing space' ), 'Trailing spaces' ),
+                       // @todo FIXME: Maybe the createable name should be 'Talk:Username' or false to reject?
+                       array( 'Talk:Username', array( 'creatable' => 'Username', 'usable' => 'Username',
+                               'valid' => 'Username', 'false' => 'Talk:Username' ), 'Namespace prefix' ),
+                       array( ' name with # hash', array( 'creatable' => false, 'usable' => false ), 'With hash' ),
+                       array( 'Multi  spaces', array( 'creatable' => 'Multi spaces',
+                               'usable' => 'Multi spaces' ), 'Multi spaces' ),
+                       array( 'lowercase', array( 'creatable' => 'Lowercase' ), 'Lowercase' ),
+                       array( 'in[]valid', array( 'creatable' => false, 'usable' => false, 'valid' => false,
+                               'false' => 'In[]valid' ), 'Invalid' ),
+                       array( 'with / slash', array( 'creatable' => false, 'usable' => false, 'valid' => false,
+                               'false' => 'With / slash' ), 'With slash' ),
+               );
+       }
 }
index 7f7945b..c011e9a 100644 (file)
@@ -55,8 +55,8 @@ class WikiPageTest extends MediaWikiLangTestCase {
        }
 
        /**
-        * @param Title $title
-        * @param string $model
+        * @param Title|string $title
+        * @param string|null $model
         * @return WikiPage
         */
        protected function newPage( $title, $model = null ) {
index 907ce79..0dbb010 100644 (file)
@@ -14,7 +14,7 @@ class XmlJs extends MediaWikiTestCase {
                $this->assertEquals( $value, $obj->value );
        }
 
-       public function provideConstruction() {
+       public static function provideConstruction() {
                return array(
                        array( null ),
                        array( '' ),
index eb370d9..6681c7a 100644 (file)
@@ -7,6 +7,7 @@
  * @author Thiemo Mättig
  *
  * @group Action
+ * @group Database
  */
 class ActionTest extends MediaWikiTestCase {
 
@@ -116,6 +117,15 @@ class ActionTest extends MediaWikiTestCase {
                $this->assertEquals( 'revisiondelete', $actionName );
        }
 
+       public function testGetActionName_whenCanNotUseWikiPage_defaultsToView() {
+               $request = new FauxRequest( array( 'action' => 'edit' ) );
+               $context = new DerivativeContext( RequestContext::getMain() );
+               $context->setRequest( $request );
+               $actionName = Action::getActionName( $context );
+
+               $this->assertEquals( 'view', $actionName );
+       }
+
        /**
         * @dataProvider actionProvider
         * @param string $requestedAction
index 780cf9e..4bf6deb 100644 (file)
 class ApiMainTest extends ApiTestCase {
 
        /**
-        * Test that the API will accept a FauxRequest and execute. The help action
-        * (default) throws a UsageException. Just validate we're getting proper XML
-        *
-        * @expectedException UsageException
+        * Test that the API will accept a FauxRequest and execute.
         */
        public function testApi() {
                $api = new ApiMain(
-                       new FauxRequest( array( 'action' => 'help', 'format' => 'xml' ) )
+                       new FauxRequest( array( 'action' => 'query', 'meta' => 'siteinfo' ) )
                );
                $api->execute();
-               $api->getPrinter()->setBufferResult( true );
-               $api->printResult( false );
-               $resp = $api->getPrinter()->getBuffer();
-
-               libxml_use_internal_errors( true );
-               $sxe = simplexml_load_string( $resp );
-               $this->assertNotInternalType( "bool", $sxe );
-               $this->assertThat( $sxe, $this->isInstanceOf( "SimpleXMLElement" ) );
+               $data = $api->getResultData();
+               $this->assertInternalType( 'array', $data );
+               $this->assertArrayHasKey( 'query', $data );
        }
 
        public static function provideAssert() {
index 201eed1..dab81e1 100644 (file)
@@ -149,6 +149,7 @@ class ApiModuleManagerTest extends MediaWikiTestCase {
        }
 
        /**
+        * @covers ApiModuleManager::getModule
         * @dataProvider getModuleProvider
         */
        public function testGetModule( $modules, $name, $expectedClass ) {
@@ -172,6 +173,9 @@ class ApiModuleManagerTest extends MediaWikiTestCase {
                $this->assertNotSame( $module1, $module4 );
        }
 
+       /**
+        * @covers ApiModuleManager::getModule
+        */
        public function testGetModule_null() {
                $modules = array(
                        'login' => 'ApiLogin',
@@ -185,6 +189,9 @@ class ApiModuleManagerTest extends MediaWikiTestCase {
                $this->assertNull( $moduleManager->getModule( 'login', 'bla' ), 'wrong group' );
        }
 
+       /**
+        * @covers ApiModuleManager::getNames
+        */
        public function testGetNames() {
                $fooModules = array(
                        'login' => 'ApiLogin',
@@ -208,6 +215,9 @@ class ApiModuleManagerTest extends MediaWikiTestCase {
                $this->assertArrayEquals( array_keys( $allModules ), $allNames );
        }
 
+       /**
+        * @covers ApiModuleManager::getNamesWithClasses
+        */
        public function testGetNamesWithClasses() {
                $fooModules = array(
                        'login' => 'ApiLogin',
@@ -234,6 +244,9 @@ class ApiModuleManagerTest extends MediaWikiTestCase {
                $this->assertArrayEquals( $allModules, $allNamesWithClasses );
        }
 
+       /**
+        * @covers ApiModuleManager::getModuleGroup
+        */
        public function testGetModuleGroup() {
                $fooModules = array(
                        'login' => 'ApiLogin',
@@ -254,6 +267,9 @@ class ApiModuleManagerTest extends MediaWikiTestCase {
                $this->assertNull( $moduleManager->getModuleGroup( 'quux' ) );
        }
 
+       /**
+        * @covers ApiModuleManager::getGroups
+        */
        public function testGetGroups() {
                $fooModules = array(
                        'login' => 'ApiLogin',
@@ -273,4 +289,30 @@ class ApiModuleManagerTest extends MediaWikiTestCase {
                $this->assertArrayEquals( array( 'foo', 'bar' ), $groups );
        }
 
+       /**
+        * @covers ApiModuleManager::getClassName
+        */
+       public function testGetClassName() {
+               $fooModules = array(
+                       'login' => 'ApiLogin',
+                       'logout' => 'ApiLogout',
+               );
+
+               $barModules = array(
+                       'feedcontributions' => array( 'class' => 'ApiFeedContributions' ),
+                       'feedrecentchanges' => array( 'class' => 'ApiFeedRecentChanges' ),
+               );
+
+               $moduleManager = $this->getModuleManager();
+               $moduleManager->addModules( $fooModules, 'foo' );
+               $moduleManager->addModules( $barModules, 'bar' );
+
+               $this->assertEquals( 'ApiLogin', $moduleManager->getClassName( 'login' ) );
+               $this->assertEquals( 'ApiLogout', $moduleManager->getClassName( 'logout' ) );
+               $this->assertEquals( 'ApiFeedContributions', $moduleManager->getClassName( 'feedcontributions' ) );
+               $this->assertEquals( 'ApiFeedRecentChanges', $moduleManager->getClassName( 'feedrecentchanges' ) );
+               $this->assertFalse( $moduleManager->getClassName( 'nonexistentmodule' ) );
+       }
+
+
 }
index 5f955bb..bd34018 100644 (file)
@@ -17,8 +17,6 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
        /** @var DerivativeContext */
        private $mContext;
 
-       private $mOldGetPreferencesHooks;
-
        private static $Success = array( 'options' => 'success' );
 
        protected function setUp() {
@@ -50,21 +48,11 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
 
                $this->mTested = new ApiOptions( $main, 'options' );
 
-               global $wgHooks;
-               if ( !isset( $wgHooks['GetPreferences'] ) ) {
-                       $wgHooks['GetPreferences'] = array();
-               }
-               $this->mOldGetPreferencesHooks = $wgHooks['GetPreferences'];
-               $wgHooks['GetPreferences'][] = array( $this, 'hookGetPreferences' );
-       }
-
-       protected function tearDown() {
-               global $wgHooks;
-
-               $wgHooks['GetPreferences'] = $this->mOldGetPreferencesHooks;
-               $this->mOldGetPreferencesHooks = false;
-
-               parent::tearDown();
+               $this->mergeMwGlobalArrayValue( 'wgHooks', array(
+                       'GetPreferences' => array(
+                               array( $this, 'hookGetPreferences' )
+                       )
+               ) );
        }
 
        public function hookGetPreferences( $user, &$preferences ) {
index cd14194..9a552fa 100644 (file)
@@ -8,6 +8,11 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
         */
        protected $apiContext;
 
+       /**
+        * @var array
+        */
+       protected $tablesUsed = array( 'user', 'user_groups', 'user_properties' );
+
        protected function setUp() {
                global $wgServer;
 
@@ -134,10 +139,14 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
                }
 
                if ( isset( $session['wsToken'] ) && $session['wsToken'] ) {
+                       // @todo Why does this directly mess with the session? Fix that.
                        // add edit token to fake session
                        $session['wsEditToken'] = $session['wsToken'];
                        // add token to request parameters
-                       $params['token'] = md5( $session['wsToken'] ) . User::EDIT_TOKEN_SUFFIX;
+                       $timestamp = wfTimestamp();
+                       $params['token'] = hash_hmac( 'md5', $timestamp, $session['wsToken'] ) .
+                               dechex( $timestamp ) .
+                               User::EDIT_TOKEN_SUFFIX;
 
                        return $this->doApiRequest( $params, $session, false, $user );
                } else {
index 13da33c..d04766b 100644 (file)
@@ -20,7 +20,7 @@ class PrefixUniquenessTest extends MediaWikiTestCase {
                        $class = get_class( $module );
 
                        $prefix = $module->getModulePrefix();
-                       if ( isset( $prefixes[$prefix] ) ) {
+                       if ( $prefix !== '' && isset( $prefixes[$prefix] ) ) {
                                $this->fail( "Module prefix '{$prefix}' is shared between {$class} and {$prefixes[$prefix]}" );
                        }
                        $prefixes[$module->getModulePrefix()] = $class;
index 5f6d53c..af77570 100644 (file)
@@ -16,15 +16,12 @@ abstract class ApiFormatTestBase extends ApiTestCase {
                $module = $data[3];
 
                $printer = $module->createPrinterByName( $format );
-               $printer->setUnescapeAmps( false );
-
-               $printer->initPrinter( false );
 
                ob_start();
+               $printer->initPrinter( false );
                $printer->execute();
-               $out = ob_get_clean();
-
                $printer->closePrinter();
+               $out = ob_get_clean();
 
                return $out;
        }
index 347cd6f..46f1b7b 100644 (file)
@@ -62,7 +62,8 @@ class ApiQueryContinue2Test extends ApiQueryContinueTestBase {
                        );
                };
                // generator + 1 prop + 1 list
-               $data = $this->query( $mk( 99, 99, true ), 1, 'g1p', false );
+               $data = $this->query( $mk( 99, 99, true ), 1, 'g1p', false ) +
+                       array( 'batchcomplete' => '' );
                $this->checkC( $data, $mk( 1, 1, true ), 6, 'g1p-11t' );
                $this->checkC( $data, $mk( 2, 2, true ), 3, 'g1p-22t' );
                $this->checkC( $data, $mk( 1, 1, false ), 6, 'g1p-11f' );
index 0379790..56130f1 100644 (file)
@@ -68,7 +68,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                                'aplimit' => "$l",
                        );
                };
-               $data = $this->query( $mk( 99 ), 1, '1L', false );
+               $data = $this->query( $mk( 99 ), 1, '1L', false ) +
+                       array( 'batchcomplete' => '' );
 
                // 1 list
                $this->checkC( $data, $mk( 1 ), 5, '1L-1' );
@@ -95,7 +96,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                        );
                };
                // 2 lists
-               $data = $this->query( $mk( 99, 99 ), 1, '2L', false );
+               $data = $this->query( $mk( 99, 99 ), 1, '2L', false ) +
+                       array( 'batchcomplete' => '' );
                $this->checkC( $data, $mk( 1, 1 ), 5, '2L-11' );
                $this->checkC( $data, $mk( 2, 2 ), 3, '2L-22' );
                $this->checkC( $data, $mk( 3, 3 ), 2, '2L-33' );
@@ -119,7 +121,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                        );
                };
                // generator + 1 prop
-               $data = $this->query( $mk( 99, 99 ), 1, 'G1P', false );
+               $data = $this->query( $mk( 99, 99 ), 1, 'G1P', false ) +
+                       array( 'batchcomplete' => '' );
                $this->checkC( $data, $mk( 1, 1 ), 11, 'G1P-11' );
                $this->checkC( $data, $mk( 2, 2 ), 6, 'G1P-22' );
                $this->checkC( $data, $mk( 3, 3 ), 4, 'G1P-33' );
@@ -144,7 +147,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                        );
                };
                // generator + 2 props
-               $data = $this->query( $mk( 99, 99, 99 ), 1, 'G2P', false );
+               $data = $this->query( $mk( 99, 99, 99 ), 1, 'G2P', false ) +
+                       array( 'batchcomplete' => '' );
                $this->checkC( $data, $mk( 1, 1, 1 ), 16, 'G2P-111' );
                $this->checkC( $data, $mk( 2, 2, 2 ), 9, 'G2P-222' );
                $this->checkC( $data, $mk( 3, 3, 3 ), 6, 'G2P-333' );
@@ -177,7 +181,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                        );
                };
                // generator + 1 prop + 1 list
-               $data = $this->query( $mk( 99, 99, 99 ), 1, 'G1P1L', false );
+               $data = $this->query( $mk( 99, 99, 99 ), 1, 'G1P1L', false ) +
+                       array( 'batchcomplete' => '' );
                $this->checkC( $data, $mk( 1, 1, 1 ), 11, 'G1P1L-111' );
                $this->checkC( $data, $mk( 2, 2, 2 ), 6, 'G1P1L-222' );
                $this->checkC( $data, $mk( 3, 3, 3 ), 4, 'G1P1L-333' );
@@ -214,7 +219,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                        );
                };
                // generator + 1 prop + 1 list
-               $data = $this->query( $mk( 99, 99, 99, 99, 99 ), 1, 'G2P2L1M', false );
+               $data = $this->query( $mk( 99, 99, 99, 99, 99 ), 1, 'G2P2L1M', false ) +
+                       array( 'batchcomplete' => '' );
                $this->checkC( $data, $mk( 1, 1, 1, 1, 1 ), 16, 'G2P2L1M-11111' );
                $this->checkC( $data, $mk( 2, 2, 2, 2, 2 ), 9, 'G2P2L1M-22222' );
                $this->checkC( $data, $mk( 3, 3, 3, 3, 3 ), 6, 'G2P2L1M-33333' );
@@ -244,7 +250,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                        );
                };
                // generator + 1 prop
-               $data = $this->query( $mk( 99, true, 99, true ), 1, 'G=P', false );
+               $data = $this->query( $mk( 99, true, 99, true ), 1, 'G=P', false ) +
+                       array( 'batchcomplete' => '' );
 
                $this->checkC( $data, $mk( 1, true, 1, true ), 4, 'G=P-1t1t' );
                $this->checkC( $data, $mk( 2, true, 2, true ), 2, 'G=P-2t2t' );
@@ -290,7 +297,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                        );
                };
                // generator + 1 list
-               $data = $this->query( $mk( 99, true, 99, true ), 1, 'G=L', false );
+               $data = $this->query( $mk( 99, true, 99, true ), 1, 'G=L', false ) +
+                       array( 'batchcomplete' => '' );
 
                $this->checkC( $data, $mk( 1, true, 1, true ), 5, 'G=L-1t1t' );
                $this->checkC( $data, $mk( 2, true, 2, true ), 3, 'G=L-2t2t' );
index bce6268..a5f2684 100644 (file)
@@ -62,6 +62,8 @@ abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
                }
                if ( $useContinue && !isset( $params['continue'] ) ) {
                        $params['continue'] = '';
+               } else {
+                       $params['rawcontinue'] = '1';
                }
                $count = 0;
                $result = array();
index bba22c7..200027d 100644 (file)
@@ -7,32 +7,21 @@
  * @covers ApiQuery
  */
 class ApiQueryTest extends ApiTestCase {
-       /**
-        * @var array Storage for $wgHooks
-        */
-       protected $hooks;
-
        protected function setUp() {
-               global $wgHooks;
-
                parent::setUp();
                $this->doLogin();
 
-               // Setup en: as interwiki prefix
-               $this->hooks = $wgHooks;
-               $wgHooks['InterwikiLoadPrefix'][] = function ( $prefix, &$data ) {
-                       if ( $prefix == 'apiquerytestiw' ) {
-                               $data = array( 'iw_url' => 'wikipedia' );
-                       }
-                       return false;
-               };
-       }
-
-       protected function tearDown() {
-               global $wgHooks;
-               $wgHooks = $this->hooks;
-
-               parent::tearDown();
+               // Setup apiquerytestiw: as interwiki prefix
+               $this->setMwGlobals( 'wgHooks', array(
+                       'InterwikiLoadPrefix' => array(
+                               function ( $prefix, &$data ) {
+                                       if ( $prefix == 'apiquerytestiw' ) {
+                                               $data = array( 'iw_url' => 'wikipedia' );
+                                       }
+                                       return false;
+                               }
+                       )
+               ) );
        }
 
        public function testTitlesGetNormalized() {
index 56c15b2..1220bb4 100644 (file)
@@ -95,6 +95,9 @@ STR;
                if ( !array_key_exists( 'action', $req ) ) {
                        $req['action'] = 'query';
                }
+               if ( !array_key_exists( 'continue', $req ) ) {
+                       $req['rawcontinue'] = '1';
+               }
                foreach ( $req as &$val ) {
                        if ( is_array( $val ) ) {
                                $val = implode( '|', array_unique( $val ) );
diff --git a/tests/phpunit/includes/cache/LocalisationCacheTest.php b/tests/phpunit/includes/cache/LocalisationCacheTest.php
new file mode 100644 (file)
index 0000000..35ff919
--- /dev/null
@@ -0,0 +1,93 @@
+<?php
+/**
+ * @group Database
+ * @group Cache
+ * @covers LocalisationCache
+ * @author Niklas Laxström
+ */
+class LocalisationCacheTest extends MediaWikiTestCase {
+       protected function setUp() {
+               global $IP;
+
+               parent::setUp();
+               $this->setMwGlobals( array(
+                       'wgMessagesDirs' => array( "$IP/tests/phpunit/data/localisationcache" ),
+                       'wgExtensionMessagesFiles' => array(),
+                       'wgHooks' => array(),
+               ) );
+       }
+
+       public function testPuralRulesFallback() {
+               $cache = new LocalisationCache( array( 'store' => 'detect' ) );
+
+               $this->assertEquals(
+                       $cache->getItem( 'ar', 'pluralRules' ),
+                       $cache->getItem( 'arz', 'pluralRules' ),
+                       'arz plural rules (undefined) fallback to ar (defined)'
+               );
+
+               $this->assertEquals(
+                       $cache->getItem( 'ar', 'compiledPluralRules' ),
+                       $cache->getItem( 'arz', 'compiledPluralRules' ),
+                       'arz compiled plural rules (undefined) fallback to ar (defined)'
+               );
+
+               $this->assertNotEquals(
+                       $cache->getItem( 'ksh', 'pluralRules' ),
+                       $cache->getItem( 'de', 'pluralRules' ),
+                       'ksh plural rules (defined) dont fallback to de (defined)'
+               );
+
+               $this->assertNotEquals(
+                       $cache->getItem( 'ksh', 'compiledPluralRules' ),
+                       $cache->getItem( 'de', 'compiledPluralRules' ),
+                       'ksh compiled plural rules (defined) dont fallback to de (defined)'
+               );
+       }
+
+       public function testRecacheFallbacks() {
+               $lc = new LocalisationCache( array( 'store' => 'detect' ) );
+               $lc->recache( 'uk' );
+               $this->assertEquals(
+                       array(
+                               'present-uk' => 'uk',
+                               'present-ru' => 'ru',
+                               'present-en' => 'en',
+                       ),
+                       $lc->getItem( 'uk', 'messages' ),
+                       'Fallbacks are only used to fill missing data'
+               );
+       }
+
+       public function testRecacheFallbacksWithHooks() {
+               // Use hook to provide updates for messages. This is what the
+               // LocalisationUpdate extension does. See bug 68781.
+               $this->mergeMwGlobalArrayValue( 'wgHooks', array(
+                       'LocalisationCacheRecacheFallback' => array(
+                               function (
+                                       LocalisationCache $lc,
+                                       $code,
+                                       array &$cache
+                               ) {
+                                       if ( $code === 'ru' ) {
+                                               $cache['messages']['present-uk'] = 'ru-override';
+                                               $cache['messages']['present-ru'] = 'ru-override';
+                                               $cache['messages']['present-en'] = 'ru-override';
+                                       }
+                               }
+                       )
+               ) );
+
+               $lc = new LocalisationCache( array( 'store' => 'detect' ) );
+               $lc->recache( 'uk' );
+               $this->assertEquals(
+                       array(
+                               'present-uk' => 'uk',
+                               'present-ru' => 'ru-override',
+                               'present-en' => 'ru-override',
+                       ),
+                       $lc->getItem( 'uk', 'messages' ),
+                       'Updates provided by hooks follow the normal fallback order.'
+               );
+       }
+}
diff --git a/tests/phpunit/includes/cache/RedisBloomCacheTest.php b/tests/phpunit/includes/cache/RedisBloomCacheTest.php
new file mode 100644 (file)
index 0000000..868d6c2
--- /dev/null
@@ -0,0 +1,72 @@
+<?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 );
+               }
+       }
+}
diff --git a/tests/phpunit/includes/changes/EnhancedChangesListTest.php b/tests/phpunit/includes/changes/EnhancedChangesListTest.php
new file mode 100644 (file)
index 0000000..7a82680
--- /dev/null
@@ -0,0 +1,132 @@
+<?php
+
+/**
+ * @covers EnhancedChangesList
+ *
+ * @group Database
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class EnhancedChangesListTest extends MediaWikiLangTestCase {
+
+       /**
+        * @var TestRecentChangesHelper
+        */
+       private $testRecentChangesHelper;
+
+       public function __construct( $name = null, array $data = array(), $dataName = '' ) {
+               parent::__construct( $name, $data, $dataName );
+
+               $this->testRecentChangesHelper = new TestRecentChangesHelper();
+       }
+
+       public function testBeginRecentChangesList_styleModules() {
+               $enhancedChangesList = $this->newEnhancedChangesList();
+               $enhancedChangesList->beginRecentChangesList();
+
+               $styleModules = $enhancedChangesList->getOutput()->getModuleStyles();
+
+               $this->assertContains(
+                       'mediawiki.special.changeslist',
+                       $styleModules,
+                       'has mediawiki.special.changeslist'
+               );
+
+               $this->assertContains(
+                       'mediawiki.special.changeslist.enhanced',
+                       $styleModules,
+                       'has mediawiki.special.changeslist.enhanced'
+               );
+       }
+
+       public function testBeginRecentChangesList_jsModules() {
+               $enhancedChangesList = $this->newEnhancedChangesList();
+               $enhancedChangesList->beginRecentChangesList();
+
+               $modules = $enhancedChangesList->getOutput()->getModules();
+
+               $this->assertContains( 'jquery.makeCollapsible', $modules, 'has jquery.makeCollapsible' );
+               $this->assertContains( 'mediawiki.icon', $modules, 'has mediawiki.icon' );
+       }
+
+       public function testBeginRecentChangesList_html() {
+               $enhancedChangesList = $this->newEnhancedChangesList();
+               $html = $enhancedChangesList->beginRecentChangesList();
+
+               $this->assertEquals( '<div class="mw-changeslist">', $html );
+       }
+
+       /**
+        * @todo more tests
+        */
+       public function testRecentChangesLine() {
+               $enhancedChangesList = $this->newEnhancedChangesList();
+               $enhancedChangesList->beginRecentChangesList();
+
+               $recentChange = $this->getEditChange( '20131103092153' );
+               $html = $enhancedChangesList->recentChangesLine( $recentChange, false );
+
+               $this->assertInternalType( 'string', $html );
+
+               $recentChange2 = $this->getEditChange( '20131103092253' );
+               $html = $enhancedChangesList->recentChangesLine( $recentChange2, false );
+
+               $this->assertEquals( '', $html );
+       }
+
+       /**
+        * @todo more tests for actual formatting, this is more of a smoke test
+        */
+       public function testEndRecentChangesList() {
+               $enhancedChangesList = $this->newEnhancedChangesList();
+               $enhancedChangesList->beginRecentChangesList();
+
+               $recentChange = $this->getEditChange( '20131103092153' );
+               $enhancedChangesList->recentChangesLine( $recentChange, false );
+
+               $recentChange2 = $this->getEditChange( '20131103092253' );
+               $enhancedChangesList->recentChangesLine( $recentChange2, false );
+
+               $html = $enhancedChangesList->endRecentChangesList();
+
+               preg_match_all( '/td class="mw-enhanced-rc-nested"/', $html, $matches );
+               $this->assertCount( 2, $matches[0] );
+       }
+
+       /**
+        * @return EnhancedChangesList
+        */
+       private function newEnhancedChangesList() {
+               $user = User::newFromId( 0 );
+               $context = $this->testRecentChangesHelper->getTestContext( $user );
+
+               return new EnhancedChangesList( $context );
+       }
+
+       /**
+        * @return RecentChange
+        */
+       private function getEditChange( $timestamp ) {
+               $user = $this->getTestUser();
+               $recentChange = $this->testRecentChangesHelper->makeEditRecentChange(
+                       $user, 'Cat', $timestamp, 5, 191, 190, 0, 0
+               );
+
+               return $recentChange;
+       }
+
+       /**
+        * @return User
+        */
+       private function getTestUser() {
+               $user = User::newFromName( 'TestRecentChangesUser' );
+
+               if ( !$user->getId() ) {
+                       $user->addToDatabase();
+               }
+
+               return $user;
+       }
+
+}
index 9783ae3..2ea9f33 100644 (file)
@@ -3,6 +3,10 @@
 /**
  * @covers OldChangesList
  *
+ * @todo add tests to cover article link, timestamp, character difference,
+ *       log entry, user tool links, direction marks, tags, rollback,
+ *       watching users, and date header.
+ *
  * @group Database
  *
  * @licence GNU GPL v2+
@@ -25,7 +29,8 @@ class OldChangesListTest extends MediaWikiLangTestCase {
                parent::setUp();
 
                $this->setMwGlobals( array(
-                       'wgArticlePath' => '/wiki/$1'
+                       'wgArticlePath' => '/wiki/$1',
+                       'wgLang' => Language::factory( 'qqx' )
                ) );
        }
 
@@ -68,16 +73,13 @@ class OldChangesListTest extends MediaWikiLangTestCase {
 
        public function testRecentChangesLine_LogTitle() {
                $oldChangesList = $this->getOldChangesList();
-               $recentChange = $this->getLogChange( 'delete' );
+               $recentChange = $this->getLogChange( 'delete', 'delete' );
 
                $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
 
-               $message = new Message( 'dellogpage' );
-               $expectedLinkText = $message->inLanguage( 'en' )->text();
-
                $this->assertRegExp( '/href="\/wiki\/Special:Log\/delete/', $line, 'link has href attribute' );
                $this->assertRegExp( '/title="Special:Log\/delete/', $line, 'link has title attribute' );
-               $this->assertRegExp( "/$expectedLinkText/", $line, 'link text' );
+               $this->assertRegExp( "/dellogpage/", $line, 'link text' );
        }
 
        public function testRecentChangesLine_DiffHistLinks() {
@@ -100,21 +102,51 @@ class OldChangesListTest extends MediaWikiLangTestCase {
                );
        }
 
+       public function testRecentChangesLine_Flags() {
+               $oldChangesList = $this->getOldChangesList();
+               $recentChange = $this->getNewBotEditChange();
+
+               $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
+
+               $this->assertContains(
+                       "<abbr class='newpage' title='(recentchanges-label-newpage)'>(newpageletter)</abbr>",
+                       $line,
+                       'new page flag'
+               );
+
+               $this->assertContains(
+                       "<abbr class='botedit' title='(recentchanges-label-bot)'>(boteditletter)</abbr>",
+                       $line,
+                       'bot flag'
+               );
+       }
+
+       public function testRecentChangesLine_Tags() {
+               $recentChange = $this->getEditChange();
+               $recentChange->mAttribs['ts_tags'] = 'vandalism,newbie';
+
+               $oldChangesList = $this->getOldChangesList();
+               $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
+
+               $this->assertRegExp( '/<li class="[\w\s-]*mw-tag-vandalism[\w\s-]*">/', $line );
+               $this->assertRegExp( '/<li class="[\w\s-]*mw-tag-newbie[\w\s-]*">/', $line );
+       }
+
        private function getNewBotEditChange() {
                $user = $this->getTestUser();
 
                $recentChange = $this->testRecentChangesHelper->makeNewBotEditRecentChange(
-                       $user, 'Abc', '20131103212153', 0, 0
+                       $user, 'Abc', '20131103212153', 5, 191, 190, 0, 0
                );
 
                return $recentChange;
        }
 
-       private function getLogChange( $logType ) {
+       private function getLogChange( $logType, $logAction ) {
                $user = $this->getTestUser();
 
                $recentChange = $this->testRecentChangesHelper->makeLogRecentChange(
-                       $logType, $user, 'Abc', '20131103212153', 0, 0
+                       $logType, $logAction, $user, 'Abc', '20131103212153', 0, 0
                );
 
                return $recentChange;
@@ -147,9 +179,7 @@ class OldChangesListTest extends MediaWikiLangTestCase {
        private function getContext() {
                $user = $this->getTestUser();
                $context = $this->testRecentChangesHelper->getTestContext( $user );
-
-               $title = Title::newFromText( 'RecentChanges', NS_SPECIAL );
-               $context->setTitle( $title );
+               $context->setLanguage( Language::factory( 'qqx' ) );
 
                return $context;
        }
index c3b8ce6..ee1a4d0 100644 (file)
@@ -123,6 +123,7 @@ class RCCacheEntryFactoryTest extends MediaWikiLangTestCase {
                                $this->getContext(),
                                $this->getMessages(),
                                $this->testRecentChangesHelper->makeLogRecentChange(
+                                       'delete',
                                        'delete',
                                        $this->getTestUser(),
                                        'Abc',
index 98903f1..7c2ba1a 100644 (file)
@@ -46,6 +46,7 @@ class RecentChangeTest extends MediaWikiTestCase {
         * - protect/modifyprotect
         * - protect/unprotect
         * - upload/upload
+        * - merge/merge
         *
         * As well as the following Auto Edit Summaries:
         * - blank
@@ -229,6 +230,25 @@ class RecentChangeTest extends MediaWikiTestCase {
                );
        }
 
+       /**
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeMerge() {
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
+               # merge/merge
+               $this->assertIRCComment(
+                       $this->context->msg( 'pagemerge-logentry', 'SomeTitle', 'Dest', 'timestamp' )->plain()
+                               . $sep . $this->user_comment,
+                       'merge', 'merge',
+                       array(
+                               '4::dest' => 'Dest',
+                               '5::mergepoint' => 'timestamp',
+                       ),
+                       $this->user_comment
+               );
+       }
+
        /**
         * @todo Emulate these edits somehow and extract
         * raw edit summary from RecentChange object
index bb6ebec..ad64327 100644 (file)
@@ -26,7 +26,7 @@ class TestRecentChangesHelper {
                return $this->makeRecentChange( $attribs, $counter, $watchingUsers );
        }
 
-       public function makeLogRecentChange( $logType, User $user, $titleText, $timestamp, $counter,
+       public function makeLogRecentChange( $logType, $logAction, User $user, $titleText, $timestamp, $counter,
                $watchingUsers
        ) {
                $attribs = array_merge(
@@ -42,7 +42,7 @@ class TestRecentChangesHelper {
                                'rc_type' => 3,
                                'rc_logid' => 25,
                                'rc_log_type' => $logType,
-                               'rc_log_action' => $logType,
+                               'rc_log_action' => $logAction,
                                'rc_source' => 'mw.log'
                        )
                );
@@ -129,6 +129,9 @@ class TestRecentChangesHelper {
 
                $context->setUser( $user );
 
+               $title = Title::newFromText( 'RecentChanges', NS_SPECIAL );
+               $context->setTitle( $title );
+
                return $context;
        }
 }
index a999081..28068d5 100644 (file)
@@ -38,7 +38,19 @@ class GlobalVarConfigTest extends MediaWikiTestCase {
                );
        }
 
-       public function provideGet() {
+       /**
+        * @covers GlobalVarConfig::has
+        */
+       public function testHas() {
+               $this->maybeStashGlobal( 'wgGlobalVarConfigTestHas' );
+               $GLOBALS['wgGlobalVarConfigTestHas'] = wfRandomString();
+               $this->maybeStashGlobal( 'wgGlobalVarConfigTestNotHas' );
+               $config = new GlobalVarConfig();
+               $this->assertTrue( $config->has( 'GlobalVarConfigTestHas' ) );
+               $this->assertFalse( $config->has( 'GlobalVarConfigTestNotHas' ) );
+       }
+
+       public static function provideGet() {
                $set = array(
                        'wgSomething' => 'default1',
                        'wgFoo' => 'default2',
@@ -70,38 +82,15 @@ class GlobalVarConfigTest extends MediaWikiTestCase {
        public function testGet( $name, $prefix, $expected ) {
                $config = new GlobalVarConfig( $prefix );
                if ( $expected === false ) {
-                       $this->setExpectedException( 'ConfigException', 'GlobalVarConfig::getWithPrefix: undefined variable:' );
+                       $this->setExpectedException( 'ConfigException', 'GlobalVarConfig::get: undefined option:' );
                }
                $this->assertEquals( $config->get( $name ), $expected );
        }
 
-       public static function provideSet() {
-               return array(
-                       array( 'Foo', 'wg', 'wgFoo' ),
-                       array( 'SomethingRandom', 'wg', 'wgSomethingRandom' ),
-                       array( 'FromAnExtension', 'eg', 'egFromAnExtension' ),
-                       array( 'NoPrefixHere', '', 'NoPrefixHere' ),
-               );
-       }
-
        private function maybeStashGlobal( $var ) {
                if ( array_key_exists( $var, $GLOBALS ) ) {
                        // Will be reset after this test is over
                        $this->stashMwGlobals( $var );
                }
        }
-
-       /**
-        * @dataProvider provideSet
-        * @covers GlobalVarConfig::set
-        * @covers GlobalVarConfig::setWithPrefix
-        */
-       public function testSet( $name, $prefix, $var ) {
-               $this->maybeStashGlobal( $var );
-               $config = new GlobalVarConfig( $prefix );
-               $random = wfRandomString();
-               $config->set( $name, $random );
-               $this->assertArrayHasKey( $var, $GLOBALS );
-               $this->assertEquals( $random, $GLOBALS[$var] );
-       }
 }
diff --git a/tests/phpunit/includes/config/HashConfigTest.php b/tests/phpunit/includes/config/HashConfigTest.php
new file mode 100644 (file)
index 0000000..06973b0
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+
+class HashConfigTest extends MediaWikiTestCase {
+
+       /**
+        * @covers HashConfig::newInstance
+        */
+       public function testNewInstance() {
+               $conf = HashConfig::newInstance();
+               $this->assertInstanceOf( 'HashConfig', $conf );
+       }
+
+       /**
+        * @covers HashConfig::__construct
+        */
+       public function testConstructor() {
+               $conf = new HashConfig();
+               $this->assertInstanceOf( 'HashConfig', $conf );
+
+               // Test passing arguments to the constructor
+               $conf2 = new HashConfig( array(
+                       'one' => '1',
+               ) );
+               $this->assertEquals( '1', $conf2->get( 'one' ) );
+       }
+
+       /**
+        * @covers HashConfig::get
+        */
+       public function testGet() {
+               $conf = new HashConfig( array(
+                       'one' => '1',
+               ));
+               $this->assertEquals( '1', $conf->get( 'one' ) );
+               $this->setExpectedException( 'ConfigException', 'HashConfig::get: undefined option' );
+               $conf->get( 'two' );
+       }
+
+       /**
+        * @covers HashConfig::has
+        */
+       public function testHas() {
+               $conf = new HashConfig( array(
+                       'one' => '1',
+               ) );
+               $this->assertTrue( $conf->has( 'one' ) );
+               $this->assertFalse( $conf->has( 'two' ) );
+       }
+
+       /**
+        * @covers HashConfig::set
+        */
+       public function testSet() {
+               $conf = new HashConfig( array(
+                       'one' => '1',
+               ) );
+               $conf->set( 'two', '2' );
+               $this->assertEquals( '2', $conf->get( 'two' ) );
+               // Check that set overwrites
+               $conf->set( 'one', '3' );
+               $this->assertEquals( '3', $conf->get( 'one' ) );
+       }
+}
diff --git a/tests/phpunit/includes/config/MultiConfigTest.php b/tests/phpunit/includes/config/MultiConfigTest.php
new file mode 100644 (file)
index 0000000..158da46
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+
+class MultiConfigTest extends MediaWikiTestCase {
+
+       /**
+        * Tests that settings are fetched in the right order
+        *
+        * @covers MultiConfig::get
+        */
+       public function testGet() {
+               $multi = new MultiConfig( array(
+                       new HashConfig( array( 'foo' => 'bar' ) ),
+                       new HashConfig( array( 'foo' => 'baz', 'bar' => 'foo' ) ),
+                       new HashConfig( array( 'bar' => 'baz' ) ),
+               ) );
+
+               $this->assertEquals( 'bar', $multi->get( 'foo' ) );
+               $this->assertEquals( 'foo', $multi->get( 'bar' ) );
+               $this->setExpectedException( 'ConfigException', 'MultiConfig::get: undefined option:' );
+               $multi->get( 'notset' );
+       }
+
+       /**
+        * @covers MultiConfig::has
+        */
+       public function testHas() {
+               $conf = new MultiConfig( array(
+                       new HashConfig( array( 'foo' => 'foo' ) ),
+                       new HashConfig( array( 'something' => 'bleh' ) ),
+                       new HashConfig( array( 'meh' => 'eh' ) ),
+               ) );
+
+               $this->assertTrue( $conf->has( 'foo' ) );
+               $this->assertTrue( $conf->has( 'something' ) );
+               $this->assertTrue( $conf->has( 'meh' ) );
+               $this->assertFalse( $conf->has( 'what' ) );
+       }
+}
index f744973..1a90d6e 100644 (file)
@@ -317,6 +317,8 @@ class ContentHandlerTest extends MediaWikiTestCase {
         * page.
         */
        public function testGetAutosummary() {
+               $this->setMwGlobals( 'wgContLang', Language::factory( 'en' ) );
+
                $content = new DummyContentHandlerForTesting( CONTENT_MODEL_WIKITEXT );
                $title = Title::newFromText( 'Help:Test' );
                // Create a new content object with no content
diff --git a/tests/phpunit/includes/content/JSONContentTest.php b/tests/phpunit/includes/content/JSONContentTest.php
deleted file mode 100644 (file)
index acfdc0e..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-/**
- * @author Adam Shorland
- * @covers JSONContent
- */
-class JSONContentTest extends MediaWikiLangTestCase {
-
-       /**
-        * @dataProvider provideValidConstruction
-        */
-       public function testValidConstruct( $text, $modelId, $isValid, $expected ) {
-               $obj = new JSONContent( $text, $modelId );
-               $this->assertEquals( $isValid, $obj->isValid() );
-               $this->assertEquals( $expected, $obj->getJsonData() );
-       }
-
-       public function provideValidConstruction() {
-               return array(
-                       array( 'foo', CONTENT_MODEL_JSON, false, null ),
-                       array( FormatJson::encode( array() ), CONTENT_MODEL_JSON, true, array() ),
-                       array( FormatJson::encode( array( 'foo' ) ), CONTENT_MODEL_JSON, true, array( 'foo' ) ),
-               );
-       }
-
-       /**
-        * @dataProvider provideDataToEncode
-        */
-       public function testBeautifyUsesFormatJson( $data ) {
-               $obj = new JSONContent( FormatJson::encode( $data ) );
-               $this->assertEquals( FormatJson::encode( $data, true ), $obj->beautifyJSON() );
-       }
-
-       public function provideDataToEncode() {
-               return array(
-                       array( array() ),
-                       array( array( 'foo' ) ),
-                       array( array( 'foo', 'bar' ) ),
-                       array( array( 'baz' => 'foo', 'bar' ) ),
-                       array( array( 'baz' => 1000, 'bar' ) ),
-               );
-       }
-
-       /**
-        * @dataProvider provideDataToEncode
-        */
-       public function testPreSaveTransform( $data ) {
-               $obj = new JSONContent( FormatJson::encode( $data ) );
-               $newObj = $obj->preSaveTransform( $this->getMockTitle(), $this->getMockUser(), $this->getMockParserOptions() );
-               $this->assertTrue( $newObj->equals( new JSONContent( FormatJson::encode( $data, true ) ) ) );
-       }
-
-       private function getMockTitle() {
-               return $this->getMockBuilder( 'Title' )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-       }
-
-       private function getMockUser() {
-               return $this->getMockBuilder( 'User' )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-       }
-       private function getMockParserOptions() {
-               return $this->getMockBuilder( 'ParserOptions' )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-       }
-
-       /**
-        * @dataProvider provideDataAndParserText
-        */
-       public function testFillParserOutput( $data, $expected ) {
-               $obj = new JSONContent( FormatJson::encode( $data ) );
-               $parserOutput = $obj->getParserOutput( $this->getMockTitle(), null, null, true );
-               $this->assertInstanceOf( 'ParserOutput', $parserOutput );
-//             var_dump( $parserOutput->getText(), "\n" );
-               $this->assertEquals( $expected, $parserOutput->getText() );
-       }
-
-       public function provideDataAndParserText() {
-               return array(
-                       array(
-                               array(),
-                               '<table class="mw-json"><tbody></tbody></table>'
-                       ),
-                       array(
-                               array( 'foo' ),
-                               '<table class="mw-json"><tbody><tr><th>0</th><td class="value">&quot;foo&quot;</td></tr></tbody></table>'
-                       ),
-                       array(
-                               array( 'foo', 'bar' ),
-                               '<table class="mw-json"><tbody><tr><th>0</th><td class="value">&quot;foo&quot;</td></tr>' .
-                               "\n" .
-                               '<tr><th>1</th><td class="value">&quot;bar&quot;</td></tr></tbody></table>'
-                       ),
-                       array(
-                               array( 'baz' => 'foo', 'bar' ),
-                               '<table class="mw-json"><tbody><tr><th>baz</th><td class="value">&quot;foo&quot;</td></tr>' .
-                               "\n" .
-                               '<tr><th>0</th><td class="value">&quot;bar&quot;</td></tr></tbody></table>'
-                       ),
-                       array(
-                               array( 'baz' => 1000, 'bar' ),
-                               '<table class="mw-json"><tbody><tr><th>baz</th><td class="value">1000</td></tr>' .
-                               "\n" .
-                               '<tr><th>0</th><td class="value">&quot;bar&quot;</td></tr></tbody></table>'
-                       ),
-                       array(
-                               array( '<script>alert("evil!")</script>'),
-                               '<table class="mw-json"><tbody><tr><th>0</th><td class="value">&quot;&lt;script&gt;alert(&quot;evil!&quot;)&lt;/script&gt;&quot;</td></tr></tbody></table>',
-                       ),
-               );
-       }
-}
diff --git a/tests/phpunit/includes/content/JsonContentTest.php b/tests/phpunit/includes/content/JsonContentTest.php
new file mode 100644 (file)
index 0000000..77b542f
--- /dev/null
@@ -0,0 +1,114 @@
+<?php
+
+/**
+ * @author Adam Shorland
+ * @covers JsonContent
+ */
+class JsonContentTest extends MediaWikiLangTestCase {
+
+       /**
+        * @dataProvider provideValidConstruction
+        */
+       public function testValidConstruct( $text, $modelId, $isValid, $expected ) {
+               $obj = new JsonContent( $text, $modelId );
+               $this->assertEquals( $isValid, $obj->isValid() );
+               $this->assertEquals( $expected, $obj->getJsonData() );
+       }
+
+       public static function provideValidConstruction() {
+               return array(
+                       array( 'foo', CONTENT_MODEL_JSON, false, null ),
+                       array( FormatJson::encode( array() ), CONTENT_MODEL_JSON, true, array() ),
+                       array( FormatJson::encode( array( 'foo' ) ), CONTENT_MODEL_JSON, true, array( 'foo' ) ),
+               );
+       }
+
+       /**
+        * @dataProvider provideDataToEncode
+        */
+       public function testBeautifyUsesFormatJson( $data ) {
+               $obj = new JsonContent( FormatJson::encode( $data ) );
+               $this->assertEquals( FormatJson::encode( $data, true ), $obj->beautifyJSON() );
+       }
+
+       public static function provideDataToEncode() {
+               return array(
+                       array( array() ),
+                       array( array( 'foo' ) ),
+                       array( array( 'foo', 'bar' ) ),
+                       array( array( 'baz' => 'foo', 'bar' ) ),
+                       array( array( 'baz' => 1000, 'bar' ) ),
+               );
+       }
+
+       /**
+        * @dataProvider provideDataToEncode
+        */
+       public function testPreSaveTransform( $data ) {
+               $obj = new JsonContent( FormatJson::encode( $data ) );
+               $newObj = $obj->preSaveTransform( $this->getMockTitle(), $this->getMockUser(), $this->getMockParserOptions() );
+               $this->assertTrue( $newObj->equals( new JsonContent( FormatJson::encode( $data, true ) ) ) );
+       }
+
+       private function getMockTitle() {
+               return $this->getMockBuilder( 'Title' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+       }
+
+       private function getMockUser() {
+               return $this->getMockBuilder( 'User' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+       }
+       private function getMockParserOptions() {
+               return $this->getMockBuilder( 'ParserOptions' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+       }
+
+       /**
+        * @dataProvider provideDataAndParserText
+        */
+       public function testFillParserOutput( $data, $expected ) {
+               $obj = new JsonContent( FormatJson::encode( $data ) );
+               $parserOutput = $obj->getParserOutput( $this->getMockTitle(), null, null, true );
+               $this->assertInstanceOf( 'ParserOutput', $parserOutput );
+               $this->assertEquals( $expected, $parserOutput->getText() );
+       }
+
+       public static function provideDataAndParserText() {
+               return array(
+                       array(
+                               array(),
+                               '<table class="mw-json"><tbody></tbody></table>'
+                       ),
+                       array(
+                               array( 'foo' ),
+                               '<table class="mw-json"><tbody><tr><th>0</th><td class="value">&quot;foo&quot;</td></tr></tbody></table>'
+                       ),
+                       array(
+                               array( 'foo', 'bar' ),
+                               '<table class="mw-json"><tbody><tr><th>0</th><td class="value">&quot;foo&quot;</td></tr>' .
+                               "\n" .
+                               '<tr><th>1</th><td class="value">&quot;bar&quot;</td></tr></tbody></table>'
+                       ),
+                       array(
+                               array( 'baz' => 'foo', 'bar' ),
+                               '<table class="mw-json"><tbody><tr><th>baz</th><td class="value">&quot;foo&quot;</td></tr>' .
+                               "\n" .
+                               '<tr><th>0</th><td class="value">&quot;bar&quot;</td></tr></tbody></table>'
+                       ),
+                       array(
+                               array( 'baz' => 1000, 'bar' ),
+                               '<table class="mw-json"><tbody><tr><th>baz</th><td class="value">1000</td></tr>' .
+                               "\n" .
+                               '<tr><th>0</th><td class="value">&quot;bar&quot;</td></tr></tbody></table>'
+                       ),
+                       array(
+                               array( '<script>alert("evil!")</script>'),
+                               '<table class="mw-json"><tbody><tr><th>0</th><td class="value">&quot;&lt;script&gt;alert(&quot;evil!&quot;)&lt;/script&gt;&quot;</td></tr></tbody></table>',
+                       ),
+               );
+       }
+}
index 2f81109..dd61f85 100644 (file)
@@ -7,11 +7,8 @@
  */
 class TextContentTest extends MediaWikiLangTestCase {
        protected $context;
-       protected $savedContentGetParserOutput;
 
        protected function setUp() {
-               global $wgHooks;
-
                parent::setUp();
 
                // Anon user
@@ -32,24 +29,8 @@ class TextContentTest extends MediaWikiLangTestCase {
                        'wgUseTidy' => false,
                        'wgAlwaysUseTidy' => false,
                        'wgCapitalLinks' => true,
+                       'wgHooks' => array(), // bypass hook ContentGetParserOutput that force custom rendering
                ) );
-
-               // bypass hooks that force custom rendering
-               if ( isset( $wgHooks['ContentGetParserOutput'] )  ) {
-                       $this->savedContentGetParserOutput = $wgHooks['ContentGetParserOutput'];
-                       unset( $wgHooks['ContentGetParserOutput'] );
-               }
-       }
-
-       public function teardown() {
-               global $wgHooks;
-
-               // restore hooks that force custom rendering
-               if ( $this->savedContentGetParserOutput !== null ) {
-                       $wgHooks['ContentGetParserOutput'] = $this->savedContentGetParserOutput;
-               }
-
-               parent::teardown();
        }
 
        public function newContent( $text ) {
index bd4ae35..7becd6f 100644 (file)
@@ -361,6 +361,52 @@ just a test"
                $this->assertEquals( CONTENT_MODEL_WIKITEXT, $content->getContentHandler()->getModelID() );
        }
 
+       public function testRedirectParserOption() {
+               $title = Title::newFromText( 'testRedirectParserOption' );
+
+               // Set up hook and its reporting variables
+               $wikitext = null;
+               $redirectTarget = null;
+               $this->mergeMwGlobalArrayValue( 'wgHooks', array(
+                       'InternalParseBeforeLinks' => array(
+                               function ( &$parser, &$text, &$stripState ) use ( &$wikitext, &$redirectTarget ) {
+                                       $wikitext = $text;
+                                       $redirectTarget = $parser->getOptions()->getRedirectTarget();
+                               }
+                       )
+               ) );
+
+               // Test with non-redirect page
+               $wikitext = false;
+               $redirectTarget = false;
+               $content = $this->newContent( 'hello world.' );
+               $options = $content->getContentHandler()->makeParserOptions( 'canonical' );
+               $options->setRedirectTarget( $title );
+               $content->getParserOutput( $title, null, $options );
+               $this->assertEquals( 'hello world.', $wikitext,
+                       'Wikitext passed to hook was not as expected'
+               );
+               $this->assertEquals( null, $redirectTarget, 'Redirect seen in hook was not null' );
+               $this->assertEquals( $title, $options->getRedirectTarget(),
+                       'ParserOptions\' redirectTarget was changed'
+               );
+
+               // Test with a redirect page
+               $wikitext = false;
+               $redirectTarget = false;
+               $content = $this->newContent( "#REDIRECT [[TestRedirectParserOption/redir]]\nhello redirect." );
+               $options = $content->getContentHandler()->makeParserOptions( 'canonical' );
+               $content->getParserOutput( $title, null, $options );
+               $this->assertEquals( 'hello redirect.', $wikitext, 'Wikitext passed to hook was not as expected' );
+               $this->assertNotEquals( null, $redirectTarget, 'Redirect seen in hook was null' );
+               $this->assertEquals( 'TestRedirectParserOption/redir', $redirectTarget->getFullText(),
+                       'Redirect seen in hook was not the expected title'
+               );
+               $this->assertEquals( null, $options->getRedirectTarget(),
+                       'ParserOptions\' redirectTarget was changed'
+               );
+       }
+
        public static function dataEquals() {
                return array(
                        array( new WikitextContent( "hallo" ), null, false ),
index 1db6fae..98b4ca0 100644 (file)
@@ -162,6 +162,9 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
                $this->assertEquals( "DROP INDEX foo -- dropping index",
                        $this->replaceVars( "DROP INDEX /*i*/foo ON /*_*/bar -- dropping index" )
                );
+               $this->assertEquals( "INSERT OR IGNORE INTO foo VALUES ('bar')",
+                       $this->replaceVars( "INSERT OR IGNORE INTO foo VALUES ('bar')" )
+               );
        }
 
        /**
index 7171ee5..f0c829c 100644 (file)
@@ -99,6 +99,10 @@ class ORMTableTest extends MediaWikiTestCase {
 
 class PageORMTableForTesting extends ORMTable {
 
+       public function __construct() {
+               $this->fieldPrefix = 'page_';
+       }
+
        /**
         * @see ORMTable::getName
         *
@@ -138,13 +142,4 @@ class PageORMTableForTesting extends ORMTable {
                        'title' => 'str',
                );
        }
-
-       /**
-        * @see ORMTable::getFieldPrefix
-        *
-        * @return string
-        */
-       protected function getFieldPrefix() {
-               return 'page_';
-       }
 }
index c9459c9..ca31cf9 100644 (file)
@@ -150,6 +150,10 @@ class TestORMRow extends ORMRow {
 
 class TestORMTable extends ORMTable {
 
+       public function __construct() {
+               $this->fieldPrefix = 'test_';
+       }
+
        /**
         * Returns the name of the database table objects of this type are stored in.
         *
@@ -204,15 +208,4 @@ class TestORMTable extends ORMTable {
                        'time' => 'str', // TS_MW
                );
        }
-
-       /**
-        * Gets the db field prefix.
-        *
-        * @since 1.20
-        *
-        * @return string
-        */
-       protected function getFieldPrefix() {
-               return 'test_';
-       }
 }
index 17c6224..6e41de7 100644 (file)
@@ -103,7 +103,7 @@ class MWDebugTest extends MediaWikiTestCase {
                $this->assertInstanceOf( 'ApiResult', $result );
                $data = $result->getData();
 
-               $expectedKeys = array( 'mwVersion', 'phpVersion', 'gitRevision', 'gitBranch',
+               $expectedKeys = array( 'mwVersion', 'phpEngine', 'phpVersion', 'gitRevision', 'gitBranch',
                        'gitViewUrl', 'time', 'log', 'debugLog', 'queries', 'request', 'memory',
                        'memoryPeak', 'includes', 'profile', '_element' );
 
index b3d57e7..5348c85 100644 (file)
@@ -3,7 +3,7 @@
 class DeferredUpdatesTest extends MediaWikiTestCase {
 
        public function testDoUpdates() {
-               $updates = array (
+               $updates = array(
                        '1' => 'deferred update 1',
                        '2' => 'deferred update 2',
                        '3' => 'deferred update 3',
@@ -18,7 +18,7 @@ class DeferredUpdatesTest extends MediaWikiTestCase {
                        function () use ( $updates ) {
                                echo $updates['2'];
                                DeferredUpdates::addCallableUpdate(
-                                       function() use ( $updates ) {
+                                       function () use ( $updates ) {
                                                echo $updates['2-1'];
                                        }
                                );
index c45de36..ef0f2a9 100644 (file)
@@ -87,7 +87,7 @@ class MWExceptionTest extends MediaWikiTestCase {
                $this->assertEquals( $expectedReturn, $e->runHooks( $name, $args ) );
        }
 
-       public function provideRunHooks() {
+       public static function provideRunHooks() {
                return array(
                        array( null, null, null, null ),
                        array( array(), 'name', array(), null ),
@@ -134,7 +134,7 @@ class MWExceptionTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $e->isCommandLine() );
        }
 
-       public function provideIsCommandLine() {
+       public static function provideIsCommandLine() {
                return array(
                        array( false, null ),
                        array( true, true ),
@@ -155,7 +155,7 @@ class MWExceptionTest extends MediaWikiTestCase {
                        "The $exception_class exception should be JSON serializable, got false." );
        }
 
-       public function provideExceptionClasses() {
+       public static function provideExceptionClasses() {
                return array(
                        array( 'Exception' ),
                        array( 'MWException' ),
@@ -192,7 +192,7 @@ class MWExceptionTest extends MediaWikiTestCase {
        /**
         * Returns test cases: exception class, key name, gettype()
         */
-       public function provideJsonSerializedKeys() {
+       public static function provideJsonSerializedKeys() {
                $testCases = array();
                foreach ( array( 'Exception', 'MWException' ) as $exClass ) {
                        $exTests = array(
diff --git a/tests/phpunit/includes/htmlform/HTMLAutoCompleteSelectFieldTest.php b/tests/phpunit/includes/htmlform/HTMLAutoCompleteSelectFieldTest.php
new file mode 100644 (file)
index 0000000..2c7f50c
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Unit tests for HTMLAutoCompleteSelectField
+ *
+ * @covers HTMLAutoCompleteSelectField
+ */
+class HtmlAutoCompleteSelectFieldTest extends MediaWikiTestCase {
+
+       var $options = array(
+               'Bulgaria'     => 'BGR',
+               'Burkina Faso' => 'BFA',
+               'Burundi'      => 'BDI',
+       );
+
+       /**
+        * Verify that attempting to instantiate an HTMLAutoCompleteSelectField
+        * without providing any autocomplete options causes an exception to be
+        * thrown.
+        *
+        * @expectedException        MWException
+        * @expectedExceptionMessage called without any autocompletions
+        */
+       function testMissingAutocompletions() {
+               new HTMLAutoCompleteSelectField( array( 'fieldname' => 'Test' ) );
+       }
+
+       /**
+        * Verify that the autocomplete options are correctly encoded as
+        * the 'data-autocomplete' attribute of the field.
+        *
+        * @covers HTMLAutoCompleteSelectField::getAttributes
+        */
+       function testGetAttributes() {
+               $field = new HTMLAutoCompleteSelectField( array(
+                       'fieldname'    => 'Test',
+                       'autocomplete' => $this->options,
+               ) );
+
+               $attributes = $field->getAttributes( array() );
+               $this->assertEquals( array_keys( $this->options ),
+                       FormatJson::decode( $attributes['data-autocomplete'] ),
+                       "The 'data-autocomplete' attribute encodes autocomplete option keys as a JSON array."
+               );
+       }
+
+       /**
+        * Test that the optional select dropdown is included or excluded based on
+        * the presence or absence of the 'options' parameter.
+        */
+       function testOptionalSelectElement() {
+               $params = array(
+                       'fieldname'    => 'Test',
+                       'autocomplete' => $this->options,
+                       'options'      => $this->options,
+               );
+
+               $field = new HTMLAutoCompleteSelectField( $params );
+               $html = $field->getInputHTML( false );
+               $this->assertRegExp( '/select/', $html,
+                       "When the 'options' parameter is set, the HTML includes a <select>" );
+
+               unset( $params['options'] );
+               $field = new HTMLAutoCompleteSelectField( $params );
+               $html = $field->getInputHTML( false );
+               $this->assertNotRegExp( '/select/', $html,
+                       "When the 'options' parameter is not set, the HTML does not include a <select>" );
+       }
+}
diff --git a/tests/phpunit/includes/installer/DatabaseUpdaterTest.php b/tests/phpunit/includes/installer/DatabaseUpdaterTest.php
new file mode 100644 (file)
index 0000000..abff3e6
--- /dev/null
@@ -0,0 +1,279 @@
+<?php
+
+class DatabaseUpdaterTest extends MediaWikiTestCase {
+
+       public function testSetAppliedUpdates() {
+               $db = new FakeDatabase();
+               $dbu = new FakeDatabaseUpdater( $db );
+               $dbu->setAppliedUpdates( "test", array() );
+               $expected = "updatelist-test-" . time() . "0";
+               $actual = $db->lastInsertData['ul_key'];
+               $this->assertEquals( $expected, $actual, var_export( $db->lastInsertData, true ) );
+               $dbu->setAppliedUpdates( "test", array() );
+               $expected = "updatelist-test-" . time() . "1";
+               $actual = $db->lastInsertData['ul_key'];
+               $this->assertEquals( $expected, $actual, var_export( $db->lastInsertData, true ) );
+       }
+}
+
+class FakeDatabase extends DatabaseBase {
+       public $lastInsertTable;
+       public $lastInsertData;
+
+       function __construct() {
+       }
+
+       function clearFlag( $arg ) {
+       }
+
+       function setFlag( $arg ) {
+       }
+
+       public function insert( $table, $a, $fname = __METHOD__, $options = array() ) {
+               $this->lastInsertTable = $table;
+               $this->lastInsertData = $a;
+       }
+
+       /**
+        * Get the type of the DBMS, as it appears in $wgDBtype.
+        *
+        * @return string
+        */
+       function getType() {
+               // TODO: Implement getType() method.
+       }
+
+       /**
+        * Open a connection to the database. Usually aborts on failure
+        *
+        * @param string $server Database server host
+        * @param string $user Database user name
+        * @param string $password Database user password
+        * @param string $dbName Database name
+        * @return bool
+        * @throws DBConnectionError
+        */
+       function open( $server, $user, $password, $dbName ) {
+               // TODO: Implement open() method.
+       }
+
+       /**
+        * Fetch the next row from the given result object, in object form.
+        * Fields can be retrieved with $row->fieldname, with fields acting like
+        * member variables.
+        * If no more rows are available, false is returned.
+        *
+        * @param ResultWrapper|stdClass $res Object as returned from DatabaseBase::query(), etc.
+        * @return stdClass|bool
+        * @throws DBUnexpectedError Thrown if the database returns an error
+        */
+       function fetchObject( $res ) {
+               // TODO: Implement fetchObject() method.
+       }
+
+       /**
+        * Fetch the next row from the given result object, in associative array
+        * form. Fields are retrieved with $row['fieldname'].
+        * If no more rows are available, false is returned.
+        *
+        * @param ResultWrapper $res Result object as returned from DatabaseBase::query(), etc.
+        * @return array|bool
+        * @throws DBUnexpectedError Thrown if the database returns an error
+        */
+       function fetchRow( $res ) {
+               // TODO: Implement fetchRow() method.
+       }
+
+       /**
+        * Get the number of rows in a result object
+        *
+        * @param mixed $res A SQL result
+        * @return int
+        */
+       function numRows( $res ) {
+               // TODO: Implement numRows() method.
+       }
+
+       /**
+        * Get the number of fields in a result object
+        * @see http://www.php.net/mysql_num_fields
+        *
+        * @param mixed $res A SQL result
+        * @return int
+        */
+       function numFields( $res ) {
+               // TODO: Implement numFields() method.
+       }
+
+       /**
+        * Get a field name in a result object
+        * @see http://www.php.net/mysql_field_name
+        *
+        * @param mixed $res A SQL result
+        * @param int $n
+        * @return string
+        */
+       function fieldName( $res, $n ) {
+               // TODO: Implement fieldName() method.
+       }
+
+       /**
+        * Get the inserted value of an auto-increment row
+        *
+        * The value inserted should be fetched from nextSequenceValue()
+        *
+        * Example:
+        * $id = $dbw->nextSequenceValue( 'page_page_id_seq' );
+        * $dbw->insert( 'page', array( 'page_id' => $id ) );
+        * $id = $dbw->insertId();
+        *
+        * @return int
+        */
+       function insertId() {
+               // TODO: Implement insertId() method.
+       }
+
+       /**
+        * Change the position of the cursor in a result object
+        * @see http://www.php.net/mysql_data_seek
+        *
+        * @param mixed $res A SQL result
+        * @param int $row
+        */
+       function dataSeek( $res, $row ) {
+               // TODO: Implement dataSeek() method.
+       }
+
+       /**
+        * Get the last error number
+        * @see http://www.php.net/mysql_errno
+        *
+        * @return int
+        */
+       function lastErrno() {
+               // TODO: Implement lastErrno() method.
+       }
+
+       /**
+        * Get a description of the last error
+        * @see http://www.php.net/mysql_error
+        *
+        * @return string
+        */
+       function lastError() {
+               // TODO: Implement lastError() method.
+       }
+
+       /**
+        * mysql_fetch_field() wrapper
+        * Returns false if the field doesn't exist
+        *
+        * @param string $table Table name
+        * @param string $field Field name
+        *
+        * @return Field
+        */
+       function fieldInfo( $table, $field ) {
+               // TODO: Implement fieldInfo() method.
+       }
+
+       /**
+        * Get information about an index into an object
+        * @param string $table Table name
+        * @param string $index Index name
+        * @param string $fname Calling function name
+        * @return mixed Database-specific index description class or false if the index does not exist
+        */
+       function indexInfo( $table, $index, $fname = __METHOD__ ) {
+               // TODO: Implement indexInfo() method.
+       }
+
+       /**
+        * Get the number of rows affected by the last write query
+        * @see http://www.php.net/mysql_affected_rows
+        *
+        * @return int
+        */
+       function affectedRows() {
+               // TODO: Implement affectedRows() method.
+       }
+
+       /**
+        * Wrapper for addslashes()
+        *
+        * @param string $s String to be slashed.
+        * @return string Slashed string.
+        */
+       function strencode( $s ) {
+               // TODO: Implement strencode() method.
+       }
+
+       /**
+        * Returns a wikitext link to the DB's website, e.g.,
+        *   return "[http://www.mysql.com/ MySQL]";
+        * Should at least contain plain text, if for some reason
+        * your database has no website.
+        *
+        * @return string Wikitext of a link to the server software's web site
+        */
+       function getSoftwareLink() {
+               // TODO: Implement getSoftwareLink() method.
+       }
+
+       /**
+        * A string describing the current software version, like from
+        * mysql_get_server_info().
+        *
+        * @return string Version information from the database server.
+        */
+       function getServerVersion() {
+               // TODO: Implement getServerVersion() method.
+       }
+
+       /**
+        * Closes underlying database connection
+        * @since 1.20
+        * @return bool Whether connection was closed successfully
+        */
+       protected function closeConnection() {
+               // TODO: Implement closeConnection() method.
+       }
+
+       /**
+        * The DBMS-dependent part of query()
+        *
+        * @param string $sql SQL query.
+        * @return ResultWrapper|bool Result object to feed to fetchObject,
+        *   fetchRow, ...; or false on failure
+        */
+       protected function doQuery( $sql ) {
+               // TODO: Implement doQuery() method.
+       }
+}
+
+class FakeDatabaseUpdater extends DatabaseUpdater {
+       function __construct( $db ) {
+               $this->db = $db;
+               self::$updateCounter = 0;
+       }
+
+       /**
+        * Get an array of updates to perform on the database. Should return a
+        * multi-dimensional array. The main key is the MediaWiki version (1.12,
+        * 1.13...) with the values being arrays of updates, identical to how
+        * updaters.inc did it (for now)
+        *
+        * @return array
+        */
+       protected function getCoreUpdateList() {
+               return array();
+       }
+
+       public function canUseNewUpdatelog() {
+               return true;
+       }
+
+       public function setAppliedUpdates( $version, $updates = array() ) {
+               parent::setAppliedUpdates( $version, $updates );
+       }
+}
index 69e4006..ea1a4f6 100644 (file)
@@ -247,8 +247,13 @@ class JobQueueTest extends MediaWikiTestCase {
                        $this->assertNull( $queue->push( $this->newJob( 0, $root1 ) ), "Push worked ($desc)" );
                }
                $queue->deduplicateRootJob( $this->newJob( 0, $root1 ) );
-               sleep( 1 ); // roo job timestamp will increase
-               $root2 = Job::newRootJobParams( "nulljobspam:$id" ); // task ID/timestamp
+
+               $root2 = $root1;
+               # Add a second to UNIX epoch and format back to TS_MW
+               $root2_ts = strtotime( $root2['rootJobTimestamp'] );
+               $root2_ts++;
+               $root2['rootJobTimestamp'] = wfTimestamp( TS_MW, $root2_ts );
+
                $this->assertNotEquals( $root1['rootJobTimestamp'], $root2['rootJobTimestamp'],
                        "Root job signatures have different timestamps." );
                for ( $i = 0; $i < 5; ++$i ) {
diff --git a/tests/phpunit/includes/jobqueue/JobTest.php b/tests/phpunit/includes/jobqueue/JobTest.php
new file mode 100644 (file)
index 0000000..93069d2
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * @author Adam Shorland
+ */
+class JobTest extends MediaWikiTestCase {
+
+       /**
+        * @dataProvider provideTestToString
+        *
+        * @param Job $job
+        * @param string $expected
+        *
+        * @covers Job::toString
+        */
+       public function testToString( $job, $expected ) {
+               $this->assertEquals( $expected, $job->toString() );
+       }
+
+       public function provideTestToString() {
+               $mockToStringObj = $this->getMock( 'stdClass', array( '__toString' ) );
+               $mockToStringObj->expects( $this->any() )
+                       ->method( '__toString' )
+                       ->will( $this->returnValue( '{STRING_OBJ_VAL}' ) );
+
+               return array(
+                       array(
+                               $this->getMockJob( false ),
+                               'someCommand '
+                       ),
+                       array(
+                               $this->getMockJob( array( 'key' => 'val' ) ),
+                               'someCommand  key=val'
+                       ),
+                       array(
+                               $this->getMockJob( array( 'key' => array( 'inkey' => 'inval' ) ) ),
+                               'someCommand  key={"inkey":"inval"}'
+                       ),
+                       array(
+                               $this->getMockJob( array( 'val1' ) ),
+                               'someCommand  0=val1'
+                       ),
+                       array(
+                               $this->getMockJob( array( 'val1', 'val2' ) ),
+                               'someCommand  0=val1 1=val2'
+                       ),
+                       array(
+                               $this->getMockJob( array( new stdClass() ) ),
+                               'someCommand  0=object(stdClass)'
+                       ),
+                       array(
+                               $this->getMockJob( array( $mockToStringObj ) ),
+                               'someCommand  0={STRING_OBJ_VAL}'
+                       ),
+               );
+       }
+
+       public function getMockJob( $params ) {
+               $mock = $this->getMockForAbstractClass(
+                       'Job',
+                       array( 'someCommand', new Title(), $params ),
+                       'SomeJob'
+               );
+               return $mock;
+       }
+
+}
index bf58ee3..7657633 100644 (file)
@@ -123,6 +123,198 @@ class FormatJsonTest extends MediaWikiTestCase {
                );
        }
 
+       public static function provideParse() {
+               return array(
+                       array( null ),
+                       array( true ),
+                       array( false ),
+                       array( 0 ),
+                       array( 1 ),
+                       array( 1.2 ),
+                       array( '' ),
+                       array( 'str' ),
+                       array( array( 0, 1, 2 ) ),
+                       array( array( 'a' => 'b' ) ),
+                       array( array( 'a' => 'b' ) ),
+                       array( array( 'a' => 'b', 'x' => array( 'c' => 'd' ) ) ),
+               );
+       }
+
+       /**
+        * Recursively convert arrays into stdClass
+        * @param array|string|bool|int|float|null $value
+        * @return stdClass|string|bool|int|float|null
+        */
+       public static function toObject( $value ) {
+               return !is_array( $value ) ? $value : (object) array_map( __METHOD__, $value );
+       }
+
+       /**
+        * @dataProvider provideParse
+        * @param mixed $value
+        */
+       public function testParse( $value ) {
+               $expected = self::toObject( $value );
+               $json = FormatJson::encode( $expected, false, FormatJson::ALL_OK );
+               $this->assertJson( $json );
+
+               $st = FormatJson::parse( $json );
+               $this->assertType( 'Status', $st );
+               $this->assertTrue( $st->isGood() );
+               $this->assertEquals( $expected, $st->getValue() );
+
+               $st = FormatJson::parse( $json, FormatJson::FORCE_ASSOC );
+               $this->assertType( 'Status', $st );
+               $this->assertTrue( $st->isGood() );
+               $this->assertEquals( $value, $st->getValue() );
+       }
+
+       /**
+        * Test data for testParseTryFixing.
+        *
+        * HHVM has a lenient json parser (yeah great idea right?) which allows
+        * trailing commas for array and object delarations among other things, so
+        * our JSON_ERROR_SYNTAX rescue block is not always triggered. It however
+        * isn't lenient in exactly the same ways as our TRY_FIXING mode, so the
+        * assertions in this test are a bit more complicated than they ideally
+        * would be:
+        *
+        * Optional third argument: true if hhvm parses the value without
+        * intervention, false otherwise. Defaults to true.
+        *
+        * Optional fourth argument: expected cannonical JSON serialization of HHVM
+        * parsed result. Defaults to the second argument's value.
+        */
+       public static function provideParseTryFixing() {
+               return array(
+                       array( "[,]", '[]', false ),
+                       array( "[ , ]", '[]', false ),
+                       array( "[ , }", false ),
+                       array( '[1],', false, true, '[1]' ),
+                       array( "[1,]", '[1]' ),
+                       array( "[1\n,]", '[1]' ),
+                       array( "[1,\n]", '[1]' ),
+                       array( "[1,]\n", '[1]' ),
+                       array( "[1\n,\n]\n", '[1]' ),
+                       array( '["a,",]', '["a,"]' ),
+                       array( "[[1,]\n,[2,\n],[3\n,]]", '[[1],[2],[3]]' ),
+                       // I wish we could parse this, but would need quote parsing
+                       array( '[[1,],[2,],[3,]]', false, true, '[[1],[2],[3]]' ),
+                       array( '[1,,]', false, false, '[1]' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideParseTryFixing
+        * @param string $value
+        * @param string|bool $expected Expected result with Zend PHP
+        * @param bool $hhvmParses Will HHVM parse this value without TRY_FIXING?
+        * @param string|bool $expectedHHVM Expected result with HHVM if different
+        * from the PHP5 expectation
+        */
+       public function testParseTryFixing(
+               $value, $expected,
+               $hhvmParses = true, $expectedHHVM = null
+       ) {
+               // PHP5 results are always expected to have isGood() === false
+               $expectedGoodStatus = false;
+
+               if ( wfIsHHVM() ) {
+                       // Use HHVM specific expected result if provided
+                       $expected = ( $expectedHHVM === null ) ? $expected : $expectedHHVM;
+                       // If HHVM parses the value natively, expect isGood() === true
+                       $expectedGoodStatus = $hhvmParses;
+               }
+
+               $st = FormatJson::parse( $value, FormatJson::TRY_FIXING );
+               $this->assertType( 'Status', $st );
+               if ( $expected === false ) {
+                       $this->assertFalse( $st->isOK(), 'Expected isOK() == false' );
+               } else {
+                       $this->assertSame( $expectedGoodStatus, $st->isGood(),
+                               'Expected isGood() == ' . ( $expectedGoodStatus ? 'true' : 'false' )
+                       );
+                       $this->assertTrue( $st->isOK(), 'Expected isOK == true' );
+                       $val = FormatJson::encode( $st->getValue(), false, FormatJson::ALL_OK );
+                       $this->assertEquals( $expected, $val );
+               }
+       }
+
+       public static function provideParseErrors() {
+               return array(
+                       array( 'aaa' ),
+                       array( '{"j": 1 ] }' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideParseErrors
+        * @param mixed $value
+        */
+       public function testParseErrors( $value ) {
+               $st = FormatJson::parse( $value );
+               $this->assertType( 'Status', $st );
+               $this->assertFalse( $st->isOK() );
+       }
+
+       public function provideStripComments() {
+               return array(
+                       array( '{"a":"b"}', '{"a":"b"}' ),
+                       array( "{\"a\":\"b\"}\n", "{\"a\":\"b\"}\n" ),
+                       array( '/*c*/{"c":"b"}', '{"c":"b"}' ),
+                       array( '{"a":"c"}/*c*/', '{"a":"c"}' ),
+                       array( '/*c//d*/{"c":"b"}', '{"c":"b"}' ),
+                       array( '{/*c*/"c":"b"}', '{"c":"b"}' ),
+                       array( "/*\nc\r\n*/{\"c\":\"b\"}", '{"c":"b"}' ),
+                       array( "//c\n{\"c\":\"b\"}", '{"c":"b"}' ),
+                       array( "//c\r\n{\"c\":\"b\"}", '{"c":"b"}' ),
+                       array( '{"a":"c"}//c', '{"a":"c"}' ),
+                       array( "{\"a-c\"://c\n\"b\"}", '{"a-c":"b"}' ),
+                       array( '{"/*a":"b"}', '{"/*a":"b"}' ),
+                       array( '{"a":"//b"}', '{"a":"//b"}' ),
+                       array( '{"a":"b/*c*/"}', '{"a":"b/*c*/"}' ),
+                       array( "{\"\\\"/*a\":\"b\"}", "{\"\\\"/*a\":\"b\"}" ),
+                       array( '', '' ),
+                       array( '/*c', '' ),
+                       array( '//c', '' ),
+                       array( '"http://example.com"', '"http://example.com"' ),
+                       array( "\0", "\0" ),
+                       array( '"Blåbærsyltetøy"', '"Blåbærsyltetøy"' ),
+               );
+       }
+
+       /**
+        * @covers FormatJson::stripComments
+        * @dataProvider provideStripComments
+        * @param string $json
+        * @param string $expect
+        */
+       public function testStripComments( $json, $expect ) {
+               $this->assertSame( $expect, FormatJson::stripComments( $json ) );
+       }
+
+       public function provideParseStripComments() {
+               return array(
+                       array( '/* blah */true', true ),
+                       array( "// blah \ntrue", true ),
+                       array( '[ "a" , /* blah */ "b" ]', array( 'a', 'b' ) ),
+               );
+       }
+
+       /**
+        * @covers FormatJson::parse
+        * @covers FormatJson::stripComments
+        * @dataProvider provideParseStripComments
+        * @param string $json
+        * @param mixed $expect
+        */
+       public function testParseStripComments( $json, $expect ) {
+               $st = FormatJson::parse( $json, FormatJson::STRIP_COMMENTS );
+               $this->assertType( 'Status', $st );
+               $this->assertTrue( $st->isGood() );
+               $this->assertEquals( $expect, $st->getValue() );
+       }
+
        /**
         * Generate a set of test cases for a particular combination of encoder options.
         *
diff --git a/tests/phpunit/includes/libs/CSSJanusTest.php b/tests/phpunit/includes/libs/CSSJanusTest.php
deleted file mode 100644 (file)
index 407f11a..0000000
+++ /dev/null
@@ -1,633 +0,0 @@
-<?php
-/**
- * Based on the test suite of the original Python
- * CSSJanus libary:
- * http://code.google.com/p/cssjanus/source/browse/trunk/cssjanus_test.py
- * Ported to PHP for ResourceLoader and has been extended since.
- *
- * @covers CSSJanus
- */
-class CSSJanusTest extends MediaWikiTestCase {
-       /**
-        * @dataProvider provideTransformCases
-        */
-       public function testTransform( $cssA, $cssB = null ) {
-
-               if ( $cssB ) {
-                       $transformedA = CSSJanus::transform( $cssA );
-                       $this->assertEquals( $transformedA, $cssB, 'Test A-B transformation' );
-
-                       $transformedB = CSSJanus::transform( $cssB );
-                       $this->assertEquals( $transformedB, $cssA, 'Test B-A transformation' );
-               } else {
-                       // If no B version is provided, it means
-                       // the output should equal the input.
-                       $transformedA = CSSJanus::transform( $cssA );
-                       $this->assertEquals( $transformedA, $cssA, 'Nothing was flipped' );
-               }
-       }
-
-       /**
-        * @dataProvider provideTransformAdvancedCases
-        */
-       public function testTransformAdvanced( $code, $expectedOutput, $options = array() ) {
-               $swapLtrRtlInURL = isset( $options['swapLtrRtlInURL'] ) ?
-                       $options['swapLtrRtlInURL'] : false;
-               $swapLeftRightInURL = isset( $options['swapLeftRightInURL'] ) ?
-                       $options['swapLeftRightInURL'] : false;
-
-               $flipped = CSSJanus::transform( $code, $swapLtrRtlInURL, $swapLeftRightInURL );
-
-               $this->assertEquals( $expectedOutput, $flipped,
-                       'Test flipping, options: url-ltr-rtl=' . ( $swapLtrRtlInURL ? 'true' : 'false' )
-                               . ' url-left-right=' . ( $swapLeftRightInURL ? 'true' : 'false' )
-               );
-       }
-
-       /**
-        * @dataProvider provideTransformBrokenCases
-        * @group Broken
-        */
-       public function testTransformBroken( $code, $expectedOutput ) {
-               $flipped = CSSJanus::transform( $code );
-
-               $this->assertEquals( $expectedOutput, $flipped, 'Test flipping' );
-       }
-
-       /**
-        * These transform cases are tested *in both directions*
-        * No need to declare a principle twice in both directions here.
-        */
-       public static function provideTransformCases() {
-               return array(
-                       // Property keys
-                       array(
-                               '.foo { left: 0; }',
-                               '.foo { right: 0; }'
-                       ),
-                       // Guard against partial keys
-                       // (CSS currently doesn't have flippable properties
-                       // that contain the direction as part of the key without
-                       // dash separation)
-                       array(
-                               '.foo { alright: 0; }'
-                       ),
-                       array(
-                               '.foo { balleft: 0; }'
-                       ),
-
-                       // Dashed property keys
-                       array(
-                               '.foo { padding-left: 0; }',
-                               '.foo { padding-right: 0; }'
-                       ),
-                       array(
-                               '.foo { margin-left: 0; }',
-                               '.foo { margin-right: 0; }'
-                       ),
-                       array(
-                               '.foo { border-left: 0; }',
-                               '.foo { border-right: 0; }'
-                       ),
-
-                       // Double-dashed property keys
-                       array(
-                               '.foo { border-left-color: red; }',
-                               '.foo { border-right-color: red; }'
-                       ),
-                       array(
-                               // Includes unknown properties?
-                               '.foo { x-left-y: 0; }',
-                               '.foo { x-right-y: 0; }'
-                       ),
-
-                       // Multi-value properties
-                       array(
-                               '.foo { padding: 0; }'
-                       ),
-                       array(
-                               '.foo { padding: 0 1px; }'
-                       ),
-                       array(
-                               '.foo { padding: 0 1px 2px; }'
-                       ),
-                       array(
-                               '.foo { padding: 0 1px 2px 3px; }',
-                               '.foo { padding: 0 3px 2px 1px; }'
-                       ),
-
-                       // Shorthand / Four notation
-                       array(
-                               '.foo { padding: .25em 15px 0pt 0ex; }',
-                               '.foo { padding: .25em 0ex 0pt 15px; }'
-                       ),
-                       array(
-                               '.foo { margin: 1px -4px 3px 2px; }',
-                               '.foo { margin: 1px 2px 3px -4px; }'
-                       ),
-                       array(
-                               '.foo { padding: 0 15px .25em 0; }',
-                               '.foo { padding: 0 0 .25em 15px; }'
-                       ),
-                       array(
-                               '.foo { padding: 1px 4.1grad 3px 2%; }',
-                               '.foo { padding: 1px 2% 3px 4.1grad; }'
-                       ),
-                       array(
-                               '.foo { padding: 1px 2px 3px auto; }',
-                               '.foo { padding: 1px auto 3px 2px; }'
-                       ),
-                       array(
-                               '.foo { padding: 1px inherit 3px auto; }',
-                               '.foo { padding: 1px auto 3px inherit; }'
-                       ),
-                       // border-radius assigns different meanings to the values
-                       array(
-                               '.foo { border-radius: .25em 15px 0pt 0ex; }',
-                               '.foo { border-radius: 15px .25em 0ex 0pt; }'
-                       ),
-                       array(
-                               '.foo { border-radius: 0px 0px 5px 5px; }',
-                       ),
-                       // Ensure the rule doesn't break other stuff
-                       array(
-                               '.foo { x-unknown: a b c d; }'
-                       ),
-                       array(
-                               '.foo barpx 0 2% { opacity: 0; }'
-                       ),
-                       array(
-                               '#settings td p strong'
-                       ),
-                       array(
-                               // Color names
-                               '.foo { border-color: red green blue white }',
-                               '.foo { border-color: red white blue green }',
-                       ),
-                       array(
-                               // Color name, hexdecimal, RGB & RGBA
-                               '.foo { border-color: red #f00 rgb(255, 0, 0) rgba(255, 0, 0, 0.5) }',
-                               '.foo { border-color: red rgba(255, 0, 0, 0.5) rgb(255, 0, 0) #f00 }',
-                       ),
-                       array(
-                               // Color name, hexdecimal, HSL & HSLA
-                               '.foo { border-color: red #f00 hsl(0, 100%, 50%) hsla(0, 100%, 50%, 0.5) }',
-                               '.foo { border-color: red hsla(0, 100%, 50%, 0.5) hsl(0, 100%, 50%) #f00 }',
-                       ),
-                       array(
-                               // Do not mangle 5 or more values
-                               '.foo { -x-unknown: 1 2 3 4 5; }'
-                       ),
-                       array(
-                               '.foo { -x-unknown: 1 2 3 4 5 6; }'
-                       ),
-
-                       // Shorthand / Three notation
-                       array(
-                               '.foo { margin: 1em 0 .25em; }'
-                       ),
-                       array(
-                               '.foo { margin:-1.5em 0 -.75em; }'
-                       ),
-
-                       // Shorthand / Two notation
-                       array(
-                               '.foo { padding: 1px 2px; }'
-                       ),
-
-                       // Shorthand / One notation
-                       array(
-                               '.foo { padding: 1px; }'
-                       ),
-
-                       // text-shadow and box-shadow
-                       array(
-                               '.foo { box-shadow: -6px 3px 8px 5px rgba(0, 0, 0, 0.25); }',
-                               '.foo { box-shadow: 6px 3px 8px 5px rgba(0, 0, 0, 0.25); }',
-                       ),
-                       array(
-                               '.foo { box-shadow: inset -6px 3px 8px 5px rgba(0, 0, 0, 0.25); }',
-                               '.foo { box-shadow: inset 6px 3px 8px 5px rgba(0, 0, 0, 0.25); }',
-                       ),
-                       array(
-                               '.foo { text-shadow: orange 2px 0; }',
-                               '.foo { text-shadow: orange -2px 0; }',
-                       ),
-                       array(
-                               '.foo { text-shadow: 2px 0 orange; }',
-                               '.foo { text-shadow: -2px 0 orange; }',
-                       ),
-                       array(
-                               // Don't mangle zeroes
-                               '.foo { text-shadow: orange 0 2px; }'
-                       ),
-                       array(
-                               // Make sure floats are not considered zero
-                               '.foo { box-shadow: inset .5em 0 0 white; }',
-                               '.foo { box-shadow: inset -.5em 0 0 white; }',
-                       ),
-
-                       // Direction
-                       // Note: This differs from the Python implementation,
-                       // see also CSSJanus::fixDirection for more info.
-                       array(
-                               '.foo { direction: ltr; }',
-                               '.foo { direction: rtl; }'
-                       ),
-                       array(
-                               '.foo { direction: rtl; }',
-                               '.foo { direction: ltr; }'
-                       ),
-                       array(
-                               'input { direction: ltr; }',
-                               'input { direction: rtl; }'
-                       ),
-                       array(
-                               'input { direction: rtl; }',
-                               'input { direction: ltr; }'
-                       ),
-                       array(
-                               'body { direction: ltr; }',
-                               'body { direction: rtl; }'
-                       ),
-                       array(
-                               '.foo, body, input { direction: ltr; }',
-                               '.foo, body, input { direction: rtl; }'
-                       ),
-                       array(
-                               'body { padding: 10px; direction: ltr; }',
-                               'body { padding: 10px; direction: rtl; }'
-                       ),
-                       array(
-                               'body { direction: ltr } .myClass { direction: ltr }',
-                               'body { direction: rtl } .myClass { direction: rtl }'
-                       ),
-
-                       // Left/right values
-                       array(
-                               '.foo { float: left; }',
-                               '.foo { float: right; }'
-                       ),
-                       array(
-                               '.foo { text-align: left; }',
-                               '.foo { text-align: right; }'
-                       ),
-                       array(
-                               '.foo { -x-unknown: left; }',
-                               '.foo { -x-unknown: right; }'
-                       ),
-                       // Guard against selectors that look flippable
-                       array(
-                               '.column-left { width: 0; }'
-                       ),
-                       array(
-                               'a.left { width: 0; }'
-                       ),
-                       array(
-                               'a.leftification { width: 0; }'
-                       ),
-                       array(
-                               'a.ltr { width: 0; }'
-                       ),
-                       array(
-                               # <div class="a-ltr png">
-                               '.a-ltr.png { width: 0; }'
-                       ),
-                       array(
-                               # <foo-ltr attr="x">
-                               'foo-ltr[attr="x"] { width: 0; }'
-                       ),
-                       array(
-                               'div.left > span.right+span.left { width: 0; }'
-                       ),
-                       array(
-                               '.thisclass .left .myclass { width: 0; }'
-                       ),
-                       array(
-                               '.thisclass .left .myclass #myid { width: 0; }'
-                       ),
-
-                       // Cursor values (east/west)
-                       array(
-                               '.foo { cursor: e-resize; }',
-                               '.foo { cursor: w-resize; }'
-                       ),
-                       array(
-                               '.foo { cursor: se-resize; }',
-                               '.foo { cursor: sw-resize; }'
-                       ),
-                       array(
-                               '.foo { cursor: ne-resize; }',
-                               '.foo { cursor: nw-resize; }'
-                       ),
-
-                       // Background
-                       array(
-                               '.foo { background-position: top left; }',
-                               '.foo { background-position: top right; }'
-                       ),
-                       array(
-                               '.foo { background: url(/foo/bar.png) top left; }',
-                               '.foo { background: url(/foo/bar.png) top right; }'
-                       ),
-                       array(
-                               '.foo { background: url(/foo/bar.png) top left no-repeat; }',
-                               '.foo { background: url(/foo/bar.png) top right no-repeat; }'
-                       ),
-                       array(
-                               '.foo { background: url(/foo/bar.png) no-repeat top left; }',
-                               '.foo { background: url(/foo/bar.png) no-repeat top right; }'
-                       ),
-                       array(
-                               '.foo { background: #fff url(/foo/bar.png) no-repeat top left; }',
-                               '.foo { background: #fff url(/foo/bar.png) no-repeat top right; }'
-                       ),
-                       array(
-                               '.foo { background-position: 100% 40%; }',
-                               '.foo { background-position: 0% 40%; }'
-                       ),
-                       array(
-                               '.foo { background-position: 23% 0; }',
-                               '.foo { background-position: 77% 0; }'
-                       ),
-                       array(
-                               '.foo { background-position: 23% auto; }',
-                               '.foo { background-position: 77% auto; }'
-                       ),
-                       array(
-                               '.foo { background-position-x: 23%; }',
-                               '.foo { background-position-x: 77%; }'
-                       ),
-                       array(
-                               '.foo { background-position-y: 23%; }',
-                               '.foo { background-position-y: 23%; }'
-                       ),
-                       array(
-                               '.foo { background:url(../foo.png) no-repeat 75% 50%; }',
-                               '.foo { background:url(../foo.png) no-repeat 25% 50%; }'
-                       ),
-                       array(
-                               '.foo { background: 10% 20% } .bar { background: 40% 30% }',
-                               '.foo { background: 90% 20% } .bar { background: 60% 30% }'
-                       ),
-
-                       // Multiple rules
-                       array(
-                               'body { direction: rtl; float: right; } .foo { direction: ltr; float: right; }',
-                               'body { direction: ltr; float: left; } .foo { direction: rtl; float: left; }',
-                       ),
-
-                       // Duplicate properties
-                       array(
-                               '.foo { float: left; float: right; float: left; }',
-                               '.foo { float: right; float: left; float: right; }',
-                       ),
-
-                       // Preserve comments
-                       array(
-                               '/* left /* right */left: 10px',
-                               '/* left /* right */right: 10px'
-                       ),
-                       array(
-                               '/*left*//*left*/left: 10px',
-                               '/*left*//*left*/right: 10px'
-                       ),
-                       array(
-                               '/* Going right is cool */ .foo { width: 0 }',
-                       ),
-                       array(
-                               "/* padding-right 1 2 3 4 */\n#test { width: 0}\n/*right*/"
-                       ),
-                       array(
-                               "/** Two line comment\n * left\n \*/\n#test {width: 0}"
-                       ),
-
-                       // @noflip annotation
-                       array(
-                               // before selector (single)
-                               '/* @noflip */ div { float: left; }'
-                       ),
-                       array(
-                               // before selector (multiple)
-                               '/* @noflip */ div, .notme { float: left; }'
-                       ),
-                       array(
-                               // inside selector
-                               'div, /* @noflip */ .foo { float: left; }'
-                       ),
-                       array(
-                               // after selector
-                               'div, .notme /* @noflip */ { float: left; }'
-                       ),
-                       array(
-                               // before multiple rules
-                               '/* @noflip */ div { float: left; } .foo { float: left; }',
-                               '/* @noflip */ div { float: left; } .foo { float: right; }'
-                       ),
-                       array(
-                               // support parentheses in selector
-                               '/* @noflip */ .test:not(:first) { margin-right: -0.25em; margin-left: 0.25em; }',
-                               '/* @noflip */ .test:not(:first) { margin-right: -0.25em; margin-left: 0.25em; }'
-                       ),
-                       array(
-                               // after multiple rules
-                               '.foo { float: left; } /* @noflip */ div { float: left; }',
-                               '.foo { float: right; } /* @noflip */ div { float: left; }'
-                       ),
-                       array(
-                               // before multiple properties
-                               'div { /* @noflip */ float: left; text-align: left; }',
-                               'div { /* @noflip */ float: left; text-align: right; }'
-                       ),
-                       array(
-                               // after multiple properties
-                               'div { float: left; /* @noflip */ text-align: left; }',
-                               'div { float: right; /* @noflip */ text-align: left; }'
-                       ),
-                       array(
-                               // before a *= attribute selector with multiple properties
-                               '/* @noflip */ div.foo[bar*=baz] { float:left; clear: left; }'
-                       ),
-                       array(
-                               // before a ^= attribute selector with multiple properties
-                               '/* @noflip */ div.foo[bar^=baz] { float:left; clear: left; }'
-                       ),
-                       array(
-                               // before a ~= attribute selector with multiple properties
-                               '/* @noflip */ div.foo[bar~=baz] { float:left; clear: left; }'
-                       ),
-                       array(
-                               // before a = attribute selector with multiple properties
-                               '/* @noflip */ div.foo[bar=baz] { float:left; clear: left; }'
-                       ),
-                       array(
-                               // before a quoted attribute selector with multiple properties
-                               '/* @noflip */ div.foo[bar=\'baz{quux\'] { float:left; clear: left; }'
-                       ),
-
-                       // Guard against css3 stuff
-                       array(
-                               'background-image: -moz-linear-gradient(#326cc1, #234e8c);'
-                       ),
-                       array(
-                               'background-image: -webkit-gradient(linear, 100% 0%, 0% 0%, from(#666666), to(#ffffff));'
-                       ),
-
-                       // CSS syntax / white-space variations
-                       // spaces, no spaces, tabs, new lines, omitting semi-colons
-                       array(
-                               ".foo { left: 0; }",
-                               ".foo { right: 0; }"
-                       ),
-                       array(
-                               ".foo{ left: 0; }",
-                               ".foo{ right: 0; }"
-                       ),
-                       array(
-                               ".foo{ left: 0 }",
-                               ".foo{ right: 0 }"
-                       ),
-                       array(
-                               ".foo{left:0 }",
-                               ".foo{right:0 }"
-                       ),
-                       array(
-                               ".foo{left:0}",
-                               ".foo{right:0}"
-                       ),
-                       array(
-                               ".foo  {  left : 0 ; }",
-                               ".foo  {  right : 0 ; }"
-                       ),
-                       array(
-                               ".foo\n  {  left : 0 ; }",
-                               ".foo\n  {  right : 0 ; }"
-                       ),
-                       array(
-                               ".foo\n  {  \nleft : 0 ; }",
-                               ".foo\n  {  \nright : 0 ; }"
-                       ),
-                       array(
-                               ".foo\n  { \n left : 0 ; }",
-                               ".foo\n  { \n right : 0 ; }"
-                       ),
-                       array(
-                               ".foo\n  { \n left\n  : 0; }",
-                               ".foo\n  { \n right\n  : 0; }"
-                       ),
-                       array(
-                               ".foo \n  { \n left\n  : 0; }",
-                               ".foo \n  { \n right\n  : 0; }"
-                       ),
-                       array(
-                               ".foo\n{\nleft\n:\n0;}",
-                               ".foo\n{\nright\n:\n0;}"
-                       ),
-                       array(
-                               ".foo\n.bar {\n\tleft: 0;\n}",
-                               ".foo\n.bar {\n\tright: 0;\n}"
-                       ),
-                       array(
-                               ".foo\t{\tleft\t:\t0;}",
-                               ".foo\t{\tright\t:\t0;}"
-                       ),
-
-                       // Guard against partial keys
-                       array(
-                               '.foo { leftxx: 0; }',
-                               '.foo { leftxx: 0; }'
-                       ),
-                       array(
-                               '.foo { rightxx: 0; }',
-                               '.foo { rightxx: 0; }'
-                       ),
-               );
-       }
-
-       /**
-        * These cases are tested in one way only (format: actual, expected, msg).
-        * If both ways can be tested, either put both versions in here or move
-        * it to provideTransformCases().
-        */
-       public static function provideTransformAdvancedCases() {
-               $bgPairs = array(
-                       # [ - _ . ] <-> [ left right ltr rtl ]
-                       'foo.jpg' => 'foo.jpg',
-                       'left.jpg' => 'right.jpg',
-                       'ltr.jpg' => 'rtl.jpg',
-
-                       'foo-left.png' => 'foo-right.png',
-                       'foo_left.png' => 'foo_right.png',
-                       'foo.left.png' => 'foo.right.png',
-
-                       'foo-ltr.png' => 'foo-rtl.png',
-                       'foo_ltr.png' => 'foo_rtl.png',
-                       'foo.ltr.png' => 'foo.rtl.png',
-
-                       'left-foo.png' => 'right-foo.png',
-                       'left_foo.png' => 'right_foo.png',
-                       'left.foo.png' => 'right.foo.png',
-
-                       'ltr-foo.png' => 'rtl-foo.png',
-                       'ltr_foo.png' => 'rtl_foo.png',
-                       'ltr.foo.png' => 'rtl.foo.png',
-
-                       'foo-ltr-left.gif' => 'foo-rtl-right.gif',
-                       'foo_ltr_left.gif' => 'foo_rtl_right.gif',
-                       'foo.ltr.left.gif' => 'foo.rtl.right.gif',
-                       'foo-ltr_left.gif' => 'foo-rtl_right.gif',
-                       'foo_ltr.left.gif' => 'foo_rtl.right.gif',
-               );
-               $provider = array();
-               foreach ( $bgPairs as $left => $right ) {
-                       # By default '-rtl' and '-left' etc. are not touched,
-                       # Only when the appropiate parameter is set.
-                       $provider[] = array(
-                               ".foo { background: url(images/$left); }",
-                               ".foo { background: url(images/$left); }"
-                       );
-                       $provider[] = array(
-                               ".foo { background: url(images/$right); }",
-                               ".foo { background: url(images/$right); }"
-                       );
-                       $provider[] = array(
-                               ".foo { background: url(images/$left); }",
-                               ".foo { background: url(images/$right); }",
-                               array(
-                                       'swapLtrRtlInURL' => true,
-                                       'swapLeftRightInURL' => true,
-                               )
-                       );
-                       $provider[] = array(
-                               ".foo { background: url(images/$right); }",
-                               ".foo { background: url(images/$left); }",
-                               array(
-                                       'swapLtrRtlInURL' => true,
-                                       'swapLeftRightInURL' => true,
-                               )
-                       );
-               }
-
-               return $provider;
-       }
-
-       /**
-        * Cases that are currently failing, but
-        * should be looked at in the future as enhancements and/or bug fix
-        */
-       public static function provideTransformBrokenCases() {
-               return array(
-                       // Guard against selectors that look flippable
-                       array(
-                               # <foo-left-x attr="x">
-                               'foo-left-x[attr="x"] { width: 0; }',
-                               'foo-left-x[attr="x"] { width: 0; }'
-                       ),
-                       array(
-                               # <div class="foo" data-left="x">
-                               '.foo[data-left="x"] { width: 0; }',
-                               '.foo[data-left="x"] { width: 0; }'
-                       ),
-               );
-       }
-}
index 2b4d60d..6fa3acf 100644 (file)
@@ -147,9 +147,12 @@ class CSSMinTest extends MediaWikiTestCase {
                // Full paths start with http://localhost/w/.
                // Timestamps in output are replaced with 'timestamp'.
 
-               // data: URIs for red.gif and green.gif
+               // data: URIs for red.gif, green.gif, circle.svg
                $red   = 'data:image/gif;base64,R0lGODlhAQABAIAAAP8AADAAACwAAAAAAQABAAACAkQBADs=';
                $green = 'data:image/gif;base64,R0lGODlhAQABAIAAAACAADAAACwAAAAAAQABAAACAkQBADs=';
+               $svg = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A'
+                       . '%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%228%22%20height%3D'
+                       . '%228%22%3E%0A%3Ccircle%20cx%3D%224%22%20cy%3D%224%22%20r%3D%222%22%2F%3E%0A%3C%2Fsvg%3E%0A';
 
                return array(
                        array(
@@ -202,6 +205,11 @@ class CSSMinTest extends MediaWikiTestCase {
                                'foo { /* @embed */ background: url(red.gif); }',
                                "foo { background: url($red); background: url(http://localhost/w/red.gif?timestamp)!ie; }",
                        ),
+                       array(
+                               'Embedded file, other comments before the rule',
+                               "foo { /* Bar. */ /* @embed */ background: url(red.gif); }",
+                               "foo { /* Bar. */ background: url($red); /* Bar. */ background: url(http://localhost/w/red.gif?timestamp)!ie; }",
+                       ),
                        array(
                                'Can not re-embed data: URIs',
                                "foo { /* @embed */ background: url($red); }",
@@ -228,6 +236,11 @@ class CSSMinTest extends MediaWikiTestCase {
                                'foo { /* @embed */ background: url(large.png); }',
                                "foo { background: url(http://localhost/w/large.png?timestamp); }",
                        ),
+                       array(
+                               'SVG files are embedded without base64 encoding and unnecessary IE 6 and 7 fallback',
+                               'foo { /* @embed */ background: url(circle.svg); }',
+                               "foo { background: url($svg); }",
+                       ),
                        array(
                                'Two regular files in one rule',
                                'foo { background: url(red.gif), url(green.gif); }',
index aaee512..d4e5214 100644 (file)
@@ -12,7 +12,7 @@ class IPSetTest extends MediaWikiTestCase {
         * config is an array constructor argument for IPSet, and the tests are
         * an array of IP => expected (boolean) result against the config dataset.
         */
-       public function provider() {
+       public static function provideIPSets() {
                return array(
                        array(
                                'old_list_subset',
@@ -240,7 +240,7 @@ class IPSetTest extends MediaWikiTestCase {
         * Validates IPSet loading and matching code
         *
         * @covers IPSet
-        * @dataProvider provider
+        * @dataProvider provideIPSets
         */
        public function testIPSet( $desc, array $cfg, array $tests ) {
                $ipset = new IPSet( $cfg );
index 334d5b5..f80f78d 100644 (file)
@@ -13,7 +13,7 @@ class MWMessagePackTest extends MediaWikiTestCase {
         * using <https://github.com/msgpack/msgpack-php>, which includes a
         * serialization function.
         */
-       public function provider() {
+       public static function providePacks() {
                $tests = array(
                        array( 'nil', null, 'c0' ),
                        array( 'bool', true, 'c3' ),
@@ -66,7 +66,7 @@ class MWMessagePackTest extends MediaWikiTestCase {
        /**
         * Verify that values are serialized correctly.
         * @covers MWMessagePack::pack
-        * @dataProvider provider
+        * @dataProvider providePacks
         */
        public function testPack( $type, $value, $expected ) {
                $actual = bin2hex( MWMessagePack::pack( $value ) );
diff --git a/tests/phpunit/includes/mail/MailAddressTest.php b/tests/phpunit/includes/mail/MailAddressTest.php
new file mode 100644 (file)
index 0000000..18d2acd
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+
+class MailAddressTest extends MediaWikiTestCase {
+
+       /**
+        * @covers MailAddress::__construct
+        */
+       public function testConstructor() {
+               $ma = new MailAddress( 'foo@bar.baz', 'UserName', 'Real name' );
+               $this->assertInstanceOf( 'MailAddress', $ma );
+       }
+
+       /**
+        * @covers MailAddress::newFromUser
+        */
+       public function testNewFromUser() {
+               if ( wfIsWindows() ) {
+                       $this->markTestSkipped( 'This test only works on non-Windows platforms' );
+               }
+               $user = $this->getMock( 'User' );
+               $user->expects( $this->any() )->method( 'getName' )->will( $this->returnValue( 'UserName' ) );
+               $user->expects( $this->any() )->method( 'getEmail' )->will( $this->returnValue( 'foo@bar.baz' ) );
+               $user->expects( $this->any() )->method( 'getRealName' )->will( $this->returnValue( 'Real name' ) );
+
+               $ma = MailAddress::newFromUser( $user );
+               $this->assertInstanceOf( 'MailAddress', $ma );
+               $this->setMwGlobals( 'wgEnotifUseRealName', true );
+               $this->assertEquals( 'Real name <foo@bar.baz>', $ma->toString() );
+               $this->setMwGlobals( 'wgEnotifUseRealName', false );
+               $this->assertEquals( 'UserName <foo@bar.baz>', $ma->toString() );
+       }
+
+       /**
+        * @covers MailAddress::toString
+        * @dataProvider provideToString
+        */
+       public function testToString( $useRealName, $address, $name, $realName, $expected ) {
+               if ( wfIsWindows() ) {
+                       $this->markTestSkipped( 'This test only works on non-Windows platforms' );
+               }
+               $this->setMwGlobals( 'wgEnotifUseRealName', $useRealName );
+               $ma = new MailAddress( $address, $name, $realName );
+               $this->assertEquals( $expected, $ma->toString() );
+       }
+
+       public static function provideToString() {
+               return array(
+                       array( true, 'foo@bar.baz', 'FooBar', 'Foo Bar', 'Foo Bar <foo@bar.baz>' ),
+                       array( true, 'foo@bar.baz', 'UserName', null, 'UserName <foo@bar.baz>' ),
+                       array( true, 'foo@bar.baz', 'AUser', 'My real name', 'My real name <foo@bar.baz>' ),
+                       array( true, 'foo@bar.baz', 'A.user.name', 'my@real.name', '"my@real.name" <foo@bar.baz>' ),
+                       array( false, 'foo@bar.baz', 'AUserName', 'Some real name', 'AUserName <foo@bar.baz>' ),
+                       array( false, 'foo@bar.baz', '', '', 'foo@bar.baz' ),
+                       array( true, 'foo@bar.baz', '', '', 'foo@bar.baz' ),
+                       array( true, '', '', '', '' ),
+               );
+       }
+
+       /**
+        * @covers MailAddress::__toString
+        */
+       public function test__ToString() {
+               $ma = new MailAddress( 'some@email.com', 'UserName', 'A real name' );
+               $this->assertEquals( $ma->toString(), (string)$ma );
+       }
+}
diff --git a/tests/phpunit/includes/mail/UserMailerTest.php b/tests/phpunit/includes/mail/UserMailerTest.php
new file mode 100644 (file)
index 0000000..dca8aeb
--- /dev/null
@@ -0,0 +1,14 @@
+<?php
+
+class UserMailerTest extends MediaWikiLangTestCase {
+
+       /**
+        * @covers UserMailer::quotedPrintable
+        */
+       public function testQuotedPrintable() {
+               $this->assertEquals(
+                       "=?UTF-8?Q?=C4=88u=20legebla=3F?=",
+                       UserMailer::quotedPrintable( "\xc4\x88u legebla?", "UTF-8" ) );
+       }
+
+}
index 247e352..f0bd42a 100644 (file)
@@ -32,7 +32,7 @@ class ExifRotationTest extends MediaWikiMediaTestCase {
         * @dataProvider provideFiles
         */
        public function testMetadata( $name, $type, $info ) {
-               if ( !BitmapHandler::canRotate() ) {
+               if ( !$this->handler->canRotate() ) {
                        $this->markTestSkipped( "This test needs a rasterizer that can auto-rotate." );
                }
                $file = $this->dataFile( $name, $type );
@@ -40,12 +40,29 @@ class ExifRotationTest extends MediaWikiMediaTestCase {
                $this->assertEquals( $info['height'], $file->getHeight(), "$name: height check" );
        }
 
+       /**
+        * Same as before, but with auto-rotation set to auto.
+        *
+        * This sets scaler to image magick, which we should detect as
+        * supporting rotation.
+        * @dataProvider provideFiles
+        */
+       public function testMetadataAutoRotate( $name, $type, $info ) {
+               $this->setMwGlobals( 'wgEnableAutoRotation', null );
+               $this->setMwGlobals( 'wgUseImageMagick', true );
+               $this->setMwGlobals( 'wgUseImageResize', true );
+
+               $file = $this->dataFile( $name, $type );
+               $this->assertEquals( $info['width'], $file->getWidth(), "$name: width check" );
+               $this->assertEquals( $info['height'], $file->getHeight(), "$name: height check" );
+       }
+
        /**
         *
         * @dataProvider provideFiles
         */
        public function testRotationRendering( $name, $type, $info, $thumbs ) {
-               if ( !BitmapHandler::canRotate() ) {
+               if ( !$this->handler->canRotate() ) {
                        $this->markTestSkipped( "This test needs a rasterizer that can auto-rotate." );
                }
                foreach ( $thumbs as $size => $out ) {
@@ -133,6 +150,19 @@ class ExifRotationTest extends MediaWikiMediaTestCase {
                $this->assertEquals( $info['height'], $file->getHeight(), "$name: height check" );
        }
 
+       /**
+        * Same as before, but with auto-rotation set to auto and an image scaler that doesn't support it.
+        * @dataProvider provideFilesNoAutoRotate
+        */
+       public function testMetadataAutoRotateUnsupported( $name, $type, $info ) {
+               $this->setMwGlobals( 'wgEnableAutoRotation', null );
+               $this->setMwGlobals( 'wgUseImageResize', false );
+
+               $file = $this->dataFile( $name, $type );
+               $this->assertEquals( $info['width'], $file->getWidth(), "$name: width check" );
+               $this->assertEquals( $info['height'], $file->getHeight(), "$name: height check" );
+       }
+
        /**
         *
         * @dataProvider provideFilesNoAutoRotate
index 52a51cc..87ffd99 100644 (file)
@@ -116,7 +116,7 @@ class GIFHandlerTest extends MediaWikiMediaTestCase {
                $this->assertEquals( $expected, $actual );
        }
 
-       public function provideGetIndependentMetaArray() {
+       public static function provideGetIndependentMetaArray() {
                return array(
                        array( 'nonanimated.gif', array(
                                'GIFFileComment' => array(
index 092be89..36872a7 100644 (file)
@@ -118,7 +118,7 @@ class PNGHandlerTest extends MediaWikiMediaTestCase {
                $this->assertEquals( $expected, $actual );
        }
 
-       public function provideGetIndependentMetaArray() {
+       public static function provideGetIndependentMetaArray() {
                return array(
                        array( 'rgb-na-png.png', array() ),
                        array( 'xmp.png',
index ab33d1c..0241aec 100644 (file)
@@ -6,11 +6,6 @@
  */
 class SVGMetadataExtractorTest extends MediaWikiTestCase {
 
-       protected function setUp() {
-               parent::setUp();
-               AutoLoader::loadClass( 'SVGMetadataExtractorTest' );
-       }
-
        /**
         * @dataProvider provideSvgFiles
         */
index 1361a92..8f7a0d6 100644 (file)
@@ -28,7 +28,7 @@ class SvgTest extends MediaWikiMediaTestCase {
                $this->assertEquals( $res, $expected );
        }
 
-       public function providerGetIndependentMetaArray() {
+       public static function providerGetIndependentMetaArray() {
                return array(
                        array( 'Tux.svg', array(
                                'ObjectName' => 'Tux',
index 97b76fe..f4b469b 100644 (file)
@@ -110,7 +110,7 @@ class CleanUpTest extends MediaWikiTestCase {
        }
 
        /** @todo document */
-       public function provideAllBytes() {
+       public static function provideAllBytes() {
                return array(
                        array( '', '' ),
                        array( 'x', '' ),
index 160ddad..987b6e6 100644 (file)
@@ -23,9 +23,6 @@ class BagOStuffTest extends MediaWikiTestCase {
                $this->cache->delete( wfMemcKey( 'test' ) );
        }
 
-       protected function tearDown() {
-       }
-
        public function testMerge() {
                $key = wfMemcKey( 'test' );
 
index a450972..df891f5 100644 (file)
@@ -83,14 +83,28 @@ class MediaWikiParserTest {
                        . implode( ' ', $filesToTest ) );
 
                $suite = new PHPUnit_Framework_TestSuite;
+               $testList = array();
+               $counter = 0;
                foreach ( $filesToTest as $fileName ) {
-                       $testsName = basename( $fileName, '.txt' );
+                       // Call the highest level directory the extension name.
+                       // It may or may not actually be, but it should be close
+                       // enough to cause there to be separate names for different
+                       // things, which is good enough for our purposes.
+                       $extensionName = basename( dirname( $fileName ) );
+                       $testsName = $extensionName . '⁄' . basename( $fileName, '.txt' );
                        $escapedFileName = strtr( $fileName, array( "'" => "\\'", '\\' => '\\\\' ) );
-                       /* This used to be ucfirst( basename( dirname( $filename ) ) )
-                        * and then was ucfirst( basename( $filename, '.txt' )
-                        * but that didn't work with names like foo.tests.txt
-                        */
-                       $parserTestClassName = str_replace( '.', '_', ucfirst( $testsName ) );
+                       $parserTestClassName = ucfirst( $testsName );
+                       // Official spec for class names: http://php.net/manual/en/language.oop5.basic.php
+                       // Prepend 'ParserTest_' to be paranoid about it not starting with a number
+                       $parserTestClassName = 'ParserTest_' . preg_replace( '/[^a-zA-Z0-9_\x7f-\xff]/', '_', $parserTestClassName );
+                       if ( isset( $testList[$parserTestClassName] ) ) {
+                               // If a conflict happens, gives a very unclear fatal.
+                               // So as a last ditch effort to prevent that eventuality, if there
+                               // is a conflict, append a number.
+                               $counter++;
+                               $parserTestClassName .= $counter;
+                       }
+                       $testList[$parserTestClassName] = true;
                        $parserTestClassDefinition = <<<EOT
 /**
  * @group Database
index 4e8c11f..0df52f5 100644 (file)
@@ -353,6 +353,9 @@ class NewParserTest extends MediaWikiTestCase {
        /**
         * Set up the global variables for a consistent environment for each test.
         * Ideally this should replace the global configuration entirely.
+        * @param array $opts
+        * @param string $config
+        * @return RequestContext
         */
        protected function setupGlobals( $opts = array(), $config = '' ) {
                global $wgFileBackends;
@@ -754,7 +757,7 @@ class NewParserTest extends MediaWikiTestCase {
                                        $this->markTestSkipped( "SKIPPED: tidy extension is not installed.\n" );
                                } else {
                                        $out = MWTidy::tidy( $out );
-                                       $out = preg_replace( '/\s+$/', '', $out);
+                                       $out = preg_replace( '/\s+$/', '', $out );
                                }
                        }
 
@@ -872,6 +875,7 @@ class NewParserTest extends MediaWikiTestCase {
        /**
         * Get an input dictionary from a set of parser test files
         * @param array $filenames
+        * @return string
         */
        function getFuzzInput( $filenames ) {
                $dict = '';
@@ -890,6 +894,7 @@ class NewParserTest extends MediaWikiTestCase {
 
        /**
         * Get a memory usage breakdown
+        * @return array
         */
        function getMemoryBreakdown() {
                $memStats = array();
@@ -926,6 +931,7 @@ class NewParserTest extends MediaWikiTestCase {
        /**
         * Get a Parser object
         * @param Preprocessor $preprocessor
+        * @return Parser
         */
        function getParser( $preprocessor = null ) {
                global $wgParserConf;
@@ -986,6 +992,7 @@ class NewParserTest extends MediaWikiTestCase {
        /**
         * Remove last character if it is a newline
         * @param string $s
+        * @return string
         */
        public function removeEndingNewline( $s ) {
                if ( substr( $s, -1 ) === "\n" ) {
@@ -1070,6 +1077,7 @@ class NewParserTest extends MediaWikiTestCase {
         * @param string $key Name of option val to retrieve
         * @param array $opts Options array to look in
         * @param mixed $default Default value returned if not found
+        * @return mixed
         */
        protected static function getOptionValue( $key, $opts, $default ) {
                $key = strtolower( $key );
index cbf4803..1790086 100644 (file)
@@ -147,6 +147,41 @@ class ParserMethodsTest extends MediaWikiLangTestCase {
                        ),
                ), $out->getSections(), 'getSections() with proper value when <h2> is used' );
        }
+
+       /**
+        * @dataProvider provideNormalizeLinkUrl
+        * @covers Parser::normalizeLinkUrl
+        * @covers Parser::normalizeUrlComponent
+        */
+       public function testNormalizeLinkUrl( $explanation, $url, $expected ) {
+               $this->assertEquals( $expected, Parser::normalizeLinkUrl( $url ), $explanation );
+       }
+
+       public static function provideNormalizeLinkUrl() {
+               return array(
+                       array(
+                               'Escaping of unsafe characters',
+                               'http://example.org/foo bar?param[]="value"&param[]=valüe',
+                               'http://example.org/foo%20bar?param%5B%5D=%22value%22&param%5B%5D=val%C3%BCe',
+                       ),
+                       array(
+                               'Case normalization of percent-encoded characters',
+                               'http://example.org/%ab%cD%Ef%FF',
+                               'http://example.org/%AB%CD%EF%FF',
+                       ),
+                       array(
+                               'Unescaping of safe characters',
+                               'http://example.org/%3C%66%6f%6F%3E?%3C%66%6f%6F%3E#%3C%66%6f%6F%3E',
+                               'http://example.org/%3Cfoo%3E?%3Cfoo%3E#%3Cfoo%3E',
+                       ),
+                       array(
+                               'Context-sensitive replacement of sometimes-safe characters',
+                               'http://example.org/%23%2F%3F%26%3D%2B%3B?%23%2F%3F%26%3D%2B%3B#%23%2F%3F%26%3D%2B%3B',
+                               'http://example.org/%23%2F%3F&=+;?%23/?%26%3D%2B%3B#%23/?&=+;',
+                       ),
+               );
+       }
+
        // @todo Add tests for cleanSig() / cleanSigInSig(), getSection(),
        // replaceSection(), getPreloadText()
 }
index 7b2a1da..f656a74 100644 (file)
@@ -25,7 +25,7 @@ class TidyTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $text, $msg );
        }
 
-       public function provideTestWrapping() {
+       public static function provideTestWrapping() {
                $testMathML = <<<'MathML'
 <math xmlns="http://www.w3.org/1998/Math/MathML">
     <mrow>
@@ -58,7 +58,7 @@ MathML;
                        array( '<mw:toc>foo</mw:toc>', '<mw:toc>foo</mw:toc>', '<mw:toc> should survive tidy' ),
                        array( "<link foo=\"bar\" />\nfoo", '<link foo="bar"/>foo', '<link> should survive tidy' ),
                        array( "<meta foo=\"bar\" />\nfoo", '<meta foo="bar"/>foo', '<meta> should survive tidy' ),
-                       array( $testMathML , $testMathML, '<math> should survive tidy' ),
+                       array( $testMathML, $testMathML, '<math> should survive tidy' ),
                );
        }
 }
index 4d5c78a..8ac419f 100644 (file)
@@ -11,7 +11,7 @@ class BcryptPasswordTestCase extends PasswordTestCase {
                ) );
        }
 
-       public function providePasswordTests() {
+       public static function providePasswordTests() {
                /** @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong */
                return array(
                        // Tests from glibc bcrypt implementation
index 03a742b..86e8270 100644 (file)
@@ -26,7 +26,7 @@ class LayeredParameterizedPasswordTest extends PasswordTestCase {
                );
        }
 
-       public function providePasswordTests() {
+       public static function providePasswordTests() {
                /** @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong */
                return array(
                        array( true, ':testLargeLayeredTop:sha512:1024:512!sha512:1024:512!sha512:1024:512!sha512:1024:512!5!vnRy+2SrSA0fHt3dwhTP5g==!AVnwfZsAQjn+gULv7FSGjA==!xvHUX3WcpkeSn1lvjWcvBg==!It+OC/N9tu+d3ByHhuB0BQ==!Tb.gqUOiD.aWktVwHM.Q/O!7CcyMfXUPky5ptyATJsR2nq3vUqtnBC', 'testPassword123' ),
index 7820d53..78fc3ed 100644 (file)
@@ -51,8 +51,11 @@ abstract class PasswordTestCase extends MediaWikiTestCase {
         * parameter (a password) should match.
         *
         * @return array
+        * @abstract
         */
-       abstract public function providePasswordTests();
+       public static function providePasswordTests() {
+               throw new MWException( "Not implemented" );
+       }
 
        /**
         * @dataProvider providePasswordTests
index ae47120..091853e 100644 (file)
@@ -13,7 +13,7 @@ class Pbkdf2PasswordTest extends PasswordTestCase {
                ) );
        }
 
-       public function providePasswordTests() {
+       public static function providePasswordTests() {
                return array(
                        array( true, ":pbkdf2:sha1:1:20:c2FsdA==:DGDID5YfDnHzqbUkr2ASBi/gN6Y=", 'password' ),
                        array( true, ":pbkdf2:sha1:2:20:c2FsdA==:6mwBTcctb4zNHtkqzh1B8NjeiVc=", 'password' ),
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php
new file mode 100644 (file)
index 0000000..95da847
--- /dev/null
@@ -0,0 +1,155 @@
+<?php
+
+/**
+ * @group ResourceLoader
+ */
+class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
+
+       protected function setUp() {
+               parent::setUp();
+
+               // The return value of the closure shouldn't matter since this test should
+               // never call it
+               SkinFactory::getDefaultInstance()->register(
+                       'fakeskin',
+                       'FakeSkin',
+                       function () {
+                       }
+               );
+       }
+
+       public static function getModules() {
+               $base = array(
+                       'localBasePath' => realpath( dirname( __FILE__ ) ),
+               );
+
+               return array(
+                       'noTemplateModule' => array(),
+
+                       'htmlTemplateModule' => $base + array(
+                               'templates' => array(
+                                       'templates/template.html',
+                                       'templates/template2.html',
+                               )
+                       ),
+
+                       'aliasedHtmlTemplateModule' => $base + array(
+                               'templates' => array(
+                                       'foo.html' => 'templates/template.html',
+                                       'bar.html' => 'templates/template2.html',
+                               )
+                       ),
+
+                       'templateModuleHandlebars' => $base + array(
+                               'templates' => array(
+                                       'templates/template_awesome.handlebars',
+                               ),
+                       ),
+               );
+       }
+
+       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",
+                               ),
+                       ),
+               );
+       }
+
+       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 ),
+               );
+       }
+
+       /**
+        * @covers ResourceLoaderFileModule::getAllSkinStyleFiles
+        */
+       public function testGetAllSkinStyleFiles() {
+               $baseParams = array(
+                       'scripts' => array(
+                               'foo.js',
+                               'bar.js',
+                       ),
+                       'styles' => array(
+                               'foo.css',
+                               'bar.css' => array( 'media' => 'print' ),
+                               'screen.less' => array( 'media' => 'screen' ),
+                               'screen-query.css' => array( 'media' => 'screen and (min-width: 400px)' ),
+                       ),
+                       'skinStyles' => array(
+                               'default' => 'quux-fallback.less',
+                               'fakeskin' => array(
+                                       'baz-vector.css',
+                                       'quux-vector.less',
+                               ),
+                       ),
+                       'messages' => array(
+                               'hello',
+                               'world',
+                       ),
+               );
+
+               $module = new ResourceLoaderFileModule( $baseParams );
+
+               $this->assertEquals(
+                       array(
+                               'foo.css',
+                               'baz-vector.css',
+                               'quux-vector.less',
+                               'quux-fallback.less',
+                               'bar.css',
+                               'screen.less',
+                               'screen-query.css',
+                       ),
+                       array_map( 'basename', $module->getAllStyleFiles() )
+               );
+       }
+
+       /**
+        * @dataProvider providerGetTemplates
+        * @covers ResourceLoaderFileModule::getTemplates
+        */
+       public function testGetTemplates( $module, $expected ) {
+               $rl = new ResourceLoaderFileModule( $module );
+
+               $this->assertEquals( $rl->getTemplates(), $expected );
+       }
+
+       /**
+        * @dataProvider providerGetModifiedTime
+        * @covers ResourceLoaderFileModule::getModifiedTime
+        */
+       public function testGetModifiedTime( $module, $expected ) {
+               $rl = new ResourceLoaderFileModule( $module );
+               $ts = $rl->getModifiedTime( new ResourceLoaderContext(
+                       new ResourceLoader, new FauxRequest() ) );
+               $this->assertEquals( $ts, $expected );
+       }
+}
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderLESSTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderLESSTest.php
deleted file mode 100644 (file)
index a3d73e5..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-class ResourceLoaderLESSTest extends MediaWikiTestCase {
-       public static function lessProvider() {
-               $result = array();
-               foreach ( glob( __DIR__ . '/fixtures/*.less' ) as $file ) {
-                       $result[] = array( $file );
-               }
-
-               return $result;
-       }
-
-       /**
-        * @dataProvider lessProvider
-        */
-       public function testLessFile( $lessFile ) {
-               $cssFile = substr( $lessFile, 0, -4 ) . 'css';
-               if ( !file_exists( $cssFile ) ) {
-                       $this->fail( "No css file found to assert equal to $lessFile" );
-                       return;
-               }
-
-               $expect = file_get_contents( $cssFile );
-               $content = file_get_contents( $lessFile );
-               $result = ResourceLoader::getLessCompiler( RequestContext::getMain()->getConfig() )
-                       ->compile( $content, $lessFile );
-               $this->assertEquals( $expect, $result );
-       }
-}
index 6ca4793..b25e9b0 100644 (file)
@@ -2,65 +2,6 @@
 
 class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
 
-       protected function setUp() {
-               parent::setUp();
-
-               // The return value of the closure shouldn't matter since this test should
-               // never call it
-               SkinFactory::getDefaultInstance()->register(
-                       'fakeskin',
-                       'FakeSkin',
-                       function(){
-                       }
-               );
-       }
-
-       /**
-        * @covers ResourceLoaderFileModule::getAllSkinStyleFiles
-        */
-       public function testGetAllSkinStyleFiles() {
-               $context = self::getResourceLoaderContext();
-
-               $baseParams = array(
-                       'scripts' => array(
-                               'foo.js',
-                               'bar.js',
-                       ),
-                       'styles' => array(
-                               'foo.css',
-                               'bar.css' => array( 'media' => 'print' ),
-                               'screen.less' => array( 'media' => 'screen' ),
-                               'screen-query.css' => array( 'media' => 'screen and (min-width: 400px)' ),
-                       ),
-                       'skinStyles' => array(
-                               'default' => 'quux-fallback.less',
-                               'fakeskin' => array(
-                                       'baz-vector.css',
-                                       'quux-vector.less',
-                               ),
-                       ),
-                       'messages' => array(
-                               'hello',
-                               'world',
-                       ),
-               );
-
-               $module = new ResourceLoaderFileModule( $baseParams );
-
-               $this->assertEquals(
-                       array(
-                               'foo.css',
-                               'baz-vector.css',
-                               'quux-vector.less',
-                               'quux-fallback.less',
-                               'bar.css',
-                               'screen.less',
-                               'screen-query.css',
-                       ),
-                       array_map( 'basename', $module->getAllStyleFiles() )
-               );
-       }
-
        /**
         * @covers ResourceLoaderModule::getDefinitionSummary
         * @covers ResourceLoaderFileModule::getDefinitionSummary
index 0c250bd..a189387 100644 (file)
@@ -9,10 +9,7 @@ class ResourceLoaderStartupModuleTest extends ResourceLoaderTestCase {
                                'modules' => array(),
                                'out' => '
 mw.loader.addSource( {
-    "local": {
-        "loadScript": "/w/load.php",
-        "apiScript": "/w/api.php"
-    }
+    "local": "/w/load.php"
 } );mw.loader.register( [] );'
                        ) ),
                        array( array(
@@ -22,10 +19,7 @@ mw.loader.addSource( {
                                ),
                                'out' => '
 mw.loader.addSource( {
-    "local": {
-        "loadScript": "/w/load.php",
-        "apiScript": "/w/api.php"
-    }
+    "local": "/w/load.php"
 } );mw.loader.register( [
     [
         "test.blank",
@@ -42,10 +36,7 @@ mw.loader.addSource( {
                                ),
                                'out' => '
 mw.loader.addSource( {
-    "local": {
-        "loadScript": "/w/load.php",
-        "apiScript": "/w/api.php"
-    }
+    "local": "/w/load.php"
 } );mw.loader.register( [
     [
         "test.blank",
@@ -73,10 +64,7 @@ mw.loader.addSource( {
                                ),
                                'out' => '
 mw.loader.addSource( {
-    "local": {
-        "loadScript": "/w/load.php",
-        "apiScript": "/w/api.php"
-    }
+    "local": "/w/load.php"
 } );mw.loader.register( [
     [
         "test.blank",
@@ -97,14 +85,8 @@ mw.loader.addSource( {
                                ),
                                'out' => '
 mw.loader.addSource( {
-    "local": {
-        "loadScript": "/w/load.php",
-        "apiScript": "/w/api.php"
-    },
-    "example": {
-        "loadScript": "http://example.org/w/load.php",
-        "apiScript": "http://example.org/w/api.php"
-    }
+    "local": "/w/load.php",
+    "example": "http://example.org/w/load.php"
 } );mw.loader.register( [
     [
         "test.blank",
@@ -140,10 +122,7 @@ mw.loader.addSource( {
                                ),
                                'out' => '
 mw.loader.addSource( {
-    "local": {
-        "loadScript": "/w/load.php",
-        "apiScript": "/w/api.php"
-    }
+    "local": "/w/load.php"
 } );mw.loader.register( [
     [
         "test.x.core",
@@ -238,14 +217,8 @@ mw.loader.addSource( {
                                ),
                                'out' => '
 mw.loader.addSource( {
-    "local": {
-        "loadScript": "/w/load.php",
-        "apiScript": "/w/api.php"
-    },
-    "example": {
-        "loadScript": "http://example.org/w/load.php",
-        "apiScript": "http://example.org/w/api.php"
-    }
+    "local": "/w/load.php",
+    "example": "http://example.org/w/load.php"
 } );mw.loader.register( [
     [
         "test.blank",
@@ -369,7 +342,7 @@ mw.loader.addSource( {
                $rl->register( $modules );
                $module = new ResourceLoaderStartUpModule();
                $this->assertEquals(
-'mw.loader.addSource({"local":{"loadScript":"/w/load.php","apiScript":"/w/api.php"}});'
+'mw.loader.addSource({"local":"/w/load.php"});'
 . 'mw.loader.register(['
 . '["test.blank","1388534400"],'
 . '["test.min","1388534400",["test.blank"],null,"local",'
@@ -390,10 +363,7 @@ mw.loader.addSource( {
                $module = new ResourceLoaderStartUpModule();
                $this->assertEquals(
 'mw.loader.addSource( {
-    "local": {
-        "loadScript": "/w/load.php",
-        "apiScript": "/w/api.php"
-    }
+    "local": "/w/load.php"
 } );mw.loader.register( [
     [
         "test.blank",
index bd6b3f2..5cdfa77 100644 (file)
@@ -2,8 +2,6 @@
 
 class ResourceLoaderTest extends ResourceLoaderTestCase {
 
-       protected static $resourceLoaderRegisterModulesHook;
-
        protected function setUp() {
                parent::setUp();
 
@@ -30,17 +28,6 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                ) );
        }
 
-       /* Hook Methods */
-
-       /**
-        * ResourceLoaderRegisterModules hook
-        */
-       public static function resourceLoaderRegisterModules( &$resourceLoader ) {
-               self::$resourceLoaderRegisterModulesHook = true;
-
-               return true;
-       }
-
        /* Provider Methods */
        public static function provideValidModules() {
                return array(
@@ -56,9 +43,21 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
         * @covers ResourceLoader::__construct
         */
        public function testCreatingNewResourceLoaderCallsRegistrationHook() {
-               self::$resourceLoaderRegisterModulesHook = false;
+               $resourceLoaderRegisterModulesHook = false;
+
+               $this->setMwGlobals( 'wgHooks', array(
+                       'ResourceLoaderRegisterModules' => array(
+                               function ( &$resourceLoader ) use ( &$resourceLoaderRegisterModulesHook ) {
+                                       $resourceLoaderRegisterModulesHook = true;
+                               }
+                       )
+               ) );
+
                $resourceLoader = new ResourceLoader();
-               $this->assertTrue( self::$resourceLoaderRegisterModulesHook );
+               $this->assertTrue(
+                       $resourceLoaderRegisterModulesHook,
+                       'Hook ResourceLoaderRegisterModules called'
+               );
 
                return $resourceLoader;
        }
@@ -90,6 +89,47 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                $this->assertStringEqualsFile( $basePath . '/styles.css', $styles['all'] );
        }
 
+       /**
+        * Strip @noflip annotations from CSS code.
+        * @param string $css
+        * @return string
+        */
+       private 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 = self::getResourceLoaderContext( 'en' );
+               $contextRtl = self::getResourceLoaderContext( 'he' );
+
+               // 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
@@ -131,6 +171,43 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                );
        }
 
+       public static function provideAddSource() {
+               return array(
+                       array( 'examplewiki', '//example.org/w/load.php', 'examplewiki' ),
+                       array( 'example2wiki', array( 'loadScript' => '//example.com/w/load.php' ), 'example2wiki' ),
+                       array(
+                               array( 'foowiki' => '//foo.org/w/load.php', 'bazwiki' => '//baz.org/w/load.php' ),
+                               null,
+                               array( 'foowiki', 'bazwiki' )
+                       ),
+                       array(
+                               array( 'foowiki' => '//foo.org/w/load.php' ),
+                               null,
+                               false,
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideAddSource
+        * @covers ResourceLoader::addSource
+        */
+       public function testAddSource( $name, $info, $expected ) {
+               $rl = new ResourceLoader;
+               if ( $expected === false ) {
+                       $this->setExpectedException( 'MWException', 'ResourceLoader duplicate source addition error' );
+                       $rl->addSource( $name, $info );
+               }
+               $rl->addSource( $name, $info );
+               if ( is_array( $expected ) ) {
+                       foreach ( $expected as $source ) {
+                               $this->assertArrayHasKey( $source, $rl->getSources() );
+                       }
+               } else {
+                       $this->assertArrayHasKey( $expected, $rl->getSources() );
+               }
+       }
+
        public static function fakeSources() {
                return array(
                        'examplewiki' => array(
@@ -164,7 +241,3 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                }
        }
 }
-
-/* Hooks */
-global $wgHooks;
-$wgHooks['ResourceLoaderRegisterModules'][] = 'ResourceLoaderTest::resourceLoaderRegisterModules';
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php
new file mode 100644 (file)
index 0000000..9dc1805
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
+
+       /**
+        * @covers ResourceLoaderWikiModule::isKnownEmpty
+        * @dataProvider provideIsKnownEmpty
+        */
+       public function testIsKnownEmpty( $titleInfo, $group, $expected ) {
+               $module = $this->getMockBuilder( 'ResourceLoaderWikiModuleTestModule' )
+                       ->setMethods( array( 'getTitleInfo', 'getGroup' ) )
+                       ->getMock();
+               $module->expects( $this->any() )
+                       ->method( 'getTitleInfo' )
+                       ->will( $this->returnValue( $titleInfo ) );
+               $module->expects( $this->any() )
+                       ->method( 'getGroup' )
+                       ->will( $this->returnValue( $group ) );
+               $context = $this->getMockBuilder( 'ResourceLoaderContext' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $this->assertEquals( $expected, $module->isKnownEmpty( $context ) );
+       }
+
+       public static function provideIsKnownEmpty() {
+               return array(
+                       // No valid pages
+                       array( array(), 'test1', true ),
+                       // 'site' module with a non-empty page
+                       array(
+                               array(
+                                       'MediaWiki:Common.js' => array(
+                                               'timestamp' => 123456789,
+                                               'length' => 1234
+                                       )
+                               ), 'site', false,
+                       ),
+                       // 'site' module with an empty page
+                       array(
+                               array(
+                                       'MediaWiki:Monobook.js' => array(
+                                               'timestamp' => 987654321,
+                                               'length' => 0,
+                                       ),
+                               ), 'site', false,
+                       ),
+                       // 'user' module with a non-empty page
+                       array(
+                               array(
+                                       'User:FooBar/common.js' => array(
+                                               'timestamp' => 246813579,
+                                               'length' => 25,
+                                       ),
+                               ), 'user', false,
+                       ),
+                       // 'user' module with an empty page
+                       array(
+                               array(
+                                       'User:FooBar/monobook.js' => array(
+                                               'timestamp' => 1357924680,
+                                               'length' => 0,
+                                       ),
+                               ), 'user', true,
+                       ),
+               );
+       }
+}
diff --git a/tests/phpunit/includes/resourceloader/fixtures/001-embeddable.css b/tests/phpunit/includes/resourceloader/fixtures/001-embeddable.css
deleted file mode 100644 (file)
index b291c5e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-.box {
-  content: not-embeddable;
-}
-.box {
-  content: embeddable;
-}
-.box {
-  content: embeddable;
-}
diff --git a/tests/phpunit/includes/resourceloader/fixtures/001-embeddable.less b/tests/phpunit/includes/resourceloader/fixtures/001-embeddable.less
deleted file mode 100644 (file)
index 7018aa2..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-@base: '../fixtures/';
-
-.helper(@url) when (embeddable(@url)) {
-       content: embeddable;
-}
-.helper(@url) when not (embeddable(@url)) {
-       content: not-embeddable;
-}
-
-.box {
-       .helper('path/to/nonexistent/file');
-}
-
-.box {
-       .helper('001-embeddable.css');
-}
-
-.box {
-       .helper("@{base}001-embeddable.css");
-}
diff --git a/tests/phpunit/includes/resourceloader/templates/template.html b/tests/phpunit/includes/resourceloader/templates/template.html
new file mode 100644 (file)
index 0000000..1f6a7d2
--- /dev/null
@@ -0,0 +1 @@
+<strong>hello</strong>
diff --git a/tests/phpunit/includes/resourceloader/templates/template2.html b/tests/phpunit/includes/resourceloader/templates/template2.html
new file mode 100644 (file)
index 0000000..a322f67
--- /dev/null
@@ -0,0 +1 @@
+<div>goodbye</div>
diff --git a/tests/phpunit/includes/resourceloader/templates/template_awesome.handlebars b/tests/phpunit/includes/resourceloader/templates/template_awesome.handlebars
new file mode 100644 (file)
index 0000000..5f5c07d
--- /dev/null
@@ -0,0 +1 @@
+wow
index 3da1361..d0cbfa0 100644 (file)
@@ -14,8 +14,6 @@ class SearchEngineTest extends MediaWikiLangTestCase {
         */
        protected $search;
 
-       protected $pageList;
-
        /**
         * Checks for database type & version.
         * Will skip current test if DB does not support search.
@@ -37,10 +35,6 @@ class SearchEngineTest extends MediaWikiLangTestCase {
                        'wgSearchType' => $searchType
                ) );
 
-               if ( !isset( self::$pageList ) ) {
-                       $this->addPages();
-               }
-
                $this->search = new $searchType( $this->db );
        }
 
@@ -50,33 +44,32 @@ class SearchEngineTest extends MediaWikiLangTestCase {
                parent::tearDown();
        }
 
-       protected function addPages() {
+       public function addDBData() {
                if ( !$this->isWikitextNS( NS_MAIN ) ) {
                        // @todo cover the case of non-wikitext content in the main namespace
                        return;
                }
 
-               $this->insertPage( "Not_Main_Page", "This is not a main page", 0 );
+               $this->insertPage( 'Not_Main_Page', 'This is not a main page' );
                $this->insertPage(
                        'Talk:Not_Main_Page',
-                       'This is not a talk page to the main page, see [[smithee]]',
-                       1
+                       'This is not a talk page to the main page, see [[smithee]]'
                );
-               $this->insertPage( 'Smithee', 'A smithee is one who smiths. See also [[Alan Smithee]]', 0 );
-               $this->insertPage( 'Talk:Smithee', 'This article sucks.', 1 );
-               $this->insertPage( 'Unrelated_page', 'Nothing in this page is about the S word.', 0 );
-               $this->insertPage( 'Another_page', 'This page also is unrelated.', 0 );
-               $this->insertPage( 'Help:Help', 'Help me!', 4 );
-               $this->insertPage( 'Thppt', 'Blah blah', 0 );
-               $this->insertPage( 'Alan_Smithee', 'yum', 0 );
-               $this->insertPage( 'Pages', 'are\'food', 0 );
-               $this->insertPage( 'HalfOneUp', 'AZ', 0 );
-               $this->insertPage( 'FullOneUp', 'AZ', 0 );
-               $this->insertPage( 'HalfTwoLow', 'az', 0 );
-               $this->insertPage( 'FullTwoLow', 'az', 0 );
-               $this->insertPage( 'HalfNumbers', '1234567890', 0 );
-               $this->insertPage( 'FullNumbers', '1234567890', 0 );
-               $this->insertPage( 'DomainName', 'example.com', 0 );
+               $this->insertPage( 'Smithee', 'A smithee is one who smiths. See also [[Alan Smithee]]' );
+               $this->insertPage( 'Talk:Smithee', 'This article sucks.' );
+               $this->insertPage( 'Unrelated_page', 'Nothing in this page is about the S word.' );
+               $this->insertPage( 'Another_page', 'This page also is unrelated.' );
+               $this->insertPage( 'Help:Help', 'Help me!' );
+               $this->insertPage( 'Thppt', 'Blah blah' );
+               $this->insertPage( 'Alan_Smithee', 'yum' );
+               $this->insertPage( 'Pages', 'are\'food' );
+               $this->insertPage( 'HalfOneUp', 'AZ' );
+               $this->insertPage( 'FullOneUp', 'AZ' );
+               $this->insertPage( 'HalfTwoLow', 'az' );
+               $this->insertPage( 'FullTwoLow', 'az' );
+               $this->insertPage( 'HalfNumbers', '1234567890' );
+               $this->insertPage( 'FullNumbers', '1234567890' );
+               $this->insertPage( 'DomainName', 'example.com' );
        }
 
        protected function fetchIds( $results ) {
@@ -101,30 +94,6 @@ class SearchEngineTest extends MediaWikiLangTestCase {
                return $matches;
        }
 
-       /**
-        * Insert a new page
-        *
-        * @param string $pageName Page name
-        * @param string $text Page's content
-        * @param int $ns Unused
-        */
-       protected function insertPage( $pageName, $text, $ns ) {
-               $title = Title::newFromText( $pageName, $ns );
-
-               $user = User::newFromName( 'WikiSysop' );
-               $comment = 'Search Test';
-
-               // avoid memory leak...?
-               LinkCache::singleton()->clear();
-
-               $page = WikiPage::factory( $title );
-               $page->doEditContent( ContentHandler::makeContent( $text, $title ), $comment, 0, false, $user );
-
-               $this->pageList[] = array( $title, $page->getId() );
-
-               return true;
-       }
-
        public function testFullWidth() {
                $this->assertEquals(
                        array( 'FullOneUp', 'FullTwoLow', 'HalfOneUp', 'HalfTwoLow' ),
index 36c56a9..d3663c8 100644 (file)
@@ -56,7 +56,9 @@ class SkinFactoryTest extends MediaWikiTestCase {
        public function testGetSkinNames() {
                $factory = new SkinFactory();
                // A fake callback we can use that will never be called
-               $callback = function() {};
+               $callback = function () {
+                       // NOP
+               };
                $factory->register( 'skin1', 'Skin1', $callback );
                $factory->register( 'skin2', 'Skin2', $callback );
                $names = $factory->getSkinNames();
diff --git a/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php b/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php
new file mode 100644 (file)
index 0000000..fd6911f
--- /dev/null
@@ -0,0 +1,283 @@
+<?php
+/**
+ * Factory for handling the special page list and generating SpecialPage objects.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @covers SpecialPageFactory
+ * @group SpecialPage
+ */
+class SpecialPageFactoryTest extends MediaWikiTestCase {
+
+       protected function tearDown() {
+               parent::tearDown();
+
+               SpecialPageFactory::resetList();
+       }
+
+       public function testResetList() {
+               SpecialPageFactory::resetList();
+               $this->assertContains( 'Specialpages', SpecialPageFactory::getNames() );
+       }
+
+       public function testHookNotCalledTwice() {
+               $count = 0;
+               $this->mergeMwGlobalArrayValue( 'wgHooks', array(
+                       'SpecialPage_initList' => array(
+                               function () use ( &$count ) {
+                                       $count++;
+                               }
+               ) ) );
+               SpecialPageFactory::resetList();
+               SpecialPageFactory::getNames();
+               SpecialPageFactory::getNames();
+               $this->assertEquals( 1, $count );
+       }
+
+       public function newSpecialAllPages() {
+               return new SpecialAllPages();
+       }
+
+       public function specialPageProvider() {
+               $specialPageTestHelper = new SpecialPageTestHelper();
+
+               return array(
+                       'class name' => array( 'SpecialAllPages', false ),
+                       'closure' => array( function () {
+                               return new SpecialAllPages();
+                       }, false ),
+                       'function' => array( array( $this, 'newSpecialAllPages' ), false ),
+                       'callback string' => array( 'SpecialPageTestHelper::newSpecialAllPages', false ),
+                       'callback with object' => array(
+                               array( $specialPageTestHelper, 'newSpecialAllPages' ),
+                               false
+                       ),
+                       'callback array' => array(
+                               array( 'SpecialPageTestHelper', 'newSpecialAllPages' ),
+                               false
+                       )
+               );
+       }
+
+       /**
+        * @covers SpecialPageFactory::getPage
+        * @dataProvider specialPageProvider
+        */
+       public function testGetPage( $spec, $shouldReuseInstance ) {
+               $this->mergeMwGlobalArrayValue( 'wgSpecialPages', array( 'testdummy' => $spec ) );
+               SpecialPageFactory::resetList();
+
+               $page = SpecialPageFactory::getPage( 'testdummy' );
+               $this->assertInstanceOf( 'SpecialPage', $page );
+
+               $page2 = SpecialPageFactory::getPage( 'testdummy' );
+               $this->assertEquals( $shouldReuseInstance, $page2 === $page, "Should re-use instance:" );
+       }
+
+       /**
+        * @covers SpecialPageFactory::getNames
+        */
+       public function testGetNames() {
+               $this->mergeMwGlobalArrayValue( 'wgSpecialPages', array( 'testdummy' => 'SpecialAllPages' ) );
+               SpecialPageFactory::resetList();
+
+               $names = SpecialPageFactory::getNames();
+               $this->assertInternalType( 'array', $names );
+               $this->assertContains( 'testdummy', $names );
+       }
+
+       /**
+        * @covers SpecialPageFactory::resolveAlias
+        */
+       public function testResolveAlias() {
+               $this->setMwGlobals( 'wgContLang', Language::factory( 'de' ) );
+               SpecialPageFactory::resetList();
+
+               list( $name, $param ) = SpecialPageFactory::resolveAlias( 'Spezialseiten/Foo' );
+               $this->assertEquals( 'Specialpages', $name );
+               $this->assertEquals( 'Foo', $param );
+       }
+
+       /**
+        * @covers SpecialPageFactory::getLocalNameFor
+        */
+       public function testGetLocalNameFor() {
+               $this->setMwGlobals( 'wgContLang', Language::factory( 'de' ) );
+               SpecialPageFactory::resetList();
+
+               $name = SpecialPageFactory::getLocalNameFor( 'Specialpages', 'Foo' );
+               $this->assertEquals( 'Spezialseiten/Foo', $name );
+       }
+
+       /**
+        * @covers SpecialPageFactory::getTitleForAlias
+        */
+       public function testGetTitleForAlias() {
+               $this->setMwGlobals( 'wgContLang', Language::factory( 'de' ) );
+               SpecialPageFactory::resetList();
+
+               $title = SpecialPageFactory::getTitleForAlias( 'Specialpages/Foo' );
+               $this->assertEquals( 'Spezialseiten/Foo', $title->getText() );
+               $this->assertEquals( NS_SPECIAL, $title->getNamespace() );
+       }
+
+       /**
+        * @dataProvider provideTestConflictResolution
+        */
+       public function testConflictResolution(
+               $test, $aliasesList, $alias, $expectedName, $expectedAlias, $expectWarnings
+       ) {
+               global $wgContLang;
+               $lang = clone $wgContLang;
+               $lang->mExtendedSpecialPageAliases = $aliasesList;
+               $this->setMwGlobals( 'wgContLang', $lang );
+               $this->setMwGlobals( 'wgSpecialPages',
+                       array_combine( array_keys( $aliasesList ), array_keys( $aliasesList ) )
+               );
+               SpecialPageFactory::resetList();
+
+               // Catch the warnings we expect to be raised
+               $warnings = array();
+               $this->setMwGlobals( 'wgDevelopmentWarnings', true );
+               set_error_handler( function ( $errno, $errstr ) use ( &$warnings ) {
+                       if ( preg_match( '/First alias \'[^\']*\' for .*/', $errstr ) ||
+                               preg_match( '/Did not find a usable alias for special page .*/', $errstr )
+                       ) {
+                               $warnings[] = $errstr;
+                               return true;
+                       }
+                       return false;
+               } );
+               $reset = new ScopedCallback( 'restore_error_handler' );
+
+               list( $name, /*...*/ ) = SpecialPageFactory::resolveAlias( $alias );
+               $this->assertEquals( $expectedName, $name, "$test: Alias to name" );
+               $result = SpecialPageFactory::getLocalNameFor( $name );
+               $this->assertEquals( $expectedAlias, $result, "$test: Alias to name to alias" );
+
+               $gotWarnings = count( $warnings );
+               if ( $gotWarnings !== $expectWarnings ) {
+                       $this->fail( "Expected $expectWarnings warning(s), but got $gotWarnings:\n" .
+                               join( "\n", $warnings )
+                       );
+               }
+       }
+
+       /**
+        * @dataProvider provideTestConflictResolution
+        */
+       public function testConflictResolutionReversed(
+               $test, $aliasesList, $alias, $expectedName, $expectedAlias, $expectWarnings
+       ) {
+               // Make sure order doesn't matter by reversing the list
+               $aliasesList = array_reverse( $aliasesList );
+               return $this->testConflictResolution(
+                       $test, $aliasesList, $alias, $expectedName, $expectedAlias, $expectWarnings
+               );
+       }
+
+       public function provideTestConflictResolution() {
+               return array(
+                       array(
+                               'Canonical name wins',
+                               array( 'Foo' => array( 'Foo', 'Bar' ), 'Baz' => array( 'Foo', 'BazPage', 'Baz2' ) ),
+                               'Foo',
+                               'Foo',
+                               'Foo',
+                               1,
+                       ),
+
+                       array(
+                               'Doesn\'t redirect to a different special page\'s canonical name',
+                               array( 'Foo' => array( 'Foo', 'Bar' ), 'Baz' => array( 'Foo', 'BazPage', 'Baz2' ) ),
+                               'Baz',
+                               'Baz',
+                               'BazPage',
+                               1,
+                       ),
+
+                       array(
+                               'Canonical name wins even if not aliased',
+                               array( 'Foo' => array( 'FooPage' ), 'Baz' => array( 'Foo', 'BazPage', 'Baz2' ) ),
+                               'Foo',
+                               'Foo',
+                               'FooPage',
+                               1,
+                       ),
+
+                       array(
+                               'Doesn\'t redirect to a different special page\'s canonical name even if not aliased',
+                               array( 'Foo' => array( 'FooPage' ), 'Baz' => array( 'Foo', 'BazPage', 'Baz2' ) ),
+                               'Baz',
+                               'Baz',
+                               'BazPage',
+                               1,
+                       ),
+
+                       array(
+                               'First local name beats non-first',
+                               array( 'First' => array( 'Foo' ), 'NonFirst' => array( 'Bar', 'Foo' ) ),
+                               'Foo',
+                               'First',
+                               'Foo',
+                               0,
+                       ),
+
+                       array(
+                               'Doesn\'t redirect to a different special page\'s first alias',
+                               array(
+                                       'Foo' => array( 'Foo' ),
+                                       'First' => array( 'Bar' ),
+                                       'Baz' => array( 'Foo', 'Bar', 'BazPage', 'Baz2' )
+                               ),
+                               'Baz',
+                               'Baz',
+                               'BazPage',
+                               1,
+                       ),
+
+                       array(
+                               'Doesn\'t redirect wrong even if all aliases conflict',
+                               array(
+                                       'Foo' => array( 'Foo' ),
+                                       'First' => array( 'Bar' ),
+                                       'Baz' => array( 'Foo', 'Bar' )
+                               ),
+                               'Baz',
+                               'Baz',
+                               'Baz',
+                               2,
+                       ),
+
+               );
+       }
+
+       public function testGetAliasListRecursion() {
+               $called = false;
+               $this->mergeMwGlobalArrayValue( 'wgHooks', array(
+                       'SpecialPage_initList' => array(
+                               function () use ( &$called ) {
+                                       SpecialPageFactory::getLocalNameFor( 'Specialpages' );
+                                       $called = true;
+                               }
+                       ),
+               ) );
+               SpecialPageFactory::resetList();
+               SpecialPageFactory::getLocalNameFor( 'Specialpages' );
+               $this->assertTrue( $called, 'Recursive call succeeded' );
+       }
+
+}
diff --git a/tests/phpunit/includes/specialpage/SpecialPageTestHelper.php b/tests/phpunit/includes/specialpage/SpecialPageTestHelper.php
new file mode 100644 (file)
index 0000000..37e29dc
--- /dev/null
@@ -0,0 +1,24 @@
+<?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
+ */
+class SpecialPageTestHelper {
+
+       public static function newSpecialAllPages() {
+               return new SpecialAllPages();
+       }
+
+}
index 8a0ac97..22bdefd 100644 (file)
@@ -6,6 +6,7 @@
  * Copyright © 2013, Siebrand Mazeland
  * Copyright © 2013, Wikimedia Foundation Inc.
  *
+ * @group Database
  */
 
 class ImageListPagerTest extends MediaWikiTestCase {
diff --git a/tests/phpunit/includes/specials/SpecialBooksourcesTest.php b/tests/phpunit/includes/specials/SpecialBooksourcesTest.php
new file mode 100644 (file)
index 0000000..d341ccf
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+class SpecialBooksourcesTest extends MediaWikiTestCase {
+       public static function provideISBNs() {
+               return array(
+                       array( '978-0-300-14424-6', true ),
+                       array( '0-14-020652-3', true ),
+                       array( '020652-3', false ),
+                       array( '9781234567897', true ),
+                       array( '1-4133-0454-0', true ),
+                       array( '978-1413304541', true ),
+                       array( '0136091814', true ),
+                       array( '0136091812', false ),
+                       array( '9780136091813', true ),
+                       array( '9780136091817', false ),
+                       array( '123456789X', true ),
+
+                       // Bug 67021
+                       array( '1413304541', false ),
+                       array( '141330454X', false ),
+                       array( '1413304540', true ),
+                       array( '14133X4540', false ),
+                       array( '97814133X4541', false ),
+                       array( '978035642615X', false ),
+                       array( '9781413304541', true ),
+                       array( '9780356426150', true ),
+               );
+       }
+
+       /**
+        * @covers SpecialBooksources::isValidISBN
+        * @dataProvider provideISBNs
+        */
+       public function testIsValidISBN( $isbn, $isValid ) {
+               $this->assertSame( $isValid, SpecialBooksources::isValidISBN( $isbn ) );
+       }
+}
index bd95281..14d1968 100644 (file)
@@ -1,4 +1,8 @@
 <?php
+/**
+ * @group Database
+ */
+
 class SpecialMIMESearchTest extends MediaWikiTestCase {
 
        /** @var MIMESearchPage */
index fd09043..4dbfc41 100644 (file)
@@ -53,7 +53,7 @@ class SpecialMyLanguageTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $title );
        }
 
-       public function provideFindTitle() {
+       public static function provideFindTitle() {
                return array(
                        array( null, '::Fail', 'en', 'en' ),
                        array( 'Page/Another', 'Page/Another/en', 'en', 'en' ),
index b13df89..4171c10 100644 (file)
@@ -24,6 +24,7 @@
  * @covers MediaWikiPageLinkRenderer
  *
  * @group Title
+ * @group Database
  */
 class MediaWikiPageLinkRendererTest extends MediaWikiTestCase {
 
@@ -52,7 +53,7 @@ class MediaWikiPageLinkRendererTest extends MediaWikiTestCase {
                return $genderCache;
        }
 
-       public function provideGetPageUrl() {
+       public static function provideGetPageUrl() {
                return array(
                        array(
                                new TitleValue( NS_MAIN, 'Foo_Bar' ),
@@ -85,7 +86,7 @@ class MediaWikiPageLinkRendererTest extends MediaWikiTestCase {
                $this->assertEquals( $url, $actual );
        }
 
-       public function provideRenderHtmlLink() {
+       public static function provideRenderHtmlLink() {
                return array(
                        array(
                                new TitleValue( NS_MAIN, 'Foo_Bar' ),
@@ -127,7 +128,7 @@ class MediaWikiPageLinkRendererTest extends MediaWikiTestCase {
                $this->assertRegExp( $pattern, $actual );
        }
 
-       public function provideRenderWikitextLink() {
+       public static function provideRenderWikitextLink() {
                return array(
                        array(
                                new TitleValue( NS_MAIN, 'Foo_Bar' ),
index bf06e3b..f95b305 100644 (file)
@@ -85,7 +85,7 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
                return new MediaWikiTitleCodec( $lang, $gender );
        }
 
-       public function provideFormat() {
+       public static function provideFormat() {
                return array(
                        array( NS_MAIN, 'Foo_Bar', '', 'en', 'Foo Bar' ),
                        array( NS_USER, 'Hansi_Maier', 'stuff_and_so_on', 'en', 'User:Hansi Maier#stuff and so on' ),
@@ -129,7 +129,7 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
                $this->assertEquals( $normalized, $actual2, 'normalized after round trip' );
        }
 
-       public function provideGetText() {
+       public static function provideGetText() {
                return array(
                        array( NS_MAIN, 'Foo_Bar', '', 'en', 'Foo Bar' ),
                        array( NS_USER, 'Hansi_Maier', 'stuff_and_so_on', 'en', 'Hansi Maier' ),
@@ -148,7 +148,7 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $actual );
        }
 
-       public function provideGetPrefixedText() {
+       public static function provideGetPrefixedText() {
                return array(
                        array( NS_MAIN, 'Foo_Bar', '', 'en', 'Foo Bar' ),
                        array( NS_USER, 'Hansi_Maier', 'stuff_and_so_on', 'en', 'User:Hansi Maier' ),
@@ -174,7 +174,7 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $actual );
        }
 
-       public function provideGetFullText() {
+       public static function provideGetFullText() {
                return array(
                        array( NS_MAIN, 'Foo_Bar', '', 'en', 'Foo Bar' ),
                        array( NS_USER, 'Hansi_Maier', 'stuff_and_so_on', 'en', 'User:Hansi Maier#stuff and so on' ),
@@ -196,7 +196,7 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $actual );
        }
 
-       public function provideParseTitle() {
+       public static function provideParseTitle() {
                //TODO: test capitalization and trimming
                //TODO: test unicode normalization
 
@@ -281,7 +281,7 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
                $this->assertEquals( $title, $actual );
        }
 
-       public function provideParseTitle_invalid() {
+       public static function provideParseTitle_invalid() {
                //TODO: test unicode errors
 
                return array(
@@ -353,7 +353,7 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
                $codec->parseTitle( $text, NS_MAIN );
        }
 
-       public function provideGetNamespaceName() {
+       public static function provideGetNamespaceName() {
                return array(
                        array( NS_MAIN, 'Foo', 'en', '' ),
                        array( NS_USER, 'Foo', 'en', 'User' ),
index 4f17601..f23b264 100644 (file)
@@ -9,21 +9,17 @@ class UploadBaseTest extends MediaWikiTestCase {
        protected $upload;
 
        protected function setUp() {
-               global $wgHooks;
                parent::setUp();
 
                $this->upload = new UploadTestHandler;
-               $this->hooks = $wgHooks;
-               $wgHooks['InterwikiLoadPrefix'][] = function ( $prefix, &$data ) {
-                       return false;
-               };
-       }
-
-       protected function tearDown() {
-               global $wgHooks;
-               $wgHooks = $this->hooks;
 
-               parent::tearDown();
+               $this->setMwGlobals( 'wgHooks', array(
+                       'InterwikiLoadPrefix' => array(
+                               function ( $prefix, &$data ) {
+                                       return false;
+                               }
+                       ),
+               ) );
        }
 
        /**
@@ -112,22 +108,246 @@ class UploadBaseTest extends MediaWikiTestCase {
         * This method should be abstracted so we can test different settings.
         */
        public function testMaxUploadSize() {
-               global $wgMaxUploadSize;
-               $savedGlobal = $wgMaxUploadSize; // save global
-               global $wgFileExtensions;
-               $wgFileExtensions[] = 'txt';
-
-               $wgMaxUploadSize = 100;
+               $this->setMwGlobals( array(
+                       'wgMaxUploadSize' => 100,
+                       'wgFileExtensions' => array(
+                               'txt',
+                       ),
+               ) );
 
-               $filename = $this->createFileOfSize( $wgMaxUploadSize );
+               $filename = $this->createFileOfSize( 100 );
                $this->upload->initializePathInfo( basename( $filename ) . '.txt', $filename, 100 );
                $result = $this->upload->verifyUpload();
                unlink( $filename );
 
                $this->assertEquals(
-                       array( 'status' => UploadBase::OK ), $result );
+                       array( 'status' => UploadBase::OK ),
+                       $result
+               );
+       }
+
+
+       /**
+        * @dataProvider provideCheckSvgScriptCallback
+        */
+       public function testCheckSvgScriptCallback( $svg, $wellFormed, $filterMatch, $message ) {
+               list( $formed, $match ) = $this->upload->checkSvgString( $svg );
+               $this->assertSame( $wellFormed, $formed, $message );
+               $this->assertSame( $filterMatch, $match, $message );
+       }
 
-               $wgMaxUploadSize = $savedGlobal; // restore global
+       public static function provideCheckSvgScriptCallback() {
+               return array(
+                       // html5sec SVG vectors
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg"><script>alert(1)</script></svg>',
+                               true,
+                               true,
+                               'Script tag in svg (http://html5sec.org/#47)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg"><g onload="javascript:alert(1)"></g></svg>',
+                               true,
+                               true,
+                               'SVG with onload property (http://html5sec.org/#11)'
+                       ),
+                       array(
+                               '<svg onload="javascript:alert(1)" xmlns="http://www.w3.org/2000/svg"></svg>',
+                               true,
+                               true,
+                               'SVG with onload property (http://html5sec.org/#65)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg"> <a xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="javascript:alert(1)"><rect width="1000" height="1000" fill="white"/></a> </svg>',
+                               true,
+                               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">  <animation xlink:href="javascript:alert(1)"/> </svg>',
+                               true,
+                               true,
+                               'SVG with Opera animation xlink (http://html5sec.org/#88 - a)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">  <animation xlink:href="data:text/xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' onload=\'alert(1)\'%3E%3C/svg%3E"/> </svg>',
+                               true,
+                               true,
+                               'SVG with Opera animation xlink (http://html5sec.org/#88 - b)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">  <image xlink:href="data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' onload=\'alert(1)\'%3E%3C/svg%3E"/> </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">  <foreignObject xlink:href="javascript:alert(1)"/> </svg>',
+                               true,
+                               true,
+                               'SVG with Opera foreignObject xlink (http://html5sec.org/#88 - d)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">  <foreignObject xlink:href="data:text/xml,%3Cscript xmlns=\'http://www.w3.org/1999/xhtml\'%3Ealert(1)%3C/script%3E"/> </svg>',
+                               true,
+                               true,
+                               'SVG with Opera foreignObject xlink (http://html5sec.org/#88 - e)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg"> <set attributeName="onmouseover" to="alert(1)"/> </svg>',
+                               true,
+                               true,
+                               'SVG with event handler set (http://html5sec.org/#89 - a)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg"> <animate attributeName="onunload" to="alert(1)"/> </svg>',
+                               true,
+                               true,
+                               'SVG with event handler animate (http://html5sec.org/#89 - a)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg"> <handler xmlns:ev="http://www.w3.org/2001/xml-events" ev:event="load">alert(1)</handler> </svg>',
+                               true,
+                               true,
+                               'SVG with element handler (http://html5sec.org/#94)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <feImage> <set attributeName="xlink:href" to="data:image/svg+xml;charset=utf-8;base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxzY3JpcHQ%2BYWxlcnQoMSk8L3NjcmlwdD48L3N2Zz4NCg%3D%3D"/> </feImage> </svg>',
+                               true,
+                               true,
+                               'SVG with href to data: url (http://html5sec.org/#95)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg" id="foo"> <x xmlns="http://www.w3.org/2001/xml-events" event="load" observer="foo" handler="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%3Chandler%20xml%3Aid%3D%22bar%22%20type%3D%22application%2Fecmascript%22%3E alert(1) %3C%2Fhandler%3E%0A%3C%2Fsvg%3E%0A#bar"/> </svg>',
+                               true,
+                               true,
+                               'SVG with Tiny handler (http://html5sec.org/#104)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg"> <a id="x"><rect fill="white" width="1000" height="1000"/></a> <rect fill="white" style="clip-path:url(test3.svg#a);fill:url(#b);filter:url(#c);marker:url(#d);mask:url(#e);stroke:url(#f);"/> </svg>',
+                               true,
+                               true,
+                               'SVG with new CSS styles properties (http://html5sec.org/#109)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg"> <a id="x"><rect fill="white" width="1000" height="1000"/></a> <rect clip-path="url(test3.svg#a)" /> </svg>',
+                               true,
+                               true,
+                               'SVG with new CSS styles properties as attributes'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg"> <a id="x"> <rect fill="white" width="1000" height="1000"/> </a> <rect fill="url(http://html5sec.org/test3.svg#a)" /> </svg>',
+                               true,
+                               true,
+                               'SVG with new CSS styles properties as attributes (2)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg"> <path d="M0,0" style="marker-start:url(test4.svg#a)"/> </svg>',
+                               true,
+                               true,
+                               'SVG with path marker-start (http://html5sec.org/#110)'
+                       ),
+                       array(
+                               '<?xml version="1.0"?> <?xml-stylesheet type="text/xml" href="#stylesheet"?> <!DOCTYPE doc [ <!ATTLIST xsl:stylesheet id ID #REQUIRED>]> <svg xmlns="http://www.w3.org/2000/svg"> <xsl:stylesheet id="stylesheet" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <iframe xmlns="http://www.w3.org/1999/xhtml" src="javascript:alert(1)"></iframe> </xsl:template> </xsl:stylesheet> <circle fill="red" r="40"></circle> </svg>',
+                               true,
+                               true,
+                               'SVG with embedded stylesheet (http://html5sec.org/#125)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg" id="x"> <listener event="load" handler="#y" xmlns="http://www.w3.org/2001/xml-events" observer="x"/> <handler id="y">alert(1)</handler> </svg>',
+                               true,
+                               true,
+                               'SVG with handler attribute (http://html5sec.org/#127)'
+                       ),
+                       array(
+                               // Haven't found a browser that accepts this particular example, but we
+                               // don't want to allow embeded svgs, ever
+                               '<svg> <image style=\'filter:url("data:image/svg+xml;charset=utf-8;base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxzY3JpcHQ/YWxlcnQoMSk8L3NjcmlwdD48L3N2Zz4NCg==")\' /> </svg>',
+                               true,
+                               true,
+                               'SVG with image filter via style (http://html5sec.org/#129)'
+                       ),
+                       array(
+                               // This doesn't seem possible without embedding the svg, but just in case
+                               '<svg> <a xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="?"> <circle r="400"></circle> <animate attributeName="xlink:href" begin="0" from="javascript:alert(1)" to="" /> </a></svg>',
+                               true,
+                               true,
+                               'SVG with animate from (http://html5sec.org/#137)'
+                       ),
+
+                       // Other hostile SVG's
+                       array(
+                               '<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns:xlink="http://www.w3.org/1999/xlink"> <image xlink:href="https://upload.wikimedia.org/wikipedia/commons/3/34/Bahnstrecke_Zeitz-Camburg_1930.png" /> </svg>',
+                               true,
+                               true,
+                               'SVG with non-local image href (bug 65839)'
+                       ),
+                       array(
+                               '<?xml version="1.0" ?> <?xml-stylesheet type="text/xsl" href="/w/index.php?title=User:Jeeves/test.xsl&amp;action=raw&amp;format=xml" ?> <svg> <height>50</height> <width>100</width> </svg>',
+                               true,
+                               true,
+                               'SVG with remote stylesheet (bug 57550)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg" viewbox="-1 -1 15 15"> <rect y="0" height="13" width="12" stroke="#179" rx="1" fill="#2ac"/> <text x="1.5" y="11" font-family="courier" stroke="white" font-size="16"><![CDATA[B]]></text> <iframe xmlns="http://www.w3.org/1999/xhtml" srcdoc="&#x3C;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x27;&#x58;&#x53;&#x53;&#x45;&#x44;&#x20;&#x3D;&#x3E;&#x20;&#x44;&#x6F;&#x6D;&#x61;&#x69;&#x6E;&#x28;&#x27;&#x2B;&#x74;&#x6F;&#x70;&#x2E;&#x64;&#x6F;&#x63;&#x75;&#x6D;&#x65;&#x6E;&#x74;&#x2E;&#x64;&#x6F;&#x6D;&#x61;&#x69;&#x6E;&#x2B;&#x27;&#x29;&#x27;&#x29;&#x3B;&#x3C;&#x2F;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;"></iframe> </svg>',
+                               true,
+                               true,
+                               'SVG with rembeded iframe (bug 60771)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg" viewBox="6 3 177 153" xmlns:xlink="http://www.w3.org/1999/xlink"> <style>@import url("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 @import in style element (bug 69008)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg" viewBox="6 3 177 153" xmlns:xlink="http://www.w3.org/1999/xlink"> <style>@import url("https://fonts.googleapis.com/css?family=Bitter:700&amp;text=WebPlatform.org");<foo/></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 @import in style element and child element (bug 69008#c11)'
+                       ),
+                       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,
+                               true,
+                               'SVG with remote background image (bug 69008)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg"> <rect width="100" height="100" style="background-image:\55rl(https://www.google.com/images/srpr/logo11w.png)"/> </svg>',
+                               true,
+                               true,
+                               'SVG with remote background image, encoded (bug 69008)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg"> <style> #a { background-image:\55rl(\'https://www.google.com/images/srpr/logo11w.png\'); } </style> <rect width="100" height="100" id="a"/> </svg>',
+                               true,
+                               true,
+                               'SVG with remote background image, in style element (bug 69008)'
+                       ),
+                       array(
+                               // This currently doesn't seem to work in any browsers, but in case
+                               // http://www.w3.org/TR/css3-images/ is implemented for SVG files
+                               '<svg xmlns="http://www.w3.org/2000/svg"> <rect width="100" height="100" style="background-image:image(\'sprites.svg#xywh=40,0,20,20\')"/> </svg>',
+                               true,
+                               true,
+                               'SVG with remote background image using image() (bug 69008)'
+                       ),
+
+                       // Test good, but strange files that we want to allow
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g> <a xlink:href="http://en.wikipedia.org/wiki/Main_Page"> <path transform="translate(0,496)" id="path6706" d="m 112.09375,107.6875 -5.0625,3.625 -4.3125,5.03125 -0.46875,0.5 -4.09375,3.34375 -9.125,5.28125 -8.625,-3.375 z" style="fill:#cccccc;fill-opacity:1;stroke:#6e6e6e;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;display:inline" /> </a> </g> </svg>',
+                               true,
+                               false,
+                               'SVG with <a> link to a remote site'
+                       ),
+                       array(
+                               '<svg> <defs> <filter id="filter6226" x="-0.93243687" width="2.8648737" y="-0.24250539" height="1.4850108"> <feGaussianBlur stdDeviation="3.2344681" id="feGaussianBlur6228" /> </filter> <clipPath id="clipPath2436"> <path d="M 0,0 L 0,0 L 0,0 L 0,0 z" id="path2438" /> </clipPath> </defs> <g clip-path="url(#clipPath2436)" id="g2460"> <text id="text2466"> <tspan>12345</tspan> </text> </g> <path style="fill:#346733;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;filter:url(\'#filter6226\');fill-opacity:1;opacity:0.79807692" d="M 236.82371,332.63732 C 236.92217,332.63732 z" id="path5618" /> </svg>',
+                               true,
+                               false,
+                               'SVG with local urls, including filter: in style'
+                       ),
+
+               );
        }
 }
 
@@ -143,4 +363,19 @@ class UploadTestHandler extends UploadBase {
 
                return $this->mTitleError;
        }
+
+       /**
+        * Almost the same as UploadBase::detectScriptInSvg, except it's
+        * public, works on an xml string instead of filename, and returns
+        * the result instead of interpreting them.
+        */
+       public function checkSvgString( $svg ) {
+               $check = new XmlTypeCheck(
+                       $svg,
+                       array( $this, 'checkSvgScriptCallback' ),
+                       false,
+                       array( 'processing_instruction_handler' => 'UploadBase::checkSvgPICallback' )
+               );
+               return array( $check->wellFormed, $check->filterMatch );
+       }
 }
index 7125247..ec56b63 100644 (file)
@@ -110,7 +110,7 @@ class UploadFromUrlTest extends ApiTestCase {
                $this->user->addGroup( 'sysop' );
                $data = $this->doApiRequest( array(
                        'action' => 'upload',
-                       'url' => 'http://bits.wikimedia.org/skins-1.5/common/images/poweredby_mediawiki_88x31.png',
+                       'url' => 'http://upload.wikimedia.org/wikipedia/mediawiki/b/bc/Wiki.png',
                        'asyncdownload' => 1,
                        'filename' => 'UploadFromUrlTest.png',
                        'token' => $token,
@@ -182,7 +182,7 @@ class UploadFromUrlTest extends ApiTestCase {
                $data = $this->doApiRequest( array(
                        'action' => 'upload',
                        'filename' => 'UploadFromUrlTest.png',
-                       'url' => 'http://bits.wikimedia.org/skins-1.5/common/images/poweredby_mediawiki_88x31.png',
+                       'url' => 'http://upload.wikimedia.org/wikipedia/mediawiki/b/bc/Wiki.png',
                        'ignorewarnings' => true,
                        'token' => $token,
                ), $data );
@@ -213,7 +213,7 @@ class UploadFromUrlTest extends ApiTestCase {
                $this->doApiRequest( array(
                        'action' => 'upload',
                        'filename' => 'UploadFromUrlTest.png',
-                       'url' => 'http://bits.wikimedia.org/skins-1.5/common/images/poweredby_mediawiki_88x31.png',
+                       'url' => 'http://upload.wikimedia.org/wikipedia/mediawiki/b/bc/Wiki.png',
                        'asyncdownload' => 1,
                        'token' => $token,
                        'leavemessage' => 1,
@@ -234,7 +234,7 @@ class UploadFromUrlTest extends ApiTestCase {
                        $this->doApiRequest( array(
                                'action' => 'upload',
                                'filename' => 'UploadFromUrlTest.png',
-                               'url' => 'http://bits.wikimedia.org/skins-1.5/common/images/poweredby_mediawiki_88x31.png',
+                               'url' => 'http://upload.wikimedia.org/wikipedia/mediawiki/b/bc/Wiki.png',
                                'asyncdownload' => 1,
                                'token' => $token,
                                'leavemessage' => 1,
@@ -270,13 +270,16 @@ class UploadFromUrlTest extends ApiTestCase {
         * Helper function to perform an async upload, execute the job and fetch
         * the status
         *
+        * @param string $token
+        * @param bool $ignoreWarnings
+        * @param bool $leaveMessage
         * @return array The result of action=upload&statuskey=key
         */
        private function doAsyncUpload( $token, $ignoreWarnings = false, $leaveMessage = false ) {
                $params = array(
                        'action' => 'upload',
                        'filename' => 'UploadFromUrlTest.png',
-                       'url' => 'http://bits.wikimedia.org/skins-1.5/common/images/poweredby_mediawiki_88x31.png',
+                       'url' => 'http://upload.wikimedia.org/wikipedia/mediawiki/b/bc/Wiki.png',
                        'asyncdownload' => 1,
                        'token' => $token,
                );
index fdd40b2..d5d1188 100644 (file)
@@ -68,7 +68,7 @@ class UploadStashTest extends MediaWikiTestCase {
                $stash->removeFile( $file->getFileKey() );
        }
 
-       public function provideInvalidRequests() {
+       public static function provideInvalidRequests() {
                return array(
                        'Check failure on bad wpFileKey' =>
                                array( new FauxRequest( array( 'wpFileKey' => 'foo' ) ) ),
@@ -84,7 +84,7 @@ class UploadStashTest extends MediaWikiTestCase {
                $this->assertFalse( UploadFromStash::isValidRequest( $request ) );
        }
 
-       public function provideValidRequests() {
+       public static function provideValidRequests() {
                return array(
                        'Check good wpFileKey' =>
                                array( new FauxRequest( array( 'wpFileKey' => 'testkey-test.test' ) ) ),
index 7e37534..73e4c1a 100644 (file)
@@ -6,6 +6,12 @@
 
 class MWCryptHKDFTest extends MediaWikiTestCase {
 
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( 'wgSecretKey', '5bf1945342e67799cb50704a7fa19ac6' );
+       }
+
        /**
         * Test basic usage works
         */
index 89759e5..0fdb8e1 100644 (file)
@@ -35,7 +35,9 @@ class StringUtilsTest extends MediaWikiTestCase {
        }
 
        /**
-        * Print high range characters as an hexadecimal
+        * Print high range characters as a hexadecimal
+        * @param string $string
+        * @return string
         */
        function escaped( $string ) {
                $escaped = '';
index fc58022..e6a0cf0 100644 (file)
@@ -37,7 +37,7 @@ class LanguageGvTest extends LanguageClassesTestCase {
                        array( 'other', 23 ),
                        array( 'other', 50 ),
                        array( 'few', 60 ),
-                       array( 'other', 80 ),
+                       array( 'few', 80 ),
                        array( 'few', 100 )
                );
        }
index f64fc72..1381afb 100644 (file)
@@ -13,7 +13,7 @@ class LanguageRuTest extends LanguageClassesTestCase {
         * @covers Language::convertPlural
         */
        public function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many', 'other' );
+               $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
@@ -22,9 +22,9 @@ class LanguageRuTest extends LanguageClassesTestCase {
         * @covers Language::convertPlural
         */
        public function testExplicitPlural() {
-               $forms = array( 'one', 'many', 'other', '12=dozen' );
+               $forms = array( 'one', 'few', 'many', 'other', '12=dozen' );
                $this->assertEquals( 'dozen', $this->getLang()->convertPlural( 12, $forms ) );
-               $forms = array( 'one', 'many', '100=hundred', 'other', '12=dozen' );
+               $forms = array( 'one', 'few', 'many', '100=hundred', 'other', '12=dozen' );
                $this->assertEquals( 'hundred', $this->getLang()->convertPlural( 100, $forms ) );
        }
 
@@ -42,10 +42,10 @@ class LanguageRuTest extends LanguageClassesTestCase {
                        array( 'many', 11 ),
                        array( 'one', 91 ),
                        array( 'one', 121 ),
-                       array( 'other', 2 ),
-                       array( 'other', 3 ),
-                       array( 'other', 4 ),
-                       array( 'other', 334 ),
+                       array( 'few', 2 ),
+                       array( 'few', 3 ),
+                       array( 'few', 4 ),
+                       array( 'few', 334 ),
                        array( 'many', 5 ),
                        array( 'many', 15 ),
                        array( 'many', 120 ),
index 7ac51c6..20f5bd7 100644 (file)
@@ -28,7 +28,9 @@ class LanguageTlTest extends LanguageClassesTestCase {
                return array(
                        array( 'one', 0 ),
                        array( 'one', 1 ),
-                       array( 'other', 2 ),
+                       array( 'one', 2 ),
+                       array( 'other', 4 ),
+                       array( 'other', 6 ),
                );
        }
 }
index 45d5ea8..415e11b 100644 (file)
@@ -31,7 +31,7 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
         * @param Page $page Page to add the revision to
         * @param string $text Revisions text
         * @param string $summary Revisions summare
-        *
+        * @return array
         * @throws MWException
         */
        protected function addRevision( Page $page, $text, $summary ) {
@@ -330,6 +330,12 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
                $this->assertTextNode( "comment", $summary );
                $this->skipWhitespace();
 
+               $this->assertTextNode( "model", $model );
+               $this->skipWhitespace();
+
+               $this->assertTextNode( "format", $format );
+               $this->skipWhitespace();
+
                if ( $this->xml->name == "text" ) {
                        // note: <text> tag may occur here or at the very end.
                        $text_found = true;
@@ -340,12 +346,6 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
 
                $this->assertTextNode( "sha1", $text_sha1 );
 
-               $this->assertTextNode( "model", $model );
-               $this->skipWhitespace();
-
-               $this->assertTextNode( "format", $format );
-               $this->skipWhitespace();
-
                if ( !$text_found ) {
                        $this->assertText( $id, $text_id, $text_bytes, $text );
                }
index a13f7bf..e2fc824 100644 (file)
@@ -810,4 +810,21 @@ class MaintenanceTest extends MediaWikiTestCase {
                $m2->simulateShutdown();
                $this->assertOutputPrePostShutdown( "foobar\n\n", false );
        }
+
+       /**
+        * @covers Maintenance::getConfig
+        */
+       public function testGetConfig() {
+               $this->assertInstanceOf( 'Config', $this->m->getConfig() );
+               $this->assertSame( ConfigFactory::getDefaultInstance()->makeConfig( 'main' ), $this->m->getConfig() );
+       }
+
+       /**
+        * @covers Maintenance::setConfig
+        */
+       public function testSetConfig() {
+               $conf = $this->getMock( 'Config' );
+               $this->m->setConfig( $conf );
+               $this->assertSame( $conf, $this->m->getConfig() );
+       }
 }
index a37a97c..e620b08 100644 (file)
@@ -440,10 +440,10 @@ class TextPassDumperTest extends DumpTestCase {
                if ( $fname === null ) {
                        $fname = $this->getNewTempFile();
                }
-               $header = '<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.7/" '
+               $header = '<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" '
                        . 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
-                       . 'xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.7/ '
-                       . 'http://www.mediawiki.org/xml/export-0.7.xsd" version="0.7" xml:lang="en">
+                       . 'xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ '
+                       . 'http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
   <siteinfo>
     <sitename>wikisvn</sitename>
     <base>http://localhost/wiki-svn/index.php/Main_Page</base>
@@ -489,10 +489,10 @@ class TextPassDumperTest extends DumpTestCase {
         <ip>127.0.0.1</ip>
       </contributor>
       <comment>BackupDumperTestP1Summary1</comment>
-      <sha1>0bolhl6ol7i6x0e7yq91gxgaan39j87</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
       <text id="' . $this->textId1_1 . '" bytes="23" />
+      <sha1>0bolhl6ol7i6x0e7yq91gxgaan39j87</sha1>
     </revision>
   </page>
 ';
@@ -507,10 +507,10 @@ class TextPassDumperTest extends DumpTestCase {
         <ip>127.0.0.1</ip>
       </contributor>
       <comment>BackupDumperTestP2Summary1</comment>
-      <sha1>jprywrymfhysqllua29tj3sc7z39dl2</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
       <text id="' . $this->textId2_1 . '" bytes="23" />
+      <sha1>jprywrymfhysqllua29tj3sc7z39dl2</sha1>
     </revision>
     <revision>
       <id>' . ( $this->revId2_2 + $i * self::$numOfRevs ) . '</id>
@@ -520,10 +520,10 @@ class TextPassDumperTest extends DumpTestCase {
         <ip>127.0.0.1</ip>
       </contributor>
       <comment>BackupDumperTestP2Summary2</comment>
-      <sha1>b7vj5ks32po5m1z1t1br4o7scdwwy95</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
       <text id="' . $this->textId2_2 . '" bytes="23" />
+      <sha1>b7vj5ks32po5m1z1t1br4o7scdwwy95</sha1>
     </revision>
     <revision>
       <id>' . ( $this->revId2_3 + $i * self::$numOfRevs ) . '</id>
@@ -533,10 +533,10 @@ class TextPassDumperTest extends DumpTestCase {
         <ip>127.0.0.1</ip>
       </contributor>
       <comment>BackupDumperTestP2Summary3</comment>
-      <sha1>jfunqmh1ssfb8rs43r19w98k28gg56r</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
       <text id="' . $this->textId2_3 . '" bytes="23" />
+      <sha1>jfunqmh1ssfb8rs43r19w98k28gg56r</sha1>
     </revision>
     <revision>
       <id>' . ( $this->revId2_4 + $i * self::$numOfRevs ) . '</id>
@@ -546,10 +546,10 @@ class TextPassDumperTest extends DumpTestCase {
         <ip>127.0.0.1</ip>
       </contributor>
       <comment>BackupDumperTestP2Summary4 extra</comment>
-      <sha1>6o1ciaxa6pybnqprmungwofc4lv00wv</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
       <text id="' . $this->textId2_4 . '" bytes="44" />
+      <sha1>6o1ciaxa6pybnqprmungwofc4lv00wv</sha1>
     </revision>
   </page>
 ';
@@ -566,10 +566,10 @@ class TextPassDumperTest extends DumpTestCase {
         <ip>127.0.0.1</ip>
       </contributor>
       <comment>Talk BackupDumperTestP1 Summary1</comment>
-      <sha1>nktofwzd0tl192k3zfepmlzxoax1lpe</sha1>
       <model>wikitext</model>
       <format>text/x-wiki</format>
       <text id="' . $this->textId4_1 . '" bytes="35" />
+      <sha1>nktofwzd0tl192k3zfepmlzxoax1lpe</sha1>
     </revision>
   </page>
 ';
index b2141d3..4e38418 100644 (file)
@@ -101,7 +101,7 @@ class FetchTextTest extends MediaWikiTestCase {
         * @param WikiPage $page The page to add the revision to
         * @param string $text The revisions text
         * @param string $summary The revisions summare
-        *
+        * @return int
         * @throws MWException
         */
        private function addRevision( $page, $text, $summary ) {
index 2bdc9c9..2142061 100644 (file)
@@ -2,27 +2,22 @@
 
 class AutoLoaderTest extends MediaWikiTestCase {
        protected function setUp() {
-               global $wgAutoloadLocalClasses, $wgAutoloadClasses;
-
                parent::setUp();
 
                // Fancy dance to trigger a rebuild of AutoLoader::$autoloadLocalClassesLower
-               $this->testLocalClasses = array(
-                       'TestAutoloadedLocalClass' => __DIR__ . '/../data/autoloader/TestAutoloadedLocalClass.php',
-                       'TestAutoloadedCamlClass' => __DIR__ . '/../data/autoloader/TestAutoloadedCamlClass.php',
+               $this->mergeMwGlobalArrayValue( 'wgAutoloadLocalClasses', array(
+                       'TestAutoloadedLocalClass' =>
+                               __DIR__ . '/../data/autoloader/TestAutoloadedLocalClass.php',
+                       'TestAutoloadedCamlClass' =>
+                               __DIR__ . '/../data/autoloader/TestAutoloadedCamlClass.php',
                        'TestAutoloadedSerializedClass' =>
                                __DIR__ . '/../data/autoloader/TestAutoloadedSerializedClass.php',
-               );
-               $this->setMwGlobals(
-                       'wgAutoloadLocalClasses',
-                       $this->testLocalClasses + $wgAutoloadLocalClasses
-               );
+               ) );
                AutoLoader::resetAutoloadLocalClassesLower();
 
-               $this->testExtensionClasses = array(
+               $this->mergeMwGlobalArrayValue( 'wgAutoloadClasses', array(
                        'TestAutoloadedClass' => __DIR__ . '/../data/autoloader/TestAutoloadedClass.php',
-               );
-               $this->setMwGlobals( 'wgAutoloadClasses', $this->testExtensionClasses + $wgAutoloadClasses );
+               ) );
        }
 
        /**
index 7576602..2396ea2 100644 (file)
@@ -106,6 +106,7 @@ class ResourcesTest extends MediaWikiTestCase {
 
        /**
         * Get all registered modules from ResouceLoader.
+        * @return array
         */
        protected static function getAllModules() {
                global $wgEnableJavaScriptTest;
index f5cd892..14461be 100644 (file)
@@ -58,6 +58,8 @@ class StructureTest extends MediaWikiTestCase {
 
        /**
         * Filter to remove testUnitTestFileNamesEndWithTest false positives.
+        * @param string $filename
+        * @return bool
         */
        public function filterSuites( $filename ) {
                return strpos( $filename, __DIR__ . '/../suites/' ) !== 0;
index 4d24d9d..116065f 100644 (file)
@@ -8,12 +8,25 @@
 class ExtensionsTestSuite extends PHPUnit_Framework_TestSuite {
        public function __construct() {
                parent::__construct();
-               $files = array();
-               wfRunHooks( 'UnitTestsList', array( &$files ) );
-               foreach ( $files as $file ) {
-                       $this->addTestFile( $file );
+               $paths = array();
+               // Extensions can return a list of files or directories
+               wfRunHooks( 'UnitTestsList', array( &$paths ) );
+               foreach ( $paths as $path ) {
+                       if ( is_dir( $path ) ) {
+                               // If the path is a directory, search for test cases.
+                               // @since 1.24
+                               $suffixes = array(
+                                       'Test.php',
+                               );
+                               $fileIterator = new File_Iterator_Facade();
+                               $matchingFiles = $fileIterator->getFilesAsArray( $path, $suffixes );
+                               $this->addTestFiles( $matchingFiles );
+                       } else {
+                               // Add a single test case or suite class
+                               $this->addTestFile( $path );
+                       }
                }
-               if ( !count( $files ) ) {
+               if ( !count( $paths ) ) {
                        $this->addTest( new DummyExtensionsTest( 'testNothing' ) );
                }
        }
index bd82d21..d4a7bd3 100644 (file)
@@ -95,6 +95,7 @@ class UploadFromUrlTestSuite extends PHPUnit_Framework_TestSuite {
 
        /**
         * Remove the dummy uploads directory
+        * @param string $dir
         */
        private function teardownUploadDir( $dir ) {
                if ( $this->keepUploads ) {
index 34007ed..a6fbfac 100644 (file)
@@ -66,6 +66,7 @@ return array(
                        'tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.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.Uri.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js',
@@ -106,6 +107,7 @@ return array(
                        'mediawiki.toc',
                        'mediawiki.Uri',
                        'mediawiki.user',
+                       'mediawiki.template',
                        'mediawiki.util',
                        'mediawiki.special.recentchanges',
                        'mediawiki.language',
index 1005316..e8c5121 100644 (file)
@@ -41,7 +41,7 @@
                // Add two characters using scary black magic
                spanText = $span.text();
                d = findDivergenceIndex( origText, spanText );
-               spanTextNew = spanText.substr( 0, d ) + origText[d] + origText[d] + '...';
+               spanTextNew = spanText.slice( 0, d ) + origText[d] + origText[d] + '...';
 
                assert.gt( spanTextNew.length, spanText.length, 'Verify that the new span-length is indeed greater' );
 
index 0b7e87e..ca3f418 100644 (file)
@@ -1,13 +1,14 @@
 ( function ( $ ) {
        QUnit.module( 'jquery.getAttrs', QUnit.newMwEnvironment() );
 
-       QUnit.test( 'Check', 1, function ( assert ) {
+       QUnit.test( 'getAttrs()', 1, function ( assert ) {
                var attrs = {
                                foo: 'bar',
-                               'class': 'lorem'
+                               'class': 'lorem',
+                               'data-foo': 'data value'
                        },
                        $el = $( '<div>' ).attr( attrs );
 
-               assert.deepEqual( $el.getAttrs(), attrs, 'getAttrs() return object should match the attributes set, no more, no less' );
+               assert.propEqual( $el.getAttrs(), attrs, 'keys and values match' );
        } );
 }( jQuery ) );
index f156c72..b89526f 100644 (file)
 
                this.server.respond( function ( request ) {
                        if ( window.FormData ) {
-                               assert.ok( !request.url.match( /action=/), 'Request has no query string' );
+                               assert.ok( !request.url.match( /action=/ ), 'Request has no query string' );
                                assert.ok( request.requestBody instanceof FormData, 'Request uses FormData body' );
                        } else {
-                               assert.ok( !request.url.match( /action=test/), 'Request has no query string' );
+                               assert.ok( !request.url.match( /action=test/ ), 'Request has no query string' );
                                assert.equal( request.requestBody, 'action=test&format=json', 'Request uses query string body' );
                        }
                        request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
                } );
        } );
 
-       QUnit.test( 'Deprecated callback methods', function ( assert ) {
-               QUnit.expect( 3 );
+       QUnit.test( 'Converting arrays to pipe-separated', function ( assert ) {
+               QUnit.expect( 1 );
 
                var api = new mw.Api();
+               api.get( { test: [ 'foo', 'bar', 'baz' ] } );
 
-               this.suppressWarnings();
-
-               api.get( {}, function () {
-                       assert.ok( true, 'Function argument treated as success callback.' );
-               } );
-
-               api.get( {}, {
-                       ok: function () {
-                               assert.ok( true, '"ok" property treated as success callback.' );
-                       }
-               } );
-
-               api.get( { action: 'doesntexist' }, {
-                       err: function () {
-                               assert.ok( true, '"err" property treated as error callback.' );
-                       }
-               } );
-
-               this.restoreWarnings();
-
-               this.server.respondWith( /action=query/, function ( request ) {
+               this.server.respond( function ( request ) {
+                       assert.ok( request.url.match( /test=foo%7Cbar%7Cbaz/ ), 'Pipe-separated value was submitted' );
                        request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
                } );
-
-               this.server.respondWith( /action=doesntexist/, function ( request ) {
-                       request.respond( 200, { 'Content-Type': 'application/json' },
-                               '{ "error": { "code": "unknown_action" } }'
-                       );
-               } );
-
-               this.server.respond();
        } );
 
        QUnit.test( 'getToken( pre-populated )', function ( assert ) {
                );
        } );
 
+       QUnit.test( 'postWithToken( tokenType, params with assert )', function ( assert ) {
+               QUnit.expect( 2 );
+
+               var api = new mw.Api( { ajax: { url: '/postWithToken/api.php' } } );
+
+               api.postWithToken( 'testasserttoken', { action: 'example', key: 'foo', assert: 'user' } )
+                       .fail( function ( errorCode ) {
+                               assert.equal( errorCode, 'assertuserfailed', 'getToken fails assert' );
+                       } );
+
+               assert.equal( this.server.requests.length, 1, 'Request for token made' );
+               this.server.respondWith( /assert=user/, function ( request ) {
+                       request.respond(
+                               200,
+                               { 'Content-Type': 'application/json' },
+                               '{ "error": { "code": "assertuserfailed", "info": "Assertion failed" } }'
+                       );
+               } );
+
+               this.server.respond();
+       } );
+
        QUnit.test( 'postWithToken( tokenType, params, ajaxOptions )', function ( assert ) {
                QUnit.expect( 3 );
 
index 077ce70..7ab309a 100644 (file)
                }
        } );
 
+       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;
+
+               for ( i = 0; i < cases.length; i++ ) {
+                       thisCase = cases[i];
+
+                       title = mw.Title.newFromText( thisCase.text );
+                       assert.equal( title.getRelativeText( thisCase.relativeTo ), thisCase.expectedResult );
+               }
+       } );
+
+       QUnit.test( 'newFromUserInput', 8, function ( assert ) {
+               var title, i, thisCase, prefix,
+                       cases = [
+                               {
+                                       title: 'DCS0001557854455.JPG',
+                                       defaultNamespace: 0,
+                                       options: {
+                                               fileExtension: 'PNG'
+                                       },
+                                       expected: 'DCS0001557854455.JPG',
+                                       description: 'Title in normal namespace without anything invalid but with "file extension"'
+                               },
+                               {
+                                       title: 'MediaWiki:Msg-awesome',
+                                       defaultNamespace: undefined,
+                                       expected: 'MediaWiki:Msg-awesome',
+                                       description: 'Full title (page in MediaWiki namespace) supplied as string'
+                               },
+                               {
+                                       title: 'The/Mw/Sound.flac',
+                                       defaultNamespace: -2,
+                                       expected: 'Media:The-Mw-Sound.flac',
+                                       description: 'Page in Media-namespace without explicit options'
+                               },
+                               {
+                                       title: 'File:The/Mw/Sound.kml',
+                                       defaultNamespace: 6,
+                                       options: {
+                                               forUploading: false
+                                       },
+                                       expected: 'File:The/Mw/Sound.kml',
+                                       description: 'Page in File-namespace without explicit options'
+                               }
+                       ];
+
+               for ( i = 0; i < cases.length; i++ ) {
+                       thisCase = cases[i];
+                       title = mw.Title.newFromUserInput( thisCase.title, thisCase.defaultNamespace, thisCase.options );
+
+                       if ( thisCase.expected !== undefined ) {
+                               prefix = '[' + thisCase.description + '] ';
+
+                               assert.notStrictEqual( title, null, prefix + 'Parses successfully' );
+                               assert.equal( title.toText(), thisCase.expected, prefix + 'Title as expected' );
+                       } else {
+                               assert.strictEqual( title, null, thisCase.description + ', should not produce an mw.Title object' );
+                       }
+               }
+       } );
+
+       QUnit.test( 'newFromFileName', 62, function ( assert ) {
+               var title, i, thisCase, prefix,
+                       cases = [
+                               {
+                                       fileName: 'DCS0001557854455.JPG',
+                                       typeOfName: 'Standard camera output',
+                                       nameText: 'DCS0001557854455',
+                                       prefixedText: 'File:DCS0001557854455.JPG',
+                                       extensionDesired: 'jpg'
+                               },
+                               {
+                                       fileName: 'File:Sample.png',
+                                       typeOfName: 'Carrying namespace',
+                                       nameText: 'File-Sample',
+                                       prefixedText: 'File:File-Sample.png'
+                               },
+                               {
+                                       fileName: 'Treppe 2222 Test upload.jpg',
+                                       typeOfName: 'File name with spaces in it and lower case file extension',
+                                       nameText: 'Treppe 2222 Test upload',
+                                       prefixedText: 'File:Treppe 2222 Test upload.jpg',
+                                       extensionDesired: 'JPG'
+                               },
+                               {
+                                       fileName: 'I contain a \ttab.jpg',
+                                       typeOfName: 'Name containing a tab character',
+                                       nameText: 'I contain a tab',
+                                       prefixedText: 'File:I contain a tab.jpg'
+                               },
+                               {
+                                       fileName: 'I_contain multiple__ ___ _underscores.jpg',
+                                       typeOfName: 'Name containing multiple underscores',
+                                       nameText: 'I contain multiple underscores',
+                                       prefixedText: 'File:I contain multiple underscores.jpg'
+                               },
+                               {
+                                       fileName: 'I like ~~~~~~~~es.jpg',
+                                       typeOfName: 'Name containing more than three consecutive tilde characters',
+                                       nameText: 'I like ~~es',
+                                       prefixedText: 'File:I like ~~es.jpg'
+                               },
+                               {
+                                       fileName: 'BI\u200EDI.jpg',
+                                       typeOfName: 'Name containing BIDI overrides',
+                                       nameText: 'BIDI',
+                                       prefixedText: 'File:BIDI.jpg'
+                               },
+                               {
+                                       fileName: '100%ab progress.jpg',
+                                       typeOfName: 'File name with URL encoding',
+                                       nameText: '100% ab progress',
+                                       prefixedText: 'File:100% ab progress.jpg'
+                               },
+                               {
+                                       fileName: '<([>]):/#.jpg',
+                                       typeOfName: 'File name with characters not permitted in titles that are replaced',
+                                       nameText: '((()))---',
+                                       prefixedText: 'File:((()))---.jpg'
+                               },
+                               {
+                                       fileName: 'spaces\u0009\u2000\u200A\u200Bx.djvu',
+                                       typeOfName: 'File name with different kind of spaces',
+                                       nameText: 'Spaces \u200Bx',
+                                       prefixedText: 'File:Spaces \u200Bx.djvu'
+                               },
+                               {
+                                       fileName: 'dot.dot.dot.dot.dotdot',
+                                       typeOfName: 'File name with a lot of dots',
+                                       nameText: 'Dot.dot.dot.dot',
+                                       prefixedText: 'File:Dot.dot.dot.dot.dotdot'
+                               },
+                               {
+                                       fileName: 'dot. dot ._dot',
+                                       typeOfName: 'File name with multiple dots and spaces',
+                                       nameText: 'Dot. dot',
+                                       prefixedText: 'File:Dot. dot. dot'
+                               },
+                               {
+                                       fileName: 'dot. dot ._dot',
+                                       typeOfName: 'File name with different file extension desired',
+                                       nameText: 'Dot. dot . dot',
+                                       prefixedText: 'File:Dot. dot . dot.png',
+                                       extensionDesired: 'png'
+                               },
+                               {
+                                       fileName: 'fileWOExt',
+                                       typeOfName: 'File W/O extension with extension desired',
+                                       nameText: 'FileWOExt',
+                                       prefixedText: 'File:FileWOExt.png',
+                                       extensionDesired: 'png'
+                               },
+                               {
+                                       fileName: '𠜎𠜱𠝹𠱓𠱸𠲖𠳏𠳕𠴕𠵼𠵿𠸎𠸏𠹷𠺝𠺢𠻗𠻹𠻺𠼭𠼮𠽌𠾴𠾼𠿪𡁜𡁯𡁵𡁶𡁻𡃁𡃉𡇙𢃇𢞵𢫕𢭃𢯊𢱑𢱕𢳂𠻹𠻺𠼭𠼮𠽌𠾴𠾼𠿪𡁜𡁯𡁵𡁶𡁻𡃁𡃉𡇙𢃇𢞵𢫕𢭃𢯊𢱑𢱕𢳂.png',
+                                       typeOfName: 'File name longer than 240 bytes',
+                                       nameText: '𠜎𠜱𠝹𠱓𠱸𠲖𠳏𠳕𠴕𠵼𠵿𠸎𠸏𠹷𠺝𠺢𠻗𠻹𠻺𠼭𠼮𠽌𠾴𠾼𠿪𡁜𡁯𡁵𡁶𡁻𡃁𡃉𡇙𢃇𢞵𢫕𢭃𢯊𢱑𢱕𢳂𠻹𠻺𠼭𠼮𠽌𠾴𠾼𠿪𡁜𡁯𡁵𡁶𡁻𡃁𡃉𡇙𢃇𢞵',
+                                       prefixedText: 'File:𠜎𠜱𠝹𠱓𠱸𠲖𠳏𠳕𠴕𠵼𠵿𠸎𠸏𠹷𠺝𠺢𠻗𠻹𠻺𠼭𠼮𠽌𠾴𠾼𠿪𡁜𡁯𡁵𡁶𡁻𡃁𡃉𡇙𢃇𢞵𢫕𢭃𢯊𢱑𢱕𢳂𠻹𠻺𠼭𠼮𠽌𠾴𠾼𠿪𡁜𡁯𡁵𡁶𡁻𡃁𡃉𡇙𢃇𢞵.png'
+                               },
+                               {
+                                       fileName: '',
+                                       typeOfName: 'Empty string'
+                               },
+                               {
+                                       fileName: 'foo',
+                                       typeOfName: 'String with only alphabet characters'
+                               }
+                       ];
+
+               for ( i = 0; i < cases.length; i++ ) {
+                       thisCase = cases[i];
+                       title = mw.Title.newFromFileName( thisCase.fileName, thisCase.extensionDesired );
+
+                       if ( thisCase.nameText !== undefined ) {
+                               prefix = '[' + thisCase.typeOfName + '] ';
+
+                               assert.notStrictEqual( title, null, prefix + 'Parses successfully' );
+                               assert.equal( title.getNameText(), thisCase.nameText, prefix + 'Filename matches original' );
+                               assert.equal( title.getPrefixedText(), thisCase.prefixedText, prefix + 'File page title matches original' );
+                               assert.equal( title.getNamespaceId(), 6, prefix + 'Namespace ID matches File namespace' );
+                       } else {
+                               assert.strictEqual( title, null, thisCase.typeOfName + ', should not produce an mw.Title object' );
+                       }
+               }
+       } );
+
 }( mediaWiki, jQuery ) );
index afa57ee..ece5116 100644 (file)
@@ -40,7 +40,8 @@
                        'gender-msg-currentuser': '{{GENDER:|blue|pink|green}}',
 
                        'plural-msg': 'Found $1 {{PLURAL:$1|item|items}}',
-
+                       // See https://bugzilla.wikimedia.org/69993
+                       'plural-msg-explicit-forms-nested': 'Found {{PLURAL:$1|$1 results|0=no results in {{SITENAME}}|1=$1 result}}',
                        // Assume the grammar form grammar_case_foo is not valid in any language
                        'grammar-msg': 'Przeszukaj {{GRAMMAR:grammar_case_foo|{{SITENAME}}}}',
 
@@ -53,7 +54,9 @@
 
                        'jquerymsg-test-version-entrypoints-index-php': '[https://www.mediawiki.org/wiki/Manual:index.php index.php]',
 
-                       'external-link-replace': 'Foo [$1 bar]'
+                       'external-link-replace': 'Foo [$1 bar]',
+                       'external-link-plural': 'Foo {{PLURAL:$1|is [$2 one]|are [$2 some]|2=[$2 two]|3=three|4=a=b|5=}} things.',
+                       'plural-only-explicit-forms': 'It is a {{PLURAL:$1|1=single|2=double}} room.'
                }
        } ) );
 
@@ -84,7 +87,7 @@
                        } );
        }
 
-       QUnit.test( 'Replace', 9, function ( assert ) {
+       QUnit.test( 'Replace', 16, function ( assert ) {
                mw.messages.set( 'simple', 'Foo $1 baz $2' );
 
                assert.equal( formatParse( 'simple' ), 'Foo $1 baz $2', 'Replacements with no substitutes' );
                        'Foo <a href="http://example.org/?x=y&amp;z">bar</a>',
                        'Href is not double-escaped in wikilink function'
                );
+               assert.equal(
+                       formatParse( 'external-link-plural', 1, 'http://example.org' ),
+                       'Foo is <a href="http://example.org">one</a> things.',
+                       'Link is expanded inside plural and is not escaped html'
+               );
+               assert.equal(
+                       formatParse( 'external-link-plural', 2, 'http://example.org' ),
+                       'Foo <a href=\"http://example.org\">two</a> things.',
+                       'Link is expanded inside an explicit plural form and is not escaped html'
+               );
+               assert.equal(
+                       formatParse( 'external-link-plural', 3 ),
+                       'Foo three things.',
+                       'A simple explicit plural form co-existing with complex explicit plural forms'
+               );
+               assert.equal(
+                       formatParse( 'external-link-plural', 4, 'http://example.org' ),
+                       'Foo a=b things.',
+                       'Only first equal sign is used as delimiter for explicit plural form. Repeated equal signs does not create issue'
+               );
+               assert.equal(
+                       formatParse( 'external-link-plural', 5, 'http://example.org' ),
+                       'Foo are <a href="http://example.org">some</a> things.',
+                       'Invalid explicit plural form. Plural fallback to the "other" plural form'
+               );
+               assert.equal(
+                       formatParse( 'external-link-plural', 6, 'http://example.org' ),
+                       'Foo are <a href="http://example.org">some</a> things.',
+                       'Plural fallback to the "other" plural form'
+               );
+               assert.equal(
+                       formatParse( 'plural-only-explicit-forms', 2 ),
+                       'It is a double room.',
+                       'Plural with explicit forms alone.'
+               );
        } );
 
-       QUnit.test( 'Plural', 3, function ( assert ) {
+       QUnit.test( 'Plural', 6, function ( assert ) {
                assert.equal( formatParse( 'plural-msg', 0 ), 'Found 0 items', 'Plural test for english with zero as count' );
                assert.equal( formatParse( 'plural-msg', 1 ), 'Found 1 item', 'Singular test for english' );
                assert.equal( formatParse( 'plural-msg', 2 ), 'Found 2 items', 'Plural test for english' );
+               assert.equal( formatParse( 'plural-msg-explicit-forms-nested', 6 ), 'Found 6 results', 'Plural message with explicit plural forms' );
+               assert.equal( formatParse( 'plural-msg-explicit-forms-nested', 0 ), 'Found no results in ' + mw.config.get( 'wgSiteName' ), 'Plural message with explicit plural forms, with nested {{SITENAME}}' );
+               assert.equal( formatParse( 'plural-msg-explicit-forms-nested', 1 ), 'Found 1 result', 'Plural message with explicit plural forms with placeholder nested' );
        } );
 
        QUnit.test( 'Gender', 15, function ( assert ) {
index 3bfabe4..16f90df 100644 (file)
                assert.equal( mw.language.getData( 'en', 'invalidkey' ), undefined, 'Getter setter test for mw.language with invalid key' );
        } );
 
+       QUnit.test( 'mw.language.commafy test', 9, function ( assert ) {
+               // 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( 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' );
+               assert.equal( mw.language.commafy( -1234.567, '###0.#####' ), '-1234.567', 'Negative number' );
+               assert.equal( mw.language.commafy( -1234.567, '#,###.00' ), '-1,234.56', 'Fractional part bigger than pattern.' );
+               assert.equal( mw.language.commafy( 123456789.567, '###,##0.00' ), '123,456,789.56', 'Decimal part as group of 3' );
+               assert.equal( mw.language.commafy( 123456789.567, '###,###,#0.00' ), '1,234,567,89.56', 'Decimal part as group of 3 and last one 2' );
+       } );
+
        function grammarTest( langCode, test ) {
                // The test works only if the content language is opt.language
                // because it requires [lang].js to be loaded.
                        grammarTest( langCode, test );
                }
        } );
+
+       QUnit.test( 'List to text test', 4, function ( assert ) {
+               assert.equal( mw.language.listToText( [] ), '', 'Blank list' );
+               assert.equal( mw.language.listToText( ['a'] ), 'a', 'Single item' );
+               assert.equal( mw.language.listToText( ['a', 'b'] ), 'a and b', 'Two items' );
+               assert.equal( mw.language.listToText( ['a', 'b', 'c'] ), 'a, b and c', 'More than two items' );
+       } );
 }( mediaWiki, jQuery ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js
new file mode 100644 (file)
index 0000000..86fd828
--- /dev/null
@@ -0,0 +1,63 @@
+( function ( mw ) {
+
+       QUnit.module( 'mediawiki.template', {
+               setup: function () {
+                       var abcCompiler = {
+                               compile: function () {
+                                       return 'abc default compiler';
+                               }
+                       };
+
+                       // Register some template compiler languages
+                       mw.template.registerCompiler( 'abc', abcCompiler );
+                       mw.template.registerCompiler( 'xyz', {
+                               compile: function () {
+                                       return 'xyz compiler';
+                               }
+                       } );
+
+                       // Stub register some templates
+                       this.sandbox.stub( mw.templates, 'get' ).returns( {
+                               'test_templates_foo.xyz': 'goodbye',
+                               'test_templates_foo.abc': 'thankyou'
+                       } );
+               }
+       } );
+
+       QUnit.test( 'add', 1, function ( assert ) {
+               assert.throws(
+                       function () {
+                               mw.template.add( 'module', 'test_templates_foo', 'hello' );
+                       },
+                       'When no prefix throw exception'
+               );
+       } );
+
+       QUnit.test( 'compile', 1, function ( assert ) {
+               assert.throws(
+                       function () {
+                               mw.template.compile( '{{foo}}', 'rainbow' );
+                       },
+                       'Unknown compiler names throw exceptions'
+               );
+       } );
+
+       QUnit.test( 'get', 4, function ( assert ) {
+               assert.strictEqual( mw.template.get( 'test.mediawiki.template', 'test_templates_foo.xyz' ), 'xyz compiler' );
+               assert.strictEqual( mw.template.get( 'test.mediawiki.template', 'test_templates_foo.abc' ), 'abc default compiler' );
+               assert.throws(
+                       function () {
+                               mw.template.get( 'this.should.not.exist', 'hello' );
+                       },
+                       'When bad module name given throw error.'
+               );
+
+               assert.throws(
+                       function () {
+                               mw.template.get( 'mediawiki.template', 'hello' );
+                       },
+                       'The template hello should not exist in the mediawiki.templates module and should throw an exception.'
+               );
+       } );
+
+}( mediaWiki ) );
index 9681330..7e0ee91 100644 (file)
@@ -32,9 +32,7 @@
 
        mw.loader.addSource(
                'testloader',
-               {
-                       loadScript: QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/load.mock.php' )
-               }
+               QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/load.mock.php' )
        );
 
        QUnit.test( 'Initial check', 8, function ( assert ) {
                // Confirm that mw.loader.load() works with protocol-relative URLs
                target = target.replace( /https?:/, '' );
 
-               assert.equal( target.substr( 0, 2 ), '//',
+               assert.equal( target.slice( 0, 2 ), '//',
                        'URL must be relative to test relative URLs!'
                );
 
index 4401ead..9b620de 100644 (file)
                );
 
                assert.equal( $tbMW.closest( '.portlet' ).attr( 'id' ), 'p-test-tb', 'Link was inserted within correct portlet' );
-               assert.strictEqual( $tbMW.next()[0], tbRL, 'Link is in the correct position (by passing nextnode)' );
+               assert.strictEqual( $tbMW.next()[0], tbRL, 'Link is in the correct position (nextnode as Node object)' );
 
                cuQuux = mw.util.addPortletLink( 'p-test-custom', '#', 'Quux', null, 'Example [shift-x]', 'q' );
                $cuQuux = $( cuQuux );
                tbRLDM = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
                        'Default modules', 't-rldm', 'List of all default modules ', 'd', '#t-rl' );
 
-               assert.equal( $( tbRLDM ).next().attr( 'id' ), 't-rl', 'Link is in the correct position (by passing CSS selector)' );
+               assert.strictEqual( $( tbRLDM ).next()[0], tbRL, 'Link is in the correct position (CSS selector as nextnode)' );
 
                caFoo = mw.util.addPortletLink( 'p-test-views', '#', 'Foo' );
 
                assert.strictEqual( $( caFoo ).find( 'span' ).length, 1, 'A <span> element should be added for porlets with vectorTabs class.' );
 
                addedAfter = mw.util.addPortletLink( 'p-test-tb', '#', 'After foo', 'post-foo', 'After foo', null, $( tbRL ) );
-               assert.strictEqual( $( addedAfter ).next()[0], tbRL, 'Link is in the correct position (by passing a jQuery object as nextnode)' );
+               assert.strictEqual( $( addedAfter ).next()[0], tbRL, 'Link is in the correct position (jQuery object as nextnode)' );
 
                // test case - nonexistent id as next node
                tbRLDMnonexistentid = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
                        'Default modules', 't-rldm-nonexistent', 'List of all default modules ', 'd', '#t-rl-nonexistent' );
 
-               assert.equal( tbRLDMnonexistentid, $( '#p-test-tb li:last' )[0], 'Nonexistent id as nextnode adds the portlet at end' );
+               assert.equal( tbRLDMnonexistentid, $( '#p-test-tb li:last' )[0], 'Fallback to adding at the end (nextnode non-matching CSS selector)' );
 
                // test case - empty jquery object as next node
                tbRLDMemptyjquery = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
                        'Default modules', 't-rldm-empty-jquery', 'List of all default modules ', 'd', $( '#t-rl-nonexistent' ) );
 
-               assert.equal( tbRLDMemptyjquery, $( '#p-test-tb li:last' )[0], 'Empty jquery as nextnode adds the portlet at end' );
+               assert.equal( tbRLDMemptyjquery, $( '#p-test-tb li:last' )[0], 'Fallback to adding at the end (nextnode as empty jQuery object)' );
        } );
 
        QUnit.test( 'jsMessage', 1, function ( assert ) {
index c3b9b3d..6011961 100644 (file)
@@ -1,7 +1,6 @@
 /*global isCompatible: true */
 ( function ( $ ) {
        var testcases = {
-               // Supported: Compatible
                gradeA: [
                        // Chrome
                        'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16',
@@ -22,8 +21,7 @@
                        'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 OPR/15.0.1147.153',
                        'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 OPR/16.0.1196.62',
                        'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36 OPR/23.0.1522.75',
-                       // Internet Explorer 7+
-                       'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; en-US)',
+                       // Internet Explorer 8+
                        'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; Media Center PC 4.0; SLCC1; .NET CLR 3.0.04320)',
                        'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0)',
                        'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)',
                        // Android
                        'Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17'
                ],
-               // Supported: Uncompatible, serve basic content
                gradeC: [
-                       // Internet Explorer < 7
+                       // Internet Explorer < 8
                        'Mozilla/2.0 (compatible; MSIE 3.03; Windows 3.1)',
                        'Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)',
                        'Mozilla/4.0 (compatible; MSIE 5.0; Windows 98;)',
                        'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
                        'Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1)',
+                       'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; en-US)',
                        // Firefox < 3
                        'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2',
                        'Mozilla/5.0 (X11; U; Linux i686; nl; rv:1.8.1.1) Gecko/20070311 Firefox/2.0.0.1',
@@ -90,8 +88,7 @@
                        // Google Glass
                        'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Glass 1 Build/IMM76L; XE11) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'
                ],
-               // No explicit support for or against these browsers, they're
-               // given a shot at Grade A at their own risk.
+               // No explicit support for or against these browsers, they're given a shot at Grade A.
                gradeX: [
                        // Firefox 3.6
                        'Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3',
@@ -99,6 +96,7 @@
                        'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060928 (Debian|Debian-1.8.0.7-1) Epiphany/2.14',
                        'Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.6) Gecko/20070817 IceWeasel/2.0.0.6-g2',
                        // KHTML
+                       'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.4 (like Gecko)',
                        'Mozilla/5.0 (compatible; Konqueror/4.3; Linux) KHTML/4.3.5 (like Gecko)',
                        // Text browsers
                        'Links (2.1pre33; Darwin 8.11.0 Power Macintosh; x)',
index 2f5fa9e..b5fc800 100644 (file)
  */
 interface ITestRecorder {
 
-       /** Called at beginning of the parser test run */
+       /**
+        * Called at beginning of the parser test run
+        */
        public function start();
 
-       /** Called after each test */
+       /**
+        * Called after each test
+        * @param string $test
+        * @param bool $result
+        */
        public function record( $test, $result );
 
-       /** Called before finishing the test run */
+       /**
+        * Called before finishing the test run
+        */
        public function report();
 
-       /** Called at the end of the parser test run */
+       /**
+        * Called at the end of the parser test run
+        */
        public function end();
 
 }
@@ -107,6 +117,7 @@ class DbTestPreviewer extends TestRecorder {
 
        /**
         * This should be called before the table prefix is changed
+        * @param TestRecorder $parent
         */
        function __construct( $parent ) {
                parent::__construct( $parent );
@@ -220,6 +231,9 @@ class DbTestPreviewer extends TestRecorder {
         * Returns a string giving information about when a test last had a status change.
         * Could help to track down when regressions were introduced, as distinct from tests
         * which have never passed (which are more change requests than regressions).
+        * @param string $testname
+        * @param string $after
+        * @return string
         */
        private function getTestStatusInfo( $testname, $after ) {
                // If we're looking at a test that has just been removed, then say when it first appeared.
@@ -423,7 +437,7 @@ class TestFileIterator implements Iterator {
                $input = $this->checkSection( array( 'wikitext', 'input' ), false );
                $result = $this->checkSection( array( 'html/php', 'html/*', 'html', 'result' ), false );
                // some tests have "with tidy" and "without tidy" variants
-               $tidy = $this->checkSection( array( 'html/php+tidy', 'html+tidy'), false );
+               $tidy = $this->checkSection( array( 'html/php+tidy', 'html+tidy' ), false );
                if ( $tidy != false ) {
                        if ( $this->nextSubTest == 0 ) {
                                if ( $result != false ) {
@@ -475,9 +489,11 @@ class TestFileIterator implements Iterator {
 
        function readNextTest() {
                # Run additional subtests of previous test
-               while ( $this->nextSubTest > 0 )
-                       if ( $this->setupCurrentTest() )
+               while ( $this->nextSubTest > 0 ) {
+                       if ( $this->setupCurrentTest() ) {
                                return true;
+                       }
+               }
 
                $this->clearSection();
                # Reset hooks for the delayed test object
@@ -542,7 +558,7 @@ class TestFileIterator implements Iterator {
                                                $line = trim( $line );
 
                                                if ( $line ) {
-                                                       $delayedParserTest->requireTransparentHook( $line );
+                                                       $this->delayedParserTest->requireTransparentHook( $line );
                                                }
                                        }
 
@@ -554,8 +570,9 @@ class TestFileIterator implements Iterator {
                                if ( $this->section == 'end' ) {
                                        $this->checkSection( 'test' );
                                        do {
-                                               if ( $this->setupCurrentTest() )
+                                               if ( $this->setupCurrentTest() ) {
                                                        return true;
+                                               }
                                        } while ( $this->nextSubTest > 0 );
                                        # go on to next test (since this was disabled)
                                        $this->clearSection();
@@ -600,6 +617,7 @@ class TestFileIterator implements Iterator {
         * mentioned before closing this section
         * @param bool $fatal True iff an exception should be thrown if
         * the section is not found.
+        * @return bool|string
         */
        private function checkSection( $tokens, $fatal = true ) {
                if ( is_null( $this->section ) ) {
@@ -672,6 +690,7 @@ class DelayedParserTest {
         * Called whenever we actually want to run the hook.
         * Should be the case if we found the parserTest is not disabled
         * @param ParserTest|NewParserTest $parserTest
+        * @return bool
         */
        public function unleash( &$parserTest ) {
                if ( !( $parserTest instanceof ParserTest || $parserTest instanceof NewParserTest )     ) {
index d8ed246..3d8612d 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -32,7 +32,7 @@ if ( defined( 'THUMB_HANDLER' ) ) {
        wfThumbHandle404();
 } else {
        // Called directly, use $_GET params
-       wfThumbHandleRequest();
+       wfStreamThumb( $_GET );
 }
 
 wfLogProfilingData();
@@ -43,19 +43,6 @@ $factory->shutdown();
 
 //--------------------------------------------------------------------------
 
-/**
- * Handle a thumbnail request via query parameters
- *
- * @return void
- */
-function wfThumbHandleRequest() {
-       $params = get_magic_quotes_gpc()
-               ? array_map( 'stripslashes', $_GET )
-               : $_GET;
-
-       wfStreamThumb( $params ); // stream the thumbnail
-}
-
 /**
  * Handle a thumbnail request via thumbnail file URL
  *